4. SDE参数化结构生成
在Sentaurus Workbench中,SDE(Sentaurus Device Editor)承担着器件结构定义的核心职责。所谓参数化结构生成,本质上是把器件的几何尺寸、网格分布和掺杂剖面全部表达为可调参数的函数,使得改变一个参数就能自动重建整个结构。SDE支持Scheme和Tcl两种脚本语言,二者能力等价,选择哪一种主要取决于团队习惯和已有脚本资产。本节以Scheme为主线,同时说明Tcl的对应写法。
参数化几何:从坐标到函数
参数化几何的关键在于把"画一个矩形"变成"画一个由参数决定的矩形"。SDE提供了一套几何原语,包括sdegeo:create-rectangle、sdegeo:create-polygon、sdegeo:create-circle等,它们接受坐标点作为输入。参数化的做法是在脚本开头定义一组变量,然后在创建几何时引用这些变量。
(define Lg 0.05) ; 栅长 50nm
(define Tox 0.002) ; 栅氧厚度 2nm
(define Wsi 0.10) ; 硅膜厚度 100nm
(define Lsd 0.03) ; 源漏延伸长度 30nm
; 以栅中心为原点,构建硅膜
(sdegeo:create-rectangle
(position (- 0 (+ (/ Lg 2) Lsd)) 0 0)
(position (+ 0 (+ (/ Lg 2) Lsd)) Wsi 0)
"Silicon" "R.Si")
; 栅氧覆盖栅极下方
(sdegeo:create-rectangle
(position (- 0 (/ Lg 2)) Wsi 0)
(position (+ 0 (/ Lg 2)) (+ Wsi Tox) 0)
"SiO2" "R.Oxide")
; 栅极金属
(sdegeo:create-rectangle
(position (- 0 (/ Lg 2)) (+ Wsi Tox) 0)
(position (+ 0 (/ Lg 2)) (+ Wsi Tox 0.05) 0)
"Metal" "R.Gate")
这里采用了一个明确的坐标约定:以栅极中心在水平方向的位置为x=0,硅膜底面为y=0,所有几何都基于这两个基准展开。一旦约定固定,后续所有参数变化都不会破坏结构拓扑关系。例如把Lg从0.05改为0.03,栅极、栅氧和源漏延伸区会自动重新定位,不需要手工调整任何坐标。
对于更复杂的结构,如FinFET的鳍、纳米片堆叠或沟槽,通常用create-polygon配合点列表来构建。参数化时可以把点列表写成由参数计算得到的表达式,而不是硬编码数值。Tcl中的写法与Scheme类似,只是语法不同:
set Lg 0.05
set Tox 0.002
sdegeo:create-rectangle \
[position [expr -$Lg/2] 0 0] \
[position [expr $Lg/2] 0.1 0] \
"Silicon" "R.Si"
参数化网格:让加密区域跟随结构
网格参数化比几何参数化更容易被忽视,但它的重要性不亚于几何本身。如果网格加密区域不随结构变化,那么当栅长缩小或结深变浅时,关键区域可能网格过粗,导致仿真精度下降甚至不收敛。SDE通过sdedr:define-refinement-window和sdedr:define-refinement-size来控制网格。
(sdedr:define-refinement-window "RWin.Channel"
"Rectangle"
(position (- 0 (/ Lg 2)) 0 0)
(position (+ 0 (/ Lg 2)) Wsi 0))
(sdedr:define-refinement-size "RSize.Channel"
0.002 0.002 0.002 0.0005 0.0005 0.0005)
(sdedr:define-refinement-placement "RP.Channel"
"RSize.Channel" "RWin.Channel")
这段脚本把沟道区域的网格加密窗口绑定到Lg和Wsi上。当栅长变化时,加密窗口自动伸缩,保证沟道始终获得足够的网格密度。类似地,可以在源漏结附近定义跟随结深参数的加密窗口,在栅氧界面定义跟随Tox的薄层加密。参数化网格的核心思想是:加密窗口的坐标必须由结构参数计算得到,而不是写死数值。
参数化掺杂:剖面随参数迁移
掺杂参数化通常涉及峰值浓度、结深、高斯或误差函数分布的特征长度。SDE提供sdedr:define-constant-profile、sdedr:define-gaussian-profile和sdedr:define-analytic-profile等命令。参数化的做法是把结深、峰值浓度和特征长度都定义为变量,并在定义剖面时引用。
(define Npeak 1e20) ; 源漏峰值浓度 cm^-3
(define Xj 0.02) ; 结深 20nm
(define Sigma 0.008) ; 高斯特征长度 8nm
(sdedr:define-gaussian-profile "Prof.SD"
"Boron" "PeakPos" 0 "PeakVal" Npeak
"ValueAtDepth" 1e16 "Depth" Xj
"Gauss" "Factor" 0.5)
(sdedr:define-refeval-window "RWin.SD"
"Rectangle"
(position (- 0 (+ (/ Lg 2) Lsd)) 0 0)
(position (+ 0 (+ (/ Lg 2) Lsd)) Wsi 0))
(sdedr:define-analytic-placement "Place.SD"
"Prof.SD" "RWin.SD")
当Xj从0.02变为0.015时,掺杂剖面会自动变浅,同时源漏延伸区的几何边界也应相应调整。这里需要特别注意:几何、网格和掺杂三者必须共享同一组参数,否则会出现"几何改了但掺杂没改"或"掺杂改了但网格没跟上"的不一致。工程上通常把参数集中定义在脚本最前面,后续所有命令只引用变量,不出现硬编码数值。
参数扫描与自动重建
参数化脚本写好后,配合Sentaurus Workbench的参数扫描功能,可以自动生成一系列结构。SWB允许在实验表中定义参数变量,每个变量对应脚本中的一个define。当实验表的一行被提交时,SWB会用该行的参数值替换脚本中的变量,然后调用SDE重建结构。这意味着同一份脚本可以生成任意多组结构,而不需要复制粘贴脚本。
实际操作中,建议把参数定义部分单独放在脚本开头,并用注释标明每个参数的单位和物理含义。例如:
; ===== 可调参数区 =====
(define Lg 0.05) ; 栅长 [μm]
(define Tox 0.002) ; 栅氧厚度 [μm]
(define Wsi 0.10) ; 硅膜厚度 [μm]
(define Lsd 0.03) ; 源漏延伸长度 [μm]
(define Xj 0.02) ; 结深 [μm]
(define Npeak 1e20) ; 源漏峰值浓度 [cm^-3]
; =====================
这样做的另一个好处是便于版本管理和团队协作。当需要调整某个参数时,只需修改一行,而不必在数百行脚本中搜索硬编码数值。对于需要频繁迭代的工艺开发或器件优化任务,这种组织方式能显著降低出错概率。
常见问题与检查要点
参数化结构生成中最常见的问题是参数之间的耦合关系被忽略。例如,当Lg缩小到一定程度时,源漏延伸区Lsd可能重叠,导致几何自交;当Xj大于Wsi时,结深超出硅膜范围。这些问题不会在脚本语法层面报错,但会在网格生成或器件仿真阶段暴露。因此,在参数化脚本中应加入基本的合法性检查,例如:
(if (< (+ Lg (* 2 Lsd)) 0.2)
(display "Warning: Lg + 2*Lsd exceeds 0.2 μm\n"))
(if (> Xj Wsi)
(display "Error: Xj exceeds Wsi\n"))
另一个检查要点是网格加密窗口是否覆盖了所有关键区域。当结构参数变化时,如果加密窗口没有同步更新,可能出现关键区域网格过粗的情况。建议在每次参数扫描后,用SDE的可视化功能检查网格分布,确认沟道、结区和栅氧界面都有足够的网格密度。
总结来说,SDE参数化结构生成的核心是把几何、网格和掺杂统一到一组共享参数上,通过Scheme或Tcl脚本实现结构随参数自动变化。参数集中定义、坐标约定明确、三者同步更新,是保证参数化脚本可靠运行的三个关键点。掌握这些方法后,就可以把器件结构定义从手工绘图转变为可编程、可扫描、可复现的自动化流程。