精华内容
下载资源
问答
  • 一、同步复位与异步复位特点: 同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。  异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。 二、异步...
  • 异步复位

    2013-09-30 11:14:00
    长时间以来,异步复位在电路设计中经常被采用,特别是ASIC设计中。这样的设计非常受欢迎,比如一个异步输入到器件,然后给该异步信号分配全局布线资源,并连接这个异步信号到器件中每一个(几乎所有)寄存器的异步...

     长时间以来,异步复位在电路设计中经常被采用,特别是ASIC设计中。这样的设计非常受欢迎,比如一个异步输入到器件,然后给该异步信号分配全局布线资源,并连接这个异步信号到器件中每一个(几乎所有)寄存器的异步复位引脚。在某些情况下,这种方法有它的优点,但是它并不是没有缺陷。比如并不是每一个设计,器件中的每一个寄存器都需要复位的。所以说这个方法也不是完全不需要消耗布线资源以及LAB范围控制信号,最好的做法是只将复位连接到那些需要复位的寄存器。

             异步复位的一个最大优点是,它们没有象同步复位那样插入到数据路径中。因此,异步复位对寄存器之间的数据到达时间不产生任何负面影响。另一个优点是,它们一般都是即刻生效。只要寄存器收到复位脉冲,寄存器将被即刻复位,而不管相对于时钟的时序关系。所以异步复位不象同步复位那样依赖于时钟。

             电路使用异步并没有任何问题,只是在复位被释放的时候可能会出现问题,所谓的复位释放(Release)有时候也被称为复位去除(Removal)。当复位撤除时,它必须满足异步微建立时间,即µtSU。这个可以在TimeQuest里使用Recovery时间检查来得到确认。此外,复位撤除时,它也必须要满足微保持时间,即µtH。同样可以在TimeQuest使用Removal时间检查来得到确认。总之,上述两种Check被称为Rcovery/Removal分析。

             当复位信号为置无效(Deasserted)时,并且不能通过时序分析里的Recovery和Removal检查时,那么复位信号边沿就会很可能落入了一个亚稳态区域,如图1所示。

     

    1.jpg

     

    图1:亚稳态曲线

             亚稳态带来的后果是寄存器的输出(基于输入到寄存器的输入数据)需要花费更多的时间来回复到其正确的状态。这个额外增加的时间可能会导致寄存器下一级的建立时间失败,从而导致系统错误。显然,需要不惜一切代价来避免这种情况。

             避免亚稳态的方法之一是在寄存该异步复位的寄存器后增加一系列寄存器,然后使用这些寄存器的输出作为设计的复位。后面增加的寄存器通过将数据同步到时钟的方式来去除亚稳态问题。设计中后续寄存器越接近这些寄存器越好,这样可以最大限度减少布线延时,降低了数据的到达时间,从而增加了平均无故障时间(MTBF)。需要注意,重要的是这些额外增加的寄存器本身不但没有被复位,而且有几个时钟周期通过“冲刷”掉它们当前或者初始状态而被初始化。图2显示了这样一个电路的例子。

    1.jpg

     

    图2:异步复位跟随几个寄存器的原理图

             在一般情况下,象图12所示的没有反馈电路的流水线设计,它不依赖于时序电路的初始状态,并如果电路能够在跳出复位状态后等待几个周期才开始运作的话,这种类型的复位还是可以接受的。

             图2所示电路的Verilog代码如图3所示。请注意与同步复位代码的差异。现在,复位的有效沿已经位于进程的敏感列表中了。同样重要的是,后续两个寄存器不是在第一个进程的“else”部分,而是位于另外一个进程中,因为如果位于第一个进程的“else”部分,复位信号取反后被连接到寄存器的时钟使能端口,从而将会被推导出时钟使能。可以看到后面两个寄存器在第二个进程中使用了非阻塞赋值。

     

    1.jpg

     

    图3:异步复位跟随寄存器代码

             约束一个异步复位非常简单,根据定义,异步复位和它们将要复位的寄存器的时钟域之间没有任何确定的时间关系。因此,对这些复位进行静态时序分析是不太可能,它们通常在SDC文件中使用set_false_path语句来进行切割,如图4所示。由于寄存器的复位和时钟之间的时序关系是未知的,所以在TimeQuest中无法对这些路径进行Recovery和Removal分析,即使试图尝试这样做,也不会获得期望的路径报告。即使没有使用假路径约束语句对路径进行切割,也不会有这些路径上的Recovery和Removal报告。

     

    1.jpg

     

    图4:SDC中对异步复位的约束

             异步复位除了上述潜在的亚稳态问题,另一个问题是它们对噪声的易感染性。一个“嘈杂”的异步复位,很可能导致虚假的复位。出于这个原因,对异步复位进行滤波和去抖是非常重要的。如前所述,由于同步复位经过了时钟寄存,所以同步复位是不太容易出现此问题(虽然不是绝对免疫)。后面我们将看到的同步化的异步复位,会讨论完全避免这个问题的方法。

             同样的,异步复位最大的问题也许还是涉及到复位的释放(移除)。除了潜在的亚稳态问题外,无法保证每个寄存器的异步复位和时钟之间时序关系都是一样的,因为这些寄存器被布局布线于整个器件的各处。如此带来的影响是有些寄存器会及时复位,而有些寄存器不会,而是要等到下一个时钟周期才能复位。对于类似这种一个寄存器的下一个输出依赖与其它寄存器的当前输出反馈电路将带来潜在的灾难性影响。一个常见的例子就是带状态机的电路。One-Hot状态机尤其会有这种问题,因为其一次只有一个状态位被设置。由于有些状态位跳出复位状态,而其它状态位没有,那么就会有多于一个状态位被置高(即有效),这样这个状态机就会进入非法状态。如果使用二进制编码状态机,它可以创建未使用的状态来过渡到复位状态,这使得其成为一个确定性的状态机。这样就允许一个非法的或者闲置的状态得到完美的恢复。

    注:现在的Quartus II软件中有一个“Safe State Machine”的综合设置,可以用来保证设计的状态机从非法状态完美恢复。只是这个设置默认是没有打开的。

             尽管我们看到有办法解决异步复位产生的这些问题,但是还是尽可能避免使用异步复位。如何避免上述复位的问题,只能是改变复位的结构,后面我们将会看到一种不同的复位机制,即同步化的异步复位。

    转载于:https://www.cnblogs.com/lueguo/p/3346972.html

    展开全文
  • 同步复位,异步复位异步复位同步释放

    1、同步复位

    只在时钟有效沿对系统进行复位

    always@(posedge clk) begin
    	if(rst) begin
    		...
    	end else begin
    		...
    	end
    end
    

    在这里插入图片描述

    在这里插入图片描述

    优点

    • 利于仿真
    • 可综合成时序电路,利于时序分析,综合后系统工作频率高
    • 可滤除高于时钟频率的毛刺,抗干扰能力强

    缺点

    • 复位信号有效时长需要大于时钟周期
    • 大多数库的DFF只有异步复位接口,需要额外的资源

    2、异步复位

    与时钟无关,只要有复位信号,就对系统进行复位

    always@(posedge clk or posedge rst) begin
    	if(rst) begin
    		...
    	end else begin
    		...
    	end
    end
    

    在这里插入图片描述
    在这里插入图片描述

    优点

    • 大多数库的DFF有异步复位接口,节省资源
    • 设计简单,识别方便

    缺点

    • 复位信号释放时容易造成系统进入亚稳态
    • 容易受到毛刺影响,抗干扰能力差

    3、异步复位同步释放

    always@(posedge clk) begin
    	rst_r <= rst;
    end
    
    always@(posedge clk or posedge rst_r) begin
    	if(rst_r) begin
    		...
    	end else begin
    		...
    	end
    end
    

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 同步、异步复位异步复位同步释放 文章目录1、同步复位2、异步复位2.1、异步复位的隐患3、异步复位、同步释放 1、同步复位   同步复位,顾名思义是复位信号和时钟同步,当时钟上升沿检测到复位信号,执行复位...

    同步、异步复位、异步复位同步释放


    1、同步复位

      同步复位,顾名思义是复位信号和时钟同步,当时钟上升沿检测到复位信号,执行复位操作。同步复位没有用到寄存器的异步复位CLR端口,综合出来的实际电路只是把复位信号rst_n作为逻辑输入的使能信号。

    同步复位代码:

    //同步复位
    module top
    (
    	input	clk,
    	input	rst_n,
    	input	a,
    	
    	output	reg	b
    	
    );
    
    
    always@(posedge	clk)
    begin
    	if(!rst_n)
    		b <= 1'b0;
    	else
    		b <= a;
    end
    
    endmodule
    

    同步复位RTL视图:
    在这里插入图片描述
      同步复位增加了FPGA内部的资源消耗,同步复位在时钟信号clk的上升沿触发时进行系统是否复位判断,这降低了亚稳态出现概率(只是降低,不可能完全避免),它的缺点在于需要消耗更多的器件资源,无法充分利用专用的复位端口CLR。

    2、异步复位

      异步复位,无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
    异步复位代码:

    //异步复位
    module top
    (
    	input	clk,
    	input	rst_n,
    	input	a,
    	
    	output	reg	b
    	
    );
    
    
    always@(posedge	clk or negedge rst_n)
    begin
    	if(!rst_n)
    		b <= 1'b0;
    	else
    		b <= a;
    end
    
    endmodule
    
    

    异步复位RTL视图:
    在这里插入图片描述
      FPGA的寄存器都有一个异步清零端(CLR),在这个端口一般接低电平有效的复位信号rst_n,即使设计中是高电平复位,实际综合后也会把异步复位信号反向后接到CLR端。
    异步复位无需增加器件的额外资源,但是存在隐患,异步时钟域的亚稳态问题同样存在于异步复位信号和系统时钟 信号之间。

    2.1、异步复位的隐患

    通过一下实例分析异步复位存在的隐患:

    //异步复位存在的隐患实例
    module top
    (
    	input	clk,
    	input	rst_n,
    	input	a,
    	
    	output	reg	b,
    	output	reg	c
    	
    );
    
    
    always@(posedge	clk or negedge rst_n)
    begin
    	if(!rst_n)
    		b <= 1'b0;
    	else
    		b <= a;
    end
    always@(posedge	clk or negedge rst_n)
    begin
    	if(!rst_n)
    		c <= 1'b0;
    	else
    		c <= b;
    end
    
    endmodule
    

    在这里插入图片描述
      正常情况下,在clk 的上升沿将c的值更新为b,b的值更新为a。一但进入复位,b,c都清零,但是并不能确定复位信号rst_n会在什么时候结束。
    涉及到 建立时间和保持时间 参考博客:建立时间和保持时间
    在这里插入图片描述

    在这里插入图片描述
      如果结束于b_reg和c_reg的{latch edge-setup,latch edge+hold time}时间之外,那么一切都会正常。如果出现在之内,复位信号的撤销(由低变高)出现在clk锁存数据的建立时间或者保持时间之内,此时clk检测到rst_n的状态就会是一个亚稳态(不确定是0还是1),就会导致输出数据的错误。
      也有可能一个reg处于复位,另一个reg跳出了复位,均会影响系统的正常工作,如果更大的项目隐患就更大了。

    3、异步复位、同步释放

      为了消除亚稳态的产生,利用两个同一时钟沿触发的层叠寄存器,将异步信号同步化:

    //异步复位、同步释放
    module top
    (
    	input	clk,
    	input	rst_n,
    	input	a,
    	
    	output	reg	b
    	
    );
    reg	rst_n_r;
    reg	rst_n_rr;
    
    always@(posedge	clk)
    begin
    	{rst_n_rr,rst_n_r} <= {rst_n_r,rst_n};
    end
    
    always@(posedge	clk or negedge rst_n_rr)
    begin
    	if(!rst_n_rr)
    		b <= 1'b0;
    	else
    		b <= a;
    end
    
    endmodule
    

    在这里插入图片描述

    ★★★如有错误,欢迎指导!!!

    展开全文
  • 异步复位介绍 同异步复位介绍 同异步复位介绍
  • 今天好好理一理异步复位,同步复位,以及亚稳态中的异步复位同步释放。 一般让复位信号低电平有效 异步复位:复位信号不受时钟的控制,只要复位信号有效,那么电路就会复位。对应的写法为: always @ ...

    今天好好理一理异步复位,同步复位,以及亚稳态中的异步复位同步释放。

    1. 异步复位

    一般让复位信号低电平有效

    复位信号不受时钟的控制,只要复位信号有效,那么电路就会复位。对应的写法为:

    always @ (posedge clk or negedge rst_n) begin
        if (!rst_n)
            xxxx;
        else if (xx) begin
                xxxx;
                xxxx;
             end
        end
    

    注意,在此always块中,敏感量为两个,一个是clk的上升沿(posedge clk),一个是复位信号rst_n的下降沿(negedge rst_n),当复位信号下降沿出现时,不论clk在什么状态,都执行always块,即复位!

    2. 同步复位

    同步复位,即如果复位信号有效,则只能在时钟上升沿让电路复位。对应写法为:

        always @ (posedge clk) begin
            if (!rst_n)
                xxxx;
        end
    

    注意,在此always块中,敏感量只有一个,即clk的上升沿,此含义是,只有在clk的上升沿才能执行always块,否则不执行。于是如果复位信号有效,也只能等到clk上升沿才能执行always块,才能使电路复位!

    3. 异步复位同步释放

    什么同步释放不同步释放之类的,说得那么高大上的,搞得云里雾里的,其实也下面一行字就能解释清楚:

    为了避免亚稳态,让拉高的复位信号打两拍,达到与时钟clk边沿同步的目的

    注意,是时钟边沿!!!边沿,边沿,边沿

    以上就是同步释放,可见只是拉高的信号打两拍,拉低的信号,也就是复位信号有效的时候,该复位就复位,该干嘛干嘛,我们不用去管它。

    以下是解释:

    假设复位信号低电平有效rst_n,当复位信号无效时,也就是复位信号拉高时,即为复位信号的释放。

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

    对于亚稳态的处理,通常是利用同步器进行同步,使其输出能够受到时钟clk的控制。也就是说,同步器的输出最终与时钟clk同步。另外,同步器的另一个口语化表达为:“打两拍”,通过两个D触发器,最终得到与时钟同步的信号。

    至于为什么需要两个D触发器而不是一个,请移步论文《异步复位设计中的亚稳态问题及其解决方案》,提取码ejjr
    至于为什么需要两个D触发器而不是更多,是因为通过一系列的数学计算,发现如果有亚稳态的发生,且两个D触发器将此亚稳态传递到了主电路,大约需要100年的时间(具体时间我忘记了),在这么长时间内,使用者就真的不来一下复位操作吗?真就让程序一直跑下去吗?不可能吧,一个小游戏都需要停机维护,何况更加高大上的物件。所以说,两个已经够用了。

    那么将异步的复位信号打两拍,不就能够解决亚稳态的问题了吗?换句话说,复位信号有效的时候,我们不去管任何东西,系统复位让它复位就好了;之后在复位信号拉高的时候可能导致亚稳态的出现,那直接将拉高的信号打两拍,不就完事了吗?就是这么简单。

    经典的异步复位同步释放代码如下

    module asyn_reset(
    	clk	    ,
    	rst_n	,
    	
    	rst_s2
    );
    
    input clk	;
    input rst_n	;
    
    output reg rst_s2;
    
    reg rst_s1;
    
    always @ (posedge clk or negedge rst_n) begin
    	if (!rst_n) begin
    		rst_s1 <= 1'b0;
    		rst_s2 <= 1'b0;
    	end
    	else begin
    	   rst_s1 <= 1'b1	;
    	   rst_s2 <= rst_s1	;
    	end
    end
    
    endmodule
    

    综合出的电路如下:

    在这里插入图片描述

    复位信号拉高,相当于rst_n对高电平进行采样;

    由于异步复位需要在时钟上升沿进行释放,故在rst_n=1后,让信号rst_s1对电平1进行采样,之后再打一拍到寄存器rst_s2。相当于高电平被打了两拍才输出到rst_s2,达到了复位信号的释放与时钟clk同步的目的。

    展开全文
  • 同步复位 同步复位:是指当复位信号发生变化时,并不立即生效,只有当有效时钟沿采样到已变化的复位信号后,才对...异步复位: 无论时钟沿是否到来,只要复位信号有效,就对系统进行复位 always @(posedge cl...
  • 一、异步复位 verilog代码 always@(posedge clk or negedge rst_n) if(!rst_n) b <= 1'b0; else b <= a; 为何设计简单,节省资源? 异步复位设计中,低电平有效得rst_n复位信号直接连接到端口上...
  • 1.异步复位 异步复位:异步复位是指无论时钟是否到来,只要复位信号有效,就对系统进行复位。 代码如下: module asy(clk,rst_n,d,q); input wire clk; input wire rst_n; input wire d; output reg q; always@...
  • 如图第一个方框内是异步复位和同步释放电路。有两个D触发器构成。第一级D触发器的输入时VCC,第二级触发器输出是可以异步复位,同步释放后的复位信号。 电路目的:方式复位信号撤除时产生亚稳态事件。 所谓异步...
  • 同步复位、异步复位异步复位同步释放笔记 一般来说,竞争-冒险是由于组合电路竞争冒险产生毛刺,从而影响整个逻辑电路。其实时序电路中也是存在竞争-冒险的,而这一特性主要是由D触发器输入端信号之间的竟争产生的...
  • D触发器同步复位,异步复位,以及异步复位同步释放vivadoRTL结构示意;异步复位同步释放有时序仿真和时序解释
  • 同步复位与异步复位——异步复位同步释放 [转自]anghtctc的博客——天蓝色的彼岸 一、同步复位与异步复位特点:  同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作...
  • FPGAy异步复位

    2018-08-05 22:02:42
    PGA设计中常见的复位方式即同步复位和异步复位。在深入探讨亚稳态这个概念之前, 特权同学也并没有对所谓的同步复位和异步复位有太多的注意,而在实践中充分感受了亚稳 态的危害之后,回过头来细细品味《Verilog HDL...
  • FPGA-同步、异步复位-异步复位同步释放-实例分析,包括verilog代码以及电路图。
  • 三、异步复位同步释放 异步复位:复位信号不受时钟信号影响——只要是复位有效就能复位(假如约定低电平复位)。也就是说,复位信号不需要和时钟同步。 同步释放:复位信号撤销(释放)的时候,必须跟时钟信号同步,...
  • 这是个有关同步复位和异步复位以及同步释放异步复位的探讨 里面有FPGA代码,有RTL分析图,并配备了一定的文字说明,看了之后,一定会很明白的
  • 同步复位,异步复位异步复位同步释放, 同步复位同步释放, 的各自含义,这样理解更容易 复位形式说白了就四种方式,刚开始学习的时候一直听别人说同步复位同步释放,异步复位同步释放,同步复位,异步复位,各自...
  • 一、特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always @ (posedge clk) begin ...异步复位:它是指无论...
  • 在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个...
  • 异步复位: 它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。用Verilog描述如下 module rst( input clk, input rst_n, input data_in, output reg out ); always @ (posedge clk ...
  • 复位电路是每个数字逻辑电路的重要组成部分之一。复位方式大致分为二类: 同步复位和异步复位
  • 对常见三种复位方式(同步复位、异步复位异步复位同步释放)进行介绍与分析,详细介绍了各种复位方式的优缺点,并进一步分析了异步复位同步释放的工作机理与优势所在。
  • 到底是采用同步复位还是异步复位,全局复位还是局部复位,是由多方面的因素决定的。但良好的复位设计既可以提高系统的可靠性,又可以节省大量的逻辑资源。在实际应用中,笔者也看到过很多因为复位电路设计问题而导致...
  • 无论同步还是异步复位,在对触发器时序进行分析的时候,都要考虑复位端与时钟的相位关系。
  • 目录一、异步复位同步释放二、Xilinx复位程序对比1.将同步化后的复位当作异步复位信号2.将同步化后的复位当作同步复位信号三、仿真结果四、Altera复位 Xilinx 复位准则: (1)尽量少使用复位,特别是少用全局复位,...
  • ​1.同步复位:只有在时钟上升沿来的时候,复位信号才有有效。(当时钟上升沿以外的时刻都检查不到复位信号)表示:always @(posedge clk) ...异步复位:因为FPGA有自带的异步复位专用端口,所以节约资源。但是
  • 异步复位,同步复位的区别2.异步复位同步释放的实现 **1.异步复位:**不用考虑时钟同步,在复位信号有效时就进行复位。 代码示例: always@(posedge clk or negedge rst_n) If(!rst_n) a<=1’b0; else a<=b;...
  • 所谓异步复位同步化,就是我们通常说的异步复位同步撤除。
  • 同步复位与异步复位-异步复位和同步复位区别.. 浏览:188次  一、同步复位与异步复位特点: 同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。  异步复位是指无论...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,855
精华内容 7,142
关键字:

异步复位