第三章 DRC实战:使用Aether运行DRC、结果查看与定位、常见DRC违例修复方法

3.1 为什么DRC这么重要?

说实话,我刚入行那会儿,对DRC(设计规则检查)的理解就是「跑一遍,改错,再跑一遍」。直到有一次,我负责的一个28nm项目,因为一条金属间距违例没改干净,流片回来直接短路——那批晶圆报废了将近一半。嗯,从那以后,我再也不敢把DRC当成走过场了。

DRC说白了,就是检查你的版图是否符合代工厂的工艺规则。这些规则不是随便定的,它们直接决定了芯片能不能被造出来。比如最小线宽、最小间距、孔重叠面积等等,每一条背后都是工艺工程师的血泪教训。

核心要点:DRC不是「找茬」,而是「保命」。你改掉的每一条违例,都可能避免一次流片失败。

3.2 使用Aether运行DRC

我们团队一直用华大九天的Aether工具做物理验证。我个人习惯把DRC跑在版图设计的最后阶段,但有些老工程师喜欢边画边跑——这个看个人风格,我建议新手还是等版图基本定型后再跑,不然改起来太频繁,心态容易崩。

3.2.1 准备工作:加载规则文件

在Aether里跑DRC,第一步是加载代工厂提供的规则文件。通常是`.drc`或`.rul`格式。我记得第一次接触这个,找了半天菜单,后来发现其实很简单:

// 在Aether命令行或菜单中
// 选择:Tools -> DRC -> Load Rule File
// 或者直接输入命令:
drc_load_rule /path/to/your/rule_file.drc

这里有个坑:规则文件版本一定要和工艺节点匹配。我曾经因为用了旧版本的规则文件,跑出来一堆假违例,浪费了整整两天去排查。后来学乖了,每次开工前先核对文件日期。

3.2.2 设置DRC运行参数

加载完规则文件,接下来要设置运行范围。你可以选择跑全芯片,也可以只跑某个模块。我一般先跑全芯片的「快速模式」,看看有没有明显的大问题,再针对性地跑详细模式。

参数 说明 我的建议
Run Mode Full Chip / Hierarchical 第一次跑用Full Chip,后续用Hierarchical加速
Check Level Basic / All 先Basic快速过一遍,最后用All收尾
Output Format GDS / ASCII / Database 选Database,方便后续定位

小技巧:跑DRC之前,先确认版图里没有悬空的浮栅或孤立的图形。这些「垃圾」会引发大量假违例,干扰你判断。我习惯用Aether的「Clean Layout」功能先扫一遍。

3.2.3 启动DRC运行

设置好参数后,点击「Run」按钮。Aether会开始逐条检查规则。这个过程可能几分钟到几小时不等,取决于芯片规模和规则数量。我一般趁这个时间去喝杯咖啡,或者看看邮件——别傻等着,容易焦虑。

// 运行命令示例
drc_run -mode full -check all -output drc_result.db

运行过程中,Aether会实时输出日志。我建议你盯着日志看几眼,如果出现大量「Error」或「Fatal」,赶紧停掉,先排查规则文件或版图本身的问题。别等到跑完了才发现方向错了。

3.3 DRC结果查看与定位

跑完DRC,你会得到一个结果文件。Aether提供了两种查看方式:图形界面和文本报告。我个人更喜欢图形界面,因为能直接看到违例在版图上的位置,直观得多。

3.3.1 打开DRC结果

在Aether里,选择:

Tools -> DRC -> Load Results
选择你刚才生成的 .db 文件

加载后,版图上会高亮显示所有违例。不同颜色代表不同类型的违例,比如红色是间距问题,蓝色是宽度问题,黄色是孔重叠问题。这个配色可以自定义,但我建议用默认的,因为团队里大家都认这套。

3.3.2 查看违例详情

双击任意一个违例,Aether会弹出详细信息窗口。里面会告诉你:

  • 违例的规则名称(比如 M1_SPACE_0.1)
  • 违例的具体坐标
  • 违例的图形类型和层次
  • 期望值和实际值

举个例子,有一次我看到一条违例写着「M1_SPACE_0.1: Expected >= 0.1um, Actual 0.08um」。这意思很明确:两条M1金属线之间的距离只有0.08微米,但规则要求至少0.1微米。那怎么办?拉开距离呗。

注意:别只看坐标就动手改。先确认这个违例是不是「假违例」。比如有些规则对特定结构有豁免,或者你的版图里用了特殊的dummy填充。我见过有人把合法的dummy结构当成违例给删了,结果引入了新的问题。

3.3.3 批量定位与分类

当违例数量很多时(比如上千条),一条条改是不现实的。Aether提供了分类功能,可以按规则类型、层次、区域等维度分组。我一般先看「Top 10违例类型」,集中精力解决那些出现频率最高的。

你想想看,如果1000条违例里,有800条都是同一种间距问题,那你只需要找到这个问题的根因,批量修复就行了。没必要每条都单独处理。

3.4 常见DRC违例修复方法

这部分是我最想分享的。这些年我见过的DRC违例,翻来覆去就那么几类。掌握了它们的修复套路,你就能应对90%的情况。

3.4.1 间距违例(Space Violation)

这是最常见的违例类型。两条同层金属或不同层金属之间的距离不够。

修复方法:

  • 拉开距离:直接移动其中一条线,增加间距。这是最直接的方法。
  • 改变走线路径:如果空间紧张,可以绕一下,走更宽的路径。
  • 换层:把其中一条线换到其他层,利用层间距离规则更宽松的特点。

我曾经在一个项目中,遇到M2层间距违例扎堆。后来发现是因为标准单元库的M2出pin位置太密。我花了半天时间,把部分走线换到M3层,问题就解决了。说白了,就是「别在一棵树上吊死」。

3.4.2 宽度违例(Width Violation)

金属线或多晶硅的宽度小于工艺要求的最小值。

修复方法:

  • 加宽线宽:直接拉伸图形,使其达到最小宽度要求。
  • 检查连接关系:有时候宽度不够是因为图形被切断了,需要重新连接。
  • 使用宽线模板:对于关键信号,我建议直接使用工艺库提供的宽线模板,省心。

避坑指南:我曾经为了省面积,把一条时钟线的宽度压到刚好满足规则。结果流片回来,这条线的电阻偏大,导致时钟歪斜超标。后来我学到一个原则:关键信号(时钟、复位、电源)的线宽,至少留20%的余量。

3.4.3 孔重叠违例(Via Overlap Violation)

通孔(Via)与上下层金属的重叠面积不够。

修复方法:

  • 增大孔尺寸:如果空间允许,直接换用更大的通孔。
  • 增加孔数量:一个孔不够,就用多个孔并联。这还能降低电阻。
  • 调整金属覆盖:把上下层金属的覆盖区域扩大,确保孔完全被包住。

我记得有一次,一个电源网络上的通孔违例特别多。我检查后发现,是因为电源线太窄,导致孔放不下。后来我把电源线加宽了,顺便也降低了IR Drop——一举两得。

3.4.4 天线效应违例(Antenna Violation)

这个比较特殊,我在下一章会详细讲。简单说,就是长金属线在刻蚀过程中会像天线一样收集电荷,可能击穿栅氧化层。

修复方法(快速预览):

  • 插入天线二极管
  • 跳层走线
  • 增加栅极保护结构

3.5 本章小结

DRC实战,说白了就是三件事:跑得对、看得准、改得巧。跑之前检查规则文件和版图质量,跑之后分类定位优先解决高频违例,改的时候留好余量、别贪面积。

我见过太多新手,一上来就闷头改违例,改完发现又引入了新的违例,陷入死循环。其实你只要停下来想一想:这条违例的根因是什么?有没有更聪明的改法?往往能省下大把时间。

嗯,今天就聊到这儿。下一章我们专门讲天线效应,那是我个人觉得最「玄学」但又最需要认真对待的物理验证问题。


公众号:蓝海资料掘金营,微信deep3321