桶式移位器
桶式移位器(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比特资料的桶式移位器,需要的数据选择器数量为 .[1]。以下列出五种常见的资料字宽度及其桶式移位器需要的数据选择器数量:
- 128位 —
- 64位 —
- 32位 —
- 16位 —
- 8位 —
在FO4中,关键路径的成本为(预估,不考虑线路延迟):
- 32位:从18 FO4到14 FO4[2]
用途
桶式移位器常用的场合是用硬件实现浮点数运算时,若要进行浮点的加法或减法,两个数字的有效位数需要对齐,也就是将较小的数字往右移,增加其次幂,直到两个数字的次幂相等为止,实际作法是将二数的次幂相减,再利用桶式移位器右位移较小的数字,位移比特数即为二数的次幂的差。若不是用桶式移位器,而是一般较简单的移位器,位移n比特需要n个时脉周期。
相关条目
- 环式移位
参考资料
- ^ Kroening, D.; Strichman, Ofer. Decision Procedures. Springer. 2008.
p.159.
- ^ Revisiting the FO4 Metric. realworldtech.com. [2015-02-08]. (原始内容存档于2012-03-13).
外部链接
- University of Hamburg for a useful Java Barrel shifter.
- Xilinx Application Note (页面存档备份,存于互联网档案馆) Implementation of Barrel shifter using Xilinx FPGAs.
延伸阅读
- Kroening, Daniel; Strichman, Ofer. Decision Procedures. Springer. 2008. ISBN 978-3-540-74104-6.
本条目部分或全部内容出自以GFDL授权发布的《自由在线电脑词典》(FOLDOC)。