🐷

SPICE 過渡解析のフローチャート

2025/01/01に公開

SPICE 過渡解析の各ステップ解説

以下では、SPICE 過渡解析における各ステップを、前回のフローチャートをもとにさらに詳しく解説します。記事の形で読めるよう、段落を区切りながら、実際の実装・数値計算の要点や現場でありがちな工夫・注意点なども交えて説明します。分量は前回のほぼ倍を目指していますので、かなり細かい内容になります。SPICE の内部動作を理解する上で、ぜひ参考にしてください。


SPICE 過渡解析フローチャートの詳細解説

下記は過渡解析の大まかな流れを示すフローチャートですが、SPICE 系シミュレータではこの一連の手順を内包する形でさまざまな最適化や例外処理が行われています。ここでは、最もオーソドックスな構造を拡張・解説していきます。

  1. ネットリストの読み込み・解析条件(トランジェント解析)の設定

1.1 ネットリストの読み込み
• SPICE 系シミュレータは、まずテキストファイル形式の「ネットリスト」を読み込みます。
• このネットリストには、回路素子(抵抗、コンデンサ、インダクタ、MOSFET、BJT、ダイオードなど)や、ノード接続情報(ノード名・端子番号)、さらには電源や信号源の種類とパラメータ(DC, AC, パルス、サインなど)が記述されています。
• ネットリストによって回路の規模はさまざまで、数個の素子から数十万、数百万規模のトランジスタを含む複雑なIC設計まで多岐にわたります。

1.2 解析条件の設定(トランジェント解析)
• ユーザが .tran ステートメントなどで指定した開始時刻(通常0秒)・終了時刻(Tstop)・ステップ(出力ステップ)などをシミュレータ内部に登録します。
• 例: .TRAN 1n 100n → 1ナノ秒ごとに出力を保存しながら、全体を100ナノ秒までシミュレーション。
• 解析条件には、相対誤差(RELtol)・絶対誤差(ABStol)・最大ステップ・最小ステップなどの収束パラメータも含まれることが多いです。これらは後で出てくる自動ステップ制御に重要な役割を果たします。

  1. モデルパラメータ・素子情報の読込み・回路初期条件設定

2.1 モデル・素子情報の読込み
• MOSFETやBJTなどの高度なデバイスは、.MODEL コマンドなどを通じて物理パラメータを読み込みます。
• ngspice / HSPICE / Spectreなど、各SPICEエンジンによって微妙に書式が異なることもありますが、基本的には「トランジスタの閾値電圧」「移動度」「チャネル長変調」「寄生容量」などを取得し、内部構造として保持します。
• 抵抗やコンデンサの単純な値(R1 1 2 10k → 10kΩ)などもこの時点でリスト化されます。

2.2 回路初期条件(IC)の設定
• ユーザが明示的に「コンデンサの初期電圧 = 0V」と指定した場合や、.IC V(node)=5 のような形で特定ノードに初期電圧を強制する場合があります。
• シミュレータは、「これらの初期条件を 動作点解析 で上書きするか、ユーザ指定を強制適用するか」を後で判断できるよう、まずはすべて保持しておきます。

  1. 動作点解析(DCオペレーティングポイント) または強制初期値の適用

3.1 DC 動作点解析
• 過渡解析に先立って、直流状態(ACソースは0V、パルスやサイン波はそのオフセット成分のみ) とみなして一度回路を解きます。これを動作点解析(Operating Point Analysis) と呼びます。
• 非線形素子(BJT, MOSFET, ダイオード等)のバイアス点(電流や端子電圧)を求め、過渡解析スタート時の初期状態として利用します。
• 具体的には、ニュートン法やその他の手法でノード電圧を解き、各素子の動作領域(線形領域・飽和領域など)を把握することになります。

3.2 強制初期値 (uic オプション など)
• 一方で「動作点解析をスキップして、ユーザが指定した初期条件で無理やりスタートさせる」ケースもあります。これは .TRAN ステートメントに uic (Use Initial Condition) をつける、などで実現します。
• 理由としては、DC解析を行うと回路が意図しない安定点に落ちてしまうことや、発振回路やスイッチング回路などでは “初期コンデンサ電圧をゼロ” とする方が実際の挙動に近い場合があるためです。
• いずれにせよ、このステップで「過渡解析開始時点(t=0)のノード電圧・素子内部状態」を求める下準備を済ませます。

  1. 数値積分法の選択 (Backward Euler, Trapezoidal, Gear…)

4.1 SPICEで使われる数値積分法
1. Backward Euler(後退オイラー法)
• 数値的に非常に安定しているが、波形が丸まる“数値拡散”を起こしやすい。
• スイッチング電源などで数値振動を抑えたい場合によく使われます。
2. Trapezoidal(台形則)
• 高精度だが、特定回路での数値リンギング(振動)を起こしやすい。
• デフォルトとして用いられることが多い。
3. Gear法(BDF:Backward Differentiation Formula)
• 多段階法で高オーダーまで拡張可能。剛性の高い回路(高速現象と低速現象が混在)などにも比較的向いている。
• 実装コストが高め。

4.2 解析開始前の初期化
• シミュレータは、ここで選択された積分法に応じた内部テーブルやオーダー設定を行い、次のステップ以降でコンデンサやインダクタの等価変換(コンパニオンモデル) を組み立てられるように準備をします。
• 例えば Gear法なら、過去のステップの解(電圧、電流)をいくつ保持するか(オーダーごと)などを設定します。

  1. t=0 での初期状態を確定 (DC解 or ユーザ指定IC)

5.1 過渡解析スタート時刻
• 前の手順(3)で得られた DC動作点、またはユーザの強制初期値を元に、コンデンサ電圧やインダクタ電流、ノード電圧などを**“過渡解析の初期値”** としてセットします。
• 同時に、積分法を適用した際の過去ステップデータ(といっても最初はまだステップ0なので、初期状態としてセット)も内部変数として用意します。

5.2 スイッチング回路などの特例
• 一部の回路では、スイッチがオンの状態・オフの状態をユーザが予め指示することもあります。
• これらも含め、SPICEは「時刻t=0での回路状態はこうなっている」と内部的に確定させることで、いよいよシミュレーションの時間軸を進める準備が完了します。

  1. 解析終了判定 (t >= Tstop ?)

6.1 終了時刻の判定
• ここで、現在のシミュレーション時刻 t が終了時刻 T_\mathrm{stop} を超えているか確認します。
• 通常は t = 0 から始まるので、この時点では当然「いいえ」となり、次のステップへ進みます。
• しかしループの最後(12. 時刻更新)で再びここに戻ってくるため、1ステップごとに終了条件をチェックする仕組みです。

6.2 強制終了やエラー処理
• ユーザが解析途中でキャンセルしたり、ニュートン法が一定回数収束しないなどのエラーが起こった場合、この段階で強制終了フラグを見て解析を打ち切るケースもあります。

  1. タイムステップ \Delta t の決定(自動ステップ制御)

7.1 Adaptive Time Stepping(自動ステップ制御)
• SPICE は、過渡解析の精度を保つためにステップサイズ \Delta t を都度調整する仕組みを備えています。
• 急峻な波形変化(例: パルス立ち上がり、ダイオードがオンになる瞬間)が起こる区間ではステップを小さくして精度を上げ、波形が落ち着いている区間ではステップを大きくして計算時間を短縮する狙いです。
• このように動的にステップを変えることで、過剰に細かいステップを常時取る無駄や、逆に粗すぎて波形を見落とす危険を減らせます。

7.2 ブレークポイント
• .TRAN ステートメントにブレークポイント指定を入れたり、あるいは回路中のパルスソースが何ナノ秒でスイッチするかを事前に知っている場合、その時刻に合わせてステップ分割を強制する「ブレークポイント機能」があります。
• 内部で「次のステップよりブレークポイントが近いなら、それを跨がないように細かく刻もう」といったロジックを組み込み、波形の急変を見逃さないようにしています。

  1. 回路方程式(MNA)の構成 + コンパニオンモデル化

8.1 Modified Nodal Analysis (MNA)
• 過渡解析時も基本は、ノード電圧を未知数とし、KCL(キルヒホッフの電流則)をベースに行列 \mathbf{A}とベクトル\mathbf{b} を組み立てるフローとなります。
• 電圧源やインダクタなど、追加変数が必要な要素(枝電流を未知数にする等)については拡張ノードを導入し、拡張MNAを行います。
• 抵抗等の線形素子は「i = \frac{v}{R}」の簡単な関係式で行列要素に反映され、電源や電流源は

Discussion