Skip to content

Repository files navigation

PPAPlace

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.

Dataset

The certified 5,000-placement training dataset is published on Hugging Face:

ValleyC/PPAPlace-5000

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.

Installation

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:

Use the published dataset

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.pt

For 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,dft68

Evaluate a checkpoint with:

python scripts/evaluate.py \
  --checkpoint checkpoints/ppaplace.pt \
  --circuits swerv_wrapper,ariane133,black_parrot,bp_be,ariane136 \
  --data_root /path/to/data

Regenerate the training corpus

For 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 500

Repeat 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 --help

Reproduce the 200-sample label-fidelity study

The 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 4

After 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 --help

The congestion analysis characterizes the placements supporting the fidelity study; it does not add another correlation stage or alter the Table 1 correlation calculation.

Inference

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.001

For co-optimization, integrate ppaplace.coopt.PPACoObjective into DREAMPlace's PlaceObj. The class returns the differentiable PPA loss and its placement gradients.

Repository layout

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

Testing

python -m pip install -r requirements-dev.txt
python -m pytest

Citation

Citation 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}
}

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages