booth算法乘法器
上一节
下一节
Booth算法乘法器原理:
有符号数的乘法可以用其补码的乘法来实现(两个以补码形式表示的整数A、B,将A、B的原码计算乘法得到的结果C,正好是AB的补码);
移位相加型乘法器需要完N次移位、N次加法(N为乘数位宽);
当乘数中存在0时,可以不进行加法,直接移位,因此减少乘数中1的数量,可以减少加法的次数;
将乘数进行等价变换,构造另一个四进制码,可以保证其中1的数量少于N/2,此时部分bit可能取值为0、1、-1;
使用新的二进制码,通过移位相加实现乘法运算,当乘数某bit为-1时,应该减去被乘数,可以通过加补码实现。


Booth算法的Verilog实现:

待时序逻辑时再进行实现
Booth算法存在的问题:
不能减少移位的次数;
不能确定乘数中0和1的位置,从而难以设计加法器的位置;
改进的Booth算法:
将乘数进行等价变换,变为八进制码,可确保其中一半为0(每间隔一个bit有一个0),此时不为0的bit有5种可能:-2、-1、0、1、2;
乘法采用移位相加型设计,由于乘数为0时只移位,且乘数间隔bit为0,因此只需要完成N/2次移位,每次移位2bit;
通过乘数补码中连续三个bit的取值,可以得到不为0的bit的取值,因此不需要将等价变换后的码显式的表达出来;
实现框图:

计算案例:
参考资料:
wiki:Booth算法
知乎:如何理解Booth算法?https://www.zhihu.com/question/37637775

