(57)【要約】  ここに示されているのは、コースグレインロジック素子からなる多次元アレイを含むデータ処理装置であって、このコースグレインロジック素子は、データを処理し、第１クロックレートで動作し、かつ互いに通信し、および／または第２クロックレートで動作するバスおよび／または通信ラインを介して別の素子と通信するデータ処理装置である。ここでは上記の第１クロックレートは第２クロックレートよりも高く、上記のコースグレインロジック素子は、処理しなければならないデータを記憶するための記憶手段を有する。
2007504688.tif 000002
【特許請求の範囲】
【請求項１】
コースグレインロジック素子（ＰＡＥ）からなる多次元アレイを含むデータ処理装置であって、
該コースグレインロジック素子は、データを処理し、第１クロックレートで動作して互いに通信し、および／または第２クロックレートで動作する通信ラインおよび／またはバスを介して別の素子と通信する形式のデータ処理装置において、
前記の第１クロックレートは第２クロックレートよりも高く、また
前記のコースグレインロジック素子は、処理しなければならないデータを記憶するための記憶手段を有することを特徴とする、
コースグレインロジック素子（ＰＡＥ）からなる多次元アレイを含むデータ処理装置。
【請求項２】
前記のアレイのデータ処理は、データフローと類似の方式で制御される、
請求項１に記載のデータ処理装置。
【請求項３】
前記のデータ記憶手段は、オペランドおよび／または中間結果を記憶するために適合されており、
エントリ毎に有効ビットが設けられている、
請求項２に記載のデータ処理装置。
【請求項４】
前記のアレイのコースグレイン論理素子のデータ処理を適合化して、所要のトリガおよび／またはデータのすべての有効ビットが有効であることに応答して作用を及ぼすようにした、
請求項１から３までのいずれか１項に記載のデータ処理装置。
【請求項５】
処理アレイにおいて、
該処理アレイは、主たるデータフロー方向を有しており、
該処理アレイは、コースグレインロジック素子を有しており、
該コースグレインロジック素子、例えばアップストリーム入力側およびデータダウンストリーム出力側を有するＡＬＵを適合化して、該コースグレインロジック素子により、前記の方向でデータが流れるようにしてデータ処理に作用が及ぼすようにし、
前記のコースグレインロジック素子のうちの少なくともいくつかは、逆方向のデータフローを可能にする第２ＡＬＵのようなデータ処理手段を有することを特徴とする、
例えば請求項１から４までのいずれか１項に記載の処理アレイ。
【請求項６】
１方向におけるＡＬＵに対する命令セットと、逆方向におけるＡＬＵの命令セットとは異なる、
請求項５に記載の処理アレイ。
【請求項７】
少なくとも１つのコースグレインロジック素子には１方向のＡＬＵと、逆方向のＡＬＵとが含まれる、
請求項５または６に記載の処理アレイ。
【請求項８】
処理装置において、
コースグレイン素子はバスに接続されており、
該コースグレイン素子の行はバスを介して相互接続されており、
少なくとも１つの入力側は上側の行に、また少なくとも１つの入力側はセルの下側で行に接続されており、および／または
当該接続が出力側に対しても成り立つことを特徴とする
処理装置。
【請求項９】
前記コースグレイン素子はバスに接続されており、
少なくとも２つの入力／出力バス接続部が１つの行に設けられており、
入力側および／または出力側の間のセグメントにゲートまたはバッファまたはマルチプレクサおよび／またはスイッチがバス構造体に設けられている、
請求項８に記載の処理装置。
【請求項１０】
処理アレイのルーティング方法において、
該方法を適合化して段階的に、接続できないトレースを無視するようにし、また１コンフィギュレーションおよび／または複数のコンフィギュレーションの別個のフラグメントを自動的に接続するようにしたことを特徴とする、
処理アレイのルーティング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリコンフィギャラブルコンピューティングに関連する。特に本発明はリコンフィギャラブルデバイスのアーキテクチャの改善に関連する。
【０００２】
リコンフィギャラブルデータプロセシングアレイはこの分野では周知である。本出願人による先行出願文献および／または先行公開文献の全ての内容は参照により本発明に組み込まれる。したがって以下に説明するデバイスは、コースグレイン計算素子および／またはデータ演算素子を含み、有利にはローディングユニット（ＣＴ，ＣＭなど）に対するリコンフィギュレーション性を表す信号に応じてその全体または一部を動作中にリコンフィギュレーションできるｎ＞１の多次元アレイであってよい。
【０００３】
現在これらのデータプロセシングアレイの幾つかが構築されている（例えばＸＰＰ１，ＸＰＰ１２８，ＸＰＰ２，ＸＰＰ６４）。ただし周知のデバイスやその演算方法の改善が所望される。
【０００４】
したがって、この課題を解決する複数の改善手段を以下に説明する。これらの手段は個々にまたは共同してデバイスのパフォーマンスを高め、電力消費および／またはコストを低減することができる。
【０００５】
周知のデバイスを改善する第１の手段は、個々のプロセッサ素子の機能を改善することである。以前からアレイにリングメモリ（RINGSPEICHER）を設け、このリングメモリ内に命令を記憶し、所定のリングメモリアドレスを指示するポインタを形成して次に実行すべき命令を選択させることが提案されている。また、少なくとも１つの“シャドウコンフィギュレーション”を形成し、複数のコンフィグレーションおよびシャドウコンフィギュレーションを切り換えることも提案されている。その他の付加的な提案には“ウェーブリコンフィギュレーション”と称される手段もある。
【０００６】
これらの周知の手法によりリコンフィギャラブルデバイスのパフォーマンスは改善されるが、さらなる改善の必要性および可能性があるように思われる。
【０００７】
以下の説明において詳細な例を挙げるが、例えばＰＡＥに関連するレジスタ数に対して、正確に同数のレジスタを備えたＡＬＵを設ける必要はないことを理解されたい。当該分野の技術者には、明示的な実施例に対する変更が容易に可能であること、詳細な説明はＰＡＥの例示に努めたものであって本発明を限定する意図で行われたのではないことが理解されるであろう。
【０００８】
１  ＸＰＰ ＸＰＰ−ＩＩに対する変更の概観
１．１  ＡＬＵ−ＰＡＥアーキテクチャ
ここで提案される改善されたアーキテクチャでは、ＰＡＥは例えば４個の入力ポートおよび４個の出力ポートを有する。各ＰＡＥにはＭＥＲＧＥ，ＳＷＡＰ，ＤＥＭＵＸ，ＥＬＵＴなどのデータフロー手段を備えたＦＲＥＧパスが組み込まれている。これは新たにＤＦパスと称される。
【０００９】
２個の入力ポートＲｉ０，Ｒｉ１は直接にＡＬＵに接続されている。２個の出力ポートはＡＬＵの結果を受け取る。入力ポートＲｉ２，Ｒｉ３は典型的には出力側がＲｏ２，Ｒｏ３であるＤＦパスへ供給される。これに代えて入力ポートＲｉ２，Ｒｉ３をＡＬＵに対する入力側として用いることもできる。こうした拡張は、後述するファンクションフォールディングＦｕｎｃｔｉｏｎ Ｆｏｌｄｉｎｇが使用される場合、適切な数のＡＬＵ入力側を設ける際に必要である。このモードでは出力側Ｒｏ２，Ｒｏ３は付加的な出力側として用いられる。
【００１０】
各データレジスタ（ＲｉまたはＲｏ）に対して１つのイベントポート（ＥｉまたはＥｏ）が存在する。
【００１１】
付加的なデータおよびイベントがＢＲｉ０−１，ＢＥｉ０−をバイパスするように構成することもできる（必須ではない）。判別はどれだけの頻度でファンクションフォールディングが使用されるか、また平均してどれだけの数の入力側および出力側が必要とされるかに依存してなされる。
【００１２】
【表１】
2007504688.tif 000003
【００１３】
１．１．１  その他の拡張
例えばグラフィクスおよびイメージングに対して８ｂｉｔ幅および１６ｂｉｔ幅のデータ語を支援するＡＬＵ内にはＳＩＭＤ演算がインプリメントされている。
【００１４】
例えば音声アルゴリズム、ビデオアルゴリズムおよびイメージングアルゴリズムに対するＡＤＤ／ＳＵＢ／ＭＵＬ命令に対しては飽和がサポートされている。
【００１５】
１．２  ファンクションフォールディング
１．２．１  基礎および入力／出力パラダイム
本章では、より良く理解してもらうために、ＸＰＰアーキテクチャの基礎演算パラダイムをＰＥＴＲＩ‐ＮＥＴに基づいて繰り返しておく。ＰＥＴＲＩ‐ＮＥＴに加え、より良く理解してもらうために、以下に現行のＸＰＰアーキテクチャの変更点を説明する。
【００１６】
ほとんどのアレイで各ＰＡＥはＰＥＴＲＩ‐ＮＥＴによって定義されたデータフローノードとして動作する（他の機能部分を有するアレイも存在するが、これらは標準のＰＡＥとは考えない）。ＰＥＴＲＩ‐ＮＥＴは複数の入力の計算をサポートし、単一の出力を形成する。ＰＥＴＲＩ‐ＮＥＴの特徴は全ての入力データが得られるまで演算が遅延されるということである。
【００１７】
ＸＰＰ技術では、これは
１．必要な全てのデータが利用可能となる
２．必要な全てのイベントが利用可能となる
ことを意味している。データおよびイベントの数量はデータアンドコントロールフローによって定義されている。利用可能であることは動作中にハンドシェイクプロトコルＲＤＹ／ＡＣＫにより表示される。
【００１８】
【表２】
2007504688.tif 000004
【００１９】
太線は演算を表し、右側の丸は全ての入力データが利用可能となるまで当該の演算が遅延されることを表している。
【００２０】
基礎的手法であるファンクションフォールディングを拡張することにより、１つの演算に代えて複数の演算がシーケンシャルにサポートされ、これがＣｙｃｌｅと称される。重要なのはＰＥＴＲＩ‐ＮＥＴの基礎が変更されないということである。
【００２１】
【表３】
2007504688.tif 000005
【００２２】
典型的なＰＡＥ状のＰＥＴＲＩ‐ＮＥＴは１演算当たり１つの入力パケットを消費する。シーケンシャル演算では同じ入力パケットの複数の読み出しがサポートされる。ただしインタフェースモデルは変更されないままである。
【００２３】
データの複製はＰＥＴＲＩ‐ＮＥＴの出力パスで行われ、演算の基礎には影響しない。
【００２４】
【表４】
2007504688.tif 000006
【００２５】
１．２．２  ファンクションフォールディングのメソッド
最も重要な拡張の１つは、複数のＰＡＥ機能を１つのＰＡＥ上にたたみ込み、シーケンシャルに実行させる手段である。この手段はシーケンシャル処理またはマイクロコントローラ手段をサポートしないことを理解されたい。ファンクションフォールディングの意図は複数のデータフロー演算を行い、各機能間のネットワークに代わるレジスタ構造を用いてこれらを単一のＰＡＥ上にマッピングすることである。
【００２６】
目的の１つにＰＡＥの局所的なクロック周波数にしたがって増大するシリコン面積を節約することが挙げられる。付加的に電力の節約も期待される。バスはクロック周波数の数分の１の速度で動作するからである。つまり多くの電力を消費するバスを介したデータ転送が低減される。
【００２７】
【表５】
2007504688.tif 000007
【００２８】
内部レジスタは種々の手段でインプリメントすることができる。例えば次の２つの手段が挙げられる。すなわち
１．データフローモデル
各レジスタｒ’はデータがレジスタに書き込まれると直ちにセットされ、読み出されると直ちにリセットされる有効ｂｉｔを有する。データは有効ｂｉｔがセットされると書き込むことができず、有効ビットがセットされないと読み出すことができない。このアプローチにより１００％互換性のあるデータフロー挙動がインプリメントされる。
２．シーケンサモデル
レジスタは関連する有効ｂｉｔを有さない。ＰＡＥはシーケンサとして動作し、ＰＡＥのエッジ（バス接続部）ではパラダイムがＸＰＰ状のデータフロー挙動へ変更される。
【００２９】
一見するとデータフローモデルが有利であるように思われるが、そこには大きな欠点が含まれる。その１つは、大量のレジスタが各データパスをインプリメントする必要があり、データの複製が煩雑で効率が悪いことである。また限定されたシーケンシャル演算によりプログラミングおよびハードウェアのコストを単純化できることも１つである。
【００３０】
ゆえに結果としてはシーケンサモデルがインプリメントされていると見なされる。純粋なデータフローは自動ツールを用いてたたみ込まれ、純粋なデータフローは自動ツールを用いてたたみ込まれるので、プログラマはデータフローパラダイム内にとどまり、付加的な手段に惑わされない。自動ツールは例えばレジスタ割り当て中にパラダイムに背反しないように注意していなければならない。
【００３１】
次表はシーケンサモデルを用いて４個ではなく２個のレジスタのみ必要とされるケースを表している。
【００３２】
【表６】
2007504688.tif 000008
【００３３】
例えばアドレス形成のような煩雑な機能および“ＩＭＥＣ”などのデータストリーム演算のアルゴリズムを可能にするために、ＰＡＥは４個の命令レジスタだけでなく８個の命令レジスタを有する。ただしバスクロックとＰＡＥクロックとの比の最大値は通常のファンクションフォールディングの係数４に制限されている。
【００３４】
新しいＰＡＥをサポートするファンクションフォールディングのサイズは最大２５％まで増大すると予測される。これに対してＰＡＥは４個から１個へ低減される。
【００３５】
平均して、最適化されるのではなく３個の機能のみが単一のＰＡＥにたたみ込まれ、ＸＰＰ６４がＸＰＰ２１によって置換されると見なされる。大きいほうのＰＡＥを考慮に入れると、ＸＰＰ６４ ＸＰＰ−ＩＩの機能は１／２より小さい面積のＸＰＰ ＸＰＰ−ＩＩＩ上で実行可能となる。
【００３６】
ファンクションフォールディングの方法および装置およびそのさらなる改善点を以下に詳細に説明する。
【００３７】
内部データレジスタおよびバス転送の等価性
ファンクションフォールディングコンセプトは
ａ）ＰＡＥ内でvon NeumanプロセッサおよびHavardプロセッサと同じ法則が通用するシーケンシャルモデル
ｂ）任意の順序でＰＥＴＲＩ‐ＮＥＴモデルデータが計算または演算されるＰＡＣＴ ＶＰＵモデル
の２つの異なるデータ処理モデルを実現している。
【００３８】
入力レジスタＩＲへのデータの到来が予測不能であるため、Ｒｃ０．．．Ｒｃｎ内の命令をリニアに実行しなければならない場合、デッドロックまたはパフォーマンスの少なくとも大幅な低下が起こる。特にＰＡＥ出力を入力側へ戻すフィードバック部が存在する場合、デッドロックが起こる。これは命令を所定の順序でなく処理能力にしたがって処理することにより回避できる。つまりＶＰＵモデルの全ての条件が満足されたら直ちに所定の命令を実行する。したがって、例えば到来するデータの全てのＲＤＹハンドシェイク、出発するデータの全てのＡＣＫハンドシェイク、また必要であればハンドシェイクを含む各トリガが有効になったとき、命令が実行される。ファンクションフォールディングＰＡＥ（ＦＦ ＰＡＥ）はデータを付加的に内部レジスタにも記憶するので、有利な実施例ではその有効性およびステータスを検査することもできる。こうして全ての内部データレジスタＲｄ０．．．Ｒｄｎには個別に有効データがレジスタ内に存在するか否かを表す有効ｂｉｔが割り当てられている。データがレジスタへ書き込まれるとき有効ｂｉｔがセットされ、読み出されるとき有効ｂｉｔがリセットされる。つまりデータは有効値がセットされているときにしか読み出すことができず、有効値がセットされていないときにしか書き込むことができない。有効値フラグはＲＤＹハンドシェイクおよびＡＣＫハンドシェイクの伝達によりバスシステムのステータスマシンで形成されたステータスにきわめて近似に相応する。このようにレジスタにステータスビットを形成する手段は有利であり、進歩的である。
【００３９】
したがってＰＥＴＲＩ‐ＮＥＴにきわめて類似した実行のための全ての条件が満足されたとき、命令を実行することができる。
【００４０】
基本的には命令の選択および実行の制御のための２つのメソッドが存在する。以下にこれを説明する。
【００４１】
メソッドＡ：ＦＦ ＰＡＥプログラムポインタ
（有限状態機械＆プログラムポインタアプローチ）
【００４２】
【表７】
2007504688.tif 000009
【００４３】
シーケンシャルプロセッサの制御方式にしたがって、プログラムカウンタは命令メモリ内の所定の命令を選択するために用いられる。有限状態機械はプログラムカウンタを制御する。この有限状態機械はＲＣ内の命令すなわちプログラムカウンタＰＣの指示する命令に対する全ての条件が満足されているか否かを検査する。そのために、命令の実行に必要な入出力の各ＲＤＹハンドシェイクおよびＡＣＫハンドシェイクが検査される。また読み出すべき内部レジスタＲｄ０．．．Ｒｄｎの有効値フラグがセットされているかどうかが検査され、さらに書き込むべき内部レジスタＲｄ０．．．Ｒｄｎの有効値フラグがセットされていないかどうかが検査される。１つでも条件が満足されていない場合には、命令は実行されない。プログラムカウンタＰＣはさらに計数するように制御され、当該の命令はスキップされ、次の命令が選択されて同様に検査される。
【００４４】
このメソッドの利点はシーケンシャルプロセッサモデルと互換性があることである。欠点は命令のテストおよびスキップの必要があることである。これらは所定の状況のもとではパフォーマンスの大幅な損失につながりうる。
【００４５】
メソッドＢ：ＦＦ ＰＡＥプログラムポインタ
（イネーブラ＆アービタアプローチ）
【００４６】
【表８】
2007504688.tif 000010
【００４７】
このメソッドはＲｃ０．．．Ｒｃｎ内の全ての命令を並列に実行する手段に基づいている。アレイ命令の完全な復号化にかかるコストを節約するために、各ＲＣには評価マスクフィールド内のエントリが割り当てられる。エントリの長さはテストすべきステータスの最大数に相応する。ゆえにＲｄ０．．．ＲｄＮ内で生じうるＲＤＹハンドシェイクおよびＡＣＫハンドシェイク（および各トリガのＲＤＹ／ＡＣＫ）ごとに、また有効ｂｉｔごとに、それぞれの信号がセットされているか否か、またはそれぞれの信号のステータスが命令の実行にとって重要でないかどうかを表す２つのｂｉｔが利用可能となる。
【００４８】
【表９】
2007504688.tif 000011
【００４９】
このマスクはエントリの一部を表しているのみである。ＩｎＴｒｉｇｇｅｒではトリガの２つのステータス（セットまたは非セット）および値（トリガ値）がＲＤＹ値によりテストされる。
【００５０】
例えばＬｉｎｅＣｏｎｔｒｏｌを介して全ての命令を並列にテストするテスト論理回路を以下に説明する。アービタを用いて、全ての実行可能な命令のセットのうち所定の命令が選択される。アービタは選択された命令のＰＡＥへの転送にしたがい、ＩＳｅｌを介して命令マルチプレクサを制御する。
【００５１】
ＬｉｎｅＣｏｎｔｒｏｌは１つの命令ごとにブールテスト論理回路のラインを有する。ＥｘＯＲゲートｅを介してテストすべき信号の値がラインのｅｍ内の設定に対して検査される。ＯＲゲート＋を介して、検査信号を関連するものとするか（または無視するか）の選択が行われる。全ての検査信号の結果がＡＮＤ結合される。ＡＮＤゲート＆の出力側の論理１は実行可能な命令を表している。ＲＣごとに種々のテストラインが存在する。全てのテストラインが並列に評価される。生じうる複数のインプリメンテーションのうちの１つを有するアービタ、例えば優先アービタ、ラウンドロビンアービタなどにより、実行可能な全ての命令のうち実行すべき所定の命令が選択される。別のインプリメンテーションも可能であることは当該分野の技術者には明らかである。変形実施例は本発明の動作および機能の点で広く等価である。特に否定論理回路を使用する手段について言及しておく。
【００５２】
【表１０】
2007504688.tif 000012
【００５３】
次表は回路全体の概略を表している。
【００５４】
【表１１】
2007504688.tif 000013
【００５５】
このメソッドの利点は、
‐１つの命令が１クロックごとに実行されるということから大幅な高速化が達成され、
‐無視されたサイクルでエネルギが無駄にならず、特に定常的な電流消費に対して有利に電流消費量が低減され、さらに
‐中小サイズのコンフィギュレーションメモリＲＣを使用すれば、シーケンシャル手段と同様のハードウェアコストひいては同様の費用しかかからない
ということである。
【００５６】
このメソッドの欠点は、
‐大きなＲＣでは大幅にコストが高く、したがって所定のアプリケーションセットに適用するには最適化が必要となり、
‐シーケンサモードをインプリメントするには（アプリケーションの他の部分参照）、ＦＳＭを有するプログラムカウンタを設けなければならない
ということである。ただし後者の場合、ＦＳＭのタスクはシーケンサのタスクに制限されるので、付加的なコストおよび費用はそれほど大きくはならない。
【００５７】
従来技術によるデポピュレーテッドバス
所定のＰＡＥに割り当てられた全てのバスはＰＡＥの入力レジスタＩＲに接続されており、またＰＡＥの出力レジスタは全てのバスに接続されている（例えば独国出願第１００５０４４２．６号明細書または本出願人によるXPP/VPU-handbookを参照）。
【００５８】
ＰＡＥ、特にＦＦ ＰＡＥプログラムポインタは、周知の従来技術のＸＰＰに比べて多くのＩＲ／ＯＲが利用可能である場合、バス相互接続のデポピュレーションを行えるように実現されている。デポピュレーション、すなわちＩＲまたはＥＲをバスに接続する手段の低減は対称または非対称である。デポピュレーションは典型的には２０〜７０％の量まで行われる。デポピュレーションがアルゴリズムの相互接続性および／またはルーティング性に悪影響をほとんどまたは全く与えない点が重要である。
【００５９】
デポピュレーションの手法は特に複数の結果が得られるという観点から重要である。バスシステムのハードウェアコストおよびその費用を大幅に低減することができる。接続ポイントが最小数となり、ゲート遅延が低減されるので、バス速度は増大される。同時にバスの電力消費量も低減される。
【００６０】
従来技術のＶＰＵアーキテクチャにしたがった有利なデポピュレーションは、次表の回路よりも多くの入力レジスタＩＲおよび出力レジスタＯＲを有している。
【００６１】
【表１２】
2007504688.tif 000014
【００６２】
特に、２つの隣接するＰＡＥの隣接データ転送の可能なバスアーキテクチャの付加的な拡張について言及しておく。ここで、所定のＰＡＥの出力側ＯＲは直接に専用バスに接続されており、このバスは隣接するＰＡＥの入力側ＩＲへ接続されている（次表を参照）。次表には水平方向の隣接バスが示されているが、一般には垂直方向のバスも可能である。
【００６３】
図中、影付きの丸は可能なバスへの接続部ＭＵＸを表し、二重丸はバスからの接続部ＤｅＭＵＸを表す。
【００６４】
ＰＡＥ入出力の変更
次表にはＸＰＵ１２８、ＸＰＰ６４Ａとして知られる従来技術のＰＡＥインプリメンテーションが示されている。これは独国出願第１００５０４４２．６号明細書に記載されているものである。
【００６５】
周知のＰＡＥはＰＡＥコアのメインＡＬＵへの上下方向でのメインデータフローを有する。図の左方および右方には、付加的に配置されたデータチャネル、すなわちメインデータフロー方向に沿って順方向にデータを送信するデータチャネルＦＲＥＧとその反対方向にデータを送信するデータチャネルＢＲＥＧとが示されている。ＰＡＥの両わきにはＰＡＥのメインデータフローに対して逆方向に動作するデータバスが設けられており、これにＰＡＥおよびＦＲＥＧ，ＢＲＥＧが接続されている。従来技術のアーキテクチャは、典型的な適用分野では、ＰＡＥごとに８個のデータバスおよび４個のＦＲＥＧ／ＢＲＥＧ用の転送チャネルを必要とする。
【００６６】
【表１３】
2007504688.tif 000015
【００６７】
従来技術のバスシステムはＰＡＥの両わきにスイッチング素子、レジスタ素子Ｒを有している。スイッチング素子はバスセグメントの中断または隣接バスに対する分離を行い、レジスタ素子は高い転送帯幅を得るためにデータ転送により効率的なパイプライニングを行う。隣接転送に対する典型的な垂直方向でのレイテンシはセグメント当たり０であるが、水平方向ではセグメント当たり０．５〜１であり、しかも高周波数である。
【００６８】
【表１４】
2007504688.tif 000016
【００６９】
修正ＰＡＥ構造が提案される。ここでは異なるメインデータフロー方向を有する２つのＡＬＵが各ＰＡＥ内に設けられており、ルーティング性が大幅に改善される。一方ではルーティングに使用されるツールが改善および簡単化され、他方ではハードウェアリソースの大幅な低減が達成される。第１のテストでは水平方向で必要なバス数が従来技術の約２５％まで低減された。ＦＲＥＧ／ＢＲＥＧ（ＢＹＰＡＳＳ）での垂直方向の接続部は約５０％まで低減されている。また独国出願第１００５０４４２．６号明細書で必須であったようなＦＲＥＧとＢＲＥＧとのあいだの区別ももはや必要ない。
【００７０】
【表１５】
2007504688.tif 000017
【００７１】
ダブルＡＬＵ構造をさらに発展させて両方向の入力側および出力側を有するＡＬＵ‐ＰＡＥが開発されている。自動ルータおよび手動でルーティングされるアプリケーションを用いて、さらに重要なネットワークトポロジの改善が認められる。バス数は必然的に従来技術の約５０％まで低減され、ＦＲＥＧ／ＢＲＥＧでの垂直方向の接続部の数は約７５％まで低減される。
【００７２】
【表１６】
2007504688.tif 000018
【００７３】
従来のＡＬＵにもファンクションフォールディングのＡＬＵにも利用可能な有利な実施例では、レジスタ素子およびスイッチング素子を、ＰＡＥの両わきではなく中央のバス内に配置することができる（次表を参照）。
【００７４】
【表１７】
2007504688.tif 000019
【００７５】
このように、高周波数に対しても、レジスタ素子を介することなく、データを水平方向で相応の隣接するＰＡＥに伝達することができる。こうして、レイテンシフリーの隣接コネクションを垂直方向および水平方向に形成することができる（従来技術および前述のデポピュレーテッドバスを参照）。相応の表に示されている相互接続の例は垂直方向および水平方向で左方から右方へゼロレイテンシの転送を可能にする。ＰＡＥインタフェース構造の最適化により水平両方向でのレイテンシフリーの隣接転送が達成される。ＰＡＥの各コーナーにバスからの入力レジスタＩＲ（バスからＰＡＥへの矢印）およびバスへの出力レジスタＯＲ（ＰＡＥからバスへの矢印）がインプリメントされている場合には、隣接する各ＰＡＥはレイテンシフリーでデータを交換することができる（表を参照）。
【００７６】
【表１８】
2007504688.tif 000020
【００７７】
上のＰＡＥの構成をさらに最適化することもできる。これは全てまたは一部のＰＡＥで個別のバイパスを使用しないことにより行われる。有利な実施例では、２つのＡＬＵが設けられる。第１のＡＬＵは“完全な”ＡＬＵであり、例えばＭＵＬｔｉｐｌやＢａｒｒｅｌＳｈｉＦＴなどの必要な機能の全てを有する。いっぽう第２のＡＬＵでは命令セットが低減されており、大きなアレイを必要とするＭＵＬｔｉｐｌやＢａｒｒｅｌＳｈｉＦＴなどの機能は消去されている。第２のＡＬＵはＢＹＰＡＳＳを置換するように配置される（表を参照）。スイッチング素子内にレジスタを配置することのできるバスシステム当たり複数の位置が存在するが、そのうち有利なバス当たり２つの位置が次の表１２に点線で示されている。
【００７８】
【表１９】
2007504688.tif 000021
【００７９】
２つのＡＬＵはバイパス機能をインプリメントするために、バス間でデータを転送する付加的な回路を有する。複数のインプリメンテーションが考えられるが、以下にそのうち２つの手法を例として挙げる。
ａ）マルチプレクサ
ＡＬＵ内のコンフィギャラブルマルチプレクサは、ＡＬＵ入力側がＡＬＵをバイパスして出力側に直接接続されるように接続されている。
ｂ）ＭＯＶＥ命令
Ｒｃ０．．．Ｒｃｎ内に記憶されているＭＯＶＥ命令とは、ファンクションフォールディングの相応の処理クロックにおいてデータを命令の専用入力にしたがって専用出力側へ転送させる命令である。
【００８０】
スーパースカラリティ／パイプライニング
例えば、ＭＵＬオペコードを使用する場合であっても、バスクロック当たり２，４，８つの演算を計算するスーパースカラＦＦ  ＡＬＵ−ＰＡＥ，＠ＦＦ＝２，４，８を大まかに提供することは可能であり、また性能を改善する第１の方法として提案される。
【００８１】
基本的な考え方は、各内部レジスタのVALIDフラグを使用することである。ＭＵＬは、２つの段階にわたってパイプライニングされる単一のオペコードとして実現される。
【００８２】
ＭＵＬは、そのオペランドを、入力レジスタＲｉから取り出して、結果を内部レジスタＲｄに格納する。データがＲｄに格納されると、VALIDがセットされる。ＡＤＤ（または別の任意のオペコード、例えばＢＳＦＴ）は、VALIDがセットされている場合、Ｒｄ内の結果を使用する。ここでこれが行われるのは、指定されたVALIDの動作にしたがって実行がスキップされない場合である。またＰＡＥコンフィギュレーション内でＭＵＬ命令が使用される場合、すべてのオペコードに対してタイミングが変更される。このようなケースでは、ふつうは単一サイクルであるオペコードはすべて、パイプライニングされた２サイクルオペコードに変わる。この変更は、バイパス可能なマルチプレクサをデータストリームにも、制御にも挿入することによって達成される。
【００８３】
つぎのプログラムを詳細に説明する。
【００８４】
MUL  (Rd0, Rd1), Ri0, Ri1;
ADD  Ro0, Rd1, Ri2;
コンフィギュレーション後の最初のバスサイクル（ｔ０）において、（Ｒｉ０／１においてデータが利用可能であると仮定すると）ＭＵＬが実行される。レジスタペアＲｄ０／１は、このバスサイクル間中、つまり２つのＦＦ−ＰＡＥ内部クロックサイクル中、無効である。したがってＡＤＤは、２番目のクロックサイクルにおいて実行されない。ｔ０の後、ＭＵＬの結果は、このレジスタペアに書き込まれ、そのVALIDフラグは同時にセットされる。
【００８５】
ｔ１では新たなデータが乗算される。Ｒｄ０／１に対してVALIDがセットされているため、ここではＡＤＤ命令が２番目のクロックにおいて実行されるが、実行全体に対して２クロックサイクルかかる。したがって２つの演算、ＭＵＬ対してもＡＤＤに対しても共にオペランドの読み出しおよび結果の書き込みはインライン式なのである。
【００８６】
ＭＵＬ−ＡＤＤの組み合わせの結果は、ＦＦ＝２  ＡＬＵ−ＰＡＥにおいて２サイクルレイテンシで得られる。ＦＦ≧６に対してレイテンシは挿入されない。
【００８７】
しかしながら乗算および他のすべての命令は並列に処理されるため、このマシンは、いかなる付加的な遅延もなくつぎに流れていくのである。
【００８８】
【表２０】
2007504688.tif 000022
【００８９】
実行のために２クロックサイクルを要するオペコード（例えばＢＳＴＦ）がＭＵＬの他にある場合、このアーキテクチャを変更して、２番目の内部クロックサイクルの後、レジスタに少なくとも３つのデータを書き込めるようにしなければならない。
【００９０】
データパス出力マルチプレクサは２倍になり、また出力レジスタ（ＯＲ）へのバスシステムおよび内部データレジスタ（Ｒｄ）へのフィードバックパスも同様に２倍になる。
【００９１】
オペコードに対して相応に定めれば、複雑さを増すことなく４つよりも多くの内部レジスタを使用することができる。これはイネーブル（ｅｎ）を使用して、データを書き込み特定のレジスタを選択することに行われる。複数のレジスタ、例えばＲｄ０，Ｒｄ４，Ｒｄ８，Ｒｄ１２を同じバスに接続することができる。しかしながらレジスタ転送のすべての組み合わせがこの構造によって可能なのでない。例えば、ＭＵＬによってＲｄ０およびＲｄ１が使用される場合、つぎのレジスタ、すなわちＲｄ４，５，８，９，１２，１３は、並列に実行されるオペコードに対してブロックされるのである。
【００９２】
レジスタマップ：
【００９３】
【表２１】
2007504688.tif 000023
【００９４】
データパスアーキテクチャ：
【００９５】
【表２２】
2007504688.tif 000024
【００９６】
シーケンサＰＡＥ
ＸＰＰ  IIIにおいてもコントロールフローが支配的なアプリケーションを実行できるようにしたいというニーズがあるため、シーケンサＰＡＥを導入する。このようなＰＡＥは、ＸＰＰ内でシーケンシャルなコードを実行可能な極めて単純な形のプロセッサとみなすことができる。これにより、Ｈ．２６４コーデックのようなコントロールフロー優位のアプリケーションをアレイ上に効率的に実現することができる。これに対してＳＥＱ−ＰＡＥがなければ、この実現は一層困難になり、資源が一層消費されることになる。
【００９７】
ＳＥＱ−ＰＡＥは、ゼロから構成されるのではなく、ＡＬＵ−ＰＡＥと、隣のＲＡＭ−ＰＡＥとを密接に結合することによって、つぎの表に示されているタイルが形成されるのである。
【００９８】
【表２３】
2007504688.tif 000025
【００９９】
このため、ＡＬＵ−ＰＡＥの機能もＲＡＭ−ＰＡＥの機能も共に拡張して、このようなＳＱＥ−ＰＡＥの要求を満たすことができるようにしなければならないのである。この情報についてはつぎに示す。
【０１００】
ＡＬＵ−ＰＡＥの拡張
拡張したＡＬＵ−ＰＡＥはつぎの表に示されている。右側の縁部には別のモジュールを制御するレジスタが見える。これらのレジスタは、通常モードでもＳＥＱモードでも共に使用される。したがってローカルのコンフィギュレーションマネージャおよびＲＡＭ−ＰＡＥからの適切な制御信号が、まずＯＲゲートによってマージされ、つぎにこれらレジスタに転送される。ここで保証しなければならないのは、通常モードにおいてＲＡＭ−ＰＡＥからの信号は０であり、またこの逆が成り立つことである。
【０１０１】
さらにＡＬＵ−ＰＡＥは、小さなプロセッサの実行部の特徴を有するため、内部レジスタに、また内部レジスタからＲＡＭに直接、値を転送する必要がある。このために付加的なマルチプレクサＡＭ１がセクション２のマルチプレクサ階層構造に挿入される。通常モードにおいてこのマルチプレクサは、先行するステージからつぎのステージにワードを供給する。これに対してＳＥＱモードではＩｍｍによってイミディエート値が供給される。ここではレジスタの機能が発揮される。これに加えてＳＥＱモードではマルチプレクサの出力側を介して、複数の内部レジスタのうちの１つの内部レジスタの値をＲＡＭ−ＰＡＥに供給することができる。しかしながら「LOAD reg, imm」を提供することも考慮しなければならない。それはこれが「ADD reg, reg, imm」よりも格段に遅い訳ではないからである。
【０１０２】
ＲＡＭ−ＰＡＥがＡＬＵ−ＰＡＥの内部レジスタにデータを書き込めるようにするため、別のマルチプレクサをセクション４のマルチプレクサのチェーンに挿入する。上に示したシナリオと同様にこのマルチプレクサはＳＥＱモードだけで起動される。これに対して通常モードではこのマルチプレクサは、先行するステージのデータを転送するだけである。有利な実施形態では、遅延を考慮してＢＳＴＦ−Ｍｕｘの後にＲＳ２を配置することが提案される。データはこれを介して内部レジスタに書き込むことができる（LOAD reg, imm）。
【０１０３】
【表２４】
2007504688.tif 000026
【０１０４】
すでに述べたように選択した算術機能に依存して１または２サイクルの間にＡＬＵ−ＰＡＥによってデータを処理することができる。ＸＰＰの自動同期化機能に起因して、また通常モードでは前の演算が終了する前に、つぎの演算が開始されることはないという事実に起因して、実際には演算が１サイクル続くかまたは２サイクル続くかはどちらでもよいのである。これに対して上記のタイルがＳＥＱモードで動作する場合、パイプラインの特性を有することを仮定するため、どちらでもよいということにはならない。すなわち、１サイクル演算は、２サイクルモジュールと並列に動作することができ、ここでこの演算は、この場合にステージ２で実行されることになる。ワード（１６ビット）の多重化能力は限られているため、接続されてレジスタには１つの結果しか書き込むことができず、別の結果は失われることになる。一般的にはこの問題を解決するのにつぎの３つの可能性がある。
【０１０５】
最初の可能性として考えられるのは、コンパイラがこの問題を処理できるようにすることである。このことが意味することになるのは、ＳＥＱ−ＰＡＥ全体およびタイルのパイプライン構造について詳細にわかっていければならないことである。並列実行を防ぐため、上記の構造に対して、コンパイラは、２サイクル命令毎に１つのＮＯＰを加えなければならない。しかしながらこのアイデアは、ハードウェア構造とコンパイラとの間の極めて密接な関係のため、有利ではないと考えられる。欠点として考えられるのは、ハードウェアを変更する毎に新たな構造にコンパイラを整え直さなければならない可能性が極めて高いことである。
【０１０６】
第２のアイデアは、パイプラインのデコードステージにおいてこのような状況を識別することと考えられる。２サイクル命令の後に、１ステージ算術ユニットにアクセスする命令が直に続く場合、これも同様に１クロックサイクルだけ遅延させなければならない。
【０１０７】
最後の可能性は、完全なＡＬＵ−ＰＡＥが、２ステージの実行ユニットに見えるようにすることである。したがってセクション４のマルチプレクサチェーンにおいて、２ステージモジュールの１ステージを分離するマルチプレクサからの交差部の直後に１レジスタだけを含めるだけでよいのである。明らかにこのようにすることが望ましい。
【０１０８】
最後の２つのアイデアを比較すると、１つのレジスタだけを挿入すればよいため、３番目のアイデアが最善であると考えられる。第２の解決手段を詳しく検討すると、命令の許容されない組み合わせを解析するための固有のロジックも、命令の遅延およびプログラムカウンタ（ＰＣ）を停止するためのロジックも共に必要になる。ここで想定しなればならないのは、このロジックにはレジスタよりもはるかに大きな面積が必要であり、またこのロジックの遅延により、クリティカルパスが増えることである。
【０１０９】
１サイクル実行をなお利用可能とすべきである通常モードとＳＥＱモードとの区別をしければならない。このような可能性は、相応する表（表２４）に示したようにＲＳ２レジスタのバイパスを可能にするマルチプレクサによって得られる。
【０１１０】
ＲＡＭ−ＰＡＥ
各ステージの手短な説明
ＳＥＱ−ＰＡＥを動作させるため、さらに一層機能を設けなければならない。ここではＲＡＭ−ＰＡＥがそれを担当している。シーケンサを実現するための最初のアプローチとして、４ステージパイプラインを選択した。これらのステージは、表２５に示されているように、
・  フェッチステージ
・  デコードステージ
・  実行ステージ１
・  実行ステージ２
である。
【０１１１】
上記のフェッチステージでは、つぎのクロックサイクルに対するプログラムカウンタが計算される。すなわち、このプログラムカウンタはローカルの加算器を介して１だけインクリメントされるか、または上記のデコードステージまたは実行ステージ２から得られるプログラムカウンタのうちの１つが選択されることになる。ここで実行ステージのプログラムカウンタは、コール命令が生じた場合にアドレスを供給するのに対して、実行ステージのこのプログラムカウンタは、条件ジャンプがある場合にＰＣを供給する。ここで分岐アドレスは、目下のＰＣと、イミディエート値またはＡＬＵ−ＲＡＭの内部レジスタから得られる値（間接アドレッシングモード）のいずれかの値とから計算することができるか、または絶対値である。これは例えば、サブルーチンから前のコンテキストへの復帰がある場合には必要であり、これに対して相応する絶対的なＰＣは、スタックバンクによって供給される。
【０１１２】
上記のデコードステージではコードバンクから到来する命令がデコードされる。所要の制御信号が生成され、また必要であれば内部実行ステージ１に対するイミディエート値も、ＡＬＵ−ＰＡＥの実行ステージ１に対するイミディエート値も共に生成される。これらの信号には、ＡＬＵ−ＰＡＥのセクション２のゲーティングステージおよびマルチプレクサに対する制御情報と、例えば符号付きまたは符号なし乗算の選択であるＡＬＵタイルの演算選択と、つぎのステージにおいて命令がコールまたはジャンプであることに依存してスタックポインタ（ＳＰ）をインクリメント／デクリメントするか、または変更しないままにすべき否かについての情報が含まれている。コール命令が発生した場合、新たなＰＣが並列に計算されて、フェッチステージに供給される。
【０１１３】
さらにロード命令の場合、データバンクへの読み出しアドレスおよび読み出しイネーブル信号が生成される。
【０１１４】
場合によってはＡＬＵにおいてもＲＡＭ−ＰＡＥにおいても利用可能な第１ステージである実行ステージ１では、ＡＬＵ−ＰＡＥの実行ステージ２に対する制御信号が生成される。これらの信号は、複数の算術タイルのうちの１つの正しい出力が選択されて、イネーブルされたレジスタにこれが書き込まれるようにする。この命令が条件ジャンプまたはリターンである場合には、このステージでスタックポインタが変更される。これと並行して分岐の場合には目下のＰＣが、Rsp EX1レジスタによって示されるアドレスでスタックバンクにセーブされることになる。そうでなければ、リターンの場合、読み出しアドレスも、読み出しイネーブル信号も共にこのスタックバンクに供給される。
【０１１５】
実行ステージ２ではジャンプの場合、ＰＣの値が計算されてフェッチステージにおいてマルチプレクサに供給される。ＡＬＵからのデータをセーブしなければならない場合、この時点で書き込みアドレスおよび書き込みイネーブル信号が形成される。
【０１１６】
２つの加算器の代わりにｒｐｐパスに１つの加算器だけを設けることが可能である。
【０１１７】
【表２５】
2007504688.tif 000027
パイプラインアクション
以下のセクションでは上記の４つのステージにおいて実施されるアクションの手短な概要をいくつかの基本的な命令に対して示す。これはパイプラインの動作を理解するために一助となるはずである。ここで述べようとする命令は、命令レジスタにおいて利用可能であり、フェッチステージのアクションはここでは省略する。
【０１１８】
ＩＲ：命令レジスタ
ＤＲ：データレジスタ
ＤＢ：データバンク
ＳＢＲ：  ストア／ブランチレジスタ
命令：  データバンクからＲ[ｎ]に値をロードする
【０１１９】
【表２６】
2007504688.tif 000028
【０１２０】
命令：R[ｎ]からデータバンクに値を格納する
【０１２１】
【表２７】
2007504688.tif 000029
【０１２２】
１．３  アレイ構造
従来技術と比較した場合の第１の利点は、ファンクションフォールディングＰＡＥを使用することによって得られる。これらのＰＡＥも、別のＰＡＥも共に改良することができる。
【０１２３】
ＰＡＥのＸＰＰ−II構造は、ＦＲＥＧおよびＢＲＥＧに対して、またこれらの関連したバスインターフェースに対して一層大きな面積を消費する。またこれに加えてＦＲＥＧを介するフィードバックには、フィードバックパスへのレジスタの挿入が必要である。これはレイテンシを増やすだけでなく、ＸＰＰのスループットおよび性能にマイナスの影響を与えることになる。
【０１２４】
レイテンシが最小化され、またバス相互接続構造が最適化されて、最適化された面積が達成させることを期待して、新しいＰＡＥ構造およびその配置を提案する。
【０１２５】
ＸＰＰ−III ＰＡＥ構造にはもはやＢＲＥＧは含まれていない。この代用として複数のＡＬＵは水平方向に交互に上下反転され、これによって配置および殊にフィードバックパスに対するルーティング能力、例えばループのルーティング能力が改善される。
【０１２６】
各ＰＡＥはここでは、１つは上から下に向かい、別の１つは上下反転されて下から上に向かう２つのＡＬＵおよび２つのＢＰパスを含んでいる。
【０１２７】
【表２８】
2007504688.tif 000030
【０１２８】
１．４  バスの変更
この章では、所要の面積およびバスの量を低減し得る複数の最適化を説明する。これらの変更にはいくつかの提案が含まれている。それはこれらの変更は実際のアルゴリズムに基づいて評価しなければならないからである。例えば、アンケートを作成して、アプリケーションプログラムからの所要のインプットを集めることが可能である。
【０１２９】
１．４．１  隣接ＰＡＥ
ＸＰＰ−IIアーキテクチャでは、２つのＰＡＥブロック間にある水平方向の直接のデータパスは、垂直方向データバスである。この結果、ＸＰＰ内で必要な垂直方向のバスが増大し、コストも不必要に高めている。このためＸＰＰ−IIIでは水平方向のＰＡＥ間に直接のフィードパスを提案する。
【０１３０】
さらに、長さの異なる水平方向バス、すなわち隣接する２つのＰＡＥにわたる水平方向バス、４つのＰＡＥを横切る水平方向バスが提案される。
【０１３１】
１．４．２  バスのレジスタの除去
ＸＰＰ−IIでは垂直方向のバスに複数のレジスタが設けられており、これらレジスタは、より一層長いパスに対してコンフィギュレーションによってスイッチオン可能である。さらにこれらのレジスタは、コンフィギュレーションによってプリロード可能であり、これによって極めて大きな量のシリコン面積が必要である。ここで提案されるのは、もはやバスにレジスタを実装せずに、ＰＡＥ内の拡張されたＤＦまたはバイパス（ＢＦ）部を使用することである。このＰＡＥは、ＤＦまたはＢＰの内部レジスタを代用することによって、パスを同じバスに再ルーティングすることができる。
【０１３２】
【表２９】
2007504688.tif 000031
【０１３３】
ここではこれらのバスに対してどのくらいの資源が節約されるか、またＰＡＥに対してどのくらい資源が必要であるか、および／またはどの程度レジスタを挿入しなければならないか、ＰＡＥ毎に１つまたは最大２つのパス（ＤＦ／ＢＰによって最大２つの入力が得られるため上限は２つである）は十分であるか否かなどを決定しなければならないと思われる。
【０１３４】
１．４．３  バスからＰＡＥへのｎ：１，１：ｎシフト機能
ＸＰＰ−IIではｎ：１および１：ｎのトランジションはバスによってサポートされており、これには極めて大量の資源が必要である。すなわちハンドシェーク信号のサンプルアンドホールドステージに対して大量の資源が必要なのである。
【０１３５】
ｎの大きさに依存して新しいＰＡＥ構造には、相異なる２つの機能が設けられている。すなわち、
ｎ ≦ ２        要求された演算はＰＡＥのＤＦパス内で行われる
２ ≦ ｎ ≦ ４  ４つのポートが必要なためＡＬＵパスが必要である
ｎ ＞ ４        複数のＡＬＵを組み合わせなければならない
のである。
【０１３６】
このような手法によってシリコンにおけるスタティックな資源が極めて大量に節約されるが、ランタイムに専用のＰＡＥ資源が必要である。
【０１３７】
ここで有益であると考えられるのは、バス当たりにどのくらいのシリコン面積が節約されるか、ｎ ＝ ２，２ ≦ ｎ ≦ ４，ｎ ＞ ４がどのくらいの頻度で発生するか、節約されたシリコン面積と、必要なＰＡＥ資源との間の比を評価することと、これらの判定条件のうちの１つまたはすべてに応じて正しいバス構造を決定することである。
【０１３８】
１．５  ＲＡＭ−ＰＡＥのＦＳＭ
ＸＰＰ−IIアーキテクチャにおいて制御構造の実現には極めてコストがかかり、多くの資源を要し、またプログラミングも極めて複雑である。
【０１３９】
しかしながらメモリを使用して簡単にＦＳＭを実装することができる。ＲＡＭ−ＰＡＥをつぎのように拡張することにより、ＨＤＴＶを含めた制御についての既知の多くの課題に対して安価かつプログラム容易な解決手段が提供される。
【０１４０】
【表３０】
2007504688.tif 000032
【０１４１】
基本的にＲＡＭ−ＰＡＥは、レジスタ（ＦＦ）を介するデータ出力側からアドレス入力側へのフィードバックの分だけ機能拡張され、これによって各ステージ内で後続のアドレスが提供される。さらにＰＡＥアレイからの付加的なアドレス入力側によって、付加的なジャンプが発生し、データ出力側によってＰＡＥアレイに対するイベント信号が生成される。メモリ出力側によってステップが設定されまたリロード可能の関連づけられたカウンタにより、条件付きジャンプ（すなわち、ビデオ画像の行の終わり（end of line）、フレームの終わり（end of frame））に対するアドレス入力が生成される。
【０１４２】
典型的なＲＡＭ−ＰＡＥの実装では、データビットは約１６〜３２個であるが、アドレスビットはわずかに８〜１２ビットである。このため、入力ベクトル範囲を最適化するために提案されるのは、アドレス入力側にいくつかのマルチプレクサを挿入して、複数のベクトル間で選択できるようにすることである。ここでこれらのマルチプレクサは、出力データビットのうちのいくつかビットによって制御される。
【０１４３】
２４ビット幅のデータバスを有するＸＰＰについての１つ実装が、つぎの表３１に概略的に示されている。ここでは４つのイベント入力と、入力ポートＲｉ０の低位４ビットが入力として使用されている。また３つのカウンタが実装されており、４つのイベントもＲｏ０ポートの低位１０ビットも共に生成される。
【０１４４】
ここで示されるメモリ編成は、つぎのようなものになる。すなわち、
８  アドレスビット
２４  データビット（２２ビットを使用）
４  次アドレス
８  マルチプレクサセレクタ
６  カウンタ制御（付加的な４ビットの次アドレスと共用）
４  出力
【０１４５】
【表３１】
2007504688.tif 000033
【０１４６】
このＲＡＭ−ＰＡＥの通常のメモリモードはこのブロック図に示されていないことに注意されたい。
【０１４７】
カウンタの幅は、データバスのバス幅にしたがう。
【０１４８】
１６ビットの実装に対して提案されるのは、カウンタのキャリー信号を、それ自体のリロード信号として使用することであり（自動リロード）、またいくつかのマルチプレクサは、メモリによって駆動されるのではなく、コンフィギュレーションによって「ハードワイヤード」される。
【０１４９】
ここで提案されるメモリ編成はつぎのようになる。すなわち、
８  アドレスビット
１６  データビット（１６ビットを使用）
４  次アドレス
４  マルチプレクサセレクタ
３  カウンタ制御（付加的な３ビットの次アドレスと共用）
４  出力
【０１５０】
【表３２】
2007504688.tif 000034
【０１５１】
１６ビットの実装と、２４ビットの実装とは異なるため、ふつうのＲＡＭ−ＰＡＥは実際にはさらにスケーリングすることはできないことに注意されたい。２４ビットに対して、余計なもの省いた１６ビットの実装を使用するか否かを決定すべきである。
【０１５２】
１．６  ＩＯＡＧインタフェース
１．６．１  アドレス発生器およびビット反転アドレッシング
ＩＯインタフェースに実現されるのは、いかなるＡＬＵ−ＰＡＥ資源を使用することなく、例えば１〜３次元の直接のアドレッシングをサポートするアドレス発生器である。この場合にアドレス発生は３つのカウンタによって行われ、各カウンタは例えばコンフィギュレーション可能なベースアドレスと、長さと、ステップ幅とを有する。
【０１５３】
第１のカウンタ（ＣＮＴ１）は、ＡＬＵ−ＰＡＥのアレイによって制御されるステップ入力側を有する。そのキャリーはＣＮＴ２のステップ入力側に接続されており、さらにそのキャリーはＣＮＴ３のステップ入力側に接続されている。
【０１５４】
コンフィギュレーションされた長さと上記の値とが等しい場合、各カウンタによってキャリーが生成される。キャリーに伴ってカウンタは、コンフィギュレーションされたそのベースアドレスに直ちにリセットされる。
【０１５５】
１つの入力側は、ＡＬＵ−ＰＡＥのアレイからのアドレス専用であり、これはカウンタの値に加算することが可能である。１つ以上のカウンタが使用されない場合、これらはゼロにコンフィギュレーションされる。
【０１５６】
さらにＣＮＴ１は、複数のキャリーモードを供給することによって、ビット反転アドレッシングの生成をサポートする。
【０１５７】
【表３３】
2007504688.tif 000035
１．６．２  相異なるワード幅のサポート
一般的にＰＡＥアレイ内では複数のワード幅をサポートする必要がある。８および１６ビット幅のデータワードが、多くのアルゴリズムに対して、すなわちグラフィックに対して有利である。すでに述べたＳＩＭＤ演算に加えて、ＩＯＡＧにより、上記のような比較的短いデータワードの分割およびマージが可能になる。
【０１５８】
新しいＰＡＥ構造によって４つの入力ポートおよび４つの出力ポートが可能になるため、このＩＯＡＧは、つぎのようにワードの分割およびマージをサポートすることができる。
【０１５９】
【表３４】
2007504688.tif 000036
【０１６０】
入力ポートは、ＩＯへのワード書き込みに対してＩＯＡＧ内でマージされる。
【０１６１】
出力ポートに対し、読み出されたワードは、コンフィギュレーションされたワード幅にしたがって分割される。
【０１６２】
１．７  マルチ電圧電源および周波数ステッピング
ＰＡＥおよびバスは、作業負荷に依存して動作するように構成されている。したがってクロック周波数は、データ帯域幅にしたがってコンフィギャラブルであり、さらにレジスタに対するクロックゲーティングがサポートされており、またバスはＡＮＤゲートの行を使用してデカップリングされる。処理可能なデータがない場合にはいつでも、クロックパルスは動的にゲート制御される。
【０１６３】
先進アーキテクチャではＰＡＥにおけるクロック周波数およびバスに対する所要の帯域幅に依存して上記の電圧がスケーリングされる。４Ｓプロジェクト内ではこのような手法が評価され、商用になるテクノロジが研究されている。
【０１６４】
１．８  ＸＰＰ／μＰ結合
μＰとＸＰＰとを密に結合するため、キャッシュおよびレジスタインタフェースは、Ｃコンパイラのような高レベルツールに対して有利な構造である。しかしながらこのような密結合は、極めて初期の段階で実行可能でないと予想される。
【０１６５】
それにかかわらず、密結合に対して相異なる２つのタイプの結合がおそらく可能である。すなわち、
ａ）  長いデータストリームに対するメモリ結合：  最も高性能でもっとも便利な手法は、直接のキャッシュ結合である。これに対してスタート時にはＡＭＢＡベースのメモリ結合で十分である（ATAIRに関連して後述する）。
【０１６６】
ｂ）  小さなデータおよび変則的なＭＡＣ演算に対するレジスタ結合：有利であるのは、プロセッサパイプラインのＯＦステージにおける暗黙的な同期化によるプロセッサレジスタへの直接的な結合である。しかしながら外部レジスタとしてのロード／ストア命令またはイン／アウト命令を介する結合は、いくらかの性能上の制限になる比較的長いレイテンシのペナルティを伴えば、許容され得る。
【０１６７】
２  ＡＬＵ−ＰＡＥの仕様
２．１  概要
有利な実施形態ではＡＬＵ−ＰＡＥは３つのパスを有する。すなわち、
ＡＬＵ  算術、論理およびデータフロー処理
ＢＰ    バイパス
この場合に上記の各パスは、２つのデータパスおよび１つのイベントバスを有する。ＤＦパスのバスは、コンフィギュレーションによってＡＬＵパスに再ルーティングすることができる。
【０１６８】
２．２  ＡＬＵパスレジスタ
ＡＬＵパスには１２個のデータレジスタが含まれる。すなわち、
Ｒｉ０−３  バスからの入力データレジスタ０−３
Ｒｖ０−３  バスへの仮想出力データレジスタ
Ｒｄ０−３  内部汎用レジスタ０−３
Ｖｉ０−３  バスからのＶイベント入力０−３
Ｕｉ０−３  バスからのＵイベント入力０−３
Ｅｖ０−３  バスへの仮想Ｖイベント出力レジスタ
Ｅｕ０−３  バスへの仮想Ｕイベント出力レジスタ
Ｆｕ０−３
Ｆｖ０−３  ＸＰＰ−II ＰＡＥイベントバスによる内部フラグｕおよびｖレジスタ
Ａｃｃ      アキュムレータ
ここでは８つの命令レジスタが実装されている。オペコードのフォーマットにしたがって２４ビット幅である。すなわち、
Ｒｃ０−７  命令レジスタ
である。
【０１６９】
３つの専用レジスタが実装されている。すなわち、
Ｒｌｃ  ＣＭによってコンフィギュレーションされ、ＡＬＵ−ＰＡＥそれ自体からは直接にアクセスできないループカウンタ。ＪＬオペコードにしたがってデクリメントされる。値０の後、リロードされる。
Ｒｊｂ  Ｒｃ[０…７]において使用されるエントリの数を定めるジャンプバックレジスタである。ＡＬＵ−ＰＡＥそれ自体からは直接にアクセスできない。ＲｐｐとＲｊｂとが等しい場合、Ｒｐｐは直ちに０にリセットされる。ジャンプバックは１つの条件、すなわち到来するイベントに制限することができる。この条件がない場合、このジャンプバックは遅延される。
Ｒｐｐ  プログラムポインタ
２．３  データ複製と複数入力の読み込み
ファンクションフォールディングは、純粋なデータストリームモードでも、シーケンシャルモード（１．２を参照されたい）でも共に動作できるため、データフローモード（単一の読み出しのみ）およびシーケンシャルモード（複数の読み出し）においてＲｉ読み出しをサポートすることが有利である。相応するプロトコルを以下に示す。すなわち、
各入力レジスタＲｉは、相異なる２つのモードのうちの１つで動作するようにコンフィギュレーションすることができる。すなわち、
データフローモード：
ＸＰＰ−II実装の標準プロトコルである。つまりレジスタが空の場合、１つのデータパケットがバスから読み出されて取り出され、ＡＣＫハンドシェークが生成される。このレジスタが空でない場合、このデータはラッチされず、またＡＣＫは生成されない。
【０１７０】
このレジスタがデータを含む場合、このデータは一度だけ読み出すことができる。読み出しアクセスに伴って直ちにこのレジスタは空としてマーク付けされる。空のレジスタは読み出すことができない。
【０１７１】
簡略化すると、このプロトコルはつぎのように定められる。すなわち、
ＲＤＹ  ＆  空        →  フル
→  ＡＣＫ
ＲＤＹ  ＆  フル      →  ＡＣＫしない
ＲＥＡＤ  ＆  空      →  停止
ＲＥＡＤ  ＆  フル    →  データ読み出し
→  空
ここの説明およびプロトコルではパイプラインの作用は考慮されていないことに注意されたい。
【０１７２】
シーケンサモード
入力インタフェースは、バスプロトコル定義にしたがってつぎのようになる。すなわち、レジスタが空の場合、１つのデータパケットがバスから読み出されて取り出され、ＡＣＫハンドシェークが生成される。レジスタが空でない場合、このデータはラッチされず、またＡＣＫは生成されない。
【０１７３】
レジスタがデータを含む場合、１シーケンス中、このデータは複数回読み出すことができる。シーケンスはＲｐｐ＝０ 〜 Ｒｐｐ＝Ｒｊｂで定められる。この間にレジスタに新たなデータを書き込むことはできない。Ｒｐｐを０にリセットとするのと同時にレジスタの内容はクリアされ、新たなデータがバスから取り入れられる。
【０１７４】
簡略化すると、このプロトコルはつぎのように定められる。すなわち、
ＲＤＹ  ＆  空        →  フル
→  ＡＣＫ
ＲＤＹ  ＆  フル      →  ＡＣＫしない
ＲＥＡＤ  ＆  空      →  停止
ＲＥＡＤ  ＆  フル    →  データ読み出し
（Ｒｐｐ ＝＝ Ｒｊｂ）→  空
ここの説明およびプロトコルではパイプラインの作用は考慮されていないことに注意されたい。
【０１７５】
２．４  データレジスタおよびイベント処理
データレジスタは直接アドレッシングされ、各データレジスタは個別に選択することができる。３つのアドレスオペコード形式が使用される。すなわちｒｔ ← ｒｓ１，ｒｓ０である。仮想出力レジスタは、レジスタの後に「ｏ」を付加することによって選択される。結果は、ルール
op out (ｒｖ，ｒｔ) ← ｒｓ１，ｒｓ０
にしたがってｒｔに格納され、また仮想出力レジスタｒｖにもコピーされる。
【０１７６】
入力および（仮想の）出力レジスタへのアクセスは、２．３節に定めたつぎのルールにしたがうことに注意されたい。
【０１７７】
【表３５】
2007504688.tif 000037
【０１７８】
イベントは、データレジスタと同様に使用される。すべての入力および内部イベントは直接、アドレッシングすることができ、出力イベントは、イベントの後ろに「ｏ」が付加化されるときにはいつでも使用される。
【０１７９】
【表３６】
2007504688.tif 000038
【０１８０】
２．４．１  アキュムレータモード
低い電力消費を達成し、またＤＳＰライクなアルゴリズムをより良好にサポートするため、アキュムレータレジスタが利用可能であり、結果レジスタ（ａｏ）およびオペランドレジスタ（ａｉ）に対して１ビットをセットするだけでこれをアドレッシング可能である。可換の演算に対してつねにオペランドレジスタ１はａｉによって置き換えられる。SUBtractのような可換でない演算に対してはオペランドおよびレジスタ１により、ａｉが第１のオペランドであるか、または第２のオペランドであるかが選択される。オペランドレジスタ２により、相応して他方のオペランドが定められる。
【０１８１】
つぎのことを明確にしなければならないことに注意されたい。すなわち、実際のアキュムレータモードが有効であるか、またはＭＡＣコマンドだけを実現して、暗黙的で隠れたアキュムレータアクセスによって２クロックサイクルを消費する単一の命令において乗算累算を処理すべきか明瞭にしなければならないのである。
【０１８２】
２．４．２  パラメタスタックモード（PSTACK）
オペコードレジスタＲｃの未使用のエントリは、定数およびパラメタに対するスタックとして動作することができる。Ｒｐｐ ＝＝ ００００においてＲｐｓ PStackレジスタはＲｊｂ＋１をポイントする。これはPStack領域が、オペコードレジスタファイルの最後のエントリの直後からはじまることを意味する。
【０１８３】
PStackにアクセスするため、ＦＦ−ＰＡＥは、高速パラメタ（Fast-Parameter）モードでなければならない。Ｒｉ３に対する各読み出しアクセスは、PStackからの読み出しにリダイレクトされ、これに対して各読み出しアクセスの後、ポインタは１によってインクリメントされる。実現されたPStackポインタのオーバーフローに対するチェックはない。オーバーフローはプログラムのバグとみなされる。
【０１８４】
【表３７】
2007504688.tif 000039
【０１８５】
２．４．３  ｎ：１のトランジション
ｎ：１のトランジションはもはやバス内ではサポートされない。択一的に複数の出力レジスタＲｏおよびイベント出力側Ｅｏへの単純な書き込みがサポートされる。仮想出力レジスタ（Ｒｖ）および仮想イベント（Ｅｖ）は実出力レジスタ（Ｒｏ）および実イベント（Ｅｏ）に変換され、ここで１つの仮想レジスタを複数の出力レジスタにマッピングすることができる。
【０１８６】
このコンフィギュレーション可能な変換を実現するため、データレジスタおよびイベントレジスタの両方に対して表がインプリメントされる。
【０１８７】
【表３８】
2007504688.tif 000040
例
Rv0  Ro0，Ro1にマッピングされる
Rv0  Ro2にマッピングされる
Rv0  Ro3にマッピングされる
Rv3  未使用
【０１８８】
【表３９】
2007504688.tif 000041
２．４．４  入力および出力レジスタ（Ri／Rv）ならびにイベント（Ei／Ev）へのアクセス
オペコードアクセスとは独立して、入力または出力レジスタないしはイベントがつぎのように定められる。すなわち、
【０１８９】
【表４０】
2007504688.tif 000042
２．４．５  マルチコンフィグモード
マルチコンフィグモードによって可能になるのは、格納された最大４つのコンフィギュレーションから１つを選択できるようにすることである。Ｆｕｉ０，１およびＦｖｉ０，１に到来するイベントにより、４つのコンフィギュレーションのうちの１つが選択される。１クロックサイクルにおいて１つのイベントだけがアクティブになるべきである。この選択は単純な変換によって行われ、各イベントにより、特定のメモリアドレスがポイントされる。
【０１９０】
【表４１】
2007504688.tif 000043
【０１９１】
次コードセグメント（next code segment）を使用することによって３オペコード以上の長いコンフィギュレーションを使用することも可能である。この場合、相応するイベントは使用できない。
【０１９２】
【表４２】
2007504688.tif 000044
【０１９３】
２．５  オペコードフォーマット
有利な実施形態では２４ビット幅の３アドレスオペコードが使用される。すなわち、
op ｒｔ ← ｒａ，ｒｂ
である。
【０１９４】
ソースレジスタはＲｉおよびＲｄ，ターゲットレジスタはＲｖおよびＲｄとすることができる。ふつうの演算は、Ｒｄレジスタだけをターゲットとする。ｒａに対するソースレジスタがＲｉ[ｘ]の場合、このターゲットレジスタはＲｄ[ｘ]になる。
【０１９５】
上記の変換はつぎの表に示されている。すなわち、
【０１９６】
【表４３】
2007504688.tif 000045
である。
【０１９７】
各演算は、ターゲット識別子としてoutタグ「ｏ」をオペコードに付加することによって仮想出力レジスタＲｖをターゲットにすることが可能である。すなわち、
op (ｒｔ，ｒｏｔ) ← ｒａ，ｒｂ
である。
【０１９８】
データは仮想出力レジスタに転送され、また相応する内部レジスタにも転送される。すなわち、
【０１９９】
【表４４】
2007504688.tif 000046
である。
【０２００】
２．５．１  条件付き実行
SKIPEコマンドにより、条件付き実行がサポートされる。イベントまたはＡＬＵフラグが、所定の値になっている否かがテストされる。このチェックに依存して、つぎの２つのアドレスが実行される（Ｒｐｐ＋１）か、またはスキップされる（Ｒｐｐ＋３）。到来するイベントをチェックする場合、イベントがイベントポートに到着するまでプログラムの実行はストップする（ＲＤＹハンドシェークのセット）。
【０２０１】
SKIPEは、２メモリエントリよりも大きくない任意のオペコードの条件付き実行をサポートする。
【０２０２】
ＣＡＬＬおよびＲＥＴオペコードをサポートするＳＥＱ−ＰＡＥでは、スタックベースのサブルーチンコールもサポートされる。
【０２０３】
２．６  クロック
ＰＡＥは、
１×バスクロック
２×バスクロック
４×バスクロック
[８×バスクロック]
のコンフィギュレーション可能な周波数で動作することができる。
【０２０４】
２．７  ＤＦパス
データフローパスは、データレジスタＢｒｉ０…３およびＢｒｏ０…３ならびにイベントレジスタＢｕｉ／Ｂｖｉ０…３およびＢｕｏ／Ｂｖｏ０…３を含む。
【０２０５】
ＤＦパスの主な目的は、垂直方向にバス接続を形成することである。さらに上記のパスには、データおよびイベントパス毎に１つの４ステージＦＩＦＯが含まれている。
【０２０６】
ＤＦパスにより、数多くの命令がサポートされ、ここでこれらの命令はコンフィギュレーションによって選択され、そのうちの１つだけが１コンフィギュレーション中に実行可能である。ファンクションフォールディングは利用できない。
【０２０７】
ＤＦパスでは以下の命令、
１．ＡＤＤ，ＳＵＢ
２．ＮＯＴ，ＡＮＤ，ＯＲ，ＸＯＲ
３．ＳＨＬ，ＳＨＲ，ＤＳＨＬ，ＤＳＨＲ，ＤＳＨＲＵ
４．ＥＱ，ＣＭＰ，ＣＭＰＵ
５．ＭＥＲＧＥ，ＤＥＭＵＸ，ＳＷＡＰ
６．ＳＯＲＴ，ＳＯＲＴＵ
７．ＥＬＵＴ
が実現される。
【０２０８】
【表４５】
2007504688.tif 000047
【０２０９】
２．９  パラメタのブロードキャストおよび更新
パラメタおよび定数は、入力レジスタＲｉ３およびイベント入力Ｅｉ７を使用することにより、高速かつ同期して更新することができる。
【０２１０】
更新モードに依存して、イベントＥｉ７がセットされている場合、ＰＡＥにより、相応のレジスタの各アクセス時に入力レジスタＲｉ３におけるデータパケットがＲｄ３，Ｒｄ２およびＲｄ１に引き続いてコピーされる。その後、Ｒｉ３におけるすべての入力データは、出力レジスタＲｏ３に伝搬され、またＥｏ７イベント出力がセットされ、これによって第１パラメタの更新が発生したことが後続のＰＡＥに示され、これらのＰＡＥを一緒にチェーンで結びつける（すなわちマルチＴＡＰ  ＦＩＲフィルタにおいて）ことができ、このチェーンにおいてすべてのパラメタを更新することができる。
【０２１１】
【表４６】
2007504688.tif 000048
【０２１２】
またＥｉ７がセットされている場合、更新パラメタモード（upmcfg ＝ nn10）に依存してオペコードUPDATEにより、すべてのレジスタが引き続いて更新される。
【０２１３】
またレジスタ更新をコンフィギュレーションして、upmcfg ＝ ｎｎ０１によってＲｐｐ ＝＝ ０かつＥｉ７がセットされる場合にはこれがつねに行われるようにすることも可能である。
【０２１４】
いずれのケースにおいてもｎｎは、更新すべきレジスタの数（１〜３）を表す。
【０２１５】
Ｅｉ７は、少なくとも１つクロックサイクルの間０でなければならず、これによって実行中のパラメタ更新の終了および新しい更新の開始が示される。
【０２１６】
３．  入出力アドレス形成（ＩＯＡＧ）
ＩＯＡＧはＲＡＭ−ＰＡＥに配置されており、バスに通じる同じレジスタを共用する。１つのＩＯＡＧは、キャリーが転送される３つのカウンタを含む。カウンタ値と、アレイからのイミディエートアドレス入力値とは、加算されてアドレスが形成される。
【０２１７】
１つのカウンタにより、リバースキャリー機能が提供される。
【０２１８】
３．１  アドレッシングモード
通例のＤＳＰライクなアドレッシングをサポートするため、いくつかのアドレッシングモードがＩＯＡＧによってサポートされる。すなわち、
モード                          説明
イミディエート                  ＰＡＥアレイによって形成されるアドレス
ｘＤ計数                        ＩＯＡＧ内部カウンタを使用した多次元
アドレッシング
ｘＤは１Ｄ，２Ｄ，３Ｄを意味する
ｘＤ循環                        ＩＯＡＧ内部カウンタを使用した多次元
アドレッシング
オーバーフローの後、カウンタには
ベースアドレスがリロードされる
ｘＤとイミディエートスタックとの和
ｘＤと、ＰＡＥアレイから得られる値との和
「push」処理の後、デクリメントされる
「read」処理の後、インクリメントされる
リバースキャリー                ＦＦＴなどのアプリケーション用の
リバースキャリー
である。
【０２１９】
３．１．１  イミディエートアドレッシング
アドレスは、アレイで形成され、加算器を介してアドレス出力側に直接供給される。すべてのカウンタは使用不可にされ、０に設定される。
【０２２０】
３．１．２  ｘＤ計数
カウンタは、所要の次元（ｘ次元にはｘのカウンタが必要である）に依存して使用可能にされる。カウンタ毎にベースアドレスと、ステップ幅と、最大アドレスとがコンフィギュレーションされる。各キャリーはつぎの次数の使用可能なカウンタに転送される。キャリーの後、このカウンタには開始アドレスがリロードされる。
【０２２１】
最高次の使用可能なカウンタにおけるキャリーによってイベントが形成され、計数が停止する。
【０２２２】
３．１．３  ｘＤ循環
この処理は、ｘＤ計数に対するのと等しいが、最も高次の使用可能なカウンタにおけるキャリーによってイベントが形成され、すべてのカウンタにはそのベースアドレスがリロードされ、計数が継続されるという違いがある。
【０２２３】
３．１．４  スタック
１つのカウンタ（ＣＮＴ１）は、データの書き込みの後、デクリメントされ、またデータ読み出しの後、インクリメントされるために使用される。このカウンタのベース値は、コンフィギュレーション（ベースアドレス）することができるか、またはＰＡＥによってロードされる。
【０２２４】
３．１．５  リバースキャリー
キャリーはふつう、ＬＳＢからＭＳＢに転送される。キャリーを逆方向に転送する（リバースキャリー）ことによって、ＦＦＴなどのアプリケーションに極めて適したアドレスパターンを形成することができる。このキャリーはＭＳＢにおいて廃棄される。
【０２２５】
リバースキャリーを使用するためにはＬＳＢよりも大きな値を目下の値に加えて計数しなければならない。このためにＳＴＥＰレジスタを使用する。
【０２２６】
例：
ベース ＝ ０ｈ
ステップ ＝ 1000b
【０２２７】
【表４７】
2007504688.tif 000049
【０２２８】
このカウンタは、少なくとも−２，−１，＋１，＋２のＳＴＥＰ値においてリバースキャリーを可能にするように実現されている。
【０２２９】
４．  ＡＬＵ／ＲＡＭシーケンサ  ＳＥＱ−ＰＡＥ
アレイの左または右側エッジの各ＡＬＵ−ＰＡＥは、ＩＰオプションとして隣のＲＡＭ−ＰＡＥに密に結合して、シーケンサをコンフィギュレーションすることができる。互換上の理由により、シーケンサのデータおよびオペコード幅は１６ビットである。
【０２３０】
【表４８】
2007504688.tif 000050
【０２３１】
上記のＡＬＵ−ＰＡＥは、まさにアレイの内部ＡＬＵ−ＰＡＥとして動作することができるが、いくつかの拡張を有する。動作はシーケンサモードであり、レジスタファイルは８データレジスタ幅であり、ＦｕおよびＦｖフラグは、キャリー、符号、ナル、オーバーフローおよびパリティＡＬＵフラグワードとして使用される。
【０２３２】
【表４９】
2007504688.tif 000051
【０２３３】
アドレス幅は、相応に１６ビットである。しかしながらＲＡＭ−ＰＡＥサイズは限定されているため、１６個のセグメントにセグメンテーションされている。これらのセグメントは、コード、データおよびスタックに使用され、コンパイラによって個別にプリロードしなければならない。
【０２３４】
４つのセグメントレジスタにより、特定のセグメントがポイントされる。すなわち、
CodeBank        現在のコードセグメントをポイントする
DataBank        現在のデータセグメントをポイントする
StackBank       現在のスタックセグメントをポイントする
AuxiliariyBank   任意のセグメント（ただしコード）をポイントして、セグメン
ト間でコピーを可能にする。
【０２３５】
【表５０】
2007504688.tif 000052
【０２３６】
コンパイラは、必要なデータセグメントがプリロードされており、かつ利用可能であるようにしなければならない。コスト上の理由から自動のＴＬＢは実装されない。
【０２３７】
またセグメントは、ＴＬＢがないことに起因して物理的に直接アドレッシングしなければならない。つまりコンパイラは、相応するアドレスに対する範囲チェック機能を実装していなければならないのである。
【０２３８】
コードセグメントは、データセグメントに相応して動作する。コンパイラは、データセグメントへのジャンプを実行する前にこれらをプリロードしなければならない。ここでもＴＬＢがないことに起因してジャンプも物理的に直接アドレッシングされる。
【０２３９】
任意のセグメントの再配置はできない。マッピングはコンパイラによって固定される。
【０２４０】
メモリ配置を以下に示す。簡単なチェック機構が実装されており、これによってメモリセグメントの有効または無効になる。
【０２４１】
【表５１】
2007504688.tif 000053
【０２４２】
少なくともCodeBank（ＣＢ）およびStackBank（ＳＢ）を設定しなければならない。最初のCodeBankは、位置0000hでスタートしなければならない。他のすべてのバンクに対して0000hは、違反エントリである。メモリにセグメントをロードすることによってこれらは有効になり、相応にフラッシュすることによってこれらは無効になる。
【０２４３】
メモリバンクは、つぎのオペコードによって制御され、ＤＭＡエンジンによってバックグラウンドでロードないしはフラッシュされることによって更新される。すなわち、
LOADSEG      データ／補助／スタックバンクをロードして有効にする
STOREDSET   データ／補助／スタックバンクを記憶して無効にする
LOADCSEG    コードバンクをロードして有効にする
ＩＯＡＧインタフェースのアドレス発生器は、ＤＭＡエンジンとして再利用可能である。
【０２４４】
メモリバンクは、殊につぎのように有効ないしは無効にされる。すなわち、
VALIDATESSEG      バンクを有効にする
INVALIDATESEG    バンクを無効にする
である。
【０２４５】
バンクポインタは、任意のメモリアクセスのアドレスに加算される。アドレスポインタは、６４個のラインの範囲をアドレッシングする６ビットよりも大きくすることができるため、セグメント境界は「はっきり」していない。つまり、いかなる制限もなしに交わることができるのである。しかしながらプログラマまたはコンパイラは、これらが交わる際にダメージが発生しないようにする必要がある。無効なセグメントに達した場合、フォールトを示すフラグまたはトラップが生成され、最終的にはプリロードしたセグメントがバックグラウンドですでに動作している場合には単に待ち状態が挿入される。
【０２４６】
【表５２】
2007504688.tif 000054
【０２４７】
択一的にはつぎに示すようにさらに先進的な有効性チェック方式を実現することが可能である。
【０２４８】
【表５３】
2007504688.tif 000055
【０２４９】
２４ビット命令を必要とするＰＡＥとは異なり、シーケンサでは１６ビット命令だけが使用される。同じ命令セットを使用してデコーダを単純なもののままとするためには、シーケンサモードにおいて単に最後の８ビットが廃棄される。
【０２５０】
４．１  ＩＯＡＧ
ＩＯＡＧは、外部レイテンシを平衡化し、外部バスまたは外部メモリのレイテンシに関係なく、同じデータアドレスをデータの書き込み直後に読み出すことのできる４〜８段のデータ出力バッファを有する。
【０２５１】
以下に複数のオペコードおよびその意味を示す。
【０２５２】
ADD
ADD
説明：
rs1とrs2とを加算する。
【０２５３】
【表５４】
2007504688.tif 000056
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２５４】
【表５５】
2007504688.tif 000057
【０２５５】
ADDC
ADD with Carry
説明：
キャリーつきでrs1とrs2とを加算する。
【０２５６】
【表５６】
2007504688.tif 000058
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
es4: ソースイベント
et4: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２５７】
【表５７】
2007504688.tif 000059
【０２５８】
AND
Logical AND
説明：
論理ＡＮＤ演算を行う。
【０２５９】
【表５８】
2007504688.tif 000060
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２６０】
【表５９】
2007504688.tif 000061
【０２６１】
BSHL
Barrel SHift Left
説明：
rs1をrs2の位置分だけ左方へシフトし、０で埋める。
【０２６２】
【表６０】
2007504688.tif 000062
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２６３】
BSHR
Barrel SHift Right
説明：
rs1をrs2の位置分だけ右方へシフトし、符号ビットを複製する。
【０２６４】
【表６１】
2007504688.tif 000063
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２６５】
BSHRU
Barrel SHift Right Unsigned
説明：
rs1をrs2の位置分だけ右方へシフトし、０で埋める。
【０２６６】
【表６２】
2007504688.tif 000064
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２６７】
CLZ
Count Leading Zeros
説明：
数が正である場合、先頭の０を計数し、数が負である場合、先頭の１を計数する。
【０２６８】
【表６３】
2007504688.tif 000065
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２６９】
【表６４】
2007504688.tif 000066
【０２７０】
CLZU
Count Leading Zeros Unsigned
説明：
符号のない数の先頭の０を計数する。
【０２７１】
【表６５】
2007504688.tif 000067
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２７２】
【表６６】
2007504688.tif 000068
【０２７３】
CMP
CoMPare
説明：
２つの値を比較する。
【０２７４】
【表６７】
2007504688.tif 000069
Rpp++
rs: ソースレジスタ
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２７５】
【表６８】
2007504688.tif 000070
【０２７６】
CMPU
CoMPare Unsigned
説明：
符号のない２つの値を比較する。
【０２７７】
【表６９】
2007504688.tif 000071
Rpp++
rs: ソースレジスタ
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２７８】
【表７０】
2007504688.tif 000072
【０２７９】
DEMUX                                                                  FF
DEMUltipleX data stream
説明：
フラグに依存して入力を２つの入力側のうち一方へ移動する。
【０２８０】
【表７１】
2007504688.tif 000073
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es4: ソースイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
Ei / F
出力フラグ：
−。
【０２８１】
DIV                                                                    SEQ
DIVide
説明：
rs1をrs2で除算する。結果をrtpに、余りをrtp＋1に入れる。
【０２８２】
【表７２】
2007504688.tif 000074
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２８３】
DIVU                                                                    SEQ
DIVide Unsigned
説明：
符号のないrs1をrs2で除算する。結果をrtpに、余りをrtp＋1に入れる。
【０２８４】
【表７３】
2007504688.tif 000075
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２８５】
DSHL
Double SHift Left
説明：
rs1, rs2を左方へシフトする。LSBをイベントで埋める。
【０２８６】
【表７４】
2007504688.tif 000076
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２８７】
【表７５】
2007504688.tif 000077
【０２８８】
DSHR
Double SHift Right
説明：
rs1, rs2を右方へシフトし、符号ｂｉｔを複製する。
【０２８９】
【表７６】
2007504688.tif 000078
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
【０２９０】
【表７７】
2007504688.tif 000079
【０２９１】
DSHRU
Double SHift Right Unsigned
説明：
rs1, rs2を右方へシフトし、イベントで埋める。
【０２９２】
【表７８】
2007504688.tif 000080
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
【０２９３】
【表７９】
2007504688.tif 000081
【０２９４】
EQ
EQual
説明：
２つの値が等しいか否かをチェックする。
【０２９５】
【表８０】
2007504688.tif 000082
Rpp++
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２９６】
【表８１】
2007504688.tif 000083
【０２９７】
JMP                                                                    SEQ
JuMP immediate
説明：
直接の定数によって定義されたアドレスへジャンプする。CodeBankを定数にしたがって変更する。
動作：
const[0...3] → CodeBank
const[4...15] → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２９８】
JRI                                                                    SEQ
Jump Relative Immediate
説明：
直接の符号を有する定数にしたがうRppに対して相対的にジャンプする。CodeBankには影響しない。
動作：
Rpp + const → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２９９】
JRR                                                                    SEQ
Jump Relative Register
説明：
レジスタの符号を有するコンテンツにしたがうRppに対して相対的にジャンプする。CodeBankには影響しない。
動作：
Rpp + Rd[rbs] → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０３００】
LOAD
LOAD data register with constant
説明：
内部データレジスタまたは出力レジスタに直接の定数をロードする。
【０３０１】
【表８２】
2007504688.tif 000084
Rpp++
rt: ターゲットレジスタ
入力レジスタ：
−
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０３０２】
MERGE                                                                  FF
MERGE data streams
説明：
フラグに依存して２つの入力のうち一方を出力側へ移動する。
【０３０３】
【表８３】
2007504688.tif 000085
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es: ソースイベント
入力レジスタ：
Ri / Rd , Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
出力フラグ：
−。
【０３０４】
ＭＯＶＥ
MOVE internal data register
説明：
レジスタバンクレジスタの内容を別の内部レジスタに移動する。
動作：
Rd[rbs] → rd[rbt]
Rpp++
rbs: レジスタバンクソース
rbt: レジスタバンクターゲット
入力レジスタ：
Rd
出力レジスタ：
Rd
入力フラグ：
−
入力フラグ：
−。
【０３０５】
ＭＯＶＥＥ
MOVE flag register
説明：
フラグレジスタの内容を別のフラグレジスタに移動する。
動作：
F[fs] → F[ft]
Rpp++
fs: フラグソース
ft: フラグターゲット
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
F。
【０３０６】
ＭＵＬ
MULtiply
説明：
rs1とrs2とを乗算する。
【０３０７】
【表８４】
2007504688.tif 000086
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０３０８】
ＭＵＬＵ
MULtiply Unsigned
説明：
符号なし整数rs1とrs2とを乗算する。
【０３０９】
【表８５】
2007504688.tif 000087
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０３１０】
ＮＯＰ
No Operation
説明：
ノーオペレーション、Rppをインクリメントする。
動作：
Rpp++
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０３１１】
ＮＯＴ
Logical inverse
説明：
レジスタを論理的に反転する
【０３１２】
【表８６】
2007504688.tif 000088
I → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０３１３】
【表８７】
2007504688.tif 000089
【０３１４】
ＯＲ
Logical OR
説明：
論理的なＯＲ演算
【０３１５】
【表８８】
2007504688.tif 000090
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０３１６】
【表８９】
2007504688.tif 000091
【０３１７】
ＲＥＡＤ
READ data input register
説明：
指定されたデータ入力レジスタを読み出して内部レジスタバンクまたは出力レジスタに書き込む。READは、入力レジスタにおいてデータが利用可能になるまで待つ。
【０３１８】
【表９０】
2007504688.tif 000092
Rpp++
rt: ターゲットレジスタ
ri: 入力レジスタ
入力レジスタ：
Ri
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０３１９】
ＲＥＡＤＥ
READ event input register
説明：
指定されたイベント入力レジスタを読み出して内部フラグバンクまたはイベント出力レジスタに書き込む。READEは、入力レジスタにおいてイベントが利用可能になるまで待つ。
【０３２０】
【表９１】
2007504688.tif 000093
Rpp++
et4: ターゲットイベント
ei: 入力イベント
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei
出力フラグ：
F / Eo。
【０３２１】
ＳＡＴ
SATurate
説明：
キャリー（Fu0）フラグおよび飽和モードに依存してレジスタを飽和させる。
【０３２２】
【表９２】
2007504688.tif 000094
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
as: 加算／減算モード
es4: イベントソース
入力レジスタ：
Rd
出力レジスタ：
Rd / Ro
es4入力フラグ：
SEQモード：  キャリー
FF-モード：  Ei / F
出力フラグ：
−。
【０３２３】
ＳＥＴＦ
SET Flag with constraint
説明：
フラグレジスタまたは出力イベントにイミーディエイト定数をロードする。
【０３２４】
【表９３】
2007504688.tif 000095
Rpp++
et4: イベントターゲット
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
F / Eo。
【０３２５】
ＳＨＬ
SHift Left
説明：
rs1を左にシフトする。LSBにはイベントが充填される。
【０３２６】
【表９４】
2007504688.tif 000096
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタペア
et4: ターゲットイベントペア
es4: ソースイベントレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０３２７】
【表９５】
2007504688.tif 000097
【０３２８】
ＳＨＲ
SHift Right
説明：
rs1を右にシフトする。MSBにはイベントが充填される。
【０３２９】
【表９６】
2007504688.tif 000098
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタペア
et4: ターゲットイベントペア
es4: ソースイベントレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０３３０】
【表９７】
2007504688.tif 000099
【０３３１】
ＳＫＩＰＥ
SKIP next two commands depending on Event
説明：
イベントまたはフラグに基づいてつぎの２つのコマンドをスキップする。ソースとしてイベントが選択された場合、イベントが利用可能になるまで実行は停止する。
【０３３２】
【表９８】
2007504688.tif 000100
【０３３３】
val: 値
es4: イベントソース
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei / F
出力フラグ：
−。
【０３３４】
ＳＯＲＴ
SORT data stream
説明：
２つの入力を値に応じてソートする。
【０３３５】
【表９９】
2007504688.tif 000101
O1 ＝ I1およびI2の小さい方の値
O2 ＝ I1およびI2の大きい方の値
E1 ＝ I1 < I2の場合１，その他の場合0
E2 ＝ I1 <=  I2の場合１，その他の場合0
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
−
出力フラグ：
Ei / F。
【０３３６】
ＳＯＲＴＵ
SORT data stream Unsigned
説明：
２つの符号なし入力値を値に応じてソートする。
【０３３７】
【表１００】
2007504688.tif 000102
O1 ＝ I1およびI2の小さい方の値
O2 ＝ I1およびI2の大きい方の値
E1 ＝ I1 < I2の場合１，その他の場合0
E2 ＝ I1 <=  I2の場合１，その他の場合0
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
−
出力フラグ：
Ei / F。
【０３３８】
ＳＵＢ
SUBtract
説明：
rs1からrs2を減算する。
【０３３９】
【表１０１】
2007504688.tif 000103
I1, I2 → O
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０３４０】
【表１０２】
2007504688.tif 000104
【０３４１】
ＡＤＤＣ
ADD with Carry
説明：
キャリー付きでrs1からrs2を減算する。
【０３４２】
【表１０３】
2007504688.tif 000105
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
es4: ソースイベント
etp: ターゲットイベントペア
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０３４３】
【表１０４】
2007504688.tif 000106
【０３４４】
ＳＷＡＰ
SWAP data stream
説明：
フラグに依存して２つの入力をスワップする。
【０３４５】
【表１０５】
2007504688.tif 000107
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es4: ソースイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
Ei / F
出力フラグ：
−。
【０３４６】
ＵＰＤＡＴＥ
UPDATE parameters
説明：
Ei7が設定されている場合、レジスタRd3，Rd2，Rd1をRi3からの値によって更新する。Ri3に続くデータパケットをRo3に移動してEo7を設定する。
【０３４７】
【表１０６】
2007504688.tif 000108
Rpp++
モード：  更新モード
入力レジスタ：
Ri3
出力レジスタ：
Rd3, Rd2, Rd1
入力フラグ：
Ei7
出力フラグ：
Eo7。
【０３４８】
ＷＡＩＴＥ
WAIT for incoming Event
説明：
実行を中断し、定めた値のイベントが到来するのを待つ。到来したイベントに肯定応答する。
【０３４９】
【表１０７】
2007504688.tif 000109
【０３５０】
定めた値のイベントが到来するのを待つ。到来したすべてのイベントに肯定応答する。
【０３５１】
valx: 値
es3: イベントソース
Rpp++
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０３５２】
ＷＲＩＴＥ
WRITE output register
説明：
入力レジスタまたは内部レジスタバンクからのデータを出力レジスタに書き込む。書き込みの前または後に、到来するACKを待つ。
【０３５３】
【表１０８】
2007504688.tif 000110
入力レジスタ：
Ri / Rd
出力レジスタ：
Ro
入力フラグ：
−
出力フラグ：
−。
【０３５４】
ＷＲＩＴＥＥ
WRITE Event output register
説明：
入力レジスタまたはフラグからのイベントをイベント出力レジスタに書き込む。書き込みの前または後に、到来するACKを待つ。
【０３５５】
【表１０９】
2007504688.tif 000111
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei / F
出力フラグ：
Eo。
【０３５６】
ＸＯＲ
Logical XOR
説明：
論理的なXOR演算。
【０３５７】
【表１１０】
2007504688.tif 000112
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０３５８】
【表１１１】
2007504688.tif 000113
【０３５９】
付録  Ｂ
以下では、ファンクションフォールディングを使用する例を示す。
【０３６０】
ファンクションフォールディングおよび高速パラメタ更新の例ＦＩＲ
Ri0 ＝ x
Ri1 ＝ y
accを使用し、３重にフォールディングされたＦＩＲ
レジスタRd1, Rd2, Rd3に対する高速パラメタ更新
例１：UPM3、Rd3, 2, 1にそれぞれにアクセスしてパラメタを更新（Ei7が設定されている場合）。
upmcfg = 1100
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, RiO;
MACオペコード、パラメタpopおよびルーピングを使用した択一的な例
read  Rd0, Ri1；
lh, lt[3]:       mac    Rd0, Ri0, pop;
write   Ro1, Rd0;
write   Ro0, Rio;。
【０３６１】
例２：UPM3、パラメタ更新に対して命令UPDATEを使用。
upmcfg = 1110
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, Rio;
update 3。
【０３６２】
例３：UPM3、Rpp = 0においてパラメタを更新。
upmcfg = 1101
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, Rio;。
【０３６３】
上では、改良したデータプロセッサアレイを説明した。いくつかの例だけについてだけではあったが、所定の数のレジスタ、ビット幅などについて述べたことは説明のためだけであることを注意した。このような断りがない場合にもこれが有効であることを理解されたい。
【０３６４】
上記のアレイが極めて大きくなる場合、またはコンパイル時には未知である相異なる２つのアレイのフラグメントが互いに通信してデータ処理が可能であるようにしなればならない状況においてアルタイム処理が実行される場合、有利であるのは、通信パスが設定できるようにすることによって性能を向上することである。例えばLeeルーティングおよび／またはPACT 7に記載された手法などいくつかの提案がすでに提案されている。改良したアレイ設計についての以下の部分は、所定のアプリケーションに対しては、回路装置の改良に結び付き得るが、例えばファンクションフォールディングＰＡＥによってこれを改良することが絶対的また必須とは考えられないことを理解されたい。通常の知識を有する当業者にはわかるようにむしろ改良のための別の提案それ自体が大きな改良に結び付くことがある。
【０３６５】
ルーティングの改良
ここで提案され以下で説明される改良は、リコンフィギャラブルアレイアーキテクチャに対するスタティックルーティングネットワークに関する。ここでこのスタティックネットワークは、アダプティブランタイムルーティングに付加的なロジックを実現することによって強化される。
【０３６６】
図１には一組の機能ユニット（ＦＵ  functional unit）の有するリコンフィギャラブルアレイのカットが示されている。各機能ユニットには１つのルーティングユニット（ＲＵ  routing unit）および付加的な複数の機能モジュール（ＦＭ functional module）が含まれている。これらの含まれた機能モジュールは、データを操作し、またＦＵのタイプを特徴づけるために使用される。上記のＲＵには相互接続マトリクスが含まれており、これは各入力ポートを所望の任意の出力ポートにルーティングすることができる。すべてのＦＵはポイントツーポイントリンクを介して接続され、ここで各々は２つの半二重リンクから構成され、同時に双方向にデータを転送することができる。
【０３６７】
ここで説明するルーティング法は命令ベースであり、すなわち各ルーティング処理は１つの命令によって開始しなければならないのである。ユーザが２つのセルの間でルーティングを行おうとする場合、このユーザは所定の命令をソースセルに入れなければならない。このアレイ内のハードウェアにより、命令フィールド値に基づいて所望のルーティング方向が計算されてロジックストリームが設定される。このルーティング処理は、１機能ユニットから別の機能ユニットに段階的に進み、ここでは各セルにより、つぎにどの方向を選択すべきかが決定される。設定されたルートの途中、ルーティング資源の３つの重要な状態が定められる。第１の状態は、物理的なルートまたはリンクである。このことが意味するのは、このルートの資源は使用されておらず、ルーティング処理に利用できることである。第２の状態は、一時的なルートまたはリンクと称される。この状態は一時的に利用できないリンクであり、これが意味するのは、このリンクがルーティング処理に使用中であるが、このルーティングがまだ確認されていないことである。ここでの問題は、このルートが、将来的に確認され得るか、または後続のセルが所望のリンクを実現できる場合に解放され得ることである。最後の状態は、論理的なルートまたはリンクである。この状態は、アレイにおいて設定されたルートを表し、このルートによって計算データを転送することができる。
【０３６８】
このルーティング法では、アレイにおける座標が使用され、これによってルーティングが計算される。各ＦＵは一意の座標を有しており、この情報に基づいてアレイ内の所望の各セルへ至るルーティング方向を決定することができる。このコンセプトが、ここで説明するアダプティブランタイムルーティングに対するベースである。アダプティブルーティングに対して必要な制御ロジックは、ルーティングユニット内に実現され、殊にランタイムに相互接続マトリクスを制御するルーティングコントローラ内で実現される。したがってこのルーティングコントローラは、関連するＦＵのすべての入力ポートの到来データを解析でき、つぎに何をすべきかを決定できるようになるのである。
【０３６９】
ルーティングの設定
到来するデータの解析およびデータのバッファリングのため、各入力ポートはいわゆるイン-レジスタ（InReg in-register）を有する。この標準的なレジスタに加えて、InRegコントローラ（InRegCtrl）が実現されている。この有限状態機械（ＦＳＭ  finite state machine）の役割は、入力リンクの最新の状態を記憶し、この最新の状態に依存してルーティング要求をトリガするかまたは不要のルーティングを解放することである。この役割を遂行するため、各InRegCtrlはイン-コントローラ（InCtrl in-controller）に接続されており、これはＦＵ毎にちょうど１つだけ実現される。新しいルーティングを要求するための重要な要件は、上記の入力資源（InReg，InRegCtrl）が使用されておらず、物理リンクの状態にあることである。
【０３７０】
InCtrlは、全時間にわたってすべてのInRegCtrlの要求を受け取り、ルーティングコントローラ（RoutCtrl routing controller）に要求を１つずつ転送する。どのInRegCtrlを最初に処理すべきであるかの選択は、入力リンクのルーティング優先度および／またはどの入力リンクを最後に処理すべきかに依存する。ターゲットセルの座標情報および目下のＦＵの座標に基づき、要求された入力リンクに対する転送方向がRoutCtrlによって計算される。この際にRoutCtrlにより、（後述する）最適なビット、所望の方向へのネットワークの利用率などのような付加的なパラメタが考慮される。
【０３７１】
RoutCtrl内での方向の計算に成功した場合、RoutCtrlにより、出力ポートについての付加的な情報と共にこの要求が相互接続マトリクスに転送され、この相互接続マトリクスにより、上記の入力ポートと、計算された出力ポートとが接続される。これが行われた場合、RoutCtrlにより、ルーティング処理の成功がInCtrlに通知される。目下達成されるルーティング状態は最終的なものではないため、この目下の状態を記憶する必要がある。これはキュー要求レジスタファイル（QueueRRF queue-request-registerfile）内で行われる。したがってInCtrlはQueueRRFに直接接続されて所望の情報を記憶することができる。この時点で、関連する入力および出力リンクは、一時的なリンク状態に達し、またこれは他のルーティング処理に対して一時的に利用できない。
【０３７２】
QueueRRFは１つ以上のルーティングエントリを記憶できるという事実に起因して、InCtrlは同時に複数のルーティング処理を保持することができる。しかしながらハードウェア領域を多く消費するため、直接的な計算がRoutCtrl内で一度実現される。
【０３７３】
設定された一時的なルーティングは、後続のセルによってルーティングが肯定応答される時点までQueueRRF内に記憶されたままになる。肯定応答された場合、InCtrlによって、QueueRRF内の相応するエントリがクリアされ、またルーティングの成功がこのInCtrlに通知される。InRegCtrlは、論理的なルートの状態に変わり、また先行のセルにルーティング処理が成功して終了したことを通知する。後続のセルが所望のルートを設定できない場合、別のケースが発生し得る。この場合、InCtrlは、QueueRRFエントリに基づいてRoutCtrlに新たな要求を転送する。この要求は、新たなルーティングの提案になり、これはQueueRRF内に記憶される。
【０３７４】
利用可能かつ有利なすべての方向がチェックされ、かつルーティングの試みが失敗した場合、InCtrlは、ルーティングの失敗をInRegCtrlに通知する。InCtrlはルーティングの同じ失敗を、先行するセルに通知し、現在にセルにおけるルーティング処理を終了する。
【０３７５】
ルーティング処理内では、ルーティングユニットが所望のルーティングを設定する仕方について２つの例外がある。これらの例外は、ソースセルおよびターゲットセルを対象とする。いずれのケースであっても、この例外はつぎのようなものである。すなわち、ソースセルもターゲットセルも共に相互接続マトリクスを介して、開始ルーティング／終了ルーティングをルーティングする必要がないということである。ＦＭをセルの出力リンクに接続するためには単純な複数のマルチプレクサが使用される。これらのマルチプレクサは、相互接続マトリクスの後置接続され、また明示的にスイッチングしなければならない。これはルーティング処理が終了した後、行われる。例外であるのは、終了状態である。ここではInRegCtrlは、先行するものにルーティングの成功を肯定応答する必要はなく、その代わりにInRegにおいて目下のルーティング命令を消費すればよいだけである。これは、InCtrlによってルーティングの成功が通知された後に行われる。付加的にInRegは、ＦＭの出力ポートに関連づけられた出力マルチプレクサをスイッチングして、ルーティングの設定を終了する。InCtrlは、出力マルチプレクサを正しくスイッチングするために必要な情報をRouteCtrlから得る。
【０３７６】
上記とは異なり、ルーティングが失敗した場合、InCtrlは、セル固有の割り込みラインをアクティブにして、システムに失敗を通知する。
【０３７７】
２つ目の例外は、ターゲットルーティングセルに関する例外である。ここで重要であるのは新たなルートと、ローカルなＦＭの入力ポートとを接続することである。したがって相互接続マトリクスに前置接続される単純な複数のマルチプレクスが使用されるのである。進行中のルーティング処理がターゲットセルに達した場合、InCtrlは、ターゲットへの到達を識別して、関連する入力マルチプレクサをスイッチングして、到来するデータをＦＭの入力ポートに転送する。InCtrlによって成功が通知された後、ルート設定の成功を示す信号がInRegCtrlによって形成されるのはこの時点である。ここでInRegCtrlが最後に行う作業は、ルーティング命令を消去し、上記の論理的な状態に移行することによってルーティング処理を終了することである。
【０３７８】
設定したルーティングの解放
論理的に設定されたルーティングを解放するため、複数の固有の命令、いわゆる終了パケットを導入する。これらの命令のただ１つの目的は、上記の論理的に設定されたルーティングに所要の終了パケットを挿入することによって、ルートを解消することである。ルーティングを解放できるようにするためには２つのやり方がある。１つの可能性はグローバルな解放である。すなわち、終了パケットが挿入されるルートに続くすべてのルートを解放することである。この機能は、単一の命令ですべてのコンフィギュレーションを消去するのに有効である。このために重要であるのは、ＦＭが、内部データパスを介して上記の終了パケットを変更せずに転送できることである。
【０３７９】
ルート解放の２つ目のやり方は、ローカルなルート解放である。ここではＦＭの出力ポートと入力ポートとの間で設定された複数のルートを個々に解放することができる。終了パケットはＦＭを介して伝搬されない。この場合、終了パケットは最後のInRegCtrlによって消費される。
【０３８０】
内部的なＲＵ通信はルーティング処理と同様である。InRegCtrlによって、到来する終了パケットが決定されかつInRegCtrlが上記の論理的なルーティング状態にある場合、InRegCtrlは、ルート解放要求をInCtrlに転送する。InCtrlにより、相互接続マトリクス内か、または入力マルチプレクサレジスタ内か、または出力マルチプレクサレジスタ内のいずれかのエントリがクリアされる。この間にInRegCtrlは、（ローカルな終了パケットおよびチェーンの最後のセルの場合）命令を消費して、アイドル状態に移行する。終了パケットがグローバル命令の場合はつねにInRegCtrlにより、終了パケットが後続のものに転送される。
【０３８１】
付加機能
優先度を制御するため、優先システムを導入して、到来するルーティング要求がＲＵによって扱われる順番を変更する。このために上記の命令には、優先度レベルを表す優先度フィールドが含まれる。このフィールドの値が大きい場合、優先度は高く、ランタイムのルーティング中にＲＵによって優先的に処理される。この優先度フィールドは、InRegCtrlからInCtrlに到来するルーティング要求の選択に直接的に影響を与える。
【０３８２】
内部的なコンフィギュレーション通信ストリームによっては、所望の性能に達するための厳密に定められたレイテンシを要求するものがある。このために極めて重要であるのは、最大レジスタチェーン長を保持することである。ルーティングされるストリームのレイテンシを減少するために必要であるのは、アレイにより、ソースとターゲットとの間の最良のルーティングがつねに選択されることを保証することであるが、この機能がつねに要求されると、この要求により、ルーティングできないストリームが生じることがある。このような問題を緩和するため、いわゆる最適化ビット（OptBit optimum bit）と称される固有のビットをルーティング命令内に導入する。このビットは、最適なルーティングが確実に要求される場合にアクティブ化しなければならない。この場合、アレイはこの要求を満たすようにし、失敗した場合には割り込みを出力する。
【０３８３】
要求されるレイテンシを得るための択一的なやり方は、速度パスカウンタである。このカウンタによって示されるのは、再びバッファリングする前に、指定された数のレジスタをバイパスできることである。したがって基準値およびカウンタ値が定められる。これらの２つの数は、命令フィールド内に記憶される。これが渡されたそれぞれのＲＵの各セルにより、カウンタ値と基準値とが比較される。これらの２つの値が等しい場合、目下のセルにより、ストリームがバッファリングされてカウンタがリセットされる。カウンタが基準値よりも小さい場合、目下のバッファはバイパスされて、カウンタは１だけインクリメントされる。このようにして、基準値に正確に等しいバッファ数をバイパスすることができるのである。
【０３８４】
マルチグレイン通信リンク
複数のポイントツーポイントコースグレインリンクに加えて、一層フレキシブルな複数のマルチグレインポイントツーポイントリンクを導入する。ここでは個々のポイントツーポイントリンクによって、それぞれのＲＵの隣り合う２つのセルが、これらのセル内でリンクされる。１つのコースグレインリンクには一組のワイヤ、例えば１つの３２リンクに対して３２本のワイヤと、付加的なプロトコル信号とから構成されている。一まとまりベクトルは、複数の制御信号からなる単一の集合によって処理されるため、通信資源はマルチグレイン通信に使用できない。
【０３８５】
マルチグレイン通信の要求を満たすため、全体で３２ビットのベクトルを複数の個別のストリップに分ける。例えば、８個の１ビットストリップおよび３つの８ビットストリップに分けるのである。得られた各ストリップは、制御信号を分け、また他のストリップは無関係に動作することができる。このような分割の仕方の背景にあるアイデアは、上記のストリップを組み合わせて、論理的なマルチグレインサブリンクにすることである。マルチグレインリンクがあれば、一まとまりベクトルを、相互に関連する１つの３２ビットベクトルとして使用するか、またはこの一まとまりベクトルをサブチャネルに分けることができる。このような構成では、各ストリップを単一サブチャネルにすることができるか、またはストリップのグループをまとめて所望のビット幅の単一のサブチャネルにすることができる。（ハードウェアコストに関していえば）１つのサブチャネルを１つのマルチグレインリンクに当てはめることだけを考えればよいのである。
【０３８６】
マルチグレインルーティング
マルチグレインチャネルをルーティングするためにはコースグレインリンクを使用して、ルーティング処理をサポートしなければならない。このアイデアは、２つのリンクを並列にルーティングすること、すなわちマルチグレインルーティングをサポートする１コースグレインリンクと、最終的なマルチグレインストリームを含む１つのマルチグレインリンクとをルーティングすることである。このために、所要のデータフィールドを有する２つのパケットルーティング命令を定める。第１の命令パケットは（コースグレインルーティング命令と比較して）、使用するマルチグレインサブリンクを指定するための付加的なビットマスクと、関連するマルチグレインリンクを識別するためのマルチグレインリンクＩＤを含む。上に説明したような別の機能（最適ビット、速度パス、優先度ルーティング）もこのルーティングモードにおいてサポートされている。上記のＲＵ内のルーティング処理は、コースグレインルーティングと同様に行われる。
【０３８７】
セルに到着する最初のパケットは、InRegCtrlによって解析されて要求が生成され、InCtrlに転送される。InCtrlは、この要求をRoutCtrlに転送して肯定応答を待つ。RoutCtrlにより、可能性のある１ルーティング方向が見つかった場合、InCtrlは、成功の肯定応答を受け取り、また一時的なルーティングがRoutCtrlによって設定される。つぎにQueueRRP内で目下のジョブが記憶され、InCtrlは後続のセルからの肯定応答を待つ。RoutCtrlが、可能性のあるルーティングを見つけられない場合、InCtrlnは否定応答を受け取り、これは関連するInRegCtrlに転送される。このInRegCtrlにより、先行するセルに対してルーティング不可信号が形成され、このセル内でのルーティング処理が中止される。
【０３８８】
後続のセルにより、ルーティングの成功が通知される場合、InRegCtrlにより、QueueRRPの関連するエントリがクリアされ、ルーティングが終了する。後続のセルが、宛先セルへのルートを設定できない場合、これは否定応答信号を生成する。これに基づいてInCtrlはRoutCtrlに新たな要求を開始し、応答を上記のように処理する。
【０３８９】
コースグレインルーティングとマルチグレインルーティングとの間の違いは、マルチグレイン相互接続マトリクスの処理の違いにある。マルチグレインリンクの各ストリップは、別個に処理される。RoutCtrlにより、ストリップマッチャ（strip matcher）へのスイッチ要求が転送される。ストリップマッチャの役割は、入力ストリップを解析して、すでに使用されたストリップにしたがってこれらを出力リンクに整合させることである。ストリップマッチャによって行われるのは、ストリップマッチングの問題を時間領域にマッピングして、ストリップ毎に必要なスイッチボックスを順次にスイッチすることである。
【０３９０】
コースグレインストリームに対するルーティングパケット：
【０３９１】
【表１１２】
2007504688.tif 000114
マルチグレインストリームに対するルーティング命令（第１パケット）：
【０３９２】
【表１１３】
2007504688.tif 000115
【０３９３】
マルチグレインストリームに対するルーティング命令の第２パケット：
【０３９４】
【表１１４】
2007504688.tif 000116
【０３９５】
終了パケット命令：
【０３９６】
【表１１５】
2007504688.tif 000117
【０３９７】
データパケット：
【０３９８】
【表１１６】
2007504688.tif 000118
【０３９９】
改良されたルーティングの仕方に関連する図
【０４００】
【表１１７】
2007504688.tif 000119
【０４０１】
【表１１８】
2007504688.tif 000120
【０４０２】
【表１１９】
2007504688.tif 000121
【０４０３】
【表１２０】
2007504688.tif 000122
ＰＡＣＴ４８／ＰＣＴＥへの補遺
ファンクションフォールディングを用いてリコンフィギャラブル算術アレイのシリコン効率を高める手法
筆者：（ブラインドレビューのため削除）
要約
この論文はファンクションフォールディングＦｕｎｃｔｉｏｎ Ｆｏｌｄｉｎｇ、すなわちリコンフィギャラブル算術アレイ（コースグレインアレイ）のシリコン効率を高めるための設計原理に関する。このアレイでは高度に並列にインプリメンテーションされたＤＳＰアルゴリズムが実行されるものの、現行のデバイスの全シリコン効率はアレイに要求される多数のＡＬＵと満足とは云えない速度との双方によって制限されている。動作周波数は主としてノンローカルルーティング接続部の要求によって制限されている。われわれはこうした制限を克服する新たなファンクションフォールディングのアプローチ、つまり同じコンフィギュレーションに属する明確な少数の演算子を同じＡＬＵにたたみ込み、１つの処理素子上でシーケンシャルに実行することを提案する。ＡＬＵは同じ命令シーケンスを反復して実行するプログラムによって制御される。局所的にしか要求されないデータはローカルレジスタファイルに格納される。こうしたシーケンシャルアプローチにより個別のＡＬＵリソースがより効率的に用いられ、しかもアレイの全ての処理素子が現行デバイスと同様に並列に動作する。さらにＡＬＵおよびローカルレジスタはノンローカルルーティング接続部よりも高い周波数でクロック制御することができる。全体として、現行のデバイスよりも高い計算密度を得ることができる。
【０４０４】
１  導入
フィールドプログラマブルゲートアレイＦＰＧＡはアプリケーション専用集積回路ＡＳＩＣに代わるフレキシブルなプログラマブル回路としてビット指向アプリケーションに使用される。ＦＰＧＡは文献［１］に示されているようにＮＲＥコストが低く、しかもタイムツーマーケットが速い。同様にリコンフィギャラブル算術アレイもワードレベルの算術アプリケーションに対する選択手段として使用されているが、こちらはビットレベルのルックアップテーブルよりもむしろコースグレインＡＬＵに基づいている。幾つかの研究プロジェクト（例えば文献［２］のRapid、文献［１］［３］のKressArray）および商業的開発（例えば文献［４］のPACT XPP Technologies、文献［５］のMorphotech、文献［６］のElixent）がこの分野で行われている。これらのアーキテクチャは高度に並列的にインプリメンテーションされたＤＳＰアルゴリズムが提供されるにもかかわらず、まだ広汎には使用されていない。その明らかな原因の１つは現行のデバイスのシリコン効率が制限されているということであり、このために多数のＡＬＵが必要となり、また不充分な速度しか得られないのである。動作周波数は主として要求されるノンローカルルーティング接続部により制限されている。
【０４０５】
われわれは文献［４］に記載されているPACT XPP TechnologiesのeXtreme Processing Platform(XPP)をさらに拡張することによりこれらの制限を克服した。つまり１つのＡＬＵ上で１つのコンフィギュレーションの全期間にわたって１つの固定演算を実行するのではなく、同じコンフィギュレーションに属する明確な少数の演算子を同じＡＬＵへたたみ込み、同じ処理素子ＰＥ上でシーケンシャルに実行する。ＡＬＵは同じ命令シーケンスを反復して実行するプログラムによって制御される。局所的にしか要求されないデータはローカルレジスタファイルに格納される。こうしたシーケンシャルアプローチにより個別のＡＬＵリソースがより効率的に用いられ、しかもアレイの全ての処理素子は現行デバイスと同様に並列に動作する。外部データの転送は処理素子のクロックサイクルごとには要求されないので、ＡＬＵおよびローカルレジスタをノンローカルルーティング接続部よりも高い周波数でクロック制御することができる。このＡＬＵオーバークロッキング技術はますます強くなる高い集積密度への志向により理由付けされる。新世代の技術ではより小さなトランジスタを製造できるようになっているが、ワイヤは高い相対容量を有し、このためにバスが遅くなり、電流消費量が大きくなってしまうからである。
【０４０６】
大幅なアーキテクチャ変更にもかかわらず、既存のXPPプログラムを自動的に拡張アーキテクチャに自動マッピングすることができる。全体として、現行のデバイスよりも高い計算密度が得られる。
【０４０７】
この論文の以下では次の各点について述べる。最初にセクション２でPACT XPPアーキテクチャを説明し、次にセクション３で新たなファンクションフォールディング処理素子の機能およびハードウェアデザインを説明し、またセクション４でマッピングメソッドを説明し、さらにセクション５で予備実験結果を示す。最後にわれわれのアプローチを関連する技術と比較して述べ、結論を導出し、将来の技術を概観する。
【０４０８】
２  ＸＰＰアーキテクチャの概観
文献［４］に記載されている現行のＸＰＰアーキテクチャはコースグレイン適応化処理素子の２Ｄアレイ、内部メモリおよび相互接続部リソースに基づいている。６４個のＡＬＵおよび１６個の内部メモリを備えた２４ｂｉｔプロトタイプチップがPACT XPP Technologiesによって製造されている。このXPP64Aチップの開発ボードは入手可能である。
【０４０９】
PACT XPP Technologiesはさらにプレーサアンドルータ、シミュレータおよびヴィジュアライザから成る完全開発ツールを提供している。このツールはリコンフィギュレーション要素を備えた構造言語であるプロプラエタリNative Mapping Language（ＮＭＬ）を使用している。Ｃフロントエンドも同様に提供されている。
【０４１０】
２．１  アレイストラクチャ
【０４１１】
【表１２１】
2007504688.tif 000123
【０４１２】
表１２１には単純なXPPコアの基本構造が示されている。デモンストレーションのために、このコアが９個の処理素子および６個の内部ＲＡＭのみを有するものとする。コアは３×３個の矩形状の処理素子を中央に有し、１組の対辺に一列ずつ独立の内部メモリを有する。さらに２個のＩ／Ｏユニットが設けられており、データのストリーミングに対するポートまたは外部ＲＡＭのアクセスに対するインタフェースとしてコンフィギュレーションされる。処理素子のコアは通常の算術演算、論理演算、比較および計数などの特殊演算を行うＡＬＵである。コンフィギュレーションごとに各処理素子は１つの専用の演算を実行する。表中の線は１つの処理素子の出力側と他の処理素子の入力側とを接続するセグメント化されたバスのセットを表している。このアレイは動作中コンフィギュレーションを管理するコンフィギュレーションマネージャＣＭに付加される。コンフィギュレーションの管理とは外部メモリからアレイのコンフィギュレーションリソースへコンフィギュレーションデータをダウンロードすることである。有限状態機械に加え、コンフィギュレーションマネージャＣＭはコンフィギュレーションデータの記憶またはプリフェッチのためにキャッシュメモリを有する。
【０４１３】
２．２  データおよびイベントの同期
相互接続部リソースは２つの独立のバスのセット、すなわちデバイスごとのｂｉｔ幅を有するデータバスと１ｂｉｔ幅のイベントバスから成る。XPPバスは論理回路を接続するワイヤであるだけでなく、処理素子で処理されたデータおよびイベントを同期するためにハードウェア内にインプリメントされたready / acknowledgeプロトコルである。したがって処理素子の演算は、必要な全ての入力値が利用可能となり、かつ先行の結果が消費されるとただちに実行される。このようにデータフローグラフを直接にアレイにマッピングし、このアレイを通る入力データストリームをパイプライニングすることができる。パイプラインの機能停止中にもデータは失われない。ストリームのマージ、マルチプレクスなどに対する専用のデータフロー演算も同様に行うことができる。
【０４１４】
２．３  コンフィギュレーション
ＦＰＧＡに比べてXPPコアはコースグレイン性のために迅速にコンフィギュレーションできる。オペコードおよび接続部のみセットすればよい。またコンフィギュレーションが必要なのは実際に使用されるアレイオブジェクトのみである。
【０４１５】
コンフィギュレーション時間はプリフェッチ機構により低減される。１つのコンフィギュレーションをアレイへロードしているあいだ、別のコンフィギュレーションがＣＭキャッシュへロードされる。このようにすれば要求に応じていちいち外部メモリからロードする必要がなくなる。同じことが以前に使用されたコンフィギュレーションにも当てはまり、この場合コンフィギュレーションデータはＣＭキャッシュ内に残っていることになる。
【０４１６】
３  ファンクションフォールディング処理素子
次に拡張XPP PEすなわちファンクションフォールディング処理素子の機能およびハードウェアデザインについて説明する。
【０４１７】
３．１  ファンクションフォールディングの例
【０４１８】
【表１２２】
2007504688.tif 000124
【０４１９】
【表１２３】
2007504688.tif 000125
【０４２０】
まず簡単な例を考察しよう。アドレスadrを定数のオフセットoffsおよび座標x, yから
adr＝offs＋x＋256*y
として計算する。表１２１のような単純な処理素子に基づくXPPインプリメンテーションでは、この計算は標準的には直接に表１２３（ａ）のデータフローグラフへマッピングされる。各加算子および各乗算子は自身のＡＬＵへマッピングされる。ゆえに新たなアドレスがサイクルごとに計算される。ただしセクション１で述べたように、動作周波数はＡＬＵそのものではなく、バス接続部によって制限されている。
【０４２１】
シリコン効率を高めるために、つまり１ｍｍ２当たりおよび１ｓ当たりでより多くの演算を実行するために、ＡＬＵのクロックを高速化しなければならない。これはバス内により多くのパイプラインレジスタを設けることにより達成される。ただしこうするとデータフローグラフが複数のサイクルを含む場合、生憎なことに、チップ面積および電力消費が増大し、スループットが低下してしまう。われわれのアプローチでは、現行のXPPコアと同程度の周波数でバスを駆動し、ＡＬＵのクロックレートを処理素子内部で局所的に増大する。こうしたｎ回たたみ込みのオーバークロッキングにより、ｎ個［ここでｎは小さな数である］のＡＬＵ演算を１つのバスサイクルにスケジュールすることができる。われわれはこの演算グループをクラスタと称している。必要な処理素子数の大幅な低減はハードウェアのオーバヘッドに対して有効である。リコンフィギャラブル“空間的コンピューティング”というパラダイムは確かに成功しているが、われわれはそれに拘わるのでなく、局所的シーケンシャルアプローチによりＡＬＵリソースの効率を最適化している。
【０４２２】
同じデバイス内でオーバークロッキング係数（例えばｎ＝２，ｎ＝４）が異なっていても良いことにより、異なる局所的時空間のトレードオフが可能である。１つの実施例では、ｎ＝４に対してはデータフローグラフの全ての演算がクラスタリングされ、乗算が２つのサイクルを要する場合であっても、同じＡＬＵで実行される。ｎ＝２に対しては２つの加算子のみがクラスタリングされる。これによりｎ＝４に比べて面積は２倍になるが、スループットも２倍となる。
【０４２３】
ｎ個の命令を反復して実行するプログラムコントローラのほか、中間結果をＡＬＵ入力側へフィードバックする小さな内部レジスタファイルも処理素子に要求される。このローカルフィードバックループはｎ個までの演算子を含むサイクルで全体のスループットを低下させることなくデータフローグラフをインプリメントできる。
【０４２４】
３．２  ハードウェアデザイン
表１２２に示されているハードウェアデザインでは次のようなファンクションフォールディングが行われる。表１２１の単純な処理素子と同様に、新たな処理素子はready / acknowledgeプロトコルにしたがうデータおよびイベントの入出力ポートを介して相互接続ネットワークと通信する。各ポートは処理素子の高速の内部クロックとｎ倍遅いバスクロックとを同期させる。入力データはバスクロックサイクルの全期間にわたって安定であり、処理素子の内部クロックサイクルごとにサンプリングすることができる。出力データはバスサイクルの開始時にバスレジスタへコピーされる。ファンクションフォールディング処理素子は演算のクラスタ全体を実行するため、単純な処理素子より多くのポートを要する。しかし単純な処理素子のポートのｎ倍を要するわけではない。なぜならコンフィギュレーション時に内部レジスタにロードされる入力およびクラスタ内のローカル接続部が一定であるため、外部コネクションが大きく制限されていることが多いからである。良好なクラスタリングアルゴリズムを用いれば外部コネクションを最小化することができる。表３（ｂ）に点線の囲みで使用されているように、ｎ＝４の実施例のクラスタに対しては２つの入力ポートおよび１つの出力ポートがあればよい。
【０４２５】
より詳細に云えば、表１２５の処理素子は次のように動作する。小さなプログラムカウンタＰＣは命令記憶部内でコンフィギュレーションされた命令を反復して実行する。処理素子の各サイクルでプログラムカウンタはＡＬＵオペコードを選択し、マルチプレクサを制御してＡＬＵ入力を選択させる。入力ポートまたは内部レジスタファイルのエントリのいずれかが使用される。ＡＬＵ出力は内部レジスタファイルまたは出力ポートまたはその双方へ書き込まれる。全体の設計は単純であり、ファンクションフォールディングをサポートできる最小限の大きさに保たれる。他の制御ストラクチャは不可能である。入出力ポート数および内部レジスタ数は約ｎとなる。したがってわれわれはレジスタおよびマルチプレクサのみを用いてレジスタファイルのインプリメンテーションをきわめて迅速に選択することができる。ポート数およびレジスタ数が小さいので、フェッチ／実行／記憶の全プロセスを１サイクル内で実行することができる。唯一の例外は２サイクルにわたる乗算演算である。外部入力が利用不能であるか、またはダウンストリームパイプラインが機能停止して外部入力ポートがいっぱいになっている場合、コントローラＦＳＭはプログラム実行を停止する。わかりやすくするために表２ではイベントポートおよびイベントレジスタは省略されていることに注意されたい。イベントはデータと同様に内部および外部で使用および記憶される。
【０４２６】
さらにわれわれは表１２３（ｂ）に示されているアドレス形成クラスタに対する単純な処理素子のプログラムを提供する。ポートおよびレジスタへの接続部のマッピングは表中に示されている。われわれはレジスタr1, r2がそれぞれコンフィギュレーション時に一定の値offs, 256で初期化されていると仮定している。反復して実行されるアセンブラコード
add r3 ← r1 , i1
mul r4 ← r2, i2
add o1 ← r3 , r4
がクラスタを記述している。
【０４２７】
４  アプリケーションマッピング
【０４２８】
【表１２４】
2007504688.tif 000126
【０４２９】
表１２４には拡張ＸＰＰアーキテクチャのツールフローが示されている。これは文献［４］に記載されているｘｍａｐプログラムのインプリメンテーションの現行のルールフローにきわめて類似している。影付きのブロックで表されたフェーズが追加されているだけである。次のフェーズ、すなわち
・Ｃフロントエンド（オプショナル）：構造的ＮＭＬコード（セクション２を参照）を標準Ｃのサブセットから形成する
・ＮＭＬ構文解析系：入力ＮＭＬファイルを構文解析し、ＸＰＰ演算子にマッピングする
・プレーシングおよびルーティング：処理素子（つまり現行のアーキテクチャにおける演算子）をＸＰＰアレイへプレーシングし、接続部をルーティングする
・バイナリ形成：ＸＢＩＮバイナリファイルを形成する
は現行のＸＰＰツールフローに既に存在している。
【０４３０】
ファンクションフォールディングでは、付加的に、１つの処理素子にマッピングされる演算子を定義する演算子クラスタリングのフェーズが必要とされる。クラスタは手動でＮＭＬファイル内の注釈により定義されるが、自動クラスタリングアルゴリズムはプログラミングの単純化、Ｃフロントエンドの使用、既存のＮＭＬコードのマッピングの際に要求される。このことについては次項で説明する。さらに処理素子のプログラムコードをセクション４．２で後述するように形成しなければならない。なおプレーシングおよびルーティングのフェーズおよびバイナリ形成のフェーズをともに適合化しなければならないことも明らかである。
【０４３１】
４．１  演算子のクラスタリング
ファンクションフォールディングＰＥに対する演算子クラスタリングの問題は、例えば[7]のＦＰＧＡに対するモジュールのマッピングおよび慣用のプロセッサに対してコードジェネレータにおいて発生するグラフカバリング（graph covering ）問題と類似している。したがってこれらのアルゴリズムをまず検討する。[7]で使用される効率的ダイナミックプログラミングアルゴリズム（efficient dynamic-programming algorithm）および類似のアプローチは、実質的にツリーカバリング（tree-covering）アルゴリズムである。これは演算のツリーに対して最適なカバリングを形成する。しかしながらこれは任意のデータフローグラフを処理することはできない。このため、オリジナルのグラフからフィードバックサイクル（feedback cycle）およびファンアウトエッジ（fanout edge）を取り除く前処理フェーズが必要である。結果的に得られるのは、効率的に覆うことのできるツリーからなる森である。しかしながら得られた最適なツリーカバリングは、オリジナルのデータフローグラフに対して最適ではない。
【０４３２】
以下では当面の演算子クラスタリング問題を検討する。すなわちここではファンクションフォールディングＰＥの制約、すなわちオーバークロッキングファクタｎ、ポート数および内部レジスタに沿って、クラスタ数の最小の解決手段を探し出さなければならない。また（外部のルーティング遅延によって発生するスループットの低下を回避するため）サイクルはできる限り、１クラスタ内で処理すべきであり、また外部コネクション数は最小化すべきである。残念なことにこれらの品質判定条件は、ツリーカバリング前処理フェーズの出力において、すなわちサイクルおよびファンアウトエッジを取り除いた後、見ることができない。このため、演算クラスタリングに対してツリーカバリングを適用しない。
【０４３３】
その代わりにオリジナルのグラフにおいて動作するアルゴリズムを開発した。複雑さを低減するため、接続されクラスタを成している演算子だけを考察する。それはこれらのクラスタだけが内部レジスタを使用し、外部ポートの数が低減されるからである。付加的な後処理フェーズでは、未接続のクラスタは、これらが互いに隣り合って配置されている場合、後でマージすることができる。
【０４３４】
第１のアルゴリズムフェーズでは、接続されたすべてのクラスタが明示的に形成される。発生し得る未接続のクラスタの数は、演算子数において指数関数的になることに注意されたい。
【０４３５】
第２のフェーズでは、入力グラフ全体をカバーするクラスタの最適な組み合わせを決定しなければならない。残念なことにクラスタの考えられ得るすべての組み合わせの数は指数関数的である。このために網羅的に探すことは不可能である。その代わりにこのアルゴリズムのメインループは、演算子を次第に増大させた部分集合に作用して、この部分集合の最適なクラスタリングを形成しこれを記憶する。ここでこれは演算子グラフ全体の最適なクラスタリングが計算されるまで行われる。このアルゴリズムが使用しているのは、部分最適解が完全最適解に含まれているという事実である。このようにすることにより、すべての部分集合に対して最適なクラスタリングを計算する必要はない。新しい部分集合の最適なクラスタリングは、前に計算しなかったかもしれない別の部分集合に依存するため、指数関数的な実行時間に結びつき得るいくつかの再帰呼び出しが必要である。しかしながらオーバークロッキングファクタｎ≦４および演算子数ｋ＜５０に対して、数分間の範囲であることが判明した。問題となるさらに大きなサイズに対してつぎのような帰納的な手法をテストした。すなわち、
・  （ｎ個の演算子よりも多くの演算子を有する）大きなフィードバックサイクルをグラフから取り除く。この場合、小さなサイクルはなお１クラスタ内で実行され、わずかに数クラスタだけが除外され得るだけであり、再帰呼び出しの数は大きく低減される。
【０４３６】
・  最良の解を再帰呼び出しで計算せず、計算される部分集合の最初のクラスタリングだけを計算する。比較的小さなクラスタの前に比較的大きなクラスタを適用することによって、このアルゴリズムにより、いずれにせよほぼ最適な解が計算される。
【０４３７】
上記の拡張により、１５０個までの演算子を有する実際的なデータフローグラフをクラスタリングすることができる。テストしたケースに対して、上記の帰納的な手法により、最適解に極めて近いないしは等しいクラスタリングが作成された（すなわちわずかに数クラスタだけ多かった）。
【０４３８】
前の議論においてＰＥプログラムにおける演算の数をｎに制限したことに注意されたい。ふつうＰＥプログラムの実行を１バスサイクル以上にもわたって伸ばしたくないため、これは合理的である。しかしながらＰＥがｎ演算よりも多く実行するようにプログラムされ得る場合、スループットに重大な影響を与えない演算は、一層大きなクラスタに結合することができる。こうすることによって、全体的なスループットに影響を与えることなく、所要のＰＥ数をさらに低減することができる。
【０４３９】
４．２  ＰＥコード形成
演算子クラスタリングの後、各クラスタに対するＰＥプログラムコードが形成される。これについてはセクション３に示した例のアセンブラコードを参照されたい。慣用のレジスタ割り当てを簡易にしたものが使用されて、内部的な接続が内部的なレジスタにマッピングされる。命令は、クラスタのデータフローグラフから直接抽出することができる。
【０４４０】
５  結果
５．１  ＰＥの速度および面積
ファンクションフォールディングＰＥの面積は、ポートおよびレジスタの数に依存して、対応する単純なＰＥの面積よりも約１５％〜２５％大きいと見積もられる。１６ビットのデータパスに対し、予備的な統合結果により、１３０ｎｍシリコンプロセスに対して４００〜５００ＭＨｚのＰＥ周波数が達成された。
【０４４１】
評者への注：この論文の最終版に対して期待されるのは、現在進行中のＰＥハードウェア実装からの詳細な分析結果が示されることである。
【０４４２】
５．２  複素ＦＩＲアプリケーションの分析
【０４４３】
【表１２５】
2007504688.tif 000127
【０４４４】
このセクションではファンクションフォールディングＰＥにおける典型的なＤＳＰアルゴリズム、すなわち複素数に作用するＦＩＲフィルタの実現について説明する。定数Ｃならびに入力ＸおよびＹから出力Ｚ ＝ Ｘ＊Ｃ＋Ｙを計算する１ＦＩＲフィルタセルを考察する。すべての値は複素数である。すなわち（Ｚre，Ｚim）＝（Ｘre＊Ｃre−Ｘim＊Ｃim＋Ｙre，Ｘre＊Ｃim＋Ｘim＊Ｃre＋Ｙim）である。表１２８（ａ）には相応するデータフローグラフが示されている。これには８つの演算子が含まれており、点線で囲ったボックスで示したようにｎ ＝ ４のオーバークロッキングファクタに対して３つのクラスタにたたみ込むことができる。表１２８（ｂ）には結果的に得られるクラスタデータフローグラフが示されている。すべてのクラスタはＰＥをフルに活用している。すなわち４つのＰＥクロックサイクルをすべて活用しているのである。
【０４４５】
現在のＸＰＰデバイスに基づく実現（ＦＩＲcurr）のシリコン効率と、ファンクションフォールディングＰＥベースの実現（ＦＩＲnew）のシリコン効率とを比較する。上に概略的に述べたようにｎ＝４に対してＦＰＥ＝400 MHzおよびＦｂｕｓ＝100MHzと見積もる。Ｆｂｕｓは現在のアーキテクチャの動作周波数でもある。表１２８（ａ）および（ｂ）からわかるように、与えられたＦＩＲセルから構成されるフィルタは、これらの２つの実現に対して容易に完全にパイプライニングすることができる。２つの実現は同じ性能を有するため、これらの実現によって100MHzのレートで出力が形成される。
【０４４６】
ファンクションフォールディングＰＥの面積は、ＡＦＦＰＥ ＝ 1.2×ＡｃｕｒｒＰＥ，すなわち現在のＰＥよりも２０％大きいと見積もられる。これらの２つのフィルタ実現に対する面積比はつぎのようになる。すなわち
【０４４７】
【数１】
2007504688.tif 000128
である。
【０４４８】
この大まかな見積もりによって示されるのは、新しい実現方式の面積効率は、旧い実現方式の面積効率の２倍以上であり、しかもより多くのパイプライニングレジスタを外部バスに必要としない。全体的なシリコン効率は２倍以上である。
【０４４９】
５．３  ベンチマークマッピング結果
【０４５０】
【表１２６】
2007504688.tif 000129
【０４５１】
ファンクションフォールディングの一般的な適用可能性を決定するために、セクション４．１で説明したアルゴリズムを、広範囲のアプリケーション領域からの継承された４３個のＸＰＰ構成のベンチマークに適用した。平均クラスタ利用率、すなわち繰り返しのＰＥプログラムによって使用されるＰＥサイクル数を求めた（クラスタ利用率が高いことは、ＰＥプログラムが各バスサイクルで実行できることを保証しないことに注意されたい。１アプリケーションにおける全体的なＰＥ利用率は、入力データの利用可能性およびすべてのＰＥの全体的なスループットにも依存する）。この値は、ファンクションフォールディングの有効性をよく示している。
【０４５２】
表１２９に示されているのは、ｎ＝２およびｎ＝４に対し、ポート数を変化させて得られた結果である。内部レジスタの数は、この評価に対してまだ制限されていない。４つの入力および出力データならびにイベントポート（ｎ＝２に対して1.78またｎ＝４に対して3.05）に対する結果が示しているのは、平均的なＸＰＰ構成に対してファンクションフォールディングＰＥ資源を効率的に利用できることである。この表は、６つのデータポートを使用することにより、クラスタ利用率がわずかにしか増大しないことを示している。その一方、使用するデータポートを少なくすると、利用率ははっきりと低下する。ポートの面積要求を詳細に示すハードウェア実現の結果と、クラスタ利用数とを組み合わせて、最良の全体シリコン効率を生じるＰＥパラメタを決定する。
【０４５３】
６  関連する刊行物
セクション１で述べたようにリコンフィギャラブル算術アレイについていくつかのプロジェクトがあるが、知る限りでは刊行物にはファンクションフォールディングに類似した解決手段はない。以下のアーキテクチャは本発明のアプローチとは大きく異なるが、ＰＥによって実行される演算を高速に変更することができる。
【０４５４】
ＲＡＷマイクロプロセッサ[８]にも処理素子のクラスタリングが含まれているが、これらはかなり複雑なプロセッサである。このためこれらのプログラムは、ファンクションフォールディングＰＥプログラムほど簡単に自動生成することはできない。このＲＡＷアーキテクチャは、むしろチップ上のマルチプロセッサに類似している。
【０４５５】
一方ではMorphoSysアーキテクチャ[５]はＳＩＭＤアプローチを追従している。行または列のすべてのＰＥは、（グローバル）プログラムによって制御され、同じ命令を実行する。これによってＰＥは一層単純になるが、ＳＩＭＤ原理により、実行可能で利用可能な計算を大きく制限してしまう。またアレイのプログラムも一層困難である。
【０４５６】
最後にマルチコンテキストデバイス（multi-context device）により、２つ以上の完全なコンフィギュレーションコンテキスト（complete configuraton context）が提供される[９]。このテクニックは、マルチコンテキストＦＰＧＡから採用されたものである。しかしながらここでは頻繁なリコンフィギュレーションができない。それはまずシャドウコンフィギュレーション（shadow configuration）を完全にロードしなければならないからである。コンフィギュレーションは完全に独立している。マルチコンテキストデバイスはコンフィギュレーションレイテンシをある程度隠すが、コースグレインリコンフィギャラブルアーキテクチャの一般的な効率性の問題を克服はしないのである。
【０４５７】
７  結論および今後の作業
ここまでは、強化されたＰＡＣＴ  ＸＰＰアーキテクチャに対するファンクションフォールディング処理素子のアーキテクチャおよび機能を述べて来た。ハードウェアでの実現およびこのアーキテクチャへのアプリケーションのマッピングの両方を事前に分析することによって示されたのは、ファンクションフォールディングが、現在のリコンフィギャラブル算術アレイに比較してシリコン効率を極めて大きく増大させ、また電力消費を低減する可能性を有することである。
【０４５８】
ファンクションフォールディングＰＥを実現し、そのパラメタを分析した今後の作業に含まれるのは、セクション４．１の終わりに述べたスループットに重要でないパスの評価である。ここでは統合化されたクラスタリングならびにプレースおよびルーティングのアルゴリズムが使用されることになる。ＣからファンクションフォールディングＰＥへの直接のコンパイラを開発することも検討されており、これはＮＭＬを介する現在のデザインフローよりも良好にその能力を活用できることと思われる。
【０４５９】
参考文献
[1] R. Hartenstein.  A decade of reconfigurable computing: a visionary retrospective.  In Proc.  Design, Automation and Test in Europe, 2001.
[2] D. C. Cronquist, P. Franklin, C. Fischer, M. Figueroa, and C. Ebeling.  Architecture design of reconfigurable pipelined datapaths.  In Proc.  20th Anniversary Conference on Advanced Research in VLSI, Atlanta, GA, March 1999.
[3] R. Hartenstein, R. Kress, and H. Reinig.  A new FPGA architecture for word-oriented datapaths.  In Proc. Field-Programmable Logic; 4th International Workshop.  Springer-Verlag, September 1994.
[4] V. Baumgarte, G. Ehlers, F. May, A. Nueckel, M. Vorbach, and M. Weinhardt.  PACT XPP a self-reconfigurable data processing architecture.  The Journal of Supercomputing, 26(2), September 2003.
[5] M.-H. Lee, H. Singh, G. Lu, N. Bagherzadeh, and F. J. Kurdahi.  Design and implementation of MorphoSys reconfigurable computing processor.  Journal of VLSI and Signal Processing-Systems for Signal, Image and Video Technology, March 2000. March 2000.
[6] T.  Stansfield.  Using multiplexers for control and data in D-Fabrix.  In Field Programmable Logic and Applications, LNCS 2778, pages 416-425.  Springer, 2003.
[7] T. J. Callahan, P. Chong, A. DeHon, and J. Wawrzynek.  Fast module mapping and placement for datapaths in FPGAs.  In Proc. FPGA'98, Monterrey, CA, 1998.
[8] M. B. Taylor et al.  The Raw microprocessor:  A computational fabric for software circuits and general-purpose programs.  IEEE Micro, March/April 2002.
[9] B. Salefski and L. Caglar.  Re-configurable computing in wireless.  In Proc. 38th Design Automation Conference, Las Vegas, NV, June 2001.
【図面の簡単な説明】
【０４６０】
【図１】機能ユニットＦＵを示す図である。
【図２】マルチグレイン通信リンクを示す図である。
【図３】信号Data／Ready／PD／ACKを示す図である。
【図４】図の信号のタイミングチャートである。
【図１】
2007504688.tif 000130
【図２】
2007504688.tif 000131
【図３】
2007504688.tif 000132
【図４】
2007504688.tif 000133
【図５】
2007504688.tif 000134
【図６】
2007504688.tif 000135
【図７】
2007504688.tif 000136
【図８】
2007504688.tif 000137
【図９】
2007504688.tif 000138
【図１０】
2007504688.tif 000139
【図１１】
2007504688.tif 000140
【図１２】
2007504688.tif 000141
【図１３】
2007504688.tif 000142
【図１４】
2007504688.tif 000143
【図１５】
2007504688.tif 000144
【図１６】
2007504688.tif 000145
【図１７】
2007504688.tif 000146
【図１８】
2007504688.tif 000147
【図１９】
2007504688.tif 000148
【図２０】
2007504688.tif 000149
【図２１】
2007504688.tif 000150
【図２２】
2007504688.tif 000151
【図２３】
2007504688.tif 000152
【図２４】
2007504688.tif 000153
【図２５】
2007504688.tif 000154
【図２６】
2007504688.tif 000155
【図２７】
2007504688.tif 000156
【図２８】
2007504688.tif 000157
【図２９】
2007504688.tif 000158
【図３０】
2007504688.tif 000159
【図３１】
2007504688.tif 000160
【図３２】
2007504688.tif 000161
【図３３】
2007504688.tif 000162
【図３４】
2007504688.tif 000163
【図３５】
2007504688.tif 000164
【図３６】
2007504688.tif 000165
【図３７】
2007504688.tif 000166
【図３８】
2007504688.tif 000167
【図３９】
2007504688.tif 000168
【図４０】
2007504688.tif 000169
【図４１】
2007504688.tif 000170
【図４２】
2007504688.tif 000171
【図４３】
2007504688.tif 000172
【図４４】
2007504688.tif 000173
【図４５】
2007504688.tif 000174
【図４６】
2007504688.tif 000175
【図４７】
2007504688.tif 000176
【図４８】
2007504688.tif 000177
【図４９】
2007504688.tif 000178
【図５０】
2007504688.tif 000179
【図５１】
2007504688.tif 000180
【図５２】
2007504688.tif 000181
【図５３】
2007504688.tif 000182
【図５４】
2007504688.tif 000183
【誤訳訂正書】
【提出日】平成18年7月18日(2006.7.18)
【誤訳訂正１】
【訂正対象書類名】明細書
【訂正対象項目名】全文
【訂正方法】変更
【訂正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はリコンフィギャラブルコンピューティングに関連する。特に本発明はリコンフィギャラブルデバイスのアーキテクチャの改善に関連する。
【０００２】
リコンフィギャラブルデータプロセシングアレイはこの分野では周知である。本出願人による先行出願文献および／または先行公開文献の全ての内容は参照により本発明に組み込まれる。したがって以下に説明するデバイスは、コースグレイン計算素子および／またはデータ演算素子を含み、有利にはローディングユニット（ＣＴ，ＣＭなど）に対するリコンフィギュレーション性を表す信号に応じてその全体または一部を動作中にリコンフィギュレーションできるｎ＞１の多次元アレイであってよい。
【０００３】
現在これらのデータプロセシングアレイの幾つかが構築されている（例えばＸＰＰ１，ＸＰＰ１２８，ＸＰＰ２，ＸＰＰ６４）。ただし周知のデバイスやその演算方法の改善が所望される。
【０００４】
したがって、この課題を解決する複数の改善手段を以下に説明する。これらの手段は個々にまたは共同してデバイスのパフォーマンスを高め、電力消費および／またはコストを低減することができる。
【０００５】
周知のデバイスを改善する第１の手段は、個々のプロセッサ素子の機能を改善することである。以前からアレイにリングメモリ（RINGSPEICHER）を設け、このリングメモリ内に命令を記憶し、所定のリングメモリアドレスを指示するポインタを形成して次に実行すべき命令を選択させることが提案されている。また、少なくとも１つの“シャドウコンフィギュレーション”を形成し、複数のコンフィグレーションおよびシャドウコンフィギュレーションを切り換えることも提案されている。その他の付加的な提案には“ウェーブリコンフィギュレーション”と称される手段もある。
【０００６】
これらの周知の手法によりリコンフィギャラブルデバイスのパフォーマンスは改善されるが、さらなる改善の必要性および可能性があるように思われる。
【０００７】
以下の説明において詳細な例を挙げるが、例えばＰＡＥに関連するレジスタ数に対して、正確に同数のレジスタを備えたＡＬＵを設ける必要はないことを理解されたい。当該分野の技術者には、明示的な実施例に対する変更が容易に可能であること、詳細な説明はＰＡＥの例示に努めたものであって本発明を限定する意図で行われたのではないことが理解されるであろう。
【０００８】
１  ＸＰＰ ＸＰＰ−ＩＩに対する変更の概観
１．１  ＡＬＵ−ＰＡＥアーキテクチャ
ここで提案される改善されたアーキテクチャでは、ＰＡＥは例えば４個の入力ポートおよび４個の出力ポートを有する。各ＰＡＥにはＭＥＲＧＥ，ＳＷＡＰ，ＤＥＭＵＸ，ＥＬＵＴなどのデータフロー手段を備えたＦＲＥＧパスが組み込まれている。これは新たにＤＦパスと称される。
【０００９】
２個の入力ポートＲｉ０，Ｒｉ１は直接にＡＬＵに接続されている。２個の出力ポートはＡＬＵの結果を受け取る。入力ポートＲｉ２，Ｒｉ３は典型的には出力側がＲｏ２，Ｒｏ３であるＤＦパスへ供給される。これに代えて入力ポートＲｉ２，Ｒｉ３をＡＬＵに対する入力側として用いることもできる。こうした拡張は、後述するファンクションフォールディングＦｕｎｃｔｉｏｎ Ｆｏｌｄｉｎｇが使用される場合、適切な数のＡＬＵ入力側を設ける際に必要である。このモードでは出力側Ｒｏ２，Ｒｏ３は付加的な出力側として用いられる。
【００１０】
各データレジスタ（ＲｉまたはＲｏ）に対して１つのイベントポート（ＥｉまたはＥｏ）が存在する。
【００１１】
付加的なデータおよびイベントがＢＲｉ０−１，ＢＥｉ０−をバイパスするように構成することもできる（必須ではない）。判別はどれだけの頻度でファンクションフォールディングが使用されるか、また平均してどれだけの数の入力側および出力側が必要とされるかに依存してなされる。
［図１を参照］
１．１．１  その他の拡張
例えばグラフィクスおよびイメージングに対して８ｂｉｔ幅および１６ｂｉｔ幅のデータ語を支援するＡＬＵ内にはＳＩＭＤ演算がインプリメントされている。
【００１２】
例えば音声アルゴリズム、ビデオアルゴリズムおよびイメージングアルゴリズムに対するＡＤＤ／ＳＵＢ／ＭＵＬ命令に対しては飽和がサポートされている。
【００１３】
１．２  ファンクションフォールディング
１．２．１  基礎および入力／出力パラダイム
本章では、より良く理解してもらうために、ＸＰＰアーキテクチャの基礎演算パラダイムをＰＥＴＲＩ‐ＮＥＴに基づいて繰り返しておく。ＰＥＴＲＩ‐ＮＥＴに加え、より良く理解してもらうために、以下に現行のＸＰＰアーキテクチャの変更点を説明する。
【００１４】
ほとんどのアレイで各ＰＡＥはＰＥＴＲＩ‐ＮＥＴによって定義されたデータフローノードとして動作する（他の機能部分を有するアレイも存在するが、これらは標準のＰＡＥとは考えない）。ＰＥＴＲＩ‐ＮＥＴは複数の入力の計算をサポートし、単一の出力を形成する。ＰＥＴＲＩ‐ＮＥＴの特徴は全ての入力データが得られるまで演算が遅延されるということである。
【００１５】
ＸＰＰ技術では、これは
１．必要な全てのデータが利用可能となる
２．必要な全てのイベントが利用可能となる
ことを意味している。データおよびイベントの数量はデータアンドコントロールフローによって定義されている。利用可能であることは動作中にハンドシェイクプロトコルＲＤＹ／ＡＣＫにより表示される。
［図５２を参照］
太線は演算を表し、右側の丸は全ての入力データが利用可能となるまで当該の演算が遅延されることを表している。
【００１６】
基礎的手法であるファンクションフォールディングを拡張することにより、１つの演算に代えて複数の演算がシーケンシャルにサポートされ、これがＣｙｃｌｅと称される。重要なのはＰＥＴＲＩ‐ＮＥＴの基礎が変更されないということである。
［図５３を参照］
典型的なＰＡＥ状のＰＥＴＲＩ‐ＮＥＴは１演算当たり１つの入力パケットを消費する。シーケンシャル演算では同じ入力パケットの複数の読み出しがサポートされる。ただしインタフェースモデルは変更されないままである。
【００１７】
データの複製はＰＥＴＲＩ‐ＮＥＴの出力パスで行われ、演算の基礎には影響しない。
［図５４を参照］
１．２．２  ファンクションフォールディングのメソッド
最も重要な拡張の１つは、複数のＰＡＥ機能を１つのＰＡＥ上にたたみ込み、シーケンシャルに実行させる手段である。この手段はシーケンシャル処理またはマイクロコントローラ手段をサポートしないことを理解されたい。ファンクションフォールディングの意図は複数のデータフロー演算を行い、各機能間のネットワークに代わるレジスタ構造を用いてこれらを単一のＰＡＥ上にマッピングすることである。
【００１８】
目的の１つにＰＡＥの局所的なクロック周波数にしたがって増大するシリコン面積を節約することが挙げられる。付加的に電力の節約も期待される。バスはクロック周波数の数分の１の速度で動作するからである。つまり多くの電力を消費するバスを介したデータ転送が低減される。
［図２を参照］
内部レジスタは種々の手段でインプリメントすることができる。例えば次の２つの手段が挙げられる。すなわち
１．データフローモデル
各レジスタｒ’はデータがレジスタに書き込まれると直ちにセットされ、読み出されると直ちにリセットされる有効ｂｉｔを有する。データは有効ｂｉｔがセットされると書き込むことができず、有効ビットがセットされないと読み出すことができない。このアプローチにより１００％互換性のあるデータフロー挙動がインプリメントされる。
２．シーケンサモデル
レジスタは関連する有効ｂｉｔを有さない。ＰＡＥはシーケンサとして動作し、ＰＡＥのエッジ（バス接続部）ではパラダイムがＸＰＰ状のデータフロー挙動へ変更される。
【００１９】
一見するとデータフローモデルが有利であるように思われるが、そこには大きな欠点が含まれる。その１つは、大量のレジスタが各データパスをインプリメントする必要があり、データの複製が煩雑で効率が悪いことである。また限定されたシーケンシャル演算によりプログラミングおよびハードウェアのコストを単純化できることも１つである。
【００２０】
ゆえに結果としてはシーケンサモデルがインプリメントされていると見なされる。純粋なデータフローは自動ツールを用いてたたみ込まれ、純粋なデータフローは自動ツールを用いてたたみ込まれるので、プログラマはデータフローパラダイム内にとどまり、付加的な手段に惑わされない。自動ツールは例えばレジスタ割り当て中にパラダイムに背反しないように注意していなければならない。
【００２１】
図３はシーケンサモデルを用いて４個ではなく２個のレジスタのみ必要とされるケースを表している。
【００２２】
例えばアドレス形成のような煩雑な機能および“ＩＭＥＣ”などのデータストリーム演算のアルゴリズムを可能にするために、ＰＡＥは４個の命令レジスタだけでなく８個の命令レジスタを有する。ただしバスクロックとＰＡＥクロックとの比の最大値は通常のファンクションフォールディングの係数４に制限されている。
【００２３】
新しいＰＡＥをサポートするファンクションフォールディングのサイズは最大２５％まで増大すると予測される。これに対してＰＡＥは４個から１個へ低減される。
【００２４】
平均して、最適化されるのではなく３個の機能のみが単一のＰＡＥにたたみ込まれ、ＸＰＰ６４がＸＰＰ２１によって置換されると見なされる。大きいほうのＰＡＥを考慮に入れると、ＸＰＰ６４ ＸＰＰ−ＩＩの機能は１／２より小さい面積のＸＰＰ ＸＰＰ−ＩＩＩ上で実行可能となる。
【００２５】
ファンクションフォールディングの方法および装置およびそのさらなる改善点を以下に詳細に説明する。
【００２６】
内部データレジスタおよびバス転送の等価性
ファンクションフォールディングコンセプトは
ａ）ＰＡＥ内でvon NeumanプロセッサおよびHavardプロセッサと同じ法則が通用するシーケンシャルモデル
ｂ）任意の順序でＰＥＴＲＩ‐ＮＥＴモデルデータが計算または演算されるＰＡＣＴ ＶＰＵモデル
の２つの異なるデータ処理モデルを実現している。
【００２７】
入力レジスタＩＲへのデータの到来が予測不能であるため、Ｒｃ０．．．Ｒｃｎ内の命令をリニアに実行しなければならない場合、デッドロックまたはパフォーマンスの少なくとも大幅な低下が起こる。特にＰＡＥ出力を入力側へ戻すフィードバック部が存在する場合、デッドロックが起こる。これは命令を所定の順序でなく処理能力にしたがって処理することにより回避できる。つまりＶＰＵモデルの全ての条件が満足されたら直ちに所定の命令を実行する。したがって、例えば到来するデータの全てのＲＤＹハンドシェイク、出発するデータの全てのＡＣＫハンドシェイク、また必要であればハンドシェイクを含む各トリガが有効になったとき、命令が実行される。ファンクションフォールディングＰＡＥ（ＦＦ ＰＡＥ）はデータを付加的に内部レジスタにも記憶するので、有利な実施例ではその有効性およびステータスを検査することもできる。こうして全ての内部データレジスタＲｄ０．．．Ｒｄｎには個別に有効データがレジスタ内に存在するか否かを表す有効ｂｉｔが割り当てられている。データがレジスタへ書き込まれるとき有効ｂｉｔがセットされ、読み出されるとき有効ｂｉｔがリセットされる。つまりデータは有効値がセットされているときにしか読み出すことができず、有効値がセットされていないときにしか書き込むことができない。有効値フラグはＲＤＹハンドシェイクおよびＡＣＫハンドシェイクの伝達によりバスシステムのステータスマシンで形成されたステータスにきわめて近似に相応する。このようにレジスタにステータスビットを形成する手段は有利であり、進歩的である。
【００２８】
したがってＰＥＴＲＩ‐ＮＥＴにきわめて類似した実行のための全ての条件が満足されたとき、命令を実行することができる。
【００２９】
基本的には命令の選択および実行の制御のための２つのメソッドが存在する。以下にこれを説明する。
【００３０】
メソッドＡ：ＦＦ ＰＡＥプログラムポインタ
（有限状態機械＆プログラムポインタアプローチ）
［図４を参照］
シーケンシャルプロセッサの制御方式にしたがって、プログラムカウンタは命令メモリ内の所定の命令を選択するために用いられる。有限状態機械はプログラムカウンタを制御する。この有限状態機械はＲＣ内の命令すなわちプログラムカウンタＰＣの指示する命令に対する全ての条件が満足されているか否かを検査する。そのために、命令の実行に必要な入出力の各ＲＤＹハンドシェイクおよびＡＣＫハンドシェイクが検査される。また読み出すべき内部レジスタＲｄ０．．．Ｒｄｎの有効値フラグがセットされているかどうかが検査され、さらに書き込むべき内部レジスタＲｄ０．．．Ｒｄｎの有効値フラグがセットされていないかどうかが検査される。１つでも条件が満足されていない場合には、命令は実行されない。プログラムカウンタＰＣはさらに計数するように制御され、当該の命令はスキップされ、次の命令が選択されて同様に検査される。
【００３１】
このメソッドの利点はシーケンシャルプロセッサモデルと互換性があることである。欠点は命令のテストおよびスキップの必要があることである。これらは所定の状況のもとではパフォーマンスの大幅な損失につながりうる。
【００３２】
メソッドＢ：ＦＦ ＰＡＥプログラムポインタ
（イネーブラ＆アービタアプローチ）
［図５を参照］
このメソッドはＲｃ０．．．Ｒｃｎ内の全ての命令を並列に実行する手段に基づいている。アレイ命令の完全な復号化にかかるコストを節約するために、各ＲＣには評価マスクフィールド内のエントリが割り当てられる。エントリの長さはテストすべきステータスの最大数に相応する。ゆえにＲｄ０．．．ＲｄＮ内で生じうるＲＤＹハンドシェイクおよびＡＣＫハンドシェイク（および各トリガのＲＤＹ／ＡＣＫ）ごとに、また有効ｂｉｔごとに、それぞれの信号がセットされているか否か、またはそれぞれの信号のステータスが命令の実行にとって重要でないかどうかを表す２つのｂｉｔが利用可能となる。
【００３３】
【表１】
2007504688.tif 000184
【００３４】
このマスクはエントリの一部を表しているのみである。ＩｎＴｒｉｇｇｅｒではトリガの２つのステータス（セットまたは非セット）および値（トリガ値）がＲＤＹ値によりテストされる。
【００３５】
例えばＬｉｎｅＣｏｎｔｒｏｌを介して全ての命令を並列にテストするテスト論理回路を以下に説明する。アービタを用いて、全ての実行可能な命令のセットのうち所定の命令が選択される。アービタは選択された命令のＰＡＥへの転送にしたがい、ＩＳｅｌを介して命令マルチプレクサを制御する。
【００３６】
ＬｉｎｅＣｏｎｔｒｏｌは１つの命令ごとにブールテスト論理回路のラインを有する。ＥｘＯＲゲートｅを介してテストすべき信号の値がラインのｅｍ内の設定に対して検査される。ＯＲゲート＋を介して、検査信号を関連するものとするか（または無視するか）の選択が行われる。全ての検査信号の結果がＡＮＤ結合される。ＡＮＤゲート＆の出力側の論理１は実行可能な命令を表している。ＲＣごとに種々のテストラインが存在する。全てのテストラインが並列に評価される。生じうる複数のインプリメンテーションのうちの１つを有するアービタ、例えば優先アービタ、ラウンドロビンアービタなどにより、実行可能な全ての命令のうち実行すべき所定の命令が選択される。別のインプリメンテーションも可能であることは当該分野の技術者には明らかである。変形実施例は本発明の動作および機能の点で広く等価である。特に否定論理回路を使用する手段について言及しておく。
［図６を参照］
図７は回路全体の概略を表している。
【００３７】
このメソッドの利点は、
‐１つの命令が１クロックごとに実行されるということから大幅な高速化が達成され、
‐無視されたサイクルでエネルギが無駄にならず、特に定常的な電流消費に対して有利に電流消費量が低減され、さらに
‐中小サイズのコンフィギュレーションメモリＲＣを使用すれば、シーケンシャル手段と同様のハードウェアコストひいては同様の費用しかかからない
ということである。
【００３８】
このメソッドの欠点は、
‐大きなＲＣでは大幅にコストが高く、したがって所定のアプリケーションセットに適用するには最適化が必要となり、
‐シーケンサモードをインプリメントするには（アプリケーションの他の部分参照）、ＦＳＭを有するプログラムカウンタを設けなければならない
ということである。ただし後者の場合、ＦＳＭのタスクはシーケンサのタスクに制限されるので、付加的なコストおよび費用はそれほど大きくはならない。
【００３９】
従来技術によるデポピュレーテッドバス
所定のＰＡＥに割り当てられた全てのバスはＰＡＥの入力レジスタＩＲに接続されており、またＰＡＥの出力レジスタは全てのバスに接続されている（例えば独国出願第１００５０４４２．６号明細書または本出願人によるXPP/VPU-handbookを参照）。
【００４０】
ＰＡＥ、特にＦＦ ＰＡＥプログラムポインタは、周知の従来技術のＸＰＰに比べて多くのＩＲ／ＯＲが利用可能である場合、バス相互接続のデポピュレーションを行えるように実現されている。デポピュレーション、すなわちＩＲまたはＥＲをバスに接続する手段の低減は対称または非対称である。デポピュレーションは典型的には２０〜７０％の量まで行われる。デポピュレーションがアルゴリズムの相互接続性および／またはルーティング性に悪影響をほとんどまたは全く与えない点が重要である。
【００４１】
デポピュレーションの手法は特に複数の結果が得られるという観点から重要である。バスシステムのハードウェアコストおよびその費用を大幅に低減することができる。接続ポイントが最小数となり、ゲート遅延が低減されるので、バス速度は増大される。同時にバスの電力消費量も低減される。
【００４２】
従来技術のＶＰＵアーキテクチャにしたがった有利なデポピュレーションは、図８の回路よりも多くの入力レジスタＩＲおよび出力レジスタＯＲを有している。
【００４３】
特に、２つの隣接するＰＡＥの隣接データ転送の可能なバスアーキテクチャの付加的な拡張について言及しておく。ここで、所定のＰＡＥの出力側ＯＲは直接に専用バスに接続されており、このバスは隣接するＰＡＥの入力側ＩＲへ接続されている［図９を参照］。この図には水平方向の隣接バスが示されているが、一般には垂直方向のバスも可能である。
【００４４】
図８では、影付きの丸は可能なバスへの接続部ＭＵＸを表し、二重丸はバスからの接続部ＤｅＭＵＸを表す。
【００４５】
ＰＡＥ入出力の変更
図９にはＸＰＵ１２８、ＸＰＰ６４Ａとして知られる従来技術のＰＡＥインプリメンテーションが示されている。これは独国出願第１００５０４４２．６号明細書に記載されているものである。
【００４６】
周知のＰＡＥはＰＡＥコアのメインＡＬＵへの上下方向でのメインデータフローを有する。図の左方および右方には、付加的に配置されたデータチャネル、すなわちメインデータフロー方向に沿って順方向にデータを送信するデータチャネルＦＲＥＧとその反対方向にデータを送信するデータチャネルＢＲＥＧとが示されている。ＰＡＥの両わきにはＰＡＥのメインデータフローに対して逆方向に動作するデータバスが設けられており、これにＰＡＥおよびＦＲＥＧ，ＢＲＥＧが接続されている。従来技術のアーキテクチャは、典型的な適用分野では、ＰＡＥごとに８個のデータバスおよび４個のＦＲＥＧ／ＢＲＥＧ用の転送チャネルを必要とする。
【００４７】
従来技術のバスシステムはＰＡＥの両わきにスイッチング素子、レジスタ素子Ｒを有している。スイッチング素子はバスセグメントの中断または隣接バスに対する分離を行い、レジスタ素子は高い転送帯幅を得るためにデータ転送により効率的なパイプライニングを行う。隣接転送に対する典型的な垂直方向でのレイテンシはセグメント当たり０であるが、水平方向ではセグメント当たり０．５〜１であり、しかも高周波数である。
［図１０を参照］
修正ＰＡＥ構造が提案される。ここでは異なるメインデータフロー方向を有する２つのＡＬＵが各ＰＡＥ内に設けられており、ルーティング性が大幅に改善される。一方ではルーティングに使用されるツールが改善および簡単化され、他方ではハードウェアリソースの大幅な低減が達成される。第１のテストでは水平方向で必要なバス数が従来技術の約２５％まで低減された。ＦＲＥＧ／ＢＲＥＧ（ＢＹＰＡＳＳ）での垂直方向の接続部は約５０％まで低減されている。また独国出願第１００５０４４２．６号明細書で必須であったようなＦＲＥＧとＢＲＥＧとのあいだの区別ももはや必要ない。
［図１１を参照］
ダブルＡＬＵ構造をさらに発展させて両方向の入力側および出力側を有するＡＬＵ‐ＰＡＥが開発されている。自動ルータおよび手動でルーティングされるアプリケーションを用いて、さらに重要なネットワークトポロジの改善が認められる。バス数は必然的に従来技術の約５０％まで低減され、ＦＲＥＧ／ＢＲＥＧでの垂直方向の接続部の数は約７５％まで低減される。
［図１２を参照］
従来のＡＬＵにもファンクションフォールディングのＡＬＵにも利用可能な有利な実施例では、レジスタ素子およびスイッチング素子を、ＰＡＥの両わきではなく中央のバス内に配置することができる［図１３を参照］。
【００４８】
このように、高周波数に対しても、レジスタ素子を介することなく、データを水平方向で相応の隣接するＰＡＥに伝達することができる。こうして、レイテンシフリーの隣接コネクションを垂直方向および水平方向に形成することができる（従来技術および前述のデポピュレーテッドバスを参照）。相応の図に示されている相互接続の例は垂直方向および水平方向で左方から右方へゼロレイテンシの転送を可能にする。ＰＡＥインタフェース構造の最適化により水平両方向でのレイテンシフリーの隣接転送が達成される。ＰＡＥの各コーナーにバスからの入力レジスタＩＲ（バスからＰＡＥへの矢印）およびバスへの出力レジスタＯＲ（ＰＡＥからバスへの矢印）がインプリメントされている場合には、隣接する各ＰＡＥはレイテンシフリーでデータを交換することができる。
［図１４を参照］
上のＰＡＥの構成をさらに最適化することもできる。これは全てまたは一部のＰＡＥで個別のバイパスを使用しないことにより行われる。有利な実施例では、２つのＡＬＵが設けられる。第１のＡＬＵは“完全な”ＡＬＵであり、例えばＭＵＬｔｉｐｌやＢａｒｒｅｌＳｈｉＦＴなどの必要な機能の全てを有する。いっぽう第２のＡＬＵでは命令セットが低減されており、大きなアレイを必要とするＭＵＬｔｉｐｌやＢａｒｒｅｌＳｈｉＦＴなどの機能は消去されている。第２のＡＬＵはＢＹＰＡＳＳを置換するように配置される（図を参照）。スイッチング素子内にレジスタを配置することのできるバスシステム当たり複数の位置が存在するが、そのうち有利なバス当たり２つの位置が図１５に点線で示されている。
【００４９】
２つのＡＬＵはバイパス機能をインプリメントするために、バス間でデータを転送する付加的な回路を有する。複数のインプリメンテーションが考えられるが、以下にそのうち２つの手法を例として挙げる。
ａ）マルチプレクサ
ＡＬＵ内のコンフィギャラブルマルチプレクサは、ＡＬＵ入力側がＡＬＵをバイパスして出力側に直接接続されるように接続されている。
ｂ）ＭＯＶＥ命令
Ｒｃ０．．．Ｒｃｎ内に記憶されているＭＯＶＥ命令とは、ファンクションフォールディングの相応の処理クロックにおいてデータを命令の専用入力にしたがって専用出力側へ転送させる命令である。
【００５０】
スーパースカラリティ／パイプライニング
例えば、ＭＵＬオペコードを使用する場合であっても、バスクロック当たり２，４，８つの演算を計算するスーパースカラＦＦ  ＡＬＵ−ＰＡＥ，＠ＦＦ＝２，４，８を大まかに提供することは可能であり、また性能を改善する第１の方法として提案される。
【００５１】
基本的な考え方は、各内部レジスタのVALIDフラグを使用することである。ＭＵＬは、２つの段階にわたってパイプライニングされる単一のオペコードとして実現される。
【００５２】
ＭＵＬは、そのオペランドを、入力レジスタＲｉから取り出して、結果を内部レジスタＲｄに格納する。データがＲｄに格納されると、VALIDがセットされる。ＡＤＤ（または別の任意のオペコード、例えばＢＳＦＴ）は、VALIDがセットされている場合、Ｒｄ内の結果を使用する。ここでこれが行われるのは、指定されたVALIDの動作にしたがって実行がスキップされない場合である。またＰＡＥコンフィギュレーション内でＭＵＬ命令が使用される場合、すべてのオペコードに対してタイミングが変更される。このようなケースでは、ふつうは単一サイクルであるオペコードはすべて、パイプライニングされた２サイクルオペコードに変わる。この変更は、バイパス可能なマルチプレクサをデータストリームにも、制御にも挿入することによって達成される。
【００５３】
つぎのプログラムを詳細に説明する。
【００５４】
MUL  (Rd0, Rd1), Ri0, Ri1;
ADD  Ro0, Rd1, Ri2;
コンフィギュレーション後の最初のバスサイクル（ｔ０）において、（Ｒｉ０／１においてデータが利用可能であると仮定すると）ＭＵＬが実行される。レジスタペアＲｄ０／１は、このバスサイクル間中、つまり２つのＦＦ−ＰＡＥ内部クロックサイクル中、無効である。したがってＡＤＤは、２番目のクロックサイクルにおいて実行されない。ｔ０の後、ＭＵＬの結果は、このレジスタペアに書き込まれ、そのVALIDフラグは同時にセットされる。
【００５５】
ｔ１では新たなデータが乗算される。Ｒｄ０／１に対してVALIDがセットされているため、ここではＡＤＤ命令が２番目のクロックにおいて実行されるが、実行全体に対して２クロックサイクルかかる。したがって２つの演算、ＭＵＬ対してもＡＤＤに対しても共にオペランドの読み出しおよび結果の書き込みはインライン式なのである。
【００５６】
ＭＵＬ−ＡＤＤの組み合わせの結果は、ＦＦ＝２  ＡＬＵ−ＰＡＥにおいて２サイクルレイテンシで得られる。ＦＦ≧６に対してレイテンシは挿入されない。
［図１６を参照］
しかしながら乗算および他のすべての命令は並列に処理されるため、このマシンは、いかなる付加的な遅延もなくつぎに流れていくのである。
［図１７を参照］
実行のために２クロックサイクルを要するオペコード（例えばＢＳＴＦ）がＭＵＬの他にある場合、このアーキテクチャを変更して、２番目の内部クロックサイクルの後、レジスタに少なくとも３つのデータを書き込めるようにしなければならない。
【００５７】
データパス出力マルチプレクサは２倍になり、また出力レジスタ（ＯＲ）へのバスシステムおよび内部データレジスタ（Ｒｄ）へのフィードバックパスも同様に２倍になる。
【００５８】
オペコードに対して相応に定めれば、複雑さを増すことなく４つよりも多くの内部レジスタを使用することができる。これはイネーブル（ｅｎ）を使用して、データを書き込み特定のレジスタを選択することに行われる。複数のレジスタ、例えばＲｄ０，Ｒｄ４，Ｒｄ８，Ｒｄ１２を同じバスに接続することができる。しかしながらレジスタ転送のすべての組み合わせがこの構造によって可能なのではない。例えば、ＭＵＬによってＲｄ０およびＲｄ１が使用される場合、つぎのレジスタ、すなわちＲｄ４，５，８，９，１２，１３は、並列に実行されるオペコードに対してブロックされるのである。
【００５９】
レジスタマップ：
【００６０】
【表２】
2007504688.tif 000185
【００６１】
データパスアーキテクチャ：［図１８を参照］
シーケンサＰＡＥ
ＸＰＰ  IIIにおいてもコントロールフローが支配的なアプリケーションを実行できるようにしたいというニーズがあるため、シーケンサＰＡＥを導入する。このようなＰＡＥは、ＸＰＰ内でシーケンシャルなコードを実行可能な極めて単純な形のプロセッサとみなすことができる。これにより、Ｈ．２６４コーデックのようなコントロールフロー優位のアプリケーションをアレイ上に効率的に実現することができる。これに対してＳＥＱ−ＰＡＥがなければ、この実現は一層困難になり、資源が一層消費されることになる。
【００６２】
ＳＥＱ−ＰＡＥは、ゼロから構成されるのではなく、ＡＬＵ−ＰＡＥと、隣のＲＡＭ−ＰＡＥとを密接に結合することによって、図１９に示されているタイルが形成されるのである。
【００６３】
このため、ＡＬＵ−ＰＡＥの機能もＲＡＭ−ＰＡＥの機能も共に拡張して、このようなＳＱＥ−ＰＡＥの要求を満たすことができるようにしなければならないのである。この情報についてはつぎに示す。
【００６４】
ＡＬＵ−ＰＡＥの拡張
拡張したＡＬＵ−ＰＡＥは図２０に示されている。右側の縁部には別のモジュールを制御するレジスタが見える。これらのレジスタは、通常モードでもＳＥＱモードでも共に使用される。したがってローカルのコンフィギュレーションマネージャおよびＲＡＭ−ＰＡＥからの適切な制御信号が、まずＯＲゲートによってマージされ、つぎにこれらレジスタに転送される。ここで保証しなければならないのは、通常モードにおいてＲＡＭ−ＰＡＥからの信号は０であり、またこの逆が成り立つことである。
【００６５】
さらにＡＬＵ−ＰＡＥは、小さなプロセッサの実行部の特徴を有するため、内部レジスタに、また内部レジスタからＲＡＭに直接、値を転送する必要がある。このために付加的なマルチプレクサＡＭ１がセクション２のマルチプレクサ階層構造に挿入される。通常モードにおいてこのマルチプレクサは、先行するステージからつぎのステージにワードを供給する。これに対してＳＥＱモードではＩｍｍによってイミディエート値が供給される。ここではレジスタの機能が発揮される。これに加えてＳＥＱモードではマルチプレクサの出力側を介して、複数の内部レジスタのうちの１つの内部レジスタの値をＲＡＭ−ＰＡＥに供給することができる。しかしながら「LOAD reg, imm」を提供することも考慮しなければならない。それはこれが「ADD reg, reg, imm」よりも格段に遅い訳ではないからである。
【００６６】
ＲＡＭ−ＰＡＥがＡＬＵ−ＰＡＥの内部レジスタにデータを書き込めるようにするため、別のマルチプレクサをセクション４のマルチプレクサのチェーンに挿入する。上に示したシナリオと同様にこのマルチプレクサはＳＥＱモードだけで起動される。これに対して通常モードではこのマルチプレクサは、先行するステージのデータを転送するだけである。有利な実施形態では、遅延を考慮してＢＳＴＦ−Ｍｕｘの後にＲＳ２を配置することが提案される。データはこれを介して内部レジスタに書き込むことができる（LOAD reg, imm）。
【００６７】
すでに述べたように選択した算術機能に依存して１または２サイクルの間にＡＬＵ−ＰＡＥによってデータを処理することができる。ＸＰＰの自動同期化機能に起因して、また通常モードでは前の演算が終了する前に、つぎの演算が開始されることはないという事実に起因して、実際には演算が１サイクル続くかまたは２サイクル続くかはどちらでもよいのである。これに対して上記のタイルがＳＥＱモードで動作する場合、パイプラインの特性を有することを仮定するため、どちらでもよいということにはならない。すなわち、１サイクル演算は、２サイクルモジュールと並列に動作することができ、ここでこの演算は、この場合にステージ２で実行されることになる。ワード（１６ビット）の多重化能力は限られているため、接続されてレジスタには１つの結果しか書き込むことができず、別の結果は失われることになる。一般的にはこの問題を解決するのにつぎの３つの可能性がある。
【００６８】
最初の可能性として考えられるのは、コンパイラがこの問題を処理できるようにすることである。このことが意味することになるのは、ＳＥＱ−ＰＡＥ全体およびタイルのパイプライン構造について詳細にわかっていければならないことである。並列実行を防ぐため、上記の構造に対して、コンパイラは、２サイクル命令毎に１つのＮＯＰを加えなければならない。しかしながらこのアイデアは、ハードウェア構造とコンパイラとの間の極めて密接な関係のため、有利ではないと考えられる。欠点として考えられるのは、ハードウェアを変更する毎に新たな構造にコンパイラを整え直さなければならない可能性が極めて高いことである。
【００６９】
第２のアイデアは、パイプラインのデコードステージにおいてこのような状況を識別することと考えられる。２サイクル命令の後に、１ステージ算術ユニットにアクセスする命令が直に続く場合、これも同様に１クロックサイクルだけ遅延させなければならない。
【００７０】
最後の可能性は、完全なＡＬＵ−ＰＡＥが、２ステージの実行ユニットに見えるようにすることである。したがってセクション４のマルチプレクサチェーンにおいて、２ステージモジュールの１ステージを分離するマルチプレクサからの交差部の直後に１レジスタだけを含めるだけでよいのである。明らかにこのようにすることが望ましい。
【００７１】
最後の２つのアイデアを比較すると、１つのレジスタだけを挿入すればよいため、３番目のアイデアが最善であると考えられる。第２の解決手段を詳しく検討すると、命令の許容されない組み合わせを解析するための固有のロジックも、命令の遅延およびプログラムカウンタ（ＰＣ）を停止するためのロジックも共に必要になる。ここで想定しなればならないのは、このロジックにはレジスタよりもはるかに大きな面積が必要であり、またこのロジックの遅延により、クリティカルパスが増えることである。
【００７２】
１サイクル実行をなお利用可能とすべきである通常モードとＳＥＱモードとの区別をしければならない。このような可能性は、相応する図に示したようにＲＳ２レジスタのバイパスを可能にするマルチプレクサによって得られる［図２０を参照］。
【００７３】
ＲＡＭ−ＰＡＥ
各ステージの手短な説明
ＳＥＱ−ＰＡＥを動作させるため、さらに一層機能を設けなければならない。ここではＲＡＭ−ＰＡＥがそれを担当している。シーケンサを実現するための最初のアプローチとして、４ステージパイプラインを選択した。これらのステージは、図２１に示されているように、
・  フェッチステージ
・  デコードステージ
・  実行ステージ１
・  実行ステージ２
である。
【００７４】
上記のフェッチステージでは、つぎのクロックサイクルに対するプログラムカウンタが計算される。すなわち、このプログラムカウンタはローカルの加算器を介して１だけインクリメントされるか、または上記のデコードステージまたは実行ステージ２から得られるプログラムカウンタのうちの１つが選択されることになる。ここで実行ステージのプログラムカウンタは、コール命令が生じた場合にアドレスを供給するのに対して、実行ステージのこのプログラムカウンタは、条件ジャンプがある場合にＰＣを供給する。ここで分岐アドレスは、目下のＰＣと、イミディエート値またはＡＬＵ−ＲＡＭの内部レジスタから得られる値（間接アドレッシングモード）のいずれかの値とから計算することができるか、または絶対値である。これは例えば、サブルーチンから前のコンテキストへの復帰がある場合には必要であり、これに対して相応する絶対的なＰＣは、スタックバンクによって供給される。
【００７５】
上記のデコードステージではコードバンクから到来する命令がデコードされる。所要の制御信号が生成され、また必要であれば内部実行ステージ１に対するイミディエート値も、ＡＬＵ−ＰＡＥの実行ステージ１に対するイミディエート値も共に生成される。これらの信号には、ＡＬＵ−ＰＡＥのセクション２のゲーティングステージおよびマルチプレクサに対する制御情報と、例えば符号付きまたは符号なし乗算の選択であるＡＬＵタイルの演算選択と、つぎのステージにおいて命令がコールまたはジャンプであることに依存してスタックポインタ（ＳＰ）をインクリメント／デクリメントするか、または変更しないままにすべき否かについての情報が含まれている。コール命令が発生した場合、新たなＰＣが並列に計算されて、フェッチステージに供給される。
【００７６】
さらにロード命令の場合、データバンクへの読み出しアドレスおよび読み出しイネーブル信号が生成される。
【００７７】
場合によってはＡＬＵにおいてもＲＡＭ−ＰＡＥにおいても利用可能な第１ステージである実行ステージ１では、ＡＬＵ−ＰＡＥの実行ステージ２に対する制御信号が生成される。これらの信号は、複数の算術タイルのうちの１つの正しい出力が選択されて、イネーブルされたレジスタにこれが書き込まれるようにする。この命令が条件ジャンプまたはリターンである場合には、このステージでスタックポインタが変更される。これと並行して分岐の場合には目下のＰＣが、Rsp EX1レジスタによって示されるアドレスでスタックバンクにセーブされることになる。そうでなければ、リターンの場合、読み出しアドレスも、読み出しイネーブル信号も共にこのスタックバンクに供給される。
【００７８】
実行ステージ２ではジャンプの場合、ＰＣの値が計算されてフェッチステージにおいてマルチプレクサに供給される。ＡＬＵからのデータをセーブしなければならない場合、この時点で書き込みアドレスおよび書き込みイネーブル信号が形成される。
【００７９】
２つの加算器の代わりにｒｐｐパスに１つの加算器だけを設けることが可能である。
パイプラインアクション
以下のセクションでは上記の４つのステージにおいて実施されるアクションの手短な概要をいくつかの基本的な命令に対して示す。これはパイプラインの動作を理解するために一助となるはずである。ここで述べようとする命令は、命令レジスタにおいて利用可能であり、フェッチステージのアクションはここでは省略する。
【００８０】
ＩＲ：命令レジスタ
ＤＲ：データレジスタ
ＤＢ：データバンク
ＳＢＲ：  ストア／ブランチレジスタ
命令：  データバンクからＲ[ｎ]に値をロードする
【００８１】
【表３】
2007504688.tif 000186
【００８２】
命令：R[ｎ]からデータバンクに値を格納する
【００８３】
【表４】
2007504688.tif 000187
【００８４】
１．３  アレイ構造
従来技術と比較した場合の第１の利点は、ファンクションフォールディングＰＡＥを使用することによって得られる。これらのＰＡＥも、別のＰＡＥも共に改良することができる。
【００８５】
ＰＡＥのＸＰＰ−II構造は、ＦＲＥＧおよびＢＲＥＧに対して、またこれらの関連したバスインターフェースに対して一層大きな面積を消費する。またこれに加えてＦＲＥＧを介するフィードバックには、フィードバックパスへのレジスタの挿入が必要である。これはレイテンシを増やすだけでなく、ＸＰＰのスループットおよび性能にマイナスの影響を与えることになる。
【００８６】
レイテンシが最小化され、またバス相互接続構造が最適化されて、最適化された面積が達成させることを期待して、新しいＰＡＥ構造およびその配置を提案する。
【００８７】
ＸＰＰ−III ＰＡＥ構造にはもはやＢＲＥＧは含まれていない。この代用として複数のＡＬＵは水平方向に交互に上下反転され、これによって配置および殊にフィードバックパスに対するルーティング能力、例えばループのルーティング能力が改善される。
【００８８】
各ＰＡＥはここでは、１つは上から下に向かい、別の１つは上下反転されて下から上に向かう２つのＡＬＵおよび２つのＢＰパスを含んでいる。
［図２２を参照］
１．４  バスの変更
この章では、所要の面積およびバスの量を低減し得る複数の最適化を説明する。これらの変更にはいくつかの提案が含まれている。それはこれらの変更は実際のアルゴリズムに基づいて評価しなければならないからである。例えば、アンケートを作成して、アプリケーションプログラムからの所要のインプットを集めることが可能である。
【００８９】
１．４．１  隣接ＰＡＥ
ＸＰＰ−IIアーキテクチャでは、２つのＰＡＥブロック間にある水平方向の直接のデータパスは、垂直方向データバスである。この結果、ＸＰＰ内で必要な垂直方向のバスが増大し、コストも不必要に高めている。このためＸＰＰ−IIIでは水平方向のＰＡＥ間に直接のフィードパスを提案する。
【００９０】
さらに、長さの異なる水平方向バス、すなわち隣接する２つのＰＡＥにわたる水平方向バス、４つのＰＡＥを横切る水平方向バスが提案される。
【００９１】
１．４．２  バスのレジスタの除去
ＸＰＰ−IIでは垂直方向のバスに複数のレジスタが設けられており、これらレジスタは、より一層長いパスに対してコンフィギュレーションによってスイッチオン可能である。さらにこれらのレジスタは、コンフィギュレーションによってプリロード可能であり、これによって極めて大きな量のシリコン面積が必要である。ここで提案されるのは、もはやバスにレジスタを実装せずに、ＰＡＥ内の拡張されたＤＦまたはバイパス（ＰＢ）部を使用することである。このＰＡＥは、ＤＦまたはＢＰの内部レジスタを代用することによって、パスを同じバスに再ルーティングすることができる。
［図２３を参照］
ここではこれらのバスに対してどのくらいの資源が節約されるか、またＰＡＥに対してどのくらい資源が必要であるか、および／またはどの程度レジスタを挿入しなければならないか、ＰＡＥ毎に１つまたは最大２つのパス（ＤＦ／ＢＰによって最大２つの入力が得られるため上限は２つである）は十分であるか否かなどを決定しなければならないと思われる。
【００９２】
１．４．３  バスからＰＡＥへのｎ：１，１：ｎシフト機能
ＸＰＰ−IIではｎ：１および１：ｎのトランジションはバスによってサポートされており、これには極めて大量の資源が必要である。すなわちハンドシェイク信号のサンプルアンドホールドステージに対して大量の資源が必要なのである。
【００９３】
ｎの大きさに依存して新しいＰＡＥ構造には、相異なる２つの機能が設けられている。すなわち、
ｎ ≦ ２        要求された演算はＰＡＥのＤＦパス内で行われる
２ ≦ ｎ ≦ ４  ４つのポートが必要なためＡＬＵパスが必要である
ｎ ＞ ４        複数のＡＬＵを組み合わせなければならない
のである。
【００９４】
このような手法によってシリコンにおけるスタティックな資源が極めて大量に節約されるが、ランタイムに専用のＰＡＥ資源が必要である。
【００９５】
ここで有益であると考えられるのは、バス当たりにどのくらいのシリコン面積が節約されるか、ｎ ＝ ２，２ ≦ ｎ ≦ ４，ｎ ＞ ４がどのくらいの頻度で発生するか、節約されたシリコン面積と、必要なＰＡＥ資源との間の比を評価することと、これらの判定条件のうちの１つまたはすべてに応じて正しいバス構造を決定することである。
【００９６】
１．５  ＲＡＭ−ＰＡＥのＦＳＭ
ＸＰＰ−IIアーキテクチャにおいて制御構造の実現には極めてコストがかかり、多くの資源を要し、またプログラミングも極めて複雑である。
【００９７】
しかしながらメモリを使用して簡単にＦＳＭを実装することができる。ＲＡＭ−ＰＡＥをつぎのように拡張することにより、ＨＤＴＶを含めた制御についての既知の多くの課題に対して安価かつプログラム容易な解決手段が提供される。
［図２４を参照］
基本的にＲＡＭ−ＰＡＥは、レジスタ（ＦＦ）を介するデータ出力側からアドレス入力側へのフィードバックの分だけ機能拡張され、これによって各ステージ内で後続のアドレスが提供される。さらにＰＡＥアレイからの付加的なアドレス入力側によって、付加的なジャンプが発生し、データ出力側によってＰＡＥアレイに対するイベント信号が生成される。メモリ出力側によってステップが設定されまたリロード可能の関連づけられたカウンタにより、条件付きジャンプ（すなわち、ビデオ画像の行の終わり（end of line）、フレームの終わり（end of frame））に対するアドレス入力が生成される。
【００９８】
典型的なＲＡＭ−ＰＡＥの実装では、データビットは約１６〜３２個であるが、アドレスビットはわずかに８〜１２ビットである。このため、入力ベクトル範囲を最適化するために提案されるのは、アドレス入力側にいくつかのマルチプレクサを挿入して、複数のベクトル間で選択できるようにすることである。ここでこれらのマルチプレクサは、出力データビットのうちのいくつかビットによって制御される。
【００９９】
２４ビット幅のデータバスを有するＸＰＰについての１つの実装が、図２５に概略的に示されている。ここでは４つのイベント入力と、入力ポートＲｉ０の低位４ビットが入力として使用されている。また３つのカウンタが実装されており、４つのイベントもＲｏ０ポートの低位１０ビットも共に生成される。
【０１００】
ここで示されるメモリ編成は、つぎのようなものになる。すなわち、
８  アドレスビット
２４  データビット（２２ビットを使用）
４  次アドレス
８  マルチプレクサセレクタ
６  カウンタ制御（付加的な４ビットの次アドレスと共用）
４  出力
［図２５を参照］
このＲＡＭ−ＰＡＥの通常のメモリモードはこのブロック図に示されていないことに注意されたい。
【０１０１】
カウンタの幅は、データバスのバス幅にしたがう。
【０１０２】
１６ビットの実装に対して提案されるのは、カウンタのキャリー信号を、それ自体のリロード信号として使用することであり（自動リロード）、またいくつかのマルチプレクサは、メモリによって駆動されるのではなく、コンフィギュレーションによって「ハードワイヤード」される。
【０１０３】
ここで提案されるメモリ編成はつぎのようになる。すなわち、
８  アドレスビット
１６  データビット（１６ビットを使用）
４  次アドレス
４  マルチプレクサセレクタ
３  カウンタ制御（付加的な３ビットの次アドレスと共用）
４  出力
［図２６を参照］
１６ビットの実装と、２４ビットの実装とは異なるため、ふつうのＲＡＭ−ＰＡＥは実際にはさらにスケーリングすることはできないことに注意されたい。２４ビットに対して、余計なもの省いた１６ビットの実装を使用するか否かを決定すべきである。
【０１０４】
１．６  ＩＯＡＧインタフェース
１．６．１  アドレス発生器およびビット反転アドレッシング
ＩＯインタフェースに実現されるのは、いかなるＡＬＵ−ＰＡＥ資源も使用することなく、例えば１〜３次元の直接のアドレッシングをサポートするアドレス発生器である。この場合にアドレス発生は３つのカウンタによって行われ、各カウンタは例えばコンフィギュレーション可能なベースアドレスと、長さと、ステップ幅とを有する。
【０１０５】
第１のカウンタ（ＣＮＴ１）は、ＡＬＵ−ＰＡＥのアレイによって制御されるステップ入力側を有する。そのキャリーはＣＮＴ２のステップ入力側に接続されており、さらにそのキャリーはＣＮＴ３のステップ入力側に接続されている。
【０１０６】
コンフィギュレーションされた長さと上記の値とが等しい場合、各カウンタによってキャリーが生成される。キャリーに伴ってカウンタは、コンフィギュレーションされたそのベースアドレスに直ちにリセットされる。
【０１０７】
１つの入力側は、ＡＬＵ−ＰＡＥのアレイからのアドレス専用であり、これはカウンタの値に加算することが可能である。１つ以上のカウンタが使用されない場合、これらはゼロにコンフィギュレーションされる。
【０１０８】
さらにＣＮＴ１は、複数のキャリーモードを供給することによって、ビット反転アドレッシングの生成をサポートする。
［図２７を参照］
１．６．２  相異なるワード幅のサポート
一般的にＰＡＥアレイ内では複数のワード幅をサポートする必要がある。８および１６ビット幅のデータワードが、多くのアルゴリズムに対して、すなわちグラフィックに対して有利である。すでに述べたＳＩＭＤ演算に加えて、ＩＯＡＧにより、上記のような比較的短いデータワードの分割およびマージが可能になる。
【０１０９】
新しいＰＡＥ構造によって４つの入力ポートおよび４つの出力ポートが可能になるため、このＩＯＡＧは、つぎのようにワードの分割およびマージをサポートすることができる。
【０１１０】
【表５】
2007504688.tif 000188
【０１１１】
入力ポートは、ＩＯへのワード書き込みに対してＩＯＡＧ内でマージされる。
【０１１２】
出力ポートに対し、読み出されたワードは、コンフィギュレーションされたワード幅にしたがって分割される。
【０１１３】
１．７  マルチ電圧電源および周波数ステッピング
ＰＡＥおよびバスは、作業負荷に依存して動作するように構成されている。したがってクロック周波数は、データ帯域幅にしたがってコンフィギャラブルであり、さらにレジスタに対するクロックゲーティングがサポートされており、またバスはＡＮＤゲートの行を使用してデカップリングされる。処理可能なデータがない場合にはいつでも、クロックパルスは動的にゲート制御される。
【０１１４】
先進アーキテクチャではＰＡＥにおけるクロック周波数およびバスに対する所要の帯域幅に依存して上記の電圧がスケーリングされる。４Ｓプロジェクト内ではこのような手法が評価され、商用になるテクノロジが研究されている。
【０１１５】
１．８  ＸＰＰ／μＰ結合
μＰとＸＰＰとを密に結合するため、キャッシュおよびレジスタインタフェースは、Ｃコンパイラのような高レベルツールに対して有利な構造である。しかしながらこのような密結合は、極めて初期の段階で実行可能でないと予想される。
【０１１６】
それにかかわらず、密結合に対して相異なる２つのタイプの結合がおそらく可能である。すなわち、
ａ）  長いデータストリームに対するメモリ結合：  最も高性能でもっとも便利な手法は、直接のキャッシュ結合である。これに対してスタート時にはＡＭＢＡベースのメモリ結合で十分である（ATAIRに関連して後述する）。
【０１１７】
ｂ）  小さなデータおよび変則的なＭＡＣ演算に対するレジスタ結合：有利であるのは、プロセッサパイプラインのＯＦステージにおける暗黙的な同期化によるプロセッサレジスタへの直接的な結合である。しかしながら外部レジスタとしてのロード／ストア命令またはイン／アウト命令を介する結合は、いくらかの性能上の制限になる比較的長いレイテンシのペナルティを伴えば、許容され得る。
【０１１８】
２  ＡＬＵ−ＰＡＥの仕様
２．１  概要
有利な実施形態ではＡＬＵ−ＰＡＥは３つのパスを有する。すなわち、
ＡＬＵ  算術、論理およびデータフロー処理
ＢＰ    バイパス
この場合に上記の各パスは、２つのデータパスおよび１つのイベントバスを有する。ＤＦパスのバスは、コンフィギュレーションによってＡＬＵパスに再ルーティングすることができる。
【０１１９】
２．２  ＡＬＵパスレジスタ
ＡＬＵパスには１２個のデータレジスタが含まれる。すなわち、
Ｒｉ０−３  バスからの入力データレジスタ０−３
Ｒｖ０−３  バスへの仮想出力データレジスタ
Ｒｄ０−３  内部汎用レジスタ０−３
Ｖｉ０−３  バスからのＶイベント入力０−３
Ｕｉ０−３  バスからのＵイベント入力０−３
Ｅｖ０−３  バスへの仮想Ｖイベント出力レジスタ
Ｅｕ０−３  バスへの仮想Ｕイベント出力レジスタ
Ｆｕ０−３
Ｆｖ０−３  ＸＰＰ−II ＰＡＥイベントバスによる内部フラグｕおよびｖレジスタ
Ａｃｃ      アキュムレータ
ここでは８つの命令レジスタが実装されている。オペコードのフォーマットにしたがって２４ビット幅である。すなわち、
Ｒｃ０−７  命令レジスタ
である。
【０１２０】
３つの専用レジスタが実装されている。すなわち、
Ｒｌｃ  ＣＭによってコンフィギュレーションされ、ＡＬＵ−ＰＡＥそれ自体からは直接にアクセスできないループカウンタ。ＪＬオペコードにしたがってデクリメントされる。値０の後、リロードされる。
Ｒｊｂ  Ｒｃ[０…７]において使用されるエントリの数を定めるジャンプバックレジスタである。ＡＬＵ−ＰＡＥそれ自体からは直接にアクセスできない。ＲｐｐとＲｊｂとが等しい場合、Ｒｐｐは直ちに０にリセットされる。ジャンプバックは１つの条件、すなわち到来するイベントに制限することができる。この条件がない場合、このジャンプバックは遅延される。
Ｒｐｐ  プログラムポインタ
２．３  データ複製と複数入力の読み込み
ファンクションフォールディングは、純粋なデータストリームモードでも、シーケンシャルモード（１．２を参照されたい）でも共に動作できるため、データフローモード（単一の読み出しのみ）およびシーケンシャルモード（複数の読み出し）においてＲｉ読み出しをサポートすることが有利である。相応するプロトコルを以下に示す。すなわち、
各入力レジスタＲｉは、相異なる２つのモードのうちの１つで動作するようにコンフィギュレーションすることができる。すなわち、
データフローモード：
ＸＰＰ−II実装の標準プロトコルである。つまりレジスタが空の場合、１つのデータパケットがバスから読み出されて取り出され、ＡＣＫハンドシェイクが生成される。このレジスタが空でない場合、このデータはラッチされず、またＡＣＫは生成されない。
【０１２１】
このレジスタがデータを含む場合、このデータは一度だけ読み出すことができる。読み出しアクセスに伴って直ちにこのレジスタは空としてマーク付けされる。空のレジスタは読み出すことができない。
【０１２２】
簡略化すると、このプロトコルはつぎのように定められる。すなわち、
ＲＤＹ  ＆  空        →  フル
→  ＡＣＫ
ＲＤＹ  ＆  フル      →  ＡＣＫしない
ＲＥＡＤ  ＆  空      →  停止
ＲＥＡＤ  ＆  フル    →  データ読み出し
→  空
ここの説明およびプロトコルではパイプラインの作用は考慮されていないことに注意されたい。
【０１２３】
シーケンサモード
入力インタフェースは、バスプロトコル定義にしたがってつぎのようになる。すなわち、レジスタが空の場合、１つのデータパケットがバスから読み出されて取り出され、ＡＣＫハンドシェイクが生成される。レジスタが空でない場合、このデータはラッチされず、またＡＣＫは生成されない。
【０１２４】
レジスタがデータを含む場合、１シーケンス中、このデータは複数回読み出すことができる。シーケンスはＲｐｐ＝０ 〜 Ｒｐｐ＝Ｒｊｂで定められる。この間にレジスタに新たなデータを書き込むことはできない。Ｒｐｐを０にリセットとするのと同時にレジスタの内容はクリアされ、新たなデータがバスから取り入れられる。
【０１２５】
簡略化すると、このプロトコルはつぎのように定められる。すなわち、
ＲＤＹ  ＆  空        →  フル
→  ＡＣＫ
ＲＤＹ  ＆  フル      →  ＡＣＫしない
ＲＥＡＤ  ＆  空      →  停止
ＲＥＡＤ  ＆  フル    →  データ読み出し
（Ｒｐｐ ＝＝ Ｒｊｂ）→  空
ここの説明およびプロトコルではパイプラインの作用は考慮されていないことに注意されたい。
【０１２６】
２．４  データレジスタおよびイベント処理
データレジスタは直接アドレッシングされ、各データレジスタは個別に選択することができる。３つのアドレスオペコード形式が使用される。すなわちｒｔ ← ｒｓ１，ｒｓ０である。仮想出力レジスタは、レジスタの後に「ｏ」を付加することによって選択される。結果は、ルール
op out (ｒｖ，ｒｔ) ← ｒｓ１，ｒｓ０
にしたがってｒｔに格納され、また仮想出力レジスタｒｖにもコピーされる。
【０１２７】
入力および（仮想の）出力レジスタへのアクセスは、２．３節に定めたつぎのルールにしたがうことに注意されたい。
【０１２８】
【表６】
2007504688.tif 000189
【０１２９】
イベントは、データレジスタと同様に使用される。すべての入力および内部イベントは直接、アドレッシングすることができ、出力イベントは、イベントの後ろに「ｏ」が付加化されるときにはいつでも使用される。
【０１３０】
【表７】
2007504688.tif 000190
【０１３１】
２．４．１  アキュムレータモード
低い電力消費を達成し、またＤＳＰライクなアルゴリズムをより良好にサポートするため、アキュムレータレジスタが利用可能であり、結果レジスタ（ａｏ）およびオペランドレジスタ（ａｉ）に対して１ビットをセットするだけでこれをアドレッシング可能である。可換の演算に対してつねにオペランドレジスタ１はａｉによって置き換えられる。SUBtractのような可換でない演算に対してはオペランドおよびレジスタ１により、ａｉが第１のオペランドであるか、または第２のオペランドであるかが選択される。オペランドレジスタ２により、相応して他方のオペランドが定められる。
【０１３２】
つぎのことを明確にしなければならないことに注意されたい。すなわち、実際のアキュムレータモードが有効であるか、またはＭＡＣコマンドだけを実現して、暗黙的で隠れたアキュムレータアクセスによって２クロックサイクルを消費する単一の命令において乗算累算を処理すべきか明瞭にしなければならないのである。
【０１３３】
２．４．２  パラメタスタックモード（PSTACK）
オペコードレジスタＲｃの未使用のエントリは、定数およびパラメタに対するスタックとして動作することができる。Ｒｐｐ ＝＝ ００００においてＲｐｓ PStackレジスタはＲｊｂ＋１をポイントする。これはPStack領域が、オペコードレジスタファイルの最後のエントリの直後からはじまることを意味する。
【０１３４】
PStackにアクセスするため、ＦＦ−ＰＡＥは、高速パラメタ（Fast-Parameter）モードでなければならない。Ｒｉ３に対する各読み出しアクセスは、PStackからの読み出しにリダイレクトされ、これに対して各読み出しアクセスの後、ポインタは１によってインクリメントされる。実現されたPStackポインタのオーバーフローに対するチェックはない。オーバーフローはプログラムのバグとみなされる。
［図２８を参照］
２．４．３  ｎ：１のトランジション
ｎ：１のトランジションはもはやバス内ではサポートされない。択一的に複数の出力レジスタＲｏおよびイベント出力側Ｅｏへの単純な書き込みがサポートされる。仮想出力レジスタ（Ｒｖ）および仮想イベント（Ｅｖ）は実出力レジスタ（Ｒｏ）および実イベント（Ｅｏ）に変換され、ここで１つの仮想レジスタを複数の出力レジスタにマッピングすることができる。
【０１３５】
このコンフィギュレーション可能な変換を実現するため、データレジスタおよびイベントレジスタの両方に対して表がインプリメントされる。
【０１３６】
【表８】
2007504688.tif 000191
例
Rv0  Ro0，Ro1にマッピングされる
Rv0  Ro2にマッピングされる
Rv0  Ro3にマッピングされる
Rv3  未使用
【０１３７】
【表９】
2007504688.tif 000192
２．４．４  入力および出力レジスタ（Ri／Rv）ならびにイベント（Ei／Ev）へのアクセス
オペコードアクセスとは独立して、入力または出力レジスタないしはイベントがつぎのように定められる。すなわち、
【０１３８】
【表１０】
2007504688.tif 000193
２．４．５  マルチコンフィグモード
マルチコンフィグモードによって可能になるのは、格納された最大４つのコンフィギュレーションから１つを選択できるようにすることである。Ｆｕｉ０，１およびＦｖｉ０，１に到来するイベントにより、４つのコンフィギュレーションのうちの１つが選択される。１クロックサイクルにおいて１つのイベントだけがアクティブになるべきである。この選択は単純な変換によって行われ、各イベントにより、特定のメモリアドレスがポイントされる。
［図２９を参照］
次コードセグメント（next code segment）を使用することによって３オペコード以上の長いコンフィギュレーションを使用することも可能である。この場合、相応するイベントは使用できない。
［図３０を参照］
２．５  オペコードフォーマット
有利な実施形態では２４ビット幅の３アドレスオペコードが使用される。すなわち、
op ｒｔ ← ｒａ，ｒｂ
である。
【０１３９】
ソースレジスタはＲｉおよびＲｄ，ターゲットレジスタはＲｖおよびＲｄとすることができる。ふつうの演算は、Ｒｄレジスタだけをターゲットとする。ｒａに対するソースレジスタがＲｉ[ｘ]の場合、このターゲットレジスタはＲｄ[ｘ]になる。
【０１４０】
上記の変換はつぎの表に示されている。すなわち、
【０１４１】
【表１１】
2007504688.tif 000194
である。
【０１４２】
各演算は、ターゲット識別子としてoutタグ「ｏ」をオペコードに付加することによって仮想出力レジスタＲｖをターゲットにすることが可能である。すなわち、
op (ｒｔ，ｒｏｔ) ← ｒａ，ｒｂ
である。
【０１４３】
データは仮想出力レジスタに転送され、また相応する内部レジスタにも転送される。すなわち、
【０１４４】
【表１２】
2007504688.tif 000195
である。
【０１４５】
２．５．１  条件付き実行
SKIPEコマンドにより、条件付き実行がサポートされる。イベントまたはＡＬＵフラグが、所定の値になっている否かがテストされる。このチェックに依存して、つぎの２つのアドレスが実行される（Ｒｐｐ＋１）か、またはスキップされる（Ｒｐｐ＋３）。到来するイベントをチェックする場合、イベントがイベントポートに到着するまでプログラムの実行はストップする（ＲＤＹハンドシェイクのセット）。
【０１４６】
SKIPEは、２メモリエントリよりも大きくない任意のオペコードの条件付き実行をサポートする。
【０１４７】
ＣＡＬＬおよびＲＥＴオペコードをサポートするＳＥＱ−ＰＡＥでは、スタックベースのサブルーチンコールもサポートされる。
【０１４８】
２．６  クロック
ＰＡＥは、
１×バスクロック
２×バスクロック
４×バスクロック
[８×バスクロック]
のコンフィギュレーション可能な周波数で動作することができる。
【０１４９】
２．７  ＤＦパス
データフローパスは、データレジスタＢｒｉ０…３およびＢｒｏ０…３ならびにイベントレジスタＢｕｉ／Ｂｖｉ０…３およびＢｕｏ／Ｂｖｏ０…３を含む。
【０１５０】
ＤＦパスの主な目的は、垂直方向にバス接続を形成することである。さらに上記のパスには、データおよびイベントパス毎に１つの４ステージＦＩＦＯが含まれている。
【０１５１】
ＤＦパスにより、数多くの命令がサポートされ、ここでこれらの命令はコンフィギュレーションによって選択され、そのうちの１つだけが１コンフィギュレーション中に実行可能である。ファンクションフォールディングは利用できない。
【０１５２】
ＤＦパスでは以下の命令、
１．ＡＤＤ，ＳＵＢ
２．ＮＯＴ，ＡＮＤ，ＯＲ，ＸＯＲ
３．ＳＨＬ，ＳＨＲ，ＤＳＨＬ，ＤＳＨＲ，ＤＳＨＲＵ
４．ＥＱ，ＣＭＰ，ＣＭＰＵ
５．ＭＥＲＧＥ，ＤＥＭＵＸ，ＳＷＡＰ
６．ＳＯＲＴ，ＳＯＲＴＵ
７．ＥＬＵＴ
が実現される。
【０１５３】
２．９  パラメタのブロードキャストおよび更新
パラメタおよび定数は、入力レジスタＲｉ３およびイベント入力Ｅｉ７を使用することにより、高速かつ同期して更新することができる。
［図３１を参照］
更新モードに依存して、イベントＥｉ７がセットされている場合、ＰＡＥにより、相応のレジスタの各アクセス時に入力レジスタＲｉ３におけるデータパケットがＲｄ３，Ｒｄ２およびＲｄ１に引き続いてコピーされる。その後、Ｒｉ３におけるすべての入力データは、出力レジスタＲｏ３に伝搬され、またＥｏ７イベント出力がセットされ、これによって第１パラメタの更新が発生したことが後続のＰＡＥに示され、これらのＰＡＥを一緒にチェーンで結びつける（すなわちマルチＴＡＰ  ＦＩＲフィルタにおいて）ことができ、このチェーンにおいてすべてのパラメタを更新することができる。
【０１５４】
【表１３】
2007504688.tif 000196
【０１５５】
またＥｉ７がセットされている場合、更新パラメタモード（upmcfg ＝ nn10）に依存してオペコードUPDATEにより、すべてのレジスタが引き続いて更新される。
【０１５６】
またレジスタ更新をコンフィギュレーションして、upmcfg ＝ ｎｎ０１によってＲｐｐ ＝＝ ０かつＥｉ７がセットされる場合にはこれがつねに行われるようにすることも可能である。
【０１５７】
いずれのケースにおいてもｎｎは、更新すべきレジスタの数（１〜３）を表す。
【０１５８】
Ｅｉ７は、少なくとも１つクロックサイクルの間０でなければならず、これによって実行中のパラメタ更新の終了および新しい更新の開始が示される。
【０１５９】
３．  入出力アドレス形成（ＩＯＡＧ）
ＩＯＡＧはＲＡＭ−ＰＡＥに配置されており、バスに通じる同じレジスタを共用する。１つのＩＯＡＧは、キャリーが転送される３つのカウンタを含む。カウンタ値と、アレイからのイミディエートアドレス入力値とは、加算されてアドレスが形成される。
【０１６０】
１つのカウンタにより、リバースキャリー機能が提供される。
【０１６１】
３．１  アドレッシングモード
通例のＤＳＰライクなアドレッシングをサポートするため、いくつかのアドレッシングモードがＩＯＡＧによってサポートされる。すなわち、
モード                          説明
イミディエート                  ＰＡＥアレイによって形成されるアドレス
ｘＤ計数                        ＩＯＡＧ内部カウンタを使用した多次元
アドレッシング
ｘＤは１Ｄ，２Ｄ，３Ｄを意味する
ｘＤ循環                        ＩＯＡＧ内部カウンタを使用した多次元
アドレッシング
オーバーフローの後、カウンタには
ベースアドレスがリロードされる
ｘＤとイミディエートスタックとの和
ｘＤと、ＰＡＥアレイから得られる値との和
「push」処理の後、デクリメントされる
「read」処理の後、インクリメントされる
リバースキャリー                ＦＦＴなどのアプリケーション用の
リバースキャリー
である。
【０１６２】
３．１．１  イミディエートアドレッシング
アドレスは、アレイで形成され、加算器を介してアドレス出力側に直接供給される。すべてのカウンタは使用不可にされ、０に設定される。
【０１６３】
３．１．２  ｘＤ計数
カウンタは、所要の次元（ｘ次元にはｘのカウンタが必要である）に依存して使用可能にされる。カウンタ毎にベースアドレスと、ステップ幅と、最大アドレスとがコンフィギュレーションされる。各キャリーはつぎの次数の使用可能なカウンタに転送される。キャリーの後、このカウンタには開始アドレスがリロードされる。
【０１６４】
最高次の使用可能なカウンタにおけるキャリーによってイベントが形成され、計数が停止する。
【０１６５】
３．１．３  ｘＤ循環
この処理は、ｘＤ計数に対するのと等しいが、最も高次の使用可能なカウンタにおけるキャリーによってイベントが形成され、すべてのカウンタにはそのベースアドレスがリロードされ、計数が継続されるという違いがある。
【０１６６】
３．１．４  スタック
１つのカウンタ（ＣＮＴ１）は、データの書き込みの後、デクリメントされ、またデータ読み出しの後、インクリメントされるために使用される。このカウンタのベース値は、コンフィギュレーション（ベースアドレス）することができるか、またはＰＡＥによってロードされる。
【０１６７】
３．１．５  リバースキャリー
キャリーはふつう、ＬＳＢからＭＳＢに転送される。キャリーを逆方向に転送する（リバースキャリー）ことによって、ＦＦＴなどのアプリケーションに極めて適したアドレスパターンを形成することができる。このキャリーはＭＳＢにおいて廃棄される。
【０１６８】
リバースキャリーを使用するためにはＬＳＢよりも大きな値を目下の値に加えて計数しなければならない。このためにＳＴＥＰレジスタを使用する。
【０１６９】
例：
ベース ＝ ０ｈ
ステップ ＝ 1000b
【０１７０】
【表１４】
2007504688.tif 000197
【０１７１】
このカウンタは、少なくとも−２，−１，＋１，＋２のＳＴＥＰ値においてリバースキャリーを可能にするように実現されている。
【０１７２】
４．  ＡＬＵ／ＲＡＭシーケンサ  ＳＥＱ−ＰＡＥ
アレイの左または右側エッジの各ＡＬＵ−ＰＡＥは、ＩＰオプションとして隣のＲＡＭ−ＰＡＥに密に結合して、シーケンサをコンフィギュレーションすることができる。互換上の理由により、シーケンサのデータおよびオペコード幅は１６ビットである。
［図３２を参照］
上記のＡＬＵ−ＰＡＥは、まさにアレイの内部ＡＬＵ−ＰＡＥとして動作することができるが、いくつかの拡張を有する。動作はシーケンサモードであり、レジスタファイルは８データレジスタ幅であり、ＦｕおよびＦｖフラグは、キャリー、符号、ナル、オーバーフローおよびパリティＡＬＵフラグワードとして使用される。
【０１７３】
【表１５】
2007504688.tif 000198
【０１７４】
アドレス幅は、相応に１６ビットである。しかしながらＲＡＭ−ＰＡＥサイズは限定されているため、１６個のセグメントにセグメンテーションされている。これらのセグメントは、コード、データおよびスタックに使用され、コンパイラによって個別にプリロードしなければならない。
【０１７５】
４つのセグメントレジスタにより、特定のセグメントがポイントされる。すなわち、
CodeBank        現在のコードセグメントをポイントする
DataBank        現在のデータセグメントをポイントする
StackBank       現在のスタックセグメントをポイントする
AuxiliariyBank   任意のセグメント（ただしコード）をポイントして、セグメン
ト間でコピーを可能にする。
［図３３を参照］
コンパイラは、必要なデータセグメントがプリロードされており、かつ利用可能であるようにしなければならない。コスト上の理由から自動のＴＬＢは実装されない。
【０１７６】
またセグメントは、ＴＬＢがないことに起因して物理的に直接アドレッシングしなければならない。つまりコンパイラは、相応するアドレスに対する範囲チェック機能を実装していなければならないのである。
【０１７７】
コードセグメントは、データセグメントに相応して動作する。コンパイラは、データセグメントへのジャンプを実行する前にこれらをプリロードしなければならない。ここでもＴＬＢがないことに起因してジャンプも物理的に直接アドレッシングされる。
【０１７８】
任意のセグメントの再配置はできない。マッピングはコンパイラによって固定される。
【０１７９】
メモリ配置を図３４に示す。簡単なチェック機構が実装されており、これによってメモリセグメントの有効または無効になる。
【０１８０】
少なくともCodeBank（ＣＢ）およびStackBank（ＳＢ）を設定しなければならない。最初のCodeBankは、位置0000hでスタートしなければならない。他のすべてのバンクに対して0000hは、違反エントリである。メモリにセグメントをロードすることによってこれらは有効になり、相応にフラッシュすることによってこれらは無効になる。
【０１８１】
メモリバンクは、つぎのオペコードによって制御され、ＤＭＡエンジンによってバックグラウンドでロードないしはフラッシュされることによって更新される。すなわち、
LOADSEG      データ／補助／スタックバンクをロードして有効にする
STOREDSET   データ／補助／スタックバンクを記憶して無効にする
LOADCSEG    コードバンクをロードして有効にする
ＩＯＡＧインタフェースのアドレス発生器は、ＤＭＡエンジンとして再利用可能である。
【０１８２】
メモリバンクは、殊につぎのように有効ないしは無効にされる。すなわち、
VALIDATESSEG      バンクを有効にする
INVALIDATESEG    バンクを無効にする
である。
【０１８３】
バンクポインタは、任意のメモリアクセスのアドレスに加算される。アドレスポインタは、６４個のラインの範囲をアドレッシングする６ビットよりも大きくすることができるため、セグメント境界は「はっきり」していない。つまり、いかなる制限もなしに交わることができるのである。しかしながらプログラマまたはコンパイラは、これらが交わる際にダメージが発生しないようにする必要がある。無効なセグメントに達した場合、フォールトを示すフラグまたはトラップが生成され、最終的にはプリロードしたセグメントがバックグラウンドですでに動作している場合には単に待ち状態が挿入される。
［図３５を参照］
択一的には図３６に示すようにさらに先進的な有効性チェック方式を実現することが可能である。
【０１８４】
２４ビット命令を必要とするＰＡＥとは異なり、シーケンサでは１６ビット命令だけが使用される。同じ命令セットを使用してデコーダを単純なもののままとするためには、シーケンサモードにおいて単に最後の８ビットが廃棄される。
【０１８５】
４．１  ＩＯＡＧ
ＩＯＡＧは、外部レイテンシを平衡化し、外部バスまたは外部メモリのレイテンシに関係なく、同じデータアドレスをデータの書き込み直後に読み出すことのできる４〜８段のデータ出力バッファを有する。
【０１８６】
以下に複数のオペコードおよびその意味を示す。
【０１８７】
ADD
ADD
説明：
rs1とrs2とを加算する。
【０１８８】
【表１６】
2007504688.tif 000199
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０１８９】
【表１７】
2007504688.tif 000200
【０１９０】
ADDC
ADD with Carry
説明：
キャリーつきでrs1とrs2とを加算する。
【０１９１】
【表１８】
2007504688.tif 000201
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
es4: ソースイベント
et4: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０１９２】
【表１９】
2007504688.tif 000202
【０１９３】
AND
Logical AND
説明：
論理ＡＮＤ演算を行う。
【０１９４】
【表２０】
2007504688.tif 000203
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０１９５】
【表２１】
2007504688.tif 000204
【０１９６】
BSHL
Barrel SHift Left
説明：
rs1をrs2の位置分だけ左方へシフトし、０で埋める。
【０１９７】
【表２２】
2007504688.tif 000205
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０１９８】
BSHR
Barrel SHift Right
説明：
rs1をrs2の位置分だけ右方へシフトし、符号ビットを複製する。
【０１９９】
【表２３】
2007504688.tif 000206
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２００】
BSHRU
Barrel SHift Right Unsigned
説明：
rs1をrs2の位置分だけ右方へシフトし、０で埋める。
【０２０１】
【表２４】
2007504688.tif 000207
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２０２】
CLZ
Count Leading Zeros
説明：
数が正である場合、先頭の０を計数し、数が負である場合、先頭の１を計数する。
【０２０３】
【表２５】
2007504688.tif 000208
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２０４】
【表２６】
2007504688.tif 000209
【０２０５】
CLZU
Count Leading Zeros Unsigned
説明：
符号のない数の先頭の０を計数する。
【０２０６】
【表２７】
2007504688.tif 000210
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２０７】
【表２８】
2007504688.tif 000211
【０２０８】
CMP
CoMPare
説明：
２つの値を比較する。
【０２０９】
【表２９】
2007504688.tif 000212
Rpp++
rs: ソースレジスタ
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２１０】
【表３０】
2007504688.tif 000213
【０２１１】
CMPU
CoMPare Unsigned
説明：
符号のない２つの値を比較する。
【０２１２】
【表３１】
2007504688.tif 000214
Rpp++
rs: ソースレジスタ
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２１３】
【表３２】
2007504688.tif 000215
【０２１４】
DEMUX                                                                  FF
DEMUltipleX data stream
説明：
フラグに依存して入力を２つの入力側のうち一方へ移動する。
【０２１５】
【表３３】
2007504688.tif 000216
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es4: ソースイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
Ei / F
出力フラグ：
−。
【０２１６】
DIV                                                                    SEQ
DIVide
説明：
rs1をrs2で除算する。結果をrtpに、余りをrtp＋1に入れる。
【０２１７】
【表３４】
2007504688.tif 000217
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２１８】
DIVU                                                                    SEQ
DIVide Unsigned
説明：
符号のないrs1をrs2で除算する。結果をrtpに、余りをrtp＋1に入れる。
【０２１９】
【表３５】
2007504688.tif 000218
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２２０】
DSHL
Double SHift Left
説明：
rs1, rs2を左方へシフトする。LSBをイベントで埋める。
【０２２１】
【表３６】
2007504688.tif 000219
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２２２】
【表３７】
2007504688.tif 000220
【０２２３】
DSHR
Double SHift Right
説明：
rs1, rs2を右方へシフトし、符号ｂｉｔを複製する。
【０２２４】
【表３８】
2007504688.tif 000221
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
【０２２５】
【表３９】
2007504688.tif 000222
【０２２６】
DSHRU
Double SHift Right Unsigned
説明：
rs1, rs2を右方へシフトし、イベントで埋める。
【０２２７】
【表４０】
2007504688.tif 000223
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
etp: ターゲットイベント対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
【０２２８】
【表４１】
2007504688.tif 000224
【０２２９】
EQ
EQual
説明：
２つの値が等しいか否かをチェックする。
【０２３０】
【表４２】
2007504688.tif 000225
Rpp++
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
−
入力フラグ：
−
【０２３１】
【表４３】
2007504688.tif 000226
【０２３２】
JMP                                                                    SEQ
JuMP immediate
説明：
直接の定数によって定義されたアドレスへジャンプする。CodeBankを定数にしたがって変更する。
動作：
const[0...3] → CodeBank
const[4...15] → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２３３】
JRI                                                                    SEQ
Jump Relative Immediate
説明：
直接の符号を有する定数にしたがうRppに対して相対的にジャンプする。CodeBankには影響しない。
動作：
Rpp + const → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２３４】
JRR                                                                    SEQ
Jump Relative Register
説明：
レジスタの符号を有するコンテンツにしたがうRppに対して相対的にジャンプする。CodeBankには影響しない。
動作：
Rpp + Rd[rbs] → Rpp
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２３５】
LOAD
LOAD data register with constant
説明：
内部データレジスタまたは出力レジスタに直接の定数をロードする。
【０２３６】
【表４４】
2007504688.tif 000227
Rpp++
rt: ターゲットレジスタ
入力レジスタ：
−
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２３７】
MERGE                                                                  FF
MERGE data streams
説明：
フラグに依存して２つの入力のうち一方を出力側へ移動する。
【０２３８】
【表４５】
2007504688.tif 000228
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es: ソースイベント
入力レジスタ：
Ri / Rd , Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
Ei, F
出力フラグ：
−。
【０２３９】
ＭＯＶＥ
MOVE internal data register
説明：
レジスタバンクレジスタの内容を別の内部レジスタに移動する。
動作：
Rd[rbs] → rd[rbt]
Rpp++
rbs: レジスタバンクソース
rbt: レジスタバンクターゲット
入力レジスタ：
Rd
出力レジスタ：
Rd
入力フラグ：
−
入力フラグ：
−。
【０２４０】
ＭＯＶＥＥ
MOVE flag register
説明：
フラグレジスタの内容を別のフラグレジスタに移動する。
動作：
F[fs] → F[ft]
Rpp++
fs: フラグソース
ft: フラグターゲット
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
F。
【０２４１】
ＭＵＬ
MULtiply
説明：
rs1とrs2とを乗算する。
【０２４２】
【表４６】
2007504688.tif 000229
【０２４３】
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２４４】
ＭＵＬＵ
MULtiply Unsigned
説明：
符号なし整数rs1とrs2とを乗算する。
【０２４５】
【表４７】
2007504688.tif 000230
【０２４６】
I1, I2 → O
Rpp++
rs: ソースレジスタ
rtp: ターゲットレジスタ対
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２４７】
ＮＯＰ
No Operation
説明：
ノーオペレーション、Rppをインクリメントする。
動作：
Rpp++
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０２４８】
ＮＯＴ
Logical inverse
説明：
レジスタを論理的に反転する
【０２４９】
【表４８】
2007504688.tif 000231
【０２５０】
I → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２５１】
【表４９】
2007504688.tif 000232
【０２５２】
ＯＲ
Logical OR
説明：
論理的なＯＲ演算
【０２５３】
【表５０】
2007504688.tif 000233
【０２５４】
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０２５５】
【表５１】
2007504688.tif 000234
【０２５６】
ＲＥＡＤ
READ data input register
説明：
指定されたデータ入力レジスタを読み出して内部レジスタバンクまたは出力レジスタに書き込む。READは、入力レジスタにおいてデータが利用可能になるまで待つ。
【０２５７】
【表５２】
2007504688.tif 000235
【０２５８】
Rpp++
rt: ターゲットレジスタ
ri: 入力レジスタ
入力レジスタ：
Ri
出力レジスタ：
Rd / Ro
入力フラグ：
−
出力フラグ：
−。
【０２５９】
ＲＥＡＤＥ
READ event input register
説明：
指定されたイベント入力レジスタを読み出して内部フラグバンクまたはイベント出力レジスタに書き込む。READEは、入力レジスタにおいてイベントが利用可能になるまで待つ。
【０２６０】
【表５３】
2007504688.tif 000236
【０２６１】
Rpp++
et4: ターゲットイベント
ei: 入力イベント
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei
出力フラグ：
F / Eo。
【０２６２】
ＳＡＴ
SATurate
説明：
キャリー（Fu0）フラグおよび飽和モードに依存してレジスタを飽和させる。
【０２６３】
【表５４】
2007504688.tif 000237
【０２６４】
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
as: 加算／減算モード
es4: イベントソース
入力レジスタ：
Rd
出力レジスタ：
Rd / Ro
es4入力フラグ：
SEQモード：  キャリー
FF-モード：  Ei / F
出力フラグ：
−。
【０２６５】
ＳＥＴＦ
SET Flag with constraint
説明：
フラグレジスタまたは出力イベントにイミーディエイト定数をロードする。
【０２６６】
【表５５】
2007504688.tif 000238
【０２６７】
Rpp++
et4: イベントターゲット
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
F / Eo。
【０２６８】
ＳＨＬ
SHift Left
説明：
rs1を左にシフトする。LSBにはイベントが充填される。
【０２６９】
【表５６】
2007504688.tif 000239
【０２７０】
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタペア
et4: ターゲットイベントペア
es4: ソースイベントレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２７１】
【表５７】
2007504688.tif 000240
【０２７２】
ＳＨＲ
SHift Right
説明：
rs1を右にシフトする。MSBにはイベントが充填される。
【０２７３】
【表５８】
2007504688.tif 000241
【０２７４】
I1 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタペア
et4: ターゲットイベントペア
es4: ソースイベントレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２７５】
【表５９】
2007504688.tif 000242
【０２７６】
ＳＫＩＰＥ
SKIP next two commands depending on Event
説明：
イベントまたはフラグに基づいてつぎの２つのコマンドをスキップする。ソースとしてイベントが選択された場合、イベントが利用可能になるまで実行は停止する。
【０２７７】
【表６０】
2007504688.tif 000243
【０２７８】
val: 値
es4: イベントソース
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei / F
出力フラグ：
−。
【０２７９】
ＳＯＲＴ
SORT data stream
説明：
２つの入力を値に応じてソートする。
【０２８０】
【表６１】
2007504688.tif 000244
【０２８１】
O1 ＝ I1およびI2の小さい方の値
O2 ＝ I1およびI2の大きい方の値
E1 ＝ I1 < I2の場合１，その他の場合0
E2 ＝ I1 <=  I2の場合１，その他の場合0
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
−
出力フラグ：
Ei / F。
【０２８２】
ＳＯＲＴＵ
SORT data stream Unsigned
説明：
２つの符号なし入力値を値に応じてソートする。
【０２８３】
【表６２】
2007504688.tif 000245
【０２８４】
O1 ＝ I1およびI2の小さい方の値
O2 ＝ I1およびI2の大きい方の値
E1 ＝ I1 < I2の場合１，その他の場合0
E2 ＝ I1 <=  I2の場合１，その他の場合0
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
−
出力フラグ：
Ei / F。
【０２８５】
ＳＵＢ
SUBtract
説明：
rs1からrs2を減算する。
【０２８６】
【表６３】
2007504688.tif 000246
【０２８７】
I1, I2 → O
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
et4: ターゲットイベント
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２８８】
【表６４】
2007504688.tif 000247
【０２８９】
ＡＤＤＣ
ADD with Carry
説明：
キャリー付きでrs1からrs2を減算する。
【０２９０】
【表６５】
2007504688.tif 000248
【０２９１】
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
es4: ソースイベント
etp: ターゲットイベントペア
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
F, Ei
【０２９２】
【表６６】
2007504688.tif 000249
【０２９３】
ＳＷＡＰ
SWAP data stream
説明：
フラグに依存して２つの入力をスワップする。
【０２９４】
【表６７】
2007504688.tif 000250
【０２９５】
Rpp++
rt: ターゲットレジスタ
rs: ソースレジスタ
es4: ソースイベント
入力レジスタ：
Ri / Rd, Ri / Rd
出力レジスタ：
Rd / Ro, Rd / Ro
入力フラグ：
Ei / F
出力フラグ：
−。
【０２９６】
ＵＰＤＡＴＥ
UPDATE parameters
説明：
Ei7が設定されている場合、レジスタRd3，Rd2，Rd1をRi3からの値によって更新する。Ri3に続くデータパケットをRo3に移動してEo7を設定する。
【０２９７】
【表６８】
2007504688.tif 000251
【０２９８】
Rpp++
モード：  更新モード
入力レジスタ：
Ri3
出力レジスタ：
Rd3, Rd2, Rd1
入力フラグ：
Ei7
出力フラグ：
Eo7。
【０２９９】
ＷＡＩＴＥ
WAIT for incoming Event
説明：
実行を中断し、定めた値のイベントが到来するのを待つ。到来したイベントに肯定応答する。
【０３００】
【表６９】
2007504688.tif 000252
【０３０１】
定めた値のイベントが到来するのを待つ。到来したすべてのイベントに肯定応答する。
【０３０２】
valx: 値
es3: イベントソース
Rpp++
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
−
出力フラグ：
−。
【０３０３】
ＷＲＩＴＥ
WRITE output register
説明：
入力レジスタまたは内部レジスタバンクからのデータを出力レジスタに書き込む。書き込みの前または後に、到来するACKを待つ。
【０３０４】
【表７０】
2007504688.tif 000253
入力レジスタ：
Ri / Rd
出力レジスタ：
Ro
入力フラグ：
−
出力フラグ：
−。
【０３０５】
ＷＲＩＴＥＥ
WRITE Event output register
説明：
入力レジスタまたはフラグからのイベントをイベント出力レジスタに書き込む。書き込みの前または後に、到来するACKを待つ。
【０３０６】
【表７１】
2007504688.tif 000254
入力レジスタ：
−
出力レジスタ：
−
入力フラグ：
Ei / F
出力フラグ：
Eo。
【０３０７】
ＸＯＲ
Logical XOR
説明：
論理的なXOR演算。
【０３０８】
【表７２】
2007504688.tif 000255
【０３０９】
I1, I2 → O
Rpp++
rs: ソースレジスタ
rt: ターゲットレジスタ
入力レジスタ：
Ri / Rd
出力レジスタ：
Rd / Ro
入力フラグ：
−
【０３１０】
【表７３】
2007504688.tif 000256
【０３１１】
付録  Ｂ
以下では、ファンクションフォールディングを使用する例を示す。
【０３１２】
ファンクションフォールディングおよび高速パラメタ更新の例ＦＩＲ
Ri0 ＝ x
Ri1 ＝ y
accを使用し、３重にフォールディングされたＦＩＲ
レジスタRd1, Rd2, Rd3に対する高速パラメタ更新
例１：UPM3、Rd3, 2, 1にそれぞれにアクセスしてパラメタを更新（Ei7が設定されている場合）。
upmcfg = 1100
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, RiO;
MACオペコード、パラメタpopおよびルーピングを使用した択一的な例
read  Rd0, Ri1；
lh, lt[3]:       mac    Rd0, Ri0, pop;
write   Ro1, Rd0;
write   Ro0, Rio;。
【０３１３】
例２：UPM3、パラメタ更新に対して命令UPDATEを使用。
upmcfg = 1110
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, Rio;
update 3。
【０３１４】
例３：UPM3、Rpp = 0においてパラメタを更新。
upmcfg = 1101
#第１段階
mul    acc, Rio, Rd3;
add    Rd0, acc, Ri1;
#第２段階
mul    acc, Rio, Rd2;
add    Rd0, acc, Rd0;
#第３段階
mul    acc, Rio, Rd1;
add    Ro1, acc, Rd3;
write   Ro0, Rio;。
【０３１５】
上では、改良したデータプロセッサアレイを説明した。いくつかの例だけについてだけではあったが、所定の数のレジスタ、ビット幅などについて述べたことは説明のためだけであることを注意した。このような断りがない場合にもこれが有効であることを理解されたい。
【０３１６】
上記のアレイが極めて大きくなる場合、またはコンパイル時には未知である相異なる２つのアレイのフラグメントが互いに通信してデータ処理が可能であるようにしなればならない状況においてアルタイム処理が実行される場合、有利であるのは、通信パスが設定できるようにすることによって性能を向上することである。例えばLeeルーティングおよび／またはPACT 7に記載された手法などいくつかの提案がすでに提案されている。改良したアレイ設計についての以下の部分は、所定のアプリケーションに対しては、回路装置の改良に結び付き得るが、例えばファンクションフォールディングＰＡＥによってこれを改良することが絶対的また必須とは考えられないことを理解されたい。通常の知識を有する当業者にはわかるようにむしろ改良のための別の提案それ自体が大きな改良に結び付くことがある。
【０３１７】
ルーティングの改良
ここで提案され以下で説明される改良は、リコンフィギャラブルアレイアーキテクチャに対するスタティックルーティングネットワークに関する。ここでこのスタティックネットワークは、アダプティブランタイムルーティングに付加的なロジックを実現することによって強化される。
【０３１８】
図４３には一組の機能ユニット（ＦＵ  functional unit）の有するリコンフィギャラブルアレイのカットが示されている。各機能ユニットには１つのルーティングユニット（ＲＵ  routing unit）および付加的な複数の機能モジュール（ＦＭ functional module）が含まれている。これらの含まれた機能モジュールは、データを操作し、またＦＵのタイプを特徴づけるために使用される。上記のＲＵには相互接続マトリクスが含まれており、これは各入力ポートを所望の任意の出力ポートにルーティングすることができる。すべてのＦＵはポイントツーポイントリンクを介して接続され、ここで各々は２つの半二重リンクから構成され、同時に双方向にデータを転送することができる。
【０３１９】
ここで説明するルーティング法は命令ベースであり、すなわち各ルーティング処理は１つの命令によって開始しなければならないのである。ユーザが２つのセルの間でルーティングを行おうとする場合、このユーザは所定の命令をソースセルに入れなければならない。このアレイ内のハードウェアにより、命令フィールド値に基づいて所望のルーティング方向が計算されてロジックストリームが設定される。このルーティング処理は、１機能ユニットから別の機能ユニットに段階的に進み、ここでは各セルにより、つぎにどの方向を選択すべきかが決定される。設定されたルートの途中、ルーティング資源の３つの重要な状態が定められる。第１の状態は、物理的なルートまたはリンクである。このことが意味するのは、このルートの資源は使用されておらず、ルーティング処理に利用できることである。第２の状態は、一時的なルートまたはリンクと称される。この状態は一時的に利用できないリンクであり、これが意味するのは、このリンクがルーティング処理に使用中であるが、このルーティングがまだ確認されていないことである。ここでの問題は、このルートが、将来的に確認され得るか、または後続のセルが所望のリンクを実現できる場合に解放され得ることである。最後の状態は、論理的なルートまたはリンクである。この状態は、アレイにおいて設定されたルートを表し、このルートによって計算データを転送することができる。
【０３２０】
このルーティング法では、アレイにおける座標が使用され、これによってルーティングが計算される。各ＦＵは一意の座標を有しており、この情報に基づいてアレイ内の所望の各セルへ至るルーティング方向を決定することができる。このコンセプトが、ここで説明するアダプティブランタイムルーティングに対するベースである。アダプティブルーティングに対して必要な制御ロジックは、ルーティングユニット内に実現され、殊にランタイムに相互接続マトリクスを制御するルーティングコントローラ内で実現される。したがってこのルーティングコントローラは、関連するＦＵのすべての入力ポートの到来データを解析でき、つぎに何をすべきかを決定できるようになるのである。
【０３２１】
ルーティングの設定
到来するデータの解析およびデータのバッファリングのため、各入力ポートはいわゆるイン-レジスタ（InReg in-register）を有する。この標準的なレジスタに加えて、InRegコントローラ（InRegCtrl）が実現されている。この有限状態機械（ＦＳＭ  finite state machine）の役割は、入力リンクの最新の状態を記憶し、この最新の状態に依存してルーティング要求をトリガするかまたは不要のルーティングを解放することである。この役割を遂行するため、各InRegCtrlはイン-コントローラ（InCtrl in-controller）に接続されており、これはＦＵ毎にちょうど１つだけ実現される。新しいルーティングを要求するための重要な要件は、上記の入力資源（InReg，InRegCtrl）が使用されておらず、物理リンクの状態にあることである。
【０３２２】
InCtrlは、全時間にわたってすべてのInRegCtrlの要求を受け取り、ルーティングコントローラ（RoutCtrl routing controller）に要求を１つずつ転送する。どのInRegCtrlを最初に処理すべきであるかの選択は、入力リンクのルーティング優先度および／またはどの入力リンクを最後に処理すべきかに依存する。ターゲットセルの座標情報および目下のＦＵの座標に基づき、要求された入力リンクに対する転送方向がRoutCtrlによって計算される。この際にRoutCtrlにより、（後述する）最適なビット、所望の方向へのネットワークの利用率などのような付加的なパラメタが考慮される。
【０３２３】
RoutCtrl内での方向の計算に成功した場合、RoutCtrlにより、出力ポートについての付加的な情報と共にこの要求が相互接続マトリクスに転送され、この相互接続マトリクスにより、上記の入力ポートと、計算された出力ポートとが接続される。これが行われた場合、RoutCtrlにより、ルーティング処理の成功がInCtrlに通知される。目下達成されるルーティング状態は最終的なものではないため、この目下の状態を記憶する必要がある。これはキュー要求レジスタファイル（QueueRRF queue-request-registerfile）内で行われる。したがってInCtrlはQueueRRFに直接接続されて所望の情報を記憶することができる。この時点で、関連する入力および出力リンクは、一時的なリンク状態に達し、またこれは他のルーティング処理に対して一時的に利用できない。
【０３２４】
QueueRRFは１つ以上のルーティングエントリを記憶できるという事実に起因して、InCtrlは同時に複数のルーティング処理を保持することができる。しかしながらハードウェア領域を多く消費するため、直接的な計算がRoutCtrl内で一度実現される。
【０３２５】
設定された一時的なルーティングは、後続のセルによってルーティングが肯定応答される時点までQueueRRF内に記憶されたままになる。肯定応答された場合、InCtrlによって、QueueRRF内の相応するエントリがクリアされ、またルーティングの成功がこのInCtrlに通知される。InRegCtrlは、論理的なルートの状態に変わり、また先行のセルにルーティング処理が成功して終了したことを通知する。後続のセルが所望のルートを設定できない場合、別のケースが発生し得る。この場合、InCtrlは、QueueRRFエントリに基づいてRoutCtrlに新たな要求を転送する。この要求は、新たなルーティングの提案になり、これはQueueRRF内に記憶される。
【０３２６】
利用可能かつ有利なすべての方向がチェックされ、かつルーティングの試みが失敗した場合、InCtrlは、ルーティングの失敗をInRegCtrlに通知する。InCtrlはルーティングの同じ失敗を、先行するセルに通知し、現在にセルにおけるルーティング処理を終了する。
【０３２７】
ルーティング処理内では、ルーティングユニットが所望のルーティングを設定する仕方について２つの例外がある。これらの例外は、ソースセルおよびターゲットセルを対象とする。いずれのケースであっても、この例外はつぎのようなものである。すなわち、ソースセルもターゲットセルも共に相互接続マトリクスを介して、開始ルーティング／終了ルーティングをルーティングする必要がないということである。ＦＭをセルの出力リンクに接続するためには単純な複数のマルチプレクサが使用される。これらのマルチプレクサは、相互接続マトリクスに後置接続され、また明示的にスイッチングしなければならない。これはルーティング処理が終了した後、行われる。例外であるのは、終了状態である。ここではInRegCtrlは、先行するものにルーティングの成功を肯定応答する必要はなく、その代わりにInRegにおいて目下のルーティング命令を消費すればよいだけである。これは、InCtrlによってルーティングの成功が通知された後に行われる。付加的にInRegは、ＦＭの出力ポートに関連づけられた出力マルチプレクサをスイッチングして、ルーティングの設定を終了する。InCtrlは、出力マルチプレクサを正しくスイッチングするために必要な情報をRouteCtrlから得る。
【０３２８】
上記とは異なり、ルーティングが失敗した場合、InCtrlは、セル固有の割り込みラインをアクティブにして、システムに失敗を通知する。
【０３２９】
２つ目の例外は、ターゲットルーティングセルに関する例外である。ここで重要であるのは新たなルートと、ローカルなＦＭの入力ポートとを接続することである。したがって相互接続マトリクスに前置接続される単純な複数のマルチプレクスが使用されるのである。進行中のルーティング処理がターゲットセルに達した場合、InCtrlは、ターゲットへの到達を識別して、関連する入力マルチプレクサをスイッチングして、到来するデータをＦＭの入力ポートに転送する。InCtrlによって成功が通知された後、ルート設定の成功を示す信号がInRegCtrlによって形成されるのはこの時点である。ここでInRegCtrlが最後に行う作業は、ルーティング命令を消去し、上記の論理的な状態に移行することによってルーティング処理を終了することである。
【０３３０】
設定したルーティングの解放
論理的に設定されたルーティングを解放するため、複数の固有の命令、いわゆる終了パケットを導入する。これらの命令のただ１つの目的は、上記の論理的に設定されたルーティングに所要の終了パケットを挿入することによって、ルートを解消することである。ルーティングを解放できるようにするためには２つのやり方がある。１つの可能性はグローバルな解放である。すなわち、終了パケットが挿入されるルートに続くすべてのルートを解放することである。この機能は、単一の命令ですべてのコンフィギュレーションを消去するのに有効である。このために重要であるのは、ＦＭが、内部データパスを介して上記の終了パケットを変更せずに転送できることである。
【０３３１】
ルート解放の２つ目のやり方は、ローカルなルート解放である。ここではＦＭの出力ポートと入力ポートとの間で設定された複数のルートを個々に解放することができる。終了パケットはＦＭを介して伝搬されない。この場合、終了パケットは最後のInRegCtrlによって消費される。
【０３３２】
内部的なＲＵ通信はルーティング処理と同様である。InRegCtrlによって、到来する終了パケットが決定されかつInRegCtrlが上記の論理的なルーティング状態にある場合、InRegCtrlは、ルート解放要求をInCtrlに転送する。InCtrlにより、相互接続マトリクス内か、または入力マルチプレクサレジスタ内か、または出力マルチプレクサレジスタ内のいずれかのエントリがクリアされる。この間にInRegCtrlは、（ローカルな終了パケットおよびチェーンの最後のセルの場合）命令を消費して、アイドル状態に移行する。終了パケットがグローバル命令の場合はつねにInRegCtrlにより、終了パケットが後続のものに転送される。
【０３３３】
付加機能
優先度を制御するため、優先システムを導入して、到来するルーティング要求がＲＵによって扱われる順番を変更する。このために上記の命令には、優先度レベルを表す優先度フィールドが含まれる。このフィールドの値が大きい場合、優先度は高く、ランタイムのルーティング中にＲＵによって優先的に処理される。この優先度フィールドは、InRegCtrlからInCtrlに到来するルーティング要求の選択に直接的に影響を与える。
【０３３４】
内部的なコンフィギュレーション通信ストリームによっては、所望の性能に達するための厳密に定められたレイテンシを要求するものがある。このために極めて重要であるのは、最大レジスタチェーン長を保持することである。ルーティングされるストリームのレイテンシを減少するために必要であるのは、アレイにより、ソースとターゲットとの間の最良のルーティングがつねに選択されることを保証することであるが、この機能がつねに要求されると、この要求により、ルーティングできないストリームが生じることがある。このような問題を緩和するため、いわゆる最適化ビット（OptBit optimum bit）と称される固有のビットをルーティング命令内に導入する。このビットは、最適なルーティングが確実に要求される場合にアクティブ化しなければならない。この場合、アレイはこの要求を満たすようにし、失敗した場合には割り込みを出力する。
【０３３５】
要求されるレイテンシを得るための択一的なやり方は、速度パスカウンタである。このカウンタによって示されるのは、再びバッファリングする前に、指定された数のレジスタをバイパスできることである。したがって基準値およびカウンタ値が定められる。これらの２つの数は、命令フィールド内に記憶される。これが渡されたそれぞれのＲＵの各セルにより、カウンタ値と基準値とが比較される。これらの２つの値が等しい場合、目下のセルにより、ストリームがバッファリングされてカウンタがリセットされる。カウンタが基準値よりも小さい場合、目下のバッファはバイパスされて、カウンタは１だけインクリメントされる。このようにして、基準値に正確に等しいバッファ数をバイパスすることができるのである。
【０３３６】
マルチグレイン通信リンク
複数のポイントツーポイントコースグレインリンクに加えて、一層フレキシブルな複数のマルチグレインポイントツーポイントリンクを導入する。ここでは個々のポイントツーポイントリンクによって、それぞれのＲＵの隣り合う２つのセルが、これらのセル内でリンクされる。１つのコースグレインリンクには一組のワイヤ、例えば１つの３２リンクに対して３２本のワイヤと、付加的なプロトコル信号とから構成されている。一まとまりベクトルは、複数の制御信号からなる単一の集合によって処理されるため、通信資源はマルチグレイン通信に使用できない。
【０３３７】
マルチグレイン通信の要求を満たすため、全体で３２ビットのベクトルを複数の個別のストリップに分ける。例えば、８個の１ビットストリップおよび３つの８ビットストリップに分けるのである。得られた各ストリップは、制御信号を分け、また他のストリップは無関係に動作することができる。このような分割の仕方の背景にあるアイデアは、上記のストリップを組み合わせて、論理的なマルチグレインサブリンクにすることである。マルチグレインリンクがあれば、一まとまりベクトルを、相互に関連する１つの３２ビットベクトルとして使用するか、またはこの一まとまりベクトルをサブチャネルに分けることができる。このような構成では、各ストリップを単一サブチャネルにすることができるか、またはストリップのグループをまとめて所望のビット幅の単一のサブチャネルにすることができる。（ハードウェアコストに関していえば）１つのサブチャネルを１つのマルチグレインリンクに当てはめることだけを考えればよいのである。
【０３３８】
マルチグレインルーティング
マルチグレインチャネルをルーティングするためにはコースグレインリンクを使用して、ルーティング処理をサポートしなければならない。このアイデアは、２つのリンクを並列にルーティングすること、すなわちマルチグレインルーティングをサポートする１コースグレインリンクと、最終的なマルチグレインストリームを含む１つのマルチグレインリンクとをルーティングすることである。このために、所要のデータフィールドを有する２つのパケットルーティング命令を定める。第１の命令パケットは（コースグレインルーティング命令と比較して）、使用するマルチグレインサブリンクを指定するための付加的なビットマスクと、関連するマルチグレインリンクを識別するためのマルチグレインリンクＩＤを含む。上に説明したような別の機能（最適ビット、速度パス、優先度ルーティング）もこのルーティングモードにおいてサポートされている。上記のＲＵ内のルーティング処理は、コースグレインルーティングと同様に行われる。
【０３３９】
セルに到着する最初のパケットは、InRegCtrlによって解析されて要求が生成され、InCtrlに転送される。InCtrlは、この要求をRoutCtrlに転送して肯定応答を待つ。RoutCtrlにより、可能性のある１ルーティング方向が見つかった場合、InCtrlは、成功の肯定応答を受け取り、また一時的なルーティングがRoutCtrlによって設定される。つぎにQueueRRP内で目下のジョブが記憶され、InCtrlは後続のセルからの肯定応答を待つ。RoutCtrlが、可能性のあるルーティングを見つけられない場合、InCtrlnは否定応答を受け取り、これは関連するInRegCtrlに転送される。このInRegCtrlにより、先行するセルに対してルーティング不可信号が形成され、このセル内でのルーティング処理が中止される。
【０３４０】
後続のセルにより、ルーティングの成功が通知される場合、InRegCtrlにより、QueueRRPの関連するエントリがクリアされ、ルーティングが終了する。後続のセルが、宛先セルへのルートを設定できない場合、これは否定応答信号を生成する。これに基づいてInCtrlはRoutCtrlに新たな要求を開始し、応答を上記のように処理する。
【０３４１】
コースグレインルーティングとマルチグレインルーティングとの間の違いは、マルチグレイン相互接続マトリクスの処理の違いにある。マルチグレインリンクの各ストリップは、別個に処理される。RoutCtrlにより、ストリップマッチャ（strip matcher）へのスイッチ要求が転送される。ストリップマッチャの役割は、入力ストリップを解析して、すでに使用されたストリップにしたがってこれらを出力リンクに整合させることである。ストリップマッチャによって行われるのは、ストリップマッチングの問題を時間領域にマッピングして、ストリップ毎に必要なスイッチボックスを順次にスイッチすることである。
【０３４２】
コースグレインストリームに対するルーティングパケット：
【０３４３】
【表７４】
2007504688.tif 000257
マルチグレインストリームに対するルーティング命令（第１パケット）：
【０３４４】
【表７５】
2007504688.tif 000258
【０３４５】
マルチグレインストリームに対するルーティング命令の第２パケット：
【０３４６】
【表７６】
2007504688.tif 000259
【０３４７】
終了パケット命令：
【０３４８】
【表７７】
2007504688.tif 000260
【０３４９】
データパケット：
【０３５０】
【表７８】
2007504688.tif 000261
【０３５１】
改良されたルーティングの仕方に関連する図は、図３７，図３８，図３９，図４０，図４１，図４２，図４３，図４４，図４５，図４６である。
ＰＡＣＴ４８／ＰＣＴＥへの補遺
ファンクションフォールディングを用いてリコンフィギャラブル算術アレイのシリコン効率を高める手法
筆者：（ブラインドレビューのため削除）
要約
この論文はファンクションフォールディングＦｕｎｃｔｉｏｎ Ｆｏｌｄｉｎｇ、すなわちリコンフィギャラブル算術アレイ（コースグレインアレイ）のシリコン効率を高めるための設計原理に関する。このアレイでは高度に並列にインプリメンテーションされたＤＳＰアルゴリズムが実行されるものの、現行のデバイスの全シリコン効率はアレイに要求される多数のＡＬＵと満足とは云えない速度との双方によって制限されている。動作周波数は主としてノンローカルルーティング接続部の要求によって制限されている。われわれはこうした制限を克服する新たなファンクションフォールディングのアプローチ、つまり同じコンフィギュレーションに属する明確な少数の演算子を同じＡＬＵにたたみ込み、１つの処理素子上でシーケンシャルに実行することを提案する。ＡＬＵは同じ命令シーケンスを反復して実行するプログラムによって制御される。局所的にしか要求されないデータはローカルレジスタファイルに格納される。こうしたシーケンシャルアプローチにより個別のＡＬＵリソースがより効率的に用いられ、しかもアレイの全ての処理素子が現行デバイスと同様に並列に動作する。さらにＡＬＵおよびローカルレジスタはノンローカルルーティング接続部よりも高い周波数でクロック制御することができる。全体として、現行のデバイスよりも高い計算密度を得ることができる。
【０３５２】
１  導入
フィールドプログラマブルゲートアレイＦＰＧＡはアプリケーション専用集積回路ＡＳＩＣに代わるフレキシブルなプログラマブル回路としてビット指向アプリケーションに使用される。ＦＰＧＡは文献［１］に示されているようにＮＲＥコストが低く、しかもタイムツーマーケットが速い。同様にリコンフィギャラブル算術アレイもワードレベルの算術アプリケーションに対する選択手段として使用されているが、こちらはビットレベルのルックアップテーブルよりもむしろコースグレインＡＬＵに基づいている。幾つかの研究プロジェクト（例えば文献［２］のRapid、文献［１］［３］のKressArray）および商業的開発（例えば文献［４］のPACT XPP Technologies、文献［５］のMorphotech、文献［６］のElixent）がこの分野で行われている。これらのアーキテクチャは高度に並列的にインプリメンテーションされたＤＳＰアルゴリズムが提供されるにもかかわらず、まだ広汎には使用されていない。その明らかな原因の１つは現行のデバイスのシリコン効率が制限されているということであり、このために多数のＡＬＵが必要となり、また不充分な速度しか得られないのである。動作周波数は主として要求されるノンローカルルーティング接続部により制限されている。
【０３５３】
われわれは文献［４］に記載されているPACT XPP TechnologiesのeXtreme Processing Platform(XPP)をさらに拡張することによりこれらの制限を克服した。つまり１つのＡＬＵ上で１つのコンフィギュレーションの全期間にわたって１つの固定演算を実行するのではなく、同じコンフィギュレーションに属する明確な少数の演算子を同じＡＬＵへたたみ込み、同じ処理素子ＰＥ上でシーケンシャルに実行する。ＡＬＵは同じ命令シーケンスを反復して実行するプログラムによって制御される。局所的にしか要求されないデータはローカルレジスタファイルに格納される。こうしたシーケンシャルアプローチにより個別のＡＬＵリソースがより効率的に用いられ、しかもアレイの全ての処理素子は現行デバイスと同様に並列に動作する。外部データの転送は処理素子のクロックサイクルごとには要求されないので、ＡＬＵおよびローカルレジスタをノンローカルルーティング接続部よりも高い周波数でクロック制御することができる。このＡＬＵオーバークロッキング技術はますます強くなる高い集積密度への志向により理由付けされる。新世代の技術ではより小さなトランジスタを製造できるようになっているが、ワイヤは高い相対容量を有し、このためにバスが遅くなり、電流消費量が大きくなってしまうからである。
【０３５４】
大幅なアーキテクチャ変更にもかかわらず、既存のXPPプログラムを自動的に拡張アーキテクチャに自動マッピングすることができる。全体として、現行のデバイスよりも高い計算密度が得られる。
【０３５５】
この論文の以下では次の各点について述べる。最初にセクション２でPACT XPPアーキテクチャを説明し、次にセクション３で新たなファンクションフォールディング処理素子の機能およびハードウェアデザインを説明し、またセクション４でマッピングメソッドを説明し、さらにセクション５で予備実験結果を示す。最後にわれわれのアプローチを関連する技術と比較して述べ、結論を導出し、将来の技術を概観する。
【０３５６】
２  ＸＰＰアーキテクチャの概観
文献［４］に記載されている現行のＸＰＰアーキテクチャはコースグレイン適応化処理素子の２Ｄアレイ、内部メモリおよび相互接続部リソースに基づいている。６４個のＡＬＵおよび１６個の内部メモリを備えた２４ｂｉｔプロトタイプチップがPACT XPP Technologiesによって製造されている。このXPP64Aチップの開発ボードは入手可能である。
【０３５７】
PACT XPP Technologiesはさらにプレーサアンドルータ、シミュレータおよびヴィジュアライザから成る完全開発ツールを提供している。このツールはリコンフィギュレーション要素を備えた構造言語であるプロプラエタリNative Mapping Language（ＮＭＬ）を使用している。Ｃフロントエンドも同様に提供されている。
【０３５８】
２．１  アレイストラクチャ
図４７には単純なXPPコアの基本構造が示されている。デモンストレーションのために、このコアが９個の処理素子および６個の内部ＲＡＭのみを有するものとする。コアは３×３個の矩形状の処理素子を中央に有し、１組の対辺に一列ずつ独立の内部メモリを有する。さらに２個のＩ／Ｏユニットが設けられており、データのストリーミングに対するポートまたは外部ＲＡＭのアクセスに対するインタフェースとしてコンフィギュレーションされる。処理素子のコアは通常の算術演算、論理演算、比較および計数などの特殊演算を行うＡＬＵである。コンフィギュレーションごとに各処理素子は１つの専用の演算を実行する。図中の線は１つの処理素子の出力側と他の処理素子の入力側とを接続するセグメント化されたバスのセットを表している。このアレイは動作中コンフィギュレーションを管理するコンフィギュレーションマネージャＣＭに付加される。コンフィギュレーションの管理とは外部メモリからアレイのコンフィギュレーションリソースへコンフィギュレーションデータをダウンロードすることである。有限状態機械に加え、コンフィギュレーションマネージャＣＭはコンフィギュレーションデータの記憶またはプリフェッチのためにキャッシュメモリを有する。
【０３５９】
２．２  データおよびイベントの同期
相互接続部リソースは２つの独立のバスのセット、すなわちデバイスごとのｂｉｔ幅を有するデータバスと１ｂｉｔ幅のイベントバスから成る。XPPバスは論理回路を接続するワイヤであるだけでなく、処理素子で処理されたデータおよびイベントを同期するためにハードウェア内にインプリメントされたready / acknowledgeプロトコルである。したがって処理素子の演算は、必要な全ての入力値が利用可能となり、かつ先行の結果が消費されるとただちに実行される。このようにデータフローグラフを直接にアレイにマッピングし、このアレイを通る入力データストリームをパイプライニングすることができる。パイプラインの機能停止中にもデータは失われない。ストリームのマージ、マルチプレクスなどに対する専用のデータフロー演算も同様に行うことができる。
【０３６０】
２．３  コンフィギュレーション
ＦＰＧＡに比べてXPPコアはコースグレイン性のために迅速にコンフィギュレーションできる。オペコードおよび接続部のみセットすればよい。またコンフィギュレーションが必要なのは実際に使用されるアレイオブジェクトのみである。
【０３６１】
コンフィギュレーション時間はプリフェッチ機構により低減される。１つのコンフィギュレーションをアレイへロードしているあいだ、別のコンフィギュレーションがＣＭキャッシュへロードされる。このようにすれば要求に応じていちいち外部メモリからロードする必要がなくなる。同じことが以前に使用されたコンフィギュレーションにも当てはまり、この場合コンフィギュレーションデータはＣＭキャッシュ内に残っていることになる。
【０３６２】
３  ファンクションフォールディング処理素子
次に拡張XPP PEすなわちファンクションフォールディング処理素子の機能およびハードウェアデザインについて説明する。
【０３６３】
３．１  ファンクションフォールディングの例
まず簡単な例を考察しよう。アドレスadrを定数のオフセットoffsおよび座標x, yから
adr＝offs＋x＋256*y
として計算する。図４７のような単純な処理素子に基づくXPPインプリメンテーションでは、この計算は標準的には直接に図４９ａ）のデータフローグラフへマッピングされる。各加算子および各乗算子は自身のＡＬＵへマッピングされる。ゆえに新たなアドレスがサイクルごとに計算される。ただしセクション１で述べたように、動作周波数はＡＬＵそのものではなく、バス接続部によって制限されている。
【０３６４】
シリコン効率を高めるために、つまり１ｍｍ２当たりおよび１ｓ当たりでより多くの演算を実行するために、ＡＬＵのクロックを高速化しなければならない。これはバス内により多くのパイプラインレジスタを設けることにより達成される。ただしこうするとデータフローグラフが複数のサイクルを含む場合、生憎なことに、チップ面積および電力消費が増大し、スループットが低下してしまう。われわれのアプローチでは、現行のXPPコアと同程度の周波数でバスを駆動し、ＡＬＵのクロックレートを処理素子内部で局所的に増大する。こうしたｎ回たたみ込みのオーバークロッキングにより、ｎ個［ここでｎは小さな数である］のＡＬＵ演算を１つのバスサイクルにスケジュールすることができる。われわれはこの演算グループをクラスタと称している。必要な処理素子数の大幅な低減はハードウェアのオーバヘッドに対して有効である。リコンフィギャラブル“空間的コンピューティング”というパラダイムは確かに成功しているが、われわれはそれに拘わるのでなく、局所的シーケンシャルアプローチによりＡＬＵリソースの効率を最適化している。
【０３６５】
同じデバイス内でオーバークロッキング係数（例えばｎ＝２，ｎ＝４）が異なっていても良いことにより、異なる局所的時空間のトレードオフが可能である。１つの実施例では、ｎ＝４に対してはデータフローグラフの全ての演算がクラスタリングされ、乗算が２つのサイクルを要する場合であっても、同じＡＬＵで実行される。ｎ＝２に対しては２つの加算子のみがクラスタリングされる。これによりｎ＝４に比べて面積は２倍になるが、スループットも２倍となる。
【０３６６】
ｎ個の命令を反復して実行するプログラムコントローラのほか、中間結果をＡＬＵ入力側へフィードバックする小さな内部レジスタファイルも処理素子に要求される。このローカルフィードバックループはｎ個までの演算子を含むサイクルで全体のスループットを低下させることなくデータフローグラフをインプリメントできる。
【０３６７】
３．２  ハードウェアデザイン
図４８に示されているハードウェアデザインでは次のようなファンクションフォールディングが行われる。図４７の単純な処理素子と同様に、新たな処理素子はready / acknowledgeプロトコルにしたがうデータおよびイベントの入出力ポートを介して相互接続ネットワークと通信する。各ポートは処理素子の高速の内部クロックとｎ倍遅いバスクロックとを同期させる。入力データはバスクロックサイクルの全期間にわたって安定であり、処理素子の内部クロックサイクルごとにサンプリングすることができる。出力データはバスサイクルの開始時にバスレジスタへコピーされる。ファンクションフォールディング処理素子は演算のクラスタ全体を実行するため、単純な処理素子より多くのポートを要する。しかし単純な処理素子のポートのｎ倍を要するわけではない。なぜならコンフィギュレーション時に内部レジスタにロードされる入力およびクラスタ内のローカル接続部が一定であるため、外部コネクションが大きく制限されていることが多いからである。良好なクラスタリングアルゴリズムを用いれば外部コネクションを最小化することができる。図４９（ｂ）に点線の囲みで使用されているように、ｎ＝４の実施例のクラスタに対しては２つの入力ポートおよび１つの出力ポートがあればよい。
【０３６８】
より詳細に云えば、図４８の処理素子は次のように動作する。小さなプログラムカウンタＰＣは命令記憶部内でコンフィギュレーションされた命令を反復して実行する。処理素子の各サイクルでプログラムカウンタはＡＬＵオペコードを選択し、マルチプレクサを制御してＡＬＵ入力を選択させる。入力ポートまたは内部レジスタファイルのエントリのいずれかが使用される。ＡＬＵ出力は内部レジスタファイルまたは出力ポートまたはその双方へ書き込まれる。全体の設計は単純であり、ファンクションフォールディングをサポートできる最小限の大きさに保たれる。他の制御ストラクチャは不可能である。入出力ポート数および内部レジスタ数は約ｎとなる。したがってわれわれはレジスタおよびマルチプレクサのみを用いてレジスタファイルのインプリメンテーションをきわめて迅速に選択することができる。ポート数およびレジスタ数が小さいので、フェッチ／実行／記憶の全プロセスを１サイクル内で実行することができる。唯一の例外は２サイクルにわたる乗算演算である。外部入力が利用不能であるか、またはダウンストリームパイプラインが機能停止して外部入力ポートがいっぱいになっている場合、コントローラＦＳＭはプログラム実行を停止する。わかりやすくするために図４８ではイベントポートおよびイベントレジスタは省略されていることに注意されたい。イベントはデータと同様に内部および外部で使用および記憶される。
【０３６９】
さらにわれわれは図４９（ｂ）に示されているアドレス形成クラスタに対する単純な処理素子のプログラムを提供する。ポートおよびレジスタへの接続部のマッピングは図中に示されている。われわれはレジスタr1, r2がそれぞれコンフィギュレーション時に一定の値offs, 256で初期化されていると仮定している。反復して実行されるアセンブラコード
add r3 ← r1 , i1
mul r4 ← r2, i2
add o1 ← r3 , r4
がクラスタを記述している。
【０３７０】
４  アプリケーションマッピング
図５０には拡張ＸＰＰアーキテクチャのツールフローが示されている。これは文献［４］に記載されているｘｍａｐプログラムのインプリメンテーションの現行のルールフローにきわめて類似している。影付きのブロックで表されたフェーズが追加されているだけである。次のフェーズ、すなわち
・Ｃフロントエンド（オプショナル）：構造的ＮＭＬコード（セクション２を参照）を標準Ｃのサブセットから形成する
・ＮＭＬ構文解析系：入力ＮＭＬファイルを構文解析し、ＸＰＰ演算子にマッピングする
・プレーシングおよびルーティング：処理素子（つまり現行のアーキテクチャにおける演算子）をＸＰＰアレイへプレーシングし、接続部をルーティングする
・バイナリ形成：ＸＢＩＮバイナリファイルを形成する
は現行のＸＰＰツールフローに既に存在している。
【０３７１】
ファンクションフォールディングでは、付加的に、１つの処理素子にマッピングされる演算子を定義する演算子クラスタリングのフェーズが必要とされる。クラスタは手動でＮＭＬファイル内の注釈により定義されるが、自動クラスタリングアルゴリズムはプログラミングの単純化、Ｃフロントエンドの使用、既存のＮＭＬコードのマッピングの際に要求される。このことについては次項で説明する。さらに処理素子のプログラムコードをセクション４．２で後述するように形成しなければならない。なおプレーシングおよびルーティングのフェーズおよびバイナリ形成のフェーズをともに適合化しなければならないことも明らかである。
【０３７２】
４．１  演算子のクラスタリング
ファンクションフォールディングＰＥに対する演算子クラスタリングの問題は、例えば[7]のＦＰＧＡに対するモジュールのマッピングおよび慣用のプロセッサに対してコードジェネレータにおいて発生するグラフカバリング（graph covering ）問題と類似している。したがってこれらのアルゴリズムをまず検討する。[7]で使用される効率的ダイナミックプログラミングアルゴリズム（efficient dynamic-programming algorithm）および類似のアプローチは、実質的にツリーカバリング（tree-covering）アルゴリズムである。これは演算のツリーに対して最適なカバリングを形成する。しかしながらこれは任意のデータフローグラフを処理することはできない。このため、オリジナルのグラフからフィードバックサイクル（feedback cycle）およびファンアウトエッジ（fanout edge）を取り除く前処理フェーズが必要である。結果的に得られるのは、効率的に覆うことのできるツリーからなる森である。しかしながら得られた最適なツリーカバリングは、オリジナルのデータフローグラフに対して最適ではない。
【０３７３】
以下では当面の演算子クラスタリング問題を検討する。すなわちここではファンクションフォールディングＰＥの制約、すなわちオーバークロッキングファクタｎ、ポート数および内部レジスタに沿って、クラスタ数の最小の解決手段を探し出さなければならない。また（外部のルーティング遅延によって発生するスループットの低下を回避するため）サイクルはできる限り、１クラスタ内で処理すべきであり、また外部コネクション数は最小化すべきである。残念なことにこれらの品質判定条件は、ツリーカバリング前処理フェーズの出力において、すなわちサイクルおよびファンアウトエッジを取り除いた後、見ることができない。このため、演算クラスタリングに対してツリーカバリングを適用しない。
【０３７４】
その代わりにオリジナルのグラフにおいて動作するアルゴリズムを開発した。複雑さを低減するため、接続されクラスタを成している演算子だけを考察する。それはこれらのクラスタだけが内部レジスタを使用し、外部ポートの数が低減されるからである。付加的な後処理フェーズでは、未接続のクラスタは、これらが互いに隣り合って配置されている場合、後でマージすることができる。
【０３７５】
第１のアルゴリズムフェーズでは、接続されたすべてのクラスタが明示的に形成される。発生し得る未接続のクラスタの数は、演算子数において指数関数的になることに注意されたい。
【０３７６】
第２のフェーズでは、入力グラフ全体をカバーするクラスタの最適な組み合わせを決定しなければならない。残念なことにクラスタの考えられ得るすべての組み合わせの数は指数関数的である。このために網羅的に探すことは不可能である。その代わりにこのアルゴリズムのメインループは、演算子を次第に増大させた部分集合に作用して、この部分集合の最適なクラスタリングを形成しこれを記憶する。ここでこれは演算子グラフ全体の最適なクラスタリングが計算されるまで行われる。このアルゴリズムが使用しているのは、部分最適解が完全最適解に含まれているという事実である。このようにすることにより、すべての部分集合に対して最適なクラスタリングを計算する必要はない。新しい部分集合の最適なクラスタリングは、前に計算しなかったかもしれない別の部分集合に依存するため、指数関数的な実行時間に結びつき得るいくつかの再帰呼び出しが必要である。しかしながらオーバークロッキングファクタｎ≦４および演算子数ｋ＜５０に対して、数分間の範囲であることが判明した。問題となるさらに大きなサイズに対してつぎのような帰納的な手法をテストした。すなわち、
・  （ｎ個の演算子よりも多くの演算子を有する）大きなフィードバックサイクルをグラフから取り除く。この場合、小さなサイクルはなお１クラスタ内で実行され、わずかに数クラスタだけが除外され得るだけであり、再帰呼び出しの数は大きく低減される。
【０３７７】
・  最良の解を再帰呼び出しで計算せず、計算される部分集合の最初のクラスタリングだけを計算する。比較的小さなクラスタの前に比較的大きなクラスタを適用することによって、このアルゴリズムにより、いずれにせよほぼ最適な解が計算される。
【０３７８】
上記の拡張により、１５０個までの演算子を有する実際的なデータフローグラフをクラスタリングすることができる。テストしたケースに対して、上記の帰納的な手法により、最適解に極めて近いないしは等しいクラスタリングが作成された（すなわちわずかに数クラスタだけ多かった）。
【０３７９】
前の議論においてＰＥプログラムにおける演算の数をｎに制限したことに注意されたい。ふつうＰＥプログラムの実行を１バスサイクル以上にもわたって伸ばしたくないため、これは合理的である。しかしながらＰＥがｎ演算よりも多く実行するようにプログラムされ得る場合、スループットに重大な影響を与えない演算は、一層大きなクラスタに結合することができる。こうすることによって、全体的なスループットに影響を与えることなく、所要のＰＥ数をさらに低減することができる。
【０３８０】
４．２  ＰＥコード形成
演算子クラスタリングの後、各クラスタに対するＰＥプログラムコードが形成される。これについてはセクション３に示した例のアセンブラコードを参照されたい。慣用のレジスタ割り当てを簡易にしたものが使用されて、内部的な接続が内部的なレジスタにマッピングされる。命令は、クラスタのデータフローグラフから直接抽出することができる。
【０３８１】
５  結果
５．１  ＰＥの速度および面積
ファンクションフォールディングＰＥの面積は、ポートおよびレジスタの数に依存して、対応する単純なＰＥの面積よりも約１５％〜２５％大きいと見積もられる。１６ビットのデータパスに対し、予備的な統合結果により、１３０ｎｍシリコンプロセスに対して４００〜５００ＭＨｚのＰＥ周波数が達成された。
【０３８２】
評者への注：この論文の最終版に対して期待されるのは、現在進行中のＰＥハードウェア実装からの詳細な分析結果が示されることである。
【０３８３】
５．２  複素ＦＩＲアプリケーションの分析
このセクションではファンクションフォールディングＰＥにおける典型的なＤＳＰアルゴリズム、すなわち複素数に作用するＦＩＲフィルタの実現について説明する。定数Ｃならびに入力ＸおよびＹから出力Ｚ ＝ Ｘ＊Ｃ＋Ｙを計算する１ＦＩＲフィルタセルを考察する。すべての値は複素数である。すなわち（Ｚre，Ｚim）＝（Ｘre＊Ｃre−Ｘim＊Ｃim＋Ｙre，Ｘre＊Ｃim＋Ｘim＊Ｃre＋Ｙim）である。図５１（ａ）には相応するデータフローグラフが示されている。これには８つの演算子が含まれており、点線で囲ったボックスで示したようにｎ ＝ ４のオーバークロッキングファクタに対して３つのクラスタにたたみ込むことができる。図５１（ｂ）には結果的に得られるクラスタデータフローグラフが示されている。すべてのクラスタはＰＥをフルに活用している。すなわち４つのＰＥクロックサイクルをすべて活用しているのである。
【０３８４】
現在のＸＰＰデバイスに基づく実現（ＦＩＲcurr）のシリコン効率と、ファンクションフォールディングＰＥベースの実現（ＦＩＲnew）のシリコン効率とを比較する。上に概略的に述べたようにｎ＝４に対してＦＰＥ＝400 MHzおよびＦｂｕｓ＝100MHzと見積もる。Ｆｂｕｓは現在のアーキテクチャの動作周波数でもある。図５１（ａ）および（ｂ）からわかるように、与えられたＦＩＲセルから構成されるフィルタは、これらの２つの実現に対して容易に完全にパイプライニングすることができる。２つの実現は同じ性能を有するため、これらの実現によって100MHzのレートで出力が形成される。
【０３８５】
ファンクションフォールディングＰＥの面積は、ＡＦＦＰＥ ＝ 1.2×ＡｃｕｒｒＰＥ，すなわち現在のＰＥよりも２０％大きいと見積もられる。これらの２つのフィルタ実現に対する面積比はつぎのようになる。すなわち
【０３８６】
【数１】
2007504688.tif 000262
である。
【０３８７】
この大まかな見積もりによって示されるのは、新しい実現方式の面積効率は、旧い実現方式の面積効率の２倍以上であり、しかもより多くのパイプライニングレジスタを外部バスに必要としない。全体的なシリコン効率は２倍以上である。
【０３８８】
５．３  ベンチマークマッピング結果
【０３８９】
【表７９】
2007504688.tif 000263
【０３９０】
ファンクションフォールディングの一般的な適用可能性を決定するために、セクション４．１で説明したアルゴリズムを、広範囲のアプリケーション領域からの継承された４３個のＸＰＰ構成のベンチマークに適用した。平均クラスタ利用率、すなわち繰り返しのＰＥプログラムによって使用されるＰＥサイクル数を求めた（クラスタ利用率が高いことは、ＰＥプログラムが各バスサイクルで実行できることを保証しないことに注意されたい。１アプリケーションにおける全体的なＰＥ利用率は、入力データの利用可能性およびすべてのＰＥの全体的なスループットにも依存する）。この値は、ファンクションフォールディングの有効性をよく示している。
【０３９１】
表７９に示されているのは、ｎ＝２およびｎ＝４に対し、ポート数を変化させて得られた結果である。内部レジスタの数は、この評価に対してまだ制限されていない。４つの入力および出力データならびにイベントポート（ｎ＝２に対して1.78またｎ＝４に対して3.05）に対する結果が示しているのは、平均的なＸＰＰ構成に対してファンクションフォールディングＰＥ資源を効率的に利用できることである。この表は、６つのデータポートを使用することにより、クラスタ利用率がわずかにしか増大しないことを示している。その一方、使用するデータポートを少なくすると、利用率ははっきりと低下する。ポートの面積要求を詳細に示すハードウェア実現の結果と、クラスタ利用数とを組み合わせて、最良の全体シリコン効率を生じるＰＥパラメタを決定する。
【０３９２】
６  関連する刊行物
セクション１で述べたようにリコンフィギャラブル算術アレイについていくつかのプロジェクトがあるが、知る限りでは刊行物にはファンクションフォールディングに類似した解決手段はない。以下のアーキテクチャは本発明のアプローチとは大きく異なるが、ＰＥによって実行される演算を高速に変更することができる。
【０３９３】
ＲＡＷマイクロプロセッサ[８]にも処理素子のクラスタリングが含まれているが、これらはかなり複雑なプロセッサである。このためこれらのプログラムは、ファンクションフォールディングＰＥプログラムほど簡単に自動生成することはできない。このＲＡＷアーキテクチャは、むしろチップ上のマルチプロセッサに類似している。
【０３９４】
一方ではMorphoSysアーキテクチャ[５]はＳＩＭＤアプローチを追従している。行または列のすべてのＰＥは、（グローバル）プログラムによって制御され、同じ命令を実行する。これによってＰＥは一層単純になるが、ＳＩＭＤ原理により、実行可能で利用可能な計算を大きく制限してしまう。またアレイのプログラムも一層困難である。
【０３９５】
最後にマルチコンテキストデバイス（multi-context device）により、２つ以上の完全なコンフィギュレーションコンテキスト（complete configuraton context）が提供される[９]。このテクニックは、マルチコンテキストＦＰＧＡから採用されたものである。しかしながらここでは頻繁なリコンフィギュレーションができない。それはまずシャドウコンフィギュレーション（shadow configuration）を完全にロードしなければならないからである。コンフィギュレーションは完全に独立している。マルチコンテキストデバイスはコンフィギュレーションレイテンシをある程度隠すが、コースグレインリコンフィギャラブルアーキテクチャの一般的な効率性の問題を克服はしないのである。
【０３９６】
７  結論および今後の作業
ここまでは、強化されたＰＡＣＴ  ＸＰＰアーキテクチャに対するファンクションフォールディング処理素子のアーキテクチャおよび機能を述べて来た。ハードウェアでの実現およびこのアーキテクチャへのアプリケーションのマッピングの両方を事前に分析することによって示されたのは、ファンクションフォールディングが、現在のリコンフィギャラブル算術アレイに比較してシリコン効率を極めて大きく増大させ、また電力消費を低減する可能性を有することである。
【０３９７】
ファンクションフォールディングＰＥを実現し、そのパラメタを分析した今後の作業に含まれるのは、セクション４．１の終わりに述べたスループットに重要でないパスの評価である。ここでは統合化されたクラスタリングならびにプレースおよびルーティングのアルゴリズムが使用されることになる。ＣからファンクションフォールディングＰＥへの直接のコンパイラを開発することも検討されており、これはＮＭＬを介する現在のデザインフローよりも良好にその能力を活用できることと思われる。
【０３９８】
参考文献
[1] R. Hartenstein.  A decade of reconfigurable computing: a visionary retrospective.  In Proc.  Design, Automation and Test in Europe, 2001.
[2] D. C. Cronquist, P. Franklin, C. Fischer, M. Figueroa, and C. Ebeling.  Architecture design of reconfigurable pipelined datapaths.  In Proc.  20th Anniversary Conference on Advanced Research in VLSI, Atlanta, GA, March 1999.
[3] R. Hartenstein, R. Kress, and H. Reinig.  A new FPGA architecture for word-oriented datapaths.  In Proc. Field-Programmable Logic; 4th International Workshop.  Springer-Verlag, September 1994.
[4] V. Baumgarte, G. Ehlers, F. May, A. Nueckel, M. Vorbach, and M. Weinhardt.  PACT XPP a self-reconfigurable data processing architecture.  The Journal of Supercomputing, 26(2), September 2003.
[5] M.-H. Lee, H. Singh, G. Lu, N. Bagherzadeh, and F. J. Kurdahi.  Design and implementation of MorphoSys reconfigurable computing processor.  Journal of VLSI and Signal Processing-Systems for Signal, Image and Video Technology, March 2000. March 2000.
[6] T.  Stansfield.  Using multiplexers for control and data in D-Fabrix.  In Field Programmable Logic and Applications, LNCS 2778, pages 416-425.  Springer, 2003.
[7] T. J. Callahan, P. Chong, A. DeHon, and J. Wawrzynek.  Fast module mapping and placement for datapaths in FPGAs.  In Proc. FPGA'98, Monterrey, CA, 1998.
[8] M. B. Taylor et al.  The Raw microprocessor:  A computational fabric for software circuits and general-purpose programs.  IEEE Micro, March/April 2002.
[9] B. Salefski and L. Caglar.  Re-configurable computing in wireless.  In Proc. 38th Design Automation Conference, Las Vegas, NV, June 2001.
【図面の簡単な説明】
【０３９９】
【図１】ＡＬＵ−ＰＡＥアーキテクチャの概略を示す図である。
【図２】ファンクションフォールディングを示す図である。
【図３】シーケンサモデルを用いたケースを示す図である。
【図４】有限状態機械およびプログラムポインタによるアプローチを示す図である。
【図５】イネーブラおよびアービタによるアプローチを示す図である。
【図６】テスト論理回路およびアービタを示す図である。
【図７】全体回路の概略を示す図である。
【図８】デポピュレーションを示す図である。
【図９】従来技術のＰＡＥインプリメンテーションを示す図である。
【図１０】周知のＰＡＥを示す図である。
【図１１】修正ＰＡＥを示す図である。
【図１２】ダブルＡＬＵ構造をさらに発展させたＡＬＵ‐ＰＡＥを示す図である。
【図１３】レジスタ素子およびスイッチング素子を中央のバス内に配置した図である。
【図１４】レイテンシフリーの隣接コネクションを示す図である。
【図１５】ＭＵＬｔｉｐｌやＢａｒｒｅｌＳｈｉＦＴなどの機能が消去され、ＢＹＰＡＳＳを置換する第２のＡＬＵを示す図である。
【図１６】スーパースカラＦＦ  ＡＬＵ−ＰＡＥの例を示す図である。
【図１７】実行に２クロックサイクルを要するオペコード（例えばＢＳＴＦ）がＭＵＬの他にある場合を例示する図である。
【図１８】データパスアーキテクチャを示す図である。
【図１９】ＡＬＵ−ＰＡＥと隣のＲＡＭ−ＰＡＥとも結合することによってＳＥＱ−ＰＡＥを構成することを示す図である。
【図２０】拡張したＡＬＵ−ＰＡＥを示す図である。
【図２１】ＲＡＭ−ＰＡＥの概略を示す図である。
【図２２】新旧のＰＡＥ構造を比較する図である。
【図２３】バスに配置されるレジスタの代わりにＤＦまたはＢＰ部を使用することを示す図である。
【図２４】メモリを使用してＦＳＭを実装することを示す図である。
【図２５】２４ビット幅のデータバスを有するＸＰＰの実装例である。
【図２６】１６ビット幅のデータバスを有するＸＰＰの実装例である。
【図２７】アドレス発生器およびビット反転アドレッシングを示す図である。
【図２８】パラメタスタック（PStack）アクセスを示す図である。
【図２９】マルチコンフィグモードを示す図である。
【図３０】次コードセグメントの使用を示す図である。
【図３１】パラメタのブロードキャストおよび更新を示す図である。
【図３２】ＡＬＵ／ＲＡＭシーケンサを示す図である。
【図３３】ＡＬＵ／ＲＡＭシーケンサの詳細を示す図である。
【図３４】メモリ配置を示す図である。
【図３５】メモリセグメントの有効性をチェックするメカニズムを示す図である。
【図３６】さらに先進的な有効性チェック方式を示す図である。
【図３７】改良されたルーティングに関連する図である。
【図３８】改良されたルーティングに関連する図である。
【図３９】改良されたルーティングに関連する図である。
【図４０】改良されたルーティングに関連する図である。
【図４１】改良されたルーティングに関連する図である。
【図４２】改良されたルーティングに関連する図である。
【図４３】機能ユニットＦＵを示す図である。
【図４４】マルチグレイン通信リンクを示す図である。
【図４５】信号Data／Ready／PD／ACKを示す図である。
【図４６】図４５の信号のタイミングチャートである。
【図４７】ＸＰＰアレイの簡略化された構造を示す図である。
【図４８】ファンクションフォールディング処理素子の図である。
【図４９】アドレス生成のデータフローグラフである。
【図５０】拡張ＸＰＰのツールフローを示す図である。
【図５１】複素ＦＩＲフィルタセルを示す図である。
【図５２】ＰＥＴＲＩ−ＮＥＴを示す図である。
【図５３】Ｃｙｃｌｅを有するＰＥＴＲＩ−ＮＥＴを示す図である。
【図５４】データが複製されるＰＥＴＲＩ−ＮＥＴを示す図である。
【誤訳訂正２】
【訂正対象書類名】図面
【訂正対象項目名】全図
【訂正方法】変更
【訂正の内容】
【図１】
2007504688.tif 000264
【図２】
2007504688.tif 000265
【図３】
2007504688.tif 000266
【図４】
2007504688.tif 000267
【図５】
2007504688.tif 000268
【図６】
2007504688.tif 000269
【図７】
2007504688.tif 000270
【図８】
2007504688.tif 000271
【図９】
2007504688.tif 000272
【図１０】
2007504688.tif 000273
【図１１】
2007504688.tif 000274
【図１２】
2007504688.tif 000275
【図１３】
2007504688.tif 000276
【図１４】
2007504688.tif 000277
【図１５】
2007504688.tif 000278
【図１６】
2007504688.tif 000279
【図１７】
2007504688.tif 000280
【図１８】
2007504688.tif 000281
【図１９】
2007504688.tif 000282
【図２０】
2007504688.tif 000283
【図２１】
2007504688.tif 000284
【図２２】
2007504688.tif 000285
【図２３】
2007504688.tif 000286
【図２４】
2007504688.tif 000287
【図２５】
2007504688.tif 000288
【図２６】
2007504688.tif 000289
【図２７】
2007504688.tif 000290
【図２８】
2007504688.tif 000291
【図２９】
2007504688.tif 000292
【図３０】
2007504688.tif 000293
【図３１】
2007504688.tif 000294
【図３２】
2007504688.tif 000295
【図３３】
2007504688.tif 000296
【図３４】
2007504688.tif 000297
【図３５】
2007504688.tif 000298
【図３６】
2007504688.tif 000299
【図３７】
2007504688.tif 000300
【図３８】
2007504688.tif 000301
【図３９】
2007504688.tif 000302
【図４０】
2007504688.tif 000303
【図４１】
2007504688.tif 000304
【図４２】
2007504688.tif 000305
【図４３】
2007504688.tif 000306
【図４４】
2007504688.tif 000307
【図４５】
2007504688.tif 000308
【図４６】
2007504688.tif 000309
【図４７】
2007504688.tif 000310
【図４８】
2007504688.tif 000311
【図４９】
2007504688.tif 000312
【図５０】
2007504688.tif 000313
【図５１】
2007504688.tif 000314
【図５２】
2007504688.tif 000315
【図５３】
2007504688.tif 000316
【図５４】
2007504688.tif 000317
【国際調査報告】
2007504688.tif 000318
2007504688.tif 000319
2007504688.tif 000320
2007504688.tif 000321
2007504688.tif 000322
2007504688.tif 000323