VLSI DV Interview Puzzles · All levels
Virtual Sequence Waits on Event Never Triggered
A virtual sequence waits on done_ev and hangs at end of traffic. Waveform shows DUT completed all transfers. Why is vseq still blocked?
Puzzle
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?
Code
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
endclassHint
Validate analysis connections and which instance raises done_ev.
Step-by-step solution
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
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.
Why candidates get it wrong
Teams inspect DUT first, but this is pure TB connectivity.
Interviewer follow-up
How would you automatically validate critical TLM connections during build/connect?