跳到主要内容
Optimization Engine · CURRENT

iTO · 时序优化

时序与 DRV 优化引擎。Agent 可以 diagnose 时序违例、生成 resize/VT swap/buffer 等 ECO proposal、apply 后验证——形成闭环的时序修复工作流。

开源 EDAAgent 可调用闭环 ECOGPL-3.0
agent — ito
# Agent-driven timing ECO loop
[iTO  ] diagnose   func_worst
[iTO  ] violations         142
[iTO  ] proposals           37
[iTO  ] applied             31
→ WNS improved -0.12 → -0.03
iMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout modeliMapsynthesisiFPfloorplaniPDNpoweriPLplacementiCTSclockiTOoptimizationiRTroutingiSTAtimingAiEDAdesign dataiPCLlayout model
CTS 后/布线后关键步骤
Agent可调用
闭环 ECO诊断→提案→应用→验证
GPL-3.0开源许可

核心能力

iTO 是 iEDA 流程中承上启下的时序收敛引擎——它不负责做静态时序分析(那是 iSTA 的工作),而是基于 STA 的诊断结果,生成并执行时序修复方案。iTO 在 CTS 后和布线后两个关键节点介入:CTS 后主要修复 hold 违例(时钟树引入的 skew)和 setup 违例(长路径);布线后做 post-route ECO——在尽量不改变布线拓扑的前提下修复 residual 时序违例。

Agent 与 iTO 的协作是 EDA Agent 工作流中最具闭环特征的场景:diagnose → generate proposals → evaluate → apply → re-ST A → verify。Agent 调用 iTO.diagnose 获取违例路径列表和每条的 slack/WNS 分布;然后调用 iTO.optimize 生成 ECO proposals(包括 resize 驱动能力、VT swap、buffer insertion、gate sizing 等候选操作);Agent 可根据自身策略筛选 proposal 子集(如只选面积增加 < 5% 的修改、优先不改变布线的 ECO);apply 后调用 iSTA 验证修复效果。如果仍有违例,Agent 可调整 strategy(conservative → aggressive)或 target_slack 进入下一轮迭代。

在 AI 增强场景下,Agent 可将 iTO 的 diagnose 输出(违例路径特征:级数、单元类型分布、线长估计、VT 混合比例)作为输入特征,用学习模型预测哪种修复策略最可能成功,从而减少 trial-and-error 的轮次。对于高频出现的违例模式(如某类 buffer 总是 under-drive),Agent 可以将其记录为 rule,在后续设计中提前预防。

iTO 的优化算法基于 Lagrangian Relaxation 和贪心 gate sizing 框架。Agent 可调参数包括:优化策略(conservative 只做最小改动、aggressive 允许大幅面积换取时序)、target_slack(修复 slack 到多少即停止)、max_iterations(最大迭代轮数)。iTO 与 iSTA 深度绑定——每次 optimize 调用前后都需要 STA 提供 timing graph 和 slack 信息。

Agent 调用方式

Python
MCP
Tcl
# Agent 调用 iTO 做闭环时序修复
from ieda_client import IEDAClient

client = IEDAClient()

# Step 1: 诊断违例
proposals = client.call("iTO.diagnose",
    design_ref="snap_7f3a",
    scenario="func_worst")

# Agent 可 inspect 每一条 proposal
for p in proposals:
    print(f"{p['path']}: slack={p['slack']}, type={p['violation_type']}")

# Step 2: 执行优化(保守策略)
result = client.call("iTO.optimize",
    design_ref="snap_7f3a",
    scenario="func_worst",
    strategy="conservative",
    max_iterations=10)

# Step 3: Agent 验证结果
print(f"Changes applied: {result['applied_changes']}")
print(f"New WNS:         {result['new_wns']}")
print(f"New TNS:         {result['new_tns']}")

# Step 4: 如果 WNS 仍为负,切换 aggressive 策略
if result['new_wns'] < 0:
    result = client.call("iTO.optimize",
        design_ref="snap_7f3a",
        scenario="func_worst",
        strategy="aggressive")
{
  "tool": "iTO.optimize",
  "arguments": {
    "design_ref": "snap_7f3a",
    "scenario": "func_worst",
    "strategy": "conservative"
  }
}
# Tcl 交互式时序优化
iTO::set_design snap_7f3a
iTO::set_scenario func_worst
iTO::set_strategy conservative
iTO::optimize -design snap_7f3a -scenario func_worst -strategy conservative
iTO::report_proposals
iTO::apply_proposals -count 20
iTO::write_def -output snap_7f3a.opt.def

输入 / 输出契约

字段类型必需说明
design_refstring设计实例标识符
scenariostring时序场景:func_worst / func_best / func_typical
strategy"conservative"|"aggressive"优化策略:保守(最小改动)或激进(大面积 trade-off)
target_slackfloat目标 slack 值(ns),达到后停止优化
max_iterationsint最大优化迭代轮数(默认 20)
返回字段类型说明
proposalsECOProposal[]生成的 ECO 修改提案列表
estimated_improvementTimingImprovement预估的时序改善(WNS/TNS delta)
applied_changesint实际应用的修改数量
new_wnsfloat优化后的最差负 slack(WNS, ns)
new_tnsfloat优化后的总负 slack(TNS, ns)

在流程中的位置

    ··· 前置步骤 ···
         │
  ┌─────────────┐
  │    iCTS     │  时钟树综合完成
  │ Clock Tree   │
  └──────┬──────┘
         │  cts design
         ▼
  ┌─────────────┐
  │   iTO      │  ← 当前工具:时序优化(CTS 后)
  │ Timing Opt   │
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │    iRT      │  布线
  │   Routing    │
  └──────┬──────┘
         │  routed design
         ▼
  ┌─────────────┐
  │   iTO      │  ← 再次介入:Post-Route ECO
  │ Timing Opt   │
  └──────┬──────┘
         │
         ▼
  ┌─────────────┐
  │  iSTA Signoff│  签核时序验证
  └─────────────┘
上游:iCTS(CTS 后)或 iRT(布线后) 下游:iRT(布线)或 Signoff STA 协同:iSTA(提供 timing graph 和 slack 诊断)

相关资源

论文

Hu J, et al. "Gate Sizing for Cell Library-Based Designs." IEEE TCAD, 2007. Lagrangian Relaxation 框架。

查看 →

论文

Kahng AB, et al. "Timing Closure with Gate Sizing and VT Assignment." DAC, 2013.

查看 →

关联工具

iSTA · 时序分析 —— iTO 的依赖引擎,提供全芯片 timing graph。

iSTA →

关联工具

iCTS · 时钟树 —— iTO 修复的 hold/setup 违例很大部分产生于 CTS。

iCTS →

GitHub

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

GitHub →

关联工具

iRT · 布线 —— 布线后 ECO 阶段与 iTO 协同修复 residual 违例。

iRT →

诊断→提案→应用→验证:闭环时序收敛

不再盲目调参——Agent 看清楚每条违例路径,精确 apply 最有效的 ECO 方案。