Files
tcad-devsim_triac/TECHNICAL_MANIFEST.md

7.8 KiB
Raw Permalink Blame History

TECHNICAL_MANIFEST.md (技術核心清單)

本文件詳述基於開源半導體元件模擬軟體 DEVSIM 進行增量開發與本地擴充的技術棧、公開 API 與模組相依性關係。


1. 本地擴充技術棧 (Extensions Tech Stack)

基於 demsim (DEVSIM) 版本/分支

  • DEVSIM 版本v2.0 (基於 devsim-dev 子目錄,主分支 HEAD Commit09a1e744e640ba028458bb5812898fd53527a7fb)
  • 本地 C++ 後端修改
    • 修改 EquationHolder.hhEquationHolder.ccEquationCommands.cc,在 devsim.equation(...) 的 Python API 介面中新增並橋接了 min_error 參數,以便在解連續方程式與電位方程式時,動態覆寫底層 C++ 引擎中硬編碼的收斂下限(預設值為 1.0e-10)。

本地新增核心依賴套件

  • devsim:本地重新編譯並打包為獨立 Wheel (devsim-2.10.0-cp39-abi3-linux_x86_64.whl) 的客製化版本。
  • gmsh (v4.15.2):用於 2D/3D 元件基礎網格剖分與自適應細化的 C++ 核心橋接 API。
  • scipy (v1.17.1):於動態細化插值模組中,透過 scipy.interpolate.griddata 進行舊網格變數(Potential, Electrons, Holes)至新細化網格的空間插值。
  • numpy (v2.4.6):用於執行高效能解析摻雜分佈 (PCAD) 的矩陣及陣列運算。
  • matplotlib (v3.10.9):用於輸出 IV 曲線、二維電位分佈與載流子分佈的視覺化圖表。
  • mkl / tbb / intel-openmp (2026.0.0):提供底層 PARDISO 平行直接稀疏矩陣求解器(OMP_NUM_THREADS = 4)。

2. 本地擴充公共介面 (Public API Manifest)

模組一:解析摻雜配置 (Process-Step Doping / PCAD)

檔案路徑:physics/pcad_physics.py

  • 公共介面
    • get_implant_params(dopant: str, energy_kev: float) -> Tuple[float, float]:從 IMPLANT_DBBoron, Phosphorus, Arsenic)中,根據注入能量(keV)插值計算離子注入投影射程 R_p 與標準差 $\Delta R_p$(單位:cm)。
    • get_diffusion_coefficient(dopant: str, temp_c: float) -> float:根據 Arrhenius 公式與 DIFFUSION_DB 參數,計算該雜質在溫度 temp_c(°C)下的熱擴散係數 $D$(單位:$\text{cm}^2/\text{s}$)。

檔案路徑:devices/LDMOS/device_pcad_config.py & devices/Triac_rp/device_pcad_config.py

  • 公共介面
    • resolve_steps() -> List[dict]:解析製程步驟清單(包含離子注入劑量、能量、熱退火時間、溫度與遮罩範圍),計算出各步驟對應的 Gaussian 分佈峰值濃度(peak)、垂直標準差(vdiff,包含離子注入與熱擴散累計效應)與水平標準差(hdiff,考量側向擴散比例)。
    • apply_pcad_doping_2d(device: str, region: str) -> None:在 DEVSIM 中建立各製程步驟的解析掺雜 node_model(利用 erf/erfc 表達式),並合成 Silicon 區域中的 DonorsAcceptorsNetDopingLogNetDoping 模型。
    • get_pcad_doping_val_2d(x: np.ndarray, y: np.ndarray) -> np.ndarray:在 NumPy 陣列層面上,解析並計算二維空間座標點 (x, y) 處的淨摻雜濃度值(用於背景網格生成)。

模組二:物理模型建構 (Physics Model Generator)

檔案路徑:physics/new_physics.py

  • 公共介面
    • CreateAroraMobilityLF(device: str, region: str) -> None:建立溫度相依的 Arora 低電場遷移率模型。
    • CreateHFMobility(device: str, region: str, mu_n: str, mu_p: str, Jn: str, Jp: str) -> None:建立飽和漂移速度高電場遷移率模型。
    • CreateAvalancheGeneration(device: str, region: str, Jn: str, Jp: str) -> str:依據 Chynoweth 公式建立二維雪崩電離電阻邊緣模型 AvalancheGeneration 及其偏微分。
    • CreateBTBTGeneration(device: str, region: str) -> str:依據 Hurkx 帶帶穿隧公式建立 BTBTGeneration 及其偏微分。

模組三:自適應背景網格生成 (Mesh Generation)

檔案路徑:generate_mesh_2d.py

  • 公共介面
    • create_ldmos_mesh(mesh_out: str, bgmesh_pos: str) -> None:建立 LDMOS 2D Gmsh 網格,定義閘極、閘氧化層、側邊包封等結構。
    • create_triac_mesh(y_box_max: float, y_medium_max: float, mesh_out: str, bgmesh_pos: str) -> None:建立 TRIAC 2D Gmsh 網格,定義其特定的 via 開孔結構與接觸電極。
    • create_mesh(...):入口函式,根據幾何設定與 background mesh (bgmesh_pos) 進行 Gmsh 基礎網格生成。

檔案路徑:generate_analytical_bgmesh.py

  • 公共介面
    • generate_analytical_bgmesh() -> None:讀取基礎粗網格,利用摻雜梯度有限差分值計算局部網格長度 lc_val,於 PN 接面與 LDMOS 表面通道(考慮 FOX Recession)處進行高密度重劃,並將結果輸出為 Gmsh 背景網格大小場定義檔 (device_bgmesh.pos)。

模組四:動態網格重劃與解耦求解 (Dynamic Refinement & Decoupled Solver)

檔案路徑:dynamic_refine.py

  • 公共介面
    • setup_physics_for_device(device: str, is_avalanche_enabled: bool, is_btbt_enabled: bool) -> None:在新網格元件上初始化所有物理常數、溶液變數、遷移率、連續方程式及可選的雪崩/BTBT 生成率邊緣模型。
    • solve_decoupled_carriers(device_name: str, opts: dict) -> None:在網格細化後,先關閉方程式間的耦合,單獨求解載子方程以穩定極限空乏區的初值。
    • enforce_contact_boundary_conditions(device_name: str) -> None:插值後,重新強制對歐姆接觸介面施加電中性邊界條件。
    • refine_and_interpolate(device_old: str, v_bias: float, is_avalanche_enabled: bool, is_btbt_enabled: bool, time_log: str, out_dir: str) -> Tuple[str, dict]:高壓動態網格重劃核心。載入細網格,將舊網格的電勢與載子濃度(在 log-space/linear-space 下)插值到新網格;接著執行 Stage 1 log_damp 解耦鬆弛與 Stage 2 positive 載子耦合求解,完成收斂重建並返回新元件名稱。

模組五:MOSFET 特性測試與多溫度調度 (MOSFET Characterization & Sweep)

檔案路徑:mos_sweep.py

  • 公共介面
    • ramp_gate_bias(device: str, target_vgs: float) -> None:將閘極偏壓 V_{gs} 從 0V 自適應階梯式升壓至目標電壓。
    • sweep_vds(device: str, vgs: float, vds_max: float) -> None:在固定 V_{gs} 下自適應掃描 V_{ds} 並儲存 Ids-Vds 數據。

檔案路徑:mos_transfer_single_temp.py

  • 公共介面
    • robust_solve(max_iters: int) -> None:多溫度轉移特性掃描的雙階段收斂核心。首階段採用阻尼電位更新 log_damp,次階段在收斂邊界內採用 positive 強制正載流子更新,並使用本地 C++ 的 min_error 改進低溫($-40^\circ\text{C}$)空乏區的數值剛性。

3. 模組相依性 (Dependency Graph)

  • 製程摻雜分析與網格生成相依
    • generate_analytical_bgmesh.py -> 依賴 devices/[dev]/device_pcad_config.py -> 依賴 physics/pcad_physics.py
    • generate_mesh_2d.py -> 讀取 device_config.pydevice_bgmesh.pos,呼叫 gmsh APIs。
  • 動態網格細化與求解相依
    • dynamic_refine.py -> 依賴 physics/new_physics.pygenerate_mesh_2d.py;調用 scipy.interpolate 進行網格插值;控制 devsim 的元件變數重建。
    • resume_run.py (高壓掃描接續) -> 依賴 dynamic_refine.pyrefine_and_interpolate 方法以在偏壓增量過程中執行重劃;載入 pickle Checkpoint 檔案。
  • 多溫度轉移特性掃描相依
    • mos_transfer_temp_sweep.py -> 以子進程(Subprocess)模式調用 mos_transfer_single_temp.py,以保證 DEVSIM 在單次執行完畢後釋放記憶體,避免 Intel MKL 記憶體洩漏。
    • mos_transfer_single_temp.py -> 依賴 physics/new_physics.py,調用 devsim 客製化 C++ 版本的 min_error 收斂限控制。