(57)【要約】  低コストで、設計時間が短く、電力消費が少なく、性能が高い再構成可能プロセッサ構造、コンパイラ、およびプログラム命令実行の方法を提供する。プロセッサは従属および独立の両方のプログラム命令のデータ経路を有するプログラム命令を実行する。同時スレッディングもサポートする。プロセッサは、相互接続ネットワーク（４）とそれぞれが相互接続ネットワーク（４）に接続される命令セル（２）の異種のアレイとを持つ再構成可能コア（１）を有する。復号モジュール（１１）は構成命令（１０）を受け、各命令はデータ経路の１つから命令セル（２）の回路へのマッピングを符号化する。復号モジュール（１１）は各構成命令（１０）を復号し、相互接続ネットワーク（４）および命令セルを構成して、データ経路を命令セルの回路にマップしてプログラム命令を実行する。クロック・モジュール（２４）は構成命令（１０）により各クロック・サイクルで再構成することができる。コンパイラは、従属および独立の両方のプログラム命令のデータ経路を識別し、次に操作連鎖を用いてこれを命令セル（２）の回路にマップすることにより、プロセッサの構成命令（１０）を生成する。
2008539485.tif 000002
【特許請求の範囲】
【請求項１】
従属および独立の両方のプログラム命令のデータ経路を有するプログラム命令を実行するプロセッサであって、
相互接続ネットワークと、
それぞれが前記相互接続ネットワークに接続される異種の複数の命令セルと、
復号モジュールであって、従属プログラム命令のデータ経路と独立プログラム命令のデータ経路の少なくとも１つから前記命令セルの回路へのマッピングをそれぞれ符号化する構成命令を受け、更に構成命令を復号して前記相互接続ネットワークおよび命令セルの少なくともいくつかを構成し、これにより前記データ経路を前記命令セルの回路にマップしまた前記プログラム命令を実行する、復号モジュールと、
を備えるプロセッサ。
【請求項２】
前記復号モジュールは前記命令セルの少なくともいくつかを前記相互接続ネットワークを通して直列に接続することにより、前記相互接続ネットワークおよび命令セルの少なくともいくつかを構成する、請求項１記載のプロセッサ。
【請求項３】
前記復号モジュールは更に、複数のプログラム・スレッドのデータ経路から前記命令セルの対応する複数の独立回路へのマッピングを符号化する構成命令を受け、更に構成命令を復号して前記相互接続ネットワークおよび命令セルの少なくともいくつかを構成し、これにより複数のプログラム・スレッドのデータ経路を前記命令セルの対応する複数の独立回路にマップしまたプログラム・スレッドを互いに独立に同時に実行する、請求項１または２のいずれか記載のプロセッサ。
【請求項４】
前記プロセッサはクロック・サイクルを有するクロック信号を与えるクロック・モジュールを更に備え、また前記復号モジュールは前記構成命令を復号して前記相互接続ネットワークおよび命令セルの少なくともいくつかをクロック・サイクル毎に構成する、先行請求項のいずれか一項記載のプロセッサ。
【請求項５】
前記クロック・モジュールは可変クロック・サイクルを与える、請求項４記載のプロセッサ。
【請求項６】
前記クロック・モジュールはイネーブル信号を与える、請求項４または５のいずれか記載のプロセッサ。
【請求項７】
前記イネーブル信号は命令セルのイネーブル入力に与えられる、請求項６記載のプロセッサ。
【請求項８】
前記クロック・モジュールは複数のクロック信号を与える、請求項４から７のいずれか一項記載のプロセッサ。
【請求項９】
前記複数のクロック信号の少なくともいくつかは複数の命令セルに別々に与えられる、請求項８記載のプロセッサ。
【請求項１０】
前記復号モジュールは更に構成命令を復号してクロック信号を構成する、請求項４から９のいずれか一項記載のプロセッサ。
【請求項１１】
前記復号モジュールは更に構成命令を復号してクロック・サイクルを構成する、請求項１０記載のプロセッサ。
【請求項１２】
前記クロック信号の活動時間は構成される、請求項１０または１１のいずれか記載のプロセッサ。
【請求項１３】
前記クロック信号のデューティ・サイクルは構成される、請求項１０から１２のいずれか一項記載のプロセッサ。
【請求項１４】
前記プロセッサは更にプログラム・カウンタと構成メモリへのインターフェースとを備え、前記構成メモリは前記構成命令を記憶し、前記構成命令の少なくとも１つは前記プログラム・カウンタおよび前記インターフェースを管理して、クロック・サイクル毎に前記構成命令の１つを前記復号モジュールに与える実行フロー制御命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項１５】
前記イネーブル信号は前記実行フロー制御命令セルのイネーブル入力に与えられる、請求項１４記載のプロセッサ。
【請求項１６】
前記構成セルの少なくとも１つはその出力をクロック・サイクル毎に変えるレジスタ命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項１７】
前記イネーブル信号は前記レジスタ命令セルのイネーブル入力に与えられる、請求項１６記載のプロセッサ。
【請求項１８】
前記イネーブル信号は前記実行フロー制御命令セルのイネーブル入力と前記レジスタ命令セルのイネーブル入力の両方に与えられる、請求項１６または１７のいずれか記載のプロセッサ。
【請求項１９】
前記プロセッサは更に少なくとも１つの入力／出力ポートを備え、また前記命令セルの少なくとも１つは前記少なくとも１つの入力／出力ポートにアクセスする入力／出力レジスタ命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項２０】
前記プロセッサは更に少なくとも１つのスタックを備え、また前記命令セルの少なくとも１つは前記少なくとも１つのスタックにアクセスするスタック・レジスタ命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項２１】
前記命令セルの少なくとも１つはデータ・メモリ位置にアクセスするメモリ命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項２２】
前記データ・メモリ位置はマルチポート・メモリ位置を含む、請求項２１記載のプロセッサ。
【請求項２３】
メモリ命令セルの１対以上は前記クロック・サイクルの周波数より高い周波数でクロックするデータ・メモリ位置の１対以上に同じクロック・サイクル内にアクセスする、請求項２１または２２のいずれか記載のプロセッサ。
【請求項２４】
前記復号モジュールは更に構成命令を復号して、その前の構成命令から復号されたクロック信号の構成に依存するクロック信号を構成する、請求項４から２３のいずれか一項記載のプロセッサ。
【請求項２５】
前記命令セルの少なくとも１つは命令セルの間のデータの経路を選択する多重命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項２６】
前記命令セルの少なくとも１つは組合せ論理命令セルを含む、先行請求項のいずれか一項記載のプロセッサ。
【請求項２７】
命令セルの機能はプログラム命令に対応する、先行請求項のいずれか一項記載のプロセッサ。
【請求項２８】
命令セルの前記回路は１つの実行フロー制御命令セルを含む命令セルの集合を含む、請求項１４から２７のいずれか一項記載のプロセッサ。
【請求項２９】
先行請求項のいずれか一項記載のプロセッサの構成命令を生成するコンパイラであって、
プログラム命令を受けて前記プログラム命令のデータ経路を識別するフロントエンド・モジュールと、
従属および独立の両方のプログラム命令のデータ経路を前記命令セルの回路としてマップするスケジューリング・モジュールと、
命令セルの回路の前記構成を構成命令として復号しまた前記構成命令を出力するマッピング・モジュールと、
を含むコンパイラ。
【請求項３０】
前記プログラム命令は高水準コンパイラから出力されるアセンブラ・コードを含む、請求項２９記載のコンパイラ。
【請求項３１】
前記プログラム命令は高水準言語のソース・コードを含む、請求項２９記載のコンパイラ。
【請求項３２】
前記スケジューリング・モジュールは更にその相互依存性に従って前記プログラム命令をスケジュールする、請求項２９から３１のいずれか一項記載のコンパイラ。
【請求項３３】
前記フロントエンド・モジュールおよびスケジューリング・モジュールの少なくとも１つは更に一時的結果を記憶するためのレジスタへのアクセスを命令セルの間の相互接続にマップする、請求項２９から３２のいずれか一項記載のコンパイラ。
【請求項３４】
前記スケジューリング・モジュールは更に単一クロック・サイクル内に実行する前記プログラム命令のデータ経路をマップする、請求項２９から３３のいずれか一項記載のコンパイラ。
【請求項３５】
前記スケジューリング・モジュールは更に複数のプログラム・スレッドのデータ経路を前記命令セルの対応する複数の同時の回路としてマップする、請求項２９から３４のいずれか一項記載のコンパイラ。
【請求項３６】
前記スケジューリング・モジュールは更に操作連鎖を用いて前記データ経路をマップする、請求項２９から３５のいずれか一項記載のコンパイラ。
【請求項３７】
前記スケジューリング・モジュールは更に単一クロック・サイクルをスケジュール中は操作連鎖を用いる、請求項２９から３６のいずれか一項記載のコンパイラ。
【請求項３８】
前記スケジューリング・モジュールは更に複数の実行可能リストの各実行可能リストを処理中は操作連鎖を用いる、請求項２９から３７のいずれか一項記載のコンパイラ。
【請求項３９】
前記スケジューリング・モジュールは更にレジスタ割当てを用いて前記データ経路をマップする、請求項２９から３８のいずれか一項記載のコンパイラ。
【請求項４０】
前記スケジューリング・モジュールは更に単一クロック・サイクルをスケジュール中はレジスタ割当てを用いる、請求項３９記載のコンパイラ。
【請求項４１】
前記スケジューリング・モジュールは更に複数の実行可能リストの各実行可能リストを処理中はレジスタ割当てを用いる、請求項３９か４０のいずれか記載のコンパイラ。
【請求項４２】
前記スケジューリング・モジュールは更に複数のスケジューリング・アルゴリズムを用いて前記データ経路をマップする、請求項２９から４１のいずれか一項記載のコンパイラ。
【請求項４３】
前記スケジューリング・モジュールは更に前記複数のスケジューリング・アルゴリズムの１つから選択した出力を用いて前記データ経路をマップする、請求項４２項記載のコンパイラ。
【請求項４４】
プログラム命令を実行する方法であって、
従属および独立の両方の命令のデータ経路を有するプログラム命令内のデータ経路を識別するステップと、
相互接続ネットワークおよび異種の複数の命令セルの少なくともいくつかを構成し、前記命令セルの少なくともいくつかを前記相互接続ネットワークを通して直列に接続することにより各命令セルを前記相互接続ネットワークに接続し、これにより従属および独立の両方のプログラム命令のデータ経路をマップしまた前記プログラム命令を実行するステップと、
を含むプログラム命令を実行する方法。
【請求項４５】
クロック・サイクルを有するクロック信号を前記命令セルの少なくとも１つに与えるステップを更に含み、前記命令セルを構成するステップはクロック・サイクル毎に行う、請求項４４記載のプログラム命令を実行する方法。
【請求項４６】
前記構成するステップはその後のクロック・サイクルを構成するステップを更に含む、請求項４４または４５のいずれか記載のプログラム命令を実行する方法。
【請求項４７】
前記クロック・サイクルの活動時間は構成される、請求項４４から４６のいずれか一項記載のプログラム命令を実行する方法。
【請求項４８】
前記クロック信号のデューディ・サイクルは構成される、請求項４４から４７のいずれか一項記載のプログラム命令を実行する方法。
【請求項４９】
前記相互接続ネットワークおよび命令セルの少なくともいくつかを構成する前記ステップは、
・  従属および独立の両方のプログラム命令のデータ経路を前記命令セルの回路としてマップするステップと、
・  命令セルの前記回路の構成を構成命令として符号化するステップと、
・  前記構成命令を復号して前記相互接続ネットワークおよび命令セルの少なくともいくつかを構成するステップと、
を含む、請求項４４から４８のいずれか一項記載のプログラム命令を実行する方法。
【請求項５０】
マップする前記ステップはその相互依存性に従って前記プログラム命令をスケジュールするステップを含む、請求項４９記載のプログラム命令を実行する方法。
【請求項５１】
マップする前記ステップは一時的結果を記憶するためのレジスタへのアクセスを命令セルの間の相互接続にマップするステップを含む、請求項４９または５０いずれか記載のプログラム命令を実行する方法。
【請求項５２】
マップする前記ステップは単一クロック・サイクル内に実行するプログラム命令のデータ経路をマップするステップを含む、請求項４９から５１のいずれか一項記載のプログラム命令を実行する方法。
【請求項５３】
コンピュータにロードすると請求項２９から４３のいずれか一項記載のコンパイラを構成するプログラム命令を含むコンピュータ・プログラム。
【請求項５４】
記憶媒体上で実現され、コンピュータ・メモリ内に記憶され、または電気的または光学的なキャリア信号で運ばれる、請求項５３記載のコンピュータ・プログラム。
【請求項５５】
請求項４４から５２のいずれか一項記載の方法をコンピュータに実行させるプログラム命令を含むコンピュータ・プログラム。
【請求項５６】
記憶媒体上で実現され、コンピュータ・メモリ内に記憶され、または電気的または光学的なキャリア信号で運ばれる、請求項５５記載のコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はコンピュータ・プロセッサに関するもので、特に再構成可能プロセッサに関するものである。
【背景技術】
【０００２】
現在の半導体デバイスの構造は将来のデータ処理および処理能力の要求に対処できないので、将来の新しいハードウエア構造についてのニーズが数年前から認識されている。代表的な例は大量のオーディオおよびビデオ・データを処理する必要のある次世代ネットワーク用の移動体装置である。このため、電力消費およびシリコン面積に関して効率を犠牲にしてでも高い処理能力を保持するためにプロセッサの性能に新たな要求が加わった。ハードウエアも将来の変化する標準に対して高い適応性を備える必要がある。
【０００３】
再プログラム可能性および柔軟性は、製作後にシステムを変更することができるので設計コストを下げる主な要因である。標準Ｃ／Ｃ＋＋などの高水準プログラム記述によりプログラム可能なこの柔軟性を有することは設計サイクルを減らしまた大きなシステムを実現するのに重要である。
【０００４】
すでに確立されている方法には、書き替え可能ゲート・アレイ（ＦＰＧＡ）、ディジタル信号処理プロセッサ（ＤＳＰ）、および特殊用途向け集積回路（ＡＳＩＣ）構造などがある。しかしこれらは全て欠点を有する。すなわち、ＦＰＧＡは電力消費が非常に大きく、ＡＳＩＣは製作後の非反復エンジニアリング・コストが高くまた柔軟性が低く、ＤＳＰは処理能力が低いなどである。超長命令語（ＶＬＩＷ）ＤＳＰ構造は並列処理において優れている。しかし、これらは一般的なプログラムに見られるように命令レベル並列処理（ＩＬＰ）の量が限られるという制約がある。これまで研究機関から提案された多くの方法は、主として、柔軟性および大量の並列処理に関して再構成可能型計算枠組により高性能を実現するものであった。これらの方法は計算能力および柔軟性では顕著な成果を達成したが、電力節約が十分でない、またはプログラムが非常に難しいという欠点がある。
【０００５】
いくつかの構造は、ＲＩＳＣプロセッサと粗粒度の再構成可能なアレイとの結合を試みている。例えば、モルフォシス（Ｍｏｒｐｈｏｓｙｓ）（Ｈ．Ｓｉｎｇｈ他の「モルフォシス：  データ並列および計算強化アプリケーションのための統合された再計算可能システム（Ｍｏｒｐｈｏｓｙｓ：  ａｎ  ｉｎｔｅｇｒａｔｅｄ  ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  ｓｙｓｔｅｍ  ｆｏｒ  ｄａｔａ−ｐａｒａｌｌｅｌ  ａｎｄ  ｃｏｍｐｕｔａｔｉｏｎ-ｉｎｔｅｎｓｉｖｅ  ａｐｐｌｉｃａｔｉｏｎｓ）」，ＩＥＥＥ  Ｔｒａｎｓ．ｏｎ  Ｃｏｍｐ．，４９（５）：４６５−４８１，２０００年５月）や、ＳＭｅＸＰＰ（Ｖ．Ｂａｕｍｇａｒｔｅ他の「ＰＡＣＴ  ＸＡＰＰ−Ａ自己再構成可能データ処理構造（ＰＡＣＴ  ＸＡＰＰ−Ａ  Ｓｅｌｆ−ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  ｄａｔａ  ｐｒｏｃｅｓｓｉｎｇ  ａｒｃｈｉｔｅｃｔｕｒｅ）」、Ｐｒｏｃ．，ＥＲＳＡ０１）などである。しかしこれらは特殊な特注の低水準言語を用いるのでアレイのプログラミングが困難である。また、プログラミングが難しいことやアレイとプロセッサとの間のデータ転送量が大きいなどの、従来のプロセッサとアレイとの間の緩い結合に起因する他の制限もある。
【０００６】
ＡＤＲＥＳ構造（Ｂｉｎｇｆｅｎ  Ｍｅｉ他の「ＡＤＲＥＳ：  密に結合されたＶＬＩＷプロセッサおよび粗粒度の再構成可能マトリックス（ＡＤＲＥＳ：  Ａｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ｗｉｔｈ  ｔｉｇｈｔｌｙ  ｃｏｕｐｌｅｄ  ＶＬＩＷ  ｐｒｏｃｅｓｓｏｒ  ａｎｄ  ｃｏａｒｓｅ-ｇｒａｉｎｅｄ  ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  ｍａｔｒｉｘ）」，Ｐｒｏｃ，  ＦＰＬ’０３）は、メモリおよびレジスタ・ファイルを共用することによりプロセッサと再構成可能構造とを密に結合するもので、高水準Ｃ言語を用いるのでプログラミング・モデルは簡単である。ＲａＰｉＤ構造（Ｃ．Ｅｂｅｌｉｎｇ他の「ＲａＰｉＤ再構成可能構造を用いたＯＦＤＭ受信機の実現（Ｉｍｐｌｅｍｅｎｔｉｎｇ  ａｎ  ＯＦＤＭ  Ｒｅｃｅｉｖｅｒ  ｏｎ  ｔｈｅ  ＲａＰｉＤ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｃｈｉｔｅｃｔｕｒｅ）」，Ｐｒｏｃ．，ＦＰＬ’０３）は高水準ＲａＰｉＤ−Ｃ言語を用いてプログラムすることができるが、この言語はＡＮＳＩ−Ｃと互換性がなく、並列操作を手動でスケジュールする必要がある。
【０００７】
Ｃｈａｍｅｌｅｏｎ／Ｍｏｎｔｉｕｍ双対プロセッサの方法（Ｐａｕｌ  Ｍ．Ｈｅｙｓｔｅｒｓ他の「エネルギー効率と柔軟性と性能の間のバランス（Ｂａｌａｎｃｉｎｇ  ｂｅｔｗｅｅｎ  Ｅｎｅｒｇｙ−Ｅｆｆｉｃｉｅｎｃｙ，  Ｆｌｅｘｉｂｉｌｉｔｙ  ａｎｄ  Ｐｅｒｆｏｒｍａｎｃｅ）」，Ｐｒｏｃ．ＥＲＳＡ’０３）およびＥｌｉｘｅｎｔ（英国ブリストル）のＤ-Ｆａｂｒｉｘ（ＴＭ）は、複数のＡＬＵを相互接続して特殊なＣコンパイラを用いてデータ経路を作るので、時間のかかる計算の速度が上がる。Ｅｌｉｘｅｎｔ（ＴＭ）の場合は、プログラミングはＨａｎｄｅｌ−Ｃにより行う。設計者がコード内で並列処理を宣言しなければならないのでこれはＨＤＬに近い。
【発明の開示】
【発明が解決しようとする課題】
【０００８】
したがって、提案されている再構成可能なハードウエア・インフラストラクチャは、コストが低く、設計時間が短く、電力消費が少なく、性能が高い、というニーズに十分応えていないのでどれも広く用いられていない。
【０００９】
プログラミング環境では、スレッドは、理想的には別個のデータの集合において「並列に」動作する、相関のない独立のタスクである。マルチスレッド・プログラムを実行する際に、スレッドを実行するためのまたは相互に同期させるための予め決められたまたは既知の順序はない。プログラムを分析することにより既知のパターンを構築することができるのであれば、なぜこれをマルチスレッド（ＭＴ）プログラムとして実現するのか疑問である。
【００１０】
マルチスレッド・プログラムは、コンパイル時には分からない動的な情報に依存する。そのため、マルチスレッド・プログラムの実行フローを静的に分析して、全ての活動的なサポートされたスレッドを満足させるように割当てを決定することは非常に難しい。各スレッドは他の活動的なスレッドについての事前の知識なしに独立にマップされる。
【００１１】
従来、マルチスレディングは完全に分離された実行コアを用いている。従来、単一コアでのＭＴはハードウエア資源をタイム・スライスすることにより行っている。これは時間的マルチスレディングと呼ぶことが多い。スーパースカラ・コンピュータ、ＶＬＩＷ（超長命令語）、および再構成可能計算機の出現により、単一コア内でも真のＭＴが可能になった。本質的に、並列構造は多数の計算資源および／または相互接続資源（再構成可能型計算枠組の場合）を用いることに依存する。これらの資源を無駄なく働かせることは挑戦的なタスクである。
【００１２】
多くの並列構造の問題はコアの利用度が低いことである。この影響を減らすために、従来の方法は単一コア内で同時マルチスレディング（ＳＭＴ）を用いている。通常、ＳＭＴはコアの実行フロー制御機構の拡張であって、２つ以上の同時スレッドによりコアの資源の多くを共用する。ＳＭＴの実現方法は実施の形態によって非常に変わるが、所定のクラスのデバイスについての概要を定義することはできる。
【００１３】
資源を共用するには、ＳＭＴは構造の重要な構成要素を何らかの形で複写する必要がある。これは一般に次のものを含む。
１．  フロー制御機構
２．  構造状態。
【００１４】
コアの利用度を高くするだけでなく、ＳＭＴはキャッシュ待ち時間と取出しおよび復号待ち時間とに有用な操作を行うことによりこれらの時間を隠すことができる。１つのスレッドの機能停止条件があっても、他のスレッドを走らせて資源を無駄なく働かせることができる。
【００１５】
再構成可能プロセッサ上で走る全てのアプリケーションを記述するには高水準言語を用いることが望ましい。しかし、従来のソフトウエアは本来逐次的である。これらの高水準言語は従来のＣＰＵ用に開発されたものなので、適したスケジューリング・アルゴリズムは逐次コード用である。これは、本来なら逐次のコードを用いて、利用可能な並列処理を取り出して利用すると言う挑戦的なタスクを行う。高い抽象レベルからのアルゴリズムの実現を自動化して再構成可能な計算システム上で走らせる設計フローは、汎用ソフトウエア・コードを高度に並列の再構成可能デバイス上で変換して資源を最大限に使用することのできる効率的なスケジューリング・アルゴリズムを必要とする。
【００１６】
従来のリスト・スケジューリングは、命令セルに基づく構造において直接用いることができない。なぜなら、
１）  従属命令の並列処理を扱わない、
２）  スケジューリング・アルゴリズムの中でレジスタ割当てを考慮しない、
３）  再構成可能な機能ユニットの時間効果および経路選択相互接続遅れを考慮に入れないので、再構成可能デバイス内のデータ経路遅れを変える可能性がある、
からである。
【課題を解決するための手段】
【００１７】
本発明の１つの態様の目的は、コストが低く、設計時間が短く、電力消費が少なく、性能が高いプロセッサを提供することである。
【００１８】
本発明の第１の態様では、従属および独立の両方のプログラム命令のデータ経路を有するプログラム命令を実行するプロセッサを提供する。このプロセッサは、
・  相互接続ネットワークと、
・  それぞれが相互接続ネットワークに接続される異質の複数の命令セルと、
・  復号モジュールであって、従属プログラム命令のデータ経路と独立プログラム命令のデータ経路の少なくとも１つから命令セルの回路へのマッピングをそれぞれ符号化する構成命令を受け、更に構成命令を復号して相互接続ネットワークおよび命令セルの少なくともいくつかを構成し、これによりデータ経路を命令セルの回路にマップしまたプログラム命令を実行する、復号モジュールと、
を備える。
【００１９】
好ましくは、復号モジュールは命令セルの少なくともいくつかを相互接続ネットワークを通して直列に接続することにより、相互接続ネットワークおよび命令セルの少なくともいくつかを構成する。
【００２０】
好ましくは、復号モジュールは更に、複数のプログラム・スレッドのデータ経路から命令セルの対応する複数の独立回路へのマッピングを符号化する構成命令を受け、更に構成命令を復号して相互接続ネットワークおよび命令セルの少なくともいくつかを構成し、これにより複数のプログラム・スレッドのデータ経路を命令セルの対応する複数の回路にマップしまたプログラム・スレッドを互いに独立に同時に実行する。
【００２１】
好ましくは、プロセッサはクロック・サイクルを有するクロック信号を与えるクロック・モジュールを更に備え、また復号モジュールは構成命令を復号して、相互接続ネットワークおよび命令セルの少なくともいくつかをクロック・サイクル毎に構成する。
好ましくは、クロック・モジュールは可変クロック・サイクルを与える。
好ましくは、クロック・モジュールはイネーブル信号を与える。
好ましくは、イネーブル信号は命令セルのイネーブル入力に与えられる。
好ましくは、クロック・モジュールは複数のクロック信号を与える。
【００２２】
好ましくは、複数のクロック信号の少なくともいくつかは複数の命令セルに別々に与えられる。
好ましくは、復号モジュールは更に構成命令を復号してクロック信号を構成する。
好ましくは、復号モジュールは更に構成命令を復号してクロック・サイクルを構成する。
好ましくは、クロック信号の活動期間は構成される。
好ましくは、クロック信号のデューティ・サイクルは構成される。
【００２３】
好ましくは、プロセッサは更にプログラム・カウンタと構成メモリへのインターフェースとを備え、構成メモリは構成命令を記憶し、命令セルの少なくとも１つはプログラム・カウンタおよびインターフェースを管理して、クロック・サイクル毎に構成命令の１つを復号モジュールに与える実行フロー制御命令セルを含む。
好ましくは、イネーブル信号は実行フロー制御命令セルのイネーブル入力に与えられる。
好ましくは、命令セルの少なくとも１つはその出力をクロック・サイクル毎に変えるレジスタ命令セルを含む。
好ましくは、イネーブル信号はレジスタ命令セルのイネーブル入力に与えられる。
好ましくは、イネーブル信号は実行フロー制御命令セルのイネーブル入力とレジスタ命令セルのイネーブル入力の両方に与えられる。
【００２４】
好ましくは、プロセッサは更に少なくとも１つの入力／出力ポートを備え、また命令セルの少なくとも１つは少なくとも１つの入力／出力ポートにアクセスするための入力/出力レジスタ命令セルを含む。
好ましくは、プロセッサは更に少なくとも１つのスタックを備え、また命令セルの少なくとも１つは少なくとも１つのスタックにアクセスするスタック・レジスタ命令セルを含む。
好ましくは、命令セルの少なくとも１つはデータ・メモリ位置にアクセスするためのメモリ命令セルを含む。
好ましくは、データ・メモリ位置はマルチポート・メモリ位置を含む。
【００２５】
好ましくは、メモリ命令セルの１対以上はクロック・サイクルの周波数より高い周波数でクロックするデータ・メモリ位置の１対以上に同じクロック・サイクル内にアクセスする。
好ましくは、復号モジュールは更に構成命令を復号して、その前の構成命令から復号されたクロック信号の構成に依存するクロック信号を構成する。
好ましくは、命令セルの少なくとも１つは命令セルの間のデータの経路を選択する多重命令セルを含む。
一般に命令セルの少なくとも１つは組合せ論理命令セルを含む。
好ましくは、命令セルの機能はプログラム命令に対応する。
好ましくは、命令セルの回路は１つの実行フロー制御命令セルを含む命令セルの集合を含む。
【００２６】
本発明の第２の態様では、第１の態様のプロセッサの構成命令を生成するコンパイラを提供する。このコンパイラは、
・  プログラム命令を受けてプログラム命令のデータ経路を識別するフロントエンド・モジュールと、
・  従属および独立の両方のプログラム命令のデータ経路を命令セルの回路としてマップするスケジューリング・モジュールと、
・  命令セルの回路の構成を構成命令として符号化しまた構成命令を出力するマッピング・モジュールと、
を含む。
【００２７】
好ましくは、プログラム命令は高水準コンパイラから出力されるアセンブラ・コードを含む。
または、プログラム命令は高水準言語のソース・コードを含む。
好ましくは、スケジューリング・モジュールは更にその相互依存性に従ってプログラム命令をスケジュールする。
好ましくは、フロントエンド・モジュールおよびスケジューリング・モジュールの少なくとも１つは更に一時的結果を記憶するためのレジスタへのアクセスを命令セルの間の相互接続にマップする。
好ましくは、スケジューリング・モジュールは更に単一クロック・サイクル内に実行するプログラム命令のデータ経路をマップする。
【００２８】
好ましくは、スケジューリング・モジュールは更に複数のプログラム・スレッドのデータ経路を命令セルの対応する複数の同時の回路としてマップする。
好ましくは、スケジューリング・モジュールは更に操作連鎖を用いてデータ経路をマップする。
好ましくは、スケジューリング・モジュールは更に単一クロック・サイクルをスケジュール中は操作連鎖を用いる。
好ましくは、スケジューリング・モジュールは更に複数の実行可能リストの各実行可能リストを処理中は操作連鎖を用いる。
【００２９】
好ましくは、スケジューリング・モジュールは更にレジスタ割当てを用いてデータ経路をマップする。
好ましくは、スケジューリング・モジュールは更に単一クロック・サイクルをスケジュール中はレジスタ割当てを用いる。
好ましくは、スケジューリング・モジュールは更に複数の実行可能リストの各実行可能リストを処理中はレジスタ割当てを用いる。
好ましくは、スケジューリング・モジュールは更に複数のスケジューリング・アルゴリズムを用いてデータ経路をマップする。
好ましくは、スケジューリング・モジュールは更に複数のスケジューリング・アルゴリズムの１つから選択した出力を用いてデータ経路をマップする。
【００３０】
本発明の第３の態様では、プログラム命令を実行する方法を提供する。この方法は、
・  従属および独立の両方の命令のデータ経路を有するプログラム命令内のデータ経路を識別するステップと、
・  相互接続ネットワークおよび異種の複数の命令セルの少なくともいくつかを構成し、命令セルの少なくともいくつかを相互接続ネットワークを通して直列に接続することにより各命令セルを相互接続ネットワークに接続し、これにより従属および独立の両方の命令のデータ経路をマップしまたプログラム命令を実行するステップと、
を含む。
【００３１】
好ましくは、この方法は更にクロック・サイクルを有するクロック信号を命令セルの少なくとも１つに与えるステップを含み、命令セルを構成するステップはクロック・サイクル毎に実行する。
好ましくは、構成するステップはその後のクロック・サイクルを構成するステップを更に含む。
好ましくは、クロック・サイクルの活動期間は構成される。
好ましくは、クロック・サイクルのデューティ・サイクルは構成される。
【００３２】
好ましくは、相互接続ネットワークおよび命令セルの少なくともいくつかを構成するステップは、
・  従属および独立の両方のプログラム命令のデータ経路を命令セルの回路としてマップするステップと、
・  命令セルの回路の構成を構成命令として符号化するステップと、
・  構成命令を復号して相互接続ネットワークおよび命令セルの少なくともいくつかを構成するステップと、
を含む。
【００３３】
好ましくは、マップするステップはその相互依存性に従ってプログラム命令をスケジュールするステップを含む。
好ましくは、マップするステップは一時的結果を記憶するためのレジスタへのアクセスを命令セルの間の相互接続にマップするステップを含む。
好ましくは、マップするステップは単一クロック・サイクル内に実行するプログラム命令のデータ経路をマップするステップを含む。
【００３４】
本発明の第４の態様では、コンピュータにロードすると第２の態様のコンパイラを構成するプログラム命令を含むコンピュータ・プログラムを提供する。
好ましくは、第４の態様のコンピュータ・プログラムは、記憶媒体上で実現され、コンピュータ・メモリ内に記憶され、または電気的または光学的なキャリア信号で運ばれる。
本発明の第５の態様では、第３の態様をコンピュータに実行させるプログラム命令を含むコンピュータ・プログラムを提供する。
好ましくは、第５の態様のコンピュータ・プログラムは、記憶媒体上で実現され、コンピュータ・メモリ内に記憶され、または電気的または光学的なキャリア信号で運ばれる。
【実施例】
【００３５】
ここで再構成可能命令セル・アレイ（ＲＩＣＡ）と呼ぶ本発明の１つの実施の形態について以下に説明する。
図１を参照すると、ＲＩＣＡ構造のコア要素１は、プログラマブル・スイッチのネットワーク４を通して命令セル（ＩＣ）２を相互接続してデータ経路を作る。ＣＰＵ構造と同様に、この実施の形態では、ＩＣ２および相互接続４の構成はサイクル毎に変更して命令の異なるブロックを実行することができる。図１に示すように、ＲＩＣＡはハーバード構造ＣＰＵと同じであって、プログラム（構成）メモリ６とデータ・メモリ８とは別個である。
【００３６】
ＲＩＣＡの場合は、処理するデータ経路は相互接続可能なＩＣの再構成可能なコアであって、構成メモリ６は、復号モジュール１１を介して相互接続内部のＩＣおよびスイッチの両方を制御する構成命令１０（すなわち、ビット）を含む。データ・メモリ８とのインターフェースはＭＥＭセル１２が形成する。多数のこれらのセルは同じクロック・サイクル中に複数のメモリ位置から効率的に同時に（時間多重化）読取りおよび書込みを行うことができる。これは、データ・メモリ上の複数のポートを用いることにより、また構成可能コアより高速でクロックすることにより行うことができる。更に、いくつかの特殊なＲＥＧ  ＩＣ１４を入出力ポート１６にマップして外部環境とインターフェースすることができる。
【００３７】
再構成可能ＲＩＣＡコア１の特徴は、設計時に完全にカストマイズできることと、アプリケーションの要求に従って設定できることである。これは、システムのビット幅（この実施の形態では４ビットから６４ビットまで任意に設定できる）や、アレイの柔軟性（ＩＣの選択および展開される相互接続により設定する）などのオプションを含む。またこれらのパラメータは、達成可能な並列処理の範囲と、面積や最大処理能力や電力消費などのデバイス特性に影響を与える。ＲＩＣＡコアを含むチップを製作した後で、システムは汎用プロセッサ（ＧＰＰ）と同様に任意のコードを実行するよう容易に再プログラムすることができる。
【００３８】
ＲＩＣＡ内のＩＣアレイは種類が異なり、各セルは少数の操作に限定される。例えば、
ＡＤＤ        加算、減算
ＭＵＬ        乗算（符号付きまたは符号なし）
ＤＩＶ        割り算（符号付きまたは符号なし）
ＲＥＧ        レジスタ
Ｉ／Ｏ  ＲＥＧ    外部入出力ポートにアクセスするためのレジスタ
ＭＥＭ        データ・メモリからの読取り／書込み
ＳＨＩＦＴ    シフト操作
ＬＯＧＩＣ    論理演算（ＸＯＲ、ＡＮＤ、ＯＲなど）
ＣＯＭＰ      データ比較
ＪＵＭＰ      分岐（およびシーケンサ機能）
などである。        
【００３９】
このため、アレイ内のセルの総数を増やすと一層多くの並列計算を行うことができる。なぜなら、かかる小さなセルを追加することのオーバーヘッドは相互接続が占める追加の面積に関係するだけからである。また種類の異なるセルを用いるので、頻度の高い操作に用いるＩＣを追加することによりアプリケーション領域に合うようにアレイを調整することができる。各ＩＣに１命令をマップしてよい。アセンブリ命令と同様に、セルは２入力および１出力を有してよい。これにより、一層効率的な相互接続構造を作ることができるし、また必要な構成ビットの数を減らすことができる。この実施の形態のために開発された命令セルはＯｐｅｎＲＩＳＣおよびＡＲＭ７（ＴＭ）（英国ケンブリッジのアーム社）などのＧＰＰに見られるのと同じ命令集合をサポートする。ただし、命令セルはこれらのプロセッサからの命令集合をサポートすることに限定されない。したがってこの配列では、ＲＩＣＡは任意のＧＰＰ／ＤＳＰシステムとバイナリ互換性を持つことができる。
【００４０】
上記のように、レジスタ１８は標準の命令セルとして定義してよい。この配列では、レジスタ・メモリ要素は独立に動作するようにアレイ内に分散してよい。これは高度の並列処理を行うのに絶対必要である。ＲＩＣＡアレイをプログラムするには、プログラムのアセンブリ・コードをスライスして単一可変長クロック・サイクル内に実行する命令のブロックにする。一般に、本来は逐次ＧＰＰ用に生成されたこれらの命令は、中間結果を一時的に記憶するためのレジスタへのアクセスを含む。ＲＩＣＡ構造の場合は、これらの読取り／書込み操作は単に配線に変換される。これによりレジスタの使用効率が高まる。レジスタのこの配置を用いることにより、ＲＩＣＡは操作のパイプライニングをプログラム可能にするので、長い組合せ計算を複数の可変長クロック・サイクルに容易に分解することができる。レジスタを分散すると、各レジスタにスタックを割り当てて分散スタック方式を形成することができる。
【００４１】
特殊なＩＣは実行フロー制御すなわちＪＵＭＰセル２０を含む。これはＣＰＵに見られる命令コントローラと同様に、プログラム・カウンタ２２および構成メモリ６とのインターフェースを管理する。
【００４２】
別の特殊な構成要素は再構成レート・コントローラ（ＲＲＣ）２４クロック・モジュールである。ＲＲＣはクロック発生器２６から信号を受けてイネーブル信号を生成する。この信号はレジスタＩＣ１８および実行フロー制御ＩＣ２０のイネーブル入力に送られて、可変クロック・サイクルを与える。「クロック・ゲーティング」は実施の形態に特有であり、使用できる多数の他の周知の方法がある（非同期イネーブル信号など）。普通のＣＰＵでは、プロセッサをクロックできる最高クロック周波数はプログラム可能なデータ経路内の最長の可能な遅れにより決定する。
【００４３】
例えば、ＣＰＵが乗算器（加算などの演算より実行時間がかなり長い）を有する場合は、最高クロック周波数はそれを演算するのに十分な時間を与えなければならない。問題は、かかるクロックを用いた場合に、プロセッサの命令サイクルは加算器だけに用いられるためにプロセッサは必要以上に長い時間待たされることになり、このために全体の最大処理能力が制限されることである。従来のＣＰＵではこの問題を解決するために、乗算器が必要とする周波数より高い周波数でＣＰＵをクロックし、同時に乗算器をパイプライン化する。このため、実行に複数サイクル必要になる。
【００４４】
ＲＩＣＡ構造でも同様の問題が起こる。なぜなら、柔軟性が大きいために多くのレベルの計算を行うデータ経路が作られて、多くの遅れが必要になる可能性がある。最も長いデータ経路が指定する最高周波数でＲＩＣＡをクロックすると、達成可能な最大処理能力が制限されることになる。
【００４５】
イネーブル信号を生成する前にＲＲＣが待つクロック・サイクルの量は、アレイの構成命令１０の一部としてデコーダ１１が構成することができる。これとレジスタおよびプログラム・カウンタへのクロック・ゲーティグ技術とを組み合わせる（実行フロー制御セルを介して）ことにより、ソフトウエアの一部としてプログラム可能な可変クロック・サイクルを実際に達成することができる。
【００４６】
別の特殊なセルは条件付き組合せ経路を与えるマルチプレクサ命令セルである。ハードワイヤード比較器およびマルチプレクサを含むセルを設けることにより、本発明は簡単なマルチプレクサであるとコンパイラが識別する条件付き移動を実現することができる。更に、ＲＩＣＡとして実現したとき、本発明は並列多重実行データ経路を実現することもできる。かかるスパニング・ツリーは条件付き操作で実行の並列処理レベルを高めるのに有用であり、したがって操作を終えるのに必要な時間を減らすことができる。
【００４７】
図２は、（ａ）島型および（ｂ）マルチプレクサに基づく命令セル間の相互接続の例を示す。図２において、プログラマブル・スイッチ２１はＩＣ２５の出力ポートと入力ポートの間の指向的接続２３を行う。相互接続の設計は種々の規則を考慮してよい。例えば、各ＩＣは１出力および２入力だけを有することや、ＩＣの出力を決してその入力にループバックしないこと（組合せループを避けるため）などである。スイッチの回路設計およびトポロジに種々の周知の方法を利用することができる。例えば、図２ａに示すような通常のＦＰＧＡに見られる島型メッシュや、図２ｂに示すようなマルチプレクサに基づくクロスバーなどである。
【００４８】
ＲＩＣＡ構造の特徴は、プログラム可能セルおよびそのプログラム可能相互接続を共にクロック・サイクル毎に動的に再構成できることである。これらのセルの数およびタイプはアプリケーションにおいてパラメータ化可能であり、ＵＭＣ０．１３μｍＣＭＯＳ技術ライブラリで実現されている。ＲＩＣＡの再構成可能構造を図２ａに示す。ＲＩＣＡ構造は、明確な３２ビット（ただし、パラメータ化可能なので３２ビットに制限されない）プログラマブル機能ユニット、汎用レジスタ、メモリ・セル、および島型メッシュ再構成可能相互接続から成る。ＲＩＣＡ構造の基本的なコア要素は、ＣＰＵ命令と同様に１つの操作を実行するようにプログラムすることができる３２ビットのプログラム可能ＩＣである。例えば、ＡＤＤセルは符号付き／符号なしの加算または減算機能としてプログラムすることができる。ＩＣは、データ経路内の操作連鎖を可能にする島型メッシュ構造を通して相互接続される。
【００４９】
図３に示すサンプルのＣコード３０を一般的な逐次プロセッサ上で実行するには１９サイクル（３２で示す）必要である。しかし同じコードをＴＩ  Ｃ６２０３などのＶＬＩＷ  ＤＳＰ用にコンパイルすると、１５サイクル（３４で示す）で実行する。なぜなら、ＶＬＩＷ構造は最大８つの独立命令を同時に実行できる（６個のＡＬＵと２個のマルチプレクサが利用できる）からである。４つの同時乗算および４つのメモリ・アクセスが可能な場合は、サイクル数は８に減少する。コードが簡単なこととＦＰＧＡなどのハードワイヤード方式を用いて達成できるものとを考慮に入れると、これでも多い。従属命令が存在すると、コンパイラはクロック・サイクル数を更に減らすことはできない。
【００５０】
図４は前に示したＣコード３０をわずか２サイクル（４０および４２で示す）で実行するのに必要な命令セルの構成を示す。これは例えば構造が、４ｘＡＤＤ、４ｘＲＡＭ、４ｘＭＵＬ、および２ｘＲＥＧを同時に実行することができる１４個の演算要素を備える場合である。これはＶＬＩＷプロセッサが直面する限界を克服し、より高度の並列処理を可能にする。サイクル１（４０で示す）に示すように、最も長い遅れ経路４４は、ＲＡＭアクセスが２回、乗算が１回、および簡単な算術演算が数回と等価である。これは、擬似同時ＲＡＭアクセスを単一の可変クロック・サイクル内の妥当な時間内に達成できる場合だけの事例である。同じサイクル中により多くの命令をどれだけ実行できるかを比べると、これは一般的なＤＳＰ内のクリティカル・バスよりあまり長くない。したがって、計算のタイプによるが、かかる配列をサポートする構造はＶＬＩＷと同様な処理能力を一層低い電力消費で達成することができる。
【００５１】
本発明の或る態様は、ＲＩＣＡアレイをハードウエアで生成するための、この実施の形態では領域特有のアレイを生成するのに利用できるツールに基づく自動ツール・フローを与える。これらのツールは必要なアレイの特性を捕らえて、ＲＩＣＡコアの合成可能なレジスタ・トランスファ・ランゲージ（ＲＴＬ）定義を生成する。これは、確認や合成やレイアウトのための標準のシステム・オン・チップ（ＳｏＣ）ソフトウエア・フローで用いることができる。
【００５２】
図５は本発明の或る実施の形態に係るプログラミング・フローを示す。標準ＧＮＵ  Ｃコンパイラ（ｇｃｃ）を用いてＣ／Ｃ＋＋コード５０をコンパイルして、どのＩＣを用いる必要があるかを記述するアセンブリ・フォーマット５２を作る。ただし命令は順次に実行すると仮定する。ＲＩＣＡコンパイラはこのアセンブリを処理して、一連のネットリスト５４を作る。各ネットリストは１クロック・サイクル内に実行する命令のブロックを含む。ネットリストへの分割は命令をスケジュールして命令の間の依存性を分析した後に行う。ネットリスト内では、従属プログラム命令は直列に接続され、独立プログラム命令は並列に接続される。スケジューリング・アルゴリズムはアレイ内のＩＣ資源や相互接続資源やタイミング制限を考慮にいれる。最も多くのＩＣを用いまた同時に最長経路遅れを減らして最小にすることにより、プログラム処理能力を最高にすることを目指す。
【００５３】
相互接続構造に従って、コンパイラの経路選択部分は、場所および経路ツールＶＰＲに見られるような標準の確立された技術に基づいてよい。更にコンパイラは、ｇｃｃが生成した一時的レジスタを簡単な配線で置き換えて除くなどの厳しい最適化も行う。コンパイラは一連の命令セル５６の構成を生成し、これを構成命令６として符号化して構成メモリ１０内に記憶する。
【００５４】
種々のアルゴリズムについて設計空間を迅速に分析しかつハードウエアの柔軟性を最大にするには完全なツール連鎖が有用である。また、ツール連鎖が現在の種々の設計方式と統合するのに適していることは利点である。図６にＲＩＣＡシステムの設計方法を記述する。
【００５５】
ＲＩＣＡ再構成可能構造に適用できる柔軟性のレベルは２つある。
・  製作前−−選択された数のハードウエア資源について高水準Ｃ／Ｃ＋＋コードをコンパイルする。ＲＴＬシミュレーションによりまたはＲＩＣＡシミュレータを通して決定された必要な性能が満たされない場合は、高水準コードを修正しまたはセル資源の混合を変えてよい。ハードウエア資源を調整すると用いる特定の領域に合うように構造を調整することができるので、電力および資源を節約することができる。この段階は柔軟性の最高のレベルを有する。
【００５６】
・  製作後−−アレイ資源は固定される。したがって、製作プロセス中にまたはその後に引き続きアルゴリズムを変えるには、その固定された資源についてコードを単に再コンパイルする。更新されたコードについて前のコードと同様の操作が必要なことが多く、大多数のアルゴリズムは変らずに残る。これは、生成されたコードが所定の構造についてなおかなり最適であることを意味する。
【００５７】
ＲＩＣＡ構造のプログラミングは種々のツールを集めて行う。命令セル（ＩＣ）を使うと高水準プログラムをＲＩＣＡ構造にマップするのに必要な全体の作業が非常に簡単になる。標準ＣＰＵと同様にしてアレイをプログラムできるので、最適化されたコンパイラや言語パーサなどの利用可能な既存の技術をプロセッサに再使用することができる。
【００５８】
図６において、段階１で、高水準コンパイラ６０４は高水準コード６０２を中間アセンブリ言語フォーマット６０６に変換する。このステップは標準ＧＮＵ  Ｃコンパイラ（ｇｃｃ）が行う。これはＣ／Ｃ＋＋コードをコンパイルして（他のフロント・エンドの中で）、どのＩＣを用いる必要があるかを記述するアセンブリ・フォーマットに変換する。命令を逐次に（すなわち、毎サイクル１命令）実行すると仮定してｇｃｃの出力を生成する。コンパイラはＲＩＣＡで利用できる並行処理については知らない。しかし、機械記述定義を用いる従来のプロセッサで一般的であるように、ｇｃｃを調整して、利用可能なレジスタの最大数や利用可能な命令セル（これは許容される操作を定義する）などの目標のＲＩＣＡのいくつかの制限を考慮にいれる。コンパイラは、レジスタ割当て、スタック処理、およびプロローグ／エピローグ定義などの事項を自動的に処理する。更に、ループ展開やループ・ピーリングやループ融合などの、後で有用になる全ての最適化を実行する。
【００５９】
段階２（ＲＩＣＡコンパイラ６０８）で、ＲＩＣＡ構造に関係する全ての最適化を行う。ＲＩＣＡコンパイラ・プロセスはｇｃｃ６０６のアセンブリ出力を受け、プログラムを表す一連のネットリストを作る。各ネットリストは単一のクロック・サイクル内に実行する命令のブロックを含む。ネットリストへの分割は命令をスケジュールして命令の間の依存性を分析した後に行う。従属命令はネットリスト内で直列に接続され、独立命令は並列に走る。またスケジューリング・アルゴリズムはアレイ内の資源やタイミングの制約を考慮に入れる。最も多くのＩＣを用いまた同時に最長経路遅れを減らして最小にすることにより、プログラム処理能力を最大にすることを目指す。最後に、ｇｃｃが生成した一時的レジスタを簡単な配線で置き換えて除くなどの厳しい最適化も行う。
【００６０】
このように、ＲＩＣＡコンパイラは複数の操作段階を行って構造のコードを最適化し、また構成命令ストリームを生成する。これは、他の点では逐次のアセンブリ・コード内で並行処理を識別して抽出するという問題を解決するのに必要である。
【００６１】
アレイ内の分散されたレジスタにより、同じ回路の異なるパイプライン・オプションを持つデータ経路を構築することができる。パイプライニング計画の変更は最大処理能力または電力消費に影響を与える可能性がある。通常、パイプライニングのこのような柔軟性はＣＰＵ構造では利用できない（ＦＰＧＡでは確かに存在する）ことであって、コンパイラは最良のパイプライニング配列を選択して、コンパイルされたＣコードの性能を改善する機会が与えられる。他の方法ではできないことであるが、これにより例えば電力消費の少ないパイプライニング方式を選ぶことができる。
【００６２】
段階３（場所および経路）は分割および資源のスケジューリングを行うループの一部なので、実際には段階２のＲＩＣＡコンパイラ６０８内で始まる。なぜなら、相互接続資源はネットリストの経路選択性と最長経路のタイミングに影響を与える可能性があるからである。しかしここではこれを別個のステップとして述べる。なぜなら、場所および経路ツールＶＰＲ６２４などの標準ツールを再使用してネットリスト６２２をアレイ６２８にマップできるからである。
【００６３】
段階４（構成メモリ）では、コンパイラはマップされたネットリストから構成メモリ２６（この場合は構成ＲＡＭ）の必要な内容を生成する。次に、従来のＥＤＡツールでシミュレーションおよび性能分析を行い、またはＲｉｃａシミュレータを用いてコードの機能性をテストすることもできる。
【００６４】
他のツールを設計フローに接続して、オープン・ソース・グラフ視覚化ソフトウエアであるＧｒａｐｈＶｉｚ６２０に適したフォーマット６１８をＲＩＣＡコンパイラが出力できるようにするなどにより設計プロセスを助けて、コードおよびスケジュールされたステップの依存性の視覚表示を作ることができる。ＲＩＣＡ内のセルの組合せや数は設計者のアプリケーション領域および利用可能なシリコン資源に従って変わることがあるので、ハードウエア生成ユーティリティ６４２を用いて機械記述に基づくカスタムＲＴＬコード６４４を生成する。
【００６５】
コンパイル・プロセスには複数の段階が関係する。ＲＩＣＡコンパイラのフロント・エンド６１０は、加算、論理、割り算、シフト、乗算などの命令を処理する命令パーサである。この段階では修正されたＧＣＣアセンブラ・コードの字句解析を行い、機能、宛先レジスタ、ソース・レジスタ、およびセル構成データを抽出する。新しい命令をそれぞれ内部パターンに追加し、無限の量の資源（レジスタ、加算器など）を有することに基づいて命令の完全なネットリストを作る。配線名の適切な生成とレジスタの割当てとを行ってレジスタの再使用を明らかにし、スケジューラが必要とする全ての情報を保持する。プロセッサ上のレジスタの数は固定されているので、コンパイラはレジスタを再使用するのにグラフ着色などの方法を用いる。またＲＩＣＡコンパイラのフロント・エンド部分は、修正されたｇｃｃアセンブラ・コードからのラベルの処理に適した機構を有する。これは、分岐または飛越し命令が来たときに、生成されてスケジュールされたアセンブリ・コードはラベル位置を処理する必要があるからである。
【００６６】
ＲＩＣＡコンパイラは、追加の資源および時間の制約を考慮した操作連鎖リスト・スケジューリング（ＣＬＳ）アルゴリズムの考え方に基づいて再構成可能資源スケジューリング・アルゴリズム（ＲＲＳ）を実現する。これは、利用可能な時刻を昇順に（ゼロから開始して）処理して、次に移る前の或る時刻にできるだけ多くの命令をスケジュールする。
【００６７】
リスト・スケジューリング（ＬＳ）は基本ブロックのための最も普通に用いられるコンパイラ・スケジューリング法である。その主な考え方は、次のクロック・サイクルに移る前の或るクロック・サイクルでできるだけ多くの操作をスケジュールすることである。この手続きは全ての操作のスケジューリングが終わるまで続ける。この方法の主な目的はＤＦＧ内の操作の全実行時間を最小にすることである。もちろん、リスト・スケジューリングでは順位関係も重視する必要がある。或るサイクルｔでＤＦＧ内の先行操作が実行を完了した操作を全ていわゆる実行可能リストＲ［ｔ］に入れる。実行可能リストはスケジューリングに利用可能な操作を含む。
【００６８】
Ｒ［ｔ］内の全ての操作についてサイクルｔで未利用の資源が十分ある場合は、これらの操作をスケジュールすることができる。しかしＲ［ｔ］内の各操作で適当な資源を利用できない場合は、サイクルｔでどの操作をスケジュールするか、およびどの操作を保留して後でスケジュールするようにするかについて選択を行わなければならない。通常、この選択は発見的に行い、各発見で特定のタイプのリスト・スケジューリングを定義する。高度な方法で優先順位を計算することにより、最も重要なセルを最初にスケジュールし、そのセルを適当な資源に割り当てる。通常、ＬＳは優先順位ベクトルを用いてどのタスクを最初に考えるか決定する。
【００６９】
スケジューリング・プロセス６１２では、ＲＲＳスケジューリング・アルゴリズムは実行可能リストを用いて操作を追跡することができる。スケジューリングに利用できる操作は実行可能リスト内にある。操作に使える空いた資源が実行可能リスト内にある場合は、レジスタ割当ておよび経路選択情報を考慮した上でこの操作をスケジュールしてよい。しかし操作に使える空いた資源が実行可能リスト内に十分ない場合は、スケジューリング・アルゴリズムはこのサイクルでどの操作をスケジュールするか選択しなければならない。その操作が資源およびクロック・サイクルの制約を満たしている限り、ＲＲＳスケジューリング・アルゴリズムは実行可能リスト内の移動度および並列処理により決まる最高の優先順位の操作を選択する。
【００７０】
優先順位の高い操作は移動度が小さく、並列処理が高い。移動度はスケジュール間隔の長さと定義される。高い並列処理は最初にスケジュールすべき独立命令を決定する。ＲＲＳでは利用できる従属並列処理がＲＩＣＡ構造内にあるので、操作連鎖と呼ばれるコンパイラ技術を用いる。操作のスケジューリングおよび連鎖はレジスタの再使用に影響を与えるので、スケジューリング・アルゴリズムはレジスタ割付けも行う。資源および時間の制約は機械記述６１６内で与える。機械記述６１６では、プレスケジューリング推定経路選択時間を用い、またＶＰＲからのポストスケジューリング経路選択時間遅れを用いる。時間の制約はプログラム可能計算ユニット遅れだけでなく、経路選択遅れも含む。
【００７１】
スケジューリングの前と後のコードの簡単な例を以下に示す。ｇｃｃが生成する最初のアセンブリ・コードは次の通りである。
１    Ｌｏａｄ  ｒ１，ｘ
２    Ｌｏａｄ  ｒ２，ｙ
３    Ｍｕｌｔ  ｒ３，ｒ２，ｒ１
４    Ｌｏａｄ  ｒ４，Ａ
５    Ｍｕｌｔ  ｒ２，ｒ４，ｒ１
６    Ａｄｄ    ｒ５，ｒ２，ｒ４
７    Ｍｕｌｔ  ｒ１，ｒ２，ｒ５
８    Ｌｏａｄ  ｒ３，Ｂ
９    Ａｄｄ    ｒ７，ｒ１，ｒ３
【００７２】
このコードを実現するのに９サイクルおよび６個のレジスタが必要である。目標のＲＩＣＡが３つのロード、２つの乗算、および２つの加算を有する場合は、ＲＩＣＡを目標とするスケジューラが生成するコードは、コードを終了するのに２可変長クロック・サイクルと４個のレジスタを用いるだけである。このスケジュールされたアセンブリ・コードは次の通りである。
ステップ１：
１    Ｌｏａｄ  ｗｉｒｅ１，Ｘ
２    Ｌｏａｄ  ｗｉｒｅ２，Ｙ
３    Ｍｕｌｔ  ｒ１，ｗｉｒｅ１，ｗｉｒｅ２
４    Ｌｏａｄ  ｗｉｒｅ３，Ａ
５    Ｍｕｌｔ  ｗｉｒｅ４＿ｒ２，ｗｉｒｅ１，ｗｉｒｅ３
６    Ａｄｄ    ｒ３，ｗｉｒｅ４，ｗｉｒｅ３
ステップ２：
７    Ｍｕｌｔ  ｗｉｒｅ５，ｒ２，ｒ３
８    Ｌｏａｄ  ｗｉｒｅ６，Ｂ
９    Ａｄｄ    ｒ４，ｗｉｒｅ５，ｗｉｒｅ６
【００７３】
ＲＩＣＡコンパイラの最終段階はマッパ６１４である。これはスケジュールされたステップのネットリスト内の機能セルをハードウエア・セル・レイアウト６２２に割り当ててマップし、資源割当て仕様に基づいて所定のハードウエア構造のための構成命令の適当なビット・ストリーム６２６を作る。この構成ビット・ストリーム６２６は経路選択相互接続のための構成から成る。これはＶＰＲ６２４およびコンパイラからのセル機能構成を通して生成される。この出力は最終的にハードウエアをプログラムするのに、またはシミュレータがシステム性能を分析するのに用いてよい。またコンパイラは構成データの人間読取り可能な形式６３０を出力する。
【００７４】
シミュレータ６３２はアルゴリズムの迅速な開発を助ける、設計環境の重要な１つの態様であり、高い抽象レベルで資源を割り当てることにより、時間のかかるＲＴＬハードウエア・シミュレーションを行う前にトレードオフの範囲を決めることができる。シミュレータは人間読取り可能な．ｎｅｔ  ｆｉｌｅ６３０と、各セルの機能性および性能分析ルーチンのためのコードを含むシミュレーション・テンプレート・ファイル６３４とを用いて、その与えられた．ｎｅｔ  ｆｉｌｅについてＲＩＣＡ構造に基づいて挙動レベルＣモデル６３６を生成する。このＣモデルはｇｃｃコンパイラ６３８に与えられる。ｇｃｃコンパイラ６３８が出力する性能特性６４０および機械記述６１６を通るフィードバック・ループによって、ネットリストをハードウエアに割り当てた後の経路選択遅れを考慮に入れる。
【００７５】
スケジュールされたステップ毎に、シミュレータはそのステップの依存性に従って操作の順序を再整理する。次に、これらの再整理された全てのステップとその相互の接続とを組み合わせて、全システムを表すデータ経路の集合を形成する。これをコンパイルすると、各ステップでのループ、レジスタ、およびメモリなどの機能性と全体の実行されたステップとを共に評価することができる。得られる他のパラメータとしては、各命令セルのモデル・ライブラリを有することに基づく電力および面積の推定値がある。
【００７６】
図７ａおよび図７ｂは本発明の利点を示す。ＲＩＣＡは粗粒度ＦＰＧＡと同じ柔軟性と、ＤＳＰと同じプログラム可能性とを有する。ＲＩＣＡは粗粒度の構成可能構造を用いるので、一般的な精密粒度ＦＰＧＡより電力消費が少ない。ＶＬＩＷ  ＤＳＰは独立命令を並列に実行できるだけであるが、ＲＩＣＡは直列に接続できるので独立および従属の両方のアセンブリ命令を同じクロック・サイクル内に実行することができる。これを図７ａおよび図７ｂに示す。ここではハードウエア資源は４個の加算器と２個の乗算器を含むものとする。
【００７７】
図７ａを参照すると、ＶＬＩＷプロセッサは独立命令７０２だけを実行することができるので５クロック・サイクル必要である７０４。図７ｂを参照すると、ＲＩＣＡは資源の制約の下で独立命令７０６および従属命令７０８を実行できるので、費やすのは２クロック・サイクルだけである７１０。したがって、ＲＩＣＡの処理能力はＶＬＩＷ  ＤＳＰより高くなる。同じ「周波数」で走る場合は、または両者の内部の計算要素の遅れが同じ場合は、ＲＩＣＡの方が処理能力が高い。ＲＩＣＡはＶＬＩＷ  ＤＳＰより最大周波数が低いので、制御に集中したアプリケーションによっては最大処理能力が低い可能性がある。
【００７８】
また、ＲＩＣＡは高度の操作連鎖技術を用いてレジスタおよびメモリの使用量を減らして、電力消費を大幅に下げる。操作連鎖は周知の技術であって、拡張されたクロック・サイクル内で２つの操作を順次に結合して、アプリケーションに必要なレジスタを減らす。従来の高水準分析（ＨＬＳ）は変換プロセスであって、挙動記述をレジスタ・トランスファ・レベル（ＲＴＬ）の構造的特徴記述に変換するものである。このプロセスでスケジューリングは重要なタスクである。スケジューリングは、制御データ・フロー・グラフ（ＣＤＦＧ）を時間ステップに分割することにより、スケジュールされたＣＤＦＧモデルを生成する。スケジューリング・ルーチンを実行した後、レジスタ割当てを用いて設計でのレジスタを最小にする。
【００７９】
高度の再構成レート・コントローラ・セルに関する本発明の１つの態様の或る実施の形態について以下に説明する。
図８を参照すると、高度の再構成レート・コントローラ（ＲＲＣ）８０２はプログラム・カウンタ８０４、メモリ８０６，８０８、およびレジスタ８１０に送る別個のイネーブル信号を適当な時刻に生成して複数のクロック信号を生成する。構造の他の部分に送るイネーブル信号を生成する前にＲＲＣが待つクロック・サイクル８１２の量は、アレイの構成命令８１４の一部としてプログラム可能である。
【００８０】
図９を参照すると、ＲＲＣ命令ユニットのこの実施の形態では、ユニットの構成ビットは複数のタグ・フィールドを含む。すなわち、ジャンプ・セル・クリティカル・パス・タグ９０２、Ｒｍｅｍセル・パス・タグ９０４−９０６、および組合せセル・クリティカル・パス・タグ９０８（これはレジスタの活動化を決定する）である。
レジスタを制御する組合せセル・クリティカル・パス・タグは図１に関して上に説明したのと同様に動作する。すなわち、タグはレジスタ・セルをいつクロックするかを決定する。
【００８１】
ジャンプ（実行フロー制御）セルがそのステップの最長のクリティカル・パスの一部でない場合は、現在のステップ内の最長のクリティカル・パスが終わる前に次のステップの先取りおよび復号を開始することができる。これを行うには、ジャンプ・セル出力値が有効になるのはいつかを決定するための追加の情報が必要である。したがって、この例では４ビット９０２をＲＲＣユニットの構成に割り当てる。これはＲＩＣＡ内部クロック・サイクルをいくつ待つかに対応する。すなわち、ジャンプ・セルのクリティカル・パスが２０ｎｓでクロック分解能が２ｎｓの場合は、ジャンプ構成フィールドを１０にセットする。
【００８２】
ＲＩＣＡコア内にある読取りインターフェース・メモリ・セル毎に、対応する読取りメモリ・タグ（例えば、９０４，９０６）をＲＲＣ構成命令に割り当てる。これらのタグを用いてメモリ・セルのタイミング管理を行うので、データはステップの計算中の適当な時間にだけ読み取られる。
図１０を参照すると、Ｒｍｅｍタグの最初の部分は、ステップの開始から、インターフェース・メモリ読取り命令セル１０２，１１２の入力（例えば、アドレス１０４，１１４およびオフセット１０６，１１６）をメモリ１０８，１１８に送るべきときまでの遅れ時間を定義するのに用いる。
【００８３】
またこれらの各タグはカスケード状態を示す１ビットを有する。カスケード・ビットをハイにセットすると、メモリ読取りはその前のインターフェース・メモリ・セル読取りアクセスに依存するので、その前のインターフェース・メモリ・セル読取り遅れ時間が終わってはじめてそのタイミング遅れを開始しなければならないことを意味する。
図１０に示す例では、両方のＲｍｅｍセル・カスケード・ビットはローにセットされているので、両者はその遅れ時間を同時に開始する。しかし図１１に示す例では、Ｒｍｅｍ［１］１１２のカスケード・ビットはハイにセットされているので、Ｒｍｅｍ［０］１０２がその遅れを終了した後にはじめてＲｍｅｍ［１］１１２の遅れを開始する。更に、Ｒｍｅｍ［０］１０２の出力はＲｍｅｍ［１］１１２の入力への配線に直接マップされる。
【００８４】
再構成可能型計算枠組構造での同時マルチスレッディング（ＳＭＴ）に関する本発明の１つの態様の或る実施の形態について以下に説明する。
本発明のこの実施の形態はＲＩＣＡ再構成可能型計算枠組構造内のＳＭＴを提供する。
同時マルチスレッディングが単一の再構成可能格子に与える効果を示す１つの例として、ここでは二次元マルチホップ直接ネットワークを介して接続される計算ユニットの集合を用いる。相互接続方式の他の例としてクロスババーまたは区分された共用バスがある。
【００８５】
同じプログラム内に共存する他のスレッドとは独立に、各スレッドをスケジュールしてアレイにマップする。時間的マルチスレッディングでは、任意の所定の時刻に活動的なスレッドは１つだけである。或るＳＭＴ環境では、これらのスレッドはアレイの異なる部分を占め、並列に動作することができる。
【００８６】
図１２は競合せずに同じ再構成可能格子１２６を共用する２つのスレッド１２２，１２４を示す。これはアレイを最大限に使用する理想的な場合である。このようなスレッドを強制的に分離するには、コンパイル時にスレッドの１つをコアの一隅に片寄せ、他の１つをコアの反対側に割り当ててよい。多くの場合、２つの同時のスレッドは１つ以上の共通資源を同時に要求する。相互接続資源「競合」の１つの形を図１３に示す。この例では、共通資源１３２は２つのスレッド１３４および１３６の一方に割り当てられ、他方は待つ必要がある。
【００８７】
一般的なスレッドは所定の構成内におそらく１つ以上の独立なデータ経路を有している。厳密に同期させなければ、各独立の競合しないデータ経路は他と並列に動作することができる。その結果、スレッドは部分的に（すなわち、そのデータ経路の一部だけが）実行される。部分的実行を用いることによりコアの利用度を更に高め、その結果、性能を高めることができる。
【００８８】
図１４は、種々のシナリオの下に走る２つのスレッド（スレッド0１４２およびスレッド1１４４）の実行時間線図を示す。シナリオとしては時間的ＭＴ（図１４ａ）、ＳＭＴ（図１４ｂ）、およびＳＭＴ（図１４ｃ）があり、部分的実行をサポートする。図１４には構成ロード１４６および実行１４８の状態をスレッド毎に示し、また保留状態１５０および部分的実行状態１５２も示す。
【００８９】
リスト・スケジューリングに基づく新しい操作連鎖再構成可能スケジューリング・アルゴリズム（ＣＲＳ）を提供する本発明の或る実施の形態について以下に記述する。これは分散された高性能命令セルに基づく再構成可能システムで利用可能な、命令レベルの並列処理を最大にするものである。他の一般的なスケジューリング法とは異なり、これは配置および経路選択、レジスタ割当て、および高度の操作連鎖コンパイル法を用いて一層高性能のスケジュールされたコードを生成する。この方法を用いたスケジュールは、ＶＬＩＷと少なくとも等価な処理能力を、非常に低い電力消費で達成する。
【００９０】
本発明のこの実施の形態は、再構成可能システムを目標にした効率的な操作連鎖スケジューリング・アルゴリズムを提供する。この連鎖再構成可能スケジューリング（ＣＲＳ）アルゴリズムはリスト・スケジューリング・アルゴリズムに基づいて高度の操作連鎖法を用い、また資源および時間の制約の下でレジスタ割当て、電力消費、配置および経路選択遅れの影響を考慮する。ＣＲＳアルゴリズムを用いると各スケジュール・ステップでの従属および独立の命令セル（ＩＣ）の数が最大になりまた同時に最長経路遅れのクロック・サイクルの総数が最小になるので、プログラム処理能力を高めて電力消費を下げることができる。
【００９１】
従来のＨＬＳプロセスとは異なり、本発明のこの実施の形態はスケジューリング、経路選択、命令セルの結合、およびレジスタ割当てを組み合わせて、命令セルに基づく構成に適合させる。本発明のこの実施の形態は新しい効率的な多目的スケジューリング最適化を行って、新しい再構成可能構造の処理能力を高くすると共に電力を低くする。
【００９２】
従来のリスト・スケジューリングは命令セルに基づく構造で直接用いることができない。なぜなら、
１）  従属命令の並列処理を行うには効率的な操作連鎖が必要であり、
２）  スケジューリング・アルゴリズムにおいてレジスタ割当てを考慮する必要があり、
３）  スケジューリング・アルゴリズムは再構成可能機能ユニットおよび経路選択相互接続遅れの影響も考慮に入れなければないが、これは再構成可能デバイス内のデータ経路遅れを変える可能性がある、
からである。
【００９３】
図１５はスケジューリング・アルゴリズムの或る実施の形態の流れ図を示す。
スケジューラは実行可能リストを生成し１５０２、スケジューリングのためにこのリストから操作を選択する１５０４。優先順位割当て機構を処理するのに３つのスケジューリング法を用いる。すなわち、ＩＰＲＳ１５０６、ＣＰＲＳ１５０８、およびＭＰＲＳ１６０２である。ＭＰＲＳの場合は、アルゴリズムのこのステップ１５１０でＩＰＲＳを用い、レジスタ割当ての後のステップ１５３０でＣＰＲＳと組み合わせる。
【００９４】
１５０６から１５２０までのアルゴリズムの部分は操作をスケジュールしまたは除去するのに用いる。１５１２でスケジューリングを行う場合は、操作連鎖を行い１５１４、実行可能リストを更新する１５１６。このステップ１５１８で実行可能リスト内の他の操作が利用可能でかつ機能ユニットが利用可能な場合は、実行可能リストから次の操作を選択する１５０４。
【００９５】
ステップ１５１２で、１５０６から１５２０までのアルゴリズムの部分をレジスタの除去に用いると決定した場合は、ステップ１５１４から１５１８ではなく、スケジュールされた操作の除去を行う１５２０。
１５２２で、この構成ステップ（またはクロック・サイクル）でレジスタが十分ない場合は、ステップ１５０６から１５１０にループバックして操作の除去を行い、例えば、フラグをセットしてレジスタ除去を行うことを決定テスト１５１２で示す。
【００９６】
ステップ１５２２でレジスタが十分ある場合はレジスタ割当てを行い１５２４、次にＩＰＲＳ１５２６およびＣＰＲＳ１５２８の場合はノーアクション、ＭＰＲＳの場合はステップ１５３０でＣＰＲＳを用いて更に操作のスケジューリングを行う。
スケジューリングの３つの方法を用いることにより、最適な方法を用いてコードの全部または一部をスケジュールして、目標のＲＩＣＡ構造の構成ビットを生成することができる。最適スケジューラ出力を選択した１５３２後で、スケジューラは次の構成ステップに進む１５３４。
【００９７】
ＣＲＳアルゴリズムと簡単なリスト・スケジューリングとの比較を示すために、ＣＲＳアルゴリズムの別の例を以下に示す。これは簡単なリスト・スケジューリング・アルゴリズムに、＠印をつけた新しい行を追加したものである。
方法：  ＣＲＳスケジューリング
入力：  アセンブリ・コードであって、
空間機械記述（資源、クロック・サイクル）
ＶＰＲアルゴリズムにより生成される経路選択遅れ
をスケジュールする操作を表すもの
出力：  高速で並列のネットリスト
Ｂｅｇｉｎ
ステップ１：  制御フロー・グラフ（ＣＦＧ）を構築する
ステップ２：  データ・フロー・グラフ（ＤＦＧ）を構築する
ステップ３：  名前を変えて逆依存／出力依存をなくす
ステップ４：  セルの柔軟性に基づいて命令に優先順位を割り付ける
ステップ５：  命令の選択とスケジューリングを繰り返す
【００９８】
Ｃｙｃｌｅ＝１；
Ｒｅａｄｙ［Ｃｙｃｌｅ］＝ＤＦＧのルート；
Ｒｅａｄｙ［Ｃｙｃｌｅ＋１］＝φ；
Ｓｃｈｅｄｕｌｅｄ［Ｃｙｃｌｅ］＝φ；
＠Ａｖａｉｌａｂｌｅ＿Ｒｅｇｉｓｔｅｒ［Ｃｙｃｌｅ］＝{出力レジスタである
が基本ブロックの入力レジスタとしては用いない}
【００９９】
Ｗｈｉｌｅ（Ｒｅａｄｙ  Ｌｉｓｔｓ≠φ）／／Ａｌｌ  Ｒｅａｄｙ［ｉ］  
ｌｉｓｔｓ
{
Ｉｆ（Ｒｅａｄｙ［Ｃｙｃｌｅ］＝φ）ｔｈｅｎ
{
＠    利用可能なハードウエア資源を初期化する；
Ｃｙｃｌｅ＝Ｃｙｃｌｅ＋１；
}
Ｗｈｉｌｅ（Ｒｅａｄｙ［Ｃｙｃｌｅ］≠φ）{
＠    Ｒｅａｄｙから操作を優先順に除き、直列低パワー最適化法を用いて操  
作を選択する
Ｉｆ（∃サイクル上のｔｙｐｅ（ｘ）のフリー・イシュー・ユニット
＠    ＆＆操作を同じサイクル内で連鎖してよい）{
Ｓ（ｏｐ）＝サイクル；
Ｆ（ｏｐ）＝ＦｉｎｉｓｈＴｉｍｅ（ｏｐ）；
Ｓｃｈｅｄｕｌｅｄ［Ｃｙｃｌｅ］＝Ｓｃｈｅｄｕｌｅｄ［Ｃｙｃｌｅ］      
∪{ｏｐ}；
Ｆｏｒ（ＤＦＧ内の次の操作ｓ）{
Ｉｆ（ｓが実行可能）ｔｈｅｎ
Ｒｅａｄｙ［Ｃｙｃｌｅ］＝Ｒｅａｄｙ［Ｃｙｃｌｅ］∪ｓ；        
}
}
ｅｌｓｅ
Ｒｅａｄｙ［Ｃｙｃｌｅ＋１］＝Ｒｅａｄｙ［Ｃｙｃｌｅ＋１］∪{ｏｐ}
}
【０１００】
＠Ｉｆ（操作はレジスタおよびＳｃｈｅｄｕｌｅｄ［Ｃｙｃｌｅ］内の次の操作
を用いる）
＠ｔｈｅｎ{／／ｒｅｌｅａｓｅ  ｒｅｇｉｓｔｅｒ
操作の出力を保存するレジスタを除去して利用可能なレジスタ・リスト内に
入れる}
＠Ｎ＝このクロック・サイクルで必要なレジスタの数
＠Ａ＝このクロック・サイクルで利用可能なレジスタの数
＠ｉｆ（Ｎ＜Ａ）
＠    レジスタを割り付けて操作の出力を保存する
＠ｅｌｓｅ{
＠    
2008539485.tif 000003
になるまでいくつかのスケジュールされた操作を優先順に除去す  
る；
＠    レジスタを割り付けて操作の出力を保存する；}
【０１０１】
ΘＣＰＲＳを用いて別のスケジューリングを行う（このステップはＭＰＲＳにだ
け用いる）
＠最も長いクリティカル・パスおよび可変クロック・サイクルを計算する
}
＠資源の結合−−ハミング距離を用いる。
Ｅｎｄ  Ｍｅｔｈｏｄ
【０１０２】
スケジューラの設計入力はアセンブリ・コードまたは他の中間表現なので、依存グラフ（ＤＧ）はレジスタを除去して命令依存を表すことにより生成される。従来のプロセッサのコンパイラは高度レジスタ割当てアルゴリズムを用いて固定の数の物理的レジスタを再使用するので、ＤＧは出力依存および逆依存と呼ばれる擬似データ依存を有することがある。
【０１０３】
操作Ａが作った値を操作Ｂが読み取る場合は、ＢはＡに真に依存する。これはリード・アフタ・ライト（ＲＡＷ）とも呼ばれる。操作Ａが読み取ったレジスタに操作Ｂが値を書き込んで、Ａが読み取った値を壊した場合は、ＢはＡに逆依存する。これはライト・アフタ・リード（ＷＡＲ）とも呼ばれる。操作Ａと操作Ｂの両方が同じレジスタに値を書き込む場合は、ＢはＡに出力依存する。これはライト・アフタ・ライト（ＷＡＷ）とも呼ばれる。
【０１０４】
レジスタ名の変更は、ＷＡＲ／ＷＡＷ競合を起こすレジスタの名前を変えることにより擬似依存性を除く方法である。しかしこの方法はレジスタ・スピリング（ｒｅｇｉｓｔｅｒ  ｓｐｉｌｌｉｎｇ）の原因になることがある。この問題を解決するには、レジスタが不足しているので追い出された値を記憶するためにロード命令および格納命令を用いる必要がある。このためにメモリ・アクセスが増えて、性能が下がりまた電力消費が増える。ＲＩＣＡ内の機能ユニットは同じクロック・サイクル内で逐次連鎖するので、操作連鎖法を用いるとレジスタおよびメモリの使用が減る。
【０１０５】
ＣＲＳスケジューリング・アルゴリズムにおける設計項目がコンパイルされまたスケジュールされたアセンブリ・コードの場合は、スケジューラは不必要なレジスタを除去するなどの追加のタスクを処理しなければならない。レジスタ割当ては高水準合成でスケジュールした後に行う。操作のスケジューリングおよび連鎖はレジスタ割当てに影響を与えるので、ＣＲＳスケジューリング・アルゴリズムはレジスタ割付けも考慮する。
【０１０６】
制御フロー・グラフは、２つの基本ブロックの間に正しいデータ依存を生成しまた異なる基本ブロックの命令の並列処理を見つけるのに用いられる基本的なデータ構造である。まず、コードを基本ブロックの集合に分割する。これは或るラベルで、またはジャンプ命令の後に始まる。基本ブロックはＣＦＧのノードから成る。その後で、ＣＦＧのエッジを現在のブロックから分岐の全ての可能な目標基本ブロックに加える。ＣＦＧノードの入力／出力ポートは基本ブロックの入力／出力レジスタに関係する。入力レジスタは、他の基本ブロックが書き込んだ後でこの基本ブロックが読み取る値を保存する。出力レジスタはこの基本ブロックが計算した後で他の基本ブロックが読み取る値を保存する。ＣＬＳスケジューリング内の利用可能なレジスタは出力レジスタだけを含む。なぜなら、入力レジスタは他の基本ブロックが用いていて同じ値を保っているはずだからである。
【０１０７】
ＣＲＳスケジューリング・アルゴリズムには３つの方法が用いられ、クロック・サイクルの数が最小（処理能力が最高）または電力消費が最低の出力コードがスケジューラの出力として選択される。
第１の方法はクリティカル・パス再構成可能スケジューリング（ＣＰＲＳ）と呼ばれるものである。この文脈では、ＤＦＧの或るノードから出力ノードまでの最も長い経路をそのクリティカル・パスと呼ぶ。全てのクリティカル・パスの中で最も長いものは、スケジュールの残りの部分を実行するのに必要な全時間の下限値を与える。優先順位の高い操作の方が移動度が小さい。移動度はスケジュール間隔の長さと定義される。（移動度＝最も遅い（ＡＬＡＰ）−最も速い（ＡＳＡＰ）である）。したがって、ＣＰＲＳスケジューリングでは、最も長いクリティカル・パスを持つノードをサイクルｔでスケジュールするものとして選択する。
【０１０８】
第２の方法は独立命令優先度再構成可能スケジューリング（ＩＰＲＳ）と呼ばれるものである。ＩＰＲＳでは、サイクルｔでスケジュールするものとして選択するのは、他の利用可能なノードに比べてこのクロック・サイクルのクリティカル・パスの増加が最も小さいノードである。
【０１０９】
最後に、混合優先度再構成可能スケジューリング（ＭＰＲＳ）と呼ばれる第３の方法もＣＲＳスケジューラで用いられる。これはＣＰＲＳアルゴリズムとＩＰＲＳアルゴリズムとを結合したものである。ＭＰＲＳでは、まずＩＰＲＳ法を用いてノードをスケジュールし、レジスタ割当ての後でＣＰＲＳアルゴリズムを再び実行する（図１の□印のついた線はＭＰＲＳだけに用いられる）。固定のクロック・システムではＣＰＲＳアルゴリズムの実行時間が最も短くなる。ＣＲＳアルゴリズムは可変クロック・サイクルを用いるので、ＣＰＲＳスケジューリング法はＩＰＲＳスケジューリング法に比べて実行時間が長くなることがある。ＣＲＳアルゴリズムはレジスタ割当てと組み合わせるので、レジスタの数が有限であることがＩＰＲＳ法を制限することがある。ＭＰＲＳスケジューリングはＣＰＲＳおよびＩＰＲＳスケジューリングより優れたスケジューリングを生成するかも知れない。
【０１１０】
図１６に示す例を用いてこれらのスケジューリング法を示す。この構造は３ｘＡＤＤと２ｘＲＥＧとを同時に実行することができる５つの演算要素を備え、加算は１クロック・サイクルで実行すると仮定して、各加算器１６２のＡＳＡＰ時間およびＡＬＡＰ時間を角括弧で、例えば図１６の１６４および１６６で示す。下の表１は３つの異なるＣＲＳアルゴリズムを比較して、図１６の機能を走らせるのに必要なクロック・サイクル数に与える影響を見る。
【表１】
2008539485.tif 000004
【０１１１】
表１から表３において、ＥＴは実行時間の全クロック・サイクルを指し、ＳＣはスケジュールされたセルを指す。表１はＣＰＲＳスケジューリングのＥＴがＩＰＲＳスケジューリングのＥＴより長く、ＭＲＰＳスケジューリングのＥＴと同じであることを示す。しかし異なるアルゴリズムのＥＴは機械記述に大きく依存する。以下の表２および３は異なる機械記述に基づく異なるスケジューリング結果を与える。
【表２】
2008539485.tif 000005
【表３】
2008539485.tif 000006
【０１１２】
表１および表２に示すように、ＣＰＲＳアルゴリズムのＥＴはＩＰＲＳアルゴリズムより長く（表１）または短く(表２)なる。これはレジスタの数が原因である。しかし、レジスタが十分ある場合(表３)は、ＩＰＲＳアルゴリズムのＥＴ時間は短い。この例では機能的資源は加算器だけを含むので、ＭＰＲＳアルゴリズムを用いた結果はＣＰＲＳと同じ（表１、表２）か、またはＩＰＲＳと同じ(表３)である。しかし再構成可能な命令セルに基づく機械の場合のように資源が大きく変わる場合に適用すると、これは異なる結果を生成する。コンパイラは全ての方法を用いて入力コードをスケジュールし、その要求に関して適当な出力コードを選択する。
【０１１３】
基本ブロック毎に、多数の操作の間のデータ依存を表すデータ・フロー・グラフ（ＤＦＧ）を、ＣＲＳスケジューリング・アルゴリズムへの入力として用いる。設計をプロセッサ上で走らせるときの１つの制限は、単一サイクル内に実行することができる操作の数である。単一サイクル内に実行する操作の数を最大にするため、操作連鎖および可変クロック・サイクルをＣＲＳスケジューリング・アルゴリズムに追加する。これにより使用するレジスタの総数は減り、メモリ・アクセスが減るので電力消費が減り、可変クロック・サイクルなので処理能力が増す。操作を連鎖するとき、スケジューリング・アルゴリズムはクリティカル・パスへの操作の影響だけでなく、プログラム可能な経路選択遅れも考慮しなければならない。
【０１１４】
ツール・フロー内のスケジューリング・アルゴリズムはプレスケジューリングおよびポストスケジューリングを含む。プレスケジューリング・アルゴリズムはクリティカル・パスへの操作および推定経路選択時間の影響を考慮する。プレスケジューリング後のネットリストをＶＰＲなどの標準の配置および経路選択ツールに与える。ＶＰＲツールまたは他の経路選択ツールから与えられる対応する経路選択情報を用いて、より正確なタイミング情報をポストスケジューリングに与えて、設計要求を満たすネットリストを生成する。ＣＲＳアルゴリズムは性能を最適化するための第１の段階に用いる。その後、この電力コスト・モデルとしてハミング距離を用いて資源結合を生成して、命令セル構成バス内の遷移活動を推定する。ハミング距離は２つの２進ストリングの間のビット数の差である。最小ハミング距離を持つ資源結合方式を選択して電力消費を減らす。
【０１１５】
異なるＣＬＳスケジューリング・アルゴリズム（ＣＰＲＳ、ＩＰＲＳ、およびＭＰＲＳ）を用いてまた本発明の再構成可能命令セルに基づく構造を目標にしてベンチマーク・テストを行い、各ＣＬＳアルゴリズムの性能を説明する。下の表４は実行時間およびエネルギー消費を示す。ベンチマークは構造上を同じ周波数（１２５ＭＨｚ）で行い、また同じハードウエア資源を用いた。この再構成可能構造の電力消費値は、ＵＭＣ０．１３μｍ技術を用いたＳｙｎｏｐｓｙｓ  ＰｒｉｍｅＰｏｗｅｒによるポストレイアウト・シミュレーションの後に得たものである。
【表４】
2008539485.tif 000007
【０１１６】
表４から分かるように、全てのベンチマークについてＣＰＲＳ、ＩＰＲＳ、およびＭＰＲＳアルゴリズムから得られる実行時間および電力消費値は少し異なる。ここで、スケジュールされたコードはエンド・ユーザの設計基準（例えば、電力、処理能力）により選択してよい。処理能力を高くするには、実行時間が最も短い出力コードを選択する。最適解はアプリケーションに大きく依存し、ＣＰＲＳ、ＩＰＲＳ、またはＭＰＲＳアルゴリズムにより生成される。これを表４に示した。多くのベンチマークで、ＣＰＲＳスケジューリング・アルゴリズムは他のスケジューリング・アルゴリズムに比べて使用するレジスタは少ないがエネルギー消費が多い。
【０１１７】
スケジューリングおよびシミュレーション分析から、ＣＰＲＳスケジューリング・アルゴリズムが生成するコードは他のアルゴリズムに比べて組合せ論理経路が長いために電力消費が多い。しかし、ＣＰＲＳアルゴリズムの方がエネルギー消費が少ない場合もある。重ねて述べるが、エネルギー消費はアプリケーションに依存する。コンパイラは全ての方法を用いて入力コードをスケジュールし、その要求に適した出力コードを選択する。ＣＬＳスケジューリング・アルゴリズムは他のＤＳＰ／ＶＬＩＷプロセッサに比べてエネルギー消費が少なく、処理能力は同程度と思われる。
【０１１８】
本発明の種々の態様は低電力アプリケーションのための、命令セルに基づく再構成可能型計算枠組構造を提供する。ＲＩＣＡの開発のためにトップダウン方式を用いたが、これは柔軟で、プログラムが容易で、低電力の構造のための重要な設計決定であることが分かった。これらの機能から、ＲＩＣＡは最新の低電力デバイスの主な設計要求を本質的に解決する構造である。
【０１１９】
再構成可能アレイと同様で、高水準プログラム・ソフトウエアと同等のシリコン構造を設計することにより、本発明は粗粒度のＦＰＧＡ構造と同じ高性能と、ＤＳＰと同じ柔軟性、低コスト、およびプログラム可能性を達成する。ＲＩＣＡ構造はＣＰＵと同様であるが、データ経路としてＩＣに基づく再構成可能コアを用いることによりＤＳＰおよびＶＬＩＷより優れた利点（並列処理の一層のサポートなど）を持つ。再構成可能コアは独立および従属の両方のアセンブリ命令を含むブロックを同じクロック・サイクル内に実行することができる。これは、従属命令がプログラム内のＩＬＰの量を制限するのを防ぐ。ＤＳＰ構造より優れている他の点は、集中レジスタ・ファイルをなくしかつ分散メモリ要素を用いて並列にレジスタにアクセスできるようにするためにメモリ・アクセスが減ることである。
【０１２０】
結果から分かることは、ＲＩＣＡはＦＰＧＡに基づく実施の形態よりはるかに性能が優れている一方で、直接の高水準再プログラミングが可能である。初期性能の結果を見ると、主なＶＬＩＷおよび低電力ＤＳＰプロセッサに比べて電力消費は最大で６倍も低くなる。
ここに述べた本発明の範囲から逸れない範囲で、他の変更および改善を加えてよい。
【図面の簡単な説明】
【０１２１】
本発明の或る実施の形態について添付の図面を参照して説明する。
【図１】本発明の或る実施の形態に係るプロセッサ構造の略図を示す。
【図２】ａは、命令セルの間の島型に基づく相互接続の例の略図を示す。  ｂは、命令セルの間のマルチプレクサに基づく相互接続の例の略図を示す。
【図３】Ｃコード、ＶＬＩＷ  ＤＳＰコード、および逐次アセンブラ・コード（ＡＳＭ）のブロックを示す。
【図４】本発明の或る実施の形態に係る図３のアセンブラ命令の実行の略図を示す。
【図５】本発明の或る実施の形態に係るプログラミング・フローの略図を示す。
【図６】本発明の或る実施の形態に係る設計法の略図を示す。
【図７】ａは、ＶＬＩＷ  ＤＳＰの命令スケジューリングの略図を示す。  ｂは、本発明の或る実施の形態の命令スケジューリングの略図を示す。
【図８】高度の再構成レート・コントローラ・ユニットの略図を示す。
【図９】高度の再構成レート・コントローラの構成ビットの構造の一例の略図を示す。
【図１０】独立メモリ命令セル操作の略図を示す。
【図１１】従属メモリ命令セル操作の略図を示す。
【図１２】非競合スレッドの同時マルチスレッディングの略図を示す。
【図１３】共通の相互接続資源要求を有する競合スレッドの同時マルチスレッディングの略図を示す。
【図１４】ａは、時間的マルチスレッディング・シナリオの下に走る２スレッドの実行タイミング図の略図を示す。  ｂは、同時マルチスレッディング・シナリオの下に走る２スレッドの実行タイミング図の略図を示す。  ｃは、部分実行をサポートする同時マルチスレッディング・シナリオの下に走る２スレッドの実行タイミング図の略図を示す。
【図１５】操作連鎖再構成可能スケジューリング・プロセスの流れ図の略図を示す。
【図１６】入力データ制御フロー・グラフの略図を示す。
【図１】
2008539485.tif 000008
【図２】
2008539485.tif 000009
【図３】
2008539485.tif 000010
【図４】
2008539485.tif 000011
【図５】
2008539485.tif 000012
【図６】
2008539485.tif 000013
【図７】
2008539485.tif 000014
【図８】
2008539485.tif 000015
【図９】
2008539485.tif 000016
【図１０】
2008539485.tif 000017
【図１１】
2008539485.tif 000018
【図１２】
2008539485.tif 000019
【図１３】
2008539485.tif 000020
【図１４】
2008539485.tif 000021
【図１５】
2008539485.tif 000022
【図１６】
2008539485.tif 000023
【国際調査報告】
2008539485.tif 000024
2008539485.tif 000025
2008539485.tif 000026