SPICEシミュレータとMOSFETモデルの協調動作

# SPICEシミュレータとBSIM4モデルの協調  
## ～なるべく詳しく解説します～

---

## 1. MOSFETモデル（BSIM4）が返す情報の全体像

### 1.1 端子電圧 → 物理パラメータ → 電流・容量・偏微分

BSIM4の実装コード（C/C++やVerilog-Aなど）では、**ユーザが指定するMOSFETパラメータ**（しきい値電圧や移動度係数など）と、**SPICEから与えられる端子電圧** $V_g, V_d, V_s, V_b$ を用いて、以下を計算します。

1. **チャネル電流 $I_d$**  
   - 短チャネル効果やチャネル長変調、サブスレッショルド領域などを考慮し、ドレイン電流がどう変化するかを式で評価。

2. **寄生容量・ダイオード容量**  
   - ゲート–ドレイン / ゲート–ソース / ゲート–バルクの各容量 $(C_{gd}, C_{gs}, C_{gb})$ や、ドレイン–バルク / ソース–バルクの接合容量 $(C_{db}, C_{sb})$ など。

3. **接合ダイオード電流**  
   - バルク–ドレイン、バルク–ソースの pn 接合電流を電圧依存で算出し、リーク電流や電圧依存容量を含む。

4. **偏微分係数（ヤコビアン要素）**  
   - $\frac{\partial I_d}{\partial V_g}, \frac{\partial I_d}{\partial V_d}$ などの微分値や、容量の電圧微分などを返し、ニュートン–ラプソン法・小信号解析に必要な情報を提供。

モデルは「端子電圧を与えるとこれらの値を返す」ことに専念し、回路全体を解くわけではありません。

---

## 2. SPICEシミュレータが行うこと

### 2.1 ネットリスト解析とインスタンス生成

1. **ネットリスト読込**  
   例：「M1 drain gate source bulk mymodel L=... W=...」のような記述から、デバイス名(M1)、各端子(drain, gate, source, bulk)の接続先ノードを割り当てる。  
   「mymodel」に紐づく BSIM4 パラメータファイル（.MODELステートメントや .lib）も同時に読み込み、MOSFET設計寸法 (L, W) などと合わせて「後で BSIM4 を呼び出すためのインスタンス情報」を構築。

2. **インスタンス構造の準備**  
   シミュレータ内部で “M1” に対応するインスタンスを生成し、BSIM4モデルに必要なパラメータ（たとえば 100以上ある細かな物理パラメータ群）をセットしておく。  
   **これら多数のパラメータは、後で MOSFETモデル（BSIM4）のプログラムが端子電圧と組み合わせて計算を行う際に使用され、チャネル電流や寄生容量、ダイオード電流などを導出するための基礎情報となる。**

---

### 2.2 MNA行列構造の用意

#### 2.2.1 Modified Nodal Analysis (MNA) の枠組み

1. **MNAの基本思想**  
   - 一般的なノード解析では「ノード電位を未知変数」とするが、電圧源などを扱うために Modified Nodal Analysis (MNA) が採用される。  
   - 結果、未知変数は「(ノード数 - 1) + (電圧源数)」になり、大きさ $(N-1+M)\times(N-1+M)$ の行列・ベクトルを用意する。

2. **ノード数 + 電圧源数が行列サイズを決める**  
   - ノードの数や電圧源の数によって、最終的な行列サイズが決定される。  
   - シミュレータはこの情報をもとにメモリを確保し、非線形解法（ニュートン–ラプソンなど）や AC 解析で利用する。

#### 2.2.2 MOSFETが絡む場合のプログラム設計

1. **MOSFET端子割り当て**  
   - ゲート / ドレイン / ソース / バルクという 4端子をどのノード番号に対応させるかを管理。  
   - 行列の (ゲート, ドレイン) 成分に容量を足し込む、といった形で、どの要素をどの位置に反映するかを決める。

2. **BSIM4対応：どの要素をどこに加算するか**  
   - BSIM4モデルが返す容量や電流を、MNA行列の適切な箇所に加算（スタンピング）する方法が、シミュレータ内部にプログラム済み。  
   - ユーザは “ゲート–ドレイン容量 C=○○” と書かなくても、BSIM4 呼び出しだけで自動反映される。

#### 2.2.3 メモリ構造と最適化

- **疎行列（Sparse Matrix）管理**  
  - 多くの素子がある大規模回路でも、ほとんどの行列要素は 0 になるため、疎行列技術を使う。  
  - 非ゼロ要素だけを管理することで、BSIM4モデルを大量に配置しても効率的にスタンピング・解法が可能。

---

## 3. 「呼び出し→行列更新→解く」の具体的ステップ

### 3.1 DC解析や過渡解析の1ステップの流れ

1. **シミュレータ：推定ノード電圧を用意**  
   - DC解析なら初期値を 0V や簡易な手法で推定、過渡解析なら前ステップの解を流用するなど。

2. **MOSFETモデル（BSIM4）を呼び出す**  
   - 端子電圧 $V_g, V_d, V_s, V_b$ とインスタンスに設定済みのパラメータを組み合わせて、$I_d, C_{gd}, \frac{\partial I_d}{\partial V_g}$ などを計算。

3. **行列スタンピング**  
   - 返ってきた **容量や電流** は、**メインの MNA 行列（あるいは過渡解析用のコンパニオンモデル行列）** にスタンピングされます。  
     - 電流源として KCL に加算する場合や、容量を導体 + 電流源に変換して対角・オフ対角要素に加算する場合など。  
   - 一方、**偏微分係数（ヤコビアン要素）** は、ニュートン–ラプソン法や小信号解析用の **ヤコビアン行列** にスタンピングされます。  
     - 非線形解法で電圧を反復的に更新するとき、この偏微分情報が解の収束を導くために必須となるわけです。

4. **連立方程式を解く**  
   - ニュートン–ラプソン法などでノード電圧を修正。収束しなければまたモデル呼び出し → スタンピング → 解く … を繰り返す。

### 3.2 AC解析の場合

- 動作点（DC解）が得られたあと、MOSFETモデルは $\frac{\partial I_d}{\partial V_g}, \frac{\partial I_d}{\partial V_d}$ や容量の微分値を返す。  
- シミュレータはそれらを線形行列に反映し、周波数ごとに解いてゲイン・位相・インピーダンスなど小信号特性を算出する。

---

## 4. なぜ MOSFETモデルは「等価回路図」を直接出力しないのか

- **等価回路図は概念的な説明**  
  - BSIM4仕様書を見ると、ゲート容量やドレイン–バルクダイオードを回路素子に分解した図があるが、実際には「端子電圧 → 数式評価 → 結果を返す」仕組みで実装される。

- **SPICEシミュレータのスタンピング機能**  
  - シミュレータは “ゲート–ドレイン容量” などをどこの行列要素へ足し込むか、あらかじめプログラムしてあるため、ユーザは回路素子を個別に書く必要がない。

---

## 5. 詳細ステップのイメージ

### 5.1 過渡解析の1ステップ

1. **推定ノード電圧**
   - 前の時刻ステップの解をもとに、$\mathbf{x}^{(k)}$ を用意。

2. **BSIM4呼び出し**
   - 端子電圧 $\mathbf{x}^{(k)}$ を入力し、インスタンスパラメータ群を参照して $I_d, C_{gd}, \ldots$ を取得。

3. **行列スタンピング**
   - （上記で述べたとおり）**容量や電流 → MNA行列**、**偏微分係数 → ヤコビアン行列**

4. **解く**
   - 収束するまで 2～3 を繰り返し、最終的に $\mathbf{x}^{(k+1)}$ が得られる。

5. **時刻を進める**
   - 次の時刻へ。これを繰り返すことで過渡解析結果を取得。

---

## 6. ユーザにとっての最終的な利点

1. **高精度な物理モデルが自動化**
   - BSIM4の高度な短チャネル効果や寄生容量を、自分で回路素子を記述することなく使える。

2. **汎用性と将来性**
   - SPICEは MNA の解法フレームワークを保持し、新しい MOSFETモデルが出てもモデルコードさえ追加すれば対応可能。

3. **簡潔なネットリスト**
   - ユーザは「M1 drain gate source bulk mymodel L=... W=...」と書くだけで、BSIM4の数式が裏で動き、行列スタンピングも自動。

---

## 7. まとめ

- **MOSFETモデル（BSIM4）**  
  - 端子電圧 + 多数のパラメータ → チャネル電流、寄生容量、ダイオード電流、偏微分係数を計算する “プログラム”。  
  - “等価回路”はあくまで仕様書の概念図。実装は数式ベース。

- **SPICEシミュレータ**  
  - 回路全体のノードと電圧源数から MNA 行列を初期化し、MOSFETモデルが返す情報をスタンピングして解を求める。  
  - **容量・電流はメインの MNA 行列**へ、**偏微分係数はヤコビアン行列**へスタンピングする形で、非線形回路方程式の解を進める。

両者が「端子電圧 → モデル計算 → 行列スタンピング → 解」のサイクルを繰り返すことで、最終的に回路の動作点や過渡応答、AC特性が得られます。これにより、ユーザは簡潔なネットリスト記述だけで高度な MOSFET シミュレーションを実行可能。**BSIM4対応の SPICE シミュレータ**は、内部でどのノード間に何を足し込むかをプログラムしており、ユーザが余計なサブサーキットを書く必要はないのが大きなメリットです。

---

### おわりに

本記事では、MOSFETモデル（BSIM4）と SPICE シミュレータがどのように協力して回路を解いているか、詳しく解説しました。シミュレータは **行列構築と解法** に、モデルは **物理式の評価** に特化し、インターフェースによって結合しています。これを理解すると、モデルパラメータの調整や解析トラブルシューティングにも役立つでしょう。