Introduction
Introduction Get started Hello UVM example UVM Phases Part 1 UVM Phases Part 2 UVM Base Classes UVM Object and Core Methods UVM ComponentsBuilding a Testbench
UVM Transaction UVM Sequence UVM Sequencer UVM Driver UVM Monitor UVM Scoreboard UVM Agent UVM Environment UVM TestOther Components
Coverage CollectorExecution Model
UVM Phases ObjectionsCommunication
TLM Basics TLM Blocking Put Port TLM Non-Blocking Put Port TLM Blocking Peek Port Analysis Ports TLM FIFOConfiguration
UVM Factory UVM Config DBRuntime Control
UVM Plusargs Seeds & Reproducibility Verbosity Control Debug Runtime ControlsAdvanced
Virtual Sequences Virtual SequencerUVM RAL
Intro Abstraction Flexibility Comparison Coverage Minimum Requirements Learning Path Register Types First Implementation Register with 2 Fields Register with Reserved Bits Access Policies Part 1 Access Policies Part 2 Access Policies Part 3 Access Policies Part 4 Memory Modeling Register Block Adapter Introduction Adapter Methods Adapter Example Predictor Types Desired and Mirror Values Register Methods Desired Value Mirror ValueUVMArena
Introduction
Introduction Get started Hello UVM example UVM Phases Part 1 UVM Phases Part 2 UVM Base Classes UVM Object and Core Methods UVM ComponentsBuilding a Testbench
UVM Transaction UVM Sequence UVM Sequencer UVM Driver UVM Monitor UVM Scoreboard UVM Agent UVM Environment UVM TestOther Components
Coverage CollectorExecution Model
UVM Phases ObjectionsCommunication
TLM Basics TLM Blocking Put Port TLM Non-Blocking Put Port TLM Blocking Peek Port Analysis Ports TLM FIFOConfiguration
UVM Factory UVM Config DBRuntime Control
UVM Plusargs Seeds & Reproducibility Verbosity Control Debug Runtime ControlsAdvanced
Virtual Sequences Virtual SequencerUVM RAL
Intro Abstraction Flexibility Comparison Coverage Minimum Requirements Learning Path Register Types First Implementation Register with 2 Fields Register with Reserved Bits Access Policies Part 1 Access Policies Part 2 Access Policies Part 3 Access Policies Part 4 Memory Modeling Register Block Adapter Introduction Adapter Methods Adapter Example Predictor Types Desired and Mirror Values Register Methods Desired Value Mirror ValueUVM TLM Blocking Put
Blocking put is a fundamental UVM TLM communication mechanism where a producer sends a transaction and waits until the consumer finishes processing it before continuing execution.
Learning Objectives
- Understand blocking communication in UVM TLM
- Learn the roles of port, export, and implementation
- Understand how transactions are routed between components
- Run and analyze a working example
What is Blocking Put?
In blocking put communication, the sender calls the
put() method and waits until the receiver completes
the operation. The sender resumes execution only after the
consumer finishes processing the transaction.
Architecture Overview
Blocking put communication is built using three TLM elements. Each element has a specific responsibility in the communication chain.
TLM Components
Blocking Put Port
The port belongs to the producer and initiates the transaction transfer.
It declares the put() interface but does not implement it.
uvm_blocking_put_port #(packet) put_port;
- Owned by the sender
- Calls
put() - Contains no implementation logic
Blocking Put Export
The export forwards the transaction to another component. It enables hierarchical connections without adding behavior.
uvm_blocking_put_export #(packet) put_export;
Blocking Put Implementation
The implementation resides in the consumer and contains the actual
put() task that processes the transaction.
uvm_blocking_put_imp #(packet, consumer) put_imp;
Connections and Code Behavior
p.put_port.connect(c.put_export);
c.put_export.connect(c.put_imp);
Connections are established during the connect_phase.
When the producer calls put(), UVM routes the call through
the connected chain until it reaches the implementation.
Because the call is blocking, execution returns to the producer only
after the consumer's put() task completes.
Execution Flow
- Producer calls
put(transaction) - Call is forwarded through export
- Consumer implementation executes
- Method returns to producer
put() task.
Verification Insight
Blocking put is commonly used between drivers, reference models, and scoreboards where transaction completion and ordering must be guaranteed.
Run This Example on EDA Playground
Run the complete example directly in your browser without installing tools.
▶ Open in EDA PlaygroundView Source Code on GitHub
The complete source code for this example is available on GitHub. You can explore the project structure, download the files, or clone the repository to run locally.
Open on GitHub