(57)【特許請求の範囲】
【請求項１】
可変長のCRC演算対象データを入力として受けるCRC演算装置において、
前記CRC演算対象データのデータ長がN(Nは2以上の整数)の倍数でない場合に、前記データ長をNで割った余りをM（M＜N）とするとき、Nバイトにパラレル展開されたCRC演算対象データに対して、Nバイトのうち(M＋1)バイト目乃至Nバイト目と、最終のNバイトの(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータとをシフトするシフト回路と、該シフト回路によりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更する並び変更手段と、該並び変更手段により前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更する“０”付加手段と、該“０”付加手段により、先頭に“０”の（N−M）バイトが付加された前記CRC演算対象データをCRC演算し、演算結果を出力するCRC演算部とを有し、CRC演算の対象となるデータの先頭に“０”が付加されてもCRCの演算結果が変化しないことを利用したことを特徴とするCRC演算装置。
【請求項２】
請求項１に記載のCRC演算装置において、
前記演算結果を、期待する値と一致するかどうか比較し、比較結果を出力する比較回路を、更に有することを特徴とするCRC演算装置。
【請求項３】
請求項１に記載のCRC演算装置において、
入力として受けたCRC演算対象データの長さ情報から前記CRC演算対象データの最終バイトの位置を算出し、前記シフト回路、前記並び変更手段、及び前記“０”付加手段を制御する制御情報を生成する最終バイト位置判定部を、更に有することを特徴とするCRC演算装置。
【請求項４】
請求項１に記載のCRC演算装置において、
前記並び変更手段は、前記シフト回路によりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更するN×Nスイッチ部であり、
前記“０”付加手段は、前記N×Nスイッチ部により前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更するマスク処理部であることを特徴とするCRC演算装置。
【請求項５】
可変長のCRC演算対象データのデータ長がN(Nは2以上の整数)の倍数でない場合に、前記データ長をNで割った余りをM（M＜N）とするとき、Nバイトにパラレル展開されたCRC演算対象データに対して、Nバイトのうち(M＋1)バイト目乃至Nバイト目と、最終のNバイトの(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータとをシフトするシフトステップと、該シフトステップによりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更する並び変更ステップと、該並び変更ステップにより前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更する“０”付加ステップと、該“０”付加ステップにより、先頭に“０”の（N−M）バイトが付加された前記CRC演算対象データをCRC演算し、演算結果を出力するCRC演算ステップとを有し、CRC演算の対象となるデータの先頭に“０”が付加されてもCRCの演算結果が変化しないことを利用したことを特徴とするCRC演算方法。
【請求項６】
請求項５に記載のCRC演算方法において、
前記演算結果を、期待する値と一致するかどうか比較し、比較結果を出力する比較ステップを、更に有することを特徴とするCRC演算方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はＣＲＣ演算装置及びＣＲＣ演算方法に関するものである。
【０００２】
【従来の技術】
ＣＲＣ（ＣｙｃｌｉｃＲｅｄｕｎｄａｎｃｙＣｈｅｃｋ）演算対象となるデータ長に対応してＣＲＣ演算処理ブロックを複数持つことにより、可変長のデータをパラレル展開してＣＲＣ演算を行う従来のＣＲＣ演算装置が、特開平９−１８３５５号公報に記載されている。
【０００３】
図１３は、従来のＣＲＣ演算装置の構成を示す図である。演算結果を格納するためのレジスタ１３０２と、このレジスタ１３０２に格納されている値と、入力データとして入力された可変長データとに対して、各データ長に対応するＣＲＣ演算結果を出力する演算処理手段１３００と、演算処理手段１３００から出力されたデータ長ごとのＣＲＣ演算結果を、長さ情報に従って前記演算結果として選択し、該演算結果をレジスタ１３０２に出力する結果選択処理手段１３０１と、レジスタ１３０２の出力である前記演算結果とＣＲＣ期待値とを照合する比較処理手段１３０３とから構成される。
【０００４】
この装置では、ＣＲＣ演算の対象となるデータが８ビット、４ビット、３ビット、２ビットのいずれかであることを利用して、入力データとレジスタ１３０２に格納されている値に対して、入力データが８ビット、４ビット、３ビット、２ビットの際の演算結果を出力し、後段の結果選択処理手段１３０１において、長さ情報をもとに演算結果の選択を行っている。
【０００５】
【発明が解決しようとする課題】
しかし、この従来技術には次のような問題点があった。
【０００６】
第一の問題点は、高速に処理を行うために入力データのパラレル展開数を増加して対応する場合に、回路規模が増大するという点である。
【０００７】
その理由は、入力データのパラレル展開数Ｎ（Ｎは２以上の整数）に対して、１からＮまでの長さに対応するＣＲＣ演算処理ブロックと長さ情報により演算結果を選択するブロックを設ける必要があるためである。
【０００８】
本発明の課題は、簡単な回路構成のＣＲＣ演算装置を提供することにある。
【０００９】
本発明の別の課題は、簡単な回路構成のＣＲＣ演算装置を実現可能とするＣＲＣ演算方法を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の第１の態様によれば、可変長のCRC演算対象データを入力として受けるCRC演算装置において、
前記CRC演算対象データのデータ長がN(Nは2以上の整数)の倍数でない場合に、前記データ長をNで割った余りをM（M＜N）とするとき、Nバイトにパラレル展開されたCRC演算対象データに対して、Nバイトのうち(M＋1)バイト目乃至Nバイト目と、最終のNバイトの(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータとをシフトするシフト回路と、該シフト回路によりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更する並び変更手段と、該並び変更手段により前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更する“０”付加手段と、該“０”付加手段により、先頭に“０”の（N−M）バイトが付加された前記CRC演算対象データをCRC演算し、演算結果を出力するCRC演算部とを有し、CRC演算の対象となるデータの先頭に“０”が付加されてもCRCの演算結果が変化しないことを利用したことを特徴とするCRC演算装置が得られる。
【００１１】
本発明の第２の態様によれば、上述した第１の態様によるＣＲＣ演算装置において、
前記演算結果を、期待する値と一致するかどうか比較し、比較結果を出力する比較回路を、更に有することを特徴とするＣＲＣ演算装置が得られる。
【００１２】
本発明の第３の態様によれば、上述した第１の態様によるＣＲＣ演算装置において、
入力として受けたＣＲＣ演算対象データの長さ情報から前記ＣＲＣ演算対象データの最終バイトの位置を算出し、前記シフト回路、前記並び変更手段、及び前記“０”付加手段を制御する制御情報を生成する最終バイト位置判定部を、更に有することを特徴とするＣＲＣ演算装置が得られる。
【００１３】
本発明の第４の態様によれば、上述した第１の態様によるCRC演算装置において、
前記並び変更手段は、前記シフト回路によりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更するN×Nスイッチ部であり、
前記“０”付加手段は、前記N×Nスイッチ部により前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更するマスク処理部であることを特徴とするCRC演算装置が得られる。
【００１４】
本発明の第５の態様によれば、可変長のCRC演算対象データのデータ長がN(Nは2以上の整数)の倍数でない場合に、前記データ長をNで割った余りをM（M＜N）とするとき、Nバイトにパラレル展開されたCRC演算対象データに対して、Nバイトのうち(M＋1)バイト目乃至Nバイト目と、最終のNバイトの(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータとをシフトするシフトステップと、該シフトステップによりシフトされたバイトに対して、(M＋1)バイト目乃至Nバイト目にある（N−M）バイトのCRC演算対象ではないデータが前記CRC演算対象データの先頭に付加されるべく並びを変更する並び変更ステップと、該並び変更ステップにより前記CRC演算対象データの先頭に付加された（N−M）バイトを“０”に変更する“０”付加ステップと、該“０”付加ステップにより、先頭に“０”の（N−M）バイトが付加された前記CRC演算対象データをCRC演算し、演算結果を出力するCRC演算ステップとを有し、CRC演算の対象となるデータの先頭に“０”が付加されてもCRCの演算結果が変化しないことを利用したことを特徴とするCRC演算方法が得られる。
【００１５】
本発明の第６の態様によれば、上述した第５の態様によるＣＲＣ演算方法において、
前記演算結果を、期待する値と一致するかどうか比較し、比較結果を出力する比較ステップを、更に有することを特徴とするＣＲＣ演算方法が得られる。
【００１６】
【作用】
特開平９−６９８３６号公報には、ＣＲＣ演算対象となるデータをパラレル展開した場合に、最終ワードの途中で演算対象となるデータが終了すると、その後に“０”を詰めることにより、ＣＲＣ演算を行っている。そのときのＣＲＣ演算回路は、前記特開平９−６９８３６号公報の図１０に示されるフローチャートを用いて生成することが可能となる。ＣＲＣ演算対象となるデータのビット数をａ、並列度（パラレル展開数）をｃ、ａをｃで割ったあまりをｈとすると、ＣＲＣ演算対象となるデータのビット数が可変長である場合（ａが可変長）、ｈが可変になり、前記特開平９−６９８３６号公報の図１０によるＣＲＣ演算回路の生成が演算対象となるデータのビット長により異なる（図１０のＳ６の演算結果がｈにより異なる）ことになる。したがって、入力されるＣＲＣ演算対象となるデータ列が可変長である場合には、ＣＲＣ演算回路を入力データ長ごとに持つ必要がある。
【００１７】
これに対して、本発明に従って、先頭に“０”を付加する場合には、入力データが可変長であっても、ＣＲＣ演算部をデータ長に応じて変更する必要がなく共通にできる性質を利用して、先頭にデータ長を並列度で割った余り分だけ、シフト回路、Ｎ×Ｎスイッチ部、マスク処理部により、“０”を付加して、ＣＲＣ演算を行うことができる。
【００１８】
前記特開平９−６９８３６号公報は、先頭に“０”を付加することも記載しているが、先頭に“０”を付加することにより入力データが可変長である場合に、ＣＲＣ演算部を共通にできることについての記載はなく、先頭に“０”を付加するための回路構成（上述のシフト回路、Ｎ×Ｎスイッチ部、マスク処理部）についても記載はない。
【００１９】
【発明の実施の形態】
次に本発明について図面を参照して説明する。
【００２０】
本発明は、CRC演算対象である可変長のデータをN（Nは２以上の整数）バイトパラレルに展開した場合に、データ長がNで割り切れないとき、最終ワ−ドの演算対象でないバイト数だけ、“０”を前記可変長のデータの先頭に付加することにより、NバイトのCRC演算処理のみで演算可能とするものである。
【００２１】
すなわち、本発明は、可変長のデータに対するＣＲＣ演算において、ＣＲＣ演算の対象となるデータの先頭に“０”が付加されてもＣＲＣの演算結果が変化しないことを利用して、可変長のデータをＮバイトパラレルに展開した場合に、最後のＮバイトにできる演算対象でないバイトの数だけ、可変長のデータの先頭に“０”を付加することにより、ＣＲＣ演算部を、Ｎバイトパラレルに対する演算ブロックのみで構成するものである。
【００２２】
図１を参照すると、本発明の第１の実施例によるＣＲＣ演算装置は、ＣＲＣ演算の対象となるデータの長さを表わす長さ情報（ＬＥＮＧＴＨ情報）と前記データのデータ先頭情報とから、シフト回路１０１、Ｎ×Ｎスイッチ部１０２、マスク処理部１０３を制御する信号を生成する最終バイト位置判定部１００を有する。
【００２３】
ＣＲＣ演算の対象となる可変長データをＮバイト（＝１ワード）にパラレル展開すると、可変長データの長さがＮの倍数でない場合には、可変長のデータ長をＮで割った余りをＭ（Ｍ＜Ｎ）とするとき、最後のワードでは、Ｎバイトの中のＭバイトが演算対象であり、残りの（Ｎ−Ｍ）バイトは演算対象ではない。
【００２４】
シフト回路１０１では、ＣＲＣ演算対象のデータがＮの倍数でない場合に、Ｍ＋１バイト目からＮバイトまでをシフトし、Ｎの倍数の場合（Ｍ＝“０”）はシフトを行わない回路である。
【００２５】
Ｎ×Ｎスイッチ部１０２は、シフト回路１０１によりシフトされたデータに対して、データ長がＮの倍数でない場合には、Ｍ＋１バイト目からＮバイトにあるＣＲＣ演算対象でないデータが１バイト目から（Ｎ−Ｍ）バイトに位置するようにバイトの並べ替えを行い、Ｎの倍数である場合には、並べ替えを行わない。
【００２６】
マスク処理部１０３は、データ長がＮの倍数でない場合には、Ｎ×Ｎスイッチ部１０２によりデータの先頭の１バイト目から（Ｎ−Ｍ）バイトに移動したＣＲＣ演算対象でないデータをすべて“０”に変更する処理を行い、Ｎの倍数の場合には、データを“０”に変更する処理は行なわない。
【００２７】
シフト回路１０１からマスク処理部１０３までの処理により、Ｎバイトの倍数でないデータの場合に、Ｎバイトにパラレル展開されたデータにおいて、最終のＮバイトうちの演算対象でないバイトを“０”にして先頭に移動する処理を行うため、先頭は（Ｎ−Ｍ）バイトが“０”であり、その後にＣＲＣ演算の対象となるデータが続き、最終バイトはＮバイトの最後のバイトで終了するように並び替えられる。
【００２８】
ＣＲＣ演算部１０４は、Ｎバイトパラレル展開されたデータに対するＣＲＣ演算処理を行うブロックであり、Ｎバイト単位のＣＲＣ演算を行う。
【００２９】
演算した結果は、比較回路１０５において、期待する値と一致するかどうかの比較が行われ、その比較結果を出力する。
【００３０】
シフト回路１０１、Ｎ×Ｎスイッチ部１０２、マスク処理部１０３により、Ｎバイトの倍数の長さでない可変長のデータをＮバイトパラレルに展開したときに、可変長データのサイズをＮで割った余り以降からＮバイト目までのバイト数（Ｎ−（データ長をＮで割った余り））だけ先頭に“０”を付加することにより、可変長データをＮバイトの倍数のサイズとしてＣＲＣ演算を行うことができる。したがって、ＣＲＣ演算処理ブロックとして、ＮバイトのＣＲＣ演算部１０４を用いるだけで演算可能となる。
【００３１】
すなわち、図１のＣＲＣ演算装置は、可変長のＣＲＣ演算対象データ長がＮの倍数でない場合にデータ長をＮで割った余りをＭとするとき、Ｎバイトにパラレル展開されたＣＲＣ演算対象データに対して、ＮバイトのうちＭ＋１（Ｍ＜Ｎ）バイトからＮバイト目までをシフトするシフト回路１０１と、シフト回路１０１によりシフトされたデータのバイトの並びを変更するＮ×Ｎスイッチ部１０２と、並び替えられたデータの先頭の（Ｎ−Ｍ）バイトを“０”に変更するマスク処理部１０３とを有する。最終バイト位置判定部１００は、受信したＣＲＣ演算対象データの長さ情報から最終バイトの位置（データ長をＮで割った余り）を算出し、シフト回路１０１のシフトするバイト情報、Ｎ×Ｎスイッチ部１０２のスイッチ情報、マスク処理部１０３のパディングバイト情報の制御情報を生成する。ＣＲＣ演算部１０４は、Ｎバイトにパラレル展開されたＣＲＣ演算対象データに対して、データ先頭情報で示される位置からデータ最終情報で示される位置までＣＲＣ演算を行う。比較回路１０５は、ＣＲＣ演算部１０４の演算結果について、期待値との比較を行いその比較結果を出力する。
【００３２】
次に、図１のＣＲＣ演算装置の動作について図２を参照して説明する。
【００３３】
図１のＣＲＣ演算装置には、Ｎバイトにパラレル展開されたＣＲＣ演算の対象となる可変長のデータが入力データとして入力されると共に、ＣＲＣ演算の対象データの範囲を示すデータ先頭情報およびデータ最終情報が入力される。
【００３４】
図２において、入力データは、Ｎバイトのデータが１ワ−ドからＬワ−ドまで順番に入力される形態であり、最終ワ−ド（Ｌワ−ド目）はＣＲＣ演算対象となるデータ長をバイトパラレル展開数Ｎで割った余りをＭとするとき（Ｌ−Ｍ）バイトまで演算対象となる。最終バイト位置判定部１００は、データ先頭情報により演算対象のデータを受信したことを認識すると、送信された長さ情報（ＬＥＮＧＴＨ情報）をもとに上記Ｍを算出し、シフト回路１０１、Ｎ×Ｎスイッチ部１０２、マスク処理部１０３の制御信号を生成する。
【００３５】
シフト回路１０１は、受信したＮバイトのデータに対して、上記算出した余りＭをもとに生成されたＭ＋１バイトからＮバイト目までをシフトする制御信号によりシフト処理を行う。
【００３６】
Ｎ×Ｎスイッチ部１０２は、シフト回路１０１によりシフト処理されたデータについて、（Ｍ＋１）バイトからＮバイト目が１バイト目からＮ−Ｍバイト目に位置するようにスイッチを行う。
【００３７】
マスク処理部１０３は、Ｎ×Ｎスイッチ部１０２で並べ替えられた１ワ−ド目のＮバイトのデータについて、１バイトから（Ｎ−Ｍ）バイト目までを“０”に変更する処理を行う。
【００３８】
ＣＲＣ演算部１０４は、Ｎバイトに展開されたデータのＣＲＣ演算処理を行う。
【００３９】
比較回路１０５は、ＣＲＣ演算部１０４の演算結果と期待値の比較を行い、その比較結果を出力する。
【００４０】
次に、図１のＣＲＣ演算装置の具体例の動作を説明する。
【００４１】
図１において、入力データのパラレル展開数Ｎが８であり、ＣＲＣ−３２の演算を行う場合を具体例として説明する。
【００４２】
図３は、図１のＣＲＣ演算装置におけるシフト回路１０１、Ｎ×Ｎ（８×８）スイッチ部１０２、及びマスク処理部１０３の具体例のブロック図である。図３において、シフト回路１０１（図１）は、フリップフロップからなるシフト素子２００−１とセレクタ２０１−１との組合せ、シフト素子２００−２とセレクタ２０１−２との組合せ、シフト素子２００−３とセレクタ２０１−３との組合せ、シフト素子２００−４とセレクタ２０１−４との組合せ、シフト素子２００−５とセレクタ２０１−５との組合せ、シフト素子２００−６とセレクタ２０１−６との組合せ、シフト素子２００−７とセレクタ２０１−７との組合せ、及びシフト素子２００−８とセレクタ２０１−８との組合せから構成される。図３において、Ｎ×Ｎ（８×８）スイッチ部１０２（図１）は、８：１セレクタ２０２−１〜２０２−８から構成される。図３において、マスク処理部１０３（図１）は、８：１セレクタ２０２−１〜２０２−８の出力信号と、マスク信号１〜８とを入力とするＡＮＤ回路２０３−１〜２０３−８から構成される。
【００４３】
図４は、ＣＲＣ−３２のシリアルデータに対する演算回路であり、この演算回路は、○で囲った＋で示した排他的論理和（ＥＸＯＲ）回路と、第０〜第３１のフリップフロップＦとで構成される。本演算回路では、演算対象となるすべてのデータが入力されたときの、第０〜第３１のフリップフロップＦに保持されている値が演算結果となる。
【００４４】
図５は、図４の演算回路において８バイトパラレルに処理を行う回路例を示しており、図１のＣＲＣ演算部１０４を構成するものである。図５において、＋は排他的論理和を示し、Ｆ／Ｆはフリップフロップを示している。図５において、第０〜第３１のフリップフロップＦ／Ｆ（図５の右下部から上方に３２個図示されている。）の出力はＦ０〜Ｆ３１で示されており、これら第０〜第３１のフリップフロップＦ／Ｆの出力Ｆ０〜Ｆ３１が、図４の第０〜第３１のフリップフロップＦの出力に対応する。
【００４５】
図６を参照して、入力データは、演算対象となるデータが先頭位置情報と最終位置情報により示された８バイトのデータ列であり、最終ワ−ドはデータ長により演算対象となるバイトの終了位置がそれぞれ異なる。
【００４６】
図６に加えて図７をも参照して、図６における、１−１−１から１−４−５で示される２９バイトのデータ列（図７：７００）が入力された場合に、最終バイト位置判定部１００は、先頭位置情報をもとに送信される長さ情報（２９バイト）をもとに最終ワ−ドの演算対象バイトの終了位置を算出する。データ長である２９バイトをパラレル展開数８で割った余りが５であるため、最終ワ−ドの演算対象となるバイトは５バイト目までとなることが分かる。
【００４７】
最終ワ−ドの６バイト目から８バイト目までの演算対象でない部分を先頭ワ−ドに移動するため、まず６バイト目から８バイト目をシフトする処理をシフト回路１０１により行う（図７：７０１）。シフト回路１０１は、図３におけるシフト素子２００−１〜２００−８およびセレクタ２０１−１〜２０１−８に対応し、セレクタは入力バイトデータ１選択信号〜入力バイト８選択信号により制御される。６バイト目から８バイト目までをシフトするため、この選択信号は最終バイト位置判定部１００において、入力バイトデータ１選択信号〜入力バイトデータ５選択信号までを“１”、入力バイトデータ６選択信号〜入力バイトデータ８選択信号までを“０”となるように生成される。
【００４８】
シフト回路１０１により６バイトから８バイト目までシフトされたデータは、８×８スイッチ部１０２において、入力バイトの６バイトから８バイトまでが上位バイトである１バイト目から３バイト目になるように並べ替えが行われる（図７：７０２）。８×８スイッチ部１０２は、図３において８：１セレクタ２０２−１〜２０２−８に対応し、入力データの６バイト目を１バイト目に出力されるように並べ替えるため、セレクタの選択信号として“５”を８：１セレクタに入力する。マスク処理部１０３は、８×８スイッチ部１０２において並べ替えられたデータの先頭ワードの１バイト目から３バイト目を“０”にする処理を行う（図７：７０３）。マスク処理部１０３は図３においてＡＮＤ２０３−１〜２０３−８に対応し、出力データの演算対象となる先頭ワ−ドの１バイト目から３バイト目までを“０”にするよう先頭ワ−ドにおいてはマスク信号１〜マスク信号３を“０”、マスク信号４〜マスク信号８を“１”となるよう生成し、先頭ワ−ド以外ではマスク信号１〜マスク信号８を“１”となるように生成する。
【００４９】
ＣＲＣ演算部１０４は、本実施例ではＣＲＣ−３２の演算を行い、その生成多項式はＸ３２＋Ｘ２６＋Ｘ２３＋Ｘ２２＋Ｘ１６＋Ｘ１２＋Ｘ１１＋Ｘ１０＋Ｘ８＋Ｘ７＋Ｘ５＋Ｘ４＋Ｘ３＋Ｘ２＋Ｘ１＋１である。シリアルデータに対する演算回路は図４に示すように３２個のフリップフロップと１５個の排他的論理和により構成される。図４における演算回路を８バイトパラレル（６４ビット）で処理を行うように変更した回路例を図５に示している。図５に示すような８バイト単位にＣＲＣ−３２を演算する回路において、先頭位置情報から最終位置情報までのデータに対して８バイトずつ演算処理を行い、最終位置情報が示す最終ワ−ドの時点で、３２ビット（４バイト）の演算結果を得ることになる。比較回路１０５では、ＣＲＣ演算部において算出された演算結果と期待値を照合して、その比較結果を出力する。
【００５０】
次に入力されるデータ列２−１−１から２−３−２で示される１８バイトのデータ列が入力された場合には、３バイト目から８バイト目までをシフトして、８×８スイッチ部１０２の入力データの３バイト目から８バイト目が出力データの１バイト目から６バイト目に出力されるように並び替えを行う。マスク処理部１０３では先頭ワ−ドの１バイト目から６バイト目までを“０”にマスクする処理を行う。したがって、図７におけるシフト回路を制御する信号を、入力バイトデータ１選択信号〜入力バイトデータ２選択信号までを“１”、入力バイトデータ３選択信号〜入力バイトデータ８選択信号までを“０”となるように生成し、８×８スイッチ部（８：１セレクタ）の制御信号を“２”となるように生成し、マスク処理部の制御信号を、先頭ワ−ドにおいてはマスク信号１〜マスク信号６を“０”、マスク信号７〜マスク信号８を“１”となるよう生成し、先頭ワ−ド以外ではマスク信号１〜マスク信号８を“１”となるように生成する。
【００５１】
次に入力されるデータ列３−１−１から３−５−８で示される４０バイトのデータ列は、バイトパラレル展開数でデータ長が割り切れるため、シフト処理、８×８スイッチ部、マスク処理を行う必要はない。したがって、シフト処理の制御信号である入力バイトデータ１選択信号〜入力バイトデータ８選択信号は“１”、８×８スイッチ部（８：１セレクタ）の制御信号を“０”、マスク処理の制御信号であるマスク信号１〜マスク信号８を“１”となるように生成する。
【００５２】
本具体例では、可変長のデータをＮバイトパラレルに展開した場合に、データ長がＮで割り切れないことにより発生する最終ワ−ドの演算対象でないバイトを先頭ワ−ドに移動して“０”にすることにより、Ｎバイト単位のＣＲＣ演算処理部のみで演算可能となる。
【００５３】
本実施例では、８バイトにパラレル展開された入力データとＣＲＣ−３２演算について説明したが、ビット単位にパラレル展開された入力データおよびＣＲＣ−３２以外のＣＲＣ（ＣＲＣ−１６など）についても成立する。さらに、本実施例ではＣＲＣ演算を行い期待値との比較を行う構成について示したが、ＣＲＣ演算の期待値を生成するブロックに適用することも可能である。
【００５４】
図８を参照すると、本発明の第２の実施例によるＣＲＣ演算装置は、図１の最終バイト位置判定部１００の代りに最終バイト位置判定部８００を含む。
【００５５】
本実施例は、最終バイト位置判定部８００に、長さ情報（ＬＥＮＧＴＨ情報）を入力するのみならず、先頭バイト位置情報をも入力することにより、演算対象となるデータ列の先頭がワ−ドの上位バイトに位置しない場合でも処理可能となるようにしたものである。
【００５６】
本実施例の動作を図面を参照して説明する。
【００５７】
図８において、最終バイト位置判定部８００は、ＣＲＣ演算対象となるデータの長さ情報（ＬＥＮＧＴＨ情報）と先頭バイト位置情報をもとに、最終バイトの位置を算出する。本実施例については８バイトパラレルに展開された入力データについて説明する。８バイトパラレル展開されたデータ列について、図９に示す。
【００５８】
まず、先頭バイト位置＝最終バイト位置＋１のとき、例えば入力データのＣＲＣ演算対象となる先頭バイト位置が６バイト目であり、データ長が１６バイト（１−１−６から１−３−５）である場合（９００）、まず最終バイト位置“５”を先頭バイト位置とデータ長から算出する。シフト回路１０１は最終バイト位置である“５”より後のバイトすなわち６バイト目から８バイト目をシフトする処理を行う。８×８スイッチ部１０２は、入力データの６バイト目から８バイト目が、出力データの１バイト目から３バイト目に並び替わるように処理を行う。これらの処理により２ワ−ドのデータに並び替えられるため、マスク処理は行なわれない。
【００５９】
次に、先頭バイト位置＜最終バイト位置＋１のとき、例えば入力データのＣＲＣ演算対象となる先頭バイト位置が４バイト目であり、データ長が１８バイト（１−１−４から１−３−５）である場合（９０３）、まず最終バイト位置“５”を先頭バイト位置とデータ長から算出する。シフト回路１０１および８×８スイッチ部の処理は入力データ９００の場合と同様に動作する。マスク処理部１０３は、先頭ワ−ドの６バイト（８−（最終バイト位置＋１−先頭バイト位置）を“０”にマスクする処理を行う。
【００６０】
次に、先頭バイト位置＞最終バイト位置＋１のとき、例えば入力データのＣＲＣ演算対象となる先頭バイト位置が６バイト目であり、データ長が１４バイト（１−１−８から１−３−５）である場合（９０６）、まず最終バイト位置“５”を先頭バイト位置とデータ長から算出する。シフト回路１０１および８×８スイッチ部の処理は入力データ９００の場合と同様に動作する。マスク処理１０３は、先頭ワ−ドの２バイト（先頭バイト−（最終バイト＋１））を“０”にマスクする処理を行う。
【００６１】
本実施例において、先頭バイト位置＝最終バイト位置＋１および先頭バイト位置＞最終バイト位置＋１の場合には、シフト回路１０１、８×８スイッチ部により並び替えられたデータは入力データのワ−ド数と比較して１ワ−ド少なくなっているため、シフト回路１０１においてデータ先頭情報をデータにあわせてシフトする必要がある。
【００６２】
本実施例は、ＣＲＣ演算対象データの長さ情報のほかに先頭ワ−ドにおける先頭バイト位置情報を受信して、シフト回路１０１、Ｎ×Ｎ（８×８）スイッチ部１０２、マスク処理部１０３を制御することにより、ＣＲＣ演算対象となるデータがワ−ドの先頭バイトから始まらない場合にも、ＮバイトパラレルのＣＲＣ演算部１０４により処理可能であるという新たな効果を有する。
【００６３】
この第２の実施例を具体例を用いて説明する。
【００６４】
ＣＲＣ演算の対象となるデータを図１０に示す。データは、ペイロ−ド１１０２とＣＲＣ−３２の演算結果を格納する領域１１０３と前記１１０２と１１０３の長さ情報である１１００とフレ−ムの先頭を検出するために使用するＨＥＣ（ＨｅａｄｅｒＥｒｒｏｒＣｈｅｃｋ）１１０１で構成される。このデータは、現在Ｔ１Ｘ１．５にて標準化されているＧＦＰ（ＧｅｎｅｒｉｃＦｒａｍｉｎｇＰｒｏｃｅｄｕｒｅ）のフォ−マットである。このデータの最後にはＣＲＣ−３２が付加されておりその演算対象はペイロ−ド１１０２とＣＲＣ−３２格納領域１１０３である。先頭の長さ情報１１００とＨＥＣ１１０１の４バイトは演算処理対象ではない。このフォ−マットのデータを８バイトに展開してシフト処理、８×８スイッチ、マスク処理が行なわれる様子を図１１に示す。８バイトにパラレル展開した場合には、データ１−１−１および１−１−２は図１０の長さ情報１１００に対応し、データ１−１−３および１−１−４は図１０のＨＥＣ１１０１に対応している。１−１−１〜１−１−４まではＣＲＣ演算処理対象ではないため、前記第２の実施例における先頭バイト位置は常に“５”となる。
【００６５】
図１２を参照すると、本発明の第３の実施例によるＣＲＣ演算装置は、図１の最終バイト位置判定部１００の代りに最終バイト位置判定部１０００を含む。
【００６６】
この最終バイト位置判定部１０００は、入力データ（図１０に示されている入力データとする。）とデータ先頭情報とを基に、入力データの先頭に位置する長さ情報（ＬＥＮＧＴＨ情報）１１００（図１０）を取り出して、先頭バイト位置“５”とともに最終バイト位置の算出を行う。以後のシフト回路１０１によるシフト処理、８×８スイッチ部１０２による８×８スイッチ、マスク処理部１０３によるマスク処理、８バイトパラレルのＣＲＣ演算部１０４による演算処理等の処理は第１の実施例と同様である。
【００６７】
【発明の効果】
本発明による効果は、回路規模を削減できる点である。
【００６８】
その理由は、ＣＲＣ演算が対象となるデータの先頭に複数の“０”が追加されても演算結果が変わらない性質を利用して、可変長のデータがＮバイトパラレルで入力された場合に、最終ワ−ドの演算対象でないバイトを先頭ワ−ドに移動して“０”にすることにより、ＣＲＣ演算処理部をＮバイトの演算が可能なもののみで構成可能としたためである。
【図面の簡単な説明】
【図１】本発明の第１の実施例によるＣＲＣ演算装置のブロック図である。
【図２】図１のＣＲＣ演算装置の動作の説明に使用する図である。
【図３】図１のＣＲＣ演算装置におけるシフト回路１０１、Ｎ×Ｎ（８×８）スイッチ部１０２、及びマスク処理部１０３の具体例のブロック図である。
【図４】図１のＣＲＣ演算装置におけるＣＲＣ演算部１０４において用いられる、ＣＲＣ−３２のシリアルデータに対する演算回路のブロック図である。
【図５】図１のＣＲＣ演算装置におけるＣＲＣ演算部１０４の具体例であって、図４の演算回路において８バイトパラレルに処理を行う回路例を示したブロック図である。
【図６】図１のＣＲＣ演算装置に対する入力データの具体例を説明するための図である。
【図７】図１のＣＲＣ演算装置の動作の説明に使用する図である。
【図８】本発明の第２の実施例によるＣＲＣ演算装置のブロック図である。
【図９】図８のＣＲＣ演算装置の動作の説明に使用する図である。
【図１０】ＣＲＣ演算の対象となる具体的なデータを示す図である。
【図１１】図１０のデータを受けた場合の具体的な動作の説明に使用する図である。
【図１２】本発明の第３の実施例によるＣＲＣ演算装置のブロック図である。
【図１３】従来のＣＲＣ演算装置のブロック図である。
【符号の説明】
１００    最終バイト位置判定部
１０１    シフト回路
１０２    Ｎ×Ｎ（８×８）スイッチ部
１０３    マスク処理部
１０４    ＣＲＣ演算部
１０５    比較回路
８００    最終バイト位置判定部
１０００    最終バイト位置判定部
【図１】
0003546959.tif 000002
【図２】
0003546959.tif 000003
【図３】
0003546959.tif 000004
【図４】
0003546959.tif 000005
【図５】
0003546959.tif 000006
【図６】
0003546959.tif 000007
【図７】
0003546959.tif 000008
【図８】
0003546959.tif 000009
【図９】
0003546959.tif 000010
【図１０】
0003546959.tif 000011
【図１１】
0003546959.tif 000012
【図１２】
0003546959.tif 000013
【図１３】
0003546959.tif 000014