异步复位、同步释放

文章目录

  • 1.同步复位的优缺点
  • 2.异步复位的优缺点
  • 3.异步复位、同步释放

注:更多精彩请看: 面试常问的verilog代码汇总 一文


1.同步复位的优缺点

同步复位是指只有当时钟有效边沿到来时,才能进行复位。如下,verilog描述为:

always@(posedge clk)begin
  if(!rst_n)
   ...
end

使用限制

  • 复位信号的有效周期必须要大于一个时钟周期;
  • 复位电路还要考虑所有相关的组合逻辑电路的延时,加上时钟布线产生的时钟偏斜(clock skew);

2.异步复位的优缺点

异步复位是指无论是否时钟有效边沿到来,只要复位信号有效,就进行复位。如下,verilog描述为:

always@(posedge clk or negedge rst_n)begin
  if(!rst_n)
   ...
end

优点

  • 大多数的DFF都有异步复位端,因此直接采用异步复位可以节省资源。
  • 设计相对比较简单。

缺点

  • 如果异步复位信号在释放时(即撤销复位信号),刚好发生在时钟有效沿附近,就容易使寄存器输出出现亚稳态;如下图所示:
  • 复位信号容易受毛刺的影响。
    异步复位、同步释放_第1张图片

3.异步复位、同步释放

为了避免异步复位出现亚稳态,同时发挥异步复位的优点,弥补它的缺点,一般采用异步复位、同步释放的方式。

  • 异步复位的方式复位电路;
  • 但复位信号释放时(取消)时,必须跟时钟同步。

电路图如下所示:
异步复位、同步释放_第2张图片

解释上图:

  • 当异步复位(rst_i)无效,即为高电平时,同步后的复位信号 rst_o 也为高电平;
  • 当异步复位有效时,同步后的复位信号立刻为低电平( 0),即实现了“异步复位”;
  • 信号释放时,会在时钟上升沿来临时,才可以恢复为 高电平(1),实现“同步释放”;

verilog描述如下:

module asr_rstn(clk,rst_i);
  input clk,rst_i;
  reg rst_d1,rst_d2 ;
  always @ (posedge clk or negedge rst_i) begin 
    if(!rst_i)  {rst_d1,rst_d2} = 0;
    else        {rst_d2,rst_d1} <= {rst_n_1,1};
  end 
  assign rst_o = rst_d2; 
endmodule

Ps:给出一道例题:
(22届紫光秋招)假定时钟毛毛刺,异步复位可以不管时钟,只要复位满足就对电路复位。判断是否正确?如果不正确请给出理由?

不正确。影响异步复位信号能否安全复位的因素除了时钟产生的毛刺,另外一点很重要的原因就是:当异步复位信号在释放时,如果刚好发生在时钟有效边沿的附近,那么有可能会产生亚稳态,而导致电路复位失败。

你可能感兴趣的:(数字电路基础知识,verilog)