# OpenDP
OpenDP: Open-Source Detailed Placement Engine
| |
|:--:|
| Visualized detailed placement result using `aes_cipher_top` design with Innovus initial placement; doc/OpenDP.jpg |
Features:
- Fence region and multi-height cells. (ICCAD 2017 Contest benchmarks)
- Fragmented ROWs.
- Macro blocks.
## Commands
The `detailed_placement` command performs detailed placement of instances
to legal locations after global placement.
```
set_placement_padding -global|-instances insts|-masters masters
[-left pad_left] [-right pad_right]
detailed_placement [-max_displacement disp|{disp_x disp_y}]
check_placement [-verbose]
filler_placement [-prefix prefix] filler_masters
optimize_mirroring
```
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 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 == " option to `get_cells`.
The `set_power_net` command is used to set the power and ground special
net names. The defaults are `VDD` and `VSS`.
The `-max_displacement` argument to `detailed_placement` specifies how
far an instance can be moved when finding a site where it can be placed. The default values are
`{500 100}` sites. The x/y displacement arguments are in microns.
The `check_placement` command checks the placement legality. It returns
`0` if the placement is legal.
The `filler_placement` command fills gaps between detail-placed instances
to connect the power and ground rails in the rows. `filler_masters` is a
list of master/macro names to use for filling the gaps. Wildcard matching
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 `.
The `optimize_mirroring` command mirrors instances about the Y axis in
a weak attempt to reduce total wirelength (HPWL).
## Example scripts
## Regression tests
## Limitations
## FAQs
Check out [GitHub discussion](https://github.com/The-OpenROAD-Project/OpenROAD/discussions/categories/q-a?discussions_q=category%3AQ%26A+opendp+in%3Atitle)
about this tool.
## Authors
- SangGi Do and Mingyu Woo (respective Ph. D. advisors: Seokhyeong Kang,
Andrew B. Kahng).
- Rewrite and port to OpenDB/OpenROAD by James Cherry, Parallax Software
- Paper reference: S. Do, M. Woo and S. Kang, "Fence-Region-Aware
Mixed-Height Standard Cell Legalization", Proc. Great Lakes Symposium on VLSI,
2019, pp. 259-262. [(link)](https://dl.acm.org/doi/10.1145/3299874.3318012)
## License
BSD 3-Clause License. See [LICENSE](LICENSE) file.