核心能力
全局布线 (Global Routing)
iRT 的全局布线阶段将布线区域划分为 3D 网格 (x, y, layer),通过迷宫算法 (Maze Routing / A* search) 为每根线网找到拥塞最小、线长可控的粗粒度路径。Agent 调用 iRT.route 时传入 effort="estimate" 可仅做全局布线获得快速拥塞评估;传入 effort="standard" 则走完整的全局布线 + 轨道分配 + 详细布线三阶段。全局布线的输出包括每根线网在各网格边上的需求分布,这些数据可直接供 AiEDA Library 导出为拥塞特征向量。
轨道分配 (Track Assignment)
轨道分配阶段将全局布线的粗粒度路径映射到具体的制造轨道 (manufacturing tracks) 上,遵守每层的 preferred direction、最小间距等工艺规则。该阶段在保持全局布线拓扑的前提下优化具体走线位置,为后续详细布线提供高质量初始解。Agent 可通过 frozen_nets 参数锁定已完成优化的线网,仅对新增或修改的线网做轨道分配。
详细布线 (Detail Routing)
详细布线以轨道分配结果为起点,在制造网格 (manufacturing grid) 上对每根线网做逐段走线。支持多倍宽 (multi-width) 金属线、通孔阵列 (via array)、非默认规则 (NDR) 线宽/间距。Agent 的核心超能力体现在:通过 nets 参数指定需要重布线的线网集合,iRT 仅对这些线网及其直接邻域做局部拆线重布 (rip-up and reroute),已完成布线且被 frozen_nets 锁定的线网完全不受影响。这意味着 Agent 可以迭代式地修复局部 DRC——每次修复一根或几根线网——而不必每次都从零开始布线整个芯片。
局部重布线 (Partial Rip-up & Reroute)
结合 nets 和 frozen_nets 参数,Agent 实现精确的局部重布线:指定需要修复的线网列表、锁定其他所有线网,iRT 在新的约束边界内做迷宫搜索。操作完成后,drc_count 返回仍存在的 DRC 数量、failed_nets 返回无法完成布线的线网列表。Agent 可利用这些信息决定下一步动作——尝试不同的 net ordering、调整布线参数、或请求人工介入。
Agent 调用方式
iRT 提供三种等价的调用协议。
Python SDK
from ieda import Client client = Client("http://localhost:9099") # Standard full-flow routing result = client.call( "iRT.route", design_ref="snap_7f3a", effort="standard", ) print(result.completed_nets) # 12802 print(result.failed_nets) # 0 print(result.drc_count) # 0 print(result.wirelength) # 4.2e6 print(result.via_count) # 24531 # Partial re-route: only fix specific nets partial = client.call( "iRT.route", design_ref="snap_7f3a", effort="in-design", nets=["net_1234", "net_5678"], frozen_nets=["net_0001", "net_0002", "..."], ) print(partial.drc_count) # 3 (remaining violations) print(partial.failed_nets) # ["net_5678"] # Quick congestion estimation est = client.call( "iRT.route", design_ref="snap_7f3a", effort="estimate", )
输入/输出契约
Request Schema — iRT.route
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
design_ref | string | 是 | — | 设计快照引用,包含布局后单元坐标、线网列表、工艺信息 |
effort | "estimate" | "standard" | "in-design" | 是 | — | estimate: 仅全局布线估算拥塞;standard: 完整三阶段;in-design: 局部重布线 |
nets | string[] | 否 | [] (全部) | 需要布线的线网列表(用于局部重布线) |
frozen_nets | string[] | 否 | [] | 冻结线网列表——这些线网的布线结果不会被修改 |
Result Schema
| 字段 | 类型 | 说明 |
|---|---|---|
completed_nets | int | 成功完成布线的线网数量 |
failed_nets | int | 无法完成布线的线网数量 |
drc_count | int | 残留的 DRC 违例数量 |
wirelength | float | 总线长 (所有完成线网的总走线长度) |
design_ref | string | 新设计快照引用 (含布线结果) |
via_count | int | 通孔总数量 |
在流程中的位置
RTL ↓ iMap (综合) ↓ iFP (布图规划) ↓ iPDN (电源网络) ↓ iPL (布局) ↓ iCTS (时钟树综合) ↓ iTO (时序优化) ↓ ──────────────────────────── ↓ ◆ iRT (布线引擎) ← 上游输出:布局后 DEF + 时钟树 + 时序优化后的网表 │ → 输入:LEF/DEF、工艺规则、RC 工艺文件 │ [全局布线] ←→ iSTA (布线前时序估算) │ [轨道分配] │ [详细布线] ←→ iDRC (实时 DRC 检查) │ ←→ iRCX (寄生参数提取, 供 iSTA 签核) ↓ ──────────────────────────── ↓ iDRC (设计规则检查) ↓ iLVS (版图与原理图一致性) ↓ GDSII