Skip to content

[NOTE] 原文来源:Sentaurus Mesh User Guide, Version W-2024.09, Synopsys, Inc.

第 2 章:命令文件

本章描述 Sentaurus Mesh 命令文件的各个组成部分。

命令文件基础

在命令文件(.cmd)中,可按以下方式指定网格生成的不同参数:

  • 节(section)由左右大括号界定。
  • 每行只能指定一个关键字。
  • 命令文件中使用的关键字不区分大小写。
  • 字符串用双引号括起来。
  • 注释以 *# 开头。

命令文件中可以包含多种不同类型的信息。您可以指定细化信息、掺杂分布信息和各种网格生成器及工具的控制参数。

细化信息用于根据用户要求(局部单元尺寸)控制网格生成。此信息在 Definitions 节中指定。

分布信息用于定义场,例如用于网格适配的掺杂分布。掺杂分布可通过以下类型的信息指定:

  • 外部仿真结果
  • 常量数据
  • 描述分布的解析公式和预定义函数

命令文件的结构

命令文件包含以下节:

描述
Title命令文件可以以可选的标题语句开头,由 Title 关键字后跟双引号括起来的字符串组成。默认使用 Title ""
IOControls本节指定包含结构的显式输入文件和保存生成网格的输出文件(参见"IOControls 节",第 18 页)。
Definitions本节定义细化参数集和分布定义,供 Placements 节使用。这些集合通过其唯一引用名称引用(参见"Definitions 节",第 20 页)。
Placements本节定义 Definitions 节中给出的定义的实例,相对于当前器件放置(参见"Placements 节",第 34 页)。
Interpolate本节控制数据插值(参见"Interpolate 节",第 44 页)。
AxisAligned本节控制对齐轴网格生成器(参见"AxisAligned 节",第 45 页)。
Offsetting本节控制偏置网格生成器(参见"Offsetting 节",第 50 页)。
Delaunizer本节控制 Delaunizer 的行为(参见"Delaunizer 节",第 52 页)。
Tensor本节控制张量积网格生成器(参见"Tensor 节",第 56 页)。
Boundary本节控制与边界算法相关的参数(参见"Boundary 节",第 67 页)。
Tools本节指定附加工具(参见"Tools 节",第 72 页)。
QualityReport本节指定要报告的网格质量统计信息和网格质量标准的限制(参见"QualityReport 节",第 95 页)。
Structured本节指定定义 Josephson 结网格所需的参数(参见"Structured 节",第 98 页)。

命令文件的语法如下:

Title ""
IOControls
    {input/output information}
Definitions
    {defining information}
Placements
    {placing information}
Interpolate
    {data interpolation information}
AxisAligned
    {axis alignment information}
Offsetting
    {offsetting information}
Delaunizer
    {delaunizer information}
Tensor
    {tensor information}
Boundary
    {boundary information}
Tools
    {tools information}
QualityReport
    {mesh quality information}
Structured
    {Josephson junction mesh information}

IOControls 节

本节指定描述结构的输入文件名和保存生成结果的输出文件名。输入文件和边界文件可以包含 TDR 格式的边界或网格。

您可以使用 EnableOffsetEnableSectionsEnableTensorEnableTools 选项来根据命令文件的内容切换不同的算法。请注意,激活命令文件中无关节的后果是未定义的。

IOControls 节语法

IOControls {
    EnableEMW
    EnableIsotropic
    EnableOffset
    EnableSections
    EnableTensor
    EnableTools
    inputFile = "string"
    numThreads = integer
    outputFile = "string"
    saveInterfaceRegions = true | false
    unstructuredTensorMesh = true | false
    useDFISEcoordinates
    useUCScoordinates
    verbosity = 0 | 1 | 2 | 3
}

参数说明

除非另有说明,默认值在括号中给出。

EnableEMW — 使用张量积网格生成器生成适用于 Sentaurus Device Electromagnetic Wave Solver(EMW)应用的网格(参见"自动计算网格单元尺寸",第 60 页)。

EnableIsotropic — 激活各向同性网格生成器,该生成器直接对单元进行细化,而不是轴对齐的空间细化。各向同性网格的 Delaunizer 参数由命令文件 Delaunizer 节中的设置控制(参见"Delaunizer 节",第 52 页)。

EnableOffset — 激活命令文件的 Offsetting 节和偏置网格生成器(参见"Offsetting 节",第 50 页)。

EnableSections — 解析命令文件并激活与文件中存在的节关联的网格生成器。如果命令文件包含 AxisAlignedOffsettingTensorTools 节,则 EnableSections 选项自动激活相应的网格生成器。

指定 EnableSections 允许以下默认行为:

  • 如果命令文件中不存在 OffsettingTensorTools 节,则选择对齐轴网格生成器。
  • 如果命令文件中存在 Tensor 节或 Tools 节,则该节优先于 Offsetting 节(如果存在则忽略)。
  • 如果命令文件中存在 Tensor 节或 Tools 节,则忽略对齐轴网格生成器。
  • 如果同时存在 TensorTools 节,则 Tensor 节优先于 Tools 节。

注意DefinitionsPlacements 节属于解析分布生成器,只能由对齐轴网格生成器、张量积网格生成器或 Tools 节的 CreateProfiles 子节执行。如果执行任何其他工具或模块,则忽略 DefinitionsPlacements 节。

EnableTensor — 激活张量积网格生成器(参见"Tensor 节",第 56 页)。

EnableTools — 激活 Tools 节中指定的操作(参见"Tools 节",第 72 页)。

inputFile — 默认输入文件名基于命令文件的名称。如果指定了输入文件,则使用该文件而不是基于命令文件名的默认输入文件。

numThreads(1)— 设置网格生成器(对齐轴、偏置和张量积)使用的线程数。此值可以被 --max_threads--threads 命令行选项覆盖。

outputFile — 指定输出文件的名称。

saveInterfaceRegions(true)— 指定 Sentaurus Mesh 是否在网格中生成界面区域。

unstructuredTensorMesh(false)— 指定 Sentaurus Mesh 是否创建与 Sentaurus Device 兼容的张量网格。

useDFISEcoordinates — 将所有坐标转换为传统(DF–ISE)坐标系方向(命令文件中的坐标除外)。

useUCScoordinates — 使用统一坐标系(UCS)方向。除命令文件外,Sentaurus Mesh 读取的所有文件中的坐标都会转换为 UCS 方向。

verbosity — 设置输出消息的详细程度。verbosity=0 仅显示基本消息;verbosity=3 显示所有消息。


Definitions 节

本节由细化集和分布子节组成。每个子节由引用名称、左大括号、参数规范和右大括号组成。

Definitions 节中定义的顺序并不重要,因为这些定义在 Placements 节中作为引用使用。

Definitions 节语法

Definitions {
    AnalyticalProfile "reference name" {parameters}
    Constant "reference name" {parameters}
    Multibox "reference name" {parameters}
    Particle "reference name" {parameters}
    Refinement "reference name" {parameters}
    SubMesh "reference name" {parameters}
    ...
}

定义解析分布(Analytical Profiles)

您可以使用简单的解析表达式定义分布,这些表达式有两个组成部分。第一个组成部分 Function 表示沿 ReferenceElement 法线方向定义的方向(即主方向)的值。这些值使用第二个组成部分 LateralFunction 沿垂直于法线的方向(即侧向)进行平滑。

这些表达式可以是以下类型:

  • 预定义函数:Gaussian(高斯)和 error function(误差函数)
  • 一维外部分布
  • 自定义函数(使用通用函数求值器)

这些解析分布使用的公式在附录 A(第 173 页)中描述。

要定义解析分布(也可以使用其缩写 AnaProf),请使用以下语法:

Definitions {
    AnalyticalProfile "reference name" {
        Species = "string"
        Function = Gauss(primary parameters) | Erf(primary parameters) |
                   subMesh1D(primary parameters) |
                   Eval(primary parameters) | General(primary parameters)
        LateralFunction = Gauss(lateral parameters) |
                          Erf(lateral parameters) |
                          Eval(lateral parameters)
    }
}

参数说明

Species — 指定解析分布的种类(species)。

Function — 指定主方向(ReferenceElement 法线方向)上使用的函数类型和参数。

LateralFunction — 定义解析分布的侧向分量(也可以使用其缩写 LatFunc)。可以使用以下侧向参数指定高斯函数、误差函数或通用解析函数:

LateralFunction = Gauss(Factor = float)
LateralFunction = Gauss(StandardDeviation = value)
LateralFunction = Gauss(Length = value)
LatFunc = Erf(Factor = float)
LatFunc = Erf(Length = value)
LatFunc = Eval(init = "..." function = "...")

注意:默认的 LateralFunction 是误差函数 Erf。 如果使用 General 指定解析分布,则不需要单独的 LateralFunction,因为 General 函数的定义在其公式中同时包含主方向和侧向。

指定高斯函数(Gaussian Function)

高斯函数可以使用以下主参数指定:

Function = Gauss(PeakPosition=value, PeakValue=value,
                 StandardDeviation=value)
Function = Gauss(PeakPosition=value, Dose=value, StdDev=value)
Function = Gauss(PeakPosition=value, PeakValue=value, Length=value)
Function = Gauss(PeakPosition=value, Dose=value, Length=value)
Function = Gauss(PeakPosition=value, PeakValue=value,
                 ValueAtDepth=value, Depth=value)
Function = Gauss(PeakPos=value, Dose=value, ValAtDepth=value,
                 Depth=value)

默认 PeakPosition=0。其他参数没有默认值。

Function=Gauss 时,LateralFunction 中默认 Factor=0.8

部分参数有可用的缩写:

  • PeakPosition(PeakPos)
  • PeakValue(PeakVal)
  • StandardDeviation(StdDev)
  • ValueAtDepth(ValAtDepth)

指定误差函数(Error Function)

误差函数可以使用以下主参数指定:

Function = Erf(SymmetryPosition=value, MaxValue=value, Length=value)
Function = Erf(SymmetryPosition=value, Dose=value, Length=value)
Function = Erf(SymPos=value, MaxVal=value, ValueAtDepth=value, Depth=value)
Function = Erf(SymPos=value, Dose=value, ValueAtDepth=value, Depth=value)

默认 SymmetryPosition=0

Function=Erf 时,LateralFunction 中默认 Factor=0.8

部分参数有可用的缩写:

  • MaxValue(MaxVal)
  • SymmetryPosition(SymPos)

指定一维外部分布(1D External Profile)

要指定一维外部分布,请使用以下主参数:

Function = subMesh1D(Datafile = "string",
                     DataScale = Length = value,
                     Scale = Length = value,
                     Range = line [(x1), (x2)])

其中:

  • Datafile 指定 XGRAPH 格式的文件,包含双引号括起来的标题和 "x y" 值列表。文件中可以包含多个分布。
  • DataScale 缩放数据文件中包含的数据值。每个输入值乘以 DataScale 因子。默认 DataScale=1
  • Scale 缩放文件中的坐标值。默认 Scale=1
  • Range 是可选的,用于从文件中选择值的范围。关键字 x1x2 必须以文件坐标系给出。Range 应用于文件中的所有分布。默认选择整个数据范围。

Function=subMesh1D 时,LateralFunction 中默认 StandardDeviation=0.8

使用通用函数求值器(General Function Evaluator)

通用函数求值器可以通过以下两种方式使用:

  • 使用 Eval:用户在主方向(参考窗口的法线方向)指定解析函数,在侧向方向指定单独的衰减函数(高斯、误差函数或使用 Eval 的用户定义函数)。语法如下:

    AnalyticalProfile "reference name" {
        Function = Eval(init = "string", function = "string", value = value)
        LateralFunction = Eval(init = "string", function = "string")
    }
  • 使用 General:直接在器件坐标中指定用户定义的函数。由于 General 函数直接以 x、y 和 z 方向作为函数来指定,因此没有主方向和侧向方向的概念。语法如下:

    AnalyticalProfile "reference name" {
        Function = General(init = "string", function = "string", value = value)
    }

注意General 不需要 LateralFunction,因为 General 函数直接在所有器件坐标中求值。

Eval 和 General 函数的主参数使用相同的语法。区别在于 General 使用空间坐标,而 Eval 在用于定义主分布或侧向分布时使用沿主方向或侧向方向测量的坐标。

参数说明:

  • init — 指定稍后使用的变量赋值列表,以分号分隔。此字符串仅求值一次。例如:init = "a=2;b=4"
  • function — 指定每个查询要求值的表达式。必须使用变量 x 表示主距离或侧向距离。例如:function = "sin(x)"function = "exp(4*x)*sin(x)"
  • value — 指定求值失败时返回的默认值。主方向默认 1.0e18,用作 LateralFunction 时默认 1

注意

  • 所有定义的变量都是全局变量。
  • Eval 可以与 Gauss、Erf 和 subMesh1D 函数自由混合使用。
  • 表达式中可以使用符号 "pi""e"
  • 可用的数学函数包括:"sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh", "exp", "log", "log10", "sqrt", "floor", "ceil", "abs", "hypot", "deg", "rad"
  • 数值指数常量可以指定为 "2*10^18""2e18"
  • 作为 Eval 函数的扩展,General 函数直接评估器件坐标 (x, y) 和 (x, y, z),不使用主方向和侧向距离。任何侧向函数和参考几何(在 Placements 节中)都会被忽略。

定义常量分布(Constant Profiles)

Definitions {
    Constant "reference name" {
        Species = "string"
        Value = value
    }
}

其中:

  • Species 指定常量分布的种类或变量。
  • Value 指定常量分布的值。

定义 Multibox 区域

注意:请不要使用 Multibox 子节,请改用带 MaxLengthInterface 的界面细化(参见"定义细化区域",第 29 页)。

Multibox 是一种特殊的细化盒,指定沿 x、y 或 z 方向的渐变细化。您可以指定所需的最小和最大单元尺寸,以及所有方向的额外细化比率。创建的网格使用指定比率进行渐变(同时遵守最小和最大单元尺寸)。

Definitions {
    Multibox "reference name" {
        MaxElementSize = value | vector
        MinElementSize = value | vector
        Ratio = (ratio_width, ratio_height, ratio_depth)
    }
}

Ratio — 控制单元尺寸的渐变程度:

  • ratio_width 是 x 方向的渐变因子。
  • ratio_height 是 y 方向的渐变因子。
  • ratio_depth 是 z 方向的渐变因子(仅 3D)。

定义粒子分布(Particle Profiles)

粒子定义可用于定义与使用 Sentaurus Process Kinetic Monte Carlo(Sentaurus Process KMC)从离散掺杂分布获得的分布关联的分布。离散掺杂分布通过将掺杂函数与每个离散掺杂关联来获得连续分布(参见附录 B,第 185 页)。

Definitions {
    Particle "reference name" {
        AutoScreeningFactor
        BoundaryExtension = float
        Divisions = value
        DopingAssignment = "CIC" | "Sano"
        Normalization
        NumberOfThreads = integer
        ParticleFile = "string"
        ScreeningFactor = value
        ScreeningScalingFactor = integer
        Species = "string"
    }
}

参数说明(默认值在括号中给出):

  • AutoScreeningFactor — 指定此选项后,Sentaurus Mesh 根据局部掺杂密度自动计算每个离散掺杂的筛选因子:kc = 2N(x0,y0,z0)^(1/3),其中 N(x0,y0,z0) 是离散掺杂位置的密度。
  • BoundaryExtension(仅 2D 结构)— 用于从包含粒子信息的 3D KMC TDR 文件获取 2D 结构的连续掺杂。指定厚度(微米),用于内部创建假想 3D 结构。
  • Divisions(10)(仅 2D 结构)— 与 BoundaryExtension 结合使用,为 2D 结构中的每个网格点沿 z 方向创建等距分布的多个点。
  • DopingAssignment("Sano")— 选择网格保存前将掺杂分配给网格的方法:"CIC"(云元胞法)或 "Sano"(Sano 方法)。
  • Normalization — 补偿靠近边界处掺杂的损失。
  • NumberOfThreads(1)— 并行化局部筛选因子计算。
  • ParticleFile — 指定包含粒子(离散掺杂)信息的 KMC TDR 文件名。
  • ScreeningFactor — 掺杂函数的截断参数 kc,可用作拟合参数。
  • ScreeningScalingFactor — 控制分布的平滑度。
  • Species — 指定要关联的活性杂质名称,例如 ArsenicActiveConcentration

定义细化区域(Refinement Regions)

Definitions {
    Refinement "reference name" {
        MaxElementSize = float | vector
        MinElementSize = float | vector
        RefineFunction = MaxGradient(parameters) |
                         MaxInterval(parameters) |
                         MaxLengthInterface(parameters) |
                         MaxLenPointCloud(parameters) |
                         MaxTransDifference(parameters)
    }
}

参数说明(默认值在括号中给出):

  • MaxElementSize(1)— 控制网格单元的最大尺寸。指定实数或向量。向量可用于各向异性细化。

  • MinElementSize(0.02)— 控制网格单元的最小尺寸。

  • RefineFunctionMaxTransDifference)— 可用的不同函数:

    • MaxGradient:评估元素中分布的梯度。语法:RefineFunction = MaxGrad(Variable = "Dataset name", Value = float | vector | tensor)
    • MaxInterval:分析细化树单元中的每条边。语法:RefineFunction = MaxInterval(Variable = "Dataset name", cmin = ..., cmax = ..., targetLength = float, scaling = integer, rolloff)
    • MaxLengthInterface:在界面上产生细化。语法:RefineFunction = MaxLenInt(Interface("Material1","Material2"), Value = value, Factor = value, Brep = "string", DoubleSide, UseRegionNames)
    • MaxLenPointCloud:在属于点云的点上产生细化。语法:RefineFunction = MaxLenPointCloud(filename = "string", Value = value, Factor = value)
    • MaxTransDifference:评估元素顶点处转换值的最大差异。语法:RefineFunction = MaxTransDiff(Variable = "Dataset name", Value = float | vector | tensor)

定义子网格(Submeshes)

外部仿真结果(给定在网格上)可用于在器件中定义分布。外部网格必须与器件具有相同的空间维度。定义在外部网格上的数据集将插值到新生成的网格上。

Definitions {
    SubMesh "reference name" {
        Geofile = "string"
        ...
        Fields = ("string" [, float]), ("string" [, float]), ...
    }
}
  • Geofile — 指定包含外部网格的文件名,文件必须为 TDR 格式。外部网格的维度必须与器件的维度相同。

基于 Sentaurus TCAD 官方文档构建

代码块