Skip to content

Conversation

@sakundu
Copy link

@sakundu sakundu commented Dec 18, 2025

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:

if (blockage->isSoft()) {
  continue;  // Soft blockages were skipped entirely
}

This implies that soft blockage constraints were not enforced during detailed_placement or check_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:

  1. Marking grid pixels within soft blockage regions as is_soft_blocked
  2. Implementing checkSoftBlockage() to validate cell placement against soft blockage rules
  3. Allowing only permitted cell types in soft blockage regions:
    • Buffers and inverters (detected via OpenSTA or name pattern)
    • Tie cells (CORE_TIEHIGH, CORE_TIELOW)
    • Physical cells (endcaps, tapcells, fillers)
    • Fixed instances
  4. Reporting violations for regular cells placed in soft blockage regions

Changes

  • Grid Infrastructure: Added is_soft_blocked flag to Pixel structure and modified markBlocked() to handle soft blockages separately from hard blockages
  • PlacementDRC: Implemented checkSoftBlockage() and isAllowedInSoftBlockage() methods to validate cell placement against soft blockage rules
  • Allowed Cell Types in Soft Blockage Regions:
    • Buffers and inverters (detected via OpenSTA with name-based fallback)
    • Tie cells (CORE_TIEHIGH, CORE_TIELOW)
    • Physical cells: endcaps, tapcells, and fillers
    • Fixed instances
  • Violation Reporting: Integrated soft blockage violations into the placement check flow, including marker categories and JSON reports

Files Modified

  • src/dpl/CMakeLists.txt - Added dbSta_lib dependency
  • src/dpl/include/dpl/Opendp.h - Added STA pointer for buffer/inverter detection
  • src/dpl/src/CheckPlacement.cpp - Added soft blockage violation tracking
  • src/dpl/src/Opendp.cpp - Updated saveFailures call signature
  • src/dpl/src/PlacementDRC.cpp - Implemented soft blockage checking logic
  • src/dpl/src/PlacementDRC.h - Added soft blockage method declarations
  • src/dpl/src/dbToOpendp.cpp - Pass STA to PlacementDRC
  • src/dpl/src/infrastructure/Grid.cpp - Mark soft blocked pixels
  • src/dpl/src/infrastructure/Grid.h - Added is_soft_blocked to Pixel
  • src/odb/src/swig/tcl/dbtypes.i - Added uint8_t typemap

Test

  • Passed all DPL regression tests

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.

1 participant