<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
亚稳态分析
无意中发现8.1的handbook比7.1中关于Clock Analysis一节多了亚稳态等内容。正好最近项目中遇上即将提交的老项目里出现了很典型的组合逻辑导致亚稳态出错的问题。异步时钟域转同步这个很时髦的FPGA设计话题深入探讨还是很有学问的。特权同学也是从简单的单片机RAM读写时序和CPLD的接口摸索(花了不少精力),然后逐步到这回DSP的时序,大同小异,但是理论很重要,实践更重要,具体问题要具体分析。
Quartus II Handbook Version 8.1 Volume 3: Verification
亚稳态 Metastability
有建立和保持时间要求的所有寄存器允许在输入端口捕获数据。最后传送到寄存器输出端口的捕获数据是高或者低电平信号取决于输入端口信号的捕获。然而,如果数据违反了建立保持时间要求,将会导致寄存器的输出值出现亚稳态。在这个状态下,寄存器的输出数据值将会盘旋在高低电平之间。当这个值传播到电路中,寄存器将锁存错误值,最终导致系统运行失败。
亚稳态问题通常发生在信号传输于两个不相关时钟域的既定电路之间。对付亚稳态将系统失败概率降至最小,电路设计者通常在目的时钟域使用一些紧连的寄存器(同步寄存器链)重新将信号同步到新的时钟域。
同步寄存器链能够被定义为一系列的寄存器,以达到下述要求:
■ 所有寄存器钟控于同一个或者相位相关的时钟
■ 第一个寄存器由不相关的时钟域或者说是异步地(信号)来驱动,并且其扇出值为1
Figure 7–14 展示了一个采样同步寄存器链
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
达到上述要求的同步时钟域中寄存器的数量即同步寄存器链的数量。
只要在同步时钟域的每个网络(net)有一个有效的建立时间余量,相关逻辑就能存在于这些同步寄存器之间。
被认为是一个同步寄存器链的例子展示在Figure 7–15。
当亚稳态发生时,clock-to-out时间可能会延伸并超出寄存器名义上的tCO时间。输出信号额外超出tCO时间,即tCO时间后达到确定状态的时间,被认为是settling time (tMET)。一个同步寄存器链的tMET是链上寄存器的所有输出余量之和。Figure 7–16 显示了亚稳态信号的tMET。如果亚稳态事件时间长于同步链的settling time ,这个亚稳态事件也许会向前传播,并导致设计失败。
这段话译的有些生涩,settling不知该如何译,根据文章判断个人认为可能是“达到稳定”的意思,也就是说settling time指除了tCO时间外仍处于亚稳态的时间(不知道我的理解对不?)。原文如下:
When metastability occurs the clock-to-out time can be extended beyond the register's nominal tCO time. The additional time beyond the tCO time for the output signal to settle to a known state is known as the settling time (tMET). The tMET of a synchronization register chain is the sum of all output slacks of the registers in the chain. Figure 7–16 shows the tMET for a metastable signal. If the metastable event takes longer to resolve than the settling time of a synchronization chain, this metastable event may be propagated forward, and cause the design to fail.
对于这段话,我的理解是:tMET时间和tCO时间之和就是异步时钟域的亚稳态时间,如果这个时间大于目的时钟域(准备同步的时钟域)的同步寄存器链的时序余量(大概是时钟周期减去它的建立时间和保持时间之和吧),那么这时候系统采到的信号一定是亚稳态。也就是说,一个同步域的时钟周期内,如果外部来的信号亚稳态时间长到足以侵占同步域建立保持时间,那么一定出现亚稳态(个人之见,希望大家讨论,给出一些更合理的看法)。
但是,在实际的操作过程中,比如一些脉冲采集(脉冲频率较同步域的时钟要小很多)、MCU(如MCU,DSP,ARM等)和FPGA进行读写(采用直接接口)时WR或RD有效信号(有效窗口一般会开得比较大)的采集,这些情况下(外部时钟域比同步时钟域频率小很多)采样一个亚稳态其实对于系统来说是可以容忍的,如果2个,3个接连出现亚稳态,那么就肯定危险了。亚稳态的出现是否会对系统造成致命伤害,这还得看具体的工程实现是否允许。
基于tMET的同步链Mean Time Between Failure (MTBF)时间计算,如公式 Equation 7–11。
MTBF是由错误实例估计的一个平均值。常量C1和C2是由TimeQuest Timing Analyzer支持的器件其生产工艺决定的。
TimeQuest Timing Analyzer通过设计中同步寄存器链的MTBF的计算来分析亚稳态。整个设计的MTBF的估算是基于它(FPGA器件)所包含的同步寄存器链。
加上设计中同步寄存器链的时序报告的建立,Quartus II软件也通过优化可能的MTBF冲突来保护寄存器链。例如寄存器复制(register duplication)和逻辑重定时(logic retiming)。如果你的MTBF太短,Quartus II软件也能够对其进行优化。
其实这里提亚稳态,除了简单的一些对亚稳态的介绍,主要还是介绍了在Quartus II 8.1中新添加的优化亚稳态的功能。不过这个工具起始只能用于altera的Stratix III器件,因为当你运行TimeQuest中的Reporting Metastability时,会得到如下警告。
Warning: The selected device family is not supported by the report_metastability command. The report_metastability command currently only supports Stratix III devices.
亚稳态是异步时钟域中比较令人头疼的问题,用组合逻辑来做异步通信是不明智的(或者说是无奈的)选择。如果时序允许,将异步信号同步到一个时钟域上处理会大大减少异步时钟域带来的一系列问题。
ilove314_323192455 2009-2-19 23:12
用户1395232 2009-2-19 20:33
用户1395232 2009-2-19 20:30