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