2. Xcelium AMS工具链与工程环境

Xcelium AMS 并不是一个单一可执行程序,而是由数字仿真内核、模拟求解器接口、跨域连接层和编译/精化工具共同组成的协同环境。理解这套工具链的组件分工与数据流向,是搭建可复现 AMS 工程的第一步。本节围绕四个问题展开:工具链由哪些组件构成、编译与仿真如何分阶段推进、Xcelium 如何与 Virtuoso 和 Spectre 集成、以及一个典型 AMS 工程目录应当如何组织。

一、工具链的主要组件

从职责上划分,Xcelium AMS 环境包含以下核心组件:

  • xrun / xmvlog / xmelab / xmsim:数字侧编译、精化与仿真入口。xrun 是统一封装命令,内部按顺序调用 xmvlog(编译 Verilog/SystemVerilog)、xmelab(精化生成仿真快照)、xmsim(运行仿真)。
  • AMS 连接层(connect module / interface element):负责数字逻辑值与模拟电压/电流之间的转换,包括逻辑阈值判断、驱动强度映射、以及可选的插入式连接模块。
  • 模拟求解器:通常由 Spectre(或 Spectre APS/X)承担,通过 AMS 接口与数字内核同步,按时间步进交换端口值。
  • irun/xrun 的 AMS 选项与配置文件:如 -ams、-spectre、amsControlFile、connectRules 等,用于声明跨域规则与求解器参数。
  • Virtuoso 侧集成组件:ADE Assembler / ADE XL 中的 AMS 仿真模式,以及用于生成网表、配置视图绑定的 OCEAN/SKILL 脚本。

这些组件的关系可以用下面的结构图表示:数字测试平台与数字设计进入 xrun 流程,模拟部分由 Spectre 求解,两者通过 AMS 连接层在端口处交换数据,最终由统一的仿真控制与波形数据库输出结果。

Xcelium AMS 工具链组件与数据流 数字侧(Xcelium) xmvlog 编译 SV/Verilog xmelab 精化生成快照 xmsim 数字内核仿真 模拟侧(Spectre) Spectre 网表解析 DC/TRAN/AC 求解 时间步进与收敛控制 AMS 连接层 逻辑↔电压/电流转换 connectRules / IE 卡 端口值 节点电压 仿真控制与配置 xrun -ams / amsControlFile 波形与日志输出 SHM / FSDB / spectre.out Virtuoso / ADE 网表生成与视图绑定 Spectre 引擎 由 AMS 接口调用

二、编译与仿真流程

AMS 仿真的执行过程可以概括为“三段式”:编译、精化、运行。以 xrun 为例,一条典型的命令如下:

xrun -ams \
     -spectre_args "+mt=8 +aps" \
     -ams_control_file amsControl.scs \
     -connect_rules connectRules.scs \
     -top tb_top \
     -access +rwc \
     -input sv \
     -timescale 1ns/1ps \
     -snapshot ams_snap

其中 -ams 打开混合信号模式,-ams_control_file 指定 AMS 控制文件(声明模拟求解器、精度、同步方式),-connect_rules 指定连接规则文件(定义逻辑阈值、驱动强度、上拉/下拉等)。执行后 xrun 会依次完成:

  1. 编译阶段:xmvlog 解析所有数字源文件,生成中间库;同时 Spectre 侧解析模拟网表,检查器件模型与子电路引用是否完整。
  2. 精化阶段:xmelab 展开层次、绑定端口、插入连接模块,生成可执行的仿真快照(snapshot)。此时若存在跨域端口未声明方向或阈值,会在此阶段报错。
  3. 运行阶段:xmsim 启动数字内核,按 AMS 控制文件中的同步策略(如固定时间步或事件驱动)与 Spectre 交换数据,最终输出 SHM/FSDB 波形与日志。

实际工程中,编译与精化往往合并为一次 xrun 调用,但理解这两个阶段的分离有助于定位问题:编译错误通常来自语法或模块缺失,精化错误则多与端口绑定、连接规则或层次路径有关。

三、与 Virtuoso 和 Spectre 的集成方式

Xcelium AMS 与 Cadence 生态的集成主要体现在两个层面。第一层是网表与视图绑定:在 Virtuoso 中完成原理图设计后,通过 ADE Assembler 或 ADE XL 选择 AMS 仿真模式,工具会自动调用 spectre 生成模拟网表,并调用 xrun 生成数字侧快照。设计中的模拟单元以 schematic 视图存在,数字单元以 verilog 或 vhdl 视图存在,AMS 配置通过 amsControl 与 connectRules 文件统一管理。

第二层是求解器调用:Xcelium 并不直接求解模拟方程,而是通过 AMS 接口以子进程方式启动 Spectre。Spectre 读取由 Virtuoso 导出的网表(通常为 input.scs),按 AMS 控制文件指定的分析类型(TRAN、DC、AC)运行,并将节点电压/电流回传给连接层。因此,Spectre 的版本、模型库路径和 .scs 文件中的 include 语句必须与 Virtuoso 工程保持一致,否则会出现模型找不到或参数不匹配的错误。

在 ADE 中启动 AMS 仿真时,建议先单独运行一次纯 Spectre 仿真确认模拟网表可收敛,再切换到 AMS 模式。这样可以快速区分“模拟侧问题”与“跨域连接问题”。

四、典型目录结构

一个可维护的 AMS 工程通常按“设计源、仿真环境、脚本、结果”四类内容组织。下面给出一个参考结构:

ams_project/
├── design/
│   ├── digital/          # SystemVerilog/Verilog 源文件
│   │   ├── rtl/
│   │   └── tb/
│   └── analog/           # Virtuoso 导出的网表与模型
│       ├── netlist/
│       └── models/
├── sim/
│   ├── amsControl.scs    # AMS 控制文件
│   ├── connectRules.scs  # 连接规则
│   └── spectre_args.scs  # Spectre 参数
├── scripts/
│   ├── run_ams.sh        # 编译+仿真入口
│   └── gen_netlist.ocn   # OCEAN 网表生成脚本
├── results/
│   ├── waves/            # SHM/FSDB 波形
│   └── logs/             # xrun.log、spectre.out
└── Makefile              # 统一构建入口

这种结构的核心原则是:设计源与仿真配置分离、脚本与结果分离。数字 RTL 和模拟网表各自独立存放,避免仿真过程中误改设计;AMS 控制文件与连接规则集中放在 sim/ 下,便于版本管理和复用;所有输出统一写入 results/,方便清理和归档。实际项目中,design/analog/netlist 通常由 Virtuoso 导出并纳入版本控制,而 results/ 则通过 .gitignore 排除。

连接规则文件中的阈值(如 vih、vil、voh、vol)必须与模拟侧实际电源电压匹配。若数字侧使用 1.8V 逻辑而模拟侧供电为 3.3V,未调整阈值会导致逻辑误判,表现为波形上出现非预期的中间电平或振荡。