了解改进的Baugh-Wooley乘法算法

时间:2019-01-19 14:40:57

标签: algorithm math binary logic multiplication

对于修改后的Baugh-Wooley乘法算法,为什么是(A0 * B5)而不是仅仅(A0 * B5)?

!(A1 * B5),!(A2 * B5),!(A3 * B5),!(A4 * B5),!(A5 * B4),!(A5 * 3),!( A5 * B2),!(A5 * B1)和!(A5 * B0)

此外,为什么还有两个额外的“ 1”?

Modified Baugh-Wooley multiplication algorithm

3 个答案:

答案 0 :(得分:2)

在带符号的6位2s补码表示法中,位的位置值为:

-32  16   8   4   2   1

请注意,最高位为负值。但是,在mod 64上执行加,减和乘运算时,该负号对这些运算的工作方式完全没有影响,因为32 = -32 mod 64。

您的乘法不是 在mod 64中执行的,因此必须考虑符号。

想到乘法的一种方法是将6位数字扩展为12位,然后在mod 4096中执行乘法。扩展有符号数时,将复制最高位,因此-32变为-2048 + 1024 + 512 ... +32,它们的总和为-32。因此,扩展有符号数并相乘。我将用3位,乘以mod 64:

Given:         Sign-extended:
A2 A1 A0       A2 A2 A2 A2 A1 A0
B2 B1 B0       B2 B2 B2 B2 B1 B0

Multiply:
A0B2    A0B2    A0B2    A0B2    A0B1   A0B0
A1B2    A1B2    A1B2    A1B1    A1B0        
A2B2    A2B2    A2B1    A2B0
A2B2    A2B1    A2B0
A2B1    A2B0
A2B0

由于我们在多个位置复制了相同的位,因此您将在多个位置看到相同的位乘积。

A0B2出现4次,总位置值为60或15 << 2,依此类推。让乘数写在:

                        A0B2*15 A0B1   A0B0
                A1B2*7  A1B1    A1B0        
        A2B2*5  A2B1*7  A2B0*15

同样,由于采用模块化算法,* 15和* 7与* -1相同,* 5与* 1相同:

                       -A0B2    A0B1   A0B0
               -A1B2    A1B1    A1B0        
        A2B2   -A2B1   -A2B0

这种模式开始看起来很熟悉。现在,当然-1不是位值,而是〜A0B2 = 1-A0B2,因此我们可以将-A0B2转换为〜A0B2,然后减去我们添加的额外1。如果我们对所有减去的乘积执行此操作:

                       ~A0B2    A0B1   A0B0
               ~A1B2    A1B1    A1B0        
        A2B2   ~A2B1   ~A2B0
                 -2       -2

如果我们将那些-2的位值相加并将其扩展为等效位,则会发现图中其他1的来源:

                       ~A0B2    A0B1   A0B0
               ~A1B2    A1B1    A1B0        
        A2B2   ~A2B1   ~A2B0
   1              1

答案 1 :(得分:0)

  

为什么还要再加上两个“ 1”?

请参阅Matt Timmermans的回答中的先前解释

注意:两个补码中的“ -2”为110,这会影响进位,因此又增加了两个“ 1”

  

为什么翻转某些部分乘积位的值。

这是由于MSB(A5和B5)中的有符号位。

此外,在{_3}}的帮助下,在A_WIDTH!= B_WIDTH的情况下,请参见下面的针对改进的baugh-wooley算法的对策。

others

我为此算法写了Countermeasure for modified baugh-wooley algorithm in the case of A_WIDTH != B_WIDTH 希望这篇文章对一些读者有所帮助。

答案 2 :(得分:-1)

简短的回答是因为2's-complement表示是如何工作的:高位实际上是符号位,因此1表示-。换句话说,你必须减去

A5*(B4 B3 B2 B1 B0) << 5

B5*(A4 A3 A2 A1 A0) << 5
从总和

(请注意,A5*B5被再次添加,因为它们都具有相同的-符号)。而这两个1是用这两个减法加上-X的结果。

如果您需要更多细节,则可能只需要重新阅读2的补码工作原理,然后重新阅读Baugh-Wooley乘法算法背后的全部数学原理即可。没那么复杂。