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.mfbz.cn/a/588194.html

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

相关文章

9U_VPX信号处理机,传感器大数据异构计算平台

9U_VPX信号处理机 1 介绍 1.1 产品概述 9U_VPX信号处理机是一款面向前端射频系统的高速记录、存储和处理系统。信号处理机为应对军用电子信息系统面临的目标种类多样化、战场环境复杂化、执行任务多元化等多重难题,而研发出来的***数据记录存储系统。信号处理机担…

2024年五一数学建模C题完整解题思路代码

2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而,随着开采深度的增加,地应力增大,井下煤岩动力灾害风险越来越大,严重影响着煤矿的安全高效开采。在各类深…

Flutter 弃用 WillPopScope 使用 PopScope 替代方法

Flutter 弃用 WillPopScope 使用 PopScope 替代方法 视频 https://youtu.be/u3qdqUvFWiM https://www.bilibili.com/video/BV1aJ4m1n7FZ 前言 原文 https://ducafecat.com/blog/migrating-from-willpopscope-to-popscope-in-flutter 了解如何在 Flutter 3.16 中将弃用的 Wil…

【UnityRPG游戏制作】Unity_RPG项目之场景环境搭建和解析

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

Java:Thread类及常见方法大全(画图+源码详解)

Thread 类是 JVM 用来管理线程的一个类,每一个线程都有一个唯一的 Thread 类与之关联。Java中通常使用 Thread类来进行线程调度,线程管理。 目录 一、Thread 的常见构造方法 二、Thread 的几个常见属性 理解线程是否存活: 理解前台线程与…

详解SDRAM基本原理以及FPGA实现读写控制

文章目录 一、SDRAM简介二、SDRAM存取结构以及原理2.1 BANK以及存储单元结构2.2 功能框图2.3 SDRAM速度等级以及容量计算 三、SDRAM操作命令3.1 禁止命令: 4b1xxx3.2 空操作命令:4b01113.3 激活命令:4b00113.4 读命令:4b01013.5 写…

【蓝牙协议栈】【BR/EDR】传统蓝牙 command/event/acl/sco/iso 命令格式解析

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论 2. 欢迎大家关注和订阅,【精讲蓝牙协议栈】、【精讲BLE协议栈】和【Android Bluetooth Stack】专栏会持续更新中…

Java进阶-Java Stream API详解与使用

本文全面介绍了 Java Stream API 的概念、功能以及如何在 Java 中有效地使用它进行集合和数据流的处理。通过详细解释和示例,文章展示了 Java Stream API 在简化代码、提高效率以及支持函数式编程方面的优势。文中还比较了 Java Stream API 与其他集合处理库的异同&…

【氮化镓】GaN器件在航天器高可靠正向转换器中应用

文章是发表在《IEEE Journal of Emerging and Selected Topics in Power Electronics》2022年10月第10卷第5期上的一篇关于GaN(氮化镓)器件在航天器高可靠性正向转换器中应用的研究。文章的作者是匹兹堡大学电气与计算机工程系的Aidan Phillips, Thomas Cook和Brandon M. Gra…

c#word文档:3.向Word文档中插入表格/4.读取Word文档中表格

--向Word文档中插入表格-- (1)在OfficeOperator项目的WordOperator类中定义向Word文档插入换页的函数NewPage (2)在WordOperator类中定义向Word文档插入表格的函数InsertTable using Microsoft.Office.Interop.Word;// 引入Mic…

Day27:阻塞队列、Kafka入门、发送系统通知、显示系统

阻塞队列BlockingQueue BlockingQueue 解决线程通信的问题。阻塞方法:put、take。 生产者消费者模式 生产者:产生数据的线程。消费者:使用数据的线程。 (Thread1生产者,Thread2消费者) 实现类 ArrayBlockingQueueLinkedBlockingQueuePr…

MATLAB 数据导入

MATLAB 数据导入(ImportData) 在MATLAB中导入数据意味着从外部文件加载数据。该importdata功能允许加载不同格式的各种数据文件。它具有以下五种形式 序号 功能说明 1 A importdata(filename) 从filename表示的文件中将数据加载到数组A中。 2 A i…

Electron+Vue3+Vite+ElectronForge整合-全部ts开发 - 一键启动两个服务 一键打包两个服务

说明 本文介绍一下 Electron Vue3 Vite Electron Forge 的高级整合操作。vue3 : 使用 TS 的语法开发; Electron : 使用 TS 的语法开发。 补充 : 目前Electron的开发还是以JS为主,不过我们可以直接使用TS开发,在执行和打包时&a…

UE5 蓝图入门

基础节点创建: 常量: 按住 1 ,点击鼠标左键,创建常量 二维向量: 按住 2 ,点击鼠标左键,创建二维向量 三维向量: 按住 3 ,点击鼠标左键 按 c 键打出一个注释框 参考视…

C# Winform父窗体打开新的子窗体前,关闭其他子窗体

随着Winform项目越来越多,界面上显示的窗体越来越多,窗体管理变得更加繁琐。有时候我们要打开新窗体,然后关闭多余的其他窗体,这个时候如果一个一个去关闭就会变得很麻烦,而且可能还会出现遗漏的情况。这篇文章介绍了三…

HR招聘测评,如何进行人才测评?

说起“人才测评”几个字,相信大家都不会陌生,很多人,尤其是求职者来说,则更加熟悉。在求职应聘中,已经有越来越多的企业开始采用人才测评进行人员选拔。了解人才测评的含义,知道人才测评如何进行&#xff0…

打破失联困境:门店如何利用AI智能名片B2B2C商城小程序重构与消费者的紧密连接?

在如今这个消费者行为日益碎片化的时代,门店经营者们时常感叹:消费者进店如同一场不期而遇的缘分,然而一旦离开门店,就仿佛消失在茫茫人海中,难以再觅其踪迹。这种“进店靠缘分,离店就失联”的困境&#xf…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具,它帮助用户快速在本地运行大模型。通过简单的安装指令,用户可以执行一条命令就在本地运行开源大型语言模型,如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

平面模型上提取凸凹多边形------pcl

平面模型上提取凸凹多边形 pcl::PointCloud<pcl::PointXYZ>::Ptr PclTool::ExtractConvexConcavePolygons(pcl::PointCloud<pcl::PointXYZ>::Ptr cloud) {pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZ>);p…

政安晨:【Keras机器学习示例演绎】(二十八)—— 使用 卷积神经网络与循环神经网络 架构进行视频分类

目录 数据收集 设置 定义超参数 数据准备 序列模型 推论 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正…
最新文章