3. 模拟仿真引擎核心机制

混合信号协同仿真的“模拟侧”通常由SPICE类引擎承担。数字侧关心的是事件与逻辑值,模拟侧关心的却是连续时间上的电压、电流和电荷守恒关系。理解SPICE引擎的四种基本分析类型,以及收敛性、步长控制和精度设置如何影响结果,是判断混合信号仿真是否可信的基础。

四种基本分析:各自求解什么方程

SPICE类引擎的核心是改进节点分析(MNA)。它把电路写成一组非线性微分代数方程:F(x) + dQ(x)/dt = b(t),其中 x 是节点电压与支路电流组成的未知量向量,Q 是电荷/磁通相关的储能项,b 是独立源激励。四种分析类型,本质上是对这组方程做不同的处理。

  • 直流分析(.op / .dc):令所有 d/dt 项为零,求解 F(x)=b 的静态工作点。它用牛顿-拉夫逊迭代把非线性器件线性化,反复求解雅可比矩阵。.dc 则是在 .op 基础上扫描某个源或参数,得到转移曲线。直流分析是瞬态分析的起点,工作点不收敛,瞬态通常也无法启动。
  • 瞬态分析(.tran):对时间做离散化,用数值积分(常用梯形法或Gear法)把微分项变成差分项,再在每个时间点求解非线性代数方程。它回答“电路随时间如何变化”,是混合信号中最常用的模拟分析。
  • 交流小信号分析(.ac):先在直流工作点处把非线性器件线性化,得到小信号等效电路,再在频域求解复系数线性方程组,输出幅频与相频特性。它只对线性化后的电路有效,因此工作点是否正确直接决定 .ac 结果是否有意义。
  • 小信号分析族(.tf / .noise / .pz 等):同样基于工作点线性化,.tf 求直流小信号传递函数与输入输出阻抗,.noise 把各器件噪声源折算到输出并积分得到等效输入噪声,.pz 求极点零点。它们与 .ac 共享同一套线性化模型。

四类分析的关系可以用一张图看清:直流工作点是交流与小信号的共同前提,瞬态则独立沿时间推进,但每一步内部仍要解非线性方程。

SPICE类引擎:分析类型与数值控制关系 直流工作点 .op d/dt = 0 牛顿迭代解 F(x)=b 瞬态 .tran 时间离散 + 数值积分 每步解非线性方程 交流小信号 .ac 工作点线性化 复系数线性求解 小信号族 .tf/.noise/.pz 传递函数 / 噪声 / 极点零点 共享同一线性化模型 数值控制三要素 收敛性:迭代是否收敛 步长:tstep / maxstep 精度:reltol / abstol / vntol LTE 局部截断误差 决定步长接受 / 拒绝 过松 → 失真;过紧 → 慢 gmin / 源步进 辅助收敛 线性化 线性化 每步迭代 混合信号接口影响: 数字事件 → 模拟激励跳变 → 步长被迫回退(maxstep 与 LTE 共同决定)→ 收敛失败会中断协同仿真时间轴 模拟输出 → 数字阈值判定 → 事件时刻精度受 reltol 与接口采样方式影响

收敛性:牛顿迭代为什么会失败

直流和瞬态每一步都要解非线性方程,SPICE用牛顿-拉夫逊迭代:给定初值 x₀,计算 F(xₖ) 与雅可比矩阵 J(xₖ),解 J·Δx = -F,更新 xₖ₊₁ = xₖ + Δx,直到 |Δx| 和残差同时满足容差。收敛失败通常来自三类原因:初值离解太远、方程本身不连续(如理想开关、分段线性模型)、或雅可比矩阵病态(如悬空节点、并联理想电压源)。

工程上常用的辅助手段包括:给关键节点加 .ic 或 .nodeset 提供初值;用 .options gmin=1e-12 在每个节点对地并联极小电导,避免矩阵奇异;对电源使用 ramp 或 pulse 的上升时间而非理想阶跃;必要时用 .options itl1=200 itl4=50 放宽迭代次数上限。这些手段不改变电路物理,只改变求解路径。

步长控制:LTE 如何决定下一步走多远

瞬态分析中,引擎在每个时间点估计局部截断误差(LTE),并与 reltol、abstol、vntol 构成的容差带比较。若 LTE 超限,该步被拒绝,步长缩小后重算;若 LTE 远小于容差,步长可以放大。因此 tstep 只是输出采样间隔,真正决定计算步长的是 LTE 与 maxstep 的上限约束。

混合信号场景下,数字侧的输出会在某个时刻发生跳变,模拟侧若没有在该时刻附近限制步长,就可能“跨过”跳变沿,导致波形失真或事件丢失。常见做法是设置 maxstep 不超过数字信号最小脉宽的 1/10,或在接口处使用 breakpoint 强制引擎在事件时刻落点。

精度设置:三个容差的含义与取值

参数含义典型值过松的后果
reltol相对容差,控制迭代与 LTE 的相对误差1e-3波形细节丢失,交流相位偏差
abstol电流绝对容差1e-12 A小电流支路收敛判据失效
vntol电压绝对容差1e-6 V低压节点解不准确
chgtol电荷绝对容差1e-14 C开关电容电路电荷误差累积

精度设置不是越紧越好。把 reltol 从 1e-3 收紧到 1e-6,瞬态步数可能增加数倍,仿真时间显著上升,而结果改善往往有限。合理做法是先以默认值跑通,再针对关键指标(如建立时间、THD、相位裕度)做收敛性验证:将 reltol 减半重跑,若关键指标变化小于设计裕度的 1/5,即可认为当前精度足够。

在混合信号协同仿真中,建议把模拟引擎的 maxstep 与数字侧最小脉宽绑定,并把 reltol 与接口阈值判定精度一起评估。接口处的电压阈值判定若使用固定阈值,而模拟波形因步长过大产生过冲,就可能出现数字侧误触发。

一个可复现的检查流程

假设一个由 1 kHz 方波驱动的 RC 网络(R=1 kΩ,C=100 nF,时间常数 τ=100 μs),数字侧在 0.5 ms 处翻转。可按以下顺序检查引擎设置是否合理:

  1. 先跑 .op,确认工作点收敛,记录关键节点电压。
  2. 跑 .tran 1u 5m 0 10u,其中 tstep=1u 为输出间隔,tstop=5m,maxstep=10u 限制最大步长。
  3. 观察 0.5 ms 附近波形是否有明显台阶或过冲;若有,把 maxstep 降到 1u 重跑对比。
  4. 把 reltol 从 1e-3 改为 5e-4,比较上升时间与稳态值变化。
  5. 若瞬态报收敛失败,先加 .nodeset 给电容节点初值,再考虑 gmin 与迭代次数调整。

这套流程的价值在于:它把“仿真跑不通”或“结果不可信”拆解为可定位的数值问题,而不是盲目改参数。理解直流、瞬态、交流与小信号分析各自的方程基础,再掌握收敛、步长与精度三者的相互制约,才能在混合信号协同仿真中既保证速度,又保证结果可用于工程判断。