下面为一个训练营学员做完一轮timing eco后的绕线结果。innovus中做完绕线后drc就只有个位数,属于正常现象,但做了一轮timing eco后就发现nanoroute的DRC数量高达758个。
Calibre LVS -手把手教你如何debug LVS的short和open
正常nanroute的DRC就是工具ecoRoute阶段看到的DRC。这里面主要包含metal space,via space
和short等DRC类型。
正常遇到这么多数量的DRC violation,我们应该先展开NanoRoute查看这里面的short数量以及short分布的layer。因为metal的short会引起大量的DRC Violation。即很多其他DRC violation可能都是由于short引起的。
又比如TSMC28nm arm cortexa7core项目innovus绕线后的short情况如下图所示。
为了帮助各位读者高效解决后端实战项目中的short问题,下面小编给大家分享下ICC,ICC2,Innovus中自动修复short的万能脚本。
ICC中自动修复short的脚本如下:
set mv_continue_on_opcond_mismatch true
set remove_net_count 0
set all_net [get_nets [get_attribute [get_drc_errors -type Short] nets]]
foreach_in_collection nn $all_net {
set nn_name [get_object_name $nn]
set nn_type [get_attribute [get_net KaTeX parse error: Expected '}', got 'EOF' at end of input: …net_type] if {nn_type == “Signal”} {
puts “INFO: net $nn_name”
remove_net_routing [get_net $nn_name]
incr remove_net_count
}
}
puts “INFO: removed $remove_net_count nets”
set_route_zrt_common_options
-post_detail_route_fix_soft_violations false
-post_eco_route_fix_soft_violations false
-post_group_route_fix_soft_violations false
-post_incremental_detail_route_fix_soft_violations false
set_route_zrt_detail_options -antenna true
set_route_zrt_detail_options -force_max_number_iterations true
set_route_zrt_detail_options -optimize_wire_via_effort_level high
set_route_zrt_detail_options
-repair_shorts_over_macros_effort_level high
set_route_zrt_detail_options -drc_convergence_effort_level high
set_route_zrt_detail_options
-generate_off_grid_feed_through_tracks high
set_route_zrt_detail_options -generate_extra_off_grid_pin_tracks true
route_zrt_eco
Innovus DRC Violation和Calibre DRC Violation分析和修复案例
ICC2中自动修复short的脚本如下(可以直接照抄应用):
set_app_options -name route.global.timing_driven_effort_level -value low
set_app_option -name route.global.timing_driven -value false
set_app_options -name route.detail.repair_shorts_over_macros_effort_level -value high
report_app_options -non_default * -as_list
open drc error data
open_drc_error_data zroute.err
set “must fix” attribute to shorts
set_attribute [get_drc_errors -error_data “zroute.err” -filter {type_name == “Short”} ] must_fix true
set remove_net_cnt 0
foreach nn [get_attribute [get_drc_errors -error_data “zroute.err” -filter {type_name == “Short”} ] error_id] {
set bbox [get_attribute [get_drc_errors -error_data “zroute.err” -filter “@error_id == $nn” ] bbox]
set nets [remove_from_coll [get_objects_by_location -hierarchical -intersect $bbox -classes net ] [list VDD VDD_LOGIC VSS] ]
foreach_in_coll net $nets {
set nn_name [get_attribute [get_net $net] full_name]
set nn_type [get_attribute [get_net KaTeX parse error: Expected '}', got 'EOF' at end of input: …et_type] if {nn_type == “signal”} {
#puts “INFO: net $nn_name”
remove_shapes [get_shapes -of_objects [get_nets $net]]
remove_vias [get_vias -of_objects [get_net $net]]
puts “INFO: remove_routes of net $nn_name”
incr remove_net_cnt
}
}
}
puts “INFO: removed $remove_net_cnt nets”
route_eco
-utilize_dangling_wires true
route_detail
-incremental true
-max_number_iterations $VAR(rt,droute_iteration)
Innovus中short修复万能脚本: