Booth算法给出了一种以有效方式将带符号2的补码表示形式的二进制整数相乘的过程,即所需的加/减次数较少。它基于这样的事实:乘法器中的0字符串不需要加法,只需要移位,乘法器中的1字符串从位权重2 ^ k到权重2 ^ m可以视为2 ^(k + 1)到2 ^ m。
像在所有乘法方案中一样,booth算法需要检查乘法器位和部分乘积的移位。在移位之前,可以根据以下规则将被乘数添加到部分乘积,从部分乘积中减去或保持不变:
- 在乘数的字符串1中遇到第一个最低有效1时,从部分乘积中减去被乘数
- 一旦在乘数的0字符串中遇到前一个0(假设存在先前的“ 1”),被乘数就被添加到部分乘积。
- 当乘数位与前一个乘数位相同时,部分乘积不会更改。
展位算法的硬件实现–展位算法的硬件实现需要下图所示的寄存器配置。
展位的算法流程图–
我们将寄存器分别命名为A,B和Q,AC,BR和QR。 Qn指定寄存器QR中乘法器的最低有效位。 QR上附加了一个额外的触发器Qn + 1,以方便对乘法器进行双重检查.booth算法的流程图如下所示。
AC和附加的位Qn + 1最初被清除为0,并将序列SC设置为等于乘法器中位数的数字n。检查乘数Qn和Qn + 1中的两位。如果两个位等于10,则表示已遇到字符串中的第一个1。这需要从AC中的部分乘积中减去被乘数。如果2位等于01,则表示遇到了0字符串中的第一个0。这要求将被乘数添加到AC中的部分乘积中。
当两个位相等时,部分乘积不变。因为被乘数的加法和减法相互跟随,所以不会发生溢出。因此,相加的2个数字始终具有相反的符号,这是排除溢出的条件。下一步是右移部分乘积和乘数(包括Qn + 1)。这是算术右移(ashr)操作,其中AC和QR向右移,而AC中的符号位保持不变。序列计数器递减,计算循环重复n次。
示例–下面显示了n = 4时Booth算法的数值示例。该示例显示了-5和-7的逐步乘法。
MD = -5 = 1011, MD = 1011, MD'+1 = 0101
MR = -7 = 1001
The explanation of first step is as follows: Qn+1
AC = 0000, MR = 1001, Qn+1 = 0, SC = 4
Qn Qn+1 = 10
So, we do AC + (MD)'+1, which gives AC = 0101
On right shifting AC and MR, we get
AC = 0010, MR = 1100 and Qn+1 = 1
OPERATION | AC | MR | Qn+1 | SC |
---|---|---|---|---|
0000 | 1001 | 0 | 4 | |
AC + MD’ + 1 | 0101 | 1001 | 0 | |
ASHR | 0010 | 1100 | 1 | 3 |
AC + MR | 1101 | 1100 | 1 | |
ASHR | 1110 | 1110 | 0 | 2 |
ASHR | 1111 | 0111 | 0 | 1 |
AC + MD’ + 1 | 0010 | 0011 | 1 | 0 |
乘积计算如下:
Product = AC MR
Product = 0010 0011 = 35
最佳情况和最坏情况:
最好的情况是当乘法器中有一个大的连续的1和0的块时,因此进行加减运算的逻辑运算次数最少。
最糟糕的情况是当乘法器中有成对的0和1,即01或10,因此需要最大的加法和减法次数。
门实践问题–
- GATE IT 2008 |第40章
- GATE IT 2006 |第38章
- GATE IT 2005 |问题8
- GATE CS 1996 |问题23