请教异步FIFO
关于异步FIFO,有一些疑问,叩请大牛解惑:
1,同步器只能减少亚稳态发生,但无法保证锁到的是正确数据,对否?
2,格雷码指针同步后,可能存在2个结果,这种情况发生的概率是否很大?个人以为可能性很大,远大于亚稳态发生的概率。
3,格雷码指针错误对FIFO的正确性是否是致命的?有人认为即使出错,但是对空满判断不会产生致命影响,不会产生读穿或写透。但除此之外,就没有其它问题吗?比如写指针,本应前移但却没动,那么新的写数据来了后就会覆盖当前位置的有效数据。
4,当慢时钟同步快时钟时,格雷码从快时钟发过来,如何保证被慢时钟可靠收到,而不是被后续的冲掉?对发送方有没有什么要求?
恳请大牛解惑!谢谢
没人解惑嘛,自己顶
如果你设计过异步fifo,相信这个问题就会有更深入的理解。我举一个简单的例子。
异步FIFO的存储器件是双口ram,控制逻辑分别在两个时钟域内。读写时钟域都会有一个计数器,根据读写地址判断出空满标志。一般情况下,都是用格雷码编码读写地址之后,再打两拍,然后传输到对面的时钟域。
比如,写地址是4bit,传输到读时钟域,有可能是比写地址小1的地址(格雷码每次只变化一个bit),这样满标志就会晚一拍出现,即实际上fifo已经不满了,而full标志还是有效的,这并不会造成fifo的误操作。对于空标志来说,是一样的道理。
感谢作答,只是我的疑问还存在:
我在提问时已说明,格雷码同步错误不会影响空满判断.但是在FIFO远离空满时,格雷码指针同步错误会否使得FIFO的数据被覆盖?
空满不会错,何来的FIFO数据覆盖?
感谢耐心,只是可能我对FIFO理解有误,请再帮解释一下:
假设FIFO有10个条目,读指针指向条目1,写指针条目5,此时FIFO远离空满状态。然后发送方要发生数据,需要同步写指针,但是写指针同步错误,仍然指向条目5,那么,条目5中的数据会否被覆盖?
对不起,我没太懂你的问题。
1.如果写指针在5,读指针在1,此时fifo非满非空
2.发生读操作,读指针+1,变为2,传递到写时钟域时,由于异步采样的关系,在写时钟域内可能为1或者2
3.如果采错了,只能是1,因为格雷码每次只变化1bit
4.因此,即使采错了,写指针也不会碰到读指针。
同样的道理,读指针也不会碰到写指针。这样就没有数据覆盖的问题啦、
啊,貌似明白了,感谢耐心:)感谢
You can use a longer FIFO
这里关键的问题是,synchronizer最多只会让你格雷码的正确数据延迟一个cycle到,而不会把错误信息传过去。我认为不应该出现同步错误的问题。
也是一个办法,代价就是面积
是的,只要不引起错误,就不算错
指针同步只用于判断空满,空满判断不会出错的话怎么会被覆盖呢?
但是,你的这个地址很有可能被遗漏啊
学习了,,,,,,,,,,,,
写指针同步错误,那也是同步到读时钟域之后的写指针发生了错误,在写时钟域,写指针确实已经改变了,所以不会存在覆盖的问题
