(57)【要約】一実施例において、電子システムのハードウェアの実行は、ＨＤＬ記述を実行可能な形態へのコンパイル、および、プロセッサ命令を実行することによって実現される。データフロー分離技術を適用することによって、いくつかの実施例において、システムの作動は、効率的な論理評価のため、複雑なプロセッサの命令セットに効果的にマッピングすることができる。実施例によっては、ＨＤＬ記述に内在する並列処理を活用するため、相互に連結したプロセッサの列が、配置される。【選択図】図６
2008505397.tif 000002
【特許請求の範囲】
【請求項１】
その各々が少なくとも前記電子システムの一部の作動を実現するプロセッサで実行可能である複数命令からなる複数プログラムへ電子システムのハードウェア記述言語（ＨＤＬ）の記述をコンパイルし；そして
複数プロセッサの１つの命令メモリへの前記複数プログラムの各々をダウンロードすること、からなる方法。
【請求項２】
前記複数プロセッサ上の前記複数プログラム実行することからさらになる、請求項１に記述の方法。
【請求項３】
前記ダウンロードは、前記複数プログラムの第１プログラム、および、前記複数プログラムの第２プログラムを前記複数プロセッサの第１プロセッサへダウンロードすることからなる、請求項１または２に記述の方法。
【請求項４】
前記実行は、前記第１プログラムおよび前記第２プログラムの前記第１プロセッサ上での時分割実行からなる請求項３に記述の方法。
【請求項５】
前記複数プログラムの第１プログラムおよび前記複数プログラムの第２プログラムが前記実行の間、通信することからなる、請求項１または２に記述の方法。
【請求項６】
前記通信は、前記第１プログラムを実行する第１プロセッサおよび前記第２プログラムを実行する第２プロセッサの間の共有メモリを通して行われる、請求項５に記述の方法。
【請求項７】
前記複数プロセッサの第１プロセッサ上で前記第１プログラムを実行し；そして
前記第１プロセッサの近くにある前記複数プロセッサの第２プロセッサ上で前記第２プログラムを実行することからさらになる、請求項５または６に記述の方法。
【請求項８】
前記複数プロセッサの第１プロセッサ上での前記第１プログラムを実行し；そして
効率的に前記第１プロセッサと通信することが可能である前記複数プロセッサの第２プロセッサ上での前記第２プログラムを実行することからなる、請求項５または６に記述の方法。
【請求項９】
前記コンパイルは、前記ＨＤＬ記述において記述される制御論理回路から前記ＨＤＬ記述で記述されるデータフロー要素を分離することからなる、先行する請求項に記述の方法。
【請求項１０】
前記コンパイルはさらに、前記データフロー要素、および、前記データフロー要素を制御する前記制御論理を対応する複数プログラム区分に配置することからなる、請求項９に記述の方法。
【請求項１１】
前記コンパイルはさらに、実行される場合、前記複数プログラム区分のうちの１つで前記データフロー要素の前記作動を実行する複数演算／論理命令を生成し；
実行される場合、前記複数プログラム区分のうちの１つにおいて、制御論理に対応する複数演算／論理命令の実行を制御する複数制御フロー命令を生成し；そして、
前記複数演算／論理命令および前記複数制御フロー命令を使用して前記複数プログラムのうちの１つを作成することからなる、請求項１０に記述の方法。
【請求項１２】
実行される場合、先行する請求項に記述の方法を実行する複数命令を記憶するコンピュータでアクセス可能な媒体。
【請求項１３】
前記電子システムの演算を実現するプロセッサで実行可能であって、ここで、前記複数命令が演算／論理命令および制御フロー命令を含む複数命令へ電子システムのハードウェア記述言語（ＨＤＬ）の記述をコンパイルし；そして、
前記複数命令を記憶ことからなる方法。
【請求項１４】
前記複数命令の記憶は、１つまたはそれ以上のプロセッサへ前記命令をダウンロードすることからなる、請求項１３に記述の方法。
【請求項１５】
複数プログラムとして前記複数命令を配置し；そして、
前記複数プログラムを実行される複数プロセッサへ分配することからなる、請求項１３または１４に記述の方法。
【請求項１６】
前記複数命令の記憶は、前記複数命令をコンピュータで読み取り可能な媒体へ書き込むことからなる、請求項１５に記述の方法。
【請求項１７】
実行される場合、請求項１３‐１６のいずれかに記述した前記方法を実行する複数命令を記憶するコンピュータでアクセス可能な媒体。
【請求項１８】
電子システムのハードウェア記述言語（ＨＤＬ）記述からのデータフローを抽出し；
前記データフローに対応する演算／論理命令を生成し；
前記ＨＤＬ記述からの前記データフローのための制御を抽出し；そして、
前記制御に対応する制御フロー命令を生成すること、からなる方法。
【請求項１９】
請求項１８に記述の方法であって、さらに前記演算／論理ユニット命令および前記制御フロー命令からの１つまたはそれ以上のプログラムをアセンブルすることからなる方法。
【請求項２０】
実行される場合、請求項１８または１９に記述の前記方法を実行する複数命令を記憶するコンピュータでアクセス可能な媒体。
【請求項２１】
前記実行は：
複数分岐条件を並列に評価し；そして、
前記複数分岐命令のコード化に対応する前記分岐条件のうちの１つを選択すること、からなる、分岐命令を実行することからなる方法。
【請求項２２】
前記評価は、複数ターゲット・アドレスの生成からなり、そして、前記選択は、次のフェッチ・アドレスとして前記複数ターゲット・アドレスのうちの１つを選択することからなる、請求項２１に記述の方法。
【請求項２３】
前記複数分岐条件の評価は、プログラム可能な論理ハードウェアによって実行される、請求項２１または２２に記述の方法。
【請求項２４】
プロセッサによる実行のためのプログラムのコンパイルからなる方法であって、前記コンパイルは、前記プログラムから抽出された少なくとも一部の制御論理を前記プロセッサにおいてプログラム可能な論理プログラムにマッピングし；そして、
存在する場合、前記プロセッサによって実行される命令へデータフロー作動及び前記制御論理の残りの部分にマッピングすることからなる方法。
【請求項２５】
請求項２４に記述の方法であって、さらに前記制御論理の一部を実行するため、前記プログラム可能な論理ブロックをプログラムし；
そして、前記プロセッサへ前記命令をダウンロードすることからなる方法。
【請求項２６】
前記１つまたはそれ以上のプロセッサの各々は、プログラムを実行するために構成され、各々のプログラムは、演算／論理命令および前記演算／論理命令の実行を制御する制御フロー命令を含む複数命令からなり、各々のプログラムは、ハードウェア記述言語（ＨＤＬ）で記述された電子システムの一部の前記作動を表わし、そしてここにおいて、プロセッサによる前記プログラムの実行は、前記電子システムの前記作動を集中的に実行する、相互接続に連結される１つまたはそれ以上のプロセッサからなる装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェア記述言語（ＨＤＬ）で記述される電子装置のハードウェア実現に関し、より詳しくは、電子システムのハードウェアを実行するためのコンパイル方法およびマルチプロセッサ・アーキテクチャに関する。
【背景技術】
【０００２】
集積回路として実行される意図を有する現代の電子システムの機能は、頻繁にハードウェア記述言語（ＨＤＬ）で表される。ＨＤＬの目的は、明白な形でシステムの機能を表し、次にハードウェアへ設計を変換する前に、設計の正当性を確認するためにシミュレーションできる高い生産性を有する設計の媒体を設計者に提供することである。このようなＨＤＬ記述を実際のハードウェアの実行に変換するために今日、様々な技術が存在する。ＨＤＬ記述のハードウェア実行を実現する従来のアプローチは、以下の通りである。
１．特定用途向け集積回路（ＡＳＩＣ）：主要なカスタムＡＳＩＣ実行ステップは、以下の構成からなる：
１.）ハードウェア論理機能ブロックにマッピングすることができるより低いレベル記述（例えばゲート・レベル・ネットリスト）へのＨＤＬの合成；
２.）それら間のルート経路遅延を最小化するため、論理機能ブロックの配置；
３.）ブロックを相互接続するため、経路の作成；
４.）電子設計の自動化（ＥＤＡ）ソフトウェア・ツールを用いた、設計機能、タイミング、電力消費および信号整合性の確認；
５．）ＡＳＩＣまたは複数ＡＳＩＣのためのマスク設定の作成；および、
６．）チップの製造。
ＡＳＩＣ実行の利点は、高い非反復的な設計（ＮＲＥ）費用、高いリスクおよび長い設計時間を対価とする、高性能、小型の金型（低コスト）および、低電力消費である。
２．フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）
ＦＰＧＡは、装置の機能がオンボードの記憶にダウンロードされる（ビット・ストリームとして）プログラムによって定義されるプログラム可能な装置である。ＦＰＧＡは、プログラマブル論理機能ブロック、および、機能ブロックと接続するためのプログラマブル・ワイヤで構成される。
カスタムＡＳＩＣアプローチと同様に、ＨＤＬ記述は、ＦＰＧＡのベースアレーへ既に構築された論理機能ブロックに合成される。ＦＰＧＡ設計ソフトウェアは、設計に必要とされる特定の機能を実行するように、プログラマブル機能ブロックおよびワイヤを構成するために用いるビット・ストリームを作成する。
ＡＳＩＣアプローチと異なって、カスタムの物理的な実行は、ＦＰＧＡアプローチにおいて必要とされない。ＦＰＧＡアプローチは、迅速な方向転換および低い設計費用およびリスクを提供するが、代わりに、カスタムＡＳＩＣよりも装置費用が高く、性能が低くなり、高い電力を消費する。
ＡＳＩＣｓおよびＦＰＧＡｓは、基礎をなすハードウェアにおいて対応する論理ゲートによって、ＨＤＬ記述に含まれる論理機能が直接実行される直接的なハードウェア・マッピング・アプローチである。直接的なマッピング技術の代替的なアプローチは、いわゆるプロセッサ・ベースの論理評価アプローチ（例えば、アクセラレータまたはエミュレータ）である。
プロセッサ・ベースのアプローチにおいて、論理値は「プロセッサ」のクラスタを使用して計算される。文献がプロセッサとして演算要素に言及する一方で、それらは、単一のコマンドを送ることができる実際に原始的な演算要素である。コマンドおよび対応するオペランドに応答して、もし存在する場合、原始的な演算要素は答えを出す。例えば、ＡＮＤ、ＯＲ、Ｓｈｉｆｔなどのような論理演算要素が実行される。オペランドを加えるまたは減ずる加算演算要素は、時々実行される。場合によっては、「プロセッサ」は、４入力機能ルックアップ・テーブルの複雑なものである。しかしながら、「プロセッサ」は汎用プロセッサの意味でのプロセッサではなく、独立してプログラムを実行しない。ＨＤＬ記述は、評価のため、メモリから様々なプロセッサへ、または、様々なプロセッサからデータを送る命令のフローにコンパイルされる。複雑な論理機能は複数プロセッサおよび実行のための多くのクロックサイクルを必要とするので、単純な「プロセッサ」は、複雑な相互接続（重いデータ・トラフィック）必要条件と、長い実行時間を生成する。
複雑な（例えば汎用の）プロセッサを適用する従来の試みは、ＨＤＬ記述は常に低いレベルの原始的な論理機能に合成されてきたという事実のために問題を含んでいる。例えば、従来の「プロセッサ」ベースのアプローチにおいて、コンパイラは、ＨＤＬ記述を原始的な論理演算に分解し、そして、様々な「プロセッサ」によってこれらの動作の実行を予定する。各々の原始的な動作の答えは、頻繁に記憶され、それから続く論理評価の入力オペランドとして使用されるために後に検索されることを必要とする。従来の「プロセッサ」ベースのアプローチにおける重いデータ・トラフィックは、性能および電力消費の弱点である。
原始的な論理機能を汎用プロセッサの複雑な命令セットにマッピングする効果的な技術は存在しなかった。結果として、プロセッサ・ベースの論理評価技術は、システムの性能、電力消費または費用条件を殆ど満たさない単純な「プロセッサ」をしばしば採用し、設計を実現するためのＡＳＩＣｓまたはＦＰＧＡｓの現実的な代替物ではない。それゆえに、プロセッサ・ベースのアプローチは、カスタムＡＳＩＣにおいてハードウェアが実行される前にＨＤＬを確認するため、主に論理エミュレーションおよびシミュレーション加速システムにおいて使われる論理評価技術に任せられてきた。これは、このようなシステムにおいて、より迅速な方向転換の代わりに、より遅い速度、より高い電力消費およびより高い費用はあまり重要でないからである。
【発明の開示】
【０００３】
いくつかの実施例は、より低い費用および電力消費でより高い性能を達成するため、従来のプロセッサ・ベースのアプローチを改善し、これにより、ＨＤＬ記述のハードウェア実行のためのＡＳＩＣまたはＦＰＧＡの代替物を作成する。
一実施例において、論理評価は、汎用マイクロプロセッサに類似した複雑性を有するプロセッサを利用する。プロセッサは、制御フロー（分岐）動作と同様に演算／論理を実行するための命令をサポートする。プロセッサが複数ビット幅のデータ上で複雑な動作を実行することができるので、複雑なプロセッサの使用は、データ・トラフィック（および、このようなトラフィックをサポートする相互接続および動力）を減少させ、計算効率を増加させる。
一実施例において、ＨＤＬプログラムの実行エンジンとしての汎用マイクロプロセッサを使用する要点は、マイクロプロセッサの命令セットに旨くマッピングする形にＨＤＬコードをコンパイルすることである。
一実施例において、コンパイル技術はデータフロー動作を制御フロー動作から分離し、したがって、一連の条件付きデータフロー動作へ電子システムの動作を変換する。条件なしのデータフロー動作は、条件設定を真として条件付きデータフロー動作として処理される。この実施例は、ＨＤＬのランダム論理がデータフロー動作を制御するために使用される主に条件つきの論理であるという事実を利用する。類似したデータパス分離技術は、他のＨＤＬ分析適用において適用されてきた。例えば、米国特許第６，１４５，１１７号を参照のこと。条件付きのデータフロー動作は、マイクロプロセッサの命令セットによくマッピングされ、複数プロセッサによる最大の並列実行のために予定される。プロセッサにおける分岐命令の使用によるデータフロー実行の制御によって、データ・トラフィックの量は、いくつかの実施例においてかなり減少する。データフロー分析は、設計のデータ場所を活用し、さらにいくつかの実施例においてデータ・トラフィックの量を減少させる。
従来の技術は、複雑かつ柔軟性のない相互接続を有する特化したハードウェアによって実行される原始的な論理機能からなる「ハードウェア」モデルにＨＤＬ記述をコンパイルまたは合成する。対照的に、一実施例は、「ソフトウェア」プログラムにＨＤＬをコンパイルし、流線形の相互接続を有するマイクロプロセッサのアレーを使用して、結果として生じるプログラムを実行する。
一実施例において、方法は、複数プログラムへの電子システムのハードウェア記述言語（ＨＤＬ）記述のコンパイルであって、前記複数プログラムの各々は、少なくとも電子システムの動作の少なくとも一部を実現するためプロセッサで実行可能な複数命令から構成されるようなコンパイル、および、複数プロセッサのうちの１つの命令メモリへの複数プログラムの各々のダウンロードからなる。実行される場合、複数プログラムを実行するためのプロセッサからなる方法および装置を実行する複数命令を記憶するコンピュータでアクセス可能な媒体もまた、考えられる。
別の一実施例において、方法は、電子システムの動作を実現するためのプロセッサで実行可能な複数命令への電子システムのハードウェア記述言語（ＨＤＬ）記述のコンパイルであって、そこにおいて、前記複数命令が演算／論理命令および制御フロー命令を含み、そして、複数命令の記憶からなる。実行される場合、命令を実行するための１つまたはそれ以上のプロセッサからなる方法および装置を実行する複数命令を記憶しているコンピュータでアクセス可能な媒体もまた、考えられる。
別の実施例において、方法は、データフローの電子システムのハードウェア記述言語（ＨＤＬ）の記述からの抽出；データフローに対応する演算／論理命令の生成；ＨＤＬ記述からデータフローのための制御の抽出；および、制御に対応した制御フロー命令の生成からなる。実行される場合、命令を実行するため１つまたはそれ以上のプロセッサからなる方法および装置を実行する複数命令を記憶するコンピュータでアクセス可能な媒体もまた、考えられる。
また別の実施例では、方法は、分岐命令の実行であって、そこにおいて、その実行が並列の複数分岐状態の評価からなる実行；および、前記分岐命令のコード化に対応する前記複数分岐状態のうちの１つの選択からなる。対応する装置もまた、考えられる。
さらに別の実施例では、方法は、電子システムのＨＤＬ記述のコンパイルであって、前記コンパイルがＨＤＬ記述から抽出された制御論理回路の少なくとも一部をプロセッサにおけるプログラム可能な論理ブロックへのマッピングからなるようなコンパイル；および、データフロー動作及びもし存在する場合、前記制御論理回路の残りの部分のプロセッサによって実行される命令へのマッピングからなる。実行される場合、プロセッサからなる方法および装置を実行する複数命令を記憶するコンピュータでアクセス可能な媒体もまた、考えられる。
別の一実施例において、装置は相互接続される複数プロセッサからなる。各々の複数プロセッサはそれにダウンロードされるプログラムを実行するように構成され、各々のプログラムは、演算／論理命令、および、演算／論理命令の実行を制御する制御フロー命令を含む複数命令からなる。各々のプログラムは、ハードウェア記述言語（ＨＤＬ）で記述される電子システムの一部の動作を表す。複数プロセッサによるプログラムの実行は、電子システムの動作を集中的に実行する。
本発明は、様々な変更および代替の形に影響されやすい一方で、その特定の実施例は図面において一例として示され、本願明細書において詳述される。
しかしながら、それらの図面およびそれの詳細な説明は、開示される特定の形に本発明を制限する意図を有さず、これに反して、その意図は、添付の請求範囲で定義される本発明の範囲内におけるすべての変更、同等物および代替物に適用されると理解されるべきである。
【発明を実施するための最良の形態】
【０００４】
ＨＤＬ実行システムの概要
一実施例において、電子システムのＨＤＬ記述は、オブジェクトコードにコンパイルされ（例えば、１つまたはそれ以上のプログラムであって、各々のプログラムは、プロセッサによって実行される命令セット・アーキテクチャの複数命令からなる）、１つまたはそれ以上の命令メモリにダウンロードされ、プロセッサ・システムによって実行される。プロセッサ・システムは、ターゲット電子システムにおいて単一チップまたは多重チップで実行される。ＨＤＬは、いかなる高いレベルの言語（例えば、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、Ｃ言語の派生物など）であってもよい。プロセッサ・システムによって実行される命令セット・アーキテクチャは、演算／論理命令（またはビット操作命令）、及び制御フロー命令（例えば、分岐命令、および特に条件付きの分岐命令）の両方をサポートする。
プロセッサ・システム・アーキテクチャ
一実施例において、プロセッサ・システムは相互に連結したプロセッサのアレーからなる。各々のプロセッサ（Ｐ）は、１つまたはそれ以上の演算エンジン（ＣＥ）からなる。図１に示すように、図示されたプロセッサ・システムの一実施例の基本的な構築ブロックは、演算エンジン（ＣＥ）１０である。ＣＥは、複数ビット幅データを処理するために使用される論理および演算データパス・ハードウェアからなる。図１に示すように、ＣＥ１０は、レジスタ１２、シフタ１４、演算論理装置（ＡＬＵ）１６および乗算器１８からなる。ＣＥの他の構造は、所望のように、上記の構成要素および他の構成要素のスーパーセットおよび／またはサブセットを含む他の実施例において使用される。
図２に示すように。一実施例において、プロセッサ（Ｐ）２０は、１つまたはそれ以上の演算エンジン（ＣＥ）（例えば図２のＣＥ１０Ａ‐１ＯＤ）、レジスタ・ファイル（ＲＦ）１２、命令メモリ（ＩＭ）２２、および、実行制御２４からなる。ＣＥ１０Ａ‐１０Ｄの各々は、例えば、図１において示されるＣＥ  １０の実例であってもよい。一実施例では、ＣＥ１０Ａ‐１０Ｄは、図１に示すように個別のレジスタ１２を含まないが、むしろ、図２に示すようにレジスタ・ファイル１２を共有する。したがって、１つまたはそれ以上のＣＥ、ＲＦ、ＩＭおよび関連する制御論理は、図２に示すようにプロセッサ（Ｐ）を構成する。マルチポートのレジスタ・ファイル（ＲＦ）は、並列に作動する複数ＣＥが並列に作動およびデータにアクセスするようにデータを記憶する。ＣＥの動作は、命令メモリ（ＩＭ）２２に記憶された命令によって制御される。ＩＭ ２２は、いかなる種類のメモリ（例えば不揮発性メモリ、スタティック・ランダムアクセスメモリ（ＳＲＡＭ）、命令キャッシュのようなキャッシュメモリなど）から構成されてもよい。実行制御２４は、命令を引き出し、実行のためのＣＥ １０Ａ‐１０Ｄにそれらを送り、ＲＦ １２などに更新された正しい答えを保証する責任を負う。図２において図示される実施例は、さらにレジスタ・ファイル１２およびＣＥ １０Ａ‐１０Ｄに接続される実行制御２４に結合されるＩＭ ２２を含む。ＣＥ１０Ａ‐１０Ｄは、さらにレジスタ・ファイル１２に接続される。多くのＣＥは、プロセッサ２０の様々な実施例にはいくつかのＣＥが含まれてもよい。
いくつかの実施例において、プロセッサ２０は、典型的なＡＳＩＣチップのそれよりかなり短いサイクルタイムで、作動するように高度に最適化された物理的な実行ができるパイプラインマシンである。典型的なＡＳＩＣチップは、広範囲の並列処理で適度なサイクルタイムにおいて高いスループットを達成し、結果として、複雑なカスタム・ハードウェアになる。本願明細書において記述されるシステムのいくつかの実施例は、多くのＲＩＳＣのような単純命令を実行することにより、短いサイクルタイムで並列で動作する複数プロセッサで同等またはより高いスループットを達成し、結果として、容易に異なるアプリケーションに再目的化される汎用ハードウェアになる。本質的には、本願明細書において記述されるシステムは、時分割の単純ハードウェア資源によって、高いスループットを達成する。プロセッサ２０は、上記したような命令セットアーキテクチャを実行し、演算／論理命令を含み、フロー命令を制御する。
図３は、ローカル・スイッチ（ＬＳ）３２を通じてデータメモリ（ＤＭ）３４に相互接続される、例えば、階層的なネットワークにおけるプロセッサ（Ｐ）２０Ａ‐２０Ｄのクラスタ３０を図示する。各々のプロセッサ２０Ａ‐２０Ｄは、例えば、図２において示されるプロセッサ２０の実例であってもよい。データメモリＤＭ３４は、プロセッサ２０Ａ‐２０ＤにおけるＲＦ１２にとっては大きすぎるデータを記憶するために使用される。一実施例において、ＬＳ３２はプロセッサ２０Ａ‐２０ＤおよびＤＭ ３４間の高い帯域幅の並列の通信を容易にする。複数クラスタは、階層的なネットワーク・トポロジを形成するためにスイッチの他の層を通じて相互接続している（例えば、一実施例のために、図４に示すように、各々のクラスタ３０Ａ‐３０Ｄが図３において例えば示されるクラスタ３０の実例でもよいようにスイッチ３６によって接続されるクラスタ３０Ａ‐３０Ｄで）。提供されたクラスタの範囲内のプロセッサ３０Ａ‐３０Ｄは、いくつかの実施例で、異なるクラスタ３０Ａ‐３０Ｄにおいてプロセッサよりも効率的に通信する（例えば、プロセッサを有するクラスタに含まれるＤＭ ３４を通じて）。
代替的に、図５に示すように、スイッチ４０のようなクロスバー・スイッチが、ＰおよびＤＭを相互接続させるために使われる。いくつかの実施例で、異機種間接続ネットワークは、階層的およびクロスバー・トポロジの組合せによって形成される。例えば、クロスバーは、最大ローカル相互接続を提供するため、階層のより低いレベルで使用され、一方で、階層的なトポロジが、相互接続の数が実行される設計の設計階層のより高いレベルで減る傾向があるという事実を活用するため、より高いレベルの大きいクラスタを相互接続するのに使われる。
プロセッサおよび相互接続アーキテクチャの一実施例は、「散在プロセッサおよび通信要素での演算処理システム」という表題で２００３年６月２４日に出願され、特許公表番号がＵＳ ２００４００３０８５９であり、発明者は、マイケルＢ．デール、ウィリアムＨ． ハリディ、デビット  Ａ．ギブソンおよびクレイグ Ｍ．チェースであり、十分かつ完全に本願明細書において記述されたかのように本願明細書に引用したものとする同時係属出願の出願番号１０／６０２，２９２に記述される。
プロセッサおよび相互接続アーキテクチャのある実施例だけが本願明細書において記述される一方、本願明細書に含まれる教示を使用して、処理および通信間の最適バランスを達成するために別のアーキテクチャを実行することは、当業者に明白である。
コンパイル工程
一実施例において、ＨＤＬ記述は、従来の論理合成動作に類似した基礎をなす論理機能ブロックのネットワークの内部データ構造を作成するため、解析され、精巧に作り上げられる。しかしながら、論理合成とは異なり、バス、データ動作、状態機械および条件実行制御ブロック（例えば、ＣＡＳＥ構成、ｉｆ‐ｔｈｅｎ構成など）は、保存される。制御動作は、制御構成から直接推定される。データ（またはデータフロー）動作は、制御構成の本体から推定される。
別の実施例において、ＨＤＬ記述に記述される論理機能は、米国特許第６,１４５,１１７号に記述されたものと類似したデータ・バス走査技術を適用することによって、データ（またはデータフロー）動作および制御動作に分けられる。例えば、データ・バスは識別され、データ・バスに接続される要素は、データフロー要素として識別される。データ・バスに連結されない要素は、制御論理回路と確認される。
他の一実施例において、すべての複数ビット幅データは、データフロー動作を識別するためにデータ・バスとして処理される。
データフロー分離の後、ネットワークは、相互連結されたメモリ素子、データ演算子、および、制御論理を備える。論理機能ブロックのネットワークは、区分間の通信の最小化に基づいてプログラム区分に仕切られる。
データフロー動作は、論理的および演算プロセッサ命令にマッピングされる。制御動作は、一定の条件変数によって制御される分岐命令にマッピングされる。一連の命令は、プロセッサによる実行に適したプログラムを形成する。プログラムは、一切を含めた通信がプロセッサ間の物理的分離の増加と共に増加するので、プロセッサ２０の利用できるハードウェア資源、および、相互接続距離を減少させるプロセッサ２０の設置に基づいて、並列実行のためプロセッサ２０に割り当てられる。例えば、互いに通信するプログラムは、相互接続上において物理的に互いに近いプロセッサ（例えば、相互接続上の他のプロセッサと比較すると、相互接続上のより低い待ち時間で通信する）に割り当てられる。さらに一般的にいえば、プロセッサに対するプログラムの割当ては、効率的に互いに通信するプロセッサに互いに通信するそれらのプログラムを割り当てることを試みる、または、同じプロセッサ上でこのようなプログラムを時分割多重する可能性さえある。例えば、プロセッサのクラスタが実行される（例えば、図４または図５）場合、同じクラスタのプロセッサは互いに「近い」、または効率的に通信し、異なるクラスのプロセッサは互いに「近く」なく同じクラスタのプロセッサより効率的ではなく通信する。近さは、物理的な場所に言及する（例えば、第１プロセッサが、第２プロセッサが第３プロセッサに位置するよりも物理的に第３プロセッサのより近くにある場合、第１プロセッサは、第２プロセッサから第３プロセッサまでよりも近い）。通信の効率は、より短い待ち時間および／またはより高い帯域幅などに関して測定される。
実施例によっては、実行制御の複雑性を単純にするため、コンパイラは、命令配列を通じたプロセッサ間のパイプライン・インタロックおよびデータ依存関係、および／または無操作命令の挿入および／またはメッセージ通過のような明確な同期を決定する責任がある。コンパイラはレジスタ／メモリのような資源を割り当て、並列処理を最大にし、利用できるプロセッサ間で共有される並列操作をスケジュールする。スイッチの各追加的なレベルにより余分な遅延が加えられるので、コンパイラは、近傍でプロセッサと高度に接続された動作を実行するため、論理機能の場所を活用する。
プロセッサ・ハードウェア資源およびスループット間の複数トレードオフは、実行される。一実施例において、最も基本的なコンパイル・モードにおいて、ＨＤＬ記述で特定された論理機能のタイミング関係は、コンパイル工程において保存される。コンパイラは、多くのプロセッサ間で並行に実行されるすべての並列動作をスケジュールする。結果として、直接のハードウェア・マッピングまたはハードウェア資源の時分割を通じてすべての並列動作を実行する十分なハードウェアがあるという条件で、ＨＤＬ記述で示唆されるように、論理機能は同じ時間において完成される。
一実施例で、システムはハードウェア資源の時分割により、ハードウェア要件を削減するため、重要な動作は速度を上げまた重要でない動作は遅延させるように論理動作を再度時間調節する。
コンパイル工程の結果は、オンボードのプロセッサのための一連の命令である。一実施例において、命令はチップ全体にわたって別々のＩＭに記憶される。オンボードハードウェア資源がＨＤＬ記述において特定される並列動作を実行するのに十分な場合、ユーザによって特定される単一システム・サイクルにおいて、すべての動作のための十分な命令を含まなければならないだけなので、ＩＭは浅い。
本願明細書において記述されるシステムの１つの適用において、ユーザは、単一ＨＤＬプロセッサ・チップに、設計中のチップのＨＤＬ記述をコンパイルする。しかしながら、設計中のチップの最小必要条件を越えた、追加的な動作のための命令を記憶する追加的なメモリロケーションの有効性は、複数チップ・システムをエミュレートするため、プロセッサ・チップのプログラムを可能にする。時分割ハードウェア資源にシステムへの追加的な命令は、他の部分をエミュレートするために用いられる。このようなエミュレーション手段がより遅く動く場合であっても、それは、依然として、いくつかの実施例で、ＦＰＧＡを使用した既存のエミュレーション法よりかなり速くかつ安価である。
一実施例のために、図６および７はコンパイル工程を図示する。特に、図６は、実行のため、１つまたはそれ以上のプログラムへのＨＤＬ供給源の変換を図示しているブロック図である。図７は、コンパイラおよび特定のポスト-コンパイル動作の一実施例のための高レベルのフローチャートである。すなわち、コンパイラは実行される場合、図７において示される（および概略的に、図６において図示される）動作を実行する複数命令から構成される。
図６は、ＨＤＬ供給源５０（電子システムのＨＤＬ記述を記憶する１つまたはそれ以上のコンピュータ・ファイルから構成される）を図示する。一般に、ＨＤＬ供給源５０は、１つまたはそれ以上のＨＤＬ文（例えば、図６におけるＨＤＬステートメント１からＮ）から構成されてもよい。ＨＤＬにおいて定義される構文を使用して、ＨＤＬ文は電子システムおよびその論理動作を記述する。ＨＤＬ文は、例えばレジスタ、フロップス、ラッチおよび他のクロック付き記憶装置のようなメモリ素子に記憶されるデータに実行される例えば加算器、シフタ、マルチプレクサ（多重通信回路）などのような電子システムのデータフロー要素に対応するデータフロー動作を含む。一般に、データフロー要素は、１つまたはそれ以上のデータ・バス（またはオペランド）を受容し、結果を生成するためにオペランドを操作する。加えて、ＨＤＬ文は、データフロー要素を制御する電子システムにおいて論理（またランダム論理とも称される）を制御するために対応する制御動作を含む。少なくともいくつかのランダム論理は、データフロー要素に接続され、したがって、制御論理／動作およびデータフロー要素／動作の関係は、ＨＤＬ供給源５０から検出される。
コンパイラは、ＨＤＬ供給源５０において特定されるデータフロー動作および制御フロー動作を検出するためにＨＤＬ供給源５０を分析する。すなわち、コンパイラはＨＤＬ供給源５０（図７におけるブロック８０）を解析する。コンパイラは、データフロー動作（例えばデータ演算子、メモリなど）を識別するため、バス（例えば様々な実施例において、ＨＤＬ供給源５０において明白に定義されたバス、または、ＨＤＬ供給源５０におけるいかなる複数ビット信号の値）を横断し、対応する制御動作（図７におけるブロック８２）を識別するために制御信号を横断する。すなわち、データフロー要素はバスに接続されるとして検出され、一方で、制御論理は、データフロー要素の制御ポート、制御信号または他の制御論理と接続されるとして検出される。コンパイラは、ＨＤＬ供給源５０（図７におけるブロック８４）において記述される電子システムを表すため、データフロー要素および制御論理のネットワークを形成する。いくつかの実施例で、ブロック８０、８２および８４は論理変換動作に類似する（例えば、本願明細書にその全体を引用した米国特許第６，１４５，１１７号の記述に類似している）。
コンパイラは、ネットワークをプログラム区分に仕切る（例えば図６および図７のブロック８６において示されるデータ構造５２におけるプログラム区分５４Ａ‐５４Ｃ）。各々の区分は、一緒に接続されるデータフロー要素に対応するデータフロー動作、および、それらのデータフロー要素を制御する制御論理に対応する制御動作から構成される。図６において、各々のプログラム区分５４Ａ‐５４Ｃは、データフロー（参照番号５６Ａ‐５６Ｃ）および制御論理（参照番号５８Ａ‐５８Ｃ）を含む。いくつかのケースにおいて、プログラム区分（例えば区分５４Ｄ）は、制御論理５８Ｄのみしか含んでいない。制御論理回路５８Ｄは、対応しているデータフロー要素を直接制御しない論理から構成される。通常、残りの制御論理回路５８Ｄは、他の制御論理回路５８Ａ‐５８Ｃと比較すると比較的小さい。
区分間の通信が可能な限り最小化されるように、区分は選ばれる。すなわち、以前に検出されたデータフロー要素に接続されるデータフロー要素が位置する場合、そのデータフロー要素／動作は以前に検出されたデータフロー要素／動作と同じ区分に含まれる。データフロー要素が以前に検出されたデータフロー要素に接続されない場合、データフロー要素／動作は異なるプログラム区分に含まれる。同様に、以前に検出されたデータフロー要素、または、以前に検出されたデータフロー要素を制御する制御論理に接続する制御論理が検出される場合、その制御論理／動作は、以前に検出されたデータフロー要素と同じ区分に含まれる。以前に検出されたデータフロー要素にも、また、以前に検出されたデータフロー要素に接続される制御論理にも接続されない制御論理が検出される場合、制御論理／動作は、異なるプログラム区分に含まれる。データフロー要素（および制御論理）間の接続はＨＤＬ記述において明確であり、したがって、接続は容易に検出される。
図６は、いくつかのデータフロー要素を含むように、データフロー要素を制御するため制御論理回路５８Ａからの接続を有するデータフロー５６Ａを図示する。データフロー要素は、一緒に接続され、場合によっては、またプログラム区分への入力および出力を有する。例えば、図６で、データフロー５６Ａは、プログラム区分５４Ｂから（特に、データフロー５６Ｂ‐矢印６０から）入力を受容する。コンパイラが区分間の通信の最小化を試みる一方で、場合によっては、通信が回避されない。
コンパイラは、提供されたプログラム区分（区分５４Ａの矢印６２）におけるデータフロー動作に対応する演算／論理命令（ＡＬＵ命令）を生成し、対応する制御論理（区分５４Ａの矢印６４）に基づいてＡＬＵ命令の実行を制御するための条件付きの分岐命令のような制御フロー命令を生成する。ＡＬＵ命令はまた、制御論理から生成される（例えば、論理機能が条件付きの分岐命令の条件として計算されるにはあまりに複雑である場合、制御論理において特定される論理機能を計算する）。ＡＬＵ命令は、ビット操作命令（例えばシフト、マスク、ＡＮＤ、ＯＲの類の論理命令など）および、演算命令（例えば、加算、減算、乗算など）を含む。命令は、コンパイラによって生成されるプログラムを実行するプロセッサによって実行される命令セットアーキテクチャにおいて定義される。
コンパイラは、プロセッサによって実行されるプログラムとして、ＡＬＵ命令および制御フロー命令を配置する（例えば図６および図７のブロック８８のプログラム６６Ａ‐６６Ｄ）。各々のプログラム区分５４Ａ‐５４Ｄは、結果として対応するプログラム６６Ａ‐６６Ｄになる。一般に、制御フロー命令は、ＡＬＵ命令の実行を制御する。例えば、２‐１多重通信回路は、１つまたはそれ以上のＡＬＵ命令の２つのセットとして実行される。１セットは、多重通信回路の出力に２‐１多重通信回路の第１入力を伝達し、および、別のセットは、多重通信回路の出力に２‐１多重通信回路の第２入力を伝達する。条件付きの分岐は、結果に基づいたコードのセットの１つに選択および分岐を評価する。より大きい数の多重通信回路入力は、コードの追加的なセットによって同様に実行される。別の例として、１つのオペランドを別のオペランドによって示される多くのビットによってシフトするシフタが実行される。制御信号は、シフトが可能であるか否かを制御する。制御信号に基づく条件付きの分岐は、シフト・コードが実行されるか否かを制御する。多くの可能なコード分岐から１つのコード分岐だけが実行されるので、ＨＤＬハードウェア認識の他の方法と比較して、電力消費は減少する。
コンパイラ（または、コンパイラによって出力されたプログラム６６Ａ‐６６Ｄを実行するスケジューラ・プログラム）は、プログラムを実行（図７のブロック９０）のためのプロセッサに割り当てる。プロセッサに対するプログラムの配分は、対応しているプログラムが通信する場合プロセッサが通信することができる効率を考慮する。例えば、プロセッサＰ１‐Ｐ４（参照番号６８Ａ‐６８Ｄ）は図６において示され、プロセッサ６８Ａ‐６８Ｂは共有メモリ７０に連結される。したがって、プロセッサ６８Ａ‐６８Ｂは効率的に通信し、プログラム６６Ａ‐６６Ｂ（通信する）は共有メモリ７０で通信するそれらのプロセッサに割り当てられる。他のプログラム６６Ｃ‐６６Ｄは、残りのプロセッサ６８Ｃ‐６８Ｄに割り当てられる。プロセッサ６８Ａ‐６８Ｄは、いかなる構造（例えば図３および／または４において示される構造）のプロセッサ２０の実例であってもよい。
共有メモリ７０が図示された実施例の通信に使われる一方、他の実施例は、他のやり方において通信する。例えば、プロセッサはプロセッサ間の相互接続を通じて直接メッセージまたは制御信号を通信する。それらが物理的に互いに近い場合、プロセッサは効率的に通信する（例えば、他のプロセッサの待ち時間と比較すると、相互接続における待ち時間が低い通信が使われる）。さらに他の実施例において、プロセッサは、効率に関してほぼ等しく通信し、プログラムはいかなる所望のやり方においてもプロセッサに割り当てられる。
コンパイラまたはスケジューラは、実行（ブロック９２）のため割り当てられたプロセッサに、プログラム６６Ａ‐６６Ｄをダウンロードし、プロセッサはプログラム（ブロック９４）を実行する。各々がそれらの割り当てられたプログラムを実行するプロセッサは、ＨＤＬ供給源５０において記述される電子システムの機能を実行する。
ある場合は、付加的な加速のため構成可能な論理（例えばＦＧＰＡまたは他の構成可能論理回路）である制御動作を実施することが望ましい。ある場合は、プロセッサはＦＧＰＡまたはプロセッサへプログラムをダウンロードする一部としてプログラムされるほかの構成可能な論理回路を含む。
プログラム区分の数は、ＨＤＬ供給源５０、ＨＤＬ供給源５０それ自体、生成されるプログラムのサイズなどによって記述される電子システムに基づいて変化することに注意するべきである。加えて、プログラムを実行するための提供された装置のプロセッサの数はまた、変化する。
命令実行制御
ＩＭの命令語は、複数フィールドから構成される。一実施例では、命令語における大部分のビットが、ＣＥのデータパスの動作およびＲＦまたはＤＭからのメモリ・アクセスの制御に使われる。他のフィールドは、命令の配列を制御する。プログラム可能な論理アレイ・ハードウェアの形である条件論理アレイ（ＣＬＡ）が、条件付きの動作のＨＤＬプログラム変数を評価するため、一実施例において、実行制御論理において使われる。実質的に、ＩＭおよびＣＬＡの組合せがプロセッサの分岐動作を実行する。
ＣＬＡは、並列に分岐条件を評価し、一連の連続した命令の分岐条件を評価する従来のアプローチの上での実行を加速する。
図８は、分岐命令を実行するためのプロセッサの一実施例における命令メモリ９８およびハードウェアの典型的な分岐命令を図示する。図８の分岐命令において、次のアドレス／条件コード選択（ＮＡＣＣ）フィールド１００は、分岐条件が満たされたかどうかを検査するため、ＣＬＡを供給する適切な制御変数を選ぶために使われる選択コードを含む。大きくかつ遅いＣＬＡの使用を回避するために、図示された実施例において、複数ＣＬＡ１０２Ａ‐１０２Ｎが使われる。分岐の条件が正であると検査された場合、選択されたＣＬＡは、その出力に次にアドレスを生成する。すなわち、コンパイラは、分岐条件が満たされる場合、実行される１つまたはそれ以上のＡＬＵ命令のアドレスを生成するためにＣＬＡを構成し、分岐条件が満たされない場合、実行される１つまたはそれ以上のＡＬＵ命令のアドレスまたは別の分岐命令を生成するためにＣＬＡを構成する。例えば、満たされた分岐条件は、加算またはシフト動作がＲＦから特定のオペランドに実行されることを示す。分岐条件が満たされる場合生成されるアドレスは、加算器またはシフタ・データフロー要素に対応するデータフロー動作を実行する１つまたはそれ以上の命令のＩＭ９８におけるアドレスである。次のアドレス供給源選択（ＮＡＳＳ）フィールド１０４は、マルチプレクサ（多重通信回路）１０６を通じて、選択されたＣＬＡ１０２Ａ‐１０２Ｎから分岐アドレスの供給源を選ぶ。選択されたアドレスは、命令メモリ９８から次の命令を引き出すためにプログラム・アドレスレジスタ１０８に提供される。
コンパイラは、ＣＬＡによって評価される制御変数を割り当てる。ＣＬＡの入出力レジスタは、一実施例において、ＲＦの拡張部分としてマッピングされ、アドレス指定される。
一実施例において、一度電源を入れられると各々のＣＬＡの機能はセットアップされ、そして、新規なＨＤＬプログラムがメモリにロードされるまで、構造は変わらない。非分岐命令において、ＮＡＣＣフィールドは次の命令のアドレスを含み、ＮＡＳＳフィールドはそれを次のアドレスとして選ぶ。
本発明の別の一実施例において、ＣＬＡは絶対分岐アドレスの代わりにオフセットされるアドレスを生成する。次にオフセットは、次のアドレスを生成するためにこのアドレスに加えられる。
ＣＬＡの拡張された使用
頻繁に制御論理において見られるように、多層のブール演算は、場合によって、単独でプロセッサのビット操作命令のみにマッピングされる場合、多数のプロセッサ・サイクルを消費することに注意することは重要である。それゆえに、分岐条件の復号化に加えて、ＣＬＡは実行プロセッサ命令よりも少ないサイクルで状態機械またはランダム論理を評価するように構成される。ランダム論理評価のためのＣＬＡのこのような構成は、図６および７に関して前述したように、ＦＰＧＡの一実施例または制御論理を実行するように構成されている他の構成可能な論理である。
図９は、ＣＬＡ（例えばＣＬＡ１０２Ａ）の一実施例である。図示された実施例において、ＣＬＡは、入力レジスタ１１４、ＡＮＤ配列１１６、ＯＲ配列１１８および出力レジスタ１２０を含む。入力レジスタ１１４は、出力レジスタ１２０に連結されるＯＲ配列１１８に連結されるＡＮＤ配列１１６に連結される。入力レジスタ１１４からのビットは、ＡＮＤ配列１１６（プログラム可能である）において、選択的にＡＮＤ処理される。ＡＮＤ配列１１６から出力されたビットは、出力レジスタ１２０のための出力ビットを生じるため、ＯＲ配列１１８（これもプログラム可能である）によって、選択的にＯＲ処理される。出力レジスタおよび入力レジスタ間のフィードバックパスは、状態機械を実行するために用いられる。代替的に、ＯＲ配列１１８の出力は、複数サイクルの連続した論理を実行するため、クロスバー・スイッチ１１０を通じて入力レジスタに連結される。ＯＲ配列１１８からのいかなる出力ビットも、クロスバー・スイッチ１１０を通じて入力レジスタ１１４のいかなる入力ビットにも供給される。
図示された実施例で、多重通信回路１１２Ａ〜１１２Ｎ（例えば入力レジスタ１１４でビット当たり１多重通信回路１１２あ〜１１２N迄）クロスバースイッチ１１０の出力、出力レジスタビット１２０（例えば有限状態機械スイッチ）またはプロセッサのデータバスからのビット、該部I／O、命令メモリ９８のNACCフィールド１００等の間で選択するために使用される。多重通信回路１１2A〜１１２Nは同様にCＬＡを構成するためプログラム可能である。
状態機械およびランダム論理評価のためのＣＬＡの構成は、資源利用および性能判定基準に基づいてコンパイラによって決定され、一度電源を入れられるとプログラムされ、または実行中、再構成される。
チップ外からの入力は、ＣＬＡレジスタに入れられる。
出力レジスタは、次のアドレスまたはオフセットをプログラム・アドレス１０８などに提供するため、チップ外通信のためのＩＯパッドに接続される。
コンピュータ支援設計ツールおよび環境
設計アナライザ‐設計アナライザは、ＨＤＬ記述において特定されるマイクロ・アーキテクチャを見るため設計者のための視覚化ツールである。設計アナライザは、デバッグおよび最適化を容易にするために階層、データフローおよび設計の制御フローのグラフ表示を提供する。
シミュレータ‐シミュレータは、サイクルの正確な結果でＨＤＬ記述を実行しているプロセッサの機能をシミュレーションする。
スケジューラ‐スケジューラは、性能を最大にするために割り当てられたプロセッサによる実行のためデータパス、メモリおよびＩＯ演算のスケジュールを行う。手入力メカニズムは、手動でのスケジューリングを最適化するために提供される。
コンパイラ‐コンパイラは、上記のようなプロセッサによる実行のために適切な対象コードに、ＨＤＬ記述をコンパイルする。それはまた、ＣＬＡおよびＩＯのようなハードウェアを構成するために構成データを生成する。
行動のシンセサイザ‐行動シンセサイザは、高水準言語（例えばＣおよび様々なＣ言語派生物）で表現される設計の早すぎるより高水準な記述をＨＤＬ記述へ転換するか、または、プロセッサによる実行のために適切なマシン・コードに直接転換する。
コンピュータでアクセス可能な媒体およびコンピュータシステム
コンパイラは、本願明細書において記述されるように、実行される場合、コンパイラの動作を実行する複数命令からなるプログラムとして実行される。コンパイラ自体を形成している命令が、いくつかの実施例で、プロセッサ２０によって実行される命令セットアーキテクチャと異なる命令セットアーキテクチャで構成される。例えば、汎用コンピュータの命令セットアーキテクチャが使われ、プロセッサ２０のための結果として生じるプログラムは、汎用コンピュータからプロセッサ２０へダウンロードされる。他の実施例では、コンパイラ命令は、プロセッサ２０と同じ命令セットアーキテクチャから構成され、コンパイラはプロセッサ２０上で実行される。同様に、スケジューラおよび他のコンピュータ支援設計ツールは、プログラムとして実行される。これらのプログラムは、記憶されるかまたは、別にコンピュータでアクセス可能な媒体上でコード化される。
ここで図１０に戻ると、コンピュータでアクセス可能な媒体２００のブロック図が示される。一般的に言って、コンピュータでアクセス可能な媒体は、コンピュータに命令および／またはデータを提供するため、使用の間、コンピュータによってアクセス可能ないかなる媒体も含む。例えば、コンピュータでアクセス可能な媒体は、例えば、ディスク（固定またはリムーバブル）、テープ、ＣＤ‐ＲＯＭまたはＤＶＤ‐ＲＯＭ、ＣＤ‐Ｒ、ＣＤ‐ＲＷ、ＤＶＤ‐Ｒ、ＤＶＤ‐ＲＷ、RAM（例えば、同期ダイナミックＲＡＭ（ＳＤＲＡＭ）Ｒａｍｂｕｓ、DRAM、（RDRAM）、スタティックRAM(ＳＲＡＭ)など）のような揮発性または不揮発性メモリ媒体、ＲＯＭ、フラッシュ・メモリ、例えばユニバーサルシリアルバス（ＵＳＢ）インタフェースなどのような周縁インタフェース経由でアクセス可能な不揮発性メモリ（例えばフラッシュ・メモリ）のような磁性または光学媒体のような記憶媒体を含む。図１０のコンピュータでアクセス可能な媒体２００は、１つまたはそれ以上のコンパイラ２０２、分析設計データ構造５２および／またはプログラム６６Ａ‐６６Ｄを記憶する。一般に、コンピュータでアクセス可能な媒体２００は、実行される場合、図７の１つ以上において示されるフローチャートの一部またはすべて、および／または、コンパイラのための図６において図解される演算を実行する命令のいかなるセットも記憶する。コンピュータでアクセス可能な媒体２００はさらに、実行される場合、スケジューラまたは上記した他のいかなるコンピュータ支援設計ツールも実行する命令のいかなるセットも記憶する。コンピュータでアクセス可能な媒体２００はさらに、実行される場合、プログラム６６Ａ‐６６Ｄの一部またはすべてを実行する命令のいかなるセットも記憶する。
図１１は、典型的なコンピュータシステム２１０の一実施例のブロック図である。図１１の実施例において、コンピュータシステム２１０はプロセッサ２１２、メモリ２１４および様々な周縁装置２１６を含む。プロセッサ２１２は、メモリ２１４および周縁装置２１６に連結される。
プロセッサ２１２は、本願明細書において記述されるコンパイラにおける命令を含む命令を実行するように構成される。様々な実施例において、プロセッサ２１２はいかなる所望の命令セットも実行する（例えば、インテル・アーキテクチャ‐３２（ＩＡ‐３２、別名ｘ８６）、６４ビットの拡張部分を有するＩＡ‐３２、ｘ８６‐６４、ＰｏｗｅｒＰＣ、Ｓｐａｒｃ、ＭＩＰＳ、ＡＲＭ、ＩＡ‐６４など）。実施例によっては、コンピュータシステム２１０は１つ以上のプロセッサを含む。
プロセッサ２１２は、所望の方法でメモリ２１４および周縁装置２１６に連結される。例えば、実施例によっては、プロセッサ２１２は様々な相互接続を経てメモリ２１４および／または周縁装置２１６に連結される。代替的にまたはさらに、１つまたはそれ以上のブリッジ・チップは、プロセッサ２１２、メモリ２１４および周縁装置２１６を連結するために用いられ、これらの構成要素間の複数接続を生成する。メモリ２１４は、メモリ・システムのいかなるタイプも含む。例えばメモリ２１４は、ＤＲＡＭ、特に、ダブルデータ信号速度（ＤＤＲ）ＳＤＲＡＭ、ＲＤＲＡＭを含む。メモリコントローラは、メモリ２１４へのインタフェースのために含まれ、および／または、プロセッサ２１２はメモリコントローラを含む。
メモリ２１４は、（本願明細書において記述されるソフトウェアを実行する命令を含む）使用の間、プロセッサ２１２によって実行される命令、使用の間、プロセッサ２１２によって作動されるデータなどを記憶する。
周辺機器２１６は、コンピュータシステム２１０に含まれ、または、それに連結されるいかなる種類のハードウェア装置をも表す（例えば、任意にコンピュータでアクセス可能な媒体２００を含む記憶装置、ビデオ・ハードウェア、音声ハードウェア、ユーザ・インタフェース機器、ネットワーク・ハードウェアなどの他の入出力（Ｉ／Ｏ）装置）。実施例によっては、複数コンピュータシステムが、クラスタで使われる。
上記の開示が十分に認識されるならば、数多くの変化および変更は当業者には明白であろう。以下の請求項はすべてのこのような変化および変更を受け入れるように解釈される意図を有する。
【図面の簡単な説明】
【０００５】
以下の詳細な説明は、以下に簡単に説明される添付の図面に言及する。
【図１】論理および演算命令を実行するためにローカルレジスタおよびハードウェアからなるプロセッサのデータ実行ユニットの一実施例のブロック図である。これは、基本的な演算エンジンの一実施例である。
【図２】命令メモリに記憶される命令によって、プロセッサを形成するために制御されるマルチポートのデータ記憶によりデータを共有する多重演算エンジンの一実施例のブロック図である。
【図３】多重プロセッサがスイッチメカニズムによりメモリを共有し、プロセッサのクラスタを形成する通信アーキテクチャの一実施例のブロック図である。
【図４】プロセッサの階層的なネットワークを形成するため、プロセッサ・クラスタを相互接続する一実施例のブロック図である。
【図５】高度に接続されたプロセッサおよびクロスバー・スイッチによるメモリの一実施例のブロック図である。
【図６】複数プログラムへのＨＤＬ記述のコンパイルの一実施例を図示するブロック図である。
【図７】複数プログラムにＨＤＬ記述をコンパイルするコンパイラの一実施例の動作を図示するフローチャートである。
【図８】並列に分岐状態を評価するために条件論理・アレイ（ＣＬＡ）を含むプログラマブル論理ハードウェアを使う命令配列および条件付き分岐アーキテクチャの一実施例のブロック図である。
【図９】分岐状態の他に他の論理を評価するハードウェアを含むＣＬＡの内部構造の一実施例のブロック図である。
【図１０】コンピュータでアクセス可能な媒体の一実施例のブロック図である。
【図１１】コンピュータシステムの一実施例のブロック図である。
【図１】
2008505397.tif 000003
【図２】
2008505397.tif 000004
【図３】
2008505397.tif 000005
【図４】
2008505397.tif 000006
【図５】
2008505397.tif 000007
【図６】
2008505397.tif 000008
【図７】
2008505397.tif 000009
【図８】
2008505397.tif 000010
【図９】
2008505397.tif 000011
【図１０】
2008505397.tif 000012
【図１１】
2008505397.tif 000013
【手続補正書】
【提出日】平成19年2月20日(2007.2.20)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプログラムへの電子システムのハードウェア記述言語（ＨＤＬ）記述の編集であり、前記複数のプログラムの各々は、少なくとも前記電子システムの一部の前記演算を実現するためプロセッサで実行可能な複数の命令からなる編集であって、そこにおいて、前記編集は、データフローおよび制御演算を検出するための前記ＨＤＬ記述の分析からなり、またそこにおいて、前記データフローおよび制御演算は、前記複数のプログラムに編集され、そして、同時演算は同時的な実行のために異なるプログラムに編集可能であるような編集；および、複数のプロセッサの命令メモリへの前記複数のプログラムのダウンロードからなる方法。
【請求項２】
請求項１に記載の方法であって、さらに前記複数のプロセッサ上での前記複数のプログラムの実行からなる方法。
【請求項３】
請求項１または２に記載の方法であって、前記ダウンロードは、前記複数のプログラムの第１のプログラム、および、前記複数のプロセッサの第１のプロセッサへの前記複数のプログラムの第２のプログラムのダウンロードからなる方法。
【請求項４】
請求項３に記載の方法であって、前記実行は、前記第１のプログラム、および、前記第１のプロセッサ上の前記第２のプログラムの時間多重化実行からなる方法。
【請求項５】
請求項１または２に記載の方法であって、前記実行の間、前記複数のプログラムの第１のプログラム、および、前記複数のプログラムの第２のプログラムの通信をさらに含む方法。
【請求項６】
請求項５に記載の方法であって、前記通信は、前記第１のプログラムを実行している第１のプロセッサおよび前記第２のプログラムを実行している第２のプロセッサの間で共有メモリを通じて実行される方法。
【請求項７】
請求項５または６に記載の方法であって、前記複数のプロセッサの第１のプロセッサ上での前記第１のプログラムの実行、および、前記第１のプロセッサの近くにある前記複数のプロセッサの第２のプロセッサ上での前記第２のプログラムの実行をさらに含む方法。
【請求項８】
請求項５または６に記載の方法であって、前記複数のプロセッサの第１のプロセッサ上での前記第１のプログラムの実行、および、効率的に前記第１のプロセッサと通信することが可能である前記複数のプロセッサの第２のプロセッサ上での前記第２のプログラムの実行をさらに含む方法。
【請求項９】
先行する請求項に記載の方法であって、前記編集は、前記ＨＤＬ記述で記載される制御論理回路からの、前記ＨＤＬ記述に記載されるデータフロー要素の分離からなる方法。
【請求項１０】
請求項９に記載の方法であって、前記編集はさらに、前記データフロー要素、および、前記データフロー要素を制御する前記制御論理回路の対応する複数のプログラム区分への配置からなる方法。
【請求項１１】
請求項１０に記載の方法であって、前記編集はさらに、実行される場合、前記複数のプログラム区分のうちの１つにおける前記データフロー要素の前記演算を実行する複数の論理演算命令の生成；実行される場合、前記複数のプログラム区分のうちの１つの前記制御論理回路に応答する前記複数の論理演算命令の実行を制御する複数の制御フロー命令の生成；および、前記複数の論理演算命令を使用する前記複数のプログラムのうちの１つおよび前記複数の制御フロー命令の作成からなる方法。
【請求項１２】
先行する請求項に記載の方法であって、前記分析は、電子システムのハードウェア記述言語（ＨＤＬ）記述からのデータフローの抽出；前記データフローに対応する論理演算命令の生成；前記ＨＤＬ記述からの前記データフローのための制御の抽出；および、前記制御に対応する制御フロー命令の生成からなる方法。
【請求項１３】
請求項１２に記載の方法であって、前記論理演算ユニット命令および前記制御フロー命令からの前記複数のプログラムの組み立てからなる方法。
【請求項１４】
前記複数のプログラムにおける分岐命令の実行からなる先行する請求項に記載の方法であって、前記実行は、複数の分岐条件の同時的な評価；および、前記複数の前記分岐命令の符号化に応答した分岐条件のうちの１つの選択からなる方法。
【請求項１５】
請求項１４に記載の方法であって、前記評価は、複数のターゲット・アドレスの生成からなり、そして、前記選択は、次の獲得アドレスとしての前記複数のターゲット・アドレスの１つの選択からなる方法。
【請求項１６】
請求項１４または１５に記載の方法であって、前記複数の分岐条件の評価は、プログラム可能な論理ハードウェアによって実行される方法。
【請求項１７】
先行する請求項に記載の方法であって、前記プログラムから前記プロセッサのプログラム可能なロジックブロックまで抽出された少なくとも前記制御演算の一部のマッピング；および、データフロー演算および前記制御論理回路の残留している部分のもしあれば前記プロセッサによって実行される命令へのマッピングからなる方法。
【請求項１８】
請求項１７に記載の方法であって、前記制御論理回路の前記部分実行するため前記プログラム可能なロジックブロックのプログラム、および、前記プロセッサへの前記命令のダウンロードからなる方法。
【請求項１９】
実行される場合、先行する請求項に記載の前記方法を実行する複数の命令を格納しているコンピュータ・アクセス可能な媒体。
【請求項２０】
相互接続に連結される１つまたはそれ以上のプロセッサからなる装置であって、前記１つまたはそれ以上のプロセッサの各々は、プログラムを実行するために構成され、各々のプログラムは、前記論理演算命令の実行を制御するため、論理演算命令および／または制御フロー命令を含む複数の命令からなり、各々のプログラムは、ハードウェア記述言語（ＨＤＬ）に記載される電子一部のシステムの前記演算を表わし、およびそこにおいて、プロセッサによる前記プログラムの実行は、集合的に前記電子システムの前記演算を実行し、そして、同時演算は異なるプロセッサ上での同時的な実行のため異なるプログラムに編集されるような装置。
【国際調査報告】
2008505397.tif 000014
2008505397.tif 000015
2008505397.tif 000016
2008505397.tif 000017
2008505397.tif 000018