答案 0 :(得分:2)
两者非常相似。代替传统的基于行的算法,它们都旨在实现乘以A * B乘以1 /,然后将A与b_i位相乘,2 /为每一列计数位,直到只有两行,并且3 /快速执行最终加法。加法器。
我研究了Dadda乘法器,但这是很多年前的事,我不确定是否记住所有细节。据我所知,主要区别在于计数过程。
Wallace引入了“ Wallace树”结构(在某些设计中仍然有用)。给定n位,这可以计算该组中1位的位数。 (n,m)华莱士树(其中m = ceil(log_2 n))给出n个输入中第1位的位数,并以m位输出结果。这是一个组合计数器。例如,下面是由全加器构成的(7,3)华莱士树的示意图(即(3,2)华莱士树)。
如您所见,如果输入位的权重为2 ^ 0,则此树将生成逻辑权重为2 ^ 0、2 ^ 1和2 ^ 2的结果。
这可以快速减少列的高度,但是就门数量而言可能是低效的。
Luigi Dadda不使用这种积极的减少策略,而是尝试使色谱柱的高度保持平衡。仅使用完整的(或一半的加法器),并且每次计数/减少都会生成权重为2 ^ 0和2 ^ 1的位。减少过程的效率较低(可以从图中的更多行中看到),但是门数却更好。 Dadda策略本来也应该节省时间,但是根据随附的论文,我不知道这是不正确的。
主要兴趣 Wallace / Dadda乘法器可以实现〜log n时间复杂度的乘法,这比带有进位保存加法器的传统O(n)阵列乘法器要好得多。但是,尽管具有理论上的优势,但它们实际上已不再使用。当前的体系结构比吞吐量更关注吞吐量而不是等待时间,并且更喜欢使用比可以有效地流水线操作更简单的阵列结构。实现Wallace / Dadda结构是一个真正的噩梦,除了它们的不规则结构外,向它们添加管道非常复杂。
请注意,其他乘数设计的对数时间复杂度也有所提高,采用了更规则且可实施的分而治之的策略,例如Luk-Vuillemin乘数。