1. 为什么版图器件自动加Label值得单独拿出来说
在 Virtuoso Layout XL 里画版图,最烦的不是连线、不是对位,而是画完一堆器件后要手动给每个管子、电阻、电容加 Label。手动加 Label 意味着你要一个个点进属性框,复制器件名,再创建文本层,对齐位置,改字体大小,还要担心图层选错导致 DRC 报错。如果版图里有几百个器件,这个活能占掉你小半天时间。
Virtuoso Layout XL 的 Auto Label 功能,解决的就是这种重复性操作。它不是一个独立工具,而是集成在 XL 联动环境里的批量操作。最适合用这个功能的场景是:你已经完成了原理图驱动版图(Schematic Driven Layout)的基本布局和连线,准备进入后期标注阶段,或者需要快速生成一批用于 LVS 比对的器件标识。
但很多人容易误解一点:Auto Label 不是万能标注器。它默认只认器件实例名(instance name),不会自动提取宽度、长度、电阻值这些参数。如果你的目的是要标 W/L 值,得额外写 Skill 脚本或者手动改。所以,先明确你的需求:是要快速生成 LVS 需要的器件标识,还是需要带参数值的完整标注。
我一般会建议在布局布线完成 70% 左右时跑一次 Auto Label,这样后期调整器件位置或复制模块时,不用重新标注全部器件。如果一上来就标注,后期移动器件容易导致 Label 错位。
2. 启用 Auto Label 前必须确认的 3 个前置条件
Auto Label 功能能不能用起来,不取决于你点哪个菜单,而取决于你的设计环境是否满足这三个条件。很多新手卡住,都是因为漏了其中一项。
2.1 确认当前模式是 Layout XL,不是 L
菜单栏左上角看窗口标题,如果是“Virtuoso Layout Editing”,说明是 L 模式,这个模式没有自动标注功能。必须切换到“Virtuoso Layout XL”。切换方法是:在版图窗口里点顶部菜单Launch->Layout XL。如果这个选项是灰色的,说明你还没挂载原理图,或者版图与原理图没关联上。
关联原理图的方法是:在版图窗口点Design->Schematic->Open,选中对应的原理图文件。关联成功后,版图里的器件应该会高亮显示原理图里的对应节点。
2.2 确认版图层级和显示设置
Auto Label 生成的 Label 会放在当前选中的图层上。如果你在金属层激活状态下跑自动标注,所有 Label 都会变成金属层文本,DRC 会报错。正确的做法是:先切换到文本层(通常是 text 层或者 label 层),具体层名取决于你的 PDK。
检查当前层的方法:看左侧 LSW(Layer Selection Window)窗口,选中名为“text”或“label”的层,如果不确定,可以问项目负责人或者查 PDK 文档。有些工艺库会把 LVS 识别层和普通文本层分开,这里要选 LVS 识别层。
另一个容易忽略的点是显示精度。如果版图显示精度设置太低,Auto Label 可能会因为坐标对齐问题把文本标在奇怪的位置。建议在跑自动标注前,在版图窗口里输入s打开设置,把“Snap Mode”改成“orthogonal”或“anyAngle”,避免文本错位。
2.3 确认器件实例名规则和原理图一致性
Auto Label 抓取的是器件实例名,比如“M1”、“R2”、“C5”。如果原理图里的器件名含特殊字符(比如斜杠、空格),或者版本迭代过程中有器件被重命名,自动标注可能会漏标或错标。
在跑自动标注前,我习惯先做一次原理图和版图的简单对照:在版图窗口按q选中一个器件,看属性框里的“Instance Name”是否和原理图一致。如果有不一致的,需要回到原理图重新生成网表,再更新版图。
3. 自动标注操作流程:从单器件测试到批量处理
满足前置条件后,实际操作只有几步,但顺序和参数设置会影响最终效果。下面按“单器件测试 -> 局部标注 -> 全版图标注”的顺序拆解。
3.1 先用一个器件验证自动标注是否工作
不要一上来就全选所有器件。先选中一个 MOS 管或者电阻,右键点击Edit->Label->Auto Generate。如果功能可用,会弹出一个参数设置窗口。如果这个菜单是灰色的,回到第 2 步检查模式或关联状态。
参数窗口里最重要的两个选项是“Label Type”和“Position”。Label Type 一般选“Instance Name”,这样标出来的是器件名。Position 建议选“Auto”,让工具自动找空白区域放置文本。如果你希望所有 Label 统一放在器件上方或左侧,可以选“Top”或“Left”。
点击 OK 后,如果器件旁边出现了一个文本,说明功能正常。这时再按q选中这个文本,确认它所在的图层是正确的 text 层,并且字体大小不会太大或太小。默认字体大小可能不适合你的版图比例,可以在生成前在设置里调整。
3.2 批量标注时的区域选择和过滤技巧
确认单器件工作正常后,可以扩大范围。批量标注有两种方式:框选区域标注和全版图标注。
框选区域标注的方法是:用鼠标拖拽选择一个矩形区域,覆盖你想标注的器件,然后右键Edit->Label->Auto Generate。这种方式适合模块化设计,比如先标模拟部分,再标数字部分。
全版图标注的方法是:直接按Ctrl+A全选,再跑自动标注。但全选时容易选中连线、衬底接触等非器件对象,导致工具报错。更稳妥的做法是使用选择过滤器:在版图窗口顶部找到选择过滤图标(通常是一个小漏斗),点开之后只勾选“Instances”,这样全选时只会选中器件实例。
如果你的版图里有不同等级的器件(比如顶层模块和子模块),建议分级标注:先进入子模块内部标注完,再回到顶层标注顶层器件。避免混标导致文本重叠或层级混乱。
3.3 标注后的微调:位置整理和图层检查
自动标注生成的文本位置是工具自动计算的,可能会出现文本重叠、方向不统一、超出器件边界等问题。批量标注后一定要花时间整理。
整理位置时,不要一个个手动拖。先用Shift+鼠标点击多选多个 Label,然后用对齐工具(菜单Edit->Align)快速对齐。对齐时注意保持文本与器件的对应关系,避免拉错。
图层检查是必须的:全选所有 Label,按q看属性,确认它们都在正确的文本层上。如果发现图层错了,不要直接改属性,而是用“Change Layer”功能(Edit->Other->Change Layer)批量切换,这样能保持其他属性不变。
4. 自动标注的边界和常见问题排查
Auto Label 功能在简单场景下很好用,但遇到复杂情况时,需要手动干预或换用其他方法。
4.1 什么情况下 Auto Label 会失效
以下 4 种情况,Auto Label 可能无法正常工作或效果不好:
- 器件是阵列(Array)结构:比如一个由 100 个最小单位晶体管组成的阵列,Auto Label 可能只标主实例,不标子单元。这时需要手动标注或写 Skill 脚本循环标注。
- 器件被旋转或镜像:如果器件旋转了 90 度或镜像放置,自动标注的文本方向可能错乱。解决方法是生成后批量旋转文本。
- 版图中有自定义参数化器件(PCELL):部分 PCELL 的实例名提取可能不标准,需要检查 PDK 支持情况。
- 原理图和版图有未解决的差异:如果原理图更新后版图未同步,自动标注会沿用旧名称,导致 LVS 比对失败。
4.2 标注后 LVS 仍报错的排查顺序
如果自动标注完成后跑 LVS 还是报器件缺失或匹配错误,按这个顺序查:
- 先看 Label 图层:确认 Label 是否在 LVS 规则文件定义的识别层上。有些工艺要求 Label 必须在特定层(如
text层)且带有特定属性(如drawing或pin)。 - 检查文本内容:双击 Label 看文本内容是否完全匹配器件名。特别注意大小写、前后空格、特殊字符。LVS 工具对文本匹配是精确匹配。
- 确认标注覆盖度:在 LVS 报告里看具体是哪个器件没识别到,回到版图确认该器件是否有 Label。有时器件被其他图形遮挡,自动标注可能漏标。
- 验证提取结果:在 Virtuoso 里跑完 LVS 后,打开提取出的网表,对比器件列表,看缺失的器件是否确实没有标注。
4.3 进阶需求:如何自动标注器件参数(W/L 值)
Auto Label 默认不标参数值,但可以通过 Skill 脚本扩展。以下是一个简单示例,可以在 CIW(Command Interpreter Window)里直接运行:
; 选中器件后运行此脚本,自动生成带 W/L 值的 Label procedure(createParamLabel(@optional (inst geGetSelectedSet())) let((instName paramText) when(inst instName = inst~>name paramText = sprintf(nil "%s\nW=%.3g L=%.3g" instName inst~>w inst~>l) leCreateLabel(inst~>cellView list(inst~>lpp) paramText inst~>bBox "centerCenter" "R0" 0.1 "stick") ) ) )这个脚本会生成一个包含器件名和 W/L 值的 Label。但要注意,不同器件类型(电阻、电容、BJT)的参数访问方式不同,需要根据实际情况调整。
如果不想写脚本,也可以半自动操作:先用 Auto Label 生成实例名,再用Edit->Label->Copy功能复制文本,然后手动添加参数值。这种方法适合器件数量不多的设计。
5. 与其他标注方法的对比和选用建议
Auto Label 不是唯一的标注方法,根据设计阶段和复杂度,有时其他方法更高效。
5.1 与手动标注的对比
手动标注的优点是精确控制每个 Label 的位置、方向和内容,适合最终交付前的精细调整。缺点是耗时,容易漏标。
我个人的工作流是:布局完成后用 Auto Label 快速生成第一版标注,布线优化过程中随器件移动手动调整位置,最终交付前再用手动方式查漏补缺。
5.2 与 Skill 脚本批量标注的对比
对于大型设计或重复性任务,写 Skill 脚本批量标注更可靠。脚本可以定制标注规则(比如只标特定类型的器件)、处理复杂结构(如阵列)、统一文本样式。
但 Skill 脚本需要编程基础,且调试耗时。建议在项目稳定、标注规则明确的情况下投入时间开发脚本,如果是单次或小型设计,直接用 Auto Label 更划算。
5.3 什么时候不该用自动标注
以下 3 种情况,我不建议使用 Auto Label:
- 版图还处于早期布局阶段:器件位置可能会大幅调整,此时标注浪费时间。
- 设计中有大量对称或匹配结构:自动标注可能破坏对称性,需要手动安排 Label 位置以保持视觉清晰。
- 需要特殊标注格式:比如要标匹配对编号、电流方向、敏感节点等自定义信息,Auto Label 无法满足。
6. 让自动标注更顺手的 4 个实用技巧
最后分享几个实测中总结的小技巧,能提升自动标注的效率和可靠性。
6.1 设置默认文本样式避免重复调整
每次生成 Label 后都要改字体大小很麻烦。可以在第一次生成 Label 后,选中一个理想的文本,在属性框里调整好大小、字体、对齐方式,然后右键点击Save As Default。这样后续生成的 Label 都会沿用这个样式。
不同工艺层可能需要不同的文本大小。比如晶体管层的 Label 可以小一些,顶层金属的 Label 需要大一些。可以保存多个默认样式,需要时快速切换。
6.2 利用选择集(Selection Set)快速重标
如果某部分器件需要重新标注(比如因为原理图改名),不要一个个选。先把这些器件加到一个选择集里:选中器件后,在版图窗口点Create->Selection Set,给选择集命名。下次需要操作这些器件时,直接通过选择集名称快速选中,再跑自动标注。
选择集也适合处理分层设计:为每个子模块创建单独的选择集,标注时按模块处理,避免混乱。
6.3 标注前备份和版本管理
自动标注是批量操作,一旦执行不好撤销。建议在跑全版图标注前,先保存一个版本(File->Save As另存新版本),或者使用 Git 等版本控制工具提交当前状态。
如果标注后发现问题,可以快速回退到上一个版本,而不是手动删除几百个 Label。
6.4 与 LVS 规则协同检查
在标注完成后,不要直接跑完整 LVS。先跑一个快速检查:在 LVS 设置里勾选“Check Labels Only”或类似选项,这个检查只验证 Label 的图层和文本内容,不进行完整电路比对,速度很快。
快速检查通过后,再跑完整 LVS,能节省大量调试时间。
自动标注功能真正落地时,最关键的不是操作步骤本身,而是前置环境确认、标注时机的选择、以及标注后的系统性检查。把这些环节打通后,版图标注能从耗时任务变成几分钟完成的例行操作。