(57)【要約】【解決手段】並列処理システムおよび方法が、制御フロー型のプロセッサである第１のプロセッサと、データフロー型のプロセッサである第２のプロセッサとを含むコンピュータシステムを備える。第２のプロセッサは、第２のメモリシステムに接続されており、第２のメモリシステムは、命令を実行順に格納すると共に、対応するイベントデータを実行順に格納する。命令のうちの最初の命令は、第２のメモリシステム内の所定の位置に格納される。システムは、さらに、第１のプロセッサおよび第２のプロセッサに接続された実行時イベント挿入・制御ユニットを備える。第１のプロセッサ、第２のプロセッサ、および、実行時イベント挿入・制御ユニットは、共通の集積回路上にある。【選択図】図４Ｂ
2014523569.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
制御フロー型のプロセッサである第１のプロセッサと、
データフロー型のプロセッサである第２のプロセッサであって、第２のメモリシステムに接続され、前記第２のメモリシステムは、複数の命令を実行順に格納すると共に、対応する複数のイベントデータを実行順に格納し、前記複数の命令のうちの最初の命令は、前記第２のメモリシステム内の所定の位置に格納される、第２のプロセッサと、
前記第１のプロセッサおよび前記第２のプロセッサに接続された実行時イベント挿入・制御ユニットと、
を備え、
前記第１のプロセッサ、前記第２のプロセッサ、および、前記実行時イベント挿入・制御ユニットは、共通の集積回路上にある、システム。
【請求項２】
請求項１に記載のシステムであって、前記第１のプロセッサは、第１のキャッシュメモリ、第１のメモリコントローラ、および、第１のＣＰＵを備え、前記第１のプロセッサは、第１のメモリシステムに接続されている、システム。
【請求項３】
請求項１に記載のシステムであって、前記第２のプロセッサは、第２のキャッシュメモリ、第２のメモリコントローラ、および、並列に接続された複数のＭＩＳＡ処理コアを備える、システム。
【請求項４】
請求項３に記載のシステムであって、前記第２のプロセッサは、通信ユニットによって前記第１のプロセッサに接続されている、システム。
【請求項５】
請求項３に記載のシステムであって、前記第２のキャッシュメモリは、命令キャッシュメモリおよびイベントキャッシュメモリを含む、システム。
【請求項６】
請求項５に記載のシステムであって、前記第２のメモリシステムは、命令メモリおよびイベントメモリを含み、前記命令メモリは、第１の対応するメモリコントローラによってプリフェッチユニットを介して制御キャッシュメモリに接続され、Ｅイベントメモリは、第２の対応するメモリコントローラによって前記プリフェッチユニットを介して前記イベントキャッシュメモリに接続され、Ｏイベントメモリは、第３の対応するメモリコントローラによって前記プリフェッチユニットを介してＯキャッシュメモリに接続されている、システム。
【請求項７】
請求項６に記載のシステムであって、前記第２のプロセッサは、さらに、プリフェッチユニットに接続されたイベントＦＩＦＯ待ち行列を備える、システム。
【請求項８】
請求項３に記載のシステムであって、前記複数のＭＩＳＡ処理コアは、１から約１２８のＭＩＳＡ処理コアを含む、システム。
【請求項９】
請求項１に記載のシステムであって、前記第２のプロセッサは、さらに、前記複数のＭＩＳＡ処理コアの出力に接続された比較ユニットを備える、システム。
【請求項１０】
設計をテストする方法であって、
第１のコンパイラでテストベンチアプリケーションをコンパイルする工程と、
テストベンチプロセッサに接続されたテストベンチメモリシステムに前記コンパイルされたテストベンチアプリケーションをロードする工程であって、前記テストベンチプロセッサは、制御フロー型のプロセッサである、工程と、
回路シミュレータアプリケーションで設計をシミュレートする工程と、
第２のコンパイラで前記シミュレートされた設計をコンパイルする工程と、
設計プロセッサに接続された設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程であって、前記設計プロセッサは、データ型のプロセッサであり、実行時イベント挿入・制御ユニットによって前記テストベンチプロセッサに接続され、前記設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程は、複数の命令を格納する工程、および、対応する複数のイベントデータを格納する工程を含み、前記複数の命令のうちの最初の命令は、前記設計メモリシステム内の所定の位置に格納される、工程と、
前記テストベンチプロセッサでの対応する最初の命令の出力に従って、前記設計プロセッサで最初の命令を実行する工程と、
を備える、方法。
【請求項１１】
請求項１０に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの出力結果を、現行データ値と比較する工程を備える、方法。  
【請求項１２】
請求項１１に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と同じ場合に、次の命令をロードする工程を備える、方法。
【請求項１３】
請求項１２に記載の方法であって、前記次の命令をロードする工程は、
後続の命令を制御メモリキャッシュにロードする工程と、
それと同時に、対応する後続のイベントデータをイベントデータキャッシュにロードする工程と、
を含む、方法。
【請求項１４】
請求項１１に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と異なる場合に、前記出力結果を格納する工程を備える、方法。
【請求項１５】
請求項１４に記載の方法であって、前記出力結果を格納する工程は、演算キャッシュメモリに前記出力結果を格納する工程と、前記設計プロセッサに次の命令をロードする工程と、を含む、方法。
【請求項１６】
請求項１０に記載の方法であって、前記第１のコンパイラは、前記第２のコンパイラと機能的に等価である、方法。
【請求項１７】
請求項１０に記載の方法であって、前記第１のコンパイラおよび前記第２のコンパイラは、Ｃコンパイラである、方法。
【請求項１８】
請求項１０に記載の方法であって、第２のコンパイラで前記シミュレートされた設計をコンパイルする工程は、ＭＩＳＡコンパイラで前記シミュレートされた設計をコンパイルした後に、前記第２のコンパイラで前記ＭＩＳＡコンパイルされた設計をコンパイルする工程を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、マイクロプロセッサの動作およびアーキテクチャに関し、特に、メモリアクセスを改善された拡張可能なマイクロプロセッサのためのシステム、方法、および、装置に関する。
【背景技術】
【０００２】
メインメモリのアクセス待ち時間は、１または複数の典型的なプロセッサを有する典型的なサーバに配備された多くのアプリケーションの性能に影響を与える最大の要因の１つである。集積回路設計の機能検証は、平均よりも長いメモリ待ち時間を有するかかるアプリケーションの１つである。長いメモリ待ち時間は、ランタイム速度を実質的に遅くする。
【０００３】
メモリ待ち時間は、典型的なサーバプラットフォーム上の多くの汎用アプリケーション（例えば、検証アプリケーション）の性能を低下させる。典型的なプロセッサアーキテクチャは、制御フロープロセッサ（例えば、フォン・ノイマン）である。プログラムは、制御フロープロセッサ内の一連のアドレス可能な命令である。アドレス可能な各命令は、オペランドの記憶場所と共に演算を指定するか、もしくは、他の命令への制御の条件付きまたは無条件の移行を指定する。実行フローのどの時点でも、次の命令のアドレスは知ることができず、プロセッサが次の命令に着手した時に初めてわかる。
【０００４】
検証アプリケーションで検証される設計内の要素を記述するために、一連の命令が用いられる。設計内の要素の機能を評価する一連の命令を実行するには、評価に必要なデータオペランドをフェッチするために、プロセッサのメモリ階層にわたって頻繁なアクセスが必要になる。
【０００５】
設計構成は、設計検証処理の始めに知られる。検証される設計は、通例、設計内の要素の多くが、評価サイクル内の或る時点に設計内の他の要素へのデータ依存も制御依存もなしに評価されうるため、同時に評価されうる点で、高度に並列である。設計構成、その中の個々の要素、および、その相互接続性は、設計検証処理中に変化しない。設計および構成は、設計検証処理中に変化しないが、設計要素を通したデータフローは、通例、検証アプリケーション（例えば、テストベンチ）の他のコンポーネントによって引き起こされた通りに変化する。
【０００６】
高度に並列の設計は、市販のソフトウェアパッケージであってよい典型的なシミュレータアプリケーションプログラムによって直列化される。典型的なシミュレータソフトウェアパッケージは、設計をＣプログラムに変換する。次いで、設計を記述するＣプログラムは、標準的なＣコンパイラ（例えば、ＧＮＵコンパイラコレクション型のコンパイラまたは任意の他の適切なコンパイラ）によってコンパイルされ、メモリの任意の利用可能な記憶場所にロードされる。この処理は、典型的な制御フロー型のプロセッサの制御フロー処理モデルを満たすためのものである。実行時のメモリ待ち時間は、命令実行のランダム性およびメインメモリＤＲＡＭアクセスのランダム性のために悪化する。
【０００７】
実行はオペランドの利用可能性によって駆動されるため、データフロー処理モデルがより効率的な場合がある。しかしながら、データフロー処理モデルは、構造として効率的に機能せず、設計の接続性が、メモリ内に保たれる必要があるが、それは、標準的なコンパイル技術で行うことができない。
【０００８】
図１は、典型的なサーバベースの検証プラットフォーム１００を示すブロック図である。検証される設計１０２は、ＲＴＬ形態であってもゲート形態であってもよく（例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬなど）、シミュレータアプリケーション１０４によってコンパイルされる。シミュレータアプリケーション１０４は、標準的なＣコンパイラ１０６およびデータ構造１１２を用いて設計をコンパイルし、典型的なサーバ１２０のメモリシステム１０８にロードする。メモリシステム１０８は、ＤＲＡＭ１０８Ａを備える。サーバ１２０は、さらに、標準的なＣＰＵ１２２と、キャッシュメモリ１２４と、システムコントローラ１２６と、マスストレージ１２８（例えば、ディスクまたはハードドライブまたは他の適切なマスストレージ技術）とを備える。
【０００９】
検証される設計１０２を制御および駆動するアプリケーションは、テストベンチ１１０と呼ばれる。テストベンチ１１０もコンパイルされ、次いで、サーバのメモリシステム１０８にロードされる。検証されるコンパイル済みの設計１０２およびコンパイル済みのテストベンチ１１０は、実行時にリンクされ、メモリシステム１０８内の同じメモリレイアウト空間を共有する。データ構造１１２は、システム用１１２Ａ、シミュレータ用１１２Ｂ、設計用１１２Ｃ、および、テストベンチ用１１２Ｄのデータおよび命令を含む。
【００１０】
テストベンチアプリケーション１１０は、しばしば、同じコンパイラ１０６Ｃを用いて、および／または、Ｃコンパイラ１０６Ａへの入力のための変換を経た後に、別個にコンパイルされる。典型的なサーバ１２０は、検証アプリケーションを実行するために用いられる。サーバ１２０は、検証アプリケーションのソフトウェアエコシステムのためのプラットフォームとして用いられる。リンカ１０６Ｂが、テストベンチアプリケーションおよび設計シミュレーションを連結する。ローダ１０６Ｄが、コンパイル、連結、および、結合されたテストベンチアプリケーション１１０と、設計１０２とを、システムメモリ１０８にロードする。テストベンチ１１０は、設計１０２のための刺激を生成するため、アプリケーションのランタイム実行へのゲートとして機能し、さらに、前のテストベンチ１１０の刺激が評価されると、応答を確認できる。
【００１１】
テストベンチ１１０アプリケーションと設計１０２とは、しばしば、異なった矛盾するプロファイルを有する。テストベンチ１１０アプリケーションは、高度に直列で並列化不可能なコードであるが、設計１０２は、高度に並列であり、シミュレータアプリケーションプログラムによって直列コードに編成されて、制御フロープロセッサ実行モデルに適合する。典型的なＣＰＵ１２２を備える典型的なサーバ１２０は、１つの実行可能ファイルにコンパイルされた異なるタイプのソフトウェアアプリケーションのかかる奇妙な混合を効率的に実行するよう最適化されていない。結果として、メモリ待ち時間が過度に長くなる。
【００１２】
メモリ待ち時間は、プロセッサ速度と同じ割合で改善しない。半導体産業の先例に基づくと、メモリ待ち時間は、歴史的に、１０年ごとに約２倍の割合で改善してきた。したがって、メモリ待ち時間は、多くのアプリケーションの処理を遅くするボトルネックである。
【００１３】
検証アプリケーションの互換性能を改善する以前の試みは、プログラム可能なソリューションを実現できなかった。ほとんどすべての進歩が、アクセラレータおよびエミュレータに由来するものであった。アクセラレータは、論理合成と、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または特定用途向け集積回路（ＡＳＩＣ）へのマッピングとによって、設計の合成可能な部分を加速するだけである。アクセラレータは、上述のテストベンチを加速してシームレスに実行することができない。エミュレータおよびアクセラレータの両方を用いて、テストベンチアプリケーションは、標準的なサーバ上で実行し、ＦＰＧＡまたはＡＳＩＣ上で以前に合成された設計と通信チャネルを通して通信しなければならない。通信チャネルを通したテストベンチと設計との間の通信は、検証アプリケーション全体の実行を劇的に遅くする。設計、テストベンチ、生産性ソフトウェアの遅延と、通信時間、および、処理時間から、各命令の実行に必要な総時間遅延が得られる。
【００１４】
以上の観点から、メモリ待ち時間を実質的または完全に排除したアプリケーションのより効率的な実行を提供することで、アプリケーションがより効率的かつ高速で実行することを可能にするシステム、方法、または、装置が求められている。
【発明の概要】
【００１５】
概して、本発明は、メモリ待ち時間を低減または完全に排除したより効率的なアプリケーションの実行を提供することで、アプリケーションがより効率的かつ高速で実行することを可能にするシステム、方法、または、装置を提供することによって、上記の要求を満たす。本発明は、処理、装置、システム、コンピュータ読み取り可能な媒体、または、デバイスなど、種々の形態で実施できることを理解されたい。以下では、本発明の実施形態をいくつか説明する。
【００１６】
一実施形態は、コンピュータシステムを提供しており、そのシステムは、制御フロー型のプロセッサである第１のプロセッサと、データフロー型のプロセッサである第２のプロセッサとを備える。第２のプロセッサは、第２のメモリシステムに接続されており、第２のメモリシステムは、設計の接続性に基づいてそこに格納された命令と、対応するイベントとを含む。システムは、さらに、第１のプロセッサおよび第２のプロセッサに接続された実行時イベント挿入・制御ユニットを備える。第１のプロセッサ、第２のプロセッサ、および、実行時イベント挿入・制御ユニットは、共通の集積回路上にある。
【００１７】
第１のプロセッサは、第１のキャッシュメモリ、第１のメモリコントローラ、および、第１のＣＰＵを備えてよく、第１のプロセッサは、第１のメモリシステムに接続されてよい。第２のプロセッサは、第２のキャッシュメモリ、第２のメモリコントローラ、並列に接続された複数のモンタナ命令セットアーキテクチャ（ＭＩＳＡ）処理コアを備えてよい。
【００１８】
第２のプロセッサは、通信ＦＩＦＯによって第１のプロセッサに接続されてよい。第２のキャッシュメモリは、命令キャッシュメモリおよびイベントキャッシュメモリを含んでよい。第２のメモリシステムは、命令メモリおよびイベントメモリを含んでよく、命令メモリは、第１の対応するメモリコントローラによってプリフェッチユニットを介して命令キャッシュメモリに接続され、イベントメモリは、第２の対応するメモリコントローラによってプリフェッチユニットを介してイベントキャッシュメモリに接続される
【００１９】
第２のプロセッサは、さらに、プリフェッチユニットに接続されたイベントＦＩＦＯ待ち行列を備えてよい。複数のＭＩＳＡ処理コアは、１から約１２８のＭＩＳＡ処理コアを含む。
【００２０】
別の実施形態は、設計をテストする方法を提要しており、その方法は、第１のコンパイラでテストベンチアプリケーションをコンパイルする工程と、テストベンチプロセッサに接続されたテストベンチメモリシステムに、コンパイルされたテストベンチアプリケーションをロードする工程と、を備える。テストベンチプロセッサは、制御フロー型のプロセッサである。設計が、第２のコンパイラでコンパイルされる。コンパイルされた設計は、設計プロセッサに接続された設計メモリシステムにロードされる。設計プロセッサは、通信ＦＩＦＯによってテストベンチプロセッサに接続される。通信ＦＩＦＯは、実行時イベント挿入・制御ＦＩＦＯを含む。設計メモリシステムに、コンパイルされた設計アプリケーションをロードする工程は、設計の接続性の順に複数の命令を格納する工程、および、対応するイベントデータを格納する工程を含む。最初の命令が、テストベンチプロセッサでの対応する最初の命令の出力に従って、設計プロセッサで実行される。
【００２１】
方法は、さらに、設計プロセッサで実行された最初の命令からの出力結果を現行データ値と比較する工程を備えてもよい。設計プロセッサで実行された最初の命令からの出力結果が現行データ値と異なる場合、次の命令がロードされる。次の命令をロードする工程は、後続の命令を制御メモリキャッシュにロードする工程と、それと同時に、対応する後続のイベントデータをイベントデータキャッシュにロードする工程と、を含んでよい。
【００２２】
方法は、さらに、設計プロセッサで実行された最初の命令からの出力結果が現行データ値と異なる場合に、出力結果を格納する工程を備えてもよい。出力結果を格納する工程は、イベントキャッシュメモリに出力結果を格納する工程と、設計プロセッサの命令キャッシュメモリに次の命令をロードする工程と、を含んでよい。
【００２３】
第１のコンパイラは、第２のコンパイラと機能的に等価であってよい。第１のコンパイラおよび第２のコンパイラは、Ｃコンパイラであってよい。第２のコンパイラで設計をコンパイルする工程は、ＭＩＳＡコンパイラで設計をコンパイルする工程を含んでよい。
【００２４】
本発明のその他の態様および利点については、本発明の原理を例示した添付図面を参照しつつ行う以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００２５】
添付の図面を参照して行う以下の詳細な説明から、本発明を容易に理解することができる。
【００２６】
【図１】典型的なサーバベースの検証プラットフォームを示すブロック図。
【００２７】
【図２Ａ】本発明の実施形態に従って、並列プロセッサシステムを示すブロック図。
【００２８】
【図２Ｂ】本発明の実施形態に従って、テストベンチプロセッサを示すブロック図。
【００２９】
【図２Ｃ】本発明の実施形態に従って、設計プロセッサを示すブロック図。
【００３０】
【図３】本発明の実施形態に従って、実行時イベント挿入・制御ユニットを示すブロック図。
【００３１】
【図４Ａ】本発明の実施形態に従って、設計プロセッサを示すより詳細なブロック図。
【００３２】
【図４Ｂ】本発明の実施形態に従って、ＭＩＳＡコアを示すブロック図。
【００３３】
【図４Ｃ】本発明の実施形態に従って、データ構造を示す図。
【００３４】
【図５】本発明の実施形態に従って、代表的な設計検証システムに含まれる並列プロセッサシステムを示す図。
【００３５】
【図６Ａ】本発明の一実施形態に従って、並列プロセッサでの実行に向けて設計を準備する際に実行される方法動作を示すフローチャート。
【００３６】
【図６Ｂ】本発明の一実施形態に従って、並列プロセッサでの実行に向けてアプリケーションを準備する際に実行される方法動作を示すフローチャート。
【００３７】
【図６Ｃ】本発明の一実施形態に従って、代表的な設計検証システム５００に含まれる並列プロセッサを動作させる際に実行される方法動作を示すフローチャート。
【００３８】
【図７】本発明の実施形態に従って、ＦＰＧＡプロトタイプ並列システムを示すブロック図。
【発明を実施するための形態】
【００３９】
ここで、メモリ待ち時間を低減した論理回路およびシステムの検証アプリケーションのより効率的な実行を提供することで、検証アプリケーションがより効率的かつ高速で実行することを可能にするシステム、方法、および、装置のいくつかの代表的な実施形態について説明する。当業者にとって明らかなように、本発明は、本明細書に記載する具体的な詳細事項の一部または全てがなくとも実施可能である。
【００４０】
メインメモリ待ち時間は、設計の機能を検証するために用いられる検証アプリケーションを含む多くのアプリケーションの性能を制限する主な要因である。メモリ待ち時間のボトルネックによる論理回路およびシステムのシミュレーションのシステム性能（例えば、処理速度）を改善する１つのアプローチは、以下で詳述する拡張可能な並列プロセッサアーキテクチャによって提供されうる。実証された性能の改善は、通例用いられるプロセッサシステムと桁違いの改善である。メインメモリ待ち時間を最小化するために、ハードウェアおよびソフトウェア技術の組み合わせが用いられる。設計に固有の並列性が、イネーブリングハードウェアおよびソフトウェア手段として用いられる。
【００４１】
論理回路およびシステムの代表的な検証アプリケーションに対するメモリ待ち時間のボトルネックは、後にプロセッサメモリシステムにロードされる一様な命令セットに設計をコンパイルすることによって低減される。このように設計要素を表す命令は、設計を含む（例えば、固定された既知のアドレスにある）すべての他の命令に対する要素の位置についての情報を有する。これは、プロセッサが、設計の構成全体、メモリ内での設計要素の位置、および、メモリシステム内でのデータ依存性を「知る」ことを可能にする。このように、設計は、効率的な命令セットアーキテクチャにコンパイルされて、メモリシステム内の既知の位置に格納されるため、実質的なメモリ待ち時間を全く招くことなしにストリーミング方式でアクセスできる。
【００４２】
本明細書に記載の並列プロセッサシステムは、アクセラレータおよびエミュレータを用いて論理回路を加速し、論理合成を通して設計の合成可能な部分を加速するという過去の試みとは異なる。並列プロセッサシステムは、制御フローおよびデータフロー処理を組み合わせてただ１つのエンティティにする。
【００４３】
図２Ａは、本発明の実施形態に従って、並列プロセッサシステム２００を示すブロック図である。システム２００は、並列で動作するテストベンチプロセッサ２０２および設計プロセッサ２０４を備える。実行時イベント挿入・制御ロジック２０６が、テストベンチプロセッサ２０２および設計プロセッサ２０４をリンクする。実行時、テストベンチプロセッサ２０２は、設計プロセッサ２０４でシミュレートされる設計にテストを適用する。
【００４４】
テストベンチプロセッサ２０２は、制御フロー型の処理がテストベンチアプリケーションを処理する最も効率的な方法であるため、制御フロー型のプロセッサである。テストベンチプロセッサ２０２は、任意の適切な縮小命令セットコンピューティング（ＲＩＳＣ）プロセッサであってよい。テストベンチプロセッサ２０２は、テストベンチアプリケーションを処理する専用である。テストベンチプロセッサ２０２は、テストベンチアプリケーションを実行して、設計プロセッサ２０４に出力される刺激（例えば、イベント）を生成する。
【００４５】
テストベンチプロセッサ２０２の性能は、さらに速い実行時間を可能にする予測可能、決定論的、かつ、高速のアクセス時間を有する同期型ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）の代わりに、テストベンチメモリ２０２Ａのオフチップ・スタティックランダムアクセスメモリ（ＳＲＡＭ）によって強化される。テストベンチメモリ２０２Ａは、任意のサイズであってよい。例えば、テストベンチメモリ２０２Ａは、制御メモリ２１２Ａおよびイベントデータメモリ２１２Ｂ、２１２Ｃで用いられるメモリ速度に適合するように、２５０ＭＨｚ  ＱＤＲまたは１ＧＨｚの通常のクロック速度で動作する約１６ＭＢであってよい。
【００４６】
必要に応じて、並列で動作する複数のテストベンチプロセッサ２０２が備えられてもよい。例えば、第１のテストベンチプロセッサ２０２’が、テストベンチアプリケーションを処理している間に、第２のテストベンチプロセッサ２０２’’が、入力／出力の多いタスクを実行し、第３のテストベンチプロセッサ２０２’’’が、例外、エラー、回復タスク、および、他の関連した例外イベントを管理するものとしてよい。
【００４７】
設計プロセッサ２０４は、データフロー型のプロセッサが設計を評価するのに最も効率的なプロセッサであるため、データフロー型のプロセッサである。設計は、コンパイルされて、専用のメモリにロードされ、専用の設計プロセッサ２０４に割り当てられる。設計プロセッサ２０４は、命令によって表された設計要素を実行する。
【００４８】
２つのプロセッサ２０２および２０４を並列で用いることにより、メモリ待ち時間のボトルネックを低減する。改良されたメモリ利用スキームが、さらに、メモリ待ち時間のボトルネックを低減する。上述のように、テストベンチおよび設計が同じＣＰＵで処理され直列化される典型的なサーバおよびシミュレータソリューションと異なり、本発明の並列プロセッサシステム２００は、各々の処理が専用のプロセッサに割り当てられるため、テストベンチ処理を設計処理から切り離す。並列プロセッサシステム２００のさらなる利点は、システム２００の拡張性がアムダールの法則の原理によって制限されないことである。
【００４９】
テストベンチプロセッサ２０２および設計プロセッサ２０４は、１つの集積回路（すなわち、チップ）に備えられてよいため、ほとんどの通信遅延を避けることができる。テストベンチプロセッサ２０２および設計プロセッサ２０４は、同じクロック境界内に備えられてもよい。
【００５０】
テストベンチアプリケーション１１０が、第１のコンパイラ１０６Ａでコンパイルされる。次いで、コンパイルされたテストベンチアプリケーションは、テストベンチプロセッサ２０２用のテストベンチプロセッサメモリにロードされる。
【００５１】
設計１０２が、第２のコンパイラ１０６Ｂでコンパイルされる。次いで、コンパイルされた設計は、設計プロセッサ２０４用の設計プロセッサメモリ２１２Ａ、２１２Ｂ、２１２Ｃにロードされる。
【００５２】
第１のコンパイラ１０６Ａおよび第２のコンパイラ１０６Ｂは、同じコンパイラであっても異なるコンパイラであってもよいことを理解されたい。少なくとも１つの実施形態において、第１のコンパイラ１０６Ａおよび第２のコンパイラ１０６Ｂは同じコンパイラであるが、一部の例では、２つの異なるコンパイラを用いた方が効率的な場合もある。
【００５３】
図２Ｂは、本発明の実施形態に従って、テストベンチプロセッサ２０２を示すブロック図である。テストベンチプロセッサ２０２は、テストベンチプロセッサの外部のシステムと通信するためのＩ／Ｏインターフェース２２０を備える。テストベンチプロセッサ２０２は、さらに、ＣＰＵコア２０２Ｂと、少なくとも１レベルのキャッシュメモリ２０２Ｃと、メモリコントローラ２１６と、を備える。メモリコントローラ２１６は、テストベンチメモリ２０２Ａにアクセスして制御するために、テストベンチプロセッサ２０２によって用いられる。テストベンチメモリ２０２Ａは、テストベンチコードを格納するために用いられる。
【００５４】
Ｉ／Ｏインターフェース２２０は、必要に応じて、ＵＳＢ、イーサネット（登録商標）、ＰＣＩエクスプレス、および、ＨＴ（ハイパートランスポート）など、１または複数の標準的なインターフェースを含んでよい。Ｉ／Ｏインターフェース２２０は、並列プロセッサ２００と、並列プロセッサが接続されるシステムの残り部分との間の通信を提供する。様々なインターフェースを配備することにより、並列プロセッサシステム２００と、システムの残り部分との間でデータを同時に転送することが可能である。
【００５５】
図２Ｃは、本発明の実施形態に従って、設計プロセッサ２０４を示すブロック図である。設計プロセッサ２０４は、複数のＭＩＳＡコア２０８と、イベント先入れ先出し（ＦＩＦＯ）待ち行列２１０と、命令キャッシュメモリ４０６およびイベントキャッシュメモリ４０８を含むメモリシステムと、を備える。
【００５６】
図３は、本発明の実施形態に従って、実行時イベント挿入・制御ユニット２０６を示すブロック図である。実行時イベント挿入・制御ユニット２０６は、書き込み要求先入れ先出し（ＦＩＦＯ）バッファ３０８と、読み出し要求先入れ先出し（ＦＩＦＯ）バッファ３１０と、Ｉ／Ｏ処理ユニット２０７と、を備える。
【００５７】
動作時、テストベンチプロセッサ２０２は、読み出しおよび書き込み要求３０２を読み出しおよび書き込み要求ＦＩＦＯ３１０、３０８に送信する。書き込み要求ＦＩＦＯ３０８は、書き込み要求を処理のためにイベント処理ユニット３１２に送信する。読み出し要求ＦＩＦＯ３１０は、所望の記憶場所にアクセスするために、読み出し要求をＩ／Ｏ処理ユニット２０７に送信する。テストベンチアプリケーションは、いつでも介入して、設計検証に用いられるイベント入力データを変更することができる。テストベンチの読み出しおよび書き込み要求３０２は、それぞれのＦＩＦＯ３０８、３１０に格納される。次いで、テストベンチの読み出しおよび書き込み要求３０２は、受信順に処理される。
【００５８】
イベント処理ユニット３１２は、設計プロセッサ２０４がテストベンチ読み出しおよび書き込み要求３０２を処理する準備ができていない時に、待機要求３０４の制御信号をアサートする。テストベンチプロセッサ２０２は、待機要求３０４の制御信号を受信すると、テストベンチプロセッサが待機しなければならないと決定する。
【００５９】
実行時イベント挿入・制御ユニット２０６のさらなる機能は、読み出し要求が、要求されたトランザクションを管理するのに、書き込み要求のハードウェア待ち行列（例えば、書き込みＦＩＦＯ３０８）とは別のハードウェア待ち行列（例えば、読み出しＦＩＦＯ３１０）を共有するため、全く性能に影響を与えることなしに、テストベンチプロセッサ２０２が設計プロセッサ２０４に送信する任意の読み出しまたはＩ／Ｏ要求を処理し、要求をコンパイルできることである。さらに、イベント処理専用のデータ経路は、テストベンチ読み出しおよび書き込み要求３０２の影響を受けないため、Ｉ／Ｏトランザクションは、イベント処理と同時に行われる。
【００６０】
テストベンチプロセッサ２０２でのテストベンチ処理を設計プロセッサ２０４での設計から分離することにより、アムダールの法則の影響は実質的に低減され、実質的な性能の目標が達成される。したがって、ランタイム実行の直列化がない。テストベンチアプリケーションは、プロセッサが設計の検証に用いられるためにプロセッサリソースが利用可能になるまで待つ必要がないので、並列プロセッサシステム２００では、典型的なプロセッサよりも高速で実行する。
【００６１】
図４Ａは、本発明の実施形態に従って、設計プロセッサ２０４を示すより詳細なブロック図である。並列プロセッサシステム２００は、設計構図に関連する複数のタスクを同時に処理できる。設計機能を検証することは、以下のタスクのうちの１または複数を含んでよく、それらのタスクの一部は、同時に行われうる：
（ａ）２状態機能評価；
（ｂ）４状態機能評価；
（ｃ）整数遅延を伴った（ａ）または（ｂ）；
（ｄ）規格によって規定された強度特性を伴った（ａ）または（ｂ）；
（ｅ）電気遅延（ＳＤＦタイミング）を伴った（ａ）または（ｂ）；
（ｆ）（ａ）または（ｂ）または（ｃ）または（ｄ）または（ｅ）ならびにＩ／Ｏタスク
【００６２】
設計プロセッサ２０４は、設計を処理する複数のＭＩＳＡコア２０８を備える。設計は、モンタナ命令セットアーキテクチャ（ＭＩＳＡ）にコンパイルされる。設計プロセッサ２０４は、１ないし１２８の間、もしくは、必要であればさらに多くのＭＩＳＡコア２０８を備えうる。ＭＩＳＡコア２０８は、算術関数および論理関数など様々な計算関数、フロー制御、および、メモリ演算を実行する。図４Ａに示す実装例において、設計プロセッサ２０４は、１２８個のＭＩＳＡコア２０８を備える。図４Ｂは、本発明の実施形態に従って、１つのＭＩＳＡコア４５０を示すブロック図である。図４Ｃは、本発明の実施形態に従ったデータ構造４８０を示す。ＭＩＳＡコア２０８は、検証アプリケーションをコンパイルするＭＩＳＡコンパイラ５３４によって生成されたモンタナ命令セットデータ構造を処理する。求められる性能と、メモリインターフェースの利用可能性とに応じて、さらなるＭＩＳＡコア２０８を設計プロセッサ２０４に追加したり除去したりしてもよいし、設計プロセッサの複数のレジスタ４５２の一部であるプロセッサ状態レジスタ４５２’のビットを有効にすることによってＭＩＳＡコア２０８を有効にしたり無効にしたりしてもよい。
【００６３】
ＭＩＳＡコア２０８は、外部メモリインターフェース以下の周波数で動作可能である点で拡張可能である。例えば、メモリインターフェースが５３３ＭＨｚで動作している場合、１つのＭＩＳＡコア２０８が５３３ＭＨｚで動作する、２つのＭＩＳＡコアが２６６ＭＨＺで動作する、４つのＭＩＳＡコアが１３３ＭＨｚで動作する、または、任意の他の数のＭＩＳＡコアがそれに応じた周波数で動作することが可能である。ＭＩＳＡコア２０８の処理速度は、コアの電力消費の大部分を決定する。処理速度が遅いほど電量消費が小さくなり、速度が速いほど電力消費が大きくなる。したがって、プロセッサ状態レジスタ４５２’で有効にされるＭＩＳＡコア２０８の数および速度を選択することにより、電力消費を制限することが所望の動作点である場合に電力消費を管理することができる。
【００６４】
ＭＩＳＡコア２０８の各々は、他のＭＩＳＡコア（存在しても存在しなくてもよい）に依存しない。したがって、各ＭＩＳＡコア２０８は、他のＭＩＳＡコアと独立して動作しうる。
【００６５】
図４Ｂに示すように、１つのＭＩＳＡコア４５０は、デコードユニット４５４と、整数計算ユニット４５６と、メモリ演算ユニット４５８と、イベント生成ユニット４６０と、コヒーレンシユニット４６２と、フロー制御ユニット４６４と、その他の処理ユニット４６８と、を備える。
【００６６】
データ構造４７０は、ＭＩＳＡ命令セットに含まれる２５６の異なる命令のうちの１つを定義する８ビットの関数フィールド４７２を含めた２２４ビットを含む。より少ないまたは多い異なる命令が必要な場合、関数フィールド４７２に、８ビットよりも多いまたは少ないビットを用いてもよい。ＭＩＳＡアーキテクチャ内のデータオペランドのサイズに制限はない。
【００６７】
データ構造４７０は、次の命令で用いられるデータの入力ビット／バイト／ワード／ダブルワード数を定義する８ビットのＩｎＰｏｒｔフィールド４７３を備える。データ構造４７０は、特定の関数が実行されうる前に必要なゲート遅延の数を定義する８ビットの遅延フィールド４７４を備える。
【００６８】
データ構造４７０は、さらに、１ビットのファンアウトフィールド４７５を備える。ファンアウトフィールド４７５は、この命令の結果が、定義された出力ノード以外のノードに分配されるか否かを特定する。
【００６９】
繰り返される命令を特定するために、１ビットの繰り返しフィールド４７６が用いられる。現行の命令の結果がＩ／Ｏサブシステムに出力されることを特定するために、１ビットのＩ／Ｏフィールド４７７が用いられる。
【００７０】
データ構造４７０は、さらに、宛先出力ポートの正確な位置を特定する５ビットのポートフィールド４７８を備える。３２ビットの宛先フィールド４７９は、次の命令のための次のアドレスである。３２ビットのデータフィールド４８０は、現行の命令で演算されるデータを含む。
【００７１】
データ構造４７０は、さらに、関数の電気タイミング仕様を定義するＳＤＦフィールド４８１を備える。
【００７２】
デコードユニット４５４は、関数フィールド４７２、ＩｎＰｏｒｔフィールド４７３、遅延フィールド４７４、ファンアウトフィールド４７５、繰り返しフィールド４７６、Ｉ／Ｏフィールド４７７に基づいて、ＭＩＳＡデータ構造４７０をデコードし、関数フィールドによって命令された要求タスクを正しい計算関数に実行させる。
【００７３】
整数計算ユニット４５６は、ＡＬＵ関数、データ移動、複製、分割、連結、バッファリングなど、標準的な整数計算関数を実行する。これらの関数は、ＭＩＳＡコアと、整数計算ユニットに入力されたデータオペランドとを用いて呼び出される。
【００７４】
メモリ演算ユニット（ＭＯＵ）４５８は、内部メモリ４０６、４０８、４１０、および、外部メモリ２１２Ａ〜Ｃに関するすべてのメモリ演算を実行する。メモリ２１２Ａ〜Ｃ、４０６、４０８、４１０と共に働き、プロセッサ内のすべてのデータ移動を実行するロードおよび格納命令がある。ＭＯＵ４５８は、さらに、内部メモリ４０６、４０８、４１０、および、外部メモリ２１２Ａ〜Ｃに対して、読み取り要求および書き込み動作を開始する。
【００７５】
イベント生成ユニット４６０は、新しいイベントが、将来の実行のためにイベント待ち行列に格納されるか否か、そして、いつ格納されるのかを決定する。整数比較ユニット４５６およびメモリ演算ユニット４５８の実行結果に基づいて、新しいイベントが格納されるか否かを決定する複数の基準がある。基準は、以下を含みうる：新しい出力は、前サイクルの出力と異なるか？無条件呼び出しが要求されているか？ジャンプおよび条件付き計算を通して、新しいイベントの宛先に到達するか？
【００７６】
コヒーレンシユニット４６２は、ＭＩＳＡ命令およびデータオペランドを含む内部メモリ４０６、４０８、４１０および外部メモリ２１２Ａ〜Ｃの間のコヒーレンシを維持する。
【００７７】
フロー制御ユニット４６４は、所与の時点の全リソースの状態に基づいて、次のサイクル演算の命令先を決定する。イベント待ち行列２１０が空の状態で、もはや評価すべきコヒーレントイベントが存在しない場合、実行の状態は次のサイクルに進められ、内部レジスタがその状態変化を反映するように更新される。
【００７８】
ＩＯおよびシステムトランザクションは、フロー制御ユニット４６４によって、異なる方法で処理される。システム書き込み要求および読み出し要求は、テストベンチプロセッサ２０２によって開始されたテストベンチ（ＴＢ）要件に基づいて処理される。ＭＩＳＡコア２０８は、実行されている設計コードのフローに基づいて利用可能である時にＭＩＳＡ実行に基づいてデータをシステムに提供することが許可されるなど、システムアクセスを生成する。次いで、要求されたシステムデータは、ＦＩＦＯ２１０に書き込まれ、システムによって決定された時間にシステムによって読み出されうる。
【００７９】
並列処理は、複数のＭＩＳＡコア２０８を利用する。例えば、タスク（ｅ）を処理するために、プロセッサは、関数を評価し、関数の論理遷移を決定し、遷移に関する遅延を計算しなければならない。このタスクは、並列処理を必要とする。典型的なプロセッサは、多数の処理サイクルおよびメモリアクセスを使って、同じタスクを達成するが、顕著に対照的に、並列プロセッサシステム２００は、このタスクを完了するのに、１回のメモリアクセスおよび１回の処理サイクルしか必要としない。
【００８０】
設計プロセッサ２０４は、アクティベートされたすべてのエンティティのオペランドを演算する。すべての処理サイクルが、次のサイクルの処理に向けてスケジューリングされる必要のある新規イベントデータ４１２Ａを生成する（イベントとは、後に処理される必要のある設計要素をアクティベートする設計ノードの入力時のデータの変化である）。新規イベントデータ４１２Ａは、実行時に生成され、一時的なデータであり、イベントＦＩＦＯ待ち行列２１０に保持される。現行のイベントがイベントＦＩＦＯ待ち行列２１０から読み出され、評価されると、生成された次のサイクルのイベントが、反対側からイベントＦＩＦＯ待ち行列２１０に書き込まれる。結果として、イベント管理を、イベントＦＩＦＯ待ち行列２１０の管理および制御として見ることができる。
【００８１】
設計プロセッサ２０４は、さらに、関数またはゲートまたはイベントを処理するために用いられる２つの別個のオンチップメモリ４０６、４０８、４１０を備える。関数またはゲートまたはイベントの処理は、並列プロセッサシステム２００の計算的側面を説明するための交換可能な処理であることに注意されたい。制御メモリ４０６は、実行時（すなわち、制御時）に実行される命令を含む。データメモリまたはイベントキャッシュ４０８、４１０は、設計の初期データおよび実行時一時データ（例えば、生成されたデータ）の両方を格納するために用いられる。データメモリまたはイベントメモリは、さらに、２つの部分に分割される。現行サイクルのデータが、その命令と同時に１つの部分から読み出される（ＥまたはＯ）。次のサイクルのデータ（ＥまたはＯ）は、他方の部分に格納される。例えば、現行サイクルにおいて、制御およびＥデータ（イベント）メモリが読み出されて実行された場合、次のサイクルのデータは、Ｏデータ（イベント）メモリに格納される。
【００８２】
命令メモリキャッシュ４０６およびイベントデータメモリキャッシュ４０８には、プリフェッチユニット４１６によって、次のサイクルの計算のために、命令およびイベントデータがそれぞれロードされる。
【００８３】
プリフェッチユニット４１６は、対応するＤＲＡＭコントローラ２１４Ａ、２１４Ｂ、２１４Ｃを用いて、対応する制御メモリ２１２Ａならびにイベントデータメモリ２１２Ｂおよび２１２Ｃ内の情報をリトリーブおよび／または格納する。イベントＦＩＦＯ待ち行列２１０は、次の処理サイクルのためのデータをリトリーブまたは格納する場所をプリフェッチユニット４１６に指示する。
【００８４】
命令が、それぞれのデータと共にオンチップメモリ４０６、４０８、４１０からフェッチされて実行されると、評価された関数の現行の出力と以前の出力データとの間に状態の変化がある場合には、次のサイクルのデータおよびアドレスが生成される。現行の命令は、以前のサイクルの出力データを含むため、比較ユニット４１２は、現在実行されている命令からの新規イベントデータ４１２Ａを、以前のサイクルの実行からの以前のイベントデータ４１２Ｂと比較して、次のサイクルのメモリが、新規イベントについての情報での更新を必要とするのか否かを判定できる。情報は、更新されるか否かに関わらず、次のサイクルで評価される。
【００８５】
新規イベントデータ４１２Ａが以前のサイクルの実行からの以前のイベントデータ４１２Ｂと異なる場合、次のサイクルのメモリは更新を必要とする。次のサイクルのメモリを更新することは、次のサイクルのイベントのアドレスをイベントＦＩＦＯ２１０に書き込むことを含む。次の処理サイクルの開始時に、命令のアドレスが、イベントＦＩＦＯ２１０から読み出され、それに応じて実行される。
【００８６】
演算中、ライトバックバッファ４１４のデータが、データメモリ２１２Ｂ〜２１２Ｃの一方に書き込まれると同時に、次のサイクルのデータが、プリフェッチユニット４１６を用いて、他方のデータメモリからフェッチされる。したがって、既存のサイクルの生成済みデータがメモリ２１２Ｂ〜２１２Ｃにストリーミングされると同時に、次のイベントが同じメモリから読み出される。
【００８７】
比較ユニット４１２は、ＭＩＳＡコア２０８の出力を比較して、ＭＩＳＡコアの出力が、格納される必要のある新規データであるか否かを判定する。ＭＩＳＡコア２０８の出力が格納される必要がない場合、比較ユニット４１２は、次のサイクルの計算のためのデータをリトリーブまたは格納するよう、イベントＦＩＦＯ待ち行列２１０に通知する。
【００８８】
複数のオペランドに対して演算を行う多くの演算で当てはまりうるように、演算の結果が１ビット出力の生成ではない場合、その演算の宛先アドレスがトリガされ、出力の状態に関わらず、次のサイクルのイベントとして用いられる。この例では、次の演算は暗示されているので、比較ユニット４１２での出力比較は必要ない。
【００８９】
この処理は、既存のサイクルのイベントが実行されてイベントＦＩＦＯ２１０に書き込まれるまで継続する。この処理サイクルの終わりに、２つのタスクが完了される：新たに生成されたイベントデータは、ライトバックバッファ４１４を用いてメインメモリ２１２Ｂおよび２１２Ｃに書き戻され、同時に、新たに生成されたイベントのアドレスは、残りの新規イベントデータがメインメモリ２１２Ａ〜Ｃから読み出されて、実行に向けて設計プロセッサ２０４に提供されるように、プリフェッチユニット４１６に供給される。この処理は、メモリ待ち時間を全く生じさせることなしに、１サイクルメモリアクセスを保証する。
【００９０】
制御メモリ２１２Ａ、イベントデータメモリ２１２Ｂ、２１２Ｃは、設計プロセッサ２０４の外部にあり（すなわち、オフチップであり）、すぐ近く、すなわち、設計プロセッサ２０４と同じ回路基板上にあってよい。制御メモリ２１２Ａ、イベントデータメモリ２１２Ｂおよび２１２Ｃの記憶場所の中でのデータの組織化は、メモリ待ち時間のボトルネックを低減して、一部の例では桁違いにスループットを改善するので、重要である。
【００９１】
図５は、本発明の実施形態に従って、代表的な設計検証システム５００に含まれる並列プロセッサシステム２００を示す図である。図６Ａは、本発明の一実施形態に従って、並列プロセッサ２００での実行に向けて設計を準備する際に実行される方法動作６００を示すフローチャートである。ここに図示された動作は例示であり、いくつかの動作がサブ動作を含んでもよく、別の例において、ここに記載された特定の動作が図の動作に含まれなくてもよいことを理解されたい。これを念頭に置いて、以下では、方法動作６００について、設計検証システム５００と併せて説明する。
【００９２】
並列プロセッサ２００およびそれに関連付けられたメモリは、拡張カード５０２（例えば、ＰＣＩカードまたは任意の他の適切な標準インターフェースカード）に収納されてもよいし、上述のような様々なインターフェース構成要素と共にコンピュータのマザーボードに直接収納されてもよい。動作６０２で、並列プロセッサ２００は、Ｉ／Ｏインターフェース２２０を介して典型的なサーバ１２０に接続される。上述のように、Ｉ／Ｏインターフェース２２０は、ＵＳＢインターフェースまたは任意の他の適切なデータ接続システム（例えば、イーサネット（登録商標)、ＰＣＩ、ＰＣＩエクスプレス、光ネットワーク、無線ネットワークなど）であってよい。典型的なサーバ１２０は、対応するインターフェースのいずれかを含むＰＣまたは任意の他のコンピュータシステムであってよい。
【００９３】
設計５２０は、任意の適切な表現の設計（例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬなど）であってよい。設計５２０は、並列プロセッサシステムのＩＳＡコンパイラ（ＭＩＳＡ）５１０によって設定された設計プロセッサ２０４の命令にコンパイルされる。ＭＩＳＡコンパイラ５１０は、設計を直接的に並列プロセッサのＩＳＡにコンパイルする（すなわち、ネイティブコンパイル）。ＭＩＳＡコンパイラ５１０は、２つの主要部分：プリプロセッサ５３２およびＩＳＡコンパイラ５３４を有する。
【００９４】
動作６０４で、プリプロセッサ５３２は、設計を構文解析して、設計要素の関数依存性を記述するフォーマットに最適化し、動作６０６で、この関数依存性を含む  ７０を出力する。プリプロセッサへの入力は、標準的な設計言語であり、構文解析および最適化の機能は、市販またはオープンソースの形態で入手可能な標準的な商用ソフトウェアパッケージによって提供される標準機能であってもよい。
【００９５】
動作６０８で、構文解析済みのプリプロセッサ５３２の出力は、ＭＩＳＡコンパイラ５３４に入力される。動作６１０で、ＭＩＳＡコンパイラ５３４は、１セットのアセンブリレベルのコードを生成し、次いで、コードは、動作６１２で、ローダ５２２によって設計プロセッサのＳＤＲＡＭメモリ２１２Ａ〜Ｃに直接ロードされる。
【００９６】
ＭＩＳＡコンパイラ５３４は、プリプロセッサ５３２からの設計の接続情報を保持および利用して、次の命令の位置へのポインタと、設計の全メモリ空間または設計のメモリレイアウト内での場所とを提供する。メモリポインタおよび記憶場所は、実行時に設計プロセッサ２０４によって利用され、メモリからの命令のプリフェッチを可能にし、ひいては、メモリ待ち時間をほとんどゼロに低減することを可能にする。メモリから命令をプリフェッチする際に起きる唯一の遅延は、メモリ内のページをアクティベートしてアクティベートされたメモリページの内容を読み出すのに必要な遅延である。実行の次の段階に必要な命令およびデータを含む内容を読み出す前に、メモリページをアクティベートするために、十分な時間を利用できる。
【００９７】
図６Ｂは、本発明の一実施形態に従って、並列プロセッサ２００での実行に向けてアプリケーションを準備する際に実行される方法動作６２０を示すフローチャートである。ここに図示された動作は例示であり、いくつかの動作がサブ動作を含んでもよく、別の例において、ここに記載された特定の動作が図の動作に含まれなくてもよいことを理解されたい。これを念頭に置いて、以下では、方法動作６２０について、図５に示した設計検証システム５００と併せて説明する。
【００９８】
テストベンチアプリケーション５１２は、任意の適切なテストベンチアプリケーション（例えば、Ｃ言語、Ｖｅｒａ、ｅ、ＨＤＬなど）であってよい。任意選択的な動作６２２で、テストベンチアプリケーション５１２は、Ｃ言語アプリケーションでない場合、Ｃプログラミング言語コンバータ５１４にロードされる。動作６２４で、テストベンチアプリケーション５１２は、コンバータ５１４によってＣプログラミング言語に変換される。
【００９９】
変換されたテストベンチアプリケーションは、動作６２６で、典型的なＣコンパイラ５１６に入力される。変換されたテストベンチアプリケーションは、動作６２８で、典型的なＣコンパイラ５１６を用いてコンパイルされる。動作６３０で、ローダ５１８が、コンパイル済みのテストベンチアプリケーションをテストベンチメモリ２０２Ａにロードする。
【０１００】
図６Ｃは、本発明の一実施形態に従って、代表的な設計検証システム５００に含まれる並列プロセッサ２００を動作させる際に実行される方法動作６５０を示すフローチャートである。ここに図示された動作は例示であり、いくつかの動作がサブ動作を含んでもよく、別の例において、ここに記載された特定の動作が図の動作に含まれなくてもよいことを理解されたい。これを念頭に置いて、以下では、方法動作６５０について説明する。図６Ａおよび図６Ｂに記載したように、設計およびテストベンチアプリケーションがコンパイルされ、並列プロセッサ２００のメモリ２１２Ａ〜Ｃおよび２０２Ａにロードされると、並列プロセッサは、方法動作６５０で設計検証を実行できる。
【０１０１】
動作６５２で、テストベンチプロセッサ２０２は、最初の検証命令をロードする。最初の検証命令は、実行すべき次の命令に対応するメモリポインタを含む。動作６５４で、テストベンチプロセッサ２０２は、ロードされた検証命令を実行する。同時に、テストベンチプロセッサ２０２は、実行すべき次の命令をロードする。
【０１０２】
例えば、動作６５４で、テストベンチプロセッサ２０２は、通信ユニット２０６を通して、設計プロセッサ２０４から最初の検証データを要求してもよいし、データを設計プロセッサ２０４に送信してもよい。現行サイクルの命令実行中、次のサイクルの命令は、同時にフェッチされて、次の利用のためにオンチップメモリに置かれるため、制御フロー処理パラダイムにより、典型的なプロセッサ１００で見られたようなメモリの遅延および待ち時間が回避される。
【０１０３】
動作６５６で、設計プロセッサ２０４は、第１の検証イベントデータを処理する。図４を参照して上述したように、現行の命令は、以前のサイクルの出力データを含むため、動作６５８において、比較ユニット４１２は、現在実行されている命令からの新規イベントデータ４１２Ａを、以前のサイクルの実行からの以前のイベントデータ４１２Ｂと比較して、次のサイクルのメモリが、次のサイクルで評価される必要のある新規イベントについての情報での更新を必要とするのか否かを判定できる。
【０１０４】
新規イベントデータ４１２Ａが、以前のサイクルの実行からの以前のイベントデータ４１２Ｂと異ならない場合、動作６６０で、イベントデータ４１２Ａのみが更新されればよい。
【０１０５】
新規イベントデータ４１２Ａが以前のサイクルの実行からの以前のイベントデータ４１２Ｂと異なる場合、次のサイクルのメモリは更新を必要とする。次のサイクルのメモリを更新することは、動作６６２で、次のサイクルのイベントのアドレス４１４をイベントＦＩＦＯ２１０に書き込むことを含む。
【０１０６】
設計検証を完了させるのに、さらなる検証命令が必要な場合、方法動作は、動作６６４で判定された通りに動作６５４に戻る。設計検証が完了した場合、方法動作は終了しうる。
【０１０７】
ＭＩＳＡ５１０は、メモリ待ち時間を全く生じさせることなしに、設計のコンパイルおよび実行を提供する。ＭＩＳＡ５１０は、約２５６以上の演算の定義を可能にする。ＭＩＳＡ５１０は、制御およびデータオペランドを組み合わせて１つのメモリ演算にする。結果として、演算を完了するのに必要な命令フィールドのビットおよびデータビットをすべて得るために、１回のメモリフェッチだけで済む。上述のメモリ待ち時間削減技術と、ＭＩＳＡ５１０および並列プロセッサ２００のハードウェアアーキテクチャとを組み合わせると、メモリからの命令をストリーミングのようにフェッチおよび処理することが可能になる。
【０１０８】
ＭＩＳＡ５１０および並列プロセッサ２００のハードウェアアーキテクチャは、１メモリサイクル当たり１演算という持続的な速度を提供する。より速い速度（例えば、演算当たり１／２メモリサイクル）を達成するために、さらなるメモリインターフェースを追加することができる。このように、この解決法は、より速い速度を達成するために拡張可能である。メモリサイクルの半分でイベントを評価する一例として、合計６のメモリインターフェースのために制御メモリおよび２つのイベントデータメモリを追加する。インターフェースの総数を１２に増やす、または、超高速インターフェースのように、他の手段によって求められる帯域幅を拡大すると、イベントの処理に必要な時間は、メモリサイクルアクセスの１／８に減少する。これにより、３つのメモリインターフェースの４００倍に性能が向上し、１００倍の性能向上が可能になる。
【０１０９】
ＭＩＳＡ５１０は、さらに、設計におけるメモリのフットプリントおよび対応するランタイム実行を劇的に低減する。比較として、システムメモリマップ５４０が図５に示されており、典型的なメモリマップ１１２が図１に示されている。
【０１１０】
上述のように、設計およびテストベンチアプリケーションによって用いられるメモリは、並列プロセッサ２００のカード５０２に設けられており、サーバのメモリ内には存在しない。典型的なシミュレータコードは大きく、通例、約５０から約１００ＭＢ以上のサイズである。コンパイルされると、典型的なシミュレータは、サーバの利用可能メモリのうちの大部分を占める。
【０１１１】
典型的なソフトウェアシミュレータは、設計サイズに関わらない最小のコードサイズを有する。設計サイズが増大すると、典型的なシミュレータの実行時メモリ使用量およびワーキングセットが、それに応じて大きくなる。結果として、各回路評価は、典型的な検証アプリケーションでは、メモリとの間で複数回のアクセスを必要とする。
【０１１２】
並列プロセッサ２００は、典型的なシミュレータシステム１００と異なり、ゲート当たりメモリ空間の約１０％しか必要としない。並列プロセッサ２００の性能は一定かつ決定論的であり、メモリサイズおよび必要メモリは実行時に変化しない。
【０１１３】
並列プロセッサ２００は、標準的なサーバプラットフォーム（例えば、システム１００）と比べると、１００倍以上の回路検証処理性能を提供しうる。例えば、１００倍の性能向上は、以下のように算出される：２入力のＮＡＮＤゲートを評価するには、４つの半導体トランジスタの構築が必要である。典型的なサーバシステムにおける大型の設計（例えば、サイクル当たり１００万超のイベントを有する設計）に関しては、市販のシミュレータを用いるのに、約５回のメモリアクセスが必要である。典型的なメモリアクセスは、約５０ｎｓを必要とする。したがって、典型的なサーバシステムで２入力のゲートを評価するには、約２５０ｎｓが必要になる。一方、ＭＩＳＡプロセッサは、メモリ待ち時間を全く生じさせることなく、１回のメモリアクセスしか必要としない。ＭＩＳＡプロセッサのアクセスが２．５ｎｓのサイクル時間（４００ＭＨｚのＳＤＲＡＭメモリについてのサイクル時間など）であったとすれば、典型的な検証システムの１００倍の性能を有することになる。図７は、本発明の実施形態に従って、ＦＰＧＡプロトタイプ並列システム７００を示すブロック図である。テスト段階のＦＰＧＡプロトタイプ並列システム７００の設計は、Ｖｅｒｉｌｏｇゲートレベルの設計と、単純なＶｅｒｉｌｏｇテストベンチとを利用し、テストベンチは、９６の３２ビット加算器を含み、各加算器は、加算器当たり１９２のゲートを備え、合計で約１８，４３２のゲートおよび約４０，０００のイベントがある。テストベンチは、９６の加算器すべてを同時かつ並列に駆動する。Ｍｅｎｔｏｒ  Ｇｒａｐｈｉｃｓ社のＭｏｄｅｌｓｉｍというＶｅｒｉｌｏｇシミュレータ（Ａｌｔｅｒａウェブエディション、バージョン６．１）に含まれるシミュレーションハードウェアおよびソフトウェアを、２．６７ＧＨｚの速度および４ＧＢの物理メモリを備えたＩｎｔｅｌ  Ｃｏｒｅ  ｉ５（デュアルコア）プロセッサ上で実行した。
【０１１４】
ＦＰＧＡプロトタイプ並列システム７００で用いられているＦＰＧＡは、５０ＭＨｚで動作するＡｌｔｅｒａ  Ｃｙｌｃｏｎｅ  ＩＩＩ  ＦＰＧＡである。ＦＰＧＡプロトタイプ並列システム７００は、テストベンチプロセッサ７０２と、設計ＣＰＵ７０４と、テストベンチメモリ７０２Ａと、Ｉ／Ｏインターフェース７２０（この実施形態では、ＵＳＢ）とを備える。メモリコントローラ７１６が、テストベンチメモリをテストベンチプロセッサ７０２に接続する。テストベンチプロセッサ７０２は、さらに、二次キャッシュ７０２Ｃに接続されている。
【０１１５】
テストベンチプロセッサ７０２は、図２Ａ〜図５を参照して上述したテストベンチプロセッサ２０２と同じ機能を提供する。設計ＣＰＵ７０４は、上述の設計プロセッサ２０４と同じ機能を提供する。Ｉ／Ｏインターフェース７２０は、ＦＰＧＡプロトタイプ並列システム７００と、結果としての出力データを表示するための外部コンピュータシステム７３０との間のデータ通信を提供する。
【０１１６】
設計は、上述のＭＩＳＡ命令セットにコンパイルされた。プロトタイプ並列プロセッサシステム７００のためのテストベンチアプリケーションは、標準的なサーバベースのプラットフォーム（すなわち、上述のシステム１００）と共に用いられるＶｅｒｉｌｏｇテストベンチと同じ関数を実行する単純なＣプログラムである。Ｃテストベンチアプリケーションは、設計のコンパイルの際にＭＩＳＡコンパイラ５１０によって生成された情報を利用する。生成されたオペランドは、テストベンチプロセッサ７０２の書き込み要求を開始して加算演算の完了後の加算器の演算結果を読み出すことによって、命令メモリアドレスに書き込まれる。
【０１１７】
Ｃテストベンチは、Ａｌｔｅｒａ社のＮｉｏｓＩＩプロセッサの開発環境の一部であるＣコンパイラを用いてコンパイルされた。次いで、コンパイルされたＣテストベンチは、テストベンチプロセッサのメモリ７０２Ａ、７０２Ｃにロードされた。
【０１１８】
設計プロセッサ７０４は、まず、Ｖｅｒｉｌｏｇ  ＲＴＬで実装され、Ｍｏｄｅｌｓｉｍシミュレータを用いて機能することを検証された後に、テストベンチプロセッサ７０２をさらに含んだ同じＡｌｔｅｒａ  Ｃｙｃｌｏｎｅ  ＩＩＩ  ＦＰＧＡを用いて実装された。
【０１１９】
テストベンチプロセッサ７０２は、Ｃテストベンチを実行し、インターフェース７２０に接続されたコンピュータ７３０を通して、テストベンチを実行して演算の結果を読み出すように命令された。９６の３２ビット加算器すべてが、この実験でテストされた。典型的なサーバシステム１００と比べて、およそ１００倍の性能向上が実現され、検証された。
【０１２０】
上述のテストベンチおよび設計の実施形態は、代表的な実施形態にすぎないことを理解されたい。
【０１２１】
本明細書に記載の発明およびその部分は、ハンドヘルドデバイス、マイクロプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家電、ミニコンピュータ、メインフレームコンピュータなど、他のコンピュータシステム構成で実施されてもよい。本発明は、ネットワークを通して接続された遠隔処理デバイスによってタスクが実行される分散コンピューティング環境で実施されてもよい。
【０１２２】
上述の実施形態を念頭に置いて、本発明は、コンピュータシステムに格納されたデータを含め、コンピュータによって実行される様々な動作を用いてよいことを理解されたい。これらの動作は、物理量の物理操作を必要とするものである。通常、必ずしも当てはまるわけではないが、これらの物理量は、格納、転送、合成、比較、および、その他の操作を施すことが可能な電気または磁気の信号の形態を取る。さらに、実行される操作は、生成、特定、決定、または、比較などの用語で呼ばれることが多い。
【０１２３】
本発明の一部を形成する本明細書で説明した動作はいずれも、有用な機械動作である。本発明は、さらに、これらの動作を実行するためのデバイスまたは装置に関する。装置は、専用コンピュータなど、必要とされる目的向けに特別に構築されてよい。専用コンピュータとして規定された場合、コンピュータは、特殊目的に含まれない他の処理、プログラム実行、または、ルーチンも実行しつつ、特殊目的のために動作することができる。あるいは、動作は、コンピュータメモリ、キャッシュに格納されたまたはネットワークを介して取得された１または複数のコンピュータプログラムによって選択的にアクティベートまたは構成された汎用コンピュータで処理されてもよい。データがネットワークを介して取得されると、そのデータは、ネットワーク上の他のコンピュータ（例えば、クラウドのコンピューティング資源）によって処理されうる。
【０１２４】
本発明の実施形態は、データを或る状態から別の状態に変換するマシンとして規定されてもよい。変換されたデータは、ストレージに保存された後に、プロセッサによって操作されうる。このように、プロセッサは、データを或るものから他のものに変換する。さらに、方法は、ネットワークを介して接続されうる１または複数のマシンまたはプロセッサによって処理されうる。各マシンは、データを或る状態またはものから別の状態またはものに変換することが可能であり、さらに、データを処理、データをストレージに保存、ネットワークを介してデータを送信、結果を表示、または、結果を別のマシンに通信することができる。
【０１２５】
また、本発明は、コンピュータ読み取り可能な媒体上のコンピュータ読み取り可能なコードとして実現されてもよい。コンピュータ読み取り可能な媒体は、コンピュータシステムによって読み出し可能なデータを格納できる任意のデータ格納装置である。コンピュータ読み取り可能な媒体の例としては、ハードドライブ、ネットワーク接続ストレージ（ＮＡＳ）、読み出し専用メモリ、ランダムアクセスメモリ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ、フラッシュ、磁気テープ、および、その他の光学および非光学式のデータ格納装置が挙げられる。コンピュータ読み取り可能な媒体は、コンピュータ読み取り可能なコードが、分散的に格納および実行されるように、ネットワーク接続された複数のコンピュータシステムに分散されてもよい。
【０１２６】
理解を深めるために、上述の発明について、ある程度詳しく説明したが、添付の特許請求の範囲内で、ある程度の変更や変形を行ってもよいことは明らかである。したがって、本実施形態は、例示的なものであって、限定的なものではないとみなされ、本発明は、本明細書に示した詳細に限定されず、添付の特許請求の範囲および等価物の範囲内で変形されてよい。
【図１】
2014523569.tif 000003
【図２Ａ】
2014523569.tif 000004
【図２Ｂ】
2014523569.tif 000005
【図２Ｃ】
2014523569.tif 000006
【図３】
2014523569.tif 000007
【図４Ａ】
2014523569.tif 000008
【図４Ｂ】
2014523569.tif 000009
【図４Ｃ】
2014523569.tif 000010
【図５】
2014523569.tif 000011
【図６Ａ】
2014523569.tif 000012
【図６Ｂ】
2014523569.tif 000013
【図６Ｃ】
2014523569.tif 000014
【図７】
2014523569.tif 000015
【手続補正書】
【提出日】平成26年7月8日(2014.7.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータシステムであって、
次の命令のアドレスを、前記次の命令を取得した時にのみ知ることができる制御フロー型のプロセッサである第１のプロセッサと、
データフロー型のプロセッサである第２のプロセッサであって、命令メモリと２つのデータメモリとを含む第２のメモリシステムに接続され、前記命令メモリは、複数の命令を実行順に格納すると共に、前記２つのデータメモリに含まれている対応する複数のイベントデータを実行順に格納し、前記複数の命令のうちの最初の命令は、前記命令メモリ内の所定の位置に格納される、第２のプロセッサと、
前記第１のプロセッサおよび前記第２のプロセッサに接続された実行時イベント挿入・制御ユニットと、
を備え、
前記命令メモリ、前記２つのデータメモリ、前記第１のプロセッサ、前記第２のプロセッサ、および、前記実行時イベント挿入・制御ユニットは、共通の集積回路上にある、システム。
【請求項２】
請求項１に記載のシステムであって、前記第１のプロセッサは、第１のキャッシュメモリ、第１のメモリコントローラ、および、第１のＣＰＵを備え、前記第１のプロセッサは、第１のメモリシステムに接続されている、システム。
【請求項３】
請求項１に記載のシステムであって、前記第２のプロセッサは、第２のキャッシュメモリ、第２のメモリコントローラ、および、並列に接続された複数のＭＩＳＡ処理コアを備える、システム。
【請求項４】
請求項３に記載のシステムであって、前記第２のプロセッサは、通信ユニットによって前記第１のプロセッサに接続されている、システム。
【請求項５】
請求項３に記載のシステムであって、前記第２のキャッシュメモリは命令キャッシュメモリとイベントキャッシュメモリとを含み、前記命令メモリは、第１の対応するメモリコントローラによってプリフェッチユニットを介して制御キャッシュメモリに接続され、前記２つのデータメモリのうちの第１のデータメモリは、第２の対応するメモリコントローラによって前記プリフェッチユニットを介して前記イベントキャッシュメモリに接続され、前記２つのデータメモリのうちの第２のデータメモリは、第３の対応するメモリコントローラによって前記プリフェッチユニットを介して第２のキャッシュメモリに接続されている、システム。
【請求項６】
請求項５に記載のシステムであって、前記第２のプロセッサは、さらに、プリフェッチユニットに接続されたイベントＦＩＦＯ待ち行列を備える、システム。
【請求項７】
請求項３に記載のシステムであって、前記複数のＭＩＳＡ処理コアは、１から約１２８のＭＩＳＡ処理コアを含む、システム。
【請求項８】
請求項３に記載のシステムであって、前記第２のプロセッサは、さらに、前記複数のＭＩＳＡ処理コアの出力に接続された比較ユニットを備える、システム。
【請求項９】
設計をテストする方法であって、
第１のコンパイラでテストベンチアプリケーションをコンパイルする工程と、
テストベンチプロセッサに接続されたテストベンチメモリシステムに前記コンパイルされたテストベンチアプリケーションをロードする工程であって、前記テストベンチプロセッサは、制御フロー型のプロセッサである、工程と、
シミュレートされた設計を作るために、回路シミュレータアプリケーションで設計をシミュレートする工程と、
コンパイルされた設計アプリケーションを作るために、第２のコンパイラで前記シミュレートされた設計をコンパイルする工程と、
設計プロセッサに接続された設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程であって、前記設計メモリシステムは、命令メモリと２つのデータメモリとを含み、前記設計プロセッサは、データ型のプロセッサであり、実行時イベント挿入・制御ユニットによって前記テストベンチプロセッサに接続され、前記設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程は、複数の命令を前記命令メモリに格納する工程、および、対応する複数のイベントデータを前記２つのデータメモリに格納する工程を含み、前記複数の命令のうちの最初の命令は、前記命令メモリ内の所定の位置に格納される、工程と、
前記テストベンチプロセッサでの対応する最初の命令の出力に従って、前記設計プロセッサで最初の命令を実行する工程と、
を備える、方法。
【請求項１０】
請求項９に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの出力結果を、現行データ値と比較する工程と、
前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と同じ場合に、次の命令をロードする工程とを備える、方法。
【請求項１１】
請求項１０に記載の方法であって、前記次の命令をロードする工程は、
後続の命令を制御メモリキャッシュにロードする工程と、
それと同時に、対応する後続のイベントデータをイベントデータキャッシュにロードする工程と、
を含む、方法。
【請求項１２】
請求項１０に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と異なる場合に、前記出力結果を格納する工程を備える、方法。
【請求項１３】
請求項１２に記載の方法であって、前記出力結果を格納する工程は、演算キャッシュメモリに前記出力結果を格納する工程と、前記設計プロセッサに次の命令をロードする工程と、を含む、方法。
【請求項１４】
請求項９に記載の方法であって、前記第１のコンパイラは、前記第２のコンパイラと機能的に等価である、方法。
【請求項１５】
請求項９に記載の方法であって、前記第１のコンパイラおよび前記第２のコンパイラは、Ｃコンパイラである、方法。
【請求項１６】
請求項９に記載の方法であって、前記第２のコンパイラは、さらに、ＭＩＳＡコンパイラを含み、前記第２のコンパイラで前記シミュレートされた設計をコンパイルする工程は、ＭＩＳＡコンパイルされた設計を作るために、前記ＭＩＳＡコンパイラで前記シミュレートされた設計をコンパイルした後に、前記第２のコンパイラで前記ＭＩＳＡコンパイルされた設計をコンパイルする工程を含む、方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
設計プロセッサ２０４は、設計を処理する複数のＭＩＳＡコア２０８を備える。設計は、モンタナ命令セットアーキテクチャ（ＭＩＳＡ）にコンパイルされる。設計プロセッサ２０４は、１ないし１２８の間、もしくは、必要であればさらに多くのＭＩＳＡコア２０８を備えうる。ＭＩＳＡコア２０８は、算術関数および論理関数など様々な計算関数、フロー制御、および、メモリ演算を実行する。図４Ａに示す実装例において、設計プロセッサ２０４は、１２８個のＭＩＳＡコア２０８を備える。図４Ｂは、本発明の実施形態に従って、１つのＭＩＳＡコア４５０を示すブロック図である。図４Ｃは、本発明の実施形態に従ったデータ構造４７０を示す。ＭＩＳＡコア２０８は、検証アプリケーションをコンパイルするＭＩＳＡコンパイラ５３４によって生成されたモンタナ命令セットデータ構造を処理する。求められる性能と、メモリインターフェースの利用可能性とに応じて、さらなるＭＩＳＡコア２０８を設計プロセッサ２０４に追加したり除去したりしてもよいし、設計プロセッサの複数のレジスタ４５２の一部であるプロセッサ状態レジスタ４５２’のビットを有効にすることによってＭＩＳＡコア２０８を有効にしたり無効にしたりしてもよい。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
設計プロセッサ２０４は、さらに、関数またはゲートまたはイベントを処理するために用いられる３つの別個のオンチップメモリ４０６、４０８、４１０を備える。関数またはゲートまたはイベントの処理は、並列プロセッサシステム２００の計算的側面を説明するための交換可能な処理であることに注意されたい。制御メモリ４０６は、実行時（すなわち、制御時）に実行される命令を含む。データメモリまたはイベントキャッシュ４０８、４１０は、設計の初期データおよび実行時一時データ（例えば、生成されたデータ）の両方を格納するために用いられる。データメモリまたはイベントメモリは、さらに、２つの部分に分割される。現行サイクルのデータが、その命令と同時に１つの部分から読み出される（ＥまたはＯ）。次のサイクルのデータ（ＥまたはＯ）は、他方の部分に格納される。例えば、現行サイクルにおいて、制御およびＥデータ（イベント）メモリが読み出されて実行された場合、次のサイクルのデータは、Ｏデータ（イベント）メモリに格納される。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１１４
【補正方法】変更
【補正の内容】
【０１１４】
ＦＰＧＡプロトタイプ並列システム７００で用いられているＦＰＧＡは、５０ＭＨｚで動作するＡｌｔｅｒａ  Ｃｙｃｌｏｎｅ  ＩＩＩ  ＦＰＧＡである。ＦＰＧＡプロトタイプ並列システム７００は、テストベンチプロセッサ７０２と、設計ＣＰＵ７０４と、テストベンチメモリ７０２Ａと、Ｉ／Ｏインターフェース７２０（この実施形態では、ＵＳＢ）とを備える。メモリコントローラ７１６が、テストベンチメモリをテストベンチプロセッサ７０２に接続する。テストベンチプロセッサ７０２は、さらに、二次キャッシュ７０２Ｃに接続されている。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１２６
【補正方法】変更
【補正の内容】
【０１２６】
理解を深めるために、上述の発明について、ある程度詳しく説明したが、添付の特許請求の範囲内で、ある程度の変更や変形を行ってもよいことは明らかである。したがって、本実施形態は、例示的なものであって、限定的なものではないとみなされ、本発明は、本明細書に示した詳細に限定されず、添付の特許請求の範囲および等価物の範囲内で変形されてよい。
適用例１：
コンピュータシステムであって、制御フロー型のプロセッサである第１のプロセッサと、データフロー型のプロセッサである第２のプロセッサであって、第２のメモリシステムに接続され、前記第２のメモリシステムは、複数の命令を実行順に格納すると共に、対応する複数のイベントデータを実行順に格納し、前記複数の命令のうちの最初の命令は、前記第２のメモリシステム内の所定の位置に格納される、第２のプロセッサと、前記第１のプロセッサおよび前記第２のプロセッサに接続された実行時イベント挿入・制御ユニットと、を備え、前記第１のプロセッサ、前記第２のプロセッサ、および、前記実行時イベント挿入・制御ユニットは、共通の集積回路上にある、システム。
適用例２：
適用例１に記載のシステムであって、前記第１のプロセッサは、第１のキャッシュメモリ、第１のメモリコントローラ、および、第１のＣＰＵを備え、前記第１のプロセッサは、第１のメモリシステムに接続されている、システム。
適用例３：
適用例１に記載のシステムであって、前記第２のプロセッサは、第２のキャッシュメモリ、第２のメモリコントローラ、および、並列に接続された複数のＭＩＳＡ処理コアを備える、システム。
適用例４：
適用例３に記載のシステムであって、前記第２のプロセッサは、通信ユニットによって前記第１のプロセッサに接続されている、システム。
適用例５：
適用例３に記載のシステムであって、前記第２のキャッシュメモリは、命令キャッシュメモリおよびイベントキャッシュメモリを含む、システム。
適用例６：
適用例５に記載のシステムであって、前記第２のメモリシステムは、命令メモリおよびイベントメモリを含み、前記命令メモリは、第１の対応するメモリコントローラによってプリフェッチユニットを介して制御キャッシュメモリに接続され、Ｅイベントメモリは、第２の対応するメモリコントローラによって前記プリフェッチユニットを介して前記イベントキャッシュメモリに接続され、Ｏイベントメモリは、第３の対応するメモリコントローラによって前記プリフェッチユニットを介してＯキャッシュメモリに接続されている、システム。
適用例７：
適用例６に記載のシステムであって、前記第２のプロセッサは、さらに、プリフェッチユニットに接続されたイベントＦＩＦＯ待ち行列を備える、システム。
適用例８：
適用例３に記載のシステムであって、前記複数のＭＩＳＡ処理コアは、１から約１２８のＭＩＳＡ処理コアを含む、システム。
適用例９：
適用例１に記載のシステムであって、前記第２のプロセッサは、さらに、前記複数のＭＩＳＡ処理コアの出力に接続された比較ユニットを備える、システム。
適用例１０：
設計をテストする方法であって、第１のコンパイラでテストベンチアプリケーションをコンパイルする工程と、テストベンチプロセッサに接続されたテストベンチメモリシステムに前記コンパイルされたテストベンチアプリケーションをロードする工程であって、前記テストベンチプロセッサは、制御フロー型のプロセッサである、工程と、回路シミュレータアプリケーションで設計をシミュレートする工程と、第２のコンパイラで前記シミュレートされた設計をコンパイルする工程と、設計プロセッサに接続された設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程であって、前記設計プロセッサは、データ型のプロセッサであり、実行時イベント挿入・制御ユニットによって前記テストベンチプロセッサに接続され、前記設計メモリシステムに前記コンパイルされた設計アプリケーションをロードする工程は、複数の命令を格納する工程、および、対応する複数のイベントデータを格納する工程を含み、前記複数の命令のうちの最初の命令は、前記設計メモリシステム内の所定の位置に格納される、工程と、前記テストベンチプロセッサでの対応する最初の命令の出力に従って、前記設計プロセッサで最初の命令を実行する工程と、を備える、方法。
適用例１１：
適用例１０に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの出力結果を、現行データ値と比較する工程を備える、方法。
適用例１２：
適用例１１に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と同じ場合に、次の命令をロードする工程を備える、方法。
適用例１３：
適用例１２に記載の方法であって、前記次の命令をロードする工程は、後続の命令を制御メモリキャッシュにロードする工程と、それと同時に、対応する後続のイベントデータをイベントデータキャッシュにロードする工程と、を含む、方法。
適用例１４：
適用例１１に記載の方法であって、さらに、前記設計プロセッサで実行された前記最初の命令からの前記出力結果が、前記現行データ値と異なる場合に、前記出力結果を格納する工程を備える、方法。
適用例１５：
適用例１４に記載の方法であって、前記出力結果を格納する工程は、演算キャッシュメモリに前記出力結果を格納する工程と、前記設計プロセッサに次の命令をロードする工程と、を含む、方法。
適用例１６：
適用例１０に記載の方法であって、前記第１のコンパイラは、前記第２のコンパイラと機能的に等価である、方法。
適用例１７：
適用例１０に記載の方法であって、前記第１のコンパイラおよび前記第２のコンパイラは、Ｃコンパイラである、方法。
適用例１８：
適用例１０に記載の方法であって、第２のコンパイラで前記シミュレートされた設計をコンパイルする工程は、ＭＩＳＡコンパイラで前記シミュレートされた設計をコンパイルした後に、前記第２のコンパイラで前記ＭＩＳＡコンパイルされた設計をコンパイルする工程を含む、方法。
【国際調査報告】
2014523569.tif 000016