FMI と BSIM4 で感じたデジャヴ

----------------------------------------------

## はじめに

筆者は仕事で **FMI (Functional Mock-up Interface)** 規格に基づく FMU を扱うことがあります。
FMI には「Model Exchange (ME)」と「Co-Simulation (CS)」の 2 つのタイプが定義されていますが、**BSIM4**（広く使われている標準的な SPICE MOSFET モデルの一つ）のような SPICE MOSFET モデルを趣味で学んでいるときに、「あれ？ これって FMI の ME タイプのコンポーネントとすごく似てないか？」という感覚を覚えました。

実は、この **「モデルとソルバを分離する」** という構造は、数値解析やシミュレーション分野では**教科書的な基本設計**とされています。
たとえば数値解析の世界では、物理（数学）モデルとしての方程式（微分方程式や、より一般的には**微分代数方程式 DAE**）があり、それを解くソルバ（積分器、ニュートン法など）は別のモジュールで提供することが一般的です。SPICE シミュレータ＋MOSFET モデルも FMI Model Exchange も、まさにこの「モデル＝方程式の部品」「ソルバ＝数値解法」という典型的な形を実装している例と言えます。

そこで本記事では、SPICE MOSFET モデルと FMI (特に ME タイプ) の類似性について掘り下げ、**MOSFET モデルはソルバを内蔵しない “Model Exchange” 型に相当する**、という観点を解説します。

---

## 1. FMI とは？

FMI (Functional Mock-up Interface) は、異なるツールや環境間で**モデルをやりとり**するための標準インターフェースです。
FMI 2.0/3.0 では、大きく分けて **Model Exchange (ME)** と **Co-Simulation (CS)** の2種類があります。
*(ここでは概念を説明するため、簡単なブロック図を想像してみてください。ME では ホスト[ソルバ] ⇔ FMU[方程式]、CS では ホスト ⇔ FMU[ソルバ+方程式] のような関係です)*

1.  **FMI for Model Exchange (ME)**
    *   FMU (Functional Mock-up Unit) 内に数値ソルバを含まない。
    *   ホスト環境(ツール)側が数値積分器 (ODE/DAE ソルバ) を持ち、FMU は現在の状態や入力に基づいて**「状態の微分値」($\dot{x}$) や「代数的な出力」($y$)** を計算して返す。
        *   具体的には、ホストから状態 $x$ と入力 $u$ を受け取り、微分方程式 $\dot{x} = f(x, u, t)$ や 出力方程式 $y = g(x, u, t)$ の計算結果を返すイメージです。
    *   ホストのソルバが時間ステップを刻みながら、FMU に問い合わせて方程式を評価し、全体を解く仕組み。

2.  **FMI for Co-Simulation (CS)**
    *   FMU 内に**独自のソルバ**を持ち、内部で時刻刻みを進められる。
    *   ホスト環境は “時間同期” のタイミングを指示するだけで、FMU が内部で独立してシミュレーションを実行できる。
    *   例えば「熱流体解析と制御システムをゆるく連携させる」といった、部分的にソルバを分割したい場合に便利。

---

## 2. SPICE MOSFET モデルと FMI

### 2.1 MOSFET モデルの構造

SPICE 互換の MOSFET モデル（**BSIM4** など、業界標準として広く利用されるモデル）は、「端子電圧（や内部状態変数）を入力として受け取り → その瞬間の電流・容量（やチャージ）を出力として計算する」という“関数”のような振る舞いをします。

*   **MOSFET モデル自身に数値積分や非線形反復のロジックは含まれていません**。
*   あくまで「与えられた状態における瞬間的な物理量（電流など）や、状態変化の速度に関わる量（チャージ/容量など）を計算」し、外部の SPICE ソルバが時間を刻んだり、非線形方程式を解いたりする際に利用されます。
*   SPICE シミュレータは回路全体の方程式、多くの場合、**微分代数方程式 (DAE)** を解きます。MOSFET モデルは、この DAE を構成するための**部品（方程式の項）**を提供していると言えます。

これを FMI の概念に当てはめると、**MOSFET モデルは“自前のソルバを持たない部品”** であり、**外部（SPICE シミュレータ）のソルバが DAE を統合的に解く** 仕組みになります。

### 2.2 Model Exchange タイプとの類似点

FMI for Model Exchange では、FMU は以下のような動きをします。

1.  ホストから「状態 $x$ と入力 $u$」を受け取る。
2.  それに基づいて微分方程式の右辺 $\dot{x} = f(x, u, t)$ や 代数的な出力 $y = g(x, u, t)$ を計算して返す。
3.  ホスト側のソルバは、FMU から得た $\dot{x}$ を積分して次の状態を計算したり、 $y$ の値を使ったりしながら、時間ステップ $\Delta t$ を刻み、必要に応じて非線形反復計算を行う。

SPICE MOSFET モデルも、**端子電圧（＝入力や状態の一部）に対して電流（＝代数的な出力 $y$ に相当）やチャージ/容量（＝状態微分 $\dot{x}$ の計算に関わる要素）**を返すだけで、**時刻刻み（$\Delta t$）や収束計算は外部の SPICE ソルバが管理**する形です。
SPICE ソルバが解く方程式は厳密には DAE であることが多いですが、その方程式の評価（つまり、現在の電圧値などから電流値などを求める計算）を MOSFET モデルが担当するという点で、FMI ME の FMU とホストの関係に非常によく似ています。

言い換えると、**MOSFET モデルは「FMI Model Exchange で言うところの“方程式（DAE）の部品を提供するサブモデル”」**に非常に近い存在といえます。

### 2.3 もし“Co-Simulation タイプ”だったら？

FMI for Co-Simulation (CS) タイプの FMU は、自身の内部にソルバを持ち、ホストから“ある程度独立”してシミュレーションを進めます。
もし MOSFET モデルが Co-Simulation タイプだったとすると、MOSFET 自体が**内部で「過渡解析ソルバ（の一部）」を回せる**ようになり、外部はただ「時間を進めてね」と呼び出すだけで済む、という形になります。
しかし実際の BSIM4 などはそんな仕組みではなく、SPICE エンジンがグローバルに回路全体を非線形微分代数方程式として解くため、MOSFET モデルにはソルバはありません。
したがって、**MOSFET モデルが“Co-Simulation”的に動作しているわけではない**ことがわかります。

---

## 3. まとめ：MOSFET モデルは「FMI Model Exchange」タイプに近い

1.  **MOSFET モデルは“ソルバなし”**
    *   端子電圧や内部状態を入力すると、その瞬間の電流（代数的計算）や容量/チャージ（微分項の計算要素）を返すだけ。
    *   時間方向の積分や非線形反復計算は**外部（SPICE ソルバ）が担当**。SPICE ソルバが DAE 全体を解く。

2.  **FMI Model Exchange に似ている理由**
    *   Model Exchange タイプは「FMU = 数値解法を持たない、方程式評価を担当する部品」という設計。
    *   MOSFET モデルも原理は同じで、SPICE シミュレータが数値解法（DAE ソルバ）を握っている。

3.  **FMI Co-Simulation ではない**
    *   Co-Simulation タイプは FMU 内にソルバがあり、FMU 自体が時刻刻みを進める。
    *   MOSFET モデルはソルバを持たず、外部の回路シミュレータ（SPICE エンジン）と密に連携して働く。

したがって、**MOSFET モデル（BSIM4 など）は FMI 観点から見ると「Model Exchange 的な構成要素」** と言えます。
SPICE シミュレータという“ホスト”がノード電圧などを更新するたびに MOSFET のサブルーチンを呼び出し、回路全体の DAE を解いているイメージです。

---

## 4. 応用：FMI + SPICE モデルの連携

もし SPICE モデルを FMI 化して外部ツールと連携したい場合、典型的には以下のシナリオが考えられます。

*   **Model Exchange として SPICE モデル（またはその一部）を包む**
    *   デバイスモデル（MOSFET, ダイオードなど）の「端子電圧 → 電流/チャージ」計算を FMI の関数形式で提供。
    *   ホスト環境（FMI 対応ツール）が回路方程式全体（DAE）を組み立てて解く。
*   **Co-Simulation として SPICE シミュレータ全体を丸ごと包む**
    *   SPICE エンジン（ソルバ含む）を独立した FMU として扱い、内部で回路解析を進める。
    *   ホストとは通信ステップごとにやや疎結合で情報をやりとりする。

どちらを選ぶかは、シミュレーション規模、連成するシステムの性質、モデルの機密保護、パフォーマンス要件などによって変わります。
**単純に「MOSFET モデル単体」を FMI 化するなら、ほぼ間違いなく“Model Exchange 的な FMU”** というイメージになるでしょう。

---

## 5. なぜ“教科書的”な設計なのか？

最後に付け加えると、
SPICE と MOSFET モデルの役割分担（モデルとソルバを分ける構造）や、FMI Model Exchange で “FMU はモデル（方程式）を提示し、ホストが時刻刻みや反復計算を管理” という仕組みは、**数値解析・シミュレーションの教科書で広く扱われる「モデル vs ソルバ」分離の設計**と軌を一にしています。

*   **数値解析や制御システムの教科書**
    *   物理モデル（微分方程式や**微分代数方程式 DAE**）を定義し、それを解くための汎用的な手法（オイラー法、ルンゲクッタ法、ニュートン法、DAE 解法など）を適用する、という基本構造。
*   **CAE ソフトウェアの仕組み**
    *   有限要素法 (FEM) や有限体積法 (FVM) 等の手法で支配方程式を離散化・定式化する側（モデル構築部）と、その結果得られる大規模な連立方程式（線形・非線形、代数・微分）を解くソルバ部が明確に分離されていることが多い。

この **「モデル（現象を表す方程式）とソルバ（それを解くアルゴリズム）を切り離して実装する」** という考え方が、シミュレーションの世界では**非常にベーシックかつ強力なアプローチ**です。
SPICE と MOSFET モデルの関係も、まさにこの古典的かつ効果的な設計原則に基づいています。FMI は、この考え方をさらに推し進め、異なるツール間でのモデル交換を標準化したものと言えるでしょう。これにより、SPICE の世界と他のシミュレーション領域との多様な連携の可能性が広がっています。

----------------------------------------------

以上