异步信号的同步处理——慢时钟域到快时钟域

相关文章
1.异步信号的同步处理——慢时钟域到快时钟域https://blog.youkuaiyun.com/qq_39485231/article/details/105381014
2.异步信号的同步处理——快时钟域到慢时钟域(方法一)https://blog.youkuaiyun.com/qq_39485231/article/details/105378323
3.异步信号的同步处理——快时钟域到慢时钟域(方法二) https://blog.youkuaiyun.com/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)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值