initial begin
$display("@%0t: start fork ... join example", $time);
#10 $display("@$0t: sequential after #10", $time);
fork
$display("@%0t: parallel start", $time);
#50 $display("@%0t: parallel after #50", $time);
#10 $display("@%0t: parallel after #50", $time);
begin
#30 $display("@%0t: sequential after #30", $time);
#10 $display("@%0t: sequential after #10", $time);
end
join
$display("@%0t: after join", $time);
#80 $display("@%0t: after join", $time);
end
本例中fork...join开了4个线程(即并行运行程序,其中begin...end是顺序执行,算作一个线程)。 initial 块执行结束一共需要10+50+80=140ns。其中打印的顺序为下,在140ns 中全部执行结束。
@0: start fork...join example
@10: sequential after #10
@10: parallel start
@20: parallel after #10
@40: sequential after #30
@50: sequential after #10
@60: parallel after #50
@60: after join
@140: finish after #80
如果替换为fork...join_any会怎么样呢?
initial begin
$display("@%0t: