Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
5131b23
dpl: add HybridLegalizer — Abacus + negotiation-based legalizer
precisionmoon Feb 27, 2026
b4402d4
created two pass flow
precisionmoon Feb 28, 2026
f0dae4c
dpl: format and tidy hybrid legalizer
maliberty Mar 6, 2026
bc80030
enable hybrid legalizer by default
precisionmoon Mar 12, 2026
57f7c19
dpl: hybrid legalizer,
gudeh Mar 17, 2026
e52b63c
dpl: hybrid legalizer,
gudeh Mar 17, 2026
5f4becf
dpl: include option to paint hybridLegalizer grid,
gudeh Mar 18, 2026
23eefe5
dpl: snap instances to valid position
gudeh Mar 18, 2026
52c7ec0
dpl: fix seg fault at initFromDb()
gudeh Mar 23, 2026
4eee365
dpl: introduce hybrid rows to HybridLegalizer
gudeh Mar 24, 2026
7776cb2
dpl: set hybridLegalizer as default for DPL
gudeh Mar 24, 2026
007b47c
dpl: hybridLegalizer initialization snap to closest valid site
gudeh Mar 25, 2026
4073a43
dpl: fix pixel grid painting
gudeh Mar 25, 2026
22e1b26
dpl: fix grid inconsistency,
gudeh Mar 26, 2026
464fd0b
dpl: new report messages including json
gudeh Mar 27, 2026
7ae1c3d
dpl: fix runtime by removing unecessary snapToLegal(),
gudeh Mar 31, 2026
94c6d3c
dpl: fix issue with blockage sites after removing costly snapToLegal(…
gudeh Mar 31, 2026
58e4cde
dpl: fix placing instances on top of blockages without exhaustive app…
gudeh Apr 1, 2026
8a6e742
dpl: adjust max iterations
gudeh Apr 1, 2026
724e92a
dpl: cleaner code for debug prints and runtime measurement
gudeh Apr 2, 2026
98ff73f
dpl: detect stuck overflow and use old diamond search to solve stuck …
gudeh Apr 2, 2026
7833da3
dpl: rearrenge a few messages
gudeh Apr 2, 2026
e51da1a
dpl: rename new algorithm from hybrid legalizer to negotiation legalizer
gudeh Apr 3, 2026
19bae11
dpl: rename new algorithm from hybrid legalizer to negotiation legalizer
gudeh Apr 3, 2026
2056318
dpl: resolve hybrid nomenclature conflict
gudeh Apr 3, 2026
31e6e59
dpl: code clean-up
gudeh Apr 4, 2026
dde3112
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 4, 2026
e65caad
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 5, 2026
476d9c1
dpl: break after using diamond recovery
gudeh Apr 6, 2026
1a50097
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 6, 2026
d32473e
dpl: edit code to Google C++ style
gudeh Apr 6, 2026
7b07753
dpl: default run with diamond search
gudeh Apr 6, 2026
4a84884
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 6, 2026
79417a8
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 6, 2026
e1936d1
dpl: update README
gudeh Apr 6, 2026
09cf0ce
dpl: reorder function calls to maitain no-op with diamond search option
gudeh Apr 6, 2026
e6b5b41
dpl: clang-format
gudeh Apr 6, 2026
c416a9e
dpl: clang-tidy
gudeh Apr 6, 2026
486bba5
dpl: remove negotiation stand-alone command,
gudeh Apr 7, 2026
8ef8aa8
test: update multiple after DPL log change
gudeh Apr 7, 2026
3291443
dpl: fix licensing style
gudeh Apr 7, 2026
59490e4
dpl: rename variable
gudeh Apr 7, 2026
98c7361
dpl: use DebugScopedTimer for runtime measurement
gudeh Apr 7, 2026
01a30cf
dpl: minor code changes
gudeh Apr 7, 2026
2d142df
dpl: fix mistaken updated tests
gudeh Apr 7, 2026
bb8e5ef
dpl: rename constants
gudeh Apr 7, 2026
b9b98e1
dpl: use manhattan distance for fence region
gudeh Apr 7, 2026
f477048
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 7, 2026
02d8141
dpl: use utl::DebugScopedTimer
gudeh Apr 8, 2026
84a960b
dpl: fix lint
gudeh Apr 8, 2026
01fb91e
dpl: clang-format
gudeh Apr 8, 2026
c3beb58
dpl: test, transform test into an error due to high utilization
gudeh Apr 8, 2026
bb978c5
dpl: include new source files to bazel build
gudeh Apr 8, 2026
63efa41
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 8, 2026
911f0ee
dpl: fix typo
gudeh Apr 8, 2026
ef7dcd7
dpl: alphabetical order
gudeh Apr 8, 2026
a003ac3
dpl: clang-format
gudeh Apr 8, 2026
24de6bd
dpl: modify python test to throw error
gudeh Apr 8, 2026
d337cd8
dpl: clang-tidy
gudeh Apr 8, 2026
f9d7b5b
dpl: fix README heading levels
gudeh Apr 9, 2026
072fd09
dpl: include negotiation header
gudeh Apr 9, 2026
ccc7f50
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 9, 2026
a6811f2
dpl: fix corner case for instance out of core at initial snapping
gudeh Apr 9, 2026
4563b1a
dpl: debug, draw negotiation window search if instance is selected,
gudeh Apr 9, 2026
434f74a
dpl: clang-format
gudeh Apr 9, 2026
98beee9
dpl: persistent -use_negotiation toggle
gudeh Apr 9, 2026
1ed4b86
dpl: clang-tidy
gudeh Apr 9, 2026
d1c0e5c
dpl: fix comment
gudeh Apr 9, 2026
eac3d29
dpl: left over renaming from hybrid legalizer to negotiation legalizer
gudeh Apr 10, 2026
ef05fd6
dpl: rename variable to snake case
gudeh Apr 10, 2026
05df605
dpl: fix deubg print message
gudeh Apr 13, 2026
9296278
dpl: fix copyright year
gudeh Apr 13, 2026
b425768
Merge remote-tracking branch 'private/master' into dpl-negotiation-le…
gudeh Apr 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/cts/test/array.ok
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,9 @@ Dummys used:
[INFO RSZ-0058] Using max wire length 693um.
[INFO RSZ-0047] Found 40 long wires.
[INFO RSZ-0048] Inserted 88 buffers in 40 nets.
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 24399648.00 um^2, Instances area: 20261654.79 um^2, Utilization: 83.0%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 2902
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/array_ins_delay.ok
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,9 @@
[INFO RSZ-0058] Using max wire length 693um.
[INFO RSZ-0047] Found 40 long wires.
[INFO RSZ-0048] Inserted 88 buffers in 40 nets.
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 24399648.00 um^2, Instances area: 20261654.79 um^2, Utilization: 83.0%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 2902
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/array_max_wl.ok
Original file line number Diff line number Diff line change
Expand Up @@ -572,7 +572,9 @@ TritonCTS forced slew degradation on these wires.
[INFO RSZ-0058] Using max wire length 693um.
[INFO RSZ-0047] Found 41 long wires.
[INFO RSZ-0048] Inserted 87 buffers in 41 nets.
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 24399648.00 um^2, Instances area: 20261996.33 um^2, Utilization: 83.0%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 3088
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/array_no_blockages.ok
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,9 @@
[INFO RSZ-0058] Using max wire length 693um.
[INFO RSZ-0047] Found 42 long wires.
[INFO RSZ-0048] Inserted 92 buffers in 42 nets.
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 24399648.00 um^2, Instances area: 20261660.91 um^2, Utilization: 83.0%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 2907
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/array_repair_clock_nets.ok
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,9 @@ Dummys used:
[INFO RSZ-0058] Using max wire length 693um.
[INFO RSZ-0047] Found 5 long wires.
[INFO RSZ-0048] Inserted 5 buffers in 5 nets.
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 24399648.00 um^2, Instances area: 20261659.31 um^2, Utilization: 83.0%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 2901
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/gated_clock4.ok
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ Using 2 tracks default min distance between IO pins.
[InitialPlace] Iter: 3 conjugate gradient residual: 0.00000008 HPWL: 61445
[InitialPlace] Iter: 4 conjugate gradient residual: 0.00000011 HPWL: 61447
[InitialPlace] Iter: 5 conjugate gradient residual: 0.00000011 HPWL: 61445
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 999570.01 um^2, Instances area: 1274.41 um^2, Utilization: 0.1%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 283
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/hier_insertion_delay.ok
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@ Using 2 tracks default min distance between IO pins.
[InitialPlace] Iter: 3 conjugate gradient residual: 0.00000012 HPWL: 1229790
[InitialPlace] Iter: 4 conjugate gradient residual: 0.00000012 HPWL: 1229790
[InitialPlace] Iter: 5 conjugate gradient residual: 0.00000012 HPWL: 1229790
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 47872.02 um^2, Instances area: 1357.12 um^2, Utilization: 2.8%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 278
Expand Down
4 changes: 3 additions & 1 deletion src/cts/test/simple_test_hier.ok
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ Using 2 tracks default min distance between IO pins.
[InitialPlace] Iter: 3 conjugate gradient residual: 0.00000010 HPWL: 9260
[InitialPlace] Iter: 4 conjugate gradient residual: 0.00000010 HPWL: 9260
[InitialPlace] Iter: 5 conjugate gradient residual: 0.00000010 HPWL: 9260
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 47872.02 um^2, Instances area: 72.35 um^2, Utilization: 0.2%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 16
Expand Down
4 changes: 3 additions & 1 deletion src/dbSta/test/escape_slash.ok
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ Using 2 tracks default min distance between IO pins.
[InitialPlace] Iter: 3 conjugate gradient residual: 0.00000010 HPWL: 61447
[InitialPlace] Iter: 4 conjugate gradient residual: 0.00000008 HPWL: 61444
[InitialPlace] Iter: 5 conjugate gradient residual: 0.00000009 HPWL: 61447
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 999570.01 um^2, Instances area: 1274.41 um^2, Utilization: 0.1%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 283
Expand Down
4 changes: 3 additions & 1 deletion src/dbSta/test/escape_slash_hier.ok
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ Using 2 tracks default min distance between IO pins.
[InitialPlace] Iter: 3 conjugate gradient residual: 0.00000008 HPWL: 61445
[InitialPlace] Iter: 4 conjugate gradient residual: 0.00000011 HPWL: 61447
[InitialPlace] Iter: 5 conjugate gradient residual: 0.00000011 HPWL: 61445
[INFO DPL-0005] Max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-0006] Core area: 999570.01 um^2, Instances area: 1274.41 um^2, Utilization: 0.1%
[INFO DPL-0005] Diamond search max displacement: +/- 500 sites horizontally, +/- 100 rows vertically.
[INFO DPL-1101] Legalizing using diamond search.
Movements Summary
---------------------------------------
Total cells: 283
Expand Down
3 changes: 3 additions & 0 deletions src/dpl/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ cc_library(
"src/CheckPlacement.cpp",
"src/DecapPlacement.cpp",
"src/FillerPlacement.cpp",
"src/NegotiationLegalizer.cpp",
"src/NegotiationLegalizer.h",
"src/NegotiationLegalizerPass.cpp",
"src/Opendp.cpp",
"src/OptMirror.cpp",
"src/Optdp.cpp",
Expand Down
3 changes: 2 additions & 1 deletion src/dpl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ add_library(dpl_lib
src/DecapPlacement.cpp
src/OptMirror.cpp
src/PlacementDRC.cpp

src/NegotiationLegalizer.cpp
src/NegotiationLegalizerPass.cpp
src/Optdp.cpp
src/infrastructure/architecture.cxx
src/util/color.cxx
Expand Down
105 changes: 91 additions & 14 deletions src/dpl/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,60 @@
# Detailed Placement

The detailed placement module in OpenROAD (`dpl`) is based on OpenDP, or
Open-Source Detailed Placement Engine. Its key features are:
The detailed placement module in OpenROAD (`dpl`) is based on OpenDP, or
Open-Source Detailed Placement Engine. Its key features are:

- Fence region.
- Fragmented ROWs.
- Fence region support
- Fragmented row support
- Mixed-cell-height (1x–4x) legalization
- Two placement engines selectable at runtime

## Commands
## Placement Engines

#### Diamond Search

The default engine performs a BFS-style diamond search from each cell's
global placement position, expanding outward in Manhattan order until a
legal site is found.

#### NegotiationLegalizer

An optional two-pass legalizer based on the NBLG paper. Enabled with
`-use_negotiation` on the `detailed_placement` command.

```
Global Placement result
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Is the following diagram still accurate?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I included a (skipped) on abacus and the post-optimization.

┌───────────────────┐
│ Abacus Pass │ Fast DP sweep, row-by-row.
│ (Skipped) │ Near-optimal for uncongested cells.
│ │ Mixed-cell-height via row assignment.
│ Handles: │ Power-rail alignment enforced.
│ - 1x/2x/3x/4x │ Fence violations → skipped (→ negotiation).
│ - Fence regions │
└────────┬──────────┘
│ illegal cells (overlap / fence violated)
┌───────────────────┐
│ Negotiation Pass │ Iterative rip-up & replace (from NBLG paper).
│ │ Illegal cells + spatial neighbors compete for
│ NBLG components: │ grid resources. History cost penalises
│ - Adaptive pf │ persistent congestion. Isolation point skips
│ - Isolation pt │ already-legal cells in phase 2.
│ - History cost │
└────────┬──────────┘
┌───────────────────┐
│ Post-optimisation │ Greedy displacement improvement (5 passes).
│ (Skipped) │ Cell swap via bipartite matching within groups.
│ │
└────────┬──────────┘
Legal placement written back to OpenDB
```
# Commands

```{note}
- Parameters in square brackets `[-param param]` are optional.
Expand All @@ -23,30 +71,35 @@ detailed_placement
[-max_displacement disp|{disp_x disp_y}]
[-disallow_one_site_gaps]
[-report_file_name filename]
[-use_negotiation]
[-abacus]
```

#### Options

| Switch Name | Description |
| Switch Name | Description |
| ----- | ----- |
| `-max_displacement` | Max distance that an instance can be moved (in microns) when finding a site where it can be placed. Either set one value for both directions or set `{disp_x disp_y}` for individual directions. The default values are `{0, 0}`, and the allowed values within are integers `[0, MAX_INT]`. |
| `-disallow_one_site_gaps` | Option is deprecated. |
| `-report_file_name` | File name for saving the report to (e.g. `report.json`.) |
| `-incremental` | By default DPL initiates with all instances unplaced. With this flag DPL will check for already legalized instances and set them as placed. |
| `-report_file_name` | File name for saving the report to (e.g. `report.json`.) |
| `-use_negotiation` | Use the NegotiationLegalizer instead of the default diamond search engine. |
| `-abacus` | Enable the Abacus pre-pass within the NegotiationLegalizer. Only effective when `-use_negotiation` is set. |

### Set Placement Padding

The `set_placement_padding` command sets left and right padding in multiples
of the row site width. Use the `set_placement_padding` command before
legalizing placement to leave room for routing. Use the `-global` flag
for padding that applies to all instances. Use `-instances`
for padding that applies to all instances. Use `-instances`
for instance-specific padding. The instances `insts` can be a list of instance
names, or an instance object returned by the SDC `get_cells` command. To
specify padding for all instances of a common master, use the `-filter`
"ref_name == <name>" option to `get_cells`.

```tcl
set_placement_padding
set_placement_padding
-global|-masters masters|-instances insts
[-right site_count]
[-left site_count]
Expand All @@ -59,7 +112,7 @@ Either one of these flags must be set: `-global | -masters | -instances`.
The order of preference is `global > masters > instances`
```

| Switch Name | Description |
| Switch Name | Description |
| ----- | ----- |
| `-global` | Set padding globally using `left` and `right` values. |
| `-masters` | Set padding only for these masters using `left` and `right` values. |
Expand All @@ -77,7 +130,7 @@ is supported, so `FILL*` will match, e.g., `FILLCELL_X1 FILLCELL_X16 FILLCELL_X2
FILLCELL_X32 FILLCELL_X4 FILLCELL_X8`. To specify a different naming prefix
from `FILLER_` use `-prefix <new prefix>`.

```tcl
```tcl
filler_placement
[-prefix prefix]
[-verbose]
Expand All @@ -90,14 +143,14 @@ filler_placement
| ----- | ----- |
| `-prefix` | Prefix to name the filler cells. The default value is `FILLER_`. |
| `-verbose` | Print the filler cell usage. |
| `filler_masters` | Filler master cells. |
| `filler_masters` | Filler master cells. |

### Remove Fillers

This command removes all filler cells.

```tcl
remove_fillers
remove_fillers
```

### Check Placement
Expand Down Expand Up @@ -128,6 +181,7 @@ a weak attempt to reduce the total half-perimeter wirelength (HPWL).
```tcl
optimize_mirroring
```

### Improve Placement

The `improve_placement` command optimizes a given placed design.
Expand All @@ -150,7 +204,7 @@ If you are a developer, you might find these useful. More details can be found i
| `get_inst_bbox` | Get bounding box of an instance. |
| `get_inst_grid_bbox` | Get grid bounding box of an instance. |
| `format_grid` | Format grid (takes in length `x` and site width `w` as inputs). |
| `get_row_site` | Get row site name.
| `get_row_site` | Get row site name. |

## Example scripts

Expand All @@ -164,14 +218,33 @@ Examples scripts demonstrating how to run `dpl` on a sample design of `aes` as f

There are a set of regression tests in `./test`. Refer to this [section](../../README.md#regression-tests) for more information.

Simply run the following script:
Simply run the following script:

```shell
./test/regression
```

## Limitations

The following limitations apply when using the NegotiationLegalizer (`-use_negotiation`):

1. **Abacus cluster chain**: The current Abacus implementation uses a
simplified cluster structure. A production version should maintain an
explicit doubly-linked list of cells within each cluster, as in the
original Spindler et al. paper.

2. **Multithreading**: The negotiation pass is single-threaded.
Extend with the inter-region parallelism from NBLG (Algorithm 2, dynamic
region adjustment) using OpenMP or std::thread.

3. **Fence region R-tree**: Replace linear scan in `FenceRegion::nearestRect()`
with a spatial index (Boost.Geometry rtree or OpenROAD's existing RTree)
for large designs with many fence sub-rectangles.

4. **Row rail inference**: Currently uses row-index parity as a proxy for
VDD/VSS. Replace with actual LEF pg_pin parsing once available in the
build context.

## FAQs

Check out [GitHub discussion](https://github.com/The-OpenROAD-Project/OpenROAD/discussions/categories/q-a?discussions_q=category%3AQ%26A+opendp+in%3Atitle)
Expand All @@ -184,7 +257,11 @@ about this tool.
- Rewrite and port to OpenDB/OpenROAD by James Cherry, Parallax Software

## References

1. Do, S., Woo, M., & Kang, S. (2019, May). Fence-region-aware mixed-height standard cell legalization. In Proceedings of the 2019 on Great Lakes Symposium on VLSI (pp. 259-262). [(.pdf)](https://dl.acm.org/doi/10.1145/3299874.3318012)
2. P. Spindler et al., "Abacus: Fast legalization of standard cell circuits with minimal movement," ISPD 2008.
3. J. Chen et al., "NBLG: A Robust Legalizer for Mixed-Cell-Height Modern Design," IEEE TCAD, vol. 41, no. 11, 2022.
4. L. McMurchie and C. Ebeling, "PathFinder: A negotiation-based performance-driven router for FPGAs," 1995.

## License

Expand Down
8 changes: 6 additions & 2 deletions src/dpl/include/dpl/Opendp.h
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ class Opendp
void detailedPlacement(int max_displacement_x,
int max_displacement_y,
const std::string& report_file_name = std::string(""),
bool incremental = false);
bool incremental = false,
bool use_negotiation = false,
bool run_abacus = false);
void reportLegalizationStats() const;

void setPaddingGlobal(int left, int right);
Expand Down Expand Up @@ -192,6 +194,7 @@ class Opendp
friend class OpendpTest_IsPlaced_Test;
friend class Graphics;
friend class CellPlaceOrderLess;
friend class NegotiationLegalizer;
void findDisplacementStats();
DbuPt pointOffMacro(const Node& cell);
void convertDbToCell(odb::dbInst* db_inst, Node& cell);
Expand All @@ -214,7 +217,7 @@ class Opendp
void initPlacementDRC();

std::string printBgBox(const boost::geometry::model::box<bgPoint>& queryBox);
void detailedPlacement();
void diamondDPL();
DbuPt nearestPt(const Node* cell, const DbuRect& rect) const;
int distToRect(const Node* cell, const odb::Rect& rect) const;
static bool checkOverlap(const odb::Rect& cell, const odb::Rect& box);
Expand Down Expand Up @@ -394,6 +397,7 @@ class Opendp
bool iterative_debug_ = false;
bool deep_iterative_debug_ = false;
bool incremental_ = false;
bool use_negotiation_ = false;

// Magic numbers
static constexpr double group_refine_percent_ = .05;
Expand Down
3 changes: 2 additions & 1 deletion src/dpl/src/CheckPlacement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ void Opendp::checkPlacement(const bool verbose,
+ region_placement_failures.size() + edge_spacing_failures.size()
+ blocked_layers_failures.size()
> 0) {
logger_->error(DPL, 33, "detailed placement checks failed.");
logger_->error(
DPL, 33, "detailed placement checks failed during check placement.");
}
}

Expand Down
Loading
Loading