亚稳态
起因
亚稳态,是因违反寄存器的建立时间和保持时间而产生的
如果信号在建立时间和保持时间内发生变化,则输出是未知,也就是亚稳态的。主要发生在异步电路中
理解
用下图来表示亚稳态,如果满足建立时间和保持时间,则小球会直接滑到稳态 0 or 1
但如果推力不够,则会出现两种情况
- 小球推到山顶,停留一段时间后再返回稳定状态(亚稳态,最终输出稳定)
- 小球上升一段路程就返回(输出可能产生毛刺)
当不满足 Th or Tsu 时,Q 需要 Tmet 后才稳定,而要求是 Tco 阶段
但是亚稳态状态在一定时间后总会趋近一个稳定的状态,这也是可以降低亚稳态的底层原理
危害
出现逻辑混乱,最糟糕是系统直接崩掉
常见情况
- 输入信号是异步信号
- 时钟偏移/摆动(上升/下降时间)高于容限值。(时钟信号质量不好)
- 信号在两个不同频率或者相同频率但相位和偏移不同的时钟域下跨时钟域工作。
- 组合延迟使寄存器的数据输入在亚稳态窗口内发生变化。
解决方案
这里没看懂可以看讲解视频 讲得非常好
减小亚稳态的影响
- 降低系统时钟频率
- 用反应更快的 FF
- 引入同步机制,防止亚稳态传播(可以采用前面说的加两级触发器)
- 异步信号同步化
- 原理
- 用一个完整的时钟周期来解决第一级同步触发器的亚稳态问题
- 前面的不稳定,那用打一拍的方式让你稳定。再不稳定,那我再打一拍
- 一个寄存器平均发生的亚稳态的概率是 0.5(假设值),那么两个就是 0.5 * 0.5=0.25。
- 第一级是异步信号,后面的都是同步信号,所以会不断趋近稳定
- 如果第一拍采集错误的信号
- 如果该信号是非敏感边缘信号,则下一拍采对即可,只是晚了一拍
- 如果该信号是敏感边缘信号
- 在设计时就需要考虑
- 是否采用边沿检测电路来保证个数
- 是否采用握手信号来
- 在设计时就需要考虑
- 打拍个数(根据 MTBF 公式)
- 26MHz 以下,一拍
- 1GHz 以下,两拍
- 1GHz 以上,三拍
- 原理
- 采用 FIFO 对跨时钟域数据通信进行缓冲
- 对复位电路采用异步复位、同步释放处理
- 异步信号同步化
- 改善时钟质量,用边沿变化快速的时钟信号