uvm_*_imp ports

The following defines the TLM implementation (imp) classes.

Contents
uvm_*_imp portsThe following defines the TLM implementation (imp) classes.
uvm_*_imp #(T,IMP)Unidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.
uvm_*_imp #(REQ, RSP, IMP, REQ_IMP, RSP_IMP)Bidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.

uvm_*_imp #(T,IMP)

Unidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.  Each imp port instance must be connected to the component instance that implements the associated interface, typically the imp port’s parent.  All other connections-- e.g. to other ports and exports-- are prohibited.

The asterisk in uvm_*_imp may be any of the following

blocking_put
nonblocking_put
put

blocking_get
nonblocking_get
get

blocking_peek
nonblocking_peek
peek

blocking_get_peek
nonblocking_get_peek
get_peek

Type parameters

TThe type of transaction to be communicated by the imp
IMPThe type of the component implementing the interface.  That is, the class to which this imp will delegate.

The interface methods are implemented in a component of type IMP, a handle to which is passed in a constructor argument.  The imp port delegates all interface calls to this component.

Summary
uvm_*_imp #(T,IMP)
Unidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.
Methods
newCreates a new unidirectional imp port with the given name and parent.

new

Creates a new unidirectional imp port with the given name and parent.  The parent must implement the interface associated with this port.  Its type must be the type specified in the imp’s type-parameter, IMP.

function new (string name, IMP parent);

uvm_*_imp #(REQ, RSP, IMP, REQ_IMP, RSP_IMP)

Bidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.  Each imp port instance must be connected to the component instance that implements the associated interface, typically the imp port’s parent.  All other connections-- e.g. to other ports and exports-- are prohibited.

The interface represented by the asterisk is any of the following

blocking_transport
nonblocking_transport
transport

blocking_master
nonblocking_master
master

blocking_slave
nonblocking_slave
slave

Type parameters

REQRequest transaction type
RSPResponse transaction type
IMPComponent type that implements the interface methods, typically the the parent of this imp port.
REQ_IMPComponent type that implements the request side of the interface.  Defaults to IMP.  For master and slave imps only.
RSP_IMPComponent type that implements the response side of the interface.  Defaults to IMP.  For master and slave imps only.

The interface methods are implemented in a component of type IMP, a handle to which is passed in a constructor argument.  The imp port delegates all interface calls to this component.

The master and slave imps have two modes of operation.

  • A single component of type IMP implements the entire interface for both requests and responses.
  • Two sibling components of type REQ_IMP and RSP_IMP implement the request and response interfaces, respectively.  In this case, the IMP parent instantiates this imp port and the REQ_IMP and RSP_IMP components.

The second mode is needed when a component instantiates more than one imp port, as in the uvm_tlm_req_rsp_channel #(REQ,RSP) channel.

Summary
uvm_*_imp #(REQ, RSP, IMP, REQ_IMP, RSP_IMP)
Bidirectional implementation (imp) port classes--An imp port provides access to an implementation of the associated interface to all connected ports and exports.
Methods
newCreates a new bidirectional imp port with the given name and parent.

new

Creates a new bidirectional imp port with the given name and parent.  The parent, whose type is specified by IMP type parameter, must implement the interface associated with this port.

Transport imp constructor

function new(string name, IMP imp)

Master and slave imp constructor

The optional req_imp and rsp_imp arguments, available to master and slave imp ports, allow the requests and responses to be handled by different subcomponents.  If they are specified, they must point to the underlying component that implements the request and response methods, respectively.

function new(string name, IMP imp,
                          REQ_IMP req_imp=imp, RSP_IMP rsp_imp=imp)
class uvm_tlm_req_rsp_channel #( type  REQ  =  int,
type  RSP  =  REQ ) extends uvm_component
The uvm_tlm_req_rsp_channel contains a request FIFO of type REQ and a response FIFO of type RSP.