Skip to content

Commit 8d776b7

Browse files
authored
Merge pull request #8836 from gadfort/pad-placer3
pad: add placer mode to pad placement
2 parents 94ab176 + 15cc72e commit 8d776b7

14 files changed

+2860
-154
lines changed

src/pad/README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ place_pads
228228
| Switch Name | Description |
229229
| ----- | ----- |
230230
| `-row` | Name of the row to place the pad into, examples include: `IO_NORTH`, `IO_SOUTH`, `IO_WEST`, `IO_EAST`, `IO_NORTH_0`, `IO_NORTH_1`. |
231-
| `-mode` | Select the mode to use during pad placement, choices are `bump_aligned`, `linear`, and `uniform`. Default will select `bump_aligned` if possible, otherwise fallback to `uniform`. |
231+
| `-mode` | Select the mode to use during pad placement, choices are `bump_aligned`, `linear`, `placer`, and `uniform`. Default will select `bump_aligned` if possible, otherwise fallback to `uniform`. |
232232
| `pads` | Name of the instances in the order they should be placed (left to right for `IO_SOUTH` and `IO_NORTH` and bottom to top for `IO_WEST` and `IO_EAST`). |
233233

234234
#### Modes
@@ -245,6 +245,14 @@ In `linear` mode, the pads will be place starting from the bottom or left of the
245245

246246
<img src="./doc/image/mode_linear.png" width=450px>
247247

248+
In `placer` mode, the pads will be placed according to the following algorithm:
249+
1. Find the ideal position of each pad to minimize RDL routing.
250+
2. Find the best anchor point for each pad taking into account the ordering of the pads and the ideal positions.
251+
3. Perform iterative pad spreading to push pads apart and avoid any obstuctions that may exist.
252+
4. Fix the placement of the pads.
253+
254+
<img src="./doc/image/mode_placer.png" width=450px>
255+
248256
### Placing Pads Manually
249257

250258
To place a pad into the pad ring.

src/pad/doc/image/mode_placer.png

54.1 KB
Loading

src/pad/include/pad/ICeWall.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ enum class PlacementStrategy
3131
DEFAULT,
3232
BUMP_ALIGNED,
3333
UNIFORM,
34-
LINEAR
34+
LINEAR,
35+
PLACER
3536
};
3637

3738
class ICeWall

src/pad/src/ICeWall.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,13 @@ void ICeWall::placePads(const std::vector<odb::dbInst*>& insts,
746746
placer = std::move(bump_placer);
747747
break;
748748
}
749+
case PlacementStrategy::PLACER: {
750+
auto bump_placer = std::make_unique<PlacerPadPlacer>(
751+
logger_, block, insts, row_dir, row);
752+
bump_placer->setConnections(iterm_connections);
753+
placer = std::move(bump_placer);
754+
break;
755+
}
749756
case PlacementStrategy::LINEAR:
750757
placer = std::make_unique<UniformPadPlacer>(
751758
logger_, block, insts, row_dir, row, 0);

0 commit comments

Comments
 (0)