(57)【特許請求の範囲】
【請求項１】
少なくとも１つのマスタ装置と少なくとも１つのスレーブ装置とを有するコンピュータ・システム中のトランザクション・フローを制御するための制御システムであって、
前記制御システムは、
前記少なくとも１つのスレーブ装置のための前記スレーブ受信待ち行列と、
トランザクション要求の転送を処理するために前記少なくとも１つのマスタ装置と前記少なくとも１つのスレーブ装置とに結合されたシステム・コントローラを含む相互接続と
を更に含み、
前記システム・コントローラは、
前記スレーブ受信待ち行列によって処理され得るトランザクション要求の最大数を記憶するための相互接続機構レジスタであって、前記トランザクション要求の最大数は制御システムの初期化時に前記システム・コントローラによって識別される、相互接続機構レジスタと、
前記スレーブ受信待ち行列中の未処理要求のカウントを保持するための相互接続カウンタと、
前記少なくとも１つのマスタ装置からのトランザクション要求を受信するためのシステム・コントローラ待ち行列モジュールと
を含み、
前記スレーブ受信待ち行列によって処理され得る前記トランザクション要求の最大数よりも前記スレーブ受信待ち行列中の未処理要求のカウントが小さいときのみ、前記システム・コントローラは前記少なくと１つのスレーブ装置へトランザクション要求を発行するように構成されている、
ことを特徴とする前記制御システム
【請求項２】
前記システム・コントローラ待ち行列モジュールは、
前記少なくとも１つのマスタ装置からトランザクション要求を受信するためのシステム・コントローラ命令待ち行列ＳＣＩＱと、
前記少なくと１つのスレーブ装置に対して非発行のトランザクション要求を行列待ちするためのシステム・コントローラ出力待ち行列ＳＣＯＱと、
を含む、
ことを特徴とする請求項１に記載のシステム・コントローラ。
【請求項３】
前記少なくとも１つのマスタ装置は、
前記ＳＣＩＱによって操作され得るトランザクション要求の最大数を記憶するためのマスタ構成レジスタと、
前記ＳＣＩＱにおける未処理要求のカウントを保持するためのマスタ・カウンタと
を含み、
前記ＳＣＩＱにおける未処理要求の前記カウントが前記ＳＣＩＱによって処理され得る前記トランザクション要求の最大数よりも小さいときのみ、前記少なくとも１つのマスタ装置は前記ＳＣＩＱへトランザクション要求を送るように構成されている、
ことを特徴とする請求項２に記載の制御システム。
【請求項４】
前記少なくとも１つのマスタ装置は、前記制御システムの初期化時に、前記ＳＣＩＱによって操作され得る前記トランザクション要求の最大数を識別するための論理コンポーネントを含む、
ことを特徴とする請求項３に記載の制御システム。
【請求項５】
前記相互接続が、前記少なくとも１つのマスタ装置と前記少なくとも１つのスレーブ装置との間に結合されたデータ・パス回路を、更に含む、
ことを特徴とする請求項４に記載の制御システム。
【請求項６】
少なくとも１つのマスタ装置と少なくとも１つのスレーブ装置とを有する制御システムにおいてトランザクション要求の転送を処理する方法であって、
前記少なくとも１つのスレーブ装置に関連したスレーブ受信待ち行列によって処理され得るトランザクション要求の最大数を識別するために前記制御システムを初期化するステップと、
前記少なくとも１つのマスタ装置からのトランザクション要求を受信するステップと、
前記スレーブ受信待ち行列中の未処理要求のカウントを識別するステップと、
前記スレーブ受信待ち行列によって処理され得る前記トランザクション要求の最大数と前記スレーブ受信待ち行列中の未処理要求の前記カウントを比較するステップと、そして
前記スレーブ受信待ち行列によって処理され得る前記トランザクション要求の最大数よりも前記スレーブ受信待ち行列中の未処理要求の前記カウントが小さいときのみ、前記少なくとも１つのスレーブ装置へ前記トランザクション要求を発行するステップと、
を含むことを特徴とする方法。
【請求項７】
命令待ち行列ＳＣＩＱで前記トランザクション要求の受信に応答して、前記スレーブ受信待ち行列に関連した出力待ち行列ＳＣＯＱ中の前記トランザクション要求を行列待ちするステップ、
を含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記少なくとも１つのマスタ装置で前記命令待ち行列ＳＣＩＱ中の未処理要求のカウントを保持するステップであって、
前記制御システムを初期化するステップが前記スレーブ受信待ち行列によって処理され得るトランザクション要求の最大数を識別し記憶するステップ
を含むステップ、
を更に含むことを特徴とする請求項６に記載の方法。
【請求項９】
前記スレーブ受信待ち行列によって処理され得る前記トランザクション要求の最大数よりも前記スレーブ受信待ち行列中の未処理要求の前記カウントが小さいと識別することに応答して、前記少なくとも１つのマスタ装置からの前記トランザクション要求は受信される、
ことを特徴とする請求項８に記載の方法。
【請求項１０】
前記トランザクション要求は既に実行されてしまっているという通知を前記少なくとも１つのスレーブ装置から受信するステップと、
前記通知の受信に応答して、前記スレーブ受信待ち行列中の未処理要求のカウントを減ずるステップと、
を更に含むことを特徴とする請求項６に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パケット交換マイクロプロセッサ・ベースのコンピュータ・システム（単一プロセッサ）、またはそのようなコンピュータ・システムのネットワーク、またはマルチプロセッサ・システムでのフロー制御用の新規の方法および装置に関する。
【０００２】
【従来の技術】
無駄な動作を防止しコンピュータ・システムが効率的に動作するのを助けるには、システム中のマイクロプロセッサ・トランザクション（データまたは命令、あるいはその両方を含む）の信頼できる合理的なフロー制御が必要である。コンピュータ・システム中の通常のパケット交換バス・インタフェースは、フロー制御のために否定応答、またはバックプレッシャ技術を使用する。これは、マスタがスレーブによる否定応答のために再試行トランザクションを発行するか、あるいはシステム資源可用性の動的な変化の関数としてバックプレッシャを変えるための複雑なハンドシェーク信号を発行する必要がある。
【０００３】
これらの方法は共に、実施が複雑であり、ハンドシェークを実行し、バスに関する再調停を行い、相互接続資源を再スケジューリングすることなどの余分のクロック・サイクルを費やすことによってバス待ち時間を増加させる。
【０００４】
ある種のシステムは、すべての受信待ち行列を、受信することが予想される最大数のトランザクションを含むのに十分大きなサイズのものにすることによって、動的（負）フィードバック（たとえば否定応答）を完全に回避する。これは、スレーブがより高価で基本的にスケジューリング不能なものになるという欠点がある。特に、それぞれ、複数の要求を行う複数の要求源があるときにスケジューリング不能となる。この手法は、受信待ち行列が非常に長くなり、システム待ち時間に悪影響を与えることがある。
【０００５】
プロセッサ速度の改良速度が引き続きメモリ速度の改良速度を上回っているので、相互接続待ち時間を短縮することは、性能を大幅に向上させるうえでますます重要になっている。トランザクション受信待ち行列のサイズを増加させることによって複雑さ、寸法、ハードウェア・コストを増大させることなしに、負のフィードバックを使用しなくて済むシステムを得て、その手法に関連する非効率を回避することが特に有用である。
【０００６】
通信スイッチ設計やデータ通信プロトコルなど、パケット交換システム用の様々なフロー制御技術が開発されている。大部分の既存の設計では、（１）各下流側ノードが上流側ノードへフィードバック信号を送信するリンク・バイ・リンク・ベースで、あるいは（２）２つの通信端末点しかフロー制御に参加せず、宛先からのフィードバックがあるかないかが、フローを制御するために送信側によって使用される端末間ベースで、送信器を停止させるためにある形態の動的フィードバック信号を使用する。提案されている他の方法は、速度ベースのフロー制御であり、この場合、送信側は、合意されている率で送信速度を測定し、下流側の任意の点によって送信側へ送信される動的フィードバック信号に基づいて送信速度を変える。大部分のパケット交換コンピュータ・システムは、リンク・バイ・リンク・フロー制御プロトコルを使用する。
【０００７】
リンク・バイ・リンク・フロー制御では、下流側の受信側は、受信側のバッファ満杯状態または輻輳状態を示すフィードバック信号を上流側の送信側に対してアサートする。フィードバック信号は、下記の形態のうちの１つをとることができる。
（ａ）送信側にしばらくの間送信を停止させ、再試行させるパルス信号
（ｂ）信号がアサートされている間、送信側が送信を行わないようにさせるレベル信号
（ｃ）それぞれ、送信側に送信を停止させ、再開させる、宛先からの停止・開始２メッセージ・フィードバック（大部分の既存のパケット交換システムはこの方法を使用している）。
【０００８】
リンク・バイ・リンク・フロー制御は、下流側の受信側が上流側の送信側に発行するクレジットを介して動作することもでき、この場合、送信側は、クレジットで許可された数の要求のみを送信し、次いで、下流側の受信側によって送信側に新しいクレジットが発行されるまで停止する。下流側の受信側は、受信側の受信待ち行列容量と、受信側が検出した他の輻輳条件に基づいて、上流側の送信側に発行されるクレジットの数と周波数を動的に変える。そのようなシステムの詳細については、Ｈ．Ｔ．Ｋｕｎｇ等の「Ｔｈｅ  ＦＣＶＣ  Ｐｒｏｐｏｓａｌ  ｆｏｒ  ＡＴＭ  Ｎｅｔｗｏｒｋｓ」，Ｐｒｏｃ．１９９３  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆ．ｏｎ  Ｎｅｔｗｏｒｋ  Ｐｒｏｔｏｃｏｌｓ，１１６ページないし１２７ページを参照されたい。
【０００９】
リンク・バイ・リンク・フロー制御は、下流側待ち行列を受信することが予想される最大数または項目を収容するのに十分な大きさにすることによって行うこともできる。したがって、項目（要求）を失うことはなく、上流側の送信側に送信を停止させる必要はない。これは、高価なスケーリング不能な解決策である。
【００１０】
宛先から発信元へのフィードバックがあるかないかを介する端末間フロー制御は、制御・輻輳管理用のＴＣＰスライディング・ウィンドウ・プロトコルと、ＡＴＭネットワークにおける輻輳制御用のＢＥＣＮ／ＦＥＣＮ提案で実施されている。
【００１１】
フロー制御の１つの手法は、マスタ装置を使用して、相互接続先とのインタフェースでの待ち行列長さの定義済み合意を用いてマスタ装置が発行できるトランザクションの数を追跡し、相互接続先が、トランザクションが完了するたびにフロー制御手段としてＡＣＫ（肯定応答）を発行することである。この手法を使用しているプロトコル（ＨＤＬＣおよびＳＤＬＣ）では、送信側は、パケットの最終受信側の機能（特に、待ち行列サイズ）に関する情報を有さない。また、そのようなプロトコルは、待ち行列長さを事前に決定しておくことを必要とし、したがってスケーリングすることができない。また、各プロセッサ（またはマスタ）が他のすべてのプロセッサ（またはマスタ）のすべてのトランザクションを追跡する必要があるので、この手法は多重処理環境には適していない。
【００１２】
クレジット・ベースの方式では、クレジットは、新しいパケットを送信できるようにするために下流側の受信側によって発行される。そのような方式は、（１）クレジットが非請求フィードバック・パケットとしてあるスイッチから他のスイッチに頻繁に発行され、（２）クレジットが動的輻輳状態に基づいて変えられるという欠点を有する。
【００１３】
【発明が解決しようとする課題】
したがって、単一プロセッサ環境、マルチプロセッサ環境、ネットワーク化環境に適応し、効率的でスケーリング可能で費用有効なパケット交換トランザクション・フロー制御を可能にする新規の装置および方法が必要である。
【００１４】
【課題を解決するための手段】
本発明は、初期設定時にシステム中のすべての待ち行列の総待ち行列サイズを判定し、マスタ（たとえばプロセッサ）がその総数の範囲内の数のトランザクション要求しか送信できないようにする方法および装置を使用する。本発明のシステムは、システム相互接続待ち行列を要求待ち行列、読取りデータ待ち行列、書込みデータ待ち行列として分類し、要求とデータの両方の転送規則を粗に結合された事象として判定する。１つまたは複数のマスタ（たとえば、マイクロプロセッサ）とスレーブ装置、たとえば入出力装置、ディスク・ドライブ、メモリなどとの間に相互接続（システム）コントローラが接続される。この相互接続コントローラは各マスタごとの待ち行列を含み、各マスタは、そのマスタからコントローラへの未処理のトランザクション要求の数を示すトランザクション・カウンタを含む。相互接続コントローラは、各下流側スレーブごとの要求待ち行列と書込みデータ待ち行列の両方を含み、かつコントローラからそのスレーブへの未処理の要求の数とあるマスタからそのスレーブへの書込みデータ転送の数とを含むトランザクション・カウンタも含む。
【００１５】
マスタおよびコントローラは、それぞれのカウンタが、下流側の対応する要求待ち行列またはデータ待ち行列が満杯であることを示すときに、トランザクション要求を下流側へ発行する（あるいは書込みデータ転送要求を開始する）ことを妨げられる。トランザクションが完了すると（たとえば、要求されたデータ読取りを受信し、あるいはスレーブが書込みデータを使い尽くしたとき）、関連するカウンタは、トランザクション待ち行列または書込みデータ待ち行列中のある場所が利用可能であることを示すように減分される。
【００１６】
したがって、マスタまたはシステム・コントローラが受信側が有する空間よりも多くのトランザクションまたはデータを送信することを防止することによって、待ち行列オーバフロー状態および輻輳状態が回避される。データ転送が完了したことを通知すると共に下流側待ち行列中の１つまたは複数の利用可能な空間についてマスタに通知するためにハードウェア・ハンドシェークが使用される。したがって、ハンドシェークは、クレジット・ベースの方式の場合と同様に非請求信号であり、この信号は動的輻輳に基づくものではない。
【００１７】
システム中の最大待ち行列サイズは、初期設定時に決定され、したがって、マスタがアプリケーションを実行する前に知られる。したがって、マスタおよびコントローラは常に、すぐ下流側の待ち行列中の利用できるスポットの数に関する情報を有する。これは、最大待ち行列サイズが事前に分からず、送信側がそれ自体に発行されたクレジットを追跡することしかできないクレジット・ベースの方式とは対称的である。初期設定シーケンスは、（たとえば、ブートＰＲＯＭによる）ソフトウェア駆動であり、待ち行列のサイズおよび深さは、このシーケンスによって決定される。このシーケンスは、システム自体を（それぞれの異なる待ち行列サイズを有する）それぞれの異なるスレーブ向けに再構成し、あるいは機能していない待ち行列要素を削除するシステムの適応性を与える。
【００１８】
このフロー制御システム中の（アドバンスまたはオーバフロー）フィードバック信号をなくすると、余分なハンドシェーク、資源に関する再スケジューリングまたは再調停、マスタによる再試行がなくなるので、インタフェース待ち時間が短縮される。したがって、プロセッサの数に応じて容易にスケーリングできるより簡単な設計を使用することができ、待ち行列のサイズが小さくなるためにトランザクションを失う恐れなしに、価格／性能に関して考慮すべき点および所望の帯域幅の必要に応じてスレーブ待ち行列を縮小することができる。さらに、必要に応じて、単に相互接続中のそれぞれの待ち行列およびバッファを縮小または拡大（サイズ設定）することによって、小型で廉価なシステムから大型で高価なシステムまで様々なシステムを同じモジュールＣＰＵおよび入出力インタフェースから設計することができる。相互接続コントローラは、所与の範囲の待ち行列サイズを有する所与の１組のマスタおよびスレーブに適応するように設計されるので、マスタおよびスレーブを再設計する必要はない。システム・コントローラが比較的廉価なので、システムのコストをそれほど増加させずにいくつかの異なるコントローラ設計を使用することができる。このことは、プロセッサおよびスレーブ装置が修正を必要とする場合には当てはまらない。
【００１９】
飽和状態の下でシステムが正しく動作するかどうかを試験しその妥当性を検査するために必要な全体的なシステム設計および作業（フロー制御が重要であるとき）も大幅に簡略化される。
【００２０】
【発明の実施の形態】
図１は、本発明を組み込んだコンピュータ・システム１０のトップレベル・ブロック図である。この図は、Ｂｉｌｌ  ｖａｎ  Ｌｏｏ，Ｓａｔｙａ  Ｎｉｓｈｔａｌａ  ａｎｄ  Ｚａｈｉｒ  Ｅｂｒａｈｉｍの「ＵＰＡ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ａｒｃｈｉｔｅｃｔｕｒｅ」に完全に記載されている出願人の新規のＵｌｔｒａｓｐａｒｃ  Ａｒｃｈｉｔｅｃｔｕｒｅの特定の実施態様に関するものである。「Ｍｅｔｈｏｄ  ａｎｄ  Ａｐｐａｒａｔｕｓ  ｆｏｒ  Ｆｌｏｗ  Ｃｏｎｔｒｏｌ  ｉｎ  ａ  Ｐａｃｋｅｔ−Ｓｗｉｔｃｈｅｄ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ」と題する出願人による関連特許出願の付録ＡとしてＳｕｎ  Ｍｉｃｒｏｓｙｓｔｅｍｓ，Ｉｎｃ．のＵＰＡ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ａｒｃｈｉｔｅｃｔｕｒｅの内部リリース・バージョン１．１が提出されている。この特許出願は、１９９５年３月３１日に米国特許庁に出願され、ＵＰＡアーキテクチャの多数の広範囲の特徴について説明しており、引用によって本明細書に編入されている。
【００２１】
本発明は、新規のシステム相互接続アーキテクチャと、この相互接続を使用してマスタ装置とスレーブ装置またはメモリ装置との間のトランザクション要求およびデータ・フローを制御する、システム相互接続アーキテクチャに付随する新規の方法を使用する。
【００２２】
図１で、システム１０は、ＵＰＡモジュール２０と相互接続ネットワークまたは相互接続モジュール２５とを含む。相互接続ネットワークまたは相互接続モジュール２５は、本発明の異なる実施形態では、データ経路に接続することも、あるいは接続しないこともある。ＵＰＡモジュールは、プロセッサ３０、グラフィックス装置４０、入出力装置５０などの装置を含むことができる。他の装置を含めることができ、それらの装置は、本発明のためのマスタ装置として働くことができる。マスタ・インタフェースは、トランザクション要求を開始するエンティティ用のインタフェースとして定義される。そのようなマスタの例は、メモリ要求を行うＣＰＵや、ＤＭＡ要求を行う入出力チャネルおよびブリッジである。
【００２３】
一般に、本出願では、マスタはプロセッサとして例示されている。しかし、マスタは、マイクロプロセッサを含むか、それとも含まないかにかかわらず、任意のトランザクション要求装置でよい。同様に、「スレーブ」は、本明細書では、メモリ装置と非メモリ装置の両方を含め、かつそれ自体がマスタとして働くことができるプロセッサや入出力コントローラなどの装置を含め、トランザクション要求を受け入れることができる任意の装置でよい。
【００２４】
本発明では、「トランザクション」は、マスタによって発行され、その後、すぐ下流側の受信側から肯定パケット（選択された実施態様に応じて必ずしも満杯のパケットではない）が発行される要求パケットとして定義される。要求パケットにデータ転送が伴っても、あるいは伴わなくてもよく、データ転送は要求パケットと同じ１組のワイヤ上で行うことも、あるいは別々のデータデプス・ワイ上で行うこともできる。これについては、下記に図５ないし図８に関して詳しく説明する。
【００２５】
ＵＰＡポート６０は、モジュール２０をシステム相互接続コントローラ（ＳＣ）７０に結合し、システム相互接続コントローラは、１つまたは複数のスレーブ・インタフェース８０に結合される。スレーブ・インタフェースは、メモリ（メイン・メモリなど）用のインタフェースでも、または入出力インタフェースでも、またはグラフィックス・フレーム・バッファでも、または他の相互接続ネットワークとの１つまたは複数のブリッジでも、または場合によっては、ＣＰＵが受信する実行すべきトランザクションでもよい。一般に、実行を求めるトランザクション要求を受け入れる装置には、従来型のメモリ装置８５や標準入出力装置９５など、本発明によるスレーブ・インタフェース８０を与えることができる。
【００２６】
好ましい実施形態では、システム・コントローラ７０およびＵＰＡインタフェース６０が主プロセッサ・チップ上に保持され、スレーブ・インタフェースがマザーボード上に保持される。ただし、多数の変形例が可能である。さらに一般的には、各マスタ（プロセッサか、それともその他の装置かにかかわらず）はＵＰＡマスタ・インタフェースであり、各スレーブはＵＰＡスレーブ・インタフェースを含む。各ケースにおいて、システム・コントローラはシステムと共に存在する。
【００２７】
相互接続モジュール２５にはデータ経路クロスバー９０も含まれ、スレーブ・インタフェース、システム・コントローラ７０、ポート６０に結合される。データ経路クロスバーは、簡単なバスでも、より複雑なクロスバーでもよい（ＵＰＡポート６０は、ＵＰＡモジュール２０の一部として構成することも、あるいは相互接続モジュール２５の一部として構成することもできる）。データ経路クロスバー９０は、後述のようにデータを送信し書き込むために使用される。
【００２８】
ユーザ・インタフェース、データ出力などのために、システム１０の一部を形成する、１つまたは複数の従来型メモリあるいはその他の記憶装置８５および１つまたは複数の入出力（Ｉ／Ｏ）装置９５が設けられる。このような様々なスレーブ装置には、ＲＡＭ、ＲＯＭ、ディスク・ドライブ、モニタ、キーボード、トラック・ボール、プリンタなどを含めることができる。これらのスレーブ装置はスレーブ・インタフェース８０を介して相互接続モジュール２５に結合される。「スレーブ」の語はこの場合、そのような装置が１つまたは複数のプロセッサからの要求を受け入れ、その要求を満たすことしか意味しない。
【００２９】
相互接続とは一般に、二地点間リンク、単一のバスまたは複数のバス、交換ファブリクスなど、マスタおよびスレーブを相互接続するいくつかの異なる標準通信トポロジーの形をとることができる。この相互接続では、いくつかの従来型機構のうちのどれかを使用し、１つまたは複数の単一経路を使用してトランザクション要求をあるスレーブに切り替えることができ、交換は、トランザクション要求パケットに含まれるアドレス情報、または必ずしも要求パケットの内容に依存するわけではない他のプロトコルに基づいて行うことができる。相互接続には、任意の量のバッファリングが存在しても、あるいはバッファリングがまったく存在しなくてもよい。
【００３０】
図１（および図１Ａ、下記の議論を参照されたい）に示した発明の好ましい実施形態は、すべてのマスタおよびすべてのスレーブに接続され、したがって、システム要求およびデータ・トラフィックから完全に見える中央コントローラを有する。代替実施形態では、分散コントローラが使用され、その場合、可視性を維持することが望ましく、ある種の設計では、最大容量待ち行列サイズが必要になる。
【００３１】
図１Ａは本発明によるシステムのより汎用的なブロック図を示す。この場合、複数のマスタがある（３つの例示的なマスタＭ１ないしＭ３を図示した）。これらのマスタは、ある種の状況ではスレーブとして働くことができる。たとえば、Ｍ１がプロセッサであり、Ｍ３が入出力コントローラである場合、そのＭ３は多くの場合、後述の初期設定手順の場合と同様に、Ｍ１のスレーブとして働く。一方、ＤＭＡ（直接メモリ・アクセス）動作時には、入出力コントローラＭ３は、図１ＡでＭ１．．．Ｍ２として表された１つないし多数のメモリのうちのどれかなどのメモリ装置のマスタとして働く。
【００３２】
スレーブ装置Ｓ１．．．Ｓ２（１つでも、あるいは複数でも、あるいは多数でもよい）も設けられ、マスタ、メモリ、スレーブは、図１でシステム・コントローラ７０がマスタおよびスレーブに結合されるのと同様にシステム・コントローラ７５を介して結合される。ＳＣ７５は、図１のデータ経路クロスバー９０の場合と同様に、データ経路制御バス７７を介してデータ経路クロスバー（または相互接続）９２に結合される。制御バス７７は通常、システム・バスやデータ・バスよりも幅が狭く、たとえば、出願人のシステムの好ましい実施形態では、データ経路の幅は７２ビットまたは１４４ビットであるが、ＳＣデータ経路制御バスの幅は８ビット程度でよい。
【００３３】
前記で指摘したように、ＳＣ７５は、すべてのマスタ、スレーブ、メモリに対して完全な可視性を有する。システム・コントローラは、データ経路上に存在する必要はないが、データ経路を制御し、かつ見ることができるようにすべきである。
【００３４】
図１Ａ中のＳＣ、マスタ、メモリ、スレーブは、図のアドレス／制御（Ａ／ｃｔｒｌ）線によって相互接続される。アドレス／制御線は、固有の（専用二地点間リンク）アドレス／制御線であっても、あるいはバス接続することもできる。また、データをバス接続することも、あるいはスイッチ接続することもできる。アドレス／制御およびデータ線／バスは、共用アドレス／データ・バスを設けることなどによって同じリンクを共用することができる。
【００３５】
ブートＰＲＯＭ９４はバスによって入出力コントローラＭ３に接続される。入出力コントローラは、始動時にブートＰＲＯＭを読み取り、システムを従来の方法で初期設定（たとえば、ＣＰＵ、レジスタなどを初期設定）し、本発明の待ち行列、レジスタ、カウンタを初期設定する。初期設定手順については下記に図５に関して詳しく説明する。
【００３６】
図２は、特定の実施形態中の相互接続モジュール１００を示す。この場合、２つのマスタ・インタフェース（または「マスタ」）１１０および１２０、単一のシステム・コントローラ（ＳＣ）１３０、２つのスレーブ・インタフェース（または「スレーブ」）１４０および１５０、データ経路クロスバー１５５が使用される。原則的に、任意の数のマスタおよびスレーブが存在することができる。マスタは、前述のインタフェースのうちのどれかでも、あるいは一般的に、トランザクション要求を発行することができる任意の装置、またはエンティティでもよい。
【００３７】
各スレーブ１４０および１５０は、トランザクション要求を受信するスレーブ待ち行列（それぞれ１６０、１７０）を含む。これらのスレーブ待ち行列の最大サイズはそれぞれ、ポートＩＤレジスタ１８０および１９０中の値によって表される。
【００３８】
マスタ１１０および１２０はデータ待ち行列またはバッファ１１５および１２５を含み、スレーブ１４０および１５０はデータ待ち行列またはバッファ１８５および１９５を含む。データ待ち行列またはバッファ１８５および１９５の機能については、下記の図７および図８に関して詳しく説明する。スレーブ書込みデータ待ち行列１８５および１９５の最大サイズもそれぞれ、ポートＩＤレジスタ１８０および１９０中の値によって表される。要求待ち行列項目（たとえば１００）と書込みデータ待ち行列中のデータ・バッファ（たとえば１８５）とが１対１の関係で対応し、書込みデータ待ち行列がパケット全体を保持するために最大サイズを有する（すなわち、予想される最大のパケット・サイズを保持できるサイズを有する）特殊なケースでは、１８０中の待ち行列サイズは単一の数で表すことができる。
【００３９】
図２で、スレーブ１４０および１５０は、前記で図１でスレーブ８０に対して説明したスレーブ装置のうちのどれでもよく、特に、スレーブ１４０および１５０は任意の数のメモリ・スレーブ装置または非メモリ・スレーブ装置を表すことができる。
【００４０】
初期設定動作
初期設定時に実行される基本ステップには下記のことが含まれる。
（１）システムに結合されたすべてのスレーブのそれぞれの受信待ち行列のサイズを決定する。
（２）システム・コントローラ内のレジスタにスレーブ受信待ち行列のサイズを記憶する。
（３）システム・コントローラの受信待ち行列のサイズを決定する。
（４）マスタ中の所定のレジスタにシステム・コントローラ受信待ち行列のサイズを記憶する。
【００４１】
したがって、システム初期設定時に、初期設定ソフトウェアは、各スレーブ中の要求待ち行列および下記データ待ち行列用のサイズ・フィールドの内容を読み取り、次いで、ＳＣ１３０の構成（ｃｏｎｆｉｇ）レジスタ２００内部の対応するフィールドにこれらの値をコピーする。一実施形態では、ＩＤレジスタ１７０および１８０中の値（スレーブ待ち行列サイズを表す）は、ＳＣ１３０の構成（「ｃｏｎｆｉｇ」）レジスタ２００中の別々のフィールドに記憶される。また、ＳＣＩＤレジスタ２５５および２６５の値（ＳＣ待ち行列サイズを表す）はそれぞれ、マスタ・インタフェース１１０および１２０のｃｏｎｆｉｇレジスタ２７０および２８０に記憶される。
【００４２】
また、ｃｏｎｆｉｇレジスタ２００は、所与のＳＣで実施される各ＵＰＡポートごとの別々の構成レジスタと交換することができる。この場合、各スレーブ１４０および１５０ごとに１つずつ２つの別々のｃｏｎｆｉｇレジスタがある。
【００４３】
マスタ１１０および１２０はそれぞれ、ＳＣ１３０との各マスタ・インタフェースから得たトランザクション要求を待機させるために使用されるトランザクション要求出力待ち行列２９０および３００も含む。各マスタ１１０および１２０は、後述のように、未処理のトランザクション要求の数を追跡するために使用されるカウンタ（３１０および３２０）を有する。
【００４４】
ＳＣ１３０は、出力待ち行列２１０および２２０と、それぞれに結合されたカウンタ２３０および２４０を備える。これらの動作については下記で説明する。
【００４５】
ＳＣ１３０は、各マスタごとのＳＣ命令（またはトランザクション要求）待ち行列（ＳＣＩＱ）も含み、したがってこの場合、２つのＳＣＩＱ２５０および２６０がある。各ＳＣＩＱには、結合されたＳＣＩＱの最大サイズを表す値を含むＳＣＩＤレジスタ、すなわちレジスタ２５５および２６５がそれぞれ結合されている。
【００４６】
ＳＣの動作を実施する回路は、図２ではＳＣ論理モジュール２４５によって示されており、必要な機能を実行する従来型のハード配線論理機構またはソフトウェア論理機構、あるいはその両方を含むことができる。たとえば、本発明で使用されるトランザクション要求の処理、待ち行列の制御、数値の比較およびカウンティングなどを実行するＡＳＩＣを設けることができる。汎用プロセッサを使用し、本明細書で論じる機能を実行するように（結合されている従来型メモリ、たとえばＲＯＭやＲＡＭに記憶されたプログラム命令などによって）構成することもできる。
【００４７】
システム・コントローラでこれらの機能を実行するために標準ハードウェアおよびソフトウェアの様々な組合せが可能であり、同じことが、スレーブ装置で実行される機能（スレーブ論理モジュール１４２および１５２参照）およびマスタ装置で実行される機能（マスタ論理モジュール１１２および１２２参照）にも当てはまる。この場合、論理モジュールは、前述の本発明の機能を実行するために必要なすべての回路、プログラミング、メモリ、インテリジェンスを表す。本発明の機能を実行するようにハードウェア及びソフトウェアを組み立てることは、本発明の教示が与えられた場合、当業者なら容易に行うことができる（マスタ装置がプロセッサである場合、もちろん、本発明を実施する論理機構は主として、プロセッサ自体と、それが実行する命令とで構成することができる）。これらの論理モジュールの特定の実施形態と、その実施形態がソフトウェアまたはハードウェアによって表される範囲は、かなり様々であり、したがって、図２ではブロック形でのみ示されている。
【００４８】
次に、（アーキテクチャに関する）図１Ａおよび図２ならびに（初期設定シーケンスのフロー制御に関する）図７ないし図８に関して初期設定シーケンスを説明する。初期設定シーケンス用の命令は、非揮発性メモリ、この実施形態ではブートＰＲＯＭ９４に記憶される。プロセッサＭ１は、ブートＰＲＯＭ９４への固定アドレスを有し、ＳＣ７５へのアドレス／制御線Ａ／ｃｔｒｌ−１を介して読取り要求によってブートＰＲＯＭ９４にアクセスする。ＳＣは、要求をデータ経路制御線またはバス９６（たとえば、８ビット・バス）を介してデータ経路クロスバー９２へ送信し、データ経路クロスバー９２は入出力コントローラＭ３にアクセスする。したがって、入出力コントローラはこの動作では、プロセッサＭ１のスレーブとして働く。
【００４９】
話を明確にするために、本発明の説明の全体にわたって、分割されたアドレスおよびデータ・バスが仮定され図示されていることに留意されたい。しかし、本発明は、共用アドレス／データ・バスを使用するシステムにも同様に適用することができる。
【００５０】
入出力コントローラＭ３は、ブートＰＲＯＭ９４にアクセスして初期設定シーケンス用のコードを読み取り、このコードを線Ａ／ｃｔｒｌ−３を介してＳＣ７５へ送信する。ＳＣ７５はこのコードをプロセッサＭ１へ送信する。
【００５１】
図１Ａで、ＳＣ７５、マスタＭ１ないしＭ３、スレーブＳ１ないしＳ２、メモリＭｅｍ１ないしＭｅｍ２は、図２に示したように、ｃｏｎｆｉｇレジスタ、カウンタ、ＳＣＩＤレジスタ、ＩＤレジスタ、マスタ待ち行列、ＳＣＩＱ、スレーブ待ち行列を含む。しかし、話を明確にするために、これらの要素は図１Ａには示されていない。
【００５２】
プロセッサＭ３が初期設定シーケンス命令をブートＰＲＯＭ９４から検索した後、その命令が実行される。第１の動作は、メモリおよびスレーブのＩＤレジスタを読み取ることである。これらのＩＤレジスタは、前記で図２に関して説明したように、それぞれのスレーブの命令待ち行列および書込みデータ待ち行列の値を含む。この読取り動作のために使用されるフロー制御シーケンスは、下記で図７の「スレーブ読取りフロー制御」に関して説明するシーケンスに従い、ＩＤレジスタから得たデータはデータ・バス（またはデータ経路）７１５を介して検索される。
【００５３】
ＩＤレジスタ値は、システム・コントローラ（図１Ａ中の７５、図２中の１３０）のｃｏｎｆｉｇレジスタ（ｃｏｎｆｉｇレジスタ２００など）に書き込まれる。前述のように、１スレーブ当たり１つのｃｏｎｆｉｇレジスタがあり、あるいは各スレーブごとのｃｏｎｆｉｇレジスタ中の少なくとも１つのフィールドがある。この書込み動作に関して使用されるフロー・シーケンスは、下記で図８に関して論ずるとおりである。このためにシステム用の入出力コントローラが使用される。したがって、図８で、この動作に関してスレーブ７１０が入出力コントローラであると仮定すると、マスタ（この場合はプロセッサ）７００は、ＳＣ７２０に各スレーブのＩＤレジスタ値をそれ自体のｃｏｎｆｉｇレジスタに書き込ませる。各ケースで、それぞれのＩＤレジスタ値はプロセッサ（図８中のマスタ７００または図１Ａ中のマスタＭ１）のバッファに記憶され、この値は、システム・コントローラに渡され、次いで入出力コントローラ（図８中のスレーブ７１０または図１Ａ中のマスタ／スレーブＭ３）に渡される。入出力コントローラは次いで、このために設けられたデータ経路（図８中のデータ・バス７１５）を介してこの値をシステム・コントローラに書き直す。
【００５４】
初期設定手順の次のステップは、システム・コントローラ（たとえば、図８に示したＳＣＩＱ０および１、または図２に示したＳＣＩＱ２５０および２６０）の受信待ち行列のサイズを読み取ることである。受信待ち行列サイズはＳＣＩＤレジスタ（図２に示したレジスタ２５５および２６５を参照されたい）に記憶される。この読取り動作は、システムの入出力コントローラを使用して実行され、その結果、マスタ／プロセッサはＳＣ受信待ち行列値を、バッファまたは事前に割り当てられたレジスタに記憶する。
【００５５】
最後に、これらのＳＣＩＱサイズはマスタｃｏｎｆｉｇレジスタ（図２中の２７０や２８０など）に書き込まれる。システムが単一プロセッサ・システムである場合、プロセッサはＳＣＩＤ値をそれ自体のｃｏｎｆｉｇレジスタと、マスタとして働くことができる他の装置のｃｏｎｆｉｇレジスタに書き込む。マルチプロセッサ・システムの場合、１つのプロセッサがマスタとして働き、ＳＣＩＤ値をそれ自体のｃｏｎｆｉｇレジスタおよび他のプロセッサのｃｏｎｆｉｇレジスタに書き込む。
【００５６】
フロー制御の一般的な動作
下記に、本発明のトランザクション要求フロー制御の一般的な説明を与え、次いで、特定のタイプのトランザクション要求の初期設定シーケンスおよびフロー制御に関する詳細を含む、本発明の好ましい実施形態のより具体的な説明を与える。
【００５７】
ＳＣ１３０中のｃｏｎｆｉｇレジスタ２００およびマスタ中のｃｏｎｆｉｇレジスタ２７０および２８０が初期設定された後、システム１００の通常の動作を開始することができる。動作時には、ＳＣは、スレーブＩＤレジスタ１８０および１９０のそれぞれの値のコピーをｃｏｎｆｉｇレジスタ２００に維持し、したがって、各スレーブ・インタフェースがそのスレーブ要求待ち行列（１６０または１７０）内で処理できるトランザクション要求の最大数と、スレーブ記憶データ待ち行列（１８５または１９５）に保持できるデータの最大量を「知る」。所与の時間には、カウンタ２３０および２４０は未処理トランザクション要求の数を対応するスレーブ要求待ち行列に記憶し、未処理記憶データのサイズをスレーブ記憶データ待ち行列に記憶する。未発行のトランザクション要求は、ある種の状況では、スレーブ１４０および１５０のために出力待ち行列２１０および２２０に記憶することができる。出力待ち行列２１０および２２０は、任意の大きさでよく、具体的にはＳＣＩＱ２５０および２６０よりも大きくてよい。他の状況では、要求は対応するＳＣＩＱで待機する。
【００５８】
マスタ、たとえばマスタ・インタフェース１１０は、発行すべきトランザクション要求を有するとき、まずカウンタ３１０中の値をｃｏｎｆｉｇレジスタ７２０中の値と比較する。カウンタ値がｃｏｎｆｉｇレジスタ値よりも小さい場合、要求を発行することができる。要求は、マスタの出力待ち行列２９０からＳＣＩＱ２５０へ送信され、カウンタ３１０は１だけ増分される。
【００５９】
ＳＣ１３０は次いで、２つのスレーブ１４０および１５０のうちのどちら宛にトランザクション要求を発行するかを判定し、その待ち行列用のカウンタを検査する。たとえば、スレーブ１４０がトランザクション要求の宛先である場合、ＳＣ１３０はカウンタ２１０を検査し、そこに記憶されている値を、ＩＤレジスタ１８０に対応するｃｏｎｆｉｇレジスタ２００中の値と比較する。カウンタ２３０値が、ｃｏｎｆｉｇレジスタに記憶されている値よりも小さい場合、ＳＣ１３０はトランザクション要求を発行し、カウンタ２３０を増分する。そうでない場合、トランザクション要求は出力待ち行列２１０に維持される（同じマスタからの異なる要求に関するトランザクションの順序付け制約に関係するある種のトランザクションでは、要求をＳＣＩＱ２５０に残すことが望ましいことがある）。
【００６０】
この例でトランザクション要求が発行されると仮定すると、ＳＣ１３０はこのために、（トランザクション、たとえばデータの転送が完了したときに）マスタ１１０へ信号を送信し、（応答が送信されたときに）入力待ち行列２５０からトランザクション要求を除去する。したがって、マスタ１１０はカウンタ３１０を減分し、それによって、他の未処理トランザクション要求を発行できるようになる。カウンタ３１０が最大値になった場合（ＳＣＩＱ２５０が満杯になったことを示す）、カウンタ３１０を減分すると、単一の追加トランザクション要求をマスタ１１０からＳＣ１３０へ送る余裕がもたらされる。カウンタ３１０が最大値に達していない場合、カウンタ３１０を減分すると、単に、マスタ・インタフェース１１０が利用できるトランザクション要求の数に１が追加される。
【００６１】
出力待ち行列２１０および２２０は、サイズが任意であり（具体的には、必要に応じてＳＣＩＱ２５０および２６０ならびにスレーブ入力待ち行列１６０および１７０よりもずっと大きくてよい）、本発明の動作にとって好ましいが、必要ではない。２つのスレーブに別々の出力待ち行列（スレーブ１４０用に待ち行列２１０およびスレーブ１５０用に待ち行列２２０）を維持しない場合、あるいはマスタに関する順序付け規約のために待ち行列２１０も待ち行列２２０も使用できない場合、待ち行列２５０および２６０に記憶されている順序要求は、待ち行列からクリアされる前に、それぞれの宛先スレーブが順序要求を受け入れられるようになるまで待機しなければならない。
【００６２】
システム中のそのような順序付け制約はグローバル順序付け要件でよい。すなわち、特定のシステムでは、マスタ１１０からのスレーブ１５０宛の次のトランザクションが処理できるようになる前に、マスタ１１０からの待ち行列２１０中の（スレーブ１４０宛の）未処理のトランザクションを処理する必要がある。
【００６３】
そのような順序付け要件を除いて、あるいは、ＳＣＩＱ２５０および２６０中の未処理のトランザクションがそれぞれの異なるマスタからのものであると仮定すると、これらの待ち行列２５０および２６０はどちらも、ＳＣ出力待ち行列２１０および２２０を介してスレーブ１４０および１５０に対する要求を放出することができ、そのため、スループットを増大することができる。たとえば、ＳＣＩＱ２６０中のスレーブ１４０要求は、スレーブ１４０が満杯である（すなわち、その入力待ち行列１７０が満杯である）場合でもＳＣ出力待ち行列２１０へ送信することができ、次いで、ＳＣＩＷ２６０から次のスレーブ１５０要求をスレーブ１５０へ送信することができる。ＳＣ出力待ち行列が形成されていない場合、スレーブ１５０要求は、発行される前にスレーブ１４０がクリアされるのを待つ必要がある。したがって、ＳＣ出力待ち行列は、２つのスレーブ・インタフェースの真に独立した動作を可能にする。
【００６４】
ＳＣＩＱ２５０および２６０は、マスタ・インタフェースおよびそのそれぞれのカウンタの場合と同様に互いに独立している。したがって、ＳＣ１３０は、各マスタからの所定数の要求を処理するように構成され、各マスタから受け入れられる要求の数は他のマスタから受け入れられる数とは独立している。すなわち、ＳＣＩＱのサイズは互いに独立している。また、個別のマスタは、複数の要求をそのマスタからの他の要求とは独立に行うことができ、したがって、要求待ち行列２９０（または３００）および対応するＳＣＩＱ２５０（または２６０）は各ケースで、複数の待ち行列に分割することができる。
【００６５】
選択された任意の数のマスタおよびスレーブに対して、任意のマスタが、ＳＣを介して任意のスレーブとのトランザクションを要求することができる。ＳＣは通常、所定の最大数のマスタ・インタフェースおよびスレーブ・インタフェースを有する所与のシステム向けに構成されたＡＳＩＣである。これは、（システム全体と比べて）比較的簡単で廉価なＡＳＩＣなので、設計者が、それぞれ、異なるシステムの特定のニーズに調整された、それぞれの異なるＳＣをそのシステム向けに低コストで容易に構成できるようにすることによって、融通性および経済性に優れている。
【００６６】
本発明を実施する論理機構は、図１に示したように、ＳＣ  ＡＳＩＣならびにマスタ・インタフェースおよびスレーブ・インタフェースのハードウェア／ファームウェア論理機構と、システムのメモリ８５に記憶されているプログラム命令によって形成される。代替実施形態は、たとえば、本発明の好ましい実施形態のマスタ・インタフェース、システム・コントローラ、スレーブ・インタフェースによって実行されるステップを実行するメモリおよび汎用プロセッサを設けることによって、この論理機構を他の方法で実施することができる。
【００６７】
システム・コントローラの動作
次に図３ないし図４を参照すると分かるように、初期設定時には（ボックス／方法ステップ４００）、すべてのＵＰＡポートＩＤレジスタ（たとえば、図２中のスレーブＩＤレジスタ１８０および１９０）が読み取られ、その内容がＳＣ  ｃｏｎｆｉｇレジスタ２００（または、前述の別々の専用ｃｏｎｆｉｇレジスタ）中の適当なフィールドに書き込まれる。ＵＰＡ（スレーブ）ポートをポートＩＤレジスタではなくＰＲＯＭと共に構成したときは、単一のＳＣ  ｃｏｎｆｉｇレジスタ実施形態中の別々のフィールドが使用される可能性が高い。本出願では、ｃｏｎｆｉｇレジスタのフィールドに言及するときはいつでも、別々のｃｏｎｆｉｇレジスタを意味するものとみなすこともでき、逆もまた同様である。
【００６８】
ボックス４１０で、マスタ・レジスタが初期設定される。この場合、ＳＣＩＤレジスタ２５５および２６５が読み取られ、（それらのレジスタに記憶されている）ＳＣＩＱサイズがそれぞれのｃｏｎｆｉｇレジスタ２７０および２８０に書き込まれる。
【００６９】
ｃｏｎｆｉｇレジスタ２００のフィールドおよびｃｏｎｆｉｇレジスタ２７０ないし２８０は、始動時に（それぞれ、対応するレジスタ１８０ないし１９０および２５０ないし２６０を読み取れるために）少なくとも１つのトランザクションを個別に許可しなければならないので、まず、始動を「ブートストラップ」するために値「１」に初期設定される。したがって、読取りＩＤレジスタ・トランザクション要求が発行され、カウンタが減分されたときに、要求が許可される（ｃｏｎｆｉｇレジスタがすべて０である場合、トランザクションは許可されない）。それぞれのＩＤレジスタが読み取られたとき、ｃｏｎｆｉｇレジスタ値は正しい値、すなわち、レジスタに関連するＩＤレジスタの実際のサイズと交換される。
【００７０】
ボックス４２０で、１つのマスタ、たとえばマスタ１２０に未処理の新しい要求があるかどうかが判定される。ない場合、手順はボックス４２２で停止する（しかし、新しいトランザクション要求が行われたときにはいつでも、ボックス４２０で再開することができる）。
【００７１】
ボックス４２４で、読取り動作を求める未処理のトランザクション要求がある場合、システムは、マスタ・インタフェース用のマスタ読取りデータ・バッファ（下記でさらに詳しく論じる）のデータ受け入れ準備が完了したかどうか、すなわち、マスタ読取りデータ・バッファに、読み取るべきデータを受信するのに十分な余裕があるかどうかを判定する。そうでない場合、システムはボックス４２６で、マスタ読取りデータ・バッファの準備が完了するまで待機する。書込み動作が、読取り動作に関する待機周期中に停止する必要はなく、独立に進行でき、逆もまた同様であることに留意されたい。
【００７２】
書込み動作の場合、システムは、スレーブ・インタフェースまたはメモリを介して１つのスレーブに書き込むべきデータが実際にマスタ書込みバッファに書き込まれる（送信される）準備ができているかどうかを判定する。そうでない場合、再びボックス４２６で、データ項目の書込み準備が整うまで待機周期が実行される。
【００７３】
マスタ・インタフェースに関するかぎり、読取り動作または書込み動作の準備が完了すると、ボックス４３０で、システムは、マスタ・カウンタ（この例ではカウンタ３２０）の値が、ｃｏｎｆｉｇレジスタに記憶されている値、すなわち（最初にＳＣＩＤレジスタ２６５によって提供された）関連するＳＣＩＱ２６０のサイズに等しいかどうかを試験する。（マスタ・カウンタは、ｃｏｎｆｉｇレジスタに記憶されている値を超えることができてはならないが、もしそうなった場合、比較試験で「＝」ではなく「≧」を使用することによってこのことが考慮される。）カウンタが、総ＳＣＩＱ２６０サイズに等しい要求を発行していない場合、この試験は偽になり、この方法はボックス４４０へ進む。
【００７４】
カウンタ値が最大許容値に達した場合、トランザクション要求はＳＣに渡されず、この方法はボックス５００へ進む。この場合、マスタ・インタフェース中の未処理のトランザクション要求は、発行できるようになる前に、トランザクション完了信号がＳＣから受信されるまで待機する必要がある（ボックス５１０）。好ましい実施形態では、このトランザクション完了信号はＳ＿ＲＥＰＬＹ信号の形をとる。この信号については、下記で図５ないし図８に関して詳しく論じる。
【００７５】
マスタ・インタフェース１１０は、このトランザクション完了信号を受信すると（ボックス５００）、そのＳＣＩＱに関連するカウンタを減分し（ボックス５３０）、ボックス４４０のステップへ進む。
【００７６】
ボックス４４０で、カウンタ３２０が１だけ増分され、ボックス４５０で、トランザクション要求がマスタによってＳＣへ送信される。したがってこの場合、カウンタ３２０は、１つの（または１つの追加）トランザクション要求が送信されたことを反映する。
【００７７】
ボックス４２０ないし４５０および５００ないし５２０がすべて、マスタまたはマスタ・インタフェース１１０および１２０などのマスタ・インタフェースによって、あるいはマスタまたはマスタ・インタフェースにおいて実行される方法ステップに関係するものであることが理解されよう。下記で、ボックス４５２ないし４５８および４６２ないし４９０（すなわち、図４のほぼすべて）が、システム・コントローラ（ＳＣ）において、あるいはＳＣによって実行される方法ステップに関係するものであることが分かる。ボックス４６０および４９５は、必要に応じてデータを読み取り書き込む方法ステップに関係するものである。
【００７８】
ＳＣは、要求受信待ち行列（ＳＣＩＱ２５０および２６０など）内に未処理のトランザクション要求があるかどうかを判定するインテリジェンスまたは論理機構、あるいはその両方（ハードウェアまたはソフトウェア、あるいはその両方）を備える。未処理のトランザクション要求がある場合、ボックス４５２で、待ち行列の１番上にあるトランザクション要求が調べられ、スレーブが要求の受信側とされているかどうかが判定される。この待ち行列の制御および受信側の判定は、従来の方法で実施される。
【００７９】
ボックス４５４（図４）で、この方法は未処理の動作がメモリ動作であるか、それとも非メモリ・スレーブ動作であるかを判定する。メモリ動作である場合、ボックス４５６で、この方法は、グローバル順序付け制約またはその他の順序付け制約が与えられた場合に受信側メモリが妥当であるかどうかを判定する。
【００８０】
ある種のそのような可能な制約は、所与のマスタによるメモリ要求またはスレーブ要求の処理を、同じマスタによる他のメモリに対する要求またはスレーブに対する要求が解決されるまで遅延させることに関係するものである。すなわち、所与のマスタ、たとえばマスタ１から、スレーブ１に対する一連のトランザクション要求を発行することができ、次いでスレーブ２に対するトランザクション要求を発行することができる。本発明のシステムの好ましい実施形態では、（マスタ１からの）すべての未処理のスレーブ１要求は、新しいスレーブ２要求が実行される前に完了する。これによって、新しいスレーブ２トランザクションが依存するスレーブ１動作が行われる。したがって、それぞれの異なるスレーブに発行された要求に対する所与のマスタからのトランザクション要求の強力なグローバル順序付けが維持される。これは、後述のスレーブ２要求を発行する前に、Ｓ＿ＲＥＰと呼ばれるスレーブ１からの信号を待つことを、マスタに要求することによって行われる。
【００８１】
他のシステムでは、マスタ１が、スレーブ１からのＳ＿ＲＥＰＬＹ（トランザクション完了）信号を待たずに複数の要求を自由にスレーブ１に発行できるようにすることが好ましいことがある。そのようなシステムでも、所与のメモリまたは非メモリ・スレーブが、ある種のトランザクション、すなわち、所定のトランザクション・タイプのトランザクション、または特定のマスタからのトランザクション、あるいはその両方を受け入れることを一時的に拒否し、あるいは何らかの他の理由である種のトランザクションを受け入れることを一時的に拒否することができる、トランザクションに関する順序付けまたはその他の制約が存在することができる。
【００８２】
このような理由で、受信側メモリがこの時点で妥当なものではなく、あるいは利用できない場合、ボックス４５８で、この方法は、メモリが有効になり利用可能になるまで待機する。
【００８３】
受信側メモリが有効である場合、ボックス４６０で、下記でさらに詳しく説明するように、データが必要に応じてメモリから読み取られ、あるいはメモリに書き込まれ、Ｓ＿ＲＥＰＬＹ（トランザクション完了）信号が送信される。
【００８４】
未処理のトランザクションが非メモリ・スレーブ・トランザクションである場合、ボックス４６２で、この方法は、どのスレーブが要求を受信すべきかを判定する。ボックス４６４で、前述の順序付け制約またはその他の制約が与えられた場合に受信側スレーブがこの時点で有効な受信側であるかどうかが判定される。そうでない場合、ボックス４６６で、この方法はスレーブが有効になるまで待機する。
【００８５】
スレーブがこのトランザクションに関して有効になった後、トランザクション要求が対応するＳＣ出力待ち行列（ＳＣＯＱ）２１０または２２０へ移される。
【００８６】
未処理のトランザクションがスレーブ書込みトランザクションである場合、この時点で（ボックス４７０）、ＳＣがデータ経路制御信号を介してデータ経路１５５をイネーブルし、次いで、（トランザクションが未処理の）マスタがデータをデータ経路を通して適当なスレーブ入力待ち行列（１８５または１９５）へ移動できるようになる。ＳＣは次いで、そのトランザクション完了（Ｓ＿ＲＥＰＬＹ）信号をマスタとスレーブの両方へ送信する（下記の図８に関する議論を参照されたい）。
【００８７】
次いでボックス４７５で、ＳＣ１３０は、受信側スレーブ用のカウンタ、たとえば、スレーブ１５０が未処理のトランザクション要求の宛先である場合はカウンタ２４０を検査する。カウンタがｃｏｎｆｉｇレジスタ中の値（すなわち、初期設定時に読み取られた、ＩＤレジスタ１８０または１９０によって示されるサイズ）以上である場合、要求はまだ許可されない。この場合、宛先スレーブ待ち行列中の空き線が開放されトランザクション要求を受信するまで、ステップ５３０ないし５５０（基本的にステップ５００ないし５２０と同じ）が実行される。
【００８８】
適当なカウンタ（２３０または２４０）が最大許容値に達していない場合は、１だけ増分され（ボックス４８０）、トランザクション要求が受信側スレーブへ送信される（ボックス４９０）。
【００８９】
未処理のトランザクションがスレーブ読取り要求である場合、この時点で（ボックス４９５）、読取り動作が開始される。読取り動作が完了すると、スレーブがＰ＿ＲＥＰＬＹをＳＣへ送信し、ＳＣが要求側マスタと受信側スレーブの両方へＳ＿ＲＥＰＬＹを送信する。スレーブ読取り要求のトランザクション及びデータ・フローに関する詳細については、下記の図７に関する議論を参照されたい。
【００９０】
この時点で、この方法は図３中のボックス４２０へ進み、すなわち、他のトランザクション要求が行われているかどうかが判定される。
【００９１】
図３ないし図４のフローチャートは、それぞれの異なるトランザクションに関する厳密に線形のシーケンスを示すとは限らない（ただし、所与のトランザクションの場合、フローは線形である）。たとえば、好ましい実施形態では、ＳＣによってスレーブ・インタフェースに他のトランザクション要求が発行されたときでも、１つのマスタ・インタフェースからトランザクション要求を発行することができる。他のタイプおよび程度の並列動作を実施することができる。
【００９２】
フロー制御
図５ないし図８は、本発明では４つの異なるタイプのトランザクションのそれぞれの場合にフロー制御がどのように行われるかを示す。
図５：メモリからの読取り動作（すなわち、スレーブ・インタフェースがメモリ・インタフェースである場合）
図６：メモリへの書込み動作
図７：メモリ以外の装置からの読取り動作
図８：メモリ以外の装置からの書込み動作
【００９３】
キャッシュ読取りトランザクション（スヌープバスを使用するトランザクションであり、本発明では重要ではない）など他の動作も可能であるが、本発明の特徴を示すには前記の動作で十分である。
【００９４】
図５および図６では、話を簡単にするために、図２に示した待ち行列およびレジスタが図示されていないが、マスタ・インタフェース（ＵＰＡポート）とシステム・コントローラの両方に、図２とほぼ同じ構成で含められているものと理解すべきである。したがって、前記で図２および図３に関して説明したトランザクション制御が、図５−図６および図７−図８に関しても行われる。
【００９５】
しかし、図５および図６に示したメモリ・バンクが、図２に示したスレーブ待ち行列を含む必要はなく、また、図５中のシステム・コントローラが、図２と同様なｃｏｎｆｉｇレジスタおよびカウンを含む必要はない。その代わり、読取りトランザクション要求装置または書込みトランザクション要求装置とメモリとの間のフロー制御など従来型のフロー制御を、実施形態特有のものとして使用することができる。読取り要求および書込み要求が適切にメモリ・バンクに割り当てられるようにする多くの標準設計は妥当である。この例では、図３および図４のステップ（ボックス）４７０ないし４９０および５３０ないし５５０が、メモリとの間の読取りトランザクションおよび書込みトランザクションの制御用の等価ステップと置換される。
【００９６】
図５には、相互接続モジュール６００の特定の実施形態が図示されている。この場合、メモリ・バンク６１０．．．６２０はスレーブ装置であり、合計でｍ個のメモリ・バンクが下付き文字（０）．．．（ｍ−１）によって示されている。同様に、複数のマスタ・インタフェース（ＵＰＡポート）６３０．．．６４０があり、本発明の例では、３２個のマスタ・インタフェースが下付き文字０．．．３１によって示されている。データ経路クロスバー６２５は、メモリ・バンクを従来の方法でＵＰＡポートに結合する。
【００９７】
一般に、この操作では、トランザクション要求の受信の順序はスレープ・インタフェースによる回答の順序となる。
【００９８】
一般に、図５ないし図８では、各図ごとの必要に応じて、事象の順序が、円で囲まれた事象参照符号１、２、３、４によって示されている（添付の矢印は、データ・フローまたは信号フローの方向を示す）。図５および図６中のメモリが、図２中のスレーブのスレーブ待ち行列およびＩＤレジスタを含まないことを除いて、図５ないし図８に関するデータ・フローの下記の説明は、トランザクション要求制御（図３ないし図４）に関して説明したステップを含むものと理解すべきである。したがって、各要求が発行されるたびに、適当なカウンタの検査、増分、減分が実行され、要求が適当な時間に送信されることが決定される。それぞれの待ち行列も必要に応じて処理される。
【００９９】
メモリ読取り要求：図５
この読取り要求の例では、データからメモリから送られて来て、たとえばキャッシュからは送られて来ないものと仮定する。図５に示したスヌープバス上のスヌープ動作はこの場合は検討しない。
【０１００】
事象１：ポスト６３０などのＵＰＡマスタ・ポートにおいて、メモリからの読取りトランザクションの準備が完了し、マスタ・カウンタが許容最大値に達していないとき（図３−図４中のボックス４３０を参照されたい）、読取りトランザクションはＵＰＡ＿Ａｄｄｒｅｓｓｂｕｓ上でＵＰＡポート６３０からシステム・コントローラ６５０に発行される。このことは、図５中のＵＰＡ＿Ａｄｄｒｅｓｓｂｕｓ６６０に沿った事象１（Ｐ＿ＲＥＱ）によって示され、情報の方向、すなわちポートからＳＣは、矢印の方向によって示されている。
【０１０１】
事象２：メモリ・サイクル［すなわちＲＡＳ（読取りアドレス・ストローブ）／ＣＡＳ（列アドレス・ストローブ）要求発行］がメモリ制御バス６７０を介してメモリ・バンク６１０．．．６２０に発行される。バス６７０に沿ったベント２（「ＲＡＳ／ＣＡＳ」）を参照されたい。
【０１０２】
事象３：データ経路がデータ経路制御バス６８０に沿った信号によってスケジューリングされ、それに応じて、データ項目が、メモリ・データバス６９０およびＵＰＡデータバス７００を介してメモリからデータ経路クロスバー６２５へ転送される。これによって読取り要求が行われる。
【０１０３】
メモリ書込み要求：図６
図６は、図５と同じ回路を示すものであるが、フローは、読取り動作ではなく（非キャッシュ）書込み動作に関するものなので異なる。事象１では、ＵＰＡアドレス・バス６６０に沿って書込み要求が発行される。
【０１０４】
事象２では、データ経路制御信号がバス６８０を介して送信され、データ経路クロスバー６２５がイネーブルされる。データ経路がスケジューリングされた後、データを供給するために、ＳＣ６５０によってＳ＿ＲＥＰＬＹもバス７１０を介してＵＰＡポート６３０へ送信され、データ項目がＵＰＡポート６３０からデータ・バス７００を介してデータ経路クロスバーへ送信される。この場合、データ項目は、メモリ・バンクへ転送されることに備えてバッファされる。この点で、ＵＰＡポート中のカウンタが減分され、システム・コントローラが他のトランザクション要求を使用できることを示す。
【０１０５】
事象３では、メモリ・バンクが、バス６７０を介してＲＡＳ／ＣＡＳ信号を使用してイネーブルされ、データ項目がバス６９０を介してメモリ・バンクへ送信される。これによって書込み動作が完了する。
【０１０６】
前記の方法では、書込みデータの準備が完了するまで書込み要求が発行されることはない。たとえば、データバス６９５が１４４ビット幅であるが、バス６９０が２８８ビット幅である場合、データ語はクロスバーにバッファされ、２８８ビット・ブロックとしてアセンブルされ、次いでメモリに書き込まれる。
【０１０７】
スレーブ読取り要求：図７
図７は、メモリ以外のスレーブ装置に対する読取りシーケンスを示すものであり、図２に類似しているが、この例の場合、単一のマスタ・インタフェース７１０および単一のスレーブ・インタフェース７２０が使用され、システム・コントローラ７２０およびデータ経路クロスバー７３０によって結合されている。
【０１０８】
事象１は、読取り要求Ｐ＿ＲＥＱがＵＰＡアドレス・バス７４０上でＳＣ７２０に発行されることを示す。
【０１０９】
事象２では、ＳＣ７２０がＰ＿ＲＥＱをバス７５０でスレーブ・インタフェース７１０へ送信する。これを行うには、複数のスレーブ・インタフェースがある場合、ＳＣはまず、アドレスを復号して、Ｐ＿ＲＥＱが正しいスレーブ・インタフェースへ送信されるようにしなければならない。事象２では、データ経路を介してデータを移動する準備を行うようスレーブ・インタフェースが通知される。
【０１１０】
データ項目の準備が完了すると、事象３が発生し、すなわちＰ＿ＲＥＰＬＹがバス７６０を介してスレーブ７１０からＳＣ７２０へ送信される。
【０１１１】
事象４では、マスタ・インタフェースにデータを受信させる一連のステップが実行される。ＳＣ７２０は、データ経路７３０をスケジューリングし、Ｓ＿ＲＥＰＬＹをバス７７０を介してマスタ・インタフェース７００に発行する。また、ＳＣは、Ｓ＿ＲＥＰＬＹをバス７８０上でスレーブ７１０に発行し、データの準備ができたときに、このデータをスレーブのＵＰＡデータバス７９０上でデータ経路およびデータバス８００を介してマスタ・インタフェース７００へドライブする。
【０１１２】
スレーブ書込み要求：図８
図８は、図７と同じ装置を示すが、非メモリ・スレーブ・シーケンスからマスタ・インタフェースへの書込みシーケンスを示すものである。このシーケンスでは、スレーブ・インタフェース７１０のデータ待ち行列ＰＲＥＱ＿ＤＱが十分な空間を有するまでデータを転送することはできない。
【０１１３】
図７および図８では、トランザクション要求カウンタ８１０とデータ要求カウンタ８２０が共にＳＣ７２０に示されている。これらはそれぞれ、ＰＲＥＱ待ち行列およびＰＲＥＱ＿ＤＱ待ち行列（スレーブ出力データ待ち行列）がどれだけ充填されているかを判定するカウンタである。この２つの待ち行列のサイズが異なる場合、それらに関連するカウンタ８１０および８２０のサイズは異なる。この２つの待ち行列のサイズが同じである場合、ＳＣで単一のカウンタを使用して両方の待ち行列がどれだけ充填されているかを判定することができる。
【０１１４】
事象１：書込み動作の第１の事象は、Ｐ＿ＲＥＱがマスタ・インタフェース７００によってバス７４０を介してシステム・コントローラ７２０に発行されることである。
【０１１５】
事象２：事象２では、ＳＣはＰ＿ＲＥＱをバス７５０を介してスレーブ・インタフェース７１０に発行する。Ｐ＿ＲＥＱは、どのくらいの量のデータが書き込まれるかをＳＣに通知するのに十分な語を含む。前述のように、スレーブ・データ待ち行列カウンタ８２０は、データ待ち行列ＰＲＥＱ＿ＤＱがどれだけ充填されているかを追跡するために使用される。ＰＲＥＱ＿ＤＱが過度に充填されている場合、書込みトランザクションは待たなければならない。
【０１１６】
データ待ち行列ＰＲＥＱ＿ＤＱは、１つの語の幅でも（たとえば１６ビット）、ブロックの幅（たとえば６４ビット）でもよい。したがって、現行のシステムで複数の転送サイズがサポートされる。可能な待ち行列構成には、１要求当たり最大容量、または１要求当たり最大容量のある部分、たとえば前述の６４ビット例および１６ビット例が含まれる。
【０１１７】
待ち行列ＰＲＥＱ＿ＤＱが十分に得られる場合、書込み動作は進行することができる。さらに事象２で、ＳＣは、データ経路制御信号「ＤＰ  ｃｔｒｌ」によってデータ経路７３０をスケジューリングし、Ｓ＿ＲＥＰＬＹをバス７７０を介してマスタ・インタフェースに発行してマスタ・インタフェースのデータ・バス８００でデータをドライブする。また、ＳＣはＳ＿ＲＥＰＬＹをバス７８０を介して発行し、スレーブ・インタフェース７１０にそのデータ・バス７９０を介してデータを受信するよう命令する。
【０１１８】
マスタ・インタフェースがＳ＿ＲＥＰＬＹを受信し、データがバス８００を介してデータ経路クロスバー７３０へ転送された後、マスタ・インタフェースに関するかぎりトランザクションは完了する。したがって、この点で、スレーブ・インタフェースがまだデータを受信していない場合でも、マスタ・インタフェースは他のトランザクションの準備を行う。
【０１１９】
アドレス経路とデータ経路が独立しているので、要求パケット（宛先アドレスを含む）および対応するデータを任意の順序でスレーブ・ポートへ転送することができる。すなわち、データは実際には、Ｐ＿ＲＥＱがスレーブの待ち行列ＰＲＥＱに到着する前に入力待ち行列ＰＲＥＱ＿ＤＱに到着する。こうなった場合、データはＰ＿ＲＥＱが到着するまで待つ必要があり、その結果、スレーブはデータに関する宛先アドレスを判定することができる。もちろん、最初にＰ＿ＲＥＱが到着して、２番目にデータが到着することもでき、その場合、データはただちに、Ｐ＿ＲＥＱによって指定された宛先に書き込むことができる。
【０１２０】
事象３：スレーブは、要求されたデータをデータ待ち行列からクリアし、トランザクション要求を入力待ち行列からクリアした後、他のトランザクションの準備が完了したことを示すＰ＿ＲＥＰＬＹをバス７６０を介してＳＣに発行する。ＳＣは、これに応じてカウンタ８１０および８２０を減分する。トランザクションはＳＣの観点からは完了し、すなわち、もはやＳＣが実行する動作はない。
【０１２１】
トランザクションの順序付け
トランザクションとは、本明細書では、マスタ装置またはモジュール（ハードウェア、またはソフトウェア、またはその組合せ）による任意のタイプの要求である。このようなトランザクションには、読取り応答および書込み応答に接続しなければならない読取りデータ転送、書込みデータ転送などが含まれる。すなわち、たとえば、各書込み要求は論理的に書込みデータ（書き込むべきデータ）にリンクされる。前述の説明では、データ転送の順序付けが書込み要求の順序によって支配されるものと仮定されているが、他の可能性も存在する。
【０１２２】
たとえば、書込み要求と書込みデータとの間のリンクは、各書込み要求およびそれに対応するデータにトークンを割り当てることによって得られる。次いで、このトークンを使用して、所与の書込み要求が完了したことがシステム・コントローラおよびプロセスに通知される。すなわち、書込みデータがそのトークンを保持し、トークンが受信されたとき、関連するトークンを有する書込み要求が完了したことが分かる。そのようなシステムは、関連するトークンを見つけるトークン一致論理機構を必要とする。このトークン・システムは、マスタが要求するトランザクションに関して前記で説明したシステム・コントローラの動作に適用することができ、トランザクション要求と要求の完了との順序付け要件をなくする。すなわち、読取りトランザクションおよび書込みトランザクションは、それらが発行された順序以外の順序で実行することができる。
【０１２３】
いずれの場合も、データ転送があるか、それともないかにかかわらずに、各トランザクションごとに、システム・コントローラによる対応する応答がある。一般に、様々なトランザクションに関する事象の順序は下記のとおりである。
スレーブからの読取り：読取り要求--＞スレーブ読取り応答--＞読取りデータ転送（任意選択）
マスタからの書込み：書込み要求--＞ＳＣ書込み応答--＞書込みデータ転送（任意選択）
スレーブからの書込み：（書込み要求／書込みデータ転送、どちらが先でもよい）--＞書込みデータが使い尽くされたときにスレーブ応答
【０１２４】
したがって、本発明は、多数の異なる順序付け方式に適応させることも、あるいは実際に、特定の順序付けが必要とされないトークン・システムなどの方式に適応させることもできる。
【図面の簡単な説明】
【図１】  本発明を組み込んだコンピュータ・システムの好ましい実施形態のブロック図である。
【図２】  図１に示したシステムの一部の詳細な図である。
【図３】  本発明の方法の汎用実施形態を示すフローチャートである。
【図４】  本発明の方法の汎用実施形態を示すフローチャートである。
【図５】  それぞれの異なるタイプのトランザクションに関する本発明によるトランザクション・フロー制御を示すブロック図である。
【図６】  それぞれの異なるタイプのトランザクションに関する本発明によるトランザクション・フロー制御を示すブロック図である。
【図７】  それぞれの異なるタイプのトランザクションに関する本発明によるトランザクション・フロー制御を示すブロック図である。
【図８】  それぞれの異なるタイプのトランザクションに関する本発明によるトランザクション・フロー制御を示すブロック図である。
【符号の説明】
１０  システム
２０  ＵＰＡモジュール
２５  相互接続ネットワークまたはモジュール
３０  プロセッサ
４０  グラフィックス装置
５０  入出力装置
６０  ＵＰＡポート
７０  システム相互接続コントローラ（ＳＣ）
７５  システム・コントローラ
７７  データ経路制御バス
８０  スレーブ・インタフェース
８５  従来型のメモリ装置
９０  データ経路クロスバー
９４  ブートＰＲＯＭ
９５  標準入出力装置
【図１】
0003881054.tif 000002
【図２】
0003881054.tif 000003
【図３】
0003881054.tif 000004
【図４】
0003881054.tif 000005
【図５】
0003881054.tif 000006
【図６】
0003881054.tif 000007
【図７】
0003881054.tif 000008
【図８】
0003881054.tif 000009