首页 / 专利库 / 人工智能 / 语言代码 / Processing method for circuit simulator

Processing method for circuit simulator

阅读:796发布:2021-02-12

专利汇可以提供Processing method for circuit simulator专利检索,专利查询,专利分析的服务。并且PURPOSE:To provide a processing method for circuit simulator, which easily analyzes the model of an analog component. CONSTITUTION:The high standard description 12 of the model of the analog component is inputted and the high standard description 12 is compiled so as to generate a model operation code analysis tree 16 and model structure data 18. The model operation code analysis tree 16 is translated and a scaler code analysis tree is generated. The scaler code analysis tree and model structure data 18 are converted into the code (C language code) of a computer program language used in a circuit simulator 10.,下面是Processing method for circuit simulator专利的具体信息内容。

【特許請求の範囲】
  • 【請求項1】 アナログ・コンポーネント・モデルの記述を回路シミュレータで使用するコンピュータ・プログラム言語のコードに変換する回路シミュレータ用処理方法であって、 上記アナログ・コンポーネント・モデルの高水準記述を入力し、 該高水準記述をコンパイルしてモデル動作コード解析ツリー及びモデル構造データを生成し、 上記モデル動作コード解析ツリーを翻訳してスケーラ・
    コード解析ツリーを生成し、 該スケーラ・コード解析ツリー及び上記モデル構造データを上記回路シミュレータで使用するコンピュータ・プログラム言語のコードに変換することを特徴とする上記回路シミュレータ用処理方法。
  • 说明书全文

    【発明の詳細な説明】

    【0001】

    【産業上の利用分野】本発明は、アナログ回路シミュレータ用のコンポーネント・モデル記述の処理方法に関する。

    【0002】

    【従来技術及び発明が解決しようとする課題】その昔、
    電気回路が主として個別の回路コンポーネントで構成されていた頃、伝統的な「実験用回路基板」を用いることにより、エンジニアが関心のある全てのノードにオシロスコープのプローブを当て、その回路が考えられる種々の条件下でどのように動作するか納得するまで測定することが出来た。 この実験用回路と実際の最終回路とは極めて類似していたので、その実験用回路を実験室で測定することにより、実際の回路の特性を十分に正確に求めることが出来た。

    【0003】しかし、殆どIC(集積回路)で実現されている今日の大規模な回路の場合には、回路設計において実験用回路を作成することは実用的な方法とは言えない。 最終のIC上に含まれるコンポーネント群を実験用回路上に物理的に複製することは不可能である。 ICを製造し、試験することは、既にそのICの回路を実際に用いることが確実な場合には設計の評価の為の方法として認めることも出来ようが、ICの異なる設計の可能性をいくつか試験する場合には、競争の維持のために高速な開発が要求される今日の状況下では時間及びコストがかかり過ぎてしまう。

    【0004】従って、回路シミュレータの登場となったのである。 回路シミュレータは、数学的に設計中の回路を表し、以前は実験室で実際のハードウエアを作って測定していた作業に対応する数学的な解析を可能にするものである。 このようなシミュレータのプログラムによる出力は、シミュレータ内に設計中の回路を実際に実現して測定したかの如き結果を得ることが出来る。

    【0005】しかし、回路シミュレータを使用する際に、コンポーネントのモデルをシミュレータのモデル・
    ライブラリに効果的に追加するのが困難であるという障害があった。 回路シミュレータの構築及び保守を行うソフトウェア・エンジニアは、コンピュータのプログラミングは熟知しているが回路装置の物理に関してはある程度の限られた知識しか持っていない。 他方、新しい装置のモデルを開発する物理屋は、ソフトウェアの知識が限られており、モデル・ライブラリに新しいモデルを追加する為にソフトウェアに精通しようとはしない傾向がある。

    【0006】回路装置の物理屋が回路シミュレータにモデルを入力出来るようにする為の1つの方法は、米国オレゴン州ビーバートンのアナロジー(Analogy)社から販売されているサーバー・テー・エム・シミュレータ(Saber TM Simulator)の一部に含まれている。 このシミュレータは、「マスト(MAST)」と呼ばれるモデル化言語を含んでおり、これは、ユーザがシミュレータを使用する際の種々の問題を解決しようとするものである。

    【0007】シミュレータ作業の一部分として直接導関数を計算するよりも、必要な方程式を主要なシミュレーション・コードにコンパイルすることが必要である。 サーバー・テー・エム・シミュレータではモデルの分岐値と傾斜データとの表を計算し、この表を用いて区分線形近似を計算して解ベクトルを生成する。 この方法をより詳細に理解するには、インスティテュート・フォー・コンピュータ・リサーチ(Institute for Conputer Resea
    rch)から1984年に出版されているマーチン・ブラック(MartinVlach)の「大規模階層ネットワークを解析する区分線形法(Piecewise Linear Methods for Ana
    lyzing Large Hierarchical Networks)」を参照されたい。

    【0008】シミュレーションのある動作、例えば感度試験等の場合、この区分線形近似方法を使用するのは適切ではない。 感度試験を行う際には、その測定に係るパラメータの値を繰り返し変化させなければならない。 予め表を作成しておく方法の場合には、パラメータの値を変化させるには、その度に繰り返し表を再構築しなければならず、時間がかかるという問題が生じる。 また、表に基づく方法ではシミュレーションの精度を向上するには、表を再計算する度により細かい格子点について求めなければならない。 ところが、主要シミュレーション・
    コードにコンパイルされた関係式に基づくシステムの場合には、コンバージェンスの許容値又はオペレータの過渡応答近似の許容値等の制御パラメータを変化させ、その直後にシミュレーションを再実行することにより、更に正確な計算結果が直接得られる。

    【0009】従って、本発明の目的は、アナログ・コンポーネントのモデルを容易に解析可能にする回路シミュレータ用処理方法を提供することである。

    【0010】

    【課題を解決する為の手段】本発明は、容易に学習及び使用することが出来る言語でアナログ素子のモデルを効果的に記述可能とし、そのモデルの記述をシミュレータの言語に変換させる為に自動的にコンパイルしてシミュレータの主プログラムとリンクさせ、従来の区分線形近似法を使用せず、表を作成したり使用する必要がなく、
    傾斜法の方程式の解を高速に計算可能な方法を実現している。

    【0011】本発明の好適実施例では、次のようなステップを実現している。 先ず、コンポーネントのモデルのネームを付け、パラメータを宣言し、引数非依存性方程式を特定し、モデル構造を記述し、引数を宣言し、引数依存性方程式を特定することにより、コンポーネント・
    モデルの高準記述を入力する。 その後、この高水準記述をコンパイルし、モデル動作コード解析ツリー及びモデル構造データを生成する。 モデル動作コード解析ツリーのデータの流れを解析して評価済解析ツリーを生成し、未定義の変数の参照に対してエラー・メッセージを発生し、モデル動作コード解析ツリー及びモデル構造データで表されたモデルの記述をデバッグし、選択された翻訳モードで上記評価済解析ツリーを翻訳してスケーラ・コード解析ツリーを生成する。 このスケーラ・コード解析ツリーは、引数についての導関数を操作する演算子のオブジェクトを含んでいる。 更に、上記スケーラ・コード解析ツリーの引数依存性をチェックし、再配分スケーラ・コード解析ツリーを生成する。 そして、シミュレータのモデル・テンプレートで必要なデータを揃え、上記再配分スケーラ・コード解析ツリーをシミュレータで使用するコンピュータ・プログラム言語のコードに変換する。

    【0012】

    【実施例】図1は、本発明のモデル記述法を実施する為の傾斜法に基づくアナログ回路シミュレータ10の構成を示すデータ流れ図である。 ユーザ・インタフェース1
    1で、ユーザがアナログ回路装置のモデルを記述しているデータをモデル記述言語ファイル12に入力する。 ここで使用される言語、アナログ・デバイス・モデル・デスクリプション・ランゲージは、回路の物理屋とアナログ回路シミュレータ10の先進的ソフトウェア環境との間の良いコミュニケーションを築く為に開発されたものである。 この言語は、アナログ装置のモデルの厳格な定義を可能にする一方でシミュレータ・ソフトウェアの詳細な内容からユーザを開放している。 この言語の詳細を後述した際に判るが、この言語のブロック指向構造によりモデルの開発者が完全なモデルの記述に必要な条件を満たすことが出来る。

    【0013】モデル言語コンパイラ14は、モデル記述言語ファイル12からのモデル記述データの言語解析及び構文解析を実行し、モデル動作コード解析ツリー16
    及びモデル構造データ18を発生する。 モデル動作コード解析ツリー16は、データ・フロー・アナライザ20
    に送られる。 このアナライザ20は、全ての参照変数が定義されていることを確認する。 データ・フロー・アナライザ20の出力は、評価済解析ツリー22である。 参照された変数が定義されていない場合には、エラー・メッセージ21が発生する。

    【0014】評価済解析ツリー22及びモデル構造データ18は、モデル・デバッガ26に送られる。 モデル・
    デバッガ26は、回路ファイル30のデータを操作する回路/制御コンパイラ28からの入力も受ける。 回路ファイル30は、規模は小さいが、アナログ回路シミュレータ10の回路ネットリスト46及び解析制御プログラム48に含まれているものと同種の情報のローカル版である。 ユーザは、モデル・デバッガ26をユーザ・インタフェース11を介して制御し、デバッグ・シミュレータ結果ファイル31を発生させる。 モデル・デバッガ2
    6は、対話的機能を持っているので、ユーザは、このデバッガ26を用いてどのステートメントの実行中でも全ての変数の値を検査することが出来る。 この機能とエラー・メッセージとにより、ユーザは、モデル記述言語ファイル12内のどのようなエラーでも見つけることが出来る。

    【0015】モデル動作コード解析ツリー16とこれから得られた評価済解析ツリー22は、変数だけでなく導関数も含むオペランド上の算術的及び代数的演算を実行出来るオブジェクトの1つのクラスとリンクさせることが出来る。 「fAndGradF」(関数及び関数の傾き)は、
    オブジェクトのこのクラスである計算バージョンの名称であって、モデル・デバッガ26で用いられ評価済解析ツリー22の数値的な評価を実行する。

    【0016】デバッグ処理が完了すると、スケーラ・コード解析ツリー34を発生する評価済解析ツリー22
    は、高水準スケーラ・トランスレータ32に送られる。
    高水準スケーラ・トランスレータ32は、引数に関連する全ての量の導関数を表す解析ノードを追加する。 直流解析、過渡解析及び交流解析の場合、それらの引数は、
    アナログ・モデル・デスクリプション・ランゲージで実行される引数定義セクションしょんで宣言される変数である。 感度解析の場合には、引数は、どの値の感度が測定されるかに応じて決まるモデルのモデル・パラメータである。 ノイズ解析の場合には、引数は、ノイズ関数を用いて定義されたコード上のノイズ源である。

    【0017】簡単に上述したオブジェクトの新しいクラスの別のバージョンで変数及びそれらの部分的な導関数を表すものは、「CodeGenAndGradF」と呼ばれている。
    高水準スケーラ・トランスレータ32では、高水準評価済解析ツリー22のオブジェクト「FAndGradF」から特別に変換させて得られた「CodeGenFAndGradF」が発生される。 変数及び導関数の数値計算を実行するのではなく、「FAndGradF」と同様に「CodeGenFAndGradF」は、
    アナログ回路シミュレータ10で計算を実行するC言語コードを発生するように設計されている。

    【0018】高水準スケーラ・トランスレータ32からのスケーラ・コード解析ツリー34は、引数依存性アナライザ36に供給される。 引数依存性アナライザ36
    は、データ・フロー解析を更に実行させることによりコードを最適化する。 このデータ・フロー解析には、元の方程式は勿論その引数に関する導関数も含まれている。
    この解析により定義済だが使用されていない変数が発見されると、その定義は破棄される。 その後この引数依存性方程式をチェックし、それらが本当に引数依存性があるか否か及びそのコードの引数非依存部分に移動していないか否かを確認した結果、再配分スケーラ・コード解析ツリー38を発生する。 この再配分処理が必要な理由は、導関数を求める微分処理により変数が定数に変化しているかも知れないからである。 この結果得られたC言語コードの引数依存性部分を出来る限り最適化することが大事である。 なぜならば、C言語コードの引数依存性部分は、解析過程の非線形部分に対して繰り返し実行しなければならず、他方コードの引数非依存部分は、各シミュレータ毎に1回だけ実行すれば良いからである。 従って、非常に多くの回数だけ実行しなければならなかったコード内の処理部分から出来るだけ多くの計算処理部分を除去することは、計算効率を非常に高める効果がある。

    【0019】C言語コード・モデル・プリンタ40は、
    トランスレーション・モード・コントロール33からトランスレーション・モード・データ、再配分スケーラ・
    コード解析ツリー38及びモデル構造データ18を受け、「テック・スパイス2(TekSpice2:登録商標)」
    と呼ばれるシミュレータのモデル・テンプレート42を用いて入力を編集してC言語コードの出力に変換し、テック・スパイス2のモデル・ファイル44に送る。 このモデル・ファイル44は、アナログ回路シミュレータ1
    0の出力シミュレーション・プログラムにリンクするのに好適なファイルである。 テック・スパイス2のシミュレータ・モデル・テンプレート42は、そのシミュレータで使用されるC言語コードの関数を定義するのに用いられる。

    【0020】アナログ回路シミュレータ10は、回路ネットリスト46と解析制御プログラム48も受け、回路ネットリスト46の内容に従って多数のモデルの中の1
    つ以上のインスタンスの相互作用に基づいてシミュレータレーション結果ファイル50を発生する。

    【0021】本発明の方法の第1ステップは、簡単操作言語を用いて新しいデバイス・モデルの高水準記述を作成することである。 この言語は、上述のように、アナログ・モデル記述言語と呼ばれ、新しいデバイス・モデルを一様且つ直接的な方法で記述出来、そのモデルの構造はその後の処理プロセスに渡される。

    【0022】アナログ・モデル記述言語による新しいモデルの記述は、その新しいモデルの名称を定義する外側ブロックの記述、即ちこの場合には「resistor」という記述から開始される。 各ブロックは、必要なキーワードで開始されるが、この例のキーワードは「modelDefinit
    ion」である。 「<sub-blocks>」というモデルの詳細がその後のステップで用いられる。 また、C言語のように、スラッシュ「/」及びアスタリスク「*」の記号によってコメント(comments)であることが指示される。
    このようにして、外側ブロックは、次のように書き表せる。

    【0023】この「<sub-blocks>」は、新しいモデルの引数非依存の方程式、トポロジ、引数及び引数依存の方程式を表すサブ・ブロック・パラメータをこれらの順序で定義する。 各サブ・ブロックは、後述する1つ以上のステートメントを含んでいる。 各モデルは、トポロジのサブ・ブロックと引数依存の方程式のサブ・ブロックを備えていなければならないが、その他のサブ・ブロックを含むか否かはその特定のモデルの特性に応じて任意である。 1つのブロック内で定義された変数は、その後のブロック内の方程式で使用することが出来る。 全てのサブ・ブロックの一般形は、次の通りである。

    【0024】パラメータ宣言: パラメータは、シミュレータ時点で一定値となる抵抗器の抵抗値の如き変数である。 パラメータは、割当ステートメントを用いて宣言される。 割当ステートメントは、パラメータ名及びデフォルト値を含み、その他に規定セットの値を選択的に含んでも良い。 デフォルト値は、マイナス無限大からプラス無限大までのどの値に設定しても良い。 デフォルト値は、そのモデルを使用する特定のインスタンスに対しては無効にしても良い。 この仕様形式は、次の通りである。 parameter = value 又は parameter = value, <legal set> このコンマは、規定セットの値がデフォルト値の割当の後に来ることを示している。 このコンマと規定セットは、割当ステートメントの後にのみ現れることがある。
    規定セットが特定されると、その割当値が規定セットの値の範囲内に入っているか否かを検査する。 範囲外であれば、エラー・メッセージが出力される。

    【0025】規定セットの離散的な値は、列挙方式で以下のように特定しても良い。 {値1,値2,・・・・} 実際の値の範囲は、端点を含むか否かに応じて例えば以下のように示しても良い。 [下限値,上限値) ここで、括弧は下限値は含むが上限値は含まないことを意味している。

    【0026】規定セットは、2つ以上のセットを連合させて構成しても良い。 その場合、バックスラッシュとスラッシュの組み合わせ「\/」を連合オペレータとして以下のように表す。 (−無限大,−0.1]\/{0}\/[0.1,無限大) 感嘆符「!」を用いて除外点を指定することにより規定セットを定義しても良い。 例えば、0を除く全ての実数は、次のように示される。 ! {0}

    【0027】パラメータは、「defaultParameterValue
    s」というキーワードを用いて上述の例の抵抗器の宣言を以下のように行う。

    【0028】引数非依存性方程式:引数は、シミュレーションを繰り返す度に値が反復して判断される独立変数である。 引数非依存性方程式は、パラメータと定数を含んでいるだけなので、パラメータの値が変更になった時のみ評価すれば良い。 これらの方程式は、寸法、温度効果によってスケーリングするのに用いたり、又は部地理的パラメータを内部の電気的パラメータに割り当てるのに用いることが出来る。 ダイオード・モデルの入力ファイルに関して後述するように、繰り返し構造(「whil
    e」ステートメント)により簡単な非線形方程式の解を得ることが出来る。 規定セットをこのサブ・ブロックの割当ステートメントに付加しても良い。 キーワードは、
    「argumentIndependentEquations」であり、抵抗器のモデルを例にとれば、以下のように表せる。

    【0029】ステートメントは、順次評価されるので、
    以前のサブ・ブロックで宣言された変数は、上述の例における「R」及び「TC」のようにどれでもその後のサブ・ブロックで参照出来る。 1つのサブ・ブロックの範囲内では、各変数にどのような回数値を割り当てても良い。 モデル記述の中では、グローバル変数の場合を除いて、参照の前に割当を行い、変数を宣言しなければならない。 「temp」及び「tnom」のようなグローバル変数は、シミュレータの一部分として定義される。

    【0030】構造説明:電気回路シミュレーションは、
    ノードを有するネットワークを構築することにより容易に行うことが出来る。 この為に、ネットワークのノード、ブランチ及びパッドの構成要素を用いてネットワークの量の流れを記述し、これらの流れを合流させる為にそれらを相互接続する。 このサブ・ブロックは、回路ネットリストを近似的にエミュレートする。 ノード及びパッドを定義するステートメントは、「node」、「pad」
    及び「units」というキーワードを用いて以下のように示される。 node name units=unit pad name units=unit

    【0031】ノードとブランチは、あるモデル定義に専用のものであって、1つのモデル定義のノードと他のモデル定義のノードを接続するブランチは存在しない。 パッドは、モデル定義の特定のインスタンスとシステム内の他のネットワークの要素とを接続する唯一の規定メソッドとなる特別なノードである。 ユニットの仕様は、特定のノード及びパッドに関する量のタイプを決定するので、電圧と圧力のように量のタイプが不一致のものは、
    同じノード又はパッドに偶然接続されることはない。

    【0032】ブランチは、ノード及びパッドを他のノード及びパッドに相互接続するものである。 ブランチを宣言するステートメントは、キーワード「branch」及び「units」を用いて以下のように表せる。 branch name nodel node2 units=unit

    【0033】ブランチ名は、後述するサブ・ブロック「argumentDependentEquation」内で定義されたモデル定義の数式間の関係と、そのブランチをコンポーネントとして含むシステムに対するそのブランチの寄与を表す。 「スルー(through)」量は、ブランチの流れとして方程式により定義される。 「ユニッツ(units)」
    は、ネットワーク構築に関して一貫性を高める為に用いられる。

    【0034】電気ネットワークでは、ブランチの電流値は、そのブランチの両端のノード間電位差を一定に維持することが要求される。 この例として、電圧源の端子間を接続するブランチを考える。 この場合、電圧源を流れる電流を表す未知の量を導入するのが便利である。 この電圧源の電流を表す未知の量の導入に対応して、制約方程式を導入するのが普通である。 この未知の量は、ネットワーク量又は非ネットワーク量を表しても良く、この要請にかなうものである。

    【0035】未知のモデルは、モデルの引数間の制約方程式を表すものである。 未知のモデルは、ネットワーク内のブランチに数学的に結合した制約方程式を有する必要がある。 更に、この未知モデルは、モデル定義の中の方程式の少なくとも1つで用いられなければならない。
    制約は、モデル記述の「argumentDependentEquations」
    の部分で定義され、シミュレータの動作によりシステムの解、即ちモデル引数を調整し、制約方程式の数式をゼロに絞り込む。 未知のモデルのステートメントは、「un
    known」及び「units」というキーワードを用いて次のように表せる。 unknown name units=unit

    【0036】ここで、「units」は、シミュレーションの出力を得る目的で未知の量のタイプを指定するのに用いられる。 抵抗器の例の構造記述は、次のように表される。

    行列スタンプのような特定のアルゴリズムの情報は、他のモデル定義言語と同様にモデル記述の中に含まれない。 このような情報は、本発明のソフトウェアによりブランチ宣言、未知宣言、方程式宣言及び引数宣言により除去可能であり、モデルの開発者が関心を持つ必要はない。

    【0037】引数宣言:引数は、システムの方程式の解から値を受けるモデル方程式の独立変数である。 一例は、バイポーラ・トランジスタのvbe及びvbcである。 引数のタイプには2種類ある。 第1のタイプは、次のようなアクロス(across)引数である。 argument = across(name1,name2) argument = across(name1, name2, polarity) ここで、「name1」及び「name2」は、モデルの構造記述の中のネットワークのノード又はパッドである。 よって、電気ネットワーク内のアクロス引数は、電位差を表している。 「polarity」変数は、NPN又はPNPのトランジスタのような2つの極性を用いてモデルに使用される方程式群を満たす。

    【0038】第2の引数のタイプは、未知のモデルに含まれている。 値(value)引数は、次のように宣言される。 argument = value(name-of-unknown) この抵抗器に関する引数宣言は、次のように表される。

    【0039】サブ・ブロック「argumentDependentEquat
    ion」の数学的な関数や関連式を定義するのに引数を使用する。 引数は、それが参照するノード、パッド及び未知モデルと同じユニットを含んでいる。 これにより、ユニットの混同が防止出来る。

    【0040】引数依存方程式:引数依存方程式は、パラメータと同様にモデル引数を含んでおり、非線形システムを解く場合には、その解を求める過程で繰り返し実行される各操作毎に評価されなければならない。 全てのブランチは、定義されたスルー値を持たねばならず、全ての未知モデルは、このブロック内に規定された制約を受ける。

    【0041】ブランチのスルー(through)量は、モデル記述のサブ・ブロック「argumentDependentEquation
    s」の中で次のステートメントによって設定される。 throughValueFor(branch name) = expression 又は throughValueFor(branch name, polarity) = expression

    【0042】上記の式は、従来の数学的な関数や演算子のセットから成る方程式の右辺を形成する。 シミュレータの動作は、ノード・システムの第1のノードの方程式からスルー値を引き算し、第2のノードの方程式に加算することである。

    【0043】制約は、モデル記述のサブ・ブロック「ar
    gumentDependentEquations」の中で次のステートメントにより定義される。 constraintFor(unknown name) = expression そして、シミュレータのこの動作によりシステムの解及びモデル引数を調整し、上記の制約式内の「expressio
    n」をゼロに設定する。 未知モデル及び制約方程式を用いるモデル記述の例は、後述する一定インダクタのモデルの中で再生される。

    【0044】抵抗器モデルの引数依存方程式は、以下のように示される。

    【0045】ブランチ又は制約方程式の導関数をモデル定義のこのサブ・ブロックの中で特定する必要はない。
    これは、本発明のソフトウェアが実行可能なシミュレータに依存する事項だからである。

    【0046】抵抗器モデルを定めるモデル定義ブロック「modelDefinition」の範囲内に上述のサブ・ブロック群を集めることにより、以下に示すようにシミュレータ内に組み込むべき数学的な定義が完了する。 modelDefinition reistor { defaultParameterValues { R = 1, !{0} /*抵抗値はゼロとは限らない*/ TC = 0 /*温度係数*/ } arugumentIndependentEquations { r = R*(1+TC*(temp-tnom)), !{0} gResistor = 1/r } topologicalDescription { pad plus units=volts pad minus units=volts branch resistor plus minus units=amps } argumentDeclaration { vResistor = across(plus,minus) } argumentDependentEquations { throughValueFor(resistor) = vResistor*gResistor } }

    【0047】アナログ・モデル記述言語は、シミュレータ内に例えば「ddt()」、「delay()」、「bessel2()」
    及び「integral()」のような標準数学的なサポート及び近似を行う演算子の存在を仮定している。 演算子「dd
    t()」は、時間について引数を微分近似するものである。 他の近似演算子「delay()」、「bessel2()」及び「integral()」は、標準スパイス(Spice)の伝送線モデル、バイポーラ・トランジスタ・モデル及びそれ程標準的ではないジョセフソン接合トランジスタ・モデルを夫々表すのに必要である。

    【0048】未知モデルを用いたモデル定義の例 この例では、サブ・ブロック「topologicalDescriptio
    n」の中に未知モデルを採用することによって、テック・スパイス2の修正ノード解析形式のインダクタを定義出来る。 微分演算子「ddt()」を使用することにも留意されたい。 一定の正インダクタのモデルの完全な記述の例を以下に示す。 modelDefinition inductor { defaultParameterValues { L=1 ,[0, infinity] } topologicalDescription { pad in units=volts pad out units=volts branch inductor in out units=amps unknown i units=amps } argumentDefinition { v1=across(in,out) i1=value(i) } argumentdependentEquations { phi=L*i1 throughValueFor(inductor)=i1 constraintFor(i)=ddt(phi)-v1 /*Constraint v1=ddt(phi)*/ } }

    【0049】アナログ・モデル記述言語は、高度の柔軟性があるので、ユーザは、解ベクトルの中に所望の未知のモデルを数多く含めることが出来る。 他方、シミュレーション時間を短縮したい場合には、解ベクトルの中の未知モデルの数を出来るだけ少なくしたくなるのが普通なので、システムの未知モデルを解く際の近似方法に基づいて、構成の異なる形式により優越状態であることを数値的に示しても良い。 アナログ・モデル記述言語は、
    このような記述の変化を許容出来る。

    【0050】モデル言語コンパイラ14は、辞書的及び統語的な解析を行う。 エイホ(Aho)及びウルマン(Ull
    man)による「コンパイラ設計の原理(Principles of C
    ompiler Design)」(アディソン・ウエスレイ社197
    7年刊)は、辞書的及び統語的な解析器及び構文解析器について説明している。 モデル言語コンパイラ14は、
    スモールトーク80(SmallTalk-80)で書かれているが、他のオブジェクト指向言語で書けることは勿論である。 モデル言語コンパイラ14は、許容されたトークンの列を受けると、その許容されたトークン列を表す対応オブジェクトを構築する。 コンパイラ14が許容されていないトークン列を受けると、オペレータに対してエラー・メッセージを発生する。 この出力を最高に活用する為に、モデル言語コンパイラ14は、繰り返し現れる共通のサブ・イクスプレッションを探索し、これらを見つけると、そのような共通のサブ・イクスプレッションの全ての参照値を1つの定義として設定する。

    【0051】モデル言語コンパイラ14は、エラー・メッセージ15に加えて2つの出力、即ちモデル構造データ18及びモデル動作コード解析ツリー16を発生する。 図2は、モデル動作コード解析ツリーとこれの基本となる方程式の例を示している。 本システムは、解析ツリーを横に移動する為のポスト(事後)命令規定に従う。 後述するように、モデル言語コンパイラ14が発生したモデル動作コード解析ツリー16は、オブジェクト「FAndGradF」とリンクすることが出来る。 このオブジェクトにより、算術演算子が作用するオペランドの微分が容易に行える。

    【0052】モデル構造データ18は、入力パラメータ・リストと「マップ・イン」及び「マップ・アウト」のデータを含んでいる。 システムが解を求める過程を繰り返す間に初期の引数及びパラメータが引数依存モデル・
    コードにより使用され、数値結果ファイルが作成される。 「マップ・アウト」は、そのモデルの数値結果データを傾斜シミュレーションの線形システム方程式に転送するのに用いられるコードである。 線形システム方程式の解から解ベクトルが作成される。 「マップ・イン」
    は、解ベクトルのデータを次の繰り返し動作の為の引数の値に変換するコードである。 従って、各繰り返し動作は、最初に解ベクトルからの値を引数にマップ・インし、次に、これらの値を用いて引数依存方程式を評価し、その後、「スルー(through)」量及び「制約(con
    straint)」量を線形システム方程式にマップ・アウトし、これらの方程式を再度解いてこの繰り返し動作を完了する。

    【0053】モデル・デバッガ26は、データ・フロー・アナライザ20ら評価済解析ツリー22を受け、モデル言語コンパイラ14からモデル構造データ18を受け、疑似マシーン環境の中で実行する。 これは、コンパイルされたマシン語レベルの実行ではなく、入力される高水準命令の列を翻訳し実際のシミュレータの動作をエミュレートするプログラムを用いるので、C言語のモデル・プリンタでコンパイルされたコードを実行する場合よりも実行速度は遥かに遅い。 しかし、低速の実行には次のような納得できる理由がある。 即ち、エラーが発生したとき遥かに有意義な情報を返すことが可能な環境でアナログ・モデル記述言語のプログラムのデバッグを直接行えるし、更に命令群のステップ通過、中間結果の観測及び全ての変数の値の観測等が出来るので、C言語のモデル・プリンタの主経路に沿っていない方法でデバッグを実行可能にしている。

    【0054】モデル・デバッガ26は、標準スモール・
    トーク80のデバッガの修正版である。 この修正により評価済解析ツリー22の実行に適合させている。 これらの解析ツリーの各ノードは、必要な変数の値を含んでいる適当な文脈で処理を実行するメソッドが規定されている。 このツリーのトップ・ノードは、割当ノードであって、「この文脈で実行せよ」というメッセージとその文脈が送られる。 このトップ・ノードは、その後同じメッセージを右側のサブ・ツリーに渡す。 右側のサブ・ツリーの中の「#+」の記号の付いたトップ・ノードは、このメッセージをその下の各サブ・ツリーに渡す。 この左側のサブ・ツリーのノードでは、このメッセージが順次下へと渡され最下段のノードにまで達する。 これらのノードは、供給された文脈から必要な値を引き抜いて計算を実行し、その結果を上側のノードに帰還する。 右側のサブ・ツリーのトップ・ノードは、左側のノードから必要な情報を受け、その値にポスト値(postValue)
    「1」を加算し、その結果をトップ・ノードに帰還する。 その後、このトップ・ノードは、左側のノード「X」に供給された文脈の中の新しい値を記憶するように命令する。 図2については、C言語コード・モデル・
    プリンタ40に関連して詳細に後述する。

    【0055】モデル・デバッガ26は、「FAndGradF」
    を用いて一部分の微分を計算する。 「FAndGradF」については詳細に後述するが、数値的メソッドによって操作する変数の実際の値を得る。 これに類似した「CodeGenG
    AndGradF」は、高水準スケーラ・トランスレータ32の中で「FAndGradF」を置換するのに用いられものであるが、C言語コード・モデル・プリンタ40に達すると記号的メソッドでC言語コードを発生する。 このC言語コードは、その後アナログ回路シミュレータ10のC言語コードの主プログラムにリンクした後に実際の数値計算が実行される。

    【0056】モデル・デバッガ26が通常のスモールトーク80のコードの代わりに解析ツリーを実行するので、ユーザ・インタフェース及びユーザが得られる情報に関してある程度の違いがある。 通常のスモールトーク80のデバッガでは、スモールトークのインタプリタが実行する前にソース・コードとコンパイルされたメソッドとの間のマップを構築する。 従って、ユーザが命令のステップを通過したり、実行停止させたりする際にユーザの為にソース・コードをプリント出力することが出来る。

    【0057】本発明のモデル・デバッガ26では、コンパイルされたモデル・コードの為のインタプリタは存在しない。 モデル・デバッガ26は、テスト用モデル・コードと解析ノードとの間のマップを作成しないが、各コードのステートメントに自身のテスト用ステートメントを作成させる。 モデル動作コード解析ツリー16のノード/オブジェクトの各々は、そのような要求メッセージに応答するメソッドを含んでいる。 例えば、図2のトップ・ノードがそのような要求を受けると、左側のノードにネーム(名前)をプリント出力するように依頼し、その後右側のノードにそのネームをプリント出力するように依頼する。 右側のノードは、プリント出力を完了するにはその下のノードの同じような要求を作成しなければならない。

    【0058】図3は、抵抗器モデルrに関してモデル・
    デバッガ26が行う処理に基づくスクリーン表示例を示している。 表示記号に示されているように、スクリーンの左側ウインドウは、コード・ステートメントのステップを通過させたり、停止したステートメントを観測したりするのに用いられる。 右側ウインドウは、変数の値を見るために使用される。 右側ウインドウの1番上の領域は、引数の値を表示している。 右側ウインドウの上から2番目の領域は、線形システム方程式に割り当てられた「スルー」変数及び「制約」変数の値を表示している。
    右側ウインドウの上から3番目の領域は、一時変数とモデル出力を表示する。 上から4番目の領域は、入力パラメータを表示する。 上から5番目の領域は、プリセット・グロー変数を表示する。 なお、このプリセット・グローバル変数は、モデル定義の外部にある変数である。

    【0059】モデル記述言語ファイル12のデバッグが成功すると、その結果得られた評価済解析ツリー22がデータ・フロー・アナライザ20から高水準スケーラ・
    トランスレータ32に送られる。 この高水準スケーラ・
    トランスレータ32は、以下のモードの各々のテストを実行するのに用いられるスケーラ・コード解析ツリー3
    4を作成する。 即ち、直流/バイアス・モード、過渡モード、交流モード、ノイズ・モード及び感度モードが対象となる。 トランスレーション・モード・コントロール33は、高水準スケーラ・トランスレータ32及びC言語コード・モデル・プリンタ40に各モードの要求について知らせる。 高水準スケーラ・トランスレータ32
    は、各モードの要求を効率的に実行する為の異なるコードを適宜発生する。 その結果、各テストのC言語コード・モジュールが解析制御プログラム48により選択出来るようになる。

    【0060】高水準スケーラ・トランスレータ32は、
    C言語のコードを書けるスモールトーク80のオブジェクトを発生する機能を持つ。 このオブジェクトによって書かれたC言語コードは、複数の引数に関する導関数を含む数式を操作する演算子を表す。 この機能は、非線形傾斜解析に必要な全ての動作を含むC言語コードのテック・スパイス2(TekSpice2)のモデル・ファイル44
    を自動的に構築する為の基本的なものである。 同じ技法を他のテンプレートと共に用いて、例えばバークレイ・
    スパイス3のような他のシミュレータのコードを作成することも出来る。 これとは対照的に、従来のセーバー(Saber:登録商標 )ソフトウェアは、コンパイルされた言語記述の方程式をある範囲で数値的に評価し、その結果得られたテーブルをシミュレータの汎用コードに渡す。 シミュレータは、シミュレーションに必要なこれらのテーブルに基づいて補間を行う。

    【0061】オブジェクト「FAndGradF」及び「CodeGen
    FAndGradF」は、以下のような一般形を有する。

    ここで、「y」は変数であり、「x1」から「xN」は、


    「y」を微分する引数である。

    【0062】引数の微分は、それ自身についての微分が1になり、他の引数についての微分は0とるかの何れかなので、引数を以下のように定義しても良い。

    【0063】オブジェクト「FAndGradF」のクラスは、
    アナログ・モデルで発生する可能性のあるあらゆる算術的又は代数的関係を表すメソッドを含んでいる。 これらは、加算、減算、乗算、除算、指数、絶対値、三関数、逆三角関数、双曲線関数、シーリング値、フロア値、強制値、度ラジアン変換、ラジアン度変換、分数部分、整数部分、自然対数、底「y」の対数、否定、10
    の累乗、実数部分、虚数部分、逆数、四捨五入、平方根、最小値、最大値、法(モジュラス)、指数及び符号である。 殆どの場合、これらのメソッドは、スカラー量(引数非依存)か又は傾斜(グラジエント)量(引数依存)のどちらかについて操作を実行出来る。

    【0064】クラス「FAndGradF」で用いられるこれらのメソッドの例を以下にいくつか説明する。 これらのメソッドは、一般に次のような形式を有する。 これらメソッドは、最初に太字のメソッド・ネームで開始され、次にメソッドの関数を要約したコメントが来て、次にメソッドを実現するスモールトーク80のコードが来る。 上向き矢印は、次のオブジェクトを返すことを意味する。
    これらのメソッドを実現するコードは、2つのレベルにある。 これら2つの中の低位レベルは、標準スモールトーク・インプリメンテンション及びもっと高速に処理する為にC言語コードで書かれた拡張プリミティブを用いる版の2つの形式内に存在する。 メソッド「FAndGradF
    operand: opcode:」は、スモールトーク・インタプリタにプリミティブとして追加された。 以下の例では、追加されたスモールトークのプリミティブにアクセスするメソッド「FAndGradF」を最初に示し、その後にそれらを実現するスモールトークのバックアップ・コードを示す。 なお、太字表示ができないので、本明細書では、太字にすべき文字の後に括弧を付けてその旨を記す。

    【0065】これら2つのリストの最後の例において、
    関数群自体及びこれらの関数群の導関数について作用するサイン関数をどのようにして発生するかを調べてみよう。 一般に、dy/dx=(dy/du)*(du/dx)なので、関数「y=s
    in(u)」の場合には、「x」について微分すると、dy/dx=
    cos(u)*du/dxが得られる。

    【0066】上述のオブジェクト形式がある関数の関数に適用された場合を考える。

    【0067】従って、サイン関数のコードは、「dy/dx=
    cos(u)*du/dx」の関係と等価な上述の形式を有するオブジェクトを生成すべきである。 このコードを調べると、
    最終行は「newVec」を返す。 この「newVec」は、上述のオブジェクト形式の中で示した結果「dy/dx=cos(u)*du/
    dx,x1〜xN」を含むベクトルである。

    【0068】この結果ベクトルは、2組の関数を持つ元のベクトル(self)の大きさと同じ長さを有する。 この「newVec」の最初の部分は「y」は関数の値である。 このヘッダは、「newVec value: u sin」により発生される。 オブジェクトの(df/du)の部分は、この関数の場合には「cos(u)」であり、このコード・ラインの「fPrim
    e」の部分により生成される。 この「fPrime」は、その前のコード・ライン「fPrime <- u cos」の結果として「cos(u)」を含んでいる。 このオブジェクト「du/dx」
    の「du/dxN」の部分は、同じコード・ラインの「(self
    derivativeAt: index)」の部分により生成される。

    【0069】 「 1 to: self size do: [:index | newVec derivativeAt: index put: (self derivativeAt: index) * fPrime.」 の部分は、結果ベクトルの中の微分値を記憶する。

    【0070】このオブジェクトが生成されると、「y」
    の「x3」についての微分値を得るには、引数セット「dx
    1」〜「dxN」の間の引数インデックスを指定する新しいオブジェクトにメッセージを送れば良い。 この引数は、
    上述の構造を用いると以下のように指定することが出来る。

    【0071】このメッセージに応答してこのオブジェクトは、「cos(u)*du/dx3」を返す。 従って、これらの算術的及び代数的オブジェクトは、微分演算をどのように適用するか教授されており、計算規則を知っていることになる。 例えば、乗算メソッドは、2つの変数「u」及び「v」の積の「x」に関する微分が「u*dv/dx+v*du/d
    x」となることを知っている。 つまり、以下の表で表せる。

    【0072】同様に、全ての他の「FAndGradF」オブジェクトのメソッドも微分演算の実行方法の情報を備えている。

    【0073】オブジェクト「CodeGenFAndGradF」は、C
    言語コード・モデル・プリンタ40の助力により、C言語コードで自身を書き下す能力を持ったスケーラ・コード・オブジェクトを生成する。 これらは、「FAndGrad
    F」オブジェクトと同様に計算方法を理解しているのに加えて、オブジェクト「CodeGenFAndGradF」に関するメソッドは、コードも簡単化されている。 即ち、これらは例えば微分の結果変数の値がゼロになったときに注意を向け、この結果無意味となる動作を除去するために書くコードを簡単化する。

    【0074】 「CodeGenFAndGradF (CGFGF)」の例(追加):+ aCGFGF
    (太字) 「aCGFGFとselfとの和を回答せよ。この結果は、関数値及び全ての有効部分導関数についての操作を表すシンボル記号を含んでいる。」 "Arguments(引数): aCGFGF - <CodeGenFAndGradF>" ^ |self species new preOperand: self plusPostOperand: aCGFGF preOperand: preOperand plusPostOperand: postOperand 「preOperandとpostOperandの和を回答せよ。
    この結果は、関数値及び全ての有効導関数についての操作を表すシンボル記号を含んでいる。 」 "Arguments(引数): preOperand - <CodeGenFAndGradF> postOperand - <CodeGenFAndGradF>" |preDeriv postDeriv deriv context <- preOperand context. activeDerivatives <- preOperand activeDerivatives bitOr: postOperand activeDerivatives. functionValue <- preOperand functionValue + postOperand functionValue gradientValues <- Array new: (preOperand size max: postOperand size). 1 to gradientValues size do: [:i| preDeriv <- preOperand derivativeActiveFor: i. postDeriv <- postOperand derivativeActiveFor:i. preDeriv ifTrue: [postDeriv ifTrue: [deriv <- (preOperand derivativeAt:i) + (postOperand derivativeAt:i)] ifFalse:[deriv <- preOperand derivativeAt:i]] ifFalse: [postDeriv ifTrue: [deriv <- postOperand derivativeAt:i] ifFalse: [deriv <- nil]]. gradientValues at: i put: deriv]

    【0075】この例において、1から「gradientValue
    s」の大きさまでの範囲内で、フラグ「preDeriv」及び「postDeriv」に対応するオペランドが有効な導関数を含んでいる場合のみこれらのフラグをどのようにセットするかに留意されたい。 もし、両方のフラグがセットされていれば、導関数と和の両方を計算するコードが生成される。 しかし、導関数のみが有効の場合には、和の計算は実行されず有効な導関数がその和「deriv」として返される。 何れのオペランドも有効なフラグがセットされていない場合には、0が返される。 回避される不必要な各動作は、アナログ回路シミュレータ10の中のより有益な実行時間へと転換され、その結果得られたコードはコンパイルされ、リンクされ、実行される。

    【0076】高水準スケーラ・トランスレータ32からのスケーラ・コード解析ツリー34は、引数依存性アナライザ36に達する。 この引数依存アナライザ36は、
    引数依存の方程式を表面的にチェックし、本当に引数依存性があるかを評価し、依存性のないものをコードの非依存性部分に移動させ、再配分スケーラ・コード解析ツリー38を作成することによってコードを最適化する。
    時には、微分の過程で変数が定数に変化することもある。 この再配分過程は、実行速度を増加する効果もある。

    【0077】アナログ・モデル記述言語は、モデルを完全に数学的に記述するのを容易に行う為に構築されたものである。 あるモデル定義を用いて構成されたシステムを解析する近似解法のどのような詳細なアルゴリズムでも自由にこの記述言語を用いて書くことが出来る。 しかし、実用的なシミュレーションに精通した個人がモデル記述の内容を増加してアルゴリズム情報に組み込んでも良い。 更に、特別のシミュレーション出力にフラグを付けても良いし、又は特定のタイプのシミュレーション方法のコードの発生に応じて、モデル定義内の「ライン・
    モディファイアー」を使って信号を発生しても良い。 ライン・モディファイアーにより、特定のシミュレータ用のモデル定義を仕立て上げることが出来る。

    【0078】C言語コード・モデル・プリンタ40は、
    スモールトーク80の再配分スケーラ・コード解析ツリー38を受け、スモールトーク80のサブ・ルーチンであるテック・スパイス2のシミュレータ・モデル・テンプレート42を用いて再配分スケーラ・コード解析ツリー38をC言語コード・ファイルに変換する。 テック・
    スパイス2のモデル・ファイル44は、アナログ回路シミュレータ10の汎用コードとリンクするのに好適である。 このメソッドの出力は、テック・スパイス2と互換性がある。 テック・スパイス2は、新しいモデルに関してはモジュール化されているという点でバークレイ版のスパイス3やセイバー・シミュレータと類似している。

    【0079】「ArgumentFAndGradF」は、モデル・デバッガ26で用いられるオブジェクトのクラスで、モデル引数を表し、数値評価過程中にその引数の値を初期化する。 「CodeGenArgumentFAndGradF」は、高水準スケーラ・トランスレータ32で用いられるオブジェクトのクラスで、モデル引数を表し、コード生成過程中にその引数の値を初期化する。

    【0080】「ArgumentFAndGradF」及び「CodeGenArgu
    mentFAndGradF」の各オブジェクトは、引数値を内在させている。 この引数オブジェクトは、制限関数をオブジェクトに供給し、繰り返されるステップの大きさの制限が大きくなり過ぎないようにする。

    【0081】「MDSModelDefinition」は、本発明のシステムの最高レベルのコードであって、トランスレーション・モード・データ33、高水準スケーラ・トランスレータ32、引数依存性アナライザ36、C言語コード・
    モデル・プリンタ40及びテック・スパイス2のシミュレータ・モデル・テンプレート42によって表されたコード又は、これら全てをコントロールするコードを含んでいる。

    【0082】この「MDSModelDefinition」によって実行される関数の1つは、C言語コードの生成である。 これは、C言語コードの生成ユーティリティも含んでいる。
    この「MDSModelDefinition」のC言語コード生成部分は、テック・スパイス2のモデル・テンプレート42及びトランスレーション・モード・データ33の高水準構造を含んでいる。

    【0083】「MDSModelDefinition」コード内のテック・スパイス2・モデル・テンプレートの部分は、関数の一番上に変数の宣言と共にC関数定義ヘッダを置いており、その後、これら以外のノード・ブロック・コードを呼出し、再配分スケーラ・コード解析ツリーの内容に応じて詳細にコードを満たしていく。

    【0084】このヘッダ情報を作成し、他のノードのコード・ブロックの機能を調整するのと同様に、「MDSMod
    elDefinition」は、上述の「マップ・イン」情報及び「マップ・アウト」情報も使用してマップ・イン及びマップ・アウト関数を制御するC言語コードを構築する。

    【0085】C言語コードを全て実際に書く為には、
    「MDSModelDefinition」は、「TspiceModelBlockNode」
    を呼出し、これがそのブロックの書く割当ステートメントに対して「TspiceModelAssignmentNode」を呼び出す。 もし、「if-then-else」ステートメント又は「whil
    e」ステートメントが存在すれば、「TspiceModelBlockN
    ode」は、必要に応じて「TspiceIfNode」又は「TspiceW
    hileNode」も呼び出す。

    【0086】図2を参照すると、数式「x=exp(-a*b) +
    1」は、引数依存型ブロックに入れられ、モデル言語コンパイラ14により図示した解析ツリーに変換される。
    高水準スケーラ・トランスレータ32は、図1の評価済解析ツリー22を以下のように翻訳する。

    【0087】全ての外部変数の値を「CodeGenFAndGrad
    F」のインスタンスに設定し、全ての引数を「CodeGenAr
    gumentFAndGradF」のインスタンスに設定し、適当な導関数を有効にすることにより、この処理が開始する。 その後、メソッド「generateCodeInContext:」が各コード・ブロックに送られる。 このメッセージを受けると、最初に「TspiceCodeGenBlockNode」の新しいインスタンスが生成される。 各ブロックは、同じメソッド「generate
    CodeInContext:」をその割当ステートメント、「if-the
    n-else」ステートメント及び「while」ステートメントの各々に送る。

    【0088】テック・スパイス・モデル割当ノード「Ts
    piceModelAssignmentNode」は、図2の例で用いられる割当関係式を表す一番上のノードであり、メッセージ「generateCodeInContext:」を受ける。 これは2つの部分、左側の変数部分とその右側の式の値の部分とを有する。 そして、メッセージ「generateCodeInContext:」を右側の値に送る。 変数は、テック・スパイス・モデル変数ノードのインスタンスによって表される。 このインスタンスは、ネーム「x」及びその変数の値が可変文脈のどのアドレスに記憶されたかを示す配列参照(arrayRef
    erence)を含んでいる。 配列参照は整列された1対の整数を含んでおり、一方は配列群の中のどの配列かを表す参照値であり、他方は配列へのオフセットを表す値である。

    【0089】テック・スパイス・モデル割当ノードの右側ツリーの値は、テック・スパイス・モデル2進ノード「Tspicemodelbinarynode」で表される。 このノードのキーは一定符号「#+」であり、このノードはプリ値及びポスト値も有する。 このプリ値は、テック・スパイス・モデル関数ノード「TspiceModelFunctionNode」で表され、このノードは一定符号「*EXP」のキーと引数を有する。 この引数は一般に配列に記憶されるが、この例では配列は1つの値しか記憶していない。 その1つの値とは、乗算を表すキー「#*」を有する次のテック・
    スパイス・モデル2進ノードである。 同じメッセージ「generateCodeInContext:」がこれらのノードの各々にも送られる。

    【0090】このテック・スパイス・モデル2進ノード「#*」のプリ値は、キー「#符号変更」を有するテック・スパイス・モデル単一ノード「TspiceModelUnaryNo
    de」で表される。 このノードの値は、次のテック・スパイス・モデル変数ノードで表される。 このノードは、ネーム「A」と配列及びその排列内の位置を表す配列参照とを有する。 このノードは、その値を外部変数又は引数として「CodeGenFAndGradF」の形式で返すが、この値はその変数のその引数についての導関数を含んでいる。

    【0091】上述の変数ノード「A」の上のテック・スパイス・モデル単一ノードは、受けた値の符号を変更し、それを「CodeGenFAndGradF」の形式で再度上側に返す。 その上のテック・スパイス・モデル2進ノード「#
    *」の右側のポスト値は、ネーム「B」のテック・スパイス・モデル変数ノードで表される。 このノードも排列参照を有している。 返された値の形式も「CodeGenFAndG
    radF」である。 このテック・スパイス・モデル2進ノードも「CodeGenFAndGradF」の形式で値を上のテック・スパイス・モデル関数ノードに返し、これがその上のノードのプリ値となる。 テック・スパイス・モデル関数ノードは、「CodeGenFAndGradF」についてその関数(ここでは指数計算)を実行し、その値を同じ形式で上の2進ノードに返す。 このテック・スパイス・モデル2進ノード「#+」のポスト値は、その下のテック・スパイス・モデル・リテラル・ノード「TspiceModelLiteralNode」で表され、そのキーは「1.0D0」である。 この値は「CodeGenFAndGradF」の形式で返される。

    【0092】以上の結果、その上のテック・スパイス・
    モデル2進ノードはプリ値及びポスト値方を得て、自身の操作が実行可能となり、その実行値を「CodeGenFAndG
    radF」の形式で図2の解析ツリーのトップ・ノードであるテック・スパイス・モデル割当ノードに返す。 このトップ・ノードは、返された値を「cGValue」に代入し、
    その変数のネームとその変数の導関数のネームを文脈の中に記憶する。 そして変数「Variable」の中に「cGValu
    e」を代入する。 この変数は、テック・スパイス・モデル変数ノードというメソッドの形式を持っている。 このテック・スパイス・モデル変数ノードは、結果値を文脈中に記憶し、後のイクスプレッションによりアクセス出来るようにする。 更に、テック・スパイス・コード生成割当ノード「TspiceCodeGenAssignmentNode」を生成し、このノードに変数のネームと値を与える。 このテック・スパイス・コード生成割当ノードは、テック・スパイス・モデル・ブロック・ノードに返される。 このノードは、一時的に割当ステートメントを管理し、共通のサブ・イクスプレッションの再実行を回避する。 このテック・スパイス・モデル・ブロック・ノードは、生成されたばかりのテック・スパイス・コード生成割当ノードを用いて、その値を「fAndGradFValue」に代入し、その値を関数部分に再割当し、「self」をブロック・ノードに加え、有効な導関数のネーミングと傾斜値の計算サイクルを実行する。

    【0093】簡単に要約すると、メッセージ「generate
    CodeInContext」がツリーを上から下まで伝搬され、「C
    odeGenFAndGrdF」が割当レベルまで戻され、そしてテック・スパイス・コード生成割当ノードをテック・スパイス・コード生成ブロック・ノードに返すということになる。

    【0094】テック・スパイス・コード生成値ノード「TspiceCodeGenValueNode」は、テック・スパイス・コード生成2進ノード、テック・スパイス・コード生成単一ノード、テック・スパイス・コード生成リテラル・ノードといったクラス群の上位クラス・オブジェクトである。 この上位クラス・ノードは、これらコード生成ノードの全てが使用するメソッドの殆どを含んでおり、全てのサブ・クラスに対してそれらのメソッドを実行する。

    【0095】使用されるメソッドの中には、種々のタイプの最適化を副次的に実行するものもある。 累乗関数が使用される場合には、その中の指数が小さな整数か否かがチェックされ、場合の乗算を利用して効率を上げる。
    そして、累乗の数を常に正の値に決定出来るならば、対数関数及び指数関数を代わりに用いて累乗関数よりも高速に計算出来る。

    【0096】以上本発明の好適実施例について説明したが、本発明はここに説明した実施例のみに限定されるものではなく、本発明の要旨を逸脱することなく必要に応じて種々の変形及び変更を実施し得ることは当業者には明らかである。 例えば、スモールトーク80とは違うオブジェクト指向言語を用いても良いし、C言語とは異なる構造化言語を用いても良い。 仮定条件の再構成をしてステップの実行を異なる順序で行っても良い。

    【0097】

    【発明の効果】本発明の回路シミュレータ用処理方法によれば、オペレータはコンポーネント・モデルを高水準記述で容易に入力することが出来、コンポーネントのモデル化の作業を大幅に軽減することが可能である。

    【図面の簡単な説明】

    【図1】本発明の一実施例の動作を示すデータ流れ図である。

    【図2】モデル動作コード解析ツリーの一例を示す図である。

    【図3】抵抗器モデルに関するスクリーンの表示例を示す図である。

    【符号の説明】

    10 アナログ回路シミュレータ 14 モデル言語コンパイラ 16 モデル動作コード解析ツリー 18 モデル構造データ 20 データ・フロー・アナライザ 26 モデル・デバッガ 32 高水準スケーラ・トランスレータ 36 引数依存性アナライザ 40 C言語コード・モデル・プリンタ 48 解析制御プログラム

    フロントページの続き (72)発明者 アーネスト・ジー・マツクレイノルズ アメリカ合衆国オレゴン州97211 ポート ランド ノース・イースト フオーテイー ス 4625 (72)発明者 マトソン・エム・ハウグ アメリカ合衆国オレゴン州97132 ニユー バーグ ヘス・クリーク・コート 1524

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈