(57)【特許請求の範囲】
【請求項１】
ＩＯ装置を制御するＩＯデバイスコントローラと演算処理装置との間でデータを転送するデータ転送装置において、
前記ＩＯデバイスコントローラ若しくは自装置へ書き込むライトデータ、又は、前記ＩＯデバイスコントローラ若しくは自装置から読み出したリードデータを、前記演算処理装置が完了せずに発行できる要求の最大数と等しい数のデータエントリのいずれかに記憶するデータバッファと、
前記最大数と等しい数の要求を一意に識別する識別情報を含むライト要求を前記演算処理装置から受信した際にライト要求を示すコマンドを入力バッファに含まれる複数の入力エントリのうち前記識別情報に基づく入力エントリに格納すると共にライトデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納する入力バッファ部と、
前記演算処理装置からの前記識別情報を含むリード要求に基づいて前記ＩＯデバイスコントローラ又は自装置から読み出されたリードデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納すると共にリード要求を示すコマンドを出力バッファに含まれる複数の出力エントリのうち前記識別情報に基づく出力エントリに格納する出力バッファ部と
を有することを特徴とするデータ転送装置。
【請求項２】
前記ライト要求及び前記リード要求を当該データ転送装置内の記憶部に対する要求と当該データ転送装置外の装置に対する要求とに振り分ける振分部と、
当該データ転送装置内の記憶部に対する要求についての処理の完了と当該データ転送装置外の装置に対する要求についての処理の完了とを調停する調停部とをさらに備え、
前記入力バッファ部は、前記ライト要求が処理される際に前記データバッファからライトデータを取り出して前記振分部に渡し、
前記出力バッファ部は、前記リード要求が処理された後に前記調停部からリードデータを受け取って前記データバッファに格納することを特徴とする請求項１に記載のデータ転送装置。
【請求項３】
プログラムを記憶する記憶装置と、前記記憶装置からプログラムを読み出して実行する演算処理装置と、ＩＯ装置を制御するＩＯデバイスコントローラと、前記演算処理装置と前記ＩＯデバイスコントローラとの間でデータを転送するデータ転送装置とを有する情報処理装置において、
前記データ転送装置は、
前記ＩＯデバイスコントローラ若しくは自装置へ書き込むライトデータ、又は、前記ＩＯデバイスコントローラ若しくは自装置から読み出したリードデータを、前記演算処理装置が完了せずに発行できる要求の最大数と等しい数のデータエントリのいずれかに記憶するデータバッファと、
前記最大数と等しい数の要求を一意に識別する識別情報を含むライト要求を前記演算処理装置から受信した際にライト要求を示すコマンドを入力バッファに含まれる複数の入力エントリのうち前記識別情報に基づく入力エントリに格納すると共にライトデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納する入力バッファ部と、
前記演算処理装置からの前記識別情報を含むリード要求に基づいて前記ＩＯデバイスコントローラ又は自装置から読み出されたリードデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納すると共にリード要求を示すコマンドを出力バッファに含まれる複数の出力エントリのうち前記識別情報に基づく出力エントリに格納する出力バッファ部と
を有することを特徴とする情報処理装置。
【請求項４】
ＩＯ装置を制御するＩＯデバイスコントローラと演算処理装置との間でデータを、前記演算処理装置が完了せずに発行できる要求の最大数と等しい数のデータエントリのいずれかに記憶するデータバッファを用いて転送するデータ転送装置によるＩＯ制御方法において、
前記最大数と等しい数の要求を一意に識別する識別情報を含むライト要求を前記演算処理装置から受信した際にライト要求を示すコマンドを入力バッファに含まれる複数の入力エントリのうち前記識別情報に基づく入力エントリに格納すると共にライトデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納し、
前記演算処理装置からの前記識別情報を含むリード要求に基づいて前記ＩＯデバイスコントローラ又は自装置から読み出されたリードデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納すると共にリード要求を示すコマンドを出力バッファに含まれる複数の出力エントリのうち前記識別情報に基づく出力エントリに格納する
処理を前記データ転送装置が実行することを特徴とするＩＯ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送装置、情報処理装置及びＩＯ（Input  Output）制御方法に関する。
【背景技術】
【０００２】
情報処理装置では、ＣＰＵ（Central  Processing  Unit）は、ＰＩＯ（Programmable  Input  Output）を用いてＩＯコントローラ及びＩＯデバイスコントローラを制御する。ここで、ＩＯデバイスコントローラは、ＩＯ装置を制御する装置である。また、ＩＯコントローラは、ＩＯデバイスコントローラとＣＰＵ及びメモリーとを接続するホストバスブリッジであり、ＩＯデバイスコントローラとＣＰＵ及びメモリーとの間でデータを転送するデータ転送装置である。【０００３】
ＣＰＵは、ＩＯコントローラ及びＩＯデバイスコントローラを制御するためにＰＩＯリクエスト（ＰＩＯ  request）を発行し、ＰＩＯリクエストを処理したＩＯコントローラ及びＩＯデバイスコントローラからＰＩＯ完了（ＰＩＯ  completion）を受け取る。【０００４】
図９は、従来のＩＯコントローラの一例を示す図である。図９に示すように、ＩＯコントローラ９は、インターコネクト７を介してＣＰＵ２からＰＩＯリクエストを受信し、自装置又はＩＯデバイスコントローラ６によりＰＩＯリクエストを処理して、ＰＩＯ完了をインターコネクト７を介してＣＰＵ２に送信する。【０００５】
ＩＯコントローラ９は、入力バッファ部９１と、コマンド処理部９２と、出力バッファ部９３とを有する。入力バッファ部９１は、ＰＩＯリクエストを受信し、ＰＩＯリクエストに含まれるコマンド、アドレス及びデータを入力バッファ９１ａに格納する。【０００６】
ここで、コマンドは、ＰＩＯリクエストの種類を示し、例えば、ＰＩＯリクエストがリードリクエストであるかライトリクエストであるかを示す。アドレスは、リードするデータを記憶するレジスタ又はライトするデータの格納先のレジスタのアドレスを示す。データは、ＰＩＯリクエストがライトリクエストである場合のライトデータであり、ＰＩＯリクエストがリードリクエストである場合にはない。【０００７】
図９では、入力バッファ９１ａに、４つのコマンド0〜コマンド3と、４つのアドレス0〜アドレス3とが、それぞれ対応付けられて格納されている。また、コマンド0及びコマンド2は、対応するＰＩＯリクエストがライトリクエストであり、データ0及びデータ2が、それぞれコマンド0及びコマンド2に対応付けられて入力バッファ９１ａに格納されている。【０００８】
コマンド処理部９２は、入力バッファ部９１に格納されたコマンドを自装置又はＩＯデバイスコントローラ６により処理し、自装置又はＩＯデバイスコントローラ６が発行したＰＩＯ完了を出力バッファ部９３に渡す。【０００９】
出力バッファ部９３は、ＰＩＯ完了に含まれるコマンド及びデータを出力バッファ９３ａに格納する。そして、出力バッファ部９３は、出力バッファ９３ａに格納したコマンド及びデータをＰＩＯ完了としてホストに送信する。ここで、データは、ＰＩＯリクエストがリードリクエストである場合のリードデータであり、ＰＩＯリクエストがライトリクエストである場合にはない。【００１０】
図９では、出力バッファ９３ａに、４つのコマンド0〜コマンド3が格納されている。また、コマンド1及びコマンド3は、対応するＰＩＯリクエストがリードリクエストであり、データ1及びデータ3が、それぞれコマンド1及びコマンド3に対応付けられて出力バッファ９３ａに格納されている。【００１１】
また、ホストとデバイスとの間でデータの転送を行うデータ転送装置が、転送を制御するシーケンスコントローラと、ホストとデバイスの間で転送されるデータを記憶するデータバッファとを備える従来技術がある（例えば、特許文献１参照。）。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２００８−２０４０４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１３】
図９に示したように、ＰＩＯリクエストがリードリクエストである場合には、入力バッファ９１ａにはデータが格納されず、ＰＩＯリクエストがライトリクエストである場合には、出力バッファ９３ａにはデータが格納されない。したがって、入力バッファ９１ａと出力バッファ９３ａを合わせるとデータを格納するデータ領域は半分の領域が使用されない。【００１４】
また、ＣＰＵ２は、ＰＩＯ完了を受信していないＰＩＯリクエストの数が所定の数になるまでＰＩＯリクエストを発行するため、入力バッファ９１ａ及び出力バッファ９３ａは、ＣＰＵ２が発行するＰＩＯリクエストの所定の数分のエントリを備える。したがって、ＩＯコントローラ９には、ＣＰＵ２が発行するＰＩＯリクエストの所定の数分のデータ領域が使用されないため、無駄なデータ領域があるという問題がある。【００１５】
本発明は、１つの側面では、無駄なデータ領域をなくしたＩＯコントローラすなわちデータ転送装置を提供することを目的とする。
【課題を解決するための手段】
【００１６】
本願の開示するデータ転送装置は、１つの態様において、ＩＯ装置を制御するＩＯデバイスコントローラと演算処理装置との間でデータを転送するデータ転送装置である。前記データ転送装置は、前記ＩＯデバイスコントローラ若しくは自装置へ書き込むライトデータ、又は、前記ＩＯデバイスコントローラ若しくは自装置から読み出したリードデータを、前記演算処理装置が完了せずに発行できる要求の最大数と等しい数のデータエントリのいずれかに記憶するデータバッファを有する。また、前記データ転送装置は、前記最大数と等しい数の要求を一意に識別する識別情報を含むライト要求を前記演算処理装置から受信した際にライト要求を示すコマンドを入力バッファに含まれる複数の入力エントリのうち前記識別情報に基づく入力エントリに格納すると共にライトデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納する入力バッファ部を有する。また、前記データ転送装置は、前記演算処理装置からの前記識別情報を含むリード要求に基づいて前記ＩＯデバイスコントローラ又は自装置から読み出されたリードデータを複数のデータエントリのうち前記識別情報に基づくデータエントリに格納すると共にリード要求を示すコマンドを出力バッファに含まれる複数の出力エントリのうち前記識別情報に基づく出力エントリに格納する出力バッファ部を有する。
【発明の効果】
【００１７】
１実施態様によれば、データ転送装置から無駄なデータ領域をなくすことができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、実施例に係る情報処理装置の構成を示す図である。
【図２】図２は、ＩＯコントローラの構成を示す図である。
【図３】図３は、リードリクエストのパケットフォーマットの一例を示す図である。
【図４】図４は、ライトリクエストのパケットフォーマットの一例を示す図である。
【図５】図５は、コマンドの割り当て例を示す図である。
【図６】図６は、リード完了のパケットフォーマットの一例を示す図である。
【図７】図７は、ライト完了のパケットフォーマットの一例を示す図である。
【図８】図８は、実施例に係るＩＯコントローラによる処理のフローを示すフローチャートである。
【図９】図９は、従来のＩＯコントローラの一例を示す図である。
【発明を実施するための形態】
【００１９】
以下に、本願の開示するデータ転送装置、情報処理装置及びＩＯ制御方法の実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。
【実施例】
【００２０】
まず、実施例に係る情報処理装置の構成について説明する。図１は、実施例に係る情報処理装置の構成を示す図である。図１に示すように、情報処理装置１は、ＣＰＵ２と、メモリーコントローラ３と、メモリー４と、ＩＯコントローラ５と、ＩＯデバイスコントローラ６と、インターコネクト７とを有する。【００２１】
ＣＰＵ２は、メモリー４に記憶されたプログラムを読み出して実行する中央処理装置である。メモリーコントローラ３は、メモリー４へのデータの書き込み、メモリー４からのプログラム及びデータの読み出しを制御する制御装置である。メモリー４は、プログラムやデータを記憶するＲＡＭ（Random  Access  Memory）である。【００２２】
ＩＯコントローラ５は、ＣＰＵ２及びメモリー４とＩＯデバイスコントローラ６とを接続するホストバスブリッジであり、ＣＰＵ２及びメモリー４とＩＯデバイスコントローラ６との間でデータを転送するデータ転送装置である。【００２３】
ＩＯコントローラ５は、ＩＯデバイスコントローラ６又は自装置からのデータの読み出し、及び、ＩＯデバイスコントローラ６又は自装置へのデータの書き込みを制御する。ＩＯコントローラ５は、インターコネクト７経由でＣＰＵ２からＰＩＯリクエストを受信し、ＰＩＯリクエストで要求された処理を完了すると、ＣＰＵ２にＰＩＯ完了を返信する。【００２４】
ＩＯデバイスコントローラ６は、ＩＯデバイスを制御する制御装置であり、例えば、ハードディスクコントローラ、ＬＡＮ（Local  Area  Network）コントローラである。インターコネクト７は、ＣＰＵ２とメモリーコントローラ３とＩＯコントローラ５とを相互に接続する装置である。【００２５】
ＣＰＵ２、メモリーコントローラ３、ＩＯコントローラ５、ＩＯデバイスコントローラ６及びインターコネクト７は、ＳｏＣ（System  on  Chip）に含まれ、チップの内部バスによって接続される。【００２６】
次に、ＩＯコントローラ５の構成について説明する。図２は、ＩＯコントローラ５の構成を示す図である。図２に示すように、ＩＯコントローラ５は、入力バッファ部５１と、振り分け部５２と、レジスタ部５３と、調停部５４と、出力バッファ部５５と、データバッファ部５６とを有する。【００２７】
入力バッファ部５１は、ＣＰＵ２が発行したＰＩＯリクエストをインターコネクト７経由で受け取り、ＰＩＯリクエストに含まれるコマンド及びアドレスを入力バッファ５１ａに格納する。【００２８】
図３及び図４は、ＰＩＯリクエストのパケットフォーマットの一例を示す図である。図３は、ＩＯコントローラ５又はＩＯデバイスコントローラ６からのデータ読み出し要求であるリードリクエストを示し、図４は、ＩＯコントローラ５又はＩＯデバイスコントローラ６へのデータ書き込み要求であるライトリクエストを示す。また、図３及び図４において、［ｎ：０］は、ビット０からビットｎまでのｎ＋１ビットであることを示す。【００２９】
図３に示すように、リードリクエストは、４ビットのコマンドと、１６ビットのタグと、４ビットのｒｓｖと、４０ビットのアドレスを含む６４ビットデータであり、１サイクルで送られる。【００３０】
コマンドは、パケットがＰＩＯリクエストであるかＰＩＯ完了であるか、及び、パケットがリードに関するものであるかライトに関するものであるかを示す。図５は、コマンドの割り当て例を示す図である。図５に示すように、「００００」はパケットがリードリクエストであることを示し、「００１１」はパケットがライトリクエストであることを示し、「１００１」はパケットがリード完了であることを示し、「１０１０」はパケットがライト完了であることを示す。【００３１】
他の値は、reserved、すなわち将来の拡張用にキープされている。また、リードリクエスト及びライト完了には付属するデータはなく、ライトリクエスト及びリード完了には付属するデータがある。【００３２】
コマンド[３:０]のビット０はデータの有無を示し、ビット１はリードであるかライトであるかを示し、ビット３はリクエストであるか完了であるかを示す。ＩＯコントローラ５は、このビットの割り当てを用いてデータの有無などを判断する。【００３３】
タグは、ＰＩＯリクエストごとに割り当てられるユニークな識別子である。タグはＤＭＡ（Direct  Memory  Access）リクエストとパケットフォーマットを揃えるために１６ビットのビット幅を有する。【００３４】
タグは、リードリクエストとライトリクエストごとに別個の割当空間を有するものではなく、リードリクエストとライトリクエストで同じ割当空間を共有している。すなわち、同じタグを有する異なるＰＩＯリクエストは、リードリクエストとライトリクエストの両方を含めて、存在しない。【００３５】
そこで、ＩＯコントローラ５は、インターコネクト７から受信したＰＩＯリクエストを入力バッファ５１ａに格納するときのエントリ番号及びＰＩＯ完了を返信するときの出力バッファに格納するときのエントリ番号としてタグを使用する。なお、出力バッファについては後述する。【００３６】
ＣＰＵ２は、ＰＩＯ完了を受信していないＰＩＯリクエストの数が一定数になるまでＰＩＯリクエストを発行する。この一定数を、ここでは、ＰＩＯの最大outstanding数と呼ぶこととする。【００３７】
入力バッファ部５１は、デッドロックを排除するためと、インターコネクト７、ＩＯデバイスコントローラ６、内部のレジスタ部５３での処理の混雑により遅延が発生する可能性があるため、最大outstanding数のエントリを有する。【００３８】
アドレスは、ＩＯコントローラ内又はＩＯデバイスコントローラ内でリード又はライトの対象となるレジスタの場所を示す。アドレスによりレジスタがＩＯコントローラ内にあるのかＩＯデバイスコントローラ内にあるのかが判定される。ｒｓｖは、将来の拡張用にキープされているビットである。【００３９】
また、図４に示すように、ライトリクエストは、４ビットのコマンドと、１６ビットのタグと、４ビットのｒｓｖと、４０ビットのアドレスと、６４ビットのデータを含む１２８ビットデータであり、２サイクルで送られる。６４ビットのデータは、アドレスで指定されるレジスタに書き込まれるデータである。【００４０】
図２に戻って、入力バッファ部５１は、ＰＩＯリクエストがライトリクエストである場合には、２サイクル目で送られてくるデータをタグと共にデータバッファ部５６に渡す。また、入力バッファ部５１は、入力バッファ５１ａに格納したコマンド及びアドレスを格納した順番で取り出し、振り分け部５２にタグと共に渡す。このとき、ＰＩＯリクエストがライトリクエストである場合には、入力バッファ部５１は、データバッファ部５６から対応するデータを受け取り、振り分け部５２に渡す。【００４１】
振り分け部５２は、ＰＩＯリクエストをレジスタ部５３とＩＯデバイスコントローラ６に振り分ける処理を行う。すなわち、振り分け部５２は、入力バッファ部５１から受け取ったアドレスに基づいてＰＩＯリクエストの対象となるレジスタが内部にあるかＩＯデバイスコントローラ６にあるかを判定し、内部にある場合には、コマンドとアドレスとタグをレジスタ部５３に渡す。一方、ＰＩＯリクエストの対象となるレジスタがＩＯデバイスコントローラ６にある場合には、振り分け部５２は、コマンドとアドレスとタグをＩＯデバイスコントローラ６に渡す。【００４２】
また、ＰＩＯリクエストがライトリクエストである場合には、振り分け部５２は、入力バッファ部５１から受け取ったデータをアドレスに基づいてレジスタ部５３又はＩＯデバイスコントローラ６に渡す。【００４３】
レジスタ部５３は、ＣＰＵ２から読み出しの対象及び書き込みの対象となるレジスタ５３ａを有し、入力バッファ部５１から受け取ったコマンド及びアドレスに基づいて、レジスタ５３ａからのデータの読み出し又はレジスタ５３ａへのデータの書き込みを行う。【００４４】
また、レジスタ部５３は、レジスタ５３ａからデータを読み出した場合には、読み出したデータをコマンド及びタグと共にＰＩＯ完了として調停部５４に渡し、レジスタ５３ａへデータを書き込んだ場合には、コマンド及びタグをＰＩＯ完了として調停部５４に渡す。【００４５】
図６及び図７は、ＰＩＯ完了のパケットフォーマットの一例を示す図である。図６は、ＩＯコントローラ５又はＩＯデバイスコントローラ６からのデータ読み出し完了であるリード完了を示し、図７は、ＩＯコントローラ５又はＩＯデバイスコントローラ６へのデータ書き込み完了であるライト完了を示す。【００４６】
図６に示すように、リード完了は、４ビットのコマンドと、１６ビットのタグと、４４ビットのｒｓｖと、６４ビットのデータを含む１２８ビットデータであり、２サイクルで送られる。６４ビットのデータは、リードリクエストのアドレスで指定されたレジスタから読み出されたデータである。また、図７に示すように、ライト完了は、４ビットのコマンドと、１６ビットのタグと、４４ビットのｒｓｖを含む６４ビットデータであり、１サイクルで送られる。【００４７】
ＰＩＯリクエストは、レジスタ部５３又はＩＯデバイスコントローラ６で処理された後はＰＩＯ完了と呼ばれる。なお、図２では、８個のレジスタ５３ａを示すが、レジスタ部５３は任意の数のレジスタ５３ａを有することができる。【００４８】
調停部５４は、レジスタ部５３又はＩＯデバイスコントローラ６から送信されたＰＩＯ完了を調停して、出力バッファ部５５に渡す。【００４９】
出力バッファ部５５は、調停部５４から受け取ったＰＩＯ完了に含まれるコマンドを出力バッファ５５ａに格納し、ＰＩＯ完了にデータが含まれる場合には、データをデータバッファ部５６にタグと共に渡す。出力バッファ５５ａは、最大outstanding数のエントリを有し、タグで指定されるエントリにコマンドを格納する。【００５０】
また、出力バッファ部５５は、インターコネクト７に送信可能になったときに、出力バッファ５５ａからコマンドを取り出し、タグと共にＰＩＯ完了としてインターコネクト７に返信する。出力バッファ部５５は、コマンドがリードである場合には、データバッファ部５６からデータを読み出して、コマンド及びタグと共にデータをインターコネクト７に返信する。出力バッファ部５５は、格納した順番に出力バッファ５５ａからコマンドを取り出してインターコネクト７に返信する。【００５１】
データバッファ部５６は、入力バッファ部５１又は出力バッファ部５５からデータ及びタグを受け取り、データバッファ５６ａの中でタグで指定されるエントリにデータを格納する。【００５２】
また、データバッファ部５６は、入力バッファ部５１又は出力バッファ部５５からタグを受け取り、データバッファ５６ａの中のタグで指定されるエントリからデータを読み出して入力バッファ部５１又は出力バッファ部５５に渡す。【００５３】
このように、ＩＯコントローラ５は、ライトデータとリードデータをデータバッファ５６ａに格納する。したがって、ライトデータを入力バッファ５１ａに格納してリードデータを出力バッファ５５ａに格納する場合と比較して、ＩＯコントローラ５は、データの格納に必要な領域を半減することができる。【００５４】
なお、データバッファ５６ａは、フリップフロップ（ＦＦ）、ＳＲＡＭ（Static  ＲＡＭ）、レジスタファイル等の任意の記憶素子で構成することができる。また、データバッファ５６ａは最大outstanding数のエントリを有する。図２では、最大outstanding数が４である場合を示したが、最大outstanding数は任意の整数とすることができる。【００５５】
次に、実施例に係るＩＯコントローラ５による処理のフローについて説明する。図８は、実施例に係るＩＯコントローラ５による処理のフローを示すフローチャートである。図８に示すように、ＩＯコントローラ５は、ＰＩＯリクエストをインターコネクト７から受信する（ステップＳ１）。【００５６】
そして、ＩＯコントローラ５の入力バッファ部５１が、ＰＩＯリクエストのコマンドを解析して、コマンド、アドレスを入力バッファ５１ａに格納し、ライトリクエストの場合は、データをデータバッファ５６ａに格納する（ステップＳ２）。【００５７】
そして、振り分け部５２が、アドレスの示すレジスタがＩＯコントローラ内か否かを判定する（ステップＳ３）。その結果、レジスタがＩＯコントローラ内でない場合には、振り分け部５２はＩＯデバイスコントローラ６に処理を指示し、処理を完了したＩＯデバイスコントローラ６から調停部５４がＰＩＯ完了を受信する（ステップＳ７）。そして、調停部５４は、ステップＳ８に進む。【００５８】
一方、アドレスの示すレジスタがＩＯコントローラ内である場合には、レジスタ部５３がＰＩＯリクエストのコマンドがリード又はライトかを判定する（ステップＳ４）。そして、リードである場合には、レジスタ部５３は、レジスタ５３ａからリードし、データ付きＰＩＯ完了を調停部５４に送信する（ステップＳ５）。一方、ＰＩＯリクエストのコマンドがライトである場合には、レジスタ部５３は、レジスタ５３ａへライトし、データ無しＰＩＯ完了を調停部５４に送信する（ステップＳ６）。【００５９】
そして、調停部５４は、ＰＩＯ完了を調停し（ステップＳ８）、出力バッファ部５５が、ＰＩＯ完了のコマンドを解析して、コマンドを出力バッファ５５ａに格納し、リードリクエストの場合はデータをデータバッファ５６ａに格納する（ステップＳ９）。そして、出力バッファ部５５は、ＰＩＯ完了をインターコネクト７に返信する（ステップＳ１０）。【００６０】
上述してきたように、実施例では、入力バッファ部５１は、コマンド及びアドレスを入力バッファ５１ａに格納し、ライトデータをデータバッファ５６ａに格納する。また、出力バッファ部５５は、コマンドを出力バッファ５５ａに格納し、リードデータをデータバッファ５６ａに格納する。すなわち、入力バッファ部５１と出力バッファ部５５がデータバッファ５６ａを共用する。したがって、ＩＯコントローラ５は、従来と比較してデータ格納領域を半減することができ、消費電力を低減することができる。【００６１】
また、実施例では、入力バッファ部５１、出力バッファ部５５及びデータバッファ部５６は、それぞれ入力バッファ５１ａ、出力バッファ５５ａ及びデータバッファ５６ａにデータを格納する場合に、ＰＩＯリクエストに含まれるタグをエントリ番号として使用する。したがって、ＩＯコントローラ５は、最大outstanding数のエントリを各バッファに設けることにより、バッファに空きがなくなることを防ぐことができる。【００６２】
また、実施例では、振り分け部５２がＰＩＯリクエストに含まれるアドレスに基づいてＰＩＯリクエストをＩＯデバイスコントローラ６と自装置に振り分ける。したがって、ＣＰＵ２は、ＩＯコントローラ５とＩＯデバイスコントローラ６を同じように制御することができる。
【符号の説明】
【００６３】
１    情報処理装置
２    ＣＰＵ
３    メモリーコントローラ
４    メモリー
５，９    ＩＯコントローラ
６    ＩＯデバイスコントローラ
７    インターコネクト
５１，９１    入力バッファ部
５１ａ    入力バッファ
５２    振り分け部
５３    レジスタ部
５３ａ    レジスタ
５４    調停部
５５，９３    出力バッファ部
５５ａ    出力バッファ
５６    データバッファ部
５６ａ    データバッファ
９２    コマンド処理部
【図１】
0006037029.tif 000002
【図２】
0006037029.tif 000003
【図３】
0006037029.tif 000004
【図４】
0006037029.tif 000005
【図５】
0006037029.tif 000006
【図６】
0006037029.tif 000007
【図７】
0006037029.tif 000008
【図８】
0006037029.tif 000009
【図９】
0006037029.tif 000010