核心能力
全局布局 (Global Placement)
iPL 基于 Nesterov 梯度下降求解器与 e-Density 静电场密度模型,在连续空间内将标准单元均匀散开,同时最小化加权线长 (WA 模型)。Agent 调用 iPL.place 时传入 effort="estimate" 可获得快速 HPWL 估算而不移动单元;传入 effort="standard" 则走完整的三阶段流程。每一步结束后,中间状态通过 iDB 自动导出为向量化特征,供 AiEDA Library 消费。
合法化 (Legalization)
Abacus 合法化引擎将全局布局后的单元对齐到 Row/Site,消除重叠并满足工艺约束。Agent 可以指定 frozen_objects 列表锁住已完成布局的宏单元或关键路径上的标准单元,合法性检查仅作用于未冻结区域。合法化完成后,dirty_set 返回被移动的单元集合——Agent 可将这些单元传入下游 iSTA 做增量时序分析。
详细布局 (Detail Placement)
详细布局阶段以局部窗口为单位交换相邻单元位置,优化线长、时序和可布线性。支持最大位移约束 max_displacement 防止关键单元偏离合法化位置过远。Agent 在每次交换后可立即获取更新后的 HPWL、时序 slack 和拥塞密度,形成闭环优化——这在传统 EDA 流程中需要 Tcl 脚本反复调用多个工具。
增量式合法化 (Incremental LG)
当 Agent 在局部区域做了 ECO 级别的单元增删或位移后,无需重新运行全芯片布局。调用 runIncrLG 只对变更单元 (由 inst_list 指定) 及其邻域做合法化。增量模式下运行时间通常是完整合法化的 1% 到 5%,大幅降低 Agent 决策循环的延迟。
Agent 调用方式
iPL 提供三种等价的调用协议。Agent 可以选择最适合其运行环境的协议——Python SDK 最自然,MCP 适合远程工具服务,Tcl 兼容现有脚本生态。
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"], )
输入/输出契约
Request Schema — iPL.place
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
design_ref | string | 是 | — | 设计快照引用,由上游工具生成 |
effort | "estimate" | "standard" | "in-design" | 是 | — | estimate: 仅评估 HPWL 不移动单元;standard: 完整三阶段;in-design: 在已布局设计中增量优化 |
region | string | 否 | "core" | 布局目标区域名称 |
intent_ref | string | 是 | — | Agent 意图引用,用于 provenance 追踪 |
frozen_objects | string[] | 否 | [] | 冻结单元列表——这些单元不会被移动 |
Result Schema
| 字段 | 类型 | 说明 |
|---|---|---|
hpwl | float | 半周长总线长 (Half-Perimeter Wirelength) |
density | float | 峰值 bin 密度 (0.0 ~ 1.0) |
congestion_map | binary | 拥塞热力图网格数据 |
design_ref | string | 新设计快照引用 (含布局后的新坐标) |
dirty_set | string[] | 被移动过的单元名称集合 |
warnings | string[] | 非致命警告信息 |
在流程中的位置
RTL
│
▼
┌──────────┐
│ iMap │ 逻辑综合与工艺映射
└────┬─────┘
│
▼
┌──────────┐
│ iFP │ 布图规划 (Floorplan)
└────┬─────┘
│
▼
┌──────────┐
│ iPDN │ 电源网络规划
└────┬─────┘
│
▼
┌──────────────────────────────────────┐
│ iPL ◆ │
│ 全局布局 → 合法化 → 详细布局 │
│ ↑ iSTA (前置时序标注) │
│ ↓ iSTA (增量时序分析, dirty_set) │
└──────────────────┬───────────────────┘
│
▼
┌──────────────┐
│ iCTS │ 时钟树综合
└──────┬───────┘
│
▼
┌──────────────┐
│ iTO │ 时序优化
└──────┬───────┘
│
▼
┌──────────────┐
│ iRT │ 全局与详细布线
└──────────────┘