同步系统中,数据和时钟有固定的因果关系(在同一时钟域(Clock Domains))中,只要数据和时钟满足建立时间和保持时间的要求,不会产生亚稳态(meastable)
静态时序分析(STA) 就是基于同步电路设计模型而出现的,其目的一方面是增加同步时钟的稳定性,从而减少亚稳态的发生,另一方面通过附加约束可以控制逻辑的综合(DC)、映射(Map)、布局(Place)、布线(Route),以减少逻辑和布线延时,从而提高工作频率。
异步系统中,数据和时钟关系不固定,可能违反建立保持时间,就会输出介于两个有效状态之间的中间级电平,且无法确定停留在中间状态的时间,或者过了一定的延迟后才能正常转换,这就是亚稳态。
tsu:建立时间(setup time)
th:保持时间(hold time)
tco:时钟到输出的延迟(clock-to-output delay)
tMET:亚稳态输出恢复到稳定状态所需的超过tco的额外时间部分(settling time)
如下图,信号在一个时钟域(src_data_in
)里变换,在另一个时钟域(dest_data_in
)内采样,导致输出变成亚稳态。
亚稳态窗口(Metastability Windows)具有特定的时间长度,在这段时间内输入信号的数据保持不变。如果发生变化,输出就可能编程亚稳态。如上图1.4所示,建立时间和保持时间共同决定了亚稳态窗口的宽度。
窗口越大,进入亚稳态的概率越大,因此一般新的逻辑器件都会有更小的亚稳态窗口。
MTBF(Mean/Average Time Between Failures,平均无故障时间),即故障率倒数.
对于单级同步器
1FailureRate=MTBF1=e(tr/τ)Wfcfd\frac{1}{FailureRate}=MTBF_1=\frac{e(t_r/\tau)}{Wf_cf_d} FailureRate1=MTBF1=Wfcfde(tr/τ)
公式成立条件:该同步器具有跟定的时钟频率,并且在该时钟周期内具有均匀概率密度
式中,tr=t_r=tr=允许超出器件正常传输延迟时间的解析时间
τ=\tau=τ=触发器的亚稳态(解析)时间常数
W=W=W=亚稳态窗口
fc=f_c=fc=时钟频率
fd=f_d=fd=异步信号边沿频率
对于两级同步器
MTBF2=e(tr1/τ)Wfcfd×e(tr2/τ)MTBF_2=\frac{e(t_{r1}/\tau)}{Wf_cf_d}×e(t_{r2}/\tau) MTBF2=Wfcfde(tr1/τ)×e(tr2/τ)
tr1t_{r1}tr1是第一级同步器的解析时间
tr2t_{r2}tr2是第二级同步器的解析时间
可以看出,增大同步级数可以显著提高MTBF
避免亚稳态,当然要从能造成亚稳态的条件入手——违背建立/保持时间,以下条件中,信号可能违背时序要求:
输入信号是异步信号
时钟偏移(Clock Skew)和时钟抖动(Clock jitter 上升/下降时间)高于容限值。
信号在两个不同频率或者相同频率但是相位和偏移不同的时钟域下跨时钟工作。
组合延迟使触发器的数据输入在亚稳态窗口内发生变化。
亚稳态不能根除,但是可以减小亚稳态发生的概率。
最简单的情况下减小亚稳态概率的方法:确保时钟周期足够长,但是会影响性能,并不实用。
另一种避免亚稳态的方法就是使用同步器:
避免亚稳态最常见的方法:在跨时钟域的信号上加一个或多个同步触发器。
**缺点:**增加了观察同步逻辑输入的延迟。
多级同步器**缺点:**系统需要花较长时间去响应异步输入。
**解决方法:**使用倍频时钟作为两个同步触发器的时钟输入。Altera的FPGA中就具有这项技术。
这样不仅能让系统一个周期响应一个异步输入,而且改善了MTBF。然而倍频时钟会降低MTBF,这个影响比两个触发器引起的偏移 量要大。
两种方法都不能保证同步器阻止亚稳态传播下去,它们仅仅减少了亚稳态发生的概率。
图中,asynv_in
的触发器FFAFF_AFFA是时钟上升沿触发,FFBFF_BFFB和FFCFF_CFFC都在时钟下降沿触发,这样做是为了捕捉FFAFF_AFFA的亚稳态事件。
tMET=Δt−tACNt_{MET} = \Delta t \ -\ t_{ACN} tMET=Δt − tACN
一个异步信号不应被两个或者多个同步器所同步,一开始不太理解这句话,google了一下:一个信号扇出到多个同步器之后同步所需的时间不同,可能出现竞争冒险。
**模式B:**第一级触发器输入直接与Vcc
相连,输入信号直接连触发器时钟。输入信号短脉冲把q1
置为1之后,便会一直保持,直到输出高电平。下面这张图才是模式B。
总结:
信号跨时钟,要采用同步器。
clk1