欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数字电子技术基础(七):加法器

程序员文章站 2022-03-23 12:55:43
...

两个二进制数之间的算术运算,无论是加减乘除,目前在数字计算机(数字系统)中都是化作若干次加法运算进行的。因此,加法器是构成算术运算器的基本单元。

一、1位加法器

1、半加器

如果不考虑有来自低位的进位输入,将两个一位二进制相加,称为半加。实现半加的电路为半加器。

半加器的真值表
数字电子技术基础(七):加法器
A、B为输入,S为A、B相加的和,CO为进位输出。通过真值表,可以写出S和CO表达式:
S = A’B + AB’
CO = AB

Verilog 代码为:

// 一位半加器

module h_adder(
 input        A,		// 被加数
 input        B,		// 加数
 output       S,		// 和数
 output       CO		// 进位
 );
 
 assign CO = A & B;
 assign S = A ^ B;
 
 endmodule

因此一个半加器由一个异或门和一个与门构成

数字电子技术基础(七):加法器

2、1位全加器

如果考虑有来自低位的进位输入,相当于将三个一位二进制相加,称为全加。实现全加的电路为全加器。
一位全加器真值表
数字电子技术基础(七):加法器
数字电子技术基础(七):加法器
可以看到,这时候的S和CO的逻辑表达式比较复杂,但是,我们可以用两个半加器和一个或门实现全加器。
先对两个输入ain、bin进行半加,进位输出c1,和数输出s1;再将s1与进位cin半加,得到最终的和数sum,和进位输出c2,再将c1与c2或上得到最终的进位输出co。
代码如下:

module f_adder(
	ain,
	bin,
	cin,
	cout,
	sum
);


input 	wire 		ain;
input 	wire	    bin;
input 	wire	    cin;
output 	wire		cout;
output 	wire		sum;

wire	SYNTHESIZED_WIRE_0;
wire	SYNTHESIZED_WIRE_1;
wire	SYNTHESIZED_WIRE_2;

h_adder	b2v_inst(
	.A(ain),
	.B(bin),
	.CO(SYNTHESIZED_WIRE_0),
	.S(SYNTHESIZED_WIRE_2));

h_adder	b2v_inst2(
	.A(SYNTHESIZED_WIRE_2),
	.B(cin),
	.CO(SYNTHESIZED_WIRE_1),
	.S(sum));
	
assign  cout = SYNTHESIZED_WIRE_0 | SYNTHESIZED_WIRE_1;


endmodule

3、n位串行进位加法器

n位串行进位加法器是用 n个全加器级联构成,这种电路的最大缺点是运行速度慢。

Verilog代码:n位串行进位全加器

4、超前进位加法器

这种加法器是用空间换时间的设计,这里不作介绍
数字电子技术基础(七):加法器
数字电子技术基础(七):加法器