FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

news2024/10/7 18:27:23

本文介绍了FIFO的写操作及Status Flags页的配置信息。

1 FIFO 写入操作

当FIFO的写入使能(write enable)被置位,并且FIFO未满时,数据会从输入总线(din)被添加到FIFO中,并且写入确认(wr_ack)信号会被置位。这表示数据已成功写入FIFO。如果FIFO被连续写入数据而没有进行读取操作,它将会逐渐被数据填满。只有当FIFO未满时,写入操作才是成功的。当FIFO已满,并且又发起了一个写入请求时,这个写入请求会被忽略,并且溢出标志(overflow flag)会被置位。这意味着FIFO中的数据没有因为这次尝试的写入操作而丢失或改变,但写入操作失败了。这种溢出是“非破坏性的”,即它不会导致FIFO中已有的数据丢失或损坏。

图3-2 展示了FIFO写入操作示例:
在这里插入图片描述
步骤1: 初始状态
FIFO不为空也不满,full 和 almost_full 标志均未激活(低电平)。
wr_en(写入使能)未被置位(低电平),等待写入操作。

步骤2: 写入使能
当wr_en被置位(设置为高电平)时,FIFO开始准备在wr_clk(写入时钟)的下一个上升沿执行写入操作。

步骤3: 执行写入
在wr_clk的下一个上升沿,由于FIFO未满,数据从输入总线(din)被写入FIFO。
wr_ack(写入确认)被置位(高电平),表示写入操作成功。

步骤4: FIFO接近满
随着数据的连续写入,FIFO的剩余空间减少。
当FIFO中只剩下一个数据项的空间时,almost_full标志被置位(高电平),表示只能再写入一个数据项。

步骤5: FIFO满
当再写入一个数据项时,FIFO达到其容量极限,full标志被置位(高电平)。
此时,任何新的写入请求都会被忽略,直到FIFO中的数据被读取出去。

步骤6: 溢出条件
如果在full标志置位的情况下尝试写入数据,wr_ack会被去置位(低电平),overflow(溢出)标志被置位(高电平),表示发生了溢出条件。

步骤7: 执行读取操作
一旦从FIFO中读取一个或多个数据项,FIFO的full标志会被去置位(低电平)。
此时,FIFO可以成功执行新的写入操作,wr_ack被激活(高电平),overflow被去置位(低电平),指示溢出条件已消除。

2 FIFO 读取操作

当读取使能被设置为有效状态(通常是高电平)并且FIFO不为空时,数据从FIFO的输出总线(dout)上被读取,并且有效标志(VALID)被置位。如果只有读取操作而没有写入操作,FIFO中的数据会逐渐减少,直到FIFO为空。读取操作在FIFO不为空时是成功的。当FIFO为空且请求读取时,读取操作被忽略,并且下溢标志(underflow flag)被置位,但FIFO的状态没有变化(FIFO下溢是非破坏性的)。

3 Status Flags设置

在这里插入图片描述
3.1 Optional Flags

在下面几个可选项中,用户可以自己选择是高电平有效还是低电平有效。

almost_full
表示在FIFO即将满(通常是只剩下一个或几个数据项的空间)之前的状态。换句话说,当almost_full标志被置位(通常是高电平)时,表示FIFO只能再接受一次或少数几次写入操作,然后就会达到满状态(即full状态)。
almost_full标志对于控制数据流非常有用,因为它允许系统提前知道FIFO即将满,从而可以适当地调整写入速率或触发某种预处理机制(例如,开始读取数据以减少FIFO中的数据量)。
注意:built-in FIFO 不支持almost_full 标志位。

almost_empty
在FIFO中只剩下一个数据项可读时置位,这对于数据流的控制非常有用,因为它允许系统提前知道需要启动新的数据写入操作,或者进行其他预处理以避免FIFO的下溢(underflow)。
注意:built-in FIFO 不支持almost_empty 标志位。

3.2 Handshaking Options

Write Acknowledge
写确认标志(wr_ack)在每次成功的写操作完成后被置位,它表明din端口上的数据已经被存储在FIFO中。这个标志与写时钟(wr_clk)同步,意味着当写时钟的某个边沿到来时,如果写操作成功完成,wr_ack标志就会被置位。

Overflow
当FIFO已满并尝试写入更多数据时,此标志会被置位。

Valid Flag

VALID标志的操作依赖于FIFO的读模式,并且与读时钟(rd_clk)同步。

Standard FIFO 读操作时:VALID标志在每个成功的读操作时在rd_clk的上升沿被置位,并指示dout总线上的数据是有效的。当读请求不成功(即FIFO为空)时,VALID标志不会被置位。

First-Word Fall-Through FIFO读操作时:VALID标志指示当前周期dout输出总线上的数据是有效的。数据不必等待读请求发生就可以出现在dout总线上并保持有效,因为它的逻辑会自动将下一个要读取的数据放置在dout总线上。只要FIFO中有一个或多个数据字,VALID标志就会被置位。当FIFO中没有更多数据字时,VALID标志会被清零。
因此,在进行First-Word Fall-Through FIFO读操作时,通常不需要显式地发起读请求,因为数据会自动出现在dout总线上,并且VALID标志会指示数据的有效性。

underflow flag

当它被置位(通常是高电平)时,表示FIFO已空,但尝试从空的FIFO中读取数据。

3.3 Programmable Flags
该选项主要设置是否产生prog_full和prog_empty标志位。

当FIFO中的条目数达到或超过用户定义的断言阈值时,prog_full将被置位,此时,FIFO仍然可以继续写入数据,直到达到满标志(full)被触发为止。如果FIFO中的条目数减少到否定阈值以下,prog_full将被取消置位。

当FIFO中的条目数小于或等于用户定义的断言阈值时,prog_empty将被置位。如果FIFO中的条目数增加到否定阈值以上,prog_empty被取消置位。

(1) Programmable Full Type

a. 无阈值常量(No Programmable Full Threshold)
不设置阈值,不产生prog_full标志位。
在这里插入图片描述
b. 单一阈值常量(Single threshold constant)
用户设置一个固定的阈值,当FIFO中的条目数达到或超过这个阈值时,可编程满标志(prog_full)将被触发。
在这里插入图片描述
c.单一阈值带专用输入端口(Single threshold with dedicated input port)
除了设置一个固定的阈值外,用户还可以通过一个专用输入端口来动态地改变这个阈值。当FIFO中的条目数达到或超过这个阈值时,prog_full将被触发。
在这里插入图片描述
d. 多个阈值常量(Multiple threshold constant)
用户设置两个阈值:断言阈值和否定阈值(Assert and negate threshold constants,提供迟滞)。当FIFO中的条目数达到或超过断言阈值时,prog_full将被触发。但是,只有当FIFO中的条目数减少到否定阈值以下时,prog_full才会被撤销。这种方式提供了迟滞效果,使得标志在FIFO状态变化时不会立即改变。
在这里插入图片描述
e. 多个阈值带专用输入端口(Multiple threshold with dedicated input port,提供迟滞)
除了设置两个阈值外,用户还可以通过专用输入端口动态地改变这两个阈值。这种方式同样提供了迟滞效果。
注意:Built-in FIFO通常只支持单一阈值常量的可编程满功能。
在这里插入图片描述
(2) Programmable Empty Type

a. 无单一阈值常量(No Programmable Empty Threshold )
不设置阈值,不产生prog_empty 标志位。
在这里插入图片描述
b. 单一阈值常量(Single threshold constant)
用户设置一个固定的阈值,当FIFO中的条目数小于或等于这个阈值时,可编程空标志(prog_empty)将被置位。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/13752d15ec4240e9b5fa0b7fd1739d9f.png
c. 单一阈值带专用输入端口(Single threshold with dedicated input port)
除了设置一个固定的阈值外,用户还可以通过一个专用输入端口来动态地改变这个阈值。当FIFO中的条目数小于或等于这个阈值时,prog_empty将被触发。
在这里插入图片描述
d.多个阈值常量(Multiple threshold constant)
用户设置两个阈值:断言阈值和否定阈值(Assert and negate threshold constants,提供迟滞)。当FIFO中的条目数小于或等于断言阈值时,prog_empty将被触发。但是,只有当FIFO中的条目数增加到否定阈值以上时,prog_empty才会被撤销(否定)。这种方式提供了迟滞效果。
在这里插入图片描述
e.多个阈值带专用输入端口(Multiple threshold with dedicated input port)

除了设置两个阈值外,用户还可以通过专用输入端口动态地改变这两个阈值。这种方式同样提供了迟滞效果。
在这里插入图片描述

4 当使用Independent Clocks Builtin FIFO时

当使用该时钟时,Status Flags选项卡出现了Bulit-in FIFO Options选项。
在这里插入图片描述
主要用于确定在FIFO核心中跨越不同时钟域的逻辑的最优实现。这个选项仅适用于具有独立时钟的内置FIFO。

当FIFO的读操作时钟频率高于写操作时钟频率时,需要特殊的逻辑来确保数据正确地从FIFO中读出,同时不会丢失数据或产生其他错误。读时钟更快一些时,FIFO的设计工具会考虑到读时钟较快的场景,并优化内部逻辑以适应这种时钟差异。

当FIFO的写操作时钟频率高于读操作时钟频率时,也需要特殊的逻辑来确保数据能够正确地写入FIFO,同时不会溢出或产生其他问题。写时钟更快一些时,FIFO的设计工具会考虑到写时钟较快的场景,并优化内部逻辑以适应这种时钟差异。

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

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

相关文章

Spring - 8 ( 10000 字 Spring 入门级教程 )

一: MyBatis 1.1 引入 MyBatis 我们学习 MySQL 数据库时,已经学习了 JDBC 来操作数据库, 但是 JDBC 操作太复杂了. 我们先来回顾⼀下 JDBC 的操作流程: 创建数据库连接池 DataSource通过 DataSource 获取数据库连接 Connection编写要执行带 ? 占位符…

【LLM 论文】CREA-ICL:利用跨语言检索来增强小语种的 ICL 能力

论文:From Classification to Generation: Insights into Crosslingual Retrieval Augmented ICL ⭐⭐⭐⭐ NeurIPS 2023, arXiv:2311.06595 文章目录 论文速读总结 论文速读 有很多外国语言因为其语言复杂性、标记数据集的缺乏以及数据重复等问题,LLM …

【讲解下如何解决一些常见的 Composer 错误】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

【二等奖水平论文】2024五一数学建模C题22页保奖论文+22页matlab和13页python完整建模代码、可视图表+分解结果等(后续会更新)

一定要点击文末的卡片,那是资料获取的入口! 点击链接加入群聊【2024五一数学建模】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&khoTDlhAS5N_Ffp-vucfG5WjeeJFxsWbz&authKey7oCSHS25VqSLauZ2PpiewRQ9D9PklaCxVS5X6i%2BAkDrey992f0t15…

前端高频算法

分析算法排序: 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度: 运行完一个程序所需内存的大小。 执行效率、内存消耗、稳定性 三方面入手。 1. 排序 1.1 冒泡排序 冒泡的过程只涉及相邻数据的交换操作,所以它的空间复杂度为 O(1)。 为了保证…

Deep learning Part Five RNN--24.4.29

接着上期,CBOW模型无法解决文章内容过长的单词预测的,那该如何解决呢? 除此之外,根据图中5-5的左图所示,在CBOW模型的中间层求单词向量的和,这时就会出现另一个问题的,那就是上下文的单词的顺序…

【JVM】class文件格式,JVM加载class文件流程,JVM运行时内存区域,对象分配内存流程

这篇文章本来只是想讲一下class文件格式,讲着讲着越讲越多。JVM这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把…

附录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 分类 分类最上部是…

Flutter笔记:谈Material状态属性-为什么FlatButton等旧版按钮就废弃了

Flutter笔记 谈Material状态属性-为什么FlatButton等旧版按钮就废弃了 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this artic…

免安装SQL管理工具HeidiSQL建库如何选Collation字符校对

免安装SQL管理工具HeidiSQL 文章目录 免安装SQL管理工具HeidiSQL一、安装二、建库因此,通常我们选择: 一、安装 到官方网址:https://www.heidisql.com/ 下载后按不同版本安装或解压,运行目录中的heidisql应用程序。 该工具可以对…

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

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

加州大学欧文分校英语中级语法专项课程02:Adjectives and Adjective Clauses 学习笔记

Adjectives and Adjective Clauses course certificate 本文是 https://www.coursera.org/learn/adjective-clauses 这门课的学习笔记。 文章目录 Adjectives and Adjective ClausesWeek 01: Adjectives and Adjective PhrasesLearning Objectives Adjectives Introduction Le…

基于Java的智慧社团综合管理系统的设计与实现(论文+源码)_kaic

摘 要 随着校园文化的不断丰富,大学里各种社团越来越多,社团活动也越来越频繁,社员也越来越多,而且大学生退社、入社比较频繁,社团管理就显得非常繁琐而又复杂,如果采用人工管理,对管理员来说将是一件很头疼的事情。设…

5个本地流畅运行大模型的免费工具

大家好,随着大型语言模型(LLM)驱动的聊天机器人逐渐普及,给人们的工作和生活带来了前所未有的便利。然而,这种便捷性背后潜藏着个人隐私信息被泄露的风险,例如AI公司会收集聊天记录和元数据来优化模型&…

【Vulhub靶场】Nginx 漏洞复现

Nginx 漏洞复现 一、Nginx 文件名逻辑漏洞(CVE-2013-4547)1、影响版本2、漏洞原理3、漏洞复现 二、Nginx 解析漏洞1、版本信息:2、漏洞详情3、漏洞复现 一、Nginx 文件名逻辑漏洞(CVE-2013-4547) 1、影响版本 Nginx …

mysql 数据转excel文件

mysql 数据转excel文件 缘由 为售后拉取数据,用navicat太墨迹了,用python写一个main方法跑一下; 1.抽取共同方法,封装成传入mysql,直接下载成excel; 2.写入所有sql语句,传入参数; 代…

2024-05-02 商业分析-杭州小万科技-商业模式分析

摘要: 对杭州小万科技的商业模式进行分析,以对其做出客观的评估。 杭州小万科技的资料: 杭州小万科技有限公司 - 企知道 (qizhidao.com) 杭州小万科技有限公司网站备案查询 - 天眼查 (tianyancha.com) 杭州小万科技有限公司 - 爱企查 (baidu.com) ​ 2023年年报:

Android手写自己的路由SDK

实现自己的路由框架 ​ 在较大型的Android app中常会用到组件化技术,针对不同的业务/基础功能对模块进行划分,从上到下为壳工程、业务模块、基础模块。其中业务模块依赖基础模块,壳工程依赖业务模块。同级的横向模块(比如多个业务…

BeanFactory 源码浅析

BeanFactory 功能介绍 BeanFactory 是核心容器,负责管理 Bean 对象 BeanFactory 接口的功能只有一个 getBean() 方法BeanFactory 的实现类(DefaultListableBeanFactory)包含:控制反转、基本的依赖注入、Bean 生命周期的各种功能…

【Python】函数设计

1.联系函数的设计 2.找质数 3.找因子 4.判断水仙花数 5.斐波拉契数列递归调用,并用数组存储已计算过的数,减少重复计算 1、计算利息和本息 编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1…