Soft blockage support for detailed placement. #9080
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Hi OpenROAD team,
We have implemented soft blockage support in the detailed placement (DPL) module for our ISPD26 gate sizing and buffering contest. Soft blockages define regions where only specific cell types are permitted, such as buffers, inverters, tie cells, and physical cells, while regular logic cells are disallowed. We would appreciate it if you could review our code. Since soft blockage support is required for our contest, it would be great if this functionality could be made available in OpenROAD.
Thanks,
Sayak
Below is a brief description of the PR:
Motivation
For the ISPD'26 gate sizing and buffering contest, we use soft blockages to define regions where only buffers, inverters, tie cells, physical cells) should be placed, while preventing combinational and sequential logic cells from being placed in those regions.
Problem
Current DPL completely ignores soft blockages:
This implies that soft blockage constraints were not enforced during
detailed_placementorcheck_placement. To ensure that contest participants receive legal detailed placement solutions and that their results are evaluated correctly, DPL must properly honor soft blockages.Solution
This PR adds soft blockage support to DPL by:
is_soft_blockedcheckSoftBlockage()to validate cell placement against soft blockage rulesChanges
is_soft_blockedflag to Pixel structure and modifiedmarkBlocked()to handle soft blockages separately from hard blockagescheckSoftBlockage()andisAllowedInSoftBlockage()methods to validate cell placement against soft blockage rulesFiles Modified
src/dpl/CMakeLists.txt- Added dbSta_lib dependencysrc/dpl/include/dpl/Opendp.h- Added STA pointer for buffer/inverter detectionsrc/dpl/src/CheckPlacement.cpp- Added soft blockage violation trackingsrc/dpl/src/Opendp.cpp- Updated saveFailures call signaturesrc/dpl/src/PlacementDRC.cpp- Implemented soft blockage checking logicsrc/dpl/src/PlacementDRC.h- Added soft blockage method declarationssrc/dpl/src/dbToOpendp.cpp- Pass STA to PlacementDRCsrc/dpl/src/infrastructure/Grid.cpp- Mark soft blocked pixelssrc/dpl/src/infrastructure/Grid.h- Added is_soft_blocked to Pixelsrc/odb/src/swig/tcl/dbtypes.i- Added uint8_t typemapTest