A skew of 55 ps does not appear by itself: it is built from cells in the clock path. Cells come in discrete delays, each one adds its own random variation, and the added variation reduces the skew you can count on for setup while increasing the one you must assume for hold.
import math
s1, h1 = -0.040, 0.100 # stage 1 setup and hold slack (ns)
buf, sigma, ksig = 0.025, 0.003, 3.0 # buffer delay, per-buffer sigma, sigmas covered
rows = {}
for k in range(1, 5):
nominal = buf * k
var = ksig * sigma * math.sqrt(k)
setup_eff = s1 + nominal - var # skew that helps setup, reduced by variation
hold_eff = h1 - (nominal + var) # skew that hurts hold, increased by variation
rows[k] = (round(setup_eff, 4), round(hold_eff, 4))
assert rows == {1: (-0.024, 0.066), 2: (-0.0027, 0.0373), 3: (0.0194, 0.0094), 4: (0.042, -0.018)}
ok = [k for k, (s, h) in rows.items() if s >= 0 and h >= 0]
assert ok == [3]
print("PASS: (setup, hold) with k buffers", rows, "; only k =", ok, "satisfies both")Buffers | Nominal skew (ns) | Setup slack incl. variation | Hold slack incl. variation | Both OK? |
|---|---|---|---|---|
1 | 0.025 | -0.024 | 0.066 | No (setup) |
2 | 0.050 | -0.0027 | 0.0373 | No (setup, narrowly) |
3 | 0.075 | +0.0194 | +0.0094 | Yes |
4 | 0.100 | +0.042 | -0.018 | No (hold) |
Two buffers give a nominal skew of 50 ps, which would nominally fix a 40 ps setup deficit, but the 3σ variation of two independent buffers (12.7 ps) takes 12.7 ps away from the usable skew and leaves setup 2.7 ps short. Three buffers work for both checks; four overshoot into hold. Delay is quantised (steps of 25 ps), and the window between 'enough for setup after variation' and 'not too much for hold after variation' is only one step wide here. The 3σ coverage is the same style of conservative assumption as in the variation section, and it is a choice: a smaller coverage would widen the window and shrink the safety.
Effect | Consequence |
|---|---|
More clock cells | More clock power and area |
Longer unshared clock path | Less common-path credit, more variation |
Skew differs by corner | A skew that fits in one corner can fail in another (next lesson) |
Clock routing change | Coupling on clock nets changes; rerun SI |
Skew is implemented with the real clock cells and analysed with variation, not assumed from the nominal values.
The number of skewing cells is the smallest that satisfies setup and hold after variation.
Clock power and SI are rechecked after skew insertion.
Hold must assume the largest plausible delay on the capture clock, which is the nominal skew plus the variation; setup assumes the smallest, nominal minus variation.