1.半加器
输入:两个二进制数A、B
输出:结果位sum,进位cout
表1.1 半加器真值表
逻辑表达式:
sum=A^B;
cout=A&B;
2.全加器
输入:单bit源操作数A、B,进位cin
输出:结果位sum,进位cout
表2.1 全加器真值表
逻辑表达式
sum=A^B^cin;
cout=A&B|cin&(A^B);
Verilog简单描述:assign {cout,s}=a+b+cin;
3.行波进位加法器
Ripple-carry adder,简称RCA
n个1-bit全加器级联而成,每个全加器的输出进位cout作为下一个全加器的输入进位cin
图3.1 8-bit 加法减法器
M=0:加法运算,S=A+B+0;
M=1:减法运算,S=A-B=A+(~B)+1;
操作数与0异或不变,与1异或取反
溢出判断:模4补码,采用两个二进制表示符号位,其余位与补码相同
例:7+2=9,7二进制0111,2二进制0010,采用两位二进制表示符号位,故00111+00010=01001,符号位01,发生正溢
(-7)+(-6)=-13,-7二进制补码1_001,-6二进制补码1_010,采用两位二进制表示符号位,故11_001+11_010=110_011,符号位10,发生负溢
从a,b,cin输入数据准备好,到所有的s和cout完成,a或b到cout共有三个门电路延迟,是全加器的最长路径,且s不参与下一级全加器运算,cout将作为下一个cin输入继续计算下一级的s和cout。
N个全加器级联的行波进位加法器除了第一个进位c1有3个门延迟外,剩余N-1个全加器生成进位需要2个门电路延迟,所以N比特行波进位加法器最长路径共有“(3+(N-1)*2)=2N+1”个门电路延迟
组合逻辑延时过长,第k位的进位Ck必须依赖于前一级的Ck-1,所以最高位的进位将必须等待之前所有级进位计算完毕后才能计算出结果
4. 超前进位加法器
Lookahead Carry Adder, LCA
对于全加器,s=a^b^cin,cout=ab+cin(a^b)
定义:
可直接通过输入数据将进位和结果算出来(以4-bit LCA为例)
通过超前进位加法器可以缩短组合逻辑延时
5.进位旁边加法器
Carry Skip Adder,CSA
在16比特RCA中,最长的进位链为c0->c1->c2->…->c16,可以通过加入旁路逻辑缩短这条最长路径
6. 进位选择加法器
Carry Select Adder
进位选择加法器由2个行波进位加法器和1个选择器构成,其中一个RCA加法器假定进位进位为0,另外一个RCA加法器假定进位为1
如果来自低级的进位Cin为0,则选择蓝色RCA的进位c4作为该加法器的进位输出
如果来自低级的进位Cin为1,则选择绿色RCA的进位c4作为该加法器的进位输出
cin作为选择器选择信号,控制S3~S0的输出来自于蓝色RCA还是绿色RCA
7. 进位保存加法器
Carry Save Adder,CSA
基本思想:将3个加数的和减少为2个加数的和,将进位c和和s分别计算保存,并且每比特可以独立计算c和s
进位保存加法器在执行多个数加法时具有极小的进位传播延迟
以(10 + 7 + 12 = 29)为例
进位保存加法器将进位Carry与和Sum分开计算
(1)计算和Sum:每一列数相加,对进制数取模,如(0+1+0)=1,(0+1+1)=0,(1+1+1)=1
(2)计算进位Carry:每一列的数相加对进制数取商。如下式中,(0+1+0)/ 2 = 0 … 1,(1+1+0)/ 2 = 1 … 0,忽略余数
(3)3个数的和变成了2个数,Carry和Sum,分别是11100和00001,对Carry和Sum相加,结果仍然是11101,即29
8. Brent-Kung树形加法器
在设计超前进位加法器时,观察到输出sum和carry项都是由生成项Gi和传播项Pi产生,定义一对二元组(Gi,Pi)和一个新的布尔运算符“o”。o运算过程就是两两级联加法器间,计算进位链进位值carry和中间项H的过程,运算如下所示:
为计算完整进位链,定义两个定理
定理一:
证明:
定理二:
证明:
定理一给出第i位进位链的计算公式,定理二说明o运算符合结合律。
下图白色符号代表数据传递,不进行进位运算,黑色表示两个相邻的二元组(Gi,Pi)与(Gi-1,Pi-1)进行运算
将二元组进位单元电路进行树形排列,可以得到加法器进位链电路。以(C4,H4):
(C4,H4)=(G4,P4)o(C3,H3)=(G4,P4)o(G3,P3)o(C2,H2)=(G4,P4)o(G3,P3)o(G2,P2)o(G1,P1)o(G0,P0)
运算路径是一个二叉树,最大进位链长度,对32位加法器而言,仅需要8级进位运算电路,每一级至少有一个o运算将分段进位结果传递给下一级,被多条进位链复用,极大减少了进位链面积。
BK树形加法器时间复杂度为θ(),面积复杂度θ(n),相对于并行进位加法器,在没有增加太多延时情况下,使电路面积迅速下降。