Part 4 · TLM & Analysis · Intermediate
Port/Export/Imp Basics Hub: Roles, Binding, and Hierarchical Wiring
Hub - initiator vs target roles, what port/export/imp objects do, connect semantics, hierarchical pass-through, interface families, and environment wiring patterns.
Overview
In UVM TLM, who calls and who implements must stay explicit. A port is the caller-side handle, an imp is the provider-side implementation endpoint, and an export is a hierarchical forwarding endpoint that lets components re-expose interfaces cleanly.
This topic organizes the most important rules and patterns for wiring reusable environments: role ownership, connect-time compatibility, hierarchy pass-through chains, and practical env-level connection templates.
Sub-lessons in this topic
initiator-target-roles - who calls through interfaces and who implements methods.
port-export-imp-objects - object responsibilities and mental model for each endpoint.
connect-binding-rules - connect() semantics, cardinality, and one-to-one flow-controlled links.
hierarchical-pass-through - forwarding interfaces through parent/child boundaries with exports.
tlm-interface-types - uvm_*_port/export/imp families and when to choose each.
connection-patterns-env - canonical env wiring examples for agents, scoreboards, and predictors.
Big-picture map
Legend: [UVM] [TLM] [SEQ] [DRV] [MON] [SB]
calls methods
[SEQ/DRV] requester [UVM][TLM] ── port ────────────────────────────────┐
│
▼
export (optional hierarchy bridge)
│
▼
imp on target/provider component
│
▼
concrete implementation executes method[UVM][TLM] role lens
Initiator side:
- owns a port (or chained ports/exports)
- invokes put/get/peek/transport/write operations
Target side:
- owns an imp
- implements interface behavior
- returns data/status where applicable
Bridge side:
- owns export
- forwards binding through hierarchy[UVM][TLM] connection diagnostics view
before connect_phase:
port handle exists but unresolved provider path
after connect_phase:
port has exactly compatible provider chain
run_phase:
initiator calls succeed only if bind chain is legal and completeKey takeaways
Port, export, and imp encode caller/bridge/provider responsibilities explicitly.
Most TLM bugs are role confusion or incomplete connect chains, not transaction bugs.
Hierarchical exports keep interfaces reusable without flattening component internals.
Treat connect_phase as a formal interface binding step, not optional glue code.
Common pitfalls
Calling provider logic directly across component boundaries instead of through TLM endpoints.
Assuming export is a provider implementation - it is usually a forwarding bridge.
Mixing incompatible interface families or type parameters in connect chains.
Leaving connection ownership implicit, causing silent drops or runtime fatals later.