• FPGA复位的可靠性(转)


    FPGA复位的可靠性(同步复位和异步复位) 

     reference:http://www.eetop.cn/blog/html/17/743817-24442.html

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

               always @ (posedge clk) begin
                  if (!Rst_n)


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

               always @ (posedge clk,negedge Rst_n)

               begin
               if (!Rst_n)
    二、各自的优缺点:
        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 = ‘1then Dff <= ‘1’; Rst_n <= Dff; End if; End process; End RTL;

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

    re:关于FPGA复位可靠性的一些体会

    个人理解,补充一下,其实这里也是用到了用两级触发器来完成异步时钟域转换的问题,对于异步复位信号,它和时钟之间是一个异步的关系,时钟很可能找不到它的上升沿,因此容易造成亚稳态。

    怎么办呢,用老方法,两级触发器。

    第一级,(尽管异步,还是要采集的),采集异步复位信号的高电平,检测到高电平后给出1。(之所以不用这一个结果作为内部的复位信号,就是考虑到1级触发器是不解决问题的,可能就是个亚稳态信号)

    第二级,把第一级的结果用clk打一排,这样就避免了亚稳态。

    绕来绕去还是亚稳态呀^_^

    同步复位与异步复位的区别

    在可编程芯片的内部,信号传输时需要时间的,即异步复位信号rst到达寄存器A和寄存器B的时间存在差异,而时钟信号因为有专用的线路不受影响;寄存器A B受到同步复位信号rst_syn时必须在时钟沿处采发生变化,这样对系统不会造成危害;而受到异步复位rst时,寄存器A B的输出马上发生改变,因为异步复位信号rst到达寄存器A和寄存器B的时间存在差异所以A B的输出也不是同时变化的,更重要的是他们不再时钟沿上变化,这样后续逻辑可能会收到错误的结果,从而造成系统不稳定;总之,在同步设计中尽量不要使用异步逻辑。
  • 相关阅读:
    JS对象、包装类
    js刷题网站
    typeof 返回的数据类型
    一文讲懂什么是函数柯里化,柯里化的目的及其代码实现
    JS 中深拷贝的几种实现方法
    JavaScript 开发的45个经典技巧
    JavaScript中的delete操作符
    IE下iframe不能正常加载,显示空白
    使用Costura.Fody插件将自己写的程序打包成一个可以独立运行的EXE文件
    list获取所有上级
  • 原文地址:https://www.cnblogs.com/limanjihe/p/9798393.html
Copyright © 2020-2023  润新知