提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、异步FIFO
  • 二、读写指针、空满判断、格雷码
  • 三、异步FIFO中的时钟同步
  • 三、FIFO的深度
  • 四、Verilog设计代码

前言

异步FIFO用来处理跨时钟域的读写,知识点涉及跨时钟域、同步、读写指针、空满判断、格雷码等。


一、异步FIFO

异步FIFO的结构如图所示。由读时钟域、写时钟域、Mermory模块和跨时钟域同步组成。

二、读写指针、空满判断、格雷码


读写指针随着读写操作在内存区域内循环移动。
写满:最高位不同,其余位相同
(可以理解为,写指针比读指针多跑一圈)
读空:所有位相同
(可以理解为,读指针赶上写指针)

二进制→格雷码:第一位不变,后面每位都是对应二进制码当前位和其左位的异或。

为什么使用格雷码?
如图红色地址跳变情况,对于二进制第2/3/4位都需要变化,而格雷码只有第2位需要变化,。信号在变化的过程中会成功/失败,二进制就会引发很多种情况,包含地址跨跳,使“空满”判定出现问题;格雷码则保持原位置/跳变成功,不会使“空满”判定出现问题。

三、异步FIFO中的时钟同步

先上结论:
同步rd_cntr至clk_write时钟域,再与wr_cntr进行对比来决定FIFO是否满;(判断满是wr_cntr - rd_cntr)
同步wr_cntr至clk_read时钟域,再与rd_cntr进行对比来决定FIFO是否空;(判断空是rd_cntr == wr_cntr)
其中缘由:
对于fifo来说,无论是写地址在读时钟下同步,还是读地址在写时钟下同步,被同步地址都会是延迟两个时钟周期之前的地址,所以在进行比较判断的时刻,参与判断的同步地址总是小于等于当前时刻的真实地址。

增加两个寄存器来实现时钟同步
判满:满信号判断条件为写地址是否超读地址一圈,为了避免继续超前写,(写太快了)将读指针同步到写时钟域;
判空:空信号判断条件为读地址是否追上写地址,为了避免超前读,(读太快了)将写指针同步到读时钟域。

FIFO满是对于写操作有用的(因为满了就不可以写了),所以满信号必须同步到写时钟之下。而FIFO空是对读操作有用的(因为空了就不可以读了),所以空信号必须同步到读时钟之下。

三、FIFO的深度

在求解之前需要验证一下在允许的最大时间长度内写入的数据量是否等于读出的数据量,保证有解;
•求FIFO深度需要考虑最坏的情形,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率;
•不管什么场景,要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走;
•由于FIFO空满标志位的判断延迟,在实际应用中需要预留一些余量。
下面我们来推导一下FIFO深度的求解公式,假设:
•写时钟频率为fwr
•读时钟频率为frd
•在写时钟周期内,每m个周期内就有n个数据写入FIFO
•在读时钟周期内,每x个周期内可以有y个数据读出FIFO
那么:
•首先必须满足(1/fwr)(m/n) ≥ (1/frd)(x/y)
•”背靠背“的情形下是FIFO读写的最坏情形,burst长度 B = 2n
•写完burst长度数据最快所需时间 T = (1/fwr)
B
•从FIFO中读出一个数据至少需要时间 t= (1/frd)(x/y)
•在T时间内能够从都走的数据个数 = T/t = B * (frd/fwr)(y/x)
•在T时间内还没有读走的数据个数 = B-B* (frd/fwr)(y/x)
•因此FIFO的最小深度为 B-B * (frd/fwr)
(y/x)
•注意保留一些余量

四、Verilog设计代码

待更新

IC验证:异步FIFO相关推荐

  1. IC学习笔记3——异步FIFO

    IC学习笔记3--异步FIFO 异步FIFO的工作内容与同步FIFO类似,但是异步FIFO的控制并不像同步FIFO那么简单,因为异步FIFO工作在不同的时钟域,这将会带来一些问题,比如空满检测?是否还 ...

  2. 异步FIFO模块验证-面试总结

    首先介绍下自己,个人是材料专业转行IC验证,去年秋招也面试了许多场面试,最近临近毕业,想着有空分享一下自己的面试经验.个人面试经验来看面试官基本都会针对异步FIFO进行提问,虽然异步FIFO较为简单, ...

  3. 数字IC笔面常考,跨时钟域神器。——异步FIFO(简介及手撕代码)

    异步FIFO 写在前面的话 异步FIFO相关知识点 FIFO简介 FIFO结构 应用场景(来源小梅哥 <FPGA 系统设计与验证实战指南> 章节4.4) 相关参数 异步FIFO 内部组成 ...

  4. FPGA数字IC刷题58道Verilog题解代码及视频讲解【FPGA探索者】【同步/异步FIFO】【跨时钟】

    牛客 Verilog 刷题入门篇1~24 + 进阶篇1~34 题解代码,所有代码均能通过测试,配合视频讲解效果更佳.为避免内容冗余,本文只给出代码,部分题目给出必要说明. 很多题目本身出题有些问题,着 ...

  5. 【IC设计】异步FIFO

    同步FIFO:读写操作共用一个时钟. 异步FIFO:读操作时钟和写操作时钟相互独立. 因此异步FIFO的端口相对于同步FIFO时钟和复位信号有所变化:异步FIFO的输入端口有:时钟与复位信号(wr_c ...

  6. 异步fifo_数字IC校招基础知识点复习(五)——跨时钟域涉及part2(异步FIFO)

    1.跨时钟域设计(CDC)-part 2 在上一篇中我们主要关注的是单比特的控制信号,而对于多比特信号的跨时钟域传输则需要一些其他的手段. 首先需要明确的是,一般不采用对多比特信号中的每个比特单独使用 ...

  7. 异步fifo设计及验证verilog代码

    论文参考:The Design and Verification of a Synchronous First-In First-Out 博客参考:[原创]异步FIFO设计原理详解 (含RTL代码和T ...

  8. IC设计 — 同步FIFO和异步FIFO设计实现(一)

    文章目录 1. FIFO介绍 1.1 FIFO参数 1.2 full/empty 检测 1.3 同步FIFO和异步FIFO 2. FIFO设计 2.1 二进制和格雷码 2.2 同步FIFO 2.3 异 ...

  9. FPGA/IC笔试面试(一):异步FIFO最小深度计算

    目录 突发数据长度(Burst Length) 常见FIFO深度计算情况 一.写时钟 > 读时钟(写比读快) 1.读写都没有空闲周期 2.读写有空闲周期 二.写时钟 = 读时钟(写读一样快) 1 ...

  10. 异步fifo的设计与验证

    书接上文,上一篇介绍了略简单的同步fifo,接下来开始较为复杂的异步fifo. 1.同步fifo与异步fifo的区别 当设计中只有一个时钟时,所有的寄存器否用同一个,不会出现传输速度不匹配的情况:但是 ...

最新文章

  1. 远程桌面连接由于网络错误而丢失
  2. 使用Spring进行面向切面编程(AOP)---讲解+代码
  3. Page Object设计模式实践
  4. Java基础学习总结(99)——Java代码性能优化总结
  5. poj2914无向图的最小割
  6. python编译 pyd 工具_python如何编译py文件生成pyc、pyo、pyd以及如何和C语言结合使用...
  7. 2017版张宇1000题【题目收集】
  8. java steam的缓冲区_SSM框架完结篇 SpringMVC与Steam前后台功能模块开发
  9. SpringBoot 之 @Transaction注解的类级别和方法级别的区别
  10. mysql利用二进制日志binlog恢复误删除操作
  11. PDF怎么转换成Word?来看这两个方法
  12. HDU 5855 Less Time, More profit(最大权闭合子图)
  13. 深信服邮件服务器配置,使用深信服设备实现邮件服务器高可用
  14. FDMA和TDMA简介
  15. 真人语音朗读软件_讯飞语音云助力移动“和阅读”,打造个性化听书应用
  16. 计算机怎么查找表格里内容,请教如何迅速查找复杂EXCEL表格里的内容? -电脑资料...
  17. 苏嵌//张朋//2018.07.16
  18. 虚拟机软件有哪些?分别有哪些作用?
  19. 【黏住用户的不是小红书,而是它背后的那些人】
  20. 五种经典卷积神经网络

热门文章

  1. Python+高德API解决实习租房问题
  2. 微信小程序对图片进行canvas压缩的方法(详解)
  3. 陈昊芝:《捕鱼达人2》2月份收入或超3000万
  4. 虚拟机打开网页太卡解决方案
  5. Matlab交互式画图-示例
  6. 从新手到Flutter架构师,一篇就够!Flutter 史上最全开源项目(UI、导航、网络、导航、音视频...)
  7. js算法的深度优先遍历和广度优先遍历
  8. 程序员自虐式杀脑细胞计划
  9. BJ模拟 医院【支配树】
  10. 谷歌前员工一语道破皮查伊和佩奇最大不同点