Core capabilities
Global placement
iPL uses a Nesterov gradient-descent solver with an e-Density electrostatic density model to spread standard cells evenly in continuous space while minimizing weighted wirelength (WA model). When Agents call iPL.place with effort="estimate", they get a fast HPWL estimate without moving cells; with effort="standard", the full three-stage flow runs. After each step, intermediate state exports automatically to iDB as vectorized features for AiEDA Library.
Legalization
The Abacus legalization engine aligns post-global-placement cells to rows and sites, removes overlaps, and satisfies process constraints. Agents can pass a frozen_objects list to lock placed macros or critical-path standard cells; legality checks apply only to unfrozen regions. After legalization, dirty_set returns the set of moved cells—Agents can pass these downstream to iSTA for incremental timing analysis.
Detailed placement
Detailed placement swaps adjacent cell positions within local windows to optimize wirelength, timing, and routability. A max_displacement constraint prevents critical cells from drifting too far from their legalized positions. After each swap, Agents immediately get updated HPWL, timing slack, and congestion density, forming a closed optimization loop—something that traditionally requires Tcl scripts calling multiple tools repeatedly.
Incremental legalization
When Agents add, remove, or move cells locally at ECO scale, they need not rerun full-chip placement. Calling runIncrLG legalizes only changed cells (via inst_list) and their neighborhoods. Incremental runs typically take 1–5% of full legalization time, sharply reducing Agent decision-loop latency.
Agent calling patterns
iPL exposes three equivalent calling protocols. Agents pick the one best suited to their runtime—Python SDK for native integration, MCP for remote tool services, Tcl for existing script ecosystems.
Python SDK
from ieda import Client client = Client("http://localhost:9099") # Standard full-flow placement result = client.call( "iPL.place", design_ref="snap_7f3a", effort="standard", region="core", intent_ref="intent_v2", ) # Access structured results print(result.hpwl) # 1823400.5 print(result.density) # 0.738 print(result.congestion_map) # <binary grid> print(result.design_ref) # "snap_7f3a_v2" print(result.dirty_set) # ["u_alu_0", "u_reg_5", ...] # Incremental legalization: only fix local area incr = client.call( "iPL.legalize", design_ref="snap_7f3a_v2", frozen_objects=["macro_0", "macro_1"], )
Input / output contract
Request Schema — iPL.place
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
design_ref | string | Yes | — | Design snapshot reference, produced by upstream tools |
effort | "estimate" | "standard" | "in-design" | Yes | — | estimate: HPWL only, no cell moves; standard: full three-stage flow; in-design: incremental optimization on a placed design |
region | string | No | "core" | Placement target region name |
intent_ref | string | Yes | — | Agent intent reference for provenance tracking |
frozen_objects | string[] | No | [] | List of frozen cells—these cells will not be moved |
Result Schema
| Field | Type | Description |
|---|---|---|
hpwl | float | Total half-perimeter wirelength (HPWL) |
density | float | Peak bin density (0.0–1.0) |
congestion_map | binary | Congestion heatmap grid data |
design_ref | string | New design snapshot reference (includes post-placement coordinates) |
dirty_set | string[] | Set of cell names that were moved |
warnings | string[] | Non-fatal warning messages |
Role in the flow
RTL
│
▼
┌──────────┐
│ iMap │ Logic synthesis & tech mapping
└────┬─────┘
│
▼
┌──────────┐
│ iFP │ floorplanning (Floorplan)
└────┬─────┘
│
▼
┌──────────┐
│ iPDN │ power grid planning
└────┬─────┘
│
▼
┌──────────────────────────────────────┐
│ iPL ◆ │
│ global placement → legalization → detailed placement │
│ ↑ iSTA (pre-placement timing annotation) │
│ ↓ iSTA (incremental timing analysis, dirty_set) │
└──────────────────┬───────────────────┘
│
▼
┌──────────────┐
│ iCTS │ Clock tree synthesis
└──────┬───────┘
│
▼
┌──────────────┐
│ iTO │ timing optimization
└──────┬───────┘
│
▼
┌──────────────┐
│ iRT │ Global & detailed routing
└──────────────┘