CDC considerations to transfer a pulse
Generally speaking, passing a signal from slow clock to fast clock is not a problem, since the loss of a pulse is less likely to happen. Based on Nyquist Theorem, if receiving clock frequency is at least 2x of sending clock frequency, then there will be no sampling loss.
Passing a signal from fast clock to slow clock requires more careful handling. When passing a CDC signal through a 2 flip-flop synchronizer, if the CDC signal is wider than 1.5x the cycle width of the receiving domain clock period, then there will be no sampling loss. Sometimes, designers need to “stretch” the signal in the sending clock domain, to meet this “1.5x cycle width” requirement. Alternatively, designers can choose to use “handshake” to guarantee the robust signal transfer.
CDC considerations to transfer multi-bit signals
Multiple signals that are synchronized to one clock will experience small data changing skews that can occasionally be sampled on different rising clock edges in receiving clock domain. Thus we cannot simply use double flop synchronizers to transfer multi-bit signals.
There are several schemes that designers can choose from the toolkit:
- Passing multiple CDC bits using gray codes
- Passing multiple CDC bits using async FIFO if gray encoding cannot be achieved
- Passing multiple CDC bits using handshake protocol