4. DRC错误分类与优先级判断

当一次 Calibre DRC 运行结束,RVE 里可能同时出现几百甚至上千条违规。如果逐条无差别地看下去,既浪费时间,又容易在真正致命的问题上漏判。因此,诊断的第一步不是"改",而是"分"——按错误类型、严重程度、影响范围三个维度把结果归类,再据此排出处理顺序。本节要建立的,就是一套从致命错误到警告信息的诊断优先级判断方法。

一、三个分类维度分别回答什么问题

错误类型回答"这是哪一类物理问题"。Calibre 的 DRC 结果通常来自不同的规则族:间距类(space)、宽度类(width)、包围/延伸类(enclosure/extension)、重叠类(overlap)、密度类(density)、天线类(antenna)、连接性类(connectivity/LVS 相关)等。同一类错误往往有相同的根因和相同的修法,例如大量 spacing 违规常常来自同一处版图单元被错误复用,而 width 违规往往集中在某个工艺层的最小尺寸处理上。按类型聚类,可以把"一千条错误"压缩成"五六个问题簇"。

严重程度回答"不改会怎样"。这里要区分三个层次:致命(Fatal)——直接导致芯片功能失效或无法制造,例如金属短路、多晶硅断线、阱区未连接;严重(Error)——违反工艺硬性规则,流片厂会拒收,例如最小间距、最小宽度、最小包围不足;警告(Warning)——不影响可制造性,但可能影响良率或可靠性,例如密度梯度偏大、某些推荐性规则(recommended rule)未满足。Calibre 规则文件里通常用不同的 rule check 名称和输出层来区分,很多工艺厂还会在规则名中带 _R(recommended)后缀表示推荐规则。

影响范围回答"会波及多少"。一条错误是孤立在某个标准单元内部,还是横跨整个宏单元、影响所有实例?是只出现在芯片边缘的 seal ring 区域,还是散布在核心逻辑区?影响范围决定了修复的杠杆率:修一处能消掉几百条错误的,优先级天然高于修一处只消一条的。

二、优先级判断的核心逻辑

把三个维度合起来,就得到一条实用的排序原则:先致命、再严重、后警告;同级之内,先修影响范围大的,再修影响范围小的;同范围之内,先修同类型成簇的,再修零散个例。

这条原则背后的道理是:致命错误决定芯片能不能用,必须清零;严重错误决定能不能流片,也必须清零,但数量可能很大,所以要按杠杆率排序;警告信息在时间紧张时可以延后甚至申请豁免(waiver),但必须记录在案。需要特别提醒的是,不要被数量误导——RVE 里显示 800 条 spacing 违规,可能只是同一个单元被例化了 800 次,改一次单元就全消;而 3 条 connectivity 错误,可能意味着电源网络根本没接上,是真正的致命问题。

常见误区:按 RVE 默认的字母顺序或数量多少来处理。数量最多的往往不是最致命的,先处理数量多的容易产生"进展很快"的错觉,却在流片前才发现致命错误没修。

三、分类与优先级判断流程

下面这张图给出从 DRC 结果到优先级队列的完整判断路径。它把"类型聚类—严重程度判定—影响范围评估—排序"四步串起来,并标出了每一步的关键判断依据,可作为实际诊断时的对照图使用。

DRC 结果分类与优先级判断路径 Calibre DRC 结果 RVE / ASCII 报告 ① 按错误类型聚类 space / width / enclosure overlap / density / antenna connectivity ② 判定严重程度 致命 Fatal:短路 / 断线 / 未连接 严重 Error:违反硬性规则 警告 Warning:推荐规则 / 密度 ③ 评估影响范围 单元内孤立 / 单元级复用 宏单元级 / 全芯片散布 核心区 / 边缘 seal ring ④ 生成优先级队列 P0 致命 → 必须清零 P1 严重 → 按杠杆率排序 P2 警告 → 记录 / 申请豁免 ⑤ 修复与复检 改版图 / 改规则 重跑 DRC 验证 优先级排序原则 先致命 → 再严重 → 后警告;同级之内,先修影响范围大的,再修影响范围小的; 同范围之内,先修同类型成簇的,再修零散个例。 关键提醒:数量最多的 ≠ 最致命的,不要被 RVE 计数误导。 P0 致命 Fatal 金属短路 / 多晶硅断线 阱区未连接 / 电源悬空 处理:立即修,必须清零 P1 严重 Error 最小间距 / 最小宽度 最小包围 / 最小延伸 处理:按杠杆率批量修 P2 警告 Warning 密度梯度 / 推荐规则 天线比偏高 / 良率提示 处理:记录 / 申请豁免

四、把分类落到可执行的判断表

实际诊断时,可以把上面的逻辑固化成一张判断表,逐条错误填进去,再按优先级排序。下面给出一个可直接参考的示例结构,字段都取自 DRC 诊断的真实语境。

优先级 错误类型 严重程度 影响范围 典型判断依据 处理动作
P0 connectivity / overlap 致命 全芯片或宏单元级 电源/地网络未连通、金属短路 立即定位并修复,复检清零
P1 space(间距) 严重 单元级复用(成簇) 同一单元被多次例化,错误数=实例数 改单元版图,一次消除全部实例
P1 width(宽度) 严重 局部孤立 某层最小宽度不足,数量少 逐条修正,注意与间距的联动
P1 enclosure / extension 严重 接触孔/通孔区域 包围不足,影响接触可靠性 调整包围尺寸,检查叠层对齐
P2 density(密度) 警告 全芯片分布 密度梯度超推荐值,非硬性 记录,必要时加 dummy fill
P2 antenna(天线) 警告 特定连线 天线比偏高,可能影响良率 评估后加跳线或申请豁免

五、几个容易踩的判断陷阱

陷阱一:把推荐规则当硬性规则。很多工艺厂的规则文件里,推荐规则和硬性规则混在一起输出。判断方法是看规则名后缀和规则文件注释,带 _R 或 REC 的通常是推荐规则,属于 P2。误把推荐规则当致命错误处理,会浪费大量时间。

陷阱二:忽略错误之间的因果关系。一条 width 违规可能导致后续的 enclosure 违规,修了前者,后者自动消失。因此分类之后还要看错误之间有没有依赖,优先修"根因型"错误,而不是按表面类型平均用力。

陷阱三:把影响范围等同于错误数量。RVE 的计数是"违规图形数",不是"问题数"。一个单元被例化 500 次,可能产生 500 条计数,但只是一个问题。判断影响范围要看错误的分布模式:是集中在某个单元、某个区域,还是随机散布。

实操建议:在 RVE 中先用 Highlight 按规则名分组查看,观察错误的分布形态。如果错误在版图上呈现规则的阵列状重复,基本可以判定为单元级复用问题,优先改单元;如果错误零散分布,则逐条处理。分组观察这一步,往往比直接开始改版图节省数倍时间。

建立分类与优先级判断能力之后,面对一次 DRC 结果,你的第一反应应该是"这些错误分几类、哪类最致命、哪类杠杆率最高",而不是"从第一条开始改"。这个思维转变,是 DRC 诊断从体力活变成技术活的分水岭。