SystemVerilog fork join_any


  fork join_any 


Fork-Join_any will be un-blocked after the completion of any of the Process.


SystemVerilog Fork-Join_any


*click on image for better view

  Example-1:  


In the below example,
fork block will be blocked until the completion of any of the Process Process-1 or Process-2. Both the Process-1 and Process-2 will start at same time, Process-1 will finish at 5ns and Process-2 will finish at 20ns. fork-join_any will be unblocked at 5ns.

module fork_join;
  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($time,"\tOutside Fork-Join");
    $display("-----------------------------------------------------------------");
  end
endmodule


  Simulator output:  

                       --------------------------------------------------------
                       0 Thread-1 Started
                       0 Thread-2 Started
                       5 Thread-1 Finished
                       5 Outside Fork-Join
                       -----------------------------------------------------------------
20 Process-2 Finished

Execute the above code on