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
    • Setup and Hold Closure Order
    • Physical vs Logical ECOs
    • Useful Skew Trade-offs
      • Skew as a Resource
      • Skew Budget Arithmetic
      • Clock Tree Side Effects
      • Signing Off Useful Skew
    • ECO Regression Matrix
  • STA Debug Playbook16
  • STA Interview Prep26
  • Capstone Timing Signoff Lab4
Loading lesson

‹Useful Skew Trade-offs
  1. Topics
  2. Static Timing Analysis
  3. ECO and Closure
  4. Useful Skew Trade-offs
  5. Clock Tree Side Effects

Part 8 · ECO and Closure · All levels

Clock Tree Side Effects

Skew is built from clock buffers: delay comes in steps, each buffer adds variation, and the skew that survives variation is smaller than the nominal one.

On this page

    Why it matters

    A skew of 55 ps does not appear by itself: it is built from cells in the clock path. Cells come in discrete delays, each one adds its own random variation, and the added variation reduces the skew you can count on for setup while increasing the one you must assume for hold.

    Worked example (ps converted to ns)

    example.py
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import math
    s1, h1 = -0.040, 0.100                      # stage 1 setup and hold slack (ns)
    buf, sigma, ksig = 0.025, 0.003, 3.0       # buffer delay, per-buffer sigma, sigmas covered
    rows = {}
    for k in range(1, 5):
        nominal = buf * k
        var = ksig * sigma * math.sqrt(k)
        setup_eff = s1 + nominal - var          # skew that helps setup, reduced by variation
        hold_eff = h1 - (nominal + var)         # skew that hurts hold, increased by variation
        rows[k] = (round(setup_eff, 4), round(hold_eff, 4))
    assert rows == {1: (-0.024, 0.066), 2: (-0.0027, 0.0373), 3: (0.0194, 0.0094), 4: (0.042, -0.018)}
    ok = [k for k, (s, h) in rows.items() if s >= 0 and h >= 0]
    assert ok == [3]
    print("PASS: (setup, hold) with k buffers", rows, "; only k =", ok, "satisfies both")

    Buffers

    Nominal skew (ns)

    Setup slack incl. variation

    Hold slack incl. variation

    Both OK?

    1

    0.025

    -0.024

    0.066

    No (setup)

    2

    0.050

    -0.0027

    0.0373

    No (setup, narrowly)

    3

    0.075

    +0.0194

    +0.0094

    Yes

    4

    0.100

    +0.042

    -0.018

    No (hold)

    Two buffers give a nominal skew of 50 ps, which would nominally fix a 40 ps setup deficit, but the 3σ variation of two independent buffers (12.7 ps) takes 12.7 ps away from the usable skew and leaves setup 2.7 ps short. Three buffers work for both checks; four overshoot into hold. Delay is quantised (steps of 25 ps), and the window between 'enough for setup after variation' and 'not too much for hold after variation' is only one step wide here. The 3σ coverage is the same style of conservative assumption as in the variation section, and it is a choice: a smaller coverage would widen the window and shrink the safety.

    Other side effects

    Effect

    Consequence

    More clock cells

    More clock power and area

    Longer unshared clock path

    Less common-path credit, more variation

    Skew differs by corner

    A skew that fits in one corner can fail in another (next lesson)

    Clock routing change

    Coupling on clock nets changes; rerun SI

    What the review looks for

    • Skew is implemented with the real clock cells and analysed with variation, not assumed from the nominal values.

    • The number of skewing cells is the smallest that satisfies setup and hold after variation.

    • Clock power and SI are rechecked after skew insertion.

    Common pitfall

    Quoting the nominal skew as the gain. The usable gain is the nominal one minus the variation of the cells that create it.

    Interview

    Explain why the window between setup and hold can be as narrow as one buffer.

    Check yourself Why does hold get worse with variation even though the skew is 'helpful' for setup?

    Hold must assume the largest plausible delay on the capture clock, which is the nominal skew plus the variation; setup assumes the smallest, nominal minus variation.

    Related topics

    • Skew Budget Arithmetic

    • Next: Signing Off Useful Skew

    • Clock Path Variation

    Previous

    132 / 183

    Next: Signing Off Useful Skew

    Up next

    Up nextSigning Off Useful Skew

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Skew as a Resource