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

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

3天内不再提示

如何解决异步FIFO跨时钟域亚稳态问题?

DIri_ALIFPGA 来源:未知 作者:胡薇 2018-09-05 14:29 次阅读

时钟域的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域的写指针不做任何处理直接比较肯定是错误的,因此我们需要进行同步处理以后进行比较。

解决方法:两级寄存器同步 + 格雷码

同步的过程有两个:

(1)将写时钟域的写指针同步到读时钟域,将同步后的写指针与读时钟域的读指针进行比较产生读空信号;

(2)将读时钟域的读指针同步到写时钟域,将同步后的读指针与写时钟域的写指针进行比较产生写满信号;

异步FIFO的写指针和读指针分属不同时钟域,这样指针在进行同步过程中很容易出错,比如写指针在从0111到1000跳变时4位同时改变,这样读时钟在进行写指针同步后得到的写指针可能是0000-1111的某个值,一共有2^4个可能的情况,而这些都是不可控制的,你并不能确定会出现哪个值,那出错的概率非常大,怎么办呢?到了格雷码发挥作用的时候了,而格雷码的编码特点是相邻位每次只有 1 位发生变化, 这样在进行指针同步的时候,只有两种可能出现的情况:

指针同步正确,正是我们所要的;

指针同步出错,举例假设格雷码写指针从000->001,将写指针同步到读时钟域同步出错,出错的结果只可能是000->000,因为相邻位的格雷码每次只有一位变化,这个出错结果实际上也就是写指针没有跳变保持不变,我们所关心的就是这个错误会不会导致读空判断出错?答案是不会,最多是让空标志在FIFO不是真正空的时候产生,而不会出现空读的情形。所以gray码保证的是同步后的读写指针即使在出错的情形下依然能够保证FIFO功能的正确性。在同步过程中的亚稳态不可能消除,但是我们只要保证它不会影响我们的正常工作即可。

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

    关注

    31

    文章

    5308

    浏览量

    119977
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43533

原文标题:异步FIFO跨时钟域亚稳态如何解决?

文章出处:【微信号:ALIFPGA,微信公众号:FPGA极客空间】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA中复位电路的亚稳态技术详解

    只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、时钟
    的头像 发表于 09-30 17:08 3737次阅读
    FPGA中复位电路的<b class='flag-5'>亚稳态</b>技术详解

    时钟的解决方案

    在很久之前便陆续谈过亚稳态FIFO,复位的设计。本次亦安做一个简单的总结,从宏观上给大家展示时钟的解决方案。
    的头像 发表于 01-08 09:42 858次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>的解决方案

    FPGA中亚稳态——让你无处可逃

    异步信号检测、时钟信号传输以及复位电路等常用设计中。1.3亚稳态危害由于产生亚稳态后,寄存
    发表于 01-11 11:49

    FPGA中亚稳态——让你无处可逃

    产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式:(1) 对异步信号进行同步处理;(2) 采用FIFO
    发表于 04-25 15:29

    FPGA的亚稳态现象是什么?

    说起亚稳态,首先我们先来了解一下什么叫做亚稳态亚稳态现象:信号在无关信号或者异步时钟之间传输
    发表于 09-11 11:52

    在FPGA复位电路中产生亚稳态的原因

    元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、时钟信号传输以及复位电路等常用设计
    发表于 10-19 10:03

    FPGA--中复位电路产生亚稳态的原因

    的,亚稳态主要发生在异步信号检测、时钟信号传输以及复位电路等常用设计中。03 亚稳态危害由于
    发表于 10-22 11:42

    在FPGA中,同步信号、异步信号和亚稳态的理解

    为clk2时钟异步信号,那么D4信号就有可能出现亚稳态。假设D4信号出现亚稳态后,恢复至稳态
    发表于 02-28 16:38

    今日说“法”:让FPGA设计中的亚稳态“无处可逃”

    亚稳态产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式:[tr][tr](1) 对异步信号进行同步处理;[tr][tr](2) 采用FIF
    发表于 04-27 17:31

    异步FIFO结构及FPGA设计

    异步FIFO结构及FPGA设计,解决亚稳态的问题
    发表于 11-10 15:21 4次下载

    时序问题常见的时钟亚稳态问题

    今天写一下时序问题常见的时钟亚稳态问题。 先说明一下亚稳态问题: D触发器有个明显的特征就是建立时间(setup time)和保持时间
    的头像 发表于 06-18 15:28 2994次阅读

    Verilog电路设计之单bit时钟同步和异步FIFO

    FIFO用于为匹配读写速度而设置的数据缓冲buffer,当读写时钟异步时,就是异步FIFO。多bit的数据信号,并不是直接从写
    发表于 01-01 16:48 1258次阅读

    时钟类型介绍 同步FIFO异步FIFO的架构设计

    在《时钟与复位》一文中已经解释了亚稳态的含义以及亚稳态存在的危害。在单时钟系统中,亚稳态出现的概率非常低,采用同步设计基本可以规避风险。但在
    的头像 发表于 09-19 09:32 2692次阅读
    <b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>类型介绍 同步<b class='flag-5'>FIFO</b>和<b class='flag-5'>异步</b><b class='flag-5'>FIFO</b>的架构设计

    FPGA设计中的亚稳态解析

    说起亚稳态,首先我们先来了解一下什么叫做亚稳态亚稳态现象:信号在无关信号或者异步时钟之间传输
    的头像 发表于 09-19 15:18 1808次阅读
    FPGA设计中的<b class='flag-5'>亚稳态</b>解析

    如何处理时钟这些基础问题

    对于数字设计人员来讲,只要信号从一个时钟跨越到另一个时钟,那么就可能发生亚稳态。我们称为“
    发表于 01-08 09:39 578次阅读
    如何处理<b class='flag-5'>跨</b><b class='flag-5'>时钟</b><b class='flag-5'>域</b>这些基础问题