KLayout形状编辑教程:矩形、多边形、路径与文本绘制技巧 1. 动手画之前先搞懂KLayout里的“形状”体系KLayout这个开源版图编辑器我断断续续用了好几年。从最早只是拿它看看GDS文件到后来真的用它在流片项目里画版图、做DRC检查、导出OAS它一直是我工作流里离不开的一个工具。上一篇教程聊了界面布局和文件操作这一篇我重点讲讲形状编辑——也就是你新建一个版图之后怎么把矩形、多边形、路径、文本这些基础形状画出来再改到满意为止。标题虽然是“教程二”但你要是第一次接触KLayout也完全不用慌。形状编辑这部分属于版图设计的底层功夫就算你是搞封装、做PCB转版图、或者单纯拿KLayout当矢量图形工具用里面的思路都是通用的。这篇我会把每个工具背后的“为什么”也讲清楚——比如为什么要设置网格、为什么画出来的多边形看起来有锯齿、为什么路径端头总是连不上。搞懂这些你后面画复杂单元时能少走很多弯路。1.1 对象、图层和Shape工具栏的关系KLayout里的“形状”说得直白一点就是画在某个图层上的矢量对象。你在界面左侧竖排那组工具图标里能看到画矩形Box、画多边形Polygon、画路径Path、插入文本Text这些按钮它们共同构成Shape工具栏。工具栏里的每一个按钮对应的都是一个独立的形状类型而不是像某些画图软件那样只有一种“自由曲线”通吃全场。这里必须强调一个概念形状永远挂在图层上。你选中哪个图层画出来的图形就属于哪个层。KLayout的右下角通常有Layer列表窗口里面一层一层列得像PS里的图层面板。每层有独立的颜色和透明度打开或关闭某一层的显示只影响那一层的可见性并不会删掉里面的图形。我见过不少新手第一次打开KLayout画了半天发现图形颜色和隔壁层的颜色混在一起最后才意识到自己选错了层。这个习惯越早养成越好动手画之前先看一眼右下角的当前层高亮的是哪个。形状对象的底层数据结构也值得一提。KLayout底层把几何对象表达成带坐标点的闭合回路或路径序列。矩形不是独立类型它能被拆解成多边形路径可以转换成多边形文本可以“炸开”成多边形。这意味着你在KLayout里做的所有编辑最后本质都是在操作坐标点和轮廓。这也是为什么后面说到“双击对象”能进编辑模式因为所有形状都暴露了顶点层面上的编辑能力。1.2 网格、单位和坐标为什么画出来的图总是歪的很多人第一次用KLayout画图最直观的困惑是明明鼠标拖得好好的图形边缘却“咔哒咔哒”地跳动想画一个100纳米宽的东西拖出来却是99.8。这个问题几乎都和网格Grid设置有关。KLayout的绘图画布默认是有吸附网格的。鼠标移动时光标坐标被吸附到网格节点上所以图形尺寸只能落在网格的整数倍位置。这个设计的初衷非常实际版图最终要用于制造制造设备本身有分辨率极限如果图形落在任意小数的坐标上后续DRC设计规则检查会产生海量琐碎的“违例”报告。因此画图前把网格尺寸设置为设计规则允许的最小步长比如0.005微米或者0.001纳米会让后续工作顺畅很多。网格设置在KLayout里通常在“视图”菜单下也可以直接敲快捷键G弹出网格设置对话框。设置内容分两块一是“网格步长”二是“是否启用吸附”。我的建议是做芯片版图时网格步长设置为工艺PDK里规定的最小精度做PCB或封装图形时设置为0.01mm或0.1mil总之精度宁可细一点不要粗。吸附功能建议保持开启——除非你要画一些非常规角度的斜线那时可以按快捷键临时关掉吸附画完再开回来。另外KLayout的状态栏会实时显示鼠标坐标。你若想画一个从5, 8到12, 15的矩形不需要靠肉眼拖直接在绘图状态下敲一次回车或S键会弹出精确坐标输入框输入起点和终点坐标矩形就准确生成了。这个习惯我强烈建议养成比用鼠标拖拽后再微调省太多时间。2. 五种基础形状的绘制套路与坑位2.1 矩形Box版图里最常用的形状矩形在版图里就是“地基”。有源区、阱区、金属块、焊盘90%的场景都能用矩形起步。画矩形的操作非常简单点工具栏的矩形图标或者直接按键盘R键然后在画布上拖一个方框出来。拖的时候注意状态栏的坐标变化它能实时显示起终点坐标和当前的宽高。如果你只想画一个固定大小的矩形更稳的做法是点击矩形工具后按一下回车键或者S键在弹出的Editor Mode面板里直接输入“左下角坐标”和“右上角坐标”或者输入“中心点坐标宽高”回车确认。这里有个KLayout的细节矩形实际上是特殊的多边形但KLayout为了性能和易用性保留了它独立的类型。双击一个矩形编辑面板里能看到它的底左坐标、右上坐标、宽度、高度这些属性。你想改成其他尺寸直接改数值就行比拖动灵活得多。要注意的是矩形工具画出来的四个角永远是直角没有倒角选项。想要圆角矩形或斜角矩形要么转成多边形手动改顶点要么后面通过布尔运算和切割来实现。2.2 多边形Polygon顶点自由度最高的形状多边形是版图里另一个无法绕开的形状类型。栅极图形、隔离结构、异形焊盘这些都是多边形。绘制多边形的操作流程是按P键激活多边形工具然后依次在画布上点击顶点每点一下生成一个顶点最后在终点位置点一下并按空格键或者直接双击最后一个点闭合多边形。如果中途点错了按退格键可以撤销上一个顶点。整个过程中按住Ctrl键可以临时关闭网格吸附方便你画非整数网格坐标的斜线。多边形画完后你随时可以双击它进入顶点编辑状态。进入编辑状态后每个顶点都会显示成一个小方框拖动它们可以改变形状。想插入新顶点把鼠标放到某条边上双击该边上就会多出一个新顶点。想删除顶点右键点击顶点选择删除。这个编辑能力非常重要因为实际版图很少有绝对整齐的矩形很多结构需要在矩形基础上微调。有一个坑必须提醒多边形的顶点数量不是越多越好。每个顶点在工序上对应一次曝光图形修正顶点过多轻则增大数据量重则导致DRC跑出奇怪的圆角错误。能用5个顶点画出来的图形不要用50个。我见过有人照着参考图一点一点描整出一个几百个顶点的多边形后面DRC报错跑了一天一检查全是顶点导致的离散误差。2.3 路径Path布线主力路径适合用来画连线、引脚走线和导线条。按A键激活路径工具然后连续点击几个点KLayout会沿着这些点生成一条有宽度的带状图形。路径和普通多边形的核心区别在于路径天然带有宽度属性和端点样式后续调整时你只需要改宽度整条带子的形状会跟着变而不需要手动去调整上下两条轮廓线。具体的控制参数在哪里调绘制完成后双击路径编辑面板里可以看到每个节点的坐标、路径总宽度Width、端点类型Flush、Round、Square等以及转角类型。宽度参数是绝对宽度不是半宽这个容易混淆我看到不少人把宽度50填成25导致走线窄了一半。端点类型一般用Flush也就是端面垂直截断这种样式在大多数工艺里都合法Round和Square会向外延伸出去一小截在严格的设计规则下可能出现额外的工艺几何需要留意。转角类型通常用斜切或圆弧你可以根据制造工艺要求来选。路径的编辑自由度也很高。双击路径后你可以点击路径节点拖动也可以在某段线上双击插入新的拐弯点。想调整某一段的方向直接拽节点就行。路径上所有节点的坐标都可以在右侧属性面板里精确输入做等长走线时非常有用。这里补充一个实用技巧路径画好后如果发现宽度不对可以选中路径后按CtrlI或者通过右键菜单打开属性面板改宽度但如果这条路径被转成了多边形有些导出流程会自动炸开那就只能手动拖动两条边了。所以能保持路径类型就尽量保持转多边形的操作等布局定稿后再做。2.4 文本Text与圆形文本在版图里主要用来做标记、注释和层识别。按T键激活文本工具在画布上点击一下输入字符内容回车确定。文本对象有字高、字体、位置、旋转等参数双击它可以随时修改。需要注意KLayout默认字体是“default”它生成的字符形状主要由直线和圆弧构成适合做光刻标识。如果工艺允许可以直接把文本转成多边形右键选择“转换成多边形”这样文本就变成了实实在在的图形能参与布尔运算和后续加工。圆形在KLayout里不是独立类型画圆是通过“创建多边形近似圆”来完成的。工具栏上那个圆圈图标实际生成的是一个由大量小线段逼近的圆。小线段数量越多圆越平滑但数据量也越大。版本较新的KLayout会在创建时弹窗问你分成多少段一般用64段或128段足够如果只是示意图32段也凑合。椭圆、圆环这些形状KLayout原生工具里没有现成的。我的办法是先画一个圆再用布尔运算生成圆环或者在圆的基础上编辑顶点拉成椭圆。麻烦是麻烦了点但胜在可控。3. 一次完整实操生成带Pad的电阻单元理论聊了一堆下面我们走一遍完整的实操。假设我要画一个简单的带Pad电阻单元结构不复杂一个长方形的电阻体两端各接一个方形PadPad再引出两条引脚。整个过程会用到矩形、多边形、路径、文本和最终的测量检查。3.1 建立层和网格准备画布先新建一个布局文件。在KLayout里新建版的默认单位是微米µm坐标数值直接对应微米这对我来说最顺手。如果你习惯纳米也可以在设置里改但整个项目里一定要保持一致混用单位是版图事故的高发原因。然后设置网格。按G键打开网格设置把网格步长设为0.005也就是5纳米。这个精度对大多数工艺规则来说够用了画图形时既能保证平滑又不至于因为精度过细让鼠标吸附得难受。接着在右下角Layer窗口新建三个图层名字随便起但颜色一定要区分明显。我通常建active有源区用绿色poly多晶硅用红色pad金属焊盘用蓝色图层的新建方式是在Layer窗口右键选择“新建层”然后在属性里改名、改颜色、改透明度。每建好一层记得查看一下当前层是否自动切换到了你刚建的那层。3.2 用矩形和多边形搭建主体先在active层画电阻体。选中active层按R键激活矩形工具在画布上拖动一个宽20、长80的矩形。如果拖动的不准确直接双击打开属性面板把宽度改成20高度改成80位置放到坐标10, 20到30, 100这个范围。电阻体一般不想做得太方正我们给它做一点导入导出端的斜坡。双击这个矩形进入顶点编辑状态选中右下角的顶点把它往里拖5个单位。这样一个简单的梯形电阻体就出现了。如果你希望两个端面是垂直的就把左上角和右上角的顶点位置对齐形成两边垂直、上下有斜坡的形状。接着画栅极。选中poly层按P激活多边形工具。我想在电阻体中间加一条横向栅极就在电阻体上方点击起点水平拉过去再点击下方两个点形成一个闭合的矩形长条。栅极宽度设为3长度比电阻体略宽这样后续检查时看得清楚边界。3.3 用路径连接引脚并调整细节接下来画Pad。切到pad层按R画两个边长为20的方形Pad分别放在电阻体两端外侧。位置对齐是重点我一般不用肉眼对齐而是选中Pad后在属性面板里输入精确坐标让Pad的左边距等于电阻体右端的x坐标加上预留间距。然后画引脚。按A激活路径工具从Pad的边沿开始往电阻体方向点几个点生成一条宽度为5、长度方向连接Pad和电阻体的路径。画完路径后双击它把端点类型设置为Flush把转角类型设置为斜切避免导出后DRC检查出圆角违规。这里还要做一个常见的微调复制右边那一整组Pad和引脚到左边。选中右边的Pad、引脚和部分电阻体图形按CtrlD原位复制然后按M激活移动工具输入向左移动的距离比如-100就得到了对称的一侧。做对称结构时这个“CtrlD再移动”的组合我几乎天天用。最后在顶层加一个文本标注。按T键在空白处点一下输入字符“R_POLY_10K”字高设为5颜色选个和背景反差大的。文本建议放在不影响图形的角落若后续要合并单元记得把文本归到注释层。3.4 最后的检查尺寸测量与层确认画完之后千万别急着保存。先用尺子工具量一遍关键尺寸。KLayout的工具栏里有一个尺子图标点它之后可以在画布上拉一条测量线状态栏会实时显示距离。我通常量这几个地方电阻体长度和宽度、Pad间距、引脚宽度、文本位置是否叠到了其他图形上。测量时如果发现某个尺寸差了0.005这种细微偏差多半是网格吸附导致顶点落在了非目标网格上。选中对象并按CtrlI打开属性面板手动修正坐标即可。如果发现Pad跑到了别的层上最简单的做法是选中它CtrlX剪切切到正确图层再CtrlV粘贴位置会保持在原地。完整检查一遍后按CtrlS保存文件。KLayout默认保存格式是.oasOASIS或.gdsGDSII。如果工艺厂要求GDS格式在导出时选好版本通常是GDSII Stream格式再确认单位和精度导出即可。4. 编辑形状时最常踩的坑问题排查4.1 图形画到别的层上去了这是出现频率最高的问题几乎每个新手都会遇到。表现是画了半天发现图形全都在另一个层上或者某个结构颜色不对。原因一般有两个一是创建新层后当前层没有自动切换过去大家手快直接开画图形自然记到了旧层二是图层窗口里某层被隐藏了但你不知道于是画出来的图形看起来“消失了”。排查思路先看右下角当前层高亮的是哪一层再看菜单栏左侧工具栏上方有没有显示当前层名。如果当前层不是目标层点一下目标层名再画即可。如果画好了才发现层选错选中有问题的图形按CtrlX剪下切到正确层再CtrlV粘贴图形位置不会变只是归属层变化了。隐藏层的检查在Layer窗口看层名前面的眼睛图标灰掉的就表示不可见。我习惯把不用的层隐藏但保留避免误画。4.2 多边形顶点点错了、闭合后想改画多边形时点错顶点有经验的用户会直接按退格键回退。但如果你已经闭合了多边形再想改就有点晕了——因为双击多边形虽然能进入编辑状态但顶点的选中操作和普通“选中对象”的交互不太一样。具体操作在非编辑状态下双击多边形进入顶点编辑。此时每个顶点显示为方框。拖动顶点本身就能改变位置。如果想把某个顶点精确移动到特定坐标可以先选中该顶点然后在属性面板输入目标坐标。垂直或水平移动整条边可以按住Shift再拖动边线KLayout会约束移动方向。如果只是想给多边形增加一个倒角或缺口更快捷的方式是用切割工具。KLayout内置了一个“切割”或者称为“划分”的功能可以沿一条直线把多边形切成两半再对其中一半做删除或移动。这种操作在画完一个复杂多边形后非常高效不用反复增删顶点。4.3 鼠标拖不动、选中和移动失灵明明对象就在眼前但用鼠标怎么都拖不动或者点击没反应。这个问题的根源通常不是KLayout坏了而是你当前处于某种特殊的编辑状态。最常见的是你正在用某个绘图工具此时画布处于“等待绘制”状态鼠标点击不会选中已有对象而是会生成新图形。解决办法是按Esc退出当前绘图工具恢复正常的选择模式。另外如果你开启了“锁定图层”功能在Layer窗口里某层被上了锁该层上的图形是选中不了的。检查一下图层属性把不需要保护层的锁解开。移动对象时如果发现只能水平或垂直移动那是移动工具默认开启了方向约束。按Shift键切换约束方向或者松开Shift再拖拽就能自由移动。另一个常见问题是移动后图形落到了非网格位置此时打开吸附或直接用坐标输入把位置修正回来。4.4 路径端头连不上、转角处有缺口路径连不上的问题通常不是路径本身坏了而是端头样式导致的视觉误差。默认的Flush端头是平齐的但如果两条路径的端头没有完全重叠放大之后会看到一条细缝。要解决它最简单的办法是让路径的端点略微“侵入”到另一条路径内部覆盖至少半个网格再用布尔运算的合并功能把两条路径合并成一个对象。转角处有缺口多半是路径宽度不统一导致的。检查每条路径属性里的宽度值是否一致KLayout的路径宽度在每段上是独立的如果你复制了另一条路径再改宽度可能出现前半段是5、后半段是8的情况。修复方法是选中路径双击进入编辑状态把所有段的宽度统一设为同一数值。4.5 常用快捷键速查表最后整理一份我在KLayout里用得最多的快捷键表格汇总放在这里方便你贴在屏幕边上操作快捷键备注绘制矩形R点按两角成框绘制多边形P逐个点顶点空格闭合绘制路径A连续点转折点回车结束插入文本T设置字高和字体撤销CtrlZ撤销一步复制对象CtrlC复制到剪贴板原位复制CtrlD在原位置复制随后移动移动对象M然后可直接输入位移向量旋转对象右键菜单或属性面板填角度删除对象Delete删除选中对象放大/缩小滚轮鼠标所在点为缩放中心这些快捷键在不同版本KLayout里基本稳定个别版本可能会微调但大方向不会变。如果你按了没反应先看一眼菜单栏对应的菜单后面写的快捷键是不是改成了别的再对着改也行。我个人的习惯是能键盘操作的尽量不用鼠标点菜单。画图速度上来了改图时的从容感完全是两个档次。形状编辑这个功能看起来基础但基础功扎实了后面接触PCell参数化单元、脚本批处理和布尔运算时你会发现自己理解得特别快。先把手头的矩形、多边形、路径玩熟就是一个非常好的开始。