(57)【要約】論理設計のマルチ状態論理シミュレーションを実行するためのシミュレーションプロセッサ（１００）は、ローカルメモリ（１０４）と複数のプロセッサユニット（１０３）とを含み、これらは相互接続システム（１０１）と互いに通信する。一般的に、基本のマルチ状態論理関数の減少は、プロセッサの命令セットに対して選択される。基本セットの一部ではない論理関数は、それらを基本論理関数の組み合わせから構成することによってシミュレーションされる。この方法においては、命令長は、管理可能なサイズに留まるが、生じ得るすべての論理関数がシミュレーションされることができる。基本のＶＬＩＷアーキテクチャは、別の用途に拡大することができる。
2009516870.tif 000002
【特許請求の範囲】
【請求項１】
論理設計のマルチ状態論理シミュレーションを実行するシミュレーションプロセッサであって、
相互接続システムと、
該相互接続システムを介して互いに通信可能に接続された複数のプロセッサユニットであって、該プロセッサユニットの少なくとも半分は、マルチ状態入力を受信し、かつ、マルチ状態論理を実行するように構成可能なプロセッサエレメントを含む、複数のプロセッサユニットと
を含む、シミュレーションプロセッサ。
【請求項２】
前記プロセッサエレメントは、４状態論理関数をシミュレートするように構成可能である、請求項１に記載のシミュレーションプロセッサ。
【請求項３】
前記シミュレートされる４状態論理関数は、前記プロセッサユニットによって受信される命令によって決定される、請求項２に記載のシミュレーションプロセッサ。
【請求項４】
前記シミュレートされる４状態論理関数は、前記プロセッサユニットによって受信される命令のフィールドによって決定され、該フィールドは７よりも小さいビットを有する、請求項２に記載のシミュレーションプロセッサ。
【請求項５】
シミュレートされる前記４状態論理関数は、前記プロセッサユニットによって受信される命令のフィールドによって決定され、該フィールドは５ビットを有する、請求項２に記載のシミュレーションプロセッサ。
【請求項６】
前記シミュレートされる４状態論理関数は、前記プロセッサユニットにより受信される命令によって決定され、該命令は、４状態論理関数の基本セットを実行することができる命令セットから選択され、４状態論理関数の該基本セットは、前記論理設計の４状態論理関数の実現可能セットよりも小さい、請求項２に記載のシミュレーションプロセッサ。
【請求項７】
前記４状態論理関数の基本セットは、ＮＯＴ演算子の少なくとも１つのバブルされたバリアントを含む、請求項６に記載のシミュレーションプロセッサ。
【請求項８】
前記４状態論理関数の基本セットは、少なくとも１つの演算子のうちの少なくとも２つのバブルされたバリアントを含む、請求項６に記載のシミュレーションプロセッサ。
【請求項９】
前記４状態論理関数の基本セットは、少なくとも１つの演算子のうちの少なくとも８つすべてのバブルされたバリアントを含む、請求項６に記載のシミュレーションプロセッサ。
【請求項１０】
前記４状態論理関数の基本セットは、ＡＮＤ演算子のうちの少なくとも８つのすべてのバブルされたバリアントを含む、請求項６に記載のシミュレーションプロセッサ。
【請求項１１】
前記４状態論理関数の基本セットは、ちょうどＪ個の４状態論理関数を含み、Ｊは２の累乗である、請求項６に記載のシミュレーションプロセッサ。
【請求項１２】
前記シミュレートされるマルチ状態論理関数は、前記プロセッサユニットによって受信される命令によって決定される、請求項１に記載のシミュレーションプロセッサ。
【請求項１３】
前記命令は、マルチ状態論理関数の基本セットを実行することができる命令セットから選択され、該マルチ状態論理関数の基本セットは、マルチ状態論理関数の実現可能セットよりも小さい、請求項１２に記載のシミュレーションプロセッサ。
【請求項１４】
前記シミュレーションプロセッサは、非基本マルチ状態論理関数を基本論理関数から構成することによって、それらをシミュレートする、請求項１２に記載のシミュレーションプロセッサ。
【請求項１５】
シミュレーションプロセッサであって、
前記プロセッサエレメントは、Ｎ状態論理関数をシミュレートするように構成可能であり、
シミュレートされる該Ｎ状態論理関数は、前記プロセッサユニットによって受信される命令のフィールドによって決定され、
該フィールドは、上限の［ｌｏｇ２（Ｎ＾（Ｎ＾２））］よりも少ないビットを有する、請求項１に記載のシミュレーションプロセッサ。
【請求項１６】
シミュレーションプロセッサであって、
前記シミュレートされるマルチ状態論理関数は、前記プロセッサユニットによって受信される命令によって決定され、該命令はＪ個のマルチ状態論理関数の基本セットを実行することができる命令から選択され、
各プロセッサエレメントは、すべてのＪ個の基本マルチ状態論理関数のための出力信号を生成するための回路と、該受信された命令に基づいて該出力信号の１つを選択するマルチプレクサとから成る、請求項１に記載のシミュレーションプロセッサ。
【請求項１７】
前記回路はＪ個のルックアップテーブルを含み、各ルックアップテーブルは前記Ｊ個の基本マルチ状態論理関数のうちの１つに対して前記出力信号を生成する、請求項１６のシミュレーションプロセッサ。
【請求項１８】
前記相互接続システムは、非ブロッキングクロスバーを備える、請求項１のシミュレーションプロセッサ。
【請求項１９】
前記プロセッサユニットは、実質的に同一である、請求項１に記載のシミュレーションプロセッサ。
【請求項２０】
前記複数のプロセッサユニットは、少なくとも２５個のプロセッサユニットを含む、請求項１のシミュレーションプロセッサ。
【請求項２１】
前記複数のプロセッサユニットは、少なくとも５０個のプロセッサユニットを含む、請求項１のシミュレーションプロセッサ。
【請求項２２】
前記プロセッサユニットのすべては、マルチ状態入力を受信し、かつ、マルチ状態論理を実行するように構成可能であるプロセッサエレメントを含む、請求項１に記載のシミュレーションプロセッサ。
【請求項２３】
論理設計のマルチ状態論理シミュレーションを実行する方法であって、
シミュレートされる論理関数を基本マルチ状態論理関数に分解することと、
マルチ状態入力を受信し、マルチ状態論理を実行するように構成可能なプロセ
ッサエレメントにおいて該基本マルチ状態論理関数を実行することと
を含む、方法。
【請求項２４】
整数論理を実行するＶＬＩＷプロセッサであって、
相互接続システムと、
該相互接続システムを介して互いに通信可能に接続された複数のプロセッサユニットであって、該プロセッサユニットのそれぞれは、マルチ状態論理関数のいずれかの基本セットをシミュレートするように構成可能なプロセッサエレメントを含み、該整数論理は、該マルチ状態論理関数の基本セットから構成することができる、複数のプロセッサユニットと  
を含む、ＶＬＩＷプロセッサ。
【請求項２５】
コンピュータシステムであって、
ホストプロセッサと、
該ホストプロセッサによって制御されるハードウェアアクセラレータであって、該ハードウェアアクセラレータは、
（ａ）相互接続システムと（ｂ）該相互接続システムを介して互いに通信可能に接続され、マルチ状態整数関数を実行するように構成可能な複数のプロセッサユニットとを有するＶＬＩＷプロセッサと、
該ＶＬＩＷプロセッサによって実行される命令を格納するための、該ＶＬＩＷプロセッサによってアクセス可能なプログラムメモリと、
該ＶＬＩＷプロセッサによって使用されるデータを格納するための、該プログラムメモリから分離し、該ＶＬＩＷプロセッサによってアクセス可能な保存メモリと
を含む、ハードウェアアクセラレータと
を含む、コンピュータシステム。
【請求項２６】
前記プロセッサユニットのうちの少なくとも１つは、マルチビット整数オペランドを受信し、かつ、マルチビット整数演算を実行するように構成可能である、請求項２５に記載のコンピュータシステム。
【請求項２７】
前記プロセッサユニットは、整数演算関数の、＋、−、＊、および／のいずれかを実行するように構成可能である、請求項２６のコンピュータシステム。
【請求項２８】
前記プロセッサユニットは、整数演算関数の、＋、−、＊、％、／、＜＜、＞＞、〜、２の補数、＝（代入）、＆、｜、＾、＞、＜および＝＝のいずれかを実行するように構成可能である、請求項２６のコンピュータシステム。
【請求項２９】
異なるプロセッサユニットは、異なるビット幅の整数演算関数を実行するように構成可能である、請求項２６のコンピュータシステム。
【請求項３０】
前記プロセッサユニットの大多数は、マルチビット整数演算関数を実行するように構成可能である、請求項２６のコンピュータシステム。
【請求項３１】
前記プロセッサユニットの大多数は、低ビット幅の整数演算関数を実行するように構成可能であって、前記命令は低ビット幅の整数演算関数の組み合わせによって高ビット幅の整数演算を実行する、請求項２６に記載のコンピュータシステム。
【請求項３２】
前記プロセッサユニットうちの少なくとも１つは、かつ、浮動小数点オペランドを受信し、浮動小数点演算を実行するように構成可能である、請求項２５に記載のコンピュータシステム。
【請求項３３】
前記プロセッサユニットのうちの少なくとも１つは、ベクトルオペランドを受信し、かつ、ベクトル関数を実行するように構成可能である、請求項２５に記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本出願は、２００５年９月２８日にＷａｔｔとＶｅｒｈｅｙｅｎとによって出願された、発明名称が「Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｌｏｇｉｃ  Ｓｉｍｕｌａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ  ａｓ  Ｌｏｃａｌ  Ｃａｃｈｅ」である係属中の米国特許出願第１１/２３８，５０５号の一部継続であって、２００５年１０月３１日にＣｏｌｗｉｌｌとＶｅｒｈｅｙｅｎとによって出願された、発明名称が「ＶＬＩＷ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  Ｕｓｉｎｇ  Ｍｕｌｔｉ−ｓｔａｔｅ  Ｌｏｇｉｃ」である米国仮特許出願第６０／７３２，０７８号および２００６年１０月２３日にＣｏｌｗｉｌｌとＶｅｒｈｅｙｅｎとによって出願された、発明名称が「ＢＬＩＷ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  Ｕｓｉｎｇ  Ｍｕｌｔｉ−ｓｔａｔｅ  Ｌｏｇｉｃ」である米国実用特許出願第１１／５５２，１４１号の米国特許法第１１９条第（ｅ）項の優先権を主張する。これらの対象は全体として参照により本明細書に援用される。
【０００２】
（発明の分野）
本発明は、概して、例えば、論理シミュレーションのハードウェア加速システムに使用することができるシミュレーションプロセッサを含むＶＬＩＷ（超長命令語）プロセッサに関する。さらに具体的には、本発明は、マルチ状態論理を実行するＶＬＩＷプロセッサの使用に関する。
【背景技術】
【０００３】
（関連技術の記載）
論理設計のシミュレーションには、一般的に、多くのゲートおよび操作のため高速処理および多くの操作が求められ、高速の操作は、一般的に現代の半導体チップの論理設計に含まれる。論理シミュレーションの１つの方法は、論理が汎用ハードウェア上で実行するコンピュータソフトウェアでシミュレートされる、ソフトウェアベースの論理シミュレーション（すなわち、ソフトウェアシミュレータ）である。残念なことに、ソフトウェアシミュレータは、一般的に非常に遅い。論理シミュレーションの別の方法は、半導体チップの論理が、専用ベースでエミュレータのハードウェア回路にマップされ、それからハードウェア回路によりシミュレーションが実行される、ハードウェアベースの論理シミュレーション（すなわち、ハードウェアエミュレータ）である。残念なことに、エミュレータのハードウェア回路数は、シミュレートされた論理設計の大きさに比例して増加するため、ハードウェアエミュレータは、一般的にコストがかかる。
【０００４】
論理シミュレーションのさらに別の方法は、ハードウェア加速シミュレーションである。ハードウェア加速シミュレーションは、一般的に、論理設計をエミュレートまたはシミュレートに構成可能なプロセッサエレメントを含む、特殊なハードウェアシミュレーションシステムを用いる。コンパイラは、一般的に、論理設計をシミュレートするためにプロセッサエレメントにロードされた命令を含むプログラムへ変換するために提供される（例：ネットリストまたはＲＴＬ（レジスタ転送言語）形式）。ハードウェア加速シミュレーションは、論理設計をより小さな部分に分割し、論理設計をシミュレーションのその部分をプロセッサにロードするために種々の技法を用いることができるため、論理設計の大きさに対し比例的に大きさを変更する必要はない。結果として、ハードウェア加速シミュレーションは、一般的に、ハードウェアエミュレータよりも著しく費用が安い。また、ハードウェアシミュレータは、一般的に、シミュレーションプロセッサで製造されたハードウェアの加速により、ソフトウェアシミュレータよりも速い。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、ハードウェア加速シミュレータは、基本的に、命令が実行用シミュレーションプロセッサにロードされることを要求するため、これらの命令をロードするためのデータパスが性能上の障壁となり得る。プロセッサエレメントは、異なる論理関数をシミュレートするように構成可能であるため、命令内の特定のフィールドは、一般的にどの論理関数がシミュレートされるか識別するために使用される。例えば、プロセッサエレメントが、２つの入力信号および１つの出力信号（すなわち、２項関数）で論理関数をシミュレートし、各信号は２つの可能値（すなわち、それらは２状態変数である）のうちの１つをとる場合、論理関数は、２×２＝４の入力を有する真理値表で記載することができ、それぞれ２つの異なる値をとることができる。２＾４＝１６の可能な真理値表または論理関数があり、命令の４ビットフィールドは、１６個の可能な論理関数の全てから選択するのに十分となる。
【０００６】
多くのシミュレーションは、変数が２つ以上の可能値をとることができる、マルチ状態論理の恩恵を受けることになる。論理シミュレーションでは、２状態シミュレーションは、一般的に状態として０（論理低度（ｌｏｗ））および１（論理高度（ｈｉｇｈ））を使用する。４状態シミュレーションは、多くの場合望ましく、一般的に状態Ｘ（未初期化またはコンフリクト）およびＺ（非駆動）を追加する。Ｘ状態は、状態がコンフリクト（例：高度および低度の同時駆動）、未初期化、未知（例：非駆動）または介在である（変更する）、論理状態を示す。重要なことに、Ｘ状態の追加により、０および１状態は、コンフリクトしない論理低状態および高状態として解釈することが可能になる。Ｚ状態は、マルチソースネットワーク（例：バス）を原型とする。非駆動セルが高インピーダンス（非駆動）状態を推測し、いかなるコンフリクトの一因にもならない。したがって、論理シミュレーションでは、論理関数の入力のＸ状態は、論理関数の出力のＸ状態を生成する。設計の適切な機能のため、論理シミュレーションが完了する際、いかなるＸ状態値も存在してはならず、したがって、ドライブコンフリクトまたは信号の未初期化の問題は生じないことを確立する。４状態シミュレーションが、２状態シミュレーションよりも望ましい理由の１つがこれである。
【０００７】
４状態シミュレーションを実行する１つの方法は、４状態評価は、２つの個別の２状態評価に分割される。一般的に、（各１つの出力の）６個の２進法の２状態評価は、所望の結果を引き起こすために必要とされる。この方法は、リソースの最大６倍の費用がかかり、性能は最大６倍減少するため、あまり魅力的な方法ではない。
【０００８】
ＶＬＩＷアーキテクチャにおいて、２状態から４状態演算に遷移する際、４状態は、各状態に２個のビットを使用して作られる（例：状態０、１、Ｘ、Ｚは、００、０１、１０、１１として表すことができる）。したがって、各論理関数は、２−入力、１−出力定義から、４−入力、２−出力論理関数に遷移する。関連真理値表は、４個の入力の２×２表から、それぞれ１６個の入力の２つの４×４表に遷移する。可能な真理値表の総数は、２＾４＝１６から４＾１６＝２＾３２または約４０億に増加する。２個のビット出力を作り出す、単一プロセッサエレメントでは、命令の関連部分は４ビットから３２ビットに増大する。これは、単一プロセッサエレメントの命令に２８ビットの追加、またはシミュレーションプロセッサが、ｎ個のプロセッサエレメントを含む場合は、２８ｎビットの加算である。この規模の命令長の増加は、一般的に現在の技術ではサポートすることができない。あるいは、単一ビット出力のみを作り出す単一プロセッサエレメントでは、２個のそれぞれ１６ビット命令を使用するプロセッサエレメントが使用されなければならない。この命令幅は、４ビットから１６ビット（３２ビットと対照的に）に増大するが、２倍のプロセッサエレメントが必要である。同等に、プロセッサエレメントの定数では、全体のプロセッサ容量は、２の因数で減少する。さらに、２つのプロセッサが同時に作動する際、命令の関連部分は１×４ビット（２状態は、１つのプロセッシングエレメントのみを必要とする）から２×１６ビット（４状態は、この方法において２つのプロセッシングエレメントを必要とする）＝３２ビットに増大する。
【０００９】
したがって、命令長を過剰に増大させずに、マルチ状態論理（すなわち、３つ以上の状態）をサポートできるＶＬＩＷプロセッサを必要とする。
【課題を解決するための手段】
【００１０】
本発明は、従来の技術の限界を、命令セット用の基本マルチ状態論理関数の減少を選択することによって克服する。基本セットの一部ではない論理関数は、それらを基本論理関数の組み合わせから構成することでシミュレーションされる。その結果、命令長は、管理可能なサイズに留まるが、生じ得るすべての論理関数がシミュレーションされることができる。一側面において、論理設計の論理シミュレーションを実行するためのシミュレーションプロセッサは、相互接続システムを介して通信する複数のプロセッサユニットを含む（例：１つの設計の非ブロッキングクロスバー）。各プロセッサユニットは、マルチ状態論理関数をシミュレートするように構成可能であるプロセッサエレメントを含む。
【００１１】
チップ設計の論理シミュレーションにおいて、４状態シミュレーション（０、１、Ｘ、Ｚ）は、多くの場合望ましい。一方法において、シミュレートされる４状態論理関数は、プロセッサユニットにより（または命令内の特定のフィールドにより）受信された命令によって決定される。３２ビットフィールドは、すべての可能な４状態論理関数を符号化するために必要であるが、種々の実施形態において、代わりに５ビットまたは６ビットフィールドが使用され、結果として生じた命令セットは、シミュレーション中に遭遇する可能性のあるすべての論理関数を、直接的または基本論理関数の組み合わせのいずれかにより、シミュレートするのに十分である。
【００１２】
５ビットフィールドは、一般的に、遭遇する可能性のある特異的な論理関数の総数よりも少ない３２基本論理関数をサポートすることになる。基本論理関数の妥当な選択は、アプリケーションにより異なる。多くの場合、基本セットは、ＮＯＴ（ビット単位の反転）演算子の少なくとも１つのバージョン、および／または少なくとも１つの演算子（例：ブールＡＮＤ演算子）の８つすべてのバブルされたバリアント（すなわち、反転および非反転入力および出力のすべての組み合わせ）を含むであろう。
【００１３】
別の側面において、論理関数の基本セットは、Ｊ個のマルチ状態論理関数を含むものと仮定する。別の設計において、プロセッサエレメントは、すべてのＪ個の基本論理関数用に出力信号を生成する回路を含む。例えば、回路は、各基本論理関数について１つのＪ個のルックアップテーブルを含むことができる。マルチプレクサは、プロセッサユニットにより受信された命令にどの論理関数が特定されるかによって、適切な出力信号を選択する。
【００１４】
本発明の別の側面は、半導体チップの論理シミュレーション以外の目的で、マルチ状態論理を実行するＶＬＩＷプロセッサを含む。例えば、整数演算は、マルチ状態論理として実行することができる。オペランドが４ビット幅である場合、それらは、２＾４＝１６状態バリアブルである。演算アクセラレータ用の基本セットは、＋、−、＊、／および１６状態バリアブルで動作する種々の別の演算関数を含むことができる。出力は入力オペランドと同一のビット幅であるか、または異なることがある。例えば、２つの４ビットオペランドの乗算は、８ビット出力を生み出すことができる。特有の並列処理を有するアプリケーションは、このプロセッサアーキテクチャに相応しい候補である。
【００１５】
本発明の別の側面は、上述の機器に対応するシステム、これらの機器およびシステム用のアプリケーション、および前述のすべてに対応する方法を含む。
【００１６】
本発明の教示内容は、添付図面と共に以下の詳細な説明を考慮すれば容易に理解できるものである。同じ参照番号は、添付図面の同じ要素に使用される。
【００１７】
図は、図示する目的のみにおいて、本発明の実施形態を表す。当業者は、本明細書に図示される構造および方法の他の実施例は、本明細書に記述される本発明の原則から逸脱することなく用いることができるという以下の考察から容易に理解できるであろう。
【発明を実施するための最良の形態】
【００１８】
図１は、本発明の一実施形態による、ハードウェア加速論理シミュレーションシステムを示すブロック図である。論理シミュレーションシステムは、専用ハードウェア（ＨＷ）シミュレータ１３０、コンパイラ１０８、およびＡＰＩ（アプリケーション・プログラミング・インターフェース）１１６を含む。コンピュータ１１０は、ＣＰＵ１１４およびメインメモリ１１２を含む。ＡＰＩ１１６は、ホストコンピュータ１１０がシミュレーションプロセッサ１００を制御するソフトウェアインターフェースである。専用ＨＷシミュレータ１３０は、プログラムメモリ１２１、記憶メモリ１２２、およびプロセッサエレメント１０２、内蔵ローカルメモリ１０４、ハードウェア（ＨＷ）メモリインターフェースＡ１４２、およびハードウェア（ＨＷ）メモリインターフェースＢ１４４を含むシミュレーションプロセッサ１００を含む。
【００１９】
図１に示すシステムは、以下の通り動作する。コンパイラ１０８は、例えば、ＲＴＬ（レジスタ転送言語）記述または論理設計のネットリスト記述など、ユーザチップまたは論理設計の記述１０６を受信する。記述１０６は、一般的に、グラフのノードが設計のハードウェアブロックに対応する有向グラフとして、論理設計を示す。コンパイラ１０８は、論理設計１０６をシミュレートするためにプロセッサエレメント１０２に対して論理設計１０６をマップするプログラム１０９に、論理設計の記述１０６をコンパイルする。プログラム１０９は、チップ設計１０６自体を表す以外に、論理設計１０６をシミュレートするためのテスト環境（テストベンチ）を含むこともできる。例であるコンパイラ１０８のさらなる記述については、２００３年６月５日に公表された、米国特許出願公表第ＵＳ２００３／０１０５６１７Ａ１号、「Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｌｏｇｉｃ  Ｓｉｍｕｌａｔｉｏｎ」を参照し、参照することにより本明細書に組み込まれる。特に、１９１〜２５２項および対応する図面を参照する。プログラム１０９の命令は、メインメモリ１１２に格納される。
【００２０】
シミュレーションプロセッサ１００は、論理設計１０６の論理ゲートをシミュレートするための複数のプロセッサエレメント１０２およびプロセッサエレメント１０２のための命令およびデータを格納するためのローカルメモリ１０４を含む。一実施形態において、ＨＷシミュレータ１３０が任意の一般のコンピューティングシステム１１０にも自然に接続できるように、ＨＷシミュレータ１３０は、ＰＣＩ（ペリフェラル・コンポーネント・インターコネクト）およびＤＭＡ（ダイレクトメモリアクセス）コントローラ付きＦＰＧＡ（フィールド・プログラマブル・ゲートアレイ）を使用して、一般的なＰＣＩボードに実行される。シミュレーションプロセッサ１００は、ＨＷシミュレータ１３０の一部を形成する。したがって、シミュレーションプロセッサ１００は、その動作がＡＰＩ１１６を介してホストコンピュータ１１０によって制御される、ホストコンピュータ１１０のメインメモリ１１２に直接アクセスできる。メインメモリ１１２とメモリ１２２との間のＤＭＡは任意のものであるが、ホストコンピュータ１１０は、メインメモリ１１２とＨＷシミュレータ１３０のメモリ１２１および１２２との間のＤＭＡ転送を命令することができる。
【００２１】
ホストコンピュータ１１０は、ユーザによって指定されたシミュレーションベクトル（図示せず）と、コンパイラ１０８によって生成されたプログラム１０９とを入力として利用し、シミュレーションプロセッサ１００のためのボードレベルの命令１１８を生成する。シミュレーションベクトル（図示せず）は、シミュレートされるネットリスト１０６への入力値を含む。ボードレベルの命令１１８は、ＤＭＡによってメインメモリ１１２からＨＷシミュレータ１３０のメモリ１２１へ転送される。メモリ１２１は、メインメモリ１１２への転送に対するシミュレーションの結果１２０も格納する。メモリ１２２は、ユーザメモリのデータを格納し、代替的に（状況に応じて）シミュレーションベクトル（図示せず）または結果１２０を格納することができる。メモリインターフェース１４２および１４４は、プロセッサエレメント１０２がメモリ１２１および１２２にそれぞれアクセスするためのインターフェースを提供する。プロセッサエレメント１０２は、命令１１８を実行して、ある時点で、同じくＤＭＡによってコンピュータ１１０にシミュレーション結果１２０を返す。中間結果は、以降の命令で使用するためにボード上に残しておくことが可能である。全ての命令１１８を実行することで、１つのシミュレーションベクトルに対してネットリスト１０６全体をシミュレートする。図１に示されるようなハードウェアアクセラレートされたシミュレーションシステムの演算のより詳細な説明は、米国特許出願公開第２００３／０１０５６１７（Ａ１号）（２００３年６月５日発行）に見出すことができ、参照することによりその全体が本願明細書に組み込まれる。
【００２２】
図２は、本発明の一実施形態による、ハードウェアアクセラレートされたシミュレーションシステム内のシミュレーションプロセッサ１００を示すブロック図である。シミュレーションプロセッサ１００は、相互接続システム１０１を介して互いに通信するｎ個のプロセッサユニット１０３（プロセッサユニット１、プロセッサユニット２、プロセッサユニットｎ）を含む。本実施例では、相互接続システムは、非ブロッキングクロスバーである。それぞれのプロセッサユニットは、クロスバーから最高で２つの入力を取り込むことができ（スラッシュと記号「２ｎ」とを付した内向き矢印によって示される）、クロスバーに対して最高で２つの出力を生成することができる（スラッシュと記号「２ｎ」とを付した外向き矢印によって示される）。したがって、クロスバーは、それぞれのプロセッサユニット１０３のそれぞれの入力を任意のプロセッサユニット１０３の任意の出力に結合することができる、２ｎ×２ｎのクロスバーである。このように、１つのプロセッサユニットによって計算された中間値を、他のプロセッサユニットによる計算のための入力として利用可能にすることができる。
【００２３】
それぞれが２つの入力を有するｎ個のプロセッサユニットを含むシミュレーションプロセッサ１００の場合、非ブロッキングアーキテクチャに対して、クロスバー内で２ｎ個の信号を選択できるようにしなければならない。それぞれのプロセッサユニットが同一である場合は、それぞれが２つの変数をクロスバーに与えることが好ましい。これにより、２ｎ×２ｎの非ブロッキングクロスバーが得られる。なお、このアーキテクチャは必須ではない。ブロッキングアーキテクチャ、非同次アーキテクチャ、最適化アーキテクチャ（特定の設計スタイル用）、共有アーキテクチャ（プロセッサユニットが、アドレスビットを共有するか、またはクロスバーへの入力または出力ラインを共有する）は、２ｎ×２ｎの非ブロッキングクロスバー以外の相互接続システム１０１が好適な場合のいくつかの実施例である。
【００２４】
図３を参照して以下に詳述するように、プロセッサユニット１０３のそれぞれは、プロセッサエレメント（ＰＥ）と、シフトレジスタと、ローカルメモリ１０４のメモリとして対応する部分とを含む。したがって、それぞれのプロセッサユニット１０３は、論理設計１０６の少なくとも１つの論理ゲートをシミュレートし、シミュレーション実行中にシミュレーションの中間値または最終値を格納するように構成することができる。
【００２５】
図３は、本発明の第１の実施形態による、ハードウェアアクセラレートされた論理シミュレーションシステム内のシミュレーションプロセッサ１００の単一のプロセッサユニット１０３を示す回路図である。それぞれのプロセッサユニット１０３は、プロセッサエレメント（ＰＥ）３０２と、シフトレジスタ３０８と、オプションのメモリ３２６と、マルチプレクサ３０４、３０６、３１０、３１２、３１４、３１６、３２０、および３２４と、フリップフロップ３１８および３２２とを含む。プロセッサユニット１０３は、命令１１８（図３に３８２で示す）によって制御される。命令３８２は、本実施例では、フィールドＰ０およびＰ１と、ブール（Ｂｏｏｌｅａｎ）関数と、ＥＮと、ＸＢ０と、ＸＢ１と、Ｘｔｒａ  Ｍｅｍとを有する。それぞれのフィールドＸには、Ｘビットの長さを持たせる。命令長は、Ｐ０、Ｐ１、ブール関数、ＥＮ、ＸＢ０、ＸＢ１、およびＸｔｒａ  Ｍｅｍの合計である。クロスバー１０１は、プロセッサユニット１０３を相互接続する。
【００２６】
シミュレーションプロセッサ１００内のＰＥ３０２またはプロセッサユニット１０３の数がｎ個であり、それぞれのプロセッサユニットがクロスバーに対して２つの入力と２つの出力とを有する場合、クロスバー１０１は２ｎ個のバスラインを有する。２状態の実行では、ｎは、２進数（０または１のいずれか）のｎ個の信号を表す。４状態の実行では、ｎは、４状態符号化（０、１、Ｘ、またはＺ）、またはデュアルビット符号化（例、００、０１、１０、１１）されたｎ個の信号を表す。この場合、接続されている実際に２ｎ個の電気（２進数の）信号が存在していても、ｎをｎ個の信号と呼ぶ。同様に、３ビット符号化（８状態）では、ｎ個の信号が存在し、それぞれが８つの異なる状態をとるか、または合計で３ｎ個の電気信号をとる、などが可能である。
【００２７】
ＰＥ３０２は、２つより少ない入力であらゆる論理ゲートをシミュレートするように構成することができる、構成可能なＡＬＵ（演算論理ユニット）である（例、ＮＯＴ、ＡＮＤ、ＮＡＮＤ、ＯＲ、ＮＯＲ、ＸＯＲ、定数１、定数０など）。ＰＥ３０２がシミュレートするタイプの論理ゲートは、ブール関数に依存し、ＰＥ３０２が特定のタイプの論理ゲートをシミュレートするようにプログラムする。これにより、２つを越える入力を有するＰＥを使用することによって、３つを越える入力のブール演算に拡張することができる。
【００２８】
ブール関数内のビット数は、ＰＥ３０２がシミュレートする異なるタイプの一意の論理ゲートの数によって部分的に決定される。例えば、入力のそれぞれが２状態論理（すなわち、シングルビット、０または１のいずれか）であり、出力も２状態である場合、対応する真理値表は、２×２の真理値表（それぞれの入力ごとに２つの可能な値）となり、真理値表で２×２＝４の可能なエントリが得られる。真理値表内のそれぞれのエントリは、２つの可能な値（それぞれの出力ごとに２つの可能な値）のうちの１つをとることができる。したがって、合計で２＾４＝１６の可能な真理値表を実行することができる。すべての真理値表が実行された場合、真理値表は全て一意であり、ブール関数は直接的な態様で符号化されるが、ブール関数は、どの真理値表（論理関数）が実行されているのかを特定するために、４ビットを必要とする。それに対応して、本実施例ではブール関数の数は４ビットである。以下の図４〜６に詳述されるように、回路の修正によって４状態論理に対してブール関数が５ビットしか持たないようにすることが可能であることに留意されたい。
【００２９】
マルチプレクサ３０４は、Ｐ０ビットを有する信号Ｐ０の選択に応えて、クロスバー１０１の２ｎ個のバスラインのうちの１つから入力データを選択し、マルチプレクサ３０６は、Ｐ１ビットを有する信号Ｐ１の選択に応えて、クロスバー１０１の２ｎ個のバスラインのうちの１つから入力データを選択する。ＰＥ３０２は、マルチプレクサ３０４および３０６によって選択された入力データをオペランドとして受信し、ブール関数の信号によって示されるように、構成された論理関数に基づいてシミュレーションを行う。図３の実施例では、すべてのプロセッサユニット１０３に対するマルチプレクサ３０４および３０６のそれぞれは、２ｎ個のバスラインのうちのいずれかを選択することができる。クロスバー１０１は、完全に非ブロッキングであり、網羅的に結合可能であるが、これは必須ではない。
【００３０】
シフトレジスタ３０８は、深さｙ（ｙ個のメモリセル）を有し、ＰＥ３０２が、シミュレーションプロセッサ１００内で、複数のサイクルにおいて論理設計１０６の多数のゲートをシミュレートしている間に生成された中間値を格納する。
【００３１】
図３に示される実施形態では、マルチプレクサ３１０は、信号ＥＮのビットｅｎ０に応えて、ＰＥ３０２の出力３７１〜３７３か、またはシフトレジスタ３０８の最後のエントリ３６３〜３６４のいずれかを選択し、シフトレジスタ３０８の第１のエントリは、マルチプレクサ３０８の出力３５０を受信する。出力３７１の選択によって、ＰＥ３０２の出力をシフトレジスタ３０８に転送することができる。最後のエントリ３６３の選択によって、シフトレジスタ３０８の最後のエントリ３６３は、シフトレジスタ３０８の最後をドロップして除くのではなく、シフトレジスタ３０８の最上部に再循環させることができる。このようにして、シフトレジスタ３０８はリフレッシュされる。他の実施形態では、マルチプレクサ３１０はオプションであり、シフトレジスタ３０８はＰＥ３０２から直接入力データを受信することができる。
【００３２】
シフトレジスタ３０８の出力側には、マルチプレクサ３１２は、シフトレジスタ３０８の１つの出力３５２として、ＸＢ０ビットを有する選択信号ＸＢ０に応えて、シフトレジスタ３０８のｙ個のメモリセルのうちの１つを選択する。同様に、マルチプレクサ３１４は、シフトレジスタ３０８の１つの出力３５８として、ＸＢ１ビットを有する選択信号ＸＢ１に応えて、シフトレジスタ３０８のｙ個のメモリセルののうちの１つを選択する。マルチプレクサ３１６および３２０の状態に従って、プロセッサユニット１０３のデータ入力による消費のために、選択された出力をクロスバー１０１に送ることができる。
【００３３】
メモリ３２６は、シフトレジスタ３０８をその制限サイズによって溢れさせることができるように、データを格納するための入力ポートＤＩと、出力ポートＤＯとを有する。すなわち、シフトレジスタ３０８内のデータは、メモリ３２６からロード、および／またはこれに格納することが可能である。格納することが可能な中間信号値の数は、メモリ３２６の合計サイズによって制限される。メモリ３２６は、比較的に安価で高速であるので、本スキームは、論理シミュレーションにスケーラブルで高速、かつ安価なソリューションを提供する。メモリ３２６は、ＸＢ０、ＸＢ１、およびＸｔｒａ  Ｍｅｍで構成されるアドレス信号３７７によってアドレス指定される。ＸＢ０およびＸＢ１は、それぞれマルチプレクサ３１２および３１４のための選択信号としても使用されることに留意されたい。したがって、これらのビットは、命令の残りによって異なる意味を有する。これらのビットは、図３に２度示されており、１度は命令３８２全体の一部としてであり、１度はメモリ３２６のアドレス指定に使用されることを示す３８０である。
【００３４】
入力ポートＤＩは、ＰＥ３０２の出力３７１−３７２−３７４を受信するように結合される。シフトレジスタ３０８に転送される、ＰＥ３０２によって計算された中間値は、（再循環しないものと仮定する）ｙシフトを行った後にシフトレジスタ３０８の最後をドロップすることに留意されたい。したがって、ｙシフトが生じる前ではないが最終的に使用される中間値の実行可能な代替案は、値をＰＥ３０２からメモリ３２６に直接転送し、（値は、経路３７１−３７２−３７６−３６８−３６２を経てクロスバー１０１に同時に利用可能とすることが可能であるが）シフトレジスタ３０８を完全にバイパスする。別個のデータ経路では、シフトレジスタ３０８に転送される値は、続いて、それらをシフトレジスタ３０８から（データ経路３５２−３５４−３５６または３５８−３６０−３６２を経て）クロスバー１０１に出力することによって、メモリ３２６に移動させ、次いで、それらをＰＥ３０２を介してメモリ３２６に再入力することができる。シフトレジスタ３０８の最後をドロップしている値は、同様の経路３６３−３７０−３５６によってメモリ３２６に移動させることができる。
【００３５】
出力ポートＤＯは、マルチプレクサ３２４に結合される。マルチプレクサ３２４は、信号ＥＮのビットｅｎ０の補数（〜ｅｎ０）に応えて、その出力３６８として、ＰＥ３０２の出力３７１−３７２−３７６、またはメモリ３２６の出力３６６のいずれかを選択する。本実施例では、信号ＥＮは、２つのビット、ｅｎ０とｅｎ１とを含む。マルチプレクサ３２０は、信号ＥＮの別のビットｅｎ１に応えて、マルチプレクサ３２４の出力３６８、またはマルチプレクサ３１４の出力３６０のいずれかを選択する。マルチプレクサ３１６は、信号ＥＮの別のビットｅｎ１に応えて、マルチプレクサ３１２の出力３５４、またはシフトレジスタ３０８の最終的なエントリ３６３、３７０のいずれかを選択する。フリップフロップ３１８および３２２は、クロスバー１０１への出力のために、それぞれ、マルチプレクサ３１６および３２０の出力３５６および３６２をバッファリングする。
【００３６】
図３に示される命令３８２を参照すると、フィールドは、概ね次のように分割することができる。Ｐ０およびＰ１は、クロスバーからＰＥ３０２への入力を決定する。ＥＮは、主として、以下に詳述する２ビットの演算コードである。ブール関数は、ＰＥ３０２によって実行される論理ゲートを決定する。ＸＢ０、ＸＢ１、およびＸｔｒａ  Ｍｅｍは、クロスバー１０１へのプロセッサユニットの出力を決定するか、またはメモリ３２６のためのメモリアドレス３７７を決定する。Ｘｔｒａ  Ｍｅｍは、必須のビットではなく、Ｘｔｒａ  Ｍｅｍ＝０も有効な条件である。
【００３７】
一実施形態では、表１に示されるように、信号ＥＮのビットｅｎ１およびｅｎ０に基づいて、４つの異なる演算モード（評価、無演算、格納、およびロード）をプロセッサユニット１０３内でトリガすることができる。
【００３８】
【表１】
2009516870.tif 000003
概して、評価モードの主要機能は、ＰＥ３０２が論理ゲートをシミュレートする（すなわち、２つの入力を受信して、この２つの入力に特定の論理関数を実行して１つの出力を生成する）ことである。無演算モード時は、ＰＥ３０２は演算を行わない。このモードは、例えば、他のプロセッサユニットが、このシフトレジスタ３０８からのデータに基づく評価関数であるが、このＰＥがアイドル状態である場合に有用となり得る。ロードおよび格納モード時に、データは、ローカルメモリ３２６からロードされるか、またはこれに格納される。ＰＥ３０２は、評価を行うことも可能である。ＷａｔｔとＶｅｒｈｅｙｅｎとによる、米国特許出願第１１／２３８，５０５号、「Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｉｏｎ  Ｓｙｓｔｅｍ  ｆｏｒ  Ｌｏｇｉｃ  Ｓｉｍｕｌａｔｉｏｎ  Ｕｓｉｎｇ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ  ａｓ  Ｌｏｃａｌ  Ｃａｃｈｅ」（２００５年９月２８日出願）には、これらのモードが詳述されており、参照することにより本願明細書に組み込まれる。
【００３９】
図１〜３では、明確にするために、シミュレーションプロセッサ１００の演算が、２状態の２項演算であるという状況で説明した。すなわち、ＰＥ３０２は、（マルチプレクサ３０４および３０６から、それぞれ）２つの入力信号を受信し、１つの出力信号３７１を生成する。それぞれの信号は、２つの可能な状態、０または１のうちの１つをとることができる。なお、上述のように、シミュレーションプロセッサ１００は、この状況に限定されない。別の実施形態では、複数の入力信号および複数の出力信号を使用することができ、および／または種々の信号が２つ以上の状態をとることができる。
【００４０】
論理シミュレーションに関しては、０（論理低度）、１（論理高度）、Ｘ（未初期化またはコンフリクト）、およびＺ（非駆動）の４つの状態を有する、４状態の演算が望ましくなり得る。図４は、４状態の２項ＡＮＤ演算子の異なるバリエーションの真理値表である。真理値表の左上は、２項論理関数＆（０００）のためのものである。この用語では、＆はＡＮＤ演算子の記号である。「バブルコード」（０００）は、出力、Ａ入力、またはＢ入力が反転されたことを示し、０は無反転を示し、１は反転を示す。したがって、例えば、＆（０００）は、いかなる変数も反転されていないので［Ａ  ＡＮＤ  Ｂ］を表し、＆（１００）は、第１の位置にある１が出力が反転されたことを示すので［ＮＯＴ（Ａ  ＡＮＤ  Ｂ）］を表し、＆（０１０）は、第２の位置にある１が入力Ａが反転されたことを示すので［（ＮＯＴ  Ａ）ＡＮＤ  Ｂ］を表す。「バブルコード」という用語は、回路のシンボルにおいて、しばしば反転がバブルで表されることから使用されている。＆（０００）、＆（００１）、＆（０１０）、＆（０１１）などのバリエーションは、基本的な演算子（本実施例ではＡＮＤ）のバブルされたバリアントと称することが可能である。
【００４１】
入力信号をＡおよびＢと表すと、２状態２項論理関数の場合、ＡおよびＢのそれぞれは、２つの可能な値のうちの１つをとることができるので、真理値表は２×２＝４のエントリを有する。４つのエントリのそれぞれは、２つの可能な状態をとることができるので、真理値表は２＾４＝１６となる。図３を参照すると、ブール関数のフィールドは、１６の可能な真理値表のうちのどれがＰＥ３０２によって実行されるかを符号化する。このフィールドは、１６の可能な真理値表から選択するために、４ビットの長さである。
【００４２】
４状態の場合（図４）、ＡおよびＢのそれぞれは、４つの可能な値のうちの１つをとることができるので、真理値表は４×４＝１６のエントリを有する。それぞれのエントリは、４つの可能な状態をとることができるので、４＾１６＝２＾３２、すなわち約４０億の一意の真理値表が得られる。見方を変えると、状態が２ビットの符号として符号化された場合、２つの真理値表（１つが出力状態の低ビット用、もう１つが出力状態の高ビット用）が必要であり、２＾１６×２＾１６、すなわち約４０億の可能な組み合わせが得られる。これらの全ての真理値表が命令セットによって直接サポートされた場合、ブール関数のフィールドは３２ビットの長さを有することになる。なお、これは、それぞれのＰＥごとに、３２−４＝２８の追加ビットを命令長に加えるか、または全てのｎ個のＰＥに対する命令ごとに２８ｎビットを加える。命令長が限られているので、命令がそれほど長くならないようにすることが望ましい。
【００４３】
別の実施形態では、ブール関数の長さは、２状態演算のための４ビットから、４状態演算のための５ビットに増加するだけである。これは、４０億の可能な全ての真理値表ではなく、４０億の可能な真理値表のサブセットを符合化することによって達成される。以下、選択された真理値表を、基本真理値表（または論理関数）または真理値表（または論理関数）の基本セットと称する。非基本論理関数は、それらを基本関数に分解することによってシミュレートされる。遭遇しうる全ての論理関数を構成できるように、基本論理関数を選択すべきである。便宜上、この広範な論理関数のセットを、実現可能セットまたは実現可能な論理関数と称する。例えば、ＡＮＤ（０００）およびＮＯＴ（０００）が、基本論理関数として選択され、ＮＡＮＤ（０００）が実現可能であるが非基本論理関数である場合、ＮＡＮＤ（０００）は、ＮＯＴ（０００）が後に続くＡＮＤ（０００）として構成することができる。これは、ＮＡＮＤ（０００）のより複雑な実行であるが、命令長を縮めるという利点を有する。
【００４４】
１つのアプリケーションでは、次のように、基本セットは、Ｖｅｒｉｌｏｇ言語をサポートするように選択される。図３に示されるＰＥは、最高で２つの入力信号と１つの出力信号とを扱うことができ、したがって、Ｖｅｒｉｌｏｇ内の全ての単項および２項演算子、および２つの入力しか必要としないＶｅｒｉｌｏｇの特殊関数を直接実行することができる。したがって、次の３５個のＶｅｒｉｌｏｇ演算子のサブセットは、基本セットを定義するための出発点として選択される。＆［ＡＮＤ］、｜［ＯＲ］、＾［ＸＯＲ］、ｂｕｆ［ＢＵＦ］、＝［ＩＤＥＮＴＩＴＹ］、〜［ＮＯＴ（反転）］、！［論理ＮＯＴ（試験ゼロ）］、＆＆［論理ＡＮＤ］、｜｜［論理ＯＲ］、＝＝（同等、ＺとＸの比較は無効）、＝＝＝（一致、ＺとＸの比較は有効）、！＝（不等）、！＝＝（不一致）、ｗｉｒｅ、ｔｒｉ０、ｔｒｉ１、ｗａｎｄ、ｗｏｒ、ｐｍｏｓ、ｎｍｏｓ、ｔｒａｎｉｆ０、ｔｒａｎｉｆ１、ｂｕｆｉｆ０、ｂｕｆｉｆ１、ｎｏｔｉｆ０、ｎｏｔｉｆ１、＋、−、／、％、＊、ｌｏｇｉｃ０、ｌｏｇｉｃ１、ｌｏｇｉｃＸ、およびｌｏｇｉｃＺ。より複雑なＶｅｒｉｌｏｇ演算子（例えば、ＭＵＸのような２つ以上の入力を有する関数）は、上記リストの３５個の演算子を組み合わせることによって表すことができる。
【００４５】
これら３５個のそれぞれのバブルされたバリアントを含むことで、合計２８０個の遭遇しうる異なる表現式が得られる。なお、これらの表現式の多くは、論理的に同等である（すなわち、同じ真理値表を有する）。例えば、＆（０００）は、論理的に｜（１１１）と同等である。したがって、２８０個の表現式から、７０個の実現可能な一意の論理関数のセットが得られる。このセット全体は、基本セットとして使用することが可能であり、直接的な符号化のために７ビットの長さのブール関数フィールドを有する（しかし、７０は６４をわずかしか超えていないため不十分であり、７ビットによって１２８が可能となる）。
【００４６】
なお、本実行では、７０個の一意の論理関数セットをわずか３２個の論理関数に削減することによって、命令長が５ビットに縮小される。本実施例では、以下の３２個の論理関数が、論理関数の基本セットとして選択される。＆（０００）、＆（００１）、＆（０１０）、＆（０１１）、＆（１００）、＆（１０１）、＆（１１０）、＆（１１１）、＾（０００）、＾（００１）、〜（０００）、〜（００１）、＝（０００）、＝＝＝（０００）、＝＝＝（１００）、ｗｉｒｅ（０００）、ｔｒｉ０（０００）、ｔｒｉ１（０００）、ｗａｎｄ（０００）、ｗｏｒ（０００）、ｐｍｏｓ（０００）、ｐｍｏｓ（００１）、ｐｍｏｓ（０１０）、ｐｍｏｓ（０１１）、ｐｍｏｓ（１００）、ｐｍｏｓ（１１０）、ｂｕｆｉｆ０（０００）、ｂｕｆｉｆ０（０１０）、ｌｏｇｉｃ０、ｌｏｇｉｃ１、ｌｏｇｉｃＺ、およびｌｏｇｉｃＸ。
【００４７】
実現可能な６８個の一意の論理関数セットは、複数の異なる原理を使用して、３２個の論理関数の基本セットに削減された。例えば、演算子の多くは可換的である。すなわち、２つの入力変数は、互いに置き換えることができる。その結果、同じ論理関数は、同じ演算子であるが入力を置き換えたいくつかの演算子のうちの別のバブルされたバリアントによってシミュレートできるので、バブルされたバリアントの一部を除外することができる。例えば、ＡＮＤ（０１０）ＸＹ（すなわち、（ＮＯＴ  Ｘ）ＡＮＤ  Ｙ）、およびＡＮＤ（００１）ＸＹ（すなわち、Ｘ  ＡＮＤ  （ＮＯＴ  Ｙ））のどちらも基本セットに含まれていることに留意されたい。なお、表現式ＡＮＤ（００１）ＸＹは、ＡＮＤ（０１０）ＹＸとしてシミュレートすることができ、この入力の置き換えは、コンパイラによって行うことができる。したがって、基本セットからＡＮＤ（００１）を除外することによっても多くは失われない。便宜上、ＡＮＤ（０１０）およびＡＮＤ（００１）のような論理関数を、可換的同等物と称する。本技術は、ＡＮＤを実例演算子として説明している。しかし、ＡＮＤは共通演算子であるため、この場合のＡＮＤには適用されない。なお、本技術は、＝＝＝（演算子の８つのバブルされたバリアントを２つの基本論理関数に削減）、ｗｉｒｅ（８つから１つに削減）、ｔｒｉ０（２つから１つに削減）、ｔｒｉ１（２つから１つに削減）、ｗａｎｄ（５つから１つに削減）、およびｗｏｒ（６つから１つに削減）のような演算子とともに使用し、正味で２４個の論理関数を節約する。
【００４８】
別の選択肢は、算術関数％および＊を直接サポートしないことであり、それらによって導かれた１２個の論理関数が除外されている。関数＋、−、および／は、他の既存の関数をマップする。
【００４９】
更なる技術は、ゲートの出力から次に続くゲートの入力までバブルをプッシュすることである。例えば、ｐｍｏｓ（１００）は、被反転出力を有する。ｐｍｏｓ（１００）ではなく、代わりにｐｍｏｓ（０００）を、次に続くゲートにプッシュされるインバータによって実行することが可能である。インバータは、次のゲートの前にｅｘｔｒａ  ＮＯＴ関数として実行することができる。別様には、インバータは、次のゲートの入力と組み合わせることができる。例えば、ｐｍｏｓ（１００）が＆（０１０）のＡ入力に結合された場合は、ｐｍｏｓ（０００）が＆（０００）のＡ入力に結合されたものとしてシミュレートすることが可能である。ゲートの出力からバブルをプッシュすることで、論理関数の数を最高で２つの因子分削減することができる。この手法は、特に、ｐｍｏｓタイプの関数（ｐｍｏｓ、ｎｍｏｓ、ｔｒａｎｉｆ０、ｔｒａｎｉｆ１、ｂｕｆｉｆ０、ｂｕｆｉｆ１、ｎｏｔｉｆ０、ｎｏｔｉｆ１）に有用である。本技術は、ｐｍｏｓ（１０１）およびｐｍｏｓ（１１１）の除外に使用した。
【００５０】
これらの技術はまた、７０個の論理関数のうち２４＋１２＋２＝３８を削減したが、これは、基本セットのサイズを３２個の論理関数に削減するのに十分である。
【００５１】
これら３つの技術を全て組み合わせることで、基本セットのサイズを３２から次の２４に削減することが可能である。＆（０００）、＆（００１）、＆（０１１）、＾（０００）、＾（００１）、〜（０００）、〜（００１）、＝（０００）、＝＝＝（０００）、ｗｉｒｅ（０００）、ｔｒｉ０（０００）、ｔｒｉ１（０００）、ｗａｎｄ（０００）、ｗｏｒ（０００）、ｐｍｏｓ（０００）、ｐｍｏｓ（００１）、ｐｍｏｓ（０１０）、ｐｍｏｓ（０１１）、ｂｕｆｉｆ０（０００）、ｂｕｆｉｆ０（０１０）、ｌｏｇｉｃ０、ｌｏｇｉｃ１、ｌｏｇｉｃＸ、およびｌｏｇｉｃＺ。なお、依然として２４個の論理関数はブール関数のフィールドに５ビットを必要とするので、３２個から２４個の論理関数への削減は、命令セットのサイズを即時には削減せず、３２個の関数の基本セットを使用することによって、コンパイラをより柔軟にすることができる。その結果、基本セットのサイズの更なる削減はされなかった。しかし、本実施例に示されるように、基本セットに対する多数の他の組み合わせが可能であることは明白である。
【００５２】
真理値表が基本セットに含まれる選択のためのプロセスは、多数の異なるシーケンスで進めることができ、異なる基本セットを選択することができる。加えて、多数の表現式は、論理的に同等である（すなわち、同じ真理値表を生成する）。したがって、論理関数＆（０００）、＆（００１）、＆（０１０）、＆（０１１）、＆（１００）、＆（１０１）、＆（１１０）、＆（１１１）を含む基本セットは、論理関数｜（０００）、｜（００１）、｜（０１０）、｜（０１１）、｜（１００）、｜（１０１）、｜（１１０）、｜（１１１）を含む基本セットと同じである。４状態の定義は、同等の２状態の定義とは異なるので、「＝＝＝」または「ｗａｎｄ」、「ｗｏｒ」および「ｐｍｏｓ」のような４状態の特定の関数には特に注意すべきである。
【００５３】
３２個の論理関数の基本セットは、５ビットのブール関数のフィールドによって符合化することができる。実際に、２＾５は３２であるので、ブール関数のフィールド内に追加ビットを必要とせずに、さらに２つの論理関数を基本セットに追加することが可能である。実現可能なセット内の残りの論理関数は、一般的にコンパイルステージ中に、基本関数の組み合わせに分解される。
【００５４】
図５Ａは、本発明の第１の実施形態による、ＰＥ３０２を示すブロック図である。本実施例では、基本セットがＪ個の論理関数（上述の実施例ではＪ＝３０）を含むものとする。Ｊ個の論理関数のそれぞれは、回路５１０Ａ〜５１０Ｊによって並列に計算される。マルチプレクサ５２０は、ブール関数のフィールドに基づいて、Ｊ個の論理関数のうちのいずれを出力するのかを選択する。この実行は、ハードウエハに集中したものとなるが、高速である。
【００５５】
加えて、図５ＡはＪ個の別個の回路を示しているが、これは明確にするために行ったものである。種々の実行では、いくつかの回路を使用して、２つ以上の論理関数を生成することが可能である。上述の実施例では、基本セットは、ＡＮＤの８つ全てのバブルされたバリアントを含む。８つの別個の回路は、一般的に、８つのバブルされたバリアントの全てを実行する必要はなく、回路の一部（例、基本ＡＮＤ機能）を共有することが可能である。一方では、いくつかの実行は、別個の回路（それぞれの基本論理関数に対して１つの回路）を使用することが可能である。例えば、プロセッサエレメントがＦＰＧＡ上に実行された場合、基本論理関数は、専用のルックアップテーブルによって実行することが可能である（１つを＆（０００）に、別の１つを＆（００１）に、など）。
【００５６】
図５Ａの中のラインのそれぞれは、単一の変数を表す。マルチ状態変数は、一般的に、変数を表すために複数の物理的なラインが必要である。例えば、４状態変数は、一般的に２ビットを使用して符合化される。状態０、１、Ｘ、およびＺは、例えば００、０１、１０、および１１として符号化することが可能である。
【００５７】
図５Ｂは、ＦＰＧＡベースのルックアップテーブルに基づいた図５Ａの変形（すなわち、４つのアドレスビットを使用して１つの出力値を生成する１６ビットメモリのルックアップテーブル）、および物理的なラインを示す図である。より具体的には、図５Ｂに示される回路は、１つがＰＥの片側であり、全てのＰＥは、図５Ｂに示されたものに類似した第２の回路を含む。図５Ｂでは、入力変数Ａは、それぞれビットＡ１およびＡ０のための２つのラインをとる。これは、入力変数Ｂと同じである。したがって、回路５１０Ａは、予め計算された４入力１出力のルックアップテーブルとすることができる。４つの入力は、ビットＡ１、Ａ０、Ｂ１、およびＢ０である。１つの出力は、４状態出力変数の高ビットである。ＭＵＸ５２０は、ブール関数の変数に基づいて、回路５１０Ａ〜５１０Ｊから適切な高ビットを選択する。アーキテクチャが図５Ｂに示されるものに類似した第２の回路は、低ビットの４状態の出力変数を生成する。ルックアップテーブルとして構成された回路５１０Ａ〜５１０Ｊのコンテンツは、通常は同一ではない。したがって、図５Ｂに示されるように、２つの回路に対する要件である。
【００５８】
図６は、図３の回路をどのように実行してマルチ状態論理をサポートするのかを明白に示す図である。図３が、２状態の信号（すなわち、信号ごとにシングルビット、（０，１））をサポートしていた場合、図３に示されるそれぞれの信号ラインは、シングルワイヤとして実行される。図６では、信号は同一であるが、それらの符号化は、４状態（０、１、Ｘ、Ｚ）に移行され−すなわち、信号ごとに２ビット（００、０１、１０、１１）−それらの実行はそれぞれの信号ごとに２つのワイヤとして実現される。
【００５９】
図６では、グラフのどの部分が４状態になったのかを「シャドーイング」によって示す。ブール関数が２状態のための４ビットから４状態のための５ビットに変更された以外は、命令ワードは変更されていない。グラフ内に示される全ての信号は、それぞれの信号のための複数のワイヤを示すことを除いて、依然として同じ信号である。同様に、グラフが８状態の符号化に移行された場合、それぞれの信号は、８状態（０００〜１１１）を表すには、信号ごとに３ビット、または信号ごとに３個のワイヤが必要である。グラフは、変化しない。ＰＥのサイズは、（より複雑な論理関数を実行するために）大きくなる。
【００６０】
上述の実施例を使用することで、２状態の場合、ＰＥは、１ビットの出力を生成するように、図５の１つのインスタンス化を含む。図５のインスタンス化は、１ビットの入力ＡおよびＢを取り、１６の回路５１０Ａ〜５１０Ｊを含み、それぞれが２入力、１出力のルックアップテーブルであり、４ビットのブール関数は適切な出力ビットを選択する。４状態の場合、ＰＥは、図５のインスタンス化を２つ使用し、その１つは、２つの出力ビットのそれぞれを生成するためのものである。図５のそれぞれのインスタンス化は、２ビットの入力ＡおよびＢを取り、３２（２＾５）個の予め計算されたテーブルを含み、それぞれが（最大で）４入力１出力のルックアップテーブルである。これで、５ビットのブール関数は、３２個のテーブルのうちのどれを選択するのかを制御するセレクタとなる。８状態の場合、ＰＥは、図５のインスタンス化を３個使用し、ブール関数のフィールドは、一般的に、より大きなテーブルセットから選択するように大きくなる。例えば、ブール関数のフィールドが８ビットの場合、３個の図５のインスタンス化のそれぞれは、２５６（２＾８）個のテーブルを表す、などとなる。
【００６１】
本発明は、複数の実施形態に関連して上述したが、本発明の範囲内で種々の変更を行うことができる。例えば、上記では２項関数が使用されているが、上述の原理は、多入力の関数に適用することもできる。基本セットは、多入力の関数を含むことが可能である。別様には、特定のタイプの多入力の関数は、例えば基本セットが２項関数だけを含む場合には、２項関数から構成することができる。
【００６２】
２状態および４状態の実施例を上述したが、別の実施例にあるように、他の数の状態も使用することができる。概して、Ｎ状態の２項関数は、Ｎ＾２個のエントリを有する真理値表を有し、それぞれがＮ個の値をとることができる。したがって、Ｎ＾（Ｎ＾２）個の可能な真理値表が存在する。これらの可能性の全てを直接符号化するには、上限が［ｌｏｇ２（Ｎ＾（Ｎ＾２））］ビットの長さのブール関数のフィールドが必要となる。ここで、上限（ｘ）はｘ以上の最小整数であり、ｌｏｇ２（ｘ）はｘのｌｏｇの基底が２であることを示す。基本セットは、Ｎ＾（Ｎ＾２）個未満の論理関数を含むか、またはより少ない数のビットを使用してブール関数のフィールドを符号化することが好ましい。
【００６３】
別の側面では、本発明のシミュレーションプロセッサ１００は、ＡＳＩＣ（特定用途向け集積回路）、またはＦＰＧＡ（フィールドプログラマブルゲートアレイ）、あるいは他のタイプの集積回路内に実現することができる。上別個の回路基板に実行したり、ホストコンピュータ１１０に接続したりする必要もない。別個のホストコンピュータ１１０が存在しない場合がある。例えば、図１を参照すると、ＣＰＵ１１４およびシミュレーションプロセッサ１００は、より密に集積化するか、さらに単一の統合計算デバイスとして実行することさえも可能である。
【００６４】
本発明は、半導体チップのための論理シミュレーションに関して記述されているが、本願明細書に示されるＶＬＩＷプロセッサ／アクセラレータアーキテクチャは、整数論理を使用する他のアプリケーション（すなわち、整数変数を使用した演算）にも使用することができる。例えば、プロセッサアーキテクチャは、固定幅演算（例、整数プログラミング）にも、または（浮動小数点演算は、非常に長い整数変数にもかかわらず、最終的に整数変数に依存するので）浮動小数点演算であっても適用することが可能である。
【００６５】
１つの可能な実行では、命令セットは、合計１６個の関数、＋、−、＊、％、／、≪、≫、〜、２の補数、＝（割り当て）、＆、｜、＾、＜、＞、および＝＝、すなわち、関数を定義する命令部分の４ビットをサポートする。一実施形態では、図５に示された基本アーキテクチャは、この状態まで直接的に拡張される。例えば、ＰＥが４ビットの整数演算を実行する場合、関数５１０Ａ〜５１０Ｊのそれぞれに流れるそれぞれのオペランドＡおよびＢは４ビット幅であり、セレクタ５２０の出力も４ビット幅となる（繰上げは除外する）。１６の回路５１０Ａ〜５１０Ｊが存在し、それぞれが命令セットによってサポートされる関数のうちの１つを実行する。回路５１０Ａが＋を実行し、回路５１０Ｂが−を実行する、などとなる。マルチプレクサ５２０は、（この場合、演算関数のような名前がより適切であるが）４ビットフィールドのブール関数に基づいて適切な出力を選択する。４ビットの整数演算に基づいたアーキテクチャは、ニブルアーキテクチャとしても知られている。ニブルアーキテクチャを実行するためのＰＥは、図５に示されたもの以外の手法に基づくこともできる。
【００６６】
ニブル演算は、８ビット（バイト）、１６ビット、またはより長い演算を構築するためのビルディングブロックとして使用することができる。例えば、乗算（＊）演算子は、ｎ＊ｎビットの乗算を意味するものであり、これは大きなシリコン面積を取り得る。したがって、８ビットの乗算器が所望されるには、図５を、８ビットのワイドオペランドＡおよびＢに適合させるのではなく、図５は、４ビット幅のオペランドＡおよびＢ（すなわち、４ビットの乗算器）、および８ビットの乗算器を生成するように組み合わせた種々の４ビット演算に適合させられることができる。具体的には、バイト幅のオペランドＡおよびＢは、それぞれ２つのニブルに分解することができる。ＡＨが上位４ビットを表し、ＡＬが下位４ビットを表す、Ａ＝ＡＨ＋ＡＬとしてみる。Ａが８’ｂ０１０１１１００である場合、ＡＨは８’ｂ０１０１００００となり、ＡＬは８’ｂ００００１１００となる。同様に、Ｂ＝ＢＨ＋ＢＬである。ここで、Ａ＊Ｂ＝ＡＨ＊ＢＨ＋ＡＨ＊ＢＬ＋ＡＬ＊ＢＨ＋ＡＬ＊ＢＬである。右辺は、４ビットの入力、８ビットの出力演算を使用して計算することができる。この手法では、８ビットの乗算Ａ＊Ｂは、４つの４ビットないし８ビットの乗算、および３つの８ビットの加算演算をとる。この手法は、一般的に、全幅演算Ａ＊Ｂよりも占有する領域が少ない。融合乗加算（ｆｕｓｅｄ  ｍｕｌｔｉｐｌｙ−ａｄｄ：ＦＭＡＤＤ）のような他の拡張も実現することができる。上述の基本的手法は、特定の関数を低幅の演算（ｌｏｗｅｒ−ｗｉｄｔｈ  ａｒｉｔｈｍｅｔｉｃ）に実行するだけであるが、他の高幅の演算（ｈｉｇｈｅｒ−ｗｉｄｔｈ  ａｒｉｔｈｍｅｔｉｃ）に拡張することができる。
【００６７】
このアーキテクチャでは、ＶＬＩＷプロセッサの動作周波数は、一般的に、プログラムメモリ１２１から命令を取り込むためのメモリアクセス時間によって決定され、シリコン内部で実現可能な周波数に比較してはるかに遅い。その結果、例えば回路５１０Ａ内部の乗算関数（＊）のような複雑な関数のマッピングであっても、回路５１０Ａの出力を生成する前の複数の論理ステップを可能にすることによって実行可能になる。これによって、ＰＥの一部または全てがオペランドＡおよびＢの両方のためのマルチビット入力、およびマルチビット出力信号を扱うことができる構造を可能にする。例えば、この技術によって、ＰＥは、２つの６４ビット入力を受け入れることができ、回路５１０Ａ〜５１０Ｊは、上述した１６の演算関数を実行することができ、また、６４ビット出力を生成することができる。すなわち、ＰＥは、倍精度浮動小数点演算（ＦＬＯＰ）を実行することが可能である。グリッド内のｎ個のＰＥによって、それぞれのクロックサイクルでｎ個のＦＬＯＰを計算することが可能である。この手法では、命令が外部メモリから来るので、このクロックサイクルごとのｎ個のＦＬＯＰは持続可能な速度である。
【００６８】
加えて、特定の幅の演算の実行に必要な論理リソース（すなわち、ＰＥのサイズ）は、一般的に幅とともに大きくなる。したがって、別のバリエーションでは、異なるＰＥは、異なる機能および／または異なる幅を有することが可能である。ＰＥには、８ビットの演算を行うことできるものもあれば、４ビットの演算に制限されるものもある。あるいは、ＰＥには、４ビット入力、８ビット出力演算を扱うものもあれば、８ビット入力、８ビット出力演算を扱うものもある。個々のＰＥは、幅がｎビットの整数演算からｎビットの浮動小数点関数まで異なる場合があるが、演算関数のフィールド長を同じままにすることができることに留意されたい。したがって、ビット幅のＶＬＩＷプロセッサが実現され、命令は変化しない。ＶＬＩＷプロセッサの幅は、８ビット、１６ビット、および２４ビットのような、また、信号処理、３２および６４ビット演算に使用される、浮動小数点演算または他の組み合わせで使用される種々のアプリケーションを目標とすることができる。
【００６９】
上述の説明では、元々は論理シミュレーションという状況で導入された基本的なＶＬＩＷアーキテクチャを、どのように演算関数に拡張できるのかを説明した。アーキテクチャは、ベクトルプログラミングに対する類似した方法で拡張することができる。その結果、ＶＬＩＷアーキテクチャは、単なる論理シミュレーション以外に、多数のアプリケーションの利点を有する。固有のパラレリズムを有するアプリケーションは、このプロセッサアーキテクチャの好適な代表である。科学演算の分野の例には、気候モデリング、石油およびガス探査のための地球物理学的および地震分析、核シミュレーション、計算流体力学、財務モデリングおよび材料力学、有限要素モデリング、およびＭＲＩのようなＸ線断層撮影が挙げられる。生命科学およびバイオテクノロジの例には、計算機化学および生物学、生物学的システムのタンパク質フォールディングおよびシミュレーション、ＤＮＡシーケンシング、薬理ゲノミクス、およびコンピュータ内での創薬（ｉｎ  ｓｉｌｉｃｏ  ｄｒｕｇ  ｄｉｓｃｏｖｅｒｙ）が挙げられる。ナノテクノロジーのアプリケーションには、分子モデリングおよびシミュレーション、密度関数理論、分子間ダイナミクス、および量子力学的解析が挙げられる。デジタルコンテンツの製作の例には、アニメーション、合成およびレンダリング、ビデオ処理および編集、および画像処理が挙げられる。したがって、本発明の開示は、以下の特許請求の範囲に記載された本発明の範囲の例証を目的としたものであるが、これを限定するものではない。
【図面の簡単な説明】
【００７０】
【図１】図１は、本発明の一実施形態による、ハードウェア加速論理シミュレーションシステムのブロック図を示す。
【図２】図２は、本発明の一実施形態による、ハードウェア加速論理シミュレーションシステムのシミュレーションプロセッサを示すブロック図である。
【図３】図３は、本発明の第１の実施形態による、シミュレーションプロセッサの単一プロセッサユニットを示す回路図である。
【図４】図４は、４状態２進法ＡＮＤのバブルされたバリアントの真理値表を示す。
【図５Ａ】図５Ａは、本発明の第１の実施形態による、プロセッサエレメントを示すブロック図である。
【図５Ｂ】図５Ｂは、本発明の別の実施形態による、プロセッサエレメントを示すブロック図である。
【図６】図６は、４状態プロセッサユニットのブロック図である。
【図１】
2009516870.tif 000004
【図２】
2009516870.tif 000005
【図３】
2009516870.tif 000006
【図４】
2009516870.tif 000007
【図５Ａ】
2009516870.tif 000008
【図５Ｂ】
2009516870.tif 000009
【図６】
2009516870.tif 000010