本篇博客记录一下自己在实际过程中遇见的易错的语法细节。
两种不同条件下的fork join_none的使用:
1、
program fork_pra;
initial begin
for(int i = 0; i < 3; i++) begin
fork
$write(i);
join_none
#0;
end
end
endprogram
上述这种,可以看见延时语句在fork语句块外面,此时打印出的结果如下:
2、
program fork_pra;
initial begin
for(int i = 0; i < 3; i++) begin
fork
#0;
$write(i);
join_none
end
end
endprogram
上述代码将延时语句放到fork语句块中,此时打印结果如下:
分析上述两种不同情况,可以发现,当延时语句在fork内部时,则此时父线程在i=3之前均无阻塞,那么此时fork join_none不会执行,仅当i=3时,父线程被阻塞,则fork join_none开始执行,所以打印结果为333
具体看见sv标准(1800-2012)