转载自品略图书馆 http://www.pinlue.com/article/2020/07/0113/3310908316544.html
【实例164】:
`timescale1ns/1ps
moduletestbench_top();
reg a1 =0,b1 = 0,c1 = 0;
reg a2 =0,b2 = 0,c2 = 0;
initialbegin
$monitor("a1=%b,b1=%b,c1=%b,a2=%b,b2=%b,c2=%bat %0dns",a1,b1,c1,a2,b2,c2,$time);
end
initialbegin
begin
#10 a1 = 1;
#10 b1 = 1;
#10 c1 = 1;
end
#10;
$stop;
end
initialbegin
fork
#5 a2 = 1;
#5 b2 = 1;
#5 c2 = 1;
join
end
endmodule
该实例中,a1、b1和c1使用begin end每隔10ns赋值,由于是顺序执行,所以a1在10ns由0赋值为1,b1在20ns由0赋值为1,c1在30ns由0赋值为1;a2、b2和c2使用fork join进行赋值,它们是并行执行的,因此虽然在它们的赋值语句前都有5ns延时,但它们最终的赋值最终都是在5ns时刻。数据变化的监控打印如下所示。
#a1=0,b1=0,c1=0,a2=0,b2=0,c2=0 at 0ns
#a1=0,b1=0,c1=0,a2=1,b2=1,c2=1 at 5ns
#a1=1,b1=0,c1=0,a2=1,b2=1,c2=1 at 10ns
#a1=1,b1=1,c1=0,a2=1,b2=1,c2=1 at 20ns
#a1=1,b1=1,c1=1,a2=1,b2=1,c2=1 at 30ns