微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 异步FIFO指针同步的疑问

异步FIFO指针同步的疑问

时间:10-02 整理:3721RD 点击:
在判断空满标志位时,会先把写指针同步到读时钟域,同时把读指针同步到写时钟域,这样做的原因是什么?
为什么不能直接先将读指针和写指针比较,得出空满标志位之后,再将这空满标志位分别同步?

同样是同步,都是用两级flip flop,先做指针同步再得出空满标志的好处在于,跨时钟域的风险仅仅存在于指针上,异步fifo的指针均采用格雷编码,因此最坏的情况是指针错误(应该变的那一位没有变)而导致fifo的深度动态缩小了。但是若先判断空满标志再做同步,跨时钟域的风险则在空满标志上,最坏的情况是空满标志被同步后错误,有可能导致数据写飞了,即满了但仍然认为没满继续写,或者读出无效数据,即空了仍然认为不空继续读。

不是一个时钟域的信号不能直接比,会出亚稳态。
一定要过度到同一个时钟后才能比。

读指针是在读时钟域产生,写指针是在写时钟域产生,两者受到不同时钟控制,怎么可能拿来比较。

小编想问题能够多问个为什么是很好的。而不是简单照做前人的设计。
楼上几位说的都没错,异步fifo用来做挎时钟域变换,一般还可以具体情况具体分析,例如一次缓冲多少帧数据后读出,这样控制出错的概率。


假如异步比较得到的空满标志是稳定不变的,那么两级DFF同步时不会出现亚稳态。假如某时刻空满标志发生变化,两级DFF同步有两种情况。一种是没有发生亚稳态或者发生了亚稳态但是稳定时的值是正确的值(变化之后的空满标志)。另外一种是亚稳态稳定之后是变化之前的空满标志,这样就会导致标志位的错误。但是,空满标志的产生是通过象限法确定的,实际上离真正的空满还有一定距离,在下一个周期,再次两级DFF同步,就可以得到正确的空满标志,不会过读或者过写。

假如空满标志是稳定不变的,那么两级DFF同步时不会出现亚稳态。假如某时刻空满标志发生变化,两级DFF同步有两种情况。一种是没有发生亚稳态或者发生了亚稳态但是稳定时的值是正确的值(变化之后的空满标志)。另外一种是亚稳态稳定之后是变化之前的空满标志,这样就会导致标志位的错误,但是,空满标志的产生是通过象限法确定的,实际上离真正的空满还有一定距离,在下一个周期,再次两级DFF同步,就可以得到正确的空满标志,不会过读或者过写

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top