# TLM2 Types

Summary

TLM2 Types
Enumerations |
uvm_tlm_phase_e | Nonblocking transport synchronization state values between an initiator and a target.
uvm_tlm_sync_e | Pre-defined phase state values for the nonblocking transport Base Protocol between an initiator and a target.
Macros |
`UVM_TLM_TASK_ERROR | Defines Not-Yet-Implemented TLM tasks
`UVM_TLM_FUNCTION_ERROR | Defines Not-Yet-Implemented TLM functions

### Enumerations

### uvm_tlm_phase_e

Nonblocking transport synchronization state values between an initiator and a target.

UNINITIALIZED_PHASE | Defaults for constructor
BEGIN_REQ | Beginning of request phase
END_REQ | End of request phase
BEGIN_RESP | Beginning of response phase
END_RESP | End of response phase

### uvm_tlm_sync_e

Pre-defined phase state values for the nonblocking transport Base Protocol between an initiator and a target.

UVM_TLM_ACCEPTED | Transaction has been accepted
UVM_TLM_UPDATED | Transaction has been modified
UVM_TLM_COMPLETED | Execution of transaction is complete

### Macros

### `UVM_TLM_TASK_ERROR

Defines Not-Yet-Implemented TLM tasks

### `UVM_TLM_FUNCTION_ERROR

Defines Not-Yet-Implemented TLM functions

## uvm_tlm_if

Base class type to define the transport functions.

- nb_transport_fw
- nb_transport_bw
- b_transport

Summary

uvm_tlm_if
Base class type to define the transport functions.
Class Declaration
> class uvm_tlm_if #(
> | type | T | = | uvm_tlm_generic_payload,
> | type | P | = | uvm_tlm_phase_e
> )
tlm transport methods | Each of the interface methods take a handle to the transaction to be transported and a reference argument for the delay.
nb_transport_fw | Forward path call.
nb_transport_bw | Implementation of the backward path.
b_transport | Execute a blocking transaction.

### tlm transport methods

Each of the interface methods take a handle to the transaction to be transported and a reference argument for the delay. In addition, the nonblocking interfaces take a reference argument for the phase.

### nb_transport_fw

> virtual function uvm_tlm_sync_e nb_transport_fw(
> |  | T | t,
> | ref | P | p,
> | input | uvm_tlm_time | delay
> )

Forward path call. The first call to this method for a transaction marks the initial timing point. Every call to this method may mark a timing point in the execution of the transaction. The timing annotation argument allows the timing points to be offset from the simulation times at which the forward path is used. The final timing point of a transaction may be marked by a call to nb_transport_bw or a return from this or subsequent call to nb_transport_fw.

See TLM2 Interfaces, Ports, Exports and Transport Interfaces Subset for more details on the semantics and rules of the nonblocking transport interface.

### nb_transport_bw

> virtual function uvm_tlm_sync_e nb_transport_bw(
> |  | T | t,
> | ref | P | p,
> | input | uvm_tlm_time | delay
> )

Implementation of the backward path. This function MUST be implemented in the INITIATOR component class.

Every call to this method may mark a timing point, including the final timing point, in the execution of the transaction. The timing annotation argument allows the timing point to be offset from the simulation times at which the backward path is used. The final timing point of a transaction may be marked by a call to nb_transport_fw or a return from this or subsequent call to nb_transport_bw.

See TLM2 Interfaces, Ports, Exports and Transport Interfaces Subset for more details on the semantics and rules of the nonblocking transport interface.

#### Example

>     class master extends uvm_component;

uvm_tlm_nb_initiator_socket #(trans, uvm_tlm_phase_e, this_t) initiator_socket;

>     ...
>     function void build_phase(uvm_phase phase);

initiator_socket = new(“initiator_socket”, this, this);

>        endfunction

>        function uvm_tlm_sync_e nb_transport_bw(ref trans t,
>                                       ref uvm_tlm_phase_e p,
>                                       input uvm_tlm_time delay);
>            transaction = t;
>            state = p;
>            return UVM_TLM_ACCEPTED;
>        endfunction

>        ...
>     endclass

### b_transport

> virtual task b_transport(
> | T | t,
> | uvm_tlm_time | delay
> )

Execute a blocking transaction. Once this method returns, the transaction is assumed to have been executed. Whether that execution is successful or not must be indicated by the transaction itself.

The callee may modify or update the transaction object, subject to any constraints imposed by the transaction class. The initiator may re-use a transaction object from one call to the next and across calls to b_transport().

The call to b_transport shall mark the first timing point of the transaction. The return from b_transport shall mark the final timing point of the transaction. The timing annotation argument allows the timing points to be offset from the simulation times at which the task call and return are executed.

> class uvm_tlm_if #(
> | type | T | = | uvm_tlm_generic_payload,
> | type | P | = | uvm_tlm_phase_e
> )

Base class type to define the transport functions.

> virtual function uvm_tlm_sync_e nb_transport_fw(
> |  | T | t,
> | ref | P | p,
> | input | uvm_tlm_time | delay
> )

Forward path call.

> virtual function uvm_tlm_sync_e nb_transport_bw(
> |  | T | t,
> | ref | P | p,
> | input | uvm_tlm_time | delay
> )

Implementation of the backward path.

> virtual task b_transport(
> | T | t,
> | uvm_tlm_time | delay
> )

Execute a blocking transaction.
Sockets group together all the necessary core interfaces for transportation and binding, allowing more generic usage models than just TLM core interfaces.