系列文章目录
FPGA静态时序分析与约束(二)、时序分析
FPGA静态时序分析与约束(三)、读懂vivado时序报告
文章目录
- 系列文章目录
- 前言
- 一、概述
- 一、何为亚稳态?
- 二、图解亚稳态
- 三、什么时候亚稳态会导致系统失效?
- 四、降低亚稳态发生概率的办法
- 五、亚稳定性 MTBF 值的计算
- 六、总结
前言
参考资料:Altera公司的官方发布的白皮书《Understanding Metastability in FPGAs》(提取码6Ese)
一、概述
亚稳定性(Metastability)是数字电路(含 FPGA)中导致系统失效的一种现象,当信号在非相关时钟域或异步时钟域之间传输时发生。本文叙述 FPGA 中的亚稳定性,讨论了它如何发生,如何导致系统失效。
数字电路的设计者通过对两次失效之间间隔的平均值(MTBF)进行计算,得到亚稳定性的定量描述,从而指示设计者采取适当的方法以减少发生失效的可能性(几率)。本文讲解了如何根据不同的器件和设计参数计算 MTBF,解释了 FPGA 厂商和 FPGA 设计者两方面是如何改善 MTBF 的。设计者运用相关的设计技术和优化方案,减少亚稳定失效的几率,使得系统的可靠性得以提高。
个人理解:亚稳态现象是在跨时钟域信号传输时不可避免的,作为设计者我们无法彻底消除亚稳态现象,只能尽可能地减少发生的概率。
一、何为亚稳态?
数字电路(例如 FPGA)中所有的寄存器都具有所设定的时序要求。根据该要求,每一个寄存器都可以正确地捕获它输入端口的数据,并激励输出信号至它的输出端口。为了保证这种操作的可靠,寄存器的输入信号必须在时钟沿之前的最小时间段保持稳定(寄存器建立时间 t s u t_{su} tsu),以及在时钟沿之后的最小时间段保持稳定(寄存器保持时间 t h t_h th)。然后在特定的时钟输出延迟 t c o t_{co} tco之后,寄存器产生有效的输出。如果某个信号的传输违背了上述建立时间 t s u t_{su} tsu和保持时间 t h t_h th的要求,该寄存器就有可能进入亚稳态。发生亚稳态时(某些时钟周期),寄存器的输出值会漂浮在高电平(高状态)和低电平(低状态)之间,这也就意味着指定的输出高状态和输出低状态会在 t c o t_{co} tco之后再度被延迟。
个人理解:寄存器的建立时间或保持时间不能得到满足时,寄存器有可能会进入亚稳态。亚稳态是一种电压的中间态,假设寄存器的输出电压大于2V输出高电平1,小于0.3V输出低电平0,那么电压处于0.3V到 2V 之间并且能够短时间稳定的状态就是亚稳态。这时候寄存器输出的数据延迟将大于tco
在同步电路系统中,输入信号总是满足寄存器的时序要求(设计必须),所以亚稳态不会发生。通常,若在无关时钟域电路或异步时钟域电路之间发生信号传输,亚稳态问题将会发生。此时,设计者不能保证这些信号能符合 tsu 和 th,这是因为这些信号可能在相对于目标域时钟的任何时刻到达。而这些信号中的任何一个若发生 t s u t_{su} tsu和 t h t_h th时序违规,将导致一次亚稳态输出。寄存器或者不符合时序要求进入亚稳态,或者符合时序要求回到稳态,这两种可能性兼而有之,而它们很大程度上取决于 FPGA 器件的制造工艺技术,以及运行时的条件。大多数情况下,寄存器将快速地返回到指定的稳定状态。
个人理解:根据FPGA制造工艺,寄存器进入亚稳态时会快速返回到稳定状态0或者1,随着制作工艺地提升,亚稳态回到稳态的时间越来越快
二、图解亚稳态
寄存器在时钟沿对数据信号进行采样的过程看作是一个球落到山顶上,如图所示。
山的两侧代表稳定状态:信号传输后信号的旧数据值和新数据值。山顶代表亚稳态
图中球停留在山顶正中的情况在真实电路中实际不会发生,球总会在山顶微微地偏向一边,继而滚落到山底,快速地到滑落至山丘底部的那侧的稳定状态,球离山顶越远,它在底部达到稳定状态的速度就越快。
个人理解:寄存器在进入亚稳态一段时间后会回复到正常的状态,但是有可能回到高电平1也有可能回到低电平0
- 如果数据变化发生在时钟沿右侧的 t h t_h th之后,好像球跌落至山丘的“旧值”这边,此时输出信号保持为原先的旧值。
- 当寄存器的输入数据变化发生在当前时钟沿左侧的 t s u t_{su} tsu之前,以及前一个时钟沿右侧的 t h t_h th之后,则好像球跌落至山丘的“新值”一边,此时输出信号保持为变化后的新值。
- 当寄存器的数据变化时刻违背 t s u t_{su} tsu和 t h t_h th时,这就好像球从山顶向两边跌落。球开始跌落的时刻越接近山的顶部,它返回底部的时间就越长,这就使得从数据变化时钟沿至输出稳定状态的延迟将大于 t c o t_{co} tco。(如下图所示)
个人理解:如果数据变化在采样寄存器th之后,那么采样寄存器将采样到数据变化之前的旧值,继而经过一个tco延迟后,采样寄存器输出数据旧值。同理,如果数据变化在采样寄存器tsu之前,那么采样寄存器将采样到数据变化后的新值,经过一个tco延迟后,采样寄存器输出数据新值 。如果数据变化在tsu之后,th之前,那么采样寄存器将进入亚稳态,数据可能输出0可能输出1,寄存器输出时间大于tco
三、什么时候亚稳态会导致系统失效?
如果数据输出信号是在下一个寄存器捕获它之前就已滑落至一个稳定的状态,此时的亚稳态信号并不会给系统带来负面影响。但是如果亚稳态输出信号不能在它到达下一个寄存器之前滑落到低或高的稳定状态,它将导致系统失效。这仍然可使用球和山丘来解释,当球跌落至山底的时间超过所允许的时间(允许的时间是指时序分析中,对应寄存器路径中的这些寄存器的正的 t c o t_{co} tco)。当亚稳态信号没有在允许的时间段内滑落至稳定状态,将发生逻辑混乱和失效,此时目标寄存器将出现相互矛盾的逻辑状态,那就是说,对于相同的亚稳态信号,不同的寄存器将会捕获到不同的值。
个人理解:如果发生亚稳态的寄存器输出信号在下个时钟沿采样到之前,就滑落到稳定状态,那么系统不会失效,如果在下个时钟沿来临时,还在亚稳态,那么后级的寄存器将会逻辑混乱,不同的寄存器捕获的可能是不同的值,此时系统将会失效
四、降低亚稳态发生概率的办法
当信号在非相关时钟域电路或异步时钟域电路之间传输时,引用该信号前,必须要将该信号同步到新的时钟域。新时钟域的第一个寄存器则成为同步寄存器。为了使异步信号传输的亚稳定性所导致的失效尽可能的最小,电路设计者通常会在目标时钟域使用一个寄存器序列(同步寄存器链或同步器),以达到再同步的目的。同步寄存器链将该信号再次同步到新的目标时钟域。这些寄存器提供额外的时间,用于那些可能出现的亚稳态信号,使得这些亚稳态信号能够在它们被引用(捕获)前滑落至一个已知值(0 或 1)
同步寄存器链其定义是一个符合如下要求的寄存器序列(寄存器链):
- 链中的所有寄存器或者使用相同的时钟源作为驱动时钟,或者使用具有相对相位关系的不同时钟源作为驱动时钟。
- 链中的第一个寄存器的输入信号,或者来自一个非相关时钟域,或者来自一个异步时钟域。
- 除链中最后一个寄存器外,所有寄存器的输出仅扇出至一个寄存器。
如下图所示:
注意到任何一个异步输入信号,或那些在非相关时钟域之间传输的信号,都可能在相对于捕获寄存器时钟沿的任何一个时刻发生变迁。因此,设计者不能够预知这些变迁发生的序列,以及变迁发生前目标时钟域时钟沿的个数。例如,如果一个异步总线信号跨时钟域传输,并且被同步,这些数据信号将在不同的时钟沿上发生变迁,其结果就是,所接收到的总线的数值不正确。
个人理解:多bit数据总线不能用同步寄存器链的方法同步,因为每为bit到达寄存器链的时间可能不同,所以每个同步寄存器链踩到的数据不同,所以后级寄存器接收到的数据不同
对于多bit情况,设计者必须习惯于采用例如双时钟 FIFO 这样的电路(DCFIFO)来存取数据和进行握手。FIFO 逻辑仅使用同步器传输转换两个时钟域之间的控制信号,而数据的读和写则使用双端口的存储器。Altera 提供的 DCFIFO 即是用于此目的,其中,对于那些跨时钟域的控制信号,提供了多级潜伏期设置和亚稳态的保护。另外,如果跨时钟域握手信号中的有异步信号,这些异步的握手信号将能够用于指示当前跨数据域的数据传输。此时,同步寄存器用于保证亚稳态现象不会影响到这些控制信号的接收,对于可能发生的任何亚稳态条件,信号数据都有足够的约算时间,使得在这些信号被使用前,亚稳态已经滑落至稳态。
五、亚稳定性 MTBF 值的计算
两次失效之间的平均时间,即 MTBF,是亚稳定性能的一个评估指标,它是由亚稳态所致的两次失效之间的平均间隔。一个较高的 MTBF 值表示一个更稳定的系统(例如,两次亚稳态失效之间的间隔达到数百或数千年)。所需要的 MTBF 值的大小,取决于系统的应用,例如,一个医学生命维持系统所需要的MTBF,就比一个视频娱乐系统的MTBF要高。亚稳定性MTBF值的增加,就意味着设备中信号传输时发生亚稳态问题的机会减小。无论是特定的信号传输的 MTBF,还是当前设计中全部信号传输的 MTBF,都可以依据设计参数和器件参数进行计算。同步寄存器链 MTBF 的计算使用下列公式和参数:
M T B F = e t m e t / C 2 C 1 × f c l k × f d a t a MTBF = \frac{e^{t_{met}/C_2}}{C_1×f_{clk}×f_{data}} MTBF=C1×fclk×fdataetmet/C2
其中:
- 常数 C 1 C_1 C1和 C 2 C_2 C2取决于器件工艺和操作环境
- f c l k f_{clk} fclk和 f d a t a f_{data} fdata取决于设计,其中 f c l k f_{clk} fclk是接收异步信号时钟域的时钟频率,而 f c l k f_{clk} fclk是驱动异步数据信号的时钟频率。 f c l k f_{clk} fclk越快或 f d a t a f_{data} fdata越快,MTBF 值将越小(亚稳定性恶化)。
- t m e t t_{met} tmet是空闲的亚稳定性约算时间,或者说它是从寄存器的 t c o t_{co} tco之后,到亚稳态信号滑落至已知值这个区间其时序分析的 Slack 值。同步寄存器链的 t m e t t_{met} tmet则是该链中各个寄存器输出时序的Slack 之和。
整个设计系统的 MTBF 值则可由设计系统中各个同步寄存器链的 MTBF 值确定。由于每一个同步器的失效率为 1/MTBF,因而整个设计系统的失效率可以由每个同步器的失效率累加而得到:
F a i l u r − r a t e d e s i g n = 1 M T B F d e s i g n = ∑ i = 1 S N 1 M T B F i Failur_-rate_{design} = \frac{1}{MTBF_{design}}=\sum_{i=1}^{SN}\frac{1}{MTBF_{i}} Failur−ratedesign=MTBFdesign1=i=1∑SNMTBFi1
式中:
Failure_ratedesign : 整个设计系统的失效率
S N SN SN : 设计系统中同步寄存器链(或同步器)的数量
M T B F d e s i g n MTBF_{design} MTBFdesign : 整个设计系统的 MTBF 值
M T B F i MTBF_i MTBFi: 每个同步寄存器链的 MTBF 值据此,整个设计系统的 MTBF 为: M T B F d e s i g n MTBF_{design} MTBFdesign = 1/Failure_rate d e s i g n _{design} design
六、总结
当信号在无关时钟域之间传输或异步时钟域之间传输时发生亚稳态现象。两次亚稳态失效的平均时间与器件的工艺技术,设计性能和同步寄存器逻辑的时序 Slack 值有关。设计者使用恰当的设计技术增加同步寄存器链的 Slack 值,使得 t m e t t_{met} tmet增加,进而导致 MTBF 的增加,Altera 对其 FPGA 的 MTBF进行了参数化,并通过器件技术改进提高了亚稳态 MTBF。使用 Altera FPGA 的设计人员可以利用 Quartus II 软件功能来报告其设计的亚稳态 MTBF,并优化设计布局以增加 MTBF。
FPGA静态时序分析与约束(二)、时序分析