(57)【要約】【課題】Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を行うに際して、回路シミュレーションにあたりユーザが強いられてきたパラメータの見直しの負担を軽減する事のできる回路シミュレーションプログラム、及び回路シミュレーション装置を提供する。【解決手段】被シミュレーション対象回路の回路構成を示す回路情報、及び仮想コンダクタンス決定用パラメータ、が予め格納された記憶部と、前記回路情報に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの初期値を探索する初期値探索部と、前記初期値探索部における探索結果に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法により、前記被シミュレーション対象回路のシミュレーションを行うＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部と、前記Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部のシミュレーション結果を出力する出力部と、を具備する。【選択図】図１１
2008276363.tif 000002
【特許請求の範囲】
【請求項１】
被シミュレーション対象回路の回路構成を示す回路情報、及び仮想コンダクタンス決定用パラメータ、が予め格納された記憶部と、
前記回路情報に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの初期値を探索する初期値探索部と、
前記初期値探索部における探索結果に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法により、前記被シミュレーション対象回路のシミュレーションを行うＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部と、
前記Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部のシミュレーション結果を出力する出力部と、
を具備し、
前記初期値探索部は、
前記仮想コンダクタンス決定用パラメータに基いて、仮想コンダクタンスの第１候補値を求め、
前記被シミュレーション対象回路に前記第１候補値の仮想コンダクタンスを導入した仮想回路の回路網方程式を作成し、反復解法によって求解処理を行い、
前記反復解法によって解が収束しなかった場合に、仮想コンダクタンスの値を別の候補値に変更しながら、前記反復解法による求解処理を繰り返し、
前記反復解法により収束解が得られた場合に、収束解が得られた時の候補値を探索結果とする
回路シミュレーション装置。
【請求項２】
請求項１に記載された回路シミュレーション装置であって、
前記記憶部には、更に、探索範囲決定用パラメータが予め記憶されており、
前記初期値探索部は、前記探索範囲決定用パラメータに基いて、前記仮想コンダクタンスの探索範囲を設定し、前記探索範囲内で前記仮想コンダクタンスの値を別の値に変更する
回路シミュレーション装置。
【請求項３】
請求項２に記載された回路シミュレーション装置であって、
前記初期値探索部は、前記探索範囲の分割回数ｍを記憶し、
前記仮想コンダクタンスの値を変更するにあたり、前記探索範囲を２ｍ−１分割する複数の値のいずれかに変更し、前記探索範囲を２ｍ−１分割する複数の値の全てについて変更済みとなった場合に、前記ｍをインクリメントして、前記探索範囲を更に細分割する別の値に変更する
回路シミュレーション装置。
【請求項４】
請求項１乃至３のいずれかに記載された回路シミュレーション装置であって、
前記初期値探索部は、
前記反復解法により収束解が得られなかった場合に、収束しなかった変数の数と、求解処理の行われた候補値との対応関係を示す非収束変数情報を記憶し、
前記仮想コンダクタンスの値を変更するにあたり、前記非収束変数情報に基いて、前記仮想コンダクタンスの値を変更する
回路シミュレーション装置。
【請求項５】
請求項１乃至４のいずれかに記載された回路シミュレーション装置であって、
前記初期値探索部は、
前記反復解法により収束解が得られなかった場合に、前記反復解法における反復残差と、求解処理の行われた候補値との対応関係を示す反復残差情報を記憶し、
前記仮想コンダクタンスの値を変更するにあたり、前記反復残差情報に基いて、前記仮想コンダクタンスの値を変更する
回路シミュレーション装置。
【請求項６】
請求項１に記載された回路シミュレーション装置であって、
前記初期値探索部は、前記仮想コンダクタンスの値を変更するにあたり、乱数を用いて前記仮想コンダクタンスの値を変更する
回路シミュレーション装置。
【請求項７】
請求項１に記載された回路シミュレーション装置であって、
前記初期値探索部は、前記仮想コンダクタンスの値を減らすことで、前記仮想コンダクタンスの値を変更する
回路シミュレーション装置。
【請求項８】
請求項１乃至７のいずれかに記載された回路シミュレーション装置であって、
前記記憶部には、更に、予め仮想コンダクタンスが十分に逓減されたか否かを判断するための逓減判断用パラメータが格納されており、
前記Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部は、
前記被シミュレーション対象回路に、前記初期値探索部により決定された前記初期値よりも小さい値の仮想コンダクタンスを導入した仮想回路の回路方程式を作成して、反復解法によって求解処理を行い、
前記反復解法により収束解が得られた場合に、前記仮想回路における前記仮想コンダクタンスの値を逓減させ、且つ、前記反復解法における未知変数の初期値として得られた前記収束解を用いつつ、前記反復解法による求解処理を繰り返し、
逓減された仮想コンダクタンスの値を前記逓減判断用パラメータと比較して、前記仮想コンダクタンスの値が十分に逓減されたか否かを判断し、前記仮想コンダクタンスの値が十分に逓減された場合に、得られた収束解を前記被シミュレーション対象回路のシミュレーション結果として前記出力部に出力する
回路シミュレーション装置。
【請求項９】
請求項８に記載された回路シミュレーション装置であって、
前記記憶部には、更に、前記仮想コンダクタンスの値を逓減させる為の緩和用パラメータが予め格納されており、
前記Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部は、
前記仮想コンダクタンスの値を逓減させるに際して、前記緩和用パラメータを用いて前記仮想コンダクタンスの値を小さくし、
前記仮想コンダクタンスが十分に逓減されるまでに、前記反復解法によって収束解が得られなかった場合に、前記緩和用パラメータを変更した上で、前記反復解法を行いつつ前記仮想コンダクタンスの値を前記初期値から逓減させていく
回路シミュレーション装置。
【請求項１０】
請求項１乃至９のいずれかに記載された回路シミュレーション装置であって、
前記反復解法は、Ｎｅｗｔｏｎ法、Ｄａｍｐｅｄ−Ｎｅｗｔｏｎ法、及びホモトピー法のいずれかである
回路シミュレーション装置。
【請求項１１】
被シミュレーション対象回路の回路構成を示す回路情報、及び仮想コンダクタンス決定用パラメータ、が予め格納された記憶部と、
前記回路情報に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの初期値を探索する初期値探索部と、
前記初期値探索部における探索結果に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法により、前記被シミュレーション対象回路のシミュレーションを行うＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部と、
前記Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部のシミュレーション結果を出力する出力部と、
を具備する
回路シミュレーション装置。
【請求項１２】
コンピュータを、請求項１乃至１１のいずれかに記載された回路シミュレーション装置として機能させる、回路シミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、回路の設計工程において用いられる回路シミュレーション装置、及び回路シミュレーションプログラムに関する。
【背景技術】
【０００２】
回路を設計する場合、予め、回路シミュレーション装置を用いて、シミュレーションが行われる。図１は、シミュレーション動作の一例を概略的に示すフローチャートである。図１に示されるように、まず、回路情報が回路シミュレーション装置に入力される。回路情報とは、回路の構成を特定する情報であり、例えば、回路に含まれる素子やその接続関係などを示した情報である。回路シミュレーション装置では、入力された回路情報に基いて、初期動作点解析（ＤＣ動作点解析）が行われる。更に、初期動作点解析の結果に基いて、過渡解析（ＴＲ解析）が行われる。
【０００３】
初期動作点解析とは、回路の節点電位（動作点）や電流の情報等を求める処理である。初期動作点解析では、まず、回路情報に基づいて、回路内の各部における求めたいパラメータ（電流や電圧等）を未知変数Ｘとした回路方程式Ｆ（Ｘ）＝０が作成される。この回路方程式の未知変数Ｘの求解が、反復解法で繰り返される。そして、収束解が得られた場合には結果が出力される。
【０００４】
回路方程式を求解する手法として、反復解法が用いられることがある。その反復解法としては、Ｎｅｗｔｏｎ法が一般的である。Ｎｅｗｔｏｎ法では、反復の第ｉ回目の未知変数Ｘ（ｉ）の値に基いて、第ｉ＋１回目の未知変数Ｘ（ｉ＋１）の値が決定される。そして、この処理を繰り返す事によって、得られる未知変数Ｘを真の解に近づけてゆく。より分かり易く説明するために、未知変数Ｘの数が１個である場合の例を挙げて説明する。図２Ａ、ＢはＮｅｗｔｏｎ法の求解処理を説明する為の説明図である。図２Ａに示されるように、まず未知変数Ｘの初期値Ｘ０が設定される。次に、Ｘ＝Ｘ０におけるＦ（Ｘ）の接線（Ｆ’（Ｘ０））が求められ、（Ｆ’（Ｘ０））とＸ軸との交点が求められる。この交点におけるＸの値がＸ１とされ、再び、Ｘ＝Ｘ１におけるＦ（Ｘ）の接線（Ｆ’（Ｘ１））とＸ軸との交点が求められる。このような処理を繰り返す事で、得られる未知変数Ｘｉの値が、Ｆ（Ｘ）＝０の真の解に近づいていく。そして、得られた未知変数Ｘｉ＋１のＸｉからの変化量が、予め指定された許容誤差範囲内に収まった場合（収束した場合）、得られた値が十分に真の解に近いものとみなされ、結果として出力される。尚、初期値Ｘ０は、通常、ユーザによって決定される。
【０００５】
上述の反復解法を用いた場合、得られる未知変数Ｘが収束するか否かは、初期値Ｘ０に依存する。例えば、図２Ｂに示される例のように、Ｆ’（Ｘ０）＝０とＸ軸の交点がＸ１であったとする。そして、Ｆ’（Ｘ１）とＸ軸との交点がＸ０であったとする。このような場合、得られる未知変数Ｘは、Ｘ０とＸ１との繰り返しとなり、何度繰り返しても真の解に近づくことはない。ユーザは、初期値Ｘ０を再設定しなければならず、負担がかかる。また、収束しない原因としては、初期値Ｘ０以外に、反復の回数、収束を規定する許容誤差範囲の値などの他の要因も考えられる。収束しない原因がわからなければ、ユーザは、初期値Ｘ０、反復回数上限、許容誤差範囲などの多数の設定を再設定することとなり、負担は更に増す。
【０００６】
一方で、得られる未知変数Ｘが収束するか否かは、被シミュレーション対象の回路構成にも依存する。ダイオードやトランジスタ等の電気特性が非線形であるデバイスが存在する場合、回路方程式が非線形方程式となり、収束が困難となることがある。
【０００７】
ダイオード特性を有する部分（例えば、ダイオード素子、ＭＯＳＦＥＴのソース−基板間に存在するｐｎ接合、など）を含む非線形回路のシミュレーションを行う手法として、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法が知られている。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法とは、ダイオード特性部分に並列に仮想抵抗を導入した仮想回路を想定して、回路方程式の収束性を向上させるものである（図３Ａ、Ｂ参照）。以下に、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法によるシミュレーション手法を説明する。まず、ダイオードと並列に、仮想コンダクタンスＧｍｉｎを有する仮想抵抗を導入した、仮想回路が想定される。次にこの仮想回路の回路方程式が作成され、反復解法で求解される。収束解が得られると、仮想コンダクタンスＧｍｉｎを小さくする。続いて、Ｇｍｉｎの小さくされた仮想回路の回路方程式が作成され、再び反復解法により求解される。この際、反復解法の初期値（回路方程式の未知変数に代入する初期値）としては、前回の反復解法で得られた収束解が用いられる。この処理が繰り返される事で、仮想コンダクタンスＧｍｉｎが逓減され、仮想回路が本来の開放状態（仮想抵抗を含まない元の回路構成）へと漸近していく。そして、仮想コンダクタンスＧｍｉｎが十分に小さくなった時の収束解が、被シミュレーション回路のシミュレーション結果とされる。
【０００８】
尚、図４に、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法の一例を示すフローチャートを示しておく。図４は、反復解法としてＮｅｗｔｏｎ法を用い、仮想コンダクタンスを逓減させるにあたって１０づつ除算を行い、仮想コンダクタンスＧｍｉｎが十分小さくなったと判断する基準値を１×１０−１２とした場合の例を示している。
【０００９】
このようなＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法では、仮想コンダクタンスをどのように逓減させていくかが重要である。例えば、回路方程式の収束解が得られる度に、ユーザが次の仮想コンダクタンスを設定するような場合、必ずしも適切に仮想コンダクタンスを逓減できるとは限らず、途中で収束解が得られなくなることが考えられる。収束解が得られない場合、ユーザは仮想コンダクタンスを設定する為のパラメータを見直さなければならず、作業量が増す。
【００１０】
特許文献１は、こうした逓減手法の見直しの負担を軽減するためのＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法を開示している。この特許文献１によれば、仮想コンダクタンスは、初期値から緩和値に基いて逓減されていく。逓減の途中で収束解が得られなくなった場合、仮想コンダクタンスを初期値に戻すとともに緩和値を変更し、再度仮想コンダクタンスを逓減させていく。
【００１１】
図５は、特許文献１のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の動作を示すフローチャートである。図５を参照して、特許文献１のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法について詳しく説明する。
【００１２】
まず、ステップＳ１０１で、回路情報が入力される。
【００１３】
ステップＳ１０２で、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における演算に用いる緩和値の変更回数を規定するカウンタｋが、初期値１に設定される。緩和値とは、仮想コンダクタンスを減少させる演算に用いる値である。
【００１４】
ステップＳ１０３で、仮想コンダクタンスＧｍｉｎの緩和因子Ｇｒａｍｐが基準値Ｇｒａｍｐ０に設定される。なお、緩和因子Ｇｒａｍｐとは、１０Ｇｒａｍｐの形で仮想コンダクタンス基準値Ｇｍｉｎ０に乗算されることにより、仮想コンダクタンスＧｍｉｎの値を緩和するパラメータのことである。また、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理一回当たりの緩和因子Ｇｒａｍｐの変更回数をカウントするカウンタｊの値が、初期値１に設定される。さらに、仮想コンダクタンスＧｍｉｎの緩和割合Ｇｒａｔｅ１（ｋ）が、緩和割合初期値Ｇｒａｔｅ０、カウンタｋ、および緩和割合減少率Ｇｒｉｎｃの各値を用いて設定される。具体的には、図５に示すように、Ｇｒａｔｅ１（ｋ）＝Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃと設定される。
【００１５】
ステップＳ１０４で、仮想コンダクタンスＧｍｉｎ（ｊ）が、仮想コンダクタンス基準値Ｇｍｉｎ０および緩和因子Ｇｒａｍｐの各値に基いて、所定の初期値に設定される。なお、仮想コンダクタンスＧｍｉｎ（ｊ）は、具体的には図５に示すように、Ｇｍｉｎ（ｊ）＝Ｇｍｉｎ０×１０Ｇｒａｍｐと設定される。
【００１６】
ステップＳ１０５で、回路方程式が作成され、Ｎｅｗｔｏｎ法により、未知変数Ｘが計算される。ステップＳ１０６で、Ｎｅｗｔｏｎ法により収束したか否かが判断される。収束していない場合、ステップＳ１０７で、反復回数が上限を超えたかが判断される。上限を超えていない場合、再びＳ１０５へ戻り、前回のＳ１０５で計算された値が未知変数Ｘに代入され、前回と同様にして未知変数Ｘが計算される。
【００１７】
また、ステップＳ１０６にて収束と判断される度に、緩和値を用いて演算することにより、仮想コンダクタンスＧｍｉｎの値が逓減される。具体的には、ステップＳ１０８で、Ｇｍｉｎが十分に緩和されているかどうかが判断される。十分に緩和されている場合、結果が出力される。Ｓ１０８で十分に緩和されていない場合、ステップＳ１０９で緩和因子Ｇｒａｍｐが調整される。具体的には、現在のＧｒａｍｐからＧｒａｔｅだけ差し引く処理を行って、Ｇｒａｍｐの値を減少させる。そして、ステップＳ１０４に戻る。Ｇｒａｍｐが減少しているので、ステップＳ１０４では、仮想コンダクタンスＧｍｉｎが前回よりも小さい値に設定される。
【００１８】
一方、Ｓ１０７にて、Ｎｅｗｔｏｎ法の反復回数が上限値であるＩＴＬ１を超えた場合は、カウンタｋがインクリメントされ、ステップＳ１１０の処理が行われる。Ｓ１１０では、Ｇｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数が上限を超えたかを判断する。Ｓ１１０で上限を超えている場合、結果を出力する。上限を超えていない場合、再度Ｓ１０３に戻る。Ｓ１０３では、ｋがインクリメントされているので、緩和割合Ｇｒａｔｅの値が前回よりも増加される。すなわち、緩和割合減少率Ｇｒｉｎｃの値だけ、緩和割合Ｇｒａｔｅの値が増加される。そしてステップＳ１０３〜Ｓ１１０の処理が繰り返される。前回の処理に比べると、Ｇｒａｔｅが増加しているので、Ｓ１０９における処理でＧｒａｍｐの減少量がより大きくなる。従って、仮想インダクタンスＧｍｉｎの逓減の幅が、数値的に前回よりも大きくなる。
【００１９】
【特許文献１】特開２００４−２５２７１１号  公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
図６は、特許文献１の技術を用いた場合に、仮想コンダクタンスＧｍｉｎがどの様に変更されるかを説明する説明図である。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの初期値として、１×１０−６が設定されたとする。また、Ｇｒａｔｅの初期値として、１．５が設定されたとする。また、仮想コンダクタンスＧｍｉｎが１×１０−１２以下となった場合に、本来の開放状態（十分に仮想コンダクタンスが小さくなった）とみなされるとする。この場合、仮想コンダクタンスＧｍｉｎは、回路方程式の収束解が得られる度に、１０１．５で除算された値に変更されていく。すなわち、仮想コンダクタンスＧｍｉｎは、初期値１×１０−６から、１×１０−７．５、・・・１×１０−１０．５、１×１０−１２と順に逓減される。逓減の途中で収束解が得られなかった場合（非収束の場合）、仮想コンダクタンスＧｍｉｎが初期値１×１０−６に戻されるとともに、Ｇｒａｔｅが１．５から１．６に変更される。そして、今度は、仮想コンダクタンスＧｍｉｎを、初期値１×１０−６から、１×１０−７．６、・・・１×１０−１０．８、１×１０−１２．４と、１０１．６で除算しつつ、逓減していく。
【００２１】
この特許文献１の技術では、仮想コンダクタンスが初期値である時に求解処理に成功することが前提となっている。つまり、仮想コンダクタンスが初期値の時に求解処理が成功しない場合については考慮されていない。図７は、仮想コンダクタンスが初期値の時に求解処理が成功しない場合の処理内容を説明する説明図である。図７に示されるように、仮想コンダクタンスが初期値（１×１０−６）であるときに非収束となった場合、Ｇｒａｔｅは変更されるものの、仮想コンダクタンスは初期値１×１０−６のままである。仮想コンダクタンスが変更されないので、何度処理を繰り返しても求解に成功する事はなく、最終的にアボートする。
【００２２】
具体的に説明すると、図５のステップＳ１０４において、Ｇｍｉｎ（ｊ）の値が、仮想コンダクタンス基準値（Ｇｍｉｎ０）及びＧｒａｍｐに基いて設定される。ここで、仮想コンダクタンスＧｍｉｎを初期値とした時の回路方程式において、未知変数Ｘが所定の反復回数以内に収束しないとする（Ｓ１０７でＹｅｓ）。ステップＳ１１０にてＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の終了判定を満たさないうちはステップＳ１０３へ戻る。Ｓ１０３では、カウンタｋがインクリメントされているため、仮想コンダクタンスの緩和割合Ｇｒａｔｅ１（ｋ）の値が更新される。次に、ステップＳ１０４に戻ってくるが、仮想コンダクタンスＧｍｉｎを設定するにあたり、仮想コンダクタンス基準値Ｇｍｉｎ０および緩和因子Ｇｒａｍｐは変更されていないので、仮想コンダクタンスＧｍｉｎも変更されない。仮想コンダクタンスＧｍｉｎが更新されないため、Ｓ１０５〜１０７における求解処理では前回と同様に収束しない。従って、Ｓ１０７で再び反復回数が上限を超え、カウンタｋの値だけが更新され続ける。そして最終的には、ステップＳ１１０の終了条件を満たし、終了する。
【００２３】
更に具体的に、数値を挙げて説明する。仮想コンダクタンス基準値Ｇｍｉｎ０＝１×１０−１２［Ｓ（ジーメンス）］、Ｇｒａｍｐ０＝６、Ｇｒａｔｅ０＝１．５、Ｇｒｉｎｃ＝０．１、ＩＴＬ１（Ｎｅｗｔｏｎ法反復回数の上限）＝１００［回］、Ｎｕｍｇｒ（Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数上限）＝５［回］であるとする。
【００２４】
Ｓ１０２でｋ＝１が設定される。
【００２５】
Ｓ１０３で、Ｇｒａｔｅ１（ｋ）＝Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃ＝１．５＋（１−１）×０．１＝１．５により、Ｇｒａｔｅ１が１．５に設定される。
【００２６】
Ｓ１０４で、Ｇｍｉｎ（１）＝Ｇｍｉｎ０×１０Ｇｒａｍｐ＝１×１０−１２×１０６＝１×１０−６により、Ｇｍｉｎ（１）が１×１０−６に設定される。
【００２７】
ここで、Ｓ１０５〜１０７において、Ｎｅｗｔｏｎ法で収束解が得られず、かつ、ステップＳ１０７において反復回数がＩＴＬ１＝１００［回］を超えるという所定の打ち切り条件を満たしてしまったとする。この場合には、ｋ＝２にインクリメントされ、ステップＳ１１０にてｋ＝２＜Ｎｕｍｇｒ＝１０［回］と判断された上で、ステップＳ１０３に戻る。
【００２８】
Ｓ１０３では、Ｇｒａｔｅ１（ｋ）＝Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃ＝１．５＋（２−１）×０．１＝１．６より、Ｇｒａｔｅが１．６に設定される。また、Ｓ１０４では、Ｇｍｉｎ（１）が前回と同様１×１０−６に設定される。
【００２９】
ここで、Ｇｍｉｎ（１）＝１×１０−６の条件下では収束しないことは明らかなので、再度、Ｓ１０５〜１０６でＮｅｗｔｏｎ法を試行しても収束解は得られない。その結果、ｋ＝３とされ、ステップＳ１１０に進む。
【００３０】
このようにして、カウンタｋの値のインクリメントと、Ｎｅｗｔｏｎ法の試行だけが繰り返される。最終的には、ステップＳ１１０にてｋ＝１０≧Ｎｕｍｇｒ＝１０［回］と判断される。そして計算結果出力部にて真値が得られなかった旨が出力される。
【００３１】
結果として、ユーザは、各種パラメータの再設定という煩わしい作業を強いられることになる。
【００３２】
また、求解処理に成功するように仮想コンダクタンスの基準値を選ぶことは、ユーザにとって難しい。一見、仮想コンダクタンスの値を大きくすればするほど、求解処理の成功率が高まる様に思えるが、仮想コンダクタンスの値と収束可否の関係は離散的となることもある。図８は、ある被シミュレーション回路における、仮想コンダクタンスの値と、非収束節点数との関係を示したグラフである。非収束節点数は、Ｎｅｗｔｏｎ法による求解処理を行った際の、収束しなかった未知変数の数を示している。すなわち、非収束節点数が０である場合には、収束しなかった未知変数がなかったことを示し、収束した事を示している。また、初期条件（未知変数Ｘに代入する初期値、収束判定用のパラメータ）は、試行した全てのＧｍｉｎについて同じとした。図８に示されるように、仮想コンダクタンスを１×１０−１０近傍の２点とした場合、未知変数が０となり、求解に成功した。しかしながら、仮想コンダクタンスを１×１０−６とした場合、求解に成功する１×１０−１０近傍の値よりも大きな値であるにも関わらず、１個の未知変数が非収束となり、求解が成功しなかった。
【００３３】
本発明は上記の点に鑑みてなされたものであり、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を行うに際して、ユーザに強いられてきたパラメータの見直しの負担を軽減する事のできる、回路シミュレーション装置及び回路シミュレーションプログラムを提供するものである。
【課題を解決するための手段】
【００３４】
以下に、［発明を実施するための最良の形態］で使用される番号・符号を用いて、［課題を解決するための手段］を説明する。これらの番号・符号は、［特許請求の範囲］の記載と［発明を実施するための最良の形態］との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、［特許請求の範囲］に記載されている発明の技術的範囲の解釈に用いてはならない。
【００３５】
本発明の回路シミュレーション装置は、被シミュレーション対象回路の回路構成を示す回路情報、及び仮想コンダクタンス決定用パラメータ、が予め格納された記憶部（１０）と、その回路情報に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの初期値を探索する初期値探索部（１）と、その初期値探索部における探索結果に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法により、その被シミュレーション対象回路のシミュレーションを行うＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部（２）と、そのＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部のシミュレーション結果を出力する出力部（６０）と、を具備する。
【００３６】
このような構成によれば、初期値探索部により、収束解を得ることのできる初期値が探索される。従って、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を実行する際に、初期値の段階では確実に収束解を得る事ができる。すなわち、ユーザ等により設定されたパラメータに基いて決定された最初の仮想コンダクタンス値では、収束解が得られなかったとしても、必ずしもパラメータの再設定を行う必要はない。その結果、ユーザに強いられる負担が軽減される。
【発明の効果】
【００３７】
本発明によれば、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を行うに際して、ユーザが強いられてきたパラメータの見直しの負担を軽減する事のできる回路シミュレーション装置及び回路シミュレーションプログラムが提供される。
【発明を実施するための最良の形態】
【００３８】
（第１の実施形態）
図９は、本実施の形態に係る回路シミュレーション装置の概略構成を表すブロック図である。この回路シミュレーション装置は、記憶部１０と、初期値探索部１と、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２と、計算結果出力部６０とを備えている。
【００３９】
記憶部１０は、ハードディスク等に例示される。記憶部１０には、被シミュレーション対象回路の回路構成を特定する回路情報（回路内に含まれる素子やその接続関係の情報）が記憶されている。
【００４０】
また、記憶部１０には、仮想コンダクタンスの初期値を決定する為のパラメータ（以下、仮想コンダクタンス決定用パラメータ）、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法で仮想コンダクタンスを逓減させる際に用いられるパラメータ（以下、逓減用パラメータ）、反復解法における反復回数の上限を規定するパラメータ（以下、ＩＴＬ１）、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数の上限を規定するパラメータ（以下、Ｎｕｍｇｒ）、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法において十分に仮想コンダクタンスが逓減されたかどうかを判断する為のパラメータ（以下、逓減判断用パラメータ）、及び未知変数Ｘの初期値等が、予め設定されている。
【００４１】
尚、仮想コンダクタンス決定用パラメータとして、具体的には、仮想コンダクタンスの基準値（以下、Ｇｍｉｎ０）、Ｇｇｒａｉｎ（細粒度上限値）、及び探索範囲決定用パラメータＧｓｅａｒｃｈが設定されている。また、逓減用パラメータとして、具体的には、Ｇｒａｔｅ０（緩和割合基準値）、及びＧｒｉｎｃ（緩和割合減少率）が設定されている。各値の持つ意味については、動作を詳細に説明する段にて明らかにする。これらの各種パラメータは、例えば、キーボードなどの入力装置（図示せず）を介してユーザにより入力されることで、予め記憶部１０に格納されている。
【００４２】
初期値探索部１及びＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２は、ＣＰＵ２０、入出力インターフェース３０、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｌｙ）４０、及びＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｌｙ）５０を有している。初期値探索部１及びＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２は、ＲＯＭ４０に格納された回路シミュレーションプログラムがＲＡＭ５０に読み込まれて実行される事によって、その機能を実現するものである。
【００４３】
計算結果出力部６０は、初期値探索部１及びＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２におけるシミュレーション結果を出力するものであり、ディスプレイやプリンタ等に例示される。
【００４４】
図１０は、本実施形態における回路シミュレーション装置が動作する際の、データの全体的な流れを示す説明図である。図１０に示されるように、まず初期値探索部１が記憶部１０から回路情報及び各種パラメータを取得する。初期値探索部１は、取得した回路情報、パラメータに基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を行うにあたっての初期値を探索する。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２は、初期値探索部１における探索結果に基いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を実行する。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２による処理結果（求解データ又はエラーデータ）は、計算結果出力部６０に出力される。尚、初期値探索部１において、初期値を特定できなかった場合には、そのエラーデータが計算結果出力部６０に出力される。
【００４５】
以下に、図１１を参照して、初期値探索部１における動作を詳細に説明する。尚、以下の説明において、記憶する、設定するといった用語を用いる場合、ＲＡＭ５０等の記憶装置に記憶することを示すものとする。
【００４６】
ステップＳ１；回路情報の取得
まず、ステップＳ１において、初期値探索部１は、記憶部１０から、回路情報、及び処理に必要な各種パラメータを取得する。また、カウンタｊの値を初期値１に設定しておく。尚、カウンタｊは、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法により仮想コンダクタンスを逓減させる際に、仮想コンダクタンスを小さくした回数を表す値である。
【００４７】
ステップＳ２；Ｇｍｉｎ探索範囲の決定
次に、ステップＳ２において、初期値を探索するにあたっての範囲を規定するＧｒａｎｇｅを設定する。Ｇｒａｎｇｅは、Ｇｍｉｎ０とＧｓｅａｒｃｈとに基いて設定される。具体的には、Ｇｒａｎｇｅ＝Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ−Ｇｍｉｎ０として設定される。初期値探索部１は、以下の動作において、本ステップで設定されたＧｒａｎｇｅを用い、「Ｇｍｉｎ０」〜「Ｇｍｉｎ０＋Ｇｒａｎｇｅ」の範囲で、仮想コンダクタンスＧｍｉｎの初期値を探索することとなる。
【００４８】
次に、Ｇｍｉｎ細粒度（以下、Ｇｓｔｅｐ）を表すカウンタｍが初期値１にリセットされ、次のステップＳ３に進む。Ｇｓｔｅｐは、２ｍ−１の形でＧｍｉｎの探索範囲（「Ｇｍｉｎ０」〜「Ｇｍｉｎ０＋Ｇｒａｎｇｅ」）を細分化するための値である。
【００４９】
ステップＳ３；探索リストの作成
次に、ステップＳ３において、Ｇｍｉｎ探索リスト（以下、Ｇｔａｂｌｅ）が作成される。Ｇｔａｂｌｅは、初期値を探索するにあたっての仮想コンダクタンスの候補値を要素として示すリストである。図１２（ａ）、（ｂ）に示されるように、Ｇｔａｂｌｅは、初期値を探索する範囲である「Ｇｍｉｎ０」〜「Ｇｍｉｎ０＋Ｇｒａｎｇｅ」を２ｍ−１分割する値（図中、Ａ、Ｂ）を要素として含む。すなわち、「Ｇｍｉｎ０」〜「Ｇｍｉｎ０＋Ｇｒａｎｇｅ」を２ｍ−１分割する値が、仮想コンダクタンスの候補値となる。Ｇｔａｂｌｅは、具体的には、以下に述べるような処理により作成される。
【００５０】
まず、Ｇｓｔｅｐが、Ｇｒａｎｇｅとカウンタｍに基いて設定される。具体的には、Ｇｓｔｅｐ＝Ｇｒａｎｇｅ÷２ｍ−１として設定される。
【００５１】
また、Ｇｔａｂｌｅ中の要素数（以下、要素数Ｎｕｍｇｔ）が計算される。要素数Ｎｕｍｇｔは、２ｍ−１で表される。
【００５２】
続いて、Ｇｔａｂｌｅの各要素が、基準値Ｇｍｉｎ０、Ｇｓｔｅｐ、及びカウンタｍに基いて設定される。具体的には、Ｇｔａｂｌｅ中のｎ番目の要素（Ｇｔａｂｌｅ［ｎ］（ｍ））が、Ｇｍｉｎ０＋Ｇｓｔｅｐ×ｎとして設定される。
【００５３】
尚、ｍ＝１の場合には、２ｍ−１＝１なので、Ｇｔａｂｌｅの要素数Ｎｕｍｇｔは１個となる。この１個の要素（Ｇｔａｂｌｅ［ｎ＝１］（ｍ＝１））は、Ｇｍｉｎ０＋Ｇｓｔｅｐ×１＝Ｇｍｉｎ０＋Ｇｓｔｅｐである。尚、Ｇｓｔｅｐ＝Ｇｒａｎｇｅ÷２ｍ−１＝Ｇｒａｎｇｅであるので、Ｇｍｉｎ０＋Ｇｓｔｅｐ＝Ｇｍｉｎ０＋Ｇｒａｎｇｅとなる。既述のように、Ｇｒａｎｇｅ＝Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ−Ｇｍｉｎ０であるから、その１個の要素は、結果的に、Ｇｍｉｎ０＋Ｇｒａｎｇｅ＝Ｇｍｉｎ０＋Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ−Ｇｍｉｎ０＝Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈという値となる。
【００５４】
また、ステップＳ３では、作成したＧｔａｂｌｅのソートが行われる。この処理は、Ｇｔａｂｌｅ中に複数の要素が存在する場合に、より収束する可能性が高いと考えられる要素をリストの先頭側に移動させる処理である。ｍ＝１の場合には、Ｇｔａｂｌｅ中に１個しか要素がないので、この処理は行わなくてもよい。Ｇｔａｂｅｌｅ中に複数の要素がある場合にどのようにソートされるかは、後述する。
【００５５】
次に、Ｇｔａｂｌｅのポインタをあらわすｌが初期値１にリセットされて、ステップＳ４に進む。なお、Ｇｔａｂｌｅのポインタとは、現在探索しているＧｔａｂｌｅ中の要素位置を記憶するためのカウンタである。ｍ＝１、ｌ＝１の場合、そのポインタは、Ｇｔａｂｌｅ中の１番目の要素、すなわち「Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ」を示していることになる。
【００５６】
ステップＳ４；仮想コンダクタンスＧｍｉｎの設定
次に、ステップＳ４で、仮想コンダクタンスＧｍｉｎの値が設定される。Ｇｍｉｎには、Ｇｔａｂｌｅ中でポインタにより示されている要素が採用される。すなわち、Ｇｍｉｎは、Ｇｔａｂｌｅ［ｌ］（ｍ）として設定される。ユーザがパラメータを設定してから最初（ｍ＝１、ｌ＝１の場合）に設定されるＧｍｉｎの値（第１候補値）は、「Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ」ということになる。
【００５７】
ステップＳ５；回路方程式の作成
次に、ステップＳ５で、下記式１で示される回路方程式が作成される。
（式１）；Ｆ（Ｘ，Ｇｍｉｎ）＝０，  Ｘ∈ＲＮ
ここで作成される方程式は、被シミュレーション回路に仮想抵抗が導入された仮想回路についての、求めたいパラメータを未知変数Ｘとした回路方程式である。その仮想回路は、仮想抵抗が、被シミュレーション回路中のダイオード特性を有する部分に並列に導入されたものである。また、導入される仮想抵抗の仮想コンダクタンスＧｍｉｎの値は、ステップＳ４で設定された要素の値である。また、上式１中、Ｎは未知変数Ｘの個数を示している。未知変数Ｘの個数は複数の場合もある。求めたいパラメータである未知変数Ｘとは、例えば節点電位や電流である。
【００５８】
ステップＳ６〜８；Ｎｅｗｔｏｎ法による求解処理
次に、ステップＳ６〜８の処理によって、Ｎｅｗｔｏｎ法により、ステップＳ５で作成された回路方程式の解が求められる。Ｎｅｗｔｏｎ法を行うにあたって、まず、Ｎｅｗｔｏｎ法の反復回数を示すカウンタｉが初期値１にリセットされる。
【００５９】
ステップＳ６では、下記式２を実行して、ｉ番目の未知変数Ｘ（ｉ）に基き、ｉ＋１番目の未知変数Ｘ（ｉ＋１）を求める。
（式２）；Ｘ（ｉ＋１）＝Ｘ（ｉ）−Ｆ（Ｘ，Ｇｍｉｎ（１））／（∂Ｆ／∂Ｘ）
尚、ｉ＝１である場合には、予め記憶部１０に設定された未知変数Ｘの初期値が、未知変数Ｘ（１）として採用される。
【００６０】
ステップＳ７では、ステップＳ６で得られた未知変数Ｘ（ｉ＋１）が、未知変数Ｘ（ｉ）と比較され、その差が予め設定された許容範囲内であるかどうかが判断される。許容範囲外であった場合には、未だ収束していないものとみなし、ｉをインクリメントして次のステップＳ８の処理に進む。一方、許容範囲内であった場合には、未知変数Ｘが収束したとみなし、ステップＳ１０の処理に進む。ステップＳ１０の処理については、後述する。
【００６１】
ステップＳ８では、Ｎｅｗｔｏｎ法の反復回数ｉの値が、予め設定された反復回数ＩＴＬ１を超えているか否かが判断される。超えていない場合には、ステップＳ６に戻り、Ｓ６〜８の処理を繰り返す。一方、超えていた場合には、次のステップＳ９に進む。
【００６２】
ステップＳ９；探索終了判定
Ｓ８で、Ｎｅｗｔｏｎ法の反復回数の上限を超えていた場合、初期値Ｇｍｉｎ（１）の探索を終了するか否かを判断する。図１３を参照しつつ、本ステップの動作の詳細を説明する。
【００６３】
まず、ステップＳ９−１において、Ｇｍｉｎ探索リストＧｔａｂｌｅ中の全要素について、求解処理が行われたかどうかを判断する。この判断は、カウンタｌをＧｔａｂｌｅの要素数Ｎｕｍｇｔと比較することで行われる。すなわち、カウンタｌが要素数Ｎｕｍｇｔ以上となっている場合には、全ての要素に対して求解処理が行われたものとみなし、次のステップＳ９−２に進む。カウンタｌが要素数Ｎｕｍｇｔよりも少ない場合には、未試行の要素がＧｔａｂｌｅ中に存在するものと判断し、ｌをインクリメントしてステップＳ４〜Ｓ８の処理を繰り返す。これにより、Ｇｔａｂｌｅ中の残りの要素に対する求解処理が続行される。
【００６４】
一方、ステップＳ９−２に進んだ場合、初期値の探索範囲が十分に細分化されたかどうかが判断される。具体的には、カウンタｍが細粒度上限値Ｇｇｒａｉｎと比較される。カウンタｍがＧｇｒａｉｎを超えている場合には、これ以上に初期値Ｇｍｉｎ（１）の探索範囲を細かくしても求解成功の可能性は低いと判断し、その旨を計算結果出力部３０に出力する。一方、カウンタｍがＧｇｒａｉｎを超えていない場合には、カウンタｍをインクリメントして、次のステップＳ９−３に進む。尚、Ｇｇｒａｉｎは、既述したように、予め記憶部１０に記憶されたパラメータである。
【００６５】
ステップＳ９−３では、非収束節点情報リスト（以下、Ｇｅｒｒｏｒ）が作成される。Ｇｅｒｒｏｒは、Ｓ４で設定された要素の値と、Ｓ５〜８の処理の結果である非収束節点数と対応関係を示す情報である。ここで、非収束節点数とは、Ｓ５で作成された回路方程式の未知変数Ｘのうち、Ｓ６〜８のＮｅｗｔｏｎ法による求解処理によって収束しなかった未知変数Ｘの数を表している。尚、Ｓ７で収束した場合には、非収束節点数が０であるという事になる（但し、収束した場合はＳ７でＳ１０に進むので、本ステップの処理は行われない）。具体的には、非収束節点情報リストＧｅｒｒｏｒ中の要素Ｇｅｒｒｏｒ［ｌ］（ｍ）が、Ｈ（Ｇｔａｂｌｅ［ｌ］（ｍ））で設定される。Ｈ（Ｇｔａｂｌｅ［ｌ］（ｍ））は、仮想コンダクタンスＧｍｉｎがＧｔａｂｌｅ中の要素Ｇｔａｂｌｅ［ｌ］（ｍ）であった場合に、非収束となった未知変数の数（非収束節点数）がＨ個であったことを示している。
【００６６】
ステップＳ３α；探索リストの作成
非収束節点数が、非収束節点情報格納リストＧｅｒｒｏｒに格納された後、再びステップＳ３の処理が行われる。説明の便宜上、ここで説明するステップＳ３を、ステップＳ３αと記載して、前回のステップＳ３と区別することにする。
【００６７】
ステップＳ３αでは、探索リストＧｔａｂｌｅが再度作成される。ステップＳ９−２の後でｍがインクリメントされているので、Ｇｔａｂｌｅの要素は、Ｇｍｉｎ０〜Ｇｍｉｎ０＋Ｇｒａｎｇｅを前回よりも更に細かく分割する値となる。例えば、図１２（ａ）（ｂ）に示されるように、前回のステップＳ３においてＧｔａｂｌｅ中の要素が｛Ａ、Ｂ｝であった場合、今回のステップＳ３αでは、図１２（ｃ）、（ｄ）に示されるように、探索範囲を更に細分割する｛ａ，ｂ｝もＧｔａｂｌｅ中の要素に加えられる。
【００６８】
また、ステップＳ３αでは、Ｇｔａｂｌｅを再作成した後に、Ｇｔａｂｌｅがソートされる。この際、ステップＳ９−３で作成されたＧｅｒｒｏｒの非収束節点数Ｈに基いて、ソートが行われる。Ｇｅｒｒｏｒ中において、非収束節点数Ｈの少なかった要素ほど、Ｎｅｗｔｏｎ法で収束に近い候補値であったと考えることができる。ソートにあたり、まずＧｅｒｒｏｒ中の非収束節点数Ｈの平均値Ｈａｖｅを算出する。そして、求解処理の行われた各要素の非収束節点数Ｈを、Ｈａｖｅと比較する。そして、Ｇｅｒｒｏｒ中で非収束節点数ＨがＨａｖｅよりも小さい要素を把握しておく。更に、Ｓ３αで再作成されたＧｔａｂｌｅ中の要素のうち、把握しておいたＧｅｒｒｏｒ中の要素に対して数値的に隣接する要素を、先頭側に移動させる。尚、再作成されたＧｔａｂｌｅ中で、前回に求解処理の行われた候補値と同じ要素は、求解処理が重複するのを避けるため、削除してもよい。
【００６９】
図１４、１５を参照して、ソート処理をより具体的に説明する。図１４に示されるように、前回の処理で求解処理の行われた要素が、Ａ１、Ａ２、Ａ３、Ａ４、及びＡ５であったとする。また、これらの各要素の非収束点数が、それぞれＥ（Ａ１）、Ｅ（Ａ２）、・・・Ｅ（Ａ５）個であったとする。ステップＳ３αにおいて、Ｇｔａｂｌｅの要素として、Ｂ１（Ａ１−Ａ２間）、Ｂ２（Ａ２−Ａ３間）、・・・Ｂ５が採用され、Ｂ１を先頭としてＢ２、Ｂ３、Ｂ４、Ｂ５の順で並べられたとする（図１５（ａ）参照）。尚、この図の例では、前回に求解処理の行われたＡ１〜Ａ５は、再作成されたＧｔａｂｌｅ〜削除されている。ソートにあたって、まず、Ｇｅｒｒｏｒ中の非収束節点数Ｈの平均値Ｈａｖｅが算出される。そして、前回の各要素の非収束節点数とＨａｖｅが比較される。比較の結果、図１４に示されるように、Ａ１、Ａ２、及びＡ５の非収束節点数が、Ｈａｖｅより小さい値であったとする。再作成されたＧｔａｂｌｅ中の要素（Ｂ１〜Ｂ５）のうち、Ａ１、Ａ２、及びＡ５に数値的に隣接する要素は、Ｂ１、Ｂ２、Ｂ４、及びＢ５である。従って、Ｇｔａｂｌｅ中における要素の並びを、図１５（ｂ）に示されるように、Ｂ１、Ｂ２、Ｂ４、及びＢ５が先頭側となるように、ソートする。
【００７０】
ステップＳ３αでＧｔａｂｌｅが再作成されソートされた後、Ｓ４〜Ｓ９の処理が繰り返される。Ｓ４でＧｍｉｎを設定するにあたっては、Ｇｔａｂｌｅ中の要素が先頭から順に設定されていく。その結果、Ｓ４では、前回の求解処理で非収束節点数の少なかった値に近い要素から、優先的にＧｍｉｎに設定されていく。これにより、収束解が得られるまでに試行されるＧｍｉｎの候補値の数を減らす事ができ、処理時間を短縮させる事ができる。
【００７１】
ステップＳ１０；初期値Ｇｍｉｎ（１）設定用処理
ステップＳ７において、得られた未知変数Ｘの値が収束した場合には、収束した時の要素（候補値）が、Ｇｍｉｎ（１）に決定される。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２では、決定されたＧｍｉｎ（１）を初期値として、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法が実行される。ここでの初期値Ｇｍｉｎ（１）は、Ｎｅｗｔｏｎ法で収束解が得られることの保証された値である。従って、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法において、初期値Ｇｍｉｎ（１）の段階で解が得られずにアボートしてしまう事は無い。
【００７２】
尚、本実施形態では、後述する様に、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２において、初期値Ｇｍｉｎ（１）が、緩和基準値Ｇｒａｍｐ０を用いて、Ｇｍｉｎ（１）＝Ｇｍｉｎ０×１０Ｇｒａｍｐ０と設定されるものとする。従って、本ステップにおいて、Ｇｒａｍｐ０を設定することにより、Ｇｍｉｎ（１）の値がＧｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２に実質的に設定される。具体的には、Ｇｒａｍｐ０が、ｌｏｇ１０（Ｇｍｉｎ（１）／Ｇｍｉｎ０）として設定されるものとする。
【００７３】
続いて、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２における動作について説明する。図１６は、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２における動作を示すフローチャートである。Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２では、図１６に示されるフローチャートに従い、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法が実行され、被シミュレーション回路の回路方程式が求解される。
【００７４】
ステップＳ１１；カウンタリセット
まず、カウンタｋを初期値１にリセットする。このカウンタｋは、緩和割合Ｇｒａｔｅの変更回数を示す値である。
【００７５】
ステップＳ１２；緩和割合Ｇｒａｔｅの設定
次に、緩和割合Ｇｒａｔｅを設定する。Ｇｒａｔｅは、緩和割合減少率Ｇｒｉｎｃ、緩和割合初期値Ｇｒａｔｅ０、及びカウンタｋの値に基いて設定される。尚、Ｇｒｉｎｃ及びＧｒａｔｅ０は、既述の通り、記憶部１０に記憶されたパラメータである。具体的には、Ｇｒａｔｅは、Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃと設定される。
【００７６】
また、ステップＳ１２では、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法における逓減の回数を規定するカウンタｊが初期値１にリセットされる。
【００７７】
ステップＳ１３；仮想コンダクタンスＧｍｉｎ（ｊ）の設定
続いて、Ｎｅｗｔｏｎ法による求解処理を行うにあたっての仮想コンダクタンスＧｍｉｎ（ｊ）が設定される。初期値（ｊ＝１）の場合には、Ｇｍｉｎ（ｊ）＝Ｇｍｉｎ０×１０Ｇｒａｍｐ０と設定される。既述のように、Ｇｒａｍｐ０は初期値探索部１での処理によって設定された値であるので、初期値探索部１で求解に成功した時の値がＧｍｉｎ（１）に設定される事となる。
【００７８】
ステップＳ１４；回路方程式の作成
次に、ステップＳ１４において、Ｓ１３で設定された仮想コンダクタンスＧｍｉｎ（ｊ）の値に基き、回路方程式が作成される。この処理は、ステップＳ５の処理と同様である。
【００７９】
ステップＳ１５〜１７；Ｎｅｗｔｏｎ法による求解処理
次に、ステップＳ１５〜１７で、Ｎｅｗｔｏｎ法による求解処理が行われる。Ｓ１５〜１７における処理も、Ｓ６〜８の処理と同様である。尚、Ｓ１６において回路方程式の未知変数Ｘが収束した場合には、ステップＳ１８に進む。また、ステップＳ１７においてＮｅｗｔｏｎ法の反復回数が上限を超えた場合には、ステップＳ２０に進む。
【００８０】
ステップＳ１８；十分に逓減されたかの判断
ステップＳ１６にて、未知変数Ｘが収束した場合には、仮想コンダクタンスＧｍｉｎ（ｊ）の値が予め設定された逓減判断用パラメータと比較される。Ｇｍｉｎ（ｊ）が逓減判断用パラメータよりも大きい場合には、未だ仮想抵抗の影響が残存していると考え、カウンタｊをインクリメントしてステップＳ１９へ進む。一方、Ｇｍｉｎ（ｊ）が逓減判断用パラメータよりも小さければ、仮想コンダクタンスの値が十分に逓減されたものとみなされる。すなわち、Ｓ１４で作成した仮想回路の回路方程式が、被シミュレーション回路の回路方程式と同じであるとみなされ、得られた未知変数Ｘの値が被シミュレーション回路のシミュレーション結果として出力される。
【００８１】
ステップＳ１９；Ｇｍｉｎの除算
ステップＳ１９では、Ｇｍｉｎの値が１０Ｇｒａｔｅで除算される計算が行われる。そしてステップＳ１３に戻り、１０Ｇｒａｔｅで除算されたＧｍｉｎが、新たなＧｍｉｎとして設定される。すなわち、ｊ＋１番目のＧｍｉｎ（ｊ＋１）は、ｊ番目のＧｍｉｎ（ｊ）を用いて、Ｇｍｉｎ（ｊ＋１）＝Ｇｍｉｎ（ｊ）÷１０Ｇｒａｔｅと設定される。そして、Ｓ１３〜１８の処理が繰り返されることにより、仮想コンダクタンスＧｍｉｎ（ｊ）が逓減されていく。
【００８２】
ステップＳ２０；Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数の判断
一方、Ｓ１７でＮｅｗｔｏｎ法の反復回数が上限を超えた場合、カウンタｋがインクリメントされた上、ｋがＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数上限Ｎｕｍｇｒを超えたか否かが判断される。ｋがＮｕｍｇｒを超えた場合、処理を終了して結果を出力する。
【００８３】
一方、ｋがＮｕｍｇｒ以下である場合には、ステップＳ１２へ戻り、緩和割合Ｇｒａｔｅが再設定され、Ｓ１２〜２０の処理が繰り返される。尚、Ｓ１２では、既述のように、Ｇｒａｔｅが、Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃと設定される。ｋがインクリメントされているので、Ｇｒａｔｅは、前回のＧｒａｔｅに対してＧｒｉｎｃだけ加算された値となる。これによって、Ｓ１３から１８の処理では、Ｎｅｗｔｏｎ法で収束解が得られる度に、前回よりも数値的に広い幅で、仮想コンダクタンスＧｍｉｎ（ｊ）が逓減されていくことになる。
【００８４】
以上説明したステップＳ１〜２０の処理により、被シミュレーション回路のシミュレーションが行われる。尚、本実施形態では、ステップＳ１２でカウンタｊが１にリセットされる場合について説明したが、ｊ＝１の場合については、ステップＳ１〜１０の処理で既に求解済みであると捉えることができる。従って、ステップＳ１２において、カウンタｊが２に初期化されるようにしてもよい。この場合、ｊ＝２の場合のステップＳ１５〜１７では、Ｎｅｗｔｏｎ法の未知変数Ｘの初期値として、Ｓ１〜１０の処理で求解に成功した時に得られた値が代入される。
【００８５】
本実施形態の回路シミュレーション装置によれば、初期値探索部１によって、Ｎｅｗｔｏｎ法で収束に導くことの出来る仮想コンダクタンスの値が探索される。そして、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２によって、探索された初期値に基きＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法が試行される。従来例で説明した特許文献１では、ユーザがパラメータ設定を一度行うと、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法の仮想コンダクタンス初期値Ｇｍｉｎ（１）が一つの値に強制的に決定される。従って、Ｇｍｉｎ（１）の段階でＮｅｗｔｏｎ法による収束解が得られなければ、アボートする他はない。これに対して、本実施形態では、ユーザが一度パラメータ設定を行えば、結果的に複数の候補値の中からＮｅｗｔｏｎ法で収束に導くことの出来るＧｍｉｎ（１）が探索されることとなる。従って、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法において、初期値Ｇｍｉｎ（１）の段階でアボートしてしまう可能性を、従来よりも低くすることができる。これにより、パラメータの再設定というユーザにとって煩瑣な作業を少なくさせることが可能となる。
【００８６】
また、初期値探索部１、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部２の処理では、求解できる確率が従来よりも下がる処理は一切行われていない。従って、本実施形態では、従来のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法よりも、最終的に求解することのできる可能性が、初期値探索処理を行う分だけ、実質的に高められている。すなわち、回路方程式の求解処理にて解が求めやすくなる。
【００８７】
また、ステップＳ３において、前回の非収束節点数に基き、探索リストがソートされるので、Ｎｅｗｔｏｎ法によって収束解が求められるまでの試行回数を少なくすることができる。
【００８８】
以下に、具体的な数値を用いて、本実施形態の動作例を比較例（図５で示したフロー）と比較しつつ説明する。
【００８９】
尚、動作例及び比較例の説明にあたり、予め設定されるパラメータが、次のような値であったとする。
比較例；Ｇｍｉｎ０＝１×１０−１２［Ｓ（ジーメンス）］、Ｇｒａｍｐ０＝６、Ｇｒａｔｅ０＝１．５、Ｇｒｉｎｃ＝０．１、ＩＴＬ１＝１００［回］、Ｎｕｍｇｒ＝５［回］、
動作例；Ｇｍｉｎ０＝１×１０−１２［Ｓ（ジーメンス）］、Ｇｓｅａｒｃｈ＝６、Ｇｒａｔｅ０＝１．５、Ｇｒｉｎｃ＝０．１、ＩＴＬ１＝１００［回］、Ｎｕｍｇｒ＝５［回］、Ｇｇｒａｉｎ＝１０。
また、仮想コンダクタンスＧｍｉｎ（１）が１×１０−６［Ｓ］である場合には、Ｎｅｗｔｏｎ法によって収束解が得られずに、ＩＴＬ１を超えてしまうものとする。
【００９０】
（比較例）
上記のパラメータの設定された状態で、図５で示した従来例の処理を行ったとする。この場合、Ｓ１０３で、ｊ＝１にセットされ、Ｇｒａｍｐ＝Ｇｒａｍｐ０＝６と設定される。また、Ｇｒａｔｅ１＝Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃ＝１．５＋（１−１）×Ｇｒｉｎｃ＝１．５と設定される。そして、Ｓ１０４で、Ｇｍｉｎ（１）が、Ｇｍｉｎ（１）＝Ｇｍｉｎ０×１０Ｇｒａｍｐ＝１×１０−１２×１０６＝１×１０−６［Ｓ］と設定される（Ｓ１０４）。仮想コンダクタンスＧｍｉｎ（１）が１×１０−６［Ｓ］である場合には、Ｓ１０７で反復回数ＩＴＬ１を超えてしまうので、ｋが２にインクリメントされた上でＳ１１０の処理が行われ、再びＳ１０３の処理が行われる。Ｓ１０３では、Ｇｒａｔｅ１が、Ｇｒａｔｅ１＝Ｇｒａｔｅ０＋（ｋ−１）×Ｇｒｉｎｃ＝１．５＋（２−１）×０．１より、１．６に変更される。そしてＳ１０４の処理が行われる。Ｓ１０４では、Ｇｍｉｎ（１）が、Ｇｍｉｎ０×１０Ｇｒａｍｐ＝１×１０−１２×１０６＝１×１０−６［Ｓ］より、前回と同じ１×１０−６［Ｓ］に設定される。従って、何度Ｓ１０３〜１１０の処理を繰り返しても、Ｎｅｗｔｏｎ法で収束解が得られることは無く、最終的にはＳ１１０でＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の反復回数が上限を超え、エラーが出力される。
【００９１】
（動作例）
図１１に示されるように、まず、Ｓ２において、ｊ＝１に設定される。また、探索範囲Ｇｒａｎｇｅが、Ｇｒａｎｇｅ＝Ｇｍｉｎ０×１０Ｇｓｅａｒｃｈ−ｇｍｉｎ０＝１×１０−１２×１０６−１×１０−１２＝１×１０−６−１×１０−１２と設定される。ｍ＝１に初期化され、Ｓ３において、Ｇｓｔｅｐ＝Ｇｒａｎｇｅ÷２ｍ−１＝１×１０−６−１×１０−１２と設定される。また、Ｇｍｉｎ探索リストが、Ｇｔａｂｌｅ［１］＝Ｇｍｉｎ０＋Ｇｓｔｅｐ×ｎ＝１×１０−１２＋１×１０−６−１×１０−１２＝１×１０−６として作成される。そして、Ｓ４において、Ｇｍｉｎが、Ｇｔａｂｌｅ［１］＝１×１０−６に設定される。さらに、Ｓ５で回路方程式が作成され、Ｓ６〜８でＮｅｗｔｏｎ法による求解処理が行われる。但し、仮想コンダクタンスが１×１０−６［Ｓ］であるので、収束解は得られずにＳ９に進む。Ｓ９−１では、ｌ（＝１）がＮｕｍｇｔ以上であると判断され、ステップ９−２に進む。Ｓ９−２では、ｍ＝１＜Ｇｇｒａｉｎ＝１０［回］であるので、ｍを２にインクリメントしてＳ９−３に進む。Ｓ９−３において、非収束節点情報の値をＧｅｒｒｏｒ［ｌ］に格納し、再びＳ３の処理が行われる。Ｓ３では、ｍ＝２であるので、Ｇｓｔｅｐ＝Ｇｒａｎｇｅ÷２ｍ−１＝（１×１０−６−１×１０−１２）／２、Ｇｔａｂｌｅ［１］＝Ｇｍｉｎ０＋Ｇｓｔｅｐ×ｎ＝１×１０−１２＋（１×１０−６−１×１０−１２）／２となる。また、Ｓ４では、Ｇｍｉｎが、Ｇｔａｂｌｅ［１］＝１×１０−１２＋（１×１０−６−１×１０−１２）／２と設定される。すなわち、２回目のＳ４では、Ｇｍｉｎとして、１回目とは異なる値が設定される。そして、このように、収束解が得られなかった場合には、Ｇｍｉｎが更新されつつ、Ｓ３〜９の処理が繰り返される。Ｓ７で、収束したと判断された場合には、Ｇｒａｍｐ０が、Ｇｒａｍｐ０＝ｌｏｇ１０（Ｇｍｉｎ（１）／Ｇｍｉｎ０）と設定され、Ｓ１１の処理に進む。そして、Ｓ１１〜２０により、Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法が実行される。
【００９２】
比較例と動作例を比較すると、動作例では、Ｓ４において前回の候補値とは異なる値がＧｍｉｎに設定されつつ、Ｇｍｉｎ（１）の探索処理が続行される。Ｇｍｉｎ（１）の段階で一度非収束であればアボートしてしまう比較例と比較すれば、動作例の方がＧｍｉｎ（１）の段階で収束解が得られる可能性が高まっていることは明らかである。
【００９３】
（第２の実施形態）
続いて、第２の実施形態について説明する。本実施形態では、第１の実施形態のステップＳ９−３の処理が工夫されている。また、これに伴ない、ステップＳ３でＧｍｉｎ探索リストのソートを行う際の動作が変更される。その他の点については、第１の実施形態と同様とすることができるので、説明を省略する。
【００９４】
第１の実施形態では、Ｓ９−３の非収束節点リストＧｅｒｒｏｒが作成されていた。これに対して、本実施形態では、非収束節点情報リストに代えて、最終反復残差情報リストが作成される。最終反復残差情報リストとは、求解処理の行われた仮想コンダクタンスの候補値と、反復解法における最終反復残差との対応関係を示した情報である。最終反復残差とは、Ｓ８において反復回数の上限を超えた際の最後の求解時（ｉ回目の求解時）に得られた未知変数Ｘ（ｉ）と、最後から１回前（ｉ−１回目の求解時）に得られた未知変数Ｘ（ｉ−１）との差の事である。
【００９５】
また、Ｓ３でＧｍｉｎ探索リストのソートを行うにあたり、非収束節点数に代えて最終反復残差に基いて、ソートが行われる。これにより、Ｇｍｉｎ探索リスト中では、前回の処理で最終反復残差の小さかった値に近い要素ほど、先頭側に並べられる事となる。
【００９６】
最終反復残差が小さい場合には、Ｎｅｗｔｏｎ法における収束が近いと考えられる。従って、Ｇｍｉｎ探索リスト中において、前回処理で最終反復残差の小さかった値に近い要素を優先的に試行することで、第１の実施形態と同様に、より早期に収束解を得る事ができる。
【００９７】
尚、回路方程式Ｆ（Ｘ，Ｇ）＝０の未知変数Ｘが複数個存在する場合（例えば、未知変数Ｘ１が電流値、Ｘ２が電圧値である場合）には、最終反復残差の最も大きかった未知変数について、最終反復残差を記憶しておけばよい。この際、異なる種類の未知変数同士（例えば電流値と電圧値）は、そのままでは大小関係を比較することができないが、重み付け用のパラメータを用いて演算すれば大小関係を比較することができる。重み付け用のパラメータは、記憶部１０などに予め設定されていればよい。
【００９８】
尚、本実施形態は第１の実施形態と組み合わせて用いてもよい。例えば、非収束節点情報リストと最終反復残差情報リストの双方を利用して、Ｇｔａｂｌｅ中の要素の並びをソートすることもできる。具体的には、Ｓ９−３において、非収束節点数情報リストと最終反復残差情報リストの双方を作成しておく。非収束節点情報リスト中に、非収束節点数が平均値と同じである要素が存在した場合、最終反復残差を考慮することで、Ｇｔａｂｌｅ中の要素をソートすることができる。このように、第１の実施形態と第２の実施形態とを組み合わせると、Ｎｅｗｔｏｎ法において収束解が得られるまでの時間を相乗的に早める事ができる。
【００９９】
（第３の実施形態）
続いて、第３の実施形態について説明する。本実施形態は、既述の実施形態に対して、ステップＳ３及びステップＳ９−３の処理が変更されている。ステップＳ９−３の非収束節点情報を格納する処理は省略され、Ｓ９−２でＧｍｉｎ細粒度が上限を超えた場合には単にｍがインクリメントされてステップＳ３に戻る。ステップＳ３では、Ｇｍｉｎ探索リスト中の要素が、値の小さい順ほど先頭側となるように並べられる。Ｓ３において、既述の実施形態の様にＧｅｒｒｏｒが参照されることは無い。尚、Ｓ３では、Ｇｍｉｎ探索リスト中の要素を、値の大きい順に並べてもよい。
【０１００】
回路方程式の求解においては、仮想コンダクタンスの値と収束可否との関係が、離散的となることがある。このような場合には、単純にＧｒａｎｇｅを細分割する値を選ぶだけで早期に収束解を求められる可能性がある。
【０１０１】
（第４の実施形態）
続いて、第４の実施形態について説明する。本実施形態では、既述の実施形態に対して、ステップＳ３が省略され、ステップＳ４の処理が変更されている。すなわち、既述の実施形態では、Ｓ４において、Ｇｍｉｎが、Ｇｍｉｎ探索リスト中の先頭側の要素から設定されていくのに対し、本実施形態では乱数によりＧｍｉｎが設定される。
【０１０２】
具体的には、Ｇｍｉｎ＝Ｇｒａｎｇｅ×ｒａｎｄ（）と設定される。ここで、ｒａｎｄ（）は、乱数発生関数の返り値であり、０≦ｒａｎｄ（）≦１の範囲の乱数である。
【０１０３】
本実施形態のように、Ｇｍｉｎ探索リスト中の要素の順番を乱数を用いて決定しても、第３の実施形態と同様に、早期に収束解を求められる可能性がある。
【０１０４】
以上、第１〜第４の実施形態について説明した。尚、既述の実施形態では、回路方程式を求解する反復解法として、Ｎｅｗｔｏｎ法を用いた場合について説明したが、本発明はＮｅｗｔｏｎ法以外の反復解法を用いる場合についても適用可能である。例えば、反復解法として、Ｄａｍｐｅｄ−Ｎｅｗｔｏｎ法やホモトピー法を用いてもよい。
【０１０５】
また、第１〜第４の実施形態を矛盾の無い範囲で組み合わせて用いてもよい。例えば、第１の実施形態と第４の実施形態とを組み合わせて、Ｇｍｉｎ探索リスト中の要素の並びを決定するにあたり、非収束節点数が平均値と同じだった場合に、乱数を用いるようにしてもよい。
【図面の簡単な説明】
【０１０６】
【図１】回路シミュレーション装置の動作例を示すフローチャートである。
【図２Ａ】Ｎｅｗｔｏｎ法の求解処理を説明する説明図である。
【図２Ｂ】Ｎｅｗｔｏｎ法の求解処理を説明する説明図である。
【図３Ａ】Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を説明する為の説明図である。
【図３Ｂ】Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ法を説明する為の説明図である。
【図４】従来のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の一例を示すフローチャートである。
【図５】従来のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法の別の一例を示すフローチャートである。
【図６】従来のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの変更順を説明する説明図である。
【図７】従来のＧｍｉｎ−Ｓｔｅｐｐｉｎｇ法における仮想コンダクタンスの変更順を説明する説明図である。
【図８】仮想コンダクタンスと非収束節点数との関係を示すグラフである。
【図９】第１の実施形態の回路シミュレーション装置を概略的に示すブロック図である。
【図１０】第１の実施形態の回路シミュレーション装置におけるデータの流れを概略的に示す図である。
【図１１】第１の実施形態の回路シミュレーション装置の動作を示すフローチャートである。
【図１２】Ｇｍｉｎ探索リストを説明するための説明図である。
【図１３】第１の実施形態の回路シミュレーション装置の動作の一部分を示すフローチャートである。
【図１４】Ｇｍｉｎ探索リストを説明する為の説明図である。
【図１５】Ｇｍｉｎ探索リストのソートを説明する為の説明図である。
【図１６】第１の実施形態の回路シミュレーション装置の動作を示すフローチャートである。
【符号の説明】
【０１０７】
１    初期値探索部
２    Ｇｍｉｎ−Ｓｔｅｐｐｉｎｇ処理部
１０  記憶部
２０  ＣＰＵ
３０  入出力インターフェース
４０  ＲＯＭ
５０  ＲＡＭ
６０  計算結果出力部
【図１】
2008276363.tif 000003
【図２Ａ】
2008276363.tif 000004
【図２Ｂ】
2008276363.tif 000005
【図３Ａ】
2008276363.tif 000006
【図３Ｂ】
2008276363.tif 000007
【図４】
2008276363.tif 000008
【図５】
2008276363.tif 000009
【図６】
2008276363.tif 000010
【図７】
2008276363.tif 000011
【図８】
2008276363.tif 000012
【図９】
2008276363.tif 000013
【図１０】
2008276363.tif 000014
【図１１】
2008276363.tif 000015
【図１２】
2008276363.tif 000016
【図１３】
2008276363.tif 000017
【図１４】
2008276363.tif 000018
【図１５】
2008276363.tif 000019
【図１６】
2008276363.tif 000020