这两个模块的行为有何不同

时间:2011-03-10 04:46:17

标签: verilog

这两个模块似乎是可以互换的。他们的行为有何不同?

module Add_half (sum, c_out, a, b);
input a, b;
output reg c_out;
output reg sum;
always@(a, b)
begin
sum = a ^ b; 
c_out = a & b; 
end
endmodule

module Add_half (sum, c_out, a, b);
input a, b;
output c_out, sum;
assign sum = a ^ b; 
assign c_out = a & b; 
endmodule

1 个答案:

答案 0 :(得分:5)

事件调度存在细微差别,可能会在时间0导致不同的行为。

当a或b在零时刻初始化为某个非X值时,always块可能不会将其视为更改,因此可能不会触发。因此,输出可能与输入不一致。

相反,连续分配的输出将始终与其输入一致。