2. 版图设计基础与工艺文件
版图(Layout)不是“画一堆彩色方块”,而是把电路网表映射为可制造的几何图形集合。要能在 Virtuoso Layout Editor 中正确、高效地完成这一步,必须先建立三个基础认知:版图层次决定组织方式,图层决定几何图形的工艺含义,设计规则决定图形能否被制造。三者之上,再由 PDK 与 techfile 把它们绑定到具体工艺,最终通过版图编辑器落地为可编辑、可验证的版图数据。
一、版图层次:从单元到系统
版图采用层次化(hierarchical)结构,与电路原理图的层次一一对应。最底层是基本单元,例如一个 NMOS 管、一个接触孔阵列、一个反相器;中间层是功能单元,例如 NAND 门、触发器、电流镜;顶层是模块或芯片,把各功能单元按网表连接并完成电源、地、I/O 布线。
层次化的价值在于复用与一致性:一个反相器单元只画一次,被调用上千次,修改一次即全局生效。在 Virtuoso 中,每个单元对应一个 cell,同一单元的不同版本对应 view,版图视图通常命名为 layout,原理图视图为 schematic,符号视图为 symbol。调用关系由 instance 建立,实例可以带参数(如晶体管宽度 W、长度 L、指数 m),从而在不复制几何的前提下生成不同尺寸的器件。
层次化也带来一个常见问题:跨层次连接。当子单元内部使用金属 1,父单元使用金属 2 时,需要通过 pin 或 label 在子单元边界暴露端口,父单元才能正确连接。若端口未定义或命名不一致,LVS 会报“开路”或“器件不匹配”。因此,画版图前应先确认单元的端口定义与原理图一致。
二、图层:几何图形的工艺语义
版图中的每一个矩形、多边形都归属于某个图层(layer),图层再细分为目的(purpose),例如 drawing、pin、label、boundary。工艺厂在 techfile 中定义图层编号、名称、颜色、线型与填充方式。常见图层包括:
- 有源区(active/diffusion):定义晶体管源漏与沟道区域;
- 多晶硅(poly):形成栅极与局部互连;
- N 阱 / P 阱(nwell/pwell):定义衬底类型与隔离;
- 注入层(nplus/pplus):定义源漏掺杂类型;
- 接触孔(contact/via):连接不同导电层;
- 金属层(metal1、metal2…):布线;
- 钝化/焊盘(passivation/pad):芯片对外接口。
图层不是“颜色”,而是工艺步骤的抽象。同一个几何形状放在不同图层,制造结果完全不同。例如,一个矩形放在 poly 上是栅极,放在 metal1 上是导线。因此,切换图层时必须确认当前图层与目的,避免“画对了形状、放错了层”。
三、设计规则:可制造性的边界
设计规则(Design Rules)是工艺厂给出的几何约束集合,通常以规则文件(如 .tf 或 techfile)形式提供。常见规则类型包括:
- 最小宽度(minWidth):单层图形的最小尺寸;
- 最小间距(minSpacing):同层或异层图形之间的最小距离;
- 最小包围(enclosure):如 contact 被 metal 包围的最小量;
- 最小延伸(extension):如 poly 超出 active 的最小量;
- 密度规则(density):某层在给定窗口内的面积占比上下限;
- 天线规则(antenna):金属与栅极面积比限制。
这些规则不是“建议”,而是硬性约束。违反规则的版图在 DRC 中会报错,即使功能正确也无法流片。实际画图时,应养成“边画边查”的习惯:先满足最小宽度与间距,再处理包围与延伸,最后检查密度与天线。
四、加载 PDK 与 techfile
PDK(Process Design Kit)是工艺厂提供的设计套件,包含 techfile、器件模型、符号库、版图单元、DRC/LVS 规则文件等。在 Virtuoso 中加载 PDK 的典型流程如下:
# 1. 确认 PDK 路径与版本
echo $PDK_PATH
# 2. 在 CIW 中加载 techfile
techLoad("$PDK_PATH/techfile.tf")
# 3. 绑定工艺库
techBindTechFile("myLib" "$PDK_PATH/techfile.tf")
# 4. 打开版图编辑器,确认图层与规则已生效
layoutEditor = hiGetCurrentWindow()
加载完成后,应在 Layout Editor 中检查:图层列表是否完整、颜色是否可区分、DRC 规则是否可调用。若图层缺失或颜色异常,通常是 techfile 路径错误或版本不匹配。此时不要强行画图,应先解决环境问题。
五、版图编辑器基本操作与快捷键
Virtuoso Layout Editor 的操作围绕“视图控制、对象创建、对象编辑、层次操作”四类展开。以下为常用快捷键与操作:
| 操作 | 快捷键/命令 | 说明 |
|---|---|---|
| 缩放 | Z / Shift+Z | 放大/缩小 |
| 平移 | 中键拖动 | 移动视图 |
| 创建矩形 | R | 选择图层后绘制 |
| 创建多边形 | P | 绘制任意形状 |
| 创建路径 | W | 绘制导线 |
| 移动 | M | 移动选中对象 |
| 复制 | C | 复制选中对象 |
| 删除 | Delete | 删除选中对象 |
| 拉伸 | S | 调整图形尺寸 |
| 层次进入 | E | 进入子单元编辑 |
| 层次返回 | Ctrl+E | 返回父单元 |
| 保存 | Ctrl+S | 保存当前单元 |
实际画图时,建议先设置好栅格(grid)与捕捉(snap),再开始绘制。栅格间距通常设为最小设计规则的一半或整数倍,例如最小宽度 0.1 μm 时,栅格可设为 0.05 μm。捕捉开启后,图形边缘会自动对齐栅格,减少 DRC 错误。
六、从规则到版图:一个反相器示例
以 0.18 μm 工艺为例,假设最小宽度 0.18 μm、最小间距 0.18 μm、contact 包围 0.06 μm。画一个反相器时,先放置 PMOS 与 NMOS 的有源区,再画多晶硅栅,接着画 N 阱与注入层,最后打 contact 并连金属 1。每一步都应检查:有源区是否满足最小宽度?多晶硅与有源区是否满足延伸?contact 是否被金属完全包围?
若 DRC 报出“poly 与 active 间距不足”,应优先调整多晶硅位置,而不是缩小有源区。因为缩小有源区可能引入新的宽度违规。修改后重新运行 DRC,直到无错误。此时版图才具备进入 LVS 与寄生提取的基本条件。
总结来看,版图设计基础可以归纳为一条主线:层次决定“怎么组织”,图层决定“画什么”,设计规则决定“能不能画”,PDK 与 techfile决定“按哪个工艺画”,编辑器操作决定“怎么画得快且对”。掌握这条主线后,后续的 DRC、LVS 与寄生提取才有稳定的起点。