Appearance
Ch3:混合模式仿真
来源:
sdevice_ug.pdf第 3 章(W-2024.09) 🔨 进行中 说明:本页按原章小节顺序进行逐段翻译,并在对应位置插入原文图示。
3.1 混合模式仿真概述
Sentaurus Device 是一款单器件仿真器,同时也是一种混合模式器件和电路仿真器。单器件命令文件通过网格(mesh)、接触(contact)、物理模型(physics model)和求解命令(solve command)规范来定义。
对于多器件仿真,命令文件必须包含每个器件的网格规范(File 部分)、接触规范(Electrode 部分)和物理模型规范(Physics 部分)。此外,还必须定义电路网表来连接各个器件(见图 7),并指定求解命令来求解整个器件系统。
图片:../../../public/images/sdevice/sdevice_fig7.png
图 7 多器件仿真中器件通过电路网表连接示意
Device 命令定义每个物理器件。一个命令文件可以包含任意数量的 Device 部分。Device 部分定义了一个器件,但 System 部分是创建和连接器件所必需的。
紧凑模型
Sentaurus Device 为混合模式仿真提供了不同的紧凑模型,并支持以下几种指定紧凑模型的方式:
- 网表文件支持 Synopsys PrimeSim™ HSPICE® 语言的一个子集。您可以使用这些文件来指定参数集和 SPICE 模型及 PrimeSim HSPICE 模型的实例(见 PrimeSim HSPICE 网表文件)。
- SPICE 电路文件(扩展名
.scf)可用于 SPICE 模型、PrimeSim HSPICE 模型和内置模型。参数集和实例都可以被指定(见 SPICE 电路文件)。 - 紧凑电路文件(扩展名
.ccf)支持 Sentaurus Device 中的紧凑模型接口。用户定义模型的器件和参数集必须在紧凑电路文件中指定。实例可以出现在紧凑电路文件中,也可以出现在命令文件的 System 部分(见 用户定义紧凑模型)。 - 电气和热路电路可以在命令文件的 System 部分中定义。可以为电路节点指定初始条件,也可以添加 Plot 语句来生成输出(见 System 部分)。
紧凑模型层次描述
在 Sentaurus Device 中,每个紧凑模型通过三层层次结构来描述:
- 器件(Device):器件描述紧凑模型的基本属性。这包括模型名称、电极名称、热端名称和内部变量名称,以及内部状态和参数的名称和类型。SPICE 模型和内置模型的器件是预定义的。对于用户定义的模型,您必须指定器件。
- 参数集(Parameter set):每个参数集派生自一个器件。它为紧凑模型的参数定义默认值。通常,在多个实例之间共享的参数在参数集中定义。大多数 SPICE 模型和内置模型提供一个默认参数集,可以直接在电路描述中引用。对于更复杂的模型(如 MOSFET),您可以引入新的参数集。
- 实例(Instance):实例对应 Sentaurus Device 电路中的元件。每个实例派生自一个参数集。必要时,它可以覆盖其参数的值。
对于 SPICE 模型和内置模型,您需要定义参数集和实例。对于用户定义的模型,可以(也是必需的)引入新器件。
表 9 Sentaurus Device 中可用的 SPICE 模型
| 模型 | 器件名称 | 默认参数集名称 |
|---|---|---|
| Resistor(电阻) | Resistor | Resistor_pset |
| Capacitor(电容) | Capacitor | Capacitor_pset |
| Inductor(电感) | Inductor | Inductor_pset |
| Coupled inductors(耦合电感) | mutual | mutual_pset |
| Voltage-controlled switch(电压控制开关) | Switch | Switch_pset |
| Current-controlled switch(电流控制开关) | CSwitch | CSwitch_pset |
| Voltage source(电压源) | Vsource | Vsource_pset |
| Current source(电流源) | Isource | Isource_pset |
| Voltage-controlled current source(电压控制电流源) | VCCS | VCCS_pset |
| Voltage-controlled voltage source(电压控制电压源) | VCVS | VCVS_pset |
| Current-controlled current source(电流控制电流源) | CCCS | CCCS_pset |
| Current-controlled voltage source(电流控制电压源) | CCVS | CCVS_pset |
| MOSFET | Mos1/Mos2/Mos3/Mos6/BSIM1/BSIM2/BSIM3/BSIM4/B3SOI | 对应的 pset |
| Diode(二极管) | Diode | Diode_pset |
| Bipolar junction transistor(双极结型晶体管) | BJT | BJT_pset |
| Junction field effect transistor(结型场效应管) | JFET | JFET_pset |
| GaAs MESFET | MES | MES_pset |
表 10 Sentaurus Device 中可用的 PrimeSim HSPICE 模型
| 模型 | 器件名称 | 模型 | 器件名称 |
|---|---|---|---|
| HSPICE Level 1 | HMOS_L1 | HSPICE Level 61 | HMOS_L61 |
| HSPICE Level 2 | HMOS_L2 | HSPICE Level 62 | HMOS_L62 |
| HSPICE Level 3 | HMOS_L3 | HSPICE Level 64 | HMOS_L64 |
| HSPICE Level 28 | HMOS_L28 | HSPICE Level 68 | HMOS_L68 |
| HSPICE Level 49 | HMOS_L49 | HSPICE Level 69 | HMOS_L69 |
| HSPICE Level 53 | HMOS_L53 | HSPICE Level 72 | HMOS_L72 |
| HSPICE Level 54 | HMOS_L54 | HSPICE Level 73 | HMOS_L73 |
| HSPICE Level 57 | HMOS_L57 | HSPICE Level 76 | HMOS_L76 |
| HSPICE Level 59 | HMOS_L59 | HSPICE Level 78 | HMOS_L78 |
表 11 Sentaurus Device 中的内置模型
| 模型 | 器件名称 | 默认参数集名称 |
|---|---|---|
| Electrothermal resistor(电热电阻) | Ter | Ter_pset |
| Ferroelectric capacitor(铁电电容) | ferroelectric | ferroelectric_pset |
| MOS harness | MOS_harness | MOS_harness_pset |
| Parameter interface | Param_Interface_Device | Param_Interface |
| Saturable inductor(可饱和电感) | satinductor | satinductor_pset |
| SPICE temperature interface | Spice_Temperature_Interface_Device | Spice_Temperature_Interface |
用户定义紧凑模型
Sentaurus Device 为用户定义的紧凑模型提供了紧凑模型接口(CMI)。这些模型由您使用 C++ 实现,并在运行时链接到 Sentaurus Device。无需访问 Sentaurus Device 的源代码。
要实现一个新的用户定义模型:
- 为紧凑模型中的每个变量提供相应的方程。对于电极电压,计算从器件流入电极的电流。对于内部模型变量,使用模型方程。
- 编写新紧凑模型的正式描述。Sentaurus Device 在加载模型之前读取此紧凑电路文件。
- 实现一组 C++ 接口子程序。Sentaurus Device 提供运行时环境。
- 将模型代码编译为共享对象文件,在运行时链接到 Sentaurus Device。cmi 脚本执行此编译。
- 使用
CMIPath关键字在命令文件的 File 部分定义搜索路径。 - 在紧凑电路文件(扩展名
.ccf)或命令文件的 System 部分中直接引用用户定义的紧凑模型。
PrimeSim HSPICE 网表文件
Sentaurus Device 接受以单独文件形式提供的 PrimeSim HSPICE 网表。网表在 System 部分中指定,如下所示:
cpp
System { Netlist = "spice_netlist.sp" }Sentaurus Device 只能处理 PrimeSim HSPICE 网表语法的一个子集。以下各节描述可识别的语法。
网表文件结构
网表文件的第一行始终被解释为网表的标题。您可以使用 .TITLE 语句使其明确。例如:
plaintext
.TITLE 'amplifier netlist'但是,使用 .TITLE 语句是可选的,第一行的内容将始终被用作网表的标题。
注意:如果网表文件的第一行包含任何其他有效的网表语句,则该语句将被有效忽略,并被解释为网表的标题。例如,如果电路元件在网表的第一行中声明,则该元件将不会出现在仿真中,并且网表的标题将类似于
r1 n1 n2 resistance=1k。
标题行之后是一系列 PrimeSim HSPICE 语句,网表以可选的 .END 语句终止:
plaintext
.END最终 .END 语句之后的所有内容都将被忽略。
网表解析器不区分大小写,但字符串文字或 .INCLUDE 语句中的文件名除外:
plaintext
.PARAM s = str('This is a case sensitive string.')
.INCLUDE 'Case/Sensitive/Filename'注释
以美元符号($)字符或星号(*)字符开头的行是注释行。例如:
plaintext
* This is a comment.您可以在 $ 字符后使用内联注释:
plaintext
R1 1 2 R=100 $ drain resistor续行
使用第一列中的加号(+)字符来表示续行:
plaintext
R1 1 0
+ R=500.INCLUDE 语句
使用 .INCLUDE 语句将另一个网表包含在当前网表中:
plaintext
.INCLUDE models.sp数值常数
您可以采用以下格式之一输入数字:
- 整数(例如,
7) - 浮点数(例如,
-4.5) - 带整数指数的浮点数(例如,
3e8和-1.2e9) - 带表 12 中列出的比例因子的整数(例如,
6k) - 带比例因子的浮点数(例如,
-8.9meg)
表 12 比例因子
| 比例因子 | 描述 | 倍数 |
|---|---|---|
| t | tera | 10¹² |
| g | giga | 10⁹ |
| meg 或 x | mega | 10⁶ |
| k | kilo | 10³ |
| mil | 千分之一英寸 | 25.4 × 10⁻⁶ |
| m | milli | 10⁻³ |
| u | micro | 10⁻⁶ |
| n | nano | 10⁻⁹ |
| p | pico | 10⁻¹² |
| f | femto | 10⁻¹⁵ |
| a | atto | 10⁻¹⁸ |
注意:比例因子
a不是包含安培的字符串中的比例因子。例如,表达式20amps被解释为 20 安培电流,而不是 20 × 10⁻¹⁸ mps。
参数和表达式
在 PrimeSim HSPICE 工具中,参数是您与值关联的名称。支持数值和字符串参数。例如:
plaintext
.PARAM a = 4
.PARAM b = '2*a + 7'
.PARAM s = str('This is a string')
.PARAM t = str(s)支持以下内置数学函数:
sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, abs, sqrt, pow, pwr, log, log10, exp, db, int, nint, sgn, sign, floor, ceil, min, max
子电路
可复用单元可以指定为子电路。一般定义如下:
plaintext
.SUBCKT name n1 n2 ... [param1=val] [param2=val] ...
.ENDS或:
plaintext
.MACRO name n1 n2 ... [param1=val] [param2=val] ...
.EOM也支持字符串参数:
plaintext
.SUBCKT name n1 n2 ... [param=str('string')] ...
.ENDS.MODEL 语句
.MODEL 语句的一般语法为:
plaintext
.MODEL model_name type [level=num] [pname1=val1] [pname2=val2] ...表 13 可识别的模型类型
| 类型 | 描述 | 类型 | 描述 |
|---|---|---|---|
| c | 电容模型 | npn | npn BJT 模型 |
| csw | 电流控制开关 | pjf | p 沟道 JFET 模型 |
| d | 二极管模型 | pmf | p 沟道 MESFET |
| l | 互感模型 | pmos | p 沟道 MOSFET 模型 |
| njf | n 沟道 JFET 模型 | pnp | pnp BJT 模型 |
| nmf | n 沟道 MESFET | r | 电阻模型 |
| nmos | n 沟道 MOSFET 模型 | sw | 电压控制开关 |
元件
元件名称必须以每个元件类型的特定字母开头。
表 14 支持的 PrimeSim HSPICE 元件类型
| 首字母 | 元件 | 示例 |
|---|---|---|
| c | 电容 | Cbypass 1 0 10pf |
| d | 二极管 | D7 3 9D1 |
| e | 电压控制电压源 | Ea 1 2 3 4 K |
| f | 电流控制电流源 | Fsub n1 n2 vin 2.0 |
| g | 电压控制电流源 | G12 4 0 3 0 10 |
| h | 电流控制电压源 | H3 4 5 Vout 2.0 |
| i | 电流源 | IA 2 6 1e-6 |
| j | JFET 或 MESFET | J1 7 2 3 model_jfet w=10u l=10u |
| k | 线性互感 | K1 L1 L2 0.98 |
| l | 线性电感 | Lx a b 1e-9 |
| m | MOS 晶体管 | M834 1 2 3 4 N1 |
| q | 双极晶体管 | Q5 3 6 7 8 pnp1 |
| r | 电阻 | R10 21 10 1000 |
| v | 电压源 | V1 8 0 5 |
| x | 子电路调用 | X1 2 4 17 31 MULTI WN=100 LN=5 |
表 15 支持的 Berkeley SPICE 元件类型
| 首字母 | 元件 | 示例 |
|---|---|---|
| s | 电压控制开关 | S1 1 2 3 4 SWITCH1 ON |
| w | 电流控制开关 | W1 1 2 VCLOCK SWITCHMOD1 |
| z | GaAs MESFET | Z1 7 2 3 ZM1 AREA=2 |
网表命令
有限的一组网表命令被识别。
要使节点名称在所有子电路中全局化,请使用 .GLOBAL 语句。例如:
plaintext
.GLOBAL node1 node2 node3 ...使用 .OPTION PARHIER 语句指定作用域规则。例如:
plaintext
.OPTION PARHIER=GLOBAL|LOCAL其他未明确提及的 PrimeSim HSPICE 网表命令将被忽略。
在网表中指定物理器件
Sentaurus Device 支持 PrimeSim HSPICE 网表格式的扩展,以便您可以在 PrimeSim HSPICE 网表中指定物理器件。.SDEVICE 语句声明物理器件的名称及其触点:
plaintext
.SDEVICE device_name drain gate source bulk物理器件的实例可以使用子电路命令插入网表:
plaintext
x1 d g s b device_name.SDEVICE 语句和子电路实例化等效于 Sentaurus Device 命令文件的 System 部分中的以下规范:
cpp
System { device_name x1 (drain=d gate=g source=s bulk=b) }注意:PrimeSim HSPICE 名称不区分大小写,网表解析器将所有标识符转换为小写。因此,在 Sentaurus Device 中必须使用小写指定物理器件。
SPICE 电路文件
您可以在外部 SPICE 电路文件(扩展名 .scf)中指定紧凑模型。参数集的声明格式为:
plaintext
PSET pset
DEVICE dev
PARAMETERS
parameter0 = value0
parameter1 = value1
...
END PSET此声明引入从设备 dev 派生的参数集 pset。它为给定参数分配默认值。设备 dev 应该已经声明了参数名称。此外,分配给参数的值必须具有适当的类型。
表 16 SPICE 电路文件中的参数类型
| 参数类型 | 示例 | 参数类型 | 示例 |
|---|---|---|---|
| char | c = 'n' | char[] | cc = ['a' 'b' 'c'] |
| double | d = 3.14 | double[] | dd = [1.2 -3.4 5e6] |
| int | i = 7 | int[] | ii = [1 2 3] |
| string | s = "hello world" | string[] | ss = ["hello" "world"] |
类似地,电路实例可以声明为:
plaintext
INSTANCE inst
PSET pset
ELECTRODES e0 e1 ...
THERMODES t0 t1 ...
PARAMETERS
parameter0 = value0
parameter1 = value1
...
END INSTANCE根据此声明,实例 inst 派生自参数集 pset。其电极连接到电路节点 e0, e1, ...,其热端连接到 t0, t1, ...。此实例还定义或覆盖参数值。
示例
考虑以下简单整流电路:
out
|
R
|
in --- D --- out该电路包含三个紧凑模型,可以在文件 rectifier.scf 中定义为:
plaintext
PSET D1n4148
DEVICE Diode
PARAMETERS
is = 0.1p // 饱和电流
rs = 16 // 欧姆电阻
cjo = 2p // 结电容
tt = 12n // 渡越时间
bv = 100 // 反向击穿电压
ibv = 0.1p // 反向击穿电压下的电流
END PSET
INSTANCE v
PSET Vsource_pset
ELECTRODES in 0
PARAMETERS sine = [0 5 1meg 0 0]
END INSTANCE
INSTANCE d1
PSET D1n4148
ELECTRODES in out
PARAMETERS temp = 30
END INSTANCE
INSTANCE r
PSET Resistor_pset
ELECTRODES out 0
PARAMETERS resistance = 1000
END INSTANCE参数集 D1n4148 定义了 1n4148 类型所有二极管共享的参数。实例参数通常对每个二极管不同,例如它们的工作温度。
注意:必须先声明参数集,然后实例才能引用它。
此仿真的命令文件可以为:
cpp
File { SPICEPath = ". lib spice/lib" }
System { Plot "rectifier" (time() v(in) v(out) i(r 0)) }
Solve {
Circuit
NewCurrentPrefix = "transient_"
Transient (InitialTime = 0 FinalTime = 0.2e-5
InitialStep = 1e-7 MaxStep = 1e-7) {Circuit}
}File 部分中的 SPICEPath 被分配一个目录列表。扫描所有目录以查找 SPICE 电路文件(.scf)。检查 Sentaurus Device 的日志文件以查看找到了哪些电路文件并在仿真中使用。
System 部分包含一个 Plot 语句,该语句生成 rectifier_des.plt 文件,并绘制仿真时间、节点 in 和 out 的电压,以及电阻 r 流入节点 0 的电流。
Solve 部分描述了仿真。关键字 Circuit 表示要求解的电路方程。
电路中的实例也可以直接出现在命令文件的 System 部分中。例如:
cpp
System {
Vsource_pset v (in 0) {sine = (0 5 1meg 0 0)}
D1n4148 d1 (in out) {temp = 30}
Resistor_pset r (out 0) {resistance = 1000}
}
Plot "rectifier" (time() v(in) v(out) i(r 0))混合模式仿真的命令文件
本节讨论 Sentaurus Device 混合模式仿真命令文件的最重要部分。
System 部分
System 部分定义了要求解的物理器件和电路元件的网表。网表通过电路节点连接。
默认情况下,电路节点是电气的,但可以声明为电气或热:
cpp
Electrical ( enode0 enode1 ... )
Thermal ( tnode0 tnode1 ... )Electrical 和 Thermal 语句也支持正则表达式语法,因此可以使用简单的表达式声明许多节点。例如:
cpp
Thermal ( node1 regexp("n[2-4]") regexp("x1.*") )在此示例中,节点 node1、n2、n3、n4 以及子电路 x1 中定义的所有节点将被声明为热的。
每个电气节点与一个电压变量相关联,每个热节点与一个温度变量相关联。节点名称是数字或字母数字的。节点 0 预定义为接地节点(0 V)。
您可以在 PrimeSim HSPICE 网表文件(见 PrimeSim HSPICE 网表文件)或 SPICE 电路文件(见 SPICE 电路文件)中定义紧凑模型。但是,紧凑模型的实例也可以直接出现在命令文件的 System 部分中:
cpp
parameter-set-name instance-name (node0 node1 ...) {<attributes>}节点在连接列表中的顺序对应于 SPICE 器件定义中的电极和热端顺序(见 Compact Models User Guide, Syntax of Compact Circuit (.ccf Files))。
连接列表是联系人名=节点名连接的列表,用空格分隔。联系人名称是来自给定器件网格文件中的接触名称,节点名称是先前在电路元件定义中定义的电路网表节点的名称。
物理器件定义如下:
cpp
device-type instance-name (connectivity list) {<attributes>}如果没有需要额外的器件参数,则无需大括号指定器件。例如:
cpp
device-type instance-name (<connectivity_list>)器件参数会覆盖在器件类型中定义的参数。对于 Sentaurus Device 的器件类型,参数可以包括 Electrode、Thermode、File、Plot、Physics 和 Math 部分。
注意:Electrode 有设置每个电极电压的 Voltage 语句。如果电极通过连接列表连接到节点,这些值只是第一次 Newton 求解的提示(由关键字 Hint 定义),但它们不会像关键字 Set 那样将这些值设置为电极。默认情况下,连接到节点的电极是浮动的。
电极必须连接到电气节点,热端必须连接到热节点。这允许电极和热端共享相同的接触名称或编号。
物理器件和电路器件
物理器件使用先前定义的器件类型、名称、连接列表和可选参数进行实例化。例如:
cpp
device_type instance-name (<connectivity_list>) {
<optional_device_parameters>
}器件参数会覆盖在器件类型中定义的参数。
您可以在 PrimeSim HSPICE 网表文件(见 PrimeSim HSPICE 网表文件)或 SPICE 电路文件(见 SPICE 电路文件)中声明 SPICE 实例。它们也可以直接出现在命令文件的 System 部分中。例如:
cpp
pset inst (e0 e1 ... t0 t1 ...) {
parameter0 = value0
parameter1 = value1
...
}数组参数必须用括号指定,而不是大括号。例如:
cpp
dd = (1.2 -3.4 5e6)
ss = ("hello" "world")某些 SPICE 模型具有可以通过 instance_name.internal_node 形式访问的内部节点。例如,SPICE 电感创建一个内部节点分支,它代表通过实例的电流。因此,表达式 v(l.branch) 可用于访问电感 l 的电流。这对于绘制内部数据或初始化电感中的电流很有用。
电气和热网表
电气和热网表可以在同一系统中共存。例如:
cpp
Device PRES {
Electrode {
{ Name="Anode" Voltage=0 }
{ Name="Cathode" Voltage=0 }
}
Thermode {
{ Name="Anode" Temperature=300 SurfaceResistance=1e-4 }
{ Name="Cathode" Temperature=300 SurfaceResistance=1e-4 }
}
...
}
System {
* 热节点定义
Thermal (ta tc t300)
Set (t300 = 300)
Hint (ta = 300 tc = 300)
* 电气电路
PRES pres ("Anode"=a "Cathode"=0 "Anode"=ta "Cathode"=tc)
Isource_pset i (a 0) {dc = 0}
* 热电路
Resistor_pset ra (ta t300) {resistance = 1}
Resistor_pset rc (tc t300) {resistance = 1}
}
Plot "pres" (v(a) t(ta) t(tc) h(pres ta) h(pres tc) i(pres 0))该电路由单个物理器件 pres 组成,其两个电极连接到电气电路,两个热端连接到热电路。
Plot 语句访问节点 a 的电压、节点 ta 和 tc 的温度、pres 流入 ta 和 tc 的热通量,以及 i 流入接地节点 0 的电流。
请注意,电气和热电路是分开的,它们之间的桥梁是物理器件。物理器件的电极只能连接到电气电路中的节点,热端只能连接到热电路中的节点。
此外,物理器件的热端必须定义 SurfaceResistance,因为如果热端要连接到热电路,它必须是阻性的。这意味着每个热端必须定义 SurfaceResistance 或 SurfaceConductance,如果未定义,Sentaurus Device 会报告错误。
许多 SPICE 模型为电热仿真提供了温度参数。在 Sentaurus Device 中,温度参数通过参数接口连接到热电路。
要将热节点 t 的值作为参数输入电阻 r,需要一个参数接口:
cpp
System {
Thermal (t)
Set (t = 300)
Isource_pset i (1 0) {dc = 1}
cres_pset r (1 0) {temp = 27 l = 0.01 w = 0.001}
Param_Interface rt (t) {parameter = "r.temp" offset = -273.15}
}
Plot "cres" (t(t) p(r temp) i(r 0) v(1))参数接口 rt 在变量 t 更改时更新 r 中 temp 的值。这是 Sentaurus Device 中允许电路节点连接到模型参数的一般机制。
注意:在引用实例之后声明参数接口非常重要。否则,Sentaurus Device 无法建立参数接口和实例之间的连接。
Sentaurus Device 中的温度以开尔文为单位。SPICE 温度以摄氏度测量。因此,必须使用 -273.15 的偏移量将开尔文转换为摄氏度。
Math 部分中的参数 Spice_Temperature 在仿真开始时初始化全局 SPICE 电路温度。它不能用于稍后更改 SPICE 温度。要在仿真期间修改 SPICE 温度,必须使用 SPICE 温度接口。
SPICE 温度接口有一个可以连接到电极或热端的触点。当电极或热端的价值 u 发生变化时,全局 SPICE 温度会根据以下公式更新:
Spice temperature = offset + c₁u + c₂u² + c₃u³默认情况下,offset = c₂ = c₃ = 0 且 c₁ = 1。因此,SPICE 温度接口确保全局 SPICE 温度与值 u 相同。
在以下示例中,SPICE 温度接口用于将全局 SPICE 温度从 300 K 斜升到 400 K:
cpp
System {
Set (st = 300)
Spice_Temperature_Interface ti (st) { }
}
Solve {
Quasistationary (Goal {Node=st Value=400} DoZero InitialStep=0.1
MaxStep=0.1) {
Coupled {Circuit}
}
}节点初始化
Set 语句建立节点值。(Unset 语句用于在 Set 语句之后释放节点。)此值在所有后续仿真中保持固定,直到在 Solve 部分中使用 Set 或 Unset 语句(见 混合模式电学边界条件),或者节点成为控制节点本身的 Quasistationary 的 Goal(见 混合模式中的准静态)。对于已设置的节点,相应的方程(即电气节点的电流平衡方程和热节点的热平衡方程)不会像未设置的节点那样被求解。
注意:Set 和 Unset 语句存在于 Solve 部分中。它们的作用类似于 System 级别的 Set,但提供了更大的灵活性(见 System 部分)。
您还可以使用 Set 语句更改紧凑模型中参数的值。在以下示例中,电阻 r1 的电阻变为 1000 Ω:
cpp
Set (r1."resistance" = 1000)Initialize 语句类似于 Set 语句,只是节点值仅在非瞬态仿真期间保持。当瞬态仿真开始时,节点被释放为其实际值,即节点被取消设置。
注意:
Initialize语句可以与内部节点一起使用,以在瞬态仿真之前设置通过电感的电流。例如:cppInductor_pset L2 (a b){ inductance = 1e-5 } Initialize (L2.branch = 1.0e-4)
Hint 语句仅为未设置的节点提供第一次 Newton 步骤的猜测值。数值以伏特、安培或开尔文给出。电流值仅对电路器件中的内部电流节点有意义。
绘制量
System 部分可以包含任意数量的 Plot 语句,以打印节点处的电压、通过器件的电流或电路元件参数。输出存储在指定文件名中。如果未提供文件名,则输出被发送到标准输出文件和日志文件。Plot 语句的语法为:
cpp
Plot [<filename>] (<plot_command_list>)注意:Plot 命令区分大小写。
Plot 语句默认不打印时间。绘制瞬态仿真时,必须添加
time()命令。
示例
cpp
Plot (a b i(r1 a) p(r1 rT) p(v0 "sine[0]"))
Plot "plotfile" (time() v(a b) i(d1 a))修改绘图输出
您可以在 System 部分中使用 ACPlot 语句来修改 Sentaurus Device AC 绘图文件中的输出:
cpp
System {
ACPlot (<plot_command_list>)
}如果指定了 ACPlot 语句,则给定数量将绘制在包含 AC 分析结果的 Sentaurus Device AC 绘图文件中。否则,只有 AC 节点的电压会随 AC 分析结果一起绘制。
Device 部分
命令文件的 Device 部分定义系统中要仿真的不同器件类型。每个器件类型必须有一个在关键字 Device 之后遵循的标识符名称。每个 Device 部分可以包含 Electrode、Thermode、File、Plot、Physics 和 Math 部分。例如:
cpp
Device "resist" {
Electrode { ... }
File { ... }
Physics { ... }
...
}如果未在 Device 部分中指定信息,则使用命令文件最低级别的信息(如果在那里定义)。例如:
cpp
# 默认 Physics 部分
Physics { ... }
Device resist {
# 此器件没有 Physics 部分,因此它使用上面定义的默认集
Electrode { ... }
File { ... }
}File 部分
在 File 部分中,您可以指定以下内容:
- 输出文件名(关键字
Output)和小信号 AC 提取文件的关键字(关键字ACExtract) - Sentaurus Device 目录路径(关键字
DevicePath) - SPICE 模型搜索路径(关键字
SPICEPath)和紧凑模型(关键字CMIPath) - 器件的默认文件名
对于关键字 Output 和 ACExtract,只需要一个不带扩展名的文件名。Sentaurus Device 自动附加预定义的扩展名:
cpp
File {
Output = "mct"
ACExtract = "mct"
}对于关键字 DevicePath、SPICEPath 和 CMIPath,您必须分配一个目录列表,Sentaurus Device 会搜索该列表。例如:
cpp
File {
DevicePath = "../devices:/usr/local/tcad/devices:."
SPICEPath = ". lib lib/spice"
CMIPath = ". libcmi"
}Math 部分
您可以在全局 Math 部分为混合模式仿真指定以下关键字:
cpp
Math {
Spice_Temperature=<float>
Spice_gmin=<float>
}关键字 Spice_Temperature 是全局 SPICE 电路温度(默认值:300.15 K)。关键字 Spice_gmin 指 SPICE 中的最小电导(默认值:10⁻¹² Ω⁻¹)。
要计算 SPICE 行为模型(E 元件和 G 元件)的数值 Jacobian,您需要在全局 Math 部分指定以下关键字:
cpp
Math { BehavSrcNumericDeriv=0.001 }关键字 BehavSrcNumericDeriv 是变量的偏差。它的默认值是 0,表示不计算 Jacobian。
3.2 混合模式仿真操作
在 Sentaurus Device 中,混合模式仿真作为单器件仿真的直接扩展来处理。
从单器件到多器件命令文件的转换
Sentaurus Device 的命令文件接受单器件和多器件问题。虽然这两种形式的输入看起来不同,但它们符合相同的输入语法模式。这是可能的,因为命令文件具有多级定义,并且 System 部分有内置的默认机制。
完整的输入语法允许三层器件定义:全局、器件和实例(见图 8)。这些级别是链接的,因为全局级别是器件级别和实例级别的默认值。
图 8 三层器件定义
图片:../../../public/images/sdevice/sdevice_fig8.png
默认情况下,如果不存在 Device 部分,则使用全局器件的内容创建单个器件。如果不存在 System 部分,则使用此单个器件创建一个。此默认转换过程可以手动执行,方法是创建一个 Device 和 System 部分,每个部分只有一个条目。
注意:默认创建的器件名称为 ""(即空字符串)。
图片:../../../public/images/sdevice/sdevice_fig9.png
Solve 部分也可以通过指定 NoAutomaticCircuitContact 进行转换。
图片:../../../public/images/sdevice/sdevice_fig10.png
混合模式文件命名约定
您可以在命令文件的所有级别定义 File 部分。因此,默认文件名可能由多个器件包含。
在以下示例中,r1 和 r2 都使用在 res 的定义中设置的保存器件参数:
cpp
Device res {
File { Save="res" ... }
...
}
System {
res r1
res r2
}因此,原则上 r1 和 r2 具有相同的 Save 默认值(即 res)。由于将两个器件实例保存到同一名称是不切实际的,器件实例的名称(即 r1 和 r2)被连接到文件名以生成文件 res.r1 和 res.r2。
此文件名扩展过程适用于 File 部分的关键字 Current、Plot 和 Save,也适用于文件名从全局默认值复制到器件类型声明时。
表 17 Current、Plot 和 Save 关键字的文件名扩展
| 级别 | 文件名格式 |
|---|---|
| Instance(实例) | <given name> |
| Device(器件) | <given name>.<instance name> |
| Global(全局) | <given name>.<device type>.<instance name> |
原文参考:Sentaurus™ Device User Guide, W-2024.09, Chapter 3 "Mixed-Mode Simulations"