亚稳态原因以及跨时钟处理方法

亚稳态原因以及跨时钟处理方法

1.亚稳态原因:不满足建立时间与保持时间要求

 (1)结论:数据早来晚走可以避免亚稳态,减少时序违例。

 (2)建立时间与保持时间概念:

建立时间Tsu:时钟触发事件来临之前,数据需要保持稳定的最小时间,以便数据能够被时钟正确的采样。

保持时间Th :时钟触发事件来临之后,数据需要保持稳定的最小时间,以便数据能够被电路准确的传输。

通俗来说就是在第二个寄存器时钟采样之前和之后数据应该稳定一段时间。

 (3)明确Tsu和Th的原因:在实际的电路中,时钟的上升和下降需要一定的时间。

 (4)建立时间要求:

        前提:两个触发器之间的理想处理时间为Reg1CK端收到沿处理信号时刻到Reg2CK端收到沿处理信号时刻为一个时钟周期Tcycle,而实际情况是两个同步设计的触发器的CK端收到的时钟的相位是有偏差的,这个偏差主要是由于时钟链路延时造成的,记这个差值为Tskew。

        建立时间要求:对于当前数据来说

        Tco+Tcomb+Tsu<=Tcycle+Tskew;

        Tco为Reg1的D到Q的时延,Tcomb为Reg1的Q端到Reg2的D端的时延,Tsu为建立时间。

        理解:

        1、首先不考虑Tskew,对于理想情况,对于两个触发器之间的最大处理时延一个周期内,应该包含Tco、Tcomb、Tsu三个时延,这是建立时延的理想情况。

        2、实际上存在Tskew,对于Reg2的捕获时刻,应该相较于理想情况向后延时Tskew,因此,在Tcycle和向后延时的Tskew内,应该包括Tco、Tcomb和Tsu这三个时间。

      (5)保持时间要求:对于新来的数据来说

        Tco+Tcomb>=Th+Tskew

        理解:

        理想情况下,Tco和Tcomb的和应该大于保持时间,新的数据更晚到达,至少在Th的时候到达,这样才可以保证在Th时间内数据不会变化以避免亚稳态。

        一种在极限情况下,当前数据在Tsu处更新,满足建立时间要求,由于下一帧来的太快了,Tco+Tcomb太小,导致在保持时间的时候已经到来,不满足保持时间要求,出现时序违例。

(6)建立时间余量与保持时间余量:

https://blog.csdn.net/qq_40147893/article/details/117018443

(7)出现亚稳态的情况:

  1. 由于线路延时,导致数据或时钟到达触发器的时刻在采样时不满足Tsu或Th要求,产生亚稳态。此情况下的亚稳态典型案例是跨时钟域信号的处理,解决方法第二部分介绍。
  2. 使用异步信号,如异步复位,异步复位信号释放的时候恢复时间和去除时间不满足要求,也会出现亚稳态。异步信号释放出现亚稳态的解决方法在复位部分介绍。

2、跨时钟处理 :跨时钟总要考虑亚稳态的情况。

2.1单比特信号

        慢时钟到快时钟

        在慢时钟到快时钟的时候,数据至少为一个慢时钟的周期,如果小于一个慢时钟周期,则需要展宽之后再做跨时钟处理。跨时钟域的数据如果是通过组合逻辑产生的,那么它会出现毛刺,需要使用触发器进行滤波处理,如将组合逻辑生成信号打一拍或打两拍。

        因此,慢时钟到快时钟最极限的情况是在慢时钟clkb下的一个周期的脉冲,并不考虑电平的情况。在时钟域B下的脉冲pulse_b在时钟域A看来,是一个很宽的“电平”信号,会保持多个clk_a时钟周期,所以一定能被clk_a采到。但是如果pulse_b的变化时刻不满足快时钟clka的建立时间或保持时间要求,那么就会产生亚稳态,此种情况下打两拍就可以很大概率避免亚稳态。

        打两拍可以大概率避免亚稳态的原因如下:

        对于一个三级触发器系统来说,大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。换句话说,对于一个可能出现亚稳态的信号,对他进行打两拍之后,出现亚稳态的概率已经不足1%了。

 图 三级触发器

        Reg1的输入信号D1不满足建立时间和保持时间要求,因此在clk的采集时,reg1的输出Q1出现亚稳态,(图中Tco<Th)。

        Tmet为亚稳态震荡时间,是触发器从亚稳态恢复到稳定状态的时间,稳定状态不等于正确状态,有可能恢复出来的值不为正确值。Tmet关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。一般来说,采集到亚稳态离稳定态的时刻越近,Tmet越小。

        如图所示,第一级寄存器发生亚稳态,具体表现为Q1为振荡状态,此时第二级寄存器Tmet大于一个时钟周期,因此Q2的输出采到了一个振荡的状态,但是此时已经基本接近稳定,因此第三个寄存器的Tmet的相较于第二个寄存器的Tmet更小,此时第三个寄存器的输出就会将亚稳态隔离开来。

图 两级触发器对亚稳态信号的隔离

        快时钟到慢时钟

a.

图 电平信号从快时钟到慢时钟的处理

b.

图 脉冲信号从快时钟到慢时钟的处理

        从快时钟到慢时钟会出现两种情况,电平信号跨时钟和脉冲信号跨时钟,脉冲信号跨时钟是极限情况,因此研究此种情况即可。

        快时钟域中的脉冲信号有可能太窄,会导致慢时钟无法采集到。因此可以考虑将脉冲信号展宽,再用慢时钟去采集。

        处理方式以及处理波形如图所示

多比特信号(参照一位知乎大佬)

        多bit跨时钟域与单bit跨时钟域的主要区别就是多bit跨时钟域存在所有比特是否在同一时钟周期到达的问题。这样的话解决问题就有以下几种思路:

        A.逻辑中是否需要同一时钟周期到达,如果不需要就可以直接采用单bit跨时钟域的方式,比如慢时钟到快时钟域直接打两拍。

        B.多bit数据是否可以通过转换码制变为单bit变化的数据,之后可以采用单比特方式跨时钟域,比如递增数(计数器)可以转换为格雷码,相邻码之间仅有一位不同,每次时间变化的仅有1bit,也就可以采用单bit方式实现跨时钟域,之后再把码制转换回来。

        C.多bit数据是否可以合并成1bit数据,例如某些多bit信号具备固定时序关系就可以通过单bit信号跨时钟域传递,然后再目标时钟域恢复出其他信号。

        D.多bit数据且无法转为单bit变化数据的,就只能采用异步FIFO的方式或是统一握手的方式来实现,而这两种方式中,异步FIFO肯定可以安全的实现时钟域的跨转,与统一握手方式相比较延时较小并且每个时钟都可以接收源时钟域数据,但是资源消耗多。统一握手方式需要反馈信号确认数据已全部到达目标时钟域,需要多个时钟周期,此时无法接收源时钟域数据或是不允许源时钟域数据变化,但是消耗资源较少。一般情况在资源充足的条件下,多bit数据可以优先选择异步fifo方式跨时钟域,甚至单bit数据也可以选择异步fifo方式跨时钟域。

        其中C情况可以使用mux来进行处理,可以适用于带数据有效标志信号的多比特数据做跨时钟域,但是这种情况会丢失大部分的数据,而且需要保证快时钟下的数据长时间不变。不如打两拍来的舒服。

                                                                                

  1. 图 多比特 CDC 决策树(ug949)

        XPM_FIFO_ASYNC通过异步fifo实现安全多bit跨时钟域,慢到快或是快到慢都可实现,延时较小,资源消耗较高。

        XPM_CDC_GRAY在需跨时钟域数据是连续的时候使用转换格雷码的方式实现跨时钟域,需要注意数据一定要首位连续,保持格雷码都是相邻的。

        XPM_CDC_ARRAY_SINGLE通过打两拍的方式实现时钟域跨转,不保证多bit数据在同一时钟到达目标域。

        XPM_XPM_CDC_HANDSHAKE通过握手的方式实现多bit信号跨时钟域,可以保证所有多bit数据在同一时钟到目标时钟域,时间延时较大。

握手基本思路:

输入:异步时钟域输入一个数据信号并且带有req信号。

(1)对req打2拍

(2)对打拍后的req_r取反然后和req相与,确保得到正确的req_1信号

(3)检测到req_1信号,将数据赋值给dataout。

(4)对打拍后的req_rr取反然后和req_r相与,确保得到正确的req_2信号

(5)检测到req_2信号,将ack置为1。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值