HDL Signal Polling

Contents
HDL Signal Polling
Methods
uvm_get_pollsimple get function that returns the poll instance for a given path If no instance exists, it creates one and returns it.
set_pollsimple set function that returns the poll instance for a given path @uvm-accellera The details of this API are specific to the Accellera implementation
uvm_hdl_pollingBase class for HDL Polling functionality when using the uvm_hdl_polling class.
uvm_hdl_polling_cbsA base class for defining polling action callbacks to execute upon HDL path RTL signal value change
uvm_polling_backdoorBackdoor base class for HDL Polling Extend this class and implement the methods in it to obtain backdoor functionality when using the uvm_hdl_polling class.

uvm_get_poll

function uvm_hdl_polling uvm_get_poll(
    string  pathname
)

simple get function that returns the poll instance for a given path If no instance exists, it creates one and returns it.  @uvm-accellera The details of this API are specific to the Accellera implementation

set_poll

function bit uvm_set_poll(
    uvm_hdl_polling  poll_inst,
    string  pathname
)

simple set function that returns the poll instance for a given path @uvm-accellera The details of this API are specific to the Accellera implementation

uvm_hdl_polling

Base class for HDL Polling functionality when using the uvm_hdl_polling class.  An instance of this class should be created for each monitored signal This class implements active monitoring of RTL value change for signals.

See the README.md for information on how to use this mechanism

An instance of this class should be created for each monitored register/field.

Assumptions.  The largest signal that is being polled will fit inside a register of width uvm_poll_data_t.  Users can redefine the MAX_WIDTH of the signal @uvm-accellera The details of this API are specific to the Accellera implementation

Summary
uvm_hdl_polling
Base class for HDL Polling functionality when using the uvm_hdl_polling class.
Class Hierarchy
uvm_object
uvm_hdl_polling
Class Declaration
class uvm_hdl_polling extends uvm_object
Methods
get_backdoorsimple setter and getter functions for the backdoor mechanism @uvm-accellera The details of this API are specific to the Accellera implementation
set_backdoorThis method registers a backdoor class with the uvm_hdl_polling object.
set_hdl_poll_cb_registeredThis method basically sets an internal variable if a callback has been registered to this polling object.
get_hdl_poll_cb_registeredAccessor method to determine if a callback was registered for this object.
newConstructor.
create_probeThis method creates a probe.
register_hdl_pathThis function registers a VPI value change callback for each RTL path Returns immediately if API callback was already registered Returns 1 if registration succeeded, 0 otherwise
wait_for_hdl_changeif you’re using the default VPI implementation Register a value change VPI callback if not already registered Wait for a value change and then Return the new value if you’re using the backdoor, it will return when the backdoor changes.
polling_wait_for_valuePerform register/field polling.
set_hdl_pathThis method returns a summary statistic for the polling classes.
get_number_callbacksThis method returns the number of callback paths registered.
get_value_change_countThis method tells you how many times the value of the signal changed.

get_backdoor

function uvm_polling_backdoor get_backdoor()

simple setter and getter functions for the backdoor mechanism @uvm-accellera The details of this API are specific to the Accellera implementation

set_backdoor

function void set_backdoor(
    uvm_polling_backdoor  backdoor
)

This method registers a backdoor class with the uvm_hdl_polling object.  Note that you must implement several methods in the backdoor instead of the built-in methods @uvm-accellera The details of this API are specific to the Accellera implementation

set_hdl_poll_cb_registered

function void set_hdl_poll_cb_registered(
    bit  value
)

This method basically sets an internal variable if a callback has been registered to this polling object.  @uvm-accellera The details of this API are specific to the Accellera implementation

get_hdl_poll_cb_registered

function bit get_hdl_poll_cb_registered

Accessor method to determine if a callback was registered for this object.  @uvm-accellera The details of this API are specific to the Accellera implementation

new

function new(
    string  name  =  "uvm_hdl_polling"
)

Constructor.  The callback iterator for the callbacks is also created in this constructor.  @uvm-accellera The details of this API are specific to the Accellera implementation

create_probe

function bit create_probe(
    uvm_hdl_polling  p,   
    string  fullname,   
    bit  enable  =  1
)

This method creates a probe.  You can choose to disable the probe when you create it.  @uvm-accellera The details of this API are specific to the Accellera implementation

register_hdl_path

function bit register_hdl_path(
    string  hdl_path_name
)

This function registers a VPI value change callback for each RTL path Returns immediately if API callback was already registered Returns 1 if registration succeeded, 0 otherwise

@uvm-accellera The details of this API are specific to the Accellera implementation

wait_for_hdl_change

virtual task wait_for_hdl_change(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)

if you’re using the default VPI implementation Register a value change VPI callback if not already registered Wait for a value change and then Return the new value if you’re using the backdoor, it will return when the backdoor changes.  @uvm-accellera The details of this API are specific to the Accellera implementation

polling_wait_for_value

virtual task polling_wait_for_value(
    ref  uvm_poll_status_e  status,
    input  uvm_poll_data_t  exp_val
)

Perform register/field polling.  Continue waiting for a value change until the expected value exp_val is identified @uvm-accellera The details of this API are specific to the Accellera implementation

set_hdl_path

This method returns a summary statistic for the polling classes.

get_number_callbacks

This method returns the number of callback paths registered.  Should always be 1.

get_value_change_count

This method tells you how many times the value of the signal changed.

uvm_hdl_polling_cbs

A base class for defining polling action callbacks to execute upon HDL path RTL signal value change

@uvm-accellera The details of this API are specific to the Accellera implementation

Summary
uvm_hdl_polling_cbs
A base class for defining polling action callbacks to execute upon HDL path RTL signal value change
Class Hierarchy
uvm_callback
uvm_hdl_polling_cbs
Class Declaration
virtual class uvm_hdl_polling_cbs extends uvm_callback
Methods
newClass Constructor
do_on_hdl_changeTo be implemented by extended classes to perform an action upon a value change of a register or a field
do_on_path_changeTo be implemented by extended classes to perform an action upon a value change of a path hdl_path is the path that its value has changed val is the actual value of the path after it was changed size is the size in bits of the path’s value

new

function new(
    string  name  =  ""
)

Class Constructor

do_on_hdl_change

To be implemented by extended classes to perform an action upon a value change of a register or a field

do_on_path_change

To be implemented by extended classes to perform an action upon a value change of a path hdl_path is the path that its value has changed val is the actual value of the path after it was changed size is the size in bits of the path’s value

uvm_polling_backdoor

Backdoor base class for HDL Polling Extend this class and implement the methods in it to obtain backdoor functionality when using the uvm_hdl_polling class.  An instance of this class should be created for each monitored signal

Summary
uvm_polling_backdoor
Backdoor base class for HDL Polling Extend this class and implement the methods in it to obtain backdoor functionality when using the uvm_hdl_polling class.
Methods
newClass constructor
create_backdoor_probeThis function registers a backdoor probe on the signal.
poll_bkdr_wait_for_hdl_changeThis task is a hdl monitoring task that returns any time the monitored hdl signal changes its value.
hdl_readThis function will read the HDL value and return its value.
get_signal_sizeYou must implement this function in the backdoor class to give you back the size of the signal @uvm-accellera The details of this API are specific to the Accellera implementation
set_hdl_pathYou may use this function to cache the full path to the signal.

new

function new(
    string  name  =  ""
)

Class constructor

create_backdoor_probe

virtual function bit create_backdoor_probe(
    int  key,   
    string  fullname,   
    bit  enable  =  1
)

This function registers a backdoor probe on the signal.  You must return a 1 in case you’re able to access the signal.  One approach is to obtain a virtual interface handle and return 1 in case you are able to get the handle.  You may return 1 if you wish to access the signal by any other method like a direct cross module reference.  @uvm-accellera The details of this API are specific to the Accellera implementation

poll_bkdr_wait_for_hdl_change

virtual task poll_bkdr_wait_for_hdl_change(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)

This task is a hdl monitoring task that returns any time the monitored hdl signal changes its value.  This task will read the HDL value and return its value.  If it cannot return the value, status must be set to UVM_HDL_POLL_NOT_OK.  If the backdoor can read the value, it must be set to UVM_HDL_POLL_OK @uvm-accellera The details of this API are specific to the Accellera implementation

hdl_read

virtual function void hdl_read(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)

This function will read the HDL value and return its value.  If it cannot return the value The status must be set to UVM_HDL_POLL_NOT_OK.  if the backdoor can read the value, it must be set to UVM_HDL_POLL_OK @uvm-accellera The details of this API are specific to the Accellera implementation

get_signal_size

virtual function int get_signal_size()

You must implement this function in the backdoor class to give you back the size of the signal @uvm-accellera The details of this API are specific to the Accellera implementation

set_hdl_path

You may use this function to cache the full path to the signal.  It may be useful in debug but is not functionally necessary.

function uvm_hdl_polling uvm_get_poll(
    string  pathname
)
simple get function that returns the poll instance for a given path If no instance exists, it creates one and returns it.
function bit uvm_set_poll(
    uvm_hdl_polling  poll_inst,
    string  pathname
)
simple set function that returns the poll instance for a given path @uvm-accellera The details of this API are specific to the Accellera implementation
class uvm_hdl_polling extends uvm_object
Base class for HDL Polling functionality when using the uvm_hdl_polling class.
virtual class uvm_hdl_polling_cbs extends uvm_callback
A base class for defining polling action callbacks to execute upon HDL path RTL signal value change
function uvm_polling_backdoor get_backdoor()
simple setter and getter functions for the backdoor mechanism @uvm-accellera The details of this API are specific to the Accellera implementation
function void set_backdoor(
    uvm_polling_backdoor  backdoor
)
This method registers a backdoor class with the uvm_hdl_polling object.
function void set_hdl_poll_cb_registered(
    bit  value
)
This method basically sets an internal variable if a callback has been registered to this polling object.
function bit get_hdl_poll_cb_registered
Accessor method to determine if a callback was registered for this object.
function new(
    string  name  =  "uvm_hdl_polling"
)
Constructor.
function bit create_probe(
    uvm_hdl_polling  p,   
    string  fullname,   
    bit  enable  =  1
)
This method creates a probe.
function bit register_hdl_path(
    string  hdl_path_name
)
This function registers a VPI value change callback for each RTL path Returns immediately if API callback was already registered Returns 1 if registration succeeded, 0 otherwise
virtual task wait_for_hdl_change(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)
if you’re using the default VPI implementation Register a value change VPI callback if not already registered Wait for a value change and then Return the new value if you’re using the backdoor, it will return when the backdoor changes.
virtual task polling_wait_for_value(
    ref  uvm_poll_status_e  status,
    input  uvm_poll_data_t  exp_val
)
Perform register/field polling.
function new(
    string  name  =  ""
)
Class Constructor
function new(
    string  name  =  ""
)
Class constructor
virtual function bit create_backdoor_probe(
    int  key,   
    string  fullname,   
    bit  enable  =  1
)
This function registers a backdoor probe on the signal.
virtual task poll_bkdr_wait_for_hdl_change(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)
This task is a hdl monitoring task that returns any time the monitored hdl signal changes its value.
virtual function void hdl_read(
    ref  uvm_poll_status_e  status,
    ref  uvm_poll_data_t  val
)
This function will read the HDL value and return its value.
virtual function int get_signal_size()
You must implement this function in the backdoor class to give you back the size of the signal @uvm-accellera The details of this API are specific to the Accellera implementation