Skip to content

flow: refactor io_placement to avoid propagating intermediate ODB - #4410

Closed
oharboe wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
oharboe:clean-kitchen-io-placement
Closed

flow: refactor io_placement to avoid propagating intermediate ODB#4410
oharboe wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
oharboe:clean-kitchen-io-placement

Conversation

@oharboe

@oharboe oharboe commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator

This change modifies io_placement to write a script with pin locations rather than passing an intermediate ODB containing dummy placement to global placement.

This avoids global placement seeing an .odb file modified by pin placement. As a result, global_placement no longer has to clean up the mess in the kitchen after IO placement (by manually deleting components before proceeding).

Cost taxonomy

Category What happened Actionable Fix Wall-clock Main Tokens Subagent Tokens
thinking Refactored Makefile, io_placement.tcl, and global_place.tcl dependency chain to pass coordinate script instead of .odb. N/A 30m 180k 0
flaky tools RePlAce diverged during global placement on origin/master (task-357). Ran tests on branch to verify we hadn't caused regression. 25m 35k 0
bloat Read full logs from failed global placement runs. Extracted tail lines and confirmed failure source instead of reading full logs. 5m 25k 0
Total 60m 240k 0

Scope: this PR.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the placement flow by integrating the initial global placement with skipped IOs directly into the IO placement step, simplifying the Makefile targets and step numbering. Feedback on these changes highlights an issue in io_placement.tcl where the POST_IO_PLACEMENT hook is executed unconditionally; if the IO placement is skipped, no design is loaded, which will cause any custom post-placement scripts that query the database to fail. It is recommended to move this hook inside the else block where the design is actually loaded.

Comment thread flow/scripts/io_placement.tcl Outdated
@oharboe
oharboe force-pushed the clean-kitchen-io-placement branch 4 times, most recently from 87b9142 to 0547380 Compare August 10, 2026 14:05
@maliberty

Copy link
Copy Markdown
Member

What "mess in the kitchen"? The makes it hard to work on IO placement as you can only see the results after gpl runs which is substantially slower. We also have ongoing development that will moot this be integrating IO placement into gpl.

@oharboe

oharboe commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

What "mess in the kitchen"? The makes it hard to work on IO placement as you can only see the results after gpl runs which is substantially slower. We also have ongoing development that will moot this be integrating IO placement into gpl.

placing io pins moves all the stdcells as a side-effect => intentional?

Then global placement have to move all the stdcells back to the center (clean up the kitchen before making the next dish)...

Am I misunderstanding something?

This change modifies io_placement to write a script with pin locations rather than passing a messy intermediate ODB to global placement.

Since io_placement.tcl writes a pin placement script without persisting its intermediate database state to the next stage, POST_IO_PLACEMENT is moot. Furthermore, if FLOORPLAN_DEF is set, no design is even loaded, causing POST_IO_PLACEMENT to fail if a script tries to use it. Any placement modifications should be done in PRE_GLOBAL_PLACE instead.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
@oharboe
oharboe force-pushed the clean-kitchen-io-placement branch from 0547380 to 4ac0d95 Compare August 10, 2026 14:24
@oharboe

oharboe commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

We also have ongoing development that will moot this be integrating IO placement into gpl.

😌

@maliberty

Copy link
Copy Markdown
Member

Because of the mutual dependence between IO and cell placement we iterate (cells skipping io, then io, then cells again with ios). So we are resetting the locations for the next iteration. I wouldn't call it a mess so much as visibility into the process. The process will be more internal to gpl in the future.

@oharboe

oharboe commented Aug 10, 2026

Copy link
Copy Markdown
Collaborator Author

Thank you for the explanation. I understand it to be debug output, but since this is all internal in gpl in the future, this PR is moot: a matter of taste/debugging/visibility into the process and doing anything here now is just churn for no reason while we wait for gpl upgrade.

😌

@oharboe oharboe closed this Aug 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants