EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Heaven_1 于 2023-4-27 17:57 编辑 ( r* _1 e" o# l" L$ ^0 t8 v6 S h
, \* c: G2 F q) a+ s& O) Y
: m0 l3 l4 v" F6 K
* G( }* v8 a3 C; T. E1 u6 ]5 Z+ h 说起亚稳态,首先我们先来了解一下什么叫做亚稳态。亚稳态现象:信号在无关信号或者异步时钟域之间传输时导致数字器件失效的一种现象。接下来主要讨论在异步时钟域之间数据传输所产生的亚稳态现象,以及如何降低亚稳态现象发生的概率(只能降低,不能消除),这在FPGA设计(尤其是大工程中)是非常重要的。[tr]亚稳态的产生:所有的器件都定义了一个信号时序要求,只有满足了这个要求,才能够正常的在输入端获取数据,在输出端输出数据。正常的数据传递是:在触发时钟沿前必须有一小段时间(Tsu)用来稳定输入信号(0 or 1),触发时钟沿之后需要有一小段特定的时间(Th)再次稳定一下,最后再经过一个特定的始终到输出延时(Tco)后才有效。如果数据的传递过程违反了这个时间约束,那么寄存器输出就会出现亚稳态,此时输出的数据是不稳定的(在0和1之间游荡)。但是这种现象并不是绝对的,但是我们在实际设计中应当尽量避免这种现象。下面我们来循序渐进的分析一下。
d J8 e# ^3 a9 s3 y, ]1 S9 I% Q: E# W7 Y
背景
2 t7 ]+ E1 \3 D i% ^0 F/ I
9 A& O2 {8 ~3 Z1、亚稳态发生原因8 H% L% x* E( L
$ {1 ~1 l/ {9 e" b) \只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。
& a& q4 t ~- A, x3 }4 c6 B- F% j3、亚稳态危害
/ n& V6 k: O# G9 i. d! r
2 _* C- s. y+ f) _理论分析 6 s& a2 k w' }" M
1、信号传输中的亚稳态
2 ^' H g0 `3 P0 v3 s1 b
4 z) A% M. x+ l2 D4 ]它们发生的原因如下: ' n2 ], `8 f6 z% T
(2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求;
* g8 Y$ g% ~1 r& k. W) H- n. p. X5 ^* D9 s, w: C M
K' y- B! p# l6 `# W0 A6 E
在复位电路设计中,复位信号基本都是异步的,常用异步复位电路Verilog描述如下:
: _0 G6 h1 S+ N综合出来复位电路模型如下图异步复位电路模型所示: 6 Y" _$ o/ G" V( j' e* N8 U
如下图异步复位时序所示,为复位电路复位时序图。如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。 $ S, e. _! E/ c5 R3 k/ Y- D
如下面verilog代码对同步复位电路的描述。
$ }2 Q5 D/ M7 `2 T6 @综合出硬件电路如下图同步复位电路所示。 : l* W4 h) X/ I* R1 g5 R
在此,我们不讨论同步复位的消耗资源问题,只讨论同步复位的亚稳态产生情况。
9 @7 T) T6 m: O, K
3 z. i1 o; I7 E) ?& {" N4 ?# a& q
& Z' l8 y2 O; a# p0 w2 N3、亚稳态产生概率以及串扰概率9 E. r( c' O3 Q' p/ U
$ q8 r9 R& I# y: j/ N4 A% h由上面分析得知,系统亚稳态发生的都是由于clk的Tsu和Th不满足,又或者是复位信号的移除和恢复时间不满足。常用FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。 . b$ d R( { }& e
概率 = (建立时间 + 保持时间)/ 采集时钟周期
7 e/ X% z j7 T$ ?" | o* R例如,为系统采用100M时钟对一个外部信号进行采集,采集时钟周期为10ns,那采集产生亚稳态的概率为:1ns/10ns = 10% + ~# V6 M$ u5 Z; X+ U2 H5 H$ Z1 M
(1) 降低系统工作时钟,增大系统周期,亚稳态概率就会减小; 使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级D触发器级联处理,如下图三级寄存器同步所示,采用三级D触发器对异步信号进行同步处理。 , f4 c" M: O5 Z6 ~; G- x0 J% o! z/ N# z) S
这种模型大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。接下来我们分析这种串扰的概率问题。 + H* E: e! A: G3 k% c( g$ Z
. G) F/ |: T0 ^8 U; ]. P* H& Q4 W! O9 a) C y
由上图可以看出,当第一个寄存器发生亚稳态后,经过Tmet的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢?0 g& s: S: ]: g3 k
/ x& H( d; s* f5 L4 t* S
6 M- l; M4 b6 i0 f7 U6 e) R
0 A1 c f( {, e7 t' E由上图可以看出,当第一个寄存器发生亚稳态后,经过Tmet的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢? C. z3 ?5 M( Q0 v
b0 ?, n0 T, `应用分析 ; @% i! }1 q8 {2 r& g& O0 d
亚稳态震荡时间Tmet关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。
" z, K9 V* E7 L/ a; x$ _这种边沿提取方式对于一个稳定的系统是不合适的,例如:当第一级寄存器采集到亚稳态,那势必造成sig_nsyn_p输出亚稳态,这样就会对采用sig_nsyn_p的信号进行判断的电路造成影响,甚至判断出错误的值。
: n' d: J' W9 ~7 f1 h5 `举例:多级寄存器提取边沿信号
7 `8 e" c3 q2 e6 _当数据流从一个时钟域到另一个时钟域的时候,绝大多数情况下都采用FIFO来作为中间缓冲,采用双时钟对数据缓冲,就可以避免亚稳态的发生。
; p* v$ B( O+ ^/ z! b5 G3、异步复位,同步释放
1 p2 A9 \8 Z$ ^
/ F ~9 @% M* p( g& o) H举例:异步复位处理 ' h3 p! i6 D+ T: _0 y/ L$ J- H. ^
通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。减少亚稳态的产生。
9 `/ n7 O8 ?, a3 {通过上述对亚稳态的分析以及各种模式的处理,相信各位大侠应该有所收获,今日说"法"到此结束,下篇再见,欢迎各位大侠投稿,交流学习,共同进步,祝一切安好!
; ?2 G/ a/ _7 O% w4 L: x7 P; D9 V5 v. _' v
$ e2 K4 Z8 L% _ |