SystemVerilog disable fork


 disable fork 


disable fork; causes process to kill/terminate all the active processes started from fork blocks.

  Example-1:  


In the below example, 
On execution of disable fork, all the active process will get terminated. 
Process-2 of fork-1,Process-1 and Process-2 of fork-2 will get terminated.

module disable_fork;

  initial begin
    $display("-----------------------------------------------------------------");

    //fork-1
    fork
      //Process-1
      begin
        $display($time,"\tProcess-1 of fork-1 Started");
        #5;
        $display($time,"\tProcess-1 of fork-1 Finished");
      end
      
      //Process-2
      begin
        $display($time,"\tProcess-2 of fork-1 Started");
        #20;
        $display($time,"\tProcess-2 of fork-1 Finished");
      end
    join_any

    //fork-2
    fork
      //Process-1
      begin
        $display($time,"\tProcess-1 of fork-2 Started");
        #5;
        $display($time,"\tProcess-1 of fork-2 Finished");
      end
      //Process-2
      begin
        $display($time,"\tProcess-2 of fork-2 Started");
        #20;
        $display($time,"\tProcess-2 of fork-2 Finished");
      end
    join_none    

    disable fork;
    
    $display("-----------------------------------------------------------------");
      $display($time,"\tAfter disable-fork");
    $display("-----------------------------------------------------------------");
  end
endmodule

  Simulator output:  
                       -----------------------------------------------------------------
                       0 Process-1 of fork-1 Started
                       0 Process-2 of fork-1 Started
                       5 Process-1 of fork-1 Finished
                       -----------------------------------------------------------------
                       5 After disable-fork
                       -----------------------------------------------------------------

Execute the above code on 


  Example-2:  


In the below example, 
sub_process started from process-2 will get terminated during execution of disable fork.

module disable_fork;
  initial begin
    $display("-----------------------------------------------------------------");

    fork
      //Process-1
      begin
        $display($time,"\tProcess-1 of fork-1 Started");
        #5;
        $display($time,"\tProcess-1 of fork-1 Finished");
      end
      //Process-2
      begin
        sub_process();
      end
    join_any 
  
    disable fork;
  
    $display("-----------------------------------------------------------------");
    $display($time,"\tAfter disable-fork");
    $display("-----------------------------------------------------------------");
  end
  //Sub-Process
  task sub_process;
    $display($time,"\tSub-Process Started");
    #10;
    $display($time,"\tSub-Process Finished");
  endtask   
endmodule

  Simulator output:  
                       -----------------------------------------------------------------
                       0 Process-1 of fork-1 Started
                       0 Sub-Process Started
                       5 Process-1 of fork-1 Finished
                       -----------------------------------------------------------------
                       5 After disable-fork
                       -----------------------------------------------------------------

Execute the above code on