跳到主要内容
Signoff Engine · CURRENT

iDRC · 设计规则检查

几何设计规则检查引擎。Agent 可以做增量 DRC 检查、只验证 dirty region、获取分类的违例报告——在每次局部修改后快速确认没有引入新的规则违例。

Signoff Engine CURRENT Tcl API Python SDK MCP
agent — iDRC
# Agent checks DRC incrementally
>>> client.call("iDRC.check",
...   design_ref="snap_7f3a",
...   rules=["spacing", "width", "enclosure"],
...   incremental=True)
[iDRC] spacing check         violations=0
[iDRC] width check           violations=0
[iDRC] enclosure check       violations=3
 clean_regions: 94% area covered
iDRC signoffspacing checkwidth checkenclosure checkarea checknotch checkincremental modedirty regioniDRC signoffspacing checkwidth checkenclosure checkarea checknotch checkincremental modedirty region

核心能力

多规则几何检查

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
MCP
Tcl

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_refstring设计快照引用,包含完整的版图几何数据
rulesstring[]规则列表:spacing, width, enclosure, area, notch 等;["all"] 为全量检查
incrementalboolfalse是否仅对 dirty region 做增量检查
regionBBoxnull (全芯片)限定检查区域的边界框 {x0, y0, x1, y1}

Result Schema

字段类型说明
violation_countint违例总数
violationsViolation[]违例详情列表:rule, layer, bbox, objects, severity
clean_regionsBBox[]已验证无违例的区域边界列表(增量模式下尤其有价值)
coveragefloat检查覆盖率 (0.0 ~ 1.0),表示实际被检查的版图面积比例
design_refstring关联的设计快照引用

在流程中的位置

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 ──────┘
主要阶段布线后 (post-route) 物理签核验证;ECO 后增量再验证
上游依赖iRT (布线) — 提供完整版图几何;iECO — 提供变更区域信息
下游消费者iLVS (版图与原理图一致性检查) — 仅在 DRC clean 后执行;Tape-out 流程

DRC clean 不是终点——是可自动化的起点

iDRC 的结构化违例报告让 Agent 理解几何约束,增量模式让验证成为快速反馈环而非批处理瓶颈。