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)
   }
   ...
)

基于 Sentaurus TCAD 官方文档构建

代码块