Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Puzzle Bank
  • SystemVerilog Language Puzzles25
  • Difficulty Guide
  • Full Topic Map
  • Interview-Day Tips
  • OOP & Testbench Puzzles25
  • Concurrency & Timing Puzzles25
  • Randomization & Constraint Puzzles25
  • SVA Assertion Puzzles25
  • Functional Coverage Puzzles25
  • Logic & Aptitude Puzzles25
  • Scenario & Debug Puzzles25
    • Testbench Debug Puzzles: Why Did the Test Hang?
      • Handshake Hang: Missing item_done on One Branch
      • Missing run_phase Objection in Test
      • Wrong Phase: Starting Traffic in shutdown_phase
      • Handshake Violation: item_done Called Twice
      • Sequence get_response Stall
      • Virtual Sequence Waits on Event Never Triggered
    • Deadlock Scenario Puzzles: Objection and Phase Stalls
    • Scoreboard Puzzles: Mismatch or Ordering Bug?
    • Real Interview Rounds: End-to-End Debug Walkthrough
    • Scenario & Debug Puzzles: Tricky Q&A
  • Interview Prep: Puzzle Rounds5
  • DV Puzzle Cheatsheet
Loading lesson

‹Testbench Debug Puzzles: Why Did the Test Hang?
  1. Topics
  2. DV Interview Puzzles
  3. Scenario & Debug Puzzles
  4. Testbench Debug Puzzles: Why Did the Test Hang?
  5. Virtual Sequence Waits on Event Never Triggered

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?

On this page

    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

    design.sv
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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
    endclass

    Hint

    Validate analysis connections and which instance raises done_ev.

    Step-by-step solution

    Diagram
    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?

    Related topics

    • Back to Testbench Debug Puzzles: Why Did the Test Hang?

    • Scenario & Debug Puzzles section

    Previous

    185 / 210

    Next: Deadlock Scenario Puzzles: Objection and Phase Stalls

    Up next

    Up nextDeadlock Scenario Puzzles: Objection and Phase Stalls

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Handshake Hang: Missing item_done on One Branch
    • Missing run_phase Objection in Test
    • Wrong Phase: Starting Traffic in shutdown_phase