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功能的正确性。在同步过程中的亚稳态不可能消除,但是我们只要保证它不会影响我们的正常工作即可。

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

    关注

    30

    文章

    5026

    浏览量

    117709
  • fifo
    +关注

    关注

    3

    文章

    369

    浏览量

    43060

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

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

    简谈FPGA学习中亚稳态现象

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

    FPGA的亚稳态现象是什么?

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

    如何处理好FPGA设计中时钟问题?

    时钟,相信大家还是可以理解的。当然,在能使用异步双口 RAM 来处理时钟
    发表于 09-22 10:24

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

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

    探寻FPGA中三种时钟处理方法

    时钟,相信大家还是可以理解的。当然,在能使用异步双口 RAM 来处理时钟
    发表于 10-20 09:27

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

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

    三种时钟处理的方法

    的三种方法时钟处理方法如下:  1. 打两拍;  2. 异步双口RAM;  3. 格雷码转换。  方法一:打两拍  大家很清楚,处理
    发表于 01-08 16:55

    三种FPGA界最常用的时钟处理法式

    第三级寄存器,由于第二级寄存器对于亚稳态的处理已经起到了很大的改善作用,第三级寄存器在很大程度上可以说只是对于第二级寄存器的延拍,所以意义是不大的。02方法二:异步双口RAM处理多bit数据的
    发表于 02-21 07:00

    FPGA初学者的必修课:FPGA时钟处理3大方法

    第三级寄存器,由于第二级寄存器对于亚稳态的处理已经起到了很大的改善作用,第三级寄存器在很大程度上可以说只是对于第二级寄存器的延拍,所以意义是不大的。02方法二:异步双口RAM处理多bit数据的
    发表于 03-04 09:22

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

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

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

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

    高级FPGA设计技巧!多时钟异步信号处理解决方案

    特信号异步时钟传输时,用来将该单比特信号重新同步到异步时钟。 理论上来说,第一个触发器的输出
    发表于 06-02 14:26

    异步FIFO结构及FPGA设计

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