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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2415|回复: 3

[求助] 关于异步FIFO中的信号同步问题以及格雷码

[复制链接]
发表于 2016-7-23 11:23:51 | 显示全部楼层 |阅读模式

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

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

x
      最近学异步FIFO时有问题没弄懂:                                                                                                            (1) 关于空满信号同步,我理解的是:在异步FIFO中,因为满信号决定能不能写入,写时钟到来时,先判断是否满,若不满才发出写请求,所以需要将满信号与写时钟同步。满信号从不满(0)变成满(1)是由写入操作导致的,所以本身就和写时钟同步。从满(1)变成不满(0)是读操作导致的,所以要和写时钟同步。空信号同理。不知道这样理解对不对?还有没有其他原因导致必须同步?                                                                                                                                               (2)关于使用格雷码:网上很多异步FIFO的程序中都提到要使用格雷码,但是他们都是使用二进制计数器,再将结果转换成格雷码,那这样在二进制计数器中计数时还是会造成多位反转,那转换成格雷码不是没有意义了?                                         谢谢!
发表于 2016-7-23 16:54:14 | 显示全部楼层
最近刚好学完异步FIFO,谈谈我的见解:
首先,异步FIFO的读写时钟是分开的,属于两个不同的时钟域,因此对于满状态的判断,具体操作上得先将工作于读时钟的读地址指针同步到写时钟域,而一般同步所用的方法无非是通过写时钟域的寄存器打两个节拍,这种跨时钟域的数据传输有着误判的问题,而采用格雷码的好处在于即便误判差错也只有1位,特别是在引入预留多位阈值的即将满信号会很有用,极大降低数据溢出的风险。空信号同理
可以看看一些书上的讲解,如《FPGA深度解析》第九章 异步FIFO原理和使用
发表于 2016-7-23 21:15:46 | 显示全部楼层
(1) 空满信号是通过比较读写地址而得来的,而读写地址分别属于不同的时钟域,所以要对地址信号进行跨时钟域同步后才能比较。
(2) 二进制计数器产生的是本时钟域的读(写)地址,对本时钟域来说是同步的,多位变化不会有问题。转化成格雷码是用来处理异步时钟域之前同步多位地址的,我理解的使用格雷码的好处主要有两点:
一是降低亚稳态出现的概率,因为同步多个异步信号出现亚稳态的概率远远大于同步一个异步信号的概率;
二是可以防止误判断,因为地址信号有多位,每一位的延迟可能不同,即地址变化时每一位的跳变时刻可能不同,会出现错误数值,若此数值被采样则可能发生误判断。比如使用二进制地址时由‘1(001)’跳变为‘2(010)’,则有可能出现暂态‘3(011)’,导致误判断,而使用格雷码就不会有这种情况。
发表于 2016-7-23 22:32:12 | 显示全部楼层
感谢分享,希望真的有用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-12-22 22:58 , Processed in 0.041727 second(s), 7 queries , Gzip On, Redis On.

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