FIFO Generate IP核使用——Native Ports页配置

在使用FIFO Generate IP核时,如果在Basic选项页选择了Naitve接口,就需要配置Native Ports页,该页提供了针对FIFO核心的性能选项(读取模式)、数据端口参数、ECC(错误检查和纠正)以及初始化选项。
在这里插入图片描述

1 Read Mode

Read Mode通常指的是FIFO(First In First Out,先进先出)在读取数据时的操作方式。当选择使用Block RAM或Distributed RAM作为FIFO时,会有不同的读取模式可供选择。

1.1 Standard FIFO

FIFO实现的是具有标准延迟且不使用输出寄存器的FIFO。数据按照先进先出的顺序从FIFO中读取,但不会在输出端口提前显示即将输出的数据。

当用户请求读取数据时,数据会在下一个时钟周期被提供给用户。换句话说,请求和数据的交付之间存在一个时钟周期的延迟。

对于Standard FIFO读取操作,当读取使能(rd_en)被置位,并且FIFO不为空时,FIFO中存储的下一个数据会被驱动到输出总线(dout)上,并且有效标志(VALID)也会被置位。

工作流程
(1) 写入数据:当至少有一个数据字被写入FIFO时,空标志(empty)会被撤销,表示FIFO中有数据可供读取。
(2) 读取使能:当读取使能信号rd_en被置位时,一个读取操作会在下一个rd_clk(读取时钟)的上升沿发生。
(3) 读取数据:在读取操作的时钟周期,FIFO将下一个可用的数据字输出到dout,并且置位VALID标志,表示一个成功的读取操作已经完成。
(4) FIFO为空:当FIFO中的最后一个数据字被读取后,FIFO会置位empty标志,表示FIFO为空。
(5) 读取请求无效:如果当empty被置位时继续置位rd_en,读取请求将被忽略,VALID会被撤销,并且可能会置位下溢标志(underflow),表示FIFO已经尝试读取一个不存在的数据字。
(6) 恢复读取:当执行写入操作后,FIFO会撤销empty标志,允许恢复有效的读取操作,这通常通过置位VALID和撤销underflow来表示。

图3-3展示了标准读取访问的流程图或时序图。在这个图中,可以看到读数据信号被置位后如何在下一个时钟周期将数据从dout读取出来,并且置位VALID标志。
在这里插入图片描述
Standard FIFO读取操作提供了一种简单而可靠的方式来从FIFO中读取数据。通过监控empty、VALID和underflow等标志,可以确保读取操作在FIFO非空时进行,并且在FIFO为空时避免无效的读取请求。

1.2 First-Word Fall-Through FIFO

First-Word Fall-Through FIFO 是使用了带有寄存器输出的读取操作,允许在不执行读取操作的情况下“预览”FIFO中的下一个数据字。当FIFO中有数据可用时,第一个数据字会自动出现在输出总线(dout)上。一旦第一个数据字出现在dout上,空标志(empty)就会被撤销,表示FIFO中有一个或多个可读的数据字,并且有效标志(VALID)会被置位,表示dout上存在一个有效的数据字。这种模式增加了FIFO的有效读取深度,并允许数据在读取使能有效之前就已经准备好。

当用户请求读取数据时,数据会在同一时钟周期内被提供给用户,请求和数据的交付之间没有延迟,从而提高了数据处理的效率。

工作流程
(1) 初始状态:当FIFO不为空时,下一个可用的数据字会自动出现在输出总线dout上,并且VALID被置位。
(2) 读取使能:当读取使能信号rd_en被置位时,在下一个rd_clk的上升沿,下一个数据字会被放到dout上。
(3) 读取最后一个数据字:当最后一个数据字被放到dout上后,如果再次发起读取请求,dout上的数据会变得无效,这由VALID的撤销和empty的置位来表示。此时,如果继续尝试从FIFO中读取数据,将会导致下溢(underflow)条件。

空标志的处理
与standard读取模式不同,First-Word Fall-Through模式下的empty标志是在读取完最后一个数据字后被置位的。当empty被置位时,VALID会被撤销。在标准读取模式下,当empty被置位时,VALID会在一个时钟周期内被置位。

有效读取深度
与standard模式相比,该模式增加了FIFO的有效读取深度,使得FIFO能够多存储两个数据字以供读取。

写入与读取的关系
对于每一个写入操作,都需要相应数量的读取操作来清空FIFO。这对两种读取操作模式都适用。

图3-4展示了First-Word Fall-Through读取操作的时序图。在这个图中,可以看到数据如何自动出现在dout上,以及当rd_en被置位时,如何在下一个时钟周期将数据从dout读取出来。同时,还可以看到empty和VALID标志如何随着数据的读取而变化。
在这里插入图片描述
选择哪种读取模式取决于具体的应用需求。如果应用程序可以容忍一个时钟周期的延迟,并且不需要立即访问最新进入FIFO的数据,那么standard 读取操作可能是一个合适的选择。然而,如果应用程序需要立即访问最新进入FIFO的数据,并且对性能有严格要求,那么First-Word Fall-Through读取操作可能更合适。

需要注意的是,虽然First-Word Fall-Through读取操作可以提高数据访问的速度,但它也可能增加FIFO设计的复杂性,并可能需要更多的硬件资源来实现。

2 Data Port Parameters

(1) Asymmetric Port Width(非对称端口宽度):仅对于使用UltraScale设备的Block RAM或Built-in FIFO可用。写入和读取端口的位宽可能不同,这在某些应用中可能是有用的,比如需要同时处理不同位宽的数据时。

(2) Write Width(写入宽度):定义了可以写入FIFO的数据的位宽。有效范围是1到1024位。可以在单个写入操作中将1到1024位的数据发送到FIFO。

(3) Write Depth(写入深度):定义了FIFO可以存储的数据的最大数量。有效范围是16到131072,但只允许深度为2的幂。这确保了FIFO在逻辑上是一个“干净”的结构,因为二进制计数很容易用于管理和跟踪其中的数据。

(4) Read Width(读取宽度):如果选择了block RAM或Built-in FIFO配置,则此参数可用。其有效范围必须遵守非对称端口规则,这意味着读取宽度可能与写入宽度不同,但具体取决于FIFO的配置和应用需求。

(5) Read Depth(读取深度):这是基于写入宽度、写入深度和读取宽度自动计算的。在大多数FIFO设计中,读取深度与写入深度相同,但由于非对称端口的存在,这可能会有所不同。

(6) Low Latency(低延迟):仅当UltraScale设备的Built-in FIFO配置中的深度元素数量超过一个时可用。低延迟模式旨在减少数据从FIFO读取到使用之间的时间延迟,这在需要快速响应的应用中可能是非常重要的。

(7) Low Latency Output Register(低延迟输出寄存器):当选择低延迟选项时,此选项可用。输出寄存器用于在数据从FIFO发送到外部世界之前临时存储数据。在低延迟模式下,这个寄存器可以确保数据尽快到达其目的地,同时仍然保持数据的完整性和准确性。

3 ECC, Output Register and Power Gating Options

ECC(Error Correction Code,错误纠正码)和相关选项在数据存储和处理中扮演着关键角色,特别是在需要高度可靠性和准确性的应用中。

(1) ECC:当启用硬ECC的错误纠正检查功能时,block RAM或Built-in FIFO将设置为全ECC模式,此时编码器和解码器都会被启用。ECC技术通过在数据中添加额外的校验位来检测和纠正错误,从而确保数据的完整性和准确性。

(2) 单比特错误注入(Single Bit Error Injection):在具有ECC功能的Common 和Independent clock block RAM或Built-in FIFO中可用。当使用基于block RAM的FIFO构建时,还可以使用带有ECC逻辑的软ECC选项(Soft ECC)。该功能提供一个输入端口来在写入时注入单个比特错误,并输出一个指示单个比特错误发生的端口。这有助于测试和验证ECC功能的正确性。

(3) 双比特错误注入(Double-Bit Error Injection):同样在具有ECC功能的Common 和Independent clock block RAM或Built-in FIFO中可用。与单比特错误注入类似,它提供输入端口来在写入时注入双比特错误,并输出一个指示双比特错误发生的端口。这进一步增强了ECC功能的测试能力。

(4) ECC流水线寄存器(ECC Pipeline Reg):Built-in FIFO宏在ECC解码器和编码器路径上有一个可选的流水线寄存器。当选择ECC流水线寄存器时,它可以改善FIFO宏的时序并在DOUT上增加一个时钟周期的额外延迟。此外,当对FIFO应用重置时,ECC流水线寄存器会保持先前读取的数据在流水线中。这有助于确保在重置期间数据的连续性和准确性。

(5) 动态功耗门控(Dynamic Power Gating):动态功耗门控是一种节能功能,通过控制睡眠引脚(sleep pin)来使内置FIFO宏保持在睡眠模式,同时保持数据内容不变。在唤醒时间要求之前对FIFO的任何访问都不能得到保证,并且可能会导致内存内容损坏。当睡眠模式激活(即睡眠引脚为高电平)时,写使能(wr_en)和读使能(rd_en)引脚必须保持低电平。在此模式下,内存的数据内容会得到保留。

(6) 输出寄存器(Output Registers):block RAM宏具有Built-in 嵌入式或互联寄存器,可用于流水线数据处理并改善宏的时序。此选项允许用户在FIFO的输出端添加一个流水线阶段,并利用可用的嵌入式寄存器。对于Built-in FIFO,此功能仅支持具有1个FIFO宏深度的同步FIFO配置。
在这里插入图片描述
FIFO生成器还提供了选择嵌入式寄存器和互联寄存器的选项,以便在满足时序要求时获得平滑的延迟。这种灵活性允许用户根据具体的应用需求优化FIFO的性能和功耗。

3 Initialization

初始化中关于FIFO的部分,包含了多种选项和配置。

(1)Reset Pin(复位引脚):
对于使用Block RAM或Distributed RAM实现的FIFO,复位引脚不是必需的,输入引脚也是可选的。在某些情况下,可以通过软件或其他方式实现复位,而无需专门的复位引脚。

(2) Enable Reset Synchronization(启用复位同步):
可选选项,仅适用于Independent clock block RAM或Distributed RAM FIFO。当未选中时,wr_rst/rd_rst是可用的。这有助于确保在多个时钟域之间正确同步复位信号。

(3) Enable Safety Circuit(启用安全电路):
可选选项,仅适用于基于BRAM的FIFO,并且默认启用异步复位。对于AXI接口,安全电路在核心内部自动启用,因为AXI接口中的复位始终是异步的。当选择启用安全电路时,会启用额外的逻辑以确保同步触发器驱动FIFO生成器的输出和BRAM原语的控制信号。

(4} Reset Type(复位类型):
异步复位(Asynchronous Reset):对于使用Distributed 或block RAM实现的Common Clock FIFO,可选选项。异步复位意味着复位信号可以在任何时间断言,而不受时钟信号的限制。
同步复位(Synchronous Reset):可选选项,适用于使用Distributed 或block RAM实现的Common Clock FIFO。同步复位要求复位信号在时钟信号的上升沿或下降沿处断言。

(5) Full Flags Reset Value(满标志复位值):
对于block RAM、Distributed RAM和移位寄存器配置,可以选择在复位期间满标志(prog_full、almost_full和full)的复位值。这有助于在复位后正确地初始化FIFO的状态。

(6) Dout Reset Value(Dout复位值):
这指示当复位被置位时,FIFO输出上断定的十六进制值。它适用于所有使用block RAM、Distributed RAM、移位寄存器或7系列设备的Common Clock built-in FIFO实现,其中启用了嵌入式寄存器选项。如果选择了此选项,当复位被置位时,FIFO的dout输出将复位到定义的dout复位值。如果未选择此选项,FIFO的dout输出将不会受到复位置位的影响,并将保持其先前的值(对于使用内置FIFO的UltraScale架构设备,有一些限制)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

「生存即赚」链接现实与游戏,打造3T平台生态

当前,在线角色扮演游戏(RPG)在区块链游戏市场中正迅速崛起,成为新宠。随着区块链技术的不断进步,众多游戏开发者纷纷将其游戏项目引入区块链领域,以利用这一新兴技术实现商业价值的最大化。在这一趋势中&am…

Flutter笔记:Widgets Easier组件库(8)使用图片

Flutter笔记 Widgets Easier组件库(8):使用图片 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress o…

redis核心数据结构——跳表项目设计与实现(跳表结构介绍,节点类设计,随机层级函数)

跳表结构介绍。跳表是redis等知名软件的核心数据结构,其实现的前提是有序链表,思想的本质是在原有一串存储数据的链表中,间隔地抽出一半元素作为上一级链表,并将抽提出的元素和原先的位置相关联,这样重复下去直到最上层…

前端鼠标放上去显示更多内容demo

参考文献: title - HTML&#xff08;超文本标记语言&#xff09; | MDN (mozilla.org) <div class"up-detail" title"我是二五仔、总督小号、单曲切片人。 你甚至能在音 手 头条 管 港台bili ytb看到嘎的单曲。我是二五仔、总督小号、单曲切片人。 你甚至能…

【Mac】Axure RP 9(交互原型设计软件)安装教程

软件介绍 Axure RP 9是一款强大的原型设计工具&#xff0c;广泛用于用户界面和交互设计。它提供了丰富的功能和工具&#xff0c;能够帮助设计师创建高保真的交互原型&#xff0c;用于展示和测试软件应用或网站的功能和流程。以下是Axure RP 9的主要特点和功能&#xff1a; 交…

acwing算法提高之数据结构--平衡树Treap

目录 1 介绍2 训练 1 介绍 本博客用来记录使用平衡树求解的题目。 插入、删除、查询操作的时间复杂度都是O(logN)。 动态维护一个有序序列。 2 训练 题目1&#xff1a;253普通平衡树 C代码如下&#xff0c; #include <cstdio> #include <cstring> #include …

程序设计基础--C语言【五】

数组 目录 数组 5.1.一维数组 5.1.1.一维数组的引用 5.1.2.一维数组的初始化 5.1.3.一维数组的程序举例 5.2.二维数组 5.2.1.二维数组的定义 5.2.2.二维数组的引用 5.2.3.二维数组的初始化 5.2.4.举例 5.3.字符数组与字符串 5.3.1.字符组的初始化 5.3.2.字符数组…

【介绍下大数据组件之Storm】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

MySQL-分页查询

MySQL分页查询 MySQL 分页查询原则&#xff1a; 在 MySQL 数据库中使用 LIMIT 子句进行分页查询。MySQL 分页中开始位置为 0。分页子句在查询语句的最后侧。 LIMIT子句 SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 开始位置&#xff0c;查询数量;示例&#xff1a; …

Delta lake with Java--利用spark sql操作数据2

上一篇文章尝试了建库&#xff0c;建表&#xff0c;插入数据&#xff0c;还差删除和更新&#xff0c;所以在这篇文章补充一下&#xff0c;代码很简单&#xff0c;具体如下&#xff1a; import org.apache.spark.sql.SaveMode; import org.apache.spark.sql.SparkSession;publi…

C++ | Leetcode C++题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution { public:int uniquePaths(int m, int n) {long long ans 1;for (int x n, y 1; y < m; x, y) {ans ans * x / y;}return ans;} };

附录6-4 黑马优购项目-分类和购物车

目录 1 分类 1.1 接口 1.2 窗口限制 1.3 选中状态样式判断 1.4 点击左侧时右侧会到顶点 1.5 源码 2 购物车 2.1 store 2.2 tabBar徽标 2.3 滑动删除 2.4 结算 2.4.1 结算前登录 2.4.2 结算功能 2.5 触发组件事件 2.6 源码 1 分类 分类最上部是…

11【PS Blender 作图】场景作图 景深

【问题背景】 看下图,是一个插画师的作图,是不是好像现实场景;合理利用景深,让画面好像是3D现实场景 那么如何才能完成这样让人身临其境的画面呢? 大体有两个方法: 【1】2D插画,合理利用景深;如用PS画图,在画图的时候注意 画面构图,让2D的画面,看起来像3D 缺点…

小程序wx.getlocation接口如何开通?

小程序地理位置接口有什么功能&#xff1f; 随着小程序生态的发展&#xff0c;越来越多的小程序开发者会通过官方提供的自带接口来给用户提供便捷的服务。但是当涉及到地理位置接口时&#xff0c;却经常遇到申请驳回的问题&#xff0c;反复修改也无法通过&#xff0c;给的理由…

【免费Java系列】大家好 ,今天是学习面向对象高级的第二天点赞收藏关注,持续更新作品 !

day02——面向对象高级 今天我们继续学习面向对象的语法知识&#xff0c;我们今天学习的主要内容是&#xff1a;多态、抽象、接口。 学会这些语法知识&#xff0c;可以让我们编写代码更灵活&#xff0c;代码的复用性更高。 一、多态 接下来&#xff0c;我们学习面向对象三大…

一文理解前端如何调用后端(java)方法

阅读完文章大约需要3~5分钟 文章目录 一、什么是后端方法路径&#xff1f;二、ajax、axios调用后端方法总结 一、什么是后端方法路径&#xff1f; 这里针对的是 java 后端项目中在 controller 文件夹中的类文件&#xff0c;这类文件的后缀一般都会带有 controller&#xff0c…

Pyspark+关联规则 Kaggle购物篮分析案例

数据集地址&#xff1a;Market Basket Analysis | Kaggle 我的NoteBook地址&#xff1a;pyspark Market Basket Analysis | Kaggle 零售商期望能够利用过去的零售数据在自己的行业中进行探索&#xff0c;并为客户提供有关商品集的建议&#xff0c;这样就能提高客户参与度、改…

【算法刷题日志】模板 前缀和 | C++题解和代码

题目链接&#xff1a;https://www.starrycoding.com/problem/7 题目描述 给定义一个数组 a a a&#xff0c;有 q 1 q1 q1次询问&#xff0c;对于每次询问&#xff1a; 给定两个整数 l , r l, r l,r&#xff0c;求出 a l a l 1 . . . a r a_l a_{l 1} ... a_{r} al​…

GAI工具哪家强?(ChatGPT 4 vs 文心一言)

开始之前&#xff0c; 先来看看 GAI和AI的区别和关系。 AI 和GAI AI 和GAI的概念 AI&#xff08;Artificial Intelligence&#xff09;是人工智能的缩写&#xff0c;是计算机科学的一个分支&#xff0c;旨在使机器像人类一样进行学习和思考。AI技术的研究领域包括机器人、语…

[Python基础知识]05函数和模块

一、函数的定义 格式&#xff1a;def 函数名&#xff08;参数列表&#xff09;: 注&#xff1a; 函数代码块以 def 关键词开头&#xff0c;后接函数标识符名称和圆括号()。即使该函数不需要接收任何参数&#xff0c;也必须保留一对空的圆括号 函数形参不需要声明其类型&#x…