Almost every timing question in a synchronous circuit is about the same small pattern:
- a launching flip-flop, whose Q changes at a clock edge;
- some combinational logic;
- a capturing flip-flop, whose D is fed by that logic.
Both flip-flops share the clock. A design has thousands of these paths, and each one gets two checks:
- Setup: is the slowest data early enough for the next edge?
T ≥ tcq + tpd + tsu. - Hold: is the fastest new data late enough to miss the same edge's hold window?
tcq(min) + tcd ≥ th.
A path can fail either check, both, or neither. If the clock reaches the two flip-flops at different times, the difference is clock skew and both checks shift.
The same flip-flop is often the capturing end of one path and the launching end of the next. In a pipeline, each stage is one register-to-register path.