在修改的展位算法中,添加到LSB的额外0有什么作用?

时间:2019-06-30 16:32:21

标签: algorithm bit extra lsb

我试图找到这个问题的答案,但是关于它的唯一其他线索并未提供我所希望的详细信息。

谁能告诉我为什么修改展位算法中LSB右边需要额外的0?

它到底是做什么的,为什么它必须为0而不是1?

我知道您需要在Radix-4修改的Booth算法(或通常为iirc)中输入偶数个比特,并且它使用3比特来决定必须执行的操作,例如加2 * multiplicand 。

但是添加的0不仅会在那里,所以我们的位长度可以除以3,对吧?

任何帮助解释为什么我们需要额外的0以及为什么必须为0的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

假设我们必须乘以 A×B ,其中 B =(b n-1 ... b 1 b 0
标准或修改版本的Booth都是通过重写术语 b i 来工作的。

让我们看一下更简单的标准Booth。
如果它使 B 保持不变,则重写是正确的。
如果 B 用二进制补码编码,则其值为
B = −b n-1 ×2 n-1 + ∑ i = 0 n-1 b i ×2 i
注意由于二进制补码的存在,负数 n-1 处的负数。

现在重写包括将每个 b i 更改为 b' i = b i - b i-1
如果我们现在这样说
B = ∑ i = 0 n-1 b' i ×2 i
b' i 替换为 b i -b i-1 < / em>在此表达式中, B 的值保持不变,只要对于 i = 0 ,我们添加一个额外的位 b i-1 = 0

当然,我们可以为 i = 0 添加一个特殊规则:
如果 i≠0 b' i = b i -b i-1
否则 b' i = b i
但是Booth算法的主要动机是用正则表达式替换负数为负的特殊情况,即正负号n <1。独立于 i
实际上,在设计电路时,仅复制一个运算符要比根据位位置考虑特定条件容易得多。因此,最好的解决方案是在LSB处添加一个额外的位。

对于经过修改的Booth,情况类似。
我们尝试用数字 b'' 2i 重写 b
B = ∑ i = 0 n / 2-1 b'' 2i ×2 2i < / em>
重写以4为基,表达式更复杂,要生成数字 b'',我们需要考虑到b 2i + 1 ,b < sub> 2i 和b 2i-1

这是对应的真值表。

b_2i+1    b_2i    b_2i-1   |    b''_2i
-----------------------------------
0         0       0        |    0
0         0       1        |    1
0         1       0        |    1
0         1       1        |    2
1         0       0        |   -2
1         0       1        |   -1
1         1       0        |   -1
1         1       1        |    0

可以证明, B 的数值不变,提供,我们在权重为-1的时候在0处加了一点 b -1 = 0 。实际上, b'' 2i = − 2×b 2i + 1 + b 2i + b 2i-1 < / sub> ,如果表达式 B = ∑ i = 0 n / 2-1 b'' 2i 可以替换sub>×2 2i 来查找 B 的补码值。
同样,我们可以不同地考虑 i = 0 的情况,并说 b'' 0 = − 2×b 1 + b 0 ,但这会增加额外的复杂性。

所以回答您的问题:

  

谁能告诉我为什么修改展位算法中LSB右边需要额外的0?

此额外的位简化了重写算法,并避免在 i = 0

时处理特殊情况
  

它到底是做什么的,为什么它必须为0而不是1?

如果该位为1,则重写后我们不能保持 B 的值不变。这对于确保乘法算法的正确性至关重要。