CDC:即不同时钟之间传数据
CDC问题分为同步时钟域和异步时钟域。
同步时钟域:是指时钟频率和相位具有一定关系的时钟域,不一定只有时钟频率和相位相同才叫同步时钟域。
异步时钟域:是指两个时钟没有任何关系。
假设数据由CLK1传向CLK2。
对于单bit数据传输时:(使用万能结构-脉冲同步器就足够)
同步时钟域:只要保证源数据在CLK1端保持足够长时间即可。
异步时钟域:须使用额外的电路模块(同步器)来保证数据正确的传输。最基本的同步器是双锁存结构的电平同步器。该同步器的基本原理是让数据至少在CLK2的时钟下保持两个周期,消除亚稳态。
对于多bit数据传输时:(使用握手信号或者异步fifo)
不能采用单bit传输的方法,单bit传输时,不能确定该数据在CLK2时钟持续时间多长,如果多bit传输采用单bit传输机制,会导致输出一些错误的中间状态。
总结:
单bit传输时:
1、有关系的时钟之间传输单bit时,理论上只需要源数据保持足够长的时间(clk2的两个时钟周期)即可。
2、无关系的时钟之间传输单bit数据,必须使用同步器。
3、不管有无关系的时钟进行单bit传输时,脉冲同步器都可以解决CDC问题。
多bit传输时:
1、多bit传输只能使用握手机制或者是异步FIFO
结论:
低频采高频,为防止数据不丢失,应该让源数据变慢,多保持一些周期;高频采低频则不需要,但是高频采低频的结果可能带有数据冗余。