Slivaco TCAD 小白系列- 1. 從ATLAS開始

danieldaniel0888
14 min readJun 19, 2021

--

參考資源:
第二三集、Silvaco TCAD ATLAS Tutorial by Engineering technology and society
積體電路工程_Silvaco (Atlas) YouTube

基本操作或語法
Ctrl+滾輪 可以放大字體大小
井字號(#)後面是註解內容,須自己獨立一行

好啦,開始我們新的一課。首先打開Deckbuild:

Deckbuild for Slivao TCAD 2019

我們這回的重點會在如何使用Atlas模擬器進行模擬,我們會在左上角的窗口寫上代碼,而要使用Atlas模擬核心要在代碼的開頭寫上「go atlas」、結尾寫上「quit」,例如:

go atlas
........
quit

有時運算量過大,我們可以調整模擬時使用的CPU數,改成寫:
「go atlas simflags=”-P 2"」,預設是P 1。代表預設使用一個CPU。

以下是一個模擬元件運作的典型過程:

Screenshot from https://youtu.be/JwHRpbW61GQ?t=3116

主要是建立元件結構→選取物理模型→選取解他的方式→設定初始條件與解之→分析結果 共五大步驟。每一個步驟都是一個”statement”,statement可以分成command跟parameter兩部分,前者是我接下來的行為大概要幹嘛、後者是確切要幹嘛、或者說此行為的細節。

例如:「開火 火侯=小火、時間=10分鐘」之類的,開火就是command,火侯=小火、時間=10分鐘就是parameter。

要把每個可能發生的行為確切分類到上述的五個步驟裡實屬不易,所以這五分法也只是大概。在學習到更後面的內容時很可能會面臨不知道這個statement要放在哪個類別,例如要把「走出或走入廚房」歸納到煮菜的任何一個步驟都不太對,但他確實就是一個statement;反之在上述流程中列出的statement也不見得一定會用到。另外,敘述一般都是一個字的單詞,遇到兩個以上組成的單詞往往會用句點連在一起,例如e.field、j.electron

最後,為管理代碼方便,建議打開DeckBuild的行數顯示:View>Show Line Number。在2014版沒這功能。

以下先做一個概略性的簡單介紹。

註記:由於每個部份內容深淺不一,很容易讀著讀著讀到走神,極度建議打開雙頁面,一個頁面是本回的內容、另一個頁面是下一回的程式碼範例,透過比較左右頁面、檢視每行程式碼大概的意義,不然光看解說學習效果極差。

一、Structure Specification

建立結構的過程與主要編碼會透過Deck Build程式執行。

1-1. specifying the initial mesh:先給予初始預設的mesh大小,數字可以比1大或小。

語法:MESH space.mult=數字

Mesh翻成中文是網目,可以理解成一個最小積木的大小。要堆砌出一個元件,我們可以用不同大小的積木來堆砌(就像曲線可以想成是直線連成的、面積可以用長方形逼近等等),定義Mesh的大小、位置則可以決定元件的形狀。

在打Code時,通常建議預先繪製好元件構造圖,才方便寫下元件的座標為何

Screenshot From https://www.youtube.com/watch?v=o9S7XiU80p4

為作區別,主類別我們會用全型大寫做標記,實際coding時打小寫也可以。
在成功運行過某個結構後,如果有存成.str檔(後面會說如何存),則可以寫「MESH init infile=檔名.str」或「MESH inf=檔名.str」直接讀取之前成功跑過的結構,不用重打結構。

(小抱怨,或許是Medium為保持版面乾淨,只允許單一顏色,但這樣實在不方便...看倌辛苦了。慎重考慮之後變成影片形式的教學,這樣不用碼字也賞心悅目)

1–2. 定義x與y格線的位置:

語法:
x.mesh loc=線的x座標 spac=間格大小
y.mesh loc=線的x座標 spac=間格大小

如無特別說明,大小的單位都是um。
其語法的邏輯是,我把元件切成無數個小長方形,然後為每條線的x,y座標作定義,例如:

Example of division of a device

所以預先畫出元件長相是重要的。

2. 定義區域的材料:

格線可以畫出區域,而我們要給予區域的材料參數。最多可以有15000個區域。

語法:REGION number=第N號區域 區域參數 material=材料名稱

Example code

對於區域定義的邏輯是層層推疊的。舉例來說,假設我要畫一個結構如下:

some crossing pattern

那麼我會先聲明REGION num=1 material=silicon (黃色區域)
那麼畫布就會是整片黃。接著再定義一個白色躺下的矩形,例如:
REGION num=2 material=SiO2 x.min=2 x.max=8 y.min=4 y.max=6
接著是一個白色直立的矩形,便可以得到上面十字。

反之如果我先定義兩個矩形才寫下REGION num=3 material=silicon (黃色區域),則會讓整片都只有黃色。
或許有人好奇,可否跳過1–2直接定義區域呢?當然可以,但極度不建議,這對元件解析度重要性很高。主要是在一些接面等特殊地方我們會需要比較細緻的網格、其餘塊材處的網格不用那麼細小。而網格網定義需要靠1–2定義,這對電腦計算量影響很大。

3. 定義電極位置:

標示電極的位置,最多可以有50個電極。
其邏輯是可以選定一個區域或範圍作為電極,例如未指定時,我可以說REGION=X 讓第X號區域作為電極;或者標上X區域的某點就可以讓該區域都作為電極。
或者也可以自定義電極大小,X區域可能有200平方單位、但我只取某20平方單位當電極也可以。

語法:ELECTRODE name=電極名稱 位置參數

Example code

如果沒有寫出y座標,則會假定電極限遍布整個y方向。
我們也可以利用right, left, top, bottom來直接定義電極位置,或一端起點配合長度如例2。但良心建議,乖乖匡列邊界才實在。同時定義電極的位置可以不用有材料!

4. 定義摻雜:

指定某區域內的摻雜參數

語法:DOPING 分布類型 摻雜類別 位置參數

Example code

似乎可以不用照順序。分布類型可以是uniform, gaussian, complementary error function。其中gaussian分布的摻雜需要給出peak發生的位置。至於junc跟rat是甚麼不太清楚。

註、3D的例子:

如果是想建立3D結構,則會寫成:

Screenshot From https://www.youtube.com/watch?v=o9S7XiU80p4

可以以圓柱座標表示:

Screenshot From https://www.youtube.com/watch?v=o9S7XiU80p4

一般來說Mesh切越小越精準,但是會花時間。所以在特定地方求精準就好,例如:
1. 具有高電場的D與Channel的接點處
2. MOSFET閘極下方的垂直方向電場
3. BJT中E、B端接面、發生再結合之處
4. 雪崩崩潰發生處
5. HBT、HEMT的異質接面處
需要避免的點像不要利用鈍角三角形填充此區域(我們是用兩個三角形構成矩形作為最小單位)、避免mesh密度驟變等等。

二、Model Specification

定義好結構後,我們要進行調整元件參數。藉由以下步驟調整:

1. Contact:

系統預設的接面是歐姆接面。如果有給出金屬的功函數則會被當成Schottky接面,例如:

Screenshot my notes

2. Material

TCAD中會把材料分成絕緣體、半導體、導體。每個類別有不同參數可以調整,在半導體中可以調整的有:

Screenshot my notes

3. Models

物理模型的調整,主要包含五種類別的方向可以調整:

Carrier Statistics, Mobility, Recombination, Impact Ionization, Tunneling and Carrier Injection

舉例來說Carrier Statistics可以調整載子要滿足波茲曼還是費米狄拉克、或者說摻雜要不要全游離;Mobility可以選擇要套用哪個模型、Recombination可以選擇要套用SRH模型還是要多考慮表面再結合率等等,可參考ALTAS Manuel P.2–34~2–35。

語法:MODELS 使用的模型 print

Example code

此外還有些組合性模型例如只要輸入MODELS MOS print,就會自動引入CVT, SRH,和 FERMIDIRAC模型;輸入MODELS BIPOLAR print,就會自動引入CONMOB, FLDMOB, CONSRH, AUGER,和 BGN模型。
而語法最後的print則代表在模擬開始時餵入模型到架構中。

4. Interface

可簡稱成interf。用於定義介面結構,包含表面電荷(surface charge)、表面再結合速度(Surface recombination velocity)、熱發射理論(thermal emission)等,例如:

Example code

三、Numerical Method Section

依據使用模型組合的不同,TCAD最多需要解6個方程式。此時可以有三種方程式解法可以選:

GUMMEL(全部獨立解之)、BLOCK(部分聯立部分獨立)、NEWTON(全部聯立)

對應不同問題,往往會有不同適合的方法解之例如:

基本的漂移與擴散問題→Method gummel newton
考慮晶格加熱的漂移與擴散問題→Method block newton
能量平衡的計算→Method block newton
考慮晶格加熱的能量平衡計算→Method gummel block newton

此外,也可以設定要同時解電子和電洞的模擬結果(method carriers=2)、
只解電洞/電子的模擬結果(METHOD carriers=1 hole/electron)、
只解電位能分佈的模擬結果(METHOD carriers=0)

Example code

四、Solution Specification

最後,我們要決定輸出的內容和檔案類型,我們先看一下常見的檔案名稱。

檔名.in:DeckBuild界面的模擬輸入文件。
檔名.str:製程模擬或元件編輯器得到的元件結構。
檔名.log:元件模擬時存儲模擬結果。
檔名.set:Tonyplot顯示的設置。
檔名.dat:提取得到的數據。

0. Output:

系統在計算完後會預設輸出一些結果,我們可以額外增加要輸出那些圖形等,例如:

Example code

1. Log和Save:

LOG跟SAVE都是保存模擬參數的指令,不過LOG是儲存模擬文件的電性(檔案為.log)、SAVE則是儲存結構圖的語法(檔案為.str)。
LOG outfile 指令以下直到LOG off的內容都會被記錄到名稱「某某.log」裡面、同時也可以把結果匯出成csv檔,這對於舊版TCAD特別友善因為舊版貌似無法在數據圖上匯出成csv檔。之所以會有這個需求,是因為LOG檔有時程式執行完會不見。

語法:LOG outfile=名稱.log (master) csvfile=檔案.csv
語法:SAVE outfile=檔案名稱.str

通常想要結束記錄時會寫個”LOG off”,不過不寫或者直接接另一個「LOG outf=~」也是可以的。

此外,既然有outfile就有infile,其實infile我們也在前面提過,在上面的MESH處我們說過:「如果之後要載入之前跑的結果時,可以直接寫『MESH inf=檔名.str』」。就是一個infile的範例。

最後,還有另一個匯出資料的方法是在LOG程式碼的後面寫上例如:

Example code

2. Solve:

語法:SOLVE 內容

大致格式範例:
SOLVE init
SOLVE 內容
LOG outf=檔名.log
SOLVE 內容
LOG off
SAVE outf=檔名.str

最簡單的講法,SOLVE指令就是給予條件讓系統去求解,語法很多種。

Example Requirement

總之,建完結構後要清楚自己要解甚麼,具體的訴求可以是:

ID-VG圖,在VD=0.1V, VG=0~3V,VS=VB=0的條件下;
ID-VD圖,在VG=1,2,3V, VD=0~5V, VS=VB=0的條件下;
V_breakdown在VD=0、I=1~6 A的條件下。

我們也針對第一個例子來做實際程式碼的呈現。

第二個例子放在最底部說明。

乍看我們漏寫”VS=VB=0"的部分,但其實”SOLVE init”的語法就是讓所有電極都歸零的意思,所以不必擔心。此外倒數第二行最後面的「空格+\」是代表code太長,我要寫到下一行繼續的寫法。

這裡打個岔,需特別注意Save是存截至此行前的元件最後狀態,舉例來說,如果我在「Save abc.str」前面寫了「SOLVE Vgate=0 Vstep=0.05 Vfinal=3 name=gate」,則我會存的是VG=3 V的元件狀態而非VG=0或2.5V之類的。

五、Result Analysis

最後,跑完程式後如果有順利把結果存下來,則可以利用下面兩種語法進行資料提取,其中extract的語法較為困難,後者很常用也較簡單,就是打開畫好的電性圖或結構而已。

1. Extract:參考DeckBuild User’s Manual 第5.8節完整內容或參考第五回的內容。

2. TonyPlot:展示模擬的結果。

語法:
TONYPLOT 名稱.log
TONYPLOT 名稱.str

好,恭喜你堅持到現在。對於初學者來說可能腦袋已經斷路了,所以才在開頭建議開雙分頁學習,從實務中成長最快最有效率! 希望大家有學到東西

看完最後希望大家多多拍手留言分享,有錯誤歡迎指證,我是丹丹,我們下次見!

--

--