串行进位加法器需要一级一级的进位,进位延迟很大。先行进位加法器(也叫超前进位加法器)可以有效的减少进位延迟。
设二进制加法器的第i位输入为Xi, Yi, 输出为Si, 进位输入为Ci,进位输出为Ci+1
则有
Si = Xi⊕Yi⊕Ci
Ci+1 = Xi·Yi + Xi·Ci + Yi·Ci = Xi·Yi + (Xi + Yi)·Ci
令Gi = Xi·Yi, Pi = Xi+Yi
则Ci+1 = Gi + Pi·Ci
当Xi和Yi都为1时,Gi = 1,产生进位Ci+1 = 1
当Xi和Yi有一个为1时,Pi = 1,传递进位Ci+1 = Ci
因此Gi 定义为进位产生信号,Pi定义为进位传递信号。Gi的优先级比Pi高,也就是说:当Gi = 1时(当然此时也有 Pi = 1 ),无条件产生进位,而不管Ci是多少;
当Gi=0而Pi=1时,进位输出为Ci, 跟Ci之前的逻辑有关。
下面推导4位超前进位加法器。设4位加数和被加数为A 和 B,进位输入为Cin, 进位输出为Cout, 对于第i位的进位产生Gi = Ai·Bi , 进位传递 Pi=Ai+Bi , i=0,1,2,3
于是这各级进位输出,递归的展开Ci ,有:
C0 = Cin
C1=G0 + P0·C0
C2=G1 + P1·C1 = G1 + P1·(G0 + P0·C0)=G1 + P1·G0 + P1·P0 ?C0
C3=G2 + P2·C2 = G2 + P2·G1 + P2·P1·G0 + P2·P1·P0·C0
C4=G3 + P3·C3 = G3 + P3·G2 + P3·P2·G1 + P3·P2·P1·G0 + P3·P2·P1·P0·C0
Cout=C4
由此可以看出,各级的进位彼此独立产生,只与输入数据和Cin有关,将各级间的进位级联传播给去掉了,因此减小了进位产生的延迟。
每个等式与只有三级延迟的电路对应,第一级延迟对应进位产生信号和进位传递信号,后两级延迟对应上面的积之和,这可由Synplify综合后的RTL电路看到。
同时由真值表可以简单的得出第i位的和为:
Si = Xi⊕Yi⊕Ci = (Xi·Yi)⊕(Xi+Yi)⊕Ci = Gi⊕Pi⊕Ci
标签:加法器