"複数のキューを備え、パケットとキュー入力指示情報との入力に応じて、当該キュー入力指示情報で指定されたキューに対して、前記パケットのパケットデータを蓄積し、キュー出力指示情報の入力に応じて、当該キュー出力指示情報で指定されたキューからパケットデータを取り出して出力するパケットバッファ装置であって、固定長の記憶領域からなる複数の区画を有し、指定されたキューと対応する区画について前記パケットデータの書き込みおよび読み出しを行うメモリ部と、前記メモリ部のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出すバッファ制御部とを備え、前記バッファ制御部は、前記区画への前記パケットデータの書き込みにより、当該区画の空き容量が所定の下限閾値に達した場合、または当該区画の蓄積容量が所定の上限閾値に達した場合、当該区画に対して空き区画を連結区画として連結した後、当該連結区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続することを特徴とするパケットバッファ装置。請求項1に記載のパケットバッファ装置において、前記キューごとに、当該キューと対応する前記パケットデータを書き込む前記区画を特定する書込区画識別子、および当該区画内における書込開始位置を示す書込区画内位置情報を保持する書込位置情報保持部と、前記キューごとに、当該キューと対応する前記パケットデータを読み出す前記区画を特定する読出区画識別子、および当該区画内における読出開始位置を示す読出区画内位置情報を保持する読出位置情報保持部と、前記区画ごとに、当該区画に対する連結区画を保持する連結区画情報保持部と、前記区画のうちの空き区画を示す空き区画リストを保持する空き区画情報保持部とを備え、前記バッファ制御部は、前記パケットデータを書き込む際、前記キュー入力指示情報で指定された前記キューに関する前記書込区画識別子および前記書込区画内位置情報に基づき、前記区画に前記パケットデータを書き込むアドレスを算出して、このアドレスから順に前記パケットデータを書き込むとともに前記書込区画内位置情報を更新し、書込位置が当該区画の末尾に達したとき、前記空き区画リストから空き区画を1つ取り出して、当該空き区画の区画識別子を前記区画の前記連結区画識別子として保持し、当該連結区画識別子で前記書込区画識別子を更新するとともに、前記書込区画内位置情報を区画先頭位置に更新した後、更新後の前記書込区画識別子および前記書込区画内位置情報に基づき前記パケットデータの書き込みを継続し、前記パケットデータを読み出す際、前記キュー出力指示情報で指定された前記キューに関する前記読出区画識別子および前記読出区画内位置情報に基づき、前記区画から前記パケットデータを読み出すアドレスを算出して、このアドレスから順に前記パケットデータを読み出すとともに前記読出区画内位置情報を更新し、読出位置が当該区画の末尾に達したとき、当該区画を前記空き区画に返却して、当該区画に関する前記連結区画識別子で前記読出区画識別子を更新するとともに、前記読出区画内位置情報を区画先頭位置に更新した後、更新後の前記読出区画識別子および前記読出区画内位置情報に基づき、前記パケットデータの読み出しを継続することを特徴とするパケットバッファ装置。請求項2に記載のパケットバッファ装置において、前記キューごとに、当該キューに関する前記キュー別連結区画数を保持する連結区画数保持部と、前記区画のうちの空き区画数を保持する空き区画数保持部とを備え、前記バッファ制御部は、前記空き区画数に基づいて、前記キューごとに、当該キューの前記キュー別連結区画数の上限値である最大キュー別連結区画数を算出し、前記パケットデータを書き込む際、前記書込位置が前記区画内の所定位置に達したとき、当該キューの前記キュー別連結区画数と前記最大キュー別連結区画数とを比較することにより、区画の連結の可否を判定することを特徴とするパケットバッファ装置。請求項1~請求項3のいずれか1つに記載のパケットバッファ装置において、前記メモリ部は、前記区画ごとに、固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行い、少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファとをさらに備え、前記制御部は、入力された前記パケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファ内に所定量のデータが格納された時点で、当該データを前記メモリ部へ書き込み、入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力することを特徴とするパケットバッファ装置。複数のキューを備え、パケットとキュー入力指示情報との入力に応じて、当該キュー入力指示情報で指定されたキューに対して、前記パケットのパケットデータを蓄積し、キュー出力指示情報の入力に応じて、当該キュー出力指示情報で指定されたキューからパケットデータを取り出して出力する、パケットバッファ装置で用いられるパケットバッファ制御方法であって、メモリ部が、固定長の記憶領域からなる複数の区画を有し、指定されたキューと対応する区画について前記パケットデータの書込および読み出しを行うステップと、バッファ制御部が、前記メモリ部のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出すバッファ制御ステップとを備え、前記バッファ制御ステップは、前記区画への前記パケットデータの書き込みにより、当該区画の空き容量が所定の下限閾値に達した場合、または当該区画の蓄積容量が所定の上限閾値に達した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続することを特徴とするパケットバッファ制御方法。しかしながら、第1の従来技術によれば、特定のキューにパケットの蓄積が集中する場合にそのキューのオーバーフローを避けるためには、区画の容量を前記状態においてもパケットを蓄積できるように大きく設定しておく必要がある。このため、メモリの容量を、実際に蓄積されるデータ量よりも、極めて大きくする必要が生じる。すなわち、実際に蓄積されるデータ量は一定だが、任意の1つのキューにパケットの蓄積が集中した場合にもオーバーフローさせないためには、実際に蓄積されるデータ量をキューの個数倍した容量のメモリが必要となる。例えば、1Gbpsで最大100msのバースト的なパケット入力に対して一旦蓄積し、平滑化された出力レートで出力するためのパケットバッファ装置には、1Gbps×100ms=12.5MByteのメモリ容量が必要となる。パケットバッファ装置に8個のキューがあり、前記バースト的なパケット入力において、キュー別の割合が不明である場合、最悪、1つのキューにパケットが集中することに備える必要がある。従来例では、各キューに12.5MByteのメモリ量を割り当てる必要があり、メモリ量の合計は、100MByteとなる。このように、第1の従来技術を適用したパケットバッファ装置によれば、実際にデータを蓄積するために必要な容量よりも極めて大きい容量のメモリが必要になる、という問題がある。また、第2の従来技術によれば、割り当てる区画数が、区画数が蓄積するパケット数よりも増大するため、空きやキューへの連結状態を管理するための回路規模が増大するという問題を生じる。本発明はこのような課題を解決するためのものであり、可変長のデータを複数のキューに分配して蓄積する際、メモリ容量の増大を抑制できるパケットバッファ制御技術を提供することを目的としている。このような目的を達成するために、本発明にかかるパケットバッファ装置は、複数のキューを備え、パケットとキュー入力指示情報との入力に応じて、当該キュー入力指示情報で指定されたキューに対して、前記パケットのパケットデータを蓄積し、キュー出力指示情報の入力に応じて、当該キュー出力指示情報で指定されたキューからパケットデータを取り出して出力するパケットバッファ装置であって、固定長の記憶領域からなる複数の区画を有し、指定されたキューと対応する区画について前記パケットデータの書き込みおよび読み出しを行うメモリ部と、前記メモリ部のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出すバッファ制御部とを備え、前記バッファ制御部は、前記区画への前記パケットデータの書き込みにより、当該区画の空き容量が所定の下限閾値に達した場合、または当該区画の蓄積容量が所定の上限閾値に達した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続するようにしたものである。また、本発明にかかる上記パケットバッファ装置の一構成例は、前記キューごとに、当該キューと対応する前記パケットデータを書き込む前記区画を特定する書込区画識別子、および当該区画内における書込開始位置を示す書込区画内位置情報を保持する書込位置情報保持部と、前記キューごとに、当該キューと対応する前記パケットデータを読み出す前記区画を特定する読出区画識別子、および当該区画内における読出開始位置を示す読出区画内位置情報を保持する読出位置情報保持部と、前記区画ごとに、当該区画に対する連結区画を保持する連結区画情報保持部と、前記区画のうちの空き区画を示す空き区画リストを保持する空き区画情報保持部とを備え、前記バッファ制御部は、前記パケットデータを書き込む際、前記キュー入力指示情報で指定された前記キューに関する前記書込区画識別子および前記書込区画内位置情報に基づき、前記区画に前記パケットデータを書き込むアドレスを算出して、このアドレスから順に前記パケットデータを書き込むとともに前記書込区画内位置情報を更新し、書込位置が当該区画の末尾に達したとき、前記空き区画リストから空き区画を1つ取り出して、当該空き区画の区画識別子を前記区画の前記連結区画識別子として保持し、当該連結区画識別子で前記書込区画識別子を更新するとともに、前記書込区画内位置情報を区画先頭位置に更新した後、更新後の前記書込区画識別子および前記書込区画内位置情報に基づき前記パケットデータの書き込みを継続し、前記パケットデータを読み出す際、前記キュー出力指示情報で指定された前記キューに関する前記読出区画識別子および前記読出区画内位置情報に基づき、前記区画から前記パケットデータを読み出すアドレスを算出して、このアドレスから順に前記パケットデータを読み出すとともに前記読出区画内位置情報を更新し、読出位置が当該区画の末尾に達したとき、当該区画を前記空き区画に返却して、当該区画に関する前記連結区画識別子で前記読出区画識別子を更新するとともに、前記読出区画内位置情報を区画先頭位置に更新した後、更新後の前記読出区画識別子および前記読出区画内位置情報に基づき、前記パケットデータの読み出しを継続するようにしたものである。また、本発明にかかる上記パケットバッファ装置の一構成例は、前記キューごとに、当該キューに関する前記キュー別連結区画数を保持する連結区画数保持部と、前記区画のうちの空き区画数を保持する空き区画数保持部とを備え、前記バッファ制御部は、前記空き区画数に基づいて、前記キューごとに、当該キューの前記キュー別連結区画数の上限値である最大キュー別連結区画数を算出し、前記パケットデータを書き込む際、前記書込位置が前記区画内の所定位置に達したとき、当該キューの前記キュー別連結区画数と前記最大キュー別連結区画数とを比較することにより、区画の連結の可否を判定するようにしたものである。また、本発明にかかる上記パケットバッファ装置の一構成例は、前記メモリ部が、前記区画ごとに、固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行い、少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファとをさらに備え、前記制御部は、入力された前記パケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファ内に所定量のデータが格納された時点で、当該データを前記メモリ部へ書き込み、入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するようにしたものである。また、本発明にかかるパケットバッファ制御方法は、複数のキューを備え、パケットとキュー入力指示情報との入力に応じて、当該キュー入力指示情報で指定されたキューに対して、前記パケットのパケットデータを蓄積し、キュー出力指示情報の入力に応じて、当該キュー出力指示情報で指定されたキューからパケットデータを取り出して出力する、パケットバッファ装置で用いられるパケットバッファ制御方法であって、メモリ部が、固定長の記憶領域からなる複数の区画を有し、指定されたキューと対応する区画について前記パケットデータの書き込みおよび読み出しを行うステップと、バッファ制御部が、前記メモリ部のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出すバッファ制御ステップとを備え、前記バッファ制御ステップは、前記区画への前記パケットデータの書き込みにより、当該区画の空き容量が所定の下限閾値に達した場合、または当該区画の蓄積容量が所定の上限閾値に達した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続するようにしたものである。本発明によれば、特定のキューにパケットの蓄積が集中する場合に、そのキューがオーバーフローする前に区画の連結を行い、パケットの蓄積が少ないキューに対しては、そのキューへの区画の連結を行わず、パケットの出力による蓄積量の減少に応じて区画を解放する。したがって、キューごとに必要な容量がばらついた場合や、蓄積量が時間経過に伴って変動した場合にも、各キューに対して容量の配分が適切に行われるので、従来技術を適用したパケットバッファ装置と比較して、メモリの必要容量を小さくすることができる。次に、本発明の実施の形態について図面を参照して説明する。[第1の実施の形態]まず、図1を参照して、本発明の第1の実施の形態にかかるパケットバッファ装置10について説明する。図1は、第1の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。このパケットバッファ装置10は、パケットを送受信するパケット通信装置で用いられて、入力されたパケットをキューに格納するとともに、出力指示に応じてキューからパケットを取り出して出力する機能を有している。このパケットバッファ装置10には、主な機能部として、バッファ制御部11、メモリ部12、書込位置情報保持部13、読出位置情報保持部14、連結区画情報保持部15、および空き区画情報保持部16が設けられている。バッファ制御部11は、パケットとキュー入力指示情報との入力に応じて、当該キュー入力指示情報で指定されたキューと対応するアドレスを算出する機能と、このアドレスに基づき前記パケットデータを前記メモリ部12へ書き込むことで、キューに蓄積する機能と、キュー出力指示情報の入力に応じて、当該キュー出力指示情報で指定されたキューと対応するアドレスを算出する機能と、このアドレスに基づき前記メモリ部12からパケットデータを読み出すことで、キューからパケットを取り出して出力する機能とを有している。なお、バッファ制御部11に、外部装置図示せずから入力されるキュー出力指示情報を、前記外部装置が生成するための情報として、各キューの蓄積状態を表すキュー情報を前記外部装置に対して出力する機能を設けてもよい。また、本実施の形態では、キューの個数はN2以上の整数であり、各キューに、前記キューを特定するための、0からN-1までの整数のうちいずれかの値をとる、キュー識別子が対応付けられている。メモリ部12は、バッファ制御部11から、パケットデータと前記パケットデータを書き込むアドレスを受け取って、前記アドレスに対応するメモリセルに前記パケットデータを保持する機能と、バッファ制御部11から、パケットデータを読み出すアドレスを受け取って、前記アドレスに対応するメモリセルが保持するパケットのデータをバッファ制御部11に出力する機能とを有している。図2は、メモリ部の構成例である。メモリ部12は、図2に示すように、バッファ制御部11によって、複数の互いに重ならないアドレス範囲で区分けされ、前記区分けされた複数の区画として管理される。本実施の形態では、M個の区画に区分けされ、1区画がSワードからなる。1ワードのビット数をWとすると、各区画の容量はS×Wである。また、上記Mは、キューの個数N以上の値をとる整数である。前記Mに対する制約は、すべてのキューに同時にパケットを蓄積可能とするために必要な制約であり、すべてのキューに同時にパケットを蓄積することが必要とされない実施形態では、前記制約は必要ない。また、メモリ部12のアドレス順に区分けしたときの各区画に割り付けられた番号を、前記区画を特定するための区画識別子とし、その値は0からM-1までの整数のうちいずれかの値をとる。また、上記Sは、自然数であり値に制限はない。ただし、S×W×Mの値は、パケットバッファが蓄積すべきデータの全ビット数より大きくすべき値なのでWやMの値の範囲に定めがあり、パケットバッファが蓄積すべきデータの全ビット数が規定されている場合には、Sのとりうる範囲が前記式によって実用上制約を受ける。なお、ある区画内のメモリ領域にデータ書き込みや読み出しを行うとき、前記区画内の位置例えば区画先頭ワードからのワード数を2進数として表現するポインタを使用するが、前記ポインタ値の演算区画をFIFOとして使用するときのポインタ値更新などにおいて、Sを2のべき乗とすると、前記の演算回路を簡易に構成することができる。上記Mの値は、キューの個数N以上の値とすべきである。M=Nのとき、各キューに1個の区画を割り当てることができるが、M<Nの場合は、区画が割り当てられないキューが生じる。パケットバッファが蓄積すべきデータの全ビット数が規定されているとき、Mの値を大きくすると、各区画のビット数を小さくすることができる。これにより、キューに割り当て済である区画のうち、データを記憶していない空き領域の大きさを小さくすることが可能である空き領域は最悪1区画分のメモリ量程度になるため。すなわち、Mを大きくすると、メモリの利用効率が向上し、必要なメモリ量を、パケットバッファが蓄積すべきデータの全ビット数に近づけることができる。各キューに区画を割り当てたものの蓄積に利用されなかったという状況が最も空きが多い状況であるため、蓄積に使用された区画数/全区画数=M-N/Mがメモリ利用効率に相当する値になる。ただし、Mを大きくすると、バッファ制御部11が管理すべき区画数が増えるので、各キューの区画連結の状態を保持する連結区画情報保持部15や、空き区画を管理する空き区画情報保持部16の回路規模が増大する。つまり、メモリ利用効率を100に近づけようとすると上記回路規模の増大が問題となるので、前記利用効率を80から90とする場合の指標である、M=N×5~N×10程度が実用的な範囲である。書込位置情報保持部13は、各キューについての、パケットのデータをメモリに書き込み始める区画を特定する区画識別子である書込区画識別子と、前記区画内での書き込み始める位置を示す書込区画内位置情報とを保持する機能と、バッファ制御部11からキュー識別子の値を受け取って、前記キュー識別子によって特定されたキューの、書込区画識別子と書込区画内位置情報の値をバッファ制御部11に出力する機能、あるいは、バッファ制御部11からキュー識別子の値と、前記キュー識別子によって特定されたキューの、更新された書込区画識別子と書込区画内位置情報の値を受け取って、前記キューについて保持していた書込区画識別子と書込区画内位置情報の値を、前記更新された書込区画識別子と書込区画内位置情報の値に書き換える機能とを有している。これら機能は、キュー識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する書込区画識別子の値と書込区画内位置情報の値とを保持するメモリ回路によって実現可能である。読出位置情報保持部14は、各キューについての、パケットのデータをメモリから読み出し始める区画を特定する区画識別子である読出区画識別子と、前記区画内での読み出し始める位置を示す読出区画内位置情報とを保持する機能と、バッファ制御部11からキュー識別子の値を受け取って、前記キュー識別子によって特定されたキューの、読出区画識別子と読出区画内位置情報の値をバッファ制御部11に出力する機能、あるいは、バッファ制御部11からキュー識別子の値と、前記キュー識別子によって特定されたキューの、更新された読出区画識別子と読出区画内位置情報の値を受け取って、前記キューについて保持していた読出区画識別子と読出区画内位置情報の値を、前記更新された読出区画識別子と読出区画内位置情報の値に書き換える機能とを有している。これら機能は、キュー識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する読出区画識別子の値と読出区画内位置情報の値とを保持するメモリ回路によって実現可能である。連結区画情報保持部15は、各区画についての、前記区画に連結される区画を特定する区画識別子である連結区画識別子を保持する機能と、バッファ制御部11から区画識別子の値を受け取って、前記区画識別子によって特定された区画に連結される区画を特定する連結区画識別子の値を出力する機能、あるいは、バッファ制御部11から区画識別子の値と、前記区画識別子によって特定された区画の、更新された連結区画識別子の値を受け取って、前記区画について保持していた連結区画識別子の値を、前記更新された読出区画識別子と読出区画内位置情報の値に書き換える機能とを有している。これら機能は、区画識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する連結区画識別子の値を保持するメモリ回路によって実現可能である。なお、本実施の形態では、連結区画情報保持部15は、連結区画識別子の値としてMを保持することが可能であり、前記値は連結された区画がないことを意味する。空き区画情報保持部16は、バッファ制御部11がパケットのデータが蓄積されていない区画を空き区画のリストとして管理するために、空き区画リストの最初の区画を特定する区画識別子である空き区画連結開始識別子と、空き区画リストの最後の区画を特定する区画識別子である空き区画連結終了識別子とを保持する機能と、バッファ制御部11に、空き区画連結開始識別子と空き区画連結終了識別子の値を出力する機能、あるいは、バッファ制御部11から、更新された空き区画連結開始識別子と空き区画連結終了識別子の値を受け取って、保持していた空き区画連結開始識別子と空き区画連結終了識別子の値を、前記更新された値に変更する機能とを有している。これら機能は、区画識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する空き区画連結開始識別子と空き区画連結終了識別子の値を保持するメモリ回路によって実現可能である。[第1の実施の形態の書込動作]次に、図3を参照して、本実施の形態にかかるパケットバッファ装置10において、キュー入力指示情報の入力に応じて、入力されたパケットのパケットデータを、順次、ワード単位で、メモリ部12内の対応する区画へ書き込む際の書込動作について説明する。図3は、第1の実施の形態にかかる書込動作を示す状態遷移図である。この書込動作において、次のような制御変数が用いられる。書込区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを書き込む区画を特定するための識別子である。書込区画内位置情報は、前記キューごと設けられて、当該キューの書込区画識別子で特定される区画内における書込開始位置を示す情報である。アドレスは、書込区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。変数Sは、区画に含まれるワード数である。連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。区画連結位置は、区画に対するパケットデータの書き込み処理中に、当該区画に対して新たな区画を連結をするための区画連結信号を出力するタイミングを特定するための、区画内における書込位置情報である。変数Mは、メモリ部12に設けられた区画の全区画数であり、書込区画識別子の最大値に相当する。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態ステップ100に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。バッファ制御部11は、初期化状態ステップ100において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態ステップ101に遷移する。[入力待ち状態]入力待ち状態ステップ101において、パケットとキュー入力指示情報の入力があった時点で、書込位置情報取得状態ステップ102に遷移する。前記入力がない間、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態ステップ101に留まる。[書込位置情報取得状態]書込位置情報取得状態ステップ102において、バッファ制御部11は、書込位置情報保持部13に対して、入力されたキュー入力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、書込区画識別子と書込区画内位置情報の値を書込位置情報保持部13から受け取って、アドレス算出状態ステップ103に遷移する。[アドレス算出状態]アドレス算出状態ステップ103において、バッファ制御部11は、書込区画識別子と書込区画内位置情報との値に基づいて、パケットデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=書込区画識別子値×S書込区画内位置情報値、で算出する。前記算出後、バッファ制御部11は、データワード書き込み状態ステップ104に遷移する。[データワード書き込み状態]データワード書き込み状態ステップ104において、バッファ制御部11は、算出されたアドレスと、入力されたパケットから切り出された1ワード分のデータを、メモリ部12に出力する。これにより、メモリ部12では、前記アドレスのメモリセルに前記1ワード分のデータが保持される。前記出力後、以下の条件に応じて、書込区画内位置更新状態ステップ105、あるいは、連結区画情報取得状態ステップ106のいずれかに一方に遷移する。上記書込区画内位置更新状態ステップ105への遷移条件は、書込区画内位置が未満了の場合、すなわち、書き込み中の区画への書き込みを継続して行うことができる場合であり、本実施の形態では書込区画内位置情報値<S-1が、前記条件となる。なお、書込区画内位置情報は、書き込みを行う区画内のワードの番号にあたる。実施例では、区画先頭のワードの番号を0としており、区画内のワード数はSなので、区画最後のワードの番号はS-1になる。また、書込区画内位置が未満了とは、書込区画内位置情報値が区画最後のワードより手前区画先頭側にあるということであり、書込区画内位置情報値<S-1が、前記条件を表す式となる。一方、上記連結区画情報取得状態ステップ106への遷移条件は、書込区画内位置が満了の場合、すなわち、書込区画内位置が最大値を超えた場合であり、本実施の形態では書込区画内位置値≧S-1が、前記条件となる。なお、書込区画内位置値はS-1が最大値となり、書込区画内位置情報値>S-1には通常ならない。なお、区画先頭のワードの位置における書込区画内位置情報値を0と規定したとき、区画最後のワードの位置における書込画内位置情報値はS-1となる。区画内のワード数はSであり、書込区画内位置情報値が区画内のワードを指す場合には、書込区画内位置情報値がS以上となることや負の値をとることは発生しない。[書込区画内位置更新状態]書込区画内位置更新状態ステップ105において、バッファ制御部11は、書込区画内位置を書き込みを終えた位置から次の位置に更新する。本実施の形態では、書込区画内位置情報の値を1する。前記更新後、以下の条件に応じて、前述したアドレス算出状態ステップ103、あるいは、書込位置情報更新状態ステップ108のいずれか一方に遷移する。上記アドレス算出状態ステップ103への遷移条件は、パケットに未処理のデータが残っている場合、すなわち、さらにパケットからデータを切り出してメモリへの書き込みが可能な場合である。一方、上記書込位置情報更新状態ステップ108への遷移条件は、パケットに未処理のデータが残っていない場合、すなわち、パケットのデータの書き込みを終えた場合である。また、書込区画内位置更新状態ステップ105において、バッファ制御部11は、書込区画内位置情報の値が、区画連結位置の値に一致したとき、区画連結信号を生成する。前記区画連結信号を契機として、後述する区画連結に関わる状態遷移の処理により、空き区画のリストから空き区画の1つを外して、書き込み中の区画に対して保持された連結区画識別子を前記空き区画を示す値とする区画連結が行われる。[連結区画情報取得状態]連結区画情報取得状態ステップ106において、バッファ制御部11は、連結区画情報保持部15に対して、書込区画識別子の値を出力し、連結区画情報保持部15から、書き込み中の区画に連結されている区画を特定する連結区画識別子の値を入力する。なお、本実施の形態では、前記連結区画識別子値としてMを入力した場合、連結されている区画がないことを意味する。連結区画情報取得状態ステップ106において、バッファ制御部11は、前記連結区画識別子値の入力後、以下の条件に応じて、書込区画情報更新状態ステップ107、あるいは、データワード廃棄状態ステップ109のいずれか一方に遷移する。上記書込区画情報更新状態ステップ107への遷移条件は、連結区画ありの場合、すなわち、前記入力した連結区画識別子値が0からM-1までの範囲の整数であった場合である。一方、上記データワード廃棄状態ステップ109への遷移条件は、連結区画なしの場合、すなわち、前記入力した連結区画識別子値がMであった場合である。[書込区画情報更新状態]書込区画情報更新状態ステップ107において、バッファ制御部11は、書込区画識別子の値を連結区画識別子の値に更新する。併せて、書込区画内位置の値を初期化する。本実施の形態では書込区画内位置の値を0に更新する。すなわち、書き込みを行う位置を、連結された区画の先頭位置に変更する。前記更新後、以下の条件に応じて、前述したアドレス算出状態ステップ103、あるいは、書込位置情報更新状態ステップ108のいずれか一方に遷移する。上記アドレス算出状態ステップ103への遷移条件は、パケットに未処理のデータが残っている場合、すなわち、さらにパケットからデータを切り出してメモリへの書き込みが可能な場合である。一方、上記書込位置情報更新状態ステップ108への遷移条件は、パケットに未処理のデータが残っていない場合、すなわち、パケットのデータの書き込みを終えた場合である。[書込位置情報更新状態]書込位置情報更新状態ステップ108において、バッファ制御部11は、入力されたキュー入力指示情報に含まれるキュー識別子の値と、更新された書込区画識別子と書込区画内位置情報の値とを、書込位置情報保持部13に出力し、書込位置情報保持部13が保持している値を更新する。すなわち、パケットデータのメモリ部12への書き込みによって、書込区画識別子と書込区画内位置情報が更新されるが、これらの値を前記パケットデータの書き込みを完了した時点で、書込位置情報保持部13での保持値に反映させ、入力待ち状態ステップ101に遷移する。[データワード廃棄状態]データワード廃棄状態ステップ109において、バッファ制御部11は、残データありの場合、すなわち、パケットに未処理のデータが残っている場合、前記データをメモリに書き込むことなく廃棄する。また、残データなしの場合、すなわち、パケットの最後に至った時点で、入力待ち状態ステップ101に遷移する。[第1の実施の形態の読出動作]次に、図4を参照して、本実施の形態にかかるパケットバッファ装置10において、キュー出力指示情報の入力に応じて、指定されたキューのパケットデータを、メモリ部12内の対応する区画から、順次、ワード単位で、読み出す際の読出動作について説明する。図4は、第1の実施の形態にかかる読出動作を示す状態遷移図である。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態ステップ110に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。バッファ制御部11は、初期化状態ステップ110において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態ステップ111に遷移する。[入力待ち状態]入力待ち状態ステップ111において、バッファ制御部11は、キュー出力指示情報の入力があった時点で、読出位置情報取得状態ステップ112に遷移する。前記入力がない間は、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態ステップ111に留まる。[読出位置情報取得状態]読出位置情報取得状態ステップ112において、バッファ制御部11は、読出位置情報保持部14に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、読出区画識別子と読出区画内位置情報の値を読出位置情報保持部14から受け取って、アドレス算出状態ステップ113に遷移する。[アドレス算出状態]アドレス算出状態ステップ113では、読出区画識別子と読出位置情報との値に基づいて、パケットのデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=読出区画識別子値×S読出位置情報値、で算出する。前記算出後、データワード読み出し状態ステップ114に遷移する。[データワード読み出し状態]データワード読み出し状態ステップ114において、バッファ制御部11は、算出されたアドレスをメモリ部12に出力し、前記アドレスに対応するメモリ部12内のメモリセルに保持された1ワード分のデータをメモリ部12から読み出す。前記読み出し後、以下の条件に応じて、読出区画内位置更新状態ステップ115、あるいは、連結区画情報取得状態ステップ116のいずれかに一方に遷移する。上記読出区画内位置更新状態ステップ115への遷移条件は、読出区画内位置が未満了の場合、すなわち、読み出し中の区画からの読み出しを継続して行うことができる場合であり、本実施の形態では読出区画内位置情報値<S-1が、前記条件となる。なお、読出区画内位置情報は、読み出しを行う区画内のワードの番号にあたる。本実施の形態では、区画先頭のワードの番号を0としており、区画内のワード数はSなので、区画最後のワードの番号はS-1になる。また、読出区画内位置が未満了とは、読出区画内位置情報値が区画最後のワードより手前区画先頭側にあるということであり、読出区画内位置情報値<S-1が、前記条件を表す式となる。一方、上記連結区画情報取得状態ステップ116への遷移条件は、読出区画内位置が満了の場合、すなわち、読出区画内位置が最大値を超えた場合であり、本実施の形態では、読出区画内位置情報値≧S-1が、前記条件となる。なお、読出区画内位置情報値はS-1が最大値となり、読出区画内位置情報値>S-1には通常ならない。なお、区画先頭のワードの位置における読出区画内位置情報値を0と規定したとき、区画最後のワードの位置における読出画内位置情報値はS-1となる。区画内のワード数はSであり、読出区画内位置情報値が区画内のワードを指す場合には、読出区画内位置情報値がS以上となることや負の値をとることは発生しない。前記異常値を発生させないようにするための方法は、読出区画内位置情報値を監視しておき、値に異常が生じた場合に、装置異常等の処理リセットなどを行うことである。また、読出区画内位置情報値を表現する全ビットが1となるとき、読出区画内位置情報値=S-1であるように、Sの値を決めるSを2のべき乗とすることで可能ことで、異常値は発生しなくなる。これは、読出区画内位置情報値としてどのような値をとったとしても正常範囲に入るためである。また、読出区画内位置情報値がS-1となるときは、読出位置が区画最後のワードに到達したことを意味する。[読出区画内位置更新状態]読出区画内位置更新状態ステップ115において、バッファ制御部11は、読出区画内位置を読み出しを終えた位置から次の位置に更新する。本実施の形態で読出区画内位置の値を1する。前記更新後、以下の条件に応じて、アドレス算出状態ステップ113、あるいは、読出位置情報更新状態ステップ117のいずれか一方に遷移する。上記アドレス算出状態ステップ113への遷移条件は、パケットに未処理のデータが残っている場合、すなわち、読み出していないパケットのデータが残っている場合である。一方、上記読出位置情報更新状態ステップ117への遷移条件は、パケットに未処理のデータが残っていない場合、すなわち、パケットのデータの読み出しを終えた場合である。[連結区画情報取得状態]連結区画情報取得状態ステップ116において、バッファ制御部11は、連結区画情報保持部15に対して、読出区画識別子の値を出力し、連結区画情報保持部15から、読み出し中の区画に連結されている区画を特定する連結区画識別子の値を受け取って、読出区画情報更新状態ステップ118に遷移する。また、連結区画情報取得状態ステップ116において、バッファ制御部11は、区画解放信号を生成する。前記区画解放信号を契機として、後述する区画解放に関わる状態遷移の処理により区画を空き区画のリストに戻す区画解放が行われる。[読出区画情報更新状態]読出区画情報更新状態ステップ118において、バッファ制御部11は、読出区画識別子の値を連結区画識別子の値に更新する。併せて、読出区画内位置の値を初期化する。本実施の形態では読出区画内位置の値を0に更新する。すなわち、読み出しを行う位置を、連結された区画の先頭位置に変更する。前記更新後、以下の条件に応じて、アドレス算出状態ステップ113、あるいは、読出位置情報更新状態ステップ117のいずれか一方に遷移する。上記アドレス算出状態ステップ113への遷移条件は、パケットに未処理のデータが残っている場合、すなわち、読み出していないパケットのデータが残っている場合である。一方、上記読出位置情報更新状態ステップ117への遷移条件は、パケットに未処理のデータが残っていない場合、すなわち、パケットのデータの読み出しを終えた場合である。[読出位置情報更新状態]読出位置情報更新状態ステップ117において、バッファ制御部11は、バッファ制御部11は、読出位置情報保持部14に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値と、更新された読出区画識別子と読出区画内位置情報の値とを、読出位置情報保持部14に出力し、読出位置情報保持部14が保持している値を更新する。すなわち、パケットデータをメモリ部12から読み出すことによって、読出区画識別子と読出区画内位置情報が更新されるが、これらの値を前記パケットデータの読み出しを完了した時点で、読出位置情報保持部14での保持値に反映させ、入力待ち状態ステップ111に遷移する。[第1の実施の形態の区画連結動作]次に、図5を参照して、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。図5は、区画連結動作を示す状態遷移図である。前述した図4の書込区画内位置更新状態ステップ105において、区画連結信号が生成された場合、バッファ制御部11は、図5の状態遷移に基づいて、区画連結動作を実行する。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態ステップ120に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。初期化状態ステップ120において、バッファ制御部11は、連結区画情報保持部15と空き区画情報保持部16に対して、全区画を空き区画リストに加える初期化を行う。本実施の形態では、空き区画情報保持部16に空き区画連結開始識別子の値として0を、空き区画連結終了識別子の値としてM-1を出力することで、空き区画情報保持部16が保持する空き区画連結開始識別子と空き区画連結終了識別子を初期化する。さらに、バッファ制御部11は、連結区画情報保持部15に、全区画識別子について、連結区画識別子の値として前記区画識別子1を出力することで、連結区画情報保持部15が保持する各区画識別子0~M-1に対する連結区画識別子[m]m=0~M-1の値を初期化する。バッファ制御部11は、初期化状態ステップ120において、初期化が完了した時点で、区画連結信号を待つ、区画連結信号待ち状態ステップ121に遷移する。[区画連結信号待ち状態]区画連結信号待ち状態ステップ121において、バッファ制御部11は、区画連結信号があった時点で、空き区画情報取得状態ステップ122に遷移する。前記信号がない間は遷移しない。なお、区画連結信号があった時点での、バッファ制御部11のパケットデータ書込の対象となっている区画を特定する書込区画識別子の値を保持しておく。[空き区画情報取得状態]空き区画情報取得状態ステップ122において、バッファ制御部11は、空き区画情報保持部16から、空き区画連結開始識別子の値を入力する。前記入力後、以下の条件に応じて、未連結状態ステップ123、あるいは、空き区画取得状態ステップ124のいずれかに一方に遷移する。上記未連結状態ステップ123への遷移条件は空き区画なしの場合であり、本実施の形態では上記取得した空き区画連結開始識別子の値がMの場合である。一方、上記空き区画取得状態ステップ124への遷移条件は空き区画ありの場合であり、本実施の形態では、上記取得した空き区画連結開始識別子の値が有効な区画識別子の範囲0からM-1までの整数にある場合である。[空き区画取得状態]空き区画取得状態ステップ124において、バッファ制御部11は、連結区画情報保持部15に対して、空き区画情報取得状態ステップ122で空き区画情報保持部16から取得した空き区画連結開始識別子の値を区画識別子として出力し、連結区画情報保持部15から、前記区画識別子に連結されている区画を特定する連結区画識別子の値を入力する。さらに、空き区画情報保持部16に対して、空き区画連結開始識別子の値を、前記入力した連結区画識別子の値に更新する。なお、前記入力した連結区画識別子の値が、連結されている区画がないことを意味する連結区画識別子の値である場合は、さらに、空き区画情報保持部16に対して、空き区画連結終了識別子の値を、連結されている区画がないことを意味する連結区画識別子の値に更新する。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。その後、連結更新状態ステップ125に遷移する。これにより、空き区画のリストから1つの区画を取り外したことになる。[連結更新状態]連結更新状態ステップ125において、バッファ制御部11は、連結区画情報保持部15に対して、区画連結信号があった時点で保持した書込区画識別子の値と、空き区画情報取得状態ステップ122で空き区画情報保持部16から取得した空き区画連結開始識別子の値とを出力することで、前記書込区画の連結区画識別子の値を、前記空き区画連結開始識別子の値へと書き換える。これにより、書込が満了を向える書込区画内位置が満了する予定の区画に、空き区画のリストから取り外した1つの区画を連結したことになる。その後、区画連結信号待ち状態ステップ121に遷移する。[未連結状態]未連結状態ステップ123において、バッファ制御部11は、連結区画情報保持部15に対して、区画連結信号があった時点で保持した書込区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記書込区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換え、区画連結信号待ち状態ステップ121に遷移する。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。[第1の実施の形態の区画解放動作]次に、図6を参照して、本実施の形態にかかるパケットバッファ装置10の区画解放動作について説明する。図6は、区画解放動作を示す状態遷移図である。前述した図4の連結区画情報取得状態ステップ116において、区画解放信号が生成された場合、バッファ制御部11は、図6の状態遷移に基づいて、区画解放動作を実行する。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態ステップ130に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。バッファ制御部11は、初期化状態ステップ130において、初期化が完了した時点で、区画解放信号を待つ、区画解放信号待ち状態ステップ131に遷移する。[区画解放信号待ち状態]区画解放信号待ち状態ステップ131において、区画解放信号があった時点で、空き区画情報取得状態ステップ132に遷移する。前記信号がない間は遷移しない。なお、区画解放信号があった時点での、バッファ制御部11のパケットデータ読出の対象となっている区画を特定する読出区画識別子の値を保持しておく。[空き区画情報取得状態]空き区画情報取得状態ステップ132において、バッファ制御部11は、空き区画情報保持部16から、空き区画連結終了識別子の値を受け取って、空き区画返却状態ステップ133に遷移する。[空き区画返却状態]空き区画返却状態ステップ133において、バッファ制御部11は、連結区画情報保持部15に対して、区画解放信号があった時点で保持した読出区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記読出区画識別子の値によって特定される区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換える。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。さらに、連結区画情報保持部15に対して、空き区画情報取得状態ステップ132で入力した空き区画連結終了識別子の値と、区画解放信号があった時点で保持した読出区画識別子の値とを出力し、前記空き区画連結終了識別子によって特定される区画の連結区画識別子の値を、前記読出区画識別子の値へと書き換える。ただし、空き区画連結終了識別子の値が、連結されている区画がないことを意味する連結区画識別子の値であった場合は、前記書き換えを行わない。これらにより、読出が満了した区画を空き区画のリストの最後の区画に連結したことになる。前記の後、空き区画更新状態ステップ134に遷移する。[空き区画更新状態]空き区画更新状態ステップ134では、バッファ制御部11は、空き区画情報保持部16に対して、空き区画連結終了識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。ただし、空き区画情報取得状態ステップ132で入力した空き区画連結終了識別子の値が、連結されている区画がないことを意味する連結区画識別子の値であった場合は、前記に加えて、空き区画情報保持部16に対して、空き区画連結開始識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。その後、区画解放信号待ち状態ステップ131に遷移する。[第1の実施の形態の効果]このように、本実施の形態は、パケットバッファ装置10に、固定長の記憶領域からなる複数の区画を有し、指定されたキューと対応する区画について前記パケットデータの書き込みおよび読み出しを行うメモリ部12とを備え、バッファ制御部11により、前記メモリ部12のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部12のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出すようにしたものである。また、これに加えて、バッファ制御部11により、前記区画への前記パケットデータの書き込みが満了した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続するようにしたものである。より具体的には、本実施の形態は、パケットバッファ装置10に、前記キューごとに、当該キューと対応する前記パケットデータを書き込む前記区画を特定する書込区画識別子、および当該区画内における書込開始位置を示す書込区画内位置情報を保持する書込位置情報保持部13と、前記キューごとに、当該キューと対応する前記パケットデータを読み出す前記区画を特定する読出区画識別子、および当該区画内における読出開始位置を示す読出区画内位置情報を保持する読出位置情報保持部14と、前記区画ごとに、当該区画に対する連結区画を保持する連結区画情報保持部15と、前記区画のうちの空き区画を示す空き区画リストを保持する空き区画情報保持部16とを備えている。そして、前記パケットデータを書き込む際、前記バッファ制御部11により、前記キュー入力指示情報で指定された前記キューに関する前記書込区画識別子および前記書込区画内位置情報に基づき、前記区画に前記パケットデータを書き込むアドレスを算出して、このアドレスから順に前記パケットデータを書き込むとともに前記書込区画内位置情報を更新し、書込位置が当該区画の末尾に達したとき、前記空き区画リストから空き区画を1つ取り出して、当該空き区画の区画識別子を前記区画の前記連結区画識別子として保持し、当該連結区画識別子で前記書込区画識別子を更新するとともに、前記書込区画内位置情報を区画先頭位置に更新した後、更新後の前記書込区画識別子および前記書込区画内位置情報に基づき前記パケットデータの書き込みを継続するようにしたものである。さらに、前記パケットデータを読み出す際、前記バッファ制御部11により、前記キュー出力指示情報で指定された前記キューに関する前記読出区画識別子および前記読出区画内位置情報に基づき、前記区画から前記パケットデータを読み出すアドレスを算出して、このアドレスから順に前記パケットデータを読み出すとともに前記読出区画内位置情報を更新し、読出位置が当該区画の末尾に達したとき、当該区画を前記空き区画に返却して、当該区画に関する前記連結区画識別子で前記読出区画識別子を更新するとともに、前記読出区画内位置情報を区画先頭位置に更新した後、更新後の前記読出区画識別子および前記読出区画内位置情報に基づき、前記パケットデータの読み出しを継続するようにしたものである。これにより、本実施の形態は、特定のキューにパケットの蓄積が集中する場合に、そのキューがオーバーフローする前に区画の連結を行う。また、パケットの蓄積が少ないキューに対しては、そのキューへの区画の連結を行わない。また、パケットの出力による蓄積量の減少に応じて区画を解放する。したがって、キューごとに必要な容量がばらついた場合や、蓄積量が時間経過に伴って変動した場合にも、各キューに対して容量の配分が適切に行われるので、従来技術を適用したパケットバッファ装置と比較して、メモリの必要容量を小さくすることができる。この効果を従来技術の説明で用いた例により説明する。本実施の形態では、パケットがキューに蓄積される過程で、既にキューに割り当てていたメモリ量のうち空きが少なくなってきたとき追加の割り当てを行う。例えば、メモリを64KByteの容量を持つ区画に分割しておき、キューに割り当て済みの区画の空きが2KByteとなった時点で、新たな区画をそのキューに追加する場合、各キューに割り当て済みの区画に生じる空き容量の最大値は、新たな区画を割り当てる条件である2KByte新たな1個の区画の容量である64KByteであるため、66KByteとなる。したがって、すべてのキューで前記空き容量が生じた状況が、最もメモリの使用率が低い状況であるため、蓄積に必要となる12.5MByteに、前記空き容量の合計値66KByte×8を加えた値である13MByteが、本実施の形態での必要なメモリ量となる。この例で示されるように、従来は100MByteのメモリ量を必要としていたのに対して13MByteで済むため、メモリ量を87削減することができるという効果が、本実施の形態にある。また、本実施の形態は、各キューに蓄積するパケットのデータを保持するメモリの領域を、区画が連結された仮想的なFIFOバッファとして管理するため、第1の従来技術を適用したパケットバッファ装置と同じく、複雑なバッファ制御が不要である。また、本実施の形態は、1つの区画内ではメモリにアクセスするときのアドレスを連続させることができ、従来技術を適用したパケットバッファ装置と同じく、メモリに対するバーストアクセスを可能とする。これにより、1つのキューからの出力が連続して行われるような用途で使用される場合、メモリからの読み出しを高速に行うことができるため、キューからのパケット取り出しが速い。メモリアクセスするときのアドレスを連続させることが可能であるのは、具体的には、メモリ部12が複数の互いに重ならないアドレス範囲で区分けして、これらを各区画とすることによって行う。すなわち、各区画にアドレスの範囲を定めておくことにとって、ある区画にアクセスしたときのアドレスの次のアドレスが、前記区画に定められたアドレスの範囲内であれば、前記次のアドレスにアクセスすると、前記区画内のメモリ領域にアクセスしたことになるからである。また、本実施の形態は、区画内の書き込み位置が所定の位置に達したこと、すなわち、区画に対する前記パケットデータの書き込みにより、当該区画の空き容量が予め設定した所定の下限閾値に達した場合、または当該区画の蓄積容量が予め設定した所定の上限閾値に達した場合、を条件として、次に書き込みを行う区画の連結を行うため、書き込み中の区画が満杯になる前に、次の区画を準備することができるため、区画をまたぐ書き込みを行う場合にも、書き込みが途切れず、キューへのパケット蓄積が速い。この際、具体的には、バッファ制御部11の書込動作において、前述したデータワード書き込み状態ステップ104から書込区画内位置更新状態ステップ105への遷移条件は、当該区画の空き容量が下限閾値に達していない場合、または当該区画の蓄積容量が所定の上限閾値に達していない場合、という条件となる。また、前述したデータワード書き込み状態ステップ104から連結区画情報取得状態ステップ106への遷移条件は、当該区画の空き容量が下限閾値に達した場合、または当該区画の蓄積容量が所定の上限閾値に達した場合、という条件となる。バッファ制御部11は、2つの区画にまたがってパケットデータを書き込む際、前区画への書き込みを終えてから、後区画への書き込みを始めることになる。この場合、この区画を跨いだとき、区画連結のためにパケットデータの書き込みが中断すると、スループットの低下が発生したり、中断期間に入力されるパケットデータを一時的に保持するためのバッファが必要となるなど、各種の問題が生じる。したがって、パケットデータの書き込みの中断を回避することが重要となる。本実施の形態では、区画へのパケットデータの書き込みが区画末尾まで満了した時点で区画連結を開始するのではなく、書き込み満了時点よりも区画連結に要する時間だけ前の時点で、区画連結を開始するようにしたものである。これにより、書き込み満了時には、すでに連結されている新たな区画に対して、直ちに、書き込みを開始することができるため、書き込み中断の発生を回避することが可能となる。したがって、前記下限閾値および上限閾値は、区画の連結に要する時間、すなわち連結所要時間に相当する記憶容量となる。すなわち、連結所要時間内に最大レートで書き込みできるデータ量を下限閾値とし、前記前区画の空き容量がこの下限閾値に達した時点で、後区画の連結を開始することになる。なお、前記上限閾値は、1区画分の容量から前記下限閾値を減算したものとなる。下限閾値の具体的計算方法は、例えば、メモリ部12への書き込み最大レートをRwとし、連結所要時間をTcとした場合、下限閾値Lthは、Lth=Rw×Tcで求められる。書き込み最大レートRwが1Gbit/secであり、区画の連結に、125MHzクロックで8サイクル分を要する場合、Lth=109[bit/sec]×8/125×106[1/sec]=64[bit]=8[Byte]となる。したがって、上記計算例では、前区画に対してパケットデータを書き込み中に、当該前区画の空き容量が8Byteに達した場合、後区画の連結が開始されることになる。このため、前区画に対して残りの8Byteを書き終えた時点、すなわち、当該前区画への書き込みが満了した時点で、後区画の連結が完了していることになり、この時点において、パケットデータの書き込みを中断させることなく、後区画へのパケットデータの書き込みを開始することができる。なお、連結所要時間が1サイクル以内の場合、区画への書き込み満了を契機として区画連結を開始しても、書き込み中断が発生することはない。次に、本実施の形態にかかる区画の大きさについて説明する。パケット読出の高速化や効率的なメモリ使用を実現可能なメモリ区画のサイズ範囲は、バッファに入出力するパケットのバースト長やパケット長の最大値や平均値によって異なる。各区画の大きさをmとし、入力されたパケットが連続して蓄積されるときの最大蓄積データ量=バースト長をLbとし、キューがデータ量Lbを蓄積するとき、Lb/m個の区画が使用される。したがって、Lb/mの値が小さくなるようmの値を大きくすると、必要となる区画数が減るため区画を連結するための回路規模を削減できる一方で、キューに割り当て済の区画のうち、データを記憶していない空き領域の平均量m/2が大きくなるためメモリの蓄積率Rs=1-m/2×Lbが低下する。また、mの値を小さくすると区画の連結処理や解放処理の回数が増大するため、処理量の増大によって消費電力の増加や、パケットの入出力速度の低下を招く可能性がある。また、データの書き込み/読み出しを行っている途中で区画が変わるため、DDR-SDRAMなどのようなメモリを用いる場合は、メモリへのアクセスが中断されて、メモリのアクセス帯域の利用効率が低下する。特に、mの値が平均パケット長Lp以下になると、パケット途中での区画切り替えの確率Pc=Lp/mが1以上となるため、各パケットの読み出しや書き込みを行う途中で区画が切り替わりが発生し、問題が深刻化する。このため、実用的なmの範囲は、Lb,Lp,Rs,Pcが与えられたとき、Lp/Pc≦m≦2×Rs×Lbで示される範囲となり、mは前記範囲内で大きい値をとる方が回路規模や消費電力が小さくなる。例えば、Bb=1MByte,Lp=750Byte,Rs=0.05,Pc=0.1とすると、7.5KByte≦m≦100KByteとなり、区画は100KByteが望ましい。なお、Lb,Lp,Rs,Pcの与えられ方によっては、実用的な範囲のmが存在しないこともあるが、この場合は、本発明が有効ではなく従来構成を採用した方がよいと判断できる。また、キューごとに、平均パケット長やバースト長が異なる場合があるが、このような場合は、各キューについて、適切な区画の大きさの範囲を得たとき、これらの範囲をすべて満たす値の範囲のうち最大値を区画の大きさとして採用すればよい。このようにすることで、全てのキューに対して適切な範囲でmを定めることができる。さらに、キューによって平均パケット長やバースト長が大きく異なるために上記mが存在しないような場合には、メモリ領域を、区画サイズm1でM1個に区画化した領域A1、区画サイズm2でM2個に区画化した領域A2、...、区画サイズmkでMk個に区画化した領域Akに区分し、各キューを、区画サイズが適切な範囲にある前記区分A1~Akの何れか1つに所属させる。各キューへのパケットの蓄積にあたっては、前記キューが所属する区分内の区画を利用して、前記パケットを蓄積する。各区分内での区画の連結や解放の処理は、既に説明したとおりである。なお、各区分に割り当てるメモリ量は、その区分に所属するキューのバースト長の合計値以下で、統計多重効果同時に各キューが最大長になる確率が低いためにキュー長の合計値が最大長の合計値より小さくなる効果を考慮した値に設定すればよい。また、本実施の形態は、複数の区画にまたがって1つのパケットデータを蓄積するため、各FIFOに最大パケット長分を割り当てる方式である前述の第1の従来技術と比較して、メモリにパケットデータを効率よく蓄積することができ、全体のメモリ容量を削減することができるとともに、パケットデータ長の差異を吸収するため等のカベージコレクションが不要となる。さらに、フレームを固定長に分割して蓄積する方式である前述の第2の従来技術と比較して、区画数の増大を抑制することができることから、区画管理のための情報量が少なくて済むため、必要なメモリ容量を削減できるとともに、区画管理のための処理負担を軽減できる。[第2の実施の形態]次に、図7を参照して、本発明の本実施の形態にかかるパケットバッファ装置10について説明する。図7は、第2の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。本実施の形態は、第1の実施の形態において、任意のキューについて区画を連結する際、当該キューのキュー別連結区画数をその最大キュー別連結区画数と比較することにより、区画連結を行うか否かを決めるようにしたものである。本実施の形態にかかるパケットバッファ装置10は、前述の図1に示した第1の実施の形態にある、バッファ制御部11、メモリ部12、書込位置情報保持部13、読出位置情報保持部14、連結区画情報保持部15、空き区画情報保持部16に加えて、空き区画数保持部17および連結区画数保持部18を備えている。空き区画数保持部17は、バッファ制御部11がパケットのデータが蓄積されていない区画の個数である空き区画数空き区画のリストに含まれる区画の個数を保持する機能と、バッファ制御部11に、保持している空き区画数の値を出力する機能、あるいは、バッファ制御部11から、更新された空き区画数の値を受け取って、保持していた空き区画数の値を、前記更新された値に変更する機能を有している。連結区画数保持部18は、各キューについて、パケットのデータを蓄積するために連結された区画の個数であるキュー別連結区画数を保持する機能と、バッファ制御部11からキュー識別子の値を受け取って、前記キュー識別子によって特定されたキューの、キュー別連結区画数の値をバッファ制御部11に出力する機能、あるいは、バッファ制御部11からキュー識別子の値と、前記キュー識別子によって特定されたキューの、更新されたキュー別連結区画数の値を受け取って、前記キューについて保持していたキュー別連結区画数の値を、前記更新されたキュー別連結区画数の値に書き換える機能とを有している。これら機能は、キュー識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応するキュー別連結区画数の値とを保持するメモリ回路によって実現可能である。[第2の実施の形態の動作]次に、本実施の形態にかかるパケットバッファ装置10の動作について説明する。パケットバッファ装置10のバッファ制御部11は、前述の図3~図6に示した第1の実施の形態にかかる状態遷移と同様にして、メモリ部12に対するパケットデータの書き込み/読み出しを行う。ただし、図5の区画連結動作および図6の区画解放動作において、第1の構成例とは異なる動作を行う。[第2の実施の形態の区画連結動作]まず、図5を参照して、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。本実施の形態にかかる区画連結動作は、図5に示した区画連結動作の状態遷移図において、以下の状態における動作が異なる。[初期化状態]初期化状態ステップ120では、バッファ制御部11が、連結区画数保持部18に対して、全キューについてのキュー別連結区画数の値として0を出力する処理と、空き区画数保持部17に対して、空き区画数の値として全区画数を出力する処理が、加わる。これにより、バッファ制御部11は、初期化状態において、連結区画数保持部18が保持する各キューのキュー別連結区画数の値と、空き区画数保持部17が保持する空き区画数の値とを、初期化する。[区画連結信号待ち状態]区画連結信号待ち状態ステップ121では、バッファ制御部11が、区画連結信号があった時点でのパケットデータ書込の対象となっているキューを特定する書込キュー識別子の値を保持する処理が、加わる。[空き区画情報取得状態]空き区画情報取得状態ステップ122では、バッファ制御部11が、空き区画取得状態あるいは未連結状態への遷移条件を判定する以下の処理が加わり、前記処理の結果が各遷移条件となる。まず、区画連結信号があった時点で保持した書込キュー識別子によって特定される書込キューのキュー別連結区画数の上限値である最大キュー別連結区画数を、空き区画数保持部17が保持する空き区画数の値に基づいて算出する。次に、前記算出した最大キュー別連結区画数の値と、連結区画数保持部18が保持する、書込キューのキュー別連結区画数の値とを比較し区画連結を行うか否かを決める。すなわち、前記キュー別連結区画数の値よりも前記最大キュー別連結区画数の値が大きい場合は空き区画取得状態に遷移し、前記条件を満たさない場合は、未連結状態に遷移する。ここで、図8および図9を参照して、最大キュー別連結区画数を算出する2つ方法について説明する。図8は、最大キュー別連結区画数を算出する第1の手順を示すフローチャートである。図9は、最大キュー別連結区画数を算出する第2の手順を示すフローチャートである。これらの最大キュー別連結区画数算出方法では、キューによって連結区画数の値に大きな差が生じることを抑制する公平制御や、キューに応じて算出パラメータの値を変えることで優先度の高いキューに優先的に区画連結を許す優先制御や連結区画数の上限を設定するなどのキュー長制御が可能となる。これらの方法は、前述した特許文献2の共通バッファのメモリ領域を割り当てるときの方法を、本実施の形態に適用したものある。特許文献2では各区画がブロックとして管理されているのに対して、本実施の形態ではFIFOとして管理されている点が異なっている。まず、上記の公平制御および優先制御について、以下に具体的に説明する。連結区画数の上限を空き区画数の関数として算出するが、公平性を保つ各キューに対して、同じ前記関数を適用して各キューの連結区画数の上限を得る。また前記関数は、空き区画数の増加に伴って、連結区画数の上限が増加するものとする単調増加である必要はなく階段状や平坦な区間が含まれていても構わない。この関数設定により、特定のキューに蓄積するパケットが集中して前記キューの連結区画数が増加すると、空き区画が減少するので、各キューに対する連結区画数の上限値が低下して、パケットの蓄積が集中したキューの連結区画数が上限に達し、空き区画が残っていたとしても、前記キュー長いキューについては新たな区画連結が行われず蓄積量の増加が停止する。一方、連結区画数の上限に達していないキュー短いキューについては、空き区画をキューに連結してキュー長の増加が可能である。前記の制御が行われることで、特定のキューのみに極端にメモリ領域が割り当てられることを抑制することができる。また、優先制御を行う場合は、連結区画数の上限を空き区画数の関数を、高優先キューと低優先キューで異なるものとする。前記関数は、公平制御時の関数と同様に、空き区画数の増加に伴って連結区画数の上限が増加する関数であるが、高優先キュー用の関数の方が低優先キュー用の関数よりも、空き区画数が小さい領域において連結区画数の上限が大きくなるようにする。この関数設定により、空き区画が少なくなってきたとき、高優先キューに対する連結区画数の上限よりも、低優先キューの連結区画数の上限の方が小さくなるため、低優先キューに対する空き区画の連結が停止し、空き区画を高優先キューのみに割り当てられるようになる。また、キュー別の連結区画数の上限ではなく、キュー別の連結区画数を合算した数に対する上限を設定することも可能である。例えば、各キューに優先度を設けるとともに、優先度別に区画数の上限を空き区画数に基づいて算出する。前記上限は、上限が定められた優先度のキューと前記優先度より低優先度のキューの連結区画数を合算した値に対する、上限として制御する。高優先キュー用の関数の方が低優先キュー用の関数よりも、空き区画数が小さい領域において連結区画数の上限が大きくなるようにすることで、空き区画が少なくなってきたとき、高優先キューに対する連結区画数の上限よりも、低優先キューの連結区画数の合算値に対する上限の方が小さくなる。ここで、低優先キュー側のキューに対して空き区画の連結を行うか否かを判定するときの判定条件として、前記低優先側キューの連結区画数の合算値が、低優先キューの連結区画数の合算値に対する上限を超えた時点で、低優先側キューへの空き区画の連結が停止し、空き区画を高優先キューのみに割り当てられるようになる。キュー別に上限を設ける場合には、空き区画が少なくなってきたとき、低優先キューのうち連結区画数が大きいキューのみに区画連結停止の制約がかかり、連結区画数が小さい低優先キューについては区画の連結が可能であるため、少なくなった空き区画を、低優先キューに割り当てられてしまい、高優先キューへの割り当てができない可能性が生じるが、低優先キューの連結区画数の合算値に対する上限を設けることによって前記の問題を解決することができる。次に、図8を参照して、第1の最大キュー別連結区画数算出方法について詳細に説明する。空き区画数に変化があったとき、バッファ制御部11は、各キューについて、図8に示す、第1の最大キュー別連結区画数算出処理を開始する。なお、図中のqはキュー識別子の値を表しており、A[q],B[q],C[q],D[q],E[q],K[q]は、キュー別に外部から設定される、最大キュー別連結区画数を算出するためのパラメータである。ただし、A[q]<B[q]の制限があり、かつ、空き区画数の減少にあわせて連結区画数の上限を下げるためには、C[q]≦E[q]、B[q]-A[q]×K[q]E[q]≦D[q]の制約がある。まず、バッファ制御部11は、空き区画数がA[q]より小さいことを判断するステップ200。ここで、空き区画数がA[q]より小さい場合ステップ200:YESは、最大キュー別連結区画数[q]をC[q]の値としステップ201、一連の処理を終了する。一方、空き区画数がA[q]と等しいか大きい場合ステップ200:NO、バッファ制御部11は、空き区画数がB[q]と等しいか大きいことを判断するステップ202。ここで、空き区画数がB[q]と等しいか大きい場合ステップ202:YES、バッファ制御部11は、最大キュー別連結区画数[q]をD[q]の値としステップ203、一連の処理を終了する。一方、空き区画数がB[q]より小さい場合ステップ202:NO、バッファ制御部11は、最大キュー別連結区画数[q]を式空き区画数-A[q]×K[q]E[q]によって算出された値としステップ204、一連の処理を終了する。上記の手順により、最大キュー別連結区画数[q]は、空き区画数がA[q]より小さいときC[q]の値をとり、空き区画数がB[q]以上のときD[q]の値をとり、空き区画数が、A[q]とB[q]の間にあるときは、空き区画数=A[q]のときE[q]となり、かつ、空き区画数の増加に応じて傾きK[q]で増加する直線上の値をとる。K[q]は正の数であり、A[q]とB[q]の間で空き区画数の増加に伴って最大キュー別連結区画数[q]=キュー識別子がqのキューに対する連結区画数の上限が増加する空き区画数の一次関数となる。次に、図9を参照して、第2の最大キュー別連結区画数算出方法について詳細に説明する。空き区画数に変化があったとき、バッファ制御部11は、各キューについて、図9に示す、第2の最大キュー別連結区画数算出処理を開始する。なお、図中のqはキュー識別子の値を表しており、V1[q],V2[q],...,Vr-1[q],N1[q],N2[q],...,Nr-1[q]は、キュー別に外部から設定される、最大キュー別連結区画数を算出するためのパラメータである。バッファ制御部11は、以下のステップ21sAとステップ21sBとを、s=1~r-1まで繰り返し実行する。まず、バッファ制御部11は、空き区画数がVs[q]より小さいことを判断するステップ21sA。ここで、空き区画数がVs[q]より小さい場合ステップ21sA:YES、バッファ制御部11は、最大キュー別連結区画数[q]をNs[q]の値としステップ21sB、一連の処理を終了する。一方、空き区画数がVs[q]と等しいか大きい場合ステップ21sA:NO、バッファ制御部11は、次のステップ21s1Aに移行する。また、ステップ21r-1Aにおいて、空き区画数がVr-1[q]と等しいか大きい場合ステップ21r-1A:NO、バッファ制御部11は、最大キュー別連結区画数[q]をNr[q]の値としステップ220、一連の処理を終了する。上記の手順により、最大キュー別連結区画数[q]は、空き区画数がV1[q]より小さいときN1[q]の値をとり、空き区画数がV1[q]とV2[q]の間にあるときはN2[q]の値をとり、空き区画数がV2[q]とV3[q]の間にあるときはN3[q]の値をとり、というように、空き区画数に応じて階段状に値が変わる。空き区画数の増加に応じて最大キュー別連結区画数[q]=キュー識別子がqのキューに対する連結区画数の上限が階段状に増加をする関数となる。ただし、Vs[q]<Vs1[q];s=1~r-1の制限があり、かつ、空き区画数の減少にあわせて連結区画数の上限を下げるためには、Ns[q]≦Ns1[q];s=1~r-1の制約がある。以下、図5に戻って、第2の実施の形態にかかる区画連結動作の説明を続ける。[空き区画取得状態]空き区画取得状態ステップ124では、バッファ制御部11が、空き区画数保持部17に対して、保持している空き区画数の値を1減算した値に更新する処理が加わる。前記処理では、空き区画数保持部17から、空き区画数の値を受け取って、前記の値-1を計算し、前記計算結果を空き区画数保持部17に出力する。[連結更新状態]連結更新状態ステップ125では、バッファ制御部11が、連結区画数保持部18に対して、区画が連結されたキューのキュー別連結区画数の値を1加算した値に更新する処理が加わる。前記処理では、連結区画数保持部18に、区画連結信号があった時点で保持した書込キュー識別子の値を出力することによって前記書込キューのキュー別連結区画数の値を受け取って、さらに、前記キュー別連結区画数の値1を計算し、連結区画数保持部18に前記書込キュー識別子の値と前記計算結果を出力する。[第2の実施の形態の区画解放動作]次に、図6を参照して、本実施の形態にかかるパケットバッファ装置10の区画解放動作について説明する。本実施の形態にかかる区画解放動作は、図6に示した区画解放動作の状態遷移図において、以下の状態における動作が異なる。[区画連結信号待ち状態]区画解放信号待ち状態ステップ131では、バッファ制御部11が、区画解放信号があった時点でのパケットデータ読出の対象となっているキューを特定する読出キュー識別子の値を保持する処理が、加わる。[空き区画返却状態]空き区画返却状態ステップ133では、バッファ制御部11が、空き区画数保持部17に対して、保持している空き区画数の値を1加算した値に更新する処理が加わる。前記処理では、空き区画数保持部17から、空き区画数の値を受け取って、前記の値1を計算し、前記計算結果を、空き区画数保持部17に出力する。[空き区画更新状態]空き区画更新状態ステップ134では、バッファ制御部11が、連結区画数保持部18に対して、区画の連結が解放されたキューのキュー別連結区画数の値を1減算した値に更新する処理が加わる。前記処理では、連結区画数保持部18に、区画解放信号があった時点で保持した読出キュー識別子の値を出力することによって前記読出キューのキュー別連結区画数の値を入力し、さらに、前記キュー別連結区画数の値-1を計算し、連結区画数保持部18に前記読出キュー識別子の値と前記計算結果を出力する。[第2の実施の形態の効果]このように、本実施の形態は、バッファ制御部11において、各キューに対して、前記キューのパケットを蓄積するために連結された区画の個数であるキュー別連結区画数を保持し、各キューに対して、前記キュー別連結区画数の上限値である最大キュー別連結区画数を、前記空き区画数に基づいて算出し、パケットをキューに蓄積するとき、パケットのデータをメモリに書き込むことによって区画の書込位置が所定の位置に達する場合に、前記キューに対する最大キュー別連結区画数とキュー別連結区画数とを比較して、区画連結を行うか否かを決めるようにしたものである。これにより、各キューの蓄積量の合計がメモリ全体の容量に達する可能性がある場合に、空き区画数に基づいて算出された連結された区画数の上限値と、既に連結されている区画数とを比較して、新たな連結を実施するか否かを判断することで、空き区画が少なくなってきたときに、既に多くの区画を連結しているキューよりも、あまり区画が連結されていないキューの方に、優先的に区画の連結を行う制御が可能となり、特定のキューの蓄積量が大きくなってしまうという不公平性を解消することができる。また、連結された区画数の上限値を空き区画数に基づいて算出するための定数を、各キューの優先度に合わせて変えることにより、優先度の高いキューに対して前記上限値を大きくすることが可能となり、空き区画が少なくなってきたときに、優先度の低いキューよりも、優先度の高いキューの方に優先的に新たな区画の連結を行う制御が可能となり、優先度の高いパケットが廃棄されにくい。すなわち、本実施の形態では、キュー別に使用できる区画数の上限を、現在の空き区画数に応じて変更することにより、優先度の高いキューでのバッファオーバーフローを抑制するための、メモリ割り当てを行う。優先度の高いキューにオーバーフローが生じる可能性が生じたとき、新たな区画を前記キューに追加することによって、オーバーフローを防ぐ必要がある。オーバーフローが生じると、高優先のパケットが廃棄されてしまうからである。新たな区画を高優先キューに追加すべき時点で、全体の空き区画数が足りない状況が生じると前記の区画追加ができない。全体の空き区画数が足りない状況は、低優先のキューに多く蓄積が行われて、低優先キューのために区画が使用されてしまっている場合に発生する。そこで、空き区画数が少なくなったときには、低優先キューへの区画追加を抑えて、高優先キューへの区画追加に備えるよう、空き区画数と各キューの優先度に応じて、キュー別に設けた区画割り当て数の閾値を変化させる。前記閾値は、キューに区画追加を行うか否かを、そのキューへの割り当て済の区画数と比較して判定するために使用される。つまり、低優先キューのキュー長が伸びるのに合わせて区画を追加していくので通常は、バッファ滞留時間が長い低優先キューほど割り当てた区画数は多くなるが、低優先キューへの区画割り当てに全区画が割り当てられてしまい、高優先キューのキュー長が伸びたとき区画追加ができなくなることを防止するために、キューごとの区画割り当て数の閾値を変化させる。このように、本実施の形態は、メモリの必要容量が小さいながら簡易なバッファ制御でキューからのパケット取り出しとキューへのパケット蓄積を高速に行うことができるパケットバッファ装置を提供するという、優れた効果が得られる。さらに、本実施の形態は、特定のキューの蓄積量が大きくなってしまうという不公平を解消し、優先度の高いパケットが廃棄されにくい制御を可能とするパケットバッファ装置を提供するという、優れた効果が得られる。[第3の実施の形態]次に、図10を参照して、本発明の本実施の形態にかかるパケットバッファ装置10について説明する。図10は、第3の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。前述した第1の実施の形態では、任意の区画についてパケットデータを書き込み/読み出しする際、ワード単位で書き込み/読み出しする場合を例として説明した。本実施の形態は、第1の実施の形態において、任意の区画についてパケットデータを書き込み/読み出しする際、各区画を固定長の記憶領域で予め分割して設けたブロックを単位として、パケットデータを書き込み/読み出しするようにしたものである。このパケットバッファ装置10は、前述の図1に示した第1の実施の形態にある、バッファ制御部11、メモリ部12、書込位置情報保持部13、読出位置情報保持部14、連結区画情報保持部15、空き区画情報保持部16に加えて、書込バッファ部21および読出バッファ部22を備えている。書込バッファ部21は、少なくとも1ブロック分のデータ、すなわちブロックデータを保持する書込ブロックバッファ21Aを有し、バッファ制御部11から、パケットデータとブロック管理情報を受け取って、書込ブロックバッファ21Aに前記パケットデータを格納する機能と、バッファ制御部11からの出力指示に応じて、書込ブロックバッファ21Aに保持していたブロックデータをバッファ制御部11に出力する機能とを有している。読出バッファ部22は、少なくとも1ブロック分のブロックデータを保持する読出ブロックバッファ22Aを有し、バッファ制御部11からブロックデータを受け取って、読出ブロックバッファ22Aに格納する機能と、バッファ制御部11からの出力指示に応じて、読出ブロックバッファ22Aで保持していたブロックデータをバッファ制御部11に出力する機能とを有している。図11は、メモリ部ブロック分割の構成例である。メモリ部12は、図11に示すように、バッファ制御部11によって、複数の互いに重ならないアドレス範囲で区分けされ、前記区分けされた複数の区画として管理される。本実施の形態では、M個の区画に区分けされる。Mはキューの個数N以上の値をとる整数である。前記Mに対する制約は、すべてのキューに同時にパケットを蓄積可能とするために必要な制約であり、すべてのキューに同時にパケットを蓄積することが必要とされない実施形態では、前記制約は必要ない。また、メモリ部12のアドレス順に区分けしたときの各区画に割り付けられた番号を、前記区画を特定するための区画識別子とし、その値は0からM-1までの整数のうち何れかの値をとる。また、各区画の内部は、複数の互いに重ならないアドレス範囲でさらに区分けされ、固定長であるKバイトのブロックで管理されており、1個の区画に最大B個のブロックを蓄積することができる。これにより、メモリ部12は、バッファ制御部11からの制御に基づき、任意の区画についてパケットデータを書き込み/読み出しする際、ブロック単位で、パケットデータをシーケンシャルで書き込み/読み出しする。図12は、メモリ部におけるパケットデータ蓄積状態を示す説明図である。本実施の形態では、メモリ部12のうち、アドレスが連続するメモリ領域を、Kバイトずつに区切ってB個のブロックを設け、パケットの入力順に、アドレスが小さい方のブロックから格納される。上記Bは、各区画に含まれるブロック数であるが、Bの値は自然数であり値に制限はない。ただし、B×K×Mの値は、パケットバッファが蓄積すべきデータの全バイト数より大きくすべき値なので、BやKやMの値の範囲に定めがあり、パケットバッファが蓄積すべきデータの全バイト数が規定されている場合には、Bの取りうる範囲が前記式によって実用上制約を受ける。なお、ある区画内のメモリ領域にデータ書き込みや読み出しを行うとき、前記区画内の位置、例えば区画先頭ワードからのワード数を、2進数として表現するポインタを使用するが、前記ポインタ値の演算区画をFIFOとして使用するときのポインタ値更新などにおいて、Bを2のべき乗とすると、前記の演算回路を簡易に構成することができる。一方、上記Mの値は、キューの個数N以上の値とすべきである。M=Nのとき、各キューに1個の区画を割り当てることができるが、M<Nの場合は、区画が割り当てられないキューが生じる。パケットバッファが蓄積すべきデータの全ビット数が規定されているとき、Mの値を大きくすれば、各区画のビット数を小さくすることができる。これにより、キューに対して割当済である区画のうち、データを記憶していない空き領域の大きさを小さくすることが可能である、これは、空き領域が、最悪で、1区画分のメモリ量程度になるためである。したがって、Mを大きくすると、メモリの利用効率が向上し、必要なメモリ量を、パケットバッファが蓄積すべきデータの全ビット数に近づけることができる。この場合、各キューに区画を割り当てたものの蓄積に利用されなかったという状況が最も空きが多い状況であるため、蓄積に使用された区画数/全区画数=M-N/Mがメモリ利用効率に相当する値になる。ただし、Mを大きくすると、バッファ制御部11が管理すべき区画数が増えるので、各キューの区画連結の状態を保持する連結区画情報保持部15や、空き区画を管理する空き区画情報保持部16の回路規模が増大する。つまり、メモリ利用効率を100に近づけようとすると上記回路規模の増大が問題となるので、前記利用効率を80から90とする場合の指標である、M=N×5~N×10程度が実用的な範囲である。Kは1ブロックのバイト数であり、Kの値を、ブロックを記憶するメモリの1バーストでアクセスできるデータ量の整数倍とすることで、効率的なブロックの書き込み/読み出しが可能となる。1バーストあたりのデータ量は、一般的に2のべき乗の値をとるが、その値はメモリのデータ幅やバースト長に依存する。Kが大きくなると、1ブロック分のデータを保持するためのメモリ量が増大するため、書込バッファ部21と読出バッファ部22の回路規模が増大するという問題が生じる。また、Kが最小パケット長よりも小さいと、パケット境界が含まれないブロックの割合が増大し、ブロック管理情報のために使用されるメモリが無駄になるという問題が生じる。また、メモリが複数のバンクに分かれている場合は、マルチバンクオペレーションによって、メモリの帯域利用効率を向上させることができるので、Kを、バーストあたりのデータ量×バンク数の整数倍とすると、1ブロックのアクセスを予め決めておいたメモリへのコマンド発行手順によって行うことで、簡単な回路でマルチバンクオペレーションを実現することができる。Kの値の例は、128,256,512,1024である。ブロックの境界は、パケットの境界とは無関係に定められているため、1個のブロックに1個のパケットのパケットデータが完全に収容される場合と、複数のブロックにまたがって収容される場合がある。各ブロックには、パケットデータの他に、固定長Hバイトのブロック管理情報が含まれ、ブロック管理情報のブロック内での位置が定められている。本例では、ブロックの先頭側すなわちアドレス最小側に寄せて配置される。また、本例では、ブロック管理情報は、パケット境界情報の他に、そのブロックのパケットデータ領域を使い切っているか否かを示す、パケットデータ継続フラグを持つ。前記パケットデータ継続フラグが1の場合は、パケットデータ領域を使い切っている場合であり、パケットデータ領域の最後まで有効なパケットデータが格納されていることを示す。一方、前記パケットデータ継続フラグが0の場合は、前記領域内に含まれるパケットデータの末尾1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾より後ろに、有効なパケットデータが格納されていないことを示す。Hはブロック管理情報のバイト数である。ブロック内に入り得るパケット数分のパケット境界位置を示すパケット終端位置を含む必要がある。パケット終端位置をブロック先頭からのバイト数として表す場合は、1個のパケット終端位置は、ブロックのバイト数未満の値を表現するため、log2K-1以上のビット数となる。また、ブロック内のデータをバイト単位ではなくワード単位で扱う場合には、ブロック管理情報を1ワードまたは予め決められた個数のワードに収めるよう規定することで、ワード単位での扱いに整合する。さらに、ブロック管理情報がパケットデータ継続フラグを含む場合には、ブロック管理情報に加えて前記フラグ用に少なくとも1ビットを必要となる。最小パケット長が64Byteのとき、Hの値の例は、2,4,8,16であり、各々、K=128,256,512,1024に対応する。ただし、K=512,1024の場合、パケット終端位置はブロック先頭からのバイト数ではなく、ブロック先頭からのワード数を表すと仮定している。前記により、パケット終端位置は、ブロック内のデータのバイト数を2進数として表現可能なビット数よりも少ないビット数で表現できるためである。例えば、K=512のとき、ブロック先頭からのバイト数としてパケット終端位置を規定すると8bit長となるが、ブロック先頭からの4Byte長のワード数パケット終端位置を規定すると6bit長で済む。パケット境界情報は、P個のパケット終端位置からなる。各パケット終端位置は、ブロックに含まれるパケットデータ末尾バイトのブロック内での位置、すなわち、パケットデータ領域の先頭バイトから前記パケットデータ末尾バイトまでのバイト数で表される。この際、パケット終端位置が1となる場合は、パケットデータ領域の先頭バイトがパケットデータ末尾バイトである場合である。なお、パケット終端位置が0の値である場合は、前記パケット終端位置が無効であることを意味し、1個のブロックに含まれるパケットデータ末尾バイトの数がP個より少ない場合に生じる。Pはブロック内に入り得るパケット数の最大値である。したがって、P≧K/最小パケット長となる。最小パケット長が64Byteのとき、Pの値の例は、P=2,4,8,16、であり、各々、K=128,256,512,1024に対応する。ただし、パケット境界位置情報はブロック先頭からのバイト数ではなくブロック先頭からのワード数を表すと仮定している。[第3の実施の形態の書込動作]次に、図13を参照して、本実施の形態にかかるパケットバッファ装置10において、キュー入力指示情報の入力に応じて、入力されたパケットのパケットデータを、書込ブロックバッファ21Aへワード単位で順次格納した後、ブロック単位で、メモリ部12内の対応する区画へ書き込む書込動作について説明する。図13は、第3の実施の形態にかかる書込動作を示す状態遷移図である。なお、書込動作動作のうち、ブロック書き込み1状態ステップ303およびブロック書き込み2状態ステップ304におけるブロック書込動作の詳細については、図14を参照して後述する。この書込動作において、次のような制御変数が用いられる。パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタであり、最大値P個以下の値をとる。格納位置は、パケットデータを1バイトずつ書込ブロックバッファ21A内のパケットデータ領域に格納するときの位置を指定する変数バイトアドレスである。パケットデータ継続フラグは、パケットデータ領域を使い切っているか否かを示す変数である。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態ステップ300に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。初期化状態ステップ300において、バッファ制御部11は、書込ブロックバッファ21Aを初期化する。この初期化処理において、バッファ制御部11は、M個のパケット終端位置の値を0に初期化するとともに、変数iの値を0に初期化する。また、バッファ制御部11は、書込バッファ部21の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。バッファ制御部11は、初期化状態ステップ300において、初期化が完了した時点で、パケットの入力を待つ、入力待ち状態ステップ301に遷移する。[入力待ち状態]入力待ち状態ステップ301において、パケットの入力があった時点で、バッファ制御部11は、パケットデータを蓄積可能か否かを判定する。この際、蓄積可否は、現在の書込区画内での書込区画内位置ブロックが満了であり、かつ、連結区画が連結されていない状態を蓄積不可と判定し、他の状態を蓄積可と判定する。したがって、パケットの入力があって、パケットの蓄積が可能であった場合、すなわち入力ありandメモリ蓄積可の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ21Aに格納する、データ格納状態ステップ302に遷移する。また、入力待ち状態ステップ301において、パケットの入力がなく、メモリ部12に蓄積されたブロックがあるか、または、書込バッファ部21に保持されているパケットデータがない場合、すなわち入力なしandメモリ蓄積ありorデータ保持なしの場合、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態ステップ301に留まる。書込バッファ部21は、1ブロック分のパケットデータが揃うまで、書込ブロックバッファ21A内で前記パケットデータを保持する。例えば、初期状態空の状態の書込ブロックバッファ21Aに、3.5ブロック分の長さのパケットデータを持つ1個のパケットが入力された場合、このパケットデータは、先頭から3個のブロックに順に分割されて、メモリ部12に書き込まれるが、ブロック1個分に満たない残り0.5ブロック分のパケットデータについては、書込ブロックバッファ21A内で、次のパケットが入力されることによって、ブロック1個分のデータが揃うのを待つことになる。このような場合に、メモリ部12から前記パケットデータを読み出すとき、メモリ部12に蓄積された3個のブロックのデータについては読み出しが行われるが、書込ブロックバッファ21A内に残ったパケットデータについてはメモリ部12に蓄積されていないので、このままでは、メモリ部12から読み出した3個のブロックデータからパケットを再生することができない。そこで、このような状況では、ブロック書き込み2状態ステップ304に遷移することによって、書込ブロックバッファ21A内に残された残りのデータを、1ブロック分のブロックデータが揃っていなくともメモリ部12に書き込むことにより、メモリ部12から1個のパケットデータを全て読み出せるようにしている。すなわち、入力待ち状態ステップ301において、パケットの入力がなく、メモリ部12に蓄積されたブロックがなく、かつ、書込バッファ部21に保持されているデータがある場合、すなわち入力なしandメモリ蓄積なしandデータ保持ありの場合、バッファ制御部11は、1ブロック分のパケットデータが揃うのを待たずに、未満了状態のブロックをメモリ部12に書き込むため、ブロック書き込み2状態ステップ304に遷移する。この遷移は、入力がなくメモリ部12に蓄積されたパケットデータを出し尽くし、書込ブロックバッファ21Aに残った最後のデータが出力されない状況を回避するためのものである。一方、入力待ち状態ステップ301において、パケットの入力があって、パケットの蓄積が不可能であった場合、すなわち入力ありandメモリ蓄積不可の場合、バッファ制御部11は、入力パケット廃棄状態ステップ306に遷移し、前記パケットを蓄積せず廃棄する。[入力パケット廃棄状態]入力パケット廃棄状態ステップ306において、バッファ制御部11は、パケットデータの入力が終了するまで、前記状態に留まり、前記パケットデータの入力終了に応じて、入力待ち状態ステップ301に遷移する。これにより、パケット単位で、パケットデータを廃棄することができる。したがって、パケットデータが途中まで書き込まれた後、その後半だけが廃棄されるという不連続パケットデータの発生を回避でき、不連続パケットデータに起因するパケット読み出し時の不具合発生を抑止することが可能となる。[データ格納状態]データ格納状態ステップ302において、バッファ制御部11は、書込ブロックバッファ21Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1バイトずつ格納し、併せて、前記格納位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で入力されるのではなく、予め定められたバイト数単位で入力される場合には、前記バイト数単位で格納と格納位置の移動を行う。また、データ格納状態ステップ302において、パケットデータが後続し、かつ、書込ブロックバッファ21Aのパケットデータ領域に空きがある場合、すなわちパケット継続andブロック未満了の場合、バッファ制御部11は、データ格納状態ステップ302に留まって、前記パケットデータの格納を継続する。一方、データ格納状態ステップ302において、パケットデータが後続し、かつ、書込ブロックバッファ21Aのパケットデータ領域に空きがなくなった場合、すなわちパケット継続andブロック満了の場合、バッファ制御部11は、書込ブロックバッファ21Aに保持されたブロックデータをメモリ部12に書き込む、ブロック書き込み1状態ステップ303に遷移する。また、データ格納状態ステップ302において、パケットデータをその末尾バイトまで書込ブロックバッファ21Aへ入力し終えた場合、すなわちパケット終了時、バッファ制御部11は、書込ブロックバッファ21Aにパケット終端位置を格納する、パケット終端位置更新状態ステップ305に遷移する。[データ終端位置更新状態]データ終端位置更新状態ステップ305において、バッファ制御部11は、変数iの値に1を加算する。さらに、バッファ制御部11は、直前のデータ格納状態ステップ302において、パケットデータの末尾バイトを書込ブロックバッファ21Aに格納した際、その格納位置に相当するバイト数、すなわち、前記書込ブロックバッファ21Aのパケットデータ領域先頭から前記末尾バイトまでのバイト数を、ブロック管理情報に含まれるパケット終端位置iとして、書込ブロックバッファ21Aに格納する。データ終端位置更新状態ステップ305において、書込ブロックバッファ21Aのパケットデータ領域に空きがある場合、すなわちブロック未満了時、バッファ制御部11は、入力待ち状態ステップ301に遷移する。また、データ終端位置更新状態ステップ305において、書込ブロックバッファ21Aのパケットデータ領域に空きがなくなった場合、すなわちブロック満了時、バッファ制御部11は、書込ブロックバッファ21Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態ステップ304に遷移する。[ブロック書き込み1状態]ブロック書き込み1状態ステップ303において、バッファ制御部11は、書込ブロックバッファ21A内にブロック管理情報として保持されているパケットデータ継続フラグの値を1とし、書込ブロックバッファ21Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。さらに、バッファ制御部11は、書込ブロックバッファ21Aを初期化する。この初期化では、P個のパケット終端位置の値を0に初期化するとともに、変数iを0に初期化する。また、書込バッファ部21で保持する格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、データ格納状態ステップ302に遷移する。[ブロック書き込み2状態]ブロック書き込み2状態ステップ304において、バッファ制御部11は、書込ブロックバッファ21A内にブロック管理情報として保持されているパケットデータ継続フラグの値を0に初期化し、書込ブロックバッファ21Aに保持されたブロックデータを、メモリ部12内の所定のアドレスに書き込む。さらに、バッファ制御部11は、書込ブロックバッファ21Aを初期化する。この初期化では、P個のパケット終端位置の値を0に初期化するとともに、変数iを0に初期化する。また、書込バッファ部21の格納位置を0に初期化する。これにより、格納位置がパケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、入力待ち状態ステップ301に遷移する。なお、以上で説明した書込動作において、ブロック書き込み1状態ステップ303またはブロック書き込み2状態ステップ304では、メモリ部12に保持していたブロックデータを書き込む処理を行うが、メモリ部12でのブロックの蓄積がなく、かつ、読出バッファ部22にブロックの保持がない場合は、前記のようにメモリ部12に書き込むのではなく、読出バッファ部22に格納する処理を行ってもよい。これにより、入力されたパケットが蓄積されず出力される状況において、メモリ部12への蓄積を省くことができるため、メモリ部12での消費電力の削減が可能となる。[第3の実施の形態のブロック書込動作]次に、図14を参照して、前述した図13のブロック書き込み1状態ステップ303およびブロック書き込み2状態ステップ304において、書込ブロックバッファ21A内のブロックデータを、ブロックデータ単位で、メモリ部12内の対応する区画へ書き込むブロック書込動作について説明する。図14は、第3の実施の形態にかかるブロック書込動作を示す状態遷移図である。このブロック書込動作において、次のような制御変数が用いられる。書込区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを書き込む区画を特定するための識別子である。書込区画内位置情報は、前記キューごと設けられて、当該キューの書込区画識別子で特定される区画内における書込開始ブロック位置を示す情報である。アドレスは、書込区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。変数Bは、区画内に設けられたブロックの全ブロック数である。変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。区画連結位置は、区画に対するパケットデータの書き込み処理中に、当該区画に対して新たな区画を連結をするための区画連結信号を出力するタイミングを特定するための、区画内における書込位置情報である。変数Mは、メモリ部12に設けられた区画の全区画数であり、書込区画識別子の最大値に相当する。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態ステップ310に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。バッファ制御部11は、初期化状態ステップ310において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態ステップ311に遷移する。[入力待ち状態]入力待ち状態ステップ311において、パケットとキュー入力指示情報の入力があった時点で、書込位置情報取得状態ステップ312に遷移する。前記入力がない間、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態ステップ311に留まる。[書込位置情報取得状態]書込位置情報取得状態ステップ312において、バッファ制御部11は、書込位置情報保持部13に対して、入力されたキュー入力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、書込区画識別子区画単位と書込区画内位置情報ブロック単位の値を書込位置情報保持部13から受け取って、アドレス算出状態ステップ313に遷移する。[アドレス算出状態]アドレス算出状態ステップ313において、バッファ制御部11は、書込区画識別子と書込区画内位置情報との値に基づいて、パケットデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=書込区画識別子値×B×K書込区画内位置情報値×K、で算出する。前記算出後、バッファ制御部11は、ブロックデータ書き込み状態ステップ314に遷移する。[ブロックデータ書き込み状態]ブロックデータ書き込み状態ステップ314において、バッファ制御部11は、算出されたアドレスと、書込ブロックバッファ21A内の1ブロック分のデータを、メモリ部12に出力する。これにより、メモリ部12では、前記アドレスのメモリセルに1ブロックデータが保持される。前記出力後、以下の条件に応じて、書込区画内位置更新状態ステップ315、あるいは、連結区画情報取得状態ステップ316のいずれかに一方に遷移する。上記書込区画内位置更新状態ステップ315への遷移条件は、書込区画内位置が未満了の場合、すなわち、書き込み中の区画への書き込みを継続して行うことができる場合であり、本実施の形態では書込区画内位置情報値<B-1が、前記条件となる。なお、書込区画内位置情報は、書き込みを行う区画内のワードの番号にあたる。実施例では、区画先頭のブロックの番号を0としており、区画内のワード数はBなので、区画最後のワードの番号はB-1になる。また、書込区画内位置が未満了とは、書込区画内位置情報値が区画最後のブロックより手前区画先頭側にあるということであり、書込区画内位置情報値<B-1が、前記条件を表す式となる。一方、上記連結区画情報取得状態ステップ316への遷移条件は、書込区画内位置が満了の場合、すなわち、書込区画内位置が最大値を超えた場合であり、本実施の形態では書込区画内位置値≧B-1が、前記条件となる。なお、書込区画内位置値はB-1が最大値となり、書込区画内位置情報値>B-1には通常ならない。なお、区画先頭のワードの位置における書込区画内位置情報値を0と規定したとき、区画最後のブロックの位置における書込画内位置情報値はB-1となる。区画内のワード数はBであり、書込区画内位置情報値が区画内のワードを指す場合には、書込区画内位置情報値がB以上となることや負の値をとることは発生しない。[書込区画内位置更新状態]書込区画内位置更新状態ステップ315において、バッファ制御部11は、書込区画内位置を書き込みを終えた位置から次の位置に更新する。本実施の形態では、書込区画内位置情報の値を1する。この後、書込位置情報更新状態ステップ318に遷移する。また、書込区画内位置更新状態ステップ315において、バッファ制御部11は、書込区画内位置情報の値が、区画連結位置の値に一致したとき、区画連結信号を生成する。前記区画連結信号を契機として、後述する区画連結に関わる状態遷移の処理により、空き区画のリストから空き区画の1つを外して、書き込み中の区画に対して保持された連結区画識別子を前記空き区画を示す値とする区画連結が行われる。[連結区画情報取得状態]連結区画情報取得状態ステップ316において、バッファ制御部11は、連結区画情報保持部15に対して、書込区画識別子の値を出力し、連結区画情報保持部15から、書き込み中の区画に連結されている区画を特定する連結区画識別子の値を入力する。その後、書込区画情報更新状態ステップ317へ遷移する。なお、本実施の形態では、前記連結区画識別子値としてMを入力した場合、連結されている区画がないことを意味する。[書込区画情報更新状態]書込区画情報更新状態ステップ317において、バッファ制御部11は、書込区画識別子の値を連結区画識別子の値に更新する。併せて、書込区画内位置の値を初期化する。本実施の形態では書込区画内位置の値を0に更新する。すなわち、書き込みを行う位置を、連結された区画の先頭位置に変更する。その後、書込位置情報更新状態ステップ318に遷移する。[書込位置情報更新状態]書込位置情報更新状態ステップ318において、バッファ制御部11は、入力されたキュー入力指示情報に含まれるキュー識別子の値と、更新された書込区画識別子と書込区画内位置情報の値とを、書込位置情報保持部13に出力し、書込位置情報保持部13が保持している値を更新する。すなわち、パケットデータのメモリ部12への書き込みによって、書込区画識別子と書込区画内位置情報が更新されるが、これらの値を前記パケットデータの書き込みを完了した時点で、書込位置情報保持部13での保持値に反映させ、入力待ち状態ステップ311に遷移する。[第3の実施の形態の読出動作]次に、図15参照して、本実施の形態にかかるパケットバッファ装置10において、キュー出力指示情報の入力に応じて、指定されたキューのパケットデータを、メモリ部12内の対応する区画から、ブロック単位で読み出して読出ブロックバッファ22Aへ格納した後、読出ブロックバッファ22Aから該当するパケットデータを読み出す際の読出動作について説明する。図15は、第3の実施の形態にかかる読出動作を示す状態遷移図である。なお、読出動作のうち、ブロック読出状態ステップ323におけるブロック読出動作の詳細については、図16を参照して後述する。この読出動作において、次のような制御変数が用いられるデータ保持有無は、読出ブロックバッファ22Aでのデータ保持あり/なしを示す変数である。変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。格納位置は、パケットデータを1バイトずつ読出ブロックバッファ22A内のパケットデータ領域に格納するときの位置を指定する変数バイトアドレスである。取得位置は、パケットデータを1バイトずつ読出ブロックバッファ22A内のパケットデータ領域から取得するときの位置を指定する変数バイトアドレスである。パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態ステップ320に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。初期化状態ステップ320において、バッファ制御部11は、読出ブロックバッファ22Aを初期化する。この初期化処理において、バッファ制御部11は、データ保持有無の値をデータ保持なしに初期化する。また、この初期化において、バッファ制御部11は、M個のパケット終端位置の値を0に初期化するとともに、変数iの値を0に初期化する。また、バッファ制御部11は、読出バッファ部22の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。バッファ制御部11は、初期化状態ステップ320において、初期化が完了した時点で、キュー出力指示情報の入力を待つ、入力待ち状態ステップ321に遷移する。[入力待ち状態]入力待ち状態ステップ321において、バッファ制御部11は、キュー出力指示情報の入力があるまで、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態ステップ321に留まる。また、入力待ち状態ステップ321において、キュー出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち入力ありandデータ保持ありの場合、バッファ制御部11は、データ取得状態ステップ322に遷移する。一方、入力待ち状態ステップ321において、キュー出力指示情報の入力があった時点で、前記データ保持有無がデータ保持なしを示す場合、すなわち入力ありandデータ保持なしの場合、バッファ制御部11は、ブロック読み出し状態ステップ323に遷移する。[データ取得状態]データ取得状態ステップ322において、バッファ制御部11は、読出ブロックバッファ22Aから、取得位置が示す位置から、パケットデータを1バイトずつ取得して出力し、併せて、前記取得位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で出力するのではなく、予め定められたバイト数単位で出力する場合には、前記バイト数単位で格納と格納位置の移動を行う。また、データ取得状態ステップ322において、バッファ制御部11は、パケット継続/終了と、残データあり/なし、すなわち読出ブロックバッファ22A内に取得前のパケットデータがあるか/ないかとを判定する。この際、前記パケット終了は、読出ブロックバッファ22Aに格納されたパケット終端位置iが示す位置に前記取得位置が達したこと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。なお、変数iは、読出ブロックバッファ22Aに含まれるP個のパケット終端位置のうち、取得対象のパケットに対するパケット終端位置を特定する変数としても用いられる。また、パケット継続は、前記パケット終了の条件を満たさないことを条件として判定する。この際、パケット終端位置iの値が0の場合あるいはi>Pの場合は、取得中のパケットの末尾バイトを読出ブロックバッファ22Aに含まれず後続ブロックに含まれることを意味するため、前記判定はパケット継続となる。一方、前記残データありは、前記取得位置がパケットデータ領域の最終バイト位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。また、データ取得状態ステップ322において、パケットデータの最終バイトまでデータを取得し終えた場合、すなわちパケット終了時、バッファ制御部11は、前記データ保持有無の値を、以下に示す判定に基づいて更新し、その後、入力待ち状態ステップ321に遷移する。バッファ制御部11は、上記判定において、まず、前記取得位置がパケットデータ領域の最終バイト位置に達した場合、データ保持有無の値を保持なしと設定する。一方、前記取得位置がパケットデータ領域の最終バイト位置に達していない場合は、バッファ制御部11は、変数iの値に1を加算する。この際、変数iの更新後に、読出ブロックバッファ22Aに格納されたパケット終端位置iの値が0の場合あるいはi>Pであり、かつ、パケットデータ継続フラグの値が1の場合、すなわち、i>Porパケット終端位置i0andパケットデータ継続フラグ1の場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。一方、前記パケット終端位置iの値が0の場合あるいはi>Pであり、かつ、パケットデータ継続フラグの値が0の場合、すなわち、i>Porパケット終端位置i0andパケットデータ継続フラグ0の場合、バッファ制御部11は、データ保持有無の値を保持なしと設定する。また、前記以外、すなわち、前記パケット終端位置iの値が0以外、かつ、i≦Pの場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。また、データ取得状態ステップ322において、パケット継続であり、かつ、残データなしの場合、すなわちパケット継続and残データなし時、バッファ制御部11は、メモリ部12が蓄積するブロックを読み出し、読出ブロックバッファ22Aに格納する、ブロック読み出し状態ステップ323に遷移する。一方、データ取得状態ステップ322において、パケット継続であり、かつ、残データありの場合、すなわちパケット継続and残データあり時、バッファ制御部11は、データ取得状態ステップ322に留まって、読出ブロックバッファ22Aからパケットデータを取得して出力する。[ブロック読み出し状態]ブロック読み出し状態ステップ323において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックデータを読み出して、読出ブロックバッファ22Aに前記ブロックデータを格納する。また、バッファ制御部11は、前記取得位置の値を、読出ブロックバッファ22A内のパケットデータ領域の先頭位置を示す値に初期化するとともに、前記データ保持有無の値を保持ありに初期化し、さらに、変数iの値を1に初期化する。[第3の実施の形態のブロック読出動作]次に、図16を参照して、前述した図15のブロック読み出し状態ステップ323において、メモリ部12内の対応する区画から、ブロックデータを読み出して、読出ブロックバッファ22Aへ格納するブロック読出動作について説明する。図16は、第3の実施の形態にかかるブロック読出動作を示す状態遷移図である。このブロック読出動作において、次のような制御変数が用いられる。読出区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを読み出す区画を特定するための識別子である。読出区画内位置情報は、前記キューごと設けられて、当該キューの読出区画識別子で特定される区画内における読出開始ブロック位置を示す情報である。アドレスは、読出区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。変数Bは、区画内に設けられたブロックの全ブロック数である。変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。[初期化状態]パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態ステップ330に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。バッファ制御部11は、初期化状態ステップ330において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態ステップ331に遷移する。[入力待ち状態]入力待ち状態ステップ331において、バッファ制御部11は、キュー出力指示情報の入力があった時点で、読出位置情報取得状態ステップ332に遷移する。前記入力がない間は、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態ステップ331に留まる。[読出位置情報取得状態]読出位置情報取得状態ステップ332において、バッファ制御部11は、読出位置情報保持部14に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、読出区画識別子と読出区画内位置情報の値を読出位置情報保持部14から受け取って、アドレス算出状態ステップ333に遷移する。[アドレス算出状態]アドレス算出状態ステップ333では、読出区画識別子と読出位置情報との値に基づいて、パケットのデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=読出区画識別子値×B×K読出位置情報値×K、で算出する。前記算出後、ブロックデータ読み出し状態ステップ334に遷移する。[ブロックデータ読み出し状態]ブロックデータ読み出し状態ステップ334において、バッファ制御部11は、算出されたアドレスをメモリ部12に出力し、前記アドレスに対応するメモリ部12内のメモリセルに保持された1ブロック分のデータをメモリ部12から読み出す。前記読み出し後、以下の条件に応じて、読出区画内位置更新状態ステップ335、あるいは、連結区画情報取得状態ステップ336のいずれかに一方に遷移する。上記読出区画内位置更新状態ステップ335への遷移条件は、読出区画内位置が未満了の場合、すなわち、読み出し中の区画からの読み出しを継続して行うことができる場合であり、本実施の形態では読出区画内位置情報値<B-1が、前記条件となる。なお、読出区画内位置情報は、読み出しを行う区画内のブロックの番号にあたる。本実施の形態では、区画先頭のブロックの番号を0としており、区画内のブロック数はBなので、区画最後のブロックの番号はB-1になる。また、読出区画内位置が未満了とは、読出区画内位置情報値が区画最後のブロックより手前区画先頭側にあるということであり、読出区画内位置情報値<B-1が、前記条件を表す式となる。一方、上記連結区画情報取得状態ステップ336への遷移条件は、読出区画内位置が満了の場合、すなわち、読出区画内位置が最大値を超えた場合であり、本実施の形態では、読出区画内位置情報値≧B-1が、前記条件となる。なお、読出区画内位置情報値はB-1が最大値となり、読出区画内位置情報値>B-1には通常ならない。なお、区画先頭のブロックの位置における読出区画内位置情報値を0と規定したとき、区画最後のブロックの位置における読出画内位置情報値はB-1となる。区画内のブロック数はBであり、読出区画内位置情報値が区画内のブロックを指す場合には、読出区画内位置情報値がB以上となることや負の値をとることは発生しない。前記異常値を発生させないようにするための方法は、読出区画内位置情報値を監視しておき、値に異常が生じた場合に、装置異常等の処理リセットなどを行うことである。また、読出区画内位置情報値を表現する全ビットが1となるとき、読出区画内位置情報値=B-1であるように、Bの値を決めるBを2のべき乗とすることで可能ことで、異常値は発生しなくなる。これは、読出区画内位置情報値としてどのような値をとったとしても正常範囲に入るためである。また、読出区画内位置情報値がB-1となるときは、読出位置が区画最後のブロックに到達したことを意味する。[読出区画内位置更新状態]読出区画内位置更新状態ステップ335において、バッファ制御部11は、読出区画内位置を読み出しを終えた位置から次の位置に更新する。本実施の形態で読出区画内位置の値を1する。その後、読出位置情報更新状態ステップ337に遷移する。[連結区画情報取得状態]連結区画情報取得状態ステップ336において、バッファ制御部11は、連結区画情報保持部15に対して、読出区画識別子の値を出力し、連結区画情報保持部15から、読み出し中の区画に連結されている区画を特定する連結区画識別子の値を受け取って、読出区画情報更新状態ステップ338に遷移する。また、連結区画情報取得状態ステップ336において、バッファ制御部11は、区画解放信号を生成する。前記区画解放信号を契機として、後述する区画解放に関わる状態遷移の処理により区画を空き区画のリストに戻す区画解放が行われる。[読出区画情報更新状態]読出区画情報更新状態ステップ338において、バッファ制御部11は、読出区画識別子の値を連結区画識別子の値に更新する。併せて、読出区画内位置の値を初期化する。本実施の形態では読出区画内位置の値を0に更新する。すなわち、読み出しを行う位置を、連結された区画の先頭位置に変更する。この後、読出位置情報更新状態ステップ337へ遷移する。[読出位置情報更新状態]読出位置情報更新状態ステップ337において、バッファ制御部11は、バッファ制御部11は、読出位置情報保持部14に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値と、更新された読出区画識別子と読出区画内位置情報の値とを、読出位置情報保持部14に出力し、読出位置情報保持部14が保持している値を更新する。すなわち、ブロックデータをメモリ部12から読み出すことによって、読出区画識別子と読出区画内位置情報が更新されるが、これらの値を前記ブロックデータの読み出しを完了した時点で、読出位置情報保持部14での保持値に反映させ、入力待ち状態ステップ331に遷移する。[第3の実施の形態の区画連結動作]次に、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。前述した図14の書込区画内位置更新状態ステップ315において、区画連結信号が生成された場合、バッファ制御部11は、区画連結動作を実行する。なお、本実施の形態にかかる区画連結動作は、前述と同様に図5の状態遷移に基づくものであり、ここでの説明は省略する。[第3の実施の形態の区画解放動作]次に、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。前述した図16の連結区画情報取得状態ステップ336において、区画解放信号が生成された場合、バッファ制御部11は、区画解放動作を実行する。なお、本実施の形態にかかる区画解放動作は、前述と同様に図6の状態遷移に基づくものであり、ここでの説明は省略する。[第3の実施の形態の効果]このように、本実施の形態は、第1の実施の形態において、任意の区画についてパケットデータを書き込み/読み出しする際、各区画を固定長の記憶領域で予め分割して設けたブロックを単位として、パケットデータを書き込み/読み出しするようにしたものである。具体的には、メモリ部12の前記ブロックが、複数バイトの固定長からなるワードを単位として複数個に分割されてなり、前記パケット制御部11は、前記書込ブロックバッファ21Aに前記ブロック管理情報を格納する際、前記書込ブロックバッファ21A内の前記ワードの先頭ワードから前記ブロック管理情報を格納し、前記書込ブロックバッファ21Aに前記パケットデータを書き込む際、前記ブロック管理情報の末尾バイトを格納した前記先頭ワードの次のワードから順に格納用のワードを選択し、選択したワードに前記パケットデータを格納する際、当該ワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、前記書込ブロックバッファ21Aに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納するようにしたものである。これにより、第1の実施の形態と同様に、特定のキューにパケットの蓄積が集中する場合に、そのキューがオーバーフローする前に区画の連結を行うとともに、パケットの蓄積が少ないキューに対しては、そのキューへの区画の連結を行わず、また、パケットの出力による蓄積量の減少に応じて区画を解放することになる。したがって、キューごとに必要な容量がばらついた場合や、蓄積量が時間経過に伴って変動した場合にも、各キューに対して容量の配分が適切に行われるので、従来技術を適用したパケットバッファ装置と比較して、メモリの必要容量を小さくすることができる。これに加えて、入力パケットごとに生成されるパケット境界情報含む固定長のブロック管理情報が、パケットデータと連結して、メモリ部12のキューに格納される。このため、本実施の形態にかかるパケットバッファ装置10によれば、従来のような固定長のパケットジョブジョブ情報を蓄積するため、SRAMからなるジョブ用メモリを、キューとは別個に設ける必要はない。したがって、蓄積するパケット数を増大させた場合でも、パケットを蓄積するデータ用メモリの増大に伴う余分な回路規模の増加を抑制することができる。また、本実施の形態によれば、ブロック単位でメモリ部12にアクセスするため、ブロック長を、メモリをバーストアクセスするときの1度のアクセスで書き込み/読み出しするデータ量の、整数倍とすることにより、メモリを効率よくアクセスすることができる。これにより、メモリのデータバス幅やクロック周波数を低減することができるため、回路規模および消費電力を削減することができる。また、本実施の形態によれば、ブロック管理情報はブロック内の予め定められた位置に配置され、前記ブロックは固定長であるため、ブロック管理情報とパケットデータを、それらが格納されているメモリのアドレス値によって、確実に識別することができる。したがって、メモリにソフトエラー等が発生し、前記エラーが発生したブロックに格納されているパケットデータを正常に読み出すことができなくなったとしても、続く正常なブロックとブロック管理情報を読み出すことができるため、後続のパケットについては、正常にそのパケットデータを読み出すことができる。これにより、ブロック管理情報にエラーがないことを確認するためのパリティを付加やチェックは不要であり、前記パリティ演算や保持のための回路を削減することができる。また、エラーが発生した場合にも、メモリ部12の初期化といった正常なパケットまでも廃棄される深刻な影響をもたらすエラー回復処理を必要としない。また、パケット境界情報は、ブロック内でのパケット境界の位置を示す情報であるため、メモリ全体でのパケット境界の位置を示す情報よりも、少ないビット数で済む。これにより、パケット境界情報によってメモリが占有される割合を低減することができるため、前記メモリに、多くのパケットデータを蓄積することが可能となる。以下、本実施の形態と従来技術とを対比することにより、本実施の形態にかかる効果について説明する。本実施の形態にかかるパケットバッファ装置10は、前述したように、ジョブ用メモリを必要としないため、蓄積されるパケット数の増大に伴う回路規模の増大を抑制することができる。従来のパケットバッファ装置では、パケットデータのみをデータ用メモリに蓄積していたのに対して、本発明のパケットバッファ装置10では、パケットデータに加えてブロック管理情報を蓄積するため、蓄積量は増大するが、SDRAMといった大容量のメモリを用いることで、前記蓄積量の増大によって生じる回路規模の増大を抑制可能である。本発明は、ブロックとしてパケットデータをメモリSDRAMに記憶するが、前記ブロックのブロック管理情報を記憶したメモリ領域に連接するメモリ領域に前記ブロックのデータを記憶する。ブロック管理情報とブロックのデータの少なくとも一部を、1つのバースト読み出しコマンドをメモリに対して発行することで、メモリから効率的に読み出すことができる。一方、ブロック管理情報とブロックのデータを、メモリの異なる領域に分離して記憶した場合は、ブロックを読み出すとき、管理情報を読み出すための読み出しコマンドと、データを読み出すための読み出しコマンドの、少なくとも2回のコマンドをメモリに対して発行する必要がある。このとき、コマンドを発行してから、次のコマンドを発行できるようになるまでの時間を待つ必要がある。この待ち時間によって、メモリの帯域利用効率が下がる。また、ブロック単位でメモリにアクセスするため、ブロック長を、メモリをバーストアクセスするときの1度のアクセスで書き込み/読み出しするデータ量の、整数倍とすることにより、メモリを効率よくアクセスすることができる。これにより、メモリのデータバス幅やクロック周波数を低減することができるため、回路規模と消費電力を削減することができる。また、ブロック管理情報はブロック内の予め定められた位置に配置され、前記ブロックは固定長であるため、ブロック管理情報とパケットデータを、それらが格納されているメモリのアドレス値によって、確実に識別することができる。したがって、メモリにソフトエラー等が発生し、前記エラーが発生したブロックに格納されているパケットデータを正常に読み出すことができなくなったとしても、続く正常なブロックとブロック管理情報を読み出すことができるため、後続のパケットについては、正常にそのパケットデータを読み出すことができる。これにより、ブロック管理情報にエラーがないことを確認するためのパリティを付加やチェックは不要であり、前記パリティ演算や保持のための回路を削減することができる。また、エラーが発生した場合にも、メモリ部12の初期化といった正常なパケットまでも廃棄される深刻な影響をもたらすエラー回復処理を必要としない。本発明では、メモリにソフトエラー等が発生し、誤りがある管理情報を含むブロックを読み取った場合にも、後続のブロックを読み取ることが可能であり、パケット境界を含んだ後続ブロックを読み取ることで、前記エラーを生じたパケット境界より後にバッファに蓄積されたパケットを、メモリから読み取ることが可能となる。これは、ブロックが固定長全てのブロックは同一長であり、メモリはブロックを単位としたFIFOバッファとして管理され、ブロック管理情報はブロック内の予め定められた位置に配置されていることによって、ブロック管理情報の値とは関係なく、ブロック管理情報やブロックのメモリ上の位置が定められているため、ブロック管理情報の値の誤りが、その後のブロックやブロック管理情報の読み取り位置に誤りを与えないためである。一方、ブロックを可変長とし、前記ブロックは、パケット長などのパケット境界位置情報を含むブロック管理情報と1個のパケットの全データを含むとした場合は、メモリから読み取ったパケット長に誤りがあると、次のブロックが格納されているメモリ上の位置を誤ることになり、前記読み取り位置が誤ったブロックのパケット長にも誤りが発生し、その次のブロックの読み取りも誤る、といったように、誤りの連鎖が発生し、誤りが発生したパケットより後にバッファに蓄積されたパケット全てに誤りを生じることになる。なお、ジョブ用メモリを別に設け、パケットジョブとしてパケットの格納位置を前記ジョブ用メモリに記憶する場合は、本発明と同様、上記の問題は発生しないが、ジョブ用メモリからパケットジョブを読み出した後にデータ用メモリからパケットデータを読み出すという手順が必要であり、ジョブ用メモリとデータ用メモリの両方をSDRAM上に配置する場合は、パケットジョブの読み出しまでの待ち時間によって、メモリの帯域利用効率が下がる。ジョブ用メモリの読み出しを高速に行うことができるSRAM上に配置した場合、SRAMのビット当たりの面積がデータ用メモリに利用されるSDRAMのビット当たりの面積と比べると大きいため、本発明よりも回路面積が増大する。また、パケット境界情報は、ブロック内でのパケット境界の位置を示す情報であるため、メモリ全体でのパケット境界の位置を示す情報よりも、少ないビット数で済む。これにより、パケット境界情報によってメモリが占有される割合を低減することができるため、前記メモリに、多くのパケットデータを蓄積することが可能となる。本発明は、ブロックを蓄積単位とするFIFOバッファにより、バッファを構成する。例えば、ブロックaを読み出したとき、次に読み出すブロックbの格納位置は、ブロックaの格納位置から1ブロック分移動した位置ですので、各ブロックの格納位置を記憶しておく必要はなく、1個前に読み出されたブロックの格納位置に基づいて計算できる。前記を実現するための構成として、例えば、メモリ上の各ブロックの配置において、各ブロックの領域が隣接するように配列されたリングバッファがある。前記構成では、前記リングバッファの書き込みブロック位置と読み出しブロック位置を示す2個のポインタにより、次に書き込むべきブロックのメモリ上の位置や、次に読み出すべきブロックの位置を知ることができる。したがって、各ブロックについてメモリ上での位置を記憶するテーブル等は不要である。従来例において、ジョブ用メモリのメモリ量の具体例を示します。データ用メモリのメモリ量を8MB、フレームの最小長=64Byte、とすると、データ用メモリには、最大8000000/64=125000個のフレームが蓄積できる。データ用メモリのデータ幅=4Byteとすると、そのアドレス数は8000000/4=2000000個になるので、前記アドレスを2進数表現するためのビット数は21となるlog22000000以上の整数。したがって、蓄積したパケット1個につき1個のパケットジョブをジョブ用メモリに格納しパケットジョブにパケットを格納したデータ用メモリのアドレスを格納する場合、各パケットジョブのビット数が21bit、ジョブ用メモリへのパケットジョブの蓄積数は最大のフレーム蓄積数と同じく125000個となり、ジョブ用メモリのメモリ量は、21bit×125000=2625000bit=328kByteとなる。一方、本発明において、ブロック長=256Byte、ブロック管理情報=4Byteとすると、8MByte分のデータを蓄積するためのブロック数は8MByte/256Byte-4Byte=31746個であり、パケットジョブに相当するブロック管理情報に必要となるメモリ量は、4Byte×31746個=127KByteとなる。なお、ブロック内に入るパケット数は最大4個であるで、1個のブロック管理情報に、4個のパケットの境界位置を保持することができればよい。パケット境界位置をブロック先頭からのバイト数として表すと、各パケット境界情報のビット数は8bitあれば足りるため、1個のブロック管理情報は4Byte以上の長さがあればよい。ジョブ用メモリのメモリ量328kByteをSRAMで実現したときのジョブ用メモリの面積は、製造プロセスにもよるが約mmである。すなわち、DRAMを回路の外部デバイスとして回路面積から除外する場合、本願によって、ジョブ用メモリ分の面積であるmmを、回路面積から削減できる。また、DRAMの面積を合わせた場合の面積削減については、本願ブロック長=256Byte、1ブロックの管理情報=4Byteの場合を採用すると、DRAMは管理情報分として127KByteの増加となるが、ジョブ用メモリは不要となる。DRAMの1ビットあたりの面積はSRAMの1ビットあたりの面積の1/4とすると、管理情報分として0.8mm2のDRAMの面積増加となる。したがって、本願によって8-0.8=7.4mm2の回路面積を削減することができる。さらに、データ用メモリとして使用されるDRAMがメモリ量によらずその消費電力がほぼ一定であるのに対して、ジョブ用メモリとして使用されるSRAMはメモリ量によって増加する。本願で管理情報分の面積増加となったときも、DRAMがメモリ量によらず一定電力であることから、DRAMで消費される電力は、従来例も本願でも同じである。本願ではジョブ用メモリは不要であるため前記に相当する消費電力である、700mWが本願の採用によって削減できる効果がある。なお、メモリの面積電力を計算は、例えば、文献httpwww2renesascomprocessjaedramadvantageshtmlを参考とした。このように、従来例も少ない量のメモリ上記具体例では従来例のジョブ用メモリサイズの39程度のメモリ量でで、パケットジョブに相当するブロック管理情報を記憶することができる。[実施の形態の拡張]以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をすることができる。また、各実施形態については、矛盾しない範囲で任意に組み合わせて実施することができる。"