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

