一位超前全加器真值表:
在这里插入图片描述
在这里插入图片描述
逻辑表达式:
g=aibi
pi=ai+bi
co=g0+pocin
其中,gi表示generation(产生),当ai与bi均为1时,1位全加器必生成进位。而pi表示propagation(传导),当ai或bi,有一个1时,如果输入进位cin为1,1位全加器必生成进位。如果能利用4位超前进位加法器输出进位c3的产生和传导,便可以实现加法器间的超前进位。
4位超前进位加法器输出进位的逻辑表达式为:
c3=g3+p3c2=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0cin
容易发现它与1位全加器进位c0=g0+p0cin形式上的相似,于是令
G=g3+p3g2+p3p2g1+p3p2p1g0 P=p3p2p1p0
这时可以表示为:
c3=G0+P0cin
用4个4位超前进位加法器构成一个16位超前进位加法器,有:
G0=g3+p3g2+p3p2g1+p3p2p1g0
G1=g7+p7g6+p7p6g5+p7p6p5g4
G2=g11+p11g10+p11p10g9+p11p10p9g8
G3=g15+p15g14+p13p14g13+p13p14p13g12

P0=p3p2p1p0
P1=p7p6p5p4
P2=p11p10p9p8
P3=p15p14p13p12

部分程序代码:
//一位加法器
module Add1
(
input a, //加数
input b, //加数
input C_in, //进位信号
output f, //和输出
output g, //生成信号g=ab
output p //传播信号p=a+b
);
assign f=abC_in;
assign g=a&b;
assign p=a|b;
endmodule
//4位CLA部件 //用来计算生成信号和传播信号,提前算出是否有进位,module CLA_4(
input [3:0]P,
input [3:0]G,
input C_in,
output [4:1]Ci,
output Gm,
output Pm
);
assign Ci[1]=G[0]|P[0]&C_in; //Ci+1=Gi+PiCi
assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;
assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&C_in;
assign Ci[4]=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0]|P[3]&P[2]&P[1]&P[0]&C_in;

assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];
assign Pm=P[3]&P[2]&P[1]&P[0];
endmodule

需要完整课程报告和完整verilog代码:https://download.csdn.net/download/m0_54748666/90162190

更多推荐