跳到主要内容
Floorplan Engine · CURRENT

iFP · 布图规划

布图规划引擎。Agent 可以 inspect 当前布图、validate 约束、生成多组 floorplan candidates——从 Die/Core 定义到 IO 排布和宏单元放置。

开源 EDAAgent 可调用多候选方案GPL-3.0
agent — ifp
# Agent-driven floorplanning
[iFP  ] die area       250000
[iFP  ] core area      184000
[iFP  ] utilization         0.74
→ 3 candidates generated
iMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout modeliMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout model
物理第一步Die/Core 定义
Agent可调用
多候选自动探索
GPL-3.0开源许可

核心能力

iFP 是物理设计流程的起点,负责将综合后的门级网表映射为芯片的物理框架。它定义 Die 尺寸与 Core 区域、排布 IO Pad 位置、规划宏单元(Macro)的放置区域,并为后续的电源网络构建和标准单元布局提供基础。iFP 的核心是一个可探索的布图规划引擎——不是简单的一次性运行,而是允许 Agent 在约束空间内生成多组候选方案并做对比选择。

Agent 在以下场景中深度使用 iFP:aspect ratio 搜索——在给定的面积约束下,尝试从 0.5 到 2.0 的不同长宽比,观察对布线拥塞和时序的预估影响;宏单元布局优化——对 SRAM、PLL、ADC 等硬宏尝试不同的放置角落/边缘位置,分析对标准单元区域连续性和绕线资源的影响;IO 排布验证——检查 IO Pad 与 bump/padring 的对齐、电源 Pad 的均匀分布、信号 IO 与内部模块的 proximity 关系;布图约束验证——检验 die/core 面积、placement blockage、halo 等约束的物理可实现性,在早期发现不可行的 floorplan 并修正。

在 AI 辅助场景下,Agent 可以使用 iFP 批量生成 floorplan candidates,然后将每个 candidate 的几何特征(die 面积、core 利用率、宏单元散布度、标准单元区域连通性)提取为向量,输入学习模型预测最终 QoR(时序、拥塞、可绕线性),自动筛选出 top-k 最优布图方案。这种"生成→特征提取→预测→筛选"的工作流可以将 floorplan 探索从数天的人工迭代压缩到数十分钟。

iFP 的布图算法支持基于序列对(Sequence Pair)和 B*-Tree 的表示方法,结合模拟退火或解析方法进行约束求解。Agent 可以通过调整模拟退火参数(初始温度、冷却速率、迭代次数)、改变 cost function 中各项目标(面积、线长、时序、拥塞)的权重,来引导 floorplan 生成的方向。结果数据通过 iDB 持久化,所有下游工具(iPDN、iPL)可以直接引用 floorplan_ref 获取布局上下文。

Agent 调用方式

Python
MCP
Tcl
# Agent 调用 iFP 生成布图规划
from ieda_client import IEDAClient

client = IEDAClient()

# 基础布图 —— 固定长宽比和利用率
result = client.call("iFP.plan",
    design_ref="snap_7f3a",
    aspect_ratio=1.0,
    utilization=0.7)

# Agent 遍历多个 aspect_ratio 生成 candidates
candidates = []
for ar in [0.6, 0.8, 1.0, 1.2, 1.4]:
    fp = client.call("iFP.plan",
        design_ref="snap_7f3a",
        aspect_ratio=ar,
        utilization=0.7)
    candidates.append(fp)

# Agent 根据 die_area 和 core_area 评估候选
best = min(candidates, key=lambda c: c['die_area'])
print(f"Best floorplan: {best['floorplan_ref']}")
{
  "tool": "iFP.plan",
  "arguments": {
    "design_ref": "snap_7f3a",
    "aspect_ratio": 1.0,
    "utilization": 0.7
  }
}
# Tcl 交互式布图规划
iFP::set_design snap_7f3a
iFP::set_aspect_ratio 1.0
iFP::set_utilization 0.7
iFP::create_floorplan
iFP::place_io -side {top bottom left right}
iFP::place_macro -macro_list {sram_0 sram_1 pll}
iFP::report_area
iFP::export_def -output snap_7f3a.floorplan.def

输入 / 输出契约

字段类型必需说明
design_refstring设计实例标识符(含综合后网表)
aspect_ratiofloatDie 长宽比(height/width),典型范围 0.5–2.0
utilizationfloat目标利用率,典型范围 0.5–0.85
io_constraintsIOConstraint[]IO Pad 位置约束列表(边、间距、分组)
macro_placementsMacroPlacement[]宏单元预置位置(fixed/guide 坐标)
返回字段类型说明
floorplan_refstring布图方案在 iDB 中的引用 ID
die_areafloatDie 总面积(μm²)
core_areafloatCore 区域面积(μm²)
io_positionsPoint[]每个 IO Pad 的 (x, y) 坐标列表
macro_positionsPoint[]每个宏单元的放置坐标列表
utilizationfloat实际达成的利用率

在流程中的位置

  iMap / iNO 综合输出 (netlist)
        │
        ▼
  ┌─────────────┐
  │   iFP      │  ← 当前工具:布图规划
  │  Floorplan   │
  └──────┬──────┘
         │  floorplan_ref
         ▼
  ┌─────────────┐
  │   iPDN      │  电源地网络构建
  │  Power Grid  │
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │    iPL      │  标准单元布局(全局/合法化/详细)
  │  Placement   │
  └──────┬──────┘
         │
    ··· 后续步骤 ···
上游:iMap/iNO(综合后网表) 下游:iPDN(电源网络)→ iPL(布局) 协同:iNO(网表结构影响宏单元分组)

相关资源

论文

Chen TC, Chang YW. "Modern Floorplanning Based on B*-Tree and Simulated Annealing." IEEE TCAD, 2006.

查看 →

论文

Murata H, et al. "VLSI Module Placement Based on Rectangle-Packing by the Sequence-Pair." IEEE TCAD, 1996.

查看 →

关联工具

iPDN · 电源网络 —— 在 floorplan 基础上构建供电网格。

iPDN →

关联工具

iPL · 布局 —— 在确定的 floorplan 框架内进行标准单元放置。

iPL →

GitHub

iFP 源代码于 iEDA 主仓库 src/iFP 路径下。

GitHub →

关联工具

iNO · 网表优化 —— 综合后网表处理,影响 floorplan 中模块粒度。

iNO →

探索最优的芯片物理框架

批量生成 floorplan candidates,用预测模型筛选——不在单一布图上反复试错。