一、半加器

对于两个二进制数字的加法器通过下面的真值表来表示。

A B S C
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1

其中,A、B是两个输入的数值,S是所求得的求和项,C为进位项。可以得到其逻辑表达式:

S = A^B;

C = A&B;

上述表达式通常被称为半加器,他是加法器的基本单元。可以很容易用verilog语言进行描述,并得到综合后的门级电路。

module half_adder(
	input	A,
	input	B,
	output	S,
	output	C
    );
    
    assign	S = A^B;
    assign	C = A&B;
endmodule

IC基础(七):串行进位加法器设计

对应的电路结构 

 

二、全加器

 

全加器实在半加器上的基础上附带进位功能的电路,下面考虑全加器的逻辑表达式及4bit的全加器的verilog语言描述。

全加器的公式描述:

S = A^B^C;

C = A&B+C&(A^B);

 

module add_4b(
	input	[3:0]		a_in,
	input	[3:0]		b_in,
	input				c_in,
	output	[3:0]		sum,
	output				c_out
    );
    
    wire		[2:0]	cy;
    full_adder(a_in[0],b_in[0],c_in,sum[0],cy[0]);
    full_adder(a_in[1],b_in[1],cy[0],sum[1],cy[1]);
    full_adder(a_in[2],b_in[3],cy[1],sum[2],cy[2]);
    full_adder(a_in[2],b_in[3],cy[2],sum[3],c_out);
endmodule

module	full_adder(
	input	a,
	input	b,
	input	c_in,
	output		sum,
	output		c_out
	);
	
	assign {c_out,sum}  = a+b+c_in;
endmodule

 

根据上述描述的语言可以综合出原始的串行进位电路结构,如下图所示。对于普遍情况,一个N bit的串行进位加法器必须由N个1 bit 加法器组成,其中的进位输出到下一加法器作为输入。但是这种电路存存在一个问题,就是必须先算出低位的进位输出,才能把这个进位输出当作更高一级的进位输入。每一级之间存在依赖关系,所以加法器的输出延迟与位宽成正比,对于高位的加法器,电路的是很慢的。为了实现高速设计,必须要修改加法器的计算机构,如超前进位加法器。

IC基础(七):串行进位加法器设计

 

 

以上内容来自于《FPGA/ASIC高性能数字系统设计 》

相关文章: