组合电路乘法器
普通版
组合电路乘法器相对于时序电路乘法器,运算速度快很多,但要占用大量的面积,并且与字长的平方成正比,所以只在小字长乘法时可以采用
最常规的乘法器,图中+为全加器,有些两输入的全加器可以用半加器替代,但代码写起来麻烦,所以我没用
module
8位乘法器大致需要7*8=56个全加器
该方法虽然易于理解,但由于每一个全加器都要等待上一行和行内上一个全加器的输出都到齐才能开始计算,所以关键路径很长。8位普通组合乘法器至少要有22级延迟。
进位保留版
通过使用进位保留的思想,使用大量全加器构成进位保留加法器,将进位从行内剥离,每行内的各个加法器可以并行计算,不用再等前一个加法器的进位输出,这样大大减少了延时
即第一次计算P1+P2+P3,以后每一次加一个部分积,共需6级延迟
该方法虽然大大减少了延时,但实现太幼稚,使用了过多的全加器,有很大的优化空间
Wallace树
下图即为采用了Wallace树的乘法器结构,共有四级压缩和一级加法。这里将全加器看作3:2压缩器,将许多个待加数逐级压缩,直到只剩两数即可
经过仔细优化,新的设计共用到了38个全加器、17个半加器和一个12位超前进位加法器
由于每一级内的各个加法器均是并行的,所以只需4级延迟即可得到最后一层。由于最后一层已经被压缩为两数相加,所以可以使用超前进位加法器快速求和。
最终延时只有5级
查找表乘法器
使用RAM将乘法所有可能的结果保存起来,然后将相乘的两个数当作地址来查找对应结果。这是一种面积换速度的策略,只需一个时钟周期即可完成一次乘法运算,但占用的储存面积随字长增加迅速增长,只适合位宽很小的情况
module
这几种组合电路方案耗费面积太大,在不是那么追求速度或者缩小面积很重要的场合,可以使用时序乘法器。它不仅使用更少的加法器,还可以通过插入寄存器实现流水线操作提高吞吐率。并且通过行为级描述,该乘法器是参数化的,所以适合代码复用。
基本时序乘法器
最自然的想法是,不再将组合电路内的每个部分积都分配全加器,而是不断复用唯一的一行,将下一行的部分积移位后累加即可。这样将空间复杂度从O(N^2)降到了O(N),但时间复杂度从O(1)增加到了O(N)。
按照常规乘法规则,