赞
踩
第一部分:
第二部分:
The scripting language of Sentaurus Structure Editor is based on Scheme, which is a LISP-like programming language that differs significantly from most widely used programming languages. A working knowledge of Scheme is needed to create Sentaurus Structure Editor scripts for parameterized devices.
(Sentaurus Structure Editor的脚本语言基于Scheme,与大多数广泛使用的编程语言有很大不同, Scheme是一种类似lisp的编程语言。为参数化器件创建Sentaurus结构编辑器脚本需要Scheme的工作知识)
(sdegeo:create-rectangle v1 v2 material-name region-name).
(sdegeo:create-polygon (list (position 8 29.5 0)(position 8.8 30 0) (position 63.2 30 0) (position 64 29.5 0)(position 8.8 29 0)(position 8 29.5 0)) "SiO2" "gox")
器件结构设计完成后,架子就搭好了,接着需要对确定的区域进行掺杂。
sdedr:define-refeval-window
定义可用作参考/评估窗口的几何区域
Sytax
(sdedr:define-refeval-window rfwin-name { single-shape | multi-shape })
(sdedr:define-refeval-window "RefEvalWin_SUB" "Cuboid"(position 0 0 0)(position 30 5 0))
:确定位置,并确定掺杂类型,Cuboid表示恒定掺杂(sdedr:define-constant-profile "ConstantProfileDefinition_SUB" "BoronConcentration" 1.8e15)
(sdedr:define-constant-profile-placement "ConstantProfilePlacement_SUB" "ConstantProfileDefinition_SUB" "RefEvalWin_SUB")
另一种掺杂方式是线性掺杂,或者叫解析掺杂,高斯掺杂,这里是用"Line"表示。
(sdedr:define-refinement-window "RefEvalWin_nsd1" "Line" (position 26 10 0)(position 30 10 0))
当采用线性掺杂时,这里的总坐标是不变的,也就是确定一条线段(基线),沿着这条线往两侧延伸掺杂,浓度由高到低,模拟离子注入及退火过程,掺杂区域命名为"nsd1"。
(sdedr:define-analytical-profile)
创建用户定义的分析函数,该函数描述网格命令文件中的掺杂
(sdedr:define-analytical-profile-placement)
在网格命令文件中创建形貌分析面定义的位置。
(sdedr:define-analytical-profile-placement "AnalyticalProfilePlacement_nsd1" "nsd1" "RefEvalWin_nsd1" "Both" "NoReplace" "Eval")
这一句除了nsd1一般不需要修改。
(sdedr:define-gaussian-profile "nsd1" "ArsenicConcentration" "PeakPos" 0 "PealVal" 4.5e20 "ValueAtDepth" 1e15 "Depth" 0.5 "Erf" "Factor" 0.5)
这个地方的"gaussian"表示掺杂类型为高斯掺杂,即线性掺杂,"nsd1"是自定义的区域名称,与上面保持一致,ArsenicConcentration表示砷元素掺杂,即形成N型半导体,Peakpos是Peakposition的意思,是指掺杂浓度的最大值与基线的距离,这里的0指掺杂浓度最大值就是在基线。最大浓度PeakVal是4.5e20,最小浓度ValueAtDepth是1e15,扩散深度Depth是0.5微米,横向扩散因子Factor是0.5,。这里的横向扩散因子越大扩散越明显,越小越接近恒定掺杂。"Both"表示的是沿着基线向两侧扩散,当两侧都是硅,那么会形成两侧的扩散;如果是在硅表面进行扩散,由于另一侧没有Si材料,那就是基本的离子扩散,类似于例子注入退火等;还有Positive是往正的方向扩,Positive是往反方向扩散。
掺杂之后就定义接触电极,在仿真中电极也叫接触
(sdegeo:define-contact-set “anode” 4 (color:rgb 1 0 0) “##”)
(sdegeo:set-current-contact-set “andoe”)
(sdegeo:define-2d-contact-(list (car (find-edge-id(position 2 20 0)))) “anode”)
(sdegeo:define-contact-set )
定义电极名字并初始化支持数据
Syntax:
(sdegeo:define-contact-set name [edgeThickness Color] | [Color facePattern])
(sdegeo:set-current-contact-set)
“anode”:电极名称;边缘厚度默认是4;rgb(red green blue)后面的表示颜色。
这里面只要在铝或者想要定义电极的地方边缘取一个点就行,就会形成一个接触。
定义电极的另一种方式是把铝包起来,要把点定义在铝的内部(body)任一点,而不是边缘(edge),命令是:
(sdegeo:define-contact-set “drain” 4 (color:rgb 1 0 0) “##”)
(sdegeo:set-current-contact-set “drain”)
(sdegeo:set-contact-boundary-edges(list(car(find-body-id(position 20 11 0))))“drain”)
这个坐标是在铝内部任一点,这种电极定义方法对于铝、多晶硅都是可以的,但是对于衬底、硅表面电极接触的定义就要用上面的边缘接触。
(sdegeo:set-contact-boundary-edges)
将活动(active)电极组(set)名称附着到指定实体(specified body)的所有边
为了防止金属影响仿真结果,很多接触的定义都是把金属删除了,只保留接触,命令是(sdegeo:delete-region(list(car(find-body-id(position 0 -0.1 0)))))
,(0 -0.1 0)是金属铝或者PolySi的任一点即可把电极金属去除,只保留Contact,这句命令一般紧随该电极之后。
(sdegeo:delete-region)
删除指定的一个或多个区域, 包括Ref/Eval窗口主体
没有网格定义掺杂就无法正常显示。Sdevice仿真就是将Sde或Sprocess建立出来的图形进行网格化,形成网格文件(二进制文件),根据某处网格点的数据,如浓度、坐标,代入到软件被调用的半导体器件方程,如泊松、迁移率等方程,从而计算出器件的电学特性,所以网格才是Sde的灵魂。
(sdedr:define-refeval-window "RefEvalWin_1" "Rectangle" (position 0 50 0)(position 600 -50 0))
,这表示需要优化的区域,这个矩形区域需要大于器件的区域。
(sdedr:define-refinement-size “RefinementDefinition_1” 5 5 1 1),这里的5 5 1 1分别表示网格在X方向的最大长度,Y方向的最大长度,X方向的最小长度,Y方向的最小长度。如果想要增大Y方向网格密度,则应减小Ymax和Ymin.
(sdedr:define-refinement-placement "RefinementPlacement_1" "RefinementDefinition_1" "RefEvalWin_1") (sdedr:define-refinement-function "RefinementDefinition_1" "DopingConcentration" "MaxTransDiff" 1)
,这两行一般不作修改。
如果想对某一区域优化网格,即对某一区域进行加密。比如栅氧、PN结交界面、金属和硅的接触面、二维电气等,可以再加一个网格定义的矩形区域,名称可以把Win1改成Win2,名字是自定义的。(sdedr:define-refeval-window “RefEvalWin_2” “Rectangle” (position 0 7 0)(position 600 12 0),修改position,改成只想优化的矩形区域。(sdedr:define-refinement-size “RefinementDefinition_2” 0.8 0.8 0.3 0.3),把网格改小,数字与数字之间有空格即可,1个空格和n个空格没差别。(sdedr:define-refinement-placement “RefinementPlacement_2” “RefinementDefinition_2” “RefEvalWin_2”).(sdedr:define-refinement-function “RefinementDefinition_2” “DopingConcentration” “MaxTransDiff” 1),记得把所有的Win1改成Win2,不然无效。若要加三个区域的网格,就把这四行整体复制,改成position坐标和第二行 0.8 0.8 0.3 0.3 这4个数字,同时把所有的Win2改成Win3…
(system:command "snmesh n@node@_msh")
(sde:build-mesh "n@node@")
上述命令会调用Snmesh这个工具进行Mesh Generation,即生成网格文件,一般用于后续的Sdevice运行,@node@可以自动读取当前运行节点的节点序号。
通过以上的保存命令,运行成功后,可以得到两张图,一个是bnd.tdr没有掺杂信息的,一个是有掺杂信息的_msh.tdr图。
此外运行Sde之前记得选Properties,改成Batch模式,不然会出现一个Sentaurus Structure editor窗口,特别费时间。如果想看网格数量,双击运行成功的节点,往上翻,Points之前的数字就是网格数。
遇到运行出错,双击节点,点击左下状态栏有个.err的,点进去查看。
Sde搭建的结构棱角突出,与实际不符,会导致电场集聚,需要在棱角处做圆润化处理。
(sdegeo:create-polygen (list (position 8 29.5 0)(position 8.8 30 0)(position 63.2 30 0)(position 64 29.5 0)(position 63.2 29 0)(position 8.8 29 0)(position 8 29.5 0)) "SiO2" "gox")
优化的命令紧随上面的多边形创建命令
(sde:define-parameter "filter-radius" 10 0.0 0.0)
,这里的10是圆润化的程度,越大会越圆润,可以用0.1和0.01两个运行试试。写出需要圆润化的坐标,像LOCOS,STI底部等转弯处。
(sdegeo:fillet-2d(find-vertex-id(position 8.8 30 0.0)) fillet-radius)
(sdegeo:fillet-2d(find-vertex-id(position 8.8 29 0.0)) fillet-radius)
(sdegeo:fillet-2d(find-vertex-id(position 63.2 30 0.0)) fillet-radius)
(sdegeo:fillet-2d(find-vertex-id(position 63.2 29 0.0)) fillet-radius)
变量的定义有两种,第一种是在外面,添加这个变量并赋值,程序里的变量用@L1@这样的格式;另外还有一种就是在命令开头定义,如(define CP 1), (define R1 20)
(+ @a@ @b@),表示a加b
(- @a@ @b@),表示a减b
(* @a@ @b@),表示a乘b
(/ @a@ @b@),表示a除以b
(/ (* (- @a@ @b@) @c@) @d@),表示[(a-b)xc]/d
除了加减乘除,tcl语言还提供了开方sqrt,求对数log等运算。
(do
( ( i 0 (+ i 1)))
((= i R1))
(begin
(define REGION1 (string-append “region” (number->string i)))
(sdegeo:create-rectangle (position (+ 11 (* i CP)) 9 0.0) (position (+ 11.5 (* i CP)) 11 0.0) “Aluminum” REGION1)))
这是画20个矩形的操作,材料是铝,CP和R1是上面提到的1和20.上面的命令表示,i从0开始,一共循环20次,第一次矩形对角线是(11,9)(11.5, 11),第二次矩形对角线是(12,9),(12.5 11),第三次矩形对角线是(13,9)(13.5,11),…第20次矩形对角线是(30,9)(30.5 11),当i=R=20不执行操作,跳出循环。
搭建好的结构,如果只想要对器件局部进行仿真,可以用下面的命令把想要的区域给剪切出来。命令的位置放在Doping之前,后者Meshing之前也行,但一定要搭建好的结构区域之后。命令是:
(sdegeo:2d-cut(position 40 20 0)(position 80 -40 0)),保留由Position定义的矩形框内的器件区域。
有时,Sde默认的材料里不包括我们想要的新材料,比如高K介质HfO2,如果需要添加新材料,使用如下方法。在Project目录下,添加Datexcodes.txt文件,修改Datexcodes.txt文件,添加新材料HfO2,文件内容如下:
Material{
HfO2{
label = “HfO2”
group = Insulator
color = #a68262,#ff1744 }}
这里的group代表的是材料类型,分为导体conductor、半导体Semiconductor和绝缘体Insulator等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。