当前位置: 首页 > news >正文

FIFO的Verilog设计(三)——最小深度计算

文章目录

  • 前言
  • 一、FIFO的最小深度
    • 写速度快于读速度
    • 写速度等于或慢于读速度
  • 二、 举例说明
    • 1. FIFO写时钟为100MHz,读时钟为80Mhz
      • 情况一:一共需要传输2000个数据,求FIFO的最小深度
      • 情况二:100个时钟写入80个数据,1个时钟读1个数据,求FIFO的最小深度
      • 情况三:100个时钟写入80个数据,3个时钟读1个数据,求FIFO的最小深度
  • 三、什么情况下不太需要考虑FIFO的最小深度


FIFO的设计可参考
FIFO的Verilog设计(一)——同步FIFO
FPGA的Verilog设计(二)——异步FIFO
参考文献
[1]FIFO最小深度计算

前言

  在实际使用FIFO时,需要考虑FIFO的深度如何设置,如果深度设置不当,可能会出现资源浪费或者数据丢失等情况。下面将简要介绍FIFO的最小深度如何计算。

一、FIFO的最小深度

  由前两篇文章对FIFO的介绍,FIFO常用于数据缓存、数据匹配和多bit跨时钟域处理。
  因此在读写速度不匹配的时候可以使用FIFO,进行数据缓存。当读速度慢于写速度时,FIFO可作为一个缓存单元。此时总会有部分数据缓存在FIFO中,但是如果读写速度相差过大,就会导致数据溢出。所以在写速度最大、读速度最小时,正好不导致FIFO出现数据溢出的最小深度。当读速度快于写速度时,FIFO更多的是起着变换时钟域的作用。

写速度快于读速度

  FIFO写速度快于读速度模型的应用场景为,无论是数据需不需要跨时钟域,只要FIFO写速度快于读速度,FIFO写入一个数据需要 t 1 t_1 t1秒,读出一个数据需要 t 2 t_2 t2秒( t 1 < t 2 t_1<t_2 t1<t2),一共需要传输 n n n个数据
  FIFO写入n个数据的时间为 n t 1 nt_1 nt1,FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n t 1 t 2 \frac{nt_1}{t_2} t2nt1,此时FIFO中剩余数据个数 ⌈ n − n t 1 t 2 ⌉ \lceil n-\frac{nt_1}{t_2} \rceil nt2nt1

写速度等于或慢于读速度

  FIFO写速度等于或慢于读速度模型的应用场景为,在多bit数据需要变换时钟域情况下,FIFO的最小深度设置为1即可。因此FIFO只是起着变换时钟域的作用。

二、 举例说明

1. FIFO写时钟为100MHz,读时钟为80Mhz

情况一:一共需要传输2000个数据,求FIFO的最小深度

  FIFO写入一个数据需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1=100M1s,读出一个数据需要 t 2 = 1 80 M t_2=\frac{1}{80M} t2=80M1s
  FIFO写入2000个数据需要的时间 n t 1 = 2000 100 M nt_1=\frac{2000}{100M} nt1=100M2000s
  FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m r d = n t 1 t 2 = 2000 ∗ 80 M 100 M = 1600 num_{rd} = \frac{nt_1}{t_2} = \frac{2000*80M}{100M} = 1600 numrd=t2nt1=100M200080M=1600
  此时FIFO剩余数据个数为 n u m = 2000 − n u m r d = 2000 − 1600 = 400 num = 2000 - num_{rd} = 2000-1600 = 400 num=2000numrd=20001600=400
  可得FIFO最小深度为400。

情况二:100个时钟写入80个数据,1个时钟读1个数据,求FIFO的最小深度

  FIFO写入一个数据需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1=100M1s,读出一个数据需要 t 2 = 1 80 M t_2=\frac{1}{80M} t2=80M1s
  100个时钟写入80个数据,可以理解为80个有效写时钟和20个无效写时钟。
在这里插入图片描述

  此为突发读写情况,需要考虑什么时候突发写的数据最多。当前后两个100时钟的突发写是连续时,突发写的数量最多,如下图所示
在这里插入图片描述

  FIFO写入160个数据需要的时间 n t 1 = 160 100 M nt_1=\frac{160}{100M} nt1=100M160s
  FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m _ r d = n t 1 t 2 = 160 ∗ 80 M 100 M = 128 num\_rd = \frac{nt_1}{t_2} = \frac{160*80M}{100M} = 128 num_rd=t2nt1=100M16080M=128
  此时FIFO剩余数据个数为 n u m = 160 − n u m _ r d = 160 − 128 = 32 num = 160 - num\_rd = 160-128 = 32 num=160num_rd=160128=32
  可得FIFO最小深度为32。
  note:诀窍在于找出最大连续写入的数据量。

情况三:100个时钟写入80个数据,3个时钟读1个数据,求FIFO的最小深度

  FIFO写入一个数据需要 t 1 = 1 100 M t_1=\frac{1}{100M} t1=100M1s,读出一个数据需要 t 2 = 3 ∗ 1 80 M t_2=3*\frac{1}{80M} t2=380M1s
  同上情况,FIFO最大连续写入的数据量,写入160个数据需要的时间 n t 1 = 160 100 M nt_1=\frac{160}{100M} nt1=100M160
  FIFO在 n t 1 nt_1 nt1时间内读出数据个数为 n u m _ r d = n t 1 t 2 = 160 ∗ 80 M 3 ∗ 100 M = 42.67 num\_rd = \frac{nt_1}{t_2} = \frac{160*80M}{3*100M} = 42.67 num_rd=t2nt1=3100M16080M=42.67
  此时FIFO剩余数据个数为 n u m = 160 − n u m _ r d = 160 − 42.67 = 117.33 num = 160 - num\_rd = 160-42.67 = 117.33 num=160num_rd=16042.67=117.33
  可得FIFO最小深度为 ⌈ 117.33 ⌉ = 118 \lceil117.33\rceil=118 117.33=118,可以设置成2的幂次方128。

三、什么情况下不太需要考虑FIFO的最小深度

  何时不用过分考虑FIFO的最小深度?在数据发送端如果能够接受FIFO的空满信号反馈时可以设置个大概的深度即可。利用FIFO的空满信号(或者almost_full/almost_empty)的反馈来控制FIFO的读写使能能够有效解决数据的溢出。

相关文章:

FIFO的Verilog设计(三)——最小深度计算

文章目录 前言一、FIFO的最小深度写速度快于读速度写速度等于或慢于读速度 二、 举例说明1. FIFO写时钟为100MHz&#xff0c;读时钟为80Mhz情况一&#xff1a;一共需要传输2000个数据&#xff0c;求FIFO的最小深度情况二&#xff1a;100个时钟写入80个数据&#xff0c;1个时钟读…...

JavaWeb笔记之JavaWeb JDBC

//Author 流云 //Version 1.0 一. 引言 1.1 如何操作数据库 使用客户端工具访问数据库&#xff0c;需要手工建立连接&#xff0c;输入用户名和密码登录&#xff0c;编写 SQL 语句&#xff0c;点击执行&#xff0c;查看操作结果&#xff08;结果集或受影响行数&#xff09;。…...

pytorch网络的增删改

本文介绍对加载的网络的层进行增删改, 以alexnet网络为例进行介绍。 1. 加载网络 import torchvision.models as models alexnet models.alexnet(weightsmodels.AlexNet_Weights.DEFAULT) print(alexnet)2. 删除网络 在做迁移学习的时候&#xff0c;我们通常是在分类网络的…...

Tomcat (Linux系统)详解全集

点击标题进入对应模块学习&#xff0c;你也可以完全拿捏Tomcat&#xff01; 1 Tomcat及JDK下载安装&#xff08;Linux系统&#xff09; 2 Tomcat目录介绍 3 Tomcat的启动关闭及日志说明 4 完美解决Tomcat启动慢的三种方法 5 Tomcat管理功能使用 6 Tomcat主配置文件&#xff08;…...

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件

国内众多设计院都在推进信息化建设&#xff0c;特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域&#xff0c;这些加快了业务的发展&#xff0c;也带来了更多信息安全挑战&#xff0c;尤其是对于以知识成果为重要效益来源的设计院所&#xff0c;防…...

数字化转型中的6S管理

在当今竞争激烈的制造业中&#xff0c;数字化转型已经成为企业保持竞争力和实现可持续发展的关键。科技的飞速发展&#xff0c;数字化已经成为推动制造业变革的引擎。在这个信息时代&#xff0c;数字化转型不仅仅是追求效率和成本节约的问题&#xff0c;更是企业在市场中生存和…...

Linux学习(1)——初识Linux

目录 一、Linux的哲学思想 1.1 基础知识 1.2 根目录下的文件夹 二、Shell 1、Shell的定义 2、Shell的作用 三、Linux命令行 1、Linux通用命令行使用格式 四、Linux命令的分类 1、内部命令和外部命令的理解 2、内部命令和外部命令的区别 3、命令的执行过程 五、编辑…...

2.5 - 网络协议 - HTTP协议工作原理,报文格式,抓包实战

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 HTTP协议 1、HTTP协议工作原理2、HTTP协议报文3、HTTP请求方法4、HTTP响应状态码5、…...

新增工具箱管理功能、重构网站证书管理功能,1Panel开源面板v1.9.0发布

2023年12月18日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.0版本。 在这一版本中&#xff0c;1Panel引入了新的工具箱管理功能&#xff0c;包含Swap分区管理、Fail2Ban管理等功能。此外&#xff0c;1Panel针对网站证书管理功能进行了全面重构&…...

棋牌的电脑计时计费管理系统教程,棋牌灯控管理软件操作教程

一、前言 有的棋牌室在计时的时候&#xff0c;需要使用灯控管理&#xff0c;在开始计时的时候打开灯&#xff0c;在结账后关闭灯&#xff0c;也有的不需要用灯控&#xff0c;只用来计时。 下面以 佳易王棋牌计时计费管理系统软件为例说明&#xff1a; 软件试用版下载或技术支…...

《Kotlin核心编程》笔记:设计模式

创建型模式 主流的创建型模式有&#xff1a;工厂方法模式、抽象工厂模式、构建者模式 伴生对象增强工厂模式 在有些地方会把工厂模式细分为简单工厂、工厂方法模式以及抽象工厂。 这里主要介绍简单工厂的模式&#xff0c;它的核心作用就是通过一个工厂类隐藏对象实例的创建…...

hive企业级调优策略之数据倾斜

测试所用到的数据参考&#xff1a; 原文链接&#xff1a;https://blog.csdn.net/m0_52606060/article/details/135080511 本教程的计算环境为Hive on MR。计算资源的调整主要包括Yarn和MR。 数据倾斜概述 数据倾斜问题&#xff0c;通常是指参与计算的数据分布不均&#xff0…...

MATLAB版本、labview版本、UHD版本 互相对应

LabVIEWMATLABUHD2019R2021bUHD_3.15.0.0-vendor2020R2022bUHD_4.1.0.4-vendorR2023bUHD_4.2.0.0-vendor 更换固件 MATLAB 更换固件指令 status sdruload(Device "X310", IPAddress 192.168.10.2)...

13 v-show指令

概述 v-show用于实现组件的显示和隐藏&#xff0c;和v-if单独使用的时候有点类似。不同的是&#xff0c;v-if会直接移除dom元素&#xff0c;而v-show只是让dom元素隐藏&#xff0c;而不会移除。 在实际开发中&#xff0c;v-show也经常被用到&#xff0c;需要重点掌握。 基本…...

23级新生C语言周赛(6)(郑州轻工业大学)

题目链接:ZZULIOJ 3110: 数(shu)数(shu)问题 分析: 看到这个题第一步想的是 先把每个平方数给求出来 然后枚举 但是时间复杂度大于1e8 交了一下TLE 但后来打表发现,好数太多了要是枚举的话 注定TLE 能不能间接的去做呢? 把不是的减去,那不就是好数了吗? 这个时候又是打表,会…...

关于“Python”的核心知识点整理大全24

目录 ​编辑 10.1.6 包含一百万位的大型文件 pi_string.py 10.1.7 圆周率值中包含你的生日吗 10.2 写入文件 10.2.1 写入空文件 write_message.py programming.txt 10.2.2 写入多行 10.2.3 附加到文件 write_message.py programming.txt 10.3 异常 10.3.1 处理 Ze…...

Vue - 基于Element UI封装一个表格动态列组件

1 组件需求背景 在后台管理系统中&#xff0c;表格的使用频率非常高&#xff0c;统一封装表格动态列组件并全局注册使用&#xff0c;可大大提升代码的复用性和可维护性。 2 全局注册 src/plugins/index.js&#xff1a; import columns from ./columns/indexexport default …...

计算机网络:DNS域名解析系统

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…...

java面试:==和equals有什么区别?

在 Java 中&#xff0c;"" 和 "equals" 有着不同的作用&#xff1a; "" 运算符&#xff1a; 在基本数据类型&#xff08;如 int、char 等&#xff09;中&#xff0c;"" 用于比较它们的值是否相等。 在引用类型中&#xff0c;"&q…...

数字人SaaS系统无限生成AI数字人!

市面上数字人软件层出不穷&#xff0c;选择一款适合的数字人软件是成功的第一步&#xff0c;只需要一款软件就解决数字人直播和数字人短视频的制作&#xff0c;青否数字人SaaS系统&#xff08;数字人源码&#xff1a;zhibo175&#xff09;你值得拥有&#xff01; 青否数字人Saa…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径&#xff0c;但是vite中默认不可以。 如何实现&#xff1a; vite中提供了resolve.alias&#xff1a;通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

海云安高敏捷信创白盒SCAP入选《中国网络安全细分领域产品名录》

近日&#xff0c;嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;海云安高敏捷信创白盒&#xff08;SCAP&#xff09;成功入选软件供应链安全领域产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解…...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001

qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类&#xff0c;直接把源文件拖进VS的项目里&#xff0c;然后VS卡住十秒&#xff0c;然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分&#xff0c;导致编译的时候找不到了。因…...