本节摘要:签核(sign-off)环节信的是静态时序分析而不是动态仿真,根源在于两者的验证方式不同——仿真靠激励抽样,永远数不全路径;STA 靠拓扑穷举加工艺库数据,把每条路径的最坏延迟算成确定值。本节给出这条方法论边界的来龙去脉,以及 STA 自己的能力边界。
「sign-off」这个词在项目里出现的频率极高:约束 sign-off、时序 sign-off、功耗 sign-off。凡是能签核的环节,都意味着结果从"参考意见"升级为"责任承诺"。本册的主角时序签核之所以能落到 STA 头上,不是工具厂商的营销,而是它回答问题的方式决定的。本节是全册的第一块砖:先弄清 STA 靠什么立足,后面各章的公式、报告与修复手段才挂得上去。
动态时序仿真(gate-level simulation with SDF 反标)的做法是:给定一组激励向量,事件驱动地传播信号翻转,把实际发生的每条路径延迟记下来。它能看到真实的行为,包括毛刺与竞争,这是它的价值。但它有个天然短板——覆盖度取决于激励。一颗百万门规模的芯片,时序路径的数目远超任何合理的向量集能踩到的数量;一条深埋在状态机角落的路径,可能整个回归集都扫不到。用仿真结果断言"时序没问题",本质上是说"我抽到的签都没问题",而签筒里还有多少签、最坏的签长什么样,仿真答不出来。
STA 换了一种问法。它不问"这组激励下会怎样",而是问"就电路结构而言,信号从起点到终点最慢要多久、最快要多久"。做法是把网表展开成有向图:节点是引脚,边是时序弧(timing arc,包括单元内部弧与互连弧),从每个触发器的时钟端、每个输入端口出发做正向遍历,把到达时间(arrival time)沿图累加;再从每个捕获点反向遍历,把要求时间(required time)推回来;两者相减得到裕量。整个过程不需要激励向量——图是完整的,遍历是穷举的,结论自然覆盖每一条路径。这是"静态"二字的准确含义:结果只由电路结构与库数据决定,与 stimulus 无关。
两种方式的差别可以用一张图说清。

两条红线提醒一句:STA 不知道电路"想干什么",伪路径与多周期这类意图层面的信息必须由约束(第四章)告诉它;STA 的延迟数字来自工艺库与寄生参数(第三章),库不准,算得再穷举也是白算。这两条边界正好对应本册第四章与第三章的内容。
第一是完备性。穷举遍历保证了"每条真实存在的路径都被检查过",这是签核承诺的前提——你可以对一条没检查过的路径出事负责吗?不能。第二是确定性。同样的网表、库、约束与寄生参数,STA 跑一万遍结果一致;仿真换一组随机激励就是另一回事。可复现性让 STA 结果可以进审计、可以跨团队交接。第三是效率。图遍历的复杂度近似线性于图的规模,亿万门设计也能在一晚跑完全部角;门级仿真想覆盖同样多的路径组合,时间预算完全不可行。
| 维度 | 动态时序仿真 | 静态时序分析 |
|---|---|---|
| 覆盖方式 | 激励抽样,覆盖度依赖向量 | 拓扑穷举,天然全覆盖 |
| 是否需要激励 | 需要,且向量质量决定效果 | 不需要,只依赖结构 |
| 可复现性 | 随激励变化 | 确定性,同输入同结果 |
| 毛刺与竞争 | 可观察 | 不建模(靠约束与设计规则规避) |
| 功能正确性 | 能验证 | 完全不管 |
| 典型用途 | 行为验证、部分小模块时序确认 | 全芯片签核、各阶段收敛度量 |
| 运行成本 | 高(随向量数增长) | 低(近似随门数线性) |
STA 引擎要跑起来,需要四类输入齐备。工艺库(Liberty 格式)提供每个单元在不同负载与过渡率下的延迟表、建立保持要求、功耗参数——第三章会拆开看它的结构。网表提供连接关系,门级网表是签核对象,综合后网表用于中期收敛评估。约束(SDC)提供"什么算对":时钟定义、端口延迟、例外规则——第四章整章展开。寄生参数(SPEF 等)提供互连的电阻电容,布局前用估算,布局后用提取——这是 3.2 的主题。缺任何一项,STA 都会"自信地算错",而这类错误的典型症状恰恰是本册开头那个问题:报告漂亮,硅片不行。
在工具里走一遍最小流程,感受一下四类输入如何就位(命令名取通用风格,各家工具大同小异):
# 1) 读工艺库:慢角与快角各一份,签核时按检查类型选择 read_liberty slow_vdd0p72_temp125.lib ;# 建立检查常用慢角 read_liberty fast_vdd0p88_tempm40.lib ;# 保持检查常用快角 # 2) 读网表(综合后或布线后) read_verilog top_route.v # 3) 读寄生参数:布线后来自 RC 提取 read_spef top_route.max.spef # 4) 读约束:时钟、端口延迟、例外 read_sdc top.sdc # 5) 建图并出报告:默认报告建立检查最差若干条 update_timing -full report_checks -path_delay max -group_count 10
这五行命令跑完,你会得到本册 2.4 要逐行解读的那种时序报告。此时值得记住一个工程习惯:每次换库、换网表、换约束、换寄生,都相当于换了一个"宇宙",之前的所有到达时间全部作废,必须全量重算(update_timing -full);只有输入没变时,增量分析(8.1 详述)才可靠。
仿真与 STA 不是竞争关系,而是分工关系:仿真管功能与行为,STA 管时间契约。下一节我们把 STA 眼中的"一条路径"拆开,看清延迟账本的记账单元——那是所有公式的计数对象。