- wait fork :等待当前进程所有子进程,但不包括子进程的子进程,执行完后才会往下执行。
-
task do_test;
-
fork
-
exec1();
-
exec2();
-
join_any
-
-
fork
-
exec3();
-
exec4();
-
join_none
-
-
wait
fork;
// block
until exec1 ... exec4 complete
-
endtask
上面的例子中,do_test需要等到exec1...exec4等4个子进程全部返回后才会返回到do_test的caller
- disable :用于在多进程的场景下终止一个或多个进程。
disable语句可以用在task或者块中去终止指定的task或块,包括终止disable语句所在的块或者task。disable也可以用在function中去终止task或者块,但不能用于终止function。当在function中用dsiable语句终止了一个task或者块,而这个task或者块刚好又是这个function的caller, 这种情况的结果是未知的。
当task被disable后,task的以下几类输出是未知的:
1)task的output和inout参数 2)还未执行到的非阻塞赋值 3)assign和force等连续赋值
下面这个例子,当a==0后,会跳出当前这个begin-end块继续后面的执行
-
begin : block_name
-
...
-
...
-
if (a ==
0)
-
disable block_name;
-
...
-
end //
end
of named block
-
-
// continue with code following named block
-
...
下面这个例子,当a==0时,将会结束task的执行,这个类似于提前return。但跟return有区别,return只会结束执行return的task进程,而disable会终止当前所有正在执行这个task的进程。
-
task proc_a;
-
begin
-
...
-
...
-
if (a ==
0)
-
disable proc_a; // return
if
true
-
...
-
...
-
end
-
endtask
- disable fork :终止当前进程的所有子进程,包括所有子孙后代
下面这个例子,主进程会产生三个子进程,当某个wait_device执行完后,diable fork会将其它正在执行的wait_device task给终止掉。
-
task
get_first
( output int adr );
-
fork
-
wait_device
( 1, adr );
-
wait_device(
7, adr );
-
wait_device(
13, adr );
-
join_any
-
disable fork;
-
endtask
参考文献 :1.[IEEE]SystemVerilog.std.1800-2012 9.6 Process control