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
    • Constraint Bug Patterns
    • View Mismatch Triage
      • Same Design, Different Numbers
      • Library and Parasitic Mismatch
      • Constraint Version Drift
      • Mismatch Triage Checklist
    • Path Group War Room
    • Signoff Regression Hygiene
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹View Mismatch Triage
  1. Topics
  2. Static Timing Analysis
  3. STA Debug Playbook
  4. View Mismatch Triage
  5. Same Design, Different Numbers

Part 9 · Debug Playbook · All levels

Same Design, Different Numbers

Build the analysis up one input at a time in both flows and compare after each; the first stage where the numbers differ is the first cause.

On this page

    Why it matters

    A complete analysis has many inputs, and a difference at the end could come from any of them. Comparing after each stage turns one large mystery into a series of small questions: which stage added the first difference, and how much did each later stage add?

    Worked example (slack of one reference path, ns)

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    stages = [                                   # (stage, flow A, flow B); both flows start from the same common libraries
        ("libraries and netlist (common)",  0.412, 0.412),
        ("+ constraints",                   0.236, 0.236),
        ("+ library version/corner mapping", 0.198, 0.186),
        ("+ parasitics",                    0.151, 0.092),
        ("+ derates and uncertainty",       0.103, 0.044),
    ]
    diffs = [(s, round(a - b, 3)) for s, a, b in stages]
    first = next(s for s, d in diffs if abs(d) > 1e-9)
    assert first == "+ library version/corner mapping"
    increments = [round(diffs[i][1] - diffs[i - 1][1], 3) for i in range(1, len(diffs))]
    assert [d for _, d in diffs] == [0.0, 0.0, 0.012, 0.059, 0.059]
    assert increments == [0.0, 0.012, 0.047, 0.0]
    biggest = max(range(len(increments)), key=lambda i: abs(increments[i]))
    assert diffs[biggest + 1][0] == "+ parasitics"
    print("PASS: first divergence at", first, "; largest single step at", diffs[biggest + 1][0], "(", increments[biggest], "ns )")

    Stage

    Flow A

    Flow B

    Difference

    Added by this stage

    Libraries and netlist (common)

    0.412

    0.412

    0.000

    0.000

    + constraints

    0.236

    0.236

    0.000

    0.000

    + library version/corner mapping

    0.198

    0.186

    0.012

    0.012

    + parasitics

    0.151

    0.092

    0.059

    0.047

    + derates and uncertainty

    0.103

    0.044

    0.059

    0.000

    The flows agree through the common libraries and netlist, and through constraints, so those inputs are identical in effect. The first difference, 12 ps, appears at the library version/corner mapping stage; parasitics add a further 47 ps; derates add nothing. There are two separate causes: a library mapping difference (a different version, or a different model for one cell) and a parasitic difference (a different extraction corner or version). Fixing the first does not remove the second. The order of work follows the stages: resolve the earliest difference first, because a later stage may be affected by it.

    What the review looks for

    • A staged comparison table for at least one reference path, with differences after each stage.

    • Each stage's difference is explained or accepted with a reason before the next is studied.

    • The same reference path is confirmed to be the same path in both flows at every stage.

    Common pitfall

    Comparing final numbers only. The 59 ps gap has two causes, and a team that finds the library issue may believe the whole gap is explained.

    Interview

    Describe staged comparison: add one input at a time and compare after each.

    Check yourself If the first difference appeared at 'constraints', what would you inspect?

    The constraint files in each flow: clock definitions, exceptions and case values, diffed semantically, since the common libraries, netlist and constraints up to that stage were otherwise identical.

    Related topics

    • Next: Library and Parasitic Mismatch

    • Miscorrelation Causes

    Previous

    142 / 183

    Next: Library and Parasitic Mismatch

    Up next

    Up nextLibrary and Parasitic Mismatch

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Constraint Version Drift
    • Mismatch Triage Checklist