verilog的新手,有人可以告诉我,如果我这样做吗?
module add4 (
o_sum, // Sum out
o_err, // Error out
i_a, // Addend A
i_b, // Addend B
);
output reg [3:0] o_sum;
output reg [1:0] o_err;
input [3:0] i_a, i_b;
always@( * )
begin
if ( o_sum = i_a + i_b >1111 )
o_sum = o_err;
else
o_sum = i_a + i_b;
end
endmodule
答案 0 :(得分:0)
您的代码中存在很多错误
output reg [1:0] o_err;
你说o_err是1位,应该输出reg o_err;
o_sum = o_err;
您的o_sum不会是4位,那么
if ( o_sum = i_a + i_b >1111 )
由于o_sum为4位,因此无法评估o_sum是否大于1111。此外,它应该是4'b1111,否则它是十进制数。
现在来看代码,这应该可行,
module add4 (
o_sum, // Sum out
o_err, // Error out
i_a, // Addend A
i_b, // Addend B
);
output reg [3:0] o_sum;
output wire o_err;
input [3:0] i_a, i_b;
reg carry;
always@( * )
{carry, o_sum} = i_a + i_b;
assign o_err = (carry == 1)?1'b1:1'b0;
endmodule
此外,请尝试使用测试平台测试您的设计的正确性。会员会更好地理解这一点。