这两个模块似乎是可以互换的。他们的行为有何不同?
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
答案 0 :(得分:5)
事件调度存在细微差别,可能会在时间0导致不同的行为。
当a或b在零时刻初始化为某个非X值时,always块可能不会将其视为更改,因此可能不会触发。因此,输出可能与输入不一致。
相反,连续分配的输出将始终与其输入一致。