门级仿真、SDF 反标与 X 传播:零延迟、时序仿真与 X-prop
更新时间:2026-09-14。本文是「集成电路大类 · 芯片设计 · 数字验证」实操序列第八篇。前七篇都在 RTL(前仿真)世界。流片前还有一道:在综合 / 布局布线后产生的门级网表上再仿真,即门级仿真(GLS,Gate-Level Simulation)。静态时序分析 已经能静态算遍所有路径,为什么还需要它?这一篇讲清它独特、仍不可替代的两件事:SDF 时序和 X 传播。
本文要回答的问题
- RTL 仿真、零延迟门级仿真、带 SDF 时序仿真差在哪?
- SDF 反标了什么,min/typ/max 和 corner 怎么对应?
- X 从哪来,为什么 X 传播能抓 RTL 仿真看不见的复位/低功耗 bug?
- 有了 STA 和形式等价,门级仿真还不可替代的部分是什么?
一、三个仿真层级
| 层级 | 对象 | 延迟 | 主要回答 |
|---|---|---|---|
| RTL 前仿真 | 你的 RTL | 无(零延迟) | 功能逻辑对不对 |
| 零延迟门级仿真 | 综合/布线后网表 | 所有门延迟=0 | 网表功能、可测性、初始化/X 问题 |
| 时序门级仿真 | 网表 + 反标 SDF | 真实门/线延迟 | 异步、多周期、复位等在真实延迟下是否仍对 |
网表是综合后的结构描述:模块变成了一堆标准单元(与或非、触发器、ICG)和连线,模块名/层次名通常被保留以便回溯。它在功能上应与 RTL 等价(这由逻辑等价性检查 LEC/Formality 证明),但物理实现引入的问题纯 RTL 看不见。
二、SDF:把真实延迟注回网表
SDF(Standard Delay Format,标准延迟格式)由布局布线 / 时序签核工具生成,里面是每个单元、每条互连线的延迟,以及建立/保持检查值,仿真时「反标(annotate)」回网表:
(CELL
(CELLTYPE "DFFRX1")
(INSTANCE core/u_fifo/reg_7)
(DELAY
(ABSOLUTE
(IOPATH CLK Q (0.083:0.091:0.120) (0.075:0.088:0.115)))
(TIMINGCHECK
(SETUPHOLD D CLK (0.040) (-0.010)) )
)- 三元组
(min:typ:max)对应不同工艺/电压/温度角; - 时序仿真用命令行选择 delay corner(如
+sdfmax/ min-max mode,仿真器语法不同),通常慢角验 setup、快角验 hold,与 STA 签核角一致; - 反标后触发器的建立/保持检查由仿真器在真实沿上执行,违例会报 timing violation。
三、门级仿真独有价值之一:真实延迟下的时序相关逻辑
STA 静态地保证「同步路径在约束正确时」满足时序,但有几类问题依赖具体数据/行为、且常与约束正确性纠缠,门级仿真是兜底验证:
- 异步接口与异步复位释放:复位恢复(recovery/removal)、异步逻辑在快角下的细微冒险;
- 多周期 / 假路径约束是否写对:若错误地把真路径标成 false/multicycle,STA 放行了,时序仿真可能在真实延迟下直接功能错——它是「假约束」的行为级交叉验证;
- DFT 扫描链、测试时钟、JTAG:插入扫描逻辑后的网表能否正常移位/捕获;
- 低功耗电源域:掉电/上电、隔离、保持单元在网表级的行为(与 低功耗 UPF 的 power-aware 仿真衔接)。
注意分工:STA 快而全、是时序签核主体;门级仿真慢而具体、是对「约束与实现是否自洽」的抽样复核。 现代流程不会对全芯片跑全量带延迟仿真,而是挑关键场景、关键 corner 跑。
四、独有价值之二:X 与 X 传播
这是门级仿真最常抓出致命 bug 的地方。
X 从哪来
- 未初始化寄存器/存储器:RTL 仿真里很多工具默认把 reg 当 0,或被优化掉;真实硅片上电时触发器是随机态(X),必须靠复位走到确定值;
- 未驱动 / 高阻冲突:总线多驱动、漏接;
- 控制信号 X 扩散:一个 select 是 X,MUX 输出变 X 并向下游传播;
- 低功耗隔离缺失:掉电域输出未 clamp,向工作域灌入 X(见 电源门控)。
X 传播模式(X-propagation)
传统仿真的 X 语义偏「乐观」:X & 0 = 0(因为无论 X 是什么结果都 0),这会掩盖大量真实问题。开启 X 传播(工具的 xprop 模式)后,工具按真实硬件行为更悲观地传播 X:当一条控制选择为 X、且两条分支输出不同,输出判为 X。
乐观语义(默认):mux(sel=X, in0=0, in1=1) -> 可能给 0 ← 假装没事
X-prop: sel=X 且两分支不同 -> X ← 暴露未初始化/隔离问题典型收获:某配置寄存器复位后未初始化,RTL 仿真因为默认 0 一切正常,门级 X-prop 仿真中它让状态机一上电就进 X 态、整条流水线变 X——硅片上就是「冷启动偶发难启动」。这类 bug 流片后代价极高。
两种 X 分析
- 零延迟 GLS + X-prop:跑得相对快,主力用于查初始化、复位序列、扫描、隔离;
- 带 SDF GLS:慢,用于查时序相关和真实延迟交互,按关键场景选跑。
五、门级仿真与其他签核手段的边界
| 手段 | 擅长 | 不擅长 |
|---|---|---|
| STA | 全路径时序穷举、快 | 不管功能、依赖约束正确 |
| 逻辑等价(LEC) | 证明 RTL↔网表逻辑等价 | 不管时序/初始化/X |
| CDC 检查 | 结构性跨域问题 | 数据相关的跨域行为 |
| 门级仿真 | 初始化/X、约束自洽性、DFT、低功耗行为兜底 | 慢、仍是抽样、不能覆盖全部 |
它们互补而非替代。GLS 越来越「精准点跑」,但「复位能不能干净上线、掉电域会不会灌 X、扫描链能不能移位」这几件事,仍是它在签核表上的专属检查项。
六、工程实践与加速
- 门级网表巨大,用门级仿真跑完整回归不现实:选上电/复位、关键低功耗序列、DFT 模式、少数关键功能做 GLS;
- 比较门级与 RTL 常配合 SDF 反标下的关键 IO 时序,或用形式等价先排除纯功能差异,让 GLS 聚焦物理相关问题;
- 存储用仿真模型、PLL/模拟用行为模型替代,避免网表含不可仿真结构;
- 结果与 RTL 仿真对比时关注第一个 X 出现点(
first X/ 根因回溯),而不是最终一堆 X。
七、检查清单
- [ ] 先由逻辑等价性确认网表与 RTL 功能一致,再跑 GLS;
- [ ] SDF corner 选择与 STA 一致(慢角 setup / 快角 hold);
- [ ] 开启 X 传播模式,验证完整上电/复位序列能到确定态;
- [ ] 低功耗场景验证掉电域隔离/保持,无 X 灌入常开区;
- [ ] DFT 扫描移位/捕获在网表级通过;
- [ ] 关键异步/多周期路径在带延迟仿真复核,交叉检查假约束;
- [ ] 存储器/PLL/模拟用模型替代,避免不可仿真结构;
- [ ] GLS 只点跑关键场景,不追求全量,结论进签核表。
相关与延伸
RTL 侧验证方法见 功能验证总览 与 SVA;时序约束与假路径风险见 SDC 约束实战、STA 入门;低功耗隔离/保持见 电源门控与隔离保持;RTL 与网表为何等价由后续逻辑等价性检查(LEC/Formality)专题展开。
总结
门级仿真在综合/布线后的网表上跑,分零延迟与反标 SDF 真实延迟两类:SDF 用 min/typ/max 延迟和建立保持检查在选定 corner(慢角验 setup、快角验 hold)复核异步、复位、多周期/假路径约束在真实延迟下是否自洽,是对「STA 全但依赖约束写对」的行为级兜底;它更不可替代的价值是 X 与 X 传播——真实硅片上电寄存器是随机态,乐观仿真把 X 当 0 掩盖问题,X-prop 按真实硬件悲观传播,能在流片前抓出未初始化配置导致的冷启动失败、总线多驱动、掉电域隔离缺失灌入 X 等致命 bug;有了 STA、逻辑等价和 CDC,门级仿真仍专属负责初始化/X、约束自洽、DFT 与低功耗网表行为,做法是只对复位、关键低功耗和 DFT 等场景精准点跑而非全量回归。