2. Virtuoso设计环境与模拟前端工程管理

模拟前端电路从原理图到版图、从单点仿真到多工艺角验证,会产生大量互相引用的文件。如果一开始不把目录结构、命名规则和版本管理约定好,项目很快会陷入“找不到最新版原理图”“不知道哪个测试平台对应哪版网表”的混乱。本节围绕 Virtuoso 的核心工具链,说明如何用 Library Manager、Cellview、CIW、ADE Explorer/Assembler 建立一套可复用、可追溯的模拟前端工程管理方法。

一、四个核心工具的分工

Virtuoso 的设计数据以“库—单元—视图”三级结构组织。Library Manager 是这套结构的入口,负责创建库、挂接工艺库、浏览和复制单元;Cellview 是库中某个单元的具体视图,例如 schematic、symbol、layout、extracted、adexl 等,同一单元的不同视图通过“视图类型”区分;CIW(Command Interpreter Window)是 Virtuoso 的主控制台,所有菜单操作最终都会转成 SKILL 命令,它也是查看报错、执行脚本、批量修改的窗口;ADE Explorer 面向单个测试平台的仿真设置与结果查看,ADE Assembler 则面向多测试平台、多工艺角、多参数的批量组合仿真。四者关系可以概括为:Library Manager 管“文件在哪”,Cellview 管“文件是什么”,CIW 管“命令怎么执行”,ADE 管“仿真怎么跑、结果怎么看”。

Virtuoso 模拟前端工程管理工具链 Library Manager 库 / 单元 / 视图 三级浏览 挂接工艺库、复制、重命名 决定“文件在哪” analog_frontend / AFE_TOP Cellview schematic / symbol / layout extracted / adexl / config 决定“文件是什么” AFE_TOP:schematic CIW SKILL 命令解释器 报错查看、脚本批处理 决定“命令怎么执行” hiLoad / dbOpenCellView ADE Explorer / ADE Assembler Explorer:单测试平台仿真设置与波形查看 Assembler:多测试平台 × 多工艺角 × 多参数 组合仿真与结果对比 数据复用与版本追溯 schematic → config → netlist → adexl → 结果目录 每个环节保留版本号与变更记录,支持回退与复用

二、建立模拟前端项目目录结构

推荐在 Library Manager 中为每个项目建立独立库,库名与项目代号一致,例如 AFE_2024。库内单元按功能分层,而不是把所有电路堆在同一层。一个可参考的目录结构如下:

AFE_2024/                     # 项目库
├── AFE_TOP/                  # 顶层
│   ├── schematic             # 顶层原理图
│   ├── symbol                # 顶层符号
│   ├── config                # 层次配置视图
│   └── adexl                 # ADE Assembler 状态
├── AFE_LNA/                  # 低噪声放大器
│   ├── schematic
│   ├── symbol
│   └── layout
├── AFE_MIXER/                # 混频器
│   ├── schematic
│   ├── symbol
│   └── layout
├── AFE_BIAS/                 # 偏置电路
│   ├── schematic
│   └── symbol
└── AFE_TESTBENCH/            # 测试平台
    ├── TB_LNA_AC/            # AC 测试
    ├── TB_MIXER_NF/          # 噪声系数测试
    └── TB_TOP_TRAN/          # 顶层瞬态测试

关键原则是:测试平台与待测电路分离。待测电路单元只包含 schematic、symbol、layout 等设计视图;测试平台单独放在 TESTBENCH 下,通过 config 视图引用待测单元。这样修改测试条件不会污染设计数据,同一份设计也能被多个测试平台复用。

三、版本管理与数据复用

Virtuoso 本身不提供 Git 式的分支管理,工程上通常采用“库快照 + 单元版本”的方式。具体做法是:在关键节点(如原理图冻结、版图完成、流片前)用 Library Manager 的 Copy 功能把整个库复制为带日期后缀的备份库,例如 AFE_2024_20240615;日常迭代则在原库中进行,通过 Cellview 的版本号(如 schematic:1、schematic:2)追溯修改历史。CIW 中可以用 SKILL 脚本批量导出单元清单,便于比对两个快照之间的差异:

; 列出库中所有单元及其视图
foreach(cell ddGetObj("AFE_2024")~>cells
  printf("Cell: %s\n" cell~>name)
  foreach(view cell~>views
    printf("  View: %s (version %d)\n" view~>name view~>version)
  )
)

数据复用的核心是“符号—原理图—配置”三者一致。当 AFE_LNA 的 schematic 修改后,其 symbol 的端口必须同步更新,否则顶层 AFE_TOP 的 config 视图会报端口不匹配。建议每次修改 schematic 后,用 CIW 执行 schCheck 检查连接性,再更新 symbol,最后在 config 视图中刷新层次。ADE Assembler 的 adexl 状态文件应随库一起备份,因为它记录了测试平台、工艺角、参数扫描和输出表达式的完整配置,是复现仿真结果的关键。

建议在库根目录放置一个 README.txt,记录库的用途、工艺库版本、关键单元说明和最近一次快照日期。这个习惯在多人协作或项目交接时能节省大量沟通成本。

四、ADE Explorer 与 Assembler 的工程化使用

ADE Explorer 适合单点调试:打开一个测试平台,设置激励、工艺角、仿真选项,运行后直接看波形。它的状态可以保存为 adexl 视图,下次打开时自动恢复。ADE Assembler 则把多个 Explorer 状态组织成一张“仿真矩阵”:行是测试平台,列是工艺角或参数组合,每个交叉点是一次仿真。例如 AFE_TOP 需要验证 TT/SS/FF 三个工艺角、-40/27/85℃ 三个温度、电源电压 ±10% 三个条件,Assembler 会自动生成 3×3×3=27 组仿真,并在结果表中用颜色标记通过/失败。

使用 Assembler 时,输出表达式(Outputs)应统一命名并分类,例如 gain_dc、nf_min、iip3、power_total,这样在结果对比时可以直接按名称筛选。每个表达式要明确其测量函数和单位,避免不同测试平台下同名表达式含义不一致。仿真结果默认保存在 simulation/AFE_TOP/adexl/results 目录下,建议在项目根目录建立 results 软链接或统一归档路径,便于后续用脚本批量提取数据。

五、一个可执行的项目初始化流程

  1. 启动 Virtuoso,在 CIW 中确认工艺库已挂接(cdsLibMgr 可打开 Library Manager)。
  2. 在 Library Manager 中新建库 AFE_2024,选择“Attach to existing tech library”,挂接所用工艺库。
  3. 按第二节的目录结构创建各单元,先建 symbol 和 schematic 骨架,再填充电路。
  4. 为每个测试平台建立独立单元,在 ADE Explorer 中完成单点仿真并保存 adexl 视图。
  5. 在 ADE Assembler 中新建 adexl,导入各测试平台的 Explorer 状态,配置工艺角与参数扫描。
  6. 运行 Assembler,检查结果表;对失败项回到 Explorer 单点调试,修正后重新运行。
  7. 在关键节点用 Library Manager 复制库快照,并在 README 中记录快照日期与变更摘要。

这套流程的价值在于:任何一次仿真结果都能追溯到具体的 schematic 版本、config 配置和 adexl 状态;任何一次设计修改都能通过快照回退;任何新加入的测试平台都能复用已有的设计单元和仿真配置。工程管理的目标不是增加流程负担,而是让“改了什么、为什么改、结果如何”这三个问题始终有据可查。