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

    文章

    1530

    浏览量

    63567
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43069
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54457

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

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

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

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

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

    电感有什么作用吗?一般电路上需要用到电感吗?

    电感有什么作用吗?一般电路上需要用到电感吗?
    发表于 11-07 08:13

    一般在什么情况下需要用到simulink?

    使用simlink生成嵌入式的代码,一般在什么情况下需要用到simulink,simulink的教程,谁有提供一下
    发表于 11-06 08:06

    异步FIFO设计之格雷码

    相邻的格雷码只有1bit的差异,因此格雷码常常用于异步fifo设计中,保证afifo的读地址(或写地址)被写时钟(或读时钟)采样时最多只有1bit发生跳变。
    的头像 发表于 11-01 17:37 848次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>设计之格雷码

    只有一个iic,但有两个设备需要用到iic,那iic可以分时复用吗?

    请问,我要是只有一个iic,但有两个设备需要用到iic,那iic可以分时复用,会不会有冲突??????
    发表于 10-26 07:39

    变频器维修需要用到的工具都有哪些

    变频器维修需要用到的工具都有哪些
    的头像 发表于 10-20 08:42 1546次阅读

    请问异步FIFO的溢出操作时怎么样判断的?

    请问异步FIFO的溢出操作时怎么样判断的? 异步FIFO是数据传输的一种常用方式,在一些储存器和计算机系统中,常常会用到
    的头像 发表于 10-18 15:28 379次阅读

    同步FIFO异步FIFO的区别 同步FIFO异步FIFO各在什么情况下应用

    同步FIFO异步FIFO的区别 同步FIFO异步FIFO各在什么情况下应用? 1. 同步
    的头像 发表于 10-18 15:23 1016次阅读

    异步FIFO-格雷码

    很多人在面试时被问到为什么异步FIFO需要用到格雷码,可能大部分的答案是格雷码可以消除亚稳态。这种回答比较模糊,今天我们就针对这个来深入探讨一下。
    的头像 发表于 08-26 14:20 636次阅读
    <b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>-格雷码

    在使用nuwriter需要用到NUC980DF61YC.ini文件,0x55AA55AA=0x1这个如何理解?

    在使用 nuwriter 需要用到NUC980DF61YC.ini 文件,此文件是初始化DDR之用,其中有多条语句: 0x55AA55AA=0x1 这个如何理解?
    发表于 06-26 06:35

    FIFO设计—异步FIFO

    异步FIFO主要由五部分组成:写控制端、读控制端、FIFO Memory和两个时钟同步端
    发表于 05-26 16:17 1050次阅读
    <b class='flag-5'>FIFO</b>设计—<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>