Skip to content

mpl: seed standard cells when all macros are fixed - #11276

Open
oharboe wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
oharboe:mpl-all-fixed-seeding
Open

mpl: seed standard cells when all macros are fixed#11276
oharboe wants to merge 1 commit into
The-OpenROAD-Project:masterfrom
oharboe:mpl-all-fixed-seeding

Conversation

@oharboe

@oharboe oharboe commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator

When every macro is fixed, HierRTLMP::run() skipped the whole pipeline,
including generateTemporaryStdCellsPlacement() and the soft blockages
around macros. A full run seeds every standard cell at the center of its
cluster before global placement reads the database, so a macro placement
re-injected through place_macro/MACRO_PLACEMENT_TCL diverged from the run
that generated it (~2% achieved period measured on a macro-array design)
even with bit-identical macro geometry.

With this PR a design with standard cells goes through clustering,
shaping and the soft-macro annealing even when there are no unfixed
macros: fixed macros act as fixed obstacles (as they already did in mixed
fixed/unfixed designs), no macro is moved, standard cells are seeded at
their cluster centers and the soft blockages are created — matching what
a generating run leaves behind. Macro-only designs with no standard cells
skip as before.

Test: all_fixed_macros1 locks every macro and checks the standard cells
come out placed, no macro moved, and the blockages exist. The
no_unfixed_macros golden gains the design-data report block now printed
before the skip; its DEF is unchanged.

🤖 Generated with Claude Code

When every macro is fixed, HierRTLMP::run() skipped the whole pipeline,
including generateTemporaryStdCellsPlacement() and the soft blockages
around macros. A full run seeds every standard cell at the center of
its cluster before global placement reads the database, so a macro
placement re-injected through place_macro/MACRO_PLACEMENT_TCL diverged
from the run that generated it (~2% achieved period on designs where
this was measured) even with bit-identical macro geometry.

Now a design with standard cells goes through clustering, shaping and
the soft-macro annealing even when there are no unfixed macros: the
fixed macros act as fixed obstacles (as they already did in mixed
fixed/unfixed designs), no macro is moved, standard cells are seeded at
their cluster centers and the soft blockages are created, matching what
a generating run leaves behind. Macro-only designs with no standard
cells skip as before.

The new all_fixed_macros1 test locks every macro and checks that the
standard cells come out placed, no macro moved and the blockages exist.
The no_unfixed_macros golden gains the design-data report block that is
now printed before the skip; its DEF is unchanged.

Signed-off-by: Øyvind Harboe <oyvind.harboe@zylin.com>
@oharboe
oharboe requested a review from a team as a code owner August 31, 2026 01:01
@oharboe
oharboe requested a review from joaomai August 31, 2026 01:01

@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 updates the macro placer to ensure that designs with standard cells but no unfixed macros still go through the clustering process. This allows the temporary standard-cell placement and soft blockages to be generated consistently, which is useful when re-injecting placements. A new integration test all_fixed_macros1 has been added to verify this behavior. There are no review comments, so I have no feedback to provide.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant