核心能力
多规则几何检查
iDRC 支持全套基本几何设计规则检查,涵盖:spacing (间距检查——同层/不同层金属、通孔间的最小间距)、width (宽度检查——金属线、通孔的最小/最大宽度)、enclosure (包围检查——金属对通孔的包围、通孔对金属的包围)、area (面积检查——金属多边形的最小面积)、notch (缺口检查——金属多边形内的凹槽宽度) 等。Agent 通过 rules 参数精确指定需要执行的规则集合 (如 ["spacing", "width"]) 或使用 ["all"] 执行全量检查。每种规则的检查结果独立返回,Agent 可以直接定位违例类型而不需解析日志。
增量 DRC (Dirty Region)
全芯片 DRC 是 EDA 流程中最耗时的步骤之一。iDRC 的增量模式通过跟踪自上次检查以来修改过的几何区域 (dirty region),仅在这些受限区域内重新执行 DRC 检查。当 Agent 在 incremental=true 模式下调用 iDRC.check,iDRC 自动从 iDB 获取 dirty region 信息,合并重叠区域后做局部验证。典型场景下(如布线器修复了 5 根线网),增量 DRC 的运行时间仅为全芯片 DRC 的 2% 到 10%。检查完成后返回 clean_regions 列表——表示已验证无违例的区域边界。
区域限定检查
Agent 可通过 region 参数 (BBox) 将 DRC 检查限定在特定的矩形区域内。这在交互式修复场景中尤其有用——Agent 识别出一个违例区域后,可以仅对该区域及其扩展边界做反复的"修改-检查"循环,每次仅花费毫秒级时间,无需等待全芯片验证。结合 rules 参数,Agent 可以聚焦特定规则类型和特定区域,将 DRC 检查从批处理模式转变为交互式反馈环。
分类违例报告
iDRC 返回的违例报告是结构化的:每条违例 Violation 包含违例类型、涉及的图层、坐标 (BBox)、涉及的几何对象引用、以及严重级别。不同于传统工具的文本 DRC 报告 (需要正则解析),这种结构化输出让 Agent 可以直接遍历违例列表,按类型分组、按区域聚类、按严重性排序——从而实现自动化违例分类和修复优先级排序。这为 Agent 构建"自主 DRC 修复"闭环提供了数据基础。
Agent 调用方式
iDRC 提供三种等价的调用协议。
Python SDK
from ieda import Client client = Client("http://localhost:9099") # Full DRC check (all rules) drc = client.call( "iDRC.check", design_ref="snap_7f3a", rules=["all"], incremental=False, ) print(drc.violation_count) # 0 print(drc.coverage) # 1.0 (100% area checked) # Incremental DRC: only check dirty regions incr = client.call( "iDRC.check", design_ref="snap_7f3a", rules=["spacing", "width", "enclosure"], incremental=True, ) print(incr.violation_count) # 3 for v in incr.violations: print(v.rule, v.layer, v.bbox, v.severity) # enclosure, M2, [(100,200),(150,220)], ERROR print(incr.clean_regions) # verified-clean bounding boxes # Region-limited DRC for interactive repair loop region_check = client.call( "iDRC.check", design_ref="snap_7f3a", rules=["spacing"], region={"x0": 100, "y0": 200, "x1": 300, "y1": 400}, )
输入/输出契约
Request Schema — iDRC.check
| 参数 | 类型 | 必需 | 默认值 | 说明 |
|---|---|---|---|---|
design_ref | string | 是 | — | 设计快照引用,包含完整的版图几何数据 |
rules | string[] | 是 | — | 规则列表:spacing, width, enclosure, area, notch 等;["all"] 为全量检查 |
incremental | bool | 否 | false | 是否仅对 dirty region 做增量检查 |
region | BBox | 否 | null (全芯片) | 限定检查区域的边界框 {x0, y0, x1, y1} |
Result Schema
| 字段 | 类型 | 说明 |
|---|---|---|
violation_count | int | 违例总数 |
violations | Violation[] | 违例详情列表:rule, layer, bbox, objects, severity |
clean_regions | BBox[] | 已验证无违例的区域边界列表(增量模式下尤其有价值) |
coverage | float | 检查覆盖率 (0.0 ~ 1.0),表示实际被检查的版图面积比例 |
design_ref | string | 关联的设计快照引用 |
在流程中的位置
iDRC 主要出现在布线后的物理验证阶段,但增量模式使其在 ECO 循环中也极其有用。
RTL → iMap → iFP → iPDN → iPL → iCTS → iTO → iRT
│
布线完成后 │
↓
──────────
↓
◆ iDRC (设计规则检查)
│ [spacing] [width]
│ [enclosure] [area]
│ [notch] [min-step] ...
│
↓ DRC Clean?
│
Yes │ No
│ │
↓ ↓
iLVS iECO (工程变更)
(LVS 检查) │
│ ↓
↓ iRT (局部重布线)
GDSII │
↓
iDRC (增量再检查)
↑
└────── loop ──────┘