第16章 系统级仿真与优化

第16章 系统级仿真与优化

前几章讨论的电路级仿真都以晶体管级网表为对象。一个中等规模的模拟前端,比如用于图像传感器的列并行读出电路,包含数百个晶体管;一个完整的锁相环或模数转换器,晶体管数量可达数千乃至上万。对这样的电路做晶体管级瞬态仿真,时间代价极高。以典型的65nm工艺模型为例,一个包含500个晶体管的开关电容滤波器,做一次10μs的瞬态仿真,在单核工作站上往往需要数小时。设计者想评估不同电容取值对建立时间的影响,每次修改都要重跑数小时,这种迭代方式在工程上不可接受。

系统级仿真用行为模型替代晶体管级电路,在保证精度的前提下,将仿真时间缩短几个数量级。本章讨论行为建模的方法、系统级仿真的流程,以及设计优化中常用的参数扫描与梯度优化技术。

16.1 系统级建模

16.1.1 从晶体管级到行为级

行为建模用数学表达式或高级语言描述模块的外部特性,忽略内部晶体管实现。一个运算放大器,在晶体管级需要几十个MOS管来描述;在行为级,可以用一个带有限增益、有限带宽、压摆率和输出阻抗的传递函数来近似。

以开环增益为 \(A_0\)、主极点为 \(p_1\) 的运放为例,其行为模型可以写为:

\[ A(s) = \frac{A_0}{1 + s/p_1} \]

如果还要考虑压摆率限制,则需要在时域模型中增加一个非线性环节:当输入差分电压对应的理想输出变化率超过压摆率 \(SR\) 时,输出按 \(SR\) 的斜率变化而非按线性传递函数变化。

模型的精度取决于它包含多少非理想效应。模型越精细,仿真结果越接近晶体管级,但仿真时间也随之增加。一个只含有限增益的模型,仿真速度比晶体管级快三个数量级以上;加入压摆率和输出摆幅限制后,速度优势缩小到两个数量级左右。设计者需要根据仿真目的选择模型的复杂度。

图像 图1:描述语言的精度与仿真速度(上图摘自Cadence用户手册)

图16-1展示了不同建模语言在精度与仿真速度之间的相对位置。底层是SPICE晶体管模型,精度最高但速度最慢;顶层是理想化的数学描述,速度快但精度有限。Verilog-A/Verilog-AMS位于两者之间,提供了灵活的精度-速度折中空间。

16.1.2 Verilog-A与Verilog-AMS

Verilog-A是行为建模中最常用的语言之一。它由Accellera组织维护,是Verilog-AMS标准的一个子集,专门用于模拟行为建模。Verilog-AMS则在Verilog-A的基础上增加了对混合信号系统的支持,可以同时描述模拟和数字部分。

图像 图2:Verilog-AMS的组成(摘自Cadence用户手册)

一个简单的电阻行为模型,用Verilog-A描述如下:

`include "constants.vams"
`include "disciplines.vams"

module resistor(p, n);
    inout p, n;
    electrical p, n;
    parameter real R = 1k;
    
    analog V(p, n) <+ R * I(p, n);
endmodule

这段代码定义了一个两端电阻:\(V = R \cdot I\)。parameter关键字允许在实例化时修改电阻值,analog块中的语句描述了模块的电气行为。

运放的行为模型则复杂得多。以下是一个包含有限增益、有限带宽和压摆率的运放模型片段:

module opamp(inp, inn, out);
    input inp, inn;
    output out;
    electrical inp, inn, out;
    parameter real A0 = 100k;
    parameter real GBW = 100M;
    parameter real SR = 10M;
    parameter real Vmax = 3.3;
    
    real v_in, v_out;
    
    analog begin
        v_in = V(inp, inn);
        // 理想积分器加压摆率限制
        v_out = 0;
        // 使用拉普拉斯算子描述有限带宽
        V(out) <+ laplace_nd(v_in * A0, {1}, {1/GBW, 1});
    end
endmodule

运放模型还会加入输出阻抗、共模输入范围、电源电压限制、噪声等效应。模型包含的效应越多,仿真精度越高,但参数提取和验证的工作量也越大。一个只含增益和带宽的模型,参数可以从一次交流仿真中提取;包含噪声的模型需要额外的噪声仿真,包含失配的模型则需要统计仿真数据。

16.1.3 建模的层次与精度

行为建模可以按精度分为三个层次。

理想模型只描述理想功能,如理想运放的 \(V_{out} = A(V_+ - V_-)\),不包含任何非理想效应。用于系统架构验证的早期阶段,此时设计者关心的是功能正确性而非性能极限。一个流水线ADC的架构验证,用理想模型可以在几分钟内完成行为级仿真,确认数字校准算法的收敛性。

宏模型包含主要的非理想效应:有限增益、带宽、压摆率、输出摆幅、输入失调电压等。宏模型是系统级仿真中最常用的层次,它在精度和速度之间取得了较好的平衡。以运放为例,宏模型的仿真时间大约是晶体管级的百分之一到千分之一,而精度误差控制在10%以内。

详细行为模型进一步包含噪声、失真、温度漂移、电源抑制等效应。这类模型通常用于性能验证阶段,需要从晶体管级仿真或实测数据中提取参数。一个包含完整噪声模型的运放行为模型,可以准确预测电路的信噪比,但参数提取的工作量可能达到数天。

建模层次的选择取决于仿真的目的。验证数字校准算法的收敛性,理想模型就够用;评估信噪比或总谐波失真,则需要详细行为模型。

16.1.4 模型参数提取

行为模型的参数不能凭空设定,需要从晶体管级仿真或芯片实测中提取。以运放为例,开环增益 \(A_0\) 和单位增益带宽 \(GBW\) 可以从交流仿真的幅频特性曲线中读取;压摆率 \(SR\) 可以从大信号阶跃响应的上升沿斜率中测量;输出摆幅则受电源电压和输出级结构的限制。

提取过程通常需要自动化工具辅助。Cadence的Model Writer、Synopsys的CustomSim Model Generator等工具可以从晶体管级仿真结果中自动提取行为模型参数。对于复杂模块如流水线ADC中的MDAC(乘法数模转换器),模型参数的提取需要仔细设计仿真实验,确保覆盖所有工作条件。一个典型的做法是:在不同温度(-40°C、27°C、125°C)和不同工艺角(SS、TT、FF)下分别提取参数,建立参数表供系统级仿真调用。

16.2 仿真与验证

16.2.1 系统级仿真流程

系统级仿真的典型流程分为六个步骤:

  1. 模块划分:将整个系统按功能划分为若干子模块,每个子模块对应一个行为模型。
  2. 模型搭建:为每个子模块编写或选择合适的行为模型,设定初始参数。
  3. 参数校准:对关键模块,用晶体管级仿真结果校准行为模型参数,确保行为模型在目标工作条件下与晶体管级电路一致。
  4. 系统仿真:将所有行为模型连接成完整系统,进行仿真。
  5. 结果验证:将系统级仿真结果与晶体管级仿真(对关键路径)或实测结果对比,验证模型的准确性。
  6. 迭代优化:如果系统性能不满足指标,修改设计参数并重新仿真。
flowchart TD
    A[模块划分] --> B[行为模型搭建]
    B --> C[参数校准]
    C --> D[系统仿真]
    D --> E{结果验证}
    E -->|通过| F[输出设计参数]
    E -->|不通过| G[修改模型或参数]
    G --> C

参数校准是其中最关键的步骤。以一个10位流水线ADC为例,如果比较器的行为模型没有准确描述失调电压,系统级仿真可能显示无失码,而晶体管级实现却出现失码。校准的做法是:对每个关键模块,选取典型工作条件,对比行为模型与晶体管级仿真的输出波形,调整模型参数使两者偏差小于5%。

16.2.2 混合信号协同仿真

实际系统中,模拟和数字电路往往共存。一个典型的例子是流水线ADC:模拟部分包含采样保持电路、MDAC和比较器,数字部分包含时序控制逻辑和数字校准电路。对这样的系统,纯模拟仿真器(如Spectre、HSPICE)处理数字逻辑的效率很低,而纯数字仿真器(如VCS、ModelSim)无法处理模拟电路。

混合信号协同仿真(Mixed-Signal Co-Simulation)通过接口将模拟和数字仿真器连接起来,各自处理自己擅长的部分。模拟部分用SPICE或FastSPICE仿真器,数字部分用事件驱动的数字仿真器,两者之间通过模拟-数字转换接口(如D/A和A/D转换模型)交换信号。

以Cadence的AMS Designer为例,模拟部分可以在Spectre中运行,数字部分可以在Incise或Xcelium中运行。仿真器之间的同步由AMS Designer统一管理,支持多种同步模式以适应不同速度的模拟和数字信号。一个典型的同步策略是:模拟仿真器采用变步长算法,数字仿真器采用事件驱动,两者在固定的时间点(如时钟上升沿)交换数据。

图像 图3:ADE中包含的各种仿真器

16.2.3 统计仿真与良率分析

工艺偏差是集成电路设计中不可回避的问题。在65nm及以下的工艺节点,阈值电压、栅氧厚度、沟道长度等参数的波动对电路性能的影响越来越显著。系统级仿真需要评估这些波动对整体性能的影响,即良率分析。

统计仿真的基本方法是蒙特卡洛分析:根据工艺库提供的参数分布,对每个参数进行随机采样,重复仿真多次,统计性能指标的分布。在ADE环境中,仿真器根据工艺库提供的工艺和失配参数的高斯分布,对一个电路参数进行不同的统计性分析仿真。仿真结束后,可以利用ADE的数据分析器分析工艺参数变化对所设计电路良率的影响,并及时进行改进。

图像 图4:在ADE中,仿真器根据工艺库提供的工艺和失配参数的高斯分布,对一个电路参数进行不同的统计性分析仿真。仿真结束后,可以利用ADE的数据分析器分析工艺参数变化对所设计电路良率的影响,并及时进行改进,提高设计裕量

蒙特卡洛仿真的次数通常需要数百次才能获得统计上可信的结果。对于晶体管级电路,每次仿真可能耗时数分钟,数百次仿真意味着数小时甚至数天的计算时间。如果使用行为模型,单次仿真时间缩短到秒级,蒙特卡洛分析就变得可行。一个包含50个晶体管的运放,晶体管级蒙特卡洛分析需要约8小时;用行为模型,同样的分析在10分钟内完成。

16.2.4 验证方法

系统级仿真的验证工作包含两个层面。

模型验证确认行为模型的行为与晶体管级电路一致。选取典型工作条件,如不同温度和工艺角,对比输出。对于运放模型,通常对比开环增益、单位增益带宽、相位裕度、压摆率、建立时间等指标。偏差应控制在10%以内。一个实用的做法是:在TT工艺角、27°C下做一次详细的对比,再在SS和FF工艺角下各做一次抽查。

系统验证确认整个系统的功能与性能满足设计规格。检查系统级仿真的输出是否满足预先定义的指标,如信噪比(SNR)、无杂散动态范围(SFDR)、总谐波失真(THD)、建立时间、功耗等。

验证工作的难点在于确定模型与晶体管级电路之间的偏差是否在可接受范围内。这需要设计者对电路的工作原理有深入理解,知道哪些非理想效应对系统性能起主导作用。一个常见的错误是:行为模型过于简化,遗漏了某个关键的非理想效应,导致系统级仿真结果过于乐观,而晶体管级实现却达不到指标。比如,一个开关电容滤波器的行为模型如果忽略了运放的有限增益,仿真出的建立精度会偏高,实际电路却达不到同样的精度。

16.3 设计优化技术

16.3.1 参数扫描

参数扫描是最直观的优化方法:在感兴趣的参数范围内,等间距或按指定步长取若干值,分别仿真,比较结果,选择最优参数。

以开关电容滤波器的单位增益带宽设计为例。设运放的单位增益带宽为 \(f_u\),采样时钟频率为 \(f_s\),要求在一个时钟周期内建立到0.1%精度。对于一阶系统,建立时间常数 \(\tau = 1/(2\pi f_u)\),0.1%建立需要约 \(7\tau\) 的时间。因此要求:

\[ 7\tau < \frac{1}{f_s} \]

即:

\[ f_u > \frac{7 f_s}{2\pi} \approx 1.1 f_s \]

实际设计中,由于寄生电容、开关导通电阻等效应,所需的 \(f_u\) 往往比这个值高。设计者可以对 \(f_u\) 进行参数扫描,从 \(1.5 f_s\) 到 \(3 f_s\),步长 \(0.25 f_s\),仿真每种情况下的建立精度和功耗,选择满足精度要求且功耗最低的方案。

参数扫描的优点是简单直接,不需要复杂的数学工具,结果直观。缺点是效率低:参数个数增加时,仿真次数呈指数增长。两个参数各取10个值,就需要100次仿真;三个参数就是1000次。因此参数扫描适用于参数个数不超过3个的情况。

16.3.2 梯度优化

当参数个数较多时,梯度优化方法更为高效。梯度优化的基本思路是:从初始参数点出发,计算性能指标对参数的梯度(即偏导数),沿梯度下降方向(或负梯度方向)更新参数,重复迭代直到收敛。

以最小化功耗 \(P\) 为目标,参数向量为 \(\mathbf{x} = [x_1, x_2, ..., x_n]^T\),梯度优化更新规则为:

\[ \mathbf{x}_{k+1} = \mathbf{x}_k - \alpha \nabla P(\mathbf{x}_k) \]

其中 \(\alpha\) 是步长,\(\nabla P(\mathbf{x}_k)\) 是功耗对参数的梯度向量。

梯度的计算可以用有限差分法近似:

\[ \frac{\partial P}{\partial x_i} \approx \frac{P(x_i + \Delta x_i) - P(x_i - \Delta x_i)}{2\Delta x_i} \]

每次迭代需要 \(2n\) 次仿真(中心差分)或 \(n+1\) 次仿真(前向差分)。对于 \(n=5\) 个参数,每次迭代需要6到11次仿真,通常迭代几十次即可收敛。相比参数扫描的 \(10^5\) 次仿真,效率提升明显。

梯度优化的局限在于可能陷入局部最优解。解决方法是多次随机初始化,从不同起点出发进行优化,选择最优结果。另一种方法是结合全局优化算法,如模拟退火或遗传算法,在全局范围内搜索。

16.3.3 设计空间探索

设计空间探索(Design Space Exploration, DSE)是在多个性能指标之间寻找帕累托最优解集的过程。以运放设计为例,设计者通常关心增益、带宽、功耗、噪声、面积等指标,这些指标之间存在相互制约:提高带宽往往需要更大的偏置电流,从而增加功耗;降低噪声需要更大的输入对管面积,从而增加芯片面积。

帕累托最优的定义是:如果一个设计在某个指标上优于另一个设计,且在其他所有指标上不劣于该设计,则称该设计支配另一个设计。帕累托最优解集是那些不被任何其他设计支配的设计的集合。设计者从帕累托最优解集中选择满足项目约束的设计。

flowchart LR
    A[定义设计变量与指标] --> B[生成初始设计点]
    B --> C[仿真评估]
    C --> D[构建代理模型]
    D --> E[多目标优化搜索]
    E --> F[帕累托前沿]
    F --> G[选择最终设计]

设计空间探索的流程如上图所示。首先定义设计变量(如晶体管尺寸、偏置电流、电容值等)和性能指标(如增益、带宽、功耗等)。然后在设计空间中生成初始采样点,对每个采样点进行仿真评估。基于仿真数据构建代理模型(如响应面模型或神经网络),用代理模型代替昂贵的仿真进行优化搜索,找到帕累托前沿。最后从帕累托前沿中选择满足项目约束的设计。

一个实际的例子是:为一个12位SAR ADC的比较器设计寻找功耗与噪声的帕累托前沿。设计变量包括输入对管尺寸、尾电流、锁存器尺寸等6个参数。用拉丁超立方采样生成200个初始设计点,每个点做一次行为级仿真(约2秒),构建代理模型后,用NSGA-II算法搜索帕累托前沿,得到约30个非支配解。设计者根据系统预算,从中选择功耗最低且噪声满足要求的方案。

16.3.4 基于仿真的优化工具

Cadence ADE Explorer和Synopsys PrimeSim提供自动优化功能。这些工具集成了多种优化算法,用户可以选择适合自己问题的算法。

以运放设计为例,ADE Explorer中的优化流程为:

  1. 定义设计变量(如晶体管宽度、长度、偏置电流)。
  2. 定义优化目标(如最小化功耗,约束条件是增益大于60dB、带宽大于10MHz)。
  3. 选择优化算法(如梯度法、遗传算法、多目标优化算法)。
  4. 运行优化,查看结果。

工具会输出优化后的参数值和对应的性能指标。设计者可以将优化结果带回晶体管级仿真验证,确认行为模型优化的结果在晶体管级同样成立。一个典型的验证做法是:将优化得到的参数代入晶体管级网表,做一次完整的交流仿真和瞬态仿真,对比增益、带宽、相位裕度等指标与行为模型预测值的偏差。

16.3.5 优化中的约束处理

实际设计中的优化问题几乎都带有约束条件。常见的约束包括:

  • 性能约束:增益不低于某个值,带宽不低于某个值,噪声不高于某个值。
  • 物理约束:晶体管尺寸在工艺允许范围内,电容值不超过可用面积。
  • 功耗约束:总功耗不超过预算。

约束处理的方法主要有两种:罚函数法和约束转换法。罚函数法将约束违反量作为惩罚项加入目标函数,将约束优化转化为无约束优化。约束转换法通过变量替换将约束条件隐含在参数化中,如将晶体管宽长比限制在一定范围内,可以用 \(W = W_{min} + (W_{max} - W_{min}) \cdot \sigma(s)\) 的方式参数化,其中 \(\sigma\) 是sigmoid函数,保证 \(W\) 始终在 \([W_{min}, W_{max}]\) 范围内。

罚函数法的实现简单,但惩罚系数的选择需要经验。惩罚系数过小,优化结果可能违反约束;过大,则可能过早收敛到可行域边界附近的次优解。约束转换法则没有这个问题,但只适用于可以解析表达的约束。

16.3.6 一个完整的优化实例

以一个两级运放的设计为例,说明系统级优化在实际设计中的应用。设计指标为:直流增益 \(\geq 80\) dB,单位增益带宽 \(\geq 50\) MHz,相位裕度 \(\geq 60°\),功耗 \(\leq 1\) mW,负载电容 \(C_L = 2\) pF。

设计变量为第一级尾电流 \(I_1\)、第二级偏置电流 \(I_2\)、输入对管宽长比 \((W/L)_1\)、第二级放大管宽长比 \((W/L)_2\)、补偿电容 \(C_c\)。

第一步,建立运放的行为模型。模型中包含有限增益、主极点、次极点、压摆率等效应。系统级仿真可以快速评估不同参数组合下的增益、带宽和相位裕度。行为模型的参数从晶体管级仿真中提取:用交流仿真得到 \(A_0\) 和 \(GBW\),用阶跃响应得到 \(SR\)。

第二步,用梯度优化在参数空间中搜索满足指标的解。由于参数有5个,参数扫描需要大量仿真,更适合用梯度优化。初始点选为 \(I_1 = 50\mu A\),\(I_2 = 100\mu A\),\((W/L)_1 = 20\),\((W/L)_2 = 40\),\(C_c = 1pF\)。优化目标是最小化功耗,约束是增益、带宽和相位裕度。经过约30次迭代,优化得到一组满足所有约束的参数组合,功耗为 \(0.7mW\)。

第三步,对优化结果进行蒙特卡洛分析,评估工艺偏差对性能的影响。用行为模型做200次蒙特卡洛仿真,统计增益和相位裕度的分布。结果显示相位裕度的标准差约为4°,良率(相位裕度大于60°的比例)为92%。如果良率不够,需要调整设计裕量,比如将相位裕度目标提高到65°再重新优化。

第四步,将选定的参数代入晶体管级电路,进行详细的电路仿真验证。晶体管级仿真得到的增益为82dB,带宽为48MHz,相位裕度为63°,与行为模型预测的85dB、52MHz、65°偏差在5%以内。如果晶体管级仿真结果与行为模型预测的偏差较大,需要检查行为模型是否遗漏了重要的非理想效应,并修正模型。

这个流程中,行为模型让设计者可以快速探索设计空间,找到满足指标的参数组合;晶体管级仿真用于最终验证,确保实际电路的行为与模型预测一致。两步加起来大约需要两天时间,而如果完全用晶体管级仿真做同样的优化,预计需要两周以上。

16.4 本章小结

系统级仿真的核心是用行为模型替代晶体管级电路,在精度和速度之间取得平衡。Verilog-A/Verilog-AMS提供了灵活的建模语言,可以描述从理想到详细的多种层次的行为模型。系统级仿真流程包括模块划分、模型搭建、参数校准、系统仿真和结果验证,其中参数校准是保证模型精度的关键步骤。统计仿真将工艺偏差纳入考虑,通过蒙特卡洛分析评估设计良率。设计优化技术从简单的参数扫描到梯度优化,再到多目标设计空间探索,为设计者提供了在不同复杂度下选择优化方法的可能。

行为模型的精度始终是系统级仿真的核心问题。模型过于简化会导致仿真结果过于乐观,模型过于复杂则失去了速度优势。设计者需要根据设计阶段和关键指标,选择合适的建模层次。参数校准工作不能省略——只有经过晶体管级仿真或实测数据验证的模型,才能在系统级仿真中给出可信的结果。

AI 智能助手 访客
妙笔书生 智能助手
基于帮助文档回答您的问题,输入问题即可开始
常见问题
  • 如何创建新项目?
  • 如何上传和管理资料?
  • 如何使用 AI 提取功能?
  • 如何修改个人密码?

正在重新连接服务器…

重新连接失败,将在 秒后重试…

重新连接失败。
请重试或刷新页面。

会话已被服务器暂停。

恢复会话失败。
请重试或刷新页面。

发生未处理的错误。 重新加载 🗙