简单分享一下加法器
加法器分类如下:
1.半加器
2.全加器
3.多位加法器
3.1串行进位加法器
3.2进位跳跃加法器
3.3进位选择加法器
3.4超前进位加法器:不管几位最大延迟均为3T,进位逻辑为三级门电路延迟。
根据超前进位加法器中进位链c和输出s的物理实现方式不同,大致可分成以下三类:
递归超前进位加法器(Recursive Lookahead Carry Adder,简称RLCA),对于位宽更大的LCA如16,32,64比特LCA等可以并行生成所有的PG和进位C,但这会造成电路极大的扇入和扇出;另外可以根据4比特LCA级联而成,如16比特LCA可由4个4bit LCA级联组成。
分类超前进位加法器(Block Lookahead Carry Adder,BCLA),也称(section-carry-based carry-lookahead adder)
混合型超前进位加法器
3.5前缀加法器:即树型结构加法器,常见的有K-S,B-K,Sklansky和H-C等结构,其中K-S延迟logn最小,B-K面积相对于K-S小一半,功耗最低,延迟2logn-1,Sklansky延迟logn,扇出大,H-C属于折中方案。
3.6流水线加法器
3.7专用加法器(例:支持向量的快速加法器)
在乘法器实现中,需要使用加法器将部分积相加得到乘法计算结果。对于多个加数相加的情况,考虑并行加法树结构。
1.二叉树加法器
2.Wallace树:
使用HA和FA进行贪心压缩,对于任一行数大于3的列都进行压缩,最终将所有行压缩至两行,最终使用LCA全加器输出所加数的运算和。
3.Dadda树(达达树)
和Wallace树相似,Dadda树目标也是将部分积相加阵列进行压缩,区别在于达达树的压缩算法相较于Wallace树进行了改进,达达树结构只对必要的列进行压缩,极大的减少了HA和FA的使用。在时序上,Wallace树时序略快于Dadda树,但面积和功耗上,Dadda树结构优于Wallace树。
Dadda树压缩算法:
先定义目标高度序列:d1=2,dj = floor(1.5*dj-1} ,序列为:2,3,4,6,9,13… ;每一层仅将超过目标高度的列压缩至目标高度,其余列保留,不额外压缩,因此可以用最少FA/HA将其压至目标高度,其余列直接进入下一层。
以8×8乘法为例,初始8行部分积:
1. 确定目标序列:8位乘法初始列最高高度为8,匹配目标序列 9→6→4→3→2 ;
2. 第1层压缩(目标高度6):仅压缩高度>6的列,用全加器将其压至6;高度≤6的列直接保留,不压缩;
3. 第2层压缩(目标高度4):仅压缩高度>4的列,压至4;其余列保留;
4. 迭代压缩:依次按目标高度3、2压缩,最终所有列高度≤2,只剩2行部分积;
5. 末级加法:2行送入快速加法器,得到最终乘积。

上图简明的介绍了Wallace和Dadda的压缩过程。
Dadda树实现RTL代码指路:https://blog.csdn.net/weixin_43698385/article/details/122199356?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-1-122199356-blog-158117996.235v43pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=3
4.流水线树
将树型结构与流水线技术相结合,从而缓解树型结构中组合逻辑的时序压力,将各层组合延迟分割在各级寄存器之间。
在一个典型的流水线加法器树中,操作数像树根一样输入,最终在树顶汇聚为一个和。假设有N个输入,第一层会将它们两两配对进行加法运算,产生N/2个中间和;第二层再对这些中间和进行两两相加,产生N/4个结果,以此类推。对于N个操作数,总共需要 logN层加法。在每一层(或每几层)加法器之后插入寄存器(D Flip-Flops)。如下图所示:

5.串行级联加法器
顾名思义,就是将多个输入逐级相加,面积小,时序路径长。

浙公网安备 33010602011771号