uvm_indirect_register

and uvm_indirect_address_register

This pair of registers are used together.  An address register is used to define an indirect address which will be used the next time the data register is acccessed.

For example, writing value = 42 to the address register causes the next write to the data register to store the written value in an internal (indirect) memory at location 42.  Furthermore, after each write or read on the data register, the address is incremented by one.

To use the indirect registers, a pair must be constructed.  The address register and the data register.  Once both are constructed, they are linked using the ‘connect_to_data_register()’ call.

Once they are linked, they are no different than any other register, and can be put into the register files and address maps as desired.

Summary
uvm_indirect_register
and uvm_indirect_address_register
Class Hierarchy
uvm_register#(T)
uvm_indirect_register
Class Declaration
class uvm_indirect_register #(
   type T =  bit[31:0]
) extends uvm_register#(T)
Methods
indirect_address_write()Sets the indirect address to v for the next data read or write.
indirect_address_read()Returns the current pointer.
poke()Re-implement to have the correct behavior.
indirect_write()Set the value, and increment the pointer.
indirect_read()Get the current value, and increment the pointer.
read_without_notify()Re-implement to have the correct behavior.
write_without_notify()Re-implement to have the correct behavior.

indirect_address_write()

virtual function void indirect_address_write(v)

Sets the indirect address to v for the next data read or write.

indirect_address_read()

virtual function T indirect_address_read()

Returns the current pointer.

poke()

function void poke(v)

Re-implement to have the correct behavior.

indirect_write()

virtual function void indirect_write(v)

Set the value, and increment the pointer.

indirect_read()

virtual function T indirect_read()

Get the current value, and increment the pointer.

read_without_notify()

function T read_without_notify(

Re-implement to have the correct behavior.

write_without_notify()

function void write_without_notify(v,

Re-implement to have the correct behavior.

uvm_indirect_address_register

Used in conjunction with uvm_indirect_register.  This class provides the “address register” behavior of an indirect register access.

Summary
uvm_indirect_address_register
Used in conjunction with uvm_indirect_register.
Class Hierarchy
uvm_register#(T)
uvm_indirect_address_register
Class Declaration
class uvm_indirect_address_register #(
   type T =  bit[31:0]
) extends uvm_register#(T)
Methods
connect_to_data_register()This routine is used to provide the data register to the address register.
poke()Poke is re-implemented to set the pointer value in the data register.
peek()Peek is re-implemented to get the pointer value in the data register.

connect_to_data_register()

function void connect_to_data_register(uvm_indirect_register #(T) r)

This routine is used to provide the data register to the address register.

poke()

function void poke(v)

Poke is re-implemented to set the pointer value in the data register.

peek()

function T peek()

Peek is re-implemented to get the pointer value in the data register.

class uvm_indirect_register #(type T =  bit[31:0]) extends uvm_register#(T)
and uvm_indirect_address_register
virtual function void indirect_address_write(v)
Sets the indirect address to v for the next data read or write.
virtual function T indirect_address_read()
Returns the current pointer.
function void poke(v)
Re-implement to have the correct behavior.
virtual function void indirect_write(v)
Set the value, and increment the pointer.
virtual function T indirect_read()
Get the current value, and increment the pointer.
function T read_without_notify(
Re-implement to have the correct behavior.
function void write_without_notify(v,
Re-implement to have the correct behavior.
class uvm_indirect_address_register #(
   type T =  bit[31:0]
) extends uvm_register#(T)
Used in conjunction with uvm_indirect_register.
function void connect_to_data_register(uvm_indirect_register #(T) r)
This routine is used to provide the data register to the address register.
function void poke(v)
Poke is re-implemented to set the pointer value in the data register.
function T peek()
Peek is re-implemented to get the pointer value in the data register.