问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://m.blog.csdn.net/UmbrellaCorporation/article/details/143648907

复位信号的同步与释放是FPGA设计中的关键环节,直接影响到系统的稳定性和可靠性。本文详细探讨了同步复位、异步复位以及异步复位同步释放三种复位方式的原理、优缺点及应用场景,并通过Verilog代码示例和电路图,帮助读者深入理解复位信号的同步与释放机制。

背景

在FPGA设计中,复位信号的同步与释放是确保系统稳定性和可靠性的关键。几种常见的复位信号包括:

  • 同步复位
  • 异步复位
  • 异步复位、同步释放

在实际应用中,选择合适的复位方式对于优化系统性能和避免潜在的亚稳态问题至关重要。

前言

复位的作用是使代码或器件恢复到一个已知、确定的状态,如初始状态;同时可以将寄存器、计数器等内部的数据置为预设的值。在FPGA设计中,复位信号的同步与释放是确保系统稳定性和可靠性的关键。

复位的作用

  • 使代码或器件恢复到一个已知、确定的状态,如初始状态
  • 将寄存器、计数器等内部的数据置为预设的值

复位的目的

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

常见的复位信号类型

  1. 同步复位
  2. 异步复位
  3. 异步复位、同步释放

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

1.1 同步复位

1.1.1 综述

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

Verilog代码示例:

input Clk;
input rst_N;
reg rst_N_d;
always @(posedge Clk ) begin
    if (!rst_N) begin
        rst_N_d <= 1'b0;
    end else begin
        rst_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) begin
    if (!rst_N) begin
        rst_N_d <= 1'b0;
    end else begin
        rst_N_d <= 1'b1;
    end
end

RTL视图:

相比于同步复位,拥有异步复位的寄存器在设计过程中就多了一个引脚(复位引脚)。

综合后的电路:

注:FDCE,为Xilinx的触发器的Primitive之一;功能描述为:同步使能、异步复位。

1.3.2 优缺点

优点:

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

缺点:

  1. 当异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之间时,输出结果就会出现亚稳态,造成复位失败。
  2. 系统所产生的的噪声或毛刺会引发伪复位,需要设计过滤器来消除复位电路上毛刺的影响。
  3. 异步复位需要确保满足时序要求。

1.4 同步复位 与 异步复位

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

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

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

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) begin
        rst_N_d1 <= 1'b0;
        rst_N_d2 <= 1'b0;
    end else begin
        rst_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产生限制。在一些博客中,对复位信号的使用给出了详细的解释,这有助于理解复位信号的必要性和使用场景。

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

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

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

2.4 异步复位去毛刺

《同步复位和异步复位》提到一种异步复位去毛刺的操作,这有助于提高复位信号的稳定性。

2.5 PLL配置后的复位设计

文章《异步复位同步释放(Synchronized Asynchronous Reset)》中,提到了一种PLL配置后的复位设计,这在实际应用中具有重要的参考价值。

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

复位信号的使用确实会消耗一定的资源,这在实际设计中需要充分考虑。一些博客中提到,过多的复位信号可能会对Fmax产生限制,因此在设计时需要权衡复位信号的使用和系统性能之间的关系。

参考文献

  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?》
  15. 《RTL设计- 多时钟域按顺序复位释放》
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号