默认情况下routing 引擎可以在标准单元可以打孔的任何地方(via region)打孔,甚至工具还会先拉出一块metal,然后再打孔过渡到高层。
随之工艺节点越做越小,标准单元内部的结构也越来越复杂。此时如果还沿用传统工艺的走线方式,最终在做calibre drc检查可能会发现大量pin access相关的drc violation。
主要原因是工具看不到标准单元内部的Contact layer!
比如下图所示右侧工具为了连接M1 Pin,把via1打孔在这个pin边界处,而且大部分via1超出这个pin shape范围。此时虽然PR工具看不到violation,但Calibre drc检查会出现巨量这类drc violation。
所以现在最新的PR Flow默认都会通过一些选项来控制工具在标准单元出pin上打孔的方式。
对于ICC和ICC2工具不仅要控制via在pin shape内,还会控制对应的M1 Wire在pin范围内。
Innovus routing阶段设置:
setNanoRouteMode -routeAutoTuneOptionsForAdvancedDesign true
setNanoRouteMode -routeWithViaOnlyForStandardCellPin 1:1 -routeWithViaInPin 1:1
ICC2 routing阶段设置:
set_app_options -name route.common.connect_within_pins_by_layer_name -value {{M1 via_wire_standard_cell_pins}}
ICC Routing阶段设置:
set_route_zrt_common_options \
-wide_macro_pin_as_fat_wire true \
-connect_within_pins [M1 via_wire_standard_cell_pins] ] \
-reshield_modified_nets reshield \
-tie_off_mode rail_only \
-rotate_default_vias false \
-route_soft_rule_effort_level high \
-concurrent_redundant_via_effort_level medium \
-eco_route_concurrent_redundant_via_effort_level medium \
-concurrent_redundant_via_mode reserve_space
如果在前期忘记设置这些变量,我们也可以在当前的database中重新设置如上的变量,然后再做下ecoRoute。
但需要指出的是这种改动其实对绕线和timing是有影响的。如果是高频的设计实现,切记不要这么干,很容易导致绕线和timing问题!