跨时钟域同步问题(三)

跨时钟域同步问题(三)

Pulse Synchronizer(脉冲同步器)

之前说到了对于脉冲信号而言,很可能无法满足3edge的原则,这也就导致我们无法用2flop synchronizer来对这种信号进行同步。
image

这里就需要先声明一个概念,我们需要的信号,到底是一个脉冲使能信号还是连续状态信号,即我们所采集到的信号是否需要保持。比如在memory中的CE\WE信号,比如在FIFO中的push和pop信号,这些信号都是高一个周期就进行一次操作,其余时刻的状态都为低电平。而连续状态信号则与其经历了多少高低状态无关。

其中一个重要思路就是,利用水平信号对脉冲信号进行保持,增加反转触发器,使得只要脉冲信号到来,则水平信号也进行翻转且会保持,直到下一个脉冲信号到来。

image
image

但是,该方法存在一个很重要的问题,即我们所采集的水平信号依然需要至少3edge的bclk进行保持,如果两个脉冲信号之间的间隔过短,则无法满足我们的要求。

这里我们做一个假设,假设脉冲信号之间的间隔时间是一个极限时间,即脉冲信号是aclk周期的二分频,从而所得的水平信号的是脉冲信号的四分频。因此水平信号中的高电平部分的保持时间即为2 aclk周期,判断这个时间是否能满足bclk3edge的要求?即aclk的频率需要小于4/3倍的bclk频率才能完全保证要求。

否则,我们依然需要用上一次所说到的二次同步的方法来对脉冲频率进行限制。但这种方法的效率不高。因此我们就很自然的会想到如果存在一种可以暂时存放脉冲信号的先入先出的存储器,两头分别由不同的时钟所控制,这个问题似乎就比较好解决了,这样我们只需要关心读出和写入的速度以及存储器的大小就ok了,即保证存储器不会因为溢出而造成数据的丢失。这也就是CDC问题的集大成者——异步FIFO,所要研究的问题。

posted @ 2021-03-23 17:44  disagreements  阅读(278)  评论(0)    收藏  举报