在后仿真中,SDF 的反标 log 里 Error 是必须要解决的,但 Warning 有时可能不会影响实际内容,而是工具严格检查得到的警告,因此需要仔细甄别哪些 Warning 需要被解决。针对此,将平时看到的一些 Warning 进行整理,帮助之后解决这些问题:
- SDFCOM_UHICD: Up-hierarchy Interconnect Delay ignored
这个 Warning 是指将 hier 间的 delay 放在 device delay 上体现,可以不用处理;对跨层次的端口标注 INTERCONNECT delay 时出现该 Warning,在层次铺平之后是不会有问题的。
- SDFCOM_IWSBA: INTERCONNECT will still be annotated
也不用处理,delay 实际上也是反标了。
VCS 无法识别 assign 语句代表的是单纯的连线还是作为一个 device 存在,所以当 VCS 检测到对 assign 语句反标 INTERCONNECT delay 时会报出该 Warning,但是依然会将 INTERCONNECT delay 标注。要求 designer 做出进一步的确认,如果确认 assign 只是连线,那么是可以选择屏蔽这条 Warning。不过推荐使用相同的变量连接两个同一层级下 cell 的端口,并仅对这两个端口标注 INTERCONNECT delay。
- SDFCOM_INF: IOPATH not found
这个一般是 sdf 和 specify 中的没有对应上,这个需要判别是否需要处理。 这个会造成 sdf 反标失败,要针对对应的 case 来判别有没有影响: clk to clk 的警告应该还好;但是 clk to Q -- 这个就要好好检查。
- SDFCOM_CFTC: Cannot find timing check
这个一般是 sdf 和 specify 中的没有对应上;
比如某些时候,两者中一个是多 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 的指定,这个 sdf 的约束就没有意义了。 正常情况下是需要解决掉的。
- SDFCOM_STCLOR: SCALED TC Limit Out of Range
VCS 用 32-bit 作为 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
仿真器对应的处理是根据前后级的关系来处理的,可以参考:SDF 优先级和相关的概念。
一般来讲,仿真工具在默认情况下,是会将负值当成 0 处理,这样一来,约束就会更紧。
如果想正常处理这些负延迟数值,除了要添加仿真工具使能选项之外,还要确认 SDF 文件或者 specify 模型中,关于时序定义是否支持负值,比如 $setup 不支持,而 就支持。
本质上都是因为负的延时无法被补偿为正值,需要仔细确认。

