In reply to szy0014:
The uvm_event_pool manages a pool of events that can be accessed using a string name. Finally it is an associative array of uvm_events indexed by name (string). It allows accesses from multiple components.
See the code below:
class driver1 extends uvm_driver #(my_tx);
uvm_event_pool ev_pool = uvm_event_pool::get_global_pool();
...
task run_phase(uvm_phase phase);
uvm_event ev = ev_pool.get("driver1_ev");
ev.trigger(req);
endtask
...
endclass
class driver2 extends uvm_driver #(my_tx);
uvm_event_pool ev_pool = uvm_event_pool::get_global_pool();
...
task run_phase(uvm_phase phase);
uvm_event ev = ev_pool.get("driver1_ev");
ev.wait_trigger();
$cast(req, ev.get_trigger_data());
...
endtask
...
endclass
The name of the event is ‘driver1_ev’. The get command gets this event or creates one if it does not exist.
The get command in driver2 deals also with this event and waits for it. If it gets the event it is working with the data belonging to these event.
Hope this helps.