Timing closure & STA

Useful skew

Useful skew is the trick of deliberately delaying or advancing the clock to certain flip-flops so that a tight path can 'borrow' time from a neighbour with slack to spare. Picture a relay team where one runner is slow on their leg: you let them start a moment earlier and hand off a moment later, stealing time from the two fast legs on either side. By skewing the capture clock slightly later, a struggling setup path gets extra picoseconds; the cost is paid by the downstream path, which now has a little less.

Tools apply useful skew automatically during or after clock tree synthesis, solving it as an optimization across the whole clock network so total slack is redistributed rather than wasted. It is one of the most powerful late-stage timing-closure levers — it can rescue a path with no logic changes at all — but it has limits: borrowing too aggressively can break hold on the lending path, and a chain of skews can pile up clock uncertainty, so it is applied surgically, not lavishly.

setup_slack_new = setup_slack_old + Δskew_capture

Useful skew and time borrowing solve the same problem from two angles: skew shifts the clock edge at flip-flops, whereas time borrowing exploits the transparency window of latches — both effectively move the deadline rather than speed up the logic.

Also called
intentional skewtime borrowing via skew刻意偏斜