在ICC中有一个命令"set_keepout_margin -type {soft|hard} -outer {$fillter2 0 $filler2 0} [get_cell aoi* ]above is wrong
set_keepout_margin -type {soft|hard} -outer {$fillter2 0 $filler2 0} {oai* aoi* }
这个是在某个特定的Cell边上+ padding,预留一些空的位置,主要用来减少局部的Congestion用的
ICC里头还有一个命令”
set_congestion_options -max_util {$intial_val+2%} -coordinate {X1 Y1 X2 Y2}]
这样子就可以比较好的控制Congestion的问题了。
ICC 中有关阻塞(congestion)的设定 自动布线最根本的任务是完成布线。在完成布线的前提下,才能考虑到其他方面的优化。虽然ICC提供了强大的布线工具,但在种种条件的约束下,依然会造成布线的失败。我在实际工作中,学习和参考了相关资料,总结了一些方法供大家参考。 参数设定: placer_max_cell_density_threshold -1 placer_enable_high_effort_congestion false placer_enable_enhanced_route false physopt_ultra_high_area_effort false 以上参数通过set 或 set_app_var 设定。通过参数字面的意思即可以了解到其用意。可以看到,解决阻塞的方法无非就是降低单元密度(使用率),具体表现在:密度限制、多次阻塞分析、提供更准确的阻塞图、允许删除更多的单元。 此外,set_paramenter还提供了更多变量的设定。过分的时序约束也会造成单元面积的增加。 命令设定: 使用封装好的命令进行设定更为安全,也可以得到更多的帮助与解释。 set_pnet_option 限制power rail 下面是否能摆放标准单元。 set_congestion_option 设定最大使用率,其中-layer 选项已被 routing guide 所取代。 set_area_recovery_option 已被 set_congestion_option 所取代。 set_keepout_margin 通常用来为hard macro增加类似 padding 的设定,以阻止标准单元的靠近。实际上,将其应用与标准单元,可以得到意外的效果。 手工设定: Placement blockage Routing guide Bound / plan group/ voltage area 限制区域或将电路限制在某块区域,以达到减少模块单元密度、理清模块间布线的目的。 辅助设定: RP (Relative Placement) 用于理清 data path ,从而达到减少布线的目的。 Partition 附带使用率的设定,目前还不知道如何更好的进行运用。 优化命令: placement with -congestion_driven 以减少阻塞为目的的计算方式,进行摆放。 VFP (Virtual Flat Placement) with –virtual_IPO 允许单元宽松的摆放,而非紧紧的靠在一起增加布线的难度。 refine_placement 对摆放进行单独的优化。 Commands with –congestion option: place_opt, psyn_opt, route_opt 优化时调用阻塞优化。 参考数值: route_global / route_zrt_global / route_fp_proto –congestion_map_only report_congestion 生成布线阻塞图,提供阻塞依据,产生阻塞信息以评估布线可行性。 Both Dirs: Overflow = 11194 Max = 5 GRCs = 11924 (0.47%) max > 10 OR GRCs % > 2% 布线失败的可能性较大。