精华内容
下载资源
问答
  • 【转】异步信号同步处理
    2022-03-29 22:59:26

    1.异步信号的同步处理——慢时钟域到快时钟域https://blog.csdn.net/qq_39485231/article/details/105381014
    2.异步信号的同步处理——快时钟域到慢时钟域(方法一)https://blog.csdn.net/qq_39485231/article/details/105378323
    3.异步信号的同步处理——快时钟域到慢时钟域(方法二) https://blog.csdn.net/qq_39485231/article/details/105380869

    更多相关内容
  • 异步信号同步处理——慢时钟域到快时钟域一、什么是亚稳态1.亚稳态发生原因2.亚稳态发生场合3.亚稳态危害二、理论分析1、信号传输中的亚稳态三、异步信号同步处理,慢时钟域到快时钟域1、程序2、适用条件 一、...

    相关文章
    1.异步信号的同步处理——慢时钟域到快时钟域https://blog.csdn.net/qq_39485231/article/details/105381014
    2.异步信号的同步处理——快时钟域到慢时钟域(方法一)https://blog.csdn.net/qq_39485231/article/details/105378323
    3.异步信号的同步处理——快时钟域到慢时钟域(方法二) https://blog.csdn.net/qq_39485231/article/details/105380869

    一、什么是亚稳态

    1.亚稳态发生原因

    在FPGA系统中,如果数据传输中不满足触发器的Tsu和Th不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。

    2.亚稳态发生场合

    只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。

    3.亚稳态危害

    由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。

    二、理论分析

    1、信号传输中的亚稳态

    在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。

    它们发生的原因如下:

    (1)在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求;

    (2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求;

    当数据在目的寄存器Tsu-Th时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。如图所示
    在这里插入图片描述
    由图可知,当产生亚稳态后Tco时间后会有Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。因此,会对后续电路判断造成影响。

    三、异步信号的同步处理,慢时钟域到快时钟域

    1、程序

    module picture_1
        (
            input sys_clk,
            input sys_rst,
            input Asynch_in,
            
            output Synch_out
        );
        
    reg Asynch_in_1;
    reg Asynch_in_2;
    
    assign  Synch_out = Asynch_in_2;
        
    always @(posedge sys_clk or posedge sys_rst)
        begin
            if(sys_rst)
                begin
                    Asynch_in_1 <= 1'b0;
                    Asynch_in_2 <= 1'b0;
                end
            else
                begin
                    Asynch_in_1 <= Asynch_in;
                    Asynch_in_2 <= Asynch_in_1;
                end
        end
    endmodule 
    

    2、适用条件

    1. 上面的程序只能用在从慢时钟域到快时钟域的信号同步,对于快时钟域的信号不能用上面的方法同步到慢时钟域,因为可能信号持续时间太短,导致慢时钟根本采样不到信号。
    2. 第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%。一般情况下进行两级寄存就能消除大多数情况下的亚稳态,对于求稳的同学可以进行三级寄存。假如我们需要检测同步后信号的边沿,而且用下面的方法判断,那么我们在寄存的时候在原来的基础上要多寄存一次,不然我们会用到可能还处于亚稳态的信号来判断边沿
    assign posedge_pulseb = (~pulseb_1) & (pulseb_0)
    
    展开全文
  • 异步信号同步和边沿检测

    千次阅读 2016-08-09 14:44:08
    异步信号的同步化异步信号同步化的目的就是在于消除可能存在的亚稳态至于什么是异步信号同步化,请自行google…这里直接通过两级寄存器对异步信号处理实现同步化 reg rx_1,rx_2; always@(posedge clk or negedge rst...

    异步信号的同步化


    异步信号同步化的目的就是在于消除可能存在的亚稳态

    至于什么是异步信号同步化,请自行google…这里直接通过两级寄存器对异步信号处理实现同步化

        reg rx_1,rx_2;
        always@(posedge clk or negedge rst_n)
        if(!rst_n)begin
            rx_1 <= 1'b0;
            rx_2 <= 1'b0;
        end
        else begin
            rx_1 <= rx;//data_in
            rx_2 <= rx_1;
        end

    边沿检测

    如何对边沿进行检测呢,同样也是使用两级寄存器来实现,通过两级寄存器的值检测信号的变化,产生标志脉冲
    这里写图片描述

        reg s_0_Temp,s_1_Temp;
        //reg s_2_Temp;
        always@(posedge clk or negedge rst_n)
        if(!rst_n)begin
            s_0_Temp <= 1'b0;
            s_1_Temp <= 1'b0;
            //s_2_Temp <= 1'b0;
        end
        else begin
            s_0_Temp <= signal_in;//第一拍
            s_1_Temp <= s_0_Temp;//第二拍
            //s_2_Temp <= s_1_Temp;//第三拍
        end
        //同时钟域打拍
        wire pedge,nedge;
        assign pedge = !s_1_Temp && s_0_Temp;
        assign nedge = s_1_Temp && !s_0_Temp;
    
    /*
    //跨时钟域打拍
        //wire pedge,nedge;
        //assign pedge = !s_2_Temp && s_1_Temp;
        //assign nedge = s_2_Temp && !s_1_Temp;
    */

    这里写图片描述

    这里写图片描述

    转载OpenHW开源社区FPGA之亚稳态的分析帖子

    展开全文
  • 参考高级设计:http://www.eefocus.com/coyoo/blog/13-12/301064_679a3.html异步复位同步化同步化异步复位) 为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化异步复位,我们称其为第三...

    参考高级设计:http://www.eefocus.com/coyoo/blog/13-12/301064_679a3.html


    异步复位同步化(同步化的异步复位)

             为了避免纯粹的同步复位和纯粹异步复位的问题,可以使用一种叫做同步化的异步复位,我们称其为第三类复位。这种复位完全结合了异步复位和同步复位的优势,我们知道异步复位的优势是不参与数据路径,所以不影响数据路径速度,而复位几乎是瞬间起作用;而同步复位的优势是百分百地同步时序分析且具有抗噪声性能。这种复位其实就是通常我们所说的异步复位同步释放。就如同我之前讨论的那样,异步地进入复位是最好的,只是异步地退出复位会导致一些类似亚稳态和由同步电路参与反馈而引起不想要的状态之类的危害等问题。

             后面我们会讨论如何来实现这样的同步化的异步复位。我先来如图15所示的电路,同步寄存器(Synchronizer Register)象同步复位那样被使用,不过被同步后的异步复位和原始异步复位经过门控以后用来异步地复位后续寄存器。这个电路中异步复位信号异步地复位后续电路,并且复位是异步地释放。它的缺点就是复位路径上引入了门电路的延迟。

     


    图15:带门控的同步化异步复位原理图

             一种更好的实现方法如图16所示,这个电路去除了图15中复位路径上门电路延迟。异步复位输入直接连接到同步寄存器(Synchronizer Register)的CLRN端口上,这样复位立即生效。当复位撤除(释放)时,一个逻辑“1”从同步器(Synchronizer)被时钟打出用来同步地释放后续寄存器的复位。

     


    图16:不带门控的同步化异步复位原理图

             图16等效的Verilog代码如图17所示,第一个进程模块用来产生同步复位输出rst_n,rst_n作为第二个进程模块的异步复位。两个进程模块的复位信号都位于各自的敏感列表中。其实第一个进程模块就是将系统输入的异步复位进行同步,产生一个后续逻辑使用的同步化了的异步复位,所以我们看到第二个进程模块里将这个已经同步化了的复位信号当作异步复位使用。

     


    图17:同步化异步复位的Verilog代码

             同样,为了减少亚稳态对上述同步器中的两个寄存器的影响,同时也是为了增加平均无故障时间(MTBF),这两个寄存器应该在FPGA中被放置的越靠近越好,以尽量减少在器件中的布线延迟。Quartus II的fitter将会自动认识到这些寄存器是用于同步器,所以会自动地进行上述处理,作为本例这两个寄存器将会被布局到同一个LAB中。

             尽管reset_n已经进行了上述同步化处理,时序约束的时候还是要使用set_false_path命令将其进行切割,而从同步寄存器输出的复位rst_n现在可以使用TimeQuest进行准确地Recovery和Removal分析。本设计的SDC约束和图14是一样,所以现在我们在Quartus II中编译这个设计并运行TimeQuest时序分析器,那么我们将会得到这个电路的Recovery和Removal的slack报告,如图18所示。

     


    图18:同步化异步复位的Recovery和Removal分析

             上述分析结果表明,两条路径(reg4到reg1和reg4到reg2)都进行了Recovery和Removal检查。这个电路的Recovery时间检查(就象建立时间检测一样)差不多有9ns的slack,而Removal(就象保持时间检查一样)也有660ps的slack。两个检查都得到通过,意味着这个电路没有时序错误路径。

             使用上述同步化异步复位的一个代价是它们很容易受到噪声和窄脉冲的干扰。同样地,如果可能最好对输入到FPGA的异步复位先进行滤波和去抖动。图16中的同步化异步复位原理图可以确保同步后的异步至少有一个时钟周期的长度,如果需要扩展复位长度到n个时钟周期,那么可以增加同步器中的寄存器个数到n+1个。请一定确保外部输入的异步复位reset_n连接到了所有同步器寄存器的CLRN端口,这样确保使得产生的同步化异步复位能够被异步地置位。

             当有PLL涉及时,有些特殊情况需要考虑。比如我们来如图19所示的电路。需要同步的复位跟之前一样直接接到了同步器中寄存器的CLRN端口,而同步后的寄存器也同样接到了reg1和reg2的CLRN端口,同时也被接到PLL的areset端口。所有寄存器包括同步器中的寄存器的驱动时钟来自PLL的输出时钟。虽然看起来PLL使用了同步后的复位,实际上这是行不通的。当PLL处于复位状态时,PLL的c0是没有时钟输出的,因此同步器中的寄存器将无法清除复位(意思是复位无法得到释放)。结果是,这个电路将永远无法跳出复位。

     


    图19:使用PLL时不正确实现同步化异步复位的原理图

             为了解决这个问题,PLL的复位应该使用FPGA原始输入的异步复位reset_n(如图20所示,这里进行了取反,这主要取决于复位是‘0’有效还是‘1’有效,这里不讨论),而不是同步后的复位。此外,使用PLL的Lock输出来作为同步器中寄存器的时钟使能,是个不错的做法。因为这将防止同步后的复位在PLL的输出时钟稳定之前提前释放。

     


    图20:使用PLL时正确实现同步化异步复位的原理图

             图21显示了图20所示是PLL正确实现同步化异步复位原理图的Verilog代码。

     


    图21:使用PLL时正确实现同步化异步复位的Verilog代码

             注意到上述代码中同步器的进程模块中多一个条件,即PLL的Locked信号,它作为同步器中的寄存器的同步时钟使能信号。同时注意下面例化的PLL以及两个个进程模块的时钟,这些都是当加入PLL时仅有的变化。

             图22是需要给这个电路加入的SDC时序约束,基本和没有使用PLL相同,唯一的区别是需要使用create_generated_clock语句为PLL的输出时钟加约束(注意其实使用PLL后,可以直接使用语句derive_pll_clocks来简单地进行约束)。

     


    图22:使用PLL时实现同步化异步复位的时序约束

             最后,还有一个值得一提的例子。如前所述,设计中的不同时钟域的寄存器如果需要复位,应该首先将复位同步到当前的时钟域后再使用,也就是说每个时钟都需要有一套自己的复位同步器寄存器。而且,有的时候设计的某些部分可能需要比其它部分先从复位状态释放,所以这就需要一个复位释放顺序的安排。图23给出了这样一个例子,同步寄存器都通过类似菊花链方式串起来,我们看到最上面的同步器具有最高优先级从复位状态跳出来。图23所示的电路中,所有的复位都同时有效,但是rst_a_n具有从复位状态跳出的最高优先级,接着是rst_b_n具有中等优先级,rst_c_n是最后被释放的。当然,如果在不同复位之间需要更长的间隔时间,可以在同步器中添加任意个数寄存器来达到需要的间隔长度。

     


    图23:不同时钟域同步化异步复位释放优先级安排

     

    总结

    本文介绍了不同复位的优缺点,比如同步复位,异步复位以及同步化的异步复位。同步复位需要一个时钟,所以窄复位脉冲将会被忽略,然后同时增加了系统的抗干扰能力。同步复位是百分之一百的同步电路,所以不存在亚稳态问题。只是同步复位会带来额外的资源消耗以及数据路径上的延迟,基于此我们说同步复位不是最佳复位选择。TimeQuest可以象分析其它数据路径那样分析同步复位。

    异步复位通常立即起作用,也容易被实现,而且由于它们不象同步复位那样会给数据路径引入额外的延迟,所以复位速度很快。同时相比同步复位,异步复位消耗更少的逻辑资源。比较不幸的是,它们无法通过TimeQuest来进行时序分析(其它静态时序分析器也无法分析),而且如果处理不当还会给电路带来亚稳态问题。异步复位的最大弱点是它们无法确保所有的寄存器在同一个时钟沿处跳出复位状态。这在带反馈的同步设计中是会有问题的,比如状态机设计。

    在将异步复位连接到寄存器的异步输入端口前给它加入一个同步器,这样就创造一个叫同步化了的异步复位。这种复位具有异步复位那样的立即将复位作用于电路好处,同时又提高电路速度,因为它们不会给数据路径带来额外的延迟。同时,这种复位象同步复位那样避免了亚稳态问题,而且保证所有的寄存器能够同时从复位状态跳出。不象异步复位,同步化了异步复位可以在TimeQuest里分析Recovery和Removal。正是由于这些原因,同步化了的异步复位是大部分FPGA设计中复位电路首先方法。



    注意:

    1)PLL的复位应该使用FPGA原始输入的异步复位reset_n

    2)复位信号的IO约束——看你的复位是同步复位还是异步复位,通常复位都会做成异步,这时候应该是false path的,如果同步,从管教输入的复位需要设最大输入延时。

    3)对异步信号进行同步化(异步复位,同步释放),尽管reset_n已经进行了上述同步化处理,时序约束的时候还是要使用set_false_path命令将其进行切割,而从同步寄存器输出的复位rst_n现在可以使用TimeQuest进行准确地RecoveryRemoval分析。


    展开全文
  • FPGA异步时钟同步化

    千次阅读 2017-09-01 16:12:53
    什么是CEO,就是首席执行官,是在一个企业中负责日常经营管理的最高级管理人员,又称作行政总裁,或最高执行长或大班。...那么当系统中有异步时钟的时候,怎么办?每一个系统必须有一个最高级别的时
  • 关于FPGA异步信号处理的一点理解

    千次阅读 2018-05-18 10:48:44
    异步信号同步化在FPGA设计中具有很重要的意义,尤其是高速、大型设计中,不可避免地涉及异步信号的处理。很多文献讨论过这个问题,在此我并不做任何的理论分析。 一个基本的共识是单bit异步信号采用多级同步寄存器...
  • 两种异步时钟同步化区别分析

    千次阅读 2021-03-04 08:49:50
    同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。用Verilog描述如下: always @ (posedge clk) begin if (!Rst_n) … end 同步复位的优点: 有利于...
  • Verilog时序逻辑硬件建模设计(二)同步异步复位-Synchronous and Asynchronous Reset没有任何寄存器逻辑,RTL设计是不完整的。RTL是寄存器传输级或...
  •  信号是典型的异步事件。内核在某个信号出现时有三种处理方式: a:忽略信号,除了SIGKILL和SIGSTOP信号不能忽略外,其他大部分信号都可以被忽略; b:捕捉信号,也就是在信号发生时调用一个用户函数,注意不能捕捉...
  • 今天和大侠简单聊一聊FPGA设计中异步电路中的时钟同步处理方法,话不多说,上货。 既然说到了时钟的同步处理,那么什么是时钟的同步处理?那首先我们就来了解一下。 时钟是数字电路中所有信号的参考,没有时钟或者...
  • 复位信号可以分为同步复位和异步复位两大类。 同步复位指的是当复位信号发生变化时,并不立即生效,而是等到有效时钟沿采集到复位信号的变化后,才会对寄存器进行复位操作。从同步复位的描述中,就可发现同步复位的...
  • 外部的异步复位信号被二级寄存器同步化之后,复制不同的复位寄存器连到不同的模块来作为复位控制。如果单个模块的复位扇出太大的话,还可以在模块内部复制复位寄存器。强烈建议那些在datapath上不需要复位的寄存器...
  • 复位信号简介 简介 在仿真中复位信号的基本作用是将电路强制到一个确定的状态。在实际设计中是否需要复位,取决于芯片的应用和功能,如果一个芯片不需要一个...使用同步复位还是异步复位; 是否每个触发器都要收到复位
  • 复位信号设计(异步复位、同步释放)笔记详解 1 时序设计 1.1 复位信号设计(异步复位、同步释放) 1.1.0 复位恢复时间和清除时间 首先解释一下恢复时间(recovery time)和清除时间(removal time):(以复位信号...
  • 在学习特权同学深入浅出玩转FPGA时,课本... 异步复位中最严重的问题是,如果异步复位信号在触发器时钟有效沿附近“释放”(复位信号从有效变为无 效)的话,可能会导致触发器输出的亚稳态。 这里不得不说的是...
  • 同步复位、异步复位、异步复位同步释放笔记 一般来说,竞争-冒险是由于组合电路竞争冒险产生毛刺,从而影响整个逻辑电路。其实时序电路中也是存在竞争-冒险的,而这一特性主要是由D触发器输入端信号之间的竟争产生的...
  • 异步时钟设计的同步浅谈

    千次阅读 2019-06-13 14:22:30
    设计纯粹的单时钟同步设计是一种奢侈品,很少有ASIC设计师知道。 大多数设计的ASIC都由多个异步时钟驱动,需要特殊的数据,控制信号和验证处理,以确保及时完成稳健的工作设计。
  • 异步复位同步释放 打两拍

    千次阅读 2020-04-22 19:17:23
    文章目录1. 异步复位2. 同步复位3. 异步复位同步释放 今天好好理一理异步复位,同步复位,以及亚稳态中的异步复位同步释放。 1....
  • 【转】FPGA中对异步信号处理

    千次阅读 2018-06-22 15:08:01
    最基本的结构是两个紧密相连的触发器,第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。这种最基本的结构叫做电平同步器。 ...
  • //不带PLL的异步复位,同步释放: //其实就是用的打节拍的方式将复位信号控制成clk控制的信号而已! module reset (  input clk,  input reset,  output reset_2 );  reg reset_1;  reg reset_2; ...
  • 异步复位,同步释放的理解目录目录同步复位和异步复位异步复位同步复位那么同步复位和异步复位到底孰优孰劣呢?异步复位、同步释放问题1问题2问题3问题4问题5参考资料同步复位和异步复位异步复位异...
  • 异步FIFO的一些小事·0】异步FIFO同步化设计

    千次阅读 多人点赞 2017-09-03 22:09:03
    异步FIFO设计
  • 利用 Python yield 创建协程将异步编程同步化 Python 2015-09-07 08:40:34 发布 您的评价: 0.0 收藏 0收藏 在 Lua 和 Python 等脚本语言中,经常提到一个概念: 协程。也经常会有同学对协程的概念及其作用比较...
  • FPGA异步信号寄存器打拍

    千次阅读 2020-08-06 10:38:20
    对于异步信号处理,一般要进行寄存器打拍以防止亚稳态的产生。通常可以打一拍、两拍或者三拍。打一拍就是指将信号延时一个时钟周期,打n拍就是延迟n个时钟周期。 当同一个时钟域的信号由于各种延时导致不能满足...
  • 同步复位 优点: 一般能够确保电路是百分之百同步的。 确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段。 缺点: ...复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位。...异步复位信号识...
  • 平时我们使用线程的时候一般是继承QThread类,实现它的run()函数,将需要在线程中执行的代码放在run()里进行...因为在Qt4.3之前,run是虚函数,必须子类QThread来实现run函数。而从Qt4.4开始run默认调用QThread::exe
  • 摘 要:通用异步串行接口(Universal Asynchronous Receiver Transmitter,UART)在通信、控制等领域得到了广泛...本人近实现的中频软件无线电硬件平台,就以FPGA为,实现上变频、下变频等中频数字信号处理,并且构
  • 最基本的结构是两个紧密相连的触发器,第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。这种最基本的结构叫做电平同步器。 ...
  • 今天好好理一理异步复位,同步复位,以及亚稳态中的异步复位同步释放。 一般让复位信号低电平有效 异步复位:复位信号不受时钟的控制,只要复位信号有效,那么电路就会复位。对应的写法为: always @ ...
  • 操作系统中的同步异步

    万次阅读 多人点赞 2018-07-12 11:23:38
    操作系统中同步异步性概念 首先我们从操作系统的发展中学习什么是异步性。在操作系统发展的初期阶段,CPU处理的是作业,而且是单道批处理。什么意思呢?就是一个作业从提交到结束,程序员都不能干预,此时整台...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,473
精华内容 25,389
关键字:

异步信号的同步化处理

友情链接: OverbyteIcsV7Gold.zip