半加器和全加器的设计和实现
半加器
框图
代码
Half_adder.v文件
module Half_adder (
input wire Ai,
input wire Bi,
output wire So,
output wire Co
);
assign {Co,So} = Ai + Bi;
endmodule
tb文件
`timescale 1ns/1ps
module Half_adder_tb ();
reg Ai;
reg Bi;
wire So;
wire Co;
initial begin
Ai = 0;
Bi = 0;
end
always #2 Ai = {$random} % 2;
always #2 Bi = {$random} % 2;
Half_adder Half_adder_1(
.Ai(Ai),
.Bi(Bi),
.So(So),
.Co(Co)
);
endmodule
仿真结果
可以看到,进位Co只有在Ai和Bi都为1时为1。
全加器
框图
代码
Full_adder.v文件
module Full_adder (
input wire Ai,
input wire Bi,
input wire Ci,
output wire So,
output wire Co
);
assign {Co,So} = Ai + Bi + Ci;
endmodule
tb文件
`timescale 1ns/1ps
module Full_adder_tb ();
reg Ai;
reg Bi;
reg Ci;
wire So;
wire Co;
initial begin
Ai = 0;
Bi = 0;
Ci = 0;
end
always #2 Ai = {$random} % 2;
always #2 Bi = {$random} % 2;
always #2 Ci = {$random} % 2;
Full_adder Full_adder_1(
.Ai(Ai),
.Bi(Bi),
.Ci(Ci),
.So(So),
.Co(Co)
);
endmodule