(57)【特許請求の範囲】
【請求項１】
スイッチであって、
複数の入力ポートと、
複数の出力ポートと、
複数の入力ポートと複数の出力ポートとによって共有され、複数の入力ポートのいずれかから受取った入力データストリームを記憶し、複数の出力ポートのいずれかに出力データストリームを与えるメモリと、
複数の出力ポートの１つに対するメモリ読出動作をスケジュールし、並行して複数の入力ポートの１つに対するメモリ書込動作をスケジュールするパケットストレージマネージャとを含み、メモリ読出動作およびメモリ書込動作は単一のポートサイクルでメモリの異なった部分に対してスケジュールされ、
パケットストレージマネージャは、
ポートサイクルに依存して、メモリ読出動作のためのメモリにおける第１の場所に対する読出アドレスを選択する読出アドレス論理を含み、読出アドレス論理は、
複数の出力ポートの各々に対するポート待ち行列を含み、ポート待ち行列は入来パケット内のネットワークデスティネーションに依存して、パケットストレージマネージャによってメモリに書込まれたデータの場所のメモリアドレスを記憶し、読出アドレス論理はさらに、
ポートサイクルに依存して、メモリ読出アドレスを取除くべきポート待ち行列を選択するポート待ち行列選択論理を含み、読出すべきメモリ部分は、選択されたポート待ち行列の先頭から取除かれたメモリ読出アドレスに依存し、パケットストレージマネージャはさらに、
読出アドレス論理によって選択された読出アドレスに依存して、メモリ書込動作のためのメモリにおける第２の場所に対する書込アドレスを選択する書込アドレス論理を含む、スイッチ。
【請求項２】
書込アドレス論理は、
アドレスの空きリストと、
空きリストから書込アドレスを取除くことにより、メモリにおける書込アドレスを与える書込選択論理とを含み、
読出アドレス論理は、書込アドレスをパケットセグメントが方向付けられる各ポート待ち行列の最後に記憶し、
パケットストレージマネージャは、書込アドレスによって指定されるメモリの別の部分にパケットセグメントを書込む、請求項１に記載のスイッチ。
【請求項３】
メモリは物理的に複数のバンクに分けられる、請求項２に記載のスイッチ。
【請求項４】
バンクの数は２個である、請求項３に記載のスイッチ。
【請求項５】
バンクの数は４個である、請求項３に記載のスイッチ。
【請求項６】
書込アドレス論理は各バンクに対する空きリストをさらに含み、書込選択論理は書込アドレスを取除くべき空きリストの１つを選択する、請求項３に記載のスイッチ。
【請求項７】
書込アドレス論理は読出アドレスに依存して、空きリストを選択する、請求項６に記載のスイッチ。
【請求項８】
書込アドレス論理は、データパケットの順次セグメントがメモリの交互の奇数バンクおよび偶数バンクに書込まれるよう、空きリストを選択する、請求項６に記載のスイッチ。
【請求項９】
書込アドレス論理は
複数のバンクの各々に対する空きリストカウンタをさらに含み、空きリストカウンタはバンクにおける利用可能な場所のカウントを記憶し、書込選択論理はこのカウントに依存して空きリストの１つを選択する、請求項６に記載のスイッチ。
【請求項１０】
入力ポートの１つおよび出力ポートの１つは、同じポートであるか、または異なるポートである、請求項１に記載のスイッチ。
【請求項１１】
スイッチであって、
複数の入力ポートと、
複数の出力ポートと、
複数の入力ポートと複数の出力ポートとによって共有され、複数の入力ポートのいずれかから受取った入力データストリームを記憶し、複数の出力ポートのいずれかに出力データストリームを与えるメモリと、
複数の出力ポートの１つに対するメモリ読出動作をスケジュールし、並行して複数の入力ポートの１つに対するメモリ書込動作をスケジュールするための手段とを含み、メモリ読出動作およびメモリ書込動作は単一のポートサイクルでメモリの異なった部分に対してスケジュールされ、
スケジュールするための手段は、
ポートサイクルに依存して、メモリ読出動作のためのメモリにおける読出アドレスを選択するための手段を含み、読出アドレスを選択するための手段は、
複数の出力ポートの各々に対するポート待ち行列を含み、ポート待ち行列は入来パケット内のネットワークデスティネーションに依存して、スケジュールするための手段によってメモリに書込まれたデータの場所のメモリアドレスを記憶し、読出アドレスを選択するための手段はさらに、
ポートサイクルに依存して、読出アドレスを取除くべきポート待ち行列を選択するための手段を含み、読出すべきメモリ部分は、選択されたポート待ち行列の先頭から取除かれた読出アドレスに依存し、スケジュールするための手段はさらに、
読出アドレスを選択するための手段によって選択された読出アドレスに依存して、メモリ書込動作のためのメモリにおける書込アドレスを選択するための手段とを含む、スイッチ。
【請求項１２】
書込アドレスを選択するための手段は、
アドレスの空きリストと、
空きリストから書込アドレスを取除くための手段とを含み、
読出アドレスを選択するための手段は、セグメントが方向付けられている各ポート待ち行列の最後に書込アドレスを記憶し、
取除くための手段は、スケジュールするための手段にパケットを書込むための書込アドレスを与え、スケジュールするための手段は、書込アドレスによって指定されたメモリの
別の部分にセグメントを書込む、請求項１１に記載のスイッチ。
【請求項１３】
メモリは物理的に複数のバンクに分けられている、請求項１２に記載のスイッチ。
【請求項１４】
バンクの数は２個である、請求項１３に記載のスイッチ。
【請求項１５】
バンクの数は４個である、請求項１３に記載のスイッチ。
【請求項１６】
書込アドレスを選択するための手段は各バンクに対する空きリストをさらに含み、取除くための手段は書込アドレスを取除くべき空きリストの１つを選択する、請求項１３に記載のスイッチ。
【請求項１７】
書込アドレスを選択するための手段は、読出アドレスに依存して空きリストを選択する、請求項１６に記載のスイッチ。
【請求項１８】
読出アドレスを選択するための手段は、
複数のバンクの各々に対する空きリストカウンタをさらに含み、空きリストカウンタはバンクにおける利用可能な場所のカウントを記憶し、書込アドレスを選択するための手段は空きリストカウンタにおけるカウントに依存して空きリストの１つを選択する、請求項１７に記載のスイッチ。
【請求項１９】
書込アドレスを選択するための手段は、データパケットの順次セグメントがメモリの交互の奇数バンクおよび偶数バンクに書込まれるよう、空きリストを選択する、請求項１６に記載のスイッチ。
【請求項２０】
入力ポートの１つおよび出力ポートの１つは、同じポートであるか、または異なるポートである、請求項１１に記載のスイッチ。
【請求項２１】
スイッチにおける共通メモリのバンド幅を増大させるための方法であって、
複数の入力ポートのいずれか１つからメモリにおける入力データストリームを受取るステップと、
メモリからの出力データストリームを複数の出力ポートのいずれか１つに与えるステップと、
複数の出力ポートの１つに対するメモリ読出動作をスケジュールし、並行して複数の入力ポートの１つに対するメモリ書込動作をスケジュールするステップとを含み、メモリ読出動作およびメモリ書込動作は単一のポートサイクルでメモリの異なった部分に対してスケジュールされ、メモリ読出動作およびメモリ書込動作をスケジュールするステップは、
ポートサイクルに依存して、メモリ読出動作のためのメモリにおける読出アドレスを選択するステップを含み、読出アドレスを選択するステップは、
複数の出力ポートの各々に対するポート待ち行列におけるメモリに書込まれたデータの場所のメモリアドレスを記憶するステップを含み、ポート待ち行列は入来パケット内のネットワークデスティネーションに依存し、読出アドレスを選択するステップはさらに、
ポートサイクルに依存して、読出アドレスを取除くべきポート待ち行列を選択するステップを含み、読出すべきメモリ部分は、選択されたポート待ち行列の先頭から取除かれた読出アドレスに依存し、メモリ読出動作およびメモリ書込動作をスケジュールするステップはさらに、
読出アドレスを選択するステップによって選択された読出アドレスに依存して、メモリ書込動作のためのメモリにおける書込アドレスを選択するステップと、
メモリ読出動作とメモリ書込動作とを、単一のポートサイクルでメモリの異なる部分にスケジューリングするステップとを含む、方法。
【請求項２２】
書込アドレスを選択するステップは、
アドレスの空きリストを与えるステップと、
空きリストから書込アドレスを取除くステップと、
セグメントが方向付けられている各ポート待ち行列の最後に書込アドレスを記憶するステップと、
書込アドレスによって指定されたメモリの別の部分にパケットセグメントを書込むためのアドレスを与えるステップとを含む、請求項２１に記載の方法。
【請求項２３】
メモリは物理的に複数のバンクに分けられている、請求項２２に記載の方法。
【請求項２４】
バンクの数は２個である、請求項２２に記載の方法。
【請求項２５】
バンクの数は４個である、請求項２２に記載の方法。
【請求項２６】
空きリストは読出アドレスに依存して選択される、請求項２５に記載の方法。
【請求項２７】
書込アドレスを選択するステップは、
複数のバンクの各々に対して、利用可能な場所のカウントを空きリストカウンタに記憶するステップと、
空きリストカウンタにおけるカウントに依存して、空きリストのうちの１つを選択するステップとをさらに含む、請求項２６に記載の方法。
【請求項２８】
データパケットの順次セグメントがメモリの交互の奇数バンクおよび偶数バンクに書込まれるよう、バンク空きリストが選択される、請求項２５に記載のスイッチ。
【請求項２９】
書込アドレスを選択するステップは、
複数のバンクの各々に対する空きリストに利用可能な場所のアドレスを記憶するステップと、
複数の空きリストの１つを選択するステップと、
選択された空きリストから書込アドレスを取除くステップとをさらに含む、請求項２２に記載の方法。
【請求項３０】
入力ポートのうちのいずれか１つおよび出力ポートのうちのいずれか１つは、同じポートであるか、または異なるポートである、請求項２１に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の背景】
ネットワークスイッチは、スイッチに接続されたいくつかの入力ポートからデータパケットを受取り、データパケットをスイッチに接続されたいくつかの出力ポートに与える。スイッチは、データパケットに含まれるデスティネーションアドレスに依存して、データパケットを与えるべき出力ポートを判断する。入力ポートから受取られたデータパケットは、出力ポートに与えられる前にスイッチ内のメモリに記憶される。
【０００２】
スイッチ内のメモリは、すべての入力ポートから受取られたすべてのデータパケットが出力ポートに与えられる前に記憶される共通メモリであり得る。非ブロッキングスイッチは、すべての入力ポートで受取られたすべてのデータが、出力ポートに与えられることを可能にする。非ブロッキングスイッチは、典型的にはポートごとに最大量のメモリを利用可能にするための共通メモリを含む。
【０００３】
共通メモリスイッチの速度は、メモリバンド幅に依存する。メモリバンド幅はメモリアクセスタイムおよびメモリの幅に依存するが、これはすなわち、メモリアクセス時間ごとにアクセスされるバイトの数である。たとえば、もし共通メモリが６４バイト幅であり、かつ８０ナノ秒（ｎｓ）のアクセス時間を有していれば、６４バイトを書込または読出するために８０ｎｓかかる。スイッチに接続される入力ポートが１００メガビット（Ｍ）ｂｐｓ（秒当たりのビット）でデータを受取ると、１ビットは１０ｎｓごとに受取られ、８ビットバイトは８０ｎｓごとに受取られ、かつ６４バイトは５１２０ｎｓごとに受取られる。６４バイトのデータが受取られた後で、書込メモリサイクルが行なわれて６４バイト幅メモリへの単一のアクセスで６４バイトを書込む。入力ポートは、５１２０ｎｓごとにメモリバンド幅を８０ｎｓ使用して、受取ったデータをメモリに書込む。こうして、８０ｎｓのアクセス時間を備えた６４バイト幅メモリは、６４（５１２０ｎｓ／８０ｎｓ）の１００Ｍｂｐｓのポートをサポートできる。６４ポートがスイッチに接続されていると、各ポートサイクルは８０ｎｓである。８０ｎｓポートサイクルは、各ポートに、ポートサイクルごとに１つのメモリアクセスを提供する。
【０００４】
各ポートサイクルで利用可能であるメモリバンド幅を増大させると、以下のうちの１つ以上が必要となる：メモリアクセス時間の減少、メモリの幅（すなわち、メモリサイクルごとに読出／書込されるビット数）の増大、または、ポートの数の減少。メモリの幅の増大は、最小データパケットサイズによって制限される。メモリアクセス時間の減少は、メモリに対する最小メモリアクセス時間によって制限される。
【０００５】
メモリバンド幅は、たとえば第１のデータパケットを第１のメモリバンクに書込み、第２のデータパケットを第２のデータバンクに書込むためのメモリバンクをインターリーブさせることによっても増大させることができる。しかしながら、スイッチ内のデータをインターリーブさせると、たとえばもしポートＡおよびポートＢの両方が同時に第１のメモリバンクへのアクセスを要求している場合、ブロッキングをまねくおそれがある。入力ポートと出力ポートとの間でのデータ転送のブロッキングは、パケットの脱落をもたらすおそれがある。よって、非ブロッキングスイッチにおいては、メモリバンド幅を増大させるために用いることはできない。
【０００６】
【発明の要約】
スイッチにおけるパケットストレージマネージャは、スイッチに接続される入力ポートおよび出力ポートによって共有されるメモリのメモリバンド幅を増大させる。パケットストレージマネージャは、先行技術のシステムが逐次的な読出および書込サイクルを必要としたところを、単一のポートサイクルで、入力ポートのうちの１つに対する書込動作および出力ポートのうちの１つに対する読出動作の両方を行なう。書込および読出動作は、単一のメモリアクセスサイクルにおいて、メモリ内の異なったメモリに対して並行に行なわれる。メモリは、物理的にいくつかのバンクに分割される。バンクの数は、好ましくは２つまたは４つである。読出および書込動作は異なったバンクに対して行なわれる。
【０００７】
パケットストレージマネージャは、ポートサイクルに依存して読出動作のためにメモリにおける読出アドレスを選択する読出アドレス論理と、読出アドレス論理によって選択された読出アドレスに依存して、書込動作のための書込アドレスを選択する書込アドレス論理とを含む。書込アドレスは、読出アドレスに依存して書込アドレスを選択して、読出および書込動作が単一のメモリアクセスで並行して行なわれるようにする。パケットストレージマネージャは、出力ポートごとのポート待ち行列と、ポート待ち行列には記憶されていないアドレスの空きリストとに依拠する。入来するパケットから、マネージャはネットワークデスティネーションを読出し、パケットが記憶されるべき適切な出力ポートを判断する。マネージャは、空きリストからメモリセグメントアドレスを除去することによりパケットセグメントをメモリに書込み、パケットが向けられるべき各ポート待ち行列の最後にセグメントアドレスを記憶し、セグメントアドレスによって特定されるメモリ内の場所にパケットセグメントを書込む。同時に、各ポート待ち行列の先頭でのアドレスは、マネージャによって読出されるべきパケットセグメントを識別する。
【０００８】
パケットストレージマネージャ内の読出アドレス論理は、各出力ポートに対するポート待ち行列を含む。ポート待ち行列は、各入力ポートによってメモリに書込まれるデータのメモリ場所を記憶する。ポート待ち行列選択論理は、ポートサイクルに依存して、メモリアドレスが除去されるべきポート待ち行列を選択する。読出選択論理は、ポート待ち行列から除去されたメモリアドレスに依存して、読出されるべきメモリ場所を選択する。
【０００９】
メモリは物理的にいくつかのバンクに分割される。バンクの数は好ましくは２つまたは４つである。パケットストレージマネージャ内の書込アドレス論理は、バンクごとのバンク空きリストを含む。各バンク空きリストは、メモリのバンク内の利用可能な場所のアドレスを記憶する。書込アドレス論理内の書込選択論理は、書込アドレスを除去すべきバンク空きリストのうちの１つを選択する。書込選択論理は、バンク空きリストを選択して、それによりデータパケットの順次的セグメントが、メモリの交互の奇数および偶数バンクに書込まれるようにする。
【００１０】
書込アドレス論理はまた、バンクごとのバンク空きリストカウンタを含む。バンク空きリストカウンタは、バンク内の利用可能な場所のカウントを記憶する。書込選択論理は、バンク空きリストカウンタにおけるカウントに依存して、バンク空きリストを選択し得る。並行的な読出および書込動作は、同じポートに対するものであっても、または異なったポートに対するものであってもよい。
【００１１】
上述の目的ならびに他の目的、およびこの発明の特徴ならびに利点は、添付の図面に示されるこの発明の好ましい実施例のより特定的な説明から明らかとなるであろうが、図面においては同様の要素には同様の参照符号が異なる図面を通して付与される。図面は必ずしも実物と同じスケールである必要はなく、この発明の原理を例示することが重視される。
【００１２】
【発明の説明】
図１Ａは、共通メモリスイッチ１００のブロック図である。入力ポート１０２で受取られたすべてのデータは、セグメントバッファメモリ１０８に記憶されて、その後１つ以上の出力ポート１１２にスイッチされる。パケットストレージマネージャ１０６は、セグメントバッファメモリ１０８に対する書込および読出アクセスを制御する。パケットストレージマネージャ１０６を介して、入力ポート１０２に到着するデータパケットセグメントはセグメントバッファメモリ１０８に書込まれ、同じメモリアクセスサイクルにおいて、出力ポート１１２に対する別のデータパケットセグメントがセグメントバッファメモリ１０８から読出される。
【００１３】
スイッチ１００は、入力ポートエンジン１０４および出力ポートエンジン１１０を含む。データパケットは入力ポート１０２で順次的に受取られる。入力エンジン１０４は、受取ったデータパケット内のヘッダを検出して処理し、検出したヘッダからどの出力ポート１１２にデータパケットを転送するべきかを判断し、データパケットに対する転送ベクトル１１４を生成する。転送ベクトル１１４はビットマップであり、１つのビットが複数の出力ポート１１２の各々に対応し、データパケットがその出力ポート１１２に転送されるべきどうかを示す。転送ベクトル１１４は、パケットストレージマネージャ１０６に転送される。
【００１４】
パケットストレージマネージャ１０６は、セグメントバッファメモリ１０８へのアクセスを提供する。パケットストレージマネージャ１０６は、セグメントバッファ１０８への読出および書込動作に対するセグメントバッファメモリアドレス１２２を提供し、マネージャ１０６内に記憶された各データパケットのセグメントバッファメモリ１０８における場所を記憶する。出力エンジン１１０は、選択制御信号１２０を介して、データパケットを転送するべき複数の出力ポート１１２のうちの１つを選択し、選択された出力ポート１１２に記憶されたデータパケットを与える。
【００１５】
セグメントバッファメモリ１０８は、すべての入力ポート１０２および出力ポート１１２によって共有される共通メモリである。スイッチ１００は非ブロッキング、すなわち、入力ポート１０２のいずれかに到着するデータパケットが出力ポート１１２のいずれかに転送されることをブロックされないものである。スイッチ１００は、入力ポート１０２で受取られたデータパケットの入力ポートエンジン１０４による並行処理を提供し、かつ出力ポートエンジン１１０による出力ポート１１２に対する記憶されたデータパケットの処理を提供する。
【００１６】
データパケットは入力ポート１０２のうちの１つで順次的に受取られるにつれて、シリアルデータはデータセグメントにグループ化される。データセグメントはバッファセグメントメモリ１０８に書込まれる。データセグメントの幅は、入力ポート１０２および出力ポート１１２によって用いられるネットワーキングプロトコルに依存して、予め定められる。たとえば、イーサネット（Ｒ）ネットワーキングプロトコルに対しては、データセグメントの幅は６４バイトであるが、これはイーサネット（Ｒ）データパケットに対する最小データパケットサイズが６４バイトであるためである。
【００１７】
図１Ｂは、入力ポート１０２で受取られる先行技術のイーサネット（Ｒ）データパケット１２０を示すブロック図である。イーサネット（Ｒ）データパケットは、ヘッダ１２２、データフィールド１３４、およびフレームチェックシーケンス１３２を含む。ヘッダ１２２は、デスティネーションアドレス１２４、ソースアドレス１２６、および長さまたはタイプフィールド１３０を含む。データパケット１２０のサイズは、データフィールド１３４のサイズに依存し、これは６４バイトから１５００バイトにわたり得る。
【００１８】
図２は、スイッチ１００におけるセグメントバッファメモリ１０８による入力ポート１０８で受取られたデータの出力ポート１１２へのスイッチングを示すタイミング図である。タイミング図は、３ポートスイッチ（Ｎ＝２）に対する図１Ａにおけるブロック図に関連して説明され、すなわち、３つの入力ポート１０２および３つの出力ポート１１２が示される。
【００１９】
時間２００から時間２０２の間で、データセグメントは３つの入力ポート１０２の各々において順次的に受取られる。時間２００および時間２０２の間のデータセグメントタイムスロット２０４は、入力ポート１０２でデータセグメントを受取るためにとられる時間である。データセグメントが受取られる間に、入力ポートエンジン１０４はデータパケットのヘッダ内のデスティネーションアドレス１２４から、どの出力ポート１１２にデータセグメントを転送するべきを判断する。時間２０２において、すべてのデータセグメントが受取られており、パケットストレージマネージャ１０６によってセグメントバッファメモリ１０８に書込まれることができる。パケットストレージマネージャ１０６は、時間２０６の前にすべての受取ったデータセグメントをセグメントバッファメモリ１０８に書込むが、このときに次のデータセグメントが受取られる。
【００２０】
データセグメントタイムスロット２０４はポートサイクルタイムスロット２０８に分割され、データセグメントタイムスロット２０４ごとの１つのポートサイクルタイムスロット２０８が、スイッチ１００に接続される各ポートに割当てられる。ポートサイクル時間２０８はメモリアクセスサイクルであり、すなわち、セグメントバッファメモリ１０８にアクセスするためのポートごとに提供される時間である。時間２１０で、パケットストレージマネージャ１０６は、入力ポート０  １０２において受取られたデータセグメントを、セグメントバッファメモリ１０８に書込む。時間２１２から時間２１４においては、パケットストレージマネージャ１０６は入力ポート１  １０２で受取られたデータセグメントをセグメントバッファメモリ１０８に書込む。時間２１４において、入力ポート０で受取られたデータセグメントはメモリにおいて利用可能であり、出力ポートエンジンによって読出されて出力ポート１に転送されることができる。時間２１４では、パケットストレージマネージャ１０６は入力ポート２  １０２で受取られたデータをセグメントバッファメモリ１０８に書込む。時間２１６において、入力ポート１で受取られたデータセグメントはメモリにおいて利用可能であり、出力ポートエンジンによって読出されて出力ポート２に転送されることができる。時間２１６では、パケットストレージマネージャ１０６が入力ポート０  １０２で受取られた次のデータセグメントをセグメントバッファメモリ１０８に書込む。時間２１８においては、入力ポート２で受取られたデータセグメントがバッファセグメントメモリ１０８において利用可能であり、出力ポートエンジン１１０によって読出されて出力ポート０  １１２に転送されることができる。
【００２１】
こうして、データセグメントは入力ポート１０２で受取られると、パケットストレージマネージャ１０６によってセグメントバッファメモリ１０８に書込まれる。データセグメントは、受取られたデータセグメントが書込まれる間に、セグメントバッファメモリ１０８から読出されることができる。入力ポート１０２はセグメントバッファメモリ１０８への書込がブロックされることはなく、出力ポート１１２はセグメントバッファメモリ１０８からの読出をブロックされることがない。
【００２２】
図３は、図１Ａに示されるパケットストレージマネージャ１０６を示すブロック図である。パケットマネージャ１０６は、入力ポートエンジン１０４（図１Ａ）からのセグメントバッファメモリ１０８への書込要求と、出力ポートエンジン１１０（図１Ａ）からのセグメントバッファメモリ１０８からの読出要求とを、並行して扱う。
【００２３】
パケットストレージマネージャ１０６は、読出アドレス論理３００、読出アドレス論理３０２、ポートタイミング論理３０４およびアドレス選択論理３１２を含む。書込アドレス論理３００は、入力ポート１０２（図１Ａ）からのデータセグメントが記憶されるバッファセグメントメモリ１０８内の場所を提供する。読出アドレス論理３００は、出力ポート１１２に対するデータパケットが記憶されているバッファセグメントメモリ１０８内の場所を提供する。
【００２４】
アドレス選択論理３１２は、読出アドレス３１０および書込アドレス３０８をバッファセグメントメモリアドレス１２２に転送する。ポートタイミング論理３０４は、クロック３０６入力に応じてポートサイクル３１４を生成する。ポートタイミング論理３０４は、予め定められた数のクロック周期のポートサイクル時間２０８に対しポートサイクル３１４を生成し、予め定められたデータセグメントサイクル時間２０４ごとに各ポート１０２、１１２に対するポートサイクル３１４を生成する。データセグメントサイクル時間２０４は、入力ポート１０２（図１Ａ）のいずれかで順次的にデータセグメントを受取るための時間に依存する。読出アドレス３１０および書込アドレス３０８は、ポートサイクル３１４に依存してポート１０２、１１２に対して選択される。ポートタイミング論理３０４によって、示されるように同じポートサイクル３１４が、書込アドレス論理３００読出アドレス論理３０２に与えられるか、またはポートタイミング論理３０４によって、異なったポートサイクル３１４が、書込アドレス論理３００および読出アドレス論理３０２に与えられてもよい。
【００２５】
各ポートサイクル３１４の開始時に、読出アドレス論理３０２はポートサイクル３１４に依存して、ポートに対する読出アドレス論理３０２におけるポート待ち行列の先頭での先行して待ち行列に入れられた読出アドレス３１０を選択する。書込アドレス論理３００は、読出アドレス論理３０２によって選択された読出アドレス３１０に依存して、ポートサイクル３１４に対する書込アドレスを選択する。
【００２６】
アドレス選択論理３１２は、セグメントバッファメモリアドレス１２２を介して書込アドレス３０８および読出アドレス３１０をバッファセグメントメモリ１０８に転送する。セグメントバッファメモリ１０８に書込まれるべきデータパケットの書込アドレス３０８は、読出アドレス論理３０２内の待ち行列に入れられる。バッファセグメントメモリ１０８から読出されるべきデータパケットの読出アドレス３０２は、読出アドレス論理３０２内の待ち行列から外される。書込アドレス論理３００および読出アドレス論理３０２は、図５、図６、図１０および図１１により詳細に示される。
【００２７】
図４は、物理的に２つのバンク１０８Ａおよび１０８Ｂに分割された、図１に示されたセグメントバッファメモリ１０８を示すブロック図である。セグメントバッファメモリ１０８の各バンクは関連のメモリアドレスであるアドレス Ａ  ４００およびアドレス Ｂ  ４０２を有する。二バンクアドレス選択論理４０４は、書込アドレス３０８に符号化されたセグメントバッファメモリ１０８のバンクに依存して、書込アドレス３０８をアドレス Ａ  ４００またはアドレス Ｂ  ４０２に転送する。二バンクアドレス選択論理４０４は、読出アドレス３１０に符号化されたバッファセグメントメモリ１０８のバンクに依存して、読出アドレス３１０をアドレス Ａ  ４００またはアドレス Ｂ  ４０２に転送する。たとえば、読出アドレス３１０および書込アドレス３０８の最上位のビット（「ＭＳＢ」）を、セグメントバッファメモリ１０８Ａおよび１０８Ｂのバンクを判断するために用いることができ、書込アドレス３０８および読出アドレス３１０は二バンクアドレス選択論理４０４によって転送される。書込アドレス論理３００（図３）および読出アドレス論理３０４（図３）は、同じポートサイクル３１４（図２）の間に生成された読出アドレス３０８および書込アドレス３１０がセグメントバッファメモリ１０８Ａ、Ｂの異なったバンクに対するものであることを確実にする。セグメントバッファメモリ１０８の一方のバンクに対する読出アクセスは、バッファセグメントメモリ１０８の他のバンクへの書込アクセスと並行して生じる。
【００２８】
図５は、図４に示される２つのバンクのセグメントバッファメモリ１０８に対する図３に示される読出アドレス論理３０２を示すブロック図である。読出アドレス論理３０２は、ポート待ち行列選択論理５１２、ポート待ち行列５１０、および読出アドレス選択論理５０６を含む。ポート待ち行列５１０は、出力ポート１１２に与えられるべきデータパケットのセグメントバッファメモリにおけるアドレス場所を記憶する。出力ポート１１２ごとに別々のポート待ち行列５１０が与えられる。データセグメントがセグメントバッファメモリ１０８に書込まれるにつれて、データセグメントが書込まれた場所である書込アドレス３０８が１つ以上のポート待ち行列５１０に記憶される（または待ち行列に入れられる）。書込アドレス３０８が書込まれるべきポート待ち行列５１０は、ポート待ち行列選択論理５１２によって判断される。ポート待ち行列選択論理５１２は、転送ベクトル１１４に依存してポート待ち行列５１０を選択する。転送ベクトル１１４の生成は、図１Ａを参照して説明した。
【００２９】
ポート待ち行列５１０に記憶された書込アドレス３０８でのデータセグメントが、コピーが送られるべきすべての出力ポートによってセグメントバッファメモリ１０８から読出された後で、記憶された書込アドレス３０８はポート待ち行列５１０から外される。
【００３０】
図６は、図３に示される２つのバンクのセグメントバッファメモリ１０８Ａ、１０８Ｂに対する図２に示される書込アドレス論理３００を示すブロック図である。２つのバンクのセグメントバッファメモリ１０８Ａ、１０８Ｂに対する書込アドレス論理は、二バンク書込選択論理６００、バンク Ａに対する空きリスト６０６、バンク Ｂに対する空きリスト６０８、バンク Ａに対する空きリストに対するカウント６０４、バンク Ｂに対する空きリストに対するカウント６１０、および書込アドレス選択論理６０２を含む。
【００３１】
各空きリスト６０６、６０８は、データセグメントが書込まれるであろうセグメントバッファメモリのそれぞれのバンク１０８Ａ、１０８Ｂにおける利用可能な場所を記憶する。バンク Ａに対する空きリスト６０６は、セグメントバッファメモリ１０８Ａのバンク Ａにおける利用可能な場所を記憶し、バンク Ｂ  １０８Ｂに対する空きリストは、セグメントバッファメモリ１０８Ｂのバンク Ｂにおける利用可能な場所を記憶する。
【００３２】
二バンク書込選択論理６００は、ポートサイクル時間３１４の間に、読出アドレス３１０に依存して書込アドレス３０８が抽出されるべき空きリスト６０６、６０８を判断する。セグメントバッファメモリのバンク１０８Ａ、１０８Ｂは、読出アドレス３１０のＭＳＢ、または読出アドレス３１０の他のビットに依存して選択され得る。たとえば、もし二バンク書込選択論理６００が、読出アドレス３１０から、読出アドレス３１０はセグメントバッファメモリのバンク Ａ１０８Ａに対するものであると判断すると、書込アドレスはバンク Ｂに対する空きリスト６０８から抽出される。もし読出アドレス３１０が、バッファセグメントメモリのバンク Ｂ  １０８Ｂに対するものであれば、書込アドレスはバンク Ａに対する空きリスト６０６から抽出される。こうして、データセグメントがセグメントバッファメモリ１０８の一方のバンクから読出されることができる一方、別のデータセグメントがセグメントバッファメモリ１０８の他方のバンクに書込まれる。
【００３３】
もし二バンク書込選択論理６００が、読出アドレスがバッファセグメントメモリのバンク Ａ  １０８Ａに対するものであると判断すると、これはＥＮＡ Ｂ信号６１８によってバンク Ｂ空きリスト６０８をイネーブルし、それによりバンク Ｂ空きリスト６０８は書込アドレス選択論理６０２にバンク Ｂアドレス６１４を提供することができる。アドレスがバンク Ｂ空きリスト６０８から除去されると、二バンク書込選択論理６００は獲得／更新カウントＢ信号６１６に更新カウント Ｂ信号を生成し、バンク Ｂに対する空きリストカウント６１０をデクリメントする。
【００３４】
データセグメントが、書込アドレス３０８によって特定される場所でセグメントバッファメモリ１０８に書込まれる一方、書込アドレス３０８はそれぞれの空きリスト６０６、６０８から除去され、書込アドレス３０８は転送ベクトル１１４に依存して１つ以上のポート待ち行列３０６の最後に書込まれる。コピーカウント６２６が書込アドレス３０８に対してコピーカウント論理６２４に記憶される。コピーカウントは、マルチキャストパケット、すなわち１つ以上の出力ポート１１２に対して待ち行列に入れられるパケットを追跡するために用いられる。書込アドレス３０８は、読出アドレス３０８によって特定された場所が読出アドレス論理３０２（図３）によってすべて読出され、かつ書込アドレス３０８に関連のコピーカウントが０になった後で、それぞれの空きリスト６０６、６０８に返される。
【００３５】
現在のポートサイクル３１４に対して読出されるべきデータセグメントがなく、書込まれるべきデータセグメントがあれば、二バンク書込選択論理６００は空きリストカウント６０４、６１０に依存して書込アドレス３０８を抽出するべき空きリスト６０６、６０８を決定する。二バンク書込選択論理６００は、獲得／更新カウント Ａ信号６２２および獲得／更新カウント Ｂ信号６１６によって、バンク Ａに対する空きリストカウント６０４およびバンク Ｂに対する空きリストカウント６１０から現在のカウントを獲得する。バンク Ａに対する空きリストカウント６３２およびバンク Ｂに対する空きリストカウント６３０は、二バンク書込アドレス論理６００に転送される。最大のカウントを備えた空きリストカウント６０４、６１０は、セグメントバッファメモリ１０８Ａ、１０８Ｂの最も空いているバンクを示す。二バンク書込アドレス論理６００はカウントを比較して、バンク Ａカウント６３２またはバンク Ｂカウント６３０がより大きいかどうかに依存して、ＥＮＡ Ａ信号６２０またはＥＮＡ Ｂ信号６１８を生成する。最大カウント６０４、６１０を備えた空きリスト６０６、６０８が選択される。書込アドレス３０８は選択された空きリスト６０６、６０８から選択される。こうして、データセグメントがセグメントバッファメモリ１０８に書込まれるにつれて、これらは均等に２つのバンクのセグメントバッファメモリ１０８Ａ、１０８Ｂに分散される。
【００３６】
図７は、図４に示される２つのバンクのセグメントバッファメモリ１０８に対する読出および書込アドレスに対するタイミングを示すタイミング図である。各データセグメントタイムスロット２０４において、スイッチ１００に接続された６４ポートごとにセグメントバッファメモリへの２つのアクセスが提供される。データセグメントタイムスロット２０４は、６４ポートのいずれかでパケットセグメントを受取るための時間である。よって、データセグメント時間２０４は、スイッチ１００に接続されるポートごとの、セグメントバッファメモリ１０８にパケットセグメントを記憶するために利用可能である最大の時間である。
【００３７】
データセグメントタイムスロット２０４は、入力ポート１１２でデータが受取られる速度と、データ送信のために実現されるネットワークプロトコルとに依存する。たとえば、もし用いられるネットワークプロトコルが１００メガヘルツイーサネット（Ｒ）であれば、１ビットは各ポートで１０ｎｓごとに受取られ、１バイトは８０ｎｓごとに受取られ、最小パケットサイズである６４バイトは５１２０ｎｓごとに受取られる。こうして、８０ｎｓのポートサイクル時間で、最小パケットサイズを、スイッチ１００（図１Ａ）に接続される各６４  １００ＭＨｚイーサネット（Ｒ）ポートで５１２０ｎｓごとに記憶することができる。
【００３８】
各ポートは、セグメントバッファメモリ１０８にアクセスするべきポートサイクル時間２０８を割当てられる。データセグメントは、ポートサイクル時間２０８ごとにセグメントバッファメモリ１０８における異なったアドレスに読出および書込を行なうことができる。ポートサイクル時間２０８は、データセグメントタイムスロット２０４およびスイッチ１００に接続されるポートの数に依存する。
【００３９】
時間７００において、データセグメントタイムスロット２０８の開始で、フレームパルスはフレームパルス信号を発生させることにより生成される。フレームパルス信号は、ポートタイミング論理３０４（図３）を初期化するために用い得る。７００で、ポート０に対するポートサイクル２０８が開始する。入力ポート０に対する書込アドレスは、バッファセグメントメモリ１０８Ａに発信され得る一方、出力ポート０に対する読出アドレスはバッファセグメントメモリのＢバンク１０８Ｂに送信され得る。
【００４０】
時間７０２で、ポート１に対するポートサイクル２０８が開始する。入力ポート１に対する読出アドレスは、バッファセグメントメモリ１０８Ａに発信され得る一方、出力ポート１に対する書込アドレスはバッファセグメントメモリのＢバンク１０８Ｂに発信される。
【００４１】
時間７０４で、データセグメントタイムスロット２０４の終了時に、フレームパルス信号を発生させることによりフレームパルスが生成される。ポートサイクルは、データセグメントタイムスロット２０４の間にスイッチに接続される６４ポートごとに生成されている。
【００４２】
図８は、図４に示される２つのバンクのセグメントバッファメモリ１０８Ａ、１０８Ｂに対する読出および書込アドレスを選択するためのパケットストレージマネージャ１０６によって実行されるステップを示すフロー図である。図７に示されるようにポートサイクル２０８ごとに、読出および書込アドレスは同じポートに対するものであり、すなわち、入力ポート１０２および出力ポート１１２は同じポートである。しかしながら、入力ポート１０２および出力ポート１１２は示されるように同じポートである必要はなく、読出アドレスおよび書込アドレスは異なったポートに対するものであってもよい。図８は、図４から図７に関連して説明される。
【００４３】
ステップ８００において、二バンク書込選択論理６００は、出力ポート１１２に対して保留された読出があるかどうかを判断する。もし保留された読出があれば、処理はステップ８０２に進む。もし保留された読出がなければ、処理はステップ８２２に続く。
【００４４】
ステップ８０２において、二バンク書込選択論理６００は、読出アドレスがどちらのセグメントバッファメモリのバンク１０８Ａ、１０８Ｂに発信されるべきかをメモリアクセス論理３１２により判断する。もし読出アドレス３１０がバンク Ａ  １０８Ａに対するものであれば、処理はステップ８１２に進む。もし読出アドレス３１０がバンク Ｂ  １０８Ｂに対するものであれば、処理はステップ８０４に続く。
【００４５】
ステップ８０４において、二バンク書込選択論理６００がポートサイクル３１４に依存して保留された書込があるかどうかを判断する。もしポートに対して保留された書込があれば、処理はステップ８１０に進む。もしなければ、プロセスはステップ８０６に進む。
【００４６】
ステップ８１０において、二バンク書込選択論理６００は、バンク Ａに対する空きリスト６０６から、セグメントバッファメモリのバンク Ａ  １０８Ａ内の利用可能な場所のアドレスを抽出する。バンク Ａに対する空きリスト６０６からのバンク Ａアドレス６１２は、書込アドレス選択論理６０２によって書込アドレス３０８として選択される。バンク Ａに対する空きリストカウント６０４はデクリメントされる。書込アドレス３０８および読出アドレス３１０は、メモリアクセス論理３１２によってセグメントバッファメモリのそれぞれのバンク１０８Ａ、１０８Ｂに転送される。プロセスはステップ８０８に進む。
【００４７】
ステップ８０６において、読出アドレスがメモリアクセス論理３１２によってセグメントバッファメモリのバンク Ｂ  １０８Ｂに転送される。処理はステップ８０８に進む。
【００４８】
ステップ８０８において、読出動作が完了した後で、コピーカウント論理６２４によって読出アドレスに対するコピーカウント６２６がデクリメントされる。読出アドレス３１０はバンク Ｂに対する空きリスト６０８に返され、コピーカウント６２６が０であればバンク Ｂに対する空きリストカウント６１０がインクリメントされる。処理はステップ８２０に進む。
【００４９】
ステップ８２２において、書込選択論理６００はポートに対して保留された書込があるかどうかを判断する。もしそのポートに対して書込が保留されていれば、処理はステップ８２４に続く。そうでなければ、処理はステップ８２０に続く。
【００５０】
ステップ８２４において、書込選択論理６００はセグメントバッファメモリのどちらのバンク１０８Ａ、１０８Ｂが最も空いているかを、バンク Ａに対する空きリストカウント６０４に記憶されているカウントおよびバンク Ｂに対する空きリストカウント６１０に記憶されているカウントから判断する。書込選択論理がセグメントバッファメモリのバンク Ａ  １０８Ａが最も空いていると判断すると、処理はステップ８２８に続く。二バンク書込選択論理６００がセグメントバッファメモリのバンク Ｂ  １０８Ｂが最も空いていると判断すると、処理はステップ８３０に続く。
【００５１】
ステップ８２８において、書込選択論理６００は、バンク Ａに対する空きリスト６０６からセグメントバッファメモリのバンク Ａ  １０８Ａにおける利用可能な場所のアドレスを除去する。バンク Ａに対する空きリスト６０６からのバンク Ａアドレス６１２は、書込アドレス選択論理６０２によって書込アドレス３０８として選択される。バンク Ａアドレス６１２がバンク Ａに対する空きリスト６０６から除去されると、バンク Ａに対する空きリストカウント６０４がデクリメントされる。書込アドレス３０８は、メモリアクセス論理３１２（図３）によってバッファセグメントメモリのバンク Ａ  １０８Ａに転送される。
【００５２】
ステップ８３０において、書込選択論理６００は、バンク Ｂに対する空きリスト６０８から、セグメントバッファメモリのバンク Ｂ  １０８Ｂの利用可能な場所のアドレスを除去する。バンク Ｂに対する空きリスト６０８からのバンク Ｂアドレス６１４は、書込アドレス選択論理６０２によって書込アドレス３０８として選択される。バンク Ｂに対する空きリスト６０８からバンク Ｂアドレス６１４が除去されると、バンク Ｂに対する空きリストカウント６１０はデクリメントされる。書込アドレス３０８は、アドレス選択論理３１２（図３）によってバッファセグメントメモリのバンク Ｂ  １０８Ｂに転送される。
【００５３】
ステップ８１２において、書込論理６００は、ポートに対して保留された書込動作があるかどうかを判断する。もし保留された書込があれば、処理はステップ８１６に進む。なければ、処理はステップ８１４に進む。
【００５４】
ステップ８１６において、書込選択論理６００は、バンク Ｂに対する空きリスト６０８から、セグメントバッファメモリのバンクＢ  １０８Ｂの利用可能な場所のアドレスを除去する。バンク Ｂに対する空きリスト６０８からのバンク Ｂアドレス６１４は、書込アドレス選択論理６０２によって書込アドレス３０８として選択される。バンク Ｂに対する空きリスト６０８からバンク Ｂアドレス６１４が除去されると、バンク Ｂに対する空きリストカウント６１０がデクリメントされる。書込アドレス３０８および読出アドレス３１０は、メモリアクセス論理３１２（図３）によってバッファセグメントメモリのそれぞれのバンク１０８Ａ、１０８Ｂに転送される。処理はステップ８１８に進む。
【００５５】
ステップ８１４において、読出アドレス３１０は、アドレス選択論理３１２（図３）によってセグメントバッファメモリのバンク Ａ  １０８Ａに転送される。処理はステップ８１８に続く。
【００５６】
ステップ８１８では、読出動作が終了すると、読出アドレスのコピーカウントはコピーカウント論理６２４によって減分される。読出アドレス３１０はバンク＿Ａに対する空きリスト６０６に返され、バンク＿Ａの空きリストカウント６０４はコピーカウントがゼロであるのなら増分される。処理はステップ８２０に続く。
【００５７】
ステップ８２０では、ポートタイミング論理３０４（図２）は次のポートサイクル３１４に増分される。処理は次のポートサイクルに対してステップ８００で続く。
【００５８】
図９は図１Ａに示されるセグメントバッファメモリを示すブロック図であり、セグメントバッファメモリは物理的に４個のバンク、すなわちセグメントバッファメモリ（バンク＿Ａ（偶数））（Ａｅ）１０８Ａｅ、セグメントバッファメモリ（バンク＿Ａ（奇数））（Ａｏ）１０８Ａｏ、セグメントバッファメモリ（バンクＢ（偶数））（Ｂｅ）１０８Ｂｅ、およびセグメントバッファメモリ（バンクＢ（奇数））（Ｂｏ）１０８Ｂｏに分けられる。メモリアドレスの２つのＭＳＢに依存して、たとえばＡまたはＢのバンクを選択するＭＳＢビットおよび奇数または偶数バンクを選択するＭＳＢ−１メモリアドレスに依存して、メモリは物理的に４個のバンクに分けられる。
【００５９】
セグメントバッファメモリ１０８の各バンクは関連するメモリアドレス、すなわちアドレス＿Ａｅ  ９００、アドレス＿Ａｏ  ９０２、アドレス＿Ｂｅ  ９０４、およびアドレス＿Ｂｏ  ９０６を有する。メモリアクセス論理１２は、書込アドレス３０８に符号化されるセグメントバッファメモリ１０８のバンクおよびポートサイクルに依存して、書込アドレス３０８をアドレス＿Ａｅ  ９００、アドレス＿Ａｏ  ９０２、アドレス＿Ｂｅ  ９０４またはアドレス＿Ｂｏ  ９０６に送る。メモリアドレス論理３１２は、読出アドレス３１０に符号化されるセグメントバッファメモリ１０８のバンクおよびポートサイクルに依存して、読出アドレス３１０をアドレス＿Ａｅ  ９００、アドレス＿Ａｏ  ９０２、アドレス＿Ｂｅ  ９０４またはアドレス＿Ｂｏ  ９０６に送る。
【００６０】
データセグメント時間当り各ポートに与えられるメモリバンド幅は、各データセグメント時間において各ポートに対して２つのポートサイクル３１４、すなわち偶数ポートサイクルおよび奇数ポートサイクルを実施することにより、２倍に増加する。偶数バンク１０８Ａｅおよび１０８Ｂｅは偶数サイクルでアクセスされ、奇数バンク１０８Ａｏおよび１０８Ｂｏは奇数サイクルでアクセスされる。書込アドレス論理３００（図２）および読出アドレス論理３０４（図２）は、各ポートサイクルで発行された読出アドレス３０８および書込アドレス３１０がバッファセグメントメモリ１０８Ａｅ、１０８Ａｏ、１０８Ｂｅ、および１０８Ｂｏの異なるバンク用であることを確実にする。したがって、偶数サイクルの際、バンク＿Ａｅ  １０８Ａｅへの読出アクセスは、バンクＢｅ  １０８Ｂへの書込アクセスと並行に起こる。
【００６１】
データセグメント時間ごとに、各ポートに対して２つのポートサイクルを与え、かつ各ポートサイクルに並行な読出および書込アクセスを与えることにより、セグメントバッファメモリ１０８のバンド幅は、スイッチ１００に接続される各ポートに対して４倍になる。したがって、各データセグメント時間において、各ポートに対して４回セグメントバッファメモリ１０８をアクセスすることができる。メモリアクセスは対で与えられ、１つの偶数バンクの読出動作がほかの偶数バンクへの書込動作と並行に行なわれる。
【００６２】
図１０は図９に示される四バンクセグメントバッファメモリ１０８に対する、図３に示される読出アドレス論理３０２を示すブロック図である。読出アクセス論理３０２（図３）は偶数／奇数ポート待ち行列選択論理１０００、各出力ポート１１２に対するポート待ち行列５１０、および偶数／奇数読出アドレス選択論理１００４を含む。四バンクセグメントバッファメモリ１０８に対して、ポートタイミング論理３０４（図３）は所定の数のクロック周期に偶数ポートサイクル１０６および奇数ポートサイクル１０８をそれぞれ生成し、各データセグメントタイムスロット２０４（図２）において偶数／奇数信号１０１０を生成する。偶数ポートサイクル１００６および奇数ポートサイクル１００８のタイミング図の例は図１０と関連して説明される。
【００６３】
ポート待ち行列５１０は既に図５と関連して記載されている。偶数／奇数ポート待ち行列選択論理１０００は、奇数ポートサイクル１００６および偶数ポートサイクル１００８の状態ならびにポートタイミング論理３０４（図３）からの偶数／奇数信号１０１０に依存して、読出すべきポート待ち行列５１０を選択する。ポートに対して奇数ポートサイクル１００６または偶数ポートサイクル１００８のどちらかが活性状態の場合、ポートに対して読出すべき次のデータセグメントの場所５０４はポート待ち行列５１０から選択され、偶数／奇数読出アドレス選択論理１００４に送られる。
【００６４】
偶数／奇数読出アドレス場所選択論理１００４は偶数ポートサイクル１００６および奇数ポートサイクル１００８の状態に依存して、ポート待ち行列５１０によって与えられるアドレス５０４を送る。場所５０４が奇数であり、かつ奇数ポートサイクル１００８が活性状態にある場合、場所５０４は偶数／奇数読出アドレス選択論理１００４に送られる。場所５０４が奇数でありかつ偶数ポートサイクル１００６が活性状態にある場合、場所５０４は偶数／奇数読出アドレス選択論理１００４に送られないが、場所５０４が偶数であるのなら場所５０４は送られる。したがって、データセグメント時間において、データセグメントがセグメントバッファメモリ１０８の奇数および偶数バンクに記憶されているのなら、ポートはセグメントバッファメモリ１０８からデータセグメントの２つの場所を読出し得る。
【００６５】
図１１は、図９に示される四バンクセグメントバッファメモリ１０８のための、図２に示される書込アドレス論理を示すブロック図である。四バンク書込選択論理１１００はセグメントバッファメモリ１０８Ａｏ、１０８Ａｅ、１０８Ｂｏおよび１０８Ｂｅの４つのバンクの１つに対する書込アドレス３０８を選択する。バッファセグメントメモリ１０８Ａｏ、１０８Ａｅ、１０８Ｂｏおよび１０８Ｂｅの各バンクは、関連する空きリスト１１１２、１１１４、１１１６および１１１８ならびに空きリストカウント１１０２、１１０４、１１０６および１１０８を有する。
【００６６】
四バンク書込選択論理１１００は、読出アドレス３１０および偶数／奇数信号９１０に依存して、書込アドレスを抽出するべき空きリスト１１１２、１１１４、１１１６および１１１８を定める。四バンク書込選択論理１１００は、偶数／奇数信号９１０からメモリアクセスが偶数サイクル用でありかつ読出アドレス３１０はバッファセグメントメモリ１０８ＡｅのＡｅバンク用であると定めたなら、書込アドレスはＢｅバンクの空きリスト１１０６から抽出される。四バンク書込選択論理１１００は、偶数／奇数信号９１０からメモリアクセスは偶数サイクル用であり、かつ読出アドレス３１０はバッファセグメントメモリ３０８ＢｅのＢｅバンク用であると定めたなら、書込アドレスはＡｅバンクの空きリスト１１１２から抽出される。
【００６７】
四バンク書込選択論理１１００は読出アドレスがバッファセグメントメモリ１０８ＡｅのＡｅバンク用であると定めるのなら、ＥＮＡ＿３信号１１３４を通してＢｅバンクの空きリスト１１１６を能動化し、それによりＢｅバンクの空きリスト１１１６は四バンク書込アドレス選択論理１１２０に対してＢｅバンクアドレス１１２６を与えることができる。Ｂｅバンク用の空きリストからアドレスが取除かれると、四バンク書込選択論理１１００は獲得／更新カウントＢｅ信号１１４０に更新カウントＢｅ信号を生成して、バンク＿Ｂｅの空きリストカウント１１４０を減分することにより、Ｂｅバンクの空きリスト１１１６を更新する。
【００６８】
有効な読出アドレスがない場合、四バンク書込選択論理１１００は空きリストカウント１１０２、１１０４、１１０６、および１１０８に依存して、書込アドレス３０８を抽出するべき空きリスト１１１２、１１１４、１１１６および１１１８を定める。最も大きい値を有する空きリストカウント１１０２、１１０４、１１０６および１１０８は、最大の利用可能な場所を有するセグメントバッファメモリ１０８Ａｅ、１０８Ａｏ、１０８Ｂｅ、１０８Ｂｏのバンクを示す。空きリストカウント１１０２、１１０４、１１０６および１１０８における最大の利用可能な場所に関連する空きリスト１１１２、１１１４、１１１６および１１１８は選択されて、書込まれるべきセグメントバッファメモリ１０８の次の場所を与える。こうして、データが書込まれる際に、バッファセグメントメモリ１０８Ａｅ、１０８Ａｏ、１０８Ｂｏおよび１０８Ｂｅのバンク間で均等に配分される。
【００６９】
たとえば、偶数のポートサイクルに対して読出アドレス３１０がなければ、四バンク書込選択論理１１００は獲得／更新カウントＡｅ信号１１４４および獲得／更新カウントＢｅ１１４０信号を通して、Ａｅバンク用の空きリストカウント１１０２およびＢｅバンク用の空きリストカウント１１０６から現行のカウントを得る。バンク＿Ａｅ用の空きリストカウント１１０２およびバンク＿Ｂｅ用の空きリストカウント１１０６は四バンク書込アドレス論理１１００に送られる。四バンク書込アドレス論理１０００はカウント値を比較し、バンク＿Ａｅのカウント１１０２およびバンク＿Ｂｅのカウント１１０６のどちらが大きいかに依存して、ＥＮＡ＿１信号１１３０またはＥＮＡ＿３信号１１３４を生成する。
【００７０】
空きリスト書込アドレス１１２２、１１２４、１１２６および１１２８のうち１つが選択されると、書込アドレス３０８は四バンク書込アドレス選択論理１１２０によってセグメントバッファメモリ１０８に送られる。コピーカウント６２６は書込アドレス３０８用のコピーカウント論理６２４に記憶される。コピーカウント６２６はマルチキャストパケットを管理するために用いられる、すなわちパケットが２つ以上の出力ポート１１２に対して待ち行列に入れられる。
【００７１】
図１２は図９に示される四バンクセグメントバッファメモリ１０８の読出および書込アドレスのタイミングを示すタイミング図である。各データセグメントタイムスロット２０４において、スイッチ１００に接続される６４個のポートの各々に対して、セグメントバッファメモリへのアクセスが４回与えられる。データセグメントタイムスロット２０４は６４個のポートのうちのいずれかのポートでデータセグメントを受取る時間である。したがって、データセグメント時間２０４は、スイッチ１００に接続される各ポートに対して、セグメントバッファメモリ１０８にデータセグメントを記憶するのに利用できる最長の時間である。
【００７２】
各ポートは、セグメントバッファメモリ１０８をアクセスするべきポートサイクル時間２０８が割当てられている。データセグメントはポートサイクル時間２０８の間に、ポート用のデータセグメントメモリのバンクに対して読出または書込される。ポートサイクル時間２０８はデータセグメントタイムスロット２０４およびスイッチ１００に接続されるポートの数に依存する。セグメントバッファメモリ１０８（図１Ａ）のアクセス時間はポートサイクル時間２０８に依存する。
【００７３】
１２０４において、各データセグメントタイムスロット２０４が開始されるとき、フレームパルス信号をパルス化することによりフレームパルスが生成される。フレームパルス信号はポートタイミング論理３０４（図３）を初期化するために用いることができる。１２０６において、ポート０用の偶数サイクルが開始される。ポート０用の書込アドレスはバッファセグメントメモリ１０８ＡｅのＡｅバンクに送られ、ポート０の読出アドレスはバッファセグメントメモリ１０８ＢｅのＢｅバンクに送られる。時間１２１４において、ポート３２の奇数サイクルが開始され、ポート３２の書込アドレスはバッファセグメントメモリ１０８ＢｏのＡｏバンクに送られ、ポート３２の読出アドレスはバッファセグメントメモリ１０８ＢｏのＢｏバンクに送られる。ポート３２の奇数サイクルの開始１２１４は、ポート０の偶数サイクルの開始１２０６後、ポートサイクル時間２０８の半分の時間から始まる。この偶数サイクルの開始および奇数サイクルの開始間の遅れにより、奇数サイクルおよび偶数サイクルにおいてバッファセグメントメモリ１０８に共通論理を使用することができる。共通論理が用いられないのなら、奇数サイクルの開始および偶数サイクルの開始は同じ時間にスケジュールされ得る。
【００７４】
１２１８において、ポート０の奇数サイクルの開始は、データセグメントタイムスロット２０４の半分の時間に、ポート０の偶数サイクルの開始からポートタイムスロット２０８の半分の時間を加えた時間としてスケジュールされる。この時間は図１２における遅延時間１２２０である。たとえば、データセグメントタイムスロット２０４が５１２０ｎｓ（６４バイト、バイト当り８ビット、バイト当り１０ｎｓ）であり、ポート０の偶数ポートサイクルの開始１２０６が０で始まるのなら、ポート０の奇数ポートサイクルの開始は、ポート０の偶数ポートサイクルの開始１２０６から２２００ｎｓ（５１２０／２＋４０）にスケジュールされる。
【００７５】
データセグメントタイムスロット２０４において、スイッチ１００はデータセグメントサイズの倍数でないバイトカウントのデータパケットを受取ることができる。これらのデータパケットは最小のデータパケットとして受取られる時間とほぼ同じ時間をとる。たとえば、データセグメントタイムスロット２０４内で入力ポート０で受取られた６５バイトのデータパケットを記憶するのに、ポート０の偶数サイクルの間最初の６４バイトがセグメントバッファメモリ１０８に書込まれ、最後のバイトはポート０の奇数サイクルの際にセグメントバッファメモリ１０８に書込まれる。
【００７６】
スイッチ１００は１データセグメントより大きいデータパケットを受取ることができる。同じデータパケットのデータを受けながら、四バンク書込選択論理１１００はパケット信号１１３８を通して、同じパケットの順次データセグメント用の書込アドレス２０８が交互の偶数および奇数空きリストから選択されることを確実にする。たとえば、最初のセグメントが偶数バンク＿Ｂの空きリスト１１１６から選択された書込アドレス３０８に書込まれるのなら、次の順次セグメントはバンク＿Ａ  １０８Ａｏまたはバンク＿Ｂ  １０８Ｂｏからの読出があるかどうかに依存して、奇数バンク＿Ｂの空きリスト１１０８または奇数バンク＿Ａの空きリスト１１１４から選択された書込アドレス３０８に書込まれる。
【００７７】
図１３は図９に示される四バンクセグメントバッファメモリの偶数バンク用の読出および書込アドレスを選択するステップを示すフロー図である。
【００７８】
図１３は図９に示される四バンクセグメントバッファメモリの偶数バンク用の読出および書込アドレスを選択するステップを示すフロー図である。
セグメントバッファメモリ１０８Ａｅおよび１０８Ｂｅの偶数バンクは偶数ポートタイムスロットで選択される。同じステップは奇数ポートタイムスロットにおいてセグメントバッファメモリ１０８Ａｏおよび１０８Ａｅの奇数バンク用に読出および書込アドレスを選択するために行なわれる。図１２に示されるように、偶数ポートタイムスロットの際の読出および書込動作は同じポートに対して発行される、すなわち入力ポート１０２および出力ポート１１２は同じポートである。入力ポート１０２および出力ポート１１２は示されているように同じポートである必要はなく、読出動作および書込動作は並行に異なるポートに対して発行され得る。図１３は図９−図１２に関連して記載される。
【００７９】
ステップ１３００において、４四バンク書込選択論理１１００は出力ポート１１２用の保留読出を示す、読出選択論理１００４からの有効な読出アドレス３１０があるかどうかを定める。保留の読出があるのなら、処理はステップ１３０４で続けられる。なければ、処理はステップ１３２８に続く。
【００８０】
ステップ１３０４において、四バンク読出選択論理１００４はメモリアクセス論理３１２によって読出アドレスがセグメントバッファメモリ１０８Ａｅおよび１０８Ｂｅのどの偶数バンクに発行されるのかを定める。読出アドレス３１０が偶数バンク＿Ａ  １０８Ａｅ用であるのなら、処理はステップ１０８に進む。読出アドレス３１０が偶数バンク＿Ｂ  １０８Ｂｅ用であるのなら、処理はステップ１３０６に進む。
【００８１】
ステップ１３０８において、四バンク書込選択論理１１００は入力ポート１０２に対して保留の書込があるかどうかを定める。入力ポートに対して保留書込があるのなら、処理はステップ１３２０に進む。なければ、処理はステップ１３１８に進む。
【００８２】
ステップ１３２０において、四バンク書込選択論理１１００はＥＮＡ＿３信号１１３４を通して偶数バンク＿Ｂの空きリスト１１１６からセグメントバッファメモリ１０８Ｂｅの偶数バンク＿Ｂに対する利用可能なアドレスを抽出する。バンク＿Ｂの偶数バンク＿Ｂ空きリスト１１１６からの偶数バンク＿Ｂアドレス１１２６は四バンク書込アドレス選択論理１１２０によって書込アドレス３０８として選択される。偶数バンク＿Ｂ空きリストカウント１１０６は獲得／更新カウントＢｅ信号１１４０によって減分される。書込アドレス３０８および読出アドレス３１０は四バンク読出／書込アドレス選択論理９０８（図９）を通してセグメントバッファメモリ１０８Ａｅおよび１０８Ｂｅのそれぞれの偶数バンクに送られる。処理はステップ１３２４に進む。
【００８３】
ステップ１３１８において、読出アドレス３１０は四バンク読出／書込アドレス選択論理９０８によって、セグメントバッファメモリ１０８Ａｅの偶数バンク＿Ａに送られる。処理はステップ１３２４に進む。
【００８４】
ステップ１３２４において、読出動作が終了すると、読出アドレス３１０は偶数バンク＿Ａの空きリスト１１１２に返され、コピーカウント６２６（図６）がゼロであれば偶数バンク＿Ａの空きリストカウント１１０２は増分される。処理はステップ１３２６に進む。
【００８５】
ステップ１３２８において、四バンク書込選択論理１１００はポートに対して書込の保留があるかどうか定める。ポートに対して書込保留があるのなら、処理はステップ１３３０に進む。なければ、処理はステップ１３２６に進む。
【００８６】
ステップ１３３０において、四バンク書込選択論理１１００は、偶数バンク＿Ａの空きリストカウント１１０２に記憶されるカウントおよび偶数バンク＿Ｂの空きリストカウント１１０６に記憶されるカウントから、バッファセグメントメモリ１０８Ａｅおよび１０８Ｂｅのどの偶数バンクが最も空いているかを定める。書込選択論理はセグメントバッファメモリ１０８Ａｅの偶数バンク＿Ａが最も空いていることを定めると、処理はステップ１３３４に進む。四バンク書込選択論理１１００はセグメントメモリ１０８Ｂｅの偶数バンク＿Ｂが最も空いていると定めると、処理はステップ１３３６に続く。
【００８７】
ステップ１３３４において、四バンク書込選択論理１１００は偶数バンク＿Ａの空きリスト１１１２から、セグメントバッファメモリ１０８Ａｅの偶数バンク＿Ａの利用可能な場所のアドレスを取除く。偶数バンク＿Ａの空きリスト１１１２からのバンク＿Ａアドレス１１２２が、四バンク書込アドレス選択論理１１２０によって書込アドレス３０８として選択される。偶数バンク＿Ａアドレス１１２２が偶数バンク＿Ａの空きリスト１１１２から取除かれる際、偶数バック＿Ａの空きリストカウント１１０２は減分される。書込アドレス３０８は四バンク読出／書込アドレス選択論理９０８（図９）によって、セグメントバッファセグメントメモリ１０８Ａｅの偶数バンク＿Ａに送られる。
【００８８】
ステップ１３３６において、四バンク書込選択論理１１００は偶数バンク＿Ｂの空きリスト１１１６から、セグメントバッファメモリ１０８Ｂｅの偶数バンク＿Ｂから利用可能なアドレスを取除く。偶数バンク＿Ｂの空きリスト１１１６からの偶数バンク＿Ｂアドレス１１２６は、四バンク書込アドレス選択論理１１２０によって書込アドレス３０８として選択される。偶数バンク＿Ｂアドレス１１２６が偶数バンク＿Ｂの空きリスト１１０６から取除かれる際、偶数バンク＿Ｂの空きリストカウント１１０６が減分される。書込アドレス３０８は四バンク読出／書込アドレス選択論理９０８（図９）によって、バッファセグメントメモリ１０８Ｂｅの偶数バンク＿Ｂに送られる。
【００８９】
ステップ１３０６において、四バンク書込選択論理１１００はポートに対して書込動作が保留であるかどうか定める。書込保留があるのなら、処理はステップ１３１６に進む。なければ、処理はステップ１３１２に続く。
【００９０】
ステップ１３１６において、四バンク書込選択論理１１００は偶数バンク＿Ａの空きリスト１１１２から、セグメントバッファメモリ１０８Ａｅの偶数バンク＿Ａにおける利用可能なアドレスを取除く。偶数バンク＿Ｂの空きリスト１１１６からの偶数バンクＡアドレス１１２２は、四バンク書込アドレス選択論理１１２０によって、書込アドレス３０８として選択される。偶数バンク＿Ａアドレス１１２２が偶数バンク＿Ａの空きリスト１１１２から取除かれる際、偶数バンク＿Ａの空きリストカウント１１０２は減分される。書込アドレス３０８および読出アドレス３１０は、四バンク読出／書込アドレス選択論理９０８（図９）によって、セグメントバッファメモリ１０８Ａｅおよび１０８Ｂｅのそれぞれのバンクに送られる。処理はステップ１３２２に進む。
【００９１】
ステップ１３１２において、読出アドレス３１０は、四バンク読出／書込アドレス選択論理９０８（図９）によって、セグメントバッファメモリ１０８Ｂｅの偶数バンク＿Ａに送られる。処理はステップ１３２２に進む。
【００９２】
ステップ１３２２において、読出動作が終了すると、読出アドレス３１０は偶数バンク＿Ａの空きリスト１１１２に返され、コピーカウント６２６（図６）がゼロであれば偶数バンク＿Ａの空きリストカウント１１０２が増分される。処理はステップ１３２６に進む。
【００９３】
ステップ１３２６において、次の偶数ポートタイムスロットの処理が始まる。次の偶数ポートサイクルはポートタイミング論理３０４（図３）によって定められる。
【００９４】
本発明は、図４−図６に関連して記載されている２つのバンクまたは図９−図１３に関連して記載される４つのバンクに分けられる、バッファセグメントメモリ１０８（図１Ａ）に限定されない。バッファセグメントメモリ１０８は２N（ここでＮ＝１、２、３、４…）個の任意な数のバンクに分けられ得る。
【００９５】
本発明は特定的に示されかつ好ましい実施例を参照して記載されているが、前掲の特許請求の範囲によって含まれる発明の範囲から逸脱することなく、形および詳細においてさまざまな変形が可能であることは理解されるであろう。
【図面の簡単な説明】
【図１Ａ】  非ブロッキング共通メモリスイッチのブロック図である。
【図１Ｂ】  入力ポートで受取られるべき先行技術のイーサネット（Ｒ）データパケットのブロック図である。
【図２】  スイッチ内の共通メモリによる入力ポートから出力ポートへの転送を示すタイミング図である。
【図３】  図１Ａに示される、パケットストレージマネージャ１０６を示すブロック図である。
【図４】  物理的に２つのバンクに分割された、図１Ａに示されるセグメントバッファメモリ１０８を示すブロック図である。
【図５】  図４に示される二バンクセグメントバッファメモリに対する図３に示される読出アドレス論理３０２を示すブロック図である。
【図６】  図４に示される二バンクセグメントバッファメモリに対する図３に示される書込アドレス論理を示すブロック図である。
【図７】  図４に示される二バンクセグメントバッファメモリに対する読出および書込アドレスのタイミングを示すタイミング図である。
【図８】  図４に示される二バンクセグメントバッファメモリに対する読出および書込アドレスを選択するためのステップを示すフロー図である。
【図９】  物理的に４つのバンクに分割された、図１Ａに示されるセグメントバッファメモリを示すブロック図である。
【図１０】  図９に示される四バンクセグメントバッファメモリに対する図３に示される読出アドレス論理を示すブロック図である。
【図１１】  図９に示される四バンクセグメントバッファメモリに対する図３に示される書込アドレス論理を示すブロック図である。
【図１２】  図９に示される四バンクセグメントバッファメモリに対する読出および書込アドレスのタイミングを示すタイミング図である。
【図１３】  図９に示される四バンクセグメントバッファメモリの偶数のバッファに対する読出および書込アドレスを選択するためのステップを示すフロー図である。
【図１Ａ】
0004439154.tif 000002
【図１Ｂ】
0004439154.tif 000003
【図２】
0004439154.tif 000004
【図３】
0004439154.tif 000005
【図４】
0004439154.tif 000006
【図５】
0004439154.tif 000007
【図６】
0004439154.tif 000008
【図７】
0004439154.tif 000009
【図８】
0004439154.tif 000010
【図９】
0004439154.tif 000011
【図１０】
0004439154.tif 000012
【図１１】
0004439154.tif 000013
【図１２】
0004439154.tif 000014
【図１３】
0004439154.tif 000015