前面我们文章中,我们聊了Verilog编码风格、module的划分以及其他一些方面,对Design Compiler综合电路的影响。当我们严格按照这些规则去编码之后,往往还是会在DC综合报告中看到有时序违反的情况出现,那我们这时候该怎么办呢?今天我们来探讨一下。
常用的DC命令
在DC脚本中,我们一般会使用默认编译条件,可以很快的得到一个相对准确的编译结果。之后再使用DC中的一些分析时序的命令,得到一些时序分析结果。比较常用命令有一下几个:
- report_constraint
这条命令能够报告出电路中的所有约束条件,一般含有Design Rule(设计规则)、Setup Time(建立时间)、Hold Time(保持时间)等。通过这条命令,可以一览全局。
- report_timing –delay max
这条命令能够报出建立时间的检查路径(Critical Path)。在预综合阶段,Setup Time的路径,我们需要重点关注,并且必须把时序违例的路径修好。
- report_timing –delay min
这条命令能够报出保持时间的检查路径(Critical Path)。在预综合阶段,Hold Time的路径,我们可以不关注,这些时序违例的路径,在后端处理流程中,会有相应的处理手段。
通过以上的三个命令,我们需要清楚当前电路中的以下时序情况:
- 是否有时序违例的路径存在;
- 时序违例的类型属于哪一种(DC一般根据Startpoint/endpoint,将路径分为4种);
- 时序违例的程度如何等等。
然后综合以上信息,选择相应的方法进行处理。
时序违例路径处理方法
在我们看到存在较大的时序违例情况时,我们一般采取以下的步骤进行处理。
- 检查所添加的约束是否合理;
- 检查是否有胶合逻辑,以及模块划分的合理性;
- 修改RTL代码。
一般在检查了前两项之后,如果没有什么问题,就需要进行RTL修改。修改RTL之前,我们必须先认真分析Timing Report中的这个路径,看是否能通过重新切pipeline,或者逻辑运算前向、后向移动的方法,进行修改。
修改RTL是最有效果,但是也是最麻烦的方法。经过修改的RTL,DC会重新进行优化。通过之前文章所讲,我们知道在这个时候,DC可以使用的方法就比较多样了。
这个过程一般会出现DC综合->修改->DC综合->修改的循环,经过几轮的迭代,最终将时序收敛到我们期望的目标范围内。
几个常用的DC优化命令
我们除了上面的方法之外,DC还提供了一些编译命令,不需要进行RTL修改,也能达到优化时序路径的目标。
- map_effort
使用方法:compile -map_effort (low | medium | high)。
编译过程分为三个级别:低、中、高。编译效果从好到坏排序:高>中>低,但是相应的编译时间排序由长到短:高>中>低。
在已经出现时序违例的情况下,我们一般可以使用map_effort high来优化时序。
- incremental_mapping
使用方法:compile -incremental_mapping。
当使用这个命令时,DC在编译过程中,将不再将netlist mapping到GTECH中,故不再做logic level的优化(优化的level分级,可以参看我以前写的文章)。但是DC可以在这个阶段,做gate level的cell替换,可以选择延时更小的cell,以达到满足时序约束的目的。
小结
今天的内容,我们主要介绍了几个常用的DC命令,以及如何处理timing violation的一般步骤。如果您还有其他的方面的经验,欢迎和我进行讨论。
欢迎阅读、点赞、转发、评论。加关注“单眼皮老王”,阅读IC设计、图像处理、ASIC、FPGA、AI等相关文章。
最后
以上就是健康战斗机最近收集整理的关于dc综合与pt静态时序分析(中文)_DC综合报告中时序违例该怎么处理呢?或许你可以试试下面的方法...常用的DC命令时序违例路径处理方法几个常用的DC优化命令小结的全部内容,更多相关dc综合与pt静态时序分析(中文)_DC综合报告中时序违例该怎么处理呢?或许你可以试试下面内容请搜索靠谱客的其他文章。
发表评论 取消回复