In short: Clock skew in VLSI is the difference in clock arrival time between two flip-flops driven by the same clock. A little skew can be used deliberately to borrow timing margin, but uncontrolled skew eats into setup slack and, more dangerously, can cause hold violations that no re-spin of frequency will fix. Clock-tree synthesis (CTS) is the step where skew is actually shaped and bounded.
Clock skew in VLSI is the spatial difference in clock arrival time between two sequential elements (flip-flops or latches) that are nominally clocked by the same edge. If the launch flop receives its clock edge at time Tlaunch and the capture flop receives the same edge at Tcapture, the skew between them is simply:
skew = Tcapture − Tlaunch
Because a clock signal has to travel through buffers, long metal routes, and clock-gating cells before it reaches each register, no two endpoints see the edge at exactly the same instant. The ideal of a perfectly simultaneous clock is a convenient fiction used only at the RTL and pre-CTS stages; in silicon, skew always exists. The job of a physical-design engineer is not to eliminate skew (impossible) but to bound and balance it so that it helps rather than hurts.
Skew is distinct from jitter, which is the cycle-to-cycle variation of the same edge at a single point, and from insertion delay (latency), the absolute time from the clock source to a register. Skew is always defined between a pair of endpoints.
Consider a launch flop FF1 feeding a capture flop FF2 through combinational logic. Define skew as the capture clock arriving later than the launch clock.
When the capture edge is delayed, FF2 effectively gets extra time to latch the data. This relaxes the setup constraint, letting the path run faster or tolerate more logic delay:
This is the mirror image: it steals from the setup budget but relaxes hold. The crucial takeaway is the trade-off — skew that buys setup margin costs hold margin, and vice versa. This is also the mechanism behind useful skew, where CTS tools intentionally push a few picoseconds of positive skew into a critical register so a slow path meets setup by borrowing from a neighbouring path that has slack to spare.
Not all skew matters equally, and EDA tools classify it by scope:
Modern sign-off uses on-chip variation (OCV) and later advanced OCV / POCV to model how process and voltage gradients make the same buffer faster on a launch path and slower on a capture path. This is why reported local skew in a real design is derated, not a single clean number.
Skew accumulates from several physical sources, and understanding them tells you where to attack it:
Skew is primarily managed during clock-tree synthesis, the PD step that builds the physical network of buffers delivering the clock. Techniques include:
A key discipline: hold violations caused by skew cannot be fixed by lowering the clock frequency. Hold is a race between data and clock within the same cycle and is frequency-independent, which is why excessive skew is far more dangerous than a tight-but-closable setup path.
In tools such as Synopsys PrimeTime, Cadence Tempus, and Innovus/ICC2, skew is reported inside the timing-path report as the difference between the launch and capture clock-network delays, after applying CRPR (clock reconvergence pessimism removal) so that the common portion of the two clock paths is not double-counted. CTS engines accept a target skew and max transition/latency as constraints and optimise the buffer tree against them. Sign-off then re-checks skew under multiple corners (slow/fast PVT, SI-on) because the worst skew rarely occurs at the same corner as the worst insertion delay.
Master CTS, timing closure, and skew the way real tape-outs do.
Explore the Physical Design Course →No. Uncontrolled skew is bad, but bounded and intentionally applied skew (useful skew) is a legitimate optimisation that helps close setup-critical paths by borrowing slack from adjacent paths. The goal is control, not elimination.
Setup checks span a full clock period, so a slower clock relaxes them. Hold checks compare the data and clock edges within the same cycle and contain no period term, so they are frequency-independent. Hold violations are fixed by adding delay to the data path, not by changing frequency.
Local skew is between a launch/capture pair that share a real data path and directly affects timing. Global skew is the maximum arrival-time spread across the whole clock domain and is a tree-quality metric, often pessimistic because unrelated endpoints are included.
Skew is spatial — the arrival difference of one edge between two different points. Jitter is temporal — the variation of edges over time at a single point, caused by the PLL and supply noise. Both erode timing margin but are modelled separately.
Related reading: continue with the antenna effect in VLSI, browse the VLSI Glossary, or practise with our Physical Design Interview Questions.