VLSI DV Interview Puzzles · All levels

Child Sequence Raises Objection but Never Drops

Top-level virtual sequence finishes, but phase still blocked by nested child sequence. Objection trace points to child object that no longer logs progress.

Puzzle

Difficulty: Hard · Puzzle 6 of 6 · Topic: Deadlock Scenario Puzzles: Objection and Phase Stalls

Top-level virtual sequence finishes, but phase still blocked by nested child sequence. Objection trace points to child object that no longer logs progress.

Code

systemverilog
class child_seq extends uvm_sequence #(my_item);
  virtual task body();
    starting_phase.raise_objection(this);
    if (!wait_for_link_up(1000)) begin
      \`uvm_error("LINK", "link never up")
      disable fork; // bug: exits scope without drop
    end
    starting_phase.drop_objection(this);
  endtask
endclass

Hint

Nested sequence error handling often bypasses final cleanup.

Step-by-step solution

diagram
1) Confirm unresolved objection owner from trace belongs to child_seq instance.
2) Inspect error path and find disable/return path that skips drop_objection.
3) Rework body into guarded flow with guaranteed drop in final block.
4) Add timeout-specific cleanup and propagate failure upward cleanly.
5) Add regression where link never comes up and assert phase still exits.

Answer

Answer: Bug: child raises objection then exits via disable path before drop. Fix: ensure drop executes in all error/timeout exits and avoid non-local exits that bypass cleanup.

Why candidates get it wrong

When parent completes, engineers assume all child objections are gone; not true.

Interviewer follow-up

How would you report child failure to parent while still preserving objection symmetry?

Related topics