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
    • OCV, AOCV and POCV Mechanisms
    • Derate Policy and Approval
    • Path Depth Sensitivity
    • Variation Signoff Dashboard
      • What to Track
      • Margin Trends
      • Comparing Runs Honestly
      • Signoff Package
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Variation Signoff Dashboard
  1. Topics
  2. Static Timing Analysis
  3. OCV, AOCV, POCV and Variation
  4. Variation Signoff Dashboard
  5. Comparing Runs Honestly

Part 6 · OCV, AOCV, POCV and Variation · All levels

Comparing Runs Honestly

Totals mislead when the endpoint set changes between runs; compare common endpoints and list the ones that appeared or disappeared.

On this page

    Why it matters

    A constraint change can remove endpoints from the analysis, a netlist change can add new ones. A run-to-run comparison of WNS and TNS then mixes design improvement with changes in what is being measured. Comparing on the endpoints both runs share isolates the real movement.

    Worked example

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    a = {"e1": -0.05, "e2": -0.02, "e3": 0.10, "e4": -0.08}                 # run A
    b = {"e1": -0.03, "e2": -0.04, "e3": 0.12, "e5": -0.01}                 # run B: e4 disappeared, e5 is new
    def stats(d):
        neg = [v for v in d.values() if v < 0]
        return round(min(d.values()), 3), round(sum(neg), 3), len(neg)
    assert stats(a) == (-0.08, -0.15, 3) and stats(b) == (-0.04, -0.08, 3)
    common = sorted(set(a) & set(b))
    ca = {e: a[e] for e in common}
    cb = {e: b[e] for e in common}
    assert stats(ca) == (-0.05, -0.07, 2) and stats(cb) == (-0.04, -0.07, 2)
    removed, added = sorted(set(a) - set(b)), sorted(set(b) - set(a))
    assert (removed, added) == (["e4"], ["e5"])
    moved = {e: round(cb[e] - ca[e], 3) for e in common}
    assert moved == {"e1": 0.02, "e2": -0.02, "e3": 0.02}
    print("PASS: all endpoints", stats(a), "->", stats(b), "; common endpoints", stats(ca), "->", stats(cb), "; removed", removed, "added", added)

    View

    WNS (ns)

    TNS (ns)

    Violations

    Run A, all endpoints

    -0.08

    -0.15

    3

    Run B, all endpoints

    -0.04

    -0.08

    3

    Run A, common endpoints (e1, e2, e3)

    -0.05

    -0.07

    2

    Run B, common endpoints (e1, e2, e3)

    -0.04

    -0.07

    2

    Over all endpoints, B looks better than A: TNS improves from -0.15 to -0.08 ns. On the endpoints both runs share the TNS is unchanged at -0.07 ns: e1 improved by 0.02 ns and e2 worsened by 0.02 ns. The whole TNS 'improvement' is e4 (-0.08 ns) leaving the analysis, partly offset by e5 (-0.01 ns) joining it. Before accepting that gain, someone must find out why e4 disappeared: a legitimate fix, or a constraint that now hides it.

    What the review looks for

    • Run comparisons list endpoints added and removed, with reasons.

    • The comparison on common endpoints is the headline for progress.

    • A removed endpoint is explained before its slack is dropped from the totals.

    Common pitfall

    Accepting a TNS improvement caused by an endpoint disappearing. If a constraint change hid a real path, the improvement is a loss of coverage, not progress.

    Interview

    Say 'common endpoints' and 'added or removed endpoints' when asked how to compare two runs.

    Check yourself In the example, what would you ask first?

    Why e4 is no longer in run B: a netlist change, a constraint change (for example a new exception), or a legitimate fix. Only then is the TNS change meaningful.

    Related topics

    • Margin Trends

    • Next: Signoff Package

    Previous

    104 / 183

    Next: Signoff Package

    Up next

    Up nextSignoff Package

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • What to Track