Dadda和Wallace乘法器的区别
Dadda是从bottom到top反向推算如何进行数据压缩,高层是低一层的1.5倍取整。最低一层是2,所以从下到上是2,3,4,6,9,13...
Wallace乘法器则是遇见三列可压缩的数据就可以压缩,所以可以这样计算:
新stage层数 n, 旧stage层数k,则
n=2*(k/3取整)+kmod3,如k=8时,则n=2*2+2=6
具体实施时,wallace一定要维持3:2的压缩,dadda则是按着规定的层数递减即可,最终dadda会比wallace省用很多加法器。
压缩的时候需要进行递补的原则,比如 竖着的三位如若使用FA进行压缩,就会只剩一位,那么此时需要后面的列使用HA来传递一位补位。具体可以根据以下网站的图片来理解。https://stackoverflow.com/questions/54374925/differences-between-wallace-tree-and-dadda-multipliers
具体而言当使用wallace来压缩时,因为对于三列的阵列来说,当遇到第一个三列进行压缩时,FA虽然能压缩3bit的数据到2bit,但是cout是传递到后一列的,所以实际上,每一列的压缩其实等价于是4->2。而第一个使用3列的部分,需要从前一列得到补位来维持两列,所以前一位需要使用HA来传递一位进位。
而使用dadda压缩时则不那么激进,比如我们现有最大8列数据,我们只需要进行最简单化的8->6压缩即可。所以,对于8列数据的隔壁7列数据来说,使用一个HA即可,实现7->6。而7列数据的进位被传递到了拥有8列数据的阵列,那么实际上8列会变成9列,所以需要进行9-3,即使用一个FA和一个HA。那么同理,8列数据左边的数据也会得到2个进位,从而变成7+2=9列数据,所以也需要一个FA和一个HA。以此类推。最终实现6列数据即可。正因如此,dadda会比wallace省用很多加法器。
Comments
Post a Comment