Skip to content

SProcess Ch1:初识仿真器

> 来源:sprocess_ug.pdfSentaurus Process User Guide, W-2024.09
> 章节范围:Chapter 1,文档目录页标注约 p.39–93(PDF 物理页约 40–93)

章节导读

本章说明如何启动与控制 SProcess、如何编写命令文件、如何管理参数数据库、如何建立初始结构并保存中间结果。它是后续 implantdiffuseoxidizeetchdeposit 等工艺章节的共同基础。

Sentaurus Process 工具简介

SProcess 用于执行半导体工艺流程仿真。典型工作流是:准备输入命令文件、启动仿真、检查日志与结构、按需要分段保存与重启。

TCAD Sentaurus 教程:仿真项目

TCAD Sentaurus Tutorial 提供了可运行示例工程,用于演示 SProcess 能力。

访问方式:

  1. 命令行输入 swb 启动 Sentaurus Workbench。
  2. 在 SWB 菜单中选择 Help > Training
  3. 或直接进入 $STROOT/tcad/current/Sentaurus_Training 并在浏览器打开 index.html

环境配置

可以通过环境变量 STRELEASE 指定运行版本;未设置时通常使用最近安装版本。

典型 PATH 设置:

bash
# .cshrc
set path=(<Sentaurus_directory>/bin $path)

# .profile/.kshrc/.bashrc
PATH=<Sentaurus_directory>/bin:$PATH
export PATH

支持文件的环境变量

SProcess 依赖 SPHOMESCHOME 所指向的支持文件目录。若需要改默认模型/参数,推荐拷贝默认目录后再重定向环境变量,避免直接改安装目录。

默认形式:

bash
SPHOME = $STROOT/tcad/$STRELEASE/lib/sprocess-<version>
SCHOME = $STROOT/tcad/$STRELEASE/lib/score-<version>

目录要点:

  • $SPHOME/TclLib/SPROCESS.models:默认模型选择。
  • $SPHOME/TclLib$SCHOME/TclLib:Tcl 文件。
  • $SCHOME/Params:参数数据库。
  • $SPHOME/ImpLib:注入表。

启动 Sentaurus Process

启动语法:

bash
sprocess [<options>] [<commandfile> | <commandfile.cmd>]
  • 不带命令文件:进入 Interactive Mode(交互模式)。
  • 带命令文件:按 Batch Mode(批处理模式)执行。

例如:

bash
sprocess
sprocess input.cmd

命令行选项

常用参数(按原章表格整理):

  • -b | --batchMode:关闭图形。
  • --diff:比较两个 TDR 的数据和参数差异。
  • -f | --FastMode:快速模式(跳过扩散、MC 注入、PDE 求解等)。
  • -h:帮助。
  • --max_threads <i>:线程上限。
  • -n | --noSyntaxCheck:关闭语法检查。
  • -o <dir> | --home <dir>:设置 SPHOME
  • -p | --pdb:查看运行时参数(默认 + 输入)。
  • --ponly:仅显示输入中设置的参数。
  • -q | --quickSyntaxCheck:只检查真分支语法。
  • -rel <number>:指定 release(如 U-2022.12)。
  • -releases:列出可用 release。
  • -s | --syntaxCheckOnly:只做语法检查,不执行。
  • --svi:启用与 Sentaurus Visual 的接口模式。
  • --threads <i>:初始线程数。
  • -u | --GENESISeMode:关闭日志文件生成。
  • -v:打印版本头。
  • -ver <number>:指定版本号(如 1.4)。
  • -versions:列出某 release 下版本。
  • -x / -X:开启/关闭浮点异常捕获。
  • --xml:生成 XML 风格标记日志。

版本示例:

bash
sprocess -rel U-2022.12 -ver 1.2 nmos_fps.cmd

交互模式

未给命令文件时进入交互模式,逐行输入立即执行。

适用场景:

  • Tcl 调试时出错不直接退出,可反复 source
  • 快速查询参数默认值(如 pdbGet)。
  • 快速查看内建函数(help)和 Tcl 过程(info procs)。
  • fbreak 暂停流程后检查状态(如 gridmaterselect)。

批处理模式

推荐把流程写入 .cmd 文件并批量运行:

bash
sprocess <commandfile>

关键点:

  • 命令会先做语法检查,再顺序执行。
  • SProcess 基于 Tcl,支持循环、条件、变量、过程。
  • 若有复杂 Tcl 片段导致误报,可用 -n 关语法检查。
  • 命令行运行会生成 .log;SWB 中常见输出为 .out

终止执行

终止方式按“强制程度”从低到高:

  1. 前台快捷键(如 Ctrl+C 发送 SIGINT)。
  2. shell 级中断(如 Ctrl+\ 发送 SIGQUIT,通常更直接)。
  3. 最保守兜底:
bash
kill -9 <process_id>

快速模式

开发新流程时可先用 -f/--FastMode 做结构级联调:

  • 跳过扩散、氧化、MC 注入、PDE 求解、3D 重网格等重计算步骤。
  • 仅保留结构生成与分析相关步骤。
  • 在 3D 下 struct 通常只写边界信息。

文件类型

SProcess 核心文件类型:

  • *.cmd:命令输入文件。
  • *.log / *.out:运行日志。
  • *.xml:带标记日志(配合 Log File Browser)。
  • *_bnd.tdr:仅边界结构。
  • *_fps.tdr:网格+掺杂+重启所需信息。
  • *_spx.tdr:Sentaurus Process Explorer 的 GC 几何格式。
  • *.plx:1D 分布文件(Inspect 使用)。

日志体积控制:

tcl
pdbSet Log.File.Limit <value>
pdbSet Continue.Past.Log.Limit 1

交互可视化

可视化方式:

  • plot.1d / plot.2d(X-Windows 风格)。
  • 与 Sentaurus Visual 的联动接口(推荐主线)。

Sentaurus Visual 接口

该接口可在仿真进行中显示 1D/2D/3D 结构和数据演化,仿真控制也可由该界面完成。graphics 命令可在输入文件里直接控制显示字段和绘图选项。

接口配置

标准步骤:

bash
svisual -spi &

然后在 Preferences 中设置:

  • Simulator Command:如 sprocess -n
  • Communication Option--svi
  • Breakpoint Behavior
    • Breakpoint Only
    • Breakpoint as Checkpoint
    • Breakpoint and Checkpoint

加载命令文件

  • 界面内点击 Load 加载流程文件。
  • 或命令行:
bash
svisual -spi <filename>

在流程中插入与删除断点

  • 在左侧边栏点击某步骤行设置断点(红点)。
  • 可多断点。
  • 继续执行可用 RunRun Step
  • 再次点击红点可删除。

在流程中插入与删除检查点

当行为设为 Breakpoint and Checkpoint 时:

  • 第一次点击:断点(红点)。
  • 第二次点击:检查点(蓝点,保存步骤结果)。
  • 可多检查点。
  • 点击蓝点直到消失即可删除。

步骤状态指示

  • 绿三角:下一步。
  • 红三角:当前执行步。
  • 灰底:已执行且不可改。
  • 浅黄底:当前光标行。

更新结构

3D 场景下常同时显示 bulkboundary。标题加粗的一侧表示“最新更新对象”。例如 insert 后常先更新 boundary,bulk 可能滞后。

使用 graphics 命令控制 Sentaurus Visual 接口

  • 临时查看时可直接在 SVisual 调整。
  • 反复重跑/标定时,建议把 graphics 设置写进 .cmd,减少手工重复操作。
  • 顺序规则:命令文件中的 graphics 按流程顺序生效;GUI 手动设置即时生效,后执行者覆盖前者。

命令文件语法

SProcess 命令文件是 Tcl 扩展,遵循 Tcl 语法。

关键规则:

  • # 开头是注释。
  • $var 取变量值。
  • 支持 for/while/if/switch、文件 I/O、source、过程定义。
  • 一行一条命令;续行用 \;括号块可跨行。

局部关闭语法检查:

tcl
CHECKOFF
# ... complex Tcl section ...
CHECKON

Tcl 输入

常见约定:

  • 命令参数值会经 Tcl 求值,如 parameter=[expr $pp/10.0]
  • 参数可含 Tcl 表达式与回调逻辑。
  • fset / fproc 会写入 TDR,便于 split/restart 后继续可用。

参数书写规则:

  • 布尔量:写参数名表示真;前缀 ! 表示假。
  • 数值:parameter=value
  • 字符串:parameter="string"
  • 列表:parameter= {item1 item2}parameter= "item1 item2"
  • ={ 之间必须有空格。

示例:

tcl
epi.doping= {Boron = 1e20 Arsenic = 1e18}
set val1 1.0
set val2 2.0
refinebox xrefine= {$val1 $val2}

指定材料

PDB 命令里:

  • 体材料:单材料名,如 Oxide
  • 界面材料:MaterialA_MaterialB,如 Oxide_Silicon(支持别名)。

其他命令里:

  • 体材料:如 oxide
  • 界面材料:silicon /oxide

材料清单可在 Mater.tcl 查看。

别名

SProcess 支持参数名/接口名别名,便于可读性与兼容性。

常用查询:

tcl
alias -list
alias Vac
alias Vaca Vacancy

默认求解器设置:SPROCESS.models 文件

SPROCESS.models 在仿真启动时读取一次,定义默认:

  • Tcl 库路径
  • 标定库路径
  • 注入表路径
  • 默认材料名
  • 氧化/扩散数值参数
  • 默认解变量名
  • 默认回调过程

读取后可在命令文件中覆盖。

与旧版本的兼容性

默认模型和参数可能随版本演进。Compatibility 机制可加载旧版本参数集以尽量复现实验结果,但由于代码修复与数值精度差异,跨版本“完全一致”不保证。

参数数据库

参数数据库保存材料参数、模型参数和重启所需全局信息。

推荐接口:

  • pdbGet
  • pdbSet

底层类型化接口(如 pdbGetDouble)性能更高但不做健壮检查,普通用户不建议直接依赖。

参数继承

PDB 支持节点继承(Like)。可通过继承减少重复定义并只覆写差异项。

示例:

tcl
pdbLike Silicon MyBoron Boron

类材料:材料参数继承

可通过 mater add ... new.like=... 新建“类材料”继承已有材料参数。

tcl
mater add name=<new_material> new.like=<base_material>

注意:反应(氧化/外延/硅化)不在 PDB 内自动继承,新增材料若需参与反应需显式补充 reaction

类材料间的插值

默认在 like 材料交叠时进行插值。若要禁止插值:

tcl
mater name=<c> add !like.interpolate

界面参数

界面参数在 PDB/Alagator 中用 MaterialA_MaterialB 指定。

示例:

tcl
pdbSet Gas_Silicon Vac Abs.Error 1e3

合金材料与参数插值

随机合金参数通常依赖摩尔分数。SProcess 支持自动摩尔分数插值,随注入/扩散导致的组分场变化自动更新参数。

例如 SiliconGermanium (SiGe)SiliconGermanium 组成,xMoleFraction 存储局部摩尔分数。

使用参数插值

插值可在全局/模块/材料/区域/参数级别启停。默认对 alloy 材料启用。若需在含 Ge 的 Silicon 中启用插值:

tcl
pdbSet Silicon Skip.Parameter.Interpolation 0

插值函数类型

支持类型:

  • 线性(默认)
  • 抛物线(X2
  • 分段线性表(XTable
  • 对数(Log.Interpolated.Params
  • 用户自定义(<param>.Function

示例:

tcl
pdbSet SiliconGermanium Mechanics BulkModulus.X2 5e10
pdbSet <Alloy_Material> Log.Interpolated.Params {<param_list>}

查看哪些参数启用了插值:

tcl
print_interpolated_params

界面处的插值

界面参数会结合两侧相邻材料参数做插值;SiGe 与氧化物界面会参考 Oxide_SiliconGermanium_Oxide 相关参数。

定义合金材料

合金定义依赖 MoleFraction.Atoms(来自 Molefraction.txt,与 SDevice 共用定义)。

把非合金按合金方式处理示例:

tcl
pdbSet Si Derived.Materials {SiGe}
pdbSet SiGe Ge Min.Conv.Conc 1E21

区域参数与区域命名

很多参数可按 region 指定,但 Alagator 方程项涉及的扩散、氧化、硅化参数通常不支持 regionwise。

region 命名规则:

  • 不允许 _.
  • 不可与材料名冲突。

几何操作导致 region 分裂时会自动命名如 layer1.1layer1.2,并继承父 region 参数。

参数数据库浏览器:查看默认值

PDB Browser 是参数树的图形化查看/编辑工具,含:

  • 树视图(参数层级)
  • 表格视图(Parameter/Type/Value/Unit/Evaluate/Comment/Info Level)
  • 图窗(温度相关曲线)

启动参数数据库浏览器

bash
pdbBrowser

可通过 SPHOME/SCHOME 切换参数库位置。

查看命令文件合并后的参数:

bash
sprocess --pdb <command_file>

仅看命令文件显式设置:

bash
sprocess --ponly <command_file>

PDB 浏览器功能

常用功能:

  • File > Export Node/Tree
  • Tools > Evaluate
  • Tools > Plot/Plot Over
  • Tools > Arrhenius Fit
  • Tools > Find/Find Next
  • Tools > Goto Line
  • Tools > Filter
  • Tools > Info Level

查看参数信息

在表格中双击非空单元格可弹窗查看参数详情;右键可快速编辑、求值和绘图。

PDB 浏览器首选项

可配置编辑器、更新周期、全局温度、绘图轴尺度、显示列、字体、光标等。

查看 TDR 文件中存储的参数

查看 TDR 内参数:

bash
pdbBrowser -tdr n10_fps.tdr
pdbBrowser -nopdb -tdr n10_fps.tdr

-nopdb 表示只读 TDR 参数,不叠加默认数据库。

理解坐标系

本章区分 wafer 坐标系与 simulation 坐标系,避免布局、切片、注入角定义混乱。

Wafer 坐标系

wafer 坐标系固定在 wafer flat/notch 上,用于掩膜位置、CutLine2D 定义等。

仿真坐标系

默认采用 UCS。要点:

  • x 轴指向 wafer 内部。
  • slice.angle 定义仿真轴相对 wafer 轴的旋转。
  • 默认 slice.angle=-90° 常用于 2D 截面方向。

创建与加载结构及数据

新结构通常由 line + region + init 构建;也可从已有 TDR 加载。

结构的组成部分定义

命令中的 left/right/front/back/top/bottom 对应结构外边界方向,3D 建模时要统一团队坐标约定。

定义结构:lineregion

规则要点:

  • 多次建模前先 line clear
  • line 位置必须单调递增。
  • region 必须与维度一致(1D/2D/3D)。
  • 必须有 substrate 定义。
  • spacing 控制补线密度;未设时默认很粗。

创建结构与初始化数据

init 创建结构,也可直接读 TDR:

tcl
init tdr= file

初始化字段:

  • 全局初始化可在 init
  • 区域初始化可在 region

注意:init 创建的是节点值场,不适合直接初始化应力场(应改用 stressdataselect)。

定义晶向

通过 init 指定晶向:

tcl
init wafer.orient= {<i> <j> <k>} notch.direction= {<i> <j> <k>} slice.angle=<n>

也可用二维切线定义切片角:

tcl
init slice.angle= [CutLine2D <x1> <y1> <x2> <y2>]

Wafer 偏切

miscut 通过倾角与方向定义:

tcl
init wafer.orient= {<i> <j> <k>} notch.direction= {<i> <j> <k>} \
miscut.tilt=<n> miscut.toward= {<h> <k> <l>}

约束:miscut.toward 不能与 wafer.orient 同方向。

自动维度控制

维度由 line x/y/z 共同决定。默认会延迟升维,必要时再从 1D 外推到 2D/3D。

可手动控制:

tcl
grid 2D
grid 3D
grid FullD

使用 load 从外部 TDR 插值场数据

load 可把外部 TDR 字段插值到当前结构。

数据合并策略:merge / sum / replace / rename。可按 species/actions 逐项指定。

示例:

tcl
load tdr= in species= {Arsenic_Implant Damage_Implant} \
actions= {sum replace}

load tdr= in species= {Boron} multiply= {2.1} actions= {replace}

3D->2D 插值可配合 transform

加载 1D 分布:profile

profile 可把 1D 数据加载到 1D/2D/3D 结构:

tcl
profile infile= file.dat name= Boron

保存结构

struct 用于保存 TDR。建议明确是否保存气相、是否保存重启必需信息。

保存用于重启仿真的结构

TDR 重启文件默认会存:模型参数、网格/几何、refinebox、温度 ramp、掺杂/材料/接触/掩膜定义、fset/fproc 等。

建议统一坐标:

tcl
math coord.ucs

字段选择可用:

tcl
SetTDRList

保存用于器件仿真的结构

典型步骤:

  1. 定义 contact
  2. 重新网格(去除工艺网格特征,强化器件关注区)。
  3. struct tdr=<c> !Gas 保存。

示例重网格骨架:

tcl
refinebox clear
line clear
grid set.Delaunay.type= boxmethod
refinebox min= <list> max= <list> xrefine= <list> yrefine= <list> zrefine= <list>
refinebox Adaptive refine.fields= NetActive max.asinhdiff= {NetActive= 1.0} refine.min.edge= <list> Silicon
refinebox interface.materials= {Silicon} min.normal.size=<n> normal.growth.ratio=<n>

保存 Delaunay 权重:

tcl
pdbSet Grid SnMesh StoreDelaunayWeight 1
pdbSet Grid Contacts.In.Brep 1

将硅材料转换为 SiGe 材料

当 Ge 相关阈值达到条件时,可把 Ge 掺杂 Si 区域按 SiliconGermanium 保存处理。常用默认设置:

tcl
pdbSet Silicon SiliconGermanium.ConversionConc 5E19
pdbSet Silicon BinaryCompounds {{SiliconGermanium GeTotal "GeTotal/5E22"}}

为器件仿真保存 SiC 和 GaN 的掺杂信息

SiC/GaN 某些掺杂缺少激活模型。导出到器件仿真前,可用 0 时间扩散在目标温度下生成合理 active concentration:

tcl
diffuse time= 0 temperature= 2100

为 Inspect 保存 1D 分布

WritePlx.plxSetPlxList 选择字段。

从高维度保存 1D/2D TDR 切片

struct 可按切片导出低维 TDR:

tcl
# 2D -> 1D
struct tdr= filename y= 0.5

# 3D -> 1D
struct tdr= filename x= 0.2 z= 0.1

# 3D -> 2D
struct tdr= filename x= 0.2

为 Sentaurus Process Explorer 保存结构

导出 GC 结构:

tcl
struct tdr.spx= filename

得到 filename_spx.tdr。GC 网格分辨率可用:

tcl
boundary spx.column.size= 5e-3
# 或
boundary spx.num.cells= 300
boundary spx.width.num.cells= 300 spx.depth.num.cells= 200

spx.column.sizespx.*.num.cells 不能混用。

select 命令(更多 1D 保存选项)

select 既可后处理也可赋值。

基础形式:

tcl
select z=<alagator_expression>

示例:

tcl
select z= 1.0 name= MyDataField
select z= 0.1*Vacancy name= Void store

datexcodes.txt 文件

datexcodes.txt 是 Synopsys 材料/掺杂/量纲配置数据库。SProcess 主要读取:

  • property("floops"):内部短名与 DATEX 名转换。
  • unit:内部单位到外部工具单位的换算。

例如字段 VTotal 可按该定义导出为 VacancyConcentration,并保持 cm^-3 单位语义。

References

  • [1] B. B. Welch, Practical Programming in Tcl & Tk, Prentice Hall PTR, 3rd ed., 2000.

最小可执行示例(M1)

下面示例用于“验证环境 + 验证结构与保存链路”,不是完整工艺配方。

tcl
# m1-ch1-minimal.cmd

go sprocess

# 1) 定义网格线和区域
line x location= 0.00 spacing= 0.02 tag= top
line x location= 1.00 spacing= 0.05 tag= bot
line y location= 0.00 spacing= 0.05 tag= left
line y location= 1.00 spacing= 0.05 tag= right

region Silicon xlo= top xhi= bot ylo= left yhi= right substrate

# 2) 初始化结构与掺杂
init wafer.orient= {1 0 0} notch.direction= {1 1 0} slice.angle= -90
init field= Boron concentration= 1e15

# 3) 保存可重启结构
math coord.ucs
SetTDRList {Dopants Solutions}
struct tdr= out/ch1_m1_init.tdr !Gas

# 4) 导出 1D 截线
struct tdr= out/ch1_m1_cut1d.tdr y= 0.5

exit

关键参数速查表

类别参数/命令作用常见取值/示例
版本与路径STROOT, STRELEASE定位安装根与版本STRELEASE=U-2022.12
资源目录SPHOME, SCHOME模型库/参数库位置$STROOT/tcad/$STRELEASE/lib/...
启动sprocess <cmd>批处理运行sprocess input.cmd
语法检查-n, -s, -q关闭/仅检查/快速检查sprocess -s input.cmd
可视化联动--svi, graphics对接 SVisualsvisual -spi
快速联调-f跳过重计算步骤sprocess -f flow.cmd
日志控制InfoDefault, Log.File.Limit信息量与日志上限pdbSet Log.File.Limit 1e9
字段保存SetTDRList, SetPlxList控制 TDR/PLX 字段SetTDRList {Dopants Solutions}
坐标math coord.ucs, slice.angle统一仿真/可视化坐标slice.angle=-90
维度控制grid 2D/3D/FullD, !DelayFullD自动/手动升维grid FullD
外部数据插值load ... actions=...叠加/替换字段actions={sum replace}
设备导出struct tdr=<c> !Gas适配下游器件仿真配合 contact + remesh

常见问题与诊断步骤

1. 启动即报“找不到模型/参数文件”

排查顺序:

  1. 检查 STROOT/STRELEASE/SPHOME/SCHOME
  2. 验证 SPROCESS.modelsParamsImpLib 路径。
  3. sprocess -v-releases/-versions 确认实际调用版本。

2. 命令文件语法检查报错,但执行逻辑看起来没问题

排查顺序:

  1. 检查复杂 Tcl 分支是否在“全分支语法检查”下触发假阳性。
  2. 对局部片段加 CHECKOFF/CHECKON
  3. 必要时用 -n 临时跳过语法检查确认流程主逻辑。

3. Split/Restart 后结果与一次跑完全流程不一致

排查顺序:

  1. 确认 struct 保存时未误用 !pdb!interfaces
  2. 确认 SetTDRList 包含继续计算必需字段(尤其 Solutions)。
  3. 确认重启前后坐标系一致(建议 math coord.ucs)。

4. 2D/3D 结构维度异常或切片结果不符合预期

排查顺序:

  1. 核查 line x/y/z 是否完整、顺序递增。
  2. 检查是否开启了延迟升维(!DelayFullD)。
  3. grid 2D/3D/FullD 显式控制维度。
  4. 检查 slice.angleCutLine2D 定义方向。

5. 导出给 SDevice 后网格质量或接触异常

排查顺序:

  1. 重新执行器件导向 remesh(refinebox clear, grid set.Delaunay.type= boxmethod)。
  2. 检查 contact 是否覆盖完整边界。
  3. 确保保存时开启 Delaunay 相关参数: StoreDelaunayWeightContacts.In.Brep

6. TDR 字段名/单位在下游工具不匹配

排查顺序:

  1. 检查 datexcodes.txtproperty("floops")unit 映射。
  2. pdbBrowser -nopdb -tdr <file> 核对写入后的参数与字段。

相关链接

基于 Sentaurus TCAD 官方文档构建

代码块