1. 先搞清楚 annotation 在 schematic 里到底扮演什么角色
很多刚接触 Cadence Virtuoso IC61 这套环境的朋友,画完原理图之后发现器件旁边那一堆小字——比如 W/L 尺寸、器件类型、参数值——要么显示得乱七八糟,要么干脆不显示,要么显示了一堆自己不想看的东西。这个"小字"就是 annotation,中文一般叫"标注"或"注释"。它跟 symbol 本身是两回事:symbol 是你在 schematic 里看到的那个图形符号,而 annotation 是叠加在 symbol 旁边、由工具根据器件属性动态生成的一层文本信息。
理解这一点非常关键。因为很多人第一反应是去改 symbol,结果改了半天发现 schematic 里根本没变化,或者一更新 symbol 就把自己的改动冲掉了。原因就在于 annotation 的显示逻辑是由schematic 编辑器层面的配置控制的,不是 symbol 图形本身的一部分。Symbol 只负责"长什么样",annotation 负责"显示什么信息、怎么显示"。
在 IC61 里,annotation 的显示受几个层面的控制:全局的 display 选项、cellview 级别的属性、器件实例的 instance 属性,以及 ADE 仿真环境里的一些显示设置。这几个层面的优先级和覆盖关系,是后面所有操作的基础。我见过太多人在这上面绕弯路,所以先把这层逻辑理清楚,后面操作起来才不会晕。
提示:annotation 的修改不会影响网表,也不会影响仿真结果,它纯粹是"显示层"的东西。所以你改坏了也不用慌,不会把电路改废。
2. 修改 annotation 的几条路径与各自的适用场景
2.1 通过 Display Options 做全局控制
最直接的一层是全局显示选项。在 schematic 窗口里,菜单栏找到Options或者在某些版本里是Window下面的显示设置,进入后能看到一堆跟 annotation 相关的开关。这里控制的是"默认情况下显示哪些属性"。
具体来说,你会看到类似Display选项卡,里面有Pin Names、Pin Numbers、Instance Names、Instance Parameters这些勾选项。如果你发现所有器件的参数都不显示,先来这里看看Instance Parameters是不是被关掉了。这个设置是全局的,改了之后所有 schematic 都受影响,所以适合做"统一风格"的调整。
但全局设置有个问题:它太粗了。你没法针对某一个器件单独设置。比如你想让所有 MOS 管显示 W/L,但让电阻只显示阻值不显示其他参数,全局设置就做不到这么细。这时候就需要往下走一层。
2.2 通过 Edit Object Properties 改单个器件的 annotation
选中某个器件实例,右键或者用快捷键打开Edit Object Properties(有些版本叫Properties),在弹出的属性编辑器里,你能看到这个器件所有的属性字段。这里有一个关键操作:每个属性字段前面通常有一个小方框或者一个显示控制列,勾上就表示"这个属性要显示在 schematic 上",取消就不显示。
这个方法的优点是精确到单个器件,你想让哪个器件显示什么就显示什么。缺点是如果你有几百个器件要统一改,一个个点会点到手抽筋。所以它适合"个别器件特殊处理"的场景。
我个人的习惯是:先用全局设置定一个大方向,然后对少数需要特殊显示的器件用这个方法微调。这样效率最高。
2.3 通过 Cellview 属性做中间层控制
在全局和单个器件之间,还有一个中间层:cellview 级别的属性。这个在Edit菜单下的Cellview或者Properties里能找到。它控制的是"当前这个 schematic 文件里,默认显示哪些属性"。
这一层的好处是:它比全局设置更聚焦(只影响当前文件),又比单个器件设置更省事(一次设置影响文件内所有同类器件)。如果你在做一个项目,希望这个项目里的所有 schematic 都按某种风格显示 annotation,但又不想动全局设置影响其他项目,这一层就是最佳选择。
2.4 通过 ADE 环境控制仿真相关的 annotation
有时候你会发现,schematic 里显示正常,但一进 ADE 做仿真,某些器件的参数显示就变了。这是因为 ADE 有自己的一套显示逻辑,尤其是跟仿真变量、参数扫描相关的 annotation。在 ADE 的Outputs或者Setup里,有专门的显示设置控制这些。
这一层相对独立,一般做仿真的时候才会碰到。如果你只是画原理图,可以先不管它。
3. 实操:一步步把 MOS 管的 W/L 显示调成你想要的样子
光说理论没意思,直接上一个最常见的场景:你画了一个 MOS 管,想让它旁边显示W=1u L=0.18u这样的信息,但默认显示的是别的东西,或者根本不显示。下面是我实际操作的完整流程。
3.1 确认当前显示状态和属性字段名
第一步,选中那个 MOS 管,打开Edit Object Properties。在属性列表里找到跟尺寸相关的字段。不同工艺库的字段名可能不一样,常见的有w、l、wf、wfingers等。你要先确认你的工艺库里 W 和 L 对应的字段名到底是什么。
这一步很多人跳过,结果后面设置的时候填错了字段名,怎么都不显示。我的建议是:拿一个已知尺寸的器件,在属性编辑器里看它的实际字段名,别凭记忆猜。
3.2 在属性编辑器里勾选显示控制
找到w和l这两个字段后,注意看每个字段左边或右边有没有一个显示控制的小图标/复选框。在 IC61 里,通常是一个小方框,勾上表示"在 schematic 上显示这个属性"。把w和l都勾上。
这时候你可能会发现,schematic 上确实显示了,但显示的是w=1u和l=0.18u分成两行,或者显示了一堆你不想看的其他属性。别急,下一步就是控制"显示什么格式"。
3.3 用 Label 和 Display 格式控制显示内容
在属性编辑器里,除了勾选显示,通常还能设置显示的格式。有些版本里有一个Label字段,你可以在这里用表达式控制显示内容。比如你想显示成W/L=1u/0.18u这种格式,就可以在 label 里写类似"W/L=" w "/" l的表达式(具体语法看版本,IC61 里一般支持这种字符串拼接)。
如果找不到 label 设置,另一个办法是通过Display Options里的Instance Parameters格式设置。这里可以控制参数显示的前缀、分隔符、单位等。比如你可以设置成"只显示值不显示字段名",或者"字段名和值用等号连接"。
3.4 验证和批量应用
设置好一个器件后,先看看效果。如果满意,接下来就是批量应用。批量应用有两个思路:
- 如果同类器件都要这样显示,回到 cellview 属性层面,把默认显示设置改成一样的。这样新放置的同类器件会自动继承。
- 如果已经放置了很多器件,可以用
Edit菜单下的Search或Select功能批量选中同类器件,然后统一改属性。
我实测下来,最稳的做法是:先改 cellview 默认设置,然后对已经放置的器件用批量选择统一刷新一次。这样新旧器件风格一致,不会出现有的显示有的不显示的情况。
4. 那些年我踩过的 annotation 显示坑
4.1 改了 symbol 但 schematic 不更新
这是最经典的坑。你打开 symbol 编辑器,把里面的 annotation 文本改了,保存,回到 schematic,发现啥都没变。原因很简单:schematic 里的 annotation 不是从 symbol 图形里读的,是从器件实例的属性里动态生成的。你改 symbol 图形里的文本,只影响 symbol 本身的显示,不影响实例的 annotation。
正确的做法是改实例属性或者 cellview 的显示设置,而不是去动 symbol。如果你确实想让 symbol 图形本身带一些固定文本,那要在 symbol 编辑器里用Label工具添加,但那是另一回事了。
4.2 更新 symbol 后 annotation 被重置
有时候你因为其他原因更新了 symbol(比如改了引脚位置),更新完之后发现之前调好的 annotation 显示全乱了。这是因为 symbol 更新可能会触发实例属性的重新同步,某些显示设置被覆盖了。
避免这个坑的办法是:在更新 symbol 之前,先确认你的 annotation 设置是保存在 cellview 属性或实例属性里的,而不是依赖 symbol 的默认值。这样即使 symbol 更新,你的设置也不会丢。
4.3 不同工艺库字段名不一致导致显示失败
前面提过,不同工艺库的 W/L 字段名可能不同。有的用w/l,有的用wf/lf,有的用width/length。如果你在一个工艺库上设置好了,换到另一个工艺库的项目,同样的设置可能就不生效了。
解决办法是:在每个新项目开始时,先花两分钟确认一下当前工艺库的字段命名规则。可以打开一个器件的属性编辑器看一眼,或者查工艺库的文档。这两分钟能省掉后面半小时的排查时间。
4.4 annotation 显示太多导致 schematic 看不清
新手容易犯的另一个错误是:把所有能显示的属性都勾上,结果 schematic 上密密麻麻全是字,电路结构反而看不清了。annotation 的目的是辅助理解,不是把所有信息都堆上去。
我的建议是:只显示对当前设计最关键的两三个参数。比如做模拟电路时,MOS 管显示 W/L 就够了,其他参数需要的时候再查属性编辑器。做数字电路时,可能只需要显示器件类型和实例名。保持 schematic 清爽,比显示一堆用不上的信息重要得多。
5. 进阶:用 SKILL 脚本批量管理 annotation
如果你经常需要在大项目里统一 annotation 风格,手动一个个改效率太低。这时候可以用 SKILL 脚本批量处理。IC61 支持 SKILL 语言,你可以写一段脚本遍历当前 schematic 里的所有器件,根据器件类型设置不同的显示属性。
比如下面这段伪代码思路(具体语法需要根据你的版本调整):
; 遍历当前 cellview 的所有实例 foreach(inst cv~>instances ; 判断器件类型 if(inst~>cellName == "nmos" || inst~>cellName == "pmos" then ; 设置显示 w 和 l inst~>w~>display = t inst~>l~>display = t ) if(inst~>cellName == "res" then ; 电阻只显示阻值 inst~>r~>display = t ) )这段脚本的核心逻辑是:拿到当前 cellview 的所有实例,根据 cellName 判断器件类型,然后设置对应属性的 display 标志。实际使用时,字段名和 API 可能需要调整,但思路是通用的。
用脚本的好处是一次性处理几百个器件,几秒钟搞定。坏处是需要一点 SKILL 基础。如果你不熟悉 SKILL,可以先从简单的开始,比如只写一个"把所有 MOS 管的 w 和 l 显示打开"的脚本,跑通了再逐步扩展。
注意:跑脚本之前先保存好当前文件,或者在一个副本上测试。脚本写错了可能会把属性改乱,虽然不会影响网表,但重新调显示也挺烦的。
6. 关于 annotation 显示的一些个人体会
做了这么多年电路设计,我对 annotation 的态度是:它是给"未来的自己"和"协作的同事"看的。你今天画完的图,三个月后回来看,如果 annotation 清晰明了,能省掉大量回忆时间。如果 annotation 乱七八糟或者干脆没有,那就得一个个点开属性去看,效率极低。
所以我的习惯是:在项目开始时就定好 annotation 规范,比如 MOS 管必须显示 W/L,电阻必须显示阻值,电容必须显示容值。然后用 cellview 属性或者脚本统一设置,确保整个项目风格一致。这个前期投入可能就十几分钟,但后面节省的时间是几十倍。
另外,annotation 的显示还跟 schematic 的缩放级别有关。有些设置下,放大才显示详细参数,缩小就只显示实例名。这个在Display Options里可以控制,根据你的习惯调整就好。我个人喜欢设置成"任何缩放级别都显示关键参数",这样截图或者给别人看的时候不会漏信息。
最后说一个容易被忽略的点:annotation 的颜色和字体大小也是可以调的。在Display Options的Color和Font设置里,你可以把 annotation 调成跟 symbol 不同的颜色,这样视觉上更容易区分。字体大小也要适中,太小看不清,太大占地方。这些细节调好了,整个 schematic 的专业感会提升一个档次。