Difficulty: Hard · Puzzle 6 of 6 · Topic: Testbench Debug Puzzles: Why Did the Test Hang?
A virtual sequence waits on done_ev and hangs at end of traffic. Waveform shows DUT completed all transfers. Why is vseq still blocked?
class env extends uvm_env;
monitor mon;
scoreboard sb;
virtual function void connect_phase(uvm_phase phase);
// bug: monitor connected to old scoreboard instance
mon.ap.connect(sb.shadow_imp);
endfunction
endclass
class top_vseq extends uvm_sequence;
virtual task body();
start_subseqs();
@(p_sequencer.env.sb.done_ev); // never triggers
endtask
endclassValidate analysis connections and which instance raises done_ev.
1) Print topology and confirm monitor analysis port subscriber path.
2) Compare event trigger location with event wait location.
3) Detect that monitored transactions never reach the scoreboard instance the vseq watches.
4) Connect monitor to active scoreboard imp and trigger done_ev in the same instance.
5) Add an end-of-test check that flags zero scoreboard activity as configuration error.Answer: Bug: virtual sequence waits on done_ev from one scoreboard instance while monitor writes to another. Fix: correct analysis port wiring and keep event trigger/wait in same live instance.
Teams inspect DUT first, but this is pure TB connectivity.
How would you automatically validate critical TLM connections during build/connect?