Uploaded by Be Happy

Uvm-Events

advertisement
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:
get_trigger_data.
●
●
Trigger:
This method calls wait_ptrigger followed by
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 begin
Event = new(“event”);
Fork
PROCESS1: begin
object obj;
obj.data = 'h55;
event.trigger(.data(obj));
End
PROCESS2: begin
object obj;
event.wait_ptrigger_data(.data(obj));
End
join
End
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
bit append = 1 )
cb,
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 )
Download