How would you constrain a design with both setup and hold clock uncertainty and explain the values?
From PDVerse PrimeTime STA Interview Guide · pdVerse Mentor Guide
Ten-second Interview Answer
Give separate values, for example set_clock_uncertainty -setup 0.25 [get_clocks CLK] and set_clock_uncertainty -hold 0.10 [get_clocks CLK] . Setup uncertainty is subtracted from the required time, hold uncertainty is added, and each covers its own relevant skew plus margin.
Complete Technical Explanation
Specify -setup and -hold separately, with values chosen to model the real skew plus the right margin for each check. Setup uncertainty covers the clock skew plus any setup margin or guardband, and it is subtracted from the required time, which tightens the setup or max-path check; it typically bundles the expected skew, jitter, and a margin for modelling and OCV. Hold uncertainty covers the skew relevant to hold plus a hold margin, and it is added to the required time, tightening the hold or min-path check. Hold is often given a smaller number than setup, because the skew components that affect hold differ and hold margins, while tight, are usually smaller in absolute terms. The two checks are worst-cased in opposite directions, which is the underlying reason they deserve independent values: setup is worst-cased by the capture clock arriving early relative to launch, hold by the capture arriving late, so the components that matter and their worst-case directions are not the same. Forcing one number to serve both would over-constrain one check and under-constrain the other. Timing in the flow matters too. Pre-CTS these are estimates covering the full anticipated tree skew, so they are relatively large. Post-CTS, once the clocks are propagated, the real skew is captured directly by the computed per-register latencies, so both values drop to residuals covering only jitter, OCV variation and modelling guardband - keeping the pre-CTS numbers would double-count the skew.
In Pd / Signoff
These two lines sit in the clock section of every SDC and directly move both slack numbers, so they are reviewed at each milestone. Pre-CTS the values come from the target skew budget; post-CTS you cut them to residuals when you add set_propagated_clock . An inherited SDC with a large hold uncertainty and propagated clocks is a standard cause of unclosable hold.
Common Trap
Applying a single value to both checks, or carrying the pre-CTS numbers into propagated post-CTS runs. The second double-counts skew - once in the propagated latency differences and again in the uncertainty - making both checks needlessly pessimistic while looking like a legitimately hard design.
Expect Next
Why is the worst-case direction of clock skew opposite for setup and hold, and how does that shape the two numbers you choose?
Topic And Primetime Commands
Clocks / Uncertainty & Jitter. get_clocks, set_clock_uncertainty, set_propagated_clockKeep building interview depth
Continue practising STA
Continue learning free
Get a practical low-power chapter
Receive the existing “Low Power and Multivoltage Fundamentals” PDF chapter and its download link by email.
Continue practising
