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
    • Corner and Mode Matrix Design
    • Library Sets and Operating Conditions
    • Signoff vs Implementation Views
      • View Differences
      • Margin and Correlation
      • Miscorrelation Causes
      • Handoff Between Tools
    • MMMC Debug Playbook
  • OCV, AOCV, POCV and Variation16
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Signoff vs Implementation Views
  1. Topics
  2. Static Timing Analysis
  3. Multi-Corner Multi-Mode Signoff
  4. Signoff vs Implementation Views
  5. Margin and Correlation

Part 5 · Multi-Corner Multi-Mode · All levels

Margin and Correlation

A margin added during implementation trades escapes for over-fixing; the right size is read from measured correlation.

On this page

    Why it matters

    If implementation is consistently optimistic, the usual remedy is a margin: pretend each path has a little less slack than the implementation tool computes. Too little margin leaves escapes. Too much over-fixes paths that were fine, costing area, power and time. The measured differences give the trade-off.

    Worked example

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    impl    = {"e1": 0.10, "e2": 0.05, "e3": 0.02, "e4": 0.15, "e5": -0.01, "e6": 0.07}
    signoff = {"e1": 0.06, "e2": -0.03, "e3": -0.01, "e4": 0.12, "e5": -0.05, "e6": 0.03}
    def outcome(margin):
        flagged = {e for e in impl if impl[e] - margin < 0}
        failing = {e for e in impl if signoff[e] < 0}
        return sorted(failing - flagged), sorted(flagged - failing)      # (escapes, false alarms)
    assert outcome(0.00) == (["e2", "e3"], [])
    assert outcome(0.04) == (["e2"], [])
    assert outcome(0.06) == ([], [])
    assert outcome(0.08) == ([], ["e6"])
    needed = max(impl[e] for e in impl if signoff[e] < 0)
    assert abs(needed - 0.05) < 1e-9
    print("PASS: margin 0 ->", outcome(0.0), "; 0.04 ->", outcome(0.04), "; 0.06 ->", outcome(0.06), "; 0.08 ->", outcome(0.08))

    Margin (ns)

    Escapes

    Over-fixed endpoints

    0.00

    e2, e3

    none

    0.04

    e2

    none

    0.06

    none

    none

    0.08

    none

    e6

    Any margin above 0.05 ns, the largest implementation slack among the endpoints that fail signoff, removes every escape: a margin of 0.06 ns leaves no escapes and no over-fixed endpoints on this sample. The largest observed gap across all endpoints is 0.08 ns (at e2), so it is a conservative bound rather than the required size: a margin of 0.08 ns also removes every escape but flags e6, which actually passes signoff with 0.03 ns. A margin of 0.04 ns removes one of two escapes at no cost on this small sample. A real decision uses thousands of endpoints and looks at the distribution of the gaps, not only the maximum.

    Choosing the margin

    Approach

    When it fits

    Maximum observed gap (a conservative bound)

    Small designs, safety first; most over-fixing

    A high percentile of gaps

    Large designs; accept a few escapes and fix them in a signoff ECO

    Margin by path class

    Gaps differ by clock domain, length or layer; use separate margins

    What the review looks for

    • The margin has a number, a source and an owner; it is recorded in the closure plan.

    • The margin is removed or revalidated when the extraction flow or the view list changes.

    • Escapes after the margin are reported and fixed at signoff, not argued away.

    Common pitfall

    Carrying a margin forever. It was measured against one flow and one netlist; a new flow makes it wrong in either direction.

    Interview

    Explain the trade-off: escapes versus over-fixing, and say how you would measure it.

    Check yourself Why not always use the maximum observed gap as margin?

    The maximum gap is sufficient but not necessary: here 0.06 ns already removes every escape, while 0.08 ns also flags e6, which passes signoff. Treating every endpoint as the worst case costs area, power and time for paths that were fine.

    Related topics

    • View Differences

    • Next: Miscorrelation Causes

    Previous

    83 / 183

    Next: Miscorrelation Causes

    Up next

    Up nextMiscorrelation Causes

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Handoff Between Tools