Part 11 · Senior Prep · Intermediate

Coverage Merge & Closure Interview Q&A

Model answers on UCDB/VDB merge, plan traceability, hole triage, directed closure sequences, and waiver discipline.

Merge and plan traceability

Q: Why merge coverage across seeds instead of trusting one run?

diagram
[INT][SENIOR][UVM] MODEL ANSWER

Q: Why merge UCDB/VDB?

A:
  MECHANISM:  Each seed exercises different stimulus space; merge unions bin hits
              across all regression runs into one closure database.
  MOTIVATION:  Single-run green coverage misleads — hole may be seed-dependent.
  WHEN:       Nightly and pre-tape-out closure reviews always use merged DB.
  PITFALL:    Declaring closure on best seed of the week — not statistically honest.
  EXAMPLE:    axi_cross_addr_len hits bin (4KB,INCR) only on seed 8821 — visible
              only after merge of 200 seeds.

Q: How do you map coverpoints to the verification plan?

diagram
[INT][SENIOR][UVM] MODEL ANSWER

Q: Plan traceability?

A:
  MECHANISM:  Each coverpoint/cross carries plan feature ID in name or comment;
              hole report exports uncovered bins ↔ plan row.
  MOTIVATION:  Sign-off is plan compliance — not raw coverage percentage.
  WHEN:       Covergroup design phase — before writing closure tests.
  PITFALL:    Orphan bins with no plan row — cannot waive or close formally.
  EXAMPLE:    cg_axi_xfer::addr_align_x_len with comment "PLAN-FP-12" in report.
systemverilog
covergroup cg_axi_xfer with function sample(axi_txn t);
  option.per_instance = 1;
  option.comment = "PLAN-FP-12 address alignment cross length";
  addr_align: coverpoint t.addr[11:0] {
    bins align_4K = {12'h000};
    bins unaligned = default;
  }
  xfer_len: coverpoint t.len;
  align_x_len: cross addr_align, xfer_len;
endgroup

class axi_cov_subscriber extends uvm_subscriber #(axi_txn);
  cg_axi_xfer cg;
  function void write(axi_txn t);
    if (t.rsp_phase) cg.sample(t);  // sample on response — DUT-visible
  endfunction
endclass

Key takeaways

  • Closure uses merged DB across seeds — never single-run sign-off.

  • Every bin maps to plan feature ID — orphan bins block formal closure.

  • Sample on monitor response phase — DUT-visible events only.

Common pitfalls

  • Sampling on driver stream — bins green while DUT path untested.

  • Merge without seed attribution — cannot write directed closure repro.


Hole triage and directed closure

Q: Uncovered bin — how do you triage root cause?

diagram
[INT][SENIOR][UVM] MODEL ANSWER

Q: Hole triage workflow?

A:
  MECHANISM:  Classify: stimulus gap, constraint too tight, unreachable per spec,
              or checker/coverage bug.
  MOTIVATION:  Random reruns without analysis waste farm weeks.
  STEPS:      1) Repro lowest seed that almost hits bin. 2) Relax one constraint.
              3) Directed seq targeting bin preconditions. 4) Spec review if unreachable.
  PITFALL:    Waiving without design review on cross bins — post-silicon risk.
  EXAMPLE:    EXOKAY cross never hits — constraint forbids exclusive; relax in
              closure_axi_exokay_seq, re-merge confirms hit.

Q: When do you write a directed closure test vs tweak constraints?

diagram
[INT][SENIOR][UVM] MODEL ANSWER

Q: Directed closure vs constraint tweak?

A:
  MECHANISM:  Constraint tweak for broad random space expansion; directed test for
              stubborn cross with rare precondition chain.
  MOTIVATION:  Directed is surgical — overuse replaces random exploration.
  WHEN:       Directed when 50+ seeds miss same cross and preconditions are known.
  NOT WHEN:   Simple single coverpoint hole — loosen random constraint first.
  PITFALL:    Directed test that disables scoreboard to force bin — false closure.
  EXAMPLE:    hole_FP_09: interrupt storm during DMA — dedicated vseq + 3 seeds.
systemverilog
class hole_FP_09_vseq extends uvm_sequence;
  `uvm_object_utils(hole_FP_09_vseq)
  task body();
    // preconditions: DMA active, IRQ unmasked, outstanding > 4
    fork
      dma_burst_seq.start(p_sequencer.dma_sqr);
      irq_storm_seq.start(p_sequencer.irq_sqr);
    join
  endtask
endclass
bash
# merge nightly UCDBs and emit hole report
urg -dir nightly_run_*/cov.ucdb -format text -report merged_holes.rpt
grep UNCOVERED merged_holes.rpt | grep PLAN-FP > p0_holes.txt
wc -l p0_holes.txt

Q: Waiver process — what evidence do you require?

diagram
[INT][SENIOR][UVM] MODEL ANSWER

Q: Coverage waiver criteria?

A:
  MECHANISM:  Documented unreachable proof or duplicate coverage elsewhere with
              design + verification lead sign-off and audit trail.
  MOTIVATION:  Waivers are technical debt — must be searchable at tape-out review.
  REQUIRED:   plan ID, bin name, reason, approver, date, alternative evidence.
  PITFALL:    Verbal waiver "design said OK" — no audit at chip review.
  EXAMPLE:    PLAN-FP-44 waived: feature removed in rev C errata — spec cite attached.

Key takeaways

  • Hole triage: classify root cause before writing closure stimulus.

  • Directed closure for stubborn crosses — not for every missing bin.

  • Waivers need audit trail — plan ID, approver, alternative evidence.

Common pitfalls

  • Disabling checkers in closure tests to hit bins — invalid sign-off.

  • Merging stale UCDB from old RTL — false green holes.