(57)【特許請求の範囲】
【請求項１】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法であって、
前記データの所定ビット数ごとに第１の生成多項式により演算を行う第１の演算処理と、
前記データの所定ビット数ごとに前記第１の生成多項式と同一の又は異なる少なくとも１個の第２の生成多項式により演算を行う第２の演算処理と、
前記データの所定ビット数と、前記第１の演算処理で得られた演算結果と、前記第２の演算処理の途中で得られる演算結果とについて、前記第２の生成多項式により演算を行う第３の演算処理とを有することを特徴とする巡回冗長検査演算方法。
【請求項２】
前記第３の演算処理では、前記データの所定ビット数を下位ビットとし、前記第１の演算処理で得られた演算結果を上位ビットとして前記演算を行うことを特徴とする請求項１記載の巡回冗長検査演算方法。
【請求項３】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法であって、前記データの３２ビットごとに３２次の生成多項式により演算を行う第１の演算処理と、
前記データの３２ビットごとに１６次の生成多項式により演算を行う第２の演算処理と、
前記データの３２ビットと、前記第１の演算処理で得られた３２ビットの演算結果と、前記第２の演算処理の途中で得られる１６ビットの演算結果とについて、前記１６次の生成多項式により演算を行う第３の演算処理とを有することを特徴とする巡回冗長検査演算方法。
【請求項４】
前記第３の演算処理では、前記データの３２ビットを下位ビットとし、前記第１の演算処理で得られた前記３２ビットの演算結果を上位ビットとする６４ビットごとに前記演算を行うことを特徴とする請求項３記載の巡回冗長検査演算方法。
【請求項５】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法であって、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第１の演算処理と、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第２の演算処理と、
前記データの所定ビット数と、前記第１の演算処理で得られた演算結果と、前記第２の演算処理の途中で得られる演算結果とについて、前記生成多項式により演算を行う第３の演算処理と、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第４の演算処理と、
前記データの所定ビット数と、前記第１の演算処理で得られた演算結果と、前記第２の演算処理の途中で得られる演算結果と、前記第４の演算処理の途中で得られる演算結果とについて前記生成多項式により演算を行う第５の演算処理とを有することを特徴とする巡回冗長検査演算方法。
【請求項６】
前記第３の演算処理では、前記データの３２ビットを下位ビットとし、前記第１の演算処理で得られた演算結果を上位ビットとする４８ビットごとに前記演算を行い、前記第５の演算処理では、前記データの３２ビットを下位ビットとし、前記第１の演算処理で得られた演算結果を中位ビットとし、前記第２の演算処理の途中で得られる演算結果を上位ビットとする６４ビットごとに前記演算を行うことを特徴とする請求項５記載の巡回冗長検査演算方法。
【請求項７】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路であって、
前記データの所定ビット数ごとに第１の生成多項式により演算を行う第１の演算部と、
前記データの所定ビット数ごとに前記第１の生成多項式と同一の又は異なる少なくとも１個の第２の生成多項式により演算を行う第２の演算部と、
前記データの所定ビット数と、前記第１の演算部の演算で得られた演算結果と、前記第２の演算部の演算途中で得られる演算結果とについて、前記第２の生成多項式により演算を行う第３の演算部とを有することを特徴とする巡回冗長検査演算回路。
【請求項８】
前記データの所定ビット数を下位ビットとし、前記第１の演算部の演算で得られた演算結果を上位ビットとして結合して前記第３の演算部に供給するデータ結合部を有することを特徴とする請求項７記載の巡回冗長検査演算回路。
【請求項９】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路であって、
前記データの３２ビットごとに３２次の生成多項式により演算を行う第１の演算部と、
前記データの３２ビットごとに１６次の生成多項式により演算を行う第２の演算部と、
前記データの３２ビットと、前記第１の演算部の演算で得られた３２ビットの演算結果と、前記第２の演算部の演算途中で得られる１６ビットの演算結果とについて、前記１６次の生成多項式により演算を行う第３の演算部とを有することを特徴とする巡回冗長検査演算回路。
【請求項１０】
前記データの３２ビットを下位ビットとし、前記第１の演算部の演算で得られた前記３２ビットの演算結果を上位ビットとして結合して前記第３の演算部に供給するデータ結合部を有することを特徴とする請求項９記載の巡回冗長検査演算回路。
【請求項１１】
伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、前記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路であって、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第１の演算部と、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第２の演算部と、
前記データの所定ビット数と、前記第１の演算部の演算で得られた演算結果と、前記第２の演算部の演算途中で得られる演算結果とについて、前記生成多項式により演算を行う第３の演算部と、
前記データの所定ビット数ごとに前記生成多項式により演算を行う第４の演算部と、
前記データの所定ビット数と、前記第１の演算部の演算で得られた演算結果と、前記第２の演算部の演算途中で得られる演算結果と、前記第４の演算部の演算途中で得られる演算結果とについて前記生成多項式により演算を行う第５の演算部とを有することを特徴とする巡回冗長検査演算回路。
【請求項１２】
前記データの３２ビットを下位ビットとし、前記第１の演算部の演算で得られた演算結果を上位ビットとして結合して前記第３の演算部に供給する第１のデータ結合部と、前記データの３２ビットを下位ビットとし、前記第１の演算部の演算で得られた演算結果を中位ビットとし、前記第２の演算部の演算途中で得られる演算結果を上位ビットとして結合して前記第５の演算部に供給する第２のデータ結合部とを有することを特徴とする請求項１１記載の巡回冗長検査演算回路。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、巡回冗長検査（ＣＲＣ：Cyclic Redundancy Check）演算方法及び巡回冗長検査演算回路に関し、特に、異なる通信プロトコルを介してデータ通信を行う場合に用いて好適な巡回冗長検査演算方法及び巡回冗長検査演算回路に関する。
【０００２】
【従来の技術】
図１５は、従来のデータ通信システムの構成例を示すブロック図である。この例のデータ通信システムは、パーソナルコンピュータ等の情報処理装置１と、ハードディスク３を備えたサーバ２とがイントラネットやインターネット等のネットワーク４を介して接続されて構成されている。そして、情報処理装置１とサーバ２との間で行われるデータ通信の通信プロトコルとしては、一般に、ＴＣＰ／ＩＰ（Transmission Control Protocol/Internet Protocol）（以下、一般プロトコルと呼ぶ）が用いられている。一方、サーバ２とハードディスク３との間で行われるデータ通信の通信プロトコルとしては、最近では、次世代のサーバ向けインターフェイスであり、データ伝送速度が５００Ｍバイト／秒以上であるInfiniBand（商標名）等の高速な通信プロトコル（以下、高速プロトコルと呼ぶ）が用いられている。
【０００３】
次に、上記構成のデータ通信システムにおいて、情報処理装置１からネットワーク４を介してサーバ２へアクセスし、ハードディスク３に記憶されているデータを読み出す場合の動作について説明する。まず、サーバ２は、情報処理装置１からアクセスされ、ハードディスク３に記憶されているあるデータの読み出しが要求されると、ハードディスク３の記憶領域をサーチし、要求されたデータを探し出す。これにより、ハードディスク３は、要求されたデータを読み出し、ケーブル５を介してサーバ２へ伝送する。この際、データは、図１６に示すデータ・フォーマットに従って構成された通信データに組み込まれ、上記高速プロトコルでハードディスク３からサーバ２へ４バイト（３２ビット）ずつ伝送されるものとする。通信データは、図１６に示すように、ヘッダと、データと、演算結果ＣＲＣ３２と、演算結果ＣＲＣ１６とから構成されている。ここで、演算結果ＣＲＣ３２とは、伝送されるデータを３２ビットずつのビット列に分割し、データ通信における誤り検出方式の１つである巡回冗長検査（ＣＲＣ：Cyclic Redundancy Check）方式により、式（１）に示す３２次の生成多項式を用いて誤り検出のための演算を行った結果をいう。同様に、演算結果ＣＲＣ１６とは、伝送されるデータを１６ビットずつのビット列に分割し、ＣＲＣ方式により、式（２）に示す１６次の生成多項式を用いて誤り検出のための演算を行った結果をいう。以下では、式（１）に示す３２次の生成多項式を用いて誤り検出のために行う演算をＣＲＣ３２演算と呼び、式（２）に示す１６次の生成多項式を用いて誤り検出のために行う演算をＣＲＣ１６演算と呼ぶ。
【数１】
Ｇ（Ｘ）＝Ｘ３２＋Ｘ２６＋Ｘ２３＋Ｘ２２＋Ｘ１６＋Ｘ１２
＋Ｘ１１＋Ｘ８＋Ｘ７＋Ｘ５＋Ｘ４＋Ｘ２＋Ｘ１＋１・・・（１）
【数２】
Ｇ（Ｘ）＝Ｘ１６＋Ｘ１２＋Ｘ３＋Ｘ１＋１・・・（２）
【０００４】
この通信データは、図１７に示すように、ヘッダ及びデータがｎ個（ｎは自然数）の１バイトずつのデータブロックＤＢ０〜ＤＢｎに分割され、演算結果ＣＲＣ３２が４個の１バイトずつの演算結果ブロックＣＲＣ３２０〜ＣＲＣ３２３に分割され、演算結果ＣＲＣ１６が２個の１バイトずつの演算結果ブロックＣＲＣ１６０及びＣＲＣ１６１に分割される。ＣＲＣ３２演算は、ヘッダ及びデータについて行われる。一方、ＣＲＣ１６演算は、ヘッダ、データ及び演算結果ＣＲＣ３２について行われる。すなわち、ＣＲＣ１６演算においては、演算結果ＣＲＣ３２もヘッダやデータと同様に見なされるのである。
【０００５】
次に、サーバ２は、ハードディスク３から通信データが伝送されると、通信データから上記高速プロトコル専用のヘッダ及び演算結果ＣＲＣ１６を削除したものを新たに通信データとして、ネットワーク４を介して情報処理装置１へ伝送する。
上記したように、この例の通信システムにおいては、ハードディスク３からサーバ２へ通信データを伝送する際にＣＲＣ３２演算を行って通信データに演算結果ブロックＣＲＣ３２０〜ＣＲＣ３２３を付加している。これにより、サーバ２から情報処理装置１へ通信データを伝送する際には、ＣＲＣ演算を行う必要がなく、短時間で通信データの伝送を行うことができる。
【０００６】
次に、上記したハードディスク３からサーバ２へ通信データを伝送する際に、ＣＲＣ演算を行う従来のＣＲＣ演算回路の構成及び動作について説明する。図１８は、従来のＣＲＣ演算回路の構成を示すブロック図である。この例のＣＲＣ演算回路は、データ入力部１１と、ラッチ１２〜１６と、セレクタ１７及び１８と、演算部１９及び２０と、データ出力部２１とから構成されている。
データ入力部１１は、ハードディスク３の所定の記憶領域から読み出される３２ビットずつの入力データＤ０に対して波形整形などを施し、出力データＤ１として後段の回路要素に入力するためのインターフェイスである。ラッチ１２及び１３は、各々３２ビットのフリップフロップからなり、データ処理のタイミングを調整するために設けられている。ラッチ１２は、データ入力部１１の出力データＤ１を外部から供給されるクロック１個分だけ保持（ラッチ）し、出力データＤ２として出力する。ラッチ１３は、ラッチ１２の出力データＤ２をクロック１個分だけラッチし、出力データＤ４として出力する。ラッチ１４は、３２ビットのフリップフロップからなり、演算部２０へのデータ入力のタイミングを調整するために、データ入力部１１の出力データＤ１をクロック１個分だけラッチし、出力データＤ２として出力する。
セレクタ１７は、ラッチ１４から出力される３２ビットの出力データＤ２か、あるいはラッチ１５から出力される３２ビットの出力データＤ５のいずれか一方を選択し、出力データＤ３として出力する。
【０００７】
演算部１９は、データ入力部１１の出力データＤ１についてラッチ１５の出力データＤ５を用いてＣＲＣ３２演算を行う。演算部２０は、セレクタ１７の出力データＤ３についてラッチ１６の出力データＤ６を用いてＣＲＣ１６演算を行う。ラッチ１５は、３２ビットのフリップフロップからなり、演算部１９から出力される３２ビットの演算結果をクロック１個分だけラッチし、出力データＤ５として出力する。ラッチ１６は、１６ビットのフリップフロップからなり、演算部２０から出力される１６ビットの演算結果をクロック１個分だけラッチし、出力データＤ６として出力する。セレクタ１８は、ラッチ１３から出力される３２ビットの出力データＤ４、ラッチ１５から出力される３２ビットの出力データＤ５、あるいはラッチ１６から出力される１６ビットの出力データＤ６のいずれかを選択し、出力データＤ７として出力する。データ出力部２１は、セレクタ１８から出力される３２ビットの出力データＤ７に対して波形整形などを施し、出力データＤ８として後段の回路要素へ供給するためのインターフェイスである。
【０００８】
次に、演算部１９及び２０の詳細な構成について説明する。
この例の演算部１９は、以下に示すＣＲＣ３２演算と同様の演算結果ＣＲＣ３２を生成する。ここで、上記した入力データＤ１を構成する３２ビットのビット列ｄ３１,ｄ３０，…，ｄ１，ｄ０を数値とみなし、式（３）に示す多項式Ｐ(Ｘ)で表す。
【数３】
Ｐ（Ｘ）＝ｄ３１Ｘ３１＋ｄ３０Ｘ３０＋…＋ｄ１Ｘ＋ｄ０・・・（３）
式（３）において、「＋」は、剰余２（Modulo ２）の加算を表す。「＋」の意味については、上記した式（１）及び（２）並びに以下に示す式においても同様である。また、剰余２とは、２進数値０と１とで巡回して桁上げ及び桁下げがない演算をいい、式（４）〜式（１１）に示すように定義される。
０＋０＝０・・・（４）
０＋１＝１・・・（５）
１＋０＝１・・・（６）
１＋１＝０・・・（７）
０−０＝０・・・（８）
０−１＝１・・・（９）
１−０＝１・・・（１０）
１−１＝０・・・（１１）
すなわち、剰余２の演算は、論理回路における排他的論理和演算と同じ結果となる。
【０００９】
そして、この入力データＰ（Ｘ）に式（１）に示す３２次の生成多項式Ｇ（Ｘ）の最高次の項Ｘ３２を乗算した結果を式（１２）に示すＱ（Ｘ）とする。次に、Ｑ（Ｘ）を生成多項式Ｇ（Ｘ）で除算し、その剰余を式（１３）に示すＲ（Ｘ）とする。式（１３）において、ｃ３１,ｃ３０，…，ｃ１，ｃ０は０又は１である。
【数４】
Ｑ（Ｘ）＝ｄ３１Ｘ６３＋ｄ３０Ｘ６２＋…＋ｄ１Ｘ３３＋ｄ０Ｘ３２・・・（１２）
【数５】
Ｒ（Ｘ）＝ｃ３１Ｘ３１＋ｃ３０Ｘ３０＋…＋ｃ１Ｘ＋ｃ０・・・（１３）
この剰余Ｒ（Ｘ）を構成するｃ３１,ｃ３０，…，ｃ１，ｃ０が演算結果ＣＲＣ３２のサイクリック・チェック・ビットであり、ＣＲＣ符号と呼ばれる。さらに、次に入力される入力データＰ'（Ｘ）に今回得られたＣＲＣ符号を乗算して新たなＱ（Ｘ）とする。この新たなＱ（Ｘ）を生成多項式Ｇ（Ｘ）で除算すると、新たなＣＲＣ符号が得られる。以上説明した処理をすべての入力データＰ（Ｘ）に繰り返し（巡回）行うと、演算結果ＣＲＣ３２が得られる。
以上説明したように、ＣＲＣ３２演算においては、Ｑ（Ｘ）を生成多項式Ｇ（Ｘ）で除算する必要がある。しかし、この除算をハードウェアにより単純に実現しようとすると、高速な処理ができないことや回路規模が大きくなることなどから、一般には、図１９に示す演算部１９により実現する。演算部１９は、イクスクルーシブオアゲート（ＥＯＲ）２３１〜２３１４と、ディレイ・フリップフロップ（ＦＦ）２４１〜２４３２とから構成されている。なお、この構成については、公知であるので、その説明を省略する。図１９に示す演算部１９に３２ビットの入力データＰ（Ｘ）と同じ３２ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２４３２〜２４１の出力データＣ３１〜Ｃ００がＣＲＣ３２演算の剰余ｃ３１,ｃ３０，…，ｃ１，ｃ０を表している。ここで、図２０及び図２１に出力データＣ３１〜Ｃ００の演算式を示す。図２０及び図２１において、Ｒ３１〜Ｒ００はＦＦ２４３２〜ＦＦ２４１の初期値であり、Ｄ３１〜Ｄ００は上記した入力データＰ（Ｘ）を構成するビット列ｄ３１,ｄ３０，…，ｄ１，ｄ０に対応しており、「・」は排他的論理和演算を意味している。
【００１０】
次に、図２２は、演算部２０の構成を示すブロック図である。この例の演算部２０は、ＥＯＲ２６１〜２６４と、ＦＦ２７１〜２７１６とから構成されている。なお、この構成については、公知であるので、その説明を省略する。この例の演算部２０は、ＣＲＣ１６演算と同様の演算結果ＣＲＣ１６を生成する。なお、ＣＲＣ１６演算の詳細については、生成多項式が異なる点を除けば上記したＣＲＣ３２演算と略同様であるので、その説明を省略する。
図２３に示す演算部２０に３２ビットの入力データＰ（Ｘ）と同じ３２ビット分のデータをシフトするためにクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００がＣＲＣ１６演算の剰余を表している。ここで、図２３に出力データＣ１５〜Ｃ００の演算式を示す。図２３において、Ｒ１５〜Ｒ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｄ３１〜Ｄ００は上記した入力データＰ（Ｘ）を構成するビット列ｄ３１,ｄ３０，…，ｄ１，ｄ０に対応しており、「・」は排他的論理和演算を意味している。
【００１１】
次に、上記構成のＣＲＣ演算回路の動作について、図２４に示すタイミング・チャートを参照して説明する。まず、説明を簡単にするために、入力データＤ０は、図２４に示すように、バイトデータＢＤ０〜ＢＤ３からなるものとする。バイトデータＢＤ０は各１バイトのデータブロックＤＢ０〜ＤＢ３からなり、バイトデータＢＤ１は各１バイトのデータブロックＤＢ４〜ＤＢ７からなる。また、バイトデータＢＤ２は各１バイトのデータブロックＤＢ８〜ＤＢ１１からなり、バイトデータＢＤ３は各１バイトのデータブロックＤＢ１２及びＤＢ１３からなる。
まず、入力データＤ０が、図２４（１）に示すように、第１の周期＃１から図示せぬクロックに同期して外部から順次ＣＲＣ演算回路に供給されると、データ入力部１１は、入力データＤ０に対して波形整形など施し、出力データＤ１としてラッチ１２及び１４並びに演算部１９へ順次供給する。ラッチ１２及び１４は、データ入力部１１の出力データＤ１を外部から供給されるクロック１個分だけラッチし、図２４（３）に示すように、第２の周期＃２から出力データＤ２として順次出力する。
【００１２】
一方、演算部１９は、第１の周期＃１において、データ入力部１１の出力データＤ１、今の場合、バイトデータＢＤ０について、ラッチ１５の出力データＤ５、今の場合、ラッチ１５の初期値を用いてＣＲＣ３２演算を行い、演算結果ＣＲ００を生成する。なお、ラッチ１５には、初期値として、「０」が予め設定されている。これにより、ラッチ１５は、演算部１９から出力される演算結果ＣＲ００をクロック１個分だけラッチし、図２４（２）に示すように、第２の周期＃２に出力データＤ５として出力する。次に、演算部１９は、第２の周期＃２において、データ入力部１１の出力データＤ１、今の場合、バイトデータＢＤ１について、ラッチ１５の出力データＤ５、今の場合、演算結果ＣＲ００を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０１を生成する。これにより、ラッチ１５は、演算結果ＣＲ０１をクロック１個分だけラッチし、図２４（２）に示すように、第３の周期＃３に出力データＤ５として出力する。
【００１３】
同様に、演算部１９は、第３の周期＃３において、データ入力部１１の出力データＤ１、今の場合、バイトデータＢＤ２について、ラッチ１５の出力データＤ５、今の場合、演算結果ＣＲ０１を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０２を生成する。これにより、ラッチ１５は、演算結果ＣＲ０２をクロック１個分だけラッチし、図２４（２）に示すように、第４の周期＃４に出力データＤ５として出力する。次に、演算部１９は、第４の周期＃４において、データ入力部１１の出力データＤ１、今の場合、バイトデータＢＤ３について、ラッチ１５の出力データＤ５、今の場合、演算結果ＣＲ０２を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０３を生成する。これにより、ラッチ１５は、演算結果ＣＲ０３をクロック１個分だけラッチし、図２４（２）に示すように、第５の周期＃５に出力データＤ５として出力する。この演算結果ＣＲ０３が演算結果ＣＲＣ３２である。この演算結果ＣＲＣ３２は、上記したように、４個の演算結果ブロックＣＲＣ３２０〜ＣＲＣ３２３から構成されている。
【００１４】
これにより、セレクタ１７は、図２４（４）に示すように、第２〜第４の周期＃２〜＃４においては、ラッチ１４から出力される３２ビットの出力データＤ２、今の場合、バイトデータＢＤ０〜ＢＤ２を選択して出力データＤ３として出力する。また、セレクタ１７は、図２４（４）に示すように、第５の周期＃５においては、バイトデータＢＤ３を構成するデータブロックＤＢ１２及びＤＢ１３と、演算結果ＣＲＣ３２を構成する演算結果ブロックＣＲＣ３２０及びＣＲＣ３２１とから新たなバイトデータＢＤ'３を生成して出力データＤ３として出力する。さらに、セレクタ１７は、図２４（４）に示すように、第６の周期＃６においては、演算結果ＣＲＣ３２を構成する演算結果ブロックＣＲＣ３２２及びＣＲＣ３２３を新たなバイトデータＢＤ４とし、出力データＤ３として出力する。
【００１５】
したがって、演算部２０は、第２の周期＃２において、セレクタ１７の出力データＤ３、今の場合、バイトデータＢＤ０について、ラッチ１６の出力データＤ６、今の場合、ラッチ１６の初期値を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１０を生成する。なお、ラッチ１６には、初期値として、「０」が予め設定されている。これにより、ラッチ１６は、演算部２０から出力される演算結果ＣＲ１０をクロック１個分だけラッチし、図２４（５）に示すように、第３の周期＃３に出力データＤ６として出力する。次に、演算部２０は、第３の周期＃３において、セレクタ１７の出力データＤ３、今の場合、バイトデータＢＤ１について、ラッチ１６の出力データＤ６、今の場合、演算結果ＣＲ１０を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１１を生成する。これにより、ラッチ１６は、演算結果ＣＲ１１をクロック１個分だけラッチし、図２４（５）に示すように、第４の周期＃４に出力データＤ６として出力する。
【００１６】
同様に、演算部２０は、第４の周期＃４において、セレクタ１７の出力データＤ３、今の場合、バイトデータＢＤ２について、ラッチ１６の出力データＤ６、今の場合、演算結果ＣＲ１１を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１２を生成する。これにより、ラッチ１６は、演算結果ＣＲ１２をクロック１個分だけラッチし、図２４（５）に示すように、第５の周期＃５に出力データＤ６として出力する。次に、演算部２０は、第５の周期＃５において、セレクタ１７の出力データＤ３、今の場合、バイトデータＢＤ'３、すなわち、データブロックＤＢ１２及びＤＢ１３並びに演算結果ブロックＣＲＣ３２０及びＣＲＣ３２１について、ラッチ１６の出力データＤ６、今の場合、演算結果ＣＲ１２を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１３を生成する。これにより、ラッチ１６は、演算結果ＣＲ１３をクロック１個分だけラッチし、図２４（５）に示すように、第６の周期＃６に出力データＤ６として出力する。次に、演算部２０は、第６の周期＃６において、セレクタ１７の出力データＤ３、今の場合、バイトデータＢＤ４、すなわち、演算結果ブロックＣＲＣ３２２及びＣＲＣ３２３について、ラッチ１６の出力データＤ６、今の場合、演算結果ＣＲ１３を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１４を生成する。これにより、ラッチ１６は、演算結果ＣＲ１４をクロック１個分だけラッチし、図２４（５）に示すように、第７の周期＃７に出力データＤ６として出力する。この演算結果ＣＲ１４が演算結果ＣＲＣ１６である。この演算結果ＣＲＣ１６は、上記したように、２個の演算結果ブロックＣＲＣ１６０及びＣＲＣ１６１から構成されている。
【００１７】
これにより、セレクタ１８は、第３〜第５の周期＃３〜＃５においては、ラッチ１３から出力される３２ビットの出力データＤ２、今の場合、バイトデータＢＤ０〜ＢＤ２を選択して出力データＤ７として出力する。また、セレクタ１８は、第６の周期＃６においては、データブロックＤＢ１２及びＤＢ１３並びに演算結果ブロックＣＲＣ３２０及びＣＲＣ３２１とからなるバイトデータＢＤ'３を出力データＤ７として出力する。さらに、セレクタ１８は、第７の周期＃７においては、演算結果ＣＲＣ３２を構成する演算結果ブロックＣＲＣ３２２及びＣＲＣ３２３と、演算結果ＣＲＣ１６を構成する演算結果ブロックＣＲＣ１６０及びＣＲＣ１６１とから新たなバイトデータＢＤ'４を生成して出力データＤ７として出力する。したがって、データ出力部２１は、図２４（６）に示すように、セレクタ１８から出力される３２ビットの出力データＤ７に対して波形整形など施し、出力データＤ８として後段の回路要素へ供給する。
【００１８】
【発明が解決しようとする課題】
ところで、データ通信においては、データを正確に相手方に伝送するためには、データ伝送の最初から最後まで（パケット通信においては１パケット間）、データを連続して伝送しなければならない。このため、上記した従来のＣＲＣ演算回路においては、図２４に示すように、伝送すべきデータとＣＲＣ演算結果とが途切れなく伝送されるように、伝送されるべきデータの最後にＣＲＣ演算結果を付加している。
また、上記した従来のＣＲＣ演算回路においては、ＣＲＣ１６演算をする際にはＣＲＣ３２演算の演算結果ＣＲＣ３２を用いているため、データ入力部１１の出力データＤ１の最後に演算結果ＣＲＣ３２を付加して演算部２０に供給する必要がある。
【００１９】
ところが、図２４（１）に示すように、３２ビットずつ供給されるデータ入力部１１の出力データＤ１の最後が２バイトのバイトデータＢＤ３である場合には、以下に示す不都合が発生する。
すなわち、演算結果ＣＲＣ３２は、各１バイトで合計４個の演算結果ブロックＣＲＣ３２０〜ＣＲＣ３２３から構成されているので、前半の演算結果ブロックＣＲＣ３２１及びＣＲＣ３２２については、図２４（４）に示すように、データブロックＢＤ１２及びＢＤ１３に付加してバイトデータＢＤ'３として第５の周期＃５に演算部２０へ伝送することができる。一方、演算結果ＣＲＣ３２のうち、後半の演算結果ブロックＣＲＣ３２２及びＣＲＣ３２３については、図２４（４）に示すように、新たにバイトデータＢＤ４を構成し、第６の周期＃６に演算部２０へ伝送しなければならない。つまり、この場合、本来のＣＲＣ１６演算に直接関わらないデータ伝送のためだけに１クロック分だけ余計に時間がかかることになる。このため、ラッチ１４は、この１クロック分だけ余計に時間がかかるデータ伝送と、演算部２０におけるＣＲＣ１６演算とのタイミングを調整するために、データ入力部１１の出力データＤ１をクロック１個分だけラッチしているのである。
さらに、ＣＲＣ演算を行うためには、少なくともクロック１個分の時間は必要であり、そのために、演算部１９及び２０の各後段にはラッチ１５及び１６が設けられている。
したがって、データ入力部１１に入力データＤ０が入力されてからデータ出力部２１から出力データＤ８が出力されるまでにクロック２個分の遅延が生じてしまう。そこで、上記した従来のＣＲＣ演算回路においては、データ入力部１１とセレクタ１８との間に、ラッチ１４に対応してラッチ１２を、ラッチ１５及び１６に対応してラッチ１３を設けているのである。
これにより、上記した従来のＣＲＣ演算回路は、近年のＣＰＵ（中央処理装置）の動作速度の高速化に伴うデータ通信における信号処理の高速化への要求に十分に応えることができないという問題があった。
以上説明した不都合は、ＣＲＣ演算を複数回行ってデータ伝送を行うデータ通信において同様に発生するものである。そして、データ伝送速度を高速化したり、バス幅を広げたりすることだけでは上記データ通信における信号処理の高速化への要求には十分に対応できず、信号処理回路内部における処理速度の高速化が必要不可欠である。
【００２０】
この発明は、上述の事情に鑑みてなされたもので、高速に行うことができる巡回冗長検査演算方法及び巡回冗長検査演算回路を提供することを目的としている。
【００２１】
【課題を解決するための手段】
上記課題を解決するために、請求項１記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法に係り、上記データの所定ビット数ごとに第１の生成多項式により演算を行う第１の演算処理と、上記データの所定ビット数ごとに上記第１の生成多項式と同一の又は異なる少なくとも１個の第２の生成多項式により演算を行う第２の演算処理と、上記データの所定ビット数と、上記第１の演算処理で得られた演算結果と、上記第２の演算処理の途中で得られる演算結果とについて、上記第２の生成多項式により演算を行う第３の演算処理とを有することを特徴としている。
【００２２】
また、請求項２記載の発明は、請求項１記載の巡回冗長検査演算方法に係り、上記第３の演算処理では、上記データの所定ビット数を下位ビットとし、上記第１の演算処理で得られた演算結果を上位ビットとして上記演算を行うことを特徴としている。
【００２３】
また、請求項３記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法に係り、上記データの３２ビットごとに３２次の生成多項式により演算を行う第１の演算処理と、上記データの３２ビットごとに１６次の生成多項式により演算を行う第２の演算処理と、上記データの３２ビットと、上記第１の演算処理で得られた３２ビットの演算結果と、上記第２の演算処理の途中で得られる１６ビットの演算結果とについて、上記１６次の生成多項式により演算を行う第３の演算処理とを有することを特徴としている。
【００２４】
また、請求項４記載の発明は、請求項３記載の巡回冗長検査演算方法に係り、上記第３の演算処理では、上記データの３２ビットを下位ビットとし、上記第１の演算処理で得られた上記３２ビットの演算結果を上位ビットとする６４ビットごとに上記演算を行うことを特徴としている。
【００２５】
また、請求項５記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算方法に係り、上記データの所定ビット数ごとに上記生成多項式により演算を行う第１の演算処理と、上記データの所定ビット数ごとに上記生成多項式により演算を行う第２の演算処理と、上記データの所定ビット数と、上記第１の演算処理で得られた演算結果と、上記第２の演算処理の途中で得られる演算結果とについて、上記生成多項式により演算を行う第３の演算処理と、上記データの所定ビット数ごとに上記生成多項式により演算を行う第４の演算処理と、上記データの所定ビット数と、上記第１の演算処理で得られた演算結果と、上記第２の演算処理の途中で得られる演算結果と、上記第４の演算処理の途中で得られる演算結果とについて上記生成多項式により演算を行う第５の演算処理とを有することを特徴としている。
【００２６】
また、請求項６記載の発明は、請求項５記載の巡回冗長検査演算方法に係り、上記第３の演算処理では、上記データの３２ビットを下位ビットとし、上記第１の演算処理で得られた演算結果を上位ビットとする４８ビットごとに上記演算を行い、上記第５の演算処理では、上記データの３２ビットを下位ビットとし、上記第１の演算処理で得られた演算結果を中位ビットとし、上記第２の演算処理の途中で得られる演算結果を上位ビットとする６４ビットごとに上記演算を行うことを特徴としている。
【００２７】
また、請求項７記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路に係り、上記データの所定ビット数ごとに第１の生成多項式により演算を行う第１の演算部と、上記データの所定ビット数ごとに上記第１の生成多項式と同一の又は異なる少なくとも１個の第２の生成多項式により演算を行う第２の演算部と、上記データの所定ビット数と、上記第１の演算部の演算で得られた演算結果と、上記第２の演算部の演算途中で得られる演算結果とについて、上記第２の生成多項式により演算を行う第３の演算部とを有することを特徴としている。
【００２８】
また、請求項８記載の発明は、請求項７記載の巡回冗長検査演算回路に係り、上記データの所定ビット数を下位ビットとし、上記第１の演算部の演算で得られた演算結果を上位ビットとして結合して上記第３の演算部に供給するデータ結合部を有することを特徴としている。
【００２９】
また、請求項９記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路に係り、上記データの３２ビットごとに３２次の生成多項式により演算を行う第１の演算部と、上記データの３２ビットごとに１６次の生成多項式により演算を行う第２の演算部と、上記データの３２ビットと、上記第１の演算部の演算で得られた３２ビットの演算結果と、上記第２の演算部の演算途中で得られる１６ビットの演算結果とについて、上記１６次の生成多項式により演算を行う第３の演算部とを有することを特徴としている。
【００３０】
また、請求項１０記載の発明は、請求項９記載の巡回冗長検査演算回路に係り、上記データの３２ビットを下位ビットとし、上記第１の演算部の演算で得られた上記３２ビットの演算結果を上位ビットとして結合して上記第３の演算部に供給するデータ結合部を有することを特徴としている。
【００３１】
また、請求項１１記載の発明は、伝送すべきデータについて複数個の生成多項式により誤り検出のための演算を行い、上記データに各演算結果を付加して伝送する通信システムに用いられる巡回冗長検査演算回路に係り、上記データの所定ビット数ごとに上記生成多項式により演算を行う第１の演算部と、上記データの所定ビット数ごとに上記生成多項式により演算を行う第２の演算部と、上記データの所定ビット数と、上記第１の演算部の演算で得られた演算結果と、上記第２の演算部の演算途中で得られる演算結果とについて、上記生成多項式により演算を行う第３の演算部と、上記データの所定ビット数ごとに上記生成多項式により演算を行う第４の演算部と、上記データの所定ビット数と、上記第１の演算部の演算で得られた演算結果と、上記第２の演算部の演算途中で得られる演算結果と、上記第４の演算部の演算途中で得られる演算結果とについて上記生成多項式により演算を行う第５の演算部とを有することを特徴としている。
【００３２】
また、請求項１２記載の発明は、請求項１１記載の巡回冗長検査演算回路に係り、上記データの３２ビットを下位ビットとし、上記第１の演算部の演算で得られた演算結果を上位ビットとして結合して上記第３の演算部に供給する第１のデータ結合部と、上記データの３２ビットを下位ビットとし、上記第１の演算部の演算で得られた演算結果を中位ビットとし、上記第２の演算部の演算途中で得られる演算結果を上位ビットとして結合して上記第５の演算部に供給する第２のデータ結合部とを有することを特徴としている。
【００３３】
【作用】
この発明の構成によれば、巡回冗長検査演算を高速に行うことができる。
【００３４】
【発明の実施の形態】
以下、図面を参照して、この発明の実施の形態について説明する。説明は、実施例を用いて具体的に行う。
Ａ．第１の実施例
まず、この発明の第１の実施例について説明する。
図１は、この発明の第１の実施例であるＣＲＣ演算回路の構成を示すブロック図である。
この例のＣＲＣ演算回路は、データ入力部３１と、ラッチ３２〜３４と、データ結合部３５と、演算部３６〜３８と、セレクタ３９及び４０と、データ出力部４１とから構成されている。
【００３５】
データ入力部３１は、３２ビットずつの入力データＤ０に対して波形整形などを施し、出力データＤ１として後段の回路要素に入力するためのインターフェイスである。ラッチ３２は、３２ビットのフリップフロップからなり、データ処理のタイミングを調整するために設けられている。ラッチ３２は、データ入力部３１の出力データＤ１を外部から供給されるクロック１個分だけラッチし、出力データＤ７として出力する。データ結合部３５は、データ入力部３１の出力データＤ１と、ラッチ３３の出力データＤ８とを結合し、図２に示すように、データ入力部３１の出力データＤ１を下位３２ビットとし、ラッチ３３の出力データＤ８を上位３２ビットとする出力データＤ２を生成して出力する。演算部３６は、データ入力部３１の出力データＤ１について、ラッチ３３の出力データＤ８を用いてＣＲＣ３２演算を行い、３２ビットの演算結果を出力データＤ３として出力する。演算部３７は、データ入力部３１の出力データＤ１について、ラッチ３４の出力データＤ９を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ４として出力する。演算部３８は、データ結合部３５の出力データＤ２について、ラッチ３４の出力データＤ９を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ５として出力する。
【００３６】
セレクタ３９は、演算部３７の出力データＤ４か、あるいは演算部３８の出力データＤ５のいずれか一方を選択して出力データＤ６として出力する。ラッチ３３は、３２ビットのフリップフロップからなり、演算部３６の出力データＤ３をクロック１個分だけラッチし、出力データＤ８として出力する。ラッチ３４は、１６ビットのフリップフロップからなり、セレクタ３９の出力データＤ６をクロック１個分だけラッチし、出力データＤ９として出力する。セレクタ４０は、ラッチ３２の出力データＤ７、ラッチ３３の出力データＤ８、あるいはラッチ３４の出力データＤ９のいずれかを選択して出力データＤ１０として出力する。データ出力部４１は、セレクタ４０の出力データＤ１０に対して波形整形などを施し、出力データＤ１１として後段の回路要素へ供給するためのインターフェイスである。
【００３７】
なお、演算部３６は、その構成が図２０及び図２１に示す演算式を回路化したものである。また、演算部３７は、その構成が図２３に示す演算式を回路化したものである。また、演算部３８は、その構成が図３に示す演算式を回路化したものである。図３において、Ｚ１５〜Ｚ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｒ３１〜Ｒ００はラッチ３３の出力データＤ８の各ビットである。また、Ｄ３１〜Ｄ００は上記した入力データの各ビットに対応しており、「・」は排他的論理和演算を意味している。
【００３８】
図３に示す演算式は、以下に示す手順で生成される。上記したように、演算部３８には、図２に示す６４ビットのデータが入力される。このため、まず、データ幅６４ビットの入力データについてＣＲＣ１６演算を行う必要がある。この場合の演算結果ＣＲＣ１６は、図２２に示す演算部において、６４ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００に相当する。そこで、図４に演算部３８に６４ビットの入力データと同じ６４ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００の演算式を示す。図４において、Ｒ１５〜Ｒ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｄ６３〜Ｄ００は上記した入力データの各ビットに対応しており、「・」は排他的論理和演算を意味している。次に、図２に示すように、データ結合部３５の出力データＤ２のうち、上位３２ビットはラッチ３３の出力データＤ８、すなわち、演算部３６の演算結果ＣＲＣ３２である。したがって、図４に示す各演算式のＤ６３〜Ｄ３２に図２０及び図２１に示す演算式Ｃ３１〜Ｃ００を代入する。この場合、図４に示すＲ１５〜Ｒ００と、図２０及び図２１に示すＲ３１〜Ｒ００とを区別するために、前者をＺ１５〜Ｚ００で表す。そして、得られた各演算式を剰余２に基づいて整理すると、図３に示す演算式が得られる。
【００３９】
次に、上記構成のＣＲＣ演算回路の動作について、図５に示すタイミング・チャートを参照して説明する。まず、説明を簡単にするために、入力データＤ０は、図５に示すように、バイトデータＢＤ０〜ＢＤ３からなるものとする。バイトデータＢＤ０は各１バイトのデータブロックＤＢ０〜ＤＢ３からなり、バイトデータＢＤ１は各１バイトのデータブロックＤＢ４〜ＤＢ７からなる。また、バイトデータＢＤ２は各１バイトのデータブロックＤＢ８〜ＤＢ１１からなり、バイトデータＢＤ３は各１バイトのデータブロックＤＢ１２及びＤＢ１３からなる。まず、入力データＤ０が、図５（１）に示すように、第１の周期＃１から図示せぬクロックに同期して外部から順次ＣＲＣ演算回路に供給されると、データ入力部３１は、入力データＤ０に対して波形整形など施し、出力データＤ１としてラッチ３２、データ結合部３５並びに演算部３６及び３７へ順次供給する。
【００４０】
これにより、ラッチ３２は、データ入力部３１の出力データＤ１を外部から供給されるクロック１個分だけラッチし、第２の周期＃２から出力データＤ７として順次出力する。
また、演算部３６は、第１の周期＃１において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ０について、ラッチ３３の出力データＤ８、今の場合、ラッチ３３の初期値を用いてＣＲＣ３２演算を行い、演算結果ＣＲ００を生成し、出力データＤ３として出力する。なお、ラッチ３３には、初期値として、「０」が予め設定されている。したがって、ラッチ３３は、演算部３６の出力データＤ３、今の場合、演算結果ＣＲ００をクロック１個分だけラッチし、図５（２）に示すように、第２の周期＃２に出力データＤ８として出力する。次に、演算部３６は、第２の周期＃２において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ１について、ラッチ３３の出力データＤ８、今の場合、演算結果ＣＲ００を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０１を生成し、出力データＤ３として出力する。したがって、ラッチ３３は、演算部３６の出力データＤ３、今の場合、演算結果ＣＲ０１をクロック１個分だけラッチし、図５（２）に示すように、第３の周期＃３に出力データＤ８として出力する。
【００４１】
同様に、演算部３６は、第３の周期＃３において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ２について、ラッチ３３の出力データＤ８、今の場合、演算結果ＣＲ０１を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０２を生成し、出力データＤ３として出力する。したがって、ラッチ３３は、演算部３６の出力データＤ２、今の場合、演算結果ＣＲ０２をクロック１個分だけラッチし、図５（２）に示すように、第４の周期＃４に出力データＤ８として出力する。次に、演算部３６は、第４の周期＃４において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ３について、ラッチ３３の出力データＤ８、今の場合、演算結果ＣＲ０２を用いてＣＲＣ３２演算を行い、演算結果ＣＲ０３を生成し、出力データＤ３として出力する。したがって、ラッチ３３は、演算部３６の出力データＤ３、今の場合、演算結果ＣＲ０３をクロック１個分だけラッチし、図５（２）に示すように、第５の周期＃５に出力データＤ８として出力する。この演算結果ＣＲ０３が演算結果ＣＲＣ３２である。この演算結果ＣＲＣ３２は、上記したように、４個の演算結果ブロックＣＲＣ３２０〜ＣＲＣ３２３から構成されている。
【００４２】
一方、演算部３７は、第１の周期＃１において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ０について、ラッチ３４の出力データＤ９、今の場合、ラッチ３４の初期値を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１０を生成し、図５（３）に示すように、出力データＤ４として出力する。なお、ラッチ３４には、初期値として、「０」が予め設定されている。これにより、セレクタ３９は、第１の周期＃１において、演算部３７の出力データＤ４、今の場合、演算結果ＣＲ１０を選択して出力データＤ６として出力する。したがって、ラッチ３４は、セレクタ３９の出力データＤ６、今の場合、演算結果ＣＲ１０をクロック１個分だけラッチし、図５（５）に示すように、第２の周期＃２に出力データＤ９として出力する。次に、演算部３７は、第２の周期＃２において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ１について、ラッチ３４の出力データＤ９、今の場合、演算結果ＣＲ１０を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１１を生成し、図５（３）に示すように、出力データＤ４として出力する。これにより、セレクタ３９は、第２の周期＃２において、演算部３７の出力データＤ４、今の場合、演算結果ＣＲ１１を選択して出力データＤ６として出力する。したがって、ラッチ３４は、セレクタ３９の出力データＤ６、今の場合、演算結果ＣＲ１１をクロック１個分だけラッチし、図５（５）に示すように、第３の周期＃３に出力データＤ９として出力する。
【００４３】
同様に、演算部３７は、第３の周期＃３において、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ２について、ラッチ３４の出力データＤ９、今の場合、演算結果ＣＲ１１を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１２を生成し、図５（３）に示すように、出力データＤ４として出力する。これにより、セレクタ３９は、第３の周期＃３において、演算部３７の出力データＤ４、今の場合、演算結果ＣＲ１２を選択して出力データＤ６として出力する。したがって、ラッチ３４は、セレクタ３９の出力データＤ６、今の場合、演算結果ＣＲ１２をクロック１個分だけラッチし、図５（５）に示すように、第４の周期＃４に出力データＤ９として出力する。
【００４４】
次に、第４の周期＃４に至ると、すなわち、入力データＤ０を構成する最後のデータであるバイトデータＢＤ３が検出されると、以下に示す処理が行われる。まず、データ結合部３５は、データ入力部３１の出力データＤ１、今の場合、バイトデータＢＤ３と、ラッチ３３の出力データＤ８、今の場合、演算結果ＣＲ０２とを結合し、図２に示すように、データ入力部３１の出力データＤ１を下位３２ビットとし、ラッチ３３の出力データＤ８を上位３２ビットとする合計６４ビットの出力データＤ２を生成して出力する。これにより、演算部３８は、この６４ビットの出力データＤ２について、ラッチ３４の出力データＤ９、今の場合、演算結果ＣＲ１２を用いてＣＲＣ１６演算を行い、演算結果ＣＲ１３を生成し、図５（４）に示すように、出力データＤ５として出力する。この演算結果ＣＲ１３が演算結果ＣＲＣ１６である。この演算結果ＣＲＣ１６は、上記したように、２個の演算結果ブロックＣＲＣ１６０及びＣＲＣ１６１から構成されている。これにより、セレクタ３９は、第４の周期＃４において、今度は演算部３８の出力データＤ５、今の場合、演算結果ＣＲ１３を選択して出力データＤ６として出力する。したがって、ラッチ３４は、セレクタ３９の出力データＤ６、今の場合、演算結果ＣＲ１３をクロック１個分だけラッチし、図５（５）に示すように、第５の周期＃５に出力データＤ９として出力する。
【００４５】
これにより、セレクタ４０は、第２〜第４の周期＃２〜＃４においては、ラッチ３２から出力される３２ビットの出力データＤ７、今の場合、バイトデータＢＤ０〜ＢＤ２を選択して出力データＤ１０として出力する。また、セレクタ４０は、第５の周期＃５においては、ラッチ３２の出力データＤ７、今の場合、データブロックＤＢ１２及びＤＢ１３と、ラッチ３３の出力データＤ８、今の場合、演算結果ブロックＣＲＣ３２０及びＣＲＣ３２１とを新たなバイトデータＢＤ'３に結合し、出力データＤ１０として出力する。さらに、セレクタ４０は、第６周期＃６においては、ラッチ３３の出力データＤ８、今の場合、演算結果ＣＲＣ３２を構成する演算結果ブロックＣＲＣ３２２及びＣＲＣ３２３と、ラッチ３４の出力データＤ９、今の場合、演算結果ＣＲＣ１６を構成する演算結果ブロックＣＲＣ１６０及びＣＲＣ１６１とを新たなバイトデータＢＤ４に結合し、出力データＤ１０として出力する。したがって、データ出力部４１は、図５（６）に示すように、セレクタ４０から出力される３２ビットの出力データＤ１０に対して波形整形など施し、出力データＤ１１として後段の回路要素へ供給する。
【００４６】
このように、この例の構成によれば、データ結合部３５により、出力データＤ１の最後のデータであるバイトデータＢＤ３と、演算部３６において最終的な演算結果ＣＲＣ３２が得られる１個前の演算結果ＣＲ１２とを結合して６４ビットの出力データＤ２を生成している。この６４ビットの出力データＤ２について演算部３８において、ＣＲＣ１６演算を行うことにより、演算結果ＣＲＣ１６を得ている。これにより、演算結果ＣＲＣ３２及びＣＲＣ１６を同時に得ることができる。
したがって、この例の構成によれば、従来のように、ＣＲＣ３２演算の演算結果ＣＲＣ３２を求めた後にＣＲＣ１６演算をする場合に比べて、データ入力部３１に入力データＤ０が入力されてからデータ出力部４１から出力データＤ１１が出力されるまでの遅延はクロック１個分少なくなる。このため、この例の構成によれば、近年のＣＰＵの動作速度の高速化に伴うデータ通信における信号処理の高速化への要求に十分に応えることができる。
【００４７】
Ｂ．第２の実施例
次に、この発明の第２の実施例について説明する。まず、前提として、この例では、データは、図６に示すデータ・フォーマットに従って構成された通信データに組み込まれ、上記高速プロトコルで４バイト（３２ビット）ずつ伝送されるものとする。通信データは、図６に示すように、ヘッダと、データと、演算結果ＣＲＣ１６１〜ＣＲＣ１６３とから構成されている。この通信データは、図７に示すように、ヘッダ及びデータがｎ個（ｎは自然数）の１バイトずつのデータブロックＤＢ０〜ＤＢｎに分割され、演算結果ＣＲＣ１６１が２個の１バイトずつの演算結果ブロックＣＲＣ１６１０及びＣＲＣ１６１１に分割されている。また、演算結果ＣＲＣ１６２が２個の１バイトずつの演算結果ブロックＣＲＣ１６２０及びＣＲＣ１６２１に分割され、演算結果ＣＲＣ１６３が２個の１バイトずつの演算結果ブロックＣＲＣ１６３０及びＣＲＣ１６３１に分割されている。そして、ＣＲＣ１６１演算はヘッダ及びデータについて行われ、ＣＲＣ１６２演算はヘッダ、データ及び演算結果ＣＲＣ１６１について行われ、ＣＲＣ１６３演算はヘッダ、データ並びに演算結果ＣＲＣ１６１及びＣＲＣ１６２について行われる。すなわち、ＣＲＣ１６２演算においては、演算結果ＣＲＣ１６１もヘッダやデータと同様に見なされ、ＣＲＣ１６３演算においては、演算結果ＣＲＣ１６１及びＣＲＣ１６２もヘッダやデータと同様に見なされるのである。
【００４８】
図８は、この発明の第２の実施例であるＣＲＣ演算回路の構成を示すブロック図である。
この例のＣＲＣ演算回路は、データ入力部５１と、ラッチ５２〜５５と、データ結合部５６及び５７と、演算部５８〜６２と、セレクタ６３〜６５と、データ出力部６６とから構成されている。
データ入力部５１は、３２ビットずつの入力データＤ０に対して波形整形などを施し、出力データＤ１として後段の回路要素に入力するためのインターフェイスである。ラッチ５２は、３２ビットのフリップフロップからなり、データ処理のタイミングを調整するために設けられている。ラッチ５２は、データ入力部５１の出力データＤ１を外部から供給されるクロック１個分だけラッチし、出力データＤ１１として出力する。データ結合部５６は、データ入力部５１の出力データＤ１と、ラッチ５３の出力データＤ１２とを結合し、図９に示すように、データ入力部５１の出力データＤ１を下位３２ビットとし、ラッチ５３の出力データＤ１２を上位１６ビットとする出力データＤ２を生成して出力する。データ結合部５７は、データ入力部５１の出力データＤ１と、ラッチ５３の出力データＤ１２と、ラッチ５４の出力データＤ１３とを結合し、図１０に示すように、データ入力部５１の出力データＤ１を下位３２ビットとし、ラッチ５３の出力データＤ１２を中位１６ビットとし、ラッチ５４の出力データＤ１３を下位１６ビットとする出力データＤ３を生成して出力する。
【００４９】
演算部５８は、データ入力部５１の出力データＤ１について、ラッチ５３の出力データＤ１２を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ４として出力する。演算部５９は、データ入力部５１の出力データＤ１について、ラッチ５４の出力データＤ１３を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ５として出力する。演算部６０は、データ結合部５６の出力データＤ２について、ラッチ５４の出力データＤ１３を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ６として出力する。演算部６１は、データ入力部５１の出力データＤ１について、ラッチ５５の出力データＤ１４を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ７として出力する。演算部６２は、データ結合部５７の出力データＤ３について、ラッチ５５の出力データＤ１４を用いてＣＲＣ１６演算を行い、１６ビットの演算結果を出力データＤ８として出力する。
【００５０】
セレクタ６３は、演算部５９の出力データＤ５か、あるいは演算部６０の出力データＤ６のいずれか一方を選択して出力データＤ９として出力する。セレクタ６４は、演算部６１の出力データＤ７か、あるいは演算部６２の出力データＤ８のいずれか一方を選択して出力データＤ１０として出力する。ラッチ５３は、１６ビットのフリップフロップからなり、演算部５８の出力データＤ４をクロック１個分だけラッチし、出力データＤ１２として出力する。ラッチ５４は、１６ビットのフリップフロップからなり、セレクタ６３の出力データＤ９をクロック１個分だけラッチし、出力データＤ１３として出力する。ラッチ５５は、１６ビットのフリップフロップからなり、セレクタ６４の出力データＤ１０をクロック１個分だけラッチし、出力データＤ１４として出力する。セレクタ６５は、ラッチ５２の出力データＤ１１、ラッチ５３の出力データＤ１２、ラッチ５４の出力データＤ１３、あるいはラッチ５５の出力データＤ１４のいずれかを選択して出力データＤ１５として出力する。データ出力部６６は、セレクタ６５の出力データＤ１５に対して波形整形などを施し、出力データＤ１６として後段の回路要素へ供給するためのインターフェイスである。
【００５１】
なお、演算部５８、５９及び６１は、その構成が図２３に示す演算式を回路化したものである。また、演算部６０は、その構成は図１１に示す演算式を回路化したものである。図１１において、Ｚ１５〜Ｚ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｒ３１〜Ｒ００はラッチ５３の出力データＤ１２の各ビットである。また、Ｄ３１〜Ｄ００は上記した入力データの各ビットに対応しており、「・」は排他的論理和演算を意味している。
【００５２】
図１１に示す演算式は、以下に示す手順で生成される。上記したように、演算部６０には、図９に示す４８ビットのデータが入力される。このため、まず、データ幅４８ビットの入力データについてＣＲＣ１６演算を行う必要がある。この場合の演算結果ＣＲＣ１６は、図２２に示す演算部において、４８ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００に相当する。そこで、図１２に演算部６０に４８ビットの入力データと同じ４８ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００の演算式を示す。図１２において、Ｚ１５〜Ｚ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｄ４７〜Ｄ００は上記した入力データを構成するビット列ｄ４７,ｄ４６，…，ｄ１，ｄ０に対応しており、「・」は排他的論理和演算を意味している。次に、図９に示すように、データ結合部５６の出力データＤ２のうち、上位１６ビットはラッチ５３の出力データＤ１２、すなわち、演算部５８の演算結果ＣＲＣ１６１である。したがって、図１２に示す各演算式のＤ４７〜Ｄ３２に図２３に示す演算式Ｃ１５〜Ｃ００を代入する。そして、得られた各演算式を剰余２に基づいて整理すると、図１１に示す演算式が得られる。
【００５３】
また、演算部６２は、その構成は図２２に示す構成と同様であるが、演算式は図１３に示す演算式を用いる。図１３において、Ｒ１５〜Ｒ００はＦＦ２７１６〜ＦＦ２７１の初期値であり、Ｘ１５〜Ｘ００はラッチ５３の出力データＤ１２の各ビット、Ｚ１５〜Ｚ００はラッチ５４の出力データＤ１３の各ビットである。また、Ｄ３１〜Ｄ００は上記した入力データを構成するビット列ｄ３１,ｄ３０，…，ｄ１，ｄ０に対応しており、「・」は排他的論理和演算を意味している。
図１３に示す演算式は、以下に示す手順で生成される。上記したように、演算部６２には、図１０に示す６４ビットのデータが入力される。このため、まず、データ幅６４ビットの入力データについてＣＲＣ１６演算を行う必要がある。この場合の演算結果ＣＲＣ１６は、図２２に示す演算部において、６４ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００に相当する。図４は、上記したように、演算部３８に６４ビットの入力データと同じ６４ビット分のデータをシフトするためのクロックを供給した場合の各ＦＦ２７１６〜２７１の出力データＣ１５〜Ｃ００の演算式を示している。次に、図１０に示すように、データ結合部５７の出力データＤ３のうち、上位１６ビットはラッチ５４の出力データＤ１３、すなわち、演算部６０の演算結果ＣＲＣ１６２であり、中位１６ビットはラッチ５３の出力データＤ１２、すなわち、演算部５８の演算結果ＣＲＣ１６１である。したがって、図４に示す各演算式のＤ６３〜Ｄ４８に図１１に示す演算式Ｃ１５〜Ｃ００を代入し、図４に示す各演算式のＤ４７〜Ｄ３２に図２３に示す演算式Ｃ１５〜Ｃ００を代入する。この場合、図４に示すＲ１５〜Ｒ００と、図１１及び図２３に示すＲ１５〜Ｒ００とを区別するために、後者をＸ１５〜Ｘ００で表す。そして、得られた各演算式を剰余２に基づいて整理すると、図１３に示す演算式が得られる。
【００５４】
次に、上記構成のＣＲＣ演算回路の動作について、図１４に示すタイミング・チャートを参照して説明する。まず、説明を簡単にするために、入力データＤ０は、図１４に示すように、バイトデータＢＤ０〜ＢＤ３からなるものとする。バイトデータＢＤ０は各１バイトのデータブロックＤＢ０〜ＤＢ３からなり、バイトデータＢＤ１は各１バイトのデータブロックＤＢ４〜ＤＢ７からなる。また、バイトデータＢＤ２は各１バイトのデータブロックＤＢ８〜ＤＢ１１からなり、バイトデータＢＤ３は１バイトのデータブロックＤＢ１２からなる。
まず、入力データＤ０が、図１４（１）に示すように、第１の周期＃１から図示せぬクロックに同期して外部から順次ＣＲＣ演算回路に供給されると、データ入力部５１は、入力データＤ０に対して波形整形など施し、出力データＤ１としてラッチ５２、データ結合部５６及び５７並びに演算部５８、５９及び６１へ順次供給する。
【００５５】
これにより、ラッチ５２は、データ入力部５１の出力データＤ１を外部から供給されるクロック１個分だけラッチし、第２の周期＃２から出力データＤ１１として順次出力する。
また、演算部５８は、第１の周期＃１において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ０について、ラッチ５３の出力データＤ１２、今の場合、ラッチ５３の初期値を用いてＣＲＣ１６演算を行い、演算結果ＣＲ００を生成し、図１４（２）に示すように、出力データＤ４として出力する。なお、ラッチ５３には、初期値として、「０」が予め設定されている。したがって、ラッチ５３は、演算部５８の出力データＤ４、今の場合、演算結果ＣＲ００をクロック１個分だけラッチし、図１４（３）に示すように、第２の周期＃２に出力データＤ１２として出力する。次に、演算部５８は、第２の周期＃２において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ１について、ラッチ５３の出力データＤ１２、今の場合、演算結果ＣＲ００を用いてＣＲＣ１６演算を行い、演算結果ＣＲ０１を生成し図１４（２）に示すように、出力データＤ４として出力する。したがって、ラッチ５３は、演算部５８の出力データＤ４、今の場合、演算結果ＣＲ０１をクロック１個分だけラッチし、図１４（３）に示すように、第３の周期＃３に出力データＤ１２として出力する。
【００５６】
同様に、演算部５８は、第３の周期＃３において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ２について、ラッチ５３の出力データＤ１２、今の場合、演算結果ＣＲ０１を用いてＣＲＣ１６演算を行い、演算結果ＣＲ０２を生成し、図１４（２）に示すように、出力データＤ４として出力する。したがって、ラッチ５３は、演算部５８の出力データＤ４、今の場合、演算結果ＣＲ０２をクロック１個分だけラッチし、図１４（３）に示すように、第４の周期＃４に出力データＤ８として出力する。次に、演算部５８は、第４の周期＃４において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ３について、ラッチ５３の出力データＤ１２、今の場合、演算結果ＣＲ０２を用いてＣＲＣ１６演算を行い、演算結果ＣＲ０３を生成し、図１４（２）に示すように、出力データＤ４として出力する。したがって、ラッチ５３は、演算部５８の出力データＤ４、今の場合、演算結果ＣＲ０３をクロック１個分だけラッチし、図１４（３）に示すように、第５の周期＃５に出力データＤ１２として出力する。この演算結果ＣＲ０３が演算結果ＣＲＣ１６１である。この演算結果ＣＲＣ１６１は、上記したように、２個の演算結果ブロックＣＲＣ１６１０及びＣＲＣ１６１１から構成されている。
【００５７】
また、演算部６１は、第１の周期＃１において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ０について、ラッチ５５の出力データＤ１４、今の場合、ラッチ５５の初期値を用いてＣＲＣ１６演算を行い、演算結果ＣＲ２０を生成し、図１４（７）に示すように、出力データＤ７として出力する。なお、ラッチ５５には、初期値として、「０」が予め設定されている。これにより、セレクタ６４は、第１の周期＃１において、演算部６１の出力データＤ７、今の場合、演算結果ＣＲ２０を選択して出力データＤ１０として出力する。したがって、ラッチ５５は、セレクタ６４の出力データＤ１０、今の場合、演算結果ＣＲ２０をクロック１個分だけラッチし、図１４（９）に示すように、第２の周期＃２に出力データＤ１４として出力する。次に、演算部６１は、第２の周期＃２において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ１について、ラッチ５５の出力データＤ１３、今の場合、演算結果ＣＲ２０を用いてＣＲＣ１６演算を行い、演算結果ＣＲ２１を生成し、図１４（７）に示すように、出力データＤ７として出力する。これにより、セレクタ６４は、第２の周期＃２において、演算部５６１出力データＤ７、今の場合、演算結果ＣＲ２１を選択して出力データＤ１０として出力する。したがって、ラッチ５５は、セレクタ６４の出力データＤ１０、今の場合、演算結果ＣＲ２１をクロック１個分だけラッチし、図１４（９）に示すように、第３の周期＃３に出力データＤ１４として出力する。
【００５８】
同様に、演算部６１は、第３の周期＃３において、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ２について、ラッチ５５の出力データＤ１４、今の場合、演算結果ＣＲ２１を用いてＣＲＣ１６演算を行い、演算結果ＣＲ２２を生成し、図１４（７）に示すように、出力データＤ７として出力する。これにより、セレクタ６４は、第３の周期＃３において、演算部６１の出力データＤ７、今の場合、演算結果ＣＲ２２を選択して出力データＤ１０として出力する。したがって、ラッチ５５は、セレクタ６４の出力データＤ１０、今の場合、演算結果ＣＲ２２をクロック１個分だけラッチし、図１４（９）に示すように、第４の周期＃４に出力データＤ１４として出力する。
【００５９】
次に、第４の周期＃４に至ると、すなわち、入力データＤ０を構成する最後のデータであるバイトデータＢＤ３が検出されると、以下に示す処理が行われる。まず、データ結合部５７は、データ入力部５１の出力データＤ１、今の場合、バイトデータＢＤ３と、ラッチ５３の出力データＤ１２、今の場合、演算結果ＣＲ０２と、ラッチ５４の出力データＤ１３、今の場合、演算結果ＣＲ１２とを結合し、図１０に示すように、データ入力部５１の出力データＤ１を下位３２ビットとし、ラッチ５３の出力データＤ１２を中位１６ビットとし、ラッチ５４の出力データＤ１３を下位１６ビットとする合計６４ビットの出力データＤ３を生成して出力する。これにより、演算部６２は、この６４ビットの出力データＤ３について、ラッチ５５の出力データＤ１４、今の場合、演算結果ＣＲ２２を用いてＣＲＣ１６演算を行い、演算結果ＣＲ２３を生成し、図１４（８）に示すように、出力データＤ８として出力する。この演算結果ＣＲ２３が演算結果ＣＲＣ１６３である。この演算結果ＣＲＣ１６３は、上記したように、２個の演算結果ブロックＣＲＣ１６３０及びＣＲＣ１６３１から構成されている。これにより、セレクタ６４は、第４の周期＃４において、今度は演算部６２の出力データＤ８、今の場合、演算結果ＣＲ２３を選択して出力データＤ１０として出力する。したがって、ラッチ５５は、セレクタ６４の出力データＤ１０、今の場合、演算結果ＣＲ２３をクロック１個分だけラッチし、図１４（９）に示すように、第５の周期＃５に出力データＤ１４として出力する。
【００６０】
これにより、セレクタ６５は、第２〜第４の周期＃２〜＃４においては、ラッチ５２から出力される３２ビットの出力データＤ１１、今の場合、バイトデータＢＤ０〜ＢＤ２を選択して出力データＤ１５として出力する。また、セレクタ６５は、第５の周期＃５においては、ラッチ５２の出力データＤ１１、今の場合、データブロックＤＢ１２と、ラッチ５３の出力データＤ１２、今の場合、演算結果ＣＲＣ１６１を構成する演算結果ブロックＣＲＣ１６１０及びＣＲＣ１６１１と、ラッチ５４の出力データＤ１３、今の場合、演算結果ＣＲＣ１６２を構成する演算結果ブロックＣＲＣ１６２０とを新たなバイトデータＢＤ'３に結合し、出力データＤ１５として出力する。さらに、セレクタ６５は、第６周期＃６においては、ラッチ５４の出力データＤ１３、今の場合、演算結果ＣＲＣ１６２を構成する演算結果ブロックＣＲＣ１６２１と、ラッチ５５の出力データＤ１４、今の場合、演算結果ＣＲＣ１６３を構成する演算結果ブロックＣＲＣ１６３０及びＣＲＣ１６３１とを新たなバイトデータＢＤ４に結合し、出力データＤ１５として出力する。したがって、データ出力部６６は、図１４（１０）に示すように、セレクタ６５から出力される３２ビットの出力データＤ１５に対して波形整形など施し、出力データＤ１６として後段の回路要素へ供給する。
【００６１】
このように、この例の構成によれば、データ結合部５６により、出力データＤ１の最後のデータであるバイトデータＢＤ３と、演算部５８において最終的な演算結果ＣＲＣ１６１が得られる１個前の演算結果ＣＲ０２とを結合して４８ビットの出力データＤ２を生成している。そして、この４８ビットの出力データＤ２について演算部６０において、ＣＲＣ１６演算を行うことにより、演算結果ＣＲＣ１６２を得ている。同様に、データ結合部５７により、出力データＤ１の最後のデータであるバイトデータＢＤ３と、演算部５８において最終的な演算結果ＣＲＣ１６１が得られる１個前の演算結果ＣＲ０２と、演算部５９において最終的な演算結果ＣＲＣ１６２が得られる１個前の演算結果ＣＲ１２とを結合して６４ビットの出力データＤ３を生成している。そして、この６４ビットの出力データＤ３について演算部６２において、ＣＲＣ１６演算を行うことにより、演算結果ＣＲＣ１６３を得ている。これにより、演算結果ＣＲＣ１６１〜ＣＲＣ１６３を同時に得ることができる。したがって、データ入力部５１に入力データＤ０が入力されてからデータ出力部６６から出力データＤ１６が出力されるまでの遅延はクロック１個分で済む。
これに対し、図６に示すデータ・フォーマットによりデータを伝送する場合に、「従来の技術」で述べたように、演算結果ＣＲＣ１６１を求めた後に演算結果ＣＲＣ１６２を求め、さらに、演算結果ＣＲＣ１６２を求めた後に演算結果ＣＲＣ１６３を求めるとすると、データ入力部５１に入力データＤ０が入力されてからデータ出力部６６から出力データＤ１６が出力されるまでにクロック３個分の遅延が生じてしまう。すなわち、この例の構成によれば、従来に比べて、遅延はクロック２個分少なくなる。このため、この例の構成によれば、近年のＣＰＵの動作速度の高速化に伴うデータ通信における信号処理の高速化への要求に十分に応えることができる。
【００６２】
以上、この発明の実施例を図面を参照して詳述してきたが、具体的な構成はこの実施例に限られるものではなく、この発明の要旨を逸脱しない範囲の設計の変更等があってもこの発明に含まれる。
例えば、上述の各実施例においては、通信データは４バイトずつ伝送される例を示したが、これに限定されず、この発明は、通信データは１バイト、２バイト、８バイト、あるいはそれ以上のバイト数で伝送される場合にも適用することができる。
また、上記した第１の実施例においては、ヘッダ及びデータについてＣＲＣ３２演算を、ヘッダ、データ及び演算結果ＣＲＣ３２についてＣＲＣ１６演算を行う例を示した。また、上記した第２の実施例においては、ヘッダ及びデータについて第１のＣＲＣ１６演算を、ヘッダ、データ及び演算結果ＣＲＣ１６１について第２のＣＲＣ１６演算を、ヘッダ、データ、演算結果ＣＲＣ１６１及びＣＲＣ１６２について第３のＣＲＣ１６演算を行う例を示した。しかし、これに限定されず、第１の実施例においては、ヘッダ及びデータについてＣＲＣ１６演算を、ヘッダ、データ及び演算結果ＣＲＣ１６についてＣＲＣ３２演算を行っても良い。同様に、第２の実施例においては、ヘッダ及びデータについてＣＲＣ３２演算を、ヘッダ、データ及び演算結果ＣＲＣ３２について第１のＣＲＣ１６演算を、ヘッダ、データ、演算結果ＣＲＣ３２及びＣＲＣ１６１について第２のＣＲＣ１６演算を行っても良い。
また、生成多項式は、式（１）及び式（２）に限定されず、どのようなものでも良い。さらに、生成多項式の次数も３２次及び１６次に限定されず、４８次、６４次でも良い。加えて、生成多項式の個数も２個に限定されず、３個、４個以上でも良い。
要するに、この発明は、データ等についてＣＲＣ演算を２回以上行う場合に適用することができる。
【００６３】
【発明の効果】
以上説明したように、この発明の構成によれば、伝送すべきデータの所定ビット数ごとに第１の生成多項式により演算を行う第１の演算処理と、データの所定ビット数ごとに第１の生成多項式と同一の又は異なる少なくとも１個の第２の生成多項式により演算を行う第２の演算処理と、データの所定ビット数と、第１及び第２の演算処理の一方又は両方の途中で得られる少なくとも１個の演算結果とについて少なくとも１個の第２の生成多項式により演算を行う第３の演算処理とを有する。
したがって、この発明の構成によれば、巡回冗長検査演算を高速に行うことができる。
【図面の簡単な説明】
【図１】この発明の第１の実施例であるＣＲＣ演算回路の構成を示すブロック図である。
【図２】同回路を構成するデータ結合部３５により生成される出力データＤ２のデータ・フォーマットを示す図である。
【図３】同回路を構成する演算部３８により実現されるＣＲＣ１６演算の演算式を示す図である。
【図４】図３に示す演算式を求める課程で得られる演算式を示す図である。
【図５】同回路の動作の一例を説明するためのタイミング・チャートである。
【図６】この発明の第２の実施例であるＣＲＣ演算回路が適用される通信システムにおいて伝送される通信データのデータ・フォーマットの一例を示す図である。
【図７】同システムにおいて伝送される通信データの伝送の様子を示す図である。
【図８】この発明の第２の実施例であるＣＲＣ演算回路の構成を示すブロック図である。
【図９】同回路を構成するデータ結合部５６により生成される出力データＤ２のデータ・フォーマットを示す図である。
【図１０】同回路を構成するデータ結合部５７により生成される出力データＤ３のデータ・フォーマットを示す図である。
【図１１】同回路を構成する演算部６０により実現されるＣＲＣ１６演算の演算式を示す図である。
【図１２】図１１に示す演算式を求める課程で得られる演算式を示す図である。
【図１３】同回路を構成する演算部６２により実現されるＣＲＣ１６演算の演算式を示す図である。
【図１４】同回路の動作の一例を説明するためのタイミング・チャートである。
【図１５】従来のデータ通信システムの構成例を示すブロック図である。
【図１６】同システムにおいて伝送される通信データのデータ・フォーマットの一例を示す図である。
【図１７】同システムにおいて伝送される通信データの伝送の様子を示す図である。
【図１８】従来のＣＲＣ演算回路の構成例を示すブロック図である。
【図１９】同回路を構成する演算部１９の構成例を示すブロック図である。
【図２０】同演算部１９により実現されるＣＲＣ３２演算の演算式を示す図である。
【図２１】同演算部１９により実現されるＣＲＣ３２演算の演算式を示す図である。
【図２２】同回路を構成する演算部２０の構成例を示すブロック図である。
【図２３】同演算部２０により実現されるＣＲＣ１６演算の演算式を示す図である。
【図２４】同回路の動作の一例を説明するためのタイミング・チャートである。
【符号の説明】
３２〜３４，５２〜５５  ラッチ
３５，５６，５７        データ結合部
３６，５８              演算部（第１の演算部）
３７，５９              演算部（第２の演算部）
３８，６０              演算部（第３の演算部）
５６                    データ結合部（第１のデータ結合部）
５７                    データ結合部（第２のデータ結合部）
６１                    演算部（第４の演算部）
６２                    演算部（第５の演算部）
３９，４０，６３〜６５  セレクタ
【図１】
0004515651.tif 000002
【図２】
0004515651.tif 000003
【図３】
0004515651.tif 000004
【図４】
0004515651.tif 000005
【図５】
0004515651.tif 000006
【図６】
0004515651.tif 000007
【図７】
0004515651.tif 000008
【図８】
0004515651.tif 000009
【図９】
0004515651.tif 000010
【図１０】
0004515651.tif 000011
【図１１】
0004515651.tif 000012
【図１２】
0004515651.tif 000013
【図１３】
0004515651.tif 000014
【図１４】
0004515651.tif 000015
【図１５】
0004515651.tif 000016
【図１６】
0004515651.tif 000017
【図１７】
0004515651.tif 000018
【図１８】
0004515651.tif 000019
【図１９】
0004515651.tif 000020
【図２０】
0004515651.tif 000021
【図２１】
0004515651.tif 000022
【図２２】
0004515651.tif 000023
【図２３】
0004515651.tif 000024
【図２４】
0004515651.tif 000025