精华内容
下载资源
问答
  • 同步、异步复位异步复位同步释放 文章目录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同步的目的。

    展开全文
  • 同步复位,异步复位,异步复位同步释放, 同步复位同步释放, 的各自含义,这样理解更容易 复位形式说白了就四种方式,刚开始学习的时候一直听...同步复位就是在时钟的上升沿(posedge)来的时候复位,高电平复位,其代码

    同步复位,异步复位,异步复位同步释放, 同步复位同步释放, 的各自含义,这样理解更容易
    复位形式说白了就四种方式,刚开始学习的时候一直听别人说同步复位同步释放,异步复位同步释放,同步复位,异步复位,各自有各自的优缺点,下面我们就好好理一理这其中的关系。同步复位和同步复位同步释放我个人的看法是一致的,只是两种不同的叫法。
    释放的概念:假如说复位信号是低电平有效,当复位信号拉高的时候,说明复位信号无效了,这就是信号的释放
    1.同步复位
    同步复位就是在时钟的上升沿(posedge)来的时候复位,高电平复位,其代码如下:
    module sync_rst(
    input i_sys_clk ;//系统时钟
    input i_sys_rst ;//系统复位
    output … //此处省略一万字
    );
    always @ (posedge i_sys_clk )//同步复位
    begin
    if(!i_sys_rst)
    begin

    end
    end
    endmodule
    2.同步复位同步释放(在csdn里面找了半天也没有解释这个概念的,我是不是第一人)
    同步复位同步释放是在时钟上升沿来的时候复位,具体代码如下
    module sync_rst(
    input i_sys_clk ;//系统时钟
    input i_sys_rst ;//系统复位
    output … //此处省略一万字
    );
    always @ (posedge i_sys_clk or posedge i_sys_rst )//同步复位同步释放
    begin
    if(i_sys_rst)
    begin

    end
    end
    endmodule
    3.异步复位:记住看见异步这两个玩意你就写下降沿negedge,看见同步你就写上升沿posedge,具体我么看一下代码,异步是自己干自己的,同步是要更上时钟的上升沿。
    module sync_rst(
    input i_sys_clk ;//系统时钟
    input i_sys_rst ;//系统复位
    output … //此处省略一万字
    );
    always @ (posedge i_sys_clk or negedge i_sys_rst )//异步复位(下降沿)
    begin
    if(!i_sys_rst)
    begin

    end
    end
    endmodule
    4.异步复位同步释放(这个应该是最牛逼的,应用范围是最广泛的,虽然我们单位是同步复位同步释放,但是异步复位同步复位优点很多)同步释放是在复位信号无效的时候和时钟信号同步 话不多说.上代码
    module sync_rst(
    input i_sys_clk ;//系统时钟
    input i_sys_rst ;//系统复位
    output … //此处省略一万字
    );
    reg reg_a;
    reg reg_b;
    always @ (posedge i_sys_clk or negedge i_sys_rst )//同步复位
    begin
    if(!i_sys_rst)
    begin
    reg_a <= 0;
    reg_b <= 0;
    end
    else
    begin
    reg_a <=1 ; //(摇一摇,扭一扭,这是我的第一拍)
    reg_b <= reg_a ; //(摇一摇 ,扭一扭,这是我的第二拍)这就打完了
    end
    end
    endmodule
    复位信号拉高之后对复位信号进行采样,这里采样时钟是i_sys_clk.对复位信号的释放进行采样之后延迟两拍再得到,一定和系统时钟同步的。
    各自的优缺点
    1、总的来说,同步复位的优点大概有3条:
    a、有利于仿真器的仿真。
    b、可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。
    c、因为他只有在时钟有效电平到来时才有效,所以可以滤除高于时钟频率的毛刺。
    他的缺点也有不少,主要有以下几条:
    a、复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。同时还要考虑,诸如:clk skew,组合逻辑路径延时,复位延时等因素。
    b、由于大多数的逻辑器件的目标库内的DFF都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会耗费较多的逻辑资源。
    2、对于异步复位来说,他的优点也有三条,都是相对应的:
    a、大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。
    b、设计相对简单。
    c、异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
    缺点:
    a、在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。
    b、复位信号容易受到毛刺的影响。
    3.总结:
    所以说,一般都推荐使用异步复位,同步释放的方式,而且复位信号低电平有效。这样就可以两全其美了。

    展开全文
  • 异步复位和同步复位

    2019-10-06 05:17:25
    异步复位实例: 1 module async_rst ( 2 input din, 3 input clk, 4 input rst_n, 5 6 output reg dout 7 ); 8 9 always @ (posedge clk or nege...

    异步复位实例:

     1 module async_rst (
     2     input       din,
     3     input       clk,
     4     input       rst_n,
     5     
     6     output reg  dout
     7 );
     8 
     9     always @ (posedge clk or negedge rst_n)
    10     begin
    11         if (!rst_n)
    12             dout <= 1'b0;
    13         else
    14             dout <= din;
    15     end
    16 
    17 endmodule
    异步复位

     

    同步复位实例:

     1 module sync_rst (
     2     input       din,
     3     input       clk,
     4     input       rst_n,
     5     
     6     output reg  dout
     7 );
     8 
     9     always @ (posedge clk)
    10     begin
    11         if (!rst_n)
    12             dout <= 1'b0;
    13         else
    14             dout <= din;
    15     end
    16 
    17 endmodule
    同步复位

    异步复位与同步复位比较:

        同步复位更耗资源,异步复位存在亚稳态。

    异步复位产生亚稳态实例:

     1 module async_rst_metastability (
     2     input       din,
     3     input       clk,
     4     input       rst_n,
     5     
     6     output reg  dout1,
     7     output reg  dout2
     8 );
     9 
    10     always @ (posedge clk or negedge rst_n)
    11     begin
    12         if (!rst_n)
    13             dout2 <= 1'b0;
    14         else
    15             dout2 <= dout1;
    16     end
    17     
    18     always @ (posedge clk or negedge rst_n)
    19     begin
    20         if (!rst_n)
    21             dout1 <= 1'b0;
    22         else
    23             dout1 <= din;
    24     end
    25 
    26 endmodule
    亚稳态

        正常情况下,clk上升沿到来时 dout1 将更新为 din ,dout2 将更新为 dout1 。一旦复位,dout1、dout2 都为 0 ,但是并不确定复位信号什么时候结束。如果 rst_n 的撤销时间(低电平变为高电平)出现在 clk 锁存数据的建立时间或者保持时间内,此时 clk 检测到 rst_n 的状态就会是一个亚稳态(不确定是 0 还是 1)。

        由于此时 rst_n 的不确定性,可能出现四种情况,即 dout1~reg0 和 dout2~reg0 都复位或者都跳出复位,再或者一个复位一个跳出复位,那么后者就会造成系统工作不同步的问题。这个简单二级异步复位这种危害不明显,但是在大工程里隐患将非常大。

    异步复位、同步释放实例:

     1 module async_rst_sync_rel (
     2     input       clk,
     3     input       rst_n,
     4     
     5     output reg  dout
     6 );
     7     reg         dout_reg;
     8 
     9     always @ (posedge clk or negedge rst_n)
    10     begin
    11         if (!rst_n)
    12             dout_reg <= 1'b0;
    13         else
    14             dout_reg <= 1'b1;
    15     end
    16     
    17     always @ (posedge clk or negedge rst_n)
    18     begin
    19         if (!rst_n)
    20             dout <= 1'b0;
    21         else
    22             dout <= dout_reg;
    23     end
    24 
    25 endmodule
    异步复位、同步释放

    或者这么写:

     1 module async_rst_sync_rel (
     2     input       clk,
     3     input       rst_n,
     4     
     5     output reg  dout );
     6     
     7     reg         dout_reg;
     8     
     9     always @ (posedge clk or negedge rst_n)
    10     begin
    11         if (!rst_n) begin
    12             dout_reg  <= 1'b0;
    13             dout      <= 1'b0;
    14         end
    15         else begin
    16             dout_reg  <= 1'b1;
    17             dout      <= dout_reg;
    18         end
    19     end
    20 
    21 endmodule
    异步复位、同步释放

    把 dout 作为复位信号。

     

    转载于:https://www.cnblogs.com/yllinux/p/8640871.html

    展开全文
  • 一、特点:  同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下:  always @ (posedge clk) begin ... 异步
  • 同步复位异步复位以及异步复位同步释放实例分析 1.1同步复位 1.1.1同步复位介绍 同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。 1.1.2同步复位优点 Ø 同步复位...
  • 在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个触...
  • 异步复位和同步复位前言一、同步复位二、异步复位三、同步复位异步复位的区别四、 异步复位同步释放 前言 本章解释一下同步复位异步复位的区别,以及异步复位同步释放究竟好在哪里,需要怎么做 一、同步复位...
  • 1、异步复位同步释放 ... 第一个寄存器输入D端接高电平 最后一级reg的Q端是作为模块输出的已同步的复位信号 模块特点: 采用3级同步器减少亚稳定发生概率 一般后端会采用定制模块实现,保证3级寄存器的上一级...
  • 同步异步复位分析

    千次阅读 2019-07-10 20:39:27
    【Verilog】 同步复位异步复位比较 同步复位sync 异步复位async 特点 复位信号只有在时钟上升沿到来时才能有效。 无论时钟沿是否到来,只要复位信号...
  • Verilog实现的异步复位同步释放模块, 复位信号高电平有效。 异步复位同步释放模块
  • 同步复位异步复位

    千次阅读 2019-07-23 20:24:50
    在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个...
  • 一、特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always @ (posedge clk) begin ... 异步复位:它是指无...
  • FPGA中同步复位异步复位介绍

    千次阅读 多人点赞 2018-03-02 14:03:02
    同步复位异步复位介绍 以及异步复位同步释放 实现方式
  • 目录一、异步复位同步释放二、Xilinx复位程序对比1.将同步化后的复位当作异步复位信号2.将同步化后的复位当作...(3)复位电平选择高电平复位; (这里说明,由于 Altera 和 Xilinx 器件内部结构的不同,Altera 的 F
  • 复位信号设计的原则是尽量不包含不需要的复位信号,如果需要,考虑使用... 异步高电平复位  。。。 每种情况会被综合出不同的硬件电路,而在Xilinx内部则有4种寄存器可用于实现  FDCE  FDPE  FDRE  F...
  • 异步复位同步释放

    2018-04-23 20:41:54
    其RTL代码如下:二、异步复位异步复位是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。RTL代码如下:三、异步复位同步释放所谓异步复位,同步释放就是在复位信号到来的时候不受时钟信号的同步,而是在...
  • 在实际的工程中选择复位策略之前必须考虑许多设计方面的问题,如使用同步复位或者异步复位或者异步复位同步释放(Asynchronous Reset Synchronous Release或者Synchronized Asynchronous Reset),以及是否每一个...
  • 异步复位、同步释放

    2014-09-03 22:21:00
    一个简单的异步复位的例子 always @ (posedge clk or negedge rst_n)  if(!rst_n) b ... 我们可以看到FPGA的寄存器都有一个异步的清零端(CLR),在异步复位的设计中这个...即使说你的设计中是高电平复位,那么实
  • 同步复位异步复位

    2012-09-08 15:59:13
    一、特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。...异步复位:它是指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。...
  • 异步复位,同步释放的理解

    万次阅读 多人点赞 2015-10-20 19:45:37
    什么情况下复位信号需要做异步复位同步释放处理 异步复位同步释放原理 利用前面两级触发器实现特点 问题1 如果没有前面两级触发器的处理异步信号直接驱动系统的触发器会出现什么情况 问题2 复位信号存在亚稳态有...
  • 文章目录1. 异步复位2. 同步复位3. 异步复位同步释放 今天好好理一理异步复位,同步复位,以及亚稳态中的异步复位同步释放。 1....
  • Verilog中同步复位异步复位比较

    万次阅读 多人点赞 2017-08-11 14:51:41
    【Verilog】 同步复位异步复位比较    同步复位 sync 异步复位 async 特点 复位信号只有在时钟上升沿到来时才能有效。 无论时钟沿是否到来,只要复位信号有效,就进行复位。 Verilog描述 always@(posedge CLK)...
  • 异步复位: ...综合后查看RTL视角,可以看出寄存器都会有一个异步清零端(CLRN),在异步复位的设计中,这个端口一般接低电平有效的复位信号rst_n,即使设计中的是高电平,实际综合后也会把异步复位信...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,400
精华内容 1,760
关键字:

异步高电平复位