Appearance
Ch4(续):谐波平衡
4.8 谐波平衡
谐波平衡(HB)分析是一种频域方法,用于解决周期性或准周期性的随时间依赖问题。与瞬态分析(参见 瞬态命令)相比,HB 对于具有相差数个数量级的不同时间常数的问题在计算上更高效。与交流分析(参见 小信号交流分析)相比,周期性激发不限于无穷小振幅。对于周期情况,HB 的替代方案是循环分析(参见 大信号循环分析)。
注意: 谐波平衡不支持陷阱(参见第 17 章)或铁电体(参见第 29 章)。
时间依赖模拟问题的形式为:
d/q(r, u(t, r))/dt + f(r, u(t, r), w(t, r)) = 0 (24)其中 f 和 q 是描述电路和器件的非线性函数,u 是解变量向量,w 是随时间依赖的激发。
假设 w 对于 f = (f1, ..., fM)^T 是准周期的,f^m 的正基频向量,和 H = (H1, ..., HM)^T,非负最大谐波数向量,解 u 用截断傅里叶级数近似:
u(t) = U0 + Σ[h≠0] Uh exp(iωh t) (25)其中 ωh = 2πh·f。在傅里叶空间中,方程式 24 变为:
L(U) := iΩQ(U) + F(U) = 0 (26)其中 Ω 是频率矩阵,F 和 Q 是 f 和 q 的傅里叶级数。函数 L 非线性地依赖于 U,因此求解方程式 26 需要非线性(牛顿)迭代。有关谐波平衡数值的更多详细信息,请参见 谐波平衡分析。
4.8.1 谐波平衡分析的模式
Sentaurus Device 支持两种不同模式执行谐波平衡模拟:多维傅里叶变换(MDFT)模式和单维傅里叶变换(SDFT)模式。
MDFT 模式
MDFT 模式适用于多音调分析和单音调分析,通过 Math 部分中全局 HB 部分的 MDFT 选项激活。它使用 MDFT 在系统的时间和频域之间切换。
此模式需要通过紧凑模型接口(CMI)定义的紧凑模型,支持频域中的装配例程,即 CMI-HB-MDFT 函数集,如《紧凑模型用户指南》中所述。
Sentaurus Device 提供了一组支持此功能行为的基本紧凑模型(参见《紧凑模型用户指南》具有频域装配的 CMI 模型)。标准 SPICE 模型在此模式下不受支持。
SDFT 模式
SDFT 模式仅支持单音调 HB 分析。混合模式电路可能包含不支持 CMI-HB-MDFT 函数集的 SPICE 模型和 CMI 模型。如果 MDFT 模式被关闭,则使用 SDFT 模式。
4.8.2 执行谐波平衡分析
谐波平衡模拟通过 Solve 部分的 HBCoupled 关键字激活。HBCoupled 的语法与 Coupled 相同(参见 Coupled 语句)。此外,HBCoupled 支持表 354(第 1786 页)总结的选项。
注意: 并非所有
HBCoupled选项都被两种模式支持。
Tone 选项是强制的,因为没有提供默认值。
在 MDFT 模式中指定多个 Tone 选项允许多音调分析。分析的基本频率可以由明确的数值常数给出,也可以引用 System 部分中随时间依赖源的频率。
两音调分析的示例:
cpp
Math {
HB { MDFT } * 允许 MDFT 模式
...
}
System {
...
sd_hb_vsource2_pset "va" ( na 0 ) * 两音调电压源
{ dc = 1.0 freq = 1.e9 mag = 5.e-3 phase = -90.
freq2 = 1.e3 mag2 = 1.e-3 phase2 = -90.}
HBPlot "hbplot" ( v(na) i(va na) ... ) * HB 电路输出
}
Solve {
* 求解直流问题
...
Coupled { Poisson Electron Hole }
* 求解 HB 问题
HBCoupled ( * 两音调分析
Tone ( Frequency = "va"."freq" NumberOfHarmonics = 5 )
Tone ( Frequency = "va"."freq2" NumberOfHarmonics = 1 )
Initialize = DCMode
Method = ILS
GMRES ( Tolerance = 1.e-2 MaxIterations = 30 Restart = 30 )
) { Poisson Electron Hole }
}此示例中的基频 f1 和 f2 取自随时间变化的电压源 va。
HBCoupled 可以用作顶级 Solve 语句,或在 Plugin、QuasiStationary 中使用。
注意: 如果
QuasiStationary控制其他求解语句以及单个HBCoupled,则仅当在导致失败的语句运行之前没有HBCoupled在失败步中收敛时,步长减小才能正常工作。
求解频谱
要求解的频谱由指定的音调确定。对于不同的 HBCoupled 语句,音调数量及其谐波数可以变化(其中第 m 个音调与下一个频谱的第 m 个音调相关,无论其频率值如何,即音调顺序很重要)。
对于某些应用,您可能只对几个频谱分量感兴趣,或者您可能想减少牛顿过程中的计算负担。对于这种情况,您可以通过在全局 Math 部分的 HB 部分中使用 SolveSpectrum 指定频谱(多)索引列表来减少求解频谱(仅适用于 MDFT 模式)。
例如:
cpp
Math { ...
HB { ... SolveSpectrum ( Name = "sp1" ){ (0 0) (1 0) (0 1) (2 1)
(2 -1) } }
}
Solve { ...
HBCoupled ( ... SolveSpectrum = "sp1" ) { ... }
}其中,例如,多索引 (2 -1) 对应于互调频率 2f1 - f2。
收敛参数
HBCoupled 的收敛行为可以独立于 Coupled 求解语句的收敛规范进行分析和影响。某些参数只能在全球 Math 部分的 HB 部分中设置(参见表 226,第 1665 页),其他参数只能在 HBCoupled 语句中设置(参见表 354,第 1786 页),还有一些可以同时在两处设置。
指定 LogDensity 允许您在 HB 分析中使用变换的密度变量。不是直接使用载流子密度变量,而是使用载流子密度的对数作为 HB 牛顿算法中的解变量。这有时可以改善分析的收敛性。您只能在全局 Math 部分设置此标志,变量变换适用于所有 HBCoupled 语句。
参数 LogTemperature 与 LogDensity 完全类似,但这里变量变换应用于(内部缩放的)晶格和载流子温度变量。
参数 sdft_update_norm_R 允许您切换在 Version R-2020.09 中可用的更新误差计算(默认关闭)。不建议使用,特别是在使用 LogTemperature 的模拟中。参数 sdft_update_norm_R 已过时,将在未来的版本中删除。
CNormPrint 用于在每个牛顿步长中打印所有实例的所有求解方程的残差、更新误差和校正次数(需要校正的计算采样点的网格点数)。此信息可用于调整数值收敛参数。
HBCoupled 中的 Derivative 标志覆盖 Math 部分的 Derivative 标志,并确定是否在 HB 牛顿过程中包含所有导数。对于 SDFT,到 Version U-2022.12 为止,该标志被忽略。标志 ForceCloseToSolution(默认值为 false)允许您强制模拟器应用与 MDFT 相同的 Derivative 选择。
使用 RhsScale 和 UpdateScale,您可以分别缩放用作牛顿收敛标准的各个方程的残差和更新误差。这对于电子和空穴连续性方程通常是必要的,并且不同应用和器件的值也不同。
参数 ValueMin 和 ValueVariation 用于正数解变量,分别指定时域中的允许最小值和相应最大值与最小值的比率。校正次数(由 CNormPrint 给出)指示有多少网格点违反指定边界。
非线性求解器自动检测残差(rhs)和更新误差的停滞。如果其值在一定迭代次数内保持在有限范围内,则对应的牛顿步长序列会停滞。您可以通过在 Math-HarmonicBalance 部分中添加命名 NewtonConvergence 语句来修改默认行为。
例如:
cpp
Math { HB { ... }
HarmonicBalance (
NewtonConvergence "myconvergence" (
Stagnation (Iterations = 10 WithConvergence -WithDivergence)
)
)
}在 HBCoupled 语句中,您通过以下方式引用此命名语句:
cpp
NewtonConvergence = "myconvergence"假设残差在其收敛极限上方停滞,但已经相当接近它,非线性求解器仍可能认为迭代收敛(如果未通过 -WithConvergence 停用它)。如果停滞发生在远离收敛极限的地方,则非线性求解器可能触发发散(取决于 WithDivergence)。Iterations 参数确定序列必须在有限停滞范围内保持多少次。
附加说明
典型的 HB 模拟是在 System 部分中指定的混合模式模拟(参见第 3 章混合模式模拟)。
您可以添加选项 SystemTopology(Print) 到全局 Math 部分,这会生成当前电路的描述和简化分析。
该分析提取 DC 导电连接的电路节点集合。如果有多个这样的连通性集合,则物理问题可能是欠定的,无法求解。例如,如果有一个由仅一个节点组成的连通分量,并且该节点未设置为固定值,则该节点是浮动的,其电压无法确定。实际上,您应该修改您的电路并将该节点与其他部分进行导电连接。
请注意,到目前为止,只考虑电容器实例为非 DC 导电,物理器件被认为在其所有使用的电极之间是导电的。
非线性求解器
对于 MDFT 模式,您只有一个非线性求解器,即牛顿求解器。
对于 SDFT 模式,有几种非线性求解器可用,即 Newton、GaussSeidel 和 GeneralizedGaussSeidel。您通过在 HBCoupled 语句中添加选项 NonlinearSolver = "mysolver" 来选择非线性求解器,该选项引用 Math-HarmonicBalance 部分中的命名 NonlinearSolver 部分(这里是 mysolver),您可以在其中指定参数。这可能如下所示:
cpp
HarmonicBalance (
NonlinearSolver "mysolver" (
SolverMethod = GeneralizedGaussSeidel
GeneralizedGaussSeidel (FixedHarmonics = 15)
)
)牛顿非线性求解器
在牛顿求解器中,所有 HB 问题的谐波都被视为解变量。
谐波集合由音调规范确定(可能由 SolveSpectrum 缩减,用于 MDFT 模式)。
每个牛顿步迭代使用 Bitlis,它实现了广义最小残差(GMRES)方法,作为线性求解器来求解线性问题。
高斯-赛德尔非线性求解器
高斯-赛德尔求解器在每个非线性步方程中仅求解一个单谐波。通过检查完整 HB 残差并选择最大尺寸的谐波来求解,选择合适的谐波。
广义高斯-赛德尔非线性求解器
广义高斯-赛德尔(GGS)求解器在每个非线性步方程中求解多个谐波(由 FixedHarmonics 指定)。
固定谐波的数量通常小于音调频谱中的谐波数量。
在时域中,使用音调频谱的所有采样点。
与牛顿求解器相比,GGS 求解器具有更好的收敛行为。GGS 求解器使用时域近似比用 FixedHarmonics 指定的更多时间点。在 SPICE 类电路模拟器中,此过程通常称为过采样。
4.8.3 陷阱的处理
通常,陷阱支持 HB 模拟。但是,(瞬态)陷阱方程不直接与输运方程完全耦合,而是以某种程度的插入式方式解耦。
动态陷阱方程为:
ds(t)/dt = c(u(t)) - [c(u(t)) + e(u(t))]s(t) (27)其中:
- s(t) 是随时间变化的陷阱占据。
- u(t) 是随时间变化的解变量向量。
- c 和 e 分别指总捕获和发射率。
有不同的陷阱模式可用:
- Frozen(冻结)
- Harmonic(谐波)
- Decoupled(解耦)
- FastSteadyState(快速稳态)
您可以通过在 Math-HB 部分中指定来选择陷阱模式。例如:
cpp
Traps { Solve = Harmonic }各种陷阱模式在陷阱方程近似的复杂程度上有所不同。
冻结陷阱模式
这是最简单的陷阱模式,但提供了陷阱方程的最粗糙近似,并且收敛行为最差(与其他模式相比)。
可用于 MDFT 和 SDFT 模式。
陷阱占据在时域中的所有采样点保持在直流电平。
谐波陷阱模式
这是默认的陷阱模式,因为它在收敛性方面与解耦和快速稳态陷阱模式相当,并且在周转时间方面优于其他模式。
占据被认为对所有采样点是相同的,并且从真实捕获和发射率的 0 次谐波计算。因此,此陷阱模式通过简单近似考虑了陷阱方程的大信号响应。此近似在非常快和大信号频率限制内有效。
解耦陷阱模式
在此陷阱模式中,陷阱方程被(within the discretization space内)精确求解。这意味着,在此模式中,陷阱占据通常是随时间变化的。在收敛的情况下,计算输运和陷阱方程耦合系统的真实解。
求解比谐波陷阱模式更耗时,但在收敛性方面对大信号范围表现出基本相同的性质。对于许多应用,谐波近似在准确性方面可能仍然足够。
快速稳态陷阱模式
快速稳态陷阱模式为陷阱占据提供了时间无关近似,这在与大信号频率(与陷阱时间常数相比)非常大的限制内有效。因此,如果信号频率足够大,并且模拟收敛,则谐波和快速稳态陷阱模式给出相同的结果,并且对于真实随时间变化的占据都是良好的近似。
在快速稳态问题表述中,输运和陷阱方程是自洽耦合的(而不是解耦的),在这方面与谐波模式不同。陷阱占据的导数被(部分地)考虑,使该方法在计算上非常昂贵。快速稳态的模拟时间明显长于其他陷阱模式,并且表现出相似的收敛行为。
4.8.4 谐波平衡分析输出
所有频域输出数据都指用于实数量的一侧傅里叶级数表示:
u(t) = U0 + Σ[h>0] Re(U~h exp(iωh t)) = U0 + Σ[h>0] { Re(U~h) cos(ωh t) - Im(U~h) sin(ωh t) }其中对所有导致正频率 ωh = h·ω 的多索引 h 求和。
电路电流和电压
System 部分中的关键字 HBPlot 允许您绘制电路量。HBPlot 的语法与 System 部分中的 Plot 相同(参见 绘制量)。对于 SDFT 和 MDFT 模式,为电路量生成两个输出文件:HB_F 用于频域输出,HB_T 用于时域输出。
输出量的所有偏置点组合成此类输出文件,方式类似于交流分析。
如果冲突阻止将信息保存到同一 .plt 文件中,则 Sentaurus Device 关闭当前文件,自动修改文件名,插入增量器(例如 HB_F_1 和 HB_T_1),并打印警告。
抑制单个器件的输出文件,因为 HB 信息通常与电路节点相关。
要停用新输出格式,请定义:
cpp
Math { -NewHBFileNames }旧输出文件(每个收敛非线性求解的 .plt 文件)默认不绘图,您必须通过指定以下内容明确激活:
cpp
Math { HBPlotFilePerNewton }带有 CurrentPlot 的器件实例绘图文件
您可以通过使用器件实例的 CurrentPlot 部分来提取特定于器件的 HB 结果。
如果您在标准(直流和瞬态)CurrentPlot 部分的绘图条目中指定了 HBPlot,则对应量的时域(TD)和频域(FD)结果将绘制到实例 HB .plt 文件中:一个用于 TD,一个用于 FD。
cpp
CurrentPlot {
eTemperature (
HBPlot * 在实例 HB .plt 文件中生成条目
(2.166, 0.814)
Maximum(Semiconductor Coordinates)
Minimum(Region="R.ECap2")
Average(Material="GaInP")
Integrate(MaterialInterface="GaAs/Nitride")
Average(Region="R12")
Maximum(Everywhere Coordinates)
)
}FD 文件通常包含幅度和频谱,TD 文件通常包含采样点。绘制量的名称与标准器件电流文件中的名称密切相关。
除了 CurrentPlot 部分中的量外,这些文件还包含实例接触点的电压和电流。
注意: 关键字
HBPlot仅适用于基于顶点的量;否则,它被静默忽略。
器件绘图
如果 Math 部分的 HB 部分存在,则隐式执行解变量绘图。Sentaurus Device 绘制方程式 28 中 U~h 系数的幅度和相位,前缀为变量名称的 MagHB 和 PhaseHB。对于 SDFT 模式,会向名称添加后缀 _C<i> 及其分量 <i>。对于 MDFT 模式,会向名称添加对应于互调频率的后缀 _C_<i,j,k...>。
您可以通过在全局或器件 Plot 部分中使用多个 HBPlot 语句来绘制器件绘图文件中的其他时域(TD)和频域(FD)数据。因此,您可以使用以下语句将相应数据绘制到器件绘图文件中:
cpp
Plot { ...
HBPlot (Order=4 DataName[eCurrentDensity hCurrentDensity])
HBPlot (NumberOfPoints=3 DataName[eJouleHeat hJouleHeat])
HBPlot (Order=2 NumberOfPoints=100 DataName[ElectrostaticPotential])
}您可以在 DataName 列表中指定任何基于顶点的标量量。如果有多个规范,则实际绘制最大阶数(对于 FD)或点数(对于 TD)。
Order 和 NumberOfPoints 默认为零。
对于 SDFT 模式,Order 等于要绘制的谐波数。对于 MDFT 模式,它绘制直到 Order 定义的整数的互调频率结果。例如,对于 Order=3,在双音调模拟中(频率 f2 > f1),Sentaurus Device 绘制与 f1、f2、2×f1、2×f2、f1+f2、f2–f1、3×f1、3×f2、2×f1+f2、2×f2+f1、2×f1–f2、2×f2–f1 对应的数据集,只要结果频率为正。如果未定义 Order,则绘制模拟中使用的所有谐波的结果。您可以设置 Order=0 以从 TDR 文件中抑制 HB 数据集。
关键字 DataName[<list>] 定义要绘制的量的列表。如果未定义 DataName,则绘制所有相关解变量;否则,仅绘制定义的变量。
如果未定义 HBPlot 的选项,则绘制所有相关解变量的所有谐波的结果,这是默认情况。
您还可以通过在 HBPlot 中指定 NumberOfPoints 来绘制时域采样点。然后,为 DataName 中列出的所有变量绘制第一个相应采样点。如果傅里叶变换的采样点少于指定数量,则考虑最大可用采样点数。
附加器件绘图变量
如果通过使用 Plot 部分中的 HBPlot 绘制解变量,模拟器会自动提供描述实际 HB 状态的附加变量。此信息可用于分析实际 HB 状态,并且对于改进模拟网格和附加模拟参数可能有用。这里为特定变量 eDensity 描述它们,但它们类似地适用于其他解变量:
MinTDeDensity,MaxTDeDensity:周期内解变量的最小和最大 值DiffTDElectrostaticPotential:解变量的最大值减去最小值的差(不适用于密度和温度)RatioTDeDensity:商 MaxTDeDensity/MinTDeDensity(适用于密度和温度)VarHBeDensity:显着频谱宽度的度量
它提供有关描述局部解变量需要多少谐波的某些信息。如果几乎没有谐波具有显着大小,则值接近零;如果只有基波贡献频谱(即局部信号基本上是线性的),则约为 1;如果高次谐波变得相关(即表示局部失真),则超过 1。实验结果表明,值约为 H/2(其中 H 是使用的谐波数)或更大表明可能发生混叠,这通常是后续收敛问题的根本原因。
单个 HBCoupled 语句的输出
通过使用 HBPlotFilePerNewton,每个收敛的 HBCoupled 语句将其结果绘制到单独的文件中。
时域和频域中的器件结果(接触点电流和电压、温度和热量分量)分别绘制到单独的文件中。
时域的文件名包含组件 Tdom;频域的文件名包含组件 Hdom。
电路电流和电压的绘制如前所述,涉及 System 部分的 HBPlot 语句,但现在每个收敛的 HBCoupled 语句生成单独的文件。
应用说明
请注意:
- 收敛:通常,对于单音调 HB 模拟,非线性收敛随着谐波数 H 的增加而改善。
- 线性求解器:受益于内存需求和模拟时间,对于大多数模拟,您可以将迭代线性求解器 GMRES 用于大多数模拟。只有对于非常小的问题(在网格大小和谐波数方面),直接求解器方法才足够。
4.9 参考文献
<a id="r1">[1]</a> 有关 Perl 正则表达式语法的信息,请访问 https://www.boost.org/doc/libs/1_72_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html。
<a id="r2">[2]</a> R. J. G. Goossens 等人,"An Automatic Biasing Scheme for Tracing Arbitrarily Shaped I-V Curves",IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems,第 13 卷,第 3 期,第 310-317 页,1994。
<a id="r3">[3]</a> K. S. Kundert, J. K. White 和 A. Sangiovanni-Vincentelli,Steady-State Methods for Simulating Analog and Microwave Circuits,波士顿:Kluwer Academic Publishers,1990。
<a id="r4">[4]</a> Y. Takahashi, K. Kunihiro 和 Y. Ohno,"Two-Dimensional Cyclic Bias Device Simulator and Its Application to GaAs HJFET Pulse Pattern Effect Analysis",IEICE Transactions on Electronics,第 E82-C 卷,第 6 期,第 917-923 页,1999。
4.10 仿真结果
本章描述了 Sentaurus Device 的输出,其中包含仿真结果。
本章仅描述 Sentaurus Device 提供的最重要输出。还有更多特定的输出文件,它们在用户指南的其他部分中结合上下文进行描述。
4.10.1 电流文件
Sentaurus Device 提供多种形式的输出。最重要的是,电流文件包含在数值实验期间获得的端特性。绘图文件允许您可视化器件内部量,从而提供真实实验无法获得的信息。其他输出(如日志文件)允许您调查模拟过程本身,是理解和解决模拟本身问题的重要工具。
何时写入电流文件
默认情况下,在 Plugin、Quasistationary 或 Transient 命令中的每次迭代后输出电流。此行为可以通过这些命令体内的 CurrentPlot 语句进行修改。Solve 部分中的 CurrentPlot 语句完全控制器件电流和电路电流的绘图。如果存在 CurrentPlot 语句,它精确确定哪些点被写入电流文件。Sentaurus Device 仍然可以计算中间点的值,但不会将它们写入文件。
注意: 不要将
Solve部分中的CurrentPlot语句与 在电流文件中跟踪附加数据 中描述的CurrentPlot部分混淆。