1. 先说清楚Silvaco Atlas到底是什么——以及它和华为Atlas根本是两码事
去年有个做器件工艺的朋友问我,说在网上搜“Atlas”搜出来一堆AI加速卡的内容,差点以为Silvaco改行做硬件了。这事其实挺常见,Silvaco Atlas和华为Atlas推理卡名字撞车,但完全是两个物种。前者是半导体器件仿真软件,属于TCAD(Technology Computer-Aided Design)领域的老牌工具,后者是AI计算硬件。如果你是被“Atlas”这个词带进来的,先确认自己找的是不是Silvaco的器件仿真工具,别在错误的路上浪费半天。
Silvaco Atlas的核心价值,通俗点说就是:在流片之前,先用计算机把晶体管、二极管、MOSFET这类器件的电学特性“虚拟做出来”。你不用真的去晶圆厂烧钱流片,就能大致知道这个结构的击穿电压是多少、漏电流有多大、阈值电压在什么范围。半导体行业做一次流片动辄几十万上百万,而跑一遍Atlas仿真,消耗的只是你的服务器时间和一点点耐心。对搞器件设计、工艺开发、失效分析的人来说,这几乎是吃饭的家伙。
这篇指南的目标读者很明确:刚接触TCAD、手上有Silvaco软件但不知道怎么下手的人,或者正在犹豫要不要入坑、想先搞清楚这东西到底能干什么的人。我会从最基础的概念讲到能跑通的完整仿真流程,最后把常见的坑也一起列出来。跟着做一遍,你至少能独立完成一个简单的PN结二极管仿真,并且知道每一步为什么要这么设置。
2. 环境准备与输入文件架构:Atlas到底靠什么在跑
2.1 获取软件与运行环境
Silvaco是一家商业EDA公司,Atlas是它的核心器件仿真模块,通常和工艺仿真模块Athena配套使用。软件授权一般由公司购买,或者通过高校实验室、研究院所的统一license获得。Silvaco官网也提供评估版和教育版申请渠道,学生和初学者可以走这个途径。这里多说一句,网上所谓的“Silvaco TCAD下载安装”很多是来路不明的版本,我不建议碰,一个是法律风险,另一个是盗版版本经常缺模型库,跑起来报错你根本分不清是语法问题还是模型缺失,排查起来非常痛苦。
Atlas本身支持Linux和Windows,但工业界绝大多数跑在Linux服务器上。个人学习的话Windows版也能装,图形界面叫DeckBuild,写代码、跑仿真、调参都在这个界面里完成。核心的仿真引擎是命令行驱动的,DeckBuild只是壳,真正干活的是atlas这个可执行程序。所以你会发现,哪怕不用图形界面,写一个输入文件然后在终端里敲atlas < 输入文件也能跑,只是不如DeckBuild方便调试和看报错。
2.2 一个输入文件就是完整的实验方案
用Atlas做事,核心就是写输入文件。它不像你在COMSOL里点点鼠标画几何、设边界条件那么直观,而是用一段结构化文本来完整描述你的器件结构、掺杂分布、物理模型和求解策略。第一次接触的人会觉得这种模式很原始,但用熟了以后反而觉得好用——因为所有参数都可以追溯、复现、批量扫描。
一个标准的Atlas输入文件,按照执行顺序可以拆成几个功能块:
- 结构定义(网格、区域、电极、掺杂)
- 物理模型选择
- 数值求解方法设置
- 求解流程(偏置扫描、瞬态或频率扫描)
- 结果输出(log文件、结构文件、参数提取)
这五个部分环环相扣。结构定义错了,后面的仿真再怎么调也没意义;物理模型选少了,结果偏离实际;求解流程安排不合理,直接不收敛。入门阶段最重要的就是搞清楚第一块——把结构定义写对,仿真就跑通了一大半。
2.3 网格、区域、电极、掺杂:器件的四块基石
先说说网格。Atlas是有限元/有限体积类的数值求解器,它把连续的半导体结构离散成一个个网格点,在每个网格点上求解泊松方程和载流子输运方程。网格的疏密直接决定仿真精度和速度。网格太粗,结附近电场分布算不准,击穿电压偏差巨大;网格太细,计算量指数上升,一个简单二极管都可能跑几分钟。
网格分布跟着物理量走。电荷、电场、载流子浓度变化剧烈的地方——比如PN结界面、沟道区、高掺杂浓度梯度区——必须加密。均匀掺杂的体区、衬底这些物理量平缓的区域,网格可以稀疏。这个原则从你画第一个网格开始就要记住,后面所有器件结构的网格设计都遵循它。
区域(region)用来定义材料的分布和边界。Si、GaAs、SiC、SiO2、AlGaN等材料都可以定义,同一结构里可以存在多种材料,比如硅体区上长一层栅氧化层。区域之间通过网格坐标边界区分,所以网格设计一定得在区域定义之前完成。
电极(electrode)定义器件对外连接的端子。源、漏、栅、阳极、阴极,都通过电极与外部电路相连。电极必须落在结构的边界位置,不能悬空在半导体内部,这是新手经常犯的错。后面我会展示一个因为电极位置不对导致仿真空跑的典型案例。
掺杂(doping)是半导体器件的灵魂。Atlas里的掺杂分布可以通过均匀掺杂、高斯分布解析公式或读入工艺仿真得到的掺杂剖面来定义。PN结的整流特性、MOSFET的阈值电压、击穿电压的高低,全都由掺杂浓度和分布决定。一个器件结构里可以有多个掺杂步骤,它们可以叠加,最终形成复合掺杂分布。
3. 从零仿真一个PN结二极管:完整实操流程
这一章我们用最简单的PN结二极管把整个流程走通。它结构简单、物理学清晰、仿真时长短,非常适合当第一个上手案例。跑通这个,后面再做MOSFET、IGBT、功率二极管,思路都是一样的。
3.1 网格设计:靠近结区必须加密
打开DeckBuild,新建一个输入文件,第一段代码写网格定义:
go atlas mesh space.mult=1.0 x.mesh loc=0.0 spac=0.5 x.mesh loc=1.0 spac=0.5 y.mesh loc=0.0 spac=0.02 y.mesh loc=0.45 spac=0.01 y.mesh loc=0.50 spac=0.002 y.mesh loc=0.55 spac=0.01 y.mesh loc=1.0 spac=0.02这个结构在x方向只有1微米宽,等距分成两段就够了。y方向是关键:0到0.5微米是P型区,0.5到1.0微米是N型区,PN结在y=0.5附近。你看我在0.45到0.55这个区间里,网格间距已经压到0.002微米,也就是2纳米。为什么这里要这么密?因为PN结的耗尽区宽度很窄,电场在结附近急剧变化,网格太粗会把电场峰值磨平,仿真出来的击穿电压和实际偏差巨大。而远离结区的地方,电场和载流子浓度变化平缓,0.02微米间距完全够用。
关于space.mult参数多说一句。它相当于全局网格密度的缩放因子,默认为1.0。如果觉得计算太慢,可以临时调大到2.0或3.0让网格变稀疏快速跑通流程验证逻辑,确认没问题后再改回1.0做精细仿真。这个技巧在调试阶段非常实用。
3.2 区域与电极:材料、厚度、边界一个都不能少
网格画完之后,定义区域和电极:
region num=1 y.min=0.0 y.max=0.5 silicon region num=2 y.min=0.5 y.max=1.0 silicon electrode num=1 name=anode top electrode num=2 name=cathode bottom这里定义了两个区域,都是硅材料,上下各0.5微米。电极分别落在器件的顶部和底部。注意电极语句里的top和bottom是关键字,表示电极与结构的上边界或下边界接触,Atlas会自动把电极绑定到对应网格边界上。
新手容易犯的一个错误是把电极写在结构中间。比如想当然地认为阳极应该在P区里,就直接指定y.min=0.1 y.max=0.2,结果电极悬浮在器件内部,仿真结果一团糟。正确做法是电极永远落在边界上。如果结构是垂直方向的,就放在顶部或底部;如果是水平方向的,就放在左端或右端。
3.3 掺杂分布:构造PN结的核心
接下来定义掺杂,这一步是构造整流特性的关键:
doping uniform conc=1e18 p.type region=1 doping uniform conc=1e16 n.type region=2第一条语句在上方P型区掺入浓度为1e18每立方厘米的受主杂质,第二条语句在下方N型区掺入1e16每立方厘米的施主杂质。P区浓度比N区高两个数量级,这样做出来的二极管,耗尽区主要向浓度低的N区一侧扩展,击穿特性也更接近实际的功率二极管。
均匀掺杂是入门阶段最简单的掺杂方式。实际工艺中掺杂分布通常不是均匀的,比如离子注入后经过退火,杂质浓度服从高斯分布或余误差函数分布。Atlas里可以用doping gaussian语句来定义这类分布,甚至可以直接读入工艺仿真软件(比如Athena)输出的掺杂剖面数据。等你把均匀掺杂的流程跑熟了,再去探索这些高级功能,会更有底。
3.4 物理模型与求解策略:算得准的前提是模型选得对
结构定义完,选物理模型:
model conmob srh auger bgn method carr=2 contact name=anode n.poly这四行看起来简单,实际每一行背后都对应一个物理机制。conmob表示载流子迁移率随浓度变化,高掺杂区域载流子散射加剧,迁移率下降;srh是Shockley-Read-Hall复合模型,描述载流子通过禁带中缺陷能级的复合过程,这是决定二极管反向漏电流的重要机制;auger是俄歇复合,在高注入条件下不可忽略;bgn是带隙变窄效应,当掺杂浓度很高时,禁带宽度会变窄,这会影响本征载流子浓度和大注入行为。
method carr=2是数值求解方法的选择,表示在牛顿迭代中加入双载流子(电子和空穴)完整耦合求解。对二极管这种双极性器件来说,carr=2是标配。
接触设置contact name=anode n.poly表示阳极使用N型多晶硅接触,和实际工艺中硅化物或重掺杂多晶硅接触对应。这个设置会让接触附近的能带弯曲更符合物理实际。
求解流程写得清晰,仿真结果才可靠:
solve init solve vd=0.0 log outf=diode.log solve vd=0.0 vstep=0.02 vfinal=0.2 solve vd=0.2 vstep=0.05 vfinal=1.0 save outf=diode.str tonyplot diode.log -set diode.setsolve init是对器件初始状态做一次求解,相当于让结构在零偏置下达到自洽的热平衡状态。然后从零电压开始对阳极做正向扫描。前0.2V用小步长0.02V,是为了精确捕捉二极管在小电压下的开启过程。0.2V之后用较粗的0.05V步长快速扫描到1V,节省计算时间。整个扫描过程的电流电压数据写入diode.log文件,最终结构状态保存到diode.str。tonyplot是Silvaco自带的图形化后处理工具,用来画I-V曲线和结构剖面。
这里有一个容易被忽视的细节:log语句必须在扫描语句之前执行,并且每次要记录新的直流扫描时要注意log文件不要被上一次的结果覆盖。程序化批量扫描时我习惯为每个扫描条件单独起一个log文件名,比如diode_300k.log、diode_400k.log,后面提取数据的时候绝对不会搞混。
3.5 结果可视化与参数提取:从数据到结论
仿真跑完后,用TonyPlot打开diode.log,在曲线上能清晰看到二极管正向导通特性。从对数坐标看反向漏电流,从线性坐标看开启电压。想定量提取参数,用Atlas的extract语句可以自动计算。比如提取阳极电流达到某个阈值时的电压:
extract name="v_on" v.anode when i.anode=1e-6这句的意思是在阳极电流为1e-6安培(每微米宽度)时,记录对应的阳极电压值,并命名为v_on。在批量对比不同掺杂浓度、不同结深的设计方案时,这种提取语句能极大提升效率。我一般会把所有设计方案的提取结果汇总到一个表格里,直接对比工艺参数对电学性能的影响趋势,这种工作方式比手动一个个看曲线高效得多。
4. 常见问题与排查技巧实录
4.1 求解不收敛:先查电压步长,再查网格
Atlas仿真最常见的报错就是Newton迭代不收敛。遇到这个错误,新手第一反应往往是去调数值方法参数,实际的排查顺序恰恰应该反过来。
先看电压步长。二极管在开启电压附近电流变化极其剧烈,一步跨太大直接导致迭代发散。比如从0.4V直接跨到0.6V,可能跨越了整个开启区,这时候把步长改小到0.01V甚至0.005V就能解决。再看网格。结区附近网格太粗也可能导致不收敛,因为在粗网格上电场和载流子浓度的梯度无法被准确描述,物理方程本身就无解。最后才考虑调整数值方法参数,比如放宽迭代容差、增加迭代次数上限。
我之前遇到过一种情况,正向扫描到0.7V附近反复不收敛,排查来排查去发现是外推方法设置的问题。Atlas默认用Gummel迭代做初值外推,但在强反型和大注入条件下,需要切换到完全耦合的Newton迭代,也就是前面提到的method carr=2配合newton参数。这种问题在基础教程里很少写,但实际工作中经常遇到。
4.2 网格质量导致结果偏差:稀疏网格会让击穿电压虚高
我曾经用一套比较稀疏的均匀网格仿一个功率二极管的击穿电压,算出来比实测值高出50%以上。一开始以为是物理模型参数没校准,后来把结区网格加密了5倍,结果立刻降下来了,和实测吻合得很好。原因是击穿电压由结区峰值电场决定,稀疏网格会把电场峰值人为摊平,峰值变小,击穿电压自然偏高。
网格敏感性分析是TCAD仿真必须做的验证步骤。简单说就是你加密网格后再跑一遍,看关键指标——击穿电压、阈值电压、漏电流——变化是否在可接受范围内。如果变化很大,说明网格还没收敛,继续加密;如果变化很小,说明当前网格精度够用。这个步骤看似费时,但能避免很多被错误结论带偏的坑。
4.3 电极悬浮在结构内部导致仿真空跑
电极只能放在结构边界上,这个规则我之前强调过。但实际操作中还是会有人犯。症状是仿真不报错,log文件里有数据,但电流永远是零或者数值极小。这种情况九成是电极定义在了结构内部,外部电路根本没有和半导体形成有效接触。排查方法很简单,用TonyPlot打开结构文件看电极位置是否在边界上。如果看不到电极标记,八成就是位置写错了。
4.4 TonyPlot显示异常:文件类型与后缀要匹配
TonyPlot既能画log文件里的I-V曲线,也能画str文件里的二维结构图和电场分布图。很多新手把两种文件搞混——在log文件里找电场分布,当然什么都找不到。
另外要注意-set参数。TonyPlot的set文件保存的是绘图参数(坐标轴范围、颜色映射、标题、单位等),它不包含仿真数据。换了一台机器或换了一个数据文件,set文件照样能用,但你要确认数据内容与set文件的预设是对应的。比如set文件里x轴范围设的是0到1V,结果用它画0到100V的数据,画出来就会空一片。这种情况别慌,重新调整绘图范围就行。
4.5 安装后运行不了:先确认license和环境变量
Silvaco软件安装本身不算复杂,但license相关的坑特别多。最常见的是环境变量指向错误或license文件过期导致的“license not found”错误。Linux环境下还要注意动态链接库路径、系统架构兼容性等问题。我见过有人装了新版本软件后旧脚本全部跑不了,最后发现是系统更新把某个库的版本改了,软件直接崩掉。
入坑之前建议先看官方文档和官方论坛,很多问题只是配置问题,不是软件bug。如果你想快速验证软件是不是好的,跑一下官方自带的例子(安装目录的examples文件夹里有一大批现成的仿真示例),比你自己瞎写一个输入文件要靠谱得多。
5. 从PN结到真实器件:下一步该怎么走
把PN结二极管完整跑通一遍之后,你已经掌握了Atlas仿真的基本操作链路:画网格、定义区域和电极、设置掺杂、选择物理模型、做偏置扫描、提取参数。这套流程可以平移到绝大多数半导体器件的仿真上。
接下来可以尝试横向扩展:
- 做MOSFET仿真,增加栅氧化层区域,观察阈值电压与沟道掺杂的关系
- 做LDMOS或功率二极管,重点研究击穿特性和电场分布
- 用Athena做完整的工艺仿真流程(氧化、注入、退火),再把掺杂分布导入Atlas做电学仿真
- 结合Silvaco自带的可变参数扫描工具,批量对比不同工艺条件下的器件性能
从我的经验来看,Atlas的学习曲线说陡也陡,说不陡也不陡。最痛苦的是前两周,各种语法报错、不收敛、网格问题会把你折磨得体无完肤。但只要完整跑通几个典型结构,积累了处理报错的经验,后面做新器件就流畅多了。遇到问题先拆解是结构问题、模型问题还是数值问题,再针对性排查,比到处乱试效率高得多。
最后分享一个实用习惯:每个仿真项目建一个目录,把输入文件、日志文件、结构文件、结果图片整理好,命名用日期加器件类型做前缀。这个习惯救过我很多次,尤其是长时间跑扫描参数、产生几十上百个结果文件的时候,清晰的目录结构就是你的第二大脑。