化:從擊穿電壓偏差40V到精度收斂)
上周我把一個平面型功率二極管的Silvaco仿真結果和實測數據擺在一起反向擊穿電壓整整差了四十多伏。我一開始以為是雪崩模型參數沒選對srh、auger、impact selb換了又換收斂曲線倒是挺漂亮擊穿電壓紋絲不動。最后實在沒轍打開tonyplot把網格顯示勾上才終于看明白問題冶金結附近的網格線間距拉得太大峰值電場被數值插值直接“抹平”雪崩擊穿自然被推遲到了更高的電壓。那次之后我做Silvaco二極管仿真網格優(yōu)化時第一件事永遠是想清楚哪里該密、哪里該稀而不是急著把x.mesh、y.mesh鋪滿整個結構。這篇就專門聊聊二極管仿真網格的參數設置思路和實操技巧適合剛接觸Silvaco TCAD的學生也適合正在調器件結構、總感覺仿真結果“差口氣”的工程師。1. 網格密度決定仿真精度的底層邏輯欠密區(qū)域怎么毀掉擊穿電壓1.1 一次反向擊穿電壓差40V的排查問題不在模型在網格先說我那個十微米寬、結深零點五微米的平面功率二極管。器件結構很簡單P陽極區(qū)、N-漂移區(qū)、N襯底摻雜分布也是教科書級別的。按理說這種結構在Silvaco里跑擊穿電壓不應該出問題但結果就是和實測對不上。排查過程一開始完全是朝著錯誤方向走的。我懷疑是不是雪崩模型參數里某個系數設得不對于是把models語句里的impact selb參數來回調毫無變化又懷疑網格是不是太密導致收斂到偽解試著整體粗化了一倍網格結果擊穿電壓反而更離譜。直到某次我隨手把網格顯示打開才注意到一個問題在結深0.5微米附近y方向網格間距只有0.05微米左右而耗盡區(qū)在這個位置的電場梯度變化極其劇烈整個空間電荷區(qū)里滿打滿算只有三層網格。三層網格是什么概念在Silvaco的有限體積法框架下電場和載流子濃度都是通過網格節(jié)點之間的插值來逼近的。網格太少相當于用兩點連直線去描述一條指數衰減曲線峰值被平均掉、陡峭被抹平。雪崩擊穿依賴的是峰值電場和碰撞電離率的空間積分峰值一旦被歪曲擊穿電壓自然跑偏。后來我把冶金結附近的網格間距從0.05微米一步步壓到0.002微米擊穿電壓從虛高的182V回落到實測的141V附近誤差直接縮到3%以內。這給我留下的印象太深了——二極管仿真里網格永遠不是背景板它本身就是計算精度的一部分。1.2 有限體積法對網格的一般要求物理量梯度決定網格步長Silvaco ATLAS求解的是泊松方程加上電子、空穴連續(xù)性方程這組偏微分方程組。數值方法上它先把連續(xù)的器件區(qū)域離散成一個個四邊形網格單元然后把偏微分方程在每個網格節(jié)點附近轉成代數方程再用Newton迭代或Gummel迭代來求解。這套方法的精度上限并不取決于你的物理模型有多高級而取決于你給求解器提供的物理量分辨率。說白了網格就是仿真世界的“像素”物理量在網格節(jié)點之間有值但在網格內部是不知道的。求解器默認用線性插值去近似網格點之間的物理量分布如果某個區(qū)域里電場或載流子濃度變化劇烈而網格太少插值出來的結果一定會失真。我習慣拿拍照做類比同一個場景一千像素和五千萬像素拍出來的細節(jié)完全不是一個層級。PN結耗盡區(qū)里空間電荷密度、電場強度、載流子濃度在亞微米尺度內可能變化好幾個數量級你就是把整個器件的網格都加密到0.1微米如果結區(qū)那幾層網格不夠密結果照樣是糊的。更關鍵的一點是Silvaco的網格間距需要遠小于物理量發(fā)生顯著變化的特征長度。對二極管來說這個特征長度由摻雜濃度梯度和耗盡區(qū)寬度共同決定實際中往往是幾十納米到幾百納米的量級。很多初學者按照“整個結構撒一遍1微米網格”的思路去做反向特性勉強能看但正向壓降、擊穿電壓這些對梯度敏感的參數就會明顯失真。1.3 二極管里需要重點加密的三類區(qū)域既然網格分辨率不是均勻撒的那就要搞清楚二極管仿真中哪幾個區(qū)域才是決定精度的“關鍵戰(zhàn)場”。以我做過的高壓整流二極管、PiN二極管、TVS結構為例下面這幾個位置是網格優(yōu)化時必須優(yōu)先照顧的。第一冶金結和它兩側的耗盡區(qū)。這里是空間電荷密度和電場梯度最大的地方也是雪崩擊穿的發(fā)生地。雪崩擊穿電壓對峰值電場的依賴是非線性的網格哪怕只是把峰值拉低百分之幾擊穿電壓都可能偏差十幾伏。所以冶金結附近必須用最密的網格且結兩側都要加密不只是結線本身那一個位置。第二陽極和陰極接觸面附近的重摻雜濃度過渡區(qū)。這個區(qū)域載流子復合率、注入效率都很高直接決定正向壓降和接觸電阻的仿真精度。雖然這里的網格不需要像結區(qū)那樣夸張但如果完全放任不管正向IV曲線的低壓段會出現明顯的非線性畸變。第三反偏時耗盡區(qū)可能擴展到的邊界位置。對高壓功率二極管來說反偏電壓升高時耗盡區(qū)會向低摻雜漂移區(qū)深處不斷擴展。很多人以為只要結區(qū)加密就夠了結果耗盡區(qū)邊緣跑到稀疏網格區(qū)電場峰值在數值上被“截斷”擊穿點位置也跟著漂移。網格控制線必須提前鋪到耗盡區(qū)可能到達的范圍而不是只圍著自己的舒適區(qū)轉。2. Silvaco網格構建參數逐個拆解從space.mult到ratio2.1 最小的網格框架x.mesh和y.mesh到底在做什么Silvaco ATLAS里構建網格的核心語句就是x.mesh和y.mesh兩條。很多人第一次接觸時會以為寫一個y.mesh就夠因為二極管結構看起來是“一維”的——摻雜只沿深度方向變化。但實際上Silvaco的數值求解器要求網格必須是完整的二維四邊形網格哪怕x方向只有兩個位置你也得把x方向的兩條網格線寫出來。少了x方向deckbuild會直接報錯連求解都進不去。先看一個最小可運行的網格框架go atlas mesh space.mult1.0 x.mesh location0 spacing0.5 x.mesh location10 spacing0.5 y.mesh location0 spacing0.05 y.mesh location0.5 spacing0.002 ratio1.2 y.mesh location2.0 spacing0.05 ratio1.4 y.mesh location6.5 spacing0.3這個例子里x方向在0和10微米各放一條網格線間距0.5微米表示器件寬度10微米y方向從表面0微米開始到6.5微米結束中間在0.5微米處用0.002微米的間距加密。location是網格線的絕對位置spacing是該位置附近的網格間距ratio則是從這條網格線向外延伸時網格間距的放大倍數。需要理解的一點是x.mesh和y.mesh并不是“畫格子”而是定義每一根網格線的位置和該處的局部間距。求解器拿到這些控制點之后會自動在相鄰網格線之間生成過渡網格最終的網格疏密分布就是由這些控制點的spacing和ratio共同決定的。2.2 spacing、location、ratio的關系與配合寫法這三個參數里spacing是局部精度的直接控制旋鈕location是加密位置的錨點ratio是控制網格從密到疏過渡方式的“坡度”。舉個例子在0.5微米處的冶金結上我設置spacing0.002微米ratio1.15。那么離開這條網格線后下一層網格間距大概就是0.002乘以1.15等于0.0023微米再下一層是0.00264微米以此類推按等比數列逐步放大。大約十幾層之后間距就能從0.002微米平滑過渡到亞微米量級而不至于在某一個位置突然跳變。這里有一個經驗區(qū)間值得強調ratio一般取1.1到1.5比較穩(wěn)妥。比例太大會導致網格間距增長過快過渡區(qū)域出現“斷層”數值上容易產生非物理的震蕩比例太小則網格要經過很多層才能變疏白白浪費大量網格點求解變慢。我自己的習慣是在結區(qū)附近用1.1到1.2在離開敏感區(qū)后的過渡帶用1.3到1.5。還有一個容易忽略的細節(jié)location可以配合注釋在code里標注“這一條是結區(qū)邊界”“這一條是空間電荷區(qū)擴展邊界”后來回頭調試時能省不少時間。TCAD仿真一旦搞起來deck文件里網格語句可能十幾條沒有標注簡直是災難。2.3 一維PN結也要寫完整的二維網格框架剛才說過Silvaco不允許只有一維網格存在。很多初學者第一次寫二極管仿真下意識只在y方向寫了密密麻麻的網格線x方向一個location都沒有結果跑起來直接報“missing mesh line in x direction”一類的錯誤。正確的做法是哪怕你做的確實是深度方向的一維PN結x方向也要定義至少兩條網格線間距隨意但別太小。x方向兩條網格線之間的區(qū)域Silvaco會把它當成一個在x方向無限延展的平板結構來算物理上就是平行于表面的二極管家底這完全沒問題。但如果你仿真的是帶結終端保護環(huán)、場限環(huán)、或者臺面刻蝕結構的功率二極管情況就不一樣了。這類器件的電場分布是真正的二維分布終端區(qū)域在x方向上有明顯變化這時x方向的網格也要像y方向一樣認真控制。尤其是在保護環(huán)和主結之間的區(qū)域電場線彎曲得很厲害x方向網格不能放得太粗否則終端擊穿電壓就是仿給鬼看的。3. 二極管網格參數配置實操一套可直接套用的結構方案3.1 典型PN功率二極管結構參數與網格控制線布局理論扯了這么多直接上一套我能復現的實操配置。下面這個例子是常見的高壓PN二極管結構P陽極區(qū)0.5微米峰值摻雜1e19每立方厘米N-漂移區(qū)5微米摻雜1e15每立方厘米N襯底區(qū)1微米摻雜1e18每立方厘米x方向寬度10微米。網格控制線的布局邏輯是這樣的表面接觸區(qū)和中段漂移區(qū)用寬松間距冶金結兩側用最密的網格離開結區(qū)后按比例逐步放大襯底與漂移區(qū)界面再補一層加密。完整的網格定義段如下# 全局網格間距乘數0.8表示整體加密20% mesh space.mult0.8 x.mesh location0 spacing0.5 x.mesh location10 spacing0.5 # y方向表面接觸區(qū) y.mesh location0 spacing0.02 # 結區(qū)上側漸變加密0.45微米處開始 y.mesh location0.45 spacing0.002 ratio1.15 # 冶金結精確位置0.5微米最密網格 y.mesh location0.5 spacing0.001 ratio1.1 # 結區(qū)下側漸疏0.6微米處開始 y.mesh location0.6 spacing0.005 ratio1.2 # 空間電荷區(qū)內部 y.mesh location1.2 spacing0.02 ratio1.35 # 漂移區(qū)中段 y.mesh location2.5 spacing0.08 ratio1.4 # 襯底界面附近 y.mesh location5.9 spacing0.2 ratio1.5 y.mesh location6.5 spacing0.1為什么要在0.45微米和0.6微米各放一條控制線而不是只在0.5微米放一條因為PN結兩側的電場分布都不均勻單靠結線上一個密點向上和向下的網格過渡會太快達不到需要的分辨率。兩條控制線相當于在結區(qū)兩側各建了一個“加密緩沖區(qū)”讓網格間距從最密值平滑地爬升到正常水平。這套網格跑下來整個結構大約會產生數千個網格點。對于做幾微米到幾十微米深度的二極管完全夠用單次擊穿求解在桌面工作站上也就是幾十秒的事。3.2 從工藝仿真導入網格后的補刀REFINEBOX局域加密很多二極管仿真并不是在ATLAS里直接搭結構而是先用ATHENA跑完全部工藝步驟再通過結構文件導到ATLAS做電學仿真。工藝仿真的網格會根據氧化、擴散、注入這些步驟自動調整但它的網格分布是以“工藝熱歷史”為核心邏輯的和電學仿真的需求不完全一致。這時候REFINEBOX語句就能派上用場。它允許你在指定的矩形區(qū)域內重新按步長生成網格非常適合在導入網格之后做定點補密。比如上面那個結構如果導入后發(fā)現結區(qū)網格還是不夠密可以在ATLAS里追加一條refinebox x.min0 x.max10 y.min0 y.max0.65 x.step0.5 y.step0.002這條語句的含義是在x方向0到10微米、y方向0到0.65微米的盒形區(qū)域內x方向步長0.5微米y方向步長0.002微米重新生成網格。它不會動區(qū)域外已有的網格因此非常適合“局部打補丁”。使用時唯一要注意的是step不要一上來就給太小。0.002微米在0.65微米深度內意味著三百多層網格如果區(qū)域還很大網格點數量會瞬間爆炸求解時間直接從秒級跳到小時級。我一般先把step給到預估值的兩三倍在tonyplot里看效果不夠再逐步收緊。3.3 用space.mult做多檔掃描快速找敏感區(qū)域space.mult是網格定義段開頭那個全局參數作用是整體縮放所有網格間距。space.mult小于1時網格變密大于1時網格變粗等于1時保持原位。這個參數是網格優(yōu)化過程中性價比最高的工具沒有之一。當你在掃描不同的摻雜濃度、漂移區(qū)厚度、結深時不需要為每個候選結構手工調整十幾條y.mesh語句只要把space.mult從1.0換成0.7或者0.5就能在保持網格分布形態(tài)的前提下整體加密。我自己的操作習慣是先以space.mult1.0粗掃一批候選結構選出兩三個性能指標接近目標的結構再用space.mult0.7和0.5分別精算對比擊穿電壓、正向導通壓降等關鍵參數的變化趨勢。如果0.7和0.5的結果相差很小說明網格密度已經夠用了如果差距還很大那就要回到單個結構的網格布局上做定點加密而不是繼續(xù)依賴全局參數。4. 網格收斂性測試與自適應網格怎么判斷網格真的夠了4.1 Grid Test的標準流程三組密度、兩個指標、一次結論網格優(yōu)化的最終目的是在誤差可接受的前提下盡量少耗時。怎么判斷誤差可接受唯一靠譜的辦法就是做網格收斂性測試也就是社區(qū)里常說的Grid Test。標準操作分三步。第一步保持器件結構和物理模型完全不變用同樣的space.mult跑三組仿真推薦1.0、0.7、0.5。第二步記錄每個方案下的關鍵電學指標對二極管來說主要看反向擊穿電壓和正向導通的壓降也可以加一個零偏結電容作為輔助參考。第三步比較后兩組結果。如果space.mult0.7和0.5之間的指標差異小于1%就認為網格已經收斂space.mult0.7那一檔可以直接作為最終配置。我拿一次實際的掃參記錄舉個例子具體數值因器件而異但趨勢判斷方法是通用的網格方案space.mult網格點數反向擊穿電壓正向導通壓降單點求解時間方案A1.0約2600158.3V0.67V約30s方案B0.7約5200162.6V0.64V約2min方案C0.5約10200163.1V0.63V約9min方案B和方案C的擊穿電壓只差0.3%正向壓降差約1.5%這時就可以判斷網格已經進入收斂平臺方案B足以作為精度可靠的配置。如果方案A到方案B的變化很大而方案B到方案C又收斂了說明默認網格確實不夠解決方案就是B檔。4.2 自適應網格MGOALS的正確打開方式與適用邊界Silvaco還提供了一類自適應網格手段核心是METHOD語句里加ADAPT參數再用MGOALS語句定義誤差目標。典型寫法如下method adapt newton mgoals n.points8000 curr.error1e-3它的工作邏輯是在迭代求解過程中不斷評估局部物理量的誤差如果發(fā)現某個區(qū)域誤差超出MGOALS設定的目標就自動插入新的網格點然后再接著往收斂方向求解。從概念上講這東西很“智能”等于讓求解器自己決定哪里該加密。但我的實際體驗是自適應網格在二極管仿真里不能無腦用。它適合的場景是做單點精修比如已經用手動網格跑通了一個器件想看某個偏置點附近峰值電場到底是多少可以用adaptive模式局部細化驗證。它不適合的場景是全偏置IV掃描因為每個偏置點都可能觸發(fā)不同的自適應細化網格點數量和分布隨偏置改變最終IV曲線會出現不少細小的臺階反而不利于結果分析。另外自適應網格會顯著放大求解時間。MGOALS里的n.points設得太大求解器會為了滿足誤差目標而瘋狂加網格點有時候一個偏置點的收斂要等十分鐘還不如靜下心來把手動網格的關鍵位置調好。我的建議是手動網格永遠是主力MGOALS只是補充校驗手段。4.3 網格點數、迭代次數與求解時間的實際賬本很多人對網格數量和求解時間之間的關系沒有概念以為網格多了就是慢一點而已。實際上對于ATLAS這類求解非線性偏微分方程組的程序網格點數N和求解時間不是線性關系而是接近O(N^1.5)到O(N^2)的指數放大。原因并不復雜。Newton迭代過程中每個迭代步都要組裝和求解一個規(guī)模與網格點數相關的Jacobian矩陣矩陣規(guī)模大了單次求解的時間會超線性增長。與此同時網格多了之后求解器為了保持數值穩(wěn)定性往往需要更多迭代步數才能收斂。兩個因素疊加在一起就會出現“網格翻一倍時間翻五倍”的情況。所以網格優(yōu)化的本質不是無限加密而是把有限的網格預算投放到物理量梯度最劇烈的地方。同樣是一萬個網格點勻著撒滿整個器件和集中在結區(qū)加耗盡區(qū)邊緣計算出來的擊穿電壓可能差出百分之十幾。這也是我反復強調要手工布置網格控制線、而不是依賴全局加密的原因。5. 我被Silvaco網格坑過的幾件事與最終建議5.1 網格線與冶金結錯位摻雜分布出現鋸齒這是我最開始玩Silvaco時踩過的一個隱蔽坑。結構定義里我把P區(qū)和N-區(qū)的region邊界設在了y0.5微米摻雜語句也對應做了定義但y.mesh網格線的控制點卻放在了0.45和0.55微米沒有一條正好落在0.5微米上。結果就是冶金結這個摻雜突變面沒有和網格線對齊而是斜穿了一排網格單元。在數值模型里摻雜分布被離散成了跨網格的插值結面變成了一個“鋸齒狀”的過渡帶。仿出來的電場分布曲線在結附近出現周期性抖動擊穿特性的平滑度很不對勁。解決辦法說穿了很簡單網格控制線的location必須和region邊界、摻雜突變面的位置嚴格對齊。建議在搭結構時先把region用變量或注釋標清楚再回頭寫y.mesh確保結面處一定有一條網格線。凡是涉及材料界面、摻雜突變、電極接觸邊界網格線都必須老老實實落在邊界上這是Silvaco網格優(yōu)化的第一紀律。5.2 反向耗盡區(qū)擴展到稀疏網格區(qū)擊穿點漂移另一個坑出現在做高壓二極管的時候。結構是P陽極然后是低摻雜的N-漂移區(qū)再往下是N陰極。我一開始按照經驗只在結區(qū)附近加密了網格N-漂移區(qū)中段和靠近N界面的地方網格都放得很粗。仿真時發(fā)現一個很奇怪的現象反向擊穿位置不在PN結附近反而出現在了N區(qū)深處而且離N襯底界面越近越嚴重。后來把耗盡區(qū)寬度一算才明白這個二極管在接近擊穿電壓時耗盡區(qū)已經擴展到了漂移區(qū)中后段而那一帶的網格間距大概有0.08微米電場梯度完全無法被準確分辨峰值被強行拉到了網格相對密一點的襯底邊界。從那以后我做高壓二極管網格布局時第一件先做的事情就是估算反偏條件下耗盡區(qū)的最大擴展范圍然后在該范圍內部署數條漸變的網格控制線。哪怕估算結果有點偏差也要在可能結東的區(qū)域留下幾層中等密度的網格作為緩沖。對低摻雜漂移區(qū)100V附近的反偏耗盡區(qū)可能擴展到十幾微米網格控制線必須跟著鋪過去而不是只圍著結區(qū)打轉。5.3 判斷網格方案是否合理的三板斧說了這么多踩坑經歷最后總結三個我每次做完網格都過一遍的檢查習慣。第一板斧在tonyplot里把網格顯示打開和摻雜分布曲線疊在一起看。重點網格加密區(qū)是否覆蓋了摻雜梯度大的區(qū)域、結面是否被網格線“騎”過、有沒有明顯的網格間距跳變。第二板斧把電場分布和碰撞電離率分布畫出來看峰值位置是否落在加密區(qū)內部。如果電場峰值落在網格稀疏區(qū)那不管IV曲線收斂成什么樣結論都不可信。第三板斧也是最快的驗證方法跑兩組不同space.mult的關鍵指標對比。如果1.0和0.7的結果差異巨大那沒有任何理由相信1.0的結果是對的如果0.7和0.5差異很小則說明網格深度已經夠用。這三步走完一版網格方案基本就能讓人放心了。前陣子一個朋友問我Silvaco和另一款TCAD工具哪個好。我回他說工具都有各自的優(yōu)勢但不管你用哪款網格問題都是繞不過去的換工具解決不了網格沒布置好的問題。就說Silvaco的二極管仿真網格參數設置看著不起眼實際卻是決定結果可信度的那根定海神針。把結區(qū)加密、把耗盡區(qū)邊界鋪滿、用space.mult做收斂測試這套方法論用熟之后你會發(fā)現自己對TCAD仿真的理解又深了一層。