后端设计如何查找没有约束
在设计有没有遇到这样的问题,比如说按正常的流程完成importDesign,然后一系列操作猛如虎,风风火火的完成floorplan,也按部就班的使用自己多年积累的电源地脚本tcl完成电源地mesh网络,当你迫不及待的进入placement,当完成placeDesign后进行optDesign -preCts时序优化时,发现内部的reg2reg的路径为0, 时序路径丢失怎么办? 是不是很吃惊呀?是不是束手无测呀。 遇到这样的问题,首先要的事情,不要慌冷静的思考您的设计,输入的部分有没有漏sdc约束文件,有没有漏lib时序库文件,有没有verilog网表中的inst实例名的port pin 与lib库是不是一致的。
下面来逐一的分析问题,我们也可以先用check_design 命令检查设计,需要对工具检查的报告要逐一的查看。特别是对出现error关键词对应的描述项要重点的观察,一定要弄清楚,如果要weave需要给出weave的理由,如果自己确定不了,可以找前端一起讨论,另外一个需要关注的报告项是warring。如果这些项排出之后使用timingDesign 得到reg2reg的路径仍然为0,别急后面还有方法排除。 检查一下设计之后有没有
update_library loadLefFile命令实现模块的IP的添加,如果有添加,检查一下新增IP的pin名在lef lib verilog三者是不是完全一致,如果有差异则需要修改并确保一致。再次用timeDesign检测时序路径有没报出来。如果还是没有变化,那么我们就有另外一种方法来处理。 可以通过check_timing 检查一下约束文件是否合理,一般使用这条命令会检查出一些没有约束的路径,比如说一些false path路劲,那么这些路径对应pin是没有约束的,还有一些测试Pin也是没有约束的。还有一些scan对应的reg上对应的pin如SI SE 等,这些PIN可能与您使用的sdc种类有关,说不定您使用的function模式在分析,而不是使用scan模式分析,换一种sdc约束文件,有些路径就不会报出来,这需要确定。 如果发现了一些reg的CK端没有约束,那么就要好好的检查是否有问题,也可以使用
check_timing -verbose > check.log ,通过观察这些reg的ck端是那个时钟域的,检查时钟线上是否有门控单元,门控单元是否可以时序是否可以穿越。如果不能穿越则需要检查门控单元的lib文件中的eck时钟的定义是否具有穿越语句功能描述,也可以参考大厂一些标准单元库中的时序定义是否有出入。如果能排除门控时钟能够穿越,那么接下来就要看看时钟PAD是否能够被穿越。如果pad不能被穿越,那么就需要检查pad库lib lef verilog描述Pin是不是一致的,如果不一致这需要小结一下,
一般时序路径丢失主要从sdc检查是否漏约束,自己定义标准单元库门控时钟是否能够穿越,自己定义的pad库时钟是否能够穿越pad。这些都需要仔细的核查,通过使用check_timing 和timeDesign命令多次调试查找总能找出问题出来,要善于总结问题发现问题解决问题。