延时语句有两种情况,如下:
#10 a = b; //延时10ns后,在执行a=b;
a = #10 b; //延时10ns后,将当前时刻的b值赋给a,即,先将要更新的值记录下来,延时10ns后,在赋给a;
测试用例如下所示:
`timescale 1ns/1ps
module tb_test_delay();
reg[3:0] x,y,z;
reg[3:0] a;
initial begin
a = 0; //0时刻 a为0
#25 a = 1; //25ns后,即25ns时刻,a的值更新为1;
#20 a = a + 1; //20ns后,即45ns时刻,a的值自加1;
a= #20 y + 2; //20ns后,即65ns时刻,将当前时刻(45ns时刻)的y值加1后赋给a;
end
initial begin
#20; //延时20ns,直到20ns时刻在向下执行;
x = #10 a; //在10ns后,即30ns时刻,将a在当前时刻(20ns时刻)的值赋给x; 整个时间刻度会增加10ns;
#10 y = a; //10ns后,即40ns时刻,将a的值赋给y;
#10 z = a; //10ns后,即50ns时刻,将a的值赋给z;
#10 y = y + 1; //10ns后,即60ns时刻,y的值自加1;
end
endmodule
仿真截图如下: