我试图理解时钟交叉FIFO是如何实现的,我看到的通常答案是将读/写地址指针转换为灰色代码,然后通过同步器电路进入彼此的时钟域,以确定是否有数据包含在FIFO。使用灰码的想法是这样的,另一个时钟域可以检测另一端的亚稳态,事实上,每个地址增量只应该改变一个比特……它可以安全地忽略地址指针,直到它看起来有效为止。
如果写时钟域比慢时钟域快得多,该怎么办呢?如果写地址指针可以在每个读时钟周期中增加很多次,那么在某个点上,灰色代码值将翻转超过1位,这并不一定是一个错误。这种情况通常是如何处理的?
我知道有一个类似的问题在于se,但答案似乎显示了一个例子,写入时钟的一个例子只能比读时钟快2倍,所以也许这种情况从未经历过。