一、亚稳态
建立时间(Setup Time):建立时间是指在时钟信号有效边沿到来之前,输入数据必须保持稳定的最小时间。这是为了确保数据能够被正确采样和锁存。
保持时间(Hold Time):保持时间是指在时钟信号有效边沿到来之后,输入数据必须继续保持稳定的最小时间。这是为了确保触发器能够正确锁存数据。
亚稳态(Metastability):正常情况下,触发器输出要么是 0 要么是 1。如果触发器的输入信号不满足建立时间和保持时间,就可能出现采样和锁存出问题的情况,可能是0,可能是1,也可能来回震荡,晃荡一会回到0或1,状态不确定,持续时间不确定,什么都不确定(一切皆有可能),这种不确定的状态就被称为亚稳态,也就是不稳定态。
亚稳态不是 "错误值",而是 "不确定值"—— 最终会变成 0 或 1,但不确定是哪个,而且需要时间。
亚稳态的影响:
1.输出不稳定:一段时间内,输出信号一切皆有可能。
2.数据向后传播:产生亚稳态的触发器后面的电路采集到的也是亚稳态数据。
3.电路功能错误:因为问题2,导致整个电路功能故障。
如何来量化分析亚稳态呢?
首先,我们要知道亚稳态不可能完全不出现,我们能做的就是尽可能的降低它出现的概率。
MTBF= Mean Time Between Failures,平均无故障时间。
亚稳态导致系统功能出错的平均间隔时间
通俗讲就是平均下来多久出错一次,当然是越久越好。
- 单位:通常是时间单位,可以是s/min/h/day/month/year。
- 越大越好,越大说明越可靠,出现的概率越低。
- 不是 "绝对不会出错",而是 "平均多久出一次错"。
t_res — 恢复时间(Resolution Time):从时钟沿触发第一级触发器,到第二级触发器采样之间的时间,但是两级触发器都需要保证满足建立时间和保持时间,并且对MTBF影响最大,呈指数级影响,所以是我们优化的关键指标。
影响因素:
- 时钟周期(主要):周期越长,速率越低,恢复时间越多,所以频率越高,时序越难收敛。
- 两级触发器之间的路径延迟:路径越长,恢复时间越少,所以两级触发器中间的组合逻辑越长,时序越不容易收敛。
τ(tau)— 亚稳态时间常数:触发器亚稳态衰减的时间常数,衡量亚稳态恢复得快不快。
决定因素:工艺、晶体管尺寸、电压、温度,所以在代码角度上很难优化。
f_clk — 接收端时钟频率:收端触发器的时钟频率,每秒采样多少次,通常在IC检讨时候就会确定工作频率,也不是自己可以优化的。
- 对 MTBF 的影响:线性反比,频率翻倍,MTBF 减半。
- 时钟越快,每秒采样次数越多,遇到亚稳态的机会越多。
f_data — 数据翻转频率:输入数据每秒翻转多少次,尽量减少数据翻转,既解省了功率又增加了MTBF。
- 对 MTBF 的影响:线性反比,翻转越频繁,MTBF 越低。
- 极端情况:
- 数据不变(f_data=0/1)→ 永远不会有亚稳态。
- 每周期都翻转(f_data = f_clk/2)→ 最坏情况。
T₀ — 窗口常数:和 setup/hold 窗口大小相关的常数,衡量 "踩中窗口" 的概率基数,建立时间和保持时间是触发器的固有属性,由触发器的电路结构和工艺决定,工艺确定之后,也很难通过Designer来优化。
- 决定因素:触发器的 setup+hold 窗口大小。
- 窗口越大,越容易踩中,T₀越大,MTBF 越低。
所以针对亚稳态,IC designer主要优化的就是t_res。
如何来优化MTBF?
一个触发器:
两级触发器,相当于串联:
三级触发器:
假设t_res ≈ Tclk,τ = 100ps,T_clk = 1ns。
| 级数 | 恢复时间 | e 指数 | MTBF 相对值 |
|---|---|---|---|
| 1 级 | 1000ps | e^10 ≈ 22026 | 1× |
| 2 级 | 2000ps | e^20 ≈ 4.85 亿 | ~22026× |
| 3 级 | 3000ps | e^30 ≈ 10^13 | ~4.85 亿 × |
每多一级,MTBF 就乘以一个巨大的倍数(指数增长)。所以,通过打拍可以降低亚稳态出现的概率。