跳到主要内容
Route Engine · CURRENT

iRT · 布线引擎

全局与详细布线引擎。Agent 可以对 frozen nets 做局部重布线、在不破坏已完成布线的前提下修复局部 DRC——把布线问题从全局灾难降级为局部修复。

Route Engine CURRENT Tcl API Python SDK MCP
agent — iRT
# Agent calls iRT for routing
>>> client.call("iRT.route",
...   design_ref="snap_7f3a",
...   effort="standard",
...   nets=["net_1234", "net_5678"])
[iRT ] global route done     completed=12,802
[iRT ] track assign done     wirelength=4.2e6
[iRT ] detail route done     drc=0 via=24,531
→ design_ref: snap_7f3a_v3
iRT routingGR globalTA track assignDR detailMaze routerA* searchDRC clean3D gridiRT routingGR globalTA track assignDR detailMaze routerA* searchDRC clean3D grid

核心能力

全局布线 (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)

结合 netsfrozen_nets 参数,Agent 实现精确的局部重布线:指定需要修复的线网列表、锁定其他所有线网,iRT 在新的约束边界内做迷宫搜索。操作完成后,drc_count 返回仍存在的 DRC 数量、failed_nets 返回无法完成布线的线网列表。Agent 可利用这些信息决定下一步动作——尝试不同的 net ordering、调整布线参数、或请求人工介入。

Agent 调用方式

iRT 提供三种等价的调用协议。

Python
MCP
Tcl

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_refstring设计快照引用,包含布局后单元坐标、线网列表、工艺信息
effort"estimate" | "standard" | "in-design"estimate: 仅全局布线估算拥塞;standard: 完整三阶段;in-design: 局部重布线
netsstring[][] (全部)需要布线的线网列表(用于局部重布线)
frozen_netsstring[][]冻结线网列表——这些线网的布线结果不会被修改

Result Schema

字段类型说明
completed_netsint成功完成布线的线网数量
failed_netsint无法完成布线的线网数量
drc_countint残留的 DRC 违例数量
wirelengthfloat总线长 (所有完成线网的总走线长度)
design_refstring新设计快照引用 (含布线结果)
via_countint通孔总数量

在流程中的位置

RTL
 ↓
 iMap (综合)
 ↓
 iFP (布图规划)
 ↓
 iPDN (电源网络)
 ↓
 iPL (布局)
 ↓
 iCTS (时钟树综合)
 ↓
 iTO (时序优化)
 ↓
────────────────────────────
 ↓
◆ iRT (布线引擎)      ← 上游输出:布局后 DEF + 时钟树 + 时序优化后的网表
 │                         → 输入:LEF/DEF、工艺规则、RC 工艺文件
 │  [全局布线]              ←→ iSTA (布线前时序估算)
 │  [轨道分配]
 │  [详细布线]              ←→ iDRC (实时 DRC 检查)
 │                         ←→ iRCX (寄生参数提取, 供 iSTA 签核)
 ↓
────────────────────────────
 ↓
 iDRC (设计规则检查)
 ↓
 iLVS (版图与原理图一致性)
 ↓
 GDSII
上游依赖iPL (布局)、iCTS (时钟树)、iTO (时序优化) — 需要单元坐标、时钟走线、优化后的网表
下游消费者iSTA (布线后带 parasitics 的签核时序分析)、iDRC (设计规则检查)、iRCX (寄生参数提取)
并发交互详细布线阶段与 iDRC 紧密交互——每完成一根线网布线即做 DRC 检查,DRC clean 后才写入 iDB

布线结果即时可验证

iRT 完成后,设计状态自动附带布线几何数据——iDRC 可立即做增量 DRC 检查,iSTA 可用 iRCX 提取的 parasitics 做签核时序分析。