Skip to content

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 语句,或在 PluginQuasiStationary 中使用。

注意: 如果 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 语句。

参数 LogTemperatureLogDensity 完全类似,但这里变量变换应用于(内部缩放的)晶格和载流子温度变量。

参数 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 选择。

使用 RhsScaleUpdateScale,您可以分别缩放用作牛顿收敛标准的各个方程的残差和更新误差。这对于电子和空穴连续性方程通常是必要的,并且不同应用和器件的值也不同。

参数 ValueMinValueVariation 用于正数解变量,分别指定时域中的允许最小值和相应最大值与最小值的比率。校正次数(由 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 模式,有几种非线性求解器可用,即 NewtonGaussSeidelGeneralizedGaussSeidel。您通过在 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_1HB_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 系数的幅度和相位,前缀为变量名称的 MagHBPhaseHB。对于 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)。

OrderNumberOfPoints 默认为零。

对于 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 提供多种形式的输出。最重要的是,电流文件包含在数值实验期间获得的端特性。绘图文件允许您可视化器件内部量,从而提供真实实验无法获得的信息。其他输出(如日志文件)允许您调查模拟过程本身,是理解和解决模拟本身问题的重要工具。

何时写入电流文件

默认情况下,在 PluginQuasistationaryTransient 命令中的每次迭代后输出电流。此行为可以通过这些命令体内的 CurrentPlot 语句进行修改。Solve 部分中的 CurrentPlot 语句完全控制器件电流和电路电流的绘图。如果存在 CurrentPlot 语句,它精确确定哪些点被写入电流文件。Sentaurus Device 仍然可以计算中间点的值,但不会将它们写入文件。

注意: 不要将 Solve 部分中的 CurrentPlot 语句与 在电流文件中跟踪附加数据 中描述的 CurrentPlot 部分混淆。

基于 Sentaurus TCAD 官方文档构建

代码块