Appearance
Ch4(续):准静态扫描与连续性
4.4 准静态扫描
Quasistationary 命令通过修改边界条件(如接触点电压)或参数值,将器件从一个解扫描到另一个解。模拟通过迭代修改边界条件或参数值,以及重新求解器件来继续(参见图 11)。每次迭代时重新求解器件的命令随 Quasistationary 命令给出。
图片:../../../public/images/sdevice/sdevice_fig11.png
4.4.1 边界条件扫描
要扫描边界条件(如电极上的电压),Quasistationary 命令的格式为:
cpp
Quasistationary ( <parameter-list> ) { <solve-command> }<parameter-list> 的可能性在表 358(第 1790 页)中总结。<solve-command> 是 Coupled、Plugin、ACCoupled、HBCoupled,或者是另一个 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 变量表示。控制不是通过对接触点值进行的,因为可以同时扫描多个接触点。
步进控制参数包括 <parameter-list> 中的 MaxStep、MinStep、InitialStep、Increment 和 Decrement:
MaxStep和MinStep限制步长。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}如果在命令文件的 Physics 或 Electrode 部分中指定了 AreaFactor,Sentaurus Device 会在目标命令中通过 <charge X AreaFactor> 重置电荷,通过 <current X AreaFactor> 重置电流。
例如,以下语句将所有名为 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 开始时计算。您可以使用 <parameter-list> 中的 DoZero 或 -DoZero 明确强制或阻止计算此点。
4.4.2 掺杂井中准费米势的扫描
指定掺杂井中的电子和空穴准费米势也可以在 Quasistationary 语句中扫描。这是一种快速而稳健的方式来耗尽掺杂井,而无需求解要耗尽的载流子的连续性方程。其主要应用是 CMOS 图像传感器模拟和电荷耦合器件模拟。
要扫描准费米势,请在 Quasistationary 命令的 Goal 部分中指定关键字 WellContactName 或 DopingWell,后跟 eQuasiFermi 或 hQuasiFermi:
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是一个坐标向量。它选择与该顶点共享相同掺杂井的所有顶点,该顶点是设备中最接近指定坐标的顶点。可以在括号内列出多个坐标,选定的顶点是联合。例如:cppPoint=((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是一个字符串向量,表示区域名称。它选择至少位于所列区域之一中的所有顶点。例如:cppRegion=("region_1" "region_2" "region_3")选择位于 "region_1"、"region_2" 或 "region_3" 中的所有顶点。它可以用于
SelectFrom和LimitTo子语句。Material是一个字符串向量,表示材料名称。它选择附加到所列材料之一的所有顶点。例如:cppMaterial=("silicon_1" "silicon_2" "SiC")选择在 "silicon_1"、"silicon_2" 或 "SiC" 材料中的所有顶点。它可以用于
SelectFrom和LimitTo子语句。Semiconductor是SelectFrom子语句中使用的属性。指定后,它选择附加到半导体材料的所有顶点。Window是一个语句,使用空间中的两个角坐标定义矩形或长方体形状。它选择定义矩形或长方体内的所有顶点。它只能用于LimitTo子语句。如果每个Window语句有其唯一的标识符,则可以在LimitTo子语句中指定多个Window语句。如果几个具有相同标识符的Window语句出现在LimitTo子语句中,则最后一个覆盖所有前面的Window语句。空标识符被认为是有效的标识符。例如:cppLimitTo ( 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是一个语句,基于Name和ValueRange选择一组顶点。Name应该是 Sentaurus Device 中的有效DataName,并且必须在顶点上定义。ValueRange用于指定DataName的最小值和最大值。如果顶点的Name已定义且其值在ValueRange内,则选择该顶点。与Window语句一样,Dataset语句可以有一个唯一标识符,如果它们具有不同的标识符,则可以在LimitTo子语句中使用多个Dataset语句。例如:cppDataset "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 命令文件参数
| 模型名称 | 参数 |
|---|---|
| DeviceTemperature | Temperature |
| GalvanicTransport | MagneticFieldx, MagneticFieldy, MagneticFieldz |
| Optics | Wavelength, Intensity, Theta, Phi, Polarization |
| PEPolarization | activation |
| RadiationBeam | Dose, DoseRate, DoseTSigma, DoseTime_end, DoseTime_start |
| Strain | StrainXX, StrainXY, StrainXZ, StrainYY, StrainYZ, StrainZZ |
| Stress | StressXX, 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 部分中的 Set 或 Initialize 语句固定的节点。语句 Goal{Node=<string> Voltage=<float>} 为指定节点分配新的目标电压。例如,节点 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=<i-name>.<p-name> value=<float>} 为器件实例 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 命令之间保留,并且由 Save 和 Load 命令自动保存和加载。如果满足以下条件,后续 Quasistationary 命令使用此外推信息:
先前和当前的
Quasistationary命令具有相同数量的目标。先前和当前的
Quasistationary命令扫描相同的量。先前和当前的
Quasistationary命令是连续的,即对于所有目标,当前初始值等于先前命令中的目标值。在当前
Quasistationary命令中,多个目标与先前Quasistationary命令以相同的速率扫描。例如,假设所有接触点电压具有零初始值。则以下两个Quasistationary命令满足此条件:cppQuasistationary ( 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命令违反此条件:cppQuasistationary ( 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命令的外推信息。解决方案变量的值在两个
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 } }外推的最小步长
Quasistationary 或 Transient 命令包含选项 InitialStep、Increment、Decrement、Maxstep 和 Minstep。Sentaurus Device 使用以下迭代过程:
过程 1:
- 通过从先前步长的解外推获得给定步长的初始猜测(即它依赖于 t₀、t₁ 和 step)。
- Sentaurus Device 使用牛顿迭代方法获得 t=t₂ 的解。
- 如果此迭代过程收敛,则 t₀=t₁, t₁=t₂, step=NewStep(有计算 NewStep 的特殊算法)。转到步骤 1。
- 否则 step=step/Decrement,如果 step > Minstep(这是 Quasistationary 参数)。转到步骤 1。
- 否则(即 step < Minstep)过程 1 未收敛。在这种情况下,Sentaurus Device 退出
Quasistationary或Transient命令。
有时,对于小步长,过程 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 曲线追踪自动进行,直到连续性电极上的电流或电压前进到用户定义的连续性窗口之外(使用参数 MinVoltage、MaxVoltage、MinCurrent 和 MaxCurrent 指定)。例如:
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)。您可以通过指定参数 MaxVstep、MaxIstep 和 MaxIfactor 来限制步长。这些参数限制 Sentaurus Device 从 I-V 曲线的一个点到下一个点计算的投影 ΔV 和 ΔI。连续点之间的实际最大间距可能与这些限制略有不同。MaxVstep 和 MaxIstep 参数分别表示最大电压和电流步长,而 MaxIfactor 表示允许电流在一步中增加的最大因子。
在连续性过程中,Sentaurus Device 自动计算连接到连续性电极的负载电阻的最佳值。可以使用 MinRload 和 MaxRload 参数指定计算电阻的限制。
成功使用连续性方法追踪 I-V 曲线取决于局部斜率计算的准确程度。在低偏置下,连续性电极上的电流可能很小且有噪声。这可能导致斜率计算不准确,有时会导致连续性方法回溯。在这种情况下,可能需要指定参数 Vadapt 或 Iadapt 或两者,它们分别表示在开启自适应算法之前必须达到的最小电压和电流。从 MinVoltage 到 Vadapt 以及从 MinCurrent 到 Iadapt,自适应算法被关闭,模拟通过连接到连续性电极的固定值电阻进行简单电压扫描进行。默认固定电阻值为 0.001 Ω,可以使用 Rfixed 参数更改。
4.5.2 混合模式中的连续性
连续性方法可用于混合模式模拟;但是,连续性接触点不得连接到任何电路节点。在混合模式中使用连续性时,必须在 Name 参数前加上器件实例。
以下示例考虑一个标识符为 mos1 的器件,电极名为 source、drain、gate 和 substrate。mos1 的器件实例(在 System 部分中给出)为 d1。如果 drain 应用作连续性电极,则不应在连接列表中将其连接到任何电路,并且必须使用 d1.Name 在 Continuation 部分中识别:
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}}