第三章 DRC实战:Calibre DRC设置与运行、DRC结果分析(RVE界面)、常见DRC违例修复技巧
各位同学,欢迎来到DRC实战环节。说实话,DRC(设计规则检查)是物理验证里最基础、也最磨人的一步。我做了十五年芯片,见过太多新手在DRC上栽跟头——不是跑不起来,就是跑完了看不懂结果。今天咱们就把它彻底讲透。
核心要点:DRC不是跑一遍就完事,它是一个迭代收敛的过程。你想想看,一个千万门级的芯片,DRC违例动辄上万条,怎么快速定位、怎么高效修复,这才是真功夫。
3.1 Calibre DRC设置与运行
先说说Calibre DRC怎么跑。我个人习惯用图形界面和命令行两种方式。图形界面适合调试,命令行适合批量跑。
3.1.1 基本设置
跑DRC之前,你得准备好三样东西:
- GDS文件:你的版图数据
- DRC规则文件:代工厂提供的,通常是.svf或.rule格式
- 运行目录:存放中间文件和结果
在Calibre Interactive界面里,设置起来很简单:
# 输入文件设置
Input Layout: top.gds
Input Layout Primary Cell: CHIP_TOP
# 规则文件
DRC Rules File: foundry_28nm_drc.rule
# 输出设置
DRC Results Database: drc_results.db
DRC Summary Report: drc_summary.rpt
嗯,这里要注意:规则文件一定要跟工艺节点匹配。我曾经见过有人拿40nm的规则去跑28nm的版图,结果跑出来几万条假违例,白白浪费了两天时间。
3.1.2 运行命令
命令行方式更灵活,适合自动化流程:
calibre -drc -hier -turbo 4 foundry_28nm_drc.rule | tee drc_run.log
参数说明:
-drc:指定运行DRC模式-hier:层次化检查,速度快很多-turbo 4:用4个线程并行跑| tee drc_run.log:把输出同时保存到日志文件
我的经验:跑大芯片时,建议先用flat模式跑一个小区域验证规则文件是否正确,确认无误后再用hier模式跑全芯片。不然跑了一整天发现规则文件配错了,那才叫欲哭无泪。
3.2 DRC结果分析(RVE界面)
跑完DRC,接下来就是分析结果。Calibre的RVE(Results Viewing Environment)界面,说白了就是一个违例浏览器。我刚开始用的时候也觉得眼花缭乱,但用顺手了就会发现它真的很强大。
3.2.1 打开RVE
在Calibre界面里,跑完DRC后直接点"Results -> Start RVE"就行。或者命令行:
calibre -rve drc_results.db &
3.2.2 读懂违例报告
RVE界面左边是违例列表,右边是版图视图。每个违例都有几个关键信息:
| 字段 | 含义 | 我的建议 |
|---|---|---|
| Rule Name | 违反的规则名称 | 先看这个,判断违例类型 |
| Cell Name | 违例所在的模块 | 定位到具体模块 |
| Coordinate | 违例的坐标位置 | 双击直接跳转到版图 |
| Severity | 严重程度(Error/Warning) | 先修Error,Warning可以酌情处理 |
为什么会这样?因为有些Warning其实是代工厂留的余量,不一定真的会出问题。我一般会先看Error,把硬伤修掉,再回头处理Warning。
3.2.3 违例分类与筛选
RVE里有个很实用的功能——按规则分组。比如你看到一堆"METAL1.SPACE"违例,说明都是金属1间距问题。这时候可以批量处理,效率高很多。
避坑指南:我曾经遇到过一个项目,DRC报告显示有5000条违例,吓我一跳。后来仔细一看,其中4800条都是同一个规则"VIA1.ENC"(通孔包围)的违例,而且都集中在同一个模块里。原来是那个模块的版图工程师忘了加通孔包围层。找到根因后,改一个脚本就全修好了。
3.3 常见DRC违例修复技巧
好了,现在咱们来看最常见的几种DRC违例怎么修。我按出现频率排个序:
3.3.1 间距违例(Space Violation)
这是最常见的,说白了就是两条线离得太近了。
- 原因:布线太密,或者单元摆放太挤
- 修复方法:
- 手动拉开:在版图编辑器里直接拖动
- 自动修复:用Calibre的DRC Fix功能(但要注意别引入新违例)
- 调整布局:如果违例太多,可能需要重新摆放标准单元
小技巧:对于金属层的间距违例,我习惯用"推挤"命令(Edit -> Stretch),比手动拖动精确得多。按住Shift键可以保持45度角走线。
3.3.2 宽度违例(Width Violation)
线宽不够,或者线宽变化太剧烈。
- 原因:走线时拐角太急,或者via处线宽突变
- 修复方法:
- 加宽走线:选中线段,直接改宽度属性
- 加渐变过渡:在宽窄变化处加一段45度斜线过渡
- 换层走线:如果当前层最小线宽限制太严,可以换到更宽松的层
3.3.3 包围违例(Enclosure Violation)
via或contact周围的金属层不够大。
- 原因:via离金属边缘太近
- 修复方法:
- 扩大金属区域:在via周围加一圈金属
- 移动via:把via往金属中间挪一挪
- 换大via:如果空间允许,换用更大的via
3.3.4 密度违例(Density Violation)
这个比较特殊,是工艺制造的要求。金属密度太高或太低都不行。
- 原因:大片空白区域或者大片实心金属
- 修复方法:
- 加dummy metal:在空白区域填充虚拟金属块
- 挖slot:在大块金属上开槽
- 用自动填充工具:Calibre有专门的密度填充功能
重要提醒:修复违例时,一定要做"回归检查"。什么意思呢?就是你修好一个违例,可能又引入了新的违例。我见过最夸张的一次,一个工程师修了100条违例,结果新产生了200条。所以每修完一轮,必须重新跑DRC验证。
3.4 DRC修复的黄金法则
最后,分享几条我总结的DRC修复法则:
- 先易后难:先修那些一眼就能看出来的简单违例,比如间距、宽度问题。复杂的违例(比如天线效应、密度问题)放到后面。
- 批量处理:同类型的违例,用脚本或工具批量修,别一条一条手动改。
- 追根溯源:如果某个模块反复出现违例,别光修表面,要找到根本原因。是标准单元库的问题?还是布线策略的问题?
- 保留现场:每次修改前,备份原始版图。我吃过这个亏——改完发现改错了,想回退结果没有备份,只能重新跑一遍流程。
总结一下:DRC不是技术活,是体力活?不对,DRC其实是经验活。你修得多了,自然就知道哪些违例可以忽略,哪些必须修,哪些可以用脚本批量处理。我带了这么多届新人,最快上手的那位,就是因为他肯花时间研究违例的规律,而不是闷头一条一条改。
好了,这一章的内容就到这里。记住:DRC跑得快不如看得准,看得准不如修得巧。多练、多总结,你也能成为DRC高手。