In short: UVM is the Accellera-standardised merger of Cadence/Mentor's OVM and the best ideas of Synopsys's VMM, and it differs from OVM mainly through its richer phasing (common plus run-time phases), the config_db and resource database, TLM-2.0 support, callbacks and a built-in register layer (RAL) inherited from VMM.
Why three methodologies existed in the first place
Before 2011 a verification team had to pick a camp. Synopsys pushed VMM (Verification Methodology Manual) with its vmm_env, vmm_xactor and a mature register package called VMM RAL. Cadence shipped URM, then co-developed OVM (Open Verification Methodology) with Mentor in 2007. OVM was open source, worked on all three major simulators (Synopsys VCS, Cadence Xcelium, Siemens Questa) and became the favourite of many companies. The cost of the split was real: verification IP written for one methodology could not be reused in another, and engineers changing jobs had to relearn the vocabulary.
In 2010 Accellera's VIP technical subcommittee took OVM 2.1.1 as the base, folded in selected VMM features, and released UVM 1.0 in early 2011. The IEEE later adopted it as IEEE 1800.2 (first in 2017, revised in 2020). If you want the fundamentals first, read our primer What is UVM?.
What UVM kept from OVM
About 90% of OVM carried across, which is why Accellera shipped an ovm2uvm conversion script. The class tree (uvm_component, uvm_object, uvm_agent, uvm_driver, uvm_monitor, uvm_scoreboard), the factory with type and instance overrides, TLM-1 ports and analysis ports, sequences and sequencers, and objection-based end-of-test are all recognisable. Mostly the prefix changed from ovm_ to uvm_, with `ovm_component_utils becoming `uvm_component_utils. See how those pieces fit in our UVM testbench architecture walkthrough.
Key fact: UVM is not a rewrite. A well-written OVM 2.1.x testbench of 50,000 lines usually converts with a script plus a few days of manual clean-up, mostly around config and phasing.
Phasing: the biggest practical difference
OVM had a fixed list of phases: build, connect, end_of_elaboration, start_of_simulation, run, extract, check, report. Only run consumed time, so every reset, configure and main-traffic sequence was hand-coded inside one giant task. Two agents that needed different reset timing had no common synchronisation point.
UVM kept those names with a _phase suffix and a uvm_phase argument, and added two things. First, build_phase is top-down while connect, end_of_elaboration and the rest are bottom-up, enforced by a scheduler instead of convention. Second, run_phase now executes in parallel with twelve optional run-time phases: pre_reset, reset, post_reset, pre_configure, configure, post_configure, pre_main, main, post_main, pre_shutdown, shutdown and post_shutdown. A power-management agent can drive reset while another component waits in configure_phase. Objections still decide when a phase ends. Our guide to UVM phases covers each in detail.
Watch it in motion: the phase pointer
Configuration: set_config_* versus config_db
OVM used set_config_int, set_config_string and set_config_object, with string-matched hierarchical paths and per-type calls. UVM replaced these with the typed uvm_config_db#(T)::set(cntxt, inst_name, field, value) and get, built on a general uvm_resource_db. Virtual interfaces can now be passed cleanly, which OVM handled with awkward wrapper objects. A frequent interview trap: config_db precedence favours the higher level in the hierarchy for set calls made during build, and later calls win ties.
Register layer: the VMM inheritance
OVM never shipped a standard register model; teams bought vendor kits or wrote their own. UVM added uvm_reg_block, uvm_reg, uvm_reg_field, uvm_reg_map, the adapter (uvm_reg_adapter) and the predictor, directly descended from VMM RAL. Generators such as Synopsys's RALGEN, Cadence's IP-XACT flows or open tools turn IP-XACT or spreadsheets into this model. Front-door access goes through the bus agent; back-door access uses HDL paths and takes zero simulation time. A typical SoC has thousands of registers, so auto-generated reset-value and bit-bash sequences (uvm_reg_hw_reset_seq, uvm_reg_bit_bash_seq) catch many bugs for free. Detailed coverage lives in UVM RAL and CSR register verification.
Key fact: The mirrored value in uvm_reg is the model's belief of the DUT state; the desired value is what you want to write next. Confusing the two is the commonest RAL bug.
Other differences worth knowing
| Area | OVM | UVM |
|---|---|---|
| Phases | Single time-consuming run task | run_phase plus 12 run-time sub-phases |
| Configuration | set_config_* per type | Typed uvm_config_db and resource_db |
| Registers | None standard | Full RAL (reg, field, map, adapter) |
| TLM | TLM-1 ports | TLM-1 plus TLM-2.0 sockets |
| Callbacks | Limited | uvm_callback, from VMM |
| Standard | Vendor-owned | Accellera, IEEE 1800.2 |
Sequences also gained start_item/finish_item flexibility and sequence libraries. Reporting got cleaner too; see UVM verbosity levels. For teams adopting UVM from scratch, our VLSI verification courses cover the whole flow, and ChipXpert offers instructor-led batches.
Migration advice from real projects
- Run the conversion script first, then compile on a single simulator before touching semantics.
- Replace every
set_config_*by hand; the script flags but cannot always fix them. - Move reset logic from
runintoreset_phaseonly if you truly need cross-agent ordering; many teams still keep everything inrun_phaseand use objections, which is simpler and what IEEE 1800.2 recommends for most cases. - Adopt RAL early. Retrofitting register models after tape-out pressure rises is expensive.
Ready to build a real UVM environment with agents, scoreboards and a RAL model? Join the verification track on CourseTron courses and practise on live projects.
FAQ
Is OVM still used?
Rarely. Legacy projects may keep OVM, but all three major vendors focus on UVM, and new IP is delivered as UVM.
Did UVM drop anything from OVM?
Mostly deprecated items: set_config_* and the old stop_request mechanics were replaced by config_db and objections.
Where did UVM RAL come from?
It was ported from Synopsys's VMM RAL, which is why the concepts of blocks, maps, mirrored and desired values feel familiar to VMM veterans.
Should I use the UVM run-time phases?
Only when several agents truly need shared synchronisation points. Otherwise a single run_phase with sequences is easier to debug.