Some crossings are safe only if all their bits arrive together. Gray-coded pointers rely on a single bit changing at a time; a crossing bus relies on its bits settling in the same destination cycle. A bounded datapath delay limit expresses that requirement: the data-path delay from source to synchroniser must stay under a stated bound, ignoring clock skew, which is handled separately.
A datapath-only delay limit says: however the clocks relate, this data must travel from its source register to the first synchroniser flop within this much delay. It does not check setup or hold against a clock edge; it checks the wire-and-gate delay of the data path alone. Again, this is a generic concept with per-flow syntax — signoff cares about the bound existing and being met, not about how it is spelled.
Crossing | What goes wrong with skew | What the bound guarantees |
|---|---|---|
Gray-coded pointer | Two pointer bits changing in different cycles look like two Gray steps, and the FIFO compares a torn pointer | All pointer bits settle within one bound, provided the source advances at most one Gray step per destination sampling window; the bound enforces simultaneity, the protocol enforces spacing |
Crossing data bus with enable | Late bits are captured with the next enable while early bits used the last one | The whole bus is stable before the enable is sampled |
Multi-bit control with handshake | Skewed bits sampled across different cycles can double-trigger the receiver | Related bits move as one across the boundary |
The bound is sized from the protocol: the data must be stable for the window the receiver assumes. A bound tighter than the protocol needs wastes implementation effort; a looser one proves nothing. The number always traces back to a protocol argument, never to a round value someone liked.
A delay bound without a synchroniser is just a fast unsafe path, and a synchroniser without a bound on a Gray pointer is a structure whose assumption is unchecked. The two are reviewed together: the structural check confirms the synchroniser and the Gray discipline, timing confirms the bound is met, and the waiver file records the protocol argument linking them.
Skew between pointer bits can spread one Gray step across two destination samples, so the receiver compares a torn pointer. The structure assumes near-simultaneous arrival; only a bound enforces it.
Timing analysis consumes the bound: it checks the datapath delay against it. The CDC reviewer consumes the protocol argument: it justifies why that particular bound is the right one.