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

  1. initiator-target-roles - who calls through interfaces and who implements methods.

  2. port-export-imp-objects - object responsibilities and mental model for each endpoint.

  3. connect-binding-rules - connect() semantics, cardinality, and one-to-one flow-controlled links.

  4. hierarchical-pass-through - forwarding interfaces through parent/child boundaries with exports.

  5. tlm-interface-types - uvm_*_port/export/imp families and when to choose each.

  6. connection-patterns-env - canonical env wiring examples for agents, scoreboards, and predictors.

Big-picture map

diagram
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
diagram
[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
diagram
[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 complete

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