- 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