シミュレーションのトラブルシューティング
回路がシミュレーションできない場合、問題が回路そのものにあるのか、あるいはシミュレーション手順(プロセス)にあるのかを特定する必要があります。本リファレンスのこのセクションに記載された情報に従い、提案されているポイントを一度に1つずつ試しながら確認してください。
シミュレーション中に、エラーまたは警告を報告するメッセージが表示されることがあります。これらのメッセージは Messages パネルに一覧表示されます。
- Warning Messages – 警告メッセージはシミュレーションに致命的ではありません。一般に、シミュレーションを完了するためにSPICEが回路に対して行う必要があった変更に関する情報を提供します。これには、無効または不足しているパラメータなどが含まれます。
- Error Messages – エラーメッセージは、シミュレータが解決できず、シミュレーション処理に致命的だった問題に関する情報を提供します。エラーメッセージはシミュレーション結果を生成できなかったことを示すため、回路を解析できるようにする前に修正する必要があります。
シミュレーション解析失敗のトラブルシューティング
すべてのシミュレータに共通する課題の1つが収束(convergence)です。この用語 convergence とは正確には何を意味するのでしょうか? 多くのシミュレータと同様に、Altium Designer のSPICEエンジンは、回路を表す方程式を反復的に解くプロセスを用いて、静止状態(quiescent)の回路電圧と電流を求めます。これらの電圧・電流を見つけられない(収束しない)場合、回路の解析を実行できません。
SPICEは、行列形式で表現された連立一次方程式を用いて、シミュレーションの各ステップにおける回路の動作点(DC電圧および電流)を求めます。回路はコンダクタンスの配列に簡約され、行列に配置されて方程式を形成します(G * V = I)。回路に非線形要素が含まれる場合、SPICEは非線形性を考慮するために一次方程式を複数回反復します。SPICEはまずノード電圧の初期推定値を置き、回路内のコンダクタンスに基づいて枝電流を計算します。次に、その枝電流を用いてノード電圧を再計算し、このサイクルを繰り返します。すべてのノード電圧と枝電流が指定された許容誤差内に入る(収束する)まで、このサイクルが続きます。
しかし、指定された反復回数内に電圧または電流が収束しない場合、SPICEは(singular matrix、Gmin stepping failed、source stepping failed または iteration limit reached などの)エラーメッセージを出力し、シミュレーションを中止します。SPICEは各シミュレーションステップの結果を次ステップの初期推定値として使用します。過渡(Transient)解析(つまり時間をステップさせる解析)を実行していて、指定したタイムステップで解に収束できない場合、タイムステップは自動的に小さくされ、サイクルが繰り返されます。タイムステップが小さくなりすぎると、SPICEは Timestep too small メッセージを表示してシミュレーションを中止します。
一般的なシミュレーション収束のトラブルシューティング
シミュレーション解析が失敗する場合、最も一般的な原因は、回路が妥当な動作点に収束できないことです。収束問題を解決するには、次の手法を使用してください。
収束トラブルシューティング手順
- 収束問題がある場合、まず動作点(Operating Point)解析以外の解析をすべてオフにします。
- シミュレーションに関連するエラー/警告がないか、Messages パネルを確認します。
- 回路が正しく配線されていることを確認します。未接続のノード(dangling nodes)や孤立した部品(stray parts)は許可されません。
- 回路にグラウンドノードがあり、回路内のすべてのノードがこのグラウンドへのDCパスを持つことを確認します。ノードを絶縁し得る部品にはトランスやコンデンサがあります。電圧源はDC的には短絡、電流源はDC的には開放と見なされます。
- シミュレーションパラメータ入力時に、数字のゼロ(0)と文字のOを取り違えていないことを確認します。
-
部品値またはシミュレーションパラメータに対して、適切なSPICEの倍率指定が行われていることを確認します(
1e6にはMではなくMEG)。倍率指定は大文字/小文字を区別しません。また、値と倍率の間にスペースは入れられません。たとえば1.0 uFではなく1.0uFとする必要があります。 - すべてのデバイスおよびソースが適切な値に設定されていることを確認します。
- 従属源(dependent source)のゲインが正しく設定されていることを確認します。
- 直列コンデンサまたは電流源を一時的に取り除き、シミュレーションを再実行します。
- 並列インダクタまたは電圧源を一時的に取り除き、シミュレーションを再実行します。
-
Simulation Dashboardパネルの Analysis Setup & Run 領域にある Settings をクリックして開く Advanced Analysis Settingsダイアログの Advanced タブで、
ITL1パラメータの値を300に増やします。これにより、動作点解析があきらめる前に、より多くの反復を行えるようになります。 -
Advanced Analysis Settingsダイアログの Advanced タブで、
RSHUNT1の値を設定します。この抵抗値は各回路ノードとグラウンドの間に追加され、「singular matrix」エラーなどの問題の修正に役立ちます。原則として、RSHUNT値は1e12のような非常に高い抵抗に設定する必要があります。 - ノード電圧を定義するために .NS(Nodeset)デバイスを追加します。ノード電圧の初期推定が大きく外れている場合、Nodesetデバイスを使用して、動作点解析の予備パスで用いられる開始電圧を事前定義できます。配置した各Nodesetデバイスで Initial Voltage パラメータを設定してください。Nodesetは Simulation Generic Components ライブラリから配置できます。
- Nodesetデバイスが収束に役立たない場合は、.ICデバイスを配置して初期条件を定義してみてください。この場合、動作点解析中はノード電圧が指定値に保持され、過渡解析中に解放されます。Initial ConditionデバイスはNodesetデバイスと同じライブラリから配置でき、Initial Voltageパラメータも同様に設定する必要があります。
- Simulation Dashboard パネルの Analysis Setup & Run 領域にある Transient 設定で Use Initial Conditions オプションを有効にします。このオプションは .ICデバイス(または部品のICパラメータ)と連携して動作します。このオプションを設定すると、動作点解析は実行されず、指定した電圧が過渡解析の初期条件として使用されます。
-
モデルの直列抵抗パラメータを指定し、Advanced Analysis Settingsダイアログの Advanced タブにある
GMINオプションを10倍に増やします。 -
半導体デバイス、特にダイオードの初期条件(Starting Condition)を
OFFに指定します。これにより、最初の反復でダイオード(または半導体デバイス)をスキップして数値的な収束問題を緩和し、収束性を改善できる場合があります。
DCスイープ解析のトラブルシューティング
DCスイープ解析で問題がある場合は、まず上記の収束トラブルシューティング手順を試してください。それでも問題が解決しない場合は、次を試してください。
- Simulation Dashboard の Analysis Setup & Run セクションにある Step パラメータの値を変更します。デバイスモデルに不連続が存在する場合(たとえばモデルの線形領域と飽和領域の間など)、ステップサイズを大きくすると不連続をまたいでシミュレーションできることがあります。一方、ステップを小さくすると、急峻な電圧遷移の不連続を解像できるようになります。
- DCスイープ解析を使用しないでください。DC解析では解決できない問題(ヒステリシスなど)もあります。そのような場合は、過渡解析を使用し、適切な電源の値をランプさせる方が効果的です。
過渡解析のトラブルシューティング
過渡解析で問題がある場合は、まず上記の収束トラブルシューティング手順を試してください。それでも問題が解決しない場合は、次を試してください。
Simulation Dashboardパネルの Analysis Setup & Run 領域にある Settings をクリックして開く Advanced Analysis Settingsダイアログの Advanced タブで:
-
RELTOLパラメータを0.01に設定します。デフォルトの0.001(精度0.1%)から許容誤差を緩めることで、解に収束するために必要な反復回数が減り、シミュレーションが大幅に速く完了します。 -
ITL4パラメータの値を100に増やします。これにより、各タイムステップで過渡解析があきらめる前に、より多くの反復を行えるようになります。この値を上げることで、timestep too smallエラーの解消に役立ち、収束性とシミュレーション速度の両方が改善される場合があります。 -
電流/電圧レベルが許す場合は、
ABSTOLとVNTOLの値を増やして精度を下げます。回路によっては、1uVや1pAまでの分解能が不要な場合があります。ただし、回路で想定される最小の電圧または電流レベルよりも、少なくとも1桁小さい値は確保してください。 - Integration Method を Gear のいずれかの方法に変更します。Gear積分はシミュレーション時間が長くなりますが、一般に台形則(trapezoidal)より安定です。Gear積分は、発振する回路やフィードバック経路を持つ回路で特に有用な場合があります。
追加で試すこと:
- 回路を現実的にモデル化します。現実的な寄生成分、特に浮遊/接合容量を追加してください。ダイオードの周囲にRCスナバを使用します。特にRFおよびパワーデバイスでは、デバイスモデルをサブサーキットに置き換えます。
- 回路内の周期パルス源(Periodic Pulse sources)の立ち上がり/立ち下がり時間を増やします。どれほど優れたパルスジェネレータでも瞬時にスイッチングすることはできません。