第二章:STA工具入门——PrimeTime环境搭建与基本命令

说实话,刚入行那会儿,我对PrimeTime是有点发怵的。命令行界面,一堆参数,看着就头大。但后来我发现,只要把环境搭顺了,把几个核心命令玩熟,这工具其实挺可爱的。今天我就带你走一遍,从零开始搭环境、跑命令。

2.1 环境搭建——别小看这一步

我见过太多新手,上来就敲命令,结果报错一堆。其实80%的问题都出在环境没配好。你想想看,工具找不到库文件,它怎么干活?

2.1.1 设置环境变量

我个人习惯把环境变量写在 .bashrc 或 .cshrc 里。这样每次开终端,自动加载,省心。

# 设置PrimeTime安装路径
setenv PT_HOME /tools/synopsys/prime_time/T-2022.03
# 设置库文件路径
setenv TARGET_LIBRARY /home/design/libs/slow.lib
setenv LINK_LIBRARY  /home/design/libs/slow.lib
setenv SYMBOL_LIBRARY /home/design/libs/symbols.sdb
# 把可执行文件加到PATH里
setenv PATH ${PT_HOME}/bin:${PATH}

这里有个坑,我踩过。 LINK_LIBRARY 和 TARGET_LIBRARY 的区别,很多人搞混。简单说:TARGET_LIBRARY 是综合用的,LINK_LIBRARY 是STA分析用的。你可以在STA里只设 LINK_LIBRARY,但 TARGET_LIBRARY 最好也设上,以防万一。

注意: 库文件路径千万别写错。我曾经因为一个斜杠没加,折腾了半小时。建议用路径,别偷懒用相对路径。

2.1.2 启动PrimeTime

环境配好了,启动就简单了。终端里敲:

pt_shell

或者你想用图形界面:

pt_shell -gui

我个人更喜欢命令行模式,跑脚本方便。但刚开始学,用GUI看看波形、查查路径,也挺直观的。

2.2 基本命令——先记住这几个

PrimeTime的命令很多,但常用的就那么十几个。你先把这些记熟,后面再慢慢扩展。

2.2.1 读入设计

第一步,把设计读进来。支持多种格式:

# 读入Verilog网表
read_verilog /home/design/netlist/top.v

# 读入VHDL网表
read_vhdl /home/design/netlist/top.vhd

# 读入DB格式(Synopsys内部格式,速度最快)
read_db /home/design/netlist/top.db

我建议用 read_db,速度快,而且能保留更多信息。但前提是你得有DB文件。

2.2.2 链接设计与库

设计读进来了,得把它和库文件链接起来。这一步相当于告诉工具:你的标准单元、IO Pad、宏单元都在哪。

link_design

如果链接成功,你会看到类似这样的信息:

Information: Linking design 'top'...
Information: Design 'top' linked successfully.

如果报错,别慌。八成是库文件没找到,或者设计里引用了某个模块但没读进来。检查一下 LINK_LIBRARY 路径对不对。

2.2.3 读入约束

设计链接好了,接下来读时序约束。SDC文件是标准格式:

read_sdc /home/design/constraints/top.sdc

这里有个小技巧。我习惯在读SDC之前,先执行:

check_timing

这个命令会检查设计里有没有未约束的路径。如果有,它会列出来。你可以在读SDC之前先跑一遍,看看哪些路径没被覆盖到。

2.2.4 运行STA分析

约束读完了,就可以跑了。最核心的命令就两个:

# 更新时序信息
update_timing

# 生成报告
report_timing -nworst 10 -path_type full_clock -delay_type max > timing.rpt

update_timing 是必须的,它告诉工具重新计算所有路径的时序。 report_timing 则是把结果打出来。参数说明:

  • -nworst 10:显示最差的10条路径
  • -path_type full_clock:显示完整的时钟路径
  • -delay_type max:分析最大延迟(setup检查)

如果你想检查hold,把 -delay_type 改成 min 就行。

2.3 实战小例子——跑通一个完整流程

光说不练假把式。我给你一个完整的脚本,你照着跑一遍,就能看到结果了。

# 设置库文件
set link_library {/home/design/libs/slow.lib /home/design/libs/fast.lib}
set target_library {/home/design/libs/slow.lib}

# 读入设计
read_verilog /home/design/netlist/top.v

# 链接
link_design

# 读入约束
read_sdc /home/design/constraints/top.sdc

# 检查约束
check_timing

# 更新时序
update_timing

# 生成报告
report_timing -nworst 5 -path_type full_clock -delay_type max > setup.rpt
report_timing -nworst 5 -path_type full_clock -delay_type min > hold.rpt

# 退出
exit

把这个脚本保存成 run_sta.tcl,然后执行:

pt_shell -f run_sta.tcl

跑完之后,你会看到 setup.rpt 和 hold.rpt 两个文件。打开看看,里面就是时序分析的结果。

小提示: 第一次跑,别指望一次成功。我当年第一次跑PrimeTime,报错信息看了半天才明白是库文件路径写错了。耐心点,多试几次就熟了。

2.4 知识体系总览

下面这张图,是我自己总结的PrimeTime入门知识体系。你照着这个思路学,不会乱。

PrimeTime入门知识体系 环境搭建 读入设计 链接库文件 读入约束(SDC) 时序检查 报告生成 核心命令:update_timing / report_timing setup.rpt hold.rpt

2.5 避坑指南——我踩过的那些坑

最后,分享几个我当年踩过的坑,你注意避开。

  • 库文件版本不匹配:我曾经把0.18um的库用在0.13um的设计上,结果时序全乱套。记住,库文件必须和工艺节点匹配。
  • 忘记设置时钟:有一次我跑完STA,发现所有路径都是unspecified。查了半天,原来是SDC里忘了写 create_clock。没有时钟,工具怎么分析?
  • 路径类型搞混:-delay_type max 是检查setup,-delay_type min 是检查hold。我刚开始经常搞反,结果报告里全是违例,吓出一身冷汗。
  • 报告路径数太少:默认只显示一条最差路径。我建议至少设 -nworst 10,这样才能看到全局情况。

好了,环境搭建和基本命令就这些。你照着做,肯定能跑通。记住,工具是死的,人是活的。多练几次,自然就熟了。

可可精品资料库