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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: sharpwinner

[讨论] 跨时钟域FIFO的老话题:快时钟域的地址信息如何同步到慢时钟域?

[复制链接]
发表于 2013-3-15 16:48:48 | 显示全部楼层
本帖最后由 iyama 于 2013-3-19 09:50 编辑

格雷码存在的意义在于无论任何一个时钟上升沿,最多只有1bit在变化。这样就能保证在另一个时钟域转过来的地址是对的,要么正确的地址,要么前一个地址。 和两边哪边快慢无关。
发表于 2013-3-17 18:30:23 | 显示全部楼层
本帖最后由 genus001 于 2013-3-17 18:34 编辑

gray码保证在某一个时刻,地址最多有1个bit会发生变化,这样在读时钟域采样的时候,最多也只是这个bit会采样出错,不会影响空满标志的判断。
比如写时钟域地址是这样变化的:000->001->011->010,读时钟域采样时,正确采样时如果是000->011,但是从001->011跳变时,只有一个bit发生了跳变,读时钟域采样时,在它的建立和保持时间窗口内,也只有中间1个bit可能会出错。
发表于 2013-3-18 18:31:41 | 显示全部楼层
5楼说的很清楚了啊
发表于 2013-3-19 10:03:59 | 显示全部楼层
之前对这个问题也是一知半解,谢谢各位的解释啊
发表于 2013-3-20 13:02:54 | 显示全部楼层
格雷码是为了在不同时钟间(无论快到慢还是反之)同步地址的时候即使产生亚稳态也不会造成空满状态的误判。和两次采样隔了几个地址完全无关。
就是说如果慢时钟采样快时钟的地址,如果采样点是在快时钟地址变化的时刻发生,那么会产生亚稳态,但是此亚稳态只是地址中的一个bit的亚稳态,造成的结果就是这个采样值要么是当前正确的地址,要么是它上一个地址,所以不影响空满判断。
如果两个时钟相差太大,那么一下buffer就满了或者空了,那么用fifo就没有意义了
发表于 2013-3-21 22:16:20 | 显示全部楼层
为什么不用快时钟域处理 ,满是中域向快时钟域同步呢
发表于 2014-6-18 14:19:51 | 显示全部楼层
easy to implementation, using another fifo to transfer the address
发表于 2014-7-2 06:23:00 | 显示全部楼层
學習了, gray code 原來是這樣用.
发表于 2015-7-21 11:37:43 | 显示全部楼层
我是这样认为,写快于读的时候,一般情况下只会有满状态产生,不会出现空的状态吧。所以把读地址同步到写时钟域即可判断满或者临近满的状态就行了,而写地址同步到读时钟域时,同步需要有延时,而且,即便漏读跳过了某些写地址值,此时读到的写地址跟此时的读地址比较,也是多绕了一圈的地址,得到的也只能是满或者错误的满,而不可能为空。
发表于 2016-5-3 22:52:45 | 显示全部楼层
看了大神们的解释,终于弄懂了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-23 08:54 , Processed in 0.022464 second(s), 6 queries , Gzip On, Redis On.

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