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

nod*_*nja 1 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
Run Code Online (Sandbox Code Playgroud)

Jan*_*uwe 5

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

当a或b在时间零处被初始化为某个非X值时,始终块可能不会将其视为变化,因此可能不会被触发.因此,输出可能与输入不一致.

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