(57)【要約】【課題】オーダリング制約を遵守するスイッチ装置、パケット制御方法及びデータ通信システムを提供する。【解決手段】ヘッダ付加部２５は、複数の種類のパケットの宛先毎に、パケットに対して送信順に番号を付加する。さらに、ヘッダ付加部２５は、番号を付加したパケットを種類に応じて仮想チャネル３１及び３２を経由させて送信する。さらに、溜込バッファ４１は、調停部２３により送信されたパケットを受信して蓄積する。調停部４４及び管理ＩＤ制御部４３は、番号を基に特定の種類のパケットが出力可能な否かを判定して、パケットの出力順を決定し、溜込バッファ４１からパケットを出力させる。【選択図】図１
2014204403.tif 000002
【特許請求の範囲】
【請求項１】
複数の種類のパケットの宛先毎に、前記パケットに対して送信順に番号を付加する番号付加部と、
番号付加部により番号が付加されたパケットを、前記パケットの種類に応じた経路を経由させて送信する送信部と、
前記送信部により送信された前記パケットを受信して蓄積する蓄積部と、
前記番号を基に特定の種類のパケットが出力可能な否かを判定して、パケットの出力順を決定し、前記蓄積部からパケットを出力させる出力部と
を備えたことを特徴とするスイッチ装置。
【請求項２】
複数の前記経路は、第１経路及び第２経路を有し、
前記番号付加部は、第１種パケット及び前記第１種パケットの追越しが禁止されている第２種パケットの宛先毎に、前記第１種パケット及び前記第２種パケットに対して送信順に番号を付加し、
前記送信部は、前記第１経路を経由させて前記第１種パケットを送信し、前記第２経路を経由させて前記第２種パケットを送信し、
前記蓄積部は、前記送信部により送信された前記第１種パケット及び前記第２種パケットを受信して蓄積し、
前記出力部は、宛先毎の前記番号を基に、前記第２種パケットが出力可能か否かを判定して、パケットの出力順を決定する
ことを特徴とする請求項１に記載のスイッチ装置。
【請求項３】
前記番号付加部は、前記第１種パケット及び前記第２種パケットに対して送信順に連番となる番号を付加し、
前記出力部は、出力しようとする前記第２種パケットの番号が、当該第２種パケットと同じ宛先に一つ前に出力したパケットの番号に１を加えた値以下の場合に、当該第２種パケットを出力可能と判定する
ことを特徴とする請求項２に記載のスイッチ装置。
【請求項４】
前記蓄積部は、前記特定の種類のパケットと前記特定の種類のパケット以外のパケットとを異なる領域に受信順に蓄積することを特徴とする請求項１〜３のいずれか一つに記載のスイッチ装置。
【請求項５】
前記番号付加部は、前記宛先と前記パケットの発行元との組合せ毎に、送信順に番号を付加し、
前記出力部は、前記宛先と前記発行元の組合せ毎の前記番号を基に、特定の種類のパケットが出力可能な否かを判定する
ことを特徴とする請求項１〜４のいずれか一つに記載のスイッチ装置。
【請求項６】
複数の種類のパケットの宛先毎に、前記パケットに対して送信順に番号を付加し、
前記番号が付加された前記パケットを種類に応じた経路を経由させて送信し、
送信された前記パケットを受信してバッファに蓄積し、
前記番号を基に特定の種類のパケットが出力可能な否かを判定して、パケットの出力順を決定し、前記バッファからパケットを出力させる
ことを特徴とするパケット制御方法。
【請求項７】
送信装置、送信側スイッチ、クロスバスイッチ、受信側スイッチ及び受信装置を有するデータ通信システムであって、
前記送信装置は、第１種パケット及び第２種パケットを第１プロトコルで送信するパケット送信部を備え、
送信側スイッチは、
前記第１種パケット及び前記第２種パケットの宛先毎に、前記第１種パケット及び前記第２種パケットに対して送信順に番号を付加する番号付加部と、
前記番号付加部により番号が付加された前記第１種パケット及び前記第２種パケットを第２プロトコルの形式に変換し、前記第２プロトコルの形式に変換された前記第１種パケット及び前記第２種パケットを送信する送信部とを備え、
前記クロスバスイッチは、
前記送信部が送信した前記第１種パケットを前記第２プロトコルで送信する第１経路と、
前記送信部が送信した前記第２種パケットを前記第２プロトコルで送信する第２経路とを備え、
前記受信側スイッチは、
前記クロスバスイッチにより送信された前記第１種パケット及び前記第２種パケットを受信して蓄積する蓄積部と、
前記番号を基に、前記第２種パケットが出力可能か否かを判定して、パケットの出力順を決定し、前記第１種パケット又は前記第２種パケットを前記第１プロトコルの形式に変換し、前記出力順に従い、前記蓄積部からパケットを出力させる出力部とを備え、
前記受信装置は、前記第１種パケット及び前記第２種パケットを前記第１プロトコルで前記受信部から受信するパケット受信部を備えた
ことを特徴とするデータ通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スイッチ装置、パケット制御方法及びデータ通信システムに関する。
【背景技術】
【０００２】
計算機は機能を拡張するためのＩ／Ｏ（Input/Output）バスを有する。標準的なＩ／Ｏとして、例えばＰＣＩ（Peripheral  Component  Interconnect）（登録商標）バスやＰＣＩｅ（PCI  Express）（登録商標）バスがある。ＰＣＩｅは、ＰＣＩ−ＳＩＧ（Special  Interest  Group）が策定した装置間を接続するバスの標準規格である。ＰＣＩｅを用いることでは、ＰＣＩバスと比較してより効率よくデータ処理が行える。特に、近年のブロードバンドやデジタルメディアの普及により、各システムで短時間に大容量のデータを扱うという要求に対応して、ＰＣＩｅの利用が増加している。
【０００３】
ＰＣＩｅでは、パケット単位での通信が行われている。ＰＣＩｅの仕様に準拠するパケットには、パケット間のオーダリング制約が存在する。
【０００４】
また、ＰＣＩｅパケットをカプセル化し、ＰＣＩｅとは別のプロトコルで動作するスイッチを経由させる技術が提案されている。これにより、多数のＰＣＩｅデバイスを計算機に接続することが可能となる。
【０００５】
このような、ＰＣＩｅパケットをカプセル化したシステムでは、通信系路上でＰＣＩｅとは異なるプロトコルによる通信が介在する。発行されたＰＣＩｅパケットはオーダリング制約を遵守しなくてはならないが、別プロトコル上ではＰＣＩｅのオーダリング制約に沿った回路を搭載していないおそれがある。
【０００６】
そこで、オーダリング制約を遵守するために、経路を１本の伝送経路でＦＩＦＯ（First  In  First  Out）バッファで中継してＰＣＩｅパケットを送信する従来技術が提供されている。この場合、ＰＣＩｅパケット間での追い越し等は発生しないため、オーダリング制約に則った通信を行うことができる。
【０００７】
また、通信のオーダリング制約を遵守するための他の技術として、ＡＴＭセルのヘッダに決められた数列となる監視番号を付与して送信し、受信側で受信したパケットが決められた数列になっているか否かによりエラーを検出する従来技術がある。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０７−３０５４６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、伝送経路が１つの場合、ある宛先のパケットが詰まると、別の宛先へのパケットも届かなくなるなどして、デッドロックが発生してしまうおそれがある。また、監視番号の数列を維持する従来技術は、エラーを検出することはできるが、オーダリング制約を維持しながらパケットを受信することは困難である。
【００１０】
開示の技術は、上記に鑑みてなされたものであって、オーダリング制約を遵守するスイッチ装置、パケット制御方法及びデータ通信システムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムは、一つの態様において、送信部は、複数の種類のパケットを種類に応じた経路を経由させて送信する。番号付加部は、前記パケットの宛先毎に、前記送信部が送信する前記パケットに対して送信順に番号を付加する。蓄積部は、前記送信部により送信された前記パケットを受信して蓄積する。出力部は、前記番号を基に特定の種類のパケットが出力可能な否かを判定して、パケットの出力順を決定し、前記蓄積部からパケットを出力させる。
【発明の効果】
【００１２】
本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムの一つの態様によれば、オーダリング制約を遵守することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係るデータ通信システムのブロック図である。
【図２】図２は、管理ＩＤ生成部が保持する管理ＩＤの遷移を説明するための図である。
【図３】図３は、管理ＩＤタグが付加されたヘッダを表す図である。
【図４】図４は、実施例１に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。
【図５】図５は、先頭パケットの管理ＩＤ及び管理ＩＤ保持回路が有する管理ＩＤを用いたパケットの出力を説明するための図である。
【図６】図６は、出力のタイミングを説明するためのタイミングチャートである。
【図７】図７は、実施例１に係るデータ通信システムにおけるパケットの流れを説明するための図である。
【図８】図８は、送信側スイッチにおけるＰＣＩｅパケットの送受信のフローチャートである。
【図９】図９は、受信側スイッチにおけるパケットの出力のフローチャートである。
【図１０】図１０は、実施例２に係るデータ通信システムのブロック図である。
【図１１】図１１は、実施例２に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。
【図１２】図１２は、実施例３に係るデータ通信システムのブロック図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示するスイッチ装置、パケット制御方法及びデータ通信システムが限定されるものではない。
【実施例１】
【００１５】
図１は、実施例１に係るデータ通信システムのブロック図である。図１に示すように、本実施例に係るデータ通信システムは、ＰＣＩｅを用いてデータ通信を行うシステムである。
【００１６】
ＰＣＩｅを用いたデータ通信では、ＰＣＩｅ規格に準拠したプロトコルであるＰＣＩｅプロトコルを用いてデータの送受信を行う。ＰＣＩｅプロトコルの通信では、パケット単位で通信が行われる。以下では、ＰＣＩｅプロトコル通信に用いられるパケットをＰＣＩｅパケットという。ＰＣＩｅを用いたデータ通信では、ＰＣＩｅパケットとして、Ｐｏｓｔｅｄパケット、Ｎｏｎ−Ｐｏｓｔｅｄパケット及びＣｏｍｐｌｅｔｉｏｎパケットという３つの種類のパケットを用いてデータ通信が行われる。
【００１７】
３種類のＰＣＩｅパケットの間には、以下のようなオーダリング制約がある。すなわち、Ｐｏｓｔｅｄパケット及びＣｏｍｐｅｌｅｔｉｏｎパケットは、Ｎｏｎ−Ｐｏｓｔｅｄパケットを追い越してもよい。また、Ｎｏｎ−Ｐｏｓｔｅｄパケットは、Ｐｏｓｔｅｄパケット及びＣｏｍｐｅｌｅｔｉｏｎパケットを追い越してはいけない。本実施例に係るデータ通信システムは、このオーダリング制約を遵守しつつデータの送受信を行う。
【００１８】
以下では、Ｐｏｓｔｅｄパケットを「Ｐパケット」、Ｃｏｍｐｅｌｅｔｉｏｎパケットを「Ｃパケット」、Ｎｏｎ−Ｐｏｓｔｅｄパケットを「ＮＰパケット」と言う。さらに、ＰパケットとＣパケットを区別せずに、１群のパケットとして扱う場合は、「Ｐ／Ｃパケット」という。また、３種類全てを区別しない場合は、単に「パケット」という。
【００１９】
本実施例に係るデータ通信システムは、例えば、ＰＣＩｅデバイス１、スイッチ２、クロスバスイッチ３、スイッチ４、ルートコンプレックス５及びＣＰＵ（Central  Processing  Unit）６を有している。
【００２０】
ＰＣＩｅデバイス１は、例えばハードディスクなどのＰＣＩｅの規格に準拠した装置である。ＰＣＩｅデバイス１は、ＰＣＩｅプロトコルを用いてデータの送受信を行う。ここでは、ＰＣＩｅデバイス１をデータの送信を行う側の装置として説明するが、ＰＣＩｅデバイス１は、データの受信側になることもできる。
【００２１】
ＰＣＩｅデバイス１は、ＰＣＩｅパケットをスイッチ２へ出力する。ここで、ＰＣＩｅデバイス１は、Ｐパケット、Ｃパケット及びＮＰパケットを出力する。
【００２２】
スイッチ２は、溜込バッファ２１、サイドバッファ２２、調停部２３、管理ＩＤ（Identification）生成部２４及びヘッダ付加部２５を有している。
【００２３】
溜込バッファ２１は、Ｐパケット、Ｃパケット及びＮＰパケットの入力をＰＣＩｅデバイスから受ける。溜込バッファ２１は、受信したパケットを蓄積していく。そして、溜込バッファ２１は、保持しているパケットのうち調停部２３から指示された順にパケットをヘッダ付加部２５へ出力する。
【００２４】
サイドバッファ２２は、溜込バッファ２１へ入力されたパケットの宛先情報を取得する。そして、サイドバッファ２２は、取得した宛先情報をパケットの識別情報とともに格納する。
【００２５】
サイドバッファ２２は、溜込バッファ２１から出力されたパケットの情報を調停部２３から取得する。そして、サイドバッファ２２は、溜込バッファ２１から出力されたパケットの宛先情報を管理ＩＤ生成部２４へ出力する。
【００２６】
調停部２３は、溜込バッファ２１に格納されているパケットに対して調停を行い、出力するパケットを順次決定する。そして、調停部２３は、出力するパケットとして決定したパケットの情報を溜込バッファ２１に通知し、パケットの出力を指示する。また、調停部２３は、出力するパケットとして決定したパケットの情報をサイドバッファ２２へ通知する。
【００２７】
管理ＩＤ生成部２４は、パケットの宛先毎に管理ＩＤの値を表すカウンタを有している。
【００２８】
管理ＩＤ生成部２４は、パケットの宛先情報の入力をサイドバッファ２２から受ける。管理ＩＤ生成部２４は、宛先情報が新規の宛先を示す場合、受信した宛先情報に対応するカウンタを生成し初期値をセットする。言い換えれば、管理ＩＤ生成部２４は、全ての宛先の初期値がセットされたカウンタを有しているともいえる。管理ＩＤ生成部２４は、例えば本実施例では、カウンタの初期値を１とする。
【００２９】
そして、管理ＩＤ生成部２４は、受信した宛先情報に対応するカウンタの値を読み取り、読み取った値を管理ＩＤとしてヘッダ付加部２５へ出力する。その後、管理ＩＤ生成部２４は、受信した宛先情報に対応するカウンタの値を１つインクリメントする。管理ＩＤ生成部２４は、パケットの宛先のカウンタのインクリメントにあたり、Ｐパケット、Ｃパケット及びＮＰパケットを区別しない。
【００３０】
図２は、管理ＩＤ生成部が保持する管理ＩＤの遷移を説明するための図である。ここでは、宛先として、宛先ＡＡＡ，宛先ＢＢＢ及び宛先ＣＣＣが有る場合で説明する。図２では、各列が各タイミングにおいて管理ＩＤ生成部２４が記憶している管理ＩＤの状態を示している。そして、図２では、表の下に進むに従い時間が経過した状態を表している。
【００３１】
パケットを受信していない状態では、管理ＩＤ生成部２４は、列１０１のように各宛先のカウンタに初期値１をセットされた状態を保持している。
【００３２】
次に、宛先ＡＡＡのパケットが溜込バッファ２１から出力されると、管理ＩＤ生成部２４は、宛先ＡＡＡの宛先情報の入力をサイドバッファ２２から受ける。そして、管理ＩＤ生成部２４は、宛先ＡＡＡのカウンタの値である「１」を管理ＩＤとしてヘッダ付加部２５へ出力する。その後、管理ＩＤ生成部２４は、宛先ＡＡＡに対応するカウンタを１つインクリメントする。この場合、管理ＩＤ生成部２４が保持するカウンタは、図２の列１０２のように宛先ＡＡＡに対応するカウンタの値が「２」となり、他のカウンタは「１」を維持している。
【００３３】
続いて、宛先ＡＡＡのパケットが溜込バッファ２１から出力されると、管理ＩＤ生成部２４は、宛先ＡＡＡの宛先情報の入力をサイドバッファ２２から受ける。そして、管理ＩＤ生成部２４は、宛先ＡＡＡのカウンタの値である「２」を管理ＩＤとしてヘッダ付加部２５へ出力する。その後、管理ＩＤ生成部２４は、宛先ＡＡＡに対応するカウンタを１つインクリメントする。この場合、管理ＩＤ生成部２４が保持するカウンタは、図２の列１０３のように宛先ＡＡＡに対応するカウンタの値が「３」となり、他のカウンタは「１」を維持している。
【００３４】
続いて、宛先ＢＢＢのパケットが溜込バッファ２１から出力されると、管理ＩＤ生成部２４は、宛先ＢＢＢの宛先情報の入力をサイドバッファ２２から受ける。そして、管理ＩＤ生成部２４は、宛先ＢＢＢのカウンタの値である「１」を管理ＩＤとしてヘッダ付加部２５へ出力する。その後、管理ＩＤ生成部２４は、宛先ＢＢＢに対応するカウンタを１つインクリメントする。この場合、管理ＩＤ生成部２４が保持するカウンタは、図２の列１０４のように、宛先ＡＡＡに対応するカウンタの値が「３」であり、宛先ＢＢＢに対応するカウンタの値が「２」であり、宛先ＣＣＣに対応するカウンタの値が「１」である。
【００３５】
このようにして、管理ＩＤ生成部２４は、宛先毎のカウンタをインクリメントしていくことで管理ＩＤを生成する。そして、管理ＩＤ生成部２４は、ヘッダ付加部２５へ出力するパケットの管理ＩＤを通知する。
【００３６】
図１に戻って説明を続ける。ヘッダ付加部２５は、出力するパケットを溜込バッファ２１から受信する。さらに、ヘッダ付加部２５は、管理ＩＤを管理ＩＤ生成部２４から取得する。そして、ヘッダ付加部２５は、出力するパケットのヘッダに管理ＩＤを付加する。さらに、ヘッダ付加部２５は、パケットの宛先を表す情報及びパケットの発行元を表す情報をヘッダに付加する。ヘッダ付加部２５は、パケットをカプセル化してＰＣＩｅプロトコルとは異なるプロトコルへ変更する。
【００３７】
図３は、管理ＩＤタグが付加されたヘッダを表す図である。ヘッダ１１０は、スイッチ２が出力するパケットのヘッダを表している。ヘッダ１１０は、管理ＩＤタグ１１１、パケット宛先１１２、パケット発行元１１３及びＰＣＩｅヘッダ１１４を有している。
【００３８】
管理ＩＤタグは、ヘッダ付加部２５により付加された管理ＩＤの値を格納する領域である。例えば本実施例では、管理ＩＤタグ１１１は４ビットである。また、パケット宛先１１２は、パケットの宛先の情報を格納する領域である。例えば本実施例では、パケット宛先１１２は、４ビットである。また、パケット発行元１１３は、パケットの発行元の情報を格納する領域である。例えば本実施例では、パケット発行元１１３は、４ビットである。ＰＣＩｅヘッダ１１４は、従来のＰＣＩｅのヘッダである。
【００３９】
ここで、管理ＩＤタグ１１１、パケット宛先１１２及びパケット発行元１１３のサイズは、ヘッダ１１０に乗せることが可能な大きさの上限内であれば、任意の値を取ることができる。そして、管理ＩＤタグ１１１、パケット宛先１１２及びパケット発行元１１３のサイズを変更することで、管理可能なデバイスの数を変更することができる。
【００４０】
図１に戻って説明を続ける。ヘッダ付加部２５は、ヘッダを付加したパケットをクロスバスイッチ３へ出力する。
【００４１】
クロスバスイッチ３は、ＰＣＩｅプロトコルとは異なるプロトコルを用いてデータ転送を行う装置である。クロスバスイッチ３は、仮想チャネル（ＶＣ：Virtual  Channel）３１及び仮想チャネル３２を有している。仮想チャネル３１及び３２は、ＦＩＦＯバッファである。
【００４２】
仮想チャネル３１は、Ｐ／Ｃパケットの伝送経路である。また、仮想チャネル３２は、ＮＰパケットの伝送経路である。
【００４３】
クロスバスイッチ３は、スイッチ２からパケットを受信する。そして、受信したパケットがＰ／Ｃパケットの場合、クロスバスイッチ３は、仮想チャネル３１を経由させてパケットをスイッチ４へ転送する。また、受信したパケットがＮＰパケットの場合、クロスバスイッチ３は、仮想チャネル３２を経由させてパケットをスイッチ４へ転送する。
【００４４】
クロスバスイッチ３は、ＰＣＩｅプロトコルとは異なるプロトコルを用いる装置であるため、ＰＣＩｅに準拠したオーダリング制約にしたがったデータ転送は行わない。そのため、仮想チャネル３１を経由するＰ／Ｃパケットの停滞などにより、仮想チャネル３２を経由するＮＰパケットがＰ／Ｃパケットを追い越してしまうことが考えられる。したがって、スイッチ４には、オーダリング制約に従っていない順序でパケットが入力される場合がある。
【００４５】
スイッチ４は、溜込バッファ４１、サイドバッファ４２、管理ＩＤ制御部４３及び調停部４４を有している。
【００４６】
溜込バッファ４１は、仮想チャネル４１１及び４１２を有している。溜込バッファ４１は、スイッチ４に入力されたパケットのうちＰ／Ｃパケットを仮想チャネル４１１に送り蓄積していく。また、溜込バッファ４１は、スイッチ４に入力されたパケットのうちＮＰパケットを仮想チャネル４１２に送り蓄積していく。
【００４７】
そして、溜込バッファ４１は、保持しているパケットのうち調停部４４から指示された順にパケットをルートコンプレックス５へ出力する。
【００４８】
サイドバッファ４２は、仮想チャネル４１１及び仮想チャネル４１２の先頭のパケットの管理ＩＤを有している。例えば、サイドバッファ４２は、仮想チャネル４１１に入力されるＰ／Ｃパケットの管理ＩＤタグから管理ＩＤを順次取得し、順番に記憶していく。同様に、サイドバッファ４２は、仮想チャネル４１２に入力されるＮＰパケットの管理ＩＤタグから管理ＩＤを順次取得し、順番に記憶していく。そして、サイドバッファ４２は、溜込バッファ４１からパケットが出力された場合、仮想チャネル４１１又は４１２のいずれからパケットが出力されたかの情報を調停部４４から受信する。そして、サイドバッファ４２は、パケットを出力した側の記憶している管理ＩＤの先頭の管理ＩＤを削除する。このようにすることで、サイドバッファ４２が記憶している管理ＩＤの先頭の管理ＩＤが、仮想チャネル４１１及び４１２に格納されているパケットの先頭パケットの管理ＩＤとなる。
【００４９】
管理ＩＤ制御部４３は、管理ＩＤ保持回路４３１及び管理ＩＤ比較回路４３２を有している。
【００５０】
管理ＩＤ保持回路４３１は、一つ前のパケットの管理ＩＤを宛先毎に保持する。ここで、一つ前のパケットとは、溜込バッファ４１から出力されたパケットの中で、現在の状態において一つ前にその宛先に対して出力されたパケットを指し、言い換えれば、その宛先に向けて出力された最新のパケットである。例えば、管理ＩＤ保持回路４３１は、保持する宛先毎の管理ＩＤの初期値を「０」とする。そして、管理ＩＤ保持回路４３１は、溜込バッファ４１から出力されたパケットの管理ＩＤ及び宛先情報を調停部４４から取得する。そして、管理ＩＤ保持回路４３１は、調停部４４から管理ＩＤ及び宛先情報を取得すると、取得した宛先に対する一つ前のパケットの管理ＩＤとして、取得した管理ＩＤを記憶する。ここで、本実施例では、管理ＩＤ保持回路４３１は、Ｐ／ＣパケットとＮＰパケットとを別にして、一つ前のパケットの管理ＩＤを記憶している。すなわち、管理ＩＤ保持回路４３１は、ある宛先に対する一つ前のＰ／Ｃパケットの管理ＩＤと、ある宛先に対する一つ前のＮＰパケットの管理ＩＤとを別個に記憶している。この場合、さらに、管理ＩＤ保持回路４３１は、一つ前のＰ／Ｃパケットと一つ前のＮＰパケットのいずれを後に出力したかの情報を記憶している。そして、管理ＩＤ保持回路４３１は、管理ＩＤ比較回路４３２に対して、一つ前のＰ／Ｃパケットと一つ前のＮＰパケットのうちより後に出力されたパケットを一つ前のパケットとして出力する。
【００５１】
管理ＩＤ比較回路４３２は、ＮＰパケットの出力が可能か否かの判定の依頼を調停部４４から受ける。依頼を受けると、管理ＩＤ比較回路４３２は、仮想チャネル４１２に格納されている先頭のＮＰパケットの管理ＩＤをサイドバッファ４２から取得する。以下では、ここで管理ＩＤ比較回路４３２がサイドバッファ４２から取得したＮＰパケットの管理ＩＤを、「先頭のＮＰパケットの管理ＩＤ」という。また、管理ＩＤ比較回路４３２は、サイドバッファから取得したＮＰパケットと同じ宛先に対する一つ前のパケットの管理ＩＤを管理ＩＤ保持回路４３１から取得する。
【００５２】
管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤの値が、管理ＩＤ保持回路４３１から取得した管理ＩＤの値に１を加えた値以上か否かを判定する。
【００５３】
先頭のＮＰパケットの管理ＩＤの値が、一つ前のパケットの管理ＩＤの値に１を加えた値以上の場合、管理ＩＤ比較回路４３２は、ＮＰパケットの出力可を調停部４４に通知する。これに対して、先頭のＮＰパケットの管理ＩＤの値が、一つ前のパケットの管理ＩＤの値に１を加えた値より小さい場合、管理ＩＤ比較回路４３２は、ＮＰパケットの出力不可を調停部４４に通知する。
【００５４】
調停部４４は、仮想チャネル４１２にＮＰパケットがあるか否かを判定する。ＮＰパケットがない場合、調停部４４は、仮想チャネル４１１にＰ／ＣパケットがあればＰ／Ｃパケットを溜込バッファ４１から出力させる。そして、調停部４４は、出力されたＰ／Ｃパケットの宛先情報及び管理ＩＤを管理ＩＤ保持回路４３１へ通知する。これに対して、仮想チャネル４１１にＰ／Ｃパケットがなければ、調停部４４は、パケットの到着まで待機する。
【００５５】
一方、ＮＰパケットがある場合、調停部４４は、ＮＰパケットの出力が可能か否かの判定を管理ＩＤ比較回路４３２に依頼する。そして、調停部４４は、判定結果を管理ＩＤ比較回路４３２から受信する。
【００５６】
判定結果が出力可の場合、調停部４４は、ＮＰパケットを溜込バッファ４１から出力させる。そして、調停部４４は、出力されたＮＰパケットの宛先情報及び管理ＩＤを管理ＩＤ保持回路４３１へ通知する。
【００５７】
これに対して、判定結果が出力不可の場合、調停部４４は、パケットの到着まで待機する。
【００５８】
調停部４４は、以上に説明した出力するパケットの判定を繰り返す。
【００５９】
次に、図４を参照して、本実施例に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明する。図４は、実施例１に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。ここでは、ＰＣＩｅデバイス１から１つの宛先に対してパケットが送られた場合で説明する。
【００６０】
状態２０１は、ＰＣＩｅデバイス１から発行されたパケットの状態を表している。ここで、パケット３０１及び３０２の上の段に記載されている記号はパケットの種類を表している。また、パケット３０１及び３０２の下の段の下部に記載されている記号は発行元のＩＤを表している。ＰＣＩｅデバイス１から発行された状態では、Ｐ／Ｃパケットであるパケット３０１が先頭で、ＮＰパケットであるパケット３０２が次に並んでいる。
【００６１】
状態２０２は、スイッチ２から出力されるパケットの状態を表している。スイッチ２では、ヘッダ付加部２５により各パケットに順番に管理ＩＤが振られる。パケット３０１及び３０２の下の段の上部の番号が各パケットに振られた管理ＩＤを表している。ここでは、最初のパケットであるパケット３０１に管理ＩＤとして「１」が振られ、次のパケットであるパケット３０２に管理ＩＤとして「２」が振られている。
【００６２】
状態２０３は、クロスバスイッチ３の仮想チャネル３１を経由しているパケットの状態を表している。また、状態２０４は、クロスバスイッチ３の仮想チャネル３２を経由しているパケットの状態を表している。仮想チャネル３１にはＰ／Ｃパケットであるパケット３０１が通過する。また、仮想チャネル３２にはＮＰパケットであるパケット３０２が通過する。
【００６３】
状態２０５は、スイッチ４の溜込バッファ４１の仮想チャネル４１１に蓄積されているパケットの状態を表している。また、状態２０６は、スイッチ４の溜込バッファ４１の仮想チャネル４１２に蓄積されているパケットの状態を表している。仮想チャネル４１１は、Ｐ／Ｃパケットであるパケット３０１を蓄積する。また、仮想チャネル４１２は、ＮＰパケットであるパケット３０２を蓄積する。
【００６４】
ここで、クロスバスイッチ３の仮想チャネル３１及び仮想チャネル３２の状態により、パケット３０２がパケット３０１を追い越し、先にパケット３０２が仮想チャネル４１２に格納され、その後、パケット３０１が仮想チャネル４１１に格納されたものとする。
【００６５】
ここで、図５を参照して、図５の状態２０５及び２０６の状態になったスイッチ４におけるパケットの出力について説明する。図５は、先頭パケットの管理ＩＤ及び管理ＩＤ保持回路が有する管理ＩＤを用いたパケットの出力を説明するための図である。図５は、ある宛先に対応する管理ＩＤの遷移を示している。実際には、管理ＩＤ保持回路４３１は、図５のような管理ＩＤの保持を宛先毎に行っており、管理ＩＤ比較回路４３２は、宛先毎にＮＰパケットの出力可否の判定を行っている。図５における各列が各タイミングにおいて管理ＩＤ保持回路４３１が保持している管理ＩＤの値及び先頭のＮＰパケットの管理ＩＤを示している。そして、図５では、表の下に進むに従い時間が経過した状態を表している。また、図５のＰ／Ｃパケットは、その時点で管理ＩＤ保持回路４３１が保持している一つ前のＰ／Ｃパケットの管理ＩＤである。また、図５のＮＰパケットは、その時点で管理ＩＤ保持回路４３１が保持している一つ前のＮＰパケットの管理ＩＤである。そして、図５の先頭のＮＰパケット番号は、その時点でサイドバッファ４２が保持している先頭のＮＰパケットの管理ＩＤである。
【００６６】
パケットを出力していない状態では、管理ＩＤ保持回路４３１は、列１２１のようにＰ／Ｃパケット及びＮＰパケットともに管理ＩＤとして初期値である０を保持している。ただし、管理ＩＤが２のＮＰパケットであるパケット３０２が仮想チャネル４１２に格納されているので、サイドバッファ４２に格納されている先頭ＮＰパケット番号は２である。そこで、管理ＩＤ比較回路４３２は、一つ前に出力されたパケットの管理ＩＤである０に１を加えた値と、先頭のＮＰパケットの管理ＩＤである２とを比較する。この場合、先頭のＮＰパケットの管理ＩＤの方が小さいので、管理ＩＤ比較回路４３２は、ＮＰパケットであるパケット３０２は出力不可と判定する。
【００６７】
次に、管理ＩＤが１のＰ／Ｃパケットであるパケット３０１が仮想チャネル４１１に格納されると、調停部４４は、管理ＩＤが１のＰ／Ｃパケットであるパケット３０１を溜込バッファ４１から出力させる。管理ＩＤ保持回路４３１は、出力されたパケット３０１の管理ＩＤとして「１」を調停部４４から受信し記憶する。この場合、列１２２のように、一つ前のパケットは、管理ＩＤが１のＰ／Ｃパケットであるパケット３０１である。そこで、管理ＩＤ比較回路４３２は、一つ前のパケットの管理ＩＤである「１」を管理ＩＤ保持回路４３１から取得する。次に、管理ＩＤ比較回路４３２は、一つ前のパケットの管理ＩＤである１に１を加えた値と、先頭のＮＰパケットの管理ＩＤである２とを比較する。この場合、先頭のＮＰパケットの管理ＩＤは一つ前のパケットの管理ＩＤである１に１を加えた値以上なので、管理ＩＤ比較回路４３２は、ＮＰパケットであるパケット３０２は出力可と判定する。
【００６８】
出力可の判定を受けて、調停部４４は、パケット３０２を溜込バッファ４１から出力させる。管理ＩＤ保持回路４３１は、出力されたＮＰパケットの管理ＩＤとして「２」を調停部４４から受信し記憶する。この場合、列１２３のように、一つ前のパケットは、管理ＩＤが２のパケット３０２である。そこで、次に、管理ＩＤ比較回路４３２は、一つ前のパケットの管理ＩＤである「２」を管理ＩＤ保持回路４３１から取得する。このようにして、管理ＩＤ比較回路４３２は、ＮＰパケットの出力可否の判定を行っている。
【００６９】
このようなパケット出力処理を行うことで、スイッチ４は、ルートコンプレックス５に対して、図４の状態２０７のように、最初にパケット３０１が出力し、次にパケット３０２を出力する。このように、分割された仮想チャネル上でＮＰパケットがＰ／Ｃパケットを追い越した場合にも、本実施例に係るデータ通信システムによれば、追い越したＮＰパケットを追い越されたＰパケットの後に配置することができる。これにより、本実施例に係るデータ通信システムは、ＰＣＩｅのオーダリング制約を遵守してデータ通信を行うことができる。
【００７０】
次に、図６を参照して、パケットの出力のタイミングについて説明する。図６は、出力のタイミングを説明するためのタイミングチャートである。図６の横軸は、時間の経過を表している。
【００７１】
グラフ４０１は、管理ＩＤ保持回路４３１が有するＰ／Ｃパケットの管理ＩＤを表している。また、グラフ４０２は、管理ＩＤ保持回路４３１が有するＮＰパケットの管理ＩＤを表している。また、グラフ４０３は、サイドバッファ４２に格納されている先頭のＮＰパケットの管理ＩＤを表している。また、グラフ４０４は、管理ＩＤ比較回路４３２によるＮＰ出力判定の判定結果の出力を表している。グラフ４０４において、出力がＨｉｇｈの場合にＮＰパケットの出力可であり、出力がＬｏｗの場合にＮＰパケットの出力不可である。また、グラフ４０５は、スイッチ４からルートコンプレックス５へのＰ／Ｃパケットの出力を表している。グラフ４０５において、出力がＨｉｇｈのときにＰ／Ｃパケットが出力される。また、グラフ４０６は、スイッチ４からルートコンプレックス５へのＮＰパケットの出力を表している。グラフ４０６において、出力がＨｉｇｈのときにＮＰパケットが出力される。
【００７２】
パケットが出力される以前には、グラフ４０１及び４０２に示すように、管理ＩＤ保持回路４３１は、Ｐ／Ｃパケット及びＮＰパケットの管理ＩＤともに初期値である０を保持している。
【００７３】
そして、仮想チャネル４１２に管理ＩＤが「１」のＮＰパケットが到着する。そこで、サイドバッファ４２には、仮想チャネル４１２に格納されたＮＰパケットの管理ＩＤである「１」が格納される（ステップＳ１）。
【００７４】
サイドバッファ４２に管理ＩＤとして「１」が格納されると、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤとして「１」を取得する。また、管理ＩＤ比較回路４３２は、一つ前のパケットの管理ＩＤとして「０」を管理ＩＤ保持回路４３１から取得する。先頭のＮＰパケットの管理ＩＤの「１」は、一つ前のパケットの管理ＩＤとして「０」に１を加えた値以上であるので、管理ＩＤ比較回路４３２は、ＮＰパケットの出力可の信号を出力する（ステップＳ２）。
【００７５】
ＮＰパケットの出力可の信号を受けて、調停部４４は、調停を行い、ＮＰパケットを溜込バッファ４１の仮想チャネル４１２から出力させる（ステップＳ３）。
【００７６】
ＮＰパケットの出力を受けて、管理ＩＤ保持回路４３１は、ＮＰパケットの管理ＩＤとして、出力されたＮＰパケットの管理ＩＤである「１」を取得する（ステップＳ４）。
【００７７】
また、仮想チャネル４１２の先頭のＮＰパケットが出力されたので、次のＮＰパケットが先頭のＮＰパケットとなる。ここでは、管理ＩＤが「３」のＮＰパケットが、仮想チャネル４１２の先頭のＮＰパケットになったとする。これを受けて、サイドバッファ４２は、先頭のＮＰパケットの管理ＩＤとして「３」を取得する（ステップＳ５）。
【００７８】
この時、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤである「３」と一つ前のパケットの管理ＩＤである「１」に１を加えた値を比べる。この場合、先頭のＮＰパケットの管理ＩＤである「３」は、一つ前のパケットの管理ＩＤである「１」に１を加えた値よりも大きいので、管理ＩＤ比較回路４３２は、ＮＰパケットの出力不可の信号を出力する（ステップＳ６）。
【００７９】
その後、仮想チャネル４１１に管理ＩＤが「２」であるＰ／Ｃパケットが到着する。これをうけて、調停部４４は、調停を行い、Ｐ／Ｃパケットを溜込バッファ４１の仮想チャネル４１１から出力させる（ステップＳ７）。
【００８０】
ＮＰパケットの出力を受けて、管理ＩＤ保持回路４３１は、Ｐ／Ｃパケットの管理ＩＤとして、出力されたＰ／Ｃパケットの管理ＩＤである「２」を取得する（ステップＳ８）。
【００８１】
管理ＩＤ保持回路４３１が出力されたＰ／Ｃパケットの管理ＩＤである「２」を取得すると、管理ＩＤ比較回路４３２は、一つ前のパケットの管理ＩＤとして「２」を取得する。また、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤとして「３」を取得する。先頭のＮＰパケットの管理ＩＤの「３」は、ひとつ前のパケットの管理ＩＤとして「２」に１を加えた値以上であるので、管理ＩＤ比較回路４３２は、ＮＰパケットの出力可の信号を出力する（ステップＳ９）。
【００８２】
ＮＰパケットの出力可の信号を受けて、調停部４４は、調停を行い、ＮＰパケットを溜込バッファ４１の仮想チャネル４１２から出力させる（ステップＳ１０）。
【００８３】
ＮＰパケットの出力を受けて、管理ＩＤ保持回路４３１は、ＮＰパケットの管理ＩＤとして、出力されたＮＰパケットの管理ＩＤである「３」を取得する（ステップＳ１１）。
【００８４】
このとき、仮想チャネル４１２に蓄積されているＮＰパケットがなくなったとする。その場合、サイドバッファ４２が保持するＮＰパケットの管理ＩＤが消去される（ステップＳ１２）。
【００８５】
サイドバッファ４２が保持するＮＰパケットの管理ＩＤが消去されると、管理ＩＤ比較回路４３２は、ＮＰパケットの出力不可の信号を出力する（ステップＳ１３）。
【００８６】
以上のように、ＮＰパケットの出力条件を満たさない期間Ｔでは、ＮＰパケットが溜込バッファ４１に存在していても、スイッチ４は、ＮＰパケットを出力しない。これにより、スイッチ４は、オーダリング制約を遵守することができる。
【００８７】
次に、図７を参照して、本実施例に係るデータ通信システムにおけるパケットの出力制御の全体像について説明する。図７は、実施例１に係るデータ通信システムにおけるパケットの流れを説明するための図である。図７の縦軸は上部に記載した各装置におけるパケットの送受信のタイミングを表している。図７の縦軸は下に向かうに従い時間が経過している。図７の一点鎖線５０１は、Ｐ／Ｃパケットの送受信を表しており、図７の実線５０２は、ＮＰパケットの送受信を表している。
【００８８】
ＰＣＩｅデバイス１は、先にＰ／Ｃパケットを送信し、次に、ＮＰパケットを送信する。
【００８９】
スイッチ２は、ＰＣＩｅデバイス１が出力したパケットを受信する。そして、スイッチ２は、調停を行い、オーダリング制約を遵守して、先にＰ／Ｃパケットを送信し、次に、ＮＰパケットを送信する。
【００９０】
クロスバスイッチ３は、スイッチ２が出力したパケットを受信する。そして、クロスバスイッチ３は、出力できるパケットから順に出力する。ここでは、Ｐ／Ｃパケットの出力が停滞したため、クロスバスイッチ３は、ＮＰパケットを先に出力し、次にＰ／Ｃパケットを出力する。そのため、クロスバスイッチ３では、追い越してはいけないＰ／ＣパケットをＮＰパケットが追い越してしまい、オーダリング制約が守られない。
【００９１】
スイッチ４は、クロスバスイッチ３から出力されたＮＰパケットを先に受信し、次に、Ｐ／Ｃパケットを受信する。そして、スイッチ４は、ＮＰパケットの出力判定を行い、本来先に出力されるはずのＰ／Ｃパケットをまず出力する。その後、スイッチ４は、ＮＰパケットを出力する。
【００９２】
これにより、ルートコンプレックス５は、Ｐ／Ｃパケットを先に受信し、その後、ＮＰパケットを受信する。すなわち、ルートコンプレックス５は、オーダリング制約を遵守した順番でＰＣＩｅデバイス１が出力したＰＣＩｅパケットを受信することができる。
【００９３】
ここで、以上の説明では、ＰＣＩｅデバイス１がＰＣＩｅパケットをルートコンプレックス５へ送信する場合で説明したが、ＰＣＩｅパケットは、ルートコンプレックス５からＰＣＩｅデバイスへ送信される場合もある。その場合、スイッチ４とスイッチ２との役割が入れ替わる。すなわち、スイッチ４はスイッチ２の機能も有しており、スイッチ２はスイッチ４の機能も有している。
【００９４】
次に、図８を参照して、送信側スイッチにおけるパケットの送信について説明する。ここで、送信側スイッチとは、ＰＣＩｅデバイス１及びルートコンプレックス５の中でパケットを送信する側の装置に直接繋がるスイッチであり、例えば、図１ではスイッチ２に対応する。図８は、送信側スイッチにおけるＰＣＩｅパケットの送受信のフローチャートである。
【００９５】
スイッチ２は、自装置がＰＣＩｅデバイス１からのパケットの受信待ち状態か否かを判定する（ステップＳ１０１）。パケットの受信待ち状態でない場合（ステップＳ１０１：否定）、スイッチ２は、自装置がパケットの受信待ち状態になるまで待機する。
【００９６】
これに対して、パケットの受信待ち状態の場合（ステップＳ１０１：肯定）、スイッチ２は、ＰＣＩｅデバイス１からのパケットを受信し（ステップＳ１０２）、溜込バッファ２１へ蓄積する。
【００９７】
次に、調停部２３は、溜込バッファ２１に蓄積されているパケットに対して調停を行い、オーダリング制約にしたがってパケットを溜込バッファ２１からヘッダ付加部２５へ出力させる（ステップＳ１０３）。
【００９８】
管理ＩＤ生成部２４は、溜込バッファ２１から出力されたパケットの宛先をサイドバッファ２２から受信する。そして、管理ＩＤ生成部２４は、受信したパケットの宛先に対応するカウンタの値を管理ＩＤとしてヘッダ付加部２５へ出力する。ヘッダ付加部２５は、管理ＩＤ生成部２４から取得した宛先毎の管理ＩＤを、溜込バッファ２１から出力されたパケットのヘッダに付加する（ステップＳ１０４）。
【００９９】
管理ＩＤ生成部２４は、出力したパケットの宛先に対応するカウンタの値を１つインクリメントする（ステップＳ１０５）。
【０１００】
その後、調停部２３は、システムのリセットが行われたか否かを判定する（ステップＳ１０６）。システムのリセットが行われていない場合（ステップＳ１０６：否定）、調停部２３は、ステップＳ１０１へ戻る。これに対して、システムのリセットが行われた場合（ステップＳ１０６：肯定）、送信側スイッチは、パケット出力の処理を終了する。
【０１０１】
次に、図９を参照して、受信側スイッチにおけるパケットの出力について説明する。ここで、受信側スイッチとは、ＰＣＩｅデバイス１及びルートコンプレックス５の中でパケットを受信する側の装置に直接繋がるスイッチであり、例えば、図１ではスイッチ４に対応する。図９は、受信側スイッチにおけるパケットの出力のフローチャートである。
【０１０２】
調停部４４は、ＮＰパケットが溜込バッファ４１に存在するか否かを判定する（ステップＳ２０１）。ＮＰパケットが存在しない場合（ステップＳ２０１：否定）、調停部４４は、Ｐ／Ｃパケットが溜込バッファ４１に存在し、且つ、Ｐ／Ｃパケットの出力先のバッファに空きがあるか否かを判定する（ステップＳ２０２）。ここで、出力先のバッファとは、例えば、スイッチ４が受信側スイッチの場合、ルートコンプレックス５のバッファを指す。
【０１０３】
Ｐ／Ｃパケットが存在しない又は出力先のバッファに空きがない場合（ステップＳ２０２：否定）、調停部４４は、ステップＳ２０１へ戻る。
【０１０４】
これに対して、Ｐ／Ｃパケットが存在し、且つ、出力先のバッファに空きがある場合（ステップＳ２０２：肯定）、調停部４４は、仮想チャネル４１１の先頭のＰ／Ｃパケットを溜込バッファ４１から出力させる（ステップＳ２０３）。
【０１０５】
そして、調停部４４は、出力されたＰ／Ｃパケットの宛先及び管理ＩＤの情報を管理ＩＤ制御部４３の管理ＩＤ保持回路４３１へ通知する。管理ＩＤ保持回路４３１は、出力されたＰ／Ｃパケットの宛先に対応するＰ／Ｃパケットの管理ＩＤを出力されたＰ／Ｃパケットの管理ＩＤに更新する（ステップＳ２０４）。その後、調停部４４は、ステップＳ２０１へ戻る。
【０１０６】
一方、ＮＰパケットが存在する場合（ステップＳ２０１：肯定）、調停部４４は、ＮＰパケットの出力の可否の判定を管理ＩＤ比較回路４３２へ依頼する。管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤが出力条件を満たしているか否かを判定する（ステップＳ２０５）。具体的には、管理ＩＤ比較回路４３２は、サイドバッファ４２が保持する先頭のＮＰパケットの管理ＩＤの値と、一つ前のパケットの管理ＩＤに１を加えた値とを比較し、先頭のＮＰパケットの管理ＩＤの方が小さいか否かを判定する。
【０１０７】
先頭のＮＰパケットの管理ＩＤが出力条件を満たしていない場合（ステップＳ２０５：否定）、調停部４４は、Ｐ／Ｃパケットが溜込バッファ４１に存在し、且つ、Ｐ／Ｃパケットの出力先のバッファに空きがあるか否かを判定する（ステップＳ２０６）。Ｐ／Ｃパケットが存在しない又は出力先のバッファに空きがない場合（ステップＳ２０６：否定）、調停部４４は、Ｐ／Ｃパケットが存在し、且つ、出力先のバッファに空きができるまで待機する。
【０１０８】
これに対して、Ｐ／Ｃパケットが存在し、且つ、出力先のバッファに空きがある場合（ステップＳ２０６：肯定）、調停部４４は、仮想チャネル４１１の先頭のＰ／Ｃパケットを溜込バッファ４１から出力させる（ステップＳ２０７）。
【０１０９】
そして、調停部４４は、出力されたＰ／Ｃパケットの宛先及び管理ＩＤの情報を管理ＩＤ制御部４３の管理ＩＤ保持回路４３１へ通知する。管理ＩＤ保持回路４３１は、出力されたＰ／Ｃパケットの宛先に対応するＰ／Ｃパケットの管理ＩＤを出力されたＰ／Ｃパケットの管理ＩＤに更新する（ステップＳ２０８）。その後、調停部４４は、ステップＳ２０１へ戻る。
【０１１０】
一方、先頭のＮＰパケットの管理ＩＤが出力条件を満たしている場合（ステップＳ２０５：肯定）、調停部４４は、ＮＰパケットの出力先のバッファに空きがあるか否かを判定する（ステップＳ２０９）。出力先のバッファに空きがない場合（ステップＳ２０９：否定）、調停部４４は、Ｐ／Ｃパケットが溜込バッファ４１に存在し、且つ、Ｐ／Ｃパケットの出力先のバッファに空きがあるか否かを判定する（ステップＳ２１０）。Ｐ／Ｃパケットが存在しない又は出力先のバッファに空きがない場合（ステップＳ２１０：否定）、調停部４４は、ステップＳ２０９へ戻る。
【０１１１】
これに対して、Ｐ／Ｃパケットの出力先のバッファに空きがある場合（ステップＳ２１０：肯定）、調停部４４は、仮想チャネル４１１の先頭のＰ／Ｃパケットを溜込バッファ４１から出力させる（ステップＳ２１１）。
【０１１２】
そして、調停部４４は、出力されたＰ／Ｃパケットの宛先及び管理ＩＤの情報を管理ＩＤ制御部４３の管理ＩＤ保持回路４３１へ通知する。管理ＩＤ保持回路４３１は、出力されたＰ／Ｃパケットの宛先に対応するＰ／Ｃパケットの管理ＩＤを、出力されたＰ／Ｃパケットの管理ＩＤに更新する（ステップＳ２１２）。
【０１１３】
一方、ＮＰパケットの出力先のバッファに空きがある場合（ステップＳ２０９：肯定）、調停部４４は、仮想チャネル４１２の先頭のＮＰパケットを溜込バッファ４１から出力させる（ステップＳ２１３）。
【０１１４】
そして、調停部４４は、出力されたＮＰパケットの宛先及び管理ＩＤの情報を管理ＩＤ制御部４３の管理ＩＤ保持回路４３１へ通知する。管理ＩＤ保持回路４３１は、出力されたＮＰパケットの宛先に対応するＮＰパケットの管理ＩＤを、出力されたＮＰパケットの管理ＩＤに更新する（ステップＳ２１４）。
【０１１５】
その後、調停部４４は、システムのリセットが行われたか否かを判定する（ステップＳ２１５）。システムのリセットが行われていない場合（ステップＳ２１５：否定）、調停部４４は、ステップＳ２０１へ戻る。これに対して、システムのリセットが行われた場合（ステップＳ２１５：肯定）、受信側スイッチは、パケット出力の処理を終了する。
【０１１６】
以上に説明したように、本実施例に係るデータ通信システムでは、送信側スイッチは、宛先毎に連番となる管理ＩＤをＰＣＩｅパケットのヘッダに付加する。そして、ＰＣＩｅパケットは、送信側スイッチと受信側スイッチとの間の複数の伝送経路によって転送される。これにより、本実施例に係るデータ通信システムでは、デッドロックの発生を軽減しつつＰＣＩｅパケットの転送を行うことができる。
【０１１７】
さらに、受信側スイッチは、ＮＰパケットの管理ＩＤが一つ前のパケットの管理ＩＤに１を加えた値以下の場合に宛先に対してＮＰパケットを出力する。これにより、本実施例に係るデータ通信システムでは、ＰＣＩｅパケットの転送中にＰＣＩｅパケットのオーダリング制約の違反が発生した場合でも、宛先に対しては、オーダリング制約を遵守した状態でＰＣＩｅパケットを送信することができる。
【実施例２】
【０１１８】
図１０は、実施例２に係るデータ通信システムのブロック図である。本実施例に係るデータ通信システムは、ＰＣＩｅパケットを送信する側であるＰＣＩｅデバイスが複数になっていることが実施例１と異なる。以下では、実施例１と同様の機能を有する各部については、説明を省略する。
【０１１９】
本実施例に係るデータ通信システムは、ＰＣＩｅデバイス１１及び１２を備える。ＰＣＩｅデバイス１１及び１２は、いずれもＰＣＩｅの規格に準拠した装置である。ＰＣＩｅデバイス１１及び１２は、ＰＣＩｅプロトコルを用いてデータの送受信を行う。
【０１２０】
スイッチ２は、溜込バッファ２１Ａ及び２１Ｂという２つのバッファを有している。
【０１２１】
溜込バッファ２１Ａは、ＰＣＩｅデバイス１１から出力されるパケットを受信し、蓄積する。そして、溜込バッファ２１Ａは、調停部２３からの指示を受けて、指示された順にパケットを出力する。
【０１２２】
溜込バッファ２１Ｂは、ＰＣＩｅデバイス１２から出力されるパケットを受信し、蓄積する。そして、溜込バッファ２１Ｂは、調停部２３からの指示を受けて、指示された順にパケットを出力する。
【０１２３】
サイドバッファ２２は、溜込バッファ２１Ａ及び２１Ｂが受信した各パケットの発行元及び宛先を、各パケットの識別情報に対応させて記憶している。そして、サイドバッファ２２は、溜込バッファ２１Ａ又は２１Ｂから出力されたパケットの識別情報を調停部２３から受信すると、受信した識別情報を有するパケットの発行元及び宛先の情報を管理ＩＤ生成部２４へ出力する。
【０１２４】
管理ＩＤ生成部２４は、パケットの発行元と宛先の組合せ毎にカウンタを有している。例えば、ＡＡＡ，ＢＢＢ及びＣＣＣという３つの宛先がある場合、管理ＩＤ生成部２４は、ＰＣＩｅデバイス１１及びＡＡＡ、ＰＣＩｅデバイス１１及びＢＢＢ、並びに、ＰＣＩｅデバイス１１及びＣＣＣカウンタを有している。さらに、管理ＩＤ生成部２４は、ＰＣＩｅデバイス１２及びＡＡＡ、ＰＣＩｅデバイス１２及びＢＢＢ、並びに、ＰＣＩｅデバイス１２及びＣＣＣカウンタを有している。
【０１２５】
管理ＩＤ生成部２４は、溜込バッファから出力されたパケットの発行元及び宛先の情報をサイドバッファ２２から取得する。そして、管理ＩＤ生成部２４は、取得した発行元と宛先との組合せに対応するカウンタの値を管理ＩＤとしてヘッダ付加部２５へ出力する。その後、管理ＩＤ生成部２４は、発行元と宛先の組合せに対応するカウンタの値を１つインクリメントする。
【０１２６】
ヘッダ付加部２５は、溜込バッファ２１Ａ及び２１Ｂからパケットを受信する。そして、ヘッダ付加部２５は、受信したパケットのヘッダに管理ＩＤ生成部２４から取得した管理ＩＤの情報を付加する。さらに、ヘッダ付加部２５は、受信したパケットのヘッダに発行元の情報及び宛先の情報を付加する。
【０１２７】
スイッチ４の溜込バッファ４１は、Ｐ／Ｃパケットを仮想チャネル４１１に蓄積し、ＮＰパケットを仮想チャネル４１２に蓄積する。この時、溜込バッファ４１は、発行元を区別せずに各パケットを蓄積していく。
【０１２８】
サイドバッファ４２は、仮想チャネル４１２が受信した各ＮＰパケットのヘッダから宛先、発行元及び管理ＩＤを取得し、各ＮＰパケットの識別情報に対応させて蓄積していく。そして、サイドバッファ４２は、仮想チャネル４１２の先頭のＮＰパケット出力の通知を調停部４４から受けると、先頭のＮＰパケットの情報を削除する。
【０１２９】
管理ＩＤ保持回路４３１は、溜込バッファ４１から出力されたパケットの管理ＩＤの情報を発行元及び宛先の情報とともに調停部４４から受ける。そして、管理ＩＤ保持回路４３１は、パケットの発信元と宛先との組合せ毎に一つ前のパケットの管理ＩＤを保持する。
【０１３０】
管理ＩＤ比較回路４３２は、ＮＰパケットの出力可否の判定依頼を調停部４４から受ける。そして、管理ＩＤ比較回路４３２は、サイドバッファ４２から先頭のＮＰパケットの発行元、宛先及び管理ＩＤの情報を取得する。さらに、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの発行元と宛先との組合せに対応する一つ前のパケットの管理ＩＤの情報を管理ＩＤ保持回路４３１から取得する。そして、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤと、管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値を比較する。
【０１３１】
管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤが管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値以上であれば、先頭のＮＰパケットが出力可であると判定する。これに対して、管理ＩＤ比較回路４３２は、先頭のＮＰパケットの管理ＩＤが管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値未満であれば、先頭のＮＰパケットが出力不可であると判定する。そして、管理ＩＤ比較回路４３２は、判定結果を調停部４４へ出力する。
【０１３２】
調停部４４は、仮想チャネル４１２にＮＰパケットがあれば、先頭のＮＰパケットの出力の可否判定を管理ＩＤ比較回路４３２へ依頼する。そして、管理ＩＤ比較回路４３２により出力可と判定された場合、調停部４４は、ＮＰパケットを溜込バッファ４１から出力させる。
【０１３３】
これに対して、管理ＩＤ比較回路４３２により出力不可と判定された場合、調停部４４は、Ｐ／Ｃパケットが仮想チャネル４１１にあればＰ／Ｃパケットを溜込バッファ４１から出力させる。Ｐ／Ｃパケットが仮想チャネル４１１になければ、調停部４４は、Ｐ／Ｃパケットが仮想チャネル４１１に蓄積されるまで待機する。
【０１３４】
次に、図１１を参照して、本実施例に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明する。図１１は、実施例２に係るデータ通信システムにおけるパケット送信の全体的な流れについて説明するための図である。ここでは、ＰＣＩｅデバイス１１及び１２から１つの宛先に対してパケットが送られた場合で説明する。図１１では、ＰＣＩｅデバイス１１を表す発行元の情報を「Ａ１」とし、ＰＣＩｅデバイス１２を表す発行元の情報を「Ａ２」としている。
【０１３５】
状態６０１は、ＰＣＩｅデバイス１１から発行されたパケットの状態を表している。状態６０２は、ＰＣＩｅデバイス１２から発行されたパケットの状態を表している。枠で囲われたものが各パケットを表している。ここで、パケット７０１〜７０３及び８０１〜８０３の上の段に記載されている記号はパケットの種類を表している。また、パケット７０１〜７０３及び８０１〜８０３の下の段の下部に記載されている記号は発行元のＩＤを表している。ＰＣＩｅデバイス１１から発行された状態６０１では、ＮＰパケットであるパケット７０１が先頭で、Ｐ／Ｃパケットであるパケット７０２が次に並び、最後に、Ｐ／Ｃパケットであるパケット７０３が並んでいる。また、ＰＣＩｅデバイス１２から発行された状態６０２では、Ｐ／Ｃパケットであるパケット８０１が先頭で、Ｐ／Ｃパケットであるパケット８０２が次に並び、最後に、ＮＰパケットであるパケット８０３が並んでいる。パケット７０１〜７０３には、発行元としてＰＣＩｅデバイス１１を表す「Ａ１」が付加されている。また、パケット８０１〜８０３には、発行元としてＰＣＩｅデバイス１２を表す「Ａ２」の情報が付加されている。
【０１３６】
さらに、図１１では、パケットを示す枠の上に各パケットが発行された順番を示している。ここでは、パケット７０１，８０１，８０２，７０２，７０３，８０３の順番でパケットが発行されている。
【０１３７】
状態６０３は、スイッチ２から出力されるパケットの状態を表している。スイッチ２では、ヘッダ付加部２５により各パケットに順番に管理ＩＤが振られる。パケット７０１〜７０３及び８０１〜８０３の下の段の上部の番号が各パケットに振られた管理ＩＤを表している。ここでは、ＰＣＩｅデバイス１１の最初のパケットであるパケット７０１に管理ＩＤとして「１」が振られ、次のパケットであるパケット７０２に管理ＩＤとして「２」が振られ、次のパケットであるパケット７０３に管理ＩＤとして「３」が振られている。また、ＰＣＩｅデバイス１２の最初のパケットであるパケット８０１に管理ＩＤとして「１」が振られ、次のパケットであるパケット８０２に管理ＩＤとして「２」が振られ、次のパケットであるパケット８０３に管理ＩＤとして「３」が振られている。
【０１３８】
状態６０４は、クロスバスイッチ３の仮想チャネル３１を経由しているパケットの状態を表している。また、状態６０５は、クロスバスイッチ３の仮想チャネル３２を経由しているパケットの状態を表している。仮想チャネル３１にはＰ／Ｃパケットであるパケット７０２，７０３，８０１及び８０２が通過する。また、仮想チャネル３２にはＮＰパケットであるパケット７０１及び８０３が通過する。
【０１３９】
状態６０６は、スイッチ４の溜込バッファ４１の仮想チャネル４１１に蓄積されているパケットの状態を表している。また、状態６０７は、スイッチ４の溜込バッファ４１の仮想チャネル４１２に蓄積されているパケットの状態を表している。仮想チャネル４１１は、Ｐ／Ｃパケットであるパケット８０１，７０２，７０３及び８０２を蓄積する。また、仮想チャネル４１２は、ＮＰパケットであるパケット７０１及び８０３を蓄積する。
【０１４０】
ここで、クロスバスイッチ３の仮想チャネル３１及び仮想チャネル３２の状態により、ＰＣＩｅデバイス１１及び１２で各パケットが発行された順番とは異なった順番で、パケット７０１〜７０３及び８０１〜８０３がスイッチ４へ到着している。すなわち、パケット７０１〜７０３及び８０１〜８０３は、パケット８０１，７０２，７０１，７０３，８０３，８０２の順番でスイッチ４に到着している。
【０１４１】
パケット８０１は、パケット７０１を追い越してスイッチ４に最初に到着している。パケット８０１はＰ／Ｃパケットであるので、調停部４４は、パケット８０１を出力することができる。そこで、調停部４４は、パケット８０１を溜込バッファ４１から出力させる。
【０１４２】
次に、パケット７０２がスイッチ４に到着する。パケット７０２はＰ／Ｃパケットであるので、調停部４４は、パケット７０２を出力することができる。そこで、調停部４４は、パケット７０２を溜込バッファ４１から出力させる。ここで、パケット７０２は、パケット７０１を追い越してスイッチ４に到着しているが、Ｐｏｓｔｅｄパケット及びＣｏｍｐｌｅｔｉｏｎパケットはＮｏｎ−Ｐｏｓｔｅｄパケットを追い越してよいというオーダリング制約の下に出力されている。
【０１４３】
次に、パケット７０１がスイッチ４に到着する。パケット７０１はＮＰパケットであるので、調停部４４は、管理ＩＤ比較回路４３２にＮＰパケットの出力可否の判定を依頼する。この場合、パケット７０１の管理ＩＤは「１」である。そして、ＰＣＩｅデバイス１１が発行したパケットとして、パケット７０２が溜込バッファ４１から出力されているので、ＰＣＩｅデバイス１１を発行元とするパケットにおいて一つ前のパケットの管理ＩＤは「２」となる。この場合、先頭のＮＰパケットの管理ＩＤは「１」であり、管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値以下であるので、管理ＩＤ比較回路４３２は、先頭のＮＰパケットが出力可であると判定する。これを受けて、調停部４４は、パケット７０２を溜込バッファ４１から出力させる。
【０１４４】
次に、パケット７０３がスイッチ４に到着する。パケット７０３はＰ／Ｃパケットであるので、調停部４４は、パケット７０３を出力することができる。そこで、調停部４４は、パケット７０２を溜込バッファ４１から出力させる。
【０１４５】
次に、パケット８０３がパケット８０２を追い越してスイッチ４に到着する。パケット８０３はＮＰパケットであるので、調停部４４は、管理ＩＤ比較回路４３２にＮＰパケットの出力可否の判定を依頼する。この場合、パケット８０３の管理ＩＤは「３」である。そして、ＰＣＩｅデバイス１２が発行したパケットとして、パケット８０１が溜込バッファ４１から出力されているので、ＰＣＩｅデバイス１２を発行元とするパケットにおいて一つ前のパケットの管理ＩＤは「１」となる。この場合、先頭のＮＰパケットの管理ＩＤは「３」であり、管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値より大きいので、管理ＩＤ比較回路４３２は、先頭のＮＰパケットが出力不可であると判定する。これを受けて、調停部４４は、パケット８０３を溜込バッファ４１から出力させずに、次のＰ／Ｃパケットの到着を待つ。これは、パケット８０３は、Ｎｏｎ−ＰｏｓｅｔｄパケットはＰｏｓｔｅｄパケット及びＣｏｍｐｌｅｔｉｏｎパケットを追い越してはいけないというオーダリング制約の下出力できないためである。
【０１４６】
次に、パケット８０２がスイッチ４に到着する。パケット８０２はＰ／Ｃパケットであるので、調停部４４は、パケット８０２を出力することができる。そこで、調停部４４は、パケット８０２を溜込バッファ４１から出力させる。
【０１４７】
その後、仮想バッファ４１２にパケット８０３が存在するので、調停部４４は、管理ＩＤ比較回路４３２にＮＰパケットの出力可否の判定を再度依頼する。この場合、パケット８０３の管理ＩＤは「３」である。そして、ＰＣＩｅデバイス１２が発行したパケットとして、パケット８０２が溜込バッファ４１から出力されているので、ＰＣＩｅデバイス１２を発行元とするパケットにおいて一つ前のパケットの管理ＩＤは「２」となる。この場合、先頭のＮＰパケットの管理ＩＤは「３」であり、管理ＩＤ保持回路４３１から取得した管理ＩＤに１を加えた値以下であるので、管理ＩＤ比較回路４３２は、先頭のＮＰパケットが出力可であると判定する。これを受けて、調停部４４は、パケット８０３を溜込バッファ４１から出力させる。
【０１４８】
以上のような処理により、スイッチ４は、状態６０８で示される順番でパケット７０１〜７０３及び８０１〜８０３を出力する。このとき、状態６０８は、ＰＣＩｅデバイス１１及び１２で発行されたパケットにおけるオーダリング制約を遵守した順番となっている。
【０１４９】
以上に説明したように、本実施例に係るデータ通信システムでは、送信側スイッチにおいて、パケットの発行元及び宛先の組合せ毎に連番となる管理ＩＤを振る。そして、受信側スイッチにおいて、先頭のＮＰパケットの管理ＩＤが、先頭のＮＰパケットの発行元及び宛先の組合せにおいて一つ前のパケットの管理ＩＤに１を加えた値以下の場合に出力している。これにより、本実施例に係るデータ通信システム及びスイッチ装置は、オーダリング制約を遵守した状態でＰＣＩｅパケットを送信することができる。
【実施例３】
【０１５０】
図１２は、実施例３に係るデータ通信システムのブロック図である。本実施例に係るデータ通信システムは、ＰＣＩｅパケットを受信する側であるルートコンプレックスが複数になっていることが実施例２と異なる。以下では、実施例２と同様の機能を有する各部については、説明を省略する。
【０１５１】
本実施例に係るデータ通信システムは、スイッチ４Ａ及び４Ｂという２つのスイッチを有している。
【０１５２】
クロスバスイッチ３は、ＰＣＩｅデバイス１１が発行したパケットをルートコンプレックス５１に接続されるスイッチ４Ａへ送信する。また、クロスバスイッチ３は、ＰＣＩｅデバイス１２が発行したパケットをルートコンプレックス５２に接続されるスイッチ４Ｂへ送信する。
【０１５３】
スイッチ４Ａは、パケットをクロスバスイッチ３から受信する。そして、スイッチ４Ａの溜込バッファ４１Ａは、Ｐ／Ｃパケットを仮想チャネル４１１Ａに蓄積し、ＮＰパケットを仮想チャネル４１２Ａに蓄積する。
【０１５４】
そして、調停部４４Ａは、ＮＰパケットの出力可否の判定を管理ＩＤ比較回路４３２Ａに依頼し、判定結果を受けてパケットの出力の調停を行い溜込バッファ４１Ａからパケットを出力させる。
【０１５５】
管理ＩＤ比較回路４３２Ａは、先頭のＮＰパケットの管理ＩＤと、先頭のＮＰパケットと同じ発行元及び宛先の組合せにおいて一つ前のパケットの管理ＩＤとを比較して、先頭のＮＰパケットの出力可否を判定する。
【０１５６】
スイッチ４Ｂも、スイッチ４Ａにおける機能と同様の機能を有する。
【０１５７】
このように、複数の送信側スイッチ及び複数の受信側スイッチを有する場合でも、本実施例に係るデータ通信システム及びスイッチ装置は、オーダリング制約を遵守した状態でＰＣＩｅパケットを送信することができる。
【０１５８】
さらに、以上の説明では、クロスバスイッチ３を介してＰＣＩｅパケットを送信する場合で説明した。ただし、クロスバスイッチ３を有さずに、ＰＣＩｅパケットスイッチの内部で複数の仮想チャネルを有する構成においても、以上に説明した各機能を備えることはでき、同様の効果を実現することもできる。
【０１５９】
また、以上の各実施例では、仮想チャネルが２つの場合で説明したが、仮想チャネルの数は複数あってもよい。その場合も、受信側スイッチにおいて、出力しようとするＮＰパケットの管理ＩＤと一つ前のパケットの管理ＩＤとを宛先毎に比較することで、同様の効果を得ることができる。
【０１６０】
さらに、以上の各実施例では、Ｐｏｓｔｅｄパケット及びＣｏｍｐｌｅｔｉｏｎパケットを同じ仮想チャネルを経由させて送信したが、Ｐｏｓｔｅｄパケット及びＣｏｍｐｌｅｔｉｏｎパケットの経路を異ならせてもよい。その場合も、出力しようとするＮＰパケットの管理ＩＤと一つ前のパケットの管理ＩＤとを宛先毎に比較することで、同様の効果を得ることができる。
【符号の説明】
【０１６１】
１  ＰＣＩｅデバイス
２  スイッチ
３  クロスバスイッチ
４，４Ａ，４Ｂ  スイッチ
５  ルートコンプレックス
６  ＣＰＵ
２１，２１Ａ，２１Ｂ  溜込バッファ
２２  サイドバッファ
２３  調停部
２４  管理ＩＤ生成部
２５  ヘッダ付加部
３１，３２  仮想チャネル
４１，４１Ａ，４１Ｂ  溜込バッファ
４２，４２Ａ，４２Ｂ  サイドバッファ
４３，４３Ａ，４３Ｂ  管理ＩＤ制御部
４４，４４Ａ，４４Ｂ  調停部
４１１，４１１Ａ，４１１Ｂ，４１２，４１２Ａ，４１２Ｂ  仮想チャネル
４３１，４３１Ａ，４３１Ｂ  管理ＩＤ保持回路
４３２，４３２Ａ，４３２Ｂ  管理ＩＤ比較回路
【図１】
2014204403.tif 000003
【図２】
2014204403.tif 000004
【図３】
2014204403.tif 000005
【図４】
2014204403.tif 000006
【図５】
2014204403.tif 000007
【図６】
2014204403.tif 000008
【図７】
2014204403.tif 000009
【図８】
2014204403.tif 000010
【図９】
2014204403.tif 000011
【図１０】
2014204403.tif 000012
【図１１】
2014204403.tif 000013
【図１２】
2014204403.tif 000014