今天学习了Silvaco TCAD的第一节课,大概了解了仿真的基本流程,以MOS为例,来和大家分享啦~分享如下:
第一步:设计结构(有了结构模型,才能在上面进行模拟呐。)
go atlas simflags="-P 3" #使用atlas工具,simflags="-P 3"表示使用3颗CPU执行仿真计算
mesh width=1 #这个就是设置网格基准,默认为1就ok
#下面是设置网格mesh,坐标单位默认是微米(um). loc表示在哪里画一条网格线,spac表示在loc !附近! 按照设定值进行画网格线
x.mesh loc=0 spac=0.05
x.mesh loc=0.1 spac=0.02
x.mesh loc=0.35 spac=0.01
x.mesh loc=0.6 spac=0.1
x.mesh loc=0.85 spac=0.01
x.mesh loc=1.1 spac=0.02
x.mesh loc=1.2 spac=0.1
#上面是在垂直x轴方向画线,下面是在垂直y轴方向上画线
y.mesh loc=-0.3 spac=0.05
y.mesh loc=-0.21 spac=0.05
y.mesh loc=-0.01 spac=0.002
y.mesh loc=0 spac=0.002
y.mesh loc=10 spac=1
#下面是对上面的网格进行区域划分,region关键字,然后区域编号,给出区域(矩形)范围,给定区域材料
region number=1 x.min=0 x.max=1.2 y.min=0 y.max=10 material=silicon
region number=2 x.min=0 x.max=1.2 y.min=-0.3 y.max=0 material=oxide
region number=3 x.min=0.35 x.max=0.85 y.min=-0.21 y.max=-0.01 material=poly
region number=4 x.min=0.35 x.max=0.85 y.min=-0.3 y.max=-0.21 material=aluminum
region number=5 x.min=0 x.max=0.1 y.min=-0.3 y.max=0.0 material=aluminum
region number=6 x.min=1.1 x.max=1.2 y.min=-0.3 y.max=0.0 material=aluminum
#设置电极,electrode是关键字,reg表示设置的区域,name就是电极名字啦~
electrode reg=4 name=gate
electrode reg=5 name=source
electrode reg=6 name=drain
electrode bottom name=substrate
#下面是对各个区域做掺杂,doping还是关键字,uniform表示均匀掺杂,然后设置要掺杂的区域,选定p/n型掺杂,给定掺杂浓度~~
doping uniform region=1 x.min=0 x.max=1.2 y.min=0 y.max=10 p.type concentration=1e17
doping uniform region=3 x.min=0.35 x.max=0.85 y.min=-0.21 y.max=-0.01 n.type concentration=5e20
#和上面一样哦,uniform -> gauss 就是表示高斯掺杂,区域只给x值,表示横向扩散,然后是结深,扩散比率(一般都是0.6~0.7喔)
doping gauss region=1 x.min=0 x.max=1.2 junc=0.02 rat=0.6 p.type concentration=5e17
doping gauss region=1 x.min=0 x.max=0.35 junc=0.05 rat=0.6 n.type concentration=4e18
doping gauss region=1 x.min=0.85 x.max=1.2 junc=0.05 rat=0.6 n.type concentration=4e18
doping gauss region=1 x.min=0 x.max=0.15 junc=0.2 rat=0.6 n.type concentration=5e20
doping gauss region=1 x.min=1.05 x.max=1.2 junc=0.2 rat=0.6 n.type concentration=5e20
#下面就是保存,输出文件,命名为nMOS_atlas.str
save outf=nMOS_atlas.str
#quit是程序结束关键字,就不会再执行下面的代码啦,以上基本就完成了MOS结构的制作了,然后就可以在这个结构之上做模拟,分析电压、电流等特性啦~
quit
go atlas simflags="-P 3"#设置使用三颗CPUmesh width=1x.mesh loc=0spac=0.05x.mesh loc=0.1spac=0.02x.mesh loc=0.35spac=0.01x.mesh loc=0.6spac=0.1x.mesh loc=0.85spac=0.01x.mesh loc=1.1spac=0.02x.mesh loc=1.2spac=0.1y.mesh loc=-0.3spac=0.05y.mesh loc=-0.21spac=0.05y.mesh loc=-0.01spac=0.002y.mesh loc=0spac=0.002y.mesh loc=10spac=1region number=1x.min=0 x.max=1.2 y.min=0 y.max=10 material=siliconregion number=2 x.min=0 x.max=1.2 y.min=-0.3 y.max=0 material=oxideregion number=3x.min=0.35 x.max=0.85 y.min=-0.21 y.max=-0.01 material=polyregion number=4 x.min=0.35 x.max=0.85 y.min=-0.3 y.max=-0.21 material=aluminumregion number=5x.min=0 x.max=0.1 y.min=-0.3 y.max=0.0 material=aluminumregion number=6 x.min=1.1 x.max=1.2 y.min=-0.3 y.max=0.0 material=aluminumelectrode reg=4 name=gateelectrode reg=5 name=sourceelectrode reg=6 name=drainelectrode bottom name=substratedoping uniform region=1 x.min=0 x.max=1.2 y.min=0 y.max=10 p.type concentration=1e17doping uniform region=3 x.min=0.35 x.max=0.85 y.min=-0.21 y.max=-0.01 n.type concentration=5e20doping gauss region=1 x.min=0 x.max=1.2 junc=0.02 rat=0.6 p.type concentration=5e17doping gauss region=1 x.min=0 x.max=0.35 junc=0.05 rat=0.6 n.type concentration=4e18doping gauss region=1 x.min=0.85 x.max=1.2 junc=0.05 rat=0.6 n.type concentration=4e18doping gauss region=1 x.min=0 x.max=0.15 junc=0.2 rat=0.6 n.type concentration=5e20doping gauss region=1 x.min=1.05 x.max=1.2 junc=0.2 rat=0.6 n.type concentration=5e20save outf=nMOS_atlas.strquit
第二步,在上一步设计的结构上做物理特性的模拟!
ok,下面就做个漏极电流和漏极电压关系的分析案例:
go atlas simflags="-P 3" #使用atlas工具,simflags="-P 3"表示使用3颗CPU执行仿真计算
#下面导入网格文件 inf可以理解为 input file
mesh inf=nMOS_atlas.str
#选模型 就直接选择mos ,以后可以根据自己需要仿真的器件,选择合适的模型,具体怎么选,我现在还不懂嘿嘿。
models mos
#定接口interface,接口的意思就是半导体/绝缘体表面的参数,与缺陷有关,一般数据都是特定值,我也不知道该怎么选定,呜呜呜
interface qf=3e10
#定方法 ,method是关键字,使用牛顿newton的方法,具体是啥,此外还有哪些方法我就不知道了,,后面就是限制一下,不要陷入死的计算循环意思吧(我大概猜滴)
method newton itlimit=25 maxtrap=4
#初始化 会把四个电极(就是上面那个程序里定义的electrode)的值初始化为0
#下面是给出求解漏极电流和漏极电压变化过程的方案
#####IdVd@Vg=0.3 Vd=0~1V
solve init #解决方案初始化
solve vgate=0.3 #设置栅压0.3V
log outf=IdVd_Vg3.log #将计算结果记录到输出文件IdVd_Vg3.log中
solve vdrain=0 vstep=0.01 vfinal=1 name=drain #Vd从0变化到1V,每次增长0.01,增长一次,进行一次计算
log off #记录数据结束
第三步,从获得的数据中萃取需要的数据,比如最大值
#下面是萃取(extract) IdVd关系中在Vgate =0.3V时,最大电流值
#提取器件参数 @Vg=0.3
extract init inf=“IdVd_Vg3.log” #声明输入文件,也就是从上面保存的计算数据文件中进行萃取
extract name=“idsmaxVg3” max(abs(i.“drain”)) #萃取语句,一般不需要自己写,可以通过编辑器,按照自己需要萃取的内容,自动生成。使用方法:菜单栏中的commands -> syntax dialogs -> Extract Dialogs -> Device Extract 然后选定自己需要萃取的物理特性就ok了,这功能真香!!
quit #结束结束
#########IdVg @Vd=0.1 Vg=0~3Vgo atlas simflags="-P 3"#导入文件mesh inf=nMOS_atlas.str#选模型models mos#定接口interface qf=3e10#定方法method newton itlimit=25 maxtrap=4#初始化 会把四个电极的电压初始化为0solve init#初始条件solve vdrain=0.1log outf=IdVg.logsolve vgate=0 vstep=0.05 vfinal=3 name=gatelog off#下面这行是保存Vg=3V时的MOS图save outf=IdVg_Vg3.str#提取器件参数extract init inf="IdVg.log"extract name="nvt"(xintercept(maxslope(curve(abs(v."gate"),abs(i."drain"))))\-abs(ave(v."drain"))/2.0)quit#########IdVd @Vg=0.3 Vg=0.4 Vg=0.5 Vg=0.6 Vd=0~3Vgo atlas simflags="-P 3"#导入文件mesh inf=nMOS_atlas.str#选模型models mos#定接口interface qf=3e10#定方法method newton itlimit=25 maxtrap=4#初始化 会把四个电极的电压初始化为0#####IdVd@Vg=0.3 Vd=0~1Vsolve init#初始条件solve vgate=0.3log outf=IdVd_Vg3.logsolve vdrain=0 vstep=0.01 vfinal=1 name=drainlog off#下面这行是保存Vg=3V时的MOS图#save outf=IdVd_Vd2.str#####IdVd@Vg=0.4 Vd=0~1Vsolve init#初始条件solve vgate=0.4log outf=IdVd_Vg4.logsolve vdrain=0 vstep=0.01 vfinal=1 name=drainlog off#####IdVd@Vg=0.5 Vd=0~1Vsolve init#初始条件solve vgate=0.5log outf=IdVd_Vg5.logsolve vdrain=0 vstep=0.01 vfinal=1 name=drainlog off#####IdVd@Vg=0.6 Vd=0~1Vsolve init#初始条件solve vgate=0.6log outf=IdVd_Vg6.logsolve vdrain=0 vstep=0.01 vfinal=1 name=drainlog off#提取器件参数 @Vg=0.3extract init inf="IdVd_Vg3.log"extract name="idsmaxVg3" max(abs(i."drain"))#提取器件参数 @Vg=0.4extract init inf="IdVd_Vg4.log"extract name="idsmaxVg4" max(abs(i."drain"))#提取器件参数 @Vg=0.5extract init inf="IdVd_Vg5.log"extract name="idsmaxVg5" max(abs(i."drain"))#提取器件参数 @Vg=0.6extract init inf="IdVd_Vg6.log"extract name="idsmaxVg6" max(abs(i."drain"))quit
下面给大家写一些小tips:
1.关于运行程序
a.保存并运行:保存程序,从第一行开始运行到第一个quit语句。后面的程序不会被执行哦
b.运行:就是从第一行开始运行,直到第一个quit语句结束。后面的程序不会被执行哦
c.run to line:这是一个标记,是个结束的flag,你在某一行给了这个标记之后,在运行的时候,就会运行到你所标记的位置而停止,前提是你标记的之前没有quit 语句哦
d.go to line:这也是一个标记,是个开始的flag,你在后一行给了这个标记之后,在运行的时候,就会从你标记的这里开始运行,而不是所有程序的第一行开始,直到运行至quit语句。
呜呜,about运行就说这么多吧,还有很多调试功能,一行一行执行的功能,等俺研究了在分享!~
2.关于查看运行结果
a.本文的程序第一部分就是搞了一个mos的二维结构图,保存在了.str文件,可以在DeckBuild的右侧Output里面双击打开,进行查看。所有的输出文件都可以从这里查看哦!~
b.另一种好用的查看方式是!选中自己代码中输出文件名,然后右击,选择Plot就可以了
c.可以同时打开多张结果图,如果第一张以后的图,想要单独显示,就用Plot方式打开,如果想和前面的图显示在一个框框,就用b方法,将Plot改选为Plot Append就ok,即使这样,也可以对打开的每幅图进行设置哦~超方便!
3.About保存运行过程
可以在DeckBuild下面的输出框中右击,选择save runtime ,然后给个名字.out就OK了,可以在Tools -> Sedit中打开查看文本格式,也可以直接用text文本打开查看。
呜呜呜,balabala 说这么多,学习编程最好的方法就是要跟着一点点做呐!!加油加加
微电子的初学者,好难好难