本文转自:自己的微信公众号《数字集成电路设计及EDA教程》
里面主要讲解数字IC前端、后端、DFT、低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程。
考虑到微信公众平台上面发布的很多推文百度搜索不到,所以以后的推文也会在这里进行转载。
数字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的违反:
可以在gui中highlight该net:
发现的确是由于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违反了: