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

