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

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

3天内不再提示

FIFO的深度应该怎么计算

FPGA开源工坊 来源:FPGA开源工坊 2024-10-25 15:20 次阅读

本文首发于公众号 FPGA开源工坊

FIFO是FPGA/IC设计中经常使用到的模块,它经常被用在两个模块之间进行数据的缓存,以避免数据在传输过程中丢失。同时FIFO也经常被用在跨时钟域处理中。

FIFO深度的计算是FPGA和IC笔面试中经常被问到的一个问题,在这篇文章里面我们就来讨论一下FIFO的深度应该怎么计算。

FIFO的深度如果设置的小了就会有丢数的风险,设置的大了会有资源的浪费。

在讨论如何计算FIFO的深度之前,应该先明白一个概念,那就是突发传输 ,也就是burst。

突发传输

为什么要明确突发传输的概念呢?我们假设有以下几种开发场景。

场景一:读比写快

假如说一个FIFO在不间断的向里面写入数据和读出数据,并且向FIFO里面写数据的速度比从FIFO里面读数据的速度要慢,那么是不是这个FIFO永远都不会被写满了。

场景二:写比读快

假如说一个FIFO在不间断的向里面写入数据和读出数据,并且写入的速度比读出的速度快,那么是不是意味着这个FIFO的深度无论设置多少都终将会被写满。

所以不间断在对FIFO不间断的进行读写的情形中讨论FIFO深度是没有意义的。

而我们要讨论的FIFO深度其实是在突发传输中才是有意义的。

突发传输:就是说一个又一个的数据包,每一个数据包之间是有间隙的。

每一个数据包的长度叫做burst length 突发长度

FIFO的最小深度就与突发长度,读写速率有关系。

计算出来FIFO的深度关键就在于计算出来在读写突发的这段时间内,有多少数据没有被读走,这个数据的多少就是FIFO的最小深度。

计算公式

FIFO的深度可以用下面的公式计算出来

可以看到在上述公式里面的关键就是确定burst length。

下面就通过几个例子来说明burst length的计算。

例子

例一

某大厂的笔试题:

设计同步FIFO,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,FIFO的深度至少为:

A: 16

B: 32

C: 64

D: 72

首先从题目中知道同步FIFO,所以rd_clk和wr_clk是一样的。

第二每10个cycle中可以读出8个数据,那么rd_rate就是8/10也就是0.8

现在关键就是burst length的计算了。

每100个cycle可以写入80个数据,那么是不是意味着这80个数据可以在100个cycle的周期的任意时间写进FIFO里面。那么什么时候是连续写入数据最多的极端情况呢,这个极端情况就是burst length最大的时候。

这个极端情况就是在连续的200个cycle中,是不是可以写入160个数据,那么这160个数据背靠背的连续写入就是极端情况了。

如下图所示:

80d0dd66-9052-11ef-a511-92fbcf53809c.png

在连续两百个周期内,前20个周期空闲,中间160个时钟向FIFO写入数据,最后20个时钟再次空闲。

所以burst length就是160

所以FIFO的最小深度为

例二

有一个FIFO设计,输入时钟100MHz,输出时钟80MHz,输入数据模式是固定的,其中1000个时钟中有800个时钟传输连续数据,另外200个空闲,请问为了避免FIFO下溢/上溢,最小深度是多少

A: 320

B: 80

C: 160

D: 200

根据题意wr_clk是100, rd_clk是800。

因为输入数据的模式是固定的,所以不用考虑背靠背的情况,所以burst length是800

题目中没有说明在输出的时候读使能是否会拉低,所以我们认为FIFO一直在输出,也就是rd_rate是1

所以FIFO的深度为:

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

    关注

    1629

    文章

    21729

    浏览量

    602977
  • IC设计
    +关注

    关注

    38

    文章

    1295

    浏览量

    103918
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43647
  • 时钟域
    +关注

    关注

    0

    文章

    52

    浏览量

    9535

原文标题:FPGA|IC笔面试--FIFO深度计算

文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA学习-总结fifo设计中深度H的计算

    对于fifo来说,H的设置至关重要。既要保证功能性,不溢出丢数,也要保证性能流水。深度设置过小会影响功能,过大又浪费资源。因此,总结下fifo设计中深度H的
    发表于 08-29 11:19 1470次阅读

    谈一谈FIFO深度

    最近加的群里面有些萌新在进行讨论**FIFO深度**的时候,觉得 **FIFO深度计算比较难以理解** 。所
    的头像 发表于 11-28 16:19 1286次阅读
    谈一谈<b class='flag-5'>FIFO</b>的<b class='flag-5'>深度</b>

    求助,FPGA fifo深度不够怎么办?

    图像压缩之后的数据存入fifo,然后经过nrf2401发送。。但是由于图片尺寸比较大,导致fifo深度不够,受限于FPGA芯片尺寸的限制,fifo
    发表于 05-22 14:34

    FIFO深度怎么设计

    FIFO先进深度?我也想知道我的输入是否改变为3个数据单元(每个16位)的突发,应该是什么深度?谢谢,阿伦以上来自于谷歌翻译以下为原文Hi All, I have a design
    发表于 01-10 10:45

    如何计算异步FIFO深度和单独的时钟源

    fifo不为空时,用rd clk = 50 MHz连续读出数据。从模拟开始,在5次写入后,fifo空置为空。如何正确计算深度?最初,我的深度
    发表于 04-09 06:25

    如何计算Async Fifo Depth

    嗨,我想计算异步fifo深度,但我很困惑如何计算它。 fifo参数如下:写Clk Freq = 60 MHz。读取Clk Freq = 1
    发表于 04-17 08:25

    什么是fifo深度

    - 恒定8 MB /秒(一旦开始读取,您将需要保持数据速率,不允许上溢/下溢)什么应该fifo深度?谢谢,以上来自于谷歌翻译以下为原文Hi, I have a design problem where
    发表于 04-26 10:56

    谈谈FIFO阈值的阈值设置及深度计算

    `立即学习—60天FPGA工程师入门就业项目实战特训营(3月16日开班) 谈谈FIFO阈值的阈值设置及深度计算1.什么是FIFO2.什么情况下使用FIFO3.什么
    发表于 02-19 21:09

    【教程】“最恶劣”的FIFO深度计算

    FIFO内缓存数据最多。计算此时写入数据-该阶段读出数据即为FIFO的最小深度。   Nwr = 120x = Nwr - Nrd = 120 - 96 = 24.二.为保证数据连续输
    发表于 02-22 20:37

    LabVIEW FPGA模块实现FIFO深度设定

    为了解决基于LabVIEWFPGA模块的DMAFIFO深度设定不当带来的数据不连续问题,结合LabVIEWFPGA的编程特点和DMA FIFO的工作原理,提出了一种设定 FIFO 深度
    发表于 09-26 13:45 7363次阅读
    LabVIEW FPGA模块实现<b class='flag-5'>FIFO</b><b class='flag-5'>深度</b>设定

    基于LabVIEW FPGA模块程序设计特点的FIFO深度设定详解

    为了解决基于LabVIEWFPGA模块的DMAFIFO深度设定不当带来的数据不连续问题,结合LabVIEWFPGA的编程特点和DMA FIFO的工作原理,提出了一种设定FIFO深度的方
    发表于 01-04 14:25 4703次阅读
    基于LabVIEW FPGA模块程序设计特点的<b class='flag-5'>FIFO</b><b class='flag-5'>深度</b>设定详解

    FIFO最小深度计算所有情况

    由于平时我们工作中,FIFO都是直接调用IP核,对于FIFO深度选择并没有很在意,而在笔试面试过程中,经常被问及的问题之一就是如何计算FIFO
    的头像 发表于 05-11 14:37 2191次阅读
    <b class='flag-5'>FIFO</b>最小<b class='flag-5'>深度计算</b>所有情况

    你们知道FIFO最小深度计算

    FIFO 最小深度计算 例子 - 1:f_wr 》 f_rd,连续读写 写时钟80MHz。 读时钟50MHz。 Burst_Len = 120,也就是要求至少安全写入120个数据。 连续写入和连续
    的头像 发表于 09-10 09:23 2021次阅读
    你们知道<b class='flag-5'>FIFO</b>最小<b class='flag-5'>深度计算</b>吗

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

    的基础上。连续无止境的突发不考虑。比如写时钟100M,读时钟50M,无限制的读写,那么FIFO深度只能是无穷大了,因为写比读快,FIFO一定永远都不够用。所以在实际运用中,不会存在无限制的对
    的头像 发表于 02-26 17:41 3535次阅读
    如何简单快速地<b class='flag-5'>计算</b><b class='flag-5'>FIFO</b>的最小<b class='flag-5'>深度</b>

    FIFO最小深度计算的方法

    由于平时我们工作中,FIFO都是直接调用IP核,对于FIFO深度选择并没有很在意,而在笔试面试过程中,经常被问及的问题之一就是如何计算FIFO
    的头像 发表于 07-03 17:25 2726次阅读