何时需要FIFO?

当模块A需要向模块B发送数据,但是发送数据和接受数据的速度不一样,这个时候就需要一个FIFO来做缓冲。

FIFO的深度

简单的想,FIFO的深度取决于FIFO内部存储的还未读取的数值的个数,当这个数达到最大的时候,就是FIFO的最小深度。
这里考虑的读写速度的差异,是写得速度比读的速度更快,这样才会有可能出现FIFO溢出的情况,才需要仔细考虑FIFO的深度为多少。但是当读比写快,或者读写一样快的时候又会怎样呢?下面会仔细分析。

写比读快

第一种情况

第一种情况很简单,如下图,已经告诉了连续写数据的长度(Burst Length),那么只需要考虑这段时间内最多会写进多少个数,以及会读走多少个数,二者只差就是FIFO的深度。

第二种情况

第二种情况和第一种类似,是说如果在连续的两次读和写之间都插入一个周期的延迟,结果会怎样?答案是没有变化,计算过程和第一种情况一样,如果感兴趣,可以下载本文最后的文件。

第三种情况

第三种情况是在读和写之间插入了不同的delay,就算过程其实也比较简单,如下图所示。本质上相当于改变了读写的速度,导致FIFO深度的要求产生变化。

第四种情况

第四种情况分析的是读写时钟的占空比发生改变的时候,对FIFO的深度有何影响?
答案是没有影响。

读比写快

第五种情况

这种情况很简单,FIFO的深度为1就可以了

第六种情况

读写一样快

第七种情况

读写一样快,读写之间没有延迟的话,FIFO的深度为1就够了

第八种情况

另一类问题

第九种情况,如下图,这种问题比前面的要复杂一点,好在题目已经给了Burst Size, 就会简化很多。

需要理解这里的160是怎么来的,题目中说了每100个周期会写80个数据进来,那么就会有20个周期没有数,即IDLE状态,关于WRITE状态和IDLE状态的分布,有很多种可能,如下图所示

我们需要考虑得是最差情况下,即“背靠背”的输入,就是上面的case-4,这种情况下会连续写入160个数据,无疑对于FIFO的深度要求是最高的,计算过程如下:

  • 最差情况下连续写入160个数据,需要160个周期
  • 这160个周期可以读出160*(8/10)=128个数据
  • FIFO的深度为160-128=32

总结

总的来说,对于这样的问题:

写时钟频率wclk,
读时钟频率rclk,
写时钟周期里,每B个时钟周期会有A个数据写入FIFO
读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
则,FIFO的最小深度是?

首先要确定Burst Length,对这种题目,BL一般为2*A,然后深度的计算公式如下
depth=BL−BL∗(X/Y)∗(rclk/wclk)depth = BL - BL * (X/Y) * (rclk/wclk) depth=BL−BL∗(X/Y)∗(rclk/wclk)

参考文档

参考文档

一文搞懂FIFO深度计算相关推荐

  1. 都2021年了,再不学ES6你就out了 —— 一文搞懂ES6

    JS干货分享 -- 一文搞懂ES6 导语:ES6是什么?用来做什么? 1. let 与 const 2. 解构赋值 3. 模板字符串 4. ES6 函数(升级后更爽) 5. Class类 6. Map ...

  2. 一文搞懂RNN(循环神经网络)

    基础篇|一文搞懂RNN(循环神经网络) https://mp.weixin.qq.com/s/va1gmavl2ZESgnM7biORQg 神经网络基础 神经网络可以当做是能够拟合任意函数的黑盒子,只 ...

  3. 一文搞懂 Python 的 import 机制

    一.前言 希望能够让读者一文搞懂 Python 的 import 机制 1.什么是 import 机制? 通常来讲,在一段 Python 代码中去执行引用另一个模块中的代码,就需要使用 Python ...

  4. python语言语句快的标记是什么_一文搞懂Python程序语句

    原标题:一文搞懂Python程序语句 程序流 Python 程序中常用的基本数据类型,包括: 内置的数值数据类型 Tuple 容器类型 String 容器类型 List 容器类型 自然的顺序是从页面或 ...

  5. 一文搞懂 Java 线程中断

    转载自   一文搞懂 Java 线程中断 在之前的一文<如何"优雅"地终止一个线程>中详细说明了 stop 终止线程的坏处及如何优雅地终止线程,那么还有别的可以终止线程 ...

  6. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm

    ***一文搞懂HMM(隐马尔可夫模型)*** 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序, ...

  7. 一文搞懂如何使用Node.js进行TCP网络通信

    摘要: 网络是通信互联的基础,Node.js提供了net.http.dgram等模块,分别用来实现TCP.HTTP.UDP的通信,本文主要对使用Node.js的TCP通信部份进行实践记录. 本文分享自 ...

  8. 【UE·蓝图底层篇】一文搞懂NativeClass、GeneratedClass、BlueprintClass、ParentClass

    本文将对蓝图类UBlueprint的几个UClass成员变量NativeClass.GeneratedClass.BlueprintClass.ParentClass进行比较深入的讲解,看完之后对蓝图 ...

  9. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

最新文章

  1. 零基础怎么学UI设计
  2. 语音信号短时域分析之预处理(三)
  3. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1053:最大数输出
  4. html带图片的进度条,原生javascript上传图片带进度条【实例分享】
  5. mysql Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
  6. 网易云计算机系统有限公司,网易云音乐官方电脑版
  7. [BZOJ4556]-[Tjoi2016Heoi2016]字符串-后缀自动姬+线段树合并+倍增
  8. DOX-HMDN-PEI 阿霉素-二氧化锰-聚乙烯亚胺/PEI-g-PLO(DCA) 聚鸟氨酸-聚乙烯亚胺
  9. FileZilla文件下载的目录
  10. 变分推断(variational inference)学习笔记(1)——概念介绍
  11. python第三方库re库实例之爬取古诗词网上诗歌
  12. 半导体代理商名录---芯片代理商、MLCC代理商
  13. Git是什么?如何用?
  14. 第五章 CSS美化网页元素
  15. 客户机操作系统已禁用cpu_CPU硬件辅助虚拟化技术
  16. Spring @Transactional 与 JTA @Transactional
  17. H5视频播放器开发-基础篇
  18. “巴渝工匠”杯重庆市第十三届高等职业院校学生职业技能竞赛高职组“信息安全管理与评估”赛项任务书
  19. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现
  20. 使用Docker搭建主从数据库(MySQL)

热门文章

  1. 官方yolov5s.pt ,yolo5x.pt下载地址
  2. mysql设置最大使用内存_设置MySQL使用大内存页面
  3. 浅谈EditorConfig、Prettier以及Eslint的使用
  4. 企业微信话术库是什么?如何添加?
  5. 紧随大厂脚步入局海外3A,米哈游造出下一个“原神”难?
  6. 【原创】Python 极验滑块验证
  7. mt4 虚拟服务器,mt4模拟服务器地址
  8. 部门来了个卷王之王,真的让人奔溃
  9. 海思3559编译live555
  10. ftl不存在为真_当两个物体各自以1/2光速运动,朝对方移动,是否可以认为这两个物体在以光速接近?...