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

    文章

    4292

    浏览量

    85782
  • fifo
    +关注

    关注

    3

    文章

    387

    浏览量

    43635
  • 计算
    +关注

    关注

    2

    文章

    448

    浏览量

    38778
收藏 人收藏

    评论

    相关推荐

    FIFO Generator的Xilinx官方手册

    FIFO作为FPGA岗位求职过程中最常被问到的基础知识点,也是项目中最常被使用到的IP,其意义是非常重要的。本文基于对FIFO Generator的Xilinx官方手册的阅读与总结,汇总主要知识点
    的头像 发表于 11-12 10:46 315次阅读
    <b class='flag-5'>FIFO</b> Generator的Xilinx官方手册

    FIFO深度应该怎么计算

    FIFO是FPGA/IC设计中经常使用到的模块,它经常被用在两个模块之间进行数据的缓存,以避免数据在传输过程中丢失。同时FIFO也经常被用在跨时钟域处理中。
    的头像 发表于 10-25 15:20 268次阅读
    <b class='flag-5'>FIFO</b>的<b class='flag-5'>深度</b>应该怎么<b class='flag-5'>计算</b>

    FPGA加速深度学习模型的案例

    计算机主板上,以高速PCIe总线进行数据传输。 利用FPGA的并行计算能力,快速处理大量的卷积计算。 可编程性
    的头像 发表于 10-25 09:22 210次阅读

    Efinity FIFO IP仿真问题 -v1

    Efinity目前不支持联合仿真,只能通过调用源文件仿真。 我们生成一个fifo IP命名为fifo_sim 在Deliverables中保留Testbench的选项。 在IP的生成目录下会有以下
    的头像 发表于 10-21 11:41 965次阅读
    Efinity <b class='flag-5'>FIFO</b> IP仿真问题 -v1

    FPGA做深度学习能走多远?

    的发展前景较为广阔,但也面临一些挑战。以下是一些关于 FPGA 在深度学习中应用前景的观点,仅供参考: • 优势方面: • 高度定制化的计算架构:FPGA 可以根据深度学习算法的特殊需求进行优化,例如
    发表于 09-27 20:53

    基于Python的深度学习人脸识别方法

    基于Python的深度学习人脸识别方法是一个涉及多个技术领域的复杂话题,包括计算机视觉、深度学习、以及图像处理等。在这里,我将概述一个基本的流程,包括数据准备、模型选择、训练过程、以及测试与评估,并附上
    的头像 发表于 07-14 11:52 1249次阅读

    简单认识深度神经网络

    深度神经网络(Deep Neural Networks, DNNs)作为机器学习领域中的一种重要技术,特别是在深度学习领域,已经取得了显著的成就。它们通过模拟人类大脑的处理方式,利用多层神经元结构
    的头像 发表于 07-10 18:23 1002次阅读

    基于深度学习的小目标检测

    计算机视觉领域,目标检测一直是研究的热点和难点之一。特别是在小目标检测方面,由于小目标在图像中所占比例小、特征不明显,使得检测难度显著增加。随着深度学习技术的快速发展,尤其是卷积神经网络(CNN
    的头像 发表于 07-04 17:25 838次阅读

    如何在CYUSB2014-BZXC中以8位模式配置Slave FIFO

    我有关于CYUSB2014-BZXC的问题 我想以 8 位为单位发送和接收数据。 手册中列出的Slave FIFO是16位模式的最小值,所以请教我如何在8位模式下配置Slave FIFO。 我还希望获得有关 8 位模式下信号分配
    发表于 07-04 07:40

    深度学习在计算机视觉领域的应用

    随着人工智能技术的飞速发展,深度学习作为其中的核心技术之一,已经在计算机视觉领域取得了显著的成果。计算机视觉,作为计算机科学的一个重要分支,旨在让
    的头像 发表于 07-01 11:38 764次阅读

    同步FIFO和异步FIFO区别介绍

    1. FIFO简介 FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。 2. 使用场景 数据缓冲:也就是数据写入过快
    的头像 发表于 06-04 14:27 1548次阅读
    同步<b class='flag-5'>FIFO</b>和异步<b class='flag-5'>FIFO</b>区别介绍

    关于同步FIFO和异步FIFO的基础知识总结

    FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。
    的头像 发表于 04-09 14:23 3205次阅读
    关于同步<b class='flag-5'>FIFO</b>和异步<b class='flag-5'>FIFO</b>的基础知识总结

    计算机行业深度报告

    电子发烧友网站提供《计算机行业深度报告.pdf》资料免费下载
    发表于 03-04 10:07 0次下载

    如何清除SPI通信中的TX_FIFO和RX_FIFO

    你好, 如何清除 SPI通信中的 TX_FIFO 和 RX_FIFO?是否有任何 API 可以清除接收数据缓冲区。
    发表于 02-27 07:16

    异步FIFO结构设计

    电子发烧友网站提供《异步FIFO结构设计.pdf》资料免费下载
    发表于 02-06 09:06 0次下载