两级同步电路
http://www.cnblogs.com/IClearner/p/6485389.html
这个博主讲解的还是很有意思的呢,
配合这个,简短的讲解:
http://dengkanwen.com/238.html
CDC的问题来源:
不同CLK domian间要完成信息交互(控制和数据),一般来讲,只是将讲个寄存器接上就可以了,但是这样会导致亚稳态。
亚稳态
在同步系统中,如果触发器的setup time / hold time不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端毛刺、振荡、固定的某一电压值,而不是等于数据输入端D的值。这段之间成为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是究竟是0还是1,这是随机的,与输入没有必然的关系。
由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。 逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。
那么究竟如何避免(或者减小)亚稳态的危险呢?注意到亚稳态的触发器继续停留在亚稳态的几率按照指数减少,那么办法就是 等——等足够长的时间,直到这个几率变得小的实际 上不会发生。到底需要有多长呢?有的厂商有一个数据,有的没有,按照普通的做法,至少等一个时钟周期——这也就是所谓的异步数据要用两个触发器打一下
两级同步的解决
世界上并没有完全解决,只是等了一段时间,所以亚稳态的可能减小了很多
跨时钟域