前言:一直都知道怎样避免亚稳态,但亚稳态一旦产生,会导致哪些具体的后果,其实没好好思考过。因为芯片量产后如果发现问题了,分析起来往往是一条很长的逻辑链。如果怀疑亚稳态,就要和问题现象做关联,所以要搞清楚亚稳态产生后可能出现的情况,今天把分析和思考记录下来。
亚稳态由异步采样过程中不满足setup、hold导致Q输出处于不定态,这个不定态往后会有几种情况:
1、理想情况,经过一段不确定的时间后,稳定下来,或0或1随机。
理想情况要么是人为做了同步处理,即插入两级或三级同步器,同步器中间不能插入任何组合逻辑,目的是给予不定态足够的时间让其稳定下来。这种情况是已知N级同步器的输出才是有效数据,不会取中间同步的值作为后续逻辑的输入。所以不会影响功能。
要么没有做同步处理,但后续寄存器的组合逻辑深度非常短,有一定概率可以稳定下来,相当于无意做了个不太完美的同步处理。
总之,不定态终于稳定下来了,后续模块度过一劫,但前面N拍的数据是脏的,不能用的,那么就重新开始吧——取N拍后的数据继续计算。这时候又分两种情况:
a、逻辑不需要N拍前的数据参与后续逻辑
b、逻辑必需N拍前的数据参与后续逻辑
那么,a的情况不影响功能,b的情况虽然消除了亚稳态,但对功能产生影响。
所以有时候确实没对异步路径做同步,但应用上知道前面数据变化的时候不会使用数据,所以也不认为有什么问题。(前提是亚稳态没有传播,只是错误)
2、没有稳定下来,进入下一级寄存器的D端,继续传播,每一级都没有获得足够的稳定时间,每一级的Q端都处于不定态中。这就是更严重的亚稳态传播,这时的电路完全是乱的,不可预期的。
为了将这种情况的概率降至最低,需要根据MTBF、前级时钟频率、毛刺发生概率以及同步DFF工艺参数来估算恢复时间,要求同步器的时钟周期要大于恢复时间。那么诸如:跨异步时不允许组合逻辑直接采样、两级同步器之间不允许组合逻辑都是降低恢复时间的手段,因为MTBF、前级时钟频率、DFF工艺参数、甚至同步器频率都不是我们能改变的。两级甚至三级同步器本质上都是给恢复时间从而使亚稳态在本级DFF内稳定下来,系统上体现出来就是降低发生亚稳态传播概率。所以降低恢复时间使之小于同步器的时钟周期并将亚稳态限制在几级同步器内才是目的呀
4069

被折叠的 条评论
为什么被折叠?



