FIFO Generate IP核使用——异步复位

FIFO Generator IP核提供了一个复位输入,当该输入被激活时,它会复位所有的计数器和输出寄存器。对于块RAM或分布式RAM实现,复位FIFO并不是必需的,可以在FIFO中禁用复位引脚。共有两种复位类型选项:异步复位和同步复位。
在这里插入图片描述
异步复位(rst)激活时,会异步地复位所有的计数器、输出寄存器和存储器。当实现复位时,它会在内部与每个相应的时钟域同步,以将FIFO的内部逻辑设置为已知状态。这种同步逻辑允许在IP核内部正确设置复位逻辑的定时,以避免闪烁和亚稳态行为。

在应用复位时,时钟必须可用。如果由于任何原因在复位时丢失了时钟,那么当时钟恢复时必须再次应用复位。违反这一要求可能会导致意外的行为。有时,忙碌信号可能会卡住,可能需要重新配置FPGA。

如果在异步复位时使用的是最慢时钟宽度的一个周期,并且断言发生在最慢时钟上升沿附近,那么复位检测可能无法正确进行,导致意外的行为。为了避免这种情况,总是建议将异步复位断言至少保持3个或C_SYNCHRONIZER_STAGE(以较大者为准)个最慢时钟周期。

1 使用RAM(BRAM)、分布式RAM(Distributed RAM)和移位RAM(Shift RAM)时钟时

当使用异步复位时,确保在两次连续复位之间有至少6个时钟周期(在独立时钟情况下为较慢的时钟)的间隔。以下是对这些类型FIFO在使用异步复位时的一些关键注意事项:

在使用块RAM(BRAM)的异步复位时,提供了一个额外的安全电路选项(如上图所示,Enable Safety Circuit),以确保BRAM输入信号的断言和去断言是同步发生的。如果使用安全电路选项,你需要在应用下一个重置或发起任何写操作之前,等待wr_rst_busy信号从1过渡到0。对于BRAM的DRC(Design Rule Check)警告,如果与异步复位和安全电路相关,可以视为误报。

如果选择了FIFO生成器的安全电路选项,需要确保复位(rst)信号在写/读时钟周期(以较慢者为准)中至少被断言为高(逻辑1)3个或C_SYNCHRONIZER_STAGE(以较大者为准)个周期。

对于AXI接口的异步复位,在IP核内部断言wr_rst_busy,在复位期间,AXI接口可能会暂时不可用,直到wr_rst_busy信号变为0,并且相关的*axi**valid/*axi**ready信号表明接口已准备好。

表3-7定义了块RAM、分布式RAM和移位RAM FIFO在加电和复位状态下输出端口的值。下溢信号(underflow)取决于rd_en(读使能)。如果rd_en被激活且FIFO为空,则下溢信号被激活。同样,溢出信号取决于wr_en(写使能)。如果wr_en被激活且FIFO已满,则溢出信号被激活。
在这里插入图片描述
对于这些FIFO配置,有两种可用的异步复位行为:满标志复位为1和满标志复位为0。根据所选的满标志复位值,复位要求和FIFO的行为是不同的。FIFO的复位需求和行为会根据所选择的满标志复位值(full flags reset value)的不同而有所差异。
在这里插入图片描述
复位是边沿触发的,而不是电平触发的。同步逻辑寻找rst的上升边沿,并为IP核创建一个内部复位。

请注意,异步复位的断言会立即导致IP 核进入预定的复位状态——这不依赖于任何时钟切换。

复位同步逻辑用于确保不同时钟域中的逻辑在同一时间退出复位模式——这是通过将异步复位的去断言同步到适当的时钟域来实现的。这样做可以避免闪烁和亚稳态。这种同步分别在读写时钟上检测到异步复位的上升边沿后,需要三个时钟周期(写或读)来完成。

为了避免意外行为,建议遵循复位时序要求,并在rst被断言/置高时不建议驱动/切换wr_en/rd_en。

满标志复位值为1

在这个配置中,FIFO需要至少一个写/读时钟周期的异步复位脉冲(以较慢者为准)。当在写时钟的上升沿检测到复位时,需要3个写时钟周期来完成适当的复位同步。在这段时间内,full、almost_full和prog_full标志会被复位(asserted)。当复位被撤销后,这些标志在五个时钟周期(wr_clk/clk,取决于使用的是写时钟还是公共时钟)后撤销(deasserted),然后FIFO可以接受写操作。

为了确保在FIFO IP核处于复位状态时不会发生写操作,full和almost_full标志会被复位(asserted)。当FIFO退出复位状态并准备好进行写操作时,full和almost_full标志会撤销(deassert)。这通常发生在异步复位撤销后的约五个时钟周期。

如图3-31所示,提供了复位期间FIFO行为的示例时序图。请注意,在这种配置下,上电(power-up)时的值与复位状态的值是不同的。
在这里插入图片描述
满标志复位值为0

在这个配置中,FIFO需要至少一个写/读时钟周期的异步复位脉冲(以较慢者为准)来完成适当的复位同步。在复位期间,full、almost_full和prog_full标志会被撤销(deasserted)。当FIFO退出复位同步状态后,它准备好进行写操作,这通常发生在异步复位断言后的约五个时钟周期。

2 在7系列中内置FIFO的公共/独立时钟配置时

表3-8 定义了内置FIFO在电源上电和复位状态期间输出端口的值。dout复位值仅支持具有嵌入式寄存器选项的公共时钟内置FIFO。内置FIFO需要至少五个读和写时钟周期的异步复位脉冲。为了确保在所有内置FIFO配置中的一致性,建议为内置FIFO提供至少5个读和写时钟周期的异步复位脉冲。然而,FIFO生成器IP核具有一个内置机制,确保所有内置FIFO的复位脉冲至少持续五个读和写时钟周期。

在复位期间,rd_en(读使能)和wr_en(写使能)端口需要被撤销(即不允许进行读或写操作)。复位断言会导致full和prog_full标志撤销(即不指示FIFO已满或接近满),而empty和prog_empty标志置位(即指示FIFO为空或接近空)。当异步复位被释放后,IP核退出复位状态并准备好进行写操作。如图3-34所示。
在这里插入图片描述
FIFO(First-In, First-Out)的underflow(下溢)和overflow(上溢)信号的行为是依赖于读使能(rd_en)和写使能(wr_en)信号的。

Underflow(下溢)::当FIFO为空(即没有任何数据可读)时,如果读使能(rd_en)信号被断言(即设置为高电平或逻辑真),则FIFO的下溢信号会被触发(断言)。

Overflow(上溢):当FIFO已满(即没有空间写入新数据)时,如果写使能(wr_en)信号被断言(即设置为高电平或逻辑真),并且有一个写操作尝试将数据写入FIFO,则FIFO的上溢信号会被触发(断言)。

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

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

相关文章

Linux——mysql运维篇

回顾基本语句: 数据定义语言 ( DDL ) 。这类语言用于定义和修改数据库的结构,包括创建、删除和修改数据库、表、视图和索引等对象。主要的语句关键字包括 CREATE 、 DROP 、 ALTER 、 RENAME 、 TRUNCATE 等。 create database 数据库 &…

FreeRTOS为什么要区分任务函数和中断函数?

在我们之前的学习中,队列,信号量,互斥量,事件组,任务通知,它们都有两套函数,在任务中使用或在中断中使用。 1.为什么要用两套函数? 情景1: 我们在写队列的时候等待100…

图神经网络实战(9)——GraphSAGE详解与实现

图神经网络实战(9)——GraphSAGE详解与实现 0. 前言1. GraphSAGE 原理1.1 邻居采样1.2 聚合 2. 构建 GraphSAGE 模型执行节点分类2.1 数据集分析2.2 构建 GraphSAGE 模型 3. PinSAGE小结系列链接 0. 前言 GraphSAGE 是专为处理大规模图而设计的图神经网…

一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?

目录 1.Redis 分布式锁 (1)Redis 最普通的分布式锁 (2)RedLock 算法 2.zk 分布式锁 3.redis 分布式锁和zk分布式锁的对比 1.Redis 分布式锁 官方叫做 RedLock 算法,是 Redis 官方支持的分布式锁算法。 这个分布式…

C++ | Leetcode C++题解之第70题爬楼梯

题目: 题解: class Solution { public:int climbStairs(int n) {double sqrt5 sqrt(5);double fibn pow((1 sqrt5) / 2, n 1) - pow((1 - sqrt5) / 2, n 1);return (int)round(fibn / sqrt5);} };

从0到1:商场导览小程序开发笔记一

背景 购物中心与商场小程序:旨在提供便捷的购物、导航、活动报名、服务查询等功能,让用户更好地体验购物和享受服务。通过提供便捷的购物、信息查询和互动预约等功能,提升了商场的服务水平和用户体验,帮助商场与消费者建立更紧密…

mq发送消息之后,业务代码回滚,导致发了一条中奖消息给用户!!

背景是这样的:在一个名为"幸运大转盘"的线上活动中,用户可以通过消耗一定的积分来参与抽奖,有机会赢取各种奖品。这个活动的后台系统使用了消息队列(MQ)来处理用户的抽奖请求和发送中奖消息。 一天&#xf…

linux(ubuntu18.04.2) Qt编译 MySQL(8.0以上版本)链接库 Qt版本 5.12.12及以上 包含Mysql动态库缺失问题

整理这篇文档的意义在于:自己走了很多弯路,淋过雨所以想为别人撑伞,也方便回顾,仅供参考 一、搭建开发环境: 虚拟机(ubuntu-20.04.6-desktop-amd64):Mysql数据库 8.0.36Workbench …

QtWindows任务栏

目录 引言任务栏进度右键菜单缩略图工具栏完整代码 引言 针对Windows系统的任务栏,Qt基于系统的原生接口封装有一些非常见类,如QWinTaskbarButton、QWinTaskbarButton、QWinThumbnailToolBar等,用于利用工具栏提供更多的信息,诸如…

开源电子邮件营销平台 listmonk 使用教程

做产品肯定要做电子邮件营销,特别是面向海外的产品,电子邮件营销已成为企业与客户沟通、建立品牌忠诚度和推动销售的重要工具,可以直接接触到目标受众,提供个性化内容,并以相对较低的成本获得可观的投资回报。你看&…

用HAL库改写江科大的stm32入门例子_1、按键控制led灯

1 如下图设置PB11 管脚 2 设置PB11为下降沿中断: 3 PA1 设置为推挽输出 4、NVIC 开启中断使能: 5、写中断事件: 完整代码如下: void EXTI15_10_IRQHandler(void) {/* USER CODE BEGIN EXTI15_10_IRQn 0 *///torning on the led…

母婴店运用商城小程序店铺的效果是什么

母婴市场规模高,还可与不少行业无缝衔接,尤其是以90后、00后为主的年轻人,在备孕生育和婴儿护理前后等整体流程往往不惜重金且时间长,母婴用品无疑是必需品,商家需要多方面拓展全面的客户及打通场景随时消费路径。 运…

24.5.5(离散化+树状数组,线段树)

星期一: dp题单 背包 第四题 混可乐 cf传送门 思路:条件可演化为每种可乐值为 ai-n,选最少的可乐使总和为0(具体可看官方题解 到这会发现背包并不适合了,其实这是道bfs伪装的背包…

【Linux网络】网络文件共享

目录 一、存储类型 二、FTP文件传输协议 2.1 FTP工作原理 2.2 FTP用户类型 2.3 FTP软件使用 2.3.1 服务端软件vsftpd 2.3.2 客户端软件ftp 2.4 FTP的应用 2.4.1 修改端口号 2.4.2 匿名用户的权限 2.4.3 传输速率 三、NFS 3.1 工作原理 3.2 NFS软件介绍 3.3 NFS配…

数据结构===二叉树

文章目录 概要二叉树的概念分类存储遍历前序中序后序 小结 概要 简单写下二叉树都有哪些内容,这篇文章要写什么 二叉树的概念分类,都有哪些二叉树遍历 对一个数据结构,最先入手的都是定义,然后才会有哪些分类,对二叉…

C语言 | Leetcode C语言题解之第70题爬楼梯

题目: 题解: int climbStairs(int n) {double sqrt5 sqrt(5);double fibn pow((1 sqrt5) / 2, n 1) - pow((1 - sqrt5) / 2, n 1);return (int) round(fibn / sqrt5); }

机器人系统ros2-开发实践05-将静态坐标系广播到 tf2(Python)-定义机器人底座与其传感器或非移动部件之间的关系

发布静态变换对于定义机器人底座与其传感器或非移动部件之间的关系非常有用。例如,最容易推断激光扫描仪中心框架中的激光扫描测量结果。 1. 创建包 首先,我们将创建一个用于本教程和后续教程的包。调用的包learning_tf2_py将依赖于geometry_msgs、pyth…

【负载均衡式在线OJ项目day1】项目结构

一.功能 查看题目列表,在线编程,判题功能,即leetcode的部分功能 二.宏观结构 整个项目是BS模式,客户端是浏览器,和用户交互并向服务器发起请求。 服务端从功能上来说分为两个模块,第一个是OJServer&…

FFmpeg———encode_video(学习)

目录 前言源码函数最终效果 前言 encode_video:实现了对图片使用指定编码进行编码,生成可播放的视频流,编译时出现了一些错误,做了一些调整。 基本流程: 1、获取指定的编码器 2、编码器内存申请 3、编码器上下文内容参数设置 4、…

平平科技工作室-Python-超级玛丽

一.准备图片 放在文件夹取名为images 二.准备一些音频和文字格式 放在文件夹media 三.编写代码 import sys, os sys.path.append(os.getcwd()) # coding:UTF-8 import pygame,sys import os from pygame.locals import* import time pygame.init() # 设置一个长为1250,宽为…