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
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
endclassHint
Nested sequence error handling often bypasses final cleanup.
Step-by-step solution
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?