(57)【要約】入力ポートで受け取られたデータ・パケットのシーケンシャル・データ単位を共用メモリのバッファの連続するバンクに保管する方法および装置を開示する。バッファ・メモリ利用を、単一のバッファに複数のパケットを保管することによって改善することができる。バッファごとに、パケットのそれぞれがあてられた出力ポートの個数の合計（バッファで表されるすべてのパケットに関する）を示すバッファ使用カウントが保管される。バッファ使用カウントは、バッファが空いている時を判定する機構を提供する。バッファ使用カウントは、マルチキャスティング動作を実行するためにパケットの宛先ポートの個数も示すことができる。バッファに、１つまたは複数のグループを含めることができ、グループのそれぞれに、複数のバンクを含めることができる。
2006524477.tif 000002
【特許請求の範囲】
【請求項１】
パケット・スイッチ内の共用メモリにパケットを保管する方法であって、前記共用メモリが、１つまたは複数のバッファを含み、前記１つまたは複数のバッファのそれぞれが、複数のバンクを含み、
第１バッファの連続するバンクにパケットの少なくとも一部を保管するステップ
を含む方法。
【請求項２】
前記パケットが、複数のデータ単位を含み、前記データ単位の１つが前記第１バッファの最後のバンクに保管され、かつ前記第１バッファの前記最後のバンクに保管された前記データ単位が前記パケットの最後のデータ単位でない場合に、前記パケットの追加部分を第２バッファの連続するバンクに保管するステップをさらに含む、請求項１に記載の方法。
【請求項３】
前記１つまたは複数のバッファのそれぞれが、１つまたは複数のグループを含み、前記グループのそれぞれが、複数のバンクを含む、請求項１に記載の方法。
【請求項４】
複数のパケットのそれぞれの少なくとも一部が、前記バッファのうちの１つに保管される、請求項１に記載の方法。
【請求項５】
１つまたは複数のデータ・ポートに循環式にアクセスするステップをさらに含み、前記データ・ポートのそれぞれが、前記複数のバンクのうちの１つまたは複数に対応する、請求項１に記載の方法。
【請求項６】
前記バンクが、バンクの第１組およびバンクの第２組に分割され、バッファ要求に応答して、前記第１組からの１つまたは複数のバンクを含むバッファおよび前記第２組からの１つまたは複数のバンクを含むバッファを割り振るステップをさらに含む、請求項１に記載の方法。
【請求項７】
前記共用メモリが、前記パケット・スイッチ内のポートの間でパケットを交換する、請求項１に記載の方法。
【請求項８】
前記パケットの前記シーケンシャル・データ単位が、前記１つまたは複数のバッファのうちの少なくとも１つの連続するバンクに保管される、請求項１に記載の方法。
【請求項９】
パケット・スイッチ内の共用メモリを管理する方法であって、前記共用メモリが、１つまたは複数のバッファを含み、
前記バッファのうちの少なくとも１つについてバッファ使用カウントを維持するステップ
を含む方法。
【請求項１０】
ある出力ポート宛のパケットが前記バッファに保管されていることを示すために前記バッファ使用カウントを１つ増分するステップをさらに含む、請求項９に記載の方法。
【請求項１１】
データ単位が前記バッファから読み取られ、前記データ単位がパケットの最後のデータ単位または前記バッファの最後のデータ単位である時に、前記バッファ使用カウントを１つ減分するステップをさらに含む、請求項９に記載の方法。
【請求項１２】
前記バッファ使用カウントが、マルチキャスティング動作を実行するためにパケットの宛先ポートの個数を示す、請求項９に記載の方法。
【請求項１３】
前記バッファ使用カウントに基づいてバッファが空いているかどうかを判定するステップをさらに含む、請求項９に記載の方法。
【請求項１４】
前記バッファ使用カウントが、前記パケットのそれぞれがあてられた出力ポートの個数の、前記バッファのうちの前記少なくとも１つのすべてのパケットに関する合計の表示を提供する、請求項９に記載の方法。
【請求項１５】
空きバッファ・リストを検索するステップと、
循環トレース・メモリを検索するステップと
を含む、パケット・スイッチの共用メモリ内の失われたバッファを検出する方法。
【請求項１６】
事前定義の期間だけ前記バッファの解放の表示を待つステップをさらに含む、請求項１５に記載の方法。
【請求項１７】
前記バッファの解放が前記待機期間中に発生しない場合に、前記失われたバッファを空きバッファ・リストに追加するステップをさらに含む、請求項１５に記載の方法。
【請求項１８】
それぞれが複数のバンクを含む１つまたは複数のバッファであって、パケットの少なくとも一部が第１バッファの連続するバンクに保管される、１つまたは複数のバッファ
を含む、前記パケットを保管する共用メモリ。
【請求項１９】
前記パケットが、複数のデータ単位を含み、前記パケットの追加部分が、前記データ単位の１つが前記第１バッファの最後のバンクに保管され、かつ前記第１バッファの前記最後のバンクに保管された前記データ単位が前記パケットの最後のデータ単位でない場合に、第２バッファの連続するバンクに保管される、請求項１８に記載の共用メモリ。
【請求項２０】
前記１つまたは複数のバッファのそれぞれが、１つまたは複数のグループを含み、前記グループのそれぞれが、複数のバンクを含む、請求項１８に記載の共用メモリ。
【請求項２１】
複数のパケットのそれぞれの少なくとも一部が、前記バッファのうちの１つに保管される、請求項１８に記載の共用メモリ。
【請求項２２】
前記バンクが、バンクの第１組およびバンクの第２組に分割され、バッファ要求に応答して、前記第１組からの１つまたは複数のバンクを含むバッファおよび前記第２組からの１つまたは複数のバンクを含むバッファを割り振るステップをさらに含む、請求項１８に記載の共用メモリ。
【請求項２３】
前記共用メモリが、パケット・スイッチ内のポートの間でパケットを交換する、請求項１８に記載の共用メモリ。
【請求項２４】
前記パケットのそれぞれがあてられた出力ポートの個数の、前記バッファの前記少なくとも１つ内のすべてのパケットに関する合計の表示を提供するバッファ使用カウントを監視するカウンタをさらに含む、請求項１８に記載の共用メモリ。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、２００３年４月２２日出願の米国仮出願第６０／４６４４６２号の利益を主張するものである。
本発明は、パケットベースのスイッチング・ファブリックに関し、具体的には、中央共用バッファ・メモリを介してデータ・パケットを効率的に切り替える方法および装置に関する。
【背景技術】
【０００２】
インターネットおよびマルチメディア・アプリケーションのユビキタスな展開から生じる帯域幅に関する需要の増大が、より高速でより効率的なネットワークおよびネットワーク・スイッチ、主にパケット・スイッチの必要を生んできた。入力ポートから出力ポートにデータ・パケットを転送するパケット・スイッチに使用される少なくとも３つの一般的なスイッチング・アーキテクチャすなわち、クロスポイント（クロスバとも称する）マトリックス、共用バス、および共用メモリがある。クロスバ・マトリックスは、本質的に、データ・パケット（またはデータ・パケットのサブセット）交換の持続時間の間に、パケットのエントリ・ポートによって獲得されるデータ・パケット内の宛先アドレスおよび／または他の情報に基づいて、２つのポートの間で過渡的「回路」を作成する。スイッチを介する待ち時間は、パケットを転送する処理中にスイッチ内でデータ・パケット全体を保管する必要がないので、最小限である。クロスバ・マトリックス・アーキテクチャの短所は、複数のエントリ・ポートが同一のエクシット・ポートにデータを送ることを試みる時に発生するヘッドオブライン・ブロッキング（ｈｅａｄ−ｏｆ−ｌｉｎｅ  ｂｌｏｃｋｉｎｇ）である。共用バス・アーキテクチャでは、ポートの間のデータ・パケット用の交換機構として共通バスを使用する。設計に応じて、各入力ポートおよび各出力ポート（またはポートの小さいグループ）が、それ自体のメモリを有することができる。クロスバ・マトリックスに似て、共用バス・アーキテクチャは、ビジー・ポートでのブロッキングをこうむりやすい。
【０００３】
共用メモリ・アーキテクチャは、ポートの間のデータ・パケット用の交換機構として、単一の共通メモリを使用する。すべてのポートが、共用メモリ・バスを介して共用メモリにアクセスする。時分割多重などの調停機構が、メモリへのポート・アクセスを制御し、各エントリ・ポートが受け取られたデータを保管する機会を確保し、このデータに、エクシット・ポートによってアクセスすることができる。しかし、現在の共用メモリ・アーキテクチャに関する問題は、これらが、メモリへのポート・アクセスをブロックせずに、あるポートから別のポートに数ギガビット毎秒のデータを転送するのに十分に高速でないことである。そのような転送レートは、ローカル・エリア・ネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、テレフォニ、および他の種類のスイッチング・システムで使用されるより新しく極端に高速のパケット・スイッチを必要とする。
【特許文献１】米国仮出願第６０／４６４４６２号
【発明の開示】
【発明が解決しようとする課題】
【０００４】
したがって、より新しいネットワークに追い付くのに必要な極端に高いデータ・レートでスイッチを介してデータをトランスポートできるスイッチング・デバイス用の改善された共用メモリ・アーキテクチャの必要がある。
【課題を解決するための手段】
【０００５】
一般に、共用メモリ内のバッファの連続するバンクにデータ・パケットのシーケンシャル・データ単位を保管する方法および装置を開示する。データ・パケットは、複数のバッファを介して延びることができる（次バッファ・リンケージ情報は、次データ単位リンケージ情報より効率的である）。バッファ・メモリ利用は、単一のバッファに複数のパケットを保管することによってさらに質を高めることができる。
【０００６】
本発明のもう１つの態様は、共用メモリを管理する技法を提供する。バッファ使用カウントが、少なくとも１つのバッファについて維持される。バッファ使用カウントは、パケットのそれぞれがあてられた出力ポートの数の、バッファ内のすべてのパケットに関する合計の表示を提供する。バッファ使用カウントは、バッファが空いている時を判定する機構を提供する。バッファ使用カウントは、マルチキャスティング動作を実行するためにパケットの宛先ポートの個数を示すこともできる。
本発明ならびに本発明のさらなる特徴および利益のより完全な理解は、次の詳細な説明および図面を参照することによって得られる。
【発明を実施するための最良の形態】
【０００７】
図１は、本発明の特徴を組み込んだ共用メモリ・スイッチの全体的なブロック図である。この詳細な説明では、本明細書で使用される用語としての「データ単位」が、所与のデータ経路を介して並列に伝送されるデータの量を指す。通常、データ単位に、バイト、ワード、ダブル・ワード、およびクワッドワードが含まれる。データ単位のサイズは、データ経路に固有であり、あるデータ経路を介して伝送されるデータ単位は、同一システム内であっても、異なるデータ経路を介して伝送されるデータ単位と異なるサイズを有する場合がある。図１の実施形態では、データ単位が、すべての可視のデータ経路についてクワッドワードである。
【０００８】
ブロックは、本明細書で使用されるよりグローバルな概念であり、データ経路サイズに依存しない。特定のデータ経路が、データのブロック全体を並列に伝送する場合に、そのブロックは、定義により、１つのデータ単位だけを含む。データ経路が、一時に各ブロックの半分だけを伝送する場合に、そのデータ経路に関して、１ブロックに２つのデータ単位が含まれる。図１の実施形態では、１ブロックに８つのデータ単位が含まれることがわかる。本明細書で使用される用語「パケット」は、任意のプロトコルに従って生成されたデータ単位を指す。パケットは、プロトコルに応じて、サイズにおいて固定または可変とすることができる。本明細書で説明する実施形態は、可変サイズ・データ・パケットを効率的に処理するように設計されている。しかし、これらの実施形態は、固定サイズ・データ・パケットを処理することもできる。本明細書で使用する「データ・セグメント」は、データのセグメントを暗示するに過ぎない。したがって、データ・セグメントは、パケット、ブロック、フレーム、セル、データ単位、およびその一部、ならびに固定または可変の任意の長さのデータの他のすべてのグループ化に対して総称的である。
【０００９】
共用メモリ・スイッチング・ファブリックに、複数、この例では１６個のファブリック入力ポート１１２−０から１１２−１５（集合的に１１２）を有する入口装置１１０が含まれる。図１の単純化された実施形態では、入口装置が、１６個の入口装置データ書込ポート１１５−０から１１５−１５（集合的に１１５）を有する。各入口装置データ書込ポート１１５−ｉに、とりわけ、下でより十分に説明するように、アドレス部分１１５Ａｉとデータ部分１１５Ｄｉ（図には別々に図示せず）の両方が含まれる。
【００１０】
図１の図では、メモリ１１４が、１６個のバンク１１６に分割されている。入口装置データ書込ポート１１５は、それぞれ、共用マルチバンク・メモリ１１４のめいめいのメモリ・バンク１１６のめいめいのデータ書込ポートに接続される。しかし、実際のデバイスでは、メモリの異なるバンクが、図面に示されているように配置されない場合があり、互いに物理的に隣接する必要もない。バンク１１６は、この図では、１１６−０から１１６−１５の番号を付けられている。一般的に言って、メモリ・バンク１１６−ｉのデータ書込ポートは、入口装置データ書込ポート１１５−ｉに結合され、ｉ＝０…１５である。
【００１１】
共用マルチバンク・メモリ１１４は、さらに、複数のバッファ１１８に水平に分割されている。バッファには、１１８−０から１１８−（ｎｂｆ−１）の番号が付けられている。各バッファ番号は、バンク１１６の１つの中での異なるアドレスを表す。したがって、データが、入口装置データ書込ポート１１５の１つから共用マルチバンク・メモリのメモリ・バンク１１６の１つに書き込まれる時に、入口装置は、共用マルチバンク・メモリ１１４の適当なデータ書込ポートに、書き込まれるデータだけではなく、データが対応するメモリ・バンク１１６内に書き込まれるアドレスまたはバッファ番号も指定する。本明細書で説明する実施形態では、データが、クワッドワード（ＱＷＤ）（８バイト）データ単位で共用メモリ１１４のデータ書込ポートに供給される。各バンク内で、各バッファは、１つのクワッドワードのデータを保持するサイズにされている。さらに、この単純化された実施形態では、メモリ１１４内に１６個のバンク１１６があるので、各バッファは、１６個のクワッドワードまたは１２８バイトのデータを保持することができる。例示的実施形態では、共用メモリ１１４に、１６６４個のバッファが含まれ、これは、アドレッシングに１１ビットを必要とする。
【００１２】
メモリ構造は、図１では行および列に配置されて示され、各列が「バッファ」と呼ばれ、各行が「バンク」と呼ばれているが、物理構造を異なるものにすることができることを諒解されたい。列を、本明細書では「バッファ」と呼ぶが、この用語を、本明細書でメモリのセクション以外の構造または目的を暗示するものと解釈してはならない。同様に、メモリ「バンク」は、各バッファをメモリ・セグメントに分割する。通常、すべてのバッファに、同一の個数のメモリ・セグメントが含まれるが、これは、本発明のいくつかの態様で、絶対必要条件ではない。
【００１３】
共用メモリ１１４の各バンク１１６は、バンク内の指定されたバッファからクワッドワードのデータを読み取るための対応するデータ読取ポートを関連付けられてもいる。各読取データ・ポートは、出口装置１２０の対応するポートに結合される。入口装置データ書込ポート１１２に似た形で、出口装置データ読取ポートに、１２２−０から１２２−１５の番号が付けられている。各出口装置データ読取ポート１２２−ｉに、出口装置１２０から共用メモリ１１４に向かって流れるアドレス部分１２２Ａｉと、共用メモリ１１４から出口装置１２０に向かって流れるデータ部分１２２Ｄｉが含まれる。共用メモリ１１４の特定のバンク内の特定のバッファからデータ単位を読み取るために、出口装置は、共用メモリ１１４の適当な読取データ・ポートに読取アドレス（バッファ番号）を供給する。共用メモリ１１４は、指定されたバッファからデータを取り出し、このデータを、読取アドレスが供給されたのと同一の出口装置データ読取ポートで出口装置１２０に供給する。出口装置１２０は、１６個の出口装置出力ポート（ファブリック出力ポートとも称する）１２４−０から１２４−１５（集合的に１２４）も有する。
【００１４】
図１のスイッチング・ファブリックに、入口装置１１０によって受け取られ、共用メモリ１１４に書き込まれた各データ・パケットを伝送するシーケンス順序および宛先ファブリック出力ポート１２４を判定するパケット記述子プロセッサ（ＰＤＰ）１２６も含まれる。ＰＤＰは、データ・パケットがファブリック入力ポートの到着した時にそのデータ・パケットのヘッダ内の情報に基づいて宛先ファブリック出力ポートを決定し、それがファブリックに到着したシーケンスならびに各パケットのサービスのクラスに基づいて、ファブリック出力ポートを介する送信のためにパケットがキューイングされるシーケンスを決定する。ＰＤＰは、より高い優先順位のパケットへのより高い優先順位の切替を許可するために、発信データ・パケットを１ブロック（８クワッドワード、６４バイト）境界でプリエンプトさせることができる。図１のスイッチング・ファブリックに、とりわけ、共用メモリ１１４内のバッファを割り振り、その使用を記憶するメモリ管理ユニット（ＭＭＵ）１２８（下で図４、５、および１５に関してより十分に説明する）も含まれる。図１のスイッチング・ファブリックには、図１のファブリックの動作を監督するのに必要なプロセッサおよびさまざまな他の制御機能を含めることができる、制御回路１３０も含まれる。制御ユニット１３０は、図１では別々の単一モジュールとして示されているが、実際の実装で、制御ユニット１３０のさまざまな部分または機能を、実際にはファブリックのさまざまなモジュールの間で分散することができることを諒解されたい。
【００１５】
入口装置１１０に、ファブリック入力ポート１１２ごとに１つの受信ポート・コントローラ（ＲＸＰＣ）１４０（下で図２および１０に関してより十分に説明する）が含まれる。各受信ポート・コントローラ１４０−ｉは、それに対応するファブリック入力ポート１１２−ｉからデータ単位をストリームで受け取る。下でより詳細に説明するある任意選択の並べ換えの後に、ＲＸＰＣ  １４０−ｉは、めいめいのストリーム１３２−ｉで、書込スイッチ１３４の対応する入力ポートにデータ単位を供給する。各ストリーム１３２−ｉに、他の情報の中でも、アドレス部分１３２Ａｉとデータ部分１３２Ｄｉ（別々には図示せず）の両方が含まれる。データ部分１３２Ｄｉは、１クワッドワードのデータを担持し、アドレス部分１３２Ａｉは、データが書き込まれるバッファ・アドレスを担持する。書込スイッチは、入口装置１１０のデータ書込ポート１１５を形成する１６個の出力ポートを有する。書込スイッチ１３４は、本質的に、その出力１１５−ｉのそれぞれで、受信ポート・コントローラの回転するシーケンスからの情報を供給する循環データ経路ローテータ（ｃｙｃｌｉｃａｌ  ｄａｔａ  ｐａｔｈ  ｒｏｔａｔｏｒ）である。したがって、あるサイクルのｋ番目のタイム・スロットごとに、書込スイッチ１３４は、その出力ポート１１５−ｉのそれぞれで、ＲＸＰＣ  １４０−（ｉ＋ｋ）からのアドレスとデータの組合せを供給する。言い換えると、受信ポート・コントローラ１４０によってそのめいめいの出力データ・ストリーム１３２に出力されるデータ単位は、入口装置データ書込ポートの回転するシーケンスに現れ、各ＲＸＰＣ  １４０−ｉによってその出力データ経路１３２−ｉに出力される各ｋ番目のデータ単位が、入口装置データ書込ポート１１５−｛（ｉ＋ｋ）ｍｏｄ１６｝に現れる。各データ単位が、書込スイッチ１３４の循環回転に従って共用メモリ１１４の正しいバンク１１６に書き込まれるために正しい時に書込スイッチ１３４に供給されることを保証するのは、受信ポート・コントローラの責任である。
【００１６】
本明細書で使用する用語「タイム・スロット」は、参照の特定の入力で経験される定義された時間期間を指す。「特定の時間スロットに」あるユニットから別のユニットに供給される情報は、その特定のタイム・スロット内に宛先ユニットに達するのに適当な時にソース・ユニットから供給される。パイプライン化遅延および他の遅延に起因して、情報は、ソース・ユニットによってより以前のタイム・スロット中にアサートされる場合があり、その結果、この情報が、所望の特定のタイム・スロット内に宛先で受け取られるようになる。１実施形態で、タイム・スロットは、宛先参照ユニットで受け取られるクロック信号によって定義することができ、各タイム・スロットは、完全な１クロック・サイクル（セットアップ時間およびホールド時間を除く）と等しい持続時間を有する。複数の出力が、「特定のタイム・スロットに」情報を供給すると言われる場合に、その情報が、異なるタイム・スロット中に異なる出力によってアサートされる可能性があるが、これらの情報のすべてが、共通の「特定の」タイム・スロット中に参照ユニットに現れる。もう１つの実施形態で、タイム・スロットを、連続する複数のクロック期間によって定義することができる。この場合に、複数の出力が「特定のタイム・スロットに」情報を供給すると言われる場合に、システムは、各出力が、その特定のタイム・スロット内の特定のクロック・エッジに間に合って宛先参照ユニットで受け取られるのに間に合ってその情報をアサートするように設計することができる。したがって、情報は、スタッガード式または時間領域多重化（ｔｉｍｅ  ｄｏｍａｉｎ  ｍｕｌｔｉｐｌｅｘｅｄ、ＴＤＭ）の形で宛先ユニットに供給し、宛先ユニット内でクロッキングすることができ、各ソース出力は、特定のタイム・スロット内のめいめいの事前に割り当てられたイベントに間に合って宛先ユニットに達するように情報をアサートする。
【００１７】
出口装置１２０には、ファブリック出力ポート１２４ごとに１つの送信ポート・コントローラ（ＴＸＰＣ）１４２（下で図３、１３、および１４に関してより十分に説明する）も含まれる。各送信ポート・コントローラ１４２は、共用メモリ１１４内のデータ・パケットからのストリーム内の、対応するファブリック出力ポート１２４宛のデータ単位を送出する。ＰＤＰ  １２６は、データ単位の取出を開始すべき共用メモリ１１４内の開始アドレス（バッファ番号およびバンク番号）について各ＴＸＰＣ  １４２に通知し、ＴＸＰＣ  １４２は、読取スイッチ１３６を介して適当なデータ単位をシーケンシャルに要求する。読取スイッチ１３６は、その１６個のデータ読取ポート１２２が共用メモリ１１４の対応するデータ読取ポートに接続されているという点で書込スイッチ１３４に似ている。書込スイッチ１３４に似て、読取スイッチ１３６は、個々のＴＸＰＣ  １４２からのデータ取出要求（一部はアドレス）を、循環式に回転するシーケンスでメモリ１１４のさまざまなバンク１１６のさまざまなデータ読取ポートに運ぶ。ある［固定された？？？］時間の後に、共用メモリ１１４から取り出されたデータが、データ読取ポートのデータ部分１２２Ｄ（別々には図示せず）を介して要求元のＴＸＰＣ  １４２に返される。読取スイッチ１３６内の戻りデータ経路は、その取出要求を運ぶ経路と同一の形で回転するが、各データ単位がそれを要求したものと同一のＴＸＰＣ  １４２に返されることを保証するために、適当な固定されたクロック・サイクル数だけ遅延されている。各ＴＸＰＣ  １４２−ｉは、めいめいの通信経路１３８−ｉのアドレス部分１３８Ａ−ｉ（別々には図示せず）でそのデータ取出要求のアドレスを供給し、めいめいの通信経路１３８−ｉのデータ部分１３８Ｄ−ｉ（別々には図示せず）を介して戻りデータを受け取る。
【００１８】
あるサイクルのｋ番目のタイム・スロットごとに、共用メモリ・データ読取ポートで、読取スイッチ１３６が、共用メモリ１１４のデータ読取ポートのアドレス部分１２２Ａｉに向かって、ＴＸＰＣ  １４２−｛（ｉ＋ｋ）ｍｏｄ１６｝からの取出アドレスを供給する。言い換えると、送信ポート・コントローラによってそのめいめいの取出アドレス線１３８Ａで生成されたデータ取出アドレスは、共用メモリ１１４のデータ読取ポートに向かって出口装置ポートの回転するシーケンスに現れ、各ＴＸＰＣ  １４２−ｉによって読取スイッチ１３６に向けてその経路１３８Ａｉで生成された各ｋ番目のデータ取出アドレスが、それぞれ出口装置読取データ・ポート１２２−｛（ｉ＋ｋ）ｍｏｄ１６｝に現れる。各データ取出アドレスが、読取スイッチ１３６の循環回転に従って共用メモリ１１４の正しいバンク１１６のデータ読取ポートに供給されるために正しい時に読取スイッチ１３６に供給されることを保証するのは、送信ポート・コントローラ１４２の責任である。
【００１９】
同様に、ｉ番目の共用メモリ・データ読取ポートで、あるサイクルのｋ番目のタイム・スロットごとに、読取スイッチ１３６は、データ読取ポート１２２−ｉのデータ部分１２２Ｄｉ（別々には図示せず）から、ｋ番目のタイム・スロットについてＴＸＰＣ  １４２−ｉによって要求されたデータ単位を運ぶ。読取スイッチ１３６は、そのようなデータ単位をデータ経路１３８Ｄ｛（ｉ＋ｋ）ｍｏｄ１６｝に転送する。言い換えると、そのめいめいの戻りデータ線１３８Ｄで送信ポート・コントローラ１４２に返されるデータは、バンク１１６の回転するシーケンスから読み取られ、経路１３８Ｄｉで読取スイッチ１３６によって各ＴＸＰＣ  １４２−ｉに向かって転送される各ｋ番目のデータ単位は、バンク１１６｛（ｉ＋ｋ）ｍｏｄ１６｝から取り出される。
【００２０】
全体的な動作
図１のファブリックの全体的な動作で、データ・パケットは、個々のＲＸＰＣ  １４０によって入口装置１１０に受け取られ、ＲＸＰＣ  １４０は、このデータ・パケットを共用マルチバンク・メモリ１１４に書き込む。ＲＸＰＣ  １４０は、送出すべきパケットの可用性についてＰＤＰ  １２６に通知し、ＰＤＰ  １２６は、適当な１つまたは複数のＴＸＰＣ  １４２にパケットの送出を開始するように通知する。ＲＸＰＣ  １４０は、データのパケットをメモリ１１４に書き込む時に、パケットのシーケンシャル・データ単位をバッファの連続するバンクに書き込む。データ・パケットが、バッファの終りの前に終了する場合に、ＲＸＰＣ  １４０は、次のデータ・パケットを、同一のバッファの次の連続するバンクに書き込む。ＲＸＰＣ  １４０が、データ・パケットの終りに達する前にバッファの終りに達した場合には、ＭＭＵ  １２８が、新しいバッファをＲＸＰＣ  １４０に割り振り、このＲＸＰＣ  １４０は、新しいバッファのバンク０から開始して、パケットのさらなるデータ単位の書込を継続する。所与の着信データ・パケットのシーケンシャル・データ単位が、共用メモリ１１４内の各バッファの連続するバンクに書き込まれるので、各次のシーケンシャル・データ単位を見つけるべき場所を示すリンキング情報を、共用メモリ１１４内のパケットのシーケンシャル・データ単位に含める必要はない。ある従来技術の設計では、そのようなリンキング情報が、共用メモリ内の空間の２０％程度を占める可能性がある。さらに、複数のデータ・パケットの単位を単一のバッファにパックすることができることによって、図１のファブリックは、各パケットが新しいバッファのバンク０から始まることを必要とするシステムで浪費される可能性がある、パケットの終りを超えるバッファ空間のすべてを浪費することを防止する。
【００２１】
本明細書で使用される、２つのデータ単位が「シーケンシャル」であるのは、これらが伝送線に到着する際に時間的に連続している場合すなわち、一方が、間の他のデータ単位なしで他方に続く場合である。本明細書で「データ・パケット内でシーケンシャル」と記述されるデータ単位は、それでも、他のデータ単位、たとえば異なるインターリーブされたデータ・パケットのデータ単位によって、互いに分離されることができる。特定のデータ・パケット内のデータ単位だけを考慮する時に、２つのデータ単位がシーケンシャルである限り、この２つのデータ単位は、本明細書では「データ・パケット内でシーケンシャル」と考えられる。データ・パケットは、互いにインターリーブされている場合であっても「シーケンシャル」と考えられ、この場合のシーケンスは、データ・パケットが始まるシーケンスである。ＲＸＰＣ  １４０内で、「シーケンシャル」に到着したデータは、別の形で並列化または再編成することができる。しかし、通常、データのシーケンシャルな性質は、少なくとも論理的に維持される。
【００２２】
メモリ内の「連続する」ストレージは、メモリ内の連続するアドレスを有する。２つのアドレスが連続するのは、デバイスが、アドレスが増分される決定論的シーケンスを使用し、その決定論的シーケンスに従うアドレスの一方の１回の増分が、他方のアドレスを作る場合である。必ずではないが通常、決定論的シーケンスは、各次のアドレスが、前のアドレスより１つ高くなるものである。連続するメモリ位置は、連続するアドレスが決定論的シーケンスに従って厳密に数値的にシーケンシャルである場合であっても、物理的に隣接する必要がない。
【００２３】
共用メモリ１１４に保管されたパケットは、通常は、もちろん、メモリに書き込まれたのと同一の順序で伝送のために取り出されるのではない。したがって、特定のバッファ１１８に、複数のデータ・パケットからの単位が含まれる場合に、あるデータ・パケットの完全な取出は、必ずしも、そのバッファを再利用のために入口装置に解放できることを意味しない。バッファ使用および解放の情報を記憶するために、図１のファブリック、具体的にはＭＭＵ  １２８は、使用中のバッファ１１８ごとに、バッファが「空」と考えられる前に必要なバッファ「タッチ（ｔｏｕｃｈ）」の個数を示すストアを維持する。本明細書で使用される、メモリの部分（たとえば、バンクまたはバッファ）が「空」であるのは、それに含まれるデータについてそれ以上の使用が行われない場合である。メモリの部分が消去されている必要はない。
【００２４】
図１の実施形態でのバッファ「タッチ」には、そのバッファからのパケットの最後のデータ単位の読取が含まれ、そのバッファの最後のデータ単位の読取も含まれる（パケットの最後のデータ単位がバッファの最後のデータ単位と一致する場合には、１つのタッチだけが登録される）。１実施形態で、バッファが空と考えられる前に必要なバッファ・タッチの個数は、そのバッファ内で「表される」データ・パケットの個数と同一である。データ・パケットがバッファ内で「表される」のは、そのバッファに、そのパケットの少なくとも１つのデータ単位が含まれる場合である。したがって、最初のデータ単位が、所与のバッファの途中で終わり、次のデータ単位が、次の連続するバンクで始まり、別のバッファにオーバーフローしている場合に、所与のバッファのパケット使用カウントは２すなわち、最初のデータ・パケットの最後のデータ単位を取り出すための１つと、バッファの最後のデータ単位を取り出すための１つである。
【００２５】
バッファ使用カウントを維持することによって、マルチキャスト機能の実装も可能になる。具体的に言うと、特定のバッファ内で表される特定のデータ・パケットが、複数、たとえば３つのファブリック出力ポート１２４宛である場合に、その特定のバッファのバッファ使用カウントは、３タッチを計上するはずである。より一般的に言うと、バッファ使用カウントは、バッファ内で表されるすべてのパケットに関する、バッファ内で表されるパケットのそれぞれがあてられた出力ポートの個数の合計を示す。パケットがユニキャスト・パケットである場合に、そのパケットは１つのファブリック出力ポートだけにあてられているので、バッファ使用カウントに、そのパケットについて１つのタッチだけが含まれる。パケットがマルチキャスト・パケットであり、Ｎ個のファブリック出力ポート宛である場合に、バッファ使用カウントに、そのパケットについてＮタッチが含まれる。図１のファブリックでは、特定のパケットのために保管されたバッファからデータを取り出すように各宛先出力ポート１２４のＴＸＰＣ  １４２に指示するのは、ＰＤＰ  １２６の仕事である。３つのファブリック出力ポート１２４宛のマルチキャスト・パケットについて、ＰＤＰ  １２６は、対応する３つのＴＸＰＣ  １４２のそれぞれに、同一のデータを取り出すように指示する。各そのようなＴＸＰＣは、パケット・データのそれ自体の取り出しに関連して、１つのバッファ・タッチについてＭＭＵ  １２８に通知する。ＭＭＵ  １２８は、受け取ったタッチの個数を記憶し、バッファで表された各データ・パケットがあてられたＴＸＰＣ  １４２のすべてがタッチを示した時に限ってバッファを解放する。
【００２６】
共用メモリ１１４のＴＤＭインターフェースを除いて、ＲＸＰＣ  １４０は、互いとおよびＴＸＰＣ  １４２と独立に動作する。図２は、ＲＸＰＣ  １４０によって実行される主要な機能を示す単純化された流れ図である。本明細書で流れ図を示す時には、図示されたステップの多くを、達成される機能に影響せずに並列にまたは異なるシーケンスで実行できることを諒解されたい。図２の流れ図では、ＭＭＵ  １２８が、ＲＸＰＣ  １４０に空きバッファを割り振る（ステップ２１０）。ＲＸＰＣ  １４０は、空きバッファ番号プリフェッチＦＩＦＯを維持し、空きバッファ番号プリフェッチＦＩＦＯは、ＦＩＦＯが満杯でない時に、必ず、ＭＭＵ  １２８に次の空きバッファ番号を事前要求する。ステップ２１２中に、ＲＸＰＣ  １４０が、対応するファブリック入力ポート１１２からデータ・パケットのデータ単位を受け取る。ステップ２２２中に、テストを実行して、受け取ったデータ単位がパケットの最初のデータ単位であるかどうかを判定する。それがパケットの最初のデータ単位であると判定される場合に（ステップ２１４）、ＲＸＰＣ  １４０が、パケット記述子情報を保管し（ステップ２１６）、これがＰＤＰ  １２６に送られる。パケット記述子情報には、共用メモリ１１４内でのパケットの開始アドレス（バッファ番号およびバンク番号）、サービスのクラス、およびこの説明に関係しない他の情報が含まれる。パケット記述子情報には、ＰＤＰ  １２６が宛先の１つまたは複数のＴＸＰＣ  １４２（ユニキャストまたはマルチキャスト）を決定するのに使用できる着信パケット・ヘッダからの情報も含まれる。
【００２７】
ステップ２１８で、ＲＸＰＣ  １４０が、現在のデータ・パケットを計上するために現在のバッファのパケット使用カウントを更新する、すなわち、ユニキャスト・パケットの場合に、ＲＸＰＣ  １４０は、パケット使用カウントによって示されるカウントを１つ増分するか、これが現在のバッファへの最初の書込である場合にはカウントをクリアする。マルチキャスト・パケットの場合には、前に述べたように、ＲＸＰＣ  １４０は、このパケットがあてられたＴＸＰＣ  １４２（その情報は着信フレーム・ヘッダから入手可能である）の総数だけパケット使用カウントを増分するか、これが現在のバッファへの最初の書込である場合にはその数をカウントにセットする。本明細書で使用する情報の項目を「示す」値は、必ずしも、情報のそのような項目が直接に指定されることを必要としない。情報は、インダイレクションの１つまたは複数の層を介して実際の情報を単純に参照することによって、または情報の実際の項目を判定するのに十分な１つまたは複数の異なる情報の項目を識別することによって、「示す」ことができる。さらに、用語「識別する」は、本明細書では「示す」と同一のことを意味する。図１の実施形態では、バッファ使用カウントを「示す」ために保管される実際の値が、実際のカウントより１つ少ない。他の実施形態では、他の形でこのカウントを示すことができる。
【００２８】
ステップ２２０で、現在のデータ単位がパケットの最初のデータ単位であるか否かにかかわらず、ＲＸＰＣ  １４０が、共用メモリ１１４内の現在のバッファ１１８の最初の（次の）メモリ・バンクへの書込のために現在のデータ単位をキューイングする。ステップ２２２中に、テストを実行して、現在のバッファが満杯であるかどうかすなわち、バッファの終りに達したかどうか、または現在のバッファへの最後の書込以降にタイムアウトが経過したかどうかを判定する。現在のバッファが満杯であるか、現在のバッファへの最後の書込以降にタイムアウトが経過したと判定さる場合には、ＲＸＰＣ  １４０が、現在のバッファの最後のバッファ使用カウントについてＭＭＵ  １２８に通知する（ステップ２２４）。空きバッファ番号プリフェッチＦＩＦＯからの次空きバッファ番号が、現行バッファ番号になり、空きバッファ番号プリフェッチＦＩＦＯが、ＭＭＵ  １２８に次空きバッファ番号を事前要求する（ステップ２２６）。ステップ２２８で、ＲＸＰＣ  １４０が、最後のバッファ番号から現行バッファ番号へのリンケージ（ＴＸＰＣ  １４２の動作に関連して使用される）についてＭＭＵ  １２８に通知する。現在のデータ単位が、パケットの最後のデータ単位でもある場合には、このリンケージ情報が絶対に使用されないことに留意されたい。したがって、もう１つの実施形態では、ＲＸＰＣは、バッファの最後のデータ単位がパケットの最後のデータ単位でもある場合に、バッファ・リンケージについてＭＭＵに通知することを省略することができる。
【００２９】
ステップ２３０で、フレーム・フォーマットによって示されるように（着信フレームのトレーラ内のパケットの終り（ＥＯＰ）表示など）、現在のデータ単位がパケットの最後のデータ単位である場合に、ＲＸＰＣ  １４０は、その保管されたパケット記述子情報とパケット長情報をＰＤＰ  １２６に送る。
【００３０】
図３は、ＴＸＰＣ  １４２（図１）によって実行される主要な機能を示す単純化された流れ図である。ステップ３１０で、ＴＸＰＣ  １４２は、データの特定のパケットを共用メモリ１１４から送る指示をＰＤＰ  １２６から受け取る。そのような指示は、ＴＸＰＣ
【００３１】
１４２内のパケット送信指示ＦＩＦＯ（図示せず）に蓄積され、共用メモリ内のパケットの開始アドレス（バッファ番号およびバンク番号）、パケット長、サービスのクラス、およびこの説明に重要でない他の情報を含む。ステップ３１２で、指定された開始バッファ番号が、現行バッファ番号になる。ステップ３１４で、ＴＸＰＣ  １４２が、現行バッファ番号を供給することによって、ＭＭＵに次のリンクされたバッファ番号を事前要求する。ＴＸＰＣ  １４２は、ＭＭＵ  １２８からの次のリンクされたバッファ番号の事前フェッチＦＩＦＯ（図示せず）を維持し、バッファ番号がこのＦＩＦＯの先頭から取られる時に、必ず末尾からこのＦＩＦＯを再充てんする。
【００３２】
ステップ３１６で、ＴＸＰＣ  １４２は、現在のバッファの指定された開始（または次の連続する）メモリ・バンクからデータ単位を取り出し、ＴＸＰＣ  １４２に関連するファブリック出力ポート１２４への送出のためにキューイングする。ステップ３１８中に、テストを実行して、取り出されたデータ単位がパケットの最後のデータ単位であるかどうか（ＰＤＰ  １２６からの指示のパケット長値によって示される）、または取り出されたデータ単位が現在のバッファの最後のデータ単位であるかどうかを判定する。取り出されたデータ単位が、パケットの最後のデータ単位であると判定された場合、または、取り出されたデータ単位が、現在のバッファ内の最後のデータ単位であると判定された場合（ステップ３１８）に、ＴＸＰＣ  １４２は、現在のバッファのタッチについてＭＭＵ  １２８に通知する（ステップ３２０）。次に、テストを実行して、取り出されたデータ単位が現在のバッファ内の最後のデータ単位であるかどうかを判定する（ステップ３２２）。取り出されたデータ単位が現在のバッファ内の最後のデータ単位であると判定された場合に、事前要求された次のリンクされたバッファ番号が、現行バッファ番号になる（ステップ３２４）。ステップ３２６中に、テストを実行して、取り出されたデータ単位が、パケットの最後のデータ単位であるかどうかを判定する。取り出されたデータ単位がパケットの最後のデータ単位であると判定された場合（ステップ３２６）に、ＴＸＰＣ  １４２は、ステップ３１０に戻って、ＰＤＰ  １２６からの次のパケット送信指示を処理し、そうでない場合には、ＴＸＰＣ  １４２は、ステップ３１６に戻って、現在のバッファの次の連続するバンクから次のデータ単位を取り出す。
【００３３】
ＭＭＵ  １２８によって実行されるさまざまな動作または機能を最もよく理解するために、まず、共用メモリ１１４内のバッファ使用を管理するためにＭＭＵ  １２８が使用するさまざまなリストおよびメモリを識別することが有用である。図４に、これらのリストの単純化された組を示す。図からわかるように、ＭＭＵは、前に図１に関して説明したバッファ使用カウントの表示を含むバッファ状況ストア４０８を維持する。このストアは、バッファ番号によってインデクシングされ、前に述べたように、このリストに含まれる実際の値は、対応するバッファ１１８が空と考えられる前にＭＭＵ  １２８が通知（ＴＸＰＣ  １４２から）を受け取らなければならないタッチの数より１つ少ない。カウントは、ＲＸＰＣ  １４０によって供給されるバッファ使用カウントに応答して「書き込まれ」、ＴＸＰＣ  １４２からのタッチ通知に応答して「更新される」。本明細書で使用する値の「書込」は、その前に以前の値の読取があってもなくてもよく、値の「更新」は、以前の値に依存する値の書込を指す（メモリからの読取（ｒｅａｄ−ｍｏｄｉｆｙ−ｗｒｉｔｅ）または他所からの読取のいずれであれ）。
【００３４】
１実施形態で、バッファ状況ストア４０８に、現在のカウントを含む単一のリストを含めることができ、この現在のカウントは、ＲＸＰＣ  １４０によって書き込まれ、ＴＸＰＣ  １４２によってタッチに従って減分される。そのような実施形態では、バッファは、そのバッファの現在のカウントが０になった時に、空であり、再利用に使用可能と考えることができる。しかし、図４の実施形態では、バッファ状況ストア４０８に、２つの別々のリストすなわち、両方がバッファ番号によってインデクシングされる、バッファ使用カウンタ・リスト４１０およびバッファ解放カウンタ・リスト４１２が含まれる。ＭＭＵ  １２８がバッファに関するタッチ通知を受け取った時に必ず各バッファのバッファ使用カウントを減分するのではなく、ＭＭＵ  １２８は、その代わりに、バッファ解放カウンタ・リスト４１２の対応する項目を増分する。この２つのカウントが等しい時に、空のバッファが示される。両方の実施形態で、特定のバッファのカウント「によって示される」数は、本明細書での用語「示す」の使用のゆえに、そのバッファのタッチ通知に応答して「減分される」と言うことができる。
【００３５】
ＭＭＵ  １２８に、ＲＸＰＣ  １４０への割振りのための空きバッファ番号を含む空きバッファ・リスト４１４も含まれる。空きバッファ・リスト４１４は、ＦＩＦＯ構造である。バッファ番号は、このＦＩＦＯの先頭からＲＸＰＣ  １４０に供給され、ＴＸＰＣ  １４２によって空にされ、解放された（バッファ使用カウンタ・リスト４１０およびバッファ解放カウンタ・リスト４１２に従って）バッファは、空きバッファ・リスト４１４の末尾に追加される。他の実施形態では、空きバッファ・リスト４１４を、それぞれがめいめいのバッファに対応し、それぞれがバッファが空いているかどうかを示すビットのベクトルなど、他の形で構成することができる。ＭＭＵ  １２８に、バッファ・リンケージ・リスト４１６も含まれる。バッファ・リンケージ・リスト４１６は、現行バッファ番号によってインデクシングされ、前にＲＸＰＣ  １４０によって供給された次のリンクされたバッファ番号をその項目内で示す。
【００３６】
ＭＭＵ  １２８には、一連の循環「トレース」メモリまたはリスト４１８−０から４１８−１５も含まれ、１つのリストが、ＲＸＰＣ  １４０のそれぞれに対応する。各メモリ４１８は、ある長さのＣ個の項目を有し、対応するＲＸＰＣ  １４０に最も最近に割り振られたＣ個のバッファ番号のリストを含む。メモリ４１８は、回転するサイクルでのみ書き込まれ、新しい項目が、最も最近のＣ個より古い、以前の項目を上書きするようになっている。１実施形態で、Ｃ＝６である。循環トレース・メモリ４１８の目的を、後で説明する。
【００３７】
図５Ａ、５Ｂ、５Ｃ、５Ｄ、および５Ｅ（集合的に図５）は、ＭＭＵ  １２８によって実行される５つの特定の機能を示す流れ図である。図５Ａに、ＲＸＰＣ  １４０からバッファ要求を受け取った時に実行される機能が示されている。ステップ５１０で、ＭＭＵ  １２８が、空きバッファ・リスト４１４の先頭にあるバッファ番号をＲＸＰＣ  １４０に送る。ステップ５１２で、ＭＭＵ  １２８が、割り振られたバッファ番号を、空きバッファのリスト４１４から、それを要求したＲＸＰＣ  １４０の循環トレース・メモリ４１８の末尾に移動する。
【００３８】
図５Ｂでは、ＭＭＵ  １２８が、ＲＸＰＣ  １４０からバッファ使用カウント・レポートを受け取った時に、ＲＸＰＣ  １４０からのバッファ使用カウントを、指定されたバッファ番号によってインデクシングされるバッファ使用カウンタ・リスト４１０に書き込む（ステップ５１４）。
【００３９】
図５Ｃでは、ＭＭＵ  １２８が、次のリンクされたバッファの要求をＴＸＰＣ  １４２から受け取った時に、バッファ・リンケージ・リスト４１６の供給された現行バッファ番号の項目に保管されたバッファ番号を取り出す（ステップ５１６）。
【００４０】
図５Ｄでは、ＭＭＵ  １２８が、ＴＸＰＣ  １４２からバッファ・タッチ通知を受け取る場合に、ＭＭＵ  １２８は、バッファ解放カウンタ・リスト４１２の指定された現行バッファ番号に対応する項目からバッファ解放カウントを取り出し、バッファ使用カウンタ・リスト４１０の指定されたバッファ番号に対応する項目からバッファ使用カウントを取り出す。次に、テストを実行して、この２つのカウントが等しいかどうかを判定する。ステップ５１８中に、この２つのカウントが等しくない（バッファがまだ空でない）と判定される場合には、ＭＭＵ  １２８は、指定されたバッファのバッファ解放カウントを増分し（ステップ５２０）、この手順が終了する。２つのカウントが等しい（バッファが空である）場合には、ＭＭＵ  １２８は、バッファ解放カウンタ・リスト４１２内の指定されたバッファのバッファ解放カウントをクリアし（ステップ５２２）、ステップ５２４で、ＭＭＵ  １２８は、指定されたバッファ番号を空きバッファ・リスト４１４の末尾に追加する。バッファ・リンケージ・リスト４１６から、解放されたばかりのバッファ番号を消去する必要はない。というのは、それを現在含んでいる項目が、前のバッファ番号によってインデクシングされる項目であり、関連するバッファが新たにリンクされたバッファ番号によって既に上書きされた後になるまでもう一度読み取られないからである。
バッファのスクラビング（Ｓｃｒｕｂｂｉｎｇ）
【００４１】
共用メモリ１１４（実際には、すべての共用メモリ）は、入口装置１１０からのデータ単位を保管するのに使用可能な限られた個数のバッファ１１８を有する。バッファは、入口装置１１０によって使用され、その後、空にされた後に、出口装置１２０によって解放される。図１の実施形態のＭＭＵ  １２８は、バッファ１１８を記憶し、必要な時にバッファ１１８を入口装置１１０に割り振り、空になった時に空きリスト４１４に解放する責任を負う。バッファが失われることが発生する可能性がある。たとえば、ＭＭＵ  １２８が、ＲＸＰＣ  １４０の１つに空きバッファ番号を提供する場合に、アルファ粒子が、ＲＸＰＣ  １４０にクロッキングされる時にバッファ番号の１つのビットを反転させる可能性がある。この場合に、ＲＸＰＣ  １４０は、ＭＭＵ  １２８によって割り振られたものと異なるバッファ番号を受け取る可能性がある。ＲＸＰＣ  １４０は、次のデータ単位を誤ったバッファに書き込み、その後、通常に進行する。ＭＭＵ  １２８によって割り振られたバッファ番号は、どのＲＸＰＣ  １４０によっても書き込まれず、ＭＭＵの空きバッファ・リスト４１４にないので別のＲＸＰＣ  １４０に割り振るのに使用可能ではなく、ＲＸＰＣ  １４０からＰＤＰ  １２６に送られるパケット・バッファ情報で絶対に言及されず、ＰＤＰ  １２６がどのＴＸＰＣ  １４２にも絶対にそのバッファ番号から読み取るように指示しないので絶対に出口装置１２０によって解放されない。したがって、ＭＭＵ
【００４２】
１２８によって割り振られたこのバッファ番号が、失われる。数時間、数日、または数週間の期間を経て、共用メモリ１１４内のかなりの個数のバッファ１１８が、同様の形で失われる可能性がある。
【００４３】
この問題を克服し、すべての失われたバッファを回復するために、制御ユニット１３０は、時々（たとえば、数時間程度）バッファ・スクラブ動作を実行するようにＭＭＵ  １２８に指示する。図５Ｅは、そのような指示に応答してＭＭＵ  １２８内のバッファ・スクラブ論理によって実行される動作を示す流れ図である。ステップ５２６で、ＭＭＵ  １２８が、すべてのバッファ番号を通るループを開始する。たとえば、共用メモリ１１４に１６６４個のバッファが含まれる場合に、ＭＭＵ  １２８は、番号０〜１６６３を通ってループする。もう１つの実施形態で、一部またはすべてのバッファ番号を並列に検査することができるが、図１の実施形態では、バッファ消失が、失われたバッファの回復に対する緊急性がないのに十分に低い頻度で発生するので、シリアル・ループが十分に高速である。
【００４４】
バッファ番号が失われていない場合に、任意の所与の時に、そのバッファ番号は、空きバッファ・リスト４１４にあるか、ＲＸＰＣ  １４０の１つに割り振られ、したがってＲＸＰＣ  １４０の循環トレース・メモリ４１８内で表されているのいずれかである。ステップ５２８で、この２つの可能性を処理する。第３の可能性は、バッファ番号がＲＸＰＣ  １４０に割り当てられ、対応する循環トレース・メモリ４１８に書き込まれたが、その後、同一のＲＸＰＣ  １４０に割り振られた後続のバッファ番号によって循環トレース・メモリ４１８内で上書きされたことである。この場合に、バッファが失われていないならば、それが割り振られたＲＸＰＣ  １４０が、最終的にそのバッファを見つけ、ＰＤＰ  １２６が、最終的に出口装置１２０にそれを空にさせる。この第３の可能性が、ステップ５３２および５３４で処理される。
【００４５】
したがって、ステップ５２８で、ＭＭＵ  １２８内のバッファ・スクラブ論理が、現行バッファ番号について空きバッファ・リスト４１４およびすべての循環トレース・メモリ４１８をスキャンする。バッファ番号ごとに、テストを実行して、そのバッファ番号がこれらのメモリの１つに保管されているかどうかを判定する（ステップ５３０）。バッファ番号がこれらの位置の１つに保管されていると判定された場合に（ステップ５３０）、このルーチンは、ステップ５２６に戻って、次のバッファ番号を調べるが、そうでない場合には、スクラブ論理は、所定の（ソフトウェア・プログラム可能）ウォッチ期間の間、現行バッファ番号のバッファ解放コンパレータをウォッチする（ステップ５３２）。ウォッチ期間には、少なくとも、パケットがファブリックをトラバースする最大の期待される待ち時間と、ＲＸＰＣ  １４０がバッファを満たすのに期待される最大の時間の合計程度がセットされることが好ましい。したがって、バッファが、循環トレース・メモリ４１８の１つで既に上書きされたので空きバッファ・リスト４１４およびすべての循環トレース・メモリ４１８に存在しない場合に、そのバッファは、ウォッチ期間中に確かに解放される。ウォッチ期間の終りまでにバッファが解放された場合に（ステップ５３４）、現行バッファ番号は、失われておらず、バッファ・スクラブ論理は、ステップ５２６に戻って次のバッファ番号を調べる。現行バッファ番号が、ウォッチ期間の終りまでに解放されなかった場合に（ステップ５３４）、そのバッファ番号は、失われたと考えることができ、回復されなければならない。もう１つの実施形態では、バッファ・スクラブ論理は、ＴＸＰＣからのバッファ・タッチ表示自体など、バッファ解放論理の異なる部分をウォッチすることができる。スクラブ論理は、ステップ５３６で、失われたバッファ番号を空きバッファ・リスト４１４に書き込むことによって、失われたバッファを回復する。次に、バッファ・スクラブ論理は、ステップ５２６に戻って、次のバッファ番号を調べる。すべてのバッファ番号を検査した時に、バッファ・スクラブ手順が終了する（ステップ５３８）。
共用マルチバンク・メモリ
【００４６】
共用メモリ１１４（図１）は、バンクごとに１つの１６個のレジスタ・ファイルを用いて構成することができる。メモリ・バンク１１６は、単一ポート・メモリとすることができ、その場合に、メモリへの出口アクセスは、メモリへの入口アクセスと交番するように設計することができる。しかし、図１の実施形態では、各バンク１１６が、１つの読取ポートと１つの書込ポートのデュアル・ポート・メモリを用いて構成されている。デュアル・ポート・メモリは、読取と書込を同時に行うことを可能にし、メモリによって許容されるデータ・レートが効果的に２倍になる。
【００４７】
データ・レートは、グループでメモリの追加バンクを追加し、バンク１１６の各グループにＭ個のバンク・メンバが含まれるようにすることによってさらに高めることができる。図６は、メモリ・バンクの各グループにＭ個のメンバがある、メモリ・バンクのＮ個のグループを有する共用メモリ１１４の編成を示すブロック図である。図１のファブリックでは、Ｎ＝１６およびＭ＝１である。図６を参照すると、バンクのＮ個のグループ６１６、６１６−０から６１６−（Ｎ−１）が示されている。グループ６１６−０に、Ｍ個のバンク・メンバ６１７−（０，０）から６１７−（０，（Ｍ−１））が含まれる。同様に、グループ６１６−（Ｎ−１）に、Ｍ個のバンク・メンバ６１７−（（Ｎ−１），０）から６１７−（（Ｎ−１），（Ｍ−１））が含まれる。一般に、グループ６１６−ｇに、Ｍ個のバンク・メンバ６１７−（ｇ，０）から６１７−（ｇ，（Ｍ−１））が含まれる。メモリ１１４は、図１に示されているように、水平次元でバッファ１１８に分割されたままである。
【００４８】
図に示され、本明細書に記載された番号付けは、説明の正確さのために便利であるが、図の項目番号とデバイス上の物理的項目の間の対応が、完全に任意であることを諒解されたい。この対応の唯一の必要条件は、図で異なる番号を担う項目が、物理デバイスの異なるめいめいの項目に対応することである。さらに、項目の組が、本明細書ではハイフン指定を用いて番号を付けられているが、ハイフン付きのサフィックスがない同一の指定が、これらの項目の例示的な１つを指すことを理解されたい。たとえば、グループのｇ番目のメンバに、６１６−ｇという番号を付ける場合があるが、そのグループのすべての例示的メンバを、本明細書で単に６１６として参照する場合があることを理解されたい。
【００４９】
各メモリ・バンク・グループ６１６−ｇに、Ｍ個のデータ書込ポート６１２（ｇ，０）から６１２−（ｇ，（Ｍ−１））（例示的に６１２）およびＭ個のデータ読取ポート６２２−（ｇ，０）から６２２−（ｇ，（Ｍ−１））（例示的に６２２）が含まれ、これらのすべてを同時にアクティブにすることができる。各データ書込ポートに、データ部分およびアドレス部分だけではなく、データ有効信号（図示せず）と、メモリ１１４のグループ化された構成を最もよく利用するためにグループ・メンバ選択信号が含まれる。グループ・メンバ選択信号の使用を介して、入口装置１１０は、メモリ・バンクのグループのいずれかのデータ書込ポートのデータ部分のデータを、グループの任意のバンク・メンバ内の指定されたアドレスに書き込むことを指示することができる。たとえば、データ書込ポート６１２−（０，０）で、グループ・メンバ選択信号が、データをグループ６１６−０のＭ個のバンク６１７のいずれかの指定されたアドレスに書き込むことを指定することができる。類似する機能が、データ読取ポート６２２側で出口装置１２０に提供される。したがって、効果的に、入口装置１１０および出口装置１２０のそれぞれが、メモリ１１４の所与のグループの所与のバンクとの間でそれぞれデータを書き込むか読み取るためのＭ個の使用可能な経路を有する。この機能によって、効果的に、メモリ１１４の使用可能データ・スループットがＭ倍になる。
【００５０】
図７Ａおよび７Ｂは、メモリ１１４内のバンクのグループ６１６−ｇをどのように実装できるかを示すブロック図である。図７Ａに、メモリ１１４のデータ書込側を示し、図７Ｂに、メモリ１１４のデータ読取側を示す。１つのグループ６１６−ｇだけが示されているが、他のグループ６１６は類似する。図７Ａを参照すると、データ書込ポート６１２−（ｇ，０）に、メンバ０データ部分７１０−０、メンバ０アドレス部分７１２−０、およびグループ・メンバ選択信号７１４−０が含まれる。同様に、データ書込ポート６１２−（ｇ，１）に、メンバ１データ部分７１０−１、メンバ１アドレス部分７１２−１、およびグループ・メンバ選択信号７１４−１が含まれる。データ書込ポート６１２−（ｇ，（Ｍ−１））に、メンバ（Ｍ−１）データ部分７１０−（Ｍ−１）、メンバ（Ｍ−１）アドレス部分７１２−（Ｍ−１）、およびグループ・メンバ選択信号７１４−（Ｍ−１）が含まれる。バンク６１７のそれぞれ自体が、Ｍ個のデータ書込ポートおよびＭ個のデータ読取ポートを含むマルチポート・メモリである。
【００５１】
バンク６１７のそれぞれのデータ書込ポート６１２のそれぞれに、さらに、ポートのデータおよびアドレスの情報が有効であるかどうかを示すイネーブル信号入力が含まれる。イネーブル線７２５がアサートされているデータ書込ポート６１２だけが、バンクにデータを書き込む。グループのデータ書込ポート６１２の各ｊ番目のデータ書込ポートのアドレス部分およびデータ部分７１０−ｊおよび７１２−ｊは、それぞれ、グループのすべてのバンク６１７のｊ番目のデータ書込ポート６１２のアドレス部分およびデータ部分に共通して接続される。グループのデータ書込ポート６１２の各ｊ番目のデータ書込ポートのグループ・メンバ選択信号７１４−ｊは、０から（Ｍ−１）までの範囲の番号を担持し、Ｍ個のバンク・メンバのうちのどれに、データ書込ポートｊからのデータがロードされるかを示す。各グループ・メンバ選択信号７１４−ｊは、めいめいのデコーダ７１６−ｊに供給され、デコーダ７１６−ｊは、信号７１４−ｊをＭ個の別々のイネーブル信号にデコードし、このイネーブル信号のうちの１つだけを、ある時にアサートすることができる。各デコーダ７１６−ｊは、「ｖａｌｉｄ」信号（図示せず）も受け取り、この信号は、アサートされていない場合に、デコーダ７１６−ｊに、そのイネーブル線出力のすべてをアンアサートさせる。各デコーダ７１６−ｊの各ｂ番目の出力は、ｂ番目のバンク６１７−（ｇ，ｂ）のｊ番目のデータ書込ポート６１２のイネーブル入力に供給される。したがって、グループ内の各ｂ番目のバンク・メンバ６１７の各ｊ番目のデータ書込ポート６１２のデータ部分のデータは、アドレス線７１２−ｊで指定されたアドレスに書き込まれるが、グループ・メンバ選択入力７１４−ｊによって指定されたバンクのみに、ポート６１２−（ｇ，ｊ）のｖａｌｉｄ信号がアサートされている場合に限って書き込まれる。
【００５２】
図７Ｂを参照すると、データ読取ポート６２２−（ｇ，０）に、メンバ０データ部分７２０−０、メンバ０アドレス部分７２２−０、およびグループ・メンバ選択信号７２４−０が含まれる。同様に、データ読取ポート６２２−（ｇ，１）に、メンバ１データ部分７２０−１、メンバ１アドレス部分７２２−１、およびグループ・メンバ選択信号７２４−１が含まれる。データ読取ポート６２２−（ｇ，（Ｍ−１））に、メンバ（Ｍ−１）データ部分７２０−（Ｍ−１）、メンバ（Ｍ−１）アドレス部分７２２−（Ｍ−１）、およびグループ・メンバ選択信号７２４−（Ｍ−１）が含まれる。
【００５３】
バンク６１７のそれぞれのデータ読取ポート６２２のそれぞれに、さらに、読取アドレスがそのデータ読取ポート６２２で有効であるかどうかを示すイネーブル信号入力が含まれる。そのイネーブル線７３５がアサートされているデータ読取ポート６２２だけが、取り出されるデータを出口装置１２０にアサートする。グループのデータ読取ポート６２２の各ｊ番目のデータ読取ポートのアドレス部分およびデータ部分は、それぞれ、グループのすべてのバンク６１７のｊ番目のデータ読取ポート６２２のアドレス部分およびデータ部分に共通して接続される。グループのデータ読取ポート６２２の各ｊ番目のデータ読取ポートのグループ・メンバ選択信号７２４−ｉは、０から（Ｍ−１）までの範囲の番号を担持し、Ｍ個のバンク・メンバのどれが、グループのデータ読取ポートｊに向かってデータを駆動するかを示す。各グループ・メンバ選択信号７２４−ｊは、めいめいのデコーダ７２６−ｊに供給され、デコーダ７２６−ｊは、信号７２４−ｊをＭ個の別々のイネーブル線にデコードし、このイネーブル線のうちの１つだけを、ある時にアサートすることができる。各デコーダ７２６−ｊは、「ｖａｌｉｄ」信号（図示せず）も受け取り、この信号は、アサートされていない場合に、デコーダ７２６−ｊに、そのイネーブル線出力のすべてをアンアサートさせる。各デコーダ７２６−ｊの各ｂ番目の出力は、ｂ番目のバンク６１７−（ｇ，ｂ）のｊ番目のデータ読取ポート６２２のイネーブル入力に供給される。したがって、そのグループ・メンバ選択入力７２４−ｊがアサートされているバンク・メンバ６１７だけのｊ番目のデータ読取ポート６２２が、ポート６２２−（ｇ，ｊ）のｖａｌｉｄ信号がアサートされている場合に限って、アドレス線７２２−ｊで指定されたアドレスからのデータをデータ読取ポート６２２−（ｇ，ｊ）に駆動する。
【００５４】
グループ・メンバ選択信号７２４−ｊは、返されるデータと共に、対応するグループ・メンバ・ソース信号７３０−ｊとして出口装置１２０に返され、その結果、そのデータを受け取る送信ポート・コントローラ１４２が、そのデータが実際のどのバンク６１７から来たかを知るようになる。各グループ・メンバ・ソース信号７３０−ｊは、メモリ・バンク６１７の時間遅れと同等のめいめいの遅延要素７２８−ｊによって遅延される。
【００５５】
Ｍ＝２である実施形態を、これから説明する。図８を参照すると、メモリ・バンク８１７の１６個のグループ８１６が示されており、各グループ８１６に、２つのバンク８１７が含まれる。各ｇ番目のグループ８１６−ｇは、ｇおよびｇ＋１６という番号を付けられた２つのデータ書込ポートと、同様の番号を付けられた２つのデータ読取ポートを有する。一般に、バンクのＮ個のグループおよび各グループ内のＭ＝２個のメンバについて、ｇ番目のグループ８１６−ｇのデータ読取ポートおよびデータ書込ポートは、ｇおよびｇ＋Ｎという番号を付けられる。便宜上、各グループの２つのメンバを、本明細書では、時々、下メンバおよび上メンバと称し、下メンバは、０…１５の範囲の番号を有するメンバであり、上メンバは、１６…３１の範囲の番号を有するメンバである。
【００５６】
各メモリ・バンク・グループ８１６−ｇに、メモリ・バンク・グループ８１６−ｇの、それぞれ本明細書で時々上データ書込ポートおよび下データ書込ポートとも称する２つのデータ書込ポート８１２−ｇおよび８１２−（ｇ＋１６）が含まれる。各メモリ・バンク・グループ８１６−ｇに、２つのデータ読取ポート８２２−ｇおよび８２２−（ｇ＋１６）も含まれる。所与のメモリ・バンク・グループ８１６のすべてのデータ読取ポートおよびデータ書込ポートを、同時にアクティブにすることができる。各データ書込ポートに、データ部分およびアドレス部分だけでなく、データ有効信号（図示せず）およびグループ・メンバ選択信号も含まれ、グループ・メンバ選択信号は、データ書込ポートがグループ８１６の上バンクと下バンクのどちらでデータ書込要求を実行するかを選択する。同様に、各データ読取ポートに、データ読取ポート８２２がグループ８１６の上バンクと下バンクのどちらから要求されたデータを取り出すかを選択するグループ・メンバ選択信号が含まれる。したがって、効果的に、入口装置１１０および出口装置１２０のそれぞれが、メモリ１１４の任意の所与のグループ８１６の所与のバンクとの間でデータを書き込むか読み取る２つの（１つは主、１つは代替）の使用可能なルート（１つは主、１つは代替）を有する。この機能によって、メモリ１１４の使用可能スループットが効果的に２倍になる。
【００５７】
入口装置
図９は、図８のＭ＝２実施形態と共に使用される入口装置１１０の全体ブロック図である。これには、１６個のＲＸＰＣ  １４０および書込要求クロスバ・スイッチ１３４が含まれる。各ＲＸＰＣは、メモリ・バンク８１７（図８）のグループ８１６の上データ書込ポートおよび下データ書込ポートを参照する２つの書込要求経路９１０Ｌおよび９１０Ｕを有する。書込要求クロスバ・スイッチ１３４は、１６個の入力ポートＩ０−Ｉ１５を有し、この入力ポートのそれぞれは、ＲＸＰＣ  １４０の対応する１つからの書込要求経路の対を受けるように接続される。この実施形態の書込要求経路９１０Ｌまたは９１０Ｕのそれぞれが、６４ビット・データ単位、バッファ番号アドレス、ＲＸＰＣ  １４０内のバンク・カウンタの最上位ビット（ＭＳＢ）を示す１ビット、および有効性を示す１ビットを担持することがわかる。
【００５８】
書込要求クロスバ・スイッチ１３４は、１６個の出力ポートＯ０−Ｏ１５も有する。書込要求クロスバ・スイッチ入力ポートと同様に、各書込要求クロスバ・スイッチ出力ポートは、２つの７７ビット書込要求経路９１２Ｌおよび９１２Ｕを担持し、この実施形態には合計１５４ビットがある。各書込要求クロスバ・スイッチ出力ポートからの２つの書込要求経路９１２は、共用メモリ８１４のメモリ・バンク８１７の対応するグループ８１６の２つのめいめいのデータ書込ポートに供給される。図８に示されたポートおよびバンクの番号付けを参照すると、各経路９１２Ｌ−ｉは、共用メモリ８１４のデータ書込ポートｉに接続され、各経路９１２Ｕ−ｉは、共用メモリ８１４のデータ書込ポートｉ＋１６に接続される。より一般的には、Ｎ個の書込要求クロスバ・スイッチ出力ポートがあり、それぞれにＭ個の書込要求経路９１２が含まれ、それぞれがＭ個のバンク８１７を含むメモリのＮ個のグループ８１６がある場合に、各ｉ番目の書込要求クロスバ・スイッチ出力ポートの各ｊ番目の経路９１２は、共用メモリ８１４の（ｉ＋Ｎ＊ｊ）番目のデータ書込ポートに接続され、ｉ＝０…（Ｎ−１）およびｊ＝０…（Ｍ−１）である。
【００５９】
動作中に、書込要求クロスバ・スイッチ１３４は、その入力ポートの情報を、クロック・パルスごとに循環式に回転するシーケンスで出力ポートにルーティングする。たとえば、クロック・パルス０について、書込要求クロスバ・スイッチ１３４は、その入力ポートの各ｉ番目をその出力ポートの対応するｉ番目にルーティングする。クロック・パルス１について、書込要求クロスバ・スイッチ１３４は、入力ポートＩ１５が出力ポートＯ０に接続されることを除いて、その入力ポートの各ｉ番目をその出力ポートの対応する（ｉ＋１）番目にルーティングする。一般的にいえば、書込要求クロスバ・スイッチ１３４のＮ個の入力ポートおよびＮ個の出力ポートについて、ｋ番目のタイム・スロットごとに、スイッチ１３４は、そのｉ番目の入力ポートを｛（ｉ＋ｋ）ｍｏｄ１６｝番目の出力ポートにルーティングする。より一般的にいえば、それぞれがＭ個の書込要求経路９１０を有するＮ個のＲＸＰＣ  １４０と、それぞれがＭ個のメモリ・バンク８１７を有するＮ個のグループ８１６について、ｋ番目のタイム・スロットごとに、書込要求クロスバ・スイッチ１３４は、そのｉ番目のＲＸＰＣ  １４０の各ｊ番目の書込要求出力を、共用メモリ８１４の｛｛（ｉ＋ｋ）ｍｏｄＮ｝＋Ｎ＊ｊ｝番目のデータ書込ポートにルーティングする。
【００６０】
タイム・スロットｋは、ＴＤＭ回転カウンタ９１４によって書込要求クロスバ・スイッチ１３４に識別される。書込要求クロスバ・スイッチ１３４自体は、この実施形態ではパイプライン式に動作し、あるクロック・パルスに間に合ってその入力に現れる情報が、４クロック・パルス後になるまでその出力に現れないようになっている。それでも、書込要求クロスバ・スイッチ１３４の入力ポートに供給された情報は、メモリ１１４のデータ書込ポートで測定されるｋ番目のタイム・スロットの「ために」供給される。
【００６１】
受信ポート・コントローラ
図１０は、ＲＸＰＣ  １４０（図９）を示す機能ブロック図である。ファブリック入力ポート１１２から着信したデータ単位は、バンクＦＩＦＯ  １０１２のアレイ１０１０に供給される。図１０の実施形態には、それぞれが共用メモリ８１４の各データ書込ポート８１２に対応する３２個のバンクＦＩＦＯ  １０１２がある。図１０の実施形態では、バンクＦＩＦＯ  １０１２の各ｊ番目のバンクＦＩＦＯに書き込まれた書込要求が、最終的に共用メモリ８１４のｊ番目のデータ書込ポート８１２−ｊによって実行され、この書込要求には、そのようなデータ書込ポート８１２がグループ８１６の下バンクまたは上バンクのどちらにデータを書き込まなければならないかの表示が含まれる。ファブリック入力ポート１１２からのデータ単位は、最終的なＰＤＰ  １２６（図１）への伝送のために着信データ・パケットのヘッダからの情報を保管するための現行バッファ・ヘッダ情報ストア１０１４にも供給される。この実施形態では、３つのサポートされるサービスのクラスすなわち、優先順位の降順でＴＳ（ｔｉｍｅ  ｓｅｎｓｉｔｉｖｅ）、ＢＰ（ｂａｎｄｗｉｄｔｈ  ｐｒｏｖｉｓｉｏｎｅｄ）、およびＢＥ（ｂｅｓｔ  ｅｆｆｏｒｔｓ）のそれぞれに対応する３つまでの着信データ・パケットを、一緒にインターリーブすることができる。インターリーブされたパケットは、より高い優先順位クラスのデータ・パケットによる、より低い優先順位クラスのデータ・パケットのプリエンプションから生じる。この環境は、データ・パケットがそれ自体のクラスの別のデータ・パケットをプリエンプトできないように定義されているので、一時に３つまでのインターリーブされたデータ・パケットが可能である。
【００６２】
ＲＸＰＣ  １４０には、各書込要求の一部としてバンクＦＩＦＯ  １０１２に書き込まれるバッファ番号アドレスを供給するアドレス・ジェネレータ１０１６も含まれる。アドレス・ジェネレータ１０１６には、ＲＸＰＣ  １４０に割り振られた３つまでの現行バッファ番号を保管する３つのレジスタ１０１８が含まれる。やはり、一時に３つまでのインターリーブされたパケットを着信することができるので、３つの現行バッファ番号だけをレジスタ１０１８に保管する必要がある。新たに割り振られたバッファ番号は、空きバッファ番号プリフェッチＦＩＦＯ  １０２０の先頭から適当な現行バッファ番号レジスタ１０１８に書き込まれ、空きバッファ番号プリフェッチＦＩＦＯ  １０２０は、ＭＭＵ  １２８によって末尾から充てんされる。ファブリック入力ポート１１２から着信する各次のデータ単位を含むデータ・パケットのクラスに基づいて、マルチプレクサ１０２２が、そのデータ単位に対応する現在のバンクＦＩＦＯ  １０１２に書き込むための正しい現行バッファ番号を選択する。
【００６３】
ＲＸＰＣ  １４０には、着信データ単位を書き込まなければならない各次のバンクＦＩＦＯ  １０１２を記憶するバンク・エンキューイング選択論理１０２４も含まれる。やはり、潜在的に保留中のインターリーブされたパケットごとに１つの、３つの別々のバンク・カウンタが、バンク・カウンタ１０２６内で維持される。マルチプレクサ１０２８は、現在受け取られているデータ・パケットのクラスに正しいカウントを選択する。バンク・カウンタ１０２６のそれぞれは、独立に動作し、それぞれが、現行バッファ番号レジスタ１０１８内の３つの割り振られたバッファ番号の対応する１つの現行バンク番号カウントを保持する。バンク・カウンタ１０２６の１つがラップ・アラウンドして、もう一度バンクＦＩＦＯ  ０をポイントした時に、そのバンク・カウンタに対応する現行バッファ番号レジスタ１０１８が、バッファ番号プリフェッチＦＩＦＯ  １０２０からの新たに割り振られたバッファ番号をロードする。したがって、第２データ・パケットが第１データ・パケットに割り込み、その後、第１データ・パケットが再開される、例の着信データ・パケットでは、ＲＸＰＣ  １４０が、第１のバンク・カウンタ１０２６に依存するバンクＦＩＦＯ  １０１２の第１シーケンスに従ってバンクＦＩＦＯ  １０１２に第１データ・パケットのシーケンシャル・データ単位を書き込み、次に、第２のバンク・カウンタ１０２４に依存するバンクＦＩＦＯ  １０１２の第２のシーケンスに従ってバンクＦＩＦＯ  １０１２に第２データ・パケットのシーケンシャル・データ単位を書き込む。次に、第１データ・パケットを再開する時に、ＲＸＰＣ  １４０は、バンクＦＩＦＯ  １０１２の第１シーケンスに従って、バンクＦＩＦＯ  １０１２への第１データ・パケットのさらなるシーケンシャル・データ単位の書込を再開する。再開は、割込みの前の最後のデータ単位の後の次のシーケンシャル・バンク番号に従って行われ、データ単位がバッファの終りと一致しない限り、同一のバッファ番号アドレスに関連して書き込まれる。第３データ・パケットによるインターリーブは、同様に動作する。
【００６４】
カウンタ１０２６は、３２個すべてのバンクＦＩＦＯ  １０１２を通じて循環式にカウントするが、メモリ８１４の任意の所与のバンク８１７への書込要求に使用可能な２つの経路を利用するために、バンク・エンキューイング選択論理１０２４は、主経路のバンクＦＩＦＯ  １０１２が満杯の場合に、代替経路のバンクＦＩＦＯ  １０１２に着信データ単位をエンキューする能力も有する。したがって、バンク・エンキューイング選択論理に、ＭＳＢトグル論理１０３０が含まれる。ＭＳＢトグル論理１０３０は、マルチプレクサ１０２８のカウント出力と、バンクＦＩＦＯ  １０１２のそれぞれからの「ｆｕｌｌ」信号も受け取る。バンク・カウンタ１０２６が現在ポイントしているバンクＦＩＦＯ  １０１２が満杯の場合に、ＭＳＢトグル論理１０３０は、カウントの最上位ビットをトグルして、現在の着信データ単位がエンキューされるバンクＦＩＦＯ  １０１２を決定する。カウントの上位ビットのトグルは、カウントに１６を加算し、結果の１６を法とする剰余をとることと同一である。したがって、現在のカウントが６であるが、バンクＦＩＦＯ  １０１２−６が満杯の場合に、バンク・エンキューイング選択論理１０２４は、その代わりに、データ単位を保管するためにバンク１０１２−２２を選択する。バンクＦＩＦＯ  １０１２の深さは、主バンクＦＩＦＯと代替バンクＦＩＦＯ  １０１２の両方が満杯になることが不可能になるように選択される。バンク・エンキューイング選択論理１０２４は、１６…３１の範囲内のカウントであっても、所与のカウントについて代替バンクＦＩＦＯ
【００６５】
１０１２よりも主バンクＦＩＦＯ  １０１２を必ず選ぶが、異なる実施形態は、その選択を組み込む必要がない。
代替バンクＦＩＦＯ  １０１２にエンキューされたデータ単位が、それでもメモリ８１４の正しいメモリ・バンク８１７に書き込まれることを保証するために、バンク・エンキューイング選択論理１０２４は、トグルの前に、マルチプレクサ１０２８のカウント出力のＭＳＢを、選択されたバンクＦＩＦＯ  １０１２に書き込む。このビットは、データ単位およびバッファ番号と共にバンクＦＩＦＯに書き込まれ、書込要求クロスバ・スイッチ１３４を介して、メモリ８１４の対応するデータ書込ポートに運ばれる。メモリ８１４で、このビットは、データが書き込まれるグループ８１６のバンク８１７を選択するためのグループ・メンバ選択信号として働く。ＭＳＢが０であった場合に、データは、グループのどのデータ書込ポートがその要求を受け取ったかにかかわりなく、グループの下バンクに書き込まれる。ＭＳＢが１であった場合に、データは、グループのどのデータ書込ポートがその要求を受け取ったかにかかわりなく、グループの上バンクに書き込まれる。あるグループの両方のポートで受け取られるグループ・メンバ選択信号が、グループ内の同一のバンクをポイントすることが可能である。この場合には、書込アドレスが異なり、２書込ポート・バンク・メモリは、両方の書込を同時に実行することができる。
【００６６】
図１０のＲＸＰＣ  １４０を一般化し、図６の共用メモリ構造を参照すると、メモリ１１４内にそれぞれバンクのＭ個のメンバ６１７のＮ個のグループ６１６を有する実施形態で、ＲＸＰＣ  １４０に、Ｍ＊Ｎ個のバンクＦＩＦＯ  １０１２の組を含めることができる。バンク・カウンタ１０２６は、通常、組のすべてのＭ＊Ｎ個のバンクＦＩＦＯ  １０１２をサイクルするが、バンク・エンキューイング選択論理は、バンク・カウンタ１０２６によって示されるバンク６１７を含むグループ６１６のＭ個の書込要求ポートのいずれかに対応するバンクＦＩＦＯ  １０１２に着信データ単位（および現行バッファ番号）を書き込む能力を有する。言い換えると、バンクＦＩＦＯアレイ１０１０に、バンクＦＩＦＯのＮ個のグループのそれぞれにＭ個のバンクＦＩＦＯ  １０１２が含まれる。バンクＦＩＦＯ  １０１２−（ｉ＋Ｎ＊ｊ）のすべてが、バンクＦＩＦＯのｉ番目のグループのメンバであり、ｉ＝０…（Ｎ−１）、ｊ＝０…（Ｍ−１）である。関連するバンク・カウンタ１０２６の現在のカウントがｉである時に、バンク・エンキューイング選択論理１０２４は、現在のデータ単位およびそれに対応するバッファ・アドレスを、バンクＦＩＦＯのｉ番目のグループの任意のバンクＦＩＦＯ  １０１２に書き込むことができる。現在のカウントの上位ビットが、データ単位およびバッファ番号アドレスと共に、選択されたバンクＦＩＦＯ  １０１２に書き込まれて、バンク・グループ６１６−ｉのどのバンク・メンバ６１７がそのデータ単位を受け取らなければならないかが示される。
【００６７】
図１０に戻って、バンクＦＩＦＯ  １０１２は、０…１５からの厳密な数値シーケンス・サイクリングでデキューされる。バンク・デキューイング・カウンタ１０３２が、現行デキューイング・カウントを供給する。２つのバンクすなわち、バンク・デキューイング・カウンタ１０３２によって指定されるバンク番号およびそのバンク番号に１６を加えたものが、同時にデキューされる。ＲＸＰＣ  １４０は、２つのデータ・セレクタすなわち、バンクＦＩＦＯ  １０１２−０から１０１２−１５（下位バンクＦＩＦＯ）の間から書込要求情報を選択するデータ・セレクタと、バンクＦＩＦＯ  １０１２−１６から１０１２−３１（上位バンクＦＩＦＯ）の間から書込要求情報を選択するデータ・セレクタを有すると考えることができる。両方のデータ・セレクタが、同一のバンク・デキューイング・カウンタ１０３２に応答する。選択された下位バンクＦＩＦＯ  １０１２−０…１５からデキューされた書込要求情報に、データ単位、そのデータ単位がメモリ・バンク８１７内で書き込まれるバッファ番号アドレス、およびメモリ８１４の指定されたグループ８１６内のデータが書き込まれるバンク８１７を示すカウンタＭＳＢが含まれる。この情報は、書込要求経路９１０Ｌ上で共用メモリ８１４に運ばれる。選択された上位バンクＦＩＦＯ  １０１２−１６…３１からデキューされた書込要求情報は、同一の情報を含み、書込要求経路９１０Ｕ上で共用メモリ８１４に運ばれる。どちらの場合でも、選択されたバンクＦＩＦＯ  １０１２が空の場合に、アドレス、データ、およびＭＳＢ情報が、無意味であり、書込要求と共に運ばれる有効ビットが、アンアサートされる。
【００６８】
もう一度一般化し、図６の共用メモリ構造を参照すると、メモリ１１４内にバンクのＭ個のメンバ６１７のＮ個のグループ６１６を有する実施形態で、ＲＸＰＣ  １４０に、グループ内のバンク・メンバごとに１つのＭ個のデータ・セレクタが含まれる。ＲＸＰＣ  １４０に、連続するタイム・スロットにグループ０…（Ｎ−１）のすべてをサイクルするデキューイング・カウンタ１０３２も含まれる。カウント値ｋごとに、各ｊ番目のデータ・セレクタが、デキューのためにバンクＦＩＦＯ  １０１２−（ｋ＋Ｎ＊ｊ）を選択し、ｊ＝０…（Ｍ−１）である。
【００６９】
書込要求クロスバ・スイッチ１３４（図９）の循環スタッガ式多重化のゆえに、各ＲＸＰＣ−ｉが特定のタイム・スロットｋにデキューしなければならないバンクＦＩＦＯ  １０１２のブロックは、タイム・スロットｋにＲＸＰＣ−（ｉ−１）についてデキューされるバンクＦＩＦＯ  １０１２のグループより１つ上である。一般に、各ｋ番目のタイム・スロットに、各ｉ番目のＲＸＰＣ  １４０の下位データ・セレクタは、デキューのために｛（ｉ＋ｋ）ｍｏｄＮ｝番目のバンクＦＩＦＯ  １０１２を選択し、書込要求クロスバ・スイッチ１３４は、そのように選択された書込要求情報を、共用メモリ１１４の対応する｛（ｉ＋ｋ）ｍｏｄＮ｝番目のデータ書込ポートにルーティングする。さらに、メモリ・バンクが図８のように対にされている場合に、各ｋ番目のタイム・スロットに、各ｉ番目のＲＸＰＣ  １４０の上位データ・セレクタは、デキューのために｛Ｎ＋（ｉ＋ｋ）ｍｏｄＮ｝番目のバンクＦＩＦＯ  １０１２を選択し、書込要求クロスバ・スイッチ１３４は、そのように選択された書込要求情報を、共用メモリ１１４の対応する｛Ｎ＋（ｉ＋ｋ）ｍｏｄＮ｝番目のデータ書込ポートにルーティングする。より一般的に、メモリ・バンクのグループにＭ個のバンクが含まれる場合に、各ｉ番目のＲＸＰＣ  １４０のｊ番目のデータ・セレクタは、デキューのために｛ｊ＊Ｎ＋（ｉ＋ｋ）ｍｏｄＮ｝番目のバンクＦＩＦＯ  １０１２を選択し、書込要求クロスバ・スイッチ１３４は、そのように選択された書き込み要求情報を、共用メモリ１１４の対応する｛ｊ＊Ｎ＋（ｉ＋ｋ）ｍｏｄＮ｝番目のデータ書込ポートにルーティングする。したがって、所与のＲＸＰＣ  １４０内の各バンクＦＩＦＯ  １０１２は、共用メモリ８１４の単一の固定されたデータ書込ポートに対応する。
【００７０】
それぞれがメモリ８１４のデータ書込ポートの異なる１つに対応するバンクＦＩＦＯ  １０１２の組を、書込要求を保管するのに使用することによって、インターリーブされたデータ・パケットでファブリック入力ポート１１２に着信する単位の並べ換えが容易になり、これらを、高速で効率的なＴＤＭデータ書込ポート調停方式を使用して、バッファ（またはバッファのリンクされたシーケンス）の連続するバンクに書き込めるようになる。したがって、着信データ・パケットは、着信データ・ストリーム内で互いにインターリーブされている可能性があるが、ＲＸＰＣバンクＦＩＦＯ機構によって再組立され、共用メモリ１１４の１つまたは複数のリンクされたバッファのシーケンス内の連続するバンクに書き込まれる。着信データ・パケットを互いにインターリーブできない環境では、これほど多数のバンクＦＩＦＯ  １０１２を含める必要がない場合があることを諒解されたい。単一の入力ＦＩＦＯで十分である場合がある。メモリの各バンクへの２つの書込要求経路がある場合に、一部の実施形態に、２つの入力ＦＩＦＯを含めることができる。
【００７１】
前に述べたように、図１０の図は、ＲＸＰＣ  １４０の論理的機能性だけを表し、多数の異なる実装が可能である。たとえば、バンクＦＩＦＯ  １０１２のアレイ１０１０を、単一のデュアル・ポート（１つの書込ポートおよび１つの読取ポート）アドレッサブル・メモリとして実装することができる。図１１は、そのような実装の直接関係のある特徴を示す機能ブロック図である。図１１を参照すると、バンクＦＩＦＯアレイ１０１０（図１０）に、１読取ポート−１書込ポート・バンクＦＩＦＯアレイ・メモリ１１１０が含まれる。メモリ１１１０は、１６個のセグメントに分割され、各セグメントに、バンクＦＩＦＯ  １０１２−ｊおよび１０１２−（ｊ＋１６）の１対の項目が含まれ、ｊ＝０…１５である。各セグメントは、対の２つのバンクＦＩＦＯの間で共用される４つの書込要求項目を保持するのに十分に大きい。ＦＩＦＯアレイ１０１０には、末尾ポインタ１１１２の組も含まれ、末尾ポインタ１１１２の現在値は、バンク・エンキューイング選択論理１１２４の制御の下で、マルチプレクサ１１１４によってバンクＦＩＦＯアレイ・メモリ１１１０のデータ書込ポートの書込アドレス部分に選択される。データ単位、バッファ番号、およびバンク・カウンタＭＳＢを含む書込要求情報は、バンクＦＩＦＯアレイ・メモリ１１１０のデータ書込ポートのデータ部分に供給される。読取側では、ＦＩＦＯアレイ１０１０に、先頭ポインタ１１１６の組が含まれ、先頭ポインタ１１１６の現在値は、バンク・デキューイング論理１１３２の制御の下で、マルチプレクサ１１１８によってバンクＦＩＦＯアレイ・メモリ１１１０のデータ読取ポートのアドレス部分に選択される。末尾ポインタ１１１２と先頭ポインタ１１１６の両方に、それぞれポインタ増分機能１１２０および１１２２が含まれる。バンクＦＩＦＯアレイ・メモリのデータ読取ポートのデータ部分は、２つの選択されたバンクＦＩＦＯ  １０１２からの書込要求情報を、上下の経路９１０Ｌおよび９１０Ｕの両方で共用メモリ８１４に向かって供給する。多数の他の実装が明白になるであろう。
【００７２】
出口装置
図１２は、図８のＭ＝２実施形態と共に使用される出口装置１２０を示す全体ブロック図である。これには、１６個のＴＸＰＣ  １４２、読取アドレス・クロスバ・スイッチ１２１０、およびデータ戻りクロスバ・スイッチ１２１２が含まれる。アドレスおよびデータのクロスバ・スイッチ１２１０および１２１２は、少なくとも出口側で論理的に別々でなければならない（一緒に実装することはできるが）。というのは、データ読取要求およびそのような読取要求からの戻りデータが、反対方向に移動し、時間的に分離されているからである。各ＴＸＰＣ  １４２は、メモリ８１４（図８）のデータ読取ポートのグループ８１６の上メンバおよび下メンバに関連する２つの読取要求経路１２１４Ｌおよび１２１４Ｕを有する。読取アドレス・クロスバ・スイッチ１２１０は、１６個の入力ポートＩ０〜Ｉ１５を有し、この入力ポートのそれぞれが、ＴＸＰＣ  １４２の対応する１つからの読取要求経路の対を受けるように接続される。この実施形態の読取要求経路１２１４Ｌまたは１２１４Ｕのそれぞれが、バッファ番号と、ＴＸＰＣデキューイング・バンク・カウンタのＭＳＢを担持することがわかる。各読取アドレス・クロスバ・スイッチ１２１０入力ポートは、読取要求経路のうちの２つを受ける。
【００７３】
読取アドレス・クロスバ・スイッチ１２１０は、１６個の出力ポートＯ０からＯ１５も有し、このそれぞれが、この実施形態で合計２４ビットの２つの読取要求経路１２１６Ｌおよび１２１６Ｕを担持する。各読取アドレス・クロスバ・スイッチ出力ポートからの２つの読取要求経路は、共用メモリ８１４内のメモリ・バンク８１７の対応するグループ８１６の２つのめいめいのデータ読取ポートに供給される。図８に示されたポートおよびバンクの番号付けを参照すると、各読取要求アドレス経路１２１６Ｌ−ｉは、共用メモリ８１４のデータ読取ポートｉのアドレス部分に接続され、各読取要求アドレス経路１２１６Ｕ−ｉは、共用メモリ８１４のデータ読取ポートｉ＋１６のアドレス部分に接続される。より一般的に、Ｎ個のアドレス・クロスバ・スイッチ出力ポートがあり、それぞれにＭ個の読取要求アドレス経路１２１６が含まれ、それぞれがＭ個のバンク８１７を含むメモリのＮ個のグループ８１６がある場合に、各ｉ番目の読取アドレス・クロスバ・スイッチ出力ポートの各ｊ番目の経路１２１６は、共用メモリ８１４の（ｉ＋Ｎ＊ｊ）番目のデータ読取ポートのアドレス部分に接続され、ｉ＝０…（Ｎ−１）、ｊ＝０…（Ｍ−１）である。
【００７４】
各ＴＸＰＣ  １４２は、やはりメモリ１１４のデータ読取ポートのグループ８１６の上メンバおよび下メンバに関連する２つのデータ戻り経路１２１８Ｌおよび１２１８Ｕも有する。データ戻りクロスバ・スイッチ１２１２は、１６個の出力ポートＯ０からＯ１５を有し、この出力ポートのそれぞれに、２つのデータ戻り経路が含まれる。この実施形態の各データ戻り経路は、６４ビット・データ単位およびバンク・カウンタＭＳＢを担持する。データ戻りクロスバ・スイッチ１２１２は、それぞれがめいめいの経路１２２０Ｌおよび１２２０Ｕで２つの読取要求の戻りデータを担持する１６個の入力ポートＩ０からＩ１５も有する。各データ戻りクロスバ・スイッチ入力ポートの２つの戻りデータ経路は、メモリ・バンク８１７の対応するグループ８１６の２つのめいめいのデータ読取ポートのデータ部分に接続される。やはり図８に示されたポートおよびバンクの番号付けを参照すると、各データ戻り経路１２２０Ｌ−ｉは、共用メモリ８１４のデータ読取ポートｉのデータ部分に接続され、各データ戻り経路１２２０Ｕ−ｉは、共用メモリ８１４のデータ読取ポートｉ＋１６のデータ部分に接続される。さらに図６に示されているように一般化すると、Ｎ個のデータ戻りクロスバ・スイッチ入力ポートがあり、それぞれにＭ個のデータ戻り経路が含まれ、それぞれがＭ個のバンク６１７を含むメモリのＮ個のグループ６１６がある場合に、各ｉ番目のデータ戻りクロスバ・スイッチ入力ポートの各ｊ番目のデータ戻り経路は、共用メモリの（ｉ＋Ｎ＊ｊ）番目のデータ読取ポートのデータ部分に接続され、ｉ＝０…（Ｎ−１）、ｊ＝０…（Ｍ−１）である。
【００７５】
動作中に、読取アドレス・クロスバ・スイッチ１２１０は、読取要求をその入力ポートからその出力ポートへ、クロック・パルスごとに循環式に回転するシーケンスでルーティングする。一般的に言って、読取アドレス・クロスバ・スイッチ１２１０のＮ個の入力ポートおよびＮ個の出力ポートについて、各ｋ番目のタイム・スロットに、読取アドレス・クロスバ・スイッチ１２１０は、そのｉ番目の入力ポート対をその｛（ｉ＋ｋ）ｍｏｄ１６｝番目の出力ポート対にルーティングする。より一般的に言うと、それぞれがＭ個の読取要求経路１２１４を有するＮ個のＴＸＰＣ  １４２およびそれぞれがＭ個のメモリ・バンク６１７のＮ個のグループ６１６について、各ｋ番目のタイム・スロットに、読取アドレス・クロスバ・スイッチ１２１０は、各ｉ番目のＴＸＰＣ  １４２の各ｊ番目の読取要求出力を共用メモリ８１４の｛｛（ｉ＋ｋ）ｍｏｄＮ｝＋Ｎ＊ｊ｝番目のデータ読取ポートのアドレス部分にルーティングする。
【００７６】
データ戻りクロスバ・スイッチ１２１２は、動作中に、クロック・パルスごとの類似する循環式に回転するシーケンスで、戻りデータをその入力ポートからその出力ポートにルーティングする。それぞれがＭ個のデータ経路１２１８を有するＮ個のＴＸＰＣ  １４２およびそれぞれＭ個のメモリ・バンク６１７のＮ個のグループ６１６について、各ｋ番目のタイム・スロットに、データ戻りクロスバ・スイッチ１２１２は、各ｉ番目のＴＸＰＣ  １４２の各ｊ番目のデータ戻り入力に、共用メモリ６１４の｛｛（ｉ＋ｋ）ｍｏｄＮ｝＋Ｎ＊ｊ｝番目のデータ読取ポートのデータ部分をルーティングする。
【００７７】
入口側と同様に、タイム・スロットｋは、ＴＤＭ回転カウンタ１２２２によって、読取アドレス・クロスバ・スイッチ１２１０およびデータ戻りクロスバ・スイッチ１２１２に識別される。１実施形態で、２つのクロスバ・スイッチ１２１０および１２２２のそれぞれに１つの、２つの別々の回転カウンタ１２２２が使用される。データが、対応する読取要求がメモリに送られた後の固定されたクロック数で必ず共用メモリから返される場合に最も有用なもう１つの実施形態で、単一の回転カウンタ１２２２を使用することができ、データ戻りクロスバ・スイッチに供給されるｋは、読取アドレス・クロスバ・スイッチ１２１０に供給されるｋから固定された個数のクロック・サイクルだけ遅れている。さらに、回転カウンタ１２２２は、１実施形態では入口装置１１０の回転カウンタ９１４と同一とすることができ、もう１つの実施形態では別々のカウンタとすることができる。書込要求クロスバ・スイッチ１３４と同様に、読取アドレス・クロスバ・スイッチ１２１０とデータ戻りクロスバ・スイッチ１２１２の両方が、好ましい実施形態でパイプライン式の形で動作する。
【００７８】
送信ポート・コントローラ
各ＴＸＰＣ  １４２に、ＰＤＰ  １２６からパケット送信指示を受け取り、これをブロック・データ読取要求に変換するブロック・アドレス・キューイング・スケジューラ１２３０が含まれる。スケジューラ１２３０は、ＰＤＰ  １２６からのサービスのクラスごとに２つの記述子をプリフェッチする。クラスごとの記述子が空であるか使い果たされた時に、次の記述子が、プリフェッチ・エリアからデキューされる。各パケット記述子には、とりわけ、開始バッファ・アドレス、開始バンク番号、パケット長、およびサービスのクラスが含まれる。スケジューラ１２３０は、パケット記述子の１つに従って取り出されるブロックをスケジューリングする時に、残りの長さおよび次バンク番号を維持する内部レジスタも更新する。また、スケジューラ１２３０は、現行バッファ番号アドレスを用いてＭＭＵ  １２８に照会して、各パケットの次バッファ番号をバッファ・リンケージ・リスト４１６（図４）からプリフェッチする。
【００７９】
ブロック・アドレス・キューイング・スケジューラ１２３０は、クラスごとの情報を収集して、次に読み取るブロックを選択する。スケジューラ１２３０は、クラス優先順位、特定のクラスについて保留中のパケット記述子があるかどうか、および特定の候補パケット記述子の最初に必要なメモリ・バンクのバンク要求ＦＩＦＯ（下で説明する）が既に満杯であるかどうかを含む複数の要因に基づいて、３つのクラスからパケット記述子を選択する。次ブロックをスケジューリングするパケットを選択した後に、スケジューラ１２３０は、ブロックに２ビットのシーケンス番号（ＳＮ）をタグ付けする。各バンク・アクセスは、２つの別々のデータ要求経路を介して要求することができるので、要求されたデータがメモリ８１４からアウトオブオーダーで返される可能性がある。２ビットの要求シーケンス番号は、このデータの並べ換えを容易にするのに十分である。スケジューラ１２３０は、要求される次ブロックの開始バンク番号、そのブロックを見つけるべきバッファ番号、必要な場合にプリフェッチされた次のリンクされたバッファ番号、および少なくともブロックの最初のデータ単位に関連するシーケンス番号を、ＴＸＰＣ読取アドレス・ジェネレータ１２２４に転送する。また、スケジューラ１２３０は、パケット・ヘッダ情報およびシーケンス番号を含むあるブロック情報をＴＸＰＣ読取データ並べ換え機能１２２６に転送して、戻りデータを正しく並べ返るのを助ける。
【００８０】
ＴＸＰＣ読取アドレス・ジェネレータ１２２４は、３２個のバンク要求ＦＩＦＯを含み、ブロック・アドレス・キューイング・スケジューラ１２３０から受け取った各ブロック読取要求に応答して、８つまでのメモリ読取要求をエンキューする。バンク要求ＦＩＦＯは、デキューされ、読取アドレス・クロスバ・スイッチ１２１０を介して共用メモリ８１４に向かって送出される。また、読取アドレス・ジェネレータ１２２４は、ある情報を固定遅延の毎要求戻りＦＩＦＯ  １２２８を介してＴＸＰＣ読取データ並べ換え機能１２２６に向かって送り、この情報がそれに関連する戻りデータユニットと調整されてＴＸＰＣ読取データ並べ換え機能１２２６に達するようにする。ＴＸＰＣ読取データ並べ換え機能１２２６は、メモリ８１４から返されたデータ単位を受け取り、必要に応じて並べ換え、特定のＴＸＰＣのファブリック出力ポート１２４から送信する。
【００８１】
図１３は、ＴＸＰＣ読取アドレス・ジェネレータ１２２４の機能ブロック図である。多くの形で、このユニットの動作は、ＲＸＰＣ  １４０の動作に似ている。ＴＸＰＣ読取アドレス・ジェネレータ１２２４には、バンク要求ＦＩＦＯ  １３１２のアレイ１３１０が含まれる。ＲＸＰＣ  １４０のＦＩＦＯアレイ１０１０に似て、バンク要求ＦＩＦＯのアレイ１３１０は、１６個のセグメントに分割され、各セグメントにバンク要求ＦＩＦＯ  １３１２の１対に対応する項目が含まれる単一のアドレッサブル・メモリとして実装することができる。各セグメントは、対の２つのバンク要求ＦＩＦＯの間で共用される４つの読取要求を保持するのに十分に大きい。ＲＸＰＣ  １４０と同様に、図１３の実施形態には３２個のバンク要求ＦＩＦＯ  １３１２があり、１つのバンク要求ＦＩＦＯが、共用メモリ８１４の各データ読取ポートに対応する。バンク要求ＦＩＦＯ  １３１２の各ｊ番目のバンク要求ＦＩＦＯに書き込まれたデータ読取要求は、最終的に、共用メモリ８１４のｊ番目のデータ読取ポートにルーティングされ、読取要求には、そのデータ読取ポートがグループ８１６の上バンクまたは下バンクのどちらからデータを取り出さなければならないかの表示が含まれる。
【００８２】
ＴＸＰＣ読取アドレス・ジェネレータ１２２４に、読取要求が書き込まれる各次のバンク要求ＦＩＦＯ  １３１２を記憶するバンク・エンキューイング選択論理１３１４も含まれる。バンク・エンキューイング選択論理１３１４には、ブロック・アドレス・キューイング・スケジューラ１２３０によって供給される開始バンク番号からロードされ、０…３１の範囲内の８つまでのシーケンシャル・バンク番号について増分するバンク・カウンタが含まれる。データ読取要求に、現行バンク番号がバンク０にラップ・アラウンドするまでブロック・アドレス・キューイング・スケジューラ１２３０によって供給される開始バッファ・アドレスが含まれ、ラップ・アラウンドの後には、ブロック・アドレス・キューイング・スケジューラ１２３０によって供給される次のリンクされたバッファ・アドレスが含まれる。ＲＸＰＣ  １４０と同様に、メモリ８１４の任意の所与のバンク８１７への読取要求に使用可能な２つの経路を利用するために、バンク・エンキューイング選択論理１３１４は、主経路のバンク要求ＦＩＦＯ  １３１２が満杯の場合に、代替経路のバンク要求ＦＩＦＯ  １３１２に読取要求をエンキューする能力も有する。したがって、ＲＸＰＣ  １４０と同様に、バンク・エンキューイング選択論理１３１４は、現行カウンタ値に対応するバンク要求ＦＩＦＯが満杯であるかどうかに基づいて、現行バンク・カウンタのＭＳＢをトグルすることができる。
【００８３】
各クロックに、読取アドレス・ジェネレータ１２２４は、バンク・エンキューイング選択論理１３１４によって選択されたバンク要求ＦＩＦＯ  １３１２に、現行バッファ番号（または、ブロック・アドレス・キューイング・スケジューラ１２３０からのバンク・カウントがラップ・アラウンドした後の場合には次のリンクされたバッファ番号）ならびにトグルの前のバンク・カウンタＭＳＢを書き込む。入口側と同様に、バンク・カウンタＭＳＢは、読取アドレス・クロスバ・スイッチ１２１０（図１２）を介してメモリ８１４の対応するデータ読取ポートに運ばれ、そこで、データが読み取られるグループ８１６のバンク８１７を選択するグループ・メンバ選択信号として働く。また、ＴＸＰＣ読取アドレス・ジェネレータ１２２４は、各読取要求に対応して、選択されたバンク要求ＦＩＦＯ  １３１２にシーケンス番号を書き込む。最初のシーケンス番号は、ブロック・アドレス・キューイング・スケジューラ１２３０がＴＸＰＣ読取データ並べ換え機能１２２６に供給したブロック情報で供給されたシーケンス番号と同一であるが、後続シーケンス番号は、異なる可能性がある。
【００８４】
ＴＸＰＣ読取アドレス・ジェネレータ１２２４のエンキューイング部分は、図１０のＲＸＰＣ  １４０のエンキューイング部分と同一の形で、メモリ１１４（図６）内のバンクのＭ個のメンバ６１７のＮ個のグループ６１６を有する実施形態に一般化することができる。バンク・エンキューイング選択論理１３１４内のバンク・カウンタは、通常、組のすべてのＭ＊Ｎ個のバンク要求ＦＩＦＯ  １３１２を通ってサイクルするが、バンク・エンキューイング選択論理は、バンク・カウンタによって示されるバンク６１７を含むグループ６１６のＭ個のデータ読取ポートのいずれかに対応するバンク要求ＦＩＦＯ  １３１２に読取要求を書き込む能力を有する。現行カウントの上位ビットは、読取要求と共に、選択されたバンク要求ＦＩＦＯ  １３１２に書き込まれて、バンク・グループのどのバンク・メンバ６１７がその読取要求に応答しなければならないかを示す。
【００８５】
図１３に戻って、バンク要求ＦＩＦＯ  １３１２は、０…１５からの厳密な数値シーケンス・サイクリングでデキューされる。バンク・デキューイング・カウンタおよび論理１３１６が、現行デキューイング・カウントを供給する。バンク・デキューイング・カウンタおよび論理１３１６が、空であるバンク要求ＦＩＦＯ  １３１２をデキューしないことを除いて、２つのバンク要求ＦＩＦＯ  １３１２−ｉおよび１３１２−（ｉ＋１６）が、同時にデキューされる。下位バンク要求ＦＩＦＯ  １３１２−０から１３１２−１５の選択された１つからの読取要求が、読取要求経路１２１４Ｌで読取アドレス・クロスバ・スイッチ１２１０に向かって出力され、上位バンク要求ＦＩＦＯ  １３１２−１６から１３１２−３１の選択された１つからの読取要求が、読取要求経路１２１４Ｕで読取アドレス・クロスバ・スイッチ１２１０に向かって出力される。これらの読取要求に、バッファ番号と、そのバッファ番号と共にバンク要求ＦＩＦＯ  １３１２にエンキューされたバンク・カウンタＭＳＢが含まれる。やはりバッファ番号と共にエンキューされたシーケンス番号は、毎要求戻りＦＩＦＯ  １２２８（図１２）に向かって転送される。両方がＴＸＰＣ読取アドレス・ジェネレータ１２２４から同時に発行された２つの要求が、同一のメモリ・バンク８１７から、そのバンク内の異なるアドレスからデータを要求することが可能であることに留意されたい。この場合に、２つのシーケンス番号が、異なり、ＴＸＰＣ読取データ並べ換え機能１２２６は、それに基づいてこれらを区別することができる。エンキューイング機能と同様に、ＴＸＰＣ読取アドレス・ジェネレータ１２２４のデキューイング機能も、ＲＸＰＣ  １４０のデキューイング機能と同一の形で一般化することができる。
【００８６】
毎要求戻りＦＩＦＯ  １２２８に、バンク要求ＦＩＦＯ  １３１２のそれぞれについて別々のＦＩＦＯが含まれる。これらのＦＩＦＯの各項目に、要求のシーケンス番号と、要求のそのデータ単位がパケットの終り（ＥＯＰ）を構成するかどうかのビット表示が含まれる。各毎要求戻りＦＩＦＯは、戻りデータがＴＸＰＣ読取データ並べ換え機能１２２６に達する前に経過するクロック・サイクル数と等しい固定されたクロック・サイクル数の遅延を導入する。
【００８７】
図１４は、ＴＸＰＣ読取データ並べ換え機能１２２６の機能ブロック図である。これには、それぞれがメモリの各データ読取ポートに対応する３２個のキューを含むデータ並べ換えキュー１４１２のアレイ１４１０が含まれる。データ並べ換えキュー１４１２のそれぞれに、それぞれが１つのデータ単位を保持するのに十分な４つの項目が含まれる。データ並べ換えキューは、２つのデータ書込ポートおよび１つのデータ読取ポートを有し、データの読取はシーケンシャルに行われるが、キューイング１４１２の４つの項目のいずれかへのデータの書込は、戻りデータのシーケンス番号に基づいてランダムである。１実施形態で、すべてのデータ並べ換えキュー１４１２が、それぞれ３２項目の４つのセグメントを有する共通戻りデータ・メモリで実装される。４つのセグメントは、個々のキュー１４１２内の４つの項目に対応する。また、各データ並べ換えキュー１４１２は、有効ベクトル１４１４およびパケットの終り（ＥＯＰ）ベクトル１４１６を関連付けられ、このそれぞれが、１４１２内のキューの４つの項目に対応する４ビットを有する。下位データ戻り経路１２１８Ｌでデータ戻りクロスバ・スイッチ１２１２から返されたデータ単位は、すべてのデータ並べ換えキュー１４１２の一方のデータ書込ポートに共通して供給される。上位データ戻り経路１２１８Ｕでデータ戻りクロスバ・スイッチ１２１２から返されたデータ単位は、すべてのデータ並べ換えキュー１４１２の他方のデータ書込ポートに共通して供給される。戻りデータ経路のそれぞれに付随するＭＳＢは、ＴＸＰＣ読取データ並べ換え機能１２２６内のバンク・エンキューイング論理１４１８に供給される。
【００８８】
バンク・エンキューイング論理１４１８には、回転カウンタ１２２２（図１２）と調整して数０…１５を通ってサイクルするバンク・カウンタが含まれる。このカウントおよびデータ戻りクロスバ・スイッチ１２１２から返されるＭＳＢに基づいて、バンク・エンキューイング論理１４１８は、戻りデータを受け入れるために、正しいデータ並べ換えキュー１４１２の正しいデータ書込ポートをイネーブルする。具体的に言うと、バンク・エンキューイング論理１４１８内のバンク・カウンタが、番号ｊを出力する時に、この論理は、下データ戻り経路の返されたＭＳＢが０の場合にデータ並べ換えキュー１４１２−ｊの下ポート、下データ戻り経路の返されたＭＳＢが１の場合にデータ並べ換えキュー１４１２−（ｊ＋１６）の下ポートをイネーブルする。同様に、この論理は、上データ戻り経路の返されたＭＳＢが０の場合にデータ並べ換えキュー１４１２−ｊの上ポート、上データ戻り経路の返されたＭＳＢが１の場合にデータ並べ換えキュー１４１２−（ｊ＋１６）の上ポートをイネーブルする。この形で、戻りＭＳＢは、各データ単位が取り出されるグループ８１６のバンク・メンバ８１７を示すインジケータのグループ・メンバ・ソースとして働く。各経路１２１８での戻りデータが選択されたデータ並べ換えキューに書き込まれる項目番号（０…３）は、適当な毎要求戻りＦＩＦＯ  １２２８からのシーケンス番号によって与えられる。さらに、この装置は、データ単位が書き込まれるデータ並べ換えキュー１４１２のそれぞれの各項目に対応する有効ベクトル１４１４のビットをセットする。ＴＸＰＣ読取データ並べ換え機能１２２６のエンキューイング機能を、ＴＸＰＣ読取アドレス・ジェネレータ１２２４のデキューイング機能およびＲＸＰＣ  １４０のデキューイング機能とほぼ同一の形で一般化できることを諒解されたい。
【００８９】
ＴＸＰＣ読取データ並べ換え機能１２２６には、バンク・デキューイング論理１４２０も含まれる。このユニットには、メモリ１１４から返されたデータのブロックごとに、送信戻りＦＩＦＯ  １４２２の先頭からロードされるカウンタが含まれる。このＦＩＦＯには、ＴＸＰＣブロック・アドレス・キューイング・スケジューラ１２３０（図１２）からのブロック情報が含まれる。そのようなブロック情報は、データの各戻りブロックが始まるメモリ・バンク６１７、したがって、データ並べ換えキュー１４１２を指定する。バンク・デキューイング論理１４２０は、そのカウンタを８回増分して、デキューのためにデータ並べ換えキュー１４１２の８つのシーケンシャル・キューを指定する。このカウンタが、３１から０にラップ・アラウンドした場合に、バンク・デキューイング論理１４２０は、バッファの終りタッチについてＭＭＵ  １２８に通知する。キュー１４１２が、デキューイングのために指定される時に、識別されたキュー１４１２の先頭にあるデータ単位が、マルチプレクサ１４２４を介して送信ＦＩＦＯ  １４２６に供給され、送信ＦＩＦＯ  １４２６は、データ単位をファブリック出力ポート１２４を介して供給する。
【００９０】
バンク・デキューイング論理１４２０は、データ並べ換えキュー１４１２のそれぞれに対応するベクトル１４１４からの有効ビットも受け取る。バンク・デキューイング論理１４２０のバンク・カウンタが、キューの先頭に対応する有効ビットがセットされていないキュー１４１２を示す場合に、バンク・デキューイング論理１４２０は、それがセットされるまで単純に待つ。この形で、有効ビット１４１４は、デキューイング動作が充てん動作の先に進むことを防ぐ。さらに、バンク・デキューイング論理１４２０は、ベクトル１４１６から、データ並べ換えキュー１４１２のそれぞれに対応するパケットの終りビットを受け取る。セットされている場合に、このビットは、パケットが、現在のブロックの終りの前に終了したことを示す。したがって、バンク・カウンタが、キューの先頭に対応するパケットの終りビットがセットされているキュー１４１２を示す場合に、バンク・デキューイング論理１４２０は、現在のブロックのさらなるデータ単位のデキューイングを停止し、送信戻りＦＩＦＯ  １４２２の次の項目で示されるブロック情報に進む。また、バンク・デキューイング論理１４２０は、セットされているパケットの終りビットを検出した時に、現在のバッファのパケットの終りタッチをＭＭＵに示す。
【００９１】
送信戻りＦＩＦＯ  １４２２には、上で述べたように、ブロック開始バンク番号、ブロック長、ブロックの最初のバンクのシーケンス番号、および他のヘッダ情報が含まれる。他のヘッダ情報は、適当な時および場合に、マルチプレクサ１４２４を介する送信ＦＩＦＯ  １４２６への挿入のために、ヘッダ・ジェネレータ１４２８によって使用される。
奇数／偶数バッファ・リンケージ
【００９２】
図１および３を参照すると、前に述べたように、ＴＸＰＣ  １４２のそれぞれは、バッファの終りに達した時およびデータ・パケットの終りに達した時に、必ず、バッファ「タッチ」についてＭＭＵ  １２８に通知する。ＴＸＰＣ  １４２がファブリックの残りとインターフェースするのに用いる他のデータ経路に似て、ＴＸＰＣ  １４２とＭＭＵ  １２８の間の通信経路は、時間領域多重化され、各ＴＸＰＣ  １４２は、１６個の各サイクルで１クロックを割り振られる。発信データ・パケットが、長さにおいて少なくとも１６データ単位である（それぞれが少なくとも１２８バイトである）多くの場合に、各パケットの終りバッファ・タッチの後、ＴＸＰＣ  １４２が次のパケットの終りバッファ・タッチについてＭＭＵ  １２８に通知する必要が生じる前に、少なくとも１６クロック・サイクルが経過する。したがって、１６クロック・サイクルごとに１つのタッチ通知というデータ・レートが、その状況に十分である。発信データ・パケットが、それぞれ１６データ単位より短い場合、またはパケットの終りに達する直前もしくは直後にバッファの終りに達する場合に、１６クロック・サイクルごとに１つの通知という帯域幅が不十分になることを諒解されたい。タッチ通知帯域幅が、ＴＸＰＣが生成する通知に追い付くのに不十分である場合に、ＴＸＰＣ  １４２の送信ＦＩＦＯ  １４２６（図１４）が、枯渇し、ファブリックのスループットが劣化する可能性がある。
【００９３】
図１の実施形態は、バッファの終りが６４バイト・パケット内で発生する場合であっても、それぞれ８データ単位（６４バイト）ほどの短いデータ・パケットについてフル・スループットを可能にする形でこの問題を回避する。より短いデータ・パケットが許容されるが、フル・スループットは保証されない。この実施形態によれば、メモリ１１４のバッファ１１８が、２つの組に分割される。この実施形態では、組を、偶数および奇数と称し、すべての偶数番号のバッファ１１８が、偶数組に属し、すべての奇数番号のバッファ１１８が、奇数組に属する。もう１つの実施形態で、バッファを異なる形で分割することができる。もう１つの実施形態で、バッファを、３つ以上の組に分割することができる。さらに、ＲＸＰＣ  １４０は、ＭＭＵ  １２８にバッファ番号を要求する時に、必ず、１つは偶数組、もう１つは奇数組の２つを一時に受け取り、必ず交番する偶数奇数シーケンスでバッファを使用する、すなわち、パケットが２つのバッファ１１８にまたがる場合に、一方のバッファが、必ず偶数組に含まれ、他方のバッファが、必ず奇数組に含まれる。ＭＭＵ  １２８が各ＲＸＰＣ  １４０に空きバッファ番号を通信する通信経路は、割り振られた２つのバッファ番号を同時に運ぶのに十分に広い。
【００９４】
ＭＭＵ  １２８内のメモリのうちの複数が、所望のタッチ通知レートを達成する形で実装される。図１５は、この実装を示す図である。図１５を参照すると、空きバッファのリスト４１４が、２つのメモリ・アレイとして実装され、一方のアレイ４１４Ａに、空き偶数バッファ番号だけが含まれ、他方のアレイ４１４Ｂに、空き奇数バッファ番号だけが含まれる。ＴＸＰＣタッチ通知が、バッファ１１８の解放を引き起こす時に、新に解放されたバッファ番号が、そのバッファ番号が偶数または奇数のどちらであるかに応じて、アレイ４１４Ａおよび４１４Ｂのうちの適当な１つに書き込まれる。ＲＸＰＣ  １４０の空きバッファ番号プリフェッチＦＩＦＯ  １０２０が新しい空きバッファ番号を要求する時に、ＭＭＵは、アレイ４１４Ａおよび４１４Ｂのそれぞれから１つの２つ空きバッファ番号を一時に供給する。
【００９５】
図１５に示されたＭＭＵ  １２８には、それぞれ偶数バッファ番号および奇数バッファ番号用の、２つのバッファ状況ストア４０８Ａおよび４０８Ｂに分割されたものとしてバッファ状況ストア４０８が示されている。ＴＸＰＣ  １４２がバッファ・タッチについてそれによってＭＭＵ  １２８通知できるデータ経路は、偶数番号バッファの１つと奇数番号バッファの１つの２つのバッファ・タッチ通知を一時に収容するのに十分に広い。したがって、バッファ状況ストア４０８を分割することによって、バッファ状況ストア４０８Ａと４０８Ｂの両方のバッファ状況情報を同時に更新できるようになる。本明細書で使用される２つのストアの「同時」アクセスは、総合アクセス時間が、アクセスが単一のストアにシーケンシャルに行われた場合より短くなる範囲まで、時間的にオーバーラップする形を意味する。正確な同時性は不要である。
【００９６】
単一のバッファ状況ストア４０８と同様に、各バッファ状況ストア４０８Ａまたは４０８Ｂは、それぞれ偶数バッファまたは奇数バッファのバッファ使用カウントを記憶するバッファ使用カウンタ・アレイ４１０Ａまたは４１０Ｂと、それぞれ偶数バッファおよび奇数バッファのバッファ解放カウントを記憶するバッファ解放カウンタ・アレイ４１２Ａおよび４１２Ｂを用いて実装される。ＲＸＰＣ  １４０が、バッファ使用カウントについてＭＭＵ  １２８に通知する場合に、ＭＭＵ  １２８は、バッファ番号に応じて、そのカウントをバッファ使用カウンタ・アレイ４１０Ａまたは４１０Ｂのうちの適当な１つに書き込む。ＴＸＰＣ  １４２がバッファ・タッチについてＭＭＵ  １２８に通知する場合に、ＭＭＵは、やはりバッファ番号に応じて、バッファ解放カウンタ・アレイ４１２Ａまたは４１２Ｂのうちの適当な１つの指定されたバッファのカウントを増分する。
【００９７】
ＭＭＵ  １２８内のバッファ・リンケージ・リスト４１６は、偶数および奇数のバッファ番号によって分割されないが、ＴＸＰＣ  １４２が次のリンクされたバッファ番号を要求できるデータ・レートについてゆくために、バッファ・リンケージ・リスト４１６は、２読取ポート／２書込ポート・メモリとして実装される。８つのＴＸＰＣ  １４２の固定されたサブセット（たとえば、ＴＸＰＣ  １４２−０から１４２−７）が、一方の読取ポートを共用するように接続され、ＴＸＰＣ  １４２のもう１つの固定されたサブセット（たとえば、ＴＸＰＣ  １４２−８から１４２−１５）が、他方の読取ポートを共用するように接続される。同様に、８つのＲＸＰＣ  １４０の１つの固定されたサブセットが、一方のデータ書込ポートを共用するように接続され、ＲＸＰＣ  １４０のもう１つの固定されたサブセットが、他方のデータ書込ポートを共用するように接続される。循環トレース・メモリ４１８は、このメモリの読取および書込に関する緊急性がないので、この実施形態では機能強化されない。
【００９８】
バッファ使用カウンタ・アレイ４１０Ａおよび４１０Ｂに関して、単一のＲＸＰＣ  １４０が、バッファ１１８を充てんできるのより高い頻度でバッファ使用カウンタ・リストのいずれかに使用カウントを書き込む必要はない。ＲＸＰＣ  １４２が、１６クロック・サイクル未満で単一のバッファ１１８を充てんすることができず、１６個のＲＸＰＣ  １４０があるので、バッファ使用カウンタ・リスト４１０の書込帯域幅が、クロック・サイクルごとに１つの書込を超える必要がないからである。しかし、送信側では、フル・スループットで６４バイト・パケットに対処するために、各ＴＸＰＣ  １４２が、１６クロック・サイクルごとに１回ほど頻繁に２つのパケットの終りバッファ・タッチを（すなわち、８クロック・サイクルごとに１つのパケットの終りバッファ・タッチほど頻繁に）ＭＭＵ  １２８に通知できなければならない。したがって、１６個のＴＸＰＣ  １４２があるので、バッファ解放カウンタ・リスト４１２は、クロックごとに少なくとも２タッチを処理できなければならない。さらに、６４バイト・パケットが２つのバッファにまたがる場合など、バッファの終りがパケットの終りの前または後の非常に近くで発生する状況に対処するために、このスループット要件を２倍にしなければならない。この状況では、ＴＸＰＣは、１６クロックごとに４つまでのタッチ通知を通信しなければならず、バッファ解放カウンタ・リスト４１２のワースト・ケース・タッチ通知帯域幅要件が、２倍のクロックあたり４タッチになる。さらに、バッファ解放カウンタ・リスト４１２のスループット要件は、各バッファ・タッチがｒｅａｄ−ｍｏｄｉｆｙ−ｗｒｉｔｅ動作で２つのアクセスを必要とするので、さらに２倍になる。したがって、バッファ解放カウンタ・リスト４１２は、パケットあたり６４バイトでフル・スループットを保証するために、クロック・サイクルあたり少なくとも８アクセスを処理できなければならない。
【００９９】
メモリ８１４でのバッファ番号の奇数／偶数分割は、この問題を軽減する上で重要な役割を演じる。８クロック・サイクルあたり２回ほど頻繁に発生するシーケンシャル・バッファ・タッチが、偶数バッファ番号と奇数バッファ番号で交番する必要があるので、バッファ解放カウンタ・リストの偶数アレイおよび奇数アレイ４１２Ａおよび４１２Ｂへの分割によって、各アレイのバッファ・スループット要件が半分になる。スループットの残りは、バッファ解放カウンタ・アレイおよびバッファ使用カウンタ・アレイに４ポート（２読取／２書込ポート）メモリを使用することによって達成される。図１６は、偶数バッファ番号のバッファ状況ストア４０８Ａをどのように実装できるかを示す機能ブロック図である。奇数バッファ番号のバッファ状況ストア４０８Ｂは、類似する。説明および議論を明瞭にするために、図１６の図では、パイプライン化などのある実装特徴が省略されている。
【０１００】
図１６を参照すると、８つのＲＸＰＣ  １４０−０から１４０−７からのバッファ番号および対応する使用カウントが、マルチプレクサ１６１０を介して偶数バッファ使用カウンタ・アレイ４１０Ａの第１データ書込ポートに供給される。他方の８つのＲＸＰＣ  １４０−８から１４０−１５からのバッファ番号および対応する使用カウントは、マルチプレクサ１６１２を介して偶数バッファ使用カウンタ・アレイ４１０Ａの第２データ書込ポートに供給される。どの場合にも、バッファ番号は、めいめいのデータ書込ポートのアドレス部分に供給され、バッファ使用カウントは、データ部分に供給される。同様に、８つのＴＸＰＣ  １４２−０から１４２−７からのタッチ通知のバッファ番号は、マルチプレクサ１６１４を介して偶数バッファ使用カウンタ・アレイ４１０Ａの第１データ読取ポートのアドレス部分に供給され、他方の８つのＴＸＰＣ  １４２−８から１４２−１５からのタッチ通知のバッファ番号は、マルチプレクサ１６１６を介して偶数バッファ使用カウンタ・アレイ４１０Ａの第２データ読取ポートのアドレス部分に供給される。
【０１０１】
偶数バッファ使用カウンタ・アレイ４１０Ａの第１データ読取ポートのアドレス部分に供給された各バッファ番号は、偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ読取ポートのアドレス部分および偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ書込ポートのアドレス部分にも供給される。同様に、偶数バッファ使用カウンタ・アレイ４１０Ａの第２データ読取ポートのアドレス部分に供給された各バッファ番号は、偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ読取ポートのアドレス部分および偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ書込ポートのアドレス部分にも供給される。
【０１０２】
偶数バッファ使用カウンタ・アレイ４１０Ａの第１データ読取ポートのデータ部分および偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ読取ポートのデータ部分は、バッファ解放コンパレータ１６１８のめいめいの入力に供給され、バッファ解放コンパレータ１６１８は、この２つのカウント値が等しいかどうかを判定する。偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ読取部分のデータ部分は、バッファ解放コンパレータ１６１８の同等性出力と同様に、変更論理１６２０にも供給される。変更論理１６２０は、偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ読取ポートのデータ部分からのカウントを増分するか、バッファ解放コンパレータ１６１８の同等性出力がアサートされている場合にはこれをクリアする。変更論理１６２０の出力は、偶数バッファ解放カウンタ・アレイ４１２Ａの第１データ書込ポートのデータ部分に供給される。
【０１０３】
同様に、偶数バッファ使用カウンタ・アレイ４１０Ａの第２データ読取ポートのデータ部分および偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ読取ポートのデータ部分は、もう１つのバッファ解放コンパレータ１６２２のめいめいの入力に供給され、バッファ解放コンパレータ１６２２は、この２つのカウント値が等しいかどうかを判定する。偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ読取ポートのデータ部分は、バッファ解放コンパレータ１６２２の同等性出力と同様に、変更論理１６２４にも供給される。変更論理１６２４は、偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ読取ポートのデータ部分からのカウントを増分するか、バッファ解放コンパレータ１６２２の同等性出力がアサートされている場合にはこれをクリアする。変更論理１６２４の出力は、偶数バッファ解放カウンタ・アレイ４１２Ａの第２データ書込ポートのデータ部分に供給される。
【０１０４】
偶数バッファ使用カウンタ・アレイ４１０Ａの第１のおよび第２のデータ読取ポートでアドレッシングされるバッファ番号は、バッファ解放コンパレータ１６１８および１６２２のそれぞれの同等性出力と同様に、バッファ解放論理１６２６にも供給される。バッファ解放論理１６２６は、ＴＸＰＣ  １４２によるタッチ通知の対象であり、バッファ解放コンパレータ１６１８または１６２２が同等性をアサートしたバッファ番号を示すバッファ解放信号を生成する。
【０１０５】
動作中に、ＲＸＰＣ  １４０は、必要に応じて、マルチプレクサ１６１０および１６１２を介して偶数バッファ使用カウンタ・アレイ４１０Ａにバッファ使用カウントを書き込む。ＴＸＰＣ  １４２からは、タッチ通知バッファ番号が、偶数バッファ使用カウンタ・アレイ４１０Ａからの指定されたバッファ番号のバッファ使用カウントと、偶数バッファ解放カウンタ・アレイ４１２Ａからの指定されたバッファ番号のバッファ解放カウントの現在値の両方を読み出すのに使用される。この２つのカウント値は、適宜バッファ解放コンパレータ１６１８または１６２２によって比較され、これらが等しい場合に、前に説明したように、バッファ解放論理１６２６が、ＭＭＵ  １２８にバッファ番号を解放させる。また、バッファ解放コンパレータ１６１８または１６２２は、適宜、変更論理１６２０または１６２４に、偶数バッファ解放カウンタ・アレイ４１２Ａの新に解放されたバッファ番号に対応するアドレスに、クリアされたカウント値を書き込ませる。２つのカウントが等しくない場合には、偶数バッファ解放カウンタ・アレイ４１２Ａから読み取られた現行バッファ解放カウントが、変更論理１６２０または１６２４によって増分され、偶数バッファ解放カウンタ・アレイ４１２Ａの同一位置に書き戻される。
【０１０６】
図２、３、５Ａ、５Ｂ、５Ｄ、および５Ｅの流れ図は、バッファ１１８の偶数／奇数分離を実装するために、次のように変更される。ＲＸＰＣ  １４０内で、ステップ２１０（図２）で、ＭＭＵ  １２８が、１つではなく２つすなわち奇数と偶数の開始空きバッファ番号を割り振る。このうちの１つが、現行バッファ番号になる。ＲＲＸＰＣ空きバッファ番号プリフェッチＦＩＦＯ  １０２０（図１０）は、４つの空きバッファ番号を保持するが、これらは、交番する奇数と偶数になる。
【０１０７】
ＴＸＰＣ  １４２では、ＴＸＰＣ  １４２がＭＭＵに各次のリンクされたバッファ番号を要求する時（図３のステップ３１４）に、ＭＭＵ  １２８が、やはり一時に１つの次バッファ番号だけを供給する。しかし、ＭＭＵ  １２８は、２つの読取ポートおよび２つの書込ポートを有する単一のバッファ・リンケージ・リスト４１６からこれを行う。ＴＸＰＣ  １４２−０から１４２−７は、すべてが一方の読取ポートを使用するように任意に割り当てられ、ＴＸＰＣ  １４２−８から１４２−１５は、すべてが他方の読取ポートを使用するように任意に割り当てられる。ステップ３２０で、ＴＸＰＣ  １４２は、バッファ・タッチについてＭＭＵ  １２８に通知する時に、現行バッファ番号が偶数の場合には「偶数」バッファ・タッチ通知でそれを行い、現行バッファ番号が奇数の場合には「奇数」バッファ・タッチ通知でそれを行う。
【０１０８】
ＭＭＵ  １２８では、ＲＸＰＣ  １４０から空きバッファ番号を受け取った時に（図５Ａ）、ＭＭＵが、空きバッファ・リスト４１４の前面にあるバッファ番号ではなく、空きバッファの偶数アレイおよび奇数アレイ４１４Ａおよび４１４Ｂのそれぞれの前面にあるバッファ番号を要求元のＲＸＰＣ  １４０に報告する。また、ＭＭＵは、そのようなアレイの両方からの割り振られたバッファ番号を、このＲＸＰＣ  １４０に割り振られたバッファの循環トレース・メモリ４１８の末尾に移動する。
【０１０９】
ＴＸＰＣ  １４２からのバッファ使用カウント報告（図５Ｂ）は、ＭＭＵへのＲＸＰＣの偶数バスまたは奇数バスのいずれかでＭＭＵ  １２８によって受け取られる。ＭＭＵ  １２８は、したがって、ＭＭＵ  １２８が報告を受け取ったバスに応じて、バッファ使用カウンタ・アレイ４１０Ａまたは４１０Ｂの指定されたバッファ番号の位置にＲＸＰＣ  １４０からのパケット使用カウントを書き込む。
【０１１０】
ＴＸＰＣ  １４２からのバッファ・タッチ通知（図５Ｄ）も、ＭＭＵへのＴＸＰＣの偶数バスまたは奇数バスのいずれかでＭＭＵ  １２８によって受け取られる。次に、ＭＭＵ  １２８は、ＭＭＵ  １２８がタッチ通知を受け取ったバスに応じて、偶数または奇数のいずれかのバッファ使用ストアおよびバッファ解放ストアで、図１６に関して上で説明したタッチ通知の機能を実行する。
【０１１１】
外部コントローラからバッファ・スクラブ・コマンドを受け取った時に（図５Ｅ）、ＭＭＵスクラブ論理は、やはりすべてのバッファ番号をループする。ＭＭＵスクラブ論理は、偶数および奇数のバッファ番号を同時には検索しない。というのは、速度が、この動作では重要でないからである。バッファ番号ごとに、スクラブ論理は、適宜、空きバッファの偶数アレイまたは奇数アレイおよびすべてのトレース・メモリからそのバッファ番号を検索する。見つからず、現行バッファ番号が偶数の場合には、スクラブ論理は、ＴＸＰＣ
【０１１２】
１４２によるバッファの可能な解放について、ウォッチ期間の間、偶数のバッファ解放コンパレータ１６１８および１６２２をウォッチする。現行バッファ番号が奇数の場合には、スクラブ論理は、奇数バッファ状況ストア４０８Ｂ内の奇数解放コンパレータ（図示せず）をウォッチする。現行バッファ番号がそれでも見つからない場合には、ＭＭＵ  １２８は、バッファ番号を、適宜偶数または奇数の空きバッファ・アレイ４１４Ａまたは４１４Ｂの末尾に書き込むことによってそのバッファを再利用する。スクラブ論理は、次に、ループ・バックして次のバッファ番号を検査する。
【０１１３】
本明細書で使用される、所与の信号、イベント、または値は、先祖の信号、イベント、または値が所与の信号、イベント、または値に影響した場合に、先祖の信号、イベント、または値に「応答」する。間に入る処理要素、ステップ、または時間期間がある場合に、所与の信号、イベント、または値は、それでも先祖の信号、イベント、または値に「応答」することができる。間に入る処理要素またはステップが、複数の信号、イベント、または値を組み合わせる場合に、その処理要素またはステップの信号出力は、信号入力、イベント入力、または値入力のそれぞれに「応答」すると考えられる。所与の信号、イベント、または値が、先祖の信号、イベント、または値と同一である場合に、これは、単に、所与の信号、イベント、または値が先祖の信号、イベント、または値に「応答」する退化した事例である。所与の信号、イベント、または値の別の信号、イベント、または値に対する「依存性」は、同様に定義される。
【０１１４】
本明細書で示し、説明した実施形態および変形形態が、本発明の原理の例示にすぎないことと、本発明の趣旨および範囲から逸脱せずに、当業者がさまざまな変形形態を実施できることを理解されたい。たとえば、本明細書で、別々のバスまたは導体で担持されるものとして情報が図示されるか説明された場合には、必ず、別の実施形態で、同一の情報を、１つまたは複数の共通のバスまたは導体で担持するために一緒に符号化または多重化することができる。もう１つの例として、図４および１５でＭＭＵ  １２８内に配置されて示されたリストおよびメモリのいずれかまたはすべてを、スイッチング・ファブリックの異なる機能ユニット内に配置するか、それらの間で分散することができる。もう１つの例として、書込要求クロスバ・スイッチ１３４は、スイッチ１３４を介して１単位としてルーティングするためにデータ書込要求の対を組み合わせるが、別の実施形態では、そのようなデータ書込要求を独立にルーティングすることができる。同一のことが、読取アドレス・クロスバ・スイッチ１２１０およびデータ戻りクロスバ・スイッチ１２１２についても言える。本明細書で説明した実施形態は、本発明の原理およびその実用的応用例を最もよく説明し、これによって、企図される特定の使用に適するようにさまざまな変更を加えてさまざまな実施形態について当業者が本発明を理解することを可能にするために選択され、説明されたものである。
【図面の簡単な説明】
【０１１５】
【図１】本発明の特徴を組み込んだ共用メモリ・スイッチング・ファブリックを示すブロック図である。
【図２】図１の受信ポート・コントローラによって実行される機能を示す流れ図である。
【図３】図１の送信ポート・コントローラによって実行される機能を示す流れ図である。
【図４】図１のＭＭＵ内のメモリおよびリストを示す図である。
【図５Ａ】図１のＭＭＵによって実行されるいくつかの機能を示す流れ図である。
【図５Ｂ】図１のＭＭＵによって実行されるいくつかの機能を示す流れ図である。
【図５Ｃ】図１のＭＭＵによって実行されるいくつかの機能を示す流れ図である。
【図５Ｄ】図１のＭＭＵによって実行されるいくつかの機能を示す流れ図である。
【図５Ｅ】図１のＭＭＵによって実行されるいくつかの機能を示す流れ図である。
【図６】本発明の特徴を組み込んだ代替の共用メモリ・スイッチング・ファブリックを示すブロック図である。
【図７Ａ】図６または８のメモリ・バンク・グループのある内部機能を示す機能ブロック図である。
【図７Ｂ】図６または８のメモリ・バンク・グループのある内部機能を示す機能ブロック図である。
【図８】本発明の特徴を組み込んだ共用メモリ構造を示す図である。
【図９】図８の共用メモリ構造と共に使用される入口装置を示す図である。
【図１０】図９の受信ポート・コントローラを示す図である。
【図１１】図１０のバンクＦＩＦＯアレイの例示的実装を示す図である。
【図１２】図８の共用メモリ構造と共に使用される出口装置を示す図である。
【図１３】図１２の送信ポート・コントローラ読取アドレス・ジェネレータを示す図である。
【図１４】図１２の送信ポート・コントローラ読取データ並べ換え機能を示す図である。
【図１５】図１のＭＭＵ内のメモリおよびリストを示す図である。
【図１６】図１５の偶数バッファ状況ストアの可能な実装を示す図である。
【図１】
2006524477.tif 000003
【図２】
2006524477.tif 000004
【図３】
2006524477.tif 000005
【図４】
2006524477.tif 000006
【図５Ａ】
2006524477.tif 000007
【図５Ｂ】
2006524477.tif 000008
【図５Ｃ】
2006524477.tif 000009
【図５Ｄ】
2006524477.tif 000010
【図５Ｅ】
2006524477.tif 000011
【図６】
2006524477.tif 000012
【図７Ａ】
2006524477.tif 000013
【図７Ｂ】
2006524477.tif 000014
【図８】
2006524477.tif 000015
【図９】
2006524477.tif 000016
【図１０】
2006524477.tif 000017
【図１１】
2006524477.tif 000018
【図１２】
2006524477.tif 000019
【図１３】
2006524477.tif 000020
【図１４】
2006524477.tif 000021
【図１５】
2006524477.tif 000022
【図１６】
2006524477.tif 000023
【国際調査報告】
2006524477.tif 000024
2006524477.tif 000025
2006524477.tif 000026
2006524477.tif 000027
2006524477.tif 000028