IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> FIFO最小深度计算的题目合集 -> 正文阅读

[嵌入式]FIFO最小深度计算的题目合集

异步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的大小应该是无限的。


  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:50:26  更:2022-06-14 22:50:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 15:03:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码