Tutorials
Learn More
Passing an event in SV
Passing an event in the class constructor
When a class object is created, an event is passed to the constructor as shown in the below example.
class transaction;
  event tr_e;
  
  function new(event e1);
    tr_e = e1;
  endfunction
  
  task process_A();
    #10;
    ->tr_e;
    $display("@%0t: process_A: tr_e is triggered", $time);
  endtask
  task process_B();
    $display("@%0t: process_B: waiting for the event tr_e", $time);
    wait(tr_e.triggered);
    $display("@%0t: process_B: event tr_e is received", $time);
  endtask
endclass
module event_example();
  transaction tr;
  event ev;
  
  initial begin
    tr = new(ev);
    fork
      tr.process_A();
      tr.process_B();
    join
  end
endmoduleOutput:
@0: process_B: waiting for the event tr_e
@10: process_A: tr_e is triggered
@10: process_B: event tr_e is receivedPassing an event as an argument in the task or function
An event can also be passed to a function or task as below.
module event_example();  
  function process_A(event e1);
    ->e1;
    $display("@%0t: process_A: e1 is triggered", $time);
  endfunction
  
  initial begin
    event e1;
    fork
      process_A(e1);
      begin
        $display("@%0t: process_B: waiting for the event e1", $time);
        wait(e1.triggered);
        $display("@%0t: process_B: event e1 is received", $time);
      end
    join
  end
endmoduleOutput:
@0: process_A: e1 is triggered
@0: process_B: waiting for the event e1
@0: process_B: event e1 is receivedSystem Verilog Tutorials
