Every fix for reconvergence does the same thing: it reduces the number of independent crossings to one, so there is nothing left to disagree. The choice is which single crossing carries the information and where the rest is reconstructed.
Fix | How | Costs | Use when |
|---|---|---|---|
Synchronise one, derive the rest | Cross one signal; regenerate the related signals from it in the destination domain | Derivation logic must be provably equivalent; adds destination latency | The related signals are functions of one message (for example one strobe plus locally decoded selects) |
Encode into one signal | Combine the related bits into a single event: one pulse plus qualified capture, or a Gray step | Source must hold the bundle stable around the event (proof obligation) | A slowly changing bundle with a natural qualifier |
Handshake | Request and acknowledge around held data (see handshake for buses) | Round-trip latency of several cycles each way | Control and configuration at low rates |
FIFO | Stream words with Gray pointers (see async FIFO design) | Memory area plus pointer latency | Streams, bursts, or rate matching |
If the destination can reconstruct the bundle from one wire, synchronise one and derive: it is the cheapest correct fix.
If the bundle is data that only needs capturing, encode with a qualifier (qualified capture) rather than paying handshake latency.
If either side must know the other side acted, only a handshake or FIFO gives the acknowledgement; one-way fixes cannot.
After any fix, re-run the structural analysis: the convergence point must be gone, and the new crossing must carry its own synchroniser, qualifier proof, or protocol checks.
Encode into one signal: cross the pulse and capture the qualifier with it (qualified capture). Prove the qualifier is stable around every pulse: no change from well before the pulse until the capture has settled, covering synchroniser latency and skew.