桶式移位器

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

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

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

  int1  = IN       , if S[2] == 0
        = IN   << 4, if S[2] == 1
  int2  = int1     , if S[1] == 0
        = int1 << 2, if S[1] == 1
  OUT   = int2     , if S[0] == 0
        = int2 << 1, if S[0] == 1

較大的桶式移位器會有更多的中間訊號。

成本
n位元資料的桶式移位器，需要的数据选择器數量為.。以下列出五種常見的資料字寬度及其桶式移位器需要的数据选择器數量：

 128位元 — 
 64位元 — 
 32位元 — 
 16位元 — 
 8位元 — 

在中，關鍵路徑的成本為（預估，不考慮線路延遲）：
 32位元：從18 FO4到14 FO4

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

相關條目

參考資料

外部連結

University of Hamburg for a useful Java Barrel shifter.
Xilinx Application Note  Implementation of Barrel shifter using Xilinx FPGAs.

延伸閱讀

数字电路
二进制算术
計算機算術