目录
一、进位选择加法器
二、Sklansky加法器
三、Verilog设计
Sklansky加法器是另一种并行高速的树形加法器,由Sklansky于1959年发表,该加法器对比特位进位层级分组,根据对不同比特组所有可能的进位计算所有可选的和与进位,所以也叫Conditional-Sum Addition。
Sklansky加法器使用了进位选择加法器:
其结构如下:
更多详细参考往期文章:https://zhuanlan.zhihu.com/p/102207162
我们先看下Sklansky在其论文中的一个进位选择加法器的例子(只取低8位部分做详细,如果阅读论文时,对于其表格数据由来不明的话可以细看以下部分):
x = 0 1 1 0 1 1 0 1
y = 1 0 1 1 0 1 1 0
第一级:
当c=0:
其中S表示每一位的和,C表示对于高位的进位;字母的上标表示进位为0;“+”表示异或,如0+1=1, 1+1=0;“.”表示与操作,如0.1=0, 1.1 = 1;i表示比特位i=0,1,…,7;
所以S和C的结果为(上图中序号1部分,红色表示改位结果已经计算出):
当c=1:
因为两数相加,最低位的进位已假定为0,只显示了进位为0的结果,为了对齐,用“-”表示。
所以S和C的结果为(上图中序号2部分):
第二级:(绿色字体表示对高位进位有用)
在这一级,开始以2比特为1组,
第一级C0输出的结果C0=0,所以第1组中,选择已经计算出的结果S1=1,C1=0
第2-4组又分别以组的单位分别假设C=0和C=1的情况,相当于2比特加法器,
当C=0:
S和C的结果为(上图中序号3部分)
当C=1:
S和C的结果为(上图中序号4部分)
其实C=1这部分的S和C只要照抄下来就好了,这个例子中每一位对高位都有进位,忽略低位的进位,以组为单位,所以只有每组的高比特对于下一级有用。
第三级:
根据2比特一组的进位做出下一组S和C的选择:
显然第一组中进位C1=0,所以第2组的S和C选择当C=0的S和C情况
再以4比特分组,也就是4比特加法器,将之前2比特一组的进位加入到其高一组的数据中(上图中序号5,6部分)
第四级:
根据第一组输出的进位C3=1,所以,选择假设C=1的S和C的输出,即(上图中序号7,8部分):
所以最终结果为:
以上过程与手算一致,只不过其实实际过程没有不必这么复杂,从表格上去细究容易混乱,可以先看CSA的原理。
Sklansky设计了基于进位选择器的7比特加法器:
如果Si或Ci上标中含有k个“*”,则表示当前的Si或Ci基于S(i-k-1)或者C(i-k-1)等于0或者1 的假设得到,假设为0或者1取决于Si或Ci的上标。如
其中H,Q1,Q2,Q3分别如下图所示:
在H,Q1,Q2,M计算单元示意图中“。”表示相与操作,I表示取反操作,V表示或操作。
将Sklansky加法器的结构通过树形结构展示将会变得更加直观,如下图所示:
图中T=0,1,2,3,4的节点计算单元均不同,每一级的计算单元都类似。黄色表示最后的进位与和都在此单元节点输出,而且标识了前一级进位向高一级的进位传递的过程。
基于以上结构设计一个16比特的Sklansky加法器,分二部分:
(1)设计进位选择加法器(CSA),分别需要设计1-bit CSA, 2-bit CSA, 4 bit CSA和8比特CSA,可以通过参数化实现;每个CSA中,对于进位为0的情况,使用全加器组成;对于进位为1的情况,使用全减器。
(3)将每一层进位选择加法器进行级联,并根据不同的比特分组,用低一级的进位选择得到进位与和的。
欢迎批评指正,更多阅读,关注“纸上谈芯”,不定期更新,共同学习: