深入理解复位---同步复位,异步复位,异步复位同步释放(含多时钟域)

前言

电路的任何一个寄存器、存储器结构和其他时序单元都必须附加复位逻辑电路,以保证电路能够从错误状态中恢复、可靠地工作。对于综合实现的真实电路,通过复位使电路进入初始状态或者其他预知状态。复位在数字IC设计中是不可缺少的一部分,故一定要清楚掌握深入理解复位的作用。

同步复位

先看一个简单的同步复位的D触发器,Verilog代码如下:

module Sync_rst (
    input              clk,
    input              rst,        // Synchronous reset
    input      [7:0]   d,
    output reg [7:0]   q
);

always@(posedge clk) begin
   if (!rst) q <= 8'b0;
   else      q <= d;
end

endmodule

得到的电路图如下:
在这里插入图片描述
同步复位的优点:

  1. 抗干扰性高,可以剔除复位信号中周期短于时钟周期的毛刺;

  2. 电路稳定性强。

同步复位缺点:

  1. 大多数逻辑器件的目标库内的DFF都只有异步复位端口,适用同步复位时,综合器就会在寄存器的数据输入端插入组合逻辑,占用更多的逻辑资源;

  2. 同步复位依赖于时钟,如果电路中的时钟信号出现问题,无法完成复位。

  3. 对复位信号的脉冲宽度有要求,必须大于指定的时钟周期,由于线路上的延迟,可能需要多个时钟周期的复位脉冲宽度,且很难保证复位信号到达各个寄存器的时序。

异步复位

先看一个简单的异步复位的D触发器,Verilog代码如下:

module Async_rst (
    input              clk,
    input              rst_n,        // asynchronous reset
    input      [7:0]   d,
    output reg [7:0]   q
);

always@(posedge clk or negedge rst_n) begin
   if (!rst_n) q <= 8'b0;
   else        q <= d;
end

endmodule

异步复位的优点:

  1. 无需额外的逻辑资源,实现简单;

  2. 复位信号不依赖于时钟。

异步复位缺点:

  1. 复位信号容易受到外界的干扰,如毛刺等影响;

  2. 复位信号释放的随机性,可能导致时序违规,倘若复位释放时恰恰在时钟有效沿附近,就很容易使电路处于亚稳态,如下图所示:
    在这里插入图片描述

异步复位同步释放

先看一个异步复位同步释放的Verilog代码:

module Rst_gen (
    input      clk,
    input      rst_async_n,
    output reg rst_sync_n
);

reg rst_s1;

always @(posedge clk or negedge rst_async_n) begin
   if(!rst_async_n) begin
       rst_s1     <= 1'b0;
       rst_sync_n <= 1'b0;
   end
   else begin
       rst_s1     <= 1'b1;
       rst_sync_n <= rst_s1;
   end
end

endmodule

得到的电路图如下:
在这里插入图片描述
1、异步复位,同步释放的含义

异步复位:就是复位信号可以直接不受时钟信号影响,在任意时刻只要是低电平就能复位,即复位信号不需要和时钟同步。上图中,当rst_async_n有效时,第一个D触发器的输出是低电平,第二个D触发器的输出rst_sync_n也是低电平,第二个方框中的异步复位端口有效,输出被复位。

同步释放:让复位信号取消的时候,必须跟时钟信号同步,即刚好跟时钟同沿。上图中,假设rst_async_n撤除时发生在clk上升沿,如果不加此电路则可能发生亚稳态事件(有的时候会打三拍)。但是加上此电路以后,假设第一级D触发器clk上升沿时rst_async_n正好撤除,则D触发器1可能输出高电平“1”,也可能输出亚稳态,也可能输出低电平。但此时第二级触发器不会立刻更新输出,第二级触发器输出值为前一级触发器Q1的输出状态。显然Q1之前为低电平,故第二级触发器输出保持复位低电平。直到下一个时钟有效沿到来之后,才随着变为高电平。即实现同步释放。

2、异步复位,同步释放的优点

  • 避免复位信号释放的时候造成亚稳态问题
  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关
  • 有效捕捉复位,即使是短脉冲复位也不会丢失
  • 有明确的复位撤销行为,复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间
  • 用两级触发器打两拍的方法解决亚稳态的问题

3、为何代码中第一级触发器的数据端口是1’b1,而不是rst_async_n?
如果是rst_async_n,则生成的电路如图如下:
在这里插入图片描述
如果是1’b1,则生成的电路图如下:
在这里插入图片描述
显然第二种方法更好,因为本身复位是高扇出信号,第二种方法可以减小复位信号的扇出数,1’b1意思是直接接电源,节省资源,这样可以使电路性能更好。

多时钟域下异步复位同步释放

因为异步复位,同步释放中复位释放需要与时钟同步,故不同的时钟域时,有两种办法解决这个问题:
1、非协调的复位撤销
使用每个时钟搭建自己的复位同步器即可,如下图所示:
在这里插入图片描述
Verilog代码如下:

module CLOCK_RESET(
       input rst_n,
     input aclk,
     input bclk,
     input cclk,
     output reg  arst_n,
     output reg  brst_n,
     output reg  crst_n
       );


reg arst_n0,arst_n1;
reg brst_n0,brst_n1;
reg crst_n0,crst_n1;


always @(posedge aclk or negedge rst_n) 
  if(rst_n==0) begin
    arst_n0<=1'b1;
   arst_n1<=1'b0;
   arst_n<=1'b0;
  end
  else begin
    arst_n<=arst_n1;
    arst_n1<=arst_n0;
  end  
  
always @(posedge bclk or negedge rst_n) 
  if(rst_n==0) begin
    brst_n0<=1'b1;
   brst_n1<=1'b0;
   brst_n<=1'b0;
  end
  else begin
    brst_n<=brst_n1;
    brst_n1<=brst_n0;
  end  
     
    
always @(posedge cclk or negedge rst_n) 
  if(rst_n==0) begin
    crst_n0<=1'b1;
   crst_n1<=1'b0;
   crst_n<=1'b0;
  end
  else begin
    crst_n<=crst_n1;
    crst_n1<=crst_n0;
  end  
   
endmodule

2、 顺序协调的复位撤销
当多个时钟域之间对复位释放的时间有顺序要求时,将复位同步器级联起来就可以构成多个时钟域按顺序的复位释放,如下图所示:
在这里插入图片描述
Verilog代码如下:

module CLOCK_RESET(
       input rst_n,
     input aclk,
     input bclk,
     input cclk,
     output reg  arst_n,
     output reg  brst_n,
     output reg  crst_n
       );


reg arst_n0,arst_n1;
reg brst_n0,brst_n1;
reg crst_n0,crst_n1;


always @(posedge aclk or negedge rst_n) 
  if(rst_n==0) begin
    arst_n0<=1'b1;
   arst_n1<=1'b0;
   arst_n<=1'b0;
  end
  else begin
    arst_n<=arst_n1;
    arst_n1<=arst_n0;
  end  
  
always @(posedge bclk or negedge rst_n) 
  if(rst_n==0) begin
   brst_n1<=1'b0;
   brst_n<=1'b0;
  end
  else begin
    brst_n<=brst_n1;
    brst_n1<=arst_n;
  end  
     
    
always @(posedge cclk or negedge rst_n) 
  if(rst_n==0) begin
   crst_n1<=1'b0;
   crst_n<=1'b0;
  end
  else begin
    crst_n<=crst_n1;
    crst_n1<=brst_n;
  end  
     
     
endmodule

总结

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

Reference

https://blog.csdn.net/weixin_42300424/article/details/113411438.
https://cloud.tencent.com/developer/article/1830029.

Android的虚拟A/B整包升级是一种用于安卓系统的升级方式。在传统的系统升级中,用户需要下载整个升级包并进行安装,这可能需要一段时间并且可能会中断设备的正常使用。而虚拟A/B整包升级则是一种增量升级的方式,它只需要下载和安装发生变化的部分,可以大大减少升级所需的时间和中断使用的时间。 虚拟A/B整包升级依赖于A/B分区的特性。在安卓设备的A/B分区中,有两个完全相同的系统分区,分别被标记为A和B。在正常情况下,设备使用其中一个分区作为当前运行的系统,而另一个分区则作为备份系统。当进行升级时,设备会将升级包下载到闲置的分区中,并在下一次重启时切换到该分区。这个过程可以在后台进行,不会对设备的正常使用造成任何干扰。 虚拟A/B整包升级的好处是显而易见的。首先,它节省了用户的时间,不需要等待整个升级包的下载和安装。其次,由于只需要下载和安装变化的部分,升级的文件大小也大大减小,这对于网络条件较差或者设备存储空间有限的用户来说非常有益。另外,由于升级过程在后台进行,用户可以在此期间继续正常使用设备,不会影响工作和娱乐。 总之,虚拟A/B整包升级是一种高效且便捷的安卓系统升级方式,它减少了升级过程所需的时间和资源,提高了用户体验。通过这种方式,用户可以更快地获得最新的系统功能和修复,保持设备的安全和稳定性。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值