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