図1は、1つ又はそれ以上のサーバシステム14;1つ又はそれ以上の記憶システム16;1つ又はそれ以上のネットワークシステム18;及び、相互接続12を、1つ又はそれ以上のローカルエリアネットワーク(LAN)、ワイドエリアネットワーク(WAN)又は他のネットワークを含む、1つ又はそれ以上の他のネットワーク、に結合する1つ又はそれ以上のルーティングシステム20の間の通信をサポートするシリアル又は他の相互接続12を含む例示のシステムエリアネットワーク10を示す。サーバシステム14は各々が、1つ又はそれ以上の中央処理ユニット(CPU)と1つ又はそれ以上のメモリユニットを有する。記憶システム16は各々が、1つ又はそれ以上のチャネルアダプタ(CA)、1つ又はそれ以上のディスクアダプタ(DA)及び1つ又はそれ以上のCPUモジュール(CM)を有する。相互接続12は、1つ又はそれ以上のスイッチ22を有し、これは、特定の実施例では、以下に更に完全に記載するように、イーサネット(登録商標)スイッチを有する。システムエリアネットワーク10の構成要素は、1つ又はそれ以上のリンクを使用して互いに結合され、その各々は、1つ又はそれ以上のコンピュータバス、ローカルエリアネットワーク(LAN)、メトロポリタンエリアネットワーク(MAN)、ワイドエリアネットワーク(WAN)、インターネットの一部又は、他の配線、光、無線又は、他のリンクを有する。システムエリアネットワーク10は、特定の構成に互いに結合された特定の構成要素を有するように記載され且つ説明されるが、本発明は、適切な構成で互いに結合された適する構成要素を有する適する任意のシステムエリアネットワークを考慮する。
図2は、システムエリアネットワーク10の例示のスイッチ22を示す。スイッチ22は、複数のポート24とスイッチコア26を有する。ポート24は各々が、スイッチコア26と(サーバシステム14、記憶システム16、ネットワークシステム18、ルーティングシステム20又は、他のスイッチ22のような)システムエリアネットワーク10の構成要素に結合されている。第1ポート24は、システムエリアネットワーク10の第1構成要素からパケットを受信し、パケットをシステムエリアネットワーク10の第2の構成要素へ通信する第2ポート24へ交換するためにスイッチコア26へパケットを通信する。パケットへの参照は、適切な、パケット、データグラム、フレーム又は、他のデータの単位を含みうる。スイッチコア26は、第1ポート24からパケットを受信し、以下に更に完全に記載するように、1つ又はそれ以上の第2ポート24へパケットを交換する。特定の実施例では、スイッチ22は、イーサネット(登録商標)スイッチを含む。特定の実施例では、スイッチ22は、有線速度又はその付近でパケットを交換できる。
図3は、スイッチ22の例示のスイッチコア26を示す。スイッチコア26は、12のポートモジュール28、ストリームメモリ30、タグメモリ32、中央エージェント34及びルーティングモジュール36を有する。スイッチコア26の構成要素は、バス又は他のリンクを使用して互いに結合される。特定の実施例では、スイッチコア26は、単一のICで具体化される。スイッチコア26の省略時(デフォルト)モードでは、システムエリアネットワーク10の第1構成要素からスイッチコア26により受信されたパケットは、スイッチコア26が全体のパケットを受信する前に、スイッチコア26からシステムエリアネットワーク10の1つ又はそれ以上の第2構成要素へ通信されうる。特定の実施例では、カットスルー転送は、(減少された待ち時間、減少されたメモリ要求、及び増加されたスループットのような)記憶及び転送技術の上の1つ又はそれ以上の利点を提供する。スイッチコア26は、異なる応用についても構成されうる。例でありそして限定されないとして、スイッチコア26は、(10ギガバイトイーサネット(登録商標)スイッチ22又は特定の実施例のイーサネット(登録商標)スイッチ22を含む)イーサネット(登録商標)スイッチ22、INFINIBANDスイッチ22、3GIOスイッチ22、HYPERTRANSPORTスイッチ22、RAPID IOスイッチ22、又は、記憶システム16、ネットワークシステム18又は、両方のための専用のバックプレーンスイッチ22又は、他のスイッチ22について、構成されることが可能である。
ポートモジュール28は、スイッチ22のスイッチコア26とポート24の間のインターフェースを提供する。ポートモジュール28は、ポート24、ストリームメモリ30、タグメモリ32、中央エージェント34、及びルーティングテーブル36に結合される。特定の実施例では、ポートモジュール28は、(システムエリアネットワーク10の構成要素からパケットを受信しそしてストリームメモリ30へパケットを書き込むのに使用される)入力論理と(ストリームメモリ30からパケットを読み出しそしてパケットをシステムエリアネットワーク10の構成要素へ通信するのに使用される)出力論理の両方を有する。代わりとして、特定の実施例では、ポートモジュール28は、入力論理のみ又は出力論理のみを有する。ポートモジュール28への参照は、適切な場合に、入力論理、出力論理又は、両方を有するポートモジュール28を含む、ポートモジュール28は、入力フロー制御のための入力バッファも含みうる。イーサネット(登録商標)スイッチ22では、ポーズ機能が、入力フロー制御について使用され得、これは効果的であるために時間がかかる。ポートモジュール28の入力バッファは、ポーズ機能が入力するパケットを止める前に送られたパケットの一時的な記憶に使用される。入力フロー制御についてクレジットがエクスポート(移出)される場合には、入力バッファは不要であるので、INFINIBANDスイッチ22の場合のように、入力バッファは任意である。特定の実施例では、ポートモジュール28をストリームメモリ30に結合するリンクは、(データがポートモジュール28からストリームメモリ30に書き込まれるスイッチコア26の動作を含む)書き込み動作のためのものとそして、(データがストリームメモリ30からポートモジュール28に読み出されるスイッチコア26の動作を含む)読み出し動作のためのものの、2つのリンクを有する。これらのリンクの各々は、36ビットを送り、ポートモジュール28とストリームメモリ30の間のデータ経路を両方向に36ビット幅にする。
システムエリアネットワーク10の第1構成要素から第1ポートモジュール28により受信されるパケットは、第1ポートモジュール28からストリームメモリ30へ書き込まれ、そして後に、第2ポートモジュール28からシステムエリアネットワーク10の1つ又はそれ以上の第2構成要素への通信のために、ストリームメモリ30から1つ又はそれ以上の第2ポートモジュール28へ読み出される。ポートモジュール28により受信されている又はそこから通信されているパケットへの参照は、適切に、ポートモジュール28により受信されている又はそこから通信されている全体のパケット又は、ポートモジュール28により受信されている又はそこから通信されているパケットの一部を含みうる。同様に、ストリームメモリ30へ書き込まれている又はそこから読み出されているパケットへの参照は適切に、ストリームメモリ30へ書き込まれている又はそこから読み出されている全体のパケット又は、ストリームメモリ30へ書き込まれている又はそこから読み出されているパケットの一部のみを含みうる。入力論理を含むポートモジュール28は、ストリームメモリ30に書き込むことが可能であり、そして、出力論理含むポートモジュール28は、ストリームメモリ30から読み出すことがことが可能である。特定の実施例では、ポートモジュール28によるストリームメモリ30の共有は、ラインの先頭のブロッキングを除去し(それによりスイッチコア26のスループットを増加し)、スイッチコア26に関連するメモリ要求を減少し、そして、スイッチコア26が、ポートモジュール28での負荷状態の変化を更に効率的に扱うことを可能とする。
スイッチコア26のストリームメモリ30は、図4に示されたように、論理的にブロック38に分割され、これは更に、ワード40に分割される。行はブロック38を示しそして、行と列の交差点は、ブロック38のワード40を示す。特定の実施例では、ストリームメモリ30は、1536ブロック38に分割され、各ブロック38は、24ワード40を含み、ワード40は72ビットを有する。ストリームメモリ30は、特定の数のビットを含む特定の数のワード40に分割された特定の数のブロック38に分割されているように記述されそして説明されているが、本発明は、ストリームメモリ30が、適する数のビットを含む適する数のワード40に分割された適する数のブロック38に分割されていることを考慮する。パケットサイズは、パケットごとに異なることが可能である。ブロック38と同じ又はそれより少ないビットを含むパケットが1つのブロック38に書き込まれることが可能であり、そして、ブロック38よりも多くのビットを含むパケットは、互いに連続である必要はない、1つより多くのブロック38に書き込まれることが可能である。
ブロック38への書き込み又はそこからの読み出しのときには、ポートモジュール28は、ブロック38の任意のワード40から開始でき、そして、順次にブロック38のワード40へ書き込み又はそこから読み出すことが可能である。ポートモジュール28は、ブロック38へ書き込みそこから読み出しながら、ブロック38の第1ワード40へラップアラウンドすることも可能である。ブロック38は、書き込み動作又は読み出し動作でブロック38を識別するために使用されるアドレスを有し、そして、オフセットは、書き込み動作又は読み出し動作でブロック38のワード40を識別するために使用される。例として、4176ビット長のパケットを考えるとする。パケットは、ブロック38aのワード40fで開始しそしてブロック38bを含まず、ブロック38dのワード40kへ続く、58のワード40に書き込まれる。書き込み動作では、ブロック38aのワード40fは、第1アドレスと第1オフセットで識別され、ブロック38cのワード40fは、第2アドレスと第2オフセットで識別され、そして、ブロック38dのワード40fは、第3アドレスと第3オフセットで識別される。パケットは、ブロック38aのワード40fで開始しそしてブロック38bを含まず、ブロック38dのワード40kへ続く、ストリームメモリ30から読み出される。読み出し動作では、ブロック38aのワード40fは、第1アドレスと第1オフセットで識別され、ブロック38cのワード40fは、第2アドレスと第2オフセットで識別され、そして、ブロック38dのワード40fは、第3アドレスと第3オフセットで識別される。
タグメモリ32は、各々が、書き込むべき次のブロック38を決定するために第1ポートモジュール28によりそして、そこから読み出すべき次のブロック38を決定するために1つ又はそれ以上の第2ポートモジュール28により使用される、複数のリンクされたリストを有する。タグメモリ32は、以下に更に完全に説明するように、ポートモジュール28からストリームメモリ30への書き込み動作のためにポートモジュール28に有効になされることが可能である次のブロック38を決定するために、中央エージェント34により使用され得るリンクされたリストも有する。タグメモリ32は、複数のエントリを有し、その少なくとも幾つかは各々が、ストリームメモリ30のブロック38に対応する。ストリームメモリ30の各ブロック38は、タグメモリ32内に対応するエントリを有する。タグメモリ32内のエントリは、タグメモリ32内の他のエントリへのポインタを有することが可能であり、この結果リンクされたリストとなる。
ポートモジュール28からストリームメモリ30への書き込み動作のためにポートモジュール28に有効であるブロック38に対応するタグメモリ32内のエントリは、ポートモジュール28がリンクされたエントリを使用して書き込むべき次のブロック38を決定できるように、ともにリンクされている。例として、ポートモジュール28からストリームメモリ30への書き込み動作のためにポートモジュール28に有効である4つのブロック38を考えるとする。第1ブロック38に対応するタグメモリ32内の第1エントリは、第2ブロック38へのポインタを有し、第2ブロック38に対応するタグメモリ32内の第2エントリは、第3ブロック38へのポインタを有し、そして、第3ブロック38に対応するタグメモリ32内の第3エントリは、第4ブロック38へのポインタを有する。ポートモジュール28は第1ブロック38へ書き込みそして、ポートモジュール28が第1ブロック38に書き込んでいる間に、書き込むべき次のブロック38を決定するために第1エントリ内のポインタを使用する。ポインタはポートモジュール28に第2ブロック38を示し、そして、ポートモジュール28が第1ブロック38への書き込みを終了したときに、ポートモジュール28は第2ブロック38へ書き込む。ポートモジュール28が第2ブロック38へ書き込んでいる間に、ポートモジュール28は、書き込むべき次のブロック38を決定するために第2エントリ内のポインタを使用する。ポインタはポートモジュール28に第3ブロック38を示し、そして、ポートモジュール28が第2ブロック38への書き込みを終了したときに、ポートモジュール28は第3ブロック38へ書き込む。ポートモジュール28が第3ブロック38へ書き込んでいる間に、ポートモジュール28は、書き込むべき次のブロック38を決定するために第3エントリ内のポインタを使用する。ポインタはポートモジュール28に第4ブロック38を示し、そして、ポートモジュール28が第3ブロック38への書き込みを終了したときに、ポートモジュール28は第4ブロック38へ書き込む。タグメモリ32内のリンクされたリストは、書き込むべき次のブロック38を決定するために、1つより多くのポートモジュール28により使用されることができない。
ブロック38がポートモジュール28からストリームメモリ30への書き込み動作のためにポートモジュール28に有効になされたときには、ブロック38に対応するタグメモリ32内のエントリは、ポートモジュール28が書き込むべき次のブロック38を決定するために使用しているリンクされたリストへ追加されうる。例として、上述のリンクされたリストを考えるとする。第4エントリがリンクされたリストの最後のエントリである場合には、第5ブロック38がポートモジュール28に有効になされるときに、第4エントリは第5ブロック38へのポインタを含むように修正されうる。
書き込むべき次のブロック38を決定するために第1ポートモジュール28が使用しているタグメモリ32のリンクされたリストも、読み出すべき次のブロック38を決定するために1つ又はそれ以上の第2のポートモジュール28により使用され得る。例として、上述のリンクされたリストを考えるとする。パケットの第1部分は、第1ポートモジュール28から第1ブロック38へ書き込まれ、パケットの第2部分は、第1ポートモジュール28から第2ブロック38へ書き込まれ、そして、パケットの第3及び最終部分は、第1ポートモジュール28から第3ブロック38へ書き込まれる。第3ブロック38にパケットの最終部分が書き込まれたことを示すために第3ブロック38へエンドマークも書き込まれる。第2ポートモジュール28は、第1ブロック38から読み出し、第2ポートモジュール28が第1ブロック38から読み出している間に、読み出すべき次のブロック38を決定するために第1エントリ内のポインタを使用する。ポインタは第2ポートモジュール28に第2ブロック38を示し、そして、第2ポートモジュール28が第1ブロック38からの読み出しを終了したときに、第2ポートモジュール28は、第2ブロック38から読み出す。第2ポートモジュール28が第2ブロック38から読み出している間に、ポートモジュール28は、読み出すべき次のブロック38を決定するために第2エントリ内のポインタを使用する。ポインタは第2ポートモジュール28に第3ブロック38を示し、そして、第2ポートモジュール28が第2ブロック38からの読み出しを終了したときに、第2ポートモジュール28は、第3ブロック38から読み出す。第2ポートモジュール28が第3ブロック38から読み出しそして、第3ブロック38内のエンドマークを使用し、パケットの最終部分が第3ブロック38に書き込まれたことを決定する。タグメモリ32内のリンクされたリストは、書き込むべき次のブロック38を決定するために、1つより多くの第1ポートモジュール28により使用されることができないが、リンクされたリストは読み出すべき次のブロック38を決定するために1つ又はそれ以上の第2ポートモジュール28により使用されることが可能である。
異なるパケットは、異なる宛先を有しそして、パケットがストリームメモリ30を通る順序は、先入れ、先出し(ファーストイン、ファーストアウト、FIFO)である。例として、第2パケットが受信されそして1つ又はそれ以上の第2ブロック38に書き込まれる前に、受信されそして1つ又はそれ以上の第1ブロック38に書き込まれた第1パケットを考える。第2パケットは、第1パケットよりも前にストリームメモリ30から読み出されると、第2ブロック38は第1ブロック38の前に他の書き込み動作に対して有効となる。特定の実施例では、パケットが書き込まれたストリームメモリ30のブロック38は、パケットのポートモジュール28に指定されている全てのポートモジュール28によりブロック38からパケットが読み出されたすぐ後に、ポートモジュール28からブロック38への書き込み動作のために、ポートモジュール28へ有効になされる。パケットの指定されたポートモジュール28は、システムエリアネットワーク10の構成要素、スイッチコア26からの下流、即ちパケットの最終又は中間宛先へ、結合されたポートモジュール28を有する。
特定の実施例では、クレジットがポートモジュール28の入力論理に割当てられ、そして、書き込み動作を管理するのに使用される。書き込み動作を管理するのにクレジット使用することは、スイッチコア26によるカットスルー転送を容易にでき、これは、待ち時間(レーテンシ)を減少し、スループットを増加し、そして、スイッチコア26に関連するメモリ要求を減少する。また、クレジットが書き込み動作を管理するために使用される場合には、どの時点でどのブロック38にどのポートモジュール28が書き込めるかに関する決定が、ポートモジュール28で局所的に行われることが可能であり、これは、スイッチコア26のスループットと交換速度を増加する。書き込み動作を管理するのにクレジット使用することは、ラインの先頭のブロッキングも除去できそして、ポートモジュール28で負荷状態の変化に応じてポートモジュール28間でメモリ資源の分配のより大きな柔軟性を提供できる。クレジットは、ストリームメモリ30のブロック38に対応しそして、ブロック38に書き込むためにポートモジュール28により使用されることが可能である。クレジットは、クレジットのプールからポートモジュール28に割当てられ、これは、中央エージェント34により管理される。ポートモジュール28に割当てられているクレジットへの参照は、ポートモジュール28からブロック38への、及び逆の、書き込み動作のためにポートモジュール28に有効になされているクレジットに対応するブロック38を含む。
クレジットのプール内のクレジットは、どのポートモジュール28にも割当でき、そして、特定のポートモジュール28に割当てられる必要はない。ポートモジュール28は、ポートモジュール28に有効なクレジットのみを使用でき、そして、他のポートモジュール28に有効な又はクレジットのプール内にあるクレジットを使用できない。クレジットは、クレジットがポートモジュール28に割当てられそしてポートモジュール28がまだクレジットを使用していない場合に、ポートモジュール28に有効である。ポートモジュール28に割当てられているクレジットは、ポートモジュール28がそのクレジットを使用するまでポートモジュール28に有効である。クレジットは一度に1より多くのポートモジュール28に割当てられることは出来ず、そしてクレジットは同時に1より多くのポートモジュール28に有効にされることは出来ない。特定の実施例では、第1ポートモジュール28がクレジットに対応するブロック38にパケットを書き込むためにそのクレジットを使用するときには、そのクレジットは、パケットの全ての指定されたポートモジュール28がブロック38からパケットを読み出したすぐ後にクレジットのプールに戻される。
中央エージェント34は、クレジットを、クレジットのプールから、ポートモジュール28へ割当てることができる。例として、中央エージェント34は、ポートモジュール28への予め定められた数のクレジットの初期割当を行うことが可能である。特定の実施例では、中央エージェント34は、スイッチコア26の開始で又はスイッチコア26がリセットされるのに応じて、ポートモジュール28へのクレジットの初期割当を行うことが可能である。他の例として、中央エージェント34は、ポートモジュール28が使用している他のクレジットを置き換えるためにポートモジュール28へクレジットを割当てることができる。特定の実施例では、ポートモジュール28が第1クレジットを使用するときには、ポートモジュール28は、ポートモジュール28が第1クレジットを使用していることを中央エージェント34に通知し、そして、ポートモジュール28が第1クレジットを使用していることを中央エージェント34に通知するポートモジュール28に応じて、しかし、ポートモジュール28により使用されているブロック38の数が適用可能な限度に合わない又は超えている場合にのみ、中央エージェント34は第2クレジットを第1クレジットと置き換えるようにポートモジュール28へ割当る。ポートモジュール28により使用されているブロック38への参照は、パケットがポートモジュール28から書き込まれている及びそれからパケットの全ての指定されたポートモジュール28がパケットを読み出していない、ブロック38を含む。適用可能な限度まで、ポートモジュール28により使用されるクレジットを、置き換えることにより、ポートモジュール28へ有効なクレジットの数は、比較的一定に保たれ、そして、ポートモジュール28で負荷状態が上昇する場合には、更なるブロック38が、ポートモジュール28での負荷状態の増加に応じてポートモジュール28へ供給されることが可能である。限度はポートモジュール28により使用されるブロックの数に適用されることが可能であり、これは、ポートモジュール28が多すぎるブロック38を使用しそれにより、多すぎる共有されたメモリ資源を使用することを防止する。限度は、クレジットのプール内のクレジットの数に基づいて動的に制御されうる。クレジットのプール内のクレジットの数が減少する場合には、限度も減少する。限度の計算とクレジットがポートモジュール28に割当てられるそれに従った処理は、スイッチコア26を通してパケットのクリティカルパスから発生し、これは、スイッチコア26の交換速度を増加する。
タグメモリ32内のリンクされたリストは、ポートモジュール28に割当てられうる次のクレジットを決定するために中央エージェント34により使用されることが可能である。リンクされたリストの要素は、順にクレジットのプール内のクレジットに対応するブロック38に対応するタグメモリ32内のエントリを含む。例として、クレジットのプール内の4つのクレジットを考える。第1クレジットは第1ブロック38に対応し、第2クレジットは第2ブロック38に対応し、第3クレジットは第3ブロック38に対応し、そして、第4クレジットは第4ブロック38に対応する。第1ブロック38に対応するタグメモリ32内の第1エントリは第2ブロック38へのポインタを有し、第2ブロック38に対応するタグメモリ32内の第2エントリは第3ブロック38へのポインタを有し、そして、第3ブロック38に対応するタグメモリ32内の第3エントリは第4ブロック38へのポインタを有する。中央エージェント34は、第1クレジットをポートモジュール28に割当て、中央エージェント34は第1クレジットをポートモジュール28に割当てながら、ポートモジュール28に割当てる次のクレジットを決定するために第1エントリ内のポインタを使用する。ポインタは、中央エージェント34に第2ブロック38を示し、そして、中央エージェント34がポートモジュール28への第1クレジットの割当てを終了したときに、中央エージェント34はポートモジュール28へ第2クレジットを割当てる。中央エージェント34は第2クレジットをポートモジュール28に割当てながら、中央エージェント34はポートモジュール28に割当てる次のクレジットを決定するために第2エントリ内のポインタを使用する。ポインタは、中央エージェント34に第3ブロック38を示し、そして、中央エージェント34がポートモジュール28への第2クレジットの割当てを終了したときに、中央エージェントはポートモジュール28へ第3クレジットを割当てる。中央エージェント34は第3クレジットをポートモジュール28に割当てながら、中央エージェント34はポートモジュール28に割当てる次のクレジットを決定するために第3エントリ内のポインタを使用する。ポインタは、中央エージェント34に第4ブロック38を示し、そして、中央エージェント34がポートモジュール28への第3クレジットの割当てを終了したときに、中央エージェントはポートモジュール28へ第4クレジットを割当てる。
ブロック38に対応するクレジットがクレジットのプールに戻されたときに、ブロック38に対応するタグメモリ32内のエントリは、ポートモジュール28に割当てる次のクレジットを決定するために中央エージェント34が使用しているリンクされたリストの最後に加えられる。例として、上述のリンクされたリストを考える。第4のエントリがリンクされたリストの最後の要素である場合には、第5ブロック38に対応する第5クレジットがクレジットのプールに追加されたときに、第4エントリは、第5ブロック38に対応するタグメモリ32内の第5エントリへのポインタを含めるように修正されうる。タグメモリ32内のエントリは各々が、ストリームメモリ30のブロック38に対応し、ブロック38へ指すポインタもタグメモリ32内のエントリを指す。
ポートモジュール28が入力するパケットを受信するときには、ポートモジュール28は、ストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効かどうかを決定する。特定の実施例では、ストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効な場合には、ポートモジュール28は1つ又はそれ以上のクレジットを使用して、ストリームメモリ30へパケットを書き込む。特定の実施例では、ストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効でない場合には、ポートモジュール28は、パケットを入力バッファに書き込みそして、後に、ストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効になったときに、1つ又はそれ以上のクレジットを使用して、ストリームメモリ30へパケットを書き込む。入力バッファにパケットを書き込むポートモジュール28の代わりとして、ポートモジュール28はパケットを中断することが可能である。特定の実施例では、ストリームメモリ30へパケットの一部のみを書き込むために十分なクレジットがポートモジュール28に有効な場合には、ポートモジュール28は1つ又はそれ以上のクレジットを使用して、ストリームメモリ30へ書き込まれるべきパケットの一部をストリームメモリ30に書き込むことができ、そして、パケットの1つ又はそれ以上の他の部分を入力バッファに書き込むことができる。後に、ストリームメモリ30へパケットの1つ又はそれ以上の他の部分を書き込むために十分なクレジットがポートモジュール28に有効になったときに、ポートモジュール28は、1つ又はそれ以上のクレジットを使用して、ストリームメモリ30へパケットの1つ又はそれ以上の他の部分を書き込むことができる。特定の実施例では、カットスルー転送のような、遅延されたカットスルー転送が、記憶及び転送技術の上の(減少された待ち時間、減少されたメモリ要求、及び増加されたスループットのような)1つ又はそれ以上の利点を提供する。ストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効かどうかを決定するポートモジュール28への参照は、ストリームメモリ30へ全体のパケットを書き込むために、ストリームメモリ30へパケットの受信された部分のみを書き込むために又は、ストリームメモリ30へパケットの少なくとも一部分を書き込むために、十分なクレジットがポートモジュール28に有効どうかを決定するポートモジュール28をを含む。
特定の実施例では、全体のパケッが受信されるまで入力パケットの長さを知ることができない。これらの実施例では、(標準の適用可能なセットに従った)最大パケットサイズが、ストリームメモリ30へポートモジュール28により受信された入力パケットを書き込むために十分なクレジットがポートモジュール28に有効かどうかを決定するのに使用されることが可能である。電気電子工学会(IEEE)により発行された標準のセットに従って、イーサネット(登録商標)フレームの最大サイズは1500バイトである。標準のデファクトのセットに従って、イーサネット(登録商標)フレームの最大サイズは9000バイトである。例としてそして限定しないとして、入力パケットの一部のみを受信したポートモジュール28を考える。ポートモジュール28は、ストリームメモリ30へ全体のパケットを書き込むために十分なクレジットがポートモジュール28に有効かどうかを決定するのに、(標準の適用可能なセットに従った)最大パケットサイズを使用する。ポートモジュール28は、最大パケットサイズとポートモジュール28に有効なクレジットの数を比較することにより、この決定を行うことが可能である。ストリームメモリ30へ全体のパケットを書き込むために十分なクレジットがポートモジュール28に有効な場合には、ポートモジュール28は、1つ又はそれ以上のクレジットを使用してストリームメモリ30へパケットの受信された部分を書き込むことができそして、ポートモジュール28がパケットの1つ又はそれ以上の他の部分を受信したときに、1つ又はそれ以上のクレジットを使用してストリームメモリ30へパケットの1つ又はそれ以上の他の部分を書き込むことができる。
ポートモジュール28は、カウンタを使用してポートモジュール28に有効なクレジットの数を監視できる。中央エージェント34が、クレジットをポートモジュール28に割当てるときに、ポートモジュール28はある量だけカウンタを増加しそして、ポートモジュール28がクレジットを使用するときに、ポートモジュール28はある量だけカウンタを減じる。カウンタの現在の値は、ポートモジュール28に有効なクレジットの現在の数を示し、そして、ポートモジュール28は、ポートモジュール28からストリームメモリ30へパケットを書き込むために十分なクレジットがポートモジュール28に有効かどうかを決定するために、カウンタを使用できる。中央エージェント34も、カウンタを使用してポートモジュール28に有効なクレジットの数を監視できる。中央エージェント34が、クレジットをポートモジュール28に割当てるときに、中央エージェント34はある量だけカウンタを増加しそして、ポートモジュール28がクレジットを使用したことを、ポートモジュール28が中央エージェント34に通知するときに、中央エージェント34は、ある量だけカウンタを減じる。カウンタの現在の値は、ポートモジュール28に有効なクレジットの現在の数を示し、そして、中央エージェント34は、ポートモジュール28へ1つ又はそれ以上のクレジットを割当てるかどうかを決定するために、カウンタを使用できる。中央エージェント34は、カウンタを使用しているポートモジュール28により使用されているブロック38の数も監視できる。ポートモジュール28が中央エージェント34へ、ポートモジュール28がブロック38へ書き込んだことを通知するときには、中央エージェントは、ある量だけカウンタを増加しそして、ポートモジュール28が書き込んだブロック38が解放されそしてブロック38に対応するクレジットがクレジットのプールに戻されたときに、中央エージェントはある量だけカウンタを減じる。
ポートモジュール28へ有効なクレジットの数は一定に保たれ、そして、ポートモジュール28により使用されているブロック38の数は制限される。制限は、ポートモジュール28、1つ又はそれ以上の他のポートモジュール28又は、両方での負荷状態の変化に応じて変化される。特定の実施例では、ポートモジュール28により使用されているブロック38の数は、クレジットのプール内のクレジットの数の関数である動的なしきい値に従って、制限される。アクティブなポートモジュール28は、特定の実施例では、1つ又はそれ以上のブロック38を使用しているポートモジュール28を含む。ブロック38を使用しているポートモジュール28への参照は、ストリームメモリ30からパケットの全ての指定されたポートモジュール28へ読み出しされてないストリームメモリ30へ少なくとも1つのパケットを書き込んだポートモジュール28を含む。動的なしきい値は、以下の式を使用して計算されたクレジットのプール内のクレジットの数の一部分を含むことが出き、αはアクティブなポートモジュール28の数に等しくそしてρはパラメータであり:
クレジットのプール内のクレジットの数は、各々がポートモジュール28により使用されているブロック38の数が、上述の動的なしきい値を含みうる、適用可能な限度を超える場合には、中央エージェント34がポートモジュール28へクレジットを割当てることを避けるために確保されうる。クレジットのプール内の1つ又はそれ以上のクレジットを確保することは、アクティブであるポートモジュール28の数の変化に関連する変化期間中のクッションを提供できる。確保されたクレジットの一部分は、以下の式を使用して計算され、αはアクティブなポートモジュール28の数に等しくそしてρはパラメータであり:
上述の式に従って、1つのポートモジュール28がアクティブで、ρが2の場合には、中央エージェント34はクレジットの3分の1を確保し、そして、ポートモジュール28へクレジットの3分の2を割当て;2つのポートモジュール28がアクティブで、ρが1の場合には、中央エージェント34はクレジットの3分の1を確保し、そして、アクティブである各ポートモジュール28へクレジットの3分の1を割当て;12つのポートモジュール28がアクティブで、ρが0.5の場合には、中央エージェント34はクレジットの14分の2を確保し、そして、アクティブである各ポートモジュール28へクレジットの14分の1を割当てる。特定の限度が、ポートモジュール28により使用されているブロック38の数に適用されているように記載されているが、本発明は、ポートモジュール28により使用されているブロック38の数に適用される任意の適する限度を考慮する。
第1ポートモジュール28がストリームメモリ30にパケットを書き込むときには、第1ポートモジュール28は、パケットの指定されたポートモジュール28である1つ又はそれ以上の第2ポートモジュール28を識別するためにルーティングモジュール36が使用できるパケットのヘッダからの情報(1つ又はそれ以上の宛先アドレスなど)をルーティングモジュール36へ通信できる。第1ポートモジュール28は、ストリームメモリ30からパケットを読むために第2ポートモジュール28により共に使用されるパケットが書き込まれた第1ブロック38のアドレスとオフセットをも、ルーティングモジュール36へ通信できる。ルーティングモジュール36は、1つ又はそれ以上のルーティングテーブルとパケットのヘッダからの情報を使用して第2ポートモジュール28を識別できそして、第2ポートモジュール28の識別後に、第1ブロック38のアドレスとオフセットを各第2ポートモジュール28へ通信し、これは、以下に更に完全に記載するように、第2ポートモジュール28が、出力キューへ追加されることが可能である。
中央エージェント34は、クレジットに対応するブロック38に書き込まれたパケットの全ての指定されたポートモジュール28がブロック38から読み出した場合にのみ、クレジットをクレジットのプールへ戻す。例として、ブロック38へ書き込まれそして2つの指定されたポートモジュール28を有するパケットを考える。第1の指定されたポートモジュール28は、ブロック38から読み出しそして、中央エージェント34へ、第1の指定されたポートモジュール28がブロック38から読み出したことを通知する。第2ポートモジュール28がブロック38からまだ読み出しておらず、そして、第2の指定されたポートモジュール28がブロック38から読み出したことを中央エージェント34へ通知していない場合には、中央エージェント34は、第1ポートモジュール28からの通知に応じてクレジットのプールへブロック38に対応するクレジットを戻さない。後に、第2の指定されたポートモジュール28がブロック38から読み出しそして、第2の指定されたポートモジュール28がブロック38から読み出したことを中央エージェント34へ通知する。第1ポートモジュール28は、すでにブロック38から読み出しそして、中央エージェント34へ、第1の指定されたポートモジュール28がブロック38から読み出したことを通知しているので、中央エージェント34は、第2ポートモジュール28からの通知に応じてクレジットのプールへブロック38に対応するクレジットを戻す。
パケットの全ての指定されたポートモジュール28が、パケットが書き込まれたブロック38から読み出されたかどうかを決定するために、中央エージェント34はビットベクトルを使用する。ビットベクトルは、各々がポートモジュール28に対応しそして、ポートモジュール28がブロック38から読み出したかを示す、2つ又はそれ以上の要素を含む。ストリームメモリ30へパケットが書き込まれるときには、中央エージェント34は、ビットベクトルの要素を、スイッチコア26のどのポートモジュール28がそのパケットのポートモジュール28に指定されているかを示すために設定し、そして、指定されたポートモジュール28がストリームメモリ30からパケットを読むにつれて、中央エージェント34はビットベクトルの要素をクリアする。
例として、6要素を含むビットベクトルを考える。第1要素は第1ポートモジュール28に対応し、第2要素は第2ポートモジュール28に対応し、第3要素は第3ポートモジュール28に対応し、第4要素は第4ポートモジュール28に対応し、第5要素は第5ポートモジュール28に対応し、そして、第6要素は第6ポートモジュール28に対応する。パケットは、ストリームメモリ30のブロック38に書き込まれ、第3ポートモジュール28、第4ポートモジュール28、及び第6ポートモジュール28は全てパケットの指定されたポートモジュール28である。第3ポートモジュール28に対応するビットベクトルの第3要素は、第3ポートモジュール28がパケットの指定されたポートモジュール28であることを示すために設定され、第4ポートモジュール28に対応するビットベクトルの第4要素は、第4ポートモジュール28がパケットの指定されたポートモジュール28であることを示すために設定され、そして、第6ポートモジュール28に対応するビットベクトルの第6要素は、第6ポートモジュール28がパケットの指定されたポートモジュール28であることを示すために設定される。ビットベクトルの第1要素、ビットベクトルの第2要素、及びビットベクトルの第5要素は、全てクリアされ、第1ポートモジュール、第2ポートモジュール28及び第5ポートモジュール28はそれぞれ指定されたポートモジュール28ではないことを示す。
第3ポートモジュール28はブロック38から最初に読み出しそして、第3ポートモジュール28がブロック38から読み出すときに、ビットベクトルの第3要素がクリアされる。ビットベクトルは、第4ポートモジュール28と第6ポートモジュール28がまだブロック38からパケットを読み出していないことを示す。第6ポートモジュール28はブロック38から次に読み出しそして、第6ポートモジュール28がブロック38から読み出すときに、ビットベクトルの第6要素がクリアされる。ビットベクトルは、第4ポートモジュール28がまだブロック38からパケットを読み出していないことを示す。第4ポートモジュール28はブロック38から最後に読み出しそして、第4ポートモジュール28がブロック38から読み出すときに、第4ポートモジュール28はブロック38から読み出す最後に指定されたポートモジュール28であるので、ブロック38に対応するクレジットがクレジットのプールに戻される。
ビットベクトルはマルチキャスト状態テーブルのエントリに記憶される。マルチキャスト状態テーブルは、複数のエントリを有すことができ、その少なくとも幾つかは各々が、ストリームメモリ30のブロック38に対応する。ストリームメモリ30の各ブロック38は、タグメモリ32内に対応するエントリを有する。単一の及び複数のビット誤りを検出するための誤り検出符号(EDC)もマルチキャスト状態テーブルのエントリにビットベクトルと共に記憶されうる。パケットがストリームメモリ30に書き込まれるときには、パケットが書き込まれた第1ブロック38に対応するマルチキャスト状態テーブル内のエントリ内のビットベクトルの要素は、上述のように、ポートモジュール28はそのパケットの指定されたポートモジュール28であることを示すように設定される。パケットが書き込まれた第1ブロック38に対応するマルチキャスト状態テーブル内のエントリ内のビットベクトルの要素のみが、設定される。指定されたポートモジュール28が第1ブロック38から読み出すときには、指定されたポートモジュール28に対応する要素は、指定されたポートモジュール28がストリームメモリ30からパケットの読み出しを開始したことを示すためにクリアされる。最後に指定されたポートモジュール28が第1ブロック38から読み出すときには、中央エージェント34は第1ブロック38に対応するクレジットをクレジットのプールへ戻す。中央エージェント34は、最後に指定されたポートモジュール28が後続のブロック38から読み出すので、パケットが書き込まれた後続のブロック38に対応するクレジットをクレジットのプールへ戻す。
例として、ストリームメモリ30に書き込まれたパケットを考える。パケットの第1部分が第1ブロック38に書き込まれ、そして、パケットの第2と最終部分が第2ブロック38に書き込まれる。第1クレジットは、第1ブロック38に対応し、第2クレジットは、第2ブロック38に対応する。スイッチコア26の第5ポートモジュール28と第7ポートモジュール28は、パケットの指定されたポートモジュール28である。マルチキャスト状態テーブルの第1エントリは、第1ブロック38に対応し、そして、マルチキャスト状態テーブルの第2エントリは、第2ブロック38に対応する。中央エージェント34は、それぞれ第5ポートモジュール28と第7ポートモジュール28はそのパケットの指定されたポートモジュール28であることを示すために、第1エントリのビットベクトルの第5要素と第7要素を設定する。中央エージェント34は、第2エントリ内のビットベクトルのどの要素も設定する必要はない。第7ポートモジュール28は、第1ブロック38から読み出しそして、中央エージェント34に第7ポートモジュール28が第1ブロック38から読み出したことを通知する。中央エージェント34は、第1エントリのビットベクトルから、第7ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではないことを決定しそして、第1エントリ内のビットベクトルの第7要素をクリアし、第7ポートモジュール28はストリームメモリ30からパケットの読み出しを開始されることを示す。第7ポートモジュール28は、ストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではないので、中央エージェントは第1クレジットをクレジットのプールに戻さない。
第5ポートモジュール28は、第1ポートモジュール28から次に読み出しそして、中央エージェント34に第5ポートモジュール28が第1ブロック38から読み出したことを通知する。中央エージェント34は、第1エントリのビットベクトルから、第5ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではあることを決定し、そして、第5ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではあるので、第1クレジットをクレジットのプールに戻す。第7ポートモジュール28は、そして、第2ポートモジュール28から読み出しそして、中央エージェント34に第7ポートモジュール28が第2ポートモジュール28から読み出したことを通知する。中央エージェントは、第1エントリのビットベクトルから、第7ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではないことを決定しそして、第7ポートモジュール28は、ストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではないので、第2クレジットをクレジットのプールに戻さない。第5ポートモジュール28は、第2ポートモジュール28から次に読み出しそして、中央エージェント34に第5ポートモジュール28が第2ブロック38から読み出したことを通知する。中央エージェント34は、第1エントリのビットベクトルから、第5ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28ではあることを決定し、そして、第5ポートモジュール28はストリームメモリ30からパケットの読み出しを開始する最後に指定されたポートモジュール28であるので、第2クレジットをクレジットのプールに戻す。
上述の例では、第5ポートモジュール28が第7ポートモジュール28に追いつきそして、第7ポートモジュール28が第2ブロック38から読み出す前に第2ブロック38から読み出した場合には、第2クレジットは、第7ポートモジュール28が第2ブロック38から読み出す前にクレジットのプールへ戻されるであろう。第5ポートモジュール28が第7ポートモジュール28に追いつ可能性を減少させるために、第5ポートモジュール28と第7ポートモジュール28は、両方が、ほぼ同じ速度で、第1ブロック38と第2ブロック38から読み出すことができる。
また、上述の例では、第1クレジットが、クレジットのプールに戻された後に、ポートモジュール28に割当てられそして、第2ポートモジュール28が第2ブロック38から読み出す前に第1ブロック38を書き込むのに使用される場合には、第1エントリ内のビットベクトルは、中央エージェント34が、第5ポートモジュール28又は第7ポートモジュール28が、ストリームメモリ30からパケットの読み出しを開始する最後のポートモジュール28であるかどうかを決定できないように、上書きされる。第1エントリ内のビットベクトルが上書きされる可能性を減少させるために、上述のように、動的なしきい値が、ポートモジュール28に有効であるクレジットの数に適用される。動的なしきい値は、クレジットのプール内のクレジットの数が少なくなることを避けることができるので、パケットの全ての指定されたポートモジュール28は、ビットベクトルがパケットが書き込まれた第1ブロック38に対応するマルチキャスト状態テーブル内のエントリに上書きされる前に、ストリームメモリ30からパケットを読み出す十分な時間を有しない。
ポートモジュール28は、ポートモジュール28を通してスイッチコア26から通信するために、ストリームメモリ30へ書き込まれたパケットを待たせるのに使用される1つ又はそれ以上の出力キューを有することが可能である。パケットがストリームメモリ30へ書き込まれるときには、パケットはそのパケットの各指定されたポートモジュール28の出力キューに追加される。指定されたポートモジュール28の出力キューは、サービスの品質(QoS)のレベルとソースポートモジュール28の組合せに対応する。例として、3レベルのQoSを提供しそして入力論理と出力論理の両方を含む4つのポートモジュール28を有するスイッチコア26を考える。第1ポートモジュール28は9の出力キュー:第1レベルのQoSと第2ポートモジュール28に対応する第1出力キュー;第1レベルのQoSと第3ポートモジュール28に対応する第2出力キュー;第1レベルのQoSと第4ポートモジュール28に対応する第3出力キュー;第2レベルのQoSと第2ポートモジュール28に対応する第4出力キュー;第2レベルのQoSと第3ポートモジュール28に対応する第5出力キュー;第2レベルのQoSと第4ポートモジュール28に対応する第6出力キュー;第3レベルのQoSと第2ポートモジュール28に対応する第7出力キュー;第3レベルのQoSと第3ポートモジュール28に対応する第8出力キュー;第3レベルのQoSと第4ポートモジュール28に対応する第9出力キューを有する。(1)パケットが第2ポートモジュール28からストリームメモリ30に書き込まれ、(2)第1ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第1レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第1ポートモジュール28の第1出力キューに追加される。(1)パケットが第3ポートモジュール28からストリームメモリ30に書き込まれ、(2)第1ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第2レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第1ポートモジュール28の第5出力キューに追加される。(1)パケットが第4ポートモジュール28からストリームメモリ30に書き込まれ、(2)第1ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第3レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第1ポートモジュール28の第9出力キューに追加される。
第2ポートモジュール28は9の出力キュー:第1レベルのQoSと第1ポートモジュール28に対応する第1出力キュー;第1レベルのQoSと第3ポートモジュール28に対応する第2出力キュー;第1レベルのQoSと第4ポートモジュール28に対応する第3出力キュー;第2レベルのQoSと第1ポートモジュール28に対応する第4出力キュー;第2レベルのQoSと第3ポートモジュール28に対応する第5出力キュー;第2レベルのQoSと第4ポートモジュール28に対応する第6出力キュー;第3レベルのQoSと第1ポートモジュール28に対応する第7出力キュー;第3レベルのQoSと第3ポートモジュール28に対応する第8出力キュー;第3レベルのQoSと第4ポートモジュール28に対応する第9出力キューを有する。(1)パケットが第1ポートモジュール28からストリームメモリ30に書き込まれ、(2)第2ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第1レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第2ポートモジュール28の第1出力キューに追加される。(1)パケットが第3ポートモジュール28からストリームメモリ30に書き込まれ、(2)第2ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第2レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第2ポートモジュール28の第5出力キューに追加される。(1)パケットが第4ポートモジュール28からストリームメモリ30に書き込まれ、(2)第2ポートモジュール28はそのパケットの指定されたポートモジュール28であり、そして(3)そのパケットのQoSのレベルは第3レベルのQoSである場合には、ストリームメモリ30に書き込まれたパケットは、第2ポートモジュール28の第9出力キューに追加される。
第3ポートモジュール28と第4ポートモジュール28は各々が、上述の第1ポートモジュール28の出力キューと第2ポートモジュール28の出力キューと同様な出力キューを有する。QoSは、伝送のレート、誤りのレート、又は、スイッチコア26を通るパケットの通信の他の面を含み、QoSへの参照は、適切なら、サービスのクラス(CoS)を含むことが可能である。第1ポートモジュール28の出力キューは、第2ポートモジュール28とQoSのレベルに対応するとして記載されているが、第1ポートモジュール28の出力キューは第2ポートモジュール28とQoSのレベルに必ずしも対応する必要はない。例として、特定の実施例では、第1ポートモジュール28の出力キューは、第2ポートモジュール28に対応しQoSのレベルに対応しない。
ポートモジュール28の出力キューは、ポートモジュール28のレジスタと、出力キューに1より多くのパケットがある場合には、以下に記載するように、ポートモジュール28のメモリ構造内の1つ又はそれ以上のエントリを含む。ポートモジュール28は、ストリームメモリ30から読み出されるべき次のパケットを決定するために、1つ又はそれ以上のレジスタと共に、ポートモジュール28が使用できる1つ又はそれ以上のリンクされたリストを有することが可能である。メモリ構造は、複数のエントリを有し、その少なくとも幾つかは各々が、ストリームメモリ30のブロック38に対応する。ストリームメモリ30の各ブロック38は、メモリ構造内に対応するエントリを有する。メモリ構造内のエントリは、メモリ構造内の他のエントリへのポインタを含み、リンクされたリストとなる。ポートモジュール28は、ポートモジュール28もストリームメモリ30から読み出されるべき次のパケットを決定するために使用できる、1つ又はそれ以上のレジスタを有することも可能である。レジスタは、書き込みポインタ、オフセット及びリードポインタを有する。書き込みポインタは、第1パケットが書き込まれた第1ブロック38を示し、オフセットは第1パケットが書き込まれた第1ワード40を示し、そして、読み出しポインタは、第2パケット(第1パケットと同じ又は第1パケットと異なるパケット)が書き込まれた、第1ブロック38を示す。メモリ構造内のエントリの各々がストリームメモリ30のブロック38に対応するので、ブロック38を示すポインタもメモリ構造内のエントリを示す。
ポートモジュール28は、オフセットを書き込むメモリ構造内の次のエントリを決定するために書き込みポインタを使用できる。ポートモジュール28は、ブロック38から読み出しを開始するブロック38のワード40を決定するためにオフセットを使用できる。ポートモジュール28は、ストリームメモリ30から読み出すべき次のパケットを決定するために読み出しポインタを使用できる。ポートモジュール28は、1より多くのパケットが出力キューにあるかどうかを決定するために、書き込みポインタと読み出しポインタを使用できる。出力キューからでなくそして書き込みポインタと読み出しポインタが両方ともに同じブロック38を示す場合には、出力キューに1つのパケットのみが存在する。出力キューに1つのパケットのみが存在する場合には、ポートモジュール28はメモリ構造にアクセスすることなしに、ストリームメモリ30から読み出すべき次のパケットを決定しそして、ストリームメモリ30から次のパケットを読み出すことが可能である。
出力キューにパケットがないときに、第1パケットが出力キューに追加される場合には、(1)レジスタ内の書き込みポインタは第1パケットが書き込まれた第1ブロック38を示すように修正され、(2)オフセットは第1パケットが書き込まれた第1ワード40を示すように修正され、そして(3)読み出しポインタも第1パケットが書き込まれた第1ブロック38を示すように修正される。ポートモジュール28がストリームメモリ30から第1パケットを読み出す前に、第2パケットが出力キューに追加される場合には、(1)書き込みポインタは第2パケットが書き込まれた第1ブロック38を示すように修正され、(2)オフセットは第1パケットが書き込まれた第1ブロック38に対応するメモリ構造内の第1エントリに書き込まれそして、第2パケットが書き込まれた第1ワード40を示すように修正され、そして(3)第1エントリ内のポインタは第2パケットが書き込まれた第1ブロック38を示すように修正される。読み出しポインタは、第2パケットが出力キューに追加された後に、読み出しポインタはまだ第1パケットが書き込まれた第1ブロック38を示すように、変更されずに残る。以下に更に完全に説明するように、読み出しポインタは、ポートモジュール28がストリームメモリ30から出力キューのパケットを読むときに変更される。ポートモジュール28がストリームメモリ30から第1パケットと第2パケットを読む前に、第3パケットが、出力キューに追加される場合には、(1)書き込みポインタは第3パケットが書き込まれた第1ブロック38を示すように修正され、(2)オフセットは第2パケットが書き込まれた第1ブロック38に対応するメモリ構造内の第2エントリに書き込まれそして、第3パケットが書き込まれた第1ワード40を示すように修正され、そして(3)第2エントリ内のポインタは第3パケットが書き込まれた第1ブロック38を示すように修正される。読み出しポインタは、第3パケットが出力キューに追加された後に、読み出しポインタはまだ第1パケットが書き込まれた第1ブロック38を示すように、再び変更されずに残る。
ポートモジュール28は、ストリームメモリ30から読むべき次のパケットを決定するために、出力キューを使用する。例として、3パケットがある上述の出力キューを考える。レジスタでは、(1)書き込みポインタは第3パケットが書き込まれた第1ブロック38を示し、(2)オフセットは第3パケットが書き込まれた第1ワード40を示しそして、そして(3)読み出しポインタは第1パケットが書き込まれた第1ブロック38を示す。メモリ構造の第1エントリは、(1)第1パケットが書き込まれた第1ワード40を示すオフセットと、(2)第2パケットが書き込まれた第1ブロック38を示すポインタを有する。メモリ構造の第2エントリは、(1)第2パケットが書き込まれた第1ワード40を示すオフセットと、(2)第3パケットが書き込まれた第1ブロック38を示すポインタを有する。
ポートモジュール28は、読み出しポインタと書き込みポインタを比較しそして、比較から、出力キューに1より多くのパケットが存在することを決定する。ポートモジュール28はそして、ストリームメモリ30から読み出すべき次のパケットを決定するのに読み出しポインタを使用する。読み出しポインタは、ポートモジュール28へ第1パケットの第1ブロック38を示し、そして、出力キューに1より多くのパケットがあるので、ポートモジュール28は第1パケットが書き込まれた第1ワード40を示す第1エントリのオフセットにアクセスする。ポートモジュール28は、そして、第1パケットが書き込まれた第1ブロック38で開始する、第1エントリのオフセットを使用して、ストリームメモリ30から第1パケットを読み出す。第1パケットが1より多くのブロック38へ書き込まれた場合には、ポートモジュール28は、上述のように、メモリから第1パケットを読み出すためにタグメモリ32内のリンクされたリストを使用できる。
ポートモジュール28はストリームメモリ30から第1パケットを読み出しながら、ポートモジュール28は、第1エントリのポインタを読み出しポインタへコピーし、そして、読み出しポインタを書き込みポインタを比較し、そして、比較から、出力キューに1つより多くのパケットが存在することを決定する。ポートモジュール28は、そして、ストリームメモリ30から読み出す次のパケットを決定するために読み出しポインタを使用する。読み出しポインタは、ポートモジュール28に第2パケットの第1ブロック38を示し、そして、出力キューに1つより多くのパケットが存在するので、ポートモジュール28は、第2パケットが書き込まれた第1ワード40を示す第2エントリ内のオフセットにアクセスする。ポートモジュール28がストリームメモリ30からの第1パケットの読み出しを終了したときに、ポートモジュール28は、第2パケットが書き込まれた第1ブロック38から開始する、第2エントリのオフセットを使用して、ストリームメモリ30から第2パケットを読み出す。第2パケットが1より多くのブロック38に書き込まれた場合には、ポートモジュール28は、上述のように、メモリから第2パケットを読み出すために、タグメモリ32のリンクされたリストを使用できる。
ポートモジュール28がストリームメモリ30から第2パケットを読み出している間に、ポートモジュール28は、第2エントリ内のポインタを読み出しポインタへコピーし、読み出しポインタを書き込みポインタと比較し、そして、比較から、1つのパケットのみが出力キューにあることを決定する。ポートモジュール28は、ストリームメモリ30から読み出す次のパケットを決定するために読み出しポインタを使用する。読み出しポインタは、ポートモジュール28に第2パケットの第3ブロック38を示し、そして、1つのパケットのみが出力キューにあるので、ポートモジュール28は、第3パケットが書き込まれた第1ワード40を示すレジスタのオフセットにアクセスする。ポートモジュール28が、ストリームメモリ30からの第2パケットの読み出しを終了したときに、ポートモジュール28は、第3パケットが書き込まれた第1ブロック38で開始する、レジスタ内のオフセットを使用して、ストリームメモリ30から第3パケットを読み出す。第3パケットが1つより多くのブロック38に書き込まれた場合には、ポートモジュール28は、上述のように、メモリから、第3パケットを読み出すためにタグメモリ32のリンクされたリストを使用できる。
ポートモジュール28が、1つより多くの出力キューを有する場合には、出力キューの間の仲裁(アービトレーション)のためにアルゴリズムが使用される。複数の出力キューの間の仲裁は、ストリームメモリ30から読み出す次のパケットを決定するのに使用する次の出力キューを決定することを含むことが可能である。複数の出力キューの間の仲裁は、ストリームメモリ30から読み出す次のパケットを決定するために第2出力キューを使用する前に、ストリームメモリ30から読み出す第1出力キュー内に幾つのパケットがあるかを決定することも含むことが可能である。本発明は、複数の出力キュー間の仲裁のために適するアルゴリズムを考慮する。例であり及び限定するのではなく、ポートモジュール28の複数の出力キューの間の仲裁のためのアルゴリズムに従って、ポートモジュール28は、一連のラウンドで空ではない出力キューにアクセスする。1ラウンド内では、ポートモジュール28は、連続して予め定められた順序で出力キューをアクセスし、そして、ポートモジュール28が出力キューをアクセスするときに、ストリームメモリ30からの出力キュー内の1つ又はそれ以上のパケットを読む。ポートモジュール28が1ラウンドで出力キューから読み出すパケットの数は、ポートモジュール28が、同じラウンドで、ポートモジュール28の1つ又はそれ以上の他の出力キューの各々から読み出すパケットの数の同じであるか又は異なることが可能である。特定の実施例では、1ラウンドで出力キューから読み出され得るパケットの数は、データの量を定義する量値に基づいており、それに従って、より小さなパケットが出力キュー内にある場合には出力キューからより多くのパケットが読み出せ、そして、より大きなパケットが出力キュー内にある場合には出力キューからより少ないパケットが読み出せ、これは、ポートモジュール28の出力リンクの公平な共有を容易にする。
特定の実施例では、ポートモジュール28は、ストリームメモリ30への接続を使用する。これらの実施例では、ポートモジュール28は、ストリームメモリ30への接続を確立し、接続を使用してストリームメモリ30をアクセスし、そして、必要な場合には、接続を解放する。接続を使用してストリームメモリ30をアクセスするときには、ポートモジュール28は、他のポートモジュール28によるブロッキングを経験しない。特定の実施例では、書き込み動作のために、ポートモジュール28とストリームメモリ30の間に(且つ仲裁遅延なしで)、常に接続がある。書き込み動作は、一連のサイクルをわたる幾つかのステップを含む(その各々はスイッチコア26の1つ又はそれ以上のサイクルを有する)。例としてそして限定するのではなく、ストリームメモリ30は、1つ又はそれ以上の(書き込み動作のワードオフセットを示す)同期ビットをポートモジュール28へ通信し、そして、ポートモジュール28はストリームメモリ30に書き込みそして、ストリームメモリ30へ、書き込み動作のために、ストリームメモリ30の1つ又はそれ以上のブロック38の1つ又はそれ以上のアドレスを通信する。
(仲裁とアクセスがパイプラインにされている)読み出し動作も、一連のサイクルをわたる幾つかのステップを含む。例としてそして限定するのではなく、ポートモジュール28は、ストリームメモリ30からの読み出し動作のために接続を要求しそして、ワードオフセットをストリームメモリ30へ通信する。スイッチコア26の1つ又はそれ以上のクロックサイクルをわたる仲裁サイクルの後に、ストリームメモリ30は、要求に応じてポートモジュール28へ受取通知を通信し、その点で要求された接続が確立される。特定の実施例では、(要求されている接続と通信されている受取通知の間の遅延を含む)ゼロクロックサイクルの推定された最小仲裁遅延と、14クロックサイクルの推定された最大仲裁遅延がある。仲裁遅延は、スイッチコア26を通るデータのストリーム内にギャップを発生しそして、ポートモジュール28が経験する平均仲裁遅延は、スイッチコア26により経験される負荷が増加するにつれて増加しがちである。ポートモジュール28は、受取通知を受信した後に、ポートモジュール28は、ストリームメモリ30へ読み出し動作のためにストリームメモリ30のブロック38の1つ又はそれ以上のアドレスを通信し、そして、1つ又はそれ以上のサイクルの後に、ストリームメモリ30はそのアドレスのデータをポートモジュール28へ通信する。ストリームメモリ30は、ポートモジュール28がストリームメモリ30へ読み出し動作の全てのアドレスを通信する前に、データの通信を開始できる。ポートモジュール28がストリームメモリ30へ読み出し動作の全てのアドレスを通信したときには、ポートモジュール28は接続を解放し、そして、特定の実施例では、おそらく同じサイクル内で、他の接続を要求する。ストリームメモリ30への書き込み動作よりもストリームメモリ30からの多くの読み出し動作は、時間の期間中にスケジュールされる。例でありそして限定するのではなく、同じ時間の期間をわたる書き込み動作よりも、2倍の多くの読み出し動作が、時間の期間をわたりスケジュールされる。他の例では、同じ時間の期間をわたる書き込み動作よりも、3倍の多くの読み出し動作が、時間の期間を渡りスケジュールされる。
特定の実施例では、ストリームメモリ30は、互いに並列に使用される幾つかのスタティックランダムアクセスメモリ(SRAM)を含み、ストリームメモリ30のSRAM装置へのアクセスは、適切なインターリービング技術を使用してスケジュールされる。本発明は、1RW(または単一ポート)SRAM装置、マルチポート及びマルチビットSRAM装置又は、他のSRAM装置を考慮するが、1RW SRAM装置は、より大きな密度、柔軟性、及びデータのストリームへのアクセスのための少ない配線を提供する。スイッチコア26が、Nのポートモジュール28と、各々がMビットを有するストリームメモリ30とポートモジュール38の間のリンクを有する場合には、ストリームメモリ30は、特定の実施例では2*Mビット幅のデータ経路を有する1RW SRAM装置の2*Nのインスタンスを有する。例としてそして限定するのではなく、スイッチコア26が、12のポートモジュール28とポートモジュール28を各々が36ビットを有するストリームメモリ30に結合するリンクを有する場合には、ストリームメモリ30は、72ビット幅のデータ経路を有する1RW SRAM装置の24のインスタンスを有する。SRAM装置のインスタンスの数とデータ経路の幅は、以下の観測に基づいている:(1)ポートモジュール28の合計の帯域幅は、読み出し動作については秒当りN*Mビット及び書き込み動作については秒当りN*Mビットであり、そして、ストリームメモリ30の合計の帯域幅は、秒当り4*N*Mビットであり;(2)ストリームメモリ30からの及びそこへの読み出し動作と書き込み動作は、秒当りN*Mビットが書き込み動作について保存されそして、秒当り3*N*Mビットが読み出し動作について保存されるように、スケジュールされ;(3)書き込み動作についてよりも読み出し動作について2から3倍の帯域幅を提供することはスイッチコア26の仲裁遅延を減少させる。ストリームメモリ30はSRAM装置を含むように記載されているが、本発明は、任意の適するメモリ装置を含むストリームメモリ30を考慮する。
特定の実施例では、交換構造34aと交換構造34bを有する多段相互接続ネットワーク(MIN)が、ストリームメモリ30の全SRAM装置とスイッチコアの全ポートモジュール28の間の接続を提供するために使用される。MINは、幾つかの交換ユニット42と以下に完全に記載するように、バンク交換ユニット46を含む、(ストリームメモリ30のSRAM装置が組織化される)幾つかのメモリバンク44を有する階層構造を有する。図3に示されているストリームメモリ30のMINは、4つの交換ユニット42と3つのメモリバンク44を有する。ストリームメモリ30は、特定の数の交換ユニット42と特定の数のメモリバンク44を有するように記載され且つ示されているが、特定の構成では、本発明は、適する構成の、適する数の交換ユニット42と適する数のメモリバンク44を含むストリームメモリ30を考慮する。バンク交換ユニット46は、静的にスケジュールされた規則的な交換ユニットを含む。特定の実施例では、静的なスケジュールは、書き込み動作に使用され、そして、交換ユニット42でのオンデマンドスケジューリングは読み出しに使用される。ストリームメモリ30のMINは、ノンブロッキングであるが、しかし冗長性はない。
交換ユニット42は、ポートモジュール28からパケットの全部又は一部を受信しそして、受信されたデータをメモリバンク44へ交換できる。交換ユニット42を介しての書き込み動作は、任意の適する技術に従ってスケジュールされる。例として、交換ユニット42での静的なスケジューリングは、書き込み動作いついて使用される。図5は、6つのポートモジュール28により3つのメモリバンク44への書き込み動作のための、スイッチコア26の2つの交換ユニット42での例示のスケジューリングを示す。特定の実施例では、例としてそして限定するのではなく、交換ユニット42は、48サイクル毎に、初期状態へ戻る。48サイクルをわたり、各ポートモジュール28は、各メモリバンク44の(以下に更に完全に説明するように)各メモリユニット48へ書き込む機会を与えられる。交換ユニット42は、48サイクル毎に、初期状態へ戻るように記載されるが、本発明は、任意の適する数のサイクル後に、交換ユニット42が初期状態へ戻るように、考慮される。各交換ユニット42は、3つの状態を有しそして、16サイクル毎に状態を変更する。特定の数のサイクルをわたり特定の数の交換ユニット42での特定のスケジューリングが、特定の数のポートモジュール28による特定の数のメモリバンク44への書き込み動作について、記載されそして説明されているが、本発明は、任意の適する数のポートモジュール28による任意の適する数のメモリバンク44への書き込み動作について、任意の適する数のサイクルをわたる任意の適する数の交換ユニット42での任意の適するスケジュールを考慮する。
交換ユニット42は、メモリバンク44からパケットの全て又は一部を受信しそして受信されたデータをポートモジュール28へ交換できる。交換ユニット42を介しての読み出し動作は、適する技術に従って、スケジュールされる。例として、交換ユニット42でのオンデマンドスケジューリングが、読み出し動作について使用される。このスケジューリングは、1より多くのポートモジュール28が、同じサイクルで、メモリユニット48から読み出そうとするので、接続及び解放技術を含む。静的なスケジューリングが行われる場合には、特定の実施例では、ポートモジュール28は、特定のメモリバンク44の特定のメモリユニット48から読み出すために48サイクルまで待たなければならないであろう。この遅延を減少させるために、交換ユニット42に結合されたポートモジュール28間の交換ユニット42での仲裁が、読み出し動作について使用される。読み出し動作についての各メモリユニット48の有効性が監視されそして、特定のポートモジュール28は、他のポートモジュール28がメモリユニット48から読み出していない場合には、各4又は8サイクル毎に特定のメモリバンク44の特定のメモリユニット48から読み出すことが許される。
図6は、ポートモジュール28により、(メモリバンク44内の)24のメモリユニット48からの読み出し動作についてのスイッチコア26の交換ユニット42の例示のスケジューリングを示す。3つのポートモジュール28が交換ユニット42に結合され、そして各メモリユニット48は、ゼロから23の数によりスケジュール50で指定されている。読み出し動作は2サイクルにわたり、そして、スケジュール50に従って、サイクル0、2、4、6、8、10、12及び14で開始する。ポートモジュール28は、(1つの読み出し動作に2サイクルを含む)読み出しサイクルで、9つのメモリユニット48の任意の1つから読み出すことができる。サイクルゼロと1をわたる読み出しサイクルでは、ポートモジュール28は、交換ユニット42に結合された他のポートモジュール28がメモリユニット48から読み出していない場合には、2,4,6,10,12,14,18,20又は、22と指定されたメモリユニット48から読み出すことができ;サイクル2と3をわたる読み出しサイクルでは、ポートモジュール28は、交換ユニット42に結合された他のポートモジュール28がメモリユニット48から読み出していない場合には、3,5,7,11,13,15,19,21又は、23と指定されたメモリユニット48から読み出すことができ;サイクル4と5をわたる読み出しサイクルでは、ポートモジュール28は、交換ユニット42に結合された他のポートモジュール28がメモリユニット48から読み出していない場合には、0,4,6,8,12,14,16,20又は、22と指定されたメモリユニット48から読み出すことができる;等である。交換ユニット42で同様なスケジューリングが、メモリユニット38から交換ユニット42に結合された他のポートモジュール28への又はスイッチコア26内の他の交換ユニットへ結合された他のポートモジュール28への読み出し動作について使用される。特定の数のサイクルをわたり交換ユニット42での特定のスケジュールが、ポートモジュール28による特定の数のメモリユニット48からの読み出し動作について、記載されそして説明されているが、本発明は、ポートモジュール28による任意の適する数のメモリユニット48からの読み出し動作について、任意の適する数のサイクルをわたる交換ユニット42での任意の適するスケジュールを考慮する。
図7は、スイッチコア26の例示のメモリバンク44を示す。メモリバンク44は、1つ又はそれ以上のメモリユニット48と(静的にスケジュールされた、規則的な交換ユニットを含む)1つ又はそれ以上のメモリバンク交換ユニット46を有する。特定の実施例では、1つ又はそれ以上のメモリユニット48は共に、メモリ構造36を有する。特定の実施例では、メモリバンク44は、組み込み自己テスト(BIST)論理を有する。メモリバンク44は、ポートモジュール28により共有され、特定の実施例では、それは、ラインの先頭(head−of−line)のブロッキングを除去し(それによりスイッチコア26のスループットを増加し)、スイッチコア26がポートモジュール28での負荷状態の変化を更に効率的に扱うことを可能とし、そして、スイッチコア26に関連するメモリ要求を減少させる。特定の実施例では、例としてそして限定するのではなく、メモリバンク44は、(図7に示されたように)18のバンク交換ユニット46と8のメモリユニット48を有する。メモリバンク44は、特定の数のバンク交換ユニット46と特定の数のメモリユニット48を有するように記述されそして説明されているが、本発明は、任意の適する構成で、任意の適する数のバンク交換ユニット46と任意の適する数のメモリユニット48を有するメモリバンク44考慮する。メモリユニット48は1つ又はそれ以上のSRAM装置を有する。例としてそして限定するのではなく、ストリームメモリ30が(上述のように)SRAM装置の24のインスタンスを有する場合には、ストリームメモリ30は3つのメモリバンク44を有し、各メモリバンク44は8つのメモリユニット48を有しそして、各メモリユニット48は1つのSRAM装置を有する。特定の実施例では、ストリームメモリ30が論理的に1536のブロック38に分割されそして、24のメモリユニット48を有し、各メモリユニット48はストリームメモリ30の64のブロック38を有する。
メモリバンク44を交換ユニット42へ結合するリンクは、1つ又はそれ以上のリンクを有する。例として、特定の実施例では、メモリバンク44を交換ユニット42へ結合するリンクは、1つは書き込み動作のためでありそして4つは読み出し動作のために、5つのリンクを有し、これらの各リンクは36ビットを有する。図7に示されたメモリバンク44は、それぞれ、ul(上方左側)、dl(下方左側)、ur(上方右側)及びdr(下方右側)の、4つの交換ユニット42に結合される。例として、ulは交換ユニット42aを示し、dlは交換ユニット42bを示し、urは交換ユニット42cを示し、drは交換ユニット42dを示す。Wで示されたリンクは各々、交換ユニット42から任意のメモリユニット36への書き込み動作のためであり、Rで指定されたリンクは各々特定のメモリユニット48から交換ユニット42への読み出し動作のためである。特に、R01で指定されたリンクは、メモリユニット48aとメモリユニット48bからの読み出し動作のためであり;R23で指定されたリンクは、メモリユニット48cとメモリユニット48dからの読み出し動作のためであり;R45で指定されたリンクは、メモリユニット48eとメモリユニット48fからの読み出し動作のためであり;R67で指定されたリンクは、メモリユニット48gとメモリユニット48hからの読み出し動作のためである。−ulで示されたリンクはメモリバンク44を交換ユニット42aに結合し、−dlで示されたリンクはメモリバンク44を交換ユニット42bに結合し、−urで示されたリンクはメモリバンク44を交換ユニット42cに結合し、−drで示されたリンクはメモリバンク44を交換ユニット42dに結合する。従って、R01−ulで指定されたリンクはメモリユニット48aと46bから交換ユニット42aへの読み出し動作のためであり、そして、W−drで指定されたリンクは交換ユニット42dから任意のメモリユニット48への書き込み動作のためであり、R67−urで指定されたリンクはメモリユニット48gと46hから交換ユニット42cへの読み出し動作のためである、等である。交換ユニット42が(図3に示されたように)3つのポートモジュール28と3つのメモリバンク44に結合されている場合には、交換ユニット42は、書き込み動作のために3x3、36−ビットの交換ユニットと、読み出し動作のために12x3、36−ビットの交換ユニットを有する。
上述のように、バンク交換ユニット46は、静的にスケジュールされた、規則的な交換ユニットを有する。図8は、4つの交換ユニット42を介した2つのメモリユニット48への読み出し動作のためのメモリバンク44の3つのバンク交換ユニット46での例示のスケジューリングを示す。サイクルNでは、(メモリユニット48aと46bから交換ユニット42aへの読み出し動作のための)R01−ulと指定されたリンクは、メモリユニット48aから読み出すようにスケジュールされ、そして、(メモリユニット48aと46bから交換ユニット42cへの読み出し動作のための)R01−urと指定されたリンクは、メモリユニット48bから読み出すようにスケジュールされる。サイクルN+1では、(メモリユニット48aと46bから交換ユニット42bへの読み出し動作のための)R01−dlと指定されたリンクは、メモリユニット48aから読み出すようにスケジュールされ、そして、(メモリユニット48aと46bから交換ユニット42dへの読み出し動作のための)R01−drと指定されたリンクは、メモリユニット48bから読み出すようにスケジュールされる。サイクルN+2では、R01−ulと指定されたリンクは、メモリユニット48bから読み出すようにスケジュールされ、そして、R01−urと指定されたリンクは、メモリユニット48aから読み出すようにスケジュールされる。サイクルN+3では、R01−dlと指定されたリンクは、メモリユニット48bから読み出すようにスケジュールされ、そして、R01−drと指定されたリンクは、メモリユニット48aから読み出すようにスケジュールされる。同様なスケジューリングは、メモリユニット48cと46d、メモリユニット48eと46f、及びメモリユニット48gと46h、のようなメモリユニット48の他の対の読み出し動作について使用される。特定の数の交換ユニット42を介しての特定の数のメモリユニット48への読み出し動作のために特定の数のサイクルをわたり特定の数のバンク交換ユニット46での特定のスケジュールが記載され且つ説明されているが、本発明は、任意の適する数の交換ユニット42を介しての任意の適する数のメモリユニット48への読み出し動作にために任意の適する数のサイクルをわたり任意の適する数のバンク交換ユニット46での任意の適するスケジュールを考慮する。
図9は、4つの交換ユニット42を介してのメモリバンク44の8つのメモリユニット48への書き込み動作及びそれからの読み出し動作についての例示のスケジューリングを示す。各メモリユニット48は、ゼロから7の数によりスケジュール52内で指定され;メモリユニット48aは数ゼロにより指定され;メモリユニット48bは数1により指定され;メモリユニット48cは数2により指定され;メモリユニット48dは数3により指定され;メモリユニット48eは数4により指定され;メモリユニット48fは数5により指定され;メモリユニット48gは数6により指定され;メモリユニット48hは数7により指定される。スケジュール52の上方の半分54は、交換ユニット42aと40bをメモリバンク44へ結合するリンクに適用され、そして、スケジュール52の上方の半分56は、交換ユニット42cと40dをメモリバンク44へ結合するリンクに適用される。偶数サイクル(ゼロ,2,4,6,8,10,12及び14)に対応する列58は交換ユニット42aと40cをメモリバンク44へ結合するリンクに適用され、奇数サイクル(1,3,5,7,9,11,13及び15)に対応する列58は、交換ユニット42bと40dをメモリバンク44へ結合するリンクに適用される。行60はそれぞれ、交換ユニット42a,40b、40c、及び40dをメモリバンク44へ結合するリンクに対応する。領域62は、書き込み動作との衝突により読み出し動作が発生しない場合を示す。
スケジュール52に従って、サイクルゼロで、(交換ユニット42aを介しての書き込み動作のための)W−ulと指定されたリンクは、メモリユニット48aへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;(交換ユニット42aを介してのメモリユニット48cと46dからの読み出し動作のための)R23−ulと指定されたリンクは、メモリユニット48cからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42aを介してのメモリユニット48eと46fからの読み出し動作のための)R45−ulと指定されたリンクは、メモリユニット48eからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42aを介してのメモリユニット48gと46hからの読み出し動作のための)R67−ulと指定されたリンクは、メモリユニット48gからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42cを介しての書き込み動作のための)W−urと指定されたリンクは、メモリユニット48dへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;(交換ユニット42cを介してのメモリユニット48cと46dからの読み出し動作のための)R01−urと指定されたリンクは、メモリユニット48bからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42cを介してのメモリユニット48eと46fからの読み出し動作のための)R45−urと指定されたリンクは、メモリユニット48fからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42cを介してのメモリユニット48gと46hからの読み出し動作のための)R67−urと指定されたリンクは、メモリユニット48hからの1つ又はそれ以上の読み出し動作に使用されることが可能である。
サイクル1で、(交換ユニット42bを介しての書き込み動作のための)W−dlと指定されたリンクは、メモリユニット48aへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;(交換ユニット42bを介してのメモリユニット48cと46dからの読み出し動作のための)R23−dlと指定されたリンクは、メモリユニット48cからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42bを介してのメモリユニット48eと46fからの読み出し動作のための)R45−dlと指定されたリンクは、メモリユニット48eからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42bを介してのメモリユニット48gと46hからの読み出し動作のための)R67−dlと指定されたリンクは、メモリユニット48gからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42dを介しての書き込み動作のための)W−drと指定されたリンクは、メモリユニット48dへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;(交換ユニット42dを介してのメモリユニット48cと46dからの読み出し動作のための)R01−drと指定されたリンクは、メモリユニット48bからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42dを介してのメモリユニット48eと46fからの読み出し動作のための)R45−drと指定されたリンクは、メモリユニット48fからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42dを介してのメモリユニット48gと46hからの読み出し動作のための)R67−drと指定されたリンクは、メモリユニット48hからの1つ又はそれ以上の読み出し動作に使用されることが可能である。
サイクル2で、W−ulと指定されたリンクは、メモリユニット48bへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;R23−ulと指定されたリンクは、メモリユニット48dからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;R45−ulと指定されたリンクは、メモリユニット48fからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;R67−ulと指定されたリンクは、メモリユニット48hからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;W−urと指定されたリンクは、メモリユニット48eへの1つ又はそれ以上の書き込み動作に使用されることが可能であり;R01−urと指定されたリンクは、メモリユニット48aからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;(交換ユニット42cを介してのメモリユニット48cと46dからの読み出し動作のための)R23−urと指定されたリンクは、メモリユニット48cからの1つ又はそれ以上の読み出し動作に使用されることが可能であり;R67−urと指定されたリンクは、メモリユニット48gからの1つ又はそれ以上の読み出し動作に使用されることが可能である。
この処理は、スケジュール52従って継続し、16サイクル後に、(サイクルゼロである)初期状態に達する。特定の数のサイクルをわたる特定の数の交換ユニット42を介してメモリバンク44の特定の数のメモリユニット48への書き込み動作及びそこからの読み出し動作についての特定のスケジュールが記載され且つ説明されたが、本発明は、任意の適する数のサイクルをわたる任意の適する数の交換ユニット42を介してメモリバンク44の任意の適する数のメモリユニット48への書き込み動作及びそこからの読み出し動作についての任意の適するスケジュールを考慮する。
図10は、高速交換環境のメモリインターリービングのための方法を示す。この方法は、ステップ100で開始、ここで、スイッチコア26の第1ポートモジュール28は、第1ポートモジュール28に結合されたポート24からパケットの一部を受信する。上述のように、スイッチコア26は、複数のポートモジュール28を有する。ステップ102で、第1ポートモジュール28は、パケットの受信された部分をストリームメモリ30へ通信する。ストリームメモリ30はスイッチコア26の全てのポートモジュール28により共有され且つ、ノンブロッキングである。特定の実施例では、上述のように、ストリームメモリ30は、幾つかのメモリユニット48をポートモジュール28に結合するMINを有する。MINは交換ユニット42とメモリバンク42の階層構造を有し、各々が幾つかのバンク交換ユニット44と幾つかのメモリユニット48を有する。上述のように、特定の実施例では、ストリームメモリ30は4つの交換ユニット42と、各々が8のメモリユニット48を有する3つのメモリバンク42を有する。上述のように、特定の実施例では、静的なスケジューリングが、ストリームメモリ30のメモリユニット48への書き込み動作に使用され、そして、交換ユニット42でのオンデマンドスケジューリングがストリームメモリ30のメモリユニット48からの読み出し動作について使用される。
ステップ104では、ストリームメモリ30のMINは、パケットの通信された部分を受信しそして、1つ又はそれ以上のスケジューリング技術を使用して、パケットの受信された部分をストリームメモリ30の適切なメモリユニット48へ交換する。ステップ106で、パケットの交換された部分は、メモリユニット48に書き込まれる。ステップ108で、第2ポートモジュール28が、パケットの一部が書き込まれたメモリユニット48への接続を要求する。ステップ110で、仲裁サイクル後に、要求が許可されそして、要求された接続が確立される。上述のように、仲裁サイクルは、1つの読み出し動作から次の読み出し動作で長さにより変わりうる。ステップ112で、メモリユニット48へ書き込まれたパケットの一部は確立された接続を使用してストリームメモリ30のMINを介して第2ポートモジュール28へ通信される。ステップ114では、第2ポートモジュール28は、パケットの通信された部分を受信し、そして、パケットの通信された部分をスイッチコア26から、第2ポートモジュール28に結合されたポート24へ通信し、この点で、この方法は終了する。図10に示された方法の特定のステップは特定の順序で発生するように記載され且つ説明されているが、本発明は、任意の順序で発生する上述の方法の任意の適するステップを考慮する。
本発明を幾つかの実施例で説明したが、種々の変更、代用、変形、代替及び修正が、当業者には暗示され、本発明は、添付の請求項の精神と範囲内に含まれる、そのような全ての変更、代用、変形、代替及び修正を包含することを意図している。
(付記)
(付記1)
高速交換環境でメモリインターリービングするシステムであって、
各々が1つ又はそれ以上のメモリ装置を有する複数のメモリユニットを有し、
複数のポートモジュールを有し、各々のポートモジュールが、
通信ネットワークの構成要素から通信されたパケットを受信し、且つ、前記受信されたパケットを複数のメモリユニットの1つ又はそれ以上へ書き込み、
通信ネットワークの前記構成要素へ通信するために複数のメモリユニットの1つ又はそれ以上からパケットを読み出し、
1つ又はそれ以上の交換段階を有する階層構造を有する相互接続ネットワークを有し、前記相互接続ネットワークは、前記複数のメモリユニットを前記複数のポートモジュールへ、
前記ポートモジュールの各々が第1のスケジュールに従って、前記メモリユニットの各々へ書き込むように動作し、前記ポートモジュールの各々が第2のスケジュールに従って、前記メモリユニットの各々から読み出すように動作し、前記第1のスケジュールは、時間の期間をわたり第1の数の書き込み動作を可能とし、前記第2のスケジュールは、前記時間の期間をわたり第2の数の読み出し動作を可能とし、前記第2の数は前記第1の数の2倍又はそれ以上であり、
第2のポートモジュールが通信ネットワークの第2の構成要素から通信されたパケットの第2の部分を受信する前に、第1のポートモジュールは、通信ネットワークの第1の構成要素へ通信するために1つ又はそれ以上のメモリユニットからパケットの第1の部分を読み出すように動作する、ように結合する、システム。
(付記2)
前記相互接続ネットワークは、1つ又はそれ以上のメモリバンクと、複数のポートモジュールを前記1つ又はそれ以上のメモリバンクに結合する1つ又はそれ以上の交換ユニットを有する多段相互接続ネットワーク(MIN)を有し、前記1つ又はそれ以上のメモリバンクは各々が、1つ又はそれ以上の複数のメモリユニットと1つ又はそれ以上のバンク交換ユニットを有する、付記1に記載のシステム。
(付記3)
各ポートモジュールは、書き込み動作のための第1リンクと読み出し動作のための第2リンクにより交換ユニットに結合され、
各交換ユニットは、書き込み動作のための第3リンクと読み出し動作のための4つの第4リンクにより各メモリバンクに結合される、付記2に記載のシステム。
(付記4)
前記MINは、3つのメモリバンクと4つの交換ユニットを有し、各メモリバンクは各々が1つのメモリ装置を有する8つのメモリユニットを有する、付記2に記載のシステム。
(付記5)
前記メモリ装置は、スタティックランダムアクセスメモリ(SRAM)装置を有する、付記1に記載のシステム。
(付記6)
前記SRAM装置は、読み出し動作のための1つのポートと書き込み動作のための1つのポートを有する、付記5に記載のシステム。
(付記7)
前記システムは単一の集積回路(IC)で具体化される、付記1に記載のシステム。
(付記8)
前記高速交換環境は、イーサネット(登録商標)交換環境、INFINIBAND交換環境、3GIO交換環境、HYPERTRANSPORT交換環境、RAPID IO交換環境、又は、専用のバックプレーン交換環境である、付記1に記載のシステム。
(付記9)
前記第1のスケジュールは静的なスケジュールを有し、前記第2のスケジュールはオンデマンドスケジュールを有する、付記1に記載のシステム。
(付記10)
前記複数のメモリユニットへの書き込み動作と読み出し動作は、ノンブロッキングである、付記1に記載のシステム。
(付記11)
高速交換環境でメモリインターリービングする方法であって、
1つ又はそれ以上の交換段階を有する階層構造を有する相互接続ネットワークを使用し、複数のメモリユニットを複数のポートモジュールへ結合し、各々のメモリユニットは1つ又はそれ以上のメモリ装置を有し、各ポートモジュールは、通信ネットワークの構成要素から通信されたパケットを受信し且つ前記受信されたパケットを複数のメモリユニットの1つ又はそれ以上へ書き込み、各メモリユニットは更に通信ネットワークの前記構成要素へ通信するために複数のメモリユニットの1つ又はそれ以上からパケットを読み出すように動作し、前記複数のメモリユニットは前記複数のポートモジュールに、
前記ポートモジュールの各々が第1のスケジュールに従って、前記メモリユニットの各々へ書き込むように動作し、前記ポートモジュールの各々が第2のスケジュールに従って、前記メモリユニットの各々から読み出すように動作し、前記第1のスケジュールは、時間の期間をわたり第1の数の書き込み動作を可能とし、前記第2のスケジュールは、前記時間の期間をわたり第2の数の読み出し動作を可能とし、前記第2の数は前記第1の数の2倍又はそれ以上であり、
第2のポートモジュールが通信ネットワークの第2の構成要素から通信されたパケットの第2の部分を受信する前に、第1のポートモジュールは、通信ネットワークの第1の構成要素へ通信するために1つ又はそれ以上のメモリユニットからパケットの第1の部分を読み出すように動作する、ように結合する、方法。
(付記12)
前記相互接続ネットワークは、1つ又はそれ以上のメモリバンクと、複数のポートモジュールを前記1つ又はそれ以上のメモリバンクに結合する1つ又はそれ以上の交換ユニットを有する多段相互接続ネットワーク(MIN)を有し、前記1つ又はそれ以上のメモリバンクは各々が、1つ又はそれ以上の複数のメモリユニットと1つ又はそれ以上のバンク交換ユニットを有する、付記11に記載の方法。
(付記13)
各ポートモジュールは、書き込み動作のための第1リンクと読み出し動作のための第2リンクにより交換ユニットに結合され、
各交換ユニットは、書き込み動作のための第3リンクと読み出し動作のための4つの第4リンクにより各メモリバンクに結合される、付記12に記載の方法。
(付記14)
前記MINは、3つのメモリバンクと4つの交換ユニットを有し、各メモリバンクは各々が1つのメモリ装置を有する8つのメモリユニットを有する、付記12に記載の方法。
(付記15)
前記メモリ装置は、スタティックランダムアクセスメモリ(SRAM)装置を有する、付記11に記載の方法。
(付記16)
前記SRAM装置は、読み出し動作のための1つのポートと書き込み動作のための1つのポートを有する、付記15に記載の方法。
(付記17)
前記システムは単一の集積回路(IC)で具体化される、付記11に記載の方法。
(付記18)
前記高速交換環境は、イーサネット(登録商標)交換環境、INFINIBAND交換環境、3GIO交換環境、HYPERTRANSPORT交換環境、RAPID IO交換環境、又は、専用のバックプレーン交換環境である、付記11に記載の方法。
(付記19)
前記第1のスケジュールは静的なスケジュールを有し、前記第2のスケジュールはオンデマンドスケジュールを有する、付記11に記載の方法。
(付記20)
前記複数のメモリユニットへの書き込み動作と読み出し動作は、ノンブロッキングである、付記11に記載の方法。
(付記21)
イーサネット(登録商標)交換環境、INFINIBAND交換環境、3GIO交換環境、HYPERTRANSPORT交換環境、RAPID IO交換環境、又は、専用のバックプレーン交換環境を含む、高速交換環境でメモリインターリービングするシステムであって、前記システムは単一の集積回路(IC)で具体化され、且つ、
各々が1つのスタティックランダムアクセスメモリ(SRAM)を有する1つのメモリ装置を有する24のメモリユニットを有し、前記SRAM装置は、読み出し動作のための1つのポートと書き込み動作のための1つのポートを有し、
12のポートモジュールを有し、各々は、
通信ネットワークの構成要素から通信されたパケットを受信し、且つ、前記受信されたパケットを24のメモリユニットの1つ又はそれ以上へ書き込み、
通信ネットワークの前記構成要素へ通信するために24のメモリユニットの1つ又はそれ以上からパケットを読み出し、
少なくとも2つの交換段階を有する階層構造を有する多段相互接続ネットワーク(MIN)を有し、前記MINは3つのメモリバンクと複数のポートモジュールを前記3つのメモリバンクへ結合する4つの交換ユニットを有し、前記3つのメモリバンクの各々は、8つの24のメモリユニットと8つのバンク交換ユニットを有し、各ポートモジュールは、書き込み動作のための第1リンクと読み出し動作のための第2リンクにより交換ユニットに結合され、各交換ユニットは、書き込み動作のための第3リンクと読み出し動作のための4つの第4リンクにより各メモリバンクに結合され、前記MINは前記24のメモリユニットを前記12のポートモジュールへ、
前記ポートモジュールの各々が第1のスケジュールに従って、前記メモリユニットの各々へ書き込むように動作し、前記ポートモジュールの各々が第2のスケジュールに従って、前記メモリユニットの各々から読み出すように動作し、前記第1のスケジュールは静的なスケジュールを有し、前記第2のスケジュールはオンデマンドスケジュールを有し、前記第1のスケジュールは、時間の期間をわたり第1の数の書き込み動作を可能とし、前記第2のスケジュールは、前記時間の期間をわたり第2の数の読み出し動作を可能とし、前記第2の数は前記第1の数の2倍又はそれ以上であり、
第2のポートモジュールが通信ネットワークの第2の構成要素から通信されたパケットの第2の部分を受信する前に、第1のポートモジュールは、通信ネットワークの第1の構成要素へ通信するために1つ又はそれ以上のメモリユニットからパケットの第1の部分を読み出すように動作する、ように結合する、システム。
(付記22)
高速交換環境でメモリインターリービングする方法であって、
複数のメモリユニットを複数のポートモジュールへ結合する手段を有し、各々のメモリユニットは1つ又はそれ以上のメモリ装置を有し、各ポートモジュールは、通信ネットワークの構成要素から通信されたパケットを受信し且つ前記受信されたパケットを複数のメモリユニットの1つ又はそれ以上へ書き込み、各メモリユニットは更に通信ネットワークの前記構成要素へ通信するために複数のメモリユニットの1つ又はそれ以上からパケットを読み出し、前記複数のメモリユニットは前記複数のポートモジュールに、
前記ポートモジュールの各々が第1のスケジュールに従って、前記メモリユニットの各々へ書き込むように動作し、前記ポートモジュールの各々が第2のスケジュールに従って、前記メモリユニットの各々から読み出すように動作し、前記第1のスケジュールは、時間の期間をわたり第1の数の書き込み動作を可能とし、前記第2のスケジュールは、前記時間の期間をわたり第2の数の読み出し動作を可能とし、前記第2の数は前記第1の数の2倍又はそれ以上であり、
第2のポートモジュールが通信ネットワークの第2の構成要素から通信されたパケットの第2の部分を受信する前に、第1のポートモジュールは、通信ネットワークの第1の構成要素へ通信するために1つ又はそれ以上のメモリユニットからパケットの第1の部分を読み出すように動作する、ように結合する、方法。
(付記23)
高速交換環境でメモリインターリービングする論理であって、前記論理は媒体で具体化され且つ実行されたときに、
複数のメモリユニットを複数のポートモジュールへ結合し、各々のメモリユニットは1つ又はそれ以上のメモリ装置を有し、各ポートモジュールは、通信ネットワークの構成要素から通信されたパケットを受信し且つ前記受信されたパケットを複数のメモリユニットの1つ又はそれ以上へ書き込み、各メモリユニットは更に通信ネットワークの前記構成要素へ通信するために複数のメモリユニットの1つ又はそれ以上からパケットを読み出し、前記複数のメモリユニットは前記複数のポートモジュールに、
前記ポートモジュールの各々が第1のスケジュールに従って、前記メモリユニットの各々へ書き込むように動作し、前記ポートモジュールの各々が第2のスケジュールに従って、前記メモリユニットの各々から読み出すように動作し、前記第1のスケジュールは、時間の期間をわたり第1の数の書き込み動作を可能とし、前記第2のスケジュールは、前記時間の期間をわたり第2の数の読み出し動作を可能とし、前記第2の数は前記第1の数の2倍又はそれ以上であり、
第2のポートモジュールが通信ネットワークの第2の構成要素から通信されたパケットの第2の部分を受信する前に、第1のポートモジュールは、通信ネットワークの第1の構成要素へ通信するために1つ又はそれ以上のメモリユニットからパケットの第1の部分を読み出すように動作する、ように結合する、論理。