Appearance
?6 章:数值和软件相关问题
来源:
sdevice_ug.pdf?6 章(W-2024.09? 页码范围?07-246 ?
本章讨论没有实际世界对应物的仿真技术问题?
要成功执行实验,除了理解被研究的器件外,实验者必须理解、控制和熟练使用测量设备。对数值实验也是如此。本章描述了 Sentaurus Device 中用于数值实验的设备:线性和非线性求解器、精度控制、收敛监控以及其他与软件相关的设施。有关数值的额外背景信息见第 38 章(?1222 页)?
6.1 命令文件结构
Sentaurus Device 命令文件分为多个部分,这些部分由关键字和大括号定义(见图 13)。设备由 File、Electrode、Thermode ?Physics 部分定义。求解方法由 Math ?Solve 部分定义。两个部分用于混合模式电路和器件仿真,见?3 章(?96 页)。本部分重点介绍定义单器件仿真的输入?
*?13:Sentaurus Device 命令文件的不同部?
File {...}
Electrode {...}
Thermode {...}
Physics {...}
Plot {...}
CurrentPlot {...}
Math {...}
Solve {...}6.2 插入文件
Sentaurus Device 的命令文件中提供?Insert 指令来合并其他文件:
Insert = "filename"该指令可以在命令文件的顶层或下列任何部分内出现:
- CurrentPlot
- Device
- Electrode
- File
- Math
- MonteCarlo
- NoisePlot
- NonlocalPlot
- Physics
- Plot
- RayTraceBC
- Solve
- System
- Thermode
使用以下搜索策略来定位文件:
- 首先检查当前目录(优先级最高)?
- 如果环境变量 SDEVICEDB 存在,则检查与该变量关联的目录(优先级中等)?
- 检?STRELEASE/lib/sdevice/MaterialDB 目录(优先级最低)?
*注意? Insert 指令也可用于参数文件(见?73 页的物理模型参数)?
6.3 Solve 部分:仿真如何进?
Solve 部分是命令文件中唯一命令顺序很重要的部分。它由一系列要执行的仿真命令组成,这些命令根据命令文件中命令的顺序依次激活?
许多 Solve 命令是高级命令,具有较低级命令作为参数。图 14 显示了这些不同命令级别的示例?
- Coupled 语句(基础命令)用于求解一组方程?
- Plugin 语句用于在多个耦合方程之间进行迭代?
- Quasistationary 语句用于将解从一个边界条件斜坡到另一个边界条件?
- Transient 语句用于运行瞬态仿真?
此外,可以使?ACCoupled 语句执行小信?AC 分析。可以使?Continuation 语句执行高级续集方法斜坡。(ACCoupled ?Continuation 语句分别在第 159 页的小信?AC 分析和第 145 页的续集命令中介绍。)
?14:不同级别的 Solve 语句
Ramping Commands
Iterative Level Base Commands Base Options
Quasistationary Super
Continuation Plugin Pardiso
ILS
Transient Blocked
ACCoupled
Coupled Poisson
Electron
Hole
Temperature
eTemperature
hTemperature
eQuantumPotential
hQuantumPotential6.4 非线性迭?
本部分讨论非线性迭代?
6.4.1 Coupled 语句
该语句激活一个牛顿类求解器来求解一组方程。可用的方程包括泊松方程、连续性方程和不同的热方程和能量方程。Coupled 语句的语法为?
Coupled ( <optional parameters> ){ <equation> }或:
<equation>最后一种形式仅使用关键字方程,等效于使用默认参数的耦合和单个方程?
例如,如果使用以下命令,静电势和电子密度从泊松方程和电子连续性方程的分辨率计算(使用默认参数):
Coupled {Poisson Electron}如果使用以下命令,仅使用泊松方程计算静电势:
PoissonCoupled 语句基于牛顿求解器。这是一种迭代算法,在每个仿真步骤中求解一个线性系统。该命令的参数确定:
- 允许的最大迭代次?
- 所需解的精度
- 必须使用的线性求解器
- 是否允许解在多个迭代中恶?
这些参数及其他参数汇总在?1780 页的?349 中?
以下示例将上?Coupled {Poisson Electron} 示例限制?10 次迭代,并使?ILS 线性求解器?
Coupled ( Iterations=10 Method=ILS ) {Poisson Electron}*注意? 当耦合迭代不在斜坡过程内时,使用大量迭代。这使牛顿算法能够尽可能进行。在斜坡语句内(例如,Transient ?Quasistationary),最大迭代次数应限制在约 10 次左右,因为如果牛顿过程未快速收敛,最好使用较小的步长重新尝试,而不是继续进行不太可能收敛的迭代过程?
最好的线性方法取决于所求解问题的类型和大小。第 1669 页的?229 列出了求解器和为其设计的问题大小?
6.4.2 收敛和误差控?
Coupled 语句对以?Math 参数敏感,这些参数确定耦合解何时发散或收敛?
- Iterations
- RhsAndUpdateConvergence
- RhsFactor、RhsMin、RhsMinFactor、RhsMax、RhsMaxQ
- CheckRhsAfterUpdate
- RelErrControl
- Digits
- ErrRef
- Error
- UpdateIncrease、UpdateMax
全局 Math 部分中的参数 Iterations ?Coupled 语句?Iterations 设置默认值。Iterations 限制牛顿迭代次数。如果正在求解的方程收敛速度为二阶,迭代次数可能超过此限制。对?Iterations=0,仅执行一次迭代?
Sentaurus Device 中的解收敛是通过在每次牛顿迭代时计算和检查以下量来确定的?
- RHS 范数是右边项的范数(即方程的残差)?
- 更新误差是方程变量更新的度量?
这些量在解的过程中为每个牛顿迭代打印在日志文件中。默认情况下,如?RHS 范数 < RhsMin 或更新误?< 1,则认为解收敛。如果指定了 RhsAndUpdateConvergence,则必须同时满足这两个条件。但是,如果 RHS 范数 < RhsMinFactor × RhsMin,即使不满足更新误差条件,解也被接受为收敛?
在单个牛顿步骤中,如?RHS 范数增加超过 RhsFactor 的因子,则认为解发散。如?RHS 范数超过 RhsMax(对于瞬态仿真)?RhsMaxQ(对于非瞬态仿真),解也被认为已发散?
指定 CheckRhsAfterUpdate 强制 Sentaurus Device 在满足更新误差条件后?RHS 范数执行额外检查。如?Sentaurus Device 评估?RHS 范数可以更小,将执行额外的迭代。这有时会改善解的质量,可能导致更好的整体收敛?
*注意? CheckRhsAfterUpdate 通常不增加超过一到两个额外迭代。但是,当收敛缓慢或使用扩展精度精度时,如果 RHS 范数持续减小,此选项可能导致多个额外迭代。在这种情况下,可能需要更大的 Iterations 值。在所有情况下,Sentaurus Device 在达到最大迭代次数时将接受收敛的解,即使 RHS 范数仍在改进?
Sentaurus Device 中使用两种更新误差计算公式,取决于是否指定了 RelErrControl(默认)?-RelErrControl。对于两种公式,Sentaurus Device 都试图确定方程变?x 的值,使得计算的更?Δx 足够小以满足误差条件?
其中?
- 是相对误差?
- 是参考误差参数?
- 是绝对误差参数?
- 是方程变量的缩放常数?
对于 x 的大值(),方程 32 中的条件变成相对误差条件?
相反,对?x 的小值(),它们变成绝对误差条件?
因此,方?32 确保了绝对和相对误差控制之间的平滑过渡?
为了说明所有顶?j 的所有耦合方程 i,Sentaurus Device 扩展方程 32 中的条件并定义更新误差为?
其中?
- 是耦合方程的数量?
- 是为方程 i 求解的顶点数?
的值通过指定关键?Digits 来定义。x_ref ?σ 的值可以通过关键?ErrRef ?Error 为每个方程独立定义或共同定义。默认值见?1783 页的?351?
参数 UpdateMax ?UpdateIncrease 检测牛顿算法的发散。如果更新误差大?UpdateMax,或其从牛顿步骤到牛顿步骤的增加超过 UpdateIncrease,则牛顿被认为已发散?
6.4.3 阻尼牛顿迭代
线搜索阻尼和 Bank-Rose 阻尼是两种不同的阻尼方法。这些方法通过以比普通牛顿迭代更小的数量改变解,试图在远离最终解的地方实现耦合迭代的收敛。阻尼对于找到初始解很有用,但在 Quasistationary ?Transient 斜坡期间,通常更优选使用更小的时间步长?
线搜索阻尼默认关闭。当 LineSearchDamping 的值设置为小于 1 时激活。此值确定法向牛顿更?Δx 可以被阻尼的最小因子。阻尼方法在每个牛顿步骤中自动确定实际阻尼因子。如果实际因子低?LineSearchDamping 指定的最小值,则线搜索阻尼被认为失败并对以下牛顿迭代停用?
Bank-Rose 阻尼是一种根?RHS 如何变化自动调整更新大小的方?[1]。有时可用于在采取大偏置步骤时改善收敛?
当迭代次数超?Math 部分中用 NotDamped 指定的值(默认?1000)时,Bank-Rose 阻尼被激活?
LineSearchDamping ?NotDamped 在全局 Math 部分?Coupled 语句的参数中设置。前者规范为后者设置默认值?
6.4.4 导数
对于大多数问题,牛顿迭代在具有完全导数时收敛最好。此外,对于小信号分析及噪声和波动分析,使用完全导数是强制性的。因此,默认情况下,Sentaurus Device 考虑完全导数。对于罕见的情况下省略导数改善收敛或性能,在全局 Math 部分中使用关键字 -AvalDerivatives ?-Derivatives 关闭迁移率和雪崩导数?
导数通常是通过分析计算的,但可以通过指定 Numerically 使用数值计算。这不能?Blocked 方法一起工作,通常不推荐?
6.4.5 不完全牛顿算?
某些简单的仿真(如 Id-Vg 斜坡)可以通过使用修改的牛顿算法加速(见第 1255 页的完全耦合解决方案以获取标准牛顿算法的描述)。不完全牛顿算法,也称为牛顿-Richardson 方法,试图重?Jacobian 矩阵以避免计算导数和计算矩阵因式分解的开支?
它可以在全局 Math 部分激活:
Math {
IncompleteNewton
...
}或者可以用?Coupled 语句中的选项?
Coupled (IncompleteNewton) {poisson electron hole}如果满足以下两个条件,则重用 Jacobian 矩阵。条件一:Rhs 的第 k 次迭代绝对值不大于 RhsFactor 乘以 Rhs 的第 k-1 次迭代绝对值。条件二:Update 的第 k 次迭代绝对值不大于 UpdateFactor 乘以 Update 的第 k-1 次迭代绝对值?
其中 k 表示迭代索引,Rhs 表示非线性方程的右边项,Update 表示牛顿步骤。Rhs_k ?Update_k 的值在 Sentaurus Device 的日志文件中牛顿迭代期间?Rhs 列和 step 列中显示?
可以将参?RhsFactor ?UpdateFactor 指定?IncompleteNewton 关键字的参数。例如:
IncompleteNewton (UpdateFactor=0.1 RhsFactor=10)默认值为 UpdateFactor=0.1 ?RhsFactor=10?
6.4.6 混合模式中可用的附加方程
为混合模式问题引入了 Contact、Circuit、TContact ?TCircuit 方程?
- 关键?Circuit 激活电路模型和节点的电气电路模型的解?
- 关键?Contact 激活接触处电气接口条件的解?
- 类似地,TContact ?TCircuit 激活热接口条件和热电路的解?
默认情况下,不需要在 Coupled 语句中显式定义关键字 Contact ?Circuit,因?Poisson 方程也覆盖接触和电路域。以类似方式,不需要在 Coupled 语句中显式定义关键字 TContact ?TCircuit,因?Temperature 方程也覆盖热接口条件和热电路域?
但是,这些语句仅?Poisson(或 Temperature)方程与附加方程(例?Poisson、Electron、Hole、Temperature)配对时有效?
因此,以下语句对是等效的?
示例 1
Coupled { Poisson Electron Hole }
Coupled { Poisson Electron Hole Circuit Contact }示例 2
Coupled { Poisson Temperature }
Coupled { Poisson Temperature Circuit Contact TCircuit TContact }如果仅求?Poisson(或 Temperature)方程或单个设备实例 device1.Poisson(或 device1.Temperature),?Contact(或 TContact)和 Circuit(或 TCircuit)方程不会自动包含在内。无论是否定义了 NoAutomaticCircuitContact,都适用?
例如,以下语句仅求解 device1 ?Poisson 方程?
Coupled { device1.Poisson }如果为多个设备实例指定了 Poisson 方程,则为每个设备实例求解它。每个设备实例的接触和电路方程也自动包含?
例如,以下两个语句是等效的:
Coupled { device1.Poisson device2.Poisson }
Coupled { device1.Poisson device1.contact device2.circuit
device2.Poisson device2.contact device2.circuit }*注意? 当在 Coupled 语句中定义了一组设备实例方程时,Sentaurus Device 不会自动包含紧凑模型电路方程。例如,以下语句是等效的?
Coupled { device1.Poisson device1.Electron device1.Hole
device2.Poisson device2.Electron device2.Hole
Circuit }
Coupled { device1.Poisson device1.Electron device1.Hole
device1.circuit device1.contact
device2.Poisson device2.Electron device2.Hole
device2.circuit device2.contact
Circuit }必须在两种情况下显式包含 Circuit 关键字以包含 Coupled 语句中所有紧凑模型的电路方程。相同的情况适用于求?Temperature 方程,其中必须显式定?TCircuit 以包含热电路方程。例如,以下语句是等效的?
Coupled { device1.Poisson device1.Temperature
device2.Poisson device2.Temperature
Circuit TCircuit }
Coupled { device1.Poisson device1.Temperature
device1.circuit device1.contact
device1.tcircuit device1.tcontact
device2.Poisson device2.Temperature
device2.circuit device2.contact
device2.tcircuit device2.tcontact
Circuit TCircuit }如果关键?NoAutomaticCircuitContact 出现?Math 部分,Sentaurus Device 不会自动添加电路和接触方程(见图 15)?
?15:电路、接触、Poisson、Electron ?Hole 关键字的范围
默认? NoAutomaticCircuitContact
Circuit Circuit
Poisson Poisson
Electron <-> Electron
Hole Hole
Contact6.4.7 在混合模式中选择单个设备
默认使用方程关键字(?Poisson)激活给定所有设备的方程。使用复杂的多设备系统,这样的操作并不总是可取的,特别是当尚未找到完全一致的解决方案时。Sentaurus Device 允许通过以句号分隔的设备实例名称添加到方程关键字后来将每个方程限制到特定设备。语法为?
<identifier>.<equation>设备特定解用于获得整个系统的初始解。例如,使用两个或更多设备,通常首先单独求解每个设备然后耦合全部更好。这样的方案可以写为?
System {
... device1 ...
... device2 ...
}
Solve {
# 求解电路方程
Circuit
# 为每个设备求?Poisson 和完全耦合
Coupled { device1.Poisson device1.Contact }
Coupled { device1.Poisson device1.Contact
device1.Electron device1.Hole }
Coupled { device2.Poisson device2.Contact }
Coupled { device2.Poisson device2.Contact
device2.Electron device2.Hole }
# 在所有设备上求解完全耦合
Coupled { Circuit Poisson Contact Electron Hole }
}6.4.8 松弛牛顿方法
松弛牛顿方法允许 Sentaurus Device 考虑既没有收敛也没有由最终牛顿迭代发散的解是否应基于松弛收敛条件被接受为收敛解。此方法适用?Quasistationary、Transient ?Continuation 斜坡?
松弛收敛条件从用户在全局 Math 部分?AcceptNewtonParameter (ANP) 语句中指定的松弛牛顿参数建立。这些参数用于计算将用于测试松弛收敛?ANP RhsMin ?ANP 误差?
?Math 部分中使?AcceptNewtonParameter 语句,支持以下参数:
- RhsAndUpdateConvergence:使?-RhsAndUpdateConvergence 放松收敛
- RhsMin=<float>:用于松弛收敛的 ANP RhsMin
- UpdateScale=<float>:将更新误差乘以给予松弛 ANP 误差
- RelErrControl:为 ANP 误差计算指定误差控制方法
- Digits=<integer>:ANP 误差计算中的相对误差数字
- ErrRef:用?ANP 误差计算的参考误差参?
- Poisson, Electron, Hole
- Temperature, eTemperature, hTemperature
- eQuantumPotential, hQuantumPotential
- Error:用?ANP 误差计算的绝对误差参?
- Poisson, Electron, Hole
- Temperature, eTemperature, hTemperature
- eQuantumPotential, hQuantumPotential
- InvokeAtDivergence:允许发散解的松弛收?
要激活松弛牛顿方法,?Solve 部分?Quasistationary、Transient ?Continuation 语句中指?AcceptNewtonParameter,连?ReferenceStep(Continuation 除外)?
例如?
Solve { ...
Quasistationary ( ...
AcceptNewtonParameter ( ReferenceStep = 1.e-3 )
) { Coupled { ... } }
}或:
Solve { ...
Transient ( ...
AcceptNewtonParameter ( ReferenceStep = 1.e-9 )
) { Coupled { ... } }
}或:
Solve { ...
Continuation ( ...
AcceptNewtonParameter
) { Coupled { ... } }
}在仿真期间,如果 Quasistationary ?Transient 步长大小降至 ReferenceStep 指定值以下,Sentaurus Device 将开始为每个牛顿迭代期间的解计算 ANP 误差。这将用于确定如果使用标准误差条件解失败时是否已实现松弛收敛。对?Continuation,松弛收敛检查对所有步长激活?
松弛收敛被认为是在计算的 ANP 误差 < 1 ?RHS 范数 < ANP RhsMin 时为任何迭代实现,如果松弛收敛被触发,Sentaurus Device 将存储从在松弛收敛被触发后出现的最小标准更新误差的迭代获得的解。在大多数情况下,这?最?解的合理选择?
注意以下内容?
- 松弛牛顿参数仅传递给下一?Coupled 语句,即 Plugin 语句中的 Coupled 语句不使用松弛牛顿参数?
- 仅指定的参数值传递给 Coupled 语句,即不使用默认值?
6.4.9 Plugin 命令
Plugin 命令对两个或更多 Coupled 语句控制迭代循环。当完全耦合方法会使用太多给定机器资源时,或当问题尚未求解且方程的完全耦合会发散时使用?
Plugin 语法定义为:
Plugin ( <options> ) ( <list-of-coupled-commands> )Plugin 命令可以具有任何复杂性,但通常仅少数组合有效。一个标准形式是 Gummel 迭代,其中每个基本半导体方程连续求解?
使用 Plugin 命令,这写为?
Plugin { Poisson Electron Hole }?1790 页的?357 总结?Plugin 的选项?
Plugin 命令可与其他 Plugin 命令一起使用。例如:
Plugin{ Plugin{ ... } Plugin { ... } }?16 说明了相应的循环结构。Plugin 命令的层次允许创建更复杂的迭代求解模式?
*?16:Plugin 命令层次的示?
Plugin
├── Plugin
└── Plugin6.5 线性求解器
Math 部分的参数用于求解算法是设备独立的,必须仅在基础 Math 部分中出现。这些可按求解器类型分组。线性求解器的控制参数是 Method ?SubMethod。关键字 Method 选择要使用的线性求解器,关键字 SubMethod 为块分解方法选择内部方法(见?1669 页的?229 获取可用的线性求解器)?
Method 的默认值是阻止分解求解?Blocked。SubMethod 的默认值是 2D 设备?Super?D 设备?ILS(set=1)?
关键?ACMethod ?ACSubMethod 确定用于 AC 分析的线性求解器?
*注意? ACMethod=Blocked ?ACMethod 的唯一有效选择。但是,任何可用的线性求解器都可以为 ACSubMethod 选择?
?229 列出了线性求解器 PARDISO 的可用选项。选项在求解器规范后的括号中指定:
Method = ParDiSo (NonsymmetricPermutation IterativeRefinement)默认选项 NonsymmetricPermutation?IterativeRefinement ?-RecomputeNonsymmetricPermutation 在速度和精度之间提供最佳折衷。要改善速度,选择 -NonsymmetricPermutation?
要改善精度,代价是速度,激?IterativeRefinement、RecomputeNonsymmetricPermutation 或两者?
所?ILS 选项可在全局 Math 部分中的 ILSrc 语句内指定:
Math {
ILSrc = "
set (...) {
iterative (...);
preconditioning (...);
ordering (...);
options (...);
};
...
"
...
}见第 1669 页的?229 获取额外?ILS 选项?
线性求解器 PARDISO ?ILS 支持选项 MultipleRHS 来求解具有多个右边项的线性系统。此选项仅适合 AC 分析。如果选择此选项,ILS 可能产生小并行加速或略微更准确的结果?
使用 Math 选项 PrintLinearSolver 获取关于所使用线性求解器的额外信息?
对于 1D ?2D 结构,线性求解器 SUPER 默认使用。对?3D 结构,ILS 默认使用 set (1)?
6.6 非局部网?
非局部网格是一维特殊用途网格,Sentaurus Device 需要它来实现一维非局部物理模型。非局部网格由非局部线组成。每条非局部线由非局部网格点细分,以允许构成物理模型的方程离散化。Sentaurus Device 自动执行此细分以获得非局部网格和法向网格之间的最佳插值?
1D 薛定谔方程(见第 377 页的 1D 薛定谔方程)、非局部隧穿模型(见第 863 页的接触、接口和结处的非局部隧穿)和陷阱隧穿模型(见第 607 页的陷阱非局部隧穿)使用非局部网格。这两个模型的文档在特定模型的上下文中介绍非局部网格的使用,并仅限于典型情况。本部分详细描述非局部网格的构造?
6.6.1 指定非局部网?
在全局 Math 部分中,使用关键?Nonlocal,后跟给出非局部网格名称的字符串和控制非局部网格构造的选项列表来指定非局部网格。可以指定任意数量的非局部网格;单个规范是独立的?
在以下示例中,Sentaurus Device 构造名?GateNonLocalMesh 的非局部网格,该网格由距门电极 5 nm 的半导体顶点的非局部线组成?
Math {
Nonlocal "GateNonLocalMesh" (
Electrode="Gate"
Length=5e-7
)
}在以下示例中,Sentaurus Device 构造名?for_tunneling 的非局部网格,该网格由连接区域 gateoxide 不同两侧的线组成?
Math {
Nonlocal "for_tunneling" (
Barrier(Region="gateoxide")
)
}有关可用选项的摘要,见第 1671 页的?232。有关非局部网格构造的全面描述,见?224 页的构造非局部网格?
6.6.2 可视化非局部网?
Sentaurus Device 可以可视化它构造的非局部网格。此函数用于验证构造的非局部网格是实际意图的网格。有关可视化定义在非局部网格上的数据,见第 223 页的可视化定义在非局部网格上的数据?
要可视化非局部网格,?Plot 部分中使用关键字 NonLocal(见?191 页的设备绘图)。关键字导致 Sentaurus Device 将两个矢量字段写入绘图文件,这些字段代表在设备中构造的非局部网格?
对于存在非局部线的每个顶点(法向网格的),第一个矢量字?NonLocalDirection 包含一个矢量,该矢量指向从顶点的非局部线末端在为其构造非局部线的参考表面方向上。第二个字段 NonLocalBackDirection 中的矢量指向非局部线的另一端的顶点。两个矢量的单位是微米?
对于不存在非局部线的顶点,两个矢量都是零。对于存在多条非局部线的顶点,Sentaurus Device 绘制这些线之一的矢量?
6.6.3 可视化定义在非局部网格上的数?
要可视化定义在非局部网格上的数据:
- ?File 部分,使?NonLocalPlot 关键字指定文件名?
- 在命令文件的顶层,指?NonLocalPlot 部分。那里,NonLocalPlot 后跟括号中的坐标列表和大括号中的数据集列表?
Sentaurus Device 在与普通绘图相同的时间写入非局部绘图。非局部绘图文件具有扩展名 .plt ?.tdr?
Sentaurus Device 选择接近 NonLocalPlot 部分中指定的坐标的非局部线以用于输出。NonLocalPlot 部分中给出的数据集是可在 Plot 部分(见?191 页的设备绘图)中使用的数据集?
NonLocalPlot 不支持选项 /Vector。此外,薛定谔方程提供仅可用?NonLocalPlot 的特殊用途数据集(见?381 页的可视化解)?
除了显式指定的数据集外,Sentaurus Device 自动在输出中包含 Distance 数据集。它提供沿非局部线的坐标。Distance 数据集中的值以 µm 为单位测量。为其构造非局部网格线的接界或接触位于零,其网格顶点位于正坐标处?
以下示例绘制接近坐标 (0, 0, 0) ?(0, 1, 0) 的非局部线的电子和空穴密度?
NonLocalPlot(
(0 0) (0 1)
){
eDensity hDensity
}6.6.4 构造非局部网?
非局部网格在全局 Math 部分指定?
Math {
NonLocal <string> (
Barrier(...)
RegionInterface=<string>
MaterialInterface=<string>
Electrode=<string>
...
)
}NonLocal 后跟的字符串是非局部网格的名称。名称将非局部网格与定义在其上的物理模型相关联?
Sentaurus Device 支持两种方式指定非局部网格:
- 指定构成隧穿屏障的区域和材料(关键字 Barrier)?
- 指定参考表面(关键?RegionInterface、MaterialInterface ?Electrode)?
屏障规范更简单但不太通用,仅适合用于直接隧穿通过假设为绝缘的屏障的非局部网格?
使用屏障的规?
作为 Barrier 的选项,使用任意数量的 Region=<string> ?Material=<string> 规范指定属于隧穿屏障的所有区域。Sentaurus Device 连接屏障的每一侧与任何其他与非局部线。这里,边意味着屏障表面的导电连接部分?
默认情况下,半导体区域、金属区域和电极被认为是导电的。要强制将特定区域(如宽带隙半导体区域)视为不导电,使用选项 -Endpoint,它接受与屏障相同语法的区域和材料列表作为选项?
以下示例导致区域 buffer1 ?buffer2 以及所?GaN 区域在构造非局部网?NLM 时被视为不导电:
Nonlocal "NLM" (
...
-Endpoint(Material="GaN" Region="buffer1" Region="buffer2")
)使用 Length=<float>(以厘米为单位)限制非局部线的长度(以抑制非常长的隧穿路径)?
使用参考表面的规范
RegionInterface、MaterialInterface ?Electrode 指定区域界面名称、材料界面名称或电极名称。所有界面和电极共同形成参考表面,确定在设备中的何处构造非局部网格?
非局部线在几何上最短路径上将法向网格的顶点链接到参考表面。参?NonLocal ?Length 确定顶点到参考表面的最大距离(以厘米为单位)。Sentaurus Device 不为 Length 提供默认值;所有非局部网格必须显式指?Length?
Length ?Permeation 限于参数 NonLocalLengthLimit 的值,该参数在全局 Math 部分中以厘米为单位指定,默认?10?。此参数用于捕获用户意外以微米而非厘米为单位指定长度的情况?
非局部线在几何上最短路径上连接顶点到参考表面的属性是基本的。如果本部分中描述的任何其他规则抑制了此路径的非局部线构造,但较长的连接遵循所有这些限制,Sentaurus Device 仍然不使用此连接来构造替代非局部线?
参数 Permeation 指定 Sentaurus Device 沿着参考表面扩展非局部线的长度,向其构造线的相反方向。Permeation 默认为零。Sentaurus Device 决不延伸设备外或进入?-Permeable 标记的区域(见下文)的线。扩展不?Transparent ?Endpoint 选项(见下文)影响?
Direction 参数指定非局部线应该大约具有的方向。偏离指定方向超?MaxAngle 的方向的非局部线被抑制。如?Direction 是零矢量?MaxAngle 超过 90(这是默认值),非局部线可以具有任何方向。方向矢量的长度和符号均无关紧要?
Discretization 指定非局部网格顶点的最大间距。必要时,Sentaurus Device 进一步细化在非局部线上创建的网格,根据内置规则产生不超过 Discretization 要求的间距?
标记 Transparent、Permeable、Endpoint ?Refined、以及它们的否定指定控制非局部网格构造的区域或材料标记。每个标记可以以两种不同方式指定?
- 作为全局 Math 部分中主规范的选项,后跟确定标记应用位置的区域或材料规范列表?
- 作为特定于区域或材料?Math 部分?NonLocal 的选项。在后一种情况下,规范的适用性的区域或材料是 Math 规范的位置?
后一种风格的规范提供默认值,可由前一种风格的规范覆盖?
非局部线在网格顶点和参考表面之间的部分必须不通过?-Transparent 标记的区域。默认情况下,所有区域都?Transparent。对于设备外部,标记 Outside 具有相同含义;此标记是主 NonLocal 规范的选项?
-Permeable 标记限制跨越参考表面的非局部线上的扩展。默认情况下,所有区域都?Permeable?
对于?-Endpoint 标记的区域,Sentaurus Device 不构造在此区域中结束的非局部线。默认值是绝缘区域?-Endpoint 和其他区域的 Endpoint?
在用 -Refined 标记?Refined 的区域内,在元素边界处的非局部网格点生成被抑制。默认情况下,所有区域都?Refined?
6.6.5 1D 薛定谔方程的特殊处理
出于性能原因,Sentaurus Device 仅在仍然覆盖所有为其构造了非局部线的法向网格顶点的减少非局部线子集上求?1D 薛定谔方程(见第 377 页的 1D 薛定谔方程)根据上面概述的规则?
为了避免人工几何量子化,Sentaurus Device 扩展用于 1D 薛定谔方程的非局部线,这些线小于 Length 以达到完整长度。Sentaurus Device 决不延伸设备外或进入?-Permeable 选项标记的区域(见上文)的线。扩展不?Transparent ?Endpoint 选项影响?
对于未用 -Refined ?-Endpoint 标记的区域中的非局部线段,Sentaurus Device 计算与法向网格的盒子的交点。Sentaurus Device 需要此信息来插值来?1D 薛定谔方程的结果回到法向网格。因此,在指定了 -Refined ?-Endpoint 的区域中?D 薛定谔密度修正不可用,即使区域由非局部线覆盖?
6.6.6 非局部隧穿模型的特殊处理
Sentaurus Device 计算非局部线与盒子的交点(见?1222 页的离散化)。为了进行此操作,某些线可能变得?Length 更长。非局部隧穿模型使用交点来限制 Sentaurus Device 必须执行的积分的空间范围以计算来自特定顶点的隧穿的贡献(见第 863 页的接触、接界和结处的非局部隧穿)。对于与?-Endpoint 标记的区域相邻的网格点,积分范围扩展到该区域中以拾取进入它的 Fowler-Nordheim 电流?
对于仅用于非局部隧穿的非局部网格,?Permeation 为零时,Sentaurus Device 假设非局部线以无穷小长度穿过参考平面。因此,如果为与参考平面相邻的区域之一指定?-Endpoint,Sentaurus Device 抑制指向该区域的非局部线?
如果 Permeation 为正,对于非金属接界处的非局部线,Sentaurus Device 切换到类似于用于薛定谔方程的非局部网格构造模式:Sentaurus Device 仅构造覆盖必须覆盖的所有顶点所需的许多线,并扩展所有这些线至其最大长度。此外,对于不用于隧穿至陷阱的非局部网格,隧穿的积分范围覆盖整条线?
以这种方式,?–Endpoint ?–Refined 标记的线段的隧穿被分配给在那些段外立即穿过的盒子的顶点,以中等方式拾?Fowler-Nordheim 电流如用?Permeation=0 的线构造模式?
6.6.7 未命名网?
为了向后兼容性,可以在接界特定或电极特定?Math 部分中指定非局部网格。对于这种规范,网格的位置是 Math 部分的位置,因此不得作为 NonLocal 的选项出现任何接界或电极规范?
此外,非局部网格的名称必须被省略。物理模型通过在与非局部网格为其构造的相同接界或电极特定的 Physics 部分中激活它们而与非局部网格相关联?
对于未命名的非局部网格,具有陷阱隧穿模型的顶点(见第 607 页的陷阱非局部隧穿)被连接,无论区域的材料或 Endpoint 规范如何?
6.6.8 性能建议
为了限制非局部隧穿模型的负面性能影响,限制非局部线数很重要。为此,最重要的是,选择 Length ?Permeation 仅与必要一样长。选项 –Endpoint 可用于抑制构造到你知道提前不会接收大量隧穿电流的区域的线。选项 -Transparent 允许你忽视隧穿通过具有相对较高隧穿屏障的材料,例如肖特基接触处的氧化物或为其激活了非局部隧穿的异质界面?
另一个使用选项 -Transparent 的是在异质界面处,不存在隧穿到材料具有较低带边的一侧(因为没有屏障可以隧穿)。为了限制非局部线的构造到通过具有较大带边材料的线,通过使用 -Transparent 将较低带边材料声明为不透明?
选项 -Refined 不减少非局部线的数量,但它可以减少 Jacobian 矩阵的大小。选项 -Refined 对绝缘区域最有用,其中带边配置文件大约是线性的?
6.7 监控收敛行为
?Sentaurus Device 有收敛问题时,知道在设备的哪些部分以及对于哪些方程误差特别大可能很有帮助。有了这种信息,更容易调整网格或使用的模型以改善收敛?
Sentaurus Device 可以打印每个方程的右边项范数(见?228 页的 PrintRhsPerEquation)。此外,在设备中出现最大错误的位置可以打印到日志文件(见第 229 页的 CNormPrint)。这提供了有限的信息并有可忽视的性能影响。Sentaurus Device 也可以在每个牛顿步骤后为整个设备绘制解误差信息(见第 229 页的 NewtonPlot)。此信息是全面的,但可以生成许多文件并花费大量时间来写入?
这些方法允许访问 Sentaurus Device 的内部数据。因此,在两种情况下,输出是实现相关的。其正确解释可在不同 Sentaurus Device 版本之间更改?
6.7.1 每个方程?PrintRhsPerEquation
RHS 范数每个方程的打印通过在全局 Math 部分中使?PrintRhsPerEquation 关键字激活,如下所示:
Math {
PrintRhsPerEquation
}然后牛顿迭代的标准数据通过侧面打印右边项的范数和方程的名称扩展。注意,因为 Sentaurus Device 使用最大范数来评估 RHS,并排打印的 RHS 范数、迭代计数旁的集体值由单个方程确定?
显示所解决 Poisson、Electron ?Temperature 方程时激活分数的日志信息摘录如下?
迭代 |Rhs| 因子 |步骤| 误差 #内部 #迭代 时间
0 2.72e+06 0.00
Poisson 2.72e+06
Electron 7.30e+04
晶格-H 2.80e+05
1 1.00e+00 2.08e-03
Poisson 2.80e+05
Electron 1.25e+04
晶格-H 1.88e+00
2.55e+06 0.016.7.2 CNormPrint
要获取基本错误信息,在全局 Math 部分指定 CNormPrint 关键字。然后,在每个牛顿步骤后和对于每个求解方程,Sentaurus Device 打印以下到标准输出:
- 根据?212 页的方程 34 出现在设备任何地方的方程的最大误?
- 出现最大误差的顶点
- 顶点的坐?
- 该顶点的解变量的当前?
6.7.3 NewtonPlot
Sentaurus Device 可以在每个牛顿步骤后将解变量、误差、右边项和解更新的空间值写?NewtonPlot 文件。NewtonPlot 文件然后可以读入 Sentaurus Visual 进行检查。要使用此函数:
?File 部分中使?NewtonPlot 关键字指定绘图的文件名。此名称可包含最多两?C 样式整数格式指定符(例如?d)。如果存在,对于文件名生成,第一个被当前牛顿步骤中的迭代数替换,第二个被到目前为止仿真中的牛顿步骤数替换。Sentaurus Device 不对任何特定文件名扩展强制,但在混合模式中将设备实例名预先添加到文件名?
Sentaurus Device 在执?Quasistationary ?Transient 命令时,当步长降至某个值以下时,写入牛顿信息到 NewtonPlot 文件。默认情况下,条件是步长 < 2 × MinStep,其?MinStep 是在 Quasistationary ?Transient 命令中设置的步长的下限。此条件通常在仿真即将失败前立即发生?
或者,使用 NewtonPlotStep 参数指定步长条件。NewtonPlotStep 可以指定为命令文件的 Math 部分?NewtonPlot 关键字的选项,在这种情况下,它适用于所?Quasistationary ?Transient 命令。它也可以指定为特定 Quasistationary ?Transient 命令的选项,在这种情况下,它仅适用于该特定命令?
默认情况下,满足步长条件时,Sentaurus Device 仅将解变量的当前值写?NewtonPlot 文件。额外数据可以通过?Math 部分中指?NewtonPlot 的选项包含在输出中。见?1630 页的?216 获取可用选项列表?
此外,MinError 可以指定?NewtonPlot 的选项。如果存在,Sentaurus Device 仅在当前迭代的误差小于当前牛顿步骤内所有先前误差时才写?NewtonPlot 文件。在这种情况下,NewtonPlot 文件名中的第一?%d 格式指定符将被替换为 min 而不是迭代数?
6.7.4 CNormPrint ?NewtonPlot 的自动激?
默认情况下,满足某些条件?CNormPrint ?NewtonPlot 自动激活:
- 对于 CNormPrint:步?< AutoCNPMinStepFactor × MinStep
- 对于 NewtonPlot:步?< AutoNPMinStepFactor × MinStep
其中步长?Quasistationary ?Transient 语句的执行期间计算,AutoCNPMinStepFactor ?AutoNPMinStepFactor 是可在命令文件的 Math 部分中指定的参数?
Math {
AutoCNPMinStepFactor = <float> # 默认 = 2.0
AutoNPMinStepFactor = <float> # 默认 = 2.0
}可以通过为上述参数指定零值来停用 CNormPrint ?NewtonPlot 的自动激活?
?NewtonPlot 文件作为自动激活的结果创建时,Error、Residual、Update ?MinError 选项用于 NewtonPlot 将默认使用。但是,命令文件?Math 部分?NewtonPlot 的任何用户指定选项将覆盖默认行为?
此外,当达到解的最大允许迭代次数时,将对不?Quasistationary ?Transient 一部分的解自动激?NewtonPlot。在这种情况下,将使用前一段中描述的相同输出选项(除 MinError 外),迭代数将替换文件名中的 %d 格式指定符?
6.7.5 绘图和输出的仿真统计
本部分讨论仿真统计?
当前绘图文件中的仿真统计
要在当前绘图文件中包含用于可视化的各种仿真统计,在命令文件的 Math 部分中指?SimStats 选项?
Math {SimStats}当指定此选项时,Sentaurus Device 在每个成功解之后?SimStats 数据集组写入当前绘图文件?.plt 文件)。SimStats 组中包含以下数据集:
| 数据? | 说明 |
|---|---|
| AssemblyTime | 为解构建 RHS ?Jacobian 所花的 CPU 时间 |
| AssemblyTime_wall | 为解构建 RHS ?Jacobian 所花的壁钟时间 |
| AverageMemory | 该时间步的平均内? |
| CumulativeAssemblyTime | 迄今为止总装配时? |
| CumulativeAssemblyTime_wall | 迄今为止总壁钟装配时? |
| CumulativeIterations | 迄今为止总迭代数 |
| CumulativeRestarts | 迄今为止总重启次? |
| CumulativeSolveTime | 迄今为止总求解时? |
| CumulativeSolveTime_wall | 迄今为止总壁钟求解时? |
| CumulativeTotalTime | 迄今为止?CPU 时间 |
| CumulativeTotalTime_wall | 迄今为止总壁钟时? |
| error | 解的最终误? |
| Iterations | 解所需的迭代次? |
| PeakMemory | 迄今为止峰值内存(水位线) |
| Restarts | 解收敛前连续重启的次? |
| Rhs | 解的最?RHS 范数 |
| SolveTime | 求解器使用的 CPU 时间 |
| SolveTime_wall | 求解器使用的壁钟时间 |
| Stepsize | 用于拟静态或瞬态解的步? |
| TotalTime | 解的?CPU 时间(包括开销时间? |
| TotalTime_wall | 解的总壁钟时间(包括开销时间? |
设计实验变量中的仿真统计
累积仿真统计可以通过?Math 部分指定 SimStats ?WriteDOE 选项写入 Sentaurus Device 输出文件?.log 文件)的末尾作为设计实验 (DOE) 变量?
Math {
SimStats ( WriteDOE [DOE_prefix = <string>] )
}当指定了 WriteDOE 时,将写入以?DOE 变量?
DOE: Restarts <value>
DOE: Iterations <value>
DOE: AssemblyTime <value>
DOE: SolveTime <value>
DOE: TotalTime <value>
DOE: AssemblyTime_wall <value>
DOE: SolveTime_wall <value>
DOE: TotalTime_wall <value>选项 DOE_prefix 允许字符串被预先添加?DOE 变量名称。例如,指定 DOE_prefix= "test_" 写入 DOE 变量 test_Restarts 而不?Restarts?
6.8 保存和加载语?
Save ?Load 语句允许将设备的当前仿真状态存储在文件中,然后(通常从另一个仿真运行)重新加载它,并从停止的地方继续。默认情况下,绘图文件也可以重新加载(见?191 页的设备绘图)?
Save 语句生成仅包含重启仿真所需信息?.sav 类型文件,例如:
- 接触偏置和电?
- 解变量的?
- 陷阱占有概率
- 如果激活了铁电模型,铁电历史(电场和极化)
只有当保存和加载仿真的陷阱规范相同时才支持加载陷阱,即陷阱集合及其在命令文件中的顺序必须相同,以及它们的类型。陷阱规范的不匹配被以无提示方式忽略,可能导致部分正确、不正确或未加载陷阱占位。在这种情况下,必须验证陷阱是否按预期初始化?
对于混合模式仿真,还保存额外的电路信息:
- 电路中每个节点的电压或温度?
- 每个紧凑模型实例的所有参数?
类似于陷阱,之前保存的包含电路数据的文件应仅加载到相同电路的仿真中。如果保存的文件包含电路中不存在的节点和实例的数据,则此数据被以无提示方式忽略。此外,如果存在电路中存在的节点和实例,而保存的文件中没有相应的数据,则这些节点和实例在加载文件时不会更新?
加载文件时,所有此信息都被恢复?
当在 File 部分中指?Save 文件时,仿真状态在仿真结束时自动保存到该文件。当?File 部分中指?Load 文件时,该文件中存储的状态在仿真开始时加载。加载的文件的几何体必须匹配?Grid 文件中指定的几何体?
*注意? 当在 File 部分中指定了 Load 语句时,文件中存储的接触电压覆盖在命令文件中其他地方指定的初始偏置条件?
File 部分中的 Save ?Load 语句仅保存和加载仿真中物理设备的数据。电路数据仅对在 Solve 部分中指定的 Save ?Load 语句进行保存和加载(见下文)?
对于瞬态仿真,当在单独的工具步骤或脚本中加?.sav 文件时,InitialTime 不会自动设置为之前保存的 .sav 文件中的 FinalTime。必须正确设?InitialTime 以避免任何意外结果?
*注意? 界面区域在网格文件中需要在界面上保存和加载数据(见?195 页的界面绘图)?
更多控制可用?Solve 部分中的 Save ?Load 命令。命令定义为?
Save(<parameters-opt>) <system-opt>
Load(<parameters-opt>) <system-opt>选项与对 Plot 的选项相同(见?193 页的何时绘图)。Save 语句可在 Solve 部分的任何级别使用,Load 语句仅可?Solve 部分的基础级别使用。例如,在瞬态仿真的情况下,Load 仅可在瞬态前后使用,不在其期间?
?Solve 部分中允许多?Load ?Save 命令。例如:
Solve {
...
# 斜坡门并保存结构
# 第一个门电压
Quasistationary (InitialStep=0.1 MaxStep=0.1 MinStep=0.01
Goal {Name="gate" Voltage=1})
{Coupled {Poisson Electron Hole}}
Save(FilePrefix="vg1")
# 第二个门电压
Quasistationary (InitialStep=0.1 Maxstep=0.1 MinStep=0.01
Goal {Name="gate" Voltage=3})
{Coupled {Poisson Electron Hole}}
Save(FilePrefix="vg2")
# 加载已保存的结构并斜坡漏?
# 第一条曲?
Load(FilePrefix="vg1")
NewCurrentPrefix="Curve1"
Quasistationary (InitialStep=0.1 MaxStep=0.5 MinStep=0.01
Goal {Name="drain" Voltage=2.0})
{Coupled {Poisson Electron Hole}}
# 第二条曲?
Load(FilePrefix="vg2")
NewCurrentPrefix="Curve2"
Quasistationary (InitialStep=0.1 MaxStep=0.5 MinStep=0.01
Goal {Name="drain" Voltage=2.0})
{Coupled {Poisson Electron Hole}}
}6.9 Tcl 命令文件
命令行选项 --tcl 调用 Tcl 解释器执行命令文件。Tcl 提供了对标准 Sentaurus Device 命令文件的有价值的扩展,包括:
- 变量
- 表达?
- 控制结构
此外,所?Inspect Tcl 批处理命令都可用(见 Inspect 用户指南)。这些命令对参数提取很有用(见第 239 页的提取参数)?
6.9.1 执行设备仿真
可以使用 Tcl 命令 sdevice 执行整个设备仿真。以下示例显示了与计算接触值的拟静态斜坡:
tcl
set vd 0.2
set vg [expr {10*$vd}]
sdevice "
Electrode{
{ Name = \"source\" Voltage = 0.0 }
{ Name = \"gate\" Voltage = 0.0 }
{ Name = \"drain\" Voltage = $vd }
{ Name = \"bulk\" Voltage = 0.0 }
}
File{
Grid = \"mosfet.tdr\"
Plot = \"mosfet_des.tdr\"
Current = \"mosfet_des.plt\"
Output = \"mosfet_des.log\"
}
Physics {
Mobility (DopingDependence)
Recombination (SRH (DopingDependence))
}
Solve{
Poisson
QuasiStationary (Goal {Name=\"gate\" Voltage=$vg})
{ Coupled {Poisson Electron Hole} }
}
"有时,分阶段执行设备仿真更有用。在这种情况下,使用 sdevice_init 命令进行初始化,并使用多?sdevice_solve 命令来驱动仿真?
在以下示例中,执?Id-Vg 扫描,并从当前绘图文件中提取阈值电压:
tcl
# 初始?Sentaurus Device 仿真
sdevice_init {
Electrode{
{ Name = "source" Voltage = 0.0 }
{ Name = "gate" Voltage = 0.0 }
{ Name = "drain" Voltage = 0.2 }
{ Name = "bulk" Voltage = 0.0 }
}
File{
Grid = "mosfet.tdr"
Plot = "extract_VT_des.tdr"
Current = "extract_VT_des.plt"
Output = "extract_VT_des.log"
}
Physics{
EffectiveIntrinsicDensity (Slotboom)
Mobility (DopingDependence)
Recombination (SRH (DopingDependence))
}
}
# 计算 IdVg 曲线
sdevice_solve {
Solve{
NewCurrentPrefix = "initial_"
Poisson
Coupled {Poisson Electron Hole}
Save (FilePrefix = "extract_VT_inital_save")
}
}
NewCurrentPrefix = ""
QuasiStationary (
InitialStep=0.05 Increment=1.3
MaxStep=0.05 MinStep=1e-4
Goal {Name="gate" Voltage=2}
)
{ Coupled {Poisson Electron Hole} }
# 提取阈值电?
set VT [extract_VT extract_VT_des.plt gate drain]
# 将门电压斜坡到阈值电?
sdevice_solve "
Solve{
NewCurrentPrefix = \"ignore_\"
Load (FilePrefix = \"extract_VT_inital_save\")
QuasiStationary (
InitialStep=0.25 Increment=1.3
MaxStep=0.25 MinStep=1e-4
Goal {Name=\"gate\" Voltage=$VT}
)
{ Coupled {Poisson Electron Hole} }
}
"
# 保存最终绘图文?
sdevice_finish?17:显示各?Tcl 命令被调用的序列的流程图
开?
?
sdevice_init
?
sdevice_solve ?也可以是 sdevice(一步完成)
?
sdevice_finish
?
结束6.9.2 sdevice 命令
?Tcl 命令期望一个参数,该参数描述整个设备仿真,即它包括 File 部分、Physics 部分?Solve 部分?
sdevice 命令如果设备仿真收敛,返?1。否则,返回?0?
6.9.3 sdevice_init 命令
?Tcl 命令期望一个参数,该参数初始化设备仿真,即它可以包含标?Sentaurus Device 命令文件的所有部分(Solve 部分除外)?
sdevice_init 不计算任何返回值。如果遇到错误,Sentaurus Device 将终止?
6.9.4 sdevice_solve 命令
?Tcl 命令期望一个参数,仅可?sdevice_init 命令后使用。参数必须包含单?Solve 部分。执?Solve 部分中的所有命令?
sdevice_solve 命令如果设备仿真收敛,返?1。否则,返回?0?
6.9.5 sdevice_finish 命令
?Tcl 命令期望无参数,可在一系列 sdevice_solve 命令之后调用。它指示?sdevice_solve 命令执行的设备仿真已完成,并且生成了最终绘图文件。所有打开的当前绘图文件都被关闭?
6.9.6 sdevice_parameters 命令
?Tcl 命令期望两个参数:文件名?Sentaurus Device 参数文件的内容。它是一个辅助函数,将参数文件写入给定文件名?
以下示例生成包含介电常数参数的文?models.par?
tcl
sdevice_parameters models.par {
Epsilon {
epsilon = 11.7
}
}6.9.7 提取参数
Sentaurus Device 中的 Tcl 解释器提供对所?Inspect 命令的访问。通过这种方式,可以轻松分?Sentaurus Device 生成?.plt 文件并提取参数。以下示例显示了后跟阈值电压提取的门斜坡:
tcl
sdevice {
Electrode {
{ Name = "source" Voltage = 0.0 }
{ Name = "gate" Voltage = 0.0 }
{ Name = "drain" Voltage = 0.2 }
{ Name = "bulk" Voltage = 0.0 }
}
File {
Grid = "mosfet.tdr"
Current = "IdVg_des.plt"
}
Physics { ... }
Solve {
QuasiStationary (
InitialStep=0.05 MaxStep=0.05
Goal {Name="gate" Voltage=2}
) { Coupled {Poisson Electron Hole} }
}
}
load_library EXTRACT
proj_load IdVg_des.plt iv
cv_create idvgs "iv gate OuterVoltage" "iv drain TotalCurrent"
set Vtgm [ExtractVtgm Vtgm idvgs]
set Vti [ExtractVti Vti idvgs 1e-8]
set gm [ExtractGm gm idvgs]
set SS [ExtractSS SS idvgs 1e-2]6.9.8 可用?Inspect Tcl 命令
| 命令函数 | Tcl 命令 |
|---|---|
| 读写文件 | graph_load、graph_write、load_library、param_load、param_write、proj_getDataSet、proj_getList、proj_getNodeList、proj_load、proj_unload、proj_write |
| 曲线命令 | cv_abs、cv_compute、cv_create、cv_createFromScript、cv_createWithFormula、cv_delete、cv_delPts、cv_getVals、cv_getValsX、cv_getValsY、cv_getXaxis、cv_getYaxis、cv_getZero、cv_inv、cv_log10Scale、cv_logScale、cv_printVals、cv_rename、cv_renameCurve、cv_reset、cv_scaleCurve、cv_set_interpol、cv_split、cv_split_disc、cv_write、macro_define |
| 参数提取 | f_Gamma、f_gm、f_IDSS、f_KP、f_Ron、f_Rout、f_TetaG、f_VT、f_VT1、f_VT2、ft_scalar |
| 曲线比较库(load_library curvecomp? | cvcmp_CompareTwoCurves、cvcmp_DeltaTwoCurves |
| 提取库(load_library EXTRACT? | cv_linTransCurve、cv_scaleCurve、ExtractBVi、ExtractBVv、ExtractEarlyV、ExtractGm、ExtractGmb、ExtractIoff、ExtractMax、ExtractRon、ExtractSS、ExtractValue、ExtractVtgm、ExtractVtgmb、ExtractVti |
| RF 提取库(load_library RFX? | rfx_abs_c、rfx_abs2_c、rfx_add_c、rfx_con_c、rfx_div_c、rfx_Export2csv、rfx_ExtractVal、rfx_GetFK1、rfx_GetFmax、rfx_GetFt、rfx_GetK_MSG_MAG、rfx_GetMUG、rfx_GetNearestIndex、rfx_GetRFCList、rfx_im_c、rfx_load、rfx_mag_phase、rfx_mul_c、rfx_PolarBackdrop、rfx_re_c、rfx_ReIm2Abs、rfx_ReIm2Phase、rfx_S2K、rfx_sign、rfx_SmithBackdrop、rfx_sub_c、rfx_Y2H、rfx_Y2K、rfx_Y2S、rfx_Y2U、rfx_Y2Z、rfx_Z2U |
| IC-CAP 模型参数提取库(load_library ise2iccap? | iccap_Write |
6.9.9 重定向输?
Tcl 命令 sdevice、sdevice_init、sdevice_solve ?sdevice_finish 允许重定向标准输出和标准错误?
| 语法 | 说明 |
|---|---|
| > filename | 将标准输出写?filename |
| 2> filename | 将标准错误写?filename |
| >& filename | 将标准输出和标准错误都写?filename |
| >> filename | 将标准输出追加到 filename |
| 2>> filename | 将标准错误追加到 filename |
| >>& filename | 将标准输出和标准错误都追加到 filename |
6.9.10 已知限制
以下限制适用?
如果?sdevice_solve 命令内存?Set(TrapFilling=...) 语句,它仅适用于周?Solve 部分内的后续语句(见?579 页的显式陷阱占置)。此效应不在 sdevice_solve 命令的多个调用之间保持?
如果使用多个 sdevice_solve 命令执行瞬态仿真,则必须指定正确的初始时间,因?Sentaurus Device 不记得先?sdevice_solve 命令的最后一个瞬态时间?
6.10 并行?
Sentaurus Device 可以在多处理器共享内存计算机上运行,使用 OpenMP(开放式多处理)实现线程并行性。Sentaurus Device 还支持分布式内存机器上的消息传递接口(MPI)并行性?
使用线程
要在多线程模式下运行 Sentaurus Device,请使用 --threads 命令行选项?
bash
sdevice --threads 4 input.cmd该选项指定要使用的线程数。还可以?Math 部分中使?NumberOfThreads 参数?
Math {
NumberOfThreads = 4
}线程数也可以通过环境变量 OMP_NUM_THREADS 自动设置。Sentaurus Device 使用"首次接触"策略将数据分配给线程,以提高缓存效率。不是所有操作都可以并行化,线程数的最优值取决于问题大小和硬件配置?
使用 MPI 并行?
要在 MPI 模式下运?Sentaurus Device,请使用适当的机制启动程序,例如?
bash
mpirun -n 4 sdevice input.cmdMPI 并行性适用于需要多个仿真或参数扫描的应用。在单个仿真级别上,MPI 通信开销可能超过计算增益?
许可证要?
并行运行需要特殊的许可证密钥。与您的许可证管理员联系以获?ParallelLicense 选项?
6.11 扩展精度
Sentaurus Device 支持多种浮点精度级别,以平衡计算精度和性能。精度可以在命令文件?Math 部分中指定:
Math {
ExtendedPrecision = "long double"
}下表总结了可用的精度选项?
| 精度选项 | 说明 | 字节大小 | 位精? |
|---|---|---|---|
| double | IEEE 64 位浮点数(默认) | 8 | ?15-17 ? |
| long double | IEEE 扩展精度(某些架构) | 16 | ?18-33 ? |
| double-double | 双精度优化组? | 16 | ?30-32 ? |
| quad-double | 四个双精度级? | 32 | ?61-64 ? |
扩展精度计算比标准双精度运行速度慢,但在处理数值困难的问题时可能是必要的,例如极高的掺杂浓度或非常小的器件特征尺寸?
6.12 系统命令
System 命令允许?Sentaurus Device 命令文件内执行外部系统命令:
System = "command"例如,要在仿真开始后立即执行 shell 脚本?
File {
Grid = "device.tdr"
Plot = "output.tdr"
}
System = "echo 'Simulation started' > logfile.txt"System 命令以相同的方式执行,就像在操作系统 shell 中一样。标准输出和标准错误都进?Sentaurus Device 的输出流?
参考文?
[1] Synopsys, Inc. Sentaurus Device User Guide, W-2024.09 edition.