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
      • Setting Derates
      • Who Approves Margins
      • Over-Margin Cost
      • Derate Audit
    • Path Depth Sensitivity
    • Variation Signoff Dashboard
  • Crosstalk and Noise16
  • ECO and Closure16
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Derate Policy and Approval
  1. Topics
  2. Static Timing Analysis
  3. OCV, AOCV, POCV and Variation
  4. Derate Policy and Approval
  5. Over-Margin Cost

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

Over-Margin Cost

A small increase in derate turns marginal paths into violations; counting violations as the derate rises shows the cost of excess.

On this page

    Why it matters

    Every violation costs effort and implementation resources: upsizing, buffering, rerouting. Margin that is not backed by real risk produces violations that need fixing for no gain. Counting how many endpoints flip as the derate rises makes the price visible.

    Worked example

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    base_slack = [0.30, 0.25, 0.22, 0.18, 0.15, 0.12, 0.10, 0.08, 0.05, 0.02]   # nominal setup slack (ns)
    delay      = [1.4, 1.2, 1.5, 1.0, 1.3, 0.9, 1.1, 1.6, 1.0, 1.2]               # data path delay (ns)
    def failing(derate):
        return sum(1 for s, d in zip(base_slack, delay) if s - d * (derate - 1.0) < -1e-9)
    counts = {d: failing(d) for d in (1.00, 1.05, 1.10, 1.15)}
    assert counts == {1.00: 0, 1.05: 1, 1.10: 4, 1.15: 7}
    extra = counts[1.10] - counts[1.05]
    assert extra == 3
    print("PASS: failing endpoints by late derate", counts, "; going from 1.05 to 1.10 adds", extra)

    Late derate

    Failing endpoints (of 10)

    1.00

    0

    1.05

    1

    1.10

    4

    1.15

    7

    Ten endpoints with nominal slack between 0.02 and 0.30 ns: raising the derate from 1.05 to 1.10 turns three more endpoints into violations, and 1.15 fails seven of ten. The relationship is not linear because endpoints are not evenly spread: it depends on how many sit near zero slack. That is why the cost of a few percent of derate is best measured on the actual design, not estimated.

    What the review looks for

    • A sensitivity run: violations and TNS at the policy derate and at a step above and below.

    • Margin changes are justified against that sensitivity, with the cost of fixing the extra violations.

    • Endpoints that fail only at the highest derate are listed: they show where the margin is doing work.

    Common pitfall

    Judging a derate only on whether the design closes. A derate that closes with heavy ECO effort may be costing more than the risk it covers.

    Interview

    Say that the cost of margin is the extra violations it creates, and that it is measured, not assumed.

    Check yourself Which endpoint fails first as the derate rises, and why?

    The one with the smallest slack relative to its delay: the tenth endpoint (0.02 ns slack, 1.2 ns delay) fails already at 1.05 because 1.2 × 0.05 = 0.06 ns exceeds its slack.

    Related topics

    • Who Approves Margins

    • Next: Derate Audit

    Previous

    96 / 183

    Next: Derate Audit

    Up next

    Up nextDerate Audit

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Setting Derates