(57)【要約】【課題】ネットワークの高速化に対応しつつ、高速メモリの容量を削減することが可能な記憶装置を提供すること。【解決手段】記憶装置１０は、大容量低速メモリ２に接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する。記憶装置１０は、小容量高速メモリ３を有している。セレクタ１２は、パケットの最初の所定数のセグメントを小容量高速メモリ３に書き込み、それ以降のセグメントを大容量低速メモリ２に書き込む。したがって、セグメント読み出し時にどのキューからセグメントを読み出す場合でもパケット転送に無駄な時間が発生するのを防止できると共に、キュー数が増えた場合でも小容量高速メモリ３の容量を削減することが可能となる。【選択図】図６
2010088102.tif 000002
【特許請求の範囲】
【請求項１】
第１の記憶手段に接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置であって、
前記第１の記憶手段よりも高速にアクセスが可能な第２の記憶手段と、
前記パケットの最初の所定数のセグメントを前記第２の記憶手段に書き込み、それ以降のセグメントを前記第１の記憶手段に書き込む書込手段とを含む、記憶装置。
【請求項２】
前記書込手段は、書き込むセグメントの数をカウントする第１のカウント手段と、
前記第１の記憶手段に書き込むセグメントを記憶する第１の複数のバッファ手段と、
前記第１のカウント手段のカウント値を参照して、前記パケットの最初の所定数のセグメントを前記第２の記憶手段に出力し、それ以降のセグメントを順次前記第１の複数のバッファ手段に出力する第１の選択手段とを含む、請求項１記載の記憶装置。
【請求項３】
前記第１の記憶手段は、複数のセグメントを並行して書き込み可能であり、
前記第１の複数のバッファ手段は、前記第１の記憶手段が並行して書き込み可能なセグメントの数に対応して設けられる、請求項２記載の記憶装置。
【請求項４】
前記所定数は、前記第１の記憶手段が並行して書き込み可能なセグメントの数から１を差し引いた数である、請求項３記載の記憶装置。
【請求項５】
前記記憶装置はさらに、前記第２の記憶手段に記憶される前記パケットの最初の所定数のセグメントを読み出して出力した後、前記第１の記憶手段に記憶されるそれ以降のセグメント読み出して出力する読出手段を含む、請求項１〜４のいずれかに記載の記憶装置。
【請求項６】
前記読出手段は、読み出すセグメントの数をカウントする第２のカウント手段と、
前記第１の記憶手段から読み出されたセグメントを記憶する第２の複数のバッファ手段と、
前記第２のカウント手段のカウント値を参照して、前記パケットの最初の所定数のセグメントを前記第２の記憶手段から読み出して順次出力し、それ以降のセグメントを前記第２の複数のバッファ手段から読み出して順次出力する第２の選択手段とを含む、請求項５記載の記憶装置。
【請求項７】
前記第１の記憶手段は、複数のセグメントを並行して読み出し可能であり、
前記第２の複数のバッファ手段は、前記第１の記憶手段から並行して読み出し可能なセグメントの数に対応して設けられる、請求項６記載の記憶装置。
【請求項８】
第１の記憶手段に接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置であって、
前記第１の記憶手段よりも高速にアクセスが可能な第２の記憶手段と、
前記パケットのセグメントを所定数ずつ前記第１の記憶手段に書き込み、最後の端数のセグメントを前記第２の記憶手段に書き込む書込手段とを含む、記憶装置。
【請求項９】
前記書込手段は、書き込むセグメントの数をカウントする第１のカウント手段と、
前記第１の記憶手段に書き込むセグメントを記憶する第１の複数のバッファ手段と、
前記第１のカウント手段のカウント値を参照して、前記パケットの所定数のセグメントを前記第１の複数のバッファ手段に出力し、最後の端数のセグメントを順次前記第２の記憶手段に出力する第１の選択手段とを含む、請求項８記載の記憶装置。
【請求項１０】
前記第１の記憶手段は、複数のセグメントを並行して書き込み可能であり、
前記第１の複数のバッファ手段は、前記第１の記憶手段が並行して書き込み可能なセグメントの数に対応して設けられる、請求項９記載の記憶装置。
【請求項１１】
前記所定数は、前記第１の記憶手段が並行して書き込み可能なセグメントの数である、請求項１０記載の記憶装置。
【請求項１２】
前記記憶装置はさらに、前記第１の記憶手段に記憶される前記パケットの所定数のセグメントを読み出して出力した後、前記第２の記憶手段に記憶される最後の端数のセグメント読み出して出力する読出手段を含む、請求項８〜１１のいずれかに記載の記憶装置。
【請求項１３】
前記読出手段は、読み出すセグメントの数をカウントする第２のカウント手段と、
前記第１の記憶手段から読み出されたセグメントを記憶する第２の複数のバッファ手段と、
前記第２のカウント手段のカウント値を参照して、前記パケットの所定数のセグメントを前記第２の複数のバッファ手段から読み出して順次出力し、最後の端数のセグメントを前記第２の記憶手段から読み出して順次出力する第２の選択手段とを含む、請求項１２記載の記憶装置。
【請求項１４】
前記第１の記憶手段は、複数のセグメントを並行して読み出し可能であり、
前記第２の複数のバッファ手段は、前記第１の記憶手段から並行して読み出し可能なセグメントの数に対応して設けられる、請求項１３記載の記憶装置。
【請求項１５】
第１の記憶手段に接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置であって、
前記第１の記憶手段よりも高速にアクセスが可能な第２の記憶手段と、
前記パケットのセグメント数が所定数以上の場合、前記パケットの前記所定数のセグメントを前記第１の記憶手段に書き込んだ後、最後の端数のセグメントをページモードで前記第１の記憶手段に書き込み、前記パケットのセグメント数が前記所定数未満の場合、当該パケットを前記第２の記憶手段に書き込む書込手段とを含む、記憶装置。
【請求項１６】
前記記憶装置はさらに、前記パケットのセグメント数が所定数以上の場合、前記パケットの前記所定数のセグメントを前記第１の記憶手段から読み出して出力した後、最後の端数のセグメントをページモードで前記第１の記憶手段から読み出して出力し、前記パケットのセグメント数が前記所定数未満の場合、当該パケットを前記第２の記憶手段から読み出して出力する読出手段を含む、請求項１５記載の記憶装置。
【請求項１７】
第１の記憶手段に接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置であって、
前記第１の記憶手段よりも高速にアクセスが可能な第２の記憶手段と、
前記パケットの最後の所定数のセグメントを前記第２の記憶手段に書き込み、それ以前のセグメントを前記第１の記憶手段に書き込む書込手段とを含む、記憶装置。
【請求項１８】
ネットワークを介して受信したパケットのデータを外部のメモリに記憶する記憶装置であって、
外部から書き込みコマンドおよびキュー番号を受け、前記パケットのデータの書き込みを制御する制御手段と、
前記外部のメモリの空きアドレスを取得して出力し、前記制御手段が受けたキュー番号に対応するポインタの値を更新して前記取得した空きアドレスにリンクさせるアドレス生成手段と、
前記アドレス生成手段から出力された空きアドレスに応じて前記外部のメモリに前記パケットのデータを書き込むメモリ管理手段とを含む、記憶装置。
【請求項１９】
前記記憶装置はさらに、前記パケットのパケット長をカウントするカウント手段と、
前記カウント手段によってカウントされたパケット長を管理するパケット長管理手段とを含む、請求項１８記載の記憶装置。
【請求項２０】
前記制御手段が外部からマルチキャストコマンドおよび第２のキュー番号を受けたときに、前記アドレス生成手段は、前記第２のキュー番号に対応するポインタの値に前記パケットのデータが書き込まれている前記外部のメモリのアドレスをリンクさせる、請求項１８または１９記載の記憶装置。
【請求項２１】
前記制御手段は、前記パケットのデータの中の一定量のデータを書き込むごとに外部から書き込みコマンドおよびキュー番号を受ける、請求項１８または１９記載の記憶装置。
【請求項２２】
前記制御手段は、外部から読み出しコマンドおよびキュー番号を受け、前記パケットのデータの読み出しを制御し、
前記アドレス生成手段は、前記制御手段が受けたキュー番号に対応するポインタの値を参照して当該パケットのデータが格納される前記外部のメモリのアドレスを取得して出力し、
前記メモリ管理手段は、前記アドレス生成手段から出力されたアドレスに応じて、前記パケット長管理手段によって管理されるパケット長のデータを前記外部のメモリから読み出す、請求項１９記載の記憶装置。
【請求項２３】
前記記憶装置はさらに、前記外部のメモリに対応して設けられるバッファ手段を有し、
前記書き込み時に、前記パケットのデータは前記バッファ手段を介して前記外部のメモリへ転送され、
前記制御手段は、前記パケットのパケット長に対応して前記バッファ手段のバースト長を制御する、請求項１９記載の記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ルータ、スイッチなどの通信端末で使用される、パケットを一時的に保存する記憶装置に関し、特に、大容量の低速メモリを用いつつネットワークの高速化にも対応可能な記憶装置および記憶装置のコントロール手法に関する。
【背景技術】
【０００２】
近年、ネットワークの高速化が進んでおり、ルータ、スイッチなどの通信端末も高速化に対応する必要がある。一般に、ルータやスイッチなどの通信端末においては、転送先を決定するまでデータをメモリなどの記憶装置に一時的に保存しておく必要がある。そのため、ネットワークの高速化に伴ってネットワークプロセッサおよびパケットバッファのデータ転送レートが上がり、パケットバッファとして使用されるメモリの容量もより大きなものが必要となる。たとえば、１０ＧビットＥｒｔｈｅｎｅｔの場合、１０Ｇｂ／ｓのデータ転送レートのネットワークプロセッサと、１０Ｇｂ／ｓのデータ転送レートおよび２．５Ｇｂの容量を有するパケットバッファとが必要となる。
【０００３】
このように、ネットワークの高速化に対応するためには高速で大容量のメモリが必要になる。しかしながら、高速メモリは高価であるため、高速メモリと低速メモリとの階層化によってネットワークの高速化に対応する技術が開発されている。
【０００４】
階層化されたメモリ制御の一例として、データ書き込み時に高速メモリ（ＦＩＦＯ（First In First Out））に設けられたキューごとにデータを蓄積し、蓄積されたデータが所定量となったときに、データを塊でキューから低速メモリに転送する方法がある。データ読み出し時には、高速メモリの各キューに蓄積されるデータ量が少なくなると低速メモリからデータを塊で読み出し、高速メモリに設けられたキューに転送する。これに関連する技術として、下記の特許文献１〜４に開示された発明がある。
【０００５】
特許文献１に開示された発明は、ＩＰルータなどのパケット転送装置において、ルーティングテーブルの検索を、大規模なエントリに対応して高速かつ経済的に行なうものである。第一のメモリには、ツリーの上段部分を格納し、第二のメモリには、下段部分を格納する。第二のメモリの最上段のノードには、ルートに相当するノードから当該最上段のノードに至る上段部分の経路上のノードの有するアドレス情報を格納する。検索すべき宛先アドレスに基づき、ツリーの上段部分を検索し、この検索結果に基づき、ツリーの下段部分の最上段ノードを検索する。そして、検索すべき宛先アドレスがこの最上位ノードが有するアドレス未満のときには、当該最上位ノードに格納された上段部分の経路上のノードの有するアドレス情報を参照し、当該検索すべき宛先アドレス以下となる最も下流のノードが有するアドレスを次ホップルータのアドレスとして決定する。
【０００６】
特許文献２に開示された発明は、ネットワークハードウェア内のメモリの使用量を抑制しつつ、通信の高速化を図るものである。通信システムのホストコンピュータは、ＮＩＣ上に仮想的な通信経路の確立時において、コネクションごとに、通信先端末との間の応答時間であるＲＴＴを測定する。その結果、ホストコンピュータは、ＲＴＴが所定の閾値より大きいと判定された場合には、ホストコンピュータ内のＯＳ再送バッファへ送信データの格納を開始し、ＮＩＣに送信データの転送を開始する。また、ＲＴＴが所定の閾値より小さいと判定された場合には、ＮＩＣへ送信データの転送を開始し、その転送された送信データをＮＩＣ内のＮＩＣ再送バッファに格納させることを開始する。
【０００７】
特許文献３に開示された発明は、バースト通信が起きた場合であっても、固定レート通
信の転送遅延を防止することができるルーティング装置を提供するものである。ルーティング装置のキャッシュメモリを固定レート通信のエントリを登録する領域と、固定レート通信以外の通信のエントリを登録する領域とに分ける。入力データが固定レート通信であるかどうかを判定し、その判定結果に基づいて、各領域を別々に更新する。これにより、バースト通信が発生しても、固定レート通信の領域のエントリは削除されず、固定レート通信のデータを安定的に高速転送することができる。
【０００８】
特許文献４に開示された発明は、再送データが送信バッファの輻輳に起因する遅延を回避できるようにするものである。メディアアクセス制御（ＭＡＣ）構成がデータブロック再送のための送信待ち時間を短縮する。複数のデータブロックが受信され、一時的に第１のメモリ（例えば、待ち行列、バッファ）に格納される。その後、複数のデータブロックは送信される。送信された各データブロックの受信が成功したか、またはデータブロックの受信が成功しなかったために再送が必要かについて、判定が行われる。送信されたデータブロックのうち再送が必要な各データブロックには標識が付けられ、第１のメモリよりも高い優先順位をもつ第２のメモリに格納される。標識付きのデータブロックは、第１のメモリ位置に格納されたデータブロックを送信する前に再送される。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−１１７２０８号公報
【特許文献２】特開２００８−００５３１５号公報
【特許文献３】特開２００７−０６０５１４号公報
【特許文献４】特開２００６−１６６４７９号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述の階層化されたメモリ制御においては、キュー数に応じて必要となる高速メモリのサイズが大きくなるため、システムのコストが増加するといった問題があった。このような問題点は、上述の特許文献１〜４に開示された発明を用いたとしても解決することができない。
【００１１】
また、ネットワーク機器に用いられるパケットバッファのようなアプリケーションにおいては、外部から入力されるパケットのデータ量が可変である。そのため、固定長でデータを入出力するためには、それを制御するためのコントローラが必要となり、デバイスが高価になるといった問題もあった。
【００１２】
また、ネットワーク機器に用いられるパケットバッファはＦＩＦＯ方式であり、入力したパケットを順番に出力するだけであれば、アドレス情報は不要である。ただし、優先順位を設けるためには複数のＦＩＦＯの列を設ける必要がある。しかしながら、一般的なパケットバッファにおいては、アドレス情報を格納するメモリとアドレス情報を読み出して出力するための制御回路とがコントローラに設けられるため、デバイスが高価になるといった問題もあった。
【００１３】
また、ネットワーク機器が１つの入力データを複数のパートに出力する場合、その入力データをコピーして出力する必要がある。そのため、同じデータをメモリに複数回書き込む必要があり、外部から入力されるデータをメモリに書き込む時間が少なくなってしまうといった問題があった。また、同じデータをメモリに複数回書き込むため、メモリの空き容量が枯渇する可能性が高くなるといった問題もあった。さらには、アドレス情報を書き込むメモリと、実際のパケットのデータを書き込むメモリとに複数回アクセスする必要があり、消費電力が大きくなるといった問題もあった。
【００１４】
本発明は、上記問題点を解決するためになされたものであり、その目的は、ネットワークの高速化に対応しつつ、高速メモリの容量を削減することが可能な記憶装置を提供することである。
【課題を解決するための手段】
【００１５】
本発明の一実施例によれば、大容量低速メモリに接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置が提供される。記憶装置は、小容量高速メモリと、パケットの最初の所定数のセグメントを小容量高速メモリに書き込み、それ以降のセグメントを大容量低速メモリに書き込むセレクタとを含む。
【００１６】
本発明の別の実施例によれば、大容量低速メモリに接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置が提供される。記憶装置は、小容量高速メモリと、パケットのセグメントを所定数ずつ大容量低速メモリに書き込み、最後の端数のセグメントを小容量高速メモリに書き込むセレクタとを含む。
【００１７】
本発明のさらに別の実施例によれば、大容量低速メモリに接続され、ネットワークを介して受信したパケットを複数のセグメントに分けて記憶する記憶装置が提供される。記憶装置は、小容量高速メモリと、パケットのセグメント数が所定数以上の場合、パケットの所定数のセグメントを大容量低速メモリに書き込んだ後、最後の端数のセグメントをページモードで大容量低速メモリに書き込み、パケットのセグメント数が所定数未満の場合、当該パケットを小容量高速メモリに書き込むセレクタとを含む。
【００１８】
本発明のさらに別の実施例によれば、ネットワークを介して受信したパケットのデータを外部のメモリに記憶する記憶装置が提供される。コマンドコントローラは、ネットワークプロセッサから書き込みコマンドおよびキュー番号を受け、パケットのデータの書き込みを制御する。アドレス生成部は、ＤＲＡＭまたはＳＲＡＭの空きアドレスを取得してメモリ管理部に出力し、コマンドコントローラが受けたキュー番号に対応するポインタの値を更新して空きアドレスにリンクさせる。メモリ管理部は、アドレス生成部から出力された空きアドレスに応じてＤＲＡＭまたはＳＲＡＭにパケットのデータを書き込む。
【発明の効果】
【００１９】
本発明の一実施例によれば、パケットの最初の所定数のセグメントを小容量高速メモリに書き込み、それ以降のセグメントを大容量低速メモリに書き込むので、キュー数が増えた場合でも高速メモリの容量を削減することが可能となる。
【００２０】
本発明の別の実施例によれば、パケットのセグメントを所定数ずつ大容量低速メモリに書き込み、最後の端数のセグメントを小容量高速メモリに書き込むので、キュー数が増えた場合でも高速メモリの容量を削減することが可能となる。
【００２１】
本発明のさらに別の実施例によれば、パケットのセグメント数が所定数以上の場合、パケットの所定数のセグメントを大容量低速メモリに書き込んだ後、最後の端数のセグメントをページモードで大容量低速メモリに書き込み、パケットのセグメント数が所定数未満の場合、当該パケットを小容量高速メモリに書き込むので、高速メモリの容量をさらに削減することが可能となる。
【００２２】
本発明のさらに別の実施例によれば、アドレス生成部が、ＤＲＡＭまたはＳＲＡＭの空きアドレスを取得してメモリ管理部に出力し、コマンドコントローラが受けたキュー番号に対応するポインタの値を更新して空きアドレスにリンクさせる。したがって、ネットワークプロセッサはキュー番号のみをコマンドコントローラに出力すればよいため、ネットワークプロセッサによる制御を簡略化することが可能となる。
【図面の簡単な説明】
【００２３】
【図１】大容量低速メモリを用いてパケットを蓄積する一般的な通信端末の構成例を示すブロック図である。
【図２】図１に示すパケットバッファ（大容量低速メモリ）２にパケットのデータが蓄積されるところを示す図である。
【図３】階層化されたメモリを用いてパケットを蓄積する一般的な通信端末の構成例を示すブロック図である。
【図４】図３に示す小容量高速メモリ３にパケットのデータが蓄積されるところを示す図である。
【図５】本発明の第１の実施の形態における記憶装置を用いた通信端末のデータ転送の概念を説明するための図である。
【図６】本発明の第１の実施の形態における記憶装置の概略構成を示すブロック図である。
【図７】本発明の第１の実施の形態における記憶装置の構成をさらに詳細に説明するためのブロック図である。
【図８】本発明の第１の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。
【図９】本発明の第１の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。
【図１０】本発明の第１の実施の形態における記憶装置を用いた通信端末の一例を示す図である。
【図１１】本発明の第２の実施の形態における記憶装置を用いた通信端末のデータ転送の概念を説明するための図である。
【図１２】本発明の第２の実施の形態における記憶装置２０の構成例を示すブロック図である。
【図１３】本発明の第２の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。
【図１４】本発明の第２の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。
【図１５】本発明の第３の実施の形態における記憶装置による大容量低速メモリ２からのデータ読み出しの動作を説明するためのタイミングチャートである。
【図１６】本発明の第３の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。
【図１７】本発明の第３の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。
【図１８】本発明の第４の実施の形態における記憶装置の基本的な概念を説明するための図である。
【図１９】本発明の第４の実施の形態における記憶装置の概略構成を示すブロック図である。
【図２０】本発明の第４の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。
【図２１】本発明の第４の実施の形態における記憶装置のパケットのデータの読み出しを説明するためのタイミングチャートである。
【図２２】キュー＃０〜＃ｎと実際のパケットのデータが格納されるメモリとの対応を示す図である。
【図２３】本発明の第５の実施の形態における記憶装置の基本的な概念を説明するための図である。
【図２４】本発明の第５の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。
【図２５】キュー＃０〜＃ｎと実際のマルチキャストのパケットのデータが格納されるメモリとの対応を示す図である。
【図２６】本発明の第６の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。
【発明を実施するための形態】
【００２４】
図１は、大容量低速メモリを用いてパケットを蓄積する一般的な通信端末の構成例を示すブロック図である。この通信端末は、ネットワークプロセッサ１と、大容量低速メモリによって構成されるパケットバッファ２とを含む。
【００２５】
図２は、図１に示すパケットバッファ（大容量低速メモリ）２にパケットのデータが蓄積されるところを示す図である。パケットのデータ（以下、単にデータとも呼ぶ。）Ａ〜Ｄが順番にパケットバッファ２に蓄積される。そして、パケットの転送先が決まると、蓄積されているデータが順番に読み出され、データａ〜ｄとして出力される。パケットを蓄積するパケットバッファ２は、大容量低速メモリのみであるので、キューごとにパケットを蓄積して読み出すといった制御が困難になることが多い。
【００２６】
図３は、階層化されたメモリを用いてパケットを蓄積する一般的な通信端末の構成例を示すブロック図である。図３（ａ）は、ネットワークプロセッサ１内に小容量高速メモリ３が搭載された場合の構成例を示している。また、図３（ｂ）は、ネットワークプロセッサ１とパケットバッファ（大容量低速メモリ）２との間に小容量高速メモリ３が設けられた場合の構成例を示している。
【００２７】
メモリが階層化されている場合、データ書き込み時に小容量高速メモリ３に設けられたキューごとにデータを蓄積し、蓄積されたデータが所定量となったときに、データを塊でキューからパケットバッファ２に転送する。また、データ読み出し時には、小容量高速メモリ３の各キューに蓄積されるデータ量が少なくなるとパケットバッファ２からデータを塊で読み出し、小容量高速メモリ３に設けられたキューに転送する。
【００２８】
図４は、図３に示す小容量高速メモリ３にパケットのデータが蓄積されるところを示す図である。図４に示すように、キューＱ０〜Ｑｎにデータが順番に蓄積され、蓄積された順番にデータが読み出される。キューごとにデータを固めるのは、キューに蓄積されたデータは順番を逆にできないためである。キュー数が多くなると、小容量高速メモリ３の容量が大きくなるといった問題がある。
【００２９】
（第１の実施の形態）
図５は、本発明の第１の実施の形態における記憶装置を用いた通信端末のデータ転送の概念を説明するための図である。本実施の形態においては、パケットの最初の３セグメントを小容量高速メモリ３に書き込み、そのパケットのそれ以降のセグメントを順次大容量低速メモリ２に蓄積する。ここで、セグメントとは、小容量高速メモリ３のデータ幅に相
当する量のデータを指しており、図５における“Ａ”，“Ｂ”，…のそれぞれが１セグメントである。パケットのデータ長は可変であるため、１つのパケットはデータ長に応じて１つまたは複数のセグメントによって構成されることになる。
【００３０】
本実施の形態においては、キュー番号に関係なく、パケットの最初の３セグメントを小容量高速メモリ３に書き込む。これによって、パケットの読み出し時には必ず最初の３セグメントが小容量高速メモリ３から読み出され、その間に４セグメント目以降のデータが大容量低速メモリ２から順次読み出されることになり、どのキューからパケットを読み出す場合でもパケット間に無駄な時間が発生するのを防止することができる。
【００３１】
なお、以下の説明においては、パケットの最初の３セグメントを高速メモリ３に書き込むこととするが、パケットの最初の幾つかのセグメントを高速メモリ３に書き込めばよく、３セグメントに限定されるものではない。高速メモリ３に書き込むセグメントの数が大容量低速メモリ２の書き込み速度（読み出し速度）に依存することは、以下の説明によって容易に理解されるであろう。
【００３２】
図６は、本発明の第１の実施の形態における記憶装置の概略構成を示すブロック図である。この記憶装置１０は大容量低速メモリ２に接続され、小容量高速メモリ３と、入力バッファ１１と、セレクタ１２とを含む。
【００３３】
入力バッファ１１は、受信したデータを一時的に記憶してセレクタ１２に出力する。セレクタ１２は入力バッファ１１からデータを受けると、パケットの最初の３セグメントを小容量高速メモリ３に書き込み、そのパケットのそれ以降のセグメントを大容量低速メモリ２に書き込む。なお、パケットが３セグメント以下の場合には、小容量高速メモリ３への書き込みのみが行なわれ、大容量低速メモリ２への書き込みは行なわれない。
【００３４】
図７は、本発明の第１の実施の形態における記憶装置の構成をさらに詳細に説明するためのブロック図である。この記憶装置１０は、主に大容量低速メモリ２および小容量高速メモリ３にデータを書き込む部分（以下、書き込み部と呼ぶ。）と、主に大容量低速メモリ２および小容量高速メモリ３からデータを読み出して出力する部分（以下、読み出し部と呼ぶ。）とに大別される。
【００３５】
書き込み部は、入力バッファ１１と、セレクタ１２と、カウンタ１３と、バッファ１４−１〜１４−４とを含む。また、読み出し部は、セレクタ１６と、バッファ１７−１〜１７−４と、カウンタ１８と、出力バッファ１９とを含む。なお、バッファ１５は、セレクタ１２から小容量高速メモリ３にデータが書き込まれる際、および小容量高速メモリ３からデータが読み出されてセレクタ１６に転送される際に使用される。
【００３６】
大容量低速メモリ２は、小容量高速メモリ３と比較して、データ書き込み（データ読み出し）に４倍の時間を要する。したがって、小容量高速メモリ３と同じ転送速度でデータ書き込み（データ読み出し）を行なえるようにするために、小容量高速メモリ３のデータ幅の４倍のデータ幅を有している。ここでは、大容量低速メモリ２が４つのメモリチップで構成され、それぞれ別々のタイミングでデータ書き込み／データ読み出しが行なわれるものとする。
【００３７】
なお、大容量低速メモリ２および小容量高速メモリ３のアクセス制御は、ネットワークプロセッサ１によって行なわれるものとする。
【００３８】
入力バッファ１１は、ネットワークプロセッサ１からパケットのデータを受けると、そのデータを一時的に記憶する。入力バッファ１１は、クロック信号に同期してデータを順
次セレクタ１２に出力する。
【００３９】
カウンタ１３は、ネットワークプロセッサ１からパケットの始まりを示すＳＴＡＲＴ０信号を受けると、カウント値をリセットし、クロック信号に同期してカウントアップを開始する。そして、カウンタ１３は、カウント値をセレクタ１２に出力する。また、カウンタ１３は、ネットワークプロセッサ１からパケットの終わりを示すＥＮＤ０信号を受けると、パケットが終了したことをセレクタ１２に通知する。
【００４０】
セレクタ１２は、カウンタ１３から出力されるカウント値を参照して、入力バッファ１１から転送されるデータのうち、最初の３セグメント分のデータをバッファ１５を介して小容量高速メモリ３に書き込む。そして、セレクタ１２は、４セグメント目以降のデータをバッファ１４−１、１４−２、１４−３、１４−４の順に書き込む。なお、セレクタ１２は、カウンタ１３からパケット終了の通知を受けると、その時点でデータの書き込みを終了する。
【００４１】
バッファ１４−１〜１４−４は、セレクタ１２からデータを受けると、それぞれ大容量低速メモリ２内の対応するメモリにデータを書き込む。
【００４２】
バッファ１７−１〜１７−４は、それぞれ大容量低速メモリ２内の対応するメモリからデータを読み出し、セレクタ１６にデータを出力する。
【００４３】
カウンタ１８は、ネットワークプロセッサ１からパケットの始まりを示すＳＴＡＲＴ１信号を受けると、カウント値をリセットし、クロック信号に同期してカウントアップを開始する。そして、カウンタ１８は、カウント値をセレクタ１６に出力する。また、カウンタ１８は、ネットワークプロセッサ１からパケットの終わりを示すＥＮＤ１信号を受けると、パケットが終了したことをセレクタ１６に通知する。
【００４４】
セレクタ１６は、カウンタ１８から出力されるカウント値を参照して、最初の３セグメント分のデータをバッファ１５を介して小容量高速メモリ３から読み出し、出力バッファ１９にデータを出力する。そして、セレクタ１６は、４セグメント目以降のデータをバッファ１７−１、１７−２、１７−３、１７−４の順に読み出し、出力バッファ１９にデータを出力する。なお、セレクタ１６は、カウンタ１８からパケット終了の通知を受けると、その時点でデータの読み出しを終了する。
【００４５】
出力バッファ１９は、セレクタ１６から受けたデータを一時的に記憶し、クロック信号に同期してデータを順次出力する。
【００４６】
図８は、本発明の第１の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。なお、図８において、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【００４７】
まず、Ｔ１において、ネットワークプロセッサ１から出力された最初のパケットの最初のセグメントのデータａ０が入力バッファ１１に記憶される。このとき、カウンタ１３は、ネットワークプロセッサ１からＳＴＡＲＴ０信号を受け、カウント値をリセットしてカウントアップを開始する。
【００４８】
Ｔ２において、入力バッファ１１に記憶されるデータａ０が、セレクタ１２およびバッファ１５を介して小容量高速メモリ３に書き込まれる。Ｔ３〜Ｔ４において同様の動作が行なわれ、３セグメント分のデータａ０〜ａ２が小容量高速メモリ３に書き込まれる。
【００４９】
次に、Ｔ５において、入力バッファ１１に記憶されるデータａ３がセレクタ１２を介してバッファ１４−１に転送され、大容量低速メモリ２への書き込みが開始される。このデータａ３の書き込みが、Ｔ５〜Ｔ８の４サイクルで行なわれる。同様にして、データａ４〜ａ６がそれぞれバッファ１４−２〜１４−４に転送され、それぞれ４サイクルで大容量低速メモリ２に書き込まれる。
【００５０】
Ｔ９において、バッファ１４−１に記憶されるデータａ３の大容量低速メモリ２への書き込みが終了しているので、入力バッファ１１に記憶されるデータａ７がセレクタ１２を介してバッファ１４−１に転送され、大容量低速メモリ２への書き込みが開始される。このデータａ７の書き込みが、Ｔ９〜Ｔ１２の４サイクルで行なわれる。同様に、データａ８〜ａ９がそれぞれバッファ１４−２〜１４−３に転送され、それぞれ４サイクルで大容量低速メモリ２に書き込まれる。
【００５１】
Ｔ１０において、カウンタ１３は、ネットワークプロセッサ１からＥＮＤ０信号を受け、パケットの終了をセレクタ１２に通知する。Ｔ１１において、ネットワークプロセッサ１から出力された次のパケットのデータｂ０が入力バッファ１１に記憶される。このとき、カウンタ１３は、ネットワークプロセッサ１からＳＴＡＲＴ０信号を受け、カウント値をリセットしてカウントアップを開始する。
【００５２】
Ｔ１２において、入力バッファ１１に記憶されるデータｂ０が、セレクタ１２およびバッファ１５を介して小容量高速メモリ３に書き込まれる。Ｔ１３〜Ｔ１４において同様の動作が行なわれ、３セグメント分のデータｂ０〜ｂ２が小容量高速メモリ３に書き込まれる。
【００５３】
次に、Ｔ１５において、入力バッファ１１に記憶されるデータｂ３がセレクタ１２を介してバッファ１４−１に転送され、大容量低速メモリ２への書き込みが開始される。このデータｂ３の書き込みが、Ｔ１５〜Ｔ１８の４サイクルで行なわれる。同様に、データｂ４がバッファ１４−２に転送され、４サイクルで大容量低速メモリ２に書き込まれる。
【００５４】
Ｔ１７〜Ｔ２０において、３パケット分のデータｃ０、ｄ０、ｅ０〜ｅ１が順次小容量高速メモリ３に書き込まれる。
【００５５】
図９は、本発明の第１の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。なお、図９においても、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【００５６】
まず、Ｔ１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、セレクタ１６は、バッファ１５を介して小容量高速メモリ３から最初のパケットの最初のセグメントのデータａ０を読み出す。また、バッファ１７−１は、大容量低速メモリ２からデータａ３の読み出しを開始する。
【００５７】
Ｔ２において、セレクタ１６は、小容量高速メモリ３から読み出したデータａ０を出力バッファ１９に書き込む。Ｔ３〜Ｔ４において同様の動作が行なわれ、３セグメント分のデータａ０〜ａ２が出力バッファ１９に書き込まれる。
【００５８】
次に、Ｔ５において、大容量低速メモリ２からのデータａ３の読み出しが終了しているので、セレクタ１６はバッファ１７−１に記憶されるデータａ３を読み出して出力バッフ
ァ１９に書き込む。また、このサイクルで、大容量低速メモリ２からのデータａ７の読み出しが開始される。Ｔ６〜Ｔ１１において同様の動作が行なわれ、データａ４〜ａ９が順次出力バッファ１９に書き込まれる。
【００５９】
Ｔ１０において、カウンタ１８は、ネットワークプロセッサ１からＥＮＤ１信号を受け、パケットの終了をセレクタ１６に通知する。Ｔ１１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、セレクタ１６は、バッファ１５を介して小容量高速メモリ３から２番目のパケットの最初のセグメントのデータｂ０を読み出す。また、バッファ１７−１は、大容量低速メモリ２からデータｂ３の読み出しを開始する。
【００６０】
Ｔ１２において、セレクタ１６は、小容量高速メモリ３から読み出したデータｂ０を出力バッファ１９に書き込む。Ｔ１３〜Ｔ１４において同様の動作が行なわれ、３セグメント分のデータｂ０〜ｂ２が出力バッファ１９に書き込まれる。
【００６１】
次に、Ｔ１５において、大容量低速メモリ２からのデータｂ３の読み出しが終了しているので、セレクタ１６はバッファ１７−１に記憶されるデータｂ３を読み出して出力バッファ１９に書き込む。Ｔ１６において同様の動作が行なわれ、データｂ４が出力バッファ１９に書き込まれる。
【００６２】
Ｔ１６〜Ｔ１９において、３パケット分のデータｃ０、ｄ０、ｅ０〜ｅ１が順次小容量高速メモリ３から読み出され、出力バッファ１９に順次データが書き込まれる。
【００６３】
図１０は、本発明の第１の実施の形態における記憶装置を用いた通信端末の一例を示す図である。本実施の形態における記憶装置１０は、ネットワークプロセッサ１と、標準メモリ（大容量低速メモリ）２との間に設けられ、上述の動作を行なう。標準メモリとして、ＤＲＡＭ（Dynamic Random Access Memory）が使用可能であるが、小容量高速メモリ３と比較して大容量の書き込み可能なデバイスであればよく、特にＤＲＡＭに限定されるものではない。
【００６４】
以上説明したように、本実施の形態における記憶装置１０によれば、キュー番号に関係なく、パケットの最初の幾つかのセグメントを小容量高速メモリ３に書き込み、それ以降のセグメントを大容量低速メモリ２に書き込むようにしたので、データ読み出し時にどのキューからデータを読み出す場合でもパケット転送に無駄な時間が発生するのを防止することが可能となった。
【００６５】
また、キュー番号に関係なく、パケットの最初の幾つかのセグメントを小容量高速メモリ３に記憶するのみであるので、高速メモリの容量を増加させずに高速でパケット転送を行なうことができる。また、キュー数の増加に伴って高速メモリの容量が増加するのを防止することができる。したがって、システム全体のコストの削減が可能となった。
【００６６】
また、大容量低速メモリ２に書き込まれたデータが小容量高速メモリ３に転送されたり、小容量高速メモリ３に書き込まれたデータが大容量低速メモリ２に転送されたりすることがなく、データ読み出し時に直接大容量低速メモリ２および小容量高速メモリ３からデータが読み出されるので、システム全体の消費電力を削減することが可能となった。
【００６７】
また、パケットの最初のセグメントが小容量高速メモリ３から読み出されるので、読み出し時におけるレイテンシを短くすることが可能となった。
【００６８】
さらには、パケットの最初の幾つかのセグメントを小容量高速メモリ３に書き込み、そ
れ以降のセグメントを大容量低速メモリ２に書き込めばよいので、メモリのアクセス制御を簡略化することが可能となった。大容量低速メモリ２および小容量高速メモリ３からデータを読み出す場合も同様に、メモリのアクセス制御を簡略化することが可能となった。
【００６９】
（第２の実施の形態）
図１１は、本発明の第２の実施の形態における記憶装置を用いた通信端末のデータ転送の概念を説明するための図である。本実施の形態においては、パケットの最初の４セグメントが揃ったときに大容量低速メモリ２にデータを書き込む。それ以降、セグメントが４つ揃うごとに同様の動作を行なう。そして、パケットの終わりに発生する端数のセグメント（４に満たないセグメント）を小容量高速メモリ３に書き込む。図１１においては、パケットの最初の８つのセグメント“Ａ”〜“Ｈ”が大容量低速メモリ２に書き込まれ、端数のセグメントである“Ｉ”および“Ｊ”が小容量高速メモリ３に書き込まれる。
【００７０】
図１２は、本発明の第２の実施の形態における記憶装置２０の構成例を示すブロック図である。図７に示す第１の実施の形態における記憶装置と比較して、小容量高速メモリ３の構成が異なる点、セレクタ１２および１６の機能が異なる点、およびセレクタ２（２１，２２）が追加されている点のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。なお、本実施の形態における小容量高速メモリの参照符号を３’とし、セレクタの参照符号を１２’および１６’として説明する。
【００７１】
小容量高速メモリ３’は、最大３つのセグメントを同時に書き込む必要があるため、第１の実施の形態における小容量高速メモリ３のデータ幅の３倍のデータ幅を有する。本実施の形態において、小容量高速メモリ３’は、３つのメモリチップによって構成されるものとする。
【００７２】
バッファ１４−１〜１４−４は、それぞれ少なくとも２セグメントのデータを記憶する容量を有しており、一方の領域からデータを読み出しているときに、他方の領域にデータを書き込むことが可能である。
【００７３】
セレクタ１２’は、カウンタ１３から出力されるカウント値を参照して、入力バッファ１１から転送されるデータをバッファ１４−１、１４−２、１４−３、１４−４の順に書き込む。それ以降、同様の動作を繰り返す。
【００７４】
セレクタ２（２１）は、カウンタ１３から出力されるカウント値を参照して、バッファ１４−１〜１４−４に４つのセグメントのデータが記憶された時点でそれらのデータを大容量低速メモリ２に書き込む。また、セレクタ２（２１）は、カウンタ１３からパケット終了の通知を受けると、カウンタ１３から出力されるカウント値を参照して、その時点でバッファ１４−１〜１４−４に記憶される端数のセグメントのデータを小容量高速メモリ３’に書き込む。
【００７５】
セレクタ２（２２）は、カウンタ１８からパケット開始の通知を受けると、大容量低速メモリ２から４つのセグメントのデータを読み出し、それぞれのデータをバッファ１７−１〜１７−４に書き込む。また、セレクタ２（２２）は、カウンタ１３から出力されるカウント値を参照して、次の４つのセグメントのデータ転送が必要となった時点で大容量低速メモリ２から４つのセグメントのデータを読み出し、それぞれのデータをバッファ１７−１〜１７−４に書き込む。また、セレクタ２（２２）は、カウンタ１８からパケット終了の通知を受けると、カウンタ１３から出力されるカウント値を参照して、端数のセグメントを小容量高速メモリ３’から読み出し、バッファ１７−１〜１７−３の中の対応するバッファに書き込む。
【００７６】
セレクタ１６’は、カウンタ１８から出力されるカウント値を参照して、バッファ１７−１〜１７−４から出力されるデータを選択的に出力バッファ１９に出力する。
【００７７】
図１３は、本発明の第２の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。なお、図１３においても、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【００７８】
まず、Ｔ１において、ネットワークプロセッサ１から出力された最初のパケットの最初のセグメントのデータａ０が入力バッファ１１に記憶される。このとき、カウンタ１３は、ネットワークプロセッサ１からＳＴＡＲＴ０信号を受け、カウント値をリセットしてカウントアップを開始する。
【００７９】
Ｔ２において、入力バッファ１１に記憶されるデータａ０が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ３〜Ｔ５において同様の動作が行なわれ、４セグメント分のデータａ０〜ａ３が順次バッファ１４−１〜１４−４に書き込まれる。
【００８０】
Ｔ５において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータａ０〜ａ３の大容量低速メモリ２への書き込みを開始する。このデータａ０〜ａ３の書き込みが、Ｔ５〜Ｔ８の４サイクルで行なわれる。
【００８１】
Ｔ６において、入力バッファ１１に記憶されるデータａ４が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ７〜Ｔ９において同様の動作が行なわれ、４セグメント分のデータａ４〜ａ７が順次バッファ１４−１〜１４−４に書き込まれる。
【００８２】
Ｔ９において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータａ４〜ａ７の大容量低速メモリ２への書き込みを開始する。このデータａ４〜ａ７の書き込みが、Ｔ９〜Ｔ１２の４サイクルで行なわれる。
【００８３】
Ｔ１０において、入力バッファ１１に記憶されるデータａ８が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ１１において同様の動作が行なわれ、２セグメント分のデータａ８〜ａ９がバッファ１４−１〜１４−２に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。
【００８４】
Ｔ１２において、セレクタ２（２１）は、バッファ１４−１〜１４−２に記憶されるデータａ８〜ａ９を小容量高速メモリ３’に書き込む。また、Ｔ１２において、入力バッファ１１に記憶されるデータｂ０が、セレクタ１２を介してバッファ１４−１に書き込まれる。Ｔ１３〜Ｔ１５において同様の動作が行なわれ、４セグメント分のデータｂ０〜ｂ３が順次バッファ１４−１〜１４−４に書き込まれる。
【００８５】
Ｔ１５において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータｂ０〜ｂ３の大容量低速メモリ２への書き込みを開始する。このデータｂ０〜ｂ３の書き込みが、Ｔ１５〜Ｔ１８の４サイクルで行なわれる。
【００８６】
Ｔ１６において、入力バッファ１１に記憶されるデータｂ４が、セレクタ１２’を介してバッファ１４−１に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。
【００８７】
Ｔ１７において、セレクタ２（２１）は、バッファ１４−１に記憶されるデータｂ４を小容量高速メモリ３’に書き込む。
【００８８】
Ｔ１８〜Ｔ１９において同様の動作が行なわれ、セレクタ２（２１）は、データｃ０およびｄ０を小容量高速メモリ３’に書き込む。
【００８９】
Ｔ１９において、入力バッファ１１に記憶されるデータｅ０が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ２０において同様の動作が行なわれ、２セグメント分のデータｅ０〜ｅ１がバッファ１４−１〜１４−２に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。
【００９０】
Ｔ２１において、セレクタ２（２１）は、バッファ１４−１〜１４−２に記憶されるデータｅ０〜ｅ１を小容量高速メモリ３’に書き込む。
【００９１】
図１４は、本発明の第２の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。なお、図１４においても、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【００９２】
まず、Ｔ１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、大容量低速メモリ２に記憶される最初のパケットの４つのセグメントのデータａ０〜ａ３の読み出しが開始される。
【００９３】
Ｔ５において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータａ０〜ａ３をそれぞれバッファ１７−１〜１７−４に書き込む。このとき、セレクタ１６’は、バッファ１７−１に記憶されるデータａ０を出力バッファ１９に転送する。また、セレクタ２（２２）は、大容量低速メモリ２に記憶されるデータａ４〜ａ７の読み出しを開始する。
【００９４】
Ｔ６〜Ｔ８において、セレクタ１６’は、バッファ１７−２〜１７−４に記憶されるデータａ１〜ａ３を順次出力バッファ１９に転送する。
【００９５】
Ｔ９において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータａ４〜ａ７をそれぞれバッファ１７−１〜１７−４に書き込む。このとき、セレクタ１６’は、バッファ１７−１に記憶されるデータａ４を出力バッファ１９に転送する。
【００９６】
Ｔ１０〜Ｔ１２において、セレクタ１６’は、バッファ１７−２〜１７−４に記憶されるデータａ５〜ａ７を順次出力バッファ１９に転送する。また、Ｔ１０において、カウンタ１８は、ネットワークプロセッサ１からＥＮＤ１信号を受け、パケットの終了をセレクタ１６’およびセレクタ２（２２）に通知する。
【００９７】
Ｔ１１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、大容量低速メモリ２に記憶される次のパケットの４つのセグメントのデータｂ０〜ｂ３の読み出しが開始される。
【００９８】
Ｔ１２において、セレクタ２（２２）は、端数のデータａ８およびａ９を小容量高速メモリ３’から読み出し、バッファ１７−１および１７−２に書き込む。Ｔ１３において、セレクタ１６’は、バッファ１７−１に記憶されるデータａ８を出力バッファ１９に転送する。Ｔ１４において、セレクタ１６’は、バッファ１７−２に記憶されるデータａ９を出力バッファ１９に転送する。
【００９９】
Ｔ１５において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータｂ０〜ｂ３をそれぞれバッファ１７−１〜１７−４に書き込む。このとき、セレクタ１６’は、バッファ１７−１に記憶されるデータｂ０を出力バッファ１９に転送する。
【０１００】
Ｔ１６〜Ｔ１８において、セレクタ１６’は、バッファ１７−２〜１７−４に記憶されるデータｂ１〜ｂ３を順次出力バッファ１９に転送する。また、Ｔ１６において、カウンタ１８は、ネットワークプロセッサ１からＥＮＤ１信号を受け、パケットの終了をセレクタ１６’およびセレクタ２（２２）に通知する。
【０１０１】
Ｔ１８において、セレクタ２（２２）は、端数のデータｂ４を小容量高速メモリ３’から読み出し、バッファ１７−１に書き込む。Ｔ１９において、セレクタ１６’は、バッファ１７−１に記憶されるデータｂ４を出力バッファ１９に転送する。
【０１０２】
Ｔ２０〜Ｔ２３において同様の動作が行なわれ、セレクタ１６’が、データｃ０、ｄ０、ｅ０〜ｅ１を順次出力バッファ１９に転送する。
【０１０３】
以上説明したように、本実施の形態における記憶装置２０によれば、キュー番号に関係なく、パケットのセグメントを４つずつ大容量低速メモリ２に書き込み、そのパケットの最後の端数のセグメントのみを小容量高速メモリ３’に書き込むようにしたので、第１の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０１０４】
（第３の実施の形態）
本発明の第３の実施の形態における記憶装置は、第２の実施の形態における記憶装置２０と比較して、大容量低速メモリ２のページモードを使用する点が異なる。パケットのセグメント数が４を超えるものについては、５番目以降のセグメントを（端数のセグメントを含めて）ページモードで大容量低速メモリ２に書き込む。また、パケットのセグメント数が３以下のものについては、小容量高速メモリ３’に書き込む。
【０１０５】
図１５は、本発明の第３の実施の形態における記憶装置による大容量低速メモリ２からのデータ読み出しの動作を説明するためのタイミングチャートである。なお、信号名の前に付加されている“／”は、アクティブロウであることを示している。
【０１０６】
図１５に示すように、／ＲＡＳ信号が最初にロウレベル（以下、Ｌレベルと略す。）になったときに、ロウアドレス“Ｘａ”が取り込まれる。そして、／ＣＡＳ信号がＬレベルになったときにカラムアドレス“Ｙｂ”が取り込まれた後、クロック信号（ｅｘｔ．／ＣＬＫ，ｅｘｔ．ＣＬＫ）に同期してＤＱＳ信号が入力されると、Ｄ／Ｑ信号にデータが出力される。
【０１０７】
図１５においては、カラムアドレス“Ｙｂ”に対応して４セグメント分のデータｑ０〜ｑ３が高速で読み出さ、カラムアドレス“Ｙｃ”に対応して４セグメント分のデータｑ４〜ｑ７が高速で読み出されるところを示している。２回目のロウアドレスが取り込まれるときに、プリチャージ（／ＰＲＥ）が行なわれている。なお、図１５に示すＤＲＡＭの制御信号は、ネットワークプロセッサ１によって生成される。
【０１０８】
本発明の第３の実施の形態における記憶装置は、図１２に示す第２の実施の形態における記憶装置と比較して、セレクタ２（２１）およびセレクタ２（２２）の機能のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。なお、本実施の形態におけるセレクタ２の参照符号を２１’および２２’として説明する。
【０１０９】
なお、バッファ１４−１〜１４−４は、それぞれ少なくとも２セグメントのデータを記憶する容量を有しており、一方の領域からデータを読み出しているときに、他方の領域にデータを書き込むことが可能である。
【０１１０】
また、バッファ１７−１〜１７−４も、それぞれ少なくとも２セグメントのデータを記憶する容量を有しており、一方の領域からデータを読み出しているときに、他方の領域にデータを書き込むことが可能である。
【０１１１】
図１６は、本発明の第３の実施の形態における記憶装置のデータ書き込み時の動作を説明するためのタイミングチャートである。なお、図１６においても、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【０１１２】
まず、Ｔ１において、ネットワークプロセッサ１から出力された最初のパケットの最初のセグメントのデータａ０が入力バッファ１１に記憶される。このとき、カウンタ１３は、ネットワークプロセッサ１からＳＴＡＲＴ０信号を受け、カウント値をリセットしてカウントアップを開始する。
【０１１３】
Ｔ２において、入力バッファ１１に記憶されるデータａ０が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ３〜Ｔ５において同様の動作が行なわれ、４セグメント分のデータａ０〜ａ３が順次バッファ１４−１〜１４−４に書き込まれる。
【０１１４】
Ｔ５において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータａ０〜ａ３の大容量低速メモリ２への書き込みを開始する。このデータａ０〜ａ３の書き込みが、Ｔ５〜Ｔ８の４サイクルで行なわれる。
【０１１５】
Ｔ６において、入力バッファ１１に記憶されるデータａ４が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ７〜Ｔ９において同様の動作が行なわれ、４セグメント分のデータａ４〜ａ７が順次バッファ１４−１〜１４−４に書き込まれる。
【０１１６】
Ｔ９において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータａ４〜ａ７をページモードで大容量低速メモリ２に書き込む。このデータａ４〜ａ７の書き込みは、１サイクルで完了する。
【０１１７】
Ｔ１０において、入力バッファ１１に記憶されるデータａ８が、セレクタ１２’を介してバッファ１４−１に書き込まれる。Ｔ１１において同様の動作が行なわれ、２セグメント分のデータａ８〜ａ９がバッファ１４−１〜１４−２に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。このとき、セレクタ２（２１）は、バッファ１４−１〜１４−２に記憶されるデータａ８〜ａ９をページモードで小容量高速メモリ３’に書き込む。
【０１１８】
Ｔ１２において、入力バッファ１１に記憶されるデータｂ０が、セレクタ１２を介してバッファ１４−１に書き込まれる。Ｔ１３〜Ｔ１５において同様の動作が行なわれ、４セグメント分のデータｂ０〜ｂ３が順次バッファ１４−１〜１４−４に書き込まれる。
【０１１９】
Ｔ１５において、セレクタ２（２１）は、バッファ１４−１〜１４−４に記憶されるデータｂ０〜ｂ３の大容量低速メモリ２への書き込みを開始する。このデータｂ０〜ｂ３の書き込みが、Ｔ１５〜Ｔ１８の４サイクルで行なわれる。
【０１２０】
Ｔ１６において、入力バッファ１１に記憶されるデータｂ４が、セレクタ１２’を介し
てバッファ１４−１に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。
【０１２１】
Ｔ１７において、セレクタ２（２１）は、バッファ１４−１に記憶されるデータｂ４を小容量高速メモリ３’に書き込む。
【０１２２】
Ｔ１８〜Ｔ１９において同様の動作が行なわれ、セレクタ２（２１）は、データｃ０およびｄ０を小容量高速メモリ３’に書き込む。
【０１２３】
Ｔ１９において、入力バッファ１１に記憶されるデータｅ０が、セレクタ１２を介してバッファ１４−１に書き込まれる。Ｔ２０において同様の動作が行なわれ、２セグメント分のデータｅ０〜ｅ１がバッファ１４−１〜１４−２に書き込まれたときに、ネットワークプロセッサ１からＥＮＤ０信号が出力される。
【０１２４】
Ｔ２１において、セレクタ２（２１）は、バッファ１４−１〜１４−２に記憶されるデータｅ０〜ｅ１を小容量高速メモリ３’に書き込む。
【０１２５】
図１７は、本発明の第３の実施の形態における記憶装置のデータ読み出し時の動作を説明するためのタイミングチャートである。なお、図１７においても、ａ０〜ａ９によって１つのパケットが構成され、同様にｂ０〜ｂ４、ｃ０、ｄ０、ｅ０〜ｅ１のそれぞれによって１つのパケットが構成される。
【０１２６】
まず、Ｔ１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、大容量低速メモリ２に記憶される最初のパケットの４つのセグメントのデータａ０〜ａ３の読み出しが開始される。
【０１２７】
Ｔ４において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータａ０〜ａ３をそれぞれバッファ１７−１〜１７−４に書き込む。
【０１２８】
Ｔ５において、セレクタ２（２２）は、大容量低速メモリ２に記憶されるデータａ４〜ａ７をページモードで読み出す。このデータａ４〜ａ７の読み出しは、１サイクルで完了する。Ｔ６において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータａ４〜ａ７をそれぞれバッファ１７−１〜１７−４に書き込む。
【０１２９】
また、Ｔ５〜Ｔ８において、セレクタ１６’は、バッファ１７−１〜１７−４に記憶されるデータａ０〜ａ３を順次出力バッファ１９に転送する。
【０１３０】
Ｔ７において、セレクタ２（２２）は、大容量低速メモリ２に記憶される端数のデータａ８〜ａ９をページモードで読み出す。また、Ｔ８において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータａ８〜ａ９をそれぞれバッファ１７−１〜１７−２に書き込む。
【０１３１】
Ｔ９〜Ｔ１２において、セレクタ１６’は、バッファ１７−１〜１７−４に記憶されるデータａ４〜ａ７を順次出力バッファ１９に転送する。
【０１３２】
Ｔ１１において、カウンタ１８は、ネットワークプロセッサ１からＳＴＡＲＴ１信号を受け、カウント値をリセットしてカウントアップを開始する。このとき、大容量低速メモリ２に記憶される次のパケットの４つのセグメントのデータｂ０〜ｂ３の読み出しが開始される。
【０１３３】
Ｔ１３〜Ｔ１４において、セレクタ１６’は、バッファ１７−１〜１７−２に記憶される端数のデータａ８およびａ９を出力バッファ１９に転送する。
【０１３４】
また、Ｔ１４において、セレクタ２（２２）は、大容量低速メモリ２から読み出したデータｂ０〜ｂ３をそれぞれバッファ１７−１〜１７−４に書き込む。
【０１３５】
Ｔ１５〜Ｔ１８において、セレクタ１６’は、バッファ１７−１〜１７−４に記憶されるデータｂ０〜ｂ３を順次出力バッファ１９に転送する。また、Ｔ１５において、セレクタ２（２２）は、端数のデータｂ４を大容量低速メモリ２からページモードで読み出し、バッファ１７−１に書き込む。Ｔ１９において、セレクタ１６’は、バッファ１７−１に記憶されるデータｂ４を出力バッファ１９に転送する。
【０１３６】
Ｔ１８〜Ｔ２０において、セレクタ２（２２）は、データｃ０、ｄ０、ｅ０〜ｅ１を小容量高速メモリ３’から読み出し、順次バッファ１７−１〜１７−２に書き込む。そして、Ｔ２０〜Ｔ２３において、セレクタ１６’が、データｃ０、ｄ０、ｅ０〜ｅ１を順次出力バッファ１９に転送する。
【０１３７】
以上説明したように、本実施の形態における記憶装置２０によれば、パケットのセグメント数が４を超えるものについては、端数のセグメントもページモードで大容量低速メモリ２に書き込むようにしたので、第２の実施の形態における記憶装置と比較して、小容量高速メモリ３’の容量をさらに削減することが可能となった。
【０１３８】
（第４の実施の形態）
図１８は、本発明の第４の実施の形態における記憶装置の基本的な概念を説明するための図である。パケットのデータを入力する場合、記憶装置３０は、外部からパケットのデータとそのデータを格納するキュー番号のみを入力し、対応するキューにそのデータを格納する。また、パケットのデータを出力する場合、記憶装置３０は、外部からキュー番号のみを入力し、そのキュー番号に対応するキューからパケットのデータを読み出して外部に出力する。
【０１３９】
図１８においては、各キューに記載されている１つの四角形が１つのセグメントを示している。たとえば、キュー＃０には２つのパケットが格納されており、右から４つのセグメントと、それに続く３つのセグメントがそれぞれ１つのパケットを構成している。右から４つ目および７つ目のセグメントに記載されている“Ｅ”は、１つのパケットの中の最後のセグメントであることを示している。
【０１４０】
図１９は、本発明の第４の実施の形態における記憶装置の概略構成を示すブロック図である。この記憶装置３０は、図示しない大容量低速メモリ（ＤＲＡＭ）と、小容量高速メモリ（ＳＲＡＭ）とに接続されており、コマンドコントローラ３１と、パケット長カウンタ３２と、パケット長管理部３３と、パケット長格納部３４と、アドレス生成部３５と、格納先検出部３６と、メモリ管理部３７と、データコントローラ３８と、データＦＩＦＯ３９〜４３とを含む。なお、実際のパケットのデータは、図示しないＤＲＡＭまたはＳＲＡＭに格納され、アドレス生成部３５がキューとしての機能を有している。
【０１４１】
アドレス生成部３５は、空きアドレス格納部５１と、リンクリスト格納部５２と、先頭／末尾ポインタ格納部５３とを含む。空きアドレス格納部５１は、ＤＲＡＭおよびＳＲＡＭのアドレスのうち、実際のデータが記憶されていない空きアドレスを格納する。
【０１４２】
先頭／末尾ポインタ格納部５３は、キュー＃０〜＃ｎのそれぞれに対応する先頭ポインタと末尾ポインタとを格納する。先頭ポインタは、対応するキューの何番目のセグメントが先頭であるかを示す情報である。また、末尾ポインタは、対応するキューの何番目のセグメントが末尾であるかを示す情報である。したがって、キューからデータが読み出される場合には、先頭ポインタが更新される。また、キューにデータを書き込む場合には、末尾ポインタが更新される。
【０１４３】
リンクリスト格納部５２は、各キューの各セグメントに対応する、実際のデータが格納されるＤＲＡＭまたはＳＲＡＭのアドレス、すなわちリンクリストを格納する。
【０１４４】
メモリ管理部３７は、ＤＲＡＭコントローラ６１と、ＳＲＡＭコントローラ６２とを含む。ＤＲＡＭコントローラ６１は、アドレス生成部３５から出力されるアドレスに従ってＤＲＡＭに対するアクセスを制御する。また、ＳＲＡＭコントローラ６２は、アドレス生成部３５から出力されるアドレスに従ってＳＲＡＭに対するアクセスを制御する。
【０１４５】
コマンドコントローラ３１は、ネットワークプロセッサからコマンドとキュー番号とを受け、コマンドに対応した制御を行なう。なお、コマンドコントローラ３１に入力されるＤＥＮＤ信号は、パケットのデータをキューに書き込むときに、パケットのデータの終了を通知するための信号である。
【０１４６】
（パケットのデータの書き込み）
コマンドコントローラ３１は、ネットワークプロセッサからパケットの書き込みコマンドおよびキュー番号を受けると、書き込みコマンドを受けたことをパケット長カウンタ３２、アドレス生成部３５およびデータＦＩＦＯ３９に通知する。
【０１４７】
データＦＩＦＯ３９は、一定のレイテンシをおいてデータ（Ｄ）の入力を開始する。このとき、パケット長カウンタ３２は、データＦＩＦＯ３９に入力されたデータ数のカウントを開始する。
【０１４８】
格納先検出部３６は、パケット長カウンタ３２の値を参照しており、パケット長カウンタ３２の値が更新されてパケットのデータが入力されたことを検知すると、アドレス生成部３５に対してデータの格納先アドレスを生成するよう指示する。
【０１４９】
アドレス生成部３５は、先頭／末尾ポインタ格納部５３に格納されるキュー番号に対応する末尾ポインタの値を読み出し、リンクリスト格納部５２を参照して末尾ポインタに対応するセグメントが格納されるＤＲＡＭまたはＳＲＡＭのアドレスを取得する。そして、空きアドレス格納部５１にアクセスしてそのアドレスの次のアドレスが空いているか否かを判定する。そのアドレスが空いていれば、空きアドレス格納部５１にそのアドレスを出力させる。また、そのアドレスが空いていなければ、空きアドレス格納部５１にアクセスしてＤＲＡＭまたはＳＲＡＭの空いているアドレスを出力させる。
【０１５０】
ＤＲＡＭコントローラ６１またはＳＲＡＭコントローラ６２は、アドレス生成部３５から出力されたアドレスに従ってＤＲＡＭまたはＳＲＡＭに対するデータの書き込みを行なう。このとき、データＦＩＦＯ３９に格納されたデータは、データＦＩＦＯ４０またはデータＦＩＦＯ４１に順次転送され、ＤＲＡＭまたはＳＲＡＭに出力される。
【０１５１】
また、アドレス生成部３５は、ＤＲＡＭまたはＳＲＡＭへのデータ書き込みに応じて、先頭／末尾ポインタ格納部５３に格納される末尾ポインタの値を更新すると共に、末尾ポインタの値にデータを書き込んだＤＲＡＭまたはＳＲＡＭのアドレスをリンクさせてリンクリスト格納部５２を更新する。
【０１５２】
以上の処理を繰り返すことにより、パケットのデータがＤＲＡＭまたはＳＲＡＭに順次格納される。コマンドコントローラ３１は、ＤＥＮＤ信号によってパケットのデータ書き込みが終了したことを検知すると、その旨をパケット長カウンタ３２およびデータＦＩＦＯ３９に通知する。パケット長カウンタ３２は、書き込んだパケットのパケット長をパケット長管理部３３に通知する。
【０１５３】
パケット長管理部３３は、パケット長カウンタ３２から受けたパケット長をパケット長格納部３４に格納することによって、各キューに格納されるパケットごとのパケット長を管理する。
【０１５４】
図２０は、本発明の第４の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。Ｔ１において、コマンドコントローラ３１が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットのデータの書き込みを開始する。
【０１５５】
Ｔ２以降において、有効なデータが入力されると、データＦＩＦＯ３９がパケットのデータ（Ｄ０〜ＤＦ）を格納し、データＦＩＦＯ４０またはデータＦＩＦＯ４１を介してＤＲＡＭまたはＳＲＡＭに順次データを出力する。
【０１５６】
Ｔ３において、コマンドコントローラ３１がＤＥＮＤ信号を受けると、パケットのデータ書き込みが終了したことをパケット長カウンタ３２およびデータＦＩＦＯ３９に通知する。パケット長管理部３３は、パケット長カウンタ３２から受けたパケット長をパケット長格納部３４に格納する。
【０１５７】
Ｔ４において、コマンドコントローラ３１が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃１）を受けると、パケットのデータの書き込みを開始する。以下、同様の処理が行なわれる。
【０１５８】
（パケットのデータの読み出し）
コマンドコントローラ３１は、ネットワークプロセッサからパケットの読み出しコマンドおよびキュー番号を受けると、読み出しコマンドを受けたことをパケット長管理部３３およびアドレス生成部３５に通知する。
【０１５９】
パケット長管理部３３は、先頭／末尾ポインタ格納部５３にアクセスしてキュー番号に対応する先頭ポインタの値を読み出し、パケット長格納部３４からそのパケットのパケット長を取得する。
【０１６０】
また、アドレス生成部３５は、先頭／末尾ポインタ格納部５３にアクセスしてキュー番号に対応する先頭ポインタの値を読み出し、リンクリスト格納部５２にアクセスして先頭ポインタの値に対応するセグメントの格納先アドレスをメモリ管理部３７に出力する。
【０１６１】
ＤＲＡＭコントローラ６１またはＳＲＡＭコントローラ６２は、アドレス生成部３５から出力されたアドレスに従ってＤＲＡＭまたはＳＲＡＭからのデータ読み出しを行なう。ＤＲＡＭまたはＳＲＡＭから読み出されたデータは、順次データＦＩＦＯ４２またはデータＦＩＦＯ４３に格納される。
【０１６２】
このとき、アドレス生成部３５は、先頭ポインタの値を更新すると共に、リンクリスト格納部５２にアクセスして次のセグメントに対応するアドレスをメモリ管理部３７に出力する。データが読み出されたアドレスについては、次のデータ書き込みで使用できるように空きアドレス格納部５１に追加する。
【０１６３】
また、データコントローラ３８は、データＦＩＦＯ４２またはデータＦＩＦＯ４３に格納されたデータを読み出して、順次ネットワークプロセッサに出力する。なお、データコントローラ３８から出力されるＱ信号は、パケットのデータを示している。ＱＳＴ信号は、パケットのデータの出力開始を示す信号である。また、ＱＥＮＤ信号は、パケットのデータの出力終了を示す信号である。
【０１６４】
アドレス生成部３５、メモリ管理部３７およびデータコントローラ３８は、パケット長管理部５３によって取得されたパケット長だけ上述の処理を繰り返すことにより、ネットワークプロセッサに対して１つのパケットのデータが出力される。
【０１６５】
図２１は、本発明の第４の実施の形態における記憶装置のパケットのデータの読み出しを説明するためのタイミングチャートである。Ｔ１において、コマンドコントローラ３１が、ネットワークプロセッサから読み出しコマンド（Ｒｄ）およびキュー番号（＃０）を受けると、パケットのデータの読み出しを開始する。
【０１６６】
Ｔ２において、コマンドコントローラ３１が、ネットワークプロセッサから次の読み出しコマンド（Ｒｄ）およびキュー番号（＃１）を受けるが、この処理は最初の読み出しコマンドの処理が終了した後に行なわれる。
【０１６７】
Ｔ３において、データコントローラ３８が、ＱＳＴ信号を出力してネットワークプロセッサにキュー＃０に対応する読み出しデータの出力開始を通知する。Ｔ４以降において、データコントローラ３８は、データＦＩＦＯ４２またはデータＦＩＦＯ４３に格納される有効なデータ（Ｑ０〜ＱＢ）をネットワークプロセッサに対して出力する。
【０１６８】
Ｔ５において、データコントローラ３８が、ＱＥＮＤ信号を出力してネットワークプロセッサに読み出しデータの出力終了を通知する。
【０１６９】
Ｔ６において、データコントローラ３８が、ＱＳＴ信号を出力してネットワークプロセッサにキュー＃１に対応する読み出しデータの出力開始を通知する。そして、Ｔ７以降において、同様の処理が行なわれる。
【０１７０】
図２２は、キュー＃０〜＃ｎと実際のパケットのデータが格納されるメモリとの対応を示す図である。図２２の左側がキュー＃０〜＃ｎを示し、図２２の右側が実際のパケットのデータが格納されるメモリを示している。たとえば、キュー＃０に格納される３つのパケット（１〜３）が、メモリ上ではそれぞれ不連続の領域に格納されるところを示している。
【０１７１】
このように、キューにおいてメモリのアドレスのみを管理することにより、各キューのメモリサイズを可変とすることができ、ＤＲＡＭやＳＲＡＭの容量を有効に利用することができる。
【０１７２】
ここで、書き込みまたは読み出し時に用いるデータＦＩＦＯのバースト長は固定ではなく可変としている。ネットワーク機器の場合、外部から入出力されるデータはパケットもしくはフレームであり、パケットもフレームもデータを受け取るまでデータ長が分からない。そのためデータを一時的に蓄えるデータＦＩＦＯを可変長に対応させることでコントロールが容易となる。
【０１７３】
以上の説明においては、記憶装置３０がＤＲＡＭまたはＳＲＡＭにパケットのデータを書き込むとしたが、第１〜第３の実施の形態において説明したように、パケットの端数のセグメントをＳＲＡＭに書き込み、それ以外の大部分のセグメントをＤＲＡＭに書き込むようにしてもよい。
【０１７４】
以上説明したように、本実施の形態における記憶装置によれば、キュー番号を受けてパケットのデータの書き込みおよび読み出しを行なうようにしたので、ネットワークプロセッサによる制御を簡略化することが可能となった。
【０１７５】
また、外部のメモリに対してはパケットのデータの書き込みおよび読み出しのみを行なうので、メモリに対するアクセス回数を減らすことができ、消費電力を削減することが可能となった。
【０１７６】
（第５の実施の形態）
図２３は、本発明の第５の実施の形態における記憶装置の基本的な概念を説明するための図である。パケットのデータを入力する場合、記憶装置３０’は、外部からパケットのデータとそのデータを格納するキュー番号のみを入力し、対応するキューにそのデータを格納する。また、パケットのデータを出力する場合、記憶装置３０は、外部からキュー番号のみを入力し、そのキュー番号に対応するキューからパケットのデータを読み出して外部に出力する。
【０１７７】
図１８に示す本発明の第１の実施の形態における記憶装置３０と異なる点は、１つのポートから入力されたパケットのデータを複数のポートに出力できるようにした点である。図２３においては、たとえば、キュー＃０の右から７つ目のセグメントに“Ｅ＆Ｍ”が記載されており、１つのパケットの中の最後のセグメントであることを示すと共に、２つ目のパケットがマルチキャストなどのような複数のポートに出力されるパケットであることを示している。
【０１７８】
本発明の第５の実施の形態における記憶装置３０’は、図１９に示す第４の実施の形態における記憶装置の概略構成と比較して、アドレス生成部の機能のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。なお、本実施の形態におけるアドレス生成部の参照番号を３５’として説明する。
【０１７９】
図２４は、本発明の第５の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。Ｔ１において、コマンドコントローラ３１が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットのデータの書き込みを開始する。
【０１８０】
Ｔ２以降において、有効なデータが入力されると、データＦＩＦＯ３９がパケットのデータ（Ｄ０〜ＤＦ）を格納し、データＦＩＦＯ４０またはデータＦＩＦＯ４１を介してＤＲＡＭまたはＳＲＡＭに順次データを出力する。
【０１８１】
Ｔ３において、コマンドコントローラ３１が、ネットワークプロセッサからマルチキャストコマンドおよびキュー番号（＃１）を受けると、現在書き込み中のパケットのデータをキュー＃１に格納するために、アドレス生成部３５’は、キュー＃１の末尾ポインタの値をキュー＃０の末尾ポインタの値と同様に更新すると共に、キュー＃１のリンクリストをキュー＃０のリンクリストと同様に更新して、同じパケットのデータにリンクさせるようにリンクリスト格納部５２を更新する。
【０１８２】
Ｔ４において、コマンドコントローラ３１が、ネットワークプロセッサからマルチキャストコマンドおよびキュー番号（＃２）を受けると、現在書き込み中のパケットのデータをキュー＃２に格納するために、アドレス生成部３５’は、キュー＃２の末尾ポインタの値をキュー＃０の末尾ポインタの値と同様に更新すると共に、キュー＃２のリンクリストをキュー＃０のリンクリストと同様に更新して、同じパケットのデータにリンクさせるようにリンクリスト格納部５２を更新する。
【０１８３】
Ｔ５において、コマンドコントローラ３１がＤＥＮＤ信号を受けると、パケットのデータ書き込みが終了したことをパケット長カウンタ３２およびデータＦＩＦＯ３９に通知する。パケット長管理部３３は、パケット長カウンタ３２から受けたパケット長をパケット長格納部３４に格納する。
【０１８４】
Ｔ６において、コマンドコントローラ３１が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットのデータの書き込みを開始する。以下、同様の処理が行なわれる。
【０１８５】
図２５は、キュー＃０〜＃ｎと実際のマルチキャストのパケットのデータが格納されるメモリとの対応を示す図である。図２５の左側がキュー＃０〜＃ｎを示し、図２５の右側が実際のマルチキャストのパケットのデータが格納されるメモリを示している。たとえば、キュー＃０に格納される３つのパケット（１〜３）が、メモリ上ではそれぞれ不連続の領域に格納されるところを示している。これら３つのパケットはマルチキャストのパケットであり、キュー＃１およびキュー＃２に格納される３つのパケットのポインタが、それぞれパケット（１〜３）が格納されるアドレスにリンクされるところを示している。
【０１８６】
なお、マルチキャストのパケットを読み出す場合には、そのパケットが幾つのキューによって共有されているかの情報を保持しておき、マルチキャストパケットが読み出された回数が共有するキューの数と一致したときに、マルチキャストのパケットが格納されるＤＲＡＭまたはＳＲＡＭのアドレスを開放するようにすればよい。
【０１８７】
以上説明したように、本実施の形態における記憶装置によれば、マルチキャストのパケットをキューに書き込む場合には、パケットのデータを外部のメモリに１回だけ書き込み、各キューのポインタをそのパケットを書き込んだアドレスにリンクさせるようにしたので、第４の実施の形態において説明した効果に加えて、外部のメモリに対するアクセスの回数をさらに減らすことができ、消費電力をさらに削減することが可能となった。
【０１８８】
また、マルチキャストのパケットを外部のメモリに１回だけ書き込むようにしたので、メモリの空き容量が不足するのを防止することが可能となった。
【０１８９】
（第６の実施の形態）
本発明の第４の実施の形態における記憶装置は、１つのコマンドで１つのパケットのデータの書き込みまたは読み出しを行なうものであった。本発明の第６の実施の形態における記憶装置は、１つの書き込みコマンドで一定量のデータのみの書き込みを行なうものである。
【０１９０】
本発明の第６の実施の形態における記憶装置は、図１９に示す第４の実施の形態における記憶装置の概略構成と比較して、コマンドコントローラの機能のみが異なる。したがって、重複する構成および機能の詳細な説明は繰り返さない。なお、本実施の形態におけるコマンドコントローラの参照番号を３１”として説明する。
【０１９１】
図２６は、本発明の第６の実施の形態における記憶装置のパケットのデータの書き込みを説明するためのタイミングチャートである。なお、図２６においては、パケットの４０セグメントのデータが書き込まれる毎に、ネットワークプロセッサから書き込みコマンドが発行される。
【０１９２】
Ｔ１において、コマンドコントローラ３１”が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットの最初の４０セグメント分のデータの書き込みを開始する。
【０１９３】
Ｔ２以降において、有効なデータが入力されると、データＦＩＦＯ３９がパケットのデータ（Ｄ０〜Ｄ３９）を格納し、データＦＩＦＯ４０またはデータＦＩＦＯ４１を介してＤＲＡＭまたはＳＲＡＭに順次データを出力する。
【０１９４】
Ｔ３において、コマンドコントローラ３１”が、ネットワークプロセッサから再度書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットの次の４０セグメント分のデータの書き込みを開始する。
【０１９５】
Ｔ４以降において、有効なデータが入力されると、データＦＩＦＯ３９がパケットのデータ（Ｄ０〜Ｄ３９）を格納し、データＦＩＦＯ４０またはデータＦＩＦＯ４１を介してＤＲＡＭまたはＳＲＡＭに順次データを出力する。
【０１９６】
Ｔ５において、コマンドコントローラ３１”が、ネットワークプロセッサから書き込みコマンド（Ｗｔ）およびキュー番号（＃０）を受けると、パケットの残りのセグメントのデータの書き込みを開始する。図２６においては、Ｄ４０〜Ｄ４５が端数のセグメントを示している。
【０１９７】
Ｔ６において、コマンドコントローラ３１”がＤＥＮＤ信号を受けると、パケットのデータ書き込みが終了したことをパケット長カウンタ３２およびデータＦＩＦＯ３９に通知する。パケット長管理部３３は、パケット長カウンタ３２から受けたパケット長をパケット長格納部３４に格納する。
【０１９８】
なお、図２６においては、最後の端数のセグメントを書き込む場合に、ネットワークプロセッサが記憶装置に書き込みコマンドを発行して一定量よりも短いデータを外部のメモリに書き込むようにしたが、ネットワークプロセッサが最後の書き込みコマンドを発行せずに、最後の一定量のデータに追加する形で、一定量のデータよりも長いデータとして外部のメモリに書き込むようにしてもよい。
【０１９９】
以上説明したように、本実施の形態における記憶装置によれば、１つの書き込みコマンドで一定量のデータのみの書き込みを行なうようにしたので、第４の実施の形態において説明した効果と同様の効果を奏することが可能となった。
【０２００】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【０２０１】
１  ネットワークプロセッサ、２  大容量低速メモリ、３，３’  小容量高速メモリ、１０，２０，３０  記憶装置、１１  入力バッファ、１２，１２’，１６，１６’，２１，２２  セレクタ、１３，１８  カウンタ、１４−１〜１４−４，１５，１７−１〜１７−４  バッファ、１９  出力バッファ、３１  コマンドコントローラ、３２  パケット長カウンタ、３３  パケット長管理部、３４  パケット長格納部、３５  アドレス生成部、３６  格納先検出部、３７  メモリ管理部、３８  データコントローラ、３９〜４３  データＦＩＦＯ、５１  空きアドレス格納部、５２  リンクリスト格納部、５３  先頭／末尾ポインタ格納部、６１  ＤＲＡＭコントローラ、６２  ＳＲＡＭコントローラ。
【図１】
2010088102.tif 000003
【図２】
2010088102.tif 000004
【図３】
2010088102.tif 000005
【図４】
2010088102.tif 000006
【図５】
2010088102.tif 000007
【図６】
2010088102.tif 000008
【図７】
2010088102.tif 000009
【図８】
2010088102.tif 000010
【図９】
2010088102.tif 000011
【図１０】
2010088102.tif 000012
【図１１】
2010088102.tif 000013
【図１２】
2010088102.tif 000014
【図１３】
2010088102.tif 000015
【図１４】
2010088102.tif 000016
【図１５】
2010088102.tif 000017
【図１６】
2010088102.tif 000018
【図１７】
2010088102.tif 000019
【図１８】
2010088102.tif 000020
【図１９】
2010088102.tif 000021
【図２０】
2010088102.tif 000022
【図２１】
2010088102.tif 000023
【図２２】
2010088102.tif 000024
【図２３】
2010088102.tif 000025
【図２４】
2010088102.tif 000026
【図２５】
2010088102.tif 000027
【図２６】
2010088102.tif 000028