0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何简单快速地计算FIFO的最小深度

C29F_xilinx_inc 来源:赛灵思 作者:赛灵思 2022-02-26 17:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1、为什么需要计算FIFO的最小深度

因为笔试常考。

开玩笑的。首先我们来想下FIFO有哪些作用?我大概总结下FIFO的几个重要作用:

解决不同时钟域传输的问题

用来缓存一定量的数据

解决位宽不匹配的问题

FIFO最常被用来解决写、读不匹配的问题(时钟、位宽),总结下来,其实FIFO最大的作用就是缓冲。既然是缓冲,那么就要知道这个缓存的空间到底需要多大。接下来的讨论,都建立在满足一次FIFO突发传输的基础上。连续无止境的突发不考虑。比如写时钟100M,读时钟50M,无限制的读写,那么FIFO的深度只能是无穷大了,因为写比读快,FIFO一定永远都不够用。所以在实际运用中,不会存在无限制的对FIFO进行读写。如果这样的话,FIFO就变成了一个“存储器件”,而不是一个“缓存器件”,对于FIFO的这种用法无疑是毫无意义的。

2、实例

2.1、写时钟快、读时钟慢

2.1.1、无间断的写、读操作

条件:

写入时钟频率 fA = 80MHz;读取时钟频率 fB = 50MHz. 一次写入的突发长度120

读写操作不间断

解法:

写入一个数据需要的时间:1/80MHz = 12.5ns;读取一个数据需要的时间:1/50MHz = 20ns

写入120个数据,需要的时间:120 * 12.5ns = 1500ns

在写入全部数据所需的时间(1500ns)内,可以读取出的数据数:1500ns / 20ns = 75

所以一次突发,一共需要写入120数据,在这段时间内可以被读出75数据,剩下的数据就是需要使用FIFO来缓存,所以FIFO的最小深度为120 - 75 = 45

2.1.2、间断的写、读操作

条件:

写入时钟频率 fA = 80MHz;读取时钟频率 fB = 50MHz. 一次写入的突发长度120。

每两次写入操作间隔1个写时钟周期,每两次读取操作间隔3个读时钟周期。

解法:

每两次写入操作间隔1个写时钟周期,等于每两个写时钟周期才写入1个数据,即等价的写入时钟频率 fA'=40MHz,写入一个数据需要的时间:1/40MHz = 25ns

每两次读取操作间隔3个读时钟周期,等于每4个写时钟周期才读取1个数据,即等价的读取时钟频率 fB'=12.5MHz,读取一个数据需要的时间:1/12.5MHz = 80ns

写入120个数据,需要的时间:120 * 25ns = 3000ns

在写入全部数据所需的时间(3000ns)内,可以读取出的数据数:3000ns / 80ns = 37.5 ≈ 37(要向下取整,不然有1个数据会丢)

所以一次突发,一共需要写入120数据,在这段时间内可以被读出37数据,剩下的数据就是需要使用FIFO来缓存,所以FIFO的最小深度为120 - 37 = 83

2.2、写时钟慢、读时钟快

2.2.1、无间断的写、读操作

条件:

写入时钟频率 fA = 30MHz;读取时钟频率 fB = 50MHz. 一次写入的突发长度120

写、读操作无间断

解法:

因为读操作的频率快于写操作的频率,所以数据一旦被写入FIFO后很快就会被读走,所以FIFO的最小深度为1即可

2.2.2、间断的写、读操作

条件:

写入时钟频率 fA = 30MHz;读取时钟频率 fB = 50MHz. 一次写入的突发长度120。

每两次写入操作间隔1个写时钟周期,每两次读取操作间隔3个读时钟周期。

解法:

每两次写入操作间隔1个写时钟周期,等于每两个写时钟周期才写入1个数据,即等价的写入时钟频率 fA'=15MHz,写入一个数据需要的时间:1/15MHz = 66.667ns

每两次读取操作间隔3个读时钟周期,等于每4个写时钟周期才读取1个数据,即等价的读取时钟频率 fB'=12.5MHz,读取一个数据需要的时间:1/12.5MHz = 80ns

写入120个数据,需要的时间:120 * 66.667ns = 8000ns

在写入全部数据所需的时间(8000ns)内,可以读取出的数据数:8000ns / 80ns = 100

所以一次突发,一共需要写入120数据,在这段时间内可以被读出100数据,剩下的数据就是需要使用FIFO来缓存,所以FIFO的最小深度为120 - 100 = 20

2.3、写时钟、读时钟一样快

2.3.1、无间断的写、读操作

条件:

写入时钟频率 fA = 读取时钟频率 fB = 30MHz。一次写入的突发长度120。

写、读操作无间断

解法:

1、假设读、写时钟无位差、则两个时钟同频、同相,是同步信号,故可以直接对接操作,无需FIFO

2、若读、写时钟存在相位差,则被写入的数据在一个时钟周期内会被读走,所以FIFO的最小深度为1即可

2.3.2、间断的写、读操作

条件:

写入时钟频率 fA = 读取时钟频率 fB = 50MHz。一次写入的突发长度120。

每两次写入操作间隔1个时钟周期,每两次读取操作间隔3个时钟周期。

解法:

每两次写入操作间隔1个写时钟周期,等于每两个写时钟周期才写入1个数据,即等价的写入时钟频率 fA'=25MHz,写入一个数据需要的时间:1/25MHz = 40ns

每两次读取操作间隔3个读时钟周期,等于每4个写时钟周期才读取1个数据,即等价的读取时钟频率 fB'=12.5MHz,读取一个数据需要的时间:1/12.5MHz = 80ns

写入120个数据,需要的时间:120 * 40ns = 4800ns

在写入全部数据所需的时间(4800ns)内,可以读取出的数据数:4800ns / 80ns = 60

所以一次突发,一共需要写入120数据,在这段时间内可以被读出60数据,剩下的数据就是需要使用FIFO来缓存,所以FIFO的最小深度为120 - 60 = 60

2.4、特定时间内时间写、读速率固定

条件:

每100个时钟写入80个数据,剩余20个随机值(无效)

每10个时钟读出8个数据

一次写入的突发长度160

解法:

因为每100个时钟内,仅写入80个数据,而这80个数据可能任意分布,所以160个数据的写入可能有以下几种情况:

如何简单快速地计算FIFO的最小深度

可以看到,第4种情况是最极端的:一次性需要写入160数据,时间为160个时钟

160个时钟内,读出的数据是160*8/10 = 128

所以一共需要写入160数据,在这段时间内可以被读出128数据,剩下的数据就是需要使用FIFO来缓存,所以FIFO的最小深度为160 - 128 = 32

3、总结

FIFO是用来缓存的,不是用来存数据的,当写快读慢时,无止境的对FIFO操作是没有意义的(不管FIFO多大,一定都会被写满)

FIFO深度的计算建立在满足一次突发传输的基础上

当读快写满或者读写一样快时,FIFO的深度最多只需要1

当写快读慢时,在一次突发传输时,因为读慢,所以肯定无法全部读走。全部写入的数据量 - 已经被读走的数据量 = 需要缓存到FIFO的数据量,即异步FIFO的最小深度

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    13

    文章

    4940

    浏览量

    90417
  • fifo
    +关注

    关注

    3

    文章

    407

    浏览量

    45977
  • 计算
    +关注

    关注

    2

    文章

    460

    浏览量

    40174
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    快速固化灌封胶如何倍增生产效率?深度解析

    本文深度解析快速固化灌封胶如何打破传统工艺瓶颈。通过UV固化与高效热固化技术,将固化时间缩短至秒级,实现产能3-5倍提升,降低WIP库存并确保品质一致性,助力企业实现精益化与自动化生产升级。
    的头像 发表于 05-26 00:04 68次阅读
    <b class='flag-5'>快速</b>固化灌封胶如何倍增生产效率?<b class='flag-5'>深度</b>解析

    2026深度解析:领先业界的FPGA硬件定制伙伴推荐

    满足特定需求”或“性价比失衡”的痛点,提供从电路设计、PCB Layout到底层驱动与逻辑的深度定制,尤其在工业控制、AIoT边缘计算等场景中,能快速将客户概念转化为稳定可量产的产品。 服务理念
    发表于 05-18 15:05

    UMFT602A/X模块:FIFO总线与USB 3.1的高效桥梁

    UMFT602A/X模块:FIFO总线与USB 3.1的高效桥梁 在电子设计领域,模块的选择对于项目的成功至关重要。今天,我们就来深入了解一下Future Technology Devices
    的头像 发表于 05-15 15:15 118次阅读

    FT2232H Mini模块:USB转串口/FIFO开发的理想之选

    FT2232H Mini模块是FTDI产品线中的一款USB转串口/FIFO开发模块,它采用了FT2232H USB高速双端口桥接芯片,负责处理所有USB信号和协议。该模块非常适合用于快速验证将USB添加到目标设计中的功
    的头像 发表于 05-15 15:05 118次阅读

    UM245R USB - 并行FIFO开发模块:特性、配置与应用解析

    UM245R USB - 并行FIFO开发模块:特性、配置与应用解析 在电子设计领域,USB与并行FIFO接口的开发模块是实现数据高效传输的关键组件。今天,我们就来深入探讨Future
    的头像 发表于 05-15 14:30 126次阅读

    FT245BQ USB FIFO:实现高效数据传输的利器

    FT245BQ USB FIFO:实现高效数据传输的利器 在电子设计领域,数据传输的高效性和稳定性至关重要。FTDI推出的FT245BQ USB FIFO(USB - Parallel)I.C. 为
    的头像 发表于 03-28 13:05 780次阅读

    电子工程师必备:LM3881简单电源排序器深度解析

    电子工程师必备:LM3881简单电源排序器深度解析 作为电子工程师,在设计电源系统时常常会面临诸多挑战,如多个电源上电和下电的时序控制、避免浪涌电流和闩锁问题等。今天,我将为大家详细介绍一款能有
    的头像 发表于 02-26 17:10 666次阅读

    FIFO存储器的种类、IP配置及应用

    FIRST IN FIRST OUT (先入先出)。顾名思义,FIFO是一个数据具有先进先出的存储器。
    的头像 发表于 01-13 15:15 710次阅读
    <b class='flag-5'>FIFO</b>存储器的种类、IP配置及应用

    请问有没有最小化系统程序,编程时可以快速设置?

    请问有没有最小化系统程序,编程时可以快速设置
    发表于 12-23 08:16

    请问UART硬件FIFO深度是多少?如何避免数据溢出?

    UART 硬件 FIFO 深度是多少?如何避免数据溢出?
    发表于 11-21 06:59

    求助,关于串口设备驱动fifo问题

    的一帧有300对字节,最少37字节,DMA模式为循环模式,缓冲buf,自己理解的是DMA的buf就是serial.c中的fifo buf,buf的size设置为2048; 问题: 1、数据接收存在粘包
    发表于 09-12 08:18

    分享---简单快速实现烘烤设备UI界面的方法

    本文分享下,如何简单快速的设计出工业烘烤设备的UI界面方法, 借助 \"墨刀\" 界面原型设计工具,设计烘烤机主界面图片。 使用拓普微 SGTools开发工具,建立工程和页面
    发表于 08-26 11:58

    大模型推理显存和计算量估计方法研究

    随着人工智能技术的飞速发展,深度学习大模型在各个领域得到了广泛应用。然而,大模型的推理过程对显存和计算资源的需求较高,给实际应用带来了挑战。为了解决这一问题,本文将探讨大模型推理显存和计算量的估计
    发表于 07-03 19:43

    降压式电路的缓冲电路原理和快速设计

    摘要 本应用报告首先给出了降压式开关电路(buck)在上管开通瞬间的的一个等效谐振回路模型。根据该模型推导出使得开关振铃最小化的阻容缓冲电路(snubber)的参数计算公式,并结合参数公式给出
    发表于 06-05 14:27

    cy7c68013a异步slave fifo模式,外部mcu无法读写fifo怎么解决?

    cy7c68013a 异步slave fifo 模式,外部mcu无法读写fifo 上位机发送bulk数据,flag标志是对的,SLCS也拉低了,是设置的低有效, 检测到了flag不为空的标志后
    发表于 06-03 10:49