array of uvm event

uvm_event array

This section shows declaring the uvm_event with,

  • Fixed size array of uvm_event
  • A dynamic array of uvm_event
  • An associative array of uvm_event

Fixed size array of uvm_event

In the below example uvm_event is declared as a fixed size array with size 2.

There are four threads, two of which trigger the events and the other two will wait for the trigger.

module uvm_events_ex;
  uvm_event ev[2]; //declaring uvm_event ev_1
  
  initial begin
    foreach(ev[i]) ev[i] = new(); //Creating the event
    
    fork
      //------------------ ev[0] --------------------------
      //process-1, triggers the event
      begin
        #40;
        $display($time," [ev-0] Triggering the Event");
        ev[0].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev-0] Waiting for the Event to trigger");
        ev[0].wait_trigger;
        $display($time," [ev-0] Event triggered");
      end
      //----------------------------------------------------
      
      //------------------ ev[1] --------------------------
      //process-1, triggers the event
      begin
        #50;
        $display($time," [ev-1] Triggering the Event");
        ev[1].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev-1] Waiting for the Event to trigger");
        ev[1].wait_trigger;
        $display($time," [ev-1] Event triggered");
      end
      //----------------------------------------------------
    join
  end
endmodule

Simulator Output

0 [ev-0] Waiting for the Event to trigger
0 [ev-1] Waiting for the Event to trigger
40 [ev-0] Triggering the Event
40 [ev-0] Event triggered
50 [ev-1] Triggering the Event
50 [ev-1] Event triggered

Click to execute on   

A dynamic array of uvm_event

In the below example uvm_event is declared as a dynamic array and created the size 2.

There are four threads, two of which trigger the events and the other two will wait for the trigger.

module uvm_events_ex;
  uvm_event ev[]; 
  
  initial begin
    ev = new[2];
    
    foreach(ev[i]) ev[i] = new(); //Creating the event
    
    fork
      //------------------ ev[0] --------------------------
      //process-1, triggers the event
      begin
        #40;
        $display($time," [ev-0] Triggering the Event");
        ev[0].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev-0] Waiting for the Event to trigger");
        ev[0].wait_trigger;
        $display($time," [ev-0] Event triggered");
      end
      //----------------------------------------------------
      
      //------------------ ev[1] --------------------------
      //process-1, triggers the event
      begin
        #50;
        $display($time," [ev-1] Triggering the Event");
        ev[1].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev-1] Waiting for the Event to trigger");
        ev[1].wait_trigger;
        $display($time," [ev-1] Event triggered");
      end
      //----------------------------------------------------
    join
  end
endmodule

Simulator Output

0 [ev-0] Waiting for the Event to trigger
0 [ev-1] Waiting for the Event to trigger
40 [ev-0] Triggering the Event
40 [ev-0] Event triggered
50 [ev-1] Triggering the Event
50 [ev-1] Event triggered

Click to execute on   

An associative array of uvm_event

In the below example uvm_event is declared as an associative array with the type string.

There are four threads, two of which trigger the events and the other two will wait for the trigger.

module uvm_events_ex;
  uvm_event ev[string]; 
  
  initial begin
    
    ev["ev_1"] = new(); //Creating the event
    ev["ev_2"] = new();
    
    fork
      //------------------ ev[ev_1] --------------------------
      //process-1, triggers the event
      begin
        #40;
        $display($time," [ev_1] Triggering the Event");
        ev["ev_1"].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev_1] Waiting for the Event to trigger");
        ev["ev_1"].wait_trigger;
        $display($time," [ev_1] Event triggered");
      end
      //----------------------------------------------------
      
      //------------------ ev[ev_2] --------------------------
      //process-1, triggers the event
      begin
        #50;
        $display($time," [ev-2] Triggering the Event");
        ev["ev_2"].trigger;
      end
      
      //process-2, wait for the event to trigger
      begin
        $display($time," [ev-2] Waiting for the Event to trigger");
        ev["ev_2"].wait_trigger;
        $display($time," [ev-2] Event triggered");
      end
      //----------------------------------------------------
    join
  end
endmodule

Simulator Output

0 [ev_1] Waiting for the Event to trigger
0 [ev-2] Waiting for the Event to trigger
40 [ev_1] Triggering the Event
40 [ev_1] Event triggered
50 [ev-2] Triggering the Event
50 [ev-2] Event triggered

Click to execute on   

❮ Previous Next ❯