
简介L-Edit V11.1 是一款面向集成电路版图设计与教学场景的 EDA 工具资源适合微电子、集成电路相关专业的学生、教师及初学版图设计的工程师使用。资源为免安装版本解压后即可直接运行省去繁琐的配置流程便于在课堂演示或自学环境中快速上手。压缩包共收录 619 个文件整体约 26.77MB涵盖 tdb、tdo 等工艺与版图数据文件dll、h、c、cpp 等程序与开发文件以及 lvs、drc、ext、spc 等验证与仿真相关文件另附 pdf 说明文档、bat 批处理脚本和 exe 可执行程序结构较为完整。内容预览中可见 crack、resonator、xor2 等批处理脚本涉及版图示例与 LVS 验证流程方便读者对照练习版图绘制、规则检查与电路提取等操作。目前已有 4079 人学习下载适合作为版图设计入门与教学实践的参考工具包。1. 从 L-Edit V11.1 的版图窗口说起为什么老工程师还在用它画标准单元如果你在版图工程师的群里问一句“现在画标准单元用什么”大概率会得到两个答案一个是脚本化程度更高的新工具另一个就是 L-Edit V11.1。这个版本号听起来有点年代感但它在中小规模模拟电路、标准单元库、MEMS 结构、功率器件版图里依然活跃。原因不复杂它把“画版图”这件事拆得足够直白图层、坐标、DRC 规则、GDS 导出都在一个界面里闭环不需要你先搭一套复杂的工程环境。我见过不少团队的做法是用 L-Edit V11.1 做单元级版图设计和快速迭代再把 GDS 丢给后续流程。它适合谁适合需要自己掌控版图细节、又不想被重型工具绑死的模拟版图工程师、器件工程师、高校实验室里做流片验证的研究生。这一章不展开操作先把“它到底解决什么问题”说清楚它解决的是从原理图到可制造版图之间那段最磨人的手工活尤其是当你的单元数量在几十到几百个、规则又经常变的时候。2. 用 L-Edit V11.1 建一个可复用的标准单元从图层定义到 GDS 导出2.1 先定图层映射表别急着画第一个矩形很多人打开 L-Edit V11.1 之后第一反应是直接画矩形结果画到一半发现图层名字对不上工艺库后面 DRC 和导出全乱。我的习惯是先把工艺厂给的图层对照表整理成一张表再在 L-Edit 里建对应的 Layer。常见做法是打开 Setup 菜单下的 Layers 对话框逐条添加图层名、颜色、填充样式、GDS 编号。这里的关键是 GDS 编号必须和工艺库一致否则导出后版图会“丢层”。下面这张表是我做模拟单元时常用的最小图层集合你可以按自己的工艺增删图层名用途GDS 编号示例线宽/间距典型值NWELLN 阱1最小宽度 0.6 umPOLY多晶硅栅2最小宽度 0.18 umACTIVE有源区3最小宽度 0.22 umCONT接触孔40.22 um x 0.22 umMET1第一层金属5最小宽度 0.23 umVIA1通孔60.23 um x 0.23 umMET2第二层金属7最小宽度 0.28 um提示GDS 编号不是随便填的一定要拿工艺厂的 Layer Map 文件核对。我见过有人把 MET1 写成 6结果导出后金属层和通孔层叠在一起DRC 报了几百个错。建完图层后建议立刻保存一个模板文件.tdb后面每画一个新单元都从这个模板复制。这样做的收益在第三、第四个单元时就会体现出来你不用再重复调颜色、改线宽、对 GDS 编号。2.2 画一个反相器单元坐标、栅格与对齐的实操细节假设我们要画一个最简单的反相器单元版图尺寸控制在 2 um x 2 um 以内。步骤如下第一步设置栅格。在 L-Edit V11.1 里按快捷键 CtrlG 打开 Grid 设置把 Snap 设成 0.01 umDisplay 设成 0.05 um。这样你画矩形时坐标会自动吸附到 0.01 um避免出现 0.003 um 这种“脏坐标”。脏坐标在后续 DRC 和 LVS 里是玄学错误的源头之一。第二步画有源区。选择 ACTIVE 图层用 Box 工具画一个 0.8 um x 0.6 um 的矩形作为 PMOS 和 NMOS 的共用有源区。注意 PMOS 和 NMOS 之间要留足够的阱间距通常 NWELL 要包住 PMOS 有源区 0.3 um 以上。第三步画多晶硅栅。选择 POLY 图层画一条宽度 0.18 um 的竖条横跨有源区。这条栅的左右边缘要对齐有源区边界不能超出太多否则寄生电容会变大。第四步打接触孔。在 CONT 图层上于有源区两端各放两个 0.22 um x 0.22 um 的方孔孔间距 0.3 um。这里有个血泪经验接触孔不要贴着有源区边缘放要留 0.1 um 以上的包围否则工艺厂会判“孔到有源区边界太近”。第五步连金属。用 MET1 把接触孔连起来再引出输入输出端口。金属线宽至少 0.23 um拐角处用 45 度斜角或圆弧不要用 90 度直角——直角在先进工艺里容易导致电迁移问题。下面是一段用 L-Edit 的 TCL 脚本批量生成接触孔阵列的示例适合在单元里重复放孔时用# 在 L-Edit V11.1 中批量生成接触孔阵列 # 参数起始坐标 x0 y0孔数 nx ny孔间距 pitch孔尺寸 size proc draw_contact_array {layer x0 y0 nx ny pitch size} { for {set i 0} {$i $nx} {incr i} { for {set j 0} {$j $ny} {incr j} { set x [expr {$x0 $i * $pitch}] set y [expr {$y0 $j * $pitch}] # 创建矩形并指定图层 set rect [ledit::create_rectangle $layer $x $y [expr {$x $size}] [expr {$y $size}]] } } } # 调用示例在 CONT 图层上从 (0.5, 0.5) 开始放 2x2 个孔间距 0.5孔尺寸 0.22 draw_contact_array CONT 0.5 0.5 2 2 0.5 0.22这段脚本的逻辑很直接双重循环按间距递增坐标每次创建一个矩形。参数里pitch是孔中心到中心的距离size是孔的边长。注意pitch必须大于size否则孔会重叠。我一般会把pitch设成size 0.28留出足够的间距余量。2.3 DRC 规则检查把错误挡在导出之前画完单元后不要急着导出 GDS。先在 L-Edit V11.1 里跑一遍 DRC。打开 Tools 菜单下的 DRC加载工艺厂提供的规则文件通常是 .drc 或 .rul 格式。如果没有现成规则文件可以自己写几条最关键的检查比如最小线宽、最小间距、孔包围。下面是一个简化的 DRC 规则片段用来检查 MET1 的最小线宽和最小间距# L-Edit DRC 规则示例MET1 最小线宽和间距 # 最小线宽检查 layer MET1 width 0.23 # 如果 MET1 宽度小于 0.23 um报错 # 最小间距检查 space 0.23 # 如果 MET1 间距小于 0.23 um报错 # 接触孔包围检查 layer CONT enclosure MET1 0.05 # CONT 被 MET1 包围小于 0.05 um报错跑完 DRC 后L-Edit 会在输出窗口列出所有违规坐标。双击某条错误视图会自动跳到对应位置。这里有个小技巧把 DRC 结果导出成文本用脚本按错误类型分类先修“间距”类错误再修“包围”类错误因为间距错误往往会影响多个单元。2.4 导出 GDS三个必须确认的参数导出 GDS 是最后一步也是最容易翻车的一步。在 File 菜单下选择 Export GDSII重点确认三个参数第一Layer Map 文件。必须选择与当前版图图层定义一致的那个映射文件。如果选错导出的 GDS 里图层编号会全部错位。第二单位。L-Edit 内部默认单位是微米GDS 导出时通常用 1e-6 作为用户单位。如果你在导出对话框里看到“User Unit”是 0.001那导出的版图会缩小 1000 倍。这个参数我吃过亏导出的 GDS 在后续工具里打开只有几个像素大。第三精度。GDS 的坐标精度通常是 0.001 um 或 0.0001 um。对于大多数模拟工艺0.001 um 够用如果你画的是射频结构建议用 0.0001 um。导出完成后用 L-Edit 重新打开这个 GDS 文件对比图层数量和单元边界。如果发现少层或边界偏移回到 Layer Map 和单位设置排查。3. L-Edit V11.1 的避坑与排查那些年我们踩过的图层和坐标坑3.1 现象DRC 报了几百个错但版图看起来没问题原因最常见的是栅格没对齐导致坐标出现 0.001 um 级别的偏移。L-Edit V11.1 的 DRC 引擎对坐标非常敏感哪怕你肉眼看着两条线贴在一起实际坐标可能差了 0.002 um。解决按 CtrlG 把 Snap 设成 0.01 um然后全选版图用 Edit 菜单下的 Snap to Grid 功能把所有坐标吸附到栅格上。再跑一次 DRC大部分“假错误”会消失。3.2 现象导出的 GDS 在后续工具里打开金属层不见了原因Layer Map 文件里的 GDS 编号和版图图层定义不一致。比如你在 L-Edit 里把 MET1 的 GDS 编号设成 5但导出时选的映射文件里 MET1 对应的是 7。解决打开 Setup 下的 Layers 对话框逐个核对每个图层的 GDS 编号然后重新导出。建议把正确的映射关系保存成单独的 .map 文件每次导出都用它。3.3 现象接触孔在 DRC 里报“孔包围不足”但明明留了 0.1 um原因接触孔的包围检查是看孔边缘到有源区或金属边缘的距离不是看孔中心。如果你放孔时用的是中心坐标实际边缘可能只留了 0.05 um。解决在放孔时用孔的中心坐标减去孔边长的一半得到孔边缘坐标再检查包围。或者直接用脚本批量放孔在脚本里把包围量作为参数传进去。3.4 现象L-Edit V11.1 打开大版图时卡顿严重原因V11.1 是较老的版本对超大版图的渲染优化有限。如果你在一个文件里放了几万个矩形视图刷新会明显变慢。解决把大版图拆成多个单元文件用层次化设计。每个单元单独保存最后在一个顶层文件里引用。这样每次只加载当前编辑的单元卡顿会缓解很多。另外关闭不必要的图层显示只打开当前编辑需要的层。3.5 现象TCL 脚本执行到一半报错但错误信息看不懂原因L-Edit V11.1 的 TCL 解释器对变量类型和图层名大小写敏感。比如你写layer met1但实际图层名是MET1就会报“layer not found”。解决在脚本开头用puts打印当前图层列表确认图层名拼写。另外所有坐标变量建议用expr显式声明为浮点数避免整数除法导致坐标归零。4. 把 L-Edit V11.1 用成批量单元生成器一个参数化单元的进阶写法当你已经能熟练画单个单元后下一步自然是“批量生成”。L-Edit V11.1 的 TCL 接口虽然不算现代但足够让你写一个参数化的单元生成器。我一般会这样做把单元的关键尺寸栅宽、孔数、金属宽度定义成变量然后用一个主脚本读入参数表循环生成不同尺寸的单元最后统一导出 GDS。下面是一个参数化反相器单元的脚本骨架# 参数化反相器单元生成器 # 参数栅宽 wg孔数 ncont金属宽度 wm proc generate_inverter {wg ncont wm} { # 创建新单元 set cell [ledit::create_cell INV_wg${wg}_nc${ncont}] # 画有源区 ledit::create_rectangle ACTIVE 0 0 [expr {$wg 0.4}] 0.6 # 画多晶硅栅 ledit::create_rectangle POLY [expr {$wg/2 - 0.09}] -0.1 [expr {$wg/2 0.09}] 0.7 # 批量放接触孔 for {set i 0} {$i $ncont} {incr i} { set x [expr {0.2 $i * 0.5}] ledit::create_rectangle CONT $x 0.2 [expr {$x 0.22}] 0.42 } # 画金属 ledit::create_rectangle MET1 0 0.1 $wm 0.5 # 返回单元名 return $cell } # 批量生成不同尺寸的单元 foreach wg {0.5 0.8 1.0} { foreach nc {2 3 4} { generate_inverter $wg $nc 0.5 } }这段脚本的核心是generate_inverter过程它接收三个参数分别控制栅宽、接触孔数量和金属宽度。内部用create_rectangle逐层绘制最后返回单元名。主循环遍历不同的参数组合一次性生成 9 个单元。参数说明wg决定栅的横向尺寸ncont决定接触孔个数wm决定金属引出线的宽度。注意wg/2在 TCL 里是浮点除法因为wg本身是浮点数如果你传整数进去记得用expr {double($wg)/2}。生成完所有单元后用 File 菜单下的 Export GDSII 一次性导出。导出前建议先跑一遍 DRC把每个单元都检查一遍。如果某个单元报错脚本会继续生成后面的单元但错误会记录在日志里你可以根据单元名定位到具体参数组合。进阶技巧把参数表写成一个 CSV 文件用 TCL 的open和gets逐行读取这样不用改脚本就能调整参数。我通常会把常用尺寸组合放在 CSV 里每次流片前根据工艺角微调几个值重新跑一遍脚本几分钟就能得到全套单元版图。最后说一个我自己的习惯每次生成完一批单元我会随机挑三个用 L-Edit 打开手动量一下关键尺寸确认脚本没有把某个参数写错。这个习惯帮我拦住了好几次“栅宽少写一个零”的事故。希望帮到你。本文还有配套的精品资源点击获取