1. 时序签核体系总览

数字 IC 设计从 RTL 到最终 GDSII,中间会经历综合、布局布线、时钟树综合、布线后优化等多个阶段。每个阶段都会产生一版网表,而每一版网表都需要回答同一个问题:这颗芯片在目标频率下,能不能稳定工作?静态时序分析(Static Timing Analysis,STA)就是回答这个问题的核心手段,而 Synopsys PrimeTime(简称 PT)则是工业界事实上的 STA 签核标准工具。

理解 PrimeTime 的定位,关键要区分两个词:分析与签核。综合工具和布局布线工具内部都带有自己的时序引擎,它们会在优化过程中反复估算时序,用来指导优化方向。但这些引擎的时序模型相对简化,且与优化目标耦合,结果不能作为最终判定依据。PrimeTime 使用独立的、经过工艺厂认证的延迟计算引擎(基于 Synopsys 的 CCS 或 NLDM 时序模型),配合精确的寄生参数提取结果,给出与流片结果高度一致的时序结论。因此,工具内时序用于“指导优化”,PrimeTime 时序用于“判定是否达标”,后者才具有签核(sign-off)效力。

签核标准与判定依据

PrimeTime 的签核结论由一组约束和库文件共同决定,核心判定量是时序裕量(slack)。对建立时间(setup)检查,slack 定义为:

setup slack = required_time - arrival_time
            = (捕获时钟沿时刻 + 时钟路径延迟 - 建立时间 - 不确定性)
              - (发射时钟沿时刻 + 时钟路径延迟 + 数据路径延迟)

对保持时间(hold)检查,slack 定义为:

hold slack = arrival_time - required_time
           = (发射时钟沿时刻 + 时钟路径延迟 + 数据路径延迟)
             - (捕获时钟沿时刻 + 时钟路径延迟 + 保持时间 + 不确定性)

两类检查都要求 slack ≥ 0。实际签核中通常还会留出余量,例如要求 WNS(最差负裕量)≥ -0 ps 且 TNS(总负裕量)为 0,或按项目要求留 5%~10% 的时钟周期余量。除建立/保持外,PrimeTime 还检查恢复/移除(recovery/removal)、脉冲宽度、时钟门控检查、最大过渡时间、最大电容等,共同构成完整的签核清单。

输入输出文件体系

PrimeTime 的运行依赖一组明确的输入,输出则是一份可追溯的时序报告。典型输入包括:

  • 门级网表:综合或布局布线后的 .v 文件,描述标准单元与宏单元的连接关系。
  • 工艺库:.db 格式的时序库,包含单元延迟、约束、功耗信息;通常还配合 .lib 源文件用于查阅。
  • 寄生参数文件:SPEF 或 DSPF,描述互连电阻电容,决定线延迟精度。
  • 时序约束:SDC 文件,定义时钟、输入输出延迟、多周期路径、伪路径等。
  • 环境与配置:工作条件(PVT corner)、线负载模型或提取模式、operating condition 等。

输出方面,PrimeTime 生成时序报告(report_timing)、约束检查报告(report_constraint)、时钟报告(report_clock_timing)以及可用于后续分析的会话文件。这些报告是判断设计是否达标的直接依据。

典型工作流

一次完整的 PrimeTime 签核通常按以下顺序展开:读入库与网表 → 读入寄生参数 → 读入 SDC 约束 → 设置工作条件与检查项 → 更新时序 → 生成报告 → 分析违例并反馈修改。其中“更新时序”(update_timing)是触发延迟计算的关键动作,只有执行后报告才反映最新状态。

PrimeTime 时序签核输入—处理—输出关系 输入文件 门级网表 .v 标准单元/宏单元连接 工艺库 .db / .lib 延迟/约束/功耗模型 寄生参数 SPEF 互连 R/C 提取结果 时序约束 SDC 时钟/IO延迟/例外 工作条件 PVT corner/温度/电压 PrimeTime 处理核心 读入设计与环境 read_verilog / read_db / read_spef / read_sdc 建立时序图 时钟传播 / 数据路径 / 约束绑定 延迟计算 单元延迟 + 互连延迟 + 时钟路径 时序检查 setup / hold / recovery / pulse width 裕量计算与判定 slack = required - arrival update_timing 触发更新 报告前必须执行 输出与判定 report_timing 路径延迟与 slack report_constraint 违例汇总 WNS/TNS report_clock_timing 时钟偏斜与延迟 会话保存 save_session 签核判定 slack ≥ 0 且无违例 违例反馈:修改约束/网表/布局后重新签核 工具内时序用于指导优化,PrimeTime 时序用于签核判定

与设计流程的衔接

在典型项目中,PrimeTime 签核并非只在最后做一次。综合完成后会用 PrimeTime 做一次“综合后签核”,检查约束是否合理、是否存在明显违例;布局布线完成后做“布线后签核”,此时寄生参数最准确,结论最接近真实芯片;若有时序违例,则回到布局布线工具做优化,再重新签核,形成迭代闭环。对于多 corner 签核,通常需要覆盖 WC(worst-case)、BC(best-case)以及温度反转等场景,确保芯片在所有工作条件下都满足时序要求。

签核前务必确认三件事:SDC 约束与设计意图一致、SPEF 与当前网表版本匹配、库文件与工艺 corner 对应。任何一项错配都会导致签核结论失真。

掌握 PrimeTime 的定位、签核标准和输入输出关系,是后续学习约束编写、路径分析和违例调试的基础。只有先建立“输入—处理—输出—判定”的整体框架,才能在面对具体违例时快速定位问题所在。