2. Cadence Virtuoso设计环境搭建
运放设计的第一步不是画电路,而是把“工作台”搭对。Cadence Virtuoso 的环境由四层构成:库(Library)负责组织设计数据,原理图编辑器(Schematic Editor)负责输入电路,ADE 系列(L/XL/Assembler)负责组织仿真,仿真器与 PDK负责提供物理模型和工艺规则。四层缺一不可,且必须通过正确的路径与变量串联起来。本节按“先建库、再画图、后配仿真、最后接工艺”的顺序,给出可直接照做的配置过程。
一、库管理:cds.lib 与 Library Manager
Virtuoso 用 cds.lib 文件把“逻辑库名”映射到磁盘路径。启动前,工作目录下必须存在 cds.lib,否则 Library Manager 里看不到任何库。一个典型工程目录结构如下:
~/opamp_proj/
├── cds.lib
├── lib/
│ ├── myOpamp/ # 自建设计库
│ └── analogLib/ # 系统库(符号、理想源)
└── sim/ # 仿真结果目录
cds.lib 内容示例(DEFINE 定义库名与路径,INCLUDE 引入 PDK 自带的库定义文件):
DEFINE myOpamp ./lib/myOpamp
DEFINE analogLib $CDSHOME/tools/dfII/samples/artist/analogLib
INCLUDE /PDK_PATH/tsmc65/cds.lib
其中 $CDSHOME 由 Cadence 安装脚本设置,PDK 的 cds.lib 通常定义了 tsmc65、tsmc65_dev 等库。建库时在 Library Manager 中执行 File → New → Library,选择“Attach to an existing techfile”,并指定 PDK 提供的 techfile.tf,这样新库才具备正确的层定义和器件规则。若选错 techfile,后续版图会出现层缺失或 DRC 无法识别的问题。
二、原理图编辑器:从器件放置到检查
新建 cellview 时选择 Composer-Schematic,进入 Schematic Editor。核心操作是 i(Instance)放置器件、w(Wire)连线、p(Pin)加端口、l(Label)加节点名。运放输入级常用 nmos4/pmos4(四端器件,含体端),电流镜用 nmos4 或 PDK 的 nch/pch。放置后按 q 打开属性,设置 W、L、nf(指叉数)、m(并联数)。
画完后必须执行 Check and Save(快捷键 Shift+X 或菜单 Check → Save)。若出现“unconnected pin”或“shorted net”警告,需回到图中修正。一个常见错误是把体端悬空——在 nmos4 中体端必须接到 VSS 或 VDD,否则仿真会报错或结果异常。建议在画图阶段就为电源和地加全局端口 VDD、VSS,并用 analogLib 中的 vdc、idc 作为激励源。
三、ADE L / XL / Assembler 的分工
三个工具面向不同复杂度:
- ADE L:单测试台仿真,手动设置变量、分析类型和输出。适合运放的 DC、AC、瞬态单点验证。
- ADE XL:在 L 基础上增加参数扫描、蒙特卡洛、Corners 和优化。适合扫描
Ibias、W/L、温度、工艺角。 - ADE Assembler:多测试台并行管理,一个 session 内可同时跑 AC、TRAN、NOISE、DC 等多个 test,并统一管理 corners。适合运放完整验证。
启动方式:在原理图窗口菜单 Launch → ADE L / ADE XL / ADE Assembler。ADE 会自动读取当前 cellview 的网表。首次打开需在 Setup → Simulator/Directory/Host 中指定仿真器(通常 spectre)和结果目录(如 ~/opamp_proj/sim)。
四、仿真器配置与工艺设计套件导入
仿真器配置的关键是 .cdsinit 和 .cdsenv 两个文件。前者在启动时执行 SKILL 命令,后者保存工具环境变量。一个最小可用的 .cdsinit 示例:
; 设置仿真器为 spectre
envSetVal("spectre.envOpts" "simulator" 'string "spectre")
; 设置默认结果目录
envSetVal("asimenv.startup" "projectDir" 'string "~/opamp_proj/sim")
; 加载 PDK 初始化脚本
load("/PDK_PATH/tsmc65/init.il")
PDK 导入的本质是把工艺库、模型文件、techfile 和 SKILL 初始化脚本接入 Virtuoso。典型 PDK 目录包含 models/(.scs 模型)、techfile.tf、cds.lib、init.il。导入步骤:
- 在
cds.lib中用INCLUDE引入 PDK 的库定义。 - 在
.cdsinit中loadPDK 的init.il,注册器件和回调。 - 在 ADE 的 Setup → Model Libraries 中添加模型文件,并设置 section(如
tt、ff、ss)。 - 在 Setup → Simulation Files 中确认
spectre的 include 路径正确。
模型库设置示例:
; Model Libraries 中填写
/PDK_PATH/tsmc65/models/spectre/models.scs section=tt
/PDK_PATH/tsmc65/models/spectre/models.scs section=ff
/PDK_PATH/tsmc65/models/spectre/models.scs section=ss
配置完成后,在 ADE L 中设置 VDD=1.2V、Ibias=20uA,选择 dc 分析扫描 VIN 从 0 到 1.2V,运行仿真。若 spectre 正常输出 dcOp 和 dc 结果,说明环境已通。若报“model file not found”,检查 Model Libraries 路径;若报“undefined device”,检查 PDK 的 init.il 是否加载。
五、验证与常见问题
环境是否搭好,用一个最小测试台即可判断:在 myOpamp 库中新建 cellview,放一个 nmos4,栅接 VIN,源接地,漏接 VDD 经 vdc,体端接地。ADE L 中设 VDD=1.2V,DC 扫描 VIN 从 0 到 1.2V,观察 Id 曲线。若曲线在 VIN≈0.4V 附近开始上升,说明器件模型和仿真器均正常。
cds.lib、.cdsinit、.cdsenv 三个文件放在工程根目录,并在启动 Virtuoso 前 cd 到该目录。这样每个新终端都能复现同一套环境,避免“换台机器就跑不起来”的问题。
init.il 必须在 .cdsinit 中加载,且加载顺序应在设置仿真器之后。若先加载 PDK 再设仿真器,部分 PDK 的默认仿真器设置会被覆盖,导致 ADE 中看不到正确的模型 section。