第二章:PrimeTime环境搭建

说实话,很多刚入行的朋友觉得STA就是跑个脚本、看个报告。但我要说,环境没搭好,后面全是坑。我自己就吃过这个亏——第一次装PrimeTime时,License配置搞错了,折腾了两天才发现是环境变量少写了个斜杠。嗯,咱们今天就把这事彻底说清楚。

2.1 PrimeTime工具安装

PrimeTime的安装包,通常从Synopsys官网或者公司内部服务器获取。我个人习惯把安装包放在/tools或者/opt目录下,别放桌面,也别放home目录,免得权限出问题。

安装步骤其实不复杂,核心就三步:

  1. 解压安装包tar -xvf PrimeTime_*.tar
  2. 运行安装脚本./installer,按提示走就行
  3. 设置安装目录:我一般用/tools/synopsys/pt/,版本号单独建文件夹,方便管理

小技巧:安装时记得选“Full Installation”,别省那点空间。缺了某个库文件,后面跑不起来更头疼。

安装完成后,检查一下bin目录下有没有pt_shellprime_time这两个可执行文件。没有的话,八成是安装路径选错了。

2.2 License配置

License配置,这是最容易出问题的地方。我曾经见过一个团队,所有人都在报“License check failed”,最后发现是LM_LICENSE_FILE变量里多了个空格。

配置License分两步:

  1. 设置环境变量:在.bashrc.cshrc里加上:
# 对于bash用户
export LM_LICENSE_FILE=27000@license_server:5280@license_server2
export SNPSLMD_LICENSE_FILE=27000@license_server

# 对于csh/tcsh用户
setenv LM_LICENSE_FILE 27000@license_server:5280@license_server2
setenv SNPSLMD_LICENSE_FILE 27000@license_server
  1. 启动License服务:在License服务器上运行:
lmgrd -c /path/to/license.dat -l /var/log/lmgrd.log

注意:License文件里的SERVER行,主机名必须和hostname输出一致。大小写也要对,Linux是区分大小写的。

验证License是否生效,用这个命令:

lmstat -a -c 27000@license_server

看到“License server status: UP”就对了。如果显示“Cannot connect to license server”,先ping一下服务器,再检查防火墙。

2.3 启动与退出

PrimeTime有两种启动方式:

  • 图形界面prime_time &,适合看波形、调时序
  • 命令行模式pt_shell,适合跑脚本、批量处理

我个人更常用pt_shell,毕竟后端工程师嘛,脚本才是真爱。启动后你会看到:

PrimeTime (TM)
Version P-2019.03-SP2
Copyright (c) 2019 Synopsys, Inc.
pt_shell>

退出也很简单:

pt_shell> exit

或者直接Ctrl+D。嗯,就这么简单。

避坑指南:我曾经在服务器上开了十几个pt_shell窗口,结果内存爆了。建议用top命令看看资源占用,别贪多。

2.4 基本命令行操作

进了pt_shell,你得知道几个基本命令。我列个表,方便你对照:

命令 功能 示例
help 查看帮助 help report_timing
source 执行Tcl脚本 source run.tcl
read_verilog 读入网表 read_verilog top.v
read_sdc 读入约束 read_sdc top.sdc
report_timing 查看时序报告 report_timing -max_paths 10
list_libs 列出库文件 list_libs

举个例子,你刚启动pt_shell,想看看当前工作目录:

pt_shell> pwd
/pt/project/design
pt_shell> ls
top.v  top.sdc  run.tcl

注意,lspwd这些Unix命令在pt_shell里也能用,但有些命令会被重载。比如echo,在Tcl里是打印变量,在Unix里是输出字符串。我建议你多用Tcl原生命令,避免混淆。

经验之谈:写脚本时,source命令比include更灵活。我习惯把所有设置写在一个setup.tcl里,然后source setup.tcl,干净利落。

还有一个常用操作——查看变量:

pt_shell> set target_library "typical.db"
pt_shell> echo $target_library
typical.db

变量名用$引用,这是Tcl的规矩。如果你忘了加$,PrimeTime会把它当成字符串,不会报错,但结果肯定不对。我刚开始学Tcl时就犯过这错,查了半天才发现。

2.5 环境验证

环境搭好了,怎么知道对不对?跑个最简单的时序分析试试:

pt_shell> read_verilog counter.v
pt_shell> link
pt_shell> read_sdc counter.sdc
pt_shell> report_timing

如果能看到时序路径和slack值,说明环境没问题。如果报错,先看error信息,八成是库文件路径不对或者License没配好。

核心要点:环境搭建是STA的基础,别嫌麻烦。我见过太多人花一周调时序,最后发现是License过期了。嗯,检查环境,永远是最先做的事。

好了,这一章就到这里。下一章咱们聊聊时序库,那才是STA的真正核心。