2. 协同仿真平台与工具链搭建

混合信号协同仿真的核心难点,不在于单独跑通一个模拟仿真器或一个数字仿真器,而在于让两个原本独立运行的仿真内核在同一个时间轴上协同推进、交换数据并保持一致。因此,工具链搭建的本质是解决三件事:模拟内核与数字内核如何各自运行、两者通过什么接口交换信号、时间同步由谁主导。本节围绕主流方案 Cadence AMS、Spectre-Verilog 以及 Simulink 与 SPICE 联合仿真,讲清安装配置、接口连接与基本操作。

一、三种主流协同仿真架构的定位

Cadence AMS Designer 是工业界最常用的混合信号平台,它把 Spectre(模拟求解器)与 Incisive/Xcelium(数字求解器)通过 AMS 控制层统一调度,模拟侧用 Verilog-A/Verilog-AMS 建模,数字侧用 Verilog/VHDL,接口通过 connect module 完成电气域与逻辑域的转换。Spectre-Verilog 是更轻量的组合方式,适合模拟为主、数字逻辑较少的场景,通常由 Spectre 通过 Verilog 接口直接调用数字模块。Simulink 与 SPICE 联合则常见于系统级验证,Simulink 负责控制算法与系统模型,SPICE 负责电路级精度,两者通过 S-function 或协同仿真接口交换数据。

选择哪种方案,取决于三个判断条件:数字逻辑规模是否大、是否需要 AMS 语言建模、以及是否需要与系统级工具联动。数字规模大且需要 AMS 建模,选 AMS Designer;模拟为主、数字逻辑简单,选 Spectre-Verilog;需要控制算法与电路联合,选 Simulink+SPICE。

混合信号协同仿真工具链架构对比 Cadence AMS Designer Spectre Xcelium AMS 控制层 / 时间同步 connect module 接口 适用:数字规模大 + AMS 建模 Spectre-Verilog Spectre Verilog 数字 Verilog 接口直连 电气/逻辑信号转换 适用:模拟为主 + 数字逻辑少 Simulink + SPICE Simulink SPICE S-function / 协同接口 数据交换与时间步进 适用:控制算法 + 电路联合 时间同步机制:模拟内核自适应步长 vs 数字内核事件驱动 AMS 控制层在模拟时间点插入数字事件,数字事件触发模拟重算,两者通过同步点对齐 关键参数:maxstep、sync tolerance、interface element 的延迟与驱动强度 工具链搭建关键配置项 1. 环境变量:CDS_INST_DIR、SPECTRE_DEFAULTS、PATH 指向各工具 bin 目录 2. 接口文件:connect rules、interface element、AMS 的 .cdsinit 与 .simrc 配置 3. 编译顺序:先编译数字 RTL,再编译模拟网表,最后链接 AMS 顶层

二、环境安装与基础配置

以 Cadence AMS Designer 为例,安装完成后需要配置环境变量。典型配置如下:

export CDS_INST_DIR=/opt/cadence/IC618
export PATH=$CDS_INST_DIR/tools/bin:$CDS_INST_DIR/tools/dfII/bin:$PATH
export SPECTRE_DEFAULTS=+mt
export AMS_HOME=$CDS_INST_DIR/tools/ams
export PATH=$AMS_HOME/bin:$PATH

配置完成后,用 spectre -W 和 xrun -version 分别验证模拟与数字内核是否可用。若 xrun 报 license 错误,检查 LM_LICENSE_FILE 是否指向正确的 license 服务器。Simulink 与 SPICE 联合时,需要确认 MATLAB 的 mex 编译器已配置,SPICE 侧通常使用 ngspice 或 HSPICE 的协同接口,通过 mex -setup 选择 C 编译器后编译 S-function 包装层。

三、接口连接与基本操作

接口连接是协同仿真最容易出错的部分。以 AMS Designer 为例,模拟侧输出一个 1.2V 的模拟节点,数字侧需要把它识别为逻辑高电平。这需要在 connect module 中定义阈值:

// connect module 示例:模拟到数字的转换
module a2d_connect (inout a, input d);
  parameter real vth = 0.6;
  parameter real vdd = 1.2;
  assign d = (V(a) > vth) ? 1'b1 : 1'b0;
endmodule

数字到模拟的转换则相反,需要定义驱动强度和上升/下降时间。若接口未定义,仿真会报“no connect module found”或信号悬空。基本操作流程是:先建立模拟测试台并单独跑通 Spectre,再建立数字测试台并单独跑通 xrun,最后在 AMS 顶层把两者例化并通过 connect rules 连接。单独跑通这一步不能跳过,否则混合仿真出错时无法定位是模拟侧还是数字侧的问题。

四、一个可复现的配置示例

假设要仿真一个 1.2V 供电的 SAR ADC 前端:模拟侧是采样保持电路,数字侧是逐次逼近逻辑。配置参数如下表所示,这些参数属于教学示例,实际值需根据工艺库调整。

配置项示例值说明
模拟电源1.2 VSpectre 侧 vdd 节点
数字逻辑电平1.2 V / 0 VVerilog 侧 supply1/supply0
接口阈值 vth0.6 V模拟转数字判决门限
maxstep1 ns模拟最大时间步长
sync tolerance10 ps时间同步容差
数字时钟周期100 nsSAR 逻辑时钟

运行后观察三个关键点:模拟节点波形是否在阈值附近正确翻转、数字输出码字是否随输入斜坡单调变化、仿真日志中是否出现时间同步警告。若码字在某个输入点跳变异常,优先检查接口阈值与模拟信号摆幅是否匹配;若仿真速度极慢,检查 maxstep 是否过小或数字事件是否过于频繁。

搭建工具链时,建议先用一个反相器加一个 D 触发器的最小混合电路验证接口通路,确认模拟到数字、数字到模拟两个方向都正常后,再接入完整设计。这样能把接口问题与设计问题分开定位。

五、常见问题与判断依据

协同仿真报错通常集中在三类:license 与路径问题、接口连接问题、时间同步问题。license 问题表现为工具启动即退出,检查环境变量与 license 文件;接口问题表现为信号恒为 0 或恒为 1,检查 connect module 是否被正确例化、阈值是否合理;时间同步问题表现为仿真卡死或结果不收敛,检查 maxstep、sync tolerance 以及是否存在数字侧组合环路。判断依据是:单独跑模拟通过、单独跑数字通过、混合失败,则问题一定在接口或同步配置,而不在电路或 RTL 本身。

掌握这些配置与判断方法后,工具链就从“能启动”进入“能定位问题”的状态,这是后续进行实际混合信号验证的基础。