FIFO深度计算
本文设计思想采用明德扬至简设计法。在使用FPGA设计系统时,常需要利用FIFO进行数据缓存保证数据不丢失,因此计算FIFO深度是至关重要的。FIFO的深度主要取决于“最恶劣”的情况,以下对于两种最常见的场合进行分析。
1.已知读写两侧带宽及最恶劣情况,求FIFO深度
如:对于异步FIFO,写时钟100MHZ,读时钟80MHZ。读写位宽均为16bit。已知每100个写周期最多写入960bit数据,读侧每时钟读取一个数据。问:FIFO深度至少为多少?
分析:典型的“背靠背”情况,此时最恶劣的情况是第一次100个写周期内后60个周期连续写入60个数据和第二次100个写周期内前60个周期连续写入60个数据。故上述最恶劣情况下的连续写入120个数据后FIFO内缓存数据最多。计算此时写入数据-该阶段读出数据即为FIFO的最小深度。
计算:t = 120*Tw
Nwr = 120
Nrd = t/Trd = 120*Twr/Trd = 120*frd/fwr = 120*80/100 = 96
x = Nwr - Nrd = 120 - 96 = 24.
由于FIFO深度只能取2的整数次幂,因此最小深度为2^5 = 32.
2.为保证数据连续输出,求读取前FIFO内至少缓存数据量
如:异步FIFO,写入时钟80MHZ,读取时钟100MHZ。数据位宽1byte。写侧连续写入均为8192B长度的数据包。问:为保证输出的数据包是连续不间断,存够多少数据后才能开始发送?
分析:此场景为写入一定数据后开始读取FIFO,那么最恶劣的时刻当然是刚开始读取的时间点。想要保证输出连续,则必须满足:读取8192B数据期间写入的数据+已缓存数据 ≥8192B
计算:t = 8192*Trd
Nrd = 8192
Nwr = t/Twr = 8192*Trd/Twr = 8192*fwr/frd = 8192*80/100 = 6553.6B
发送水线x满足 Nwr +x = 8192 --> x = 8192 - Nwr = 1638.4B
FIFO深度为2^11 = 2048.
FIFO深度计算的更多相关文章
- FPGA FIFO深度计算
转自:http://comm.chinaaet.com/adi/blogdetail/37555.html 首先,一定要理解清楚FIFO的应用场景,这个会直接关系到FIFO深度的计算,如果是面试官抛出 ...
- FPGA大疆考试准备内容
1.寄存器与锁存器 锁存器:电平触发的存储单元,在有效电平时间里可以多次改变数据. 优点: 占触发器资源少,缺点是容易产生毛刺.(附上去毛刺的方法:格雷码计数器(*https://blog.cs ...
- FIFO设计中的深度计算【zz】
FIFO设计中的深度计算: 写时钟频率 w_clk, 读时钟频率 r_clk, 写时钟周期里,每B个时钟周期会有A个数据写入FIFO: 读时钟周期里,每Y个时钟周期会有X个数据读出FIFO: 则,FI ...
- 异步FIFO最小深度计算
计算FIFO深度是设计FIFO中常遇到的问题.常识告诉我们,当读速率慢于写速率时,FIFO便可被用作系统中的缓冲元件或队列.因此FIFO的大小基本上暗示了所需缓存数据的容量,该容量取决于读写数据的速率 ...
- (翻译)FIFO In Hardware
翻译一些自己觉得有价值的材料,工作中碰到英语大多数是读,基本没有写或者翻的,翻得不好不到位的敬请指摘. 同时也附原文以供参考. http://electronics.stackexchange.com ...
- OS存储管理——FIFO,LRU,OPT命中率
课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术,实现了内存扩充功能.而分页请求分页系统正好可以完美的支持虚拟存储器功能,它具有请求调页功能和页面置换功能.在 ...
- 详解三种缓存过期策略LFU,FIFO,LRU(附带实现代码)
在学操作系统的时候,就会接触到缓存调度算法,缓存页面调度算法:先分配一定的页面空间,使用页面的时候首先去查询空间是否有该页面的缓存,如果有的话直接拿出来,如果没有的话先查询,如果页面空间没有满的时候, ...
- 页置换算法FIFO、LRU、OPT
页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...
- LRU LFU FIFO 转载
-------------------------------------->href--------------------------> http://blog.chinaunix.n ...
随机推荐
- 如何在新工程中添加两个不同版本的的echarts库
emmmmm.....标题我就觉得起的很变态.闲话不多说,先说出现的背景吧--. 因为业务上的需求,跟一个硬件对接,要做大屏展示大厅客流热力图分布(背景图是客户那边给的).然后这个机子传过来的数据就可 ...
- 【Android】OkHttp3总结与封装
开始使用 在app目录下的build.gradle中添加依赖: implementation 'com.squareup.okhttp3:okhttp:3.13.1' implementation ' ...
- 解决 win10飞行模式 无限自动开关 无法关闭
驱动问题,名为“Insyde Airplane Mode HID Mini-Driver”的驱动,这个驱动是专门用来快捷管理飞行模式的. 卸载完成后重启,无限开关飞行模式问题得到解决!
- Windows Server 2016-命令行方式管理Windows服务
Microsoft Windows 服务(过去称为 NT 服务)允许用户创建可在其自身的 Windows 会话中长时间运行的可执行应用程序. 这些服务可在计算机启动时自动启动,可以暂停和重启,并且不显 ...
- Ambari REST API 使用介绍 - How To: Use Swagger with Ambari (Explore Ambari REST)
How To: Use Swagger with Ambari (Explore Ambari REST) Article Note : This feature is available from ...
- Linux 桌面玩家指南:15. 深度学习可以这样玩
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- Java三种方式实现栈和队列
栈:LIFO(后进先出) 队列:FIFO(先进先出) 1.栈:LIFO(后进先出) 1.1.栈的顺序存储结构实现: /** * 基于数组实现的顺序栈 * @param <E> */ pub ...
- 从壹开始前后端分离 [.netCore 填坑 ] 三十四║Swagger:API多版本控制,带来的思考
前言 大家周二好呀,.net core + Vue 这一系列基本就到这里差不多了,今天我又把整个系列的文章下边的全部评论看了一下(我是不是很负责哈哈),提到的问题基本都解决了,还有一些问题,已经在QQ ...
- ubuntu文件系统分区调整(解决目录空间不足、分配不均问题)
1. 安装 tuxboot (ubuntu下烧写工具) sudo apt-add-repository ppa:thomas.tsai/ubuntu-tuxboot sudo apt-get upda ...
- springboot~读取自定义配置项
我们springboot项目有自己默认的配置文件,一般地由application.yml和bootstrap.yml组成,前者是模块的配置,后者是微服务的配置,后台比前者先被框架加载. 我们有时需要自 ...