Closed gatecat closed 2 months ago
From what I saw in your last issue, you're running the repair_antennas command with 5 iterations. This works for GRT repair, but for post-DRT repair, you might try something like this:
while {[check_antennas]} {
remove_fillers
foreach inst [[ord::get_db_block] getInsts] {
$inst setPlacementStatus "FIRM"
}
repair_antennas
detailed_route {*}$all_args
}
The problem is that with the detailed routing of the design, GRT have less resources to work on, making it difficult for the maze routing to find a solution without congestion.
I will try it with the test case from issue https://github.com/The-OpenROAD-Project/OpenROAD/issues/5565 and see how it goes.
@gatecat In your private design with this issue, are you running it with OpenROAD-flow-scripts? Or do you run in a similar way to the ibex_sky130hd design, using the flow.tcl
file?
@gatecat FYI, this is the procedure that I used to repair_antennas post-DRT. Together with PR https://github.com/The-OpenROAD-Project/OpenROAD/pull/5671, I was able to finish DRT with zero antenna violations in less than 12 minutes (total design flow).
Could you give it a try? Let me know if you're using ORFS in your design. I can adapt this for the detail_route.tcl script from this repository.
set repair_antennas_iters 0
remove_fillers
while {[check_antennas] && $repair_antennas_iters < 5} {
puts "Iter $repair_antennas_iters"
foreach inst [[ord::get_db_block] getInsts] {
$inst setPlacementStatus "FIRM"
}
repair_antennas
detailed_route -output_drc [make_result_file "${design}_${platform}_ant_fix_route_drc.rpt"] \
-output_maze [make_result_file "${design}_${platform}_ant_fix_maze.log"] \
-save_guide_updates \
-bottom_routing_layer $min_routing_layer \
-top_routing_layer $max_routing_layer \
-verbose 0
incr repair_antennas_iters
}
filler_placement $filler_cells
set repaired_db [make_result_file ${design}_${platform}_repaired_drt.odb]
write_db $repaired_db
## ****
Thanks, I was using ORFS but I managed to adapt the detail_route.tcl script with an equivalent patch. Combined with #5671 this is now working perfectly, with it repair_antennas
doesn't take more than 30 seconds - negligible compared to total DRT time (about 30 minutes which is acceptable for the scale of the design).
After 5 iterations over 600 antenna violations are reduced to just 3 very marginal ones, which is well within what is acceptable. Maybe a fully clean solution could be obtained with more iterations or tweaking the layer derating so that post-GRT fixup is more effective, but this is more than good enough for now.
Thanks for all your development work and advice on this issue, it's been much appreciated!
Describe the bug
After https://github.com/The-OpenROAD-Project/OpenROAD/pull/5657 the crash in DRT after antenna fixing in gf130 is fixed. But unfortunately on subsequent iterations repair_antennas gets stuck in updating the global routes (I gave up after an hour and a half or so, for comparison the whole build runtime for the design is usually about 20 minutes). The typical backtrace where it's stuck looks like:
Expected Behavior
GRT updates in a reasonable amount of time (say, 5 minutes max for antenna repair on this design).
Environment
To Reproduce
This issue can be somewhat reproduced on aes_sky130 with the same flow.tcl patch as in https://github.com/The-OpenROAD-Project/OpenROAD/issues/5565, although it's not as dramatic as getting stuck for hours it still takes over 10 minutes on a design that usually takes less than 5 minutes for the entire build (and does get stuck in the same place). Hopefully this is enough to find where the performance problem lies, if not I can look at creating another testcase for it.
Relevant log output
No response
Screenshots
No response
Additional Context
No response