第二章: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 两个文件。打开看看,里面就是时序分析的结果。
2.4 知识体系总览
下面这张图,是我自己总结的PrimeTime入门知识体系。你照着这个思路学,不会乱。
2.5 避坑指南——我踩过的那些坑
最后,分享几个我当年踩过的坑,你注意避开。
- 库文件版本不匹配:我曾经把0.18um的库用在0.13um的设计上,结果时序全乱套。记住,库文件必须和工艺节点匹配。
- 忘记设置时钟:有一次我跑完STA,发现所有路径都是unspecified。查了半天,原来是SDC里忘了写
create_clock。没有时钟,工具怎么分析? - 路径类型搞混:
-delay_type max是检查setup,-delay_type min是检查hold。我刚开始经常搞反,结果报告里全是违例,吓出一身冷汗。 - 报告路径数太少:默认只显示一条最差路径。我建议至少设
-nworst 10,这样才能看到全局情况。
好了,环境搭建和基本命令就这些。你照着做,肯定能跑通。记住,工具是死的,人是活的。多练几次,自然就熟了。
可可精品资料库