核心能力
iCTS(Clock Tree Synthesis)负责在标准单元布局完成后,构建从时钟源(PLL/OSC)到所有时序寄存器时钟引脚的缓冲树网络。目标是控制时钟偏斜(skew)在约束范围内、最小化插入延时(latency)、并保证时钟信号的转换时间(transition/slew)满足工艺要求。iCTS 基于 DME(Deferred-Merge Embedding)与 Slew-Aware 的双重框架——自底向上做几何合并、自顶向下做时序传播与矫正。
Agent 可以将 iCTS 从一个"一键构建"的工具升级为可交互的时钟树调试平台。具体场景包括:时钟树结构巡检——Agent 调用 iCTS 的 inspect 能力,遍历时钟树拓扑、检查每个缓冲级的扇出和负载、识别异常长的支路或扇出过大的节点;局部时钟树重综合——在 STA 发现某条时钟路径 skew 超标后,Agent 不是重跑整个 CTS,而是仅对问题子树做局部 rebuild(调整缓冲类型、插入额外缓冲级、或修改走线拓扑);skew 目标调优——Agent 可尝试不同的 skew_target(如 0.02ns vs 0.05ns),观察对 buffer count 和 total latency 的 trade-off,为 PPA 优化提供依据。
在多时钟域设计中,iCTS 先为每个时钟域独立构建时钟树,再通过 iSTA 评估跨域 skew 后做顶层平衡。Agent 可以在多时钟场景下做更智能的协调——识别哪些时钟域之间存在严格的 skew 约束(如源同步接口),优先平衡这些域的时钟树;而对异步时钟域放宽约束以节省面积和功耗。
iCTS 支持可扩展的时序模型:互连线使用 PERI 模型计算 slew、Elmore 模型计算延迟;缓冲器插入延时使用查表法(LUT)加双线性插值。Agent 可以切换为机器学习模型(XGBoost / CatBoost)做更精确的缓冲器延时预测。大规模设计下(寄存器 > 3000),iCTS 自动启用 K-Means 聚类将时钟网分割为子区域分别构建局部树后合并。
Agent 调用方式
# Agent 调用 iCTS 进行时钟树综合
from ieda_client import IEDAClient
client = IEDAClient()
# 基础时钟树构建
result = client.call("iCTS.synthesize",
design_ref="snap_7f3a",
skew_target=0.05,
latency_target=1.0)
# Agent 检查结果,必要时局部重综合
if result['achieved_skew'] > 0.05:
# 对超标子树做 rebuild
repair = client.call("iCTS.rebuild_subtree",
clock_tree_ref=result['clock_tree_ref'],
subtree_root="clk_buf_42",
target_skew=0.03)
# Agent 遍历时钟路径,提取用于 AI 的特征
for path in result['clock_paths']:
print(f"Path: {path['name']}, levels: {path['levels']}")
{
"tool": "iCTS.synthesize",
"arguments": {
"design_ref": "snap_7f3a",
"skew_target": 0.05,
"latency_target": 1.0
}
}
# Tcl 交互式时钟树综合
iCTS::set_design snap_7f3a
iCTS::set_skew_target 0.05
iCTS::set_latency_target 1.0
iCTS::set_buffer_types {BUF_X1 BUF_X2 BUF_X4}
iCTS::synthesize
iCTS::report_clock_tree
iCTS::check_skew -threshold 0.05
iCTS::write_def -output snap_7f3a.cts.def
输入 / 输出契约
| 字段 | 类型 | 必需 | 说明 |
|---|---|---|---|
design_ref | string | 是 | 设计实例标识符(含布局后数据) |
skew_target | float | 是 | 目标时钟偏斜(ns),典型值 0.02–0.10 |
latency_target | float | 是 | 目标插入延迟(ns) |
clock_ports | string[] | 是 | 需构建时钟树的时钟端口列表 |
buffer_types | string[] | 否 | 可用缓冲器类型列表(默认自动选择) |
| 返回字段 | 类型 | 说明 |
|---|---|---|
clock_tree_ref | string | 时钟树在 iDB 中的引用 ID |
achieved_skew | float | 实际达成的全局偏斜(ns) |
achieved_latency | float | 实际平均插入延迟(ns) |
buffer_count | int | 插入的时钟缓冲器总数 |
clock_paths | ClockPath[] | 各条时钟路径的详细信息(延迟、级数、slew) |
在流程中的位置
··· 前置步骤 ···
│
┌─────────────┐
│ iPL │ 标准单元布局完成
│ Placement │
└──────┬──────┘
│ placed design
▼
┌─────────────┐
│ iCTS │ ← 当前工具:时钟树综合
│ Clock Tree │
└──────┬──────┘
│ clock_tree_ref
▼
┌─────────────┐
│ iTO │ 时序优化(hold/DRV 修复)
│ Timing Opt │
└──────┬──────┘
│
▼
┌─────────────┐
│ iRT │ 布线
│ Routing │
└──────┬──────┘
··· 后续步骤 ···