(57)【特許請求の範囲】
【請求項１】
第１ノード、複数の第２ノード、および複数の中継装置が、集積回路上に構築されたパケット交換方式のバスによって接続されたバスシステムにおいて、前記第１ノードと前記複数の第２ノードの各々との間で送受信されるデータの伝送経路上に設けられるバス制御装置であって、
第１ノードから各第２ノードへ送信されたデータの送信順序を記憶する順序記憶部と、
前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、
振り分けられた前記データを、前記データの送信元である前記第２ノードごとに区別して格納するバッファ部と、
前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信する接続制御部と
を備えた、バス制御装置。
【請求項２】
前記入替可否情報が全て否である場合には、入替可否情報を参照せず、全てのデータに対し前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信する、請求項１に記載のバス制御装置。
【請求項３】
前記第１ノードは複数のバス・インターフェイスを備えており、
前記接続制御部は、データごとに、前記データの送信先となるバス・インターフェイスを特定するインターフェイス情報を参照して、前記バッファ部から前記バス・インターフェイスへ前記データを送信する、請求項１に記載のバス制御装置。
【請求項４】
前記インターフェイス情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて、データごとに、前記データの送信先となるバス・インターフェイスを特定する、請求項３に記載のバス制御装置。
【請求項５】
前記入替可否情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて決定されている、請求項１に記載のバス制御装置。
【請求項６】
前記振分部は、予め定められた振分規則を参照して、データの順序の入れ替わりの許容の可否をさらに区別して、前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの順序の入れ替わりの許容の可否をさらに区別して格納する、請求項１に記載のバス制御装置。
【請求項７】
前記振分部は、予め定められた振分規則を参照して、データの伝送経路をさらに区別して、前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの伝送経路をさらに区別して格納する、請求項１に記載のバス制御装置。
【請求項８】
前記振分部は、前記データのサイズに応じて前記バッファ部へのデータの分類方法を変更する、請求項１、６および７のいずれかに記載のバス制御装置。
【請求項９】
前記第１ノード、および前記第２ノードは、バスマスタ、メモリ、入出力機器のいずれかである、請求項１から８のいずれかに記載のバス制御装置。
【請求項１０】
第１ノード、および複数の第２ノードが、集積回路上に構築されたパケット交換方式のバスによって接続されたバスシステムにおいて、前記第１ノードと前記複数の第２ノードの各々との間で送受信されるデータを中継する中継装置であって、
バスから受信したデータを格納する中継バッファと、
前記中継バッファに格納されていた前記データを前記複数の第２ノードのいずれかに送信する中継制御部と、
各第２ノードへ送信された前記データの送信順序を記憶する順序記憶部と、
前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、
振り分けられた前記データを、前記データの送信元である前記各第２ノードごとに区別して格納するバッファ部と、
前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、
前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部と
を備えた、中継装置。
【請求項１１】
前記振分部は、予め定められた振分規則を参照して、前記第１ノードおよび前記第２ノードを区別して前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの送信元である前記各第２ノードごとに、および前記第１ノードごとに区別して格納する、請求項１０に記載の中継装置。
【請求項１２】
前記入替可否情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて決定されている、請求項１０に記載の中継装置。
【請求項１３】
前記振分部は、予め定められた振分規則を参照して、データの順序の入れ替わりの許容の可否をさらに区別して、前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの順序の入れ替わりの許容の可否をさらに区別して格納する、請求項１０に記載の中継装置。
【請求項１４】
前記振分部は、予め定められた振分規則を参照して、データの伝送経路をさらに区別して、前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの伝送経路をさらに区別して格納する、請求項１０に記載の中継装置。
【請求項１５】
前記振分部は、予め定められた振分規則を参照して、前記第２ノードを区別して振り分け先を決定する方法と、前記第２ノードおよび前記第１ノードの両方を区別して振り分け先を決定する方法とを選択可能である、請求項１０に記載の中継装置。
【請求項１６】
前記振分部は、前記データのサイズに応じて前記バッファ部へのデータの分類方法を変更する、請求項１０または１１に記載の中継装置。
【請求項１７】
前記第１ノード、および前記第２ノードは、バスマスタ、メモリ、入出力機器のいずれかである、請求項１０から１６のいずれかに記載の中継装置。
【請求項１８】
集積回路上に構築されたパケット交換方式のバスを有するバスシステムであって、
第１ノードと、
複数の第２ノードと、
第１中継装置および第２中継装置を含む複数の中継装置と、
前記第１ノードおよび前記第１中継装置の間で送受信されるデータの伝送経路上に設けられた第１バス制御装置と、
前記複数の第２ノードおよび前記第２中継装置の間で送受信されるデータの伝送経路上に設けられた第２バス制御装置と
を備え、
前記複数の中継装置、前記第１バス制御装置、および前記第２バス制御装置のうちの少なくとも１つの装置は、
バスから受信したデータを格納する中継バッファと、
前記中継バッファに格納されていた前記データを前記複数の第２ノードのいずれかに送信する中継制御部と、
各第２ノードへ送信された前記データの送信順序を記憶する順序記憶部と、
前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、
振り分けられた前記データを、前記データの送信元である前記各第２ノードに区別して格納するバッファ部と、
前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、
前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部と
を有している、バスシステム。
【請求項１９】
前記複数の中継装置は、ローカルバスおよびシステムバスを接続するバス間中継装置をさらに含み、
前記ローカルバスは、前記第１制御装置、および前記第１中継装置を含み、
前記システムバスは、前記第２中継装置を含み、
前記少なくとも１つの装置に設けられた前記接続制御部は、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する、請求項１８に記載のバスシステム。
【請求項２０】
第３中継装置と、
複数の第３ノードと、
前記複数の第３ノードおよび前記第３中継装置の間で送受信されるデータの伝送経路上に設けられた第３バス制御装置と
をさらに備え、
前記少なくとも１つの装置において、
前記中継制御部は、前記中継バッファに格納されていた前記データを前記複数の第３ノードのいずれかにもさらに送信し、
前記順序記憶部は、各第３ノードへ送信された前記データの送信順序をさらに記憶し、
前記振分部は、前記各第２ノードおよび前記各第３ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定し、
前記バッファ部は、振り分けられた前記データを、前記データの送信元である前記各第２ノードおよび各第３ノードごとに区別して格納し、
前記接続制御部は、前記各第２ノードおよび前記各第３ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する、請求項１９に記載のバスシステム。
【請求項２１】
前記第３バス制御装置は、
バスから受信したデータを格納する中継バッファと、
前記中継バッファに格納されていた前記データを前記複数の第３ノードのいずれかに送信する中継制御部と、
各第３ノードへ送信された前記データの送信順序を記憶する順序記憶部と、
前記各第３ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、
振り分けられた前記データを、前記データの送信元である前記各第３ノードごとに区別して格納するバッファ部と、
前記各第３ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、
前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部と
を有しており、
前記第３バス制御装置において、前記接続制御部は、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する、請求項２０に記載のバスシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、ネットワーク化された半導体バスを備える半導体集積回路において、バスマスタが複数のスレーブに送信した要求に対し、複数のスレーブからバスマスタへ送信される応答の順序を制御する技術に関する。
【背景技術】
【０００２】
集積回路の開発において、目的の機能や性能を実現するために、既存のバスマスタを再利用し繋ぎ合わせることで効率的に開発を行う取り組みがある。このような開発では、バス幅やバスプロトコル、要求品質の異なる多種多様なバスマスタを容易に接続できることが求められる。【０００３】
その一方で、多種多様なバスマスタを接続する場合、バスマスタ毎にアクセスするスレーブの数が異なったり、バスマスタのバス・インターフェイスの数や、受信バッファのサイズが異なるため、バスマスタ毎に要求される伝送性能を確保できるようにバス・インターフェイスを設計することが必要となる。【０００４】
特許文献１は、バスマスタと複数のスレーブ間の伝送性能を改善する技術を開示する。特許文献１は、バスマスタのバス・インターフェイスを物理的に増やし、複数の物理的バスによって構成される論理バスを利用することで、メモリへのアクセスの伝送帯域を広げることを可能にする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３０８６２６１号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
集積回路を効率的に開発するために、開発工数をできるだけ低減することが求められている。【０００７】
本願の、限定的ではない例示的なある実施形態は、開発工数をできるだけ低減しつつ、要求される性能を確保することが可能なバス制御装置を提供する。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明の一態様は、第１ノード、複数の第２ノード、および複数の中継装置が、集積回路上に構築されたパケット交換方式のバスによって接続されたバスシステムにおいて、前記第１ノードと前記複数の第２ノードの各々との間で送受信されるデータの伝送経路上に設けられるバス制御装置であって、第１ノードから各第２ノードへ送信されたデータの送信順序を記憶する順序記憶部と、前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、振り分けられた前記データを、前記データの送信元である前記第２ノードごとに区別して格納するバッファ部と、前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信する接続制御部とを備えている。【０００９】
上述の一般的かつ特定の態様は、システム、方法およびコンピュータプログラムを用いて実装され、またはシステム、方法およびコンピュータプログラムの組み合わせを用いて実現され得る。
【発明の効果】
【００１０】
本発明の一態様にかかるバス制御装置によれば、複数のメモリからのデータを受信した際に、バスマスタ毎にバス・インターフェイスの作りこみが不要となり、バス制御装置の設定を変更するだけで複数のスレーブからの応答の受信が可能となるため、半導体集積回路の設計を簡略化できる。【００１１】
また、複数のスレーブに対して、バスマスタ側のバス・インターフェイスを物理的に増やす必要がないため、バスマスタの実装面積と消費電力量を削減できる。
【図面の簡単な説明】
【００１２】
【図１】（Ａ）はバスマスタ２０１のバス・インターフェイス２０１ａ、およびバスの構成を示す図であり、（Ｂ）はバスマスタ２０３のバス・インターフェイス２０３ａ、およびバスの構成を示す図である。
【図２】本願発明者らによって認識された従来技術の課題を解決するための構成の概要を説明する図である。
【図３】本開示にかかる半導体集積回路上に構築されたバスシステム１００ａの構成例を示す図である。
【図４】本開示にかかる半導体集積回路上に構築されたバスシステム１００ｂの構成例を示す図である。
【図５】本開示のバス制御装置４０１ａの基本的な構成を示す図である。
【図６】入替可否情報記憶部４０７に記憶される入替可否情報の一例を示す図である。
【図７】入替可否情報記憶部４０７に記憶される入替可否情報の他の例を示す図である。
【図８】順序記憶部４０８で記憶される順序情報の一例を示す図である。
【図９】ＩＦ情報記憶部４１１で記憶されるＩＦ情報の一例を示す図である。
【図１０】振分規則記憶部４１２に記憶される振分規則の例を示す図である。
【図１１】バスマスタ４０２から複数のメモリ４０３に対してデータを送信する場合のバス制御装置４０１ａの動作手順を示す図である。
【図１２】バス制御装置４０１ａが、複数のメモリ４０３からデータを受信した場合の動作手順の概要を示す図である。
【図１３】接続制御部４１０の動作手順を示す図である。
【図１４】バスマスタ３０１と複数のメモリ３０３とを接続する伝送路の少なくとも一部が共用される例を示す図である。
【図１５】ＮＩＣの機能を備えたバス制御装置４０１ｂの構成を示す図である。
【図１６】（Ａ）および（Ｂ）は振分規則記憶部４１２に記憶される振分規則の例を示す図である。
【図１７】バスマスタ４０２からメモリ４０３へデータを送信する場合の、バス制御装置４０１ｂの動作手順を示す図である。
【図１８】バス制御装置４０１ｂが、メモリ４０３から送信されたデータを受信した時の動作手順を示す図である。
【図１９】振分部４１３の動作手順を示す図である。
【図２０】メモリ４０３からバスマスタ４０２へ送信が完了したデータのデータＩＤをトランザクション毎に記録した順序情報の例を示す図である。
【図２１】ローカルバスを介して接続された複数のバスマスタ３０１が、システムバスを介して接続された複数のメモリ３０３と通信を行う構成を示す図である。
【図２２】ローカルバスを介して接続された複数のバスマスタ３０１が、システムバスを介して接続された複数のメモリ３０３と通信を行う構成を示す図である。
【図２３】（Ａ）および（Ｂ）は、中継装置１６０１の振分規則記憶部１１０２が記憶している振分規則の例を示す図である。
【図２４】ローカルバスからシステムバスへのデータ送信時の中継装置１６０１の動作を示す図である。
【図２５】中継装置１６０１が、複数のメモリ４０３から送信されたデータを受信した際の動作手順の概要を示す図である。
【図２６】中継装置１６０１の振分部４１３がバッファ部にパケットを格納する際に行う動作手順を示す図である。
【図２７】複数の要素においてメモリからの応答データの順序の入替えを行うことが可能なバスシステム１００ｃの構成を示す図である。
【図２８】メモリコントローラ２６０１と接続されるＮＩＣ１００３の構成を示す図である。
【発明を実施するための形態】
【００１３】
上述したように、特許文献１では、要求性能に応じてバス・インターフェイスを増やすことで伝送帯域を広げることができる。しかしながら、特許文献１の技術によれば、バスマスタの要求性能に応じて、個別にバス・インターフェイスを作り込む必要があり、開発の工数が増加する。
【００１４】
また、あるバスマスタが、それぞれ異なるバス・インターフェイスを介して複数のメモリにアクセスする場合、バスマスタからメモリまでの距離やメモリ内での処理時間の違いによって、それぞれのメモリから返信されるデータの順序に入れ替わりが発生する。このため、バスマスタからメモリへ送信した順番で、メモリからの返信データを処理する必要がある場合には、受信したデータの順序をバスマスタが並び替える対策が必要となる。これでは、バスマスタに実装すべき機能が増加し、やはり開発工数が増加する。
【００１５】
ここで図１を参照しながら、本願発明者らが見出した課題をより具体的に説明する。
【００１６】
バスマスタと複数のスレーブ間の伝送性能を改善する方法として、特許文献１は、バスマスタのバス・インターフェイスを物理的に増やし、複数の物理的バスによって構成される論理バスを利用している。この構成によれば、メモリへのアクセスの伝送帯域を広げることが可能であるとされている。
【００１７】
図１（Ａ）は、２個のメモリ２０２にアクセスするバスマスタ２０１のバス・インターフェイス２０１ａ、およびバスの構成を示している。また、図１（Ｂ）は、ｍ個のメモリ２０４にアクセスするバスマスタ２０３のバス・インターフェイス２０３ａ、およびバスの構成を示している。バス・インターフェイスは、たとえばバスマスタがデータの授受を行うための入出力端子である。
【００１８】
図１（Ａ）に示すように、各メモリとデータを送受信可能にするためには、特許文献１の技術では、バスマスタ毎にバス・インターフェイスを拡張することが必要である。また、メモリの数に応じて、バス・インターフェイスが増加する。これでは、拡張のために要する工数が増加する。
【００１９】
また、図１（Ｂ）に示すように、バスマスタから物理的に異なるバスを介して、複数のメモリにアクセスを行う場合、バスマスタからメモリまでの距離や、メモリでの処理時間の違いによって、メモリから送信されたデータの順番の入れ替わりが発生する。このため、バスマスタからメモリへ送信した順番で、メモリからの返信データを処理する必要がある場合には、バスマスタにおいて、メモリからのデータの順序を並び替える必要がある。その結果、データの順序を並び替える必要が生じ、拡張の工数が同様に増加する。
【００２０】
図２は、本願発明者らによって認識された従来技術の課題を解決するための構成の概要を説明する図である。
【００２１】
本開示では、バスマスタ３０１と複数のメモリ３０３との間に、ネットワーク・インタフェイス・コントローラ（ＮＩＣ）とは別体の、またはＮＩＣと一体化されたバス制御装置３０２を設けた。バス制御装置３０２は、複数のメモリ３０３からバスマスタ３０１へ送信されるデータを、一旦、メモリ毎に分類して格納する。さらにバス制御装置３０２は、バスマスタ３０１の各バス・インターフェイス３０４に宛てて、バスマスタからメモリへデータ（要求）を送信した順序と同じ順序で、データを送信する。つまり、バス制御装置３０２を設けることで、メモリ３０３から送られてきたデータの順序を維持して、データを各バス・インターフェイス３０４に渡すことができる。バスマスタおよびバス・インターフェイス３０４を変更する必要はないため、バスマスタ３０１の拡張は不要である。
【００２２】
このため、バス制御装置３０２は、複数のメモリ３０３からの応答の順序がバスマスタ３０１からメモリ３０３へ送信したデータと同じ順序となるように、メモリ３０３からバスマスタ３０１へのデータを並び替える機能と、さらに、バスマスタ３０１のバス・インターフェイス３０４に合わせて、メモリ３０３からのデータを、どのバス・インターフェイス３０４を介してバスマスタ３０１へ送信するかを決定する機能とを備える。これらの機能を有するバス制御装置を用意し、システムバスに組み込むことにより、既存の種々のバスマスタを拡張する必要がなくなり、既存の資源を有効に活用した集積回路を得ることができる。
【００２３】
このように、バス制御装置３０２において、複数のメモリ３０３から送信されたデータを、バスマスタ３０１のバス・インターフェイス毎に並び替えることで、仕様変更などに伴う既存のバスマスタ３０１のバス・インターフェイスの拡張を不要とし、バス制御装置３０２の設定の変更だけで対応ができる。よって、開発を簡略化し、工数を削減できる。
【００２４】
本発明の一態様の概要は以下のとおりである。
【００２５】
本発明の一態様であるバス制御装置は、第１ノード、複数の第２ノード、および複数の中継装置が、集積回路上に構築されたパケット交換方式のバスによって接続されたバスシステムにおいて、前記第１ノードと前記複数の第２ノードの各々との間で送受信されるデータの伝送経路上に設けられるバス制御装置であって、第１ノードから各第２ノードへ送信されたデータの送信順序を記憶する順序記憶部と、前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、振り分けられた前記データを、前記データの送信元である前記第２ノードごとに区別して格納するバッファ部と、前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信する接続制御部とを備えている。
【００２６】
たとえば前記入替可否情報が全て否である場合には、入替可否情報を参照せず、全てのデータに対し前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信する。
【００２７】
たとえば前記第１ノードは複数のバス・インターフェイスを備えており、前記接続制御部は、データごとに、前記データの送信先となるバス・インターフェイスを特定するインターフェイス情報を参照して、前記バッファ部から前記バス・インターフェイスへ前記データを送信する。
【００２８】
たとえば前記インターフェイス情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて、データごとに、前記データの送信先となるバス・インターフェイスを特定する。
【００２９】
たとえば前記入替可否情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて決定されている。
【００３０】
たとえば前記振分部は、予め定められた振分規則を参照して、データの順序の入れ替わりの許容の可否をさらに区別して、前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの順序の入れ替わりの許容の可否をさらに区別して格納する。
【００３１】
たとえば前記振分部は、予め定められた振分規則を参照して、データの伝送経路をさらに区別して、前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの伝送経路をさらに区別して格納する。
【００３２】
たとえば前記振分部は、前記データのサイズに応じて前記バッファ部へのデータの分類方法を変更する。
【００３３】
たとえば前記第１ノード、および前記第２ノードは、バスマスタ、メモリ、入出力機器のいずれかである。
【００３４】
本発明の他の一実施形態にかかる中継装置は、第１ノード、および複数の第２ノードが、集積回路上に構築されたパケット交換方式のバスによって接続されたバスシステムにおいて、前記第１ノードと前記複数の第２ノードの各々との間で送受信されるデータを中継する中継装置であって、バスから受信したデータを格納する中継バッファと、前記中継バッファに格納されていた前記データを前記複数の第２ノードのいずれかに送信する中継制御部と、各第２ノードへ送信された前記データの送信順序を記憶する順序記憶部と、前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、振り分けられた前記データを、前記データの送信元である前記各第２ノードに区別して格納するバッファ部と、前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部とを備えている。
【００３５】
たとえば前記振分部は、予め定められた振分規則を参照して、前記第１ノードおよび前記第２ノードを区別して前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの送信元である前記各第２ノードに、および前記第１ノードごとに区別して格納する。
【００３６】
たとえば前記入替可否情報は、前記集積回路において実行されるアプリケーション、および前記第２ノードの種別の少なくとも一方に応じて決定されている。
【００３７】
たとえば前記振分部は、予め定められた振分規則を参照して、データの順序の入れ替わりの許容の可否をさらに区別して、前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの順序の入れ替わりの許容の可否をさらに区別して格納する。
【００３８】
たとえば前記振分部は、予め定められた振分規則を参照して、データの伝送経路をさらに区別して、前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの伝送経路をさらに区別して格納する。
【００３９】
たとえば前記振分部は、予め定められた振分規則を参照して、前記第２ノードを区別して振り分け先を決定する方法と、前記第２ノードおよび前記第１ノードの両方を区別して振り分け先を決定する方法とを選択可能である。
【００４０】
たとえば前記振分部は、前記データのサイズに応じて前記バッファ部へのデータの分類方法を変更する。
【００４１】
たとえば前記第１ノード、および前記第２ノードは、バスマスタ、メモリ、入出力機器のいずれかである。
【００４２】
本発明のさらに他の一実施形態であるバスシステムは、集積回路上に構築されたパケット交換方式のバスを有するバスシステムであって、第１ノードと、複数の第２ノードと、第１中継装置および第２中継装置を含む複数の中継装置と、前記第１ノードおよび前記第１中継装置の間で送受信されるデータの伝送経路上に設けられた第１バス制御装置と、前記複数の第２ノードおよび前記第２中継装置の間で送受信されるデータの伝送経路上に設けられた第２バス制御装置とを備え、前記複数の中継装置、前記第１バス制御装置、および前記第２バス制御装置のうちの少なくとも１つの装置は、バスから受信したデータを格納する中継バッファと、前記中継バッファに格納されていた前記データを前記複数の第２ノードのいずれかに送信する中継制御部と、各第２ノードへ送信された前記データの送信順序を記憶する順序記憶部と、前記各第２ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、振り分けられた前記データを、前記データの送信元である前記各第２ノードに区別して格納するバッファ部と、前記各第２ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部とを有している。
【００４３】
たとえば前記複数の中継装置は、ローカルバスおよびシステムバスを接続するバス間中継装置をさらに含み、前記ローカルバスは、前記第１制御装置、および前記第１中継装置を含み、前記システムバスは、前記第２中継装置を含み、前記少なくとも１つの装置に設けられた前記接続制御部は、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する。
【００４４】
たとえばバスシステムは、第３中継装置と、複数の第３ノードと、前記複数の第３ノードおよび前記第３中継装置の間で送受信されるデータの伝送経路上に設けられた第３バス制御装置とをさらに備え、前記少なくとも１つの装置において、前記中継制御部は、前記中継バッファに格納されていた前記データを前記複数の第３ノードのいずれかにもさらに送信し、前記順序記憶部は、各第３ノードへ送信された前記データの送信順序をさらに記憶し、前記振分部は、前記各第２ノードおよび前記各第３ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定し、前記バッファ部は、振り分けられた前記データを、前記データの送信元である前記各第２ノードおよび各第３ノードに区別して格納し、前記接続制御部は、前記各第２ノードおよび前記各第３ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する。
【００４５】
たとえば前記第３バス制御装置は、バスから受信したデータを格納する中継バッファと、前記中継バッファに格納されていた前記データを前記複数の第３ノードのいずれかに送信する中継制御部と、各第３ノードへ送信された前記データの送信順序を記憶する順序記憶部と、前記各第３ノードから前記第１ノード宛てに伝送されたデータを受信し、予め定められた振分規則を参照して、前記データの振り分け先を決定する振分部と、振り分けられた前記データを、前記データの送信元である前記各第３ノードに区別して格納するバッファ部と、前記各第３ノードから第１ノードへ伝送される際のデータの伝送順序の入れ替わりの可否を示す入替可否情報を参照して、順序の入れ替わりが許容されないデータに関しては、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する接続制御部と、前記接続制御部の制御にしたがって、前記データを前記バスに出力する送信制御部とを有しており、前記第３バス制御装置において、前記接続制御部は、前記順序記憶部に記憶された前記送信順序と同じ順序で、前記バッファ部から前記第１ノードへ前記データを送信するよう制御する。
【００４６】
以下では、本開示の各実施形態の説明に先立って、まず、本開示にかかる半導体集積回路を説明する。
【００４７】
図３は、本開示にかかる半導体集積回路上に構築されたバスシステム１００ａの構成例を示す。バスシステム１００ａには、複数のバスマスタと複数のメモリが接続されている。複数のバスマスタは、入出力のアクセスのビット幅や通信のプロトコルが異なっている。なお、図３においては、上述したバス・インターフェイスの記載は、簡略化のため省略されている。後述する図４でも同様である。
【００４８】
各バスマスタは、上述したバス制御装置およびネットワーク・インタフェイス・コントローラ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ；以下「ＮＩＣ」と記述する場合がある。）を介してシステムバス１１０に接続される。ＮＩＣは、バスマスタが送信したデータを中継装置へ送信するために、データをパケットに変換するパケット化の処理、および中継装置から受信したパケットからデータを抽出するデパケット化の処理を行う回路である。なお、デパケット化の処理に当たっては、データをバスマスタへ送信するためのバスプロトコルの変換処理も行う。
【００４９】
図３におけるバス制御装置の構成例は、図５を参照しながら後述する。
【００５０】
また図４は、本開示にかかる半導体集積回路上に構築されたバスシステム１００ｂの構成例を示す。この例では、バス制御装置はＮＩＣ内に組み込まれている。図４におけるバス制御装置の構成例は、図１５を参照しながら後述する。
【００５１】
図３および図４において、システムバス１１０上を伝送されるデータは、システムバス１１０に設けられた１以上の中継装置によって中継される。中継装置は、パケット化されたデータを宛先のノードへと転送する回路である。これにより、各バスマスタは、バス制御装置、ＮＩＣおよびネットワーク化されたシステムバス１１０を介して複数のメモリと接続され、データを送受信することが可能となる。
【００５２】
図３および図４とはさらに異なる構成例も考えられる。たとえば、ローカルバスとシステムバスとを接続する１または複数の中継装置のいずれかに、上述したバス制御装置が組み込まれてもよい。なお、ローカルバスとは、半導体集積回路上の一部の領域において物理的な距離が近いバスマスタとシステムバスを接続するバスであり、システムバスとは異なるバス幅や動作周波数で動作する。その構成例は、後に図２２を参照しながら説明する。
【００５３】
図３および図４では中継装置をリング状に接続したシステムバス１１０の構成を示しているが、これは一例であり、半導体集積回路はリング状に接続された構成に限定されない。たとえば、中継装置を格子状に配置したメッシュ型や、中継装置を多段に接続した階層型などその他の構成を採用してもよい。また、図３および図４では、複数のバスマスタが複数の共有メモリに接続する例を示したが、バスマスタの接続先は共有メモリに限定されない。たとえば、バスマスタは、外部回路（図示せず）との入出力機器Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）と接続されてもよい。
【００５４】
図３および図４において、ネットワーク化されたシステムバス１１０を含む半導体集積回路１１０ａおよび１１０ｂを示した。このような、複数のバスマスタがネットワーク化したバスにより接続された構成は、ネットワーク・オン・チップ（Ｎｅｔｗｏｒｋ  ｏｎ  ｃｈｉｐ；ＮｏＣ）と呼ばれる。なお、バスマスタとメモリが直接接続された半導体集積回路であってもよい。
【００５５】
図５は、本開示のバス制御装置４０１ａの基本的な構成を示す。このバス制御装置４０１ａは、図３に示されるバス制御装置に対応する。図５では、パケット交換方式において必要な機能（パケット化とデパケット化）の記載は簡略化のため省略している。なお、図４に記載の、半導体集積回路上に構築されたバスシステム１００ｂでは、ＮＩＣが、バス制御装置の構成に加え、パケット交換方式に必要なパケット化とデパケット化を実現する構成を備える。ＮＩＣの構成については、後に図１５を参照しながら説明する。図３のシステムバス１１０ａはパケット交換方式でデータを授受する。しかしながら、パケット交換方式を用いず、回線交換方式でデータを授受する場合であっても、図５に示す構成を利用することができる。
【００５６】
バス制御装置４０１ａは、データの送信／受信を行う第１ノードと、当該データの受信／送信を行う複数の第２ノードとを接続する装置である。第１ノードと第２ノードとして、バスマスタ、メモリ、入出力機器Ｉ／Ｏなどが利用される。図５では、バス制御装置４０１ａは、バスマスタ４０２と接続され、さらにシステムバス１１０上に存在する複数のメモリとデータの授受を行う。
【００５７】
以下の実施形態の説明では、バスマスタ４０２を第１ノードとし、メモリ４０３を第２ノードとする。また、以下の説明において「データの送信」は、バスマスタ４０２からメモリ４０３に対し、１回のアドレス指定で送受信されるリードやライトのアクセスによって行われるとする。
【００５８】
バスマスタ４０２は、送信用バス・インターフェイス４０４および受信用バス・インターフェイス４０５を介してバス制御装置４０１ａと接続されている。
【００５９】
バス制御装置４０１ａは、送信制御部４０６、入替可否情報記憶部４０７、順序記憶部４０８、メモリ毎に用意されたバッファ部４０９、接続制御部４１０、ＩＦ情報記憶部４１１、振分規則記憶部４１２、振分部４１３を備えている。
【００６０】
送信用バス・インターフェイス４０４は、バスマスタ４０２からバス制御装置４０１ａへデータやコマンドの送信を制御する回路である。受信用バス・インターフェイス４０５は、バス制御装置４０１ａから、バスマスタ４０２へデータやコマンドの受信を制御する回路である。
【００６１】
送信制御部４０６は、バスマスタ４０２からのデータをメモリ４０３へ送信する回路である。
【００６２】
入替可否情報記憶部４０７は、入替可否情報を記憶する記憶装置（たとえばＳＲＡＭ）である。入替可否情報とは、一連の処理に関連するデータの集まり（トランザクション）をバスマスタが送信した場合に、伝送路上でのデータの順序の入れ替りをバスマスタで許容可能かどうかを示す情報である。
【００６３】
なお、伝送路上でのデータの順序の入れ替りとは、バスマスタからメモリや入出力機器Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）へ送信したコマンドの発行順序と、メモリや入出力機器Ｉ／Ｏからバスマスタへのデータの応答の順序が入れ替わることを意味する。
【００６４】
また、このような順序の入れ替わりは、バスマスタが複数のメモリや入出力機器Ｉ／Ｏに対してデータの送受信を行う場合に発生する。その具体例として、たとえば、遅延に対する要求が厳しい動画再生に関与するバスマスタでは、単一メモリとの送受信だけでは必要な伝送帯域が不足する場合、複数メモリに対して並列にアクセスを行うことで伝送帯域の不足を解消、低遅延伝送を実現することができる。
【００６５】
また、別の例として、CG（Computer Graphics）を描画するグラフィックス・エンジンでは、単一のメモリでは伝送帯域が不足する場合に、複数のメモリに処理を負荷分散させることで、性能を出すことができる。
【００６６】
また、同じバスマスタであっても、アプリケーションやユースケース（例えば動画再生やＣＧにおける解像度や画質など）の違いによって、単一メモリだけでは伝送帯域が不足し、複数のメモリとアクセスが必要となる。
【００６７】
このように、入替可否情報は、バスマスタの種別毎に設けられてもよいし、集積回路において実行されるアプリケーションやユースケースの種別毎に設けられてもよい。
【００６８】
順序記憶部４０８は、バスマスタ４０２からメモリ４０３へ送信したデータの順序の情報を記憶する記憶装置（たとえばＳＲＡＭ）である。
【００６９】
バッファ部４０９は、各メモリ４０３から送信されたデータを、送信元であるメモリごとに区別して格納する記憶装置（たとえばＳＲＡＭ）である。バッファ部４０９は、複数の部分バッファを含む。図５には、部分バッファである第１バッファ〜第ｎバッファが例示されている。なお、メモリ４０３を区別してデータを格納できる構成であれば、バッファ部４０９は、物理的に複数の部分バッファに分かれていてもよいし、論理的に分かれていてもよい。以下では、特に部分バッファを明示する必要がない限り、総括的に「バッファ部４０９」と呼ぶこととする。
【００７０】
ＩＦ情報記憶部４１１は、バスマスタ内で一連の処理に関連するデータの集まり（トランザクション）毎に、データをバスマスタ４０２へ送信する際に利用するバス・インターフェイスの情報を記憶するメモリである。
【００７１】
接続制御部４１０は、バス・インターフェイス毎に、データの送信先となるバッファ部４０９を決定する回路である。バッファ部４０９の決定に際し、接続制御部４１０は、バッファ部４０９に格納されたデータに対し、順序記憶部４０８で記録されるデータの順序情報、入替可否情報記憶部４０７に記憶される順序の入替を許容できるデータであるかの可否情報、ＩＦ情報記憶部に記録されるバスマスタ４０２へ送信する際に利用するバス・インターフェイス情報を参照する。
【００７２】
振分規則記憶部４１２は、メモリ４０３から送信されたパケットとバッファ部４０９の格納先との対応関係を定義した振分規則を記憶したメモリである。
【００７３】
振分部４１３は、振分規則記憶部４１２に記録された振分規則に基づいて、データをバッファ部４０９に格納する回路である。データをバッファ部４０９に格納する際、振分部４１３は、そのデータがどのメモリから送信されたかを識別し、対応するバッファに格納する。
【００７４】
なお、バスマスタ４０２は、バス制御装置４０１ａに対して、データと一緒にアプリケーションやバスマスタの種別毎に関連して処理されるデータの集まりを識別するためのトランザクションＩＤもバス制御装置に通知する。
【００７５】
図６は、入替可否情報記憶部４０７に記憶される入替可否情報の一例を示す。入替可否情報では、アプリケーションやバスマスタの種別毎に一連の処理に関連するデータの集まり（トランザクション）を識別するためのトランザクションＩＤと、そのトランザクションに属するデータで順序の入れ替わりを許容できるかどうかの可否が記録される。
【００７６】
図６の例では、トランザクションＩＤが０番とＮ番で識別されるデータは、伝送路上での順序の入れ替りをバスマスタ４０２で許容できないデータである。よって、それぞれのトランザクションＩＤに対して、順序の入れ替わりが「否」と記録される。一方、トランザクションＩＤが１番と２番で識別されるデータは、伝送路上での順序の入れ替りをバスマスタ４０２で許容できるデータであり、トランザクションＩＤに対して、順序の入れ替わりが「可」と記録される。
【００７７】
なお、「否」、「可」という表現は一例に過ぎない。それぞれが識別可能であれば、たとえば０または１で表現されてもよい。順序の入れ替わりを認めるか、認めないかを表現可能な情報であればよい。
【００７８】
また、入替可否情報について、図６の例では、トランザクションＩＤに対して可否を記録する例を示したが、データの応答を返したスレーブ（メモリや入出力機器Ｉ／Ｏ）毎に、その利用形態に基づき入替の可否を定義しても良い。例えば図７では、バスマスタが常に単一で利用するメモリ１及びメモリｍからの応答データに対しては入替が許容し、常に他のスレーブと同時に利用されるメモリ（メモリ１とメモリ３の組合せ、メモリ２とメモリ４の組合せ）からの応答データに対しては、データの入替が許容しないように入替可否情報を定義しても良い。
【００７９】
図８は、順序記憶部４０８で記憶される順序情報の一例を示す。
【００８０】
順序情報は、図８に示すように、バスマスタ４０２がメモリにデータを送信した順序でそのデータを識別するデータＩＤと、そのデータが属するトランザクションを識別するトランザクションＩＤとを含む。
【００８１】
なお、データＩＤは送信制御部４０６により、データを送信する際に付与される。またトランザクションＩＤは、バスマスタ４０２で管理し、データの送信と同時にバス制御装置４０１ａへ通知される。
【００８２】
図８の例では、データが送信された順番にバスマスタ４０２から送信されたデータに付与したデータＩＤと、バスマスタから通知されたトランザクションＩＤとが、順序記憶部４０８に記憶される。
【００８３】
図９は、ＩＦ情報記憶部４１１で記憶されるＩＦ情報の一例を示す。
【００８４】
ＩＦ情報は、トランザクションを特定するトランザクションＩＤと、トランザクション毎に、データをバスマスタ４０２へ送信する際に利用するバス・インターフェイスの識別番号とを含む。
【００８５】
図９の例では、アプリケーションやバスマスタの種別毎に一連の処理に関連するデータの集まりを識別するトランザクションＩＤとバス・インターフェイスのＩＤの対応関係が記録される。
【００８６】
図１０は、振分規則記憶部４１２に記憶される振分規則の例を示す。振分規則は、データを送信したメモリを識別するメモリＩＤとバッファ部４０９の格納先との対応関係を定義している。メモリＩＤは、パケットのヘッダ情報部に記載されている値を参照することで取得できる。図１１は、バスマスタ４０２から複数のメモリ４０３に対してデータを送信する場合のバス制御装置４０１ａの動作手順を示す。
【００８７】
図１１では、バスマスタ４０２から送信されたデータの順序を、情報記憶部４０８が管理する例を説明する。
【００８８】
ステップ７０１において、バス制御装置４０１ａの送信制御部４０７は、バスマスタ４０２からデータの送信があるかどうかを判定する。データの送信がある場合にはステップ７０２に移る。データの送信がない場合にはステップ７０１を繰り返す。
【００８９】
ステップ７０２において、送信制御部４０６は、バスマスタ４０２から送信されたデータに対し、各データを識別するためのデータＩＤを付与する。
【００９０】
ステップ７０３において、送信制御部４０７は、データに付与したデータＩＤとバスマスタ４０２から通知されたトランザクションＩＤを、データを送信した順番に順序記憶部４０８に記録する。
【００９１】
ステップ７０４において、送信制御部４０７は、データを宛先のメモリ４０３へ送信する。
【００９２】
以上のステップを繰り返すことにより、バス制御装置４０１ａは、バスマスタ４０２から送信されるデータに対し、データを識別するデータＩＤを付与し、データの送信順序をトランザクションＩＤと一緒に記憶することが可能である。
【００９３】
図１２は、バス制御装置４０１ａが、複数のメモリ４０３からデータを受信した場合の動作手順の概要を示す。
【００９４】
ステップ８０１において、振分部４１３は、振分規則記憶部４１２に記憶される振分規則に基づき、メモリ４０３から送信されたデータを、メモリ４０３毎に区別してバッファ部４０９の部分バッファに格納する。
【００９５】
ステップ８０１を詳細に説明すると、以下の通りである。すなわち振分部４１３は、メモリ４０３から送信されたパケットに格納されていたデータとともに、そのヘッダ情報を受け取る。そして振分部４１３は、ヘッダ情報を参照し、パケットを送信したメモリＩＤを特定する。次に振分部４１３は、順序記憶部４０８の順序情報（図８）を参照し、パケットのヘッダ情報に記載されたデータＩＤから、トランザクションＩＤを特定する。
【００９６】
振分部４１３は、入替可否情報記憶部４０７の入替可否情報（図６または図７）を参照し、トランザクションＩＤから、パケットが伝送路上で順序の入れ替わりを許容できるかどうかの可否を特定する。振分部４１３は、振分規則記憶部４１２の振分規則（図１０）を参照し、パケットを送信したメモリのＩＤと伝送路上での順序の入れ替わりの可否に基づいて、パケットの格納先となるバッファ部４０９の部分バッファを特定する。これにより、振分部４１３は、メモリ４０３から送信されたパケットをバッファ部４０９ｂの部分バッファに格納することができる。
【００９７】
ステップ８０２において、接続制御部４１０は、バスマスタ４０２のバス・インターフェイス毎に、データ毎の順序入替の可否に応じて、データを送信するバッファ部４０９の部分バッファを順次決定する。具体的には、接続制御部４１０は、入替可否情報記憶部４０７の入替可否情報（図６または図７）を参照し、順序入替が許容出来ないデータに対して、バスマスタ４０２からメモリ４０３へ送信された順序と同じ順序で、バッファ部４０９の部分バッファに格納されているデータがバスマスタ４０２へ送信されるよう、部分バッファを順次決定する。また、順序入替が許容できるデータに対しては、部分バッファに格納された順序でデータを送信する。
【００９８】
接続制御部４１０の詳細動作については、図１３を参照しながら後に説明する。
【００９９】
なお、バスマスタの種別や、アプリケーション、ユースケースの種別によって、予め全てのデータで入れ替わりを許容できないことが確定している場合がある。つまり、入替可否情報において、順序の入れ替りが全て否とされている場合がある。そのような場合には、ステップ８０１における振分部４１３による入替可否情報の参照、及びステップ８０３における接続制御部４１０による入替可否情報の参照を省略しても良い。
【０１００】
ステップ８０３において、接続制御部４１０は、バス・インターフェイス毎に決定されたバッファ部４０９からバスマスタ４０２へデータを送信する。
【０１０１】
以上のステップを繰り返すことにより、複数のメモリ４０３からバスマスタ４０２へデータを送信する。
【０１０２】
なお、図１２の説明では、振分規則記憶部４１２に記憶される振分規則に基づき、メモリ４０３から送信されたデータを、メモリ４０３毎に区別してバッファ部４０９の部分バッファに格納する方法を説明した。これ以外の方法として、予め応答データのヘッダ情報にバッファ部４０９の格納先の部分バッファを記載しておき、振分部４１３は、ヘッダ情報に記載された格納先に基づき、応答データをバッファ部４０９に格納しても良い。ヘッダ情報にバッファ部４０９の格納先の部分バッファを記載する方法として、たとえばバスマスタ４０２からメモリ４０３へデータを送信する際に、パケット化部１１０１により、振分規則記憶部４１２に記載されている格納先の情報を、ヘッダ情報に記載し、さらに、その格納先の情報を、メモリ４０３において、バスマスタ４０２への応答データのヘッダ情報に記載する、という方法が考えられる。
【０１０３】
図１３は、接続制御部４１０の動作手順を示す。メモリ４０３から送信された順序入替を許容できないデータを、バスマスタ４０２からメモリ４０３へ送信された順序と同じ順序でバスマスタ４０２へ送信するために、接続制御部４１０は、バス・インターフェイス毎に、バッファ部からバスマスタ４０２へ送信するデータを決定する。接続制御部４１０は、メモリ４０３毎に区別されたバッファ部４０９に対して、以下のステップ９０１からステップ９０７を実行する。
【０１０４】
ステップ９０１において、接続制御部４１０は、バッファ部４０９にデータが格納されているかどうかを判定する。データが格納されている場合にはステップ９０２に移る。データが格納されていない場合には、他のメモリ４０３のバッファ部４０９の処理に移る。
【０１０５】
ステップ９０２において、接続制御部４１０は、順序記憶部４１１を参照し、バッファ部に格納されたデータのデータＩＤからトランザクションＩＤを特定する。
【０１０６】
ステップ９０３において、接続制御部４１０は、入替可否情報記憶部４０７を参照し、対応するトランザクションＩＤから、伝送路上で順序の入れ替わりを許容できるデータであるかどうかを特定する。
【０１０７】
ステップ９０４において、接続制御部４１０は、伝送路上で順序のデータの入れ替わりを許容できるデータであるか否かを判定し、入れ替わりを許容できる場合には処理はステップ９０５に移る。伝送路上で順序の入れ替わりを許容できないデータである場合には処理はステップ９０６に移る。
【０１０８】
ステップ９０５において、接続制御部４１０はＩＦ情報記憶部４１１を参照し、データのトランザクションＩＤから、バスマスタ４０２へデータを送信するためのバス・インターフェイスを特定する。
【０１０９】
ステップ９０６において、接続制御部４１０は、順序記憶部４０８を参照し、同じトランザクションＩＤを持つデータの中で、送信時刻が古く先にバスマスタ４０２へ送信すべきデータが存在するかどうかを確認する。このステップを実行する理由は、伝送路上でデータの入れ替わりが許容されないデータに対しては、バスマスタ４０２からメモリ４０３へのデータの送信の順序と同じ順序で、データをバスマスタ４０２へ送信することが必要だからである。
【０１１０】
ステップ９０７において、バスマスタ４０２へ先に送信すべきデータがない場合には、処理はステップ９０５に移る。先にバスマスタ４０２へ送信すべき他の応答データが存在する場合には、処理はステップ９０８に移る。
【０１１１】
ステップ９０８において、接続制御部４１０は、ＩＦ情報管理部４１１を参照し、バス・インターフェイス毎にデータを送信するバッファ部４０９の部分バッファを決定する。同じバス・インターフェイスを利用する部分バッファが複数存在する場合には、各部分バッファに格納されているデータＩＤを比較し、バスマスタ４０２から送信された順序（時刻）が最も古いデータを格納する部分バッファを選択する。
【０１１２】
なお、バス・インターフェイス毎に部分バッファを選択する方法としては、データＩＤの比較による送信時刻以外の方法を用いてもよい。例えば、データに優先度や締切時刻などの付加情報が付与されている場合には、優先度の大きいデータを選択したり、締切時刻の近いデータを選択したりしてもよい。
【０１１３】
ステップ９０９において、接続制御部４１０は、バッファ部４０９からバスマスタ４０２へ送信したデータのデータＩＤを、順序記憶部４０８から削除し、ステップ９０１に移る。
【０１１４】
以上、ステップ９０１からステップ９０９の動作を繰り返すことにより、接続制御部９１０は、バスマスタ４０２からメモリ４０３へ送信された順序と同じ順序でデータをバスマスタ４０２へ送信するために、バス・インターフェイス毎に、部分バッファからバスマスタ４０２へ送信するデータを決定する。
【０１１５】
図１４は、バスマスタ３０１と複数のメモリ３０３とを接続する伝送路の少なくとも一部が共用される例を示す。図１４には、経路１および２が示されている。経路１および２の一部は同じ中継装置および伝送路を利用している。図５のバス制御装置４０１ａの構成では、バス制御装置４０１ａと複数のメモリ４０３が直接接続される場合を例に説明を行ったが、図１４に示すように伝送路がメモリ間で共用される構成であってもよい。
【０１１６】
図１４では、伝送路をネットワーク化したＮｏＣを利用して、バスマスタ３０１と複数のメモリ３０３とが接続される構成が示されている。ＮｏＣでは、バスマスタが送受信するデータはＮＩＣ１００１でパケットに変換され、中継装置１００２を介してパケット交換方式により宛先のメモリ３０３まで送信される。
【０１１７】
また、中継装置１００２とメモリ３０３との間に設けられたＮＩＣ１００３は、中継装置１００２から受信したパケットをメモリ３０３へ送信する際、バスプロトコルの変換処理を行う。
【０１１８】
以下、ＮＩＣの機能を有するバス制御装置を説明する。当該バス制御装置は、バスマスタとシステムバスとの間に設けられることになる。
【０１１９】
図１５は、ＮＩＣの機能を備えたバス制御装置４０１ｂの構成を示す。このバス制御装置４０１ｂは、図４に示されるバス制御装置に対応する。
【０１２０】
図５に示されるバス制御装置４０１ａの構成要素と同等の機能を有する構成要素には、同じ参照符号を付与してその説明を省略する。ただし、機能が同等であっても、理解の便宜上、その構成要素を説明することがある。
【０１２１】
バッファ部４０９は、各メモリ４０３から送信されたデータを含むパケットを区別して格納する記憶装置（たとえばＳＲＡＭ）である。バッファ部４０９は、複数の部分バッファを含む。図１５には、部分バッファである第１バッファ〜第ｎバッファが例示されている。なお、各メモリからのパケットを区別して格納できる構成であれば、バッファ部４０９は、物理的に複数の部分バッファに分かれていてもよいし、論理的に分かれていてもよい。
【０１２２】
パケット化部１１０１は、バスマスタ４０２から送信されるデータを、ＮｏＣへ送信するためにパケットに変換する回路である。なお、パケットは、データをＮｏＣ上で中継する際に必要となる情報であるヘッダ情報と、送信対象となるデータとを有する。ヘッダ情報には、パケットの送受信先となるバスマスタとメモリを識別するＩＤ（アドレス）、およびデータを識別するためのデータＩＤが付与される。
【０１２３】
デパケット化部１１０２は、ＮｏＣを介してメモリ４０３から送信されたパケットをバスマスタ４０２へ送信するデータに変換する回路である。
【０１２４】
図１６（Ａ）および（Ｂ）は振分規則記憶部４１２に記憶される振分規則の例を示す。なお振分規則記憶部４１２は、図１６に示される例のほか、先に説明した図１０に示す振分規則を記憶してもよい。
【０１２５】
なお、パケットを格納するバッファ部４０９の割り当ては、例えばメモリ４０３からの答パケットのデータサイズに応じて、１つのメモリに対してバッファ部４０９の割り当てを多く割り当ててもよい。また、複数のメモリで１つのバッファ部４０９を共有するように割り当てを行ってもよい。
【０１２６】
また、バスマスタで順序の入れ替わりを許容できるパケットは、順序の並び替えが不要であるため、順序の入れ替わりを許容できないパケットと区別してバッファ部に格納してもよい。
【０１２７】
図１６（Ａ）の振分規則では、メモリ４０３からのパケットを、メモリＩＤと伝送路上での順序の入れ替わりをバスマスタで許容できるかどうかの可否をさらに加味し、バッファ部４０９の格納先を定義している。
【０１２８】
図１６（Ａ）の振分規則を用いた場合、順序の入れ替わりを許容できるパケットを１つのバッファ部で扱うことができるため、バス制御装置４０１ｂ内で必要なバッファ部４０９の数やサイズを削減し、実装面積と消費電力の削減することができる。
【０１２９】
図１６（Ｂ）は、パケットの伝送経路を区別してバッファ部にパケット振分規則記憶部４１２に記録される振分規則の例を示す。
【０１３０】
ＮｏＣでは、図１４に示すように、メモリ３０３からバスマスタ３０１への伝送路の経路を複数利用できるトポロジーを構築することができる。複数の経路を利用できる場合、異なる経路を介して並列にデータを送信することで、より広い伝送帯域を利用することができる。しかし、同じバスマスタ３０３から送信されたパケットであっても、異なる経路を経由してバスマスタ３０３に届く場合には、パケットの順序の入れ替わりが発生する場合がある。このため、伝送経路の違いによるパケットの順序の入れ替わりに対応するために、メモリＩＤの区別に加え、パケットが経由した経路を区別して、パケットをバッファ部に格納してもよい。
【０１３１】
図１６（Ｂ）の振分規則では、メモリ４０３からのパケットを、メモリＩＤとパケットの伝送経路をさらに加味し、バッファ部４０９の格納先を定義している。
【０１３２】
なお、複数の経路を利用できるトポロジーでは、パケットがいずれの経路を利用するかを送信時にヘッダ情報に記載する必要がある。このため、バス制御装置４０１ａは、パケットのヘッダ情報を参照することで、パケットが通った経路を特定できる。
【０１３３】
図１７は、バスマスタ４０２からメモリ４０３へデータを送信する場合の、バス制御装置４０１ｂの動作手順を示す。
【０１３４】
図１１に含まれる動作と同じ動作については、同じ符号を付与し説明を省略する。
【０１３５】
ステップ１３０１において、バス制御装置４０１ｂは、パケット化部１１０１によりバスマスタ４０２から送信されたデータに対し、ＮｏＣ上での中継処理に必要な情報を含むヘッダ情報を付与し、データのパケット化を行う。
【０１３６】
ステップ１３０２において、バス制御装置４０１ｂは、パケット化部１１０１より、パケットをＮｏＣへ送信する。
【０１３７】
以上のステップを繰り返すことにより、バス制御装置４０１ｂは、バスマスタ４０２から送信されるデータに対し、データを識別するデータＩＤを付与したパケットを送信し、さらにデータの送信順序をトランザクションＩＤと一緒に記録する。
【０１３８】
図１８は、バス制御装置４０１ｂが、メモリ４０３から送信されたデータを受信した時の動作手順を示す。
【０１３９】
図１２に含まれる動作と同じ動作については、同じ符号を付与し、説明を省略する。
【０１４０】
ステップ１４０１において、振分部４１３は、メモリ４０３から送信されたパケットをメモリ毎に区別してバッファ部４０９に格納する。振分部４１３の詳細な動作については、図１９を用いて後に説明する。
【０１４１】
ステップ１４０２において、デパケット化部１１０２は、受信したパケットに含まれるデータをバスマスタ４０２へ送信するために、受信したパケットに含まれるデータを、バスマスタ４０２との間で利用されるバスプロトコルに変換する。
【０１４２】
以上、ステップ１４０１、８０２、１４０２、８０３を繰り返すことにより、メモリ４０３から送信されたパケットのデータがバスマスタ４０２へ送信される。
【０１４３】
図１９は、振分部４１３の動作手順を示す。
【０１４４】
振分部４１３は、振分規則記憶部４１２に記憶される振分規則（図１０、図１６）に基づき、メモリ４０３から送信されたパケットを対応するバッファ部４０９の部分バッファに格納する。
【０１４５】
ステップ１５０１において、振分部４１３は、メモリ４０３から送信されたパケットのヘッダ情報または順序記憶部４０８が記憶する順序情報を参照し、パケットを送信したメモリのＩＤ（メモリＩＤ）を特定する。パケットのヘッダ情報を利用する場合には、たとえば図１０の振分規則を利用できる。順序情報は、トランザクションＩＤを特定するために利用される。トランザクションＩＤが特定されると、どのメモリとの間でデータが授受されているかを特定することが可能である。ステップ１５０２において、振分部４１３は、順序記憶部４０８を参照し、パケットのヘッダ情報に記載されたデータＩＤから、トランザクションＩＤを特定する。
【０１４６】
ステップ１５０３において、振分部４１３は、入替可否情報記憶部４０７を参照し、トランザクションＩＤから、パケットが伝送路上で順序の入れ替わりを許容できるかどうかの可否を特定する。
【０１４７】
ステップ１５０４において、振分部４１３は、振分規則記憶部４１２を参照し、パケットを送信したメモリのＩＤと伝送路上での順序の入れ替わりの可否に基づいて、パケットの格納先となるバッファ部４０９の部分バッファを特定する。
【０１４８】
ステップ１５０５において、振分部１１０５は、メモリ４０３から送信されたパケットをバッファ部４０９格納する。
【０１４９】
以上、ステップ１５０１からステップ１５０５を実行することにより、バスマスタ４０２で順序の入れ替わりが許容されないパケットを、メモリ毎に区別してバッファ部４０９に格納できる。
【０１５０】
なお、本実施形態では、バスマスタ４０２からメモリ４０３へ送信されたデータの順序を、順序記憶部４０８で記録し、順序記憶部４０８に記録された順序に基づいて、接続制御部４１０が、バスマスタ４０２へデータを送信するバッファを選択する例を説明した。しかしながら、データＩＤがトランザクション毎に連続する番号で管理される場合には、送信したデータのデータＩＤをバス制御装置４０１ｂ内では管理せず、トランザクション毎にメモリ４０３からバスマスタ４０２へ送信が完了したデータＩＤの番号Ｘを管理し、この番号Ｘに基づき次にバスマスタ４０２へ送信するデータ（ＩＤの番号Ｘ＋１）を特定してもよい。
【０１５１】
図２０は、メモリ４０３からバスマスタ４０２へ送信が完了したデータのデータＩＤをトランザクション毎に記録した順序情報の例を示す。
【０１５２】
図２０の順序情報を利用する場合、接続制御部４１０は、順序管理情報４０８を参照し、トランザクションＩＤ毎に、送信が完了したデータＩＤの次の番号を付与されたデータＩＤのデータを選択することで、バスマスタ４０２へ送信するデータを選択する。
【０１５３】
また、接続制御部４１０は、バスマスタ４０２へデータを送信すると、順序記憶部４０８で記録されるデータＩＤを、最後に送信したデータのＩＤに更新する。
【０１５４】
また、トランザクションＩＤは、パケットのヘッダ情報に記載し、一緒に送信され、ＩＦ情報記憶部４１１、入替可否情報記憶部４０７、振分部４１３は、パケットに記載されたトランザクションＩＤから、それぞれ必要な情報を取得する。
【０１５５】
これまでは、バス制御装置４０１ａ、および４０１ｂが、バスマスタ４０２と隣接して設けられる例を説明した。しかしながら、バス制御装置は、伝送路上で複数のメモリからのデータが中継される中継装置にその一部として設けられてもよい。
【０１５６】
図２１は、ローカルバスを介して接続された複数のバスマスタ３０１が、システムバスを介して接続された複数のメモリ３０３と通信を行う構成を示している。図１４と同じ構成については、同じ番号を付与し説明を省略する。この例では、ローカルバスの伝送帯域は相対的に狭く、その伝送速度は相対的に低速である。一方、システムバスでは、伝送帯域は相対的に広く、伝送速度は相対的に高速である。
【０１５７】
以下、ローカルバスとシステムバスとを接続する中継装置１６０１内に、バス制御装置４０１を構築する例を説明する。
【０１５８】
図２２は、本開示によるバス制御装置の機能を備えた中継装置１６０１の構成を示す。
【０１５９】
中継装置１６０１は、図５に示されるバス制御装置４０１ａ、および／または図１５に示されるバス制御装置４０１ｂの構成要素と同等の機能を有する構成要素を備えている。それらには、同じ参照符号を付与してその説明を省略する。
【０１６０】
中継装置１６０１の接続制御部４１０は、ローカルバスとシステムバスの双方に関して接続を切り替えることが可能である。例えば、バスマスタと同じローカルネットワーク内にメモリが存在し、バスマスタが、システムバスを介して接続されるメモリと、同じローカルネットワーク内のメモリの双方にアクセスする場合、接続制御部４１０はバスの接続を切り替えることにより、システムバスを介して接続するメモリからの応答データに関しては、システムバスからローカルバスへ送信することが可能であり、また、ローカルバス内に存在するメモリから送信される応答データに関しては、ローカルバスからローカルバスへと直接送信することが可能である。
【０１６１】
中継バッファ１７０１は、ローカルバスから送信されたパケットを格納する記憶装置（たとえばＳＲＡＭ）である。
【０１６２】
中継制御部１７０２は、バッファ部４０９に格納されるシステムバスから受信したパケット、及びバッファ部１７０２に格納されるローカルバスから受信したパケットに対し、それぞれの宛先へと向かう出力ポートを決定する回路である。
【０１６３】
また、中継装置１６０１の接続制御部４１０は、バッファ部４０９とバッファ部１７０１のいずれかに格納され、出力ポートが同じ複数のパケットの集合毎に、パケットの送信順序を決定する。
【０１６４】
システムバス用送信制御部１７０３は、システムバスのバス幅や動作周波数に合わせてパケットを送信する回路である。ローカルバス用送信制御部１７０４は、ローカルバスのバス幅や動作周波数に合わせてパケットを送信する回路である。
【０１６５】
なお、バッファ部４０９、及びバッファ部１７０１は、中継装置がパケットの経路制御を行う際に、パケットを格納するバッファの一部を利用して実現されてもよい。また、システムバスからローカルバスに対してパケットを送信する場合、バスの速度差を吸収するためにメモリ４０３から送信されるパケットを全て格納できる容量の大きな速度差吸収バッファが利用される。このため、速度差吸収バッファの記憶領域の一部をバッファ部４０９として利用してもよい。
【０１６６】
図２３（Ａ）および（Ｂ）は、中継装置１６０１の振分規則記憶部１１０２が記憶している振分規則の例を示している。
【０１６７】
中継装置１６０１では、複数のバスマスタ４０２と複数のメモリ４０３の間でデータを送受信する。そのため、振分規則制御部１１０２が記憶する振分規則もまた、メモリＩＤに加え、バスマスタを識別するＩＤが加味されている。
【０１６８】
図２３（Ａ）は、メモリとバスマスタとに基づく振分規則の一例を示す。すなわち図２３（Ａ）の振分規則では、パケットを送信したメモリＩＤとパケットの宛先となるバスマスタＩＤの組合せに対し、バッファ部４０９の格納先の対応関係を定義している。また、バスマスタが順序の入れ替わりを許容できるパケットに関しては順序の並び替えが不要であるため、順序の入れ替わりを許容できないパケットと区別してバッファ部４０９に格納してもよい。
【０１６９】
図２３（Ｂ）は、パケットの種別を加味した振分規則の一例を示す。図２３（Ｂ）の振分規則では、応答パケットを送信したメモリＩＤと宛先となるバスマスタＩＤの組合せに加え、経路上でパケットの順序の入れ替わりを許容できるデータであるかどうかの可否を加味し、バッファ部４０９の格納先を定義している。
【０１７０】
なお、振分規則として、図２３（Ａ）および（Ｂ）に示した振分規則以外にも、メモリＩＤ、バスマスタＩＤ、順序の入れ替わりを許容できるかどうかの可否情報のいずれかの少なくとも１つの条件に対し、バッファ部４０９の格納先を定義したものを用いてもよい。
【０１７１】
図２４は、ローカルバスからシステムバスへのデータ送信時の中継装置１６０１の動作を示す。例として、図２１に示すバスマスタ３０１から複数のメモリ３０３に対してパケットを伝送する際の中継装置１６０１の動作を説明する。
【０１７２】
図１１、および／または図１７に含まれる動作と同じ動作については同じ符号を付与し、説明を省略する。
【０１７３】
ステップ１９０１において、中継装置１６０１の中継バッファ１７０１は、受信したパケットを格納する。
【０１７４】
ステップ１９０２において、中継装置１６０１の中継制御部１７０２は、パケットのヘッダを参照して、当該ヘッダに記載された宛先のＩＤ（アドレス）に基づき、パケットの宛先となるメモリやバスマスタへ向かう出力ポートを決定する。
【０１７５】
ステップ１９０３において、送信制御部１７０３は、パケットに記載されたデータＩＤおよびトランザクションＩＤを順番に順序記憶部４０８に記録する。
【０１７６】
なお、トランザクションＩＤはバスマスタ４０２によって付与され、データＩＤはＮＩＣ１００１によってパケットのヘッダ情報に付与される。トランザクションＩＤおよびデータＩＤは、それぞれＮＩＣでパケットのヘッダ情報に記載される。
【０１７７】
ステップ１９０４において、システムバス用送信制御部１７０３は、システムバスのバス幅やバス動作速度に合わせてパケットを送信する。
【０１７８】
以上のステップを繰り返すことにより、中継装置１６０１の順序記憶部４０８は、バスマスタ４０２から複数のメモリ４０３へ送信されたパケットの順にデータＩＤおよびトランザクションＩＤを蓄積する。
【０１７９】
図２５は、中継装置１６０１が、複数のメモリ４０３から送信されたデータを受信した際の動作手順の概要を示す。
【０１８０】
ステップ２００１において、振分部４１３は、メモリ４０３から送信されたパケットを振分規則記憶部４１２に記録されている振分規則４１３に基づいて、バッファ部４０９に格納する。なお、中継装置１６０１における振分部４１３の詳細な動作については図２６を用いて後に説明する。
【０１８１】
ステップ２００２において、中継制御部１７０２は、応答パケットを宛先となるバスマスタへ届けるための送信先に接続される出力ポートを決定する。
【０１８２】
ステップ２００３において、パケットの送信先がローカルバスか、またはシステムバスかを判定する。送信先がローカルバスの場合はステップ２００４に移る。送信先がシステムバスの場合はステップ２００６に移る。
【０１８３】
ステップ２００４において、接続制御部４１０は、パケットの送信順序を決定する。具体的には、接続制御部４１０は、出力ポート毎にローカルバスにパケットを送信するバッファ部４０９を決定する。パケットを送信するバッファ部４０９の決定方法は、図１３で説明した動作と同様である。
【０１８４】
ステップ２００５において、ローカルバス用送信制御部１７０４は、ローカルバスのバス幅やバス動作速度に合わせてパケットをローカルバスに送信する。処理は再びステップ２００１に戻る。
【０１８５】
ステップ２００６において、システムバス用送信制御部１７０４は、システムバスのバス幅やバス動作速度に合わせてパケットを送信する。処理は再び、ステップ２００１に戻る。
【０１８６】
以上のステップを繰り返すことにより、出力ポート毎にバスマスタ４０２からメモリ４０３へ送信した順序で、メモリ４０３からのデータをバスマスタ４０２へ送信できる。
【０１８７】
図２６は、中継装置１６０１の振分部４１３がバッファ部にパケットを格納する際に行う動作手順を示す。この動作手順は、振分部４１３が、振分規則記憶部４１２に記憶される振分規則に基づき、メモリ４０３から送信されたパケットを対応するバッファ部４０９に格納する処理の詳細である。
【０１８８】
ステップ２１０１において、振分部４１３は、メモリ４０３から送信されたパケットに記載されたヘッダ情報を参照し、パケットを送信したメモリＩＤとパケットの宛先となるバスマスタＩＤを特定する。
【０１８９】
ステップ２１０２において、振分部４１３は、順序記憶部４０８を参照し、パケットのデータＩＤからトランザクションＩＤを特定する。
【０１９０】
ステップ２１０３において、振分部４１３は、入替可否情報記憶部４０７を参照し、トランザクションＩＤから、伝送路上で順序の入れ替わりを許容できるパケットであるかどうかの可否を特定する。
【０１９１】
ステップ２１０４において、振分部４１３は、振分規則記憶部４１２を参照し、特定したメモリのＩＤとバスマスタＩＤ、伝送路上での順序の入れ替わりの有無に基づいて、パケットの格納先となるバッファ部４０９の部分バッファを特定する。
【０１９２】
ステップ２１０５において、振分部１１０５は、メモリ４０３から送信されたパケットをバッファ部４０９に格納する。
【０１９３】
以上のステップを実行することにより、パケットのデータを送信したメモリＩＤとパケットの送信先であるバスマスタＩＤと、伝送路上での順序の入れ替わりを許容できるパケットかどうかの可否情報に基づき、複数のメモリ４０３から送信されたパケットを区別してバッファ部４０９に格納することができる。
【０１９４】
なお、入替可否情報記憶部４０７、ＩＦ情報記憶部４１１、振分部４１３のそれぞれで記憶される情報については、予め複数の情報を記憶しておき、バスマスタ４０２の起動時や、アプリケーションやユースケースの変更時において、バスマスタからの制御信号によっていずれの情報を利用するかを選択してもよい。
【０１９５】
また、バスマスタから直接、入替可否情報記憶部４０７、ＩＦ情報記憶部４１１、振分部４１３のそれぞれで記憶される情報の内容を変更してもよい。
【０１９６】
例えば、中継装置１６０１の振分部４１３は、図１６（Ａ）に示したメモリＩＤだけに基づく振分規則と、図２３（Ａ）に示すメモリＩＤとバスマスタＩＤの両方に基づく振分規則を記憶しておき、ローカルバス内で、１個のバスマスタがデータを送信している場合には、図１６（Ａ）に示した振分規則を利用し、ユースケースの変更により複数のバスマスタがデータを送信している場合には図２３（Ａ）の振分規則を利用してもよい。これにより、ユースケースに合わせてバッファ部４０９の利用効率を改善できる。
【０１９７】
なお、図２２の中継装置１６０１の実施形態の説明では、システムバスからローカスバスへ送信されるパケットに対して、接続制御部４１０が、ローカルバスへの出力ポートの接続を選択するとした。しかしながらこれは一例である。ローカルバスからシステムバスへ送信されるパケットに対して、接続制御部４１０が、システムバスへの出力ポートの接続を選択してもよい。また、システムバスとローカルバスの両方からローカルバスへ送信されるパケットに対し、接続制御部４１０が、ローカルバスへの出力ポートの接続を選択してもよい。また、ローカルバスとシステムバスの両方からシステムバスへ送信されるパケットに対し、接続制御部４１０が、システムバスへの出力ポートの接続を選択してもよい。
【０１９８】
また、図１４および図２１の構成では、メモリからの応答データの順序の入替えを経路上の一箇所で行う場合について説明したが、半導体集積回路上のバスの複数の要素が順序の入替えを分散して（独立して）行っても良い。また、図１４および図２１では、説明を簡略化するために、スレーブと接続するＮＩＣ１００３にメモリ３０３が１個ずつ接続される構成を用いて説明を行ったが、１個には限られない。
【０１９９】
図２７は、複数の要素においてメモリからの応答データの順序の入替えを行うことが可能なバスシステム１００ｃの構成を示す。なお、図１４および図２１と同じ構成については、同じ番号を付与し説明を省略する。
【０２００】
さらに図２７のバスシステム１００ｃは、スレーブと接続するＮＩＣ１００３に対し、複数のメモリ３０３が接続される構成を示している。図２７のＮＩＣ１００３は、メモリコントローラ２６０１を介して、複数のメモリ３０３とデータの送受信を行う。メモリコントローラ２６０１は、メモリ３０３の対しデータの読み書きなどの制御を行う回路である。なお、図１４および図２１ではメモリコントローラ２６０１は省略されている。
【０２０１】
図２７において、往路のシステムバス上で応答データの順序に入替りが発生しない場合を考える。このとき、ＮＩＣ１００３内のバス制御装置、またはＮＩＣ１００３に接続された中継装置２６０２は、共通のメモリコントローラ２６０１により制御される複数のメモリ３０３の応答データの順序を、先行して並び替えることができる。「先行して」とは、図２７におけるローカルバスでの並び替えに先行して、という意味である。つまり、本実施形態においては、ＮＩＣ１００３内のバス制御装置、または、ＮＩＣ１００３およびシステムバスに接続された中継装置２６０２のいずれかが、共通のメモリコントローラ２６０１により制御される複数のメモリからの応答データを並び替えてシステムバスに流す。異なるメモリコントローラにより制御される複数のメモリからの応答データがシステムバスからローカルバスに到達したときには、バスマスタに接続するＮＩＣ１００１、ローカルバスの中継装置１００２、及びシステムバスとローカルバスを接続する中継装置１６０１のいずれかで、応答データの順序を並び替えればよい。
【０２０２】
このように、複数のメモリ３０３からの応答データの並べ替え処理を、伝送路上の複数の要素において分散して行うことで、それぞれのＮＩＣや中継装置で行う応答データの並替処理の負荷を低減し、また、データの順番の記憶に必要な記憶容量を減らすことができる。
【０２０３】
なお、全てのＮＩＣや中継装置等に応答データの並べ替えに関する構成を設けてもよい。または、応答データの並べ替え処理を行うＮＩＣや中継装置等にのみ当該構成を設け、応答データの並べ替え処理を行わないＮＩＣや中継装置等には、当該構成を設けなくてもよい。全てのＮＩＣや中継装置等に当該構成を設ける場合には、並べ替えを行うＮＩＣや中継装置等を動的に変化させることが可能である。なお、全てのＮＩＣや中継装置等に当該構成を設けた場合であっても、設計時または実装時等において決定された特定のＮＩＣや中継装置等にのみ並べ替えを行わせてもよい。
【０２０４】
上述の例では、バス制御装置がＮＩＣ１００３またはＮＩＣ１００１内に設けられていることを前提としている。しかしながらこれは一例である。図３に示すように、バス制御装置とＮＩＣとは別体であってもよい。
【０２０５】
さらに、メモリコントローラ２６０１に上述したバス制御装置を組み込むことにより、自身が制御する複数のメモリ３０３からの応答データをメモリコントローラ２６０１が並べ替える機能を設けてもよい。その場合には、メモリコントローラ２６０１とメモリコントローラ２７０１のような異なるメモリコントローラにより制御されるメモリ群（メモリ１およびｍ１の組と、メモリ３およびｍ２の組）からの応答データの並び替えは、ローカルバス上のＮＩＣ１００１、中継装置１００２、または中継装置１６０１のいずれかが行えばよい。ただしその並び替えの前提として、メモリ１およびｍ１の組へ送信される要求のデータ、およびメモリ３およびｍ２の組へ送信される要求のデータの順序が、ＮＩＣ１００１、中継装置１００２、または中継装置１６０１のいずれかにおいて保持されている必要がある。
【０２０６】
なお本実施形態では、図２７におけるメモリコントローラ２７０１、ＮＩＣ１１０３、および中継装置２７０２の構成および動作は、それぞれメモリコントローラ２６０１、ＮＩＣ１００３、および中継装置２６０２と同じであるとする。
【０２０７】
図２８は、メモリコントローラ２６０１と接続されるＮＩＣ１００３の構成を示す。図１５と同じ構成については、同じ番号を付与し説明を省略する。また、ＮＩＣ１００３と中継装置１６０１との間にはシステムバスが存在するが、図面上、明示的な記載は省略している。
【０２０８】
ＮＩＣ１００３は、中継装置１６０２とメモリコントローラ２６０１との間に設けられてそれらを接続する。ＮＩＣ１００３とＮＩＣ４０１ｂ（図１５）との相違点は、パケット化部１１０１とデパケット化部１１０２の位置が入れ替わっている点である。
【０２０９】
ＮＩＣ１００３のデパケット化部１１０２は、中継装置１６０１から受信した要求のパケットに含まれるデータを、メモリコントローラ２６０１との間で利用される通信プロトコルに変換して、メモリコントローラ２６０１に送信する。また、ＮＩＣ１００３のパケット化部１１０１は、メモリコントローラ２６０１から受信した応答データをパケットに変換し、中継装置２６０２へと送信する。なお、応答データの順序の入れ替えの処理については、図１５のバスＮＩＣ４０１ｂと同様である。
【産業上の利用可能性】
【０２１０】
本開示は、オンチップバス、汎用プロセッサやＤＳＰ上のローカルバスにおける、バスとメモリとの間に設けられるインターフェイス装置等に利用可能である。
【符号の説明】
【０２１１】
１００ａ〜１００ｃ  バスシステム
３０１  バスマスタ
３０２  バス制御装置
３０３  メモリ
３０４  バス・インターフェイス
４０１ａ、４０１ｂ  バス制御装置
４０２  バスマスタ
４０３  メモリ
４０４  送信用バス・インターフェイス
４０５  受信用バス・インターフェイス
４０６  送信制御部
４０７  入替可否情報記憶部
４０８  順序記憶部
４０９  メモリ毎に用意されたバッファ部
４１０  接続制御部
４１１  ＩＦ情報記憶部
４１２  振分規則記憶部
４１３  振分部
１１０１  パケット化部
１１０２  デパケット化部
１６０１  中継装置
１７０１  中継バッファ
１７０２  中継制御部
１７０３  システムバス用送信制御部
１７０４  ローカルバス用送信制御部
【図１】
0005842174.tif 000002
【図２】
0005842174.tif 000003
【図３】
0005842174.tif 000004
【図４】
0005842174.tif 000005
【図５】
0005842174.tif 000006
【図６】
0005842174.tif 000007
【図７】
0005842174.tif 000008
【図８】
0005842174.tif 000009
【図９】
0005842174.tif 000010
【図１０】
0005842174.tif 000011
【図１１】
0005842174.tif 000012
【図１２】
0005842174.tif 000013
【図１３】
0005842174.tif 000014
【図１４】
0005842174.tif 000015
【図１５】
0005842174.tif 000016
【図１６】
0005842174.tif 000017
【図１７】
0005842174.tif 000018
【図１８】
0005842174.tif 000019
【図１９】
0005842174.tif 000020
【図２０】
0005842174.tif 000021
【図２１】
0005842174.tif 000022
【図２２】
0005842174.tif 000023
【図２３】
0005842174.tif 000024
【図２４】
0005842174.tif 000025
【図２５】
0005842174.tif 000026
【図２６】
0005842174.tif 000027
【図２７】
0005842174.tif 000028
【図２８】
0005842174.tif 000029