EDA实验(1)二位加法器设计
这学期有一门EDA的实验课,正好准备学习FPGA,想分享一下这几次实验的思路和代码。
实验要求
1.采用verilog HDL设计全加器
2.采用全加器设计两位加法器
思路与代码
首先用Verilog设计一个半加器,用半加器设计全加器,再用全加器设计两位加法器。
1.1半加器的设计
首先画出半加器的真值表,如下:
a | b | SO | CO |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
其中a,b为输入;SO,CO为输出
1.2半加器的Verilog
module h_adder(a,b,SO,CO);
input a,b;
output SO,CO;
assign SO=a^b;
assign CO=a&b;
endmodule
2.1用半加器设计全加器
全加器的真值表如下:
A | B | Ci | Sum | Cout |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
其中A,B,Ci为输入;Sum,Cout为输出
2.2全加器的Verilog
module f_adder(A,B,Cin,count,sum);
input A,B,Cin;
output count,sum;
wire P1,P2,P3;
h_adder U1(A,B,P1,P2);
h_adder U2(.a(P1),.SO(sum),.b(Cin),.CO(P3));
or U3(count,P2,P3);
endmodule
3.1两位加法器
module two_adder(A0,B0,A1,B1,S0,S1,Cout);
input A0,B0,A1,B1;
output S0,S1,Cout;
wire P4=1'b0;
wire P5;
f_adder U4(A0,B0,P4,P5,S0);
f_adder U5(A1,B1,P5,Cout,S1);
endmodule