桶式移位器
编辑桶形移位器是一种数字电路,可以将数据字移位指定位数,而无需使用任何时序逻辑,仅使用纯组合逻辑,即它本身提供二进制运算。 然而,理论上它也可以用于实现一元运算,例如逻辑左移,在受固定数量限制的情况下(例如地址生成单元)。 实现桶形移位器的一种方法是作为一系列多路复用器,其中一个多路复用器的输出以取决于移位距离的方式连接到下一个多路复用器的输入。 桶形移位器通常用于在现代微处理器中移位和旋转 n 位,通常在单个时钟周期内进行。
例如,采用一个四位桶形移位器,其输入为 A、B、C 和 D。移位器可以将位 ABCD 的顺序循环为 DABC、CDAB 或 BCDA; 在这种情况下,不会丢失任何位。 也就是说,它可以将所有输出向右移动最多三个位置(从而形成 A、B、C 和 D 的任意循环组合)。 桶形移位器有多种应用,包括作为微处理器中的有用组件(与 ALU 一起)。
实施
编辑最快的移位器被实现为完整的交叉开关,其方式类似于上面描述的 4 位移位器,只是更大。 这些产生的延迟最少,输出总是在要移位的输入后面有一个门延迟(在允许移位计数解码器稳定所需的一小段时间之后;然而,这种损失仅在移位计数发生变化时才会发生)。 然而,这些交叉开关移位器需要 n2 个门来进行 n 位移位。 正因为如此,桶形移位器通常被实现为并行的 2×1 多路复用器的级联,这允许大量减少门数,现在只增加 n x log n; 然而,传播延迟更大,随着 log n 增长。
对于 8 位桶形移位器,使用两个中间信号,它们根据 S[2] 和 S[1] 的值移动四位和两位,或传递相同的数据。 然后该信号由另一个多路复用器移位,该多路复用器由 S[0] 控制:
int1 = IN ,如果 S[2] == 0 = IN << 4、如果S[2] == 1 int2 = int1 ,如果S[1] == 0 = int1 << 2、如果 S[1] == 1 OUT = int2 ,如果 S[0] == 0 = int2 << 1,如果 S[0] == 1
较大的桶形移位器具有额外的级数。
级联移位器与全交叉移位器相比还有一个优势,即不需要任何用于移位计数的解码逻辑。
费用
编辑一个 n 位字所需的多路复用器数量为 n log 2 n {displaystyle nlog _{2}n} 。
使用
编辑桶形移位器的常见用法是在浮点运算的硬件实现中。 对于浮点加法或减法运算,两个数的尾数必须对齐,这需要将较小的数右移,增加其指数,直到它与较大数的指数匹配。 这是通过减去指数并使用桶形移位器在一个周期内将较小的数字向右移动差值来完成的。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195890/