0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

为什么异步FIFO中需要用到格雷码

工程师邓生 来源:芯司机 作者:芯司机 2022-09-02 11:20 次阅读

异步FIFO常用于跨时钟域之间的数据传输,其可以实现数据的存储,也可以处理异步时钟数据传输的亚稳态问题。异步FIFO的设计其关键点:通过格雷码对内部读写指针进行编码,然后比较产生空满标志,以维护FIFO的正常工作。

很多人在面试时被问到为什么异步FIFO中需要用到格雷码,可能大部分的答案是格雷码可以消除亚稳态。这种回答比较模糊,今天我们就针对这个来深入探讨一下。如下图所示:

d4e57b80-2a6c-11ed-ba43-dac502259ad0.jpg

Push信息产生的连续写指针wpt, 通过同步后,在rclk域与rpt进行比较,以产生rclk域的Empty信号。Empty信号用于控制读操作,以避免在FIFO为空时仍然进行读操作而导致的错误,并影响后续所有的FIFO读操作。

Pop 信息产生的连续读指针rpt, 通过同步后,在wclk域与wpt进行比较,以产生wclk域的Full信号。Full信号用于控制写操作,以避免在FIFO为满时仍然进行写操作而导致的错误,并影响后续的所有的FIFO写操作。

异步时钟产生的亚稳态发生在不同时钟域信号wpt和rpt的比较上。对于多bit的读写指针信号,在跨时钟域传输时会存在bit之前不同延时导致的毛刺,比如写地址在从0111到1000转换时4条地址线都会跳变,这样在写地址同步到读时钟域后得到的写地址可能是0000-1111的某个值,因此本来wpt = rpt的情况变成了wpt > rpt的情况,本来应该出现空状态,因为亚稳态导致未被发现,读操作继续进行,从而影响了整个FIFO的功能。

我们知道,格雷码编码的连续数值之间只有1bit会发生变化,这种特性其实不能消除异步时钟数据传输出现的亚稳态。假设格雷码编码的写地址从001(2)->011(3),读时钟域同步出错,写地址为001->001,也就是地址没有跳变,此时用这个错误的写地址与读地址进行比较,出现虚假的空标志,但这种虚空只是提前阻止了后续的读操作,不会发生读空的情况,因此不会影响后续的操作及整个FIFO的功能。

同样对于读地址同步到写时钟域时也会出现虚满的情况,这种虚空和虚满,不会影响FIFO的功能,因此gray码保证的是在出现亚稳态的情形下,FIFO依然能够正常的工作。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据传输
    +关注

    关注

    9

    文章

    1810

    浏览量

    64430
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43505
  • 编码
    +关注

    关注

    6

    文章

    933

    浏览量

    54739

原文标题:异步FIFO-格雷码

文章出处:【微信号:芯司机,微信公众号:芯司机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ADS9234R这个AD的寄存器如何配置,需要用到哪几个引脚?

    请问一下,ADS9234R这个AD的寄存器如何配置,需要用到哪几个引脚?时序是怎样的?与复位信号有什么关系?感觉官方文档对寄存器配置这一块描述比较少,我用FPGA与ADS9234R做接口,写入寄出器参数,读出总是不对。
    发表于 11-15 07:48

    在进行高速信号放大设计时,往往需要用到反馈电路,是否反馈电路越短越好?

    在进行高速信号放大设计时,往往需要用到反馈电路,是否反馈电路越短越好,不同封装是否在这方面有不同优势?
    发表于 09-26 07:55

    射频连接器mcx需要用到护线套吗

     德索工程师说道射频连接器MCX是否需要用到护线套,这主要取决于具体的应用场景、环境条件以及保护需求。以下是对此问题的详细分析:   MCX连接器是一种超小型射频连接器,发明于1980年代
    的头像 发表于 09-02 10:48 200次阅读
    射频连接器mcx<b class='flag-5'>需要用到</b>护线套吗

    什么时候需要用到no phase reversal运放呢?

    什么时候需要用到no phase reversal运放呢? 此时不用的话会造成什么影响呢?
    发表于 08-02 14:09

    同步FIFO异步FIFO区别介绍

    ,并且间隔时间长,也就是突发写入。那么通过设置一定深度的FIFO,可以起到数据暂存的功能,且使得后续处理流程平滑。 时钟域的隔离:主要用异步FIFO。对于不同时钟域的数据传输,可以通过
    的头像 发表于 06-04 14:27 1234次阅读
    同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>区别介绍

    ADXL1002噪声密度,非线性度,量程,灵敏度该如何测试?需要用到哪些器件?

    ADXL1002比如噪声密度,非线性度,量程,灵敏度该如何测试,需要用到哪些器件,有没有相应的学习资料。
    发表于 05-31 06:29

    在一个应用需要用到ST32的触摸遇到的疑问求解

    我在一个应用需要用到ST32的触摸,现在遇到问题,向大家求助,谢谢! 1、htsc.Init.ChannelIOs这个配置是指我们用手触摸的那个管脚吧? 我理解是手触摸的端口,且可以接多个触摸端口
    发表于 04-23 07:16

    FIFO漫谈之异步FIFO空满信号的产生位置

    的事聊完了,后面顺理成章的就是读写通路模块的设计。不过在读写控制通路之前还要明确下另一个问题,就是空满信号的产生位置的事情。
    的头像 发表于 03-19 13:37 589次阅读
    <b class='flag-5'>FIFO</b>漫谈之<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>空满信号的产生位置

    电源测试需要用到哪些计算公式?

    在电源模块测试过程不仅要了解测试过程和步骤,对于一些测试项目而言还需要了解其正确的计算测试方法,得到准确的测试结果。
    的头像 发表于 03-13 14:32 466次阅读

    异步FIFO结构设计

    电子发烧友网站提供《异步FIFO结构设计.pdf》资料免费下载
    发表于 02-06 09:06 0次下载

    做一个正负4V的电压检测,需要用到16位的ADC,如何选择ADC?

    目前项目中做一个正负4V的电压检测,需要用到16位的ADC,请帮忙选型。因为正负采样第一次做,所以没一点头绪。
    发表于 12-12 06:14

    游戏手柄上哪几块需要用到霍尔开关?

    了解过游戏手柄的小伙伴们都知道,游戏手柄上需要用到霍尔元件来控制速度方向,那么通常有哪几块需要用到霍尔开关元件呢?
    发表于 12-07 15:36

    为什么要走差分线?哪些地方需要用到差分走线?

    为什么要走差分线?哪些地方需要用到差分走线?差分线与等长线的关系  差分线是一种常见的高速布线技术,用于传输高频信号。差分信号传输是指通过两条物理线传输信号,其中一条线是信号的正向传输线,另一
    的头像 发表于 12-07 11:15 2437次阅读

    什么芯片的封装内部需要用到TIM1?

    什么芯片的封装内部需要用到TIM1? TIM1是指定STM32系列微控制器上的一个定时器/计数器模块,可以用于各种定时、计数和脉冲宽度测量应用。在STM32芯片中,许多不同类型的封装都可能使用到
    的头像 发表于 12-07 11:00 968次阅读

    电源适配器散热设计需要用到哪些导热界面材料呢?

    电源适配器散热设计需要用到哪些导热界面材料呢? 电源适配器散热设计是为了确保设备能够正常运行并保持稳定的温度,在散热设计中导热界面材料扮演着重要的角色。导热界面材料能够有效地提高热量的传导效率,将
    的头像 发表于 11-24 14:07 868次阅读