From ae5f9e37293346b5f8340456da9fb7a990790835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Wed, 11 Nov 2026 07:27:37 +0100 Subject: [PATCH 1/2] cts.tcl: drop the 4_1_error.odb written when detailed placement fails MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit detailed_placement fails with its own error, and the step fails with it. The two catch blocks around it saved a debug checkpoint under a name nothing reads; a checkpoint is now an ad-hoc orfs_write_db line added for the session, and cts.tcl says only what CTS does. EndpointSlackTracking.md named 4_1_error.odb as its example and said *-failed .odb files get no snapshot; orfs_write_db snapshots every .odb it writes, so it now says so. Signed-off-by: Øyvind Harboe --- docs/contrib/EndpointSlackTracking.md | 4 ++-- flow/scripts/cts.tcl | 12 ++---------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/docs/contrib/EndpointSlackTracking.md b/docs/contrib/EndpointSlackTracking.md index 6af5736e43..5ffe3baa3d 100644 --- a/docs/contrib/EndpointSlackTracking.md +++ b/docs/contrib/EndpointSlackTracking.md @@ -24,8 +24,8 @@ Every step then writes `$(REPORTS_DIR)/_endpoint_slack.json`, e.g. It works in the single-process `flow/scripts/flow.tcl` flow as well. Steps that just copy their input (`orfs_copy_db`, e.g. `5_3_fillcell` without fill cells) re-time the design if it is loaded, or else copy the previous step's -snapshot. Intermediate `.odb` files written through `orfs_write_db` (e.g. CTS's -`4_1_error.odb`) also get a snapshot; `*-failed` ones don't. +snapshot. Other `.odb` files written through `orfs_write_db`, such as a +step's `-failed.odb`, also get a snapshot. A placed step is timed with the parasitics OpenROAD has for it: a bare `estimate_parasitics` estimates from the global routes when there are any, diff --git a/flow/scripts/cts.tcl b/flow/scripts/cts.tcl index 1010cedeed..c012f2d2d5 100644 --- a/flow/scripts/cts.tcl +++ b/flow/scripts/cts.tcl @@ -39,11 +39,7 @@ set_placement_padding -global \ -left $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) \ -right $::env(CELL_PAD_IN_SITES_DETAIL_PLACEMENT) -set result [catch { detailed_placement_helper -quiet } msg] -if { $result != 0 } { - orfs_write_db $::env(RESULTS_DIR)/4_1_error.odb - error "Detailed placement failed in CTS: $msg" -} +detailed_placement_helper -quiet log_cmd estimate_parasitics @@ -60,11 +56,7 @@ if { !$::env(SKIP_CTS_REPAIR_TIMING) } { run_lec_test 4_rsz 4_before_rsz_lec.v 4_after_rsz_lec.v } - set result [catch { detailed_placement_helper -quiet } msg] - if { $result != 0 } { - orfs_write_db $::env(RESULTS_DIR)/4_1_error.odb - error "Detailed placement failed in CTS: $msg" - } + detailed_placement_helper -quiet log_cmd check_placement -placeable -verbose From 28ccfdad112707cb362d9aac956c7db34bf925f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98yvind=20Harboe?= Date: Wed, 11 Nov 2026 07:31:04 +0100 Subject: [PATCH 2/2] EndpointSlackTracking.md: *-failed .odb files get no snapshot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit write_endpoint_slack returns early for a *-failed step; the previous commit said they get one. Any other .odb written through orfs_write_db, an ad-hoc checkpoint among them, does. Signed-off-by: Øyvind Harboe --- docs/contrib/EndpointSlackTracking.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/contrib/EndpointSlackTracking.md b/docs/contrib/EndpointSlackTracking.md index 5ffe3baa3d..41b2e198e7 100644 --- a/docs/contrib/EndpointSlackTracking.md +++ b/docs/contrib/EndpointSlackTracking.md @@ -24,8 +24,8 @@ Every step then writes `$(REPORTS_DIR)/_endpoint_slack.json`, e.g. It works in the single-process `flow/scripts/flow.tcl` flow as well. Steps that just copy their input (`orfs_copy_db`, e.g. `5_3_fillcell` without fill cells) re-time the design if it is loaded, or else copy the previous step's -snapshot. Other `.odb` files written through `orfs_write_db`, such as a -step's `-failed.odb`, also get a snapshot. +snapshot. Any other `.odb` written through `orfs_write_db`, such as an +ad-hoc checkpoint, also gets a snapshot; `*-failed` ones don't. A placed step is timed with the parasitics OpenROAD has for it: a bare `estimate_parasitics` estimates from the global routes when there are any,