(57)【要約】【課題】  アクセスレイテンシの増加を抑制することが可能なメモリコントロールアダプタを提供することを目的とする。【解決手段】  アップロード方向のダイレクトメモリアクセス開始の際、ＣＰＵがバッファメモリ１４のどの位置からデータを取り出すか指定する、リードポインタレジスタを設定する。このリードポイントレジスタの設定は、ＰＣＩバスからＩ／Ｆ変換／解析部２２を介してレジスタ群１６に設定されるが、この時、Ｉ／Ｆ変換／解析部２２によってバッファ制御部２４にも格納する。そして、リードポインタレジスタに基づいて、バッファメモリ１４からリードバッファ２６にデータを先読みし、その後、ＣＰＵからコントロールレジスタがレジスタ群に設定されたところで、リードバッファ２６からインタフェースコントローラ１２にデータを渡す。【選択図】        図１
2005275473.tif 000002
【特許請求の範囲】
【請求項１】
各種データ処理を行う中央処理装置、外部接続される外部装置、及びデータを格納する外部記憶装置のそれぞれに対するインタフェース機能備えたインタフェースコントローラと前記中央処理装置間に接続され、前記外部記憶装置が接続されたメモリコントロールアダプタであって、
前記外部記憶装置から読み出したデータを一時保管するリードバッファと、
前記外部記憶装置から前記リードバッファへのデータ格納及び読み出しを制御するバッファ制御部と、
前記中央処理装置から前記インタフェースに送出される情報に対する制御を行う制御手段と、
を備え、
前記制御手段が、前記中央処理装置から前記インタフェースコントローラに送出される、前記外部記憶装置に格納されたデータの読み出すアドレスを表すリード情報を取得し、
前記バッファ制御手段が、前記リード情報に基づいて前記外部記憶装置から前記リードバッファにデータを先読みするように制御し、前記リード情報の送出後に前記中央処理装置から前記インタフェースコントローラを介して送出される、前記外部記憶装置からのデータ読み出し開始を表すコントロール情報に基づいて、前記リードバッファから前記インタフェースコントローラにデータ転送することを特徴とするメモリコントロールアダプタ。
【請求項２】
外部記憶装置に格納されたデータの外部装置への転送を行う際に、前記制御手段が前記リード情報を取得し、前記バッファ制御手段が前記リード情報に基づいて前記リードバッファにデータを先読みするように制御して、前記コントロール情報に基づいて前記リードバッファから前記インタフェースコントローラを介して外部装置へデータ転送することを特徴とする請求項１に記載のメモリコントロールアダプタ。
【請求項３】
前記中央処理装置が外部記憶装置に格納されたデータの読み出しを行う際に、前記制御手段が前記リード情報を取得し、前記バッファ制御手段が前記リード情報に基づいて前記リードバッファにデータを先読みするように制御して、前記コントロール情報に基づいて前記リードバッファから前記インタフェースコントローラを介して前記中央処理装置にデータ転送することを特徴とする請求項１又は請求項２に記載のメモリコントロールアダプタ。
【請求項４】
前記中央処理装置が外部記憶装置に格納されたデータの読み出しを行う際に、前記制御手段が前記リード情報及び前記コントロール情報を取得し、前記バッファ制御手段が前記リード情報に基づいて前記外部記憶装置に格納されたデータを読み出して、前記コントロール情報に基づいて前記中央処理装置に直接データ転送することを特徴とする請求項１又は請求項２に記載のメモリコントロールアダプタ。
【請求項５】
前記制御手段は、前記リードバッファへのデータ格納が完了するまで、前記コントロール情報の前記インタフェースコントローラへの送出を遅延することを特徴とする請求項１乃至請求項３の何れか１項に記載のメモリコントロールアダプタ。
【請求項６】
前記外部記憶装置に格納するデータを一時格納するライトバッファと、前記外部記憶装置からデータを読み出す際に、前記ライトバッファに転送対象のデータが格納されているか判定する判定手段と、を更に備え、前記判定手段によって転送対象のデータが格納されていると判定された場合に、前記バッファ制御部が前記ライトバッファに格納されたデータを前記リードバッファに書き込むように制御することを特徴とする請求項１乃至請求項５の何れか１項に記載のメモリコントロールアダプタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリコントロールアダプタにかかり、特に、ＣＰＵ（Central Processing Unit）等の中央処理装置、ＣＰＵに接続される外部装置、及びメモリバッファ等の外部記憶装置等のそれぞれに対するインタフェース機能を備えたインタフェースコントローラとＣＰＵ間に接続され、外部記憶装置が接続されるメモリコントロールアダプタに関する。
【背景技術】
【０００２】
一般的に、ＤＲＡＭ等のメモリへのデータ書き込みやデータ読み出しは、非特許文献１に記載のように、ＤＲＡＭコントローラ等のインタフェースコントローラで行われるようになっている。
【０００３】
インタフェースコントローラは、それを制御するＣＰＵのバスに直接接続されることが多かった。例として、ＭＣ６８０３０を用いたシステムの一例を図６に示す。
【０００４】
図６のインタフェースコントローラ（ＩＦＣ）４２は、ダイレクトメモリアクセス（ＤＭＡ）等の機能を備えた外部装置４０のインタフェースコントローラであり、インタフェースコントローラ４２にはバッファメモリ（例えばＳＲＡＭ：Static Random Access MemoryやＤＲＡＭ：Dynamic Random Access Memory等）１４が接続され、ダイレクトメモリアクセスを行ったデータの一次保管などに使用される。
【０００５】
インタフェースコントローラ４２のＣＰＵインタフェースは、ＭＣ６８０３０のＣＰＵバスプロトコルに準拠しており、ＭＣ６８０３０バスにて直接制御される。
【０００６】
ＣＰＵ４４は、インタフェースコントローラ４２内のレジスタ設定にて、バッファメモリ内のアドレスにデータを格納するかを指定し、ダイレクトメモリアクセスの制御を行う。また、バッファメモリに格納されたデータは、インタフェースコントローラ４２のＣＰＵインタフェースを経由して読み出しや書き込みを行う。
【０００７】
近年では、ＣＰＵバスの高速化に伴い、ＣＰＵバスに直接ターゲットデバイスを接続できるシステムは少なくなり、図７に示すような、ホストＰＣＩブリッジ（Host-PCI Bridge）４６を経由して、ＰＣＩバスインタフェースでターゲットデバイスを接続するシステムが一般的となってきている。図７は、ホストＰＣＩブリッジを経由して、ＰＣＩインタフェースでターゲットデバイスを接続するシステムにおいて、ＣＰＵ４４としてＭＰＣ７５０を用いた一例を示す。
【０００８】
この場合、インタフェースコントローラ４２とＰＣＩバス間にＰＣＩアダプタ（ＰＣＩＡＤＰ）４８を接続して、インタフェース変換を行う。但し、このような構成は部品点数が多くなり、実装やコスト面で不利となるため、最終的にはインタフェースコントローラ４２をＰＣＩアダプタ４８が吸収できるように、バッファメモリ１４はＰＣＩアダプタ４８の方に接続するような場合がある。
【０００９】
また、ＰＣＩアダプタ４８にバッファメモリ１４を接続することにより、ＰＩＣバスからＰＣＩアダプタ４８を経由して、インタフェースコントローラ４２を経由せずに直接バッファメモリへアクセスすることも可能となるため、バッファメモリへのアクセスが高速化が可能となる。
【００１０】
特に、ＰＣＩアダプタ４８のような即席の設計が必要なハードウエアは、ほとんどの場合ＦＰＧＡ（Field Programmable Gate Array）で設計されるため、基板を作り替えずにＦＰＧＡのデータを書き換えることによって、インタフェースコントローラ４２の機能をＰＣＩアダプタ４８に統合するよう設計するのが一般的である。
【非特許文献１】大島  篤著  「見てわかるパソコン解体新書」、第１版、ソフトバンクパブリッシング株式会社、２０００年７月２０日、ｐ５２−５３
【発明の開示】
【発明が解決しようとする課題】
【００１１】
ところで、ＰＣＩアダプタ４８にバッファメモリ１４を接続した場合、ＣＰＵからのバッファメモリへのアクセスの最も簡単な構成は、インタフェースコントローラ４２からのアドレス及びデータを、図８に示すように、ＰＣＩアダプタを単純にスルーする形となる。しかしながら、間に挟まるバスバッファにより、信号の遅延が増加し、リード及びライトのアクセスレイテンシの増加を招く、という問題がある。
【００１２】
また、単純にスルーするだけではなく、アドレス及びデータをＰＣＩアダプタ４８の内部にて、フリップフロップ（Flip-Flop）で一段受けて、中継する構成をとることもできるが、この場合でも、ライトのアクセスレイテンシの増加は抑えられるものの、リードのアクセスレイテンシの増加を抑えることができない、という問題がある。
【００１３】
このように、インタフェースコントローラとバッファメモリの間にＰＣＩアダプタを挟む場合には、一般的にはインタフェースコントローラからバッファメモリへのリードアクセスレイテンシが増加する。あるいはインタフェースコントローラが、バッファメモリへのアクセス速度の調整ができない仕様の場合には、このリードアクセスレイテンシの増加は致命的となる。
【００１４】
本発明は、上記問題を解決すべく成されたもので、アクセスレイテンシの増加を抑制することが可能なメモリコントロールアダプタを提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記目的を達成するために請求項１に記載の発明は、各種データ処理を行う中央処理装置、外部接続される外部装置、及びデータを格納する外部記憶装置のそれぞれに対するインタフェース機能備えたインタフェースコントローラと前記中央処理装置間に接続され、前記外部記憶装置が接続されたメモリコントロールアダプタであって、前記外部記憶装置から読み出したデータを一時保管するリードバッファと、前記外部記憶装置から前記リードバッファへのデータ格納及び読み出しを制御するバッファ制御部と、前記中央処理装置から前記インタフェースに送出される情報に対する制御を行う制御手段と、を備え、前記制御手段が、前記中央処理装置から前記インタフェースコントローラに送出される、前記外部記憶装置に格納されたデータの読み出すアドレスを表すリード情報を取得し、前記バッファ制御手段が、前記リード情報に基づいて前記外部記憶装置から前記リードバッファにデータを先読みするように制御し、前記リード情報の送出後に前記中央処理装置から前記インタフェースコントローラを介して送出される、前記外部記憶装置からのデータ読み出し開始を表すコントロール情報に基づいて、前記リードバッファから前記インタフェースコントローラにデータ転送することを特徴としている。
【００１６】
請求項１に記載の発明によれば、メモリコントロールアダプタは、メモリバッファ等の外部記憶装置から読み出したデータを一時保管するリードバッファと、リードバッファへのデータ格納及び読み出しを制御するバッファ制御部と、ＣＰＵ等の中央処理装置からインタフェースコントローラに送出される情報に対する制御を行う制御手段と、を備えている。
【００１７】
そして、インタフェースコントローラに中央処理装置から設定されるリードポインタレジスタ等のリード情報が制御手段によって取得される。
【００１８】
また、バッファ制御手段によって、取得されたリード情報に基づいてバッファメモリからリードバッファに読み出し対象のデータが先読みされるように制御される。
【００１９】
そして、インタフェースコントローラにリード情報の送出後にＣＰＵから設定されるコントロールレジスタ等のコントロール情報に基づいて、リードバッファに格納されたデータがインタフェースコントローラにデータ転送される。
【００２０】
すなわち、転送対象のデータが予めリードバッファに格納されるので、インタフェースコントローラに外部記憶装置が直接接続されているようにデータ転送を行うことができる。従って、外部記憶装置からのデータリード時のアクセスレイテンシ増加を抑制することができる。
【００２１】
例えば、請求項２に記載の発明のように、外部記憶装置に格納されたデータの外部装置への転送を行う際に、制御手段がリード情報を取得して、バッファ制御手段がリード情報に基づいてリードバッファにデータを先読みするように制御し、コントロール情報に基づいてリードバッファからインタフェースコントローラを介して外部装置へデータ転送するようにしてもよいし、請求項３に記載の発明のように、中央処理装置が外部記憶装置に格納されたデータの読み出しを行う際に、制御手段がリード情報を取得して、バッファ制御手段がリード情報に基づいてリードバッファにデータを先読みするように制御し、コントロール情報に基づいてリードバッファからインタフェースコントローラを介して中央処理装置にデータ転送するようにしてもよい。
【００２２】
また、中央処理装置が外部記憶装置に格納されたデータの読み出しを行う際には、請求項４に記載の発明のように、制御手段がリード情報及びコントロール情報を取得して、バッファ制御手段がリード情報に基づいて外部記憶装置に格納されたデータを読み出し、コントロール情報に基づいて中央処理装置に直接データ転送するようにしてもよい。すなわち、インタフェースコントローラを介在しないでデータ転送を行うようにしてもよく、これによっても、外部記憶装置からのデータリード時のアクセスレイテンシ増加を抑制することができる。
【００２３】
なお、制御手段は、請求項５に記載の発明のように、リードバッファへのデータ格納が完了するまで、コントロール情報のインタフェースコントローラへの送出を遅延することで、リードバッファへのデータ格納完了とリードバッファに格納されたデータの読み出し開始との同期を取ることができ、アクセス速度の違いによって発生する問題を解消することができる。
【００２４】
また、メモリコントロールアダプタは、請求項６に記載の発明のように、外部記憶装置に格納するデータを一時格納するライトバッファと、外部記憶装置からデータを読み出す際に、ライトバッファに転送対象のデータが格納されているか否かを判定する判定手段を更に備えて、判定手段によって転送対象のデータがライトバッファに格納されていると判定された場合に、バッファ制御手段がライトバッファに格納された転送対象のデータをリードバッファに書き込むように制御するようにしてもよい。これによってダウンロード直後等のように未だライトバッファにデータが残っている状態で、アップロード等のデータ読み出しが行われた時でも直ぐに外部記憶装置からデータを読み出すことができ、アクセスレイテンシ増加を抑制することができる。
【発明の効果】
【００２５】
以上説明したように本発明によれば、メモリコントロールアダプタにリードバッファを設けて先読みするように制御することで、アクセスレイテンシの増加を抑制することができる、という効果がある。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照して本発明の実施の形態の一例を詳細に説明する。
【００２７】
図１は、本発明の実施の形態に係わるメモリコントロールアダプタとしてのＰＣＩアダプタ及びインタフェースコントローラの構成を示すブロック図である。
【００２８】
ＰＣＩアダプタ（ＰＣＩＡＤＰ）１０及びインタフェースコントローラ（ＩＦＣ）１２は、図７にしたように、ＣＰＵ４４に接続されたホストＰＣＩブリッジ４６を介してＰＣＩバスに接続されている。なお、ホストＰＣＩブリッジ４６には、ＲＯＭ４３及びＲＡＭ４５も接続されている。
【００２９】
インタフェースコントローラ１２は、後段に接続されるダイレクトメモリアクセス機能等を備えた外部装置４０のインタフェースコントローラとして機能し、インタフェースコントローラ１２とＰＣＩバスの間にＣＰＵバスを介してＰＣＩアダプタ１０が接続され、ＰＣＩアダプタ１０にメモリバッファ１４が接続されている。
【００３０】
インタフェースコントローラ１２は、ＣＰＵ４４に対するレジスタ群１６を有する。レジスタ群１６は、例えば、ダウンロード方向のダイレクトメモリアクセスの際に、バッファメモリ１４のどの場所にデータを格納するかを指定するライトポインタレジスタ、バッファメモリ１４のどの場所からデータを読み出すかを指定するリードポイントレジスタ、及びダイレクトメモリアクセスの開始や転送方向を指定するコマンドレジスタ等が設定される。
【００３１】
また、インタフェースコントローラ１２は、Ｉ／Ｆ制御部１８及びダイレクトメモリアクセス（ＤＭＡ）制御部２０を備えており、Ｉ／Ｆ制御部１８は、後段に接続される外部装置４０からのダイレクトメモリアクセス要求に対して、ＤＭＡ制御部２０を制御することによりＰＣＩアダプタ１０に接続されたメモリバッファ１４へのダイレクトメモリアクセスを制御するようになっている。
【００３２】
なお、インタフェースコントローラ１２は、ＣＰＵバスからのバッファメモリ１４へのアクセス時には、メモリまたはＦｉＦｏ（First in First out）ポートのように機能する。
【００３３】
ＰＣＩアダプタ１０は、インタフェース（Ｉ／Ｆ）変換／解析部２２、バッファ制御部２４、リードバッファ２６、及びライトバッファ２８を備えている。
【００３４】
Ｉ／Ｆ変換／解析部２２は、ＣＰＵ４４からインタフェースコントローラ１２のレジスタ群１６へ設定される、バッファメモリ１４の読み出しアドレスを指定するリードポインタレジスタの設定、バッファメモリ１４の書き込みアドレスを指定するライトポイントレジスタの設定、及びバッファメモリ１４からの読み出し開始及び書き込み開始等を表すコントロールレジスタの設定等を行うと共に、バッファ制御部２４の制御等を行う。
【００３５】
バッファ制御部２４は、ＣＰＵ４４やＤＭＡ制御部２０からのバッファメモリ１４へのアクセス要求に応じてバッファメモリ１４へのデータ書き込みやデータ読込みを行う。この時、バッファ制御部２４は、リードバッファ２６やライトバッファ２８を利用してバッファメモリ１４へのデータ書き込みやデータ読込みを行うようになっている。
【００３６】
リードバッファ２６は、バッファメモリ１４からデータを読み出す際に、リートポインタレジスタの値に対応するデータを一時格納し、ライトバッファ２８は、バッファメモリ１４にデータを書き込みを行う際に、ライトポインタレジスタの値に書き込むデータを一時格納する。なお、リードバッファ２６は、空きができるごとに随時データを先読みするものとする。
【００３７】
例えば、リードバッファ２４は、バッファ制御部２４の制御によってリードポイントレジスタの値のデータを先読みして格納し、インタフェースコントローラ１２のＤＭＡ制御部２０からバッファメモリ１４に読み出し要求がなされたとき、すなわち、ＣＰＵ４４からコントロールレジスタがレジスタ群１６に設定されたときに、リードバッファ１４に格納したデータを出力する。
【００３８】
また、ライトバッファ２８は、コンパレータ機能を備えており、バッファメモリ１４へのダウロードが行われた直後にアップロードを行う際に、リードバッファ２６が読み出すアドレスのデータが、ライトバッファ２８に未だ格納された状態が否かを判定するようになっている。なお、ライトバッファ２８のコンパレータ機能は、リードバッファ２６側に設けるようにしてもよいし、バッファ制御部２４に設けるようにしてもよい。
【００３９】
続いて、上述のように構成されたＰＣＩアダプタ及びインタフェースコントローラの動作について説明する。
【００４０】
図２は、ＰＣＩアダプタ１０及びインタフェースコントローラ１２の動作の流れの一例を示すフローチャートである。
【００４１】
ステップ１００では、Ｉ／Ｆ変換／解析部２２によってＣＰＵ４４からメモリバッファ１４へアクセスがなされたか否か判定される。該判定は、ＣＰＵ４４からＰＣＩバスを介してバッファメモリ１４からのデータの読込みが指示されたか否かをＩ／Ｆ変換／解析部２２が判定することによってなされ、該判定が否定された場合にはステップ１０２へ移行する。
【００４２】
ステップ１０２では、アップロードが指示されたか否か判定される。該判定は、Ｉ／Ｆ変換／解析部２２によってＣバッファメモリ１４に格納されたデータのアップロードがＣＰＵ４４によって指示されたか、またはバッファメモリ１４へデータを格納するダウンロードがＣＰＵ４４によって指示されたか否かを判定することによってなされ、アップロードが指示された場合に判定が肯定され、ダウンロードが指示された場合に判定が否定される。そして、該判定が肯定された場合には、ステップ１０４へ移行する。
【００４３】
ステップ１０４では、ＣＰＵ４４からインタフェースコントローラ１２のレジスタ群１６に設定されるリードポインタレジスタ設定がＩ／Ｆ変換／解析部２２によってバッファ制御部２４にも格納され、ステップ１０６へ移行する。
【００４４】
ステップ１０６では、バッファ制御部２４によって、リードポインタレジスタ設定のアドレスに対応するデータが先読みされ、リードバッファ２６に格納される。
【００４５】
次にステップ１０８では、ダウンロード直後のアップロードか否か判定され、該判定が否定された場合には、ステップ１１０へ移行する。
【００４６】
ステップ１１０では、ＣＰＵ４４からレジスタ群１６にコントロールレジスタ設定がなされたか否かＩ／Ｆ変換／解析部２２によって判定され、該判定が肯定されるまで待機してステップ１１２へ移行する。
【００４７】
ステップ１１２では、ＣＰＵ４４から設定されるレジスタ群１６へのコントロールレジスタの設定がＩ／Ｆ変換／解析部２２によって待機（遅延）され、ステップ１１４へ移行して、リードバッファ２６への格納完了がバッファ制御部２４によって監視されて、リードバッファ２６へのデータの格納が完了したところで、ステップ１１４の判定が肯定され、ステップ１１６へ移行する。
【００４８】
そして、ステップ１１６では、Ｉ／Ｆ変換／解析部２２によってレジスタ群１６へのコントロールレジスタの設定が行われ、ステップ１１８へ移行する。
【００４９】
ステップ１１８では、コントロールレジスタ設定がインタフェースコントローラ１２のレジスタ群１６に設定されることにより、リードバッファ２６からのデータの読み出しが開始され、リードバッファ２６に格納された先読みされたデータがＤＭＡ制御部２０の制御によってインタフェースコントローラ１２の後段に接続された外部装置４０にアップロードされる。
【００５０】
すなわち、アップロード方向のダイレクトメモリアクセスが開始されると、ＣＰＵ４４によって、バッファメモリ１４のどの位置からデータを取り出すか指定する、リードポインタレジスタが設定される。この時、リードポインタレジスタの設定は、ＰＣＩバスからＩ／Ｆ変換／解析部２２を介してインタフェースコントローラ１２のレジスタ群１６に書き込まれるが、この値はＩ／Ｆ変換／解析部２２によって、ＰＣＩアダプタ１０のバッファ制御部２４にも格納され、バッファ制御部２４は、リードポインタレジスタへの書き込み値を元にバッファメモリ１４からデータを先読みして、リードバッファ２６に格納する。
【００５１】
その後、ＣＰＵ４４がダイレクトメモリアクセスを起動するコントロールレジスタを設定すると、ダイレクトメモリアクセスが起動してＤＭＡ制御部２０の制御によってリードポインタレジスタで指定されるバッファメモリのデータをＰＣＩアダプタ１０に対して読み取りにくるが、この時には既に指定の値がリードバッファ２６に格納されているため、ＰＣＩアダプタ１０は即座にデータをインタフェースコントローラ１２に渡すことができる。従って、インタフェースコントローラ１２とバッファメモリ１４の間にＰＣＩアダプタ１０を挟むことによる遅延を解消することができる。
【００５２】
また、インタフェースコントローラ１２がリードバッファ２６からデータを受け取る際には、ＣＰＵ４４からのコントロールレジスタの設定によってダイレクトメモリアクセスが起動開始されてリードバッファ２６からＤＭＡ制御部２０がデータを受け取ってＩ／Ｆ制御部１８を介して後段の外部装置４０にデータのアップロードが行われるが、この時、リードバッファ２６にデータの格納が完了するまで、ＰＣＩアダプタ１０によってインタフェースコントローラ１２のレジスタ群１６へのコントロールレジスタの設定が遅延されるので、リードバッファ２６へのデータ格納完了とインタフェースコントローラ１２のデータ受け取りを同期させることができ、アクセス速度の違いによって発生する問題を解消することができる。
【００５３】
一方、ステップ１０２の判定が否定、すなわち、ダウンロードがＣＰＵ４４によって指示された場合には、ステップ１２０へ移行して、ＣＰＵ４４によってレジスタ群１６に設定されるライトポインタレジスタをＤＭＡ制御部２０からバッファ制御部２４が受け取り、ステップ１２２へ移行して、ダウンロードしたデータがＤＭＡ制御部２０を介してライトバッファ２８に格納される。
【００５４】
そして、ステップ１２４では、ライトバッファ２８にデータの格納が完了したか否かを待ってステップ１２６へ移行し、ダウンロード終了通知がＤＭＡ制御部２０になされることで、ダウンロードを終了する。そして、ステップ１２８へ移行して、バッファ制御部２４が受け取ったライトポインタレジスタに対応するバッファメモリ１４のアドレスにライトバッファ２８に格納したデータが順次格納される。
【００５５】
また、ステップ１０４の判定が肯定された場合、すなわち、ダウンロード直後のアップロードがＣＰＵ４４によって指示された場合には、ステップ１３０へ移行して、ライトバッファ２８にダウンロードしたデータがあるか否か判定される。該判定は、ライトバッファ２８のコンパレータ機能により、リードバッファ２６に格納された先頭アドレスポインタと末尾アドレスポインタを比較することで、リードバッファ２６に読み出すデータがライトバッファ２８にまだ格納された状態か否かを判定することによってなされる。すなわち、ライトバッファ２８にリードバッファ２６に読み出す先頭アドレスポインタと末尾アドレスポインタの範囲内のデータがあるか否かを判定し、該判定が否定された場合には、上述のステップ１１０へ移行して上述の処理が行われる。
【００５６】
ステップ１３０の判定が肯定された場合、すなわち、ダウンロードするデータが未だライトバッファ２８に格納された状態では、ステップ１３２へ移行して、バッファメモリ１４のデータのコヒーレンシを維持するために、サブアップロード処理が行われる。
【００５７】
ここで、上述のバッファメモリ１４のデータのコヒーレンシを指示するために行われるサブアップロード処理について詳細に説明する。図３は、サブアップロード処理の流れの一例を示すフローチャートである。
【００５８】
ステップ２００では、リードポインタレジスタに対応するデータがライトバッファ２８からリードバッファ２６に上書きされるようにバッファ制御部２４によって制御される。
【００５９】
続いて、ステップ２０２では、ＣＰＵ４４からレジスタ群１６にコントロールレジスタ設定がなされたか否かＩ／Ｆ変換／解析部２２によって判定され、該判定が肯定されるまで待機してステップ２０４へ移行する。
【００６０】
ステップ２０４では、ＣＰＵ４４から設定されるレジスタ群１６へのコントロールレジスタの設定がＩ／Ｆ変換／解析部２２によって待機され、ステップ２０６へ移行して、リードバッファ２６への格納完了がバッファ制御部２４によって監視されて、リードバッファ２６へのデータの格納が完了したところで、ステップ２０６の判定が肯定され、ステップ２０８へ移行する。
【００６１】
そして、ステップ２０８では、Ｉ／Ｆ変換／解析部２２によってレジスタ群１６へのコントロールレジスタの設定が行われ、ステップ２１０へ移行する。
【００６２】
ステップ２１０では、コントロールレジスタ設定がインタフェースコントローラ１２のレジスタ群１６に設定されることにより、リードバッファ２６からのデータの読み出しが開始され、リードバッファ２６に格納された先読みされたデータがＤＭＡ制御部２０の制御によってインタフェースコントローラ１２の後段に接続された外部装置４０にアップロードされる。
【００６３】
すなわち、ダウンロード直後にアップロードが指示された場合に、ライトバッファ２８にアップロード対象のデータがまだ残っている場合には、ライトバッファ２８のデータをリードバッファ２６に上書きするようにしているので、ダウンロード直後にまだライトバッファ２８にアップロードに対応するデータが格納されていてもアップロードを直ぐに行うことが可能となり、リードアクセスレイテンシ増加を解消することができると共に、バッファメモリ１４のデータのコヒーレンシを維持することができる。
【００６４】
ここで、図１のフローチャートに戻って説明する。
【００６５】
ステップ１００の判定が肯定、すなわち、ＣＰＵ４４からメモリバッファ１４へアクセスが行われた場合（ＣＰＵ４４からメモリバッファ１４に格納されたデータの読み出しが行われた場合）には、ステップ１３４へ移行して、ＣＰＵアクセス処理が行われる。
【００６６】
ここで、ＣＰＵアクセス処理について詳細に説明する。図４は、ＣＰＵアクセス処理の流れの一例を示すフローチャートである。
【００６７】
ステップ３００では、Ｉ／Ｆ変換／解析部２２によってＣＰＵ４４からのリードポインタレジスタがバッファ制御部２４に設定される。
【００６８】
そして、ステップ３０２では、バッファ制御部２４に設定されたリードポインタレジスタに対応するデータがバッファ制御部２４によって読み出され、Ｉ／Ｆ変換／解析部２２を介してＣＰＵ４４に出力される。
【００６９】
すなわち、インタフェースコントローラ１２を介さずに、ＣＰＵ４４からバッファメモリ１４へアクセスすることができ、高速に処理を行うことができる。
【００７０】
図５は、ＣＰＵアクセス処理の変形例の一例を示すフローチャートである。図４では、インタフェースコントローラ１２を介さずにＰＣＩアダプタ１０から直接バッファメモリ１４にアクセスするようにしたが、変形例では、インタフェースコントローラ１２を介してＣＰＵ４４からバッファメモリ１４にアクセスする場合を示す。
【００７１】
ステップ３５０では、ＣＰＵ４４からＩ／Ｆ変換／解析部２２を介してレジスタ群１６にリードポインタレジスタが設定され、ステップ３５２へ移行する。
【００７２】
ステップ３５２では、ＣＰＵ４４からインタフェースコントローラ１２のレジスタ群１６に設定されるリードポインタレジスタ設定がＩ／Ｆ変換／解析部２２によってバッファ制御部２４にも格納され、ステップ３５４へ移行する。
【００７３】
ステップ３５４では、バッファ制御部２４によって、リードポインタレジスタ設定のアドレスに対応するデータが先読みされ、リードバッファ２６に格納される。
【００７４】
次に、ステップ３５６では、ＣＰＵ４４からレジスタ群１６にコントロールレジスタ設定がなされたか否かＩ／Ｆ変換／解析部２２によって判定され、該判定が肯定されるまで待機してステップ３５８へ移行する。
【００７５】
ステップ３５８では、ＣＰＵ４４から設定されるレジスタ群１６へのコントロールレジスタの設定がＩ／Ｆ変換／解析部２２によって待機（遅延）され、ステップ３６０へ移行して、リードバッファ２６への格納完了がバッファ制御部２４によって監視されて、リードバッファ２６へのデータの格納が完了したところで、ステップ３６０の判定が肯定され、ステップ３６２へ移行する。
【００７６】
ステップ３６２では、Ｉ／Ｆ変換／解析部２２によってレジスタ群１６へのコントロールレジスタの設定が行われ、ステップ３６４へ移行する。
【００７７】
そして、ステップ３６４では、コントロールレジスタ設定がインタフェースコントローラ１２のレジスタ群１６に設定されることにより、リードバッファ２６からのデータの読み出しが開始され、リードバッファ２６に格納された先読みされたデータがＤＭＡ制御部２４の制御によってＣＰＵ４４に送出される。
【００７８】
すなわち、上述したインタフェースコントローラ１２の後段に接続された外部装置４０にアップロードするとき（ステップ１０４〜１１８）のように、ＣＰＵ４４からのアクセスについても処理することもでき、これによってもリードアクセスレイテンシ増加を解消することができる。
【００７９】
以上説明したように、本実施形態によれば、ＰＣＩアダプタ１０にリードバッファ２６を設けて、データの先読みを行うようにバッファ制御すると共に、リードバッファ２６にデータが格納された時点で読み出しするようにバッファ制御することで、汎用バス（ＰＣＩバス）接続するＰＣＩアダプタ１０を設計し、インタフェースコントローラ１２に接続されていたバッファメモリ１４をＰＣＩアダプタ１０側に接続する際に発生する、メモリアクセスレイテンシ増加やアクセス速度制限の問題を解消することができる。
【図面の簡単な説明】
【００８０】
【図１】本発明の実施の形態に係わるメモリコントロールアダプタとしてのＰＣＩアダプタ及びインタフェースコントローラの構成を示すブロック図である。
【図２】ＰＣＩアダプタ及びインタフェースコントローラの動作の流れの一例を示すフローチャートである。
【図３】サブアップロード処理の流れの一例を示すフローチャートである。
【図４】ＣＰＵアクセス処理の一例を示すフローチャートである。
【図５】ＣＰＵアクセス処理の変形例の一例を示すフローチャートである。
【図６】インタフェースコントローラがＣＰＵのバスに直接接続された従来例を示す図である。
【図７】ホストＰＣＩブリッジを経由して、ＰＣＩインタフェースでターゲットデバイスを接続するシステムにおいて、ＣＰＵとしてＭＰＣ７５０を用いた一例を示す。
【図８】ＰＣＩアダプタにバッファメモリを接続した場合の最も簡単な従来の構成を示す図である。
【符号の説明】
【００８１】
１０    ＰＣＩアダプタ
１２    インタフェースコントローラ
１４    バッファメモリ
２２    Ｉ／Ｆ変換／解析部
２４    バッファ制御部
２６    リードバッファ
２８    ライトバッファ
【図１】
2005275473.tif 000003
【図２】
2005275473.tif 000004
【図３】
2005275473.tif 000005
【図４】
2005275473.tif 000006
【図５】
2005275473.tif 000007
【図６】
2005275473.tif 000008
【図７】
2005275473.tif 000009
【図８】
2005275473.tif 000010