Classes for Adapting Between Register and Bus Operations

This section defines classes used to convert transaction streams between generic register address/data reads and writes and physical bus accesses.

Contents
Classes for Adapting Between Register and Bus OperationsThis section defines classes used to convert transaction streams between generic register address/data reads and writes and physical bus accesses.
uvm_reg_adapterThis class defines an interface for converting between uvm_reg_bus_op and a specific bus transaction.
uvm_reg_tlm_adapterFor converting between uvm_reg_bus_op and uvm_tlm_gp items.

uvm_reg_adapter

This class defines an interface for converting between uvm_reg_bus_op and a specific bus transaction.

Summary
uvm_reg_adapter
This class defines an interface for converting between uvm_reg_bus_op and a specific bus transaction.
Class Hierarchy
uvm_reg_adapter
Class Declaration
virtual class uvm_reg_adapter extends uvm_object
newCreate a new instance of this type, giving it the optional name.
supports_byte_enableSet this bit in extensions of this class if the bus protocol supports byte enables.
provides_responsesSet this bit in extensions of this class if the bus driver provides separate response items.
reg2busExtensions of this class must implement this method to convert a uvm_reg_item to the uvm_sequence_item subtype that defines the bus transaction.
bus2regExtensions of this class must implement this method to copy members of the given bus_item to corresponding members of the provided bus_rw instance.
ExampleThe following example illustrates how to implement a RegModel-BUS adapter class for the APB bus protocol.

new

function new( string  name  =  "" )

Create a new instance of this type, giving it the optional name.

supports_byte_enable

bit supports_byte_enable

Set this bit in extensions of this class if the bus protocol supports byte enables.

provides_responses

bit provides_responses

Set this bit in extensions of this class if the bus driver provides separate response items.

reg2bus

pure virtual function uvm_sequence_item reg2bus( const ref  uvm_reg_bus_op  rw )

Extensions of this class must implement this method to convert a uvm_reg_item to the uvm_sequence_item subtype that defines the bus transaction.

The method must allocate a new bus item, assign its members from the corresponding members from the given bus_rw item, then return it.  The bus item gets returned in a uvm_sequence_item base handle.

bus2reg

pure virtual function void bus2reg( uvm_sequence_item  bus_item,
ref  uvm_reg_bus_op  rw )

Extensions of this class must implement this method to copy members of the given bus_item to corresponding members of the provided bus_rw instance.  Unlike reg2bus, the resulting transaction is not allocated from scratch.  This is to accommodate applications where the bus response must be returned in the original request.

Example

The following example illustrates how to implement a RegModel-BUS adapter class for the APB bus protocol.

class rreg2apb_adapter extends uvm_reg_adapter;
  `uvm_object_utils(reg2apb_adapter)

  function new(string name="reg2apb_adapter");
    super.new(name);

  endfunction

  virtual function uvm_sequence_item reg2bus(uvm_reg_bus_op rw);
    apb_item apb = apb_item::type_id::create("apb_item");
    apb.op   = (rw.kind == UVM_READ) ? apb::READ : apb::WRITE;
    apb.addr = rw.addr;
    apb.data = rw.data;
    return apb;
  endfunction

  virtual function void bus2reg(uvm_sequencer_item bus_item,
                                uvm_reg_bus_op rw);
    apb_item apb;
    if (!$cast(apb,bus_item)) begin
      `uvm_fatal("CONVERT_APB2REG","Bus item is not of type apb_item")
    end
    rw.kind  = apb.op==apb::READ ? UVM_READ : UVM_WRITE;
    rw.addr = apb.addr;
    rw.data = apb.data;
    rw.status = UVM_IS_OK;
  endfunction

endclass

uvm_reg_tlm_adapter

For converting between uvm_reg_bus_op and uvm_tlm_gp items.

Summary
uvm_reg_tlm_adapter
For converting between uvm_reg_bus_op and uvm_tlm_gp items.
Class Hierarchy
uvm_reg_tlm_adapter
Class Declaration
class uvm_reg_tlm_adapter extends uvm_reg_adapter
Methods
reg2busConverts a uvm_reg_bus_op struct to a uvm_tlm_gp item.
bus2regConverts a uvm_tlm_gp item to a uvm_reg_bus_op.

reg2bus

virtual function uvm_sequence_item reg2bus( const ref  uvm_reg_bus_op  rw )

Converts a uvm_reg_bus_op struct to a uvm_tlm_gp item.

bus2reg

virtual function void bus2reg( uvm_sequence_item  bus_item,
ref  uvm_reg_bus_op  rw )

Converts a uvm_tlm_gp item to a uvm_reg_bus_op. into the provided rw transaction.

virtual class uvm_reg_adapter extends uvm_object
This class defines an interface for converting between uvm_reg_bus_op and a specific bus transaction.
Struct that defines a generic bus transaction for register and memory accesses, having kind (read or write), address, data, and byte enable information.
class uvm_reg_tlm_adapter extends uvm_reg_adapter
For converting between uvm_reg_bus_op and uvm_tlm_gp items.
typedef uvm_tlm_generic_payload uvm_tlm_gp
This typedef provides a short, more convenient name for the uvm_tlm_generic_payload type.
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.
function new( string  name  =  "" )
Create a new instance of this type, giving it the optional name.
bit supports_byte_enable
Set this bit in extensions of this class if the bus protocol supports byte enables.
bit provides_responses
Set this bit in extensions of this class if the bus driver provides separate response items.
pure virtual function uvm_sequence_item reg2bus( const ref  uvm_reg_bus_op  rw )
Extensions of this class must implement this method to convert a uvm_reg_item to the uvm_sequence_item subtype that defines the bus transaction.
class uvm_reg_item extends uvm_sequence_item
Defines an abstract register transaction item.
class uvm_sequence_item extends uvm_transaction
The base class for user-defined sequence items and also the base class for the uvm_sequence class.
pure virtual function void bus2reg( uvm_sequence_item  bus_item,
ref  uvm_reg_bus_op  rw )
Extensions of this class must implement this method to copy members of the given bus_item to corresponding members of the provided bus_rw instance.
virtual function uvm_sequence_item reg2bus( const ref  uvm_reg_bus_op  rw )
Converts a uvm_reg_bus_op struct to a uvm_tlm_gp item.
virtual function void bus2reg( uvm_sequence_item  bus_item,
ref  uvm_reg_bus_op  rw )
Converts a uvm_tlm_gp item to a uvm_reg_bus_op.