Part 6 · Agents & Protocol IP · Intermediate

UVM Agents & Protocol VIP

The complete UVM agent: driver, monitor, sequencer, configuration objects, active/passive modes, driver–sequencer handshake, and packaging reusable protocol VIP.

The agent is the unit of interface reuse

A UVM agent bundles everything needed to stimulate and observe one protocol port — driver, monitor, sequencer, and config — behind one configurable wrapper. Commercial VIP for AXI, PCIe, or USB is essentially an agent.

Agents topic map

diagram
Legend: [UVM] [AGT] [DRV] [MON] [VIP]

┌─────────────────────────────────────────────────────────────────────────┐
│  UVM AGENTS & VIP — topic map (each hub has 5–6 sub-lessons)            │
├─────────────────────────────────────────────────────────────────────────┤
│  1. ARCHITECTURE [AGT]  wrapper │ build/connect │ analysis ap │ knobs    │
│  2. CONFIG [UVM]        uvm_object cfg │ config_db │ rand constraints    │
│  3. DRIVER [DRV]        run_phase │ vif │ protocol timing │ reset        │
│  4. HANDSHAKE [TLM]     get_next_item │ item_done │ rsp port │ backpressure│
│  5. MONITOR [MON]       passive sample │ ap.write │ clocking │ reconstruct │
│  6. SEQUENCER [UVM]     arbitration │ routing │ seq library │ virtual sqr  │
│  7. ACTIVE/PASSIVE [AGT] is_active │ SoC integration │ monitor-only reuse  │
│  8. VIP PACKAGING [VIP] parameters │ env integration │ versioning           │
│  9. PROTOCOLS [VIP]     APB │ AXI │ streaming agent patterns             │
└─────────────────────────────────────────────────────────────────────────┘

The agent in one diagram

diagram
uvm_agent [AGT]
        ┌───────────────────────────────────────────────┐
        │  sequencer ──seq_item_export──► driver [DRV] ──vif──► DUT
        │       ▲                                        │
        │   sequences                                    │
        │                                                │
        │  analysis_port ◄── monitor [MON] ◄── vif ◄── DUT
        └───────────────────┬───────────────────────────┘
                            ▼
              scoreboard / coverage / subscribers

   ACTIVE  = sequencer + driver + monitor
   PASSIVE = monitor only

Topics and sub-topics

  1. Agent Architecture — 6 sub-lessons on wrapper structure, build/connect, and analysis port.

  2. Agent Configuration Objects — 6 sub-lessons on cfg objects, config_db, and rand constraints.

  3. uvm_driver — 6 sub-lessons on run_phase, vif, protocol driving, and reset discipline.

  4. Driver–Sequencer Handshake — 6 sub-lessons on get_next_item, item_done, and responses.

  5. uvm_monitor — 6 sub-lessons on passive observation and transaction reconstruction.

  6. uvm_sequencer — 6 sub-lessons on arbitration and sequence routing.

  7. Active vs Passive Agents — 6 sub-lessons on is_active and SoC reuse.

  8. Packaging Reusable Protocol VIP — 6 sub-lessons on portable agent delivery.

  9. Protocol Agent Patterns — 6 sub-lessons on APB, AXI, and streaming designs.

Key takeaways

  • An agent is the packaging boundary for verifying one interface.

  • Active agents drive and observe; passive agents observe only.

  • Driver, sequencer, monitor, config object, and analysis port are the standard ingredients.


How to use this section

Open a topic hub for an overview, then drill into sub-lessons. Wire the virtual interface in build_phase, connect TLM in connect_phase, and always expose one analysis port from the agent wrapper.

  • Config object + config_db is how block-level and chip-level tests tune the same agent.

  • Never drive pins from the monitor — observation must be passive.

  • Package VIP with parameters, not hard-coded widths — one agent class per protocol family.