桶式移位器

桶式移位器(barrel shifter)是一種數位電路,可以在一個時脈週期內,將資料字進行特定位元數的移位。桶式移位器可以用一串的数据选择器實現,某一個数据选择器的輸出是其他数据选择器的輸入,其關係則視要位移的位元數而定。

例如,以一個四位元的桶式移位器為例,一開始的輸入是A, B, C及D,桶式移位器可以由輸入ABCD得到DABCCDABBCDA,所有位元的資訊都會留下來,只是位置以循環組合的方式改變,桶式移位器有許多不同的應用,是微處理器中的一個重要成份。

實現
桶式移位器可以用平行的2×1数据选择器的組合而成。對於8位元的桶式移位器,需要二個中間的訊號,分別表示位移四位元、二位元或是不位移,這是依S[2]和S[1]的值而定,訊號會再經過数据选择器位移一位元,這是由S[0]控制。

int1 = IN , if S[2] == 0
= IN \scriptstyle n\log_2n.。以下列出五種常見的資料字寬度及其桶式移位器需要的数据选择器數量:

  • 128位元 — \scriptstyle 128\times\log_2(128) = 128\times7 = 896
  • 64位元 — \scriptstyle 64\times\log_2(64) = 64\times6 = 384
  • 32位元 — \scriptstyle 32\times\log_2(32) = 32\times5 = 160
  • 16位元 — \scriptstyle 16\times\log_2(16) = 16\times4 = 64
  • 8位元 — \scriptstyle 8\times\log_2(8) = 8\times3 = 24

在中,關鍵路徑的成本為(預估,不考慮線路延遲):

  • 32位元:從18 FO4到14 FO4

用途
桶式移位器常用的場合是用硬體實現浮点数運算時,若要進行浮點的加法或減法,兩個數字的需要對齊,也就是將較小的數字往右移,增加其次幂,直到兩個數字的次幂相等為止,實際作法是將二數的次幂相減,再利用桶式移位器右位移較小的數字,位移位元數即為二數的次幂的差。若不是用桶式移位器,而是一般較簡單的移位器,位移n位元需要n個時脈週期。

相關條目
*

參考資料
外部連結
*[https://web.archive.org/web/20130115120055/http://tams-www.informatik.uni-hamburg.de/applets/hades/webdemos/10-gates/60-barrel/shifter8.html University of Hamburg] for a useful Java Barrel shifter.
*[http://www.xilinx.com/support/documentation/application_notes/xapp195.pdf Xilinx Application Note] Implementation of Barrel shifter using Xilinx FPGAs.

延伸閱讀
*

评论 (0)

  • 还没有评论,来抢沙发吧。