|
建立时间:决定了触发器之间的组合逻辑的最大延迟
; |: G& b" x0 \; U; B& {保持时间:决定了触发器之间的组合逻辑的最小延迟
0 M0 Y$ ?+ ` g" Q$ j, a' t+ i* F4 n* b2 O( A- X G
只有满足了这两个条件触发器的值才会和你希望的一样
7 a+ A- z" p3 K7 `$ }# P* x+ G2 M1 a5 f, u+ R- C! ^
建立时间:触发器在时钟沿来到前,其数据输入端的数据必须保持不变的时间;
9 h1 l% c% C1 p保持时间:触发器在时钟沿来到后,其数据输入端的数据必须保持不变的时间
& k' B/ A$ D( ]. X( u8 I0 @8 {$ O7 H# V: S; G* l9 ]
因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。两级触发器可防止亚稳态传播的原理:假设第一级触发器的输入不满足其建立保持时间,它在第一个脉冲沿到来后输出的数据就为亚稳态,那么在下一个脉冲沿到来之前,其输出的亚稳态数据在一段恢复时间后必须稳定下来,而且稳定的数据必须满足第二级触发器的建立时间,如果都满足了,在下一个脉冲沿到来时,第二级触发器将不会出现亚稳态,因为其输入端的数据满足其建立保持时间。同步器有效的条件:第一级触发器进入亚稳态后的恢复时间 + 第二级触发器的建立时间 < = 时钟周期。- i1 f& e5 L) f1 v
" v2 n( ] p! s$ J. J& I7 x* U) x5 \
, d& j* e" \0 m6 ^% a) @
; l/ m/ I. o3 p- B3 m8 a
/ \3 k, m9 A2 n1 o& d' p5 H1、setup time的意义:为什么Data需要在Clock到达之前到达?. Z3 a2 R% _+ ^
其实在实际的问题中,setup time并不一定是大于零的,因为Clock到达时刻并不等同于latch的传输门A关闭的时刻(更何况这种关闭并不是绝对的和瞬间完成的),这之间有一个未知的延迟时间。2 n: U9 l" m" m& R
为使问题简化,假设Clock的到达时刻为传输门A关闭、传输们B打开的时刻。如果Data没有在这之前足够早的时刻到达,那么很有可能内部的feedback线路上的电压还没有达到足够使得inv1翻转的地步(因为inv0有延时,Data有slope,传输门B打开后原来的Q值将通过inv2迫使feedback保持原来的值)。如果这种竞争的情况发生,Q的旧值将有可能获胜,使Q不能够寄存住正确的Data值;当然如果feedback上的电压已经达到了足够大的程度也有可能在竞争中取胜,使得Q能够正确输出。% L% c8 q1 o7 u+ x& m& |
如果inv0、inv1和inv2的延时较大(Data的变化影响feedback和Q的时间越长),那么为了保证正确性就需要更大的setup time。所以在实际测量setup time的时候,需要选取工艺中最慢的corner进行仿真测量。6 t* r, h! |( \; V
2、、hold time的意义:为什么Data在Clock到达之后仍然要保持一段时间?/ M8 g3 H; W9 c1 x+ u! B( A
和setup time的情况不一样,因为Clock到达时刻并不等同于latch的传输门A完全关闭的时刻。所以如果Data没有在Clock到达之后保持足够长的时间,那么很有可能在传输门A完全关闭之前Data就已经变化了,并且引起了feedback的变化。如果这种变化足够大、时间足够长的话,很有可能将feedback从原本正确的低电压拉到较高电压的电压。甚至如果这种错误足够剧烈,导致了inv1和inv2组成的keeper发生了翻转,从而彻底改变了Q的正确值,就会导致输出不正确。当然,如果这种错误电压不是足够大到能够改变keeper的值,就不会影响到Q的正确输出。
/ U& C" @) p4 G, W8 W/ k; q7 I 如果inv0、inv1和inv2的延时较小(Data的变化影响feedback和Q的时间越短),那么为了保证正确性,就需要更大的hold time。所以在实际测量hold time的时候,需要选取工艺中最快的corner进行仿真测量。 |
|