Verification

Difference Between UVM and OVM

By CourseTron Team ·  6 min read ·  Updated Oct 2026 💬 𝕏 in f
Table of Contents
    ? Print / Save as PDF

    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?.

    Lineage: how UVM was assembled URM (Cadence) AVM (Mentor) VMM (Synopsys) OVM 2.1 (2008) UVM 1.0 (2011) IEEE 1800.2 RAL, callbacks, run-time phases CourseTron · coursetron.com
    OVM was the base code; VMM contributed the register layer, callbacks and phasing ideas.

    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.

    OVM vs UVM phase schedule OVM build connect run (one task, all time-consuming work) check report UVM build connect run_phase (parallel) reset configure main shut check report OVM: ordering of reset/config/traffic lives inside user code. UVM: the scheduler provides named synchronisation points, and objections raised in any phase keep that phase open. CourseTron · coursetron.com
    UVM overlays run-time sub-phases on top of a parallel run_phase; OVM only had the single run task.

    Watch it in motion: the phase pointer

    UVM phase marker (looping) build connect run extract check report The triangle marks the active phase; time-consuming work lives in run. CourseTron · coursetron.com
    Animation: the simulator walks every component through the same ordered phases.

    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

    AreaOVMUVM
    PhasesSingle time-consuming run taskrun_phase plus 12 run-time sub-phases
    Configurationset_config_* per typeTyped uvm_config_db and resource_db
    RegistersNone standardFull RAL (reg, field, map, adapter)
    TLMTLM-1 portsTLM-1 plus TLM-2.0 sockets
    CallbacksLimiteduvm_callback, from VMM
    StandardVendor-ownedAccellera, 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 run into reset_phase only if you truly need cross-agent ordering; many teams still keep everything in run_phase and 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.

    Advertisement