首页 > 其他分享 >FIFO深度计算

FIFO深度计算

时间:2023-06-23 20:34:00浏览次数:45  
标签:50MHz FIFO 突发 计算 深度 时钟 数据 cycle

个人导航网站:yun916831.github.io

 

1.1  数据突发长度(burst length)

要理解数据的突发长度,首先我们来考虑一种场景,假如模块A不间断的往FIFO中写数据,模块B同样不间断的从FIFO中读数据,不同的是模块A写数据的时钟频率要大于模块B读数据的时钟频率,那么在一段时间内总是有一些数据没来得及被读走,如果系统一直在工作,那么那些没有被读走的数据会越累积越多,那么FIFO的深度需要是无穷大的,因此只有在突发数据传输过程中讨论FIFO深度才是有意义的。也就是说我们一次传递一包数据完成后再去传递下一包数据,我们把一段时间内传递的数据个数称为burst length

在讨论之前我们假定模块A向FIFO写数据的时钟频率为fa,模块B从FIFO读数据的时钟频率为fb。

1.2  场景1:fa>fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=80MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

在突发传输过程中,数据都是连续读写的

那么:

写一个数据所需要的时间 = 1/80MHz = 12.5ns

突发传输中,写完所有数据所需要的时间 = 120*12.5ns = 1500ns

读一个数据所需要的时间 = 1/50MHz = 20ns

所以写完所有的突发传输数据需要花费1500ns

在1500ns内能够读走的数据个数 = 1500ns/20ns = 75

所以在1500ns内还没有被读走的数据个数 = 120-75 = 45

因此FIFO的最小深度为45

1.3  场景2:fa>fb with two clock cycle delay between two successive read and write

场景2在场景1的基础上增加了一个假设,即读比写慢两拍。这种假设是真正存在的,在异步FIFO设计中,我们需要去判断FIFO的空满来保证逻辑的正确性,判断空满标志需要去比较读写指针,而读指针与写指针处在不同的时钟域中,我们需要采用格雷码和两级同步寄存器去降低亚稳态的概率,而两级同步必然会导致空满标志位的判断至少延迟2个cycle。对于空标志位来说,将写指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会写入新的数据,因此同步后的写指针一定小于或等于(当且仅有同步时间内没有新数据写入的情况下才会等于)当前的写指针,所以此时判断不一定是真空;同理,对于满标志位来说,将读指针同步到读时钟域至少需要花费2个时钟,而在同步这段时间内有可能还会读出新的数据,因此同步后的读指针一定小于或等于当前读指针,所以此时判断并不一定是真满。

通过上述讨论可以知道场景2的FIFO最小深度应该比场景1的FIFO最小深度45略大。

1.4  场景3:fa > fb with idle cycles in both write and read

假设:

写数据时钟频率fa=80MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

每隔1个cycle写一次

每隔3个cycle读一次

那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据

每隔3个cycle读一次,意味着4个cycle才读一个数据

写一个数据所需要的时间 = 2*1/80MHz = 25ns

突发传输中,写完所有数据所需要的时间 = 120*25ns = 3000ns

读一个数据所需要的时间 = 4*1/50MHz = 80ns

所以写完所有的突发传输数据需要花费3000ns

在3000ns内能够读走的数据个数 = 3000ns/80ns = 37.5

所以在3000ns内还没有被读走的数据个数 = 120-37.5 = 82.5

因此FIFO的最小深度为83

1.5  场景4:fa > fb with duty cycles given for wr_enb and rd_enb.

假设:

写数据时钟频率fa=80MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

写使能信号占整个burst时间比重为1/2

读使能信号占整个burst时间比重为1/4

那么:

场景4与场景3描述不一致,但情形是一致的,因此FIFO的最小深度也为83

1.6  场景5:fa < fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=40MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

在突发传输过程中,数据都是连续读写的

那么:

由于读数据比写数据要快,因此FIFO只起到过时钟域的作用,FIFO的最小深度为1即可

1.7  场景6:fa < fb with idle cycles in both write and read

假设:

写数据时钟频率fa=40MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

每隔1个cycle写一次

每隔3个cycle读一次

那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据

每隔3个cycle读一次,意味着4个cycle才读一个数据

写一个数据所需要的时间 = 2*1/40MHz = 50ns

突发传输中,写完所有数据所需要的时间 = 120*50ns = 6000ns

读一个数据所需要的时间 = 4*1/50MHz = 80ns

所以写完所有的突发传输数据需要花费6000ns

在6000ns内能够读走的数据个数 = 6000ns/80ns = 75

所以在6000ns内还没有被读走的数据个数 = 120-75 = 45

因此FIFO的最小深度为45

1.8  场景7:fa = fb with no idle cycles in both write and read

假设:

写数据时钟频率fa=50MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

那么:

如果读写时钟同源并且无相位差,那么可以不需要FIFO;否则FIFO的最小深度为1

1.9  场景8:fa = fb with idle cycles in both write and read

假设:

写数据时钟频率fa=50MHz

读数据时钟频率fb=50MHz

突发长度= number of data to be transferred = 120

每隔1个cycle写一次

每隔3个cycle读一次

那么:

每隔1个cycle写一次,意味着2个cycle才写一个数据

每隔3个cycle读一次,意味着4个cycle才读一个数据

写一个数据所需要的时间 = 2*1/50MHz = 40ns

突发传输中,写完所有数据所需要的时间 = 120*40ns = 4800ns

读一个数据所需要的时间 = 4*1/50MHz = 80ns

所以写完所有的突发传输数据需要花费4800ns

在4800ns内能够读走的数据个数 = 4800ns/80ns = 60

所以在4800ns内还没有被读走的数据个数 = 120-60 = 60

因此FIFO的最小深度为60

1.10    场景9:Data rates are given,read and write random(important!!!)

在前面几种场景中,我们给的条件都是每隔几个时钟读写一次,这种周期性读写在实际中很常见。但是在工程设计中还存在这样一种情形,只给出数据在一段时间内的读写速率,怎么读写完全随机,这种情况我们需要考虑最坏的一种情况避免数据丢失。在最坏的情形中,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率。

假设:

写数据时钟频率fa=80MHz

读数据时钟频率fb=50MHz

在写时钟周期内,每100个周期就有40个数据写入FIFO

在读时钟周期内,每10个周期可以有8个数据读出FIFO

那么:

首先这里没有给出数据的突发长度,从假设中可以得出每100个周期就有40个数据写入FIFO,这里可能就有人会说突发长度就是40个数据,其实不是这样的,因为数据是随机写入FIFO的,我们需要考虑做坏的情形,即写速率最大的情形,只有如下图背靠背的情形才是写速率最高的情形,burst length为80

 

注意:这里需要验证一下是否有解,即写入burst数据时间必须大于等于读出burst数据时间,不然数据就会越累积越多,使得FIFO的深度必须为无穷大。首先写入80个数据需要的时间 = 1/80MHz*(80*100/40)=2500ns,读出80个数据需要的时间 = 1/50MHz*(80*10/8)=2000ns,由于写入burst数据时间大于对出burst数据时间,因此有解。

下面来计算FIFO最小深度,连续写入80个数据最快所需要时间 = 1/80MHz * 80 = 1000ns

从FIFO中读出一个数据至少所需时间 = (1/50MHz) * (10/8) = 25ns

那么在1000ns内能够读出的数据 = 1000ns/25ns = 40

在1000ns内没有读出的数据 = 80 - 40 = 40

因此FIFO的最小深度为40

1.11    总结

从上面分析来看,求FIFO的最小深度主要有以下要点

在求解之前需要验证一下在允许的最大时间长度内写入的数据量是否等于读出的数据量,保证有解;

求FIFO深度需要考虑最坏的情形,读写的速率应该相差最大,也就是说需要找出最大的写速率和最小的读速率;

不管什么场景,要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走;

由于FIFO空满标志位的判断延迟,在实际应用中需要预留一些余量。

下面我们来推导一下FIFO深度的求解公式,假设:

写时钟频率为fwr

读时钟频率为frd

在写时钟周期内,每m个周期内就有n个数据写入FIFO

在读时钟周期内,每x个周期内可以有y个数据读出FIFO

那么:

首先必须满足(1/fwr)*(m/n) ≥ (1/frd)*(x/y)

”背靠背“的情形下是FIFO读写的最坏情形,burst长度 B = 2*n

写完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)

注意保留一些余量

参考:https://zhuanlan.zhihu.com/p/166177480

标签:50MHz,FIFO,突发,计算,深度,时钟,数据,cycle
From: https://www.cnblogs.com/superego-zhang/p/17500142.html

相关文章

  • 基于深度学习的文本分类6大算法-原理、结构、论文、源码打包分享
    导读:文本分类是NLP领域一项基础工作,在工业界拥有大量且丰富的应用场景。传统的文本分类需要依赖很多词法、句法相关的human-extractedfeature,自2012年深度学习技术快速发展之后,尤其是循环神经网络RNN、卷积神经网络CNN在NLP领域逐渐获得广泛应用,使得传统的文本分类任务变得更加容......
  • 深度学习计算机视觉相关代码可复现论文整理分享
    因此,作为【论文复现项目】的补充,本项目的宗旨也是让世界上没有难读的论文。目录内容截图......
  • 最新《动手学习深度学习》配套课程视频、笔记、ppt等资源整理分享
        《动手学习深度学习》是李沐老师(AWS资深首席科学家,美国卡内基梅隆大学计算机系博士)主讲的一系列深度学习视频。本项目收集了我们在寒假期间学习《动手学习深度学习》过程中详细的markdown笔记和相关的jupyter代码。赠人玫瑰,手留余香,我们将所有的markdown笔记开源,希望在自......
  • 深度学习算法相关岗-校招、社招、实习-面试知识要点及答案分享
        本文主要整理了深度学习相关算法面试中经常问到的一些核心概念,并给出了细致的解答,分享给大家。互联算法工程师面试必读书籍推荐百面深度学习算法工程师带你去面试作者:诸葛越江云胜当当购买感受野    后一层神经元在前一层神经元的感受空间,如下图所示:    注意:小卷......
  • 2021年3月最新-李沐-动手学深度学习第二版-中、英文版
        阿斯顿·张、李沐联合编写的,面向中文读者的能运行、可讨论的深度学习教科书《动手学深度学习》又更新了。 【关注第二版更新】 英文版前八章已翻译至中文版第二版,并含多种深度学习框架的实现。英文版还新增了注意力机制、BERT、 自然语言推理、 推荐系统和深度学习的数......
  • 2021ML实战新-深度学习速成2021
    课程描述    该课程为深度学习提供了实用的入门知识,包括理论动机以及如何在实践中进行实践。作为课程的一部分,我们将介绍多层感知器,反向传播,自动微分和随机梯度下降。此外,我们介绍了用于图像处理的卷积网络,从简单的LeNet到更新的体系结构(例如ResNet),以提供高度精确的模型。其次,......
  • 李宏毅最新-深度学习/机器学习课程2021-课程视频及ppt
    课程描述    由国立台湾大学李宏毅老师主讲的纯中文版,2021年机器学习(深度学习)开课了,课程相关的部分资源已经release出来了,今年课程新增了很多新的前沿的内容,分享给大家。  课程大纲课程主页https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.html 课程视频截图 ......
  • 2021年最新-深度学习必备基础理论
    本书介绍    本简书主要所包含两个部分的内容。   1.是为文献中出现的内容提供简化的证明,希望将困难的事情简化为适合一堂课的内容。        2.主要关注的是通过标准(典型的ReLU)前馈网络实现IID数据二进制分类的低测试误差。               ......
  • 文本识别分类系统python,基于深度学习的CNN卷积神经网络算法
    一、介绍文本分类系统,使用Python作为主要开发语言,通过TensorFlow搭建CNN卷积神经网络对十余种不同种类的文本数据集进行训练,最后得到一个h5格式的本地模型文件,然后采用Django开发网页界面,实现用户在界面中输入一段文字,识别其所属的文本种类。在我们的日常生活和工作中,文本数据无......
  • 解放计算力:使用并行处理提升python for循环速度
    Python是一门功能强大的编程语言,但在处理大规模数据或复杂计算任务时,性能可能成为一个瓶颈。幸运的是,Python提供了多种方法来提升性能,其中之一是利用并行处理来加速循环操作。本文将介绍如何使用并行处理技术来优化for循环,从而提高Python程序的执行速度。我们将讨论并行处......