(57)【要約】本発明は効率的なコンフィギュレーションおよびリコンフィギュレーションのための包括的な方法に関する。この場合、たとえばランタイムにおよびデータ処理中にも、機能や配線を変更可能なモジュールの集合体を１つまたは複数の互いに通信し合うコンフィギュレーションユニットを用いて効率的にコンフィギュレーションおよびリコンフィギュレーションする。その中心を占めるのは、複雑な技術的変換における正確な構成である。これには状態オートマトン、コンフィギュレーション構造、リコンフィギュレーション実行ならびにそのつど必要とされるプロトコルの記述が含まれる。重要な特徴は、互いにオーバラップもしている絶え間ないリコンフィギュレーションを、殊にデータ処理のブロックや誤機能が発生することなく行えることである。
2004506261.tif 000002
【特許請求の範囲】
【請求項１】
１次元または多次元のコンフィギュレーション可能なセル構造を備えたデータ処理装置の作動方法において、
セルを新たにコンフィギュレーションすることを示すフラグをコンフィギュレーションデータとともに送信し、これに基づき前記セルは該セルが未コンフィギュレーション状態にあればコンフィギュレーションを受け入れ、さもなければコンフィギュレーションを拒否することを特徴とする、
データ処理装置の作動方法。
【請求項２】
１次元または多次元のコンフィギュレーション可能なセル構造を備えたデータ処理装置の作動方法において、
セルを部分的にコンフィギュレーションすることを示すフラグをコンフィギュレーションデータとともに送信し、これに基づき前記セルは該セルがコンフィギュレーション済みの状態にあればコンフィギュレーションを受け入れ、さもなければコンフィギュレーションを拒否することを特徴とする、
データ処理装置の作動方法。
【請求項３】
１次元または多次元のコンフィギュレーション可能なセル構造を備えたデータ処理装置の作動方法において、
セルを決められたフラグによりスタートさせることを特徴とする、データ処理装置の作動方法。
【発明の詳細な説明】
【０００１】
本発明は、１つまたは複数のリコンフィギュラブルコンポーネントをそれぞれ１つまたは複数のコンフィギュレーションユニット（ＣＴ）により高い頻度で効率的にコンフィギュレーションおよびリコンフィギュレーションできるようにした方法に関する。この場合、複数のＣＴを制御するために効率的であり同期のとれた結合網をどのようにして構築できるかについて説明する。
【０００２】
コンポーネントもしくはセルという概念には、古典的なＦＰＧＡセル、バスシステム、メモリ、さらにＡＬＵやプロセッサの計算機構などのようなペリフェラルが含まれる。これに関しては同じ出願人／被譲渡人の定義を参照されたい。殊に、どのような形式のコンフィギュラブル素子やリコンフィギュラブル素子でも、基本的に「コンポーネント」とする。並列コンピュータシステムについてコンポーネントとは、あらゆる機能（たとえば計算機能、記憶機能およびデータ伝送機能）のすべてのノードとすることができる。
【０００３】
これから説明する方法はたとえば、１次元または多次元に配置されダイレクトにまたはバスシステムを介して相互接続された複数のコンポーネントを有する集積モジュールに適用することができる。ここでモジュールという概念として挙げられるのは、シストリックアレイ、ニューラルネットワーク、マルチプロセッサシステム、複数の計算機構とロジックセルを備えたプロセッサ、さらにはＦＰＧＡ，ＤＰＧＡ，ＸＰＵＴＥＲなどの概念におけるモジュールなどである。
【０００４】
以下の説明では、計算機構やバスシステムを任意にコンフィギュレーション可能なアーキテクチャをもつモジュールについて説明する。このアーキテクチャは ＤＥ ４４１６８８１ ならびに ＰＡＣＴ０２，ＰＡＣＴ０８，ＰＡＣＴ１０，ＰＡＣＴ１３にすでに開示されており、以下ではＶＰＵと称する。このアーキテクチャは任意の算術、ロジック（メモリ）または通信（ＩＯ）用のセル（ＰＡＥ）から成り、これらのセルを１次元または多次元のマトリックス（ＰＡ）となるよう配置することができ、その際、マトリックスは任意に構成された様々なセルを有することができ、ここではバスシステムもセルであるとする。このマトリックス全体またはその一部にコンフィギュレーションユニット（ＣＴ）が割り当てられており、このユニットはＰＡの結合網形成ならびにその機能に作用する。
【０００５】
ＶＰＵの格別な特性は、デッドロックのない自動的なランタイム時の再コンフィギュレーションである。そのために必要とされるプロトコルならびに方法は ＰＡＣＴ０４，０５，０８，１０，１３によって知られており、これらを本出願の参考文献とする。これらの社内書類整理番号に対する刊行物番号は付録に示されている。
【０００６】
１．ＰＡＥの基本状態とコンフィギュレーションのバスプロトコル
各ＰＡＥには、コンフィギュラビリティに作用する状態が割り当てられている。この状態がローカルにコーディングされるのか、あるいは１つのまたは複数のスイッチ機構たとえばＣＴ自体によって管理されるのかは、ここではたいした問題ではない。ＰＡＥは少なくとも２つの状態を識別する：
「未コンフィギュレーション」 ”ｎｏｔ ｃｏｎｆｉｇｕｒｅｄ”
この状態ではＰＡＥは非アクティブであり、データおよび／またはトリガを処理しない。殊にいかなるデータおよび／またはトリガも受け入れず、また、データおよび／またはトリガの発生も行わない。この場合にはコンフィギュレーションに関連するデータおよび／またはトリガだけしか受け取れない／または処理できない。ＰＡＥは完全にニュートラルであり、コンフィギュレーション可能である。とはいえこの状態において、たとえばＣＴにより処理すべきデータおよび／またはトリガのためのレジスタを初期化できることを述べておく。
【０００７】
「コンフィギュレーション済み」 ”ｃｏｎｆｉｇｕｒｅｄ”
この場合、ＰＡＥの機能と結合網がコンフィギュレーションされている。ＰＡＥはデータおよび／またはトリガを処理し、また、処理すべきデータおよび／またはトリガを生成する。
【０００８】
これらの状態を、１つのＰＡＥにおける独自の部分に互いにまったく無関係にいくつも含ませることもできる。
【０００９】
以下の記載において、処理するためのデータおよび／またはトリガと、１つまたは複数のコンフィギュレーションのためのデータおよび／またはトリガとについてここで触れた区別が、前後関係から明らかであるかぎり、この区別を一貫して明示的に述べることはない。
【００１０】
ＣＴはコンフィギュレーションにあたり有効なコンフィギュレーションワード（ＫＷ）とともに、有効性を示す信号（ＲＤＹ）を送信する。たとえば連続的な送信であったりＫＷ内でのコーディングのときのように他のやり方で有効性が保証されているならば、これを省略することができる。さらに一般にはＫＷ内において、コンフィギュレーションすべきＰＡＥのアドレスがコーディングされる。
【００１１】
ＰＡＥはあとで引用する出願に記載されている基準に従い、ＫＷを受け入れてそのコンフィギュレーションを変更することができるか否か、あるいはデータ処理を新たなコンフィギュレーションによって中断させたり誤らせてははなないか否か、について判定する。いずれにせよ、この判定がまだＣＴにおいて行われていなければ、コンフィギュレーションが受け入れられるか否かの情報がそこへ伝送される。この場合、以下のプロトコルが考えられる：ＰＡＥがコンフィギュレーションを受け入れると、ＰＡＥは受領確認ＡＣＫ（ａｃｋｎｏｗｌｅｄｇｅ）をＣＴへ送信する。コンフィギュレーションが拒否されると、ＰＡＥはＲＥＪ（ｒｅｊｅｃｔ）の送信によりそのことを知らせる。データ処理されたエレメント（ＰＡＥ）内でそのエレメントは、データ処理が終了したので再コンフィギュレーションを行えるか否か、またはそれがまだデータを処理しているのか否か、について判定する。しかもコンフィギュレーションされていないＰＡＥによって、いかなるデータも変造されない。
【００１２】
２．　デッドロックからの解放ならびにデータの正確さ
２．１　ＦＩＬＭＯ方式
さて、ここで重要なのは多数のコンフィギュレーションの効率的な管理である。これら多数のコンフィギュレーションはそれぞれ１つまたは複数のＫＷおよび場合によっては別の制御命令から成り、オーバラップしてＰＡにコンフィギュレーションすることができる。これはＣＴとたとえばコンフィギュレーションすべきセルとの間に大きな間隔の存在することが多いからであり、このことはコンフィギュレーションの伝送にあたり不利となるからである。同時にこのテクノロジーによって保証されるのは、リコンフィギュレーションによっていかなるデータまたは状態も変造できないからである。この目的でＦＩＬＭＯ方式と呼ばれる以下の規則が定義される：
ａ）目下データを処理しているＰＡＥは再コンフィギュレーションされない。再コンフィギュレーションは、データ処理が完全に終了したときかまたは他のデータ処理がもはや不要であることが保証されているときにはじめて行われるようにする（説明：目下データを処理しているＰＡＥまたはまだ未着のデータを待っているＰＡＥの再コンフィギュレーションによって、データの誤った計算やデータの損失が生じてしまう）。
【００１３】
ｂ）ＰＡＥのステータスはＦＩＬＭＯプロセス中、「コンフィギュレーション済み」から「未コンフィギュレーション」へ変えないようにする。次にこの方法に加えてＰＡＣＴ１０によれば、例外を許可する特別に加えられた方法が記載されている（明示的／暗黙的ロック）。これには以下のような事情がある：ＳｕｂＣｏｎｆを、所定の時点もしくは所定の目的で共通にセルアレイにコンフィギュレーションすべきコンフィギュレーションワードの集合とする場合、２つの異なるＳｕｂＣｏｎｆ（Ａ，Ｄ）が同じリソースたとえばＰＡＥ Ｘを分け合うことになる状況の発生する可能性がある。ＳｕｂＣｏｎｆ Ａはたとえば時間的にＳｕｂＣｏｎｆ Ｄの前にある。したがってＳｕｂＣｏｎｆ ＡはＳｕｂＣｏｎｆ Ｄの前にリソースを占有しなければならない。さて、ここでＰＡＥ ＸがＳｕｂＣｏｎｆ Ａのコンフィギュレーション時点ではまだ「コンフィギュレーション」されているが、ＳｕｂＣｏｎｆ Ｄのコンフィギュレーションの前にステータスを「未コンフィギュレーション」に変える場合、特別な措置をとらなければデッドロック状況の発生する可能性があり、つまりこのときＳｕｂＣｏｎｆ ＡはＰＡＥ Ｘをもはやコンフィギュレーションできず、ＳｕｂＣｏｎｆ ＤはたとえばＰＡＥ ｘだけを占有するが、残りのリソースはすでにＳｕｂＣｏｎｆ Ａに占有されておりもはやコンフィギュレーションできない。この場合、ＳｕｂＣｏｎｆ ＡもＳｕｂＣｏｎｆ Ｄも実行できない。そこでデッドロックが発生してしまう。
【００１４】
ｃ）ＳｕｂＣｏｎｆは、後続のＳｕｂＣｏｎｆがコンフィギュレーションされる前に、それに属するすべてのＰＡＥを首尾よくコンフィギュレーションまたはアロケートしたものとする。ただしこれが成り立つのは、両方のコンフィギュレーションが完全にまたは部分的に同じリソースを共有しているときだけである。この場合、リソースコンフリクトはなく、両方のＳｕｂＣｏｎｆを互いに無関係にコンフィギュレーションすることができる。ＳｕｂＣｏｎｆ ＰＡＥにおいてコンフィギュレーションが拒まれても（ＲＥＪ）、後続のＳｕｂＣｏｎｆのコンフィギュレーションが実行される。ＰＡＥのステータスはＦＩＬＭＯプロセス中は変化しないので（セクションｂによるロック）、先行のコンフィギュレーションにより必要とされたＰＡＥは後続のコンフィギュレーションにおいてはコンフィギュレーションされないことが保証される。説明：コンフィギュレーションすべき後続のＳｕｂＣｏｎｆが先行してコンフィギュレーションすべきＳｕｂＣｏｎｆのＰＡＥに割り当てを行ったならばデッドロックが発生してしまう。なぜならばＳｕｂＣｏｎｆをもはや完全にはコンフィギュレーションできないからである。
【００１５】
ｄ）１つのＳｕｂＣｏｎｆ内において、所定のＰＡＥを所定の順序でコンフィギュレーションしたり開始したりすることが必要とされる可能性がある。説明：ＰＡＥはたとえば、バスもやはりＳｕｂＣｏｎｆ用にコンフィギュレーションされた後にはじめて、そのバスへの接続が許可される。未知のバスへの接続によって誤ったデータの処理が引き起こされてしまう。
【００１６】
ｅ）特定のアルゴリズムでは、ＳｕｂＣｏｎｆのコンフィギュレーションの順序がＣＴに到来するトリガの順序ときちんと一致していなければならない場合もある。たとえばＳｕｂＣｏｎｆ１のコンフィギュレーションをトリガするトリガがＳｕｂＣｏｎｆ３のコンフィギュレーションをトリガするトリガよりも前に到来したならば、ＳｕｂＣｏｎｆ１が完全にコンフィギュレーションされてからＳｕｂＣｏｎｆ３のコンフィギュレーションが許可される。トリガの順序を取り違えてしまうと、アルゴリズムによってはこのことでサブグラフ（ＳｕｂＣｏｎｆ、ＰＡＣＴ１３参照）の誤った順序が生じてしまう。
【００１７】
上述の要求の多くまたはすべてを十分に満たす方法は、ＰＡＣＴ０５およびＰＡＣＴ１０から既知である。
【００１８】
しかしながらコンフィギュレーションの管理、そのタイミング、対応する構成要素たとえばコンフィギュレーションレジスタなどの配置や構成は既述の技術の基礎として示されたものであって、それゆえ実現可能な従来技術の改善についてさらに検討しなければならない。
【００１９】
本発明の課題は、産業上の利用のための新たな構成を提供することにある。
【００２０】
この課題は独立請求項に記載の構成により解決される。従属請求項には有利な実施形態が示されている。
【００２１】
必要に応じて要求ｅ）を保証する目的で、ＳｕｂＣｏｎｆもしくはセルおよび／またはリコンフィギュレーションの可能性についての状態に関連する到来トリガが、たとえばＣＴに対応づけられた簡単なＦＩＦＯによって適正な順序で記憶されるように構成されている。各ＦＩＦＯエントリには１クロックで到来するトリガが含まれており、たとえば１クロックで到来するすべてのトリガを記憶することができる。トリガが発生しなければＦＩＦＯエントリも発生しない。ＣＴはＦＩＦＯを到来するトリガの順序で処理する。１つのエントリに複数のトリガが含まれているならばＣＴは選択的に、ｉ）優先順位を付けてｉｉ）優先順位を付けずに、まずはじめにトリガを個別に処理してから、次のＦＩＦＯエントリを処理する。１つのトリガは一般にコンフィギュレーションごとに１回しかＣＴに送られないので、ＦＩＦＯの最大深さをＣＴに結線されている全トリガラインの量に合わせてセットすれば通常は十分である。択一的な方法として、ＰＡＣＴ１８によるタイムスタンププロトコルを適用することもできる。
【００２２】
ＰＡＣＴ１０により基礎を成す２つのＦＩＬＭＯ方式が知られている：
分離されたＦＩＬＭＯ：このＦＩＬＭＯは別個のメモリとして構成され、ＳｕｂＣｏｎｆをキャッシュする通常のＣＴメモリとは分離されている。ＰＡにコンフィギュレーションされなかったＫＷだけがＦＩＬＭＯにコピーされる。
【００２３】
統合されたＦＩＬＭＯ：ＦＩＬＭＯはＣＴメモリに統合されている。コンフィギュレーションされなかったＫＷはフラグとポインタにより管理される。
【００２４】
以下で説明する本発明による方法は、両方のＦＩＬＭＯ方式にも適用できるし特定の１つの形式にも適用可能である。
【００２５】
２．２　差分コンフィギュレーション
多くのアルゴリズムにおいて有用であるのは動作中、トリガまたは時間的整合によって表される特定の結果に基づき、ＰＡＥのコンフィギュレーションが完全に消去されることなく、コンフィギュレーションの変更を最小限だけに留めることである。たいていの事例ではこれはバスシステムの結線あるいは特定の定数に該当する。たとえば１つの定数だけしか変更されることにならないのであれば、該当するＰＡＥのステータスを「未コンフィギュレーション」にすることなくＫＷをそのＰＡＥに書き込めるようにするのが有用である。これによって伝送すべきコンフィギュレーションデータの量が低減され、それゆえ有利である。このことは「差分リコンフィギュレーション」というコンフィギュレーションモードによって達成できる。この場合、ＫＷにはその書き込みのとき、符号化されたかたちでまたは明示的に情報ＤＩＦＦＥＲＥＮＴＩＡＬが含まれている。ＤＩＦＦＥＲＥＮＴＩＡＬによって、ＫＷをコンフィギュレーション済みのＰＡＥに送るべきであることが示される。差分コンフィギュレーションの受け入れならびに受領確認は、通常のコンフィギュレーションとは正反対である：コンフィギュレーションされたＰＡＥはＫＷを受け入れてＡＣＫを送信する。コンフィギュレーションされていないＰＡＥはＫＷの受け入れを拒否してＲＥＪを送信する。それというのもＤＩＦＦＥＲＥＮＴＩＡＬのための前提条件はコンフィギュレーション済みのＰＡＥだからである。
【００２６】
差分リコンフィギュレーションを実施する様々な可能性がある。一方では、実際にたとえば１つのセル内で進行するデータ処理プロセスを考慮することなく差分リコンフィギュレーションが強制される。この場合にはデータ処理との精確な同期合わせを保証するのが望ましく、このことはプログラムの相応の設計や構成によって行うことができる。しかしプログラマからこの仕事の負担を減らすため、差分リコンフィギュレーションを他のイベントたとえば別のセルまたは局所的に再コンフィギュレーションすべきセルにおける特定の状態の存在に依存させることもできる。したがって殊に有利な変形実施形態は、コンフィギュレーションデータたとえば差分コンフィギュレーションデータをセル内においてまたはセルのところでたとえば専用レジスタに記憶し、特定の状態に依存してレジスタ内容を呼び出したりセルに読み込んだりすることである。これはたとえばマルチプレクサの切り替えなどによって行うことができる。
【００２７】
また、以下で説明するウェーブ・リコンフィギュレーションの方法も適用することができる。場合によっては、差分コンフィギュレーションを事前に正常に実行されたコンフィギュレーションの首尾（ＡＣＫ／ＲＥＪ）に依存させるのも有用である。換言すれば、差分コンフィギュレーションは先行の差分でないコンフィギュレーションに対するＡＣＫの到来後にのみ実行される。
【００２８】
差分コンフィギュレーションの同期合わせに関する格別有利な変形実施形態を一般に適用可能であり、しかもこれを種々の差分コンフィギュレーションを実際にどれだけ必要とするのかに依存して適用可能である。これは次のようにして実現される。すなわち差分コンフィギュレーションをローカルにまえもって記憶するのではなく、一番目のセルによって特定の状態たとえばデータ入力終了等が識別されたことに応じて、差分的に再コンフィギュレーションすべきセルを停止する信号が生成される。この種の信号をストップ信号とすることができる。差分的に再コンフィギュレーションすべきセルにおけるデータ処理の後またはそれと同時に、停止されたセルの差分再コンフィギュレーションを要求する信号がＣＴへ送信される。差分再コンフィギュレーションに対するこの要求信号は殊に、ストップ信号も発生するいずれのセルからも生成可能であり送信可能である。その後、ＣＴは差分リコンフィギュレーションに必要とされるデータを停止されたセルへ送信し、そのようにして差分リコンフィギュレーションを生じさせる。差分リコンフィギュレーション後、ストップモードが中止される。これをたとえばＣＴによって指示することができる。なお、差分コンフィギュレーション方法においてキャッシュ技術を使用できることも付言しておく。
【００２９】
３．トリガの役割
ＶＰＵモジュールにおいて、あとで例として挙げるような簡単な情報を伝送するために有利にはいわゆるトリガが使用される。トリガは任意の殊にコンフィギュレーション可能なバスシステム（ネットワーク）によって伝送される。トリガのソースとターゲットはプログラミング可能である。
【００３０】
多数のトリガを１つのモジュール内で同時に伝送することができる。特別な実施形態において１つのソースから１つのターゲットへのダイレクトな伝送のほか、１つのソースから複数のターゲットへまたは複数のソースから１つのターゲットへの伝送も可能である。トリガは殊に、しかし排他的にではないが、
＊ 計算機構（ＡＬＵ）のステータス情報たとえば
−桁上げ
−ゼロによる除算
−ゼロ
−負
−アンダーフロー／オーバーフロー
＊ 比較結果
＊ ｎビットの情報（ただしｎは小さい数）
＊ 内部または外部で生成される割り込み要求
＊ ブロック命令およびイネーブル命令
＊ コンフィギュレーション要求
を伝送する。
【００３１】
トリガは任意のセルにより生成され、個々のセルにおける任意の結果によりトリガされる。たとえば従来技術のようにＡＬＵまたはプロセッサのステータスレジスタおよび／またはフラグレジスタをトリガ発生のために利用することができる。ＣＴによって、および／またはセルアレイまたはモジュールの外側に配置された外部ユニットによって、トリガを生成することもできる。トリガは任意のセルによって受け取られ、任意のやり方で評価される。たとえばＣＴによって、あるいはセルアレイまたはモジュールの外側に配置された外部ユニットによって、トリガを評価することもできる。トリガの基本的な使用範囲は、条件付き実行の同期合わせや制御および／またはたとえばシーケンサにより実現可能なアレイ内のシーケンス制御ならびにそれらの情報交換である。
【００３２】
３．１　トリガのセマンティクス
トリガはたとえばＰＡＥ内における以下のアクションについて用いられる：
ＳＴＥＰ：トリガ到来時のＰＡＥ内部における演算の実行。
【００３３】
ＧＯ：トリガ到来時のＰＡＥ内部における演算の実行。この実行はＳＴＯＰにより停止される。
【００３４】
ＳＴＯＰ：ＧＯによって始められた実行の停止；これについてはストップ信号に関する前述の記載も参照。
【００３５】
ＬＯＣＡＬ ＲＥＳＥＴ：実行の停止ならびにステータス「割り当て済み」または「コンフィギュレーション済み」からステータス「未コンフィギュレーション」への移行。
【００３６】
ＷＡＶＥ：演算の実行停止およびＣＴからロードすべきいわゆるウェーブ・リコンフィギュレーションのロード。ウェーブ・リコンフィギュレーションの場合、１つまたは複数のＰＡＥを続いてデータパケットが終了してしまうまでリコンフィギュレーションが行われることになる。この場合に有利には、差分リコンフィギュレーションとして行うことも可能なリコンフィギュレーションの直後に別のデータパケットの処理を行うことができる。たとえば第１のフィルタ係数により第１の音声データパケットが処理されることになる。この第１の音声データパケット実行後、局所的なリコンフィギュレーションが行われることになり、その後、第２のフィルタ係数セットによって異なる音声データパケットが処理されることになる。この目的で新たなリコンフィギュレーションデータたとえば第２のフィルタ係数をセル内にまたはセルのところに格納することができ、第１のデータパケットの終了の識別に応じて再コンフィギュレーションを自動的に指示することができ、このためにたとえばＣＴまたは別の外部の制御ユニットの別の割り込み制御は必要とされない。第１のデータパケットの終了の識別もしくはリコンフィギュレーションを実行すべき時点の識別を、ウェーブ・リコンフィギュレーショントリガの発生により行うことができる。これはたとえばそのつどデータ終了を識別するセルにおいて発生させることができる。この場合、再コンフィギュレーションはセルごとにトリガによって、それらが最初のデータパケットの処理をそのつど完了させるとただちに実行され、これはサッカースタジアムを駆け抜けるＬＡ ＯＬＡに匹敵する。この目的でただ１つのセルがトリガを発生させてたとえば第１のセルへ送信することができ、これによりその第１のセルに対し第１のパケットの終端が通過したことが指示される。ウェーブトリガ発生セルにより呼び出された再コンフィギュレーションすべきこの第１のセルは殊に、第１のパケットの最後のデータから導出されあとで処理する１つまたは複数のセルへ送信される結果と同時に、あとで処理するそのセルに対しウェーブトリガ信号を転送する。さらにこのウェーブトリガ信号をたとえば、目下第１のデータパケットの処理には取りかかっていないセルおよび／または最後のデータから導出された結果を受け取っていないセルへも送信もしくは転送することができる。ついでウェーブトリガ信号発生セルにより呼び出された再コンフィギュレーションすべき第１のセルが再コンフィギュレーションされ、第２のデータパケットにおけるデータの処理を始める。この期間中、後続のセルはまだ第１のデータパケットの処理を行っている。なお、ウェーブトリガ信号発生セルがただ１つのセルを呼び出すだけでなく、コンフィギュレーションすべき複数のセルを呼び出すこともできる。その結果、ウェーブコンフィギュレーションの雪崩状の伝播を生じさせることができる。ウェーブコンフィギュレーションが完全にコンフィギュレーションされてしまうと、データ処理がただちに続けられる。ＷＡＶＥの場合、コンフィギュレーション完了後ただちにデータ処理を続行するのか、またはＳＴＥＰまたはＧＯの到来を待つのかを選択できる。
【００３７】
ＳＥＬＥＣＴ：出力側への転送のため入力バスを選択する。例：バスＡまたはＢを出力側へ切り替える。ＳＥＬＥＣＴによりマルチプレクサの位置つまりはバス選択が決められる。トリガはたとえばＣＴ内の以下のアクションのために用いられる。
【００３８】
ＣＯＮＦＩＧ：コンフィギュレーションをＣＴによりＰＡへコンフィギュレーションする。
【００３９】
ＰＲＥＬＯＡＤ：コンフィギュレーションをＣＴによりそれらのローカルメモリへプリロードする。これによりコンフィギュレーションをＣＯＮＦＩＧが到来してからロードする必要がなくなる。予測可能なキャッシングの効果が生じる。
【００４０】
ＣＬＥＡＲ：コンフィギュレーションをＣＴによりそのメモリから消去する。この場合、到来するトリガは特定のコンフィギュレーションを参照する。これに対応する方法はあとで説明する。
【００４１】
セマンティクスはネットワーク内で１つのトリガ信号に対応づけられるのではなく、むしろ１つのトリガは１つの状態だけしか表さない。この状態を受け取った個々のＰＡＥによりどのように利用するのかは、受け取ったＰＡＥにコンフィギュレーションされている。換言すれば、送信側のＰＡＥは自身の状態だけをお送り、受信側のＰＡＥはそれについて有効なセマンティクスを発生する。複数のＰＡＥがトリガを受け取った場合、各ＰＡＥごとに異なるセマンティクスが用いられる可能性があり、つまり異なるリアクションを生じさせることができる。したがってたとえば第１のＰＡＥを停止し、第２のＰＡＥを再コンフィギュレーションすることができる。複数のＰＡＥがトリガを送信した場合、そのトリガを発生したイベントが各ＰＡＥごとに異なっている可能性がある。
【００４２】
ここで述べておくと、バスシステム等の場合もウェーブ・リコンフィギュレーションおよび／または部分的なリコンフィギュレーションを行うことができる。バスの部分的なリコンフィギュレーションは、たとえばセクションごとだけのリコンフィギュレーションにおいて行うことができる。
【００４３】
３．２　システムステータスおよびプログラムポインタ
ここでシステムとは、インプリメントに応じて１つのモジュールまたは複数のモジュールから成る互いに結合されたグループである。１つのシステムにおいてモジュール相互間にわたって構成された複数のＰＡＥから成るアレイを管理するために、ＰＡＥ各々のステータスまたはプログラムポインタの情報を得るのは有用ではない。もっと詳しく理解できるよう複数の事例を区別する：
・プロセッサ特性のないコンポーネントとしてのＰＡＥ。この種のＰＡＥは固有のプログラムポインタを必要としない。単一のＰＡＥの状態はたいていは意味がない。なぜならば複数の特定のＰＡＥだけが利用可能な状態をもつからである（ＰＡＣＴ０１参照：それによれば１つのＰＡＥにより表されるはプログラムカウンタではなくデータカウンタ）。複数のＰＡＥから成るグループの状態は、関連する個々のＰＡＥの状態の結合により求められる。換言すれば、トリガのネットワーク内の情報によって状態が表される。
【００４４】
・プロセッサとしてのＰＡＥ。これらのＰＡＥは固有の内部のプログラムポインタとステータスを有する。有利には、他の複数のＰＡＥまたは他の１つのＰＡＥについて関連するＰＡＥの情報だけがトリガによって交換される。
【００４５】
複数のＰＡＥ間の相互作用によってたとえばＣＴにおいて評価可能な１つの共通のステータスが得られ、これによって新たなコンフィギュレーションをどのよにして行うべきかが決められる。その際、トリガ伝送に用いられるラインもしくはバスにおいて場合によってはコンフィギュレーション可能なネットワークが目下のところどのようにコンフィギュレーションされているのかを、必要に応じて考慮することができる。
【００４６】
したがってＰＡＥ（ＰＡ）から成るアレイはグローバルな状態をもつ。基本的な情報は特定のトリガによってＣＴへ導かれ、ＣＴはそれに基づきプログラムの実行をリコンフィギュレーションにより制御する。ここで殊に注目したいのは、このことでプログラムカウンタはもはや存在しないことである。
【００４７】
４．（リ）コンフィギュレーション
ＶＰＵモジュールはイベントに基づきコンフィギュレーションまたは再コンフィギュレーションされる。これらのイベントは、ＣＴへ伝送されるトリガ（ＣＯＮＦＩＧ）によって表すことができる。到来するトリガは特定のＰＡＥに対する特定のコンフィギュレーション（ＳｕｂＣｏｎｆ）を参照する。参照されたＳｕｂＣｏｎｆは１つまたは複数のＰＡＥへ送信される。参照は従来技術によるルックアップシステムまたは他の任意のアドレス変換もしくはアドレス生成によって行われる。たとえば以下のようにして、到来するトリガの番号に基づき実行すべきコンフィギュレーション（ＳｕｂＣｏｎｆ）のアドレスを計算することができる。この場合、ＳｕｂＣｏｎｆは固定長を有する：
オフセット＋（トリガ番号 ＊ ＳｕｂＣｏｎｆ長）
ＶＰＵコンポーネントには３つのコンフィギュレーションモードがある。
【００４８】
ａ）グローバルコンフィギュレーション。ＶＰＵ全体が再コンフィギュレーションされる。この場合、ＶＰＵ全体がコンフィギュレーション可能な状態になけれならず、つまり未コンフィギュレーション状態でなければならない。
【００４９】
ｂ）ローカルコンフィギュレーション。ＶＰＵの一部分が再コンフィギュレーションされる。この場合、再コンフィギュレーションすべきＶＰＵの局所的な部分がコンフィギュレーション可能な状態になければならず、つまり未コンフィギュレーション状態でなければならない。
【００５０】
ｃ）差分コンフィギュレーション。既存のコンフィギュレーションが変更される。この場合、再コンフィギュレーションすべきＰＡＥがコンフィギュレーションされた状態でなければならず、つまりコンフィギュレーション済みでなければならない。
【００５１】
１つのコンフィギュレーションは複数のコンフィギュレーションワード（ＫＷ）の集合から成る。各コンフィギュレーションはそれ自体を参照することができ、たとえば必要に応じて一義的なものとすることのできる参照番号（ＩＤ）によって行うことができる。
【００５２】
以下では、ＩＤにより表されるＫＷの集合をサブコンフィギュレーション（ＳｕｂＣｏｎｆ）と称することにする。１つのＶＰＵにおいて、複数のそれぞれ異なるＳｕｂＣｏｎｆも同種のＳｕｂＣｏｎｆもコンフィギュレーションすることができ、これらは同時に異なるＰＡＥにおいて進行する。
【００５３】
ＰＡＥは１つまたは複数のコンフィギュレーションレジスタをもつことができ、その際、１つのコンフィギュレーションワード（ＫＷ）ごとに１つのコンフィギュレーションレジスタが書き込まれる。基本的に１つのＫＷにはコンフィギュレーションすべきＰＡＥのアドレスが割り当てられる。同様に１つのＫＷには、コンフィギュレーションの形式を表す慣用の情報が割り当てられる。これらの情報は技術的にはフラグまたはコーディングによって実現できる。フラグについては以下で詳しく説明する。
【００５４】
４．１　モジュールＩＤ
たいていの演算のためには、ＣＴはコンフィギュレーションワードの割り当てとＳｕｂＣｏｎｆに対する該当するＰＡＥを知っていれば十分である。ただしプロセッシングアレイにおける複雑な演算のためには、各ＰＡＥごとにそれに割り当てられたＳｕｂＣｏｎｆのＩＤを記憶するのが有用である。
【００５５】
ＰＡ内に格納されているＩＤをＣＴ内のＩＤと区別するため、以下ではモジュールＩＤと称する。モジュールＩＤを導入する理由は複数が、以下にそれらのうちのいくつかを挙げておく。
【００５６】
・ＰＡＥは、やはり対応するＳｕｂＣｏｎｆに属する１つのバスにしか切り替えてはならない。ＰＡＥが誤った（未知の）バスに切り替えられると、それによって誤ったデータの処理が引き起こされてしまう。原則的にこの問題は、バスをＰＡＥよりも前の時点でコンフィギュレーションすることによって解決することができ、その結果、１つのＳｕｂＣｏｎｆ内でＫＷの固定的な順序が生じることになる。このことはモジュールＩＤの導入により回避することができ、それによればＰＡＥが自身の記憶しているモジュールＩＤを自身に割り当てられているバスと比較し、そのモジュールＩＤがＰＡＥと一致しているときにはじめてバスに切り替えられる。双方のモジュールＩＤが異なっているかぎり、バス接続は確立されない。これに対する代案としてバスシェアリング管理を実現することができる（ＰＡＣＴ０７参照）。
【００５７】
・ＰＡＥを信号ＬｏｃａｌＲｅｓｅｔによってステータス「未コンフィギュレーション」に移すことができる。Ｌｏｃａｌ Ｒｅｓｅｔ（ローカルリセット）はアレイ内のＰＡＥからのものでありＣＴからのものではない。それゆえ「ローカル」なのである。このためすべてのＰＡＥとＳｕｂＣｏｎｆとの間で信号をつなげなければならない。このやり方が問題となるのは、まだ完全にはコンフィギュレーションされていないＳｕｂＣｏｎｆを消去しようというときであり、したがってＰＡＥがすべてはローカルリセットにつながれていないときである。モジュールＩＤによってＣＴはすべてのＰＡＥに命令をブロードキャストすることができる。相応のモジュールＩＤをもつＰＡＥはそのステータスを「未コンフィギュレーション」に変化させる。
【００５８】
・多くの適用事例においてＳｕｂＣｏｎｆは所定の時点になってはじめてスタートを許可されるが、すでにまえもってコンフィギュレーション可能である。モジュールＩＤによりＣＴはすべてのＰＡＥへ命令をブロードキャストすることができる。これに基づき相応のモジュールＩＤをもつＰＡＥはデータ処理を開始する。
【００５９】
基本的にモジュールＩＤをＣＴ内に記憶されているＩＤと一致させることができる。
【００６０】
モジュールＩＤは個々のＰＡＥ内のコンフィギュレーションレジスタに書き込まれる。ＩＤはたいてい少なくとも１０ｂｉｔよりも大きいかなり広いビット幅をもっているので、そのように大きいレジスタを各ＰＡＥごとに用意するのは非効率的である。
【００６１】
したがってここで提案されるのは、個々のＳｕｂＣｏｎｆのモジュールＩＤを僅かなビット幅をもちかつ一義的となるようＩＤから導出することである。１つのＰＡ内のすべてのモジュールの量は比較的僅かであるため、モジュールＩＤは数ｂｉｔ（たとえば４〜５ｂｉｔ）の幅で十分である。モジュールＩＤとＩＤは全単射で互いに写像可能である。換言すれば、モジュールＩＤはコンフィギュレーションされたモジュールを一義的に１つのアレイ内で特定の時点に識別する。モジュールＩＤはＳｕｂＣｏｎｆのコンフィギュレーション前、ＳｕｂＣｏｎｆが実行時点にＰＡ内で一義的に識別可能であるよう設定される。ＳｕｂＣｏｎｆは何度も同時にＰＡにコンフィギュレーション可能である（以下で説明するマクロを参照）。一義的な割り当てのため、コンフィギュレーションされた各ＳｕｂＣｏｎｆについて一義的なモジュールＩＤが設定される。
【００６２】
ＩＤからモジュールＩＤへの変換は、ルックアップテーブルまたはリストによって実行可能である。これについては数多くの写像方法が知られているので、１つの可能性についてのみ詳しく説明することにする：
長さが２ＭｏｄｕｌＩＤ であるリストには目下アレイ内でコンフィギュレーションされるすべてのＩＤの集合が含まれており、リストエントリごとに１つのＩＤが割り当てられている。エントリ「０」は利用されないモジュールＩＤを表す。新たなＩＤがコンフィギュレーションされるとき、それを空きのリストエントリに割り当てなければならず、そのエントリのアドレスによって対応するモジュールＩＤが表される。ＩＤはモジュールＩＤのアドレスのところでリストにエントリされる。ＩＤを消去する場合、対応するリストエントリが再び「０」にセットされる。
【００６３】
４．２　ＰＡＥのステータス
各ＫＷには付加的なフラグが設けられており、これによってＰＡＥのステータスがチェックされ制御される：
ＣＨＥＣＫ：コンフィギュレーションされていないＰＡＥが割り当てられ、コンフィギュレーションされる。ＰＡＥのステータスが「未コンフィギュレーション」であるかぎり、ＰＡＥはＫＷによってコンフィギュレーションされる。この過程はＡＣＫによって確認応答される。ＰＡＥがステータス「コンフィギュレーション済み」または「割り当て済み」であれば、ＫＷは受け入れられない。この場合、ＲＥＪによって拒否の応答が出される。ＣＨＥＣＫの到来後、ＰＡＥはステータス「割り当て済み」に移行する。その後のいかなるＣＨＥＣＫも拒否されるが、データ処理は始められない。
【００６４】
ＤＩＦＦＥＲＥＮＴＩＡＬ：すでにコンフィギュレーションされたＰＡＥのコンフィギュレーションレジスタが変更される。ＰＡＥのステータスが「コンフィギュレーション済み」または「割り当て済み」であるかぎり、ＰＡＥはＫＷによって変更される。この過程はＡＣＫによって確認応答される。ＰＡＥがステータス「未コンフィギュレーション」であればＫＷは受け入れられず、ＲＥＪ（Ｒｅｊｅｃｔ）によって応答される。
【００６５】
ＧＯ：データ処理が始められる。ＧＯは単独であるいはＣＨＥＣＫまたはＤＩＦＦＥＲＥＮＴＩＡＬといっしょに送信可能である。
【００６６】
ＷＡＶＥ：コンフィギュレーションがデータ処理と結合される。トリガＷＡＶＥが到来するとただちに、フラグＷＡＶＥにより表されるコンフィギュレーションがＰＡＥにロードされる。トリガＷＡＶＥの到来前にコンフィギュレーションされる場合、フラグＷＡＶＥにより表されるＫＷがトリガの到来まで記憶され、トリガによってはじめてアクティブになる。トリガＷＡＶＥがフラグＷＡＶＥを伴うＫＷの前に到来したならば、データ処理はＫＷの到来まで停止される。
【００６７】
伝送されるＫＷごとに、少なくともＣＨＥＣＫあるいはＤＩＦＦＥＲＥＮＴＩＡＬがセットされていなければならない。ただしＣＨＥＣＫとＤＩＦＦＥＲＥＮＴＩＡＬは同時には許可されない。ＣＨＥＣＫとＧＯもしくはＤＩＦＦＥＲＥＮＴＩＡＬとＧＯは許可され、それによってデータ処理が開始される。
【００６８】
付加的に、ＫＷに割り当てられておらずＣＴにより明示的にセットされるフラグがインプリメントされる。
【００６９】
ＬＯＣＫ：ＰＡＥはステータス「未コンフィギュレーション」に勝手に変わることはできない。そうであるとするならば、たとえばセルをさらにコンフィギュレーションしてデータ処理を行うことができてしまう一方、最初のコンフィギュレーションをＦＩＬＭＯメモリからセルへ書き込もうとする。その後、セルは別のＦＩＬＭＯプロセス中、その活動を終える。したがって基本的につまり別の措置をとることなく、ＦＩＬＭＯ内に記憶されており本来は最初のコンフィギュレーション後に実行許可される後続の第２のコンフィギュレーションが、そのセルを占有してしまう可能性がある。これによってデッドロック状況が発生してしまうおそれがある。このセルのコンフィギュレーション可能状態の変化を命令ＬＯＣＫによって一時的に制限することで、このようなデッドロックを回避することができ、その際にセルは不所望な時点でコンフィギュレーション可能にならぬよう阻止される。再コンフィギュレーションに対するセルのこのようなロックを行うことができるのはたとえば、ＦＩＬＭＯが実行されるときであり、しかも再コンフィギュレーションの目的で実際にアクセスされるセルを対象としているか否かにかかわらずそれが実行されるときである。択一的に、再コンフィギュレーションに対するセルのロックを次のようにして行うことができる。すなわち、たとえばＦＩＬＭＯ内にあるセルの最初のコンフィギュレーションによるセルへの最初のアクセスが失敗したときなどに、特定のフェーズにわたり再コンフィギュレーションを禁止することによって行うことができる。このことによって第２のコンフィギュレーションによるコンフィギュレーション開始は、先行のコンフィギュレーションによってアクセスすべきセルにおいてのみ回避される。
【００７０】
つまりＦＩＬＭＯ方式によれば、特定の状態の間のみＦＩＬＭＯにおいて変化が許可される。ここで説明したようなロック（ＬＯＣＫ）によって、ＦＩＬＭＯ状態機械はステータス「未コンフィギュレーション」への移行を制御する。インプリメンテーションに応じて、ＰＡＥはそれらの目下のステータスを上位の制御ユニット（たとえば対応づけられたＣＴ）へ伝達し、またはそれらをローカルで記憶する。
【００７１】
移行テーブル
ＦＩＬＭＯプロトコルを遵守するための状態機械の最も簡単な実現形態は、ＷＡＶＥおよびＣＨＥＣＫ／ＤＩＦＦＥＲＮＴＩＡＬを利用せずに可能である。この場合にはＧＯフラグだけがインプリメントされ、コンフィギュレーションはＫＷから成り、これらはＧＯとともに伝送される。ここで以下の状態をインプリメントすることができる：
未コンフィギュレーション ｎｏｔ ｃｏｎｆｉｇｕｒｅｄ：ＰＡＥは完全にニュートラルに振る舞う、すなわちデータまたはトリガを受け入れず、いかなるデータまたはトリガも送信しない。コンフィギュレーションが待ち受けられている。場合によってはインプリメントされる差分コンフィギュレーションは拒否される。
【００７２】
コンフィギュレーション済み ｃｏｎｆｉｇｕｒｅｄ：ＰＡＥはコンフィギュレーションされていてデータおよびトリガを処理する。他のコンフィギュレーションは拒否され、場合によってはインプリメントされる差分コンフィギュレーションは受け入れられる。
【００７３】
ロック待ち ｗａｉｔ ｆｏｒ ｌｏｃｋ：ＰＡＥはリコンフィギュレーションのための要求を（たとえばＬｏｃａｌ Ｒｅｓｅｔにより、またはコンフィギュレーションレジスタにおけるビットのセットにより）受け取った。データ処理が停止され、ＰＡＥはステータスを「未コンフィギュレーション」に変えることができるよう、ロック解除を待ち望む。
【００７４】
【表１】
2004506261.tif 000003
【００７５】
既述の方法に従い完全なものにされた状態機械によって、複数のＫＷを必要とするＰＡＥのコンフィギュレーションが可能となる。これがあてはまるのはたとえば、複数の定数を参照しそれらの定数を本来のコンフィギュレーションの後またはそれといっしょにＰＡＥにも書き込むべきコンフィギュレーションを伝送しようというときである。このためにはさらに別の状態が必要とされる。
【００７６】
割り当て済み ａｌｌｏｃａｔｅｄ：ＰＡＥはＣＨＥＣＫにより検査され、コンフィギュレーションに対しスタンバイ状態にある。割り当て済み状態においてＰＡＥはまだいかなるデータも処理しない。ＤＩＦＦＥＲＥＮＴＩＡＬにより表されたＫＷは受け入れられる。ＣＨＥＣＫにより表されたＫＷは拒否される。
【００７７】
次にこれに相応する移行テーブルを示す。ＷＡＶＥはまだインプリメントされていない：
【００７８】
【表２】
2004506261.tif 000004
【００７９】
４．２．１　ＧＯのインプリメンテーション
ＧＯは、データ処理をただちにスタートさせるためＰＡＥのコンフィギュレーションにおいてただちにＫＷによりセットされるかまたは、ＳｕｂＣｏｎｆ全体の完了後に個々のＰＡＥへ送信される。
【００８０】
フラグＧＯは様々なかたちでインプリメントできる：
ａ）レジスタ
各ＰＡＥは、処理をスタートさせるためにセットされるレジスタをもつ。技術的な実現は比較的簡単であるが、ＰＡＥごとにコンフィギュレーションサイクルが必要とされる。ＧＯはフラグとして既述のようにＫＷといっしょに伝送される。ＥｎｈＳｕｂＣｏｎｆに属する種々のＰＡＣのＰＡＥをコンフィギュレーションする順序が些細なことではない場合、この時間関係の遵守を保証するため別の方法が提案される。複数のＰＡＣの場合には定義に従いやはり複数のＣＴが存在するので、それらは互いに連絡を取り合い、各ＰＡＣにおいて次にコンフィギュレーションされていなければならないすべてのＰＡＥが、これまでにすでにそのＧＯを同じコンフィギュレーションから受け入れたか否かについて情報を交換する。
【００８１】
時間関係を解消し許可されていないＧＯの送信を回避する可能性として挙げられるのはＫＷの並べ替えであり、それによれば適正な順序がそれらのコンフィギュレーションの順番を通してＦＩＬＭＯにより保証される。このときＦＩＬＭＯは場合によってはフラグにより各コンフィギュレーションごとに、目下のコンフィギュレーションのすべてのＧＯがこれまで受け入れられたか否かを感知する。これがあてはまらなければ、以降のＧＯはこのコンフィギュレーションにはもはや送られない。その際、新たなコンフィギュレーション各々における初期状態は、すべてのＧＯがこれまで受け入れられていたかのようになる。
【００８２】
いくつかのＰＡＥがコンフィギュレーションにあたりすでにもはやコンフィギュレーションされていない状態にある確率を高めるため、少なくとも部分的にシーケンシャルなコンフィギュレーションのＫＷを並べ替えて、該当するＰＡＥのＫＷが時間的に遅れてコンフィギュレーションされるようにすることができる。また、必要であれば特定のＰＡＥを早めにアクティブにすることができ、この場合、該当するコンフィギュレーションのＫＷを並び替えて、該当するＰＡＥが時間的に早めにコンフィギュレーションされるようにすることができる。この方法は殊に、並べ替え後にも遵守しなければならない時間関係によりＫＷの順序がすでに完全に決められているときに利用できる。
【００８３】
ｂ）ラインを用いた配線
Ｌｏｃａｌ Ｒｅｓｅｔ信号の使用と同様、複数のＰＡＥがいっしょにスタートさせるべきグループにまとめられる。このグループ内ですべてのＰＡＥはＧＯの分配のため１本のラインと接続される。１つのグループをスタートさせようという場合、最初のＰＡＥにＧＯがシグナリングされ、このことは信号の送信またはこの第１のＰＡＥのレジスタ（ａを参照）のセットにより実現される。このＰＡＥから他のすべてのＰＡＥへＧＯが転送される。スタートのためにはコンフィギュレーションサイクルが必要とされる。また、この転送にあたり比較的長い距離を橋渡しするためにレイテンシが必要とされる。
【００８４】
ｃ）ブロードキャスト
ａ）とｂ）の実施形態によれば比較的僅かなコストで高いパフォーマンス（１コンフィギュレーションサイクルのみ）が得られる。また、すべてのモジュールはモジュールＩＤを受け取り、これは一般にＳｕｂＣｏｎｆＩＤとは異なる。その際、モジュールＩＤのサイズをできるかぎり小さく抑えなければならず、できれば数ｂｉｔ（３〜５）の幅で十分であるようにしたい。モジュールＩＤの利用についてはあとで詳しく説明する。コンフィギュレーション中、各ＰＡＥに対応するモジュールＩＤが書き込まれる。その後、ブロードキャストによりＧＯが開始され、その際にモジュールＩＤはＧＯ命令といっしょにアレイへ送られる。この命令はすべてのＰＡＥによって受け取られるが、モジュールＩＤの適合したＰＡＥによってのみ実行される。
【００８５】
４．２．２　ＰＡＥステータスの記憶
ＰＡＥのステータスは、コンフィギュレーションまたはＦＩＬＭＯプロセスにおいては「コンフィギュレーション済み」から「未コンフィギュレーション」に変わってはならない。例：２つの異なるＳｕｂＣｏｎｆ（Ａ，Ｄ）が同じリソースたとえばＰＡＥ Ｘを分け合う。ＦＩＬＭＯにおいてＳｕｂＣｏｎｆ ＡはＳｕｂＣｏｎｆ Ｄよりも時間的に前に位置する。したがってＳｕｂＣｏｎｆ ＡはＳｕｂＣｏｎｆ Ｄよりも前にリソースを占有しなければならない。ＰＡＥ ＸはＳｕｂＣｏｎｆ Ａによるコンフィギュレーション時点に「コンフィギュレーション済み」になるが、ＳｕｂＣｏｎｆ Ｄによるコンフィギュレーションよりも前にステータスを「未コンフィギュレーション」に変える。その結果、デッドロックの状況が発生することになる。なぜならばこのときＳｕｂＣｏｎｆ ＡはＰＡＥ Ｘをもはやコンフィギュレーションできないが、ＳｕｂＣｏｎｆ ＤはすでにＳｕｂＣｏｎｆ Ａにより占有されている残りのリソースをコンフィギュレーションできないからである。つまりＳｕｂＣｏｎｆ ＡもＳｕｂＣｏｎｆ Ｄも実行不可能である。この場合、既述のようにロックにより、ＰＡＥのステータスはＦＩＬＭＯプロセス中は許可なく変えられないようになる。その際、ＦＩＬＭＯ方式に関してステータス保護がどのように実行されるのかは重要ではないけれども、複数の可能性について述べておくことにする：
ロックの原理
最初のコンフィギュレーションの開始前ＦＩＬＭＯの新たな実行ごとに、ＰＡＥのステータスが保護され、もしくはロックインされる。実行終了後、ステータスは再びロック解除される。したがって所定のステータス変化は実行ごとに１度しか許可されない。
【００８６】
明示的ロック
ロック信号はＦＩＬＭＯプロセス開始以降、ＰＡからの最初のＲＥＪ後にはじめてセットされる。これが可能であるのは、事前にすべてのＰＡＥをコンフィギュレーションすることができたからであり、つまりそれらはすでにステータス「未コンフィギュレーション」にあったからである。ＲＥＪを発生するＰＡＥだけが以降のＦＩＬＭＯプロセス中、そのステータスを「コンフィギュレーション済み ｃｏｎｆｉｇｕｒｅｄ」から「未コンフィギュレーション ｎｏｔ ｃｏｎｆｉｇｙｕｒｅｄ」に変えることができる。この時点以降になってはじめてデッドロックの発生する可能性があり、つまりそれは第１のＫＷがＲＥＪを受け取り、時間的に遅れてコンフィギュレーションされるときである。しかしＲＥＪ後ただちにロックがセットされることにより、「コンフィギュレーション済み」から「未コンフィギュレーション」への移行が即座に阻止される。この方法の基本的な利点は、第１の実行フェーズ中はＰＡＥはまだそのステータスを変えることができ、すなわちたとえばステータス「未コンフィギュレーション」への変化が許可されることである。つまり実行中、コンフィギュレーションの試行を失敗する前にＰＡＥが「コンフィギュレーション済み」から「未コンフィギュレーション」に変われば、それを同じコンフィギュレーションフェーズにおいてコンフィギュレーションすることができる。
【００８７】
暗黙的ロック
明示的ロックのさらに効率的な拡張はＰＡＥ内でのロックの暗黙的な処理である。一般には、コンフィギュレーションを拒否（ＲＥＪ）したＰＡＥについてのみステータス保護が該当する。したがってＦＩＬＭＯプロセス中、ＲＥＪを発したＰＡＥ内においてのみステータスを保護すれば十分である。他のすべてのＰＡＥはその影響を受けない。この場合、ＬＯＣＫはもはや上位のインスタンス（ＣＴ）によって発せられない。むしろＦＩＬＭＯプロセス後、該当するＰＡＥ内のステータス保護が信号ＦＲＥＥによって再び解除される。ＦＲＥＥはＦＩＬＭＯプロセス後ただちにすべてのＰＡＥへブロードキャストすることができ、パイプライン化しアレイを通して導くこともできる。
【００８８】
暗黙的ロックのための拡張された移行テーブル：
ＰＡＥから発せられた拒否（ＲＥＪ）は各ＰＡＥ内でローカルに保護される（ＲＥＪＤ＝ｒｅｊｅｃｔｅｄ）。「未コンフィギュレーション」に再び戻ったときにはじめて情報が消去される。
【００８９】
【表３】
2004506261.tif 000005
【００９０】
移行テーブルは一例であって、実際のインプリメンテーションは個々の構成に依存する。
【００９１】
４．２．３　ＰＡＥのコンフィギュレーション
このセクションではコンフィギュレーションの流れをＣＴの視点からもう一度描いてみることにする。ＰＡＥの一部分もＰＡＥとみなされる場合があり、これはそれらがまえもって記述されたステータスを互いに依存せず管理するときである。ＰＡＥが新たにコンフィギュレーションされるときには、第１のＫＷはＰＡＥのステータスをチェックするためフラグＣＨＥＣＫをセットする必要がある。ＰＡＥに対するコンフィギュレーションは以下のように構成されている。すなわち１つのＫＷだけがコンフィギュレーションされる：
【００９２】
【表４】
2004506261.tif 000006
【００９３】
あるいは複数のＫＷがコンフィギュレーションされる。この場合、最初のＫＷにおいてＣＨＥＣＫがセットされ、以降のすべてのＫＷにおいてＤＩＦＦＥＲＥＮＴＩＡＬがセットされる：
【００９４】
【表５】
2004506261.tif 000007
【００９５】
ただしＸはセット済み、−は未セット、ＧＯはそれぞれオプション ＊ を表す。
【００９６】
ＣＨＥＣＫが拒否（ＲＥＪ）されるならば、ＤＩＦＦＥＲＥＮＴＩＡＬフラグをもつ後続のＫＷはＰＡＥへは送信されない。ＣＨＥＣＫ（ＡＣＫ）の受け入れ後、ステータス「未コンフィギュレーション」へ戻るまで後続のすべてのＣＨＥＣＫが拒否され、ＰＡＥは受け入れられたＳｕｂＣｏｎｆのために割り当てられる。このＳｕｂＣｏｎｆ内で次のＫＷはもっぱらＤＩＦＦＥＲＥＮＴＩＡＬによってコンフィギュレーションされる。これが許可される理由は、そのＳｕｂＣｏｎｆがＰＡＥに対するアクセス権をもつことがＣＨＥＣＫにより既知だからである。
【００９７】
４．２．４　ステータス「未コンフィギュレーション ｎｏｔ ｃｏｎｆｉｇｕｒｅｄ」へのリセット
特別に構成されたトリガ（ＬｏｃａｌＲｅｓｅｔ ローカルリセット）によって信号が伝播され、この信号により、受け取ったＰＡＥにおいてステータス「コンフィギュレーション済み」から「未コンフィギュレーション」へのローカルなリセットがトリガされ、これは遅くともＬＯＣＫまたはＦＲＥＥの受け取り後に行われる。このリセットを付加的に別のソースによってトリガすることができ、たとえばコンフィギュレーションレジスタによってトリガすることができる。ＬｏｃａｌＲｅｓｅｔは信号を発生したソースからコンフィギュレーション可能な存在するすべてのバス接続を介して、すなわちすべてのトリガバスおよびすべてのデータバスを介して、それらのバスを介して接続された各ＰＡＥへ転送することができる。この場合、基本的にたとえばＬｏｃａｌＲｅｓｅｔを受信したＰＡＥは各々、接続されているすべてのバスを介して信号を再び転送する。とはいえローカルなグループの限界を超えてＬｏｃａｌＲｅｓｅｔが転送されてしまうのを防ぐため、ＬｏｃａｌＲｅｓｅｔを転送すべきか否かや接続されたどのバスを介してＬｏｃａｌＲｅｓｅｔを転送すべきかとは無関係に、各セルごとにコンフィギュレーション可能である。
【００９８】
４．２．１　完全にはコンフィギュレーションされたなかったＳｕｂＣｏｎｆの消去
いくつかの事例において、ＳｕｂＣｏｎｆのコンフィギュレーションが始められ、そのコンフィギュレーション中にＳｕｂＣｏｎｆが（もはや）不要であることあるいはすべては必要ないと判定される場合が起こるかもしれない。ＬｏｃａｌＲｅｓｅｔは場合によっては、バスがまだ完全には構築されていなかったため、すべてのＰＡＥのステータスを「未コンフィギュレーション」に変えることがある。本発明によればその解決のために２つの可能性が提案される。両方のやり方において、ＰＡＥがＬｏｃａｌＲｅｓｅｔを発生したならばそのＰＡＥはトリガをＣＴへ送ることになる。それに基づきＣＴは以下のようにしてＰＡＥに通知を行う：
４．２．４．２　モジュールＩＤを使用した場合
各ＰＡＥ内でモジュールＩＤを記憶できるように構成されているならば、識別子をいっしょに送信するという簡単なブロードキャストによって各ＰＡＥに対しこの特定の識別子によって、ステータス「未コンフィギュレーション」へ移行するように要求することができる。
【００９９】
４．２．４．３　ＧＯ信号を使用した場合
各ＰＡＥをどのようにコンフィギュレーションするかという順序で正確にＧＯラインが配線されていれば、すべてのＰＡＥをステータス「未コンフィギュレーション」にセットするリセットラインをＧＯラインに割り当てることができる。
【０１００】
４．２．４．４　コンフィギュレーションレジスタによる明示的リセット
各ＰＡＥにおいて１つのビットまたは１つのコードがコンフィギュレーションレジスタ内で定義され、ＣＴによりこのビットまたはコードをセットすることで、ＰＡＥがステータス「未コンフィギュレーション」にリセットされる。
【０１０１】
４．３　ＰＡＥ内でのデータの保持
本発明の対象となるモジュールにおいて格別有利であるのは、ＰＡＥのデータおよび状態をリコンフィギュレーションを越えて保持できるようにすることである。換言すれば、ＰＡＥ内に記憶されているデータをリコンフィギュレーションにかかわらず得ることができる。このためＫＷにおける相応の情報により、リコンフィギュレーションによりリセットされるか否かが関連するレジスタごとに定義される。
【０１０２】
例：
１つのビットが１つのＫＷ内でたとえば論理値０であれば、対応するデータレジスタまたはステータスレジスタにおける現在のレジスタ値が保持され、論理値１によりそのレジスタの値がリセットされる。相応のＫＷを以下のように構成しておくことができる：
【０１０３】
【表６】
2004506261.tif 000008
【０１０４】
これによりリコンフィギュレーションごとにデータ受け取りを選択可能である。
【０１０５】
４．４　ＰＡＥにおけるデータのセット
さらにリコンフィギュレーションにあたり、ＣＴからＰＡＥのレジスタへデータを書き込むことができる。この場合、関連するレジスタをＫＷによってアドレッシング可能である。１つの特別なビットによって、データが定数として処理されるのかまたはデータ語として処理されるのかが表される。
【０１０６】
・定数はそれが新たにセットされるまで存在し続ける。
【０１０７】
・データ語は厳密に決められた数の計算たとえば正確に１つの計算に対し有効である。データ語の処理後、ＣＴからレジスタへ書き込まれるデータ語はもはや存在しない。
【０１０８】
５．拡張
ＫＷとＡＣＫ／ＲＥＪ信号をレジスタについてもパイプライン化できるようバスプロトコルを拡張することができる。これはきわめて有利であり、それ自体でまたは他のものと組み合わせて特許性があるとみなされる。この場合、各クロックごとに１つのＫＷまたは複数のＫＷを送信することができる。その際、ＦＩＬＭＯ方式を守るようにする。基本原理によれば、時間的に遅れた確認応答があとからＫＷに割り当てられるよう、ＰＡに書き込まれたＫＷへの割り当てが構築される。確認応答に依存するＫＷは、それらが確認応答到来後にはじめて処理されるよう並び替えられる。あとで説明する択一的な方法によってこの要求が満たされ、それらの方法は種々の利点を有する：
５．１　ルックアップテーブル（ＳＴＡＴＥＬＵＴ）
各ＰＡＥはそのステータスを、ＣＴ内にローカルにインプリメントされているルックアップテーブル（ＳＴＡＴＥＬＵＴ）へ送信する。ＣＴはＫＷの発送にあたり、アドレッシングされたＰＡＥのステータスをＳＴＡＴＥＬＵＴにおけるルックアップによりチェックする。確認応答（ＡＣＫ／ＲＥＪ）はＳＴＡＴＥＬＵＴにより生成される。以下、この方法の動作について詳述する：
ＣＴにおいて、メモリまたはレジスタセット内で個々のＰＡＥのステータスが管理される。各ＰＡＥごとに、ＰＡＥがどのモード（「コンフィギュレーション済み」、「未コンフィギュレーション」）にあるかを示すエントリが存在する。このエントリに基づきＣＴは、ＰＡＥを再コンフィギュレーションできるか否かについてチェックする。ステータスはＣＴにより内部的に、つまりＰＡＥにおける問い合わせをせずにチェックされる。各ＰＡＥはそれらのステータスをインプリメンテーションに応じて自動的にあるいは要求後に、ＣＴの内部ＳＴＡＴＥＬＵＴへ送信する。ＬＯＣＫがセットされていればもしくはＦＲＥＥがなければ、ＰＡＥのステータス変更はＳＴＡＴＥＬＵＴへ送信されず、あるいはＳＴＡＴＥＬＵＴから受け取られない。
【０１０９】
簡単なメカニズムによってＰＡＥのステータスが監視され、これによりステータス制御の既述のメカニズムや公知の状態が実現される：
ステータス「コンフィギュレーション済み」のセット：
フラグＣＨＥＣＫの設けられたＫＷの書き込みにあたりアドレッシングされたＰＡＥのチェックがＳＴＡＴＥＬＵＴにおいて行われる。
【０１１０】
・ＰＡＥが再コンフィギュレーション可能な状態であるかぎり、ＰＡＥはＳＴＡＴＥＬＵＴにおいて「割り当て済み」と記される。
【０１１１】
・ＰＡＥが開始される（ＧＯ）とただちに、ＰＡＥは「コンフィギュレーション済み」としてエントリされる。
【０１１２】
ステータス「コンフィギュレーション済み」から「未コンフィギュレーション」へのリセット
アプリケーションやインプリメンテーションに応じて複数の方法を使用することができる：
ａ）各ＰＡＥは、その状態を「コンフィギュレーション済み」から「未コンフィギュレーション」へ変えたとき、ステータス信号をテーブルへ送信する。このステータス信号をパイプライン化して送ることができる。
【０１１３】
ｂ）ステータス信号（ＬｏｃａｌＲｅｓｅｔ）は、グループ全体に関する状態を「コンフィギュレーション済み」から「未コンフィギュレーション」に変えたことを示すＰＡＥのグループに対して送信される。リストによってそのグループに属するすべてのＰＡＥが選び出され、個々のＰＡＥ各々の状態がテーブルにおいて変更される。重要であるのは、１つのグループにおいてＬｏｃａｌＲｅｓｅｔによって遠ざけられた最後のＰＡＥのステータス信号がＣＴへ送られることである。さもないとＳＴＡＴＥＬＵＴとＰＡＥの実際の状態との間で矛盾が生じてしまうおそれがあり、これはＳＴＡＴＥＬＵＴによってあるＰＡＥが「未コンフィギュレーション」と表されるが、実際にはそのＰＡＥはステータス「コンフィギュレーション済み」にあることで生じる可能性がある。
【０１１４】
ｃ）有利にはパイプライン化されたＬＯＣＫ信号の到来後、ＬＯＣＫの最後の到来以降に状態を変えた各ＰＡＥは、そのステータスをＳＴＡＴＥＬＵＴに送信する。しかしＰＡＥはそのステータスをこの要求後のみ伝送しステータス変更はそのほかではＬＯＣＫされているので、この方法は逆のセマンティクス以外は同じママである。
【０１１５】
コンフィギュレーションにあたりＰＡＥの状態をチェックするため、ＫＷのターゲットＰＡＥのアドレスを送信する際にＳＴＡＴＥＬＵＴが参照され、それに応じてＡＣＫまたはＲＥＪが生成される。ＫＷがＰＡＥへ送信されるのは、ＲＥＪが発せられなかったときのみ、またはＤＩＦＦＥＲＥＮＴＩＡＬフラグがセットされているときのみである。
【０１１６】
この方法によりＫＷの時間順序が保証される。有効なＫＷがＰＡＥへ送信される。この場合の欠点は、ＳＴＡＴＥＬＵＴのインプリメントの手間、ＳＴＡＴＥＬＵＴへのＰＡＥステータスの返送、ならびにそれに必要とされるバス帯域幅と伝播遅延時間である。
【０１１７】
５．２　ＫＷの並び替え
以下の方法の適用に対し重要なことは、ＰＡＥに送信される各々最初のＫＷ（ＫＷ１）に対しＣＨＥＣＫフラグを使用することである。
【０１１８】
ＳｕｂＣｏｎｆは以下のように並び替えられる：
１．はじめに第１のＰＡＥのＫＷ１が書き込まれる。確認応答（ＡＣＫ／ＲＥＪ）が到来するまでの時間（ＤＥＬＡＹ）、複数のクロックのように厳密に多くのアイドルサイクル（ＮＯＰ）が設けられる。
【０１１９】
２．その後、第２のＰＡＥのＫＷ１が書き込まれる。ＤＥＬＡＹ中に第１のＰＡＥの残りのＫＷを書き込むことができる。場合によっては残されたクロックがアイドルサイクルによって埋められる。ＫＷ１からＤＥＬＡＹ満了までのコンフィギュレーションロックをアトムと称する。
【０１２０】
３．各々以降のＰＡＥにおいても同じようなプロセスを辿る。
【０１２１】
４．ＤＥＬＡＹが存在している間に１つのＰＡＥにおいてクロックよりも多くのＫＷが書き込まれる場合、残りの部分が後続のアトムに配分される。択一的にＤＥＬＡＹを能動的に延長することもでき、それによって同一アトム内でいっそう多くのＫＷを書き込むことができる。
【０１２２】
ＫＷ１に対するＡＣＫが到来すると、対応するＰＡＥのための他のすべてのＫＷがコンフィギュレーションされる。ＰＡＥがＲＥＪによって確認応答するかぎり、そのＰＡＥに該当する以降のＫＷはコンフィギュレーションされない。この方法によってコンフィギュレーションの順序の遵守が保証される。欠点は、最適化されたコンフィギュレーション速度を達成できないことである。順序を守るためにはアトムの待ち時間を場合によってはアイドルサイクル（ＮＯＰ）で埋める必要があるので、利用可能な帯域幅およびＳｕｂＣｏｎｆのサイズはＮＯＰによって増加する。さらにパラドックスによって、コンフィギュレーション速度の解消不可能な制約が引き起こされる。つまりコンフィギュレーションデータとコンフィギュレーションサイクルの量をできるかぎり僅かに抑えようとするには、コンフィギュレーションレジスタの個数をできるかぎり小さく抑えるべきである。周波数が高くなるとＤＥＬＡＹは必然的に大きくなるので、このことはＤＥＬＡＹをＫＷの充填により有効に利用するという要求とぶつかってしまう。したがってこの方法を有効に利用できるのは、コンフィギュレーションデータをシリアルに伝送する場合だけのように思われる。ＫＷのシリアル化によりデータストリームは、待ち時間を満たすために十分な長さとなる。
【０１２３】
５．３　レイテンシを伴うＡＣＫ／ＲＥＪ確認応答の評価（ＣＨＥＣＫＡＣＫＲＥＪ）
ＣＨＥＣＫ信号はＫＷとともに１つまたは複数のパイプライン段を介して、アドレッシングされたＰＡＥへ送信される。アドレッシングされたＰＡＥは確認応答（ＡＣＫ／ＲＥＪ）をやはりパイプライン化してＣＴへ送る。
【０１２４】
各クロックごとにＫＷが送信され、その確認応答（ＡＣＫ／ＲＥＪ）はｎクロック遅れてからＣＴに到来し評価される。しかしこの期間中、ｎ個の別のＫＷが送信される。その結果、２つの領分で問題が発生する：
・ＦＩＬＭＯの制御
・ＫＷの順序の遵守
５．３．１　ＦＩＬＭＯの制御
ＦＩＬＭＯ内で、どのＫＷがＰＡＥによって受け入れられたか（ＡＣＫ）およびどれが拒否されたか（ＲＥＪ）が記されなければならない。拒否されたＫＷは後になってからのＦＩＬＭＯプロセス中に送りなおされる。後になってからのこの実行にあたりコンフィギュレーション効率の点で有用であるのは、拒否されたＫＷだけを実行することである。既述の要求は以下のようにして実現可能である。すなわちＦＩＬＭＯに別のメモリ（ＲＥＬＪＭＰ）が割り当てられ、このメモリはＦＩＬＭＯと同じ深さをもつ。第１のカウンタ（ＡＤＲ＿ＣＮＴ）は、目下ＰＡＥアレイに書き込まれるＫＷのＦＩＬＭＯ内におけるアドレスを指す。第２のカウンタ（ＡＣＫ／ＲＥＪ＿ＣＮＴ）は、目下アレイから確認応答（ＡＣＫ／ＲＥＪ）が戻されたＫＷのＦＩＬＭＯ内におけるポジションを指す。また、レジスタ（ＬＡＳＴＲＥＪ）はＡＣＫ／ＲＥＪ＿ＣＮＴの値を記憶し、この値はＲＥＪによりコンフィギュレーションの拒否された最後のＫＷのアドレスを指す。減算器はＡＣＫ／ＲＥＪ＿ＣＮＴとＬＡＳＴＲＥＪとの差を計算する。ＲＥＪが到来すると、メモリＲＥＬＪＭＰにおいてアドレスＬＡＳＴＲＥＪをもつメモリロケーションにこの差が書き込まれる。
【０１２５】
したがってＲＥＬＪＭＰは拒否されたＫＷとその後続のＫＷとの間の相対ジャンプ幅を有する。
【０１２６】
１．受け入れられた各ＫＷにはＲＥＬＪＭＰエントリ「０」（ゼロ）が割り当てられる。
【０１２７】
２．拒否された各ＫＷにはＲＥＬＪＭＰエントリ「＞０」（ゼロよりも大きい）が割り当てられる。目下のアドレスとＲＥＬＪＭＰエントリとの加算により、拒否された次のＫＷのＦＩＬＭＯにおけるアドレスが計算される。
【０１２８】
３．拒否された最後のＫＷにはＲＥＬＪＭＰエントリ「０」（ゼロ）が割り当てられ、これによって終端が示される。
【０１２９】
ＳｕｂＣｏｎｆの第１のアドレスのメモリロケーションにはＦＩＬＭＯ内においてＮＯＰが割り当てられる。対応づけられたＲＥＬＪＭＰは、最初に処理すべきＫＷに対する相対ジャンプを有する。
【０１３０】
１．ＦＩＬＭＯの最初の実行時、値は「１」である。
【０１３１】
２．次の実行時、この値は最初に処理すべきＫＷを指し、つまり「＞０」（０よりも大きい）である。
【０１３２】
３．ＳｕｂＣｏｎｆのすべてのＫＷがコンフィギュレーションされてしまったならば、値は「０」（ゼロ）であり、このことから状態機械はコンフィギュレーションの完全な処理を確認する。
【０１３３】
５．３．２　順序の遵守（バリア ＢＡＲＲＩＥＲ）
５．３のところで説明した方法の場合には特定のコンフィギュレーション順序を保証するのは不可能である。この方法によれば、２．１のａ）〜ｃ）によるＦＩＬＭＯ要求のみが保証される。
【０１３４】
特定のアプリケーションにおいては、１つのＳｕｂＣｏｎｆ内でのコンフィギュレーション順序の遵守（２．１のｅ）や、個々のＳｕｂＣｏｎｆ自体のコンフィギュレーション順序の遵守（２．１のｄ）が重要となる。順序の遵守は、ＳｕｂＣｏｎｆを複数のブロックに分割することによって達成される。個々のブロックの間にトークン（ＢＡＲＲＩＥＲ）が挿入され、これは先行のＫＷのいずれも拒否（ＲＥＪ）されなかったときだけ飛び越えられる。コンフィギュレーションがＢＡＲＲＩＥＲに遭遇し、事前にＲＥＪが発生していれば、ＢＡＲＲＩＥＲを飛び越えてはならない。ここで２種類のＢＡＲＲＩＥＲを区別する：
ａ）ノンブロッキング ＮｏｎＢｌｏｃｋｉｎｇ：コンフィギュレーションは後続のＳｕｂＣｏｎｆから続けられる。
【０１３５】
ｂ）ブロッキング Ｂｌｏｃｋｉｎｇ：コンフィギュレーションは目下のＳｕｂＣｏｎｆの以降の実行から続けられる。ＢＡＲＲＩＥＲは、目下のＳｕｂＣｏｎｆが完全にコンフィギュレーションされてしまってからはじめて飛び越えられる。
【０１３６】
コンフィギュレーション速度の最適化に対する考慮：
一般に個々のＫＷのコンフィギュレーション順序の遵守は不要である。しかし個々のＰＡＥのアクティベーション（ＧＯ）の順序はきちんと守らなければならない。ＧＯフラグがセットされていないすべてのＫＷがＢＡＲＲＩＥＲの前に移されるようＫＷを並べ替えることで、コンフィギュレーション速度を高めることができる。同様に、ＣＨＥＣＫフラグのセットされたすべてのＫＷをＢＡＲＲＩＥＲの前にずらす必要がある。ＰＡＥが１つのＫＷだけによりコンフィギュレーションされる場合、ＫＷを２つの語に分割する必要があり、その際、ＣＨＥＣＫフラグはＢＡＲＲＩＥＲの前にセットされ、ＧＯフラグはＢＡＲＲＩＥＲの後にセットされる。
【０１３７】
ＢＡＲＲＩＥＲのところでは、すべてのＣＨＥＣＫがＡＣＫによって確認応答されたか否かは既知である。拒否（ＲＥＪ）はセットされたＣＨＥＣＫフラグとともにしか現れないので、ＢＡＲＲＩＥＲの後ろにあるすべてのＫＷは基本的に適正な順序で実行される。ＢＡＲＲＩＥＲの後ろのＫＷは厳密にただ１回しか実行されず、個々のＰＡＥのスタートは規定どおりに進行する。
【０１３８】
５．３．３
ガーベジコレクタ
５．３による方法について、ガーベジコレクタ（ＧＣ）の２つの異なるインプリメンテーションが提供される：
ａ）アルゴリズムまたは簡単な状態機械としてインプリメントされたＧＣ。最初は２つのポインタがＦＩＬＭＯの開始アドレスを指している：第１のポインタ（読み出しポインタ ＲｅａｄＰｏｉｎｔｅｒ）はＧＣにより読み出すべき目下のＫＷを指し、第２のポインタ（ＷｒｉｔｅＰｏｉｎｔｅｒ）はＫＷを書き込むべきポジションを指す。読み出しポインタは線形にインクリメントされる。ＲＥＬＪＭＰが「０」ではないＫＷ各々は書き込みポインタの指すアドレスに書き込まれる。ＲＥＬＪＭＰは「１」にセットされ、書き込みポインタはインクリメントされる。
【０１３９】
ｂ）ＦＩＬＭＯの読み出しポインタに書き込みポインタを加えることで、ＧＣはＦＩＬＭＯと一体化される。書き込みポインタはＦＩＬＭＯプロセス開始にあたり最初のエントリを指す。ＰＡＥのコンフィギュレーションにあたりＲＥＪにより拒否された各ＫＷは、書き込みポインタの指すメモリロケーションに書き込まれる。その後、書き込みポインタはインクリメントされる。この場合、ＦＩＦＯに似た付加的なメモリ（たとえばシフトレジスタ）が必要とされ、これはＫＷに属するＡＣＫ／ＲＥＪが再びＦＩＬＭＯに現れるまで、ＰＡＥに送られたＫＷを適正な順序でバッファリングする。ＡＣＫが到来した場合、ＫＷは無視される。（既述のように）ＲＥＪが到来した場合、書き込みポインタが指すメモリロケーションにＫＷが書き込まれる。この場合、ＦＩＬＭＯのメモリをマルチポートメモリとして構成するとよい。この方法の場合、ＦＩＬＭＯプロセス終了ごとに新たなメモリ構築が行われ、その際、コンフィギュレーションされなかったＫＷが線形にメモリ始端におかれる。付加的なＧＣの実行は不要である。また、ＲＥＬＪＭＰのインプリメントおよびそれに付随するロジックも完全になくすことができる。
【０１４０】
５．４　レイテンシを伴うＡＣＫ／ＲＥＪ確認応答のプリフェッチ
次に５．３の発展形態について説明する。この方法の欠点は、パイプラインの３倍の長さに対応するかなり高いレイテンシタイムをもつことにある。
【０１４１】
そのつどコンフィギュレーションすべきＰＡＥのアドレスおよび／またはフラグは、別個のバスシステムを介して本来のコンフィギュレーションの前に送信される。その際にタイミングは、ＰＡＥへのコンフィギュレーションワードの所望の本来の書き込み時点にそのＡＣＫ／ＲＥＪ情報が生じるように構成されている。ＡＣＫによって確認応答されていれば、ＫＯＮＦＩＧＵＲＡＴＩＯＮは実行される。拒否（ＲＥＪ）の場合、ＫＷはＰＡＥへ送られない（ＡＣＫ／ＲＥＪ−ＰＲＥＦＥＴＣＨ）。ＦＩＬＭＯプロトコルによって、殊にＬＯＣＫによって、ＡＣＫ／ＲＥＪ−ＰＲＥＦＥＴＣＨとＫＯＮＦＩＧＵＲＡＴＩＯＮとの間でＰＡＥの許可されないステータス変更が生じないようになる。
【０１４２】
５．４．１　ＦＩＬＭＯの構築
ＦＩＬＭＯは以下のように機能する：ＫＷは適正な順序で、（ｉ）ＣＴのメモリからまたは（ｉｉ）ＦＩＬＭＯメモリから受け取られる。読み出されたＫＷのＰＡＥアドレスは第１のバスシステムを介してパイプライン化されてＰＡＥへ送られる。完全なＫＷは（たとえばシフトレジスタとしても構成可能な）ＦＩＦＯに似たメモリに一定の遅延時間で書き込まれる。
【０１４３】
そのつどアドレッシングされたＰＡＥは、そのステータスに依存してＡＣＫまたはＲＥＪの送信により確認応答する。ＦＩＦＯの深さは、ＰＡＥへのＰＡＥアドレスの送信とＰＡＥの確認応答の到来との間で経過するクロックの個数に対応する。ＰＡＥへのアドレス送信からＰＡＥの確認応答到来までのサイクルをプリフェッチ Ｐｒｅｆｅｔｃｈと称する。
【０１４４】
ＦＩＦＯに似たメモリ（これはここではＦＩＬＭＯと同じではない）における所定の遅延によって、ＰＡＥの確認応答はＰＡＥに属するＫＷもＦＩＦＯの出力側に生じる時点に正確にＣＴに到来する。ＡＣＫが到来するとＫＷがＰＡＥに送信され、確認応答はもはや待ち望まれない。ＰＡＥの状態はその間、許可されずに変更されることはなく、受け入れは保証される。ＲＥＪが到来するとＫＷはＰＡＥに送信されるのではなく、ＦＩＬＭＯメモリに書き戻される。そのために付加的なポインタが設けられており、これはＦＩＬＭＯメモリの線形の読み出しを開始する際には第１のアドレスを指す。値が書き戻されるたびにポインタがインクリメントされる。これにより拒否されたＫＷは自動的に線形にパックされ、これは一体化されたガーベジコレクタの実行に対応する（５．３も参照）。このインプリメンテーションは殊に有利であり、それ自体保護能力があるとみなされる。
【０１４５】
５．４．２　レジスタパイプラインを介した送信および確認応答
ここで述べる方法は、通知の１つの送信側と複数の可能な受信側との間に種々の個数のレジスタが接続されているときに、送られた通知と受け取られた応答との間の画一的なクロック遅延を保証するために用いられる。これに関する一例は、受信側が送信側から様々な距離で隔たっている場合である。この場合、送られた通知は近くに位置する受信側の方がもっと遠くに位置する受信側よりも早く到達する可能性がある。すべての応答について同じ伝播遅延時間を得る目的で、受信側の応答はダイレクトに返送されるのではなく、送信側から最も遠い受信側までさらに返送される。その際、最初のメッセージと同時に送り出されたものも到着しているであろう時点に応答が到着するよう、その経路には正確に同じ個数のレジスタが設けられていなければならない。ここから返送は、応答がその受信側自体において発せられたのと同じようにして行われる。応答が実際に最も遠い受信側まで送られるのか否か、あるいは同じ時間特性をもつ別のレジスタチェーンへ送られるのかは、この場合には重要ではない。
【０１４６】
６．　階層型ＣＴプロトコル
ＰＡＣＴ１０に記載されているように、ＶＰＵモジュールはスケーリング可能であり、それによれば複数のＣＴから成るツリーが構築され、その葉にはＰＡの最下位のＣＴ（Ｌｏｗ−Ｌｅｖｅｌ−ＣＴ）が配置される。対応づけられたＰＡをもつＣＴをＰＡＣと称する。一般に、任意のデータまたは命令を各ＣＴ間で交換することができる。この目的で、さしあたり技術的に有用ないかなるプロトコルでも利用することができる。
【０１４７】
とはいえ通信（ＣＴ間通信）は、ＣＴツリー（ＣＴＴＲＥＥ）内における様々なＬｏｗ−Ｌｅｖｅｌ−ＣＴにおいてＳｕｂＣｏｎｆのスタートを生じさせるので、デッドロックに陥らないようにするためにはＦＩＬＭＯ方式の要求を保証すべきである。
【０１４８】
一般的には２つの事例を区別することができる：
１．Ｌｏｗ−Ｌｅｖｅｌ−ＣＴの場合、もっぱらローカルにＬｏｗ−Ｌｅｖｅｌ−ＣＴおよびそれに対応づけられたＰＡにおいて実行されるＳｕｂＣｏｎｆのスタートが要求される。この事例はＣＴＴＲＥＥ内でいつでも処理可能であり、他のＬｏｗ−Ｌｅｖｅｌ−ＣＴとの特別な同期合わせを必要としない。
【０１４９】
２．Ｌｏｗ−Ｌｅｖｅｌ−ＣＴの場合、複数のＬｏｗ−Ｌｅｖｅｌ−ＣＴとそれに対応づけられたＰＡにおいて実行されるコンフィギュレーションのスタートが要求される。この事例では、関与するすべてのＣＴにおけるコンフィギュレーションの呼び出しがアトミックにつまり分離不可能に進行するよう留意する必要がある。最も簡単なやり方によれば、特定のＳｕｂＣｏｎｆの呼び出しおよびスタート中、他のものはスタートされないことを保証すれば十分である。この種のプロトコルはＰＡＣＴ１０から公知であるが、さらに最適化されたプロトコルが望ましい。
【０１５０】
ＰＡＣＴ１０のプロトコルは、高い周波数においてパイプライン化された伝送が必要とされるときにはすぐに効率が悪くなる。その理由は、バス通信に大きいレイテンシが生じるからである。以下のセクションでは１つの方法について言及する。
【０１５１】
ＣＴ間通信の基本的な役割は、ＰＡＣに波及するＳｕｂＣｏｎｆ（Ｅｎｈａｎｃｅｄ ＳｕｂＣｏｎｆｉｇｕｒａｔｉｏｎ＝ＥｎｈＳｕｂＣｏｎｆ）がデッドロックに陥らずに開始されるのを保証することである。ＥｎｈＳｕｂＣｏｎｆは、１つのＰＡＣにおいて局所的に実行されるだけでなく複数のＰＡＣに分散して実行されるＳｕｂＣｏｎｆである。ＥｎｈＳｕｂＣｏｎｆには、関与するＬｏｗ−Ｌｅｖｅｌ−ＣＴを介してそれぞれ開始される複数のＳｕｂＣｏｎｆが含まれている。ここでＰＡＣとは、少なくとも１つのＣＴを備えたＰＡＥのグループのことである。デッドロックに陥らないようにするためには以下の条件が必要である：
複数のＥｎｈＳｕｂＣｏｎｆを複数の同一のＰＡＣにおいてデッドロックなく実行できるようにする目的で、たとえばＣＴＴＲＥＥ内で適切なメカニズムによりそれらの実行優先順位が決定される。この場合、異なる複数のＥｎｈＳｕｂＣｏｎｆから複数の同じＰＡＣにおいて実行されるＳｕｂＣｏｎｆが始められるならば、個々のＰＡＣにおいてそれらのＳｕｂＣｏｎｆのスタートがＥｎｈＳｕｂＣｏｎｆの優先順位に応じた時間順序で行われる。
【０１５２】
例：２つのＥｎｈＳｕｂＣｏｎｆをスタートさせることにする。つまりＰＡＣ１，３，４，６におけるＥｎｈＳｕｂＣｏｎｆ−ＡとＰＡＣ３，４，５，６におけるＥｎｈＳｕｂＣｏｎｆ−Ｂをスタートさせることにする。この場合、ＰＡＣ３，４，６において必ずＥｎｈＳｕｂＣｏｎｆ−ＡがもっぱらＥｎｈＳｕｂＣｏｎｆ−Ｂの前または後でコンフィギュレーションされるよう保証されなければならない。たとえばＰＡＣ３および４においてＥｎｈＳｕｂＣｏｎｆ−ＡをＥｎｈＳｕｂＣｏｎｆ−Ｂの前におよびＰＡＣ６においてＥｎｈＳｕｂＣｏｎｆ−ＡをＥｎｈＳｕｂＣｏｎｆ−Ｂの後にコンフィギュレーションしようとすると、デッドロックが生じてしまう。なぜならばＥｎｈＳｕｂＣｏｎｆ−ＡをＰＡＣ６において、ＥｎｈＳｕｂＣｏｎｆ−ＢをＰＡＣ３および４において開始することができないからである。このような事例を以下では「クロス」または「クロスした」と称する。
【０１５３】
ＥｎｈＳｕｂＣｏｎｆがクロスするのを十分に回避しなければならない。２つのＥｎｈＳｕｂＣｏｎｆ間でアルゴリズム的な依存性を存在させようとする場合、つまりアルゴリズムに基づきあるＥｎｈＳｕｂＣｏｎｆを他のもののあとに開始させる必要がある場合、これは通常はあるＥｎｈＳｕｂＣｏｎｆにより他のものをスタートさせることによって解決される。
【０１５４】
本発明によるプロトコルに関する実施例：
ＣＴ間通信において２つのデータ形式を区別する：
ａ）コンフィギュレーション情報を含むＳｕｂＣｏｎｆ
ｂ）開始すべきＩＤから成るリストを含むＩＤチェーン ＩＤＣｈａｉｎ、これにはＩＤにより参照されるＳｕｂＣｏｎｆをどのＰＡＣにおいて開始させるべきかに関する情報も付随する。ＩＤチェーンにより、ＥｎｈＳｕｂＣｏｎｆは実行すべき個々のＳｕｂＣｏｎｆに変換される：ＩＤＥｎｈＳｕｂＣｏｎｆ →ＩＤチェーン｛（ＰＡＣ１ ：ＩＤＳｕｂＣｏｎｆ１），（ＰＡＣ２ ：ＩＤＳｕｂＣｏｎｆ２），（ＰＡＣ３ ：ＩＤＳｕｂＣｏｎｆ３），．．．（ＰＡＣｎ ：ＩＤＳｕｂＣｏｎｆｎ）｝
ＣＴ間通信において以下の伝送モードを区別する：
ＲＥＱＵＥＳＴ：ＥｎｈＳｕｂＣｏｎｆの開始はＬｏｗ−Ｌｅｖｅｌ−ＣＴからその上位のＣＴに要求されるかまたは、上位のＣＴからさらにその上位のＣＴに要求される。これはＩＤチェーンに記憶されていたＣＴに到達するまで、あるいはＩＤチェーンが必ずメモリ内にもっているルートＣＴに到達するまで繰り返される。
【０１５５】
ＧＲＡＮＴ：上位のＣＴはそれよりも下に位置するＣＴにＳｕｂＣｏｎｆの開始を依頼する。この場合、ＩＤチェーンに従い単一のＳｕｂＣｏｎｆまたは複数のＳｕｂＣｏｎｆを対象とする。
【０１５６】
ＧＥＴ：ＣＴは対応するＩＤの送信によりその上位のＣＴにＳｕｂＣｏｎｆを要求する。上位のＣＴがＳｕｂＣｏｎｆを記憶（キャッシュ）していたならば、この上位のＣＴは下に位置するＣＴへそれを送り、さもなければこの上位のＣＴはさらに上位のＣＴにＳｕｂＣｏｎｆを要求し、それを得てから下に位置するＣＴへ送る。遅くともルートＣＴはＳｕｂＣｏｎｆを記憶している。
【０１５７】
ＤＯＷＮＬＯＡＤ：下に位置するＣＴへのＳｕｂＣｏｎｆのロード。
【０１５８】
ＲＥＱＵＥＳＴすなわちリクエストは、ルートＣＴつまりＣＴＴＲＥＥの根（最上位ＣＴ）に達するまで、またはＩＤチェーンを記憶しているＣＴＴＲＥＥのＣＴに達するまで、ＣＴＴＲＥＥを上に向かって進む。ＩＤチェーンは、そのリスト内に含まれているすべてのＣＴを葉または枝として所有するＣＴによってのみ記憶することができる。ルートＣＴは自身のメモリ（ＣＴＲ、ＰＡＣＴ１０参照）において原則的にＩＤチェーンへのアクセス権をもっている。その後、ＩＤチェーン内にリストアップされているすべてのＣＴへ許可を表すＧＲＡＮＴが送られる。ＧＲＡＮＴの送信はアトミックに行われ、つまり１つのＣＴのすべての分岐が同時にまたはシーケンシャルにＧＲＡＮＴすなわち許可を受け取るが、これは該当するＣＴと複数のＰＡＣにおける種々のＥｎｈＳｕｂＣｏｎｆのＳｕｂＣｏｎｆの開始順序に作用を及ぼす他の何らかのＣＴとの間における別のアクティビティによる中断が生じることなく行われる。
【０１５９】
ここで重要であるのは、ＧＲＡＮＴの到来するＬｏｗ−Ｌｅｖｅｌ−ＣＴは中断されることなくただちに対応するＳｕｂＣｏｎｆをＰＡにコンフィギュレーションし、ＦＩＬＭＯに書き込むかまたはコンフィギュレーション順序を示すリストに書き込むことであり、すなわちＳｕｂＣｏｎｆをいつＦＩＬＭＯに書き込まなければならないのかまたはＰＡにコンフィギュレーションしなければならないのかを示すリストに書き込むことである。この順序はデッドロック回避のために重要である。ＳｕｂＣｏｎｆがまだＬｏｗ−Ｌｅｖｅｌ−ＣＴに記憶されていないならば、Ｌｏｗ−Ｌｅｖｅｌ−ＣＴはその上位のＣＴにＧＥＴすなわちゲットないしは取得を用いてＳｕｂＣｏｎｆを要求する必要がある。本発明による方法を満たす目的で、アルゴリズムにより許可されるかまたは要求されるかぎり、ＧＥＴとＳｕｂＣｏｎｆの到来（ＤＯＷＮＬＯＡＤ）との間に、ローカルなＳｕｂＣｏｎｆ（すなわちＥｎｈＳｕｂＣｏｎｆにより呼び出されるのではなくローカルなＰＡだけに該当するＳｕｂＣｏｎｆ）をコンフィギュレーションすることができ、あるいはＦＩＬＭＯにロードすることができる。遅れて到来するＧＲＡＮＴにより開始される別のＥｎｈＳｕｂＣｏｎｆのＳｕｂＣｏｎｆは、もっぱらＤＯＷＮＬＯＡＤの到来後およびコンフィギュレーション後、もしくはＦＩＬＭＯへのロード後に開始させることができる。
【０１６０】
ＳｕｂＣｏｎｆ構築の例は特許出願ＰＡＣＴ５およびＰＡＣＴ１０から公知である。本発明による方法の基本的な相違点は、ＩＤチェーンによるＳｕｂＣｏｎｆ呼び出しを別個に処理することである。この場合、ＩＤチェーンは以下の特性をもつＳｕｂＣｏｎｆの特別な形態である：
パフォーマンスの理由で有用であるのは、個々のＳｕｂＣｏｎｆをＣＴＴＲＥＥ内に記憶しすること、いわばキャッシュすることである。この場合、必要に応じてＳｕｂＣｏｎｆを完全にロードしなおす必要はなく、対応するＳｕｂＣｏｎｆをキャッシュしたＣＴからダイレクトに下位のＣＴへＳｕｂＣｏｎｆが送られる。ＩＤチェーンにおいて重要であるのは、１つの中央のＣＴからすべての下位のＣＴへ本発明によるプロトコルに従いロードされることである。この目的で最も効率的であるのは、ＣＴＴＲＥＥの最も下に位置しかつＩＤチェーン内で指定されているすべてのＰＡＣを葉として所有するＣＴがＩＤチェーンをキャッシュすることである。もっと下に位置するＣＴはキャッシュをしてはならない。その理由は、それらのＣＴはＩＤチェーンのすべてのＰＡＣに関してもはや中央には位置していないからである。また、もっと上に位置するＣＴであると、いっそう長い通信経路が必要となってしまうことから効率性が失われてしまう。要求されたＥｎｈＳｕｂＣｏｎｆのために完全なＩＤチェーンを備えたＣＴにリクエスト ＲＥＱＵＥＳＴが達すると、そのＣＴはさらに下に位置する関与するＣＴへＧＲＡＮＴを発し、その際、ＩＤチェーンからの情報は、個々の分岐で必要とされる少なくとも一部分がそれぞれ伝送されるように分割（スプリット）される。このスプリットにあたりクロスを避けるために、次のＣＴ段もＥｎｈＳｕｂＣｏｎｆの一部分のすべてのＧＲＡＮＴを発し、しかもそれが他のＥｎｈＳｕｂＣｏｎｆのＧＲＡＮＴにより中断されることなく行われるようにする必要がある。これを実現する１つの可能性は、ＩＤチェーンの該当部分をアトミックに伝送することである。なお、ＩＤチェーンのキャッシングを制御するために有用であるのは伝送中、分割されたＩＤチェーンをたとえば「ＳＰＬＩＴ」フラグなどによって表すことである。
【０１６１】
ＩＤチェーンは、ＣＴＴＲＥＥの階層においてＩＤチェーン内で参照されるすべてのＰＡＣについてもはや中央には位置していないＣＴにロードされると、ただちに分割される。この場合、ＩＤチェーンは階層内の単一のＣＴによってはもはや管理されずキャッシュされない。複数のＣＴによってそれぞれ、個々のＣＴの葉であるＰＡＣをそれぞれ含むＩＤチェーンの一部分が処理される。ＲＥＱＵＥＳＴは、該当するすべてのＰＡＣを管理するＣＴまで必ず転送しなければならない。つまりＲＥＱＵＥＳＴをＧＲＡＮＴに変換可能であって階層的に最初であり（ＰＡＣからみて）最も効率的でもあるＣＴは、分割されていない完全なＩＤチェーンを所有する葉から出発して昇順に第１のＣＴである。ＰＡＣからＩＤへの割り当てをもつリストの管理について詳しい説明は不要である。このリストはＣＴ内で実行されるプログラムによって処理してもよいし、あるいは下位のＣＴを制御するための一連のアセンブラ命令によって構成してもよい。完全なＩＤチェーンは以下のように構築される：
ＩＤＥｎｈＳｕｂＣｏｎｆ →ＩＤチェーン｛ＳＰＬＩＴ，（ＰＡＣ１ ：ＩＤＳｕｂＣｏｎｆ１），（ＰＡＣ２ ：ＩＤＳｕｂＣｏｎｆ２），（ＰＡＣ３ ：ＩＤＳｕｂＣｏｎｆ３），．．．（ＰＡＣｎ：ＩＤＳｕｂＣｏｎｆｎ）｝
６．１　ＳｕｂＣｏｎｆのプリキャッシュ
ＣＴＴＲＥＥ内でＳｕｂＣｏｎｆは特定の条件に従いプリロードされ、つまり実際に必要とされるよりも前にキャッシュされる。この方法によってＣＴＴＲＥＥ内におけるパフォーマンスが格段によくなる。
【０１６２】
実施例：
多数のプリキャッシュ要求が提供されているが、最も頻度の高い２つは以下のとおりである：
ａ）Ｌｏｗ−Ｌｅｖｅｌ−ＣＴにおいて処理される目下のＳｕｂＣｏｎｆ内で、別のＳｕｂＣｏｎｆのためのロード要求がプログラミングされる。
【０１６３】
ｂ）ＰＡ内のデータ処理中に、どのＳｕｂＣｏｎｆをプリロードすべきかが決定される。ＰＡに割り当てられたＣＴは、ＣＴ内で適切にＳｕｂＣｏｎｆのＩＤに変換されるトリガによって、ＳｕｂＣｏｎｆをプリロードするよう要求される。また、ＳｕｂＣｏｎｆのＩＤをＰＡ内で計算したり、あるいは事前にそこにおいてコンフィギュレーションしておくことも可能である。この場合、対応づけられたＣＴへの通知にはＩＤがそのまま含まれている。
【０１６４】
ロードすべきＳｕｂＣｏｎｆはキャッシュされるだけであり開始されない。開始は、事前のキャッシュなしでＳｕｂＣｏｎｆが開始されたであろう時点ではじめて行われる。相違点は、開始要求時点でＳｕｂＣｏｎｆがすでにＬｏｗ−Ｌｅｖｅｌ−ＣＴまたは中位のＣＴに記憶されており、したがってただちにコンフィギュレーションされるかまたは非常に迅速にＬｏｗ−Ｌｅｖｅｌ−ＣＴにロードされ、そのあとで開始されることである。ＣＴＴＲＥＥ全体の時間のかかる実行は省かれる。
【０１６５】
ＳｕｂＣｏｎｆを生成するコンパイラにより、どのＳｕｂＣｏｎｆをそのつど次のものとしてキャッシュすべきかを判定することができる。プログラム実行グラフにおいて、どのＳｕｂＣｏｎｆを次のものとして実行できるかが示されている。これらはそのつどキャッシュされる。プログラム実行によりランタイムに、キャッシュされたＳｕｂＣｏｎｆのいずれを実際にスタートさせるかが判定される。ＣＴのメモリ内に他のＳｕｂＣｏｎｆのためのスペースを得る目的で、特定のＳｕｂＣｏｎｆをプリロード（プリキャッシュ ｐｒｅｃａｃｈｅ）するメカニズムに応じて、キャッシュされたＳｕｂＣｏｎｆを取り除くメカニズムがインプリメントされる。プリロードと同様、特定のＳｕｂＣｏｎｆの消去は、プログラム実行グラフに基づきコンパイラにより予測可能である。ＣＴのメモリを適切に管理する目的で付加的にＣＴ内に、ＳｕｂＣｏｎｆ（たとえば最後にコンフィギュレーションされたＳｕｂＣｏｎｆ、最初にコンフィギュレーションされたＳｕｂＣｏｎｆ、最も稀にしかコンフィギュレーションされないＳｕｂＣｏｎｆ、ＰＡＣＴ１０参照）を消去するための通常のメカニズムがインプリメントされている。ここで重要なのは、明示的にプリロードされたＳｕｂＣｏｎｆを消去可能なだけでなく、ＣＴメモリ内のいかなるＳｕｂＣｏｎｆも消去できることである。ガーベジコレクタによって特定のＳｕｂＣｏｎｆがすでに除去されてしまっているならば、明示的な消去はその効力を失い、無視される。
【０１６６】
明示的な消去を、任意のＳｕｂＣｏｎｆによって開始させることのできる命令によって生じさせることができる。これにはツリー内の任意のＣＴ、固有のＣＴ、あるいはそれどころか同じＳｕｂＣｏｎｆの明示的な消去（すなわち命令の存在する固有のＳｕｂＣｏｎｆの消去、ただし適正な終了が保証されなければならない）も含まれている。明示的な消去の別の可能性は、所定の状態に基づきＰＡ内でトリガを生成することであり、このトリガはＣＴへ転送され、明示的消去のための要求として評価される。
【０１６７】
６．２　各ＰＡＥ間の依存性
１つのＥｎｈＳｕｂＣｏｎｆに属する種々のＰＡＣのＰＡＥがコンフィギュレーションされる順序が重要ではないならば、この時間的依存性の遵守を保証するために別の方法が提案される。複数のＰＡＣにおいて定義どおりにやはり複数のＣＴが存在しているならば、各ＰＡＣにおいて次のものの前にコンフィギュレーションされていなければならないすべてのＰＡＥがこれまですでにそのＧＯを同じコンフィギュレーションから受け取っているか否かについて情報を交換する目的で、それらは互いに了解し合っている。時間的依存性を解消し許可されないＧＯの送信を回避する１つの可能性は、各ＣＴ間でコンフィギュレーションのための排他的権限を交換し、適正な順序がそれらのコンフィギュレーションの順番とコンフィギュレーション権限の受け渡しによって保証されるようＫＷを並べ替えることである。依存性の強さによっては、両方のＣＴが割り当てられたそれらのＰＡを並行して同期ポイントまでコンフィギュレーションし、ついで互いに待ち、その後、次の同期ポイントまたは（存在しなければ）ＥｎｈＳｕｂＣｏｎｆの終了まで並行してさらにコンフィギュレーションするようにしても十分である。
【０１６８】
７．ＳｕｂＣｏｎｆマクロ
できりかぎり多くのＳｕｂＣｏｎｆをキャッシュ可能であれば、ＳｕｂＣｏｎｆのキャッシュは格別効率的である。殊に高級言語コンパイラを考慮すると、キャッシングの効率的な使用は有用である。その理由はコンパイラはアセンブラレベル（ＶＰＵテクノロジーではＳｕｂＣｏｎｆレベル）において、頻繁に反復されるルーチンを生成するからである。
【０１６９】
ＳｕｂＣｏｎｆをできるかぎり頻繁に再利用するために、以下の特性をもつＳｕｂＣｏｎｆマクロ（ＳｕｂＣｏｎｆＭ）を採用すべきである。すなわち、
・絶対的なＰＡＥアドレスを指示しない。むしろＳｕｂＣｏｎｆは相対アドレスだけしか用いない事前にレイアウトされたマクロである。
【０１７０】
・アプリケーションに依存する定数はパラメータとして引き渡される。
【０１７１】
ＳｕｂＣｏｎｆがＰＡにロードされる時点ではじめて、絶対アドレスが計算される。パラメータはその実際の値と置き換えられる。このためオリジナルのＳｕｂＣｏｎｆの変形されたコピーが次のように作成される。すなわち、（ｉ）このコピーがＣＴのメモリに格納されるようにする（一体化されたＦＩＬＭＯ）、または（ｉｉ）ただちにＰＡに書き込まれ、拒否されたＫＷ（ＲＥＪ）だけがＦＩＬＭＯに書き込まれるようにする（別個のＦＩＬＭＯ）。（ｉｉ）の場合には殊に、パフォーマンスの理由からハードウェアによるアドレス加算器の構成が提供され、これはＰＡ／ＦＩＬＭＯに対するＣＴのインタフェースポートのところにじかに配置される。同様にパラメータ変換のハードウェアインプリメンテーションも考えられ、これはたとえばコンフィギュレーション前にロードされるルックアップテーブルにより実現される。
【０１７２】
８．キャッシュ統計の書き戻し
ＷＯ９９／４４１２０（ＰＡＣＴ１０）によればアプリケーションに依存するキャッシュ統計とキャッシュ制御が公知である。この方法によれば、付加的にデータに依存するキャッシュ特性の最適化が提供される。それというのもデータに依存するプログラム特性はそのままキャッシュ最適化に表れるからである。
【０１７３】
公知の方法の欠点は、キャッシュ特性がランタイム中にはじめて最適化されることである。アプリケーションの再スタートにあたり統計は失われてしまう。さらにクリティカルになるのは、ＳｕｂＣｏｎｆがキャッシュから取り除かれたときにもその統計が失われてしまうことであり、同じアプリケーションの処理自体において新たに呼び出されたときにもはや利用できなくなることである。
【０１７４】
本発明によれば、アプリケーション終了時またはＳｕｂＣｏｎｆがキャッシュから取り除かれたとき、キャッシュ統計が該当するＩＤとともにまずはじめに既知のＣＴ間通信を用いて、ルートＣＴが個々の統計を受け取るまで次のレベルのＣＴへ送られる。これはその統計を適切なメモリに記憶し、用途に応じて揮発性メモリまたは不揮発性メモリまたは大容量記憶装置に記憶する。このメモリへのアクセスは必要に応じてホストを介して行われる。その際にこの記憶は、ＳｕｂＣｏｎｆを新たにロードすると統計もいっしょにロードできるよう、統計が個々のＳｕｂＣｏｎｆに対応づけられるようにして行われる。ＳｕｂＣｏｎｆを新たにスタートすると、統計はいっしょにＬｏｗ−Ｌｅｖｅｌ−ＣＴへロードされる。
【０１７５】
コンパイラは中立的な空の統計を構築するか、または適切な方法に従いさしあたり適切であると思われる統計をすでに生成しておく。ついでコンパイラによりまえもって与えられた統計は、既述の方法に従いランタイムに最適化されて格納され、アプリケーションにおける以降の呼び出しにおいて最適化されたかたちで提供される。
【０１７６】
ＳｕｂＣｏｎｆが複数のアプリケーションによってまたは１つのアプリケーション内で種々のＬｏｗ−Ｌｅｖｅｌ−ＣＴによって利用される（または種々のルーチンから呼び出される）ならば、キャッシュ統計の導入は有用ではない。なぜならばその場合には、それぞれ異なる呼び出し特性および実行特性によってそれぞれ異なる統計が呼び出されるからである。したがって用途に応じて、統計を用いないかまたはＳｕｂＣｏｎｆＭを用いる。
【０１７７】
ＳｕｂＣｏｎｆＭを用いた場合、キャッシュ統計がパラメータとして受け渡されるように、パラメータの受け渡しが拡張される。ＳｕｂＣｏｎｆＭが終了すると、ＳｕｂＣｏｎｆＭを以前に呼び出したＳｕｂＣｏｎｆ（ＯＲＩＧＩＮ）にキャッシュ統計が書き戻される。ついでパラメータがＯＲＩＧＩＮのキャッシュ統計とともにＯＲＩＧＩＮ終了時に既述の方法に従って記憶され、以降の呼び出しにおいて相応にロードされ、パラメータとして再びＳｕｂＣｏｎｆＭに引き渡される。アプリケーションに関連するキャッシュ統計の導入ならびに記憶は基本的にマイクロプロセッサ、ＤＳＰ、ＦＰＧＡおよび類似のモジュールのためにも適している。
【０１７８】
９．コンフィギュレーションシステムの構築
ＰＡＣＴ０７には、アドレッシングされパイプライン化されるように構築されているデータバスシステムについて記載されている。このバスシステムは一般に、コンフィギュレーションデータの伝送のためにも適している。データおよびコンフィギュレーションを同じバスシステムを介して伝送する目的で、伝送されるデータの形式を示すステータス信号が採用される。この場合、バスシステムは、ＣＴが事前にそのＣＴよってアドレッシングされたＰＡＥのコンフィギュレーションレジスタおよびデータレジスタをオプションで読み戻すことができるように構成される。このバスシステムを介して、ＰＡＣＴ０７の意味でグローバルなデータもＫＷも伝送される。ＣＴは適切なバスノードとして動作する。ステータス信号は伝送モードを表す。たとえば信号Ｓ０とＳ１を用いた以下の構成が可能である：
【０１７９】
【表７】
2004506261.tif 000009
【０１８０】
ＦＩＬＭＯプロトコルに従いＣＴに拒否を通報するために、ＰＡＣＴ０７によるバスプロトコル（ＡＣＫ）に信号ＲＥＪが追加される。
【０１８１】
１０．個々のレジスタの統合
コンフィギュレーションデータの論理的な分離のため、独立したコンフィギュレーションレジスタが用いられる。論理的な分離は差分コンフィギュレーションのために殊に必要とされる。それというのも論理的に分離されたコンフィギュレーションデータはたいてい、差分コンフィギュレーション実行時には既知でないからである。これにより個別の多量のコンフィギュレーションレジスタが生じるが、個々のレジスタには比較的僅かな情報しか含まれていない。以下の例では、３ｂｉｔのコンフィギュレーション値ＫＷ−Ａ，Ｂ，Ｃ，Ｄが互いに無関係に書き込まれるかまたは変更される可能性がある。
【０１８２】
【表８】
2004506261.tif 000010
【０１８３】
このようなレジスタセットは非効率的であり、その理由はＣＴバスの帯域幅の一部分しか使われないからである。
【０１８４】
この場合、コンフィギュレーションレジスタの構造を格段に最適化することができ、それによればそれぞれ１つのコンフィギュレーション値に、目下のコンフィギュレーション伝送において値を上書きすべきか否かを示す１つのイネーブルが対応づけられる。上述の例におけるコンフィギュレーション値ＫＷ−Ａ，Ｂ，Ｃ，Ｄが１つのコンフィギュレーションレジスタにまとめられる。各値には１つのイネーブルが割り当てられる。たとえばＥＮ−ｘが論理値「０」であると、ＫＷ−ｘは目下の伝送では変更されず、ＥＮ−ｘが論理値「１」であると、ＫＷ−ｘは目下の伝送により上書きされる。
【０１８５】
【表９】
2004506261.tif 000011
【０１８６】
１１．ウェーブ・リコンフィギュレーション（ＷＲＣ）
ＰＡＣＴ１３によってリコンフィギュレーション方法（ウェーブ・リコンフィギュレーション Ｗａｖｅ−Ｒｅｃｏｎｆｉｇｕｒａｔｉｏｎ＝ＷＲＣ）が公知であり、これによればリコンフィギュレーションはダイレクトに時間的にデータストリームに同期されている（ＰＡＣＴ１３の図２４）。
【０１８７】
ウェーブ・リコンフィギュレーションの機能にとって重要であるのは、コンフィギュレーションされていないＰＡＥはデータとトリガを受け取りもしないし送りもしないことである。つまり未コンフィギュレーションのＰＡＥは完全に中立的に振る舞うことになる。これはＶＰＵテクノロジーにおいてトリガバスおよびデータバスのためにハンドシェーク信号（ＲＤＹ／ＡＣＫ）を使用することにより達成できる（ＰＡＣＴ０２参照）。この場合、コンフィギュレーションされていないＰＡＥは、
・ＲＤＹを発生せず、これによりデータまたはトリガは送信されない。
【０１８８】
・ＡＣＫを発生せず、これによりデータまたはトリガは受信されない。
【０１８９】
この機能はウェーブ・リコンフィギュレーションに役立つだけでなく、ＶＰＵテクノロジーのランタイムリコンフィギュレーションに対する実現可能な基礎を成すものでもある。
【０１９０】
次に、この方法の拡張について述べる：リコンフィギュレーションは実行中のデータ処理と同期合わせされる。ＰＡ内のデータ処理において判定可能であるのは、
ｉ．リコンフィギュレーションにあたりどの次のＳｕｂＣｏｎｆが必要とされるか、
ｉｉ．どの時点でＳｕｂＣｏｎｆをアクティブにしなければならないか、つまりどのデータパケット（ＣｈｇＰｋｔ）とともにＳｕｂＣｏｎｆを結合しなければならないか、
ということである。どのコンフィギュレーションがロードされるかの判定は条件によって下され、トリガ（ウェーブ・コンフィギュレーション・プリロード ＷａｖｅＣｏｎｆｉｇｕｒａｔｉｏｎＰｒｅｌｏａｄ＝ＷＣＰ）によって表される。この場合、データパケットとＳｕｂＣｏｎｆのＫＷとの結合はデータバスプロトコル（ＲＤＹ／ＡＣＫ）とＣＴバス（ＣＨＥＣＫ，ＡＣＫ／ＲＥＪ）プロトコルによって保証される。付加的な信号（ＷａｖｅＣｏｎｆｉｇｕｒａｔｉｏｎＴｒｉｇｇｅｒ＝ＷＣＴ）によって、どのデータパケット（ＣｈｇＰｋｔ）において再コンフィギュレーションされるべきか、および場合によってはどの新たなコンフィギュレーションを実行もしくはロードすべきかが表される。ＷＣＴは簡単な付加的なラインまたはＶＰＵテクノロジーのトリガシステムによって実現できる。複数のＷＣＴを同時にＰＡにおいて使用することができ、その際、各信号によって他の再コンフィギュレーションを制御することができる。
【０１９１】
１１．１　ウェーブ・リコンフィギュレーションの制御
アプリケーションに依存する２つのＷＲＣを区別することができる。すなわち、
Ａ１）１つのＳｕｂＣｏｎｆ内におけるウェーブ・リコンフィギュレーション
Ａ２）種々のＳｕｂＣｏｎｆにおけるウェーブ・リコンフィギュレーション
ハードウェア技術的には基礎を成す２つのインプリメンテーション形式を区別するのがよい：
Ｉ１）ＣＴにおけるインプリメンテーションおよびそのつど要求後の実行。
【０１９２】
Ｉ２）ＰＡＥにおける付加的なコンフィギュレーションレジスタ（ＷＲＣＲｅｇ）によるインプリメンテーション。ＷＲＣＲｅｇの実現可能な構成についてはあとで説明する。ＷＲＣは、
ａ）該当するＳｕｂＣｏｎｆの最初のコンフィギュレーションにあたりＣＴによってプリロードされる。
【０１９３】
ｂ）あるいは１つのＳｕｂＣｏｎｆ実行中、到来するＷＣＰに依存してＣＴによりプリリードされる。
【０１９４】
データ処理中、それぞれ有効なＷＲＣＲｅｇは１つまたは複数のＷＣＴによって選択される。次に、ＦＩＬＭＯ方式に対するウェーブ・リコンフィギュレーションの作用について述べる：
１１．１．１　Ａ１によるＷＲＣの実行
同一のＳｕｂＣｏｎｆ（Ａ１）内でリコンフィギュレーションはＷＲＣによっていつでも可能である。次にＳｕｂＣｏｎｆは通常どおりコンフィギュレーションされ、このことでＦＩＬＭＯ方式が保証される。ここで要求されるのは、ＷＲＣはプログラム実行中はもっぱら、すでにＳｕｂＣｏｎｆに割り当てられたリソースを用いることである。
【０１９５】
事例Ｉ１）
ＷＲＣは該当するＰＡＥの差分コンフィギュレーションによって実行される。ＷＣＰはＣＴへ導かれる。ＷＣＰに依存して、コンフィギュレーションされるＳｕｂＣｏｎｆ内のトークンにジャンプする：
【０１９６】
【外１】
2004506261.tif 000012
【０１９７】
ＣＴとＷＣＰとの間のインタフェース（ＴｒｇＩＯ）は ”ｓｅｔ ＴｒｉｇｇｅｒＰｏｒｔ” によってコンフィギュレーションされる。ＴｒｇＩＯはＣＴに対するＰＡＥのようにＦＩＬＭＯプロトコルに従って振る舞い、つまりＴｒｇＩＯは正確にＣＨＥＣＫ，ＤＩＦＦＥＲＥＮＴＩＡＬ，ＧＯ プロトコルに対応し、各トリガに対し個別にまたはグループで共通に
特定のトリガが
すでにコンフィギュレーションされているか（ＲＥＪ）
または
コンフィギュレーション準備状態にあるか（ＡＣＫ）
に従い、
ＡＣＫまたはＲＥＪによって応答する。ＰＡＣＴ１０の図８をこのプロトコルについて相応に拡張することができる。ＷＣＴが到来すると個々のＰＡＥは対応するコンフィギュレーションを開始する。
【０１９８】
事例Ｉ２）
すでに完全なＳｕｂＣｏｎｆが個々のＰＡＥにロードされているため、ＷＲＣＲｅｇがすでにコンフィギュレーション中に書き込まれＷＣＰが省略される、
または、
特定のＷＣＰに依存してＣＴにより決められたＷＲＣがＷＲＣ内で定義された種々のＷＲＣＲｅｇにロードされる。これが殊に必要とされるのは、ＳｕｂＣｏｎｆから出発して発生したＷＲＴにより異なる複数のＷＲＣに分岐するときであり、これは物理的なＷＲＣＲｅｇとして設けられている。
【０１９９】
ＰＡＥ内のトリガポート ＴｒｉｇｇｅｒＰｏｒｔがコンフィギュレーションされ、到来する特定のＷＲＴにより特定のＷＲＣＲｅｇが選択される：
【０２００】
【外２】
2004506261.tif 000013
【０２０１】
１１．１．２　Ａ２によるＷＲＣの実行
事例Ｉ１）
ＣＴによる種々のＳｕｂＣｏｎｆ間のＷＲＣの実行は、原則的にＡ１／Ｉ１に対応する。ここで重要なのは、トリガポートとＣＴ内部の実行がＦＩＬＭＯ方式に対応していることである。ＰＡＥによって拒否（ＲＥＪ）されたＫＷはＦＩＬＭＯに書き込まれる。基礎的なことについてはＰＡＣＴ１０によってすでに知られている。
【０２０２】
すべてのＷＣＰはＣＴにより実行され、これによりデッドロックのない（リ）コンフィギュレーションが選択されるようになる。同様に、ＷＣＴにより表されているリコンフィギュレーションの時点がＣＴへ導かれ、そのＣＴによってアトミックに処理される。すなわちリコンフィギュレーションにより該当するすべてのＰＡＥはＷＣＴによるリコンフィギュレーション要求を時間的に同時に受け取るかまたは少なくとも、別のリコンフィギュレーション要求により中断されることなく受け取る。このことによってやはりデッドロックに陥らないことが保証される。他の実施形態については本明細書においてすでに説明している。
【０２０３】
事例Ｉ２）
すでに完全なＳｕｂＣｏｎｆが個々のＰＡＥにロードされているので、ＷＲＣＲｅｇがすでにコンフィギュレーション中に書き込まれ、ＷＣＰが省略される、または、
特定のＷＣＰに依存してＣＴにより決められたＷＲＣはＷＲＣに定義されている種々のＷＲＣＲｅｇにロードされる。これが殊に必要とされるのは、ＳｕｂＣｏｎｆから出発して該当するＷＲＴにより異なる複数のＷＲＣに分岐されるときであり、これは物理的なＷＲＣＲｅｇとして設けられている。
【０２０４】
ここで避けなければならないのは、複数のＷＣＴがそれぞれ異なる時点にそれぞれ異なるＰＡＥに導かれることである。なぜならばこれによってデッドロックが生じてしまうからである。例：ＳｕｂＣｏｎｆ ＳＡのＷＣＴ１はクロックｔ１においてＰＡＥ ｐ１に達し、ＳｕｂＣｏｎｆ ＳＢのＷＣＴ２はこの時点にＰＡＥ ｐ２に達する。各ＰＡＥはこれに応じてコンフィギュレーションされる。時点ｔ２においてＷＣＴ１はｐ２に達し、ＷＣＴ２はｐ１に達する。ここでデッドロックが発生する。ここで言及しておくと、この例は原則的にＡ２−ＩＩにも適用することができ、そのためそこではＷＣＴはＣＴのトリガポートを介して導かれ、ＣＴによって処理される。
【０２０５】
デッドロックは次のようにしても回避される。すなわち、種々のＰＡＥ（ソース）によって生成されたＷＣＴが中央のインスタンス（ＡＲＢ）により、ある時点で正確に１つのＷＣＴが該当するＰＡＥに送られるよう優先順位が付けられる。優先順位づけのために様々な方法を適用することができ、例としてそのうちのいくつかを挙げておく：
ａ）従来技術によるアービタの利用、たとえばＰＡＣＴ１０によるラウンドロビンアービタが適している。この場合、ＷＣＴ発生の正確な時間順序は一般に失われる。
【０２０６】
ｂ）時間順序を遵守しようとするならば、たとえば以下の方法が提供される：
ｂ１）ＦＩＦＯはまずはじめ、到来するＷＣＴをそれらの順序に従い記憶する。同時に到来するＷＣＴはいっしょに記憶され、ある時点にＷＣＴが現れなければエントリは発生しない。ＦＩＦＯの後ろに接続されたアービタは、同時に複数のエントリが発生しているならばそれらのエントリのうちの１つを選び出す。
【０２０７】
ｂ２）ＰＡＣＴ１８によれば、対応づけられた時間情報（タイムスタンプ）を用いてイベントを時間に従いソートすることができる。タイムスタンプの評価により、ＷＣＴの時間的に適正な順序を保証することができる。
【０２０８】
ＡＲＢから該当するＰＡＥへＷＣＴを適切に転送することにより、優先順位のつけられたＷＣＴが適正な順序でＰＡＥに到来することが保証される。順序を保証する最も簡単なやり方は、ＡＲＢから個々のＰＡＥへ送出されるすべてのトリガが正確に同じ長さと同じ伝播時間をもつようにすることである。これは適切なプログラミングまたはルータにおける適切なレイアウトによって保証され、その際、ライン伝送が相応に保証されるようにし、レイテンシ補償のため適切な時点にレジスタが投入される。さらに適切な転送を保証するためにも、ＰＡＣＴ１８により公知の情報の時間的同期合わせ方法を用いることができる。
【０２０９】
ＷＣＰの明示的な優先順位づけは不要である。なぜならばＣＴへ導かれるＷＣＰはＦＩＬＭＯ方式によりＣＴ内ですでに説明したようにきちんと処理されるからである。時間順序の遵守を場合によってはたとえばＦＩＬＭＯ方式に従って行うこともできる（２．１ｅを参照）。
【０２１０】
１１．１．３　すべての事例に対する注釈
ウェーブ・リコンフィギュレーションのために付加的なＰＡＥのコンフィギュレーションレジスタはＦＩＬＭＯ方式に従って動作し、すなわちレジスタは書き込まれた状態およびインプリメントされた実行をサポートし、それに従ってプロトコル（たとえばＣＨＥＣＫ／ＡＣＫＲＥＪ）に応答する。
【０２１１】
１１．２　リコンフィギュレーションプロトコルおよびＷＲＣＲｅｇの構造
次に、３つの択一的なリコンフィギュレーションプロトコルとして、ウェーブ・リコンフィギュレーションの方法について詳しく説明する：
通常のＣＴプロトコル：ＣＴはリコンフィギュレーション要求到来後にはじめて各ＰＡＥを個別にリコンフィギュレーションする。この場合、ＣｈｇＰｋｔの到達した各ＰＡＥのためのＣＴはリコンフィギュレーション要求を受け取る。この方法は効率が悪い。その理由は、パイプライン化されたバスシステムのためには殊に通信の手間が非常にかかるからである。
【０２１２】
同期合わせされたパイプライン：このプロトコルはすでにかなり効率的である。パイプライン化されたＣＴバスはバッファとして用いられ、これによればＰＡＥに割り当てられたパイプラインレジスタはそのＰＡＥのＫＷを、そのＰＡＥがＫＷを受け入れることができるまで記憶する。これによりＣＴバスパイプライン（ＣＢＰ）はたしかにブロックはされるけれども、ウェーブ・リコンフィギュレーションのＫＷによってそれを完全に満たすことができる。
【０２１３】
ａ）ＣＢＰがデータパイプラインと同じ方向に進むならば、ＰＡＥがＫＷを受け入れた後、すぐあとに続くＰＡＥのＫＷがそのパイプラインレジスタに現れるまで、そのつどいくつかのクロックだけレイテンシが失われてしまう。
【０２１４】
ｂ）ＣＢＰがデータパイプラインに逆行するならば、すでに特定のＰＡＥのところに到来しているＫＷによってＣＢＰを完全に満たすことができる。このようにすれば、時間的な遅れを伴わずにウェーブ・リコンフィギュレーションが実現される。
【０２１５】
同期合わせされたシャドウレジスタ（最も効率的なプロトコル）：
ＣＴはＳｕｂＣｏｎｆ（ｉ）の選択後ただちにＣｈｇＰｋｔ（ｉｉ）の到来前に新たなＫＷをすべてのＰＡＥのシャドウレジスタに書き込む。シャドウレジスタは任意の形態でインプリメント可能である。たとえば以下の可能性が提供される：ａ）本来のコンフィギュレーションレジスタの前に接続されたレジスタ段、ｂ）マルチプレクサを介して選択される並列なレジスタセット、ｃ）本来のコンフィギュレーションレジスタの前におかれたＦＩＦＯ段。ＣｈｇＰｋｔ（ｉｉ）がＰＡＥに到来する時点にＰＡＥはシャドウレジスタを対応するコンフィギュレーションレジスタにコピーする。このコピーは最適化された事例では、いかなる動作クロックも失われてしまわないように行われる。ＣｈｇＰｋｔが到来したにもかかわらずシャドウレジスタが書き込まれていなければ（つまり空であれば）、データ処理はシャドウレジスタにＫＷが到来するまで停止される。必要に応じて、ＣｈｇＰｋｔによるリコンフィギュレーション要求が１つのパイプライン内でＰＡＥから次のＰＡＥへ転送される。
【０２１６】
１２．並列性 Ｐａｒａｌｌｅｌｉｔｙの形式およびシーケンシャルな処理
十分に高いリコンフィギュレーションパフォーマンスによって、アレイにおけるシーケンシャルな計算モデルを描くことができ、その際、Ｌｏｗ−Ｌｅｖｅｌ−ＣＴがほぼ慣用的なコードフェッチャを成すようにし、アレイはマイクロプログラミング可能なネットワーキングを用いたＶＬＩＷ−ＡＬＵとして動作する。さらにアレイにおける並列性のすべての形式を計算エレメントから描くことができる：
パイプライン：パイプラインは直列接続されたＰＡＥによって構築可能である。ＶＰＵによるプロトコルによってパイプラインの簡単な制御が可能となる。
【０２１７】
命令レベル　並列性：並列なデータ経路は並列接続されたＰＡＥによって構築可能である。ＶＰＵによるプロトコルおよび殊にトリガ信号によって簡単な制御が可能となる。
【０２１８】
ＳＭＰ，マルチタスクおよびマルチユーザ：コンフィギュレーション方法のデッドロックがないことにより、独立した複数のタスクを１つのＰＡにおいて自動的に並列に実行することができる。
【０２１９】
ＰＡＥが十分な個数あれば、慣用のマイクロプロセッサにおけるすべての基本部分もＰＡにコンフィギュレーションすることができる。この場合、タスクのシーケンシャルな処理をＣＴなしでも行うことができる。これはコンフィギュレーションされたプロセッサに部分的にたとえばＡＬＵにおいて他の機能を与えようとするとき、あるいはそれを完全に置き換えようとするときにはじめて、再びアクティブにする必要がある。
【０２２０】
１３．実施例および図面
図１〜図３にはＳｕｂＣｏｎｆの構造が例示されている。ＣＷ−ＰＡＥはアドレスＰＡＥをもつＰＡＥ内のＫＷの番号を表す（たとえば２−３はアドレス３をもつＰＡＥのための２番目のＫＷ）。さらにここにはフラグ（Ｃ＝Ｃｈｅｃｋ，Ｄ＝Ｄｆｆｅｒｅｎｔｉａｌ，Ｇ＝ＧＯ）が示されており、セットされているフラグには「＊」が付されている。
【０２２１】
図１にはＳｕｂＣｏｎｆの最も簡単な線形の構造が描かれており、これはたとえばＰＡＣＴ１０により一般的なものである。ＰＡＥは第１のコンフィギュレーション中テストされ（Ｃ）、その後、さらにコンフィギュレーションされ（Ｄ）、最後に開始される（Ｇ）（アドレス０のＰＡＥを参照）。テストおよび開始を同時に行うことも可能である（ＣＧ、アドレス１をもつＰＡＥを参照、０１０１）。
【０２２２】
図２には、バリア（０２０１）が挿入されるように再ソートされたＳｕｂＣｏｎｆが描かれている。バリアの前にすべてのＰＡＥがテストされなければならない。その後、バリアはすべてのＡＣＫまたはＲＥＪが到来するまで待機する。ＲＥＪが現れなければバリアは飛び越えられ、差分コンフィギュレーションが実行されて、ＰＡＥが開始される。ＲＥＪが現れるとバリアは飛び越えられず、その代わり、ＲＥＪがもはや現れなくなるまでＦＩＬＭＯプロセスが実行され、その後、バリアが飛び越えられる。バリアの前に各ＰＡＥがテストされ、そのあとではじめてＰＡＥを差分コンフィギュレーションしてスタートさせることができる。テストとスタートがもとから同一のサイクルにあったならば、そのときにはＫＷを分離する必要がある（０１０１→０２０２，０２０３）。
【０２２３】
図３の場合にはＳｕｂＣｏｎｆは次のように再ソートされる。すなわちこの場合、バリアが不要とされ、その代わりにチェックとＡＣＫ／ＲＥＪ到来との間にレイテンシが挿入される一方、他のチェックは実行されないよう、再ソートが行われる。この目的でＫＷはアトム（０３０１）にまとめられ、１つのアトムにおける最初のＫＷはチェックを実行し（０３０２）、その後、ブロックはレイテンシが満了するまで、差分ＫＷもしくは場合によってはＮＯＰ（０３０３）によって満たされる。差分ＫＷの個数はレイテンシに依存する。図示する際の都合上、ここでは一例として３クロックのレイテンシを選んだ。０３０４においてＡＣＫ／ＲＥＪが発生し、それに応じて、チェックを含めることのできる（必須ではない）次のＫＷによりコンフィギュレーションをさらに続けるのか、あるいはＲＥＪゆえに順序を維持するため中断するのかが判定される。
【０２２４】
ここで重要であるのは、ＰＡＥ Ｘのコンフィギュレーションにおいてまずはじめにチェックが実行され、その後、ＡＣＫ／ＲＥＪの到来を待ち、この期間中、すでにチェックされたＰＡＥをさらにコンフィギュレーションでき、あるいはＮＯＰを挿入しなければならないことである。そのあとではじめてＰＡＥ Ｘをさらにコンフィギュレーションすることができる（０３０６）。０３０７において、ＮＯＰをチェック後に挿入しなければならない。なぜならば差分コンフィギュレーションを使えないからである。０３０８には複数のブロック（ここでは３）を越えてコンフィギュレーションを分割する様子が示されており、この場合、チェックは省かれる（０３０９）。
【０２２５】
図４には、ＰＡＥの状態を実現するために考えられる状態機械が示されている。基本状態はＩＤＬＥ（０４０１）である。フラグＣＨＥＣＫのコンフィギュレーション（０４０５）により、状態機械は状態「割り当て済み」に移行する（０４０２）。フラグＬＡＳＴのコンフィギュレーション（０４０９，０４０８）によってＰＡＥが開始され、状態は「コンフィギュレーション済み」になる（０４０４）。ＬｏｃａｌＲｅｓｅｔ（０４０７）によりＰＡＥは「未コンフィギュレーション」になる（０４０３）。この実施例では、ＰＡＥはそのステータスの問い合わせ後にはじめてＬＯＣＫ／ＦＲＥＥ（０４０６）によりＩＤＬＥに戻る。ＬｏｃａｌＲｅｓｅｔおよびＬＡＳＴもＣＴからブロードキャストにより送ることができる（モジュールＩＤ参照）。
【０２２６】
図５〜図９には、セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションが示されている。ここでは、ＰＡに対するインタフェースとして用いられる重要なコンポーネントだけが描かれている。ＣＴに対するインタフェースは示されていない。それらは従来の技術（ＰＡＣＴ１０）に従い十分にインプリメント可能であり、必要に応じてごく僅かな修正しか必要としない。
【０２２７】
図５には、５．１によるＳＴＡＴＥＬＵＴを使用した場合のＰＡに対するＣＴインタフェースの構造が示されている。ＲＡＭおよび一体化されたＦＩＬＭＯ（０５０２）を備えたＣＴ０５０１は抽象化されて描かれており、ここではこれ以上詳しくは説明しない。それというのもＰＡＣＴ１０およびＰＡＣＴ０５による機能は従来技術によって十分に知られているからである。ＣＴはＰＡのステータス（０５０３）を信号ＬＯＣＫのセット（０５０４）によって問い合わせ、それによれば各ＰＡＥはそのステータスを最後のＬＯＣＫ以降に変えており、その変更をＳＴＡＴＥＬＵＴ（０５０５）に転送する（０５０６）。この転送は、ＳＴＡＴＥＬＵＴが各ＰＡＥにそれらのステータスを割り当てることができるように行われる。従来技術によればこの目的で複数の方法を使用することができ、たとえば各ＰＡＥはそのアドレスをステータスとともにＳＴＡＴＥＬＵＴへ送ることができ、ＳＴＡＴＥＬＵＴは各ＰＡＥごとにそのアドレスのところにそのステータスを記憶する。
【０２２８】
ＣＴはＫＷ（０５１０）をまずはじめにレジスタ（０５０７）に書き込む。これと同時に、ＳＴＡＴＥＬＵＴ（０５０５）において個々のＫＷに該当するＰＡＥのアドレス（＃）のところでルックアップが実行される。ＰＡＥのステータスが「未コンフィギュレーション」であればＣＴはＡＣＫ（０５０９）を受け取り、そうでなければＲＥＪを受け取る。ＫＷをＰＡに書き込むため簡単なプロトコルコンバータ（０５０８）によりＡＣＫはＲＤＹに変換され、ＰＡＥへの書き込みを阻止するためＲＥＪはｎｏｔＲＤＹに変換される。さらに付言しておくと、ＰＡへのおよびＰＡの中へのＬＯＣＫ，ＲＤＹおよびＫＷの転送はＰＡからのＰＡＥのステータスの応答同様パイプライン化され、つまりレジスタを通って進む。
【０２２９】
図６には５．２による方法が一例として示されている。技術的な手間は比較的僅かである。ＦＩＬＭＯ（０６０２）の統合されたＣＴ（０６０１）は、１つのアトムにおいてＰＡ（０６０３）へ送信される１番目のＫＷ（０６０４）に対してのみ確認応答（０６０５）（ＡＣＫ／ＲＥＪ）を待つよう変形されている。この確認応答は１つのアトムの最後のＫＷにおいて評価される。ＡＣＫであれば次のアトムによってコンフィギュレーションが続けられ、ＲＥＪであればＳｕｂＣｏｎｆのコンフィギュレーションが中止される。
【０２３０】
図７には５．３によるＦＩＬＭＯ（０７０１）の構造が示されている。このＦＩＬＭＯにはＲＥＬＪＭＰメモリ（０７０２）が割り当てられており、ＲＥＬＪＭＰ内のエントリは各々１つのＦＩＬＭＯエントリに割り当てられている。この場合、ＦＩＬＭＯはＰＡＣＴ１０による統合されたＦＩＬＭＯとして構成されているので、ＲＥＬＪＭＰはコンフィギュレーションすべきＫＷに対するチェーン形リストを成している。さらに殊にここで述べておくと、この事例ではＦＩＬＭＯにＰＡＣＴ１０によるＣＴ命令およびそれらのチェーンを含めることもできる。ＲＥＬＪＭＰにおけるチェーン形リストは以下のようにして生成される：読み取りポインタ（０７０３）は、目下コンフィギュレーションされるＫＷを指す。最後に拒否（ＲＥＪ）されたＫＷのアドレスが０７０４内に格納される。目下コンフィギュレーションされるＫＷ（０７０６）がＰＡ（０７０７）によって受け入れられると（ＡＣＫ，０７０８）、０７０２内で０７０３の指すアドレスのところに格納されている値が０７０３に加算される。これにより相対ジャンプが生じるようになる。これに対し目下コンフィギュレーションされるＫＷが拒否（ＲＥＪ，０７０８）されるとまずはじめに、０７０３と０７０４との差が減算器（０７０５）により計算されてＲＥＬＪＭＰに格納され、これは０７０４に格納されている最後に拒否されたＫＷのアドレスのところに記憶される。０７０４に０７０３の目下の値が記憶される。その後、０７０２において０７０３の指すアドレスに記憶されている値が０７０３に加算される。これにより相対ジャンプが生じるようになる。この制御は、既述のプロセスに従いインプリメントの行われる状態機械（０７０９）によって引き継がれる。０７０３か０７０４を選ぶことで、０７０９により演算に従いマルチプレクサ（０７１０）を介してＲＥＬＪＭＰに対するアドレスが決定される。０７０１と０７０２を効率的に同時にそれぞれ異なるようにアドレッシングできるようにする目的で有用であるのは、別個にアドレッシング可能な２つの別個のメモリが得られるよう、インプリメントの際に０７０２を物理的に０７０１から分離することである。０７１１は相対アドレッシングの機能をもつ。ＲＥＬＪＭＰ内の１つのエントリを指すアドレスがＲＥＬＪＭＰの内容に加算され、次のエントリのアドレスが得られる。
【０２３１】
図８には、変形されたガーベジコレクタを用いた５．３による方法の実現可能なインプリメンテーションが示されている。ＦＩＬＭＯ（０８０１）内のエントリは線形に管理され、これによりＲＥＬＪＭＰは不要となる。０８０１は別個のＦＩＬＭＯとしてインプリメントされている。ＰＡ（０８０２）に書き込まれるＫＷ（０８０３）が読み出しポインタ（０８０４）によりアドレッシングされる。すべてのＫＷはそれらのコンフィギュレーションの順序でＦＩＦＯまたはＦＩＦＯに似たメモリ（０８０５）に書き込まれ、このメモリはたとえばシフトレジスタの形態をとることもできる。このメモリは、確認応答（ＲＤＹ／ＡＣＫ，０８０６）の到来までにＰＡへのＫＷの送信のクロックがどれくらい経過するのかにきちんと合わせた深さである。
【０２３２】
・ＲＥＪが到来すると、このＲＥＪに対応づけられている拒否されたＫＷ（これはこの時点ではＦＩＦＯの出口に存在する）が０８０１に書き込まれる。このためＲＥＪはＦＩＬＭＯのための書き込み信号として用いられる（ＲＥＪ−＞ＷＲ）。書き込みアドレスは書き込みポインタ（０８０７）によって生成され、これは書き込みアクセス後にインクリメントされる。
【０２３３】
・ＡＣＫが到来したときには何も起こらず、このＡＣＫに割り当てられたコンフィギュレーションされるＫＷは無視され、０８０７は変えられないまま維持される。これによりＦＩＬＭＯ内の拒否されたＫＷから新たな線形のシーケンスが生じる。パフォーマンスの理由から、別個の書き込みポートと読み出しポートを備えたデュアルポート形ＲＡＭとして構成されたＦＩＬＭＯのインプリメンテーションが提案される。
【０２３４】
図９には５．４による方法のインプリメンテーションが示されている。この図からわかるようにこれは５．３による方法の変形実施形態である。読み出しポインタ（０９０９）により、ＰＡ（０９０１）に書き込むべきＫＷ（０９０２）がＦＩＬＭＯ（０９１０）においてアドレッシングされる。０９０２によりコンフィギュレーションすべきＰＡＥのアドレスとフラグ（０９０２ａ）がまずはじめに部分的にＰＡに送られる。コンフィギュレーションすべきＰＡＥのアドレスをもつＫＷがＦＩＦＯに似たメモリ（０９０３、０８０５に相応）に書き込まれる。０９０２ａはパイプライン化されてＰＡへ伝送される。アドレッシングされたＰＡＥにおいてアクセスが評価され、確認応答が行われる。確認応答（ＲＤＹ／ＡＣＫ）も同様にパイプライン化されて返送される（０９０４）。０９０３は、確認応答（ＲＤＹ／ＡＣＫ，０９０４）の到来までＰＡへの０９０２ａの送信のクロックがどれくらい経過するのかに正確に合わせて遅れる。
【０２３５】
・ＡＣＫにより確認応答されたならば、この確認応答に対応づけられており９０３の出口に存在する完全なＫＷ（０９０５）（アドレス＋データ）が、パイプライン化されてＰＡ（０９０６）に送られる。このための確認応答は待ち望まれない。なぜならばアドレッシングされたＰＡＥがこのＫＷを受け入れるのはすでにわかっているからである。
【０２３６】
・ＲＥＪであればＫＷはＦＩＬＭＯ（０９０７）に書き戻される。この目的で、０８０７に対応するシフトレジスタ（０９０８）が用いられる。その際にポインタがインクリメントされる。
【０２３７】
この場合、０９０４は簡単なプロトコルコンバータ（０９１１）により、（ｉ）ＡＣＫであればＰＡのための書き込み信号（ＲＤＹ）に変換され、（ｉｉ）ＲＥＪであればＦＩＬＭＯのための書き込み信号０９０１（ＷＲ）に変換される。ＦＩＬＭＯにおける拒否されたＫＷから新たな線形のシーケンスが生じる。パフォーマンスの理由から、別個の書き込みポートと読み出しポートを備えたデュアルポート形ＲＡＭとして構成されたＦＩＬＭＯのインプリメンテーションが提案される。
【０２３８】
図１０には、本発明によるＣＴ間プロトコルの１つの実施例が示されている。ここにはＣＴの４つのレベルが描かれており、すなわちそれらはルートＣＴ（１００１）、２つの中間レベルのＣＴ（１００２ａ〜ｂおよび１００３ａ〜ｄ）、下位のＣＴである低レベルＣＴ（１００４〜ｈ）ならびにそのＦＩＬＭＯ（１００５ａ〜ｈ）である。１００４ｅに割り当てられたＰＡにおいてトリガが生成され、これは１００４ｅの内部ではローカルなＳｕｂＣｏｎｆには変換できず、ＥｎｈＳｕｂＣｏｎｆに割り当てられている。１００４ｅは１００３ｃにこのＥｎｈＳｕｂＣｏｎｆのためのリクエストを送信する。１００３ｃはＩＤチェーンをキャッシュしておらず、つまりＥｎｈＳｕｂＣｏｎｆは１００３ｃの葉ではない１００４ｇにおいても部分的に実行される。したがって１００３ｃはリクエストを１００２ｂへ転送する。ハッチングが示すのは、１００２ｂがＩＤチェーンをキャッシュしている可能性のあることであり、それというのも１００４ｇは１００２ｂの葉だからである。とはいえここでは１００２ｂはＩＤチェーンをまだキャッシュしておらず、したがってこれを１００１に要求する。１００１はＩＤチェーンをＣＴＲ（ＰＡＣＴ１０参照）からロードし、それを１００２ｂへ送信する。このプロセスを以下ではＧＲＡＮＴと称する。１００２ｂはＩＤチェーンをキャッシュする。なぜならば関与するすべてのＣＴは１００２ｂの葉だからである。その後、１００２ｂはアトミックに、つまり他のＧＲＡＮＴによる中断なく、ＧＲＡＮＴを１００３ｃと１００３ｄへ送る。その際にＩＤチェーンがスプリットされて２つの異なるＣＴへ送られ、それにより受け取り側のいずれもすべての葉の共通の管理者とはなり得ない。スプリットフラグがセットされ、受け取り側およびそれよりも低いレベルのすべてのＣＴはＩＤチェーンをもはやキャッシュすることはできない。１００３ｃおよび１００３ｄはやはりアトミックに例レベルＣＴ１００４ｆもしくは１００４ｇへＧＲＡＮＴを送信する。低レベルＣＴは到来したＧＲＡＮＴを、コンフィギュレーションすべきＳｕｂＣｏｎｆの順序を表す相応のリスト内にそのまま格納する。このリストはたとえば別個に構成してもよいし、あるいは場合によってはＦＩＬＭＯへ拒否されたＫＷをエントリすることでコンフィギュレーションをダイレクトに実行することによって生じさせることもできる。低レベルＣＴについては２つの変形実施例が存在する：
・これらの低レベルＣＴは、ＩＤチェーンによるＩＤに対応する開始すべきＳｕｂＣｏｎｆをすでにキャッシュしており、この場合にはコンフィギュレーションがただちに開始される。
【０２３９】
・あるいはこれらの低レベルＣＴは、ＩＤチェーンによるＩＤに対応するＳｕｂＣｏｎｆをまだキャッシュしておらず、このときにはじめて上位のＣＴにそれを要求する必要がある。この要求（ＧＥＴ ゲット）については図１１に描かれており、この場合も前提とするのは、いずれのＣＴも中間レベルからＳｕｂＣｏｎｆをキャッシュしていないことである。したがって個々のＳｕｂＣｏｎｆはＣＴＲのルートＣＴからロードされて低レベルＣＴへ送られる（ダウンロード）。この流れは基本的にＰＡＣＴ１０により知られており、これについては詳しく説明しないことにする。
【０２４０】
しかしここで重要であるのは、ＧＲＡＮＴの到来後にそれが各々後続のＧＲＡＮＴの前に実行されることである。ＧＲＡＮＴ ＡがＧＲＡＮＴ Ｂの前に到来したならば、ＧＲＡＮＴ ＡはＧＲＡＮＴ Ｂの前にコンフィギュレーションされなければならない。このことは、ＧＲＡＮＴ ＡのＳｕｂＣｏｎｆを最初にロードしなければならないのに対し、ＧＲＡＮＴ ＢのＳｕｂＣｏｎｆは低レベルＣＴにキャッシュされていてただちにスタート可能であるときにもあてはまる。その際、到来したＧＲＡＮＴの順序を守らなければならない。そもないとＥｎｈＳｕｂＣｏｎｆにおいてデッドロックの発生するおそれがある。
【０２４１】
既述の方法の１つの特別な実施形態によればＣＴＴＲＥＥのＣＴは、上位に位置するＣＴを関与させることなくコンフィギュレーションをダイレクトにアクセスすることができる。これはＣＴＴＲＥＥのＣＴが、任意の形態の揮発性または不揮発性のメモリまたは大容量記憶装置への接続を有することにより行われる。このメモリはたとえばＳＲＡＭ，ＤＲＡＭ，ＲＯＭ，フラッシュＲＯＭ，ＣＤＲＯＭ，ハードディスクまたはサーバシステムとすることができ、このサーバシステムは場合によってはネットワーク（ＷＡＮ，ＬＡＮ，インターネット）によってつながれている。つまりここではっきり述べておくと、ＣＴのダイレクトなアクセスをその上に位置するＣＴを迂回しながらコンフィギュレーションデータ用記憶装置に対して行うこともできるのである。このような事例の場合でも殊にＥｎｈＳｕｂＣｏｎｆにおいて、上位に位置するＣＴを関与させながらＣＴＴＲＥＥ内部におけるコンフィギュレーションの同期合わせが行われる。
【０２４２】
図１２には３つの例が示されている（図１２ａ〜１２ｃ）。ここでは８個のＣＴ（１２０１〜１２０８）から成るコンフィギュレーションスタックが描かれている。このコンフィギュレーションスタックは、コンフィギュレーションすべきＳｕｂＣｏｎｆのリストである。ＳｕｂＣｏｎｆはそれらがリストにエントリされたのと同じ順序でコンフィギュレーションされる。ＰＡＣＴ１０の図２６〜２８に示されているように、１つのコンフィギュレーションスタックはたとえば個々のＳｕｂＣｏｎｆのチェーンによって形成される。別の可能性として挙げられるのは、図１２のようにＳｕｂＣｏｎｆを指すＩＤの簡単なリストである。下方のエントリがまず最初にコンフィギュレーションされ、上方のエントリが最後にエントリされる。
【０２４３】
図１２ａには２つのＥｎｈＳｕｂＣｏｎｆ（１２１０，１２１１）が描かれており、これらは個々のＣＴのコンフィギュレーションスタック内に正しく位置している。ＥｎｈＳｕｂＣｏｎｆの個々のＳｕｂＣｏｎｆは適正な順序でデッドロックなくコンフィギュレーションされる。この場合、ＧＲＡＮＴの順序が留意されている。
【０２４４】
図１２ｂの例も適正なものである。ここには３つのＥｎｈＳｕｂＣｏｎｆが描かれている（１２２０，１２２１，１２２２）。１２２０はすべてのＣＴに該当する大きいＥｎｈＳｕｂＣｏｎｆである。１２２１はＣＴ１２０２〜１２０６だけに該当し、さらにもう１つは１２０７と１２０８に該当する。すべてのＳｕｂＣｏｎｆはデッドロックなく適正な順序でコンフィギュレーションされる。１２２２のためのＧＲＡＮＴは１２２０のためのＧＲＡＮＴの前に完全に処理され、１２２０のためのＧＲＡＮＴは１２２１のＧＲＡＮＴの前に処理される。
【０２４５】
図１２ｃの例は複数のデッドロックの状況を表している。１２０８において１２３０と１２３２のＧＲＡＮＴの順序が取り違えられてしまっている。その結果、１２０８に対応づけられたＰＡにおいて１２３０のためのリソースが占有され、かつ１２０８に対応づけられたＰＡにおいて１２３２のためのリソースが占有されることになる。これらのリソースはそれぞれ固定的に割り当てられている。これによりいかなるＥｎｈＳｕｂＣｏｎｆも実行できずまたはコンフィギュレーション終了できないため、デッドロックが発生してしまう。同様にＣＴ１２０４および１２０５においても１２３０と１２３１のＧＲＡＮＴが時間的に入れ違ってしまっている。同じ理由からこれによりやはりデッドロックが発生してしまう。
【０２４６】
図１３ａには、ＣＴ間通信のパフォーマンス最適化されたバージョンが描かれている。これによれば低レベルＣＴへダイレクトにダウンロードが実行され、つまり中間のレベルにおけるＣＴは最初はＳｕｂＣｏｎｆを受け取り記憶して転送する必要がない。そうではなくこれらのＣＴは「いっしょにリスニングする」だけであり（１３０１，１３０２，１３０３，ＬＩＳＴＥＮＥＲ リスナ）、ＳｕｂＣｏｎｆをキャッシュするだけである。図１３ｂにはその構造が図示されている。通常はレジスタであるバイパス（１３０４，１３０５，１３０６）により、ダウンロードは中間レベルのＣＴの傍らを通り過ぎて実行される。
【０２４７】
図１４には、ＳｕｂＣｏｎｆマクロの簡単なコンフィギュレーションのためのＣＴとＰＡとの間の回路に関する実現可能な構造が示されている。ＫＷはバス（１４０１）を介してＣＴから伝送される。ＫＷはそのコンフィギュレーションデータ（１４０２）ならびにＰＡＥアドレスＸ（１４０３）およびＹ（１４０４）に分解される（多次元のアドレッシングであればそれに応じて複数のアドレスに分解される）。１４０５はＸオフセットをＸアドレスに加算し、ＹオフセットをＹアドレスに加算する。これらのオフセットをそれぞれ異ならせることができ、レジスタ（１４０７）に格納されている。パラメータ化可能なデータの一部分（１４０８）がアドレスとしてルックアップテーブル（１４０９）へ導かれ、このテーブルには実際の値が格納されている。これらの値はパラメータ不可能なデータ（１４１２）と結合される。マルチプレクサ（１４１３）を介して、ルックアップを実行すべきかあるいはルックアップせずデータをダイレクトに用いるべきかを選ぶことができる。この選択はビット（１４１１）により実行される。すべてのアドレスとデータが再び結合され、バス（１４１３）としてＰＡへ導かれる。インプリメンテーションに応じて、既述の回路の前または後にＦＩＬＭＯが接続される。つまり統合されたＦＩＬＭＯであれば前に接続され、別個のＦＩＬＭＯであれば後ろに接続される。ＣＴはバス１４１５を介して、アドレスオフセットおよび１４０９におけるパラメータ変換をセットする。簡単にするため、１４０９をデュアルポート形ＲＡＭとして構成することができる。相応のＫＷの構造は以下の通りである：
【０２４８】
【表１０】
2004506261.tif 000014
【０２４９】
ＭＵＸ＝１であれば１４０９においてルックアップが実行され、ＭＵＸ＝０であればデータがダイレクトに１４１４へ転送される。
【０２５０】
図１５には１つのグラフの構成が図示されている。このグラフのそれぞれ次の可能なノード（１〜１３）がプリロードされ（プリフェッチ ｐｒｅｆｅｔｃｈ）、それに応じて先行するノードおよび使用されないジャンプが消去される（デリート ｄｅｌｅｔｅ）。１つのループ内ではループのノードは消去されず（１０，１１，１２）、対応するノードは終了後はじめて除去される。ノードがロードされるのは、それが事前にＣＴのメモリに存在しないときだけである。したがって（たとえば）１１回などのように何度も処理されても、１２回とか１０回のように何度もロードが行われることにはならない。８および／または９がすでに除去されていたならば、「デリート８，９」は無視される。
【０２５１】
図１６にはＳｕｂＣｏｎｆ（１６０１）の多重のインスタンス化について示されている。様々なＳｕｂＣｏｎｆ（１６０２，１６０３，１６０４）によって１６０１が呼び出される。１６０１のためのパラメータは、そのつど呼び出されたＳｕｂＣｏｎｆによってルックアップテーブル（１６０５）にプリロードされる（１６１０）。１６０５は１つしかインプリメントされていないが、図１６ではいくつも示されており、これはそれぞれ異なる内容をシンボリックに表すためである。１６０１が呼び出される。ＫＷは１６０５，１６０６，１６０７へ伝送される。これらのエレメントは以下のように動作する：ルックアップテーブルに基づき１６０５の相応の内容がＫＷと再び結合される（１６０６）。もとのＫＷを有効とするかルックアップテーブルを実行するのかを選択するマルチプレクサ１４１３（１６０７）を通った後、ＫＷはＰＡへ送られる（１６０８）。
【０２５２】
図１７にはウェーブ・リコンフィギュレーションの流れが図示されている。１回だけハッチングした平面はデータ処理を行うＰＡＥを表しており、ここで１７０１は再コンフィギュレーション後のＰＡＥを示し、１７０３は再コンフィギュレーション後のＰＡＥを表している。２重にハッチングした平面（１７０２）は、目下再コンフィギュレーションされるＰＡＥまたは再コンフィギュレーション待ちのＰＡＥを表している。図１７ａには、簡単なシーケンシャルなアルゴリズムに対しウェーブ・再コンフィギュレーションの及ぼす作用が示されている。この場合、新たなタスクの割り当てられるＰＡＥを正確に再コンフィギュレーションすることができる。各クロックごとにＰＡＥは新たなタスクを受け取るので、これを効率的につまり同時に実行することができる。ここでは例として、１つのＶＰＵにおけるすべてのＰＡＥのマトリックスのうち１列のＰＡＥが描かれている。この場合、クロックｔ後の各クロックにおける状態がそれぞれ１つのクロックだけ遅いかたちで示されている。
【０２５３】
図１７ｂには、大きい部分の再コンフィギュレーションの時間的な作用が描かれている。ここでは例として、１つのＶＰＵにおける一群のＰＡＥが描かれている。この場合、クロックｔ後の各クロックにおける状態がそれぞれ複数のクロックから成る異なる遅れを伴って示されている。まずはじめはＰＡＥの小さい部分だけが再コンフィギュレーションされるかまたは再コンフィギュレーション待ちである一方、これらの平面はすべてのＰＡＥが再コンフィギュレーションされてしまうまで次第に大きくなる。面積が大きくなるということは、再コンフィギュレーションの時間的な遅れにより常に複数のＰＡＥが再コンフィギュレーション待ちになる（１７０２）ことを意味する。これにより計算能力が失われてしまう。したがってここで提案されるのは、ＣＴ（殊にＣＴのメモリ）とＰＡＥとの間にいっそう幅の広いバスシステムを投入することであり、これによって１つのクロック内で複数のＰＡＥを同時に再コンフィギュレーションするために十分なラインが提供される。
【０２５４】
【表１１】
2004506261.tif 000015
【０２５５】
図１８には一例として、１１．２による「同期合わせされたシャドウレジスタ」のようなリコンフィギュレーション方法のためのリコンフィギュレーションストラテジが示されている。ここにはそれぞれＣＴ（１８０１）ならびに複数のＰＡＥのうちの１つ（１８０４）が図示されており、ＰＡＥ内部にはそれぞれコンフィギュレーションレジスタ（１８０２，１８０３）だけが描かれている。さらにこの図には、アクティブなコンフィギュレーションを選択するユニット（１８０５）も示されている。ＰＡＥ内部のその他の機能ユニットは、見やすくするため描かなかった。ＣＴはそれぞれｎ個のＳｕｂＣｏｎｆ（１８２０）を有しており、事例−Ｉ１ではＷＣＰが発生したときに１つのＳｕｂＣｏｎｆの対応するＫＷがそれぞれロードされ（１（ｎ））、事例−Ｉ２では全体でｎ個のＳｕｂＣｏｎｆのうちｍ個のＳｕｂＣｏｎｆのＫＷがロードされる（ｍ（ｎ））。また、この図にはＷＣＴ（１８０６）とＷＣＰ（１８０７）の種々の接続やあとで説明するようなオプションのＷＣＰ（１８０８）も描かれている。
【０２５６】
Ａ１−Ｉ１の場合、同じＳｕｂＣｏｎｆ内において第１のトリガＷＣＰにより次のコンフィギュレーションが選択され、これは同じリソースを利用するかまたはこのコンフィギュレーションのリソースは少なくともすでに事前に予約されており、場合によってはＷＣＰ以外の他のものを生成しないＳｕｂＣｏｎｆによって占有されている。ＣＴ（１８０１）によりコンフィギュレーションがロードされる。ここで示した例の場合にはコンフィギュレーションはダイレクトに実行されるのではなく、複数の択一的なレジスタのうちの１つ（１８０２）にロードされる。第２のトリガＷＣＴにより、必要とされるリコンフィギュレーションの時点で正確に択一的なレジスタのうちの１つが、事前にＷＣＰに基づきロードされたコンフィギュレーションが実行されるよう選び出される。
【０２５７】
基本的にＷＣＰにより特定のコンフィギュレーションが決定されてプリロードされ、プリロードされたリコンフィギュレーションに対応する実際の機能変更の時点がＷＣＴにより決定される。
【０２５８】
ＷＣＰもＷＣＴもベクトルとすることができるので、ＷＣＰ（ｖ１）により複数のコンフィギュレーションのうちの１つがプリロードされるようになり、その際、ＷＣＰのソースによりプリロードすべきコンフィギュレーションが指定される。相応にＷＣＴ（ｖ２）により、プリロードされた複数のコンフィギュレーションのうちの１つが選択される。この場合、ｖ２により選択可能なコンフィギュレーションの量に対応する個数の１８０２が必要とされ、一般にこの個数は固定的にまえもって定められているので、ｖ２は最大量に対応することになる。
【０２５９】
このことから出発してＡ１−Ｉ２には、複数の１８０２を備えたレジスタセット１８０３によるバージョンが描かれている。最適な事例では１８０３におけるレジスタの個数は、それぞれあとに続く可能なすべてのコンフィギュレーションをそのままプリロードできるような大きさであり、このことでＷＣＰを省略することできるので、機能入れ替え時点ならびに入れ替えそのものがＷＣＴ（ｖ２）によって指定されるようになる。
【０２６０】
Ａ２−Ｉ１に示されているＷＲＣによれば、次のコンフィギュレーションが選択され、このコンフィギュレーションは同じリソースを使用しないかまたはこのコンフィギュレーションのリソースは事前に予約されておらず、あるいは場合によってはＷＣＰ（ｖ１）以外の他のものを生成するＳｕｂＣｏｎｆによって占有されている。コンフィギュレーションにおいてデッドロックが生じないことは、ＷＣＰ（ｖ１）に対するＦＩＬＭＯ同様のリアクションとコンフィギュレーションによって保証される。ＷＣＴ（ｖ２）によるコンフィギュレーションのスタートはやはりＣＴにより、リコンフィギュレーション時点を表すトリガ（ＲｅｃｏｎｆＲｅｑ）の到来に対するＦＩＬＭＯ同様のアトミックなリアクションによってアトミックに実行される。
【０２６１】
Ａ２−Ｉ２の場合、後続のすべてのＳｕｂＣｏｎｆはＳｕｂＣｏｎｆの最初のロード時にすでにコンフィギュレーションレジスタ１８０３にプリロードされるかまたは、コンフィギュレーションレジスタの個数が十分でなければ必要に応じて、発生したＷＣＰ（ｖ１）を公知のように処理することでＣＴによりあとからロードされる。リコンフィギュレーション時点を決定し本来のリコンフィギュレーションをトリガするトリガ（ＲｅｃｏｎｆＲｅｑ，１８０９）はまずはじめ、適切な優先順位づけ手段（１８１０）により次のように時間的に分離されてＷＣＴ（ｖ２）としてＰＡＥへ導かれる。すなわち、常に正確に１つのＷＣＴ（ｖ２）だけがある時点にあるＰＡＥにおいてアクティブであるようにし、到来するＷＣＴ（ｖ２）の順序がすべての該当するＰＡＥにおいて同じであるよう時間的に分離される。
【０２６２】
これらの実施例ではＡ２−Ｉ１およびＡ２−Ｉ２において付加的なトリガシステムが用いられる。ＷＣＴが１８０１により処理される場合でも１８１０により処理される場合でも、１８０４への転送までにかなりの遅延が生じる可能性がある。とはいえここで重要なのは、時点ＣｈｇＰｋｔが時間的に守られることである。その理由は、ＰＡＥはさもないと後続のデータを誤って処理してしまうことになるからである。したがって別のトリガ（１８１１，ＷＣＳ＝ＷａｖｅＣｏｎｆｉｇｕｒａｔｉｏｎＳｔｏｐ ウェーブコンフィギュレーションストップ）が用いられ、これは単にＰＡＥのデータ処理をＷＣＴの到来により新たなコンフィギュレーションがアクティブにされるまでストップさせる。ＷＣＳは通常、目下アクティブなＳｕｂＣｏｎｆ内で生成される。多くの事例ではＲｅｃｏｎｆＲｅｑとＷＣＳを同一のものとすることができる。なぜならばＲｅｃｏｎｆＲｅｑが目下アクティブなＳｕｂＣｏｎｆ内で生成されるかぎり、それらの信号によってたいていはＣｈｇＰｋｔの到来も表されるからである。
【０２６３】
図１９にはＡ１−Ｉ２とＡ２−Ｉ２のインプリメンテーションの変形実施形態が示されており、ここではＫＷ管理のためレジスタセットの代わりにＦＩＦＯメモリ（１９０１）が用いられる。この場合、ＷＣＰによりＳｕｂＣｏｎｆの所定の順序が決められている。ＷＣＴ（もしくはＷＣＳこれは択一的に１９０２により表されている）によって、次のコンフィギュレーションだけをＦＩＦＯからロードすることができる。ＷＣＳの基本的な機能つまり実行中のデータ処理の停止は、図１８で説明したものとまったく同じである。
【０２６４】
図２０にはＰＡＥの１つの行のセクションが描かれており、この目的は一例として１１．２による「同期合わせされたパイプライン」と類似のリコンフィギュレーションを示すことである。ＣＴ（２００１）はＰＡＥ（２００５）の複数のインタフェースコンポーネント（２００４）に対応づけられている。２００４は２００５に統合されており、見やすくするという目的のためだけにＷＡＩＴとＷＣＴが特別に描かれている。２００４から２００５へコンフィギュレーションデータを伝送するための信号は、抽象的に表す理由から描かれていない。
【０２６５】
ＣＴはパイプライン化されたバスシステムにより２００４と結ばれており、ここで２００２はパイプライン段を成している。２００２はコンフィギュレーションデータ（ＣＷ）用のレジスタ（２００３ｂ）と、デコーダおよびロジックの統合された別のレジスタ（２００３ａ）とによって構成されている。２００３ａはＣＷ内で伝送されるアドレスをデコーディングし、該当するローカルなＰＡＥがアドレッシングされているならば信号ＲＤＹを２００４へ送信し、ローカルなＰＡＥがアドレッシングされていないならば信号ＲＤＹを次の段（２００２）へ送信する。これに応じて２００３ａは、公知のプロトコルに従いＲＤＹ／ＡＣＫとして構成された確認応答（ＧＮＴ）を２００２または２００４から受け取る。これによりパイプライン化されたバスが生じ、これはＣＷをＣＴからアドレッシングされたＰＡＥへ伝送し、その応答確認をＣＴへ送り戻す。
【０２６６】
２００４においてＷＣＴがアクティブであれば、説明に従いＷＡＶＥで表されている到来しているＣＷが２００４にコンフィギュレーションされ、ＧＮＴはＡＣＫによって確認応答される。ＷＣＴがアクティブではないがＣＷがコンフィギュレーションのために到来しているかぎり、ＧＮＴは確認応答されず、つまりパイプラインはコンフィギュレーション実行までブロックされる。アクティブなＷＣＴにより表されるかたちで２００５がウェーブ・リコンフィギュレーションを待ち望んでおり、かつＷＡＶＥで表されたＣＷが２００４のところに存在していなければ、ＷＡＶＥで表されたＣＷが２００４にコンフィギュレーションされてしまうまでデータ処理を行わない待ち状態にＰＡＥ（２００５）をおく目的で、２００４はＷＡＩＴによって応答確認する。ＷＡＶＥとともに伝送されなかったＣＷはデータ処理中、ＲＥＪによって拒否される。
【０２６７】
なお、ここで述べておくと、この図面はもっぱら基本原理を示すものであり、適用事例に依存する特別な形態によって最適化を実施することができる。たとえば２００４におけるレジスタ段によって、ＷＡＶＥで表されて到来したＣＷをＷＣＴおよびそれに付随するリコンフィギュレーションが到着するまでバッファリングすることができ、ＣＴから送られたＣＷがアドレッシングされた２００４によってただちに取り込まれないときにパイプラインのブロックを阻止することができる。
【０２６８】
以下の説明のため、２０１０と２０１１はデータ処理の方向を表すものとする。
【０２６９】
データ処理が方向２０１０へ進むならば、以下のようにしてＰＡＥの高速なウェーブコンフィギュレーションが可能である：ＣＴはＷＡＶＥで表されたＣＷを、もっとも遠く離れたＰＡＥのＣＷがまずはじめに送信されるようパイプラインへ送信する。ＣＷをただちにコンフィギュレーションできないのであれば、最も遠いパイプライン段（２００２）がブロックされる。その後、ＣＴはＣＷをいまや最も遠くなったＰＡＥへ送信し、これは最後にデータが最も近いＰＡＥへ送信されるまで行われる。ＣｈｋＰｋｔがＰＡＥを通過するとただちに、こんどは各クロックで新しいＣＷをコンフィギュレーションすることができる。この方法は、ＣｈｇＰｋｔがＣＷの伝送と同時にＣＴからＰＡＥを進むときにも効率的である。なぜならばこの場合も、それぞれコンフィギュレーションに必要とされるＣＷは個々のＰＡＥにおいて各クロックごとに生じる可能性があるからである。
【０２７０】
データ処理が逆方向（２０１１）に進む場合も、ＣＴから最も離れたＰＡＥからＣＴに最も近いＰＡＥへ向かってパイプラインをコンフィギュレーションすることができる。ＣｈｇＰｋｔがＣＷのデータ伝送と同時に行われないかぎり、この方法は最適なまま維持される。なぜならばＣｈｇＰｋｔが発生したときにＣＷをパイプラインから２００４へただちに伝送することができるからである。しかしＣｈｇＰｋｔがウェーブ・リコンフィギュレーションのＣＷと同時に現れると、待ちサイクルが発生する。たとえばクロックｎでＣｈｇＰｋｔが発生したときにはＰＡＥ Ｂをコンフィギュレーションすべきである。ＣＷが到来し、２００４にコンフィギュレーションされる。クロックｎ＋１のときＣｈｇＰｋｔ（つまりはＷＣＴ）がＰＡＥ Ｃに到来する。しかしＰＡＥ ＣのＣＷはこのクロックではせいぜいＰＡＥ Ｂの２００２に伝送されるだけである。なぜならば先行のクロックにおいてＰＡＥ Ｂの２００２はまだそのＣＷによって占有されていたからである。クロックｎ＋２においてはじめてＰＡＥ ＣのＣＷがその２００２に位置し、コンフィギュレーションすることができる。クロックｎ＋１において１つの待ちサイクルが発生している。
【０２７１】
図２１には、ウェーブ・リコンフィギュレーションのための最も一般的な同期合わせストラテジが示されている。最初のＰＡＥ ２１０１は、発生した状態に基づきリコンフィギュレーションの必要性を識別する。この識別は一般的な方法たとえばデータまたは状態の比較によって行うことができる。そしてこの識別により２１０１はトリガによって生じさせることのできる要求（２１０３）を、リコンフィギュレーションすべき１つまたは複数のＰＡＥ（２１０２）へ送信し、これはデータ処理を停止する。さらに２１０１は、２１０３と同じ信号とすることもできる信号（２１０５）をＣＴ（２１０４）へ送信し、これをリコンフィギュレーションするよう要求する。２１０４は２１０２をリコンフィギュレーションし（２１０６）、リコンフィギュレーションすべきすべてのＰＡＥのリコンフィギュレーション完了後、実行終了に関して場合によってはリコンフィギュレーションを用いて２１０１へ通知する（２１０７）。これに基づき２００１は停止要求２１０３を撤回し、データ処理が続けられる。２１０８と２１０９はそれぞれデータおよびトリガの入出力側をシンボリックに表す。
【０２７２】
図２２には、ルーティング措置によりＷＣＴを時間的に適正に転送するようにした構成が描かれている。中央のインスタンス（２００３）から種々のＰＡＥ（２２０１）のための複数のＷＣＴが生成されるが、これらは時間的に相前後して調整されるようにすべきである。マトリックスにおいて２２０１がそれぞれ異なって隔てられていることから、それぞれ異なる伝播時間もしくはレイテンシが生じる。これはこの実施例では、コンパイラに割り当てられたルータによるパイプライン段（２２０２）の適切な投入により達成される（ＰＡＣＴ１３参照）。これにより生じたレイテンシには参照符号ｄ１〜ｄ５が付されている。このことからわかるように、データ流の方向（２２０４）において各段（列）に同じレイテンシが発生している。たとえば２２０５は不要である。なぜならば２２０３から２２０６の距離はごく僅かだからである。しかし２２０７と２２０８についてはレイテンシがいっそう長く存在するためそれぞれ２２０２を挿入しなければならないので、伝播時間補償のために２２０５が必要となる。
【０２７３】
図２３にはウェーブ・リコンフィギュレーションの適用事例が示されている。ここではＶＰＵテクノロジーの基本的な利点を示すことにする。つまりその利点とは、タスク解決のためＰＡＥリソースまたはリコンフィギュレーション時間が選択的に利用されることであり、そのことからコストとパフォーマンスとの間でコンパイラまたはプログラマによって生じ得るインテリジェントなトレードオフがが生じる。この場合、複数のＰＡＥ（２３０４〜２３０８）から成るアレイ（２３０２）においてデータストリーム（２３０１）が計算されることになる。このアレイにＣＴ（２３０３）が対応づけられており、これはそのリコンフィギュレーションを担当する。２３０４はリコンフィギュレーションを必要とするデータ処理の終了状態の識別を担当する。この識別はＣＴにシグナリングされる。２３０６は分岐の開始を表し、２３０９は分岐の終了を表す。この分岐は２３０７ａ，２３０７ｂもしくは２３０７ａｂによりシンボリックに表されている。ＰＡＥ２３０８は使われない。２３０９によって様々なトリガが表される。
【０２７４】
図２３ａにおいて２３０５により両方の分岐２３０７ａ，２３０７ｂのうちの一方が選択され、２３０６から到来するデータと同時にトリガによりアクティブにされる。
【０２７５】
図２３ｂの場合、２３０７ａ，２３０７ｂから完全にはまえもってコンフィギュレーションされず、両方の可能な分岐はリコンフィギュレーションによりリソース２３０７ａｂを分ける。さらに２３０５はデータ処理に必要な分岐を選択する。ここで情報は一方では２３０３へ導かれ、他方では２３０６へ導かれ、これによって図２１に示されているように２３０７ａｂのリコンフィギュレーションが完全に実行されるまでデータ処理が停止される。
【０２７６】
図２４には、ＰＡＥをシーケンス制御する状態機械を４．２に従いインプリメントするための実現可能な択一的形態が描かれている。この場合、以下の状態がインプリメントされている：
未コンフィギュレーション　Ｎｏｔ　Ｃｏｎｆｉｇｕｒｅｄ（２４０１）
割り当て済み　Ａｌｌｏｃａｔｅｄ（２４０１）
ロック待ち　Ｗａｉｔ　ｆｏｒ　Ｌｏｃｋ（２４０３）
以下の信号により状態変化がトリガされる：
ロック／フリー　ＬＯＣＫ／ＦＲＥＥ（２４０４，２４０８）
チェック　ＣＨＥＣＫ（２４０５，２４０７）
リコンフィギュレーション　ＲＥＣＯＮＦＩＧ（２４０６，２４０９）
ゴー　ＧＯ（２４１０，２４１１）
図２５にはＰＡＣＴ１３により公知の高級言語コンパイラの構造が示されており、これはたとえばやはり慣用のシーケンシャルな高級言語（Ｃ，Ｐａｓｃａｌ，Ｊａｖａ）をＶＰＵシステムに変換する。シーケンシャルなコード（２５１１）はパラレルなコード（２５０８）から分離され、それにより２５０８はＰＡＥのアレイにおいてダイレクトに処理される。２５１１について３つの実施形態が存在する：
１．ＰＡＥにおけるシーケンサ内（ＰＡＣＴ１３参照、２９１０）
２．ＶＰＵにコンフィギュレーションされるシーケンサを用いる。このためコンパイラはタスクに合わせて最適化されたシーケンサを生成する一方、アルゴリズムに固有のシーケンサコードをダイレクトに生成する（ＰＡＣＴ１３参照，２８０１）。
【０２７７】
３．慣用の外部のプロセッサ上（ＰＡＣＴ１３参照、３１０３）
４．ＣＴを用いた高速なリコンフィギュレーションによる。これによれば１つのＰＡＣ内のＰＡＥの個数とＰＡＣの個数との比が次のように選ばれる。すなわち１つまたは複数のＰＡＣを専用のシーケンサとして構成することができ、その操作コード（オペレーションコード）および命令実行は対応づけられたＣＴにより動作ステップごとにコンフィギュレーションされる。この場合、対応づけられたＣＴはシーケンサのステータスに反応し、それぞれ後続のプログラムシーケンスを決定する。ステータスの伝送はトリガシステムにより行われる。
【０２７８】
どの実施形態を選ぶかは、ＶＰＵとコンピュータシステムとアルゴリズムに依存する。
【０２７９】
基本原理はＰＡＣＴ１３から公知であるが、ルータとプレーサ（２５０５）の拡張については本明細書に従ってはっきりと触れておくことにする。
【０２８０】
コード（２５０１）はまずはじめにプリプロセッサ（２５０２）において、データフローコード（２５１６）（これは個々のプログラミング言語の特別なバージョンでデータフローに最適化されて記述されている）と慣用のシーケンシャルなコードに分離される（２５１７）。２５１７はパラレル化可能なサブアルゴリズムについて調べられ（２５０３）、シーケンシャルなサブアルゴリズムが分離される（２５１８）。パラレル化可能なサブアルゴリズムはマクロとして暫定的に配置されルーティングされる。反復プロセスにおいてマクロはデータフローに最適化されたコード（２５１３）と一緒に配置されてルーティングされ、分割される（２５０５）。統計部（２５０６）によって個々のマクロならびにそれらの分割が効率について評価され、この場合、再コンフィギュレーション時間ならびに再コンフィギュレーションの煩雑さが効率の考慮に作用を及ぼす。非効率的ななマクロが除去され、シーケンシャルなコードとして分離される（２５１４）。残りのパラレルなコード（２５１５）は２５１６といっしょにコンパイルされてアセンブルされ（２５０７）、ＶＰＵオブジェクトコードが送出される（２５０８）。生成されたコードならびに個々のコード（２５１４により除去されたマクロも）に関する統計が出力され（２５０９）、これによりプログラマはプログラムの速度最適化に関する指示を受け取る。
【０２８１】
残りのシーケンシャルなコードの各マクロはその複雑さおよび要求について調べられる（２５２０）。ＶＰＵアーキテクチャやコンピュータシステムに依存するデータベース（２５１９）から、そのつど適切なシーケンサが選択され、ＶＰＵコード（２５２１）として出力される。コンパイラ（２５２１）はそれぞれ２５２０により選択されたシーケンサのために個々のマクロのアセンブラコードを生成し、それを出力する（２５１１）。２５１０と２５２０は互いに密に結合されている。場合によっては最小かつ最高速のアセンブラコードをもつ最も適切なシーケンサを見つけるため、処理が反復的に実行される。リンカ（２５２２）によりアセンブラコード（２５０８，２５１１，２５２１）が統合され、実行可能なオブジェクトコード（２５２３）が生成される。
【０２８２】
用語の定義
ＡＣＫ／ＲＥＪ：（リ）コンフィギュレーション試行に対するＰＡＥの応答確認プロトコル。ＡＣＫによってコンフィギュレーションの受け入れが指示され、ＲＥＪによってコンフィギュレーションの拒否が指示される。このプロトコルによれば、ＡＣＫまたはＲＥＪの到来が予期され、必要に応じてその到来まで待ちサイクルが挿入される。
【０２８３】
ＣＴ：コンフィギュレーション可能なエレメントをインタラクティブにコンフィギュレーションおよびリコンフィギュレーションするユニット。ＣＴはＳｕｂＣｏｎｆをバッファリングおよび／またはキャッシュするためのメモリを有する。特別な実施形態ではルートＣＴではないＣＴもＳｕｂＣｏｎｆ用のメモリとダイレクトに接続されており、このＳｕｂＣｏｎｆはこの事例では上位のＣＴからロードされない。
【０２８４】
ＣＴＴＲＥＥ：ＣＴの１次元または多次元のツリー。
【０２８５】
ＥｎｈＳｕｂＣｏｎｆ：それぞれ異なるＰＡＣ上で実行されることになる複数のＳｕｂＣｏｎｆを有するコンフィギュレーション。
【０２８６】
コンフィギュレーション：実行可能な完全なアルゴリズム。
【０２８７】
コンフィギュレーション可能なエレメント：物理的に任意のエレメントであって、その厳密な機能はインプリメントされた可能性の中でコンフィギュレーションにより決定される。コンフィギュレーション可能なエレメントはたとえば論理的機能ユニット、算術的機能ユニット、記憶装置、周辺インタフェース、バスシステムとして構成することができる。ここでは殊に、ＦＰＧＡ（たとえばＣＬＢ）、ＤＰＧＡ、ＶＰＵならびに「リコンフィギュラブルコンピューティング」として知られるあらゆるエレメントなど公知のテクノロジーのエレメントが含められる。コンフィギュレーション可能なエレメントを、複数の様々な機能ユニットの結合体たとえば対応づけられたバスシステムの統合された算術ユニットの複雑な結合体とすることもできる。
【０２８８】
ＫＷ：コンフィギュレーションワード。コンフィギュレーション可能なエレメントにおけるコンフィギュレーションまたはコンフィギュレーションの一部分を決定する１つまたは複数のデータ。
【０２８９】
レイテンシ：データ伝送における遅延であって、これは一般に同期システムにおいてクロックベースで発生し、したがってクロックサイクルとして表される。
【０２９０】
ＰＡ：プロセッシングアレイ　Ｐｒｏｃｅｓｓｉｎｇ　Ａｒｒａｙであって、それぞれ異なるようにも構成された複数のＰＡＥの配置。
【０２９１】
ＰＡＣ：ＰＡのコンフィギュレーションおよびリコンフィギュレーションのために割り当てられそのＰＡを担当するＣＴ。
【０２９２】
ＰＡＥ：プロセッシングアレイエレメント　Ｐｒｏｃｅｓｓｉｎｇ　Ａｒｒａｙ　Ｅｌｅｍｅｎｔ、コンフィギュレーション可能なエレメント。
【０２９３】
ＲｅｃｏｎｆＲｅｑ：リコンフィギュレーションを要求する状態に基づくトリガにより生成されそのことを表す。
【０２９４】
リコンフィギュレーション：新たなコンフィギュレーションのロード。場合によってはデータ処理と同時にまたはオーバラップしてあるいはパラレルに、実行中のデータ処理を妨害または誤らせることなく行われる。
【０２９５】
ルートＣＴ：ＣＴＴＲＥＥにおける最上位のＣＴであって、これは一般にしかし必ずしもそうではないがただ１つのＣＴとしてコンフィギュレーションメモリと接続されている。
【０２９６】
ＳｕｂＣｏｎｆ：複数のＫＷから成るコンフィギュレーションの一部分。
【０２９７】
ＷＣＴ：リコンフィギュレーションを行うべき時点を表す。この場合、オプションとして付加的な情報の伝送により可能な複数のコンフィギュレーションのうちの１つを選択することができる。一般にＷＣＴは、目下実行中でありリコンフィギュレーションのために終了させるべきデータ処理の終了と正確に同期して生じる。インプリメント上の理由からＷＣＴがあとから伝送される場合には、データ処理の同期合わせのためＷＣＳが用いられる。
【０２９８】
ＷＣＰ：ＣＴにおいて（リ）コンフィギュレーションのため１つまたは複数の択一的な次のコンフィギュレーションを要求する。
【０２９９】
ＷＣＳ：ＷＣＴ到来までデータ処理を停止する。これを用いなければならないのは、ＷＣＴがインプリメントに起因して必要とされるリコンフィギュレーションの時点を正確に指示するときではなく、終了させるべきコンフィギュレーションのデータ処理の本来の終了後にはじめて個々のＰＡＥに到来したときだけである。
【０３００】
セル：コンフィギュレーション可能なエレメント。
【０３０１】
参考文献：
ＰＡＣＴ０１　４４１６８８１
ＰＡＣＴ０２　１９７８１４１２．３
ＰＡＣＴ０４　１９６５４８２．２−５３
ＰＡＣＴ０５　１９６５４５９３．５−５３
ＰＡＣＴ０７　１９８８０１２８．９
ＰＡＣＴ０８　１９８８０１２９．７
ＰＡＣＴ１０　１９９８０３１２．９＆１９９８０３０９．９
ＰＡＣＴ１３　ＰＣＴ／ＤＥ００／０１８６９
ＰＡＣＴ１８　１０１１０５３０．４
【図面の簡単な説明】
【図１】
ＳｕｂＣｏｎｆの構造を示す図である。
【図２】
ＳｕｂＣｏｎｆの構造を示す図である。
【図３】
ＳｕｂＣｏｎｆの構造を示す図である。
【図４】
ＰＡＥの状態を実現するために考えられる状態機械を示す図である。
【図５】
セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションを示す図である。
【図６】
セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションを示す図である。
【図７】
セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションを示す図である。
【図８】
セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションを示す図である。
【図９】
セクション５によるＦＩＬＭＯ方式の考えられるインプリメンテーションを示す図である。
【図１０】
本発明によるＣＴ間プロトコルの１つの実施例を示す図である。
【図１１】
要求（ＧＥＴ ゲット）について示す図である。
【図１２】
ＥｎｈＳｕｂＣｏｎｆを示す図である。
【図１３ａ】
ＣＴ間通信のパフォーマンス最適化されたバージョンを示す図である。
【図１３ｂ】
ＣＴ間通信のパフォーマンス最適化されたバージョンを示す図である。
【図１４】
ＳｕｂＣｏｎｆマクロの簡単なコンフィギュレーションのためのＣＴとＰＡとの間の回路に関する実現可能な構造を示す図である。
【図１５】
グラフの構成を示す図である。
【図１６】
ＳｕｂＣｏｎｆ（１６０１）の多重のインスタンス化について示す図である。
【図１７】
ウェーブ・リコンフィギュレーションの流れを示す図である。
【図１８】
「同期合わせされたシャドウレジスタ」のようなリコンフィギュレーション方法のためのリコンフィギュレーションストラテジを示す図である。
【図１９】
Ａ１−Ｉ２とＡ２−Ｉ２のインプリメンテーションの変形実施形態を示す図である。
【図２０】
ＰＡＥの１つの行のセクションを示す図である。
【図２１】
ウェーブ・リコンフィギュレーションのための最も一般的な同期合わせストラテジを示す図である。
【図２２】
ルーティング措置によりＷＣＴを時間的に適正に転送するようにした構成を示す図である。
【図２３】
ウェーブ・リコンフィギュレーションの適用事例を示す図である。
【図２４】
ＰＡＥをシーケンス制御する状態機械を４．２に従いインプリメントするための実現可能な択一的形態を示す図である。
【図２５】
ＰＡＣＴ１３により公知の高級言語コンパイラの構造を示す図である。
【図１０】
2004506261.tif 000016
【図１１】
2004506261.tif 000017
【図１３ａ】
2004506261.tif 000018
【図１３ｂ】
2004506261.tif 000019
【図１５】
2004506261.tif 000020
【国際公開パンフレット】
2004506261.tif 000021
2004506261.tif 000022
2004506261.tif 000023
2004506261.tif 000024
2004506261.tif 000025
2004506261.tif 000026
2004506261.tif 000027
2004506261.tif 000028
2004506261.tif 000029
2004506261.tif 000030
2004506261.tif 000031
2004506261.tif 000032
2004506261.tif 000033
2004506261.tif 000034
2004506261.tif 000035
2004506261.tif 000036
2004506261.tif 000037
2004506261.tif 000038
2004506261.tif 000039
2004506261.tif 000040
2004506261.tif 000041
2004506261.tif 000042
2004506261.tif 000043
2004506261.tif 000044
2004506261.tif 000045
2004506261.tif 000046
2004506261.tif 000047
2004506261.tif 000048
2004506261.tif 000049
2004506261.tif 000050
2004506261.tif 000051
2004506261.tif 000052
2004506261.tif 000053
2004506261.tif 000054
2004506261.tif 000055
2004506261.tif 000056
2004506261.tif 000057
2004506261.tif 000058
2004506261.tif 000059
2004506261.tif 000060
2004506261.tif 000061
2004506261.tif 000062
2004506261.tif 000063
2004506261.tif 000064
2004506261.tif 000065
2004506261.tif 000066
2004506261.tif 000067
2004506261.tif 000068
2004506261.tif 000069
2004506261.tif 000070
2004506261.tif 000071
2004506261.tif 000072
2004506261.tif 000073
2004506261.tif 000074
2004506261.tif 000075
2004506261.tif 000076
2004506261.tif 000077
2004506261.tif 000078
2004506261.tif 000079
2004506261.tif 000080
2004506261.tif 000081
2004506261.tif 000082
2004506261.tif 000083
2004506261.tif 000084
2004506261.tif 000085
2004506261.tif 000086
2004506261.tif 000087
2004506261.tif 000088
2004506261.tif 000089
2004506261.tif 000090
2004506261.tif 000091
2004506261.tif 000092
2004506261.tif 000093
2004506261.tif 000094
2004506261.tif 000095
2004506261.tif 000096
2004506261.tif 000097
2004506261.tif 000098
2004506261.tif 000099
2004506261.tif 000100
2004506261.tif 000101
2004506261.tif 000102
2004506261.tif 000103
2004506261.tif 000104
2004506261.tif 000105
2004506261.tif 000106
2004506261.tif 000107
2004506261.tif 000108
2004506261.tif 000109
2004506261.tif 000110
2004506261.tif 000111
2004506261.tif 000112
2004506261.tif 000113
2004506261.tif 000114
2004506261.tif 000115
2004506261.tif 000116
2004506261.tif 000117
2004506261.tif 000118
2004506261.tif 000119
2004506261.tif 000120
2004506261.tif 000121
2004506261.tif 000122
2004506261.tif 000123
2004506261.tif 000124
2004506261.tif 000125
2004506261.tif 000126
2004506261.tif 000127
2004506261.tif 000128
2004506261.tif 000129
2004506261.tif 000130
2004506261.tif 000131
2004506261.tif 000132
2004506261.tif 000133
2004506261.tif 000134
2004506261.tif 000135
2004506261.tif 000136
2004506261.tif 000137
2004506261.tif 000138
2004506261.tif 000139
2004506261.tif 000140
2004506261.tif 000141
2004506261.tif 000142
2004506261.tif 000143
2004506261.tif 000144
2004506261.tif 000145
2004506261.tif 000146
2004506261.tif 000147
2004506261.tif 000148
2004506261.tif 000149
2004506261.tif 000150
2004506261.tif 000151
2004506261.tif 000152
2004506261.tif 000153
2004506261.tif 000154
2004506261.tif 000155
2004506261.tif 000156
2004506261.tif 000157
【国際公開パンフレット（コレクトバージョン）】
2004506261.tif 000158
2004506261.tif 000159
【国際公開パンフレット（コレクトバージョン）】
2004506261.tif 000160
【国際調査報告】
2004506261.tif 000161
2004506261.tif 000162
2004506261.tif 000163
2004506261.tif 000164
2004506261.tif 000165
2004506261.tif 000166
2004506261.tif 000167
2004506261.tif 000168
2004506261.tif 000169
2004506261.tif 000170