(57)【特許請求の範囲】
【請求項１】
パケット交換方式の分散型バスを備える集積回路において、前記集積回路に接続されるノード間で伝送されるパケットを中継する中継装置であって、
送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、
パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、
各グループに属するバッファを少なくとも１つ選択する選択部と、
選択された前記バッファに格納されたパケットを順次出力する出力ポートと
を備え、
前記パケットには、時間情報が付加されており、
分類されたグループにバッファが２以上属しているときは、前記選択部は、各バッファに格納された前記パケットの時間情報に基づいて、２以上のバッファのうちの１つを、優先順位が最も高いバッファとして選択し、
分類されたグループにバッファが１つのみ属しているときは、前記選択部は、前記バッファを優先順位が最も高いバッファとして選択し、
前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、各パケットの時間情報に基づいて定められる順序で出力し、
前記時間情報は、パケットが送信先のノードに届くべき締切時刻であり、
前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、前記締切時刻の近い順に出力する、中継装置。
【請求項２】
パケット交換方式の分散型バスを備える集積回路において、前記集積回路に接続されるノード間で伝送されるパケットを中継する中継装置であって、
送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、
パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、
各グループに属するバッファを少なくとも１つ選択する選択部と、
選択された前記バッファに格納されたパケットを順次出力する出力ポートと
を備え、
前記パケットには、時間情報が付加されており、
分類されたグループにバッファが２以上属しているときは、前記選択部は、各バッファに格納された前記パケットの時間情報に基づいて、２以上のバッファのうちの１つを、優先順位が最も高いバッファとして選択し、
分類されたグループにバッファが１つのみ属しているときは、前記選択部は、前記バッファを優先順位が最も高いバッファとして選択し、
前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、各パケットの時間情報に基づいて定められる順序で出力し、
前記時間情報は、パケットが送信元のノードから送信された送信時刻であり、
前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、前記送信時刻が古い順に出力する、中継装置。
【請求項３】
パケット交換方式の分散型バスを備える集積回路において、前記集積回路に接続されるノード間で伝送されるパケットを中継する中継装置であって、
送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、
パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、
各グループに属するバッファを少なくとも１つ選択する選択部と、
選択された前記バッファに格納されたパケットを順次出力する出力ポートと
を備え、
前記送信ノードは、１つのバスマスタ、または複数のバスマスタの集合体であり、
前記分類部は、前記１つのバスマスタ、前記複数のバスマスタの集合体、または、前記パケットが伝送経路上で通過した１つまたは複数の中継装置に基づいて、前記複数のバッファを前記複数のグループに分類し、
前記分類部は、前記パケットが伝送経路上で通過した中継装置に応じて、パケットを格納した前記複数のバッファを、複数のグループに分類する、中継装置。
【請求項４】
パケット交換方式の分散型バスを備える集積回路において、前記集積回路に接続されるノード間で伝送されるパケットを中継する中継装置であって、
送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、
パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、
各グループに属するバッファを少なくとも１つ選択する選択部と、
選択された前記バッファに格納されたパケットを順次出力する出力ポートと
を備え、
前記送信ノードは、１つのバスマスタ、または複数のバスマスタの集合体であり、
前記分類部は、前記１つのバスマスタ、前記複数のバスマスタの集合体、または、前記パケットが伝送経路上で通過した１つまたは複数の中継装置に基づいて、前記複数のバッファを前記複数のグループに分類し、
送信ノードは複数存在し、かつ、各送信ノードは予め複数のグループのいずれかに属するよう分類されており、
前記分類部は、前記パケットを送信した送信ノードが所属するグループに応じて、パケットを格納した前記複数のバッファを複数のグループに分類する、中継装置。
【請求項５】
送信ノードごとに、パケットの流れの混み具合の程度を示す値を測定する測定部であって、前記混み具合が大きいほど、大きい値を測定する測定部と、
前記値が大きい送信ノードほど、前記出力ポートからより多くのパケットが出力されるよう、出力量を決定する決定部と
をさらに備えた、請求項１から４のいずれかに記載の中継装置。
【請求項６】
前記測定部は、前記分類部によって分類されたバッファの数を、前記パケットの流れの混み具合を示す値として測定する、請求項５に記載の中継装置。
【請求項７】
前記測定部は、パケットが自中継装置に到着してから、出ていくまでの通過時間を、前記パケットの流れの混み具合を示す値として測定する、請求項５に記載の中継装置。
【請求項８】
前記測定部は、バスの利用帯域を、前記パケットの流れの混み具合を示す値として測定する、請求項５に記載の中継装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、分散型のバスを備える半導体の集積体回路において、バス間を接続する複数の中継装置間を流れる複数のトラヒックの送信スケジューリングを調整する技術に関する。特に、本願は、複数のバッファに、異なるトラヒックを構成するパケットが分散して格納されている場合において、バッファに格納されたパケットの送信を制御する技術に関する。
【背景技術】
【０００２】
図１（Ａ）は、集中型のバス制御の例を示す。集中型のバス制御を行う従来の集積回路では、主に複数のバスマスタとメモリとの間は１つのバスによって接続され、アービタによって各バスマスタからメモリへのアクセスが調停される。しかし、集積回路の高機能化、マルチコア化により、回路の規模が増大し、トラヒックも複雑に変動しながらバスを流れており、集中型のバス制御による集積回路の設計が困難になってきている。【０００３】
その一方で、近年、並列計算機での接続技術や、ＡＴＭ（Ａｓｙｎｃｈｒｏｎｏｕｓ  Ｔｒａｎｓｆｅｒ  Ｍｏｄｅ）網などのネットワーク制御の技術を取り入れた分散型のバスを有する半導体集積回路の開発が進んでいる。図１（Ｂ）は、分散型のバス制御の例を示す。分散型のバスを有する半導体集積回路は、複数の中継装置が複数のバスで接続されて構成されている。近年、図１（Ｂ）に示すような分散型のバスを用いることにより、大規模化した集積回路内のトラヒックを、複数のバスに分散して伝送するネットワークオンチップ（Ｎｅｔｗｏｒｋ  ｏｎ  Ｃｈｉｐ）の取り組みがある。【０００４】
図２は、ＮｏＣ（Ｎｅｔｗｏｒｋ  ｏｎ  ｃｈｉｐ）や並列計算機、ＡＴＭ網などで利用される中継装置の基本的な構成の概略である。これらの中継装置では、トラヒックデータはパケットやセルの単位に分割されて、宛先のノードまで送信される。中継装置に送られたデータは、一旦バッファに蓄えられる。【０００５】
また、異なるパケットを入力ポート毎に並行して送信処理するために、入力ポート毎に複数のバッファを並列化した仮想的なチャネル（「バーチャルチャネル」又は「ＶＣ：Ｖｉｒｔｕａｌ  Ｃｈａｎｎｅｌ」とも呼ばれる）を備える。仮想チャネルの実体は中継装置のバッファメモリであるが、入力ポート毎に、かつ、各入力ポートに対して複数のバッファを物理的に実装して良いし、又は、複数のバッファが存在するかのようにバッファメモリ上のデータを管理することにより、仮想的なチャネルを実装することが可能である。【０００６】
クロスバスイッチは、各入力ポートと出力ポートの排他的な接続を決定するスイッチである。また、クロスバスイッチによる入力ポートと出力ポートの排他的な接続はアービタによって決定される。【０００７】
このように、中継装置では、アービタにより、クロスバスイッチの接続を切り替えることで、バッファ内に格納されたデータを目的の宛先へと中継する。【０００８】
次に、中継装置の入力ポートと出力ポートの接続の切替え処理を説明する。中継装置の入力ポートと出力ポートはクロスバスイッチによって、それぞれ排他的に接続される。ここで「排他的な接続」とは、複数の入力ポートと複数の出力ポートとを同時に接続する場合に、１つの出力ポートには、多くても１つの入力ポートだけが接続されている状態と定義する。【０００９】
次に、ＮｏＣの中継装置が伝送するデータのデータ構造を説明する。【００１０】
図３は、パケット３００の伝送フォーマットの一例と、パケット３００を複数のフリットに分割した例を示す。【００１１】
ＮｏＣの中継装置では、一般的に並列計算機、ＡＴＭ網などで利用される中継装置と異なり、送信ノードで生成されたパケットを、さらにフリットと呼ばれる単位に分割して中継する。フリットの大きさは、バスを使って１サイクルで伝送可能なデータサイズとして決定される。【００１２】
パケット３００は、ヘッダフィールド３０１、データフィールド３０２、及び制御コードフィールド３０３を備えている。【００１３】
ヘッダフィールド３０１には、例えば、送信先（受信ノード）のアドレス、送信元（送信ノード）のアドレス、パケットが送信されてから受信ノードに届くまでの締切り時刻などの情報（時間情報）が記述される。時間情報の記述方法は任意であるが、そのパケットが送信されてからの経過時間や、宛先に届くまでの締切り時刻などを他のパケットとの間で比較できる値であれば良い。【００１４】
データフィールド３０２には、例えば映像データや、音声データが記述される。制御コードフィールド３０３には、例えば、予め定められたパケット３０３の終了コードが記述される。【００１５】
上述のヘッダフィールド３０１のデータのうち、受信ノードのアドレスと、送信ノードのアドレスとに基づいて、パケット３００の中継処理と、受信側での受信処理とが行われる。【００１６】
送信側のノードは、パケット３００を、フリットと呼ばれる小さなデータ単位に分解して伝送する。１フリットは、バスを使って１サイクルで伝送可能なデータであり、そのサイズはバス幅の大きさによって決定される。パケット３００を分割したフリットのうち、最初に送信されるフリットは、ヘッダーフリット１１０４と呼ばれる。ヘッダーフリット３０４には、パケットの先頭であることを示すフラグ情報、及びパケットの受信ノードのアドレス情報が付与されている。【００１７】
なお、ヘッダーフリット３０４に続く各フリットには、受信ノードを特定するアドレス情報は格納されていない。その理由は、ヘッダーフリット３０４に続くフリットは、ヘッダーフリット３０４と同じ宛先に送られるためである。ヘッダーフリット３０４によって宛先が決まり、そのトラヒックのフリットを出力する出力バッファが決まると、後に続くフリットは、ヘッダーフリット３０４と同じ出力バッファを利用してヘッダーフリット３０４が示す宛先に伝送される。【００１８】
また、パケットの最終のフリットはテイルフリット３０６と呼ばれる。テイルフリット３０６には、そのフリットがパケットを構成する最後のフリットであることを示すフラグ情報が付与されている。また、ヘッダーフリット３０４とテイルフリット３０６以外のフリットは、主にデータを伝送するフリットでありデータフリット３０５と呼ぶ。【００１９】
受信側のノードは、制御コードフィールド３０３に記述された終了コードを検出すると、その終了コードに基づき、伝送された複数のフリットからパケットへ再構築する。【００２０】
例えば、１パケットのサイズは１２８バイト、１フリットのサイズは６４ビットである。この場合、１パケットは１６フリットに分割して送信される。ただし、１パケットのサイズ、及び１フリットのサイズはアプリケーションやバス幅によって異なり得るため、上述のサイズは一例に過ぎないことに留意されたい。フリットの長さは、受信ノードのアドレスと、送信ノードのアドレスなど、制御データを記述できる長さを基準としてもよい。【００２１】
図４（Ａ）は、ＮｏＣにおいて、各中継装置が受信したパケットを隣接する中継装置又は受信ノードへと送信する際の中継装置の一連の処理動作を説明するフローチャートである。【００２２】
また、図４（Ｂ）は、図４（Ａ）のフリットの送信に関連する中継装置の仮想チャネルの構成を示した図である。図４（Ｂ）に示す例では、各中継装置は入力ポート、出力ポートをそれぞれ２つ備え、さらに入力ポート毎にフリットを格納するための仮想チャネル（ＶＣ）を２つずつ備えている。【００２３】
入力ポート内の仮想チャネルおよび出力ポートは、クロスバスイッチ（ＳＷ）の接続を切り替えることで接続され、仮想チャネル内のフリットを、出力ポートを介して送信する。なお、図４（Ｂ）には、図を簡略化するために入力ポート０の仮想チャネル（ＶＣ１、ＶＣ２）のみが記載されており、入力ポート１内の仮想チャネルの記載は省略されている。【００２４】
図４（Ｃ）は、中継装置でパケットが受信されてから、次の中継装置、又は受信ノードへ送信されるまでの、各フリットの状態変化を１サイクル毎に示す。【００２５】
ＮｏＣにおける中継装置では、フリットに分割されたパケットを目的の宛先まで中継するために、受信したフリットに対してルーティング（ＲＣ：Ｒｏｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎ）、仮想チャネル割当（ＶＡ：Ｖｉｒｔｕａｌ  ｃｈａｎｎｅｌ  Ａｌｌｏｃａｔｉｏｎ）、スイッチ割当  （ＳＡ：Ｓｗｉｔｃｈ  Ａｌｌｃａｔｉｏｎ）、フリット送信（ＳＴ：Ｓｗｉｔｃｈ  Ｔｒａｖｅｒｓａｌ）の処理のすべて、または一部を実行する（例えば非特許文献１）。【００２６】
まず、図４（Ａ）のフローチャートと図４（Ｂ）の中継装置の構成図を用いて、ＮｏＣにおける中継装置の基本動作を説明する。図４（Ｂ）に示すように、上流側の中継装置を「中継装置Ａ」とし、下流側の中継装置を「中継装置Ｂ」として説明する。【００２７】
図４（Ａ）のステップ４０１において、中継装置Ａは、フリットが存在している仮想チャネル（ＶＣ）が存在するかどうかを判定する。フリットが存在している仮想チャネル（ＶＣ）が存在していれば、中継装置Ａの処理はステップ４０２に移る。フリットが存在する仮想チャネル（ＶＣ）がなければ、フリットが存在すると判定されるまで、ステップ４０１の処理を繰り返す。【００２８】
仮想チャネル（ＶＣ）にフリットが存在する場合は、ステップ４０２において中継装置Ａは、仮想チャネル（ＶＣ）の先頭のフリットがヘッダーフリットであるかどうかを判定する。仮想チャネル（ＶＣ）の先頭フリットがヘッダーフリットである場合には、中継装置Ａの処理は、ステップ４０３に移る。仮想チャネル（ＶＣ）の先頭フリットがヘッダーフリットではない場合、中継装置Ａの処理は、ステップ４０５に移る。【００２９】
図４（Ｂ）の中継装置Ａの例では、仮想チャネルの１つにヘッダーフリットが格納されているため、中継装置Ａの処理は、ステップ４０３に移る。【００３０】
仮想チャネルの先頭フリットがヘッダーフリットであった場合、ステップ４０３において、中継装置Ａはヘッダーフリットに記載されている宛先情報を参照し、ルーティング処理を実行する（ＲＣ：Ｒｏｕｔｉｎｇ  Ｃｏｍｐｕｔａｔｉｏｎ）。ルーティング処理では、中継装置Ａから、パケットの宛先へ続く出力ポートを１つ選択する。【００３１】
図４（Ｂ）の中継装置Ａでは、ルーティング処理によって、「宛先」へ続く中継装置Ｂと接続している出力ポート０が選択される。【００３２】
ルーティング処理により出力ポートが選択されると、処理はステップ４０４に移り、中継装置Ａが送信したパケットを、隣接する中継装置Ｂのどの仮想チャネルに格納するかを選択する。【００３３】
ＮｏＣにおいては、パケットはフリットに分割されて中継される。また、中継のための制御に必要な基本情報はヘッダーフリットのみに記載されているため、異なるパケットのフリットが、１つの仮想チャネルに混在してしまうと、正しくフリットを宛先に届かない場合や、宛先において届いたフリットを正しく元のパケットに戻せない場合が発生する。【００３４】
これを回避するために、ＮｏＣの中継装置では、パケット毎にヘッダーフリットからテイルフリットまでが通過する期間、１つの仮想チャネルを占有し、他のパケットのフリットが、占有した仮想チャネルを利用できなくする。【００３５】
例えば、図４（Ｂ）の中継装置Ａは、ヘッダーフリットを格納している仮想チャネルＶＣ１に対し、フリットが送信される中継装置Ｂで未使用の仮想チャネルを１つ割り当てる（ＶＡ：Virtual channel Allocation）。【００３６】
仮想チャネルの割り当て（ＶＡ）が完了すると、中継装置Ａの処理は、ステップ４０５に移る。【００３７】
一方、隣接する中継装置Ｂに未使用の仮想チャネルがない場合、中継装置Ａは、中継装置Ｂの仮想チャネルに空きができ、仮想チャネル割り当て（ＶＡ）が完了するまで、ステップ４０４の状態を維持する。【００３８】
図４（Ｂ）では、中継装置Ａは、ヘッダーフリットを格納している仮想チャネルＶＣ１に対し、中継装置Ｂにおいて格納するバッファとして仮想チャネルＶＣ１を選択して割り当てる。【００３９】
出力ポートの決定（ＲＣ）と、隣接する中継装置でフリットを格納する仮想チャネルの割り当て（ＶＡ）が完了すると、中継装置Ａの処理はステップ４０５に移り、格納しているフリットの送信待ち状態となる。【００４０】
ステップ４０５において、中継装置Ａは、仮想チャネルからフリットを送信するために、クロスバスイッチを切り替えて、中継装置Ａの仮想チャネルＶＣ１をその出力ポートに割り当てる（ＳＡ：Switch Allocation）。【００４１】
出力ポートの数に対して、その出力ポートへの送信を要求している仮想チャネルが複数ある場合には、フリットの送信を許可する仮想チャネルを出力ポート毎に決定するＳＷ割当て（ＳＡ：Switch Allocation）を実行する。【００４２】
なおＮｏＣの中継装置は、このＳＷ割当において、パケットの種類（遅延保証型、ベストエフォート型など）や優先度、送信時刻、到着締切り時刻などの情報に基づいて、パケット格納している仮想チャネルから出力ポートへ接続の割当量を調整してもよい。これにより、異なる送信ノードからのパケットの送信スケジューリングを調整が可能となる。【００４３】
ステップ４０５のＳＷ割当（ＳＡ）によって、フリットの送信待ち状態にある仮想チャネルに対して出力ポートが割り当てられて両者が接続されると、中継装置Ａの処理は、ステップ４０６に移り、接続された仮想チャネル内のフリットを、選択された出力ポートから送信する。（ＳＴ：Switch Traversal）。【００４４】
以上のように、中継装置は、仮想チャネル毎に、ステップ４０１からステップ４０６まで処理を行うことで、届いたフリットを宛先へと送信する。【００４５】
次に、図４（Ｂ）の中継装置Ａが１個のパケットを中継する際の動作を、図４（Ｃ）を用いて説明する。パケットサイズが４フリットの場合を例に、各時刻でのフリットの処理内容を説明する。【００４６】
時刻１において、まずヘッダーフリットが中継装置Ａに到着すると、中継装置Ａは、ヘッダーフリットに付与された宛先情報を基に、ルーティング処理（ＲＣ）を実行して、次に送信する出力ポートを選択する。【００４７】
時刻２において、中継装置Ａは、ＶＣ割当て（ＶＡ）を実行し、ヘッダーフリットが格納された仮想チャネルを、ルーティング処理（ＲＣ）で決定された出力ポートの先に接続されている中継装置Ｂのどの仮想チャネルに割り当てるかを決定する。【００４８】
また、時刻２ではデータフリット１が中継装置Ａに到着する。仮想チャネルの先頭にはヘッダーフリットが存在しているため、データフリット１に対して処理は実行しない。【００４９】
時刻３において、中継装置ＡはＳＷ割当て（ＳＷ）を実行し、ヘッダーフリットを先頭に格納している仮想チャネルに対し、出力ポートの割当を決定する。【００５０】
また、時刻３ではデータフリット２が中継装置Ａに到着する。仮想チャネルの先頭にはヘッダーフリットが存在しているため、データフリット１とデータフリット２に対して、処理は実行しない。【００５１】
時刻４において、中継装置Ａはヘッダーフリットを送信する（ＳＴ）。また、ヘッダーフリットが送信された後も、同じ仮想チャネルと出力チャネルとを引き続き接続するためのＳＷ割当て（ＳＷ）を継続する。【００５２】
また、時刻４では、テイルフリットが中継装置Ａに到着する。仮想チャネルの先頭にはデータフリット１が存在するため、データフリット２とテイルフリットに対しては、処理を実行しない。【００５３】
時刻５において、中継装置Ａはデータフリット１を送信する（ＳＴ）。また、データフリット１が送信された後も、同じ仮想チャネルと出力チャネルとを引き続き接続するためのＳＷ割当て（ＳＷ）を継続する。仮想チャネルの先頭にはデータフリット１が存在するため、データフリット２とテイルフリットに対しては、処理を実行しない。【００５４】
時刻６において、中継装置Ａはデータフリット２を送信する（ＳＴ）。また、データフリット２が送信された後も、同じ仮想チャネルと出力チャネルとを引き続き接続するためのＳＷ割当て（ＳＷ）を継続する。【００５５】
時刻７において、中継装置Ａはテイルフリットを送信する（ＳＴ）。これにより１個のパケットの中継が完了する。【００５６】
図４（Ｃ）に示す１個のパケットの中継に関する一連の処理は、その各々が１サイクルで完了できる例である。しかしながら、たとえばＶＣ割当て（ＶＡ）において、出力先の中継装置Ｂに仮想チャネルの空がない場合には、空きができるまでＶＣ割当て（ＶＡ）を完了することができず、後続のフリットも含め、中継処理に待ち状態が発生する。【００５７】
また、ＳＷ割当て（ＳＡ）に関しても、複数の仮想チャネルが、同じ出力ポートに対して送信要求を出す場合には、各仮想チャネルに対し、要求された出力ポートを割り当てるための送信スケジューリングにより送信待ちが発生する。【００５８】
一般的に並列計算機やＡＴＭにおける中継装置では、ＮｏＣの中継装置に比べて、パケットのサイズに対し送信バッファ（仮想チャネル）を比較的多く確保することができるため、仮想チャネルの不足によるＣ割当（ＶＡ）での遅延発生の影響は小さい。その一方で送信バッファ（仮想チャネル）内の各フリットをいかに効率よく送信するか、その送信スケジューリングの最適化に重点が置かれる。このため、並列計算機やＡＴＭの中継装置では、送信バッファ（仮想チャネル）と出力ポートの最適な組み合わせを探索する“Ｗａｖｅｆｒｏｎｔ  ａｌｌｏｃａｔｏｒ”や、中継装置の入力ポート側と出力ポート側で、それぞれ最適な組合せを繰り返し求める“Ｐａｒａｌｌｅｌ  Ｉｔｅｒａｔｉｖｅ  Ｍａｔｃｈｉｎｇ”などの方法が用いられている（例えば、非特許文献１）。【００５９】
また、複数の仮想チャネルが同じ出力ポートへの接続を要求する場合も考えられる。このような例に関してはＡｇｅ−Ｂａｓｅｄ方式が提案されている（例えば特許文献１）。Ａｇｅ−Ｂａｓｅｄ方式では、パケットが送信された順番を維持し、また、パケット間での遅延時間の増加やバラツキを抑制するために、送信からの経過時間の長さや中継したホップ数に基づいて”Ａｇｅ”と呼ばれる値を定義する。そして、Ａｇｅが最も大きい（または小さい）パケットを、先に送信する。
【先行技術文献】
【特許文献】
【００６０】
【特許文献１】米国特許第６６７４７２０号明細書
【非特許文献】
【００６１】
【非特許文献１】Ｗ．  ＤＡＬＬＹ，  Ｂ．  ＴＯＷＬＥＳ，  “ＰＲＩＮＣＩＰＬＥＳ  ＡＮＤ  ＰＲＡＣＴＩＣＥＳ  ＯＦ  ＩＮＴＥＲＣＯＮＮＥＴＩＯＮ  ＮＥＴＯＷＲＫＳ”，  ＭＯＲＧＡＮ  ＫＡＵＦＭＡＮＮ  ＰＵＢＬＩＳＨＥＲＳ
【発明の概要】
【発明が解決しようとする課題】
【００６２】
これに対し、ＮｏＣでは集積回路上に複数の中継装置を構成する必要があるため、並列計算機やＡＴＭ網の中継装置に比べて、各中継装置上で構成できる仮想チャネルの数やサイズを多く設けることができない。例えば１個の仮想チャネルのサイズは１個のパケットと同じ程度である。【００６３】
このため、ＮｏＣでは、より短い遅延時間内に、異なる送信ノードから送信されたパケットに対して、ＳＷ割当てにおいて送信スケジューリングが適切に行えるように、限られた仮想チャネルを効率的に割り当てること（ＶＡ）が重要になる。【００６４】
本願の、限定的ではない例示的なある実施形態は、特定の送信ノードから送信されたパケットの伝送性能（スループットや遅延時間）の低下を抑制し、ＮｏＣ全体の伝送性能を向上させる中継装置を提供する。
【課題を解決するための手段】
【００６５】
本発明の一態様は、パケット交換方式の分散型バスを備える集積回路において、ノード間で伝送されるパケットを中継する中継装置であって、送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、各グループに属するバッファを少なくとも１つ選択する選択部と、選択された前記バッファに格納されたパケットを順次出力する出力ポートとを備えた、中継装置を含む。
【発明の効果】
【００６６】
本発明の一態様にかかる中継装置によれば、中継装置内の仮想チャネルのサイズや数を増やすことなく、複数のパケットに対して、送信ノードを区別して隣接する中継装置で利用する仮想チャネルを均一に割当て、同じ送信ノードからのパケットによる占有を回避する。これにより、中継装置において、送信ノードの異なるパケットに対し、送信スケジューリングの維持が可能となり、ＮｏＣにおける伝送性能（高スループット、低遅延）の低下を改善できる。
【図面の簡単な説明】
【００６７】
【図１】（Ａ）は、集中型のバス制御の例を示す図であり、（Ｂ）は、分散型のバス制御の例を示す図である。
【図２】中継装置の基本的な構成の概略図である。
【図３】パケット３００の伝送フォーマットの一例と、パケット３００を複数のフリットに分割した例を示す図である。
【図４】（Ａ）は、ＮｏＣにおいて、各中継装置が受信したパケットを隣接する中継装置又は受信ノードへと送信する際の中継装置の一連の処理動作を説明するフローチャートであり、（Ｂ）は、（Ａ）のフリットの送信に関連する中継装置の仮想チャネルの構成を示す図である。（Ｃ）は、（Ｂ）の中継装置Ａが１個のパケットを中継する際の動作を示す図である。
【図５】本願発明者らが考察した問題点の一例を説明する図である。
【図６】例示的な実施形態１による中継装置の動作の概要を説明する図である。
【図７】例示的な実施形態１において想定する分散型のバスの構成図である。
【図８】例示的な実施形態１にかかる中継装置１２０１の構成図である。
【図９】仮想チャネル情報管理部８０５で管理され保持される仮想チャネル情報９０１の一例を示す図である。
【図１０】中継装置８０１の動作手順を示すフローチャートである。
【図１１】（Ａ）は中継装置８０１内の、仮想チャネル８１３の様子を示す図であり、（Ｂ）は、中継装置８０１の入力ポート０において、まだフリットを受信していない状態の時の、仮想チャネル情報９０１を示す図である。
【図１２】（Ａ）は、入力ポート０に届いたヘッダーフリット３０４が仮想チャネル０に格納された様子を示す図であり、（Ｂ）は、ヘッダーフリット３０４に付与された送信ノードおよび宛先のアドレス、送信時刻情報が反映された後の仮想チャネル情報９０１の内容を示す図である。
【図１３】（Ａ）は、ヘッダーフリットに続いて、データフリットが仮想チャネル０に格納された様子を示す図であり、（Ｂ）は、中継装置８０１の仮想チャネル８１５の出力ポート８１４が選択された後の仮想チャネル情報９０１を示す図である。
【図１４】（Ａ）は、仮想チャネル０にヘッダーフリット３０４、データフリット３０５に続き、テイルフリット３０６が格納された様子を示す図であり、（Ｂ）は中継装置８０１出力チャネル８１５が決定された後の仮想チャネル情報９０１を示す図である。
【図１５】（Ａ）は、図１４（Ａ）から１サイクル時間が進んだ中継装置８０１の仮想チャネル８１５の様子を示す図であり、（Ｂ）は、ヘッダーフリットからデータフリットまでが送信されている状態における仮想チャネル情報９０１の様子を示す図である。
【図１６】（Ａ）は、テイルフリットが中継装置８０３から送信された時の、各仮想チャネル８１３の様子を示す図であり、（Ｂ）は、テイルフリット１１０６が送信された後の仮想チャネル情報９０１を示す図である。
【図１７】図１０のステップ１００７において、出力チャネル選択部８０９が、仮想チャネル８１３に対して出力チャネル８１５の出力チャネルを割り当てる仮想チャネル割当処理を示すフローチャートである。
【図１８】（Ａ）は、中継装置８０１に複数のパケットが同時に届いた場合の仮想チャネル８１３の様子を示す図であり、（Ｂ）は、仮想チャネル８１３が図１８（Ａ）の状態にある場合の仮想チャネル情報９０１の内容を示す図である。
【図１９】中継装置８０１の仮想チャネル８１３の内容が図１８（Ｂ）の場合における、送信ノード分類部８０７が仮想チャネルを分類した結果の例を示す図である。
【図２０】（Ａ）および（Ｂ）は、図１０のステップ１００８において、仮想チャネル選択部８１０とスイッチ切替部８１１が、出力ポートと出力チャネルが選択された仮想チャネル８１３に対して出力ポートへの接続し、フリットの送信タイミングを割り当てるスイッチ割当処理を説明する図である。
【図２１】時間情報、及び時間情報に基づく優先度の比較基準の例を示す図である。
【図２２】（Ａ）および（Ｂ）は、中継装置Ｒ９からみた種々の宛先の定義、及び各定義に該当し得る宛先の具体例を示す図である。
【図２３】（Ａ）および（Ｂ）は、複数の送受信ノードを１つのグループとして扱う際のグループ分けされたメッシュ型ＮｏＣの例を示す図である。
【図２４】同じローカルバスに属する複数のバスマスタを１つのグループとして扱う例を示す図である。
【図２５】例示的な実施形態２における中継装置の動作を説明する図である。
【図２６】例示的な実施形態２における中継装置の構成を説明する図である。
【図２７】例示的な実施形態２における中継装置の動作を説明するフローチャートである。
【図２８】ＮｏＣ上の中継装置８０１において、パケットの流れの混み具合を示す指標の一例を説明する図である。
【図２９】出力チャネル割当量決定部２４０２の動作の一例を説明する図である。
【図３０】（Ａ）はメッシュ型トポロジーの構成例を示す図であり、（B）はトーラス型トポロジーの構成例を示す図であり、（Ｃ）は階層型トポロジーの構成例を示す図である。
【図３１】本発明の一態様にかかる中継装置をメモリバスに利用した例を説明する図である。
【図３２】本発明の一態様にかかる中継装置をマルチコアプロセッサ（ｍｕｌｔｉ−ｃｏｒｅ  ｐｒｏｃｅｓｓｏｒ）上で利用した例を説明する図である。
【発明を実施するための形態】
【００６８】
以下、本願発明者らが考察した問題点を説明する。その後、添付の図面を参照しながら、本発明の例示的な実施形態にかかる中継装置を説明する。
【００６９】
図５は、本願発明者らが考察した問題点の一例を説明する図である。
【００７０】
図５は、マスタＡとマスタＢとは、ＮｏＣ上の中継装置Ａと中継装置Ｂを介して共通のメモリに接続され、マスタＡとマスタＢがそれぞれそのメモリ対してパケットを送信した様子を示している。
【００７１】
中継装置Ａと中継装置Ｂは、それぞれ入力ポートおよび出力ポートを２つずつ備え、各入力ポートは４個の仮想チャネル（ＶＣ）を備えるとする。
【００７２】
中継装置Ａ内の８個の仮想チャネルから、中継装置Ｂにパケットを送信する場合、中継装置Ａが利用できる中継装置Ｂの仮想チャネルの数は４つである。よって、中継装置Ａの８個の仮想チャネルが同時に中継装置Ｂの仮想チャネルを確保することができない。このため、パケットの送信ノードを区別せず、パケットが中継装置Ａに届いた順序や宛先のノードに届くまでの締切時刻の順序、パケットに付与された優先度の順番などに基づいて、隣接する中継装置の仮想チャネルを選択する。その結果、同じ送信ノードから出力されたパケットが、中継装置Ｂ内の仮想チャネルをすべて占有する状況が発生する。
【００７３】
例えば、図５に示すように、中継装置Ａの仮想チャネルのうち、マスタＡのパケットを格納する仮想チャネルのみに対して中継措置Ｂの仮想チャネルを割り当てると、中継装置Ｂの仮想チャネルが不足する。中継装置Ａは、マスタＢからのパケットを送信できず、異なる送信ノードであるマスタＡとマスタＢのパケットに対し、スイッチ割当て（ＳＡ）による送信スケジューリングが行えない。その結果、各送信ノードに対して適切な伝送性能を維持した伝送が困難となる。
【００７４】
このため、中継装置において、ＳＷ割当て（ＳＡ）によるスケジューリングを適切に行うためには、送信ノードが異なるパケット毎に１つ以上の仮想チャネル（ＶＣ）を割り当てる必要がある。
【００７５】
並列計算機やＡＴＭが利用される一般的なネットワークの通信はベストエフォート型通信であり、遅延が許容される。また、送信バッファ（仮想チャネル）のサイズに対する制約も、半導体の場合と比べて小さい。同じ宛先に向かうパケットが連続して送信されても、中継装置内の仮想チャネルが同じ送信ノードから送信されたパケットによって、すべて占有される状況が発生しにくい。また、同じ送信ノードから受信されたパケットで中継装置の仮想チャネルが占有されたとしても、占有状態が続く時間に比べ、並列計算やＡＴＭで許容できるパケットの遅延時間が長いため伝送性能への影響は少ない。
【００７６】
一方、ＮｏＣにおける通信の多くはリアルタイム性が必要とされることが多く、遅延が許されないなど、遅延に関する制約は大きい。そして、半導体回路上に中継装置を実装するため、仮想チャネルの数やサイズに対する制約が大きく、中継装置内の仮想チャネルの不足が発生しやすい。その結果、不足した仮想チャネルが開放されるまでの遅延時間が伝送性能に対し大きく影響する。
【００７７】
本願発明者らは、上述の問題点に関し、本願発明をなすに至った。
【００７８】
本発明の一態様の概要は以下のとおりである。
【００７９】
本発明の一態様である中継装置は、パケット交換方式の分散型バスを備える集積回路において、ノード間で伝送されるパケットを中継する中継装置であって、送信ノードを特定する情報が付加されたパケットを格納する複数のバッファと、パケットを格納した前記複数のバッファを、前記パケットの送信ノードに基づいて複数のグループに分類する分類部と、各グループに属するバッファを少なくとも１つ選択する選択部と、選択された前記バッファに格納されたパケットを順次出力する出力ポートとを備えている。
【００８０】
ある態様において、前記パケットには、時間情報が付加されており、分類されたグループにバッファが２以上属しているときは、前記選択部は、各バッファに格納された前記パケットの時間情報に基づいて、２以上のバッファのうちの１つを、優先順位が最も高いバッファとして選択し、分類されたグループにバッファが１つのみ属しているときは、前記選択部は、前記バッファを優先順位が最も高いバッファとして選択する。
【００８１】
ある態様において、前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、各パケットの時間情報に基づいて定められる順序で出力する。
【００８２】
ある態様において、前記時間情報は、パケットが送信先のノードに届くべき締切時刻であり、前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、前記締切時刻の近い順に出力する。
【００８３】
ある態様において、前記時間情報は、パケットが送信元のノードから送信された送信時刻であり、前記出力ポートは、各グループの前記優先順位が最も高いバッファに格納された各パケットを、前記送信時刻が古い順に出力する。
【００８４】
ある態様において、前記中継装置は、送信ノードごとに、パケットの流れの混み具合の程度を示す指標を測定する測定部であって、前記混み具合が大きいほど、大きい指標を測定する測定部と、前記指標が大きい送信ノードほど、前記出力ポートからより多くのパケットが出力されるよう、出力量を決定する決定部とをさらに備えている。
【００８５】
ある態様において、前記測定部は、前記分類部によって分類されたバッファの数を、前記パケットの流れの混み具合を示す指標として測定する。
【００８６】
ある態様において、前記測定部は、パケットが自中継装置に到着してから、出ていくまでの通過時間を、前記パケットの流れの混み具合を示す指標として測定する。
【００８７】
ある態様において、前記測定部は、バスの利用帯域を、前記パケットの流れの混み具合を示す指標として測定する。
【００８８】
ある態様において、前記送信ノードは、１つのバスマスタ、または複数のバスマスタの集合体であり、前記分類部は、前記１つのバスマスタ、前記複数のバスマスタの集合体、または、前記パケットが伝送経路上で通過した１つまたは複数の中継装置に基づいて、前記複数のバッファを前記複数のグループに分類する。
【００８９】
ある態様において、前記分類部は、前記パケットが伝送経路上で通過した中継装置に応じて、パケットを格納した前記複数のバッファを、複数のグループに分類する。
【００９０】
ある態様において、送信ノードは複数存在し、かつ、各送信ノードは予め複数のグループのいずれかに属するよう分類されており、前記分類部は、前記パケットを送信した送信ノードが所属するグループに応じて、パケットを格納した前記複数のバッファを複数のグループに分類する。
【００９１】
（実施形態１）
図６は、本実施形態による中継装置の動作の概要を説明する図である。マスタＡとマスタＢとは、ＮｏＣ上の中継装置Ａと中継装置Ｂを介して共通のメモリに接続されている。マスタＡとマスタＢがそれぞれそのメモリ対してパケットを送信した様子を示している。
【００９２】
中継装置Ａと中継装置Ｂは、それぞれ入力ポートと出力ポートを２つずつ備え、各入力ポートには４つずつ仮想チャネル（ＶＣ）を備えている。
【００９３】
本実施形態にかかる中継装置は、仮想チャネルの割当て（ＶＡ）を行う際に、割当て済みの仮想チャネルで送信されるパケットの送信ノードを参照する。そして、複数の送信ノードからパケット（フリット）を受信している場合には、各送信ノードから送信されたパケット（フリット）が格納された仮想チャネルに対し、隣接する中継装置の少なくとも１つの仮想チャネルを割り当てる（ＶＡ）。換言すると、ある送信ノードから送信されたパケットが、隣接する中継装置の仮想チャネルを占有しないよう、そして、全ての送信ノードのパケットが送信スケジューリングを維持できるよう、各送信元に対し、中継装置の仮想チャネルを１つ以上割り当てる（ＶＡ）。
【００９４】
例えば図６では、本発明の一態様にかかる中継装置Ａは、中継装置Ｂにおいて仮想チャネルを割り当てられたパケットの送信ノードをそれぞれ特定し、マスタＡとマスタＢとから送信された各パケットを格納した仮想チャネルに対して、割り当てられる中継装置Ｂの仮想チャネルの数が同じになるよう、仮想チャネルの割当てを行う。中継装置Ａが、マスタＡとマスタＢからのパケットを格納した仮想チャネルに対して中継装置Ｂの仮想チャネルを１つ以上割り当てる。これにより、クロスバスイッチの切替え（ＳＡ）による送信スケジューリングが可能となり、マスタ毎の要求に合わせた帯域制御を維持することが可能なる。
【００９５】
図７は、本実施形態において想定する分散型のバスの構成図である。
【００９６】
本実施形態では、送信ノードとしての複数のバスマスタ（ＢＭ）と、受信ノードとしての複数のメモリ（Ｍ）とを、複数の中継装置（Ｒ）を介して接続した構成（多段接続網、ＭＩＮ：Ｍｕｌｔｉｓｔａｇｅ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎ  Ｎｅｔｗｏｒｋ）を例に説明する。各中継装置は、２入力２出力であるとする。
【００９７】
図７では、８個のバスマスタ（ＢＭ０〜ＢＭ７）と、１２個の中継装置（Ｒ０〜Ｒ１１）と、８個のメモリ（Ｍ０〜７）とがバスで接続される回路の様子を示している。図７の最も左に示された３桁の数字は、バスマスタ（送信ノード）のアドレスを示す。また、図７の最も右に示された３桁の数字は、メモリ（宛先ノード）のアドレスを示す。
【００９８】
１２個の中継装置は、４個ずつ３つのグループに分類されている。３つのグループは、８個のバスマスタに接続されるグループ（Ｒ０、Ｒ１、Ｒ２、Ｒ３）、８個のメモリに接続されるグループ（Ｒ８、Ｒ９、Ｒ１０、Ｒ１１）、及びバスマスタ、又はメモリに接続する中継装置を結ぶグループ（Ｒ４、Ｒ５、Ｒ６、Ｒ７）である。
【００９９】
多段接続網を構成する各中継装置は、２入力２出力のクロスバスイッチを備えている。各中継装置では、クロスバスイッチを切替え、入力ポートと出力ポートの接続の組合せを変更することで、パケットの伝送経路を変更できる。なお、１つの中継装置から出力ポートが異なる伝送経路に対しては、フリットを同時に送信できる。
【０１００】
多段接続網では、各中継装置でのスイッチの切替えによって、全バスマスタと全メモリ間で、必ず１つ以上の伝送経路を構築することができる。
【０１０１】
一般的に、クロスバスイッチによって、Ｎ個のバスマスタとＭ個のメモリのすべてを接続するためには、スイッチがＮ×Ｍ個の必要となる。そしてバスマスタやメモリの数が増えるにつれて、スイッチの数は急激に増加してしまう。これに対し、多段接続網（ＭＩＮ）では、入出力ポートの数が少ないクロスバスイッチを階層的に接続することで小さなスイッチのみでバスマスタとメモリ間の接続を切り替えることができるという特徴がある。
【０１０２】
なお、本実施形態においては多段接続網を例に挙げて説明するが、これは一例である。集積回路の構成がその他のトポロジーであっても上述した技術を適用することが可能である。また、本実施形態では、バスマスタからメモリへのデータ転送は、パケット交換方式により複数の中継装置を介して行われるとして説明する。
【０１０３】
また各中継装置に、送られてきたフリットは、スイッチの切替えによって目的の経路へと続く中継装置や、宛先のノードへ送信される。
【０１０４】
なお図７では、バスマスタからメモリにフリットが送信される例を想定しているが、これは一例である。フリットの宛先はメモリには限られない。フリットの宛先は、例えば、他のバスマスタであってもよいし、周辺機器と接続するための入出力インターフェイスであってもよい。
【０１０５】
図８は、本実施形態にかかる中継装置１２０１の構成図である。
【０１０６】
中継装置８０１は、入力バッファ８０２と、スイッチ８０３と、出力バッファ８０４と、仮想チャネル情報管理部８０５と、出力ポート選択部８０６と、送信ノード分類部８０７と、時間情報比較部８０８と、出力チャネル選択部８０９と、仮想チャネル選択部８１０と、スイッチ切替部８１１とを有している。
【０１０７】
以下、各構成要素の機能を説明する。
【０１０８】
入力ポート８１２は、隣接する中継装置、又は送信ノード（たとえば図７のＢＭ０〜ＢＭ７）から送られてきたフリットを受信する。
【０１０９】
入力バッファ８０２は、入力ポート側で隣接する中継装置８０１ａ（又は送信ノード）から送られてきたフリットを蓄えるバッファである。
【０１１０】
入力バッファ８０２を構成する一時バッファは、中継装置８０１の入力ごとに１つ設けられていてもよいし、又は異なるパケット毎に個別のチャネルを利用して送信スケジュール制御ができるように、入力ごとに複数の仮想チャネル８１３が設けられていてもよい。本実施形態では、図８に示すように入力バッファ８１２毎に４個ずつ仮想チャネル８１３を備えているとする。
【０１１１】
クロスバスイッチ８０３は、中継装置８０１の入力ポート８１２と出力ポート８１４の排他的な接続を切り替えるスイッチである。
【０１１２】
出力バッファ８０４は、後述する出力ポート８１４の先に接続された中継装置群８０１ｂへ、フリットを送信する際に利用される一時バッファである。
【０１１３】
出力バッファ８０４には、さらに複数の出力チャネル８１５が設けられている。出力チャネル８１５は、出力ポート８１４の先に接続された中継装置８０１ｂの入力バッファ内の仮想チャネルと同じ数だけ設けられており、隣接の中継装置群８０１ｂの仮想チャネルと１対１の対応関係が決められている。
【０１１４】
出力ポート８１４は中継装置８０１から、隣接する中継装置８０１ｂ、又は受信ノードへフリットを送信する。
【０１１５】
中継装置８０１から送信されるフリットは、送信に利用した出力チャネルに対応する出力ポート８１４の先に接続された中継装置８０１ｂの仮想チャネルに蓄えられる。すなわち、中継装置８０１は、フリットの送信に利用する出力チャネル８１５を選択することで、出力ポート先８１４の中継装置８０１ｂにおいて送信したフリットを格納する仮想チャネルの指定ができる。
【０１１６】
仮想チャネル情報管理部８０５は、各仮想チャネル８１３に格納されるフリットに関する情報を管理する。仮想チャネル情報管理部８０５が管理している情報の内容の詳細は、後に図９を用いて説明する。
【０１１７】
出力ポート選択部８０６は、入力バッファ８１４に新しいヘッダーフリットが送られてくると、ヘッダーフリットに記述された宛先情報を基に、次に受け渡す中継装置８０１ｂへと続く出力ポートを選択する。
【０１１８】
送信ノード分類部８０７は、各仮想チャネル内に格納されているパケットの送信ノードの違いによって、仮想チャネルのグループ分けを行う。
【０１１９】
時間情報比較部８０８は、各仮想チャネル８１３に格納されたパケットに付与された時間情報に基づく優先度を比較し、優先度の高い順に仮想チャネルに仮想チャネルの割当ての順番をつける。
【０１２０】
本実施形態では、パケットに付与される時間情報は、パケットが宛先ノードに到着する締切時刻であるとする。また時間情報に基づく優先度は、パケットが宛先ノードに到着するまでの締切り時間が一番短いパケットほど優先度が高いとする。
【０１２１】
出力チャネル選択部８０９は、各仮想チャネル８１３内に格納されているフリットのうち、送信ノード分類部８０７による送信ノード毎の分類結果と、さらに時間情報比較部８０８によるパケットの締切時刻の比較結果を基に、出力バッファ８０４における未割当の出力チャネル８１５を選択する。
【０１２２】
仮想チャネル選択部８１０は、入力ポート８１２毎に複数の仮想チャネル８１３の中から、フリットを送信する仮想チャネル８１３の候補を１つ選択する。
【０１２３】
スイッチ切替部８１１は、クロスバスイッチ８０３の接続を切り替えることによって、仮想チャネル選択部８１０で選択された仮想チャネルと各出力ポート８１４の間での排他的な接続を決定し、クロスバスイッチ８０３の接続を切り替える。
【０１２４】
なお、本願明細書では中継装置８０１が受信したフリットを仮想チャネルに格納する処理に関与する入力ポート８１２、入力バッファ８０２、仮想チャネル８１３の集まりをまとめて入力部と定義する。また、仮想チャネルに格納されているフリットを中継装置８０１から出力する処理に関与するクロスバスイッチ８０３、仮想チャネル選択部８１０、スイッチ切替部８１１、出力バッファ８０４、出力チャネル８１５、出力ポート８１４の集まりをまとめて、出力部と定義する。
【０１２５】
図９は、仮想チャネル情報管理部８０５で管理され保持される仮想チャネル情報９０１の一例である。
【０１２６】
仮想チャネル情報９０１は、各仮想チャネルを区別するために、入力ポートと仮想チャネルの識別番号が割り当てられており、さらに、仮想チャネルにパケットが格納されると、パケットの送信ノードを特定するためのアドレス情報、パケットの宛先を特定するためのアドレス情報、パケットが宛先に届くまでの締切時間など、パケットの送信スケジューリングにおいて利用される時間情報、パケットを宛先へ届けるための出力ポートの番号、出力チャネルの番号が管理される。なお、時間情報は締切時間でなくてもよく、例えば、パケットの送信時刻であってもよい。
【０１２７】
また、出力チャネル番号は、出力ポートから送信したパケットを格納する、受信ノードである中継装置の仮想チャネルの番号に対応している。
【０１２８】
本実施形態では、出力ポート８１４に出力チャネル８１５を備えた中継装置８０１の例を説明するが、出力チャネル８１５を備えない中継装置では、仮想チャネル情報９０１の出力チャネル番号として、隣接する中継装置８０１ｂにおいて利用する仮想チャネルの番号が記録される。
【０１２９】
次に、各中継装置８０１の動作と仮想チャネル情報９０１の関係を、図１０のフローチャートと図１１から図１８とを用いて説明する。なお、図１１から図１８において、図８、図９と同じ構成には、同じ番号を付与し説明を省略する。
【０１３０】
ＮｏＣの回路が起動すると中継装置８０１は、入力ポート８１２を介して隣接する中継装置８０１ａ、又は送信ノードからのフリットの受信待ち状態となる。これにより図１０に示す処理が開始される。
【０１３１】
図１１（Ａ）は中継装置８０１内の、仮想チャネル８１３の様子を示している。また、図１１（Ｂ）は、中継装置８０１の入力ポート０において、まだフリットを受信していない状態の時の、仮想チャネル情報９０１を示している。
【０１３２】
以下、本明細書では入力ポート０に関する仮想チャネル情報９０１のみを例示する。
【０１３３】
図１１では、まだフリットが届いていないため、仮想チャネルは未使用状態となる。
【０１３４】
図１０のステップ１００１において、中継装置８０１の入力ポート８１２は、フリットを受信したかどうかを判断する。
【０１３５】
フリットを受信した場合には処理はステップ１００２に進み、フリットを受信していない場合には処理はステップ１００３に進む。フリットを受信した場合には処理はステップ１００２に進み、フリットを受信していない場合には処理はステップ１００３に進む。
【０１３６】
ステップ１００２において、入力ポート８１２は、仮想チャネル８１３に受信したフリットを格納する。なおフリットが格納される仮想チャネル８１３は、隣接する中継装置８０１ａや送信ノードによって予め決定されている。
【０１３７】
ステップ１００３において、入力バッファ８０２は、各仮想チャネル８１３内にフリットが存在するか否かを判断する。フリットが存在する場合には、処理はステップ１００４に進み、フリットが存在しない場合には、処理はステップ１００１に戻る。
【０１３８】
ステップ１００４において、中継装置８０１の仮想チャネル８１３は、仮想チャネル８１３の先頭に格納されたフリットが、ヘッダーフリット３０４であるかどうかを判定する。仮想チャネル８１３の先頭フリットがヘッダーフリットである場合は処理はステップ１００５に進み、ヘッダーフリットでない場合は処理はステップ１００８へ進む。
【０１３９】
図１２（Ａ）は、図１１（Ａ）から１サイクル時間が進み、入力ポート０に届いたヘッダーフリット３０４が仮想チャネル０に格納された様子を示している。
【０１４０】
ヘッダーフリット３０４が仮想チャネル８１３に届くと、仮想チャネル情報管理部８０５は、図１０のステップ１００５において、中継装置８０１での送信スケジューリングにおいてパケットの送信順序の決定に利用される情報を仮想チャネル情報９０１に記録する。パケットの送信順序の決定に利用される情報とは、たとえば、ヘッダーフリット３０４に記載されている送信ノード送信元と受信ノード宛先のノードのそれぞれのアドレス、パケット全体が宛先のノードに届くまでの締切時刻である。
【０１４１】
また、図１２（Ｂ）は、ヘッダーフリット３０４に付与された送信ノードおよび宛先のアドレス、送信時刻情報が反映された後の仮想チャネル情報９０１の内容を示す。ここでは、パケットの送信ノードとしてＢＭ２のアドレス０１０（図７）と、宛先としてメモリ５のアドレス１０１（図７）と、パケットが宛先ノードに届くまでの締切時刻９０（サイクル）とが仮想チャネル情報９０１に記録される。
【０１４２】
図１３（Ａ）は、図１２（Ａ）からさらに１サイクル時間が進み、ヘッダーフリットに続いて、データフリットが仮想チャネル０に格納された様子を示す。
【０１４３】
中継装置８０１の出力ポート選択部８０６は、図１０のステップ１００６において、ステップ１００５で更新された仮想チャネル情報９０１を参照してパケットの宛先を特定し、パケットを宛先へ送信するための出力ポート８１４を選択する。
【０１４４】
ここで、図７に示した多段接続網を用いて、出力ポート８１４を選択する方法の一例を説明する。図７に示す多段接続網では、各メモリには、３桁の２進数でアドレスが割り当てられ、各パケットのヘッダーフリットには、宛先となるメモリのアドレスが、３桁の２進数で付与されている。
【０１４５】
実施形態１の出力ポート選択部８０６は、ヘッダーフリットに付与された３桁のアドレスのうち、左から中継装置の段数と同じ桁の数字を読み取る。そしてその値が０ならば図１２において出力ポート０を選択し、値が１ならば図１２で出力ポート１を選択する。
【０１４６】
例えばバスマスタＢＭ２（アドレス：０１０）から、メモリ５（アドレス：１０１）へデータを送る場合を考える。メモリ５のアドレスに記載された３桁の数字に従って、まず中継装置Ｒ１は右下の中継装置Ｒ７へフリットを送信する。次に中継装置Ｒ７は右上の中継装置Ｒ１０にフリットを送信する。最後に中継装置Ｒ１０は右下のメモリ５へフリットを送信する。これにより、バスマスタＢＭ５からメモリ２へとフリットが伝送される。
【０１４７】
なお、出力ポート選択部８０６で出力ポートの選択方法としては、分散バスのトポロジーに応じて、適切に目的地までフリットが送られる方法であれば、上記以外の方法であってもよい。
【０１４８】
図１３（Ｂ）は、中継装置８０１の仮想チャネル８１５の出力ポート８１４が選択された後の仮想チャネル情報９０１を示している。出力ポート０が選択されていることが理解される。これにより、中継装置８０１は仮想チャネル０の内のパケットを、宛先であるメモリ５へと向う出力ポート０へ送信することが可能になる。
【０１４９】
図１４（Ａ）は、図１３（Ａ）から１サイクル時間が進み、仮想チャネル０にヘッダーフリット３０４、データフリット３０５に続き、テイルフリット３０６が格納された様子を示している。
【０１５０】
中継装置８０１は、図１０のステップ１００７において、送信ノード分類部８０７と、時間情報比較部８０８、出力チャネル選択部８０９は、仮想チャネル情報管理部８０５を参照し、仮想チャネルに格納されているパケットを送信ノードの違いに基づくグループに分類し、さらに分類されたグループ毎にパケットが宛先に届くまでの締切時間が最も短いパケットを格納している仮想チャネルを特定する。さらに特定された仮想チャネルのうちで、出力チャネルが未設定のものがあれば、その仮想チャネルに対して出力チャネルを割り当てる。
【０１５１】
先の図１３（Ａ）に示されるように、中継装置８０１には、出力ポート０が選択されたものの、出力チャネルが未選択の仮想チャネル０が存在する。また、出力ポート０に未使用の出力バッファ０が存在する。そこで出力チャネル選択部８０９は、入力ポート０の仮想チャネル０に対して、出力ポート０の出力チャネル０を割り当てる。
【０１５２】
図１４（Ｂ）は中継装置８０１出力チャネル８１５が決定された後の仮想チャネル情報９０１を示している。仮想チャネル情報９０１では、仮想チャネル０に対して選択された出力チャネル番号０が選定される。
【０１５３】
ここでは説明を簡単にするため、起動直後の中継装置８０１に１個のパケットが届いた場合を例に説明を行ったが、複数のパケットが中継装置８０１に届いた直後に、各仮想チャネル８１３に対して、出力チャネル８１４を割り当てる処理については、図１７を用いて後で詳細に説明する。
【０１５４】
図１５（Ａ）は、図１４（Ａ）から１サイクル時間が進んだ中継装置８０１の仮想チャネル８１５の様子を示している。
【０１５５】
図１０のステップ１００８において、中継装置８０１の仮想チャネル選択部８１０は、入力ポート８１２毎に、出力チャネルが割当て済みの仮想チャネルの中から仮想チャネルを１つ選択する。
【０１５６】
さらに、中継装置８０１のスイッチ切替部８１１は、仮想チャネル選択部８１０により、入力ポート８１２毎に１つ選択された仮想チャネル間で、出力ポートが競合しているか否かを判定する。もし、出力ポートが競合する仮想チャネルがあれば、その中から１つ仮想チャネルを選択する。
【０１５７】
これにより、出力ポート８１４毎にフリットを送信する仮想チャネル８１３が選択され、その結果に基づきスイッチ切替部８１１は、選択された仮想チャネル８１３を含む入力ポート８１２と出力ポート８１４が接続するようにクロスバスイッチ８０３の接続を切り替える。
【０１５８】
クロスバスイッチが切り替えられると、ステップ１００９おいて、仮想チャネル選択部８１０とスイッチ切替部８１１で選択された仮想チャネル８１３は、それぞれフリットを送信する。
【０１５９】
図１５（Ｂ）は、ヘッダーフリットからデータフリットまでが送信されている状態における仮想チャネル情報９０１の様子を示している。テイルフリットはまだ送信されていない。
【０１６０】
図１６（Ａ）は、テイルフリットが中継装置８０３から送信された時の、各仮想チャネル８１３の様子を示している。
【０１６１】
図１０のステップ１０１０において、仮想チャネル８１４は、フリットを送信する際に、送信したフリットがパケットを構成する最後のフリットであるかどうかを判定する。
【０１６２】
図１０のステップ１０１１において、送信したフリットがパケットを構成する最後のフリットであった場合には、別のパケットがその仮想チャネルを利用できるよう、これまで確保されていた仮想チャネルを開放する。仮想チャネル情報管理部８０５は、テイルフリットを送信した仮想チャネル８１４に関する情報を初期化する。
【０１６３】
図１６（Ｂ）は、テイルフリット１１０６が送信された後の仮想チャネル情報９０１を示している。入力ポート０の仮想チャネル０内からテイルフリットが送信されたことにより、仮想チャネル情報管理部８０５は、入力ポート０の仮想チャネル０に関する情報を初期化する。
【０１６４】
以上、ステップ１００１からステップ１０１１の処理を繰り返すことで、中継装置８０１は、パケットを宛先へと中継処理を行う。
【０１６５】
図１７は、図１０のステップ１００７において、出力チャネル選択部８０９が、仮想チャネル８１３に対して出力チャネル８１５の出力チャネルを割り当てる処理（仮想チャネル割当：Virtual channel Allocation）を示すフローチャートである。
【０１６６】
また図１８（Ａ）は、中継装置８０１に複数のパケットが同時に届いた場合の仮想チャネル８１３の様子を示している。中継装置８０１には、同じパケットを構成するフリットが連続して届く場合だけではなく、異なるパケットを構成するフリットが混じって届く場合が発生する。また、図１８（Ｂ）は、仮想チャネル８１３が図１８（Ａ）の状態にある場合の仮想チャネル情報９０１の内容を示している。
【０１６７】
図１８（Ａ）、及び図１８（Ｂ）によれば、中継装置８０１に設けられた入力ポート０の仮想チャネル１には、送信ノード０１０から宛先０００へのパケットが到達している。そして、締切時刻が１４０以内のパケットを構成するヘッダーフリットとデータフリットが１つ格納され、出力ポート０が設定されている。出力チャネルは未設定である。
【０１６８】
一方、入力ポート０の仮想チャネル２には、送信ノード０１０から宛先０００へ送信されるパケットが到達している。そして、締切時刻が１０５サイクルのパケットがパケットを構成するデータフリットが１つ格納され、出力ポート０と出力チャネル０が設定されている。
【０１６９】
一方、入力ポート１の仮想チャネル０には、送信ノード１１１から宛先０１０へ送信されるパケットが到達している。そして、締切時刻が１２５サイクルのパケットを構成するヘッダーフリットと、データフリットが１つ格納され、出力ポート０が設定されている。
【０１７０】
入力ポート１の仮想チャネル１には、送信ノード１１０から宛先０１１へ送信されるパケットが到達している。締切時刻が１３０サイクルのパケットを構成するヘッダーフリットが格納され、出力ポート０が設定されている。
【０１７１】
入力ポート１の仮想チャネル２には、送信ノード１１１から宛先０１０へ送信されるパケットが到達している。締切時刻が１１８サイクルのパケットを構成するヘッダーフリットが格納され、出力ポート０が設定されている。
【０１７２】
以下、中継装置８０１の仮想チャネルが図１８の状態にある場合を例に、図１７を用いて仮想チャネルに対する出力チャネルの割当の詳細を説明する。
【０１７３】
ステップ１７０１において、出力チャネル選択部８０９は、出力ポートが選択され、かつ、出力チャネルが未選択の仮想チャネル８１３が存在するかどうかを判断する。出力ポートが選択され、出力チャネルが未選択の仮想チャネル８１３が存在しなければ、ステップ１７０１を繰り返す。出力ポートが選択され、出力チャネルが未選択の仮想チャネル８１３が存在すれば、処理はステップ１７０２に移る。
【０１７４】
ステップ１７０２において、仮想チャネル８１３は、出力ポート８１４に空きの出力チャネル８１５が存在するかどうかを判定する。出力チャネル８１５に空きが無ければステップ１７０２を繰り返す。出力チャネル８１５に空きがあれば処理はステップ１７０３に移る。
【０１７５】
ステップ１７０３において、送信ノード分類部８０７は、パケットの送信ノードの違いに応じて、出力チャネルが未選択の仮想チャネルをグループ分けする。
【０１７６】
図１９は、中継装置８０１の仮想チャネル８１３の内容が図１８（Ｂ）の場合における、送信ノード分類部８０７が仮想チャネルを分類した結果の例を示す。つまり図１９は、送信ノードの違いによる仮想チャネルのグループ分けを示す。
【０１７７】
図１８（Ｂ）に示されるように、仮想チャネル８１５には、３種類の送信ノード（アドレスは０１０、１１０、１１１）から到達したフリットが格納されている。すなわち仮想チャネルは送信ノードに応じて、すなわち送信元のアドレスに応じて３つのグループに分類される。送信ノードのアドレスが０１０のグループには入力ポート０の仮想チャネル１が分類され、送信ノードのアドレスが１１０のグループには、入力ポート１の仮想チャネル１が分類され、送信ノードのアドレスが１１１のグループには、入力ポート１の仮想チャネル０と仮想チャネル３が分類される。
【０１７８】
なお、図１９の最下段に示される「設定済みの出力チャネル数」とは、出力チャネル番号の設定までが完了している仮想チャネル数を示している。図１８（Ｂ）の例では、仮想チャネル番号２の仮想チャネルが出力チャネル番号まで設定されており、他の仮想チャネルは出力チャネル番号が設定されていない。したがって、送信元のアドレスごとに分類すると、アドレス「０１０」の送信元の欄のみ「１」が記載され、他は「０」となる。
【０１７９】
次にステップ１７０４において、時間情報比較部８０８は、仮想チャネル情報９０１に記録されている締切時刻を参照し、送信ノードのアドレスの違いで分類された各グループの仮想チャネル毎に、締切時刻がもっとも近いパケットを格納する仮想チャネルを優先順位１として選択する。このとき、既に割り当て済みの仮想チャネルは優先順位の設定対象から除外される。
【０１８０】
図１９では、送信ノードのアドレスが０１０のグループでは、入力ポート０の仮想チャネル１が選択され、送信ノードのアドレスが１１０のグループでは、入力ポート１の仮想チャネル１が選択され、送信ノードのアドレスが１１１のグループでは、入力ポート１の仮想チャネル０が選択される。
【０１８１】
このステップＳ１７０４の処理により、出力チャネル選択部８０９は、すべての送信ノードに対して１つ以上出力チャネルを割り当てることができる。なお、ある送信ノードに関し、すべての仮想チャネルに対して元々出力チャネルが割り当てられている場合には、その送信ノードに関しては、上述の処理による優先順位の決定から除外される。
【０１８２】
次にステップ１７０５において、設定済み出力チャネル数が０の送信ノードのパケットが存在するか否かを判断する。存在する場合には処理はステップＳ１７０６に進み、存在しない場合には処理はステップＳ１７０７に進む。
【０１８３】
出力チャネルが設定されていない送信ノードのアドレスがあれば、ステップ１７０６に移り、出力チャネルが設定されていない送信ノードのアドレスがなければ、ステップ１７０７に移る。
【０１８４】
図１９の例では、送信ノードのアドレスが０１０のグループでは、既に送信ノードのアドレスが同じ入力ポート０の仮想チャネル２に対し出力チャネルが割当てられているので、設定済みの出力チャネル数は１となる。送信ノードのアドレスが１１０と１１１のグループでは、送信ノードのアドレスが同じ仮想チャネルで、出力チャネルが割当りあてられているものが存在しないため、設定済みの出力チャネル数は０となる。このため図１９の例では、出力チャネルが未設定である送信ノードのアドレス（１１０、１１１）が存在するので、ステップ１７０６に移る。
【０１８５】
次にステップ１７０６において、出力チャネル選択部８０９は、出力チャネルが未設定の送信ノードの仮想チャネルの中で、締切時間が最も近い仮想チャネル、換言すると、優先度が最も高い仮想チャネルを１つ選択する。
【０１８６】
図１９の例では、出力チャネルが未設定のグループ（１１０、１１１）の中で、締切時間が最も近い入力ポート１の仮想チャネル０が選択される。
【０１８７】
すべての送信ノードに対して、１つ以上、出力チャネルが割当てられる仮想チャネルが存在する場合には、ステップ１７０７において、出力チャネル選択部８０９は、すべてのグループの中で、締切時刻が最も近い仮想チャネルに対して出力チャネルを割り当てる。
【０１８８】
以上のように、ステップ１７０１からステップ１７０７を繰り返すことにより、中継装置８０１は、すべての送信ノードに対して、1つ以上出力チャネルを割当てつつ、締切時間の近い仮想チャネルから優先的に出力チャネルを割当てることができる。
【０１８９】
図２０（Ａ）および（Ｂ）は、図１０のステップ１００８において、仮想チャネル選択部８１０とスイッチ切替部８１１が、出力ポートと出力チャネルが選択された仮想チャネル８１３に対して出力ポートへの接続し、フリットの送信タイミングを割り当てる処理（スイッチ割当：Ｓｗｉｔｃｈ Allocation）を説明する図である。
【０１９０】
図２０（Ａ）はその動作の一例を説明するフローチャートである。また図２０（Ｂ）は、仮想チャネルが選択済みの仮想チャネルに対して、出力ポートの接続が決定する動作の流れを説明する図である。
【０１９１】
ステップ２００１において、仮想チャネル選択部８１０は、入力ポート毎に、出力チャネルが設定されている仮想チャネルを１つ選択する。
【０１９２】
例えば図２０（Ｂ）の例では、入力ポート０と入力ポート１にそれぞれ仮想チャネルが４個ずつ備えられており、入力ポート０では、仮想チャネル０と３に対して出力チャネルが設定されている状態にある。また入力ポート１では、仮想チャネル０と１と２に対して出力チャネルが設定されている状態にある。
【０１９３】
仮想チャネル選択部８１０は、それぞれの入力ポートにおいて、出力チャネルが設定済みになっている仮想チャネルの中から１つ仮想チャネルを選択する。図２０（Ｂ）では、仮想チャネル選択部８１０は入力ポート０に対しては仮想チャネル０を選択し、入力ポート１に対しては仮想チャネル１を選択している。
【０１９４】
次にステップ２００２において、スイッチ切替部８１１は、出力ポート毎に、入力ポート側で選択された仮想チャネルで、出力ポートの設定が競合するもののなかから１つ仮想チャネルを選択する。
【０１９５】
図２０（Ｂ）において、例えば入力ポート０で選択された仮想チャネル、および入力ポート１で選択された仮想チャネルが共に、出力ポート０に設定されている場合、スイッチ切替部８１１は、２つの仮想チャネルの一方を選択する。
【０１９６】
なお、スイッチ割当てについては、上記に説明した以外の方法であっても良い。
【０１９７】
例えば図２０（Ａ）のステップ２００１における入力ポート毎の仮想チャネルの選択と、ステップ２００２において出力ポート毎の仮想チャネルの選択において、複数の仮想チャネルを１サイクル毎に、ラウンドロビンにより順番に選択する方法や、確率的にランダムに選択しても良い。このように１サイクル毎に、フリットを送信する仮想チャネルを変更した場合には、送信元の異なるパケットをフリット単位でインターリーブして複数のパケットを見かけ上並列的に出力を行うことができる。
【０１９８】
このように、本実施形態の中継装置８０１は、パケットの送信ノードを区別して、ＮｏＣの中継装置において限られた仮想チャネルを異なる送信ノードから送信されたパケットに対して割り当てることで、送信ノードが同じのパケットが中継装置８０１の仮想チャネルを占有し、送信ノードが異なるパケット間で送信タイミングのスケジューリングが行えなくなる状況を回避し、伝送性能（スループット、遅延時間、ジッター）の低下を抑制する。
【０１９９】
本実施形態では、時間情報比較部８０８において、パケットに付与された締切時刻に基づいて出力チャネルの割当を行った。しかしながら、締切時間以外でも、パケットの中継に関する時間情報を基準に、出力チャネルの割当の優先順位を定義してもよい。
【０２００】
図２１は、時間情報、及び時間情報に基づく優先度の比較基準の例を示す。
【０２０１】
時間情報としては、例えば、パケットが送信されてからの経過時間を用いても良い。
【０２０２】
時間情報として送信時刻を管理するためには、半導体システムが動作している期間を表現できるだけの桁数が必要である。よって、半導体システムが長時間動作する場合には時間情報の桁数が大きくなる。
【０２０３】
これに対し、時間情報としてパケットが送信されてからの経過時間を用いる場合には、パケットが送信されてから受信されるまでにかかる時間を表現するだけの桁数があればよいので、比較的、時間情報の桁数を小さく抑えることが可能になる。時間情報として扱う値の桁数が小さければ、時間情報比較部８０８における時間情報の比較回路を小さくできるため、半導体システムのリソース削減に有効である。
【０２０４】
また、送信時刻を用いるとしても、年月日時分秒で表現される送信時刻の一部（例えば、Ｍ桁の送信時刻で、位の小さい方からｎ桁の値（ｎ：Ｍ＞ｎとなる整数））を用いることで、時間情報として扱う桁数を小さくすることができる。ｎ桁の値としては、例えばパケットが送信されてから受信されるまでにかかる時間を表現するだけの桁数を用いることができる。
【０２０５】
また、時間情報として、パケットが受信ノードに届くまでの締切時刻を用いて、締切時刻が近いパケットから順に出力チャネルを割り当てても良い。
【０２０６】
一般的に、バスマスタの種類や処理の内容によって、パケットが受信ノードに届くまでに許容できる遅延時間が異なる。このため、送信ノードから、締切時刻までの時間が比較的に長いパケットが複数送信された後に、締切時刻までの時間が短いパケットが送信される状況を想定すると、中継装置において、送信時刻の古いパケットから順番に出力チャネルを割り当ててパケットを送信するよりも、締切時刻までの残り時間の短いパケットから出力チャネルを割り当ててパケットを送信する方が、より多くのパケットに対し、許容できる遅延時間を遵守できる。
【０２０７】
また、時間情報として、締切り時刻の代わりに締切り時刻までの残り時間を用いても良い。
【０２０８】
本実施形態では、送信ノード分類部８０７において、送信ノードの区別を送信ノードのアドレスとして例に説明を行った。しかしながら、送信ノードの区別の定義は送信ノードのアドレスに限定されるものではない。
【０２０９】
たとえば送信ノードとして、中継装置を指定してもよい。図２２（Ａ）および（Ｂ）は、中継装置Ｒ９からみた種々の宛先の定義、及び各定義に該当し得る宛先の具体例を示している。例えば、図２２（Ａ）の構成において、パケットの送信ノードとなりうる伝送経路上で通過する途中の中継装置を、送信ノードと定義することができる。
【０２１０】
図２２（Ａ）の中継装置Ｒ９に対して、送信ノードがバスマスタであるとすると、中継装置Ｒ９にとっての送信ノードは、バスマスタ０から、バスマスタ７までの８個が対象となる。一方、送信ノードがその中継装置からみて２つ前までの中継装置とすると、中継装置Ｒ９にとっての送信ノードは、４つの中継装置Ｒ０〜Ｒ３となり得る。さらに、宛先の定義を１つ前の中継装置とすると、２つの中継装置Ｒ４、及びＲ５が送信ノードとなり得る。
【０２１１】
また、図２２（Ａ）において、ｎ段目の中継装置が１つ前に通過した中継装置を区別する方法としては、パケットに付与された送信元のアドレスのうち右から（ｎ＋１）桁目の数値で区別することができる。
【０２１２】
例えば、図２２（Ａ）の中継装置Ｒ９は、１段目の中継装置である。そこで、受信したパケットの送信元のアドレスを参照し、右から２桁目の数値が０であれば中継装置Ｒ４を通過したパケットと判定する。また右から２桁目の数値が１であれば中継装置Ｒ５を通過したパケットと判定する。このように、それぞれパケットが１つ前に通過した中継装置を区別することができる。
【０２１３】
また、ｎ段目の中継装置が２つ前に通過した中継装置を判定する方法としては、パケットに付与された送信元のアドレスのうち右から（ｎ＋１）桁目と（ｎ＋２）桁目の数値で区別することができる。
【０２１４】
例えば図２２（Ａ）の１段目の中継装置Ｒ９において受信したパケットの送信元のアドレスを参照する。そして、右から２桁目と３桁目の数値が００であれば中継装置Ｒ０を通過したパケットと判定する。また、右から２桁目と３桁目の数値が０１であれば中継装置Ｒ１を通過したパケットと判定する。また、右から２桁目と３桁目の数値が１０であれば中継装置Ｒ２を通過したパケットと判定する。また、右から２桁目と３桁目の数値が１１であれば中継装置Ｒ３を通過したパケットと判定する。このような手順により、それぞれパケットが２つ前に通過した中継装置を区別することができる。
【０２１５】
このように送信ノードの定義を伝送経路上の途中の中継装置とすることで、実際にパケットを送信するバスマスタを送信ノードとした場合よりも、送信ノード分類部８０７で分類するグループの数を削減でき、仮想チャネル間での送信ノードの比較処理を軽減できる。
【０２１６】
また、送信ノード分類部８０７で分類するグループの数を削減するために、複数の送信ノード毎を１つグループにまとめて、これらを１つの送信元として扱ってもよい。
【０２１７】
たとえば図２３（Ａ）は、メッシュ型のＮｏＣにおけるバスマスタのアドレスを示す。また図２３（Ｂ）は、アドレス（Ｘ、Ｙ）の１桁目の値によるバスマスタのグループ分けを示す。
【０２１８】
以下、図２３（Ａ）に示すメッシュ型のＮｏＣを例に、複数の送受信ノードを１つのグループとして扱う方法を説明する。
【０２１９】
図２３（Ａ）には、（００，００）などのアドレスが与えられた複数のバスマスタと、複数の中継装置（Ｒ）とによって構成されたメッシュ型ＮｏＣが示されている。
【０２２０】
図２３（Ａ）のＮｏＣでは、１６個のバスマスタが縦横４列ずつ格子状に配置されており、中継装置によって接続されている。図２３（Ａ）において、各バスマスタのアドレスは、図２３の横方向をＸ軸、縦方向をＹ軸として、Ｘ軸方向とＹ軸方向における番号をそれぞれ２桁の２進数で定義されている。
【０２２１】
ここで、各バスマスタのアドレスのＸとＹの値の、左から１桁目の値でバスマスタを区別すると、図２３（Ｂ）に示すように、１６個のバスマスタをそれぞれ、アドレスが（０，０）、（０，１）、（１，０）、（１、１）の４つのグループに分類することができる。
【０２２２】
そして、あるグループに属する中継装置に着目すると、自身が所属するグループ内から送信されたパケットと、他の３つのグループの各々から送信されたパケットを格納した仮想チャネルについて、締切時刻がもっとも近いパケットを格納する仮想チャネルを優先順位１として選択すればよい。
【０２２３】
なお、複数の送受信ノードを１つのグループにまとめる方法は、例えば各送受信ノードのアドレスのＸ座標とＹ座標のそれぞれの左から２桁目の値を用いてもよい。
【０２２４】
また、ＮｏＣのトポロジーの形や、各バスマスタのアドレスの決定方法に合わせて変更しても良い。
【０２２５】
送信ノードとされた中継装置にパケットが到達した場合には、その中継装置は再び、図２１（Ｂ）のいずれかの定義にしたがって送信ノードを設定し、パケットを送出すればよい。
【０２２６】
また、送信ノード分類部８０７で分類するグループの数を削減するために、集積回路内のトポロジーやバスの種類の違いに基づいて、複数の送信ノードを１つグループにまとめて、これらを１つの送信元として扱ってもよい。つまり、微視的には複数の送信ノードが存在するが、それら複数の送信ノードを巨視的に見て、全体で１つの送信ノードとして取り扱うことも可能である。
【０２２７】
図２４は、複数のバスマスタ（バスマスタ群）の集合体を１つの送信ノードと見なして取り扱う集積回路１００の構成を示す。
【０２２８】
図２４の集積回路１００は、広い範囲を高速に結ぶ基幹バス１０１と、比較的近い距離を低速に結ぶローカルバス１０２ａ〜１０２ｃの２種類のバスから構成されている。基幹バス１０１とローカルバス１０２ａ〜１０２ｃは、中継装置１０３ａ〜１０３ｃによって接続されている。この中継装置は、伝送帯域の異なるバス間でデータを伝送可能な性能を有している。そのような性能を有する中継装置は、専用に設けられてもよい。
【０２２９】
図２４の例では、ローカルバスＡに属するバスマスタの集まり（バスマスタ群）を送信ノードＡ、ローカルバスＢに属するバスマスタ群を送信ノードＢ、ローカルバスＣに属するバスマスタ群を送信ノードＣとして扱う。なお、ローカルバス内の中継装置は、各バスマスタを各送信ノードとして動作する。
【０２３０】
一般的に、バスの配線や動作周波数の制約により、集積回路上の全てのバスマスタを高速なバスで接続することは容易ではない。そのため、図２４のように、ローカルバスを利用して複数のバスマスタからの送信データを集約し、最寄りの基幹バスまで伝送を行うことで、回路設計において、バスの配線や動作周波数の制約を減らすことができる。
【０２３１】
このように、複数のバスマスタ間の接続が、異なるローカルバスによって分かれている場合に、基幹バス上の中継装置において、送信ノード分類部８０７で分類するグループの数を削減するために、同じローカルバスに属しているバスマスタの集まりを纏めて１つの送信ノードとして扱っても良い。
【０２３２】
バスマスタがどのローカルバスに属しているかを識別する方法としては、複数考えられる。たとえば、以下のとおりである。
（１）送信元のバスマスタを識別できる送信ノードアドレスと、そのバスマスタが所属するローカルバスとの対応関係を定義したテーブルを、各中継装置が送信ノード分類部８０７に保持し、受信したパケットの送信ノードアドレスとテーブルの内容を比較する。これにより、各中継装置は、そのパケットがどのローカルバスから送信されたパケットであるかを識別することができる。
（２）パケットのヘッダフィールド３０１に、ローカルバスを特定する情報を付与しておき、送信ノード分類部８０７が、パケットを受信した中継装置がヘッダフィールド３０１を参照する。これにより、そのパケットがどのローカルバスから送信されたパケットであるかを識別できる。
【０２３３】
図２４では、共通のローカルバスに接続されている複数のバスマスタが、１つの送信ノードと見なされている。なお、ローカルバス単位で送信ノードを規定する必要はなく、たとえばトポロジーやバスの種類の違いに基づいて送信ノードを規定することができる。
【０２３４】
より具体的には、複数のローカルバスを１つに纏めて１つの送信ノードとしても良い。例えば、ローカルバスＣに属するバスマスタ数に対して、ローカルバスＡとローカルバスＢに属するバスマスタ数がそれぞれ少なく、また送信量も少ない場合には、ローカルバスＡとローカルバスＢに属するバスマスタを纏めて１つの送信ノードとして扱う。各送信ノードに属するバスマスタ数の差を減らすことで、送信量の差を減らすことができる。
【０２３５】
（実施形態２）
実施形態１では、実装において仮想チャネル数やサイズの制約のある、半導体回路上の中継装置において、中継装置が送信するパケットの送信ノードを区別して、それぞれの送信ノードのパケットに対して、隣接する受信ノードである中継装置の仮想チャネルを１つ以上割当てるとした。これにより、異なる送信ノードから届いた複数のパケットに対し送信スケジューリング可能な状態を維持し、その伝送効率（スループットや伝送遅延）の向上を行った。
【０２３６】
本実施形態では、さらに、送信ノードごとにパケットの送信レートが異なる場合、中継装置は、隣接する受信ノードである中継装置で仮想チャネルの割り当て数を、それぞれの送信ノードからのパケットの込み具合に応じて調整し、混雑しているパケットに対し、優先的に隣接する中継装置の仮想チャネルを割当てることでＮｏＣでの伝送効率を向上させる。
【０２３７】
送信ノードの違いによって中継装置内でのパケットの込み具合が異なる場合として、例えば、図５の例ではマスタＡからのパケットの送信間隔が、マスタＢの送信間隔よりも短く、マスタＡからのパケットの流れが、マスタＢのパケットの流れよりも混雑しており、中継装置Ａにおいて、それぞれのマスタから送信されたパケットが格納されている仮想チャネルの数が４個と２個といった状況が発生する。
【０２３８】
中継装置Ａが自身の仮想チャネルに対して、送信したパケットを中継装置Ｂで格納する仮想チャネルの割当てを、図６のように公平に行うと、混雑の大きいマスタＡからのパケットの流れが、中継器Ａまでの経路上で仮想チャネルを占有しやすくなり、別の送信ノード（例えばマスタＣ）が後からパケットを送信しようとしても、経路上に仮想チャネルの空きがないため、すぐに送信できないという課題が発生しやすい。
【０２３９】
図２５は、本実施形態にかかる中継装置の動作を説明する図である。
【０２４０】
図２５の構成は、図５、図６と同じであるため説明を省略する。
【０２４１】
実施形態２の中継装置Ａは、各送信ノードのパケットに対して、送信スケジューリングを維持できるように、中継装置Ｂの仮想チャネルを最低１つ割当て、さらに中継装置Ａでの仮想チャネルの利用数と中継装置Ｂの仮想チャネル利用数の関係に基づき、混雑が大きい送信ノードのパケットに対して中継装置Ｂの仮想チャネルを優先的に割当てる。
【０２４２】
図２５の中継装置Ａは、例えば、マスタＡからのパケットとマスタＢからのパケットに対して、中継装置Ｂの仮想チャネルを、まず１ずつ割り当て、さらに中継装置Ａ利用している仮想チャネルの数と中家装置Ｂで利用している仮想チャネルの差分が均一に近づくように、各マスタからのパケットに対する中継装置Ｂの仮想チャネルの割り当て量を決定する。
【０２４３】
図２５の例では、まずマスタＡからのパケット、マスタＢからのパケットに対してそれぞれ中継装置Ｂの仮想チャネルを１個ずつ割り当て、さらに、マスタＡからのパケットとマスタＢからのパケットが中継措置Ａで利用する仮想チャネル数の比率が４対１であるため、中継装置Ｂにおいても利用数が４対１に近づくように、マスタＡからのパケットに対して中継装置Ｂの仮想チャネルを優先的に多く（３つ）割当てる。
【０２４４】
図２６は、本実施形態における中継装置の構成を説明する図である。
【０２４５】
実施形態１と同じ構成については、同じ符号を付与して説明を省略する。
【０２４６】
送信負荷測定部２４０１は、送信ノード毎に、パケットの流れ（トラヒック）の負荷、または混み具合を示す値（指標）を測定する。出力チャネル割当量決定部２４０２は、送信ノードの違いで区別されたパケットの送信負荷に応じて、受信ノードである中継装置８０１ｂの仮想チャネルの割当量を決定する。
【０２４７】
図２７は、本実施形態における中継装置の動作を説明するフローチャートである。図１０と同じ処理については、同じ符号を付与し説明を省略する。
【０２４８】
ステップ１７０４において、中継装置８０１に格納されているパケットのすべての送ノードに対して１つ以上、出力チャネル８１５が割当てられている場合、ステップ２５０１において、中継装置８０１の送信負荷測定部２４０１は、送信ノード毎にパケットの流れの込み具合を測定する。
【０２４９】
図２８は、ＮｏＣ上の中継装置８０１において、パケットの流れの混み具合を示す指標の一例を説明する図である。
【０２５０】
送信ノードで区別したパケットの流れの混み具合を示す指標としては、（１）仮想チャネルの利用数、（２）パケットが中継装置に到着してから、出ていくまでの通過時間、（３）バスの利用帯域（使用帯域、設計帯域）などがあげられる。
【０２５１】
以下の説明では、送信ノードで区別したパケットの流れの混み具合を示す指標として、（１）仮想チャネルの利用数を例に説明する。
【０２５２】
ステップ２５０２において、出力チャネル割当量決定部２４０２は、中継装置８０１の仮想チャネルにおいて、送信ノード毎に区別して出力チャネルが未設定の仮想チャネル数と、送信ノード毎に区別して設定済みの出力チャネル（中継装置８０１ｂの仮想チャネルに対応）の数を比較し、その差分を元に割り当ての優先順位を決定する。
【０２５３】
図２９は、出力チャネル割当量決定部２４０２の動作の一例を説明する図である。
【０２５４】
図２９において、中継装置Ａにおいて、出力チャネルが未選択である仮想チャネルが４つあり、その送信ノードはアドレスが０１０、１１０、１１１の３種類ある。そして、送信ノードのアドレスが０１０のパケットは１つ、送信ノードのアドレスが１１０のパケットは１つ、送信ノードのアドレスが１１１のパケットは２つあるとする。既に各送信ノードに対して１つ出力チャネルが割り当てられている。
【０２５５】
出力チャネル割当量決定部２４０２は、送信ノードを区別して出力チャネルが未設定の仮想チャネルの利用数から出力チャネル利用数の差分を求め、それをその送信ノードのパケットに対する出力チャネルの残り割当量とする。
【０２５６】
図２９では、送信ノードのアドレスが０１０のパケットに対する出力チャネルの残り割当量は０、送信ノードのアドレスが１１０のパケットに対する出力チャネルの残り割当量は０、送信ノードのアドレスが１１１のパケットに対する出力チャネルの残り割当量は１となる。
【０２５７】
ステップ２５０３において、出力チャネル選択部８０９は、出力チャネルの残り割当量が１以上のパケットがあればステップ２５０４に移る。出力チャネルの残り割当量がすべて０であり、出力チャネルの割当が行われている場合は、ステップ１７０６に移る。
【０２５８】
さらに、ステップ２５０４において、出力チャネル選択部８０９は、残り割当量が１以上の送信ノードがあれば、その中で最も優先度の高いパケットに対して出力チャネルを割当てる。
【０２５９】
図２９の例では、送信ノードのアドレス１１１の残り割当量が１であるため、その中で最も締切時間が近い、入力ポート１の仮想チャネル０に格納されるパケットに対して出力チャネルを割り当てる。
【０２６０】
以上、図２６の構成と図２７の動作を行うことで、実施の形態２の中継装置は、送信ノード毎にパケットの送信レートが異なる場合、送信ノードで区別したパケットの流れの中で混雑している流れに対し、優先的に隣接する中継装置の仮想チャネルを割り当てることで混雑の増加を緩和でいるため、ＮｏＣでの伝送効率を向上させる。
【０２６１】
以上、本発明の例示的な実施形態を説明した。
【０２６２】
実施形態１および２では、集積回路のトポロジーが多段接続網の場合を例に説明したが、本発明の例示的な中継装置は多段接続網での利用に限定されるものではない。例えば、図３０（Ａ）に示すように中継装置を格子状に並べてメッシュ型トポロジーを構成してもよい。また図３０（Ｂ）に示すように上下左右で中継装置をリング状に接続したトーラス型トポロジーを構成してもよい。さらに図３０（Ｃ）に示すようにバスを階層的に接続した階層型トポロジーなどを構成してもよい。複数のバスマスタを分散型のバスを介して接続したトポロジーであれば、同様に上述した中継装置の適用が可能である。
【０２６３】
図３１は、本発明の一態様にかかる中継装置をメモリバスに利用した例を説明する図である。
【０２６４】
図３１では、携帯電話やＰＤＡ（Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔｓ）、電子書籍リダーなどの携帯端末や、ＴＶ、ビデオレコーダ、ビデオカメラ、監視カメラ等で用いられる半導体回路上のバスマスタ（ＣＵＰ，ＤＳＰ、伝送処理部、画像処理部など）と複数のメモリを分散型のバスを利用して接続させた利用例を示している。
【０２６５】
複数の映像や音楽などの再生、記録、トランスコード、書籍や写真、地図での閲覧や編集、ゲームのプレイなど、複数のアプリケーションやサービスを同時に利用する場合、各バスマスタからメモリへのアクセスが増える。各バスマスタからアクセスするメモリの数が１つだけの場合、アクセスが１箇所に集中してしまう。アクセス集中の解決のためには、メモリ側の入出力の伝送帯域を広げる必要があり、コストが高くなってしまう。
【０２６６】
このメモリアクセスの集中を回避する方法として、アプリケーションやサービス等の種類によってバスマスタが利用するメモリを物理的に分け、これらのバスマスタとメモリを分散型のバスで接続させることで、メモリアクセスの集中の回避が可能となる。
【０２６７】
しかし、例えば図３１において、あるバスマスタが、映像データを保存するためにメモリＡに対して高いレートでデータパケットを送信した場合、各中継装置が送られてきたデータパケットの順序を単純に維持したまま中継すると、伝送経路上の仮想チャネルがすべてメモリＡ宛のパケットで占有される頻度が多くなる。その結果、他のメモリへデータが流れにくくなり、他のアプリケーションやサービスの性能が低下や処理時間の増加が発生してしまう。
【０２６８】
これに対し、本発明の例示的な中継装置を用いた場合には、各中継装置の仮想チャネルにおいて、宛先の異なるパケットに対して、均一に仮想チャネルを割り当てられるため、特定のメモリに向うパケットによる仮想チャネルの占有が回避され、半導体回路上のすべてのアプリケーションやサービスの性能の向上や、処理時間の短縮化ができる。
【０２６９】
なお、上述のメモリは、揮発性のＤＲＡＭであってもよいし、不揮発性のフラッシュメモリであってもよい。揮発性メモリ、及び不揮発性メモリが混在していてもよい。
【０２７０】
図３２は、本発明の例示的な中継装置をマルチコアプロセッサ（ｍｕｌｔｉ−ｃｏｒｅ  ｐｒｏｃｅｓｓｏｒ）上で利用した例を説明する図である。
【０２７１】
図３２では、ＣＰＵやＧＰＵ、ＤＳＰ等のコアプロセッサの処理能力を向上させるために、複数のコアプロセッサをメッシュ状に並べ、これらを分散バスで接続したマルチコアプロセッサである。
【０２７２】
マルチコアプロセッサ上では、各コアプロセッサ間で通信が行われており、例えば、各コアプロセッサには、演算処理に必要なデータを記憶しておくキャッシュメモリが備えられており、コアプロセッサ間で互いのキャッシュメモリの情報をやり取りし、共有が可能であり、これにより性能を向上させることができる。
【０２７３】
しかし、マルチコアプロセッサ上で発生するコアプロセッサ間の通信は、それぞれ配置や距離（中継ホップ数）、通信頻度が異なる。このため、データパケットの順序を単純に維持したまま中継すると、仮想チャネルがすべて特定のコアプロセッサ宛のパケットにより占有されパケットデータが流れにくい中継装置が発生し、マルチコアプロセッサの性能の低下や、処理時間の増加を引き起こす。
【０２７４】
これに対し、本発明の例示的な中継装置を用いた場合には、各中継装置の仮想チャネルにおいて、宛先の異なるパケットに対して、均一に仮想チャネルを割り当てられるため、特定のコアプロセッサに向うパケットにより仮想チャネルが占有された中継装置の発生が回避され、各コアプロセッサの性能の向上や、処理時間の短縮化ができる。
【０２７５】
上述した中継装置は、ハードウェアまたはソフトウェアによって実現することが可能である。たとえば図８に示す各構成要素は、ハードウェア回路として実装され得る。または、それらの中継装置の各構成要素の動作を、設計ツール内の処理として実装し、種々の動作条件をパラメータとして与えることにより、シミュレーションを実行して実際の回路設計を行っても良い。中継装置の１つまたは複数の構成要素を設計ツールとして実装することにより、バスの帯域設計を計算プログラム等で行えるようになり、シミュレーションやエミュレーションによるバス帯域のカット・アンド・トライによる設計と検証が不要となり、開発工数が短縮できるという優れた効果を有する。
【産業上の利用可能性】
【０２７６】
本発明の一実施形態にかかる中継装置は、分散型のバスを備える集積回路において、実装時の制約の大きい仮想チャネルを増やすことなく、送信パケットに対する各中継装置での仮想チャネルの割当て順番のスケジューリングを効率的に行うことで、ＮｏＣ全体での伝送性能（スループット、伝送遅延、ジッター）を向上できる。このため、例えば複数のメディア処理用のＤＳＰや、高速なファイル転送を行うＣＰＵなどを、分散バスを用いて１つのＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）上に集積化する際に、実装に必要なリソースの省資源化と、処理の低遅延化の双方を実現する上で有用である。【０２７７】
また、リソースの省資源化と処理の低遅延化による、集積回路全体での省電化に対しても有用である。
【符号の説明】
【０２７８】
３００  パケット
３０１  ヘッダフィールド
３０２  データフィールド
３０３  制御コードフィールド
３０４  ヘッダーフリット
３０５  データフリット
３０７  テイルフリット
８０１  ８０１a ８０１ｂ  中継装置
８０２  入力バッファ
８０３  クロスバスイッチ
８０４  出力バッファ
８０５  仮想チャネル情報管理部
８０６  出力ポート選択部
８０７  送信ノード分類部
８０８  時間情報比較部
８０９  出力チャネル選択部
８１０  仮想チャネル選択部
８１１  スイッチ切替部
８１２  入力ポート
８１３  仮想チャネル
８１４  出力ポート
８１５  出力チャネル
９０１  仮想チャネル情報
２４０１  送信負荷測定部
２４０２  出力チャネル割当量決定部
【図１】
0005603481.tif 000002
【図２】
0005603481.tif 000003
【図３】
0005603481.tif 000004
【図４】
0005603481.tif 000005
【図５】
0005603481.tif 000006
【図６】
0005603481.tif 000007
【図７】
0005603481.tif 000008
【図８】
0005603481.tif 000009
【図９】
0005603481.tif 000010
【図１０】
0005603481.tif 000011
【図１１】
0005603481.tif 000012
【図１２】
0005603481.tif 000013
【図１３】
0005603481.tif 000014
【図１４】
0005603481.tif 000015
【図１５】
0005603481.tif 000016
【図１６】
0005603481.tif 000017
【図１７】
0005603481.tif 000018
【図１８】
0005603481.tif 000019
【図１９】
0005603481.tif 000020
【図２０】
0005603481.tif 000021
【図２１】
0005603481.tif 000022
【図２２】
0005603481.tif 000023
【図２３】
0005603481.tif 000024
【図２４】
0005603481.tif 000025
【図２５】
0005603481.tif 000026
【図２６】
0005603481.tif 000027
【図２７】
0005603481.tif 000028
【図２８】
0005603481.tif 000029
【図２９】
0005603481.tif 000030
【図３０】
0005603481.tif 000031
【図３１】
0005603481.tif 000032
【図３２】
0005603481.tif 000033