Changelog: PA Placer v3 → 28nm RF
Scope
v3 is electrical + physical co-optimization (3 optimizers over 13-D RF param space + Laplacian placer + SA). 28nm is physical placement only — RF sliders rebuild geometry, no electrical cost is minimized.
Added
Cell-spread phase between QP and SA
- Up to 25 passes of congestion-aware diffusion
- Overflowed-cell nodes drift toward lowest-overflow 8-neighbor
- Damping by per-cell collision count + intra-cell jitter for tie-breaking
- Single
congGrid() snapshot per pass (not per node)
- Hands SA a much cleaner starting point
Final escape phase (post-SA)
- 7×7 probe grid across die
- Up to 10 rounds, lexicographic viols → energy
- Catches stuck configurations SA's local moves can't resolve
Geometry-anchored SA temperature
T_anchor = OV_ALPHA · (0.4 · minSep)² from median footprint radius
- Replaces v3's hard-coded
[5.0, 2.5, 1.0]
- Independent of Phase-1 residual energy (kills the perverse self-correcting direction where good QP → unescapable SA)
Reheat that actually reheats
- Cycle T fractions
[0.05, 0.04, 0.02] of T_anchor — T rises at cycle boundaries
- Small basin perturbation kicks
[0, 0.08, 0.04] (textbook reheat semantics)
- v3's
[5.0, 2.5, 1.0] was monotonic cooling mislabeled as reheat
UI / observability
- Real-time HPWL + violations convergence chart (240-pt rolling)
- Ghost rings at origin positions (dashed, fade post-SA)
- 32-frame motion trails per cell
- Before / post-QP / after summary card with delta column + snap-view toggle
- Speed multiplier 0.5× / 1× / 2× / 4×
- Phase banner (Phase 0 / 1 / 2 / 3) with color-coded state
Changed
SA energy weights — legality is now intrinsic, not patched at runtime
| v3 | 28nm |
|---|
| OV_ALPHA | 6.0 | 50 |
| MI_BETA | 4.5 | 20 |
| CG_GAMMA | 1.8 | 1.5 |
At α=50, one moderate overlap (gap = 0.4·minSep) costs ≈ 1.3 — comfortably above typical congestion residuals. v3's α=6 let γ·Σov² rival overlap penalties numerically, so legality was enforced by the lex-best acceptance check rather than by the energy itself. Lex-best is now a defensive guard.
WL_LAMBDA ramp: quadratic → linear
- v3:
WL_LAMBDA_MAX · p², range 0 → 0.30
- 28nm:
MIN + (MAX − MIN) · p, range 0.02 → 0.10
- Quadratic kept λ < 0.03 through the first ~70% of iterations — anchor was decorative during exploration, exactly when SA most needed grounding to QP's WL-optimal floorplan
SA cooling: faster but more cycles
- Cooling rate 0.95 → 0.93
- 60 iters/cycle (unchanged)
- 3 cycles (unchanged) but each one matters now that T actually rises
Footprint radii: live → baked
- v3: read from
_lastGeomP every SA step (keep-out shrinks/grows with L sliders mid-run)
- 28nm: stored in
g.userData.radius at build time
- v3's behavior was pedagogically nice but means SA sees a moving cost surface
tryIdx widening narrowed and justified
- v3: 1.6× move-range "endgame boost" at low T — actually greedy descent in disguise (acceptance of uphill moves ≈ 0 at low T)
- 28nm: removed boost; kept tryIdx widening when viols ≤ 3 (lets non-violating "blocker" nodes move out of the way — the genuinely useful part)
Cell-spread loop structure
- Restructured from O(N²·grid) per-node recomputation to one snapshot per pass + pre-computed targets
- Same heuristic, but the code now reflects what the algorithm actually is
Removed
- Click-component-to-optimize flow — v3's per-component optimizer dispatch (A* / GD / QP buttons in right panel)
- A* search optimizer — 7-D grid best-first search over discrete RF parameters
- Gradient descent with momentum — central-finite-difference gradient + Adam-like momentum
- Newton-QP electrical optimizer — diagonal Hessian + trust region in 13-D parameter space
- MNA solver — 13×13 complex linear system per frequency (forward + adjoint for NF)
- Resonance pre-conditioning penalty — RFC-corrected
C_eff resonance terms steering Lin/Lout
- Layer explode view — 7-layer Z-stack with per-layer slide animation
- Cross-section clipping plane — animated X-section with clip face
- Signal path overlay — colored RF / bias / GND / Ls trace lines
- QP Hessian matrix visualizer — center-screen H ⊕ g overlay during Newton-QP
- Endgame move-range boost — 1.6× at low T (see "Changed")
Fixed (implicit, by the rewrites above)
- Legality being enforceable only via lex-best, not via energy — α=50 fixes
- T schedule self-correcting wrong-way (good Phase-1 → small T → SA stuck) — geom anchor fixes
- WL anchor inactive during exploration — linear ramp fixes
- "Reheat" that monotonically cooled — true reheat schedule fixes
- SA cost surface drifting under live geometry updates — baked radii fixes
Migration notes for v3
Four changes are independent of v3's electrical architecture and could be backported:
OV_ALPHA: 6 → 50, MI_BETA: 4.5 → 20
- Replace hard-coded
SA_REHEAT_TEMPS with geomTempAnchor() · [0.05, 0.04, 0.02]
- Replace quadratic λ with linear
[0.02, 0.10]
- Add 7×7 probe escape phase after SA termination
These tighten Phase-3 results without disturbing the multi-optimizer Phase-1 / Phase-2 flow or the layer / signal / cross-section visualizations.