核心能力
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 调用方式
# 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_ref | string | 是 | 设计实例标识符 |
scenario | string | 是 | 时序场景:func_worst / func_best / func_typical |
strategy | "conservative"|"aggressive" | 是 | 优化策略:保守(最小改动)或激进(大面积 trade-off) |
target_slack | float | 否 | 目标 slack 值(ns),达到后停止优化 |
max_iterations | int | 否 | 最大优化迭代轮数(默认 20) |
| 返回字段 | 类型 | 说明 |
|---|---|---|
proposals | ECOProposal[] | 生成的 ECO 修改提案列表 |
estimated_improvement | TimingImprovement | 预估的时序改善(WNS/TNS delta) |
applied_changes | int | 实际应用的修改数量 |
new_wns | float | 优化后的最差负 slack(WNS, ns) |
new_tns | float | 优化后的总负 slack(TNS, ns) |
在流程中的位置
··· 前置步骤 ···
│
┌─────────────┐
│ iCTS │ 时钟树综合完成
│ Clock Tree │
└──────┬──────┘
│ cts design
▼
┌─────────────┐
│ iTO │ ← 当前工具:时序优化(CTS 后)
│ Timing Opt │
└──────┬──────┘
│
▼
┌─────────────┐
│ iRT │ 布线
│ Routing │
└──────┬──────┘
│ routed design
▼
┌─────────────┐
│ iTO │ ← 再次介入:Post-Route ECO
│ Timing Opt │
└──────┬──────┘
│
▼
┌─────────────┐
│ iSTA Signoff│ 签核时序验证
└─────────────┘
相关资源
论文
Hu J, et al. "Gate Sizing for Cell Library-Based Designs." IEEE TCAD, 2007. Lagrangian Relaxation 框架。
查看 →