(57)【要約】  プロセッサベースのハードウエアエミュレーションエンジン、特に、エミュレーションエンジン内でプロセッサを同期化する方法及び装置を提供する。同期したプロセッサを使用してハードウエアエミュレーションを実施する方法、装置、及びそのためのハードウエア設計をコンパイルする方法を説明する。装置は、ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサと、ハードウエア設計の少なくとも一部分をエミュレートしている間にプロセッサ群の演算を同期させるためのシンクロナイザとを含む。方法は、ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサに同期信号を供給する段階と、プロセッサ群から待機信号を受信する段階と、プロセッサ群に実行信号を供給する段階とを含み、実行信号により、プロセッサ群は、サブモデルを評価する。ハードウエア設計をコンパイルする方法は、少なくとも１つの高レベル構成概念を演算のシーケンスに変換する段階と、少なくとも１つの条件付きサブモデルを構成する演算のシーケンスを特定する段階とを含む。【選択図】図１
2009539186.tif 000002
【特許請求の範囲】
【請求項１】
同期したプロセッサを使用してハードウエアエミュレーションを実施するための装置であって、
ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサと、
条件付きサブモデル及び無条件のサブモデルを効率的にエミュレートするために前記ハードウエア設計の少なくとも一部分をエミュレートしている間に前記プロセッサ群の演算を同期化するためのシンクロナイザと、
を含むことを特徴とする装置。
【請求項２】
待ち状態で演算する第２の複数のプロセッサを更に含むことを特徴とする請求項１に記載の装置。
【請求項３】
前記プロセッサ群は、複数の命令メモリに連結された命令点レジスタを含み、
前記複数の命令メモリにおける各命令メモリは、前記複数のプロセッサにおけるプロセッサに連結されている、
ことを特徴とする請求項１に記載の装置。
【請求項４】
前記複数のプロセッサにおける各プロセッサは、データメモリに連結されていることを特徴とする請求項３に記載の装置。
【請求項５】
複数のサブモデル照合ブロックを更に含み、該複数のサブモデル照合ブロックにおける各サブモデル照合ブロックが、前記複数の命令メモリにおける命令メモリに連結され、かつ前記データメモリにも連結されていることを特徴とする請求項４に記載の装置。
【請求項６】
前記複数のサブモデル照合ブロックにおける各サブモデル照合ブロックは、サブモデルレジスタに連結されていることを特徴とする請求項５に記載の装置。
【請求項７】
複数のプロセッサ群と、
前記プロセッサ群の各々のためのシンクロナイザと、
を更に含むことを特徴とする請求項１に記載の装置。
【請求項８】
各プロセッサ群が、異なるサブモデルを評価することを特徴とする請求項７に記載の装置。
【請求項９】
同期したプロセッサを使用してハードウエアエミュレーションを実施する方法であって、
ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサに同期信号を供給する段階と、
前記プロセッサ群から待機信号を受信する段階と、
前記プロセッサ群に、該プロセッサ群にサブモデルを評価させる実行信号を供給する段階と、
を含むことを特徴とする方法。
【請求項１０】
第２の複数のプロセッサに該第２の複数のプロセッサを待ち状態に入れる待ち命令を供給する段階を更に含むことを特徴とする請求項９に記載の方法。
【請求項１１】
前記プロセッサ群が前記サブモデルの評価を完了すると、前記第２の複数のプロセッサを前記待ち状態から解放する段階、
を更に含むことを特徴とする請求項１０に記載の方法。
【請求項１２】
前記同期信号は、前記プロセッサ群内の命令点レジスタに供給されることを特徴とする請求項９に記載の方法。
【請求項１３】
各プロセッサ群を待ち状態に入れる段階を更に含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記待機信号は、前記複数のプロセッサ群における各プロセッサ群内のプロセッサから同期ブロックに供給されることを特徴とする請求項１３に記載の方法。
【請求項１５】
サブモデルレジスタからサブモデル照合ブロックにサブモデル識別子を供給する段階と、
前記サブモデル識別子を命令語内のフィールドと比較する段階と、
前記サブモデル識別子と前記命令語内の前記フィールドの間の前記比較に基づいて選択的書込信号を生成する段階と、
を更に含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記選択的書込信号をメモリに供給する段階と、
前記サブモデルをプロセッサで評価して出力を生成する段階と、
前記出力を前記メモリに供給する段階と、
を更に含むことを特徴とする請求項１５に記載の方法。
【請求項１７】
前記選択的書込信号は、書込許可信号であり、前記出力は、前記メモリに格納されることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記選択的書込信号は、書込禁止信号であり、前記出力は、前記メモリに格納されず、該メモリは、不変のままであることを特徴とする請求項１６に記載の方法。
【請求項１９】
前記プロセッサ群は、複数のプロセッサ群の１つであり、該複数のプロセッサ群における各プロセッサ群が、異なるサブモデルを評価することを特徴とする請求項９に記載の方法。
【請求項２０】
ハードウエア設計をコンパイルする方法であって、
少なくとも１つの高レベル構成概念を演算のシーケンスに変換する段階と、
少なくとも１つの条件付きサブモデルを構成する演算の別のシーケンスを特定する段階と、
を含むことを特徴とする方法。
【請求項２１】
前記特定する段階は、
前記少なくとも１つの条件付きサブモデルへの少なくとも１つの入力信号を特定する段階と、
前記少なくとも１つの条件付きサブモデルからの少なくとも１つの出力信号を特定する段階と、
前記少なくとも１つの条件付きサブモデルへの少なくとも１つの起動信号を特定する段階と、
前記少なくとも１つの条件付きサブモデルからの少なくとも１つの完了信号を特定する段階と、
を更に含む、
ことを特徴とする請求項２０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、一般的に、プロセッサベースのハードウエアエミュレーションエンジンに関するものであり、より具体的には、エミュレーションエンジン内でプロセッサを同期化する方法及び装置に関する。
【背景技術】
【０００２】
ハードウエアエミュレータは、ハードウエア設計の検証において使用するプログラマブルデバイスである。ハードウエア設計検証の一般的な方法は、プロセッサベースのハードウエアエミュレータを使用して設計をエミュレートすることである。これらのプロセッサベースのエミュレータは、順次、組合せ論理レベルを評価し、入力から始めて出力に進む。論理レベルの組全体を通る各通過は、サイクルとして公知であり、各個々の論理レベルの評価は、エミュレーション段階として公知である。
【０００３】
例示的なハードウエアエミュレータは、本明細書においてその全内容が引用により組み込まれている「エミュレーションエンジン内のクラスター化したプロセッサ」という名称の本出願人に譲渡された米国特許第６、６１８、６９８号に説明されている。ハードウエアエミュレータは、エンジニア及びハードウエア設計者が、最初にハードウエアを物理的に製造する必要なく、集積回路、集積回路の基板全体、又はシステム全体の演算を試験及び検証することを可能にする。
【０００４】
集積回路上に存在する論理ゲートの複雑性及び数は、ここ数年で大幅に増加した。ハードウエアエミュレータは、集積回路の複雑性の増大に遅れを取らないように効率を改善する必要がある。ハードウエアエミュレータが集積回路をエミュレートすることができる速度は、エミュレータの効率の最も重要な指標の１つであり、エミュレータ市場におけるエミュレータの最も重要な売り要素の１つでもある。
【０００５】
ハードウエアエミュレータは、複数のプロセッサで構成されている。各処理サイクル中、各プロセッサは、論理ゲートをエミュレートし、すなわち、集積回路内の論理ゲートの機能を模倣することができる。プロセッサは、集積回路に存在する論理ゲートがパラレルに多くの結果を計算するのと同じ方法で、パラレルに結果を計算するように配置される。それによって集積回路に発生するものと類似の論理の連鎖が作り出される。論理の連鎖においては、プロセッサ間の効率的な通信が極めて重要である。
【０００６】
ハードウエアエミュレータにおいてプロセッサによって実行されるプログラムは、演算のシーケンスを収容する命令から成る。演算のシーケンス全体は、モデルとして公知である。モデルは、更に、無条件モデル、すなわち、演算のあらゆる他のシーケンスの結果に依存しない演算のシーケンスと、１つ又はそれよりも多くの条件付きモデル、すなわち、その実行が演算の別のシーケンスの結果に依存する演算のシーケンスとで構成されている。条件付きモデル及び無条件モデルは、ハードウエアの全体的な「モデル」に対して、本明細書では「サブモデル」と呼ぶ。
【０００７】
ある一定の演算は、直接にデータに作用し、一方、他の演算は、データが作用を受けるのに必要な条件を説明する。例えば、以下の方程式１により説明される演算のシーケンスによって説明される条件付きサブモデルを考察する。
ｉｆ（ａ！＝０）
ｂ＝ｃ＋ｄ                    （１）
演算「ｂ＝ｃ＋ｄ」（ｂは、ｃ＋ｄに等しい）は、「ｃ」及び「ｄ」をオペランドとして使用してデータ要素「ｂ」に作用する。演算「ａ！＝０」（ａは、ゼロに等しくない）は、データ要素「ｂ」が作用を受けるのに必要な条件を説明する。
【０００８】
条件付きサブモデルは、以前はエミュレータを使用して評価されておらず、その理由は、条件付きサブモデルの評価は、プロセッサ間の通信の効率を低下すると考えられ、すなわち、非条件付きサブモデルを評価することに対して、条件付きサブモデルの評価には、付加的なエミュレーション段階が必要であるからである。説明したような条件付きサブモデルは、２つの可能な結果を有する。正しい結果の計算には余分のエミュレーション段階が必要であるために、プロセッサ間通信の効率は低下し、更に、この方程式の第１の部分の出力、すなわち、ｉｆ（ａ！＝０）が不確定であるために、プロセッサは、パラレルで結果を計算することができない。従って、コンパイラは、条件付きサブモデルを論理的に同等であるがより長い非条件付きサブモデルに変換する必要がある。例えば、ａ、ｂ、ｃ、及びｄがブールオペランドである場合、演算の上述のシーケンスは、以下の方程式２のように書き直すことができる。
ｂ＝ａ＆（ｃ＋ｄ）｜！ａ＆ｂ                    （２）
【０００９】
上述の方程式は、上述の条件付き方程式のより長い論理的非条件付き均等物である。ハードウエアエミュレータは、たとえそれが基本とする条件文の第１の部分がおそらく偽であり、すなわち、この方程式の第１の部分が真ではなく、方程式の残りを評価する必要がなくても、この長い非条件付き方程式を評価する必要がある。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】米国特許第６、６１８、６９８号
【発明の概要】
【発明が解決しようとする課題】
【００１１】
すなわち、条件付きサブモデルを効率的に評価することができるプロセッサベースのハードウエアエミュレーションシステムに対する必要性が当業技術に存在する。ハードウエアエミュレーションシステムは、実行の条件が満たされないサブモデルを評価することを回避すべきである。
【課題を解決するための手段】
【００１２】
本発明は、一般的に、同期したプロセッサの群を含むプロセッサベースのハードウエアエミュレーションシステムに関する。装置は、ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサと、ハードウエア設計の少なくとも一部分をエミュレートしている間にプロセッサ群の演算を同期させるためのシンクロナイザとを含む。方法は、ハードウエア設計に関するデータを評価するためのプロセッサ群を形成する複数のプロセッサに同期信号を供給する段階と、プロセッサ群から待機信号を受信する段階と、プロセッサ群に実行信号を供給する段階とを含み、実行信号により、プロセッサ群は、サブモデルを評価する。ハードウエア設計をコンパイルする方法は、少なくとも１つの高レベル構成概念を演算のシーケンスに変換する段階と、少なくとも１つの条件付きサブモデルを構成する演算のシーケンスを特定する段階とを含む。条件付きサブモデルを特定することにより、システムは、評価に向けて条件付きサブモデルを１つ又は複数の特定のプロセッサ群に割り当てることができる。
【００１３】
本発明の上述の特徴を詳細に理解することができるように、先に簡単に要約した本発明のより具体的な説明は、一部を添付図面に例示する実施形態を参照して得ることができる。しかし、本発明は、他の等しく有効な実施形態を受け入れることができるので、添付図面は、本発明の典型的な実施形態だけを例示し、従って、その範囲を制限すると考えないものとすることに注意されたい。
【図面の簡単な説明】
【００１４】
【図１】エミュレーションシステムの概略図である。
【図２】エミュレーションシステムの一部であるエミュレーションエンジンのブロック図である。
【図３】本発明の一実施形態による同期したプロセッサ群のブロック図である。
【図４】本発明の一実施形態によるプロセッサの群を同期させる方法の流れ図である。
【図５】本発明の一実施形態に従ってコンパイラによって利用される方法の流れ図である。
【図６】コンパイラのブロック図である。
【図７Ａ】本発明の一実施形態による無条件サブモデル及び条件付きサブモデルを評価する方法の流れ図を共に示す図の一方である。
【図７Ｂ】本発明の一実施形態による無条件サブモデル及び条件付きサブモデルを評価する方法の流れ図を共に示す図の他方である。
【発明を実施するための形態】
【００１５】
本発明は、少なくとも１つの同期したプロセッサ群、並びにこのような同期したプロセッサ群による評価に向けて条件付きサブモデルを特定するコンパイラを含むプロセッサベースのハードウエアエミュレーションシステムである。
【００１６】
図１は、エミュレーションシステム１００の概要を示している。システムは、コンピュータワークステーション１０５、エミュレーションボード１２０、及びターゲットシステム１３０を含む。コンピュータワークステーション１０５は、エミュレーションボード１２０に対してエミュレーションサポート機器を提供する。
【００１７】
コンピュータワークステーション１０５は、少なくとも１つの中央演算処理装置（ＣＰＵ）１０６と、サポート回路１０８と、メモリ１１０とを含む。ＣＰＵ１０６は、１つ又はそれよりも多くの従来的に利用可能なマイクロプロセッサ及び／又はマイクロコントローラを含むことができる。サポート回路１０８は、ＣＰＵ１０６の演算をサポートするのに使用する公知の回路である。これらの回路は、電源、クロック、入出力インタフェース回路、及びキャッシュなどを含む。
【００１８】
メモリ１１０は、ランダムアクセスメモリ、読み出し専用メモリ、取外し可能ディスクメモリ、フラッシュメモリ、光記憶装置、及びこれらの形式のメモリの様々な組合せを含むことができる。メモリ１１０は、主記憶装置と呼ぶことがあり、キャッシュメモリ又はバッファメモリとしてある程度使用することができる。メモリ１１０は、オペレーティングシステム（ＯＳ）１１２及びコンパイラ１１４のような様々な形態のソフトウエア及びファイルを格納する。
【００１９】
コンパイラ１１４は、ハードウエア設計、例えば、ＶＨＤＬ又はＶｅｒｉｌｏｇで説明したハードウエアを、エミュレーションボード１２０によって評価することができる命令のシーケンスに変換する。
【００２０】
コンピュータワークステーション１０５は、ユーザがエミュレーションボード１２０とインタフェースで接続し、エミュレーション処理を制御し、かつ分析に向けてエミュレーション結果を収集することを可能にする。エミュレーションボード１２０は、個々のエミュレーション回路１２２1〜１２２64（集合的に１２２）で構成されている。一般的に、エミュレーション回路１２２は、集積回路（本明細書ではエミュレーションチップとも呼ぶ）である。コンピュータワークステーション１０５の制御下で、プログラミング情報及びデータは、エミュレーションボード１２０に取り込まれる。
【００２１】
エミュレーションサポート機器１１０から受信したプログラミングに応答して、エミュレーションボード１２０は、ターゲットシステム１３０の一部１２５をエミュレートする。ターゲットシステム１３０の一部１２５は、集積回路、メモリ、プロセッサ、又はプログラミング言語でエミュレートすることができるあらゆるオブジェクト又はデバイスとすることができる。一般的に普及しているエミュレーションプログラム言語には、Ｖｅｒｉｌｏｇ及びＶＨＤＬが含まれる。
【００２２】
図２は、エミュレーションボード１２０によって利用されるエミュレーションチップ１２２の拡大図を示している。エミュレーションチップ１２２は、互いに及びシンクロナイザ２０１と通信することができるプロセッサ２０２1〜２０２6（集合的に２０２）の同期した群を含む。プロセッサ２０２の各同期した群は、少なくとも１つの入力２０６及び少なくとも１つの出力２０８を有する。入力２０６及び出力２０８は、プロセッサ２０２の各同期した群が、入力コネクタ２１２及び出力コネクタ２１４、外部ハードウエア２１６、及びシンクロナイザ２０１を通じて、プロセッサ２０２の他の同期した群、すなわち、他のエミュレーションチップと通信することを可能にする。外部ハードウエア２１６は、ＶＬＳＩ回路、デバッガ、メモリ、又はエミュレーションチップ１２２が恩典を得ることができるハードウエア及びソフトウエアのあらゆる組合せとすることができる。エミュレーションチップ１２２は、他のエミュレーションチップからデータを受信する入力コネクタ２１２1〜２１２4（集合的に２１２）と、他のエミュレーションチップにデータを供給し、チップパッドとして公知である出力コネクタ２１４1〜２１４4（集合的に２１４）とを有する。
【００２３】
図３は、プロセッサ２０２の同期した群（ＳＰＧ）の拡大図を示している。ＳＰＧ２０２は、命令メモリ３０４1〜３０４n（集合的に３０４）と、プロセッサ３１０1〜３１０n（集合的に３１０）と、データメモリ３１２1〜３１２n（集合的に３１２）と、サブモデル照合ブロック３１４1〜３１４n（集合的に３１４）とを含む。各ＳＰＧ２０２は、少なくとも１つの入力２０６及び少なくとも１つの出力２０８を有する。簡潔さを期すために、ＳＰＧ２０２は、入力２０６1〜２０６3及び出力２０８1〜２０８3を有するように示されている。共通シーケンサ３０２及び共通サブモデルレジスタ３１６は、プロセッサ２０２の同期した群によって共有される。プロセッサ２０２の同期した群は、シンクロナイザ２０１（図２に示す）によって同期される。
【００２４】
ＳＰＧ２０２は、無条件サブモデル、すなわち、演算のあらゆる他のシーケンスの結果に依存しない演算の無条件シーケンス、及び少なくとも１つの条件付きサブモデル、すなわち、シーケンスの実行が演算の別のシーケンスの結果に依存する演算のシーケンスを評価する。無条件サブモデル及び条件付きサブモデルは、各々、サブモデル識別子によって特定される。
【００２５】
各プロセッサ３１０は、関連した命令メモリ３０４に連結されている。シーケンサ３０２は、命令メモリ３０４の各々に接続されている。各プロセッサ３１０は、関連したデータメモリ３１２にも連結されている。プロセッサ３１０の一部は、入力２０６及び出力２０８に連結されている。より具体的には、プロセッサ３１０1は、入力２０６1及び出力２０８1に連結されており、プロセッサ３１０3は、入力２０６2及び出力２０８2に連結されており、プロセッサ３１０n-1は、入力２０６3及び出力２０８3に連結されている。各データメモリ３１２は、関連したサブモデル照合ブロック３１４に連結されている。各サブモデル照合ブロック３１４は、関連した命令メモリ３０４に連結されている。各サブモデル照合ブロック３１４は、共通サブモデルレジスタ３１６に連結されている。
【００２６】
プロセッサ３１０は、エミュレーションエンジン１２０の基本構成要素である。プロセッサの主な機能は、Ｎ個の入力論理関数（ここでＮは整数である）を実行して、関数ビット出力として公知である単一のビット結果を生成することである。各論理関数の入力は、前回の演算から又は別の１つ又はそれよりも多くのプロセッサから格納したビットを含むソースから選択することができる。得られた関数ビット出力は、エミュレートした設計の論理ゲート出力、エミュレートした設計のレジスタ出力、合成した中間論理状態、又はエミュレーション処理に向けて生成した制御ビットのうちの１つに対応することができる。本発明の一実施形態においては、プロセッサ（プロセッサ３１０1として図３に示す）のうちの１つは、同期プロセッサとして機能する。同期プロセッサ３１０１は、同期したプロセッサ群２０２を同期させるために入力２０６1及び出力２０８1を通じてシンクロナイザ２０１に連結されている。
【００２７】
命令メモリ３０４は、命令語の読取アドレスによって選択可能である個々の命令スロット３０６から成る。各命令スロット３０６は、０から、命令メモリ３０４の機能を反映する最大数まで連続して付番される。各命令スロット３０６は、プロセッサ３１０によって評価される命令語を含む。
【００２８】
命令語は、評価すべきサブモデル（条件付き又は無条件）のサブモデル識別子を含むフィールドを含む。フィールドは、サブモデル照合ブロック３１４によってサブモデルレジスタ３１６内の別のサブモデル識別子に適合される。２つのサブモデル識別子が適合した場合、評価した命令語の出力は、メモリ３１２に格納される。サブモデル識別子が適合しなかった場合、評価した命令語の出力は、メモリ３１２には格納されない。
【００２９】
シーケンサ３０２は、命令点レジスタとして機能し、命令メモリ３０４に読取アドレスを供給することにより、どの命令スロット３０６がプロセッサ３１０によってアクセスされるかを制御する。条件付き分岐以外の命令がプロセッサ３１０によって実行された時、命令点レジスタ３０２は、前値＋１に等しい値を仮定する。条件付き分岐がプロセッサ３１０によって実行された時、シーケンサ３０２は、新しい値を仮定する、すなわち、シーケンサ３０２は、条件付き分岐の評価を開始するために、順序的には必ずしも次の命令スロット３０６でない命令スロット３０６を示している。シーケンサ３０２は、各データメモリ３１２及びサブモデルレジスタ３１６にも連結されている。シーケンサ３０２は、各データメモリ３１２の書込アドレス、及びサブモデルレジスタ３１６の読取アドレスを供給する。
【００３０】
データメモリ３１２は、一般的に、それぞれのプロセッサ３１０によって生成された出力を格納する。データメモリ３１２は、選択的書込メモリであり、すなわち、プロセッサ３１０からメモリ３１２に書き込む機能は、有効化又は無効化することができる。
【００３１】
サブモデル照合ブロック３１４は、関連したメモリ３１２の選択的書込機能を制御する。サブモデル照合ブロック３１４は、関連したメモリ３１２に連結され、関連した命令メモリ３０４に連結され、また、共通サブモデルレジスタ３１６に連結されている。サブモデル照合ブロック３１４は、命令語で説明したサブモデルをサブモデルレジスタ３１６内で説明したサブモデルに適合させる。２つのサブモデルの比較に基づいて、サブモデル照合ブロック３１４は、メモリ３１２の選択的書込機能を制御することができる。サブモデルが適合した場合、サブモデル照合ブロック３１４は、プロセッサに３１０が、評価済みのサブモデルの出力をメモリ３１２に書き込むことを可能にする。サブモデルが適合しなかった場合、サブモデル識別子３１４は、プロセッサ３１０が、評価済みのサブモデルの出力をメモリ３１２に書き込むことを可能にはしない。
【００３２】
サブモデルレジスタ３１６は、サブモデル識別子を格納する。サブモデルレジスタ３１６は、サブモデル識別子をシーケンサ３０２の制御下でサブモデル照合ブロック３１４に供給する。サブモデル識別子は、命令語３０８で存在するサブモデルを特定するために、サブモデル照合ブロック３１４によって使用される。
【００３３】
シンクロナイザ２０１（図２に示す）は、各同期したプロセッサ群（ＳＰＧ）２０２を同期させる。プロセッサ３１０の１つは、ＳＰＧ２０２を「待ち」状態にする特別な同期信号をＳＰＧ２０２に供給する。ＳＰＧ２０２は、次に、「待機」信号を同期ブロック２０１に送る。シンクロナイザ２０１が同期したプロセッサ群２０２の全てから待機信号を受信すると、シンクロナイザ２０１は、ＳＰＧ２０２に一斉にデータを評価するように指令する。同期が実行される方法は、図４において以下で詳細に説明する。
【００３４】
図４は、プロセッサ２０２の群を同期させるためにシンクロナイザ２０１を利用することができる方法４００の流れ図である。方法４００を用いると、特定のモデル、すなわち、無条件サブモデル又は条件付きサブモデルの評価中にプロセッサ２０２の群を同期させることができる。プロセッサ２０２の同期した群は特定のサブモデルを評価するが、非同期プロセッサ３１０、すなわち、サブモデルを評価するように割り当てられなかったプロセッサの群は、待ち状態になる。これらの群は、本質的に、サブモデルを評価し終わったプロセッサ２０２の同期した群と同じ状態になる。非同期したプロセッサは、シーケンサ３０２が次の命令へ進むことを可能にする前に、プロセッサ２０２の同期した群がサブモデルの評価を完了したことを示すシンクロナイザ２０１からの信号を待つ。
【００３５】
方法４００は、ブロック４０２から始まってブロック図４０４に進む。ブロック４０４で、同期命令は、プロセッサ２０２の群の各々によって受信される。各群２０２内のプロセッサ３１０のうちの１つは、同期処理を制御するのに使用する特別なプロセッサである。これらの特別なプロセッサ３１０は、関連した命令メモリ３０４から同期命令を受信する。各群２０２内の１つのプロセッサ３１０（図３ではプロセッサ３１０1として示す）は、この同期機能に対しては物理的に全ての他のプロセッサ３１０に同一であるが、群２０２の同期を制御するように選択される。
【００３６】
ブロック４０６で、同期プロセッサ３１０は、関連した群２０２を待ち状態にする。待ち状態中、プロセッサ３１０は、いかなる付加的な命令を実行することもできず、シーケンサ３０２の値は、不変のままである。ブロック４０８で、各群２０２内の同期プロセッサ３１０は、群２０２が同期したサブモデルを実行する準備ができていることを示す「待機」信号をシンクロナイザ２０１に送る。
【００３７】
シンクロナイザ２０１は、ＳＰＧ２０２における特別なプロセッサ３１０によってアドレス指定される。モデルダウンロードの一部として、ワークステーション１０５は、この特定のモデルの適正な実行に必要とされる同期した群２０２をシンクロナイザ２０１に知らせる。シンクロナイザ２０１は、各所要群２０２が「待機」信号を送信するまで待つ。方法４００は、全ての「待機」信号がシンクロナイザ２０１によって受信されるまで、次の段階まで進まない。ブロック４１０で、シンクロナイザ２０１は、群２０２の各々から「待機」信号の全てを受信した後に全体的同期信号を生成する。同期信号は、シンクロナイザ２０１からシーケンサ３０２に供給される。ブロック４１２で、シンクロナイザ２０１から命令点レジスタ３０２に供給された同期信号により、命令メモリ３０４は、プロセッサ２０２の同期した群によって評価されるサブモデルの開始である命令スロット３０６にジャンプする。
【００３８】
ブロック４１４で、プロセッサ２０２の同期した群は、一斉に無条件のサブモデルを評価する。プロセッサ２０２の同期した群は、群２０２の１つが条件付きサブモデル命令に遭遇するまで一斉に無条件サブモデルを評価し続ける。方法４００は、ブロック４１６で終了する。
【００３９】
図５及び６は、併せて、同期したプロセッサ群を使用してサブモデル評価を実行する命令を生成するのに使用するコンパイラ１１４の演算及び機能を示している。コンパイラ１１４は、ＶＥＲＩＬＯＧ又はＶＨＤＬのようなプログラミング言語で書かれたハードウエア記述をエミュレーションシステム１００が評価することができる命令のシーケンスに変換する処理５００を利用する。
【００４０】
図６は、コンパイラ１１４の機能ブロック図である。コンパイラ１１４は、ハードウエア記述言語（ＨＤＬ）合成ブロック５０４、インストルメンタ６１４、マッパー６１６、分割器６１８、及びスケジューラー６２０を含む。ＨＤＬ合成ブロック５０４は、ＨＤＬ命令を条件付きサブモデル６０７、条件付きサブモデル信号６０６1／６０８／６１０1／６１２、無条件サブモデル６０９、及び無条件サブモデル信号６０６2及び６１０2に変換して、設計データベース６０２を形成する。インストルメンタ６１４、マッパー６１６、分割器６１８、及びスケジューラー６２０は、更に、以下で説明するように設計データベース６０２を処理する。
【００４１】
条件付きサブモデル６０７は、入力信号６０６1及び起動信号６０８を受信する。条件付きサブモデルは、出力信号６１０1及び完了信号６１２を生成する。起動信号６０８は、条件付きサブモデル６０７の評価を開始するようにプロセッサ３１０に合図するものである。プロセッサ３１０は、入力信号６０６1を評価し、応答して出力信号６１０1を生成する。入力信号６０６1は、命令メモリ３０４によって供給された１つ又はそれよりも多くの命令語によってオペランドとして選択することができ、すなわち、入力信号６０６1は、１つ又はいくつかの信号とすることができる。また、出力信号６１０1は、１つ又はそれよりも多くの信号とすることができる。完了信号６１２は、条件付きサブモデル６０７が完全に評価されたことを示している。完了信号６１２を受信すると、プロセッサ２０２の同期した群は、無条件サブモデル６０９の評価を再開する。
【００４２】
無条件サブモデル６０９は、条件付きサブモデル６０７によって中断されるまで連続的に実行される。無条件サブモデル６０９には、起動信号又は完了信号は不要であり、その理由は、連続的に実行されるからである。無条件サブモデル６０９は、入力信号６０６1を受信して、出力信号６１０2を生成する。入力信号６０６2は、命令メモリ３０４によって供給された１つ又はそれよりも多くの命令語によってオペランドとして選択することができ、すなわち、入力信号６０６2は、１つ又はいくつかの信号とすることができる。また、出力信号６１０2は、１つ又はそれよりも多くの信号とすることができる。
【００４３】
図５は、本発明の一実施形態に従ってコンパイラ（図１では１１４として示す）によって利用される処理５００の流れ図を示している。図６は、コンパイラ１１４のブロック図である。コンパイラ１１４は、命令メモリ３０４に格納してプロセッサ３１０が評価することができる命令に検証中の設計を変換する。
【００４４】
処理５００は、ブロック５０２で開始して、ブロック５０４に進む。ブロック５０４で、コンパイラ１１４は、高精細度言語（ＨＤＬ）、すなわち、ＶＥＲＩＬＯＧ又はＶＨＤで書かれたハードウエア設計をプロセッサ３１０が評価することができる１組の簡単な命令に変換する。ブロック５０６で、コンパイラ１１４は、同期して評価されることから恩典を受けることができる命令内に存在する条件付きサブモデルを特定する。
【００４５】
コンパイラ１１４は、その組の命令を検査し、プロセッサ２０２の同期した群によって評価されることから恩典を受けることができる条件付きサブモデル６０７を特定する。コンパイラ１１４は、大部分の条件付きサブモデル６０７を無条件サブモデル６０９に変換することができる。しかし、潜在的に長い条件付きサブモデル６０７、例えば、以下のような指令：
ｉｆ（．．．）
ｗｈｉｌｅ（．．．）
又は、
ｉｆ（．．．）
ｆｏｒ（．．．）
を含む条件付きサブモデルの方が、プロセッサ２０２の同期した群によって良好に評価される。
【００４６】
コンパイラ１１４は、ある一定の条件付きサブモデル６０７が本質的に長く、ＨＤＬ分析を実行しなくてもプロセッサ２０２の同期した群によって評価されることから恩典を受けることができることも理解している。例えば、連想メモリ（ＣＡＭ）又はマルチポートランダムアクセスメモリ（ＲＡＭ））のような一部のメモリモデルには、クロック前進がなくても瞬間的に実行される多くのアクセスが必要である。一部の複雑な検証断定には、ＨＤＬ合成よりも一層高いレベルの説明に基づいてコンパイラ１１４が発生させるべきである長い一連の計算が必要である。キャッシュに入れられたメモリも、本発明から恩典を受けることができる。キャッシュが欠けている場合、キャッシュライン更新の長い演算がそれに続くべきである。キャッシュを更新する演算の持続時間は長いが、キャッシュを実際に更新する必要がある確率は、かなり低いものである。完了するのに長い時間を消費するが、長い演算の発生をトリガする条件の確率が低いいかなる条件付き演算も、本発明から恩典を受けることができる。
【００４７】
簡潔さを期すために、１つの条件付きサブモデル６０７だけを図６に示している。条件付きサブモデルは、条件付きで実行されるだけである命令の組であり、すなわち、サブモデルは、ある一定の条件が発生した場合に限り実行される。ブロック５０８で、コンパイラ１１４は、各特定された条件付きサブモデル及びサブモデル信号（図６に示す）に対してサブモデル本体（６０７として図６に示す）を特定する。サブモデルは、状態をバイナリ状態要素、すなわち、ラッチ又はフリップフロップの組合せとして符号化した有限状態機械（ＦＳＭ）によって表すことができる。サブモデルは、ゲートレベルのネットリスト又は状態遷移表によっても表すことができる。サブモデル信号としては、サブモデル入力信号、出力信号、起動信号、及び完了信号がある（それぞれ、６０６1／６１０1／６０８／６１２として図６に示す）。これらの信号を生成する表現は、サブモデル本体に組み込まれる。
【００４８】
ブロック５１０で、コンパイラ１１４は、無条件サブモデル（６０９として図６に示す）を特定する。メインモデルとしても公知である無条件サブモデル６０９は、条件付きサブモデルの全てが特定された後に排他演算によって特定される。無条件サブモデル６０９には、起動信号又は完了信号は必要ではない。無条件サブモデル６０９は、条件付きサブモデル６０７によって中断されるか、又は無条件サブモデル６０９の評価は完了であるまでＳＰＧ２０２によって連続的に実行される。
【００４９】
無条件サブモデル６０９の出力信号６１０2は、条件付きサブモデル６０７の入力信号６０６1及び起動信号６０８を供給する。条件付きサブモデル６０７の出力信号６１０1は、無条件サブモデル６０９の入力信号６０６2を供給する。完了信号６１２は、条件付きサブモデル６０７によってシンクロナイザ２０１に供給される（図２に示す）。
【００５０】
設計データベース６０２は、インストルメンタ６１４、マッパー６１６、分割器６１８、及びスケジューラー６２０によって順番に処理される。ブロック５１２で、インストルメンタ６１４は、論理を条件付きサブモデル６０７及び無条件サブモデル６０９に挿入する。論理は、信号の状態に可視性を供給する回路（プローブ回路）及びある一定の条件になるとモデルの演算を停止する回路（切断点回路）を含む。
【００５１】
ブロック５１４で、マッパー６１６は、条件付きサブモデル６０７及び無条件サブモデル６０９によって使用される表現及び記憶要素を実装する。表現及び記憶要素は、プロセッサ３１０によって評価することができる形式でなければならない。例えば、プロセッサ３１０が一度に４つの入力値しか評価することができない場合、４つを超える入力値を使用するあらゆる表現は、マッパー６１６により、いくつかの命令のシーケンス、すなわち、４つ又はそれ未満の入力値のいくつかシーケンスに分解すべきである。
【００５２】
ブロック５１６で、分割器６１８は、ＨＤＬ合成ブロック５０４によって特定された各条件付きサブモデル６０７を考察し、各サブモデル６０７を同期したプロセッサ２０２の１つ又はそれよりも多くの群に割り当てる。分割器６１８は、各条件付きサブモデル６０７を処理するのに必要とされる同期したプロセッサ群２０２の最小数を判断する。本発明の一実施形態においては、高々１つの条件付きサブモデル６０７を各同期したプロセッサ群２０２に割り当てる。本発明の別の実施形態では、複数の条件付きサブモデル６０７を各同期したプロセッサ群２０２に割り当てることができる。
【００５３】
分割器６１８も、１つ又はそれよりも多くの同期したプロセッサ群２０２に無条件サブモデル６０９を割り当てる。分割器６１８は、条件付きサブモデル６０７を評価するように割り当てられなかった同期したプロセッサ群２０２に無条件サブモデル６０９を割り当てることができ、又は条件付きサブモデル６０７を評価するためにも割り当てられた同期したプロセッサ群２０２内の未使用エミュレーションリソースに無条件サブモデル６０９を割り当てることができる。
【００５４】
ブロック５１８で、スケジューラー６２０は、演算を実行するオペランド及びリソースの利用可能度に基づいて、各プロセッサ３１０によって実行される演算のシーケンスを判断する。スケジューラー６２０は、同期したプロセッサ２０２の２つの群が同じ条件付きサブモデル６０８又は無条件サブモデル６０９を実行した時に両方の群間で信号値を伝達できるだけであるという事実に対処する。本発明の一実施形態においては、スケジューラー６２０は、信号を条件付きサブモデル６０７と無条件サブモデル６０９の間で伝達することも可能にする。また、スケジューラー６２０は、２つの異なる条件付きサブモデル６０７間での信号の伝達を容易にする。スケジューラー６２０は、第１の条件付きサブモデル６０７から無条件サブモデル６０９に信号を供給することによって伝達を容易にし、無条件サブモデル６０９は、次に、信号を第２の条件付きサブモデル６０７に供給する。
【００５５】
スケジューラー６２０が第１の条件付きサブモデル６０７から無条件サブモデル６０９に信号を供給することによって伝達を容易にする機構を以下のように説明する。スケジューラー６２０は、条件付きサブモデル６０７を評価するために割り当てられた同期したプロセッサ群２０２内に信号のコピーを作成する。信号は、次に、無条件サブモデル６０９の実行中に、最初の位置から目標の同期したプロセッサ群２０２内の位置にコピーされる。同様に、条件付きサブモデル６０７の出力は、無条件サブモデル６０９の実行中にのみ、その仕向地に伝達される。
【００５６】
また、スケジューラー６２０は、１つのサブモデル（条件付き又は無条件）だけがいつでも同期したプロセッサ群２０２によって実行されるように、異なるサブモデルＩＤを各条件付きサブモデル６０７及び無条件サブモデル６０９に割り当てる。
【００５７】
また、スケジューラー６２０は、１つよりも多い同期したプロセッサ群２０２に割り当てられる条件付きサブモデル６０７の実行を調整することを担当する。スケジューラー６２０は、条件付きサブモデル６０７内での完全な同期が維持されるように、条件付きサブモデル６０７のあらゆる分岐命令、すなわち、条件付きサブモデルを特定のメモリ位置から読み込ませるジャンプ命令が、同じ方法で各同期したプロセッサ群２０２の命令メモリ位置に設けられ、すなわち、命令スロット３０６内に配置されることを確実にすべきである。
【００５８】
スケジューラー６２０は、真である完了信号６０２と同等の論理的条件で実行される各同期したプロセッサ群２０２に同期したジャンプ命令を供給する。このような同期したジャンプ命令は、条件付きサブモデル６０７が評価され、同時に同期したプロセッサ群２０２を待ち状態にすることをシンクロナイザ２０１に示すものである。同期ブロック２０１から全体的同期信号を受信すると、これらの命令は、無条件サブモデル６０９の先頭アドレスに対応する新しい値をシーケンサ３０２内に供給する。無条件サブモデル６０９は、次に、同期したプロセッサ群２０２によって一斉に実行される。本方法は、ブロック５２０で終了する。
【００５９】
図７は、本発明の一実施形態による条件付きサブモデル６０７及び無条件サブモデル６０９の実行を説明する方法７００の流れ図である。同時に方法７００を使用してパラレルにいくつかの異なる条件付きサブモデル６０７を評価することができる。
【００６０】
処理７００は、ブロック７０２で開始してブロック７０８に進む。方法７００は、コンパイラ１１４がＨＤＬ合成ブロック５０４（図５に示す）によって形成された演算の無条件シーケンスの各々を組み合わせて１つの無条件サブモデル６０９にしたと仮定する。無条件サブモデル６０９は、静的に決定可能な数の無条件命令段階で実行される。無条件サブモデル６０９を実行するのに必要な命令段階数により、１つのエミュレーションサイクルの長さが決まる。
【００６１】
ブロック７０８で、無条件サブモデル６０９を評価する。ブロック７１０で、無条件サブモデル６０９のサブモデル識別子は、無条件サブモデル６０９を評価するためのプロセッサ２０２の同期した群毎にシーケンサ３０２によってサブモデルレジスタ３１６に書き込まれる。
【００６２】
判断ブロック７１２で、サブモデル識別子をサブモデルレジスタ３１６がサブモデル照合ブロック３１４に供給する。無条件サブモデル６０９のサブモデル識別子に適合するフィールドを有する命令語だけが処理される。上述のように、サブモデル照合ブロック３１４は、メモリ３１２に書き込むプロセッサ３１０の機能を制御する。命令語が、評価中のサブモデルに適合するサブモデル識別子を有するフィールドを含まなかった場合、方法７００は、ブロック７１６に進み、処理済み出力は、メモリ３１２には格納されない。命令語が、評価中のサブモデルに適合するサブモデル識別子を有するフィールドを確かに含んでいた場合、方法７００は、ブロック７１４に進み、処理済み出力は、メモリ３１２に格納される。従って、無条件サブモデル６０９のみがメモリ３１２に影響を与える。
【００６３】
判断ブロック７１７で、無条件サブモデル６０９内の命令の全てが評価されたか否かに関して判断を行う。命令の全てが評価されていた場合、方法７００は、ブロック７４０に進み、方法７００は、終了する。命令の全てが評価されてはいなかった場合、本方法は、判断ブロック７１８に進む。
【００６４】
判断ブロック７１８で、エミュレーションシステム１００は、条件付きサブモデル６０７を実行するか、又は無条件サブモデル６０９を実行し続けるかを判断する必要がある。エミュレーションサイクル、すなわち、無条件サブモデル６０９を評価するのに必要な段階数の終わりで、エミュレーションシステム１００は、条件付きサブモデル６０７が実行すべきか否かを判断する。その判断は、サブモデル起動信号６０８の条件が真であるかを検査することによって行う。条件が真である場合、方法７００は、ブロック７２０に進んで、条件付きサブモデル６０７の実行を開始する。条件が偽であった場合、方法７００は、ブロック７０８へ戻って無条件サブモデル６０９を実行する。
【００６５】
ブロック７２０で、条件サブモデル６０７を実行する。ブロック７２２で、条件サブモデル６０７を評価するためのプロセッサ２０２の各同期した群のサブモデルレジスタ３１６に条件サブモデル６０７のサブモデル識別子を書き込む。
【００６６】
判断ブロック７２４で、サブモデル識別子をサブモデルレジスタ３１６がサブモデル照合ブロック３１４に供給する。無条件サブモデル６０９のサブモデル識別子に適合するフィールドを有する命令語だけが処理されることになる。サブモデル照合ブロック３１４は、メモリ３１２に書き込むプロセッサ３１０の機能を制御する。命令語が、評価中のサブモデルに適合するサブモデル識別子を有するフィールドを含まなかった場合、方法７００は、ブロック７２６に進み、処理済み出力は、メモリ３１２には格納されない。命令語が、評価中のサブモデルに適合するサブモデル識別子を有するフィールドを確かに含んでいた場合、方法７００は、ブロック７２８に進み、処理済み出力は、メモリ３１２に格納される。従って、条件サブモデル６０７のみがメモリ３１２に影響を与える。
【００６７】
判断ブロック７３０で、エミュレーションシステム１００は、条件付きサブモデル６０７が完全に評価されたか否かを判断する。条件付きサブモデルは、拡張エミュレーションサイクルを有し、すなわち、条件付きサブモデル６０７を評価するには、無条件サブモデルよりも多いエミュレーション段階数を必要とする。判断がノーであった場合、方法７００は、ブロック７１２へ戻り、条件サブモデルは、依然として評価される。判断がイエスである場合、本方法は、ブロック７３２に進み、完了信号が生成される。ブロック７３４で、完了信号６１２により、上述の同期したジャンプ命令がプロセッサ２０２の同期した群によって実行される。
【００６８】
ブロック７３６で、同期したジャンプ命令を実行する同期したプロセッサ群２０２は、「待ち状態」になる。判断ブロック７３８で、同期したプロセッサ群２０２は、他の同期したプロセッサ群２０２の全てが無条件サブモデル６０９の実行を開始するために利用可能であるか否かを判断する。判断がノーであった場合、方法７００は、ブロック７３８に戻る。判断がイエスであった場合、方法７００は、ブロック７０８へ戻る。ブロック７０８で、シンクロナイザ２０１は、無条件サブモデル６０９を実行するように同期したプロセッサ群２０２に合図する。
【００６９】
すなわち、本発明は、無条件サブモデル及び１つ又はそれよりも多くの条件付きサブモデルを効率的に評価する方法及び装置を提供する。装置は、評価中のサブモデルだけが処理され、出力が選択的書込メモリを利用してメモリに書き込まれることを保証する。コンパイラは、命令のシーケンスを無条件及び条件付きサブモデルに分離し、これらのサブモデルをプロセッサの同期した群に割り当てる。サブモデルの評価は、プロセッサの同期した群が一度に１つの特定のサブモデルだけを評価するので非常に効率的である。
【００７０】
上記は本発明の実施形態に関連するが、本発明の他の及び更に別の実施形態をその基本的な範囲から逸脱することなく考案することができ、その範囲は、以下の特許請求の範囲によって判断される。
【符号の説明】
【００７１】
１００  エミュレーションシステム
１０５  コンピュータワークステーション
１２０  エミュレーションボード
１３０  ターゲットシステム
【図１】
2009539186.tif 000003
【図２】
2009539186.tif 000004
【図３】
2009539186.tif 000005
【図４】
2009539186.tif 000006
【図５】
2009539186.tif 000007
【図６】
2009539186.tif 000008
【図７Ａ】
2009539186.tif 000009
【図７Ｂ】
2009539186.tif 000010
【国際調査報告】
2009539186.tif 000011
2009539186.tif 000012