(57)【要約】  第１の入力幅を有する関数を評価するための第１のプリミティブと、第１のプリミティブに結合された第２のプリミティブであって、第２の入力幅を有する関数を評価するための第２のプリミティブと、を有し、第１の入力幅が第２の入力幅に等しくないハードウェアエミュレータである。第１のプリミティブ又は第２のプリミティブの何れかの一方の使用は、評価される関数に応じて選択される。【選択図】  図３
2009527858.tif 000002
【特許請求の範囲】
【請求項１】
ハードウェアをエミュレートする方法であって、
第１の入力幅を有する第１のプリミティブを使用して少なくとも１個のゲートの関数を評価するために第１のコントロールワードを実行するステップと、
前記第１の入力幅に等しくない第２の入力幅を有する第２のプリミティブを使用して少なくとも１個のゲートの関数を評価するために第２のコントロールワードを実行するステップと、
の間で選択を行うセレクタ機構を備える方法。
【請求項２】
前記第１の入力幅が前記第２の入力幅より小さい、請求項１に記載の方法。
【請求項３】
スイッチを使用してコントロールストアメモリから前記第１のコントロールワード及び前記第２のコントロールワードにアクセスするステップを更に含む、請求項１に記載の方法。
【請求項４】
前記第２のコントロールワードを実行するステップが、
第１の量のデータを第１のレジスタへ供給するステップと、
第２の量のデータを第２のレジスタへ供給するステップと、
メモリからロジックテーブルを選択するために前記第１のレジスタに記憶された前記第１の量のデータを使用するステップと、
前記第２のレジスタに記憶された前記第２の量のデータを使用して前記ロジックテーブルからデータビットを選択するステップと、
を含み、
前記第１の量のデータ及び前記第２の量のデータが、データアレイによって少なくとも部分的に供給され、
前記第１の量のデータ及び前記第２の量のデータが、前記第１のコントロールワード又は前記第２のコントロールワードによって前記データアレイから部分的に選択される、
請求項１に記載の方法。
【請求項５】
前記ロジックテーブルが、コントロールストアメモリ、データアレイ、又は、リードオンリーメモリのうちの少なくとも一つに記憶される、請求項１に記載の方法。
【請求項６】
前記第１の入力幅が４ビットであり、前記第２の入力幅が４ビットより大きい、請求項１に記載の方法。
【請求項７】
前記第２の入力幅が可変である、請求項１に記載の方法。
【請求項８】
前記第１のプリミティブが第１の出力ビットを発生し、前記第２のプリミティブが第２の出力ビットを発生し、
前記第１のコントロールワードに応答してデータアレイに記憶するために前記第１の出力ビットを選択し、前記第２のコントロールワードに応答してデータアレイに記憶するために前記第２の出力ビットを選択するステップと、
前記第２の出力ビットを生成するために前記第２のプリミティブを再使用するステップと、
を更に含む、請求項１に記載の方法。
【請求項９】
前記第２のプリミティブが、二つのエミュレーションステップを使用して実行され、
第１のエミュレーションステップが、データを前記第２のプリミティブにロードし、第２のエミュレーションステップが前記関数を評価する、
請求項１に記載の方法。
【請求項１０】
第１の入力幅を有する関数を評価するための第１のプリミティブと、
前記第１のプリミティブに結合された第２のプリミティブであって、前記第１の入力幅に等しくない第２の入力幅を有する関数を評価するための第２のプリミティブと、
を備えるプロセッサモジュールを有するハードウェアエミュレータ。
【請求項１１】
前記第１のプリミティブ又は前記第２のプリミティブを選択的に作動させるために順次に実行されるコントロールワードを記憶するメモリを更に備える、請求項１０に記載のハードウェアエミュレータ。
【請求項１２】
前記第２のプリミティブが、
ロジックテーブルからビットを選択するマルチプレクサと、
前記ロジックテーブルからの出力ビットを選択するために前記マルチプレクサに対する選択アドレスを発生する第１のレジスタと、
メモリ内での前記ロジックテーブルの位置に対するアドレスを発生する第２のレジスタと、
を備える、請求項１０に記載のハードウェアエミュレータ。
【請求項１３】
前記ロジックテーブルが、前記第２のプリミティブによって評価される前記関数の前記第１の幅に応じた可変サイズを有する、請求項１２に記載のハードウェアエミュレータ。
【請求項１４】
前記ロジックテーブルが、コントロールストアメモリ、データアレイ、又は、リードオンリーメモリのうちの少なくとも一つに記憶されている、請求項１０に記載のハードウェアエミュレータ。
【請求項１５】
プロセッサモジュールを有する複数のクラスタを備え、
各プロセッサモジュールが、
第１の入力幅を有する関数を評価するための第１のプリミティブと、
前記第１のプリミティブに結合された第２のプリミティブであって、前記第１の入力幅に等しくない第２の入力幅を有する関数を評価するための第２のプリミティブと、
前記第１のプリミティブ又は前記第２のプリミティブを選択的に作動させるために順次に実行されるコントロールワードを記憶するメモリと、
前記第１のプリミティブが第１の関数を評価しているときに前記第１のプリミティブからの第１の出力を記憶し、前記第２のプリミティブが第２の関数を評価しているときに前記第２のプリミティブからの第２の出力を記憶するデータアレイと、
を有する、ハードウェアエミュレーションシステム。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明の実施形態は、広く、ロジックゲートで構成されたシステムをエミュレートするハードウェアエミュレータに関するものであり、より詳細には、可変入力プリミティブを有するハードウェアエミュレータに関するものである。
【関連技術の説明】
【０００２】
[0002]ハードウェアエミュレータは、ハードウェア設計の検証に用いられるプログラマブル装置である。ハードウェア設計検証の一般的な方法は、プロセッサベースのハードウェアエミュレータを使用して、設計をエミュレートする。これらプロセッサベースのエミュレータは、組み合わせロジックレベルを、入力から始めて出力へ向かって、順次に評価する。ロジックレベルの全セットを通る各経路はサイクルとして知られており、各個別のロジックレベルの評価はエミュレーションステップとして知られている。
【０００３】
[0003]典型的なハードウェアエミュレータは、同一出願人による米国特許であって、“Ｃｌｕｓｔｅｒｅｄ  Ｐｒｏｃｅｓｓｏｒｓ  ｉｎ  ａｎ  Ｅｍｕｌａｔｉｏｎ  Ｅｎｇｉｎｅ”と題する米国特許第６，６１８，６９８号に記載されている。この米国特許は、その全体を参照することによって、本明細書に援用されている。ハードウェアエミュレータによって、エンジニア及びハードウェア設計者が、最初にハードウェアを物理的に製造することなく、集積回路、集積回路のボード全体、又は、システム全体の動作を試験し検証することが可能になる。
【０００４】
[0004]集積回路内に存在するロジックゲートの複雑さ及び個数は、過去数年の間に著しく増大している。ハードウェアエミュレータは、集積回路の複雑さの増大に遅れをとらないように効率を高めることが必要である。ハードウェアエミュレータが集積回路をエミュレートする際の速度及びロジックゲート効率は、エミュレータの効率の最も重要なベンチマークのうちの一つであり、また、エミュレータ市場におけるエミュレータの最も重要な販売要因の一つである。
【０００５】
[0005]ハードウェアエミュレータは、複数のプロセッサを備えており、これらプロセッサは、一般的に、プロセッサモジュールの一部となっており、プロセッサモジュールはプロセッサ及び関連する補助回路を備えている。プロセッサモジュールは、クラスタと呼ばれるプロセッサモジュールのグループに編成され、プロセッサモジュールのクラスタは、ハードウェアエミュレータのコア要素を形成するエミュレーションエンジンを集合的に構成する。各プロセスサイクル中に、各プロセッサは、集積回路内のロジックゲートの関数を模倣して、ロジックゲートをエミュレートすることができる。プロセッサは、集積回路内に存在するロジックゲートが多数の結果を並列に計算する方法と同様に、結果を並列に計算するように構成されている。これは集積回路内に現れるロジックと類似したロジックの連鎖を作成する。ロジックの連鎖では、プロセッサ間の効率的な通信が重要である。
【０００６】
[0006]プロセッサは、少量の入力データ、典型的には、４ビットの入力データを受信し、「プリミティブ」を利用して、エミュレートされているハードウェアのロジックゲートによって実行されるであろうロジック関数をエミュレートする。評価として知られているプロセスでは、プリミティブは、エミュレートされているゲートによって実行される関数をエミュレートするために、入力データを出力ビットに変換する。得られるビットは、エミュレートされている一以上のゲートによって生成されるであろう出力である。このように、プリミティブは、ゲートによって実行される関数を評価するために使用される。このような評価を容易にするために、プリミティブは、ルックアップテーブルを備えており、当該ルックアップテーブルは、評価されている関数の考え得る結果（出力ビット値）の全てをもつロジックテーブルを含んでいる。ロジックテーブルは全ての考え得る入力データの組み合わせを全ての考え得るビット値にマッピングする。４入力プリミティブは、関数の全ての考え得る有効な結果を生じることを可能とするよう、１６ビットの出力データを含むロジックテーブルを備えている。４ビットの入力ビットが、本質的に、特定の４ビットの入力ビットのセットに対する関数の出力を形成するデータビットを含むルックアップテーブル内の場所を選択するアドレスとして使用される。入力ビットから出力ビットへの適切なマッピングを設定することにより（すなわち、適切なテーブル値をロードすることにより）、ロジックテーブルは４ビット以下の入力ビットを使用するあらゆる関数の有効な結果を提供する。
【０００７】
[0007]エミュレートされるゲートがより多数（例えば、５ビット以上）の入力ビットを有するある種のエミュレータでは、５ビット以上の入力データを有するプリミティブをプロセッサに利用させることが望ましい。一つの解決策は、多入力ゲートの関数を多数のレベルの４入力プリミティブに分解することである。各レベルは、全ゲート関数の一部分を実行し、各レベルの出力は、多入力ゲートの最終的な出力を得るために、他のレベルを表す他のプリミティブの出力と合成される。このようなゲートの多重レベル評価を容易にするために、入力データは多数の部分に分割され、別個のプリミティブが各部分を処理する。データ部分のそれぞれの評価はエミュレーションサイクルの単一ステップの間に行われる。各データ部分を評価するためにより多くのプリミティブが必要とされるほど、所与のゲートの最終的な出力を計算するためにより多くのステップが必要とされる。さらに、プリミティブの個数が増加するのにつれて、プリミティブ用に必要なチップ面積が増加する。例えば、Ｎビット×Ｎビットの乗算器は２×Ｎビットの積を必要とする。Ｎ＝２の場合には、４入力プリミティブだけが必要とされる。しかしながら、Ｎ＝４の場合には、全部で２４８個の４入力プリミティブが評価される必要がある。Ｎ＝８の場合には、１６個の１６入力プリミティブが積を与えるために評価されるであろう。１６入力プリミティブのそれぞれは、８０９５個の４入力プリミティブを必要とする。完全な積は１２９５２０個の４入力プリミティブを必要とする。したがって、このような解決策は、エミュレーションステップの使用においてもチップ面積の使用においても非効率的である。
【０００８】
[0008]従来技術で使用されている第２の解決策では、より大規模なプリミティブを使用して、多入力ゲートをエミュレートすることができる。より大規模なプリミティブは、より高速な計算を実行することを可能とする。これは、評価すべきロジックのレベルがより少ないからである。すなわち、単一のプリミティブが多数のロジックのレベルを表現できるからである。しかしながら、プリミティブによって使用されるルックアップテーブルのサイズ（すなわち、ロジックテーブルを記憶するハードウェア）は、プリミティブの入力サイズに指数関数的に関係しているので、より大規模なプリミティブは、ルックアップテーブルを収容するために想到に大きなチップ面積を必要とする。したがって、結局のところ、実際に実現可能なハードウェアエミュレータチップのサイズが、大規模プリミティブの使用を制限する。
【０００９】
[0009]したがって、多入力ゲートエミュレーションを容易にするためにハードウェアエミュレータにおけるプリミティブの利用を改良する方法及び装置が当技術分野において必要とされている。
【発明の概要】
【００１０】
[0010]本発明は、第１の入力幅を有する関数を評価するための第１のプリミティブと、第１のプリミティブに結合された第２のプリミティブであって、第２の入力幅を有する関数を評価するための第２のプリミティブとを有し、第１の入力幅が第２の入力幅に等しくないハードウェアエミュレータである。第１のプリミティブ又は第２のプリミティブの何れかの一方の使用は、評価される関数に応じて選択される。したがって、関数を評価するために使用されるロジックテーブルをエミュレーションのコントロールワードの中に組み込むことが非現実的である場合には、本発明は、第２のプリミティブを使用し、この場合には、ロジックテーブルがコントロールワードから分離して記憶される。第２のプリミティブは、可変入力幅、すなわち、エミュレーションステップ間で変化し得る入力幅を有する関数を評価してもよい。
【００１１】
[0011]上記の本発明の特徴が詳細に理解され得るように、上に簡単に要約した本発明のより具体的な説明を、実施形態を参照して行う。これら実施形態のうち一部は、添付の図面に示されている。しかしながら、添付の図面は本発明の典型的な実施形態のみを例示しており、本発明はその他の同等に効果的な実施形態を認め得るものであるので、添付図面は本発明の範囲を制限していると考えるべきではないことに注意すべきである。
【詳細な説明】
【００１２】
[0016]本発明は、可変入力プリミティブを有するハードウェアエミュレータである。ハードウェアエミュレータで使用される典型的なエミュレーションエンジンは、米国特許第６，６１８，６９８号、“Ｃｌｕｓｔｅｒｅｄ  Ｐｒｏｃｅｓｓｏｒｓ  ｉｎ  ａｎ  Ｅｍｕｌａｔｉｏｎ  Ｅｎｇｉｎｅ”、及び、米国特許第５，５５１，０１３号、“Ｍｕｌｔｉｐｒｏｃｅｓｓｏｒ  ｆｏｒ  Ｈａｒｄｗａｒｅ  Ｅｍｕｌａｔｉｏｎ”に開示されている。これら特許は、その全体を参照することによって本明細書に援用されている。これら特許に記載されているようなエミュレーションエンジンは、本発明の可変入力プリミティブの使用による恩恵を受けることが可能である。
【００１３】
[0017]図１はハードウェアエミュレータシステム１００の概略図である。システム１００は、コンピュータワークステーション１０５と、エミュレーションサポート機構１１０と、（エミュレーションシステム１２０と称されることもある）エミュレーションエンジン１２０と、ターゲットシステム１３０と、を備えている。コンピュータワークステーション１０５は、エミュレーションサポート機構１１０に結合されている。コンピュータワークステーション１０５は、エミュレーションエンジン１２０とのインターフェイスをユーザに提供しており、ユーザがエミュレーションプロセスを制御し、解析のためにエミュレーション結果を収集することを可能とする。エミュレーションサポート機構１１０は、ワークステーションインターフェース、プログラムコンパイル、パワーシーケンシング、プログラムローディング、及び、データキャプチャを行う。プログラミング情報及びデータは、サポート機構１１０からエミュレーションエンジン１２０へロードされる。
【００１４】
[0018]エミュレーションサポート機構１１０から受信されたプログラミングに応答して、エミュレーションエンジン１２０は、複数のエミュレーション集積回路１４０（エミュレーションチップ）を利用して、ターゲットシステム１３０の一部分１２５をエミュレートする。ターゲットシステム１３０の一部分１２５は、集積回路、メモリ、プロセッサ、又は、プログラミング言語でエミュレートされ得る任意のオブジェクト若しくは装置であってもよい。よく知られているエミュレーション言語には、Ｖｅｒｉｌｏｇ及びＶＨＤＬがある。
【００１５】
[0019]図２は、エミュレーションチップ１４０のブロック図である。エミュレーションチップ１４０は、プロセッサモジュール２３０をもつクラスタ２２０を備えている。エミュレーションチップ１４０は、複数の入力及び出力、集合的に２１０ｎ（ここで、ｎは整数である）を介して、ターゲットシステム（図１の１３０）及びエミュレーションサポート機構（図１の１１０）と通信する。各クラスタ２２０は、複数のプロセッサモジュール２３０ｎ（ここで、ｎは整数である）と、複数のクラスタ入力２５０及びクラスタ出力２４０とを備えている。プロセッサモジュール２３０ｎは、一般的に互いに同じものである。各クラスタ２２０の出力２４０は、相互接続２６０を介してエミュレーションエンジン２００内の他のクラスタ２２０の入力２５０へ直接的に接続している。
【００１６】
[0020]クラスタ２２０ｎ内の各プロセッサモジュール２３０ｎには、特定の逐次的なコントロールワードのセットがロードされる。これらのコントロールワードは、プロセッサにロジックゲートをエミュレートさせるために、プロセッサモジュール２３０ｎを有するコンポーネントに連続的に供給される。このエミュレーションは、各プロセッサに、特定の時点に特定の入力データのセットに対して特定の関数（プリミティブ）を実行させることにより行われる。入力データは、プロセッサモジュール内、クラスタ中の他のプロセッサモジュール内、又は、他のクラスタ内で生成されてもよい。関数の出力は、出力を生成したプロセッサモジュール、クラスタ内の他のプロセッサモジュール、又は、他のクラスタによる使用のために、プロセッサモジュール２３０ｎに記憶される。プロセッサモジュール２３０ｎを繰り返し利用することによって、ハードウェアロジックで行われるデータ処理が、プロセッサモジュールによってエミュレートされる。プロセッサモジュール２３０ｎ内のプロセッサの性能を高めるため、本発明は、後述するように、可変入力プリミティブを備える。
【００１７】
[0021]図３は、プロセッサモジュール２３０のブロック図である。プロセッサモジュール２３０は、コントロールストアメモリ３０１と、データアレイ３１０と、プロセッサ３２０と、命令アドレスシーケンサ３８５と、ＶＩＰ／プロセッサ選択マルチプレクサ３２５と、可変入力プリミティブ（ＶＩＰ）３９０と、を備えている。ＶＩＰ３９０は、可変入力プリミティブ（ＶＩＰ）レジスタ３４０と、ＶＩＰアドレスレジスタ３５０と、ＶＩＰロードレジスタコントロールロジック３６０と、アドレススイッチ３７０と、ＶＩＰマルチプレクサ３８０と、を備えている。ＶＩＰ３９０は、プロセッサ３２０をサポートし、プロセッサモジュール２３０が多（例えば、６ビット幅より大きい）入力ゲートを評価することを可能とするように構成されている。より詳細には、プロセッサ３２０及びデータアレイ３１０は、協働して、「少」入力ゲート、例えば、４ビット入力の関数を評価する。しかしながら、必要に応じて、ＶＩＰ３９０が、プロセッサ３２０の能力を増強して、プロセッサモジュール２３０が「より大規模」な、例えば、６ビットより多い入力幅を有する関数を評価することも可能とする。多入力関数は、多入力ゲート、又は、多数の入力を有する関数を協働して実行する少入力ゲートの組み合わせの何れかを表している。ＶＩＰ３９０を使用すると、少入力ゲートの組み合わせを、当該組み合わせ中のゲート毎に少入力プリミティブを使用して評価を実行するよりも少ないプロセッサエミュレーションステップを使用して評価することができる。
【００１８】
[0022]エミュレータの初期化時には、エミュレーションプログラムがコントロールストアメモリ３０１にロードされる。エミュレーションプログラムは、一連の（多量の）コントロールストアワード３０２を備える。動作時には、エミュレーションステップ毎に、新しいコントロールストアワード３０２がメモリ３０１から供給され、ロジックゲートの関数を表現する出力を生成するためにプロセッサモジュール２３０のコンポーネントによって使用される。これらのロジック関数は、命令アドレスシーケンサ３８５によって生成されたタイミングに従って実行される。メモリ３０１からのコントロールストアワード３０２は、データアレイ読み出しアドレスをデータアレイ３１０へ供給して、４入力ビットをプロセッサ３２０に提供し、将来の使用のためデータアレイ３１０に記憶されているデータビットの選択を容易とするよう選択ビットをＶＩＰ／プロセッサセレクタマルチプレクサ３２５に提供し、制御情報をＶＩＰ３９０に提供する。各コントロールストアワード３０２が実行されるとき、特定のデータがデータアレイ３１０からプロセッサ３２０へ供給される。ＶＩＰ３９０は、プロセッサモジュール２３０が、プロセッサ幅（例えば、４ビット）より広い入力データ幅を有するゲートをエミュレートすることを可能とする。コントロールストアワード３０２は、従来型のゲート幅（４ビットプリミティブ）を対象にしたワードと、（例えば、４ビットプリミティブより大きい）幅広いゲート幅をエミュレートすることが意図されているワードとを含み得る。本明細書では、従来型の処理用のコントロールストアワード３０２を従来型のワード３０６と称し、ＶＩＰ処理に使用されるコントロールストアワード３０２をＶＩＰワード３０４と称する。従来型のワード３０６は、関数を評価するためにプロセッサによって使用されるロジックテーブルを含み、ＶＩＰワードに関連付けられているロジックテーブルは非常に大きいのでＶＩＰワード自体の中に収められない。したがって、ＶＩＰ処理のためのロジックテーブルはＶＩＰワードから分離したメモリに記憶される。プロセッサモジュール２３０は、可変入力処理を必要に応じて実行して従来型の入力ゲート又は幅の広い入力ゲートの何れかをエミュレートするよう、何れのタイプのコントロールストアワードをもシームレスに利用する。
【００１９】
[0023]４ビット関数を評価するために、プロセッサ３２０は、１６ビットルックアップテーブル（すなわち、４ビット選択アドレスを有する１６ビットマルチプレクサ）として動作する。データビットをルックアップテーブルに投入するために使用されるロジックテーブルは、従来型のワード３０６の中に含まれている。ＶＩＰワード３０４が使用される場合には、ＶＩＰ３９０が、プロセッサ３２０が取り扱える幅より広い幅を有する関数を評価するために、有効状態にされる。例えば、ＶＩＰワード３０４は、１２８ビットロジックテーブルを選択してＶＩＰ３９０にロードするために８ビットを使用し、ロジックテーブル（すなわち、７ビット選択アドレスを有する１２８ビットマルチプレクサ）から特定の出力ビットを選択するために７ビットを使用することにより、１５ビット関数が評価され得るようにする。
【００２０】
[0024]一般的に、従来型のワードは、評価の際にプロセッサ２３０によって使用される１６ビットロジックテーブルを含んでいる。エミュレーションサイクルのステップ中に、従来型のワードは、ロジックテーブルをプロセッサに提供し、データアレイ３１０から４入力ビットをアドレス指定する。選択された入力データを使用して、プロセッサ３２０は、マルチプレクサ３２５を介して記憶のためにデータアレイ３１０へ送られる１ビット出力を生成する。処理に利用可能なデータアレイ３１０内の入力データは、プロセッサ３２０、ＶＩＰ３９０、クラスタ内の他のプロセッサ、及び、その他のクラスタからのデータを含む。データアレイは、バス３１２に結合されており、当該バス３１２は、データアレイを他のクラスタ及びプロセッサに接続して、データがプロセッサ及びクラスタの間で共有され得るようにする。
【００２１】
[0025]幅の広い関数を処理するために、特定の幅の広いロジックテーブルがコントロールストアメモリ３０１（又は、プロセッサモジュール２３０内の他のメモリ）に記憶される。ロジックテーブルは、コントロールワードスタックによって使用されていないメモリ３０１の一部分に記憶される。コントロールストアワード（ＣＳＷ）としてＶＩＰワード３０４が出現した時に、ＶＩＰ３９０は有効状態にされ、特定のＶＩＰロジックテーブル３０８が多入力ゲートの評価を容易にするためにＶＩＰ３９０にロードされる。ＶＩＰワード３１４からの情報とデータアレイ３１０からの選択された入力データとの双方を使用して、ＶＩＰ３９０は、データアレイ３１０に記憶するためにマルチプレクサ３２５を介して結合されている１ビット出力を発生する。
【００２２】
[0026]より詳細には、「多」入力ゲート（又は少入力ゲートの組み合わせ）が評価される場合には、ＣＳＷは、ＶＩＰマルチプレクサ３８０に結合されるＶＩＰワード３０４を含んでいる。ＶＩＰワード３０４は、特別に設計された命令語であり、必要に応じて、ＶＩＰ３９０を有効状態とし、幅の広い入力ゲートの関数を評価するためにＶＩＰ３９０に情報を提供する。ＶＩＰワード３０４に応答して、データアレイ３１０は、入力データをＶＩＰマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０に提供する。入力データは、クラスタ内の他のプロセッサ、他のクラスタ、ＶＩＰ３９０の前の出力、又は、プロセッサ３２０の前の出力からのデータを含んでいてもよい。命令アドレスシーケンサ３８５は、タイミング情報及び逐次読み出し／書き込みアドレスをデータアレイ３１０及びＶＩＰ３９０内のアドレススイッチ３７０に提供する。
【００２３】
[0027]アドレススイッチ３７０は、命令アドレスシーケンサ３８５からのアドレス又はＶＩＰアドレスレジスタ３５０からのアドレスの何れかを選択する。命令シーケンス内の次のコントロールワードを選択するため、シーケンサ３８５は、スイッチ３７０を介してアドレスをコントロールストアメモリ３０１に供給する。アドレス指定されたコントロールワードは、ＶＩＰワード３０４であるならば、ＶＩＰマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０を選択し、ＶＩＰロードレジスタコントロールロジック３６０の制御下でレジスタ３４０及び３５０にロードする情報を選択するために、アドレッシング情報を含む。レジスタ３５０は、結合されたアドレスを、アドレススイッチ３７０を介して、コントロールストアメモリ３０１へ提供する。このアドレスは、ＶＩＰマルチプレクサ３８０にロードするＶＩＰロジックテーブル３０８を選択する。テーブルは、３２ビット、６４ビット、１２８ビット、又は、コントロールストアメモリ３０１によって記憶することができる任意のビット長を含むことができる。一旦ロードされると、選択されたＶＩＰマルチプレクサレジスタ３４０は、ＶＩＰ３９０の出力としてＶＩＰロジックテーブル３０８の１ビットを選択するために、多ビット選択値を供給する。１２８ビットロジックテーブルの場合、選択値は７ビットである。その結果、１５ビット関数は、適切な１２８ビットロジックテーブルを選択するために８ビット（上位ビット）を使用し、テーブルからの出力ビットを選択するために７ビット（下位ビット）を使用して評価され得る。
【００２４】
[0028]ゲートの集合をエミュレートするためにＶＩＰ３９０を使用する場合には、単一のＶＩＰワード３０４が、関数を開始し得る。この関数は、別の場合には、実行のために多数の従来型のワードを必要とするものである。したがって、多数の従来型のコントロールワードに代えてＶＩＰワードを使用することにより、コントロールストアメモリ内のメモリ空間は追加のＶＩＰロジックテーブルを記憶するために利用可能となる。しかしながら、コントロールストアメモリ３０１は、ロジックテーブルを記憶するためにプロセッサモジュール内で利用可能な唯一のメモリではない。別の実施形態では、ＶＩＰロジックテーブルは、コントロールストアメモリ３０１内の未使用空間内ではなく、リードオンリーメモリ（ＲＯＭ）に記憶されてもよい。更に別の実施形態として、データアレイ３１０内の未使用メモリ空間が、ＶＩＰロジックテーブルを記憶するために使用されてもよい。
【００２５】
[0029]より詳細には、ＶＩＰロードレジスタコントロールロジック３６０は、「有効化」ビットをＶＩＰマルチプレクサレジスタ３４０、ＶＩＰアドレスレジスタ３５０、及び、アドレススイッチ３７０に提供することによりＶＩＰ動作を制御する。一般的に、ＶＩＰワード３０４中の単一ビットが、スイッチ３７０を有効状態にすること、及び、ＶＩＰ／プロセッサセレクタマルチプレクサ３２５のＶＩＰ入力を選択することを制御する。ＶＩＰロードレジスタコントロールロジック３６０は、ＶＩＰマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０を、それらがデータアレイ３１０によって提供されたデータを記憶すべきときに、有効状態にする。適切な時点、すなわち、レジスタへのロードが行われた後の次のステップで、ＶＩＰロードレジスタコントロールロジック３６０はまた、コントロールストアメモリ３０１へ読み出しアドレスを提供して、エミュレートされている多入力ゲート関数に対応する特定のＶＩＰロジックテーブル３０８にアクセスするために、アドレススイッチ３７０を有効状態にする。この関数は、その後に、そのステップ中にエミュレートされる。或いは、一旦レジスタへのロードが行われると、別のＶＩＰワードを使用して、後のステップでエミュレーションを可能にしてもよい。
【００２６】
[0030]別の実施形態では、ＶＩＰロードレジスタコントロールロジック３６０は、有効化ビットを、クラスタ内の全部のＶＩＰレジスタ３４０／３５０へ（例えば、４セットの有効化ビットを四つのプロセッサモジュールへ）供給してもよい。
【００２７】
[0031]ＶＩＰマルチプレクサ３８０は、コントロールストアメモリ３０１からＶＩＰロジックテーブル３０８を受信する。テーブルは、Ｍ×Ｎアレイの関数値であってもよい。ここで、Ｍ及びＮは整数である。特定の一実施形態では、ロジックテーブルは１×Ｎアレイである。この場合、Ｎは、評価されている関数の考えられる結果の個数である。選択されたテーブルは、ＶＩＰマルチプレクサ３８０の入力に与えられる。データアレイ３１０からのデータ及びＶＩＰワード３０４の一部分が、ＶＩＰマルチプレクサレジスタ３４０に結合される。この組み合わせは、１２８ビットテーブルから１ビットを選択する選択値を形成する。ＶＩＰマルチプレクサ３８０によって選択された１ビット出力は、ＶＩＰ／プロセッサセレクタマルチプレクサ３２５に結合される。ＶＩＰ／プロセッサセレクタマルチプレクサ３２５は、プロセッサ３２０の出力とＶＩＰマルチプレクサ３８０の出力との間で選択を行い、次いで、選択された出力をデータアレイ３１０に書き込む。ＶＩＰ動作中には、ＶＩＰ出力ビットがデータアレイ３１０に書き込まれ、従来型の動作中には、プロセッサビットがデータアレイ３１０に書き込まれる。
【００２８】
[0032]このようにして、ＶＩＰマルチプレクサ３８０は、ＶＩＰロジックテーブル３０８から１ビット出力を選択する。このＶＩＰロジックテーブル３０８は、１２８個のあり得る出力結果を含み、当該１２８個の出力結果は、７ビット選択値を使用して選択される。したがって、１５ビット幅の入力を有するゲートの関数を、７ビット選択値と、メモリ内のテーブルに対する８ビットアドレスと、１２８ビットロジックテーブルとを使用して評価することができる。１５入力プリミティブロジックテーブルを記憶するために使用されるコントロールストアメモリ内の記憶域を使用して、その他の種々の小さいサイズをもつ複数のテーブルを記憶してよもよい。
【００２９】
[0033]図４は、図３に示したＶＩＰを使用する方法である。図４は、図３と共に、プロセッサモジュール２３０のエミュレーション能力を向上するための本発明を使用する方法を説明している。何れか一つのエミュレーションステップの間に、任意の数の以下のブロックが実行されてもよい。本発明の一実施形態では、ブロック４０４、４０６、４０８、４１０及び４１１をエミュレーションサイクルのあるステップで実行して、情報をＶＩＰへロードし、ブロック４１２、４１４、４１６、４１８、４２０及び４２２をエミュレーションサイクルの第２のステップで実行して、関数を評価する。
【００３０】
[0034]方法４００はブロック４０２で開始し、ブロック４０３へ進み、当該ブロック４０３で、方法４００は、命令がＶＩＰワードであるか否かを問い合わせる。その命令がＶＩＰワードでないならば、方法４００はブロック４０５へ進み、当該ブロック４０５において、当該命令は、上述したように、従来型のプリミティブを使用して従来通りに処理される。その命令がＶＩＰワードであるならば、方法はブロック４０４へ進み、当該ブロック４０４において、コントロールストアメモリ３０１がＶＩＰワードをＶＩＰロードレジスタコントロールロジック３６０へ提供する。そのＶＩＰワードは、多入力ゲート関数の評価を開始するために、ＶＩＰロードレジスタコントロールロジック３６０を有効状態にする。
【００３１】
[0035]ブロック４０６では、ＶＩＰロードレジスタコントロールロジック３６０が、有効化ビットを、ＶＩＰマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０へ供給する。この有効化ビットは、データアレイ３１０からデータ、例えば、４ビットのデータを受信するよう、ＶＩＰマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０を有効状態にする。ブロック４０８では、データアレイ３１０が、データをマルチプレクサレジスタ３４０及びＶＩＰアドレスレジスタ３５０に結合する。データアレイ３１０に記憶されているデータは、プロセッサ３１０によって処理されたデータ、他のプロセッサによって処理されたデータ、他のクラスタによって処理されたデータ、及び、ＶＩＰマルチプレクサ３８０からの出力データを含む。評価に使用されるデータは、コントロールストアメモリ内の命令に応答して実行される評価を容易にするよう、選択される。
【００３２】
[0036]ブロック４１０では、ＶＩＰロードレジスタコントロールロジック３８０が、ＶＩＰアドレスレジスタ３５０からのアドレスをメモリ３０１へ結合するよう、アドレススイッチ３７０を有効化する。ブロック４１１では、ＶＩＰが、処理のために設定される。ブロック４１２では、アドレススイッチ３７０が、アドレスを使用して、コントロールストアメモリ３０１からＶＩＰロジックテーブルを選択する。ブロック４１４では、選択されたＶＩＰロジックテーブルが、ＶＩＰマルチプレクサ３８０に提供される。ブロック４１６では、ＶＩＰマルチプレクサレジスタ３４０に記憶されているデータが、ＶＩＰマルチプレクサ３８０に与えられたＶＩＰロジックテーブルから１ビット出力を選択するために、使用される。ブロック４１８では、ＶＩＰロジックテーブルから選択された１ビット出力が、ＶＩＰ／セレクタマルチプレクサ３２５へ提供される。ブロック４２０では、ＶＩＰ／セレクタマルチプレクサ３２５が、データアレイ３１０へ結合すべきＶＩＰ出力を選択する。ブロック４２２では、選択された出力が、データアレイ３１０に書き込まれる。この方法４００は、ブロック４２４で終了する。
【００３３】
[0037]可変入力動作は、データの評価を完了するために、２ステップ以上のエミュレーションステップを必要とする。しかしながら、可変入力動作は、より大量のデータを評価することに関して、従来型のプロセッサ動作より効率的である。例えば、可変入力動作は、最小限の２ステップのエミュレーションステップで１２８ビットデータワードを評価することが可能であり、一方、従来型のプロセッサ動作は、同じ量のデータをエミュレートするために最少で１５ステップのエミュレーションステップを必要とするであろう。評価中に、関数を評価するためにプロセッサ３２０の使用を必要としない数ステップが存在する（すなわち、プロセッサが使用されないステップが存在する）。この状況が発生する場合には、データアレイ３１０の出力は、ＶＩＰレジスタ３４０／３５０へリダイレクトされる。データビットの全てを記憶するために必要とされるステップ数は、幅の広い評価を４（すなわち、データアレイ出力の数）で分割した際のビット数に依存する。例えば、１５ビット関数がＶＩＰを使用して評価されている場合には、ＶＩＰレジスタ３４０／３５０に記憶されるデータアレイ３１０から必要とされるビットの全てをリダイレクトするために、４ステップが必要となる。或いは、データビットを供給するためにクラスタ内の他のプロセッサを使用することにより、レジスタ３４０／３５０へのロードを行うために使用されるステップ数を削減することができる。例えば、クラスタ内に４個のプロセッサがあり、４ビットのデータビットが各プロセッサに関連付けられている各データアレイから供給される場合には、ＶＩＰレジスタ３４０／３５０へのロードを１ステップで行うことができる。
【００３４】
[0038]必要なビットの全てがＶＩＰレジスタ３４０／３５０に記憶されると、命令３０４は、「次のステップでのＶＩＰ動作」を示す。この命令は、コントロールストアメモリ３０１へ送信される次のアドレスとしてＶＩＰアドレスレジスタ値を選択するようにアドレススイッチ３７０を始動させる。この８ビットアドレスは、１ビットを選択して１５ビット評価を完了するために読み出される必要があるロジックテーブルの１２８ビットスライスを含んでいるワードの位置に過ぎない。ＶＩＰマルチプレクサレジスタ３４０内の全てのビットが、「次のステップでのＶＩＰ動作」がＶＩＰワード３０４によって示される前に、必ずしもロードされなくても構わないことに注意されたい。ＶＩＰマルチプレクサレジスタ３４０へのロードは、ＶＩＰワード３０４の一部を使用して行われてもよい。「次のステップでのＶＩＰ動作」がＶＩＰワード３０４によって示される前に、ＶＩＰアドレスレジスタ３５０には、ロードが行われなければならず、また、当該ＶＩＰアドレスレジスタ３５０が、有効でなければならない。
【００３５】
[0039]次のステップでは、ロジックテーブルがコントロールストアメモリ３０１のＶＩＰロジックテーブル３０８から読み出される。この値はＶＩＰマルチプレクサ３８０へ送信され、当該ＶＩＰマルチプレクサ３８０は、ＶＩＰマルチプレクサレジスタ値を使用して、ロジックテーブルから１ビットを選択する。このビットは、ＶＩＰ／プロセッサセレクタマルチプレクサ３２５へ送信される。このセレクタマルチプレクサ３２５はまた、「次のステップでのＶＩＰ動作」インジケータを受信している。このインジケータを使用して、セレクタマルチプレクサ３２５は、マルチプレクサ３８０の出力がシーケンサ３８５によってアドレス指定されたデータアレイ３１０内の場所に記憶されるように、命令する。
【００３６】
[0040]したがって、全部で、一以上のステップがＶＩＰレジスタ３４０／３５０へのロードを行うために使用される。ロード時には、信号が、次のステップがＶＩＰ動作であることを示す。次のステップ中に、ＶＩＰ評価が完了し、データアレイに記憶される。
【００３７】
[0041]同じＶＩＰ動作が後続のエミュレーションのステップで使用される場合には、その特定のＶＩＰ動作が他のステップによって再使用されてもよい。例えば、ＶＩＰ動作は、ＶＩＰレジスタへ再ロードすることなく、繰り返され、そのエミュレーションの後のステップによる引き続く使用のために、ＶＩＰ動作出力ビットを記憶してもよい。このような再使用は、ＶＩＰ動作のためのレジスタロードステップを回避し、最終的にエミュレーションサイクルの長さを短縮する。
【００３８】
[0042]エミュレーションサイクルの効率は、データの評価を完了するために任意のプロセッサによって必要とされるエミュレーションステップの最大個数に直接的に関係している。例えば、プロセッサのクラスタが８台のプロセッサを含む場合を考える。少数のプロセッサが、データの評価を完了するために５１２回のエミュレーションステップを必要とすることがあり、一方、残りのプロセッサはデータの評価を完了するために２５６回のエミュレーションステップだけを必要とすることがある。エミュレーションサイクルは、全てのプロセッサがデータの評価を完了するまで、すなわち、５１２回のエミュレーションステップの後まで完了しない。２５６回のエミュレーションステップ後に、データを評価するために２５６回のエミュレーションステップだけを必要とするクラスタ内のプロセッサは、残りのエミュレーションサイクルの間、待機状態に留まる。したがって、エミュレーションサイクル中の５１２回のエミュレーションステップのうちの２５６回は、７台のプロセッサによって利用されない。最悪ケースの経路におけるステップの個数を削減することは、すなわち、ステップの個数を２５６以下に削減することは、エミュレーション性能を改善する。さらに、プロセッサのクラスタ中の各プロセッサがエミュレーションサイクル中のほぼ同じ時点でデータの評価を完了することを可能にさせることによって、データを評価する効率が高まる。従来の解決策は、各プロセッサがエミュレーションエンジン内の他のプロセッサとほぼ同じ時点でデータの評価を完了し得るように、各プロセッサに加えられる負荷をバランスさせることを伴うものである。しかし、ある種のタイプのデータは、プロセッサによるデータの評価を完了するために、集約的な処理とより多数のエミュレーションステップとを必要とする。従来型のプロセッサ動作は、４ビット入力から１ビット出力を生成する。すなわち、従来型のプロセッサは、１回のエミュレーションステップ当たりに４ビットのデータを評価する能力しかない。可変入力動作は、従来型のプロセッサ動作より多くのデータのビットを、より少ないエミュレーションステップ中に評価する能力がある。したがって、可変入力動作はエミュレーションエンジンの効率を高める。
【００３９】
[0043]上記の説明は本発明の実施形態を対象としているが、本発明のその他の実施形態及び更なる実施形態を、本発明の基本的な範囲から逸脱することなく、考案することが可能である。本発明の範囲は、特許請求の範囲によって規定されるものである。
【図面の簡単な説明】
【００４０】
【図１】エミュレーションシステムの概要図である。
【図２】エミュレーションシステムの一部であるエミュレーションエンジンのブロック図である。
【図３】プロセッサモジュールのブロック図である。
【図４】本発明を使用する方法のフローチャートである。
【図１】
2009527858.tif 000003
【図２】
2009527858.tif 000004
【図３】
2009527858.tif 000005
【図４】
2009527858.tif 000006
【国際調査報告】
2009527858.tif 000007
2009527858.tif 000008