布斯算法给出了一种以有效方式乘以带符号 2 的补码表示的二进制整数的过程,即所需的加法/减法次数较少。它基于这样一个事实,即乘法器中的 0字符串不需要加法而只需移位,乘法器中的 1字符串从位权重 2^k 到权重 2^m 可以被视为 2^(k+1 ) 到 2 ^米。
与所有乘法方案一样,布斯算法需要检查乘法器位和部分乘积的移位。在移位之前,被乘数可以按照以下规则加到部分乘积中,从部分乘积中减去,或者保持不变:
- 在乘数中遇到字符串1 中的第一个最低有效 1 时,从部分乘积中减去被乘数
- 在乘数中遇到字符串0 中的第一个 0(前提是前面有一个“1”)时,将被乘数添加到部分乘积中。
- 当乘数位与前一个乘数位相同时,部分乘积不会改变。
Booths 算法的硬件实现——Booth 算法的硬件实现需要如下图所示的寄存器配置。
布斯算法流程图——
我们将寄存器分别命名为 A、B 和 Q、AC、BR 和 QR。 Qn 指定寄存器 QR 中乘法器的最低有效位。一个额外的触发器 Qn+1 被附加到 QR 以方便乘法器的双重检查。 展位算法的流程图如下所示。
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 题
- 门 IT 2006 |第 38 题
- 门 IT 2005 |问题 8
- 门 CS 1996 |问题 23