CDC的那些事:flop synchronizer
上一篇中我们回顾了一些基础知识,其中最重要的概念就是 亚稳态 。我们接下来所要看到的各种CDC的设计方法,本质上都是围绕在如何解决亚稳态带来的问题。 我们首先来看最基本的问题, single bit level 信号 的跨时钟域。single bit 直接被destination domain的flop去sample产生的问题我们在上一篇已经讨论过,那么解决的办法呢?看起来很简单 -- 之后再加一个flop,也就是说用两级的flop来同步source domain的signal。我们通常把这种synchronizer 叫做 2flop synchronizer 或者double flop synchronizer,俗称“打两拍”。 说实话,老李在最开始学习到这个办法的时候,内心的声音是:“这TM在逗我?这么简单就可以了吗?凭什么第二级的输出就没有亚稳态了?” 相信有很多初学者也和我当初有同样的困惑。在这里我们要再次回顾一下metastable产生的原因。第一级flop产生metastable的原因是flop里面没有及时锁住该锁的值,所以我们无法直接使用第一级flop的Q来直接用于bclk时钟域。但是要注意,我们之前说过,第一级flop的Q 会最终稳定下来 的,而且在 绝大多数时候 ,可以在一个bclk周期内稳定下来,这样第二级flop的D输入就是一个稳定的值