在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 6022|回复: 15

[求助] 请教异步FIFO

[复制链接]
发表于 2014-7-19 11:10:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 tttt1111tt 于 2014-7-19 21:52 编辑

关于异步fifo,有一些疑问,叩请大牛解惑:
1,同步器只能减少亚稳态发生,但无法保证锁到的是正确数据,对否?
2,格雷码指针同步后,可能存在2个结果,这种情况发生的概率是否很大?个人以为可能性很大,远大于亚稳态发生的概率。
3,格雷码指针错误对FIFO的正确性是否是致命的?有人认为即使出错,但是对空满判断不会产生致命影响,不会产生读穿或写透。但除此之外,就没有其它问题吗?比如写指针,本应前移但却没动,那么新的写数据来了后就会覆盖当前位置的有效数据。
4,当慢时钟同步快时钟时,格雷码从快时钟发过来,如何保证被慢时钟可靠收到,而不是被后续的冲掉?对发送方有没有什么要求?

恳请大牛解惑!谢谢
 楼主| 发表于 2014-7-19 21:42:20 | 显示全部楼层
没人解惑嘛,自己顶
发表于 2014-7-19 23:24:30 | 显示全部楼层
如果你设计过异步fifo,相信这个问题就会有更深入的理解。我举一个简单的例子。
异步FIFO的存储器件是双口ram,控制逻辑分别在两个时钟域内。读写时钟域都会有一个计数器,根据读写地址判断出空满标志。一般情况下,都是用格雷码编码读写地址之后,再打两拍,然后传输到对面的时钟域。
比如,写地址是4bit,传输到读时钟域,有可能是比写地址小1的地址(格雷码每次只变化一个bit),这样满标志就会晚一拍出现,即实际上fifo已经不满了,而full标志还是有效的,这并不会造成fifo的误操作。对于空标志来说,是一样的道理。
 楼主| 发表于 2014-7-20 13:52:07 | 显示全部楼层
感谢作答,只是我的疑问还存在:
我在提问时已说明,格雷码同步错误不会影响空满判断.但是在FIFO远离空满时,格雷码指针同步错误会否使得FIFO的数据被覆盖?
发表于 2014-7-20 20:46:32 | 显示全部楼层
空满不会错,何来的FIFO数据覆盖??
 楼主| 发表于 2014-7-20 21:23:25 | 显示全部楼层
感谢耐心,只是可能我对FIFO理解有误,请再帮解释一下:
假设FIFO有10个条目,读指针指向条目1,写指针条目5,此时FIFO远离空满状态。然后发送方要发生数据,需要同步写指针,但是写指针同步错误,仍然指向条目5,那么,条目5中的数据会否被覆盖?
发表于 2014-7-21 08:56:19 | 显示全部楼层
对不起,我没太懂你的问题。
1.如果写指针在5,读指针在1,此时fifo非满非空
2.发生读操作,读指针+1,变为2,传递到写时钟域时,由于异步采样的关系,在写时钟域内可能为1或者2
3.如果采错了,只能是1,因为格雷码每次只变化1bit
4.因此,即使采错了,写指针也不会碰到读指针。
同样的道理,读指针也不会碰到写指针。这样就没有数据覆盖的问题啦、
 楼主| 发表于 2014-7-21 20:49:44 | 显示全部楼层
啊,貌似明白了,感谢耐心:)感谢
发表于 2014-7-22 00:48:03 | 显示全部楼层
回复 1# tttt1111tt


    You can use a longer FIFO
发表于 2014-7-22 13:23:07 | 显示全部楼层
这里关键的问题是,synchronizer最多只会让你格雷码的正确数据延迟一个cycle到,而不会把错误信息传过去。我认为不应该出现同步错误的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-22 03:31 , Processed in 0.029396 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表