4、设计规则检查(DRC):硅光工艺DRC规则解读、常见DRC错误及修复方法、DRC脚本编写技巧

设计规则检查,简称DRC。说白了,就是流片前最后一道“安检门”。

我见过太多团队,设计时天马行空,结果DRC跑下来几百个错误,改到吐血。硅光工艺的DRC和纯电学CMOS有很大不同,它不光要管金属、通孔,还得管波导、刻蚀槽、边缘耦合器这些光学结构。

这一章,我就把硅光DRC的那些“坑”和“窍门”掰开揉碎了讲给你听。

核心观点:DRC不是找茬,是帮你省钱。一个DRC错误流片回来可能就是几十万的损失。

硅光DRC知识体系 规则解读 波导/刻蚀/金属规则 错误修复 常见DRC错误及对策 脚本编写 Calibre/SVRF技巧 最小线宽 最小间距 密度违例 锐角/毛刺 DRC函数 层次化 目标:零DRC错误 → 高良率流片

4.1 硅光工艺DRC规则解读

硅光DRC规则,和标准CMOS最大的区别在哪?我总结了三类核心规则:

  • 波导层规则:包括条形波导、脊形波导的最小宽度、最小间距。比如220nm厚的硅层,单模波导宽度通常要求450nm±10nm。太宽会多模,太窄损耗剧增。
  • 刻蚀深度规则:部分刻蚀(如70nm浅刻蚀)和全刻蚀(220nm)的边界必须清晰。我记得有一次,一个同事把浅刻蚀区域画到了深刻蚀区,结果DRC报了几百个“刻蚀深度冲突”。
  • 边缘耦合器规则:倒锥形结构的角度、尖端宽度都有严格限制。尖端宽度一般要求小于150nm,角度不能太陡。

我的习惯:拿到PDK后,第一件事不是跑设计,而是把DRC rule deck里的“关键参数表”打印出来贴在工位上。波导最小间距、金属最小宽度、通孔包边尺寸,这些数字要刻在脑子里。

另外,硅光工艺还有一类特殊的“光学密度规则”。你想想看,如果芯片上某一块全是硅,另一块全是二氧化硅,刻蚀速率会不均匀。所以PDK会要求硅的图形密度在30%~70%之间。这个规则,纯电学设计很少遇到,但硅光里很常见。

4.2 常见DRC错误及修复方法

我这些年经手的流片项目,DRC错误翻来覆去就那么几类。我列个表,你对照着看:

错误类型 典型报错信息 常见原因 修复方法
最小宽度违例 WIDTH < 0.45um 波导拐角处太细 加宽拐角,使用45°或圆弧
最小间距违例 SPACE < 0.5um 两个波导靠太近 拉开间距,或加隔离槽
密度违例 DENSITY < 30% 大片空白区域 添加dummy填充结构
锐角/毛刺 NOTCH < 90° 版图绘制不规范 使用45°或90°正交画法
刻蚀深度冲突 ETCH_LAYER_OVERLAP 深浅刻蚀区域重叠 检查层次定义,修正重叠

警告:千万不要为了通过DRC而随意“打补丁”。比如密度不够就乱加dummy,结果dummy block了光路。我曾经见过一个案例,设计师在光波导旁边加了金属dummy,导致光损耗增加了3dB。修复DRC错误,一定要理解物理含义。

修复DRC错误,我有个“三步法”:

  1. 分类:把错误按类型分组。先修“最小宽度”和“最小间距”,这些是硬伤。
  2. 定位:用Calibre RVE或类似工具,高亮显示错误位置。别在密密麻麻的版图里瞎找。
  3. 修复:能微调就微调,需要大改就重画。别心疼,流片回来不能用更心疼。

4.3 DRC脚本编写技巧

说到脚本,很多人觉得这是PDK工程师的事。其实不然。我建议每个硅光设计师都掌握基本的DRC脚本编写能力。为什么?因为PDK给的规则有时候太保守,或者你有一些特殊结构需要自定义检查。

目前主流工具是Calibre,使用SVRF语言。我分享几个实用技巧:

  • 层次化检查:DERIVE语句定义中间层。比如把“波导层”和“刻蚀层”做AND操作,得到“实际波导区域”。这样写出来的脚本清晰、运行快。
  • 使用变量:把关键尺寸定义成变量,比如WAVEGUIDE_WIDTH = 0.45。后期改工艺节点,改一个变量就行。
  • 排除伪错误:EXCLUDE语句过滤掉已知的、不影响功能的错误。比如某些测试结构故意做小尺寸,可以排除。

下面是一个简单的硅光波导DRC脚本片段,你可以参考:

// 定义层次
WAVEGUIDE = silicon AND NOT etch_deep
WG_CLADDING = silicon AND etch_shallow

// 最小宽度检查
INT WAVEGUIDE < 0.45um  // 报错:波导宽度小于450nm

// 最小间距检查
EXT WAVEGUIDE < 0.5um  // 报错:波导间距小于500nm

// 密度检查
DENSITY WAVEGUIDE < 0.3  // 报错:硅密度低于30%

// 锐角检查
ANGLE WAVEGUIDE < 90  // 报错:存在锐角

避坑指南:我曾经写过一个脚本,忘记加EXCLUDE语句,结果把所有的pad和seal ring都报了错。调试了一下午才发现。所以,写脚本时一定要先跑一个小区域验证,别一上来就跑全芯片。

最后,关于脚本调试,我有个小窍门:用TRACE语句输出中间层的图形。比如TRACE WAVEGUIDE,可以看看你定义的波导层到底对不对。这个功能,很多人不知道,但非常实用。

嗯,DRC这部分就讲到这里。记住一句话:DRC不是终点,是起点。跑通DRC只是流片的第一步,后面还有LVS、PEX等着你。但DRC做扎实了,后面的路就好走多了。


专注资料整理