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

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

3天内不再提示

异步FIFO用格雷码的原因有哪些

FPGA设计论坛 来源:博客园 作者:子皿木公 2021-08-04 14:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

异步FIFO通过比较读写地址进行满空判断,但是读写地址属于不同的时钟域,所以在比较之前需要先将读写地址进行同步处理,将写地址同步到读时钟域再和读地址比较进行FIFO空状态判断(同步后的写地址一定是小于或者等于当前的写地址,所以此时判断FIFO为空不一定是真空,这样更保守)。

将读地址同步到写时钟域再和写地址比较进行FIFO满状态判断(同步后的读地址一定是小于或者等于当前的读地址,所以此时判断FIFO为满不一定是真空,这样更保守),这样可以保证FIFO的特性:FIFO空之后不能继续读取,FIFO满之后不能继续写入。

大多数情形下,异步FIFO两端的时钟不是同频的,或者读快写慢,或者读慢写快,这时候进行地址同步的时候,可能会有地址遗漏,以读慢写快为例,进行满标志判断的时候需要将读地址同步到写时钟域,因为读慢写快,所以不会有读地址遗漏,同步后的读地址滞后当前读地址,所以可能满标志会提前产生。

进行空标志判断的时候需要将写地址同步到读地址,因为读慢写快,所以当读时钟同步写地址的时候,必然会漏掉一部分写地址(写时钟快,写地址随写时钟翻转,直到满标志出现为止),那到底读时钟会同步到哪个写地址?

不必在意是哪一个,我们关注的是漏掉的地址会不会对FIFO的空标志产生影响。比如写地址从0写到10,期间读时钟域只同步到了2,5,7这三个写地址,漏掉了其他地址。同步到7地址时,真实的写地址可能已经写到10地址,相当于“在读时钟域还没来得及觉察的情况下,写时钟域可能偷偷写了数据到FIFO去”,这样在比较读写地址的时候不会产生FIFO“空”读操作。漏掉的地址也没有对FIFO的逻辑操作产生影响。

我们可以对异步FIFO的地址采用binary编码,这样并不影响异步FIFO的功能,前提是读写地址同步时能够保持正确。这种情况在功能仿真时完全正确,问题只有到时序仿真时才会遇到。毛刺可以说是异步电路的杀手,一个毛刺被触发器采样后会被放大,然后传播,导致电路功能出错。

binary编码的地址总线在跳变时极易产生毛刺,因为binary编码是多位跳变,在实现电路时不可能做到所有的地址总线等长,address bus skew必然存在,而且写地址和读地址分属不同时钟域,读写时钟完全异步,这样地址总线在进行同步过程中出错不可避免,比如写地址在从0111到1000转换时4条地址线同时跳变,这样读时钟在进行写地址同步后得到的写地址可能是0000-1111的某个值,这个完全不能确定,所以用这个同步后的写地址进行FIFO空判断的时候难免出错。

这个时候gray码体现了价值,一次只有一位数据发生变化,这样在进行地址同步的时候,只有两种情况:1.地址同步正确;2.地址同步出错,但是只有1位出错;

第一种正确的情况不需要分析,我们关注第二种,假设写地址从000-》001,读时钟域同步出错,写地址为000-》000,也就是地址没有跳变,但是用这个错误的写地址去做空判断不会出错,最多是让空标志在FIFO不是真正空的时候产生,而不会出现空读的情形。

所以gray码保证的是同步后的读写地址即使在出错的情形下依然能够保证FIFO功能的正确性,当然同步后的读写地址出错总是存在的(因为时钟异步,采样点不确定)。

这里需要注意gray码只是在相邻两次跳变之间才会出现只有1位数据不一致的情形,超过两个周期则不一定,所有地址总线bus skew一定不能超过一个周期,否则可能出现gray码多位数据跳变的情况,这个时候gray码就失去了作用,因为这时候同步后的地址已经不能保证只有1位跳变了。

另外需要将地址总线打两拍,这是为了避免亚稳态传播,理论上将打两拍不能消除亚稳态现象,因为时钟异步,亚稳态不可避免,但是可以极大降低亚稳态传播的概率,低频情况下甚至STA不需要分析这里的异步时序,因为寄存器都可以在一拍内将亚稳态消除,恢复到正常0/1态。而在高频情况下则不一定,尤其在28nm工艺以下,需要检查两级触发器的延迟,保证延迟低,这样可以提高Tr,提高系统MTBF。

编辑:jq

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

    关注

    0

    文章

    20

    浏览量

    8696

原文标题:异步FIFO为什么用格雷码

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    扫镭射雕什么扫枪?

    在电子制造、汽车零部件等行业,镭射雕(DPM的常见形式)因耐磨、耐高温的特性成为产品追溯的核心标识。但金属、塑料等材质的反光、曲面凹凸,加上镭雕可能存在的模糊、低对比度问题,让普通扫
    的头像 发表于 11-20 15:30 156次阅读
    扫镭射雕<b class='flag-5'>码</b><b class='flag-5'>用</b>什么扫<b class='flag-5'>码</b>枪?

    KT148A语音芯片发很难播放,将4脚对地一下再发正常,什么原因

    KT148A 这颗芯片, 我们上电后发很难触发播放, 但镊子将4pin PB0对地短接触发一下,再发就很正常,这是什么原因?
    的头像 发表于 07-02 17:12 595次阅读
    KT148A语音芯片发<b class='flag-5'>码</b>很难播放,将4脚对地一下再发正常,什么<b class='flag-5'>原因</b>?

    cy7c68013a异步slave fifo模式,外部mcu无法读写fifo怎么解决?

    cy7c68013a 异步slave fifo 模式,外部mcu无法读写fifo 上位机发送bulk数据,flag标志是对的,SLCS也拉低了,是设置的低有效, 检测到了flag不为空的标志后
    发表于 06-03 10:49

    希尔亮相2025深圳国际电池展,以高效方案赋能新能源测试全链路

    2025年5月15日至17日,第十七届深圳国际电池技术展览会(CIBF2025)在深圳国际会展中心隆重举行。希尔GripSeal携快速连接器、C9对接板总成及E10系列电测试连接器等核心产品亮相
    的头像 发表于 05-20 09:57 676次阅读
    <b class='flag-5'>格</b><b class='flag-5'>雷</b>希尔亮相2025深圳国际电池展,以高效方案赋能新能源测试全链路

    智多晶FIFO_Generator IP介绍

    FIFO_Generator是智多晶设计的一款通用型FIFO IP。当前发布的FIFO_Generator IP是2.0版本,相比之前的1.1版本主要新增了非等比输入输出数据位宽支持和异步
    的头像 发表于 04-25 17:24 1469次阅读
    智多晶<b class='flag-5'>FIFO</b>_Generator IP介绍

    AXI接口FIFO简介

    AXI接口FIFO是从Native接口FIFO派生而来的。AXI内存映射接口提供了三种样式:AXI4、AXI3和AXI4-Lite。除了Native接口FIFO支持的应用外,AXI FIFO
    的头像 发表于 03-17 10:31 1777次阅读
    AXI接口<b class='flag-5'>FIFO</b>简介

    SDRAM控制器的设计——Sdram_Control.v代码解析(异步FIFO读写模块、读写SDRAM过程)

    前言 SDRAM控制器里面包含5个主要的模块,分别是PLL模块,异步FIFO 写模块,异步FIFO读模块,SDRAM接口控制模块,SDRAM指令执行模块。 其中
    的头像 发表于 03-04 10:49 2180次阅读
    SDRAM控制器的设计——Sdram_Control.v代码解析(<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>读写模块、读写SDRAM过程)

    使用MSVC编译器重新生成了DLP_SDK,执行Prepare DLP LightCrafter 4500时,生成的两张编码图片问题,为什么?

    最近完成使用MSVC编译器重新生成了DLP_SDK,并且将TIDA-00254项目也在msvc编译器下重新生成成功,但是在执行Prepare DLP LightCrafter 4500时,生成的两张编码图片
    发表于 02-28 06:37

    dlp4500模式序列投射,当设置pattern exposure:8333,pattern period为9000时其投射出来的图案就乱了,为什么?

    dlp4500模式序列投射,但是当设置pattern exposure:8333,pattern period为9000时其投射出来的图案就乱了,我看了一下他的图片连接时间image load timing 每一张都大
    发表于 02-26 07:22

    运行LCr4500 3d程序时报错怎么解决?

    ,我想用进行3D重建,这个的固件直接生成好的demo吗,还是说要在opencv里自己
    发表于 02-26 06:13

    使用DLPC350投射时,当切换pattern频率&gt;10frame/s,出现了图像重叠的问题怎么解决?

    你好,我在使用DLPC350 投射(8bit深度)时,当 切换pattern频率 &gt; 10frame/s,出现了图像错误或者说 图像重叠的问题: 从图像看,像
    发表于 02-21 16:03

    如何保证DLP4500与巴斯勒相机同步?

    连接了相机触发线和投影仪j14引脚的trig1的接线。投影仪烧录了8位相移和图共19张,曝光时间和周期设置为10000us和11000us,巴斯勒相机为220帧的,相机曝光设置为
    发表于 02-17 08:07

    FIFO IP核的使用教程

    在数字设计中,利用FIFO进行数据处理是非常普遍的应用,例如,实现时钟域交叉、低延时存储器缓存、总线位宽调整等。下图给出了FIFO生成器支持的一种可能配置。
    的头像 发表于 01-03 09:36 4018次阅读
    <b class='flag-5'>FIFO</b> IP核的使用教程

    DAC3482内部的FIFO作用是什么?

    我现在正在使用DAC3482芯片,想请教一下其内部的FIFO作用是什么? FIFO读写指针分别由DATACLK和DACCLK(或其分频)来驱动,用于“缓冲”的作用,我两种理解: 1.只能缓冲读写
    发表于 12-23 07:06

    使用DAC3482 fifo同步失败的原因?怎么处理?

    完所有寄存器之后拉高TXENABLE信号,输入数据变为正弦信号,同时给SYNC信号一个上升沿用于同步3482内部的PLL。 在以上配置和时序的情况下,每次FIFO都会冲突,复位后还是冲突,请各位朋友帮我分析一下原因,在线等,比较急,谢谢!
    发表于 12-23 06:02