FIFO的使用攻略(一看就会)

2023-11-03

一、IP核的方式

1、打开IP核

含义:FIFO是一个先进先出的存储队列。与其他RAM不同的是FIFO没有地址,先入先出。
作用:作用就是作为数据的队列通道,让数据暂时缓存,以等待读取。用于异步FIFO模块来实现接口,接口双方都在自己的时钟下工作,他们之间不需要互相握手,只需要跟接口FIFO模块进行交互即可向FIFO模块中写入数据或从FIFO模块中读出数据。
在这里插入图片描述
命名规范:尽量写出写、读宽度以及深度,一目了然
接口:Native(不用总线类型)、AXIMemory Mapped and AXI Stream(总线类型)
一般使用Native。AXI interface FIFOs是由本地FIFO衍生而来的,AXI是xillinx特有的高速接口
区别AXI除了在Native支持的应用下使用,也可以在总线系统和点对点高速应用中使用
AXI接口FIFO不支持内置FIFO和移位寄存器FIFO配置。
FIFO配置

在这里插入图片描述
注意:Embedded Register Support 仅仅在Ultrascale family中使用
Xilinx仅支持UltraScale设备的Non-symmetric Aspect Ratios。(内置fifo的最大深度限制为8192)
FIFO有同步和异步两种方式。当读写时钟一致,或者数据没有跨时钟的时候就选择同步时钟即可,否则选择异步时钟。

Block RAM:使用FPGA内部的RAM
Distributed RAM:分布式RAM,使用内部的LUT和逻辑电路组成的fifo,当深度不大于128时可以使用
shift Register:移位寄存器形式,深度不大于32时可以使用
Built-in:内部自带的fifo,深度大于128可以使用
在这里插入图片描述
Read Mode 读模式
Standard FIFO :标准FIFO
First Word Fall Through :第一个写入数据将被从ram中提前读出到读数据线,第一个数据有效与empty无效同时,即当empty无效时, 不必读取,数据线上的数据已经有效,读信号有效后,读数据线将显示下一数据地址
Data Port Parameters 数据接口参数
write width 写宽度
write depth 写深度
read width 读宽度
read depth 读深度
(后面读的设置通常与写的设置相同)
Initialization 初始化
Reset Pin 复位引脚
Enable safety Circuit 启用安全电路 一般都要选上
Reset Type 复位类型,有两种
异步复位和同步复位
Full Flag Reset Value 复位的值,0为低电平复位,1为高电平复位
ECC,Output Register and Power Gating Options:输出寄存器和电源控制选项。
在这里插入图片描述
在status flags界面中主要是设置一些标志位,设置将满和将空,一般可用可不用,因为用空满信号就可以;红框2表示读出数据有效信号,这个标志位与读出数据同步,有数据读出就有效,否则无效,可用来判断从FIFO中是否有数据读出;红框3表示可编程满和可编程空,即空满的值可由用户设定,比如这里设置了可编程满的值为56,且是常数(还有一种是在代码模块中通过引脚输入),意思是FIFO中有55个数时,就表示满了而不是到64个才满,这能更好的避免数据溢出,可编程空原理一样,这里没有设置。
在这里插入图片描述
Data counts一般不用设置,用来累计读写数据的个数的,与空满信号功能重复,不用也可以。点击OK就可以生成IP了
打开工程Sources中的IP,双击.veo文件,找到IP例化程序端口,便于调用。
在这里插入图片描述

2、例化程序:

fifo_generator_0        fifo_generator_0_inst
(
    .rst            (1'b0),
    //wr
    .wr_clk         (video_tx_clk),
    .din            (tpg_video_data),
    .wr_en          (hdmi_ce),
    .full           (full),
    //rd
    .rd_clk         (hdmi_refclk),
    .rd_en          (1'b1),
    .dout           (tpg_video_data_out),
    .empty          (empty)
  );

3、端口定义:

almost_full : 这个信号表明在FIFO满之前只能再执行一次写操作
almost_empty :当FIFO仅剩一个数据的时候就会拉高
prog_empty: 当FIFO中的数据个数小于参数PROG_FULL_THRESH时会拉高
prog_full : 当FIFO中的数据个数大于参数PROG_FULL_THRESH时会拉高
wr_cak : 写操作回应,表示上次写操作成功
**overflow ** :上溢,仅当fifo满的时候给wr_en时会拉高,此数据并不会被写入fifo
underflow : 下溢,仅当fifo空的时候rd_en时会拉高,此时并没有数据被读出来。
在这里插入图片描述

二、原语的方式

1、参考案例

---------------------------------------------------------------------//
 async fifo distributed , deepth 32 , write width "DATA_WIDTH+1" bit ,read width "DATA_WIDTH+1" bit
---------------------------------------------------------------------//备注方式和深度和写读的宽度
xpm_fifo_async #(
	.CDC_SYNC_STAGES		(2							),	// DECIMAL
	.DOUT_RESET_VALUE		("0"						),	// String
	.ECC_MODE				("no_ecc"					),	// String
	.FIFO_MEMORY_TYPE		("distributed"			),	// String auto block distributed
	.FIFO_READ_LATENCY	(1							),	// DECIMA
	.FIFO_WRITE_DEPTH		(ASYNC_FIFO_DEPTH			),	// DECIMAL
	.FULL_RESET_VALUE		(1							),	// DECIMAL
	.PROG_EMPTY_THRESH	(ASYNC_FIFO_DEPTH/32		),	// DECIMAL
	.PROG_FULL_THRESH		(ASYNC_FIFO_DEPTH/32*31	),	// DECIMAL
	.RD_DATA_COUNT_WIDTH	(log2(ASYNC_FIFO_DEPTH)+1),	// DECIMAL
	.READ_DATA_WIDTH		(DATA_WIDTH+1				),	// DECIMAL
	.READ_MODE				("std"						),	// String
	.RELATED_CLOCKS		(0							),	// DECIMAL
	.SIM_ASSERT_CHK		(1							),	// DECIMAL;
0=disable simulation messages, 1=enable simulation messages
	.USE_ADV_FEATURES		("1000"					),	// String
	.WAKEUP_TIME			(0							),	// DECIMAL
	.WRITE_DATA_WIDTH		(DATA_WIDTH+1				),	// DECIMAL
	.WR_DATA_COUNT_WIDTH	(log2(ASYNC_FIFO_DEPTH)+1) 	// DECIMAL
	)

fifo_sd_20to10bit_tx0_inst (
	.wr_clk				(vdo_in_clk				),
	.rst					(reset_vinclk				),
	.wr_en					(fifo_wren					),
	.din					(fifo_wrdata				),
	.full					(fifo_full					),
	.almost_full			(							),   
	.prog_full				(							),
	.wr_ack				(							),
	.wr_data_count		(							),
	.wr_rst_busy			(							),
	.overflow				(							),
	//--------------------------------------------//
	.rd_clk				(gt_txclk					),
	.rd_en					(fifo_rden					),
	.dout					(fifo_rddata				),
	.data_valid			(fifo_dvalid				),
	.empty					(fifo_empty				),
	.almost_empty			(							),
	.prog_empty			(							),
	.rd_data_count		(fifo_rddata_cnt			),
	.rd_rst_busy			(							),
	.underflow				(							),
	//--------------------------------------------//	
	.sleep					(							),
	.injectdbiterr		(							),
	.injectsbiterr		(							),
	//--------------------------------------------//	
	.sbiterr				(							),
	.dbiterr				(							)	  
    );

2、参数介绍

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3、技巧方法

1、先把各个端口介绍,含义搞清楚
2、然后对应项目,把端口的具体值对应到项目中
3、按照格式,书写FIFO
4、编译生成bit文件再烧录到板子上即可

三、参考链接

fifo介绍及fifo IP核使用(工程文件获取请参考文末)
FIFO用法详解(附有代码)
XPM_ASYNC_FIFO学习笔记02

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FIFO的使用攻略(一看就会) 的相关文章

  • DDR3学习总结(一)

    简介 DDR3 SDRAM常 简称 DDR3 是当今较为常见的一种储存器 在计算机及嵌入式产品中得到广泛应用 特别是应用在涉及到大量数据交互的场合 比如电脑的内存条 对DDR3的读写操作大都借助IP核来完成 本次实验将采用 Xilinx公司
  • PRBS笔记

    1 概述 PRBS 伪随机二进制序列 也称为伪随机码 通常被用来测试高速信号的信号质量 伪随机 也说明了该码流并不是真正的随机 而是具有特性属性 码流由 多项式 决定 具有重复周期 PRBS具有多种阶数 如PRBS7 PRBS15 PRBS
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • FPGA学习笔记_ROM核调用与调试

    FPGA学习笔记 ROM核调用与调试 1 ROM存储器IP核的使用 2 创建 mif文件 3 In system memory content editor内存查看工具的使用 4 Signal tapII工具使用 5 Verilog 代码
  • DEBUG:Generate Bitstream失败

    问题 约束失败 解决 确保IO初始化引脚正确 和选择合适的电平
  • 跨时钟域处理方法(一)——打拍

    一 说明 处理跨时钟域的数据可以分为单bit数据和多bit数据 而打拍的方法主要常见于处理单bit数据的跨时钟域问题 打拍的本质是通过添加寄存器 对输入的数据进行延拍 其主要目标是消除亚稳态的影响 常见的是打2拍 也就是添加2级寄存器 二
  • 【FPGA】:频率测量

    转载 1 FPGA频率测量的三种方法 直接测量法 间接测量法 等精度测量法
  • 数码管电子时钟

    文章目录 前言 一 回顾数码管 二 任务描述 三 系统框图 四 模块调用 五 模块原理图 六 工程源码 6 2 时钟计数模块代码 6 2 数码管驱动模块代码 6 3 顶层模块代码 七 仿真测试 7 1 测试代码 7 2 仿真结果 八 管脚信
  • FIFO读写控制

    如果在两个模块之间传输数据 两个模块之间的处理速率不同 会导致采集数据的遗漏或错误 在他们之间加一个数据缓存器 所有数据先经过缓存器缓存 再输入数据接送模块 创建两个模块 一个 作为发送模块 一个作为接受模块 发送模块检测到 fifo为空开
  • IC数字后端

    在 innovus 里面 有时候我们需要控制 tie cell 的 fanout 和 net length 来避免 tie cell 可能出现 max transition 或者 max fanout 的违例 一般来说 只要 fanout
  • FPGA_时钟显示(时钟可调)

    1 实验说明 在数码管显示数据的基础上 让六位数码管显示数字时钟 并且通过按键可以对时间进行修改 实验目标 六位数码管分别显示时间的时分秒 且通过按键可实现加减调整时间及清零功能 key1 切换键 选择待调整的时间单位 时 分 秒 key2
  • ALLEGRO等长时如何将PIN DELAY和VIA长度计算在内

    在PCB设计中 对于时序要求严格的线路 Via和IC pin delay的长度必须得到重视 通过下面的操作 可将Via和Pin delay加入到线路长度的计算中 1st 计算Pin delay 打开Constraint Manager 选择
  • 【FPGA】通俗理解从VGA显示到HDMI显示

    注 大部分参考内容来自 征途Pro FPGA Verilog开发实战指南 基于Altera EP4CE10 2021 7 10 上 贴个下载地址 野火FPGA Altera EP4CE10征途开发板 核心板 野火产品资料下载中心 文档 hd
  • 【电子技术】什么是LFSR?

    目录 0 前言 1 数学基础 1 1 逻辑异或 1 2 模2乘法 和 模2除法 2 线性反馈移位寄存器LFSR 3 抽头和特征多项式 4 阶线性反馈移位寄存器实例 0 前言 线性反馈移位寄存器 Linear Feedback Shift R
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • Matlab图像处理系列——图像复原之噪声模型仿真

    微信公众号上线 搜索公众号 小灰灰的FPGA 关注可获取相关源码 定期更新有关FPGA的项目以及开源项目源码 包括但不限于各类检测芯片驱动 低速接口驱动 高速接口驱动 数据信号处理 图像处理以及AXI总线等 本节目录 一 图像复原的模型 二
  • Vivado ILA的debug信息保存与读取

    保存 write hw ila data D Project FPGA ILA Debug Data 202401041115 ila upload hw ila data hw ila 1 读取 display hw ila data r
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573
  • ESP10B 锁定连接器

    ESP10B 锁定连接器 ESP10B 电机新增内容包括双极型号标准 NEMA 尺寸 17 23 和 34 的步进电机现在包括输出扭矩范围从 61 盎司英寸到 1291 盎司英寸的双极型号 该电机配有带锁定连接器的尾缆 可轻松连接 每转可步

随机推荐

  • C# 连接mySQL数据库访问异常:“给定关键字不在字典中”解决方案

    在自己电脑上开发的软件连接本机mysql数据库一切正常 部署到客户那边 运行时报异常 给定关键字不在字典中 原因 本机MySql数据库和客户那边的数据库版本不一致 使用的mysql data dll版本太低导致的 解决 更换mysql da
  • 深入理解Java内存模型

    作者 谢照东 链接 https www zhihu com question 29037280 answer 43136323 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 我只是编码界的搬运工 深入理解J
  • 淘宝APP用户行为数据分析案例(附python代码及注释)

    淘宝APP用户行为数据分析案例 一 分析背景与目的 1 1背景与数据限制 电商平台的最核心的功能就是为买卖双方提供高效和体验良好的交易服务 得益于算法技术的发展 淘宝APP给买方提供了搜索 推荐及广告等系统和功能 使用户能高效地触达感兴趣或
  • 电力电子技术笔记-整流电路5

    电容滤波的不可控整流电路 在交 直 交变频器 不间断电源 开关电源等应用场合中 大量应用 最常用的是单相桥和三相桥两种接法 由于电路中的电力电子器件采用整流二极管 故也称这类电路为二极管整流电路 1 电容滤波的单相不可控整流电路 常用于小功
  • hugging face 官方文档——datasets、optimizer

    文章目录 一 Load dataset 1 1 Hugging Face Hub 1 2 本地和远程文件 1 2 1 CSV 1 2 2 JSON 1 2 3 text 1 2 4 Parquet 1 2 5 内存数据 python字典和D
  • 关于操作系统学习路线分析

    自己学习操作系统的时间也挺长了 虽然目前的成果还不是特别明显 但是在这段时间中还是学习了很多 今天想在这里和大家分享一下如何学习操作系统 以及如何制定学习操作系统的路线 以下是针对有过编程经历的 1 首先操作系统是人机交互的代理 那么作为操
  • 记录错误:cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-h4wtvo23\opencv\m

    使用Opencv时出现错误 cv2 error OpenCV 4 4 0 C Users appveyor AppData Local Temp 1 pip req build h4wtvo23 opencv modules imgproc
  • LTE学习笔记2:DMA多分址,制式,速率,性能指标

    1 DMA division multiple access 分多址 多址方式 TDMA 时分多址 FDMA 频分多址 CDMA 码分多址 SDMA 空分多址 PDMA 包分多址 3G技术 TD SCDMA TDD WCDMA FDD CD
  • windows通过wsl2安装ubuntu系统

    wsl Windows Subsystem for Linux 即用于Windows的安装Linux子系统 实现了在windows 10 或 windows 11上运行原生Linux系统的功能 wsl2 为其最新版本 可以更好的在Windo
  • 华为OD机试 - 消消乐游戏(Java)

    题目描述 游戏规则 输入一个只包含英文字母的字符串 字符串中的两个字母如果相邻且相同 就可以消除 在字符串上反复执行消除的动作 直到无法继续消除为止 此时游戏结束 输出最终得到的字符串长度 输入描述 输入原始字符串 str 只能包含大小写英
  • python音频分析工具_python – 鸟鸣音频分析 – 查找两个剪辑的匹配程度

    要做出这个答案 因为评论太久了 我基本上在这个领域工作 所以我觉得我有一些知识 显然 从我的立场来看 我建议使用音频而不是图像 我还建议使用MFCC作为特征提取 您可以将其视为总结 表征音频特定子带的系数 因为它们 GMM是去的 要执行此任
  • SSM入门—SpringMVC框架

    1 SpringMVC概述 Spring Web MVC 是一种基于Java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架 2 MVC的设计模式 M model 模型 业务模型 数据模型 实体 业务代码 数据代码 V View
  • websocket(一)--握手

    最近在琢磨怎么实现服务端的消息推送 因为以前都是通过客户端请求来获取信息的 如果需要实时信息就得轮询 比如通过ajax不停的请求 websocket相当于对HTTP协议进行了升级 客户端和服务端通过websocket协议握手成功后 两者之间
  • 动态内存管理—(malloc、calloc、realloc、free)及常见使用错误

    目录 存在动态内存分配的意义 动态内存函数的介绍 malloc和free calloc realloc realloc在调整内存空间的是存在两种情况 由于上述的两种情况 realloc函数的使用就要注意一些 补充一点 常见的动态内存错误 对
  • 关于Q格式数据总结

    Q格式表示为 Qm n 表示数据用m比特表示整数部分 n比特表示小数部分 共需要 m n 1位来表示这个数据 多余的一位用作符合位 假设小数点在 n位的左边 从右向左数 从而确定小数的精度 例如Q15表示小数部分有15位 一个short 型
  • 为什么有些人年纪轻轻就赚到了很多钱?富人的底层逻辑是什么?

    在 史记 司马迁的书中 除开项羽本纪 秦始皇本纪 高祖本纪英雄的叙述以外 还有一个十分关键的章节目录 那便是 货殖列传 这一章节 十分详尽的纪录那时候商业服务 经济发展 买卖的状况 也体现了司马迁对财富和化学物质的观点 简言之 便是一部有关
  • 安全服务工程师面试题

    文章目录 你如何保护系统和网络免受恶意攻击 你会使用哪些工具和技术 你对密码安全有什么了解 你如何确保用户密码的安全 你如何保护敏感数据和机密信息的安全性 你会使用哪些技术 你如何识别和应对网络威胁 你使用哪些工具和技术 你如何进行网络安全
  • 运行应用程序,提示无法正常启动(0xc000007b)的解决办法

    本文转载自VBcom大牛的博客 感谢VBcom 最后更新 2019 2 28 如图 0xc000007b这个错误使无数玩家烦恼 问题描述 出现这个错误 可能是硬件的问题 也可能是软件的问题 但是 由于硬件引起该问题的概率很小 并且除了更换硬
  • Linux Kernel 编译流程 (一)

    1 config 文件产生 研究Linux Kernel config文件的产生 添加自己的配置 Linux Kernel 4 18 20 Source Insight 3 5 Ubuntu 18 04 arm linux gnueabi
  • FIFO的使用攻略(一看就会)

    一 IP核的方式 1 打开IP核 含义 FIFO是一个先进先出的存储队列 与其他RAM不同的是FIFO没有地址 先入先出 作用 作用就是作为数据的队列通道 让数据暂时缓存 以等待读取 用于异步FIFO模块来实现接口 接口双方都在自己的时钟下