If a process is started by fork .. join_any then it can be disabled by using disable fork or it can be disabled by using disable LABEL . There are some difference in using both these ways of disabling processes.
Difference 1 :
Here is example :
In this example , you can use disable fork or disable process .
- If disable fork is used then it disables all process started by fork . Task “wait_for_clk(40)” will be also stopped when disable fork is executed.
- But , in case of disable process (LABEL) , it will not stop task/process started alreay by fork join_any. Thus wait_for_clk(40) will not be stopped in this case.
Difference 2 :
Other difference between using disable fork and disable LABEL is that disable LABEL is static . If disable LABEL is in a class then it will stop process in all object of that class. disable fork will stop all fork processes in current scope.
So , It is better to use disable .. fork by following way in class.
Thus , need to one dummy fork…join as wrapper , so that scope of disable fork is inside dummy fork join and only intended process stopped.
Please note that questa behavior for this example seems to be different.