Contact / Report an issue

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

Execute the above code 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

Execute the above code 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

Execute the above code on