核心能力
iNO(Netlist Optimization)是连接逻辑综合与物理实现的关键桥梁。综合工具(iMap)输出的门级网表在逻辑上是正确的,但从物理实现角度看可能存在大量需要修复的问题:高扇出网络(一条 net 驱动数百个 sink)、缺少必要的缓冲级、逻辑冗余、以及不适合后端布局布线的结构。iNO 在 iMap 输出与 iFP 物理规划之间执行这些网表清理与物理准备工作。
Agent 将 iNO 用作网表质量诊断与自动修复的核心工具。具体场景包括:高扇出网络诊断——Agent 调用 iNO 扫描网表,找出所有超过 max_fanout 阈值的 net,生成每条的 fanout 分布报告;对于超过阈值的高扇出 net,iNO 自动生成缓冲树插入 proposal(N 叉缓冲树结构),Agent 评审后 apply;物理准备检查——在网表进入 floorplanning 前,Agent 运行 iNO 的全模式优化(fanout+buffer+full),确保所有 net 的驱动能力、扇出、以及逻辑层级都满足后端工具的要求;面积-时序 trade-off 分析——Agent 尝试不同的 max_fanout 参数(16/32/64),比较插入的 buffer 数量和面积增长,选择最优的 trade-off 点。
在 AI 辅助场景下,Agent 可以收集 iNO 修复的历史数据(哪些类型的 net 容易出现高扇出、哪种 buffer 插入策略在不同工艺下效果最优),训练预测模型在网络综合阶段就预判需要多少 buffer 资源——在 floorplan 阶段预留足够的 buffer 放置区域,避免布局阶段因 buffer 无处放置而导致的拥塞。
iNO 支持三种优化模式:fanout 模式仅修复扇出违例(最小化改动);buffer 模式在修复扇出的同时做缓冲链优化(确保信号完整性);full 模式执行完整的网表重构(包括逻辑冗余消除、反相器对合并、constant propagation 等通用网表优化)。Agent 可根据流程阶段选择合适模式——综合刚结束时用 full 做彻底清理,ECO 阶段用 fanout 做最小改动。
Agent 调用方式
# Agent 调用 iNO 做网表优化
from ieda_client import IEDAClient
client = IEDAClient()
# 基础优化 —— 修复高扇出
result = client.call("iNO.optimize",
design_ref="snap_7f3a",
max_fanout=32)
print(f"Fanout violations fixed: {result['fanout_violations_fixed']}")
print(f"Buffers inserted: {result['buffers_inserted']}")
print(f"Area change: {result['area_change']:+.2f}%")
# Agent 可先 diagnose 再决定 optimize 参数
diag = client.call("iNO.diagnose",
design_ref="snap_7f3a")
high_fanout_nets = [n for n in diag if n['fanout'] > 64]
print(f"Critical high-fanout nets: {len(high_fanout_nets)}")
# 全模式优化 —— 尽量清理网表
result = client.call("iNO.optimize",
design_ref="snap_7f3a",
max_fanout=32,
optimization_mode="full")
{
"tool": "iNO.optimize",
"arguments": {
"design_ref": "snap_7f3a",
"max_fanout": 32,
"optimization_mode": "full"
}
}
# Tcl 交互式网表优化
iNO::set_design snap_7f3a
iNO::set_max_fanout 32
iNO::set_optimization_mode full
iNO::diagnose -report high_fanout.txt
iNO::optimize
iNO::report_changes
iNO::write_netlist -output snap_7f3a.opt.v
输入 / 输出契约
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
design_ref | string | 是 | 设计实例标识符(含综合后网表) |
max_fanout | int | 是 | 最大允许扇出数(超过则插入缓冲树) |
buffer_types | string[] | 否 | 可用缓冲器/反相器类型列表 |
optimization_mode | "fanout"|"buffer"|"full" | 否 | 优化模式(默认 fanout) |
| 返回字段 | 类型 | 说明 |
|---|---|---|
optimized_netlist_ref | string | 优化后网表在 iDB 中的引用 ID |
fanout_violations_fixed | int | 修复的扇出违例数量 |
buffers_inserted | int | 插入的缓冲器/反相器总数 |
area_change | float | 面积变化百分比(正值表示增加) |
在流程中的位置
RTL Source
│
▼
┌─────────────┐
│ iMap │ 逻辑综合(RTL → Gate Netlist)
│ Synthesis │
└──────┬──────┘
│ raw netlist (may have high fanout)
▼
┌─────────────┐
│ iNO │ ← 当前工具:网表优化
│ Netlist Opt │
└──────┬──────┘
│ cleaned netlist
▼
┌─────────────┐
│ iFP │ 布图规划(物理实现第一步)
│ Floorplan │
└──────┬──────┘
│
... 后续步骤 ...
相关资源
论文
Bartlett KA, et al. "Synthesis and Optimization of Multilevel Logic under Timing Constraints." IEEE TCAD, 1986.
查看 →