开始
先建立目录并将PrimeTime本身所带的一个例子拷到新建的目录下,在下面的内容中将要用到这个例子。
mkdir primetime
cd primetime
cp –r $SYNOPSYS/doc/pt/tutorial .
cd tutorial
运行PrimeTime:pt_shell后面的命令都是在这个shell之下运行的1. 编译时序模型 (这1节中的操作并非对所有的设计都是必需的)1.1编译 Stamp ModelStamp model 是针对于复杂模块--例如 DSP核心或者RAM--而建立的静态时序模型。它一般是为晶体管级的设计而创建的,在设计中没有门级的网表。
一个 Stamp model 包括两个源文件:1).mod 文件,包含对 pin-to-pin 的 arc的描述(不包括延时)。2).data 文件,包括.mod 文件中描述的每一个 arc的延迟数据。例如,对于 AM2910 设计中的 Y 模块(见图 2-2),编译其Stamp model:
compile_stamp_model -model_file Y.mod -data_file Y.data-output Y
其中 Y.mod 和 Y.data 是源文件,编译后生成了两个.db文件:Y_lib.db 和 Y.db。其中 Y_lib.db 是一个库文件,其中包括一个被称为 core的单元;而 Y.db 是一个设计文件,是 Y_lib.db 中的单元 core的例化。正是由于它们之间的这种关系,为了在链接时能够正确地例化 Y.db,库 Y_lib.db必须要加入到链接路径(link_path)中去。
1.2编译快速时序模型对于设计中的某些未完工的模块--比如说,该模块的HDL,或者完整的stamp model没有完成--你可以创建一个快速时序模型来进行分析。快速时序模型是一个临时性的模型,可以提供进行时序分析而需要的时序信息。实际上,快速时序模型是包含一系列 pt_shell命令的文件,而不是语言。这样比使用 Stamp mo-del 的语言去写一个模型花费的时间更少。例如为 AM2910 中的 STACK模块创建一个快速时序模型:source -echostack.qtm.ptreport_qtm_model;save_qtm_model -output STACK -formatdb其中 stack.qtm.pt是一个脚文件,描述了建立快速时序模型所需要的所有pt_shell 命令,所以在这里直接 source就可以了。它的具体内容参见附录[1]。创建好之后,用 save_qtm_model 命令把该模型保存为.db格式的文件。同其他类型的模型一样,PrimeTime 也创建了两个.db文件,STACK_lib.db 和 STACK.db。
进入正题:作一些基本的环境设置和准备工作设置查找路径:set search_path "." 这里“.”代表当前目录设置链接路径:set link_path "* pt_lib.dbSTACK_lib.db Y_lib.db"读入设计文件:read_db AM2910.db (还支持read_verilogread_edif read_vhdl 等)链接顶层设计:link_design AM2910(显示当前已载入的设计: pt_shell>list_designs得到当前载入单元的信息: pt_shell>report_cell)设置操作条件和线上负载/端口驱动负载等set_operating_conditions -library pt_lib -min BCCOM -maxWCCOM
set_wire_load_mode topset_wire_load_model -library pt_lib -name 05x05 -minset_wire_load_model -library pt_lib -name 20x20 -max
set_driving_cell -lib_cell IV-library pt_lib [all_inputs]set_capacitance 0.5 [all_outputs] 对所有的输出端设置50pf的电容负载。对有关时钟的参数进行设置create_clock -period 30 [get_portsCLOCK]set clock [get_clock CLOCK]set_clock_uncertainty 0.5$clockset_clock_latency -min 3.5$clockset_clock_latency -max 5.5$clockset_clock_transition -min 0.25$clockset_clock_transition -max 0.3$clock
当然也可以这样设置:create_clock-period 30 -waveform [0 15] clkset_clock_uncertainty0.5[get_clocksclk]set_clock_latency -min 3.5[get_clocksclk]set_clock_latency -max 5.5[get_clocksclk]set_clock_transition -min0.25[get_clocksclk]set_clock_transition -max0.3[get_clocksclk]
设置时钟-门校验(clock-gating checks)设定时钟-门的建立和保持时间的数值,以及最小的脉冲宽度。set_clock_gating_check -setup 0.5 -hold0.1 $clockset_min_pulse_width 2.0$clock
在开始静态时序分析之前,注意要执行下面的指令进行检查:check_timing该命令会检查该设计的结构和约束,给出可能存在的时序问题,如果存在问题的话则给出 errors 或者 warnings。
设置端口延迟并检验时序对于所有与时钟相关的端口,都要设置输入、输出的延迟。set_input_delay 0.0[all_inputs] -clock $clockset_output_delay 2.0[get_port INTERRUPT_DRIVER_ENABLE] -clock$clockset_output_delay 1.25[get_port MAPPING_ROM_ENABLE] -clock $clockset_output_delay 0.5[get_port OVERFLOW] -clock $clockset_output_delay 1.0[get_port PIPELINE_ENABLE] -clock $clockset_output_delay 1.0[get_port Y_OUTPUT] -clock $clock
或者最简单的:(相当于时序约束)set_input_delay 15.0-clock clk[all_inputs]set_output_delay 15.0-clock clk[all_inputs]
保存以上的设置使用 write_script命令将所作的设置保存到一个脚文件中,这样在下一次运行的时候可以直接通过该文件来完成所有的设置。该命令可以生成三种格式的文件:write_script -format dctc1 -outputAM2910.tc1write_script -format dcsh -outputAM2910.dcshwrite_script -format ptsh -outputAM2910.pt
运行基本的分析:得到约束报告report_constraint如果在命令中加入-verbose 参数,将在 report中得到更详细的细节。如果加入-all_violators 参数,在 report中会列出对于每一项约束,设计中违反最严重的端点。report_constraint-all_violators
得到基于路径的时序分析report_timing在没有任何命令参数时,在 report 中列出的是对于每个 pathgroup,该设计中最长的最大路径。如果需要的是该设计中最短的最小路径的话,可以在命令中加上-delay min 参数。或者加一些参数report_timing-to [all_outputs]当然在分析前也可以添加时序例外后,再进行约束报告和时序分析。
注意: 读写SDF
对于起初的静态时序分析,估计网络的延时信息是基于一个连线负载模式。 实际上延时是与设计中单元和网络的布局布线有关的。
一个布局器或一个布线器提供更详细和更精确的延时信息,可以用来提供给PrimeTime作更精确的分析。这个过程被称作反标(back-annotation)。反标信息经常是以标准延时格式StandardDelay Format(SDF)提供的。
所以, 在布局布线后,现在的网表中已经包括了实际的时钟数信息。所以上面关于
对有关时钟的参数进行设置
create_clock-period 30 -waveform [0 15] clkset_clock_uncertainty0.5[get_clocksclk]set_clock_latency -min 3.5[get_clocksclk]set_clock_latency -max 5.5[get_clocksclk]set_clock_transition -min0.25[get_clocksclk]set_clock_transition -max0.3[get_clocksclk]这一段,,在布局布线后可以直接改为create_clock -period 30 -waveform [0 15]clkset_propagated_clock [get_clocksclk]
set_propagated_clock命令可以根据时钟数,自动计算时钟信号到达终点的延时和偏移。