Appearance
SProcess Ch1:初识仿真器
> 来源:sprocess_ug.pdf(Sentaurus Process User Guide, W-2024.09)
> 章节范围:Chapter 1,文档目录页标注约 p.39–93(PDF 物理页约 40–93)
章节导读
本章说明如何启动与控制 SProcess、如何编写命令文件、如何管理参数数据库、如何建立初始结构并保存中间结果。它是后续 implant、diffuse、oxidize、etch、deposit 等工艺章节的共同基础。
Sentaurus Process 工具简介
SProcess 用于执行半导体工艺流程仿真。典型工作流是:准备输入命令文件、启动仿真、检查日志与结构、按需要分段保存与重启。
TCAD Sentaurus 教程:仿真项目
TCAD Sentaurus Tutorial 提供了可运行示例工程,用于演示 SProcess 能力。
访问方式:
- 命令行输入
swb启动 Sentaurus Workbench。 - 在 SWB 菜单中选择
Help > Training。 - 或直接进入
$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 依赖 SPHOME 与 SCHOME 所指向的支持文件目录。若需要改默认模型/参数,推荐拷贝默认目录后再重定向环境变量,避免直接改安装目录。
默认形式:
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暂停流程后检查状态(如grid、mater、select)。
批处理模式
推荐把流程写入 .cmd 文件并批量运行:
bash
sprocess <commandfile>关键点:
- 命令会先做语法检查,再顺序执行。
- SProcess 基于 Tcl,支持循环、条件、变量、过程。
- 若有复杂 Tcl 片段导致误报,可用
-n关语法检查。 - 命令行运行会生成
.log;SWB 中常见输出为.out。
终止执行
终止方式按“强制程度”从低到高:
- 前台快捷键(如
Ctrl+C发送SIGINT)。 - shell 级中断(如
Ctrl+\发送SIGQUIT,通常更直接)。 - 最保守兜底:
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 -nCommunication Option:--sviBreakpoint Behavior:Breakpoint OnlyBreakpoint as CheckpointBreakpoint and Checkpoint
加载命令文件
- 界面内点击
Load加载流程文件。 - 或命令行:
bash
svisual -spi <filename>在流程中插入与删除断点
- 在左侧边栏点击某步骤行设置断点(红点)。
- 可多断点。
- 继续执行可用
Run或Run Step。 - 再次点击红点可删除。
在流程中插入与删除检查点
当行为设为 Breakpoint and Checkpoint 时:
- 第一次点击:断点(红点)。
- 第二次点击:检查点(蓝点,保存步骤结果)。
- 可多检查点。
- 点击蓝点直到消失即可删除。
步骤状态指示
- 绿三角:下一步。
- 红三角:当前执行步。
- 灰底:已执行且不可改。
- 浅黄底:当前光标行。
更新结构
3D 场景下常同时显示 bulk 与 boundary。标题加粗的一侧表示“最新更新对象”。例如 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 ...
CHECKONTcl 输入
常见约定:
- 命令参数值会经 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 机制可加载旧版本参数集以尽量复现实验结果,但由于代码修复与数值精度差异,跨版本“完全一致”不保证。
参数数据库
参数数据库保存材料参数、模型参数和重启所需全局信息。
推荐接口:
pdbGetpdbSet
底层类型化接口(如 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) 由 Silicon 与 Germanium 组成,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_Silicon 与 Germanium_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.1、layer1.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/TreeTools > EvaluateTools > Plot/Plot OverTools > Arrhenius FitTools > Find/Find NextTools > Goto LineTools > FilterTools > 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 建模时要统一团队坐标约定。
定义结构:line 和 region
规则要点:
- 多次建模前先
line clear。 line位置必须单调递增。region必须与维度一致(1D/2D/3D)。- 必须有 substrate 定义。
spacing控制补线密度;未设时默认很粗。
创建结构与初始化数据
init 创建结构,也可直接读 TDR:
tcl
init tdr= file初始化字段:
- 全局初始化可在
init。 - 区域初始化可在
region。
注意:init 创建的是节点值场,不适合直接初始化应力场(应改用 stressdata 或 select)。
定义晶向
通过 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保存用于器件仿真的结构
典型步骤:
- 定义
contact。 - 重新网格(去除工艺网格特征,强化器件关注区)。
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 写 .plx,SetPlxList 选择字段。
从高维度保存 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= 200spx.column.size 与 spx.*.num.cells 不能混用。
select 命令(更多 1D 保存选项)
select 既可后处理也可赋值。
基础形式:
tcl
select z=<alagator_expression>示例:
tcl
select z= 1.0 name= MyDataField
select z= 0.1*Vacancy name= Void storedatexcodes.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 | 对接 SVisual | svisual -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. 启动即报“找不到模型/参数文件”
排查顺序:
- 检查
STROOT/STRELEASE/SPHOME/SCHOME。 - 验证
SPROCESS.models、Params、ImpLib路径。 - 用
sprocess -v或-releases/-versions确认实际调用版本。
2. 命令文件语法检查报错,但执行逻辑看起来没问题
排查顺序:
- 检查复杂 Tcl 分支是否在“全分支语法检查”下触发假阳性。
- 对局部片段加
CHECKOFF/CHECKON。 - 必要时用
-n临时跳过语法检查确认流程主逻辑。
3. Split/Restart 后结果与一次跑完全流程不一致
排查顺序:
- 确认
struct保存时未误用!pdb或!interfaces。 - 确认
SetTDRList包含继续计算必需字段(尤其Solutions)。 - 确认重启前后坐标系一致(建议
math coord.ucs)。
4. 2D/3D 结构维度异常或切片结果不符合预期
排查顺序:
- 核查
line x/y/z是否完整、顺序递增。 - 检查是否开启了延迟升维(
!DelayFullD)。 - 用
grid 2D/3D/FullD显式控制维度。 - 检查
slice.angle与CutLine2D定义方向。
5. 导出给 SDevice 后网格质量或接触异常
排查顺序:
- 重新执行器件导向 remesh(
refinebox clear,grid set.Delaunay.type= boxmethod)。 - 检查
contact是否覆盖完整边界。 - 确保保存时开启 Delaunay 相关参数:
StoreDelaunayWeight、Contacts.In.Brep。
6. TDR 字段名/单位在下游工具不匹配
排查顺序:
- 检查
datexcodes.txt的property("floops")与unit映射。 - 用
pdbBrowser -nopdb -tdr <file>核对写入后的参数与字段。