(57)【要約】【課題】柔軟性および拡張性があるネットワークを含むチップを提供する。【解決手段】このネットワークは、複数の処理エンジン１０５と、オンチップルータ１１０のマトリックスとを備える。オンチップルータ１１０のそれぞれは、処理エンジン１０５の個別のグループと、そのオンチップルータ１１０に最も近接するオンチップルータ１１０とに通信可能に結合されている。オンチップルータ１１０は、入力ポートと、出力ポートと、出力ポートに対応の出力ポートアービタとを含む。出力ポートアービタは、そのオンチップルータの全ての出力ポートアービタによって共有されるグローバル許可ベクトルglobal_priority_vectorと、その出力ポートアービタに固有のローカル許可ベクトルlocal_priority_vectorとを用いて、入力ポートの１つからのクエリ要求を許可する。【選択図】図４
2015128294.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークを含むチップであって、前記ネットワークは、
複数の処理エンジンと、
オンチップルータのマトリックスであって、前記オンチップルータのそれぞれは、前記処理エンジンの個別のグループと、そのオンチップルータに最も近接する、当該マトリックス内のオンチップルータとに通信可能に結合されており、前記オンチップルータのそれぞれは、入力ポートと、出力ポートと、前記出力ポートそれぞれの出力ポートアービタとを含み、前記出力ポートアービタは、そのオンチップルータの全ての出力ポートアービタによって共有されるグローバル許可ベクトルと、その出力ポートアービタに固有のローカル許可ベクトルとを用いて、前記入力ポートのうちの１つからのクエリ要求を許可する、オンチップルータのマトリックスとを備えた、チップ。
【請求項２】
請求項１に記載のチップにおいて、前記複数の処理エンジンが、前記オンチップルータの前記マトリックスを介して互いに通信を行う、チップ。
【請求項３】
請求項１に記載のチップにおいて、前記ネットワークが、追加の処理エンジンをサポートするように拡張性を有する、チップ。
【請求項４】
請求項３に記載のチップにおいて、前記追加の処理エンジンが、前記複数のオンチップルータに接続される、チップ。
【請求項５】
請求項３に記載のチップにおいて、追加のオンチップルータが前記マトリックスに追加され、前記追加の処理エンジンが前記追加のオンチップルータと結合される、チップ。
【請求項６】
請求項１に記載のチップにおいて、ネットワークの輻輳を低減するためにルータ対ルータのリンクが複数のデータパケットを並行して転送可能なように、２つのオンチップルータを接続するリンクが、オンチップルータと処理エンジンとを接続するリンクよりも複数倍幅広い、チップ。
【請求項７】
請求項１に記載のチップにおいて、前記ネットワークの端に位置するオンチップルータが、前記ネットワークの配線物理レイアウトを簡素化するために前記ネットワーク外の構成要素に接続可能である、チップ。
【請求項８】
請求項１に記載のチップにおいて、前記オンチップルータはソフトウェアによって構成変更可能である、チップ。
【請求項９】
オンチップルータであって、
Ｍ個の入力ポートであって、これらＭ個の入力ポートのそれぞれは、
その入力ポートと接続する上流のオンチップルータまたは処理エンジンから受信した入力データパケットを格納する入力待ち行列、
前記入力待ち行列の先頭のデータパケットの少なくとも１つの所望の出力ポートを特定するルーティングブロック、および、
前記少なくとも１つの所望の出力ポートのそれぞれにクエリ要求を送信してこれら出力ポートのそれぞれから許可を受信し、前記少なくとも１つの所望の出力ポートのそれぞれに前記データパケットを転送する、転送制御ブロックを含む、Ｍ個の入力ポートと、
Ｎ個の出力ポートであって、前記Ｎ個の出力ポートのそれぞれは、少なくとも１つの入力ポートからのその出力ポートへのクエリ要求を収集し、前記クエリ要求のうちの１つを許可する、出力ポートアービタを含む、Ｎ個の出力ポートと、
前記Ｍ個の入力ポートと前記Ｎ個の出力とを接続するクロスバーであって、前記出力ポートアービタの結果によって制御される、クロスバーとを備えた、オンチップルータ。
【請求項１０】
請求項９に記載のオンチップルータにおいて、前記クロスバーは、Ｍ入力マルチプレクサをＮ組含み、Ｍは前記オンチップルータの入力ポートの数であり、Ｎは前記オンチップルータの出力ポートの数である、オンチップルータ。
【請求項１１】
請求項１０に記載のオンチップルータにおいて、各Ｍ入力マルチプレクサは、一般の２入力マルチプレクサのＭ−１個の２分木であり、２入力マルチプレクサの遅延のｌｏｇ２（Ｍ）倍の遅延を有する、オンチップルータ。
【請求項１２】
請求項９に記載のオンチップルータにおいて、前記データパケットは、当該データパケットがユニキャストパケットおよびマルチキャストパケットのうちのいずれであるかを示す制御ビットを含む、オンチップルータ。
【請求項１３】
請求項９に記載のオンチップルータにおいて、さらに、
データパケットの１つまたは複数の所望の出力ポートを特定するための再構成可能ユニキャストルーティングテーブルおよび再構成可能マルチキャストルーティングテーブルを備えた、オンチップルータ。
【請求項１４】
請求項１３に記載のオンチップルータにおいて、前記Ｍ個の入力ポートのそれぞれが、自己のユニキャストルーティングテーブルおよびマルチキャストルーティングテーブルを有する、オンチップルータ。
【請求項１５】
請求項１３に記載のオンチップルータにおいて、前記Ｍ個の入力ポートが、前記ユニキャストルーティングテーブルおよび前記マルチキャストルーティングテーブルを共有する、オンチップルータ。
【請求項１６】
請求項９に記載のオンチップルータにおいて、前記オンチップルータは、入力ポートから出力ポートへマルチキャストデータパケットを転送するための２つの構成変更可能モードのうちの１つを実施する、オンチップルータ。
【請求項１７】
請求項９に記載のオンチップルータにおいて、前記出力ポートアービタは、前記Ｍ個の入力ポートのうちの１つまたは複数からのマルチキャストデータパケットおよびユニキャストデータパケットに関する、その出力ポートへの複数のクエリ要求に対して、１つの許可をアービトレーションする、オンチップルータ。
【請求項１８】
請求項１７に記載のオンチップルータにおいて、前記出力ポートアービタは、
全ての出力ポートアービタによって共有されるglobal_priority_vector変数であって、マルチキャストデータパケット間で許可を割り振るためのglobal_priority_vector変数と、
各出力ポートアービタによって維持されるlocal_priority_vector変数であって、ユニキャストデータパケット間で許可を割り振るためのlocal_priority_vector変数と、
各出力ポートアービタによって維持されるpriority_vector変数であって、前記global_priority_vectorおよび前記local_priority_vectorのうちの１つの値が動的に割り当てられるpriority_vector変数とを使用する、オンチップルータ。
【請求項１９】
請求項１８に記載のオンチップルータにおいて、各出力ポートアービタの前記priority_vector値に対する値の割当てが、転送モードと、当該出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信したかとに依存する、オンチップルータ。
【請求項２０】
請求項１８に記載のオンチップルータにおいて、各出力ポートアービタは、対応する前記priority_vector値に基づいて１つのクエリ要求のみに許可を与える、オンチップルータ。
【請求項２１】
請求項１８に記載のオンチップルータにおいて、共有される前記global_priority_vector変数および全てのlocal_priority_vector変数が、許可される機会を全てのデータパケットが常に有しかつデッドロックが生じないことが保証されるように、許可の結果に基づいて各サイクルの後に更新される、オンチップルータ。
【請求項２２】
オンチップルータで実施される方法であって、
複数の入力ポートのうちの１つに優先順位を与えるように、前記オンチップルータの全てのＮ個の出力ポートアービタによって共有されるglobal_priority_vector変数を初期化することであって、前記global_priority_vector変数は、マルチキャストデータパケット間で許可を割り振るためのものである、初期化することと、
前記Ｎ個の出力ポートアービタによって維持されるＮ個のlocal_priority_vector変数のそれぞれを、前記複数の入力ポートのうちの１つに初期化することであって、前記Ｎ個のlocal_priority_vector変数のそれぞれは、ユニキャストデータパケット間で許可を割り振るためのものである、初期化することと、
転送モードを判断することと、
前記Ｎ個の出力ポートアービタのそれぞれにおける、
クエリ要求がマルチキャストデータパケットからのものであるか否かを判断することと、
前記転送モードが第１のモードであるという判断または前記クエリ要求がマルチキャストデータパケットからのものでないという判断に基づいて、priority_vectorの値を前記local_priority_vectorの値に設定することと、
前記転送モードが第２のモードであるという判断および前記クエリ要求がマルチキャストデータパケットからのものであるという判断に基づいて、priority_vectorの値を前記global_priority_vectorの値に設定することと、
対応する出力ポートが利用可能であると、前記priority_vectorに基づき入力ポートに許可を送信することと、
前記global_priority_vector変数および前記Ｎ個のlocal_priority_vector変数を更新することとを備えた、方法。
【請求項２３】
請求項２２に記載の方法において、前記転送モードが前記第１のモードであるか、または許可を受けようとする入力ポートがない場合に、前記global_priority_vector変数は更新されない、方法。
【請求項２４】
請求項２２に記載の方法において、前記転送モードが前記第２のモードであり、かつ許可を受けようとする少なくとも１つの入力ポートがある場合に、前記global_priority_vector変数は、次に高い優先順位を有する入力ポートに更新される、方法。
【請求項２５】
請求項２２に記載の方法において、前記対応する出力ポートアービタがマルチキャストデータパケットからの少なくとも１つのクエリ要求を受信するか、または許可が送信されない場合には、local_priority_vector変数が更新されない、方法。
【請求項２６】
請求項２２に記載の方法において、前記対応する出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信せず、かつ許可が送信される場合には、local_priority_vector変数が更新される、方法。
【請求項２７】
請求項２２に記載の方法において、前記第１のモードは、入力ポートが全ての所望の出力ポートから通知を受け取っていない場合でも、許可を受信するとコピーを送信し、前記第２のモードは、全ての所望の出力ポートから全ての許可を受信するまで待機してから、前記所望の出力ポートの全てにコピーを同時に送信する、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、単一チップ上の複数の処理エンジン（プロセスエンジン）間におけるデータパケットの転送に関し、より詳細には、複数の処理エンジンを相互接続するオンチップルータのマトリックス、およびこれを用いるルーティング方法に関する。
【背景技術】
【０００２】
トランジスタのサイズが小さくなるにつれ、より多くの計算素子、メモリ、および処理エンジンが単一チップに集積され得る。このような高度な集積により、より多くのシステムタスクを並行して処理することができ、その結果、より高度なシステム性能が達成できる。
【０００３】
これらの計算素子、メモリ、および処理エンジンは、それらの間でデータを転送するための通信ファブリックを必要とする。処理エンジンの数が増すにつれ、バスおよびリングアーキテクチャなどの相互接続技術は、もはや拡張性がなく、これらのエンジンのための十分な通信帯域幅を提供できない。
【０００４】
オンチップネットワークは、単一チップ上にある多数の処理エンジンのための相互接続技術である。ネットワークは、各オンチップルータがネットワーク内の最隣接の１つまたは複数のオンチップルータに接続する複数のオンチップルータを含む。各処理エンジンはオンチップルータのうちの１つに接続され、１つのオンチップルータは複数の処理エンジンに接続できる。処理エンジン間で通信されるデータはオンチップルータのネットワークを介して転送される。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、従来技術のオンチップルータには課題がある。例えば、従来技術のオンチップルータは、固定のルーティングアルゴリズムを有する。したがって、従来技術のオンチップルータは、処理エンジンのアドレスが変わったり、ネットワークからより多くの処理エンジンが追加または削除されたりすると、動作を停止する。さらに、これら従来技術のオンチップルータは、処理エンジン間のユニキャストデータパケットと、固定のアービトレーション方式しかサポートしない。
【課題を解決するための手段】
【０００６】
単一チップ上の複数の処理エンジンのための相互接続方式は拡張性があり、複数の処理エンジンを接続するための構成変更可能ルータのオンチップネットワークを含む。このネットワークは、柔軟性があり、ネットワークを利用するチップ上で動作するアプリケーションによって必要とされる、より多くのまたはより少ない処理エンジンを接続するように拡張性がある。オンチップルータは、ネットワークトポロジや処理エンジンのアドレスの変更に適合するように再構成可能である。処理エンジン間で通信されるデータパケットは、ユニキャストルーティング方式およびマルチキャストルーティング方式の両方をサポートできるフォーマットで定義される。各オンチップルータは、公平でデッドロックのないアービトレーション方式を使用して、テーブルに基づいたユニキャストデータパケットおよびマルチキャストデータパケットの両方をサポートする。この公平でデッドロックのないアービトレーション方式により、オンチップルータは、入力データパケットをその出力ポートに、公平かつデッドロックなしに確実に正しく送出することが可能になる。マルチキャストデータパケットについては、各オンチップルータは、データパケットを正しい所望の出力ポートに転送するための２つの再構成可能モードを提供する。１つのモードは、ある入力ポートが全ての所望の出力ポートから通知を受け取っていない場合でも、許可を受信すると直ちにコピーを送信するものであり、もう１つのモードは、全ての所望の出力ポートから全ての許可を受信するまで待機してから、所望の出力ポートの全てにコピーを同時に送信するものである。各オンチップルータのルーティングテーブルは、ソフトウェアによりプログラム可能である。
【０００７】
一構成では、チップが提供される。前記チップはネットワークを含む。前記ネットワークは、典型的には複数の処理エンジンと、複数のオンチップルータのマトリックスとを含む。前記オンチップルータのそれぞれは、前記処理エンジンの個別のグループと、最も近接する、当該マトリックス内のオンチップルータとに通信可能に結合されている。前記複数の処理エンジンは、前記オンチップルータのマトリックスを介して互いに通信を行う。いくつかの実施形態では、オンチップルータはソフトウェアによって構成変更可能である。
【０００８】
前記オンチップルータのそれぞれは、複数の入力ポートと、複数の出力ポートと、これら出力ポートそれぞれの出力ポートアービタとを含む。前記出力ポートアービタは、そのオンチップルータの全ての出力ポートアービタによって共有されるグローバル許可ベクトルと、その出力ポートアービタに固有のローカル許可ベクトルとを用いて、前記複数の入力ポートのうちの１つからのクエリ要求（問合せ要求）を許可する。
【０００９】
いくつかの実施形態では、前記ネットワークは追加の処理エンジンをサポートするように拡張性を有する。例えば、前記追加の処理エンジンは複数のオンチップルータと結合され得る。他の例では、追加のオンチップルータが前記マトリックスに追加され得、前記追加の処理エンジンは前記追加のオンチップルータと結合される。
【００１０】
いくつかの実施形態では、ネットワークの輻輳を低減するためにルータ対ルータのリンクが複数のデータパケットを並行して転送可能なように、２つのオンチップルータを接続するリンクは、オンチップルータと処理エンジンとを接続するリンクよりも、複数倍幅広い。
【００１１】
いくつかの実施形態では、前記ネットワークの端に位置するオンチップルータは、前記ネットワークの配線物理レイアウトを簡素化するために前記ネットワークの外側の構成要素に接続可能である。
【００１２】
他の構成において、オンチップルータが提供される。前記オンチップルータは、Ｍ個の入力ポートと、Ｎ個の出力ポートと、前記Ｍ個の入力ポートと前記Ｎ個の出力ポートとを接続するクロスバーとを含む。
【００１３】
前記Ｍ個の入力ポートのそれぞれは、典型的には、その入力ポートと接続する上流オンチップルータまたは処理エンジンから受信した入力データパケットを格納するための入力待ち行列と、前記入力待ち行列の先頭のデータパケットの少なくとも１つの所望の出力ポートを特定するルーティングブロックと、前記少なくとも１つの所望の出力ポートのそれぞれに対してクエリ要求を送信してこれら出力ポートのそれぞれから許可を受信し、前記少なくとも１つの所望の出力ポートのそれぞれに前記データパケットを転送する転送制御ブロックとを含む。
【００１４】
前記Ｎ個の出力ポートのそれぞれは、少なくとも１つの入力ポートからのその出力ポートへのクエリ要求を収集し、前記クエリ要求のうちの１つを許可する、出力ポートアービタを含む。
【００１５】
前記クロスバーは、前記出力ポートアービタの結果によって制御される。いくつかの実施形態では、前記クロスバーは、Ｍ入力マルチプレクサをＮ組含む。Ｍは前記オンチップルータの入力ポートの数であり、Ｎは前記オンチップルータの出力ポートの数である。各Ｍ入力マルチプレクサは、一般の２入力マルチプレクサのＭ−１個の２分木であり、２入力マルチプレクサの遅延のｌｏｇ２（Ｍ）倍の遅延を有する。
【００１６】
いくつかの実施形態では、前記データパケットは、当該データパケットがユニキャストパケットおよびマルチキャストパケットのうちのいずれであるかを示す制御ビットを含む。
【００１７】
いくつかの実施形態では、前記オンチップルータは、さらに、データパケットの１つまたは複数の所望の出力ポートを特定するための再構成可能ユニキャストルーティングテーブルおよび再構成可能マルチキャストルーティングテーブルを含む。前記Ｍ個の入力ポートのそれぞれは、自己のユニキャストルーティングテーブルおよびマルチキャストルーティングテーブルを有する。あるいは、前記Ｍ個の入力ポートは、前記ルーティングテーブルを共有する。
【００１８】
いくつかの実施形態では、前記オンチップルータは、入力ポートから出力ポートへマルチキャストデータパケットを転送するための２つの構成変更可能モードのうちの１つを実施する。
【００１９】
前記出力ポートアービタは、前記Ｍ個の入力ポートのうちの１つまたは複数からのマルチキャストデータパケットおよびユニキャストデータパケットに関する、その出力ポートへの複数のクエリ要求に対して、１つの許可をアービトレーションする。いくつかの実施形態では、前記出力ポートアービタは、全ての出力ポートアービタによって共有されるglobal_priority_vector変数（グローバル優先順位ベクトル変数）と、各出力ポートアービタによって維持されるlocal_priority_vector変数（ローカル優先順位ベクトル変数）と、各出力ポートアービタによって維持されるpriority_vector変数（優先順位変数）とを使用する。前記global_priority_vector変数は、マルチキャストデータパケット間で許可を割り振るためのものである。前記local_priority_vector変数は、ユニキャストデータパケット間で許可を割り振るためのものである。前記priority_vector変数には、前記global_priority_vectorおよび local_priority_vectorのうちの１つの値が動的に割り当てられる。
【００２０】
いくつかの実施形態では、出力ポートアービタの前記priority_vector値に対する値の割当ては、転送モードと、当該出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信したかとに依存する。各出力ポートアービタは、対応する前記priority_vector値に基づいて１つのクエリ要求のみに許可を与える。
【００２１】
いくつかの実施形態では、共有される前記global_priority_vector変数および全てのlocal_priority_vector変数は、許可される機会を全てのデータパケットが常に有しかつデッドロックが生じないことが保証されるように、許可の結果に基づいて各サイクルの後に更新される。
【００２２】
さらに他の構成において、オンチップルータで実施される方法が提供される。複数の入力ポートのうちの１つに優先順位を与えるように、前記オンチップルータの全てのＮ個の出力ポートアービタによって共有されるglobal_priority_vector変数が初期化される。前記global_priority_vector変数は、典型的には、マルチキャストデータパケット間で許可を割り振るためのものである。前記Ｎ個の出力ポートアービタによって維持されるＮ個のlocal_priority_vector変数のそれぞれが、前記複数の入力ポートのうちの１つに初期化される。前記Ｎ個のlocal_priority_vector変数のそれぞれは、典型的には、ユニキャストデータパケット間で許可を割り振るためのものである。次いで、転送モードが判断される。いくつかの実施形態では、前記転送モードはソフトウェアによって再構成可能である。
【００２３】
前記Ｎ個の出力ポートアービタのそれぞれにおいて、クエリ要求がマルチキャストデータパケットからのものであるか否かが判断される。前記転送モードが第１のモードであるという判断または前記クエリ要求がマルチキャストデータパケットからのものでないという判断に基づいて、priority_vectorの値が前記local_priority_vectorの値に設定される。前記転送モードが第２のモードであるという判断および前記クエリ要求がマルチキャストデータパケットからのものであるという判断に基づいて、priority_vectorの値が前記global_priority_vectorの値に設定される。対応する出力ポートが利用可能であると、前記priority_vectorに基づき許可が入力ポートに送信される。
【００２４】
その後、前記global_priority_vector変数および前記Ｎ個のlocal_priority_vector変数が更新される。
【００２５】
いくつかの実施形態では、前記転送モードが前記第１のモードであるか、または許可を受けようとする入力ポートがない場合に、前記global_priority_vector変数は更新されない。その代わり、前記転送モードが前記第２のモードであり、かつ許可を受けようとする少なくとも１つの入力ポートがある場合に、前記global_priority_vector変数は、次に最も高い優先順位を有する入力ポートに更新される。
【００２６】
いくつかの実施形態では、前記対応する出力ポートアービタがマルチキャストデータパケットからの少なくとも１つのクエリ要求を受信するか、または許可が送信されない場合には、local_priority_vector変数が更新されない。その代わり、前記対応する出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信せず、かつ許可が送信される場合には、local_priority_vector変数が更新される。
【００２７】
いくつかの実施形態では、前記第１のモードは、入力ポートが全ての所望の出力ポートから通知を受け取っていない場合でも、許可を受信するとコピーを送信し、前記第２のモードは、全ての所望の出力ポートから全ての許可を受信するまで待機してから、前記所望の出力ポートの全てにコピーを同時に送信する。
【図面の簡単な説明】
【００２８】
【図１】本発明の一実施形態による、単一チップにおいて複数の処理エンジン（ＰＥ）を接続する構成変更可能オンチップルータの拡張性可能ネットワークのブロック図である。
【図２】本発明の一実施形態によるオンチップルータの各入力ポートにおけるデータパケットの処理の方法を示す図である。
【図３】本発明の一実施形態によるオンチップルータの各出力ポートにおけるデータパケットの処理の方法を示す図である。
【図４】本発明の一実施形態によるオンチップルータのブロック図である。
【図５】本発明の一実施形態によるデータパケットのフォーマットである。
【図６Ａ】本発明の一実施形態によるオンチップルータにおける例示的な構成変更可能ユニキャストルーティングテーブルである。
【図６Ｂ】本発明の一実施形態によるオンチップルータにおける例示的な構成変更可能マルチキャストルーティングテーブルである。
【図７】本発明の一実施形態によるオンチップルータの各入力ポートにおけるデータパケット転送制御の方法を示す図である。
【図８】本発明の一実施形態によるオンチップルータの各出力ポートにおけるアービトレーション方法を示す図である。
【図９】本発明の一実施形態による使用例を例示的に示す図である。
【図１０】本発明の一実施形態によるオンチップルータにおけるクロスバーの模式図である。
【発明を実施するための形態】
【００２９】
上記は、以下の本発明の例示的な実施形態のさらに具体的な説明から明らかになるであろう。添付図面において、異なる図全体にわたり、同様の部分は同様の参照符号で示す。図面は必ずしも原寸に比例しておらず、本発明の実施形態の説明に重点が置かれている。
【００３０】
以下の説明では、説明の目的で様々な詳細を述べる。しかし、当業者ならば、これらの特定の詳細事項を用いずとも本発明を実施できることを理解するであろう。よって、本発明は、示される実施形態に限定されることを意図するのではなく、本明細書で説明される原理および特徴に合致する最も広い範囲に従うものである。
【００３１】
単一チップ上の複数の処理エンジンのための拡張性可能相互接続方式は、拡張性があり、複数の処理エンジンを接続する構成変更可能ルータのオンチップネットワークを含む。このネットワークは、柔軟性があり、ネットワークを利用するチップ上で動作するアプリケーションからの要求に応じて、より多くまたはより少ない処理エンジンを接続するという拡張性がある。オンチップルータは、ネットワークトポロジや処理エンジンのアドレスの変更に適合するように再構成可能である。処理エンジン間で通信されるデータパケットは、ユニキャストルーティング方式およびマルチキャストルーティング方式の両方をサポートできるフォーマットで定義される。各オンチップルータは、公平でデッドロックのないアービトレーション方式を使用して、テーブルに基づいたユニキャストデータパケットおよびマルチキャストデータパケットの両方をサポートする。この公平でデッドロックのないアービトレーション方式により、オンチップルータは、入力データパケットをその出力ポートに、公平かつデッドロックなしに確実に正しく送出することが可能になる。マルチキャストデータパケットについて、オンチップルータは、データパケットを正しい所望の出力ポートに転送するための２つの再構成可能モードを設ける。１つのモードは、ある入力ポートが全ての所望の出力ポートから通知を受け取っていない場合でも、１つの許可を受信すると直ちにコピーを送信するものであり、もう１つのモードは、全ての所望の出力ポートから全ての許可を受信するまで待機してから、所望の出力ポートの全てにコピーを同時に送信するものである。オンチップルータのルーティングテーブルは、ソフトウェアによりプログラム可能である。
【００３２】
図１は、本発明の実施形態による単一チップにおいて複数の処理エンジン（ＰＥ）１０５を接続する、構成変更可能オンチップルータ１１０の拡張性可能ネットワーク１００のブロック図である。図１において、各オンチップルータ１１０は４つのＰＥ１０５と接続されているが、オンチップルータの領域の割当可能量のようなアプリケーション要件に応じて、１つのオンチップルータが、より多いまたはより少ないＰＥと接続できる。各オンチップルータ１１０はまた、他のオンチップルータ１１０と接続されて、ネットワーク１００を形成する。図１は、４つの最隣接のオンチップルータ１１０に接続して２Ｄメッシュのネットワークを形成する各オンチップルータ１１０を図示しているが、１つのオンチップルータ１１０に接続された最隣接のオンチップルータの数は、異なるネットワークトポロジをサポートするために異なっていてもよい。例えば、２Ｄメッシュのネットワークは、３Ｄシリコン貫通バイアに基づくＩＣ技術において、中間層の各オンチップルータを最上層および／または最下層の最も近接するルータと接続することによって、３Ｄメッシュのネットワークにアップグレードできる。
【００３３】
このネットワークは、柔軟性があり、処理エンジンの数が変更可能なように拡張容易である。チップで多数の処理エンジンをサポートするために、各オンチップルータは、より多くの処理エンジンに接続されることができ、追加のオンチップルータがネットワークに追加されることができ、またはその両方が可能である。
【００３４】
ルータ対ルータリンクにおけるネットワーク内のデータ輻輳を低減するために、ルータ対ルータリンクはルータ対ＰＥリンクよりも幅広くてもよい。図１に示すように、ルータ対ルータリンクは、各ルータ対ルータリンクが４つのデータパケットを並行して搬送できるように、ルータ対ＰＥリンクより４倍幅広い。あるいは、幅広いリンクを使用する代わりに、各ルータ対ルータリンクは、各レーンが独立した複数の並行レーンであってもよい。この代替案は、複数の車が同時に走行できるようにした、道路の複数レーンと同様である。
【００３５】
ネットワーク１００内の処理エンジン１０５は、図１に示すように、ネットワーク１００の端に位置するオンチップルータ１１０の入力ポートおよび出力ポートを介してネットワーク１００外の他のエンジン／ブロックと通信可能である。この構成により、チップにおけるネットワークのための配線物理レイアウトが容易になる。
【００３６】
各オンチップルータ１１０は、入力ポートから入力データパケットを受信し、これらのデータパケットを正しい出力ポートに転送する。オンチップルータ１１０における決定性ルーティングアルゴリズムを使用するのではなく、ネットワーク１００内の各オンチップルータ１１０は、構成変更可能ルーティングテーブルを備える。この構成変更可能ルーティングテーブルは、ネットワークトポロジもしくはアドレス変更に適合するように、デッドロックを回避するように、および／または出力ポートにおける回線争奪を低減するように、ソフトウェアによって再プログラム可能であってもよい。
【００３７】
図２は、本発明の実施形態によるオンチップルータの各入力ポートにおけるデータパケットを処理する方法２００を示す。方法２００は、ステップ２０５から開始する。入力ポートは、入力データパケットを受信するまで待機する。入力データパケットは、ローカルＰＥまたはこの入力ポートと接続する上流オンチップルータから到着し得る。ステップ２０５において、入力データパケットは入力ポートの入力待ち行列に格納される。いくつかの実施形態では、入力待ち行列はＦＩＦＯ待ち行列である。入力待ち行列が満杯の場合、データパケットのソース（すなわち、当該ＰＥまたは上流オンチップルータのいずれか）には、新たなデータパケットの送信を停止するよう通知される。
【００３８】
入力待ち行列が空でなければ、ステップ２１０において、入力待ち行列の先頭にあるデータパケットが、転送のために処理される。ステップ２１５において、このデータパケットは、それがマルチキャストデータパケットであるかユニキャストデータパケットであるかについて、検査される。データパケットの種類（すなわち、マルチキャストまたはユニキャスト）に従って、入力ポートは対応するマルチキャストまたはユニキャストテーブルを探索して、どの出力ポート（１つまたは複数の出力ポート）に当該データパケットを送信すべきかを探し出す。データパケットがマルチキャストデータパケットである場合、ステップ２２０ａにおいて、マルチキャストルーティングテーブルを使用してマルチキャストルーティング探索が行われる。あるいは、データパケットがユニキャストデータパケットである場合、ステップ２２０ｂにおいて、ユニキャストルーティングテーブルを使用してユニキャストルーティング探索が行われる。マルチキャストルーティングおよびユニキャストルーティングを以下に詳述する。
【００３９】
入力ポートがデータパケットの所望の出力ポートリストを把握すると、ステップ２２５において、クエリ要求がリスト内の所望の出力ポート（１つまたは複数の出力ポート）に送信されて、当該出力ポートがそのデータパケットを受け入れ可能か否かが検査される、
【００４０】
入力ポートは、出力ポート（１つまたは複数の出力ポート）から許可（１つまたは複数の許可）を受信するまで待機してから、ステップ２３５において、データパケットのコピー（１つまたは複数のコピー）を当該出力ポート（１つまたは複数の出力ポート）に転送する処理を行う。ステップ２３０において、許可（１つまたは複数の許可）が出力ポート（１つまたは複数の出力ポート）から受信される。ステップ２３５において、データパケットのコピー（１つまたは複数のコピー）が当該出力ポート（１つまたは複数の出力ポート）に送信または転送される。他で述べるように、いくつかの実施形態では、マルチキャストデータパケットを転送するために２つのモードがある。ステップ２３５の後、方法２００はステップ２０５に戻る。
【００４１】
図３は、本発明の実施形態によるオンチップルータの各出力ポートにおけるデータパケットの処理の方法３００を示す。方法３００は、ステップ３０５から開始する。出力ポートは、入力ポートからクエリ要求を受信するまで待機する。
【００４２】
出力ポートは、当該出力ポートにデータパケットを送信しようとする異なる入力ポートから複数のクエリ要求を受信できるので、各出力ポートは、これらのクエリ要求の許可を処理する出力ポートアービタを備える。ステップ３１０において、複数のクエリ要求が当該（同一の）出力ポートで受信されると、アービトレーションが行われる。アービトレーションは、好ましくは、公平に（例えば、要求が現在のサイクルで許可されると、次のサイクルでは最低の優先順位になるように、各クエリ要求に対する優先順位が各サイクルで更新される。）かつデッドロックなしに（例えば、各サイクルにおいて、複数の要求を出している入力ポートのうち、許可されて転送が行われる１つの入力ポートが常にある）行われる。
【００４３】
ステップ３１５において、当該出力ポートにクエリ要求を送信した入力ポートのうちの１つに、許可が与えられ、つまり許可が送信される。
【００４４】
ステップ３２０において、対応する入力ポートつまり許可された入力ポートがデータパケットを正しい出力ポート（１つまたは複数の出力ポート）に送信できるようにクロスバーがセットアップされる。ステップ３２０の後、方法３００はステップ３０５に戻る。
【００４５】
図４は、本発明の実施形態によるオンチップルータ４００のブロック図を示す。図１で述べたオンチップルータは、オンチップルータ４００と同様に構成される。オンチップルータ４００は、Ｍ個の入力ポートとＮ個の出力ポートとを有し、ＭおよびＮは、ネットワークトポロジに依存する。各入力ポートは、当該入力ポートへの入力データパケットを格納する入力待ち行列（入力キュー）４０５を有する。ルーティングブロック４１０において、入力ポートは、入力待ち行列の先頭にあるデータパケットがマルチキャストであるかユニキャストであるかを、データパケット内の「宛先エンジンＩＤ」フィールドに基づいて検査し、次いで、オンチップルータ内の再構成可能ルーティングテーブルから当該データパケットの所望の出力ポートを探索する。
【００４６】
転送制御ブロック４１５が、所望の出力ポートにクエリ要求を送信し、所望の出力ポートから許可を受信し、次いで、データパケットのコピー（マルチキャストの場合）および許可された出力ポート（１つまたは複数の出力ポート）への転送を行う。Ｎ個の出力ポートアービタ４２０が存在し、Ｎ個の出力ポートのそれぞれにつき、出力ポートアービタ４２０が１つずつ存在する。各出力ポートアービタ４２０は、その対応する出力ポートへの全てのクエリ要求について、アービトレーションを行う。これらの出力ポートアービタからの許可信号は、データパケットを入力ポートからそれら正しい出力ポートへ転送するためのクロスバー４２５をセットアップするのに使用される。クロスバー４２５は、オンチップルータの入力ポートおよび出力ポートの数に対応するＭ個の入力ポートおよびＮ個の出力ポートを有する。転送制御ブロック４１５、出力ポートアービタ４２０、およびクロスバー４２５のそれぞれを、以下にさらに詳述する。
【００４７】
図５は、本発明の実施形態によるデータパケット５００のフォーマットを示す。データパケット５００はデータ部５０５を含み、データ部５０５は送信エンジンと受信エンジンとの間を転送される。データパケット５００はまた、ヘッダー部５１０を含み、ヘッダー部５１０は、ネットワーク内でデータパケット５００をルーティングするのに使用される制御ビット５１５ａ、５１５ｂ（まとめて５１５と称する）を含む。ヘッダー部５１０において、「宛先エンジンＩＤ」フィールドがオンチップルータによって検査される。「宛先エンジンＩＤ」フィールドはｎビットを有すると仮定する。いくつかの実施形態では、最上位ビット（すなわち、ｎビットにおける位置ｎ−１のビット）での「０」は、データパケットがユニキャストであることを示し、最上位ビットでの「１」は、データパケットがマルチキャストであることを示す。
【００４８】
ユニキャストデータパケットの場合、「宛先エンジンＩＤ」フィールドのｎ−１個の最下位ビットの値が、このデータパケットの宛先エンジンのアドレスを示す。ｎ−１個の最下位ビットの値は「ユニキャスト宛先エンジンアドレス」として知られ、図５では「ＵＣ宛先アドレス」と示されている。「ユニキャスト宛先エンジンアドレス」を使用して、入力ポートが、そのユニキャストルーティングテーブルを探索し、このデータパケットがどの出力ポートを所望しているかを探し出す。
【００４９】
マルチキャストデータパケットの場合、「宛先エンジンＩＤ」フィールドのｎ−１個の最下位ビットの値が、このデータパケットのマルチキャストグループの識別を示す。ｎ−１個の最下位ビットの値は、「マルチキャストグループＩＤ」として知られ、図５では「ＭＣ（マルチキャスト）グループＩＤ」と示されている。「マルチキャストグループＩＤ」を使用して、入力ポートが、そのマルチキャストルーティングテーブルを探索し、このデータパケットがどの出力ポートを所望しているかを探し出す。
【００５０】
図６Ａは、本発明の実施形態によるオンチップルータにおける例示的な構成変更可能ユニキャストルーティングテーブル６００を示す。図６Ａに示す例では、「ＵＣ宛先アドレス」は５ビット幅であり、値は０から３１の範囲である。ルーティングテーブル６００は、各ユニキャスト宛先アドレスのための所望の出力ポートＩＤを一覧表示している。１つのオンチップルータが８つの出力ポートを有すると仮定する。図６Ａに示すように、ユニキャスト宛先アドレス０を有するデータパケットは出力ポート３に行き、ユニキャスト宛先アドレス１を有するデータパケットは出力ポート０に行く、などとなっている。
【００５１】
図６Ｂは、本発明の実施形態によるオンチップルータにおける例示的な構成変更可能マルチキャストルーティングテーブル６５０を示す。図６Ｂに示す例では、「ＭＣグループＩＤ」は５ビット幅であり、値は０から３１の範囲である。ルーティングテーブル６５０は、各マルチキャストグループＩＤのための所望の出力ポートマスクを一覧表示している。出力ポートマスクは８ビットベクトルであり、各ビットは出力ポートを提示する。データパケットは、コピーされ、マルチキャストグループＩＤに対する出力ポートマスクに設定されたビットに対応する全ての出力ポートに送信される。１つのオンチップルータが８つの出力ポートを有すると仮定する。図６Ｂに示すように、マルチキャストグループＩＤ０を有するデータパケットは、コピーされて、出力ポート３および５（出力ポートマスクが００１０１０００であるから）に送信され、マルチキャストグループＩＤ１を有するデータパケットは、コピーされて、出力ポート０、１、２、および３（出力ポートマスクが００００１１１１であるから）に送信される、などとなっている。
【００５２】
マルチキャストルーティングでは、典型的には、複数ビットが、各マルチキャストグループＩＤに対する出力ポートマスクにおいて設定される。しかし、出力ポートマスクに１ビットのみが設定され得ることも可能である。この場合、そのようなマルチキャストデータパケットは、ユニキャストデータパケットと同様に処理される。換言すれば、このユニキャストルーティングは、マルチキャストルーティングの特別な場合である。
【００５３】
全てのルーティングテーブル６００、６５０はソフトウェアにより再構成可能である。各入力ポートは、自己のユニキャストルーティングテーブルおよびマルチキャストルーティングテーブルを有することができる。あるいは、全ての入力ポートが、単一のユニキャストテーブルおよび／または単一のマルチキャストテーブルを共有できる。しかし、専用のルーティングテーブルはより高い柔軟性を提供するが、専用のルーティングテーブルはより大きいシリコン領域を有することを理解されたい。同様に、共有ルーティングテーブルの場合、必要とするシリコン領域はより小さくなるが、共有ルーティングテーブルでは柔軟性が制限されることを理解されたい。
【００５４】
図７は、本発明の実施形態によるオンチップルータの入力ポートにおけるデータパケット転送制御の方法７００を示す。いくつかの実施形態において、方法７００は、図４の転送制御４１５によって実施される。方法７００は、ステップ７０５から開始する。ステップ７０５において、新たなデータパケットの所望の出力ポートリストがルーティングブロックから受信される。
【００５５】
入力ポートが新たなデータパケットの所望の出力ポート（１つまたは複数の出力ポート）を把握すると、ステップ７１０において、クエリ要求が当該所望の出力ポート（１つまたは複数の出力ポート）に送信される。
【００５６】
ステップ７１５において、許可（１つまたは複数の許可）が出力ポート（１つまたは複数の出力ポート）の出力ポートアービタ（１つまたは複数のアービタ）から受信される。入力ポートは、典型的には、許可（１つまたは複数の許可）を受信するまで待機してから、当該データパケットを出力ポート（１つまたは複数の出力ポート）に転送する。ユニキャストデータパケットの場合、所望の出力ポートが１つしかない。したがって、許可を受信した後、データパケットは当該出力ポートに送信されることになる。マルチキャストデータパケットの場合、典型的には複数の所望の出力ポートがある。したがって、入力ポートは、複数のクエリ要求を、所望の出力ポートのそれぞれに１つずつ送信するであろう。出力ポートから受信された各許可に対して、データパケットがコピーされ、当該出力ポートに送信される。いくつかの実施形態では、２つの転送モードが提供される。モード選択は、cfg_forward_modeというレジスタを設定することにより、ソフトウェアによって構成変更可能である。
【００５７】
●cfg_forward_modeが０に設定されると、ある出力ポートから許可を受信すると、当該入力ポートが他の所望の出力ポート（１つまたは複数の出力ポート）から通知を受け取っていない場合でも、データパケットのコピーが送信される。当該入力ポートは、次のサイクルで残りの所望の出力ポート（１つまたは複数の出力ポート）にクエリ要求を再送信する。この処理は、マルチキャストデータパケットのコピーが全ての所望の出力ポートに転送されるまで繰り返される。
【００５８】
●cfg_forward_modeが１に設定されると、当該入力ポートは、全ての所望の出力ポートから全ての許可を受信するまで待機してから、当該所望の出力ポートの全てにマルチキャストデータパケットのコピーを同時に送信する。
【００５９】
cfg_forward_modeレジスタは、スループットは重要であるがデータパケットの受信される順番は重要ではないアプリケーションにおいて０に設定され得る。そのような場合にはデータパケット送達の順番は保証され得ないことに留意されたい。なぜならばデータパケットは、許可が入力ポートで受信されるや否や送信されるからである。
【００６０】
しかし、いくつかのアプリケーションでは、処理のための正しいデータパケットをＰＥが確実に受信できるようにするために、データパケットがＰＥで受信される順番が重要である。入力ポートが出力ポートから許可を受信するや否やデータパケットが送信される場合、１つのＰＥがデータパケットを受信する順番が狂ってしまうことがあり得る。したがって、データパケットが送信される順番が重要な場合には、cfg_forward_modeレジスタを１に設定することができる。そのような場合には、入力ポートは全ての出力ポートから全ての許可を受信するまで待機してから、データパケットのコピーを同時に送信して、送達順番を保証する。２つ以上の競合するアクションがそれぞれ自分の番を待っている（例えば、２つの入力ポートがそれぞれ全ての許可の受信を待っている）場合、デッドロックが結果として生じる。しかし、下記に詳述するように、各オンチップルータによって実施されるアービトレーション方式により、デッドロックを有利に回避することができる。端的にいうと、オンチップルータの複数の出力ポートが協働して単一の入力ポートに許可を同時に送信し、それによって、当該入力ポートが全ての許可を１サイクルで得て処理を進められるようにする。
【００６１】
図７に戻って、ステップ７２０において、cfg_forward_modeが０に設定されているか否かが判断される。ステップ７２０においてcfg_forward_modeが１に設定されていると判断されると、ステップ７２５において、全ての許可が全ての所望の出力ポートから受信されているか否かが判断される。全ての許可が全ての所望の出力ポートから受信されていない場合、処理７００はステップ７１０に戻る。そうでない場合は、ステップ７３０において、データパケットのコピーが全ての所望の出力ポートに送信される。ステップ７３０の後、処理７００はステップ７０５に戻る。
【００６２】
ステップ７２０において、cfg_forward_modeが０に設定されていると判断された場合、ステップ７３５において、データパケットのコピー（１つまたは複数のコピー）が、許可された出力ポート（１つまたは複数の出力ポート）に、これらの出力ポート（１つまたは複数の出力ポート）から許可（１つまたは複数の許可）が受信されると直ちに送信される。
【００６３】
ステップ７４０において、所望の出力ポートリストが更新される。ステップ７４５において所望の出力ポートリストが空であると判断されると、処理７００はステップ７０５に戻る。そうでない場合、処理はステップ７１０に戻り、クエリ要求が（残りの）所望の出力ポートに送信される。
【００６４】
上述のとおり、ユニキャストルーティングは、実際に、１つのデータパケットにつき１つの所望の出力ポートしかない、マルチキャストルーティングの特別な場合である。したがって、図７に記載のデータパケット転送方法は、ユニキャストデータパケットとマルチキャストデータパケットの両方をサポートする。
【００６５】
図８は、本発明の実施形態によるオンチップルータの各出力ポートにおけるアービトレーション方法８００を示す。方法８００は、複数の入力ポートからのクエリ要求を処理する出力ポートのアービトレーションブロックにおいて行われる。各出力ポートは、local_priority_vectorという自己の変数と、priority_vectorという自己の変数とを維持する。全ての出力ポートは、global_priority_vectorという同一の変数を共有する。これらベクトルのビット幅は入力ポートの数に等しい。これら優先順位ベクトルのそれぞれは、１に設定されたビットは１つしか有さない。各ベクトル内のビット「１」の位置が、対応する入力ポートが最高の優先順位を得て許可されることを示す。出力ポートのアービタにおけるlocal_priority_vector変数は、この出力ポートに行きたがっているユニキャストデータパケットに許可を与えるために使用される。global_priority_vector変数は、デッドロックを回避するようにマルチキャストデータパケットに許可を与えるために、全ての出力ポートアービタによって使用される。priority_vectorベクトルは、出力ポートアービタによって、当該出力ポートへのクエリ要求のうちの１つを許可するために、使用される。
【００６６】
ステップ８０５において、各出力ポートアービタのlocal_priority_vector変数と、共有global_priority_vector変数とが、好みの（favorite）入力ポートに最高の優先順位を与えるように初期化される。いくつかの実施形態では、ステップ８０５は、リセット時などの最初に行われる。これらベクトルの初期化された値は、ソフトウェアによって再構成可能である。したがって、出力ポートが最初にどの入力ポートに最高の優先順位を与えたいかに依存して、全ての出力ポートは、異なる初期化されたlocal_priority_vectorsを有し得る。
【００６７】
ステップ８１０において、マルチキャストデータパケットからのクエリ要求があるか否か、およびcfg_forward_modeレジスタが１であるか否かが判断される。ステップ８１０において、マルチキャストデータパケットからのクエリ要求があり、かつcfg_forward_modeレジスタが１であると判断されると、ステップ８２０において、そのpriority_vector変数は、global_priority_vector変数の値に設定される。このように設定することで、ある出力ポートアービタによってマルチキャストデータパケットが許可された場合、その全ての所望の出力ポートアービタから許可されることが保証される。これは、global_priority_vectorが全ての出力ポートアービタによって共有されているからである。この設計により、異なるマルチキャストデータパケット間でデッドロックが生じないことが保証される。
【００６８】
ステップ８１０において、cfg_forward_mode registerが０であるまたは出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信していないと判断された場合、ステップ８１５において、priority_vector変数は、そのlocal_priority_vector変数の値に設定される。
【００６９】
ステップ８２５において、出力ポートが利用可能であるか否かが判断される。出力ポートが利用可能でない場合、方法８００はステップ８１０に戻る。そうでない場合、priority_vector変数に値を割り当てた後、ステップ８３０において、出力ポートアービタは、一旦その対応する出力ポートが利用可能となれば、受信されたクエリ要求のうち１つに許可を送信する。典型的には、出力ポートは、このポートに接続する下流オンチップルータまたはエンジンが新たなデータパケットを受け入れる準備ができていれば、利用可能である。
【００７０】
いくつかの実施形態では、許可アルゴリズムは、以下に示すように、priority_vectorの値に基づく：入力ポートの数をＭと仮定すると、priority_vectorはＭビットを有し、１つのビットは１つの入力ポートの優先順位を示す。priority_vectorは、１に設定されたビットは１つしか有さない。ビット「１」が、右から左に数えてビット位置ｉにあると仮定する。優先順位の順番は、入力ポートｉ、ｉ＋１、ｉ＋２、…、Ｍ−１、０、…ｉ−１からのクエリ要求に対して、降順に与えられる。出力ポートアービタが１つしかクエリ要求を受信しない場合、そのクエリ要求は許可される。出力ポートアービタが複数のクエリ要求を受信した場合、許可は全てのクエリ要求の中で最高の優先順位を有するクエリ要求に与えられる。別の言い方をすれば、出力ポートアービタが入力ポートｉからクエリ要求を受信すると、そのクエリ要求は許可される。出力ポートアービタが入力ポートｉ以外の入力ポートからも１つ以上のクエリ要求を受信すると、最高の優先順位を有する入力ポートに許可が与えられる。
【００７１】
許可処理が終わると、ステップ８３５において、共有global_priority_vector変数と全ての出力ポートアービタのlocal_priority_vector変数とが更新される。
【００７２】
global_priority_vector変数は以下のように更新される：cfg_forward_modeが０であるまたは許可される入力ポートがない場合、global_priority_vectorは変更されない。そうでない場合、現在のglobal_priority_vector変数が位置ｉにビット「１」を有すると仮定すると、入力ポートがｉ、ｉ＋１、…、Ｍ、０、…、ｉ−１の順番で検査されて、これら入力ポートのうちのどれが最初にその全ての所望の出力ポートからその全てのクエリ要求を許可されるかが調べられる。この検査に適合する最初の入力ポートが入力ポートｊであると仮定すると、global_priority_vector変数内のビットｊ＋１が１に設定され、他の全てのビットは０に設定される。このことは、今や、全ての出力ポートアービタに対する次のマルチキャストクエリ要求については、入力ポートｊ＋１が最高の優先順位を有し、入力ポートｊが最低の優先順位を有することを意味する。
【００７３】
各出力ポートアービタのlocal_priority_vector変数は以下のように更新される：出力ポートアービタがマルチキャストデータパケットからのクエリ要求を受信するか、または（クエリ要求がないかもしくは出力ポートが利用可能でないために）許可が送信されていない場合、local_priority_vector変数は変更されない。そうでない場合、入力ポートｋに許可を与えると仮定すると、local_priority_vector変数内のビットｋ＋１が１に設定され、他の全てのビットは０に設定される。このことは、今や、この出力ポートアービタに対する次のクエリ要求については、入力ポートｋ＋１が最高の優先順位を有し、入力ポートｋが最低の優先順位を有することを意味する。
【００７４】
ステップ８２５の後、方法８００はステップ８１０に戻る。
上述のアービトレーションおよび優先順位更新処理は、公平であることを保証する。なぜなら、各入力ポートは許可される機会を常に有するからである。ある入力ポートが今回許可されると、次回、この入力ポートは、許可について最低の優先順位を有することになる。さらに、提案されたアービトレーションはまた、２つの転送モードの両方においてマルチキャストデータパケット間のデッドロックを生じさせないことを保証する。
【００７５】
図９は本発明の実施形態による使用例を例示的に示す。この使用例は、オンチップルータによるデータパケットルーティングにおける最初の２つのサイクルを示す。オンチップルータが５つの入力ポートと３つの出力ポートとを有し、かつcfg_forward_modeレジスタが１に設定されていると仮定する。これは、各入力ポートは全ての所望の出力ポートから全ての許可を受信するまで待機してから、所望の出力ポートの全てにマルチキャストデータパケットのコピーを同時に送信しなければならないことを意味する。また、オンチップルータのサイクル１において、入力ポート０は出力ポート０と出力ポート１とにマルチキャストメッセージを送信したい状態にあり、入力ポート１〜４のそれぞれは出力ポート１、０、２、２にそれぞれユニキャストメッセージを送信したい状態にある、と仮定する。各出力ポートは自己のlocal_priority_vector変数と自己のpriority_vector変数とを有する。出力ポート同士は、同一のglobal_priority_vector変数を共有している。各出力ポートアービタのlocal_priority_vector変数と共有global_priority_vector変数とが、まず好みの入力ポートに最高の優先順位を与えるために初期化されている。図９に示すように、共有global_priority_vectorは、００００１（入力ポート０）に初期化され、出力ポート０において出力ポートアービタによって使用されるlocal_priority_vector変数は、００００１（入力ポート０）に初期化されており、出力ポート１において出力ポートアービタによって使用されるlocal_priority_vector変数は、０００１０（入力ポート１）に初期化されており、出力ポート２において出力ポートアービタによって使用されるlocal_priority_vector変数は、００１００（入力ポート２）に初期化されている。
【００７６】
出力ポート０のpriority_vectorは、出力ポート０がマルチキャストメッセージに対する少なくとも１つのクエリ要求を受信しているので、global_priority_vectorの値（例えば、入力ポート０である００００１）に設定される。同様に、出力ポート１のpriority_vectorは、出力ポート１がマルチキャストメッセージに対する少なくとも１つのクエリ要求を受信しているので、global_priority_vectorの値（例えば、入力ポート０である００００１）に設定される。出力ポート２のpriority_vectorは、出力ポート２がユニキャストメッセージに対するクエリ要求しか受信していないので、そのlocal_priority_vectorの値（例えば、入力ポート２である００１００）に設定される。
【００７７】
サイクル１におけるpriority_vector値に基づき、出力ポート０は、現在最高の優先順位を与えられている入力ポート０からクエリ要求を受信しているので、入力ポート０に許可を与え、出力ポート１は、現在最高の優先順位を与えられている入力ポート０からクエリ要求を受信しているので、入力ポート０に許可を与え、出力ポート２は、入力ポート２の次に高い優先順位を与えられている入力ポート３からクエリ要求を受信しているので、入力ポート３に許可を与える。したがって、入力ポート０および３は、所望の出力ポートにデータパケットを送信する。
【００７８】
次のサイクル、すなわちサイクル２では、入力ポート１、２、４は、サイクル１で前回のクエリ要求が許可されなかったため、自己のクエリ要求を再度トライし、出力ポート１、０、２にそれぞれクエリ要求を再送信する。サイクル２では、入力ポート０は今回は出力ポート０と出力ポート２とにマルチキャストメッセージを送信したい状態にあり、入力ポート３は出力ポート１にユニキャストメッセージを送信したい状態にある。共有のglobal_priority_vector変数は、次の優先順位のポート、すなわち０００１０に更新される。出力ポート０は前回のサイクルでマルチキャストメッセージからのクエリ要求を受信しているので、出力ポート０のlocal_priority_vector変数の値は同じままである（すなわち、入力ポート０である００００１）。同様に、出力ポート１は前回のサイクルでマルチキャストメッセージからのクエリ要求を受信しているので、出力ポート１のlocal_priority_vector変数の値は同じままである（すなわち、入力ポート１である０００１０）。しかし、出力ポート２は、前回のサイクルでユニキャストメッセージからのクエリ要求を受信しており許可が入力ポート３に送信されたので、出力ポート２のlocal_priority_vector変数の値は００１００から１００００（入力ポート４）に更新される。
【００７９】
入力ポート１の次に高い優先順位を与えられた入力ポート２からクエリ要求を受信しているので、サイクル２におけるpriority_vector値に基づき、出力ポート０は、入力ポート２に許可を与え、出力ポート１は、現在最高の優先順位を与えられている入力ポート１からクエリ要求を受信しているので、入力ポート１に許可を与え、出力ポート２は、現在最高の優先順位を与えられている入力ポート４からクエリ要求を受信しているので、入力ポート４に許可を与える。したがって、入力ポート１、２、４は所望の出力ポートにデータパケットを送信する。
【００８０】
次のサイクル、すなわちサイクル３では、入力ポート０および３は、自己のクエリ要求を再度トライし、出力ポート０および１にそれぞれクエリ要求を再送信する。これに続く各サイクルにおいて出力ポートから許可を受信することになる入力ポートは、同様にして判断される。
【００８１】
出力ポートアービタが自己の許可を入力ポートへ送信した後、これら出力ポートアービタは、当該許可された入力ポートを自己の正しい出力ポートに接続するためのクロスバーをセットアップする。クロスバー論理を図１０に示す。クロスバーは、実際には、Ｎ個のマルチプレクサの集合であり、Ｎはオンチップルータの出力ポートの数である。各マルチプレクサはＭ個の入力を有し、Ｍはオンチップルータの入力ポートの数である。各マルチプレクサは対応する出力ポートアービタによる許可信号によって制御される。例えば、出力ポートアービタｎが入力ポートｍに許可を送信すると、マルチプレクサｎが、出力ポートｎに送信される入力ポートｍからのデータパケットに対してセットアップされる。
【００８２】
各複数−入力マルチプレクサは、一般的な２入力マルチプレクサからなる２分木から構築される。したがって、Ｍ入力マルチプレクサのための２入力マルチプレクサの数は、Ｍ−１である。Ｍ入力マルチプレクサの遅延は、２入力マルチプレクサの遅延のｌｏｇ２（Ｍ）倍である。
【００８３】
本発明の実施形態は、オンチップ構成変更可能ルータを使用した単一チップ上の複数の処理エンジンの拡張性可能相互接続方式に関する。この相互接続方式は、処理エンジンによって通信されるデータパケットのユニキャストルーティングとマルチキャストルーティングとをサポートする。各オンチップ構成変更可能ルータは、ソフトウェアによってプログラム可能なルーティングテーブルを含み、公平かつデッドロックなしに入力データパケットをその出力ポートに正しく送出するように構成される。特に、オンチップ構成変更可能ルータの各出力ポートは、オンチップ構成変更可能ルータの出力ポートにおいて回線争奪がある場合にデッドロックを回避しかつ転送されたデータパケット間の送達において公平性を保証する、出力ポートアービタを含む。
【００８４】
当業者ならば、他の使用法や利点もまた存在することを理解するであろう。本発明を様々な特定の詳細を参照に説明したが、当業者ならば、本発明の精神から逸脱することなく本発明が他の特定の形式で実施され得ることを理解するであろう。したがって、当業者ならば、本発明が上述の例示の詳細によって限定されず、添付の請求項によって定義されることを理解するであろう。
【図１】
2015128294.tif 000003
【図２】
2015128294.tif 000004
【図３】
2015128294.tif 000005
【図４】
2015128294.tif 000006
【図５】
2015128294.tif 000007
【図６Ａ】
2015128294.tif 000008
【図６Ｂ】
2015128294.tif 000009
【図７】
2015128294.tif 000010
【図８】
2015128294.tif 000011
【図９】
2015128294.tif 000012
【図１０】
2015128294.tif 000013
【外国語明細書】
2015128294000001.pdf
2015128294000002.pdf
2015128294000003.pdf
2015128294000004.pdf