Five traffic shapes cover most crossings. The table names the structure for each.
What crosses | Example | Protocol | Throughput | Notes |
|---|---|---|---|---|
A slow level (a status bit, an enable) |
| 2FF synchroniser | n/a | Must hold for more than 1 destination period plus setup/hold (1.5 to 2+ periods in practice) |
A single event (a one-cycle pulse) | Interrupt request, | Toggle with a justified spacing contract, or acknowledged event | Open-loop spacing depends on clocks and resolution assumptions | Don't use a plain 2FF: the pulse can be missed; use acknowledgement/counting/FIFO when every event must be conserved |
A word (config, command, status) | 16-bit register value | 4-phase handshake or load pulse with held data | 1 word per round trip (about 9 source cycles per word in the lesson's testbench; depends on the two clock ratios) | Data stable between request and ack |
A stream | Samples, packets, bytes | Asynchronous FIFO | Up to 1 word per slower-clock cycle | Depth sized for the burst |
A counter or pointer | FIFO pointer, timestamp | Gray code + 2FF | 1 per sample | Single-step changes only |
The flow chart applies the same choice as a decision tree. Reason every step in destination-clock periods.
A toggle (pulse) synchroniser: the pulse (5 ns) is far shorter than the destination period (20 ns), so a plain 2FF could miss it. The toggle turns it into a level change that persists.