快速理解Booth乘法器

串行乘法器

回忆竖式乘法,首先每一位与另一个数相乘,再将所得的积全部相加。在二进制中,相乘结果甚至只有它本身和0! 也就是只需要一个选择器和一个加法器就能实现串行乘法器,代价是很长的计算周期。

乘法原理.jpg

Booth编码

核心思想:乘法计算中如果出现0则他的部分积为0,如上图右侧PP1、PP2,Booth变换能增多0的个数(具体实现请参考附录),但不能减少部分积的个数,在并行硬件电路设计中还是需要相当数量的加法器。改进booth编码能减少部分积个数,基4booth编码能减少一半部分积个数,如图:

基4Booth编码.jpg

5-3压缩器(4-2压缩器)

除了减少部分积个数,累加器延迟也是影响计算速度的重点,如图注意红色部分延迟:

image-upwm.png

加以改进就能实现一个3-2压缩器,如图

image-wdfm.png

可以同时计算三个加数输出两个加数,还有一中压缩率更高的5-3压缩器具体实现参考附录。

最后

将所有部分积压缩成两个加数,使用加法器相加就实现了一个Booth加法器。

image-clcb.png

附录

本文主要参考乘法器的布斯算法原理与VERILOG实现 - 知乎 (zhihu.com)