2012年10月26日 星期五

Bit-Banding

什麼是Bit-Banding?

Bit-Banding是一種讓使用者atomic修改memory中某個bit的方法,比如說常見的bit set或是bit clear指令。Bit-Banding把一塊比較大memory中的每個word都對應到一塊較小memory中的每個單一bit,如下圖所示:
上圖把一塊32MB SRAM的每個word都對應到一塊1MB SRAM中的每個bit。其中比較大的memory叫做bit-band alias region,比較小的memory叫做bit-band region。當我們access bit-band alias region中的一個word時,會自動對應到bit-band region的bit。而此Read-Modify-Write的過程被設計成不可被中斷的。因此當我們做bit set以及bit clear時是atomic。

以上圖來說明,當我們把0x23FFFFE0設定成1就相當於把0x200FFFFF的bit[0]設定成1。相反地,當我們把0x23FFFFE0設定成0就相當於把0x200FFFFF的bit[0]設定成0。附帶一提,把值寫到0x23FFFFE0的bit[31:1]是沒有意義的,不會產生任何作用。

Bit-Banding的好處

  1. 減少code size,不需要使用mask對特定bit做修改
  2. 由於atomic的特性,可用來實做mutex以及semaphore

2 則留言:

  1. 當我們把0x23FFFFE0設定成1就相當於把0x200FFFFF的bit[0]設定成"""0"""?。相反地,當我們把0x23FFFFE0設定成0就相當於把0x200FFFFF的bit[0]設定成0。

    是否是1呢?

    回覆刪除
  2. 感謝指正,這邊是我打錯了。已修正

    回覆刪除