一看就会的FIFO最小深度计算
目录
前言
基础题
附加题1
附加题2
附加题3
总结
前言 计算题一直是笔试中常见的一类题型,上文我们学会了建立时间和保持时间的计算方法,本文来学习一下FIFO的深度计算问题。
FIFO的深度问题是为了解决数据传输中的读写速率不匹配的问题,如果一个FIFO的写入速率比读出速率快,那么没来得及及时读出的数据就需要存储在FIFO中等待被读出。其实这就是一个比较简单的数学问题,可以联想到小学题目中给游泳池一边灌水一边放水(?)。
基础题 一般通常会见到题干是这样的:“一笔数据的个数N是120个,FIFO的写入时钟频率fw为80MHz,FIFO的读出时钟频率fr为50MHz,求FIFO的最小深度。”
其实这道题就是在问一个游泳池需要多大才能一边灌水一边放水,水还不能溢出游泳池。那么我可以直接用数据总量120,除以写入速率80MHz,可以得到一个灌水时间 T = 120 / 80MHz 。那么在这么长时间中,我们能放多少水呢?就是 n = T * 50MHz = 120 / 80MHz * 50MHz = 75 。所以我们至少需要一个 (120 - 75 = 45)这个大的一个游泳池才能满足要求,即就是我们所需要的FIFO最小深度为 45 。这里可以提炼出公式:最小深度 d = N - N / fw * fr 。
有时出题的老师会再绕一个弯,加考一些基础知识。例如:一笔数据是5kbit,FIFO的宽度是1byte,balabala... 在这里用数据总量除以FIFO宽度就是数据个数了。即一笔数据的个数为 5kbit / 8bit = 640 个。
附加题1 因为异步FIFO需要处理异步界面,不能像放水一样那么迅捷,所以出题时可能会提到“当写入 3 (任意数)个数据后才能开始读出”,那么我们的 FIFO 最小深度就必须加上这个缓冲量,即FIFO最小深度为 45 + 3 = 48 。
附加题2 “ 若每隔一个周期写一次数据,每隔三个周期读一次数据,请计算最小深度。”
每隔一个周期写一次数据,意味着每两个周期才写一次数据,意味着我们的写入速率从原先的80MHz降为了40MHz。以此类推,读出速率从50MHz降成了12.5MHz 。这样一来再套用公式 最小深度 d = N - N / fw * fr = 120 - 120 / 40 * 12.5 = 82.5 。即可得FIFO的最小深度为 83 。
从这道题可以看出,读写时钟频率和读写速率是两回事,以此题为蓝本的变种类型题还有很多,但是万变边不离其宗,关于FIFO最小深度的计算我们主要关注读写速率即可。
附加题3 “ 若在10个周期内,只有8个周期写入数据,请计算最小深度。 ”
我们上面的几道题其实都有一个默认的先决条件,那就是每一笔数据之间间隔很远。因为如果我们一直不停的放水,那么只要灌水速率大于放水速率,无论水池大小,最终都会溢出。
但是这道题我们就要打破这个先决条件(由于未知原因),我们现在认为每一笔数据都是紧挨着写入了FIFO中,而且每笔数据在其时间段内写入不规律,如下图所示,红线区域为有效数据。
文章图片
在这种情况下,我们为了FIFO不会溢出数据,计算最小深度时,我们就必须要考虑到写入数据时的最坏情况。
文章图片
根据题干可得,我们在10个周期内会写入8个数据,最坏情况下20个周期会连续写入16个数据,我们需要在写入数据后,在这20个周期的时间内将写入的数据全部读出,才能够保证FIFO不会溢出。
由写入时钟频率80MHz,知一个周期12.5ns,因此留给读出数据的时间就只剩下(20 - 2)* 12.5ns = 225ns。
再看读出时钟频率为50MHz,知读出一个数据花费20ns,那16个数据全部读完需要 16 * 20 = 320ns。因此本题无解。
所以我们只能提高读出速率,我们需要在225ns内读出16个数据,易知每14ns我们就应该读出一个数据,即读出时钟频率为72MHz。
总结 前面几道题都是只考虑这一笔数据,并且数据写入具有周期性,在数据全部写入FIFO后,需要占据多余的一些时间才能将FIFO中的数据全部读出。而这种设计自然不能应用于会有多笔数据随机写入FIFO中的情况,这种情况需要考虑更多的东西。但归根结底,这种类型的题和给游泳池边灌水边放水并无两样。
【一看就会的FIFO最小深度计算】
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 爱就是希望你好好活着
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- 烦恼和幸福
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- 活着就是生命的全部意义
- 其实你就是个普通人
- 是你,情愿
- 有些人真的走着走着就散了
- 有句话忍很久了,女生要求买房怎么就物质了()