采样延时赋值:
module main;
integer x,y,z;
initial begin
x= #2 y+z;
end
endmodule
编译后
v0x562dc7a4eb80_0 .var *"_ivl_0", 31 0; Local signal //用来存放右式的临时变量var tmp
v0x562dc7a608a0_0 .var/i "x", 31 0; //var x
v0x562dc7a93800_0 .var/i "y", 31 0; //var y
v0x562dc7a938c0_0 .var/i "z", 31 0; //var z
.scope S_0x562dc7a4fa30;
T_0 ;
%load/vec4 v0x562dc7a93800_0;
%load/vec4 v0x562dc7a938c0_0;
%add;
%store/vec4 v0x562dc7a4eb80_0, 0, 32; //tmp=y+z
%pushi/vec4 2, 0, 64;
%ix/vec4 4;
%delayx 4; //#2
%load/vec4 v0x562dc7a4eb80_0;
%store/vec4 v0x562dc7a608a0_0, 0, 32; //x=tmp
%end;
.thread T_0;
延时采样赋值:
integer x,y,z;
initial begin
#2 x= y+z;
end
编译后:
v0x5592a08a7b80_0 .var/i "x", 31 0;
v0x5592a08b98a0_0 .var/i "y", 31 0;
v0x5592a08ec510_0 .var/i "z", 31 0;
.scope S_0x5592a08a8a30;
T_0 ;
%delay 2, 0; //#2
%load/vec4 v0x5592a08b98a0_0;
%load/vec4 v0x5592a08ec510_0;
%add; //采样并相加
%store/vec4 v0x5592a08a7b80_0, 0, 32; //赋值
%end;
.thread T_0;
综上,采样延时赋值是先采样,再延时,最后赋值。
延时采样赋值是线延时,再采样,最后赋值。