図1に、コンピュータシステムの一実施形態のブロック図を示す。コンピュータシステムは、互いにコヒーレントパケットバス15によって相互接続された複数のプロセッサ10Aから10Dを含んでいる。コヒーレントパケットバス15の各セクションは、プロセッサ10Aから10Dの間のポイント間リンク(point-to-point link)を形成することができる。ポイント間リンクを用いる4つのプロセッサが示されているが、異なった数のプロセッサを用いてもよいし、他のタイプのバスでそれらを相互接続してもよい。コンピュータシステムはさらに3つのI/Oノード20,30,40を含み、それぞれI/Oパケットバス50B,50Cで互いにチェーン(鎖の輪状に)接続される。ホストノード/プロセッサ10AとI/Oノード20との間をI/Oパケットバス50Aが結合する。プロセッサ10Aは、I/Oパケットバス50Aと通信するホストブリッジを含むことが可能なホストノードとして示されている。プロセッサ10B−Dも、他のI/Oパケットバス(図示せず)と通信するホストブリッジを含んでもよい。I/Oパケットバス50A−Cによって形成される通信リンクもまたポイント間リンクと呼ばれる。I/Oノード20は周辺バス25A−Bのペアに結合されている。I/Oノード30はグラフィクスバス35に結合され、I/Oノード40は追加の周辺バス45に接続される。
プロセッサ10A−Dのそれぞれの具体例としては、例えば、Athlon(商標)マイクロプロセッサのようなx86マイクロプロセッサがあげられる。さらに、I/Oパケットバス50A−50Cのようなパケットバスの一例としては、非コヒーレントなHyperTransport(商標)があげられる。周辺バス25A−Bおよび周辺バス45の実例としては、例えばPCI(peripheral component interconnect)バスまたは拡張PCI(PCI-X)バスのような一般的な周辺バスがあげられる。グラフィクスバス35の実例としては、例えばAGP(accelerated graphics port)があげられる。しかしながら、その他のタイプのマイクロプロセッサや、その他のタイプの周辺バスを使用してもよいことが理解できるであろう。
本実施形態では、ホストプロセッサ10Aには3つのI/Oノードが接続されているが、他の実施形態においては異なった数のノードを持ってもよく、それらのノードを他のトポロジーによって結合してもよいことを理解していただきたい。図1に示したチェーン型のトポロジーは理解を容易にするために示したものである。
図示した実施形態においては、プロセッサ10Aのホストブリッジは、I/Oノード20,30,40のようなダウンストリームのノードからアップストリームのパケットトランザクションを受信することが可能である。あるいは、プロセッサ10Aのホストブリッジは、例えば周辺バス25Aに接続される周辺装置(図示せず)のような装置に対して、パケットを下流(ダウンストリーム)に送信することができる。
動作中、I/Oノード20および40は、PCIバストランザクションをI/Oストリームを流れるアップストリーム・パケットトランザクションに変換することができ、さらにダウンストリーム・パケットトランザクションをPCIバストランザクションに変換することができる。プロセッサ10Aのホストブリッジ以外のノードを発信元とするすべてのパケットは、他のノードに転送される前に、プロセッサ10Aのホストブリッジへとアップストリームに流れる。プロセッサ10Aのホストブリッジを発生源とするすべてのパケットは、I/Oノード20,30,40のような他のノードへダウンストリームに流れる。ここで、「アップストリーム」はプロセッサ10Aのホストブリッジへ向かうパケットトラフィックの流れを意味し、「ダウンストリーム」はプロセッサ10Aのホストブリッジから離れる方向のパケットトラフィックの流れを意味する。各I/Oストリームは、ユニットIDと呼ばれる識別子によって特定可能である。ユニットIDはパケットヘッダの一部であってもよく、1パケットまたは複数のパケット中のまた別の指定された数のビットであってもよい。ここで、「I/Oストリーム」は、同じユニットIDを含むすべてのパケットトランザクションを意味し、従って同じノードを発信源とする。
例えば、周辺バス45上の周辺装置は、周辺バス25上の周辺装置に向けられたトランザクションを発信する。このトランザクションは最初に固有のユニットIDを持つ一以上のパケットに変換され、アップストリームに送信される。各パケットはそのパケットを特定する特定の情報によって符号化されうることを理解してもらいたい。例えば、ユニットIDはパケットヘッダ内に符号化することができる。さらに、トランザクションのタイプもパケットヘッダ内に符号化することができる。各パケットには、その発信元ノードを特定するユニットIDを割り当てることが可能である。I/Oノード20はダウンストリームからのパケットを周辺バス25上の周辺装置に転送することができないので、このパケットはプロセッサ10Aのホストブリッジにアップストリームに送信される。プロセッサ10Aのホストブリッジは、次に、I/Oノード20がそのパケットを認識し、周辺バス25上の周辺装置に対してそのパケットを要求するまで、プロセッサ10AのホストブリッジのユニットIDとともにそのパケットをダウンストリームに送信し戻すことができる。I/Oノード20は、次に、そのパケットを周辺バスのトランザクションに変換し、そのトランザクションを周辺バス25上の周辺装置に送信することができる。
パケットトランザクションがアップストリームまたはダウンストリームに伝送される際には、パケットは1以上のI/Oノードを通過(pass through)する。この通過のことを、トンネル(tunnel)と呼ぶことがあり、そのI/Oノードのことをトンネル装置(tunnel device)と呼ぶことがある。アップストリームからダウンストリームへ、またはダウンストリームからアップストリームへ送信されるパケットは、「転送される」トラフィックと呼ばれる。さらに、特定のI/Oノードを発信元とし、アップストリームのトラフィックに挿入されるパケットトラフィックは、「注入された(injected)」トラフィックと呼ばれる。
以下でさらに詳細に説明するが、I/Oノードに接続される可能性のある様々なバスの順序づけ規則を順守するためには、I/Oノードはパケットのバッファリングとともに、トランザクションの並び替え(リオーダリング)機能も提供しなければならない。I/Oノードは、周辺装置からトンネルへ、およびトンネルから周辺装置へのパケットの流れを制御する制御ロジックを含んでいてもよい。
図2は、入出力ノードの一実施形態のブロック図である。入出力ノード100は、トランシーバ回路110およびトランシーバ回路120を有する。トランシーバ回路110と120とは、I/Oトンネル140を介して互いに結合されている。トランシーバ回路110と120は、それぞれ送信機および受信機を有している(図示せず)。これらの送信機および受信機は、トランシーバ110の受信機がトランシーバ120の送信機に結合され、トランシーバ120の受信機がトランシーバ110の送信機に結合されるように、I/Oトンネル140を介して結合される。I/Oトンネル140は、I/Oノード100を通じてパケットトラフィックを転送するのに用いられるコマンドおよびデータバスを含む。さらに、I/Oノード100は、周辺インターフェイス回路150を含む。周辺インターフェイス回路150も、I/Oトンネル140を介してトランシーバ110および120に結合される。しかしながらすでに説明したように、周辺インターフェイス回路150で発信され、それからI/Oトンネル140に入ったトランザクションは、注入されたトランザクションと呼ばれる。I/Oノード100はトンネル制御ユニット130をさらに含む。トンネル制御ユニット130は、トランシーバ110、120および周辺インターフェイス150の間のトランザクションを制御するために結合されている。I/Oノード100はさらに、周辺インターフェイス回路150を介して、周辺バス220に結合されている。
図示されている実施形態では、トランシーバ110および120は、I/Oトンネル140を介した2つの単方向通信路の一部である。各通信路が単方向であるので、どちらの通信路をアップストリーム通信路またはダウンストリーム通信路として結合してもよい。従って、周辺インターフェイス150から注入されたトラフィックは、トランシーバ110または120のどちらかに供給される。トランシーバ110および120は、それぞれ受信バッファ(図示せず)においてパケットトランザクションを受信する。各トランザクションが受信される毎に、受信されたコマンドに含まれている情報の一部を含む制御コマンドが生成される。制御コマンドは、例えば、発信元ノードのユニットID、宛先情報、データ数、トランザクションタイプを含む。制御コマンドはその他の情報を含んでいてもよいし、ここで列挙した情報のどれかを含まなくてもよい、ことを理解してほしい。制御コマンドはトランシーバ110および120からトンネル制御ユニット130に送られる。トンネル制御ユニット130は、さらに受信されたトランザクションのうちのどちらが、どのトランシーバから送信されたのかを決定して、そのトランシーバに対してそのトランザクションをその宛先に送るように指示する。
図示された実施形態では、周辺インターフェイス回路150は、ダウンストリーム部分と、アップストリーム部分とを持つことができると考えられる。ダウンストリーム部分は、周辺バス220に接続された装置を宛先とするダウンストリームのトランザクションを処理することができる。アップストリーム部分は、周辺バス220に接続された装置を発信元とするトランザクションを処理することができる。したがって、周辺インターフェイス回路150は、ダウンストリーム・コマンドバッファ160およびダウンストリーム・データバッファ170を含み、それぞれはトンネル・インターフェイス・ロジック155を介してI/Oトンネル140に結合されている。ダウンストリーム・コマンドバッファ160およびダウンストリーム・データバッファ170は、それぞれバスインターフェイス回路210を介して周辺バス220に結合される。周辺インターフェイス回路150はさらにアップストリーム・コマンドバッファ180およびアップストリーム・データバッファ190を含み、それぞれはトンネル・インターフェイス・ロジック155を介してI/Oトンネル140に結合されている。アップストリーム・コマンドバッファ180およびアップストリーム・データバッファ190もまた、それぞれバスインターフェイス回路210を介して周辺バス220に結合される。周辺インターフェイス回路150はさらに、アップストリーム・コマンドバッファ180およびダウンストリーム・コマンドバッファ160の両方に結合された制御ロジックユニット200を含む。
図示した実施形態において、周辺バス220は、例えばPCIバス、PCI−XバスおよびAGPバスなどの様々な一般的周辺バスを例示したものであることを注意してほしい。さらに、バスインターフェイス回路210は、そのようなバスからの周辺バスコマンドを変換する回路を含むことができる。さらに、ある特定の実施形態として、バスインターフェイス回路210は、PCI−Xのためのコンパック(商標)Rapid Enabler(CREW)インターフェイスのようなバスインターフェイスであってもよい。最後に、ある実施形態においては、I/Oノード100は2以上の周辺インターフェイス回路(図示せず)を含んでいてもよく、そのI/Oノードは周辺インターフェイス回路のそれぞれから送られてくるコマンド間の調停を実行することができるアービトレーションロジック(図示せず)を有することができる、と考えられる。
トランザクションは、どちらのトランシーバがダウンストリーム受信機として接続されているかに応じて、トランシーバ110または120から送られる。トランザクションのコマンド部分はダウンストリーム・コマンドバッファ160に記憶され、トランザクションのデータ部分はダウンストリーム・データバッファ170に記憶される。同様に、トランザクションがバスインターフェイス回路210から送られる場合には、トランザクションのコマンド部分はアップストリーム・コマンドバッファ180に記憶され、トランザクションのデータ部分はアップストリーム・データバッファ190に記憶される。制御ロジックユニット200は、バスインターフェイス回路210およびI/Oトンネル140への、およびそれらからのトランザクションの伝達を制御するように構成されている。
以下でさらに詳細に説明するように、周辺インターフェイス回路150が周辺バス220からアップストリームトランザクションを受信するのに応答して、制御ロジックユニット200が、トランシーバ110および120が生成する制御コマンドに類似した、制御コマンドを生成する。制御ロジックユニット200はさらにこの制御コマンドをトンネル制御ユニット130に送ることができ、アップストリームコマンドをI/Oトンネル140のスケジュールに入れることを可能にする。さらに、制御ロジックユニット200は、アップストリームコマンドに対応した信号をダウンストリーム回路に供給することができる。このアップストリームコマンドは、このダウンストリーム回路がダウンストリームの応答トランザクションの相対的順序を維持できるようにする。
図3は、周辺インターフェイス回路の一実施形態のブロック図である。周辺インターフェイス回路350は、ダウンストリーム部360およびアップストリーム部450を含む。周辺インターフェイス回路350はさらに、図2のI/Oトンネル140のようなI/Oトンネルに接続されうるトンネル・インターフェイス・ロジックユニット355を含む。図3のダウンストリーム部360では、トンネル・インターフェイス・ロジック355はさらにコマンドバッファ370に結合される。コマンドバッファ370はタグ付けロジックユニット380に結合される。タグ付けロジックユニット380は仮想チャネルコマンドバッファ390に結合される。仮想チャネルコマンドバッファ390はアービトレーションロジックユニット410に結合される。アービトレーションロジックユニット410はバスインターフェイス回路470に結合されている。仮想チャネルコマンドバッファ390はさらに非ポスト(non-posted, NP)リトライキュー420および分割応答(split response)キュー430に結合されている。トンネル・インターフェイス・ロジック355はさらにデータバッファ400に結合され、データバッファ400は次にバスインターフェイス回路470に結合されている。バスインターフェイス回路470は周辺バス560に結合され、周辺バス560は周辺装置565に結合されている。
アップストリーム部450では、バスインターフェイス回路470が、NPコマンドバッファ480、解析ロジックユニット500および遅延トランザクションロジック回路510に結合される。さらに、バスインターフェイス回路470がデータバッファ550に結合される。NPコマンドバッファ480は、制御コマンドジェネレータ520およびNPソースタグ付けロジックユニット490に結合される。制御コマンドジェネレータ520は、仮想チャネルコマンドバッファ530およびトンネル・インターフェイス・ロジック355に結合されている。仮想チャネルコマンドバッファ530はトンネル・インターフェイス・ロジック355に結合されている。周辺インターフェイス回路350はさらに制御ロジックおよび記憶ユニット460を含み、制御ロジックおよび記憶ユニット460はダウンストリーム部360の分割応答キュー430およびデータバッファ400に結合されている。制御ロジックおよび記憶ユニット460はさらにアップストリーム部450のNPソースタグ付けロジックユニット490およびNPコマンドバッファ480に結合されている。さらに、周辺インターフェイス回路350は繰り返しロジック570を含み、これらは周辺バス580などの周辺バスに関して上述したように動作することが理解できるであろう。
一般的に、「仮想チャネル」は様々な処理ノードの間でパケットを運ぶための通信路である。各仮想チャネルは他の仮想チャネルのリソースからは独立している(つまり、一つの仮想チャネルを流れるパケットは一般的に、物理的伝送の観点から、他の仮想チャネルにおけるパケットの存在の有無による影響を受けない。パケットは、パケットのタイプに基づいて仮想チャネルの割り当てを受ける。同じ仮想チャネルのパケットは、その他の送信と物理的に衝突する(同じ仮想チャネル内のパケットはリソースの衝突を生じさせる)が、異なった仮想チャネル内のパケット送信とは物理的に衝突しない。
あるパケットは他のパケットと論理的に衝突する(つまり、プロトコルの理由、コヒーレンシーの理由、またはその他の似たような理由から、一のパケットが他のパケットと論理的に衝突しうる)。もし第1のパケットが論理的/プロトコルの理由からその宛先のノードに、第2のパケットがその宛先のノードに到達する前に、到達していなければならないとすると、もし第2のパケットが物理的に第1のパケットの伝送をブロックしていると(競合するリソースを占有することによって)コンピュータシステムはデッドロックになりうる。第1および第2のパケットを分離した仮想チャネルに割り当て、パケットのようなコンピュータシステム内の伝送媒体をお互いの伝送をブロックできない分離した仮想チャネルに割り当てることによって、デッドロックなしの動作が達成できる。異なった仮想チャネルからのパケットは同じ物理リンク上を伝送されることに注意してもらいたい。しかしながら、伝送の前に受信バッファを利用することが可能なので、この共有リソースを使用していても、仮想チャネルは互いをブロックしない。
一つの観点からは、異なったそれぞれのパケットタイプ(例えば、異なったコマンド符号化方式のそれぞれ)にそれ自身の仮想チャネルを割り当てることができ、それによって本実施形態では、分離したバッファが各仮想チャネルに割り当てられる。各仮想チャネルに対して分離したバッファを使用することができるので、ある仮想チャネルからのパケットは他の仮想チャネルからのパケットとは物理的に衝突しない(そのようなパケットは他のバッファに格納される)。
従って、図示した実施形態では、仮想チャネルコマンドバッファ390および仮想チャネルコマンドバッファ530はそれぞれ3つの分離したFIFO部を有し、それらは3つのタイプのトランザクション、ポスト(posted)、非ポスト(non-posted)および応答(response)に対応する。コマンドは、それらが受信された順番に、各FIFOに格納される。しかしながら、元のコマンドを生成した装置のタイプまたはバスに関する順序づけ規則を保持するために、異なったタイプのトランザクションの間で順番に関係なくトランザクションを処理しなければならない。
ある実施形態では、コマンドバッファ370は深さ2(2-deep)のFIFOであって、図2のI/Oトンネル140から図3の仮想チャネルコマンドバッファ390に送られたコマンドのバッファリング機構として機能する。トランザクションが周辺インターフェイス回路350に対してダウンストリームに送られるとき、トランザクションのデータ部分はデータバッファ400に記憶され、トランザクションのコマンド部分は仮想チャネルコマンドバッファ390に記憶される。しかしながら、まずタグ付けロジック380がコマンドに対してタグ値を生成し、それを付加するように構成されている。タグ値は、あるコマンドの、他の受信したコマンドに対する相対的な受信の順番に対応し、後続の調停サイクルで使用される。データおよびコマンドは、パケットに含まれるヘッダ情報によって同じパケットに属するものとして特定可能である。また、ある種の周辺バスはI/Oノードの内部クロック速度よりも遅いクロック速度で動作するので、データはI/Oノードのクロック速度を用いてデータバッファ400にロードされ、異なったクロック速度、好適にはバスインターフェイス回路470に接続された周辺バスのクロック速度でアンロードされる。さらに、データバッファ400および仮想チャネルコマンドバッファ390は、スペースが利用できないときには、そのことを任意のアップストリームロジックに通知するように構成できる。
コマンドのタイプ(つまり、ポスト、非ポストまたは応答)に応じて、コマンドは、仮想チャネルコマンドバッファ390の各仮想チャネルFIFOに記憶される。アービトレーションロジック410は、仮想チャネルコマンドバッファ390内のトランザクションの間で、第1に処理するトランザクション、第2に処理するトランザクション(以下同様)を調停するように構成されている。仮想チャネルコマンドバッファ390およびアービトレーションロジック410は、それらが共同してコマンドが処理される順番を決定し記憶するので、コマンドスケジューラーと考えられる。例えば、非ポストコマンドの前に仮想チャネルコマンドバッファ390に到着したポストコマンドは、アービトレーションロジック410によって確立された順序づけ規則に従って、非ポストコマンドの後に処理しなければならない可能性がある。アービトレーションロジック410はさらに、アービトレーションサイクルの間、タグ付けロジックユニット380によって割り当てられたタグ値を使用することができる。
さらに、複数の応答パケットが同じデータストリームまたはシーケンスに属することがある。これは、データストリームに対する要求のような共通の要求トランザクションからそれらが由来している場合である。周辺バスによっては、ダウンストリームロジックで順番がバラバラにパケットが受信されたときであっても、データストリーム内では正しい順番で応答パケットを届ける必要がある。さらに、データストリームの要求に応答して、周辺バス上で部分的な転送を実行しなければならない。データバッファ400は、要求されたデータストリームの一部を形成するデータを含んでいてもよい。この一部を形成するデータセグメントが正しい順番であるかぎり、それらを周辺バスに転送することができる。
制御ロジックおよび記憶ユニット460は、レジスタやランダムアクセスメモリなどの記憶ユニットと、データを供給するのに用いられるロジックとを含み、図7の説明と併せて、以下で詳しく説明する。
図8および図9に関係して、以下で詳細に説明するように、調停の間、もし勝ったトランザクションが応答コマンドであった場合、この応答コマンドに関係するデータがデータバッファ400にあるかどうかを判定する。もしデータがあるならば、周辺バス560上でバスサイクルを起動する。これは、コマンドおよびデータパケットを受信したバスインターフェイス回路470が、それらを周辺バス560上での伝送に適したアドレス、データおよび制御信号に変換することによって実行される。
もし勝利を獲得したコマンドがリードまたはライトのような非ポストコマンドであるならば、バスインターフェイス回路470に接続された周辺バスのタイプに応じて、周辺装置565は、例えば次のうちの一つを実行する:コマンドの受け入れおよび処理およびすべての要求されたデータとともにターゲット完了(done)サイクルまたは応答サイクルを送信する、リトライ指示をアサートする、コマンドの受け入れおよび分離応答指示をアサートする。図4の説明に関係して以下で詳細に説明するように、もしリトライ指示が周辺装置565によってアサートされると、非ポストコマンドを仮想チャネルコマンドバッファ390から回収して、NPリトライキュー420に記憶することができる。図5の説明に関係して以下で詳細に説明するように、もし周辺バス560がPCI−Xバスであり、分離応答が受信されると、非ポストコマンドを仮想チャネルコマンドバッファ390またはNPリトライキュー420から回収して、分割応答キュー430に記憶することができる。
アップストリーム部450では、周辺装置565が周辺バス560上でバスサイクルを起動するとき、バスインターフェイス回路470はそのサイクルを、上述したようにコマンドおよびデータパケットを含むパケットトランザクションに変換することができる。データパケットはデータバッファ550に記憶することができ、コマンドは仮想チャネルコマンドバッファ530の各仮想チャネルに記憶することができる。仮想チャネルコマンドバッファ530への記憶の前に、コマンドのタイプに応じて、解析ロジック500がコマンドをいくつかのより小さなコマンドに分解する。例えば、もし周辺装置565が、システムメモリに対する大きなデータブロックの非ポスト・ライトを要求したとすると、解析ロジック500は、メモリの同じブロックについての、より小さなブロック単位のいくつかの非ポスト・ライトコマンドを生成する。一実施形態としては、このブロックをキャッシュラインの境界に沿って生成できることが考えられる。続いて、非ポスト・コマンドのそれぞれを仮想チャネルコマンドバッファ530に記憶することができる。非ポスト・リードコマンドも、要求の境界およびトランザクションがPCIであるか、またはPCI−Xであるかに応じて、分解することができる。一実施形態では、NPソースタグ付けロジック490は、ダウンストリームロジックが特定の応答コマンドが関係するデータストリームを決定するのに用いることができる、タグ値を生成することができる。さらに、図6から図9に関係して以下で詳細に説明するように、元々の非ポスト・コマンド(例えば、分解される前)をNPコマンドバッファ480に保持してダウンストリーム部360内のロジックに情報を供給することができる。NPソースタグ付けロジック490は、アップストリームの非ポスト・コマンドに関するタグ値を生成することができる。一実施形態では、0から29までのタグ値が生成される。しかしながら、他の実施形態では、他の適切な数のタグ値を生成することが可能であると考えられる。
アップストリームコマンドが仮想チャネルコマンドバッファ530内に記憶されると、制御コマンドジェネレータ520が、図2のトランシーバ110および120によって生成される制御コマンドに類似した制御コマンドを生成する。図3で、制御コマンドジェネレータ520はさらに、これらの制御コマンドを、トンネル・インターフェイス・ロジック355を通じて図2のトンネル制御ユニット130に送ることができ、それによってアップストリームコマンドをI/Oトンネル140のスケジュールに入れることができる。図3のトンネル・インターフェイス・ロジック355は、I/Oトンネル140と周辺インターフェイス回路350内のロジックとの間のインターフェイスを提供するのに必要な汎用のバッファ回路を含んでいてもよい。
遅延トランザクションロジック510は、バスインターフェイス回路470、ダウンストリーム部360内のロジックおよび図2のI/Oトンネルロジックとの組み合わせで動作する回路を含み、要求をただちに処理することができない周辺装置565に対してリトライ指示を送る。例えば、周辺装置565が非ポスト・リード要求をアップストリームに送り、そして非ポストチャネルはブロックされているか、またはデータの準備ができていないとする。遅延トランザクションロジック510は周辺装置565に対して、その要求を現在処理することができないこと、および後でその要求をリトライすべきことを指示することができる。
図4は、非ポスト・リトライバッファ回路の一実施形態のブロック図である。非ポスト(NP)リトライバッファ回路650は、非ポストコマンドアップデート回路670に結合された非ポストリトライFIFO660を含む。
図示された実施形態では、非ポストリトライFIFO660は、図3の仮想チャネルコマンドバッファ回路390の非ポストコマンドFIFOのような、非ポストコマンドバッファから受信した非ポストコマンドを記憶することができる。図3の説明に関係して上述したように、周辺装置565によってアサートされたリトライ指示に応答して、非ポストコマンドを仮想チャネルコマンドバッファ390から回収して、図4の非ポストリトライFIFO660に記憶することができる。
非ポストリトライFIFO660は、利用可能な記憶位置がない場合には、FIFOフル(full)信号をアサートする。このフル信号は、図3のアービトレーションロジック回路410のようなアービトレーションロジックに対して指示を与える。フル信号がアサートされている間は、仮想チャネルコマンドバッファ回路390の非ポストコマンドFIFOは調停サイクルに参加することはできず、それによって追加のリトライ指示が発生した際の非ポストリトライFIFO660のオーバーフローを防止する。
ひとたび非ポストコマンドが非ポストリトライFIFO660に記憶されると、非ポストリトライFIFO660の先頭のコマンドが、図3の仮想チャネルコマンドバッファ回路390のどれかの仮想に記憶された任意のコマンドとともに、調停サイクルに参加することができる。もし、図4の非ポストリトライFIFO660の先頭に記憶された非ポストコマンドが調停サイクル中に選択されてバスサイクルを起動させるとき、そしてリトライ信号が図3の周辺バス560再度アサートされるとき、図4の非ポストコマンドアップデート回路670が選択された非ポストコマンドを非ポストリトライFIFO660の先頭から取り除いて、その末尾に記憶し、それが再度当該FIFOの先頭に到達する別の調停サイクルまで待機する。言い換えれば、この選択された非ポストコマンドはFIFOに書き戻される。このことが、非ポストコマンドアップデート回路670内の点線矢印で表されている。このサイクルの再試行(リトライ)は何回でも発生し、毎回コマンドが非ポストリトライFIFO660の末尾に書き戻される。
図3の周辺インターフェイス回路350がPCIモードで動作しているとき、図3の周辺バス560が、非ポストサイクルが部分的に完了したことを示すことがある。例えば、非ポスト・リードコマンドが10個のデータセグメントを要求したとする。周辺装置565はリトライ指示をアサートするが、10個のデータセグメントのうち5個で応答し、それによって応答の部分的な完了を示すことができる。部分的完了の表示を受信すると、図4の非ポスト・コマンドアップデート回路670は非ポストコマンドを修正して、残りのデータセグメントに対応した新しいデータ数およびアドレスが保存されるようにする。同様に、非ポスト・ライトコマンドも部分的に完了することがある。次に、非ポストコマンドアップデート回路670は修正された非ポストコマンドを非ポストリトライFIFO660の末尾に記憶させ、その非ポストコマンドはそれが再度当該FIFOの先頭に到達する別の調停サイクルまで待機する。ここでの用法として、例示の目的において、FIFOの先頭とはコマンドがアンロードされる、つまり読み出されるFIFO内の位置を意味し、FIFOの末尾とはコマンドがストアされ、つまり書き込まれる位置を意味する。さらに、非ポストリトライFIFO660からコマンドがアンロードされるにつれ、非ポストリトライFIFO660内に記憶されたすべてのコマンドはそれが将来アンロードされる順番に持ち上がることが理解できる。別の実施形態としては、コマンドをFIFOの先頭に書き込み、FIFOの末尾から読み出すことが考えられる。この場合、非ポスト・コマンドアップデート回路670はFIFOの先頭にコマンドを書き込む。
図5に、周辺インターフェイス回路の一実施形態におけるスリット応答指示(slit response indication)の取り扱いを示す流れ図を示す。図3および図5をまとめて参照して、処理は図5のステップ431から始まり、ステップ432に進む。ステップ432では、非ポストコマンドが図3のダウンストリーム部450で受信され、仮想チャネルコマンドバッファ390の非ポストFIFOに記憶される。図5のステップ433に進んで、調停サイクルが実行され、もし非ポストコマンドが勝った場合には処理はステップ434へと進み、そうでない場合には非ポストコマンドが勝つまで調停サイクルが継続する。従って、ステップ434へと進み、非ポストコマンドが選択され、例えば図3のバスインターフェイス回路470に含まれる変換ロジックに送られる。この非ポストコマンドは対応するバスサイクルにおいて周辺バス560上での伝送に適するように変形される。図5のステップ435に進んで、次に図3のバスインターフェイス回路470によってバスサイクルが開始される。これらの変換およびバスサイクルの開始プロセスは、図2の説明に関して上述したCREXインターフェイス(図示せず)などの周辺バスに対する一以上のインターフェイスによって実行される一以上の中間のステップを含んでいてもよいことを理解してもらいたい。次に処理は図5のステップ436へ進む。ステップ435では、図3のアップストリーム部450およびバスインターフェイス回路470が、周辺バス560上の周辺装置565などの目的装置からの完了表示を待つ。もし非ポストコマンドがリード要求であったときは、完了表示は、すべての要求されたデータが存在していることを示す、「サイクル完了」信号のような制御信号を含む、要求されたすべてのデータである。もし非ポストコマンドがライト要求であったときは、完了表示は、データを伴わない完了のメッセージである。完了表示を受信すると、処理は図5のステップ437へと進む。ステップ437では、非ポストコマンドがライトコマンドであったときは、図3のアップストリーム部450が「目標完了」応答などの応答コマンドを、要求しているノードに対して送る。もし、非ポストコマンドがリードコマンドであったときは、アップストリーム部450は要求しているノードに、要求されたすべてのデータを含む応答コマンドを転送する。処理説明は図5のステップ438で終了する。
ステップ436に戻って、図3の周辺バス560から受信した応答が完了メッセージでない場合、それは図4との関係で詳細に説明したリトライ表示である可能性がある。応答は分割応答表示であってもよく、図5のステップ439で分割応答表示が受信される。ステップ440に進んで、分割応答表示に応答して、非ポストコマンドが図3の分割応答キュー430に記憶される。非ポストコマンドは、バス番号、デバイス番号、関数番号、カウントおよびID番号などのバスサイクル情報を含みうる。この情報は、目的の装置(デバイス)から受信した任意の応答サイクルを獲得するのに用いることができる。図5のステップ441に進んで、もし非ポストコマンドがリードコマンドであったときは、受信された分割応答はリードされたデータを伴う。この場合、応答コマンドは任意の利用可能なデータとともに要求しているノードに送られる。ステップ442に進んで、もし分割完了が受信されると、それは非ポスト・ライトコマンドに応答する分割完了メッセージであるか、要求されたすべてのデータを含む分割完了である。ステップ443に進んで、分割完了サイクル情報が図3の分割応答キュー430内に記憶された任意の非ポストコマンドと比較される。対応する非ポストコマンドが決定されると、処理は図5のステップ444へと進む。ステップ444では、もし分割完了が分割完了メッセージであるときは、「目標完了」応答などの応答コマンドが要求しているノードに送られる。もし非ポストコマンドがリードコマンドであるならば、図3のアップストリーム部450は要求されたすべてのデータを含む応答コマンドを要求しているノードに送信することができる。図5のステップ445に進んで、すべてのデータまたは分割完了メッセージが受信されると、対応する非ポストコマンドが図3の分割応答キュー430から回収される。
ステップ442に戻って、分割完了が受信されないときは、処理はステップ446に進み、分割応答が受信される。次に処理はステップ447に進み、分割応答サイクル情報が、図3の分割応答キュー430内に記憶されたすべての非ポストコマンドと比較される。対応する非ポストコマンドが決定されると、処理は図5のステップ448へ進む。ステップ448では、図3のアップストリーム部450が、利用可能なデータと非ポストコマンドからの情報を含む応答コマンドを要求しているノードに送信する。処理はステップ442へと戻り、他の応答を待つ。ステップ446へと戻って、分割応答が受信されないときは、処理はステップ442へと戻り、他の応答を待つ。
図6は、バッファ利用可能性FIFO構造を含むバッファ回路の一実施形態のブロック図である。バッファ回路680は、非ポスト・コマンドバッファ690に結合されたバッファ利用可能性FIFO685を有する。バッファ利用可能性FIFO685はさらにライトロジック686およびリタイアロジック687に結合されている。
非ポストコマンドバッファ690は、図3の周辺バス560のような周辺バスから受信したコマンドに対応する非ポストコマンドを記憶する。図3の説明に関連して上述したように、アップストリームの非ポストコマンドは、そのアップストリームの非ポストコマンドに含まれている情報を必要とするダウンストリームの回路がそれを使用するために保持される。非ポスト・コマンドバッファ690にコマンドを記憶するのを促進するために、バッファ利用可能性FIFOは、非ポスト・コマンドバッファ690内の次の利用可能な位置を示すことができる。
非ポスト・コマンドバッファ690が空であるときは、非ポスト・コマンドバッファ690がいっぱいになるまで、コマンドをシーケンシャルに記憶することができる。非ポストコマンドに関係する応答の受信の順番に応じて、非ポストコマンドは除去され、または順番に関係なく回収される。これによって、調停パターンに「穴」または空き位置を残す。従って、非ポスト・コマンドバッファ690に任意の新しいコマンドを記憶するために、バッファ利用可能性FIFO685を用いて、利用可能な位置を追跡記録することができる。
図示された実施形態では、非ポスト・コマンドバッファ690は8つの位置を含んでいる。バッファ利用可能性FIFO685も8つの位置を含み、バッファ利用可能性FIFO685内の8つの位置のそれぞれは3ビットの値を記憶することができる。バッファ利用可能性FIFO685に記憶された値は、非ポスト・コマンドバッファ690内の位置のアドレスに対応する。従って、3ビットの値のそれぞれは非ポストコマンドバッファ690に対するインデックスとして用いることができる。他の実施形態では、他の適切な位置の数および異なったビット数を採用することができる、ことが考えられる。バッファ利用可能性FIFO685はFIFO構造なので、値はそれらが書き込まれた順番で読み出される。従って、本実施形態では、値は、バッファ利用可能性FIFO685のボトム(末尾)に書き込まれ、そのトップ(先頭)から読み出されるといえる。しかしながら、他の実施形態においては、トップおよびボトムという用語は相互に使用可能であると考えられる。さらに、他の実施形態においては、バッファ利用可能性FIFO685内の各位置を示すのにリードおよびライトポインタを使用可能であることが考えられる。
初期化時には、非ポストコマンドバッファ690は空であり、従ってすべての位置が利用可能である。バッファ利用可能性FIFO685は、バッファ利用可能性FIFO685のトップが非ポストコマンドバッファ690の位置0のアドレスに対応するインデックス値を含むように、初期化することができる。バッファ利用可能性FIFO685の次の位置は位置1、その他のアドレスに対応するインデックス値を含む。従って、非ポストコマンドが到着したとき、ライトロジック686はバッファ利用可能性FIFO685のトップに含まれているインデックス値を読み込み、その後、位置0のアドレスにコマンドを書き込む。コマンドが記憶されると、バッファ利用可能性FIFO685に記憶されていたすべてのインデックス値が位置ひとつ分だけ上方にシフト(シフトアップ)し、それによって位置1のアドレスはバッファ利用可能性FIFO685のトップ位置となる。
特定のダウンストリームコマンドが完了して、非ポストコマンドバッファ690に記憶された対応する非ポストコマンドがこれ以上必要なくなったとき、それは非ポストコマンドバッファ690から回収されうる。従って、非ポスト・コマンドバッファ690は、非ポストコマンドが記憶されていた位置を利用可能にし、リタイアロジック687に対応する表示を供給する。リタイアロジック687は、その位置が利用可能になったときを決定でき、それに応答して、バッファ利用可能性FIFO685に対する利用可能な位置のアドレスに対応するインデックス値を、バッファ利用可能性FIFO685のボトムに書き込む。従って、バッファ利用可能性FIFO685のトップ位置は、利用可能な位置が存在するときに、利用可能な位置のアドレスに対応するインデックス値を含む。非ポスト・コマンドバッファ690に利用可能な位置がない場合には、ライトロジック686は非ポストコマンドバッファ690にどんなコマンドも記憶することを禁止される。
図7に、図3の制御ロジックおよび記憶ユニットの一実施形態の典型的なダイアグラムを示す。制御ロジックおよび記憶ユニット460は、バッファ利用可能性レジスタ600、先頭レジスタ610、次ポインタレジスタ620、末尾レジスタ630および分割応答ポインタレジスタ640を含む。
図示された実施形態においては、先頭レジスタ610は29ビットを有し、それは図3のNPソース・タグ付けロジックユニット490によって生成された29の可能性のあるタグ値に対応する。先頭レジスタ610は、どのコマンドパケットが各データストリームの第1コマンドパケットであるのかを示すのに使用される。例えば、ビット0および3が、タグ値0と3を有するコマンドパケットが先頭パケットであることを示すためにセットされる。ここで、データストリームとは、データ要求に関連した一以上のパケットシーケンス中の任意の数のパケットを指す。例えば、非ポスト・リード要求コマンドは、同じデータストリームに属するいくつかのリードコマンドに分解することができる。2パケット以上を含むデータストリームについては、次ポインタ620および末尾レジスタ630を用いて、データストリーム中の残りのパケットの順番を追跡記録することができる。
次ポインタ620も29の位置を含む。それぞれの位置は、少なくとも29個のタグ値を表すために5ビットを記録することができる。従って、各位置は29個のタグ値の一つを表すことができる。従って、次ポインタ620の各位置に記憶された値は、次ポインタ620内の次の位置を示すために使用できる。さらに、各位置に記憶された値は、特定のデータストリーム内の次のパケットのタグ値をも表す。従って、次ポインタ620内に記憶された値のシーケンスは、送られた順番に受信されていない可能性のあるデータストリーム中の多くのパケットの順番を再構成または検証するために使用することができる。
末尾レジスタ630もまた29ビットを含み、それぞれが29個のタグ値に対応する。末尾レジスタ630は、特定のデータストリーム中の最終パケットに対応するタグ値を表すのに使用することができる。図示された実施形態においては、ビット2および5がセットされて、タグ値0および3を有するコマンドパケットが末尾パケットであることを示す。
上述の実施形態においては末尾レジスタを特定のデータストリーム中の最終パケットを識別するために用いているが、別の実施形態では、特別な値を次ポインタ620の位置に記憶することができると考えられる。この特別の値は、それが記憶されている位置に対応するタグ値が特定のデータストリーム中の最終パケットに対応することを示すことができる。
図示された実施形態においては、バッファ利用可能性レジスタ600もまた29ビットを含み、それぞれが29個のタグ値に対応する。バッファ利用可能性レジスタ600は、特定のデータストリームに関連した応答のうちどれが受信されたかを示すのに使用できる。例えば、タグ値3および4を含むデータパケットが受信され、図3のデータバッファ400のようなデータバッファに記憶される。従って、図7のバッファ利用可能性レジスタ600のビット番号3および4を設定することで、データが利用可能であることを示す。
分割応答ポインタ640もまた29個の位置を含み、それぞれが図3のNPコマンドバッファ480のようなバッファ中の最大8つの位置を表す3ビットを記憶することができる。3ビットの値のそれぞれは、図3のNPコマンドバッファ480中の位置のアドレスに対応するインデックス値として使用できる。従って、分割応答ポインタ640は、どの応答コマンドが図3のNPコマンドバッファ480中に記憶された元の非ポストコマンドに関連しているかを示すために使用可能である。従って、分割応答ポインタ640は、周辺バスへのデータの部分的な転送が必要であるときに、使用される。
これまで29個のタグ値があるものとして説明したが、他の実施形態では、より少ない個数またはより多い個数のタグ値の使用が考えられる、ことを理解してもらいたい。従って、先頭レジスタ610、次ポインタ620、末尾レジスタ630、バッファ利用可能性レジスタ600および分割応答ポインタ640はそれぞれ、より多いビット数またはより少ないビット数を含むものであってもよいと考えられる。さらに、これらのレジスタに関連するロジックは反転していてもよいと考えられる。つまり、対応するタグ値を表すためには、ビットをセットするのではなく、それをクリアするのである。
図3の説明に関連してすでに説明したように、バスインターフェイス回路470によってバスサイクルが非ポスト・パケットコマンドに変換されるとき、その非ポスト・パケットコマンドに関連するいくつかの応答パケットが存在しうる。さらに、応答パケットはダウンストリーム部360によって順序がバラバラに受信される可能性があること、そしてデータストリーム中のパケットの順序付けは周辺バスのタイプに応じて維持されうることに言及した。図8および図9の説明に関連して、以下でさらに詳しく説明するように、非ポストコマンドはアップストリーム部450で受信され、それら非ポストコマンドに対するソースタグ値はソースタグ付けロジックユニット490によって生成される。続いて、制御ロジックおよび記憶ユニット460内の先頭レジスタ610、次ポインタ620、末尾レジスタ630、バッファ利用可能性レジスタ600および分割応答ポインタ640は、非ポストソースタグ値を用いて、一以上のデータストリーム中の応答の正しい順番を維持するために用いることができる。さらに、応答が受信されたとき、制御ロジックおよび記憶ユニット460は、データストリームの一部を形成するデータシーケンスを転送するときに使用可能である。
図示された実施形態では、記憶装置(storage)としてレジスタを使用しているが、他の実施形態では、例えばランダム・アクセス・メモリまたは任意のタイプの消去可能プログラム可能なリードオンリーメモリなどの、他の適切なタイプの記憶装置を使用できると考えられることに注意してもらいたい。
図8は、図3の周辺インターフェイス回路350の一実施形態であるトランザクション並び替え(リオーダリング)処理を説明する流れ図である。図3、図7および図8をまとめて参照して、処理は図8のステップ800で始まり、ステップ810に進む。ステップ810では、非ポストコマンドが図3のアップストリーム部450によって受信される。図8のステップ820に進んで、図3の解析ロジック500が、アップストリームI/Oトンネル要求を満たすために、非ポストコマンドを複数の非ポストコマンドに分解するかどうかを決定する。もし、トランザクションがPCIトランザクションまたはPCI−Xトランザクションであって、非ポストコマンドを分解する必要がないときは、処理は図8のステップ830に進んで、非ポストコマンドが図3のNPコマンドバッファ480に記憶される。一般的に、PCIトランザクションは分解されない。例えば、図3の周辺インターフェイス回路350による非ポスト・リード要求は最大でキャッシュラインの境界までのものである。しかしながら、PCIトランザクションは、決してある特定の場合に分解されることから除外されるものではない。
図8のステップ840に処理を進めて、非ポスト・ソースタグ値が生成され、その非ポストコマンドに付加される。処理はステップ842に進んで、非ポストコマンドのためにちょうど生成されたソースタグ値に対応するビットをセットすることによって、図7の先頭レジスタ610がアップデート(更新)される。処理は図8のステップ850に進んで、図3の制御コマンドジェネレータ520によって非ポストコマンドのために制御コマンドが生成され、調停のためにI/Oトンネル制御ロジックに送られる。図8のステップ860へ進んで、非ポストコマンドがさらに図3の仮想チャネルコマンドバッファ530内に記憶されて送信を待つ。図8のステップ870で、もし対応する制御コマンドがI/Oトンネル制御ロジック内のアービトレーション回路によって選択されたならば、非ポストコマンドが送信される。
図8のステップ820に戻って、もし非ポストコマンドの分析が必要ならば、処理はステップ825へと進んで、非ポストコマンドは、同じシーケンスまたはデータストリームに属する複数の非ポストコマンドに分解される。ステップ835に進んで、元々の非ポストコマンドが、図3のNPコマンドバッファ480に記憶される。図8のステップ845において、元々の非ポストコマンドから作成されたばかりの複数の非ポストコマンドそれぞれに対して、NPソースタグが生成される。処理はステップ842へと進んで、図7の先頭レジスタ610、次ポインタ620、末尾レジスタ630および分割応答ポインタ640がアップデートされる。先頭レジスタ610は、シーケンス内の第1非ポストコマンドについて生成されたばかりのタグ値に対応するビットをセットすることでアップデートされる。末尾レジスタ630は、データストリーム内の最終非ポストコマンドについて生成されたばかりのタグ値に対応するビットをセットすることでアップデートされる。
次ポインタ620は、シーケンス内の残りの非ポストコマンドのタグ値をロードすることでアップデートされる。このタグ値は、シーケンス内の各パケットをそのシーケンス内の次のパケットにリンクするようにロードされる。例えば、与えられたデータストリームが3つのパケットから構成されているとする。このパケットは0、1、2として配置され、従って0、1、2とタグ付けされる。従って、先頭レジスタ610のビット0がセットされ、ビット1および2はクリアされる。その理由は、1つのパケットのみが先頭になれるからである。このデータストリーム中の次のパケットを追跡するために、次ポインタ620の位置0および1が、次の2つのパケットのタグ値、それぞれ1および2とともにロードされる。先頭レジスタ610のビット0がセットされているので、次ポインタ620の位置0がタグ値「1」とともにロードされ、タグ値1を持つパケットがデータストリーム中の「次の」パケットであることを示す。さらに、次ポインタ620の位置1がタグ値「2」とともにロードされ、タグ値2を持つパケットがデータストリーム中の「次の」パケットであることを示す。パケット2はデータストリーム中の最終のパケットであるので、それは末尾であると指定される。したがって、末尾レジスタ630のビット2がセットされる。上述の実施形態では、タグ値には数字のシーケンス(例えば、0,1,2)が割り当てられているものの、他の実施形態においてはタグ値に任意の順序を割り当てることができ、そして現在どのタグ値が利用可能であるのかに従ってタグ値を割り当てることが考えられる、ことを理解してもらいたい。さらに、他の実施形態では、データストリーム中により多くのまたはより少ない数のパケットを含むことができ、それによってより多くのまたはより少ないタグ値が用いられる。
データストリームを構成する複数の非ポストコマンドがダウンストリームロジックによって順序がバラバラに受信され、それらを要求している装置に送るのに遅延が生じる可能性がある。この遅延は図3の周辺インターフェイス回路350にPCI−Xトランザクションに対する分割応答を指示させる。このような場合、ダウンストリームロジックは多くの分割応答サイクルおよび分割完了サイクルの発信元となり、そして複数の非ポストコマンドに対応する元々の非ポストコマンドに含まれている情報が分割応答および完了バスサイクルを開始するために必要である。図9に関連して以下でさらに詳細に説明するように、図7の分割応答ポインタレジスタ640は、特定のデータストリームの複数の応答それぞれを、図3のNPコマンドバッファ480に記憶されている元々の非ポストコマンドにリンクするために用いることができる。従って、図7の分割応答ポインタレジスタ640の各位置は、対応する応答コマンドのNPソースタグ値を表す。各位置は、その応答に対する元々の非ポストコマンドが記憶されている、図3のNPコマンドバッファ480内の位置のアドレスに対応するインデックス値とともにロードされる。上の例では、図7の分割応答ポインタレジスタ640中の位置0、1および2は、元々の非ポストコマンドが記憶されている、図3のNPコマンドバッファ480内の位置のアドレスに対応するインデックス値とともにロードされる。
処理は次に図8のステップ850に進み、複数の非ポストコマンドのそれぞれに対する制御コマンドが生成され、I/Oトンネル制御ロジックに送られる。さらに、ステップ860において、複数の非ポストコマンドのそれぞれが図3の仮想チャネルコマンドバッファ530内に記憶され、送信を待つ。図8のステップ870へと進み、I/Oトンネル制御ロジック内で調停回路によって、対応する各制御コマンドが選択されるとき、複数の非ポストコマンドのそれぞれが送信される。処理の説明は、ステップ880で終了する。
図9は、図3の周辺インターフェイス回路350の分割応答処理を説明する流れ図である。図3、図7および図9をまとめて参照して、処理は図9のステップ900で始まり、ステップ905に進んで、アップストリームの非ポストコマンドに対応する応答コマンドが図3のダウンストリーム部360で受信される。ステップ910に進んで、その応答コマンドに関連するデータセグメントが図3のデータバッファ400に記憶される。データセグメントの受信に応答して、図7のバッファ利用可能性レジスタ600が、応答コマンドとともに受信したNPソースタグ値に対応するビットをセットすることによって、アップデートされる。処理は図9のステップ915へと進み、応答コマンドのタグ値に対応する、図7の先頭レジスタ610中のあるビットの状態をチェックして、それがデータストリームの先頭パケットであるかどうかを確認する。もし、受信した応答コマンドが先頭パケットでないときは、処理は図9のステップ920へと進む。ステップ920では、コマンドが廃棄され、処理はステップ905へ戻って、他の応答コマンドを待つ。もしコマンド部分が先頭でないときは、それは廃棄される。その理由は、このデータストリームに関連する先頭パケットがこれからやってくると推測されるからであり、データセグメントだけが保存される。ステップ915に戻って、もし応答コマンドが先頭パケットであるならば、処理はステップ925へと進んで、応答コマンドは図3のタグ付けロジック380によって調停タグ値を割り当てられ、仮想チャネルコマンドバッファ390の応答チャネル内に記憶される。
図9のステップ930へ進んで、図3のアービトレーションロジック410が、仮想チャネルコマンドバッファ390からの勝利を得たコマンドの調停を行う。もし応答コマンドが勝利したコマンドでないときは、処理はステップ930にとどまり、調停を継続する。他方で、もし応答コマンドが勝利コマンドであるときは、処理はステップ935へ進む。ステップ935では、もしトランザクションがPCIトランザクションで、すべてのデータパケットが利用可能であると考えられるときには、処理はステップ940へと進んで、図7の先頭レジスタ610、次ポインタ620、末尾レジスタ630およびバッファ利用可能性レジスタ600がアップデートされて、I/Oストリームに関連するタグ値が図3のNPソースタグ付けロジック490によって再利用可能になる。さらに、元々の非ポストコマンドが図3のNPコマンドバッファ430から回収される。図9のステップ945に進んで、要求されたすべてのデータを含む完了バスサイクルが、図3の周辺バス560上で開始される。
ステップ935に戻って、もしトランザクションがPCI−Xトランザクションならば、処理はステップ960へ進んで、このデータストリームに関連するどのデータパケットが利用可能であるのかを決定する必要がある。これは、図7の次ポインタ620、末尾レジスタ630およびバッファ利用可能性レジスタ600の組み合わせをチェックすることによって達成できる。もし、すべてのデータパケットが到着していれば、処理は図9のステップ965へ進む。ステップ965において、図7の先頭レジスタ610、次ポインタ620、末尾レジスタ630、バッファ利用可能性レジスタ600および分割応答ポインタ640がアップデートされ、このデータストリームに関連するタグ値が図3のNPソースタグ付けロジック490によって再利用可能になる。図9のステップ970に進んで、完了サイクルが開始され、すべての応答データが要求している装置へ送られていることを示す。完了サイクルを開始するために、図3の周辺インターフェイス回路350がソースデバイスとなって、分割完了サイクルを開始することができる。分割完了サイクルを開始するために、図3のNPコマンドバッファ480内に記憶された現在の応答パケットに対応する元々の非ポストサイクルに含まれる情報が必要である。従って、分割応答のソースタグ値に対応する位置が図7の分割応答ポインタレジスタ640から読み出される。元々の非ポストサイクルに含まれる情報が読み出され、分割完了サイクルが開始される。さらに、元々の非ポストコマンドが図3のNPコマンドバッファ430から回収される。
ステップ960に戻って、データストリームに関連するデータパケットのいくつかのみが到着していて、そして利用可能なデータパケットが特定されているときは、処理はステップ975へと進み、図7の先頭レジスタ610、次ポインタ620、バッファ利用可能性レジスタ600および分割応答ポインタ640がアップデートされる。しかしながら、データパケットのいくつかのみが利用可能であるので、分割応答サイクルが生成される。分割応答トランザクションは、コマンドパケットおよびデータストリームの一部を形成するデータシーケンスをまとまって構成する、図7のデータバッファ400内に記憶された任意のデータセグメントを含む。従って、図9の先頭レジスタ610および次ポインタ620は、データストリームの新しい先頭および次パケットを反映するためにアップデートされる。ステップ985に進んで、図3の周辺バス560上で分割応答バスサイクルが開始される。上のケースと同様に、図3のNPコマンドバッファ480内に記憶された現在の応答パケットに対応する元々の非ポストサイクルに含まれる情報が、分割応答サイクルを開始するために必要である。従って、分割応答のソースタグ値に対応する位置が図7の分割応答ポインタレジスタ640から読み出される。元々の非ポストサイクルに含まれている情報が読み出され、分割応答サイクルが開始される。しかしながら、上のケースとは対照的に、分割応答バスサイクルを正しく開始するために、図3のバスインターフェイス回路470は、パケットのデータ数フィールド中の対応するカウントを含めることによって、分割応答コマンド内で送られるデータ量を通知される。このカウントは送信されるデータブロックの数を反映する。図9のステップ960に戻って、残りのデータパケットを含む後続の応答コマンドが受信される。データストリームの残り部分を形成する残りのデータパケットが、追加の分割応答サイクルを用いて要求しているデバイスに送られる。残りのデータが送られたとき、分割完了サイクルが開始され、元々の非ポストコマンドが図3のNPコマンドバッファ430から回収される。処理の説明は図9のステップ950で終了する。
図10は、グラフィクスバスに接続される周辺インターフェイス回路の一実施形態のブロック図である。周辺インターフェイス回路1000は、ダウンストリーム部1010と、アップストリーム部1020とを含む。さらに、周辺インターフェイス回路1000は、図2のI/Oトンネル140のようなI/Oトンネルに結合されるトンネルインターフェイス1030を含む。図10のダウンストリーム部1010では、トンネルインターフェイス1030はさらにコマンドバッファ1040に結合されている。コマンドバッファ1040は、タグ付けロジックユニット1050に結合される。タグ付けロジックユニット1050は仮想チャネルコマンドバッファ1060に結合される。仮想チャネルコマンドバッファ1060はアービトレーションロジックユニット1070に結合される。アービトレーションロジックユニット1070はバスインターフェイス回路1080に結合される。トンネルインターフェイス1030はさらにデータバッファ1100に結合され、データバッファ1100は次にバスインターフェイス回路1080に結合される。バスインターフェイス回路1080はグラフィクスバス1090に結合され、グラフィクスバス1090はグラフィクスアダプタ1095に結合される。好適な実施形態では、グラフィクスバス1080はAGP(Accelerated Graphics Port)バスである。もっとも、他の実施形態では、他のタイプのグラフィクスバスを利用可能であると考えられる。
アップストリーム部1020では、バスインターフェイス回路1080がNPコマンドバッファ1110および解析ロジック1170に結合されている。さらに、バスインターフェイス回路1080はデータバッファ1150に結合されている。NPコマンドバッファ1110は制御コマンドジェネレータ1140およびNPソースタグ付けロジックユニット1120に結合される。制御コマンドジェネレータ1140は仮想チャネルコマンドバッファ1160およびトンネルインターフェイス1030に結合される。仮想チャネルコマンドバッファ1160もトンネルインターフェイス1030に結合される。周辺インターフェイス回路1000はさらに制御ロジックおよび記憶ユニット1130を含み、制御ロジックおよび記憶ユニット1130はダウンストリーム部1010のデータバッファ1100に結合されている。制御ロジックおよび記憶ユニット1130はさらにNPソースタグ付けロジックユニット1120およびアップストリーム部1020のNPコマンドバッファ1110に結合されている。
図示した実施形態では、仮想チャネルコマンドバッファ1060および仮想チャネルコマンドバッファ1160はそれぞれ3つの分離したFIFO部を有し、それらは3つのタイプのトランザクション、ポスト(posted)、非ポスト(non-posted)および応答(response)に対応する。コマンドは、それらが受信された順番に、各FIFOに格納される。しかしながら、元のコマンドを生成した装置のタイプまたはバスに関する順序づけ規則を保持するために、異なったタイプのトランザクションの間で順番に関係なくトランザクションを処理しなければならない。これは、仮想チャネルコマンドバッファ1060およびアービトレーションロジック1070の組み合わせを含む、コマンドスケジューラによって実行される。
ある実施形態では、コマンドバッファ1040は深さ2(2-deep)のFIFOであって、図2のI/Oトンネル140から図10の仮想チャネルコマンドバッファ1090に送られたコマンドのバッファリング機構として機能する。トランザクションが周辺インターフェイス回路1000に対してダウンストリームに送られるとき、トランザクションのデータ部分はデータバッファ1100に記憶され、トランザクションのコマンド部分は仮想チャネルコマンドバッファ1060に記憶される。しかしながら、まずタグ付けロジック1050がコマンドに対してタグ値を生成し、それを付加するように構成されている。タグ値は、あるコマンドの、他の受信したコマンドに対する相対的な受信の順番に対応し、後続の調停サイクルで使用される。データおよびコマンドは、パケットに含まれるヘッダ情報によって同じパケットに属するものとして特定可能である。さらに、グラフィクスバスはI/Oノードの内部クロック速度よりも遅いクロック速度で動作しているので、データはI/Oノードのクロック速度を用いてデータバッファ1100にロードされ、異なったクロック速度、好適にはバスインターフェイス回路1080に接続されたグラフィクスバスのクロック速度でアンロードされる。さらに、データバッファ1100および仮想チャネルコマンドバッファ1060は、どちらのバッファ内のスペースも利用可能でないときには、そのことを任意のアップストリームロジックに通知するように構成できる。
いくつかのグラフィクスアダプタは元々PCIバスを用いてシステムメモリと通信するように実現されているので、グラフィクスアダプタ1095のようなグラフィクスアダプタはグラフィクスバス1090上にPCIバストランザクションを起動することが可能なPCIロジックを未だ含んでいる。さらに、システムプロセッサなどの他の装置から起動されるコンフィギュレーションコマンドが、グラフィクスバス1090を介してPCIコマンドを用いてグラフィクスアダプタ1095に送信される。従って、AGPバスサイクルをパケットコマンドに、パケットコマンドをAGPバスサイクルに変換するのに加えて、バスインターフェイス回路1080はさらにパケットコマンドをグラフィクスバス1090上で伝送するのに適したPCIバスサイクルに変換する。
コマンドのタイプ(つまり、ポスト、非ポストまたは応答)に応じて、コマンドは、仮想チャネルコマンドバッファ1060の各仮想チャネルFIFOに記憶される。これは、図3のダウンストリーム部360の処理と同様である。図10において、アービトレーションロジック1070は、仮想チャネルコマンドバッファ1060内のトランザクションの間で、第1に処理するトランザクション、第2に処理するトランザクション等々を調停するように構成されている。アービトレーションロジック1070はさらに、アービトレーションサイクルの間、タグ付けロジックユニット1050によって割り当てられたタグ値を使用することができる。さらに、PCI応答について、複数の応答パケットが同じデータストリームまたはシーケンスに属することがある。これは、共通の要求トランザクションからそれらが由来している場合である。ダウンストリームロジックで順番がバラバラにパケットが受信されたときであっても、与えられたデータストリームに属する応答パケットを正しい順番で届ける必要がある。この処理は、PCI応答について、図9に関連して行った説明と類似している。
図11の説明に関連して、以下に詳細に説明するように、ダウンストリーム部1010で受信されたAGP応答は、仮想チャネルコマンドバッファ1060には記憶されず、調停サイクルにも関与しない。その代わりにAGP応答は仮想チャネルコマンドバッファ1060のバッファをすり抜けて(バイパスし)、応答コマンドに関連したデータがバスインターフェイス1080に送られる。しかしながら、AGP応答もまた順序づけ規則の制約を受けるので、制御ロジックおよび記憶ユニット1130は、パケットを正しい順番で届けるために使用される、レジスタのようなロジックおよび記憶ユニットを含む。これについては、図12の説明に関連して、以下でさらに詳細に説明する。
グラフィクスアダプタ1095がグラフィクスバス1090上でAGPトランザクションを開始するとき、バスインターフェイス回路1080はそのトランザクションを、上述したようにコマンドおよびデータパケットを含むパケットトランザクションに変換する。データパケットはデータバッファ1150に記憶され、コマンドは仮想チャネルコマンドバッファ1160の各仮想チャネルに記憶される。仮想チャネルコマンドバッファ1160に記憶する前に、コマンドのタイプに応じて、解析ロジック1170がコマンドをいくつかのより小さなコマンドに分解する。例えば、もしグラフィクスアダプタ1095が、システムメモリから大きなデータブロックの読み出し(リード)を要求したとすると、解析ロジック1170は、メモリの同じブロックについての、より小さなブロック単位のいくつかの非ポスト・リードコマンドを生成する。一実施形態としては、これらのブロックはキャッシュラインの境界に沿って生成できると考えられる。続いて、新しく生成された非ポスト・コマンドのそれぞれを仮想チャネルコマンドバッファ1160に記憶することができ、元々の非ポストコマンドはNPコマンドバッファ1110に記憶できる。
一実施形態では、NPソースタグ付けロジック1120は、ダウンストリームロジックが特定の応答コマンドが関係するデータストリームを決定するのに用いることができる、タグ値を生成することができる。NPソースタグ付けロジック490は、アップストリームの非ポスト・コマンドに関するタグ値を生成することができる。一実施形態では、0から29までのタグ値が生成される。しかしながら、他の実施形態では、他の適切な数のタグ値を生成することが可能であると考えられる。
アップストリームコマンドが仮想チャネルコマンドバッファ1160内に記憶されると、制御コマンドジェネレータ1140が、図2のトランシーバ110および120によって生成される制御コマンドに類似した制御コマンドを生成する。図10で、制御コマンドジェネレータ1140はさらに、これらの制御コマンドをトンネル・インターフェイス1030を通じて、例えば図2のトンネル制御ユニット130などの制御ユニットに送ることができ、それによってアップストリームコマンドをI/Oトンネル140のスケジュールに入れることができる。図10のトンネルインターフェイス1030は、I/Oトンネル140と周辺インターフェイス回路1000内のロジックとの間のインターフェイスを提供するのに必要な汎用のバッファ回路を含んでいてもよい。
図11は、グラフィクス応答を処理する周辺インターフェイス回路の一実施形態の図である。簡略化と明確化のために、図10の回路要素に対応する回路要素には同じ参照符号を付ける。この周辺インターフェイス回路は、バイパス機構1200を含む。バイパス機構1200は、バスインターフェイス回路1080に結合されたデータバッファ1100を含む。バスインターフェイス回路1080はFIFOバッファ1105を含み、FIFOバッファ1105はターゲットバス1185およびソースバス1182に結合される。ソースバス1182およびターゲットバス1185はグラフィクスバス1090に結合される。バイパス機構1200はさらに仮想チャネルコマンドバッファ回路1060を含み、仮想チャネルコマンドバッファ回路1060はアービトレーションロジック1070に結合されている。アービトレーションロジック1070はさらにバスインターフェイス回路1080に結合されている。さらに、バイパス回路1200はAGPバイパス接続を有し、AGPバイパス接続は仮想チャネルコマンドバッファ回路1060の応答チャネルをバスインターフェイス回路1080に結合する。
図10に関連して上述したように、ダウンストリームの応答およびコマンドが受信されると、それらは仮想チャネルコマンドバッファ回路1060の各仮想チャネルFIFOに記憶される。図11で、調停サイクルが勝利を獲得したコマンドを決定すると、勝利を獲得したコマンドに関連したデータがFIFOバッファ1105に転送される。データがFIFO1105に存在する限り、バスインターフェイス1080はグラフィクスバス1090上での伝送に適したバスサイクルを起動する。バスサイクルが完了し、勝利を獲得したコマンドのそれぞれが仮想チャネルコマンドバッファ回路1060から回収されると、与えられた仮想チャネルFIFO内に残ったコマンドはFIFOの先頭方向に移動する。やがて、各コマンドは読み出され、コマンドがAGP応答コマンドでない限り、調停サイクルに関与する。
図示された実施形態では、バスインターフェイス回路1080は二つの分離したバス、ソースバス1182とターゲットバス1185とを有する。ソースバス1182およびターゲットバス1185は、グラフィクスバス1090とアップストリームノードとの間でパケットトランザクションを伝達するために、バスインターフェイス1080によって使用される。ソースバス1182は、グラフィクスバス1090に接続されたグラフィクスデバイスによって起動されたコマンドを伝達するのに使用される。ターゲットバス1185は、例えばシステムプロセッサなどの、グラフィクスバス1090上にはない他のデバイスによって起動されたコマンドを伝達するのに使用される。図11では、ソースバス1182およびターゲットバス1185はそれぞれコマンドチャネルおよび応答チャネル(図示せず)を有する。ソースバスのコマンドチャネルは、前記グラフィクスバス上のデバイスによって起動されたポストおよび非ポストコマンドなどのコマンドを伝達するのに使用される。ソースバスの応答チャネルは、グラフィクスバス上にはないデバイスによって生成された応答コマンドであるが、グラフィクスバス上のデバイスによって起動されたポストおよび非ポストコマンドに対応するものを伝達するのに用いられる。さらに、ターゲットバスのコマンドチャネルは、前記グラフィクスバス上にないデバイスによって起動されたポストおよび非ポストコマンドなどのコマンドを伝達するのに使用される。ターゲットバスの応答チャネルは、グラフィクスバス上のデバイスによって生成された応答コマンドであるが、グラフィクスバス上にないデバイスによって起動されたポストおよび非ポストコマンドに対応するものを伝達するのに用いられる。
トランザクションを伝達するのに二つの分離したバスが用いられるので、ダウンストリームのAGPおよびPCI応答コマンドはソースバス1182の応答チャネル上で伝達され、すべてのダウンストリームのポストまたは非ポストコマンドはターゲットバス1185上で伝達される。例えば、例として、非ポスト・リードコマンドのようなAGPトランザクションは、グラフィクスバス1090に接続されたグラフィクスデバイスによって起動されるとする。このトランザクションはバスインターフェイス回路1080によってパケットに変換され、ソースバス1182のコマンドチャネル上を図10のアップストリーム部1020へ伝送される。コマンドは、図10のアップストリーム部1020からホストノード(図示せず)へ処理のために送られる。その後、以前のAGPコマンドに対応するAGP応答が仮想チャネルコマンドバッファ回路1060において受信される。ソースバス1182の応答チャネルおよびターゲットバス1187の分離したコマンドチャネルの利用可能性に起因して、AGP応答は仮想チャネルコマンドバッファ回路1060の応答チャネルには記憶されず、それによってどの調停サイクルにも関与しない。AGP応答は仮想チャネルコマンドバッファ1060の応答チャネルバッファをバイパスすることが許されているので、バスインターフェイス回路1090に伝送される。仮想チャネルコマンドバッファ回路1060内に記憶された他のすべてのタイプのコマンドは調停サイクルに関与する。これは、グラフィクスバス1090に接続されたグラフィクスデバイスによって起動された非ポスト・リードコマンドのようなPCIトランザクションとは対照的である。後から到着したダウンストリームのPCI応答は、仮想チャネルコマンドバッファ回路1060の応答チャネルバッファ内に記憶され、どの調停サイクルにも関与する。PCIの順序付け規則がデータストリーム間のトランザクション並び替えを許可し、AGP順序付け規則がそれを許可しないので、PCI応答をスケジュールに入れることが必要である。
図12に、グラフィクス応答の並び替えを行う装置の一実施形態を示す。簡略化と明確化のために、図10および図11に示した回路要素に対応する回路要素には同じ参照符号を付ける。このトランザクション並び替え装置はデータバッファ1100を含み、データバッファ1100はポインタ1101と、制御ロジックおよび記憶ユニット1130とを有する。データバッファ1100は、制御ロジックおよび記憶ユニット1130と、バスインターフェイス回路1080とに結合される。制御ロジックおよび記憶ユニット1130はデータ利用可能性記憶ユニット1135を含む。図示された実施形態においては、データ利用可能性記憶ユニット1135はレジスタである。しかしながら、他の実施形態では、例えばランダム・アクセス・メモリなどの任意の適切な記憶装置を使用可能であることが考えられる。
上述したように、AGP応答などのグラフィクス応答は、PCIおよびPCI−X応答とは異なり、それらがどのデータストリームに属するかには関係なく、それらが要求された順番で発信元の装置にのみ送り戻される。従って、ダウンストリームのAGP応答は、それらがデータバッファ1100で受信された順番とは異なる順番で発信元のデバイスに送られる。例えば、第1要求がアップストリームに送られ、それが第1データストリームに関連づけられるとする。第2データストリームに関連づけられる第2要求が後に続く。しばらくして、第1データストリームに対応する応答データパケットの一部分のみが受信され、データバッファ1100に記憶される。しかし、第2データストリームのすべての応答データパケットが受信され、データバッファ1100に記憶される。第2データストリームからのデータパケットは、第1データストリームからの残りのデータパケットが受信されるまでは送信されず、続いてバスサイクルに変換するためにバスインターフェイス1080に転送される。
上述の実施形態では、データバッファ1100はランダム・アクセス・メモリユニットであって、少なくとも29の記憶位置を含む。29の記憶位置のそれぞれは、図10のNPタグ付けロジック1120によってコマンドに割り当てられる29個のタグ値に対応する。各データパケットが到着すると、受信されたデータパケットのタグ値に対応する位置に記憶される。図12において、ポインタ1101は、バスインターフェイス1080に送られるべき次の順序のAGPデータセグメントのデータを含んでいると予想される位置を指す。さらに、データ利用可能性レジスタ1135は、図10のNPタグ付けロジック1120によってコマンドに割り当てられる29個のタグ値にそれぞれ対応する少なくとも29ビットを含む。図12のデータ利用可能性レジスタ1135は、どのデータパケットが受信されたかを示すために用いられ、ポインタ1101はデータバッファ1100内の次のAGP応答位置を指す。例えば、タグ値0,1,27を持つデータパケットが受信されたとする。このデータパケットは、データバッファ1100内の位置番号0,1および27にそれぞれ記憶される。従って、データ利用可能性レジスタ1135のビット番号0,1および27がセットされ、どのデータが利用可能かを表示する。一方、ポインタ1101は、次の送信対象のAGPデータ、タグ値0に対応する位置を指す。他の実施形態では、データ利用可能性レジスタ1135はデータが利用可能であることを(ビットを)クリアすることで表示することもできることが考えられる。従って、ダウンストリームのAGP応答が受信されるごとに、対応するデータがデータバッファ1100に記憶され、データ利用可能性レジスタ1135は、どのデータパケットがデータバッファ1100に記憶されているのかを反映させるためにアップデートされる。図12の機構の動作については、図13と関連して、以下でさらに詳細に説明する。
図13は、グラフィクス応答のためのトランザクション並び替え機構の一実施形態の動作を示す流れ図である。図10、図12および図13をまとめて参照して、処理は図13のステップ1300から始まる。ステップ1300において、システムの初期化に伴い、図12のポインタ1101が、所定の値、例えば0などに初期化される。ポインタ1101の初期化に関連して、図10のNPタグ付けロジック1120も同じ所定値に初期化され、それによってタグ付けロジックとポインタとを同期させる。これによって、図12のポインタ1101は、データバッファ1100内のデータが読み出される次の位置を指している。従って、初期化後は、バスインターフェイス回路1080に送られる最初のAGP応答は0のタグ値を持つ。本実施形態では初期値として0を用いたが、他の実施形態では、その他の適切な初期値を用いることができると考えられる、ことに注意してもらいたい。
図13のステップ1310に進んで、AGP応答コマンドが図10のダウンストリーム部1010から受信され、その応答に関連したコマンドヘッダ中の一以上の特定ビットによって、AGP応答であると特定される。図13のステップ1320へ進んで、その応答のデータ部分が、図12のデータバッファ1100のその応答のタグ値が対応する位置に記憶される。さらに、データ利用可能性レジスタ1135の対応するビットがセットされて、データバッファ1100内のその位置にデータが存在していることを示す。他の実施形態では、データの存在を示すために、データ利用可能性レジスタ1135の対応するビットをクリアすることも考えられる。図13のステップ1330に進んで、図12のポインタ1101がデータバッファ1100内の次のAGP応答データが読み出される位置を指しているので、新しく受信したデータセグメントのタグ値の表示がポインタ1101によって提供され、そのタグ値を持つデータが利用可能であるかについてのデータ利用可能性レジスタ1135からの表示と比較される。もし合致しなければ、その応答のコマンド部分は廃棄され、処理は図13のステップ1310へ戻る。ステップ1330へ戻って、もし合致すれば、処理はステップ1340へ進んで、図12のポインタ1101によって指された位置に記憶されているデータがデータバッファ1100から読み出され、ポインタ1101が増分(インクリメント)される。図13のステップ1350へ進んで、図12のバスインターフェイス回路1080によってバスサイクルが起動され、これによって要求しているデバイスに応答データを送る。
図13のステップ1360に進んで、図12のポインタ1101が増分され、データバッファ1100内の次のAGP応答データが読み出される位置を指しているので、対応するタグ値の表示が提供され、そのタグ値を持つデータが利用可能であるかについてのデータ利用可能性レジスタ1135からの表示と比較される。もし合致すれば、処理は図13のステップ1340へ戻って、図12のデータバッファ1100からデータが読み出され、ポインタ1101が増分される。再び図13のステップ1350で、図12のバスインターフェイス回路1080によってバスサイクルが起動され、要求しているデバイスに次の応答データを送る。図13のステップ1360に戻って、もし合致せず、次のデータが利用可能でないことを示しているときは、処理はステップ1310へ戻って、次のAGP応答を待つ。
このプロセスは、受信したAGP応答のそれぞれについて続けられる。従って、AGP応答が受信されたとき、もしAGP応答がそれらが元々要求されたのとは異なった順番で受信されると、順番がバラバラになっている応答コマンドのそれぞれは無視され、データは記憶されて、正しい順番のAGP応答を待つ。
上記開示を完全に理解した当業者には、様々な変形物、修正物が明白となる。添付の特許請求の範囲は、そのようなすべての変形物および修正物を包含するように解釈されることを意図したものである。