The hold constraint asks whether the fastest new data arrives after the capturing flip-flop's hold window has closed. Hold slack measures the margin:
hold slack = tcq(min) + tcd − th
where tcd is the contamination delay of the short path through the logic.
- Positive or zero: the new data arrives after the window closes. Safe.
- Negative: a hold violation. The new data arrives while the flip-flop is still locking in the old value, and may corrupt it.
With clock skew, the requirement grows by the skew: hold slack = tcq(min) + tcd − (th + tskew).
Unlike setup slack, hold slack has no clock period in it, so it's the same at every clock frequency. A negative hold slack needs a hold fix: more delay on the short path.