@坏坏小辛

前言

关于silvaco的教程,网上有很多,但多以安装教程为主。本文是想根据自己的使用经验,写一篇关于使用中遇到的问题以及解决方案的经验交流贴。作为一个仿真小白,真的是零基础接触这个软件,遇到过一些可以被称之为“智障”的问题,但我想一定也有跟我有类似经历的初学者或者即将迈入sivalco的同道中人,相信在看了这篇博文以后,大家能够感同身受或者有所领悟。

基础问题

不再废话,我想先说几个基础问题。

一、重要组件

首先,silvaco中有几个重要组件,分别是:交互式工具DeckBuildTonyplot,工艺仿真工具ATHENA,器件仿真工具ATLAS和器件编辑器DevEdit,还有一些内部模块。

组件名称功能
DevEdit用于绘制器件结构,编辑网格,拥有图形界面,比较形象,可以导出为.in结构文件
Atlas是仿真平台,可模拟器件特性,进行Vth、BV 、IV等特性仿真
DeckBuild是编程界面,用于新建或者打开.in文件,进行结构参数设定、编写仿真程序等
TonyPlot用于打开.str、.log文件等,显示结构状态(包括电流密度、网格、电场分布等等),功能十分强大
其他

有几点需要说明:

1.绘制器件结构既可以用DeckBuild,也可以用DevEdit。

DevEdit的特点是比较形象,对于器件掺杂特性、基础模型构建较为方便;不足之处在于,当器件的某些区域需要修改时,较为麻烦,因为要更改与之相邻所有受影响的区域。
DeckBuild则可以将器件长度、宽度等参数设置为可变量,与C语言书写相仿,这样可以根据宏定义的思想,随意对器件结构进行设置而不用大范围修改程序。

2.文件类型
文件类型功能
.str文件结构文件,一般为DevEdit生成的器件结构或者在仿真过程中生成的器件结构
.in文件命令文件,是DeckBuild生成或者执行的文件类型。可以在其中调用“go atlas”、“go DevEdit”等语句来进行器件结构描述、器件特性仿真等。
.log文件器件仿真结果文件,用于显示仿真结果,可用TonyPlot打开
.set文件TonyPlot的显示设置文件
其他类型.lay、.dat、.sepc、.opt,“*.lib”等(不常用,不再赘述)

了解了silvaco的基本功能后,就可以开始进行仿真了。我想介绍一下大体步骤。

二、仿真过程

1.编辑器件结构

可以用DevEdit或者DeckBuild生成所需器件结构。
DevEdit的作图方法比较简单,大家可自行打开软件进行尝试。但对于初学者来说,直接用DeckBuild进行器件结构绘制是一件不太现实的事,因为具体语句你并不清楚。这里的语句并非指语法,而是指诸如器件的材料代码、掺杂代码、颜色显示代码等,这些须通过一定时间的积累方可直接用代码描述。
这里提供的一种思路是,你可以用DevEdit编辑完器件结构以后,导出为.in文件,也就是将结构文件转化为代码类型(不得不说这个功能很强大)。通过模仿现有的程序或者前辈的程序来达到自己直接书写代码的能力。

2.仿真

在DeckBuild中运行仿真程序,与单片机操作十分相似。
(1)DeckBuild中出现的语法错误一般较为容易发现和解决,但是不好解决的地方在于网格收敛性问题,于我而言这就是一门玄学。
(2)silvaco仿真时间一般比较长(具体与网格密度有关),而且运行过程中不能挂起,所以应合理安排仿真顺序,养成合理安排时间的好习惯(个人浅见,受害颇深)。
(3)这里需要注意的是,应养成保存器件结构和结果图片的良好习惯,便于后续分析现象和结果。具体做法是,可以在一些重要的电压、电流结点处设置save语句来保存当前结构。
(4)与此同时,文件命名规则十分重要,应根据温度高低、栅漏压范围大小、掺杂浓度、金属功函数、沟道区域大小分门别类进行保存,方便后续检查。

3.调试

在仿真过程中,模型的建立对于仿真结果有着很重要的影响。
初学者往往看不懂程序中的model语句,在这里我想说的是其实我也有很多看不懂,但是这并没有很大的妨碍。特定的结构模型可以直接粘贴复制,通过修改其中的参数来观察不同参数引起的不同现象。一些重要语句可以去Atlas手册里查,只需要输入关键词进行定位查找即可。

4.分析

结构文件和图片经常通过TonyPlot进行展示和分析。
TonyPlot功能十分强大,可以并行显示不同图片,方便对比;可以显示网格密度、电流密度、电场线分布、组分、浓度等等。关于TonyPlot的使用后在续博客会进行介绍。
总之,仿真过程可以用如下流程图表示:

结构文件
命令文件
DevEdit
Atlas仿真器
DeckBuild
实时输出
TonyPlot显示

深入探讨

一、器件结构编辑问题

前文提到用DevEdit编辑器件结构的不足之处在于不够灵活,需要更改器件不同区域的位置或大小时,不得不进行大范围改动,甚至需要重新绘制。因此产生了用参变量定义器件长度、高度、宽度的想法。
具体可以参看以下示例:
如图所示,这是我用DevEdit编辑的器件初始结构。
在这里插入图片描述
例如,我要更改图示区域1和区域2的大小,代码设置如下:

// Area1 and Area2
# width 
set W=1.0
#height
set H=0.08

#measure of area 
set XL=2.25+$W
set XR=4.75-$W
set YRL=-0.11+$H

#coordinate description
region reg=1 name=n-GaN mat=GaN  color=0xff8282 pattern=0x4 \
	polygon="2.25,-0.11  2.75,-0.11 $XL,-0.11 $XL,$YRL  2.25,$YRL "
#
constr.mesh region=1 default

region reg=2  name=n-GaN mat=GaN  color=0xff8282 pattern=0x4\
	polygon="$XR,$YRL  $XR,-0.11 4.25,-0.11 4.75,-0.11 4.75,$YRL "
#
constr.mesh region=2 default

由于区域1和2是对称的,可以设置区域1和区域2的宽度为W,高度为H,然后设置设置区域1和区域2的纵、横坐标,即可通过修改W、H的值来改变区域1和2的面积。
更改后如下所示:
在这里插入图片描述
相信掌握这种变量定义结构的方法后,你也能随意、快速地更改器件任意区域大小。

二、网格疏密及收敛性问题

这个问题会在后续博客中进行分析和交流。博文链接

三、操作问题

1.TonyPlot只能局部放大,要放大某一部分,用鼠标左键拉一个矩形,将其圈住,会自动放大;继续圈住其中某一部分,可以继续放大。
2.在程序中遇到不认识的语句可以通过关键词,在手册里查找。有atlas、devedit等专用手册。
3.go atlas和go devedit语句可以放在同一程序中,devedit只是结构编程文件,当执行完结构语句后会自动跳转到atlas中去进行仿真。
4.在Atlas中,如果不定义网格,是无法进行仿真的;
但是由于Atlas对网格定义的不够精确,可以在DevEdit中重新定义网格。程序运行时会自动以最密的网格来进行仿真,无视网格定义语句的前后顺序。
5.TonyPlot的显示问题
之前仿真的时候没有注意到这个问题,但是今天凑巧出现了。程序语句如下所示:

log outfile=IV2.log
solve vgate=1 vstep=0.05 vfinal=2 name=gate
save outfile=Vg2.str
solve vdrain=0
#solve vstep=0.5 vfinal=1 name=drain
solve vstep=0.1 vfinal=6 name=drain

在TonyPlot中显示如图:

很明显,我想要展示的是漏电流随漏电压变化而变化的图像,图中却多了栅电压的图像,原因在于在栅压未加到合适值之前,我就已经开始保存IV.2图像了。把图像输出语句调整到栅压达到预设值之后,该问题即可解决。

solve vgate=1 vstep=0.05 vfinal=2 name=gate
save outfile=Vg2.str
log outfile=IV2.log
solve vdrain=0
#solve vstep=0.5 vfinal=1 name=drain
solve vstep=0.1 vfinal=6 name=drain

如下图所示:

四、常见程序语句总结

1.组分一般用.comp语句描述,通常用x表示第一种组分,y表示第二种,z表示第三种。
如AlGaN中,x.comp=0.3表示Al的成分占30%,其余两种占70%。
以此类推。
2.simflags="-p 40" ,意思是把仿真的线程设置为40。一般来说,线程越多,执行速度越快,但是服务器负载有限,不能随意设置,更不能认为越大越好。
3.(更新ing)

   本博客仅对操作步骤作初步探讨,供初学者上手绰绰有余。关于silvaco具体语法,可以参考相关白皮书。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐