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