想知道​如何计算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资深验证专家,主持验证架构规划和方法学研究,担任过亿门级通信芯片的验证经理角色。在工程领域之外,他在西安电子科技大学和西安交通大学客座讲授芯片验证课程。著有书籍《芯片验证漫游指南》。
评论
  • 新年伊始,又到了对去年做总结,对今年做展望的时刻 不知道你在2024年初立的Flag都实现了吗? 2025年对自己又有什么新的期待呢? 2024年注定是不平凡的一年, 一年里我测评了50余块开发板, 写出了很多科普文章, 从一个小小的工作室成长为科工公司。 展望2025年, 中国香河英茂科工, 会继续深耕于,具身机器人、飞行器、物联网等方面的研发, 我觉得,要向未来学习未来, 未来是什么? 是掌握在孩子们生活中的发现,和精历, 把最好的技术带给孩子,
    丙丁先生 2025-01-11 11:35 108浏览
  • 随着数字化的不断推进,LED显示屏行业对4K、8K等超高清画质的需求日益提升。与此同时,Mini及Micro LED技术的日益成熟,推动了间距小于1.2 Pitch的Mini、Micro LED显示屏的快速发展。这类显示屏不仅画质卓越,而且尺寸适中,通常在110至1000英寸之间,非常适合应用于电影院、监控中心、大型会议、以及电影拍摄等多种室内场景。鉴于室内LED显示屏与用户距离较近,因此对于噪音控制、体积小型化、冗余备份能力及电气安全性的要求尤为严格。为满足这一市场需求,开关电源技术推出了专为
    晶台光耦 2025-01-13 10:42 114浏览
  • PNT、GNSS、GPS均是卫星定位和导航相关领域中的常见缩写词,他们经常会被用到,且在很多情况下会被等同使用或替换使用。我们会把定位导航功能测试叫做PNT性能测试,也会叫做GNSS性能测试。我们会把定位导航终端叫做GNSS模块,也会叫做GPS模块。但是实际上他们之间是有一些重要的区别。伴随着技术发展与越发深入,我们有必要对这三个词汇做以清晰的区分。一、什么是GPS?GPS是Global Positioning System(全球定位系统)的缩写,它是美国建立的全球卫星定位导航系统,是GNSS概
    德思特测试测量 2025-01-13 15:42 70浏览
  • 流量传感器是实现对燃气、废气、生活用水、污水、冷却液、石油等各种流体流量精准计量的关键手段。但随着工业自动化、数字化、智能化与低碳化进程的不断加速,采用传统机械式检测方式的流量传感器已不能满足当代流体计量行业对于测量精度、测量范围、使用寿命与维护成本等方面的精细需求。流量传感器的应用场景(部分)超声波流量传感器,是一种利用超声波技术测量流体流量的新型传感器,其主要通过发射超声波信号并接收反射回来的信号,根据超声波在流体中传播的时间、幅度或相位变化等参数,间接计算流体的流量,具有非侵入式测量、高精
    华普微HOPERF 2025-01-13 14:18 97浏览
  • 在不断发展的电子元件领域,继电器——作为切换电路的关键设备,正在经历前所未有的技术变革。固态继电器(SSR)和机械继电器之间的争论由来已久。然而,从未来发展的角度来看,固态继电器正逐渐占据上风。本文将从耐用性、速度和能效三个方面,全面剖析固态继电器为何更具优势,并探讨其在行业中的应用与发展趋势。1. 耐用性:经久耐用的设计机械继电器:机械继电器依靠物理触点完成电路切换。然而,随着时间的推移,这些触点因电弧、氧化和材料老化而逐渐磨损,导致其使用寿命有限。因此,它们更适合低频或对切换耐久性要求不高的
    腾恩科技-彭工 2025-01-10 16:15 77浏览
  • 随着全球向绿色能源转型的加速,对高效、可靠和环保元件的需求从未如此强烈。在这种背景下,国产固态继电器(SSR)在实现太阳能逆变器、风力涡轮机和储能系统等关键技术方面发挥着关键作用。本文探讨了绿色能源系统背景下中国固态继电器行业的前景,并强调了2025年的前景。 1.对绿色能源解决方案日益增长的需求绿色能源系统依靠先进的电源管理技术来最大限度地提高效率并最大限度地减少损失。固态继电器以其耐用性、快速开关速度和抗机械磨损而闻名,正日益成为传统机电继电器的首选。可再生能源(尤其是太阳能和风能
    克里雅半导体科技 2025-01-10 16:18 89浏览
  • ARMv8-A是ARM公司为满足新需求而重新设计的一个架构,是近20年来ARM架构变动最大的一次。以下是对ARMv8-A的详细介绍: 1. 背景介绍    ARM公司最初并未涉足PC市场,其产品主要针对功耗敏感的移动设备。     随着技术的发展和市场需求的变化,ARM开始扩展到企业设备、服务器等领域,这要求其架构能够支持更大的内存和更复杂的计算任务。 2. 架构特点    ARMv8-A引入了Execution State(执行状
    丙丁先生 2025-01-12 10:30 112浏览
  • 随着通信技术的迅速发展,现代通信设备需要更高效、可靠且紧凑的解决方案来应对日益复杂的系统。中国自主研发和制造的国产接口芯片,正逐渐成为通信设备(从5G基站到工业通信模块)中的重要基石。这些芯片凭借卓越性能、成本效益及灵活性,满足了现代通信基础设施的多样化需求。 1. 接口芯片在通信设备中的关键作用接口芯片作为数据交互的桥梁,是通信设备中不可或缺的核心组件。它们在设备内的各种子系统之间实现无缝数据传输,支持高速数据交换、协议转换和信号调节等功能。无论是5G基站中的数据处理,还是物联网网关
    克里雅半导体科技 2025-01-10 16:20 101浏览
  • 根据Global Info Research(环洋市场咨询)项目团队最新调研,预计2030年全球无人机电池和电源产值达到2834百万美元,2024-2030年期间年复合增长率CAGR为10.1%。 无人机电池是为无人机提供动力并使其飞行的关键。无人机使用的电池类型因无人机的大小和型号而异。一些常见的无人机电池类型包括锂聚合物(LiPo)电池、锂离子电池和镍氢(NiMH)电池。锂聚合物电池是最常用的无人机电池类型,因为其能量密度高、设计轻巧。这些电池以输出功率大、飞行时间长而著称。不过,它们需要
    GIRtina 2025-01-13 10:49 84浏览
  • 01. 什么是过程能力分析?过程能力研究利用生产过程中初始一批产品的数据,预测制造过程是否能够稳定地生产符合规格的产品。可以把它想象成一种预测。通过历史数据的分析,推断未来是否可以依赖该工艺持续生产高质量产品。客户可能会要求将过程能力研究作为生产件批准程序 (PPAP) 的一部分。这是为了确保制造过程能够持续稳定地生产合格的产品。02. 基本概念在定义制造过程时,目标是确保生产的零件符合上下规格限 (USL 和 LSL)。过程能力衡量制造过程能多大程度上稳定地生产符合规格的产品。核心概念很简单:
    优思学院 2025-01-12 15:43 148浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦