3. Sentaurus Process命令语言与仿真流程搭建

Sentaurus Process(SProcess)的输入文件本质上是一份按顺序执行的命令脚本,仿真流程的搭建过程就是把这套脚本写对、写全、写清楚。与图形化工具不同,SProcess 没有“点一下按钮就完成”的操作,所有网格、材料、掺杂、工艺步骤和求解器行为都由命令显式描述。理解命令语法与执行顺序,是后续 MOS 器件工艺建模能否收敛、结果是否可信的前提。

命令语言的基本语法

SProcess 的命令采用“命令名 + 参数 + 可选子语句”的结构,命令之间以换行分隔,注释以 # 开头。命令名通常为小写英文动词,例如 line、region、init、diffuse、deposit、etch、implant、select、struct、solution、pdbSet 等。参数以“关键字 = 值”或位置参数形式给出,字符串一般需要加引号,数值可带单位(如 um、nm、s、min、cm-3、keV)。

一个典型的最小骨架如下:

# 1. 定义网格
line x loc = 0.0   spacing = 0.02 tag = left
line x loc = 0.5   spacing = 0.005 tag = right
line y loc = 0.0   spacing = 0.005 tag = top
line y loc = 1.0   spacing = 0.05  tag = bottom

# 2. 初始化衬底
region silicon xlo = left xhi = right ylo = top yhi = bottom
init concentration = 1e15 field = Boron wafer.orient = 100

# 3. 工艺步骤
deposit material = {Oxide} type = isotropic time = 1.0 temp = 900
implant Boron dose = 1e13 energy = 30 tilt = 7
diffuse time = 30 temp = 1000

# 4. 输出
struct tdr = n1_after_well

这段脚本已经包含了 SProcess 流程的四个核心环节:网格定义、材料区域、工艺步骤序列、输出控制。下面分别展开。

网格定义:line 命令与坐标约定

SProcess 使用二维(或三维)结构化网格,网格由 line 命令逐条定义。每条 line 指定一个方向(x 或 y)、位置 loc、该位置附近的网格间距 spacing,以及一个标签 tag。标签用于后续 region 命令引用边界,避免直接写坐标导致可读性差。

坐标约定需要先明确:x 为横向(器件宽度方向),y 为纵向(深度方向),y = 0 通常对应硅表面,y 增大表示向衬底内部深入。这一约定在后续所有命令和图示中保持一致。网格间距不是均匀的:在需要高精度的区域(如沟道、结深附近、栅氧界面)应加密,在衬底深处可放宽。例如表面附近 spacing = 0.002 um,衬底底部 spacing = 0.05 um,可以在保证精度的同时控制网格规模。

网格过密会导致求解时间急剧增加,过疏则会使掺杂剖面和结深失真。经验上,MOS 沟道区的纵向网格应小于 1 nm 量级,而阱区可放宽到 5~10 nm。网格定义完成后,region 命令把网格围成的矩形区域声明为某种材料,例如 silicon、oxide、nitride、poly。材料区域是后续所有工艺步骤作用的物理对象。

工艺步骤序列:按时间顺序堆叠

SProcess 的工艺步骤按脚本中出现的顺序依次执行,每一步都会改变材料结构或掺杂分布。常见的步骤包括:

  • deposit:沉积氧化硅、氮化硅、多晶硅等薄膜,需指定材料、厚度、温度和时间;
  • etch:刻蚀,可指定材料、厚度、各向异性程度;
  • implant:离子注入,需给出杂质种类、剂量、能量、倾斜角;
  • diffuse:高温扩散/退火,需给出温度和时间,可同时激活注入损伤;
  • oxidize:热氧化,需给出温度、时间、气氛(干氧/湿氧)。

这些步骤的顺序直接决定最终结构。例如,先注入再退火,与先退火再注入,得到的结深和掺杂剖面完全不同。搭建流程时应按真实工艺顺序书写,并在关键步骤后插入 struct 输出,便于分段检查。

求解器选择与输出控制

SProcess 内部包含扩散求解器、氧化求解器、应力求解器等。多数情况下使用默认求解器即可,但在高浓度掺杂、氧化应力耦合或三维结构下,需要通过 pdbSet 或 solution 命令调整求解器选项,例如设置迭代次数、收敛容差、是否开启应力耦合。求解器选择不当的典型表现是:仿真在中途报“未收敛”,或掺杂剖面出现非物理振荡。

输出控制由 struct 命令完成,常用格式为 tdr(Sentaurus 结构文件,供后续器件仿真读取)和 grd。建议在每个关键工艺节点输出一次,命名体现步骤,例如 n1_after_well、n2_after_gate、n3_after_sd。这样既能定位问题,也方便后续在 SDevice 中分段调用。

SProcess 仿真流程搭建:从网格到输出 输入脚本结构 line 定义网格 x/y 方向、loc、spacing、tag region + init 材料区域 silicon / oxide / poly deposit / etch / implant 工艺步骤序列 diffuse / oxidize 热过程与掺杂再分布 solution / pdbSet 求解器与收敛控制 struct tdr = 输出 分段保存结构文件 顺序执行 执行过程与结果检查 网格与材料区域 表面加密,衬底放宽 工艺步骤链 deposit Oxide 10 nm implant B 1e13 / 30 keV diffuse 1000°C / 30 min 顺序不可颠倒 关键检查点 网格是否在结深/沟道处加密 材料区域是否与工艺顺序一致 注入剂量/能量是否与设计值匹配 求解器是否收敛,有无非物理振荡 struct 输出是否覆盖关键节点

一个可复现的 MOS 阱区流程示例

下面给出一个用于 NMOS 阱区形成的简化流程,参数为教学示例,实际值需按工艺设计调整。脚本按“网格—衬底—阱注入—退火—输出”组织:

line x loc = 0.0  spacing = 0.05 tag = left
line x loc = 1.0  spacing = 0.05 tag = right
line y loc = 0.0  spacing = 0.002 tag = top
line y loc = 2.0  spacing = 0.05  tag = bottom

region silicon xlo = left xhi = right ylo = top yhi = bottom
init concentration = 1e15 field = Boron wafer.orient = 100

implant Phosphorus dose = 3e13 energy = 150 tilt = 7
diffuse time = 60 temp = 1050

struct tdr = n1_well_done

执行后应检查:阱区结深是否落在预期范围(例如 0.8~1.2 μm),表面浓度是否达到设计值,网格在结深附近是否足够密。若结深偏浅,可适当提高退火温度或延长时间;若表面浓度偏低,可增大注入剂量。这些调整都通过修改脚本参数完成,而不是重新搭建流程。

建议把脚本按“网格—材料—注入—热过程—输出”分段书写,每段之间用注释分隔。这样在排查收敛问题时,可以快速定位是网格、材料还是求解器设置导致的。
SProcess 命令对大小写和单位敏感。例如 Boron 与 boron 可能被解释为不同对象,time = 30 默认单位与显式写 time = 30 min 也可能不同。建议所有物理量都带单位,避免隐式默认值带来的偏差。