Overview
Transaction Level Modeling (TLM) is a verification and modeling technique whose essential requirement, in the provided evidence, is temporal decoupling: transaction data should be decoupled from simulation time and events. This characteristic is contrasted with SystemVerilog behavior, where integral variables and expressions implicitly carry value-change events, enabling constructs such as wait(a > b) and thereby tying data values to event semantics. [C1]
SystemVerilog implications
The evidence states that SystemVerilog lacks support for TLM at a fundamental level because TLM requires temporal decoupling of data from simulation time and events, while SystemVerilog integral variables and expressions implicitly hold value-change events. The same source reports that computational algorithms coded in SystemVerilog execute an order of magnitude slower than corresponding code in C/C++ and other native programming languages. [C1]
This limitation is discussed in the context of verification testbench performance. The evidence notes that modern HDL simulators can parallelize RTL designs, but comparatively little has been done to enable multicore parallelization of testbenches. It also describes SystemVerilog/UVM testbenches as behavioral, capable of automatic data scoping, and able to share data by reference, which makes parallelism require user-level constructs for synchronized access to shared data. [C2]
TLM FIFOs in UVM and eUVM
The evidence describes UVM TLM FIFOs as the prescribed mechanism for exchanging data between asynchronous worker threads and synchronous simulator tasks while maintaining synchronization. A regular UVM TLM FIFO blocks a read operation through an explicit event in the read port when the FIFO is empty; a write into the FIFO triggers that read event and reactivates the blocked task. Similarly, when the FIFO is full, an explicit event associated with the write port blocks a write operation. [C3]
eUVM extends this pattern for asynchronous worker threads. Worker threads are described as free-running asynchronous threads owned by the simulator but decoupled from the scheduler. Because such worker threads cannot wait for simulator events, eUVM implements asynchronous TLM FIFO variants to support synchronized transaction exchange. [C4]
One described variant is an async-write TLM FIFO, used when a worker thread generates UVM transactions that must be transferred to a regular UVM task. If the FIFO is full, the worker thread is blocked by a software semaphore rather than a UVM event. When the receiving task pulls a transaction and a FIFO slot becomes available, the semaphore is freed to unblock the worker thread. If the FIFO is empty, the receiving task blocks on the regular UVM read-port event; when the worker thread puts a transaction into the FIFO, it triggers the read event and unblocks the receiver. The evidence also notes that an async-read TLM FIFO handles the reverse scenario, where a worker thread receives data from a regular UVM task. [C5]
Role in acceleration and parallel testbenches
The evidence places TLM-related mechanisms in the broader context of testbench acceleration. It mentions transaction-based acceleration for co-emulation, specifically an approach proposing an untimed hardware verification language domain for accelerating the testbench when the design under test is mapped to FPGA while the testbench continues to run on an HDL simulator. [C6]
Within multicore testbench execution, the evidence presents sequence-level parallelization and asynchronous TLM FIFOs as mechanisms that allow worker threads and regular UVM tasks to exchange transactions while respecting synchronization constraints imposed by simulator scheduling and event semantics. [C4]