
当利用BOOTH编码和符号位扩展后就得到下图中第一个图,图中红色圆点代表的是原有的操作数,而蓝色圆点代表的是进行3-2压缩后的结果。绿色圆点代表的是未经过计算直接传递下来的结果。
乘法部分积求和有很多种处理思路,本文中给出的是4次3-2压缩+一次全加计算的思路。





图中的压缩过程是经过验证的感兴趣的同学,可以自行参考前两篇文章结合这第三篇文章,自行编写一些Verilog代码。然后自己编写一些测试激励验证一下正确性。这里面提示一点,简单的数据正确很容易,关键点在于怎么保证所有16位数据的计算都是正确的。
容易出错的点:
1、符号位的处理,有符号数和无符号数之间的乘法
2、如果是有符号计算,当被乘数是负数时,这里需要将补码转成原码进行计算。考虑时序的话,这里补码转原码时需要进行取反+1的操作,这里的+1操作有巧妙处理方式。
3、每个部分积前面的S的值,怎么得到正确的值。
4、E的值怎么得到正确的值。
上面这些都是实战验证中遇到的问题点,大家在实操时很可能会遇到。
另外感兴趣的同学,如果需要原代码和测试环境的,可以关注同名公众号留言或私信。如果需求强烈我会把源码分享给大家。



