SPICEの収束問題とその対策

---

# 1. 収束問題の背景メカニズム

## 1.1 MNA（Modified Nodal Analysis）と非線形方程式
Spiceでは、回路中のノード電位や素子電流を未知数とし、**MNA（Modified Nodal Analysis）**という方法で方程式系を構築します。  
- これらの方程式は多くの場合、**非線形**です（MOSFETやダイオード、BJTなど）。  
- 非線形方程式系を解くためには**ニュートン法**やその派生手法が用いられます。

### 間違いやすい点
- 「Spiceは常にニュートン法だけで解いている」と思われがちですが、実際には「**ソースステッピング**(source stepping)」や「**gminステッピング**(gmin stepping)」など、段階的に回路を線形に近づけながら解を探索するテクニックを内部で使うことがあります。  
- **gminステッピング**は、ダイオードやトランジスタの接合部などに小さな並列抵抗(gmin)を挿入して、非常に鋭いI-V特性を緩和する手法です。

## 1.2 ニュートン法の特性
ニュートン法は初期解から始めて反復的に解を更新していきますが、次のような弱点があります。  
1. 初期値が悪いと局所的な極小点（あるいは解のない方向）に入り込みやすい。  
2. ヤコビアン（Jacobian）行列が特異行列（もしくは近い状態）になると、更新式が発散する。  

特に回路が**高ゲイン**かつ**強い正帰還**を含む場合、ニュートン法が解を見失いやすくなります。

---

# 2. 収束問題の典型的な原因

## 2.1 発振回路や高ゲイン回路
- **発振回路**は理想的には動作点が定まらず、起動時の微小なノイズで振幅が成長するため、Spiceは「振動が始まる前の静止状態」が果たしてどこなのか見極めにくい場合があります。  
- オペアンプのように**ゲインが非常に大きい回路**は、小さな差電圧によって出力が飽和領域に突入し、そこからニュートン法が解を導きにくくなるケースが生じます。

## 2.2 スイッチング回路
MOSFETやダイオードで構成された**スイッチング回路**では、素子のオン・オフの切り替わりが急峻になるほど非線形性が強まり、過渡解析中の時間ステップ制御も難しくなります。  
- 極端に小さい/大きいキャパシタンスや、ゼロに近いオン抵抗などによって、回路の「剛性」が増してしまい、ニュートン法の反復が失敗しやすくなります。

## 2.3 寄生パラメータとモデル不備
- **寄生キャパシタンス**や**寄生インダクタンス**があると、回路方程式が複雑化し、一部のノード電位や電流が急激に変化する可能性が高くなります。  
- モデルパラメータの整合性が取れていない（例：サードパーティ製のMOSモデルで電圧範囲外の動作を想定していない）と、数値的に不安定になることがあります。

---

# 3. 具体的な対策・掘り下げ

## 3.1 初期条件の工夫

### 3.1.1 .IC, .NODESET, .NODEVOL などのコマンド
- **`.IC V(node)=電圧値`**  
  過渡解析のスタート時に、コンデンサの初期電圧などを設定しておくと、ニュートン法が解を探しやすくなります。  
- **`.NODESET V(node)=電圧値`**  
  DC動作点解析の初期推定値を強制するコマンド。過渡解析に入る前の安定した動作点を得やすくなります。

### 3.1.2 発振回路での疑似的なダンピング
- 発振回路の場合は、**起動時に抵抗を挿入**してゲインを下げ、ある程度動作点が収束してから抵抗を外す、という方法が挙げられます（トランジェント解析中にパラメータを変えるのはシミュレータによっては制約がありますが、一つの手段です）。

## 3.2 収束条件・アルゴリズムの調整

### 3.2.1 .OPTIONS での各種パラメータ設定
- **`ABSTOL`, `RELTOL`**: 電流や電圧の絶対・相対許容誤差。数値を大きくすれば収束しやすくなるが、精度は下がる。  
- **`VNTOL`**: 電圧収束判定に使われる許容誤差。  
- **`ITL1`, `ITL2`**: ニュートン反復の最大回数や過渡解析ステップごとの反復回数の上限。増やすと時間はかかるが、収束率は上がる。  
- **`METHOD=TRAP` or `METHOD=GEAR`**: 過渡解析時の積分法を変更。  
  - **Trapezoidal法（TRAP）**: 高速かつ初期の過渡特性が正確になりやすいが、振動しやすい（数値的リンギング）場合がある。  
  - **Gear/BDF法**: 安定性を重視した手法で、剛性の高い回路に適しているが、計算コストはやや増える。

### 3.2.2 GMINステッピング / ソースステッピング
- **`GMINステッピング`**: 接合部に並列抵抗を入れた状態から徐々に理想特性に近づけることで収束を誘導。多くのSpiceではデフォルトで有効になっているが、パラメータを調整（例：`GMIN=1e-12` → `1e-9` など）することで効果が変わる。  
- **`ソースステッピング`**: 電源や信号源の電圧/電流を0から徐々に上げていき、回路がゆっくり動作点に入るようにする方法。

## 3.3 回路の修正・単純化

### 3.3.1 ダンピング抵抗の挿入
- 急峻すぎる素子には**微小抵抗**を付加し、インダクタやコンデンサにもシリーズ抵抗を挿入すると収束が改善されることがあります。  
- 特に、オペアンプの入力やMOSゲートに数十Ω～数百Ωの抵抗を入れてみるなど、数値的なスパイクを和らげる工夫が有効。

### 3.3.2 大規模回路の分割・階層化
- 大きな回路を一度に解析する代わりに、**サブ回路ごとにシミュレーション**して動作点や波形を確認し問題点を特定する。  
- 最終的に全体を統合する際も、安定した部分回路の動作点を引き継ぐことで収束しやすくなる。

## 3.4 過剰な非線形性の一時緩和

### 3.4.1 素子特性をマイルドにする
- MOSFETモデルのしきい値電圧（Vth）やベータ値 (K) を一時的に小さく設定し、過渡解析を行ってみる。  
- ダイオードのアイデアルファクタ(n)を大きめに（理想的=1.0 → 1.05 や 1.1 など）してみると収束が容易になるケースもある。

### 3.4.2 過渡解析ステップを段階的に細かく
- まずは大きめの時間ステップで大雑把に動作を追い、ある程度状態が安定してきたら時間ステップを細かくして精度を上げる。  
- 多くのSpiceは**自動時刻ステップ制御（time step control）**を行いますが、ユーザー側で最大ステップ(`.TRAN <Tstep> <Tstop> UIC maxstep=<value>`)を適切に設定すると効果的です。

---

# 4. 注意点と補足

1. **収束したからといって正しい解とは限らない**  
   収束問題の解決策を適用すると、数値的には落ち着いても実際の動作と乖離している場合があります。解析結果は常に妥当性を検証する必要があります。  
2. **モデル自体の品質**  
   メーカー提供のSPICEモデルには適用範囲があり、極端な温度や電圧領域で誤差が大きくなる可能性があります。  
3. **数値精度と計算速度のトレードオフ**  
   許容誤差を厳しくすれば精度は上がりますが、収束が難しくなり計算時間も増大します。適切なバランスを見極める必要があります。

---

# 5. 追加の視点・対策事例

ここでは、上記で挙げられた一般的な対策に加えて、さらに実務でよく活用されるテクニックや注意点を示します。

## 5.1 UICオプション（Use Initial Conditions）の活用
- たとえば `.TRAN 1ns 1us UIC` のように指定すると、**SpiceがDC動作点解析を行わずに過渡解析を開始**します。  
  - **メリット**: 発振回路や起動条件が定まらない回路などで、DC動作点を無理に求める必要がないため、不自然な初期条件が避けられます。  
  - **デメリット**: コンデンサの初期電圧などは「ゼロ」または`.IC`コマンドで設定した値になり、実際の回路の起動状態と異なる可能性があります。

## 5.2 複数解・ヒステリシス現象への注意
- **複数のDC解が存在する回路**（たとえば正帰還を含むバイスタブ回路）は、初期条件やステッピング手法によって見つかる解が異なる場合があります。  
- **ヒステリシス**や**バイスタブリティ**が予想される場合は、DC解析で見つかった解が本当に意図する動作点なのかを検証する必要があります。

## 5.3 解析手法を切り替える際の追加オプション（ニュートン緩和など）
- 一部のSpice系シミュレータには、**ニュートン緩和(Newton damping)** や **自動収束補助モード(robust mode, auto convergence)** などのオプションが用意されています。  
- どうしても収束しない場合は、これらのモードを試してみると改善するケースがあります。

## 5.4 解析の分割とDC Sweepの活用
- 大規模回路を**部分的に切り分けて解析**するのはもちろん、**DC Sweep解析**で電源やバイアス電圧を徐々に変化させながら回路の動作点をチェックする方法も有効です。  
- どの電圧レンジで不連続や急峻な変化が生じるかが可視化され、収束不良の原因を特定しやすくなります。

## 5.5 高周波解析やSパラメータとの整合性
- 高周波領域での解析やSパラメータを扱う場合、**寄生や基板結合**の影響が大きくなります。  
- 不要な寄生成分を極力減らす・適切な集中定数に置き換えるなどの工夫により、収束が改善される場合があります。

---

# 6. まとめ

- **収束問題**は回路の非線形性や剛性、初期条件、モデルの設定不備など、多岐にわたる要因が絡み合って発生します。  
- **対策**としては、初期条件や収束パラメータの設定、回路への小抵抗・小容量挿入、GMINステッピング、さらには**UICオプション**や**DC Sweep**を活用するなど、さまざまな手段があります。  
- 複数解が想定される回路や、実際の動作が振動やバイスタブル動作を含む回路では、**見つかった解が本当に想定している動作点か**をユーザーが慎重に見極めなければなりません。  
- シミュレーションによる結果と**実測データ**や**現実的な設計意図**を照らし合わせ、最終的に妥当な設計へと落とし込むことが重要です。

以上の点を踏まえて、Spiceでの収束問題に取り組むことで、より正確で信頼性の高いシミュレーション結果を得られるようになると思われます。