静态时序分析综述报告以及primetime简介

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

静态时序分析综述报告
——孙声震1.静态时序分析
静态时序分析(STA)就是套用特定的时序模型(Timing Model),针对特定电路分析其是否违反设计者给定的时序限制(Timing Constraint)。

1.1 背景
仿真技术是ASIC设计过程中应用最多的验证手段,然而,现在的单片集成系统设计正在将仿真时间推向无法容忍的极限。

在最后的门级仿真阶段,针对的是几十乃至几百万门的电路,对仿真器第一位的要求是速度和容量,因此,性能(仿真速度)和容量(能够仿真的设计规模)是验证中的关键因素。

传统上采用逻辑仿真器验证功能时序,即在验证功能的同时验证时序,它以逻辑模拟方式运行,需要输入向量作为激励。

随着规模增大,所需要的向量数量以指数增长,验证所需时间占到整个设计周期的50%,而最大的问题是难以保证足够的覆盖率。

鉴于此,这种方法已经越来越少地用于时序验证,取而代之的是静态时序分析技术。

1.2 分类
静态时序分析以分析的方式区分,可分为Path-Based及Block-Based两种。

图1
如图1所示,为Path-Based这种分析方式。

信号从A点及B点输入,经过中间的逻辑单元,从Y端输出。

套用的Timing Model标示在各逻辑器件上,对于所有输入端到输出端都可以找到相对应的延迟时间。

而使用者给定的Timing
Constraint为:
1. 信号A到达电路输入端的时间点为2(AT=2,AT为Arrival Time)。

2. 信号B到达电路输入端的时间点为5(AT=5)。

3. 信号必须在时间点10之前到达输出端Y(RT=10,RT为Required Time)。

针对P1及P2 两条路径(Path)来做分析。

P1的起始点为A,信号到达时间点为2。

经过第1个逻辑器件之后,由于有2单位的延迟时间,所以信号到达这个器件输出的时间点为4(2+2)。

依此类推,信号经由P1到达输出Y的时间点为7(2+2+3)。

在和上述第三项Timing Constraint比对之后,我们可以得知对P1这个路径而言,时序(Timing)是满足使用者要求的。

按照同样的方式可以得到信号经由路径B到达输出Y的时间点为11(5+1+3+2),照样和上述第三项Timing Constraint比对,我们可以得知对P2这个路径而言,Timing是不满足使用者要求的。

对图2的设计而言,总共有6个信号路径。

对于采用Path-Based分析方式的STA软件来说,它会对这6个信号路径作逐一的分析,然后记录下结果。

图2
如所示,Block-Based的分析方式的时序信息(Timing Information)的储存不再是以路径为单位,而是以电路节点为单位。

由Timing Constraint我们仅能得知A节点的AT为2,B节点的AT为5以及Y节点的RT为10。

Block-Based的分析方式会找出每个节点的AT和RT,然后比对这两个数值。

当RT的值大于AT时表示信号比Timing Constrain中要求的时间还早到达,如此则Timing是满足的,反之则不满足。

2.静态时序分析
2.1基本原理
静态时序分析技术是一种穷尽分析方法,用以衡量电路性能。

它提取整个电路的所有时序路径,通过计算信号在路径上的延迟传播找出违背时序约束的错误,主要是检查建立时间和保持时间是否满足要求,而它们又分别通过对最大路径延迟和最小路径延迟的分析得到。

静态时序分析的方法不依赖于激励,且可以穷尽所有路径,运行速度很快,占用内存很少。

它完全克服了动态时序验证的缺陷,适合进行超大规模的片上系统电路的验证,可以节省多达20%的设计时间。

因此,静态时序分析器在功能和性能上满足了全片分析的目的。

支持片上系统设计,即它为快速满足设计时序要求取得了突破,能提供百万门级设计所要求的性能,并在一个合理的时间内分析设计,而且它带有先进的时序分析技术和可视化的特性,用于全芯片验证。

静态时序分析的优点显而易见,主要是:
∙能够详尽地覆盖时序路径;
∙不需要测试向量;
∙执行速度快;
∙能够为时序冲突生成全面的报告;
∙能够完成使用仿真所不能实现的复杂分析,例如min/max 分析、组合环检测、自动地检测并消除无效路径;
当然,如上所述的静态时序分析的优点并不意味着STA能够完全替代动态仿真,静态验证工具与动态验证工具必须协同存在。

一个主要的原因是STA不能验证一个设计的功能,而且某些设计风格并不是很适合静态的方法。

例如,一个设计的异步部分可能要求使用动态仿真,当然,任何混合信号的部分更是如此。

下面介绍重点介绍静态时序分析的原理。

图3
我们从图三中可以看到,要了解静态时序分析,我们必须了解构成静态时序分析的四个组成部分:Design Data、Interconnect Data、Library Data和Timing Constraints。

2.1.1 Design Data
在Design Data中,我们知道,一般在Design Compiler做完综合之后,便能得到Gate-level Netlist,这时,我们在做静态时序分析的时候,可以利用已经产生的Gate-level Netlist。

2.1.2 Library Data
在Library Data中,静态时序分析所需要的时序模型就放在cell library中。

这些必要的时序信息是以Timing Arc的方式呈现在标准组件库中。

Timing Arc定义逻辑器件的任意两个端点之间的时序关系。

它分为Combinational Timing Arc、Setup Timing Arc、Hold Timing Arc、Edge Timing Arc、Preset and Clear Timing Arc、Recovery Timing Arc、Removal Timing Arc、Three State Enable & Disable Timing Arc、Width Timing Arc。

其中,Combinational Timing Arc、Edge Timing Arc、Preset and Clear Timing Arc和Three State Enable & Disable Timing Arc定义时序的延时,其它各项则定义了时序的检查。

Combinational Timing Arc是最基本的Timing Arc。

如图4,Combinational Timing Arc的Sense分为三种,分别是:inverting,non-inverting以及non-unate。

图4:Combinational Timing Arc分类
从这个图中我们看到,当特定输入和特定的输出信号的变化相同时,Timing Arc 为non-inverting sense;当特定输入和特定的输出信号的变化相反时,Timing Arc 为inverting sense;而当特定的输出无法由特定的输入决定时,Timing Arc为non-unate。

其它的Timing Arc还包括:
Setup Timing Arc:定义组件所需的Setup Time;
Hold Timing Arc:定义组件所需的Hold Time;
在此,引入一个setup time和hold time的概念:
图5:Setup time & Hold time
如图5所示,setup time就是指触发器在时钟沿到来前,其数据输入端的数据必
须保持不变的时间;Hold time就是指触发器在时钟沿到来后,其数据输入端的数据必须保持不变的时间。

Edge Timing Arc:定义组件Clock Active Edge到数据输出的延迟时间,如图6;
图6
Preset and Clear Timing Arc:定义组件清除信号(Preset或Clear)发生后,数据被清除的速度,如图7;
图7
Recovery Timing Arc:定义组件Clock Active Edge之前,清除信号不准启动的时间,如图8;
图8
Removal Timing Arc:定义序向组件Clock Active Edge之后,清除信号不准启动的时间,如图9;
图9
Three State Enable & Disable Timing Arc:定义Tri-State组件致能信号(Enable)到输出的延迟时间,如图10;
图10
Width Timing Arc:定义信号需维持稳定的最短时间,如图11;
图11
以上我们只提出了Timing Arc包括的一些项目,而没有量化的说明。

以Combinational Timing Arc为例,信号从输入到输出的延迟时间可以描述成以输入的转换时间(Transition Time)和输出的负载为变量的函数。

描述的方式可以是线性的方式,也可以是时序表格的形式。

2.1.3 Interconnect Data
在一个电路中,逻辑器件和逻辑器件之间的连线的延时,我们一般是不考虑的,但是随着系统频率的提高,在互连线上的延时越来越不可忽视。

连线延迟依照布局与布线(P&R)前后有不同的考虑。

在布局与绕线前,组件在芯片中摆放
的位置尚未确定,所以连线延迟是一个预估值。

而在布局与布线之后,连线延迟则是根据实际布线计算出来的。

对布局与布线之前的连线延迟,通常是用Wireload Model来预估。

Wireload Model根据芯片面积的预估大小及连线的驱动组件数目(Fan-out)的多少来决定连线的电阻和电容值,STA软件则利用这些电阻电容值计算出连线延迟。

在布局与布线之后,可以利用电阻电容萃取软件将布线图形转换成实际的电阻电容电路,然后贴回(Back-annotate)STA软件计算连线延迟。

2.1.4 Timing Constructions
Timing Constructions是由设计者设定的,用来检验设计电路时序的准则。

其中最重要的一项就是对clock的描述。

Clock规格包含波形、Latency及Uncertainty的定义。

波形定义一个Clock的周期及信号上升缘及下降缘的时间点。

Latency定义从Clock来源到组件Clock输入端的延迟时间。

Uncertainty则定义Clock信号到组件Clock输入端可能早到或晚到的时间。

图12
如图12,左边的触发器在第一个Clock上升缘时会通过Q发出数据,此数据会在第二个Clock上升缘到来时让右边的触发器收取。

要分析右边的触发器能否正确得到数据就必须知道第一个Clock上升缘到达节点C1的时间点和第二个上升沿到达节点C2的时间点。

假设在时间点为0的时候,Clock信号由S点出发,经过一段时间(source latency,1个时间单位,仿真芯片外的Clock延迟时间,例如
板子上的布线产生的信号延迟时间)到达电路的Clock输入端点P,接下来再经过一段时间(芯片内Clock布线造成的信号延迟时间),Clock信号分别到达C1和C2节点。

如果电路已经进行布局与布线,输入端点P到C1和C2的信号延迟时间可由连线上的寄生电阻电容计算得来。

比方说,经过计算发现信号由P传递到C1需要1个时间单位,由P传递到C2需2个时间单位,则Clock信号第一个上升沿到达C1和第二个上升沿到达C2的时间点就会如图13下方两列所示,分别为时间点2和13(因为加上了1个时间单位的source latency)。

图13
在布局与布线之前,我们无法准确得知P到C1和C2的信号延迟时间,仅能先做个预估。

图12的network latency及上面提到的Uncertainty就是用来做此种预估的。

先假设我们拥有某种完美的布局与布线软件可以让Clock输入端点P到所有触发器的Clock输入端的信号延迟时间一模一样,那么我们只要知道这个信号延迟时间就可以得到Clock信号到达C1和C2的时间点了。

这个信号延迟时间可以通过电路特性(如预估面积大小,触发器数目等)来做预估,而这个预估值就是所谓的network latency。

如果这种完美的软件存在的话,那Clock的上升沿到达C1和C2的时间点就可以由Latency(source latency + network latency)计算出来。

不过,在布局与布线后Clock输入端点P到所有触发器的Clock输入端的信号延迟时间不会完全一样。

也就是说Clock的某个上升沿不会同时到达C1和C2。

因此我们要对上述的预估值做些修正,加入Uncertainty的描述来定义Clock上升沿左右移动的可能范围。

在图13中,Uncertainty为1个时间单位,所以Clock 第一个上升缘会在时间点3(因为Latency为3)左右1时间单位范围内(也就是时间点2到时间点4)到达C1,。

第二个上升缘则会在时间点12到14的范围内到达C2。

除了对clock进行描述之外,我们还要对边界条件(boundary condition)进行说明。

在此之前,我们首先要弄明白path的定义。

Path根据起点和终点,可以分为四种:
1. 从输入到输出;
2. 从输入到触发器;
3. 从触发器到输出;
4.从触发器到触发器。

如图14所示:
图14
当clock确定之后,第4种的情况的时序限制就已经确定了,为了确定其它三种的时序限制,我们需要定义边界条件。

1. Driving Cell:定义输入端点的驱动能力(如图15)。

2. Input Transition Time:定义输入端点的转换时间(如图15)。

3. Output Capacitance Load:定义输出负载(如图15)。

4. Input Delay:输入端点相对于某个Clock领域的延迟时间。

(图,Delay(从clk到Q)+ a)
5. Output Delay:自输出端点往外看相对于某个Clock领域的延迟时间。

(如图16,c)
图15
图16
由于每个Path都有Timing Constraint,所以时序分析都能够进行。

但在某些情况下,有些Path的分析可能没有意义,因此你会想忽略这些Path的分析。

或是有些Path分析的方式不一样,你会想指定这些Path的分析方式。

此时就要设定一些Timing Exception。

那么什么样的路径我们去设定Timing Exception呢?
Timing exceptions 包括了:错误路径(false paths)、多循环路径(multi-cycle paths)、用户定义的最大最小延迟约束以及无效的时序。

必须正确地定义Timing Exceptions,否则它们不会被静态时序分析软件接受。

例如错误路径和多循环路径必须指定一个完整的,有效的路径,包括正确的起点和终点。

其中起点应该是主要的输入端口、时钟、管脚或者单元,而终点应该是主要的输出口、时钟、管脚或者单元。

总结以上的介绍,我们可以看到静态时序分析非常适合于同步设计,如流水式的处理器结构和数据通路类的逻辑电路。

同步时序电路的特点是电路主要是存贮单元和组合逻辑电路组成。

在进行静态时序分析前,用户需要提供给时序分析软件的主要信息包括设计的网表和电路的时钟参数,时序分析软件能够从工艺库中获得诸如建立和保持时间等时序参数,通过计算时序部件之间每个组合逻辑块
的延时,判断这些延时是否和与之相对应的寄存器的时序参数冲突。

静态时序分析包括三个基本的过程:查找、延迟计算和结果管理,在算法实现上,静态时序分析将要分析的电路抽象为有向图,这个图是以各种延迟为边的权重,以电路基本存贮单元为节点,并不考虑电路的逻辑功能,因此那些原本并不具备逻辑功能的连接也可能被作为时序分析的一条路径给予计算和检查,这些路径就成为“虚假路径”,虚假路径的出现妨碍了用户确定真正的关键路径,从而导致时序验证效率的降低,因此利用特定的约束减少最终路径报告中虚假路径的数目也是时序分析软件的主要工作任务,然而由于电路自身信号流的复杂性和搜索算法的局限,虚假路径的出现总是难以避免,所以关键路径的最终确定还是需要用户仔细分析路径报告。

静态时序分析的流程如图17:
图17:STA流程
同传统设计流程中的后模拟方法验证相似,静态时序分析也依据设计流程所处的不同阶段和需要处理的电路基本单元的不同而分为不同的层次:晶体管级和门级。

晶体管级的时序分析耗时长,但提供的时序信息精确且详细,不过由于晶
体管级信号流方向的模糊性,也会有更多的虚假路径,而门级的分析因为信号流明确,产生虚假路径的数目也较少。

至此,进行静态时序分析的左右知识储备基本就完成了,接下去,我们通过一个简单的例子对静态时序分析的分析方式有个更进一步的了解。

图18
如图18所示,这是一个设计电路,它的时序模型和时序限制如下:所有逻辑闸在输出信号上升时最长的延迟时间为3ns,最短为2ns;
所有逻辑闸在输出信号下降时最长的延迟时间为2ns,最短为1ns;
所有联机(Net)最长的延迟时间为2ns,最短为1ns;
所有触发器Clock到Q的延迟时间为3ns;
所有触发器的Setup Time为1ns(T s);
所有触发器的Hold Time为1ns(T h);
Clock周期为14ns(D clkp);
Clock source latency为2ns(D clks);
Clock network latency为3ns(D clkn);
Clock uncertainty为1ns(D clku);
B及C的input delay皆为1ns(D a、D b、D c);
Y的output delay为3ns(D Y);
首先,找出所有的有效路径,在此我们只列举出其中的三条,如图19所示。

拿其中的path1为例。

图19
假设输入A信号由0变1,计算第1条Path终点信号到达的时间(Arrival Time 简称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终点的需求时间(Required Time,简称RT)。

RT= D clkp+ D clks+ D clkn- D clku-T s=2+3+14-1-1=17ns。

如图22。

图22
假设输入A信号由0变1,计算第1条Path终点的Slack。

Slack等于RT和AT的差值,对于Setup Time验证来说等于RT - AT,对于Hold Time验证来说等于AT - RT。

在此Setup Time范例中,Slack为正,表示信号实际到达Path终点时间比必须到达的时间还早,因此Timing是满足的。

假设输入A信号由1变0,计算第1条Path终点的Slack。

Slack为正,因此Timing是满足的。

综上所述,path1是满足时序要求的。

取它的slack为4ns(取较差的)。

3.静态时序分析的工具简介
目前业界进行静态时序分析的两种主流EDA工具软件:Synopsys公司的PrimeTime和Cadence公司的Pearl。

以下主要介绍Prime Time。

3.1 Prime Time的功能、特点和原理
PrimeTime是Synopsys的静态时序分析软件,常被用来分析大规模、同步、数字ASIC。

Prime Time适用于门级的电路设计,可以和Synopsys公司的其它EDA 软件非常好的结合在一起使用。

[8]
作为专门的静态时序分析工具,PrimeTime 可以为一个设计提供以下的时序分析和设计检查:
建立和保持时间的检查(setup and hold checks)
时钟脉冲宽度的检查
时钟门的检查(clock-gating checks)
recovery and removal checks
unclocked registers
未约束的时序端点(unconstrained timing endpoints)
master-slave clock separation
multiple clocked registers
组合反馈回路(combinational feedback loops)
基于设计规则的检查,包括对最大电容、最大传输时间、最大扇出的检查等。

PrimeTime 具有下面的特点:
1)PrimeTime 是可以独立运行的软件,它不需要逻辑综合过程中所必需的各种数据结构,而且它对内存的要求相对比较低。

2)PrimeTime 特别适用于规模较大的、SOC(system-on-chip)的设计。

在数字集成电路设计的流程中,版图前、全局布线之后已经版图后,都可以使用PrimeTime 进行静态时序分析。

Prime Time的分析原理是:首先,把整个芯片按照时钟分成许多时序路径(timing path),然后对每条时序路径进行计算和分析。

时序路径指的是设计中一个点(开始点)到另一个点(结束点)的序列,开始点一般是时钟端口、输入
端口、或寄存器或锁存器的数据输入引脚等,结束点一般是时钟、输出端口、或寄存器或锁存器的数据输入引脚等。

3. 2 利用Prime Time进行静态时序分析的流程
3. 2. 1 设置端口延时并检验时序
对于所有与时钟相关的端口,都要设置输入、输出的延迟。

set_input_delay 0.0 [all_inputs] -clock $clock
set_output_delay 2.0 [get_port INTERRUPT_DRIVER_ENABLE] -clock $clock
set_output_delay 1.25 [get_port MAPPING_ROM_ENABLE] -clock $clock
set_output_delay 0.5 [get_port OVERFLOW] -clock $clock
set_output_delay 1.0 [get_port PIPELINE_ENABLE] -clock $clock
set_output_delay 1.0 [get_port Y_OUTPUT] -clock $clock
除此之外,还要对所有的输入端设置一个驱动单元,对所有的输出端设置电容
负载。

set_driving_cell -lib_cell IV -library pt_lib [all_inputs]
set_capacitance 0.5 [all_outputs]
说明:clock 是在第四章中定义的变量(set clock [get_clock CLOCK]),以后出现将不再说明。

完成以上的设置之后,可以再运行一次检查:
check_timing
3. 2. 2 保存设置
使用write_script 命令将所作的设置保存到一个脚本文件中,这样在下一次运行的时候可以直接通过该文件来完成所有的设置。

该命令可以生成三种格式的文件:
1)Design Compiler 的dcsh 格式(.dcsh)
2)Design Compiler 的dctcl 格式(.tcl)
3)PrimeTime 的文件格式:(.pt)
命令的形式为:
write_script -format dctc1 -output AM2910.tc1
write_script -format dcsh -output AM2910.dcsh
write_script -format ptsh -output AM2910.pt
事实上这种脚本文件,也是PrimeTime 和Design Compiler 传递数据的一种主要方法。

对于使用Design compiler 来综合的电路设计,可以把一些重要的设置直接继承到PrimeTime 中来。

在生成的脚本文件中,包含了以下的信息:
图5:
可以看到,图5中包括了前面我们所做的所有设置。

调用脚本的方法是:source -echo + 脚本文件名
3. 2. 3 基本分析
运行report_constraint 命令,得到的constraint report 中包括了对整个设计的时序信息的总结。

通过它,可以检查设计中存在的timing violations 和constrains violations。

具体来说constraint report 中包含了以下的内容:
∙最大和最小延迟(min and max delay)
∙最小时钟脉冲宽度(min clock pulse width)
∙最小周期(min period)
∙recovery and removal on registers
∙时钟-门的建立和保持(clock-gating setup and hold)
∙最大和最小电容(min and max capacitance)
∙最大和最小转换周期(min and max transition)
∙最大和最小扇出(min and max fanout)
如果在命令中加入-verbose 参数,将在report 中得到更详细的细节。

如果加入-all_violators 参数,在report 中会列出对于每一项约束,设计中违反最严重的端点。

3. 2. 4 生成path timing report
使用report_timing 命令,生成基于路径的timing report。

在没有任何命令参数时,在report 中列出的是对于每个path group,该设计中最长的最大路径。

如果需要的是该设计中最短的最小路径的话,可以在命令中加上-delay min 参数。

report_timing 命令是一个很灵活的命令,可以用-help 来查看其它的参数。

3. 2. 5 设置时序中的例外
Timing exceptions 包括了:错误路径(false paths)、多循环路径(multic-ycle paths)、用户定义的最大最小延迟约束以及无效的时序。

必须正确地定义timing exceptions,否则它们不会被Prime Time 接受。

例如错误路径和多循环路径必须指定一个完整的,有效的路径,包括正确的起点和终点。

其中起点应该是主要的输入端口、时钟、管脚或者单元,而终点应该是主要的输出口、时钟、管脚或者单元。

需要注意的是:
1)假如没有进行update,Prime Time 不会检验timing exceptions 的正确性。

可以使用report_exceptions 命令,来确定它们是否是正确的。

2)在该命令中加上-ignored 参数,看看是否有exceptions 因为不正确而被Prime Time 忽略了。

更正被忽略的exceptions,否则它们将不起作用。

3. 2. 6 再次分析
在定义好timing exceptions 之后,再次进行分析,生成新的constraint report 和timing report。

report_constraint -all_violatorsreport_timing可以看到设
置了exceptions 之后,viloators 的个数,以及slack 的数值都减少了。

相关文档
最新文档