wait fork
Table of Contents
wait fork; causes the process to block until the completion of all processes started from fork blocks.
wait fork example
In the below example,
after the completion of Process-1 (i.e, after 5ns) fork-join_any will get unblocked, the $finish will get called and it ends the simulation.
The simulation will get ended in the middle of the execution of process-2, this can be avoided with the use of wait-fork.
The problem in this example is overcome in example-2 with the use of wait fork;
module wait_fork; initial begin $display("-----------------------------------------------------------------"); fork //Process-1 begin $display($time,"\tProcess-1 Started"); #5; $display($time,"\tProcess-1 Finished"); end //Process-2 begin $display($time,"\tProcess-2 Started"); #20; $display($time,"\tProcess-2 Finished"); end join_any $display("-----------------------------------------------------------------"); $finish; //ends the simulation end endmodule
Simulator Output
----------------------------------------------------------------- 0 Process-1 Started 0 Process-2 Started 5 Process-1 Finished -----------------------------------------------------------------
wait fork example 2
In the below example,
wait fork will wait for the completion of the second thread in the fork-join_any.
for better understanding compare the result of Example-1 and Example-2
module wait_fork; initial begin $display("-----------------------------------------------------------------"); fork //Process-1 begin $display($time,"\tProcess-1 Started"); #5; $display($time,"\tProcess-1 Finished"); end //Process-2 begin $display($time,"\tProcess-2 Started"); #20; $display($time,"\tProcess-2 Finished"); end join_any wait fork; //waiting for the completion of active fork threads $display("-----------------------------------------------------------------"); $finish; //ends the simulation end endmodule
Simulator Output
----------------------------------------------------------------- 0 Process-1 Started 0 Process-2 Started 5 Process-1 Finished 20 Process-2 Finished -----------------------------------------------------------------