JP5550413B2 - Crc演算回路 - Google Patents

Crc演算回路 Download PDF

Info

Publication number
JP5550413B2
JP5550413B2 JP2010075191A JP2010075191A JP5550413B2 JP 5550413 B2 JP5550413 B2 JP 5550413B2 JP 2010075191 A JP2010075191 A JP 2010075191A JP 2010075191 A JP2010075191 A JP 2010075191A JP 5550413 B2 JP5550413 B2 JP 5550413B2
Authority
JP
Japan
Prior art keywords
data
crc
crc calculation
circuit
bytes
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
JP2010075191A
Other languages
English (en)
Other versions
JP2011211353A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2010075191A priority Critical patent/JP5550413B2/ja
Publication of JP2011211353A publication Critical patent/JP2011211353A/ja
Application granted granted Critical
Publication of JP5550413B2 publication Critical patent/JP5550413B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Error Detection And Correction (AREA)

Description

本発明は、主として通信回線に使用される誤り検出方法に関し、特に、CRC(Cyclic Redundancy Check)生成における演算を行うCRC演算回路に関する。
Ethernet(登録商標)等のデータ通信などで伝送データに誤りが含まれているかを判定するための方式として、CRCがある。このCRC方式は、送信側では送信データを高次の多項式とみなして、所定次数の生成多項式により割り算を行い、その余りをCRCとして送信データの後に付加し符号化を行う。受信側では、送信側と同じ生成多項式を用いて割り算を行うことで復号を行い、余りが送信側で付加された値と一致する場合は受信したデータに誤りがないと判定し、付加された値と一致しない場合は誤りがあると判定する。上記生成多項式としては、例えば次のようなものが実際のCRCに使用されている。
(1)CRC8の生成多項式
+x+x+x+x+1
(2)CRC32−IEEE 802.3の生成多項式
32+x26+x23+x22+x16+x12+x11+x10+x+x+x+x+x+x+1
このようなCRC演算は、一般的には所定次数の生成多項式に対応する段数のシフトレジスタと排他的論理和回路で構成された回路にデータを1ビットずつ入力することで行っているが、長い入力データに対してCRC演算を短時間で行うことが要求される場合は並列CRC計算回路に対象データを並列に入力して対象データのCRC演算を行っている。
例えば特許文献1に記載されているような従来のCRC演算装置においては、Nバイトの並列CRC計算を行う場合に問題となるCRC演算の対象データの先頭バイト位置がNバイトのデータの最上位にない場合とデータの終了バイト位置がNバイトのデータの最下位にない場合においても、CRC演算の対象となるデータの前に“0”が付加されてもCRCの演算結果が変化しないことを利用している。このようなCRC演算装置では、可変長のデータをNバイトパラレルに展開した場合に、最後のNバイトに出現する演算対象でないバイトの数だけ、可変長のデータの先頭に“0”を付加することにより、CRC演算部をNバイトパラレルに対する演算ブロックのみで構成するものである。
即ち、このようなCRC演算装置では、CRC演算範囲がNバイトの倍数の長さでない場合に、CRC演算範囲の長さをNで割った余り以降からNバイト目までのバイト数N−(データ長をNで割った余り)だけ先頭に“0”を付加することにより、可変長データをNバイトの倍数のサイズとしてCRC演算を行う。
特許第3546959号公報
上記のCRC演算装置は、CRC演算範囲が並列CRC演算回路の並列数Nバイトの倍数の長さでない場合に、終了バイトを含むデータをNバイトの長さに揃えるために、先頭に必ず“0”を付与する必要がある。このため、LENGTH情報からCRC演算範囲を計算し、先頭に付与する0の個数を算出することで解決を図っている。しかしながら、この方式はCRC演算範囲を計算するためにデータの前にLENGTH情報を付与する必要があり、LENGTH情報がデータの途中に格納されるデータ転送方式ではCRC演算開始時点のデータ先頭でLENGTH情報を知りうることができない。このため、従来のCRC演算装置では、LENGTH情報が得られるまでデータを遅延させる記憶素子を使用することになる。従って、従来のCRC演算装置では、データのビット幅×LENGTH情報が得られるまでの遅延段数分だけ回路規模が増大する問題点と、遅延段数分だけCRC算出が遅くなるという問題点があった。
この発明は、上記のような問題点を解決するためになされたもので、並列CRC計算を行う場合の回路規模の増大を抑え、かつ、CRC算出を速やかに開始することのできるCRC演算回路を得ることを目的とする。
この発明に係るCRC演算回路は、可変長の入力データの先頭バイト位置情報と当該入力データ内に含まれるLENGTH情報からCRC演算範囲を計算するCRC演算範囲計算回路と、CRC8の生成多項式を8バイト並列化してCRC演算を行う並列CRC計算回路と、CRC演算範囲計算回路で計算したCRC演算範囲に基づいて、可変長の入力データをNバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がNバイト未満の場合、先頭バイト位置より前のデータを0とし、かつ、終了バイト位置を含むデータの演算範囲がNバイト未満の場合は、終了バイト位置より後のデータを0に置き換えると共に、置き換えたデータをNバイトの前側にシフトするデータ順番調整回路とを備え、並列CRC計算回路は、データ順番調整回路からの出力に対して並列CRC演算処理を行うものである。
この発明のCRC演算回路は、先頭バイト位置を含むデータの演算範囲がNバイト未満の場合、先頭バイト位置より前のデータを0とし、かつ、終了バイト位置を含むデータの演算範囲がNバイト未満の場合は、終了バイト位置より後のデータを0に置き換えると共に、置き換えたデータをNバイトの前側にシフトするようにしたので、並列CRC計算を行う場合の回路規模の増大を抑え、かつ、CRC算出を速やかに開始することができる。
この発明の実施の形態1によるCRC演算回路を示す構成図である。 この発明の実施の形態1によるCRC演算回路のCRC演算対象データの構成を示す説明図である。 この発明の実施の形態1によるCRC演算回路の動作を示す説明図である。 この発明の実施の形態2によるCRC演算回路を示す構成図である。 この発明の実施の形態2によるCRC演算回路の動作を示す説明図である。
実施の形態1.
図1は、この発明の実施の形態1によるCRC演算回路を示す構成図である。
図示のCRC演算回路は、CRC演算範囲計算回路1、データ順番調整回路2、並列CRC計算回路3を備えている。CRC演算範囲計算回路1は、可変長入力データであるデータ入力データNバイト並列入力と、データ先頭位置信号と、先頭バイト位置情報とを入力して、CRC演算範囲を計算し、その先頭バイト位置情報と終了バイト位置情報とを出力する回路である。尚、データ先頭位置信号は、入力データの先頭位置を示す信号であり、先頭バイト位置情報は、Nバイト並列における入力データの先頭バイト位置を示す情報である。データ順番調整回路2は、入力データNバイト並列入力とデータ先頭位置信号とデータ終了位置信号とを入力し、CRC演算範囲計算回路1で演算された先頭バイト位置情報と終了バイト位置情報とに基づいて、0の挿入と、データの並べ替えを行う回路である。並列CRC計算回路3は、データ順番調整回路2で演算されたデータ列を入力し、CRC演算範囲計算回路1で演算された先頭バイト位置情報と終了バイト位置情報とに基づいて、Nバイト並列CRC演算を行う回路である。
次に、実施の形態1のCRC演算回路における各部の動作について説明する。実施の形態1では、図2に示されている可変長の入力データに対して1バイト長のCRC8を8バイト並列CRC計算で行う場合について説明する。
CRC演算範囲計算回路1は、先頭バイト位置情報からCRC演算の先頭バイト位置を決める処理と、データ内の一意に決められた箇所に格納されるLENGTH情報に基づいて終了バイト位置を算出してCRC演算の終了位置を決める処理とを行い、得られた先頭バイト位置情報と終了バイト位置情報とをデータ順番調整回路2と並列CRC計算回路3とに出力する。
データ順番調整回路2は、図3に記載されているように、入力データに対して、0への置き換えと並べ替えを行う。尚、図3中データの入力順は、1−1,1−2,・・・,2−1,2−2,・・・,4−7,4−8の順である。図3において、(a)はデータ先頭バイト位置が最上位、データ終了バイト位置が最下位の場合であり、このような場合は、0への置き換えと並べ替えは実行されない。一方、(b)はデータ先頭バイト位置が最上位になく、かつ、データ終了バイト位置が最下位にない場合を示している。この(b)に示すように、先頭バイト位置を含むデータの演算範囲が8バイト未満の場合、例えばKバイトとすると、先頭バイト位置より前のデータとなる(8−K)バイトのデータは0に置き換える。また、終了バイト位置を含むデータの位置の演算範囲が8バイト未満の場合、例えばLバイトとすると、終了バイト位置より後ろのデータとなる(8−L)バイトのデータは0に置き換え、さらにLバイト、(8−L)バイトの順で入力されたデータを(8−L)バイト、Lバイトの順に入れ替える。
並列CRC計算回路3は、CRC8の生成多項式x+x+x+x+x+1を8バイト(64bit)並列化した回路を使用する。CRC演算の対象となるデータの前に“0”が付加されてもCRCの演算結果が変化しないことは、一般的に知られており、データ順番調整回路2から出力されるデータを8バイト並列CRC計算回路3に入力することでCRCを算出することが可能となる。また、CRC演算が有効なデータ範囲のみに対して演算されるように先頭バイト位置情報と終了バイト位置情報を入力する。
実施の形態1のCRC演算回路は、CRC演算範囲を算出する際にデータの先頭にLENGTH情報を必要としないため、CRC演算開始時点ではLENGTH情報が存在しないデータにおいてLENGTH情報を得るまでにデータを遅延させるための記憶素子分の回路規模を増やすことなくCRC演算を正しく行うことができる。また、Nバイト並列CRC計算を行うにあたり、CRC演算の対象となるデータの先頭バイト位置を含むデータ、最終バイト位置を含むデータがNバイトに満たない場合においてもデータ全体をずらすことなくCRC演算を行うことができる。
以上のように、実施の形態1のCRC演算回路によれば、可変長の入力データのCRC演算範囲を計算するCRC演算範囲計算回路と、Nバイト並列にCRC演算を行う並列CRC計算回路と、CRC演算範囲計算回路で計算したCRC演算範囲に基づいて、可変長の入力データをNバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がNバイト未満の場合、先頭バイト位置より前のデータを0とし、かつ、終了バイト位置を含むデータの演算範囲がNバイト未満の場合は、終了バイト位置より後のデータを0に置き換えると共に、置き換えたデータをNバイトの前側にシフトするデータ順番調整回路とを備え、並列CRC計算回路は、データ順番調整回路からの出力に対して並列CRC演算処理を行うようにしたので、回路規模の増大を抑え、かつ、CRC算出を速やかに開始することができる。
また、実施の形態1のCRC演算回路によれば、CRC演算範囲計算回路は、入力データの先頭バイト位置情報と入力データ内に含まれるLENGTH情報からCRC演算範囲を計算するようにしたので、データの先頭にLENGTH情報がないデータ転送方式においても、そのLENGTH情報が得られるまでデータを遅延させる必要がなく、記憶素子による回路規模の増加と遅延段数を抑えることができる。
また、実施の形態1のCRC演算回路によれば、並列CRC計算回路は、Nバイト並列CRC計算を行うにあたり、CRC演算の対象となるデータの前に0が付加されてもCRCの演算結果が変化しないことを利用するようにしたので、CRC演算の対象となるデータの先頭バイト位置を含むデータ、最終バイト位置を含むデータがNバイトに満たない場合においてもデータ全体をずらすことなくCRC演算を行うことができる。
実施の形態2.
実施の形態1では、可変長の入力データに対して1バイト長のCRC8を8バイト並列CRC計算で行う場合について説明したが、実施の形態2では、図4に示すように、4バイト長のCRC32を8バイト並列CRC計算で行う場合について説明する。
図4に示す実施の形態2のCRC演算回路は、実施の形態1と同様に、CRC演算範囲計算回路1、データ順番調整回路2、並列CRC計算回路3を備えると共に、最終バイト用CRC計算回路4とフリップフロップ5とを備える。最終バイト用CRC計算回路4は、最終バイト位置を含むデータの演算範囲が、CRCの生成多項式で決定されるバイト数で割り切れない場合、並列CRC計算回路3で得られたCRC演算結果と、演算が行われないデータに対応した1サイクル前のCRC演算結果とから最終バイト位置を含むデータのCRC演算を行う回路である。また、フリップフロップ5は、並列CRC計算回路3におけるCRC演算結果を保持するフリップフロップである。
次に実施の形態2の動作について説明する。実施の形態2においてもデータ順番調整回路2により図3に示すデータの入れ替えを行う。並列CRC計算回路3は前記出力データに対してCRC演算を行い、8バイト長のCRCを得ることができる。この並列CRC計算回路3の構成はCRC32の生成多項式x32+x26+x23+x22+x16+x12+x11+x10+x+x+x+x+x+x+1を8バイト(64bit)並列化した回路を使用する。CRC演算の方法は、実施の形態1と同様である。
しかし、4バイト長のCRC32を8バイト長の並列CRC計算回路3で計算する場合は、最終バイト位置を含むデータの演算範囲が4バイトで割り切れない場合に実施の形態1と同様のデータを置き換えのみで演算を実施すると、最終バイト位置を含むデータについては4バイトで割り切れない部分が計算されない。このため、実施の形態2では、最終バイト用CRC計算回路4により図5に記載されているように割り切れなかった余りの部分についてCRC演算を行う。図5において、(a)は余りの部分が3バイトの場合であり、(b)は2バイト、(c)は1バイトの場合を示している。また、図5において、C3n,C2n,C1n,C0nは最終バイトデータが含まれるデータの1サイクル前のCRCを示し、C3n+1,C2n+1,C1n+1,C0n+1は、最終バイトデータが含まれるデータから算出したCRC、C′3n+1,C′2n+1,C′1n+1,C′0n+1は、最終バイト用CRC計算回路4によるCRCを示している。
図5(a)に記載のように、最終バイト位置を含むデータが3バイトの場合は、並列CRC計算回路3でC0n分との計算が行われないため、並列CRC計算回路3で得られたC3n+1と、計算が行われなかったC0nとの排他的論理和をとることでCRCを正しく得ることができる。図5(b)(c)に示す最終バイト位置を含むデータが2バイト、1バイトの場合のときも、並列CRC計算回路3で計算されなかった分を、最終バイト用CRC計算回路4で計算する。上記以外の場合については、並列CRC計算回路3のCRC演算結果をそのまま出力する。
実施の形態2のCRC演算回路は、従来方式のようにデータ全体をずらすことなくCRC演算を正しく行うことができるため、データ全体をずらすための記憶素子は必要としない。
尚、上記例では、4バイト長のCRC32を8バイト並列CRC計算する方法について説明しているが、4バイト長のCRC32を16バイト並列CRC計算する場合など、CRCの生成多項式より入力データの並列化数が多いときは同様の考え方でCRC演算を正しく行うことができる。
また、上記実施の形態1、2は、ハードウェアで実現することを目的としているが、ソフトウェアでCRCを計算する場合も同様の考え方でCRC演算を正しく行うことができる。
以上のように、実施の形態2のCRC演算回路によれば、最終バイト位置を含むデータの演算範囲が、CRCの生成多項式で決定されるバイト数で割り切れない場合、並列CRC計算回路で得られたCRC演算結果と、演算が行われないデータに対応した1サイクル前のCRC演算結果とから最終バイト位置を含むデータのCRC演算を行う最終バイト用CRC計算回路を備えたので、CRCの生成多項式より入力データの並列化数が多い場合でも実施の形態1のCRC演算回路と同様に対応することができる。
1 CRC演算範囲計算回路、2 データ順番調整回路、3 並列CRC計算回路、4 最終バイト用CRC計算回路、5 フリップフロップ。

Claims (2)

  1. 可変長の入力データの先頭バイト位置情報と当該入力データ内に含まれるLENGTH情報からCRC演算範囲を計算するCRC演算範囲計算回路と、
    CRC8の生成多項式を8バイト並列化してCRC演算を行う並列CRC計算回路と、
    前記CRC演算範囲計算回路で計算したCRC演算範囲に基づいて、前記可変長の入力データをNバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がNバイト未満の場合、前記先頭バイト位置より前のデータを0とし、かつ、終了バイト位置を含むデータの演算範囲がNバイト未満の場合は、前記終了バイト位置より後のデータを0に置き換えると共に、当該置き換えたデータをNバイトの前側にシフトするデータ順番調整回路とを備え、
    前記並列CRC計算回路は、前記データ順番調整回路からの出力に対して並列CRC演算処理を行うことを特徴とするCRC演算回路。
  2. 可変長の入力データのCRC演算範囲を計算するCRC演算範囲計算回路と、
    Nバイト並列にCRC演算を行う並列CRC計算回路と、
    前記CRC演算範囲計算回路で計算したCRC演算範囲に基づいて、前記可変長の入力データをNバイト並列に展開した場合、先頭バイト位置を含むデータの演算範囲がNバイト未満の場合、前記先頭バイト位置より前のデータを0とし、かつ、終了バイト位置を含むデータの演算範囲がNバイト未満の場合は、前記終了バイト位置より後のデータを0に置き換えると共に、当該置き換えたデータをNバイトの前側にシフトするデータ順番調整回路と、
    最終バイト位置を含むデータの演算範囲が、CRCの生成多項式で決定されるバイト数で割り切れない場合、前記並列CRC計算回路で得られたCRC演算結果と、演算が行われないデータに対応した1サイクル前の前記CRC演算結果とから前記最終バイト位置を含むデータのCRC演算を行う最終バイト用CRC計算回路を備え
    前記並列CRC計算回路は、前記データ順番調整回路からの出力に対して並列CRC演算処理を行い、前記最終バイト用CRC計算回路は、前記CRC演算結果に基づいて前記最終バイト位置を含むデータのCRC演算を行うことを特徴とするCRC演算回路。
JP2010075191A 2010-03-29 2010-03-29 Crc演算回路 Expired - Fee Related JP5550413B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010075191A JP5550413B2 (ja) 2010-03-29 2010-03-29 Crc演算回路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010075191A JP5550413B2 (ja) 2010-03-29 2010-03-29 Crc演算回路

Publications (2)

Publication Number Publication Date
JP2011211353A JP2011211353A (ja) 2011-10-20
JP5550413B2 true JP5550413B2 (ja) 2014-07-16

Family

ID=44941986

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010075191A Expired - Fee Related JP5550413B2 (ja) 2010-03-29 2010-03-29 Crc演算回路

Country Status (1)

Country Link
JP (1) JP5550413B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9350385B2 (en) * 2013-03-15 2016-05-24 Xilinx, Inc. Modular and scalable cyclic redundancy check computation circuit
KR101816266B1 (ko) * 2016-11-15 2018-01-08 현대오트론 주식회사 순환 중복 검사 코드 생성기 및 검사기

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0969836A (ja) * 1995-08-31 1997-03-11 Toshiba Corp Crc符号生成回路およびcrc符号生成回路設計方法
JP3546959B2 (ja) * 2001-05-31 2004-07-28 日本電気株式会社 Crc演算装置
JP4831018B2 (ja) * 2007-08-28 2011-12-07 日本電気株式会社 並列巡回符号生成装置および並列巡回符号検査装置

Also Published As

Publication number Publication date
JP2011211353A (ja) 2011-10-20

Similar Documents

Publication Publication Date Title
US8468439B2 (en) Speed-optimized computation of cyclic redundancy check codes
JP4764973B2 (ja) Crc値の算出装置
CN102096609A (zh) 可编程循环冗余校验(crc)计算的指令集架构
JPH0380727A (ja) データストリームのフレーム同期検出方法及び装置
JP2010534007A (ja) メッセージ剰余の決定
US8700971B2 (en) Parallel residue arithmetic operation unit and parallel residue arithmetic operating method
CN112306741B (zh) 一种crc校验方法及相关装置
EP3202045A1 (en) Method and device for calculating a crc code in parallel
US8539326B1 (en) Method and implementation of cyclic redundancy check for wide databus
CN101296053A (zh) 计算循环冗余校验码之方法及系统
JP5550413B2 (ja) Crc演算回路
JP2009094605A (ja) 符号誤り検出装置および誤り検出符号生成装置
JP3485075B2 (ja) 復号回路及びその復号方法
JP4515651B2 (ja) 巡回冗長検査演算方法及び巡回冗長検査演算回路
US11309994B2 (en) Highly parallel and scalable cyclic redundancy check
US9748978B2 (en) CRC code calculation circuit and method thereof, and semiconductor device
JP4057876B2 (ja) ガロア体掛け算器の制御方法
KR102353983B1 (ko) 순환 중복 검사(crc)에서 알고리즘의 배열 방법
CN113821370A (zh) 一种用于数据传输错误校验的高速crc产生方法和装置
US10785150B2 (en) CRC update mechanism
JP6252196B2 (ja) 誤り検出コード付きデータの生成方法および誤り検出方法
JP3593039B2 (ja) 誤り及び同期検出装置並びに方法
JP4747085B2 (ja) 誤り訂正符号回路
US10879933B2 (en) Reed solomon decoder and semiconductor device including the same
CN113068046A (zh) Mpeg-2同步字节解码器中伴随式的并行产生装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130123

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140117

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140128

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140327

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: 20140422

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140520

R150 Certificate of patent or registration of utility model

Ref document number: 5550413

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees