门级静态时序分析StaticTimingAnalysis与PrimeTime使用.docx
《门级静态时序分析StaticTimingAnalysis与PrimeTime使用.docx》由会员分享,可在线阅读,更多相关《门级静态时序分析StaticTimingAnalysis与PrimeTime使用.docx(25页珍藏版)》请在冰豆网上搜索。
门级静态时序分析StaticTimingAnalysis与PrimeTime使用
第六章门级静态时序分析与PrimeTime使用
一、PrimeTime简介
PrimeTime是Synopsys的一个单点的全芯片、门级静态时序分析器。
它能分析大规模、同步、数字ASICS的时序。
PrimeTime工作在设计的门级层次,并且和Synopsys其它工具整合得很紧密。
基本特点和功能:
时序检查方面:
建立和保持时序的检查(Setupandholdchecks)
重新覆盖和去除检查(Recoveryandremovalchecks)
时钟脉冲宽度检查(Clockpulsewidthchecks)
时钟门锁检查(Clock-gatingchecks)
设计检查方面:
没有时钟端的寄存器
没有时序约束的结束点(endpoint)
主从时钟分离(Master-slaveclockseparation)
有多哥时钟的寄存器
对层次敏感的时钟(Level-sensitiveclocking)
组合电路的反馈环(Combinationalfeedbackloops)
设计规则检查,包括最大电容(maximumcapacitance)、最大传输时间(maximumtransition)和最大扇出(maximumfanout)
PrimeTime时序分析流程和方法:
在时序分析之前需要做的步骤:
1、建立设计环境
-建立搜索路径(searchpath)和链接路径(linkpath)
-读入设计和库
-链接顶层设计
-建立运作条件、连线负载模型、端口负载、驱动和传输时间
2、说明时序声明(约束)
-定义时钟周期、波形、不确定性(uncertainty)和滞后时间(latency)
-说明输入、输出端口的延时
3、说明时序例外情况(timingexceptions)
-多周期路径(multicyclepaths)
-不合法路径(falsepaths)
-说明最大和最小延时、路径分割(pathsegmentation)和失效弧(disabledarcs)
4、进行分析和生成报告
-检查时序
-生成约束报告
-生成路径时序报告
二、静态时序分析中路径延时的计算
静态时序分析工具一般将电路网表看成一个拓扑图,图中的节点(node)代表电路中的引脚(pin)。
节点之间的边(edge)表示时序弧(timingarc),有两种:
#连线延时(netdelay)---驱动引脚(drivepin)和扇出(fanout)之间的连接
#单元延时(celldelay)---输入引脚(inputpin)和输出引脚(outputpin)之间的连接
延时计算就是计算每条时序弧的值,可能是单元延时也可能是连线延时。
通过累计这些延时可以计算时序路径(timingdelay)的上升延时(risedelay)或下降延时(falldelay)。
正函数时序弧(positiveunatetimingarc):
将上升延时和上升延时相加,下降延时和下降延时相加。
例如一个AND门单元延时和连线延时。
负函数时序弧(negativeunatetimingarc):
将新得到的上升延时和原来的下降延时相加,而新得到的下降延时和原来的上升延时相加。
例如NAND门。
非函数时序弧(non-unatetimingarc):
将原来的延时和新得到的最差情况延时(worst-casedelay)相加。
非函数时序弧出现在不能从输入量的变化预测输出端逻辑值变化的地方,例如XOR门。
下图展示了一个电路逻辑网络是如何转化成一张时序图的:
非线性延时模型(nonlineardelaymodel):
非线性模型是供应商以查表(lookuptable)形式在工艺库中提供的延时信息,它和时序分析计算有着紧密的联系。
总的延时包含了单元延时和连线延时:
Dtotal=Dcell+Dc
Dc
连线延时。
它有两种计算方法,一是通过operating_conditions中的tree_type属性和wire_load模型;二是在标准延时方程中读入一个SDF文件。
Dcell
门自身的延时,典型地是取从输入引脚电压变化到50%到输出引脚电压变化到50%的之间的时间。
CMOS非线性模型有两种计算Dcell的方法,在一个工艺库中可以混用。
一是用插值法在库所提供的单元延时表里查找;二是通过查传输(propagation)表和过渡(transition)表得到传输延时和过渡延时,再计算单元延时:
Dcell=Dpropagation+Dtransition。
Dpropagation
典型衡量Dpropagation的方法是从输入引脚电压变化了50%到门输出电压即将开始转变(比方说变化了10%)之间的时间。
这样,如果Dtransition值定义为输出电压从10%变化到50%之间的时间的话,它就要被加到Dpropagation上去。
这样结果就是输入变化了50%到输出变化了50%之间的时间。
Dtransition
输出引脚转变状态所需要的时间,有时也指输出斜坡(ramp)时间。
它是输出引脚两个参考电压之间变化的时间,可以是20%到80%或10%到50%。
它是通过插值查表法得到的。
如果提供的是单元延时表,那么总延时就是:
Dtotal=Dcell+Dc;
如果提供的是传输延时表,那么总延时就是:
Dtotal=Dpropagation+Dtransition+Dc。
库单元延时时序弧的种类有:
上升传输(Risepropagation)
单元上升(Cellrise)
下降传输(Fallpropagation)
单元下降(Cellfall)
上升过渡(Risetransition)
下降过渡(Falltransition)
注:
每个条延时弧可以有传输延时表或单元延时表,但不能都有;同时必须有过渡延时表。
每一个延时表可以通过以下六个变量中的一个到三个查找:
input_net_transition
output_net_length
total_output_net_capacitance
related_out_total_output_net_capacitance
output_net_pin_cap
output_net_wire_cap
延时计算举例
看下图的下降传输(fallpropagation)表:
一个两维的表,由输出端总电容和输入过渡时间查找。
输出端总电容由网络n1处的引脚电容、连线电容所决定。
输入过渡时间由前面的U0门所决定。
因为U1中的时序弧是负函数性质的,所以U0的上升过渡延时表就可以用来确定U1的输入过渡延时。
假设Ctotal是110.1,输入过渡延时是0.34,用这两个值在下降传输延时表中查找。
图中的黑点表示表中定义的点。
四个点和Z轴的高度值组成了供插值查找的领域,即图中的阴影部分。
下降过渡延时由下降过渡延时表得到,这个例子中它是基于输出端总电容的一维表。
前面提到了输出端总电容是110.1,通过简单的线性插值查表就可以得到延时。
然后将传输延时和下降的过渡延时相加即得到了通过U1单元的下降传输延时时间。
如果库中为U1定义的不是传输延时表,而是单元延时表,那么过渡延时时间将不计入单元延时之内。
环境缩放比例(EnvironmentalScaling)
当计算总延时说,时序分析器会分别考虑影响Dtotal的因素。
每一种因素都有它自己的全局参数来反映它对总延时的影响。
在通常情况下这些因素包括工艺(process)、温度(temperature)和电压(voltage)。
下面的因子可以分别应用到延时方程中去:
△v:
库中定义的电压变化的值
Kv:
电压对总延时影响的因子
△t:
库中定义的温度变化的值
Kt:
温度对总延时影响的因子
△p:
库中定义的工艺变化的值
Kp:
工艺对总延时影响的因子
三、PrimeTime的基本概念
一、定义设计环境
在对设计作时序分析之前,必须要定义好设计环境以使得在那些情况下满足
限制条件。
通过以下这些信息来说明设计环境:
时钟:
时钟波形和时钟信号的性质;
输入、输出延迟:
信号到每个输入端口的时间从每个输出端口离开所需的时间。
这些时间是用一个时钟周期的相对量表示的;
输入端口的外部驱动:
每一个输入端口的驱动单元或驱动电容,还可以用一个确定的过渡时间来表示;
电容负载:
输入或输出端口的外部电容;
运作条件:
环境特性(工艺、温度和电压);
连线负载电容:
用来预测布局布线后每一条连线的电容和电阻。
下图展示了用来定义设计环境的命令:
二、时序声明
通常当前设计只是一个更大电路的一部分。
时序声明提供了时钟和输入、输
出延时的信息。
在将设计建立起来之后,可以进行时序声明。
为了进行时序声明,包括以下一些内容:
说明时钟信息
描述一个时钟网络
说明时钟门锁(Clock-Gating)的建立和保持时间(SetupandHoldChecks)
建立内部生成的时钟
说明输入延时
说明时钟端的输入延时
说明输出延时
三、时序例外(TimingExceptions)
PrimeTime缺省地认为所有的电路都是单时钟周期的。
这意味着电路在一个
时钟周期之内将数据从一条路径的开始端传递到结束端。
在某些情况下,电路不是工作在这样的方式下。
对具体的一条路径来说不适用单始终周期时序,所以必须对这些缺省的时序假设作例外说明。
否则,时序分析将不能反映真实电路的工作情况。
主要有以下一些内容:
单时钟周期(缺省)路径延时限制
设置失败(False)路径
设置最大和最小路径延时
设置多时钟周期路径
路径说明方法
有效地说明例外情况
例外情况的优先级
报告例外情况
忽略例外情况
去除例外声明
四、报告的生成
在定义了时序声明和例外情况之后,可以生成时序分析报告,有助于定位设
计中的违规之处。
在进行时序分析的时候,PrimeTime会跟踪电路中所有的路径,然后根据电路说明、库、声明和例外情况计算设计的延时。
有以下一些内容:
检查设计约束
报告时序检测的覆盖率
生成路径时序报告
去除有寄存器的路径上的时钟扭斜(Skew)
生成瓶颈报告
进行快速时序升级(FastTimingUpdates)
生成约束报告
生成设计信息报告
生成连线负载报告
生成时序例外情况报告
报告最大扭斜检查(MaximumSkewChecks)
报告不变的时序检查(No-ChangeTimingChecks)
报告失效的时序弧(DisabledTimingArcs)
显示情形分析设置
观察扇入逻辑
观察扇出逻辑
显示层次参考(HierarchicalReferences)
报告单元参考(CellReferences)
生成总线报告
生成反标延时和检查报告(AnnotatedDelayandCheckReports)
生成模式分析报告(ModeAnalysisReports)
生成库的报告
生成延时计算报告
以路径(Paths)来生成定制报告
禁止和恢复时钟门锁、去除检查时钟门锁
以弧(Arcs)来生成定制报告
五、高级分析
用PrimeTime可以进行各种类型的高级分析。
内容有:
单运作条件分析(SingleOperatingConditionAnalysis)
最小和最大分析
用片上变量(On-ChipVariation)分析设计
分析模式摘要
情形分析(CaseAnalysis)
模式分析(ModeAnalysis)
检测失败路径
层次敏感的、基于锁存器的设计
分析异步逻辑的设计
分析三态总线的设计
六、读写SDF
对于起初的静态时序分析,估计网络的延时信息是基于一个连线负载模式。
实际上延时是与设计中单元和网络的布局布线有关的。
一个布局器或一个布线器提供更详细和更精确的延时信息,可以用来提供给PrimeTime作更精确的分析。
这个过程被称作反标(back-annotation)。
反标信息经常是以标准延时格式StandardDelayFormat(SDF)提供的。
包括以下信息:
读入一个SDF文件
报告延时反标信息
用SDF标注条件延时(ConditionalDelays)
写一个SDF文件
用PrimeTime写SDF
去除标注延时和检查
用命令行设置标注
生成布局和布线的时序约束
为整个设计提供约束覆盖
可以用以下一些方法来读取SDF的反标延时信息:
从一个SDF文件里读取延时和时序检查
用命令行、而不用SDF标注延时、时序检查和翻转时间
七、反标寄生信息
PrimeTime为延时计算提供了增强的精确度。
PrimeTime为集中参数电容、集中参数电阻、精简pi模型和详细RC网络提
供了寄生反标信息。
有以下一些内容:
寄生标注支持的文件格式
标注集中寄生效应
标准精简寄生效应和详细寄生效应
精简pi模型和详细RC网络比集中参数电容和电阻精确得多,但是需要建立环境变量并且会占用更多的CPU时间和内存。
为了节约CPU时间推荐使用一个SDF文件,因为PrimeTime不必去计算延时。
八、编辑网表
PrimeTime为编辑网表提供了命令。
编辑网表是为了在不违背逻辑综合的前
提下满足时序要求。
九、相关特性鉴定(ContextCharacterization)
相关特性鉴定是从一个子设计的环境和它的上级设计来提取它的时序特性。
鉴定相关特性有两个主要应用:
作为DC的脚本:
鉴定所得的相关特性在DC综合或逻辑优化时设置时序约束。
在PrimeTime内部:
在研究芯片层次的时序约束时鉴定得到的相关特性可以用来作层次化的时序分析。
一十、生成快速时序模型
快速时序模型是临时的时序模型,可以用来快速描述时序信息而不需要用标
志建模语言(Stampmodelinglanguage)来写一个模型。
在设计周期早期用快速时序模型来大致描述没有定义的模块的初始时序。
快速时序模型最终要被标志模型(Stampmodels)或门级网表代替,因为它们含有更精确的时序信息。
四、PrimeTime使用
开始
先建立目录并将PrimeTime本身所带的一个例子拷到新建的目录下,在下面的内容中将要用到这个例子。
mkdirprimetime
cdprimetime
cp–r$SYNOPSYS/doc/pt/tutorial.
cdtutorial
确认目录中有以下这些文件:
AM2910.dbThedesign.dbforthetop-levelofthedesign
CONTROL.dbThedesign.dbfortheCONTROLblock
REGCNT.dbThedesign.dbfortheREGCNTblock
UPC.dbThedesign.dbfortheUPCblock
Y.dataTheStampdatafilefortheYblock
Y.modTheStampmodelfilefortheYblock
Y_lib.dbThelibrary.dbfortheYblock
STACK_lib.dbThelibrary.dbfortheSTACKblock
pt_lib.dbThetechnologylibrary.db
stack.qtm.ptThequicktimingmodelscriptforthestackblock
optimize.dcshThedc_shelloptimizationscript
timing.dcshAnexampleDCshelltimingscriptfortranslation
tutorial.ptThecompletePrimeTimetutorialscriptforyour
reference.
例子是一个AM2910微处理器,如图所示模块图。
运行PrimeTime:
pt_shell
定义搜索路径和链接路径:
pt_shell>setsearch_path“.”
Pt_shell>setlink_path“*pt_lib.dbSTACK_lib.dbY_lib.db”
*pt_lib.dbSTACK_lib.dbY_lib.db
读入设计:
PrimeTime支持以下设计格式:
.Synopsysdatabasefiles(.db)(Usetheread_dbcommand)
.Verilognetlistfiles(Usetheread_verilogcommand)
.ElectronicDesignInterchangeFormat(EDIF)netlistfiles(Usetheread_edifcommand.)
.VHDLnetlistfiles(Usetheread_vhdlcommand.)
读入AM2910的顶层设计文件:
pt_shell>read_dbAM2910.db
Loadingdbfile'/u/joe/primetime/tutorial/AM2910.db'
1
链接设计:
pt_shell>link_designAM2910
Loadingdbfile'/u/joe/primetime/tutorial/pt_lib.db'
Loadingdbfile'/u/joe/primetime/tutorial/STACK_lib.db'
Loadingdbfile'/u/joe/primetime/tutorial/Y_lib.db'
LinkingdesignAM2010...
Loadingdbfile'/u/joe/primetime/tutorial/STACK.db'
...
DesignsusedtolinkAM2910:
CONTROL,REGCNT,STACK,UPC,Y
LibrariesusedtolinkAM2910:
STACK_lib,Y_lib,pt_lib
Design'AM2910'wassuccessfullylinked
1
显示当前已载入的设计:
pt_shell>list_designs
得到当前载入单元的信息:
pt_shell>report_cell
编译一个标记模型(StampModel):
标记模型是一个诸如像DSP或RAMS那样复杂模块的静态时序模型。
标记模型与.lib模型共存,而不能代替它们。
-建立标记模型是用在晶体管层次的设计上,在这个层次上没有门级网表。
-标记模型语言是一种源代码语言,被编译成Synopsys的.db文件格式,可以被PrimeTime或DesignCompiler使用。
-标记模型包含引脚到引脚的时序弧、建立和保持时间数据、模式信息、引脚的电容和驱动能力等等。
标记模型还能保存属性(面积等等)。
-三态输出、锁存器和内部生成的时钟都可以被建模。
一个标记模型包括两种源代码文件格式:
-.mod文件
仅包含引脚到引脚的弧的描述(没有延时数据)。
-.data文件
包含.mod文件中每条弧的延时数据。
标记模型可以有多个.data文件来描述不同运作条件下的时序。
两种文件格式都需要编译成一个.db模型。
编译AM2910中Y模块的标记模型(标记源代码文件是Y.mod和Y.data):
pt_shell>compile_stamp_model-model_fileY.mod\
-data_fileY.data-outputY
Wrotemodellibrarycoreto‘./Y_lib.db’
Wrotemodelto‘./Y.db’
PrimeTime生成两个.db文件:
Y_lib.db:
一个库文件,包含一个单元(cell)。
这个单元叫做核(core)。
Y.db:
一个设计文件,引用Y_lib.db中的单元核。
编译一个快速时序模型(QuickTimingModel):
可以为设计中还没有完成的模块建立一个快速时序模型,以使得完整的时序分析能够进行。
通常的情形是:
-模块的HDL代码还没有完成时
-为了划分设计,在评估阶段为实际设计进行时序预测、约束估计时
-模块的标记模型还没有完成时
一个快速时序模型是一组PrimeTime命令,而不是一种语言。
为了方便和文档化可以将它们写在一个脚本文件中,然后保存为.db的格式。
在PrimeTime和DesignCompile中快速时序模型很有用处。
还可以将快速时序模型保存为标记模型,这是开始一个复杂标记模型的一种便利的方法。
例子中STACK模块的快速时序模型脚本文件是stack.qtm.pt,建立这个模型:
pt_shell>source-echostack.qtm.pt
...
pt_shell>report_qtm_model;
...
pt_shell>save_qtm_model-outputSTACK-formatdb
Wrotemodellibrarycoreto'./STACK_lib.db'
Wrotemodelto'./STACK.db'
1
进行时序分析
配置运作环境
读入并链接AM2910设计:
pt_shell>setsearch_path"."
pt_shell>setlink_path"*pt_lib.dbSTACK_lib.dbY_lib.db"
pt_shell>read_dbAM2910.db
pt_shell>link_designAM2910
链接了AM2910会导致其它已经链接的设计变为不链接的状态。
在内存里只允许有一个链接的设计。
当一个设计不链接,所有时序信息将被去除,并会出现警告,这和DesignCompiler不同。
如果需要保存所标注的信息,可以在链接一个新的设计之前用write_script命令。
如果以后重新链接这个设计,只要运行这个脚本就可以了。
建立运作条件和连线负载模型:
PrimeTime在生成建立时序报告(setuptimingreports)时使用最大(Maximum)运作条件和连线负载模型;在生成保持时序报告(holdtimingreports)时使用最小(Minimum)运作条件和连线负载模型。
pt_shell>set_operating_conditions-librarypt_lib-minBCCOM-maxWCCOM
pt_shell>set_wire_load_modetop
pt_shell>set_wire_load_model-librarypt_lib-na