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

    文章

    1872

    浏览量

    64536
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43634
  • 编码
    +关注

    关注

    6

    文章

    940

    浏览量

    54808

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

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

收藏 人收藏

    评论

    相关推荐

    n型焊接头需要用到哪些材料

    德索工程师说道N型焊接头作为射频同轴连接器的一种,其制造过程需要使用多种材料以确保其性能的稳定性和可靠性。以下是对N型焊接头所需材料的详细分析: 铜合金:N型焊接头的核心接触件通常采用高导电性
    的头像 发表于 11-20 10:52 100次阅读
    n型焊接头<b class='flag-5'>需要用到</b>哪些材料

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

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

    调试音频放大倍数时,需要用到1khz 0db的正弦波测试音源,请问下这个0db对应的电压峰峰值的幅度是多少?

    调试音频放大倍数时,需要用到1khz 0db的正弦波测试音源,请问下这个0db对应的电压峰峰值的幅度是多少? 怎么计算的? 谢谢
    发表于 10-28 08:04

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

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

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

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

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

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

    请问INA231EVM采样电阻需要用多大的?

    INA231EVM 采样电阻需要用多大的?
    发表于 08-01 06:18

    同步FIFO异步FIFO区别介绍

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

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

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

    电动车上 哪些部分需要用到霍尔元件?

    霍尔元件
    hallwee
    发布于 :2024年05月11日 15:07:58

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

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

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

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

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

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

    异步FIFO结构设计

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

    示波器接高压差分探头需要用隔离电源吗?详细解析

    如果想要使用示波器测量高压差分信号,常常需要将差分信号转换成单端信号进行输入。一种常见的方法是使用差分探头。在这个过程,我们需要考虑到示波器的安全和可靠性,因此很多人会问到:示波器接高压差分探头
    的头像 发表于 12-22 13:51 714次阅读