静态时序分析综述报告.docx
《静态时序分析综述报告.docx》由会员分享,可在线阅读,更多相关《静态时序分析综述报告.docx(17页珍藏版)》请在冰豆网上搜索。
静态时序分析综述报告
静态时序分析综述报告
——孙声震
1.静态时序分析
静态时序分析(STA)就是套用特定的时序模型(TimingModel),针对特定电路分析其是否违反设计者给定的时序限制(TimingConstraint)。
1.1背景
仿真技术是ASIC设计过程中应用最多的验证手段,然而,现在的单片集成系统设计正在将仿真时间推向无法容忍的极限。
在最后的门级仿真阶段,针对的是几十乃至几百万门的电路,对仿真器第一位的要求是速度和容量,因此,性能(仿真速度)和容量(能够仿真的设计规模)是验证中的关键因素。
传统上采用逻辑仿真器验证功能时序,即在验证功能的同时验证时序,它以逻辑模拟方式运行,需要输入向量作为激励。
随着规模增大,所需要的向量数量以指数增长,验证所需时间占到整个设计周期的50%,而最大的问题是难以保证足够的覆盖率。
鉴于此,这种方法已经越来越少地用于时序验证,取而代之的是静态时序分析技术。
1.2分类
静态时序分析以分析的方式区分,可分为Path-Based及Block-Based两种。
图1
如图1所示,为Path-Based这种分析方式。
信号从A点及B点输入,经过中间的逻辑单元,从Y端输出。
套用的TimingModel标示在各逻辑器件上,对于所有输入端到输出端都可以找到相对应的延迟时间。
而使用者给定的TimingConstraint为:
1.信号A到达电路输入端的时间点为2(AT=2,AT为ArrivalTime)。
2.信号B到达电路输入端的时间点为5(AT=5)。
3.信号必须在时间点10之前到达输出端Y(RT=10,RT为RequiredTime)。
针对P1及P2两条路径(Path)来做分析。
P1的起始点为A,信号到达时间点为2。
经过第1个逻辑器件之后,由于有2单位的延迟时间,所以信号到达这个器件输出的时间点为4(2+2)。
依此类推,信号经由P1到达输出Y的时间点为7(2+2+3)。
在和上述第三项TimingConstraint比对之后,我们可以得知对P1这个路径而言,时序(Timing)是满足使用者要求的。
按照同样的方式可以得到信号经由路径B到达输出Y的时间点为11(5+1+3+2),照样和上述第三项TimingConstraint比对,我们可以得知对P2这个路径而言,Timing是不满足使用者要求的。
对图2的设计而言,总共有6个信号路径。
对于采用Path-Based分析方式的STA软件来说,它会对这6个信号路径作逐一的分析,然后记录下结果。
图2
如所示,Block-Based的分析方式的时序信息(TimingInformation)的储存不再是以路径为单位,而是以电路节点为单位。
由TimingConstraint我们仅能得知A节点的AT为2,B节点的AT为5以及Y节点的RT为10。
Block-Based的分析方式会找出每个节点的AT和RT,然后比对这两个数值。
当RT的值大于AT时表示信号比TimingConstrain中要求的时间还早到达,如此则Timing是满足的,反之则不满足。
2.
静态时序分析
2.1基本原理
静态时序分析技术是一种穷尽分析方法,用以衡量电路性能。
它提取整个电路的所有时序路径,通过计算信号在路径上的延迟传播找出违背时序约束的错误,主要是检查建立时间和保持时间是否满足要求,而它们又分别通过对最大路径延迟和最小路径延迟的分析得到。
静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。
它完全克服了动态时序验证的缺陷,适合进行超大规模的片上系统电路的验证,可以节省多达20%的设计时间。
因此,静态时序分析器在功能和性能上满足了全片分析的目的。
支持片上系统设计,即它为快速满足设计时序要求取得了突破,能提供百万门级设计所要求的性能,并在一个合理的时间内分析设计,而且它带有先进的时序分析技术和可视化的特性,用于全芯片验证。
静态时序分析的优点显而易见,主要是:
∙能够详尽地覆盖时序路径;
∙不需要测试向量;
∙执行速度快;
∙能够为时序冲突生成全面的报告;
∙能够完成使用仿真所不能实现的复杂分析,例如min/max分析、组合环检测、自动地检测并消除无效路径;
当然,如上所述的静态时序分析的优点并不意味着STA能够完全替代动态仿真,静态验证工具与动态验证工具必须协同存在。
一个主要的原因是STA不能验证一个设计的功能,而且某些设计风格并不是很适合静态的方法。
例如,一个设计的异步部分可能要求使用动态仿真,当然,任何混合信号的部分更是如此。
下面介绍重点介绍静态时序分析的原理。
图3
我们从图三中可以看到,要了解静态时序分析,我们必须了解构成静态时序分析的四个组成部分:
DesignData、InterconnectData、LibraryData和TimingConstraints。
2.1.1DesignData
在DesignData中,我们知道,一般在DesignCompiler做完综合之后,便能得到Gate-levelNetlist,这时,我们在做静态时序分析的时候,可以利用已经产生的Gate-levelNetlist。
2.1.2LibraryData
在LibraryData中,静态时序分析所需要的时序模型就放在celllibrary中。
这些必要的时序信息是以TimingArc的方式呈现在标准组件库中。
TimingArc定义逻辑器件的任意两个端点之间的时序关系。
它分为CombinationalTimingArc、SetupTimingArc、HoldTimingArc、EdgeTimingArc、PresetandClearTimingArc、RecoveryTimingArc、RemovalTimingArc、ThreeStateEnable&DisableTimingArc、WidthTimingArc。
其中,CombinationalTimingArc、EdgeTimingArc、PresetandClearTimingArc和ThreeStateEnable&DisableTimingArc定义时序的延时,其它各项则定义了时序的检查。
CombinationalTimingArc是最基本的TimingArc。
如图4,CombinationalTimingArc的Sense分为三种,分别是:
inverting,non-inverting以及non-unate。
图4:
CombinationalTimingArc分类
从这个图中我们看到,当特定输入和特定的输出信号的变化相同时,TimingArc为non-invertingsense;当特定输入和特定的输出信号的变化相反时,TimingArc为invertingsense;而当特定的输出无法由特定的输入决定时,TimingArc为non-unate。
其它的TimingArc还包括:
SetupTimingArc:
定义组件所需的SetupTime;
HoldTimingArc:
定义组件所需的HoldTime;
在此,引入一个setuptime和holdtime的概念:
图5:
Setuptime&Holdtime
如图5所示,setuptime就是指触发器在时钟沿到来前,其数据输入端的数据必须保持不变的时间;Holdtime就是指触发器在时钟沿到来后,其数据输入端的数据必须保持不变的时间。
EdgeTimingArc:
定义组件ClockActiveEdge到数据输出的延迟时间,如图6;
图6
PresetandClearTimingArc:
定义组件清除信号(Preset或Clear)发生后,数据被清除的速度,如图7;
图7
RecoveryTimingArc:
定义组件ClockActiveEdge之前,清除信号不准启动的时间,如图8;
图8
RemovalTimingArc:
定义序向组件ClockActiveEdge之后,清除信号不准启动的时间,如图9;
图9
ThreeStateEnable&DisableTimingArc:
定义Tri-State组件致能信号(Enable)到输出的延迟时间,如图10;
图10
WidthTimingArc:
定义信号需维持稳定的最短时间,如图11;
图11
以上我们只提出了TimingArc包括的一些项目,而没有量化的说明。
以CombinationalTimingArc为例,信号从输入到输出的延迟时间可以描述成以输入的转换时间(TransitionTime)和输出的负载为变量的函数。
描述的方式可以是线性的方式,也可以是时序表格的形式。
2.1.3InterconnectData
在一个电路中,逻辑器件和逻辑器件之间的连线的延时,我们一般是不考虑的,但是随着系统频率的提高,在互连线上的延时越来越不可忽视。
连线延迟依照布局与布线(P&R)前后有不同的考虑。
在布局与绕线前,组件在芯片中摆放的位置尚未确定,所以连线延迟是一个预估值。
而在布局与布线之后,连线延迟则是根据实际布线计算出来的。
对布局与布线之前的连线延迟,通常是用WireloadModel来预估。
WireloadModel根据芯片面积的预估大小及连线的驱动组件数目(Fan-out)的多少来决定连线的电阻和电容值,STA软件则利用这些电阻电容值计算出连线延迟。
在布局与布线之后,可以利用电阻电容萃取软件将布线图形转换成实际的电阻电容电路,然后贴回(Back-annotate)STA软件计算连线延迟。
2.1.4TimingConstructions
TimingConstructions是由设计者设定的,用来检验设计电路时序的准则。
其中最重要的一项就是对clock的描述。
Clock规格包含波形、Latency及Uncertainty的定义。
波形定义一个Clock的周期及信号上升缘及下降缘的时间点。
Latency定义从Clock来源到组件Clock输入端的延迟时间。
Uncertainty则定义Clock信号到组件Clock输入端可能早到或晚到的时间。
图12
如图12,左边的触发器在第一个Clock上升缘时会通过Q发出数据,此数据会在第二个Clock上升缘到来时让右边的触发器收取。
要分析右边的触发器能否正确得到数据就必须知道第一个Clock上升缘到达节点C1的时间点和第二个上升沿到达节点C2的时间点。
假设在时间点为0的时候,Clock信号由S点出发,经过一段时间(sourcelatency,1个时间单位,仿真芯片外的Clock延迟时间,例如板子上的布线产生的信号延迟时间)到达电路的Clock输入端点P,接下来再经过一段时间(芯片内Clock布线造成的信号延迟时间),Clock信号分别到达C1和C2节点。
如果电路已经进行布局与布线,输入端点P到C1和C2的信号延迟时间可由连线上的寄生电阻电容计算得来。
比方说,经过计算发现信号由P传递到C1需要1个时间单位,由P传递到C2需2个时间单位,则Clock信号第一个上升沿到达C1和第二个上升沿到达C2的时间点就会如图13下方两列所示,分别为时间点2和13(因为加上了1个时间单位的sourcelatency)。
图13
在布局与布线之前,我们无法准确得知P到C1和C2的信号延迟时间,仅能先做个预估。
图12的networklatency及上面提到的Uncertainty就是用来做此种预估的。
先假设我们拥有某种完美的布局与布线软件可以让Clock输入端点P到所有触发器的Clock输入端的信号延迟时间一模一样,那么我们只要知道这个信号延迟时间就可以得到Clock信号到达C1和C2的时间点了。
这个信号延迟时间可以通过电路特性(如预估面积大小,触发器数目等)来做预估,而这个预估值就是所谓的networklatency。
如果这种完美的软件存在的话,那Clock的上升沿到达C1和C2的时间点就可以由Latency(sourcelatency+networklatency)计算出来。
不过,在布局与布线后Clock输入端点P到所有触发器的Clock输入端的信号延迟时间不会完全一样。
也就是说Clock的某个上升沿不会同时到达C1和C2。
因此我们要对上述的预估值做些修正,加入Uncertainty的描述来定义Clock上升沿左右移动的可能范围。
在图13中,Uncertainty为1个时间单位,所以Clock第一个上升缘会在时间点3(因为Latency为3)左右1时间单位范围内(也就是时间点2到时间点4)到达C1,。
第二个上升缘则会在时间点12到14的范围内到达C2。
除了对clock进行描述之外,我们还要对边界条件(boundarycondition)进行说明。
在此之前,我们首先要弄明白path的定义。
Path根据起点和终点,可以分为四种:
1.从输入到输出;
2.从输入到触发器;
3.从触发器到输出;
4.从触发器到触发器。
如图14所示:
图14
当clock确定之后,第4种的情况的时序限制就已经确定了,为了确定其它三种的时序限制,我们需要定义边界条件。
1.DrivingCell:
定义输入端点的驱动能力(如图15)。
2.InputTransitionTime:
定义输入端点的转换时间(如图15)。
3.OutputCapacitanceLoad:
定义输出负载(如图15)。
4.InputDelay:
输入端点相对于某个Clock领域的延迟时间。
(图,Delay(从clk到Q)+a)
5.OutputDelay:
自输出端点往外看相对于某个Clock领域的延迟时间。
(如图16,c)
图15
图16
由于每个Path都有TimingConstraint,所以时序分析都能够进行。
但在某些情况下,有些Path的分析可能没有意义,因此你会想忽略这些Path的分析。
或是有些Path分析的方式不一样,你会想指定这些Path的分析方式。
此时就要设定一些TimingException。
那么什么样的路径我们去设定TimingException呢?
Timingexceptions包括了:
错误路径(falsepaths)、多循环路径(multi-cyclepaths)、用户定义的最大最小延迟约束以及无效的时序。
必须正确地定义TimingExceptions,否则它们不会被静态时序分析软件接受。
例如错误路径和多循环路径必须指定一个完整的,有效的路径,包括正确的起点和终点。
其中起点应该是主要的输入端口、时钟、管脚或者单元,而终点应该是主要的输出口、时钟、管脚或者单元。
总结以上的介绍,我们可以看到静态时序分析非常适合于同步设计,如流水式的处理器结构和数据通路类的逻辑电路。
同步时序电路的特点是电路主要是存贮单元和组合逻辑电路组成。
在进行静态时序分析前,用户需要提供给时序分析软件的主要信息包括设计的网表和电路的时钟参数,时序分析软件能够从工艺库中获得诸如建立和保持时间等时序参数,通过计算时序部件之间每个组合逻辑块的延时,判断这些延时是否和与之相对应的寄存器的时序参数冲突。
静态时序分析包括三个基本的过程:
查找、延迟计算和结果管理,在算法实现上,静态时序分析将要分析的电路抽象为有向图,这个图是以各种延迟为边的权重,以电路基本存贮单元为节点,并不考虑电路的逻辑功能,因此那些原本并不具备逻辑功能的连接也可能被作为时序分析的一条路径给予计算和检查,这些路径就成为“虚假路径”,虚假路径的出现妨碍了用户确定真正的关键路径,从而导致时序验证效率的降低,因此利用特定的约束减少最终路径报告中虚假路径的数目也是时序分析软件的主要工作任务,然而由于电路自身信号流的复杂性和搜索算法的局限,虚假路径的出现总是难以避免,所以关键路径的最终确定还是需要用户仔细分析路径报告。
静态时序分析的流程如图17:
图17:
STA流程
同传统设计流程中的后模拟方法验证相似,静态时序分析也依据设计流程所处的不同阶段和需要处理的电路基本单元的不同而分为不同的层次:
晶体管级和门级。
晶体管级的时序分析耗时长,但提供的时序信息精确且详细,不过由于晶体管级信号流方向的模糊性,也会有更多的虚假路径,而门级的分析因为信号流明确,产生虚假路径的数目也较少。
至此,进行静态时序分析的左右知识储备基本就完成了,接下去,我们通过一个简单的例子对静态时序分析的分析方式有个更进一步的了解。
图18
如图18所示,这是一个设计电路,它的时序模型和时序限制如下:
所有逻辑闸在输出信号上升时最长的延迟时间为3ns,最短为2ns;
所有逻辑闸在输出信号下降时最长的延迟时间为2ns,最短为1ns;
所有联机(Net)最长的延迟时间为2ns,最短为1ns;
所有触发器Clock到Q的延迟时间为3ns;
所有触发器的SetupTime为1ns(Ts);
所有触发器的HoldTime为1ns(Th);
Clock周期为14ns(Dclkp);
Clocksourcelatency为2ns(Dclks);
Clocknetworklatency为3ns(Dclkn);
Clockuncertainty为1ns(Dclku);
B及C的inputdelay皆为1ns(Da、Db、Dc);
Y的outputdelay为3ns(DY);
首先,找出所有的有效路径,在此我们只列举出其中的三条,如图19所示。
拿其中的path1为例。
图19
假设输入A信号由0变1,计算第1条Path终点信号到达的时间(ArrivalTime简称AT)。
AT=Da+2+3+2+3+2=13ns。
如图20。
图20
假设输入A信号由1变0,计算第1条Path终点AT。
AT=Da+2+2+2+3+2=13ns。
如图21。
图21
计算第1条Path终点的需求时间(RequiredTime,简称RT)。
RT=Dclkp+Dclks+Dclkn-Dclku-Ts=2+3+14-1-1=17ns。
如图22。
图22
假设输入A信号由0变1,计算第1条Path终点的Slack。
Slack等于RT和AT的差值,对于SetupTime验证来说等于RT-AT,对于HoldTime验证来说等于AT-RT。
在此SetupTime范例中,Slack为正,表示信号实际到达Path终点时间比必须到达的时间还早,因此Timing是满足的。
假设输入A信号由1变0,计算第1条Path终点的Slack。
Slack为正,因此Timing是满足的。
综上所述,path1是满足时序要求的。
取它的slack为4ns(取较差的)。
3.
静态时序分析的工具简介
目前业界进行静态时序分析的两种主流EDA工具软件:
Synopsys公司的PrimeTime和Cadence公司的Pearl。
以下主要介绍PrimeTime。
3.1PrimeTime的功能、特点和原理
PrimeTime是Synopsys的静态时序分析软件,常被用来分析大规模、同步、数字ASIC。
PrimeTime适用于门级的电路设计,可以和Synopsys公司的其它EDA软件非常好的结合在一起使用。
[8]
作为专门的静态时序分析工具,PrimeTime可以为一个设计提供以下的时序分析和设计检查:
建立和保持时间的检查(setupandholdchecks)
时钟脉冲宽度的检查
时钟门的检查(clock-gatingchecks)
recoveryandremovalchecks
unclockedregisters
未约束的时序端点(unconstrainedtimingendpoints)
master-slaveclockseparation
multipleclockedregisters
组合反馈回路(combinationalfeedbackloops)
基于设计规则的检查,包括对最大电容、最大传输时间、最大扇出的检查等。
PrimeTime具有下面的特点:
1)PrimeTime是可以独立运行的软件,它不需要逻辑综合过程中所必需的各种数据结构,而且它对内存的要求相对比较低。
2)PrimeTime特别适用于规模较大的、SOC(system-on-chip)的设计。
在数字集成电路设计的流程中,版图前、全局布线之后已经版图后,都可以使用PrimeTime进行静态时序分析。
PrimeTime的分析原理是:
首先,把整个芯片按照时钟分成许多时序路径(timingpath),然后对每条时序路径进行计算和分析。
时序路径指的是设计中一个点(开始点)到另一个点(结束点)的序列,开始点一般是时钟端口、输入端口、或寄存器或锁存器的数据输入引脚等,结束点一般是时钟、输出端口、或寄存器或锁存器的数据输入引脚等。
3.2利用PrimeTime进行静态时序分析的流程
3.2.1设置端口延时并检验时序
对于所有与时钟相关的端口,都要设置输入、输出的延迟。
set_input_delay0.0[all_inputs]-clock$clock
set_output_delay2.0[get_portINTERRUPT_DRIVER_ENABLE]-clock$clock
set_output_delay1.25[get_portMAPPING_ROM_ENABLE]-clock$clock
set_output_delay0.5[get_portOVERFLOW]-clock$clock
set_output_delay1.0[get_portPIPELINE_ENABLE]-clock$clock
set_output_delay1.0[get_portY_OUTPUT]-clock$clock
除此之外,还要对所有的输入端设置一个驱动单元,对所有的输出端设置电容
负载。
set_driving_cell-lib_cellIV-librarypt_lib[all_inputs]
set_capacitance0.5[all_outputs]
说明:
clock是在第四章中定义的变量(setclock[get_clockCLOCK]),以后出现将不再说明。
完成以上的设置之后,可以再运行一次检查:
check_timing
3.2.2保存设置
使用write_script命令将所作的设置保存到一个脚本文件中,这样在下一次运行的时候可以直接通过该文件来完成所有的设置。
该命令可以生成三种格式的文件:
1)DesignCompiler的dcsh格式(.dcsh)
2)DesignCompiler的dctcl格式(.tcl)
3)PrimeTime的文件格式:
(.pt)
命令的形式为:
write_script-formatdctc1-outputAM2910.tc1
write_script-formatdcsh-outputAM2910.dcsh
write_script-formatptsh-outputAM