(57)【要約】【課題】ヘッダとデータとを区別したフロー制御を実現でき、かつフロー制御情報を最適なタイミングで送信デバイスに送信する。【解決手段】受信フローコントロール更新部１０３は、受信バッファ１０１から出力されたTLPに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済みのヘッダのサイズおよび処理済みのデータのサイズをそれぞれ計数する。処理済みのヘッダのサイズに対応するクレジット数が、ソフトウェアによって設定されるヘッダ用更新クレジット数に達した場合、あるいは処理済みのデータのサイズに対応するクレジット数が、ソフトウェアによって設定されるデータ用更新クレジット数に達した場合、受信フローコントロール更新部１０３は、更新フローコントロール情報を更新フローコントロールDLLP（UpdateFC DLLP）を用いて相手デバイスに送信する。【選択図】      図３
2005332250.tif 000002
【特許請求の範囲】
【請求項１】
第１のデバイスと、
前記第１のデバイスとの通信を実行する第２のデバイスと、
前記第２のデバイスに設けられ、前記第１のデバイスから送信されるパケットを保持する受信バッファであって、前記パケットは、ヘッダおよび可変長のデータを含むパケットおよびヘッダを含みデータを含まないパケットのいずれかである受信バッファと、
前記第２のデバイスに設けられ、前記受信バッファから出力されたパケットに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済みのヘッダのサイズを示す第１の値および処理済みのデータのサイズを示す第２の値をそれぞれ計数する計数手段と、
前記第２のデバイスに設けられ、前記第１の値および前記第２の値の少なくとも一方が、前記第１の値および前記第２の値それぞれに対応する基準値に達した場合、前記第２のデバイスが受信可能なヘッダおよびデータそれぞれのサイズを示すフローコントロール情報を前記第１のデバイスに送信するフローコントロール情報送信手段とを具備することを特徴とするデータ処理装置。
【請求項２】
前記計数手段は、前記第１の値および前記第２の値を、所定サイズのクレジットを単位としてそれぞれ計数する手段を含むことを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記フローコントロール情報の前回の送信からの経過時間を測定するタイマをさらに具備し、
前記フローコントロール情報送信手段は、
前記第１の値および前記第２の値の少なくとも一方が前記第１の値および前記第２の値それぞれに対応する基準値に達すること、および前記フローコントロール情報の前回の送信からの経過時間が所定時間に達すること、のいずれかの条件が成立したことに応答して、前記フローコントロール情報を前記第１のデバイスに送信する手段を含むことを特徴とする請求項１記載のデータ処理装置。
【請求項４】
前記第２のデバイスに設けられ、前記受信バッファから出力されたパケットが、ポステッドリクエストパケット、ノンポステッドリクエストパケット、およびコンプリションパケットのいずれのパケットタイプであるかを判別する手段をさらに具備し、
前記計数手段は、前記パケットタイプ毎に、前記第１の値および前記第２の値を計数する手段を含むことを特徴とする請求項１記載のデータ処理装置。
【請求項５】
他のデバイスとの通信を実行するデバイスであって、
前記他のデバイスから送信されるパケットを保持する受信バッファであって、前記パケットは、ヘッダおよび可変長のデータを含むパケットおよびヘッダを含みデータを含まないパケットのいずれかである受信バッファと、
前記受信バッファから出力されたパケットに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済みのヘッダのサイズを示す第１の値および処理済みのデータのサイズを示す第２の値をそれぞれ計数する計数手段と、
前記第１の値および前記第２の値の少なくとも一方が、前記第１の値および前記第２の値それぞれに対応する基準値に達した場合、受信可能なヘッダおよびデータそれぞれのサイズを示すフローコントロール情報を前記他のデバイスに送信するフローコントロール情報送信手段とを具備することを特徴とするデバイス。
【請求項６】
前記フローコントロール情報の前回の送信からの経過時間を測定するタイマをさらに具備し、
前記フローコントロール情報送信手段は、
前記第１の値および前記第２の値の少なくとも一方が前記第１の値および前記第２の値それぞれに対応する基準値に達すること、および前記フローコントロール情報の前回の送信からの経過時間が所定時間に達すること、のいずれかの条件が成立したことに応答して、前記フローコントロール情報を前記他のデバイスに送信する手段を含むことを特徴とする請求項５記載のデバイス。
【請求項７】
前記受信バッファから出力されたパケットが、ポステッドリクエストパケット、ノンポステッドリクエストパケット、およびコンプリションパケットのいずれのパケットタイプであるかを判別する手段をさらに具備し、
前記計数手段は、前記パケットタイプ毎に、前記第１の値および前記第２の値を計数する手段を含むことを特徴とする請求項５記載のデバイス。
【請求項８】
第１のデバイスから第２のデバイスに設けられた受信バッファへのパケットの流れを制御するためのフロー制御を実行するフロー制御方法であって、
前記パケットは、ヘッダおよび可変長のデータを含むパケットおよびヘッダを含みデータを含まないパケットのいずれかであり、
前記受信バッファから出力されたパケットに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済みのヘッダのサイズを示す第１の値および処理済みのデータのサイズを示す第２の値をそれぞれ計数する計数ステップと、
前記第１の値および前記第２の値の少なくとも一方が、前記第１の値および前記第２の値それぞれに対応する基準値に達した場合、前記第２のデバイスが受信可能なヘッダおよびデータそれぞれのサイズを示すフローコントロール情報を前記第２のデバイスから前記第１のデバイスに送信するフローコントロール情報送信ステップとを具備することを特徴とするフロー制御方法。
【請求項９】
前記フローコントロール情報の前回の送信からの経過時間を測定するステップをさらに具備し、
前記フローコントロール情報送信ステップは、
前記第１の値および前記第２の値の少なくとも一方が前記第１の値および前記第２の値それぞれに対応する基準値に達すること、および前記フローコントロール情報の前回の送信からの経過時間が所定時間に達すること、のいずれかの条件が成立したことに応答して、前記フローコントロール情報を前記第２のデバイスから前記第１のデバイスに送信するステップを含むことを特徴とする請求項８記載のフロー制御方法。
【請求項１０】
前記受信バッファから出力されたパケットが、ポステッドリクエストパケット、ノンポステッドリクエストパケット、およびコンプリションパケットのいずれのパケットタイプであるかを判別するステップをさらに具備し、
前記計数ステップは、前記パケットタイプ毎に、前記第１の値および前記第２の値を計数するステップを含むことを特徴とする請求項８記載のフロー制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ、通信装置のようなデータ処理装置および同装置で用いられるフロー制御方法に関する。
【背景技術】
【０００２】
近年、コンピュータ、通信装置、オーディオ・ビデオ機器のようなデータ処理装置においては、PCI EXPRESSと称される第３世代汎用Ｉ／Ｏ相互接続インタフェースが注目されている。PCI EXPRESSは、シリアルインターフェースを介してデバイス間を相互接続するための規格であり、ＰＣＩ  ＳＩＧ（Peripheral Component Interconnect Special Interest Group）によって規定されている。PCI EXPRESSの規格においては、デバイス間の情報の伝送はパケットを用いて実行される。メモリライトリクエスト、メモリリードリクエスト、Ｉ／Ｏライトリクエスト、Ｉ／Ｏリードリクエスト、のような様々なトランザクションに対応するために、ヘッダおよび可変長のデータを含むパケットのみならず、ヘッダのみを含みデータを含まないパケットも利用される。例えば、メモリリードを要求するメモリリードリクエストパケット、およびＩ／Ｏリードを要求するＩ／Ｏリードリクエストパケットは、それぞれヘッダのみから構成される。
【０００３】
また、PCI EXPRESSの規格においては、クレジットベースのフロー制御が用いられる。クレジットベースのフロー制御においては、受信デバイス内の有効な受信バッファのサイズを示すクレジットがフロー制御情報として受信デバイスから送信デバイスに予め通知される。送信デバイスは、クレジットで指定されるサイズ分の情報を送信することができる。PCI EXPRESSの規格においては、クレジットを送信するための制御方法として、例えばタイマを用いることによって、定期的に受信デバイスから送信デバイスにクレジットを送信することが例示されている。
【０００４】
しかし、この方法では、送信デバイスが受信デバイスから与えられたクレジットの数に余裕があり情報の送信に不自由しない期間中においても、タイマの値があるタイムアウト時間に達するたびに、クレジットが受信デバイスから送信デバイスに送信されてしまう。このため、デバイス間の通信帯域が無駄なクレジットの伝送によって消費されることになる。タイムアウト時間の値が小さいほど、クレジットの伝送によって消費される帯域は大きくなる。逆にタイムアウト時間があまりに大きな値に設定されていると、送信デバイスがクレジット不足に陥り、情報を受信デバイスに送信できなくなるという事態が発生する。
【０００５】
また、受信バッファにある一定の空きが発生するたびに、その空きサイズを示すクレジットを送信デバイスに送信するというフロー制御技術も知られている（例えば、特許文献１参照）。送信デバイスは、受け取ったクレジットに対応する数のパケットを送信することができる。
【特許文献１】特開平９−２０５４４２号公報（段落０００７）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、特許文献１のフロー制御は、固定長のパケットを使用するＡＴＭネットワークに対応するものであり、またそのフロー制御はヘッダとデータとを区別していない。
【０００７】
ヘッダと可変長のデータを含むパケットと、ヘッダのみから構成されるパケットとが使用されるシステムにおいては、大きなサイズのデータを伴うパケットによって受信バッファが専有されてしまうことを防止するために、ヘッダとデータとを区別したフロー制御を実現することが必要である。
【０００８】
本発明は上述の事情を考慮してなされたものであり、ヘッダとデータとを区別したフロー制御を実現でき、かつフロー制御情報を最適なタイミングで送信デバイスに送信することが可能なデータ処理装置およびフロー制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述の課題を解決するため、本発明のデータ処理装置は、第１のデバイスと、前記第１のデバイスとの通信を実行する第２のデバイスと、前記第２のデバイスに設けられ、前記第１のデバイスから送信されるパケットを保持する受信バッファであって、前記パケットは、ヘッダおよび可変長のデータを含むパケットおよびヘッダを含みデータを含まないパケットのいずれかである受信バッファと、前記第２のデバイスに設けられ、前記受信バッファから出力されたパケットに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済みのヘッダのサイズを示す第１の値および処理済みのデータのサイズを示す第２の値をそれぞれ計数する計数手段と、前記第２のデバイスに設けられ、前記第１の値および前記第２の値の少なくとも一方が、前記第１の値および前記第２の値それぞれに対応する基準値に達した場合、前記第２のデバイスが受信可能なヘッダおよびデータそれぞれのサイズを示すフローコントロール情報を前記第１のデバイスに送信するフローコントロール情報送信手段とを具備することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、ヘッダとデータとを区別したフロー制御を実現でき、かつフロー制御情報を最適なタイミングで送信デバイスに送信することが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、図面を参照して本発明の実施形態を説明する。  
図１には、本発明の一実施形態に係るデータ処理装置のシステム構成が示されている。このデータ処理装置１は、例えば、コンピュータ、通信装置、またはオーディオ・ビデオ機器として機能する。以下では、データ処理装置１がコンピュータとして実現されている場合を想定する。
【００１２】
このデータ処理装置１は、図示のように、ＣＰＵ（Central Processing Unit）１１、ホストブリッジ１２、主メモリ１３、グラフィクスコントローラ１４、Ｉ／Ｏコントローラ１５、ハードディスクドライブ（ＨＤＤ）１６、およびＩ／Ｏデバイス１７，１８を備えている。ＣＰＵ１１はデータ処理装置１の動作を制御するプロセッサであり、ＨＤＤ１６から主メモリ１３にロードされる各種プログラム（オペレーティングシステム、アプリケーションプログラム）を実行する。ホストブリッジ１２はＣＰＵ１１とＩ／Ｏコントローラ１５とを繋ぐブリッジデバイスであり、ここにはグラフィクスコントローラ１４との通信を実行する機能、および主メモリ１３を制御するメモリコントローラも内蔵されている。Ｉ／Ｏコントローラ１５は、ＣＰＵ１１の制御の下、Ｉ／Ｏデバイス１７，１８を制御する。またＩ／Ｏコントローラ１５は、ＨＤＤ１６を制御するためのＩＤＥコントローラも内蔵している。
【００１３】
ホストブリッジ１２、グラフィクスコントローラ１４、Ｉ／Ｏコントローラ１５、Ｉ／Ｏデバイス１７、Ｉ／Ｏデバイス１８の各々は、PCI EXPRESS規格に準拠したデバイス（コンポーネント）である。ホストブリッジ１２とグラフィクスコントローラ１４との間の通信は、ホストブリッジ１２とグラフィクスコントローラ１４との間に配設されたPCI EXPRESSリンク３０を介して実行される。同様に、ホストブリッジ１２とＩ／Ｏコントローラ１５との間の通信も、ホストブリッジ１２とＩ／Ｏコントローラ１５との間に配設されたPCI EXPRESSリンク３０を介して実行される。さらに、Ｉ／Ｏコントローラ１５とＩ／Ｏデバイス１７，１８の各々との間の通信も、Ｉ／Ｏコントローラ１５とＩ／Ｏデバイス１７，１８の各々との間に配設されたPCI EXPRESSリンク３０を介して実行される。
【００１４】
図２には、PCI EXPRESS規格にそれぞれ準拠した２つのデバイス２１，２２間の接続構成が示されている。デバイス（＃Ａ）２１およびデバイス（＃Ｂ）２２の組み合わせは、例えば、ホストブリッジ１２およびグラフィクスコントローラ１４の組み合わせ、ホストブリッジ１２とＩ／Ｏコントローラ１５との組み合わせ、またはＩ／Ｏコントローラ１５とＩ／Ｏデバイス１７または１８との組み合わせ、に対応する。
【００１５】
デバイス（＃Ａ）２１およびデバイス（＃Ｂ）２２は、PCI EXPRESSリンク３０を介して相互接続されている。PCI EXPRESSリンク３０は、デバイス（＃Ａ）２１とデバイス（＃Ｂ）２２との間をポイントツーポイント形式で接続するシリアルインタフェース（シリアルバス）である。このPCI EXPRESSリンク３０は、デバイス（＃Ａ）２１からデバイス（＃Ｂ）２２の方向に情報を伝送するための差動信号線対と、デバイス（＃Ｂ）２２からデバイス（＃Ａ）２１の方向に情報を伝送するための差動信号線対とを含む。PCI EXPRESSリンク３０を介したデバイス（＃Ａ）２１とデバイス（＃Ｂ）２２との間の情報の伝送は、パケットを用いて実行される。
【００１６】
メモリライトリクエスト、メモリリードリクエスト、Ｉ／Ｏライトリクエスト、Ｉ／Ｏリードリクエストのような様々なトランザクションは、すべてパケットを用いてデバイス（＃Ａ）２１とデバイス（＃Ｂ）２２との間で伝送される。
【００１７】
デバイス（＃Ａ）２１およびデバイス（＃Ｂ）２２は、デバイス（＃Ａ）２１とデバイス（＃Ｂ）２２との間で伝送される情報に対するフロー制御を実現するために、フローコントロールユニット３１および３２をそれぞれ備えている。デバイス（＃Ａ）２１のフローコントロールユニット３１は、デバイス（＃Ａ）２１内の有効な受信バッファのサイズを示すクレジット値をフローコントロール情報としてデバイス（＃Ｂ）２２内のフローコントロールユニット３２に送信する。デバイス（＃Ｂ）２２は、デバイス（＃Ａ）２１からのクレジット値で指定されるサイズ分の情報をデバイス（＃Ａ）２１に送信することができる。同様に、デバイス（＃Ｂ）２２のフローコントロールユニット３２は、デバイス（＃Ｂ）２２内の有効な受信バッファのサイズを示すクレジット値をフローコントロール情報としてデバイス（＃Ａ）２１内のフローコントロールユニット３１に送信する。デバイス（＃Ａ）２１は、デバイス（＃Ｂ）２２からのクレジット値で指定されるサイズ分の情報をデバイス（＃Ｂ）２２に送信することができる。
【００１８】
次に、図３を参照して、各デバイスに設けられるフローコントロールユニットの構成について説明する。図３では、デバイス（＃Ａ）２１のフローコントロールユニット３１が代表して示されている。
【００１９】
PCI EXPRESS規格に対応する各デバイスの機能は、トランザクションレイヤ、データリンクレイヤ、物理レイヤの３つのレイヤに分類されている。フローコントロールはトランザクションレイヤによって実現される。フローコントロールユニット３１はトランザクションレイヤとして機能するユニットである。
【００２０】
このフローコントロールユニット３１は、図示のように、受信バッファ１０１、受信フローコントロール部１０２、および受信フローコントロール更新部１０３を備えている。
【００２１】
受信バッファ１０１は、デバイス（＃Ｂ）２２から受信されたパケット（トランザクションレイヤパケットTLP）を保持するためのバッファである。トランザクションレイヤパケットTLPは、図５に示すように、ヘッダと、必要なデータ（データペイロード）とを含む。ヘッダのサイズは１２バイトまたは１６バイトである。データのサイズは可変長であり、最小サイズは０バイト、最大サイズは４Ｋバイトである。すなわち、TLPは、ヘッダを含むがデータは含まないパケット、およびヘッダとデータの双方を含むパケットのいずれかから構成される。TLPのフローコントロールは、クレジットを単位として行われる。１クレジットは１６バイトである。
【００２２】
例えば、メモリリードを要求するメモリリードリクエストパケット、Ｉ／Ｏリードを要求するＩ／Ｏリードリクエストパケット、およびコンフィグレーションリードを要求するコンフィグレーションリードリクエストパケットの各々は、ヘッダのみから構成されデータペイロードは含まない。また例えば、メモリライトを要求するメモリライトリクエストパケットは、ヘッダと可変長のデータペイロードの双方を含む。
【００２３】
デバイス（＃Ａ）２１のフローコントロールユニット３１からデバイス（＃Ｂ）２２に送信されるフローコントロール情報は、受信可能なヘッダのサイズを示すクレジット値と、受信可能なデータのサイズを示すクレジット値とを含む。クレジット値はクレジット数とも称される。フローコントロール情報は、データリンクレイヤによって生成されるデータリンクレイヤパケットDLLPを用いて送信される。
【００２４】
TLPのヘッダは、TLPの目的および特徴を判別するために必要な情報を含む複数のフィールドから構成される。TLPのヘッダには、後続するデータペイロードのサイズを示すフィールドも含まれている。
【００２５】
フローコントロールユニット３１は、デバイス（＃Ａ）２１の初期化時に、有効な受信バッファ１０１のサイズを示す初期クレジット値を含むフローコントロール情報をフローコントロールDLLP（FC DLLP）を用いて、相手デバイスであるデバイス（＃Ａ）２１に送信する。このフローコントロール情報には、受信可能なヘッダのサイズを示すクレジット数と、受信可能なデータのサイズを示すクレジット数とが含まれている。デバイス（＃Ａ）２１は、フローコントロール情報で指定されるヘッダサイズおよびデータサイズの分だけ、ヘッダおよびデータを送信することができる。
【００２６】
受信フローコントロール部１０２は、デバイス（＃Ｂ）２２から受信されたTLPのヘッダを参照して、当該受信TLPに含まれるヘッダおよびデータそれぞれのサイズをクレジット情報として取得する。そして、受信フローコントロール部１０２は、受信バッファ１０１のオーバーフローを防止するために、受信バッファ１０１への受信TLPの書き込みを許可または禁止するための書き込み制御を実行する。この書き込み制御は、フローコントロール情報によってデバイス（＃Ｂ）２２に送信を許可したヘッダサイズおよびデータサイズと、受信TLPのヘッダサイズおよびデータサイズとに基づいて実行される。
【００２７】
受信フローコントロール更新部１０３は、受信バッファ１０１から出力されたTLPのヘッダから、当該TLPに含まれるヘッダおよびデータそれぞれのサイズをクレジット情報として取得する。そして、受信フローコントロール更新部１０３は、取得したクレジット情報に基づいて、処理済みのヘッダのサイズおよび処理済みのデータのサイズをそれぞれ計数する。処理済みのヘッダのサイズに対応するクレジット数が、ソフトウェアによって設定されるヘッダ用更新クレジット数（Ｐ１）に達した場合、あるいは処理済みのデータのサイズに対応するクレジット数が、ソフトウェアによって設定されるデータ用更新クレジット数（Ｐ２）に達した場合、受信フローコントロール更新部１０３は、更新フローコントロール情報を更新フローコントロールDLLP（UpdateFC DLLP）を用いてデバイス（＃Ａ）２１に送信する。UpdateFC DLLPも、データリンクレイヤによって生成されるデータリンクレイヤパケットDLLPの一種である。更新フローコントロール情報は、デバイス（＃Ａ）２１が受信可能なヘッダのサイズを示す新たなクレジット数（更新ヘッダクレジット数）、およびデバイス（＃Ａ）２１が受信可能なデータのサイズを示す新たなクレジット数（更新データクレジット数）を含む。更新ヘッダクレジット数および更新データクレジット数は受信フローコントロール部１０２にも与えられる。
【００２８】
図４には、受信フローコントロール更新部１０３の構成例が示されている。受信フローコントロール更新部１０３は、ヘッダ／データクレジット数検出部２０１、ヘッダ用処理済クレジット数カウンタ２０２、データ用処理済クレジット数カウンタ２０３、更新クレジット数生成部２０４、およびUpdateFC DLLP発行部２０５を備えている。
【００２９】
ヘッダ／データクレジット数検出部２０１は、受信バッファ１０１から出力されたTLPのヘッダを解析して、当該TLPに含まれるヘッダおよびデータそれぞれのクレジット数を検出する。どのTLPにおいても、ヘッダのクレジット数は１クレジットである。一方、データのクレジット数は、TLPに含まれるデータのサイズによって決定される。ヘッダ用処理済クレジット数カウンタ２０２は、ヘッダ用処理済クレジット数（Ｑ１）をカウントするためのカウンタである。ヘッダ用処理済クレジット数（Ｑ１）は、現時点までに受信バッファ１０１から出力されて処理済となったヘッダのサイズの合計を、クレジットを単位として示す値である。一つのTLPに含まれるヘッダのクレジット数は常に１クレジットであるので、ヘッダ用処理済クレジット数（Ｑ１）の値は、受信バッファ１０１からTLPが出力されるたびに、＋１される。つまり、ヘッダ用処理済クレジット数（Ｑ１）の値は、処理済のTLPの個数に一致する。データ用処理済クレジット数カウンタ２０３は、データ用処理済クレジット数（Ｑ２）をカウントするためのカウンタである。データ用処理済クレジット数（Ｑ２）は、現時点までに受信バッファ１０１から出力されて処理済となったデータのサイズの合計をクレジットを単位として示す値である。一つのTLPに含まれるデータのクレジット数は可変であるので、データ用処理済クレジット数（Ｑ２）の値は、受信バッファ１０１からTLPが出力されるたびに、その出力されたTLPに含まれるデータサイズに対応するクレジット数分だけ増加される。
【００３０】
更新クレジット数生成部２０４は、ヘッダ用処理済クレジット数（Ｑ１）がヘッダ用更新クレジット数（Ｐ１）に達すること、あるいはデータ用処理済クレジット数（Ｑ２）がデータ用更新クレジット数（Ｐ２）以上の値に達すること、のいずれかの事象の発生によって動作し、更新ヘッダクレジット数および更新データクレジット数を算出する。この場合、例えば、上記事象発生発生時におけるヘッダ用処理済クレジット数（Ｑ１）の値が更新ヘッダクレジット数として用いられ、上記事象発生時におけるデータ用処理済クレジット数（Ｑ２）の値が更新データクレジット数として用いられる。UpdateFC DLLP発行部２０５は、更新クレジット数生成部２０４によって得られた更新ヘッダクレジット数および更新データクレジット数を含むフロー制御情報をUpdateFC DLLPとして生成し、そのUpdateFC DLLPを相手デバイスに送信する。
【００３１】
次に、図６のフローチャートを参照して、フローコントロールユニット３１の動作を説明する。
【００３２】
フローコントロールユニット３１は、まず、ヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２をソフトウェアから取得する（ステップＳ１０１）。これらヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２はフローコントロールユニット３１内のレジスタ等に保持され、UpdateFC DLLPを発行するタイミングを判定するための基準値として使用される。次いで、フローコントロールユニット３１は、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値をそれぞれ初期化して、Ｑ１＝０，Ｑ２＝０に設定する（ステップＳ１０２）。
【００３３】
デバイス（＃Ａ）２１のトランザクションレイヤは、受信バッファ１０１の先頭からTLPを順次読み出して処理する。この結果、デバイス（＃Ａ）２１内のメモリやレジスタに対するリード／ライトアクセス等が実行される。フローコントロールユニット３１は、受信バッファ１０１からTLPが出力されると（ステップＳ１０３のＹＥＳ）、そのTLPに含まれるヘッダおよびデータそれぞれのクレジット数に基いて、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２を更新する（ステップＳ１０４）。ヘッダ用処理済クレジット数Ｑ１は＋１増加され、データ用処理済クレジット数Ｑ２はTLPに含まれるデータのクレジット数分だけ増加される。TLPにデータが含まれていない場合には、データ用処理済クレジット数Ｑ２は更新されない。
【００３４】
フローコントロールユニット３１は、
・Ｐ１＝Ｑ１
・Ｐ２≦Ｑ２
のいずれかの条件が成立すると（ステップＳ１０５のＹＥＳ、またはステップＳ１０６のＹＥＳ）、更新ヘッダクレジット数および更新データクレジット数を含むフローコントロール情報をUpdateFC DLLPとして発行する（ステップＳ１０７）。UpdateFC DLLPは、相手デバイスに送信される。この後、フローコントロールユニット３１は、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値をそれぞれ初期化して、Ｑ１＝０，Ｑ２＝０に設定する（ステップＳ１０２）。
【００３５】
以上のように、フローコントロールユニット３１においては、受信バッファ１０１から実際に出力されたパケットに含まれるヘッダおよびデータそれぞれのサイズに基づいて、処理済のヘッダのサイズおよび処理済のデータのサイズそれぞれが管理される。処理済のヘッダのサイズおよび処理済のデータのサイズの少なくとも一方がある基準値に達したときに、UpdateFC DLLPが発行される。よって、送信デバイスがクレジット不足に陥る前の最適なタイミングでクレジットを送信デバイスに送信することが可能となり、UpdateFC DLLPの多発による帯域の占有や、送信デバイスがクレジット不足に陥ることを防ぐことができる。また、フローコントロールユニット３１のフロー制御は、ヘッダとデータとを区別しているので、大きなサイズのデータを伴うパケットによって受信バッファが専有されてしまうことを防止することができる。よって、受信バッファのオーバーフローを招くことなく、ヘッダのみから構成されるパケット、およびヘッダおよびデータを含むパケットの双方を効率よく転送することができる。
【００３６】
図７には、フローコントロールユニット３１の他の構成例が示されている。このフローコントロールユニット３１は、図３の構成に加え、タイマ１０４を備えている。タイマ１０４は、フローコントロール情報の前回の送信からの経過時間を測定するために使用される。受信フローコントロール更新部１０３は、ある長い期間UpdateFC DLLPが一切発行されないという事態の発生を防止するために、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２と、タイマ１０４の値とを併用して、UpdateFC DLLPの発行タイミングを管理する。
【００３７】
図８のフローチャートは、図７のフローコントロールユニット３１の動作を示している。フローコントロールユニット３１は、まず、ヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２をソフトウェアから取得する（ステップＳ２０１）。これらヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２はフローコントロールユニット３１内のレジスタ等に保持され、UpdateFC DLLPを発行するタイミングを判定するための基準値として使用される。次いで、フローコントロールユニット３１は、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値をそれぞれ初期化して、Ｑ１＝０，Ｑ２＝０に設定する（ステップＳ２０２）。このステップＳ２０２においては、さらに、タイマ１０４の初期化も行われる。デバイス（＃Ａ）２１のトランザクションレイヤは、受信バッファ１０１の先頭からTLPを順次読み出して処理する。この結果、デバイス（＃Ａ）２１内のメモリやレジスタに対するリード／ライトアクセス等が実行される。
【００３８】
フローコントロールユニット３１は、タイマ１０４の値が予め決められた設定値を超えたかどうか（タイムアウトが発生したどうか）を判断する（ステップＳ２０３）。もしタイムアウトが発生したならば（ステップＳ２０３のＹＥＳ）、フローコントロールユニット３１は、更新ヘッダクレジット数および更新データクレジット数を含むフローコントロール情報をUpdateFC DLLPとして発行する（ステップＳ２０７）。更新ヘッダクレジット数および更新データクレジット数は、例えば、現在のヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値に基づいてそれぞれ生成される。この後、フローコントロールユニット３１は、ステップＳ２０２に戻り、そこでヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の初期化と、タイマ１０４の初期化を行う。
【００３９】
タイマ１０４の値が予め決められた設定値を超えていないならば（ステップＳ２０３のＮＯ）、フローコントロールユニット３１は、受信バッファ１０１からTLPが出力されたかどうかを判断する（ステップＳ２０４）。受信バッファ１０１からTLPが出力されると（ステップＳ２０４のＹＥＳ）、フローコントロールユニット３１は、そのTLPに含まれるヘッダおよびデータそれぞれのクレジット数に基いて、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２を更新する（ステップＳ２０５）。ヘッダ用処理済クレジット数Ｑ１は＋１増加され、データ用処理済クレジット数Ｑ２はTLPに含まれるデータのクレジット数分だけ増加される。TLPにデータが含まれていない場合には、データ用処理済クレジット数Ｑ２は更新されない。
【００４０】
フローコントロールユニット３１は、
・Ｐ１＝Ｑ１
・Ｐ２≦Ｑ２
のいずれかの条件が成立すると（ステップＳ２０６のＹＥＳ、またはステップＳ２０７のＹＥＳ）、更新ヘッダクレジット数および更新データクレジット数を含むフローコントロール情報をUpdateFC DLLPとして発行する（ステップＳ２０８）。この後、フローコントロールユニット３１は、ステップＳ２０２に戻り、そこでヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の初期化と、タイマ１０４の初期化を行う。
【００４１】
送信デバイスから送信されるTLPの数が比較的少ない場合には、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値もなかなか増加しない。このため、Ｐ１＝Ｑ１、Ｐ２≦Ｑ２のどちらの条件も満たされず、UpdateFC DLLPが長い期間一切送信されないという状況が発生することがある。送信デバイスは、受信デバイスにエラーが発生したのか、あるいは受信デバイスからのUpdateFC DLLPを自身が受信し損ねたのかを判別することができない。よって、UpdateFC DLLPが長い期間一切送信されないという状況は、動作の信頼性の観点から好ましくない。図７のフローコントロールユニット３１においては、タイマ１０４を併用することにより、UpdateFC DLLPが送信されない時間の長さの上限をある一定時間内に制限することが可能となり、UpdateFC DLLPが長い期間一切送信されないという事態の発生を防止することができる。
【００４２】
次に、図９を参照して、図３または図７のフローコントロールユニット３１に設けられる受信フローコントロール更新部１０３の他の構成例について説明する。
【００４３】
図９の受信フローコントロール更新部１０３は、バーチャルチャネル毎に以下の３つのTLPタイプを区別する。
【００４４】
・ポステッドリクエスト（Ｐ）：  このTLPは、受信デバイスからのリターンを必要としないリクエスト用パケットである。例えば、メモリライトリクエストパケットは、ポステッドリクエストである。
【００４５】
・ノンポステッドリクエスト（ＮＰ）：  このTLPは、受信デバイスからのリターンを必要とするリクエスト用パケットである。例えば、すべてのリードリクエストパケット、Ｉ／Ｏライトリクエストパケット、コンフィグレーションライトリクエストパケットは、ノンポステッドリクエストである。
【００４６】
・コンプリション（ＣＰＬ）：  このTLPは、対応するノンポステッドリクエストに関連するリターン用のパケットである。例えば、リードデータを送信するためのパケット、アクノリッジを送信するためのパケットは、コンプリションパケットである。
【００４７】
受信フローコントロール更新部１０３のフロー制御は、TLPタイプ毎にさらにヘッダとデータとを区別する。よって、フロー制御では、バーチャルチャネル毎に以下の計６つのタイプの情報が管理される。
【００４８】
・ポステッドリクエスト（Ｐ）のヘッダ（ＰＨ）
・ポステッドリクエスト（Ｐ）のデータ（ＰＤ）
・ノンポステッドリクエスト（ＮＰ）のヘッダ（ＮＰＨ）
・ノンポステッドリクエスト（ＮＰ）のデータ（ＮＰＤ）
・コンプリション（ＣＰＬ）のヘッダ（ＣＰＬＨ）
・コンプリション（ＣＰＬ）のデータ（ＣＰＬＤ）
受信フローコントロール更新部１０３は、バーチャルチャネル判定部４０１、複数のバーチャルチャネル（ＶＣ＃０，ＶＣ＃１，…ＶＣ＃ｎ）それぞれに対応するｎ個の受信フローコントロール更新モジュール４０２を備えている。バーチャルチャネルは、PCI EXPRESSリンク３０上に確立される仮想的なチャネルである。フロー制御は、バーチャルチャネル毎に独立して実行される。
【００４９】
各TLPのヘッダには、当該TLPに対応するバーチャルチャネルを識別するための識別子（TC）が含まれている。バーチャルチャネル判定部４０１は、受信バッファ１０１から出力されるTLPのヘッダに含まれるTCに基づいて、当該TLPに対応するバーチャルチャネル番号（ＶＣ＃０，ＶＣ＃１，…ＶＣ＃ｎ）を判別する。ＶＣ＃０のTLPに関する情報はＶＣ＃０用の受信フローコントロール更新モジュール４０２によって処理され、ＶＣ＃１のTLPに関する情報はＶＣ＃１用の受信フローコントロール更新モジュール４０２によって処理され、ＶＣ＃ｎのTLPに関する情報はＶＣ＃ｎ用の受信フローコントロール更新モジュール４０２によって処理される。
【００５０】
各受信フローコントロール更新モジュール４０２は、TLPタイプ判定部５０１、Ｐ用受信フローコントロール更新部５０２、ＮＰ用受信フローコントロール更新部５０３、およびＣＰＬ用受信フローコントロール更新部５０４を備えている。各受信フローコントロール更新モジュール４０２は、Ｐ，ＮＰ，ＣＰＬの各々毎に、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２を計数する。
【００５１】
TLPタイプ判定部５０１は、対応するバーチャルチャネルのTLPのヘッダに含まれるTLPタイプ識別情報に基づいて、当該TLPがＰ，ＮＰ，ＣＰＬのいずれのタイプであるかを判別する。タイプＰのTLPに関する情報はＰ用受信フローコントロール更新部５０２によって処理され、タイプＮＰのTLPに関する情報はＮＰ用受信フローコントロール更新部５０３によって処理され、タイプＣＰＬのTLPに関する情報はＣＰＬ用受信フローコントロール更新部５０４によって処理される。Ｐ用受信フローコントロール更新部５０２、ＮＰ用受信フローコントロール更新部５０３、およびＣＰＬ用受信フローコントロール更新部５０４の各々は、図４で説明した構成を有している。またＰ用受信フローコントロール更新部５０２、ＮＰ用受信フローコントロール更新部５０３、およびＣＰＬ用受信フローコントロール更新部５０４の各々は、タイマを内蔵しており、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２と、タイマの値とを併用して、UpdateFC DLLPの発行タイミングを管理する。
【００５２】
次に、図１０のフローチャートを参照して、図９の受信フローコントロール更新部１０３の動作を説明する。
【００５３】
受信フローコントロール更新部１０３は、まず、各ＶＣ毎にＰ，ＮＰ，ＣＰＬの各々に対応するヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２をソフトウェアから取得する（ステップＳ３０１）。これらヘッダ用更新クレジット数Ｐ１およびデータ用更新クレジット数Ｐ２は受信フローコントロール更新部１０３内のレジスタ等に保持され、UpdateFC DLLPを発行するタイミングを判定するための基準値として使用される。次いで、受信フローコントロール更新部１０３は、各ＶＣ毎にＰ，ＮＰ，ＣＰＬの各々に対応するヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２の値をそれぞれ初期化して、Ｑ１＝０，Ｑ２＝０に設定する（ステップＳ３０２）。ステップＳ３０２においては、さらに、各ＶＣ毎にＰ，ＮＰ，ＣＰＬの各々に対応するタイマを初期化する処理も行なわれる。タイマは、ＶＣとTLPタイプとの各組み合わせ毎に設けられている。
【００５４】
受信フローコントロール更新部１０３は、各タイマの値が予め決められた設定値を超えたかどうか（タイムアウトが発生したどうか）を判断する（ステップＳ３０３〜３０７）。どのタイマの値も予め決められた設定値を超えていないならば、受信フローコントロール更新部１０３は、受信バッファ１０１からTLPが出力されたかどうかを判断する（ステップＳ３０８）。受信バッファ１０１からTLPが出力されると（ステップＳ３０８のＹＥＳ）、受信フローコントロール更新部１０３は、当該TLPに対応するバーチャルチャネル番号を判定する（ステップＳ３０９）。TLPに対応するバーチャルチャネル番号は、当該TLPのヘッダに含まれるTCの値によって決定される。この後、受信フローコントロール更新部１０３は、受信バッファ１０１から出力されたTLPが、Ｐ，Ｎ，ＣＰＬのいずれのTLPタイプであるかを判別する（ステップＳ３１０）。そして、Ｐ，Ｎ，ＣＰＬの各々のTLPタイプ毎に、以下の処理が実行される。ここでは、受信バッファ１０１から出力されたTLPのバーチャルチャネル番号がＶＣ＃０で、TLPタイプがＰである場合を想定する。
【００５５】
受信フローコントロール更新部１０３は、受信バッファ１０１から出力されたタイプＰのTLPに含まれるヘッダおよびデータそれぞれのクレジット数に基いて、ヘッダ用処理済クレジット数Ｑ１およびデータ用処理済クレジット数Ｑ２を更新する（ステップＳ４０１）。ヘッダ用処理済クレジット数Ｑ１は＋１増加され、データ用処理済クレジット数Ｑ２はタイプＰのTLPに含まれるデータのクレジット数分だけ増加される。タイプＰのTLPにデータが含まれていない場合には、データ用処理済クレジット数Ｑ２は更新されない。
【００５６】
受信フローコントロール更新部１０３は、
・Ｐ１＝Ｑ１
・Ｐ２≦Ｑ２
のいずれかの条件が成立すると（ステップＳ４０２のＹＥＳ、またはステップＳ４０３のＹＥＳ）、受信可能なタイプＰのヘッダのクレジット数を示す更新ヘッダクレジット数と、受信可能なタイプＰのデータのクレジット数を示す更新データクレジット数とを含むフローコントロール情報をUpdateFC DLLPとして発行する（ステップＳ４０４）。UpdateFC DLLPは、バーチャルチャネル番号、TLPタイプ（＝Ｐ）も含む。この後、受信フローコントロール更新部１０３は、タイプＰに対応するヘッダ用処理済クレジット数Ｑ１およびタイプＰに対応するデータ用処理済クレジット数Ｑ２の初期化と、バーチャルチャネル番号ＶＣ＃０とタイプＰとの組み合わせに対応するタイマの初期化を行う（ステップＳ４０５）。
【００５７】
また、バーチャルチャネル番号ＶＣ＃０とタイプＰとの組み合わせに対応するタイマのタイムアウトが発生した場合も（ステップＳ３０３のＹＥＳ）、受信フローコントロール更新部１０３は、受信可能なタイプＰのヘッダのクレジット数を示す更新ヘッダクレジット数と、受信可能なタイプＰのデータのクレジット数を示す更新データクレジット数とを含むフローコントロール情報をUpdateFC DLLPとして発行する（ステップＳ４０４）。UpdateFC DLLPは、バーチャルチャネル番号、およびTLPタイプ（＝Ｐ）も含む。この後、受信フローコントロール更新部１０３は、タイプＰに対応するヘッダ用処理済クレジット数Ｑ１およびタイプＰに対応するデータ用処理済クレジット数Ｑ２の初期化と、バーチャルチャネル番号ＶＣ＃０とタイプＰとの組み合わせに対応するタイマの初期化を行う（ステップＳ４０５）。
【００５８】
以上のように、TLPタイプ毎にフロー制御を行うことにより、ある特定のタイプのTLPによって受信バッファが占有されることを防止することができ、すべてのタイプのTLPの転送を効率よく行うことができる。
【００５９】
なお、本実施形態のフロー制御はソフトウェアによって実現することもできる。また、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組み合せてもよい。
【図面の簡単な説明】
【００６０】
【図１】本発明の一実施形態に係るデータ処理装置のシステム構成を示すブロック図。
【図２】同実施形態のデータ処理装置に設けられるデバイス間の接続構成を示すブロック図。
【図３】同実施形態のデータ処理装置の各デバイスに設けられるフローコントロールユニットの構成を示すブロック図。
【図４】図３のフローコントロールユニット内に設けられる受信フローコントロール更新部の構成を示すブロック図。
【図５】同実施形態のデータ処理装置内のデバイス間で伝送されるパケットの構成を示す図。
【図６】同実施形態のデータ処理装置によって実行されるフロー制御動作を説明するフローチャート。
【図７】同実施形態のデータ処理装置の各デバイスに設けられるフローコントロールユニットの他の構成を示すブロック図。
【図８】同実施形態のデータ処理装置によって実行されるフロー制御動作の他の例を説明するフローチャート。
【図９】図３または図７のフローコントロールユニット内に設けられる受信フローコントロール更新部の他の構成例を示すブロック図。
【図１０】同実施形態のデータ処理装置によって実行されるフロー制御動作のさらに別の例を説明するフローチャート。
【符号の説明】
【００６１】
１…データ処理装置、２１，２２…PCI EXPRESSデバイス、３１，３２…フローコントロールユニット、１０１…受信バッファ、１０２…受信フローコントロール更新部、１０３…受信フローコントロール更新部、２０１…ヘッダ／データクレジット数検出部、２０２…ヘッダ用処理済クレジット数カウンタ、２０３…データ用処理済クレジット数カウンタ、２０４…更新クレジット数生成部、２０５…UpdateFC DLLP発行部。
【図１】
2005332250.tif 000003
【図２】
2005332250.tif 000004
【図３】
2005332250.tif 000005
【図４】
2005332250.tif 000006
【図５】
2005332250.tif 000007
【図６】
2005332250.tif 000008
【図７】
2005332250.tif 000009
【図８】
2005332250.tif 000010
【図９】
2005332250.tif 000011
【図１０】
2005332250.tif 000012