核心能力
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 调用方式
# 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_ref | string | 是 | 设计实例标识符(含综合后网表) |
aspect_ratio | float | 是 | Die 长宽比(height/width),典型范围 0.5–2.0 |
utilization | float | 是 | 目标利用率,典型范围 0.5–0.85 |
io_constraints | IOConstraint[] | 否 | IO Pad 位置约束列表(边、间距、分组) |
macro_placements | MacroPlacement[] | 否 | 宏单元预置位置(fixed/guide 坐标) |
| 返回字段 | 类型 | 说明 |
|---|---|---|
floorplan_ref | string | 布图方案在 iDB 中的引用 ID |
die_area | float | Die 总面积(μm²) |
core_area | float | Core 区域面积(μm²) |
io_positions | Point[] | 每个 IO Pad 的 (x, y) 坐标列表 |
macro_positions | Point[] | 每个宏单元的放置坐标列表 |
utilization | float | 实际达成的利用率 |
在流程中的位置
iMap / iNO 综合输出 (netlist)
│
▼
┌─────────────┐
│ iFP │ ← 当前工具:布图规划
│ Floorplan │
└──────┬──────┘
│ floorplan_ref
▼
┌─────────────┐
│ iPDN │ 电源地网络构建
│ Power Grid │
└──────┬──────┘
│
▼
┌─────────────┐
│ iPL │ 标准单元布局(全局/合法化/详细)
│ Placement │
└──────┬──────┘
│
··· 后续步骤 ···