当前位置:网站首页>FIFO最小深度计算的题目合集
FIFO最小深度计算的题目合集
2022-06-11 05:53:00 【Fighting_XH】
异步FIFO深度计算
一、写时钟比读时钟快
1、
数据传送的时间 = FIFO写满时间
FIFO写满时间 = FIFO深度 / (写入速率 - 读出速率)
数据传送时间 = 数据量 / 写入速率
因此
FIFO深度 / (写入速率 - 读出速率) = 数据量 / 写入速率
2、深度 = 写数据量(突发长度) - 读数据量(同样时间里读了多少数据)
我们需要根据写时钟和写数据,得到突发长度,然后算出些数据需要写多久,在写数据的时间里,读时钟读了多少数据。
3、最坏情况(背靠背)
fifo_depth = burst_length - burst_length * X/Y * r_clk/w_clk
XY表示:每Y时钟周期有X数据读出FIFO

二、 写时钟比读时钟慢
1、写时钟比读时钟慢,且读写过程中没有空闲周期
这种情况下永远也不会发生数据丢失的情况;fifo的深度为1即可。
2、写时钟比读时钟慢,且读写过程中有空闲周期
深度 = 写数据量(突发长度) - 读数据量(同样时间里读了多少数据)
同步FIFO深度计算
三、读写时钟一致
1、读写时钟频率一致,但在读写过程中存在空闲周期。
深度 = 写数据量(突发长度) - 读数据量(同样时间里读了多少数据)
看题目
题目1:
现需要通过A写10万数据,并通过读时钟送给B,写时钟50Mhz,读时钟为40mhz,如果要数据不丢失,那么需要在AB之间插入FIFO,那么我们到底需要插入多大深度的FIFO呢?
FIFO深度 / (写入速率 - 读出速率) = 数据量 / 写入速率
解题:
FIFO深度 / ( 50 Mhz- 40Mhz ) = 10万 / 50Mhz ,则10万 / 50MHZ = 1 / 50 s = 0.002s = 2ms
.
2 ms = FIFO深度 / ( 50 Mhz- 40Mhz ),则深度 = 2ms / 100ns = 20000 = 20k
.
因此FIFO深度为 20 k 。
题目2:
已知:时钟频率:clkA = clkB / 4 ;时钟周期: clk (en_B) = clkA * 100 ;en_B占空比为25%。求FIFO深度。
解:
假设clkA = 100 MHz ,clkB = 400Mhz,则TclkA = 10ns,TclkB = 2.5ns,en_B的周期是clkA的100倍,因此Ten_B = 1000ns 由于enB占空比为25%,因此该信号高电平持续250ns。
.
一般写比读快,因此假设clkA为读时钟,clkB为写时钟,当enB高电平时,写时钟写数据,写入的数据量 = 250ns / 2.5ns =
100个数据。
.
当写使能有效的时候,有了数据,因此可进行读操作,读的数据 = 250ns / 10ns = 25 个数据
.
深度 = 写入数据 - 读出数据 = 75
题目3:——同步FIFO
对于同步fifo,每100个cycle可以写入80个数据,每10个cycle可以读出8个数据,fifo的深度至少为?
解题:
.
每100个cycle可以写入80个数据,为了获得更安全的FIFO深度,我们需要考虑最坏的情况,以防数据丢失,也就是背靠背模式,空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 ,深度为32
题目4:——异步FIFO
wclk=200mhz,100个wclk里写入40个数据,rclk=100mhz,10个rclk里读出8个数据。那么fifo深度为?
解题方法1:
我们仍然考虑最坏的情况,背靠背,即空60个wclk,剩下40个wclk写入有40个数据,接着40个wclk写40个数据,空60个wclk,那么突发数据个数为40+40=80,用了200个wclk。
.
公式:fifo_depth = burst_length - burst_length * X / Y * r_clk/w_clk
.
则深度 = 80 - 80 * 8 / 10 * 1/2 = 48 .
.
注意:由于FIFO的深度一般是2的整数次幂,要符合格雷码的编码转换规则,对于计算出的深度48,选择比它大的2的整数次幂的数,比如64。
解题方法2 :
公式:深度 = 写数据量(突发长度) - 读数据量(同样时间里读了多少数据)
.
wclk=200mhz = 1000 / 200mhz = 5ns,突发长度80,则写时间:5ns * 80 = 400 ns
.
rclk=100mhz = 1000 / 100mhz = 10ns,每10rdclk读8个数据,10rdclk =100ns,因此100ns读8个数据,在400ns中,读数据 = 4 * 32 。
.
深度 = 写数据量 - 读数据量 = 80 - 32= 48
题目5:——写时钟 比 慢时钟 快 ,且读写工程中无空闲周期(在突发中,读写在各自时钟下连续进行)
wclk = 80Mhz ,rclk = 50mhz,突发长度120,写和读的过程中没有空闲周期。
解题:
wclk = 80Mhz = 1000 / 80mhz = 12.5 ns
.
写时间 = 12.5 ns * 120 = 1500
.
相同的时间内,计算读多少数据。 rclk = 50mhz = 20ns。读数据 = 1500 /20 = 75数据
.
因此深度 = 写数据 -读数据 = 120 - 75 = 45
题目6:——写时钟 比 慢时钟 快 ,且读写工程中有空闲周期
wclk = 80Mhz ,rclk = 50mhz,突发长度120,两个写时钟写一个数据,4个读时钟周期读一个数据。
解题:
wclk = 80Mhz = 1000 / 80mhz = 12.5 ns
.
写数据个数120,每两个wclk写一个数据,则每25ns写一个数据。 写时间 = 120 * 25 = 3000ns
3000ns内,求能读多少数据。
.
rclk = 50mhz = 20ns,每4个rclk读一个数据,因此每80ns读一个数据。3000ns可读数据 = 37.5 个数据 = 37个数据。
深度 =120 - 37 = 83
题目7:——写时钟慢于读时钟,且读写过程中没有空闲周期
wclk = 30Mhz ,rclk = 50mhz,突发长度120.
这种情况下永远也不会发生数据丢失的情况;fifo的深度为1即可。
题目8:——写时钟慢于读时钟,且读写过程中有空闲周期
wclk = 30Mhz ,rclk = 50mhz,突发长度120,每两个wclk写一个数据,每4rclk读一个数据。
解题:
wclk = 80Mhz = 1000 / 30mhz = 100/3ns
.
写数据个数120,每两个wclk写一个数据,则每(100/3ns)* 2 写一个数据。
写时间 = 120 * (100/3ns)* 2 = 8000ns
8000ns内,求能读多少数据。
.
rclk = 50mhz = 20ns,每4个rclk读一个数据,因此每80ns读一个数据。8000ns可读数据 = 100个数据
深度 =120 - 100 = 20
题目8:——读写时钟频率一致,但在读写过程中存在空闲周期。
wclk = 50Mhz ,rclk = 50mhz,突发长度120,每两个wclk写一个数据,每4rclk读一个数据。
解题:
wclk = 50Mhz = 1000 / 50mhz = 20ns
.
写数据个数120,每两个wclk写一个数据,则每(20ns)* 2 写一个数据。
写时间 = 120 * 40ns = 4800ns
4800ns内,求能读多少数据。
.
rclk =wclk,每4个rclk读一个数据,因此每80ns读一个数据。4800ns可读数据 = 60个数据
深度 =120 - 60 = 60
FIFO知识掌握
FIFO仅在数据突发时才有效; 不能有连续的数据输入和输出,若存在连续的数据流,那么所需FIFO的大小应该是无限的。
边栏推荐
- NDK learning notes (x) POSIX socket for connectionless communication
- Sword finger offer 50: the first character that appears only once
- Do you know the functions of getbit and setbit in redis?
- ThymeleafEngine模板引擎
- Informatica:数据质量管理六步法
- handler
- 使用Genymotion Scrapy控制手机
- 配置Rust编译环境
- 修复Yum依赖冲突
- Twitter data collection (content, fans, keywords, etc.)
猜你喜欢

Do we really need conference headphones?

Goodbye 2021 Hello 2022

Servlet

NFC Development -- the method of using NFC mobile phones as access control cards (II)

Deployment of Flink

NDK learning notes (VI) Basics: memory management, standard file i/o

Squid agent

What is a planning BOM?

做亚马逊测评要了解的知识点有哪些?
![[must see for game development] 3-step configuration p4ignore + wonderful Q & A analysis (reprinted from user articles)](/img/4c/42933ac0fde18798ed74a23279c826.jpg)
[must see for game development] 3-step configuration p4ignore + wonderful Q & A analysis (reprinted from user articles)
随机推荐
数组部分方法
JS -- reference type
Informatica:数据质量管理六步法
[usual practice] explore the insertion position
Sqli-libs post injection question 11-17 actual combat
Free get | full function version of version control software
Super details to teach you how to use Jenkins to realize automatic jar package deployment
Do you know the functions of getbit and setbit in redis?
Sword finger offer 04: find in 2D array
Devsecops in Agile Environment
All the benefits of ci/cd, but greener
使用Batch枚舉文件
NDK learning notes (VIII) thread related
JIRA software annual summary: release of 12 important functions
Error:Execution failed for task ':app:buildNative'. & gt; A problem occurred'x/x/x/'NDK build' error resolution
修复【无 Internet, 安全】问题
How to use perforce helix core with CI build server
Don't be afraid of xxE vulnerabilities: understand their ferocity and detection methods
Functional interface lambda, elegant code development
Servlet