3. Cadence Tempus工具入门

Cadence Tempus 是业界领先的时序签核(Timing Signoff)工具,专注于先进工艺节点(如 7nm、5nm 及以下)下的静态时序分析(STA)与时序收敛。与传统的 PrimeTime 流程不同,Tempus 采用统一的时序引擎和增量分析架构,能够在多模式多角(MMMC)场景下提供更高的精度和更快的运行速度。本章作为工具入门的第一课,将系统讲解 Tempus 的安装与许可配置、图形界面与命令行交互方式、核心分析流程以及设计数据库的导入方法,帮助学员建立起对工具使用的整体框架。

Tempus 工具入门核心链路 输入数据库 Netlist (门级网表) SDC (约束文件) Liberty (.lib) / SPEF MMMC 视图创建 create_rc_corner create_delay_corner create_constraint_mode / view 时序分析引擎 setup / hold 检查 时钟网络分析 功耗 / 电压降感知 启动方式:tempus -gui(图形界面) / tempus -files run.tcl(批处理) License 检查:licensecheck -product Tempus GUI 界面 原理图 / 时序报告 波形窗口 / 文本编辑器 TCL 命令交互 report_timing / report_clock get_cells / all_inputs 脚本批处理 source run.tcl 自动生成报告 输出与签核 时序报告 (setup/hold) / 违例路径 / ECO 建议 QoR 汇总 / 时序收敛迭代

上图展示了 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 操作流程:许可证验证与常见问题

  1. 验证许可证:在 shell 中执行 licensecheck -product Tempus,确认功能(Feature)是否可用。
  2. 启动测试:运行 tempus -version 检查版本号,确保安装正确。
  3. 常见错误排查:若提示 Cannot connect to license server,检查网络连通性、端口号(默认 5280)以及 lmgrd 进程是否在服务器上运行。
风险提示: 不要将 Tempus 安装在 NFS 挂载的共享目录中,否则可能因 I/O 延迟导致启动缓慢或数据库读写异常。建议使用本地 SSD 存储。

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 常用操作

  1. 加载设计:通过 File > Import Design 或直接输入 read_verilog 命令。
  2. 查看时序报告:在菜单栏选择 Timing > Report Timing,设置路径起点和终点。
  3. 高亮路径:在报告窗口中右键点击违例路径,选择 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 操作流程:导入步骤与检查

  1. 读取 Liberty 库:使用 read_liberty 指定 max/min 库文件。
  2. 读取网表:使用 read_verilog 或 read_vhdl。
  3. 读取约束:使用 read_sdc,注意 SDC 版本兼容性。
  4. 读取 SPEF:使用 read_spef,可指定不同 RC 角。
  5. 检查一致性:使用 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 → 更新时序 → 报告。
  • 数据库导入需严格检查格式、命名和角匹配,确保数据一致性。