From fbed0e158f43abc6bcb3996b016ade8e6a73cdcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Fri, 25 Sep 2026 10:04:14 +0200 Subject: [PATCH 1/2] global_route.tcl: carry -allow_congestion into the incremental reroutes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A flow that accepts congestion says so once, with -allow_congestion in GLOBAL_ROUTE_ARGS, but every global_route call decides for itself. The -start_incremental/-end_incremental brackets around the repairs and recover_power ran without it, so the reroute after repair_design treated the accepted congested route as unaccepted, rerouted it harder and failed on GRT-0232. The brackets now pass the flow's choice. Co-Authored-By: Claude Opus 5.5 (1M context) Signed-off-by: Øyvind Harboe --- flow/scripts/global_route.tcl | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/flow/scripts/global_route.tcl b/flow/scripts/global_route.tcl index 4db71be44d..31597ed1a7 100644 --- a/flow/scripts/global_route.tcl +++ b/flow/scripts/global_route.tcl @@ -14,6 +14,15 @@ proc global_route_helper { } { set use_cugr "" append_env_var use_cugr GLOBAL_ROUTE_USE_CUGR -use_cugr 0 + # The flow's choice to accept congestion, from GLOBAL_ROUTE_ARGS, passed + # to every incremental reroute: each global_route call decides for itself, + # and one without -allow_congestion reroutes a congested route harder and + # then fails on it. + set allow_congestion "" + if { [lsearch -exact $::env(GLOBAL_ROUTE_ARGS) -allow_congestion] >= 0 } { + set allow_congestion -allow_congestion + } + proc set_grt_seed { } { set seed_arg [env_var_or_empty GRT_SEED] if { $seed_arg ne "" } { @@ -84,11 +93,12 @@ proc global_route_helper { } { # Running DPL to fix overlapped instances # Run to get modified net by DPL - log_cmd global_route -start_incremental + log_cmd global_route -start_incremental {*}$allow_congestion log_cmd detailed_placement # Route only the modified net by DPL if { ![run_global_route_and_catch_failures -end_incremental {*}$res_aware \ + {*}$allow_congestion \ -congestion_report_file $::env(REPORTS_DIR)/congestion_post_repair_design.rpt] } { return @@ -104,12 +114,13 @@ proc global_route_helper { } { report_metrics 5 "global route post repair timing" } - log_cmd global_route -start_incremental + log_cmd global_route -start_incremental {*}$allow_congestion log_cmd detailed_placement log_cmd check_placement -verbose # Route only the modified net by DPL if { ![run_global_route_and_catch_failures -end_incremental {*}$res_aware \ + {*}$allow_congestion \ -congestion_report_file $::env(REPORTS_DIR)/congestion_post_repair_timing.rpt] } { return @@ -135,11 +146,12 @@ proc global_route_helper { } { } if { !$::env(OPT_POST_GRT_WNS) } { - log_cmd global_route -start_incremental + log_cmd global_route -start_incremental {*}$allow_congestion recover_power_helper # Route the modified nets by rsz journal restore if { ![run_global_route_and_catch_failures -end_incremental {*}$res_aware \ + {*}$allow_congestion \ -congestion_report_file $::env(REPORTS_DIR)/congestion_post_recover_power.rpt] } { return From 471617174268f101c5d17cd358af243e2db8835b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Fri, 25 Sep 2026 22:23:31 +0200 Subject: [PATCH 2/2] global_route.tcl: pass -allow_congestion to repair_antennas MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consistent with the incremental reroutes. Co-Authored-By: Claude Opus 5.5 Signed-off-by: Øyvind Harboe --- flow/scripts/global_route.tcl | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/flow/scripts/global_route.tcl b/flow/scripts/global_route.tcl index 31597ed1a7..7bf2c84224 100644 --- a/flow/scripts/global_route.tcl +++ b/flow/scripts/global_route.tcl @@ -15,9 +15,9 @@ proc global_route_helper { } { append_env_var use_cugr GLOBAL_ROUTE_USE_CUGR -use_cugr 0 # The flow's choice to accept congestion, from GLOBAL_ROUTE_ARGS, passed - # to every incremental reroute: each global_route call decides for itself, - # and one without -allow_congestion reroutes a congested route harder and - # then fails on it. + # to every incremental reroute and to repair_antennas: each call decides + # for itself, and one without -allow_congestion reroutes a congested route + # harder and then fails on it. set allow_congestion "" if { [lsearch -exact $::env(GLOBAL_ROUTE_ARGS) -allow_congestion] >= 0 } { set allow_congestion -allow_congestion @@ -163,7 +163,8 @@ proc global_route_helper { } { [env_var_exists_and_non_empty MAX_REPAIR_ANTENNAS_ITER_GRT] } { puts "Repair antennas..." - repair_antennas -iterations $::env(MAX_REPAIR_ANTENNAS_ITER_GRT) + repair_antennas -iterations $::env(MAX_REPAIR_ANTENNAS_ITER_GRT) \ + {*}$allow_congestion # repair antennas calls DPL internally check_placement -verbose check_antennas -report_file $::env(REPORTS_DIR)/grt_antennas.log