(57)【要約】【課題】１パケットあたりに割り当てたメモリ領域の未使用部分を有効利用してパケットデータを保証するパケット処理装置を得ること。【解決手段】本発明にかかるパケット処理装置は、１つの可変長パケットを格納する１パケット格納用メモリ領域を複数個有し、各１パケット格納用メモリ領域は、最大長のパケットを格納可能なパケット格納領域および余剰の未使用領域を有し、各パケット格納領域が複数のブロックに分割されているパケットバッファ３１と、各ブロックに受信パケットを書き込むとともに読み出す制御を行う制御手段と、ブロックへ書き込む前のデータおよびブロックから読み出したデータに基づいて各ブロックの物理的なエラーを検出するブロック単位ＣＲＣチェック部６０と、を備え、制御手段は、エラーが検出された場合、エラーが検出されたブロックに代えて、未使用領域に設定したブロックを使用して、以降のバッファリングを行う。【選択図】        図１
2008236309.tif 000002
【特許請求の範囲】
【請求項１】
受信した可変長パケットを一旦保持しておく機能を有するパケット処理装置であって、
１つの可変長パケットを格納する１パケット格納用メモリ領域を複数個有し、各１パケット格納用メモリ領域は、最大長のパケットを格納可能なパケット格納領域および余剰の未使用領域を有し、前記各パケット格納領域がパケットのバッファリング単位となる複数のブロックに分割されているパケット記憶部と、
前記パケット記憶部のパケット格納領域の各ブロックに受信したパケットを書き込むとともに読み出す制御を行う制御手段と、
前記パケット格納領域のブロックへ書き込む前のパケットデータおよび当該ブロックから読み出したパケットデータに基づいて各ブロックの物理的なエラーを検出するエラー検出手段と、
を備え、
前記制御手段は、前記エラー検出手段によりエラーが検出された場合、当該エラーが検出されたブロックに代えて、未使用領域に設定したブロックを使用して、以降のバッファリングを行うことを特徴とするパケット処理装置。
【請求項２】
前記エラー検出手段は、
前記ブロックへ格納する前のパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第１のチェック用データを算出する第１のチェック用データ算出手段と、
前記ブロックから読み出したパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第２のチェック用データを算出する第２のチェック用データ算出手段と、
前記第１のチェック用データおよび前記第２のチェック用データに基づいて前記ブロックが物理的なエラーを有するかどうかを判定するエラー判定手段と、
を備えることを特徴とする請求項１に記載のパケット処理装置。
【請求項３】
前記第１のチェック用データ算出手段および前記第２のチェック用データ算出手段は、同じ演算方法を用いて、それぞれ前記第１のチェック用データおよび前記第２のチェック用データを算出し、
前記エラー判定手段は、前記第１のチェック用データと前記第２のチェック用データが一致しない場合に、前記ブロックが物理的なエラーを有すると判定することを特徴とする請求項２に記載のパケット処理装置。
【請求項４】
前記演算方法として、ＣＲＣ（Cyclic  Redundancy  Checking）演算を用いることを特徴とする請求項３に記載のパケット処理装置。
【請求項５】
請求項１〜４のいずれか一つに記載のパケット処理装置、
を備えることを特徴とする通信装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＬＡＮ（Local  Area  Network）などに接続して受信パケットの転送などを行う通信装置において、装置の故障に伴い発生する通信エラーの検出および検出したエラーのリカバリーに関するものであり、特に、Etherフレームを収容するパケットバッファの一部でエラーが発生した場合に、メモリの空領域を活用してデータを保証するパケット処理装置に関するものである。
【背景技術】
【０００２】
近年、高度情報通信サービスを実現するためにＬＡＮを利用したネットワークの構築が急がれており、中でもデータ通信を高速で処理し、高品質な通信を実現する技術が注目されてきている。図７および図８は、従来のイーサフレーム（Etherフレーム）を収容する装置が有する通信バッファの構成および装置の構成を示す図である。イーサフレームは、プリアンブル部を除くとそのサイズが６４ｂｙｔｅ〜１５１８ｂｙｔｅの範囲に規定されている。そのため、図７に示したように、従来の装置では、イーサフレームの送受信を行うために１パケット（１イーサフレーム）に対して２０４８ｂｙｔｅの領域を割り当て、さらに、図８に示したように、装置に必要なパケット数（図８に示した例ではｎパケット）分の領域でパケットバッファを構成していた。１パケットあたりのバッファ領域を２０４８ｂｙｔｅとしているのは、アドレスの構成を考慮して、バッファへのアクセス処理時の負荷を低減させるためである。
【０００３】
また、従来の装置においては、高品質な通信を実現するために、パケットの読み出し側がパケットバッファから読み出したデータの正常性を監視している。具体的には、パケットの最後に存在するＦＣＳ（Frame  Check  Sequence）を用いた誤り検出や、書き込み側から通知されたパリティ演算結果を用いたパリティチェックなどを受信側で行っている。たとえば、下記特許文献１に記載の技術においては、フレームデータを分割し、分割して得られたブロック毎に誤り訂正処理を実行することにより通信品質を維持しつつ必要なメモリ容量の削減を図っている。
【０００４】
【特許文献１】特開平１０−３２７０７９号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記従来の装置においては、ＦＣＳチェックやパリティチェックでバッファ（メモリ）の異常を検出した場合、警報などを発出して異常検出を外部へ通知し、装置交換やパッケージ交換の要求を行う。しかしながら、異常を検出してから実際に装置交換やパッケージ交換を行うまでは、各装置等の仕様により多少の違いが見られるものの、通信するパケットのデータが壊れたままで運用されるためパケットデータが保証されない，警報を発出した時点で運用を停止してパケットデータが不通となる，など、通信品質が著しく低下してしまう、という問題があった。また、１パケットに対して割り当てたメモリ領域を効率的に使用できていない、という問題があった。
【０００６】
なお、上記特許文献１に記載の技術では、メモリを効率的に使用する方法について記載されているもののメモリ自体に異常（故障）が発生した場合の運用方法については何ら記載されていない。
【０００７】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、メモリを効率的に使用し、その一部の領域において異常が発生した場合の通信品質劣化を防止するパケット処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明にかかるパケット処理装置は、受信した可変長パケットを一旦保持しておく機能を有するパケット処理装置であって、１つの可変長パケットを格納する１パケット格納用メモリ領域を複数個有し、各１パケット格納用メモリ領域は、最大長のパケットを格納可能なパケット格納領域および余剰の未使用領域を有し、前記各パケット格納領域がパケットのバッファリング単位となる複数のブロックに分割されているパケット記憶部と、前記パケット記憶部のパケット格納領域の各ブロックに受信したパケットを書き込むとともに読み出す制御を行う制御手段と、前記パケット格納領域のブロックへ書き込む前のパケットデータおよび当該ブロックから読み出したパケットデータに基づいて各ブロックの物理的なエラーを検出するエラー検出手段と、を備え、前記制御手段は、前記エラー検出手段によりエラーが検出された場合、当該エラーが検出されたブロックに代えて、未使用領域に設定したブロックを使用して、以降のバッファリングを行うことを特徴とする。
【０００９】
また、次の発明にかかるパケット処理装置において、前記エラー検出手段は、前記ブロックへ格納する前のパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第１のチェック用データを算出する第１のチェック用データ算出手段と、前記ブロックから読み出したパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第２のチェック用データを算出する第２のチェック用データ算出手段と、前記第１のチェック用データおよび前記第２のチェック用データに基づいて前記ブロックが物理的なエラーを有するかどうかを判定するエラー判定手段とを備えることを特徴とする。
【００１０】
また、次の発明にかかるパケット処理装置において、前記第１のチェック用データ算出手段および前記第２のチェック用データ算出手段は、同じ演算方法を用いて、それぞれ前記第１のチェック用データおよび前記第２のチェック用データを算出し、前記エラー判定手段は、前記第１のチェック用データと前記第２のチェック用データが一致しない場合に、前記ブロックが物理的なエラーを有すると判定することを特徴とする。
【００１１】
また、次の発明にかかるパケット処理装置は、前記演算方法として、ＣＲＣ（Cyclic  Redundancy  Checking）演算を用いることを特徴とする。
【００１２】
また、次の発明にかかる通信装置は、前記いずれか一つのパケット処理装置を備えることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、パケット処理装置は、１パケットに対して割り当てたバッファリング用のメモリ空間を所定サイズの複数のブロックに分割し、ブロック単位でメモリの正常性を確認し、異常を検出した場合はブロック単位で使用を禁止しつつ使用禁止としたブロックに代えて、未使用のメモリ領域を構成しているブロックを使用するようにしてメモリの不足分を補うこととした。これにより、たとえば、メモリの一部分において異常が発生した場合、従来は、直ちにメモリを交換してリカバリーを行う必要があったが、本発明を適用することにより、メモリを交換することなしにリカバリーを行い、パケットデータを保証して通信品質の劣化を防止できる、という効果を奏する。
【００１４】
また、メモリの一部分のみでエラーが発生した場合には、それまで使用していなかった領域をエラーが発生した領域に代えて使用するようにしたので、メモリの使用効率を上げることができる、という効果を奏する。さらに、メモリの交換サイクルが伸びるため、装置の保守に必要なコストを抑えることができる、という効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この発明に係るパケット処理装置の好適な実施の形態を詳細に説明する。なお、このパケット処理装置は、たとえば、他の通信装置から受信したパケットデータを、当該他の装置とは異なる通信装置へ送信する通信装置を構成する。
【実施例】
【００１６】
図１は、本発明にかかるパケット処理装置の構成例を示す図である。このパケット処理装置は、ライト用アドレス生成部１０と、ブロック単位ＣＲＣ生成部２０と、記憶部３０と、パケットカウント部４０と、リード用アドレス生成部５０と、ブロック単位ＣＲＣチェック部６０と、ブロック単位ＣＲＣエラーカウント部７０と、を備える。また、記憶部３０は、パケットバッファ３１、演算データバッファ３２およびチェック結果バッファ３３を含んでいる。
【００１７】
上記パケット処理装置において、ライト用アドレス生成部１０は、入力されるライトデータの書き込み先アドレスを決定し、記憶部３０（パケットバッファ３１）に対して出力する。書き込み先アドレスの決定を具体的示すと、まず、後述するパケットバッファ３１を構成するブロックの中から、書き込み先候補のブロックを選択する。そして、選択した書き込み先候補が使用可能（書き込み可能）かどうかをチェック結果バッファ部３３が保持しているチェック結果に基づいて判断する。書き込み先候補が使用可能であるならば、それを書き込み先ブロックに決定し、そのアドレスを書き込み先アドレスとする。なお、ライト用アドレス生成部１０は、書き込み先候補が使用不可能であれば、ブロックサイズに合わせてアドレスをカウントアップして次の書き込み先候補を再選択する。さらに、再選択した書き込み先候補が使用可能かどうかを上記手順と同様の手順で確認し、必要であれば（使用不可能であれば）もう一度アドレスをカウントアップして書き込み先候補を選択する。以上の動作は、書き込み先ブロック（使用可能なブロック）が見つかるまで継続する。また、１パケットの書き込みが完了した場合、ライト用アドレス生成部１０は、パケットカウント部４０に対して書き込み完了信号（図１に示したライト完了信号に相当）を出力する。
【００１８】
ブロック単位ＣＲＣ生成部２０は、入力されたライトデータに対して、書き込み先のブロックのサイズと同じＮｂｙｔｅ（たとえば６４ｂｙｔｅ）ごとにＣＲＣ演算を行い、演算結果を演算データバッファ３２へ出力する。
【００１９】
パケットバッファ３１は、１パケットあたり２０４８ｂｙｔｅのメモリ空間（以下、１パケット格納用領域と呼ぶ）を割り当て、最大ｎパケットまで蓄積可能な構成となっている。また、１パケット格納用領域は、さらに、所定サイズ（たとえば６４ｂｙｔｅ）の複数のブロック（以下、処理単位ブロックと呼ぶ）により構成される。
【００２０】
演算データバッファ３２は、ブロック単位ＣＲＣ生成部２０における演算結果をブロック単位に格納する。
【００２１】
チェック結果バッファ３３は、ブロック単位ＣＲＣチェック部６０の比較結果を格納する。このチェック結果バッファ３３に格納された比較結果を確認することにより、ライト側およびリード側は、チェック結果に対応する処理単位ブロックが使用可能なブロックであるかどうかを判断する。
【００２２】
パケットカウント部４０は、パケットバッファ３１に格納されているパケット数をカウントする。具体的には、ライト用アドレス生成部１０からライト完了信号が入力されるたびにカウントアップを行い、カウンタ値が１以上の場合にリード許可信号をリード用アドレス生成部５０に対して出力し、読み出しを開始させる。また、読み出しが完了し、リード用アドレス生成部５０からリード完了信号が入力されるとカウント値をカウントダウンする。
【００２３】
リード用アドレス生成部５０は、パケットカウント部４０からリード許可信号が入力されると、読み出し開始位置のアドレスを決定し、決定したアドレスを記憶部３０（パケットバッファ３１）に対して通知する。アドレス決定にあたっては、まず、パケットバッファ３１を構成する処理単位ブロックの中から、前回読み出したデータに続くデータが格納されていると推測される処理単位ブロックを読み出しブロックの候補として選択する。そして、選択した読み出し候補ブロックにデータが格納されているかどうかをチェック結果バッファ部３３が保持しているチェック結果に基づいて判断する。データが格納されていれば、この候補ブロックを読み出し元ブロックに決定し、そのアドレスを読み出し開始位置アドレスとする。なお、リード用アドレス生成部５０は、読み出し候補ブロックにデータが格納されていなければ、ブロックサイズ（処理単位ブロックのサイズ）に合わせてアドレスをカウントアップして次の読み出し候補ブロックを再選択する。さらに、再選択した読み出し候補ブロックにデータが格納されているかを上記手順と同様の手順で確認し、必要であればもう一度アドレスをカウントアップして読み出し候補ブロックを選択する。以上の動作は、読み出し元ブロックが見つかるまで継続する。また、１パケットの読み出しが完了した場合、リード用アドレス生成部５０は、パケットカウント部４０に対して読み出し完了信号を出力する。
【００２４】
ブロック単位ＣＲＣチェック部６０は、パケットバッファ３１から読み出されたデータ（リードデータ）に対して、パケットバッファ３１を構成する処理単位ブロックのサイズと同じＮｂｙｔｅごとにＣＲＣ演算を行い、演算結果と演算データバッファ部３２に格納されている演算結果に基づいて、データの読み出し元処理単位ブロックに異常（物理的な異常）が無いかどうかを判断する。判断方法を具体的に示すと、ブロック単位ＣＲＣチェック部６０による演算結果（演算結果＃１）に対応する演算結果（演算結果＃２）を演算データバッファ３２から読み出し、演算結果＃１と演算結果＃２が一致していればデータの読み出し元処理単位ブロックに異常が無いと判断し、不一致の場合は異常ありと判断して、以降この処理単位ブロックを使用禁止と判断する。判断結果は、チェック結果バッファ３３へ格納される。
【００２５】
ブロック単位ＣＲＣエラーカウント部７０は、チェック結果バッファ３３を監視し、使用禁止になった処理単位ブロック数を１パケット格納用領域単位でカウントする。そして、１パケット格納用領域を構成する処理単位ブロックの中に未使用の処理単位ブロック（空ブロック）が存在するかどうかを確認する。確認の結果、空ブロックが存在しない、すなわち処理単位ブロック全てが使用されている、と判断した場合には、警報（メモリエラー）を発出し、早期にパッケージ交換等を実施するよう促す。なお、上記未使用の処理単位ブロックとは、最大長のパケット（１５１８ｂｙｔｅのパケット）を格納する場合であっても使用されることのない処理単位ブロックをいう。
【００２６】
つづいて、本発明にかかるパケット処理装置が行うパケット処理の原理について、図２を参照しながら説明する。なお、図２は、本発明の原理を説明するための図である。
【００２７】
上述したように、本発明にかかるパケット処理装置では、１パケットに対して２０４８ｂｙｔｅのバッファ（１パケット格納用領域）を割り当てている。一方、実際に処理される（ライトデータとして入力される）パケットは６４〜１５１８ｂｙｔｅの可変長フレームであるため、図７に示したように最大サイズ（１５１８ｂｙｔｅ）のパケットを収容した場合であっても５３０ｂｙｔｅの領域は、空領域（未使用領域）となる。
【００２８】
そのため、本発明にかかるパケット処理装置では、この２０４８ｂｙｔｅの１パケット格納用領域を図２に示すように所定サイズ（Ｎｂｙｔｅ）のブロックである処理単位ブロックに分割し、通常６４〜１５１８ｂｙｔｅ長のフレームを収容する為の処理単位ブロック群と通常使用しない処理単位ブロック群（空ブロック）に分ける。そして、書き込み側では、ライトデータを処理単位ブロックと同じサイズに分割し、分割されたデータ単位でＣＲＣ演算やパリティ演算を行い、読み出し側で同じブロック単位のＣＲＣチェックやパリティチェックを行っていく。そして、書き込み側でのチェック結果と読み出し側でのチェック結果が一致しない場合、エラーが発生した処理単位ブロックは、以降、書き込み側と読み出し側双方で使用禁止とし、これに伴い不足するブロックを空ブロックから補うことで６４〜１５１８ｂｙｔｅのパケットデータを保証する。
【００２９】
つづいて、図３および図４に基づいて、データの書き込み側の処理を詳細に説明する。図３は、データ書き込み処理フローを示す図であり、図４は、データ書き込み制御の一例を示すフローチャートである。
【００３０】
パケットバッファ３１への書き込み側では、図３に示すように書き込みデータを受け取る前に書き込みが可能な第１ブロック（処理単位ブロック）を選定する。そのため、書き込みブロックの選定ステータスは、読み出したチェック結果がＯＫになるまで、チェック結果バッファ３３から処理単位ブロックのチェック結果を先に読み出す。書き込みが可能なブロック（チェック結果バッファ３３から読み出したチェック結果がＯＫの処理単位ブロック）が決定すると、書き込みデータを受け取るまで、ＷＡＩＴ状態を保持する。
【００３１】
書き込みデータを受け取ると、上記決定しておいたブロックのアドレスを発生させ、受け取った書き込みデータであるパケットデータの先頭から処理単位ブロックのサイズと同じサイズのデータを切り出し、切り出したデータをパケットバッファ３１へ書き込む。第１ブロックへの書き込みと同時に（第１ブロックへの書き込み処理を開始後）書き込みブロックの選定ステータスは、次の書き込みが可能な処理単位ブロック（第２ブロック）を選定するため、チェック結果バッファ３３からチェック結果の先読み出しを行う。またＣＲＣ演算ステータスは、第１ブロックへの書き込みデータのＣＲＣ演算を行う。
【００３２】
第１ブロックへの書き込みが完了後、第１ブロックに対するＣＲＣ演算結果を演算データバッファ３２へ書き込むとともに第２ブロックを対象とした同様の処理（データ書き込み、ＣＲＣ演算、第３ブロックの選定）を行う。
【００３３】
パケットバッファ３１に格納されたデータの書き込み側の各部は、上述した一連の動作を１フレーム分の受信データ全てをパケットバッファ３１へ書き込むまで繰り返し実行する。１フレーム分のデータの書き込みが完了したら、ライト用アドレス生成部１０がライト完了信号を出力し、さらに、次のパケットを書き込むために、次のパケット領域（１パケット格納用領域）での書き込みが可能な第１ブロックの選定を行い、上記一連の動作（データ書き込み、ＣＲＣ演算、など）を行うための準備を行う。
【００３４】
以上の動作を図４に基づいて説明する。動作開始に伴い、まず、選択候補の処理単位ブロック（ブロック番号）を示すパラメータ（ｘ）を初期化する（ステップＳ１１）。
【００３５】
次に、選択候補の処理単位ブロックであるブロックｘが使用可能（書き込み可能）か否かを確認する（ステップＳ１２）。ブロックｘが使用可能であれば（ステップＳ１２，Ｙｅｓ）これを書き込み可能ブロック（すなわち次回の書き込み処理におけるデータの書込領域）として選択する（ステップＳ１３）。その後、書き込みデータを受信したかどうかを監視し（ステップＳ１４）、書き込みデータを受信した場合（ステップＳ１４，Ｙｅｓ）、受信したデータの書き込み処理を開始する（ステップＳ１５）。そして、ブロック番号（パラメータｘ）をインクリメントし（ステップＳ１６）、ステップＳ１２へ遷移して、次の書き込みが可能なブロックの選定処理およびこれに続く処理を継続する。
【００３６】
これに対して、上記ステップＳ１２において、ブロックｘが使用不可能と判断した場合（ステップＳ１２，Ｎｏ）、ステップＳ１６へ遷移して、書き込みが可能なブロックの選定処理を継続する。
【００３７】
つづいて、図５および図６に基づいて、データの読み出し側の処理を詳細に説明する。図５は、データ読み出し処理フローを示す図であり、図６は、データ読み出し制御の一例を示すフローチャートである。
【００３８】
パケットバッファ３１からの読み出し側では、図５に示すように書き込み側と同様に読み出しが可能な第１ブロック（処理単位ブロック）を選定する。そのため、読み出しブロックの選定ステータスは、読み出したチェック結果がＯＫになるまで、チェック結果バッファ３３から処理単位ブロックのチェック結果を先に読み出す。読み出しが可能なブロック（チェック結果バッファ３３から読み出したチェック結果がＯＫの処理単位ブロック）が決定すると、パケットカウント部４０からリード許可信号を受信するまで、ＷＡＩＴ状態を保持する。
【００３９】
リード許可信号を受信すると、上記決定しておいたブロックのアドレスを発生させ、当該アドレスに対応するパケットバッファ３１の領域（処理単位ブロック）からパケットデータを読み出す。第１ブロックからの読み出しと同時に（第１ブロックからの読み出し処理を開始後）読み出しブロックの選定ステータスは、次の読み出しが可能なブロック（第２ブロック）を選定するため、チェック結果バッファ３３からチェック結果の先読み出しを行う。またＣＲＣ演算ステータスは、第１ブロックから読み出したデータに対してＣＲＣ演算を行う。
【００４０】
また、演算データバッファリードステータスは、書き込み側が上記第１ブロックへデータを格納する際に行ったＣＲＣ演算の結果を演算データバッファ３２から読み出す。そして、演算データバッファ３２から読み出した演算結果と、パケットバッファ３１（パケットバッファ３１の第１ブロック）から読み出したデータに対して実行したＣＲＣ演算結果と、を比較する。これらの演算結果が一致していなければ、そのブロック（第１ブロック）を以降使用禁止とし、その旨を示す情報をチェック結果バッファ３３へ書き込むとともに、第２ブロックを対象とした同様の処理（データ読み出し，ＣＲＣ演算，演算データバッファ３２からの演算結果の読み出し，第３ブロックの選定）を行う。
【００４１】
パケットバッファ３１に格納されたデータの読み出し側の各部は、上述した動作を１フレームのデータ全てをパケットバッファ３１から読み出すまで繰り返し実行する。リード用アドレス生成部５０は、１フレーム分のデータの読み出しが完了したら、リード完了信号をパケットカウント部４０へ出力し、次のパケットを読み出すために、次のパケットの領域（１パケット格納用領域）での読み出しが可能な第１ブロックの設定を行い、上記一連の処理（データ読み出し、ＣＲＣ演算、演算結果の比較、など）を行うための準備を行う。
【００４２】
また、演算データバッファ３２から読み出したＣＲＣ演算結果と、パケットバッファ３１から読み出したデータに対して実行したＣＲＣ演算結果と、を比較する処理においては、比較の結果、使用禁止としたブロック（使用不可ブロック数）が規定数に達したかどうかも確認し、規定数に達した場合には、メモリエラーの発生を示す警報を発出するなどして外部へエラー発生を通知する。
【００４３】
以上の動作を図６に基づいて説明する。動作開始に伴い、まず、選択候補の処理単位ブロック（ブロック番号）を示すパラメータ（ｘ）および使用禁止のブロックの数（使用不可ブロック数）を示すパラメータ（ｙ）を初期化する（ステップＳ２１）。
【００４４】
次に、選択候補の処理単位ブロックであるブロックｘが使用可能（読み出し可能）か否かを確認する（ステップＳ２２）。ブロックｘが使用可能であれば（ステップＳ２２，Ｙｅｓ）これを読み出し可能ブロック（すなわち次回の読み出し処理において読み出すデータが格納されている領域）として選択する（ステップＳ２３）。その後、読み出し開始指示を受けた（リード許可信号を受信した）かどうかを監視し（ステップＳ２４）、リード許可信号を受信した場合（ステップＳ２４，Ｙｅｓ）、上記選択した読み出し可能ブロックからのデータ読み出し処理を開始する（ステップＳ２５）。
【００４５】
さらに、読み出したデータが正常なものであるか、すなわち、演算データバッファ３２から読み出したＣＲＣ演算結果と、パケットバッファ３１から読み出したデータに対して実行したＣＲＣ演算結果が一致するかどうか、を確認する（ステップＳ２６）。読み出したデータが正常であれば（ステップＳ２６，Ｙｅｓ）、ブロック番号（パラメータｘ）をインクリメントし（ステップＳ２７）、ステップＳ２２へ遷移して、次の読み出しが可能なブロックの選定処理およびこれに続く処理を継続する。
【００４６】
これに対して、読み出したデータが正常でなければ（ステップＳ２６，Ｎｏ）、使用不可ブロック数（パラメータｙ）をインクリメントする（ステップＳ２８）。さらに、使用不可ブロック数が上限に達したかどうか、すなわち未使用の処理単位ブロックが存在するかどうか、を確認し（ステップＳ２９）、上限に達していなければ（ステップＳ２９，Ｎｏ）、ステップＳ２７へ遷移して処理を継続する。一方、使用不可ブロック数が上限に達した場合（ステップＳ２９，Ｙｅｓ）、メモリエラーの発生を示す警報を発出するなどしてエラー発生を通知する（ステップＳ３０）。
【００４７】
なお、上記説明においては、データの読み出し側がメモリエラーの発生を検知するようにしているが、書き込み側でメモリエラーを検知するようにしてもよい。
【００４８】
また、空領域（未使用領域）を全て使い切った時点（最大サイズのパケットを格納することができなくなった時点）で警報を発出するようにしているが、未使用領域の残存状態に応じて複数段階で警報を発出するようにしてもよい。また、本実施例では、いずれか一つの１パケット格納用領域において未使用領域を全て使い切った時点で警報を発出するようにしているが、１パケット格納領域は複数（ｎ個）存在するため、たとえばｋ個（ｋ＜ｎ）の１パケット格納用領域において未使用領域を全て使い切った時点で警報を発出するようにするなどしてもよい。
【００４９】
また、上記説明においては、ＣＲＣの演算結果を使用してエラーを検出するようにしているが、エラー検出が可能な方法であれば、これに限らない。たとえば、パリティ演算結果を使用してエラー検出を行ってもよい。
【００５０】
このように、本実施例においては、１パケットに対して割り当てたメモリ空間（上記１パケット格納領域に相当）を所定サイズの複数のブロックに分割し、ブロック単位でメモリの正常性を確認し、異常を検出した場合はブロック単位で使用を禁止し、使用禁止としたブロックに代えて、未使用のメモリ領域を構成しているブロックを使用するようにしてメモリの不足分を補うこととした。これにより、たとえば、メモリの一部分において異常が発生した場合、従来は、直ちにメモリを交換してリカバリーを行う必要があったが、本発明を適用することにより、メモリを交換することなしにリカバリーを行い、パケットデータを保証して通信品質の劣化を防止できる。また、メモリの使用効率を上げることができる。さらに、メモリの交換サイクルが伸びるため、装置の保守に必要なコストを抑えることができる。
【００５１】
（付記１）受信した可変長パケットを一旦保持しておく機能を有するパケット処理装置であって、
１つの可変長パケットを格納する１パケット格納用メモリ領域を複数個有し、各１パケット格納用メモリ領域は、最大長のパケットを格納可能なパケット格納領域および余剰の未使用領域を有し、前記各パケット格納領域がパケットのバッファリング単位となる複数のブロックに分割されているパケット記憶部と、
前記パケット記憶部のパケット格納領域の各ブロックに受信したパケットを書き込むとともに読み出す制御を行う制御手段と、
前記パケット格納領域のブロックへ書き込む前のパケットデータおよび当該ブロックから読み出したパケットデータに基づいて各ブロックの物理的なエラーを検出するエラー検出手段と、
を備え、
前記制御手段は、前記エラー検出手段によりエラーが検出された場合、当該エラーが検出されたブロックに代えて、未使用領域に設定したブロックを使用して、以降のバッファリングを行うことを特徴とするパケット処理装置。
【００５２】
（付記２）前記エラー検出手段は、
前記ブロックへ格納する前のパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第１のチェック用データを算出する第１のチェック用データ算出手段と、
前記ブロックから読み出したパケットデータに基づいて当該ブロックの物理的なエラーを検出するための第２のチェック用データを算出する第２のチェック用データ算出手段と、
前記第１のチェック用データおよび前記第２のチェック用データに基づいて前記ブロックが物理的なエラーを有するかどうかを判定するエラー判定手段と、
を備えることを特徴とする付記１に記載のパケット処理装置。
【００５３】
（付記３）前記第１のチェック用データ算出手段および前記第２のチェック用データ算出手段は、同じ演算方法を用いて、それぞれ前記第１のチェック用データおよび前記第２のチェック用データを算出し、
前記エラー判定手段は、前記第１のチェック用データと前記第２のチェック用データが一致しない場合に、前記ブロックが物理的なエラーを有すると判定することを特徴とする付記２に記載のパケット処理装置。
【００５４】
（付記４）前記演算方法として、ＣＲＣ（Cyclic  Redundancy  Checking）演算を用いることを特徴とする付記３に記載のパケット処理装置。
【００５５】
（付記５）付記１〜４のいずれか一つに記載のパケット処理装置、
を備えることを特徴とする通信装置。
【産業上の利用可能性】
【００５６】
以上のように、本発明は、パケット交換方式に対応した通信装置に有用であり、特に、１つの受信パケットを一旦保持しておくためのバッファ（メモリ領域）が冗長に割り当てられかつメモリの一部で不具合が発生した場合に、メモリ領域の冗長部分を有効に利用して通信品質の劣化を抑えるパケット処理装置として有用である。
【図面の簡単な説明】
【００５７】
【図１】本発明にかかるパケット処理装置の構成例を示す図である。
【図２】本発明の原理を示す図である。
【図３】データの書込処理フローを示す図である。
【図４】データ書込み処理の一例を示すフローチャートである。
【図５】データの読出処理フローを示す図である。
【図６】データ読出処理の一例を示すフローチャートである。
【図７】１パケットあたりのバッファ領域を示す図である。
【図８】従来の装置構成を示す図である。
【符号の説明】
【００５８】
１０  ライト用アドレス生成部
２０  ブロック単位ＣＲＣ生成部
３０  記憶部
３１  パケットバッファ
３２  演算データバッファ
３３  チェック結果バッファ
４０  パケットカウント部
５０  リード用アドレス生成部
６０  ブロック単位ＣＲＣチェック部
７０  ブロック単位ＣＲＣエラーカウント部
【図１】
2008236309.tif 000003
【図２】
2008236309.tif 000004
【図３】
2008236309.tif 000005
【図４】
2008236309.tif 000006
【図５】
2008236309.tif 000007
【図６】
2008236309.tif 000008
【図７】
2008236309.tif 000009
【図８】
2008236309.tif 000010