Part 2 · Phases & Lifecycle · Intermediate
reset_phase & Phase Jump Hub
Hub — coordinated reset via reset_phase, phase.jump() for mid-simulation re-entry, soft-reset flows, integration patterns, and debug.
Overview
The reset_phase runtime sub-phase is the standard place for coordinated reset across all agents. phase.jump() rewinds the runtime schedule to an earlier phase — enabling soft-reset, recovery, and multi-reset scenarios without restarting the simulation.
Together they form the advanced reset story in UVM: first master the single-pass reset flow, then add jump only when the DUT requires mid-test re-initialization.
Sub-lessons in this topic
reset-phase-behavior — coordinated idle, reset assert/deassert, objections.
phase-jump-mechanism — jump API, schedule rewind, participation rules.
mid-sim-reset-flow — soft-reset test scenario end to end.
jump-vs-normal-reset — when jump helps vs when a new test is better.
reset-integration-patterns — env/test templates for multi-reset.
reset-jump-debug — hangs, corrupted state, and jump-safe checklists.
Reset and jump timeline
[PHASE][UVM] runtime reset sub-phases
pre_reset_phase → wait clocks/power-good
reset_phase → assert reset, drive idle, deassert
post_reset_phase → settle after reset release
phase.jump(uvm_reset_phase::get()):
rewinds schedule → all components re-enter from reset_phasetask reset_phase(uvm_phase phase);
phase.raise_objection(this, "applying reset");
vif.rst_n <= 0;
drive_idle();
repeat (5) @(posedge vif.clk);
vif.rst_n <= 1;
@(posedge vif.clk);
phase.drop_objection(this, "reset complete");
endtaskKey takeaways
reset_phase gives objection-gated, cross-agent coordinated reset.
phase.jump() re-enters an earlier runtime phase mid-simulation.
Make sequences jump-safe: idempotent setup, drain in-flight transactions.
Master single-pass reset before adding jump complexity.
Common pitfalls
Ad-hoc reset in run_phase instead of reset_phase — loses coordination.
Jumping with outstanding objections or in-flight transactions.
Non-idempotent configure sequences that break on second pass.
Prerequisites
Before using phase jump, confirm the basic 12-phase schedule works: reset_phase completes on all agents, configure_phase programs registers, main_phase runs traffic to completion. Jump builds on that foundation.
[PHASE][UVM] readiness gate
□ single-pass reset/configure/main passes
□ all agents use reset_phase (not run_phase reset)
□ objections balanced in every runtime phase
□ only then add jump for soft-reset tests