简介:L-Edit V11.1 是一款面向集成电路版图设计与教学场景的 EDA 工具资源,适合微电子、集成电路相关专业的学生、教师及初入版图设计的工程师使用,可解决课堂演示、实验练习与基础版图绘制中缺少可用工具的问题。压缩包共 619 个文件,约 26.77MB,内含 exe 可执行程序、dll 动态库、h 与 c 源码文件、tdb/tdo 数据库与模板、bat 批处理脚本、pdf 说明文档及 lvs、drc、spc 等工艺与验证相关文件,覆盖程序运行、示例工程与规则校验等用途。资源主打免安装、解压即用,省去繁琐配置环节,便于快速投入教学与练习。目前已有 4079 人学习下载,热度较高。包内附带多个批处理脚本与示例工程,可辅助完成版图绘制、LVS 比对与 DRC 检查等基础操作,帮助读者在较短时间内熟悉 L-Edit 的界面与工作流程,适合作为课程实验与自学入门的参考工具。
1. 从一次版图导入翻车说起:L-Edit V11.1 到底能干什么
如果你做的是模拟电路、MEMS 或者功率器件的版图,大概率绕不开一个场景:工艺厂发来一份 GDSII,你打开一看,图层编号对不上、DRC 报了几百个错、导出又丢层次。这时候很多人第一反应是找 Tanner L-Edit。L-Edit V11.1 就是 Tanner EDA 这套工具链里的版图编辑器版本,它干的活很明确——画版图、改版图、跑 DRC、做 LVS、导出 GDSII/CIF/DXF 这些交换格式。它不像大型 EDA 那样吃资源,装在一台普通工作站上就能跑,适合中小规模版图、教学实验、工艺验证片这类场景。我见过不少团队用它做流片前的版图整理和规则检查,尤其是那些不需要全定制大流程的项目。这一版在图层管理、DRC 规则编译和 GDS 导入导出上比早期版本稳不少,但坑也集中在这几个地方。下面按我实际拆包和跑流程的顺序,把能复现的步骤和参数讲清楚。
2. 安装与授权配置:别让 License 卡住第一步
2.1 安装前的环境确认
L-Edit V11.1 是 Windows 平台的工具,常见做法是装在 Windows 7 或 Windows 10 的 64 位系统上。我一般会先确认三件事:系统区域设置是不是中文、有没有装 .NET Framework 3.5、安装路径里有没有空格和中文。区域设置如果是中文,某些 DRC 规则文件里的逗号会被当成全角处理,后面编译规则时直接报语法错误,这个坑我踩过不止一次。安装包解压后通常是一个 setup.exe 加一个 crack 或 license 目录,先跑 setup,装完不要急着启动,先把 license 配好。
2.2 License 配置的两种常见方式
L-Edit 的授权一般走 FlexLM。你需要一个 license 文件和一个 lmgrd 守护进程。常见做法是把 license 文件放到安装目录下的 license 文件夹,然后设置环境变量。下面是我常用的配置片段:
# 设置 License 文件路径,注意路径不要有空格 set LM_LICENSE_FILE=C:\Tanner\license\license.dat # 有些版本还需要指定守护进程端口 set TANNER_LICENSE_FILE=27000@localhost逻辑说明:LM_LICENSE_FILE 告诉 L-Edit 去哪里找授权文件,TANNER_LICENSE_FILE 指定端口和主机。参数上,27000 是 FlexLM 默认端口,如果本机 27000 被占用,改成 27001 或别的空闲端口,同时 license 文件里的 SERVER 行也要同步改。启动 lmgrd 时用lmgrd -c license.dat -l debug.log,debug.log 会记录授权握手过程,连不上就看这个日志,比瞎猜快。
2.3 首次启动的检查项
启动 L-Edit 后,先别急着画图。点 Help 菜单看 About,确认版本号是 11.1,授权状态显示为永久或有效期内的节点锁定。然后新建一个空白版图,随便画一个矩形,导出成 GDSII,再用文本编辑器打开这个 GDS 文件,看里面有没有正常的 BOUNDARY 和 LAYER 记录。这一步能验证导出链路是通的。如果导出报错,多半是图层映射没配,下一章会讲。
3. 图层管理与 GDSII 导入导出:把工艺厂的文件吃进来
3.1 图层映射表的建立
工艺厂给的 GDSII 里,每个图层用 layer number 和 datatype 标识,但 L-Edit 内部用的是自己的图层名和颜色。导入时如果不对映射,所有图形会堆在一个图层上,或者干脆看不见。常见做法是先在 L-Edit 里建一个工艺文件(.tpr),把 layer number、datatype、名称、颜色、填充图案一一对应。我一般会从工艺厂要一份 layer map 表格,然后手动填进 L-Edit 的 Setup > Layers 对话框。下面是一个典型的映射表结构:
| GDS Layer | Datatype | L-Edit 图层名 | 用途 |
|---|---|---|---|
| 1 | 0 | NWELL | N 阱 |
| 2 | 0 | PWELL | P 阱 |
| 3 | 0 | ACTIVE | 有源区 |
| 4 | 0 | POLY | 多晶硅 |
| 5 | 0 | CONT | 接触孔 |
| 6 | 0 | METAL1 | 第一层金属 |
填完后保存成 .tpr 文件,以后导入同类工艺的 GDS 直接加载这个文件就行。注意 datatype 为 0 是绝大多数情况,但有些工艺会用 datatype 区分不同用途,比如 1/0 和 1/1,漏掉一个就会丢图形。
3.2 导入 GDSII 的命令与参数
L-Edit 支持脚本导入,用 TCL 或它的内部宏语言。我习惯用 TCL 脚本批量处理,下面是一个导入并做图层映射的示例:
# 加载工艺映射文件 load_technology "C:/Tanner/tech/process.tpr" # 导入 GDSII,指定输入文件和单位 import_gds "C:/work/input.gds" -units micron -scale 1.0 # 检查导入后的图层数量 set layers [get_layers] puts "Imported layers: $layers"逻辑说明:load_technology先加载映射表,确保图层对应关系正确;import_gds的-units micron指定输入文件单位是微米,-scale 1.0表示不缩放。如果工艺厂给的是纳米单位,这里要改成-units nanometer并相应调整 scale。导入后get_layers返回实际用到的图层列表,跟映射表对一下,少了就说明映射漏了。这一步我每次都会跑,因为 GDS 里的图层号有时候跟文档不一致,以实际导入结果为准。
3.3 导出 GDSII 的注意事项
导出比导入更容易翻车。常见问题是导出后层次丢失、文本层没带上、或者多边形被合并。导出时用export_gds命令,关键参数是-hierarchical和-text:
# 导出 GDSII,保留层次结构和文本 export_gds "C:/work/output.gds" -hierarchical -text -units micron-hierarchical保留单元层次,不勾选的话所有图形会被打平到一个单元里,后期改版图会疯掉。-text把文本标签一起导出,少了这个参数,版图上的 pin 标注全丢。单位参数跟导入时保持一致,否则尺寸会差 1000 倍。导出后我一般会用第三方 GDS 查看器再打开一遍,确认图层和层次都对得上。
4. DRC 与 LVS 实战:规则文件怎么写、怎么调
4.1 DRC 规则文件的基本结构
L-Edit 的 DRC 用一套类似 C 的规则语言,文件后缀通常是 .drc 或 .rul。一个最小的规则文件包含图层定义、间距检查、宽度检查。下面是一个针对金属层的 DRC 片段:
// 定义图层 layer METAL1 = 6; layer CONT = 5; // 最小宽度检查 width(METAL1) < 0.5 : "Metal1 width < 0.5um"; // 最小间距检查 space(METAL1) < 0.5 : "Metal1 space < 0.5um"; // 接触孔包围检查 enclosure(CONT, METAL1) < 0.1 : "CONT not enclosed by METAL1";逻辑说明:layer定义图层号,跟前面映射表对应;width检查最小宽度,小于 0.5 微米就报错;space检查同层间距;enclosure检查接触孔被金属包围的余量。每条规则后面的字符串是报错信息,会显示在 DRC 结果窗口里。参数值来自工艺厂的 design rule 文档,不能自己拍脑袋定。写完后用 L-Edit 的 DRC 编译器编译,编译不过会提示行号和错误类型,常见的是分号漏了或者括号不匹配。
4.2 跑 DRC 的流程与结果解读
编译通过后,在 L-Edit 里点 Tools > DRC,选择规则文件,点 Run。跑完后结果窗口会列出所有违规,每条带坐标和规则名。我一般会先按规则名分组,看哪类错误最多。如果是间距错误集中在一个区域,多半是某个器件画得太挤;如果是宽度错误,可能是导入时单位搞错了。双击错误条目会跳转到版图对应位置,高亮显示违规图形。修完一批后重新跑,直到错误清零。注意 DRC 跑之前要确保版图没有未解析的引用,否则会漏检。
4.3 LVS 的配置与常见报错
LVS 比 DRC 复杂,需要网表文件和器件识别规则。常见做法是从原理图导出 SPICE 网表,然后在 L-Edit 里配置 LVS 规则,指定器件识别层和端口。跑 LVS 时最常见的报错是“器件不匹配”和“端口未找到”。器件不匹配通常是识别层画错了,比如 MOS 的沟道层没包住;端口未找到是 pin 文本层没放对位置。我一般会先用一个最简单的反相器做 LVS 验证,通了再跑全电路。LVS 规则文件里器件定义部分要跟工艺厂的器件结构一致,这个不能自己编。
5. 避坑与排查:那些让我重画版图的瞬间
5.1 导入 GDS 后图形全部堆在一层
现象:导入工艺厂的 GDS 后,所有图形都在同一个图层,颜色一样,分不清哪层是哪层。原因:没有加载工艺映射文件,或者映射文件里的 layer number 跟 GDS 里的不一致。解决:先加载 .tpr 文件再导入,如果还不行,用 GDS 查看器打开原文件,确认实际的 layer number 和 datatype,然后修正映射表。我现在的习惯是导入前先用查看器扫一眼图层列表。
5.2 DRC 编译报语法错误但行号对不上
现象:DRC 编译器报某一行有语法错误,但打开文件看那一行明明没问题。原因:文件编码问题,中文系统下用记事本保存的规则文件可能带 BOM 头,或者换行符是 CRLF 导致解析偏移。解决:用 Notepad++ 或 VS Code 把文件转成 UTF-8 无 BOM,换行符改成 LF。这个坑很玄学,但一旦遇到就卡半天。
5.3 导出 GDS 后尺寸差 1000 倍
现象:导出的 GDS 在第三方工具里打开,图形尺寸比预期大 1000 倍或小 1000 倍。原因:导入时用了微米单位,导出时用了纳米单位,或者反过来。解决:导入和导出用同一套单位参数,并且在导出后用查看器量一下关键尺寸。我一般会在版图里放一个已知尺寸的标记图形,导出后量这个标记,对不上就改单位重导。
5.4 LVS 报端口未找到但版图上明明有 pin
现象:LVS 跑完提示某个端口未找到,但版图上确实放了 pin 文本。原因:pin 文本的图层号跟 LVS 规则里定义的端口层不一致,或者文本被其他图形遮挡导致识别不到。解决:检查 LVS 规则里的端口层定义,确认跟版图里用的文本层一致;把 pin 文本移到空白区域,避免被金属覆盖。这个问题的血泪经验是,pin 文本最好单独放一层,不要跟图形混在一起。
5.5 大版图跑 DRC 内存溢出
现象:版图规模大了以后,跑 DRC 到一半 L-Edit 崩溃或报内存不足。原因:DRC 引擎默认会加载整个版图到内存,版图太大就爆了。解决:在 DRC 设置里开启分层检查,或者把版图切成几个区域分批跑。我一般会在规则文件里加hierarchical选项,让引擎按单元层次处理,能省不少内存。如果还不行,就升级机器内存,这个没有后悔药。
6. 进阶技巧:用 TCL 脚本批量处理版图与规则验证
到了这一步,如果你已经能手动跑通导入、DRC、导出,接下来值得花时间的是把重复操作脚本化。L-Edit V11.1 的 TCL 接口能调大部分菜单功能,我常用它做批量格式转换和规则预检。下面是一个批量把某个目录下所有 GDS 导入、跑 DRC、再导出的脚本框架:
# 设置工作目录和工艺文件 set work_dir "C:/work/gds_batch" set tech_file "C:/Tanner/tech/process.tpr" set drc_file "C:/Tanner/drc/standard.drc" # 遍历目录下所有 .gds 文件 foreach gds_file [glob -directory $work_dir *.gds] { # 加载工艺映射 load_technology $tech_file # 导入当前 GDS import_gds $gds_file -units micron -scale 1.0 # 编译并运行 DRC compile_drc $drc_file run_drc # 检查 DRC 结果,如果有错误就记录文件名 set errors [get_drc_errors] if {[llength $errors] > 0} { puts "DRC errors in $gds_file: [llength $errors]" } # 导出清理后的 GDS set out_file [file rootname $gds_file]_checked.gds export_gds $out_file -hierarchical -text -units micron # 关闭当前设计,准备下一个 close_design }逻辑说明:glob拿到目录下所有 GDS 文件路径;load_technology每次导入前重新加载映射,避免上一个文件的图层状态残留;compile_drc和run_drc跑规则检查;get_drc_errors返回错误列表,有错误就打印文件名和数量;export_gds导出时保留层次和文本;close_design清空当前设计,防止内存累积。参数上,-units micron和-scale 1.0要跟你的工艺一致,如果工艺是纳米就改。这个脚本跑之前,先在单个文件上验证一遍,确认 DRC 规则文件路径和工艺文件路径都对。
验证脚本是否可靠,我一般会拿三个文件做对照:一个已知无错的、一个已知有间距错的、一个图层复杂的。跑完后看输出日志,无错的文件不应该报错,有错的文件错误数量跟手动跑一致。如果脚本跑出来的结果跟手动不一致,多半是close_design没清干净,或者 DRC 规则文件里有依赖当前设计状态的变量。
还有一个技巧是给 DRC 规则文件加版本标记。我习惯在规则文件头部写一行注释,记录修改日期和对应的工艺版本,比如// DRC v2.3 2025-06-01 for process 0.18um。这样批量跑的时候,日志里能看出用的是哪版规则,出了问题好回溯。另外,导出 GDS 之前,我会用check_design命令做一次内部一致性检查,看有没有悬空引用或零面积图形,这些在 DRC 里不一定报,但流片时会被工艺厂打回来。
从那以后我每次跑批量脚本,都强制先拿一个最小版图走一遍全流程,确认导入、DRC、导出三个环节都正常,再放开跑整个目录。这个习惯帮我省过好几次重跑的时间。希望帮到你。
本文还有配套的精品资源,点击获取