Official implementation of PPAPlace: Differentiable Cross-Stage Objectives for Chip Placement Optimization, accepted at the 2026 IEEE/ACM International Conference on Computer-Aided Design (ICCAD 2026), by Ruogu Chen and Jie Han of the University of Alberta.
Paper: arXiv:2608.13790
PPAPlace learns differentiable post-routing PPA objectives from complete mixed-size placement states. Its graph branch models macro connectivity and its spatial branch uses standard-cell density, full-net pin concentration, macro occupancy, full-net RUDY, and full-net bounding-box density. The learned surrogate supports two placement modes:
- PPAPlace-CoOpt adds the surrogate to DREAMPlace's analytical objective.
- PPAPlace-Refine applies projected gradient refinement to a completed placement.
The certified 5,000-placement training dataset is published on Hugging Face:
It contains 500 post-global-routing-labeled placements for each of ten training circuits. The dataset card documents its organization, labels, generation procedure, provenance, and applicable licensing terms. Generated datasets, checkpoints, and run outputs are deliberately not stored in this repository.
PPAPlace requires Linux and Python 3.8 or newer. A CUDA-capable GPU is recommended for DREAMPlace and model training.
git clone https://github.com/ValleyC/PPAPlace.git
cd PPAPlace
python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e .External tools are needed only to regenerate placements or labels:
- DREAMPlace for analytical placement; see DREAMPlace setup.
- ChiPBench and OpenROAD for post-routing labels; see ChiPBench setup.
- The complete native-Linux workflow is in SERVER_NATIVE_WORKFLOW.md.
Download the dataset from Hugging Face and unpack each circuit archive as
described in its dataset card. Point --data_root at the resulting root:
python scripts/train.py \
--data_root /path/to/ppaplace-training-5000 \
--circuits bp_fe,bp_be12,isa_npu,bp_multi,or1200,swerv_wrapper43,vga_lcd,ethernet,dft68,mor1kx \
--epochs 200 \
--save checkpoints/ppaplace.ptFor leave-one-circuit-out evaluation, use --mode loco:
python scripts/train.py \
--mode loco \
--data_root /path/to/ppaplace-training-5000 \
--circuits bp_fe,ethernet,dft68Evaluate a checkpoint with:
python scripts/evaluate.py \
--checkpoint checkpoints/ppaplace.pt \
--circuits swerv_wrapper,ariane133,black_parrot,bp_be,ariane136 \
--data_root /path/to/dataFor each training circuit, sample all 1,000 deterministic DREAMPlace configurations. Selection happens only after post-global-routing labels are available:
python scripts/generate_data.py \
--circuit bp_fe \
--dreamplace_dir /path/to/DREAMPlace \
--benchmark_root /path/to/ChiPBench/dataset/data \
--output_dir /path/to/work/bp_fe \
--n_configs 1000 \
--n_target 0 \
--jobs 4 \
--skip_existing
NUM_CORES=8 STAGE_TIMEOUT=7200 bash scripts/grt_eval.sh \
bp_fe /path/to/work/bp_fe /path/to/work/bp_fe/grt_jsons 4
python scripts/select_training_data.py \
--circuit_dir /path/to/work/bp_fe \
--target 500Repeat for all ten training circuits. --n_target 0 is intentional: stopping
after 500 DREAMPlace successes can yield fewer than 500 usable pairs after
OpenROAD failures or placement-identity filtering.
The third DREAMPlace pass marks legalized macros FIXED only within that
sample while standard cells are placed. Macros are not fixed across samples.
The selection and audit scripts require distinct placement identities,
non-collapsed spatial inputs, and measurable movement for every macro.
Validate a generated corpus with the public audit utilities:
python scripts/verify_placement_diversity.py --help
python scripts/audit_live_training_labels.py --help
python scripts/audit_live_training_tensors.py --help
python scripts/audit_reproduction.py --helpThe label-fidelity study uses 20 RTLMP weight configurations on each of ten circuits. Run one circuit at a time through the pinned ChiPBench/OpenROAD flow:
bash scripts/label_fidelity.sh \
bp_fe /path/to/reproduction/label_fidelity/raw 4 4After all circuits finish, validate and analyze the artifacts:
python scripts/audit_live_fidelity.py --help
python scripts/analyze_label_fidelity.py --help
python scripts/analyze_fidelity_congestion.py --helpThe congestion analysis characterizes the placements supporting the fidelity study; it does not add another correlation stage or alter the Table 1 correlation calculation.
Run post-placement refinement with:
python scripts/refine.py \
--checkpoint checkpoints/ppaplace.pt \
--circuit_dir /path/to/ChiPBench/dataset/data/swerv_wrapper \
--input_def results/swerv_wrapper.gp.def \
--output_def results/swerv_wrapper_refined.def \
--steps 30 \
--lr 0.001For co-optimization, integrate ppaplace.coopt.PPACoObjective into
DREAMPlace's PlaceObj. The class returns the differentiable PPA loss and its
placement gradients.
ppaplace/ Core models, features, data loading, legalization, and methods
scripts/ Training, evaluation, generation, fidelity, and audit tools
scripts/server/ Optional native-Linux launchers and long-run supervisors
configs/ Published default hyperparameters
docs/ Portable DREAMPlace, ChiPBench, and native-Linux instructions
tests/ Unit and reproduction-integrity tests
python -m pip install -r requirements-dev.txt
python -m pytestCitation metadata is provided in CITATION.cff. Please cite the accepted ICCAD 2026 paper and the dataset if you use PPAPlace in published work.
@article{chen2026ppaplace,
title = {{PPAPlace}: Differentiable Cross-Stage Objectives for Chip Placement Optimization},
author = {Chen, Ruogu and Han, Jie},
journal = {arXiv preprint arXiv:2608.13790},
year = {2026},
note = {Accepted at the 2026 IEEE/ACM International Conference on Computer-Aided Design (ICCAD)},
url = {https://arxiv.org/abs/2608.13790}
}