翻译:How do I reset my FPGA?

文章目录

  • 背景
  • 翻译:How do I reset my FPGA?
    • 1、Understanding the flip-flop reset behavior
    • 2、Reset methodology
    • 3、Use appropriate resets to maximize utilization
    • 4、Many options
    • 5、About the author


背景

在写博客《复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)》时,
笔者遇到了一篇文章《How do I reset my FPGA?》,相逢是缘,决定将它阅读一下。
在这里插入图片描述基于此,考虑到这篇文章是英文写的,就进行简单翻译下,供诸位道友参考,记作此文。

说明1:翻译水平有限,如果文章有误,欢迎大家指出、讨论,笔者也会积极改正,希望大家一起进步!

参考文献:《How do I reset my FPGA?》


翻译:How do I reset my FPGA?

在这里插入图片描述在FPGA设计中,复位信号充当一种同步信号,用于将所有存储元件设置到已知状态。在数字设计中,设计者通常会实现一个全局复位信号作为外部引脚,以便在上电时对设计进行初始化。全局复位引脚与其他输入引脚类似,通常被异步地应用于FPGA。然后,设计者可以选择在FPGA内部使用这个信号来异步或同步地对他们的设计进行复位。

在这里插入图片描述但是,在一些提示和技巧的帮助下,设计者将找到可以用来选择更合适的复位结构的方法。一个优化的复位结构可以提升FPGA中的器件利用率、时序性能和功耗表现。

1、Understanding the flip-flop reset behavior

在这里插入图片描述在深入探讨复位技术之前,理解FPGA中slice内的触发器的行为至关重要。在Xilinx的7系列架构中,每台设备中的每个slice结构中包含八个寄存器,而且这些寄存器均为D型触发器。这些触发器公用一个共同的控制集。

在这里插入图片描述触发器的控制集包括时钟输入(CLK)、高电平有效的芯片使能(CE)和高电平有效的SR端口。触发器中的SR端口可以作为 同步置位/复位端口 或 异步预置/清零端口 (见图1)。
在这里插入图片描述在这里插入图片描述可以编译出触发器的RTL代码也会编译出触发器将使用的复位类型。如图2a所示,当复位信号出现在RTL进程的敏感列表中时,代码会编译出一个异步复位。综合工具会编译出一个触发器,其SR端口配置为预置或清零端口,由FDCE或FDPE触发器原语表示。当SR端口被断言时,触发器的输出会立即被强制为触发器的SRVAL属性值。
在这里插入图片描述在这里插入图片描述在同步复位的情况下,综合工具会编译出一个触发器,其SR端口被配置为置位或复位端口,由FDSE或FDRE触发器原语表示。当SR端口被断言时,触发器的输出会在时钟的下一个上升沿被强制为触发器的SRVAL属性值。

在这里插入图片描述此外,你还可以将触发器的输出初始化为INIT属性指定的值。INIT值在配置期间以及在全局置位/复位(GSR)信号被断言时加载到触发器中。

在这里插入图片描述Xilinx FPGA中的触发器可以支持 异步/同步 复位/置位 控制。然而,底层的触发器一次只能实现一个自带的 置位/复位/预置/清零 功能。如果在RTL代码中编写多个 置位/复位/预置/清零 条件,将会导致其中一个条件使用触发器的SR端口来实现,而其他的条件则通过FPGA的逻辑资源来实现,从而占用更多的FPGA资源。

在这里插入图片描述如果其中一个条件是同步的,另一个是异步的,那么异步条件将由触发器的SR端口实现,而同步条件将通过逻辑资源来实现。一般来说,最好避免使用多个 置位/复位/预置/清零 条件。此外,每个slice中每四个触发器一组,其SR端口是同步还是异步,仅由一个(控制集的)属性决定。

2、Reset methodology

在这里插入图片描述无论使用哪种复位类型(同步或异步),通常都需要将复位信号与时钟同步。只要全局复位脉冲的持续时间足够长,设备中的所有触发器都将进入复位状态。然而,复位信号的撤销必须满足触发器的时序要求,以确保触发器能够干净地从复位状态转换到正常状态。如果未能满足这一要求,可能会导致触发器进入亚稳态。

在这里插入图片描述此外,为了确保某些子系统的正确运行(如状态机和计数器),所有触发器必须在同一时钟沿撤销复位。如果同一状态机的不同位在不同的时钟沿撤销复位,状态机可能会进入非法状态。这进一步强调了撤销复位信号与系统时钟同步的必要性。

在这里插入图片描述对于在给定时钟域中使用同步复位方法的设计而言,仅需使用标准的亚稳态解决电路(两个背靠背的触发器)将全局复位引脚同步到特定的时钟域即可。然后,这个被同步后的复位信号可以通过触发器上的同步SR端口初始化该时钟域中的所有存储元件。由于同步器和需要被复位的触发器都在同一个时钟域,时钟的标准PERIOD约束涵盖了它们之间路径的时序。设备中的每个时钟域都需要使用一个单独的同步器来为该时钟域生成一个全局复位的同步版本。

在这里插入图片描述现在让我们直奔主题。这里有一些具体的技巧和建议,可以帮助你为产品设计找到最佳的复位策略。

在这里插入图片描述

  • 建议1:当对触发器的同步SR端口进行驱动时,每个时钟域都需要其自身的全局复位信号的本地化版本,并且该版本信号需与该时钟域同步。

在这里插入图片描述有时,无法保证设计的一部分拥有有效的时钟。这可能发生在使用恢复时钟或由热插拔模块提供时钟的系统中。在这种情况下,可能需要通过触发器上的异步SR端口对设计中的存储元件异步复位进行初始化。即使存储元件使用异步SR端口,但复位信号的撤销边缘仍必须与时钟同步。这一要求由触发器的复位恢复时序弧线(reset-recovery timing arc)所定义,类似于异步SR的撤销边缘到时钟上升沿的建立时间要求。如果不能满足这一时序弧线,可能会导致触发器进入亚稳态、同步子系统进入非期望的状态。

在这里插入图片描述如下图3所示,复位桥接电路提供了一种机制,可以异步地断言复位(即使在缺乏有效时钟的情况下,也会因此生效。),且同步地撤销复位。在这个电路中,有假设两个触发器的SR端口具有异步预置功能(SRVAL=1)。
在这里插入图片描述在这里插入图片描述你可以使用这种复位桥接电路的输出来驱动给定时钟域的异步复位。这个同步复位可以通过触发器上的异步SR端口初始化该时钟域中的所有存储元件。同样,设备中的每个时钟域都需要一个单独的、由单独的复位桥接电路生成的全局复位的同步版本。

在这里插入图片描述

  • 建议2:复位桥接电路提供了一种安全的机制,用于同步地撤销异步复位。每个时钟域都需要使用复位桥接电路来生成其自身的全局复位的本地化版本。

在这里插入图片描述图3,假设电路中用于时钟复位桥接及其相关逻辑的时钟(clk_a)是稳定且无误的。在FPGA中,时钟可以直接来自片外时钟源(理想情况下,通过支持时钟的引脚),或者用过多模时钟管理器(MMCM)或锁相环(PLL)在内部生成。任何被用来生成时钟的MMCM或PLL在复位后都需要校准。因此,你可能需要在全局复位路径中插入额外的逻辑来稳定该时钟。

在这里插入图片描述

  • 建议3:在撤销对FPGA的全局复位之前,确保MMCM或PLL生成的时钟稳定且已锁定。

在这里插入图片描述图4,展示了一个FPGA中典型的复位实现。Xilinx寄存器上的SR控制端口是高电平有效的。如果RTL代码描述了低电平有效的置位/复位/预置/清零功能,综合工具会在直接驱动寄存器的控制端口之前编译出一个反相器。而且必须通过查找表来完成这种反相,从而占用一个LUT输入。低电平控制信号编译出的额外逻辑可能导致运行时间更长、器件利用率降低,还会影响时序和功耗。

在这里插入图片描述在这里插入图片描述总结?尽可能在HDL代码或实例化组件中使用高电平有效的控制信号。当无法在设计中对控制信号的极性进行控制时,需要在代码的顶层层次结构中对信号进行反相。以这种方式(进行RTL)描述时,编译出的反相器可以被吸收进I/O逻辑中,而无需使用任何额外的FPGA逻辑或布线。

在这里插入图片描述

  • 建议4:高电平有效的复位能够提高器件利用率、提升性能。

在这里插入图片描述需要注意的是,FPGA并不一定需要一个全局复位。全局复位会与设计中的其它网络竞争相同的布线资源。由于需要传播到设计中的每一个触发器,全局复位通常具有很高的扇出,这可能会占用大量的布线资源,并对器件利用率和时序性能产生负面影响。因此,去探索不依赖于完整的全局复位的其它复位机制是非常值得的。

在这里插入图片描述如图5所示,当Xilinx的FPGA被配置或重新配置时,每个单元(包括触发器和Block RAMs)都会被初始化。因此,FPGA配置与全局复位具有相同的效果,因为它会将FPGA中每个存储元件的初始状态设置为已知状态。
在这里插入图片描述在这里插入图片描述可以从RTL代码中推断触发器的初始化值。图6所示的示例,展示了如何在RTL中用代码对寄存器进行初始化。FPGA工具确实可以综合信号的初始化,尽管人们普遍误解认为这是不可能的。底层VHDL信号或Verilog寄存器的初始化值将成为编译出的触发器的INIT值,该值在配置期间会被加载到触发器中。
在这里插入图片描述在这里插入图片描述与寄存器类似,你也可以在配置期间初始化BRAM(Block RAMs)。随着基于处理器的系统中嵌入式RAM的增加,BRAM初始化已成为一项有用的功能。这是因为预定义的RAM便于更简单的仿真设置,并消除了嵌入式设计中需要启动序列来清除内存的要求。

在这里插入图片描述全局置位/复位(GSR)信号是一种特殊的预布线复位信号,它在FPGA配置过程中将设计保持在初始状态。配置完成后,GSR信号被释放,此时所有的触发器和其他资源都具备了它们的INIT值。除了在配置过程中使用它之外,用户设计可以通过实例化STARTUPE2模块并连接到GSR端口来使用GSR网络。通过使用这个端口,设计可以重新断言GSR网络,这将使FPGA中的所有存储元件返回到由它们的INIT属性指定的状态。

在这里插入图片描述GSR的撤销是异步的,并且可能需要几个时钟周期才能影响设计中的所有触发器。状态机、计数器或其它任何可以自动改变状态的逻辑都需要一个明确的复位信号,该复位信号的撤销与用户时钟同步。因此,仅使用GSR作为唯一的复位机制可能会导致系统不可靠。因此,采用混合方法来有效管理启动过程会更好。

在这里插入图片描述

  • 建议5:采用一种混合方法,依赖GSR提供的内置初始化功能,同时为设计中可以自主启动的部分提供明确的复位信号,可以带来更好的利用率和性能。

在这里插入图片描述在使用GSR设置整个设计的初始状态之后,对于需要同步复位的逻辑元件(如状态机),使用明确的复位信号。可以通过标准的亚稳态解决电路或复位桥接电路来生成明确复位信号的同步版本。

3、Use appropriate resets to maximize utilization

在这里插入图片描述工具会把设计映射到底层FPGA资源,而在RTL代码中使用的复位风格会对工具的这种能力产生显著影响。在编写RTL代码时,设计者需要调整其子设计的复位风格,以便工具能够将设计映射到这些资源上,这是很重要的。

在这里插入图片描述除了使用GSR机制进行初始化外,你无法使用明确的复位信号来复位SRLs(移位寄存器锁存器)、LUTRAMs(查找表RAM)和块RAM(Block RAMs)的内容。因此,在编写那些会被映射到这些资源的代码时,重要的是,要专门编写不带复位的代码。例如,如果RTL代码描述了一个32位移位寄存器,并为移位寄存器中的32个阶段提供了明确的复位,综合工具将无法直接将此RTL代码映射到SRL32E,因为它无法使用这种资源来满足编码复位的要求。反而,它可能会编译出32个触发器,也可能会围绕SRL32E编译出一些额外的电路,来实现所需的复位功能。相比于编写不带复位的RTL代码,这两种解决方案都将需要消耗更多的资源。

在这里插入图片描述

  • 建议6:在映射到SRLs(移位寄存器锁存器)、LUTRAMs(查找表RAM)或块RAM(Block RAMs)时,不要为SRL或RAM矩阵编写复位代码。

在这里插入图片描述在7系列器件中,无法将具有不同控制信号下的触发器打包到同一个slice中。对于低扇出复位,这可能会对整体slice利用率产生负面影响。如图7所示,对于同步复位,综合工具可以使用查找表(LUT)来实现复位功能,而不是使用触发器的控制端口,从而将复位作为控制端口进行移除。这意味着,你可以把得到的 LUT/触发器对 与其它未使用其SR端口的触发器打包在一起,这可能会带来更高的LUT利用率,但也会提高切片利用率。
在这里插入图片描述在这里插入图片描述

  • 建议7:同步复位能够提升FPGA的利用率。在设计中使用同步复位,而不是异步复位

在这里插入图片描述一些较大的专用资源(即,Block RAMs和DSP48E1 cells)包含寄存器,是作为专用资源功能的一部分被编译出来的寄存器。Block RAMs具有可选的输出寄存器,可以通过使用它们来增加一个时钟周期的延迟,从而提高时钟频率。DSP48E1 cells有许多寄存器,你可以将它们用于流水线处理以提高最大时钟速度,也可以用于周期延迟(Z-1)。然而,这些寄存器仅具有 同步置位/复位 功能。

在这里插入图片描述

  • 建议8:使用同步复位允许综合工具使用DSP48E1 slices或block RAMs等内部专用资源的寄存器。这可以提高设计这部分中的整体器件的利用率和性能,并且还能降低整体功耗。

在这里插入图片描述如果RTL代码描述了 异步置位/复位 ,那么综合工具将无法使用这些内部寄存器。相反,它将使用slice中的触发器,因为它们可以实现所需的 异步置位/复位 功能。这不仅会导致器件利用率低下,还会对性能和功耗产生负面影响。

4、Many options

在这里插入图片描述FPGA有多种复位选项可供选择,每种都有其自身的优势和劣势。这里概述的建议将帮助设计者为他们的设计选择一个合适的复位结构。一个优化的复位结构将提升FPGA的器件利用率、时序性能和功耗表现。

5、About the author

在这里插入图片描述

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

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

相关文章

基于微信小程序的设备故障报修管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

ue5 GAS制作一个技能

新建文件夹 ability 取名BP_BaseAbility 新建一个技能GAB_Melee 上面技能GAB_Melee和技能基类BP_BaseAbility 进入技能GAB_Melee,添加打印火云掌 给这个技能添加标签 点这个号 这样命名,小心这个点(.)作为分割 ability.ha…

PHP校园助手系统小程序

🔑 校园助手系统 —— 智慧校园生活 📱一款基于ThinkPHPUniapp框架深度定制的校园助手系统,犹如一把智慧之钥,专为校园团队精心打造,解锁智慧校园生活的无限精彩。它独家适配微信小程序,无需繁琐的下载与安…

阿里云服务器突然有大量nmap服务占用大量CPU排查及解决方案

问题描述 突然有一天服务器访问很卡顿,在阿里云后台查看CPU,内存,系统平均负载等参数发现没问题 但是登陆服务器后,发现大量nmap服务占用大量CPU,但是这台管理员并没有主动安装过nmap 原因及对应预防方案 暴力破解 SSH 密码:通过爆破弱密码或没有加固的 SSH 配置。…

一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk

文章目录 一文大白话讲清楚webpack基本使用——11——chunkIds和runtimeChunk1. 建议按文章顺序从头看,一看到底,豁然开朗2. 啥是chunkIds3.怎么使用chunkIds4. 啥是runtimeChunk5. 怎么使用runtimeChunk 一文大白话讲清楚webpack基本使用——11——chun…

给工作流穿上漂亮的衣服,创建用户交互界面并调用工作流,可定制的工作流,奶奶都能看明白的扣子智能体免费系列教程(10)

创建工作流看这个 搭建小红书梗图、歪理生成器工作流搭建 效果 欢迎来到滔滔讲AI。本教程为免费系列教程,感谢关注,以防找不到。 一、新建应用 方式一,点击左侧导航的加号 方式二、在工作空间面板选择右上角的创建按钮 选择创建应用 二、…

2024年度总结-CSDN

2024年CSDN年度总结 Author:OnceDay Date:2025年1月21日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 文章目录 2024年CSDN年度总结1. 整体回顾2…

C语言程序设计十大排序—冒泡排序

文章目录 1.概念✅2.冒泡排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展…

源码分析之Openlayers样式篇IconImage类

访问Openlayers网站(https://jinuss.github.io/Openlayers_map_pages/,网站是基于Vue3 Openlayers,里面有大量的实践和案例。觉得还不错,可以 给个小星星Star,鼓励一波 https://github.com/Jinuss/OpenlayersMap哦~ 概述 在 Ope…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 基础篇 part 6

第06章_多表查询 多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。 这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个 关联字段可能建立了外键,也…

FANUC机器人系统镜像备份与恢复的具体步骤(图文)

FANUC机器人系统镜像备份与恢复的具体步骤(图文) 镜像备份: 如下图所示,进入文件—工具—切换设备,找到插入的U盘UT1, 如下图所示,进入U盘目录后,创建目录,这里目录名称为11, 如下图所示࿰

根除埃博拉病毒(2015MCM美赛A)

题目 要求: 现实、合理、可用要求考虑到: a. 疾病传播 b.药物数量 c. 传送系统 d.传送位置 e. 药物或者疫苗的生产速度一个非技术性文件 论文 参考论文 概述 两个模型,stochastic和deterministic。 分析思路:基于现实的数据建立…

多线程之旅:开启多线程安全之门的钥匙

上次,小编分享到了多线程出现了安全问题。 那么接下来小编来分享下是如何解决这个多线程安全问题的。 上次分享到,多线程安全问题的“罪魁祸首”:线程调度的不确定性。 就是说呢,A、B、C三个线程,然后,A…

Docker 单机快速部署大数据各组件

文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…

设计模式的艺术-职责链模式

行为型模式的名称、定义、学习难度和使用频率如下表所示: 1.如何理解职责链模式 最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,职责链模式可以将请求的处理者组织成一条链,并让请求沿着…

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅

CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅 🌟 默语,是一位在技术分享与社区建设中坚持深耕的博客作者。今年,我有幸再次入围成为 CSDN 博客之星TOP300 的一员,这既是对过往努力的肯定,也是对未来探…

Mysql的数据类型(学习自用)

一、整数型数据类型 名称大小(字节数)范围(无符号)范围(有符号)TINYINT10-255-2^8~2^8-1SMALLINT20-65535-2^16~2^16-1MEDIUMINT30-2^24-1-2^24~2^24-1INT40-2^32-1-2^32~2^32-1BIGINT80-2^64-1-2^64~2^64-1 二、浮点…

深入 Flutter 和 Compose 的 PlatformView 实现对比,它们是如何接入平台控件

在上一篇《深入 Flutter 和 Compose 在 UI 渲染刷新时 Diff 实现对比》发布之后,收到了大佬的“催稿”,想了解下 Flutter 和 Compose 在 PlatformView 实现上的对比,恰好过去写过不少 Flutter 上对于 PlatformView 的实现,这次恰好…

winfrom项目,引用EPPlus.dll实现将DataTable 中的数据保存到Excel文件

最近研究不安装office也可以保存Excel文件,在网上查询资料找到这个方法。 第一步:下载EPPlus.dll文件(自行去网上搜索下载) 第二步:引用到需要用的项目中,如图所示: 第三步:写代码…

暑期实习准备:C语言

1.局部变量和全局变量 局部变量的作用域是在变量所在的局部范围,全局变量的作用域是整个工程;局部变量的生命周期是作用域内,全局变量的生命周期是整个程序的生命周期,当两者命名冲突时,优先使用的是局部变量。 2.C语言…