How do you apply different setup and hold clock uncertainty margins with set_clock_uncertainty?
From PDVerse STA Mentor Guide · pdVerse Mentor Guide
Short Answer
Clock uncertainty is margin the tool subtracts before deciding a check passes, and setup and hold do not always need the same amount of it. The -setup and -hold options on set_clock_uncertainty let you assign each check its own value, instead of one flat number applying equally to both.
Technical Explanation
Clock uncertainty is a margin subtracted before a check passes, and setup and hold do not need the same amount of it.
set_clock_uncertainty(SDC) reduces the effective time a check has to work with. For setup, it tightens the required time; for hold, it also tightens the required time, but hold's timing relationship makes the two effects behave differently in practice.-setupand-hold(SDC) let you apply different margin values to each check, instead of one shared number covering both. This matters because the sources of margin are not identical: setup uncertainty commonly covers jitter and skew guard-band before the clock tree is built, while hold margin is often kept smaller since hold is checked at the same clock edge, not the next one.- Without
-setup/-hold, a plainset_clock_uncertaintyvalue applies to both checks equally, which is a reasonable default early in the flow when you have not yet separated the two concerns. - Splitting the values usually happens as the design matures. Early in the flow, a single flat uncertainty number is a simple placeholder; later, once real jitter and skew data exist, teams often tighten or loosen setup and hold margins independently based on what each one actually needs.
- The command can target a specific clock, a pin, or a from/to clock pair, so the same split can apply narrowly to one clock relationship instead of globally to the whole design.
- Why it matters: applying the same uncertainty value to both checks when the true risk is asymmetric either wastes setup margin unnecessarily or leaves hold under-protected, depending on which check actually needed more.
Common Mistake
The Trap: applying one flat set_clock_uncertainty value to a design and assuming it protects setup and hold equally well.
- A value sized for setup jitter guard-band, if also applied to hold, can be far more conservative than hold actually needs, wasting fixing effort on hold paths that were never really at risk.
- Conversely, a value sized to be lenient for hold, if also applied to setup, can understate real setup risk from jitter and skew that has not been fully characterized yet.
Follow-up Question & Model Response
Your setup margin needs 60ps of guard-band for jitter, but your hold margin only needs 15ps. Would you use one set_clock_uncertainty command?
Candidate Model Response: No, I would use two separate commands so each check gets the value it actually needs — set_clock_uncertainty -setup 0.06 [get_clocks CLK1] and set_clock_uncertainty -hold 0.015 [get_clocks CLK1] (SDC). Using one flat 60ps value for both would apply unnecessary hold margin that could flag paths as failing when they are not really at risk, while using one flat 15ps value for both would understate the real setup jitter risk. Splitting them keeps each check's margin tied to what it is actually meant to cover.
Practical Example
A clock CLK1 needs 60ps of setup guard-band to cover jitter measured from the PLL datasheet, but the hold check, evaluated at the same edge rather than the next one, only needs 15ps to cover residual skew uncertainty. The team applies set_clock_uncertainty -setup 0.06 [get_clocks CLK1] and set_clock_uncertainty -hold 0.015 [get_clocks CLK1] (SDC). A path that would have shown a false hold violation under a flat 60ps assumption now reports +45ps of hold slack with the correctly sized 15ps value, while the setup check still carries its full 60ps of protection.
Complete STA Handbook
Master Signoff-Ready Static Timing Analysis
Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Continue practising