在后仿真阶段,SDF 反标日志中的 Error 必须修复,但 Warning 有时并不影响实际功能,更多是工具严格检查的结果。我们需要仔细甄别哪些 Warning 需要处理。以下整理了常见 Warning 及其应对策略:
1. SDFCOM_UHICD:Up-hierarchy Interconnect Delay ignored
该警告表示将层级间的 delay 放在了 device delay 上体现。对跨层次的端口标注 INTERCONNECT delay 时出现此提示,在层次铺平之后通常不会有实质问题,可以忽略。
2. SDFCOM_IWSBA:INTERCONNECT will still be annotated
无需处理,delay 实际上已被反标。VCS 无法识别 assign 语句代表的是单纯连线还是作为 device 存在,检测到对 assign 语句反标 INTERCONNECT delay 时会报出警告,但仍会执行标注。如果确认 assign 只是连线,可以选择屏蔽;推荐做法是使用相同变量连接同一层级下 cell 的端口,并仅对这两个端口标注 INTERCONNECT delay。
3. SDFCOM_INF:IOPATH not found
通常是 SDF 和 specify 块没有对应上。需判别是否需要处理:clk to clk 的警告一般无碍,但 clk to Q 的情况必须仔细检查,否则可能导致反标失败。
4. SDFCOM_CFTC:Cannot find timing check
同样是 sdf 与 specify 不匹配的问题。例如两者中一个是多 bit 一个是拆分 bit,会导致 match 不上。对于位宽拆分的可以在编译时添加 -tcheckvecsplit,其他情况需检查为何不匹配,此类通常需要解决。
5. SDFCOM_TANE:TIMINGCHECK Annotation Not Enabled
SDF 中有 timing check,但 Verilog 中没有对应的 specify 指定,导致 SDF 约束失效。正常情况下需要解决。
6. SDFCOM_IANE:IOPATH Annotation Not Enabled
SDF 中有对应 IOPATH 约束,但 Verilog 没有 specify 指定,约束同样无效。正常情况下需要解决。
7. SDFCOM_STCLOR:SCALED TC Limit Out of Range
VCS 使用 32bit 作为 delay,上限为 2^31,超过最大 delay 就会报错。有时未超 delay 也会报,因为 module 未指定 timescale 而采用 top 的 timescale 计算导致超限。解决方法是修改 delay 或使用 -override_timescale= 重新指定 timescale 覆盖之前的设置。
8. SDFCOM_RLTPD:RETAIN value larger than IOPATH delay
RETAIN delay 不能比 IOPATH delay 大。首先确认是否需要 RETAIN,不需要则去掉编译选项;如果需要,则需排查为何出现这种不合理的延时关系。
9. SDFCOM_SWC:Simple Wire Connection
提示 Y->A 之间不是简单的 wire 连接,可能经过了几级 assign。只要符合实际设计且 delay 生效,可以不用修改。
10. SDFCOM_NICD:INTERCONNECT Delay encountered
仿真器根据前后级关系处理。默认情况下,工具会将负值当成 0 处理,使约束更紧。若想正常处理负延迟数值,除添加仿真工具使能选项外,还需确认 SDF 文件或 specify 模型是否支持负值(如 $setuphold 支持,$setup 不支持)。本质是因为负延时无法被补偿为正值,需仔细确认。
11. SDFCOM_NTCDNC:Negative Timing Check Did Not Converge
当 VCS 无法收敛多条 negative timing check 中的 delay 时会报告此警告。原因可能是 VCS 无法识别互斥 condition,或是 timing 出问题导致 delay 无法收敛,需仔细检查并解决。

