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
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
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 onlyTopics and sub-topics
Agent Architecture — 6 sub-lessons on wrapper structure, build/connect, and analysis port.
Agent Configuration Objects — 6 sub-lessons on cfg objects, config_db, and rand constraints.
uvm_driver — 6 sub-lessons on run_phase, vif, protocol driving, and reset discipline.
Driver–Sequencer Handshake — 6 sub-lessons on get_next_item, item_done, and responses.
uvm_monitor — 6 sub-lessons on passive observation and transaction reconstruction.
uvm_sequencer — 6 sub-lessons on arbitration and sequence routing.
Active vs Passive Agents — 6 sub-lessons on is_active and SoC reuse.
Packaging Reusable Protocol VIP — 6 sub-lessons on portable agent delivery.
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.