Part 2 · Phases & Lifecycle · Intermediate
Reset & Jump Debug: Hangs, Corrupted State, Checklists
Triage guide for post-jump hangs, scoreboard corruption, non-idempotent configure, and jump-specific phase trace markers.
Symptom catalog
Hang after jump
Outstanding objection from pre-jump phase never dropped.
Sequence blocked on sequencer lock after jump.
Agent reset_phase waits forever for rst_n that soft reset does not assert.
Corrupted state after jump
In-flight transaction completed after jump — scoreboard double-count.
configure_phase skipped programming because idempotent guard stuck.
VIP internal state not reset — vendor reset API not called.
simv +UVM_PHASE_TRACE +UVM_OBJECTION_TRACE +UVM_VERBOSITY=UVM_MEDIUMJump-safe checklist
[PHASE][UVM] pre-jump checklist
□ all agent objections from current phase dropped or jump-safe
□ drain_all_agents() completed (log idle confirmation)
□ sequencer not locked (stop_sequences if needed)
□ scoreboard flush policy applied
□ cfg flags reset for configure re-entry
□ log "JUMP" marker immediately before phase.jump()task pre_jump_cleanup();
env.drain_all_agents();
env.vseqr.stop_sequences();
env.scb.flush_queues();
cfg.reconfigure_needed = 1;
`uvm_info("JUMP", "pre-jump cleanup complete", UVM_MEDIUM)
endtaskKey takeaways
Post-jump hangs → objection trace first, waveforms second.
Pre-jump drain and sequence stop are mandatory.
Log JUMP markers to correlate phase trace with test intent.
Common pitfalls
Debugging jump without +UVM_PHASE_TRACE — cannot see rewind.
Calling jump without stop_sequences — sequencer deadlock.
Assuming VIP auto-recovers — call vendor reset API in reset_phase.
Post-jump validation
Confirm reset_phase runs again in phase trace after JUMP marker.
Verify configure_phase re-executes (log CSR writes).
Compare pre-reset and post-recovery txn counters in check_phase.
Run without jump as control — isolate jump-specific bugs.