FIFO最小深度计算

文章目录

  • 1、FIFO最小深度
  • 2、示例分析

1、FIFO最小深度

  在数据的传输中当读速率慢于写速率时,FIFO便可被用作系统中的缓冲元件或队列,类似于水流经过一个缓冲区,上游水流速度快,下游水流速度慢,部分水就可以被缓存在中间的缓冲区,但是上游与下游的水速差距过大,就会导致流入中间缓存区的水超出了缓存区承受能力导致水的溢出,不能顺利到达下游。在上游水流速度最大,下游水流速度最小的情况下,中间缓冲区不能溢出的大小就是我们关系的问题。

  同理,读写速率差距过大,FIFO深度太小,就会导致一段时间内向FIFO灌输的数据超出了FIFO的承受能力,就会导致数据的丢失,该容量取决于读写数据的速率。所以在写速率最大,读速率最小时,这时正好不导致数据溢出的FIFO的深度就是我们要计算的FIFO最小深度。

FIFO写入速率快,读出速度慢模型:

最简单的写快读慢的实例,FIFO写入一个数据需要1s,读取一个数据需要2s,一共传输6个数据。(下图)

6个数据写入需要时间为:6×1=6 s
6s读取的数据为:6/2=3个
6s FIFO内剩余数据的个数:6-3=3个
6s才能读取3个数据,剩余的数据3个在FIFO中缓冲,在6s的之后的时间才能被缓慢读出。

仔细观察下图(写快读慢),FIFO中最多存在3个数据,该容量就是FIFO的最小深度。
该FIFO的最小深度 = 6 - 3 = 3(如果深度小于3,则会导致数据丢失)。

总结:要确定FIFO的深度,关键在于计算出在突发读写的这段时间内有多少数据没有被读走。也就是说FIFO的最小深度就等于没有被读走的数据个数。


FIFO写入与读取速度相同:
读数据速率比写数据快,因此FIFO只起到变换时钟域的作用,FIFO最下深度为1即可。

2、示例分析


示例一:

写入速率 > 读取速率

A/D采样率为50MHz,读A/D的速率为40MHZ,要不丢失地将10万个采样数据送入FPGA,在A/D和FPGA之间至少加多大容量(深度)的FIFO才可以?

写一个数据所需的时间为: 1/50MHz=0.02×10−6s1/50MHz=0.02×{10^{ - 6}}s1/50MHz=0.02×10−6s

写完所有的数据所需的时间为:100,000×0.02×10−6=0.002s100,000×0.02×{10^{ - 6}} = 0.002s100,000×0.02×10−6=0.002s

读一个数据所需的时间为:1/40MHz=0.025×10−6s1/40MHz=0.025×{10^{ - 6}} s1/40MHz=0.025×10−6s
0.002S内读走的数据为:0.002/(0.025×10−6)=0.08×106=80,0000.002/(0.025×{10^{ - 6}}) = 0.08×{10^{ 6}} = 80,000 0.002/(0.025×10−6)=0.08×106=80,000

则FIFO的最小深度为:100,000−80,000=20,000(0.002s还没有被读走的数据的个数)100,000 - 80,000=20,000(0.002s还没有被读走的数据的个数)100,000−80,000=20,000(0.002s还没有被读走的数据的个数)

(如果读比写慢几拍,则深度比20,000略大)

示例二:

FIFO写入时钟为100MHz,读取时钟为80Mhz,分以下情况分析。


①:传输2000个数据,FIFO最小深度为多少?

100MHz时钟写入一个数据需要的时间为
1/100MHz=10ns1/100MHz=10ns1/100MHz=10ns
写入2000个数据所需的时间为
2000×10=20000ns2000×10=20000ns2000×10=20000ns
80MHz时钟读出一个数据所需的时钟
1/80MHz=12.5ns1/80MHz=12.5ns1/80MHz=12.5ns
20000ns读出的数据个数为
20000ns/12.5ns=160020000ns / 12.5ns=160020000ns/12.5ns=1600
剩余FIFO中没读走的数据个数为
2000−1600=4002000-1600=4002000−1600=400
所以FIFO的最小深度为400。


②:100个时钟写入80个数据,1个时钟读1个数据,求FIFO的最小深度

100MHz时钟写入一个数据需要的时间为
1/100MHz=10ns1/100MHz=10ns1/100MHz=10ns
80MHz时钟读出一个数据所需的时钟
1/80MHz=12.5ns1/80MHz=12.5ns1/80MHz=12.5ns
100个时钟写入80个数据,可以以下理解,100个时钟包含80个有效写时钟,20个空闲时钟。

但是在什么情况下会出现突发写入数据最多呢,在两个100个时钟,前一个100个时钟的后80个时钟在写数据,后100个时钟的前80个数据在写数据,也就是如下所示:

在这种情况下,以100MHz的时钟一次写入了160个数据。

写入160个数据所需的时间为
160×10ns=1600ns160×10ns=1600ns160×10ns=1600ns
1600ns读取的数据个数为
1600ns/12.5ns=1281600ns/12.5ns=1281600ns/12.5ns=128
FIFO内剩余的数据为
160−128=32160-128=32160−128=32
所以FIFO最小深度为32


③:100个时钟写入80个数据,3个时钟读1个数据,求FIFO的最小深度

100MHz时钟写入一个数据需要的时间为
1/100MHz=10ns1/100MHz=10ns1/100MHz=10ns
80MHz时钟读出一个数据所需的时钟
(1/80MHz)×3=12.5×3ns(1/80MHz)×3=12.5×3ns(1/80MHz)×3=12.5×3ns
100个时钟写入80个数据,可以以下理解,100个时钟包含80个有效写时钟,20个空闲时钟。

但是在什么情况下会出现突发写入数据最多呢,在两个100个时钟,前一个100个时钟的后80个时钟在写数据,后100个时钟的前80个数据在写数据,也就是如下所示:

在这种情况下,以100MHz的时钟一次写入了160个数据。

写入160个数据所需的时间为
160×10ns=1600ns160×10ns=1600ns160×10ns=1600ns
1600ns读取的数据个数为
1600ns/(12.5×3)ns=42.661600ns/(12.5×3)ns=42.661600ns/(12.5×3)ns=42.66
FIFO内剩余的数据为
160−42.66=117.33160-42.66=117.33160−42.66=117.33
所以FIFO最小深度为118(FIFO一般设置为2的n次幂(128))。


④:100个时钟写入80个数据,3个时钟读2个数据,求FIFO的最小深度

100MHz时钟写入一个数据需要的时间为
1/100MHz=10ns1/100MHz=10ns1/100MHz=10ns
80MHz时钟读出一个数据所需的时钟
(1/80MHz)×3/2=12.5×3/2ns(1/80MHz)×3/2=12.5×3/2ns(1/80MHz)×3/2=12.5×3/2ns
100个时钟写入80个数据,可以以下理解,100个时钟包含80个有效写时钟,20个空闲时钟。

但是在什么情况下会出现突发写入数据最多呢,在两个100个时钟,前一个100个时钟的后80个时钟在写数据,后100个时钟的前80个数据在写数据,也就是如下所示:


在这种情况下,以100MHz的时钟一次写入了160个数据。

写入160个数据所需的时间为
160×10ns=1600ns160×10ns=1600ns160×10ns=1600ns
1600ns读取的数据个数为
1600ns/(12.5×3/2ns)ns=85.331600ns/(12.5×3/2ns)ns=85.331600ns/(12.5×3/2ns)ns=85.33
FIFO内剩余的数据为
160−42.66=74.66160-42.66=74.66160−42.66=74.66
所以FIFO最小深度为75(FIFO一般设置为2的n次幂(128))。

★★★如有错误,欢迎指导!!!

FIFO最小深度计算相关推荐

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

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

  2. IC/FPGA笔试/面试题分析(九)关于FIFO最小深度计算的问题

    IC/FPGA逻辑设计笔试题中最常见的体型莫过于FIFO最小深度的计算了,以前看到过计算FIFO最小深度,需要代入公式,直到看到这篇文档,才觉得使用逻辑分析的方法来看更能让人理解的更为深刻. 文档把计 ...

  3. 史上最细的FIFO最小深度计算,(大多数笔试题中都会涉及)

    转载地址:https://www.cnblogs.com/dxs959229640/p/8144656.html 作者:星雨夜澈  出处:http://www.cnblogs.com/dxs95922 ...

  4. 异步FIFO最小深度的计算

    异步FIFO通常用于在两个时钟域间传输数据,并且通常情况下,写数据的速率是要比读数据的速率快的,因此,就存在FIFO最小深度的一个问题,以防止在数据传输时发生溢出,造成数据的丢失. 在计算FIFO最小 ...

  5. 计算异步FIFO的最小深度

    计算异步FIFO的最小深度 转:https://blog.csdn.net/qq_26652069/article/details/90720568 目录 1.  异步FIFO最小深度计算 1.1 异 ...

  6. FPGA——FIFO

    FIFO FIFO(First In First Out,即先入先出),是一种数据缓冲器,用来实现数据先入先出的读写方式.FIFO 根据读写时钟是否相同,分为 SCFIFO(single-clock ...

  7. IC/FPGA笔试/面试题分析(八)近期IC/FPGA笔试面试讨论群题目汇总解析

    背景:IC前端设计/FPGA笔(面)试交流群,欢迎同行加入 自从开始邀请同行加入笔试面试交流群之后,目前已经有40多位同行加入,大家踊跃发言,各抒己见,让各自受益匪浅. 今天的这篇博文是将近期部分题目 ...

  8. FPGA通信第一篇--USB2.0

    FPGA通信第一篇–USB2.0 1 初识USB 1.1 简介 USB(UniversalSerialBus)是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据.在USB1.0和USB1.1 ...

  9. 数字IC前端面试问题总结

    本篇主要参考了 1.新芯设计 (3条消息) 新芯设计的博客_CSDN博客-如何成为一名高级数字 IC 设计工程师,数字 IC 技能拓展,基于 SoC 的卷积神经网络车牌识别系统设计领域博主 2.小汪的 ...

最新文章

  1. hive sql 怎么实现循环_python怎么实现循环
  2. java和ssm是什么关系,JAVA --- SSH和SSM的区别
  3. leetcode 42. 接雨水 思考分析(暴力、动态规划、双指针、单调栈)
  4. Django获取当前页面的URL——小记
  5. postgres 命令行建数据库表_PostgreSQL学习笔记(1)之模板数据库
  6. uniapp使用阿里图标库
  7. 【C语言】 文件指针编程应用
  8. 如何像专业人士一样使用 Google 学术搜索
  9. 萧红_拔剑-浆糊的传说_新浪博客
  10. RxJava 沉思录(一):你认为 RxJava 真的好用吗?
  11. windows pip install 报错
  12. LeetCode K站中转内最便宜的航班(回溯法、动态规划)
  13. 【报告分享】2022快手磁力金牛家居百货行业营销洞察报告-磁力引擎(附下载)
  14. CF 868 div2 A—C
  15. Python 轻量化简繁转换
  16. DL4J中文文档/分布式深度学习/操作指南
  17. 软件评审之“瞎胡闹”
  18. 支付宝无线商户签约指南
  19. 装纯净版win10系统在windows上装linux系统【完整详细版】
  20. ifconfig eth0 up/down与ifup/ifdown eth0的区别

热门文章

  1. 安卓机更新系统会卡吗_安卓手机系统“越更新越卡”?或许和这4个原因有关,早看早知道...
  2. python 1014 福尔摩斯的约会 (20 分)
  3. 一个追风筝的人,追寻着什么
  4. 从普朗克黑体辐射定律到真正的黑
  5. 使用IBM InfoSphere Guardium Data Redaction在保护隐私的同时共享信息
  6. STM32F030使用硬件SPI与字库芯片通信
  7. 除了Xshell,还有哪些趁手的Linux终端工具
  8. 0环权限高还是3环_环0到环3
  9. SwipeRefreshLayout+CoordinatorLayout+AppBarLayout+TabLayout+ViewPager+RecyclerView 嵌套,最后一项显示全
  10. Ai机器人可以入国籍、可以当主播,当然也可以当电销精英