看了许多网上介绍亚稳态的博文,有些介绍得不是很到位,例如在介绍亚稳态的时候并没有一起介绍了MTBF(mean time between failure,平均无故障时间),甚至有一些“歧义”的介绍比较使人误导,这篇博文主要了描述了我自己对FPGA中的亚稳态跟MTBF的了解。介绍亚稳态是怎样产生的,还有它是怎样导致设计的失败。并举例子介绍MTBF由亚稳态得出的平均无故障时间可以告诉设计者是否应该去降低出现失效的几率。这篇博文将告诉你如何由各种设计和器件参数计算出平均无故障时间,如何通过一些设计技巧优化或者规避亚稳态来提高系统的稳定性。当然本文都是博主跟公司工程师们交流及自己研究理解的,如果有不到位的欢迎批评并交流。
在所有的数字器件中如FPGA的寄存器都有各自的时序要求,只有满足了时序要求,寄存器才能在输入端捕捉数据并在输出端输出稳定的数据。在前面博文介绍的电路静态时序分析可知,为保证电路正常,信号应该在寄存器捕获沿前的“建立时间Tsu”之前翻转变换并保持稳定到寄存器捕获沿后的“保持时间Th”,然后经过Tco(始终捕获沿到寄存器Q端所需的时间)才会输出有效(稳定)。如果一个数据信号的翻转变换违反了寄存器的Tsu跟Th,寄存器的输出就可能会是亚稳态。在产生亚稳态中,输出会在高电平跟低电平来回震荡的时间叫做Tmet(从亚稳态震荡到稳定状态的0或者1的过程叫做决断时间,resolution time),这个时候输出翻转到0或者1的延迟可能会超过时钟沿到寄存器输出端的延迟(注意是Tmet>Tco)。
下面是我从很多博文看到的一张时序解释图
是不是当电路发生亚稳态就会导致系统失效呢?这个答案很明显是否定的。当寄存器捕获输出发生亚稳态,但是如果能在同步给下一个寄存器的capture数据之前恢复到稳定状态(下一个寄存器时钟捕获沿的Tsu之前保持稳定),那么就不会导致设计失败而消极的对系统造成影响。但是当如果寄存器输出亚稳态的决断时间Tmet如果大于Tco以及到下一个寄存器路径上的时间余量,那么下一个同步寄存器就会得到一个不确定的不一致逻辑状态而导致设计的失败跟系统失效。
在上面的描述中,我们在广义上已经知道其实亚稳态的产生原因主要是因为违反了寄存器的时序要求而导致输出的震荡。但是其实亚稳态从其产生的方式主要分为三大类:
第一类:在同步系统电路里面,可以说就是组合逻辑路径上的延迟大等原因而造成违反寄存器的时序要求。
这一类的解决方式比较好解决,一般较少路径延迟即可,而这种在同步系统电路里面其亚稳态的产生是比较小概率的,只要不违反时序,保证电路余量即可。
第二类:在多时钟跨时域的系统电路里面,因为发送域寄存器时钟与接收域寄存器时钟的时钟相位移不确定,而导致发送域数据有可能随时到达接收域寄存器(随时到达而不满足寄存器的Tsu跟Th),所以会导致寄存器产生亚稳态。
这一类的解决方式有多种方法,例如总线传输,异步FIFO传输等方式,这里不做详细描述,在后面的博文将再做详细介绍。
第三类:异步复位而导致系统电路产生亚稳态。因为异步复位信号有可能随时复位在时钟沿的附近,而导致系统产生亚稳态。这一类的解决方式有“异步复位,同步释放”等,也在后面的博文将再做详细介绍。
对于亚稳态来说,我们没有办法把他完全消灭,只能做的是看如何优化电路,在时间上来衡量他发生错误的概率是多大。
如果在一个FPGA系统电路里面存在多个独立(异步)时钟,并且存在多时钟跨时域(clock domain)之间的信号传输,那么电路会出现亚稳态。出现亚稳态的平均时间间隔常用“平均无故障时间” (MTBF, Mean Time Between Failure)来表示。数据的频率,时钟频率及寄存器的工作温度、电压、辐射等因素都对MTBF有影响。平均无故障时间一般根据系统应用需求而定,例如一个医疗设备额平均无故障时间要大于一个消费型的音响。提高平均无故障时间有利于减少系统在信号传输过程因亚稳态而带来的风险。下图是平均无故障时间MTBF的计算公式:
提高平均无故障时间有利于减少系统在信号传输过程因亚稳态而带来的风险。那我们应该如何提高MTBF呢,从上图MTBF的计算公式来说,我们可以看得出MTBF取决于电路寄存器的工艺及电路的Tmet(Tr,在不引起同步失败的前提下亚稳态可持续的最长时间)。
提高MTBF的第一种办法:提高工艺,例如从180nm的工艺提高到90nm的工艺,更快的供电电压跟更快的晶体管可以使亚稳态信号更快的稳定下来。晶体管的速度提升通常来说也是提高了亚稳态的平均无故障时间。
提高MTBF的第二章办法:采用3-5的同步链装置,来提高电路的Tmet/Tr,根据系统应用的MTBF需求甚至可以采用更高更多的同步链。例如:如果给定器件和运行条件下的Tmet是50ps,则在Tmet上提高200ps则提高MTBF的e^4倍,即50多倍,然而如果提高400ps则累乘e8是3000多倍。
为了增加Tmet可以增加同步链的寄存器个数,因为寄存器到寄存器之间的时间余量都会加到Tmet中去,一般来说,在面对跨时域数据交汇的电路,为了更好的亚稳态保护,一般会采用两级同步链电路。经典的两级同步链的电路设计图如下所示:
当信号在异步时钟域中传输或者因为异步复位亚稳态就会发生。而亚稳态失效的平均无故障时间与器件的工艺,设计规格和同步逻辑中的时序裕量有关。FPGA设计者可以使用一些设计技巧提高Tmet或增加同步寄存器中的时序裕量来提高系统可靠性和平均无故障时间。
https://wenku.baidu.com/view/036beaf9aef8941ea76e0568.html FPGA的亚稳态
联系客服