IntermediateQuestion 27 of 112

How would you constrain a design with both setup and hold clock uncertainty and explain the values?

From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide

Short Answer

Give separate values with set_clock_uncertainty -setup and -hold (SDC), for example -setup 0.25 and -hold 0.10 on the same clock. Setup uncertainty is subtracted from the required time, hold uncertainty is added, and each should cover only the skew and margin relevant to its own check.

Technical Reference DiagramHow would you constrain a design with both setup and hold clock uncertainty and explain the values?

Technical Explanation

Specify -setup and -hold separately on set_clock_uncertainty (SDC), with values chosen to model the real clock skew plus the right margin for each check.

  • What setup uncertainty covers: clock skew plus any setup margin or guardband, subtracted from the required time โ€” this tightens the setup, or max-path, check. It typically bundles expected skew, jitter, and a margin for modeling and OCV.
  • What hold uncertainty covers: the skew relevant to hold plus a hold margin, added to the required time โ€” this tightens the hold, or min-path, check.
  • Why hold is often smaller: the skew components that matter for hold differ from setup's, and hold margins, while tight, are usually smaller in absolute terms.
  • Why the two need independent values at all: setup is worst-cased by the capture clock arriving early relative to launch; hold is worst-cased by the capture clock arriving late. The two checks are stressed in opposite directions, so a single shared number would over-constrain one and under-constrain the other.
  • How the numbers change across the flow: before clock tree synthesis (CTS), with an ideal clock, these are estimates covering the whole anticipated tree skew, so they're relatively large. After CTS, once the clock is propagated, the real skew shows up directly in each register's computed clock latency, so both values shrink to residuals covering only jitter, OCV variation, and a modeling guardband โ€” keeping the pre-CTS numbers unchanged at that point would double-count the skew.

Common Mistake

The Trap: carrying the same pre-CTS clock uncertainty numbers forward unchanged after the clock is propagated.

  • The team sets a conservative 0.3 setup / 0.15 hold uncertainty budget before CTS to cover an unknown tree, then never revisits it once the real clock tree exists.
  • The real, per-register skew is now captured directly by the propagated clock delays, so the old budget is added on top of skew that's already accounted for โ€” double-counting margin that makes timing closure look harder than it is, or hides a genuine hold problem behind an oversized setup cushion.

Follow-up Question & Model Response

Why does hold uncertainty get added to the required time while setup uncertainty gets subtracted โ€” isn't that backwards?

Candidate Model Response: It isn't backwards; it reflects which direction each check is worst-cased in. Setup uncertainty represents skew that could make the true available time shorter than nominal, so subtracting it from the required time makes the check more pessimistic in the setup direction. Hold uncertainty represents skew that could make the true available time at the capture edge shorter in the hold sense, so adding it to the required time makes the hold check correspondingly tighter. Both operations push their respective check toward the worst case; the sign differs because the physical direction of "worse" is opposite for the two checks.

Practical Example

A 500 MHz core clock CLK is pre-CTS with an ideal network. The team sets set_clock_uncertainty -setup 0.35 [get_clocks CLK] and set_clock_uncertainty -hold 0.20 [get_clocks CLK] (SDC) to cover the anticipated tree. After CTS, report_clock_timing -type latency (PT) shows the propagated clock now carries a real, computed 45 ps of skew across the domain. The team then tightens the uncertainty to -setup 0.10 and -hold 0.05, leaving margin only for jitter and OCV, since the skew itself is now represented by the actual propagated latencies rather than by the lump-sum estimate.

Complete STA Handbook

Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Offline PDF Bundle

Want all 1109 questions offline?

Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

See what's inside the bundle
Static Timing Analysis (STA) Handbook โ€” ten chaptersSTA HandbookTen chapters on setup, hold, OCV, and PrimeTime signoff.