JP5748288B2 - パケットバッファ装置およびパケットバッファ制御方法 - Google Patents

パケットバッファ装置およびパケットバッファ制御方法 Download PDF

Info

Publication number
JP5748288B2
JP5748288B2 JP2011285526A JP2011285526A JP5748288B2 JP 5748288 B2 JP5748288 B2 JP 5748288B2 JP 2011285526 A JP2011285526 A JP 2011285526A JP 2011285526 A JP2011285526 A JP 2011285526A JP 5748288 B2 JP5748288 B2 JP 5748288B2
Authority
JP
Japan
Prior art keywords
packet
block
data
buffer
partition
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2011285526A
Other languages
English (en)
Other versions
JP2013135383A (ja
Inventor
健治 川合
健治 川合
浦野 正美
正美 浦野
衛 中西
衛 中西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2011285526A priority Critical patent/JP5748288B2/ja
Publication of JP2013135383A publication Critical patent/JP2013135383A/ja
Application granted granted Critical
Publication of JP5748288B2 publication Critical patent/JP5748288B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Communication Control (AREA)

Description

本発明は、パケット処理技術に関し、特に入力されたパケットをメモリに格納するとともに、出力指示に応じてメモリからパケットを取り出して出力するパケットバッファ制御技術に関するものである。
FTTH(Fiber To The Home)を初めとする光通信網の普及により、データ通信回線における通信速度が大幅に高速化され、ネットワークアダプタなどのパケットを送受信するパケット通信装置、特にパケットをバッファリングして処理するパケットバッファ装置において、その処理能力の改善が検討されている。
従来、このようなパケットバッファ装置において、パケット処理をハードウェア化することにより、処理能力を改善したものが提案されている(例えば、非特許文献1など参照)。
図15は、従来のパケットバッファ装置の構成を示すブロックである。図16は、従来のパケットバッファ装置の動作を示す説明図である。
図15のパケットバッファ装置50は、バッファ制御部51、データ用メモリ52、およびジョブ用メモリ53から構成される。
このパケットバッファ装置50は、複数のキュー(FIFOメモリ)を備え、入力された可変長のパケットを前記キューに格納し、入力された出力指示情報に応じて、前記キューに格納されていた前記パケットを前記キューから取り出して出力する機能を有している。
データ用メモリ52は、キュー毎に異なるアドレス領域を有し、前記キューのパケットデータを、当該キューと対応する前記領域に蓄積する機能を有している。
ジョブ用メモリ53は、キュー毎に異なるアドレス領域を有し、入力パケット毎に生成される固定長のパケットジョブ(ジョブ情報)を、前記キューに対応する前記領域に蓄積する機能を有している。パケットジョブは、前記データ用メモリ52における各パケットの境界位置を特定するためのパケット境界情報を含んでいる。
これら前記データ用メモリ52および前記ジョブ用メモリ53は、バッファ制御部51により、FIFOバッファとして制御される。
バッファ制御部51は、可変長のパケットの入力に応じて、当該パケットのパケットデータをデータ用メモリ52に書き込む機能と、この書き込みに基づいてパケットジョブを生成してジョブ用メモリ53に書き込む機能とを有している。パケットジョブは、データ用メモリに前記パケットデータの先頭が格納されたアドレス値を含む。
また、バッファ制御部51は、出力指示情報の入力に応じて、ジョブ用メモリ53からパケットジョブを読み出す機能と、このパケットジョブに基づいて、データ用メモリ52から、対応するパケットのパケットデータを読み出して出力する機能とを有している。
このようなパケットバッファ装置50では、例えば、バッファ制御部51がLSIチップ(RENA−CHIP)で構成されており、データ用メモリ52がDDR−SDRAM(Double-Data-Rate Synchronous Dynamic Random Access Memory)で構成されており、各キューがバッファ制御部51のLSI内に配置した内部メモリで構成されている。
したがって、入力されたパケットデータは、バッファ制御部51により、DDR−SDRAMに格納される。このとき、DDR−SDRAMにおける前記パケットデータの格納位置を含むパケットジョブが、バッファ制御部51により、内部メモリに格納される。また、出力指示情報に応じて、DDR−SDRAMからパットデータが読み出されて出力される。
NTTジャーナル2006 vol. 18 No. 7 「RENA−CHIPのハードウェア構成技術」、http://www.ntt.co.jp/journal/0607/files/jn200607022.html
このような従来技術では、パケットを蓄積するためのデータ用メモリ52に加えて、パケット毎に固定長のパケットジョブを蓄積するためのジョブ用メモリ53が必要となる。パケットは可変長であるため、短いパケットが続けて入力される場合、データ用メモリの蓄積量は少なくとも、ジョブ用メモリの蓄積量は多くなる。
このため、データ用メモリ52を、いかなる長さのパケットが入力された場合にも使い切ることを可能とするためには、最短パケットのみでデータ用メモリが充足された場合に蓄積されるパケット数分のパケットジョブを蓄積できるだけの容量を持ったジョブ用メモリ53が必要となる。
また、データ用メモリ52にはSDRAMのように大容量のメモリを使用することが一般的であるが、ジョブ用メモリ53は、データ用メモリほどの容量を必要としないことから、ジョブ用メモリ53専用にSDRAMを使用することは回路規模の増大を招くため、一般的にはSRAMが使用される。
データ用メモリ52とジョブ用メモリ53とでメモリを分ける理由は、データ用メモリ52の帯域利用効率を上げるためである。SDRAMからの読み出しを行う場合は、読み出しコマンドを発行した後、一定の時間を待って、前記読み出しコマンドに対応したデータをSDRAMから受け取る必要がある。したがって、前の読み出し結果を受けて、次の読み出しを行う、という動作をSDRAMに対して行うと、前記待ち時間によって、SDRAMのインタフェースが持つ帯域を有効に利用できない。
すなわち、メモリに記憶されたパケットデータを読み出す前に、前記パケットデータの格納位置を知る必要があるため、格納位置を読み取った後にパケットデータを読み出すという順番になる。
このとき、格納位置の情報とパケットデータの両方が同一のSDRAMに記憶されていると、格納位置の情報をメモリから読み出すために読み出しコマンドをメモリに発行し、一定の待ち時間の経過後に、前記格納位置の情報をメモリから受け取り、その後、前記格納位置の情報に基づいて、パケットデータを読み出すために読み出しコマンドをメモリに発行し、一定の待ち時間の経過後に、前記パケットデータをメモリから受け取る、という手順になる。
このため、1つのパケットのパケットデータをメモリから読み出すのに、待ち時間が2回もかかるため、メモリの帯域利用効率を下がる。したがって、帯域利用効率を上げるために、データ用メモリ52であるSDRAMとは別に、読み出し開始から完了までの時間が短いSRAMを用いたジョブ用メモリ53が設けられている。
SRAMは、1ビットあたりの面積がSDRAMより大きいが、メモリからの読み出しを短時間に行うことができる、という特徴を備えている。SRAM上のジョブ用メモリ53から短時間でパケットジョブを読み出し、このパケットジョブの情報に基づいて、SDRAM上のデータ用メモリ52からパケットデータを読み出すことにより、SDRAMの帯域利用効率を上げている。
しかしながら、SRAMは、ビット当たりの面積がSDRAMと比較して大きいため、回路規模の増加を招く。したがって、前述した従来技術によれば、SDRAMに加えてSRAMを用いる必要があるため、蓄積するパケット数の増大を目的として、データ用メモリ52の容量を増大させた場合、これに伴ってSRAMからなるジョブ用メモリ53の容量も増大し、結果として回路規模が余分に増加するという課題があった。
本発明はこのような課題を解決するためのものであり、蓄積するパケット数を増大させた場合でも、パケットを蓄積するデータ用メモリの増大に伴う余分な回路規模の増加を抑制できるパケットバッファ制御技術を提供することを目的としている。
このような目的を達成するために、本発明にかかるパケットバッファ装置は、固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するパケット制御部とを備えている。
また、本発明にかかるパケットバッファ装置の一構成例は、前記ブロックが、複数ビットの固定長からなるワードを単位として複数個に分割されてなり、前記パケット制御部が、前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記書込ブロックバッファ内の先頭ワードから前記ブロック管理情報を格納し、前記書込ブロックバッファに前記パケットデータを格納する際、前記ブロック管理情報を格納した次のワードから順に格納用のワードを選択し、選択したワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納するようにしたものである。
また、本発明にかかるパケットバッファ装置の一構成例は、前記パケット制御部が、前記メモリ部内の前記ブロックから前記パケットデータを読み出す際、最初に当該ブロックの先頭ワードから前記ブロック管理情報を取得して、このブロック管理情報の前記境界判定ビット列に基づき、当該ブロックにおけるパケットデータの末尾バイトの存在有無を判定し、当該末尾バイトが存在しない場合には、前記メモリ部に対して次のブロックの読出要求を行うようにしたものである。
また、本発明にかかるパケットバッファ装置の一構成例は、前記バッファ制御部が、前記メモリ部内の複数個の前記ブロックで構成された区画のうち、入力されたキュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューに蓄積し、前記区画のうち、入力されたキュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューから取り出し、前記区画への前記パケットデータの書き込みが満了した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続するようにしたものである。
また、本発明にかかるパケットバッファ制御方法は、入力されたパケットをメモリ部に格納するとともに、出力指示に応じて該メモリ部からパケットを取り出して出力するパケットバッファ装置で用いられるパケットバッファ制御方法であって、前記パケットバッファ装置が、固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、パケット制御部とを備え、前記パケット制御部が、入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納するステップと、入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するステップとを実行するようにしたものである
本発明によれば、入力パケット毎に生成されるパケット境界情報含む固定長のブロック管理情報が、パケットデータと連結して、メモリ部のキューに格納される。このため、従来のように、キューとは別個に、固定長のパケットジョブ(ジョブ情報)を蓄積するための、SRAMからなるジョブ用メモリを、設ける必要はない。したがって、蓄積するパケット数を増大させた場合でも、パケットを蓄積するデータ用メモリの増大に伴う余分な回路規模の増加を抑制することができる。
第1の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。 第1の実施の形態にかかるメモリ部におけるパケットデータ蓄積状態を示す説明図である。 第1の実施の形態にかかる書込動作を示す状態遷移図である。 第1の実施の形態にかかる読出動作を示す状態遷移図である。 第2の実施の形態にかかるメモリ部の構成例である。 第3の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。 メモリ部(ブロック分割)の構成例である。 第3の実施の形態にかかるメモリ部におけるパケットデータ蓄積状態を示す説明図である。 第3の実施の形態にかかる書込動作を示す状態遷移図である。 第3の実施の形態にかかるブロック書込動作を示す状態遷移図である。 第3の実施の形態にかかる読出動作を示す状態遷移図である。 第3の実施の形態にかかるブロック読出動作を示す状態遷移図である。 区画連結動作を示す状態遷移図である。 区画解放動作を示す状態遷移図である。 従来のパケットバッファ装置の構成を示すブロックである。 従来のパケットバッファ装置の動作を示す説明図である。
次に、本発明の実施の形態について図面を参照して説明する。
[第1の実施の形態]
まず、図1を参照して、本発明の第1の実施の形態にかかるパケットバッファ装置10について説明する。図1は、第1の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。
このパケットバッファ装置10は、パケットを送受信するパケット通信装置で用いられて、入力されたパケットをキュー(FIFOメモリ)に格納するとともに、出力指示に応じてキューからパケットを取り出して出力する機能を有している。
このパケットバッファ装置10には、主な機能部として、バッファ制御部11、メモリ部12、書込バッファ部13、および読出バッファ部14が設けられている。
バッファ制御部11は、入力されたパケットのパケットデータをメモリ部12に書き込むことで、メモリ部12にパケットを蓄積する機能と、蓄積されたパケットを取り出すタイミングを指定する出力指示情報に基づいて、メモリ部12からパケットデータを読み出して出力する機能とを有している。なお、バッファ制御部11に、外部装置(図示せず)から入力される出力指示情報を、前記外部装置が生成するための情報として、蓄積状態を表す蓄積状態情報を前記外部装置に対して出力する機能を設けてもよい。
メモリ部12は、バッファ制御部11から、パケットデータとこのパケットデータを書き込むアドレスを受け取って、前記アドレスに対応するメモリセルに前記パケットデータを書き込む機能と、バッファ制御部11から、パケットデータを読み出すアドレスを受け取って、前記アドレスに対応するメモリセルが保持するパケットデータをバッファ制御部11に出力する機能とを有している。
書込バッファ部13は、少なくとも1ブロック分のデータ、すなわちブロックデータを保持する書込ブロックバッファ13Aを有し、バッファ制御部11から、パケットデータとブロック管理情報を受け取って、書込ブロックバッファ13Aに前記パケットデータを格納する機能と、バッファ制御部11からの出力指示に応じて、書込ブロックバッファ13Aに保持していたブロックデータをバッファ制御部11に出力する機能とを有している。
読出バッファ部14は、少なくとも1ブロック分のブロックデータを保持する読出ブロックバッファ14Aを有し、バッファ制御部11からブロックデータを受け取って、読出ブロックバッファ14Aに格納する機能と、バッファ制御部11からの出力指示に応じて、読出ブロックバッファ14Aで保持していたブロックデータをバッファ制御部11に出力する機能とを有している。
図2は、第1の実施の形態にかかるメモリ部におけるパケットデータ蓄積状態を示す説明図である。
メモリ部12は、バッファ制御部11からの制御に基づき、固定長であるKバイトのブロック単位でパケットをシーケンシャルで書き込み/読み出しする。本例では、アドレスが連続するメモリ領域を、Kバイトずつに区切って各々をブロックとし、パケットの入力順に、アドレスが小さい方のブロックから格納されている。
Kは1ブロックのバイト数であり、Kの値を、ブロックを記憶するメモリの1バーストでアクセスできるデータ量の整数倍とすることで、効率的なブロックの書き込み/読み出しが可能となる。1バーストあたりのデータ量は、一般的に2のべき乗の値をとるが、その値はメモリのデータ幅やバースト長に依存する。Kが大きくなると、1ブロック分のデータを保持するためのメモリ量が増大するため、書込バッファ部13と読出バッファ部14の回路規模が増大するという問題が生じる。
また、Kが最小パケット長よりも小さいと、パケット境界が含まれないブロックの割合が増大し、ブロック管理情報のために使用されるメモリが無駄になるという問題が生じる。
また、メモリが複数のバンクに分かれている場合は、マルチ・バンク・オペレーションによって、メモリの帯域利用効率を向上させることができるので、Kを、バーストあたりのデータ量×バンク数の整数倍とすると、1ブロックのアクセスを予め決めておいたメモリへのコマンド発行手順によって行うことで、簡単な回路でマルチ・バンク・オペレーションを実現することができる。Kの値の例は、128,256,512,1024である。
ブロックの境界は、パケットの境界とは無関係に定められているため、1個のブロックに1個のパケットのパケットデータが完全に収容される場合と、複数のブロックにまたがって収容される場合がある。
各ブロックには、パケットデータの他に、固定長(Hバイト)のブロック管理情報が含まれ、ブロック管理情報のブロック内での位置が定められている。本例では、ブロックの先頭側すなわちアドレス最小側に寄せて配置される。
また、本例では、ブロック管理情報は、パケット境界情報の他に、そのブロックのパケットデータ領域を使い切っているか否かを示す、パケットデータ継続フラグを持つ。前記パケットデータ継続フラグが「1」の場合は、パケットデータ領域を使い切っている場合であり、パケットデータ領域の最後まで有効なパケットデータが格納されていることを示す。
一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
Hはブロック管理情報のバイト数である。ブロック内に入り得るパケット数分のパケット境界位置を示すパケット終端位置を含む必要がある。パケット終端位置をブロック先頭からのバイト数として表す場合は、1個のパケット終端位置は、ブロックのバイト数未満の値を表現するため、log2(K−1)以上のビット数となる。また、ブロック内のデータをバイト単位ではなくワード単位で扱う場合には、ブロック管理情報を1ワードまたは予め決められた個数のワードに収めるよう規定することで、ワード単位での扱いに整合する。
さらに、ブロック管理情報がパケットデータ継続フラグを含む場合には、ブロック管理情報に加えて前記フラグ用に少なくとも1ビットを必要となる。最小パケット長が64Byteのとき、Hの値の例は、2,4,8,16、であり、各々、K=128,256,512,1024に対応する。
ただし、K=512,1024の場合、パケット終端位置はブロック先頭からのバイト数ではなく、ブロック先頭からのワード数を表すと仮定している。前記により、パケット終端位置は、ブロック内のデータのバイト数を2進数として表現可能なビット数よりも少ないビット数で表現できるためである。例えば、K=512のとき、ブロック先頭からのバイト数としてパケット終端位置を規定すると8bit長となるが、ブロック先頭からの4Byte長のワード数パケット終端位置を規定すると6bit長で済む。
パケット境界情報は、M個のパケット終端位置からなる。各パケット終端位置は、ブロックに含まれるパケットデータ末尾バイトのブロック内での位置、すなわち、パケットデータ領域の先頭バイトから前記パケットデータ末尾バイトまでのバイト数で表される。この際、パケット終端位置が「1」となる場合は、パケットデータ領域の先頭バイトがパケットデータ末尾バイトである場合である。なお、パケット終端位置が「0」の値である場合は、前記パケット終端位置が無効であることを意味し、1個のブロックに含まれるパケットデータ末尾バイトの数がM個より少ない場合に生じる。
Mはブロック内に入り得るパケット数の最大値である。したがって、M≧K/最小パケット長となる。最小パケット長が64Byteのとき、Mの値の例は、M=2,4,8,16、であり、各々、K=128,256,512,1024に対応する。ただし、パケット境界位置情報はブロック先頭からのバイト数ではなくブロック先頭からのワード数を表すと仮定している。
[第1の実施の形態の書込動作]
次に、図3を参照して、本実施の形態にかかるパケットバッファ装置10の書込動作について説明する。図3は、第1の実施の形態にかかる書込動作を示す状態遷移図である。
この書込動作において、次のような制御変数が用いられる。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Mは、1個のブロックデータ内に含みうるパケット数の最大値である。
格納位置は、パケットデータを1バイトずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ100)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
初期化状態(ステップ100)において、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化処理において、バッファ制御部11は、M個のパケット終端位置の値を「0」に初期化するとともに、変数iの値を「0」に初期化する。また、バッファ制御部11は、書込バッファ部13の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ100)において、初期化が完了した時点で、パケットの入力を待つ、入力待ち状態(ステップ101)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ101)において、パケットの入力があった時点、すなわち「入力あり」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ102)に遷移する。
また、入力待ち状態(ステップ101)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがあるか、または、書込バッファ部13に保持されているパケットデータがない場合、すなわち「入力なし and(メモリ蓄積あり or データ保持なし)」の場合、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態(ステップ101)に留まる。
書込バッファ部13は、1ブロック分のパケットデータが揃うまで、書込ブロックバッファ13A内で前記パケットデータを保持する。例えば、初期状態(空の状態)の書込ブロックバッファ13Aに、3.5ブロック分の長さのパケットデータを持つ1個のパケットが入力された場合、このパケットデータは、先頭から3個のブロックに順に分割されて、メモリ部12に書き込まれるが、ブロック1個分に満たない残り0.5ブロック分のパケットデータについては、書込ブロックバッファ13A内で、次のパケットが入力されることによって、ブロック1個分のデータが揃うのを待つことになる。
このような場合に、メモリ部12から前記パケットデータを読み出すとき、メモリ部12に蓄積された3個のブロックのデータについては読み出しが行われるが、書込ブロックバッファ13A内に残ったパケットデータについてはメモリ部12に蓄積されていないので、このままでは、メモリ部12から読み出した3個のブロックデータからパケットを再生することができない。
そこで、このような状況では、ブロック書き込み2状態(ステップ104)に遷移することによって、書込ブロックバッファ13A内に残された残りのデータを、1ブロック分のブロックデータが揃っていなくともメモリ部12に書き込むことにより、メモリ部12から1個のパケットデータを全て読み出せるようにしている。
すなわち、入力待ち状態(ステップ101)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがなく、かつ、書込バッファ部13に保持されているデータがある場合、すなわち「入力なし and(メモリ蓄積なし and データ保持あり)」の場合、バッファ制御部11は、1ブロック分のパケットデータが揃うのを待たずに、未満了状態のブロックをメモリ部12に書き込むため、ブロック書き込み2状態(ステップ104)に遷移する。この遷移は、入力がなくメモリ部12に蓄積されたパケットデータを出し尽くし、書込ブロックバッファ13Aに残った最後のデータが出力されない状況を回避するためのものである。
[データ格納状態]
データ格納状態(ステップ102)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1バイトずつ格納し、併せて、前記格納位置を1バイトずつ後ろに移動させる。
また、データ格納状態(ステップ102)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「パケット継続 and ブロック未満了」の場合、バッファ制御部11は、データ格納状態(ステップ102)に留まって、前記パケットデータの格納を継続する。
一方、データ格納状態(ステップ102)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「パケット継続 and ブロック満了」の場合、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックデータをメモリ部12に書き込む、ブロック書き込み1状態(ステップ103)に遷移する。
また、データ格納状態(ステップ102)において、パケットデータをその末尾バイトまで書込ブロックバッファ13Aへ入力し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、書込ブロックバッファ13Aにパケット終端位置を格納する、パケット終端位置更新状態(ステップ105)に遷移する。
[データ終端位置更新状態]
データ終端位置更新状態(ステップ105)において、バッファ制御部11は、変数iの値に「1」を加算する。
さらに、バッファ制御部11は、直前のデータ格納状態(ステップ102)において、パケットデータの末尾バイトを書込ブロックバッファ13Aに格納した際、その格納位置に相当するバイト数、すなわち、前記書込ブロックバッファ13Aのパケットデータ領域先頭から前記末尾バイトまでのバイト数を、ブロック管理情報に含まれるパケット終端位置#iとして、書込ブロックバッファ13Aに格納する。
データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「ブロック未満了」時、バッファ制御部11は、入力待ち状態(ステップ101)に遷移する。
また、データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ104)に遷移する。
[ブロック書き込み1状態]
ブロック書き込み1状態(ステップ103)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、M個のパケット終端位置の値を「0」に初期化するとともに、変数iを「0」に初期化する。また、書込バッファ部13で保持する格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、データ格納状態(ステップ102)に遷移する。
[ブロック書き込み2状態]
ブロック書き込み2状態(ステップ104)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されたブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、M個のパケット終端位置の値を「0」に初期化するとともに、変数iを「0」に初期化する。また、書込バッファ部13の格納位置を「0」に初期化する。これにより、格納位置がパケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、入力待ち状態(ステップ101)に遷移する。
なお、以上で説明した書込動作において、ブロック書き込み1状態(ステップ103)またはブロック書き込み2状態(ステップ104)では、メモリ部12に保持していたブロックデータを書き込む処理を行うが、メモリ部12でのブロックの蓄積がなく、かつ、読出バッファ部14にブロックの保持がない場合は、前記のようにメモリ部12に書き込むのではなく、読出バッファ部14に格納する処理を行ってもよい。これにより、入力されたパケットが蓄積されず出力される状況において、メモリ部12への蓄積を省くことができるため、メモリ部12での消費電力の削減が可能となる。
[第1の実施の形態の読出動作]
次に、図4を参照して、本実施の形態にかかるパケットバッファ装置10の読出動作について説明する。図4は、第1の実施の形態にかかる読出動作を示す状態遷移図である。
この読出動作において、次のような制御変数が用いられる
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Mは、1個のブロックデータ内に含みうるパケット数の最大値である。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
格納位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
取得位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ110)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
初期化状態(ステップ110)において、バッファ制御部11は、読出ブロックバッファ14Aを初期化する。この初期化処理において、バッファ制御部11は、データ保持有無の値をデータ保持なしに初期化する。
また、この初期化において、バッファ制御部11は、M個のパケット終端位置の値を「0」に初期化するとともに、変数iの値を「0」に初期化する。また、バッファ制御部11は、読出バッファ部14の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ110)において、初期化が完了した時点で、出力指示情報の入力を待つ、入力待ち状態(ステップ111)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ111)において、バッファ制御部11は、出力指示情報の入力があるまで、他の状態に遷移せずに、出力指示情報の入力を待ち受ける入力待ち状態(ステップ111)に留まる。
また、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ112)に遷移する。
一方、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持なしを示す場合、すなわち「入力あり and データ保持なし」の場合、バッファ制御部11は、ブロック読み出し状態(ステップ113)に遷移する。
[データ取得状態]
データ取得状態(ステップ112)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1バイトずつ取得して出力し、併せて、前記取得位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で出力するのではなく、予め定められたバイト数単位で出力する場合には、前記バイト数単位で格納と格納位置の移動を行う。
また、データ取得状態(ステップ112)において、バッファ制御部11は、パケット継続/終了と、残データあり/なし、すなわち読出ブロックバッファ14A内に取得前のパケットデータがあるか/ないかとを判定する。
この際、前記パケット終了は、読出ブロックバッファ14Aに格納されたパケット終端位置#iが示す位置に前記取得位置が達したこと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。なお、変数iは、読出ブロックバッファ14Aに含まれるM個のパケット終端位置のうち、取得対象のパケットに対するパケット終端位置を特定する変数としても用いられる。
また、パケット継続は、前記パケット終了の条件を満たさないことを条件として判定する。この際、パケット終端位置#iの値が「0」の場合あるいはi>Mの場合は、取得中のパケットの末尾バイトを読出ブロックバッファ14Aに含まれず後続ブロックに含まれることを意味するため、前記判定はパケット継続となる。
一方、前記残データありは、前記取得位置がパケットデータ領域の最終バイト位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。
また、データ取得状態(ステップ112)において、パケットデータの末尾バイトまでデータを取得し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、前記データ保持有無の値を、以下に示す判定に基づいて更新し、その後、入力待ち状態(ステップ111)に遷移する。
バッファ制御部11は、上記判定において、まず、前記取得位置がパケットデータ領域の最終バイト位置に達した場合、データ保持有無の値を保持なしと設定する。
一方、前記取得位置がパケットデータ領域の最終バイト位置に達していない場合は、バッファ制御部11は、変数iの値に「1」を加算する。
この際、変数iの更新後に、読出ブロックバッファ14Aに格納されたパケット終端位置#iの値が「0」の場合あるいはi>Mであり、かつ、パケットデータ継続フラグの値が「1」の場合、すなわち、「(i>M)or パケット終端位置[i]==0)and パケットデータ継続フラグ==1」の場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
一方、前記パケット終端位置#iの値が「0」の場合あるいはi>Mであり、かつ、パケットデータ継続フラグの値が「0」の場合、すなわち、「(i>M)or パケット終端位置[i]==0)and パケットデータ継続フラグ==0」の場合、バッファ制御部11は、データ保持有無の値を保持なしと設定する。
また、前記以外、すなわち、前記パケット終端位置#iの値が「0」以外、かつ、i≦Mの場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
また、データ取得状態(ステップ112)において、パケット継続であり、かつ、残データなしの場合、すなわち「パケット継続 and 残データなし」時、バッファ制御部11は、メモリ部12が蓄積するブロックを読み出し、読出ブロックバッファ14Aに格納する、ブロック読み出し状態(ステップ113)に遷移する。
一方、データ取得状態(ステップ112)において、パケット継続であり、かつ、残データありの場合、すなわち「パケット継続 and 残データあり」時、バッファ制御部11は、データ取得状態(ステップ112)に留まって、読出ブロックバッファ14Aからパケットデータを取得して出力する。
[ブロック読み出し状態]
ブロック読み出し状態(ステップ113)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックデータを読み出して、読出ブロックバッファ14Aに前記ブロックデータを格納する。また、バッファ制御部11は、前記取得位置の値を、読出ブロックバッファ14A内のパケットデータ領域の先頭位置を示す値に初期化するとともに、前記データ保持有無の値を保持ありに初期化し、さらに、変数iの値を「1」に初期化する。
[第1の実施の形態の効果]
このように、本実施の形態にかかるパケットバッファ装置10は、固定長の記憶領域であるブロックを単位としてデータの書き込みおよび読み出しを行うメモリ部12と、少なくとも前記ブロック分のデータを保持する書込ブロックバッファ13Aと、少なくとも前記ブロック分のデータを保持する読出ブロックバッファ14Aとを備え、パケット制御部11において、入力された可変長のパケットのパケットデータを、前記書込ブロックバッファ13Aへ順次格納するとともに、当該書込ブロックバッファ13A内における当該パケットデータの終端位置を示すパケット境界情報を当該書込ブロックバッファ13Aへ格納し、当該書込ブロックバッファ13A内に所定量のデータが格納された時点で、当該データをメモリ部12へ書き込み、入力された出力指示に応じて、メモリ部12から前記データを読み出して前記読出ブロックバッファ14Aへ格納し、当該データに含まれる前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するようにしたものである。
これにより、入力パケット毎に生成されるパケット境界情報含む固定長のブロック管理情報が、パケットデータと連結して、メモリ部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となる(log2(2000000)以上の整数)。
したがって、蓄積したパケット1個につき1個のパケットジョブをジョブ用メモリに格納しパケットジョブにパケットを格納したデータ用メモリのアドレスを格納する場合、各パケットジョブのビット数が21bit、ジョブ用メモリへのパケットジョブの蓄積数は最大のフレーム蓄積数と同じく125000個となり、ジョブ用メモリのメモリ量は、21 bit×125000=2625000bit=328kByteとなる。
一方、本発明において、ブロック長=256 Byte、ブロック管理情報=4 Byteとすると、8 MByte分のデータを蓄積するためのブロック数は8 MByte/(256Byte−4Byte)=31746個であり、パケットジョブに相当するブロック管理情報に必要となるメモリ量は、4byte×31746個=127KByteとなる。なお、ブロック内に入るパケット数は最大4個であるので、1個のブロック管理情報に、4個のパケットの境界位置を保持することができればよい。パケット境界位置をブロック先頭からのバイト数として表すと、各パケット境界情報のビット数は8bitあれば足りるため、1個のブロック管理情報は4byte以上の長さがあればよい。
ジョブ用メモリのメモリ量328kByteをSRAMで実現したときのジョブ用メモリの面積は、製造プロセスにもよるが約mmである。すなわち、DRAMを回路の外部デバイスとして回路面積から除外する場合、本願によって、ジョブ用メモリ分の面積であるmmを、回路面積から削減できる。また、DRAMの面積を合わせた場合の面積削減については、本願(ブロック長=256 Byte、1ブロックの管理情報=4Byteの場合)を採用すると、DRAMは管理情報分として127KByteの増加となるが、ジョブ用メモリは不要となる。DRAMの1ビットあたりの面積はSRAMの1ビットあたりの面積の1/4とすると、管理情報分として0.8mm2のDRAMの面積増加となる。したがって、本願によって8−0.8=7.4mm2の回路面積を削減することができる。
さらに、データ用メモリとして使用されるDRAMがメモリ量によらずその消費電力がほぼ一定であるのに対して、ジョブ用メモリとして使用されるSRAMはメモリ量によって増加する。本願で管理情報分の面積増加となったときも、DRAMがメモリ量によらず一定電力であることから、DRAMで消費される電力は、従来例も本願でも同じである。本願ではジョブ用メモリは不要であるため前記に相当する消費電力である、700mWが本願の採用によって削減できる効果がある。なお、メモリの面積・電力を計算は、例えば、文献http://www2.renesas.com/process/ja/edramadvantages.htmlを参考とした。
このように、従来例も少ない量のメモリ(上記具体例では従来例のジョブ用メモリサイズの39%程度のメモリ量で)で、パケットジョブに相当するブロック管理情報を記憶することができる。
また、一般的には、固定長のブロックに複数のパケットデータを格納する場合、ブロック番号から当該ブロックの先頭アドレスを計算式で特定し、これら先頭アドレスに基づき、各ブロックにパケットデータを格納することができる。さらに、パケットデータが固定長であれば、ブロック内の決められたアドレスからパケットデータを格納することを前提として、ブロック内に格納したパケットデータの先頭アドレスをそれぞれ計算式で特定することも可能である。
しかしながら、本発明の課題とするパケットデータが可変長の場合、上記の方法では、ブロック内に格納したパケットデータの先頭アドレスを特定することはできない。したがって、前述したパケットジョブ(ジョブ情報)と同様の管理情報を、ブロックごとに別個のメモリで管理する必要があり、これらメモリの増大に伴う回路規模が大幅に増加する。
これに対して、本実施の形態にかかるパケットバッファ装置10によれば、ブロックごとに設けたブロック管理情報に、ブロック内に格納されたパケットデータの終端位置を示すパケット境界情報が含まれている。このため、このパケット境界情報に基づき、ブロック内に格納されている各パケットデータの先頭アドレスを、極めて容易に特定することができ、メモリの増大に伴う余分な回路規模の増加を抑制することも可能となる。
[第2の実施の形態]
次に、本発明の第2の実施の形態にかかるパケットバッファ装置10について説明する。
本実施の形態にかかるパケットバッファ装置10は、図1に示した第1の実施の形態と同様の構成を有しているが、図3および図4に示した状態遷移とは一部異なる処理を行うことで、メモリ部12に蓄積されるブロックの内部構造が異なっている。
図5は、第2の実施の形態にかかるメモリ部の構成例である。
本実施の形態にかかるパケットバッファ装置10において、メモリ部12は、図5に示すように、バッファ制御部11によって、固定長(Kワード、各ワードはKビット)のブロック単位でパケットを蓄積するよう制御される。
本例では、メモリ部12内のアドレスが連続するメモリ領域を、Kワードずつに区切って各々をブロックを構成し、パケットデータが入力されるごとに、アドレスの小さいブロックから順に格納する。
ブロックの境界は、パケットデータの境界とは無関係に定められているため、1個のパケットデータが1個のブロック内に完全に収容される場合と、複数のブロックにまたがって収容される場合がある。
各ブロックには、パケットデータの他に、例えば1ワード分からなる固定長のブロック管理情報が含まれ、このブロック管理情報の格納位置は、各ブロック内で固定された位置が定められている。本例において、ブロック管理情報はブロックの先頭側すなわちアドレス最小側に寄せて配置される。
ブロック管理情報をブロックの中で最初に読み出される位置に配置してメモリに格納すると、複数ブロックに分割格納されていないパケットデータをメモリから読み出すときと比較して、複数のブロックに分割格納されているパケットデータの場合でも、パケットデータをメモリから読み取るときのメモリの帯域利用効率を低下を回避して、分割されたパケットデータを含む複数のブロックをメモリから中断なく読み取ることが可能となる。
これは、以下の動作による。ブロックの読み出し時に最初に読み出されるブロック管理情報から、ブロック内にパケット終端が含まれるか否かを判断し、パケット終端が含まれない場合は、ブロックに継続するブロックを読み出すコマンドをメモリに発行する。すなわち、ブロック管理情報をブロックの中で最初に読み出される位置に格納することで、ブロックをメモリから読み出した直後に、前記ブロック内にパケット終端が含まれるか否かを判断することができるため、パケット終端が含まれない場合に早く次のブロックの読み出しを開始できる。このため、ブロックの読み出しと次のブロックの読み出しの間の時間を最小にすることができる。
各ブロックのパケットデータ領域は、K−1個のワードで構成されたパケットデータを収容する。ここで、パケットデータの先頭バイトを含むワードにおいて、前記先頭バイトを前記ワードの先頭バイトに配置する。また、前記パケットデータの末尾バイトに続けて、所定のパケット終端パタンとする。
本例において、パケット終端パタンは、パケット終端バイトとパケット終端パッドパタンとから構成されている。すなわち、前記パケットデータの末尾バイトの次のバイトを、値「0」のパケット終端バイトとし、前記パケット終端バイトと次のパケットデータの先頭バイトの間、すなわち、パケット終端バイトを含むワード内でパケット終端バイトの次から前記ワードの末尾までに、各バイト値が「255」のパケット終端パッドパタンが挿入される。なお、パケット終端バイトがワードの末尾に位置する場合は、終端パッドパタンは挿入されない。また、パケットデータの末尾バイトがワード末尾にくる場合は、続くパケット終端バイトは次のワードの先頭となり、そのワードの末尾まで終端パッドパタンが挿入される。
前記ブロック管理情報は、パケットデータ継続フラグの1ビットと、パケットデータ領域を構成する各ワードがパケット終端バイトを含むか否かを示すK−1個の境界判定ビット列から構成される。
前記パケットデータ継続フラグは、そのブロックのパケットデータ領域を使い切っているか否かを示す。前記パケットデータ継続フラグが「1」の場合は、パケットデータ領域を使い切っている場合であり、パケットデータ領域の最後まで有効なパケットデータが格納されていることを示す。一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
なお、本例では、1ワードのビット数と1ブロックに含まれるワード数が一致しているため、ブロック管理情報の1ワードは、パケットデータ継続フラグと境界判定ビット列のみから構成されることになるが、1ワードのビット数<1ブロックに含まれるワード数の場合は、ブロック管理情報を2ワード以上で構成することになる。また、1ワードのビット数>1ブロックに含まれるワード数の場合は、ブロック管理情報として、パケットデータ継続フラグと境界判定ビット列の他に、ブロック毎に所定の方法により算出したパリティを含めることや、ブロック管理情報のワード数を、パケットデータ継続フラグと境界判定ビット列のみを含む場合のワード数より大きくし、前記パリティをブロック管理情報に含めることも可能である。
[第2の実施の形態の書込動作]
次に、前述した図3を参照して、本実施の形態にかかるパケットバッファ装置10の書込動作について説明する。なお、本実施の形態にかかる読出動作は、図3の状態遷移図の一部において相違しているところがある。
この書込動作において、次のような制御変数が用いられる。
境界判定ビットは、ワードごとに、当該ワードにおけるパケット末尾バイトの存在有無を示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
格納位置は、パケットデータを1ワードずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(ワードアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
初期化状態(ステップ100)において、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化処理において、バッファ制御部11は、書込ブロックバッファ13Aの全ての境界判定ビットの値を「0」とする。また、書込バッファ部13の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ100)において、初期化が完了した時点で、パケットの入力を待つ、入力待ち状態(ステップ101)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ101)において、パケットの入力があった時点、すなわち「入力あり」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ102)に遷移する。
また、入力待ち状態(ステップ101)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがあるか、または、書込バッファ部13に保持されているパケットデータがない場合、すなわち「入力なし and(メモリ蓄積あり or データ保持なし)」の場合、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態(ステップ101)に留まる。
また、入力待ち状態(ステップ101)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがなく、かつ、書込バッファ部13に保持されているパケットデータがある場合、すなわち「入力なし and(メモリ蓄積なし and データ保持あり)」の場合、バッファ制御部11は、1ブロック分のパケットデータが揃うのを待たずに、未満了状態のブロックをメモリ部12に書き込むため、ブロック書き込み2状態(ステップ104)に遷移する。この遷移は、入力がなくメモリ部12に蓄積されたパケットデータを出し尽くし、書込ブロックバッファ13Aに残った最後のパケットデータが出力されない状況を回避するためのものである。
[データ格納状態]
データ格納状態(ステップ102)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1ワードずつ格納し、併せて、前記格納位置を1ワードずつ後ろに移動させる。なお、パケットデータの先頭バイトが、前記バイトを含むワードの先頭位置となるように、前記パケットデータをワード単位で分割する。
また、データ格納状態(ステップ102)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「パケット継続 and ブロック未満了」の場合、バッファ制御部11は、データ格納状態(ステップ102)に留まって、前記データ格納を継続する。
一方、データ格納状態(ステップ102)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「パケット継続 and ブロック満了」の場合、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み1状態(ステップ103)に遷移する。
また、データ格納状態(ステップ102)において、パケットデータの末尾バイトまでデータを入力し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、書込ブロックバッファ13Aにパケット終端位置を格納する、パケット終端位置更新状態(ステップ105)に遷移する。
[データ終端位置更新状態]
データ終端位置更新状態(ステップ105)において、バッファ制御部11は、データ格納状態において格納した最後のワード内に含まれるパケットデータの末尾バイトに続けて、パケット終端パタンを格納する。本例では、前記パケットデータの末尾バイトの次のバイト位置に、値「0」のパケット終端バイトを格納し、さらに、前記パケット終端バイトを含むワード内において、前記パケット終端バイトの次のバイト位置から前記ワードの末尾バイト位置までに、各バイト値が「255」のパケット終端パッドパタンを格納する。さらに、データ終端位置更新状態(ステップ105)において、バッファ制御部11は、パケット終端バイトを格納したワードに対応する境界判定ビットに「1」を格納する。
また、データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「ブロック未満了」時、バッファ制御部11は、入力待ち状態(ステップ101)に遷移する。
一方、データ終端位置更新状態(ステップ105)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ104)に遷移する。
[ブロック書き込み1状態]
ブロック書き込み1状態(ステップ103)において、バッファ制御部11は、書込ブロックバッファ13A内のブロック管理情報に保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、全ての境界判定ビットの値を「0」とする。また、書込バッファ部13の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭ワードにセットされる。その後、バッファ制御部11は、データ格納状態(ステップ102)に遷移する。
[ブロック書き込み2状態]
ブロック書き込み2状態(ステップ104)において、バッファ制御部11は、書込ブロックバッファ13A内に保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、全ての境界判定ビットの値を「0」に初期化し、書込バッファ部13の格納位置を「0」に初期化する。これにより、格納位置がパケットデータ領域の先頭ワードにセットされる。その後、バッファ制御部11は、入力待ち状態(ステップ101)に遷移する。
なお、以上で説明した書込動作において、ブロック書き込み1状態(ステップ103)またはブロック書き込み2状態(ステップ104)では、メモリ部12に保持しているブロックデータを書き込む処理を行うが、メモリ部12でのブロックの蓄積がなく、かつ、読出ブロックバッファ14Aにブロックの保持がない場合は、前記のようにメモリ部12に書き込むのではなく、読出ブロックバッファ14Aに格納する処理を行ってもよい。これにより、入力されたパケットが蓄積されず出力される状況において、メモリ部12への蓄積を省くことができるため、メモリ部12での消費電力の削減が可能となる。
[第2の実施の形態の読出動作]
次に、図4を参照して、本実施の形態にかかるパケットバッファ装置10の読出動作について説明する。なお、本実施の形態にかかる読出動作は、図4の状態遷移図の一部において相違しているところがある。
この読出動作において、次のような制御変数が用いられる
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
格納位置は、パケットデータを1ワードずつ読出ブロックバッファ14A内のパケットデータ領域に格納するときの位置を指定する変数(ワードアドレス)である。
取得位置は、パケットデータを1ワードずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(ワードアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
初期化状態(ステップ110)において、バッファ制御部11は、読出ブロックバッファ14Aを初期化する。この初期化処理において、バッファ制御部11は、データ保持有無の値をデータ保持なしに初期化する。
バッファ制御部11は、初期化状態(ステップ110)において、初期化が完了した時点で、出力指示情報の入力を待つ、入力待ち状態(ステップ111)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ111)において、バッファ制御部11は、出力指示情報の入力があるまで、他の状態に遷移せずに、出力指示情報の入力を待ち受ける入力待ち状態(ステップ111)に留まる。
また、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ112)に遷移する。
一方、入力待ち状態(ステップ111)において、出力指示情報の入力があった時点で、前記データ保持有無がデータ保持なしを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、ブロック読み出し状態(ステップ113)に遷移する。
[データ取得状態]
データ取得状態(ステップ112)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1ワードずつ取得して出力し、併せて、前記取得位置を1ワードずつ後ろに移動させる。
また、データ取得状態(ステップ112)において、バッファ制御部11は、パケット継続/終了と、残データあり/なしを判定する。
この際、前記パケット終了は、読出ブロックバッファ14Aから取得したワードに対応した境界判定ビットが「1」となる(前記ワード内にパケット終端バイトを含む)こと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。また、パケット継続は、前記パケット終了の条件を満たさないことを条件として判定する。
一方、前記残データありは、前記取得位置がパケットデータ領域の最終ワード位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。
また、データ取得状態(ステップ112)において、パケットデータの末尾バイトまでデータを取得し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、前記データ保持有無の値を、以下に示す判定に基づいて更新し、その後、入力待ち状態(ステップ111)に遷移する。
バッファ制御部11は、上記判定において、まず、前記取得位置がパケットデータ領域の最終ワード位置に達した場合、保持なしとする。
一方、前記取得位置がパケットデータ領域の最終ワード位置に達していない場合、かつ、パケットデータ継続フラグの値が「1」の場合は、保持ありとする。
また、前記取得位置がパケットデータ領域の最終ワード位置に達していない場合、かつ、パケットデータ継続フラグの値が「0」の場合、かつ、前記パケットデータ領域内にある取得済みのワードより後のワードに対応する境界判定ビットの中に「1」の値をとるものが含まれる場合、保持ありとする。
また、前記以外は、保持なしとする。
また、データ取得状態(ステップ112)において、パケット継続であり、かつ、残データなしの場合、すなわち「パケット継続 and 残データなし」時、バッファ制御部11は、メモリ部12が蓄積するブロックを読み出して、読出ブロックバッファ14Aに格納する、ブロック読み出し状態(ステップ113)に遷移する。
一方、データ取得状態(ステップ112)において、パケット継続であり、かつ、残データありの場合、すなわち「パケット継続 and 残データあり」時、バッファ制御部11は、データ取得状態(ステップ112)に留まって、読出ブロックバッファ14Aからパケットデータを取得して出力する。
[ブロック読み出し状態]
ブロック読み出し状態(ステップ113)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックを読み出して、読出ブロックバッファ14Aに前記ブロックを格納する。また、バッファ制御部11は、前記取得位置を示す変数値を、読出ブロックバッファ14A内のパケットデータ領域の先頭ワード位置を示す値に初期化するとともに、データ保持有無の値を保持ありに初期化する。
[第2の実施の形態の効果]
このように、本実施の形態にかかるパケットバッファ装置10は、メモリ部12の前記ブロックが、複数バイトの固定長からなるワードを単位として複数個に分割されてなり、前記パケット制御部11は、前記書込ブロックバッファ13Aに前記ブロック管理情報を格納する際、前記書込ブロックバッファ13A内の前記ワードの先頭ワードから前記ブロック管理情報を格納し、前記書込ブロックバッファ13Aに前記パケットデータを書き込む際、前記ブロック管理情報の末尾バイトを格納した前記先頭ワードの次のワードから順に格納用のワードを選択し、選択したワードに前記パケットデータを格納する際、当該ワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、前記書込ブロックバッファ13Aに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納するようにしたものである。
これにより、本実施の形態にかかるパケットバッファ装置10によれば、ブロック管理情報およびパケットデータを固定長のワードの整数倍とすることができ、バイト単位ではなく、より大きなワード単位での処理が可能となるため、書き込みバッファの回路を簡易化することができる。
また、境界判定ビット列をパケット境界情報としているため、ブロック先頭バイトからのバイト数を計数する必要がなくなり、パケット境界情報を生成するための回路を簡易化することができる。同様に、パケット境界情報に基づいてブロックから個々のパケットを抽出するための回路を簡易化することができる。
上記の効果について、以下に説明する。
第2の実施の形態では、ブロック管理情報およびパケットデータを、固定長のワード単位で扱うが、第1の実施の形態ではバイト単位で扱う。
パケットの宛先や送信元など表す情報を含むヘッダは、パケットデータの先頭バイトを基準として決まった位置にあり、パケットに対する処理を行うとき、例えば、パケットを入出力する複数のポートを装置が備えるときパケットのヘッダの値に応じて、どのポートから出力するかを決める、複数のキューを備えるときパケットのヘッダの値に応じて、どのキューにパケットを蓄積するかを決める、など、パケットデータのヘッダの値を読み取る処理が行われる。
また、前記の処理では、パケットデータをバイト列ではなく、ワードの列とし、前記ワード列に対する処理として回路を構成して回路のクロック周波数を低減することが、一般的に行われる。
ここで、パケット先頭バイトが、ワード内のどのバイトにも現れる可能性があるような回路では、パケットデータのワード列からヘッダの値を読み取るとき、前記パケット先頭バイトのワード内での位置を考慮した処理が必要となる。
一方、パケット先頭バイトが、ワード内の第1バイトのみに現れるように、整列されたパケットデータである場合は、前記の考慮は不要となり、ヘッダを処理するための回路を簡易化することができる。このため、パケット先頭バイトが、ワード内の第1バイトのみに現れるよう整列させることが、一般的に行われている。
第2の実施の形態では、上記のパケット先頭バイト位置をワード内の第1バイトのみに現れるように整列されたワード列として扱う回路に適合する。
すなわち、第2の実施の形態にかかるパケットバッファ装置10が、パケット先頭バイト位置をワード内の第1バイトのみに現れるように整列されたワード列として扱う装置の後段あるいは前段にあり、装置間の信号形式が、パケット先頭バイト位置をワード内の第1バイトのみに現れるように整列されたワード列、という場合は、その信号形式を保ったまま、ブロック化してメモリに蓄積することができるので、バイト列としてパケットデータを扱う第1の実施の形態にかかるパケットバッファ装置10では必要であった信号形式の変換が不要となる。
なお、装置間の信号に上記信号形式を用いる場合、ワード列を通信する信号線の他に、前記ワード列がパケット境界を示すか否かを示す信号が必要となる。このパケット境界信号のビット値をブロック内に格納されたワードの順に配列すると、第2の実施の形態における境界判定ビット列とすることができる。このため、第2の実施の形態で境界判定ビット列を生成してブロック管理情報を生成するための回路は、第1の実施の形態のパケット終端位置を生成するためのブロック先頭位置からパケット末尾バイトまでのバイト数を計数し、さらに、書込ブロックバッファ13Aに保持されたデータに含まれるパケット末尾バイトの個数を計数する必要がないため、簡易化できる。
[第3の実施の形態]
次に、図6を参照して、本発明の本実施の形態にかかるパケットバッファ装置10について説明する。図6は、第3の実施の形態にかかるパケットバッファ装置の構成を示すブロック図である。
前述した第1の実施の形態では、固定長の記憶領域からなるブロックを単位として、入力された各パケットのパケットデータを、メモリ部12で蓄積する場合を例として説明した。本実施の形態は、複数個のブロックで区画を構成し、入力された各パケットのパケットデータを、指定されたキューと対応する区画内のブロックで蓄積するようにしたものである。
このパケットバッファ装置10は、前述の図1に示した第1の実施の形態にある、バッファ制御部11、メモリ部12、書込バッファ部13、読出バッファ部14に加えて、書込位置情報保持部21、読出位置情報保持部22、連結区画情報保持部23、空き区画情報保持部24を備えている。
書込位置情報保持部21は、各キューについての、パケットのデータをメモリに書き込み始める区画を特定する区画識別子である書込区画識別子と、前記区画内での書き込み始める位置を示す書込区画内位置情報とを保持する機能と、バッファ制御部11からキュー識別子の値を受け取って、前記キュー識別子によって特定されたキューの、書込区画識別子と書込区画内位置情報の値をバッファ制御部11に出力する機能、あるいは、バッファ制御部11からキュー識別子の値と、前記キュー識別子によって特定されたキューの、更新された書込区画識別子と書込区画内位置情報の値を受け取って、前記キューについて保持していた書込区画識別子と書込区画内位置情報の値を、前記更新された書込区画識別子と書込区画内位置情報の値に書き換える機能とを有している。これら機能は、キュー識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する書込区画識別子の値と書込区画内位置情報の値とを保持するメモリ回路によって実現可能である。
読出位置情報保持部22は、各キューについての、パケットのデータをメモリから読み出し始める区画を特定する区画識別子である読出区画識別子と、前記区画内での読み出し始める位置を示す読出区画内位置情報とを保持する機能と、バッファ制御部11からキュー識別子の値を受け取って、前記キュー識別子によって特定されたキューの、読出区画識別子と読出区画内位置情報の値をバッファ制御部11に出力する機能、あるいは、バッファ制御部11からキュー識別子の値と、前記キュー識別子によって特定されたキューの、更新された読出区画識別子と読出区画内位置情報の値を受け取って、前記キューについて保持していた読出区画識別子と読出区画内位置情報の値を、前記更新された読出区画識別子と読出区画内位置情報の値に書き換える機能とを有している。これら機能は、キュー識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する読出区画識別子の値と読出区画内位置情報の値とを保持するメモリ回路によって実現可能である。
連結区画情報保持部23は、各区画についての、前記区画に連結される区画を特定する区画識別子である連結区画識別子を保持する機能と、バッファ制御部11から区画識別子の値を受け取って、前記区画識別子によって特定された区画に連結される区画を特定する連結区画識別子の値を出力する機能、あるいは、バッファ制御部11から区画識別子の値と、前記区画識別子によって特定された区画の、更新された連結区画識別子の値を受け取って、前記区画について保持していた連結区画識別子の値を、前記更新された読出区画識別子と読出区画内位置情報の値に書き換える機能とを有している。これら機能は、区画識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する連結区画識別子の値を保持するメモリ回路によって実現可能である。
なお、本実施の形態では、連結区画情報保持部23は、連結区画識別子の値としてMを保持することが可能であり、前記値は連結された区画がないことを意味する。
空き区画情報保持部24は、バッファ制御部11がパケットのデータが蓄積されていない区画を空き区画のリストとして管理するために、空き区画リストの最初の区画を特定する区画識別子である空き区画連結開始識別子と、空き区画リストの最後の区画を特定する区画識別子である空き区画連結終了識別子とを保持する機能と、バッファ制御部11に、空き区画連結開始識別子と空き区画連結終了識別子の値を出力する機能、あるいは、バッファ制御部11から、更新された空き区画連結開始識別子と空き区画連結終了識別子の値を受け取って、保持していた空き区画連結開始識別子と空き区画連結終了識別子の値を、前記更新された値に変更する機能とを有している。これら機能は、区画識別子の値をアドレスとし、前記アドレスによって特定されるワードに、対応する空き区画連結開始識別子と空き区画連結終了識別子の値を保持するメモリ回路によって実現可能である。
図7は、メモリ部(ブロック分割)の構成例である。
メモリ部12は、図7に示すように、バッファ制御部11によって、複数の互いに重ならないアドレス範囲で区分けされ、前記区分けされた複数の区画として管理される。本実施の形態では、M個の区画に区分けされる。Mはキューの個数N以上の値をとる整数である。前記Mに対する制約は、すべてのキューに同時にパケットを蓄積可能とするために必要な制約であり、すべてのキューに同時にパケットを蓄積することが必要とされない実施形態では、前記制約は必要ない。また、メモリ部12のアドレス順に区分けしたときの各区画に割り付けられた番号を、前記区画を特定するための区画識別子とし、その値は0からM−1までの整数のうち何れかの値をとる。
また、各区画の内部は、複数の互いに重ならないアドレス範囲でさらに区分けされ、固定長であるKバイトのブロックで管理されており、1個の区画に最大B個のブロックを蓄積することができる。これにより、メモリ部12は、バッファ制御部11からの制御に基づき、任意の区画についてパケットデータを書き込み/読み出しする際、ブロック単位で、パケットデータをシーケンシャルで書き込み/読み出しする。
図8は、第3の実施の形態にかかるメモリ部におけるパケットデータ蓄積状態を示す説明図である。
本実施の形態では、メモリ部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が管理すべき区画数が増えるので、各キューの区画連結の状態を保持する連結区画情報保持部23や、空き区画を管理する空き区画情報保持部24の回路規模が増大する。つまり、メモリ利用効率を100%に近づけようとすると上記回路規模の増大が問題となるので、前記利用効率を80%から90%とする場合の指標である、M=N×5〜N×10程度が実用的な範囲である。
Kは1ブロックのバイト数であり、Kの値を、ブロックを記憶するメモリの1バーストでアクセスできるデータ量の整数倍とすることで、効率的なブロックの書き込み/読み出しが可能となる。1バーストあたりのデータ量は、一般的に2のべき乗の値をとるが、その値はメモリのデータ幅やバースト長に依存する。Kが大きくなると、1ブロック分のデータを保持するためのメモリ量が増大するため、書込バッファ部13と読出バッファ部14の回路規模が増大するという問題が生じる。
また、Kが最小パケット長よりも小さいと、パケット境界が含まれないブロックの割合が増大し、ブロック管理情報のために使用されるメモリが無駄になるという問題が生じる。
また、メモリが複数のバンクに分かれている場合は、マルチ・バンク・オペレーションによって、メモリの帯域利用効率を向上させることができるので、Kを、バーストあたりのデータ量×バンク数の整数倍とすると、1ブロックのアクセスを予め決めておいたメモリへのコマンド発行手順によって行うことで、簡単な回路でマルチ・バンク・オペレーションを実現することができる。Kの値の例は、128,256,512,1024である。
ブロックの境界は、パケットの境界とは無関係に定められているため、1個のブロックに1個のパケットのパケットデータが完全に収容される場合と、複数のブロックにまたがって収容される場合がある。
各ブロックには、パケットデータの他に、固定長(Hバイト)のブロック管理情報が含まれ、ブロック管理情報のブロック内での位置が定められている。本例では、ブロックの先頭側すなわちアドレス最小側に寄せて配置される。
また、本例では、ブロック管理情報は、パケット境界情報の他に、そのブロックのパケットデータ領域を使い切っているか否かを示す、パケットデータ継続フラグを持つ。前記パケットデータ継続フラグが「1」の場合は、パケットデータ領域を使い切っている場合であり、パケットデータ領域の最後まで有効なパケットデータが格納されていることを示す。
一方、前記パケットデータ継続フラグが「0」の場合は、前記領域内に含まれるパケットデータの末尾(1個のブロックに複数のパケットが収容されている場合は最後のパケットのデータ末尾)より後ろに、有効なパケットデータが格納されていないことを示す。
Hはブロック管理情報のバイト数である。ブロック内に入り得るパケット数分のパケット境界位置を示すパケット終端位置を含む必要がある。パケット終端位置をブロック先頭からのバイト数として表す場合は、1個のパケット終端位置は、ブロックのバイト数未満の値を表現するため、log2(K−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の実施の形態の書込動作]
次に、図9を参照して、本実施の形態にかかるパケットバッファ装置10において、キュー入力指示情報の入力に応じて、入力されたパケットのパケットデータを、書込ブロックバッファ13Aへワード単位で順次格納した後、ブロック単位で、メモリ部12内の対応する区画へ書き込む書込動作について説明する。図9は、第3の実施の形態にかかる書込動作を示す状態遷移図である。なお、書込動作動作のうち、ブロック書き込み1状態(ステップ203)およびブロック書き込み2状態(ステップ204)におけるブロック書込動作の詳細については、図10を参照して後述する。
この書込動作において、次のような制御変数が用いられる。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタであり、最大値P個以下の値をとる。
格納位置は、パケットデータを1バイトずつ書込ブロックバッファ13A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ200)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
初期化状態(ステップ200)において、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化処理において、バッファ制御部11は、M個のパケット終端位置の値を「0」に初期化するとともに、変数iの値を「0」に初期化する。また、バッファ制御部11は、書込バッファ部13の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ200)において、初期化が完了した時点で、パケットの入力を待つ、入力待ち状態(ステップ201)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ201)において、パケットの入力があった時点で、バッファ制御部11は、パケットデータを蓄積可能か否かを判定する。この際、蓄積可否は、現在の書込区画内での書込区画内位置(ブロック)が満了であり、かつ、連結区画が連結されていない状態を蓄積不可と判定し、他の状態を蓄積可と判定する。
したがって、パケットの入力があって、パケットの蓄積が可能であった場合、すなわち「入力あり and メモリ蓄積可」の場合、バッファ制御部11は、前記パケットのパケットデータを書込ブロックバッファ13Aに格納する、データ格納状態(ステップ202)に遷移する。
また、入力待ち状態(ステップ201)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがあるか、または、書込バッファ部13に保持されているパケットデータがない場合、すなわち「入力なし and(メモリ蓄積あり or データ保持なし)」の場合、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態(ステップ201)に留まる。
書込バッファ部13は、1ブロック分のパケットデータが揃うまで、書込ブロックバッファ13A内で前記パケットデータを保持する。例えば、初期状態(空の状態)の書込ブロックバッファ13Aに、3.5ブロック分の長さのパケットデータを持つ1個のパケットが入力された場合、このパケットデータは、先頭から3個のブロックに順に分割されて、メモリ部12に書き込まれるが、ブロック1個分に満たない残り0.5ブロック分のパケットデータについては、書込ブロックバッファ13A内で、次のパケットが入力されることによって、ブロック1個分のデータが揃うのを待つことになる。
このような場合に、メモリ部12から前記パケットデータを読み出すとき、メモリ部12に蓄積された3個のブロックのデータについては読み出しが行われるが、書込ブロックバッファ13A内に残ったパケットデータについてはメモリ部12に蓄積されていないので、このままでは、メモリ部12から読み出した3個のブロックデータからパケットを再生することができない。
そこで、このような状況では、ブロック書き込み2状態(ステップ204)に遷移することによって、書込ブロックバッファ13A内に残された残りのデータを、1ブロック分のブロックデータが揃っていなくともメモリ部12に書き込むことにより、メモリ部12から1個のパケットデータを全て読み出せるようにしている。
すなわち、入力待ち状態(ステップ201)において、パケットの入力がなく、メモリ部12に蓄積されたブロックがなく、かつ、書込バッファ部13に保持されているデータがある場合、すなわち「入力なし and(メモリ蓄積なし and データ保持あり)」の場合、バッファ制御部11は、1ブロック分のパケットデータが揃うのを待たずに、未満了状態のブロックをメモリ部12に書き込むため、ブロック書き込み2状態(ステップ204)に遷移する。この遷移は、入力がなくメモリ部12に蓄積されたパケットデータを出し尽くし、書込ブロックバッファ13Aに残った最後のデータが出力されない状況を回避するためのものである。
一方、入力待ち状態(ステップ201)において、パケットの入力があって、パケットの蓄積が不可能であった場合、すなわち「入力あり and メモリ蓄積不可」の場合、バッファ制御部11は、入力パケット廃棄状態(ステップ206)に遷移し、前記パケットを蓄積せず廃棄する。
[入力パケット廃棄状態]
入力パケット廃棄状態(ステップ206)において、バッファ制御部11は、パケットデータの入力が終了するまで、前記状態に留まり、前記パケットデータの入力終了に応じて、入力待ち状態(ステップ201)に遷移する。これにより、パケット単位で、パケットデータを廃棄することができる。したがって、パケットデータが途中まで書き込まれた後、その後半だけが廃棄されるという不連続パケットデータの発生を回避でき、不連続パケットデータに起因するパケット読み出し時の不具合発生を抑止することが可能となる。
[データ格納状態]
データ格納状態(ステップ202)において、バッファ制御部11は、書込ブロックバッファ13Aのうち、格納位置が示すパケットデータ領域内の位置に、入力されたパケットデータを1バイトずつ格納し、併せて、前記格納位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で入力されるのではなく、予め定められたバイト数単位で入力される場合には、前記バイト数単位で格納と格納位置の移動を行う。
また、データ格納状態(ステップ202)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「パケット継続 and ブロック未満了」の場合、バッファ制御部11は、データ格納状態(ステップ202)に留まって、前記パケットデータの格納を継続する。
一方、データ格納状態(ステップ202)において、パケットデータが後続し、かつ、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「パケット継続 and ブロック満了」の場合、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックデータをメモリ部12に書き込む、ブロック書き込み1状態(ステップ203)に遷移する。
また、データ格納状態(ステップ202)において、パケットデータをその末尾バイトまで書込ブロックバッファ13Aへ入力し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、書込ブロックバッファ13Aにパケット終端位置を格納する、パケット終端位置更新状態(ステップ205)に遷移する。
[データ終端位置更新状態]
データ終端位置更新状態(ステップ205)において、バッファ制御部11は、変数iの値に「1」を加算する。
さらに、バッファ制御部11は、直前のデータ格納状態(ステップ202)において、パケットデータの末尾バイトを書込ブロックバッファ13Aに格納した際、その格納位置に相当するバイト数、すなわち、前記書込ブロックバッファ13Aのパケットデータ領域先頭から前記末尾バイトまでのバイト数を、ブロック管理情報に含まれるパケット終端位置#iとして、書込ブロックバッファ13Aに格納する。
データ終端位置更新状態(ステップ205)において、書込ブロックバッファ13Aのパケットデータ領域に空きがある場合、すなわち「ブロック未満了」時、バッファ制御部11は、入力待ち状態(ステップ201)に遷移する。
また、データ終端位置更新状態(ステップ205)において、書込ブロックバッファ13Aのパケットデータ領域に空きがなくなった場合、すなわち「ブロック満了」時、バッファ制御部11は、書込ブロックバッファ13Aに保持されたブロックをメモリ部12に書き込む、ブロック書き込み2状態(ステップ204)に遷移する。
[ブロック書き込み1状態]
ブロック書き込み1状態(ステップ203)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「1」とし、書込ブロックバッファ13Aに保持されているブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、P個のパケット終端位置の値を「0」に初期化するとともに、変数iを「0」に初期化する。また、書込バッファ部13で保持する格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、データ格納状態(ステップ202)に遷移する。
[ブロック書き込み2状態]
ブロック書き込み2状態(ステップ204)において、バッファ制御部11は、書込ブロックバッファ13A内にブロック管理情報として保持されているパケットデータ継続フラグの値を「0」に初期化し、書込ブロックバッファ13Aに保持されたブロックデータを、メモリ部12内の所定のアドレスに書き込む。
さらに、バッファ制御部11は、書込ブロックバッファ13Aを初期化する。この初期化では、P個のパケット終端位置の値を「0」に初期化するとともに、変数iを「0」に初期化する。また、書込バッファ部13の格納位置を「0」に初期化する。これにより、格納位置がパケットデータ領域の先頭位置にセットされる。その後、バッファ制御部11は、入力待ち状態(ステップ201)に遷移する。
なお、以上で説明した書込動作において、ブロック書き込み1状態(ステップ203)またはブロック書き込み2状態(ステップ204)では、メモリ部12に保持していたブロックデータを書き込む処理を行うが、メモリ部12でのブロックの蓄積がなく、かつ、読出バッファ部14にブロックの保持がない場合は、前記のようにメモリ部12に書き込むのではなく、読出バッファ部14に格納する処理を行ってもよい。これにより、入力されたパケットが蓄積されず出力される状況において、メモリ部12への蓄積を省くことができるため、メモリ部12での消費電力の削減が可能となる。
[第3の実施の形態のブロック書込動作]
次に、図10を参照して、前述した図9のブロック書き込み1状態(ステップ203)およびブロック書き込み2状態(ステップ204)において、書込ブロックバッファ13A内のブロックデータを、ブロックデータ単位で、メモリ部12内の対応する区画へ書き込むブロック書込動作について説明する。図10は、第3の実施の形態にかかるブロック書込動作を示す状態遷移図である。
このブロック書込動作において、次のような制御変数が用いられる。
書込区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを書き込む区画を特定するための識別子である。
書込区画内位置情報は、前記キューごと設けられて、当該キューの書込区画識別子で特定される区画内における書込開始ブロック位置を示す情報である。
アドレスは、書込区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。
変数Bは、区画内に設けられたブロックの全ブロック数である。
変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。
連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。
区画連結位置は、区画に対するパケットデータの書き込み処理中に、当該区画に対して新たな区画を連結をするための区画連結信号を出力するタイミングを特定するための、区画内における書込位置情報である。
変数Mは、メモリ部12に設けられた区画の全区画数であり、書込区画識別子の最大値に相当する。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの入力を開始する前に、初期化状態(ステップ210)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ210)において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態(ステップ211)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ211)において、パケットとキュー入力指示情報の入力があった時点で、書込位置情報取得状態(ステップ212)に遷移する。前記入力がない間、バッファ制御部11は、他の状態に遷移せずに、パケットの入力を待ち受ける入力待ち状態(ステップ211)に留まる。
[書込位置情報取得状態]
書込位置情報取得状態(ステップ212)において、バッファ制御部11は、書込位置情報保持部21に対して、入力されたキュー入力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、書込区画識別子(区画単位)と書込区画内位置情報(ブロック単位)の値を書込位置情報保持部21から受け取って、アドレス算出状態(ステップ213)に遷移する。
[アドレス算出状態]
アドレス算出状態(ステップ213)において、バッファ制御部11は、書込区画識別子と書込区画内位置情報との値に基づいて、パケットデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=書込区画識別子値×B×K+書込区画内位置情報値×K、で算出する。前記算出後、バッファ制御部11は、ブロックデータ書き込み状態(ステップ214)に遷移する。
[ブロックデータ書き込み状態]
ブロックデータ書き込み状態(ステップ214)において、バッファ制御部11は、算出されたアドレスと、書込ブロックバッファ13A内の1ブロック分のデータを、メモリ部12に出力する。
これにより、メモリ部12では、前記アドレスのメモリセルに1ブロックデータが保持される。前記出力後、以下の条件に応じて、書込区画内位置更新状態(ステップ215)、あるいは、連結区画情報取得状態(ステップ216)のいずれかに一方に遷移する。
上記書込区画内位置更新状態(ステップ215)への遷移条件は、書込区画内位置が未満了の場合、すなわち、書き込み中の区画への書き込みを継続して行うことができる場合であり、本実施の形態では書込区画内位置情報値<B−1が、前記条件となる。
なお、書込区画内位置情報は、書き込みを行う区画内のワードの番号にあたる。実施例では、区画先頭のブロックの番号を0としており、区画内のワード数はBなので、区画最後のワードの番号はB−1になる。また、書込区画内位置が未満了とは、書込区画内位置情報値が区画最後のブロックより手前(区画先頭側にある)ということであり、書込区画内位置情報値<B−1が、前記条件を表す式となる。
一方、上記連結区画情報取得状態(ステップ216)への遷移条件は、書込区画内位置が満了の場合、すなわち、書込区画内位置が最大値を超えた場合であり、本実施の形態では書込区画内位置値≧B−1が、前記条件となる。なお、書込区画内位置値はB−1が最大値となり、書込区画内位置情報値>B−1には通常ならない。
なお、区画先頭のワードの位置における書込区画内位置情報値を0と規定したとき、区画最後のブロックの位置における書込画内位置情報値はB−1となる。区画内のワード数はBであり、書込区画内位置情報値が区画内のワードを指す場合には、書込区画内位置情報値がB以上となることや負の値をとることは発生しない。
[書込区画内位置更新状態]
書込区画内位置更新状態(ステップ215)において、バッファ制御部11は、書込区画内位置を書き込みを終えた位置から次の位置に更新する。本実施の形態では、書込区画内位置情報の値を+1する。この後、書込位置情報更新状態(ステップ218)に遷移する。
また、書込区画内位置更新状態(ステップ215)において、バッファ制御部11は、書込区画内位置情報の値が、区画連結位置の値に一致したとき、区画連結信号を生成する。前記区画連結信号を契機として、後述する区画連結に関わる状態遷移の処理により、空き区画のリストから空き区画の1つを外して、書き込み中の区画に対して保持された連結区画識別子を前記空き区画を示す値とする区画連結が行われる。
[連結区画情報取得状態]
連結区画情報取得状態(ステップ216)において、バッファ制御部11は、連結区画情報保持部23に対して、書込区画識別子の値を出力し、連結区画情報保持部23から、書き込み中の区画に連結されている区画を特定する連結区画識別子の値を入力する。その後、書込区画情報更新状態(ステップ217)へ遷移する。なお、本実施の形態では、前記連結区画識別子値としてMを入力した場合、連結されている区画がないことを意味する。
[書込区画情報更新状態]
書込区画情報更新状態(ステップ217)において、バッファ制御部11は、書込区画識別子の値を連結区画識別子の値に更新する。併せて、書込区画内位置の値を初期化する。本実施の形態では書込区画内位置の値を0に更新する。すなわち、書き込みを行う位置を、連結された区画の先頭位置に変更する。その後、書込位置情報更新状態(ステップ218)に遷移する。
[書込位置情報更新状態]
書込位置情報更新状態(ステップ218)において、バッファ制御部11は、入力されたキュー入力指示情報に含まれるキュー識別子の値と、更新された書込区画識別子と書込区画内位置情報の値とを、書込位置情報保持部21に出力し、書込位置情報保持部21が保持している値を更新する。すなわち、パケットデータのメモリ部12への書き込みによって、書込区画識別子と書込区画内位置情報が更新されるが、これらの値を前記パケットデータの書き込みを完了した時点で、書込位置情報保持部21での保持値に反映させ、入力待ち状態(ステップ211)に遷移する。
[第3の実施の形態の読出動作]
次に、図11参照して、本実施の形態にかかるパケットバッファ装置10において、キュー出力指示情報の入力に応じて、指定されたキューのパケットデータを、メモリ部12内の対応する区画から、ブロック単位で読み出して読出ブロックバッファ14Aへ格納した後、読出ブロックバッファ14Aから該当するパケットデータを読み出す際の読出動作について説明する。図11は、第3の実施の形態にかかる読出動作を示す状態遷移図である。なお、読出動作のうち、ブロック読出状態(ステップ223)におけるブロック読出動作の詳細については、図12を参照して後述する。
この読出動作において、次のような制御変数が用いられる
データ保持有無は、読出ブロックバッファ14Aでのデータ保持あり/なしを示す変数である。
変数iは、1個のブロックデータ内に含まれるパケット末尾バイトの個数を計数するためのカウンタである。
変数Pは、1個のブロックデータ内に含みうるパケット数の最大値である。
パケット終端位置は、各パケットデータの末尾バイトの位置を示す変数であり、1個のブロックデータ内のパケットデータ領域の先頭バイトからのバイト数で表現される。
格納位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域に格納するときの位置を指定する変数(バイトアドレス)である。
取得位置は、パケットデータを1バイトずつ読出ブロックバッファ14A内のパケットデータ領域から取得するときの位置を指定する変数(バイトアドレス)である。
パケットデータ継続フラグは、パケットデータパケットデータ領域を使い切っているか否かを示す変数である。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ220)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
初期化状態(ステップ220)において、バッファ制御部11は、読出ブロックバッファ14Aを初期化する。この初期化処理において、バッファ制御部11は、データ保持有無の値をデータ保持なしに初期化する。
また、この初期化において、バッファ制御部11は、M個のパケット終端位置の値を「0」に初期化するとともに、変数iの値を「0」に初期化する。また、バッファ制御部11は、読出バッファ部14の格納位置を初期化する。これにより、格納位置は、パケットデータ領域の先頭位置にセットされる。
バッファ制御部11は、初期化状態(ステップ220)において、初期化が完了した時点で、キュー出力指示情報の入力を待つ、入力待ち状態(ステップ221)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ221)において、バッファ制御部11は、キュー出力指示情報の入力があるまで、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態(ステップ221)に留まる。
また、入力待ち状態(ステップ221)において、キュー出力指示情報の入力があった時点で、前記データ保持有無がデータ保持ありを示す場合、すなわち「入力あり and データ保持あり」の場合、バッファ制御部11は、データ取得状態(ステップ222)に遷移する。
一方、入力待ち状態(ステップ221)において、キュー出力指示情報の入力があった時点で、前記データ保持有無がデータ保持なしを示す場合、すなわち「入力あり and データ保持なし」の場合、バッファ制御部11は、ブロック読み出し状態(ステップ223)に遷移する。
[データ取得状態]
データ取得状態(ステップ222)において、バッファ制御部11は、読出ブロックバッファ14Aから、取得位置が示す位置から、パケットデータを1バイトずつ取得して出力し、併せて、前記取得位置を1バイトずつ後ろに移動させる。なお、パケットデータが1バイト単位で出力するのではなく、予め定められたバイト数単位で出力する場合には、前記バイト数単位で格納と格納位置の移動を行う。
また、データ取得状態(ステップ222)において、バッファ制御部11は、パケット継続/終了と、残データあり/なし、すなわち読出ブロックバッファ14A内に取得前のパケットデータがあるか/ないかとを判定する。
この際、前記パケット終了は、読出ブロックバッファ14Aに格納されたパケット終端位置#iが示す位置に前記取得位置が達したこと、すなわち、取得中のパケットデータの末尾バイトまで取得を終えたことを条件として判定する。なお、変数iは、読出ブロックバッファ14Aに含まれるP個のパケット終端位置のうち、取得対象のパケットに対するパケット終端位置を特定する変数としても用いられる。
また、パケット継続は、前記パケット終了の条件を満たさないことを条件として判定する。この際、パケット終端位置#iの値が「0」の場合あるいはi>Pの場合は、取得中のパケットの末尾バイトを読出ブロックバッファ14Aに含まれず後続ブロックに含まれることを意味するため、前記判定はパケット継続となる。
一方、前記残データありは、前記取得位置がパケットデータ領域の最終バイト位置に達していないことであり、残データなしの条件は、前記残データありの条件を満たさないことを条件として判定する。
また、データ取得状態(ステップ222)において、パケットデータの最終バイトまでデータを取得し終えた場合、すなわち「パケット終了」時、バッファ制御部11は、前記データ保持有無の値を、以下に示す判定に基づいて更新し、その後、入力待ち状態(ステップ221)に遷移する。
バッファ制御部11は、上記判定において、まず、前記取得位置がパケットデータ領域の最終バイト位置に達した場合、データ保持有無の値を保持なしと設定する。
一方、前記取得位置がパケットデータ領域の最終バイト位置に達していない場合は、バッファ制御部11は、変数iの値に「1」を加算する。
この際、変数iの更新後に、読出ブロックバッファ14Aに格納されたパケット終端位置#iの値が「0」の場合あるいはi>Pであり、かつ、パケットデータ継続フラグの値が「1」の場合、すなわち、「(i>P)or パケット終端位置[i]==0)and パケットデータ継続フラグ==1」の場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
一方、前記パケット終端位置#iの値が「0」の場合あるいはi>Pであり、かつ、パケットデータ継続フラグの値が「0」の場合、すなわち、「(i>P)or パケット終端位置[i]==0)and パケットデータ継続フラグ==0」の場合、バッファ制御部11は、データ保持有無の値を保持なしと設定する。
また、前記以外、すなわち、前記パケット終端位置#iの値が「0」以外、かつ、i≦Pの場合、バッファ制御部11は、データ保持有無の値を保持ありと設定する。
また、データ取得状態(ステップ222)において、パケット継続であり、かつ、残データなしの場合、すなわち「パケット継続 and 残データなし」時、バッファ制御部11は、メモリ部12が蓄積するブロックを読み出し、読出ブロックバッファ14Aに格納する、ブロック読み出し状態(ステップ223)に遷移する。
一方、データ取得状態(ステップ222)において、パケット継続であり、かつ、残データありの場合、すなわち「パケット継続 and 残データあり」時、バッファ制御部11は、データ取得状態(ステップ222)に留まって、読出ブロックバッファ14Aからパケットデータを取得して出力する。
[ブロック読み出し状態]
ブロック読み出し状態(ステップ223)において、バッファ制御部11は、メモリ部12の所定アドレスから1個のブロックデータを読み出して、読出ブロックバッファ14Aに前記ブロックデータを格納する。また、バッファ制御部11は、前記取得位置の値を、読出ブロックバッファ14A内のパケットデータ領域の先頭位置を示す値に初期化するとともに、前記データ保持有無の値を保持ありに初期化し、さらに、変数iの値を「1」に初期化する。
[第3の実施の形態のブロック読出動作]
次に、図12を参照して、前述した図11のブロック読み出し状態(ステップ223)において、メモリ部12内の対応する区画から、ブロックデータを読み出して、読出ブロックバッファ14Aへ格納するブロック読出動作について説明する。図12は、第3の実施の形態にかかるブロック読出動作を示す状態遷移図である。
このブロック読出動作において、次のような制御変数が用いられる。
読出区画識別子は、前記キューごと設けられて、当該キューと対応する前記パケットデータを読み出す区画を特定するための識別子である。
読出区画内位置情報は、前記キューごと設けられて、当該キューの読出区画識別子で特定される区画内における読出開始ブロック位置を示す情報である。
アドレスは、読出区画内位置情報と対応する記憶場所を示す、メモリ部12におけるアドレス値である。
変数Bは、区画内に設けられたブロックの全ブロック数である。
変数Kは、ブロック内の記憶領域の大きさを示すバイト数である。
連結区画識別子は、前記区画ごと設けられて、当該区画に連結された区画を特定するための識別子である。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ230)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ230)において、初期化が完了した時点で、パケットとキュー入力指示情報の入力を待つ、入力待ち状態(ステップ231)に遷移する。
[入力待ち状態]
入力待ち状態(ステップ231)において、バッファ制御部11は、キュー出力指示情報の入力があった時点で、読出位置情報取得状態(ステップ232)に遷移する。前記入力がない間は、他の状態に遷移せずに、キュー出力指示情報の入力を待ち受ける入力待ち状態(ステップ231)に留まる。
[読出位置情報取得状態]
読出位置情報取得状態(ステップ232)において、バッファ制御部11は、読出位置情報保持部22に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値を出力し、パケットを蓄積するキューの、読出区画識別子と読出区画内位置情報の値を読出位置情報保持部22から受け取って、アドレス算出状態(ステップ233)に遷移する。
[アドレス算出状態]
アドレス算出状態(ステップ233)では、読出区画識別子と読出位置情報との値に基づいて、パケットのデータをワード単位で書き込むときのメモリのアドレスを算出する。本実施の形態では、アドレス=読出区画識別子値×B×K+読出位置情報値×K、で算出する。前記算出後、ブロックデータ読み出し状態(ステップ234)に遷移する。
[ブロックデータ読み出し状態]
ブロックデータ読み出し状態(ステップ234)において、バッファ制御部11は、算出されたアドレスをメモリ部12に出力し、前記アドレスに対応するメモリ部12内のメモリセルに保持された1ブロック分のデータをメモリ部12から読み出す。前記読み出し後、以下の条件に応じて、読出区画内位置更新状態(ステップ235)、あるいは、連結区画情報取得状態(ステップ236)のいずれかに一方に遷移する。
上記読出区画内位置更新状態(ステップ235)への遷移条件は、読出区画内位置が未満了の場合、すなわち、読み出し中の区画からの読み出しを継続して行うことができる場合であり、本実施の形態では読出区画内位置情報値<B−1が、前記条件となる。なお、読出区画内位置情報は、読み出しを行う区画内のブロックの番号にあたる。本実施の形態では、区画先頭のブロックの番号を0としており、区画内のブロック数はBなので、区画最後のブロックの番号はB−1になる。また、読出区画内位置が未満了とは、読出区画内位置情報値が区画最後のブロックより手前(区画先頭側にある)ということであり、読出区画内位置情報値<B−1が、前記条件を表す式となる。
一方、上記連結区画情報取得状態(ステップ236)への遷移条件は、読出区画内位置が満了の場合、すなわち、読出区画内位置が最大値を超えた場合であり、本実施の形態では、読出区画内位置情報値≧B−1が、前記条件となる。なお、読出区画内位置情報値はB−1が最大値となり、読出区画内位置情報値>B−1には通常ならない。なお、区画先頭のブロックの位置における読出区画内位置情報値を0と規定したとき、区画最後のブロックの位置における読出画内位置情報値はB−1となる。区画内のブロック数はBであり、読出区画内位置情報値が区画内のブロックを指す場合には、読出区画内位置情報値がB以上となることや負の値をとることは発生しない。
前記異常値を発生させないようにするための方法は、読出区画内位置情報値を監視しておき、値に異常が生じた場合に、装置異常等の処理(リセットなど)を行うことである。また、読出区画内位置情報値を表現する全ビットが1となるとき、読出区画内位置情報値=B−1であるように、Bの値を決める(Bを2のべき乗とすることで可能)ことで、異常値は発生しなくなる。これは、読出区画内位置情報値としてどのような値をとったとしても正常範囲に入るためである。また、読出区画内位置情報値がB−1となるときは、読出位置が区画最後のブロックに到達したことを意味する。
[読出区画内位置更新状態]
読出区画内位置更新状態(ステップ235)において、バッファ制御部11は、読出区画内位置を読み出しを終えた位置から次の位置に更新する。本実施の形態で読出区画内位置の値を+1する。その後、読出位置情報更新状態(ステップ237)に遷移する。
[連結区画情報取得状態]
連結区画情報取得状態(ステップ236)において、バッファ制御部11は、連結区画情報保持部23に対して、読出区画識別子の値を出力し、連結区画情報保持部23から、読み出し中の区画に連結されている区画を特定する連結区画識別子の値を受け取って、読出区画情報更新状態(ステップ238)に遷移する。
また、連結区画情報取得状態(ステップ236)において、バッファ制御部11は、区画解放信号を生成する。前記区画解放信号を契機として、後述する区画解放に関わる状態遷移の処理により区画を空き区画のリストに戻す区画解放が行われる。
[読出区画情報更新状態]
読出区画情報更新状態(ステップ238)において、バッファ制御部11は、読出区画識別子の値を連結区画識別子の値に更新する。併せて、読出区画内位置の値を初期化する。本実施の形態では読出区画内位置の値を0に更新する。すなわち、読み出しを行う位置を、連結された区画の先頭位置に変更する。この後、読出位置情報更新状態(ステップ237)へ遷移する。
[読出位置情報更新状態]
読出位置情報更新状態(ステップ237)において、バッファ制御部11は、バッファ制御部11は、読出位置情報保持部22に対して、入力されたキュー出力指示情報に含まれるキュー識別子の値と、更新された読出区画識別子と読出区画内位置情報の値とを、読出位置情報保持部22に出力し、読出位置情報保持部22が保持している値を更新する。すなわち、ブロックデータをメモリ部12から読み出すことによって、読出区画識別子と読出区画内位置情報が更新されるが、これらの値を前記ブロックデータの読み出しを完了した時点で、読出位置情報保持部22での保持値に反映させ、入力待ち状態(ステップ231)に遷移する。
[第3の実施の形態の区画連結動作]
次に、図13を参照して、本実施の形態にかかるパケットバッファ装置10の区画連結動作について説明する。図13は、区画連結動作を示す状態遷移図である。前述した図10の書込区画内位置更新状態(ステップ215)において、区画連結信号が生成された場合、バッファ制御部11は、図13の状態遷移に基づいて、区画連結動作を実行する。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ240)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
初期化状態(ステップ240)において、バッファ制御部11は、連結区画情報保持部23と空き区画情報保持部24に対して、全区画を空き区画リストに加える初期化を行う。本実施の形態では、空き区画情報保持部24に空き区画連結開始識別子の値として「0」を、空き区画連結終了識別子の値としてM−1を出力することで、空き区画情報保持部24が保持する空き区画連結開始識別子と空き区画連結終了識別子を初期化する。
さらに、バッファ制御部11は、連結区画情報保持部23に、全区画識別子について、連結区画識別子の値として前記区画識別子+1を出力することで、連結区画情報保持部23が保持する各区画識別子(0〜M−1)に対する連結区画識別子[m](m=0〜M−1)の値を初期化する。
バッファ制御部11は、初期化状態(ステップ240)において、初期化が完了した時点で、区画連結信号を待つ、区画連結信号待ち状態(ステップ241)に遷移する。
[区画連結信号待ち状態]
区画連結信号待ち状態(ステップ241)において、バッファ制御部11は、区画連結信号があった時点で、空き区画情報取得状態(ステップ242)に遷移する。前記信号がない間は遷移しない。なお、区画連結信号があった時点での、バッファ制御部11のパケットデータ書込の対象となっている区画を特定する書込区画識別子の値を保持しておく。
[空き区画情報取得状態]
空き区画情報取得状態(ステップ242)において、バッファ制御部11は、空き区画情報保持部24から、空き区画連結開始識別子の値を入力する。前記入力後、以下の条件に応じて、未連結状態(ステップ243)、あるいは、空き区画取得状態(ステップ244)のいずれかに一方に遷移する。
上記未連結状態(ステップ243)への遷移条件は空き区画なしの場合であり、本実施の形態では上記取得した空き区画連結開始識別子の値がMの場合である。
一方、上記空き区画取得状態(ステップ244)への遷移条件は空き区画ありの場合であり、本実施の形態では、上記取得した空き区画連結開始識別子の値が有効な区画識別子の範囲(0からM−1までの整数)にある場合である。
[空き区画取得状態]
空き区画取得状態(ステップ244)において、バッファ制御部11は、連結区画情報保持部23に対して、空き区画情報取得状態(ステップ242)で空き区画情報保持部24から取得した空き区画連結開始識別子の値を区画識別子として出力し、連結区画情報保持部23から、前記区画識別子に連結されている区画を特定する連結区画識別子の値を入力する。さらに、空き区画情報保持部24に対して、空き区画連結開始識別子の値を、前記入力した連結区画識別子の値に更新する。
なお、前記入力した連結区画識別子の値が、連結されている区画がないことを意味する連結区画識別子の値である場合は、さらに、空き区画情報保持部24に対して、空き区画連結終了識別子の値を、連結されている区画がないことを意味する連結区画識別子の値に更新する。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。その後、連結更新状態(ステップ245)に遷移する。これにより、空き区画のリストから1つの区画を取り外したことになる。
[連結更新状態]
連結更新状態(ステップ245)において、バッファ制御部11は、連結区画情報保持部23に対して、区画連結信号があった時点で保持した書込区画識別子の値と、空き区画情報取得状態(ステップ242)で空き区画情報保持部24から取得した空き区画連結開始識別子の値とを出力することで、前記書込区画の連結区画識別子の値を、前記空き区画連結開始識別子の値へと書き換える。
これにより、書込が満了を向える(書込区画内位置が満了する予定の)区画に、空き区画のリストから取り外した1つの区画を連結したことになる。その後、区画連結信号待ち状態(ステップ241)に遷移する。
[未連結状態]
未連結状態(ステップ243)において、バッファ制御部11は、連結区画情報保持部23に対して、区画連結信号があった時点で保持した書込区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記書込区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換え、区画連結信号待ち状態(ステップ241)に遷移する。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。
[第3の実施の形態の区画解放動作]
次に、図14を参照して、本実施の形態にかかるパケットバッファ装置10の区画解放動作について説明する。図14は、区画解放動作を示す状態遷移図である。前述した図12の連結区画情報取得状態(ステップ236)において、区画解放信号が生成された場合、バッファ制御部11は、図14の状態遷移に基づいて、区画解放動作を実行する。
[初期化状態]
パケットバッファ装置10は、電源投入後、パケットの出力を開始する前に、初期化状態(ステップ250)に遷移して、初期化処理を実行する。また、パケットバッファ装置10に正常な動作を維持することができない異常の発生をパケットバッファ装置10自身が検出した場合や、外部からのリセット要求があった場合にも、初期化が行われる。
バッファ制御部11は、初期化状態(ステップ250)において、初期化が完了した時点で、区画解放信号を待つ、区画解放信号待ち状態(ステップ251)に遷移する。
[区画解放信号待ち状態]
区画解放信号待ち状態(ステップ251)において、区画解放信号があった時点で、空き区画情報取得状態(ステップ252)に遷移する。前記信号がない間は遷移しない。なお、区画解放信号があった時点での、バッファ制御部11のパケットデータ読出の対象となっている区画を特定する読出区画識別子の値を保持しておく。
[空き区画情報取得状態]
空き区画情報取得状態(ステップ252)において、バッファ制御部11は、空き区画情報保持部24から、空き区画連結終了識別子の値を受け取って、空き区画返却状態(ステップ253)に遷移する。
[空き区画返却状態]
空き区画返却状態(ステップ253)において、バッファ制御部11は、連結区画情報保持部23に対して、区画解放信号があった時点で保持した読出区画識別子の値と、連結されている区画がないことを意味する連結区画識別子の値を出力し、前記読出区画識別子の値によって特定される区画の連結区画識別子の値を、連結されている区画がないことを意味する連結区画識別子の値へと書き換える。本実施の形態では、前記連結されている区画がないことを意味する連結区画識別子の値はMである。さらに、連結区画情報保持部23に対して、空き区画情報取得状態(ステップ252)で入力した空き区画連結終了識別子の値と、区画解放信号があった時点で保持した読出区画識別子の値とを出力し、前記空き区画連結終了識別子によって特定される
区画の連結区画識別子の値を、前記読出区画識別子の値へと書き換える。ただし、空き区画連結終了識別子の値が、連結されている区画がないことを意味する連結区画識別子の値であった場合は、前記書き換えを行わない。これらにより、読出が満了した区画を空き区画のリストの最後の区画に連結したことになる。前記の後、空き区画更新状態(ステップ254)に遷移する。
[空き区画更新状態]
空き区画更新状態(ステップ254)では、バッファ制御部11は、空き区画情報保持部24に対して、空き区画連結終了識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。ただし、空き区画情報取得状態(ステップ252)で入力した空き区画連結終了識別子の値が、連結されている区画がないことを意味する連結区画識別子の値であった場合は、前記に加えて、空き区画情報保持部24に対して、空き区画連結開始識別子の値を、区画解放信号があった時点で保持した読出区画識別子の値に更新する。その後、区画解放信号待ち状態(ステップ251)に遷移する。
[第3の実施の形態の効果]
このように、本実施の形態は、第1の実施の形態において、複数個のブロックで区画を構成し、入力された各パケットのパケットデータを、指定されたキューと対応する区画内のブロックで蓄積するようにしたものである。
より具体的には、前記バッファ制御部11が、複数個の前記ブロックで構成された区画のうち、前記キュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キューに蓄積し、前記メモリ部12のうち、前記キュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キューから取り出し、前記区画への前記パケットデータの書き込みが満了した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続するようにしたものである。
これにより、第1の実施の形態と同様に、入力パケット毎に生成されるパケット境界情報含む固定長のブロック管理情報が、パケットデータと連結して、メモリ部12のキューに格納される。このため、本実施の形態にかかるパケットバッファ装置10によれば、従来のような固定長のパケットジョブ(ジョブ情報)を蓄積するため、SRAMからなるジョブ用メモリを、キューとは別個に設ける必要はない。したがって、蓄積するパケット数を増大させた場合でも、パケットを蓄積するデータ用メモリの増大に伴う余分な回路規模の増加を抑制することができる。
これに加えて、特定のキューにパケットの蓄積が集中する場合に、そのキューがオーバーフローする前に区画の連結を行うとともに、パケットの蓄積が少ないキューに対しては、そのキューへの区画の連結を行わず、また、パケットの出力による蓄積量の減少に応じて区画を解放することになる。したがって、キューごとに必要な容量がばらついた場合や、蓄積量が時間経過に伴って変動した場合にも、各キューに対して容量の配分が適切に行われるので、従来技術を適用したパケットバッファ装置と比較して、メモリの必要容量を小さくすることができる。
この効果を従来技術の説明で用いた例により説明する。本実施の形態では、パケットがキューに蓄積される過程で、既にキューに割り当てていたメモリ量のうち空きが少なくなってきたとき追加の割り当てを行う。例えば、メモリを64KByteの容量を持つ区画に分割しておき、キューに割り当て済みの区画の空きが2KByteとなった時点で、新たな区画をそのキューに追加する場合、各キューに割り当て済みの区画に生じる空き容量の最大値は、新たな区画を割り当てる条件である2KByte+新たな1個の区画の容量である64KByteであるため、66KByteとなる。
したがって、すべてのキューで前記空き容量が生じた状況が、最もメモリの使用率が低い状況であるため、蓄積に必要となる12.5MByteに、前記空き容量の合計値66KByte×8を加えた値である13MByteが、本実施の形態での必要なメモリ量となる。この例で示されるように、従来は100MByteのメモリ量を必要としていたのに対して13MByteで済むため、メモリ量を87%削減することができるという効果が、本実施の形態にある。
また、本実施の形態は、各キューに蓄積するパケットのデータを保持するメモリの領域を、区画が連結された仮想的なFIFOバッファとして管理するため、従来技術を適用したパケットバッファ装置と同じく、複雑なバッファ制御が不要である。
また、本実施の形態は、1つの区画内ではメモリにアクセスするときのアドレスを連続させることができ、従来技術を適用したパケットバッファ装置と同じく、メモリに対するバーストアクセスを可能とする。これにより、1つのキューからの出力が連続して行われるような用途で使用される場合、メモリからの読み出しを高速に行うことができるため、キューからのパケット取り出しが速い。
メモリアクセスするときのアドレスを連続させることが可能であるのは、具体的には、メモリ部12が複数の互いに重ならないアドレス範囲で区分けして、これらを各区画とすることによって行う。すなわち、各区画にアドレスの範囲を定めておくことにとって、ある区画にアクセスしたときのアドレスの次のアドレスが、前記区画に定められたアドレスの範囲内であれば、前記次のアドレスにアクセスすると、前記区画内のメモリ領域にアクセスしたことになるからである。
また、本実施の形態は、区画内の書き込み位置に所定の位置に達したことを条件に次に書き込みを行う区画の連結を行うため、書き込み中の区画が満杯になる前に、次の区画を準備することができるため、区画をまたぐ書き込みを行う場合にも、書き込みが途切れず、キューへのパケット蓄積が速い。
なお、パケット読出の高速化や効率的なメモリ使用を実現可能なメモリ区画のサイズ範囲は、バッファに入出力するパケットのバースト長やパケット長の最大値や平均値によって異なる。
各区画の大きさを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つに所属させる。各キューへのパケットの蓄積にあたっては、前記キューが所属する区分内の区画を利用して、前記パケットを蓄積する。各区分内での区画の連結や解放の処理は、既に説明したとおりである。
なお、各区分に割り当てるメモリ量は、その区分に所属するキューのバースト長の合計値以下で、統計多重効果(同時に各キューが最大長になる確率が低いためにキュー長の合計値が最大長の合計値より小さくなる効果)を考慮した値に設定すればよい。
[実施の形態の拡張]
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解しうる様々な変更をすることができる。また、各実施形態については、矛盾しない範囲で任意に組み合わせて実施することができる。
10…パケットバッファ装置、11…バッファ制御部、12…メモリ部、13…書込バッファ部、13A…書込ブロックバッファ、14…読出バッファ部、14A…読出ブロックバッファ、21…書込位置情報保持部、22…読出位置情報保持部、23…連結区画情報保持部、24…空き区画情報保持部。

Claims (5)

  1. 固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、
    少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、
    少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、
    入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納し、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納し、入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するパケット制御部と
    を備えることを特徴とするパケットバッファ装置。
  2. 請求項1に記載のパケットバッファ装置において、
    前記ブロックは、複数ビットの固定長からなるワードを単位として複数個に分割されてなり、
    前記パケット制御部は、
    前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記書込ブロックバッファ内の先頭ワードから前記ブロック管理情報を格納し、
    前記書込ブロックバッファに前記パケットデータを格納する際、前記ブロック管理情報を格納した次のワードから順に格納用のワードを選択し、選択したワードの先頭バイトから順に当該パケットデータの各バイトを格納するとともに、当該パケットデータの末尾バイトを格納したバイトの次のバイトから所定のパケット終端パタンを格納し、
    前記書込ブロックバッファに前記ブロック管理情報を格納する際、前記パケット境界情報に代えて、前記各ワードにおける前記パケットデータの末尾バイトの存在有無を示す境界判定ビット列を含む前記ブロック管理情報を格納する
    ことを特徴とするパケットバッファ装置。
  3. 請求項に記載のパケットバッファ装置において、
    前記パケット制御部は、
    前記メモリ部内の前記ブロックから前記パケットデータを読み出す際、最初に当該ブロックの先頭ワードから前記ブロック管理情報を取得して、このブロック管理情報の前記境界判定ビット列に基づき、当該ブロックにおけるパケットデータの末尾バイトの存在有無を判定し、当該末尾バイトが存在しない場合には、前記メモリ部に対して次のブロックの読出要求を行う
    ことを特徴とするパケットバッファ装置。
  4. 請求項1〜請求項のいずれか1つに記載のパケットバッファ装置において、
    前記バッファ制御部は、
    前記メモリ部内の複数個の前記ブロックで構成された区画のうち、入力されたキュー入力指示情報で指定されたキューと対応する区画に対して、前記パケットデータを書き込むことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューに蓄積し、前記区画のうち、入力されたキュー出力指示情報で指定されたキューと対応する区画から、前記パケットデータの読み出すことにより、前記パケットデータを前記キュー入力指示情報で指定されたキューから取り出し、
    前記区画への前記パケットデータの書き込みが満了した場合、当該区画に対して空き区画を連結区画として連結した後、当該空き区画に対する前記パケットデータの書き込みを継続し、前記区画からの前記パケットデータの読み出しが満了した場合、当該区画を空き区画として解放するとともに、当該区画に連結されている連結区画からの前記パケットデータの読み出しを継続する
    ことを特徴とするパケットバッファ装置。
  5. 入力されたパケットをメモリ部に格納するとともに、出力指示に応じて該メモリ部からパケットを取り出して出力するパケットバッファ装置で用いられるパケットバッファ制御方法であって、
    前記パケットバッファ装置が、
    固定長の記憶領域からなるブロックを複数有し、これらブロックごとにデータの書き込みおよび読み出しを行うメモリ部と、
    少なくとも前記ブロック分のデータを保持する書込ブロックバッファと、
    少なくとも前記ブロック分のデータを保持する読出ブロックバッファと、
    パケット制御部とを備え、
    前記パケット制御部が、
    入力された可変長のパケットのパケットデータを、前記書込ブロックバッファへ順次格納するとともに、当該書込ブロックバッファへ格納した各パケットデータの終端位置を示すパケット境界情報を含むブロック管理情報を当該書込ブロックバッファへ格納、当該書込ブロックバッファの空き容量がなくなった場合に、当該書込ブロックバッファに格納されているデータを前記メモリ部へ書き込んだ後、残りのパケットデータを当該書込ブロックバッファへ格納するステップと、
    入力された出力指示に応じて、前記メモリ部から前記データを読み出して前記読出ブロックバッファへ格納し、当該データに含まれる前記ブロック管理情報の前記パケット境界情報に基づいて、当該データに含まれる各パケットデータを読み出して出力するステップとを実行する
    ことを特徴とするパケットバッファ制御方法。
JP2011285526A 2011-12-27 2011-12-27 パケットバッファ装置およびパケットバッファ制御方法 Expired - Fee Related JP5748288B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011285526A JP5748288B2 (ja) 2011-12-27 2011-12-27 パケットバッファ装置およびパケットバッファ制御方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011285526A JP5748288B2 (ja) 2011-12-27 2011-12-27 パケットバッファ装置およびパケットバッファ制御方法

Publications (2)

Publication Number Publication Date
JP2013135383A JP2013135383A (ja) 2013-07-08
JP5748288B2 true JP5748288B2 (ja) 2015-07-15

Family

ID=48911791

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011285526A Expired - Fee Related JP5748288B2 (ja) 2011-12-27 2011-12-27 パケットバッファ装置およびパケットバッファ制御方法

Country Status (1)

Country Link
JP (1) JP5748288B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115190089B (zh) * 2022-05-26 2024-03-22 中科驭数(北京)科技有限公司 一种报文存储方法、装置、设备及存储介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2791037B2 (ja) * 1988-05-25 1998-08-27 株式会社日立製作所 パケットデータ転送制御装置
JP3085391B2 (ja) * 1989-06-19 2000-09-04 株式会社日立製作所 通信装置
JP3503725B2 (ja) * 1996-06-28 2004-03-08 ソニー株式会社 情報処理装置および方法
JP2002084316A (ja) * 2000-09-08 2002-03-22 Toyo Commun Equip Co Ltd 可変長パケット書き込み及び読み出し回路
WO2004095286A2 (en) * 2003-04-22 2004-11-04 Agere Systems Inc. Method and apparatus for shared multi-bank memory in a packet switching system

Also Published As

Publication number Publication date
JP2013135383A (ja) 2013-07-08

Similar Documents

Publication Publication Date Title
CN110806986B (zh) 提高网络芯片报文存储效率的方法、设备及存储介质
US8325603B2 (en) Method and apparatus for dequeuing data
US10205673B2 (en) Data caching method and device, and storage medium
US9304939B2 (en) Method and multi-core communication processor for replacing data in system cache
JP2013507022A (ja) フローアウェアネットワークノード内でデータパケットを処理するための方法
WO2020199760A1 (zh) 数据存储方法、存储器和服务器
WO2011015055A1 (zh) 一种存储管理的方法和系统
US7000073B2 (en) Buffer controller and management method thereof
JP5332430B2 (ja) 共有メモリシステム
JP5748288B2 (ja) パケットバッファ装置およびパケットバッファ制御方法
US8812787B2 (en) Router and many-core system
CN116955247B (zh) 一种缓存描述符管理装置及其方法、介质、芯片
US8363653B2 (en) Packet forwarding method and device
JP5748287B2 (ja) パケットバッファ装置およびパケットバッファ制御方法
US7620770B2 (en) Device and method for storing and processing data units
US20160085683A1 (en) Data receiving device and data receiving method
CN114401072B (zh) 一种基于hinoc协议的拆帧重排序队列的动态缓存控制方法及系统
CN102571535B (zh) 一种数据延迟装置、方法及通信系统
CN114610231A (zh) 大位宽数据总线分段存储的控制方法、系统、设备及介质
US9128785B2 (en) System and method for efficient shared buffer management
US20140297972A1 (en) Memory control device and memory control method
US7836231B2 (en) Buffer control method and device thereof
JP4252379B2 (ja) 可変長フレームバッファ装置
KR102335798B1 (ko) 다수의 클라이언트 데이터를 처리하는 저장 장치 및 방법
US9544229B2 (en) Packet processing apparatus and packet processing method

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140307

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20141106

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20141125

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150126

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150507

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150508

R150 Certificate of patent or registration of utility model

Ref document number: 5748288

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees