Two facts decide the pattern: what crosses (a level or an event, one bit or many) and how the clocks relate. The table gives the recommended pattern for each combination and names the hazard you must still handle.
Crossing type | Slow-to-fast | Fast-to-slow | Unknown ratio |
|---|---|---|---|
Single-bit level | Two-flop synchroniser; hazard: hold time margin. | Two-flop synchroniser; hazard: level must outlast sampling. | Two-flop synchroniser; hazard: assume the worst ratio both ways. |
Single-bit pulse | Two-flop synchroniser if the pulse spans two fast periods; hazard: marginal widths. | Toggle or stretch scheme; hazard: lost pulse. | Toggle (pulse) synchroniser with a minimum-spacing rule; hazard: assume the worst ratio both ways. |
Multi-bit data word | Handshake; hazard: data must hold through acknowledge. | Handshake; hazard: same, plus slower round trip. | Handshake; hazard: never assume a ratio. |
Multi-bit counter | Gray plus per-bit sync; hazard: must step one at a time. | Gray plus per-bit sync; hazard: sampling skips values. | Gray plus per-bit sync; hazard: jumps forbidden. |
Streaming data | Async FIFO; hazard: depth for bursts. | Async FIFO; hazard: depth plus slow-side throughput. | Async FIFO; hazard: size for the worst ratio. |
Configuration bus | Load pulse with held data; hazard: hold through capture. | Load pulse with held data; hazard: same. | Load pulse with held data; hazard: same. |
Reset | Reset synchroniser; hazard: deassertion racing the clock. | Reset synchroniser; hazard: same. | Reset synchroniser; hazard: same. |
Unknown ratio is a first-class column, not an afterthought: IP, configurable dividers, and DVFS mean the ratio at signoff time may not be the ratio in the field. When the ratio can change, choose the pattern that is correct for all ratios and verify against the worst one.
A toggle or stretch scheme, because a plain synchroniser can lose the pulse between sampling edges. The hazard is the lost pulse; spacing and stretch are sized for the slowest allowed destination clock.
Because correctness would rest on a width assumption about a ratio you do not know. Toggle and handshake schemes are correct for any ratio, so they are the only safe defaults.