Skip to content

Ch4:数值实验

✅ 完成 来源:sdevice_ug.pdf 第 4 章(W-2024.09) 说明:本页按原章小节顺序进行逐段翻译,并在对应位置插入原文图示。

本章目录

4.1 指定电学边界条件

电学边界条件在 Electrode 部分的 Solve 部分中指定。例如:

cpp
Solve {
    Electrode {
        { Name = "drain"   Voltage = 0.0 }
        { Name = "source"  Voltage = 0.0 }
        { Name = "gate"    Voltage = 0.0 }
    }
}

在结构文件(TDR 文件)中,每个接触点都有一个名称。在 Electrode 部分中,可以使用以下方式指定电学边界条件:

  • Name 关键字:直接指定结构文件中接触点的确切名称。
  • 正则表达式:使用正则表达式模式匹配结构文件中的多个接触点。

使用正则表达式的好处是,当结构文件发生变化(如网格细化)时,不需要修改命令文件。

正则表达式必须遵循 boost::regex 库定义的规则,并激活 Perl 正则表达式语法 [1]。

在模拟之前,Sentaurus Device 会将 Electrode 部分中定义的正则表达式与结构文件中的接触点进行匹配,作为预处理步骤。匹配的结构接触点列表被展开为有效接触点,模拟按常规继续。当结构接触点被多个正则表达式匹配时,Electrode 部分中最后定义的正则表达式优先。当接触点同时以标准方式(使用 Name 关键字)指定并被正则表达式匹配时,Electrode 部分中最后定义的正则表达式优先。

可以通过提供电压-时间对列表来指定随时间变化的边界条件。以下示例指定源极电压在 0 s 时为 5 V,线性增加至 1 µs 时的 10 V:

cpp
{ name = "source" voltage = (5 at 0, 10 at 1e-6) }

此外,可以指定一个独立的静态电压。例如:

cpp
{ name = "source" voltage = 0 voltage = (5 at 0, 10 at 1e-6) }

这种组合在初始准静态命令将源极从 0 V 斜升至 5 V 之后,在后续瞬态分析中源极继续增加至 10 V 时非常有用。

ChargeCurrent 参数决定边界条件类型以及电极的值。默认情况下,电极具有电压边界条件类型。Current 关键字将边界更改为电流类型,Charge 关键字将其更改为电荷类型。注意,对于电流边界条件,仍然必须指定 Voltage;此值在模拟开始时用作初始猜测,但对最终结果没有影响。ChargeCurrent 以与 Voltage 相同的方式支持随时间变化的规范。

4.1.1 模拟过程中改变边界条件类型

Solve 部分中的 Set 语句可以按以下方式更改电极的边界条件类型:

  • 要将电流接触点 <name> 的边界条件更改为电压类型,请使用:

    cpp
    Set(<name> mode voltage)
  • 要将电压接触点 <name> 的边界条件更改为电流类型或电荷类型,请使用以下之一:

    cpp
    Set(<name> mode current)
    Set(<name> mode charge)
  • 要将电荷接触点 <name> 的边界条件更改为电压类型,请使用:

    cpp
    Set(<name> mode voltage)

注意: 不允许直接将电流接触点 <name> 的边界条件更改为电荷类型,也不允许直接将电荷接触点 <name> 更改为电流类型。

以下示例将电压接触点 drain 的边界条件从电压类型更改为电流类型:

cpp
Solve { ...
   Set ("drain" mode current)
   ...
}

如果 drain 的边界条件在执行 Set 语句之前已经是电流类型,则不会发生任何变化。

Set 语句不会更改电极上的电压和电流值。新边界条件类型的边界值来自于 Set 语句出现时先前获得的偏置点解。

或者,可以使用 Quasistationary 语句(参见 准静态扫描)或 Transient 语句(参见 瞬态扫描)更改接触点的边界条件类型。这通常更方便。但是,必须为边界条件指定目标值;而 Set 语句允许将接触点的电流、电荷或电压固定为模拟过程中达到的值,即使该值事先不知道。

注意: 结构文件(TDR 文件)中未通过 Electrode 子部分指定的接触点将被忽略。结构文件(TDR 文件)中存在的接触点仅在通过 Electrode 子部分指定时才会被用作电学接触点进行模拟,无论是明确指定接触点名称还是通过正则表达式匹配接触点名称。

4.1.2 混合模式电学边界条件

在混合模式模拟中,指定电学边界条件的另一种可能性是将电极连接到电路(参见 电气和热网络列表)。

Solve 部分中的 Set 语句可用于确定电路节点上的边界条件(参见 节点初始化)。Set 语句接受带有可选值的节点列表作为参数。如果给定了值,则该节点被设置为该值。如果没有给出值,则该节点被设置为其当前值。节点被设置直到 Sentaurus Device 运行结束或下一个带有指定节点的 Unset 语句。

Unset 语句接受节点列表并释放它们(即节点处于浮动状态)。在实践中,Set 语句在 Solve 部分中使用,以逐个电路区域建立复杂系统。

SPICE 电压和电流源使用向量参数来定义各种源类型的属性。以下示例定义了一个电压源,其偏移 vo = sine[0] = 0.5 V,幅度 va = sine[1] = 1 V,频率 freq = sine[2] = 10 Hz,延迟 td = sine[3] = 0 s,阻尼因子 theta = sine[4] = 0 s⁻¹,相位偏移 phi = sine[5] = 0 rad

cpp
System {
   Vsource_pset v0 (n1 n0) { sine = (0.5 1 10 0 0 0) }
}

这些向量的分量可以在 Solve 部分中设置。以下示例将正弦电压源 v0 的偏移设置为 0.75 V:

cpp
Solve { ...
   Set (v0."sine[0]" = 0.75) ...
}

4.2 指定热学边界条件

Thermode 部分定义器件的热接触点。Thermode 部分的定义方式与 Electrode 部分相同。默认情况下,使用 Temperature 指定的温度是热接触点的温度。此外,如果在 Thermode 部分中指定了 Power(单位为 W/cm²),则施加热通量边界条件,指定的温度仅用作初始猜测。例如:

cpp
Thermode {
   { Name = "top"    Temperature = 350 }
   { Name = "bottom" Temperature = 300 Power = 1e6 }
}

Electrode 部分中的热接触点也可以通过用户定义的正则表达式(而不是明确定义的名称)来指定。在这种情况下,结构文件(TDR 文件)中所有匹配的热接触点都将获得匹配模式的熱接觸點所定义的属性。匹配过程与电学接触点的匹配过程类似(参见 指定电学边界条件)。

随时间变化的热边界条件使用与电学边界条件相同的语法指定(参见 指定电学边界条件)。

表 368(第 1798 页)列出了 Thermode 部分可用的关键字。物理选项在 热边界条件 中讨论。在混合模式器件模拟中,指定热边界条件的另一种可能性是将热接触点连接到热电路(参见 电气和热网络列表)。

注意:

  • 结构文件(TDR 文件)中未通过 Thermode 子部分指定的接触点将被忽略。结构文件(TDR 文件)中存在的接触点仅在通过 Thermode 子部分指定时才会被用作模拟中的热接触点,无论是明确指定接触点名称还是通过正则表达式匹配接触点名称。
  • 只有具有热阻性边界条件的热接触点才能连接到电路。具有热通量边界条件的热接触点不可用于电路连接。

表 18 各种热接触点声明

命令语句描述
{ Name = "surface" Temperature=310 SurfaceResistance = 0.1 }这是具有 0.1 cm²K/W 热阻的热阻性边界条件,在热接触点 'surface' 指定。
{ Name = "body" Temperature=300 Power = 1e6 }热通量边界条件。
{ Name = "bulk" Temperature=300 Power = 1e5 Power = (1e5 at 0, 1e6 at 1e-4, 1e3 at 2e-4) }具有随时间变化热通量边界条件的热接触点。

4.3 断点判据:有条件地停止模拟

如果某些值超过给定限制,Sentaurus Device 会提前终止模拟。此功能在非等温模拟中用于在硅开始熔化时停止计算,或者在接触点电流超过预定义值时停止击穿模拟。

以下值可以在模拟过程中被监控:

  • 接触点电压(内部电压)
  • 接触点电流
  • 晶格温度
  • 电流密度
  • 电场(场的绝对值)
  • 器件功率

可以指定下限和上限。同样,可以对绝对值指定边界。断点判据可以具有全局或扫描规范。如果断点在扫描中,可以在一次模拟中有多个断点判据。断点可以在单个器件中和混合模式中指定。

如果您定义了 kinetic Monte Carlo 与时间相关介质击穿(TDDB)模拟,则可以监控其他值,包括:

  • TDDBCurrent
  • TDDBCurrentRatio
  • TDDBTrapNumber

有关详细信息,请参见 TDDB 时间步管理

4.3.1 全局接触点断点判据

接触点电压和接触点电流的限制可以在全局 Math 部分中指定:

cpp
Math {
   BreakCriteria {
       Voltage (Contact = "drain" absval = 10)
       Current (Contact = "source" minval = -0.001 maxval = 0.002)
   }
   ...
}

在此示例中,如果漏极的内部电压绝对值超过 10 V,则满足停止判据。此外,如果源极电流小于 –0.001 A/µm 或大于 0.002 A/µm,Sentaurus Device 将终止模拟。

注意: 单位取决于器件尺寸:1D 器件为 A/µm²,2D 器件为 A/µm,3D 器件为 A。

4.3.2 全局器件断点判据

器件功率等于 P = Σ Ik · Vk,其中:

  • k 是器件接触点的索引。
  • Ik 是电流。
  • Vk 是该接触点的内部或外部电压。

器件功率判据的示例:

cpp
Math {
   BreakCriteria { DevicePower( Absval=6e-5) }
   BreakCriteria { OuterDevicePower( Absval=6e-5) }
   BreakCriteria { InnerDevicePower( Absval=2e-6) }
   ...
}

关键字 DevicePowerOuterDevicePower 是同义词。在此示例中,如果外部功率绝对值超过 6×10⁻⁵ W/µm 或内部功率超过 2×10⁻⁶ W/µm,则满足停止判据。

晶格温度、电流密度和电场的断点判据可以按区域和材料指定。如果没有给出区域或材料,则停止判据适用于所有区域。

示例规范:

cpp
Math (material = "Silicon") {
   BreakCriteria {
       LatticeTemperature (maxval = 1000)
       CurrentDensity (maxval = 1e7)
   }
   ...
}
Math (region = "Region.1") {
   BreakCriteria {
       ElectricField (maxval = 1e6)
   }
   ...
}

如果硅中的晶格温度超过 1000 K,硅中的电流密度超过 10⁷ A/cm²,或区域 Region.1 中的电场超过 10⁶ V/cm,Sentaurus Device 将终止模拟。

晶格温度的上限也可以在 Physics 部分中指定。例如:

cpp
Physics {
   LatticeTemperatureLimit = 1693 # 硅的熔点
   ...
}

注意: 晶格温度的断点判据仅对非等温模拟有效,即关键字 Temperature 必须出现在相应的 Solve 部分中。

4.3.3 扫描专用断点判据

扫描专用断点判据可以作为 QuasistationaryTransientContinuation 的选项来指定:

cpp
solve {
   Quasistationary(
      BreakCriteria {
         Current(Contact = "drain" AbsVal = 1e-8)
         DevicePower(Absval = 1e-5)
      }
      Goal { Name="drain" Voltage = 5 }
   )
   { coupled { poisson electron hole } }

   Quasistationary(
      BreakCriteria { CurrentDensity( AbsVal = 0.1) }
      Goal { Name = "gate" Voltage = 2 }
   )
   { coupled { poisson electron hole } }
   ...
}

此示例包含多个断点判据。一旦漏极电流或器件功率超过限制,Sentaurus Device 将停止第一个 Quasistationary 计算并切换到第二个 Quasistationary。一旦电流密度超过其限制,Sentaurus Device 将退出此部分并切换到下一部分。

4.3.4 混合模式断点判据

所有前面提到的断点判据也可在混合模式中使用。在这种情况下,BreakCriteria 部分必须包含电路器件名称(电路节点上的电压判据是例外)。混合模式中断点判据条件的示例:

cpp
Quasistationary(
   BreakCriteria {
      # 混合模式变量
      Voltage( Node = a MaxVal = 10)
      Current( DevName = resistor Node = b MinVal = -1e-5)

      # 器件变量
      Voltage(DevName = diode Contact = "anode" MaxVal=10)
      LatticeTemperature(DevName = mos MaxVal=1000)
      ElectricField(DevName = mos MaxVal=1e6)
      DevicePower(DevName = resistor AbsVal=1e-5)
   }
   ...
)

4.4 准静态扫描

Quasistationary 命令通过修改边界条件(如接触点电压)或参数值,将器件从一个解扫描到另一个解。模拟通过迭代修改边界条件或参数值,以及重新求解器件来继续(参见图 11)。每次迭代时重新求解器件的命令随 Quasistationary 命令给出。

图片:../../../public/images/sdevice/sdevice_fig11.png

4.4.1 边界条件扫描

要扫描边界条件(如电极上的电压),Quasistationary 命令的格式为:

cpp
Quasistationary ( <parameter-list> ) { <solve-command> }

&lt;parameter-list&gt; 的可能性在表 358(第 1790 页)中总结。&lt;solve-command&gt;CoupledPluginACCoupledHBCoupled,或者是另一个 Quasistationary

例如,将器件的漏极电压扫描至 5 V:

cpp
Quasistationary( Goal {Voltage=5 Name=Drain } ){
   Coupled { Poisson Electron Hole }
}

在内部,Quasistationary 命令通过将变量 t 从 0.0 扫描到 1.0 来工作。接触点上的电压根据公式 V = V₀ + t·(V₁ – V₀) 变化,其中 V₀ 是初始电压,V₁Goal 语句中指定的最终电压。步进控制用 t 变量表示。控制不是通过对接触点值进行的,因为可以同时扫描多个接触点。

步进控制参数包括 &lt;parameter-list&gt; 中的 MaxStepMinStepInitialStepIncrementDecrement

  • MaxStepMinStep 限制步长。
  • InitialStep 控制第一次扫描的步长。步长会根据内部求解命令的成功率自动增加或减少。
  • 增长率由执行的牛顿迭代次数和因子 Increment 控制。
  • 当内部求解失败时,步长会按因子 Decrement 减小。当步长变得小于 MinStep 时,扫描过程终止。
  • 如果激活了动态非局部路径带间隧穿模型,则可以包含 NonlocalPath 部分(参见 处理导数)。

每个接触点有一种类型,可以是电压、电流或电荷。每个 Quasistationary 命令有一个目标,也可以是电压、电流或电荷。如果目标和接触点类型不匹配,Sentaurus Device 会更改接触点类型以匹配目标。但是,Sentaurus Device 无法将电荷类型的接触点更改为电流类型,也无法将电流类型的接触点更改为电荷类型。

每个 Quasistationary 命令的 Goal 部分中的接触点可以是电流或电荷,分别具有 A/µm³⁻ᵈ 或 Coulomb 的单位,其中 d 是器件维度。例如,接触点上给定电荷的目标是:

cpp
Goal {Name="floating_gate" Charge = 1e-13}

接触点上给定电流的目标是:

cpp
Goal {Name="Drain" Current = 1e-5}

如果在命令文件的 PhysicsElectrode 部分中指定了 AreaFactor,Sentaurus Device 会在目标命令中通过 &lt;charge X AreaFactor&gt; 重置电荷,通过 &lt;current X AreaFactor&gt; 重置电流。

例如,以下语句将所有名为 d1 ... d9 的接触点扫描至 5 V:

cpp
Quasistationary( Goal {Voltage=5 Name=Regexp("d[1-9]") } ){
   Coupled { Poisson Electron Hole }
}

有关匹配过程的详细信息,请参见 指定电学边界条件

初始值(对于 t = 0)是 Quasistationary 命令开始之前为接触点计算的电流或电压。接触点在 Quasistationary 命令结束后保持其边界条件类型。要显式更改接触点的边界条件类型,请使用 Set 命令(参见 模拟过程中改变边界条件类型)。

如果在 Quasistationary 之前立即执行的求解语句也已求解了所有要求解的方程,Sentaurus Device 会省略点 t = 0,因为解已经已知。否则,此点会在 Quasistationary 开始时计算。您可以使用 &lt;parameter-list&gt; 中的 DoZero-DoZero 明确强制或阻止计算此点。

4.4.2 掺杂井中准费米势的扫描

指定掺杂井中的电子和空穴准费米势也可以在 Quasistationary 语句中扫描。这是一种快速而稳健的方式来耗尽掺杂井,而无需求解要耗尽的载流子的连续性方程。其主要应用是 CMOS 图像传感器模拟和电荷耦合器件模拟。

要扫描准费米势,请在 Quasistationary 命令的 Goal 部分中指定关键字 WellContactNameDopingWell,后跟 eQuasiFermihQuasiFermi

cpp
Goal {
   [WellContactName= <contact_name> | DopingWell(<point_coordinates>)]
   [eQuasiFermi= <value> | hQuasiFermi= <value>]
}

DopingWell 规范更通用,可用于有或无接触点的半导体井(埋入式井)。在这种情况下,必须给出井中一点的坐标来选择井(参见前面的代码)。

当准费米势被扫描的半导体井连接到接触点时,可以使用 WellContactName 规范。现在,必须指定与该井关联的接触点来选择该井(参见前面的代码)。

指定井中准费米势扫描的 Goal 起始值取自上一个 Quasistationary 命令结束时的准费米势的井平均值。

此起始值可以使用 Set 语句更改:

cpp
Solve {
   Set(DopingWell(0.5 0.5) eQuasiFermi=5.0)
   Quasistationary(... Goal {DopingWell(0.5 0.5) eQuasiFermi=10.0})
   ) {Coupled {poisson hole}}
}

Set 语句具有与上述 Goal 语句相同的选项和语法。

此外,Sentaurus Device 支持多井扫描,由关键字 DopingWells 及其括号中的选项激活。语法是:

cpp
Quasistationary(...
   Goal {
      DopingWells([Region=<string> | Material=<string> | Semiconductor])
      eQuasiFermi=<value>
   }
) {Coupled {poisson hole}}

从此语法可以看出,可以扫描区域中的井、具有相同材料的井或器件中的所有半导体井,以达到电子或空穴准费米势的指定值。如果井与区域有一个或多个顶点重合,则认为该井在该区域中。即使井不完全在该区域中,它也属于该区域。

对于多井扫描,Set 命令用于在 Quasistationary 扫描之前更改一组井中的准费米势:

cpp
Set(DopingWells([Region=<string> | Material=<string> | Semiconductor])
    eQuasiFermi=5.0)

在混合模式模拟的情况下,必须在 DopingWells 前面加上器件实例名称和点(.),类似于单井语法。

您可以按如下方式在用户定义的窗口中设置准费米势:

cpp
Set (DopingWells [(x y z) (x1 y1 z1) (x2 y2 z2)] eQuasiFermi=5.0)

向量 (x y z) 用于定位要修改的掺杂井。另外两个向量 (x1 y1 z1)(x2 y2 z2) 是用户定义窗口的角点。只有选定的掺杂区域和用户定义窗口之间的重叠区域将具有命令文件中定义的准费米值。

此外,您可以使用区域名称、材料名称或材料组名称来定位掺杂井,而不是使用向量 (x y z)。例如:

cpp
Set (DopingWells [<region> | <material> | <Semiconductor> (x1 y1 z1)
     (x2 y2 z2)] eQuasiFermi=5.0)

使用此语法,选定区域、材料或半导体与用户定义窗口之间的重叠区域将具有命令文件中定义的准费米值。

可以同时扫描电子和空穴准费米势,方法是在仅求解泊松方程时使用多个 Goal 语句。

当已为要扫描准费米势的载流子求解了连续性方程时,该井中所有顶点的准费米势初始值从定义该井时指定的点的载流子密度计算。对于多井扫描,相同的方案逐井适用。

从多个掺杂井中选择顶点

Sentaurus Device 支持根据一组标准从多个掺杂井中选择顶点。选定的顶点可用于在设置和/或扫描其准费米势时使用。此功能的语法是:

cpp
DopingWells(
   SelectFrom(
         Point=(<coordinates>) |
         Region=(<strings>) |
         Material=(<strings>) |
         Semiconductor
   )LimitTo(
         Region=(<strings>) |
         Material=(<strings>) |
         Window <string> (corner1=<vector> corner2=<vector>) |
         Dataset <string> (Name=<DataName> ValueRange=(MinValue MaxVale))
   )
)

该语法由两个子语句组成:SelectFrom 指定满足子语句中至少一个标准的一组来自掺杂井的顶点;LimitTo 从所有由 SelectFrom 子语句选择的顶点中指定满足 LimitTo 子语句中所有标准的一组顶点。在这两个子语句中,可以指定多个选择标准,如下所示:

  • Point 是一个坐标向量。它选择与该顶点共享相同掺杂井的所有顶点,该顶点是设备中最接近指定坐标的顶点。可以在括号内列出多个坐标,选定的顶点是联合。例如:

    cpp
    Point=((0.1 0.2 0.3) (-0.1 -0.2 -0.3))

    选择包含最接近坐标 (0.1 0.2 0.3) 的顶点或最接近坐标 (-0.1 -0.2 -0.3) 的顶点所在的掺杂井中的所有顶点。它只能用于 SelectFrom 子语句。

  • Region 是一个字符串向量,表示区域名称。它选择至少位于所列区域之一中的所有顶点。例如:

    cpp
    Region=("region_1" "region_2" "region_3")

    选择位于 "region_1"、"region_2" 或 "region_3" 中的所有顶点。它可以用于 SelectFromLimitTo 子语句。

  • Material 是一个字符串向量,表示材料名称。它选择附加到所列材料之一的所有顶点。例如:

    cpp
    Material=("silicon_1" "silicon_2" "SiC")

    选择在 "silicon_1"、"silicon_2" 或 "SiC" 材料中的所有顶点。它可以用于 SelectFromLimitTo 子语句。

  • SemiconductorSelectFrom 子语句中使用的属性。指定后,它选择附加到半导体材料的所有顶点。

  • Window 是一个语句,使用空间中的两个角坐标定义矩形或长方体形状。它选择定义矩形或长方体内的所有顶点。它只能用于 LimitTo 子语句。如果每个 Window 语句有其唯一的标识符,则可以在 LimitTo 子语句中指定多个 Window 语句。如果几个具有相同标识符的 Window 语句出现在 LimitTo 子语句中,则最后一个覆盖所有前面的 Window 语句。空标识符被认为是有效的标识符。例如:

    cpp
    LimitTo (
        Window "win1" ( corner1=(0 0 0) corner2=(1 1 1) )
        Window "win2" ( corner1=(0.1 0.1 0.1) corner2=(1.1 1.1 1.1) )
    )

    选择 "win1" 和 "win2" 重叠区域中的所有顶点。

  • Dataset 是一个语句,基于 NameValueRange 选择一组顶点。Name 应该是 Sentaurus Device 中的有效 DataName,并且必须在顶点上定义。ValueRange 用于指定 DataName 的最小值和最大值。如果顶点的 Name 已定义且其值在 ValueRange 内,则选择该顶点。与 Window 语句一样,Dataset 语句可以有一个唯一标识符,如果它们具有不同的标识符,则可以在 LimitTo 子语句中使用多个 Dataset 语句。例如:

    cpp
    Dataset "ds1" (Name="DopingConcentration"
                   ValueRange=(-1.0e20 -1.0e10))
    Dataset "ds2" (Name="BoronMinusConcentration"
                   ValueRange=(1.0e15 1.0e17))

    选择具有 p 型掺杂浓度在 1.0e10 cm⁻³ 和 1.0e20 cm⁻³ 之间且硼浓度在 1.0e15 cm⁻³ 和 1.0e17 cm⁻³ 之间的所有顶点。

4.4.3 物理参数值的扫描

Quasistationary 命令允许扫描 Sentaurus Device 参数文件中的参数。

Goal 语句的形式为:

cpp
Goal {
   [ Device=<device> ]
   [ Material=<material> | MaterialInterface=<interface> |
     Region=<region> | RegionInterface=<interface> ]
   Model=<model> Parameter=<parameter> Value=<value>
}

指定设备和位置(材料、材料界面、区域或区域界面)是可选的。但是,必须始终指定模型名称和参数名称。

可以通过使用以下命令获取模型名称和参数名称列表:

bash
sdevice --parameter-names

此参数列表对应于 Sentaurus Device 参数文件中的参数,可以通过使用 sdevice -P 获取(参见 生成参数文件副本)。

以下命令生成可以在命令文件中扫描的模型名称和参数名称列表:

bash
sdevice --parameter-names <command_file>

Sentaurus Device 读取命令文件中的器件并报告所有可以扫描的参数名称。但是,不执行模拟。表 19 包含可以在命令文件中扫描的命令文件参数的模型。

表 19 命令文件参数

模型名称参数
DeviceTemperatureTemperature
GalvanicTransportMagneticFieldx, MagneticFieldy, MagneticFieldz
OpticsWavelength, Intensity, Theta, Phi, Polarization
PEPolarizationactivation
RadiationBeamDose, DoseRate, DoseTSigma, DoseTime_end, DoseTime_start
StrainStrainXX, StrainXY, StrainXZ, StrainYY, StrainYZ, StrainZZ
StressStressXX, StressXY, StressXZ, StressYY, StressYZ, StressZZ
Traps(<index>)Conc, EnergyMid, EnergySig, eGfactor, eJfactor, eXsection, hGfactor, hJfactor, hXsection

注意:

  • DeviceTemperature 模型只能跨器件的所有区域均匀扫描。如果在扫描此模型时指定了材料、区域、材料界面或区域界面,Sentaurus Device 会发出错误消息并退出。
  • 某些模型(如 Traps)必须指定索引。例如:Model="Traps(1)"

索引表示应扫描其参数的精确模型。通常,Sentaurus Device 为每个光学束、陷阱等分配一个从零开始的递增索引。但是,如果存在材料和区域规范,情况会变得更复杂。建议使用以下命令确认索引的值:

bash
sdevice --parameter-names <command file>

可以扫描与摩尔分数相关的参数。例如,如果参数 p 与摩尔分数相关,则表 20 中列出的参数名称可以出现在 Goal 语句中。

表 20 作为准静态目标的与摩尔分数相关的参数

Goal 语句中的参数描述
Parameter=p非摩尔分数相关材料中的参数 p。
Parameter="p(0)"p 在 Xmax(0)、Xmax(1)、… 处的插值。
Parameter="p(1)"
...
Parameter="B(p(1))"p 在区间 [Xmax(0), Xmax(1)]、[Xmax(1), Xmax(2)]、… 中的二次和三次插值系数。
Parameter="C(p(1))"
Parameter="B(p(2))"
Parameter="C(p(2))"
...

与摩尔分数相关的参数可以在所有材料中扫描。在与摩尔分数相关的材料中,必须扫描插值值 p(...) 和插值系数 B(p(...))C(p(...))。在非摩尔分数相关材料中,只能扫描参数 p

如果找不到参数,Sentaurus Device 会发出警告,并忽略相应的目标语句。

PMI 模型中的参数也可以扫描。

要扫描光学参数,请参见 参数扫描

4.4.4 混合模式中的准静态

Quasistationary 语句在混合模式中被扩展,以包括节点和电路模型参数的目标。表 352(第 1784 页)显示了这些目标的语法。

目标通常用于已使用 System 部分中的 SetInitialize 语句固定的节点。语句 Goal{Node=&lt;string&gt; Voltage=&lt;float&gt;} 为指定节点分配新的目标电压。例如,节点 a 被设置为 1 V 并扫描至 10 V:

cpp
System {
   Resistor_pset r1(a 0){resistance = 1}
   Set(a=1)
}
Solve {
   Circuit
   Quasistationary( Goal{Node=a Voltage=10} ){ Circuit }
}

关于电路模型参数的目标可用于更改系统的配置。语句 Goal{Parameter=&lt;i-name&gt;.&lt;p-name&gt; value=&lt;float&gt;} 为器件实例 i-name 的参数 p-name 分配新的目标值。任何电路模型参数都可以更改。

例如,电阻 r1 从 1 Ω 扫描至 0.1 Ω,正弦电压源的偏移扫描至 1.5 V:

cpp
System {
   Resistor_pset r1(a 0){resistance = 1}
   Vsource_pset v0 (n1 n0) { sine = (0.5 1 10 0 0 0) }
   Set(a=1)
}
Solve {
   Circuit
   Quasistationary(
      Goal { Parameter = r1."resistance" Value = 0.1 }
      Goal { Parameter = v0."sine[0]"    Value = 1.5 })
      { Circuit }
}

注意: 当节点用于目标时,它在准静态模拟期间被设置。在扫描结束时,节点恢复其先前的设置状态,即如果之前未设置,则之后也不会设置。这可能导致 Quasistationary 语句之后的 Solve 语句出现意外行为。因此,最好使用 Set 命令在 Quasistationary 语句中设置节点。

4.4.5 准静态过程中的保存和绘图

可以通过使用 Plot 命令在 Quasistationary 扫描过程中保存和绘图数据。Plot 放置在其他 Quasistationary 参数中。例如:

cpp
Quasistationary(
   Goal {Voltage=5 Name=Drain}
   Plot {Range = (0 1) Intervals=5})
   {Coupled{ Poisson Electron Hole }}

在此示例中,在五个间隔保存六个绘图文件:t = 0, 0.2, 0.4, 0.6, 0.8, 1.0

如果在上次保存之后经过特定步长时,也可以使用 Plot 命令中的关键字 MinSpacing 来保存和绘图数据。例如:

cpp
Quasistationary(
   Goal {Voltage=5 Name=Drain}
   Plot {Range = (0 1) MinSpacing=0.2}
)
{Coupled{ Poisson Electron Hole }}

在此示例中,不会向模拟添加额外的间隔。在范围 (0 1) 内,比上次保存点大 0.2 的那些扫描点将被绘图和保存。定义 MinSpacing 后,其他绘图命令将被忽略。

另一种绘图方式是在 Quasistationary 体内使用 Plot,而不是在 Quasistationary 参数内(参见 何时绘图)。Plot 在求解方程之后添加,例如:

cpp
Quasistationary( Goal {Voltage=5 Name=Drain } ){
   Coupled { Poisson Electron Hole }
   Plot ( Time= ( 0.2; 0.4; 0.6; 0.8; 1.0 ) NoOverwrite )
}

注意: 当指定保存点与时间步长之间的距离小于数值精度时,间隔可能被 Plot 语句省略,不写入文件。在全局 Math 部分中使用 SaveWithinMinStep 关键字来保存所有指定点。

4.4.6 外推

Quasistationary 命令可以使用外推来根据先前解的值预测下一个解。外推可以关闭(默认)或在 Math 部分全局开启:

cpp
Math { -Extrapolate }           # 默认

或者:

cpp
Math { Extrapolate }

或者,仅针对特定的 Quasistationary 命令关闭或开启:

cpp
Quasistationary (
   Goal { ... }
   -Extrapolate
) { Coupled { Poisson Electron Hole } }

Sentaurus Device 可以在以下情况下使用外推:在 Quasistationary 命令内部和 Quasistationary 命令之间。

在 Quasistationary 命令内部

给定步长的初始猜测是从先前步长的解中外推获得的(如果存在)。

在 Quasistationary 命令之间

外推信息在 Quasistationary 命令之间保留,并且由 SaveLoad 命令自动保存和加载。如果满足以下条件,后续 Quasistationary 命令使用此外推信息:

  1. 先前和当前的 Quasistationary 命令具有相同数量的目标。

  2. 先前和当前的 Quasistationary 命令扫描相同的量。

  3. 先前和当前的 Quasistationary 命令是连续的,即对于所有目标,当前初始值等于先前命令中的目标值。

  4. 在当前 Quasistationary 命令中,多个目标与先前 Quasistationary 命令以相同的速率扫描。例如,假设所有接触点电压具有零初始值。则以下两个 Quasistationary 命令满足此条件:

    cpp
    Quasistationary (
       Goal { Name = "gate"   Voltage = 1 }
       Goal { Name = "drain" Voltage = 2 }
    ) { Coupled { Poisson Electron Hole } }
    
    Quasistationary (
       Goal { Name = "gate"   Voltage = 3 }
       Goal { Name = "drain" Voltage = 6 }
    ) { Coupled { Poisson Electron Hole } }

    另一方面,以下两个 Quasistationary 命令违反此条件:

    cpp
    Quasistationary (
       Goal { Name = "gate"   Voltage = 1 }
       Goal { Name = "drain" Voltage = 2 }
    ) { Coupled { Poisson Electron Hole } }
    
    Quasistationary (
       Goal { Name = "gate"   Voltage = 3 }
       Goal { Name = "drain" Voltage = 10 }
    ) { Coupled { Poisson Electron Hole } }

    在第二个 Quasistationary 命令中,漏极电压以比栅极电压更高的速率扫描。因此,无法使用先前 Quasistationary 命令的外推信息。

  5. 解决方案变量的值在两个 Quasistationary 命令之间没有变化,例如通过 Load 命令。

如果可以成功使用先前 Quasistationary 命令的外推信息,日志文件中会出现以下消息:

Reusing extrapolation from a previous quasistationary

表 21 控制 Quasistationary 命令之间外推信息处理的选项。

表 21 外推选项

选项描述
ReadExtrapolation尝试使用先前命令的外推信息(如果可用且兼容)。这是默认设置。
-ReadExtrapolation不使用先前命令的外推信息。
StoreExtrapolation在命令结束时内部存储外推信息,以便供后续命令使用,或可写入保存或绘图文件。这是默认设置。
-StoreExtrapolation在命令结束时不在内部存储外推信息。

外推语句的参数

阶数外推

默认情况下,Sentaurus Device 使用线性外推,但您可以请求更高阶的外推。例如,要指定二次外推,请使用:

cpp
Extrapolate (Order = 2)

排除方程

默认情况下,Sentaurus Device 对 Coupled 命令中的所有方程使用外推,但您可以从此列表中排除某些方程。

例如,要仅对电子方程使用二阶外推,请使用:

cpp
Quasistationary (
   Goal { Name = "gate" Voltage = 3 }
   Extrapolate(Order=2 Exclude(Poisson Hole))
) { Coupled { Poisson Electron Hole } }

低密度限制

如果某些顶点中电子或空穴浓度具有小值,这些顶点中的外推可能是收敛问题的原因。您可以定义这些浓度的低限,从该低限开始,Sentaurus Device 将外推相应的密度。

例如,要仅对浓度大于 1e+08 的顶点中外推载流子密度,请使用:

cpp
Quasistationary (
   Goal { Name = "gate" Voltage = 3 }
   Extrapolate(LowDensityLimit = 1e+8)
) { Coupled { Poisson Electron Hole } }

外推的最小步长

QuasistationaryTransient 命令包含选项 InitialStepIncrementDecrementMaxstepMinstep。Sentaurus Device 使用以下迭代过程:

过程 1:

  1. 通过从先前步长的解外推获得给定步长的初始猜测(即它依赖于 t₀、t₁ 和 step)。
  2. Sentaurus Device 使用牛顿迭代方法获得 t=t₂ 的解。
  3. 如果此迭代过程收敛,则 t₀=t₁, t₁=t₂, step=NewStep(有计算 NewStep 的特殊算法)。转到步骤 1。
  4. 否则 step=step/Decrement,如果 step > Minstep(这是 Quasistationary 参数)。转到步骤 1。
  5. 否则(即 step < Minstep)过程 1 未收敛。在这种情况下,Sentaurus Device 退出 QuasistationaryTransient 命令。

有时,对于小步长,过程 1 在没有外推的情况下具有更好的收敛性。对于这种情况,Extrapolate 语句具有 MinStep 参数,这是外推的最小步长(默认值为 0)。

例如:

cpp
Quasistationary (
   Minstep = 1e-8                 # 这是 Quasistationary 最小步长
   Extrapolate(MinStep = 1e-5)    # 这是 Extrapolate 最小步长
   Goal { Name = "gate" Voltage = 3 }
) { Coupled { Poisson Electron Hole } }

因此,过程 1 的步骤 1 变为:

  • 算法 1: 1a. 如果 step > Extrapolate.MinStep(1e-5),则通过从先前步长的解外推获得给定步长 (t₂=t₁+step) 的初始猜测。 1b. 否则如果 step > Quasistationary.Minstep(1e-8),则 Sentaurus Device 使用当前解(未外推)作为初始猜测。 1c. 否则转到步骤 5。

注意: 如果 Extrapolate.MinStep 大于 Quasistationary.Maxstep,则 Sentaurus Device 不使用外推,即这相当于使用不带 Extrapolate 语句的 Quasistationary 命令。

外推失败次数

除了或作为 MinStep 的替代,Sentaurus Device 可以使用连续失败次数来关闭外推并使用当前解作为初始猜测。例如:

cpp
Extrapolate( NumberOfFailures = 2 )

在这种情况下,在两次连续的外推失败后,Sentaurus Device 使用当前解(未外推)作为初始猜测。

切换算法

例如:

cpp
Extrapolate( MinStep=1e-5 NumberOfFailures=2 Algorithm=<1 | 2> )

默认值为 Algorithm=1,即使用过程 1。也就是说,如果 Step < MinStep 或连续失败次数 ≥ NumberOfFailures,则 Sentaurus Device 使用当前解(未外推)作为初始猜测。

如果 Algorithm=2,则 Sentaurus Device 在任何情况下都使用外推。只有当它失败时,Sentaurus Device 才会切换到未外推的解作为初始猜测。

4.5 连续性命令

Continuation 命令允许自动追踪任意形状的 I-V 曲线。此功能对于追踪与复杂器件现象相关的 I-V 曲线特别有用,例如击穿或闩锁,这些曲线可能具有多值性和突变。

该实现基于动态负载线技术 [2],通过沿 I-V 曲线调整边界条件以确保收敛。边界条件由施加到连接到要追踪 I-V 曲线的器件电极的可变负载电阻末端的外部电压组成。程序在 I-V 曲线的每个点计算最佳边界条件,方法是调整负载线使其与 I-V 曲线的局部切线正交。

通过在 Solve 部分中指定关键字 Continuation 来激活连续性方法。必须给出括号中跟随 Continuation 关键字的控制参数。例如:

cpp
Solve {
   Continuation (<Control Parameters>) {
      Coupled { poisson electron hole }
   }
}

表 348(第 1779 页)总结了 Continuation 命令的控制参数。该方法适用于单器件和混合模式设置,但一次只有一个电极经历连续性。

4.5.1 连续性控制参数

注意: 指定 NewArc 选项将启用多项功能,以提高大多数应用的该方法的鲁棒性。如果不指定此选项,默认情况下将使用原始连续性算法。

连续性模拟的第一步始终是使用 InitialVstep 参数指定的电压控制步长。在此步之后,I-V 曲线追踪自动进行,直到连续性电极上的电流或电压前进到用户定义的连续性窗口之外(使用参数 MinVoltageMaxVoltageMinCurrentMaxCurrent 指定)。例如:

cpp
Solve { ...
   Continuation (
      NewArc
      Name="collector" InitialVstep=0.1
      MinVoltage=0 MaxVoltage=10
      MinCurrent=0 MaxCurrent=1e-3
   )
   { Coupled { poisson electron hole } }
}

此代码块指定必须在集电极追踪 I-V 曲线,初始电压控制步长为 0.1 V,电压范围为 0 V 至 10 V,电流范围为 0 A 至 1 mA。

沿 I-V 曲线的步长主要由模拟的收敛控制。如果解收敛,步长按因子 Increment 增加(默认值为 1.5);如果不收敛,则按因子 Decrement 减少(默认值为 2.0)。您可以通过指定参数 MaxVstepMaxIstepMaxIfactor 来限制步长。这些参数限制 Sentaurus Device 从 I-V 曲线的一个点到下一个点计算的投影 ΔV 和 ΔI。连续点之间的实际最大间距可能与这些限制略有不同。MaxVstepMaxIstep 参数分别表示最大电压和电流步长,而 MaxIfactor 表示允许电流在一步中增加的最大因子。

在连续性过程中,Sentaurus Device 自动计算连接到连续性电极的负载电阻的最佳值。可以使用 MinRloadMaxRload 参数指定计算电阻的限制。

成功使用连续性方法追踪 I-V 曲线取决于局部斜率计算的准确程度。在低偏置下,连续性电极上的电流可能很小且有噪声。这可能导致斜率计算不准确,有时会导致连续性方法回溯。在这种情况下,可能需要指定参数 VadaptIadapt 或两者,它们分别表示在开启自适应算法之前必须达到的最小电压和电流。从 MinVoltageVadapt 以及从 MinCurrentIadapt,自适应算法被关闭,模拟通过连接到连续性电极的固定值电阻进行简单电压扫描进行。默认固定电阻值为 0.001 Ω,可以使用 Rfixed 参数更改。

4.5.2 混合模式中的连续性

连续性方法可用于混合模式模拟;但是,连续性接触点不得连接到任何电路节点。在混合模式中使用连续性时,必须在 Name 参数前加上器件实例。

以下示例考虑一个标识符为 mos1 的器件,电极名为 source、drain、gate 和 substrate。mos1 的器件实例(在 System 部分中给出)为 d1。如果 drain 应用作连续性电极,则不应在连接列表中将其连接到任何电路,并且必须使用 d1.NameContinuation 部分中识别:

cpp
Device mos1 {
   Electrode {
       {Name="source" Voltage=0.0}
       {Name="drain" Voltage=0.0}
       {Name="gate" Voltage=0.0}
       {Name="substrate" Voltage=0.0}
   }
   ...
}
System {
   mos1 d1 (source=s1 gate=g1 substrate=s1)
   set (s1=0 g1=0 b1=0)
}
Solve {
   ...
   Continuation(
      d1.Name="drain"
      ...
   ) {Coupled {Poisson Electron Hole}}
}

要在 Continuation 之前偏置混合模式连续性电极,可以使用准静态扫描。但是,必须使用 Contact 关键字而不是 Name 来识别电极,以避免将接触点偏置为电路节点。例如:

cpp
Quasistationary (
   InitialStep=1e-3
   ...
   Goal {Contact=d1."drain" Voltage=3}
) {Coupled {Poisson Electron Hole}}

4.6 瞬态命令

Transient 命令用于执行瞬态时间模拟。命令必须从已经求解的器件开始。模拟通过迭代增加时间并重新求解器件来继续(参见图 12)。每次迭代时求解器件的命令随 Transient 命令给出。

图片:../../../public/images/sdevice/sdevice_fig12.png

Transient 命令的语法为:

cpp
Transient ( <parameter-list> ) { <solve-command> }

表 362(第 1793 页)列出了可能的参数,&lt;solve-command&gt;CoupledPlugin

执行 10 µs 瞬态模拟的示例:

cpp
Transient( InitialTime = 0.0 FinalTime=1.0e-5){
   Coupled { Poisson Electron Hole }
}

Transient 命令允许覆盖时间步长控制参数,这些参数具有默认值或在全球 Math 部分中全局定义。瞬态命令接受的误差控制参数在表 238(第 1674 页)中列出。

TransientErrorTransientErrRefTransientDigits 参数控制瞬态积分方法的误差。这与 Coupled 语句的误差控制不同,后者仅控制每个非线性解的误差。与 Coupled 语句的误差参数一样,瞬态误差控制可以是绝对误差和相对误差。绝对值根据方程变量类型进行参数化。

Transient 命令的绘图控制与 Quasistationary 命令相同,只是 t 是真实时间(以秒为单位),不限于 0 到 1 的区间。

Plot 可以作为 Transient 参数给出。例如:

cpp
Transient( InitialTime = 0.0 FinalTime = 1.0e-5
   Plot { Range = (0 3.0e-6) Intervals=3 } )
   { Coupled { Poisson Electron Hole } }

此示例在 t = 0.0、1.0e–6、2.0e–6 和 3.0e–6 时保存四个绘图文件。

Quasistationary 模拟类似,如果在上次保存之后经过特定步长时,也可以使用 Plot 命令中的关键字 MinSpacing 来保存和绘图数据。例如:

cpp
Transient(
   InitialTime = 0.0 FinalTime = 1.0e-5
   Plot { Range = (0 3.0e-6) MinSpacing= 2.0e-5 }
)
{ Coupled { Poisson Electron Hole } }

或者,Plot 可以放入 Transient 求解命令中(参见 何时绘图):

cpp
Transient( InitialTime = 0.0 FinalTime = 1.0e-5 )
   { Coupled{ Poisson Electron Hole }
   Plot ( Time=( 1.0e-6; 2.0e-6; 3.0e-6 ) NoOverwrite )
}

4.6.1 瞬态分析的数值控制

您可以使用 Math 部分中的一组关键字和 Solve 部分中 Transient 语句的选项来控制瞬态模拟。Sentaurus Device 使用非平稳方程的隐式离散化,并支持两种离散化方案:梯形规则/后向差分公式(TRBDF)(这是默认方案)和更简单的后向欧拉(BE)方法。

要选择特定的瞬态方法,请指定 Transient=&lt;string&gt;,其中 &lt;string&gt; 可以是 TRBDFBE

在瞬态模拟中,除了非线性方程的数值误差外,还会产生由于有限时间步长而导致的离散化误差(参见 瞬态模拟)。默认情况下,Sentaurus Device 不控制时间步长来限制此离散化误差(即时间步长仅取决于牛顿迭代的收敛)。

要激活时间步长控制,必须指定 CheckTransientError。对于时间步长控制,Sentaurus Device 使用一组单独的标准,但与牛顿迭代一样,对相对误差和绝对误差都执行控制。

相对瞬态误差 εR,tr 的定义类似于第 212 页方程式 33 中的 εR:

εR,tr = 10^(–TransientDigits)          (14)

类似地,对于 xref,tr 和 εA,tr,以下公式成立:

xref,tr = (εA,tr / εR,tr) * x*         (15)

必须使用关键字 TransientDigits 在瞬态模拟中指定相对误差 εR,tr。可以通过关键字 TransientError (εA,tr) 或 TransientErrRef (xref,tr) 指定时间步长控制中的绝对误差,它们的值可以独立于每个方程变量定义。使用与牛顿迭代控制相同的标志 RelErrControl 来切换到未缩放的 (TransientErrRef) 绝对误差规范。

对于具有浮栅的模拟,Sentaurus Device 还可以监控浮栅电荷中的误差。有关详细信息,请参见 浮栅

注意:

  • Math 部分中的所有瞬态参数(Transient 除外)都可以在 Solve 部分的 Transient 命令中被覆盖(参见 瞬态命令)。
  • Transient 命令使用随时间变化的边界条件(参见 指定电学边界条件)并相应地更新掺杂井中的准费米势。这可能与 Quasistationary 命令中先前扫描的准费米势发生干扰(参见 掺杂井中准费米势的扫描)。这对于仅泊松方程的解至关重要。要避免此问题,请在 Math 部分中使用 -UpdateQFPinTransientPoisson

4.6.2 时间步进

瞬态模拟计算系统或器件作为有限时间范围内的时间函数的状态,指定 InitialTimeFinalTime,通过从给定时间的系统状态推进到较晚时间点的状态。时间步长是动态选择的。时间步长分别从下方和上方受到 MinStepMaxStep 的限制;而 InitialStep 指定开始时的第一个时间步长。

如果给定时间步长的系统状态计算失败,时间步长会迭代减小,直到系统状态可以成功计算或达到最小时间步长。在后一种情况下,Transient 终止并报错。可以使用 Decrement 关键字设置步长减小的因子。

在系统状态成功计算之后,时间步长通常会增加,这取决于实际时间步长的计算工作。步长增加的最大因子可以用 Increment 关键字控制。

有效时间步长可能小于推进时间步长,例如,如果指定了绘图时间点,则必须计算系统状态。然而,这些有效时间步长不会减少推进时间步长,即后续有效时间步长可能与推进时间步长一样大。您可以通过在 Transient 中指定称为转折点的参数来限制(在某些条件下从上方)推进时间步长。

这些条件可以是任意时间点或时间范围的列表(参见表 362,第 1793 页)。例如:

cpp
Transient ( ...
  TurningPoints (
    (Condition (Time( 1.e-7 ; 2.e-7 ; 3.e-7 ) ) Value= 1.1e-9 )
    (Condition (Time( Range= (1.e-7 2.e-7 ) ) ) Value= 2.1e-9 )
    (Condition (Time( 1.23e-7 ; 1.45e-7 ; 1.67.e-7 ) ) Value= 1.0e-10 )
  )
)

推进时间步长受相应条件的指定 Value(以秒为单位)限制。在此示例中,第一个条件限制一系列时间点的值。第二个条件限制整个范围的步长。如果在您指定了最大时间步长的范围内(如本例中的第二个条件)并且您想在该范围内在特定时间点输出结果,只需在另一个 Condition 语句中指定这些(示例中的第三个语句),确保设置的 Value 小于范围内设置的值。

请注意,对于时间点,瞬态的计算被触发;而对于范围,则不会。Time 采用与 SolvePlotTime 关键字相同的选项。

注意: 有关光学模拟相关的转折点(使用光学生成计算的统一接口指定;参见第 21 章,第 683 页),请参见 光学转折点

在器件的关断状态下,如果时间步长太小,位移电流可能无法被数值精度解析,从而导致电流尖峰。在这种情况下,您可以定义:

cpp
TurningPoints ( Condition=(...) Value=<float> Factor=<int> )

参数 Factor 控制标准 max_current×Value &lt; Factor×eps,其中 eps 表示使用的精度数值限制,max_current 是该器件的最大端电流。

Sentaurus Device 检测 Value 是否太小而无法解析结果。如果是这样,它会打印警告消息并将时间步长重置为更合理的值。默认 Factor=0。要解决尖峰电流,请将 Factor 设置为正值,例如 Factor=10

4.6.3 物理参数值的扫描

Transient 命令允许从 Sentaurus Device 的参数文件中线性扫描参数。

Bias 语句(类似于 Quasistationary 命令中的 Goal 子部分;参见 物理参数值的扫描)的形式为:

cpp
Bias {
   [ Device = <device> ]
   [ Material = <material> | MaterialInterface = <interface> |
     Region = <region> | RegionInterface = <interface> ]
   Model = <model> Parameter = <parameter> Value = <value_list>
}

指定设备和位置(材料、材料界面、区域或区域界面)是可选的。但是,必须始终指定模型名称和参数名称。例如:

cpp
Transient (
   InitialTime = 0 FinalTime = 1
   Bias(
      Material = "Silicon"
      Model = "Stress"
      Parameter = "StressXX"
      Value = (1e4 at 0.1, 1e5 at 0.2, 1e6 at 0.5)
   )
   Bias(
      Region = "Channel"
      Model = "Stress"
      Parameter = "StressXX"
      Value = (1e7 at 0.6, 1e8 at 0.8, 1e9 at 0.9)
   )
) { Coupled { Poisson Electron Hole } }

有关可以在 Transient 命令中扫描的参数列表,请参见 物理参数值的扫描

4.6.4 外推

Transient 命令可以使用从先前步长的解中外推来预测下一个解。外推可以关闭(默认)或在 Math 部分全局开启:

cpp
Math { Extrapolate }

或者,仅针对特定的 Transient 命令关闭或开启:

cpp
Transient (
   Goal { ... }
   -Extrapolate
) { Coupled { Poisson Electron Hole } }

Sentaurus Device 可以在以下情况下使用外推:在 Transient 命令内部和 Transient 命令之间。

在 Transient 命令内部

给定步长的初始猜测是从先前步长的解中外推获得的(如果存在)。

在 Quasistationary 命令之间

外推信息在 Transient 命令之间保留,也由 SaveLoad 命令自动保存和加载。

如果满足以下条件,Transient 命令可以使用两个 Transient 命令之间的外推信息:

  1. 先前和当前的 Transient 命令是连续的,即先前 Transient 的结束时间等于当前 Transient 的开始时间。
  2. 解决方案变量的值在两个 Transient 命令之间没有变化,例如通过 Load 命令。

如果可以成功使用先前 Transient 命令的外推信息,日志文件中会出现以下消息:

Reusing extrapolation from a previous transient

表 21(第 143 页)描述的控制外推信息处理的选项也可用于 Transient。参见 外推语句的参数

4.7 瞬态扫描

或者,Sentaurus Device 提供了与 Quasistationary 命令非常相似的 Transient 命令语法。此 Transient 命令简化了从准静态模拟切换到慢速瞬态模拟的过程,用户工作最少。将准静态模拟替换为慢速瞬态对于模拟宽带隙半导体器件、具有陷阱态的器件、击穿模拟特别有用,并且通常在切换到瞬态时可以改善收敛。

瞬态扫描由类似 Quasistationary 的命令激活,其中 Quasistationary 关键字替换为 Transient,两个可选参数 InitialTimeFinalTime 可用于控制扫描速率:

cpp
Solve { ...
   Transient (
      InitialTime = 0
      FinalTime = 1
      InitialStep = 0.01
      MaxStep = 0.1
      MinStep = 0.001
      Goal {name="gate" Voltage=5.0}
      Goal {name="drain" Current=1e-8}
   ) { Coupled {...} }
}

InitialTime 的默认值是 0 或先前瞬态扫描模拟的最终模拟时间。FinalTime 默认值是 InitialTime + 1 秒

如果在两个瞬态扫描之间插入了准静态扫描,并且之后未指定 InitialTime,则瞬态扫描之后的时间将重置为零。

如果激活了动态非局部路径带间隧穿模型,则可以包含 NonlocalPath 部分(参见 处理导数)。

大信号循环分析

在以下示例中,最后一个瞬态将阳极从 t = 0 时的 3 V 偏置到 t = 2 s 时的 0 V:

cpp
Solve { ...
   Transient (
      FinalTime = 2
      InitialStep = 0.01
      MaxStep = 0.1
      MinStep = 0.001
      Goal {name="anode" Voltage=2.0}
   ) { Coupled {...} }

   Quasistationary(
      InitialStep = 0.01
      MaxStep = 0.1
      MinStep = 0.001
      Goal {name="anode" Voltage=3.0}
   ) { Coupled {...} }

   Transient (
      FinalTime = 2
      InitialStep = 0.01
      MaxStep = 0.1
      MinStep = 0.001
      Goal {name="anode" Voltage=0.0}
   ) { Coupled {...} }
}

电极偏置时间依赖性在内部计算,用于 Goal 部分中指定的电极,因此这些接触点不允许在 Electrode 部分中指定随时间变化的偏置。InitialStepMaxStepMinStepQuasistationary 情况下的相同,以 0 到 1 的比例表示。Sentaurus Device 在内部将它们从 InitialTimeFinalTime 的比例转换。

注意:

  • 此功能支持电压、电流或电荷扫描。因此,在 Goal 部分中仅允许电压、电流和电荷接触点。表 353(第 1786 页)列出了所有可用命令。
  • 要扫描其他参数或在混合模式、材料特定或区域特定的模拟中指定器件的参数更改等,请使用 Bias 语句(参见 物理参数值的扫描)。

4.7.1 大信号循环分析

对于高速和高频操作,器件通常通过循环偏置进行评估。一段时间后,器件变量周期性地变化。这种循环偏置稳态 [3] 是模拟系统的所有参数在施加一个周期偏置后返回到初始值时发生的条件。

实际上,这种循环稳态是通过使用标准瞬态模拟实现的。但是,如果系统中的某些过程与信号周期相比具有非常长的特征时间,则这并不总是有效的。

例如,深陷阱通常具有相对较长的特征时间。一种建议的方法 [4] 允许显着加速达到循环稳态解的过程。该方法基于在瞬态模拟每个周期开始时使用先前的初始猜测对初始猜测进行迭代校正,目标是达到循环稳态。Sentaurus Device 中实现了此方法。另一种频域方法是谐波平衡(参见 谐波平衡)。

方法描述

原文方法 [4] 总结如下。瞬态模拟从某个初始猜测开始。执行几个周期的瞬态模拟,并且在每个周期之后,估算模拟系统的每个独立变量在周期内的变化(即每个器件所有顶点的电势、电子和空穴浓度、载流子温度以及如果选择了流体动力学或热力学模型则还有晶格温度、每个陷阱类型和占据水平的陷阱占据概率,以及混合模式模拟情况下的电路节点电势)。

如果用 xn^I 表示第 n 个周期开始时任何变量的值,xn^F 表示该周期结束时的相同值,则当达到循环稳态时:

Δxn = xn^F - xn^I                     (16)

等于零。

考虑到线性外推且目标是实现 Δxn+1 = 0,下一个初始猜测可以估算为:

xn+1^I = xn^I - γ * ((xn^I - xn-1^I) / (Δxn - Δxn-1)) * Δxn     (17)

其中 γ 是用户定义的松弛因子以稳定收敛。

由于方程式 17 包含不确定性(如 0/0),特别是当 Δx 接近零时(当解接近稳态时),需要特殊预防措施以提供算法的鲁棒性。

从另一个角度考虑方程式 17 的推导——接近循环稳态时。如果这样的稳态存在,初始猜测 y = x 预期随时间表现为 y = a·exp(-αt) + b,其中 α > 0。可以很容易地表明方程式 17 给出 x = b,即理想的循环稳态解。

由此,比率 r 可以估算为:

r = -((xn^I - xn-1^I) / (Δxn - Δxn-1))                         (18)

可以估算为 r ≈ 1 / (1 - exp(-αt))。由此可知,因为 α 为正,条件 r ≥ 1 必须成立。此外,如果某些内部特征时间(如陷阱特征时间)比周期长得多,r 可能非常大。

使用从方程式 18 定义的 r,方程式 17 可以重写为:

xn+1^I = xn^I + γrΔxn                                          (19)

虽然方程式 18 和方程式 19 与方程式 17 等价,但在 Sentaurus Device 内部使用方程式 18 和方程式 19 更方便。由于上述原因,Sentaurus Device 不允许 r 小于 1。

为了提供收敛和鲁棒性,限制 r 不变得非常大也是合理的。在 Sentaurus Device 中,r 不能超过用户指定的参数 rmax。您可以为温度、电势和电路节点电压分别指定不同的 rmax 值。默认情况下,每个方程使用 rmax。您还可以指定参数 rmin 的值。

对模拟系统每个对象的所有变量(在所有器件的每个网格顶点)在每个周期执行外推过程(方程式 18 和方程式 19 描述)。外推过程应用于适当的准费米势,而不是可能在整个器件上变化数个数量级的密度。

对于陷阱方程,外推可以应用于陷阱占据概率 fT(默认),或者可选地应用于"陷阱准费米能级" ΦT = -ln((1-fT)/fT)。如果满足以下条件,则认为已达到循环稳态:

Δx / (x + xref) < εcyc                                        (20)

xref 的值与 Math 部分的 ErrRef 值相同。对于模拟系统(每个器件的每个变量)的每个对象 o,估计比率 r 的平均值 ravo,并且可以可选地打印。

对 ravo 的估计仅在对象的那些顶点执行,其中满足条件:

Δx / (x + xref) < ε1cyc = εcyc / f                           (21)

即�给定的激发频率 ν,它用以下方式描述等效小信号模型:

δI = Y δV                                            (22)

其中 δV 和 δI 是所选节点处(复数值)电压和电流激发向量。导纳矩阵可以表示为:

Y = A + i2πνC                                        (23)

实值电导矩阵 A(以西门子 Ω⁻¹ 为单位测量)和电容矩阵 C(以法拉 C/V=(Ω·Hz)⁻¹ 为单位测量)。

ACCoupled 部分内,必须指定所考虑的频率范围和电路节点。此外,您可能需要从给定的电气系统中排除某些电路实例:

  • StartFrequencyEndFrequencyNumberOfPointsLinearDecade:选择执行交流分析的频率。
  • Frequency:指定执行交流分析的频率列表。
  • ACExtract:指定提取文件名的前缀,用于存储导纳矩阵。如果未指定,则 ACCoupled 写入全局提取文件(由 File 中的 ACExtract 给出,默认为提取文件 extraction_ac_des.plt)。提取文件包含频率、节点处的电压以及矩阵 A(用 a 表示)和 C(用 c 表示)的条目。
  • ACPlot:调用包含交流响应函数(解变量和电流密度)的器件绘图。这里您指定文件名前缀,为每个交流节点电压激发和频率生成相应的绘图文件。
  • Exclude:指定应从交流系统中排除的系统实例列表。
  • Node:指定导纳矩阵中考虑的交流节点列表。对于导纳矩阵计算,必须指定非空节点列表。

注意: 如果同时定义了 FrequencyStartFrequencyEndFrequencyNumberOfPoints 之一,则使用 Frequency 中定义的值。

Exclude 列表用于从交流分析中移除一组电路或物理器件。通常,电源被移除以免短路交流分析,但该列表也可用于将单个器件与整个电路隔离。

注意: 分析的系统由 ACCoupled 语句主体中指定的方程组成,不包括由 Exclude 列表移除的实例。Exclude 列表仅指定实例,因此这些实例的所有方程都被移除。

ACCompute 选项控制在准静态或瞬态扫描期间的交流或噪声分析性能。ACCompute 中的参数与 PlotSave 命令中的参数相同(参见表 355,第 1788 页)。

例如:

cpp
Quasistationary (...) {
   ACCoupled (...
      ACCompute (Time = (0; 0.01; 0.02; 0.03; 0.04; 0.05)
                  Time = (Range = (0.9 1.0) Intervals = 4)
                  Time = (Range = (0.1 0.2); Range = (0.7 0.8))
                  When (Node = in Voltage = 1.5))
      {...}
   )
}

在此示例中,仅对以下时间点执行交流分析:

  • t = 0, 0.01, 0.02, 0.03, 0.04, 0.05
  • t = 0.9, 0.925, 0.95, 0.975, 1.0
  • 区间 [0.1, 0.2] 和 [0.7, 0.8] 中的所有时间点。此外,每当节点 in 处的电压达到 1.5 V 阈值时触发交流分析。

如果交流或噪声分析被 ACCompute 选项抑制,则 ACCoupled 语句的行为类似于普通 Coupled 语句。

包含 ACCoupledQuasistationaryTransient 扫描也可以包含 CurrentPlot 规范(参见 何时写入电流文件),以选择应发生电流输出的步。

CurrentPlotACCoupled 语句可能包含的 ACCompute 语句是完全独立的。

示例

此示例说明了一个简单器件的交流分析。1D 电阻器连接到地(通过电阻器 to_ground)和反向偏置为 –3 V 的电压源 drive。在 –3 V 计算初始电压点后,左侧电压以 0.1 V 增量扫描到 1 V。左右节点之间在频率 f = 10³ Hz, 10⁴ Hz, 10⁵ Hz, 10⁶ Hz 下计算交流参数。电路元件 drive 和 to_ground 从交流计算中排除。

通过包括电路,可以执行完整的波特图:

cpp
Device "Res" { ...
   Electrode {{Name=anode   Voltage=-3 resist=1}
              {Name=cathode Voltage= 0 resist=1}
   }
   File {Grid = "resist.tdr"}
   Physics {...}
}

System {
   "Res" "1d" (anode="left" cathode="right")
   Vsource_pset drive("left" "right"){dc = -3}
   Resistor_pset to_ground ("right" 0){resistance=1}
}

Math {
   Method=Blocked SubMethod=Super # 1D, 2D 默认求解器(用于 Coupled)
   ACMethod=Blocked ACSubMethod=Super # 1D, 2D 默认求解器(用于交流分析)
   NoAutomaticCircuitContact
}

Solve { ...
   ACCoupled (
       StartFrequency=1e3 EndFrequency=1e6 NumberOfPoints=4 Decade
       Node("left" "right")
       Exclude(drive to_ground)
       ACMethod=Blocked ACSubMethod("1d")=ParDiSo
   ) { Poisson Electron Hole Contact Circuit }
   Quasistationary ( ...
      Goal{Parameter=drive.dc Value=1}
   ) {
      ACCoupled(
         StartFrequency=1e3 EndFrequency=1e6 NumberOfPoints=4 Decade
         Node("left" "right")
         Exclude(drive to_ground)
         ACMethod=Blocked ACSubMethod("1d")=ParDiSo
      ) { Poisson Electron Hole Circuit Contact }
   }
}

单器件模式中的交流分析

如前所述,交流分析通常需要混合模式模拟,即必须定义 System 部分。对于单器件模拟,如果在全局 Math 部分中使用 ImplicitACSystem,则会为您构建一个简单的交流系统。

这个隐式交流系统是在内部构建的,对用户基本上是不可见的。隐式交流系统具有以下属性:

  • 对于被测器件(DUT)的每个电压控制电极,构造一个电路节点并连接到器件接触点。对于其他接触点类型,不构造节点。
  • 每个隐式节点连接到一个描述 stationary 和(可能的)瞬态电压边界条件的系统实例。为器件接触点提供的数据被隐式传输到系统实例。

在生成隐式交流系统的情况下,ACCoupled 提供略有不同的默认行为:

  • Node:如果未指定交流节点,则所有隐式系统节点都用作交流节点。指定的器件接触点名称被隐式解释为相应的节点名称。
  • Exclude:如果未指定排除实例,则所有附加到交流节点的隐式系统实例都被排除。指定的器件接触点名称被解释为相应的系统实例名称。

附加说明:

  • Quasistationary 中的 Goal 语句:器件电极电压值的 Goal 语句被映射到电极对应节点的隐式系统实例。
  • 隐式交流系统在 Solve 部分执行之前被提取。因此,不支持更改接触点类型的求解语句。

示例:

cpp
Math {
   ImplicitACSystem                   * 构建隐式交流系统
}

Electrode { ...
   { Name="c1" Voltage=1 Voltage=(1 at 0. , 2. at 1.e-8) ... }
   { Name="c2" Current=0. } * 没有隐式节点连接的接触点
}

Solve { ...
   Quasistat ( ...
   Goal { Name= "c1" Voltage=2"}                 * 接触点目标被映射
                                                     * 到实例
     ) { Coupled {...} }

     * 交流分析:使用所有隐式交流节点
     ACCoupled (
        StartFrequency=1.e6 EndFrequency=1.e9 NumberOfPoints=4 Decade
        ACExtract="AC1" ) {...}
     * 交流分析:仅使用一个交流节点
     ACCoupled (
        StartFrequency=1.e6 EndFrequency=1.e9 NumberOfPoints=4 Decade
        Node ( "c1" )
        ACExtract="AC2" ) {...}
}

4.7.2 小信号交流分析

ACCoupled solve section 是 Coupled section 的扩展,增加了允许小信号交流分析的一组额外参数。表 347(第 1778 页)描述了这些参数。通常,ACCoupled 用于混合模式。AC Simulation(第 1243 页)提供了该方法的技术背景信息。

混合模式模拟中的交流分析

交流分析计算指定电气系统电路节点之间与频率相关的导纳矩阵 Y。对于给定的激励频率 ν,它通过以下公式描述等效的小信号模型:

δI = YδV                                          (22)

其中 δV 和 δI 分别是选定点上(复数值)电压和电流激励的向量。导纳矩阵可以表示为:

Y = A + i2πνC                                     (23)

其中 A 是以西门子(Ω⁻¹)测量的实值电导矩阵,C 是以法拉第(C/V=(Ω·Hz)⁻¹)测量的电容矩阵。

ACCoupled section 中,必须指定感兴趣的频率以及导纳矩阵中考虑的电路节点。此外,可能需要从给定的电气系统中排除某些电路实例,以描述正确的交流系统:

  • StartFrequency, EndFrequency, NumberOfPoints, Linear, 和 Decade:选择执行交流分析的频率。
  • Frequency:指定执行交流分析的频率列表。
  • ACExtract:指定提取文件的 ACCoupled 特定文件名前缀,用于存储导纳矩阵。如果未指定,ACCoupled 写入全局提取文件(由 File 中的 ACExtract 给出,默认为提取文件 extraction_ac_des.plt)。提取文件包含频率、节点电压以及矩阵 A(记为 a)和 C(记为 c)的元素。
  • ACPlot:调用包含交流响应函数(解变量和电流密度)的器件绘图。此处指定文件名前缀,为每个交流节点电压激励和频率生成相应的绘图文件。
  • Exclude:指定不应属于交流系统的系统实例列表。
  • Node:指定导纳矩阵中考虑的交流节点列表。对于导纳矩阵计算,必须指定非空节点列表。

注意: 如果同时定义了 FrequencyStartFrequencyEndFrequencyNumberOfPoints 之一,则使用 Frequency 中定义的值。

Exclude 列表用于从交流分析中移除一组电路或物理器件。通常,移除电源以避免短路交流分析,但该列表也可用于将单个器件从整个电路中隔离出来。

注意: 被分析的系统由 ACCoupled 语句体中指定的方程组成,不包括 Exclude 列表中移除的实例。Exclude 列表仅指定实例,因此这些实例的所有方程都被移除。

ACCompute 选项控制在准静态或瞬态扫描中的交流或噪声分析性能。ACCompute 中的参数与 PlotSave 命令中的参数相同(参见表 355,第 1788 页)。

例如:

cpp
Quasistationary (...) {
ACCoupled (...
ACCompute (Time = (0; 0.01; 0.02; 0.03; 0.04; 0.05)
Time = (Range = (0.9 1.0) Intervals = 4)
Time = (Range = (0.1 0.2); Range = (0.7 0.8))
When (Node = in Voltage = 1.5))
{...}
}

在此示例中,交流分析仅在以下时间点执行:

  • t = 0, 0.01, 0.02, 0.03, 0.04, 0.05
  • t = 0.9, 0.925, 0.95, 0.975, 1.0
  • 区间 [0.1, 0.2] 和 [0.7, 0.8] 中的所有时间点

此外,无论何时节点 in 的电压达到 1.5 V 阈值,都会触发交流分析。 如果通过 ACCompute 选项抑制了交流或噪声分析,则 ACCoupled 语句的行为类似于普通 Coupled 语句。 包含 ACCoupledQuasistationaryTransient 扫描也可以包含 CurrentPlot 规范(参见电流文件写入时间,第 176 页)以选择应发生电流输出的步骤。 CurrentPlotACCoupled 语句可能包含的 ACCompute 语句是完全独立的。

示例

此示例说明了一个简单器件的交流分析。1D 电阻器通过电阻器 to_ground 连接到地,并连接到反向偏置为 –3 V 的电压源 drive。在 –3 V 计算初始电压点后,左侧电压以 0.1 V 为增量斜坡至 1 V。在频率 f = 10³ Hz、10⁴ Hz、10⁵ Hz 和 10⁶ Hz 下计算节点 left 和 right 之间的交流参数。电路元件 drive 和 to_ground 从交流计算中排除。 通过包含电路,可以执行完整的 Bode 图:

cpp
Device "Res" { ...
Electrode {{Name=anode
Voltage=-3 resist=1}
{Name=cathode Voltage= 0 resist=1}
}
File {Grid = "resist.tdr"}
Physics {...}
}

System {
"Res" "1d" (anode="left" cathode="right")
Vsource_pset drive("left" "right"){dc = -3}
Resistor_pset to_ground ("right" 0){resistance=1}
}

Math {
Method=Blocked SubMethod=Super # 1D, 2D 默认求解器(用于 Coupled)
ACMethod=Blocked ACSubMethod=Super # 1D, 2D 默认求解器(用于交流分析)
NoAutomaticCircuitContact
}

Solve { ...
ACCoupled (
StartFrequency=1e3 EndFrequency=1e6 NumberOfPoints=4 Decade
Node("left" "right")
Exclude(drive to_ground)
ACMethod=Blocked ACSubMethod("1d")=ParDiSo
) { Poisson Electron Hole Contact Circuit }
Quasistationary ( ...
Goal{Parameter=drive.dc Value=1}
) {
ACCoupled(
StartFrequency=1e3 EndFrequency=1e6 NumberOfPoints=4 Decade
Node("left" "right")
Exclude(drive to_ground)
ACMethod=Blocked ACSubMethod("1d")=ParDiSo
) { Poisson Electron Hole Circuit Contact }
}
}

单器件模式中的交流分析

如前所述,交流分析通常需要混合模式模拟,即必须定义 System 部分。对于单器件模拟,如果在全局 Math 部分中使用 ImplicitACSystem,则会为您构建一个简单的交流系统。

这个隐式交流系统是在内部构建的,对用户基本上是不可见的。隐式交流系统具有以下属性:

  • 对于被测器件(DUT)的每个电压控制电极,构造一个电路节点并连接到器件接触点。对于其他接触点类型,不构造节点。
  • 每个隐式节点连接到一个描述 stationary 和(可能的)瞬态电压边界条件的系统实例。为器件接触点提供的数据被隐式传输到系统实例。

在生成隐式交流系统的情况下,ACCoupled 提供略有不同的默认行为:

  • Node:如果未指定交流节点,则所有隐式系统节点都用作交流节点。指定的器件接触点名称被隐式解释为相应的节点名称。
  • Exclude:如果未指定排除实例,则所有附加到交流节点的隐式系统实例都被排除。指定的器件接触点名称被解释为相应的系统实例名称。

附加说明:

  • Quasistationary 中的 Goal 语句:器件电极电压值的 Goal 语句被映射到电极对应节点的隐式系统实例。
  • 隐式交流系统在 Solve 部分执行之前被提取。因此,不支持更改接触点类型的求解语句。

示例:

cpp
Math {
ImplicitACSystem                   * 构建隐式交流系统
}

Electrode { ...
{ Name="c1" Voltage=1 Voltage=(1 at 0. , 2. at 1.e-8) ... }
{ Name="c2" Current=0. } * 没有隐式节点连接的接触点
}

Solve { ...
Quasistat ( ...
Goal { Name= "c1" Voltage=2"}
) { Coupled {...} }

* 接触点目标被映射
* 到实例

* 交流分析:使用所有隐式交流节点
ACCoupled (
StartFrequency=1.e6 EndFrequency=1.e9 NumberOfPoints=4 Decade
ACExtract="AC1" ) {...}
* 交流分析:仅使用一个交流节点
ACCoupled (
StartFrequency=1.e6 EndFrequency=1.e9 NumberOfPoints=4 Decade
Node ( "c1" )
ACExtract="AC2" ) {...}
}

4.7.3 光学交流分析

光学交流分析计算光学信号频率的函数量子效率。此技术基于交流分析技术,提供量子效率的实部和虚部与频率的关系。

要启动光学交流分析,请在 ACCoupled 语句中添加关键字 Optical。例如:

cpp
ACCoupled ( StartFrequency=1.e4 EndFrequency=1.e9
            NumberOfPoints=31 Decade Node(a c)
            Optical Exclude(v1 v2) )
            { poisson electron hole }

有关详细信息,请参见 光学交流分析

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&lt;i&gt; 及其分量 &lt;i&gt;。对于 MDFT 模式,会向名称添加对应于互调频率的后缀 _C_&lt;i,j,k...&gt;

您可以通过在全局或器件 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[&lt;list&gt;] 定义要绘制的量的列表。如果未定义 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 官方文档构建

代码块