Appearance
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 时非常有用。
Charge 和 Current 参数决定边界条件类型以及电极的值。默认情况下,电极具有电压边界条件类型。Current 关键字将边界更改为电流类型,Charge 关键字将其更改为电荷类型。注意,对于电流边界条件,仍然必须指定 Voltage;此值在模拟开始时用作初始猜测,但对最终结果没有影响。Charge 和 Current 以与 Voltage 相同的方式支持随时间变化的规范。
4.1.1 模拟过程中改变边界条件类型
Solve 部分中的 Set 语句可以按以下方式更改电极的边界条件类型:
要将电流接触点
<name>的边界条件更改为电压类型,请使用:cppSet(<name> mode voltage)要将电压接触点
<name>的边界条件更改为电流类型或电荷类型,请使用以下之一:cppSet(<name> mode current) Set(<name> mode charge)要将电荷接触点
<name>的边界条件更改为电压类型,请使用:cppSet(<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)模拟,则可以监控其他值,包括:
TDDBCurrentTDDBCurrentRatioTDDBTrapNumber
有关详细信息,请参见 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) }
...
}关键字 DevicePower 和 OuterDevicePower 是同义词。在此示例中,如果外部功率绝对值超过 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 扫描专用断点判据
扫描专用断点判据可以作为 Quasistationary、Transient 和 Continuation 的选项来指定:
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)
}
...
)