PrimeTime(PT)是Synopsys的签收品质(sign-off quality)的静态时序分析工具。静态时序分析(STA)无疑是设计流程中最重要的一步,它决定了设计是否在所要求的速度下工作,PT分析设计中的时序延迟并标注出必须改正的违例。
1 前言
PT是一个不在DC工具套件中集成的单独的工具,它是一个和DC并行工作的单独的工具。PT与DC有一致的命令,它们生成类似的报告,并支持共同的文件格式。此外PT也能生成DC用于综合和优化的时序断言,PT的命令行界面是基于称为Tcl为工业标准语言。与DC的内部STA引擎相比,PT更快,占用的内存更少,并且还有其他的一些特色。
PrimeTime环境
一经调用,PT就寻找名为“.synopsys_pt.setup”的文件并默认包括它。这个文件包含了定义PT使用的设计环境的必要设置变量,示例如下:
变量serach_path定义了一个列表,它包含了当查找库和设计时需要查看的目录;变量link_path定义了一个库列表,它包含用于连接设计的单元。
2 Tcl简介
Tcl提供了大部分的基本程序结构——变量、运算符、表达式、控制流、循环和过程等。另外,Tcl也支持大多数的UNIX命令,是PT中的脚本语言。本节简要介绍Tcl的一些基础语法。
使用set命令定义变量并给它们赋值,例如:
set clock_name clk
set_clock_preiod 20
值可以是数字或字符串——Tcl不区分数值型变量和字符串型变量。在算数场合,它自动使用数字值。上例中,社变量clock_name为字符串clk,设变量clock_period为数值20。通过在变量名前加$来引用变量。如果在变量名前没有加$,那么Tcl将其视为字符串。
create_clock $clock_name -period 20 -waveform [0 10]
通过expr命令进行算数运算。这个有用的技术提供了贯穿于整个脚本的全局参数化的方法。
expr $clock_period / 5
上述命令返回值为4。
2.1 命令置换
命令返回的值可用于其他命令。命令的嵌套可用方括号“[”和"]"完成。当一个命令装入方括号内,它首先求值,然后它的值取代命令的位置。例如:
set clock_period 20
set inp_del [expr $clock_period / 5]
2.2 列表
列表表示一个对象的集合——这些对象可以是字符串或是列表。用大括号包括一组项目的最基本形式形成一个列表。
set clk_list {clk1 clk2 clk3}
创建列表的另一个方法是用list命令,它的典型应用是在命令置换中。例如,下面的list命令创建同前面set命令同样的列表:
list clk1 clk2 clk3
list命令适于在命令置换中使用,因为它的返回值是一个列表。
2.3 流控制和循环
如同其他的脚本和程序语言,Tcl为流控制提供了if和switch命令,也为循环提供了for和while循环。
3 PrimeTime命令
3.1 设计输入
PT不像DC能用HDL Compiler读取RTL源文件,它是静态分析引擎,只能读取映射后的设计。其中,PT的输入可以使db、Verilog、VHDL或EDIF格式的文件。
3.2 时钟规范
时钟规范背后的概念与DC所描述的是一样的,由于两者格式的差异,因此存在细微的语法差异。
3.2.1 创建时钟
pt_shell > create_clock -period 20 -waveform {0 10} [list CLK]
3.2.2 时钟延迟和时钟转换
pt_shell > set_clock_latency 2.5 [get_clocks CLK]
pt_shell > set_clock_transition 0.2 [get_clocks CLK]
3.2.3 传播时钟
在设计中插入时钟树之后布图工具通常接着要进行传播时钟,网表被带回PT进行STA。时钟通过网表中的整个时钟树网络传播以确定时钟延迟。换言之,对通过时钟树中每个单元的延迟和单元间的互连线延迟都要加以考虑。
pt_shell > set_propagated_clock [get_clocks CLK]
3.2.4 指定时钟扭曲
时钟扭曲(skew)是在触发器时钟引脚处时钟到达时间的差异。在同步设计中,数据在一个时钟边沿由触发器开始发送,在另一个时钟边沿(通常为下一时钟沿)由另一触发器接收。如果两个时钟沿(发送或接收)源自同一个时钟,那么理想的两个边沿间应有准确的一个时钟的延迟。时钟扭曲妨碍了这种理想情况。由于布线延迟的差异(或门控时钟情形),接收时钟沿可早到或迟到。早到可能导致建立时间违例,而迟到则可能导致保持时间违例。因此,在布图前阶段必须制定时钟扭曲以生成鲁棒的设计。
通过下面的命令指定时钟扭曲:
使用-from和-to选项也能指定始终扭曲,这对包括多个时钟域的设计有用,例如:
pt_shell > set_clock_uncertainty 0.5 -from [get_clocks CLK1] -to [get_clocks CLK2]
3.2.5 指定生成的时钟
这是一个DC所不具备的重要特色。设计经常包括内部时钟产生的时钟。PT允许用户通过create_generated_clock命令定义生成时钟与源时钟间的关系。
在布图后时序分析中,插入了时钟树并通过时钟树缓冲器传播时钟信号来计算时钟延迟。用户选择定义独立于时钟源的分频时钟(通过在分频逻辑子模块的输出引脚上定义时钟)。然而,这个方法迫使设计人员从时钟源到分频逻辑模块的时钟延迟手动添加从分频模块到设计的其余部分的时钟树延迟。
通过下述命令建立分频时钟,则这两个时钟在布图前和布图后阶段都保持同步。
上例在属于blockA的DFF1X单元的引脚Q处创建一个生成时钟。生成时钟名为DIV2CLK,其频率为时钟源CLK频率的一半。
3.2.6 门控时钟检查
对低功耗应用,设计人员经常在设计中采用门控时钟。这个技术允许设计人员仅当需要时才使能时钟。如果(对门控逻辑)不满足建立和保持时间的要求,门控逻辑可产生毛刺。PT允许设计人员对门控逻辑指定建立/保持要求,如下所示:
上例表明PT CLK时钟网络中所有门的建立时间和保持时间要求分别是0.5ns和0.01ns。
单个单元的门控检查可通过在对象列表中指定单元名来取得,例如:
pt_shell > set_clock_gating_check -setup 0.05 -hold 0.1 [get_lib_cell stdcell_lib/BUFF4X]