3. 混合信号仿真环境搭建

混合信号SoC的验证难点,不在于单个仿真器能不能跑,而在于模拟域与数字域如何在同一套激励、同一时间轴下协同推进。Cadence的ADE产品线为此提供了两层入口:ADE Explorer面向单测试、单仿真器的快速迭代,适合模拟模块或小规模混合信号单元的调试;ADE Assembler面向多测试、多 corner、多仿真器的批量管理与回归,适合SoC级混合信号验证。理解两者的分工,是搭建环境的第一步。

一、从原理图到仿真视图:视图选择决定网表形态

在Virtuoso中,同一个cellview可以存在多种视图:schematic、symbol、spectre(cdsSpice/spectre网表视图)、verilog、veriloga、systemverilog、ams等。仿真时选择哪个视图,直接决定网表生成器如何展开层次。混合信号环境的核心机制是视图切换(view switching):在ADE的Setup→Simulation Files或通过ams视图绑定,指定“当遇到某类cell时优先使用哪种视图”。

典型策略是:晶体管级模拟模块用schematic或spectre视图;数字RTL用verilog/systemverilog视图;需要行为级加速的模拟模块用veriloga视图;连接模拟与数字的接口单元(如ADC采样开关、电平转换器)用ams视图或connect module。若视图绑定错误,常见后果是网表里出现空盒子(empty box)或数字模块被误当成模拟子电路展开,导致仿真无法启动或结果异常。

混合信号仿真环境:视图绑定 → 网表生成 → 多仿真器协同 设计层次与视图选择 顶层 SoC Testbench schematic / verilog 模拟模块(PLL/LDO/ADC) schematic → spectre 数字模块(控制器/DSP) verilog / systemverilog 接口/Connect Module ams / veriloga 行为级模型 veriloga / wreal 网表生成流程 视图绑定规则 view list / stop list 层次展开 netlist / config 接口插入 connect module 网表输出 spectre / verilog / ams 检查点 空盒子 / 端口不匹配 视图缺失 / 递归展开 多仿真器集成与协同 Spectre / Spectre APS 模拟域求解:DC / AC / TRAN / NOISE 精度高,适合晶体管级模块 Xcelium 数字域求解:Verilog / SV / UVM 事件驱动,适合RTL与验证平台 AMS Designer(协调层) 统一时间轴、数据交换、接口同步 调用Spectre + Xcelium协同仿真 ADE Explorer / Assembler Explorer:单测试快速迭代 Assembler:多测试/corner批量管理

二、ADE Explorer与ADE Assembler的配置差异

ADE Explorer的配置围绕一个ADE test展开:在Virtuoso中打开原理图,Launch→ADE Explorer,自动创建一个test。关键配置项包括:Design(指定顶层cell与view)、Simulator(选择spectre/ams/xcelium)、Model Libraries(工艺库模型路径,如/pdk/tsmc28/spectre/models/tt.scs)、Stimuli(激励源,可以是schematic中的vsource,也可以是veriloga或文件激励)、Outputs(保存节点电压、电流、表达式)。Explorer适合“改一个参数、跑一次、看波形”的快速循环。

ADE Assembler则引入Test与Run的分离:一个Assembler view下可以挂多个test(如tt_27c、ss_125c、ff_-40c),每个test可以指定不同的corner、不同的仿真器、不同的激励文件。Assembler的Corners页面用于定义工艺角与温度电压组合,Checks/Asserts页面用于挂载测量与断言,Run Modes支持单机、LSF、SGE等分布式提交。对于混合信号SoC,通常把模拟test和数字test分别建好,再用一个AMS test把两者串起来。

三、多仿真器集成的关键:AMS Designer的接口与时间同步

Spectre与Xcelium的协同不是简单地把两个网表拼在一起,而是通过AMS Designer作为协调层。其核心机制包括:

  • 接口单元(Interface Element / Connect Module):在模拟与数字边界插入,负责电压→逻辑电平的阈值判断、逻辑→电压的驱动强度建模,以及阻抗/负载的近似。常见做法是用ams视图或connectLib中的cds_globals、connectRules配置。
  • 时间同步:模拟求解器使用自适应时间步长,数字求解器使用事件驱动。AMS通过ieee1364或wreal接口在两者之间传递数据,并在数字事件到来时通知Spectre“打断”当前时间步,保证跨域信号不丢失。
  • 精度与速度权衡:接口的threshold、slew、delay参数直接影响仿真速度。例如把数字输出到模拟输入的上升时间设得过小,Spectre会因频繁缩步而变慢;设得过大,则可能掩盖真实的时序问题。

四、网表生成与常见问题排查

点击Netlist→Create或直接Run时,ADE会调用si环境生成网表。混合信号网表通常包含三部分:Spectre子网表(模拟)、Verilog/SystemVerilog网表(数字)、以及AMS顶层配置。生成后建议先做三项检查:

  1. 层次是否完整:在netlist目录下查看netlistHeader与netlistFooter,确认没有empty box或unresolved提示。
  2. 接口是否插入:搜索connect module或cds_connect,确认模拟-数字边界有接口单元,而不是直接短接。
  3. 仿真器调用是否正确:检查runSimulation脚本中spectre与xrun的路径、版本、参数是否与ADE中设置一致。
实用建议:初次搭建AMS环境时,先用一个极简的“模拟反相器 + 数字反相器”链路跑通,确认接口、时间同步、波形查看都正常,再逐步替换为真实模块。这样能把“环境问题”和“设计问题”分开定位。
常见坑:数字模块的timescale与AMS顶层不一致,会导致仿真时间轴错乱;模拟模块的supply端口未在数字侧正确连接,会导致接口电平判断失效。建议在cds_globals中统一设置timescale与supply。

五、一个可参考的配置片段

以下是一个AMS test中connectRules的简化示例,用于定义数字到模拟、模拟到数字的接口行为:

; connectRules.scs
connectRules amsConnectRules
  connectRule (digitalToAnalog) \
    -module "cds_connect" \
    -cell "dig_to_ana" \
    -view "spectre" \
    -params "vhigh=1.8 vlow=0.0 threshold=0.9"
  connectRule (analogToDigital) \
    -module "cds_connect" \
    -cell "ana_to_dig" \
    -view "spectre" \
    -params "vhigh=1.8 vlow=0.0 threshold=0.9"
end connectRules

这段配置告诉AMS:数字到模拟的接口使用dig_to_ana单元,逻辑高电平对应1.8 V,低电平对应0 V,判决阈值为0.9 V。实际项目中,这些参数需要根据工艺库的IO电平标准和接口单元的驱动能力来调整,不能直接照搬。

总结来说,混合信号仿真环境搭建的核心是“视图绑定正确、接口插入到位、仿真器调用一致”。ADE Explorer负责快速验证单个test,ADE Assembler负责批量管理多corner多test,AMS Designer负责协调Spectre与Xcelium的时间同步与数据交换。把这三层关系理清,再配合网表生成后的三项检查,就能在混合信号SoC验证中少走很多弯路。