(57)【特許請求の範囲】
【請求項１】
デジタル回路を設計する装置であって、
該デジタル回路の少なくとも１つの第１の部分の少なくとも１つの第１のモデルが、相互にコミュニケーションを行う複数の同時プロセスに対応する少なくとも１つの高位ハードウェア記述言語で表現されたものとして提供されると、該第１のモデルを、少なくとも１つの第１のプログラミング言語の少なくとも１つのソフトウェアモデルに変換するシミュレーションモデル生成部と、
前記デジタル回路の少なくとも１つの第２の部分の少なくとも１つの第２のモデルが、少なくとも１つの第２のプログラミング言語で提供されるとともに、前記ソフトウェアモデルが提供されると、異質言語インターフェースにより、前記第１のプログラミング言語とコミュニケーションを行い、かつ前記第２のプログラミング言語と直接的にコミュニケーションを行って、前記ソフトウェアモデルと前記第２のモデルとのコ・シミュレーションを行って、前記同時プロセスを順次ソフトウェアプロセスに変換するシミュレーションエンジンと、
前記シミュレーションエンジンによる前記コ・シミュレーションの結果が正しいかを確認する第１確認手段と、
該第１確認手段による前記コ・シミュレーションの結果が正しい場合に、前記第１の部分と前記第２の部分とが合成可能であるかを確認する第２確認手段と、
該第２確認手段により合成可能である場合に、前記デジタル回路の低位ハードウェア記述を生成する低位ハードウェア記述生成手段と、
を備え、
前記シミュレーションエンジンが、前記同時プロセスのそれぞれのために、ジャンプ命令およびループ終了条件を有するプロセスループを含むソフトウェアコードを生成し、前記同時プロセスのそれぞれのループ終了条件を解析することにより、前記同時プロセスの全てのループが非終了であり得るかどうかを判定し、ループが非終了である場合に、該非終了の前記同時プロセスにおける前記ジャンプ命令をイグジットポイントと置き換えることを特徴とするデジタル回路の設計装置。
【請求項２】
請求項１に記載のデジタル回路の設計装置によって実施されるデジタル回路の設計方法であって、
該デジタル回路の少なくとも１つの第１の部分の少なくとも１つの第１のモデルが、相互にコミュニケーションを行う複数の同時プロセスに対応する少なくとも１つの高位ハードウェア記述言語で表現されたものとして前記シミュレーションモデル生成部に提供されると、該シミュレーションモデル生成部によって、該第１のモデルを、少なくとも１つの第１のプログラミング言語の少なくとも１つのソフトウェアモデルに変換する工程と、
前記デジタル回路の少なくとも１つの第２の部分の少なくとも１つの第２のモデルが、少なくとも１つの第２のプログラミング言語で前記シミュレーションエンジンに提供されるとともに、前記ソフトウェアモデルが該シミュレーションエンジンに提供されると、該シミュレーションエンジンが、異質言語インターフェースにより、前記第１のプログラミング言語とコミュニケーションを行い、かつ前記第２のプログラミング言語と直接的にコミュニケーションを行って、前記ソフトウェアモデルと前記第２のモデルとのコ・シミュレーションを行って、前記同時プロセスを順次ソフトウェアプロセスに変換する工程と、
前記第１確認手段によって、前記シミュレーションエンジンによる前記コ・シミュレーションの結果が正しいかを確認する工程と、
該第１確認手段による前記コ・シミュレーションの結果が正しい場合に、前記第２確認手段によって、前記第１の部分と前記第２の部分とが合成可能であるかを確認する工程と、
該第２確認手段により合成可能である場合に、前記低位ハードウェア記述生成手段によって、前記デジタル回路の低位ハードウェア記述を生成する工程と、
を包含し、
前記シミュレーションエンジンによる前記コ・シミュレーションを行う工程が、前記同時プロセスのそれぞれのために、ジャンプ命令およびループ終了条件を有するプロセスループを含むソフトウェアコードを生成し、前記同時プロセスのそれぞれのループ終了条件を解析することにより、前記同時プロセスの全てのループが非終了であり得るかどうかを判定し、ループが非終了である場合に、該非終了の前記同時プロセスにおける前記ジャンプ命令をイグジットポイントと置き換える工程とを包含することを特徴とするデジタル回路のコ・シミュレーション方法。
【請求項３】
前記コ・シミュレーションを行う工程が、前記高位ハードウェア記述言語の前記第１のモデルを、前記第１のプログラミング言語の前記ソフトウェアモデルにコンパイルする工程を包含する、請求項２に記載の方法。
【請求項４】
前記高位ハードウェア記述言語が、通信逐次プロセスモデルに基づく、請求項２に記載の方法。
【請求項５】
前記ソフトウェアプロセスが、所定の刺激を検出する少なくとも１つの刺激ユニット、および該少なくとも１つの刺激ユニットに応じて、所定の応答を提供する少なくとも１つの応答ユニットを含む、請求項２に記載の方法。
【請求項６】
前記応答ユニットのうちの少なくとも１つが、前記デジタル回路の前記第１の部分の前記同時プロセスを実施するプロセス応答ユニットを含む、請求項５に記載の方法。
【請求項７】
前記同時プロセスが、一の共通のイベントにより引き起こされる複数の別々のプロセスを含み、前記プロセス応答ユニットが、該別々のプロセスをスケジューリングするスケジューラ、および該スケジューリングに従って、該別々のプロセスを実施するプロセスハンドラを含む、請求項６に記載の方法。
【請求項８】
前記スケジューラが、個々のイグジットポイントを有するアクティブ未処理プロセスのリストを作り、該リストからカレントプロセスを選び、該カレントプロセス用のエントリポイントを選択する、請求項７に記載の方法。
【請求項９】
前記各イグジットポイントで、前記スケジューラが、前記リストから、さらなるカレントプロセスを選び、該さらなるカレントプロセス用のさらなるエントリポイントを選択する、請求項８に記載の方法。
【請求項１０】
前記イグジットポイントにおいて、前記スケジューラが、前記同時プロセスの少なくとも１つを、新たなエントリポイントを有する前記アクティブ未処理プロセスのリストに入れる、請求項８に記載の方法。
【請求項１１】
前記イグジットポイントにおいて、前記スケジューラが、前記同時プロセスの少なくとも１つを、新たなエントリポイントを有する前記アクティブ未処理プロセスのリストに入れる、請求項９に記載の方法。
【請求項１２】
請求項２に記載されたデジタル回路の設計方法の各工程をコンピュータに実行させるためのプログラム。
【請求項１３】
請求項１２に記載のプログラムが記録されたコンピュータ読み取り可能な格納媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、デジタル回路のコ・シミュレーション方法に関する。本方法は、例えば、ＶＬＳＩタイプの集積回路の設計および製造プロセスの一部として用いられ得る。
【０００２】
【従来の技術】
重要なデジタルハードウェア回路は、通常、その回路を、ハードウェア記述言語（ＨＤＬ）で記述し、かつ合成ツールを用いてハードウェアに合成する、合成に基づくアプローチを用いて設計される。ＶＨＤＬ（例えば、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ＶＨＤＬ  Ｌａｎｇｕａｇｅ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ」、Ｎｅｗ  Ｙｏｒｋ、ＵＳＡ、Ｍａｒｃｈ  １９８８、ＩＥＥＥ  Ｓｔｄ  １０７６−１９８７、およびＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ＶＨＤＬ  Ｌａｎｇｕａｇｅ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ」、Ｎｅｗ  Ｙｏｒｋ、ＵＳＡ、Ｊｕｎｅ  １９９４、ＩＥＥＥ  Ｓｔｄ  １０７６−１９９３で開示されている）およびＶｅｒｉｌｏｇ  ＨＤＬ（例えば、ＩＥＥＥ  ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ  Ｂａｓｅｄ  ｏｎ  ｔｈｅＶｅｒｉｌｏｇ  Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ」、Ｎｅｗ  Ｙｏｒｋ、ＵＳＡ  １９９６、ＩＥＥＥ  Ｓｔｄ  １３６４−１９９５で開示されている）が、一般に用いられるハードウェア記述言語である。しかしながら、回路の複雑さが増すにつれて、通常は、レジスタ転送の代わりに、Ｃ（例えば、Ｂｒｉａｎ  Ｗ．ＫｅｒｎｉｇｈａｎおよびＤｅｎｎｉｓ  Ｍ．Ｒｉｔｃｈｉｅの「Ｔｈｅ  Ｃ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ、Ｐｒｅｎｔｉｃｅ−Ｈａｌｌ、ＵＳＡ、ｓｅｃｏｎｄ  ｅｄｉｔｉｏｎ、１９８８」で開示されている）およびＣ＋＋（例えば、Ｂｊａｒｎｅ  Ｓｔｒｏｕｓｔｒｕｐの「Ｔｈｅ  Ｃ＋＋  ｐｒｏｇｒａｍｍｉｎｇ  ｌａｎｇｕａｇｅ」、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ  ｓｅｒｉｅｓ  ｉｎ  ｃｏｍｐｕｔｅｒ  ｓｃｉｅｎｃｅ、Ａｄｄｉｓｏｎ−Ｗｅｓｌｅｙ、Ｒｅａｄｉｎｇ、ＭＡ、ＵＳＡで開示されている）等のプログラミング言語に基づく高位ハードウェア記述言語を用いる傾向がある。
【０００３】
このような言語は、アルゴリズムでのハードウェア設計を可能にする。そして、高位合成ツール（例えば、Ｄａｎｉｅｌ  Ｇａｊｓｋｉ、Ｎｉｋｉｌ  Ｄｕｔｔ、Ａｌｌｅｎ  Ｗｕ、およびＳｔｅｖｅ  Ｌｉｎの「Ｈｉｇｈ−Ｌｅｖｅｌ  Ｓｙｎｔｈｅｓｉｓ、ｉｎｔｒｏｄｕｃｔｉｏｎ  ｔｏ  Ｃｈｉｐ  ａｎｄ  Ｓｙｓｔｅｍ  Ｄｅｓｉｇｎ」、Ｋｌｕｗｅｒ  Ａｃａｄｅｍｉｃ  Ｐｕｂｌｉｓｈｅｒｓ、Ｂｏｓｔｏｎ／Ｄｏｒｄｒｅｃｈｔ／Ｌｏｎｄｏｎ、１９９２で開示されている）が、所与のアルゴリズムレベルの記述から低位のＨＤＬ記述を生成するために用いられる。ソフトウェア設計と同様に、通常、高位言語を用いることにより設計期間が短縮される。
【０００４】
システムの中には、用いられる高位ＨＤＬが、単純に周知のプログラミング言語であるシステムもある。例をあげると、システムＣ（例えば、Ｓｙｎｏｐｓｙｓ  Ｉｎｃ．、「Ｏｖｅｒｖｉｅｗ  ｏｆ  ｔｈｅ  Ｏｐｅｎ  Ｓｙｓｔｅｍ  Ｃ  ｉｎｉｔｉａｔｉｖｅ」、（データシートがｗｗｗ．ｓｙｓｔｅｍｃ．ｏｒｇからインターネット上で入手可能である）、１９９９に開示されている）は、システム記述言語としてＣ＋＋を用いている。他の場合では、ハードウェア設計関連の拡張をしたプログラミング言語が用いられる。そのようなシステムの例としては、Ｔａｎｇｒａｍシステム（Ｋ．ｖａｎ  Ｂｅｒｋｅｌ、Ｊ．Ｋｅｓｓｅｌ、Ｍ．Ｒｏｎｃｋｅｎ、Ｒ．Ｓａｅｉｊｓ、およびＦ．Ｓｃｈａｌｉｊの「Ｔｈｅ  ＶＬＳＩ−Ｐｒｏｇｒａｍｍｉｎｇ  Ｌａｎｇｕａｇｅ  Ｔａｎｇｒａｍａｎｄ  ｉｔｓ  Ｔｒａｎｓｌａｔｉｏｎ  ｉｎｔｏ  Ｈａｎｄｓｈａｋｅ  Ｃｉｒｃｕｉｔｓ」、Ｐｒｏｃｅｅｄｉｎｇ  ｏｆ  ｔｈｅ  ＥｕｒｏｐｅａｎＤｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ  （ＥＤＡＣ  ９１）、ｐａｇｅｓ  ３８４−３８９、Ａｍｓｔｅｒｄａｍ、Ｆｅｂｒｕａｒｙ１９９１、ＩＥＥＥ、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｐｒｅｓｓ、およびＫｅｅｓ  ｖａｎ  Ｂｅｒｋｅｌの「Ｈａｎｄｓｈａｋｅ  Ｃｉｒｃｕｉｔｓ」、ｖｏｌｕｍｅ  ５  ｏｆ  Ｃａｍｂｒｉｄｇｅ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｅｒｉｅｓ  ｏｎ  Ｐａｒａｌｌｅｌ  Ｃｏｍｐｕｔａｔｉｏｎ、Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ、Ｃａｍｂｒｉｄｇｅ、ＵＫ、１９９３で開示されている）、およびＢａｃｈシステム（Ａｋｉｈｉｓａ  Ｙａｍａｄａ、Ｋｏｉｃｈｉ  Ｎｉｓｈｉｄａ、Ｒｙｏｊｉ  Ｓａｋｕｒａｉ、Ａｎｄｒｅｗ  Ｋａｙ、Ｔｏｓｈｉｏ  Ｎｏｍｕｒａ、およびＴａｋａｓｈｉ  Ｋａｍｂｅの「Ｈａｒｄｗａｒｅ  Ｓｙｎｔｈｅｓｉｓ  ｗｉｔｈ  ｔｈｅ  ＢＡＣＨ  ｓｙｓｔｅｍ」、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｉｒｃｕｉｔｓ  ａｎｄ  Ｓｙｓｔｅｍｓ、１９９９、ならびにＧＢ  ２３１７２４Ｓで開示されている）が含まれる。
【０００５】
Ｂａｃｈハードウェアコンパイラにより用いられる言語は、（他の機能の中でも特に）明示的な並列コミュニケーションおよび同期コミュニケーションを表わす構成でＣ言語を拡張する。Ｂａｃｈ言語は、通信逐次プロセス（ＣＳＰ）モデルに基づいており、これは、Ｃ．Ａ．Ｒ．Ｈｏａｒｅの「Ｃｏｍｍｕｎｉｃａｔｉｎｇ  ｓｅｑｕｅｎｔｉａｌ  ｐｒｏｃｅｓｓｅｓ」、Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  ｏｆ  ｔｈｅ  ＡＣＭ、２１（８）：６６６−６７７、Ａｕｇｕｓｔ  １９７８、およびＣ．Ａ．Ｒ．Ｈｏａｒｅの「Ｃｏｍｍｕｎｉｃａｔｉｎｇ  ｓｅｑｕｅｎｔｉａｌ  ｐｒｏｃｅｓｓｅｓ」、Ｐｒｅｎｔｉｃｅ−Ｈａｌｌ  Ｉｎｔｅｒｎａｔｉｏｎａｌ、Ｅｎｇｌｅｗｏｏｄ  Ｃｌｉｆｆｓ（ＮＪ）、ＵＳＡ、１９９０、ｆｉｒｓｔ  ｅｄｉｔｉｏｎ  ｐｕｂｌｉｓｈｅｄ  ｉｎ  １９８５  ｂｙ  Ｐｒｅｎｔｉｃｅ−Ｈａｌｌで開示されており、同時処理を支持する演算の１モデルである。Ｔａｎｇｒａｍ言語もＣＳＰに基づく。
【０００６】
高位ＨＤＬを用いる別の重要な利点は、設計記述の抽象化レベルによる高速なシミュレーション速度である。非常に高速なシミュレーション速度も、ハードウェア記述を、シミュレーションエンジンにより解釈するのではなく、実行可能なフォーマットにコンパイルするシミュレーションに基づくコンパイル（例えば、Ｌ．Ｔ．Ｗａｎｇ、Ｎ．Ｅ．Ｈｏｏｖｅｒ、Ｅ．Ｈ．Ｐｏｒｔｅｒ、およびＪ．Ｊ．Ｚａｓｉｏの「ＳＳＩＭ：Ａ  ｓｏｆｔｗａｒｅ  ｌｅｖｅｌｉｓｅｄ  ｃｏｍｐｉｌｅｄ−ｃｏｄｅ  ｓｉｍｕｌａｔｏｒ」、Ｐｒｏｃｅｅｄｉｎｇ  ｏｆ  ｔｈｅ  ２４th  Ｄｅｓｉｇｎ  Ａｕｔｏｍａｔｉｏｎ  Ｃｏｎｆｅｒｅｎｃｅ、ｐａｇｅｓ  ２−８、ＩＥＥＥ、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ  Ｐｒｅｓｓ、１９８７参照）により達成することができる。順次プログラミング言語（Ｃ＋＋等）をＨＤＬとして用いる場合、特定の言語用の標準コンパイラを単純に用いることにより、ハードウェア記述をコンパイルおよびシミュレーションすることができる。用いられるプログラミング言語を、並列処理等のハードウェア関連の機能で拡張する場合、コンパイルの前に、ハードウェア記述を順次プログラムに変換することができる。例えば、Ｔａｎｇｒａｍシステムでは、ハードウェア記述を、Ｋｅｅｓ  ｖａｎ  Ｂｅｒｋｅｌの「Ｈａｎｄｓｈａｋｅ  Ｃｉｒｃｕｉｔｓ」、ｖｏｌｕｍｅ  ５  ｏｆ  Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  Ｐｒｅｓｓ、Ｃａｍｂｒｉｄｇｅ、ＵＫ、１９９３で開示されるようなＣプログラムに変換することができる。また、ＪＰ  １１２１９３９が、ＣＳＰ機能を順次言語に変換する単純なメカニズムを記載している。
【０００７】
１以上の構成要素を含むシステムでは、全ての構成要素が、その特定の能力および表現力により選択された言語で記述され得る。例えば、ハードウェア記述言語がハードウェア構成要素に用いられ、ソフトウェアプログラミング言語がソフトウェア構成要素に用いられる。よって、システム内の構成要素が数種類の言語で記述されることが非常に一般的である。添付図面の図４は、そのようなシステム記述の一例を示す。完全なシステム記述は、相互にコミュニケーションを行う複数の構成要素モデル記述を含む。前述したＢａｃｈ  Ｃ言語は、復調構成要素およびエラー訂正デコーダ構成要素の記述を提供するために、２および３で用いられる。前述したＶＨＤＬ言語は、ＲＡＭ（ランダムアクセスメモリ）構成要素および高速フーリエ変換（ＦＦＴ）構成要素を記述するために、４および５で用いられる。Ｃ言語は、テストベンチ構成要素を記述するために、６で用いられる。
【０００８】
【発明が解決しようとする課題】
このようなシステムの検証が、その設計プロセスの必須部分であるため、多量のシミュレーションデータが処理されなければならない場合があり得、検証またはシミュレーションが高速であることが必要とされる。システムが異なる成分から成る性質を有するため、このシミュレーションプロセスは、しばしば、コ・シミュレーションと呼ばれる。コ・シミュレーションの間、異なるシステム構成要素モデルが相互にコミュニケーションを行う必要があり、ＵＳ  ５３３５１９１に開示されるような公知の方法を用いることができる。高位ＨＤＬで設計されたハードウェア構成要素のコ・シミュレーションの方法の１つは、添付図面の図２に示すような高位合成ツールまたはシミュレーションエンジン８を用いて、ハードウェア記述を合成して低位ＨＤＬにし、次いで、ハードウェアシミュレーションツールを用いて、その低位記述をコ・シミュレーションするものである。しかしながら、この方法は、シミュレーションのために高位記述を用いることができるという点を利用せず、以下の欠点（ａ）〜（ｃ）を有する。
【０００９】
（ａ）  合成時間のオーバーヘッド、
（ｂ）  低位ＨＤＬを用いることによる遅いシミュレーション、
（ｃ）  合成可能な記述にのみ利用可能である。
【００１０】
現在入手可能なハードウェアシミュレータは、異質モデル、すなわちシミュレータが理解するＨＤＬ以外の手段を用いて記述されたモデル、および異なるＨＤＬで記述されたモデルのシミュレーションを可能にする。例えば、最新の標準ＶＨＤＬ（例えば、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙ、「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  ＶＨＤＬ  Ｌａｎｇｕａｇｅ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ」、Ｎｅｗ  Ｙｏｒｋ、ＵＳＡ、Ｊｕｎｅ  １９９４、ＩＥＥＥ  Ｓｔｄ  １０７６−１９９３に開示されている）は、異質エンティティの詳記を許容する。Ｓｙｎｏｐｓｙｓ  ＶＳＳシミュレータ（Ｓｙｎｏｐｓｙｓ  Ｉｎｃ．  ＶＳＳ  Ｒｅｆｅｒｅｎｃｅ  Ｍａｎｕａｌ、ＵＳＡ、１９９８に開示されている）は、Ｃ言語を用いる異質エンティティのインプリメンテーション用のＣ言語インターフェース（ＣＬＩ）（Ｓｙｎｏｐｓｙｓ  Ｉｎｃ．  ＶＳＳ  Ｉｎｔｅｒｆａｃｅｓ  Ｍａｎｕａｌ、ＵＳＡ、１９９８に開示されている）を提供する。同様に、Ｍｏｄｅｌ  Ｔｅｃｈｎｏｌｏｇｙ  ＭｏｄｅｌＳｉｍシミュレータ（Ｍｏｄｅｌ  Ｔｅｃｈｎｏｌｏｇｙ  Ｉｎｃ．  ＭｏｄｅｌＳｉｍ  ＳＥ／ＥＥ  Ｕｓｅｒ’ｓ  Ｍａｎｕａｌ、ＵＳＡ、１９９９に開示されている）は、同様の理由で、異質言語インターフェース（Ｆｏｒｅｉｇｎ  Ｌａｎｇｕａｇｅ  Ｉｎｔｅｒｆａｃｅ）（ＦＬＩ）を提供する。Ｄａｖｉｄ  Ａ．Ｂｕｒｇｏｏｎの「Ａ  ｍｉｘｅｄ−ｌａｎｇｕａｇｅ  ｓｉｍｕｌａｔｏｒ  ｆｏｒ  ｃｏｎｃｕｒｒｅｎｔ  ｅｎｇｉｎｅｅｒｉｎｇ」、Ｉｎ  Ｔｈｅ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｆｏｒ  ｔｈｅ  １９９８  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｖｅｒｉｌｏｇ  ＨＤＬ  Ｃｏｎｆｅｒｅｎｃｅ  ａｎｄ  ＶＨＤＬ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｕｓｅｒｓ  Ｆｏｒｕｍ、ＵＳ、Ｍａｒｃｈ  １９９８、ＩＥＥＥ  Ｃｏｍｐｕｔｅｒ  Ｓｏｃｉｅｔｙに記載のシミュレーションエンジンも、Ｃモデルと低位Ｖｅｒｉｌｏｇ  Ｍｏｄｅｌｓとのコ・シミュレーションを行うことができる。これらの特定の方法は、高位ハードウェアがＣ等の順次言語で記述される場合にのみ適用される。さらに、Ｃコードは、純粋にはアルゴリズムではない、特別な刺激−応答様式で書かれなければならない。
【００１１】
【課題を解決するための手段】
本発明は、デジタル回路を設計する装置であって、該デジタル回路の少なくとも１つの第１の部分の少なくとも１つの第１のモデルが、相互にコミュニケーションを行う複数の同時プロセスに対応する少なくとも１つの高位ハードウェア記述言語で表現されたものとして提供されると、該第１のモデルを、少なくとも１つの第１のプログラミング言語の少なくとも１つのソフトウェアモデルに変換するシミュレーションモデル生成部と、前記デジタル回路の少なくとも１つの第２の部分の少なくとも１つの第２のモデルが、少なくとも１つの第２のプログラミング言語で提供されるとともに、前記ソフトウェアモデルが提供されると、異質言語インターフェースにより、前記第１のプログラミング言語とコミュニケーションを行い、かつ前記第２のプログラミング言語と直接的にコミュニケーションを行って、前記ソフトウェアモデルと前記第２のモデルとのコ・シミュレーションを行って、前記同時プロセスを順次ソフトウェアプロセスに変換するシミュレーションエンジンと、前記シミュレーションエンジンによる前記コ・シミュレーションの結果が正しいかを確認する第１確認手段と、該第１確認手段による前記コ・シミュレーションの結果が正しい場合に、前記第１の部分と前記第２の部分とが合成可能であるかを確認する第２確認手段と、該第２確認手段により合成可能である場合に、前記デジタル回路の低位ハードウェア記述を生成する低位ハードウェア記述生成手段と、を備え、前記シミュレーションエンジンが、前記同時プロセスのそれぞれのために、ジャンプ命令およびループ終了条件を有するプロセスループを含むソフトウェアコードを生成し、前記同時プロセスのそれぞれのループ終了条件を解析することにより、前記同時プロセスの全てのループが非終了であり得るかどうかを判定し、ループが非終了である場合に、該非終了の前記同時プロセスにおける前記ジャンプ命令をイグジットポイントと置き換えることを特徴とする。
【００１２】
また、本発明は、前記デジタル回路の設計装置によって実施されるデジタル回路の設計方法であって、該デジタル回路の少なくとも１つの第１の部分の少なくとも１つの第１のモデルが、相互にコミュニケーションを行う複数の同時プロセスに対応する少なくとも１つの高位ハードウェア記述言語で表現されたものとして前記シミュレーションモデル生成部に提供されると、該シミュレーションモデル生成部によって、該第１のモデルを、少なくとも１つの第１のプログラミング言語の少なくとも１つのソフトウェアモデルに変換する工程と、前記デジタル回路の少なくとも１つの第２の部分の少なくとも１つの第２のモデルが、少なくとも１つの第２のプログラミング言語で前記シミュレーションエンジンに提供されるとともに、前記ソフトウェアモデルが該シミュレーションエンジンに提供されると、該シミュレーションエンジンが、異質言語インターフェースにより、前記第１のプログラミング言語とコミュニケーションを行い、かつ前記第２のプログラミング言語と直接的にコミュニケーションを行って、前記ソフトウェアモデルと前記第２のモデルとのコ・シミュレーションを行って、前記同時プロセスを順次ソフトウェアプロセスに変換する工程と、前記第１確認手段によって、前記シミュレーションエンジンによる前記コ・シミュレーションの結果が正しいかを確認する工程と、該第１確認手段による前記コ・シミュレーションの結果が正しい場合に、前記第２確認手段によって、前記第１の部分と前記第２の部分とが合成可能であるかを確認する工程と、該第２確認手段により合成可能である場合に、前記低位ハードウェア記述生成手段によって、前記デジタル回路の低位ハードウェア記述を生成する工程と、を包含し、前記シミュレーションエンジンによる前記コ・シミュレーションを行う工程が、前記同時プロセスのそれぞれのために、ジャンプ命令およびループ終了条件を有するプロセスループを含むソフトウェアコードを生成し、前記同時プロセスのそれぞれのループ終了条件を解析することにより、前記同時プロセスの全てのループが非終了であり得るかどうかを判定し、ループが非終了である場合に、該非終了の前記同時プロセスにおける前記ジャンプ命令をイグジットポイントと置き換える工程とを包含することを特徴とする。
【００１３】
前記コ・シミュレーションを行う工程が、前記高位ハードウェア記述言語の前記第１のモデルを、前記第１のプログラミング言語の前記ソフトウェアモデルにコンパイルする工程を包含してもよい。
【００１４】
前記高位ハードウェア記述言語が、通信逐次プロセスモデルに基づいていもよい。
【００１５】
前記ソフトウェアプロセスが、所定の刺激を検出する少なくとも１つの刺激ユニット、および該少なくとも１つの刺激ユニットに応じて、所定の応答を提供する少なくとも１つの応答ユニットを含んでいてもよい。
【００１６】
前記応答ユニットのうちの少なくとも１つが、前記デジタル回路の前記第１の部分の前記同時プロセスを実施するプロセス応答ユニットを含んでいてもよい。
【００１７】
前記同時プロセスが、一の共通のイベントにより引き起こされる複数の別々のプロセスを含み、前記プロセス応答ユニットが、該別々のプロセスをスケジューリングするスケジューラ、および該スケジューリングに従って、該別々のプロセスを実施するプロセスハンドラを含んでいてもよい。
【００１８】
前記スケジューラが、個々のイグジットポイントを有するアクティブ未処理プロセスのリストを作り、該リストからカレントプロセスを選び、該カレントプロセス用のエントリポイントを選択してもよい。
【００１９】
前記各イグジットポイントで、前記スケジューラが、前記リストから、さらなるカレントプロセスを選び、該さらなるカレントプロセス用のさらなるエントリポイントを選択してもよい。
【００２０】
前記イグジットポイントにおいて、前記スケジューラが、前記同時プロセスの少なくとも１つを、新たなエントリポイントを有する前記アクティブ未処理プロセスのリストに入れてもよい。
【００２１】
また、本発明は、前記デジタル回路の設計方法の各工程をコンピュータに実行させるためのプログラムである。
【００２２】
また、本発明は、前記プログラムが記録されたコンピュータ読み取り可能な格納媒体である。
【００４５】
本発明の方法では、同期ハードウェアモデルの高位順次記述を、同時処理モデルの演算に基づく高位ハードウェア記述から自動的に生成することができる。モデル記述は、実行可能コードにコンパイルすることができ、かつ他のシステム構成要素とのコ・シミュレーションを行うことができる。よって、高位ハードウェア記述と、他のシステム構成要素とのコ・シミュレーション用のシミュレーションに基づく、高位ＨＤＬシミュレーションおよびコンパイルの双方の利点が得られる。
【００４６】
本方法の使用例の１つは、システム設計および開発中に、ＣＳＰに基づく高位言語でアルゴリズムとして記述されたハードウェア回路を、他のシステム構成要素とコ・シミュレーションするものである。例えば、本方法は、Ｂａｃｈ  Ｃ言語で記述されたハードウェア回路と、他のシステム構成要素との高速コ・シミュレーションに用いることができる。添付図面の図１は、Ｂａｃｈハードウェア設計フローを示し、ここでは、ハードウェアがＢａｃｈ高位言語で記述され、低位合成可能ハードウェア記述が自動的に生成される。ハードウェア設計者が低位言語（ＶＨＤＬ等）の代わりに、高位言語を用いるため、設計プロセスは、従来の設計プロセスよりも非常に速くなり、よって、より安価でもある。本方法の使用により、ハードウェア構成要素のコ・シミュレーションを、アルゴリズムレベルで行うことが可能になり、よって、低位ハードウェア記述が用いられるコ・シミュレーションプロセスをより速くする。結果として、ハードウェア設計に費やす時間が低減される。
【００４７】
本方法の利点には以下の（ａ）〜（ｄ）が含まれる。
【００４８】
（ａ）  ハードウェア構成要素のコ・シミュレーションをアルゴリズムレベルで行うことが可能になる。よって、
（ｉ）    シミュレーションが標的アーキテクチャから独立する。
【００４９】
（ｉｉ）  シミュレーションされる細部の量が相当に少なくなるため、シミュレーションが、低位レベルでのシミュレーションよりも相当に速い。
【００５０】
（ｂ）  構成要素モデルを、アルゴリズム記述から、シミュレーションに用いられる機械の元々のコードにコンパイルすることができる。このアプローチは、非常に高速なシミュレーション速度を提供する。
【００５１】
（ｃ）  シミュレーションに用いられるハードウェア構成要素モデルの生成には、複雑な事前計算が必要とされないため、非常に効率的である。
【００５２】
（ｄ）  ハードウェア開発の初期段階、すなわち、効率的で十分に合成可能なハードウェア記述が開発される前に、ハードウェア記述と他のシステム構成要素とのコ・シミュレーションを行うことが、多くの場合において好ましい。コ・シミュレーションに用いられるハードウェア記述が、低位記述に合成される必要がないため、この設計フローの初期段階で、このコ・シミュレーション方法を用いることができる。
【００５３】
上記要因の全てが、高位ハードウェア（およびシステム）設計フローと関連付けられた下記の利点（Ａ）および（Ｂ）に寄与する。
【００５４】
（Ａ）  市場に出すまでの時間がより早い、
（Ｂ）  大きな設計空間を探す能力、およびそれによるより効率的な設計の開発。
【００５５】
【発明の実施の形態】
添付の図面を参照し、例示することにより本発明をさらに説明する。
【００５６】
本発明の方法は、高位ハードウェア設計のテキストの記述を用いることができ、かつシミュレーションエンジンとコミュニケーションを行うことができる構成要素モデルを生成することができる。これにより、シミュレーションエンジン、およびシステム構成要素モデルがシミュレーションエンジンとコミュニケーションを行うための手段を用いることができる。このような手段の一例が、ＵＳ  ５３３５１９１に記載されている。このようなコミュニケーション手段、およびシミュレーションエンジンを用いることにより、本方法は、高位ハードウェア設計と他のシステム構成要素とのコ・シミュレーションを可能にする。
【００５７】
高位ハードウェア記述言語は、同時処理（並列性）を考慮した計算モデルに基づくものと仮定しているため、純粋には順次的ではない。いくつかの実施形態では、通信逐次プロセス（ＣＳＰ）モデルを用いるが、本方法は、任意の同時処理モデルに適用され得る。ＣＳＰモデルに基づく記述は、同期チャネルを用いて、相互にコミュニケーションを行う複数の順次プロセスを伴う並列アルゴリズムを記述する。この並列性は、特別な言語構成（通常、ｐａｒまたはＰＡＲ構成）を用いて明示的に示される。同期コミュニケーションも、送信構成および受信構成により、順次プロセスで明示的に示される。順次プロセスは、命令型プログラミング言語の通常の構成（順次成分、条件命題、およびループ）を用いて構成することができる。
【００５８】
ＣＳＰモデルは、その環境とコミュニケーションを行い、かつ作用する必要があるハードウェア構成要素を記述するために用いられる。これは、チャネルを用いるか、またはなんらかのデバイスによる同期コミュニケーションにより行われる。それらのデバイスは、メモリ（ＲＡＭ、ＲＯＭ、およびレジスタ）であり、（ＣＳＰモデル内に記述される）内部デバイス、または（その環境内の）外部デバイスのいずれであってもよい。図６は、相互にコミュニケーションを行い、かつ内部および外部デバイス１８，１９にアクセスする７つのプロセス１１〜１７として構成されるＣＳＰモデルとして記述されるハードウェア構成要素１０を示す。図７は、ＣＳＰに基づく高位モデルにより特定される低位の標的ハードウェアモデル２０のインターフェースを示す。これは、同期回路であり、外部クロック、初期化、レポーティング状態、同期外部コミュニケーション、ならびに内部デバイスおよび外部デバイスに対するアクセスのためのポートを含む。
【００５９】
このコ・シミュレーション方法により自動的に作成される構成要素モデル（シミュレーションモデル）は、シミュレーションエンジンとの非同期コミュニケーション用の複数のコミュニケーション命令を含む順次アルゴリズムとして記述される。多量の入力コミュニケーションは、構成要素モデルへの刺激と見なされ、基本的に、入力データを読み出してプロセスし、そのモデルの内部状態を変更して、出力データを送信することを含むアクションを実施するように、モデルに命令をする。図８は、シミュレーションモデル２１の外部入力および外部出力を示す。
【００６０】
図１２は、初期化ユニット２４、仕上げユニット２５、いくつかの刺激ユニット２６、およびいくつかの応答ユニット２７を含む生成刺激モデルの全体構成を示す。シミュレーションモデルが受け取る入力刺激タイプごとに刺激ユニット２６が存在する。刺激ユニット２６は、対応する応答ユニット２７をアクティブ化するかどうかを決定する。以下の（ａ）〜（ｃ）は応答ユニットの例である。
【００６１】
（ａ）  そのモデルの内部状態を初期値に設定するリセット応答ユニット。対応する刺激が、リセットポートのアクティブ値である。
【００６２】
（ｂ）  内部デバイスを処理する内部デバイス応答ユニット。これらは、レジスタ、ＲＡＭ、ＲＯＭ等の表現を処理し、非同期デバイスの場合には、入力ポートの値により刺激され、同期デバイスの場合には、クロックエッジにより刺激される。
【００６３】
（ｃ）  高位ハードウェア記述により記述される実際のビヘイビアを実施し、かつ高位ＣＳＰモデルのプロセスを表現するプロセス応答ユニット。高位モデルが同期回路を表現するため、プロセス応答ユニットは、クロックエッジにより刺激される。高位モデルにより記述された並列性のため、プロセス応答ユニットは順次プロセスを表現するタスクをスケジューリングするメカニズムを含む。
【００６４】
ハードウェア構成要素のテキストの記述から、刺激モデルを生成する方法は、以下のステップ（１）および（２）からなる。
【００６５】
（１）  シミュレーションモデル生成部を用いてシミュレーションモデル記述を生成する工程、
（２）  標準コンパイラを用いて刺激モデルをコンパイルする工程。
【００６６】
次いで、コ・シミュレーション中に、コンパイルされたシミュレーションモデルを、シミュレーションエンジンにより用いることができる。
【００６７】
シミュレーションモデル生成部の構成は、コンパイラの構成と同様であり、構文解析ユニット、コードプロセスおよび生成ユニット、ならびにコードプリンティングユニットからなる。コードプロセスおよび生成ユニットは、構文解析された高位モデルの内部表現を用い、シミュレーションモデルの内部表現を生成する。これは、以下のユニット（１）〜（３）を含む。
【００６８】
（１）  特定の刺激にデバイスおよびプロセスを適用する刺激セレクタ、
（２）  個々のリセット、内部デバイス、およびプロセス応答ユニットを、所与のＣＳＰハードウェアモデルから生成する応答ユニット生成部、
（３）  個々の応答ユニットから刺激モデル記述を作成する総体的なコード生成部。
【００６９】
プロセス応答生成ユニットは、シミュレーションモデル生成部の最も重要な構成要素であり、以下の（ａ）〜（ｅ）の役割を果たす。
【００７０】
（ａ）  ＣＳＰモデルにより記述された並列アルゴリズムの順次化、
（ｂ）  同期チャネルコミュニケーション用のコードの生成、
（ｃ）  外部デバイス用のアクセスインターフェースのコードの生成、
（ｄ）  ＣＳＰモデルのデータに局所性を持たせる。例えば、このユニットは、同じモデルの全てのインスタンスがあるデータを共有することができるか否かを判定する。
【００７１】
（ｅ）  ＣＳＰモデル内のプロセスにより記述された並列性を管理するスケジューラを生成する。
【００７２】
本方法は、複数のシステム構成要素がＣＳＰに基づく高位ハードウェア記述言語で記述されているシステム記述のシミュレーションで用いることができる。そのようなシステムの設計フローを図１に示す。ここでは、システム構成要素のコ・シミュレーションが、システム設計のビヘイビアを検証するための重要な手順である。
【００７３】
高位ハードウェア記述が、ステップ３０でインプリメントされ、Ｂａｃｈソースコードとなる。他のシステム構成要素記述が、ステップ３１で展開または取得され、Ｂａｃｈソースコードとともに、ステップ３２で、高位ハードウェア記述と他のシステム構成要素とをコ・シミュレーションするために用いられる。ステップ３３で、コ・シミュレーションの結果が確認され、それが正しくない場合には、高位ハードウェア記述を変更するために、ステップ３０が繰り返される。このコ・シミュレーションの結果が正しい場合、テスト３４で、結果的に得られた回路記述の合成が可能かどうかを判定する。合成が不可能な場合、制御はステップ３０に戻る。回路記述が合成可能である場合、ステップ３５で、低位ハードウェア記述を生成し、最終的に、集積回路またはシリコンチップ３６を製造する合成を実施する。
【００７４】
図３は、システム記述４０の一例を示す。システム記述は、異なるレベルでの抽象化で記述された複数の構成要素４１〜４４を含み、構成要素モデル４１および４２のいくつかは高位言語で記述されている。
シミュレーションメカニズムは、構成要素モデル記述からシミュレーションモデルを生成し、シミュレーションエンジンを用いて、それらのシミュレーションモデルをコ・シミュレーションする。図５に示すとおり、シミュレーションエンジン４５は、シミュレーションモデル４６〜４９（それぞれ、図３の記述４１〜４４と対応する）とコミュニケーションを行う。
【００７５】
高位ハードウェアモデルは、ＣＳＰモデルの演算に基づく言語で記述される。図６は、それらのモデルの各々が同期チャネルを用いて相互にコミュニケーションを行う複数の順次プロセス１１〜１６を含むことを示す。プロセス１１〜１６は、同期チャネルを用いるか、またはデバイス１８および１９にアクセスすることにより、外部リソースとコミュニケーションを行うことができる。本実施形態では、それらのデバイスはレジスタ、ＲＡＭ、およびＲＯＭであるが、主に、本発明の方法は、任意のＩ／Ｏデバイス（例えば、ディスプレイ、センサ等）に適用される。デバイス（１８、１９）は、（モデルの）内部デバイス、または（環境内の）外部デバイスであり得る。このモデルでは、その複数の内部デバイスへのアクセスを環境に設けることもできる。
【００７６】
高位ＣＳＰモデルは、ハードウェア構成要素を記述する。標的ハードウェア構成要素モデル２０の一例を図７に示す。このモデルは、外部同期コミュニケーションチャネルに対応するポート、ならびに内部デバイスおよび外部デバイスへのアクセスを有する。標的モデル２０は、同期ハードウェア構成要素を表現するため、外部クロック用のポートを含む。回路の初期化、および内部状態のレポート用に他のポートが含まれる。本実施形態では、回路を初期状態にリセットするリセットポート、および回路が最終状態であるかどうかをレポートする仕上げポートの例を用いる。コ・シミュレーションに用いられるシミュレーションモデルは、（合成および製造に用いられる）標的ハードウェアモデルと同じビヘイビアを有するべきである。
【００７７】
図９に示すとおり、シミュレーションモデルを生成するメカニズムは、シミュレーションモデル生成ユニット５０およびコンパイラ５１を含む。モデル生成ユニット５０は、高位モデル記述を受け取り、シミュレーションモデル記述を返す。自動的に生成されたシミュレーションモデルは、Ｃ言語等の標準的な命令言語で記述される。次いで、シミュレーションモデルは、生成モデルを記述するために用いられる言語用の標準的なコンパイラ５１を用いてコンパイルされる。図４に示す特定の例に関する本方法の例証を図１０に示す。
【００７８】
コ・シミュレーション方法は、シミュレーションエンジン４５、およびシステム構成要素モデル２〜６がシミュレーションエンジン４５とコミュニケーションを行うための手段を必要とする。このような手段の一例が、ＵＳ  ５３３５１９１に記載されており、その内容を、本明細書中において参考として援用する。図８に示すとおり、このようなコミュニケーション手段を用いる場合、シミュレーションモデルが、複数の刺激によりアクティブ化され、複数の入力を受け取り、複数の出力を返す。
【００７９】
他のあらゆるコンピュータコードと同様に、コンパイルされたシミュレーションモデルのコード５２は、メモリ内に格納されたデータを用いる。図１１は、シミュレーションモデルが３種類のデータ記憶装置（ａ）〜（ｃ）を用いることを示す。
【００８０】
（ａ）  一時記憶装置５３（ここに格納されたデータは素早くアクセスすることができる。）
（ｂ）  モデル−ローカル記憶装置５４（ここに格納されたデータも同様に高速アクセスされるが、同じシミュレーションモデルの全てのインスタンスにより用いられる。）
（ｃ）  インスタンス−ローカル記憶装置５５（この記憶装置は、シミュレーションモデルインスタンスごとに個別に割り当てられる。この記憶装置へのアクセスは、一時記憶装置５３およびモデル−ローカル記憶装置５４へのアクセスよりも、計算的に高価である。）
実行モードと呼ばれるインスタンス−ローカルデータオブジェクトは、全てのシミュレーションモデルにより用いられる。このデータは、以下の値（１）〜（３）のうちの１つを有する。
【００８１】
（１）  初期化されていない（シミュレーションモデルが、まだリセット信号により初期化されていない。）
（２）  実行中（シミュレーションモデルが初期化されたが、最終状態に達していない）
（３）  完了（シミュレーションモデルが最終状態に達している。）
シミュレーションモデルが作成されるときには、実行モードの初期値は初期化されていない。このことを初期化されていないフラグが設定されると呼ぶ。同様に、実行モードの値により、実行中フラグまたは完了フラグ設定されると呼ぶ。
【００８２】
図１２は、生成シミュレーションモデルの構成を示す。このモデルは、初期化ユニット２４、仕上げユニット２５、いくつかの刺激ユニット２６、およびいくつかの応答ユニット２７を含む。初期化ユニット２４および仕上げユニット２５は、複数のブックキーピングタスクを実施する。例えば、初期化ユニット２４は、シミュレーションモデルがアクティブ化されたときに、インスタンス−ローカル記憶装置から読出しを行う役割を果たす。仕上げユニット２５は、後に検索を行うことができるように、インスタンス−ローカル記憶装置に記録する役割を果たす。シミュレーションモデルは、そのシミュレーションモデルが受け取ることができる異なる種類の刺激ごとに刺激ユニット２６を含む。刺激ユニット２６ごとに応答ユニット２７が存在する。刺激ユニット２６が刺激を検出すると、それに関連付けられた応答ユニット２７をアクティブ化する。この異なる種類の応答ユニット２７は以下の（ａ）〜（ｃ）を含む。
【００８３】
（ａ）  モデルの内部状態を初期値に設定するリセット応答ユニット、
（ｂ）  内部デバイスを処理する内部デバイス応答ユニット、
（ｃ）  高位ハードウェア記述により記述された実際のビヘイビアを実施し、高位ＣＳＰモデルのプロセスを表現するプロセス応答ユニット。
【００８４】
図１３は、リセット応答ユニットを示す。このユニットがアクティブ化されると、特定の初期−ローカルデータの値を（高位モデルで記述される）初期値に設定する（ステップ５７）。また、出力ポート信号を高位記述により企図される初期値にも設定する（ステップ５８）。例えば、全ての外部デバイスインターフェースおよび外部コミュニケーションポートを設定するため、回路は、外部デバイスにアクセスしておらず、かつ外部リソースとのコミュニケーションも試みない。次いで、実行中フラグ５９を設定し、そのモデルが初期化されたことを示す。リセット応答ユニットの対応する刺激ユニットが、リセットポートがアクティブな値を有するかどうかを確認する。
【００８５】
図１４に示すとおり、内部デバイス応答ユニットは、アクティブ化されたときには常に、デバイスの適切なビヘイビアをモデル化するデバイスハンドラー６０を含む。対応する刺激ユニットは、非同期デバイスの場合には、入力ポートの値が変更されたかどうかを確認し、同期デバイスの場合には、適切なクロックエッジを確認する。
【００８６】
プロセス応答ユニットは、同じクロックにより刺激される全てのモデルプロセスを処理する。単一クロックの標的モデルの場合、そのモデルの全てのプロセスが、同じプロセス応答ユニットにより処理される。図１５は、実行中フラグを確認するメカニズム６１、スケジューラ６２、およびプロセスハンドラユニット６３を含むプロセス応答ユニットの構成を示す。スケジューラ６２は、高位ハードウェアモデル内で記述された並列性を管理する。プロセスハンドラユニット６３は、関連付けられたプロセスのビヘイビアを表現する。プロセスハンドラコードへの複数の位置は、エントリポイントと呼ばれ、これらは、スケジューラが実行を転送することができる位置である。プロセスハンドラコード内の別の複数の位置は、イグジットポイントと呼ばれ、これらの位置から、実行をスケジューラへ返送することができる。スケジューラ６２は、プロセスハンドラユニット６３内の適切なエントリポイントを決定する。次いで、プロセスハンドラユニット６３が、イグジットポイントに達するまで実行され、この場合、実行はスケジューラ６２へと戻る。プロセス応答ユニットに対応する刺激ユニットは、適切なクロックエッジを確認する。
【００８７】
スケジューラ６２は、図１６に示すようなプロセスリストを用いることにより、プロセスハンドラユニット６３内のエントリポイントを決定する。プロセスリストは、インスタンス−ローカル記憶装置内に格納され、プロセスレコードのリストを含む。各プロセスレコードは、以下の情報を含む：プロセス識別子、状態情報、およびエントリポイント位置。１つのプロセスリスト内の２つのプロセスレコードが同じ識別子を有し得ることはない。状態情報は、プロセスが実行中であるか否か、およびスケジューラ６２によって既に処理されているか否かを示す。よって、プロセス状態は、アクティブ（実行中とも呼ばれる）、または非アクティブ（休止中とも呼ばれる）のいずれかである。スケジューラ６２は、全てのアクティブプロセスが少なくとも１度処理され、かつ各スケジューリングステージが一定時間の後に終了することを確実にする。本実施形態では、スケジューラ６２は、各アクティブプロセスをちょうど１度処理する。異なるアプローチは、スケジューリングメカニズムを一定回数、またはプロセスリストが空になるまで繰り返すことである。
【００８８】
各アクティブプロセスをちょうど１度処理するメカニズムは以下のとおりである。アクティブプロセスは、処理しても処理しなくてもいずれでもよい。アクティブな未処理プロセスのうちの１つは、カレントプロセスと呼ばれる。
【００８９】
スケジューラは、以下の機能（１）〜（１０）を実行することができるべきである。
【００９０】
（１）  全てのアクティブプロセスを未処理に設定する、
（２）  プロセスリスト内にアクティブ未処理プロセスがあるかどうかを確認する、
（３）  アクティブな未処理プロセスをカレントプロセスとして選択する、
（４）  所与のプロセスのエントリポイントを探す、
（５）  カレントプロセスを処理済みと設定し、かつそのエントリポイントを所与の位置に設定する、
（６）  カレントプロセスを非アクティブ化し、かつそのエントリポイントを所与の位置に設定する、
（７）  プロセスリストからカレントプロセスを削除する、
（８）  特定の非アクティブプロセスをアクティブ化する、
（９）  新たなアクティブプロセスを作成し、かつカレントプロセスとして選択する、
（１０）  新たな未処理プロセスを作成し、かつそのエントリポイントを所与の位置に設定する。
【００９１】
図１７は、プロセスハンドラユニット６３内のエントリポイントを選択するために用いられるスケジューリングメカニズムを示す。スケジューラ６２は、ステップ６４で、シミュレーションモデルへの入力値により、複数の休止中プロセスをアクティブ化することにより開始される。例えば、特定の入力ポート値を待っているために、プロセスが非アクティブである場合、スケジューリングメカニズムが、この入力ポート値を確認し、かつ休止中プロセスをアクティブ化すべきか否かを決定しようと試みる。アクティブプロセスが存在する場合には、ステップ６５で、未処理と印される。スケジューラ６２は、ステップ６６で、プロセスリストが未処理のアクティブプロセスを含んでいるかどうかを確認し、ステップ６７で、そのうちの１つをカレントプロセスとして選択する。次いで、ステップ６８で、カレントプロセスレコード内に与えられたエントリポイントが用いられる。プロセス応答ユニットの実行が、イグジットポイントに達するまで実行し続けるプロセス処理ユニット内のこのエントリポイントに転送される。プロセスハンドリングユニット６３は、スケジューリング機能のいくつかを用いることができ、カレントプロセスは、通常、イグジットポイントに達する直前に、未処理、または非アクティブ化に設定されるか、あるいはプロセスリストからの削除されるかのいずれかである。この時点で、実行は、スケジューラ６２に戻り、新たなカレントプロセスおよびエントリポイントが選択される。これは、未処理のアクティブプロセスがプロセスリストからなくなるまで繰り返される。
【００９２】
これにより、高位ハードウェアモデルから自動的に生成されるシミュレーションモデルの記述が完了する。以下に、シミュレーションモデル記述を生成するために用いられる、図９に示されるシミュレータモデル生成部５０を説明する。次いで、コンパイラ５１がそのモデルをコンパイルするために用いられる。
【００９３】
図１８は、シミュレーションモデル生成部が、標準的なコンパイラ技術（例えば、Ａｌｆｒｅｄ  Ｖ．Ａｈｏ、Ｒａｖｉ  ＳｅｔｈｉおよびＪｅｆｆｅｒｙ  Ｄ．Ｕｌｌｍａｎの「Ｃｏｍｐｉｌｅｒｓ：Ｐｒｉｎｃｉｐｌｅｓ，  Ｔｅｃｈｎｉｑｕｅｓ，  ａｎｄ  Ｔｏｏｌｓ」、Ａｄｄｉｓｏｎ  Ｗｅｓｌｅｙ  Ｐｕｂｌｉｓｈｉｎｇ  Ｃｏｍｐａｎｙ、Ｏｃｔｏｂｅｒ  １９８５を参照）で通常用いられる主要構成要素（ａ）〜（ｃ）を含むことを示す。
【００９４】
（ａ）  高位ハードウェアモデルのテキストの記述を受け取り、かつその内部表現を生成する字句解析および構文解析部７０、
（ｂ）  高位ハードウェアモデルの内部記述を受け取り、かつシミュレーションモデルの内部表現を生成するハードウェアモデルコードプロセスおよび生成ユニット７１、
（ｃ）  シミュレーションモデルのテキストの記述を内部表現から生成するコードプリンタ７２。
【００９５】
シミュレーションモデル生成部は、字句解析および構文解析部７０用、およびコードプリンタ７２用の標準技術を用いる。図１９に詳細に示すハードウェアモデルコード処理および生成ユニットは、ポートセレクタおよびインターフェース生成部７３、全ての異なるタイプの刺激／応答ユニット用の刺激ユニット生成部７４および応答ユニット生成部７５、ならびに総合シミュレータモデルコードビルダ７６を含む。
【００９６】
ポートセレクタおよびインターフェース生成部７３は、高位モデルのインターフェースからシミュレーションモデルのインターフェースを生成する。高位モデルのインターフェースは、外部コミュニケーション、内部デバイスに与えられるアクセス、外部デバイスに必要とされるアクセスのために用いられるチャネルを記述する。シミュレーションモデルのインターフェースは、図７に示すような合成に用いられる標的ハードウェアモデル２０のインターフェースと同じであり、かつそのモデルの入力ポートおよび出力ポートを含む。インターフェース生成部により生成されるポートは以下のとおりである。
【００９７】
（１）  初期／状態ポート：リセット入力ポート信号が、シミュレーションモデルをリセットするために用いられ、シミュレーションモデルがその最終段階に達したときに、終了出力ポートがシミュレーションモデルによりアクティブ化される。
【００９８】
（２）  外部チャネルコミュニケーションポート：これらは、他のシステム構成要素との同期コミュニケーションに用いられ、１つのデータポートを有する二方向ハンドシェークコミュニケーションメカニズム、ならびに２つの二方向ハンドシェークポート：ｓｅｎｄｅｒ＿ｒｅａｄｙポート、およびｒｅｃｅｉｖｅｒ＿ｒｅａｄｙポートを含む。ｓｅｎｄｅｒ＿ｒｅａｄｙポート信号、およびｒｅｃｅｉｖｅｒ＿ｒｅａｄｙポート信号の双方がアクティブである場合、コミュニケーションが同期する。この時点で、データが、データポートを介して、送信側から受信側へと転送される。
【００９９】
（３）  内部デバイスアクセスポート：これらのポートは、デバイスブロックの通常のインターフェースに対応する。例えば、ＳＲＡＭデバイスは、通常のアドレスおよびデータバスポート、書き込み許可ポート、ならびに読出し許可ポートを有し、書き込み認識ポート、および読出し認識ポートも有し得る。同期ＲＡＭの場合にはクロックポートを有する。
【０１００】
（４）  外部デバイスアクセスポート：これらのポートも、デバイスブロックの通常のインターフェースに対応する。
【０１０１】
総合シミュレーションモデルコードビルダ７６は、刺激ユニット生成部７４および応答ユニット生成部７５により生成される個々の構成要素からシミュレーションモデルを生成する。図１２は、シミュレーションモデルが、刺激／応答ユニット２６および２７、初期化ユニット２４、ならびに仕上げユニット２５からどのようにして構築されるかを示す。初期化ユニット２４および仕上げユニット２５は、シミュレーションエンジン、およびシミュレーションエンジンと構成要素モデル間で用いられるコミュニケーションメカニズムに依存する通常のブックキーピングユニットである。
【０１０２】
リセット応答ユニット生成部は、図１３に示す構成を有するリセット応答ユニットを構築する。インスタンスローカルデータを初期化するブロックは、ハードウェアモデルの内部表現からイニシャライザを受け取り、次いで、それらを初期化するために必要とされる命令を生成することにより生成される。信号値を初期化するブロックは、インターフェース生成部により選択された出力ポートを用い、それらを初期化するための命令を生成することにより生成される。次いで、実行中フラグを設定するための適切な命令が生成される。リセット刺激ユニット生成部は、単純に、リセット入力ポートの値を確認するユニットを構築する。
【０１０３】
内部デバイス応答生成部は、環境がアクセスすることができる全ての内部デバイスをリストにし、デバイスの標準ビヘイビアを単純にモデル化する内部デバイスの各々用の応答ユニットを作成する。内部デバイスは、適切なデータ構成により、シミュレーションモデル内で表現される。ＲＡＭおよびＲＯＭはアレイにより表現され、レジスタはインスタンスローカル変数により表現される。デバイス応答ユニットは、適切なビヘイビアをモデル化する。ＲＡＭまたはＲＯＭへの読出しアクセスは、アレイインデクシングによりモデル化される。ＲＡＭへの書き込みアクセスは、アレイエレメント割当てによりモデル化される。レジスタへの読出しアクセスは、変数アクセスによりモデル化される。レジスタへの書き込みアクセスは、変数割当てによりモデル化される。内部デバイス刺激ユニット生成部は、同期デバイスの場合には、適切なクロック信号値を確認し、非同期デバイスの場合には、入力信号値の変化を確認する適切なユニットを作成する。
【０１０４】
モデルコードプロセッサおよび生成部の主要部は、図２０に示すプロセス応答ユニット生成部であり、以下の（ａ）〜（ｅ）を含む。
【０１０５】
（ａ）  高位モデル内に設けられる並列アルゴリズムの順次版を作成する役割を果たす順次コード生成部８０、
（ｂ）  プロセスと外部環境間のコミュニケーションの役割を果たす命令を生成する役割を果たすチャネルコミュニケーションコード生成部８１、
（ｃ）  外部デバイスに正しくアクセスするための命令を生成する役割を果たす外部デバイスアクセスコード生成部８２、
（ｄ）  高位モデル内のデータを表現するシミュレーションモデル内のデータに適切な局所性を割り当てる役割を果たすデータ局所性割当部８３、
（ｅ）  スケジューリング機能を生成するスケジューラ生成部８４。
【０１０６】
順次コード生成部８０は、高位モデルの内部表現を解析することにより開始され、図１５に示すプロセスハンドラユニットの順次コードの内部記述を構築する。コミュニケーション命令が出されると、チャネルコミュニケーションコード生成部８１は、コミュニケーションをモデル化するための適切な命令を構築する。同様に、外部デバイスアクセス命令が出されると、外部デバイスアクセスコード生成部８２は、デバイスアクセスを実施するための適切な命令を生成する。次いで、各データアイテムに適切な局所性を与えるために、プロセスハンドラユニットの内部表現がデータ局所性アサイナ８３により解析される。最後に、スケジューラ生成部８４が、プロセスハンドラユニット６３の内部表現を用い、スケジューラ６２を作成することによりプロセス応答ユニットを生成する。
【０１０７】
順次コード生成部８０は、高位モデルの構成を解析することにより必要とされる順次コードを構築する。高位モデルは、並列アルゴリズムに基づくため、並列成分、ならびに順次成分およびループ等の順次構成による順次命令から構成される。コミュニケーションおよび外部デバイスアクセスを除いては、高位モデル内の個々の（微細な）順次命令を、公知の方法を用いてシミュレーションモデル内で順次命令を生成するために用いることができる。これら微細な命令の例としては、演算式および割当が含まれる。この方法を用いたとして、次に、高位モデルの構成が、どのようにして必要とされる順次コードを構築するために用いられるかを示す。以下の：
（１）  順次成分、
（２）  並列成分、および
（３）  ループ
により構成されるコードが、プロセスハンドラユニット内で順次コードを生成するために、どのようにして扱われるかを示す。
【０１０８】
順次成分は、図２１に示すとおり、非常に単純に扱われる。プロセスが、順次的に組み合わされたいくつかのプロセス：Ｈ１、Ｈ２、．．．、Ｈｎからなる場合、必要とされる順次コードは、一般に以下により生成される。
【０１０９】
（ａ）  プロセスＨ１、Ｈ２、．．．、Ｈｎごとに、順次コードＳ１、Ｓ２、．．．、Ｓｎを生成する、
（ｂ）  Ｓ１、Ｓ２、．．．、Ｓｎを順次的に正しい順番で組み合わせることにより、必要とされる順次コードを構築する。
【０１１０】
並列成分が、さらに複雑な方式で取り扱われる。図２２は、並列する複数のプロセス：Ｈ１、Ｈ２、．．．、Ｈｎからなるプロセスを示す。説明を容易にするため、このプロセスが、順次的にＨｂとＨａ間で組み合わされていると仮定する。図２２は、順次コードＳ１、Ｓ２、．．．、Ｓｎのブロック、および他の命令から生成された、結果の順次コードを示している。ブロックＳ１、Ｓ２、．．．、Ｓｎは、高位レベルプロセスＨ１、Ｈ２、．．．、Ｈｎから生成された順次コードブロックである。同様に、ＳｂおよびＳａは、プロセスＨｂおよびＨａから生成されている。その生成された順次コードに関して、以下の点に留意されたい。
【０１１１】
（１）  Ｓｎを除くブロックＳ１、Ｓ２、．．．、Ｓｎの各々の後には、「終了状態フラグの設定」により始まるブロックへのジャンプ命令が続く。ブロックＳｎは、そのようなジャンプ命令を必要としない。
【０１１２】
（２）  順次ブロックＳ１、Ｓ２、．．．、Ｓｎごとの新たなプロセスが作成される。ここでは、これらもＳ１、Ｓ２、．．．、Ｓｎと呼ぶ。同様に、プロセス名ＳｂおよびＳａが用いられる。
【０１１３】
（３）  ブロックＳ２、．．．、Ｓｎの各々には、エントリポイントのラベルが付けられる。生成された順次コードは、１つのイグジットポイントを含む。
【０１１４】
（４）  ブロックＳ１、Ｓ２、．．．、Ｓｎは別として、順次コードはまた、複数のスケジューラ機能の呼び出し、および以下の３種類の命令を含む。
【０１１５】
（ｉ）      複数のプロセスに対する非終了状態フラグの設定、
（ｉｉ）    複数のプロセスにおけるカレントプロセスに対する終了状態フラグの設定、
（ｉｉｉ）  所与の数のプロセス内の全てのプロセスが終了状態フラグを有するかの確認。
【０１１６】
これらの命令は、Ｓ１、Ｓ２、．．．、Ｓｎ内の全てのコードが実行された後のみに、Ｓｂ内のコードの実行を開始するために必要とされる同期メカニズムのために用いられる。これらの命令を以下に説明する。
【０１１７】
並列に組み合わされた高位プロセスのリストを表わすプロセスＳ１、Ｓ２、．．．、Ｓｎの各リストに対して、終了状態フラグと呼ばれるインスタンスローカルデータ構成が生成される。このデータ構造は、全てのプロセスがちょうどアクティブ化されたことを示すため、それら（カレントプロセス）のうちの１つがちょうど非アクティブ化されたことを示すため、およびそれらの全てが非アクティブ化されたかどうかを確認するために用いられる。これらの命令をインプリメントするための簡単で安価な方法がいくつか存在する。一例として、データ構造に整数ｉを用いて、以下の工程が挙げられる。
【０１１８】
（ａ）  Ｓ１、．．．、Ｓｎに対する非終了状態フラグの設定が、ｉの値をｎに設定することによりインプリメントされる、
（ｂ）  Ｓ１、．．．、Ｓｎ内のカレントに対する終了状態フラグの設定が、Ｉの値をデクリメントすることによりインプリメントされる、
（ｃ）  Ｓ１、．．．、Ｓｎの全てが終了したかどうかの確認が、ｉが０であるかどうか確認することによりインプリメントされる。
【０１１９】
一般に、ループは、そのループの終了状態を確認するための式、およびループ本体からなる。順次コード生成部は以下のように機能する。
【０１２０】
（１）  終了状態（Ｓ状態と呼ぶ）用の順次コードを同じ終了状態（Ｈ状態と呼ぶ）用の高位コードから生成する。また、ループボディ（Ｓボディ）用の順次コードを、そのボディ（Ｈボディ）用の高位コードからも生成する。
【０１２１】
（２）  ループが、非終了状態であり得るかどうか、または完全に終了しているかどうかを確認するためにループを解析する。ループが完全に終了しているかどうかを確認する方法は以下の工程を含む。
【０１２２】
（ａ）  ループが、ループ用の標準を表わすかどうかを確認する工程（すなわち、カウンタが初期値に設定され、終了状態が、カウンタが最大／最小値に達したかどうかを確認し、カウンタが、ループボディの実行ごとに、単調に増加／減少される）、
（ｂ）  Ｓボディの実行ごとにイグジットポイントに達するかどうかを確認する工程。
【０１２３】
（３）  ループが完全に終了している場合、同様のループがＨ状態をＳ状態と置きかえ、かつＨボディをＳボディと置き換えることにより作成される。図２４は、終了状態がループの実行前に確認されるループの場合を示す。
【０１２４】
（４）  ループが終了し得ない場合、ループの開始部がエントリポイントで印され、ループを繰り返すために用いられるジャンプ命令が、イグジットポイント、およびカレントプロセスを処理済みとして設定する命令により置き換えられる。この一例を図２５に示す。
【０１２５】
シミュレーションモデルの内部表現を生成した後、順次コード生成部８０は、完了出力信号をアクティブに設定し、完了フラグをモデルのコードの最後に設定する命令を加える。
【０１２６】
チャネルコミュニケーションコード生成部８１は、プロセス間コミュニケーション構成をモデル化するための命令を生成する。ＣＳＰに基づく並列アルゴリズムを順次化するために用いられる標準的な方法を、２つの内部プロセス間のコミュニケーションをモデル化するために用いることができる。従って、内部プロセスと外部環境間のコミュニケーションをモデル化するために用いられる方法のみを記載することにする。外部コミュニケーションチャネル用のインターフェースが、ｒｅｃｅｉｖｅｒ＿ｒｅａｄｙ信号、ｓｅｎｄｅｒ＿ｒｅａｄｙ信号、およびデータ信号を含むと仮定すると、ｒｅｃｅｉｖｅｒ＿ｒｅａｄｙ信号、およびｓｅｎｄｅｒ＿ｒｅａｄｙ信号の双方がアクティブであるときに、データが転送される。
【０１２７】
高位モデル内の各外部チャネルｃごとに、インスタンスローカル変数ｃプロセスが生成される。この変数は、０値とともに、シミュレーションモデル内のプロセスごとに、プロセス識別子を含むことができる。この０値は、ｃプロセス変数の初期値でもある。この０値は、データがチャネルｃを介して転送されることを待つプロセスがない状態を表わすために用いられる。プロセスｐ用の識別子に対応する値が、データがチャネルｃを介して転送されることをプロセスｐが待つ状態を表わすために用いられる。
【０１２８】
チャネルコミュニケーションコード生成部８１は、コミュニケーション命令ごとに２ブロックのコードを生成する。一方のブロックが、プロセスハンドラユニット６３に挿入され、高位モデル内のコミュニケーション命令と置き換わる。他方のブロックは、休止中プロセスを図１７に示すようにアクティブ化するスケジューリングユニット６２内のブロックに付加される。
【０１２９】
２つのコミュニケーション命令（外部チャネルを介する値の送信、外部チャネルを介する値の受信）について考察する。
【０１３０】
外部チャネルｃを介して値を送信するためのコミュニケーション命令は、図２６に示すコードにより置き換えられる。このコードは、データチャネルを介してその値を転送し、ｓｅｎｄｅｒ＿ｒｅａｄｙ信号をハイに設定し、ｃプロセス変数をカレントプロセスに設定し、カレントプロセスを非アクティブ化して終了する。データが受け取られた後にプロセスを再度アクティブ化するコードを図２７に示す。このコードは、スケジューリングユニットのアクティブ化休止中プロセスブロック内に挿入される。図２７に示すコードは、データがチャネルｃを介して転送されることをプロセスが待っているかどうか、およびｒｅｃｅｉｖｅｒ＿ｒｅａｄｙ信号がアクティブであるかどうかを確認し、ｃプロセス内での待機プロセスがアクティブ化されている場合には、ｃプロセス変数を０値に設定し直し、ｓｅｎｄｅｒ＿ｒｅａｄｙ信号を非アクティブに設定し直す。
【０１３１】
外部チャネルｃを介して値を受信するためのコミュニケーション命令は、図２８に示すコードにより置き換えられる。転送された値が、１値により与えられた記憶装置の位置に格納されると仮定する。生成されたコードは、ｒｅｃｅｉｖｅｒ＿ｒｅａｄｙ信号をハイに設定し、ｃプロセス変数をカレントプロセスに設定し、カレントプロセスを非アクティブ化して終了する。プロセスが再度アクティブ化されると、データ信号からその値を受信し、１値内に格納する。データが受け取られた後にプロセスを再度アクティブ化するコードを図２９に示す。このコードは、スケジューリングユニットのアクティブ化休止中プロセスブロック内に挿入される。図２９に示すコードは、データがチャネルｃを介して転送されることをプロセスが待っているかどうか、およびｓｅｎｄｅｒ＿ｒｅａｄｙ信号がアクティブであるかどうかを確認し、ｃプロセス内での待機プロセスがアクティブ化されている場合には、ｃプロセス変数を０値に設定し直し、ｒｅｃｅｉｖｅｒ＿ｒｅａｄｙ信号を非アクティブに設定し直す。
【０１３２】
外部デバイスアクセスコード生成部８２は、外部デバイスアクセスを処理するための同様のブロックを構築する。これらのブロックに関しては、ここでは詳細には記載しない。基本的に、インスタンスローカル変数は、プロセスがデバイスアクセスの効果を待っているか否かを確認するために用いられる。外部デバイスアクセスコード生成部８２は、高位モデル内のデバイスアクセス命令を、プロセスハンドラユニット６３内のコードブロックと置き換える。コードブロックは、デバイスアクセスを実施するように適切な信号を設定し、次いで、プロセスの値をカレントプロセスに設定し、カレントプロセスを非アクティブ化して終了する。このプロセスが再度アクティブ化されると、生成されたコードが、デバイスアクセスの効果がある場合には、それを適切に用いる。また、外部デバイスアクセスコード生成部８２が、デバイスアクセスの効果があったかどうかを確認するためのコードブロックを生成し、次いで、この効果を待つプロセスを再度アクティブ化する。このコードブロックは、スケジューリングユニットのアクティブ休止中プロセスブロックに付加される。
【０１３３】
局所性アサイナ８３は、高位モデル表現内のデータを表わすシミュレーションモデル表現内のデータに以下の３つの局所性（ｉ）〜（ｉｉｉ）のうちの１つを割り当てる。
【０１３４】
（ｉ）      一時、
（ｉｉ）    モデルローカル、
（ｉｉｉ）  インスタンスローカル。
【０１３５】
局所性アサイナ８３は、全ての一定データ（例えば、ＲＯＭデバイスの値を表わすデータ）にモデルローカル局所性を割り当てる。図３０に示すとおり、インスタンスローカル局所性が、エントリポイントの前に書き込まれ、エントリポイント後に読み出されたデータに与えられる。次いで、残りの部分が、ローカル高位モデルデータを表わす場合には、一時局所性が与えられ、また、残りの部分がグローバル高位モデルデータを表わす場合にはモデルローカル局所性が与えられる。局所性アサイナ８３により用いられるこの方法は、インスタンスローカルデータへのアクセスが最も費用がかかるために、そのデータ量を低減する。
【０１３６】
スケジューラ生成部８４は、以下の２つのアクションを実施する。
【０１３７】
（１）  スケジューリング機能用のコードを生成する。当業者が、これらの機能用の効果的なインプリメンテーションを設計することが可能である。
【０１３８】
（２）  モデルコードプロセッサおよび生成部の他の成分により生成されるプロセスハンドラユニット６３、ならびにチャネルコミュニケーションコード生成部８１および外部デバイスアクセスコード生成部８２により生成される休止中プロセスをアクティブ化するためのブロックを用い、次いで、図１７に示すスケジューリングユニット６２を作成する。
【０１３９】
【発明の効果】
本発明によれば、シミュレーションエンジンを用いてデジタル回路のコ・シミュレーションを行う方法が提供される。上記デジタル回路が、異質言語インターフェースにより、１つ以上の第１のプログラミング言語とコミュニケーションを行い、かつ１つ以上の第２のプログラミング言語と直接的にコミュニケーションを行う方法を提供する。少なくとも１つの第１のモデル、またはデジタル回路の少なくとも１つの第１の部分が、相互にコミュニケーションを行う同時プロセスを支持する少なくとも１つの高位ハードウェア記述言語で提供される。少なくとも１つの第１のモデルは、少なくとも１つの第１の言語の少なくとも１つのソフトウェアモデルに変換される。デジタル回路の少なくとも１つの第２の部分の少なくとも１つの第２のモデルが、少なくとも１つの第２の言語で提供される。少なくとも１つの第１の言語の少なくとも１つのソフトウェアモデル、および少なくとも１つの第２の言語の少なくとも１つの第２のモデルが、シミュレーションエンジンに適用される。
【０１４０】
本発明によれば、高位シミュレーションモデルをコ・シミュレーションに使用することができる。従って、高速シミュレーションおよびシミュレーション前の合成に時間がかからない、モデルが完全に合成可能となる前、または、標的となるアーキテクチャが選択される前に、モデルのコ・シミュレーションを行うことが可能である。本発明の方法は、高位シミュレーション技術であるだけでなく、コンパイルに基づくシミュレーション技術でもあり、これにより、非常に高速なシミュレーション速度を得ることができる。
【図面の簡単な説明】
【図１】図１は、高位言語を用い、本発明の一実施形態を構成する方法を含むハードウェアの設計フローを示す。
【図２】図２は、最初に高位記述を用いて低位標的モデルを生成し、次いで共同シミュレーションにその低位標的モデルを用いる公知の方法を示す。
【図３】図３は、相互にコミュニケーションを行い、かつ高位言語で記述されたいくつかの構成要素モデルとコミュニケーションを行う構成要素モデル記述を含むシステム記述の概略図である。
【図４】図４は、相互にコミュニケーションを行い、かつＢａｃｈ  Ｃ高位言語で記述されたいくつかの構成要素モデルとコミュニケーションを行う構成要素モデル記述を含むシステム記述の特定の例を示す。
【図５】図５は、シミュレーションモデルがシミュレーションエンジンとコミュニケーションを行うための手段を含む、シミュレーションエンジンを用いるシステム記述のシミュレーションを示す。
【図６】図６は、相互におよび環境とコミュニケーションを行い、かつ内部デバイスまたは外部デバイスにアクセスするプロセスとして記述される高位モデルを示す。
【図７】図７は、シミュレーションモデルのインターフェースでもある標的ハードウェアモデルのインターフェースを示す。
【図８】図８は、入力値をプロセスし、出力値を返し、かつ複数の刺激により刺激されるシミュレーションモデルを示す。
【図９】図９は、シミュレーションモデル生成部、コンパイラ、およびシミュレーションエンジンを用いて、シミュレーションモデルを生成するために用いられる総体的な方法を示す。
【図１０】図１０は、図４に示す特定の例のためのシミュレーションモデルを生成するために用いられる総体的な方法を示す。
【図１１】図１１は、シミュレーションモデルがアクセスすることができる３種類の記憶装置を示す。
【図１２】図１２は、シミュレーションモデルの構成を示す。
【図１３】図１３は、シミュレーションモデルのリセット応答ユニットを示す。
【図１４】図１４は、シミュレーションモデルの内部デバイス応答ユニットを示す。
【図１５】図１５は、シミュレーションモデルのプロセス応答ユニットを示す。
【図１６】図１６は、シミュレーションモデルのスケジューラにより用いられるプロセスリストを示す。
【図１７】図１７は、現在のエントリポイントをスケジューリングし、選択するために用いられるメカニズムを示す。
【図１８】図１８は、コンパイル前のシミュレーションモデル生成ユニットを示す。
【図１９】図１９は、シミュレーションモデルコードプロセッサおよび生成部を示す。
【図２０】図２０は、シミュレーションモデルコードプロセッサおよび生成部のプロセス応答ユニットを示す。
【図２１】図２１は、順次成分のコード生成を示す。
【図２２】図２２は、並列成分を示す。
【図２３】図２３は、並列成分から生成されたコードを示す。
【図２４】図２４は、完全に終了したループのコード生成を示す。
【図２５】図２５は、終了し得ないループのコード生成を示す。
【図２６】図２６は、外部チャネルを介して値を送信するための生成コードを示す。
【図２７】図２７は、外部チャネルを介してデータが送信されることを待つプロセスをアクティブ化するブロックを示す。
【図２８】図２８は、外部チャネルを介して値を受信するための生成コードを示す。
【図２９】図２９は、外部チャネルを介してデータが受信されることを待つプロセスをアクティブ化するブロックを示す。
【図３０】図３０は、シミュレーションモデル内のデータにインスタンスローカル局所性を持たせるために用いられる基準を示す。
【符号の説明】
４５  シミュレーションエンジン
５０  シミュレーションモデル生成部
５１  コンパイラ
【図１】
0004014080.tif 000002
【図２】
0004014080.tif 000003
【図３】
0004014080.tif 000004
【図４】
0004014080.tif 000005
【図５】
0004014080.tif 000006
【図６】
0004014080.tif 000007
【図７】
0004014080.tif 000008
【図８】
0004014080.tif 000009
【図９】
0004014080.tif 000010
【図１０】
0004014080.tif 000011
【図１１】
0004014080.tif 000012
【図１２】
0004014080.tif 000013
【図１３】
0004014080.tif 000014
【図１４】
0004014080.tif 000015
【図１５】
0004014080.tif 000016
【図１６】
0004014080.tif 000017
【図１７】
0004014080.tif 000018
【図１８】
0004014080.tif 000019
【図１９】
0004014080.tif 000020
【図２０】
0004014080.tif 000021
【図２１】
0004014080.tif 000022
【図２２】
0004014080.tif 000023
【図２３】
0004014080.tif 000024
【図２４】
0004014080.tif 000025
【図２５】
0004014080.tif 000026
【図２６】
0004014080.tif 000027
【図２７】
0004014080.tif 000028
【図２８】
0004014080.tif 000029
【図２９】
0004014080.tif 000030
【図３０】
0004014080.tif 000031