首页 > 其他分享 >FIFO深度计算

FIFO深度计算

时间:2022-12-26 18:13:57浏览次数:60  
标签:burst FIFO 120 length 计算 深度 80 数据 时钟

FIFO深度计算公式:
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk

burst_length :突发数据个数
X,Y:读时钟周期里,每Y个时钟周期会有X个数据读出FIFO
r_clk:读时钟
w_clk:写时钟

1,同步FIFO

对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为?
答:
每100个cycle可以写入80个数据,我们考虑最坏的情况,背靠背模式,空20个时钟,剩下80个时钟写80个数据,再用80个时钟写80个数据,空20个时钟,这样的结果就是连着写了160个数据,共用了200个时钟,突发数据个数是160
所以
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
同步FIFO,读写时钟相同,r_clk=w_clk;
fifo_depth = 160 - 160 *(8/10) * 1 = 160-128=32

2,异步FIFO

wclk=200mhz,100个wclk里写入40个数据,rclk=100mhz,10个rclk里读出8个数据。那么fifo深度为?
答:我们考虑最坏的情况,背靠背模式,即空60个wclk,剩下40个wclk写入有40个数据,接着40个wclk写40个数据,空60个wclk,那么突发数据个数为40+40=80
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 80 - 80 *(8/10) * 100/200 = 80-32=48

FIFO的深度一般是2的整数次幂,要符合格雷码的编码转换规则,因此我们深度一般不选择48,而是选择比它大的2的整数次幂的数,比如64或者128

在这里插入图片描述
答:可以看出,B的时钟要大于A的时钟,如果B为读时钟,那么A为写时钟,那就是读时钟大于写时钟,读的比写的快,那么不会溢出了,所以B应该是写时钟,A为读时钟
假设读clkA=100MHZ,写clkB=400MHZ, 则周期Ta=10ns ,Tb=2.5ns ,则 enB=10100=1000ns,enB的占空比为25%,即周期的25%为高电平,即为写数据的时钟时长,T_enB=100025%=250ns,T_enB/Tb=250/2.5 = 100个数据,同时在这250ns时间里面,读书数据的个数为250/Ta=250/10=25,
所以FIFO深度为100-25=75

下面举几个例子:

第一种情况:

写时钟快于读时钟写和读的过程中没有空闲周期,也即在突发(burst)过程中,读和写都在各自的时钟域内连续进行。
在这里插入图片描述

答:
第一种方法:采取公式计算
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 120 - 120 * 1 * 50/80 = 120 - 75 = 45
第二种方法:分析
写时钟周期Tw = 1000/80 = 12.5ns
读时钟周期Tr = 1000/50 = 20ns
突发长度是120,写120个数据,需要的写时间为120*12.5 = 1500ns
在1500ns的时间,读了数据个数为1500/20 = 75
所以120-75 = 45

第二种情况

写时钟频率大于读时钟频率,但在读写的过程中存在空闲周期。
在这里插入图片描述
答:
两个写数据之间空一个时钟,即2个时钟写1个数据
两个读数据之间空3个时钟,即4个时钟读1个数据
第一种方法:采取公式计算
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 120 - 120 * 1/4 * 50/80 = 120 - 18.75 =
第二种方法:分析
写时钟周期Tw = 1000/80 = 12.5ns
读时钟周期Tr = 1000/50 = 20ns
突发长度是120,写120个数据,需要240个时钟,需要的写时间为24012.5 = 3000ns
在3000ns的时间,读了数据个数为3000/(20
4) = 37.5
最后0.5是不完整数据,取整为37,
所以120-37 = 83

第三种情况

写时钟慢于读时钟,且读写过程中没有空闲周期;
在这里插入图片描述

答: 读写没有空闲,而且写时钟慢于读时钟,所以应该是永远不会写满,即不会溢出,fifo的深度为1即可

第四种情况

写时钟频率小于读时钟频率,但读写过程中存在空闲周期;
在这里插入图片描述
答:
两个写数据之间空一个时钟,即2个时钟写1个数据
两个读数据之间空3个时钟,即4个时钟读1个数据
第一种方法:采取公式计算
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 120 - 120 * 1/4 * 50/30 = 120 - 50 = 70
第二种方法:分析
写时钟周期Tw = 1000/30
读时钟周期Tr = 1000/50 = 20ns
突发长度是120,写120个数据,需要240个时钟,需要的写时间为2401000/30= 8000ns
在8000ns的时间,读了数据个数为8000/(20
4) = 100
所以120-100 = 20

第五种情况

读写时钟速率相同,且无空闲时钟
在这里插入图片描述
答:
第一种方法:采取公式计算
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 120 - 120 * 1/* 1 = 0
如果读写时钟之间没有相位差,则不需要FIFO就可以进行读写呀;
如果二者存在相位差,只需要FIFO的深度为1即可。

第六种情况

读写时钟频率一致,但在读写过程中存在空闲周期。
在这里插入图片描述
答:
两个写数据之间空一个时钟,即2个时钟写1个数据
两个读数据之间空3个时钟,即4个时钟读1个数据
第一种方法:采取公式计算
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
fifo_depth = 120 - 120 * 1/4 * 50/50 = 120 - 30 = 90
第二种方法:分析
写时钟周期Tw = 1000/50=20ns
读时钟周期Tr = 1000/50 = 20ns
突发长度是120,写120个数据,需要240个时钟,需要的写时间为24020= 4800ns
在4800ns的时间,读了数据个数为4800/(20
4) =60
所以120-60 = 60

第七种情况

特定条件下,最坏情况分析FIFO最小深度;
在这里插入图片描述
答:
100个时钟周期写80个数据,考虑最坏的情况,即背靠背的方式,空闲20个时钟,剩余80个时钟写80个数据,接着80个时钟写80个数据,空20个时钟,最后的结果就是用160个时钟要写160个数据,即突发长度是160,
每10个时钟读8个数据,160个时钟读了128个数据,
FIFO的深度=160-128 = 32

参考文献1
https://blog.csdn.net/Reborn_Lee/article/details/100127937
参考文献2
https://hardwaregeeksblog.files.wordpress.com/2016/12/fifodepthcalculationmadeeasy2.pdf

标签:burst,FIFO,120,length,计算,深度,80,数据,时钟
From: https://www.cnblogs.com/amxiang/p/17006367.html

相关文章

  • 如何在Java里进行数学公式计算?
    我们在平常开发的时候,难免会遇到涉及数学公式计算的业务场景。例如给一个公式,(1+P)*T=?,其中P和T是两个变量,当T=11、P=110时,这个公式计算的结果是多少呢?下面给出具体实现的......
  • 【计算机视觉(CV)】sklearn之分类算法与手写数字识别
    【计算机视觉(CV)】sklearn之分类算法与手写数字识别作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实......
  • shell 脚本:根据ip地址,子网掩码,计算子网
    #!/bin/bashget_ipgate(){#获取ip地址ip=$(echo$1|cut-d'/'-f1)#获取子网掩码mask=$(echo$1|cut-d'/'-f2)#获取主机位((mymask=32-mask))#ip地址......
  • VLC接收网络串流缓冲时间的计算
     VLC版本2.0.1       最近研究IP-STB音视频同步问题,发现方案自带的自动STC在网络延时过大时,不能成功同步音视频。在参考了VLC的串流播放机制后,以为适当缓冲可以......
  • 图计算引擎分析 ——Gemini
    作者:京东科技王军前言Gemini是目前state-of-art的分布式内存图计算引擎,由清华陈文光团队的朱晓伟博士于2016年发表的分布式静态数据分析引擎。Gemini使用以计算为中......
  • 深度学习基础课:卷积层的后向传播推导
    大家好~本课程为“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序线上课程资料:本节课录像回放1加QQ群,获......
  • 计算机网络(一)互联网与 IP
    由于最近研究番剧、写番剧评论的时候用到了的BT下载,找了个开源的BT下载器,然后配置这个下载器时遇到了许多困难,其中就有好多计算机网络的术语。由于向来对这种只按照教......
  • 200017 计算柱的箍筋长度已知宽高肢数
    点击查看代码<?phpheader('Content-Type:text/html;charset=utf-8');define('ROOT',$_SERVER['DOCUMENT_ROOT']);includeROOT.'/assets/php/head.php';$tit='......
  • 边缘计算小组:VMware、联想、Stackpath、IBM和Edgio访谈
    边缘计算正在将工作负载、数据、处理和业务价值从云端转移到低延迟和实时处理的全球和分布式操作。尽管云提供了大规模的集中化、规模经济和自助服务,但它根本无法跟上企业......
  • 整编《计算机视觉中的多视图几何》序言
          让计算机具有视觉,科学家与工程师们,作出了近40年的不懈努力:应该说,40年努力的进展是显著的,进展主要有两个方面:一是迄今为止提出的各种......