当前位置: 首页 > news >正文

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录

  • 背景
  • 前言
  • 一、复位信号的同步与释放
    • 1.1 ··· 同步复位
      • 1.1.1 ··· 综述
      • 1.1.2 ··· 优缺点
    • 1.2 ··· recovery time和removal time
    • 1.3 ··· 异步复位
      • 1.3.1 ··· 综述
      • 1.3.2 ··· 优缺点
    • 1.4 ··· 同步复位 与 异步复位
    • 1.5 ··· 异步复位、同步释放
      • 1.5.1 ··· 总述
      • 1.5.2 ··· 机理
      • 1.5.3 ··· 复位网络
  • 二、思考与补充
    • 2.1 ··· 复位信号是否被需要
    • 2.2 ··· 关于第一级触发器的数据端口
    • 2.3 ··· 第二个dff是否存在亚稳态
    • 2.4 ··· 异步复位去毛刺
    • 2.5 ··· PLL配置后的复位设计
    • 2.6 ··· 复位的消耗的资源比你想象的要多
  • 参考文献


说明1:在查阅相关资料过程中,发现一些关于有趣的知识点,本文有尝试对其进行整合,力求详尽。
说明2:如果文章有误,欢迎大家指出、讨论,笔者也会积极改正,希望大家一起进步!


背景

笔者前一阵子在写Verilog代码时,关于rst_N信号,用的是如下片段。

input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk or negedge rst_N) beginif (!rst_N) beginrst_N_d <= 1'b0;end else beginrst_N_d <= 1'b1;end
end
// 将rst_N_d作为整个工程的复位信号,接到顶层模块下面的各个子模块中。

但是,实际将代码下载到开发板后,发现将输入信号rst_N反复置0、置1切换时,输出的效果相比于预期效果,不是很稳定,百思不得其解。随后,一个经验丰富的大佬告诉我,可以考虑异步复位、同步释放的方式来控制所有子模块的rst_N_d 信号,如下所示。

input Clk;
input rst_N;
reg rst_N_d1,rst_N_d2;
always @(posedge Clk or negedge rst_N)if (!rst_N) beginrst_N_d1 <= 1'b0;rst_N_d2 <= 1'b0;end else beginrst_N_d1 <= 1'b1;rst_N_d2 <= rst_N_d1;
end
// 将rst_N_d2作为整个工程的复位信号,接到顶层模块下面的各个子模块中。

改完后,发现代码下载到开发板后的效果比较不错,稳定了很多。
基于此,考虑到自身学FPGA是野路子,决定好好研究一下同步与释放,记作此文。

前言

  • 复位的作用:
    可以使代码或者是器件恢复到一个已知、确定的状态,如初始状态;
    可以寄存器、计数器等内部的数据置为预设的值。

  • 复位的目的:
    1、通过控制复位信号,确保电路从已知的初始状态开始运行。
    2、通过控制复位信号,使电路从某个错误状态回到已知状态。

  • 在FPGA设计中,复位信号的同步与释放是确保系统稳定性和可靠性的关键。几种常见的复位信号,如下:
    1、同步复位
    2、异步复位
    3、异步复位、同步释放

  • 关于触发器,已在前文《7系列 之 存储单元(Storage Elements)》中有过介绍,诸位道友可点击链接进行传送。

  • 本文所查看得RTL、Synthesis视图,是基于xc7a100tfgg676-2 (active)进行的。

一、复位信号的同步与释放

1.1 ··· 同步复位

1.1.1 ··· 综述

  • 诸位道友经常提及的 同步复位 ,
    即同步复位、同步释放,Synchronous Reset and Synchronous Release。

  • 复位信号的复位、释放都是与时钟信号同步进行的,
    这意味着,复位信号的变化只在特定的时钟边沿(通常是上升沿)发生。

  • Verilog代码,如下:

input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk ) beginif (!rst_N) beginrst_N_d <= 1'b0;end else beginrst_N_d <= 1'b1;end
end
  • 其RTL视图为:
    在这里插入图片描述
  • 其综合后的电路为:
    在这里插入图片描述
    从RTL视图来看,同步复位的代码过程就是一次触发器过程。
    而其综合的结果为,FDRE。
    注:FDRE,为Xilinx的触发器的Primitive之一;功能描述为:同步使能、同步复位。

1.1.2 ··· 优缺点

  • 优点:
    1、复位、释放操作是在时钟边沿同步进行的,因此可以确保所有的寄存器和逻辑单元在同一个时钟周期内被正确地复位、释放,从而给了寄存器足够的时间来稳定状态来减少复位信号引起的亚稳态问题、避免了由于复位信号不同步导致的时序不确定性。
    2、同步复位使得电路是同步的,可使静态时序分析更加简单,减少时序分析难度。

  • 缺点:
    1、采用同步复位,需要在数据输入端增加组合逻辑,消耗额外的逻辑资源;
    在这里插入图片描述2、同步复位比较依赖于时钟信号,且复位信号的脉冲宽度必须要大于一个时钟周期,才能确保同步复位。
    3、如下图所示,博文《异步复位 & 同步释放》在同步复位的缺点中提及到:“一些三态总线的初始化过程中,要求最好异步复位。”。在这里插入图片描述
    4、当复位信号的撤销时间在建立时间和保持时间以内时,也会产生亚稳态。

1.2 ··· recovery time和removal time

信号的本身不稳定、或者信号采样时刻不确定,都可能会带来亚稳态。

在同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态。同样的道理,对于一个异步复位寄存器来说,异步复位信号同样需要和时钟满足recovery time和removal time 才能有效进行复位操作和复位释放操作,防止输出亚稳态。(《异步复位和同步释放》)

  • recovery time(恢复时间),指撤销复位状态时,在时钟有效沿来临之前,复位信号保持无效电平的最短时间,即复位释放与下一个时钟有效沿之间需要间隔的最小时间,类似于setup time。
  • removal time(去除时间),指进入复位状态时,在时钟有效沿来临之后,复位信号保持有效电平的最短时间,即复位信号与上一个时钟有效沿之间需要间隔的最小时间,类似于hold time。
    在这里插入图片描述

无论是复位信号的电平,
必须要满足recovery time和removal time这两个要求,否则可能会造成亚稳态。

另外,并不是复位信号撤销时才可能出现亚稳态,复位信号一开始出现时,同样可能会存在亚稳态,只不过异步复位信号持续时间长,即使第一个周期出现了亚稳态(即第一个周期复位未成功),下一个时钟周期也不会再出现亚稳态了。如果复位信号的变化只持续刚刚一个时钟周期,那么复位信号开始和撤销时都可能会出现亚稳态。(《异步复位,同步释放》)

1.3 ··· 异步复位

  • 诸位道友所经常提及的 异步复位 ,
    即,异步复位、异步释放,Asynchronous Reset and Asynchronous Release。
    复位信号,不随着系统时钟的边沿触发起作用,而是可独立于时钟信号起作用。

1.3.1 ··· 综述

  • Verilog代码,如下:
input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk or negedge rst_N) beginif (!rst_N) beginrst_N_d <= 1'b0;end else beginrst_N_d <= 1'b1;end
end
  • 其RTL视图为:
    在这里插入图片描述相比于同步复位,拥有异步复位的寄存器在设计过程中就多了一个引脚(复位引脚)。

  • 其综合后的电路为:
    在这里插入图片描述而其综合的结果为,FDCE。

注:FDCE,为Xilinx的触发器的Primitive之一;功能描述为:同步使能、异步复位。
在这里插入图片描述

1.3.2 ··· 优缺点

  • 优点:
    1、大多数的触发器都有异步复位端口,能保证数据路径上是干净的,不用消耗额外的逻辑资源。
    2、复位信号不依赖于时钟,不管有没有时钟信号,复位信号都能使电路复位。

  • 缺点:
    1、当异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之间时,输出结果就会出现亚稳态,造成复位失败。

recovery time和removal time都是检查异步信号(reset或preset或set)的释放沿,释放沿必须在时钟沿前面提前recovery time释放,或者在时钟沿后removal time之后释放。由于异步复位信号与时钟无必然联系,两者都是独立的,所以复位信号的释放将有一定的概率导致电路出现亚稳态。(《异步复位同步释放》)

在这里插入图片描述
2、系统所产生的的噪声或毛刺会引发伪复位,需要设计过滤器来消除复位电路上毛刺的影响。
3、异步复位需要确保满足时序要求。(补充:“复位信号和时钟信号一样,都是大扇出,所以无论同步或异步,在后端版图设计时需要分析复位树的时序确保满足时序要求。尽管存在复位 buffer tree,但最好要对复位信号少做逻辑。”(《异步复位,同步释放》))

1.4 ··· 同步复位 与 异步复位

只能说,各有优缺点。同步复位的好在于它只在时钟信号clk的上升沿触发进行系统是否复位的判断,这降低了亚稳态出现的概率;它的不好上面也说了,在于它需要消耗更多的器件资源,这是我们不希望看到的。FPGA的寄存器有支持异步复位专用的端口,采用异步复位的端口无需额外增加器件资源的消耗,但是异步复位也存在着隐患。异步时钟域的亚稳态问题同样的存在与异步复位信号和系统时钟信号之间。(《异步复位同步释放—关于复位的问题》)

ADD:

对于xilinx 7系列的FPGA而言,flip-flop支持高有效的异步复/置位和同步复位/置位。对普通逻辑设计,同步复位和异步复位没有区别,当然由于器件内部信号均为高有效,因此推荐使用高有效的控制信号,最好使用高有效的同步复位。输入复位信号的低有效在顶层放置反相器可以被吸收到IOB中。(《xilinx FPGA复位浅析》)

经过上述分析,同步复位和异步复位都有优缺点,那么是否能将连着结合、取长补短呢?

1.5 ··· 异步复位、同步释放

  • 其实,阅读到这里,
    不难看出异步复位、同步释放是同步释放和异步复位相结合的产物,
    而不是同步异步与复位释放两两相组合的结果。

  • 异步复位、同步释放,即
    复位信号的复位状态有效时不受时钟信号的同步控制,
    而在复位信号释放时(复位状态无效时)受到时钟信号的同步控制。

  • 异步复位、同步释放的目的是在于:防止复位信号释放时产生亚稳态,且节省逻辑资源。

1.5.1 ··· 总述

  • Verilog代码,如下:
input Clk;
input rst_N;
reg rst_N_d1,rst_N_d2;
always @(posedge Clk or negedge rst_N)if (!rst_N) beginrst_N_d1 <= 1'b0;rst_N_d2 <= 1'b0;end else beginrst_N_d1 <= 1'b1;rst_N_d2 <= rst_N_d1;
end
  • 其RTL视图为:
    在这里插入图片描述- 其综合后的电路为:
    在这里插入图片描述

1.5.2 ··· 机理

  • 异步复位:当复位信号拉低时,rst_N拉低,直接进入复位状态。

  • 同步释放:当复位信号释放时,由于加入了两级同步缓存器,复位状态不会立即释放,而是等到同步时钟的有效沿时再进行释放;且,rst_N的释放信号不会随着rst_N的撤销而撤销。

  • 同步释放的具体过程,如下:
    1 第一个有效时钟沿到来时:当异步复位信号rst_N释放时,用来同步的第二级寄存器 rst_N_d2 的数据仍然是0,因此第二级寄存器 rst_N_d2 是不会出现亚稳态的。即便第一级寄存器 rst_N_d1 可能会出现亚稳态,但这个亚稳态并不是直接经过第二级寄存器 rst_N_d2 进行输出 ,需要等待下一个时钟有效沿的到来,相当于被打了节拍。
    2 第二个有效时钟沿到来时:当第一级寄存器 rst_N_d1 上一个时刻的这个亚稳态经过第二级寄存器时,基本已经稳定下来了;即便稳定下来不为无效电平,那也就相当于复位信号的有效电平多持续了一个周期。因此我们可以看出,使用异步复位同步释放时,异步复位撤销后需要额外等待一个时钟周期。

简单理解:第2级DFF释放信号与时钟clk边沿同步,所以释放信号在clk上升沿后需经过Tco(Tsu+thd)才能到达下一级DFF的复位端口,所以可以满足下一级DFF的recovery time和removal time,从而不会出现亚稳态。(《异步复位同步释放》)

  • 思考:
    1、第一级触发器的输出,存在亚稳态的可能,这是毋庸置疑的,而且第一级触发器输出的亚稳状态是在逐渐衰减的,且可以持续一个时钟周期;正常情况下,第二级触发器的输出是非亚稳态。但是,如果在第二级触发器的采样时保持时间不够长,且这时第一级触发器的输出依旧处于亚稳态,那么,第二级触发器的输出也会是亚稳态的。不过,这属于小概率事件。
    2、在目前的同步化设计中,用两级触发器进行同步可以消除绝大部分可能的亚稳态了。那么,是不是三级同步操作,会使输出的复位信号更加稳定呢;当然,这样会多消耗一个触发器。
    3、《2级同步引发的思考》,关于两级触发器的思考,可以深入了解下。

既解决了同步复位的资源消耗问题,也解决了异步复位的亚稳态问题。其根本思想,也是将异步信号同步化。(《异步复位同步释放—关于复位的问题》)

不同的复位方式有各自的优缺点。但是在工程中,一般都用异步复位的方法,最好是异步复位同步释放的方法。(《异步复位,同步释放》)

1.5.3 ··· 复位网络

《异步复位 & 同步释放》提及到了复位分发技术,用两级触发器对复位信号打了两次节拍,这也算是异步复位、同步释放的应用了。
在这里插入图片描述

二、思考与补充

逛博客的时候,看到了一些有趣的问题与思考,截图放在文中了,供诸位道友参考学习。
也可以直接到 参考文献 这一章节,直接点击文章名称进行转跳。

2.1 ··· 复位信号是否被需要

在这里插入图片描述
实际上,在写Verilog代码时,写了过多的复位信号反而会对Fmax产生限制。
笔者感觉《同步复位和异步复位》这篇博客的这段解释,如下图所示,似乎更为细致。
在这里插入图片描述
同时,在一博客下面有看到对Xilinx官方文档《UltraFast Design Methodology Guide for FPGAs and SoCs (UG949)》的描述:
在这里插入图片描述

2.2 ··· 关于第一级触发器的数据端口

在这里插入图片描述

2.3 ··· 第二个dff是否存在亚稳态

《异步复位,同步释放的理解》,通过引用文献,对复位同步器得第二个dff是否存在亚稳态进行了解答,如下图所示。这也算是对本文章节《2.2.2 ··· 机理》中思考的一个解答吧。
在这里插入图片描述

2.4 ··· 异步复位去毛刺

《同步复位和异步复位》,这篇博客也有提到这么一个操作,截图给诸位道友看一下。
在这里插入图片描述

2.5 ··· PLL配置后的复位设计

文章《异步复位同步释放(Synchronized Asynchronous Reset)》中,提到了一种PLL配置后的复位设计,感觉有点眼熟,截个图放下面,供诸位道友观摩、讨论。

文字描述如下:
在这里插入图片描述代码综合后的RTL如下:
在这里插入图片描述

2.6 ··· 复位的消耗的资源比你想象的要多

以下截图出自博客《你真的会Xilinx FPGA的复位吗?》。
在这里插入图片描述
嗯,这部分实际上和前文中的 “复位信号是否被需要 ”这部分倒是挺相似的,道友们可以多留意下。
在这里插入图片描述

参考文献

1、《异步复位和同步释放》
2、《异步复位,同步释放》
3、《异步复位同步释放—关于复位的问题》
4、《异步复位 & 同步释放》
5、《异步复位,同步释放的理解》,这篇不错,安利一波。
6、《异步复位同步释放原理》
7、《同步复位和异步复位》
8、《异步复位同步释放》
9、《同步复位和异步复位》,这篇也不错。
10、《2级同步引发的思考》
11、《异步复位同步释放(Synchronized Asynchronous Reset)》
12、《xilinx FPGA复位浅析》
13、《你真的会Xilinx FPGA的复位吗?》,这篇也很不错。
14、《How do I reset my FPGA?》(笔者对这篇文章进行了翻译,《翻译:How do I reset my FPGA?》)
15、《RTL设计- 多时钟域按顺序复位释放》

相关文章:

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…...

TL3562/3568移植无锡沐创N500L-AM4驱动进内核源码,报错及其解决方案

前言 创龙官方提供的资料无锡沐创N500L-AM4驱动是rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz&#xff1b;无锡沐创官方&#xff0c;截止目前&#xff0c;最新驱动是rnpgbe-0.2.3-f26b9a4.tar.gz。考虑到开发的稳妥性&#xff0c;先选用创龙尝试过的rnpgbe-0.1.0.rc60-dd9f3cf.tar.gz来移…...

埃氏算法C++实现: 快速输出质数( 素数 )

目录 1.简介 算法原理 算法特点 应用场景 2.一般求素数方法 3.埃氏算法求素数 3.1.无动态分配 3.2.有动态分配 1.简介 ‌埃氏算法&#xff08;Eratosthenes Sieve&#xff09;‌&#xff0c;全称为埃拉托斯特尼筛法&#xff0c;是一种由古希腊数学家埃拉托斯特尼在公元…...

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…...

力扣-数组-414 第三大的数

解析 先利用set去重&#xff0c;然后用逆向遍历找到第三大的数 代码 class Solution { public:int thirdMax(vector<int>& nums) {set<int> numsToset;for(int i 0; i<nums.size(); i){numsToset.insert(nums[i]);}int index;if(numsToset.size() > …...

python实现答题游戏

有这样一个需求&#xff1a;使用python实现一个游戏&#xff0c;一共有10个问题&#xff0c;依次回答每个问题&#xff0c;每个用户可以输入问题的答案&#xff0c;但是互相不能看到&#xff0c;有一个管理员可以看到所有人的答案&#xff0c;并且当所有人都填写完成后可以公布…...

OneData体系架构详解

阿里巴巴的 OneData 体系架构方法论&#xff0c;主要分为三个阶段&#xff1a;业务板块、规范定义 和 模型设计。每个阶段的核心目标是确保数据的高效管理、共享与分析能力。 一. 业务板块&#xff08;Business Segment&#xff09; 业务板块是OneData体系架构中的第一步&…...

五、华为 RSTP

RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;是 STP 的优化版本&#xff0c;能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制&#xff1a;RSTP 通过引入边缘端口、P/A&#xff08;Proposal/Agreement&#xff09;机制等&…...

解锁Java中的国密算法:安全保障的密钥

一、引言 在数字化浪潮席卷全球的当下&#xff0c;信息安全已然成为国家、企业乃至个人无法忽视的重要议题。国密算法&#xff0c;作为我国自主研发的密码算法体系&#xff0c;宛如坚固的盾牌&#xff0c;为国家信息安全筑起了一道坚不可摧的防线。它的诞生&#xff0c;不仅承载…...

docker-registry

安装依赖 apt install apache2-utils设置密码 htpasswd -Bbn 用户名 密码 >/data/registry_hub/passwd#docker私服部署 docker run -d -p 5000:5000 --name docker-registry -v /data/registry_hub/:/var/lib/registry -v /data/registry_hub/passwd:/auth/htpasswd \ -e …...

QTableWidget的简单使用

1.最简单的表格示例&#xff1a; ui->tableWidget->setRowCount(2);// 设置行数ui->tableWidget->setColumnCount(3);// 设置列数&#xff0c;一定要放在设置行表头之前QStringList rowHeaderList;// 行表头rowHeaderList << QStringLiteral("姓名"…...

第三天 学习JavaScript基础,掌握变量、数据类型、运算符、流程控制

学习JavaScript基础是成为一名前端开发者的重要一步。以下是关于变量、数据类型、运算符和流程控制的一些基础知识和示例代码。 1. 变量 变量用于存储数据。在JavaScript中&#xff0c;使用var、let或const关键字来声明变量。 // 使用 var 声明变量&#xff08;不推荐&#…...

Python - itertools- pairwise函数的详解

前言&#xff1a; 最近在leetcode刷题时用到了重叠对pairwise,这里就讲解一下迭代工具函数pairwise,既介绍给大家&#xff0c;同时也提醒一下自己&#xff0c;这个pairwise其实在刷题中十分有用&#xff0c;相信能帮助到你。 参考官方讲解&#xff1a;itertools --- 为高效循…...

C语言程序设计十大排序—选择排序

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

微前端qiankun的基本使用(vue-element-admin作为项目模版)

微前端qiankun的基本使用(vue-element-admin作为项目模版) qiankun架构特点主应用netmoni_master改造工程项目目录结构子项目配置:子应用注册配置项container:子应用挂载节点配置项activeRule:子应用路由子应用netmoni_child1改造目录结构项目配置:src/settings中配置子应…...

MySQL用户授权、收回权限与查看权限

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中&#xff0c;我们经常需要从远程主机下载文件到本地&#xff0c;以便进行分析或备份。Ansible的fetch模块正是为了满足这一需求而设计的&#xff0c;它可以帮助我们轻松地从远程主机获取文件&#xff0c;并将其保存到本地指定的位置。在这篇文章中&#xf…...

skynet 源码阅读 -- 启动主流程

Skynet 启动主流程分析 Skynet 是一个轻量级、高并发的服务器框架。它在启动时会进行一系列初始化操作&#xff0c;并启动多个不同功能的线程&#xff08;Monitor、Timer、Worker、Socket&#xff09;&#xff0c;从而实现消息分发、定时器、网络I/O等核心功能。本文主要从 ma…...

【Linux】Linux入门(三)权限

目录 前提权限概念whoami指令 Linux权限管理文件访问者的分类&#xff08;人&#xff09;file指令权限信息权限的表示方法 chmod指令 更改权限chown指令 修改文件&#xff0c;文件夹所属用户和用户组 权限掩码umask&#xff08;权限掩码&#xff09; 粘滞位 前提 请先看下面这…...

FluentCMS:基于 ASP.NET Core 和 Blazor 技术构建的开源CMS内容管理系统

推荐一个基于 ASP.NET Core 和 Blazor 技术构建的、功能完善的开源CMS内容管理系统。 01 项目简介 FluentCMS 是一个基于强大的 ASP.NET Core 和创新的 Blazor 技术构建的现代内容管理系统&#xff08;CMS&#xff09;。 FluentCMS 设计为快速、灵活且用户友好&#xff0c;它…...

【阿里云】使用docker安装nginx后可以直接访问

一、创建目录 mkdir -p config/{cert,conf.d} html logs二、上传nginx.conf的配置文件 user nginx; worker_processes auto;error_log /var/log/nginx/error.log notice; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/ngin…...

leetcode-84-柱状图最大的矩形

柱状图中最大的矩形 已解答 算术评级: 7 同步题目状态 困难 相关标签 相关企业 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 1. stack 计算位置在…...

Vue | 搭建第一个Vue项目(安装node,vue-cli)

一.环境搭建&#xff1a; 1.安装node&#xff1a; 进入网站&#xff0c;下载对应版本的node.js Index of /dist/ (nodejs.org) 我这里下载的是&#xff1a; 解压到对应的目录下&#xff1a; 并新建两个文件夹node_cache和node_global&#xff1a; 2.配置环境&#xff1a; …...

Redis 持久化机制:RDB 和 AOF

Redis 持久化机制&#xff1a;RDB 和 AOF Redis 主要提供了两种持久化方式&#xff1a;**RDB&#xff08;Redis Database&#xff09;**和 AOF&#xff08;Append-Only File&#xff09;。它们各自的实现原理、优缺点以及适用场景如下。 1. RDB&#xff08;Redis Database&…...

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑&#xff1a;电竞新宠崛起 在电竞游戏不断发展的今天&#xff0c;硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度&#xff0c;玩家们往往需要投入大量资金购置高性能电脑。然而&#xff0c;云电脑技术的出现&#xff0c;为玩家们提供了一种…...

GPT 结束语设计 以nanogpt为例

GPT 结束语设计 以nanogpt为例 目录 GPT 结束语设计 以nanogpt为例 1、简述 2、分词设计 3、结束语断点 1、简述 在手搓gpt的时候&#xff0c;可能会遇到一些性能问题&#xff0c;即关于是否需要全部输出或者怎么节约资源。 在输出语句被max_new_tokens 限制&#xff0c…...

【达梦数据库】两地三中心环境总结

目录 架构监视器位置异步备库同步频率配置&#xff1a;dmtimer.ini断网测试异地切换过程&回切&#xff1a;允许丢数据模式切换回切 架构 2&#xff08;1主1实时备库&#xff09;1&#xff08;实时备库&#xff09;1(异步备库)&#xff0c;分别为节点1、2、3、4监视器位置 …...

C语言进阶习题【1】指针和数组(4)——指针笔试题3

笔试题5&#xff1a;下面代码输出是是什么&#xff1f; int main() {int a[5][5];int(*p)[4];p a;printf( "%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);return 0; }分析 代码结果 笔试题6&#xff1a;下面代码输出是是什么&#xff1…...

Qt——引用第三方SDK lib库的使用方法

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》 《实用硬件方案设计》 《结构建模设…...

Grafana系列之Dashboard:新增仪表板、新增变量、过滤变量、变量查询、导入仪表板、变量联动、Grafana Alert

概述 关于Prometheus和Grafana的安装&#xff0c;略过。 写在前面 Dashboard&#xff1a;仪表板&#xff0c;可包含多个PanelPanel&#xff1a;面板&#xff0c;Dashboard中的组件 如有写得不对的地方&#xff0c;烦请指出。 新增仪表板 点击右上角的 选择New dashboard…...

管道符、重定向与环境变量

个人博客站—运维鹿: http://www.kervin24.top CSDN博客—做个超努力的小奚&#xff1a; https://blog.csdn.net/qq_52914969?typeblog 一、重定向 将命令和文件结合 标准输入重定向&#xff08;STDIN&#xff0c;文件描述符为0&#xff09;&#xff1a;默认从键盘输入&am…...

如何使用 Redis 作为高效缓存

如何使用 Redis 作为高效缓存 Redis&#xff08;Remote Dictionary Server&#xff09;是一个高性能的 内存存储系统&#xff0c;通常被用作 缓存 来加速数据访问&#xff0c;提高应用的吞吐量和响应速度。本文详细讲解如何使用 Redis 作为高效缓存&#xff0c;包括基本原理、…...

simulink入门学习01

文章目录 1.基本学习方法2.图形环境--模块和参数3.激活菜单---添加到模型3.1输入选项3.2添加到模型3.3更改运算3.4验证要求 4.乘以特定值--Gain模块4.1引入gain模块4.2更改增益参数4.3接入系统4.4大胆尝试 1.基本学习方法 今天突然想要学习这个simulink的相关知识&#xff0c;…...

接上篇基于Alertmanager 配置钉钉告警

Alertmanager 是一个用于处理和管理 Prometheus 警报的开源工具。它负责接收来自 Prometheus 服务器的警报&#xff0c;进行去重、分组、静默、抑制等操作&#xff0c;并通过电子邮件、PagerDuty、Slack 等多种渠道发送通知。 主要功能 去重&#xff1a;合并相同或相似的警报&a…...

【Elasticsearch】index.mapping.source.mode

在Elasticsearch中&#xff0c;当设置 index.mapping.source.mode 为 synthetic 时&#xff0c;Elasticsearch会自动生成和存储源文档的合成版本。这些合成版本的内容取决于你索引的字段和映射定义。具体来说&#xff0c;synthetic 模式会存储以下内容&#xff1a; ### 合成源文…...

GBase8c aes_encrypt和aes_decrypt函数

在数据库中&#xff0c;aes_encrypt和aes_decrypt函数进行加解密时使用的块加密模式。 GBase8c 与 MySQL 的aes_encrypt和aes_decrypt函数区别&#xff1a; 1、GBase8c 中的初始化向量init_vector不能为空 2、MySQL的加密模块block_encryption_mode 为aes-128-ecb&#xff0c;…...

【Unity】ScrollViewContent适配问题(Contentsizefilter不刷新、ContentSizeFilter失效问题)

最近做了一个项目&#xff0c;菜单栏读取数据后自动生成&#xff0c;结果用到了双重布局 父物体 尝试了很多方式&#xff0c;也看过很多大佬的文章&#xff0c;后来自己琢磨了一下&#xff0c;当子物体组件自动生成之后&#xff0c;使用以下以下代码效果会好一些&#xff1a; …...

第二届国赛铁三wp

第二届国赛 缺东西去我blog找&#x1f447; 第二届长城杯/铁三 | DDLS BLOG web Safe_Proxy 源码题目 from flask import Flask, request, render_template_stringimport socketimport threadingimport htmlapp Flask(__name__)app.route(/, methods"GET"])de…...

对称二叉树(力扣101)

这道题翻译过来就是判断根节点的左右子树是否可以通过翻转&#xff0c;变得完全一样。如果可以&#xff0c;则这棵二叉树为对称二叉树。那么什么样的左右子树可以通过翻转相互变换呢&#xff1f;它们的节点的数值一定对称分布。那么我们就需要同时遍历左右树&#xff0c;不断比…...

postgresql15的停止

PostgreSQL是一个功能非常强大的、源代码开放的客户/服务器关系型数据库管理系统&#xff0c;且因为许可证的灵活&#xff0c;任何人都可以以任何目的免费使用、修改和分发PostgreSQL。介绍过postgresql的启动方法&#xff0c;就很有必要介绍下postgresql的停止方法。 一、停止…...

3.1 Go函数调用过程

在 Go 语言中&#xff0c;函数调用的核心机制依赖于内存的栈区分配和指针操作&#xff0c;理解这一原理有助于掌握函数的执行过程。 1. 内存结构概述 在 Go 程序编译成可执行文件并启动后&#xff0c;操作系统会为其分配进程内存&#xff0c;进程内存主要分为以下区域&#x…...

Java导出通过Word模板导出docx文件并通过QQ邮箱发送

一、创建Word模板 {{company}}{{Date}}服务器运行情况报告一、服务器&#xff1a;总告警次数&#xff1a;{{ServerTotal}} 服务器IP:{{IPA}}&#xff0c;总共告警次数:{{ServerATotal}} 服务器IP:{{IPB}}&#xff0c;总共告警次数:{{ServerBTotal}} 服务器IP:{{IPC}}&#x…...

c++---------------------------模板进阶

1.非类型模板参数 模板参数分类类型形参与非类型形参 。 类型形参即&#xff1a;出现在模板参数列表中&#xff0c;跟在 class 或者 typename 之类的参数类型名称 。 非类型形参&#xff0c;就是用一个常量作为类 ( 函数 ) 模板的一个参数&#xff0c;在类 ( 函数 ) 模板中可…...

FPGA与ASIC:深度解析与职业选择

IC&#xff08;集成电路&#xff09;行业涵盖广泛&#xff0c;涉及数字、模拟等不同研究方向&#xff0c;以及设计、制造、封测等不同产业环节。其中&#xff0c;FPGA&#xff08;现场可编程门阵列&#xff09;和ASIC&#xff08;专用集成电路&#xff09;是两种重要的芯片类型…...

c++面试题,请使用STL的std::remove_if算法删除std::vector<int>容器中大于5的数字

请使用STL的std::remove_if算法删除std::vector容器中大于5的数字 在C 中&#xff0c; std::remove_if 算法并不会真正从容器中删除元素&#xff0c; 而是将满足条件的元素移动到容器末尾&#xff0c;并返回一个指向新的逻辑结束位置的迭代器。 你需要使用容器的 erase 成员函…...

阿里云-银行核心系统转型之业务建模与技术建模

业务领域建模包括业务建模和技术建模&#xff0c;整体建模流程图如下&#xff1a; 业务建模包括业务流程建模和业务对象建模 业务流程建模&#xff1a;通过对业务流程现状分析&#xff0c;结合目标核心系统建设能力要求&#xff0c;参考行业建 模成果&#xff0c;形成结构化的…...

快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)

本文基于服务器端环境展开&#xff0c;使用的虚拟终端为Xshell。 miniconda miniconda是Anaconda的轻量版&#xff0c;仅包含Conda和Python&#xff0c;如果只做深度学习&#xff0c;可使用miniconda。 [注]&#xff1a;Anaconda、Conda与Miniconda Conda&#xff1a;创建和管…...

智能风控 数据分析 groupby、apply、reset_index组合拳

目录 groupby——分组 本例 apply——对每个分组应用一个函数 等价用法 reset_index——重置索引 使用前​编辑 注意事项 groupby必须配合聚合函数、 关于agglist 一些groupby试验 1. groupby对象之后。sum&#xff08;一个列名&#xff09; 2. groupby对象…...

Linux(Centos 7.6)命令详解:iconv

1.命令作用 将给定文件的编码从一种编码转换为另一种编码(Convert encoding of given files from one encoding to another) 2.命令语法 Usage: iconv [OPTION...] [FILE...] 3.参数详解 OPTION: 输入/输出格式规范: -f, --from-codeNAME&#xff0c;原始文本编码-t, --t…...

MySQL实现批量表分区完全示例

对于单表大数据量大的问题&#xff0c;如果数据支持分片&#xff0c;使用表分区是个不错的选择&#xff0c;那么MySQL是如何实现表分区的&#xff1f; 一、表分区条件 1.数据库存储引擎支持&#xff1a;InnoDB 和 MyISAM引擎 2.数据库版本支持&#xff1a;MySQL 5.1以后&…...