3. Cadence Tempus工具入门
Cadence Tempus 是业界领先的时序签核(Timing Signoff)工具,专注于先进工艺节点(如 7nm、5nm 及以下)下的静态时序分析(STA)与时序收敛。与传统的 PrimeTime 流程不同,Tempus 采用统一的时序引擎和增量分析架构,能够在多模式多角(MMMC)场景下提供更高的精度和更快的运行速度。本章作为工具入门的第一课,将系统讲解 Tempus 的安装与许可配置、图形界面与命令行交互方式、核心分析流程以及设计数据库的导入方法,帮助学员建立起对工具使用的整体框架。
上图展示了 Tempus 工具从输入到输出的完整链路。在实际工程中,我们首先需要准备门级网表、SDC 约束和工艺库文件,然后通过 MMMC 视图将不同工艺角(PVT)、RC 寄生参数和约束模式组合成统一的分析视图。接下来,工具会根据用户选择的启动方式(GUI 或批处理)加载设计,并执行时序分析。最终输出的时序报告和违例路径将指导后续的 ECO 或物理实现迭代。
3.1 安装与许可配置
3.1.1 核心原理:安装路径与环境变量
Tempus 的安装通常遵循 Cadence 统一的安装框架。安装完成后,需要设置 PATH 环境变量以指向 bin 目录,并配置 CDS_LIC_FILE 或 LM_LICENSE_FILE 指向许可证服务器。对于大型设计团队,推荐使用浮动许可证(Float License)以节省成本;对于个人学习或小项目,可使用节点锁定许可证(Node-locked License)。
PATH:添加$INSTALL_DIR/tools/bin和$INSTALL_DIR/tools/dfII/bin。CDS_LIC_FILE:格式为port@license_server_host或license_file_path。CDS_INST_DIR:指向 Tempus 安装根目录,便于脚本引用。LD_LIBRARY_PATH(Linux):若遇到动态库加载问题,需包含$INSTALL_DIR/tools/lib/64bit。
3.1.2 操作流程:许可证验证与常见问题
- 验证许可证:在 shell 中执行
licensecheck -product Tempus,确认功能(Feature)是否可用。 - 启动测试:运行
tempus -version检查版本号,确保安装正确。 - 常见错误排查:若提示
Cannot connect to license server,检查网络连通性、端口号(默认 5280)以及lmgrd进程是否在服务器上运行。
3.1.3 案例拆解:多版本共存配置
某芯片公司同时使用 Tempus 21.1 和 22.1 两个版本以兼容不同工艺库。工程师通过模块化环境脚本实现快速切换:
# setup_tempus_211.sh
export CDS_INST_DIR=/tools/cadence/tempus/21.1
export PATH=$CDS_INST_DIR/tools/bin:$PATH
export CDS_LIC_FILE=5280@lic01:5280@lic02
alias tempus211='tempus -gui'
通过 source 不同脚本,团队可以在同一台服务器上并行使用两个版本,而不会相互干扰。复盘经验:务必在脚本中显式设置 CDS_INST_DIR,避免使用系统默认路径导致版本错乱。
3.1.4 常见误区与总结
- 误区一:认为安装后无需配置
LD_LIBRARY_PATH。实际上,缺少 64 位库路径会导致启动时崩溃。 - 误区二:忽略
ulimit设置。对于大规模设计,建议设置ulimit -s unlimited和ulimit -v unlimited,防止栈溢出或虚拟内存不足。 - 总结:安装配置的核心是环境变量和许可证,建议将配置写入
.bashrc或模块文件,确保可重复性和团队一致性。
3.2 界面介绍:GUI 与命令行双模式
3.2.1 核心原理:GUI 的层次化布局
Tempus GUI 基于 Cadence 通用界面框架,主要包含菜单栏、工具栏、设计浏览器(Design Browser)、原理图窗口(Schematic)、文本编辑器(Text Editor)以及日志窗口(Log)。设计浏览器以树形结构展示时钟、单元、端口、网络等对象,方便快速定位。原理图窗口支持高亮时序路径,显示单元延迟和转换时间。
3.2.2 操作流程:GUI 常用操作
- 加载设计:通过
File > Import Design或直接输入read_verilog命令。 - 查看时序报告:在菜单栏选择
Timing > Report Timing,设置路径起点和终点。 - 高亮路径:在报告窗口中右键点击违例路径,选择
Highlight in Schematic。
3.2.3 案例拆解:GUI 与 TCL 混合调试
在分析时钟偏移(Clock Skew)问题时,工程师在 GUI 中高亮时钟树路径,同时打开 TCL 命令窗口输入 report_clock_timing -type skew 获取精确数值。通过 GUI 可视化定位到某个 buffer 延迟异常,再使用 get_cell 命令检查其负载电容。这种混合模式比纯命令行更直观,比纯 GUI 更高效。
3.2.4 常见误区与总结
- 误区:初学者过度依赖 GUI,忽略 TCL 命令的批处理能力。实际上,签核流程必须使用脚本以保证可重复性。
- 总结:GUI 适合探索性分析和调试,命令行适合批量处理和自动化。建议日常操作以 TCL 为主,GUI 为辅。
3.3 主要命令与流程
3.3.1 核心原理:Tempus 命令体系
Tempus 命令基于 TCL 扩展,分为设计导入、约束管理、时序分析、报告输出四大类。核心命令包括 read_verilog、read_sdc、create_rc_corner、create_delay_corner、create_constraint_mode、create_analysis_view、update_timing、report_timing 等。理解命令之间的依赖关系是掌握流程的关键。
| 命令类别 | 典型命令 | 功能说明 |
|---|---|---|
| 设计导入 | read_verilog / read_liberty | 读入门级网表与工艺库 |
| 约束管理 | read_sdc / read_sdf | 加载时序约束与延迟注释 |
| MMMC 配置 | create_rc_corner / create_delay_corner | 定义 RC 角与延迟角 |
| 分析执行 | update_timing / report_timing | 执行时序更新并生成报告 |
3.3.2 操作流程:标准批处理脚本模板
# run_sta.tcl
set DESIGN_NAME "top_module"
set LIB_DIR "/process/tech/lib"
set NETLIST_DIR "/design/netlist"
read_liberty -max $LIB_DIR/slow.lib
read_liberty -min $LIB_DIR/fast.lib
read_verilog $NETLIST_DIR/${DESIGN_NAME}.v
read_sdc $NETLIST_DIR/${DESIGN_NAME}.sdc
create_rc_corner -name rc_max -qx 1.0 -ry 1.0
create_delay_corner -name dc_max -lib_corner max_lib -rc_corner rc_max
create_constraint_mode -name func_mode -sdc_files ${DESIGN_NAME}.sdc
create_analysis_view -name view_max -constraint_mode func_mode -delay_corner dc_max
set_analysis_view -setup view_max -hold view_max
update_timing -full
report_timing -nworst 10 -path_type full -delay_type max > timing_max.rpt
3.3.3 案例拆解:多角分析流程
某 5nm 设计需要同时分析 SS(慢工艺)和 FF(快工艺)角。工程师创建两个 delay corner 和两个 analysis view,通过 set_analysis_view 切换视角。在 SS 角下报告 setup 违例,在 FF 角下报告 hold 违例。通过对比两个视角的路径延迟,发现关键路径在 SS 角下因线负载过大导致延迟超标,而在 FF 角下则因保持时间不足。最终通过插入 buffer 和调整时钟树综合策略解决。
3.3.4 常见误区与总结
- 误区:忘记执行
update_timing就直接报告,导致结果为空或过期。 - 误区:在 MMMC 配置中遗漏
set_analysis_view,工具默认使用第一个视图,可能不是目标场景。 - 总结:流程的核心是“先配置视图,再更新时序,最后报告”。建议将常用命令封装为 proc,减少重复输入。
3.4 设计数据库导入
3.4.1 核心原理:支持的文件格式
Tempus 支持多种输入格式:门级网表(Verilog/VHDL)、SPEF(寄生参数)、SDC(约束)、Liberty(时序库)、DEF(物理信息,可选)。对于先进工艺,还需要读取 NDM(Native Database)或 Milkyway 数据库以获取物理信息。导入顺序至关重要:先读库,再读网表,然后读约束和寄生参数。
3.4.2 操作流程:导入步骤与检查
- 读取 Liberty 库:使用
read_liberty指定 max/min 库文件。 - 读取网表:使用
read_verilog或read_vhdl。 - 读取约束:使用
read_sdc,注意 SDC 版本兼容性。 - 读取 SPEF:使用
read_spef,可指定不同 RC 角。 - 检查一致性:使用
check_design和report_analysis_views验证数据库完整性。
read_verilog 会报 warning。务必使用 link_design 命令检查所有实例是否已绑定到工艺库单元。
3.4.3 案例拆解:SPEF 导入异常处理
某项目在导入 SPEF 文件时出现 Cannot find net 错误。经排查,发现 SPEF 中的网络名与网表不一致——网表中网络名包含层次路径前缀,而 SPEF 使用扁平化名称。解决方案:使用 read_spef -net_prefix 选项添加前缀,或通过 TCL 脚本批量替换网络名。复盘经验:在导入前先使用 report_net 检查网络命名规则,避免盲目导入。
3.4.4 常见误区与总结
- 误区:忽略 SPEF 的 RC 角匹配。如果 SPEF 对应的是 Cworst 角,而 delay corner 配置为 RCmax,结果将不准确。
- 误区:在未读取完整约束时执行
update_timing,导致时钟树未定义,报告无意义。 - 总结:数据库导入是 STA 的基石,任何一步缺失或顺序错误都会导致后续分析失真。建议建立标准导入脚本模板,并加入断言检查(如
assert判断网表单元数量)。
- 安装配置需关注环境变量与许可证,多版本共存时使用模块化脚本。
- GUI 适合调试,TCL 适合批处理,两者结合可提升效率。
- 标准流程为:读库 → 读网表 → 读约束 → 配置 MMMC → 更新时序 → 报告。
- 数据库导入需严格检查格式、命名和角匹配,确保数据一致性。