异步复位,同步释放

408 阅读1分钟

一般来说,同步系统,需要异步复位。

因为同步复位,会更加浪费电路资源。

      if(!sys_rst_n)
          q <= 1'b0   ;
      else
          q <= d      ;
endmodule

      if(!sys_rst_n)
          q <= 1'b0   ;
      else
          q <= d      ;
endmodule

(
   input    sys_clk     ,
   input    sys_rst_n   ,
   output    q       
);
reg a;
reg b;
  always@(posedge sys_clk or negedge sys_rst_n)//异步复位,同步释放
      if(!sys_rst_n) begin
          a <= 1'b0   ;
          b <= 1'b0   ;//异步复位
       end
      else  begin
          a <= 1'b1   ;
          b <= a     ;//同步释放
       end
assign   q = b ;
endmodule

复位信号到来的时候,不受时钟信号的同步。 而是在时钟信号释放的时候受时钟同步。

由于异步复位信号与时钟无必然联系,两者都是独立的,所以复位信号的释放将有一定的概率导致电路出现亚稳态。

在rst_n信号为低时,立刻进行复位。 而rst_n信号由低到高释放时,为了防止亚稳态的出现,将rst_n信号用DFF向后延一周期,达到与时钟clk边沿同步的目的。

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

  • 避免复位信号释放的时候造成亚稳态问题

  • 只要复位信号一有效,电路就处于复位状态,与时钟沿无关

  • 有效捕捉复位,即使是短脉冲复位也不会丢失

  • 有明确的复位撤销行为。复位的撤离是同步信号,因此有良好的的撤离时序和足够的恢复时间