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 连接层在端口处交换数据,最终由统一的仿真控制与波形数据库输出结果。
二、编译与仿真流程
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 会依次完成:
- 编译阶段:xmvlog 解析所有数字源文件,生成中间库;同时 Spectre 侧解析模拟网表,检查器件模型与子电路引用是否完整。
- 精化阶段:xmelab 展开层次、绑定端口、插入连接模块,生成可执行的仿真快照(snapshot)。此时若存在跨域端口未声明方向或阈值,会在此阶段报错。
- 运行阶段: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 工程保持一致,否则会出现模型找不到或参数不匹配的错误。
四、典型目录结构
一个可维护的 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,未调整阈值会导致逻辑误判,表现为波形上出现非预期的中间电平或振荡。