异步FIFO基础知识

文章介绍了FIFO在跨时钟域传输中的应用,重点讲解了异步FIFO的结构和工作原理,包括读写指针的管理、判断读空或写满的策略以及为何使用格雷码来减少亚稳态。同时,讨论了不同读写时钟速度下的问题及解决方案,强调了格雷码和指针同步在设计中的关键作用,并提到了验证FIFO的场景。
摘要由CSDN通过智能技术生成

前言

记录学习FIFO的相关知识


正文

1、跨时钟域传输的三种方法

  • 打两拍、异步FIFO、握手信号

2、什么是异步FIFO?画出异步FIFO的结构图。

  • 读写时钟域不同。在写时钟域下将数据放入缓存区,读时钟域下将数据读取出来
  • 没有外部读写地址线,只能按照顺序读写
  • 写指针指向下一个要写入的位置,读指针指向当前要读取的位置。复位时,都指向零,是写指针下一个要写入的位置,读指针当前读取的位置,所以是“读空/empty”
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、如何判断读空或者写满信号?

  • 如果是直接判断读写指针相等,无法知道是满还是空
  • 对指针增加一位最高有效位MSB,n位指针,n-1位表示访问FIFO所需的地址位数。n位完全相同表示“空”;MSB不同,n-1位完全相同表示“满”

4、为什么要用格雷码?

  • 二进制码在传输时可能会发生多bit位同时变化得情况,如0111->1000,这样容易发生亚稳态(触发器在规定时间内无法达到一个稳定的状态)。
  • 格雷码:循环码,相邻两位之间只有1bit发生改变,减少亚稳态发生的概率,并不能从根本上解决
  • 假设写指针为为7->8跳转,读指针为6->7跳转。写指针由于异常情形出现了7->7的跳转,将写指针同步到读时钟域,读写指针都指向7,出现了“假空”。“假满”与之类似,不再赘述。“假空”和“假满”的出现降低了FIFO的性能,但是避免了亚稳态的问题,是可以接受的
    在这里插入图片描述

5、不同读写时钟域情况

  • 写时钟域慢,读时钟域快:读时钟域总是能采集到信号(慢到快),判断空不成问题
    假如读指针从1-9,同步到写时钟域的是7,写指针也在7,那么会判断“满”,会停止写入,其实没满,还差点
    在这里插入图片描述
  • 写时钟域快,读时钟域慢:会出现漏采(只能采集到135)。将读指针传到写时钟域是可以的(慢到快),判断满不成问题
    假设写指针从1-9,同步到读时钟域是7,读指针也在7,会产生“空信号”,会停止读,但实际上没有空
    在这里插入图片描述
  • 当在极端状况下,写很快,读很慢,那一开始就被写满;相反则永远是读空
    总结:写得快,会错误判断产生虚空;读得快,会错误判断产生虚满

6、异步FIFO设计核心

  • 格雷码+指针同步

7、如何验证FIFO?

  • 验证场景:
  • 验证平台:
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值