
CMOS反相器版图设计是专用集成电路课程里最经典的一道门槛。前面学原理图还只是纸面功夫到了版图这一步所有关于寄生、匹配、工艺偏差的概念都开始变成看得见摸得着的物理图形。很多同学在这个节点第一次被DRC报错刷屏第一次被LVS的连接关系不匹配折磨到怀疑人生。这篇文章就把我从原理图走到版图的完整过程拆开讲从PMOS和NMOS怎么摆放、栅极怎么连、衬底接触怎么打到DRC/LVS怎么过、后仿真和前仿真差多少一次说透。这篇实战经验适合两类人一类是微电子专业在学专用集成电路设计的本科生或研究生正被课程作业里的反相器版图逼得头大另一类是刚进IC设计公司、第一次打开版图编辑工具的新人工程师。你不需要有多深的背景知识只要会看MOS管的电路符号、知道反相器是两个管子串联就能跟着把整个流程走通。我尽量把每一步操作背后的原因也讲清楚毕竟光会画图不够得知道为什么这样画。1. 先看懂原理图反相器为什么是两个管子1.1 从逻辑功能到电路结构在做版图之前先把原理图这层关系理清楚。反相器就是输入高电平、输出低电平输入低电平、输出高电平逻辑上就是取反。实现这个功能最简单的CMOS结构就是上面一个PMOS、下面一个NMOS两个栅极并在一起作为输入两个漏极并在一起作为输出PMOS源极接电源VDDNMOS源极接地GND。这个结构之所以能工作关键在于PMOS和NMOS的导通条件刚好互补。NMOS是栅极电压高于源极一定阈值Vthn时导通栅极低于阈值时截止PMOS正好反过来栅极电压低于源极一定阈值|Vthp|时导通高于阈值时截止。于是输入为高电平时NMOS导通、PMOS截止输出被拉到地输入为低电平时PMOS导通、NMOS截止输出被拉到电源。很多初学者一开始会被PMOS的导通条件绕晕我这里给一个最实在的记忆方法看沟道里的载流子类型。NMOS靠电子导电栅极要形成正电场才能把电子吸引到沟道里所以栅极电压要高于源极PMOS靠空穴导电栅极要形成负电场才能吸引空穴所以栅极电压要低于源极。不需要死记符号想一下物理图像就通了。1.2 PMOS与NMOS的导通特性差异PMOS和NMOS在版图上最大的差别在于PMOS必须坐在N阱N-well里NMOS坐在P型衬底上。这是CMOS工艺的基本框架衬底是P型的NMOS直接做在衬底上PMOS需要在衬底里先挖一块N型区域这个N型区域就是N阱。这里有个很容易忽略但很关键的细节PMOS的源极接VDD衬底也就是N阱也必须接VDDNMOS的源极接GND衬底P型衬底必须接GND。因为MOS管的衬底和源极之间的PN结必须保持反偏否则管子会通过衬底漏电严重时甚至引发闩锁效应latch-up芯片直接烧毁。这就是为什么版图里除了MOS管本身还要画衬底接触substrate contact和阱接触well contact接触没打好后面LVS必然报错。反相器的两个管子尺寸上也有讲究。空穴的迁移率大约是电子的三分之一所以同样条件下PMOS的驱动能力天生比NMOS弱。为了输出波形对称一般会把PMOS的宽长比W/L做成NMOS的两到三倍。课程里的简单反相器可以做最小尺寸但实际工程里会仔细算这个比例。这里的经验是先别急着把管子画大等后仿真看到上升沿和下降沿不对称再调整课程作业阶段小尺寸通常够用。2. 版图前的准备工艺规则与参数选型2.1 工艺库与设计规则版图不是随手画出来的每一层画多宽、间距多大、包边多少都由工艺厂提供的设计规则Design Rule决定。课程里最常用的是0.18um或0.13um工艺Cadence的PDK里一般自带一整套规则文件画图时右上角的DRCDesign Rule Check工具就是拿你的版图和这个规则文件做比对。新手拿到设计规则文档通常一脸懵满眼都是密密麻麻的表格。我的建议是先抓几个最关键的参数就好不要试图全记住。第一个是各层的最小宽度minimum width比如多晶硅栅的最小宽度可能就是0.18um有源区的最小宽度可能更大一些第二个是同层之间的最小间距minimum spacing比如两个有源区之间至少要隔开多少第三个是不同层之间的包围关系比如栅极伸出有源区多少gate extension接触孔到栅极的最小距离。画反相器这种小模块最容易触碰的规则就是间距。我见过太多新手把两个有源区画得太近DRC哗哗报一排错。所以开画之前最好先打开PDK的tf文件或者design rule文档把0.18um工艺下有源区间距、阱间距、金属线间距这几个数字抄在手边。磨刀不误砍柴工后面可以少清很多DRC错误。2.2 宽长比W/L的选择逻辑反相器的版图尺寸由晶体管的W/L决定而这个数值的选择不是拍脑袋拍出来的。如果只做数字逻辑通常希望反相器能驱动下一级负载上升沿和下降沿尽量对称。前面说了PMOS空穴迁移率低所以PMOS的宽度通常约等于NMOS宽度的2到3倍把两者驱动能力拉齐。假设课程设计的反相器选定NMOS的W/L为0.5um/0.18umPMOS的W/L为1.2um/0.18um那么版图上对应的物理尺寸就是NMOS有源区宽度大概0.5um栅极长度0.18umPMOS有源区宽度1.2um栅极长度0.18um。这样PMOS的方向和NMOS一样都是水平方向只是宽度不同。画的时候要注意栅极的实际宽度并不等于沟道长度因为光刻工艺会有偏差所以版图上还要额外多留一点余量这个在后面的多晶硅延伸poly extension里会体现。还有一个容易踩坑的点栅极的朝向。如果PMOS和NMOS共用一个多晶硅栅那就是一个折叠结构folded structure两个管子共用一条栅极线输入连接天然就做好了连线非常紧凑。但折叠结构要求PMOS和NMOS的有源区距离很近这时候阱边界和有源区之间的距离必须满足设计规则不然DRC过不了。我的建议是课程作业先用分立的栅极比较简单先把流程跑通再说。3. 从原理图到版图CMOS反相器的绘制实操3.1 创建版图cellview并规划画布打开Cadence Virtuoso在Library Manager里选定你建好的库右键创建一个新的cellviewview name填layout工具选Virtuoso。创建完成后打开版图编辑器第一件事不是急着画图形而是确认显示层次。按快捷键E打开display options确保tf文件加载正确让所有有效层layer都能被看到。然后按ShiftF让编辑区域最大化。画布的大小不用刻意设置根据模块尺寸调整即可反相器这种小模块50um x 50um的范围内完全画得下。开画之前心里要有整个布局的规划下方是NMOS区域上方是PMOS区域两者各自有有源区、栅极、源漏接触、衬底接触最后通过金属线把两个栅极连到输入、两个漏极连到输出、PMOS源极连到VDD、NMOS源极连到GND。我习惯先在纸上画一张粗略的俯视图草稿标好每一层的相对位置再往软件里填。直接上手画的十有八九画到一半发现哪里有源区放不下又要推倒重来。3.2 有源区与多晶硅栅的绘制先在NMOS区域画一个有源区在tf里通常叫OD或ACT颜色一般是绿色。有源区的宽度对应晶体管的宽度W所以NMOS的有源区宽度留0.5um长度自由发挥只要足够放下源漏接触孔就行。打个比方有源区就是一块舞台栅极横跨在上面把舞台分成左右两半左右两半就是源极和漏极。接下来在多晶硅层PO红色画一条窄矩形作为栅极刚好横穿过有源区的中间位置。栅极的实际宽度也就是沟道长度L建议直接按0.18um来画但注意栅极要伸出有源区两侧至少0.2um左右这个余量叫poly extension既有工艺上的考虑也方便后面打接触孔引出输入信号。PMOS部分同样操作画一个宽度1.2um的有源区再画一条栅极穿过它。两个管的栅极可以先画成两条独立的poly最后用金属线连起来也可以直接画一条长的poly从头到尾一次性穿过两个有源区。后者的好处是输入节点天然共享版图更加紧凑但对准要求更高。如果第一次做版图我建议先画两条独立的poly虽然多一次连线但逻辑更清楚、也好排查问题。3.3 N阱与衬底接触PMOS不能直接坐在P型衬底上必须先在PMOS有源区周围画一圈N阱。N阱层的范围要完全覆盖PMOS有源区并且四边都要超出有源区一定距离这个距离在0.18um工艺里通常是1um以上。N阱的尺寸宁大勿小画小了DRC反而容易报N阱与有源区的包围关系不足。衬底接触和阱接触是很多新手最容易漏掉的内容。NMOS坐在P型衬底上衬底电位必须是地所以需要在NMOS有源区旁边再画一个单独的有源区区域里面打上P注入再打接触孔接GND这个就叫衬底接触。PMOS坐在N阱里N阱电位必须接VDD所以要在N阱里、PMOS有源区旁边再画一个有源区区域里面打上N注入通过接触孔接VDD这个叫阱接触。有些工艺里衬底接触和阱接触是可以在设计规则允许的情况下直接贴着晶体管有源区放的也有工艺要求一定距离之外单独放。我踩过的坑是衬底接触的有源区一定要在注入层上明确画上P或N标记光画有源区和接触孔是没用的LVS默认这块有源区是没有注入的会报识别不出MOS管或接触电阻过大。3.4 金属互连与输入输出引线管子画好了接下来是把它们连成电路。利用金属一层M1一般蓝色把PMOS的漏极和NMOS的漏极连在一起这个节点就是输出把两条多晶硅栅连在一起或者画栅极时已经共用一条poly这个节点就是输入。这两种连接方式都是通过接触孔contact一般画成方块把不同层连接起来的。画金属连线有个实用技巧先用快捷键P画矩形框出连接区域再用wire工具精确连接引脚。Virtuoso的wire工具对与同一金属层的路径连接非常方便它会自动合并重叠的矩形DRC也更友好。最忌讳的是用一堆碎片式的小矩形去拼线CAD上看着没事DRC给你报出一堆细小的缺口和尖锐角处理起来极其烦躁。PMOS源极连到VDD、NMOS源极连到GND这两条电源和地线建议用更宽的金属线M1宽度画到1um以上。反相器这种模块电流虽然小但电源线宽一点可以降低IR压降也能稍微减少电迁移风险。后端集成到大规模电路里的时候电源线上的压降会直接影响到门的噪声容限早一点养成宽线的习惯没坏处。VDD和GND的端口用text标注清楚方便后面LVS比对。3.5 层次化设计与PIN标记版图画完了要做的下一步就是加PIN和文本标记。PIN是版图与原理图比对时的接口名字必须和原理图中对应的端口名称完全一致比如VDD、GND、VIN、VOUT。在Virtuoso里选中金属线用Create Pin在金属层上打上同名的PIN标记。这里有个容易出问题的地方PIN要打在正确的层上。如果输入输出是用M1引出来的PIN类型就选M1不要选成M2或者更高层。PIN的名称严格区分大小写VDD和vdd在LVS看来是两个完全不同的网络。我见过不止一个同学前面版图画得很漂亮最后LVS频繁报错查了半天发现只是PIN大小写打错了。4. 验证环节DRC/LVS与后仿真的实战记录4.1 DRC的常见错误与处理思路版图绘制完成后第一关是DRC。在Virtuoso里点击Calibre或者PVS的DRC run跑完会弹出一个标记窗口错误会用高亮的颜色直接显示在版图上。课程作业里最常见的一款DRC错误是有源区间距不对。0.18um工艺里同是有源区两个独立的OD区域之间的最小间距通常要求在0.28um以上。新手习惯把所有东西画得非常紧凑结果就是间距不够。处理方法很简单按错误提示把两块有源区往外拉开直到DRC认可为止。第二种常见错误是poly与OD的包围尺寸不对。比如poly伸出OD的尺寸不足或者OD包住接触孔的余量不足。这类错误在调整图形大小的时候很容易碰到处理方式就是确保每层图形之间的包边关系严格满足设计规则。最快的办法是画好一个标准单元后拷贝一份把各种余量都做到规则要求的上限后续复制出来的模块基本不会再犯同样的错。4.2 LVS比对与常见失配原因DRC通过之后就要做LVSLayout vs Schematic。LVS的原理是把版图提取出的电路网表和原理图网表做一个同构比对检查管子数量、尺寸、连接关系是否一致。反相器的LVS报错第一位是管子数量不对说版图里提取出两个PMOS、一个NMOS或者类似的情况。这在折叠栅、共用扩散区时经常发生。比如两个晶体管共用了同一块源漏区LVS可能识别出串并联关系但和原理图的连接关系对不上就会报错。解决办法是把公共扩散区切开或者在电源和地线上加隔离。第二种常见失配是衬底接触没识别出来导致LVS认为某个节点悬空。前面提到过衬底接触必须有明确的注入层标记同时接触孔和金属线要真正连到地网络这个连接关系必须在版图上一一对应LVS才认。如果报了substrate floating类的错误优先检查衬底接触和阱接触是否连对了电位。4.3 后仿真的结果解读DRC和LVS都过了接下来通常要做后仿真post-layout simulation。后仿真的目的是验证版图中的寄生参数对电路性能的影响。版图比原理图多出来的东西主要是寄生电容和寄生电阻栅极和源漏区之间有重叠电容金属连线之间有耦合电容接触孔和通孔有接触电阻这些都会拖慢电路速度。我用Cadence的PEXParasitic Extraction提取了版图的寄生参数生成了带寄生参数的网表然后跑了一次Spectre仿真。和前仿真对比下来反相器的上升沿从2.1ns变成了2.8ns下降沿从2.3ns变成了3.1ns大概慢了30%上下。这个量级在课程设计里完全能接受。如果慢得太多比如翻倍了就要检查是不是哪根金属线画得特别长、特别细寄生电阻和电容过大了适当加宽金属线或者调整管子布局可以改善。还有一点值得提后仿里如果输出波形的VOH高电平电压和VOL低电平电压偏离了理想值往往说明哪个晶体管的导通电阻太大导致压降明显。最简单的排查方式是把电源和地的金属互连加宽、缩短电源环之间的距离。5. 版图绘制中的经验教训与调试心得5.1 对称性设计对反相器性能的影响反相器虽然是数字电路里最简单的门版图上的对称性仍然会直接影响到性能。一个典型的场景是如果PMOS和NMOS的栅极输入连线长短差异过大输入信号的到达时间就有偏差输出波形会很别扭。对于课程设计不至于造成功能性错误但在高速数字电路里这种不对称性会影响门的传播延时。我在实际绘制中一般会把PMOS放在上方、NMOS放在下方两者栅极对齐输入走线尽量用同一条路径到达两个管子的栅极。输出节点也一样PMOS和NMOS的漏极尽量靠近金属线尽量短粗减小输出节点的寄生电容。虽然反相器只有两个管子但好的版图习惯是靠小而简单的模块练出来的后面画门电路、触发器、加法器思路一脉相承。5.2 反相器版图的常见问题速查我整理了反相器版图里最常遇到的几个问题以及对应的排查策略表格放在这里遇到问题可以直接对照着查。现象或报错可能原因处理办法DRC提示有源区间距不足两块OD区域距离太近拉开间距满足工艺最小间距DRC提示poly包围不足栅极伸出有源区长度不够增加poly extensionLVS报器件数量不匹配共用扩散区导致器件拆分异常调整版图结构或修改原理图网表表达LVS报节点悬空衬底接触/阱接触未正确接地接电检查注入层和接触孔连接后仿真延时明显过大金属线太长太细寄生电容电阻大加宽金属线、缩短连线路径输出高/低电平不达标电源/地线金属过窄压降大加宽VDD/GND走线另外补充一个很多教程都不会说的细节反相器的输入和输出尽量不要平行走线走太长距离因为输入输出之间的耦合电容会把输出噪声反串到输入端严重时可能引起自激振荡。一个小模块里不容易出这个问题但如果作为标准单元被调用在布局里输入输出线的走向就会开始影响周边模块。5.3 给刚开始学版图的同学的建议从原理图走到版图是整个专用集成电路设计课程里跨越性最大的一步。原理图是抽象的版图是物理的中间隔着工艺、设计规则和一堆看不见的寄生效应。我的体会是如果时间有限优先保证把DRC和LVS跑通功能仿真正确版图美观是加分项不是必需项。实操上建议先用最小尺寸把标准反相器跑通全流程理解工具链的基本操作再回头优化尺寸、调整布局。你会发现第一遍的版本和第二遍的版本无论从版图面积还是性能上都有巨大提升。这个过程本身就是版图设计的核心能力——从画得出来到画得好。最后分享一个小技巧画版图之前先去看看工艺库里已有的标准单元版图比如PDK自带的INVX1、INVX2这些。照着人家的画法来比自己闷头摸索高效得多。我在课程作业阶段就是一边抄标准单元的布局思路一边微调尺寸最终不仅完成了作业还把PDK里那些单元的设计套路摸了个七七八八。这个习惯后来在工作中帮了我大忙。