(57)【特許請求の範囲】
【請求項１】
可変長の入力データの先頭バイト位置情報と当該入力データ内に含まれるＬＥＮＧＴＨ情報からＣＲＣ演算範囲を計算するＣＲＣ演算範囲計算回路と、
ＣＲＣ８の生成多項式を８バイト並列化してＣＲＣ演算を行う並列ＣＲＣ計算回路と、
前記ＣＲＣ演算範囲計算回路で計算したＣＲＣ演算範囲に基づいて、前記可変長の入力データをＮバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がＮバイト未満の場合、前記先頭バイト位置より前のデータを０とし、かつ、終了バイト位置を含むデータの演算範囲がＮバイト未満の場合は、前記終了バイト位置より後のデータを０に置き換えると共に、当該置き換えたデータをＮバイトの前側にシフトするデータ順番調整回路とを備え、
前記並列ＣＲＣ計算回路は、前記データ順番調整回路からの出力に対して並列ＣＲＣ演算処理を行うことを特徴とするＣＲＣ演算回路。
【請求項２】
可変長の入力データのＣＲＣ演算範囲を計算するＣＲＣ演算範囲計算回路と、
Ｎバイト並列にＣＲＣ演算を行う並列ＣＲＣ計算回路と、
前記ＣＲＣ演算範囲計算回路で計算したＣＲＣ演算範囲に基づいて、前記可変長の入力データをＮバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がＮバイト未満の場合、前記先頭バイト位置より前のデータを０とし、かつ、終了バイト位置を含むデータの演算範囲がＮバイト未満の場合は、前記終了バイト位置より後のデータを０に置き換えると共に、当該置き換えたデータをＮバイトの前側にシフトするデータ順番調整回路と、
最終バイト位置を含むデータの演算範囲が、ＣＲＣの生成多項式で決定されるバイト数で割り切れない場合、前記並列ＣＲＣ計算回路で得られたＣＲＣ演算結果と、演算が行われないデータに対応した１サイクル前の前記ＣＲＣ演算結果とから前記最終バイト位置を含むデータのＣＲＣ演算を行う最終バイト用ＣＲＣ計算回路とを備え、
前記並列ＣＲＣ計算回路は、前記データ順番調整回路からの出力に対して並列ＣＲＣ演算処理を行い、前記最終バイト用ＣＲＣ計算回路は、前記ＣＲＣ演算結果に基づいて前記最終バイト位置を含むデータのＣＲＣ演算を行うことを特徴とするＣＲＣ演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、主として通信回線に使用される誤り検出方法に関し、特に、ＣＲＣ（Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）生成における演算を行うＣＲＣ演算回路に関する。
【背景技術】
【０００２】
Ｅｔｈｅｒｎｅｔ（登録商標）等のデータ通信などで伝送データに誤りが含まれているかを判定するための方式として、ＣＲＣがある。このＣＲＣ方式は、送信側では送信データを高次の多項式とみなして、所定次数の生成多項式により割り算を行い、その余りをＣＲＣとして送信データの後に付加し符号化を行う。受信側では、送信側と同じ生成多項式を用いて割り算を行うことで復号を行い、余りが送信側で付加された値と一致する場合は受信したデータに誤りがないと判定し、付加された値と一致しない場合は誤りがあると判定する。上記生成多項式としては、例えば次のようなものが実際のＣＲＣに使用されている。
（１）ＣＲＣ８の生成多項式
ｘ８＋ｘ７＋ｘ６＋ｘ４＋ｘ２＋１
（２）ＣＲＣ３２−ＩＥＥＥ  ８０２．３の生成多項式
ｘ３２＋ｘ２６＋ｘ２３＋ｘ２２＋ｘ１６＋ｘ１２＋ｘ１１＋ｘ１０＋ｘ８＋ｘ７＋ｘ５＋ｘ４＋ｘ２＋ｘ＋１
【０００３】
このようなＣＲＣ演算は、一般的には所定次数の生成多項式に対応する段数のシフトレジスタと排他的論理和回路で構成された回路にデータを１ビットずつ入力することで行っているが、長い入力データに対してＣＲＣ演算を短時間で行うことが要求される場合は並列ＣＲＣ計算回路に対象データを並列に入力して対象データのＣＲＣ演算を行っている。
【０００４】
例えば特許文献１に記載されているような従来のＣＲＣ演算装置においては、Ｎバイトの並列ＣＲＣ計算を行う場合に問題となるＣＲＣ演算の対象データの先頭バイト位置がＮバイトのデータの最上位にない場合とデータの終了バイト位置がＮバイトのデータの最下位にない場合においても、ＣＲＣ演算の対象となるデータの前に“０”が付加されてもＣＲＣの演算結果が変化しないことを利用している。このようなＣＲＣ演算装置では、可変長のデータをＮバイトパラレルに展開した場合に、最後のＮバイトに出現する演算対象でないバイトの数だけ、可変長のデータの先頭に“０”を付加することにより、ＣＲＣ演算部をＮバイトパラレルに対する演算ブロックのみで構成するものである。
【０００５】
即ち、このようなＣＲＣ演算装置では、ＣＲＣ演算範囲がＮバイトの倍数の長さでない場合に、ＣＲＣ演算範囲の長さをＮで割った余り以降からＮバイト目までのバイト数Ｎ−（データ長をＮで割った余り）だけ先頭に“０”を付加することにより、可変長データをＮバイトの倍数のサイズとしてＣＲＣ演算を行う。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許第３５４６９５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のＣＲＣ演算装置は、ＣＲＣ演算範囲が並列ＣＲＣ演算回路の並列数Ｎバイトの倍数の長さでない場合に、終了バイトを含むデータをＮバイトの長さに揃えるために、先頭に必ず“０”を付与する必要がある。このため、ＬＥＮＧＴＨ情報からＣＲＣ演算範囲を計算し、先頭に付与する０の個数を算出することで解決を図っている。しかしながら、この方式はＣＲＣ演算範囲を計算するためにデータの前にＬＥＮＧＴＨ情報を付与する必要があり、ＬＥＮＧＴＨ情報がデータの途中に格納されるデータ転送方式ではＣＲＣ演算開始時点のデータ先頭でＬＥＮＧＴＨ情報を知りうることができない。このため、従来のＣＲＣ演算装置では、ＬＥＮＧＴＨ情報が得られるまでデータを遅延させる記憶素子を使用することになる。従って、従来のＣＲＣ演算装置では、データのビット幅×ＬＥＮＧＴＨ情報が得られるまでの遅延段数分だけ回路規模が増大する問題点と、遅延段数分だけＣＲＣ算出が遅くなるという問題点があった。
【０００８】
この発明は、上記のような問題点を解決するためになされたもので、並列ＣＲＣ計算を行う場合の回路規模の増大を抑え、かつ、ＣＲＣ算出を速やかに開始することのできるＣＲＣ演算回路を得ることを目的とする。
【課題を解決するための手段】
【０００９】
この発明に係るＣＲＣ演算回路は、可変長の入力データの先頭バイト位置情報と当該入力データ内に含まれるＬＥＮＧＴＨ情報からＣＲＣ演算範囲を計算するＣＲＣ演算範囲計算回路と、ＣＲＣ８の生成多項式を８バイト並列化してＣＲＣ演算を行う並列ＣＲＣ計算回路と、ＣＲＣ演算範囲計算回路で計算したＣＲＣ演算範囲に基づいて、可変長の入力データをＮバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がＮバイト未満の場合、先頭バイト位置より前のデータを０とし、かつ、終了バイト位置を含むデータの演算範囲がＮバイト未満の場合は、終了バイト位置より後のデータを０に置き換えると共に、置き換えたデータをＮバイトの前側にシフトするデータ順番調整回路とを備え、並列ＣＲＣ計算回路は、データ順番調整回路からの出力に対して並列ＣＲＣ演算処理を行うものである。
【発明の効果】
【００１０】
この発明のＣＲＣ演算回路は、先頭バイト位置を含むデータの演算範囲がＮバイト未満の場合、先頭バイト位置より前のデータを０とし、かつ、終了バイト位置を含むデータの演算範囲がＮバイト未満の場合は、終了バイト位置より後のデータを０に置き換えると共に、置き換えたデータをＮバイトの前側にシフトするようにしたので、並列ＣＲＣ計算を行う場合の回路規模の増大を抑え、かつ、ＣＲＣ算出を速やかに開始することができる。
【図面の簡単な説明】
【００１１】
【図１】この発明の実施の形態１によるＣＲＣ演算回路を示す構成図である。
【図２】この発明の実施の形態１によるＣＲＣ演算回路のＣＲＣ演算対象データの構成を示す説明図である。
【図３】この発明の実施の形態１によるＣＲＣ演算回路の動作を示す説明図である。
【図４】この発明の実施の形態２によるＣＲＣ演算回路を示す構成図である。
【図５】この発明の実施の形態２によるＣＲＣ演算回路の動作を示す説明図である。
【発明を実施するための形態】
【００１２】
実施の形態１．
図１は、この発明の実施の形態１によるＣＲＣ演算回路を示す構成図である。
図示のＣＲＣ演算回路は、ＣＲＣ演算範囲計算回路１、データ順番調整回路２、並列ＣＲＣ計算回路３を備えている。ＣＲＣ演算範囲計算回路１は、可変長入力データであるデータ入力データＮバイト並列入力と、データ先頭位置信号と、先頭バイト位置情報とを入力して、ＣＲＣ演算範囲を計算し、その先頭バイト位置情報と終了バイト位置情報とを出力する回路である。尚、データ先頭位置信号は、入力データの先頭位置を示す信号であり、先頭バイト位置情報は、Ｎバイト並列における入力データの先頭バイト位置を示す情報である。データ順番調整回路２は、入力データＮバイト並列入力とデータ先頭位置信号とデータ終了位置信号とを入力し、ＣＲＣ演算範囲計算回路１で演算された先頭バイト位置情報と終了バイト位置情報とに基づいて、０の挿入と、データの並べ替えを行う回路である。並列ＣＲＣ計算回路３は、データ順番調整回路２で演算されたデータ列を入力し、ＣＲＣ演算範囲計算回路１で演算された先頭バイト位置情報と終了バイト位置情報とに基づいて、Ｎバイト並列ＣＲＣ演算を行う回路である。
【００１３】
次に、実施の形態１のＣＲＣ演算回路における各部の動作について説明する。実施の形態１では、図２に示されている可変長の入力データに対して１バイト長のＣＲＣ８を８バイト並列ＣＲＣ計算で行う場合について説明する。
ＣＲＣ演算範囲計算回路１は、先頭バイト位置情報からＣＲＣ演算の先頭バイト位置を決める処理と、データ内の一意に決められた箇所に格納されるＬＥＮＧＴＨ情報に基づいて終了バイト位置を算出してＣＲＣ演算の終了位置を決める処理とを行い、得られた先頭バイト位置情報と終了バイト位置情報とをデータ順番調整回路２と並列ＣＲＣ計算回路３とに出力する。
【００１４】
データ順番調整回路２は、図３に記載されているように、入力データに対して、０への置き換えと並べ替えを行う。尚、図３中データの入力順は、１−１，１−２，・・・，２−１，２−２，・・・，４−７，４−８の順である。図３において、（ａ）はデータ先頭バイト位置が最上位、データ終了バイト位置が最下位の場合であり、このような場合は、０への置き換えと並べ替えは実行されない。一方、（ｂ）はデータ先頭バイト位置が最上位になく、かつ、データ終了バイト位置が最下位にない場合を示している。この（ｂ）に示すように、先頭バイト位置を含むデータの演算範囲が８バイト未満の場合、例えばＫバイトとすると、先頭バイト位置より前のデータとなる（８−Ｋ）バイトのデータは０に置き換える。また、終了バイト位置を含むデータの位置の演算範囲が８バイト未満の場合、例えばＬバイトとすると、終了バイト位置より後ろのデータとなる（８−Ｌ）バイトのデータは０に置き換え、さらにＬバイト、（８−Ｌ）バイトの順で入力されたデータを（８−Ｌ）バイト、Ｌバイトの順に入れ替える。
【００１５】
並列ＣＲＣ計算回路３は、ＣＲＣ８の生成多項式ｘ８＋ｘ７＋ｘ６＋ｘ４＋ｘ２＋１を８バイト（６４ｂｉｔ）並列化した回路を使用する。ＣＲＣ演算の対象となるデータの前に“０”が付加されてもＣＲＣの演算結果が変化しないことは、一般的に知られており、データ順番調整回路２から出力されるデータを８バイト並列ＣＲＣ計算回路３に入力することでＣＲＣを算出することが可能となる。また、ＣＲＣ演算が有効なデータ範囲のみに対して演算されるように先頭バイト位置情報と終了バイト位置情報を入力する。
【００１６】
実施の形態１のＣＲＣ演算回路は、ＣＲＣ演算範囲を算出する際にデータの先頭にＬＥＮＧＴＨ情報を必要としないため、ＣＲＣ演算開始時点ではＬＥＮＧＴＨ情報が存在しないデータにおいてＬＥＮＧＴＨ情報を得るまでにデータを遅延させるための記憶素子分の回路規模を増やすことなくＣＲＣ演算を正しく行うことができる。また、Ｎバイト並列ＣＲＣ計算を行うにあたり、ＣＲＣ演算の対象となるデータの先頭バイト位置を含むデータ、最終バイト位置を含むデータがＮバイトに満たない場合においてもデータ全体をずらすことなくＣＲＣ演算を行うことができる。
【００１７】
以上のように、実施の形態１のＣＲＣ演算回路によれば、可変長の入力データのＣＲＣ演算範囲を計算するＣＲＣ演算範囲計算回路と、Ｎバイト並列にＣＲＣ演算を行う並列ＣＲＣ計算回路と、ＣＲＣ演算範囲計算回路で計算したＣＲＣ演算範囲に基づいて、可変長の入力データをＮバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がＮバイト未満の場合、先頭バイト位置より前のデータを０とし、かつ、終了バイト位置を含むデータの演算範囲がＮバイト未満の場合は、終了バイト位置より後のデータを０に置き換えると共に、置き換えたデータをＮバイトの前側にシフトするデータ順番調整回路とを備え、並列ＣＲＣ計算回路は、データ順番調整回路からの出力に対して並列ＣＲＣ演算処理を行うようにしたので、回路規模の増大を抑え、かつ、ＣＲＣ算出を速やかに開始することができる。
【００１８】
また、実施の形態１のＣＲＣ演算回路によれば、ＣＲＣ演算範囲計算回路は、入力データの先頭バイト位置情報と入力データ内に含まれるＬＥＮＧＴＨ情報からＣＲＣ演算範囲を計算するようにしたので、データの先頭にＬＥＮＧＴＨ情報がないデータ転送方式においても、そのＬＥＮＧＴＨ情報が得られるまでデータを遅延させる必要がなく、記憶素子による回路規模の増加と遅延段数を抑えることができる。
【００１９】
また、実施の形態１のＣＲＣ演算回路によれば、並列ＣＲＣ計算回路は、Ｎバイト並列ＣＲＣ計算を行うにあたり、ＣＲＣ演算の対象となるデータの前に０が付加されてもＣＲＣの演算結果が変化しないことを利用するようにしたので、ＣＲＣ演算の対象となるデータの先頭バイト位置を含むデータ、最終バイト位置を含むデータがＮバイトに満たない場合においてもデータ全体をずらすことなくＣＲＣ演算を行うことができる。
【００２０】
実施の形態２．
実施の形態１では、可変長の入力データに対して１バイト長のＣＲＣ８を８バイト並列ＣＲＣ計算で行う場合について説明したが、実施の形態２では、図４に示すように、４バイト長のＣＲＣ３２を８バイト並列ＣＲＣ計算で行う場合について説明する。
【００２１】
図４に示す実施の形態２のＣＲＣ演算回路は、実施の形態１と同様に、ＣＲＣ演算範囲計算回路１、データ順番調整回路２、並列ＣＲＣ計算回路３を備えると共に、最終バイト用ＣＲＣ計算回路４とフリップフロップ５とを備える。最終バイト用ＣＲＣ計算回路４は、最終バイト位置を含むデータの演算範囲が、ＣＲＣの生成多項式で決定されるバイト数で割り切れない場合、並列ＣＲＣ計算回路３で得られたＣＲＣ演算結果と、演算が行われないデータに対応した１サイクル前のＣＲＣ演算結果とから最終バイト位置を含むデータのＣＲＣ演算を行う回路である。また、フリップフロップ５は、並列ＣＲＣ計算回路３におけるＣＲＣ演算結果を保持するフリップフロップである。
【００２２】
次に実施の形態２の動作について説明する。実施の形態２においてもデータ順番調整回路２により図３に示すデータの入れ替えを行う。並列ＣＲＣ計算回路３は前記出力データに対してＣＲＣ演算を行い、８バイト長のＣＲＣを得ることができる。この並列ＣＲＣ計算回路３の構成はＣＲＣ３２の生成多項式ｘ３２＋ｘ２６＋ｘ２３＋ｘ２２＋ｘ１６＋ｘ１２＋ｘ１１＋ｘ１０＋ｘ８＋ｘ７＋ｘ５＋ｘ４＋ｘ２＋ｘ＋１を８バイト（６４ｂｉｔ）並列化した回路を使用する。ＣＲＣ演算の方法は、実施の形態１と同様である。
【００２３】
しかし、４バイト長のＣＲＣ３２を８バイト長の並列ＣＲＣ計算回路３で計算する場合は、最終バイト位置を含むデータの演算範囲が４バイトで割り切れない場合に実施の形態１と同様のデータを置き換えのみで演算を実施すると、最終バイト位置を含むデータについては４バイトで割り切れない部分が計算されない。このため、実施の形態２では、最終バイト用ＣＲＣ計算回路４により図５に記載されているように割り切れなかった余りの部分についてＣＲＣ演算を行う。図５において、（ａ）は余りの部分が３バイトの場合であり、（ｂ）は２バイト、（ｃ）は１バイトの場合を示している。また、図５において、Ｃ３n，Ｃ２n，Ｃ１n，Ｃ０nは最終バイトデータが含まれるデータの１サイクル前のＣＲＣを示し、Ｃ３n+1，Ｃ２n+1，Ｃ１n+1，Ｃ０n+1は、最終バイトデータが含まれるデータから算出したＣＲＣ、Ｃ′３n+1，Ｃ′２n+1，Ｃ′１n+1，Ｃ′０n+1は、最終バイト用ＣＲＣ計算回路４によるＣＲＣを示している。
【００２４】
図５（ａ）に記載のように、最終バイト位置を含むデータが３バイトの場合は、並列ＣＲＣ計算回路３でＣ０n分との計算が行われないため、並列ＣＲＣ計算回路３で得られたＣ３n+1と、計算が行われなかったＣ０nとの排他的論理和をとることでＣＲＣを正しく得ることができる。図５（ｂ）（ｃ）に示す最終バイト位置を含むデータが２バイト、１バイトの場合のときも、並列ＣＲＣ計算回路３で計算されなかった分を、最終バイト用ＣＲＣ計算回路４で計算する。上記以外の場合については、並列ＣＲＣ計算回路３のＣＲＣ演算結果をそのまま出力する。
【００２５】
実施の形態２のＣＲＣ演算回路は、従来方式のようにデータ全体をずらすことなくＣＲＣ演算を正しく行うことができるため、データ全体をずらすための記憶素子は必要としない。
【００２６】
尚、上記例では、４バイト長のＣＲＣ３２を８バイト並列ＣＲＣ計算する方法について説明しているが、４バイト長のＣＲＣ３２を１６バイト並列ＣＲＣ計算する場合など、ＣＲＣの生成多項式より入力データの並列化数が多いときは同様の考え方でＣＲＣ演算を正しく行うことができる。
【００２７】
また、上記実施の形態１、２は、ハードウェアで実現することを目的としているが、ソフトウェアでＣＲＣを計算する場合も同様の考え方でＣＲＣ演算を正しく行うことができる。
【００２８】
以上のように、実施の形態２のＣＲＣ演算回路によれば、最終バイト位置を含むデータの演算範囲が、ＣＲＣの生成多項式で決定されるバイト数で割り切れない場合、並列ＣＲＣ計算回路で得られたＣＲＣ演算結果と、演算が行われないデータに対応した１サイクル前のＣＲＣ演算結果とから最終バイト位置を含むデータのＣＲＣ演算を行う最終バイト用ＣＲＣ計算回路を備えたので、ＣＲＣの生成多項式より入力データの並列化数が多い場合でも実施の形態１のＣＲＣ演算回路と同様に対応することができる。
【符号の説明】
【００２９】
１  ＣＲＣ演算範囲計算回路、２  データ順番調整回路、３  並列ＣＲＣ計算回路、４  最終バイト用ＣＲＣ計算回路、５  フリップフロップ。
【図１】
0005550413.tif 000002
【図２】
0005550413.tif 000003
【図３】
0005550413.tif 000004
【図４】
0005550413.tif 000005
【図５】
0005550413.tif 000006