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 Course
  • Reading Path
  • STA Glossary
  • STA Metrics Reference
  • STA Mastery Cheatsheet
  • Timing Paths and Checks16
  • Constraints & SDC Fundamentals20
  • Delay Graph & Path Analysis16
  • Beyond Setup and Hold16
  • Multi-Corner Multi-Mode Signoff16
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
    • STA Whiteboard Framework
    • STA Framework Drills
    • Scenario: MMMC Storm
    • Scenario: ECO Under Pressure
    • Scenario: Constraint Ghost
      • The Scenario
      • Investigation
      • Root Cause and Fix
      • How to Narrate It
    • STA Interview Q&A Bank
    • STA Interview Q&A Bank (Expanded)
  • Capstone Timing Signoff Lab4
Loading lesson

‹Scenario: Constraint Ghost
  1. Topics
  2. Static Timing Analysis
  3. STA Interview Prep
  4. Scenario: Constraint Ghost
  5. The Scenario

Part 10 · Interview Prep · All levels

The Scenario

A constraint refactor turns a -0.050 ns WNS into +0.011 ns without any design change; months later an intermittent failure appears in hot silicon.

On this page

    The situation

    During a constraint refactor the team merges constraint snippets from an earlier project. The next signoff run shows WNS improving from -0.050 ns to +0.011 ns with no design change, and the team is pleased. Months later, bring-up reports an intermittent failure, roughly once an hour at high temperature, on a path between a clock and its divided version. The reports said the crossing was clean.

    Fact

    Value

    WNS before the refactor

    -0.050 ns

    WNS after

    +0.011 ns, with no RTL change

    Clocks involved

    clk_a, and clk_b (a divide-by-2 generated from clk_a)

    Silicon symptom

    Intermittent data error, hot, about once an hour

    Questions to ask

    • A large improvement from constraints alone: what exactly changed in the constraints?

    • Which exceptions apply to the failing crossing, and how many paths does each cover?

    • Are clk_a and clk_b really unrelated? One is generated from the other.

    example.py
    1
    2
    3
    4
    5
    6
    7
    wns_before, wns_after = -0.050, 0.011
    gain = round(wns_after - wns_before, 3)
    assert gain == 0.061
    # the heuristic from the debug playbook: a constraint-only gain above 0.03 ns needs review
    threshold = 0.03
    assert gain > threshold
    print("PASS: constraint-only gain", gain, "ns exceeds the review threshold", threshold, "ns")

    A 61 ps improvement with no design change should have been a flag, not a celebration. The review threshold in the debug playbook (a constraint-only gain above 0.03 ns) would have caught it. The second flag is physical: a divided clock is derived from its source, so the two are related, and an exception that treats them as asynchronous contradicts the structure of the design.

    Common pitfall

    Celebrating a green run after a constraint change. The run is green because of the change.

    Interview

    Ask what changed in the constraints whenever timing improves without a design change.

    Check yourself Why does a divided clock make an asynchronous-clocks exception suspicious?

    Its edges are a subset of the source's edges, so the two are synchronous and every path between them has a defined timing relationship that should be checked.

    Related topics

    • Next: Investigation

    • Constraint Version Drift

    Previous

    169 / 183

    Next: Investigation

    Up next

    Up nextInvestigation

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Root Cause and Fix
    • How to Narrate It