跳到主要内容
Place Engine · CURRENT

iPL · 布局引擎

全局布局、合法化与详细布局引擎。Agent 可以在 frozen scope 内做 local move、评估 HPWL/密度变化、获取合法化反馈——无需理解布局算法的内部细节。

Place Engine CURRENT Tcl API Python SDK MCP
agent — iPL
# Agent calls iPL for placement
>>> client.call("iPL.place",
...   design_ref="snap_7f3a",
...   effort="standard")
[iPL ] global place done     hpwl=1.82e6
[iPL ] legalization done     density=0.74
[iPL ] detail place done     congestion=low
→ design_ref: snap_7f3a_v2
iPL placementGP globalLG legalizeDP detailHPWL wirelengthNesterov solvereDensity modeliDB databaseiPL placementGP globalLG legalizeDP detailHPWL wirelengthNesterov solvereDensity modeliDB database

核心能力

全局布局 (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
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_refstring设计快照引用,由上游工具生成
effort"estimate" | "standard" | "in-design"estimate: 仅评估 HPWL 不移动单元;standard: 完整三阶段;in-design: 在已布局设计中增量优化
regionstring"core"布局目标区域名称
intent_refstringAgent 意图引用,用于 provenance 追踪
frozen_objectsstring[][]冻结单元列表——这些单元不会被移动

Result Schema

字段类型说明
hpwlfloat半周长总线长 (Half-Perimeter Wirelength)
densityfloat峰值 bin 密度 (0.0 ~ 1.0)
congestion_mapbinary拥塞热力图网格数据
design_refstring新设计快照引用 (含布局后的新坐标)
dirty_setstring[]被移动过的单元名称集合
warningsstring[]非致命警告信息

在流程中的位置

RTL
 │
 ▼
┌──────────┐
│   iMap   │  逻辑综合与工艺映射
└────┬─────┘
     │
     ▼
┌──────────┐
│   iFP    │  布图规划 (Floorplan)
└────┬─────┘
     │
     ▼
┌──────────┐
│  iPDN    │  电源网络规划
└────┬─────┘
     │
     ▼
┌──────────────────────────────────────┐
│              iPL  ◆                  │
│  全局布局 → 合法化 → 详细布局          │
│  ↑ iSTA (前置时序标注)               │
│  ↓ iSTA (增量时序分析, dirty_set)     │
└──────────────────┬───────────────────┘
                   │
                   ▼
          ┌──────────────┐
          │     iCTS     │  时钟树综合
          └──────┬───────┘
                 │
                 ▼
          ┌──────────────┐
          │     iTO      │  时序优化
          └──────┬───────┘
                 │
                 ▼
          ┌──────────────┐
          │     iRT      │  全局与详细布线
          └──────────────┘
上游依赖iFP (布图规划)、iPDN (电源网络)、iMap (门级网表)
下游消费者iCTS (时钟树综合)、iTO (时序优化)、iSTA (增量时序分析)
并发交互iSTA 贯穿全流程——布局前做时序标注、布局后从 dirty_set 做增量分析

用开放中间状态继续构建

布局完成后,设计状态自动通过 iDB 导出——下游工具与 AI 模型从同一个 snapshot 读取。