# Register Callbacks

This section defines the base class used for all register callback extensions. It also includes pre-defined callback extensions for use on read-only and write-only registers.

Contents

Register Callbacks | This section defines the base class used for all register callback extensions.
uvm_reg_cbs | Facade class for field, register, memory and backdoor access callback methods.
Typedefs |
uvm_reg_cb | Convenience callback type declaration for registers
uvm_reg_cb_iter | Convenience callback iterator type declaration for registers
uvm_reg_bd_cb | Convenience callback type declaration for backdoor
uvm_reg_bd_cb_iter | Convenience callback iterator type declaration for backdoor
uvm_mem_cb | Convenience callback type declaration for memories
uvm_mem_cb_iter | Convenience callback iterator type declaration for memories
uvm_reg_field_cb | Convenience callback type declaration for fields
uvm_reg_field_cb_iter | Convenience callback iterator type declaration for fields
Predefined Extensions |
uvm_reg_read_only_cbs | Pre-defined register callback method for read-only registers that will issue an error if a write() operation is attempted.
uvm_reg_write_only_cbs | Pre-defined register callback method for write-only registers that will issue an error if a read() operation is attempted.

## uvm_reg_cbs

Facade class for field, register, memory and backdoor access callback methods.

Summary

uvm_reg_cbs
Facade class for field, register, memory and backdoor access callback methods.
Class Hierarchy
uvm_void
uvm_object
uvm_callback
uvm_reg_cbs
Class Declaration
> virtual class uvm_reg_cbs extends uvm_callback
Methods |
pre_write | Called before a write operation.
post_write | Called after a write operation.
pre_read | Callback called before a read operation.
post_read | Callback called after a read operation.
post_predict | Called by the uvm_reg_field::predict() method after a successful UVM_PREDICT_READ or UVM_PREDICT_WRITE prediction.
encode | Data encoder
decode | Data decode

### Methods

### pre_write

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Called before a write operation.

All registered pre_write callback methods are invoked after the invocation of the pre_write method of associated object (uvm_reg, uvm_reg_field, uvm_mem, or uvm_reg_backdoor). If the element being written is a uvm_reg, all pre_write callback methods are invoked before the contained uvm_reg_fields.

Backdoor | uvm_reg_backdoor::pre_write, uvm_reg_cbs::pre_write cbs for backdoor.
Register | uvm_reg::pre_write, uvm_reg_cbs::pre_write cbs for reg, then foreach field: uvm_reg_field::pre_write, uvm_reg_cbs::pre_write cbs for field
RegField | uvm_reg_field::pre_write, uvm_reg_cbs::pre_write cbs for field
Memory | uvm_mem::pre_write, uvm_reg_cbs::pre_write cbs for mem

The rw argument holds information about the operation.

- Modifying the value modifies the actual value written.
- For memories, modifying the offset modifies the offset used in the operation.
- For non-backdoor operations, modifying the access path or address map modifies the actual path or map used in the operation.

If the rw.status is modified to anything other than UVM_IS_OK, the operation is aborted.

See uvm_reg_item for details on rw information.

### post_write

> virtual task post_write(
> | uvm_reg_item | rw
> )

Called after a write operation.

All registered post_write callback methods are invoked before the invocation of the post_write method of the associated object (uvm_reg, uvm_reg_field, uvm_mem, or uvm_reg_backdoor). If the element being written is a uvm_reg, all post_write callback methods are invoked before the contained uvm_reg_fields.

#### Summary of callback order

Backdoor | uvm_reg_cbs::post_write cbs for backdoor, uvm_reg_backdoor::post_write
Register | uvm_reg_cbs::post_write cbs for reg, uvm_reg::post_write, then foreach field: uvm_reg_cbs::post_write cbs for field, uvm_reg_field::post_read
RegField | uvm_reg_cbs::post_write cbs for field, uvm_reg_field::post_write
Memory | uvm_reg_cbs::post_write cbs for mem, uvm_mem::post_write

The rw argument holds information about the operation.

- Modifying the status member modifies the returned status.
- Modifying the value or offset members has no effect, as the operation has already completed.

See uvm_reg_item for details on rw information.

### pre_read

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Callback called before a read operation.

All registered pre_read callback methods are invoked after the invocation of the pre_read method of associated object (uvm_reg, uvm_reg_field, uvm_mem, or uvm_reg_backdoor). If the element being read is a uvm_reg, all pre_read callback methods are invoked before the contained uvm_reg_fields.

Backdoor | uvm_reg_backdoor::pre_read, uvm_reg_cbs::pre_read cbs for backdoor
Register | uvm_reg::pre_read, uvm_reg_cbs::pre_read cbs for reg, then foreach field: uvm_reg_field::pre_read, uvm_reg_cbs::pre_read cbs for field
RegField | uvm_reg_field::pre_read, uvm_reg_cbs::pre_read cbs for field
Memory | uvm_mem::pre_read, uvm_reg_cbs::pre_read cbs for mem

The rw argument holds information about the operation.

- The value member of rw is not used has no effect if modified.
- For memories, modifying the offset modifies the offset used in the operation.
- For non-backdoor operations, modifying the access path or address map modifies the actual path or map used in the operation.

If the rw.status is modified to anything other than UVM_IS_OK, the operation is aborted.

See uvm_reg_item for details on rw information.

### post_read

> virtual task post_read(
> | uvm_reg_item | rw
> )

Callback called after a read operation.

All registered post_read callback methods are invoked before the invocation of the post_read method of the associated object (uvm_reg, uvm_reg_field, uvm_mem, or uvm_reg_backdoor). If the element being read is a uvm_reg, all post_read callback methods are invoked before the contained uvm_reg_fields.

Backdoor | uvm_reg_cbs::post_read cbs for backdoor, uvm_reg_backdoor::post_read
Register | uvm_reg_cbs::post_read cbs for reg, uvm_reg::post_read, then foreach field: uvm_reg_cbs::post_read cbs for field, uvm_reg_field::post_read
RegField | uvm_reg_cbs::post_read cbs for field, uvm_reg_field::post_read
Memory | uvm_reg_cbs::post_read cbs for mem, uvm_mem::post_read

The rw argument holds information about the operation.

- Modifying the readback value or status modifies the actual returned value and status.
- Modifying the value or offset members has no effect, as the operation has already completed.

See uvm_reg_item for details on rw information.

### post_predict

> virtual function void post_predict(
> | input | uvm_reg_field | fld,
> | input | uvm_reg_data_t | previous,
> | inout | uvm_reg_data_t | value,
> | input | uvm_predict_e | kind,
> | input | uvm_path_e | path,
> | input | uvm_reg_map | map
> )

Called by the uvm_reg_field::predict() method after a successful UVM_PREDICT_READ or UVM_PREDICT_WRITE prediction.

previous is the previous value in the mirror and value is the latest predicted value. Any change to value will modify the predicted mirror value.

### encode

> virtual function void encode(
> | ref | uvm_reg_data_t | data[]
> )

Data encoder

The registered callback methods are invoked in order of registration after all the pre_write methods have been called. The encoded data is passed through each invocation in sequence. This allows the pre_write methods to deal with clear-text data.

By default, the data is not modified.

### decode

> virtual function void decode(
> | ref | uvm_reg_data_t | data[]
> )

Data decode

The registered callback methods are invoked in reverse order of registration before all the post_read methods are called. The decoded data is passed through each invocation in sequence. This allows the post_read methods to deal with clear-text data.

The reversal of the invocation order is to allow the decoding of the data to be performed in the opposite order of the encoding with both operations specified in the same callback extension.

By default, the data is not modified.

## Typedefs

Summary

Typedefs |
uvm_reg_cb | Convenience callback type declaration for registers
uvm_reg_cb_iter | Convenience callback iterator type declaration for registers
uvm_reg_bd_cb | Convenience callback type declaration for backdoor
uvm_reg_bd_cb_iter | Convenience callback iterator type declaration for backdoor
uvm_mem_cb | Convenience callback type declaration for memories
uvm_mem_cb_iter | Convenience callback iterator type declaration for memories
uvm_reg_field_cb | Convenience callback type declaration for fields
uvm_reg_field_cb_iter | Convenience callback iterator type declaration for fields
Predefined Extensions |

### uvm_reg_cb

Convenience callback type declaration for registers

Use this declaration to register the register callbacks rather than the more verbose parameterized class

### uvm_reg_cb_iter

Convenience callback iterator type declaration for registers

Use this declaration to iterate over registered register callbacks rather than the more verbose parameterized class

### uvm_reg_bd_cb

Convenience callback type declaration for backdoor

Use this declaration to register register backdoor callbacks rather than the more verbose parameterized class

### uvm_reg_bd_cb_iter

Convenience callback iterator type declaration for backdoor

Use this declaration to iterate over registered register backdoor callbacks rather than the more verbose parameterized class

### uvm_mem_cb

Convenience callback type declaration for memories

Use this declaration to register memory callbacks rather than the more verbose parameterized class

### uvm_mem_cb_iter

Convenience callback iterator type declaration for memories

Use this declaration to iterate over registered memory callbacks rather than the more verbose parameterized class

### uvm_reg_field_cb

Convenience callback type declaration for fields

Use this declaration to register field callbacks rather than the more verbose parameterized class

### uvm_reg_field_cb_iter

Convenience callback iterator type declaration for fields

Use this declaration to iterate over registered field callbacks rather than the more verbose parameterized class

### Predefined Extensions

## uvm_reg_read_only_cbs

Pre-defined register callback method for read-only registers that will issue an error if a write() operation is attempted.

Summary

uvm_reg_read_only_cbs
Pre-defined register callback method for read-only registers that will issue an error if a write() operation is attempted.
Class Hierarchy
uvm_void
uvm_object
uvm_callback
uvm_reg_cbs
uvm_reg_read_only_cbs
Class Declaration
> class uvm_reg_read_only_cbs extends uvm_reg_cbs
Methods |
pre_write | Produces an error message and sets status to UVM_NOT_OK.
add | Add this callback to the specified register and its contained fields.
remove | Remove this callback from the specified register and its contained fields.

### Methods

### pre_write

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Produces an error message and sets status to UVM_NOT_OK.

### add

> static function void add(
> | uvm_reg | rg
> )

Add this callback to the specified register and its contained fields.

### remove

> static function void remove(
> | uvm_reg | rg
> )

Remove this callback from the specified register and its contained fields.

## uvm_reg_write_only_cbs

Pre-defined register callback method for write-only registers that will issue an error if a read() operation is attempted.

Summary

uvm_reg_write_only_cbs
Pre-defined register callback method for write-only registers that will issue an error if a read() operation is attempted.
Class Hierarchy
uvm_void
uvm_object
uvm_callback
uvm_reg_cbs
uvm_reg_write_only_cbs
Class Declaration
> class uvm_reg_write_only_cbs extends uvm_reg_cbs
Methods |
pre_read | Produces an error message and sets status to UVM_NOT_OK.
add | Add this callback to the specified register and its contained fields.
remove | Remove this callback from the specified register and its contained fields.

### Methods

### pre_read

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Produces an error message and sets status to UVM_NOT_OK.

### add

> static function void add(
> | uvm_reg | rg
> )

Add this callback to the specified register and its contained fields.

### remove

> static function void remove(
> | uvm_reg | rg
> )

Remove this callback from the specified register and its contained fields.

> virtual class uvm_reg_cbs extends uvm_callback

Facade class for field, register, memory and backdoor access callback methods.

> class uvm_reg_read_only_cbs extends uvm_reg_cbs

Pre-defined register callback method for read-only registers that will issue an error if a write() operation is attempted.

> class uvm_reg_write_only_cbs extends uvm_reg_cbs

Pre-defined register callback method for write-only registers that will issue an error if a read() operation is attempted.

> virtual class uvm_void

The uvm_void class is the base class for all UVM classes.

> virtual class uvm_object extends uvm_void

The uvm_object class is the base class for all UVM data and hierarchical classes.

> class uvm_callback extends uvm_object

The uvm_callback class is the base class for user-defined callback classes.

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Called before a write operation.

> virtual task post_write(
> | uvm_reg_item | rw
> )

Called after a write operation.

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Callback called before a read operation.

> virtual task post_read(
> | uvm_reg_item | rw
> )

Callback called after a read operation.

> virtual function void post_predict(
> | input | uvm_reg_field | fld,
> | input | uvm_reg_data_t | previous,
> | inout | uvm_reg_data_t | value,
> | input | uvm_predict_e | kind,
> | input | uvm_path_e | path,
> | input | uvm_reg_map | map
> )

Called by the uvm_reg_field::predict() method after a successful UVM_PREDICT_READ or UVM_PREDICT_WRITE prediction.

> function bit predict (
> | uvm_reg_data_t | value, |  |
> | uvm_reg_byte_en_t | be | = | -1,
> | uvm_predict_e | kind | = | UVM_PREDICT_DIRECT,
> | uvm_path_e | path | = | UVM_FRONTDOOR,
> | uvm_reg_map | map | = | null,
> | string | fname | = | "",
> | int | lineno | = | 0
> )

Update the mirrored and desired value for this field.

> virtual function void encode(
> | ref | uvm_reg_data_t | data[]
> )

Data encoder

> virtual function void decode(
> | ref | uvm_reg_data_t | data[]
> )

Data decode

> virtual class uvm_reg extends uvm_object

Register abstraction base class

> class uvm_reg_field extends uvm_object

Field abstraction class

> class uvm_mem extends uvm_object

Memory abstraction base class

> class uvm_reg_backdoor extends uvm_object

Base class for user-defined back-door register and memory access.

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Called before user-defined backdoor register write.

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Called before register write.

> virtual task pre_write (
> | uvm_reg_item | rw
> )

Called before field write.

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Called before memory write.
Operation completed successfully

> class uvm_reg_item extends uvm_sequence_item

Defines an abstract register transaction item.

> virtual task post_write(
> | uvm_reg_item | rw
> )

Called after user-defined backdoor register write.

> virtual task post_write(
> | uvm_reg_item | rw
> )

Called after register write.

> virtual task post_read (
> | uvm_reg_item | rw
> )

Called after field read.

> virtual task post_write (
> | uvm_reg_item | rw
> )

Called after field write.

> virtual task post_write(
> | uvm_reg_item | rw
> )

Called after memory write.

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Called before user-defined backdoor register read.

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Called before register read.

> virtual task pre_read (
> | uvm_reg_item | rw
> )

Called before field read.

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Called before memory read.

> virtual task post_read(
> | uvm_reg_item | rw
> )

Called after user-defined backdoor register read.

> virtual task post_read(
> | uvm_reg_item | rw
> )

Called after register read.

> virtual task post_read(
> | uvm_reg_item | rw
> )

Called after memory read.

> virtual task pre_write(
> | uvm_reg_item | rw
> )

Produces an error message and sets status to UVM_NOT_OK.
Operation completed with error

> static function void add(
> | uvm_reg | rg
> )

Add this callback to the specified register and its contained fields.

> static function void remove(
> | uvm_reg | rg
> )

Remove this callback from the specified register and its contained fields.

> virtual task pre_read(
> | uvm_reg_item | rw
> )

Produces an error message and sets status to UVM_NOT_OK.

> static function void add(
> | uvm_reg | rg
> )

Add this callback to the specified register and its contained fields.

> static function void remove(
> | uvm_reg | rg
> )

Remove this callback from the specified register and its contained fields.