FPGA常用复位处理比较

原文地址 : http://blog.163.com/qingyu_1984/blog/static/1444145032012620112858498/


一、介绍:

   同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下:

           always @ (posedge clk) begin

                  if (!Rst_n)

                    ...

             end

异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下:

always @ (posedge clk,negedge Rst_n) begin

if (!Rst_n)

                     ...

          end


二、各自的优缺点:

    1、总的来说,同步复位的优点大概有3条:

      a、有利于仿真器的仿真。

      b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。

      c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。

 

    其缺点也有不少,主要有以下几条:

      a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合           逻辑路径延时,复位延时等因素。

      b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的           数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。

 

    2、对于异步复位来说,他的优点也有三条,都是相对应的:

      a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。

      b、设计相对简单。

      c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。

 

      缺点:

      a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄           存器输出出现亚稳态,从而导致亚稳态。

      b、复位信号容易受到毛刺的影响。

 

三、总结:

    所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。

 

**********************************************异步复位,同步释放****************************************

 

     以前从来没有对FPGA的复位可靠性关注过,想当然的认为应该不会有什么问题。当问题真正出在复位上的时候,才又仔细地对FPGA的复位深入的了解了一下。首先我们用的复位管脚不是FPGA的全局管脚,并且复位信号上没有上拉电阻,容易受到干扰而产生毛刺,这对异步复位是相当有害的。其次,我在FPGA内部对复位的处理过于简单。

 

      今天在网上看了一些资料,很多是关于同步和异步复位的优缺点比较。由于我在FPGA内部用的是异步复位,所以主要看了一下异步复位的缺点:1)复位信号在时钟有效沿或其附近释放时,容易使寄存器或触发器进入亚稳态;2)容易受到毛刺的影响;3)难以仿真,难以进行静态时序分析。上面的前两条应该对我来说是影响最重要的,而第三条说老实话,我还没有到哪个阶层(嘿嘿)

 

      异步复位,同步释放——就可以消除上面的前两条缺点。所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在复位信号释放的时候受到时钟信号的同步。通过一个复位信号综合器就可以实现异步复位,同步释放。下面是一个复位信号综合器的VHDL描述:

 

Designer: skycanny

-- Date:2007-1-27

-- Discription: Reset Synthesizer

Library ieee;

Use ieee.std_logic_1164.all;

Entity Rst_Synth is

      Port

(

      Clk         :      in    std_logic;

      Arst        :      in    std_logic;

      Rst_n      :      out  std_logic

);

End entity Rst_Synth;

Architecture RTL of Rst_Synth is

Signal    dff   :      std_logic;

Begin

      Process(Arst ,Clk )

       Begin

              If Arst = ‘0 then

                     Dff               <= ‘0’;

                     Rst_n      <= ‘0’;

Elsif Clk’envent and Clk = ‘1’ then          

                     Dff               <= ‘1’;

                     Rst_n      <= Dff;

End if;

      End process;

End RTL;

 

 这里提供给系统的复位信号RST_n只有当其复位输入端Arst = ‘1’且时钟脉冲Clk上升沿来临时才会置1,

 才将复位信号释放,实现同步释放的作用。        ——zhengjw2012.10.18

(假设不这样做,当触发器的复位信号置1时刻和其时钟信号的上升沿时刻很接近时,会造成此时触发器的

   信号建立时间setup_time很短,造成亚稳态)。

使用复位信号综合器可以很好地将同步和异步复位的优点结合起来,而消除他们缺点。因此在FPGA/CPLD的逻辑设计中可以很好的提高复位的可靠性,从而保证电路工作的稳定可靠性。


/

PS : 自己习惯使用Verilog ,把原文的VHDL代码改成VerilogHDL后,异步复位同步释放,代码如下:

module rst_n_ctrl_module  

input  clk ,

input  rst_n ,  // outside reset 

output sys_rst_n  // system reset 

) ;

reg rst_n_r1 ,rst_n_r2 ;

always@(posedge clk or negedge rst_n) begin

if(!rst_n) begin

    rst_n_r1 <= 1'b0 ;

rst_n_r1 <= 1'b0 ;       

end

else begin

rst_n_r1 <= 1'b1 ;

rst_n_r2 <= rst_n_r1 

end

end

 assign sys_rst_n  =  rst_n_r2  ;

  endmodule

 ///




  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值