# uvm_*_imp ports

The following defines the TLM implementation (imp) classes.

Contents

uvm_*_imp ports | The 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

T | The type of transaction to be communicated by the imp
IMP | The 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 |
new | Creates a new unidirectional imp port with the given name and parent.

### Methods

### 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

REQ | Request transaction type
RSP | Response transaction type
IMP | Component type that implements the interface methods, typically the the parent of this imp port.
REQ_IMP | Component type that implements the request side of the interface. Defaults to IMP. For master and slave imps only.
RSP_IMP | Component 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 |
new | Creates a new bidirectional imp port with the given name and parent.

### Methods

### 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.