Skip to content

附录 F:提取库

本附录提供有关提取库(Extraction Library)过程的信息。

提取库用于从各类器件的 I–V 特性曲线中提取各种参数。提取库接受以两个 Tcl 列表形式的 I–V 数据:一个列表包含电压点,另一个列表包含相应的电流值。

提取库在 Sentaurus Visual 启动时自动加载。但是,如果您已关闭扩展库的自动加载功能,则可以使用以下命令显式加载提取库:

tcl
load_library extract

Python 库

对于 Python 模式,请参阅 Sentaurus Visual Python API 文档(Help > Python API Reference)。

语法约定

提取库使用唯一的命名空间标识符(ext::)来调用其过程。所有与此库关联的过程和变量在调用时都会在前面加上命名空间标识符。例如:

tcl
ext::<proc_name>

每个过程有多个参数。提取库使用输入解析器,接受以下形式的参数:

tcl
-keyword <value>

语法约定(续)

NOTE

所有 Sentaurus Visual 库都支持标准 Sentaurus Visual 语法,即关键字前带有短横线(-)。为保持向后兼容性,所有 Sentaurus Visual 库继续支持 keyword= <value> 语法。对于每个过程调用,您可以使用 -keyword <value> 语法或 keyword= <value> 语法。但是,在任何单个过程调用中,只能使用一种类型的语法。否则将生成错误消息。

仅记录新语法。如果您想继续使用 keyword= <value> 语法,也可以在关键字和等号之间插入空格,例如 keyword = <value>。如果在等号和值字段之间省略空格,当值是解引用(de-referenced)的 Tcl 变量时将导致失败。使用 keyword= $val(不是 keyword=$val)。

解析器接受任意顺序的参数。对于某些参数,预定义了默认值。这些参数可以省略。如果省略了没有预定义默认值的参数,过程将退出并显示错误消息。此外,无法识别的参数会导致错误消息。

提取库使用传引用(passing-by-reference)方法而不是标准的 Tcl 过程返回值方法将结果返回给调用程序。过程关键字 -out 用于将结果返回给调用程序:

tcl
-out <var_name>, <list_name>, or <array_name>

以下约定用于 Tcl 命令的语法:

  • 尖括号 —— <> —— 表示必须替换的文本,但它们不是语法的一部分。特别是,使用以下类型标识符:
    • <r>:替换为实数,或计算结果为实数的解引用 Tcl 变量。例如:$val
    • <i>:替换为整数,或计算结果为整数的解引用 Tcl 变量。例如:$i
    • <string>:替换为字符串,或计算结果为字符串的解引用 Tcl 变量。例如:$file
    • <list_of_r>:替换为实数列表,或计算结果为实数列表的解引用 Tcl 变量。例如:$values
    • <list_of_strings>:替换为字符串列表,或计算结果为字符串列表的解引用 Tcl 变量。例如:$files
    • <var_name>:替换为本地 Tcl 变量的名称。例如:val(不是 $val)。
    • <list_name>:替换为本地 Tcl 列表的名称。例如:values(不是 $values)。
    • <array_name>:替换为本地 Tcl 数组的名称。例如:myarray(不是 $myarray)。
  • 方括号 —— [] —— 表示参数是可选的,但它们不是语法的一部分。
  • 竖线 —— | —— 表示选项,只能指定其中一个。

过程帮助

要获取特定过程的帮助,在 Tcl 模式下,将 -help 关键字设置为 1:

tcl
ext::<procedure_name> -help 1

如果此命令包含在 Sentaurus Visual 文件中,当 Sentaurus Visual 在以下环境执行时:

  • 在 Sentaurus Workbench 中以批处理模式运行时,帮助信息会打印到相应 Sentaurus Visual 节点的运行时输出文件(扩展名为 .out)。
  • 在 Sentaurus Workbench 中以交互模式运行时,帮助信息会显示在 Tcl 控制台中,并打印到 Sentaurus Visual 输出文件。

您也可以在用户界面的 Tcl 控制台中输入命令,此时帮助信息会显示在控制台中。

过程输出

如"语法约定"(第 437 页)所述,提取库的所有过程通过将结果存储在 Tcl 变量中来将结果返回给调用程序。Tcl 变量的名称指定为 -out 关键字的值。

所有以 ext::Extract 开头的过程都会提取器件参数。例如,过程 ext::ExtractVtgm 用于提取阈值电压:

tcl
ext::ExtractVtgm -out Vt -name Vtgm -v $Vgs -i $absIds

此处,由于使用了 -out Vt,提取的阈值电压存储在 Tcl 变量 Vt 中。

所有以 ext::Extract 开头的提取库过程都会将提取的值传递给 Sentaurus Workbench 目录树(如果 -name 关键字与 "noprint" 不同)。提取的量显示为 Sentaurus Workbench 变量。

如果使用 -name "noprint",则提取的变量不会传递给 Sentaurus Workbench 目录树。如果使用 -name out,则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。

此处,由于使用了 -name Vtgm,提取的阈值电压值显示为 Sentaurus Workbench 变量 Vtgm

如果提取库过程中存在错误,则 Sentaurus Visual 的行为取决于它是在 Sentaurus Workbench 中以批处理模式还是交互模式执行。在批处理模式下,Sentaurus Visual 会退出,错误消息仅打印到 Sentaurus Visual 错误文件(扩展名为 .err)。在交互模式下,错误消息会显示在 Tcl 控制台中,并打印到 Sentaurus Visual 错误文件。

您可以处理提取库过程引发的错误,例如,使用 Tcl catch 命令。

所有过程也会打印多条消息(包括警告消息)。如果 Sentaurus Visual 以批处理模式执行,消息仅打印到 Sentaurus Visual 输出文件;而在交互模式下,消息会显示在 Tcl 控制台中,并打印到 Sentaurus Visual 输出文件。

打印的信息量取决于过程 lib::SetInfoDef 指定的信息级别。无论指定的信息级别如何,提取的值都会由以 ext::Extract 开头的过程打印到输出文件中。

例如,如果使用 lib::SetInfoDef 过程将所有过程的信息级别设置为 0:

tcl
lib::SetInfoDef 0
ext::ExtractVtgm -out Vt -name Vtgm -v $Vgs -i $Ids

则打印以下消息:

DOE: Vtgm 0.316

如果使用 lib::SetInfoDef 过程将 ext::ExtractVtgm 过程的信息级别设置为 1:

tcl
lib::SetInfoDef 1
ext::ExtractVtgm -out Vt -name Vtgm -v $Vgs -i $Ids -vo 1e-4

或者使用 -info 关键字:

tcl
lib::SetInfoDef 0
ext::ExtractVtgm -out Vt -name Vtgm -v $Vgs -i $Ids -vo 1e-4 -info 1

则打印以下消息:

 DOE: Vtgm 0.316
 Vtgm (Max gm method): 0.316

如果提取库过程无法提取参数,则该参数被设置为字符 'x' 并打印一条消息。对于 ext::ExtractVtgm,会打印以下消息:

 DOE: Vtgm x
 ext::ExtractVtgm: Vtgm not found!

ext::AbsList

计算列表所有元素的绝对值。

语法

tcl
ext::AbsList -out <list_name> -x <list_of_r> [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储绝对值列表的列表名称。(列表名称,无默认值)
-x <list_of_r>输入列表。(实数列表,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_pMOS_des.plt -name DC
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
puts "Ids: $Ids"
# 计算漏极电流的绝对值
ext::AbsList -out Idabs -x $Ids
puts "Idabs: $Idabs"
#-> Ids: -5.40e-10 -9.56e-10 -9.11723e-08 ... -6.73e-05
#-> Idabs: 5.40e-10 9.56e-10 9.11723e-08 ... 6.73e-05

ext::DiffForwardList

使用前向有限差分法计算曲线的一阶导数。曲线由两个 Tcl 列表表示:一个包含 x 值(自变量),一个包含相应的 y 值(因变量)。

语法

tcl
ext::DiffForwardList -out <array_name> -x <list_of_r> -y <list_of_r>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 xdyx 元素的值和 dy 元素的值分别是 x 值和一阶导数的列表。(数组名称,无默认值)
-x <list_of_r>包含 x 值(自变量)的列表。(实数列表,无默认值)
-y <list_of_r>包含 y 值(因变量)的列表。(实数列表,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 1.0 2.0 3.0 4.0]
# 使用 y=2*x 生成 Ys
set Ys [list]
foreach x $Xs {
    lappend Ys [expr 2*$x]
}
ext::DiffForwardList -out DyDx -x $Xs -y $Ys
puts "x-values: $Xs"
puts "xnew-values: $DyDx(x)"
puts "y-values: $Ys"
puts "derivative: $DyDx(dy)"
#-> x-values: 1.0 2.0 3.0 4.0
#-> xnew-values: 1.5 2.5 3.5
#-> y-values: = 2.0 4.0 6.0 8.0
#-> derivative: 2.0 2.0 2.0

ext::DiffList

计算曲线的一阶导数。曲线由两个 Tcl 列表表示:一个包含 x 值(自变量),一个包含相应的 y 值(因变量)。

NOTE

过程 ext::DiffList 使用中心有限差分法计算数据点处的导数。此方法使用两个相邻点的 x 和 y 值,这些值由过程使用线性或对数插值在内部计算。

语法

tcl
ext::DiffList -out <list_name> -x <list_of_r> -y <list_of_r>
[-yLog 0 | 1] [-xLog 0 | 1] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储一阶导数的列表名称。(列表名称,无默认值)
-x <list_of_r>包含 x 值(自变量)的列表。(实数列表,无默认值)
-y <list_of_r>包含 y 值(因变量)的列表。(实数列表,无默认值)
-yLog 0 | 1选择用于计算导数的 y 轴值的线性(0)或对数(1)插值。默认值:0
-xLog 0 | 1选择用于计算导数的 x 轴值的线性(0)或对数(1)插值。默认值:0
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 1 1.5 2.5 6 7 7.5 8.5 8.7 8.8 10]
# 使用 y=exp(x)+1 生成 Ys
set Ys [list]
foreach x $Xs {
    lappend Ys [expr exp($x) + 1]
}
# 对于指数函数,对 y 轴值使用对数插值
set yLog 1
ext::DiffList -out dydx -x $Xs -y $Ys -yLog $yLog
puts "x-values: $Xs"
puts "y-values: $Ys"
puts "derivative: $dydx"
#-> x-values: 1 1.5 2.5 6 7 7.5 8.5 8.7 8.8 10
#-> y-values: 3.718 5.481 13.182 ... 22027.465
#-> derivative: 2.887 4.532 12.231 ... 22012.323

ext::ExtractBVi

从 I–V 曲线中提取击穿电压。击穿电压定义为电流达到某一定义电平时的偏置电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractBVi -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储击穿电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含电流值的列表。(实数列表,无默认值)
-io <r>电流电平。(非零实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"BVi")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 npn 双极晶体管的击穿电压
load_file DATA/IcVcBV_npn_des.plt -name BV
set Vcbs [get_variable_data "collector InnerVoltage" -dataset BV]
set Ics [get_variable_data "collector TotalCurrent" -dataset BV]
ext::ExtractBVi -out BVcboi -name "out" -v $Vcbs -i $Ics -io 1e-12 \
    -f "%.3f"

ext::ExtractBVv

从 I–V 曲线中提取击穿电压。击穿电压定义为可施加到触点的最大电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractBVv -out <var_name> -v <list_of_r> -i <list_of_r> -sign <+1 | -1>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储击穿电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含电流值的列表。(实数列表,无默认值)
-sign <+1 | -1>区分不同类型的双极晶体管:+1:npn 晶体管;-1:pnp 晶体管。
通常,如果在负偏置时发生击穿,则设置 -sign -1。(无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"BVv")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.2e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 npn 双极晶体管的击穿电压
load_file DATA/IcVcBV_npn_des.plt -name BV
set Vcbs [get_variable_data "collector InnerVoltage" -dataset BV]
set Ics [get_variable_data "collector TotalCurrent" -dataset BV]
ext::ExtractBVv -out BVcbov -name "out" -v $Vcbs -i $Ics -sign 1 \
    -f "%.3f"

ext::ExtractEarlyV

从 Ic–Vce 曲线中提取 Early 电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractEarlyV -out <var_name> -v <list_of_r> -i <list_of_r> -vo <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储 Early 电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含集电极电流值的列表。(实数列表,无默认值)
-vo <r>偏置点,在该点确定 Ic–Vce 曲线的斜率以计算 Early 电压。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"Va")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 pnp 双极晶体管的 Early 电压
load_file DATA/IcVc_pnp_des.plt -name IcVce
set Vcs [get_variable_data "collector OuterVoltage" -dataset IcVce]
set Ics [get_variable_data "collector TotalCurrent" -dataset IcVce]
ext::AbsList -out absIcs -x $Ics
ext::ExtractEarlyV -out Va -name "out" -v $Vcs -i $absIcs -vo -1.25 \
    -f "%.2f"

ext::ExtractExtremum

提取曲线的最大值或最小值。曲线由两个 Tcl 列表表示:一个包含 x 值,一个包含相应的 y 值。

语法

tcl
ext::ExtractExtremum -out <var_name> -x <list_of_r> -y <list_of_r>
[-type "max" | "min"] [-name <string>] [-f <string>]
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储曲线最大值或最小值的变量名称。(实数,无默认值)
-x <list_of_r>包含 x 值的列表。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-type "max" | "min"选择提取曲线的最小值("min")还是最大值("max")。默认值:"max"
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"out")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::ExtractExtremum -out IdLin -name "out" -x $Vgs -y $Ids -type "max"

ext::ExtractGm

从 Id–Vgs 曲线中提取最大跨导。跨导定义为:

最大跨导所在的栅偏压使用抛物线插值计算。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractGm -out <var_name> -v <list_of_r> -i <list_of_r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储最大跨导值的变量名称。(实数,无默认值)
-v <list_of_r>包含栅极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"gm")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 pMOSFET 的 gm
load_file DATA/IdVgLin_pMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::AbsList -out absIds -x $Ids
ext::ExtractGm -out gmLin -name "out" -v $Vgs -i $absIds
puts "Max gm: [format %.3e $gmLin] S/um"
#-> Max gm: 1.913e-04 S/um

ext::ExtractIoff

从 Id–Vgs 曲线(在高漏极偏置下计算)中提取指定栅极电压下的漏极泄漏电流。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。漏极泄漏电流在较小的非零栅极电压值下提取,以避免噪声。

语法

tcl
ext::ExtractIoff -out <var_name> -v <list_of_r> -i <list_of_r> -vo <r>
[-log10 0 | 1] [-name <string>] [-f <string>]
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储漏极泄漏电流值的变量名称。(实数,无默认值)
-v <list_of_r>包含栅极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-vo <r>提取漏极泄漏电流时的栅极电压。建议使用较小但非零的值,例如 NMOS 器件使用 0.1 mV,PMOS 器件使用 –0.1 mV。(实数,无默认值)
-log10 0 | 1设置为 1 时过程返回 log10(Ioff)。否则返回 Ioff。默认值:0
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"Ioff")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3e")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgSat_pMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::AbsList -out absIds -x $Ids
# 计算漏极电流的绝对值
ext::ExtractIoff -out Ioff -name "out" -v $Vgs -i $absIds -vo -1e-4 \
    -log10 0
puts "Ioff: [format %.3e $Ioff] A/um"
ext::ExtractIoff -out log10Ioff -name "noprint" -v $Vgs -i $absIds \
    -vo -1e-4 -log10 1
puts "Log10Ioff: [format %.3f $log10Ioff]"
#-> Ioff: 4.009e-06 A/um
#-> Log10Ioff: -5.397

ext::ExtractRdiff

在指定电压下从 I–V 曲线中提取微分电阻 定义为:

曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractRdiff -out <var_name> -v <list_of_r> -i <list_of_r> -vo <r>
[-yLog 0 | 1] [-xLog 0 | 1] [-name <string>] [-f <string>]
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储微分电阻值的变量名称。(实数,无默认值)
-v <list_of_r>包含电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含电流值的列表。(实数列表,无默认值)
-vo <r>提取微分电阻时的电压。(实数,无默认值)
-yLog 0 | 1选择用于计算导数的 y 轴值的线性(0)或对数(1)插值。参见 ext::DiffList 第 444 页的说明。默认值:0
-xLog 0 | 1选择用于计算导数的 x 轴值的线性(0)或对数(1)插值。参见 ext::DiffList 第 444 页的说明。默认值:0
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"Rdiff")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 pnp 双极晶体管的导通态输出电阻
load_file DATA/IcVc_pnp_des.plt -name IcVce
set Vcs [get_variable_data "collector OuterVoltage" -dataset IcVce]
set Ics [get_variable_data "collector TotalCurrent" -dataset IcVce]
ext::AbsList -out absIcs -x $Ics
# 计算集电极电流的绝对值
ext::ExtractRdiff -out Ron -name "out" -v $Vcs -i $absIcs -vo -1.25 \
    -f "%.2e"
puts "Ron (at Vcs= -1.25 V): [format %.2e $Ron] Ohm-um"
#-> Ron: 3.35e+04 Ohm-um

ext::ExtractRsh

通过创建轴对齐切割线,计算 2D 结构中半导体层沿垂直方向的薄层电阻 (单位:)和 p-n 结深。它还计算总薄层电阻(每层薄层电阻之和)。

NOTE

此过程仅适用于 2D 结构。

每个半导体层的薄层电阻使用以下公式计算:

其中 是半导体层的厚度, 是其电导率,定义为:

其中:

  • 是基本电荷
  • 分别是电子和空穴密度
  • 分别是电子和空穴迁移率

电阻率 为:

NOTE

轴对齐切割线使用 create_cutline 命令创建(参见第 232 页的 create_cutline)。

语法

tcl
ext::ExtractRsh -out <array_name> -dataset <dataName> -semdataset <dataName>
-type <x | y> -at <r>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 dRshRshTotalRshTopxjTop 等。
dRsh 元素的值分别是每个半导体层的厚度和薄层电阻。
RshTotalRshTopxjTop 元素的值分别是总薄层电阻、顶层半导体层的薄层电阻和结深。索引还包含元素 X(对于 -type y)或 Y(对于 -type x)、DopingConcentrationeMobilityhMobilityeDensityhDensityConductivityResistivity
XY 元素的值分别是 x 轴值和 y 轴值的列表。
DopingConcentrationeMobilityhMobilityeDensityhDensityConductivityResistivity 元素的值分别是掺杂浓度、电子迁移率、空穴迁移率、电子密度、空穴密度、电导率和电阻率的列表。(数组名称,无默认值)
-dataset <dataname>将从中生成切割线的数据集名称。(字符串,无默认值)
-semdataset <dataname>包含变量 X(对于 -type y)或 Y(对于 -type x)、DopingConcentrationeMobilityhMobilityeDensityhDensityConductivityResistivity 的数据集名称。这些变量分别包含 x 轴值(对于 -type y)、y 轴值(对于 -type x)、掺杂浓度、电子迁移率、空穴迁移率、电子密度、空穴密度、电导率和电阻率的列表。(字符串,无默认值)
-type x | y将切割线链接到指定轴。如果指定 -type x-type y),则切割线链接到 x 轴(y 轴),并且切割线与 y 轴(x 轴)轴对齐创建。请指定 -type 使切割线沿垂直方向创建。(字符串,无默认值)
-at <r>轴对齐切割线切割其所链接轴的值。(实数,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/LDMOS_des.tdr -name Structure2d
create_plot -name Plot_Structure2d -dataset Structure2d
# 在 y=5.0 处创建切割线并提取 Rsh
ext::ExtractRsh -out Rsh -dataset Structure2d -semdataset RshProfile \
    -type y -at 5.0
# 提取顶层薄层电阻
puts "DOE: Rshtop [format %.2e $Rsh(RshTop)]"
# 提取 p-n 结深
puts "DOE: xj [format %.3f $Rsh(xjTop)]"
puts "Rshtop: [format %.2e $Rsh(RshTop)] Ohm/sq"
puts "xj: [format %.3f $Rsh(xjTop)] um"
#-> Rshtop: 7.36e+04 Ohm/sq
#-> xj: 2.029 um
# 绘制电导率分布
create_plot -1d -name Plot_Profile
create_curve -dataset RshProfile -axisX X -axisY Conductivity

ext::ExtractSS

对于给定的栅极电压 Vgo,从 Id–Vgs 曲线中提取亚阈值电压摆幅(SS)。亚阈值电压摆幅(SS)定义为:

其中 Vg 单位为 V,Id 单位为 A/μm 或 A,SS 单位为 mV/decade。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

NOTE

曲线开头或非常低的电流水平下斜率可能存在噪声。将 Vgo 设置为较小但非零的值通常会获得更好的结果。

语法

tcl
ext::ExtractSS -out <var_name> -v <list_of_r> -i <list_of_r> -vo <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储亚阈值电压摆幅值的变量名称。(实数,无默认值)
-v <list_of_r>包含栅极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流绝对值的列表。(实数列表,无默认值)
-vo <r>提取斜率时的栅极电压。该值应明显低于阈值电压。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
set Vgo 1e-2
ext::ExtractSS -out SSlin -name "out" -v $Vgs -i $Ids -vo $Vgo

ext::ExtractSsub

从 Id–Vgs 曲线中提取亚阈值电压摆幅。亚阈值电压摆幅(SS)定义为:

其中 Vg 单位为 V,Id 单位为 A/μm 或 A,SS 单位为 mV/decade, 的最大值。

曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractSsub -out <var_name> -v <list_of_r> -i <list_of_r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储亚阈值电压摆幅值的变量名称。(实数,无默认值)
-v <list_of_r>包含栅极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流绝对值的列表。(实数列表,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::ExtractSsub -out Ssub -name "out" -v $Vgs -i $Ids

ext::ExtractValue

对于给定的目标 x 值,该过程从曲线中提取第 n 个插值 y 值。曲线由两个 Tcl 列表表示:一个包含 x 值,一个包含相应的 y 值。

NOTE

要查找给定 y 值对应的插值 x 值,请交换 x 和 y 参数。

语法

tcl
ext::ExtractValue -out <var_name> -x <list_of_r> -y <list_of_r> -xo <r>
[-occurrence <i>] [-yLog 0 | 1] [-xLog 0 | 1] [-name <string>]
[-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储第一个找到的 y 值的变量名称。(实数,无默认值)
-x <list_of_r>包含 x 值的列表。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-xo <r>目标 x 值。(实数,无默认值)
-occurrence <i>指定要提取的第 n 个插值 y 值。(整数,默认值:1)
-yLog 0 | 1选择用于 y 轴值的线性(0)或对数(1)插值。默认值:0
-xLog 0 | 1选择用于 x 轴值的线性(0)或对数(1)插值。默认值:0
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 1e2 1e3 1e4 1e5 1e6 1e7 1e8 1e9 1e10 1e11 1e12]
set Ys [list -100 -25 25 50 100 100 75 50 25 -25 -100]
# 使用默认线性插值提取给定目标 y 值对应的第一个插值 x 值
ext::ExtractValue -out Xlin -x $Ys -y $Xs -yLog 0 -xo 0
puts "Xlin: [format %.3e $Xlin]"
# 使用对数插值提取给定目标 y 值对应的第一个插值 x 值
ext::ExtractValue -out Xlog -x $Ys -y $Xs -yLog 1 -xo 0
puts "Xlog: [format %.3e $Xlog]"
# 使用对数插值提取给定目标 y 值对应的第二个插值 x 值
ext::ExtractValue -out X2nd_log -x $Ys -y $Xs -yLog 1 -xo 0 \
    -occurrence 2
puts "X2nd_log: [format %.3e $X2nd_log]"

ext::ExtractVdlin

使用线性插值从 Id–Vds 曲线中提取给定漏极电流电平对应的漏极电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVdlin -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-io <r>漏极电流电平。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVd_nMOS_des.plt -name DC
set Vds [get_variable_data "drain OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::ExtractVdlin -out Vdlin -name "out" -v $Vds -i $Ids -io 1e-4 \
    -f "%.4f"

ext::ExtractVdlog

使用对数插值从 Id–Vds 曲线中提取给定漏极电流电平对应的漏极电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVdlog -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-io <r>漏极电流电平。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVd_nMOS_des.plt -name DC
set Vds [get_variable_data "drain OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::ExtractVdlog -out Vdlog -name "out" -v $Vds -i $Ids -io 1e-4 \
    -f "%.4f"

ext::ExtractVglin

使用线性插值从 Id–Vgs 曲线中提取给定漏极电流电平对应的栅极电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVglin -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-io <r>漏极电流电平。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ExtractVglin -out Vglin -name "out" -v $Vgs -i $Ids -io 1e-7 -f "%.4f"

ext::ExtractVglog

使用对数插值从 Id–Vgs 曲线中提取给定漏极电流电平对应的栅极电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVglog -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-io <r>漏极电流电平。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ExtractVglog -out Vglog -name "out" -v $Vgs -i $Ids -io 1e-7 -f "%.4f"

ext::ExtractVtgm

使用最大跨导法从 Id–Vgs 曲线中提取阈值电压。阈值电压定义为在最大跨导 点处作切线延长线与栅极电压轴的交点坐标。最大跨导所在的栅偏压使用抛物线插值计算。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVtgm -out <var_name> -v <list_of_r> -i <list_of_r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 提取 p-MOSFET 的 Vtgm
load_file DATA/IdVgLin_pMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::AbsList -out absIds -x $Ids
ext::ExtractVtgm -out Vtgm -name "out" -v $Vgs -i $absIds
puts "Vt (Max gm method): [format %.3f $Vtgm] V"
#-> Vt (Max gm method): -0.503 V

ext::ExtractVti

从 Id–Vgs 曲线中提取给定亚阈值电流电平的阈值电压。阈值电压定义为漏极电流达到该电流电平时的栅极电压。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVti -out <var_name> -v <list_of_r> -i <list_of_r> -io <r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-io <r>亚阈值电流电平。(实数,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
set lgate 0.022 ;# um
set io [expr 100e-9/$lgate] ;# subthreshold current level [A/um]
ext::ExtractVti -out VtiLin -name "out" -v $Vgs -i $Ids -io $io

ext::ExtractVtsat

曲线中提取阈值电压。阈值电压定义为 曲线最大斜率点处作切线延长线与栅极电压轴的交点坐标。 曲线最大斜率点所在的栅偏压使用抛物线插值计算。曲线由两个 Tcl 列表表示:一个包含电压点,一个包含相应的电流值。

语法

tcl
ext::ExtractVtsat -out <var_name> -v <list_of_r> -i <list_of_r>
[-name <string>] [-f <string>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <var_name>存储与指定漏极电流电平对应的漏极电压值的变量名称。(实数,无默认值)
-v <list_of_r>包含漏极电压值的列表。(实数列表,无默认值)
-i <list_of_r>包含漏极电流值的列表。(实数列表,无默认值)
-name <string>出现在 Sentaurus Workbench 目录树中的提取变量名称。(字符串,默认值:"SS")
注意:如果使用 -name "noprint",则禁止 Sentaurus Workbench 提取。
如果使用 -name "out",则 -out 关键字指定的变量名也用作出现在 Sentaurus Workbench 目录树中的名称。
-f <string>用于将提取的变量写入 Sentaurus Workbench 目录树的格式字符串。(字符串,默认值:"%.3f")
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::ExtractVtsat -out VtiLin -name "out" -v $Vgs -i $Ids

ext::FilterTable

处理来自 Sentaurus Workbench 目录树的数据,以便为特定实验子集创建以一个 Sentaurus Workbench 参数(y 值)为纵坐标、另一个 Sentaurus Workbench 参数(x 值)为横坐标的图形。数据以两个列表的形式指定,用于标识 x 和 y 值,这些值经过预处理后创建图形。使用一对目标值和相应的 Sentaurus Workbench 参数列表指定实验必须满足的条件才能包含在图形中。

语法

tcl
ext::FilterTable -out <array_name> -x <list_of_r> -y <list_of_r>
-conditions <array_name> -ncond <i>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XYX 元素的值是使用关键字 -x 指定的值列表的子集。这些值按升序排列。Y 元素的值是使用关键字 -y 指定的值列表的子集。所有包含非数值值的 y 列表条目都会被忽略。(数组名称,无默认值)
-x <list_of_r>包含要预处理的 Sentaurus Workbench 参数值的列表:x 值。(实数列表,无默认值)
-y <list_of_r>包含要预处理的 Sentaurus Workbench 参数值的列表:y 值。(实数列表,无默认值)
-conditions <array_name>具有两个索引的数组。字符串索引数组包含元素 "Target" 和 "Values"。"Target" 元素的值包含要用作过滤条件的 Sentaurus Workbench 参数的所需值。"Values" 元素包含所有实验的相应 Sentaurus Workbench 参数值列表。
第二个整数计数器枚举条件。枚举从 1 开始。(数组名称,无默认值)
-ncond <i>使用关键字 -conditions 指定的数组中包含的条件数量。(整数,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 绘制应力条件下 PMOS 的 Vt 滚降曲线
set Types [list nMOS nMOS nMOS nMOS nMOS nMOS nMOS nMOS \
    pMOS pMOS pMOS pMOS pMOS pMOS pMOS pMOS]
set Lgs [list 0.090 0.090 0.045 0.045 0.130 0.130 0.065 0.065 \
    0.065 0.065 0.045 0.045 0.130 0.130 0.090 0.090]
set Stress [list no yes no yes no yes no yes \
    no yes no yes no yes no yes]
set Vtgms [list 0.424 0.0374 0.313 0.263 0.414 0.364 0.408 0.358 \
    -0.344 -0.294 -0.232 -0.182 x x -0.374 -0.324]
set Conditions(Target,1) "pMOS"
set Conditions(Values,1) $Types
set Conditions(Target,2) "yes"
set Conditions(Values,2) $Stress
ext::FilterTable -out LgVt -x $Lgs -y $Vtgms -conditions Conditions \
    -ncond 2
create_variable -name Lg -dataset VtgmLg -values $LgVt(X)
create_variable -name Vtgm -dataset VtgmLg -values $LgVt(Y)
create_plot -1d -name Plot_VtRollOff
create_curve -name VtRollOff -dataset VtgmLg -axisX "Lg" -axisY "Vtgm"
puts "Lg= $LgVt(X)"
puts "Vtgm= $LgVt(Y)"
#-> Lg= 0.045 0.065 0.090
#-> Vtgm= -0.182 -0.294 -0.324

在 Sentaurus Workbench 下的用法

在 Sentaurus Visual 脚本中,可以使用 Sentaurus Workbench 的动态预处理功能 @<parameter_name>:all@ 来访问所有 Sentaurus Workbench 实验的输入参数和提取值列表。例如,上面示例中的列表 Types、Lgs、Stress 和 Vtgms 是作为 Sentaurus Visual 脚本中以下命令的结果自动生成的:

tcl
set Types [list @Type:all@]
set Lgs [list @lgate:all@]
set Stress [list @stress:all@]
set Vtgms [list @Vt:all@]

这里,Tcl 列表 Types 包含所有实验的 Sentaurus Workbench 输入参数 Type 的值,例如根据该实验创建的是 NMOS 还是 PMOS 结构,这些值分别为 nMOS 或 pMOS。

类似地,Tcl 列表 Lgs 包含另一个 Sentaurus Workbench 输入参数的值列表的"并行"列表,例如包含给定 MOSFET 的栅极长度值。

提取的参数可以以相同的方式访问。例如,Tcl 列表 Vtgms 包含每个相应实验的阈值电压提取值。

NOTE

各个列表中的值可能是数值,也可能不是数值,这些值也不一定按顺序排列。

将使用关键字 -x-y 在过程 ext::FilterTable 中指定要处理(过滤)以创建图形的 x 和 y 值列表。在上面的示例中,栅极长度列表(-x $Lgs)和 Vtgm 值列表(-y $Vtgms)由 ext::FilterTable 处理。

关键字 -conditions 控制实验必须满足的条件才能包含在图形中。条件总数由关键字 -ncond 指定。所有条件都使用关键字 -conditions 在字符串索引数组中指定。每个条件由一个目标值和相应的 Sentaurus Workbench 参数列表定义。目标值是用作过滤条件的参数的所需值。

字符串索引数组的每个元素有两个索引。第一个索引是 "Target" 或 "Values"。第二个索引是条件编号。对于每个条件编号:

  • 使用数组的 "Target" 元素(第一个索引名为 "Target" 的元素)指定目标值。
  • 使用数组的 "Values" 元素(第一个索引名为 "Values" 的元素)指定相应的 Sentaurus Workbench 参数列表。

在上面的示例中,以下代码过滤出 PMOS 器件(条件编号 1)的栅极长度(Lg)和阈值电压(Vtgm)值。此条件使用名为 Conditions 的数组定义:

tcl
set Conditions(Target,1) "pMOS"
set Conditions(Values,1) $Types

这里目标值是 "pMOS",相应的 Sentaurus Workbench 参数列表是 Types。

要过滤出承受应力的器件(条件编号 2)的 Lg 和 Vtgm 值,请定义 Conditions 数组的其他元素:

tcl
set Conditions(Target,2) "yes"
set Conditions(Values,2) $Stress

由于同时指定了两个条件(-conditions Conditions -ncond 2),过程 ext::FilterTable 过滤出承受应力的 PMOS 器件的 Lg 和 Vtgm 值。

在上面的示例中,如果在 Conditions 数组中定义了两个条件,但将条件数量设置为 1(-conditions Conditions -ncond 1),则过程过滤出所有 PMOS 器件(有和无应力)的栅极长度和 Vtgm 值。第二个条件将不被考虑。

该过程返回一个带有一个字符串索引(由关键字 -out 指定)的数组(指定)。索引包含元素 XYX 元素的值是使用关键字 -x 指定的值列表的子集。这些值按升序排列。Y 元素的值是使用关键字 -y 指定的值列表的子集。数组中的这些列表可用于创建图形。

在上面的示例中,该过程返回由 Lg 值列表和承受应力的 PMOS 器件的 Vtgm 值列表组成的数组 LgVt-out LgVt)。这些列表可直接用于创建 Vt 滚降曲线:

tcl
create_variable -name Lg -dataset VtgmLg -values $LgVt(X)
create_variable -name Vtgm -dataset VtgmLg -values $LgVt(Y)
create_plot -1d -name Plot_VtRollOff
create_curve -name VtRollOff -dataset VtgmLg -axisX "Lg" -axisY "Vtgm"

作为附加功能,ext::FilterTable 过程会忽略 y 值中包含非数值的所有条目。使用此功能可省略提取失败的情况。在执行提取的工具输入文件中(例如之前的 Sentaurus Visual 工具实例),使用 #set 指令将提取的变量预设为值 x

tcl
#set Vtgm x
...
ext::ExtractVtgm -out Vtgm -name "out" -v $Vgs -i $absIds

实际提取过程(此处使用 ext::ExtractVtgm 过程)会用实际值覆盖预设置的值 x。但是,如果提取过程失败,则预设置的值保留不变。

上面示例的输出显示,承受应力的 130 nm 栅极长度(Lg=0.130)PMOS 器件的 Vtgm 值(= x)不包含在数组 LgVt 中。此外,数组 LgVt 中的栅极长度按升序排列:

tcl
puts "Lg= $LgVt(X)"
puts "Vtgm= $LgVt(Y)"
#-> Lg= 0.045 0.065 0.090
#-> Vtgm= -0.182 -0.294 -0.324

ext::FindExtrema

计算曲线的所有局部极值(最大值或最小值)。曲线由两个 Tcl 列表表示,一个包含 x 值(自变量),一个包含相应的 y 值(因变量)。

NOTE

如果曲线呈现平顶或平底(两个或多个相邻 x 值具有相同的 y 值),则返回最后一个 x 值作为极值点。

语法

tcl
ext::FindExtrema -out <array_name> -x <list_of_r> -y <list_of_r>
[-type "max" | "min"] [-eps <r>]
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XYX 元素的值是所有极值对应的 x 值。Y 元素的值是极值。(数组名称,无默认值)
-x <list_of_r>包含 x 值的列表。这些必须按升序或降序排列。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-type "max" | "min"选择提取曲线的最大值("max")还是最小值("min")。默认值:"max"
-eps <r>如果使用关键字 -y 指定的列表的两个相邻元素之间的差值小于 -eps 的值,则认为两个元素相等。(实数,默认值:
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 0.0 1.5 2.0 3.0]
set Ys [list 0.0 1.0 0.5 2.0]
ext::FindExtrema -out XY -x $Xs -y $Ys
puts "All maxima: $XY(Y)"
puts "All x-values corresponding to the maxima: $XY(X)"
#-> All maxima: 1.0 2.0
#-> All x values corresponding to the maxima: 1.5 3.0

ext::FindVals

对于给定的目标 x 值,此过程从曲线中提取所有相应的插值 y 值。曲线由两个 Tcl 列表表示:一个包含 x 值,一个包含相应的 y 值。

NOTE

要查找给定 y 值对应的插值 x 值,请交换关键字 -x-y 的值。

语法

tcl
ext::FindVals -out <list_name> -x <list_of_r> -y <list_of_r> -xo <r>
[-yLog 0 | 1] [-xLog 0 | 1] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储 y 值列表的列表名称。(列表名称,无默认值)
-x <list_of_r>包含 x 值的列表。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-xo <r>目标 x 值。(实数,无默认值)
-yLog 0 | 1选择用于 y 轴值的线性(0)或对数(1)插值。默认值:0
-xLog 0 | 1选择用于 x 轴值的线性(0)或对数(1)插值。默认值:0
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 0.0 1.0 2.0 3.0 4.0]
set Ys [list 0.0 2.0 4.0 2.0 0.0]
# 查找 Ys=2.0 对应的所有 Xs 元素
ext::FindVals -out xos -x $Ys -y $Xs -xo 2.0
puts "The elements of Xs corresponding to Ys= 2.0 are $xos"
# 查找 Ys=2.0 对应的第一个 Xs 元素
ext::ExtractValue -out xos -name "noprint" -x $Ys -y $Xs -xo 2.0
puts "The first element of Xs corresponding to Ys= 2.0 is $xos"
#-> The elements of Xs corresponding to Ys= 2.0 are 1.0 3.0
#-> The first element of Xs corresponding to Ys= 2.0 is 1.0

ext::LinFit

使用最小二乘法对曲线进行线性拟合 。曲线由两个 Tcl 列表表示,一个包含 x 值(自变量),一个包含相应的 y 值(因变量)。

语法

tcl
ext::LinFit -out <array_name> -x <list_of_r> -y <list_of_r>
-xmin <r> -xmax <r> [-npar 1 | 2] [-weighted "off" | "on"]
[-weights <list_of_r>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XYYestimateresidualsslopeyinterceptndofRMSE
X 元素的值是使用关键字 -x 指定的值列表的子集。Y 元素的值是使用关键字 -y 指定的值列表的子集。
Yestimateresidualsslopeyintercept(对于 -npar 2)、dofRMSE 元素分别是估计的 Y 值()、残差()、估计的斜率()、估计的 y 截距()、自由度(dof)和均方根误差(RMSE)。
n 元素的值是 X 元素表示的列表中的元素数量()。(数组名称,无默认值)
-x <list_of_r>包含 x 值的列表。这些必须按升序或降序排列。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-xmin <r>执行线性拟合的 x 值范围内的最小 x 值。(实数,无默认值)
-xmax <r>执行线性拟合的 x 值范围内的最大 x 值。(实数,无默认值)
-npar 1 | 2计算参数的数量。如果使用 -npar 1,则仅计算斜率,并假设 y 截距为 0。默认值:2
-weighted "off" | "on"选择无权重("off")或加权("on")线性回归。默认值:"off"
-weights <list_of_r>包含每个 x 值的权重值的列表。(实数列表,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 20 60 100 140 180 220 260 300 340 380]
set Ys [list 0.18 0.37 0.35 0.78 0.56 0.75 1.18 1.36 1.17 1.65]
ext::LinFit -out XY -x $Xs -y $Ys -xmin [lindex $Xs 0] \
    -xmax [lindex $Xs end]
puts "Estimated slope= $XY(slope)"
puts "Estimated y-intercept= $XY(yintercept)"
puts "Root-MSE= $XY(RMSE)"
#-> Estimated slope= 0.00383
#-> Estimated y-intercept= 0.06924
#-> Root-MSE= 0.159

使用最小二乘法进行线性拟合

Y 作为 X 函数的回归曲线为:

其中 是斜率, 是 y 截距。

个数据点 的残差 定义为:

其中 是第 个数据点的 y 值估计。

误差平方和(SSE)定义为:

其中 是数据点编号。

拟合或估计的回归线:

通过最小化 SSE 计算。这里 分别是估计的 y 值、斜率和 y 截距 [1]。

RMSE 定义为:

其中对于 个数据点,自由度(dof)定义为:


ext::Linspace

在两个实数(xmin 和 xmax)之间创建 个线性等间距的值列表,包括端点。

语法

tcl
ext::Linspace -out <list_name> -xmin <r> -xmax <r> -n <i>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储线性等间距值列表的列表名称。(列表名称,无默认值)
-xmin <r>获取 x 值范围的最小 x 值。(实数,无默认值)
-xmax <r>获取 x 值范围的最大 x 值。(实数,无默认值)
-n <i>创建的值数量,其中 -n 的值应为大于 1 的正整数。(整数,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
# 创建 0 到 1 之间 11 个线性等间距值的列表
ext::Linspace -out X -xmin 0 -xmax 1 -n 11
puts "Xs: $X"
#-> Xs: 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

ext::LinTransList

对列表的元素应用线性变换。列表的元素被替换为变换后的值:

语法

tcl
ext::LinTransList -out <list_name> -x <list_of_r>
[-m <r>] [-b <r>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储变换值列表的列表名称。(列表名称,无默认值)
-x <list_of_r>输入列表。(实数列表,无默认值)
-m <r>线性变换的斜率。(实数,默认值:1.0)
-b <r>线性变换的偏移量。(实数,默认值:0.0)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
load_file DATA/IdVgLin_nMOS_des.plt -name DC
create_plot -1d -name Plot_IdVg
set Vgs [get_variable_data "gate OuterVoltage" -dataset DC]
set Ids [get_variable_data "drain TotalCurrent" -dataset DC]
ext::LinTransList -out VgTrans -x $Vgs -b 0.55
;# 将 Vg 值偏移 0.55 V
ext::LinTransList -out IdTrans -x $Ids -m 1e6
;# 将 Id 值从 A/um 缩放到 mA/mm
# 创建偏移和缩放后的 Id-Vg 曲线
create_variable -name VgTrans -dataset IdVgTrans -values $VgTrans
create_variable -name IdTrans -dataset IdVgTrans -values $IdTrans
create_plot -1d -name Plot_IdVg
create_curve -name IdVgTrans -dataset IdVgTrans \
    -axisX "VgTrans" -axisY "IdTrans"

ext::Log10List

对列表的元素应用 log10 函数。列表的元素被替换为函数值。

语法

tcl
ext::Log10List -out <list_name> -x <list_of_r>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <list_name>存储值列表的列表名称。(列表名称,无默认值)
-x <list_of_r>输入列表。(实数列表,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set Xs [list 10 100 1000]
ext::Log10List -out Ys -x $Xs
puts "log10(Xs): $Ys"
#-> log10(Xs): 1.0 2.0 3.0

ext::RemoveDuplicates

对于一对列表 x 和 y,删除列表 x 的重复元素以及列表 y 的相应元素。

语法

tcl
ext::RemoveDuplicates -out <array_name> -x <list_of_r> -y <list_of_r>
[-eps <r>] [-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XYX 元素的值是使用关键字 -x 指定的值列表的子集。这些值不包含重复值。Y 元素存储使用关键字 -y 指定的列表的相应元素。Y 元素的值是使用关键字 -y 指定的值列表的子集。(数组名称,无默认值)
-x <list_of_r>输入列表。(实数列表,无默认值)
-y <list_of_r>输入列表。(实数列表,无默认值)
-eps <r>如果使用关键字 -x 指定的列表的两个相邻元素之间的差值小于 -eps,则删除第一个元素。(实数,默认值:
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set x [list 1  1  2  3  1  1  2  2  2  3]
set y [list 10 20 30 40 50 60 70 80 90 100]
ext::RemoveDuplicates -out XY -x $x -y $y
set Xs $XY(X)
set Ys $XY(Y)
puts "Xs: $Xs"
puts "Ys: $Ys"
#-> Xs: 1 2 3 1 2 3
#-> Ys: 20 30 40 60 90 100

ext::RemoveZeros

对于一对列表 x 和 y,删除列表 x 中的零元素以及列表 y 的相应元素。

语法

tcl
ext::RemoveZeros -out <array_name> -x <list_of_r> -y <list_of_r>
[-iplists "x" | "y" | "xy"] [-eps <r>] [-info 0 | 1 | 2 | 3]
[-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XY
X 元素的值是使用关键字 -x 指定的值列表的子集。这些值不包含零值。Y 元素存储使用关键字 -y 指定的列表的相应元素。Y 元素的值是使用关键字 -y 指定的值列表的子集。(数组名称,无默认值)
-x <list_of_r>输入列表。(实数列表,无默认值)
-y <list_of_r>输入列表。(实数列表,无默认值)
-iplists "x" | "y" | "xy"从中删除零的输入列表。如果使用 -iplists "x",则从使用关键字 -x 指定的列表中删除零。如果使用 -iplists "xy",则从使用关键字 -x-y 指定的两个列表中删除零。(字符串,无默认值)
-eps <r>如果使用关键字 -x 指定的列表的元素小于 -eps 的值,则将其删除。(实数,默认值:
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set xs [list 0 1 2 3 0 -1]
set ys [list 10 20 30 40 50 0]
# 仅从 xs 列表中删除零
ext::RemoveZeros -out XY -x $xs -y $ys -iplists "x"
puts "Xs: $XY(X)"
puts "Ys: $XY(Y)"
#-> Xs: 1 2 3 -1
#-> Ys: 20 30 40 0

ext::SubLists

从一对列表中创建一对子列表其中一个列表是 x 值列表。第二个列表是 y 值列表。子列表使用 x 值范围创建。

NOTE

要使用 y 值范围创建一对子列表,请交换关键字 -x-y,并使用关键字 -xmin-xmax 指定 y 值范围。要从单个列表创建子列表,请同时使用 -x-y 关键字指定列表的值。

语法

tcl
ext::SubLists -out <array_name> -x <list_of_r> -y <list_of_r>
-xmin <r> -xmax <r>
[-info 0 | 1 | 2 | 3] [-help 0 | 1]

返回值

参数

参数描述
-out <array_name>存储结果的数组名称。数组有一个字符串索引。索引包含元素 XY
X 元素的值是使用关键字 -x 指定的值列表的子集。Y 元素的值是使用关键字 -y 指定的值列表的子集。(数组名称,无默认值)
-x <list_of_r>包含 x 值的列表。这些必须按升序或降序排列。(实数列表,无默认值)
-y <list_of_r>包含 y 值的列表。(实数列表,无默认值)
-xmin <r>获取子列表的 x 值范围内的最小 x 值。(实数,无默认值)
-xmax <r>获取子列表的 x 值范围内的最大 x 值。(实数,无默认值)
-info 0 | 1 | 2 | 3设置本地信息级别。默认值:0
-help 0 | 1设置为 1 时打印帮助信息。默认值:0

示例

tcl
set xs [list 1 2 3 4 5 6 7]
set ys [list 10 20 30 40 50 60 70]
ext::SubLists -out XY -x $xs -y $ys -xmin 2 -xmax 5
puts "Xs: $XY(X)"
puts "Ys: $XY(Y)"
#-> Xs: 2 3 4 5
#-> Ys: 20 30 40 50

lib::SetInfoDef

设置默认信息级别。

NOTE

  • Level 0:仅警告、错误或状态消息。
  • Level 1:回显结果。
  • Level 2:显示进度和一些调试信息。
  • Level 3:显示所有调试信息。

也可以使用提取库过程中过程的 -info 关键字设置本地信息级别。

语法

tcl
lib::SetInfoDef 0 | 1 | 2 | 3

返回值

参数

参数描述
<info_level>设置默认信息级别。默认值:0

示例

tcl
lib::SetInfoDef 2

参考资料

[1] W. H. Press et al., Numerical Recipes in C: The Art of Scientific Computing, Cambridge: Cambridge University Press, 2nd ed., 1992.

基于 Sentaurus TCAD 官方文档构建

代码块