(57)【要約】  ネットリスト（３１）を格納するストレージ（２）と、ネットリスト（３１）に含まれる演算部分の複数の演算を実行するステートメントを含むプログラム（３２）を生成するコンテンツジェネレータ（１２）とを有するコンピュータシステム（１）を提供する。演算部分は、多段階の論理演算を行い、複数の入力を持つ演算と、複数の入力のソースとなる前段階の演算とを含む。コンテンツジェネレータ（１２）は、演算部分を、出力段から入力段に向かって解析し、解析対象の演算が複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる演算であることを判断するアナライザー（１４）と、そのような演算であれば、解析対象の演算を実行するステートメントを、その演算の複数の入力のソースの演算のいずれかを実行し、ドントケアとなる入力のソースの演算をバイパスするステートメントに再構成して出力するコンバータ（１５）とを含む。
2007063957.tif 000002
【特許請求の範囲】
【請求項１】
第１の手続きを格納するためのストレージを有するコンピュータシステムであって、
前記第１の手続きは、入力段と出力段とを含む多段階の論理演算を行う演算部分を備え、前記演算部分は、複数の入力を持つ演算と、前記複数の入力のソースとなる前段階の演算とを含み、
当該コンピュータシステムは、さらに、第２の手続きを生成する手段を有し、前記第２の手続きは、前記演算部分に含まれる複数の演算を実行するための複数のステートメントを含み、
前記第２の手続きを生成する手段は、前記ストレージに格納された前記演算部分を、前記出力段から前記入力段に向かって解析する手段であって、解析対象の演算が、前記解析対象の演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる第１のタイプの演算であることを判断可能な、解析する手段と、
前記解析対象の演算が前記第１のタイプの演算であれば、前記解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力する手段と、を備えており、
前記少なくとも１つのステートメントは、前記解析対象の演算の複数の入力のソースの演算のいずれかを実行し、それによりドントケアとなる入力のソースの演算をバイパスするためのステートメントを含む、コンピュータシステム。
【請求項２】
請求項１において、前記出力する手段は、前記解析対象の演算を実行するためのステートメントを、
前記解析対象の演算の複数の入力の１つを第１の入力とし、その第１の入力のソースの演算を実行するための第１のステートメントと、
前記解析対象の演算の出力をセットするための第２のステートメントと、
前記第１の入力によりドントケアとなる入力のソースの演算を実行するための第３のステートメントと、
前記第１の入力によりドントケアの入力が発生すると、前記ドントケアとなる入力のソースの演算をバイパスするための第４のステートメントと、を含むステートメントに再構成する、コンピュータシステム。
【請求項３】
請求項２において、前記第４のステートメントは、前記第１の入力によりドントケアの入力が発生すると、前記第３のステートメントをバイパスするためのステートメントである、コンピュータシステム。
【請求項４】
請求項２において、前記第２のステートメントは、規定値をセットするためのステートメントである、コンピュータシステム。
【請求項５】
請求項１において、テンプレートを格納するためのストレージをさらに有し、前記テンプレートは、入力の一部がドントケアになる種類の演算毎に、その演算を実行するためのステートメントを、前記少なくとも１つのステートメントに再構成するための情報を含み、
さらに、前記出力する手段は、前記テンプレートを参照し、前記解析対象の演算を実行するためのステートメントを、前記少なくとも１つのステートメントに再構成する、コンピュータシステム。
【請求項６】
請求項１において、前記出力する手段は、前記解析対象の演算を実行するためのステートメントを再構成することによる、前記演算部分の実行速度の改善が予想されるときに、前記解析対象の演算を実行するためのステートメントを、前記少なくとも１つのステートメントに再構成することを含む、コンピュータシステム。
【請求項７】
請求項１において、前記出力する手段は、同一の演算を実行するためのステートメントの重複出力を防止することを含む、コンピュータシステム。
【請求項８】
請求項１において、前記第２の手続きを生成する手段を含むコンパイラとしての機能が実装されている、コンピュータシステム。
【請求項９】
請求項１において、さらに、論理回路の記述から、ゲートレベルのネットリストを生成する手段と、
前記ネットリストに含まれる前記第１の手続きに基づき生成された前記第２の手続きを含むプログラムを生成する手段と、を有し、
前記プログラムを生成する手段は、前記第２の手続きを生成する手段を含む、コンピュータシステム。
【請求項１０】
請求項９において、前記プログラムを実行するシミュレータとしての機能が実装されている、コンピュータシステム。
【請求項１１】
第１の手続きを格納するためのストレージを有するコンピュータに実装されるプログラムであって、
前記第１の手続きは、入力段と出力段とを含む多段階の論理演算を行う演算部分を備え、前記演算部分は、複数の入力を持つ演算と、前記演算の複数の入力のソースとなる前段階の演算とを含み、
当該プログラムは、前記コンピュータを第２の手続きを生成する手段として機能させることを含み、前記第２の手続きは、前記演算部分に含まれる複数の演算を実行するための複数のステートメントを含み、
前記第２の手続きを生成する手段は、前記ストレージに格納された前記演算部分を、前記出力段から前記入力段に向かって解析する手段であって、解析対象の演算が、前記解析対象の演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる第１のタイプの演算であることを判断可能な、解析する手段と、
前記解析対象の演算が前記第１のタイプの演算であれば、前記解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力する手段と、を備えており、
前記少なくとも１つのステートメントは、前記解析対象の演算の複数の入力のソースの演算のいずれかを実行し、それによりドントケアとなる入力のソースの演算をバイパスするためのステートメントを含む、プログラム。
【請求項１２】
第１の手続きを格納するためのストレージを有し、前記第１の手続きは、入力段と出力段とを含む多段階の論理演算を行う演算部分を備え、前記演算部分は、複数の入力を持つ演算と、前記複数の入力のソースとなる前段階の演算とを含み、
さらに、第２の手続きを生成するジェネレータを有し、前記第２の手続きは、前記演算部分に含まれる複数の演算を実行するための複数のステートメントを含み、
前記ジェネレータは、前記演算部分を前記出力段から前記入力段に向かって解析するアナライザーであって、解析対象の演算が、前記解析対象の演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる第１のタイプの演算であることを判断可能な、アナライザーと、
前記解析対象の演算が前記第１のタイプの演算であれば、前記解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力するコンバータと、を備えており、
前記少なくとも１つのステートメントは、前記解析対象の演算の複数の入力のソースの演算のいずれかを実行し、それによりドントケアとなる入力のソースの演算をバイパスするためのステートメントを含む、システム。
【請求項１３】
請求項１２において、前記第１の手続きを含む第１のコンテンツから、前記第２の手続きを含む第２のコンテンツに生成するコンパイラを含む、システム。
【請求項１４】
請求項１３において、前記第２のコンテンツを実行するシミュレータを含む、システム。
【請求項１５】
ストレージを備えたコンピュータに実装され、第１の手続きから第２の手続きを生成することを含む方法であって、
前記第１の手続きは、入力段と出力段とを含む多段階の論理演算を行う演算部分を備え、前記演算部分は、複数の入力を持つ演算と、前記複数の入力のソースとなる前段階の演算とを含み、
前記第２の手続きは、前記演算部分に含まれる複数の演算を実行するための複数のステートメントを含み、
前記第２の手続きを生成することは、以下の工程を含む、方法。
（ａ）  前記ストレージに格納された前記演算部分を、前記出力段から前記入力段に向かって解析し、解析対象の演算が、前記解析対象の演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる第１のタイプの演算であることを判断する。
（ｂ）  前記解析対象の演算が前記第１のタイプの演算であれば、前記解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力する。前記少なくとも１つのステートメントは、前記解析対象の演算の複数の入力のソースの演算のいずれかを実行し、それによりドントケアとなる入力のソースの演算をバイパスするためのステートメントを含む。
【請求項１６】
請求項１５において、前記工程（ｂ）は、前記解析対象の演算を実行するためのステートメントを、
前記解析対象の演算の複数の入力の１つを第１の入力とし、その第１の入力のソースの演算を実行するための第１のステートメントと、
前記解析対象の演算の出力をセットするための第２のステートメントと、
前記第１の入力によりドントケアとなる入力のソースの演算を実行するための第３のステートメントと、
前記第１の入力によりドントケアの入力が発生すると、前記ドントケアとなる入力のソースの演算をバイパスするための第４のステートメントと、を含むステートメントに再構成することを含む、方法。
【請求項１７】
請求項１５において、前記第２の手続きを生成することは、前記工程（ａ）および前記工程（ｂ）を繰り返すことを含み、前記工程（ｂ）では、前記ストレージに出力する、方法。
【請求項１８】
請求項１５において、前記工程（ｂ）は、入力の一部がドントケアになる種類の演算毎に、その演算を実行するためのステートメントを前記少なくとも１つのステートメントに再構成するための情報を備えたテンプレートを参照することを含む、方法。
【請求項１９】
請求項１５において、前記工程（ｂ）は、前記解析対象の演算を実行するためのステートメントを再構成することによる、前記演算部分の実行速度の改善が予想されるときに、前記解析対象の演算を実行するためのステートメントを、前記少なくとも１つのステートメントに再構成することを含む、方法。
【請求項２０】
請求項１５において、さらに、前記工程（ｂ）は、同一の演算を実行するためのステートメントの重複出力を防止することを含む、方法。
【請求項２１】
請求項１５において、論理回路の記述から、前記第１の手続きを含むゲートレベルのネットリストを生成することと、
前記第２の手続きを生成することを含み、前記第２の手続きを含むシミュレーション用のプログラムを生成することと、
前記シミュレーション用のプログラムにより前記論理回路をサイクルベース方式でシミュレーションすることと、を有する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムおよび／またはハードウェア制御情報を含む手続きに含まれるステートメントを再構成する方法およびコンピュータシステムに関するものである。
【背景技術】
【０００２】
データの入力から演算結果の出力までが多段階構成の論理（論理演算）で定義されることは多い。多段（多段階構成）の論理演算は、コーディング段階では、データまたは情報の入力から出力までの時間経過に沿って、入力段の演算から出力段の演算に向けて記述される。また、通常は、多段の論理演算は、その記述に従い、また、時間経過に従って実行される。多段の論理演算の一例は、ＬＳＩなどに論理回路として実装されるものである。論理回路の多くは、ＡＮＤおよびＯＲなどの多種のゲート回路を演算素子として、それら演算素子の多段の組合せにより構成される。【０００３】
多段階の論理回路において、後続（後段）の演算素子は、前段階の複数の演算素子の出力を入力として演算を行なう。多段階の論理回路を実装するための典型的なハードウェアは、前段階の複数の演算素子が並列に動作する回路を構成するのに十分なハードウェア資源、例えば、論理演算素子（ゲート素子、演算素子）、配線を備えている。したがって、前段階の複数の演算素子の演算順序が問題にされることはない。しかしながら、ハードウェア資源が充分でないハードウェアに多段の論理回路を実装する場合、あるいは、多段の論理演算をプログラムによりシーケンシャルに実行する場合には、前段階の演算順序が演算速度に影響を与える可能性がある。【０００４】
多段の論理回路をプログラムによりシーケンシャルに実行する一例は、ＬＳＩ設計に際して、ＬＳＩの機能検証を行うシミュレーションである。ＬＳＩのシミュレーション手法としては、イベント駆動方式とサイクルベース方式が知られている。イベント駆動方式は、信号の値の変化とその影響を時間軸に沿って追跡する方式である。サイクルベース方式は、回路内の全てのロジックを１クロックサイクルに１回ずつ直線的に評価する方式である。したがって、１クロックサイクルで、回路の多段の論理を構成する演算を基本的には全て評価する必要がある。【０００５】
サイクルベース方式は毎クロックサイクル全てのロジックを評価しなければならない。このため、イベント駆動方式よりも一見遅いように考えられる。しかしながら、イベントリストへの挿入削除といった管理が不要なので、実際にシミュレーションするとイベント駆動方式よりも速い可能性がある。とくに、活動率の高い（信号変化の活発な）近年のパイプライン指向ＬＳＩをシミュレーションする場合は、信号変化をいちいち追跡するイベント駆動方式より全ロジックを単純一律に評価するサイクルベース方式の方が高速である。【０００６】
シミュレーションの高速化は、ＬＳＩ設計規模の増大に伴ってますます重要になってきている。日本国特許公開公報２０００−５７２０３号は、サイクルベース方式のシミュレーションにおいて、与えられたネットリストの意味（演算手順）を保ったまま、リテラルの数を減少するようにゲートを除去したり、大型ゲートを因数分解形式で表現するなどの方法により、シミュレーションが高速になるような形式に変換する手法を開示している。日本国特許公開公報２０００−８２０９１号は、機能シミュレーションを高速に行なうために、機能回路情報にしたがって機能ユニットを抽出し、機能ユニット毎の各機能の実行頻度を算出し、各機能の実行頻度を利用して機能回路情報から機能回路のシミュレーションモデルを生成することが記載されている。【０００７】
ＬＳＩ設計規模の増大に伴い、シミュレーション速度のさらなる向上が要求されている。シミュレーションに要する時間が長大であると、ＬＳＩ設計スケジュールが長期化する。一方、設計スケジュールを短縮するためにシミュレーション量を減らすような事態になると、ＬＳＩ製造後に、不具合が露呈するなどの問題が発生する要因となる。さらに、多段の論理演算を、コンピュータなどのプログラムにより動作するシステムにおいて実行する際に、実行時間を短縮できることは重要である。
【発明の開示】
【０００８】
本発明の１つの態様は、第１の手続きを格納するためのストレージを有するコンピュータシステムである。この第１の手続きは、入力段と出力段とを含む多段階の論理演算を行う演算部分を備え、演算部分は、複数の入力を持つ演算と、複数の入力のソースとなる前段階の演算（複数）とを含む。
【０００９】
当該コンピュータシステムは、さらに、第２の手続きを生成する手段を有する。第２の手続きは、第１の手続きの演算部分に含まれる複数の演算を実行するための複数のステートメントを含む。この第２の手続きを生成する手段（スケジューリング機能）は、ストレージに格納された演算部分を出力段から入力段に向かって解析する手段を備えている。この解析する手段は、さらに、解析対象の演算が、その演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになるタイプ（第１のタイプ）の演算であることを判断可能である。
【００１０】
第２の手続きを生成する手段は、さらに、解析対象の演算が第１のタイプの演算であれば、解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力する手段を備えている。少なくとも１つのステートメントは、解析対象の演算の複数の入力のソース(発生源）となる演算のいずれか、すなわち、前段階の複数の演算のいずれかを実行し、それによりドントケアとなる入力のソース（発生源）となる演算、すなわち、前段階の演算のいずれかをバイパスするためのステートメントを含む。
【００１１】
典型的には、出力する手段は、解析対象の演算を実行するためのステートメントを、以下の４つのステートメントを含む複数のステートメントに再構成する。
（１）解析対象の演算の複数の入力の１つを第１の入力とし、その第１の入力のソースの演算を実行するための第１のステートメント。
（２）解析対象の演算の出力をセットするための第２のステートメント。
（３）第１の入力によりドントケアとなる入力のソースの演算を実行するための第３のステートメント。
（４）第１の入力によりドントケアの入力が発生すると、ドントケアとなる入力のソースの演算をバイパスするための第４のステートメント。この第４のステートメントの典型的なものは、第１の入力によりドントケアの入力が発生すると、前記第３のステートメントをバイパスするためのステートメントであり、これらのステートメントは必ずしもこの順番に記述されるものではない。
【００１２】
第１の手続きの一形態は、多段の論理演算を含む論理回路の記述あるいはそれを論理合成したゲートレベルのネットリストである。第２の手続きの一形態は、コンピュータプログラム（以降においてはプログラム）であり、複数のステートメントが、コンピュータハードウェアを制御する複数の命令を含む。第２の手続きの他の一形態は、再構成可能な論理回路を再構成するためのハードウェア制御情報であり、複数のステートメントは、サイクル単位で論理回路の少なくとも一部を再構成するためのコンフィグレーション情報を含む。第１の手続きの他の形態が、これらのプログラムまたはハードウェア制御情報であっても良い。
【００１３】
この明細書において、「入力がドントケアになる」あるいは「ドントケアとなる入力が発生する」とは、ある演算（本明細書における「第１のタイプの演算」）において、その演算のドントケアの入力の値が決まらなくても、その演算の出力が決まることを示す。例えば、２入力のＡＮＤゲートであれば、一つの入力（例えば、本明細書における「第１の入力」）が「０」（負あるいは偽）であれば、他方の入力が決まらなくてもＡＮＤゲートの出力は「０」になる。この場合、他の入力が「ドントケアとなる入力（ドントケアの入力）」である。多入力のＡＮＤゲートでも同様である。２入力のＯＲゲートであれば、一つ入力（第１の入力）が「１」（正または真）であれば、他方の入力が決まらなくてもＯＲゲートの出力は「１」になる。この場合も、他の入力は「ドントケアとなる入力」である。多入力のＯＲゲートでも同様である。２入力のセレクタであれば、選択信号（第１の入力）が決まれば、それにより選択されない一方の入力は「ドントケアの入力」となる。
【００１４】
ドントケアの入力のソース（発生源）となる演算は、その出力を入力とする演算部分の結果を得るためには実行する必要がない。本発明の一態様であるコンピュータシステムでは、第２の手続きを生成する手段が、演算を実行するステートメントを含む手続きを生成する際に、解析する手段が、第１の手続きの演算部分に含まれる演算を出力段の側から入力段の側に解析する。出力段の側から入力段の側に解析することにより、入力がドントケアとなるタイプ（第１のタイプ）の演算を判断でき、その解析対象の演算に対する前段階の演算の実行（評価）の要否を判断可能となる。
【００１５】
そして、出力する手段は、解析対象の演算が、その入力の一部がドントケアとなる第１のタイプであれば、その演算を実行するステートメントを上記の第１〜第４のステートメントに再構成してストレージに出力する。再構成されたステートメントを含む手続きは、ドントケアとなる入力が発生したときに、そのドントケアとなる入力のソースの演算の実行をバイパスする手続きとなる。
【００１６】
第２の手続きを生成する手段は、さらに、再帰的に（繰り返し）処理することを含む。すなわち、第２の手続きを生成する手段は、さらに、解析する手段と、出力する手段とにより、ストレージに出力された、再構成されたステートメントに含まれる演算を同様に、再帰的に再構成することを含む。したがって、第２の手続きを生成する手段により、第１の手続きの演算部分を、その演算部分に含まれる演算にドントケアとなる入力が発生したときは、その入力のソースの演算の実行（評価）をバイパスするようにスケジューリングされた複数のステートメント（ステートメント群）により表現した部分を含む第２の手続きを生成できる。
【００１７】
解析対象の演算が、セレクタなどとして実装される選択的な演算であれば、上記第２のステートメントは、ドントケアにならない入力により、解析対象の演算を実行し、その出力をセットするステートメントである。このステートメントは、ルックアップテーブル（ＬＵＴ）を参照したり、利用したりするステートメントであっても良い。ＡＮＤ、ＯＲなどの０／１（正負、真偽）を出力する論理演算であれば、上記第２のステートメントは、単に規定値を出力にセットするためのステートメントとなる。
【００１８】
コンピュータシステムは、テンプレートを格納するためのストレージをさらに有することが望ましい。テンプレートは、入力の一部がドントケアになる種類の演算毎に、その演算を実行するためのステートメントを、上記第１から第４のステートメントあるいはそれらの動作を含む少なくとも１つのステートメントに再構成するための情報（指示）を含む。テンプレートは、第１の手続きと同じストレージに格納しても良く、異なるストレージに格納してもよい。さらに、テンプレートは、コンピュータシステムを制御するプログラムに埋め込まれていても良い。出力する手段は、テンプレートを参照し、解析対象の演算を実行するためのステートメントを再構成しても良い。
【００１９】
出力する手段は、さらに、解析対象の演算を実行するためのステートメントを再構成することにより、演算部分の実行速度の改善が予想されるときに、該当するステートメントを再構成することを含むことが望ましい。演算をバイパスする第４のステートメントを生成しても、バイパスする機会がほとんどなければ、第２の手続きは、バイパスするステートメントを実行する分だけ遅くなる可能性がある。また、バイパスする演算がイミーディエイトをセットしたり、グローバル変数をセットするような処理であれば、バイパスしなくても処理速度にほとんど影響は与えない。一方、メモリにアクセスするような数クロックを要する処理であれば、バイパスする意味がある。
【００２０】
出力する手段は、同一の演算を実行するためのステートメントの重複出力を防止できることが望ましい。演算部分に含まれる複数の演算が、ある前段階の演算の出力を共通の入力として使用する場合、その入力のソースの演算を実行するためのステートメントが複数生成される可能性がある。その入力のソースの演算を実行するために数クロックを要する場合、その演算を実行するためのステートメントが重複しないように第２の手続きを生成することにより、第２の手続きをシミュレータなどで実行するための時間を短縮できる可能性がある。
【００２１】
このコンピュータシステムの一形態は、第１の手続きを含む第１のコンテンツから、第２の手続きを含む第２のコンテンツを生成するコンパイラである。第２のコンテンツは、プログラムおよび／またはハードウェア制御情報を含む。このコンピュータシステムの異なる形態は、第２のコンテンツを実行するシミュレータである。
【００２２】
シミュレータの一例は、サイクルベース方式のシミュレーションを行なうためのモデルを生成し、実行するシステムである。そのようなコンピュータシステムの一形態は、論理回路のゲートレベルのネットリストを生成する手段と、ネットリストに含まれる第１の手続きに基づき生成された第２の手続きを含むプログラムを生成する手段とを有し、このプログラムを生成する手段は第２の手続きを生成する手段を含む。プログラムの１つは、シミュレーション用のプログラムであり、コンピュータシステムは、さらに、シミュレーション用のプログラムを実行するシミュレータとしての機能を含むことが望ましい。
【００２３】
本発明の他の態様の１つは、第１の手続きを格納するためのストレージを有するコンピュータに実装されるプログラム（プログラム製品）である。このプログラムは、コンピュータを上記の第２の手続きを生成する手段として機能させることを含む。プログラム（プログラム製品）は、ＨＤＤ、ＣＤ−ＲＯＭなどのコンピュータが読み取り可能な、適当な記録媒体に記録して提供できる。また、プログラムは、インターネットなどのコンピュータネットワークを介して提供できる。
【００２４】
本発明のさらに他の１つの態様は、ストレージを備えたコンピュータに実装され、第１の手続きから第２の手続きを生成することを含む方法である。この第２の手続きを生成することは、以下の工程を含む。
（ａ）  ストレージに格納された演算部分を、出力段から入力段に向かって解析し、解析対象の演算が、その演算の複数の入力の一部が決まることにより、他の入力の少なくとも一部がドントケアになる第１のタイプの演算であることを判断する。
（ｂ）  解析対象の演算が第１のタイプの演算であれば、解析対象の演算を実行するためのステートメントを、少なくとも１つのステートメントに再構成して出力する。少なくとも１つのステートメントは、前記解析対象の演算の複数の入力のソースの演算のいずれかを実行し、それによりドントケアとなる入力のソースの演算をバイパスするためのステートメントを含む。
工程（ｂ）において、再構成され、出力される典型的なステートメント（少なくとも１つのステートメント）は、上記の第１から第４のステートメントを含むものである。また、この方法は、再構成された少なくとも１つのステートメントを含むコンテンツを製造（生成）する方法である。
【００２５】
第２の手続きを生成することは、工程（ａ）および工程（ｂ）を繰り返すこと（再帰的に処理すること）を含むことが望ましい。この場合、工程（ｂ）は、再構成されたステートメントを、解析の対象となるストレージに出力する。
【００２６】
上記工程（ｂ）は、入力の一部がドントケアになる種類の演算毎に、その演算を実行するためのステートメントを上記の少なくとも１つのステートメントに展開するための情報（指示）を備えたテンプレートを参照することを含むことが望ましい。
【００２７】
また、上記工程（ｂ）は、解析対象の演算を実行するためのステートメントを再構成することにより、演算部分の実行速度の改善が期待されるときに、解析対象の演算を実行するためのステートメントを再構成することを含むことが望ましい。
【００２８】
さらに、上記工程（ｂ）は、同一の演算を実行するためのステートメントの重複生成を防止することを含むことが望ましい。
【００２９】
この方法は、論理回路のシミュレーション方法に適用できる。この方法は、論理回路の記述から、第１の手続きを含むゲートレベルのネットリストを生成することと、第２の手続きを含むシミュレーション用のプログラムを生成することと、シミュレーション用のプログラムにより論理回路をサイクルベース方式でシミュレーションすることを含むことが望ましい。
【図面の簡単な説明】
【００３０】
【図１】シミュレーションモデル（プログラム）を生成するコンピュータシステムの概略構成を示す図。
【図２】シミュレーションプログラムを生成する処理の概要を示すフローチャート。
【図３】論理回路の一例を示す図。
【図４】図３の論理回路のシミュレーションプログラムの一例を示す図。
【図５】図３の論理回路に対応するシミュレーションプログラムの他の例を示す図。
【図６】論理回路の異なる例を示す図。
【図７】図６の論理回路のシミュレーションプログラムの一例を示す図。
【図８】図６の論理回路に対応するシミュレーションプログラムの他の例を示す図。
【図９】テンプレートの一例を示す図。
【図１０】図３の論理回路に対応するシミュレーションプログラムの異なる例を示す図。
【図１１】図１０に示すプログラムが生成される経緯を示す図。
【図１２】テンプレートの異なる例を示す図。
【図１３】テンプレートのさらに異なる例を示す図。
【図１４】論理回路の異なる例を示す図。
【図１５】図１４の論理回路に対応するシミュレーションプログラムの一例を示す図。
【図１６】図１４の論理回路に対応するシミュレーションプログラムの異なる例を示す図。
【図１７】テンプレートのさらに異なる例を示す図。
【図１８】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図１９】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図２０】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図２１】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図２２】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図２３】図１４の論理回路に対応するシミュレーションプログラムのさらに異なる例を示す図。
【図２４】テンプレートのさらに異なる例を示す図。
【図２５】テンプレートのさらに異なる例を示す図。
【発明の実施の形態】
【００３１】
図１に、論理回路をサイクルベース方式でシミュレーションするためのモデルを生成するコンピュータシステムの概略構成を示している。このコンピュータシステム１は、典型的にはハードディスクであるストレージ２と、ＣＰＵおよびメモリを含む適当な資源により構成される処理機能３とを備えている。ストレージ２に格納されたモデル生成プログラム５が処理機能３にロードされることにより、モデル生成システム（コンパイラ）６として要求される各種の機能が提供される。モデル生成システム６は、ＲＴＬなどによる論理回路の記述３０から、ゲートレベルのネットリスト３１を生成する手段である論理合成機能１１と、そのゲートレベルのネットリスト（第１のコンテンツ）３１の評価順序（評価スケジュール）を決めて、モデル（第２のコンテンツ）としてシミュレーション用のプログラム（シミュレーションプログラム）３２を生成する手段であるコンテンツジェネレータ（ジェネレータ）１２とを備えている。モデル生成プログラム５に代わり、シミュレーションプログラム３２が処理機能３にロードされることにより、このコンピュータシステム１はサイクルベース方式のシミュレーションを行なうシミュレータ７としても機能する。
【００３２】
ジェネレータ１２は、ネットリスト３１に含まれる、多段の組み合わせロジック部（論理演算部）の各ゲートに対応する演算（論理演算）を、出力段から入力段に向かって再帰的に解析し、スケジューリングする機能を含む。すなわち、ネットリスト３１に含まれる多段階の論理演算を出力段から入力段に向かって解析する手段（アナライザー）１４と、論理演算をシミュレーションプログラム３２に含まれる命令（ステートメント）に変換および再構成して出力する手段（コンバータ）１５を備えている。
【００３３】
アナライザー１４は、ネットリスト３１の各ゲートに対応する各演算の中で、解析対象となっている演算が、ドントケアの入力信号が発生するタイプ（第１のタイプ）の演算であることを判断する。コンバータ１５は、解析対象の演算が第１のタイプであると、その演算を実行するための命令（ステートメント）を次のような複数の命令（複数のステートメント）に再構成する。なお、シミュレーションプログラムにおいて演算を実行することは、シミュレーションにおいて演算を評価することであり、演算結果あるいは演算出力はシミュレーションの評価結果である。
１．  適切な入力信号（第１の入力信号）を選び、そのソースのゲートに対応する前段の演算を実行（評価）する第１の命令（第１のステートメント）。
２．  解析対象の演算の出力（評価結果）をセットする第２の命令（第２のステートメント）。
３．  第１の入力信号により、ドントケアとなる入力信号（ドントケアの入力信号）のソースのゲートに対応する前段階の演算を実行（評価）する第３の命令（第３のステートメント）。
４．  第１の入力信号により、第３の命令をスキップする第４の命令（第４のステートメント）。
【００３４】
アナライザー１４およびコンバータ１５は、第１および第３の命令に含まれる演算、場合によっては第２の命令に含まれる演算を、それぞれ解析対象の演算として、入力段の演算に到達するまで同様の処理を繰り返す。これら第１〜第４の命令は、その順番に実行される必要はない。第４の命令は条件分岐命令であり、その条件に第１の命令を組み込むことができる。特に、評価対象の演算がイミーディエイトあるいはグローバル変数を入力する場合は、第１の命令は単に変数をセットするだけになり、条件分岐命令に組み込むことが望ましい。この場合は、コンバータ１５により出力される、実際のステートメントは３つのステートメントになる。条件分岐命令である第４の命令は、第３の命令よりも前に実行される必要がある。また、第２の命令は、条件分岐後に実行されても、分岐前に実行されても良い。
【００３５】
このモデル生成システム６では、再構成機能を含むコンバータ１５は、ネットリスト３１などと共にストレージ２に格納されているテンプレート群２０の適当なテンプレートを参照し、解析対象の演算に対応した第１〜第４の命令を生成する。モデル（シミュレーションプログラム）３２の生成中は、アクセス速度の改善のために、処理機能３に含まれるＲＡＭなどのＣＰＵが高速アクセス可能なストレージにテンプレート群２０を一時的に格納しておくことが望ましい。プログラム５から独立したテンプレート群２０であれば、テンプレートファイルの追加削除により、テンプレート処理パターンを変えることができる。
【００３６】
テンプレート群２０は、ストレージ２に格納されるモデル生成プログラム５に埋め込んでおいても良い。テンプレート群２０あるいはテンプレート群に対応する処理を行うステートメントをプログラム５に埋め込めば、独立したテンプレート群２０を一々読み出す必要がないので、プログラム５自体の作成が容易になる。
【００３７】
ジェネレータ１２により生成された命令列を含むシミュレーションプログラム３２を実行すると、演算部分の実行は、大枠では入力段から出力段に向かって進む。しかしながら、あるゲートに対応する演算のある入力信号の値を評価しただけで、そのゲートの出力値が決まってしまう場合には、残りのドントケアの入力信号の値を算出するための前段の演算の実行命令をスキップする（短絡評価）。このため、シミュレーションプログラム３２によれば、シミュレータ７は、各クロックサイクルに全ゲートを実行するとは限らず、シミュレーションの処理速度を向上できる。したがって、サイクルベース機能シミュレーションを高速化し、ＬＳＩ設計規模の増大に伴うシミュレーション負荷増大に応じることが可能となる。
【００３８】
図２に、コンピュータシステム１において、ネットリスト３１またはその一部を第１の手続きとし、その第１の手続きから、シミュレーションプログラム３２またはその一部を第２の手続きとして生成する処理の概要を示している。さらに、図２のフローチャートは、シミュレーションプログラム３２によりシミュレーションを行うまでの処理を含んでいる。ステップ５１において、論理合成機能１１により、論理回路記述３０を論理合成してゲートレベルのネットリスト３１を生成する。次に、プログラムジェネレータ１２を第２の手続きを生成する手段とし、ステップ５２から５６において、そのネットリスト３１に含まれる多段階の演算部分を実行するための命令列を含むシミュレーションプログラム３２を生成する。したがって、ステップ５２から５６が、ネットリスト３１を第１の手続きとして、第１の手続きから、シミュレーションプログラム３２に含まれる第２の手続きを生成する工程となる。
【００３９】
第２の手続きを生成する工程では、まず、ステップ５２において、アナライザー１４により演算部分の出力段の演算を解析する。ステップ５４において、ドントケアの入力（ドントケアとなる入力）が発生する演算であれば、ステップ５５において、コンバータ１５は、解析対象の演算を実行する命令を第１〜第４の命令に再構成し、ストレージ２に第２のコンテンツ（仮プログラム）の命令（ステートメント）として出力する。次に、ステップ５３において、前に出力されたプログラムの命令を第１の手続きとし、その中の再構成された命令に含まれる演算（前段階の演算）を出力段から入力段に向かい、再帰的に解析する。前段階の演算がドントケアの入力が発生するタイプであれば、同様に、演算を実行する命令を再構成する。そして、ステップ５６において、演算部分に含まれる演算の解析が終了するまで、上記の処理を繰り返す。
【００４０】
ステップ５５の再構成する工程においては、同一の前段階の演算を実行するための命令が重複して生成されないようにすることが望ましい。統合する機能を設け、再構成が終了した後に、同じ演算を実行する命令を統合して処理速度をさらに向上できるようにしても良い。
【００４１】
論理回路のシミュレーションモデルとなるプログラム３２が生成されると、ステップ５８において、そのプログラム３２を用いてシミュレーションを実行する。
【００４２】
図３に、ゲートレベルのネットリスト３１に含まれる論理部分の構成を、ゲート回路表記により示している。なお、以下に示すネットリスト、プログラムリストなどは説明のための例示に過ぎない。
【００４３】
ネットリスト３１に含まれる、ある演算部分３６ａは２段階の組み合わされた論理演算である。したがって、ストレージ２に格納された第１の手続きに相当する。論理演算部分３６ａは、入力段３３の演算３３ｐおよび３３ｑ、および出力段３４の演算３４ｙを含む。入力段の演算３３ｐは、信号Ａおよび信号Ｂを入力として論理（ＡＮＤ）を演算し、信号Ｐを出力する。入力段の演算３３ｑは、信号Ｃおよび信号Ｄを入力として論理（ＮＡＮＤ）を演算し、信号Ｑを出力する。出力段の演算３４ｙは、信号Ｐおよび信号Ｑを入力として論理（ＯＲ）を演算し、信号Ｙを出力する。信号Ｙが演算部分３６ａの出力となる。この演算部分３６ａでは、入力段３３の演算が、出力段３４の演算に対して前段階（前段）の演算であり、出力段３４の演算が入力段３３の演算に対して後段階（後段、後続）の演算である。
【００４４】
図４に、演算部分３６ａを、図１とは異なるサイクルベースシミュレータでコンパイルしたシミュレーションプログラムの一例を示している。このシミュレーションプログラム３９は、以下に示す記述では概して比較例として取り扱う。しかしながら、比較例として示したプログラムを出力する機能を備えたシステム、プログラム、方法などが、本願の特許請求の範囲に含まれないことを意図するものではないことは明白である。また、以下の実施形態において、プログラムに含まれる複数の命令（ステートメント）のそれぞれをコードと記述し、コードのグループをコードブロックと記述することがある。また、論理演算、演算またその論理演算に対応したゲート（論理ゲート）をノードと記述することがある。また、以下の実施形態において、ステートメントを再構成することを含めてコンテンツを生成することを「スケジューリング」または「スケジューリングする」と記述することがある。その他、本明細書においては、幾つかのワードを異なるワードで置き換えて記述することがあるが、それらは、本願に含まれる発明をより分かり易く説明するためであり、本願の特許請求の範囲を限定しようとするものではない。
【００４５】
比較例のコード３９ａは、演算部分３６ａが入力段から出力段に向かって実行されるようにコンパイルされた結果である。サイクルベース方式のシミュレーションでは、コードブロック３９ａのＳＴＡＲＴラベルからＥＮＤラベルまでが１クロックサイクル分の論理回路の動作をシミュレートするための命令のグループ（命令列）を示す。シミュレーションにおいては、この命令列がクロックサイクル分だけ繰り返し実行される。したがって、図４のコードブロック３９ａによりシミュレーションが実行されると、クロックサイクル毎に、全てのゲートの論理演算に対応した命令が入力段３３から出力段３４に向かって単純一律に実行され、評価される。すなわち、コードブロック３９ａには、上から順番に、入力段の演算３３ｐ、演算３３ｑおよび出力段の演算３４ｙを実行する命令がそれぞれ記述され、この順番に演算が実行される。
【００４６】
図５に、演算部分３６ａを、図１のモデル生成システム６によりコンパイルしたシミュレーションプログラム３２の一例を示している。アナライザー１４により演算部分３６ａを出力段３４から入力段３３に向かって解析する。まず、出力段の演算３４ｙは、論理（ＯＲ）であり、ドントケアが発生するタイプ１の演算であることが分かる。このため、入力信号ＰおよびＱの内、一方の入力信号、例えば信号Ｐが「１」であると、他方の入力信号Ｑによらず、出力信号Ｙは「１」になる。したがって、他方の入力信号Ｑはドントケアとなる入力信号である。このため、入力信号Ｐの値によっては、他方の入力信号Ｑのソース（発生源）である前段階の演算（この例では、入力段の演算）３３ｑを実行する必要はない。
【００４７】
図２に示したフローチャートに従うと、アナライザー１４により出力段の演算３４ｙが解析される。コンバータ１５により、出力段の演算３４ｙを実行する命令が、コードブロック３２ａに示すように、第１の命令６１、第２の命令６２、第３の命令６３および第４の命令６４の命令列に再構成され、ストレージ２に出力される。コードブロック３２ａにおいて、第１の命令６１は、第１の入力として選択した入力信号Ｐのソースの演算３３ｐを実行するための命令（ステートメント）である。第２の命令６２は、入力信号Ｐにより入力信号Ｑがドントケアとなるときの出力信号Ｙをセットするための命令（ステートメント）である。第３の命令６３は、ドントケアとなる入力の入力信号Ｑのソースの演算３３ｑを実行するための命令（ステートメント）である。第４の命令６４は、入力信号Ｐにより入力信号Ｑがドントケアになると第３の命令６３をバイパスするための命令（ステートメント）である。
【００４８】
コードブロック３２ａは、第２の手続きの一例であり、記述はこれに限られない。コードブロック３２ａに含まれる命令を組み合わせた記述または分割した記述にすることは可能である。例えば、命令６３は、演算３３ｑを実行し、その結果を出力Ｙにセットする１命令の記述にしても良い。第１の命令６１は、条件分岐命令である第４の命令の条件の記述に含めても良い。また、第２の命令６２は、第４の命令のＥＬＳＥ文として記述しても良い。
【００４９】
図５に示すコードブロック３２ａがシミュレータ７で実行されると、大枠では入力段３３から出力段３４に向かって演算が実行され、評価が進む。しかしながら、信号Ｐの値が「１」であると、信号Ｑの値はドントケアとなるので、演算３３ｑの計算自体がスキップされる。この程度の規模の回路だと、第４の命令６４の条件分岐のステートメントの実行がオーバヘッドとなる。このため、コードブロック３２ａの実行速度と、コードブロック３９ａの実行速度とは大差なく、コードブロック３２ａの実行速度の方がかえって遅くなる可能性もある。しかしながら、演算３３ｑが単なるＮＡＮＤゲートでなく、多段の複雑なロジックにより演算されるような場合は、その多段の演算の実行を丸ごとスキップできる。このため、ドントケアが発生するサイクルのコードブロック３２ａの実行時間を大幅に短縮できる。
【００５０】
図６に、ネットリスト３１に含まれる異なる演算部分３６ｂの構成を示している。この演算部分３６ｂも２段階の組み合わされた論理演算であり、入力段３３の演算３３ｐ、３３ｑおよび３３ｒと、出力段３４の演算３４ｙとを含む。入力段の演算３３ｐおよび３３ｑは、図３に示した演算と同様である。演算３３ｒは、信号Ｅおよび信号Ｆを入力として論理（ＯＲ）を演算し、信号Ｒを出力する。出力段の演算３４ｙはセレクタであり、信号Ｒを制御信号（選択信号）として、信号Ｐまた信号Ｑを信号Ｙとして出力する。
【００５１】
図７に、演算部分３６ｂを、入力段から出力段に向かって実行されるようにコンパイルした比較例のコードブロック３９ｂを示している。コードブロック３９ｂには、上から順番に、入力段の演算３３ｐ、演算３３ｑ、演算３３ｒおよび出力段の演算３４ｙを実行する命令がそれぞれ記述される。したがって、コードブロック３９ｂは、クロックサイクル毎に、全てのゲートの論理演算をシミュレートする命令が、入力段３３から出力段３４に向かって単純一律に実行されることを示している。
【００５２】
図８に、演算部分３６ｂを、図１のモデル生成システム６によりコンパイルしたシミュレーションプログラム３２の一例を示している。演算部分３６ｂを出力段３４から入力段３３に向かって解析すると、入力段の演算に対して後段あるいは後続の演算となる出力段の演算３４ｙはセレクタであり、ドントケアの入力信号が発生する第１のタイプの演算である。すなわち、演算３４ｙでは、入力信号Ｒにより、入力信号ＰおよびＱの内、一方の入力信号はドントケアになる。このため、入力信号Ｒを第１の入力信号として解析すると、その値により、入力信号ＰまたはＱの発生源である入力段（前段）の演算３３ｐまたは３３ｑを実行する必要はない。
【００５３】
図２に示したフローチャートに従うと、まず、出力段の演算３４ｙが解析され、出力段の演算３４ｙを実行する命令が、コードブロック３２ｂに示すように、第１の命令６１、第２の命令６２、第３の命令６３および第４の命令６４の命令列に再構成される。コードブロック３２ｂにおいて、第１の命令６１は、第１の入力として選択した入力信号Ｒのソースの演算３３ｒを実行する命令である。第２の命令６２は、この例では、入力信号Ｒにより入力信号Ｐがドントケアとなるときに、出力信号Ｙをセットするための命令である。第２の命令６２は、演算３３ｑを実行する命令と、演算３３ｑの結果を出力Ｙにセットする命令とを含む。第３の命令６３は、ドントケアとなる入力である入力信号Ｐのソースの演算３３ｐを実行する命令である。第３の命令６３は、演算３３ｐを実行する命令と、演算３３ｐの結果を出力Ｙにセットする命令と、第２の命令６２をバイパスする命令とを含む。第４の命令６４は、入力信号Ｒにより入力信号Ｐがドントケアになると第３の命令６３をバイパスする命令である。
【００５４】
図８に示すコードブロック３２ｂがシミュレータ７で実行されると、セレクタ３４ｙのセレクト信号Ｒをまず評価し、その結果に応じて、信号ＰおよびＱのどちらか一方の発生源だけを入力段に遡って評価する。このため、コードブロック３２ｂの実行時間を短縮できる。
【００５５】
図９に、コンテンツジェネレータ１２において、コンテンツとしてシミュレーションプログラム３２を生成する際にテンプレート群２０を参照する例を示している。テンプレート群２０は、コンバータ１５において、ステートメントを再構成する工程５５で参照される。図９は、コンピュータシステム１をモデル生成システム６として機能させるためのモデル生成プログラム５のルーチンの一部であり、アナライザー１４の機能と、コンバータ１５の機能をコンピュータシステム１に実装する。すなわち、図９のプログラムソースは、テンプレート群２０を活用してコード生成するルーチン（スケジューリングルーチン）４８の一例を示している。このルーチン４８により、ジェネレータ１２は、ステップ５２において、ゲートレベルネットリスト３１の出力段３４のゲートを指すノードから出発して、テンプレート群２０に含まれる、ゲートの種類に応じたテンプレートを用いて、再帰的にコードを生成する。
【００５６】
解析対象の演算が、２入力ＡＮＤゲートの場合は、論理（ＡＮＤ）の演算を実行する命令を、コンバータ１５は、ルーチン４８に含まれるテンプレート２１を用いて再構成する。論理（ＡＮＤ）の演算（ゲート、ノード）は、入力信号の一方が「０」であれば出力は「０」になり、他方の入力はドントケアになる。テンプレート２１は、ステートメント２６として、入力信号＃０（ｉｎｐｕｔ＃０）のソースである前段階（前）の演算を実行する第１の命令（コード）を生成する指示（情報）を含む。テンプレート２１は、さらに、ステートメント２７として、評価対象の演算（ノード）の出力を「０」にセットする第２の命令（コード）を生成する指示を含む。テンプレート２１は、さらに、ステートメント２８として、短絡評価用の条件分岐となる第４の命令（コード）を生成する指示を含む。テンプレート２１は、さらに、ステートメント２９として、他方の入力信号＃１（ｉｎｐｕｔ＃１）のソースである前段階の演算を実行する第３の命令（コード）を生成する指示を含む。
【００５７】
テンプレート群２０に含まれているテンプレート２２は、評価対象の演算が論理（ＯＲ）のときに、コンバータ１５が、その演算を実行する命令を再構成するための情報を含む。再構成される命令については、上述している。
【００５８】
テンプレート２３は、評価対象の演算が論理（ＸＯＲ）のときのためのものである。この論理演算ではドントケアが発生しない。このため、テンプレート２３は、入力側（前段階）の演算をそれぞれ実行する命令と、それらの結果により論理（ＸＯＲ）を評価する命令とを生成するための指示を含む。
【００５９】
テンプレート２４は、論理（ＮＯＴ）の演算のときのためのものである。この論理演算もドントケアは発生しない。したがって、テンプレート２４は、入力側（前段階）の演算を実行する命令と、その結果により論理（ＮＯＴ）を評価する命令とを生成する指示を含む。
【００６０】
テンプレート２５は、セレクタを解析するためのものである。このテンプレート２５には、図８に示した第１の命令６１から第４の命令６４をそれぞれ生成する情報を示すステートメントが含まれている。
【００６１】
図１０に示したコードブロック３２ｃは、図３に示した演算部分３６ａに対応したコードブロックの異なる例である。このコードブロック３２ｃは、図９のルーチン４８により、コンバータ１５により再構成され、出力された例である。
【００６２】
図１１に、コードブロック３２ｃに含まれる各命令が、コンバータ１５により再構成される経緯を示している。コードブロック３２ｃは、全体として出力信号Ｙを演算するためにスケジューリングされたものである。その中で、「Ｌ＿Ｐ：」ラベルを含む小ブロック３２ｄは、信号Ｐに対してスケジューリングされたコードブロックであり、「Ｌ＿Ｑ：」ラベルを含む小ブロック３２ｅは信号Ｑに対してスケジューリングされたコードブロックである。
【００６３】
まず、出力信号Ｙのソースである演算３４ｙを実行するための命令がスケジュール（Ｙ）として生成される。その命令は、論理（ＯＲ）の演算３４ｙを実行するためのものである。その命令は、ルーチン４８に含まれるテンプレート２２に基づき再構成され、演算３３ｐを実行するための命令（スケジュール（Ｐ））と、演算３３ｑを実行するための命令（スケジュール（Ｑ））とを含む命令列に変換（再構成）される。次に、それぞれの命令は、ルーチン４８により、テンプレートを参照し、再帰的に解析され、再構成される。図９のルーチン４８には、ＮＡＮＤゲート用のテンプレートが組み込まれていないが、ＮＡＮＤゲートのテンプレートは、ＡＮＤゲートのテンプレートから類推できるものである。
【００６４】
一般的に、命令（スケジュール（Ｐ））および命令（スケジュール（Ｑ））には、その命令の対象の演算の入力のソースとなる、さらに前段階の演算を実行する命令が含まれる。それらの命令を、ルーチン４８は、組み込まれたテンプレートを参照して再帰的に解析し、再構成する。それらが、図１１に細長い空ブロックにより示した命令（スケジュール（Ａ）、（Ｂ）、（Ｃ）および（Ｄ））である。図３に示した演算部分３６ａでは、Ａ〜Ｄ信号はグローバル入力信号（回路全体に対する入力信号）である。このため、再構成できるものではないので、ルーチン４８では「ｄｏ  ｎｏｔｈｉｎｇ」となって、さらなるコードは生成されない。このようにして、図１０に示したコードブロック３２ｃが生成される。
【００６５】
モデルであるシミュレーションプログラム３２を生成する（スケジューリングする）際に、ネットリスト３１に含まれる演算（ロジック）を解析して処理する順序と、シミュレーションプログラム３２として生成された命令（コード）を実行する際の順序（ロジック評価順序）とは異なる。スケジューリングする際は、ジェネレータ１２は、多段階の演算を、出力段から入力段に向かって深さ優先探索の要領で再帰的に解析し、命令を生成、置換あるいは再構成していく。シミュレータ７が、プログラム３２として生成されたコードを実行する際は、大枠では、多段階の演算は、入力段から出力段に向かって実行される。
【００６６】
本実施形態のジェネレータ１２によりネットリスト３１から生成されたシミュレーションプログラム３２には、評価対象の演算の論理が明示的には示されない命令が含まれる。ルーチン４８に組み込まれたテンプレートから分かるように、評価対象の演算がドントケアの入力を発生させるタイプであると、プログラム３２には、その評価対象の演算の論理は明示的には示されない。ドントケアの入力が発生するときは、ドントケアの入力のソースの演算（前段階の演算）が実行されないだけではなく、ドントケアの入力を入力とする演算（評価対象（解析対象）の演算）自体の実行も不要であり、ドントケアの入力を必要とする論理は明示されない。
【００６７】
例えば、テンプレート２１に示すように、評価対象の演算の論理が（ＡＮＤ）であれば、ドントケアの入力が発生するときは、出力は単純に「０」にセットされるだけである。ドントケアの入力が発生しないときは、他方の入力が出力に単純にセットされるだけである。さらに、図１１に示した経緯から分かるように、出力段に近くなればなるほど、評価対象の演算から再構成された命令は分散する。このため、シミュレーションプログラム３２から評価対象の演算の論理を推測することはほとんど不可能である。したがって、このモデル生成システム６により生成されるシミュレーションプログラム３２を設計者が直にコーディングすることは容易ではなく、シミュレーションプログラム３２の生成にコンピュータシステム１を使用する必然性がある。
【００６８】
上記においては、図３〜図５、図６〜図８を参照して、第１の手続きを含むネットリスト３１から、第２の手続きを含むシミュレーションプログラム３２を生成することを説明した。これらの実施形態においては、ネットリスト３１は、第１の手続きを含む第１のコンテンツであり、シミュレーションプログラム３２は、第２の手続きを含む第２のコンテンツであり、コンテンツジェネレータ１２は、第１のコンテンツから第２のコンテンツを生成することができる。モデル生成システム６のコンテンツジェネレータ１２は、ネットリスト３１に代わり、入力段から出力段に向かってスケジューリングした比較例のプログラム３９を第１の手続きを含むコンテンツとし、テンプレートを組み込んだルーチン４８を用いて変換（再構成）し、プログラム３２を第２の手続きを含むコンテンツとして生成しても良い。このケースでは、コンテンツジェネレータ１２を含む処理機能３またはコンピュータシステム１を、最適化コンパイラと呼ぶことが可能である。
【００６９】
比較例のプログラム３９などの、ある仕様あるいはアプリケーションを規定する典型的なプログラムでは、入力段から出力段の時間経過を示す記述は、プログラムカウンタの進行方向、すなわち、ステートメントの実行順番（時間経過）を示す上から下に向かう。したがって、この最適化コンパイラにおいては、ソースプログラム３９を下から上に、時間的に逆方向に解析し、ドントケアとなる入力の発生源の演算を実行しないプログラム３２に変換し、ソースプログラム３９により与えられたアプリケーションの処理速度の向上を図ることができる。
【００７０】
また、上記は、ＡＳＩＣ、ＦＰＧＡなどに実装される論理回路を、サイクルベース方式でシミュレーションするためのモデルを生成することを例に説明している。例えば、図４あるいは図７に示したプログラム３９は、各サイクルにおいて全ての論理演算（論理ゲート）を実行する回路あるいはデバイスを示している。近年、サイクル単位で回路構成をダイナミックに変更あるいは再構成できるハードウェアが提案されている。例えば、本出願人の国際公開ＷＯ２００５／０２２３８０を挙げることができる。
【００７１】
このようなダイナミックリコンフィグラブルなハードウェアにおいては、全ての演算を並列実行することによるメリット、例えば、実行速度、を厳しく追求する必要がない状況であれば、異なる処理（実行方法）が可能である。まず、図４または図７に示したプログラム３９の各ステートメントを実行するための回路構成、すなわち、図３または図６に示した回路を、リコンフィグラブルなハードウェアに実装するためのハードウェア制御情報（コンフィグレーション情報）として生成する。次に、サイクル単位で、その回路構成の一部を再構成しながら、小さなハードウェア資源で、図３または図６に示した回路の機能を実行する。
【００７２】
コンテンツジェネレータ１２は、上記のハードウェア制御情報を、図５または図８に示したプログラム３２に相当するハードウェア制御情報に変換することができる。すなわち、コンテンツジェネレータ１２は、ドントケアとなる入力のソースの演算を実行する回路の実装をパスすることを備えたハードウェア制御情報に変換できる。そのハードウェア制御情報により、リコンフィグラブルなハードウェアを制御すると、ドントケアが発生する演算を実行するための回路をハードウェア上に再構成するのをパスすることが可能となり、処理速度の向上、ハードウェア資源のさらなる有効利用を図ることができる。
【００７３】
さて、ステートメントの再構成に利用可能なテンプレートは、図９に示したものに限定されない。図１０に示したコードブロック３２ｃは、図９に示したルーチン４８によりシステム１に実装されるジェネレータ１２によりスケジューリングされたものである（以降では、単にスケジューリングと記述することがある）。図１０に示したコードブロック３２ｃは、図５または図８とは異なるコードであり、間違った動作をするわけではないが、効率的なコードブロックであるとは言えない。コードブロック３２ｃでは、グローバル変数を入力する信号Ａや信号Ｃの値に応じて信号Ｂあるいは信号Ｄをドントケアと判定して条件分岐するが、コードの実行速度、すなわち、シミュレーションの実行速度の向上には大して寄与しない。むしろ判定や分岐のオーバヘッドのせいで、コードブロック３２ｃは、実行速度が悪化するおそれがある。もっとも、信号Ａ〜Ｄを生成するためにメモリアクセスが伴ったり、それらの信号の生成に数クロックを費やすようなケースであれば、コードブロック３２ｃにおいて条件分岐することは処理速度の向上に有益である。
【００７４】
図１２に示したルーチン４８は、ＡＮＤゲートの演算を実行する命令を再構成するためのテンプレート２１の異なる例を含んでいる。このテンプレート２１は、入力の属性により再構成するか否かを判断するための情報を含んでいる。コンバータ１５は、このテンプレート２１を参照することにより、ドントケアとなる入力のソースがグローバルインプットであるようなケースであって、第４の命令により、そのドントケアとなる入力のソースをバイパスしても、シミュレーションの実行速度の改善が期待（予想）できない場合は、再構成しない。また、このテンプレート２１は、ドントケアとしてバイパスする前段階の演算を選択できるようにしている。
【００７５】
図１２に示したテンプレート２１は、入力信号＃０および＃１の双方がグローバル変数であれば再構成しないことを指示する部分２１ａと、その他のケースで入力信号＃０がグローバル変数であれば、それを第１の入力として選択して入力信号＃１のソースの演算をバイパスするように再構成することを指示する部分２１ｂと、逆に入力信号＃１がグローバル変数であれば、それを第１の入力として選択して入力信号＃０のソースの演算をバイパスするように再構成することを指示する部分２１ｃと、それら以外の条件であれば、入力信号＃０をディフォルトで第１の入力として選択して入力信号＃１のソースの演算をバイパスするように再構成することを指示する部分２１ｄとを含んでいる。このテンプレート２１を用いると、コンバータ１５は、図５および図８に示したコードを生成できる。その他の論理の演算を実行する命令を再構成するためのテンプレートも同様にアレンジすることができる。
【００７６】
図１３に示したルーチン４８は、テンプレート２１のさらに異なる例を含んでいる。このテンプレート２１は、上記に加え、さらに、入力信号の発生源の演算の複雑性を判断して、ドントケアの発生を判断する入力を選択することを指示する部分２１ｅおよび２１ｆを備えている。ＡＮＤゲートの演算およびＯＲゲートの演算をスケジューリングする際には、入力信号の評価順序にも配慮するのが望ましい。たとえば、図５に示したコードブロック３２ａでは、信号（中間信号）Ｐの評価結果に応じて信号（中間信号）Ｑの評価（発生源の演算）をスキップする。しかしながら、逆に信号Ｑの評価結果に応じて信号Ｐの評価をスキップするようなコード生成も可能である。
【００７７】
図５に示したコードブロック３２ａでは、どちらの評価順序でもコード実行性能は変わらない。しかしながら、信号Ｐのソースの演算、さらには、ソースの演算のさらに前段階の演算群のロジックが複雑な場合は、「信号Ｐを発生させる複雑な演算または演算群を計算してから、あわよくば単純な信号Ｑを発生させる計算をスキップすること」よりも、「単純な信号Ｑを計算してから、あわよくば信号Ｐを発生させる複雑な演算または演算群の計算をスキップすること」のほうが良いと予想される。したがって、スケジューリングする際は、コンバータ１５は、図１３のテンプレート２１を用いるとともに、入力信号を計算するロジックの複雑度（ゲート数）に応じて、入力信号＃０を先にコード生成する部分２１ｆと、入力信号＃１を先にコード生成する部分２１ｅとを使い分ける。
【００７８】
ただし、スケジューリングする際に判断すべきロジックの複雑度とは、単純にゲート数では計れない可能性がある。例えば、図６に示した論理回路３６ｎは、単純に数えれば４ゲートを含む。しかしながら、図８に示したコードブロック３２ｂは、ドントケア入力の演算をバイパスするようにスケジューリングされている。したがって、コードブロック３２ｂを実行することにより、信号ＰまたはＱのどちらかの発生源の演算を必ずスキップできるので、コード実行時間は、実質的には３ゲート分で済むことになる。したがって、このスケジューリングにより生成されるコード表現によるロジックの複雑度は３ゲート相当といえる。
【００７９】
要するに、この実施形態において、「スケジューリングすること」とは、ドントケアとなる入力のソースの演算（ドントケア入力の演算）をバイパスすることを含み、「バイパスすること」によるメリットに寄与するロジックの複雑度とは「そのロジックを評価するのにかかる時間」であり、短絡評価の対象となるコードおよび／またはコードブロック（短絡評価コード）の実行時間の期待値である。その期待値を正確に計算するのは困難であり、時間を要するものとなる。したがって、期待値が比較的に自明な対象はテンプレートに反映することが有効である。しかしながら、短絡評価コードが入り組んでくると、期待値を正確に計算することは困難である。したがって、期待値を正確に計算し難い場合は、ユーザーにヒントを指定してもらうこと、プロファイラーで自動集計すること、といったヒューリスティックスな方法を合わせて用いることが望ましい。
【００８０】
さらに、あるゲートの入力信号の発生源の演算群の複雑度の大小がわかったとしても、それだけで、評価順序の良し悪しが完全に決まるとは限らない。評価順序の良し悪しは、ドントケアの入力の発生源の演算をスキップする確率にも依存するからである。複雑な中間信号Ｐ（ほとんどのケースで１）と、単純な中間信号Ｑ（ほとんどのケースで０）とを入力する論理（ＯＲ）を含む手続きをシミュレーションする場合を考える。「単純な中間信号Ｑを先に計算するが、ほとんどの場合０になるので複雑な中間信号Ｐも計算せざるを得ず、結局ほとんどの場合ＰとＱの両方を計算する羽目になる」スケジューリングと、「中間信号Ｐは複雑だが計算してみるとほとんどの場合は１になるので、単純とはいえ中間信号Ｑの計算をスキップできる」スケジューリングとがありうる。そして、前者のスケジューリングより、後者のスケジューリングの方が良いこともあり得る。
【００８１】
したがって、ドントケア入力の演算をバイパスするスケジューリングにおいては、スキップする確率とスキップしたときの利得との積（スキップ利得の期待値）が最大になる評価順序になるようにコードを再構成（再生成）する指示を含むテンプレートを使うことが望ましい。スキップ利得の期待値を得る方法は、各中間信号により他の信号がドントケアになる確率をユーザーから指示してもらうこと、プロファイラーでスキップする確率および／またはスキップしたときの利得を自動集計することを含む。本発明の方法の一形態は、シミュレーションを実行することと、プロファイル集計することとを並行して行い、評価順序を動的に決めて短絡評価し、ジェネレータ１２によりコードの生成および／または再構成（再生成）することを含む。
【００８２】
「スキップ利得の期待値」という考え方（指標）は、評価順序を比較することだけでなく、本発明に含まれる、スケジューリングにより生成されたプログラム、例えば図５および図８のプログラム３２ａおよび３２ｂによる短絡評価と、図４および図７に示した比較例のプログラム３９ａおよび３９ｂによる一律直線的評価とを比較することにおいても活用できる。短絡評価を目論んだのに、スキップが発生しなかった場合、一律直線的評価と比べて条件判定コードや条件分岐コードの分だけコード実行が遅くなる。したがって、短絡評価の利得はマイナスである。短絡評価を目論んで見事にスキップが発生した場合でも、短絡評価の利得と、一律直線的評価の利得とを比べたとき、短絡評価の利得は、条件判定条件分岐オーバヘッドの分だけ目減りする。よって、中間信号の複雑度によっては、「スキップ確率がかなり高くないと、利得の期待値がプラスにならない」場合もある。そのようなゲート回路（論理回路）をシミュレーションする場合は、時間経過にしたがって一律直線的に評価する方法を採用することが好ましい。
【００８３】
例えば、図１２に示したテンプレート２１は、スケジューリングする際に、「両方の入力信号がグローバル入力信号である場合のみ一律直線的評価コードを生成すること」を指示する部分２１ａを含んでいる。この部分２１ａの代わりに、スケジューリングする際に、「両方の入力信号の計算ロジックがきわめて単純な場合には一律直線的評価コードを生成すること」を指示する部分を、テンプレート２１に含めることは有効である。ただし、「きわめて単純」との規定は、シミュレーションに使用する計算機のアーキテクチャなどの条件にも依存する規定であり、これらの条件も含められることが好ましい。例えば、１ゲート程度で計算できる入力信号をきわめて単純とみなすならば、図３のロジック３６ａに対し、本実施形態のジェネレータ１２は、図４に示した一律直線的評価用のコードブロックを生成することを含む。
【００８４】
なお、以上の説明では、変換元の第１の手続きの一例は、ゲートレベルのネットリスト３１であり、さらに、ネットリスト３１は、２入力基本ゲートやセレクタのみで構成されている論理回路を対象としている。しかしながら、本明細書に含まれる、ドントケア入力のソースをバイパスするスケジューリングの手法は、２入力基本ゲートあるいはセレクタのみを含む論理回路を対象としたネットリストに限定されるものではなく、多入力ゲートおよび／または複合ゲートの演算素子を含む論理回路を対象としたネットリストに対しても適用できることは明白である。
【００８５】
中間信号が分岐する中間段の演算を含む論理回路に関する実施形態、および、グローバル出力信号を複数持った論理回路に関する実施形態について、さらに説明する。
【００８６】
図１４に、ネットリスト３１に含まれる、さらに異なる演算部分３６ｄを論理回路により示している。この演算部分３６ｄは、３段階の、組み合わされた論理演算であり、入力段３３の演算３３ｐと、中間段３５の演算３５ｑおよび３５ｒと、出力段３４の演算３４ｙとを含む。入力段の演算３３ｐは、信号Ｂおよび信号Ｃを入力として論理（ＸＯＲ）を演算し、信号Ｐを出力する。演算３５ｑは、信号Ａおよび信号Ｐを入力として論理（ＡＮＤ）を演算し、信号Ｑを出力する。演算３５ｒは、信号Ｐおよび信号Ｄを入力として論理（ＮＯＲ）を演算し、信号Ｒを出力する。出力段の演算３４ｙは信号Ｑおよび信号Ｒを入力として論理（ＯＲ）を演算し、信号Ｙを出力する。
【００８７】
図１５に、演算部分３６ｄをシミュレーションするために、図１のモデル生成システム６が生成（コンパイル）したシミュレーションプログラム３２のコードブロックの一例を示している。このコードブロック３２ｄでは、演算３５ｑおよび演算３５ｒの双方の入力となっている信号Ｐに対して、その発生源の演算３３ｐを実行する命令６５が２箇所に生成されている。この例では、演算３３ｐは入力段であり、演算３３ｐを実行するためのステートメント６５は、論理（ＸＯＲ）（ＸＯＲゲート）１つを実行するためだけのステートメントである。したがって、２個所で同じ計算をしても、コードブロック３２ｄの実行速度に対する影響は少ない。しかしながら、演算３３ｐが複雑であったり、演算３３ｐが入力段でなくその前段階の演算のロジックが複雑であることもありうる。そのような場合は、信号Ｐの発生源を重複して計算することはコード量の面でも、コード実行時間の面でも無駄である。
【００８８】
したがって、図１に示したモデル生成システム６のコンバータ１５は、同一の演算を実行する命令の重複生成を防止することを含むことが望ましい。ただし、これら同じ演算を実行する命令を単純に統合することはできない。一方の演算を実行する命令が短絡評価のおかげでスキップされる可能性を考慮する必要がある。
【００８９】
図１６〜図２４を参照して、同一の演算の重複した実行を防止することを含む、幾つかの例を説明する。図１６は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックの異なる例を示している。このコードブロック３２ｅでは、中間信号Ｐの発生源の演算の実行がコード量として重複しないように、信号Ｐの発生源を演算するコードをサブルーチン６６として独立させている。また、中間信号Ｐの発生源の演算の実行が重複しないよう、サブルーチンコールの前に「すでに信号Ｐを計算済みだったらサブルーチンコールしない」という判定を含むステートメントを生成している。その判定を正しく行うため、初期化処理として、中間信号Ｐを表す変数を「０」でも「１」でもない「ＵＮＤＥＦＩＮＥＤ」という値に設定している。
【００９０】
図１７に示したルーチン４８には、コードブロック３２ｅを生成することを指示する部分を含んだテンプレート４１が組み込まれている。テンプレート４１は、後続の演算に対して入力となる中間信号を全て「ＵＮＤＥＦＩＮＥＤ」にいったんセットすることを指示している。また、テンプレート４１は、中間信号の発生源となる演算をサブルーチンコールできるように初期設定することを指示している。
【００９１】
図１７に示したルーチン４８は、テンプレート４１に加え、各演算の実行命令を再構成するテンプレート２１〜２５を含んでいても良い。これらのテンプレート２１〜２５は、ルーチン４８のテンプレート４１の後の「ｓｃｈｅｄｕｌｅ＿ｒｅａｌ」手続きに記述できる。記述する内容は、図９などに示したルーチンに含まれる「ｓｃｈｅｄｕｌｅ」手続きと同じ内容であって良い。
【００９２】
さらに、ルーチン４８は、テンプレート４２を含む。このテンプレート４２は、分岐する中間信号の発生源の演算を実行する命令コードが必要な個所は、その発生源の演算を実行する命令コードの代わりに「ＵＮＤＥＦＩＮＥＤだったらサブルーチンコールする」というコードを生成することを指示している。このテンプレート４２を用いてスケジューリングすると、「ｓｃｈｅｄｕｌｅ＿ｒｅａｌ」手続きの内部で「ｓｃｈｅｄｕｌｅ」手続きが再帰適用されるので、全ての演算に対して重複した実行を防止できる。
【００９３】
図１８は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。最初の「ｃａｌｃ＿Ｐサブルーチンコール」のときは、信号Ｐは必ず「ＵＮＤＥＦＩＮＥＤ」のはずなので、わざわざ判定する必要はない。このコードブロック３２ｆでは、最初のサブルーチンコールのときは「ＵＮＤＥＦＩＮＥＤ」か否かの判定を行わず、無条件にサブルーチンコールするようにしている。
【００９４】
図１９は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。入力信号Ｐを「０」か「１」か「ＵＮＤＥＦＩＮＥＤ」かの３値変数として扱う代わりに、計算済みを示すフラグを設けることが可能であり、コードブロック３２ｇにおいては、入力信号Ｐを「０」か「１」かの２値変数として処理できる。このため、コードブロック３２ｇにおいては、入力信号を示す変数Ｐとは別に、「Ｐ＿ｖａｌｉｄ」という「計算済みかどうかを示す変数」を設けている。
【００９５】
図２０は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。このコードブロック３２ｈにおいては、入力信号Ｐのソースの演算が計算済みか否かの判定を、ｃａｌｃ＿Ｐサブルーチン内で行うようにしている。コードブロック３２ｈのメインルーチンでは、信号Ｐの演算が要求される個所では、とにかくｃａｌｃ＿Ｐサブルーチンをコールする、というコード形態である。
【００９６】
図２１は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。コードブロック３２ｉでは、ｃａｌｃ＿Ｐサブルーチンのコールをポインタ経由の間接呼び出しとし、計算が済むとポインタがｎｏｐサブルーチンを指すように書き換える、というコード形態である。
【００９７】
図２２は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。このコードブロック３２ｊでは、信号Ｐの発生源の演算を強制的に実行し、信号Ｐの値を予め求めている。短絡評価しても、信号Ｐが入力信号となる全ての後続（後段）の演算において、信号Ｐがドントケアになる可能性が低く、信号Ｐの発生源の演算の実行が全てスキップされる可能性が低い場合に適している。
【００９８】
図２３は、演算部分３６ｄのシミュレーションプログラム３２のコードブロックのさらに異なる例である。このコードブロック３２ｋでは、信号Ｐの発生源の演算を強制的に実行し、信号Ｐの値を予め求める点では上記と同様である。さらに、計算済みの中間信号Ｐは、グローバル入力信号と同格に扱って良いので、後続の演算のスケジューリングでは、中間信号Ｐの発生源の演算をバイパスするコードを発生させていない。
【００９９】
図２４に示したルーチン４８には、図２２に示したコードブロック３２ｊを生成するためのテンプレート４３が組み込まれている。このテンプレート４３は、スケジューリングにおいて、「分岐する中間信号全てに対して、その発生源の演算を実行する命令を再帰的に再構成してコード生成すること」を指示している。したがって、ルーチン４８により演算部分３６ｄをスケジューリングすると、中間信号の発生源の演算を実行してから、残りの演算を出力段から入力段に向かってドントケア入力の発生源をバイパスするようにコードが生成される。なお、テンプレート４３には、中間信号同士の間に依存関係があっても大丈夫なように、入力段寄りの中間信号の発生源の演算を先に、出力段寄りの中間信号の発生源の演算を後に処理する指示が含まれていることが望ましい。
【０１００】
分岐する中間信号の演算の重複を防止する幾つかの方法を上述したが、これらの方法は、単独でも、複数の方法を混ぜても、プログラムを生成するために適用できる。例えば、図１６に示したコードブロック３２ｅのスタイルと、図２２に示したコードブロック３２ｊのスタイルを併用することが可能である。完全にスキップされる可能性の低そうな中間信号の発生源の演算は、コードブロック３２ｊに示したように必ず計算すること、それ以外の中間信号の発生源の演算は、コードブロック３２ｅに示したように計算済みかどうかを毎回チェックしながら計算すること、を含めたコードブロックを生成できる。演算部分に含まれる、ある演算が、ドントケアの入力の発生源の演算として、スキップされる可能性を見積もる方法は、幾つか考えられる。その１つは、演算部分の論理を静的に解析することであり、「完全にスキップされる可能性はゼロである」と判定できるケースがある。他の方法の１つは、ユーザー指定、プロファイリングなどのヒューリスティックスな手法を取り入れることである。
【０１０１】
図２５に示したルーチン４８には、さらに異なるテンプレート４５が組み込まれている。このテンプレート４５は、グローバル出力信号が複数ある演算部分のスケジューリングに対応したものである。テンプレート４５は、グローバル出力信号の数だけ、繰り返してスケジューリングすることを指示している。このテンプレート４５の代わりに、図１７に示したテンプレートをベースに、同様の考え方で複数のグローバル出力信号に対応するテンプレートを構成することができる。
【０１０２】
すなわち、複数の出力信号にまたがる共有の中間信号が存在しないようなケースであれば、完全に独立なロジックをＮ個備えていることになる。したがって、上述した１出力ロジック用のテンプレートをＮ個のロジックのそれぞれに適用できる。共有の中間信号が存在するケースでは、図２５に示したルーチン４８を適用できる。共有の中間信号をリストアップして全て求めてしまえば、残りのロジックは共有信号のない、独立したＮ個のロジックと同様に処理できる。
【０１０３】
以上では、第１の手続きから、ドントケア入力の発生を考慮した第２の手続きを生成することの概要を、組み合わせ論理ゲートをベースに説明している。フリップフロップ、「グローバル入力信号をグローバル出力信号に線でつなぐだけ（何も演算しない）」という演算など、ドントケア入力が発生しない演算は再構成する必要はなく、それらを含めてのステートメントの生成を指示するテンプレートを提供することは上述の説明から当業者であれば可能である。また、上記では、説明のために、Ｃ言語風のコード（コードブロック）を参照しながら、第２の手続きを生成すること（スケジューリングすること）を説明している。これらの説明を参照することにより、本願に含まれる発明に即してＣ言語に限らずアセンブリ言語、機械語など他の言語のコード（コードブロック）を生成したり、それらを含むコンテンツを生成し、また、変換することは可能である。
【図１】
2007063957.tif 000003
【図２】
2007063957.tif 000004
【図３】
2007063957.tif 000005
【図４】
2007063957.tif 000006
【図５】
2007063957.tif 000007
【図６】
2007063957.tif 000008
【図７】
2007063957.tif 000009
【図８】
2007063957.tif 000010
【図９】
2007063957.tif 000011
【図１０】
2007063957.tif 000012
【図１１】
2007063957.tif 000013
【図１２】
2007063957.tif 000014
【図１３】
2007063957.tif 000015
【図１４】
2007063957.tif 000016
【図１５】
2007063957.tif 000017
【図１６】
2007063957.tif 000018
【図１７】
2007063957.tif 000019
【図１８】
2007063957.tif 000020
【図１９】
2007063957.tif 000021
【図２０】
2007063957.tif 000022
【図２１】
2007063957.tif 000023
【図２２】
2007063957.tif 000024
【図２３】
2007063957.tif 000025
【図２４】
2007063957.tif 000026
【図２５】
2007063957.tif 000027
【国際調査報告】
2007063957.tif 000028
2007063957.tif 000029