Skip to content

附录 F(续):提取库

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 官方文档构建

代码块