我试图找到这个问题的答案,但是关于它的唯一其他线索并未提供我所希望的详细信息。
谁能告诉我为什么修改展位算法中LSB
右边需要额外的0?
它到底是做什么的,为什么它必须为0而不是1?
我知道您需要在Radix-4修改的Booth算法(或通常为iirc)中输入偶数个比特,并且它使用3比特来决定必须执行的操作,例如加2 * multiplicand 。
但是添加的0不仅会在那里,所以我们的位长度可以除以3,对吧?
任何帮助解释为什么我们需要额外的0以及为什么必须为0的帮助将不胜感激。
答案 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 的值不变。这对于确保乘法算法的正确性至关重要。