1. 从反相器到ADC我的Guard ring布局血泪史含DRC避坑指南1.1 为什么我要从反相器开始聊Guard ring很多人第一次接触版图都是从CMOS反相器开始的。一个PMOS、一个NMOS、一个输入、一个输出电路图简单到用脚趾头都能画出来。但真正把反相器画到版图上尤其是当你开始考虑后仿真、考虑噪声隔离、考虑DRC的时候你会发现这个“最简单”的电路其实一点都不简单。我当年第一次画反相器版图觉得把两个管子摆好、连上金属线就完事了。结果DRC一跑满屏的报错其中一大半都跟Guard ring有关。后来做ADC项目采样保持电路、比较器、基准源全都要加Guard ring我才真正意识到这东西不是“画个圈”那么简单。这篇文章我会从反相器的版图讲起把Guard ring的原理、画法、常见DRC报错、以及ADC里Guard ring的特殊处理全部串一遍。不管你是刚学版图的新手还是已经在做混合信号电路的老手应该都能从我的踩坑经历里找到一些有用的东西。1.2 这篇文章适合谁看如果你正在学CMOS反相器的版图设计或者正在做ADC、DAC这类混合信号电路的布局又或者你被DRC报错折磨得死去活来那这篇文章就是写给你的。我会尽量用大白话把原理讲清楚同时给出可以直接参考的操作步骤和参数设置。我默认你至少知道MOS管的基本结构知道什么是阱、什么是衬底、什么是金属层。如果你连这些还不清楚建议先补一下半导体工艺的基础知识不然看版图部分会比较吃力。2. Guard ring到底是什么从原理到版图实现2.1 衬底噪声才是真正的敌人在聊Guard ring怎么画之前先得搞清楚它到底在防什么。CMOS工艺里所有NMOS都坐在同一个P型衬底上所有PMOS都坐在N阱里。这个衬底不是理想的地它是有电阻的。当数字电路在开关的时候会有电流注入衬底导致衬底电位波动。这个波动会通过衬底耦合到模拟电路里把噪声带进去。你可以把衬底想象成一块海绵里面充满了水。数字电路开关就像往海绵里挤水水会往四面八方流。模拟电路就像放在海绵上的纸水一波动纸就跟着晃。Guard ring的作用就是在纸周围挖一圈沟把水挡住。具体到物理机制衬底噪声主要通过两种方式耦合一是通过衬底电阻直接传导二是通过PN结电容耦合。Guard ring对这两种耦合都有抑制作用。它本质上是一个接固定电位的扩散区把敏感电路包围起来形成一个低阻的收集区把衬底里的噪声电流吸走。2.2 Guard ring的两种基本类型在CMOS工艺里Guard ring分两种P型Guard ring和N型Guard ring。P型Guard ring是P扩散区画在P衬底里通常接最负的电位也就是地。它的作用是收集衬底里的电子防止电子扩散到敏感电路区域。N型Guard ring是N扩散区画在N阱里通常接最正的电位也就是电源。它的作用是收集衬底里的空穴。对于NMOS它坐在P衬底里周围应该画P型Guard ring接地。对于PMOS它坐在N阱里周围应该画N型Guard ring接电源。这是最基本的规则但实际操作中远不止这么简单。我见过很多新手只给NMOS画P型Guard ring忘了给PMOS画N型Guard ring。结果PMOS的N阱和P衬底之间形成的PN结在开关时会产生注入电流这些电流会跑到衬底里影响其他电路。所以PMOS的N型Guard ring同样重要。2.3 Guard ring的版图结构长什么样一个标准的Guard ring在版图上看起来就是一个闭合的环由扩散区、接触孔和金属层组成。扩散区是实际收集载流子的部分接触孔把扩散区连到金属上金属再把电位引到需要的地方。以P型Guard ring为例它的截面图从下往上是这样的最下面是P衬底然后是P扩散区扩散区上面是接触孔接触孔上面是金属1。金属1通常还会连到更上层的金属最终接到地。宽度方面扩散区的宽度通常由工艺设计规则决定一般在0.5微米到几微米之间。接触孔的尺寸和间距也有规则限制。金属层的宽度要覆盖住扩散区和接触孔并且留出一定的余量。环的闭合性非常关键。Guard ring必须是完全闭合的不能有缺口。如果有缺口噪声电流就会从缺口处溜进去Guard ring的效果会大打折扣。我当年就犯过这个错误画了一个几乎闭合的环就差一个角没连上结果后仿真的时候噪声指标怎么都过不了。2.4 为什么Guard ring不是万能的Guard ring能抑制衬底噪声但它不是万能的。首先Guard ring本身会占用面积。在先进工艺里面积就是钱Guard ring占的面积可能比电路本身还大。其次Guard ring会引入寄生电容。扩散区和衬底之间的PN结电容会加到电路节点上影响速度。更重要的是Guard ring对高频噪声的抑制效果有限。在高频下衬底的阻抗特性会变化Guard ring的低阻收集效果会下降。这时候可能需要结合深N阱、绝缘体上硅等更高级的隔离技术。所以Guard ring的设计是一个权衡既要保证隔离效果又要控制面积和寄生参数。这个权衡没有标准答案需要根据具体电路的要求来定。3. 反相器版图实战从零画一个带Guard ring的反相器3.1 准备工作工艺库和设计规则在开始画版图之前你需要准备好工艺库文件。通常代工厂会提供设计规则手册、DRC规则文件、LVS规则文件以及版图编辑器的工艺库。我用过的版图编辑器有Cadence Virtuoso、Synopsys Custom Compiler还有开源的KLayout。KLayout做DRC检查很方便后面我会专门讲。设计规则手册是必须看的。里面会规定最小线宽、最小间距、最小包围、接触孔规则等等。Guard ring相关的规则通常包括扩散区最小宽度、扩散区到阱边缘的最小距离、接触孔到扩散区边缘的最小包围、金属到接触孔的最小包围等等。我建议你把Guard ring相关的规则单独整理出来画的时候对照着看。不然DRC报错的时候你会很懵不知道是哪个规则没满足。3.2 第一步画NMOS和PMOS的有源区先画NMOS的有源区。在P衬底上画一个矩形这是NMOS的源漏区域。然后在有源区上画多晶硅栅。栅要横跨有源区两端伸出有源区一定长度这个长度由设计规则决定。接着画PMOS。PMOS要画在N阱里所以先画一个N阱矩形然后在N阱里画PMOS的有源区。同样画多晶硅栅。这里有个细节NMOS和PMOS的栅通常是对齐的这样输入信号可以共用一条多晶硅线。对齐的时候要注意多晶硅的间距规则别让两个栅靠得太近导致DRC报错。3.3 第二步画Guard ring现在到了关键步骤。NMOS周围要画P型Guard ring。具体操作是在NMOS有源区外围画一个P扩散区的环环的宽度满足最小宽度规则。然后在P扩散区上画接触孔接触孔要满足最小尺寸和最小间距规则。最后画金属1覆盖住接触孔金属1的宽度要满足对接触孔的最小包围规则。PMOS周围要画N型Guard ring。操作类似只是扩散区是N画在N阱里金属接电源。这里有个容易犯的错误Guard ring的拐角处。在拐角处扩散区和金属的宽度容易不满足规则。我的经验是拐角处可以适当加宽或者用45度斜角过渡。有些工艺对拐角有专门的规定要仔细看设计规则。还有一个坑Guard ring和电路有源区之间的距离。这个距离不能太小否则Guard ring的扩散区会和电路的有源区发生干涉。也不能太大否则浪费面积。设计规则里通常会给一个最小值我一般会取最小值的1.5到2倍留一些余量。3.4 第三步连线连线包括栅连线、源漏连线、以及Guard ring的电位连线。栅连线通常用多晶硅或者金属1。源漏连线用金属1通过接触孔连到有源区。Guard ring的电位连线要注意P型Guard ring接地的线要和电路的接地线分开走最后在某个点汇合。这样可以避免Guard ring收集的噪声电流通过接地线耦合到电路里。这个技巧叫做“星型接地”在混合信号电路里非常重要。3.5 第四步DRC检查画完之后跑DRC。第一次跑DRC大概率会有报错。常见的Guard ring相关DRC报错包括扩散区宽度不足、接触孔包围不足、金属间距不足、Guard ring不闭合等等。我建议你先把所有报错看一遍分类整理。有些是Guard ring的问题有些是其他部分的问题。Guard ring的问题通常比较集中改起来也快。3.6 反相器后仿真中的Guard ring验证画完版图提取寄生参数做后仿真。后仿真的时候你可以对比加Guard ring和不加Guard ring的噪声性能。具体做法是在反相器的输入端加一个小信号在输出端看噪声频谱。加Guard ring之后低频噪声应该会有明显改善。如果后仿真结果不理想先检查Guard ring是不是真的闭合了接触孔是不是都连上了电位是不是接对了。我遇到过好几次后仿真噪声下不去最后发现是Guard ring的某个接触孔忘了画导致那一小段扩散区浮空完全没起作用。4. ADC布局中的Guard ring策略从模块到系统4.1 ADC里哪些模块需要Guard ringADC芯片里不是所有模块都需要Guard ring。数字控制逻辑、时钟产生电路这些对噪声不敏感可以不加。但以下几类模块必须加采样保持电路直接处理模拟信号任何衬底噪声都会变成采样误差。比较器比较器的输入失调对噪声非常敏感衬底噪声会导致比较器误翻转。基准源基准电压的稳定性直接决定ADC精度衬底噪声会调制基准电压。模拟输入缓冲输入信号的完整性靠它保证噪声会直接恶化信噪比。我的做法是先把ADC的模块划分清楚标出哪些是敏感模块哪些是噪声源模块。然后给敏感模块加Guard ring给噪声源模块也加Guard ring但两者的Guard ring要分开接电位。4.2 敏感模块和噪声源模块的隔离噪声源模块主要是数字电路和时钟电路。这些模块的Guard ring要接数字地或时钟地不能和模拟地混在一起。敏感模块的Guard ring接模拟地。两组Guard ring之间要有足够的距离通常至少5到10微米。如果面积允许可以在两组Guard ring之间再加一条深N阱隔离。深N阱可以形成更深的隔离势垒对低频噪声特别有效。但深N阱会增加工艺成本不是所有工艺都支持。还有一个技巧在敏感模块的Guard ring外面再套一圈噪声源模块的Guard ring形成“双环”结构。外环收集从远处来的噪声内环收集从近处来的噪声。这个结构在高速ADC里很常见。4.3 Guard ring的宽度和间距怎么定Guard ring的宽度不是越宽越好。宽度增加收集效率会提高但寄生电容也会增加。我的经验是对于低频高精度ADCGuard ring宽度可以取设计规则最小值的2到3倍对于高速ADC取最小值的1到1.5倍就够了因为高速下Guard ring的效果本来就有限。间距方面Guard ring到敏感电路的距离要大于到噪声源的距离。也就是说Guard ring应该更靠近噪声源把噪声在到达敏感电路之前就收集掉。这个距离通常取设计规则最小值的2倍左右。4.4 ADC布局中Guard ring的常见错误我见过最多的错误是Guard ring把敏感模块和噪声源模块一起围进去了。这样Guard ring不仅没起到隔离作用反而成了噪声传播的桥梁。因为Guard ring是低阻的噪声电流会沿着Guard ring跑到敏感模块那边去。正确的做法是敏感模块和噪声源模块各自有独立的Guard ring两组Guard ring之间断开分别接各自的地。如果必须共地也要在片外单点共地片内不能共。另一个错误是Guard ring的接触孔太少。接触孔太少会导致扩散区的电位不均匀某些地方的收集效果会变差。我的经验是接触孔要尽量密间距取设计规则最小值这样收集效果最好。4.5 一个ADC布局的Guard ring实例我做过一个12位、10兆采样率的SAR ADC。布局的时候我把采样保持电路和比较器放在芯片的左侧数字控制逻辑放在右侧中间用双Guard ring隔开。采样保持和比较器各自有独立的P型Guard ring接模拟地数字逻辑有独立的P型Guard ring接数字地。两组Guard ring之间距离8微米中间加了一条深N阱。后仿真结果显示加Guard ring之后ADC的信噪比从68分贝提升到了72分贝有效位数从11位提升到了11.7位。这个提升在12位ADC里已经非常明显了。5. DRC避坑指南Guard ring相关的报错和解决方法5.1 DRC报错的基本分类Guard ring相关的DRC报错大致分几类扩散区规则、接触孔规则、金属规则、阱规则、以及间距规则。每一类下面又有若干具体规则。我整理了一个速查表方便你对照排查。报错类型典型报错信息可能原因解决方法扩散区宽度Diffusion width minGuard ring扩散区太窄加宽扩散区到规则最小值以上接触孔包围Enclosure of contact by diffusion min接触孔太靠近扩散区边缘增大扩散区或移动接触孔金属包围Enclosure of contact by metal min金属覆盖接触孔不足加宽金属或移动接触孔金属间距Metal spacing minGuard ring金属和其他金属太近增大间距或调整走线阱间距Nwell spacing minN型Guard ring和PMOS的N阱太近增大间距或合并N阱闭合性Guard ring not closedGuard ring有缺口检查并闭合缺口5.2 扩散区宽度不足的排查扩散区宽度不足是最常见的报错。原因通常是Guard ring画得太细或者拐角处宽度不够。解决方法是加宽扩散区。但加宽之后要注意扩散区变宽会增加寄生电容可能影响电路速度。我的做法是先按设计规则最小值画如果DRC报错就加宽10%到20%。如果还报错就检查是不是拐角处的问题。拐角处可以用圆弧过渡或者把拐角单独加宽。5.3 接触孔包围不足的排查接触孔包围不足通常是因为接触孔放得太靠边。解决方法是把接触孔往扩散区中心移或者加宽扩散区。移动接触孔的时候要注意接触孔之间的间距也要满足规则。我遇到过一种情况接触孔本身尺寸没问题间距也没问题但DRC就是报包围不足。后来发现是扩散区的边缘不是直线有一个小凸起导致局部包围不够。这种问题比较隐蔽需要放大版图仔细看。5.4 Guard ring不闭合的排查Guard ring不闭合是新手最容易犯的错误。画的时候觉得连上了实际上有一个角没连上或者金属层断开了。DRC会报“Guard ring not closed”或者类似的错误。排查方法是把Guard ring单独高亮沿着环走一圈看有没有断点。特别注意拐角处和不同金属层的连接处。如果用了多层金属每一层都要闭合而且层与层之间的通孔要足够多。5.5 KLayout做DRC的实操步骤KLayout是一个开源的版图编辑器和验证工具做DRC很方便。具体步骤是先准备好DRC规则文件通常是Ruby脚本或者DSL脚本。然后在KLayout里打开版图文件运行DRC脚本。KLayout会在版图上标出报错位置并生成报错列表。KLayout的DRC脚本可以自己写也可以用代工厂提供的。自己写的话需要熟悉KLayout的DRC语法。我建议先从简单的规则开始比如最小宽度、最小间距逐步增加复杂度。提示KLayout的DRC结果可以导出成文本文件方便后续分析。导出的时候选择“Report”格式包含报错类型、坐标、层号等信息。5.6 DRC通过之后还要做什么DRC通过不代表版图就没问题了。还要做LVS检查确保版图和电路图一致。LVS会检查器件连接、参数、端口等。Guard ring在LVS里通常被识别为衬底接触或阱接触需要正确连接到对应的电位。LVS通过之后还要做寄生参数提取和后仿真。后仿真会考虑Guard ring的寄生电容和电阻验证电路性能是否达标。如果后仿真不通过可能需要调整Guard ring的宽度或位置。5.7 一些DRC的独家避坑技巧第一画Guard ring之前先把设计规则里所有相关的规则看一遍整理成清单。画的时候对照清单逐项检查比画完再跑DRC效率高得多。第二Guard ring的拐角处可以单独处理。有些工艺允许拐角处用45度斜角这样比直角更容易满足规则。如果不允许就把拐角加宽。第三接触孔尽量多放。接触孔多了扩散区电位更均匀收集效果更好而且DRC更容易通过。但接触孔太多会增加寄生电容需要权衡。第四Guard ring的金属层尽量用最底层金属比如金属1。底层金属的寄生电容小对电路影响小。如果底层金属不够用再用上层金属。第五DRC报错不要一个一个改先分类同类的一起改。改完再跑一次DRC看还剩多少。这样迭代几次就能全部通过。6. 从反相器到ADC我踩过的那些坑6.1 第一个坑Guard ring忘了接地我第一次画带Guard ring的反相器画完之后跑DRC通过了。跑LVS也通过了。但后仿真的时候噪声怎么都下不去。查了半天发现Guard ring的金属线悬空了没接地。LVS没报错是因为LVS只检查连接关系不检查电位是否正确。这个坑让我明白DRC和LVS通过不代表版图正确。后仿真才是最终的验证。从那以后我每次画完Guard ring都会专门检查电位连接。6.2 第二个坑Guard ring把噪声源和敏感电路围在一起做第一个ADC项目的时候我为了省面积用一个Guard ring把整个ADC都围起来了。结果数字电路的噪声通过Guard ring传到了模拟电路信噪比怎么都上不去。后来把Guard ring拆成两个模拟和数字分开问题才解决。这个坑让我明白Guard ring的隔离是双向的。它既能挡住外面的噪声也能把里面的噪声传出去。所以敏感电路和噪声源必须分开围。6.3 第三个坑接触孔太少导致收集效果差有一次做低噪声放大器Guard ring画得很细接触孔也放得少。后仿真噪声比预期高了3个分贝。后来把Guard ring加宽接触孔加密噪声降下来了。这个坑让我明白Guard ring的收集效果和接触孔密度直接相关。6.4 第四个坑Guard ring的寄生电容影响了速度做高速ADC的时候Guard ring画得很宽接触孔很密。结果后仿真发现采样保持电路的建立时间变长了速度上不去。原因是Guard ring的寄生电容太大拖慢了电路。后来把Guard ring宽度减半接触孔间距加大速度恢复了噪声也没有明显恶化。这个坑让我明白Guard ring的设计是权衡。低速高精度电路可以画宽一点高速电路要画窄一点。6.5 第五个坑DRC规则更新了没注意有一次代工厂更新了设计规则Guard ring的最小宽度变了。我没注意还用旧规则画结果DRC报了几百个错。后来把规则文件重新读了一遍改了Guard ring宽度问题解决。这个坑让我明白设计规则不是一成不变的。每次流片之前都要确认规则版本用最新的规则文件跑DRC。7. 一些实用的操作建议和工具推荐7.1 版图编辑器怎么选Cadence Virtuoso是行业标准功能最全但贵。Synopsys Custom Compiler也不错和Synopsys的其他工具集成好。KLayout免费开源做DRC和简单编辑够用但复杂版图操作不如商业工具。我的建议是如果公司有Virtuoso就用Virtuoso没有的话KLayout也能凑合。学习阶段用KLayout就够了反正原理是一样的。7.2 DRC规则文件怎么看DRC规则文件通常是文本格式里面是一堆规则定义。每条规则有名称、条件、报错信息。看规则文件的时候重点看和Guard ring相关的部分。通常规则文件里会有注释说明每条规则对应设计规则手册的哪一页。如果规则文件太大可以用搜索功能找关键词比如“guard”、“ring”、“diffusion”、“contact”、“enclosure”等。7.3 后仿真怎么设置后仿真需要提取寄生参数生成带寄生的网表。然后用SPICE仿真器跑。仿真的时候要设置好输入信号、电源、温度等条件。看噪声的话跑噪声分析。看速度的话跑瞬态分析。后仿真的时间通常比前仿真长很多因为网表大了很多。我一般会先跑一个简化的后仿真确认基本功能再跑全后仿真。7.4 一些好用的脚本和快捷键画Guard ring的时候可以用脚本自动生成环。KLayout支持Ruby脚本可以写一个函数输入矩形坐标和宽度自动生成Guard ring。Virtuoso也有SKILL脚本功能类似。快捷键方面Virtuoso里“ShiftG”可以快速画Guard ring如果设置了快捷键。“CtrlR”可以旋转“CtrlM”可以移动。KLayout里“G”是画矩形“M”是移动“R”是旋转。7.5 团队协作的注意事项如果多人协作画版图Guard ring的电位连接要统一。最好在项目开始的时候就定好模拟地用什么颜色数字地用什么颜色Guard ring用什么颜色。不然合并版图的时候会乱。还有Guard ring的规则要统一。比如宽度、间距、接触孔密度全项目用同一套参数。这样DRC和LVS都好过。8. 最后再分享几个小技巧画Guard ring的时候我习惯先画一个最小的环跑DRC确认规则没问题再根据电路需要加宽。这样比一开始就画很宽再改要快。Guard ring的拐角处我一般会加一个45度的斜角。斜角比直角更容易满足DRC规则而且收集效果更好。有些工艺不支持斜角那就把拐角加宽。如果面积紧张可以考虑用“C型”Guard ring也就是不闭合的环只在噪声源和敏感电路之间画一段。但C型Guard ring的效果比闭合环差很多只适合噪声要求不高的场合。后仿真的时候可以对比加Guard ring和不加Guard ring的噪声。如果加了之后噪声没改善说明Guard ring没起作用要检查连接和闭合性。DRC报错的时候不要急着改。先把报错分类看看哪些是同一类问题。同类问题一起改效率高很多。Guard ring的电位连接我习惯用最底层金属而且尽量短。这样可以减少寄生电容和电阻。如果必须用上层金属要在连接处多打通孔。做ADC的时候采样保持电路的Guard ring要特别小心。采样开关的寄生电容对采样精度影响很大Guard ring的寄生电容会加到采样节点上。我的做法是采样保持电路的Guard ring尽量窄接触孔尽量少但必须保证闭合和接地。比较器的Guard ring可以画宽一点因为比较器对速度要求不高对噪声要求高。宽Guard ring收集效果好能降低比较器的输入失调。基准源的Guard ring要单独接模拟地不能和采样保持电路共用。基准源对噪声极其敏感任何共地阻抗都会导致基准电压波动。数字电路的Guard ring接数字地模拟电路的Guard ring接模拟地两组Guard ring之间要断开。如果必须共地在片外单点共地片内不能共。Guard ring的宽度和间距没有标准答案要根据电路要求、工艺规则、面积预算来定。我的经验是低速高精度电路取规则最小值的2到3倍高速电路取1到1.5倍。DRC规则文件每次流片前都要重新读一遍确认版本。代工厂可能会更新规则旧规则画的版图可能过不了新规则的DRC。KLayout做DRC的时候可以设置并行计算加快速度。在DRC脚本里设置线程数一般设为CPU核心数。后仿真提取寄生参数的时候可以选择提取精度。精度越高仿真越准但时间越长。我一般先用低精度跑一遍确认功能再用高精度跑最终验证。Guard ring的接触孔密度我一般取设计规则允许的最大密度。接触孔越密扩散区电位越均匀收集效果越好。但接触孔太多会增加寄生电容需要权衡。如果Guard ring的金属层和电路走线冲突可以调整走线或者用上层金属跨过Guard ring。跨过的时候要注意金属间距规则。Guard ring的扩散区到阱边缘的距离设计规则里通常有最小值。我一般取最小值的1.5倍留一些余量。太小了容易报错太大了浪费面积。画Guard ring的时候可以用阵列复制功能快速生成接触孔。Virtuoso里用“Create Contact Array”KLayout里用“Array”功能。Guard ring的电位连接点我一般选在环的角落这样走线最短。连接点要足够宽满足电流要求。后仿真的时候如果噪声还是下不去可以试试在Guard ring外面再加一圈深N阱。深N阱对低频噪声特别有效但会增加工艺成本。Guard ring的设计没有一劳永逸的方案。每个项目都要根据具体要求重新权衡。我的经验是先按规则画再根据后仿真结果调整迭代几次就能找到最优解。