【FPGA IP系列】FIFO的通俗理解

FPGA厂商提供了丰富的IP核,基础性IP核都是可以直接免费调用的,比如FIFO、RAM等等。

本文主要介绍FIFO的一些基础知识,帮助大家能够理解FIFO的基础概念。

一、FIFO介绍

FIFO全称是First In First Out,即先进先出。

FIFO是一个数据缓存队列,主要特点就是数据顺序写入,再按照同样的顺序输出数据,即先进去的数据先被取出来。

1、FIFO的通俗理解

FIFO可以类比一个水池。

当写通道打开时,就相当于往水池里加水;而当读通道打开时,就相当于从水池中放水。

如果持续不断地加水和放水,如果加水速度超过了放水速度,那么水池就会满了,这时FIFO就会发生溢出,水会溢出水池。

相反,如果放水速度快于加水速度,那么水池就会变空,FIFO就会出现空的情况。

2、FIFO的分类

根据FIFO输入时钟的区别,可以分为同步FIFO和异步FIFO。

同步 FIFO 只有一个独立的时钟端口 clock,所有的输入输出信号都同步于 clock 信号。

异步FIFO有两个时钟,写端口和读端口分别有独立的时钟,所有写相关的信号都是属于写时钟,所有与读相关的信号都属于读时钟。

2、FIFO IP

FIFO一般不需要自己去写代码实现,FPGA官方软件都提供了FIFO IP,直接使用即可。

FPGA IP特性:

  • 配置选项和控制手段广泛:提供了丰富的配置选项和控制手段,可以根据用户的需求进行灵活配置。

  • 灵活的接口和支持多种数据宽度:接口设计灵活,同时支持多种不同数据宽度的操作。

  • 支持多种读写模式:支持单写单读、单写多读、多写单读、多写多读等读写模式,可以适应不同的应用场景。

  • 多种存储方式:支持异步、同步等不同的存储方式,可以根据需求选择合适的存储方式。

  • 可配置的参数:可以配置深度、宽度、读写数据宽度等参数,使得用户可以按需定制FIFO的特性。

二、FIFO的应用

FIFO的应用非常广泛,其中同步fifo主要用于处理数据缓存,异步fifo主要用于处理跨时钟数据传输处理。

常用的应用场景如下:

接口数据/消息缓冲:FIFO可以用于缓存数据或消息,以应对数据流量突发情况,同时降低或消除背压的频率,减小上级模块的复杂度。

接口协议隔离:在模块与复杂的协议进行对接时,FIFO可以作为隔离后的用户接口,降低模块接口协议设计复杂度,并实现协议接口的IP化,提高系统的复用性。

跨时钟域处理:FIFO可以用于处理异步时钟域的数据、消息和总线。通过FIFO,可以实现简单、快速、安全的跨时钟域处理。

数据位宽转换:FIFO可以用于实现数据的位宽转换,例如从512位转换为256位。

三、FIFO的重要概念

1、主要端口

读写时钟:同步FIFO是指读时钟和写时钟为同一个时钟。异步FIFO读写时钟是独立的两个时钟。

读写使能:读写控制的使能

满信号:FIFO里面的缓存数据数量达到了最大深度值

空信号:FIFO里面的缓存全部被读空

深度:FIFO所能容纳的最大数据数量

2、FIFO的存储结构

FIFO通常采用循环存储结构,即存储空间是一个环形的缓冲区。

数据写入时,从第一个写入地址开始,依次向后写入;数据读取时,从第一个读取地址开始,依次向后读取。

当写入数据量达到FIFO的深度时,将不能再写入数据,此时需要停止写入操作,等待读取操作将数据读出,否则将发生溢出。

同样,当读取数据量达到FIFO的深度时,将不能再读取数据,此时需要停止读取操作,等待写入操作将数据写入。

3、FIFO的空满状态

FIFO具有空标志和满标志,用于指示FIFO的存储状态。

当FIFO空时,写入操作将停止,直到FIFO非空;当FIFO满时,读取操作将停止,直到FIFO非满。

空满状态的判断通常采用比较读写指针的位置关系,例如当写入指针等于读取指针时,FIFO为空;当写入指针比读取指针多一位(达到FIFO的深度)时,FIFO为满。

4、FIFO的读写操作

FIFO的读写操作遵循先进先出的原则。

写入数据时,根据写地址将数据写入FIFO的空闲位置;读取数据时,根据读地址从FIFO的存储位置读取数据。

在连续的读写操作中,读写指针会自动递增,以便在下次读写时正确指向FIFO的下一个位置。

5、FIFO的同步处理

由于FIFO通常涉及不同时钟域之间的数据传输,因此需要进行同步处理。

在异步FIFO中,写入时钟和读取时钟是不同的,需要使用握手协议进行同步。

在同步FIFO中,读写时钟是同一个时钟,但仍然需要进行时序分析,以保证数据的稳定性和可靠性


本文将不断定期更新中,码字不易,点⭐️赞,收⭐️藏一下,不走丢哦

本文由FPGA狂飙原创,有任何问题,都可以在评论区和我交流哦

您的支持是我持续创作的最大动力!如果本文对您有帮助,请给一个鼓励,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/51372.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言第十一课--------操作符的使用与分类-------基本操作

作者前言 作者介绍: 作者id:老秦包你会, 简单介绍: 喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们…

7.27 作业 QT

要求: 结果图: clock.pro: QT core gui QT texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated …

算法与数据结构(四)--排序算法

一.冒泡排序 原理图: 实现代码: /* 冒泡排序或者是沉底排序 *//* int arr[]: 排序目标数组,这里元素类型以整型为例; int len: 元素个数 */ void bubbleSort (elemType arr[], int len) {//为什么外循环小于len-1次?//考虑临界情况&#xf…

Power BI-云端报表定时刷新--ODBC、MySQL、Oracle等其他本地数据源的刷新(二)

ODBC数据源 一些小众的数据源无法直接连接,需要通过微软系统自带的应用“ODBC数据源”连接。 1.首次使用应安装对应数据库的ODBC驱动程序,Mysql的ODBC驱动需要手动安装 2.在web服务中进行数据源的配置 Mysql数据源 1.Powerbi与Gateway第一次连SQL…

Ansible安装部署与应用

文章目录 一、ansible简介二、ansible 环境安装部署三、ansible 命令行模块3.1 command 模块3.2 shell 模块3.3 cron 模块3.4 user 模块3.5 group 模块3.6 copy 模块3.7 file 模块3.8 hostname 模块3.9 ping 模块3.10 yum 模块3.11 service/systemd 模块3.12 script 模块3.13 m…

Staples Drop Ship EDI 需求分析

Staples 是一家美国零售公司,总部位于马萨诸塞州弗拉明汉,主要提供支持工作和学习的产品和服务。该公司于 1986 年在马萨诸塞州布莱顿开设了第一家门店。到 1996 年,该公司已跻身《财富》世界 500 强,后来又收购了办公用品公司 Qu…

Blazor前后端框架Known-V1.2.8

V1.2.8 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。 Gitee: https://gitee.com/known/KnownGithub:https://github.com/known/Known 概述 基于C#和Blazor…

【文献分享】动态环境下竟然能实现实时语义RGB-D SLAM??

论文题目:Towards Real-time Semantic RGB-D SLAM in Dynamic Environments 中文题目:动态环境下实时语义RGB-D SLAM研究 作者:Tete Ji, Chen Wang, and Lihua Xie 作者机构:新加坡南洋理工大学电气与电子工程学院 卡内基梅隆大…

C++赋值运算符重载

运算符重载 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数函数名字:关键字operator后面接需要重载的运算符符号函数模型:返回值类型 operator操作符(参数列表) 注意事项: 1 不能通过连接其他符号…

【C++】开源:Muduo网络库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Muduo网络库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下…

网络知识整理

网络知识整理 网络拓扑网关默认网关 数据传输拓扑结构层面协议层面 网络拓扑 网关 连接两个不同的网络的设备都可以叫网关设备,网关的作用就是实现两个网络之间进行通讯与控制。 网关设备可以是交换机(三层及以上才能跨网络) 、路由器、启用了路由协议的服务器、代…

【Docker】云原生利用Docker确保环境安全、部署的安全性、安全问题的主要表现和新兴技术产生的详细讲解

前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…

matplotlib实现动态显示图片

plt.ion()打开交互开关 plt.ioff()关闭交互开关 plt.pause(0.1)暂停0.1秒 plt.clf()#清除当前的Figure图像 plt.cla()#清除当前的Axex图像 import matplotlib.pyplot as plt import numpy as np import time from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg…

Unity自定义后处理——用偏导数求图片颜色边缘

大家好,我是阿赵。   继续介绍屏幕后处理效果的做法。这次介绍一下用偏导数求图形边缘的技术。 一、原理介绍 先来看例子吧。   这个例子看起来好像是要给模型描边。之前其实也介绍过很多描边的方法,比如沿着法线方向放大模型,或者用Ndo…

建设银行秋招指南,备考技巧和考试内容详解

建设银行秋招简介 银行作为非常吃香的岗位,每年都有不少同学通过投递简历,进入笔试,再到面试成功,成功到银行就职,也有相当一部分同学因为信息差,符合条件却没有报名。无法进入银行工作。 建设银行的秋招…

ACL原理

ACL原理 ACL是一种用于控制网络设备访问权限的技术,可以通过配置ACL来限制特定用户、应用程序或网络设备对网络资源的访问。 1、ACL(Access Control List) 2、ACL是一种包过滤技术。 3、ACL基于IP包头的IP地址、四层TCP/UDP头部的端口号、…

Transformer背景介绍

目录 Transformer的诞生Transformer的优势Transformer的市场 Transformer的诞生 论文地址 Transformer的优势 Transformer的市场

力扣热门100题之矩阵置0【中等】

题目描述 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1: 输入:matrix [[1,1,1],[1,0,1],[1,1,1]] 输出:[[1,0,1],[0,0,0],[1,0,1]] 示例 2&#xff…

【计算机网络】第 4 课 - 物理层

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、物理层的基本概念 2、物理层协议的主要任务 3、物理层任务 4、总结 1、物理层的基本概念 在计算机网络中,用来…

ReentrantLock锁的实现

ReentrantLock基于AQS,在并发编程中可以实现公平锁和非公平锁来对同步资源进行控制,并且是可重入锁。 1.ReentrantLock中的类的继承结构: 2.构造方法: 3.非公平锁的实现 看是否能够通过CAS来设置state来获取到锁,如果…
最新文章