第二章 设计规则检查(DRC)基础:DRC的概念、DRC检查的内容(宽度、间距、密度等)、DRC规则文件格式(SVRF/TVF)
各位好,欢迎来到第二章。今天我们来聊聊DRC——设计规则检查。
说实话,我刚入行那会儿,觉得DRC就是个“找茬”的工具。后来吃过亏才明白,它其实是保护我们不被流片失败的“守门员”。
2.1 DRC到底是什么?
DRC,全称Design Rule Check,设计规则检查。说白了,就是检查你的版图有没有违反工艺厂定下的“规矩”。
你想想看,芯片制造是一个物理过程。光刻、刻蚀、沉积……每一步都有物理极限。如果两条金属线靠得太近,光刻时可能连在一起,造成短路。如果一根线太细,电流一大会烧断。这些“规矩”就是设计规则。
DRC就是自动检查这些规则的工具。它读入你的版图,一条一条规则去比对,最后告诉你:哪里有问题,哪里需要改。
核心要点:DRC不是可做可不做的步骤。它是流片前的“必过项”。规则没跑通,工厂根本不会接你的单子。
2.2 DRC检查哪些内容?
DRC检查的内容很多,但归纳起来,主要就这几大类。我按项目里最常见的顺序来讲。
2.2.1 宽度检查(Width)
宽度检查,就是看你的走线、有源区、多晶硅等图形,宽度是否满足最小要求。
举个例子,某工艺要求金属1最小宽度0.18μm。你画了一根0.15μm的线,DRC就会报错。
我在项目中遇到过一件事:有个同事为了省面积,把电源线画窄了。DRC报了错,他觉得“就一点点,应该没事”。结果流片回来,那根线在高压下直接熔断了。嗯,从那以后,我再也不敢在宽度上“讨价还价”。
2.2.2 间距检查(Spacing)
间距检查,就是看两个图形之间的距离够不够。这是DRC里最常报错的项目之一。
为什么间距这么重要?因为光刻时,靠得太近的图形会互相干扰。轻则影响良率,重则直接短路。
间距检查分很多种:
- 同层间距:比如金属1到金属1的距离
- 异层间距:比如金属1到金属2的垂直距离
- 阱间距:不同电位阱之间的距离
我的小技巧:画版图时,我习惯把间距留得比规则要求多10%-20%。这样即使工艺有波动,也能保证良率。这叫“设计余量”,老工程师都懂。
2.2.3 密度检查(Density)
密度检查,很多人容易忽略。但它其实很关键。
什么叫密度?就是单位面积内,某种材料的覆盖率。比如金属密度,要求30%-70%。
为什么会这样?因为化学机械抛光(CMP)时,密度不均匀会导致表面不平整。密度太低的地方,会被磨掉太多;密度太高的地方,又磨不掉。
我曾经有个项目,金属密度只有25%。DRC报了密度违规。我加了几个“虚拟填充”(dummy fill)图形,把密度提到40%,才通过。
2.2.4 其他常见检查项
除了上面三个,还有不少检查项:
| 检查项 | 说明 | 常见违规原因 |
|---|---|---|
| 包围检查(Enclosure) | 一层图形必须被另一层完全包围 | 接触孔没被金属完全覆盖 |
| 面积检查(Area) | 图形面积不能小于最小值 | 过孔面积太小,电流密度过大 |
| 天线效应检查(Antenna) | 长走线在刻蚀时积累电荷 | 栅极连接的长金属线 |
| 孔阵列检查(Array) | 过孔阵列的间距和数量 | 大电流区域孔数不够 |
2.3 DRC规则文件格式:SVRF和TVF
规则文件,就是DRC工具用来检查的“规则书”。目前主流的有两种格式:SVRF和TVF。
2.3.1 SVRF(Standard Verification Rule Format)
SVRF是Calibre工具使用的规则格式。也是目前最通用的格式。
它的语法很直观。我写个例子给你看:
// 金属1最小宽度检查
M1_WIDTH {
@ 金属1宽度必须大于等于0.18μm
WIDTH M1 < 0.18
}
// 金属1到金属1最小间距检查
M1_SPACING {
@ 金属1间距必须大于等于0.20μm
EXTERNAL M1 < 0.20
}
// 金属密度检查
M1_DENSITY {
@ 金属1密度必须在30%到70%之间
DENSITY M1 < 0.30
DENSITY M1 > 0.70
}
你看,SVRF的规则由三部分组成:规则名、注释、检查语句。规则名可以自己起,注释用@开头,检查语句就是具体的条件。
注意:SVRF对大小写敏感。M1和m1是两个不同的层。我见过有人因为大小写写错,跑了一晚上DRC,结果全是假错。白白浪费一晚上。
2.3.2 TVF(TCL Verification Format)
TVF是另一种规则格式,基于TCL语言。ICV工具(比如Synopsys的ICV)常用这种格式。
TVF的语法更灵活,因为它可以用TCL的变量、循环、条件判断。举个例子:
# 定义最小宽度
set min_width 0.18
# 金属1宽度检查
rule M1_WIDTH {
condition: width(M1) < $min_width
message: "金属1宽度小于$min_width μm"
}
# 金属1间距检查
rule M1_SPACING {
condition: space(M1) < 0.20
message: "金属1间距小于0.20 μm"
}
TVF的好处是可以用变量。如果工艺变了,改一个变量就行,不用改所有规则。
2.3.3 SVRF vs TVF:怎么选?
这个问题,我经常被问到。我的建议是:
- 用SVRF:如果你的工具是Calibre,或者团队习惯用Calibre。SVRF生态成熟,资料多,遇到问题好查。
- 用TVF:如果你的工具是ICV,或者你需要写复杂的规则逻辑。TVF的TCL能力让它更灵活。
我个人习惯是:简单项目用SVRF,复杂项目用TVF。但说实话,两种格式都能完成工作,关键看团队统一。
2.4 跑DRC的流程
最后,我简单说一下跑DRC的流程。你心里有个数:
- 准备版图:GDS或OASIS格式
- 准备规则文件:SVRF或TVF文件
- 运行DRC:工具读入版图和规则,开始检查
- 查看结果:DRC会生成一个报告,列出所有违规
- 修改版图:根据报告修改,然后重新跑DRC
- 反复迭代:直到所有违规清零
嗯,这里要注意:第一次跑DRC,报错几百上千个很正常。别慌,大部分是重复报错。先修大问题,再修小问题。
避坑指南:我曾经遇到一个项目,DRC报了5000多个错。我一看,全是同一个问题——电源线间距不够。改了一根线,5000个错全消了。所以,先分析错误类型,别一个一个改。
2.5 小结
这一章我们讲了DRC的基础。你记住三点:
- DRC是检查版图是否违反工艺规则的步骤
- 主要检查宽度、间距、密度等
- 规则文件有SVRF和TVF两种格式
下一章,我们会深入讲DRC的常见错误和修复技巧。到时候我会分享更多实战经验。
好,今天就到这里。有问题随时交流。
公众号:蓝海资料掘金营,微信deep3321