1. AMS混合信号协同验证概述
模拟混合信号(Analog Mixed-Signal,AMS)验证的核心矛盾在于:模拟电路用连续时间的电压、电流描述行为,数字电路用离散时钟沿和逻辑值描述行为,二者必须在同一个仿真时间轴上交互。Synopsys AMS 验证流程的本质,就是让模拟求解器与数字求解器在统一调度下协同推进,并在跨越模拟/数字边界的信号上完成语义转换。理解这条"边界"如何被建模、调度和转换,是掌握后续所有验证技术的前提。
1.1 为什么需要协同仿真
传统做法是把模拟部分抽象成 Verilog-AMS 行为模型,或把数字部分简化为理想激励源,分别独立验证。这种做法在早期可行,但当芯片包含电源管理、高速 SerDes、ADC/DAC 接口、PLL 等模块时,模拟与数字的相互影响成为功能正确性的关键:数字控制字改变模拟偏置,模拟输出又反过来触发数字状态机。若分开验证,边界处的时序竞争、亚稳态、建立保持违例、量化误差累积都无法暴露。
协同仿真(Co-simulation)让模拟网表(SPICE 或 FastSPICE)与数字 RTL 在同一仿真内核中并行推进。Synopsys 的典型方案是 VCS 负责数字侧的事件驱动仿真,Custom Compiler / HSPICE / PrimeSim 负责模拟侧的连续时间求解,二者通过 AMS 接口(如 VCS-AMS、CustomSim-VCS 联合仿真)交换数据。数字侧在时钟沿推进,模拟侧在自适应时间步长上积分,接口负责在两者之间做时间对齐和值域映射。
1.2 数字-模拟边界的语义转换
边界是 AMS 验证中最容易出问题的地方。数字信号是 0/1/X/Z 的离散逻辑值,模拟信号是连续实数电压。连接二者需要两类转换器:
- D2A(数字到模拟):把数字逻辑值映射为模拟电压。例如 1.2V 逻辑域中,逻辑 1 映射为 1.2V,逻辑 0 映射为 0V,并需要指定上升/下降时间、输出阻抗。若数字侧为三态,还需映射为高阻。
- A2D(模拟到数字):把模拟电压按阈值判决为逻辑值。需要定义 Vih、Vil、Vth 以及判决延迟。当模拟电压处于 Vih 与 Vil 之间时,数字侧可能进入 X 态或亚稳态,这正是需要重点观察的区域。
这些转换参数不是随便填的,它们直接决定仿真结果是否可信。例如把 Vth 设成电源电压的一半,而实际接收器阈值是 0.6V,就会导致占空比和建立时间判断错误。
1.3 典型应用场景
AMS 协同验证并非所有项目都需要。它最适合以下几类场景:
| 场景 | 模拟侧对象 | 数字侧对象 | 验证重点 |
|---|---|---|---|
| 电源管理 | LDO、DC-DC、基准源 | PMU 状态机、时钟门控 | 上电时序、使能竞争、负载瞬态 |
| 数据转换接口 | ADC/DAC 模拟前端 | 数字滤波器、校准逻辑 | 量化误差、采样保持、校准收敛 |
| 高速串行链路 | SerDes 模拟通道、CDR | 编码器、协议层 | 眼图、抖动容限、均衡自适应 |
| 时钟系统 | PLL、晶振、缓冲器 | 分频器、时钟切换 | 锁定时间、相位噪声、切换毛刺 |
以电源管理为例:数字 PMU 发出使能信号,模拟 LDO 在若干微秒后建立输出电压,电压达到阈值后数字侧才允许释放复位。若把 LDO 简化为理想电压源,就看不到软启动过程中的过冲和复位释放过早的问题。协同仿真能同时观察使能、输出电压、复位释放三个信号的真实时序关系。
1.4 主要验证挑战
速度与精度的矛盾。 SPICE 精度高但速度慢,一个包含数千晶体管的模拟模块在协同仿真中可能比纯数字仿真慢几个数量级。工程上常用 FastSPICE 或分区求解,对关键模块保留 SPICE 精度,对非关键模块用行为模型替代。选择哪些模块保留精度,需要基于敏感度分析。
时间步长与事件对齐。 模拟求解器使用自适应步长,数字仿真器在离散事件上推进。当数字事件落在两个模拟时间点之间时,接口需要插值或让模拟侧回退到该时刻重新求解。回退过多会显著拖慢仿真,因此需要合理设置最大时间步长和同步间隔。
初始化与收敛。 模拟节点需要直流工作点,数字寄存器需要复位值。若初始化不一致,仿真可能从错误状态开始。常见做法是先做模拟侧的 DC 分析,把工作点作为协同仿真的初始条件,再释放数字复位。
结果判读。 协同仿真产生的是混合信号波形,判断"通过"需要同时看模拟指标(建立时间、过冲、纹波)和数字行为(状态跳转、协议帧)。建议在测试平台中嵌入断言:模拟侧用阈值比较器生成数字事件,数字侧用 SVA 检查时序关系,把混合信号问题转化为可自动判定的断言失败。
1.5 一个最小协同仿真配置示例
下面是一个简化的 VCS-AMS 联合仿真配置片段,用于说明数字侧与模拟侧如何绑定。示例参数为教学假设值,实际项目需根据工艺和电路调整。
// 数字侧:例化模拟模块的接口
module top;
reg enable;
wire vout;
// 模拟模块以 SPICE 子电路形式存在
analog_block u_analog (
.en(enable),
.out(vout)
);
initial begin
enable = 0;
#100 enable = 1; // 100ns 后使能
#5000 $finish;
end
endmodule
// AMS 接口配置(示意)
// D2A: enable 逻辑1 -> 1.2V, 逻辑0 -> 0V, tr=1ns
// A2D: vout > 0.6V -> 逻辑1, vout < 0.4V -> 逻辑0
// 同步间隔: 最大 10ns,模拟最大步长 1ns
运行后重点观察:enable 拉高到 vout 越过 0.6V 之间的延迟,以及 vout 在 0.4V~0.6V 区间停留的时间。若停留时间超过数字侧接收器的建立要求,就说明存在亚稳态风险,需要调整 LDO 软启动或数字侧采样时刻。