异步复位,同步释放

      在系统复位时,如果clk的上升沿与rst_n的下降沿同时到达,系统会先响应复位信号。但是clk上升沿与rst_n 上升沿同时到达使,就可能会出现短暂的竞争冒险问题。

解决方法:

1、  异步复位设计:优点:节省资源,设计简单,方便FPGA识别复位信号。

                          缺点:在复位释放时容易出现竞争冒险,容易受到毛刺的干扰。

2、  同步复位设计:优点:降低亚稳态概率,100%的同步电路,大大有利于时序分析,综合出来的fmax一般比较高。滤除高于时钟频率的毛                                     刺。  

                          缺点:复位信号有效长必须大于时钟周期。浪费资源(DFF都只有异步复位端,没有同步复位端)。

3、  异步复位的同步化设计:先用D触发器打一拍然后提供给剩下的时序电路使用。

           异步复位:针对D触发器它是异步的。

           同步释放:同步时钟的时候才有效,同步化复位电路。

  异步复位,同步释放 的具体方法:

      1,  无PLL,可以先延时一段时间后送出一个延时完成标志信号。

     

reg   rst_n1,rst_n2;
 always @(posedge clk)   //同步化
  begin
     if(!rst_n)
       begin
           rst_n1 <= 0;
             rst_n2 <= 0;
           end
        else 
         begin
           rst_n1 <= 1;
             rst_n2 <= rst_n;         
          end
     end
     
     reg           delay_done; // 延时完成标志
     wire          rst_n_n;
     assign  rst_n_n = rst_n2&delay_done; 
View Code

     2、有PLL的情况下,借助PLL时钟完成所存信号的锁存端。  

       

reg   rst_n1,rst_n2;
     always @(posedge clk)   //同步化
        begin
         if(!rst_n)
             begin
                 rst_n1 <= 0;
                 rst_n2 <= 0;
                 end
            else 
             begin
                 rst_n1 <= 1;
                 rst_n2 <= rst_n;         
                end
         end
    
     wire        locked; //PLL完成所存信号
     wire          rst_n_n;
     assign  rst_n_n = rst_n2&locked; 
View Code

    PS:推荐另一篇文章:

          对于异步复位、同步释放的理解:http://group.chinaaet.com/334/84221

          

原文地址:https://www.cnblogs.com/fhyfhy/p/4433953.html