Part 4 · TLM & Analysis · Intermediate

Transaction-Level Modeling (TLM)

How UVM components communicate in transactions — ports, exports, imps, put/get/transport, analysis broadcast, FIFOs, and debugging unconnected ports.

Components talk in transactions, not wires

TLM lets components exchange whole transactions (objects) through standardized interfaces instead of poking each other's internals. This decoupling is what lets a monitor, scoreboard, and coverage collector be written independently and still snap together in connect_phase.

TLM topic map

diagram
Legend: [UVM] [TLM] [MON] [CHECK]

┌─────────────────────────────────────────────────────────────────────────┐
│  TRANSACTION-LEVEL MODELING — topic map (each hub has 5–6 sub-lessons)  │
├─────────────────────────────────────────────────────────────────────────┤
│  1. PORT MODEL [TLM]   port │ export │ imp │ connect │ hierarchy pass   │
│  2. PUT/GET [TLM]       blocking │ non-blocking │ transport │ flow ctrl   │
│  3. ANALYSIS [MON]      analysis_port │ subscriber │ write broadcast      │
│  4. FIFOs [TLM]         tlm_fifo │ analysis_fifo │ producer/consumer      │
│  5. DEBUG [UVM]         unconnected │ type mismatch │ silent drops         │
└─────────────────────────────────────────────────────────────────────────┘

Two TLM styles

diagram
POINT-TO-POINT (flow controlled)        BROADCAST (fire-and-forget)
  port  -> export -> imp                   analysis_port -> imp(s)
  put / get / peek / transport             write() to many subscribers
  one initiator, one target                one initiator, N targets
  driver<->sequencer, producer<->consumer  monitor -> scoreboard + coverage

Topics and sub-topics

  1. Ports, Exports & Imps — 6 sub-lessons on initiator/target roles, connect rules, and hierarchical pass-through.

  2. put / get / transport — 6 sub-lessons on blocking vs non-blocking and transport combined ops.

  3. Analysis Ports & uvm_subscriber — 6 sub-lessons on broadcast write(), subscribers, and monitor wiring.

  4. TLM FIFOs & Analysis FIFO — 6 sub-lessons on decoupling threads and FIFO patterns.

  5. TLM Debugging — 6 sub-lessons on unconnected ports, type mismatches, and silent drops.

Key takeaways

  • TLM moves transactions, not pins — components stay decoupled and reusable.

  • Point-to-point (put/get) has flow control; analysis (write) is broadcast with none.

  • The monitor → scoreboard/coverage path is the canonical analysis broadcast pattern.


How to use this section

Open a topic hub for an overview and diagram, then drill into sub-lessons. When wiring envs, always verify TLM connections in connect_phase — unconnected ports are the #1 silent-failure source.

  • Initiator calls through a port; target implements via imp; export bridges hierarchy levels.

  • Monitors use analysis_port.write() — never put/get for passive observation.

  • Use uvm_tlm_if print or connection debug when transactions mysteriously disappear.