TimeQuest定时分析的基本概念
全面的静态定时分析包括寄存器到寄存器、I/O、异步复位路径的分析,TimeQuest定时分析工具使用数据要求时间(data required time)、数据到达时间(data arrival time)、时钟到达时间(clock arrival time)来验证电路性能和检测可能的违例。TimeQuest分析工具确定满足设计正常工作所必须的定时关系,检查到达时间是否满足要求的时间来验证定时关系,这一章概述一些为了使用TimeQuest分析你的设计你必须知道的基本概念。
基本概念:
Nodes:最基本的定时分析网表单元(most basic timing netlist unit),用来代表ports、pins、寄存器。
Cells:LUTs(look-up tables)、寄存器、DSP模块、内存模块、I/O元素等等。Stratix器件LUTs和寄存器包含在LE中,也属于cells
Pins:cells的输入输出
Nets:pins之间的连接
Ports:顶层模块的输入或输出,如器件的管脚
Clocks:抽象的对象,代表设计里或设计外的时钟域。
周期和最高频率:指时钟所能达到的最高工作频率。
时钟建立时间tsu:指时钟到达前,数据和使能信号已经准备好的最小时间间隔。
时钟保持时间th:指能保证有效时钟沿正确采样的数据和使能信号在时钟沿之后的最小稳定时间间隔。
时钟输出延迟tco:指从时钟有效沿到数据有效输出的最大时间间隔。
引脚到引脚的延时tpd:信号从输入管脚进来到达输出管脚的最大时间间隔。
Slack:是否满足时序的称谓。正德Slack表示满足时序,负的Slack表示不满足时序。
时钟偏斜Clock Slew:指同一个源时钟到达两个不同的寄存器时钟端的时间差别。
1.定时网络和定时路径(Timing Netlists和Timing Paths)
先要生成设计的定时网络,然后TimeQuest才可以对该设计进行定时分析。
1.1 Timing Netlist
图6-1是一个设计,图6-2是该设计的定时网络,它显示了不同的设计元素是如何划分成cells、pins、nets、ports。
1.2 Timing Paths
Timing Paths是两个nodes的连接,如一个寄存器的输出到另一个寄存器的输人,理解Timing Path的类型对定时分析和优化是非常重要的。TimeQuest通常使用如下几种类型的Timing Paths:
Edge Paths:from ports-to-pins、from pins-to-pins、from pins-to-ports之间的连接。或者称从引脚到引脚的路径。
Clock Paths:从器件ports或内部产生的时钟pin到一个寄存器的时钟pin之间的连接
Data Paths:从一个ports或一个时序电路(a sequential element)的数据输出pin到一个port或另一个时序电路(a sequential element)的数据输入pin之间的连接。
从管脚到寄存器
从寄存器到管脚
从寄存器到寄存器
Asynchronous Paths:从一个ports到另一个时序电路(a sequential element)的异步pin如异步复位或异步清除pin之间的连接。
图6-3显示这几种类型的路径:
除了标识出设计中的不同路径,TimeQuest还分析时钟特征,以单个register-to-register路径来计算在任何两个寄存器之间最坏情况的要求。在分析时钟特征之前,你必须对设计中的所有时钟进行约束。
1.3 Data and Clock Arrival Times
TimeQuest标示路径类型之后,它可以报告数据和时钟到达寄存器pins的时间。
TimeQuest计算数据到达时间(data arrival time),数据到达时间应该是4部分延迟的总和,数据到达时间的计算如下:
launch edge时间
+ 从时钟源到源寄存器的时钟pin的延迟
+ 时钟源寄存器的micro clock-to-output延迟(utCO)
+ 从源寄存器的数据输出Q到目的寄存器的数据输入D的延迟
TimeQuest计算数据要求时间(data required time),数据要求时间应该是2部分延迟的总和,如下:
Latch edge时间
+ 时钟port和目的寄存器clock pin之间的所有延迟(这包括时钟端口所有缓冲的延迟,减掉micro setup time(utSU,FPGA内部寄存器要求的固有建立时间)。
图6-4显示了如何计算数据到达时间和数据要求时间。
公式6-1数据到达时间和数据要求时间的基本计算,包括launch和latch edge。
1.4 Launch and Latch Edges
所有定时依赖于一个或多个时钟,除了分析路径,TimeQuest还确定你设计中的所有register-to-register关系。图6-5显示了launch edge和latch edge,以及它们之间的关系。
Launch edge:指的是一个时钟沿,这个时钟沿将一个寄存器或一个时序电路的数据送出,因此,这个时钟沿充当数据传输的源(请理解好这个“源”的概念,应该是时间意义上来理解)。
Latch edge:指的也是一个时钟沿,这个时钟沿将一个寄存器或一个时序电路的输入端口的数据存储起来,因此,这个时钟沿充当数据传输的目的(请理解好这个“目的”的概念,应该从时间意义上来理解)。
让我们继续来理解图6-5,launch edge在0ns将数据从寄存器reg1输出,但是注意,这并不意味着reg1的数据在0ns就是出现了,一定要个延迟,这就是utCO,而reg2在10ns处的latch edge捕捉这个数据。显然在10ns处的数据必须到达,因此这就是一个数据建立的时间关系,也就是图中红线所谓的Setup Relationship。如何理解图中的Hold relationship呢?显然,图中所指示的Hold relaitionship并不是这个数据(就是0ns要launch的数据,或10ns要latch的数据)的保持关系,而是上个数据的Hold关系。
Latch edge和Launch Edge都是时间的概念,是指一个时刻(时钟沿的所在时刻),而非一个延迟时间的概念。
2.时钟建立检查(Clock Setup Check)
拿一个寄存器工作为例,直白地说,建立检查是要保证在时钟沿到达之前Tsu要锁存的数据必须出现。就是要保证Tsu。
需要认真仔细地理解好下面的图和公式:
TimeQuest计算setup B,而不需要计算setup A,因为B满足了,A自然满足,TimeQuest总是考虑最坏情况。
如果数据到达时间短于要求的数据到达时间(这句话的意思就是说在规定的时间内数据到达了,这里规定的时间就是Data Required Time,而数据到达的时间是Data Arrival Time),也即是Setup Slack为正,显然能够正常工作。为负,肯定不能正常工作。
公式6-2和6-3好理解,对于公式6-4,应该理解为这样的电路:前一级是一个FPGA内部寄存器,后一级是器件的管脚,我们必须保证管脚输出的时钟和数据能够被外部一个寄存器(或时序电路)正常接收,所以器件输出的时钟和数据信号应该满足一定的关系,这个关系就是等式6-4所要表达的意思。因为外部电路未知,所以公式6-4并不能完整描述器件输出的数据能被正常接收的条件,但是满足公式6-4是最基本的,是必须的。如果不满足(也即Setup Slack是负),外部逻辑肯定没法接收器件输出的数据。
3.时钟保持检查(Clock Hold Check)
拿一个寄存器工作为例,直白地说,保持检查是要保证在时钟沿达到后规定的时间内数据不得变化。就是要保证Th。
需要认真仔细地理解好下面的图和公式,并把这些公式与建立时间检查的公式相比较,以加强对这些概念的理解。
TimeQuest进行A2情况下的Hold Check,因为这条件最严酷。Launch edge和Latch edge相距越近,Hold关系就越严酷。TimeQuest总是分析最严酷条件下的时序关系。
如果数据要求的时间短于数据到达时间(这句话的意思就是规定的时间内数据不能变化,这个规定的时间就是Data Required Time,而数据发生变化的时间是Data Arrive Time。因为如果数据到达时间一到数据就变化了,就不能得到想要的结果),此时Hold Slack为正,很显然就满足了HOLD Check,电路可以正常工作。
4.恢复和去除时间(Recovery and Removal Time)
恢复时间(Recovery Time)是指异步控制信号(如寄存器的异步清除和置位控制信号)在“下个时钟沿”来临之前变无效的最小时间长度。这个时间的意义是,如果保证不了这个最小恢复时间,也就是说这个异步控制信号的解除与“下个时钟沿”离得太近(但在这个时钟沿之前),没有给寄存器留有足够时间来恢复至正常状态,那么就不能保证“下个时钟沿”能正常作用,也就是说这个“时钟沿”可能会失效。
去除时间(Removal)是指异步控制信号(如寄存器的异步清除和置位控制信号)在“有效时钟沿”之后变无效的最小时间长度。这个时间的意义是,如果保证不了这个去除时间,也就是说这个异步控制信号的解除与“有效时钟沿”离得太近(但在这个时钟沿之后),那么就不能保证有效地屏蔽这个“时钟沿”,也就是说这个“时钟沿”可能会起作用。
换句话来说,如果你想让某个时钟沿起作用,那么你就应该在“恢复时间”之前是异步控制信号变无效,如果你想让某个时钟沿不起作用,那么你就应该在“去除时间”过后使控制信号变无效。如果你的控制信号在这两种情况之间,那么就没法确定时钟沿是否起作用或不起作用了,也就是说可能会造成寄存器处于不确定的状态。而这些情况是应该避免的。所以恢复时间和去除时间是应该遵守的。
Recovery Slack计算类似于时钟setup slack的计算。
如果异步复位信号来自于器件I/O port,为了TimeQuest执行这个path的recovery分析,你必须为异步复位port创建输入延迟约束。
Removal Slack的计算类似与时钟hold slack计算。
如果异步复位信号来自于器件I/O port,为了TimeQuest执行这个path的removal分析,你必须为异步复位port设置Input Minimum Delay。
5.多周期路径(Multicycle Paths)
缺省情况下,在setup/hold检查中,我们假设数据从launch edge开始发送,在Latch edge被捕获,Launch edge和Latch edge是相邻近的一对时钟,这种方式我们称之为缺省的setup/hold关系。在多周期路径检查中,我们仍然采用Launch/Latch edge的概念,但是,Launch/Latch edge不再是相邻的一对时钟沿,而是间隔一定时钟周期的一对时钟沿,间隔的时钟周期数由用户来指定。
图6-8显示了一个乘法器的输入寄存器和输出寄存器之间的Multicycle Path例子,这个例子里,目的寄存器在第二或第三等其它时钟沿锁存数据。
在图6-9中,显示了一个使用缺省setup和hold关系的寄存器到寄存器路径、目的和源时钟的定时图、缺省setup和hold关系,这里,src_clk时钟周期是10ns,dst_clk周期是5ns,缺省setup关系是5ns,缺省hold关系是0ns。
为了适应系统要求,你可以用multicycle timing exception来修改缺省setup和hold关系。图6-10显示了应用multicycle timing exception之后的实际的setup关系。设置multicycle setup assignment为2,以使用第2个沿来锁存,这样从缺省的5ns变为10ns。
在同步逻辑设计中,通常都是按照单周期关系考虑数据路径的。但是往往存在这样的情况:一些数据不需要在下一个时钟周期就稳定下来,可能在数据发送后几个时钟周期之后才起作用;一些数据经过的路径太复杂,延时太大,不可能在下一个时钟周期稳定下来,必须要在数据发送后数个时钟周期之后才能被采用。针对这两种情况,设计者的设计意图都是:数据的有效期在以Lauch edge为起始的数个时钟周期之后的Latch edge。这一设计意图不能够被时序分析工具猜度出来,必须由设计者在时序约束中指定;否则,时序约束工具会按照单周期路径检查的方式执行,往往会误报出时序违规。
不设置多周期路径约束的后果有两种:一是按照单周期路径检查的结果,虚报时序违规;二是导致布局布线工具按照单周期路径的方式执行,虽然满足了时序规范,但是过分优化了本应该多个周期完成的操作,造成过约束(Over-Constrain)。过约束会侵占本应该让位于其他逻辑的布局布线资源,有可能造成其他关键路径的时序违规或时序余量变小。
在多周期路径的建立时间(Setup Time)检查中,TimeQuest会按照用户指定的周期数延长Data Required Time,放松对相应数据路径的时序约束,从而得到正确的时序余量计算结果;在保持时间(Hold Time)检查中,TimeQuest也会相应地延长Data Required Time,不再按照单周期路径的分析方式执行(不再采用Launch edge最近的时钟沿,而是采用Latch edge最近的时钟沿),这就需要用户指定保持时间对应的多周期个数。TimeQuest计算Hold Time的缺省公式等同于PrimeTime。PrimeTime会采用建立时间检查对应时钟沿的前一个时钟沿进行保持时间检查,并多会造成保持时间检查违规,需要用户指定保持时间检查对应的时钟沿为Launch edge最近的时钟沿。
TimeQuest缺省的Hold Time检查公式是需要用户修改的——针对Setup Time多周期路径的设置也会影响到Hold Time的检查。究其原因,多周期路径是为了解决信号传播太慢的问题,慢到一个周期都不够,所以要把Setup Time的检查往后推几个周期——扩大Setup Time检查的时间窗口。而Hold Time检查信号是否传播得太快,如果把检查时刻往后推,就缩小了Hold Time检查的时间窗口。
“信号跳变抵达窗口”:对Latch寄存器来说,从previous时钟对应的Hold Time开始,到current时钟对应的Setup Time结束。
“信号电平采样窗口”:对Latch寄存器来说,从current时钟对应的Setup Time 开始,到current时钟对应的Hold Time结束。
Launch寄存器必须保证驱动的信号跳变到达Latch寄存器的时刻恰好处于“信号跳变抵达窗口”内,才能保证不破坏Latch寄存器的―信号电平采样窗口。
时序检查的目的就是确认信号跳变发生在“信号跳变抵达窗口”内,而不会发生在“信号电平采样窗口”内。
多周期路径的设置是通过延后Setup Time检查的时刻,扩大了“信号跳变抵达窗口”,放松了时序约束。通过窗口的概念,也很容易理解延后Hold Time,就会缩小“信号跳变抵达窗口”。
6.亚稳态(MetaStability)
Metastability可能会发生在一个信号在两个不相关的电路或者异步时钟域间的传输,因为设计者不能确保信号会满足setup和hold时间要求,为了使最小化由于metastability出错的概率,电路设计者通常使用一个组顺序寄存器,又称同步寄存器链,或同步器,在目的时钟域中用来重新同步数据信号到新的时钟域。
MTBF是一个由于metastability导致出错的平均时间估计。
TimeQuest分析你的设计中潜在的Metastability,为同步寄存器链计算MTBF,整个设计的MTBF是基于它包含的同步链的估计。
除了报告在设计中发现的同步寄存器链外,Quartus II软件还保护这些寄存器优化可能的MTBF负面影响,比如寄存器复制和逻辑重新定时,如果MTBF太低,Quatus II软件也优化你的设计的MTBF。
7.Common Clock Path Pessimism Removal
公共时钟路径pessimism removal引起与公共时钟路径相关联的最小和最大延迟值的变化,这种变化是在静态分析计算slack的时候,将公共时钟路径的最大和最小延迟值的差加到对应的slack公式。
最小和最大延迟变化可能会发生,当两个不同的延迟值被用于同样的时钟通道的时候,例如,在简单的setup分析时,到源寄存器的最大时钟路径延迟用来确定数据到达时间,到目的寄存器的最小时钟路径延迟用来确定数据要求时间,然而,如果到源寄存器和到目的寄存器的时钟路径共享一个公共时钟路径的时候,在定时分析期间,最大延迟和最小延迟都被用于公共时钟路径模型。最小和最大延迟的使用会产生一个由于2个不同延迟值的overlay pessimistic分析,最大和最小延迟不可能被作为同一时钟路径模型。
图6-11显示了一个典型的register-to-register路径,最大和最小的延迟值标在路径上。
A段是reg1和reg2的公共时钟路径,最小延迟是5.0ns,最大延迟是5.5ns,最大和最小延迟的差等于公共时钟路径的pessimism removal值,在这种情况下,公共时钟路径pessimism是0.5ns,TimeQuest会将公共时钟路径pessimism removal值加到相应的slack公式来得到总的slack,因此,在图6-11中如不加公共时钟通道pessimism removal时的setup slack等于0.7,增加公共时钟通道pessimism removal之后就变成了1.2ns。
还可以使用公共时钟路径pessimism removal来确定一个寄存器的最小脉冲宽度,一个时钟信号必须满足一个寄存器的最小脉冲宽度的要求,以便寄存器能够做出响应。上升沿触发的寄存器有一个最小高电平脉冲宽度的参数要求,而下降沿触发的寄存器有一个最小低电平脉冲宽度的参数要求。脉冲不满足这个参数可能会导致寄存器不能正确地锁定输入数据。为了计算最小脉冲宽度的slack,TimeQuest分析器利用寄存器时钟端口人为设定的时钟参数要求来确定实际最小脉冲宽度,TimeQuest分析器依据最大/最小上升时间和最大/最小下降的时间来确定要求的最小脉冲宽度。图6-12显示了要求的最小高电平和低电平脉冲宽度。
利用公共时钟路径pessimism,最小脉冲宽度slack可以增加,增加量是最大上升时间减去最小上升时间与最大下降时间减去最小下降时间两个值中的较小的一个值。对图6-12,slack值增加了0.2ns,它是0.3ns(0.8ns-0.5ns)和0.2ns(0.9ns-0.7ns)两个值的较小的一个值。
8.Clock-As-Data分析
大部分设计是被称作数据通道或时钟通道的连接,一个数据通道连接2个同步单元的输出,一个时钟通道是同步单元的时钟pin的连接。然而,会存在如图6-13的路径,从port clk_in到port clk_out这个路径,既是个时钟path又是个数据path,时钟path是从port clk_in到reg_data的时钟pin,数据path是从port clk_in到port clk_out。
采用clock_as_data分析,TimeQuest提供更精确的基于用户约束的路径分析,对于时钟路径分析,同PLL相关的任何相位漂移都会被考虑,对于数据通道分析,同PLL相关的任何相位漂移都会被考虑而不是忽略。
Clock-as-data分析也应有于内部产生的时钟分频器,如图6-14,在这个图中,反相器反馈路径的波形在定时分析期间被分析。分频器寄存器的输出用来确定launch时间,寄存器的时钟port用来确定latch时间。
9.Multicorner分析
TimeQuest可以执行multicorner定时分析,以验证在不同的运行环境下(电压、处理速度、温度等)能否满足设计要求。
为了改变操作条件或速度等级可以使用set_operating_condition命令。
为了确保在不同条件下无违例发生,应该在不同的运行条件下执行静态定时分析,表6-2给出了低速和高速定时模型操作条件。