Part 2 · Phases & Lifecycle · Intermediate
UVM Phases & Simulation Lifecycle
The complete UVM phasing system: build/connect/runtime/cleanup phases, function vs task phases, objections, drain time, domains, reset, and phase debugging.
Phasing is the temporal backbone of UVM
Phasing lets dozens of independently written components agree on when to build, wire, drive stimulus, and check results — without central coordination in every component.
Phases topic map
Legend: [UVM] [PHASE] [RUN]
┌─────────────────────────────────────────────────────────────────────────┐
│ UVM PHASES — 13 topic hubs (each with 5–6 sub-lessons) │
├─────────────────────────────────────────────────────────────────────────┤
│ MOTIVATION why phases │ overview │ function vs task │
│ BUILD-TIME build │ connect │ elaboration/start │
│ RUN-TIME run+objections │ 12 sub-phases │ objections deep dive │
│ CLEANUP extract │ check │ report │ final │
│ ADVANCED domains/sync │ reset/jump │ phase debugging │
└─────────────────────────────────────────────────────────────────────────┘Phase timeline
BUILD (function, 0 time): build → connect → end_of_elab → start_of_sim
RUN (task, consumes time): run_phase ∥ 12 runtime sub-phases
CLEANUP (function): extract → check → report → finalTopics and sub-topics
Why UVM Has Phases — 6 sub-lessons on the synchronization problem.
Phase Overview — 6 sub-lessons on scheduler traversal and the common list.
Function vs Task Phases — 6 sub-lessons on signatures and rules.
build_phase — 6 sub-lessons on top-down construction.
connect_phase — 6 sub-lessons on bottom-up TLM wiring.
end_of_elaboration & start_of_simulation — 6 sub-lessons on pre-time-zero checks.
run_phase & Objections — 6 sub-lessons on parallel run and ending simulation.
The 12 Runtime Sub-Phases — 6 sub-lessons on reset/configure/main/shutdown.
Objections Deep Dive — 6 sub-lessons on propagation, drain_time, ready_to_end.
extract, check, report, final — 6 sub-lessons on post-run cleanup.
Phase Domains & Synchronization — 6 sub-lessons on independent schedules.
reset_phase & Phase Jump — 6 sub-lessons on mid-simulation reset.
Phase Debugging — 6 sub-lessons on ordering bugs and objection leaks.
Key takeaways
Phases give independent components a shared sense of time and order.
Function phases are structural; task phases consume simulation time.
Objections and drain_time decide when run_phase and runtime sub-phases end.
How to use this section
Keep the phase timeline diagram as your map. Each hub expands one segment of the lifecycle with theory, walkthroughs, and debug checklists.
Always call super in phase methods unless you intentionally override parent behavior.
Unmatched objection raises are the #1 cause of hung simulations.
Use phase trace and objection debug when behavior 'works once' but hangs at end.