(57)【特許請求の範囲】
【請求項１】
集積回路上のメモリに接続されたメモリコントローラと、前記集積回路上に形成されたバスネットワークとを接続するためのインタフェース装置であって、
前記メモリコントローラは、複数のリクエストデータの処理順序を調停する調停部、および各リクエストデータに応答して前記メモリから出力された各レスポンスデータを前記インタフェース装置に送信する送信部を有しており、
前記インタフェース装置は、
前記バスネットワークから受信した複数のリクエストパケットの各々に脱パケット化処理を行い、各リクエストパケットからリクエストヘッダおよびリクエストデータを抽出して出力する脱パケット化処理部と、
前記脱パケット化処理部が出力した複数のリクエストヘッダを第１の順序で受け取って、各リクエストヘッダに対応するレスポンスヘッダを順に生成し、各レスポンスヘッダが前記第１の順序に従って読み出されるよう記憶するヘッダ生成記憶部と、
前記リクエストデータに応答して前記メモリから出力された前記レスポンスデータ、および前記ヘッダ生成記憶部に記憶されている前記レスポンスヘッダを利用してレスポンスパケットを生成して前記バスネットワークに送信するパケット化処理部と、
前記調停部が、前記複数のリクエストデータを前記第１の順序とは異なる第２の順序で前記メモリに送信したとき、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御するヘッダ順序制御部と
を備えたインタフェース装置。
【請求項２】
前記ヘッダ順序制御部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を、前記調停部から取得する、請求項１に記載のインタフェース装置。
【請求項３】
前記調停部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を出力し、
前記ヘッダ生成記憶部は、記憶位置に応じて読み出し順序が決定される記憶領域を有しており、
前記ヘッダ順序制御部は、前記リクエスト順序情報にしたがって、前記ヘッダ生成記憶部に記憶された各レスポンスヘッダの記憶位置を変更する、請求項１に記載のインタフェース装置。
【請求項４】
前記調停部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を出力し、
前記ヘッダ生成記憶部は、各レスポンスヘッダと、各レスポンスヘッダの読み出し順序とを対応付けて記憶しており、
前記ヘッダ順序制御部は、前記リクエスト順序情報にしたがって、前記レスポンスヘッダの読み出し順序を変更する、請求項１に記載のインタフェース装置。
【請求項５】
調停された前記リクエストデータに応答して得られる前記レスポンスデータが前記パケット化処理部に取得される前に、前記ヘッダ順序制御部は前記リクエスト順序情報を取得し、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御する、請求項２に記載のインタフェース装置。
【請求項６】
前記インタフェース装置は、前記バスネットワークに接続されたルータに前記レスポンスパケットを送信することが可能であり、
調停された前記リクエストデータに応答して得られる前記レスポンスデータが前記パケット化処理部に取得される前に、前記ヘッダ順序制御部は、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御し、
前記パケット化処理部は、前記レスポンスヘッダおよび前記レスポンスデータに対して前記ルータが行う処理の遅延量の情報、または、前記ルータのパイプライン処理の構成の情報に関するルータ情報を予め保持しており、
前記パケット化処理部は、前記ルータに、前記レスポンスヘッダを先に送信し、その後前記ルータ情報に基づいて決定される時間間隔を開けて、前記レスポンスデータを送信する、請求項１に記載のインタフェース装置。
【請求項７】
集積回路上のメモリと接続されたメモリコントローラと、前記集積回路上に形成されたバスネットワークとを接続するためのインタフェース装置であって、
前記バスネットワークから受信した複数のリクエストパケットの各々に脱パケット化処理を行い、各リクエストパケットからリクエストヘッダおよびリクエストデータを抽出して出力する脱パケット化処理部と、
前記脱パケット化処理部が出力した複数のリクエストヘッダを第１の順序で受け取って、各リクエストヘッダに対応するレスポンスヘッダを順に生成し、各レスポンスヘッダが前記第１の順序に従って読み出されるよう記憶するヘッダ生成記憶部と、
前記メモリコントローラから前記メモリに送信される信号の状態を監視して、複数のリクエストデータが前記第１の順序とは異なる第２の順序で送信されたか否かを解析する解析部と、
前記リクエストデータに応答して前記メモリから出力されたレスポンスデータ、および前記ヘッダ生成記憶部に記憶されている前記レスポンスヘッダを利用してレスポンスパケットを生成して前記バスネットワークに送信するパケット化処理部と、
前記解析部による解析の結果、前記複数のリクエストデータが、前記第１の順序とは異なる第２の順序で前記メモリに送信されたとき、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御するヘッダ順序制御部と
を備えたインタフェース装置。
【請求項８】
前記複数のリクエストデータが前記第２の順序で前記メモリに送信されたことを検出したとき、前記解析部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を取得する、請求項７に記載のインタフェース装置。
【請求項９】
集積回路上に形成されたバスネットワークと、
集積回路上に設けられたメモリと、
前記集積回路上に設けられ、前記メモリと接続されたメモリコントローラと、
請求項１から８のいずれかに記載のインタフェース装置であって、前記メモリコントローラ、および前記バスネットワークを接続するインタフェース装置と
を備えた、メモリバスシステム。
【請求項１０】
前記バスネットワークに接続されたイニシエータをさらに備えており、
前記イニシエータは、前記メモリへのアクセスを要求するリクエストデータを送信し、前記メモリにおける前記アクセスの結果であるレスポンスデータを受信する、請求項９に記載のメモリバスシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、ネットワーク化された通信バスを備える半導体チップにおいて、通信バスの制御を行うための装置、方法及びプログラムに関する。
【背景技術】
【０００２】
近年、ＳｏＣ（Ｓｙｓｔｅｍ  ｏｎ  Ｃｈｉｐ）が利用される組込機器分野や汎用プロセッサ分野において、半導体チップの高機能化への要求が高まっている。半導体チップの高機能化に伴い、チップ上の通信バスを介して転送されるデータの要求帯域が増加し、通信バスの広帯域化が必要となってきている。低いバス動作周波数で通信バスを広帯域化するため、バス配線をプロセッサ間で共用し、資源利用効率の向上が可能なネットワーク・オン・チップ（Ｎｅｔｗｏｒｋ−ｏｎ−Ｃｈｉｐ；ＮｏＣ）が注目されている。【０００３】
特許文献１は、ＮｏＣを介して複数のイニシエータやメモリコントローラが相互接続された一般的なＳｏＣの構成に於いて、所定期間内に一定レートのアクセスを保証する必要のあるレート保証型のイニシエータと、メモリへのアクセス要求の頻度が不定期で予測困難なレート非保証型のイニシエータが混在する場合に、メモリアクセスの即応性を向上させる方法を開示する。【０００４】
図１は、特許文献１に記載されたＳｏＣの構成を示す。レート保証型イニシエータ２０１からのアクセス要求を検出した、メモリコントローラ２０６のアクセス管理部２０３は、アクセス回数をチェックすることで、所定レート以内のアクセスか否かを判断し、その結果を記録し、管理する。アクセス調停部２０５は、他のイニシエータ２０２からのアクセス要求が無い場合にのみ、所定レート以上のレート保証型イニシエータ２０１からのアクセス要求を許可する。レート保証型イニシエータ２０１からのアクセス要求の調停前に、レート非保証型イニシエータ２０２からのアクセス要求を検出した場合には、アクセス調停部２０５は、レート保証型イニシエータ２０１からのアクセス要求に関する調停順序を後回しにして、イニシエータ２０２からのアクセス要求を先に調停する。調停順序を後回しにする理由は、イニシエータ２０１は既に所定レート以上のアクセスを行っているためである。上述の処理により、イニシエータ２０２のアクセス要求に対して即応性を高めることを実現している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第４４８５５７４号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
メモリコントローラ内でのアクセス順序変更によるメモリアクセス効率のさらなる向上が求められている。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、本発明の一態様は、集積回路上のメモリと接続されたメモリコントローラと、前記集積回路上に形成されたバスネットワークとを接続するためのインタフェース装置を含む。前記メモリコントローラは、複数のリクエストデータの処理順序を調停する調停部、および各リクエストデータに応答して前記メモリから出力された各レスポンスデータを前記インタフェース装置に送信する送信部を有している。前記インタフェース装置は、前記バスネットワークから受信した複数のリクエストパケットの各々に脱パケット化処理を行い、各リクエストパケットからリクエストヘッダおよびリクエストデータを抽出して出力する脱パケット化処理部と、前記脱パケット化処理部が出力した複数のリクエストヘッダを第１の順序で受け取って、各リクエストヘッダに対応するレスポンスヘッダを順に生成し、各レスポンスヘッダが前記第１の順序に従って読み出されるよう記憶するヘッダ生成記憶部と、前記リクエストデータに応答して前記メモリから出力された前記レスポンスデータ、および前記ヘッダ生成記憶部に記憶されている前記レスポンスヘッダを利用してレスポンスパケットを生成して前記バスネットワークに送信するパケット化処理部と、前記調停部が、前記複数のリクエストデータを前記第１の順序とは異なる第２の順序で前記メモリに送信したとき、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御するヘッダ順序制御部とを備えている。【０００８】
上述の一般的かつ特定の態様は、システム、方法およびコンピュータプログラムを用いて実装され、またはシステム、方法およびコンピュータプログラムの組み合わせを用いて実現され得る。
【発明の効果】
【０００９】
本発明の一態様にかかるインタフェース装置によれば、メモリ内でリクエスト順序の変更があった場合でも、レスポンスヘッダとレスポンスデータの対応関係が正しく保たれ、システムの動作を保証することができる。また動作周波数向上やバス幅の拡張を行わずに、メモリコントローラ内でのアクセス順序変更によるメモリアクセス効率の向上を図ることができる。また、メモリアクセス完了に先立ち、メモリコントローラからリクエスト順序の通知を受けることにより、レスポンスヘッダの検索処理及びレスポンスヘッダのルータでの処理を、メモリへのアクセス処理と並列化することでレスポンスヘッダの検索処理の遅延を隠蔽することが可能となり、イニシエータの即応性が高まる。
【図面の簡単な説明】
【００１０】
【図１】従来の技術によるＳｏＣの構成を示す図である。
【図２】ネットワーク・インタフェース３０１の内部構成、およびネットワーク・インタフェース３０１、メモリコントローラ３０２およびメモリ３０３との接続関係を示す図である。
【図３】ＳｏＣ４００の構造を示す図である。
【図４】（ａ）〜（ｄ）は、ＮｏＣ上で送受信されるパケットの種類とその構成例を示す図である。
【図５】パケットのヘッダ５１の構成例を示す図である。
【図６】（Ａ）〜（Ｄ）は、図３に示すレート保証型のイニシエータ４０１ａとレート非保証型のイニシエータ４０１ｂとがメモリ４０２ａにアクセスする場合に行われるデータの処理の流れを示す図である。
【図７】図３のメモリ側のＮＩＣ４０４ａの構成例を示す図である。
【図８】メモリコントローラ４０６ａに与えられる信号の種類を示す図である。
【図９】ヘッダ生成記憶部１０２が適用する、レスポンスパケットのヘッダの生成規則の例を示す図である。
【図１０】図６に示すタイミング図の時刻Ｔ３においてヘッダ生成記憶部１０２が記憶する順序リストの例を示す図である。
【図１１】リクエストパケット４０１ａ１に対応するレスポンスパケット送信後の、レスポンスヘッダの順序リストを示す図である。
【図１２】（Ａ）〜（Ｄ）は、図３に示すイニシエータ４０１ａおよび４０１ｂがメモリ４０２ａにアクセスする場合のメモリの動作を示す図である。
【図１３】時刻Ｔ２（図１２）における、メモリコントローラ４０６ａで受信したリクエストパケットの管理構造例を示す図である。
【図１４】リクエスト順序情報の例を示す図である。
【図１５】（Ａ）および（Ｂ）は、パケット４０１ａ２に対応するヘッダおよびパケット４０１ｂ１に対応するヘッダの格納例を示す図である。
【図１６】ＮＩＣ４０４ａによって実行される、リクエストパケット受信時の処理フローを示す図である。
【図１７】ＮＩＣ４０４ａによって実行される、レスポンスデータ受信時の処理フローを示す図である。
【図１８】ＮＩＣ４０４ａによって実行される、メモリアクセス順序の変更に伴う処理の手順を示すフローチャートである。
【図１９】ヘッダ生成記憶部１０２における、レスポンスパケットのヘッダ格納領域のデータ構造を示す図である。
【図２０】（ａ）はメモリアクセス完了後にリクエスト順序情報の通知を受信する例に関する、メモリコントローラ４０６ａおよびＮＩＣ４０４ａの動作タイミングを示す図であり、（ｂ）はメモリアクセス実行に先立ってリクエスト順序情報の通知を受信する例に関する、メモリコントローラ４０６ａおよびＮＩＣ４０４ａの動作タイミングを示す図である。
【図２１】ＮＩＣの出力タイミング、ＮＩＣに接続されたルータ４０５の出力タイミング、およびルータ４０５内での処理の遷移を示す図である。
【図２２】レスポンスパケットのヘッダとレスポンスデータとが別個に送受信された場合の処理を示す図である。
【図２３】パイプライン構成が、ルーティング処理、仮想チャネルの割当と出力スイッチの割当、スイッチングの３ステージ構成となっている３サイクルルータにおける、最適なレスポンスヘッダの出力タイミングを示す図である。
【図２４】実施形態２にかかるＮＩＣ４１４の構成例を示す図である。
【図２５】リクエスト順序を記憶するためのデータ構造の例を示す図である。
【図２６】アドレスを逆変換するためのデータ構造の例を示す図である。
【図２７】記憶領域の状態例を示す図である。
【発明を実施するための形態】
【００１１】
本願発明者らは、上述した従来の構成に存在する課題を検討した。ＡＸＩ、ＯＣＰ、ＡＨＢなどのオンチップバス・プロトコルでインタフェースされるイニシエータやターゲットを、パケット交換ネットワークであるＮｏＣに相互接続するには、パケット化や脱パケット化処理を行うインタフェース装置が必要である。このようなインタフェース装置は、一般的にはＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃｏｎｔｒｏｌｌｅｒ）と呼ばれる。
【００１２】
図２は、ネットワーク・インタフェース３０１の内部構成、およびネットワーク・インタフェース３０１、メモリコントローラ３０２およびメモリ３０３との接続関係を示す。メモリコントローラ３０２はネットワーク・インタフェース３０１を介して、パケット交換ネットワークであるＮｏＣに接続されている。またメモリコントローラ３０２は、メモリ３０３に接続される。
【００１３】
ＮｏＣ上でのデータの送受信は全てパケット単位で行われ、リードデータやライトレスポンスのようなメモリからのレスポンスデータ（レスポンス情報とも呼ばれる。）は、ＮＩＣ３０１でパケット化されてＮｏＣ上に送出される。またライトデータやリードコマンドのようなメモリへのリクエストデータ（リクエスト情報とも呼ばれる。）はパケット化された状態でＮＩＣ３０１で受信され、脱パケット化された後、メモリコントローラ３０２に送信される。
【００１４】
パケット３０４ａ、３０４ｂはメモリへのリードやライトのリクエストパケットである。パケット３０４ａは、パケットヘッダＨ１とリクエストデータＲ１とから構成される。また、パケット３０４ｂは、パケットヘッダＨ２とリクエストデータＲ２とから構成される。パケット３０４ａ、３０４ｂはこの順でＮＩＣ３０１に到着している。パケットヘッダは、送信元や宛先のＮＩＣのＩＤやパケットの優先度など、ＮｏＣルータがパケットの中継を行う際に必要となる情報などが格納される。
【００１５】
ＮＩＣ３０１は、リクエストパケットの脱パケット化処理を行い、リクエストデータＲ１を抽出して所定のオンチップバス・プロトコルに変換し、変換後のリクエストデータＲ１をメモリコントローラ３０２に送信する。続いてＮＩＣ３０１は、リクエストデータＲ２も抽出してプロトコル変換を行い、メモリコントローラ３０２に送信する。メモリコントローラ３０２が複数のイニシエータから送信されたリクエストに関するレート制御を行うことにより、メモリ３０３に対して実行されるリクエストが、リクエストデータ３０６ｂ、３０６ａの順に逆転されて送信されることがある。その場合、メモリ３０３は到着したリクエストデータの順序にしたがってデータを読み出す。その結果、リクエストデータ３０６ｂに対応するデータ（Ｄ２）３０７ｂがまず読み出され、その後、リクエストデータ３０６ａに対応するデータ（Ｄ１）３０７ａが読み出される。これにより、レスポンスデータ３０８ｂ、３０８ａはこの順序で、ＮＩＣ３０１に到着する。つまり、リクエストデータの送信順序と、レスポンスデータの受信順序が入れ替わる。
【００１６】
ＮＩＣ３０１は、レスポンスデータをパケット化してレスポンスパケット３０９ｂ、３０９ａを順次完成させ、近接のルータ（図示せず）に送信する。レスポンスパケット３０９ｂ、３０９ａの生成にあたっては、レスポンスデータ３０８ｂ、３０８ａにパケットヘッダＨ１、Ｈ２を付加する必要がある。ＮＩＣ３０１は、リクエストパケットに付加されていたパケットヘッダＨ１、Ｈ２を、メモリにリクエストデータを発行した順序とともにＮＩＣ３０１内に記憶している。ＮＩＣ３０１は、メモリコントローラ３０２を介してメモリ３０３から受け取ったレスポンスデータ３０８ｂ、３０８ａに、記憶していたパケットヘッダＨ１、Ｈ２を順に付加する。これにより、ＮＩＣ３０１は、レスポンスパケットを完成させ近接のルータ（図示せず）に送信することができる。図２には、ＮＩＣ３０１によって生成され、ＮＩＣ３０１から送信されたレスポンスパケット３０９ｂ、３０９ａが示されている。
【００１７】
ここで留意すべきは、レスポンスパケット３０９ａおよび３０９ｂでは、ヘッダとペイロードとの関係が適切に保たれていないことである。本来は、レスポンスパケット３０９ｂ中のヘッダＨ１と、レスポンスパケット３０９ａ中のレスポンスデータＤ１とによってレスポンスパケットが構成される必要がある。同様に、レスポンスパケット３０９ａ中のヘッダＨ２と、レスポンスパケット３０９ｂ中のレスポンスデータＤ２とによってレスポンスパケットが構成される必要がある。
【００１８】
このような不都合が生じる理由は、メモリコントローラ３０２内部で発生したリクエスト順序の変更に起因して、ＮＩＣ３０１内に記憶されたレスポンスヘッダの順序と、メモリから受信するレスポンスデータの対応関係が破壊されたからである。レスポンスデータに適切なレスポンスヘッダが付加されないことにより、ヘッダ内の情報を読み取ることでパケットの中継処理を行うＮｏＣルータの処理は破綻し、性能が保証されないばかりか、場合によってはシステムダウンをももたらす。これは、メモリへのリードの場合でも、ライトの場合でも同様に生じる。
【００１９】
本願発明者らは、上述の問題を認識し、その解決を図るために本発明をなすに至った。
【００２０】
本発明の一態様の概要は以下のとおりである。
【００２１】
本発明の一態様であるインタフェース装置は、集積回路上のメモリに接続されたメモリコントローラと、前記集積回路上に形成されたバスネットワークとを接続するためのインタフェース装置であって、前記メモリコントローラは、複数のリクエストデータの処理順序を調停する調停部、および各リクエストデータに応答して前記メモリから出力された各レスポンスデータを前記インタフェース装置に送信する送信部を有しており、前記インタフェース装置は、前記バスネットワークから受信した複数のリクエストパケットの各々に脱パケット化処理を行い、各リクエストパケットからリクエストヘッダおよびリクエストデータを抽出して出力する脱パケット化処理部と、前記脱パケット化処理部が出力した複数のリクエストヘッダを第１の順序で受け取って、各リクエストヘッダに対応するレスポンスヘッダを順に生成し、各レスポンスヘッダが前記第１の順序に従って読み出されるよう記憶するヘッダ生成記憶部と、前記リクエストデータに応答して前記メモリから出力された前記レスポンスデータ、および前記ヘッダ生成記憶部に記憶されている前記レスポンスヘッダを利用してレスポンスパケットを生成して前記バスネットワークに送信するパケット化処理部と、前記調停部が、前記複数のリクエストデータを前記第１の順序とは異なる第２の順序で前記メモリに送信したとき、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御するヘッダ順序制御部とを備えている。
【００２２】
ある実施形態において、前記ヘッダ順序制御部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を、前記調停部から取得する。
【００２３】
ある実施形態において、前記調停部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を出力し、前記ヘッダ生成記憶部は、記憶位置に応じて読み出し順序が決定される記憶領域を有しており、前記ヘッダ順序制御部は、前記リクエスト順序情報にしたがって、前記ヘッダ生成記憶部に記憶された各レスポンスヘッダの記憶位置を変更する。
【００２４】
ある実施形態において、前記調停部は、前記複数のリクエストデータが前記第２の順序で送信されたことを示すリクエスト順序情報を出力し、前記ヘッダ生成記憶部は、各レスポンスヘッダと、各レスポンスヘッダの読み出し順序とを対応付けて記憶しており、前記ヘッダ順序制御部は、前記リクエスト順序情報にしたがって、前記第２記憶領域に記憶された読み出し順序を変更する。
【００２５】
ある実施形態において、調停された前記リクエストデータに応答して得られる前記レスポンスデータが前記パケット化処理部に取得される前に、前記ヘッダ順序制御部は前記リクエスト順序情報を取得し、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御する。
【００２６】
ある実施形態において、前記インタフェース装置は、前記バスネットワークに接続されたルータに前記レスポンスパケットを送信することが可能であり、調停された前記リクエストデータに応答して得られる前記レスポンスデータが前記パケット化処理部に取得される前に、前記ヘッダ順序制御部は、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御し、前記パケット化処理部は、前記レスポンスヘッダおよび前記レスポンスデータに対して前記ルータが行う処理の遅延量の情報、または、前記ルータのパイプライン処理の構成の情報に関するルータ情報を予め保持しており、前記パケット化処理部は、前記ルータに、前記レスポンスヘッダを先に送信し、その後前記ルータ情報に基づいて決定される時間間隔を開けて、前記レスポンスデータを送信する。
【００２７】
本発明の他の一態様であるインタフェース装置は、集積回路上のメモリと接続されたメモリコントローラと、前記集積回路上に形成されたバスネットワークとを接続するためのインタフェース装置であって、前記バスネットワークから受信した複数のリクエストパケットの各々に脱パケット化処理を行い、各リクエストパケットからリクエストヘッダおよびリクエストデータを抽出して出力する脱パケット化処理部と、前記脱パケット化処理部が出力した複数のリクエストヘッダを前記第１の順序で受け取って、各リクエストヘッダに対応するレスポンスヘッダを順に生成し、各レスポンスヘッダが前記第１の順序に従って読み出されるよう記憶するヘッダ生成記憶部と、前記メモリコントローラから前記メモリに送信される信号の状態を監視して、複数のリクエストデータが前記第１の順序とは異なる第２の順序で送信されたか否かを解析する解析部と、前記リクエストデータに応答して前記メモリから出力された前記レスポンスデータ、および前記ヘッダ生成記憶部に記憶されている前記レスポンスヘッダを利用してレスポンスパケットを生成して前記バスネットワークに送信するパケット化処理部と、前記解析部による解析の結果、前記複数のリクエストデータが、前記第１の順序とは異なる第２の順序で前記メモリに送信されたとき、各レスポンスヘッダが前記第２の順序に従って読み出されるよう、前記ヘッダ生成記憶部を制御するヘッダ順序制御部とを備えている。
【００２８】
ある実施形態において、前記複数のリクエストデータが前記第２の順序で前記メモリに送信されたことを検出したとき、前記解析部は、前記リクエスト順序情報を取得する。
【００２９】
本発明のさらに他の一態様であるメモリバスシステムは、集積回路上に形成されたバスネットワークと、集積回路上に設けられたメモリと、前記集積回路上に設けられ、前記メモリと接続されたメモリコントローラと、上述のいずれかのインタフェース装置であって、前記メモリコントローラ、および前記バスネットワークを接続するインタフェース装置とを備えている。
【００３０】
ある実施形態において、メモリバスシステムは、前記バスネットワークに接続されたイニシエータをさらに備えており、前記イニシエータは、前記メモリへのアクセスを要求するリクエストデータを送信し、前記メモリにおける前記アクセスの結果であるレスポンスデータを受信する。
【００３１】
以下、添付の図面を参照しながら、本開示による伝送装置および伝送方法の実施形態を説明する。
【００３２】
（実施の形態１）
図３は、ＳｏＣ４００の構造を示す。ＳｏＣ４００は、パケット交換方式のバスネットワーク（分散型バスネットワーク）４５０を備えた半導体の集積回路（チップ）である。ＳｏＣ４００では、チップ上に構築されたネットワーク４５０によって、複数のイニシエータ４０１ａ〜４０１ｅと、複数のメモリ４０２ａ、４０２ｂとが接続されている。メモリ４０２ａ、４０２ｂに対応して、メモリコントローラ４０６ａおよび４０６ｂも設けられている。
【００３３】
イニシエータ４０１ａ〜４０１ｅは、プロセッサ、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰ（Ｇｒａｐｈｉｃ  Ｐｒｏｃｅｓｓｏｒ）、ＩＯ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスなどである。
【００３４】
図示されるＮＩＣ、およびメモリコントローラは、それぞれがチップ（ＳｏＣ４００）上に構築された電子的な回路であってもよいし、ＳｏＣ４００の少なくとも一部を構成する所定のチップセットに統合されたチップであってもよい。ＮＩＣは、特定の物理層および／またはデータリンク層を使用して通信を行うことができる。
【００３５】
メモリ４０２ａ、４０２ｂはイニシエータ４０１ａ〜４０１ｅの各々からアクセスされる、記憶装置である。メモリは、たとえばＤＲＡＭ、ＳＲＡＭ、ＥＥＰＲＯＭ等を含む。複数の機能をシステム的に組み上げることで構成されるＳｏＣにおいては、製品機能の差別化のための独自開発のイニシエータや、他のシステムからの流用やカスタマイズにより、組み込まれるイニシエータや、市販の汎用イニシエータなどが混在する。そのため、イニシエータ毎にインタフェースされるバスプロトコルが異なるのが一般的である。メモリコントローラについても同様である。このため、ＳｏＣ４００上では、独自プロトコルをはじめとして、ＡＸＩ、ＡＨＢ、ＡＰＢ、ＯＣＰ、ＰＩＦなどの任意のプロトコルの混在が生じる。各イニシエータやメモリは、イニシエータ側のＮＩＣ４０３ａ〜４０３ｅ、メモリ側のＮＩＣ４０４ａ、４０４ｂ、およびメモリコントローラ４０６ａおよび４０６ｂを介して、ルータで構成されるパケット交換ネットワーク４５０に接続される。各ＮＩＣはパケット交換ネットワーク４５０へのバスプロトコル変換処理を行い、イニシエータ−メモリ間で送受信されるメモリアクセスのデータを、パケット化／脱パケット化してＮｏＣバスにインタフェースする。
【００３６】
また、要求帯域が変動する場合などは、イニシエータの変動により、メモリも用途に依存して変動し得る。つまり、イニシエータ４０１ａ〜４０１ｅを除くＳｏＣ４００の構成、具体的には、ＮＩＣを含むパケット交換ネットワーク４５０と、メモリコントローラ４０６ａおよび４０６ｂと、メモリ４０２ａ、４０２ｂとを有するシステム（メモリバスシステム）を予め用意しておき、用途に応じて適宜イニシエータを接続すればよい。ＳｏＣ４００のためのモジュールを提供することができ、汎用性の高い環境を提供することが可能となる。
【００３７】
図４（ａ）〜（ｄ）は、ＮｏＣ上で送受信されるパケットの種類とその構成例を示す。
【００３８】
図４（ａ）および（ｂ）は、ライトおよびリードの各リクエストパケットの構成例を示す。図４（ａ）に示すライトのリクエストパケットは、ヘッダ５１ａおよびリクエストデータ５２ａを含む。図４（ｂ）に示すリードのリクエストパケットは、ヘッダ５１ｂおよびリクエストデータ（リード・アドレス）５２ｂを含む。なお、リクエストパケットにはヘッダおよびアドレスの一部を含んでもよい。たとえば、図４（ａ）に示されるヘッダ５１ａと、リクエストデータ５２ａに含まれるライト・アドレスとをまとめて、１つのヘッダとして設けてもよい。換言すれば、ライト・アドレスは、図４（ａ）および（ｂ）に示すヘッダ５１ａまたは５１ｂに含まれてもよい。
【００３９】
図４（ｃ）および（ｄ）は、ライトおよびリードの各レスポンスパケットの構成例を示す。レスポンスパケットは、リクエストパケットに応答して実行された結果を示すデータを格納する。ライトのレスポンスパケットは、ヘッダ５１ｃおよびレスポンスデータ（ライト・ステータス）５２ｃを含む。リードのレスポンスパケットは、ヘッダ５１ｄおよびリクエストデータ５２ｄを含む。なお、レスポンスパケットのライト・ステータスやリード・ステータスには、リード・アドレスやライト・アドレスが含まれていてもよい。アドレスを含む場合は、アドレスフィールドもレスポンスヘッダの一部として、後述する図１５に示す記憶領域に記憶されることになる。
【００４０】
図５は、パケットのヘッダ５１の構成例を示す。ヘッダ５１は、たとえばパケットＩＤフィールド５１−１、パケット種別フィールド５１−２、送信元フィールド５１−３、宛先フィールド５１−４、転送優先度フィールド５１−５、データサイズフィールド５１−６を有している。
【００４１】
パケットＩＤフィールド５１−１は、ＮＩＣで、送信したリクエストパケットと対応するレスポンスパケットの対応関係を管理するための、イニシエータ毎に一意の識別子である。パケット種別フィールド５１−２は、該パケットがリードのリクエストかリードのレスポンスかライトのリクエストかライトのレスポンスかを示す情報である。送信元フィールド５１−３や宛先フィールド５１−４は、ＮｏＣルータがパケットの配送経路をルーティングする場合に必要となる、システムで一意の宛先となるイニシエータやメモリのＩＤである。転送優先度フィールド５１−５は、よりアクセス品質が求められるイニシエータのアクセス要求を、他のイニシエータよりも優先的に行うなどの品質保証に用いるための優先度情報である。データサイズフィールド５１−６は、リードするデータのサイズやライトするデータのサイズの情報である。これら以外の情報がヘッダに含まれても良い。
【００４２】
ＡＶ機器や携帯端末への組み込みを対象とするような大規模なＳｏＣでは、多様な特性のイニシエータが接続される形態が一般的である。たとえば、リアルタイム系の信号処理を行うイニシエータは、所定期間内に一定レートのアクセスを保証する必要のあるレート保証型のイニシエータと呼ばれる。また、たとえばウェブアクセスを行うイニシエータは、メモリへのアクセス要求の頻度が不定期で予測困難なレート非保証型のイニシエータと呼ばれる。
【００４３】
いま、図３に示すイニシエータ４０１ａがレート保証型のイニシエータであるとし、図３に示すイニシエータ４０１ｂがレート非保証型のイニシエータであるとする。
【００４４】
図６（Ａ）〜（Ｄ）は、図３に示すレート保証型のイニシエータ４０１ａとレート非保証型のイニシエータ４０１ｂとがメモリ４０２ａにアクセスする場合に行われるデータの処理の流れを示す。
【００４５】
図６（Ａ）は、レート保証型のイニシエータ４０１ａに所定のレートを保証するために必要なサイクルを示す。図６（Ａ）によれば、イニシエータ４０１ａに所定のレートを保証するためには、メモリコントローラ４０６ａは平均的にＲサイクルに１回のメモリアクセスを実行する必要がある。
【００４６】
図６（Ｂ）は、イニシエータ４０１ａから出力されたメモリアクセスのリクエストパケットが、メモリコントローラ４０６ａと接続されているＮＩＣ４０４ａ（図３）へ到着するタイミングを示している。リクエストパケット４０１ａ１を受信したＮＩＣ４０４ａは、リクエストパケットの脱パケット化を行うとともに、リクエストパケットのヘッダから、レスポンスパケットに付与するためのヘッダを生成して記憶し、メモリコントローラ４０６ａにリクエストデータを送信する。これにより、メモリアクセスが開始される。また図６（Ｂ）は、イニシエータ４０１ａの次のリクエストパケット４０１ａ２がＮＩＣ４０４ａに到着していることも示している。
【００４７】
図６（Ｃ）は、時刻Ｔ０（図６（Ａ））に受信されたリクエストパケット４０１ａ１に対応するメモリアクセス処理が時刻Ｔ３に完了したことを示す。これにより、メモリコントローラ４０６ａは時刻Ｔ３には次のメモリアクセスを実行可能な状態となる。図６（Ｂ）に示す次のリクエストパケット４０１ａ２は、時刻Ｔ３より早い時点で、ＮＩＣ４０４ａに到着している。ＮＩＣ４０４ａはリクエストパケット４０１ａ２の脱パケット化を行うとともに、リクエストパケットのヘッダから、レスポンスパケットに付与するためのヘッダを生成して記憶し、メモリコントローラ４０６ａにリクエストデータを送信する。
【００４８】
図６（Ｄ）は、時刻Ｔ３より早い時点（時刻Ｔ２）で、イニシエータ４０１ｂからのリクエストパケット４０１ｂ１がＮＩＣ４０４ａに到着していることを示す。ＮＩＣ４０４ａはリクエストパケット４０１ｂ１の脱パケット化を行うとともに、リクエストパケットのヘッダから、レスポンスパケットに付与するためのヘッダを生成して記憶し、メモリコントローラ４０６ａにリクエストデータを送信する。
【００４９】
上述の通り、時刻Ｔ３に次のメモリアクセスが可能となる。しかしながらメモリコントローラ４０６ａは、既に２つのリクエストパケット４０１ａ２、４０１ｂ１から抽出されたリクエストデータを受信しているため、どのリクエストデータを次に実行すべきかを決定する処理（調停処理）を行う。
【００５０】
時刻Ｔ０＋Ｒの期間内にイニシエータ４０１ａの次のメモリアクセスを実行すれば、イニシエータ４０１ａに対する所定レートは保証可能である。つまり、イニシエータ４０１ａに関するリクエストデータの処理を優先させなくても、まだ時間的な余裕はある。そのため時刻Ｔ３において、メモリコントローラ４０６ａは、イニシエータ４０１ｂからのリクエストパケット４０１ｂ１から抽出されたリクエストデータを、次に実行するデータとして選択する。ＮＩＣ４０４ａが、メモリコントローラ４０６ａにリクエストデータを送信した順序は、リクエストパケット４０１ａ１、４０１ａ２、４０１ｂ１に対応する順序である。
【００５１】
しかしながら、図２を参照しながら説明したように、メモリコントローラ４０６ａによる調停の結果、アクセス実行順序は変更される。具体的には、リクエストパケット４０１ａ１、４０１ｂ１、４０１ａ２の順序で処理が実行される。メモリコントローラ４０６ａは、ＮＩＣ４０４ａに、リクエストパケット４０１ａ２によるリクエストデータと、リクエストパケット４０１ｂ１によるリクエストデータとの間で、アクセス実行順序が変更されたことを通知する。
【００５２】
この通知を受けて、ＮＩＣ４０４ａは記憶しているレスポンスヘッダの出力順序を調整する。メモリ４０２ａから、メモリコントローラ４０６ａを介してＮＩＣ４０４ａにレスポンスデータが送信される順序は、リクエストパケット４０１ａ１、４０１ｂ１、４０１ａ２の順序に対応する。ＮＩＣ４０４ａは、各レスポンスデータに、正しい順序でレスポンスヘッダを読み出してレスポンスパケットを完成させる。生成されたレスポンスパケットは、ＮＩＣ４０４ａに接続されたＮｏＣルータに送信され、ＮｏＣバスを介して、イニシエータまで送信される。
【００５３】
図７は、図３のメモリ側のＮＩＣ４０４ａの構成例を示す。図７はまた、ルータ４０５、メモリコントローラ４０６ａ、メモリ４０２ａの接続関係を示している。なお、ＮＩＣ４０４ａは図３におけるＮＩＣ４０４ａに対応する。しかしながら、ＮＩＣ４０４ｂの構成もまたＮＩＣ４０４ａと同じである。本実施形態では、ＮＩＣ４０４ａを例に挙げ、メモリコントローラ４０６ａ等との間で行われる動作を説明する。
【００５４】
ＮＩＣ４０４ａは、脱パケット化処理部１０１と、ヘッダ生成記憶部１０２と、パケット化処理部１０３と、ヘッダ順序制御部１０４とを備えている。
【００５５】
（脱パケット化処理部１０１）
脱パケット化処理部１０１は、ルータ４０５を介してリクエストパケットを受信する。リクエストパケットは、イニシエータが送信したメモリアクセスのリクエストを含む。たとえばリクエストパケットの構成例は図４（ａ）または図４（ｂ）に示す通りである。メモリへのデータの書き込み（ライト）の場合を例にとると、脱パケット化処理部１０１は、受信したリクエストパケットからヘッダを分離する。
【００５６】
図８は、メモリコントローラ４０６ａに与えられる信号の種類を示す。脱パケット化処理部１０１は、メモリコントローラのデータバス信号線にライトデータを提示し、アドレスバス信号線にアドレスを提示する。また脱パケット化処理部１０１は、ヘッダ内部を解析し、必要な情報を抽出して、制御信号線に提示する。例えば、図５のヘッダ５１の構成例では、脱パケット化処理部１０１は、データサイズフィールド５１−６からライトデータのサイズを抽出し、バースト転送時のサイクル数を算出して、制御信号として提示する。また脱パケット化処理部１０１は、分離したリクエストパケットのヘッダ５１ａを、ヘッダ生成記憶部１０２に送信する。
【００５７】
（ヘッダ生成記憶部１０２）
図７に示すヘッダ生成記憶部１０２は、脱パケット化処理部１０１から入力されたリクエストパケットのヘッダ５１ａ、５１ｂから、新たなヘッダ５１を生成し、記憶する。新たなヘッダ５１は、該リクエストのメモリオペレーションに対応するレスポンスパケットに付与するために利用される。
【００５８】
図９は、ヘッダ生成記憶部１０２が適用する、レスポンスパケットのヘッダの生成規則の例を示す。パケットＩＤフィールドは、リクエストデータとレスポンスデータのペアリングを行うための情報であるため、リクエストパケットのパケットＩＤがレスポンスパケットのヘッダ（レスポンスヘッダ）５１ｃまたはレスポンスヘッダ５１ｄに複製される。パケット種別フィールドは、リードのリクエストの場合には、リードのレスポンスを示す値に変換され、ライトのリクエストの場合には、ライトのレスポンスを示す値に変換され、それぞれレスポンスヘッダ５１ｃまたはレスポンスヘッダ５１ｄに格納される。
【００５９】
送信元フィールドに関しては、リクエストの場合には、メモリアクセスを発行したイニシエータ側のＮＩＣのＩＤが格納されている。一方、レスポンスの場合には、そのイニシエータは宛先となる。そのため、ヘッダ生成記憶部１０２は、リクエストパケットのヘッダ（リクエストヘッダ）の送信元フィールドの情報を、レスポンスヘッダの宛先フィールドに格納する。一方、リクエストの場合には、リクエストヘッダの宛先フィールドは、メモリ側のＮＩＣのＩＤが格納されているが、レスポンスの場合には、該メモリは送信元となる。そのため、ヘッダ生成記憶部１０２は、リクエストヘッダの宛先フィールドの情報を、レスポンスヘッダの送信元フィールドに格納する。他のフィールドについても必要に応じて変換処理され、レスポンスヘッダが生成される。
【００６０】
ヘッダ生成記憶部１０２は、生成されたレスポンスパケットのヘッダを、ＮＩＣがリクエストパケットを受信した順に記憶する。記憶方法は、順序付きのリスト構造を用いても良い。
【００６１】
図１０は、図６に示すタイミング図の時刻Ｔ３においてヘッダ生成記憶部１０２が記憶する順序リストの例を示す。時刻Ｔ２においては、リクエストパケット４０１ａ１に対応するメモリオペレーションが実行中である。当該リクエストパケット４０１ａ１に基づいて行われたメモリ４０２ａへのアクセス結果を、メモリ４０２ａからのレスポンスデータとして受信する。ＮＩＣ４０４ａでは、リクエストパケット４０１ａ１のアクセスに対応したレスポンスパケットのヘッダが、ＮＩＣ４０４ａが次にメモリコントローラ４０６ａから受信したレスポンスデータに付与される状態にある。
【００６２】
（パケット化処理部１０３）
再び図７を参照する。
【００６３】
パケット化処理部１０３は、メモリ側から受信したレスポンスデータに、ヘッダを付与する処理などを行い、レスポンスパケットを完成させ、ＮｏＣバス側のルータ４０５に送信する。レスポンスデータに付与されたヘッダは、ヘッダ生成記憶部１０２から取得する。
【００６４】
時刻Ｔ３において、リクエストパケット４０１ａ１に基づくメモリオペレーションが完了し、レスポンスデータが返されると、パケット化処理部１０３は、ヘッダ生成記憶部１０２からレスポンスヘッダを読み出す。上述の通り、時刻Ｔ３におけるレスポンスヘッダの記憶状況（順序リスト）は図１０に示すとおりである。パケット化処理部１０３は、リクエストパケット４０１ａ１に対応するレスポンスパケットのためのヘッダを取得し、レスポンスパケットを完成させ、ルータ４０５に送出する。パケット化処理部１０３は、リクエストパケット４０１ａ１に対応するレスポンスパケットを送信した後に更新された、レスポンスヘッダの記憶状況（順序リスト）を更新する。図１１は、リクエストパケット４０１ａ１に対応するレスポンスパケット送信後の、レスポンスヘッダの順序リストを示す。
【００６５】
（ヘッダ順序制御部１０４）
図７に示すヘッダ順序制御部１０４は、メモリコントローラ４０６ａおよびメモリ４０２ａで実行されたメモリオペレーションの順序に従って、ヘッダ生成記憶部１０２に記憶されているレスポンスパケットのヘッダの読み出し順序を制御する。
【００６６】
図１２（Ａ）〜（Ｄ）は、図３に示すイニシエータ４０１ａおよび４０１ｂからのリクエストにしたがってメモリ４０２ａへのアクセスが発生する場合のメモリ４０２ａの動作を示す。特に図１２（Ｃ）は、時刻Ｔ３以降のリクエストパケット４０１ｂ１および４０１ａ２を示している。
【００６７】
図１２（Ｃ）は、メモリ４０２ａが、時刻Ｔ３にイニシエータ４０１ｂのメモリアクセスのリクエストパケット４０１ｂ１に基づく処理を実行し、該メモリアクセスを時刻Ｔ５に完了したことを示す。さらに図１２（Ｃ）は、続いてイニシエータ４０１ａのメモリアクセスのリクエストパケット４０１ａ２に基づく処理を実行し、該メモリアクセスを時刻Ｔ６に完了したことを示す。
【００６８】
図７に示されるように、メモリコントローラ４０６ａは、アクセス調停部４１６ａおよび送信部４１６ｂを有している。
【００６９】
アクセス調停部４１６ａは、複数のリクエストデータを対象として調停処理を行う。調停処理の結果、メモリアクセスのリクエストパケット４０１ａ２と４０１ｂ１に基づくリクエストの実行順序が変更される。このときアクセス調停部４１６ａは、どのように実行順序が変更されたかを示すリクエスト順序情報を出力する。ヘッダ順序制御部１０４は、そのリクエスト順序情報をアクセス調停部４１６ａから取得する。
【００７０】
例えば、メモリコントローラ４０６ａのアクセス調停部４１６ａは、ＮＩＣ４０４ａから受信するリクエストデータの順序を記憶し、調停処理によって何番目に受信したリクエストデータが何番目に実行されたかを示す情報をリクエスト順序情報として、ＮＩＣ４０４のヘッダ順序制御部１０４に提供しても良い。
【００７１】
送信部４１６ｂは、リクエストデータにしたがってメモリから出力されたデータを、ＮＩＣ４０４ａのパケット化処理部１０３に転送する。
【００７２】
図１３は、時刻Ｔ２における、メモリコントローラ４０６ａで受信したリクエストパケットの管理構造の例である。この管理構造では、ＮＩＣ４０４ａより既に受け付けたリクエストパケット４０１ａ２、４０１ｂ１に対応した受付順序の情報が保持されている。
【００７３】
時刻Ｔ３において、リクエストパケット４０１ｂ１のメモリオペレーションが、リクエストパケット４０１ａ２に先立って実行されると、メモリ４０２ａは、リクエストの実行順序が変更されたことを示すリクエスト順序情報をヘッダ順序制御部１０４に提供する。
【００７４】
図１４は、リクエスト順序情報の例を示す。リクエスト順序情報を取得したヘッダ順序制御部１０４は、リクエスト順序情報を参照して、時刻Ｔ３におけるヘッダ生成記憶部１０２内のレスポンスヘッダの、パケット化処理部１０３への出力順序を変更する。具体的な処理は以下のとおりである。なお、以下では、ヘッダ生成記憶部１０２は、その記憶位置に応じて読み出し順序が決定される記憶領域を有しているとする。
【００７５】
まず、図１５（Ａ）に示すような状態で、パケット４０１ａ２に対応するヘッダおよびパケット４０１ｂ１に対応するヘッダが順に格納されている。この状態では、先頭位置に格納されたパケット４０１ａ２に対応するヘッダが先に読み出され、その後、次の位置に格納されたパケット４０１ｂ１に対応するヘッダが読み出される。
【００７６】
ヘッダ順序制御部１０４は、リクエスト順序情報（順序リスト）を図１５（Ａ）の状態から図１５（Ｂ）の状態に変更する。この処理は、ヘッダ順序制御部１０４が順序リストから、記憶されたレスポンスヘッダの先頭から２番目のヘッダを読み出し、先頭の位置に変更することにより、実現される。これにより、先頭位置に格納されたパケット４０１ｂ１に対応するヘッダが先に読み出され、その後、次の位置に格納されたパケット４０１ａ２に対応するヘッダが読み出されることになる。
【００７７】
図１６は、ＮＩＣ４０４ａによって実行される、リクエストパケット受信時の処理フローを示す。脱パケット化処理部１０１がルータからリクエストパケットを受信すると、パケットを解析し、バスを駆動して、アドレス信号、データ信号、および必要な制御信号を含むリクエストデータをメモリコントローラ４０６ａに送信する。ヘッダ生成記憶部１０２はレスポンスパケットのヘッダを生成し、ヘッダを記憶する。
【００７８】
図１７は、ＮＩＣ４０４ａによって実行される、レスポンスデータ受信時の処理フローを示す。パケット化処理部１０３はメモリ４０２ａからメモリコントローラ４０６ａを介してレスポンスデータを受信する。するとパケット化処理部１０３は、ヘッダ生成記憶部１０２に記憶されている順序リストの先頭に配置されているヘッダを読み出し、レスポンスデータに付加してレスポンスパケットを生成する。その後、パケット化処理部１０３は、生成したレスポンスパケットをルータ４０５に送信する。
【００７９】
図１８は、ＮＩＣ４０４ａによって実行される、メモリアクセス順序の変更に伴う処理フローを示す。パケット化処理部１０３はメモリ４０２ａからメモリコントローラ４０６ａを介してレスポンスデータを受信する。ヘッダ順序制御部１０４は、リクエストデータの処理順序が変更されたか否かを判定し、変更されていた場合にはリクエスト順序情報を解析してレスポンスパケットのためのヘッダ順序を調整する。具体的には、ヘッダ順序制御部１０４は、ヘッダ生成記憶部１０２に記憶されている順序リスト内のヘッダの順序を入れ替え、先に処理されたリクエストに対応するレスポンスパケット用のヘッダを順序リストの先頭に配置する。更新後のリストは引き続きヘッダ生成記憶部１０２に記憶される。
【００８０】
なお、リクエスト順序情報は、メモリコントローラ４０６ａでのリクエストデータの処理順序の変更時にＮＩＣに通知される。通知は、メモリコントローラ４０６ａによる調停毎に毎回行っても良いし、リクエストの実行順序に変更があった場合にのみ行っても良い。前者は、メモリコントローラ４０６ａのアクセス調停部４１６ａによる調停処理は行われたが、実際に実行順序が変更されなかった場合も含む。
【００８１】
またリクエストの実行順序に変更があった場合には、図１５（Ａ）に示す、レスポンスパケットのヘッダの順序リストのエントリーの順序を、図１５（Ｂ）に示すように変更しても良い。または、順序リスト構造を用いず、順序情報だけを変更しても良い。図１９を参照しながら、順序情報を変更する変形例を説明する。
【００８２】
図１９は、ヘッダ生成記憶部１０２における、レスポンスパケットのヘッダ格納領域のデータ構造を示す。図１９には、レスポンスヘッダを格納する記憶領域以外に、レスポンスヘッダの読み出し順序を記憶するための記憶領域が設けられている。各レスポンスヘッダとその読み出し順序の情報とが対応付けて記憶されている。なお、記憶領域が分けられていなくてもよく、各レスポンスヘッダとその読み出し順序の情報とがテーブル形式で格納されていてもよい。
【００８３】
図１９（Ａ）は、レスポンスデータの実行順序の変更前の順序記憶領域の状態を示す。リクエスト順序情報の取得により、実行順序が変更されたことが分かると、ヘッダ順序制御部１０４は図１９（Ｂ）に示すように、記憶された順序の情報を変更する。レスポンスパケットのヘッダの記憶領域自体は変更されない。レスポンスパケットのヘッダの記憶領域を変更する必要がないため、変更時の処理の負荷を軽減できる。パケット化処理部１０３は、最も早い（最も小さい）実行順序が設定されたヘッダを用いて、レスポンスパケットを生成する。
【００８４】
ヘッダ順序制御部１０４がレスポンスヘッダの順序を変更する処理に時間を要する場合は、リクエスト順序情報の受取を、該リクエストにかかるメモリアクセス実行の完了に先立って行っても良い。
【００８５】
図２０（ａ）は、メモリアクセス完了後にリクエスト順序情報の通知を受信する例に関する、メモリコントローラ４０６ａおよびＮＩＣ４０４ａの動作タイミングを示す。図２０（ｂ）は、メモリアクセス実行に先立ってリクエスト順序情報の通知を受信する例に関する、メモリコントローラ４０６ａおよびＮＩＣ４０４ａの動作タイミングを示す。
【００８６】
図２０（ａ）では、レスポンスパケットの送信開始時刻は、時刻Ｔｄ＋Ｘである。一方、図２０（ｂ）の例におけるレスポンスパケットの送信開始時刻は、図２０（ａ）の例よりＸサイクル早い時刻Ｔｄに送信を開始できる。メモリコントローラ４０６ａのアクセス調停部４１６ａが時刻Ｔａにリクエストの実行順序を確定すると、続いてアクセス調停部４１６ａは時刻ＴａからＴｃの期間にリクエストを実行する。即ちアクセス調停部４１６ａはメモリ４０２ａへのデータの読み書きのアクセス処理を行う。
【００８７】
メモリコントローラ４０６ａは、リクエストの実行の完了を待たずに、レスポンスデータの送信に先立つ時刻Ｔａで、ＮＩＣ４０４ａにリクエスト順序情報を通知する。ＮＩＣ４０４ａのヘッダ順序制御部１０４は、時刻Ｔｂにリクエスト順序情報を受信すると、その時刻Ｔｂからレスポンスヘッダの順序変更処理を開始する。ヘッダ順序制御部１０４がレスポンスヘッダの順序変更処理を行うには、Ｘサイクルの処理時間を有するとする。この処理は、メモリコントローラ４０６ａによるメモリ４０２ａへのリクエストの実行と共に並列して実行することが可能である。
【００８８】
リクエストの実行結果としてメモリ４０２ａから得られたレスポンスデータは、時刻ＴｄにＮＩＣ４０４ａのパケット化処理部１０３に送信される。レスポンスデータを受信するとパケット化処理部１０３は、ヘッダ生成記憶部１０２の先頭の位置に存在していたレスポンスヘッダ、または最も早い実行順序であることを示すレスポンスヘッダを読み出し、レスポンスパケットを生成する。その後、パケット化処理部１０３は、レスポンスヘッダ、およびレスポンスデータを用いてレスポンスパケットを生成し、レスポンスパケットをルータ４０５に出力する。
【００８９】
レスポンスパケットのルータ４０５への送信は時刻Ｔｄに開始される。時刻Ｔｄは、リクエスト実行の完了に伴うレスポンスデータの取得時刻である。リクエスト順序情報をレスポンスデータと同時に通知する場合と比較して、Ｘサイクル分の処理遅延が短縮される。
【００９０】
ＮＩＣ４０４ａが、メモリコントローラ４０６ａから、リクエスト実行の完了のタイミングを事前に取得できる場合は、レスポンスパケットという形態ではなく、レスポンスヘッダとレスポンスデータとを別々にルータ４０５に送信してもよい。レスポンスパケット（より具体的にはレスポンスデータ）をＮＩＣ４０４ａからルータ４０５に送信するタイミングに先立って、レスポンスヘッダを先にルータ４０５に送信しても良い。レスポンスヘッダを先行してルータ４０５に送信することで、ルータの処理時間によるレスポンスパケットの送信遅延を削減することが可能となる。以下、具体的に説明する。
【００９１】
一般的なルータのパケット転送時の処理は、（１）ルーティング処理（ＲＴ）、（２）仮想チャネルの割当（ＶＡ）、（３）出力スイッチの割当（ＳＡ）およびスイッチング（ＳＴ）、の順序で実行される。これら３つのステージをそれぞれ１サイクルで実行するとすれば、ルータのパケット転送処理に要する時間は、合計３サイクルとなる。出力スイッチの割当とスイッチングは、レスポンスヘッダおよびレスポンスデータの双方に必要である。またルーティング処理および仮想チャネルの割当処理は、レスポンスヘッダのみで必要である。ルータ４０５はレスポンスパケット用のレスポンスヘッダを受信したタイミングから３サイクル後に、後続のルータやＮＩＣに、ヘッダの出力を開始することが可能となる。
【００９２】
図２１は、ＮＩＣの出力タイミング、ＮＩＣに接続されたルータ４０５の出力タイミング、およびルータ４０５内での処理の遷移を示す。なお、この図の例における条件は、ヘッダが１サイクルで転送可能なサイズを有し、レスポンスデータが２サイクルで転送可能なサイズを有し、レスポンスパケット全体は３サイクルで転送可能なサイズを有するとしている。
【００９３】
図２１に示すように、まず時刻ｔ３にレスポンスヘッダＨがＮＩＣ４０４ａから出力される。ＳｏＣシステム４００（図３）においては、ＮＩＣ４０４ａからのレスポンスヘッダＨの出力は、レスポンスヘッダＨが時刻ｔ３にルータ４０５に注入されることを意味している。続いて時刻ｔ４およびｔ５に、２サイクル分のレスポンスデータＰが注入されている。ここでいう「注入される」という語は、ルータ４０５がレスポンスヘッダＨを表す信号を内部に取り込んでいることを意味する。ＮＩＣ４０４ａが、ルータ４０５に接続される信号線に上記信号を載せたタイミングで、信号はルータ４０５に到着する。ルータ４０５がその信号を内部に取り込んでいない場合には、その信号はまだルータ４０５には注入されていないことになる。図２１の時刻ｔ３では、ＮＩＣがレスポンスヘッダＨの信号を信号線に載せ、同じタイミングでルータがその信号を内部に取り込んでいることを示している。その結果、次のサイクルである時刻ｔ４で、ルータ４０５は取り込んだ信号を用いてＲＴのステージを実行することができる。
【００９４】
ルータ４０５は３サイクルかけてレスポンスヘッダＨの処理を行い、続いて２サイクルかけてレスポンスデータＰの処理を行う。これがルータ４０５における処理遅延となる。この処理遅延のため、レスポンスパケットがルータ４０５から出力されるタイミングは、時刻ｔ６から時刻ｔ８となる。レスポンスヘッダＨがＮＩＣから出力された時刻ｔ３を起点とすると、３サイクルの転送遅延が発生している。つまり、ルータ４０５はレスポンスパケット用のレスポンスヘッダを受信したタイミングから３サイクル後の時刻ｔ６から、後続のルータやＮＩＣに、レスポンスパケットの出力を開始することが可能となる。
【００９５】
次に、上述したように、ＮＩＣがレスポンスヘッダとレスポンスデータとを別々にルータに送信した例を考える。以下に説明する図２２および２７の例は、図２２の例と同様、時刻ｔ４においてレスポンスデータがＮＩＣから出力され、ルータに到着するという点で条件を揃えて説明している。
【００９６】
図２２は、レスポンスパケットのヘッダとレスポンスデータとが別個に送受信された場合の処理を示す。
【００９７】
この例では、ＮＩＣ４０４ａは時刻ｔ０において、レスポンスデータの出力予定時刻（本例では時刻ｔ４）を知らせる通知を出力する。その通知は、同時刻にルータ４０５に到着する。これにより、ルータ４０５は、レスポンスデータの受取に先立って、その到着予定時刻を、時刻ｔ０で検出することが可能となる。
【００９８】
ＮＩＣ４０４ａは、時刻ｔ４にレスポンスデータをルータ４０５に注入することを踏まえ、レスポンスデータに付与するレスポンスヘッダを、時刻ｔ４の３サイクル前である時刻ｔ１の時点でルータ４０５に注入する。時刻ｔ１においてレスポンスヘッダを受信したルータ４０５は、該レスポンスパケットに対するルーティング処理、仮想チャネルの割当、出力スイッチの割当とスイッチングによるレスポンスヘッダの転送を３サイクルかけて実行する。そしてルータ４０５は、時刻ｔ４にレスポンスヘッダを後続のルータ４０５またはＮＩＣに転送する。
【００９９】
上述の処理を行っている時刻ｔ４になると、ルータ４０５はＮＩＣ４０４ａからレスポンスデータを受け取る。そして時刻ｔ５にもさらにレスポンスデータを受け取る。時刻ｔ４までに既にルータ４０５はルーティング処理、仮想チャネルの割当、出力スイッチの割当とスイッチングによるレスポンスヘッダの処理が完了している。よって、これらのレスポンスデータは、レスポンスヘッダＨに続いて、時刻ｔ５、ｔ６に出力される。
【０１００】
図２１の例では、時刻ｔ６から時刻ｔ８の区間に、ルータ４０５からレスポンスパケットが出力される。
【０１０１】
しかしながら、図２２に示す例のように、レスポンスヘッダを事前にルータ４０５に注入しておくことにより、ルータ４０５はレスポンスパケットの出力を時刻ｔ４から開始することが可能となり、時刻ｔ６において出力が完了する。つまり、図２１の例と比較して、本例の構成によれば、２サイクルの処理遅延が全てのレスポンスパケットに関して削減され、即応性が高まる効果が得られる。
【０１０２】
ＮＩＣ４０４ａは、メモリコントローラ４０６ａからリクエスト実行完了のタイミングを事前に取得できない場合がある。その場合には、ＮＩＣ４０４ａからルータ４０５へのレスポンスヘッダの出力タイミングは、メモリコントローラからリクエスト順序情報を受けたタイミング、即ち、図２０（ｂ）の時刻Ｔｂで示されるタイミングで行っても良い。メモリコントローラからリクエスト実行完了のタイミングを事前に取得できる場合には、リクエスト実行完了のタイミングと、ＮＩＣ４０４ａに接続されたルータ４０５の処理遅延とパイプライン構成によって最適なタイミングの値を決定してもよい。最適な値は、レスポンスヘッダとレスポンスデータとが連続してルータ４０５から出力され、レスポンスデータの注入開始が可能となる時刻までにレスポンスデータのルータ４０５での転送準備が完了しているタイミングとすればよい。図２２では２サイクルの間隔に制御すればよい。これにより、後続のルータの仮想チャネル内にレスポンスヘッダだけが滞留し、該レスポンスヘッダに対応するレスポンスデータが到着しない状態を抑制可能となり、帯域利用効率を向上させつつ、レスポンスパケットの転送処理遅延を削減する効果が得られる。
【０１０３】
図２３は、パイプライン構成が、ルーティング処理、仮想チャネルの割当と出力スイッチの割当、スイッチングの３ステージ構成となっている３サイクルルータにおける、最適なレスポンスヘッダの出力タイミングを示す。このような３サイクルルータを用いる場合には、図２３に示すように、レスポンスデータの送信に先立ち、レスポンスヘッダを１サイクル前に出力するタイミングが最適となる。
【０１０４】
（実施の形態２）
実施の形態１では、メモリコントローラがリクエスト順序情報を出力し、ＮＩＣがその情報を取得するとして説明した。しかしながら、リクエスト順序情報を提供するための仕組みを持たないメモリコントローラを用いる場合、ＮＩＣはリクエスト順序情報を取得することができない。
【０１０５】
本実施の形態２では、そのようなメモリコントローラを使用した場合であっても、ＮＩＣがリクエストデータの順序変更を検出することが可能な構成に関する。具体的には、メモリコントローラからメモリモジュールに提示される信号の状態を検出し、メモリコントローラを介さずに、リクエストデータの順序変更を検出する。
【０１０６】
図２４は、本実施形態にかかるＮＩＣ４１４の構成例を示す。ＮＩＣ４１４は、リクエスト順序情報を生成するためのリクエスト順序解析部２００１を有している点において、実施の形態１のＮＩＣ４０４ａ、４０４ｂと相違している。実施の形態１のＮＩＣ４０４ａ等と同じ機能および構成を有する構成要素には、と同じ番号を付している。そして、以下では、異なる動作を中心に説明する。
【０１０７】
なお、以下ではＮＩＣ４１４は図７のＮＩＣ４０４ａに対応するとして説明しているが、実施形態１と同様、ＮＩＣ４０４ｂとして利用することも可能である。
【０１０８】
（リクエスト順序解析部）
リクエスト順序解析部２００１は、メモリコントローラ４２６からメモリ４０２ａに送信される信号の状態を監視する。具体的には、メモリコントローラ４２６からメモリ４０２ａに提示されるアドレス情報を監視する。その結果、リクエスト順序解析部２００１は、メモリコントローラ４２６からメモリ４０２ａに発行されたリクエストデータを特定することができる。このリクエストデータとは、たとえば行アドレス、列アドレス、バンク番号、リード／ライトの情報である。これらに基づいて、リクエスト順序解析部２００１は、リクエストの順序を示すリクエスト順序情報を構築し、ヘッダ順序制御部１０４に提供する。ＮＩＣ４１４の脱パケット化処理部１０１で脱パケット化され、メモリコントローラ１０６に送出されるリクエストデータから、リクエスト順序の特定に要する情報を分離し記憶する。
【０１０９】
図２５は、リクエスト順序を記憶するためのデータ構造の例を示す。ＮＩＣ４１４からメモリコントローラ４２６に、リクエストデータが転送された順序に従ってアドレスやリード／ライトの種別の情報が記憶される。
【０１１０】
リクエスト順序解析部２００１は、メモリコントローラ４２６から、メモリ４０２ａに提示されるアドレスストローブ信号に基づいて、行アドレス、列アドレス、バンク番号、リード／ライトの情報を監視し、アドレス逆変換を行うことにより、リクエストデータに含まれるアドレス情報とリード／ライトの種別を特定する。
【０１１１】
図２６は、アドレスを逆変換するためのデータ構造の例を示す。アドレスの逆変換は、メモリコントローラ内でリクエストデータに含まれるアクセス先のアドレスから、メモリの行アドレス、列アドレスに変換する処理と逆の処理であり、変換ロジックとして実装されてもよい。監視した結果得られた行アドレスが８０ｈ、列アドレスが００ｈ、メモリへのライトを示す場合、図２６のアドレスの逆変換処理を行うことにより、リクエストデータでのアクセス対象アドレスは、８０００ｈとなる。図２５を参照することにより、リクエスト順序２のリクエストデータがメモリ２００２に発行されたことが分かり、リクエスト順序解析部２００１において、リクエスト順序の変更が検出できる。このとき、リクエスト順序解析部２００１は、図１４に示すリクエスト順序情報を生成し、ヘッダ順序制御部１０４に送信する。図２７は、記憶領域の状態を示す。図２５に示した記憶領域の状態は、図２７に示すように変更される。
【産業上の利用可能性】
【０１１２】
本発明の一態様にかかるインタフェース装置は、組込機器向けのＳｏＣにおけるオンチップバスや、汎用プロセッサ、ＤＳＰ上のローカルバスにおける、バスとメモリとのインタフェース装置（ＮＩＣ）として利用可能である。また、当該インタフェース装置の動作方法、制御方法は、インタフェースの処理方法、インタフェース装置の制御プログラムとして利用可能である。
【符号の説明】
【０１１３】
１０１  脱パケット化処理部
１０２  ヘッダ生成記憶部
１０３  パケット化処理部
１０４  ヘッダ順序制御部
１０５  ルータ
１０６  メモリコントローラ
２０１  レート保証型イニシエータ
２０２  レート非保証型イニシエータ
２０３  アクセス管理部
２０４  アクセス管理部
２０５  アクセス調停部
２０６  メモリコントローラ
２０７  メモリ
３０１  ネットワーク・インタフェース・コントローラ（ＮＩＣ）
３０２  メモリコントローラ
３０３  メモリ
３０４−３０６  リクエストデータ
３０７−３０９  レスポンスデータ
４０１  イニシエータ
４０２、４０２ａ  メモリ
４０３  イニシエータ側のネットワーク・インタフェース・コントローラ（ＮＩＣ）
４０４、４１４  メモリ側のネットワーク・インタフェース・コントローラ（ＮＩＣ）
４０５  ルータ
４５０  ネットワーク
２００１  リクエスト順序解析部
【図１】
0005793690.tif 000002
【図２】
0005793690.tif 000003
【図３】
0005793690.tif 000004
【図４】
0005793690.tif 000005
【図５】
0005793690.tif 000006
【図６】
0005793690.tif 000007
【図７】
0005793690.tif 000008
【図８】
0005793690.tif 000009
【図９】
0005793690.tif 000010
【図１０】
0005793690.tif 000011
【図１１】
0005793690.tif 000012
【図１２】
0005793690.tif 000013
【図１３】
0005793690.tif 000014
【図１４】
0005793690.tif 000015
【図１５】
0005793690.tif 000016
【図１６】
0005793690.tif 000017
【図１７】
0005793690.tif 000018
【図１８】
0005793690.tif 000019
【図１９】
0005793690.tif 000020
【図２０】
0005793690.tif 000021
【図２１】
0005793690.tif 000022
【図２２】
0005793690.tif 000023
【図２３】
0005793690.tif 000024
【図２４】
0005793690.tif 000025
【図２５】
0005793690.tif 000026
【図２６】
0005793690.tif 000027
【図２７】
0005793690.tif 000028