Part 2 · Phases & Lifecycle · Intermediate
phase.jump() Mechanism: Schedule Rewind Semantics
How phase.jump(target) rewinds the runtime schedule, which components participate, and API usage from task phases.
What jump does
Calling phase.jump(target_phase) from within a task phase tells the UVM scheduler to rewind the runtime schedule so all components re-enter from target_phase. The current phase is abandoned; reset through shutdown phases run again from the target. Simulation time continues — this is not a simulator restart.
[PHASE][UVM] jump rewind
before jump (in main_phase):
... pre_reset reset configure main ...
phase.jump(uvm_reset_phase::get())
after jump:
schedule rewinds → reset_phase runs again for all components
then configure → main → ...API and usage
task main_phase(uvm_phase phase);
phase.raise_objection(this, "main traffic");
run_initial_traffic();
if (cfg.test_soft_reset) begin
`uvm_info("JUMP", "triggering soft reset — jumping to reset_phase", UVM_MEDIUM)
drain_inflight(); // project-specific
phase.jump(uvm_reset_phase::get());
end
run_post_reset_traffic();
phase.drop_objection(this, "main done");
endtask// Common jump targets
phase.jump(uvm_reset_phase::get()); // full reset sequence
phase.jump(uvm_configure_phase::get()); // re-configure only
phase.jump(uvm_main_phase::get()); // re-run main (rare)Jump is called from within a task phase on the phase handle.
All components in the domain participate in the re-entry.
Simulation time does not reset — only the phase schedule rewinds.
Key takeaways
phase.jump() rewinds runtime schedule to target_phase for all components.
Drain in-flight work before jumping to avoid corrupted state.
Most soft-reset tests jump to reset_phase, not directly to main.
Common pitfalls
Jumping with non-zero objection count from unrelated components.
Expecting simulation time or variables to reset — they do not.
Jumping to main_phase and skipping reset when DUT needs it.
Domain note
phase.jump affects the domain of the calling component. In multi-domain testbenches, jumping one domain does not rewind another — coordinate with sync or jump from a common ancestor.
[PHASE][UVM] jump scope
single domain: jump rewinds entire TB runtime schedule
multi-domain: jump is domain-local — verify peer domain state