4. SDF生成流程

SDF(Standard Delay Format)回标验证的第一步,是拿到一份与门级网表、工艺库版本严格对应的延迟文件。这份文件通常由签核级时序工具生成:PrimeTime负责基于时序约束和寄生参数计算路径延迟,StarRC负责从版图提取寄生RC并输出SPEF,两者配合才能得到带真实互连延迟的SDF。理解这条数据链,比记住某条命令更重要。

一、数据来源与生成链路

典型流程是:StarRC从版图GDS与工艺ITF文件提取寄生参数,输出SPEF;PrimeTime读入门级网表、.db工艺库、SDC约束和SPEF,完成时序计算后,用write_sdf导出SDF。若只做RTL综合后的预布局验证,也可以不读SPEF,此时SDF只含单元延迟与估计的线负载模型延迟,精度明显下降,需在验证报告中注明。

关键前提是版本一致性:网表、.db、SPEF、SDC必须来自同一轮设计冻结。任何一处版本错位,都会导致SDF中的实例名或时序弧与仿真网表对不上,回标时出现大量告警。

SDF生成数据链与关键输入 版图 GDS + ITF 工艺文件 StarRC 寄生提取 SPEF 互连 RC 参数 门级网表 + .db + SDC 约束 PrimeTime 时序计算 SDF 文件 write_sdf 输出 版本一致性检查点: ① 网表与 .db 单元名匹配 ② SPEF 与网表实例名匹配 ③ SDC 时钟定义与仿真 testbench 一致 ④ 工艺角(corner)与仿真库一致 ⑤ SDF 版本号与仿真器支持范围匹配

二、write_sdf 关键选项

PrimeTime中生成SDF的核心命令是write_sdf,常用形式如下:

write_sdf -version 3.0 \
          -context verilog \
          -input_port_nets \
          -output_port_nets \
          -no_internal_pins \
          ./output/chip_top.sdf

各选项作用需要分清:-version指定SDF语法版本,3.0支持条件时序弧和互斥路径表达,2.1则不支持,仿真器兼容性也不同;-context verilog让SDF中的实例名按Verilog层次分隔符输出,与VCS/Xcelium网表匹配;-input_port_nets和-output_port_nets控制是否在端口上写互连延迟;-no_internal_pins可减少内部引脚条目,缩小文件体积,但可能丢失部分路径信息,需谨慎使用。

另一个常被忽略的是-edges选项,它决定是否输出时序检查的边沿信息。对于含大量建立/保持检查的设计,建议保留默认行为,否则仿真器可能无法正确执行$setup/$hold检查。

三、条件时序弧与互斥路径的SDF表达

标准单元内部往往存在条件时序弧,例如多路选择器的A→Y路径只在选择端S为特定值时有效。SDF用COND关键字表达这种条件:

(COND (S == 1'b0) (IOPATH A Y (0.12:0.15:0.18) (0.10:0.13:0.16)))
(COND (S == 1'b1) (IOPATH B Y (0.11:0.14:0.17) (0.09:0.12:0.15)))

互斥路径则通过COND的互补条件实现:当S=0时A→Y有效,S=1时B→Y有效,两条路径不会同时激活。仿真器回标时会根据S的实际值选择对应延迟。若SDF中缺少COND限定,两条路径会被同时应用,导致延迟计算错误。

对于带时钟的门控单元,还需关注SETUP、HOLD、RECOVERY、REMOVAL等时序检查条目,它们同样可以带COND条件。回标后应确认这些检查在仿真中确实被触发。

四、常见告警与处理方法

生成SDF时,PrimeTime控制台常出现几类告警,处理方式如下:

  • “Cannot find pin in design”:通常是网表与.db版本不一致,或SPEF中实例名与网表不匹配。检查网表是否经过优化重命名,必要时用set_app_var sdf_include_pins_with_no_timing调整输出范围。
  • “No timing arc found”:某单元在库中没有对应时序弧,可能是库不完整或单元被错误映射。确认库版本,并检查是否使用了-no_internal_pins导致条目被裁剪。
  • “Conditional arc not written”:SDF版本低于3.0时不支持COND,需改用-version 3.0重新生成。
  • “Interconnect delay missing”:未读入SPEF或未加-input_port_nets/-output_port_nets,导致端口互连延迟缺失。
SDF生成后不要直接投入仿真。建议先用grep -c "COND"统计条件弧数量,与库中条件弧总数对比;再用仿真器的-sdfverbose选项回标,逐条检查告警,确认无“cannot find”类错误后再进行时序验证。

五、生成后的快速自检

一份可用的SDF应满足:文件头(SDFVERSION "3.0")与仿真器支持版本一致;(DIVIDER /)与网表层次分隔符一致;(TIMESCALE 1ns)与testbench时间单位一致;关键路径上的COND条目数量与库中条件弧匹配。完成这些检查后,SDF才具备回标验证的基本条件。