本文转自:自己的微信公众号《数字集成电路设计及EDA教程》

里面主要讲解数字IC前端、后端、DFT、低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程。

考虑到微信公众平台上面发布的很多推文百度搜索不到,所以以后的推文也会在这里进行转载。

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

数字IC设计中max_cap和max_tran这类逻辑DRC或者说时序DRC是在设计中必须修复的问题,到最后版图完成,这些问题都是要clean的。他们的分析与优化贯穿前后端设计中。下面按照从前到后的流程逐一讲解每个阶段如果出现max_cap违反该如何解决。下面用到的命令,主要针对的是Synopsys公司的综合工具DC以及布局布线工具ICC。

如果设计中报告存在max_cap的违反,首先看一下最大违反是多少,违反的路径多不多,违反都发生在哪里,然后去分析出现违反的原因。

这种问题出现的原因无非两种:

1、扇出太大;

2、连线太长;

对于第一种情况,如果出现违反的net很多,那么很有可能是这个原因导致的,可以在sdc时序约束文件中将max_fanout的值设置的小一些,加紧约束。

对于第二种情况,可以采用手工ECO或者用PT进行ECO,在net中间插入buffer。

在ECO的时候要注意物理上的一些问题,例如是否存在filler,是否有足够的空间来size,如何连线等等,详见ICC的ECO流程。

下面给出一个手工查找max_cap发生原因并手工ECO解决该问题的例子。如下为ICC报告的一个net的max_cap的违反:

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

可以在gui中highlight该net:

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

发现的确是由于net太长导致的,那么可以在中间插入buffer,注意buffer的驱动一定要合适,否则可能会引起max_tran的违反。

>insert_buffer[get_nets {mimo_inst/n819}] [get_lib_cells */BUFV8_9TUH35]

>legalize_placement-cells {mimo_inst/eco_cell}或者用legalize_placement -eco

>route_zrt_eco -reroutemodified_nets_first_then_others

>report_constraint-all_violators -scenarios [all_active_scenarios] -significant_digits 4 >../rpts/all_violators.rpt

>update_timing

>create_qor_snapshot-clock_tree -name $ICC_CHIP_FINISH_CEL

修完之后就没有max_cap违反了:

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法-LMLPHP

04-19 17:43