超前进位加法器(Verilog&数字IC)

在说到超前加法器之前,先要了解普通全加器。
首先画出全加器真值表
全加器真值表
在这里插入图片描述
则此时可以写出Verilog代码:

module advance_adder(
   input [3:0] a,
	input [3:0] b,
	input c_in,
	output [3:0] sum_out,
	output c_out
);
   wire [4:0] g,p,c;
   assign g=a&b;
   assign p=a|b;
   assign c0=c_in;
   assign c1=g[0]|(p[0]&c[0]);
	assign c2=g[1]|(p[1]&(g[0]|(p[0]&c[0])));
	assign c3=g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))));
	assign c4=g[3]|(p[3]&(g[2]|(p[2]&(g[1]|(p[1]&(g[0]|(p[0]&c[0])))))));
	assign sum_out = p^g^c[3:0];
	assign c_out = c[4];
endmodule

普通加法器需要等进位完成才计算下一位,这样在计算大大增加了运算的时间,而超前进位加法器可以直接计算出所有全加器的进位输入信号,无需像普通加法器一样从最低位开始像最高位逐位传递信号。