2. 门级网表生成与交付检查

门级仿真的第一步不是写 testbench,而是确认“手上这套交付物”本身是否自洽。综合工具输出的门级网表(通常为 .v 或 .vg)、时序信息(.sdf 或 .lib 中的时序弧)、标准单元库(.db/.lib)以及物理信息(.def/.spef)来自不同工具、不同阶段,任何一处版本错配都会让后续仿真结果失去意义。本节围绕“一致性检查”展开,说明检查什么、怎么查、查到什么程度可以放行。

一、四类交付物的角色与依赖关系

门级网表描述的是实例化的标准单元及其连接关系,它本身不含延迟;延迟来自标准单元库中的时序模型,以及物理信息提取出的互连寄生参数。SDF 文件则是把单元延迟与互连延迟“反标”到网表实例和网络上的载体。四者的依赖关系可以概括为:网表提供“谁连谁”,库提供“单元自身多快”,物理信息提供“线有多长、寄生多大”,SDF 把前两者与互连结合后落到具体实例和网络上。因此一致性检查的核心,是确认这四者描述的是同一个设计、同一个工艺角、同一个版本。

门级交付物一致性检查关系图 门级网表 .v / .vg 实例、端口、连接关系 标准单元库 .db / .lib 单元时序弧、功能模型 物理信息 .def / .spef 布局、互连寄生参数 时序反标文件 SDF .sdf 单元延迟 + 互连延迟 门级仿真 带时序的网表仿真 一致性检查要点 ① 网表单元名 ⊆ 库单元名 ② 端口/实例名与SDF匹配 ③ 工艺角与库版本一致 ④ 物理信息与网表实例对应 ⑤ SDF时间单位与网表一致 ⑥ 无未反标/未匹配告警 ⑦ 库中无缺失时序弧 典型不一致后果 单元名不匹配 → 反标失败 工艺角错 → 延迟偏差大 SDF单位错 → 延迟差1000倍 物理信息旧 → 互连延迟失真 库缺弧 → 时序路径被忽略 端口名不匹配 → 悬空网络 版本混用 → 结果不可复现

二、网表与标准单元库的一致性检查

最基础也最容易被忽略的一步,是确认网表中出现的每一个单元实例,都能在目标标准单元库中找到对应定义。综合工具在映射时可能使用了某个库中的特殊单元(如时钟门控单元、隔离单元、电平转换器),如果仿真时加载的库版本较旧或缺少这些单元,仿真器会报“module not found”或将其视为空模块,导致功能与延迟全部失真。

实际操作中,可以用脚本从网表中提取所有实例的模块名,去重后与库中单元列表做差集。例如网表中出现 CLKGATETST_X1、ISOLATION_X2、LVLHL_X1 等单元,而库中只有基础逻辑单元,差集就暴露了缺失项。此外还要检查库中是否包含网表用到的所有时序弧:某些单元在库中只有功能模型而无时序模型,仿真时该单元路径会被当作零延迟,掩盖真实时序问题。

三、SDF 与网表、库的匹配检查

SDF 反标是门级仿真最关键的一步。反标时仿真器会按“实例名 + 端口名”去 SDF 中查找对应的延迟值。如果网表在综合后被重命名、优化或层次被展平,而 SDF 是基于另一版本网表生成的,就会出现大量“未匹配”告警。检查方法是:在仿真日志中搜索 Warning: SDF annotation 或 Failed to annotate 关键字,统计未反标比例。工程上通常要求关键路径上的反标率达到 100%,整体反标率不低于 95%,否则需要重新生成 SDF 或核对网表版本。

另一个高频问题是时间单位不一致。SDF 头部会声明 (TIMESCALE 1ns) 或 (TIMESCALE 1ps),而网表或仿真器的 timescale 可能是 1ns/100ps。若两者不一致,延迟会被放大或缩小 1000 倍。检查时直接比对 SDF 的 TIMESCALE 声明与仿真命令中 -timescale 设置,确保量纲统一。

四、物理信息与网表的对应检查

物理信息中的 DEF 描述布局后的实例位置与网络连接,SPEF 描述提取出的寄生电阻电容。它们与网表的对应关系体现在实例名和网络名上。如果网表在布局后又被修改(如插入缓冲器、优化逻辑),而 DEF/SPEF 未同步更新,就会出现实例找不到、网络名不匹配的问题。检查方法是:从 DEF 中提取实例列表,与网表实例列表做交集比对;从 SPEF 中提取网络列表,与网表网络列表比对。对于缺失的网络,其互连延迟将无法反标,只能按零处理,导致时序过于乐观。

五、可执行的交付检查清单

把上述检查固化为一份可执行的清单,每次交付前逐项确认,能显著降低“仿真跑通但结果不可信”的风险。以下清单中的参数为示例阈值,实际项目应根据工艺节点和签核要求调整。

检查项 检查对象 判断依据 示例阈值
单元覆盖 网表实例名 vs 库单元名 差集为空 缺失单元数 = 0
时序弧完整 库中单元时序模型 关键单元均有时序弧 关键路径单元覆盖率 100%
SDF 反标率 仿真日志告警统计 未反标实例/网络占比 整体 ≥ 95%,关键路径 100%
时间单位 SDF TIMESCALE vs 仿真设置 量纲一致 完全一致
工艺角 库版本 vs SDF 生成条件 同一工艺角 如均为 ss_0p81v_125c
物理实例对应 DEF 实例 vs 网表实例 实例名交集比例 ≥ 99%
寄生网络对应 SPEF 网络 vs 网表网络 网络名交集比例 ≥ 98%
实用提示:建议在仿真脚本中加入自动检查环节,例如用 grep -c "Failed to annotate" sim.log 统计未反标数量,用 diff 比对网表实例列表与库单元列表。把检查结果输出为报告文件,作为交付物的一部分存档,便于回溯。
常见陷阱:不要只看仿真是否“跑完”。门级仿真即使存在大量未反标告警,仿真仍可能正常结束并输出波形,但此时延迟信息已严重缺失。务必在仿真日志中主动搜索告警关键字,而不是等到时序违例分析时才发现问题。

一致性检查的本质,是确保“网表、库、SDF、物理信息”四份文件描述的是同一个设计、同一个工艺角、同一个版本。检查顺序建议从网表与库的单元匹配开始,再到 SDF 反标率与时间单位,最后核对物理信息。每一步都留下可量化的判断依据,而不是凭感觉放行。只有交付物自洽,后续的门级仿真结果才具备参考价值。