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

本文介绍了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.mzph.cn/web/6064.shtml

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

相关文章

Mac环境下ollama部署和体验

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于ollama ollama和LLM(大型语言模型)的关系,类似于docker和镜像,可以在ollama服务中管理和运行各种LLM&…

逻辑漏洞:支付逻辑漏洞

目录 1、直接修改商品的价格 2、修改支付状态 3、修改商品数量 4、另类支付 5、修改支付接口 6、重复支付 7、最小支付和最大支付 8、越权支付 9、无线次试用 10、线程并发问题 前两天学习了逻辑漏洞中的越权漏洞,今天开始学习支付逻辑漏洞,这…

数据分析--客户价值分析RFM(分箱法/标准化)

原数据 原数据如果有异常或者缺失等情况,要先对数据进行处理 ,再进行下面的操作,要不然会影响结果的正确性 一、根据RFM计算客户价值并对客户进行细分 1. 数据预处理 1.1 创建视图存储 R、F、M的最大最小值 创建视图存储R 、F、M 的最大最小…

云计算技术概述_2.云计算的服务方式

1.三类典型的服务方式 在对云计算深入理解的基础上,产业界和学术界对云计算的服务方式进行了总结。目前一致认为云计算自上而下具有“软件即服务(Software as a Service)”、“平台即服务(Platform as a Service,Paas&…

Sublime Vim模式配置:q关闭当前标签页

在Sublime安装目录下的->Packages文件夹下新建User文件夹创建文件Vintage.sublime-commands 路径为Sublime安装目录->Packages->User->Vintage.sublime-commands文件内容如下[{"caption": ":w - Save","command": "save"}…

淘宝新店铺一般多久开始有单

淘宝新店铺一般多久开始有单 淘宝推广可以使用3an推客。3an推客(CPS模式)给商家提供的营销工具,由商家自主设置佣金比例,激励推广者去帮助商家推广商品链接,按最终有效交易金额支付佣金,不成交不扣费。是商…

前端框架比较,vue,react,angular该如何选择?

Vue.js、React和Angular这三种流行前端框架的详细比较: Vue.js: 优点: Vue.js 的采用了一个渐进式的设计模型,意味着开发者可以只选择自己需要的模块进行开发,这让Vue.js较为轻巧和灵活。学习曲线相对较低,…

堆排序以及TOP-K问题

片头 嗨!小伙伴们,大家好!今天我们来深入理解堆这种数据结构,分析一下堆排序以及TOP-K问题,准备好了吗?我要开始咯! 一、堆排序 这里我们先假设要排成升序,也就是从左到右&#xf…

php字符串变量和常见的字符串函数

在 PHP 中,字符串变量用于存储文本数据。你可以使用单引号()、双引号(")或定界符(heredoc 或 nowdoc)来定义字符串。下面是一些关于 PHP 字符串变量的重要点和示例: 1. 单引号…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接:740. 删除并获得点数 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种,但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…

QT-this关键字

在 C 中&#xff0c; this 关键字是一个指向调用对象的指针。它在成员函数内部使用&#xff0c;用于引用调用该函数的 对象。使用 this 可以明确指出成员函数正在操作的是哪个对象的数据成员。 #include <iostream>#include <string>using namespace std;class Ca…

【面试经典 150 | Kadane】环形子数组的最大和

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;求最大非空子数组和最小子数组和 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及…

Pytorch框架下的CNN和RNN

1.CNN 建立了3层&#xff08;3层2层1层全连接层&#xff09;。分别是conv1、conv2和分类问题中的全连接层线性层out class CNN(nn.Module):def __init__(self):super(CNN, self).__init__()self.conv1 nn.Sequential( # input shape (1, 28, 28)nn.Conv2d(in_channe…

C++:输入输出运算符重载

在C中&#xff0c;输入输出运算符是用于从标准输入设备&#xff08;通常是键盘&#xff09;读取数据或将数据输出到标准输出设备&#xff08;通常是屏幕&#xff09;的运算符。常用的输入输出运算符包括&#xff1a; 输入运算符 (>>)&#xff1a; 用于从输入流&#xff0…

逻辑漏洞:水平越权、垂直越权靶场练习

目录 1、身份认证失效漏洞实战 2、YXCMS检测数据比对弱&#xff08;水平越权&#xff09; 3、MINICMS权限操作无验证&#xff08;垂直越权&#xff09; 1、身份认证失效漏洞实战 上一篇学习了水平越权和垂直越权的相关基本知识&#xff0c;在本篇还是继续学习&#xff0c;这…

深度学习:基于Keras,使用长短期记忆人工神经网络模型(LSTM)对股票市场进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

Electron-Builder 打包 Vue 项目避坑指南

最近在开发一个基于 Vue 的 Electron 项目&#xff0c;在打包时遇到了诸多问题&#xff0c;为了解决这些问题也查阅了非常多的资料&#xff0c;排除了很多坑。现在将可能遇到的问题整理成避坑指南&#xff0c;供大家参考&#xff08;此避坑指南后续还会继续更新&#xff09;。 …

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《计及高阶方程分段线性化的港口电-氢综合能源系统优化调度》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

Django运行不提示网址问题

问题描述&#xff1a;运行django项目不提示网址信息&#xff0c;也就是web没有起来&#xff0c;无法访问。 (my-venv-3.8) PS D:\Project\MyGitCode\public\it_blog\blog> python .\manage.py runserver INFO autoreload 636 Watching for file changes with StatReloader …

clang:在 Win10 上编译 MIDI 音乐程序

先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 访问 Swift.org - Download Swift 找到 Windows 10&#xff1a;x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ &#xff0c;安装后大约占…