Uvm Events

Embed Size (px)

DESCRIPTION

A detail description of UVM events and Uvm_event pool.

Citation preview

UVM EVENT And UVM EVENT POOL

UVM EVENT

UVM EVENT EXAMPLE

UVM_OBJECT_STRING_POOL & UVM_EVENT_POOL

UVM_EVENT_POOL Example

Achieving the synchronization

UVM EVENTS

The uvm_event class is a wrapper class around the SystemVerilog event construct. It provides some additional services such as setting callbacks and maintaining the number of waiters.

Class hierarchy :- uvm_void uvm_object uvm_event

uvm_event methods

New: Creates a new event object.

wait_on:Waits for the event to be activated for the first time.

wait_off: If the event has already triggered and is on, this task waits for the event to be turned off via a call to reset.

wait_trigger:Waits for the event to be triggered.

wait_ptrigger:Waits for a persistent trigger of the event.

wait_trigger_data:This method calls wait_trigger followed by get_trigger_data.

wait_ptrigger_data:This method calls wait_ptrigger followed by get_trigger_data.

Trigger:Triggers the event, resuming all waiting processes.

uvm_event methods cont.

get_trigger_data:Gets the data, if any, provided by the last call to trigger.

get_trigger_time:Gets the time that this event was last triggered.

is_on:Indicates whether the event has been triggered since it was last reset.

is_off:Indicates whether the event has been triggered or been reset.

Reset:Resets the event to its off state.

add_callback:Registers a callback object, cb, with this event.

delete_callback:Unregisters the given callback, cb, from this event.

Cancel:Decrements the number of waiters on the event.

get_num_waiters:Returns the number of processes waiting on the event.

UVM_EVENT Example

Module event_example();uvm_event event;

Initial beginEvent = new(event);Fork

PROCESS1: beginobject obj;obj.data = 'h55;event.trigger(.data(obj));End

PROCESS2: beginobject obj;event.wait_ptrigger_data(.data(obj));End

joinEnd

endmodule

uvm_object_string_pool and uvm_event_pool

This provides a specialization of the generic uvm_pool #(KEY,T) class for an associative array of uvm_object-based objects indexed by string. Specializations of this class include the uvm_event_pool (a uvm_object_string_pool storing uvm_event#(uvm_object))

Class Hierarchy:-uvm_pool #(string T) uvm_object_string_pool #(T)

uvm_object_string_pool methods and uvm_event_pool

new:Creates a new pool with the given name.

get_type_name:Returns the type name of this object.

get_global_pool:Returns the singleton global pool for the item type, T.

get_global:Returns the specified item instance from the global item pool.

get:Returns the object item at the given string key.

delete:Removes the item with the given string key from the pool.

typedef uvm_object_string_pool #(uvm_event) uvm_event_pool;

uvm_event_pool example

in the driver:

uvm_event_pool p1 = p1.get_global_pool();uvm_event e1 = p1.get("ABC");e1.trigger();e1.reset();

in the receiver:

uvm_event_pool p1 = p1.get_global_pool();uvm_event e1 = p1.get("ABC");e1.wait_trigger()

Achieving the sync.

get_global_pool () method of uvm_event_pool returns the singleton global event pool.This allows events to be shared between components throughout the verification environment.

Using uvm Event callbacks

Add the callback to uvm_event using add_callback()virtual function void add_callback (uvm_event_callback cb, bit append = 1)

Create new class extending from uvm_event_callbacks and define pre_trigger or post_trigger or both based on requirement.

virtual function bit pre_trigger (uvm_event e, uvm_object data = null)

virtual function void post_trigger (uvm_event e, uvm_object data = null)