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

  • RTL Foundations36
  • Combinational Design25
  • Sequential Design27
  • FSM & Control27
  • Timing & Clocking39
    • STA Foundations
    • Setup, Hold and Slack
    • Skew and Variation
      • Skew and Jitter in Practical STA
      • Uncertainty Modeling
      • Clock Tree and Skew Sources
      • Reading Timing Reports with Skew Context
      • OCV and AOCV Concepts
    • Timing Exceptions
    • Clock Gating
    • RTL for Timing
    • Clock Architecture
  • Reset & CDC34
  • Memory & Buses57
  • Advanced RTL28
  • Senior & Interview76
  • Glossary and Notation
Loading lesson

‹Skew and Variation
  1. Topics
  2. RTL Design
  3. Timing & Clocking
  4. Skew and Variation
  5. Uncertainty Modeling

Part 5 · Timing & Clocking · Intermediate

Uncertainty Modeling

Uncertainty values before and after clock tree synthesis, and their effect on slack.

On this page

    Why this matters

    Adding 0.15 ns of setup uncertainty turns a path with +0.08 ns of slack into one with -0.07 ns. A path that passes at zero uncertainty has not been shown to pass in the real chip.

    After this lesson you can: choose what set_clock_uncertainty should contain before and after clock tree synthesis, and work out its effect on setup and hold slack.

    A margin for what is unknown

    set_clock_uncertainty shrinks the setup margin and also shrinks the hold margin: it reduces the setup required-time window and increases the hold requirement, so slack falls on both checks. Its contents depend on how much of the clock the tool already knows.

    Flow stage

    Clock model

    Uncertainty should include

    Synthesis, early floorplan

    Ideal (no skew known)

    Expected skew + jitter + margin

    After clock tree synthesis

    Propagated (real latencies)

    Jitter + a small margin (skew is now measured)

    Signoff

    Propagated, with variation derates

    PLL jitter and any signoff margin required by the process

    upre​≈skewestimate​+jitter+marginupost​≈jitter+margin

    What 0.15 ns does to a path

    The table below compares one path with and without setup uncertainty. The margin alone flips the sign of the slack.

    Quantity

    Without uncertainty

    With 0.15 ns setup uncertainty

    Period

    2.00 ns

    2.00 ns

    Clock-to-Q + logic

    0.35 + 1.45 = 1.80 ns

    1.80 ns

    Setup

    0.12 ns

    0.12 ns

    Uncertainty

    0

    0.15 ns

    Slack

    2.00 − 0.12 − 1.80 = +0.08 ns

    2.00 − 0.12 − 0.15 − 1.80 = −0.07 ns

    Common mistakes

    For a same-edge hold check from a common clock source, correlated source jitter can cancel between launch and capture. Setup usually compares different edges, so cycle-to-cycle jitter can remain. Derive each uncertainty from the actual edge relationship, source correlation and residual jitter assumptions; unrelated clocks do not inherit common-source cancellation. Hold-fix area is not a reason to reduce a required margin.

    Values such as -setup 0.15 and -hold 0.05 are illustrative, in ns, not recommended defaults. Record the PLL specification, correlation assumptions and flow-owned margin budget; avoid counting variation or propagated skew twice.

    Tip

    Early in the project, over-constrain slightly with a realistic uncertainty so that the RTL leaves headroom for the clock tree. A path that passes with 0 uncertainty has not been shown to pass in the real chip.

    Common pitfall

    Applying a large pre-CTS uncertainty and keeping it after CTS double counts skew and wastes effort (or fails paths that are fine). Update the SDC as the flow progresses, and set the clocks to propagated mode when the tree exists.

    Check yourself A path has +0.05 ns of slack at zero uncertainty. With 0.15 ns setup uncertainty, does it still pass?

    No: 0.05 − 0.15 = −0.10 ns. It needs 0.10 ns more of improvement before the clock tree exists.

    Remember

    • Before the clock tree exists, uncertainty covers expected skew plus jitter plus margin. After it, skew is measured, so keep jitter and a small margin.

    • Uncertainty cuts slack on both setup and hold checks.

    • Keeping a large pre-CTS value after CTS counts skew twice.

    Rule of thumb: update the uncertainty as the flow moves on, and never count the same skew twice.

    How this was checked

    The values -setup 0.15 and -hold 0.05 are teaching numbers in ns, not recommended defaults.

    Keep going

    • Interview: run a mock interview on this topic

    Related topics

    • Clock tree and skew sources

    Previous

    128 / 350

    Next: Clock Tree and Skew Sources

    Up next

    Up nextClock Tree and Skew Sources

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Reading Timing Reports with Skew Context
    • OCV and AOCV Concepts