HomeVerificationUVM Architecture — Visual
Live Animation · Interactive

UVM Architecture
See the Data Flow

Every component, every connection, every transaction — animated live. Click any box to explore its role, code, and wiring.

← Back to Series Start Learning UVM →
Transactions:0
|
Scoreboard checks:0
|
Errors:0
|
Coverage:0.0%
UVM Phase Progression
build_phase
connect_phase
run_phase
check_phase
report_phase
ENVIRONMENT — uvm_env AGENT — uvm_agent (ACTIVE) TEST uvm_test · run_test() click to explore SEQUENCER uvm_sequencer seq_item_export DRIVER uvm_driver get_next_item / item_done MONITOR uvm_monitor analysis_port.write() SCOREBOARD uvm_scoreboard uvm_analysis_imp · write() COVERAGE COLLECTOR uvm_subscriber covergroup · coverpoint CONFIG DATABASE uvm_config_db set() / get() · virtual if VIRTUAL INTERFACE virtual my_if · clocking block DUT Device Under Test RTL Module — not in UVM hierarchy seq_item_port ap.write() ap.write() vif.get() observe pin drive
👆 Click any component in the diagram to explore its role, responsibilities, and code
Component Legend — click to explore
Test
uvm_test
Sequencer
uvm_sequencer
Driver
uvm_driver
Monitor
uvm_monitor
Scoreboard
uvm_scoreboard
Coverage
uvm_subscriber
Config DB
uvm_config_db
Virtual IF
virtual interface
DUT
RTL module
Frequently Asked Questions
What are the main components of a UVM testbench?
A UVM testbench has: uvm_test (top-level controller), uvm_env (container for agents and checkers), uvm_agent (contains sequencer + driver + monitor), uvm_sequencer (routes transactions to the driver), uvm_driver (drives DUT signals), uvm_monitor (passively observes the DUT), uvm_scoreboard (checks correctness), and coverage collectors. All communicate through TLM ports and analysis ports.
How does a transaction move through UVM?
A sequence generates items and starts them on the sequencer via seq.start(sequencer). The sequencer routes each item to the driver's seq_item_port.get_next_item(). The driver drives DUT signals through a virtual interface, then calls item_done(). The monitor independently observes DUT signals and reconstructs transactions, then broadcasts them via analysis_port.write() to the scoreboard and coverage collector simultaneously.
What is the UVM phase sequence?
build_phase → create child components (bottom-up). connect_phase → wire TLM ports. run_phase → main simulation (time-consuming, parallel across all components). check_phase → report errors. report_phase → print final coverage and stats. The run_phase uses time-consuming tasks; all other phases use functions.
What is uvm_config_db used for?
uvm_config_db is a global hierarchical database for passing configuration between UVM components. The testbench top module calls set() to store a virtual interface (or integer, string, object), and each driver or monitor calls get() in build_phase to retrieve it. The path argument ("uvm_test_top.*") determines which components can see the value.