Conversation
There was a problem hiding this comment.
Code Review
This pull request extends the application of the "DETAIL_PLACEMENT_ARGS" environment variable to all stages of the flow that perform detailed placement, specifically including Clock Tree Synthesis (CTS) and Global Routing (GRT). The documentation in "FlowVariables.md", "variables.json", and "variables.yaml" has been updated to reflect this change, and the TCL scripts "cts.tcl" and "global_route.tcl" have been modified to pass these arguments to their respective "detailed_placement" calls. There are no review comments, and I have no feedback to provide.
detail_place.tcl passed DETAIL_PLACEMENT_ARGS to detailed_placement; the
four other calls -- after clock tree synthesis and after repair_timing in
cts.tcl, after repair_design and after repair_timing in global_route.tcl
-- were bare. A design that picks a legalizer for the place stage, say
-use_diamond_legalizer -max_displacement {450 450} because the default
negotiation legalizer could not place its wire buffers, was legalized by
the default again as soon as CTS inserted its clock buffers.
Measured on a 1.5 M-instance hierarchical design (asap7, 44 macros):
detailed_placement in the place stage took 149 s with the diamond
search; the re-legalization after clock_tree_synthesis in the same flow
ran the negotiation legalizer over 212,700 violations for 400 iterations,
17 minutes, on the same floorplan.
All five calls now go through detailed_placement_helper in util.tcl,
beside repair_timing_helper and repair_design_helper, so the argument
handling lives in one place and a sixth call cannot miss it. The variable
is scoped to place, cts and grt in variables.yaml, so a build system that
filters variables by stage passes it to all three. The default is empty,
so a flow that does not set it is unchanged. FlowVariables.md and
variables.json are regenerated.
Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
f7eb965 to
a0bb826
Compare
🔍 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), 1 without a comparable baseline. |
|
@LucasYuki @maliberty ORFS origin/master is broken, I'm sure you didn't hear it here first. This PR is approved and will go in when pr-merge goes green after origin/master is fixed. No further action required on this PR. |
detail_place.tclpassedDETAIL_PLACEMENT_ARGStodetailed_placement; the four other calls, after clock tree synthesis and afterrepair_timingincts.tcl, afterrepair_designand afterrepair_timinginglobal_route.tcl, were bare. A design that picks a legalizer for the place stage, say-use_diamond_legalizer -max_displacement {450 450}because the default negotiation legalizer could not place its wire buffers, was legalized by the default again as soon as CTS inserted its clock buffers.Measured on a 1.5 M-instance hierarchical asap7 design with 44 macros:
detailed_placementin the place stage took 149 s with the diamond search; the re-legalization afterclock_tree_synthesisin the same flow ran the negotiation legalizer over 212,700 violations for 400 iterations, 17 minutes, on the same floorplan.All five calls now go through
detailed_placement_helperinutil.tcl, besiderepair_timing_helperandrepair_design_helper, so the argument handling lives in one place and a sixth call cannot miss it.variables.yamlscopes the variable toplace,ctsandgrt, so a build system that filters variables by stage passes it to all three. The default is empty, so a flow that does not set it is unchanged; the variable's description already says it configures detailed placement, not one stage of it.FlowVariables.mdandvariables.jsonare regenerated with the repository's scripts.🤖 Generated with Claude Code