数字电子技术基础(七):加法器
程序员文章站
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、超前进位加法器
这种加法器是用空间换时间的设计,这里不作介绍