For a path from launch flop A to capture flop B, positive skew means the clock at B arrives later. Skew belongs to the path, not to one flop.
One flop has different skew against each of its fan-in flops.
Skew sign | Setup (A → B) | Hold (A → B) | Next stage (B → C) |
|---|---|---|---|
Positive (B later) | Gains time | Loses margin | B launches later, so B → C loses setup time |
Negative (B earlier) | Loses time | Gains margin | B → C gains setup time |
Zero | Neutral | Neutral | Neutral |
In the example below, 0.30 ns of skew moves a path from −0.12 ns to +0.18 ns. The next stage loses the same 0.30 ns.
Read the picture from the clock offsets down to the bars: the dashed bar is the slack before the skew and the solid bar is the slack after it.
Stage 1 starts failing (-0.12 ns) and ends passing (+0.18 ns).
Stage 2 pays for it: it falls from +0.50 ns to +0.20 ns, still positive.
The two slacks add up to the same 0.38 ns before and after. The skew moves slack; it does not create any.
Stage | Slack before | Slack after +0.30 ns skew |
|---|---|---|
1 (hard), A to B | -0.12 ns | +0.18 ns |
2 (easy), B to C | +0.50 ns | +0.20 ns |
Total | 0.38 ns | 0.38 ns |
Jitter is cycle-to-cycle variation of the clock edge from the PLL and supply noise. It is modeled as a margin on the capture edge.
Skew is deterministic once the clock tree is built, and STA reads it from the netlist. Jitter is statistical and enters through set_clock_uncertainty.
Both enter the same slack equations; only the source differs.
It would end at −0.10 ns. Useful skew is only free when the next stage has enough slack to give.