基于Booth乘法和Wallace树的乘法器优化思想

基于Booth乘法和Wallace树的快速乘法器

为了理解Booth乘法和Wallace数如何让乘法器变得更快:

先考虑不优化的8位乘法器实现,即8个16位数字累积共进行7次加法运算,可以认为一次16位加法用到16个全加器,则共需要112个全加器件,只计算全加器的开销,至少需要112$\times$5=560个门

Booth乘法

Booth乘法的实现依据在于补码乘法可写成以下的形式:
在这里插入图片描述

相比起原始乘法器,每次根据y的一位来决定当前是+x/0,补码乘法则需要每次观察y的两位,以决定下一次加法是+x/-x/0,而Booth乘法则每次观察y的三位,以决定下一次加法是+x/+2x/-x/-2x/0

布斯乘法每次观察完后y右移2位,相当于一次完成了2位y的观察。

因此,我们需要进行加法的操作数,也从原来的8个变成了4个

例子

以4位乘法为例来看看布斯乘法如何减少了操作数的数量

如果提升y的判断位数,是否可以进一步提升乘法器的效率?

否,Booth算法的三位判决在硬件实现中是一个平衡点,如果使用更多位数,虽然理论上可以减少生成的x数量,但增加y带来的复杂性可能会抵消这些好处。

我们使用判断3位的布斯乘法,则实际上减半了操作数的数量

原本是8个16位数字累积共进行7次加法运算,需要112个全加器,经由布斯乘法优化,则仅需要4个16位数字进行3次加法,需要48个全加器

Wallace树

Wallcace树基于半加器和全加器进行优化。

我们认为借用16位加法器来计算仅仅4个16位数字实在是太浪费了。因此我们不再横向地整个把16位数字加起来,而是纵向地,每次只考虑4位数字的加法,在本位产生一个数字,并把进位传递给后面的wallace_4模块

如下是wallace_4模块计算的一个例子。其中每个方框代表着一个wallace_4模块,它接受cin作为输入,计算出本位(S),并把进位©传递给下一位。值得注意的是所有的进位并不只能为1,wallace_4模块会将所有本位处理不了的数字丢给下一个wallace_4

这里必须及时指出,如上图所示的计算过程并不完全准确。实际上,wallace模块不会把所有的进位都传递给下一位,而是如果存在进位,wallace会自己先保留1位,然后剩下的向前传递。原因在我们讲完wallace模块的实现就会知道。

wallace_4实现

如下是wallace_4的实现,输入4位计算数,1位Cin;计算的出本位的1位C和一位S,并将一位进位传递到下一模块

当将共16个wallace_4堆叠起来,就可以执行4个16位数的加法了,计算结果得是两个16位数字:C[15:0]和S[15:0]

因此我们需要16个wallace_4,成本为32个全加器;还需要将C和S相加以得到最终的结果,即一次16位加法,成本仍为48个全加器

为什么采用wallace_4优化得到的成本不变?

因为输入只有4位,太少,导致优化空间不足;wallace树对于器件的优化是log级的,输入越多,优化效果越好。但是我们这里作为例子介绍了wallace树的优化思想,想必读者能够理解了

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值