我是靠谱客的博主 缥缈微笑,最近开发中收集的这篇文章主要介绍异步信号的同步处理——慢时钟域到快时钟域一、什么是亚稳态二、理论分析三、异步信号的同步处理,慢时钟域到快时钟域,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

相关文章
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.亚稳态发生原因

在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)

最后

以上就是缥缈微笑为你收集整理的异步信号的同步处理——慢时钟域到快时钟域一、什么是亚稳态二、理论分析三、异步信号的同步处理,慢时钟域到快时钟域的全部内容,希望文章能够帮你解决异步信号的同步处理——慢时钟域到快时钟域一、什么是亚稳态二、理论分析三、异步信号的同步处理,慢时钟域到快时钟域所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部