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