1. 课程导入与验证全景
在数字IC设计流程中,RTL仿真验证的是“功能意图”,而门级仿真验证的是“实现结果”。当综合工具把RTL映射到标准单元库后,电路的逻辑结构、时序路径、单元延迟和连线延迟都发生了变化。此时如果仍然只依赖RTL仿真,就无法发现综合优化引入的毛刺、复位释放路径上的亚稳态风险、时钟树插入后的偏斜影响,以及跨时钟域路径在真实延迟下的建立/保持违例。门级仿真正是填补这一验证缺口的关键环节。
门级仿真通常出现在综合之后、布局布线前后两个阶段。综合后门级仿真使用Design Compiler输出的门级网表和估算的SDF文件,可以较早发现综合阶段引入的功能问题;布局布线后门级仿真使用PrimeTime或StarRC提取的精确SDF,配合布线后的网表,验证真实寄生参数下的时序行为。两者共同构成从RTL到GDSII的递进式验证链。SDF回标验证的目标,就是把标准延迟格式文件中的单元延迟、连线延迟和时序检查信息反标到门级网表中,让仿真器在带时序信息的模型上运行,从而判断设计在真实延迟条件下是否仍然满足功能和时序要求。
从工具链协同关系看,Design Compiler负责把RTL转换为门级网表,同时输出初步的时序约束和估算延迟;Library Compiler把标准单元库的.lib文件编译为.db格式,供综合和时序分析使用;PrimeTime基于门级网表和库信息进行静态时序分析,并生成精确的SDF文件;VCS则加载门级网表、SDF文件和测试平台,执行带时序信息的仿真。四者形成“综合→库支持→时序分析→仿真验证”的闭环。典型交付物包括:门级网表(.v)、SDF文件(.sdf)、标准单元库(.db/.lib)、时序约束文件(.sdc)、仿真日志和波形文件(.vcd/fsdb),以及最终的验证报告。
需要特别注意的是,SDF回标验证并不是简单地把SDF文件读入仿真器就结束了。SDF中的延迟信息分为单元延迟、连线延迟和时序检查三类。单元延迟描述标准单元内部从输入到输出的传播延迟;连线延迟描述互连线上的寄生延迟;时序检查则包括建立时间、保持时间、恢复时间和移除时间等约束。在VCS中,通常使用$sdf_annotate系统任务完成回标,其基本形式如下:
initial begin
$sdf_annotate("top_chip.sdf", top_chip.u_dut,,
"sdf_annotate.log", "MAXIMUM");
end
其中第一个参数指定SDF文件路径,第二个参数指定要反标的实例层次,第四个参数指定日志文件,第五个参数指定使用MAXIMUM、MINIMUM还是TYPICAL延迟角。实际项目中,通常需要分别跑最大延迟和最小延迟两个角,以覆盖建立时间和保持时间的检查需求。如果SDF中的层次路径与网表实例名不匹配,VCS会在日志中报告“SDF annotation failed”或“instance not found”,此时需要检查综合后的实例命名规则、层次分隔符以及SDF生成时的层次选项。
门级仿真与RTL仿真的另一个关键差异是仿真速度。门级网表包含大量标准单元和时序检查,仿真事件数量可能比RTL高出一到两个数量级。因此,门级仿真通常只跑关键测试用例,而不是全回归。典型策略是:用RTL仿真完成功能覆盖率收集和大部分随机测试,用门级仿真验证复位序列、时钟切换、低功耗唤醒、跨时钟域握手等对时序敏感的场景。在SDF回标后,如果仿真出现X态传播,往往意味着时序违例导致触发器进入亚稳态,或者SDF中的时序检查被触发但设计没有正确的同步处理。
本课程后续将围绕这条验证链展开:从门级网表的生成与检查、SDF文件的格式解析与反标方法、VCS门级仿真选项与调试技巧,到PrimeTime时序报告与SDF的一致性核对,再到典型违例的定位与修复。第1章的目标是建立全景认知,明确每个工具在流程中的位置和交付物,为后续实操打下基础。