Skip to content

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(电阻)ResistorResistor_pset
Capacitor(电容)CapacitorCapacitor_pset
Inductor(电感)InductorInductor_pset
Coupled inductors(耦合电感)mutualmutual_pset
Voltage-controlled switch(电压控制开关)SwitchSwitch_pset
Current-controlled switch(电流控制开关)CSwitchCSwitch_pset
Voltage source(电压源)VsourceVsource_pset
Current source(电流源)IsourceIsource_pset
Voltage-controlled current source(电压控制电流源)VCCSVCCS_pset
Voltage-controlled voltage source(电压控制电压源)VCVSVCVS_pset
Current-controlled current source(电流控制电流源)CCCSCCCS_pset
Current-controlled voltage source(电流控制电压源)CCVSCCVS_pset
MOSFETMos1/Mos2/Mos3/Mos6/BSIM1/BSIM2/BSIM3/BSIM4/B3SOI对应的 pset
Diode(二极管)DiodeDiode_pset
Bipolar junction transistor(双极结型晶体管)BJTBJT_pset
Junction field effect transistor(结型场效应管)JFETJFET_pset
GaAs MESFETMESMES_pset

表 10 Sentaurus Device 中可用的 PrimeSim HSPICE 模型

模型器件名称模型器件名称
HSPICE Level 1HMOS_L1HSPICE Level 61HMOS_L61
HSPICE Level 2HMOS_L2HSPICE Level 62HMOS_L62
HSPICE Level 3HMOS_L3HSPICE Level 64HMOS_L64
HSPICE Level 28HMOS_L28HSPICE Level 68HMOS_L68
HSPICE Level 49HMOS_L49HSPICE Level 69HMOS_L69
HSPICE Level 53HMOS_L53HSPICE Level 72HMOS_L72
HSPICE Level 54HMOS_L54HSPICE Level 73HMOS_L73
HSPICE Level 57HMOS_L57HSPICE Level 76HMOS_L76
HSPICE Level 59HMOS_L59HSPICE Level 78HMOS_L78

表 11 Sentaurus Device 中的内置模型

模型器件名称默认参数集名称
Electrothermal resistor(电热电阻)TerTer_pset
Ferroelectric capacitor(铁电电容)ferroelectricferroelectric_pset
MOS harnessMOS_harnessMOS_harness_pset
Parameter interfaceParam_Interface_DeviceParam_Interface
Saturable inductor(可饱和电感)satinductorsatinductor_pset
SPICE temperature interfaceSpice_Temperature_Interface_DeviceSpice_Temperature_Interface

用户定义紧凑模型

Sentaurus Device 为用户定义的紧凑模型提供了紧凑模型接口(CMI)。这些模型由您使用 C++ 实现,并在运行时链接到 Sentaurus Device。无需访问 Sentaurus Device 的源代码。

要实现一个新的用户定义模型:

  1. 为紧凑模型中的每个变量提供相应的方程。对于电极电压,计算从器件流入电极的电流。对于内部模型变量,使用模型方程。
  2. 编写新紧凑模型的正式描述。Sentaurus Device 在加载模型之前读取此紧凑电路文件。
  3. 实现一组 C++ 接口子程序。Sentaurus Device 提供运行时环境。
  4. 将模型代码编译为共享对象文件,在运行时链接到 Sentaurus Device。cmi 脚本执行此编译。
  5. 使用 CMIPath 关键字在命令文件的 File 部分定义搜索路径。
  6. 在紧凑电路文件(扩展名 .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 比例因子

比例因子描述倍数
ttera10¹²
ggiga10⁹
meg 或 xmega10⁶
kkilo10³
mil千分之一英寸25.4 × 10⁻⁶
mmilli10⁻³
umicro10⁻⁶
nnano10⁻⁹
ppico10⁻¹²
ffemto10⁻¹⁵
aatto10⁻¹⁸

注意:比例因子 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电容模型npnnpn BJT 模型
csw电流控制开关pjfp 沟道 JFET 模型
d二极管模型pmfp 沟道 MESFET
l互感模型pmosp 沟道 MOSFET 模型
njfn 沟道 JFET 模型pnppnp BJT 模型
nmfn 沟道 MESFETr电阻模型
nmosn 沟道 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
jJFET 或 MESFETJ1 7 2 3 model_jfet w=10u l=10u
k线性互感K1 L1 L2 0.98
l线性电感Lx a b 1e-9
mMOS 晶体管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
zGaAs MESFETZ1 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 电路文件中的参数类型

参数类型示例参数类型示例
charc = 'n'char[]cc = ['a' 'b' 'c']
doubled = 3.14double[]dd = [1.2 -3.4 5e6]
inti = 7int[]ii = [1 2 3]
strings = "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 文件,并绘制仿真时间、节点 inout 的电压,以及电阻 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 ... )

ElectricalThermal 语句也支持正则表达式语法,因此可以使用简单的表达式声明许多节点。例如:

cpp
Thermal ( node1 regexp("n[2-4]") regexp("x1.*") )

在此示例中,节点 node1n2n3n4 以及子电路 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 的电压、节点 tatc 的温度、pres 流入 tatc 的热通量,以及 i 流入接地节点 0 的电流。

请注意,电气和热电路是分开的,它们之间的桥梁是物理器件。物理器件的电极只能连接到电气电路中的节点,热端只能连接到热电路中的节点。

此外,物理器件的热端必须定义 SurfaceResistance,因为如果热端要连接到热电路,它必须是阻性的。这意味着每个热端必须定义 SurfaceResistanceSurfaceConductance,如果未定义,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 更改时更新 rtemp 的值。这是 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₃ = 0c₁ = 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 语句可以与内部节点一起使用,以在瞬态仿真之前设置通过电感的电流。例如:

cpp
Inductor_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
  • 器件的默认文件名

对于关键字 OutputACExtract,只需要一个不带扩展名的文件名。Sentaurus Device 自动附加预定义的扩展名:

cpp
File {
  Output = "mct"
  ACExtract = "mct"
}

对于关键字 DevicePathSPICEPathCMIPath,您必须分配一个目录列表,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 部分。因此,默认文件名可能由多个器件包含。

在以下示例中,r1r2 都使用在 res 的定义中设置的保存器件参数:

cpp
Device res {
  File { Save="res" ... }
  ...
}
System {
  res r1
  res r2
}

因此,原则上 r1r2 具有相同的 Save 默认值(即 res)。由于将两个器件实例保存到同一名称是不切实际的,器件实例的名称(即 r1r2)被连接到文件名以生成文件 res.r1res.r2

此文件名扩展过程适用于 File 部分的关键字 CurrentPlotSave,也适用于文件名从全局默认值复制到器件类型声明时。

表 17 Current、Plot 和 Save 关键字的文件名扩展

级别文件名格式
Instance(实例)&lt;given name&gt;
Device(器件)&lt;given name&gt;.&lt;instance name&gt;
Global(全局)&lt;given name&gt;.&lt;device type&gt;.&lt;instance name&gt;

原文参考:Sentaurus™ Device User Guide, W-2024.09, Chapter 3 "Mixed-Mode Simulations"

基于 Sentaurus TCAD 官方文档构建

代码块