想知道​如何计算FIFO深度吗?

路科验证 2021-08-24 12:13

以下文章来源于瓜大三哥 ,作者米果不回来


数字IC设计中我们经常会遇到这种场景,工作在不同时钟域的两个模块,它们之间需要进行数据传递,为了避免数据丢失,我们会使用到FIFO。当读数据的速率小于写数据的速率时,我们就不得不将那些还没有被读走的数据缓存下来,那么我们需要开多大的空间去缓存这些数据呢?缓存开大了会浪费资源,开小了会丢失数据,如何去计算最小FIFO深度是我们讨论的重点。

数据突发长度(burst length)

在讲解如何去计算FIFO深度之前,我们来理解一个术语burst length,如果你已经了解了可以跳过。要理解数据的突发长度,首先我们来考虑一种场景,假如模块A不间断的往FIFO中写数据,模块B同样不间断的从FIFO中读数据,不同的是模块A写数据的时钟频率要大于模块B读数据的时钟频率,那么在一段时间内总是有一些数据没来得及被读走,如果系统一直在工作,那么那些没有被读走的数据会越累积越多,那么FIFO的深度需要是无穷大的,因此只有在突发数据传输过程中讨论FIFO深度才是有意义的。也就是说我们一次传递一包数据完成后再去传递下一包数据,我们把一段时间内传递的数据个数称为burst length。在维基百科中,burst transmission是这样解释的:In telecommunication, a burst transmission or data burst is the broadcast of a relatively high-bandwidth transmission over a short period。
我们知道burst length过后,通过上述讨论我们大概就知道FIFO的最小深度与burst rate, burst size, read and write frequency等因素有关。要确定FIFO的深度,关键在于计算出在突发读写这段时间内有多少个数据没有被读走。也就是说FIFO的最小深度就等于没有被读走的数据个数。
其实在一些ASIC论坛中,很多前辈就给出过FIFO深度计算公式,但是当时看到公式时不是太理解它是怎么来的,为了让大家更好的理解FIFO size的计算过程,这里在不套用计算公式的前提下来逐步计算不同场景FIFO深度,当然在本文的最后会给出FIFO深度的计算公式,只想套用公式的同志可以直接移步到本文末尾。

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

场景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

场景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略大。

场景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

场景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

场景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即可

场景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

场景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

场景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

场景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


总结

从上面分析来看,求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)•注意保留一些余量


作者:星雨夜澈

出处:http://www.cnblogs.com/dxs959229640/

声明:欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

路科验证 专注于数字芯片验证的系统思想和前沿工程领域。路桑是Intel资深验证专家,主持验证架构规划和方法学研究,担任过亿门级通信芯片的验证经理角色。在工程领域之外,他在西安电子科技大学和西安交通大学客座讲授芯片验证课程。著有书籍《芯片验证漫游指南》。
评论
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 104浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 69浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 80浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 163浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 65浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 63浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 58浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 60浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 75浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 104浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 95浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦