"ハードウェア記述言語HDLで記述された設計をシミュレートする方法であって、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含む統合型論理シミュレータを動作させるステップと、前記シリアルシミュレーションエンジンを用いて一度に1つずつのシミュレーションを行うステップと、前記コンカレントシミュレーションエンジンを用いて複数の並行的なシミュレーションを行うステップと、前記HDLの実行モデルによって定義されるイベントのクラスに基づいて、前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンの両シミュレーションを同期させるステップとを含むことを特徴とする方法。前記設計を、前記統合型論理シミュレータによって実行される2つのモジュール群に分割するステップをさらに含み、前記2つのモジュール群が、前記シリアルシミュレーションエンジンで評価するための第1のモジュール群と、前記コンカレントシミュレーションエンジンで評価するための第2のモジュール群とを含むことを特徴とする請求項1に記載の方法。前記分割するステップを、前記設計の設計階層を考慮して行うことを特徴とする請求項2に記載の方法。前記コンカレントシミュレーションエンジンが、第1のモジュールをシミュレートするときに、該第1のモジュールの下位の前記設計階層内においてより深くインスタンス化された任意のサブモジュールも同様にシミュレートすることを特徴とする請求項3に記載の方法。第1のシミュレーションエンジンによってシミュレートされる第1のモジュールが、第2のモジュールをインスタンス化するとき、該第2のモジュールを第2のシミュレーションエンジンによってシミュレートし、前記第2のモジュールが、前記第1のシミュレーションエンジンによってシミュレートされる第3のモジュールをインスタンス化し、前記第1及び第2のシミュレーションエンジンがそれぞれ、1前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジン、または2前記コンカレントシミュレーション及び前記シリアルシミュレーションエンジン、のいずれかであることを特徴とする請求項3に記載の方法。前記シリアルシミュレーションエンジンまたは前記コンカレントシミュレーションエンジンのうちの一方を前記統合型論理シミュレータの主シミュレーションエンジンに指定するステップと、前記シリアルシミュレーションエンジンまたは前記コンカレントシミュレーションエンジンのうちの他方を前記統合型論理シミュレータの副シミュレーションエンジンに指定するステップとをさらに含み、前記主シミュレーションエンジンが、同期点において前記副シミュレーションエンジンを呼び出すことを特徴とする請求項3に記載の方法。前記同期点が、前記HDLの前記実行モデルによって定義されたキュー評価の前にあることを特徴とする請求項6に記載の方法。前記同期点が、前記HDLの実行モデルによって定義されたキュー評価の後にあることを特徴とする請求項6に記載の方法。前記副シミュレーションエンジンモジュールにおける特定の変数を、前記主シミュレーションエンジンと通信するためのインタフェース変数として識別するステップをさらに含むことを特徴とする請求項6に記載の方法。前記インタフェース変数の値を前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンに格納するステップをさらに含むことを特徴とする請求項9に記載の方法。前記同期点において前記副シミュレーションエンジンにおけるイベントを評価する前に、前記インタフェース変数の値を前記副シミュレーションエンジンに転送するステップをさらに含むことを特徴とする請求項9に記載の方法。前記同期点において前記副シミュレーションエンジンにおけるイベントを評価した後に、前記インタフェース変数の値を前記主シミュレーションエンジンに転送するステップをさらに含むことを特徴とする請求項9に記載の方法。副シミュレーションエンジンモジュールが、前記主シミュレーションエンジン内のスタブモジュールによって表現されることを特徴とする請求項12に記載の方法。ハードウェア記述言語HDLで記述された設計をシミュレートするための、コンピュータ実行可能命令を格納するコンピュータ可読媒体であって、前記命令が、コンピュータによって実行されたときに、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含む統合型論理シミュレータを実行するステップと、前記シリアルシミュレーションエンジンを用いて一度に1つずつのシミュレーションを行うステップと、前記コンカレントシミュレーションエンジンを用いて複数の並行的なシミュレーションを行うステップと、前記HDLの実行モデルによって定義されるイベントのクラスに基づいて、前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンの両シミュレーションを同期させるステップとを行うことを特徴とするコンピュータ可読媒体。前記設計を、前記統合型論理シミュレータによって実行される2つのモジュール群に分割するステップをさらに含み、前記2つのモジュール群が、前記シリアルシミュレーションエンジンで評価するための第1のモジュール群と、前記コンカレントシミュレーションエンジンの評価で評価するための第2のモジュール群とを含むようにしたことを特徴とする請求項14に記載のコンピュータ可読媒体。前記分割するステップを、前記設計の設計階層を考慮して行うようにしたことを特徴とする請求項15に記載のコンピュータ可読媒体。前記コンカレントシミュレーションエンジンが、第1のモジュールをシミュレートするときに、該第1のモジュールの下位の前記設計階層内においてより深くインスタンス化された任意のサブモジュールも同様にシミュレートするようにしたことを特徴とする請求項16に記載のコンピュータ可読媒体。第1のシミュレーションエンジンによってシミュレートされる第1のモジュールが、第2のモジュールをインスタンス化するとき、該第2のモジュールを第2のシミュレーションエンジンによってシミュレートし、前記第2のモジュールが、前記第1のシミュレーションエンジンによってシミュレートされる第3のモジュールをインスタンス化し、前記第1及び第2のシミュレーションエンジンがそれぞれ、1前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジン、または2前記コンカレントシミュレーションエンジン及び前記シリアルシミュレーションエンジン、のいずれかであるようにしたことを特徴とする請求項16に記載のコンピュータ可読媒体。前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンのうちの一方を前記統合型論理シミュレータの主シミュレーションエンジンに指定するステップと、前記シリアルシミュレーションエンジン及び前記コンカレントシミュレーションエンジンのうちの他方を前記統合型論理シミュレータの副シミュレーションエンジンに指定するステップとをさらに含み、前記主シミュレーションエンジンが、同期点において前記副シミュレーションエンジンを呼び出すようにしたことを特徴とする請求項15に記載のコンピュータ可読媒体。前記同期点が、前記HDLの前記実行モデルによって定義されたキュー評価の前にあるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。前記同期点が、前記HDLの実行モデルによって定義されたキュー評価の後にあるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。前記副シミュレーションエンジンモジュールにおける特定の変数を、前記主シミュレーションエンジンと通信するためのインタフェース変数として識別するステップをさらに含むようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。前記実行モデルにおける前記同期点が、業界標準のアプリケーションプログラミングインタフェースを通して確立されるようにしたことを特徴とする請求項19に記載のコンピュータ可読媒体。ハードウェア設計のシミュレーションを向上させる。ハードウェア記述言語HDLで記述された設計をシミュレートする方法が提供される。この方法においては、統合型論理シミュレータを動作させることができる。この統合型論理シミュレータは、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを含むことができる。シリアルシミュレーションエンジンは、一度に1つずつのシミュレーションを行うことができるが、コンカレントシミュレーションエンジンは、複数の並行的なシミュレーションを行うことができる。コンピュータを用いて、HDLの実行モデルによって定義されるイベントのクラスに基づいて、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両シミュレーションを同期させることができる。設計は、統合型論理シミュレータによって実行される2つのモジュール群に分割されることができる。第1のモジュール群はシリアルシミュレーションエンジンで実行することができ、第2のモジュール群はコンカレントシミュレーションエンジンで実行することができる。一実施形態では、分割は、シリアルシミュレーションエンジン及び/またはコンカレントシミュレーションエンジンが所望のレベルのシミュレーション性能を達成する能力に基づいて行われる。別の実施形態では、分割は、ユーザが手動で行うことができる。シリアルシミュレーションエンジンまたはコンカレントシミュレーションエンジンのいずれか一方を統合型論理シミュレータの主シミュレーションエンジンに指定することができ、その場合、他方のシミュレーションエンジンは副シミュレーションエンジンに指定される。一実施形態では、シリアルシミュレーションエンジンが主シミュレーションエンジンであり、コンカレントシミュレーションエンジンが副シミュレーションエンジンである。別の実施形態では、コンカレントシミュレーションエンジンが主シミュレーションエンジンであり、シリアルシミュレーションエンジンが副シミュレーションエンジンである。主シミュレーションエンジンは、同期点において副シミュレーションエンジンを呼び出す。一実施形態では、同期点は、HDLの実行モデルによって定義されたキュー待ち行列評価の前にある。別の実施形態では、同期点は、HDLの実行モデルによって定義されたキュー評価の後にある。設計の分割は、設計の設計階層を考慮して行うことができることに留意されたい。例えば、一実施形態では、第1のモジュールが副シミュレーションエンジンによってシミュレートされることは、第1のモジュールの下の設計階層内においてより深くインスタンス化された全てのサブモジュールも同様に副シミュレーションエンジンによってシミュレートされることを示唆している。別の実施形態では、副シミュレーションエンジンによってシミュレートされる第1のモジュールが第2のモジュールをインスタンス化する場合に、第2のモジュールは、主シミュレーションエンジンによってシミュレートされることができる。本発明の方法に従って、副シミュレーションエンジンモジュールにおける特定の変数を、主シミュレーションエンジンと通信するためのインタフェース変数として識別することができる。これらのインタフェース変数の値を、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両者に格納することができる。同期点において副シミュレーションエンジンにおけるイベントを評価する前に、インタフェース変数の値を副シミュレーションエンジンに転送することができる。この転送中、インタフェース変数の値は、主シミュレーションエンジンのストレージ表現storagerepresentationから副シミュレーションエンジンのストレージ表現に翻訳されることができる。一実施形態では、変更されたインタフェース変数の値のみが同期点において転送される。同期点において副シミュレーションエンジンにおけるイベントを評価した後に、インタフェース変数の値を主シミュレーションエンジンに転送することもできる。この転送中、インタフェース変数の値は、副シミュレーションエンジンのストレージ表現から主シミュレーションエンジンのストレージ表現に翻訳されることができる。一実施形態では、変更されたインタフェース変数の値のみが同期点において転送される。実行モデルにおける同期点は、業界標準のアプリケーションプログラミングインタフェースを通して確立されることができることに留意されたい。例示的な業界標準のアプリケーションプログラミングインタフェースには、プログラミング言語インタフェースProgrammingLanguageInterface:PLI及び検証手続インタフェースVerificationProceduralInterface:VPIが含まれるが、これらに限定されるものではない。別の実施形態では、同期点は、独自仕様のインタフェースを通して確立されることができる。特に、副シミュレーションエンジンモジュールは、主シミュレーションエンジン内のスタブモジュールによって表現されることができる。このスタブモジュールは、対応する副シミュレーションエンジンモジュールのためのインタフェース変数を含む。スタブモジュールは、対応する副シミュレーションエンジンモジュールのHDLを含まない。HDLで記述される設計をシミュレートする別の方法が提供される。この方法では、設計のモジュールを、シリアルシミュレーションエンジンによるシミュレーションのための第1のモジュールと、コンカレントシミュレーションエンジンによるシミュレーションのための第2のモジュールとに分割することができる。HDLの実行モデルと一致するイベントのクラスに基づくシミュレーションに関して、第1及び第2のモジュールに優先順位を付けることができる。コンピュータを用いて、イベントの各クラスに対してシリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンのシミュレーションを同期させることができる。同期は、更新されたインタフェース変数の値の転送を含むことができ、該値は、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間で、第2のモジュールと、第1のモジュールの少なくとも1つのサブセットとによって共有される。この転送は、更新されたインタフェース変数の値の表現の翻訳を含むことができる。第2のモジュールは各々、シリアルシミュレーションエンジン内のスタブモジュールとして表現されることができ、ここで、該スタブモジュールは第1のモジュールのうちの1つである。コンカレントシミュレーションエンジンにおけるインタフェース変数のための値を或るワードに格納することができ、これらの値は、シリアルシミュレーションエンジン内の当該スタブモジュールの複数のインスタンスと関係がある。同期は、シリアルシミュレーションエンジンにおけるイベントの1つのクラスの評価を終え、次に更新されたインタフェース変数の値をコンカレントシミュレーションエンジンに転送してイベントの当該同じクラスの評価を行うステップをさらに含むことができる。同期は、コンカレントシミュレーションエンジンにおけるイベントの1つのクラスの評価を終え、次に更新されたインタフェース変数の値をシリアルシミュレーションエンジンに転送して、1コンカレントシミュレーションエンジンによって当該クラスにおける新しいイベントが生成されたときのイベントの当該同じクラス、または2もしあればイベントの次のクラスの評価をHDLの実行モデルに従って行うステップをさらにまた含むことができる。一実施形態では、HDLはVerilogであり、イベントの1つのクラスは、アクティブイベント、非アクティブイベント及びノンブロッキング代入更新イベントのうちの1つである。一実施形態では、同期は、HDLによって記述されるイベントのクラスの優先順位に基づいて、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンを用いて、イベントの全てのクラスを通過するステップを含むことができる。従来の論理シミュレータは、本明細書においてシリアルシミュレーションエンジンと呼ばれる技法において、一度に1つのシミュレーションを実行する。適切な性能を達成するために、シリアルシミュレーションエンジンは各シミュレーションをできるだけ速く実行するように設計される。係属中の米国特許出願第12/586,724号明細書特許文献1には、ハードウェア設計の同時並行的シミュレーションを効率的に行うための、本明細書においてコンカレントシミュレーションエンジンと呼ばれる技法が記載されており、特許文献1は引用を以て本明細書の一部となす。コンカレントシミュレーションエンジンは、同時に幾つかのシミュレーションを実行することによって性能を達成する。シリアル及びコンカレントシミュレーションエンジンの実装並びにシミュレートされているハードウェア設計の独自の特性に応じて、シリアルシミュレーションエンジンを用いてハードウェア設計の特定の部分を実行し、コンカレントシミュレーションエンジンを用いてハードウェア設計の特定の他の部分を実行することが望ましいであろう。コンカレントシミュレーションエンジン及びシリアルシミュレーションエンジンを1つの統合型論理シミュレータに統合するためのソフトウェアベースの技法について以下に説明する。この統合によりもたらされる論理シミュレータを、これ以降統合型論理シミュレータと呼ぶ。論理シミュレータは、ハードウェア記述言語HDLにより定められるときに、特定の実行モデルを実装することに留意されたい。統合型論理シミュレータを記述するために、VerilogHDLを用いる。しかし、統合型論理シミュレータは、その他のHDL及び該HDLに関連する実行モデルに適用することができる。VerilogHDLは、基本的な離散イベント実行モデルに従って解釈される。幾つかのイベントキューが定義され、そこからのイベントが実行される。イベントは、1シミュレーションが進むにつれて生成され、2特定のキューに配置され、3実行モデルにより定められるようなシミュレーション中の特定の時点でキューから取り出され、4実行される。イベントを実行すると、今度は、後で実行するためにキューに配置される追加イベントを生成することができる。イベントを含むこのシーケンスは、それ以上イベントが生成されなくなるまで継続し、イベントが生成されなくなった時点でシミュレーションは終了する。通常、シミュレートされるハードウェア設計は、複数のモジュールとしてVerilogHDLで表される。多くの場合、Verilogモジュールと実際のハードウェアサブコンポーネントとの間に対応関係があるが、必ずしもそうばかりとは限らない例えばVerilogモジュールは、単一のハードウェアサブコンポーネントによって実装されない抽象的な機能性またはビヘイビア振る舞いを表現し得る。Verilogモジュールは、別のモジュールに埋め込まれると言われているモジュールのインスタンスとともに階層に配置される。例えば、マイクロプロセッサ用モジュールは、種々の演算モジュール、論理モジュール、制御モジュール及び記憶モジュールに分解され得る。マイクロプロセッサモジュール内には、階層に構築された各構成モジュールの埋め込みインスタンスがある。インスタンス化された各Verilogモジュールは、VerilogHDL実行モデルの仕様に従って、論理シミュレータによる実行のためにイベントを生成する。VerilogHDL論理シミュレータは、シリアルシミュレーションエンジンのみ、コンカレントシミュレーションエンジンのみ、またはシリアルシミュレーションエンジンとコンカレントシミュレーションエンジンの組合せ後者は本明細書に記載の統合型論理シミュレータであるのいずれを用いて実装されようと、実行モデルに従うはずである。例えば、図1は、VerilogHDL実行モデルによって記述されるキューのサブセットを示している。VerilogHDL実行モデルは、論理シミュレータの非アクティブイベントキューから任意の非アクティブイベント102が実行される前に、論理シミュレータのアクティブイベントキューから全てのアクティブイベント101が実行されることを必要とする。アクティブ及び非アクティブイベントキューが空になった時点で、NBA更新イベントキューからノンブロッキング代入nonblockingassignment:NBA更新イベント103が実行される。図1に示されているものの他にも、シミュレーションの進行とともに1つのキューから別のキューへ進むための確立した規則に従って、VerilogHDL実行モデル内に他のキューがあることに留意されたい。シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンの両者を用いる統合型論理シミュレータにおいて、ハードウェア設計を記述するHDLプログラムを2つのモジュール群に分割することができる。1つのモジュール群はシリアルシミュレーションエンジンによって実行され、もう1つのモジュール群はコンカレントシミュレーションエンジンによって実行される。統合型論理シミュレータがVerilogHDL実行モデルに違反しない例えばシリアルシミュレーションエンジンまたはコンカレントシミュレーションエンジンのいずれか一方において実行するためのアクティブイベント及び非アクティブイベントがまだある間はNBA更新イベントが実行されないように、統合型論理シミュレータにおける1つのキューから別のキューへの進行は、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間で調整されなければならない。Verilogモジュールは、入力/出力ポート変数を介して互いに相互作用する。モジュール間相互参照として知られている機能その仕組みは当業者に知られているので、ここでは説明しないを介して、或るVerilogモジュールを他のモジュールインスタンス内の内部変数に直接読み書きすることもできる。これらの内部変数は、モジュール間相互作用において用いられ、或るモジュールのためのインタフェース変数として特定されかつ参照される。図2は、2つのモジュール、すなわち、加算器モジュール202と、加算器モジュール202をインスタンス化するトップレベルモジュール201とを備えた単純な従来の設計を示している。トップレベルモジュール201内の変数と埋め込み加算器モジュール202内の変数とが、加算器ポート変数を介して結び付けられる。これらのポート変数は、この設計におけるインタフェース変数である。図2に示されているように、トップモジュール201のためのインタフェース変数clk、input1及びinput2は、加算器モジュール202のためのインタフェース変数clk、a及びbにマッピングする。それゆえ、例えば、変数input1が変化すると、変数aも変化する。同様に、加算器モジュール202のインタフェース変数outは、トップレベルモジュール201のためのインタフェース変数sumにマッピングする。特に、シリアルシミュレーションエンジンにアサインされたモジュールがコンカレントシミュレーションエンジンにアサインされたモジュールとインターフェースをとるとき、シリアルシミュレーションエンジンモジュールは、コンカレントシミュレーションエンジンモジュールのためのプレースホルダとして機能するスタブモジュールと相互作用することができる。このスタブモジュールは、埋め込みモジュールの全てのインタフェース変数を含むことができる。再び図2に示されている設計を参照すると、トップレベルモジュールをシリアルシミュレーションエンジンにアサインすることができ、加算器モジュールをコンカレントシミュレーションエンジンにアサインすることができる。この場合、加算器モジュールRTLを参照する代わりに、シリアルシミュレーションは、加算器のためのスタブモジュールを参照する。図3Aは、設計200図2のための従来のHDL300を示しており、図3Bは、統合型論理シミュレータによりシミュレートされるときのシリアルシミュレーションエンジンによって参照されるHDL310を示している。加算器モジュールのためのインタフェース変数はHDL310スタブモジュールとも呼ばれるに残るが、加算器モジュールの機能的側面すなわちalways及びoutabはもはやシリアルシミュレーションエンジン内に存在しないことに留意されたい。特に、図4A及び図4Bを参照して説明したように、加算器モジュールの機能的側面は、代わりにコンカレントシミュレーションエンジンにおいて定義される。図4A及び図4Bは、トップモジュール及び埋め込みモジュールの例示的な分割を示している。具体的には、図4Aは、図2に示した設計の従来の論理シミュレータ図を示している。この場合、全てのモジュールすなわち、トップモジュール201及び加算器モジュール202がシリアルシミュレーションエンジン401によってシミュレートされる。対照的に、図4Bは、コンカレントシミュレーションエンジン402が埋め込み加算器モジュール202に対する責任を持たされているときの分割を示している。この場合、実際の加算器モジュールHDLはコンカレントシミュレーションエンジン402によってシミュレートされることができ、シリアルシミュレーションエンジン401は、埋め込み加算器モジュールのためのスタブモジュール202Aと相互作用することができる。図4Bに示されている構成では、シリアルシミュレーションエンジン401は、各インタフェース変数1つが図示されているにアサインされた自身のストレージ403を有することができる。スタブモジュール202Aへの入力の役割を果たすインタフェース変数に値を書き込むことができ、スタブモジュール202Aへの出力の役割を果たすインタフェース変数から値が読み出される。同様に、コンカレントシミュレーションエンジン402は、各インタフェース変数1つが図示されているにアサインされた自身のストレージ404を有することができる。コンカレントシミュレーションエンジンモジュール、すなわち、加算器モジュール202への入力の役割を果たすインタフェース変数から値を読み出すことができ、加算器モジュール202への出力の役割を果たすインタフェース変数に値を書き込むことができる。上記したように、加算器モジュール202内のインタフェース変数の値の変更は、スタブモジュール202Aに反映されることになり、それによってトップモジュール201が適切に機能することを確実にする。同様に、スタブモジュール202A内のインタフェース変数の値の変更は、加算器モジュール202に反映されることになり、それによってそれが適切に機能することを確実にする。インタフェース変数ではない変数は、シリアルシミュレーションエンジン401またはコンカレントシミュレーションエンジン402のいずれか一方に格納されるが、両方には格納されないことに留意されたい。換言すれば、統合型論理シミュレータにおいてシリアルシミュレーションエンジン401とコンカレントシミュレーションエンジン402との間で共有される状態は、インタフェース変数に限定される。特に、シリアルシミュレーションエンジン及びコンカレントシミュレーションエンジンは、変数の値を格納するために互いに異なる表現を利用することができる。一実施形態では、シリアルシミュレーションエンジンは、上記変数に対して複数の値、各シミュレーションに対して1つが格納されている表現を用いることができる。例えば、図5Aに示されているシリアルシミュレーションエンジン500を参照し、4つの異なるシミュレーション、すなわち、シミュレーション0、シミュレーション1、シミュレーション2及びシミュレーション3に対して複数の値を有する8ビット変数Vのための変数の値の表現を考える。変数Vのための各シミュレーションは、8ビットを格納する。対照的に、図5Bに示されているコンカレントシミュレーションエンジン510を参照すると、複数の4ビットワードに4つのシミュレーションの値が格納される。具体的には、そのようなアサインされたワードが8つ、すなわち変数Vの各ビットに1つあるすなわちV[0]~V[7]。図5A及び図5B中のボックス501及び502はそれぞれ、シリアルシミュレーションエンジン500及びコンカレントシミュレーションエンジン510において複数のシミュレーションにわたってシングルビットのための値がどのように構築されるかを示している例えばビットA、B、C及びDを参照。インタフェース変数の2つのコピーすなわち、シリアルシミュレーションエンジンに1つ、コンカレントシミュレーションエンジンに1つがあるので、これら2つのコピーは、統合型論理シミュレータが全シミュレーション状態の一貫した表示を保つように、更新時に同期されたままでなければならない。いくつかの実施形態では、キュー評価の始めと終わりにインタフェース変数の値が同期される。インタフェース変数の値を同期させるには、変数の値を格納するためのシリアルシミュレーションエンジン表現例えば図5Aを参照とコンカレントシミュレーションエンジン表現例えば図5Bを参照との間の翻訳が必要である。図6Aは、VerilogHDL実行モデルにおけるアクティブイベントキューに基づくシリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間の例示的な同期を示している。各シミュレーションエンジンは自身のアクティブイベントキューを有することに留意されたい。すなわち、シリアルシミュレーションエンジン600Aはアクティブイベント601を有し、コンカレントシミュレーションエンジンはアクティブイベント611を有する。一実施形態では、シリアルシミュレーションエンジン600A内のアクティブイベントキューにそれ以上アクティブイベント601がなくなれば、その時がコンカレントシミュレーションエンジン600Bに同期させる時間である。ステップ630では、コンカレントシミュレーションエンジンモジュールのためのポートインタフェース変数の値が、シリアルシミュレーションエンジン600Aから翻訳同期関数translateandsynchronizefunction620へ転送される。この翻訳同期関数620は、シリアルシミュレーションエンジン600Aによって用いられるストレージ表現からコンカレントシミュレーションエンジン600Bによって用いられるストレージ表現へ例えば、図5Aに示されているストレージ表現から図5Bに示されているストレージ表現への翻訳を含む。ステップ631では、翻訳され転送されたポートインタフェース変数の値に基づいて、コンカレントシミュレーションエンジン600Bにおけるアクティブイベント611が実行される。ステップ632では、コンカレントシミュレーションエンジンモジュールのためのポートインタフェース変数の値が、翻訳同期関数620を介してシリアルシミュレーションエンジン600Aに転送される。この方向においては、翻訳同期関数620は、コンカレントシミュレーションエンジン600Bによって用いられるストレージ表現からシリアルシミュレーションエンジン600Aによって用いられるストレージ表現への翻訳を含む。翻訳同期関数620は、グルーロジック640の一部を形成することに留意されたい。このグルーロジックは、コンパイル時間関数及びランタイム関数の両者を提供する。コンパイル時間関数は、シリアルシミュレーションエンジン600Aに全てのモジュールのためのソースコードが与えられたときに、コンカレントシミュレーションエンジン600Bには該エンジンにアサインされるモジュールの定義が与えられる一方で、シリアルシミュレーションエンジン600Aには同じモジュールのためのスタブ定義が与えられることを確実にすることを含む。ランタイム関数は、シミュレータが動作してイベントを生成し始めた時点で、シリアルシミュレーションエンジンとコンカレントシミュレーションエンジンとの間でのインタフェース変数の翻訳が与えられることを確実にすることを含む。ランタイム関数はまた、シリアルシミュレーションエンジン600Aにおけるキューの実行がVerilogHDL実行モデルに従うように、シリアルシミュレーションエンジン600A及びコンカレントシミュレーションエンジン600Bの両者においてシミュレーションが適切に同期されることを確実にすることを含む。このように、翻訳同期関数620は、グルーロジック640のランタイム関数の一部を形成する。コンカレントシミュレーションエンジン600Bのアクティブイベント611を実行することで、シリアルシミュレーションエンジン600Aの追加アクティブイベント601を生成したかもしれないことに留意されたい。これについては翻訳同期関数620を用いて同期されるステップ633で示されている。これらの新たなイベントは次にVerilogHDL実行モデルによって実行され、その後、翻訳同期関数620を用いてステップ630、631、632及び633が繰り返される。シリアルシミュレーションエンジン600Aのアクティブイベント601がないときコンカレントシミュレーションエンジン600Bによって生成される追加アクティブイベントまたは既にシリアルシミュレーションエンジン600Aにおいてキューに入れられているアクティブイベントに基づいて、シリアルシミュレーションエンジン600Aの非アクティブイベントキューからの非アクティブイベント602は、VerilogHDL実行モデルに従って実行されることができる。図6Aのアクティブキューを参照して説明した同期をVerilogHDL実行モデルにおける他のキュー評価に拡張することができる。例えば、図6Bは、シリアルシミュレーションエンジン600A及びコンカレントシミュレーションエンジン600Bのためのアクティブイベントキューアクティブイベント601及び611、非アクティブイベントキュー非アクティブイベント602及び612、並びにNBA更新イベントキューNBA更新イベント603及び613を含む例示的な拡張を示している。シリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間で、アクティブキュー、非アクティブキュー及びNBA更新キューは、それぞれ翻訳同期関数620、621及び622これらはグルーロジック640の一部を形成するを用いて同期される。シリアルシミュレーションエンジン600Aの或るキューが評価された後、インタフェース変数の値がコンカレントシミュレーションエンジン600Bに転送される。このイベントはその後、コンカレントシミュレーションエンジン600Bの対応するキューから実行される。イベント実行の結果を含むインタフェース変数の値はその後、シリアルシミュレーションエンジン600Aに戻され、そしてVerilogHDL実行モデルに従ってキューからキューへ進む。図6Bに示されているように、シリアルシミュレーションエンジン600Aまたはコンカレントシミュレーションエンジン600Bのいずれか一方において実行される任意のイベントは、優先順位が高いかまたは低いかいずれかの1若しくは複数のイベントを生成し得ることに留意されたい。通常、コンカレントシミュレーションエンジン600Bによって任意の新たなイベントが生成されたときは、翻訳同期関数はすぐ知らされ、当該新たなイベントはその後、シリアルシミュレーションエンジン600Aの適切なキューに配置される。アクティブイベント、非アクティブイベント及びNBA更新イベントを含むVerilogHDLに基づく例示的なキューについては既に説明したことに留意されたい。しかし、統合型論理シミュレータを、その他のHDL及び該HDLに関連する実行モデルに有利に適用することもできる。従って、通常、統合型論理シミュレータは、特定のHDLによって提供されるイベントの全クラスと連動することができる。さらに、各特定のHDLは、統合型論理シミュレータによって尊重されることができるような互いに異なるキュー遷移規則を有することができる。例えば、図6Cは、VHDL超高速集積回路veryhighspeedintegratedcircuit:VHSICHDLモデルにおける例示的なキューのシミュレーション実行順序を示している。VHDLモデルでは、実行の順序は、信号更新イベント、関数評価イベント及びプロセス評価イベント経て進み、制御もプロセス実行の終わりに達するまでこの方向に流れ、終わりの時点で制御は信号更新に戻ることに留意されたい。上記したように、シリアルシミュレーションエンジン600Aとコンカレントシミュレーションエンジン600Bとの間での各実行の遷移は、翻訳同期関数620、621及び622を含むグルーロジック640を用いて促進されることができる。統合型論理シミュレータにおいて関連アクティブイベント及びNBA更新イベントが実行されるような以下の例を考える。これらのイベントは、3つの代入、すなわち、シリアルシミュレーションエンジンによってシミュレートされるモジュールにおける2つの代入及びコンカレントシミュレーションエンジンによってシミュレートされるモジュールからの1つの代入によってもたらされるVerilog代入は、計算された変数の値を格納場所に書き込むことを含む。SerialSimulationEngineActiveeventalwaysAB1NBAupdateeventalwaysCDConcurrentSimulationEngineActiveeventalwaysBA2上の例では、立ち上がりpositiveedgeにおいてCLKをトリガするとき、2つのイベントが生成される。1つのイベントはシリアルシミュレーションエンジンアクティブイベントキューに配置され、もう1つのイベントはシリアルシミュレーションエンジンNBA更新イベントキューに配置される。図6Bのための優先順位によれば、最初にアクティブイベントがVerilogHDL実行モデルに従って実行され、その後、シリアルシミュレーションアクティブイベントキューは空になる。この空状態は、図6Aに関連して説明した4ステップのプロセスに従って、統合型論理シミュレータをコンカレントシミュレーションエンジンに同期させる。具体的には、以下の通りである。変数Aのための値が、シリアルシミュレーションエンジンからコンカレントシミュレーションエンジンへ転送される。コンカレントシミュレーションエンジンにおいてアクティブイベントが実行される。変数Bのための更新された値が、コンカレントシミュレーションエンジンからシリアルシミュレーションエンジンへ転送される。コンカレントシミュレーションにおいてアクティブイベントが実行されるので、次のキュー評価に進む前に、シリアルシミュレーションエンジンにおいてなすべき余分な仕事すなわち新たなアクティブイベントが存在するであろう。従って、プロセスは、シリアルシミュレーションエンジンにおけるアクティブイベントキューに戻る。この時点で、シリアルシミュレーションエンジンにおいて実行すべきアクティブイベントはもうない。さらに、シリアルシミュレーションエンジンにもコンカレントシミュレーションエンジンにも非アクティブイベントがなく後者の点は、図6Aにおいて概説したような方法で非アクティブイベントキュー上のコンカレントシミュレーションエンジンと同期させた後に決定される、これは、シリアルシミュレーションが保留状態のNBA更新イベントを実行して変数Cに書き込むことができることを意味する。一実施形態では、なすべき仕事の量を減らすために、修正インタフェース変数のみまたは代わりにインタフェース変数内の修正ビットのみがキュー評価点において同期される。他の実施形態では、修正インタフェース変数を有するシミュレーションがキュー評価点においてのみが同期される。キュー評価点は、1つのシミュレーションエンジンにおける或る特定のキュー内の全てのイベントを終えたときに現れることができる。一実施形態では、キュー評価点は、同期をトリガすることができる。すなわち、グルーロジックが、更新されたインタフェース変数を、他のシミュレーションエンジンにおいて実行するために対応するキューに転送する。しかし、他の実施形態では、1若しくは複数のインタフェース変数の変化が同期をトリガすることができる。それゆえ、同期は、キュー評価前、キュー評価後、またはキュー評価の前後に起こり得る全部または一部において。図7は、シリアルシミュレーションエンジン700Aによってシミュレートされるトップモジュール701と、コンカレントシミュレーションエンジン700Bによってシミュレートされる加算器モジュール712とを示している。この実施形態では、トップモジュール701は複数のスタブ加算器モジュール702A、702B、702C及び702Dを含む。特に、シリアルシミュレーションエンジン700Aにおけるスタブ加算器モジュール702A~702Dの全てのインスタンスを、コンカレントシミュレーションエンジン700Bにおける加算器モジュール712の1つのインスタンスのみによって定義することができる。有利には、この態様は、目的を達成するためのかなりの力を統合型論理シミュレータに対して与える。具体的には、シリアルシミュレータエンジン700A内の各スタブモジュールは、各インタフェース変数のための別個のストレージを有することができるが、コンカレントシミュレーションエンジン700B内の対応するモジュールは、複数の値を格納し得る1つのワードを有することができ、それによって該ワードは複数のスタブモジュールに関連するインタフェース変数の値を格納することができる。例えば、図7では、スタブ加算器モジュール702A~702Dは、各インタフェース変数に対してそれぞれストレージ703A~703Dを有することができる。対照的に、コンカレントシミュレーションエンジン700B内の加算器モジュール712は、各スタブ加算器モジュール702A~702Dからのこれらのインタフェース変数を格納するために1つのワード713しか必要としない。ストレージ703A~703Dに格納される値が1ビット値例えば1つのclk値であると仮定すれば、ワード713の各ビットは、特定のスタブモジュールによって格納されている値に対応することができるすなわち、703A←→703A’、703B←→703B’、703C←→703C’、703D←→703D’。それゆえ、イベントの実行中にシリアルシミュレーションエンジン700Aのストレージ703C内のインタフェース変数の値が変化した場合、該値は同期中にコンカレントシミュレーションエンジン700B内のビット703Cに転送されることになる。この転送は、図5A及び図5Bを参照して説明したものと同じ翻訳を含むことに留意されたい。さらに、他の実施形態は、シリアルシミュレーションエンジン700Aに格納されたマルチビット値を有することができ、該値はマルチビット値としてコンカレントシミュレーションエンジン700Bの1つのワードの位置に転送されることができることに留意されたい。このストレージ構成により、コンカレントシミュレーションエンジン700Bは、加算器モジュール712内の複数すなわち4つの値を用いて複数すなわち4回のコンカレントシミュレーションを行うことができる。有利には、論理シミュレーションに用いられる多くのコンピュータは、拡張ワード値、例えば32、64または128ビットのレジスタを有する。それゆえ、統合型論理シミュレータのコンカレントシミュレーションエンジンは、1つのワードに格納されているかなりの量のデータに同じ操作を同時に適用することができる。上記した実施形態では、シリアルシミュレーションエンジンは、それが同期点においてコンカレントシミュレーションエンジンを呼び出すシリアルシミュレーションエンジンであるという意味では、統合型論理シミュレータの主シミュレーションエンジンであってよい。他の実施形態では、逆の構成、すなわち、コンカレントシミュレーションエンジンが主シミュレーションエンジンであり、VerilogHDL実行モデルに従ってキューからキューへ進行し、適切な同期点においてシリアルシミュレーションエンジンを呼び出すような構成も可能である。一実施形態では、実行モデルにおける同期点は、プログラミング言語インタフェースPLIや検証手続インタフェースVPIなどの業界標準のアプリケーションプログラミングインタフェースを通して確立されることができ、これらのインタフェースは、ユーザ定義拡張子をVerilogシミュレーションに実装するために用いられる。別の実施形態では、実行モデルにおける同期点は、1若しくは複数の独自仕様のインタフェースを通して確立されることができる。一実施形態では、どのモジュールがスタブモジュールとしてかつコンカレントシミュレーションエンジンにおいて行われる関連コンカレントシミュレーションを用いてインスタンス化されることができるかを決定するための設計の分割をユーザが手動で行うことができる。別の実施形態では、この分割を、潜在的なインスタンスの数に基づくシミュレーションによって自動的に行うことができるすなわち、インスタンスの数が多ければ多いほど、コンカレントシミュレーションエンジンによって達成可能な力が大きい。さらに別の実施形態では、シリアルシミュレーションエンジン及び/またはコンカレントシミュレーションエンジンが所望のレベルのシミュレーション性能を達成する能力に基づいて分割を行うことができる。例えば、或るモジュールがPLIプログラミング言語インタフェースを通してユーザ定義C関数への広範な関数呼び出しコールを行う場合、おそらくコンカレントシミュレーションエンジンの値表現を活用する能力なしにユーザ定義関数が書き込まれたので、上記モジュールは、シリアルシミュレーションエンジンによる実行に一層適しているであろう。設計の分割は、設計の設計階層を考慮して行うことができることに留意されたい。例えば、一実施形態では、第1のモジュールが副シミュレーションエンジンによってシミュレートされることは、第1のモジュールの下の設計階層内においてより深くインスタンス化された全てのサブモジュールも同様に副シミュレーションエンジンによってシミュレートされることを示唆している。別の実施形態では、第1のモジュール副シミュレーションエンジンによってシミュレートされるが第2のモジュールをインスタンス化する場合に、第2のモジュールは、主シミュレーションエンジンによってシミュレートされることができる。上記したように、主シミュレーションエンジンはシリアルシミュレーションエンジンであってよく、第2のシミュレーションエンジンはコンカレントシミュレーションエンジンであってよい逆もまた同様。例えば、以下のコードは、統合型論理シミュレータに固有の柔軟性の或る例示的な事例を与える。OriginalVerilogmoduletopmoduleregclkreg70input1reg70input2wire70sumwire70productadderandmultamabsumproductendmodulemoduleadderandmultinputclkinput70ainput70boutput70sumoutput70productalwayssumabmultipliermultabproductendmodulemodulemultiplierinputclkinput70ainput70boutput70productalwaysproductabendmoduleVerilogstubmodulessimulatedbytheserialsimulationengineTobesimulatedbytheserialsimulationenginemoduletopmoduleregclkreg70input1reg70input2wire70sumwire70productadderandmultamabsumproductendmoduleTobesimulatedbytheconcurrentsimulationenginemoduleadderandmultinputclkinput70ainput70boutput70sumoutput70productmultipliermultabproductendmoduleTobesimulatedbytheserialsimulationenginemodulemultiplierinputclkinput70ainput70boutput70productalwaysproductabendmodule図8は、上記のコードを表現しているブロック図を示していることに留意されたい。この実施形態では、シリアルシミュレーションエンジン811は、スタブ加算器及び乗算器モジュール802Aを含むトップモジュール801に対する責任を持たされている。コンカレントシミュレーションエンジン812は、埋め込み加算器及び乗算器モジュール802に対する責任を持たされている。この場合、実際の加算器HDLは、コンカレントシミュレーションエンジン802によってシミュレートされることができ、コンカレントシミュレーションエンジン812は、埋め込み乗算器モジュールのためのスタブモジュール803Aと相互作用することができる。この実施形態では、加算器及び乗算器モジュール802はスタブ乗算器モジュール803Aを含み、スタブ乗算器モジュール803Aは、シリアルシミュレーションエンジン811の乗算器モジュール803と相互作用する。換言すれば、モジュールの下の設計階層内においてより深くインスタンス化された任意のサブモジュールスタブモジュールからシミュレーションを行うように指示された任意のモジュールは、シリアルシミュレーションエンジン811またはコンカレントシミュレーションエンジン812のいずれかによって実行されるように構造化されることができる。通常、シリアルシミュレーションエンジン811とコンカレントシミュレーションエンジン812との間のシミュレーション責任のこの転送は、何度も行われることができ、システム資源を最適化するように構造化されることができることに留意されたい。トップモジュールに埋め込まれている加算器モジュールのためのイベントを実行するものとしてコンカレントシミュレーションエンジンについて上記で説明したが、統合型論理シミュレーションは、他の種類のトップ/埋め込みモジュールに等しく適用可能であることに留意されたい。例えば、別の埋め込みモジュールは、被試験体deviceundertest:DUTを含むことができ、DUTはシリアルシミュレーションエンジンにおいてスタブモジュールとして表現されることができる。この場合、トップモジュールは、テストベンチを含むことができる。図9は、統合型論理シミュレータを含む例示的なデジタルASIC設計フローの簡易化した表現を示している。高レベルにおいて、プロセスは製品アイデアステップ900から始まり、EDAソフトウェア設計プロセスステップ910において実現される。設計が完成すると、完成した設計をテープアウトすることができるイベント940。テープアウトの後、製造プロセスステップ950並びに梱包及び組立てプロセスステップ960を行い、最終的に完成チップが得られる結果970。EDAソフトウェア設計プロセスステップ910は、実際には、簡単にするために直線的に示されている複数のステップ912~930からなる。実際のASIC設計プロセスでは、特定の設計は、特定のテストに合格するまで上記ステップを繰り返さなければならないかもしれない。同様に、任意の実際の設計プロセスでは、これらのステップが異なる順番及び組合せで生じることがある。従って、この説明は、特定のASICのための特定の、または推奨される設計フローではなく、コンテキスト及び一般的説明のつもりで与えられている。ここで、EDAソフトウェア設計プロセスステップ910の構成要素ステップについて簡単に説明する。システム設計ステップ912:設計者は、自身が実装したい機能性を記述し、何らかの状況を仮定した計画を行うことにより機能性を微調整し、コストをチェックすることなどができる。この段階で、ハードウェア-ソフトウェアのアーキテクチャ分割が起こり得る。このステップにおいて用いることができるシノプシス社SynopsysInc製の例示的なEDAソフトウェア製品には、ModelArchitect、Saber、SystemStudio、DesignWare登録商標の各製品が含まれる。論理設計及び機能検証ステップ914:この段階では、システム内のモジュールのためのVHDLまたはVerilogコードが書き込まれ、設計の機能的精度がチェックされる。より具体的には、設計をチェックして該設計が正しい出力を作り出すことを確実にする。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、VCS、VERA、DesignWare登録商標、Magellan、Formality、ESP、LEDAの各製品が含まれる。一実施形態では、上記の統合型論理シミュレータは、論理設計及び機能検証ステップ914中に実装されることができる。合成及びテスト設計designfortestステップ916:ここでは、VHDL/Verilogがネットリストに翻訳される。ネットリストは、標的技術に対して最適化されることができる。さらに、完成チップのチェックを可能にするためにテストの設計及び実装が行われる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、DesignCompiler登録商標、PowerCompiler、DFTMAX、TetraMAX、DesignWare登録商標の各製品が含まれる。ネットリスト検証ステップ918:このステップでは、ネットリストがタイミング制約を順守しかつVHDL/Verilogソースコードと一致しているかチェックされる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Formality、PrimeTime、VCSの各製品が含まれる。設計計画ステップ920:ここでは、チップのための全体的なフロアプランが作成され、タイミング及びトップレベルルーティングのために解析される。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Astro及びICCompilerの各製品が含まれる。物理的実装ステップ922:このステップでは、配置回路素子の位置決め及びルーティング回路素子の接続を行う。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Astro及びICCompilerの各製品が含まれる。解析及び抽出ステップ924:このステップでは、回路機能がトランジスタレベルにおいて検証され、それにより、何らかの状況を仮定した微調整が可能になる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、AstroRail、PrimeRail、Primetime、StarRCXTの各製品が含まれる。フィジカル検証ステップ926:このステップでは、製造、電気に関する問題、リソグラフィーの問題及び電気回路の正確さを確保するために種々のチェック機能が行われる。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Hercules製品が含まれる。解像度向上ステップ928:このステップは、設計の製造可能性を向上させるためのレイアウトの幾何学的操作を含む。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、Proteus、ProteusAF、PSMGenの各製品が含まれる。マスクデータ準備ステップ930:このステップは、完成チップを製作するためにリソグラフィーに用いるためのマスクの製作のためのテープアウトデータを提供する。このステップにおいて用いることができるシノプシス社製の例示的なEDAソフトウェア製品には、CATSファミリーの製品が含まれる。データストレージシステム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスとデータ及び命令を送受信するように結合された少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムで実行する1若しくは複数のコンピュータプログラムを用いて、上記した統合型論理シミュレータを実行することができる。各コンピュータプログラムは、高水準手続き型またはオブジェクト指向のプログラミング言語で、あるいは必要に応じてアセンブリ言語または機械語で実装されることができ、いずれの場合においても、言語はコンパイルまたは解釈された言語であってよい。適切なプロセッサには、例として、汎用及び専用マイクロプロセッサ並びに他の種類のマイクロコントローラが含まれる。一般的に、プロセッサは読出し専用メモリROM及び/またはランダムアクセスメモリRAMから命令及びデータを受け取ることになる。一般的に、コンピュータは、データファイルを格納するための1若しくは複数の大容量ストレージデバイスを含むことになり、そのようなデバイスには、磁気ディスク内部ハードディスク及びリムーバブルディスクなど、光磁気ディスク及び光ディスクが含まれる。コンピュータプログラム命令及びデータを目に見える方法で具体化するのに適したストレージデバイスには、例として、半導体メモリデバイスEPROM、EEPROM、フラッシュメモリデバイスなど、磁気ディスク内部ハードディスク及びリムーバブルディスクなど、光磁気ディスク及びCDROMディスクなどを含む全ての形態の不揮発性メモリが含まれる。上述のいずれも、特殊用途向け集積回路applicationspecificintegratedcircuit:ASICを補うかまたはASICに組み込むことができる。本発明の原理を説明する添付の図面とともに、本発明の1若しくは複数の実施形態の詳細な説明が上記でなされている。そのような実施形態に関連して本発明について説明されているが、本発明は、どの実施形態に限定されるものでもない。本発明の範囲は特許請求の範囲によってのみ限定され、本発明は、数多くの代替形態、変更形態及び等価形態を含む。本発明への完全な理解を与えるために、以下の説明に多くの具体的詳細が示されている。これらの詳細は例示のために与えられているものであり、これらの具体的詳細の一部または全部なしに、特許請求の範囲に従って本発明を実施することができる。明瞭さのために、本発明に関連する技術分野において既知である技術項目については、本発明が不必要に不明瞭にならないように、詳細に説明しなかった。"