亚稳态
产生条件:触发器的D端数据信号变化相对于有效的时钟沿不满足setup/hold time,或者寄存器的复位信号在复位释放的过程中相对于有效时钟沿不满足recovery/removal要求,都可能会产生亚稳态。
产生现象:触发器器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间内Q端在0和1之间处于震荡状态,而不是等于输入端D。这段时间称为决断时间(resolution time)在经过resolution time之后Q会稳定到0或1上,但是稳定的0或1是随机的,与输入没有必然关系。
解决方法:
- 同步电路的前后级寄存器存在固定的相位关系,可以通过静态时序分析(STA)实现对setup/hold time的检查,从而避免亚稳态的发生。
- 异步电路前后级不存在固定的相位关系,无法通过STA满足setup/hold时序要求,所以无法避免亚稳态。
亚稳态发生概率及解决办法
如果不同步,每个时钟周期数据最多变化一次的情况下。亚稳态发生概率 =(建立时间+保持时间)/采集时钟周期 * 其他因素。
由此可见,随着采样时钟频率的上升,亚稳态发生的概率增大。
如果亚稳态维持时间Tmet不只是一个时钟周期,在下一个时钟沿没有稳定,那么第二级的FF就会进入亚稳态。
通常使用MTBF(MeanTimeBetweenFailure)平均故障间隔时间来衡量影响。
不同工艺的MTBF会存在差别,一般情况用两级寄存器就可以,目前设计规范通常1GHz以上时建议使用三级同步。
亚稳态震荡时间Tmet关系到下一级FF的采集稳定问题,即亚稳态串扰。Tmet受工艺、温度、环境等因素影响,一般会采用抗亚稳态性能较好的寄存器作为sync_cell。
另外在物理实现上应尽量缩短sync_cell之间的寄存器的距离,减小延时,在Tmet相同的情况下,可以给后级FF更充裕的时间满足setup的要求。
CDC(Clock Domain Crossing)跨时钟域
典型异步问题:
1. 未做同步处理,产生亚稳态时导致后级逻辑异常。(FFA -> FFB)
2. 同步处理界面存在组合逻辑,组合逻辑导致的毛刺会被后级误采样,导致后级逻辑错误。(FFA -> comb -> FFB)
3. 重汇聚(Reconvergence)问题:存在多个分支的信号分别使用多级FF做同步处理,但是由于各自跨异步的延迟时间不同,会导致在目的时钟域组合出非真实的信号脉冲,脉冲会被后级采样到,导致后级逻辑异常。
4. data hold问题,高频时钟域向低频时钟域传递数据没有被采样到
5. 复位信号可以是异步到达的,因为FF都会最终稳定在reset value,但是复位信号的释放需要是同步的,即异步复位同步释放,同步释放是为了避免释放时FF的setup/hold time违例导致的亚稳态问题。未做同步处理的reset信号在后仿时若removal/recovery违例会出现X态。通常使用reset synchronizer电路来保证使用的复位信号是异步复位同步释放的。
(recovery time是指reset release之后要求距离下一个时钟沿的最小间隔,removal time指的是reset release之后要求距离上一个时钟沿的最小间隔)