考虑溢出的4位全加器的Verilog代码:
代码文件:
//4位全加器_行为描述语言
module adder4(
input wire [3:0] a,
input wire [3:0] b,
output reg [3:0] s,
output reg cf,
output reg ovf
);
reg [4:0] temp;
always @(*)
begin
temp={1'b0,a}+{1'b0,b};
s=temp[3:0];
cf=temp[4];
ovf=a[3]^b[3]^s[3]^cf;
end
endmodule
测试文件代码:
//全加器测试平台
module adder4_tb;
reg [3:0] a;
reg [3:0] b;
wire [3:0] s;
wire cf;
wire ovf;
adder4 uut(
.a(a),
.b(b),
.s(s),
.cf(cf),
.ovf(ovf)
);
initial
begin
a=4'b0000;
b=4'b0001;
end
always #2
begin
a[0]=~a[0];
end
always #4
begin
a[1]=~a[1];
b[0]=~b[0];
end
always #6
begin
a[2]=~a[2];
b[1]=~b[1];
end
always #8
begin
a[3]=~a[3];
b[2]=~b[2];
end
always #10
begin
b[3]=~b[3];
end
endmodule
激励是随便加的,没有经过评估,不一定能出现全部情况,只是为了说明问题。
modelsim仿真结果: