Repository navigation
Conversation
CTS_SNAPSHOTS wrote the design before repair_timing so it could be opened in the GUI, and save_progress printed the make target to type to open it. Debugging today is ad-hoc edits in a fast loop, where a checkpoint is one orfs_write_db line added and removed again, so the script need not carry it. No CI design sets the variable, which the Makefile contract rules out for a default-off toggle, and with SKIP_CTS_REPAIR_TIMING=1 4_1_cts.odb is the same pre-repair state. The failure path still writes 4_1_error.odb and .sdc, now with orfs_write_db and orfs_write_sdc directly. Nothing else changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
There was a problem hiding this comment.
Code Review
This pull request removes the CTS_SNAPSHOTS flow variable and the save_progress helper procedure from the CTS stage. Instead of saving intermediate progress snapshots, the flow now directly writes the 4_1_error.odb and 4_1_error.sdc files upon detailed placement failure. Documentation and variable definitions in variables.json and variables.yaml have been updated accordingly to reflect these removals. I have no feedback to provide as there are no review comments.
variables.json is no longer read since The-OpenROAD-Project#4800, so it is deleted in a pull request of its own rather than kept in step here. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
The estimate before detailed placement was added in 2020 for a repair_clock_nets call that the script then made itself. clock_tree_synthesis -repair_clock_nets does that repair now, and the estimate after detailed placement replaces this one before anything is timed, so it only feeds the DETAILED_METRICS report. It moves inside that if, with the metrics stage it is reported under. On asap7 gcd, 4_1_cts.odb is byte-identical before and after, with DETAILED_METRICS=0 and =1, and so are the 4_1_cts.json metrics apart from runtimes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
|
@jhkim-pii FYI |
🔍 QoR checkMetrics reflect the PR merge build — i.e. what will land on the target branch. Commit 62 design(s) checked — 0 with regression(s), 0 without a comparable baseline. |
Before,
cts.tclcarried a debug checkpoint,CTS_SNAPSHOTS, and asave_progresshelper that printed which make target to type to open it.Now
cts.tclsays only what the CTS step does.I added the CTS snapshots in #1285. I haven't used them in ages, and I don't think anyone else does at this point. In the three years since, they have cost a string of papercuts and added no function:
CTS_SNAPSHOT=1, but the code readCTS_SNAPSHOTS. When the variables table was generated in 2024 (81057c6), it documented the misspelling, which is read nowhere. The name that works got an entry only in 2025 (5cefa05), and the dead entry was removed in variables: retire CTS_SNAPSHOT #4635 in 2026.cts.tcl#4421 renamed the other one, fromhold_setuptosetup_hold, to match the order repair runs in. Add tclint CI #3278 (tclint) reformatted it, two flow-wide idiom changes rewrote its condition (21816bb, 4c70bd9), and a third rewrotesave_progress's writes (8facb0e).That is nine commits by four authors to keep a debug knob in step with the flow it watches.
I left
4_1_error.odb/.sdcalone on purpose (the error path changed in #3697). It is an open question whether they should go too, or whether the other stages not saving an.sdcwith their-failed.odbis the omission. That is for a separate pull request.Why now
orfs_write_dbline, added for the session and removed again. Keeping it in the script to save typing no longer pays.cts.tclholds only flow concerns, a reader, human or AI, does not have to work out which lines run in the flow and which only serve debugging.docs/contrib/MakefileContract.mdalso rules out a default-off toggle that no CI design sets, and no design setsCTS_SNAPSHOTS. The state it wrote (CTS, detailed placement, parasitics, beforerepair_timing) is what4_1_cts.odbholds when the flow runs withSKIP_CTS_REPAIR_TIMING=1.What changes
cts.tcl:CTS_SNAPSHOTSandsave_progressare removed, along with a doubled blank line.4_1_error.odband4_1_error.sdcand callserror, now throughorfs_write_db/orfs_write_sdcdirectly. The file names are the same.CTS_SNAPSHOTSis removed fromvariables.yaml, andFlowVariables.mdis regenerated.variables.jsonis no longer read and is deleted in flow: delete variables.json #4805.EndpointSlackTracking.md: its example of an intermediate.odbis now4_1_error.odb.estimate_parasiticsbefore detailed placement moves insideif { $::env(DETAILED_METRICS) }, along with the metrics stage it is reported under. It was added in 2020 for arepair_clock_netscall the script then made itself.clock_tree_synthesis -repair_clock_netsdoes that repair now, and the estimate after detailed placement replaces this one before anything is timed, so all it still feeds is the detailed report.With the default
CTS_SNAPSHOTS=0, the flow runs the same commands and writes the same results as before. The only difference is that the hint linesave_progressprinted before the failure error no longer appears in the log.Tested
On asap7 gcd, CTS was run with the old and the new
cts.tcl, withDETAILED_METRICS=0and=1.4_1_cts.odbis byte-identical in all four runs, and4_1_cts.jsonhas the same keys and values apart from runtimes. WithDETAILED_METRICS=0the log shows twoestimate_parasiticscalls instead of three.tclintandtclfmt --check0.7.0 pass oncts.tcl, andgenerate-variables-docs.pyregeneratesFlowVariables.mdcleanly. The flow runs are left to CI.🤖 Generated with Claude Code