赞
踩
本博客所有CDC相关的内容:跨时钟域(CDC)设计汇总
信号的跨时钟域传输可能会引入亚稳态问题,那么就需要想办法对其进行处理,从而降低亚稳态发生的概率(即提高MTBF)。
跨时钟域处理方法可以分为两个大类:单Bit信号跨时钟域处理、多Bit信号跨时钟域处理。分类的原因是多bit信号的传递不光只有亚稳态这一个问题,还可能会因为多个信号之间由于工艺、PCB布局等因素导致的信号传输延时(skew)的存在,从而导致信号被漏采或者错采。
在下面的例子中,数据的读取需要载入信号load和使能信号en同时置位,但是这两个信号之间存在一个小偏差(skew),在分别进行单bit的跨时钟域同步时,由于小skew的存在,导致这两个信号在被同步到目的时钟域后有一个时钟周期的偏差,而这个偏差直接导致数据无法被读取。
现在不妨问自己:这两个信号是否都必须传递?实际上不是必须的,应用中我们可以把两个信号合并为一个控制信号,这样就将多bit信号的跨时钟域传递转换成了单bit信号的跨时钟域传递。如下:
在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。 关于格雷码的内容:Verilog实现的格雷码与二进制码的互相转换
下表给出了4bit自然二进制码、4bit典型格雷码(无特殊说明,典型格雷码即格雷码)与4bit十进制整数的对照:
从格雷码的性质,我们可以发现其虽然是多bit信号的CDC,但是由于每次只有相邻的一位不同,实际上就是1bit信号的CDC,好家伙,又把问题转化成了我们熟悉的单bit信号的跨时钟域问题。
但是格雷码的应用也有局限:
握手法的本质是负反馈,通俗来讲,就是先将被CDC信号展宽,展宽后将其同步到目的时钟域,在目的时钟域生成指示信号,该指示信号用来指示此时信号已经被目的时钟域接收,然后将指示信号反馈到源时钟域(反馈过程),源时钟域接收到这个反馈信号后将被CDC信号拉低,从而确定了展宽长度,也通过”发送--反馈--操作“这一握手过程完成了一次CDC传输。
上图是典型的握手过程来进行CDC:
握手法是一种很保险的方法,但是缺点也很明显:需要的时序开销很大。
毫无疑问异步FIFO是多bit信号来跨时钟域处理的最好的、也是最常用的方法。异步FIFO通过先进新出的缓存机制,将两端数据的读写都控制在各自的时钟域内,时钟域之间通过指针+格雷码形式来指示数据的空、满。
关于异步FIFO可以参考:
对于多bit的data信号,还可以使用使能技术,也就是通过一个使能信号来判断data信号是否已经稳定,当使能信号有效的时候说明data处于稳定状态,在这种情况下终点寄存器才对信号进行采样,可以保证没有setup/hold违例。而使能信号一般使用double FF的方法来进行同步。下面是DMUX的同步示意图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。