亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态引时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。
简介
亚稳态现象
亚稳态指的是按相平衡条件,应发生相变而未发生的状态。常见的亚稳态现象有如下几种。
(一)过饱和蒸气
按相平衡条件,在某一温度,当气体的分压大于其在该温度下的饱和蒸气压时,该气体将白发凝聚成液体或固体。但新生成的凝聚相颗粒极其微小。根据开尔文公式,微小颗粒的蒸气压远远大于该物质的正常蒸气压。因此,虽然该气体的分压已经大于其正常蒸气压,但对于将要形成的微小新相颗粒来说仍未饱和,当气体十分纯净时,往往其分压大于其饱和蒸气压仍不能凝聚。这种按相平衡条件应凝聚而未凝聚的气体称为过饱和蒸气(supersaturated vapor)。蒸气中的灰尘、容器的粗糙内表面都可以成为蒸气的凝聚中心,使新生成的凝聚相从一开始就具有较大的曲率半径,这样在蒸气的过饱和程度较小的情况下,蒸气就可开始凝聚。人工降雨就是根据这个原理向云层中撒入固体颗粒。使已经饱和的水蒸气凝聚成雨的。
(二)过冷液体
在一定压力下,当液体的温度已低于该压力下液体的凝固点,而液体仍不凝固的现象,叫过冷现象,此时的液体称为过冷液体(supercooling liquid)。根据开尔文公式,晶体微粒越小,蒸气压越高,在正常凝固点晶体微粒不能产生。只有当液体过冷至某一温度后,此时晶体微粒的平衡蒸气压等于液体的平衡蒸气压,才可能有新相形成。避免过冷现象的关键在于促使新相晶核顺利产生。为此,可在液体冷却到凝固点附近时加入少量晶体作为新相种子,液体达到凝固点时会自动在这些晶体微粒表面析出沉积;同时,要加强搅拌。
(三)过热液体
沸腾是液体从内部形成气泡、在液体表面上剧烈气化的现象。但如果在液体中没有提供气泡的物质存在时,液体在沸点时将无法沸腾。这种温度高于沸点但仍不沸腾的液体,称为过热液体(superheated liquid)。
液体沸腾时首先在液体底部形成气泡,根据开尔文公式,小气泡形成时气泡内饱和蒸气压远小于外压,而微小气泡若稳定存在,必须克服三种压力:大气压力P大、液体静压力P静及气泡凹液面产生的附加压力P曲,仅当气泡内蒸汽压P内满足P内(P大+P静>P曲)时,气泡才能成长上升。新生成的微小气泡不能满足这一条件,因而不能稳定存在。这样便造成了液体在沸点时不沸腾,温度继续升高的过热现象。过热较多时,会发生暴沸。
(四)过饱和溶液
在一定条件下,晶体的颗粒愈小其溶解度愈大。所以将溶液进行恒温蒸发时,溶质的浓度逐渐增大,达到普通溶质晶体的饱和浓度时,对微小晶体溶质却仍未达到饱和状态,作为晶体成长核心的晶核难以析出。为了使晶核能自动生成,需要将溶液进一步蒸发,达到一定的过饱和程度,晶体才可能不断析出。这种按相平衡条件,应当有晶体析出而未析出的溶液,称为过饱和溶液。
在结晶过程中,若溶液的过饱和度太大,将生成很细小的颗粒,不利于过滤或洗涤,会影响产品的质量。在生产中常采用向结晶器中投入小晶体作为新相种子的方法,防止溶液过饱和程度过高,可获得较大颗粒的晶体。
解决方法
1. 降低系统时钟
2 .用反应更快的FF
3. 引入同步机制,防止亚稳态传播
4. 改善时钟质量,用边沿变化快速的时钟信号
原因
危害
由于输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值,因此亚稳态除了导致逻辑误判之外,输出0~1之间的中间电压值还会使下一级产生亚稳态(即导致亚稳态的传播)。 逻辑误判有可能通过电路的特殊设计减轻危害(如异步FIFO中Gray码计数器的作用),而亚稳态的传播则扩大了故障面,难以处理。
处理亚稳态的经典办法——双触发
设计中使用的任何寄存器都会指定一个建立和保持时间,在时钟上升沿前后的这个时间内输入数据被禁止发生任何变动。所有器件中的寄存器都要指定这个精确参数,就是为了防止数据信号两次变化发生的时间间隔太过靠近,从而导致其输出陷入亚稳态。
当需要在两个时钟域传输信号的时候,需要考虑一个重要的问题是:是否需要采样从一个时钟域传输到另一个时钟域的这个信号的每一个值?通过思考这个问题可以发现,在跨时钟边界存在跨时钟域传输数据允许丢失部分采样值和跨时钟域传输数据不允许丢失任何信号采样值两种情况,而且确认设计到底属于哪种情况则变得非常重要。
对于第一种情况来说,没有必要去采样每一个值,但是需要注意的是被采样的值必需要确保精确度;而在第二种情况中,一个跨时钟域信号必需要被正确识别,或者说在其允许发生改变之前必须被识别。这两种情况中,跨时钟域信号都需要被同步到其接收时钟域之中。
最常见的同步器就是使用两级寄存器,即使用寄存器打两拍的方式进行同步。所谓的同步器就是采样一个异步信号,采样输出能够同步到本地或采样时钟的模块。这种最简单也是使用最普遍的两级寄存的同步器如图所示。
当然,仍然有可能级联的第二个寄存器输出还会表现为非稳定状态,但是这种双寄存同步器已经可以解决大部分这类亚稳态问题。在设计这种同步器的时候应当注意遵循以下原则:
(1)级联的寄存器必须使用同一个采样时钟。
(2)发送端时钟域寄存器输出和接收端异步时钟域级联寄存器输入之间不能有任何其他组合逻辑。
可行性
使用同步电路以后,亚稳态仍然有发生的可能,与此相连的是MTBF(Mean Time Between Failure),亚稳态的发生概率与时钟频率无关,但是MTBF与时钟有密切关系。 有文章提供了一个例子,某一系统在20MHz时钟下工作时,MTBF约为50年,但是时钟频率提高到40MHz时,MTBF只有1分钟!可见降低时钟频率可以大大减小亚稳态导致系统错误的出现,其原因在于,提供较长的resolution time可减小亚稳态传递到下一级的机会,提高系统的MTBF。