JP4643957B2 - メッセージのcrcを計算するための方法 - Google Patents

メッセージのcrcを計算するための方法 Download PDF

Info

Publication number
JP4643957B2
JP4643957B2 JP2004270438A JP2004270438A JP4643957B2 JP 4643957 B2 JP4643957 B2 JP 4643957B2 JP 2004270438 A JP2004270438 A JP 2004270438A JP 2004270438 A JP2004270438 A JP 2004270438A JP 4643957 B2 JP4643957 B2 JP 4643957B2
Authority
JP
Japan
Prior art keywords
crc
remainder
composite
generating
bit
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
JP2004270438A
Other languages
English (en)
Other versions
JP2005102213A (ja
Inventor
ヴィセント・ヴィ・カヴァンナ
パトリシア・エー・サラ
Original Assignee
アバゴ・テクノロジーズ・ジェネラル・アイピー(シンガポール)プライベート・リミテッド
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 アバゴ・テクノロジーズ・ジェネラル・アイピー(シンガポール)プライベート・リミテッド filed Critical アバゴ・テクノロジーズ・ジェネラル・アイピー(シンガポール)プライベート・リミテッド
Publication of JP2005102213A publication Critical patent/JP2005102213A/ja
Application granted granted Critical
Publication of JP4643957B2 publication Critical patent/JP4643957B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/61Aspects and characteristics of methods and arrangements for error correction or error detection, not provided for otherwise
    • H03M13/615Use of computational or mathematical techniques
    • H03M13/617Polynomial operations, e.g. operations related to generator polynomials or parity-check polynomials

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Physics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Description

本発明は、一般に、誤り検出に関するものであり、とりわけ、到着順に関係なく、サブメッセージの巡回冗長検査を累算する方法に関するものである。
巡回冗長検査(CRC)技法を利用するコーディング・システムは、容易に実施されるが、強力な誤り検出能力は得られない。従って、CRC技法は、例えば、ディスク・コントローラ、IP及びiSCSIのようなインターネット・プロトコル、及び、イーサネットを含むネットワーキング・プロトコルにおいて広く用いられている。CRC技法では、フレームと称されるデータ・ビットのブロックが、フレーム・チェック・シーケンス(FCS)と呼ばれるmビットの余剰ブロック(extra block)と結合される。パリティ・ビットのようなチェックサム(checksum)とちょうど同じように、FCSによって伝送される(d+m)ビットのコードワードに、受信機による誤り検出を可能にする冗長性が導入される。全てのビットが、多項式の2進係数として処理される。受信機は、生成多項式でコードワードを割ることによって(多項式演算を利用して)、受信した(d+m)ビットのコードワードの誤りを検出する。この割り算による剰余が0の場合、CRC操作可能受信機は、伝送されてきたコードワードに誤りが含まれていないものとみなす。
上述のように、いくつかのインターネット・プロトコルは、誤り検出にCRC符号化を必要とする。これらのプロトコルにおいて、データ・メッセージは、伝送のため、パケット化されるか、サブメッセージに分割される。例えば、iSCSIデータ・メッセージは、そのCRC FCSで保護し、任意の順序で到着可能な複数IPパケット(サブメッセージと称することが可能な)によって伝送することが可能である。しかし、FCSのCRC符号化は、もとのデータ・メッセージに基づくものであって、IPパケット/サブメッセージに基づくものではない。従来、受信機は、2つのアプローチの一方によって、結果得られるサブメッセージに対するCRC計算を実施することが可能である。CRC割算/計算を実施する第1のアプローチの場合、従来の受信機は、サブメッセージを累算して、メッセージを再構成し、そのメッセージを生成多項式で割ることが可能である。この割り算の剰余が0である場合、メッセージは誤りがないものとみなされる。この割算は、全てのサブメッセージの受信後に実施されるので、望ましくない遅延を生じさせる待ち時間を伴う。さらに、受信機は、累算サブメッセージを記憶しているメモリに対する読み取りアクセスをしなければならない。こうしたアクセスが実際的であったとしても、メモリ・バスに対する余分なローディングがシステム性能に影響を及ぼすことになる。
あるいはまた、CRC計算を実施する第2のアプローチの場合、CRC計算エンジンを用いて、順番に到着する各サブメッセージ毎にCRC割算を実施することによって、CRC剰余を計算することが可能である。サブメッセージを順次処理するには、CRC計算エンジンが適正な初期状態にあることを保証しなければならない。次に、処理済のサブメッセージが、CRC計算エンジンにはアクセスできない、遠隔メモリに送られ、前回のアプローチで受けたメモリ・バスへのローディングが取り除かれる。しかし、第2のアプローチでは、サブメッセージを順番に配信することが必要になるので、サブメッセージの順番が乱れた配信をサポートすることが必要とされるか、または、望ましい場合には、適用できない。
従って、本発明の目的は、到着順に関係なく、サブメッセージのCRC計算を行うCRC計算技法を提供することにある。
本発明の形態の1つによれば、少なくとも2つの因数を有するCRC生成多項式に基づいて、合成サブメッセージに関するCRCを生成する方法が得られる。合成サブメッセージには、サブメッセージ・データと、n個の後続するゼロ(trailing zeros)が含まれている。この方法には、サブメッセージ・データ、及び、CRC生成多項式の第1の因数に基づいて第1の剰余を生成するステップが含まれている。第2の剰余は、サブメッセージ・データ、及び、CRC生成多項式の第2の因数に基づいて生成される。合成サブメッセージに関するCRCが、第1及び第2の剰余の調整バージョンに基づいて生成される。
発明の種々の態様と特徴は、添付の図面を検討することにより、さらによく理解され得る。
望ましい実施態様に関する以下の詳細な説明では、その一部を形成し、例証のため、本発明を実施することが可能な特定の実施態様を示す、添付の図面が参照される。もちろん、他の実施態様を利用することもできるし、あるいは、本発明の範囲を逸脱することなく、論理的変更を加えることも可能である。従って、以下の詳細な説明は、制限の意味にとるべきではなく、本発明の範囲は、付属の請求項によって定義されている。
図1には、(d+m)ビット2進メッセージ10が例示されている。メッセージ10は、サブメッセージ12、14、及び、16と称されるあるまとまったビットに、任意に分割することが可能である。メッセージ10は、サブメッセージの非等価演算(modulo-2 summation)として表現することが可能である。しかし、各サブメッセージは、残りのサブメッセージからのデータの代わりに、ゼロで修正しなければならない。例えば、サブメッセージ14について検討してみることにする。メッセージ10を形成する非等価演算において用いられるためには、サブメッセージ14は、合成(composite)サブメッセージ18としてモデル化しなければならない。以上から明らかなように、合成サブメッセージ18は、サブメッセージ12及び16からのサブメッセージ・データの代わりに、ゼロ20を有している。このようにしてモデル化されると、各合成サブメッセージの長さ(ビット数)はもとのメッセージ10と同じになる。
CRC計算は、線形変換であるため、メッセージ10のCRCは、合成サブメッセージ10のCRCの和である。従来の直列CRC計算エンジンを用いて、合成サブメッセージのCRCを計算する場合、CRC計算エンジンの初期状態が0であれば、先行する0を無視することが可能である。こうした場合、合成サブメッセージに関するCRCの計算を開始するため、計算エンジンは、対応するサブメッセージのCRC計算から開始することが可能である。しかし、サブメッセージの結果得られるCRCには、合成サブメッセージのCRCを形成するように調整を施さなければならない。本明細書において用いられる限りにおいて、合成サブメッセージのCRCは、インクリメンタル(incremental)CRCと称される。必要な調整(adjustment)は、後続するゼロ(trailing zeros)と同じ数nのクロック・サイクルにわたって、それ以上の入力がないようにして、引き続き計算エンジンをサイクル動作させることによって実施可能である。
「最適方法(optimal method)」と称される本発明の第1の実施態様では、nの後続するゼロを備えた合成サブメッセージに対応するサブメッセージのCRCは、インクリメンタルCRCを形成するように、log nのクロック・サイクルで調整することが可能である。次に、これらのインクリメンタルCRCに任意の順番に非等価演算(modulo-2 sum)(排他的論理和演算)を施すと、もとのメッセージに関するCRCを形成することが可能になる。
この最適方法を理解するには、通常の当該技術者にとっては周知のいくつかの符号化概念について十分に理解しておかなければならない。例えば、体(field)は、それによって2つの2項演算(binary operation)が定義される要素の集合である。これらの2項演算は、「加算」及び「乗算」と称することが可能である。しかし、加算及び乗算の通常の2項演算との混同を避けるため、これらの体の2項演算は、それぞれ、記号「+」及び「」を用いて、「体加算」及び「体乗算」と称することにする。他の要件に加えて、2つの体要素間のいずれかの2項演算結果が、体内の別の要素に等しくなければならない。有限数の要素を備えた体が、とりわけ問題となり、「ガロア体(Galois field)」と呼ばれる。
最も単純なガロア体は、GF(2)として表わされる2進数{1,0}の集合である。この場合、体加算及び体乗算の2項演算は、おなじみのモジュロ2加算及びモジュロ2乗算である。符号化理論家は、GF(2)を利用して、GF(2)として表わされる2の要素を備えた拡大ガロア体を作成することが可能である。こうした作成を開始するため、その係数がGF(2)からのものである単一変数xを備えた多項式について考察することにする。本明細書において用いられる限りにおいて、「多項式」は、GF(2)からの係数を備える多項式だけを表わしている。その非ゼロの係数を備えたxの最大べき指数がmである、1つの変数xを備える多項式は、次数がmと言われる。例えば、多項式P(x)=x+x+1は次数が4である。さらに本明細書において解説されるように、既約多項式(irreducible polynomial)及び原始多項式(primitive polynomial)という、2つのタイプの多項式が、最適方法にとって特に重要である。m次の既約多項式P(x)は、1以上m―1以下の次数の多項式で割ることはできない。原始多項式P(x)は、多項式x+1をP(x)で割り切ることができるnのうち最小のものがn=2−1となる既約多項式である。
m次の原始多項式を利用して、ガロア体GF(2)の要素を生成することが可能である。例えば、原始多項式P(x)=1+x+xについて考察することにする。この多項式の次数は4であり、従って、4ビットの2進数(4項表現(4-tuple representation))で表現することが可能である。一般に、m次の原始多項式を利用して、2−1の固有状態を生成することが可能である(わずかな全ゼロ状態を無視すると)。各状態は、多項式またはm項表現をすることが可能である。以下の論考では、慣習上、xの変わりに要素αを用いることにする。各多項式は、本明細書においてさらに解説することになる、αのべき(power)で表わすことも可能である(べき表現)。最も単純な4つの多項式は、それぞれ、ただ単に1、α、α、及び、αになる。これらの多項式は、それぞれ、0001、0010、0100、及び、1000としての4項形式(4-tuple form)(最上位ビットを最初にして)に相当する。べき表現は、それぞれ、直接、α、α、α、及び、αに対応する。生成多項式P(α)=1+α+αが0に等しくなるようにすることによって、αのべきをさらに展開することが可能である。これによって、漸化公式(recursive formula)α=α+1が得られることになる。引き続きαを掛け、漸化公式を適用することによって、下記の表1に示すように、αのべきを導き出すことが可能である。
Figure 0004643957
表1を検討すると明らかなように、このガロア体のそれぞれの要素は、有限状態マシンにおける状態とみなすことが可能である。例えば、状態マシンが状態0110(α)状態にある場合、次の状態は1100(α)になる。ある特定の状態について、次の状態はαを掛けることによって得られる。
本発明にとって重要なもう1つの概念は、多項式P(x)によって生成されるガロア体GF(2)内の要素を有限体二乗(finite field squaring)する概念である。一例として、やはり、生成(及び原始)多項式P(α)=1+α+αについて考察することにする。結果得られるガロア体GF(2)内の多項式要素の1つ(bα+bα+bα+bとして表わされる)が、有限体二乗される場合、その結果が、bα+bα+bα+bになるのは明らかである。帰納式α=α+1を利用することによって、その結果はbα+(b+b)α+bα+(b+b)になる。従って、表1からの任意の4項要素[b,b,b,b]が与えられると、それが、図2に示す回路24によって有限体二乗されて、4項要素[c,c,c,c]を生じることになる。モジュロ2加算は、排他的論理和演算に相当するので、係数b3、2、、bのモジュロ2加算は、XORゲート26で実施される。一般に、m次の生成多項式P(x)の場合、m項2進数の有限体二乗は、モジュロP(x)のm項(m-tuple)2進数の自乗に相当するという点に留意されたい。
次に図3を参照すると、4項2進数を二乗する体を実施するためのシフト・レジスタ30が示されており、ここで、体は、多項式P(x)=x+x+1によって生成される。各段(stage)31は、Dタイプ・フリップ・フロップである。段(stage)31には、結果生じる4項2進数の4ビットが記憶される。この4項2進数は、多項式とみなすことができるので、従って、段31は、x項〜x項で表示される。従って、各段31の内容は、対応する多項式の因数の係数とみなすことが可能である。これらの係数は、4ビット・ベクトルY(n)=[y,y,y,y]として表わすことが可能である。ここで、y〜yは、それぞれ、段31 x〜xの内容に対応する。ベクトルY(n)は、シフト・レジスタ30の状態とみなすことも可能である。段31が刻時される毎に、4項2進数は体二乗される。XORゲート26によって、図2と同じ機能が得られる。図3のシフト・レジスタ30と図2に例示の二乗変換の比較によって、同一性が例証されている。例えば、y(n+1)=y(n)^y(n)になるが、ここで、^はXOR演算を表わしている。レジスタ30の次の状態Y(n+1)がY(n)から導き出される。この次の状態が、式Y(n+1)=SY(n)によって得られるが、ここで、Sは下記の式1によって示される正方行列である。
Figure 0004643957
正方行列の各行は、シフト・レジスタ30を調べることから導き出すことが可能である。例えば、シフト・レジスタ30から、y(n+1)=y(n)であることが分る。従って、y(n+1)=[0010][y(n)y(n)y(n)y(n)]になるが、ここで、Tは転置操作を表わしている。
これらの概念を念頭において、本発明の最適方法についてさらに論考することにする。この方法では、従来のCRC計算エンジンを利用して、合成サブメッセージのインクリメンタルCRCを計算する。周知のように、こうしたCRC計算エンジンは、直列構成または並列構成をなす、ハードウェアまたはソフトウェアによって実施可能である。次に図4を参照すると、フィードバック・シフト・レジスタ32を利用し、生成多項式P(x)=x+x+1を用いてCRCを計算する、ハードウェア実施例が例示されている。各段31はDタイプ・フリップ・フロップである。図3に関連して上述のように、各段の内容(または、同等に、レジスタ32の状態)は、ベクトルY(n)に対応する。これは、上述のものと同じ生成多項式であるため、シフト・レジスタ32の段31に記憶されているビットは、表1に関して論じた4項表現に対応する。サブメッセージを備えるビットストリームは、一度に1ビットずつ刻時され、シフト・レジスタ32の入力dinに送り込まれる。XORゲート36は、この入力及びビットy(n)に関する段31のQ出力を受信して、ビットy(n)を保持する段31のD入力を形成する。同様に、もう1つのXORゲート36は、ビットy(n)に関する段31のQ出力、並びに、ビットy(n)に関する段31のQ出力を受信して、ビットy(n)に関する段31のD入力を形成する。
CRC計算段にある間、スイッチ33はフィードバック経路34に結合して、必要とされるフィードバックを保持する。各クロック・サイクル毎に、段31の内容によって表わされる4項2進数が、表1に関して既述のように、生成多項式P(x)によって定義されるガロア体の次の状態に進む。受信したサブメッセージに関して、合成サブメッセージには、図1に関連して既述のように、nの0が後続するという点に留意されたい。本発明のCRC計算技法を実施せずに、シフト・レジスタ32を利用する場合、スイッチ33は、これらnのクロック・サイクルにわたって、この位置に保持されることになるが、入力dinにはそれ以上のデータ入力はない。これらnのクロック・サイクルが済むと、スイッチ33は出力doutに結合し、CRCの読み取りが可能になる。
この期間中、スイッチ33は、フィードバック34に結合したままであり、入力dinにはそれ以上のデータ入力はないので、フィードバック・シフト・レジスタ32は、これらnのクロック・サイクルの間、図5のフィードバック・シフト・レジスタ40と同等にすることが可能である。従って、段31は、図4のシフト・レジスタ30に関して既述のように、ベクトルY(n)を定義する4ビットy(n)〜y(n)を記憶する。nの後続する0に処理を加える際、図4の入力dinは、常に0であるため、ビットy(n)を保持する段31への入力にはXORゲート36は存在しない。段31に記憶されているビットy(n)〜y(n)は、表1に記載のように、P(x)によって生成されたガロア体の要素の1つに相当する。y(n)〜y(n)を定義することによって、シフト・レジスタ40は、その現在の状態(現在のクロック・サイクルに対応し、4ビット・ベクトルY(n)として表示される)が、これらのビットの現在値によって得られる、有限状態マシンを形成することが可能である。シフト・レジスタ40の次の状態Y(n+1)(次のクロック・サイクルに対応する)は、線形関係Y(n+1)=AY(n)によって、現在の状態Y(n)から計算されるが、ここで、Aは状態遷移行列であり、モジュロ2の演算が行われる(すなわち、加算はXOR演算である)。状態遷移行列Aの列は、状態の2進表現である(そのべき表現による)、すなわち、α、α、α、及び、α。従って、この特定の生成多項式に関する状態遷移行列Aは、下記の式2によって示される。
Figure 0004643957
図4のシフト・レジスタ32におけるサブメッセージの処理が済むと(すなわち、サブメッセージの全てが刻時されて、このレジスタに送り込まれると)、シフト・レジスタ32は、nの状態を進めて、CRCを調整し、対応する合成サブメッセージに関するインクリメンタルCRCを決定することができるようにしなければならないという点に留意されたい。この調整前に、シフト・レジスタ32の段31は、サブメッセージに関する未調整CRCを記憶する。nクロック・サイクルにわたって待機するのではなく、最適方法の下記ステップによって、できるだけ少ないlog(n)のクロック・サイクルで、サブメッセージのCRCが調整されることになる。
シフト・レジスタ32の状態は15しかないので、後続する0の数nが15を超えても、シフト・レジスタ32の進めなければならない状態Nの実際の数は、n mod 15である。従って、nは4項数Nとして表わすことが可能である。ここで、Nはnのモジュロ(2−1)、すなわち、N=n mod(2−1)である。最初のステップとして、最上位ビットから始めて、Nの各ビットが検査される。Nの検査される各ビット毎に、0か1かにかかわらず、図3に関連して既述のシフト・レジスタ30を利用して、シフト・レジスタ32の内容が体二乗される。さらに、検査される1に等しい各ビット毎に、シフト・レジスタ32の内容は、1状態だけ進められる。Nの全ビットの検査が済むと、サブメッセージのCRCの調整が済み、対応する合成サブメッセージのインクリメンタルCRCが形成されることになる。
図6には、最適方法のフローチャートが例示されている。この方法の最初のステップとして、ステップ41において、サブメッセージのmビットCRCが計算され、mビットメモリロケーションに記憶される。対応する合成サブメッセージは、nの後続する0が含まれることになる。ステップ42では、N=n mod(2−1)の各ビットが、最上位ビットから最下位ビットへと順番に検査される。ステップ43では、Nの検査される各ビット毎に、mビットメモリロケーションの内容が体二乗される(field squared)。最後に、ステップ44において、Nの検査ビットが1に等しい場合には、mビットメモリロケーションの内容が、CRC生成多項式によって定義されるガロア体によって決まる、次の状態に進められる。Nのビットに未検査のままのものがあれば、全てのビットの検査が済むまで、ステップ43及び44が繰り返される。
前述の方法は、Nの各ビット毎に2クロック・サイクルを要する可能性がある(Nの検査ビットが1に等しい場合、体二乗ステップに1クロック・サイクルと、もしかすると、状態を進めるステップにもう1クロック・サイクル)。正方行列Sとステッピング行列Aをあらかじめ組み合わせることによって、単一クロック・サイクルで両方の変換(二乗及びステッピング)を実施することが可能になる。二乗して、新しい行列B=ASが必要になると、状態を1つ進めなければならない。ベクトルY(n)によって表わされるクロック・サイクルnにおけるm項CRCが与えられると、Y(n+1)によって表わされるクロック・サイクルn+1におけるm項CRCが、線形関係Y(n+1)=BY(n)によって得られることになる。行列A及びSが上述のとおりであれば、生成多項式P(x)=x+x+1に関するB行列は、下記の式3によって示される。
Figure 0004643957
次に、図7を参照すると、1クロック・サイクルで体二乗(field squaring)とステッピングの組合せを実施するためのシフト・レジスタ45が例示されている。段31には、1クロック・サイクルで調整されることになる、CRCビットが記憶されている。図5に関連して上述のように、記憶ビットは、ベクトルY(n)=[y(n)y(n)y(n)y(n)]を形成するものとみなすことが可能である。シフト・レジスタ45と行列Bの比較によって、シフト・レジスタ45による体二乗とステッピングの組合せの実施方法が明らかになる。例えば、行列Bによって明らかなように、ビットy(n+1)は、ビットy(n)、y(n)、及び、y(n)のモジュロ2加算に等しい。従って、シフト・レジスタ45は、xで表示された段31への入力に、XORゲート47を備えており、この場合、XORゲート47は、ビットy(n)、y(n)、及び、y(n)を記憶している段31からの出力を受信する。
次に図8を参照すると、mビットCRC調整を実施するための状態マシン100は、例えば、ビットM及びMによって決まる4つの動作モードを備えることになる。状態マシン100のCRC生成多項式は、図2〜図5に関連して上述の通りである。この生成多項式は、一例として用いられているが、明らかに、状態マシン100は、生成多項式が要求されるいかなるものにも対応するように一般化することが可能である。Dタイプ・フリップ・フロップ31は、多項式表現x〜xに対応するCRCビットを記憶する。これらのビットは、各レジスタ31を制御するクロック・サイクルに関して定義される。従って、レジスタ31のQ出力は、n番目のクロック・サイクルに対応し、一方、レジスタ31のD入力は、(n+1)番目のクロック・サイクルにおけるQ出力に対応する。ビットM及びMは、4:1マルチプレクサ110を制御する。各4:1マルチプレクサによって、そのレジスタ31に関するD入力が得られる。
各マルチプレクサ110は、0〜3の番号が付いた4つの入力を備えている。M=0及びM=0の場合、マルチプレクサ110は、0番の入力を選択する。M=0及M=1の場合、マルチプレクサ110は、1番の入力を選択する。M=1及びM=0の場合、マルチプレクサ110は、2番の入力を選択する。最後に、M=1及びM=1の場合、マルチプレクサ110は、3番の入力を選択する。従って、動作モードは次の通りになる。
状態マシン100の第1のモードでは、最上位から最下位への順に、ビットI、I、I、及び、Iによって表わされるサブメッセージのCRCを受信することによって初期化される。この第1のモードは、ビットM及びMを、それぞれ、0及び0に設定することによって、マルチプレクサ110によって選択される。第2のモードでは、状態マシンは、現在の状態を表わす、状態マシンに記憶されているmビットを体二乗する。この第2のモードは、ビットM及びMを、それぞれ、0及び1に設定することによって、マルチプレクサ110によって選択される。第3モードでは、状態マシンは、現在の状態を表わすその記憶ビットを次の状態に進める。この第3のモードは、ビットM及びMを、それぞれ、1及び0に設定することによって、マルチプレクサ110によって選択される。最後に、第4のモードにおいて、状態マシンは、現在の状態を表わすその記憶ビットを体二乗することと、次の状態に進めることの両方を実施する。この第4のモードは、ビットM及びMを、それぞれ、1及び1に設定することによって、マルチプレクサ110によって選択される。好都合なことには、体二乗演算の複雑性(基本的に、両方のオペランドが同じ、体乗数である)は、ステッピング変換と同等である。この同等の複雑性は、モジュロP(x)及びモジュロ2演算の結果である。対照的に、一般的な2進数の乗数ははるかに複雑になる。
CRCを調整するための最適方法は、単一累算器を用いて、整数のべき乗を実施する先行技術によるアルゴリズムと同様であるという点に留意されたい。このアルゴリズムは次の通りである。βの計算が要求されるものと仮定する。累算器は、1によって初期化され、指数nの2進表現が、最上位ビット(msb)が最初にくる順序で、検査される。nの全ビットについて、累算器の現在の内容が二乗される。二乗した後、1に等しいnの全ビットについて、累算器の内容にβが掛けられる。nの全ビットの検査が済むと、累算器はβを保持する。例えば、βのn=5乗が要求されるものと仮定する。下記の表2には、累算器を1に初期化する方法、及び、nのビットの検査時に、各ステップ毎に、その内容を変換する方法が示されている。最後のステップが済むと、累算器には、予想通り、β(116*β4*β)が含まれている。このアルゴリズムがうまく働く理由は、指数をそのべきに分解すると、所望の結果βをβ+βと書くことが可能であり、nが1を備える場合には必ず、新しい因数としてβを導入することによって、そのβ因数(及び他の全て)が適正な数の二乗を施されることになる。
Figure 0004643957
このアルゴリズムがうまく機能するのは、初期累算器状態が1の場合に限られるという点に留意されたい。従って、このアルゴリズムは、任意の状態から始まることになるCRCの調整問題に直接適用することはできない。
上述のように、m次の原始多項式は、2−1の固有の状態を有している(全て0というわずかなケースを除いて)。原始多項式でプログラムされたCRC計算エンジンの現在の状態が与えられると、次の状態が一意的に定義される。従って、こうしたCRCエンジンは、最適方法の実施中に、次の状態に進めることが可能である。しかし、既約多項式によってプログラムされたCRC計算エンジンも、本発明の最適方法を実施することが可能である。例えば、P(x)=x+x+x+x+1によって示される既約多項式について考察することにする。この既約多項式の帰納式はx=x+x+x+1になり、これを利用して、下記の表3によって示されたその状態の全てを導き出すことが可能である。
Figure 0004643957
15の固有の状態ではなく(4次の原始多項式に比べると)、固有の状態が5つしかない。しかし、固有の状態数は、15の因数であるので、こうした既約多項式でプログラムされたCRC計算エンジンは、最適方法の要求に応じて、次の状態に進めることが可能である。例えば、4項表現[1000]で示された状態について考察することにする。この状態をα、α、α13のどれとして指定するかに関係なく、次の状態は、一意的に[1111]によって示される。
CRC生成多項式が原始多項式でもなければ、既約多項式でもない、より一般的な事例では、いくつかの状態に関して、下記の状態が一意的に決定されないので、上述の最適方法はうまく帰納しないであろう。これらの状態の場合、CRC計算エンジンは次の状態に進めることができないので、上述の最適方法は破綻する。しかし、CRC計算エンジンの初期開始状態が1に等しい、すなわち、一致する場合、最適方法はこの一般的な事例でも有効に機能する。さらに、図10〜図12に関連して後述するように、CRC生成多項式を因数に分解することによって、最適方法は、一般的な事例においてもうまく機能することになる。
本発明の代替実施態様によれば、生成多項式の形式に関係なく(すなわち、生成多項式が原始多項式か、既約多項式かに関係なく)、常にうまく機能するCRC調整方法が得られる。本明細書において用いられる限りにおいて、この方法は、「一般的方法」と呼ぶことにする。最適方法に比べると、一般的方法は低速である。しかし、一般的方法は、現在知られている方法よりもCRCの調整がはるかに高速であり、最適方法の利点の大部分を共有している。
一般的方法は、(xy)mod m=(x mod m y mod m)mod mというモジュラ演算からの周知の関係を利用する。ここで、x、y、及び、mは整数である。この関係は、x、y、及び、mが多項式である場合にも当てはまる。メッセージ多項式のCRC計算は、数学的には、モジュロCRC多項式演算によるメッセージ多項式の剰余の計算と説明することが可能である。単純化のため、通常、mビットCRCの場所をあけるため、メッセージにxをあらかじめ掛けておくという点は無視することにする。
合成サブメッセージ多項式は、サブメッセージ多項式とxの積として表わすことが可能である(多項式は、1にnの0が後続するビット・ストリームに相当する)。ここで、nは後続する0(trailing zeros)の数である。モジュラ演算からの上述の数学的関係を利用して、調整(インクリメンタル)CRC、すなわち[xA(x)]mod P(x)を計算することが可能である。ここで、nは後続する0の数であり、P(x)は生成多項式であり、A(x)はサブメッセージ多項式である。上記関係を利用すると、上記は[xmodP(x)A(x)modP(x)]modP(x)に等しいと云える。
次に、図9aを参照すると、一般的方法を要約したフローチャートが例示されている。一般的方法では、ステップ50において、後続する0のない(すなわち、位置を考慮しない)、サブメッセージのCRCである、A(x)modP(x)を計算する。ステップ51では、単一ルックアップ・テーブルを用いて、x modP(x)を計算する。このステップは、ステップ50と並行して実施することが可能である。最後に、ステップ52では、ステップ50及び51の結果に体乗算を施し、P(x)による体除算を施すことによって、それらの結果を組み合わせる。その剰余によって、調整(adjusted)CRCが得られる。
ステップ51において実施されるテーブル・ルックアップは、xを2のべきに因数分解し、さらに、乗算することによって実施可能である。例えば、x27=x16が、結果として、x16modP(x)、xmodP(x)、xmodP(x)、及び、x modP(x)になり、さらに、このルックアップ結果が掛け合わせられる。次に、図9bを参照すると、この特定のテーブル・ルックアップ方法が例示されている。ステップ51aでは、nが2のべきに因数分解される。ステップ51bでは、各因数が、テーブル・ルックアップされ、さらに掛け合わせられる。nのこの因数分解によって、必要とされるルックアップ・テーブルのサイズが最小限に抑えられる。nがP(x)の次数より小さい場合、テーブル・ルックアップの必要がなくなり、多項式が単一項を備えるので、乗算は、ただ単に左にシフトすることから構成されるという点に留意されたい。
一般的方法では、必要とされるのは剰余だけなので、2つの短い(CRCと同じサイズ)多項式の体乗算を行い、同時にP(x)によるそれらの体除算を行う。P(x)による体除算は、標準的なCRC計算エンジンによって実施可能である。しかし、乗算は、大規模なCRCの場合、最適な方法よりも強い計算力を必要とする。また、一般的方法は、ルックアップ・テーブルを必要とする。指数nを2のべきに因数分解する場合、一般的方法による2nビットのメッセージ・サイズの処理には、n項目のルックアップ・テーブルを必要とする。各項目は、CRCと同じサイズである。例えば、32ビットCRCを備えた16Kバイトのメッセージ・サイズは、多くとも17の32ビット項目からなるテーブルを必要とする。
最適方法と一般的方法のいずれを実施するかには関係なく、本発明によれば、先行技術によって可能になるよりも速いCRC計算が可能になる。さらに、ソフトウェアで実施される本CRC計算技法では、メッセージ全体を受信するハードウェア・オフロード計算エンジンが用いられる。本発明を利用すると、メッセージをいくつかのサブメッセージに分割することが可能になり、各サブメッセージは、他のエンジンと並列に機能する、それ自体のCRC計算エンジンによって処理される。次に、ハードウェアまたはソフトウェアを利用して、サブメッセージの調整CRCをまとめることによって、メッセージCRCの計算が可能になる。こうして、CRC計算の並列化が可能になる。
さらに、固定体またはメッセージの不変部分の事前計算を実施することによって、本発明によるCRC計算時間を速めることが可能である。例えば、大きい2進ワードにハッシングを施して、テーブルに直接索引付けをするのに利用可能な、固定サイズの小さいワードにすることが可能である。ハッシュ・テーブル・ルックアップの場合、大きい2進ワードがテーブル内の項目と関連づけられるが、2進ワードのサイズが大きすぎるので、この2進ワードを直接テーブルに対する索引として利用することはできない。本発明では、大規模な2進ワードの一部があらかじめ分っていれば、ハッシュの事前計算部分が可能になる。
本発明は、アドレスまたはメッセージ内の他のフィールドを変更して、CRCを再計算すれば、経路指定またはスイッチング用途にも適用可能である。ルータまたはスイッチが、パケット内のあるフィールドの値を変更する場合、本発明を利用して、CRCを調整するに要する時間は、メッセージ全体の新しいCRCを計算するのに比べて、大幅に短縮される。さらに、新しいCRCを計算するのではなく、CRCに対する調整を計算することによって、パケットは、ルータまたはスイッチ内にある間、ずっと誤りから保護され続けることになる。新しいCRCが計算され、もとのCRCの検査と新しいCRCの計算との間において、スイッチ/ルータに誤りが生じた場合、誤りによって損なわれているにもかかわらず、パケットのCRCは良好になる。本発明が、パケット内のフィールドに対する変更に関して用いられる場合、CRC調整は、変更されたビットに基づいて計算される。換言すれば、CRC調整は、新フィールド値と旧フィールド値のXORに基づくものである。あるいはまた、CRC調整は、旧フィールド値から減算され、新フィールド値のために加算される。
本発明の他の用途には、ハードウェア障害検出のための符号解析、誤り訂正技法におけるシンドロームの計算、及び、ガロア体からの全要素のいくつかのシーケンスを生成する回路のn状態にわたる迅速なスキップが含まれる。さらに、本発明を利用して、多項式が原始多項式であるか否かを判定することが可能である。多項式が原始多項式であるか否かを判定するための従来の技法には、CRCをある値に初期化し、次に、全状態をサイクル操作して、多項式が最大長であるか否かを判定することが必要になる。こうした技法の操作数は、サイクル長に比例し、多項式の次数に応じて急速に増大する。対照的に、計算が本発明に従って実施される場合には、操作数は、サイクル長の対数に比例し、サイクル長に応じてはるかに緩やかに増大する。
今日用いられている最も実用的なCRC生成多項式は、原始多項式(例えば、イーサネット多項式)または原始多項式と多項式x+1の積から構成される合成多項式(例えば、iSCSI多項式)である。m次の合成多項式P(x)は、m未満であるが、0を超える次数の1つ以上の多項式によって割ることが可能である。合成多項式は、最適方法に関して上述の制約条件を満たさない。しかし、本発明の実施態様の1つによれば、最適方法をiSCSI多項式を含む合成多項式に適用可能にする技法が得られる。
本発明の形態の1つは、その因数が相対的に素数である合成多項式に適用される。最も実用的な多項式は、原始多項式、または、共通因数のない(すなわち、相対的に素数である)2つの多項式の積である。実際、因数の1つは、通常、素数で、もう1つの因数は、通常、x+1(やはり素数)であり、従って、これらの因数は相対的に素数である。こうした合成多項式の場合、多項式に関する中国式剰余定理(Chinese Remainder Theorem)によって、合成剰余(composite remainder)(すなわち、合成多項式を用いて計算されたCRC)と個々の剰余(合成多項式の因数を用いて計算されたCRC)との間に固有の1対1の写像が生じることが保証される。本発明の形態の1つによれば、個々の剰余から合成剰余への写像を決定する方法が得られる。
図10は、本発明の実施態様の1つに従って、合成CRC生成多項式に基づくインクリメンタルCRCを生成するための第1の方法200を例示したデータ流れ図である。図11は、本発明の実施態様の1つに従って、合成CRC生成多項式に基づくインクリメンタルCRCを生成するための第2の方法300を例示したデータ流れ図である。図10及び図11について解説する前に、これらの図において用いられる記号のいくつかについて定義することにする。
1.A(x)はサブメッセージ(すなわち、0が後続しないサブメッセージ・データ)を表わす多項式である。
2.P(x)は合成CRC生成多項式である。
3.P1(x)はP(x)の第1の因数である。
4.P2(x)はP(x)の第2の因数である(x+1がP(x)の因数の1つである場合、因数x+1がP2(x)になる)。
5.Rp(x)は合成部分(未調整)剰余またはCRCである(すなわち、Rp(x)=A(x) mod P(x))。
CRC生成多項式P(x)が素数である場合、サブメッセージA(x)の未調整CRCであるRp(x)は、サブメッセージA(x)を生成多項式P(x)で割ることによって計算可能である。また、未調整CRCであるRp(x)は、上述の最適方法を用いて、未調整CRCであるRp(x)を調整することにより、調整またはインクリメンタルCRCであるR(x)を求めることが可能である。CRC生成多項式P(x)が素数でなく、少なくとも2つの因数P1(x)及びP2(x)から構成される場合、図10及び図11に関連して後述するように、最適方法を利用することも可能である。
図10に示すように、第1の方法200のステップ204では、サブメッセージ202(A(x))を第1の因数P1(x)で割って、第1の因数の部分剰余206(R1p(x))を求める。ステップ204における除算は、下記の式4によって表わされる。
式4
R1p(x)=A(x)mod P1(x)
メッセージの同じパスの間に、ステップ212において、サブメッセージ202(A(x))を第2の因数P2(x)で割って、第2の因数の部分剰余214(R2p(x))を求める。ステップ212における除算は、下記の式5によって表わされる。
式5
R2p(x)=A(x)mod P2(x)
ステップ208では、合成サブメッセージにおける後続する0の数nに基づいて、第1の因数の部分剰余206(R1p(x))を調整することにより、第1の因数の調整剰余210(R1(x))を生成する。ステップ208における調整は、下記の式6によって表わされる。
式6
R1(x)=R1p(x)xmod P1(x)=Rp(x)xmod P1(x)
同様に、ステップ216において、合成サブメッセージにおける後続する0の数nに基づいて、第2の因数の部分剰余214(R2p(x))を調整することにより、第2の因数の調整剰余218(R2(x))を生成する。ステップ216における調整は、下記の式7によって表わされる。
式7
R2(x)=R2p(x)xmod P2(x)=Rp(x)xmod P2(x)
実施態様の1つでは、因数P1(x)及びP2(x)が既約数であるため、ステップ208及び216において実施される調整は、上述の最適方法を利用することによって加速される。
ステップ220では、Rp(x)の調整バージョンである、調整合成剰余またはインクリメンタルCRC222(R(x))が、さらに詳細に後述する写像によって、個別剰余R1(x)及びR2(x)から求められる。
図11は、本発明の実施態様の1つに従って、合成CRC生成多項式に基づくインクリメンタルCRCを生成するための第2の方法300を例示したデータ流れ図である。ステップ304では、サブメッセージ302(A(x))の合成部分剰余306(Rp(x))が、サブメッセージ302(A(x))を合成CRC生成多項式P(x)で割ることによって計算される。従って、第2の方法300の場合、メッセージの処理時に実施される除算は1回だけである。しかし、一般にメッセージよりはるかに短い剰余を、後述するように、CRC多項式の2つの因数によって割ることになる。ステップ304における除算は、下記の式8によって表わされる。
式8
Rp(x)=A(x)mod P(x)
Rp(x)は、後続する0のない(すなわち、位置を顧慮しない)、サブメッセージA(x)のCRCである。P(x)が素数の場合に実施可能なように、最適方法を用いてRp(x)を直接調整するのではなく、第2の方法300のステップ308では、合成部分剰余306(Rp(x))を第1の因数P1(x)で割って、第1の因数の部分剰余310(R1p(x))を求める。ステップ308における除算は、下記の式9によって表わされる。
式9
R1p(x)=Rp(x)mod P1(x)
ステップ316では、合成部分剰余306(Rp(x))を第2の因数P2(x)で割って、第2の因数の部分剰余318(R2p(x))を求める。ステップ316における除算は、下記の式10によって表わされる。
式10
R2p(x)=Rp(x)mod P2(x)
ステップ312では、合成サブメッセージにおける後続する0の数nに基づいて、第1の因数の部分剰余310(R1p(x))を調整して、第1の因数の調整剰余314(R1(x))を生成する。ステップ312における調整は、上述の式6によって表わされる。
同様に、ステップ320では、合成サブメッセージにおける後続する0の数nに基づいて、第2の因数の部分剰余318(R2p(x))を調整して、第2の因数の調整剰余322(R2(x))を生成する。ステップ320における調整は、上述の式7によって表わされる。
実施態様の1つでは、因数P1(x)及びP2(x)が既約数であるため、ステップ312及び320において実施される調整は、上述の最適方法を利用することによって加速される。
ステップ324では、Rp(x)の調整バージョンである、調整合成剰余またはインクリメンタルCRC326(R(x))が、さらに詳細に後述する写像によって、個別剰余R1(x)及びR2(x)から求められる。
本発明の形態の1つでは、方法300のステップ308及び316における合成部分剰余306(Rp(x))の計算が、方法200のステップ204及び212におけるサブメッセージ202の計算よりも短いので、方法300のほうが、方法200よりも望ましい。
方法200(図10)及び方法300(図11)は、P(x)の因数の1つがx+1の場合、単純化される。例えば、P(x)の因数の1つがx+1の場合、ステップ212またはステップ316における除算は、パリティ計算と何ら変わらないので、些細なものである。一例として、第2の方法300では、第2の因子P2(x)がx+1の場合、最適方法を利用して、調整を加速するのではなく、Rp(x)が偶数の1を有する場合には、R2(x)を0に等しくなるように設定し、Rp(x)が奇数の1を有する場合には、R2(x)を1に等しくなるように設定する。P2(x)がx+1でなければ、ステップ316における上記式10に基づいて、R2p(x)を計算し、実施態様の1つでは、上述の最適方法を用いて、ステップ320におけるR2(x)=R2p(x)mod P2(x)の計算を実施する。
R1p(x)の計算は、P(x)の因数の1つがx+1の場合にも単純化される。P2(x)がx+1の場合、P1(x)はP(x)より次数が1だけ小さくなる。「o」がP(x)の次数と仮定すると、R1p(x)は、次のように計算することが可能である。(1)Rp(x)の最上位ビットをテストする、(2)Rp(x)の最上位ビットが0の場合、R1p(x)は、Rp(x)の「o」引く1の最下位ビットになる、(3)Rp(x)の最上位ビットが1の場合、R1p(x)は、Rp(x)とP1(x)のXORの「o」引く1の最下位ビットになる。
P1(x)の次数が、P(x)の次数より少なくとも2だけ小さい(すなわち、P2(x)がx+1ではない)場合、通常のmod2多項式除算を利用して、R1p(x)を求める。この除算は、一度に1ビットずつ処理することによって実施可能である。同時に複数ビットを処理し、1ステップでmod演算を行うCRC方法を利用することも可能である。
次に、ステップ220(図10)及びステップ324(図11)において実施される写像についてさらに詳述することにする。実施態様の1つでは、写像は、R1(x)及びR2(x)の対からR(x)を求めるために利用される、中国式剰余定理に基づく1対1写像である。調整プロセスが上述の通りであり、本明細書において取り扱う問題は、個々の剰余から合成剰余への写像であるため、下記の例において、メッセージがサブメッセージであるという事実は無視される。そのため、メッセージは、A(x)ではなく、M(x)と呼ぶことにする。
例えば、合成CRC生成多項式P(x)がx+x+x+1であると仮定する。この多項式例P(x)の因数は、P2(x)=x+1及びP1(x)=x+x+1である。メッセージM(x)をP1(x)で割った剰余はR1(x)である。同様に、メッセージM(x)をP2(x)で割った剰余はR2(x)である。実施態様の1つにおいて、R1(x)及びR2(x)は、上述の最適方法を用いて計算される。下記の表4には、M(x)をP(x)で割った剰余R(x)と個別剰余R1(x)及びR2(x)を関連づける方法が示されている。
Figure 0004643957
上記表4におけるように、多項式を2値パターンとして2進係数で表わすと、2進係数は、図示のように、最上位ビットが左にくる。
写像を決定するため、下記の式11及び式12によって示されるモジュラ方程式系の解が求められる。
式11
R1(x)=R(x)mod P1(x)
式12
R2(x)=R(x)mod P2(x)
式11及び式12において、P1(x)及びP2(x)は、多項式P(x)の因数であり、R(x)は、メッセージM(x)をP(x)で割った剰余である。見つけたいのは、式11及び式12において示された上記2つのモジュラ多項方程式を満たす多項式R(x)である。これは、事前に計算することが可能であり、ある特定のCRC多項式P(x)に関して一定である。実施態様の1つでは、メッセージM(x)によって左右されない写像が前もって分るので、個別剰余R1(x)及びR2(x)から合成剰余R(x)への写像は、決まった組み合わせ論理を用いて実施される。
表4における4つの陰影つき項目(すなわち、第2、第3、第5、及び、第9項目)は、市販の数学的計算ソフトウェア・パッケージを利用して、式11及び式12で示されたモジュラ方程式系を解くことによって、生成されたものである。この4つの陰影つき項目に関して、R1(x)及びR2(x)を含む入力パターンが単一の「1」を備えるという点に留意されたい。
表4の陰影なし行の全項目は、下記のように、陰影つき行の項目から導き出すことが可能である。個別剰余R1(x)及びR2(x)を連結することによって形成された陰影なし入力パターンについて考察することにする。その陰影なし入力パターンに対応する出力パターンR(x)を求めるため、陰影なし入力パターンを得るのにXOR演算を施す必要のある、陰影つき入力パターンが識別される。識別された陰影つき入力パターンに対応する出力パターン列R(x)の項目にXOR演算を施すと、そのXORの結果が所望の陰影なし出力パターンになる。
例えば、R1(x)が011で、R2(x)が1(すなわち、表4の第8行に示す入力パターン)の場合にR(x)を求めるために、陰影つき出力パターン1011、1010、1001のXOR演算が行われる。この結果は、入力パターン0111に対応する出力パターンである、1000になる。
R(x)における各ビットbは、ビットbが出力パターンの1である、各陰影つき項目に関するR1(x)及びR2(x)のビットのXOR演算結果である。R1(x)のビットがa1、b1、及び、c1であって、a1が最上位ビットであり、R2(x)のビットがa2であり、R(x)のビットがa、b、c、及び、dであって、aが最上位ビットであると仮定すると、上記表4を調べることによって、a、b、c、及び、dの値は、それぞれ、下記の式13〜式16に示すように求めることが可能である。
式13
a=a1 XOR b1 XOR c1 XOR a2
式14
b=a1
式15
c=a1 XOR c1 XOR a2
式16
d=a1 XOR b1 XOR a2
図12は、CRC生成多項式例P(x)=x+x+x+1に関して上記式13〜式16によって表わされた写像を実施するための回路400を例示する概略図である。剰余402(R1)の3ビットa1、b1、及び、c1と、剰余406(R2)の1ビットa2は、XORゲート404A〜404C(XORゲート404と総称する)に対する入力として供給される。XORゲート404の出力によって、調整合成剰余408(R)のビットa、c、及び、dが得られるが、調整合成剰余408(R)のビットbは、剰余401(R1)のビットa1と同じである。
望ましい実施態様の解説のため、本明細書では、特定の実施態様が例示され、解説されてきたが、通常の当該技術者には明らかなように、本発明の範囲を逸脱することなく、図示及び解説の特定の実施態様の代わりに、多種多様な代替実施態様及び/または同等実施態様を用いることが可能である。機械、電気機械、電気、コンピュータの技術者であればすぐに分るように、本発明は多種多様な用途において実施することが可能である。本出願は、本明細書において論考の望ましい実施態様に対するいかなる改変または変更をも網羅することを意図したものである。従って、本発明は、明らかに、請求項及びその同等物による制限しか受けないものとする。
サブメッセージに分割されたメッセージと、サブメッセージの1つに対応する合成サブメッセージを表わした図である。 生成多項式に従って4項2進数の体二乗を実施するための回路の論理表現図である。 図2に示す体二乗を実施するためのフィードバック・シフト・レジスタを例示した図である。 CRC計算エンジンとして用いられるフィードバック・シフト・レジスタを例示した図である。 後続するnの0の処理段における、図4のフィードバック・シフト・レジスタを例示した図である。 本発明の実施態様の1つに従ってCRCを調整する方法のフローチャートである。 本発明の実施態様の1つに従って体二乗と状態ステッピングを同時に行うためのフィードバック・シフト・レジスタを例示した図である。 本発明の実施態様の1つに従ってCRCを調整するための4つの動作モードを備えた状態マシンを例示した図である。 本発明の実施態様の1つに従ってCRCを調整する方法に関するフローチャートである。 本発明の実施態様の1つによる図9aの方法に関するテーブル・ルックアップ技法のフローチャートである。 本発明の実施態様の1つに従って合成CRC生成多項式に基づくインクリメンタルCRCを生成するための第1の方法を例示したデータ流れ図である。 本発明の実施態様の1つに従って合成CRC生成多項式に基づくインクリメンタルCRCを生成するための第2の方法を例示したデータ流れ図である。 本発明の実施態様の1つに従って、あるCRC生成多項式例に関して、個別剰余から合成剰余への写像を実施するための回路を例示した概略図である。
符号の説明
14 サブメッセージ・データ
18 合成サブメッセージ・データ
20 nの後続する0
202 サブメッセージ・データ
204 第1の因数
206 第1の剰余
210 第1の剰余の調整バージョン
212 第2の因数
214 第2の剰余
218 第2の剰余の調整バージョン
222 CRC
302 サブメッセージ・データ
304 CRC生成多項式
306 非調整合成剰余
308 第1の因数
310 第1の剰余
314 第1の剰余の調整バージョン
316 第2の因数
318 第2の剰余
322 第2の剰余の調整バージョン
326 CRC

Claims (7)

  1. 少なくとも2つの因数を有するCRC生成多項式に基づいて、合成サブメッセージに関するCRCを生成する方法であって、
    該合成サブメッセージは、サブメッセージ・データ、及びn個の後続するゼロを含み、
    該方法は、
    前記サブメッセージ・データと前記CRC生成多項式の第1の因数に基づいて第1の剰余を生成するステップと、
    前記サブメッセージ・データと前記CRC生成多項式の第2の因数に基づいて第2の剰余を生成するステップと、
    前記合成サブメッセージにおける前記n個の後続するゼロに基づいて、前記第1の剰余及び前記第2の剰余の少なくとも一方を調整するステップと、
    前記第1の剰余及び前記第2の剰余の調整バージョンに基づいて、前記合成サブメッセージに関するCRCを生成するステップと
    を有し、
    前記第1の剰余がmビットの剰余であり、
    前記調整するステップが、
    mビットのメモリロケーションに前記第1の剰余を記憶するステップと、
    N(ここで、N=n mod(2 −1))の各ビットを検査するステップと、
    Nの各ビットの値に基づいて、前記mビットのメモリロケーションの内容を、前記第1の因数によって定義されるガロア体によって決まる次の状態に選択的に進めるステップとを有する、方法。
  2. 少なくとも2つの因数を有するCRC生成多項式に基づいて、合成サブメッセージに関するCRCを生成する方法であって、
    該合成サブメッセージは、サブメッセージ・データ、及びn個の後続するゼロを含み、
    該方法は、
    前記サブメッセージ・データと前記CRC生成多項式の第1の因数に基づいて第1の剰余を生成するステップと、
    前記サブメッセージ・データと前記CRC生成多項式の第2の因数に基づいて第2の剰余を生成するステップと、
    前記合成サブメッセージにおける前記n個の後続するゼロに基づいて、前記第1の剰余及び前記第2の剰余の少なくとも一方を調整するステップと、
    前記第1の剰余及び前記第2の剰余の調整バージョンに基づいて、前記合成サブメッセージに関するCRCを生成するステップと
    を有し、
    前記第1の剰余がmビットの剰余であり、
    前記調整するステップが、
    mビットのメモリロケーションに前記第1の剰余を記憶するステップと、
    最上位ビットから最下位ビットの順番で、N(ここで、N=n mod(2 −1))の各ビットを検査するステップとを有し、
    前記検査される各ビット毎の前記検査操作が、
    前記mビットのメモリロケーションの内容に有限体自乗を施すステップと、
    前記検査されるビットが1の場合、前記mビットのメモリロケーションの内容を、前記第1の因数によって定義されるガロア体によって決まる次の状態に進めるステップとを有する、方法。
  3. 前記第1の剰余を生成するステップが、前記サブメッセージ・データを前記第1の因数で割るステップを有し、
    前記第2の剰余を生成するステップが、前記サブメッセージ・データを前記第2の因数で割るステップを有する、請求項1又は2に記載の方法。
  4. 前記第1の剰余を生成するステップが、前記サブメッセージ・データをCRC生成多項式で割ることによって、非調整合成剰余を生成するステップと、前記非調整合成剰余を前記第1の因数で割ることによって、前記第1の剰余を生成するステップとを有し、
    前記第2の剰余を生成するステップが、前記非調整合成剰余を前記第2の因数で割ることによって、前記第2の剰余を生成するステップを有する、請求項1又は2に記載の方法。
  5. 前記CRCを生成するステップが、前記第1及び第2の剰余の前記調整バージョンを対応するCRCに写像するステップを有する、請求項1又は2に記載の方法。
  6. 前記第1及び第2の因数が原始多項式である、請求項1又は2に記載の方法。
  7. 前記第1及び第2の因数が既約多項式である、請求項1又は2に記載の方法。
JP2004270438A 2003-09-22 2004-09-16 メッセージのcrcを計算するための方法 Expired - Fee Related JP4643957B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/668,469 US7458006B2 (en) 2002-02-22 2003-09-22 Methods for computing the CRC of a message from the incremental CRCs of composite sub-messages

Publications (2)

Publication Number Publication Date
JP2005102213A JP2005102213A (ja) 2005-04-14
JP4643957B2 true JP4643957B2 (ja) 2011-03-02

Family

ID=33030243

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004270438A Expired - Fee Related JP4643957B2 (ja) 2003-09-22 2004-09-16 メッセージのcrcを計算するための方法

Country Status (3)

Country Link
US (1) US7458006B2 (ja)
JP (1) JP4643957B2 (ja)
GB (1) GB2406249B (ja)

Families Citing this family (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7458006B2 (en) * 2002-02-22 2008-11-25 Avago Technologies General Ip (Singapore) Pte. Ltd. Methods for computing the CRC of a message from the incremental CRCs of composite sub-messages
US7346757B2 (en) 2002-10-08 2008-03-18 Rmi Corporation Advanced processor translation lookaside buffer management in a multithreaded system
US8176298B2 (en) * 2002-10-08 2012-05-08 Netlogic Microsystems, Inc. Multi-core multi-threaded processing systems with instruction reordering in an in-order pipeline
US9088474B2 (en) * 2002-10-08 2015-07-21 Broadcom Corporation Advanced processor with interfacing messaging network to a CPU
US7924828B2 (en) 2002-10-08 2011-04-12 Netlogic Microsystems, Inc. Advanced processor with mechanism for fast packet queuing operations
US7627721B2 (en) * 2002-10-08 2009-12-01 Rmi Corporation Advanced processor with cache coherency
US8015567B2 (en) 2002-10-08 2011-09-06 Netlogic Microsystems, Inc. Advanced processor with mechanism for packet distribution at high line rate
US8478811B2 (en) * 2002-10-08 2013-07-02 Netlogic Microsystems, Inc. Advanced processor with credit based scheme for optimal packet flow in a multi-processor system on a chip
US20050033889A1 (en) * 2002-10-08 2005-02-10 Hass David T. Advanced processor with interrupt delivery mechanism for multi-threaded multi-CPU system on a chip
US7334086B2 (en) 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US7984268B2 (en) * 2002-10-08 2011-07-19 Netlogic Microsystems, Inc. Advanced processor scheduling in a multithreaded system
US8037224B2 (en) 2002-10-08 2011-10-11 Netlogic Microsystems, Inc. Delegating network processor operations to star topology serial bus interfaces
US7961723B2 (en) * 2002-10-08 2011-06-14 Netlogic Microsystems, Inc. Advanced processor with mechanism for enforcing ordering between information sent on two independent networks
KR20050057698A (ko) * 2003-12-10 2005-06-16 삼성전자주식회사 체크섬을 생성하는 장치 및 방법
US7293206B2 (en) * 2004-09-13 2007-11-06 Avago Technologies General Ip (Singapore) Pte. Ltd. Test data pattern for testing a CRC algorithm
US20080201689A1 (en) * 2005-06-30 2008-08-21 Freescale Semiconductor, Inc. Vector Crc Computatuion on Dsp
US8229109B2 (en) * 2006-06-27 2012-07-24 Intel Corporation Modular reduction using folding
US7827471B2 (en) * 2006-10-12 2010-11-02 Intel Corporation Determining message residue using a set of polynomials
JP2010518464A (ja) * 2007-02-01 2010-05-27 株式会社東芝 半導体記憶装置
US8689078B2 (en) * 2007-07-13 2014-04-01 Intel Corporation Determining a message residue
US8042025B2 (en) * 2007-12-18 2011-10-18 Intel Corporation Determining a message residue
US7886214B2 (en) * 2007-12-18 2011-02-08 Intel Corporation Determining a message residue
US9596324B2 (en) * 2008-02-08 2017-03-14 Broadcom Corporation System and method for parsing and allocating a plurality of packets to processor core threads
WO2009099573A1 (en) * 2008-02-08 2009-08-13 Rmi Corporation System and method for parsing and allocating a plurality of packets to processor core threads
WO2009104260A1 (ja) * 2008-02-20 2009-08-27 三菱電機株式会社 検証装置
US8200616B2 (en) * 2008-12-31 2012-06-12 Nokia Corporation Method, apparatus, and computer program product for polynomial-based data transformation and utilization
US20150339183A1 (en) * 2014-05-21 2015-11-26 Kabushiki Kaisha Toshiba Controller, storage device, and control method
US9680605B2 (en) * 2015-05-15 2017-06-13 Nxp Usa, Inc. Method of offloading cyclic redundancy check on portions of a packet
CN107135139A (zh) * 2016-02-26 2017-09-05 深圳富泰宏精密工业有限公司 调整消息记录的方法及电子装置
CN108628698B (zh) * 2018-05-08 2019-11-05 华为技术有限公司 计算crc编码的方法和装置
CN109861788B (zh) * 2019-01-11 2021-12-10 中电海康集团有限公司 一种并行crc计算的实现方法及装置
FR3108812B1 (fr) * 2020-03-30 2022-03-18 Kalray Circuit de calcul de CRC rapide utilisant un polynôme réducteur reconfigurable au vol

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07504312A (ja) * 1992-12-29 1995-05-11 コーデックス・コーポレイション 効率的なcrc剰余係数発生および検査装置および方法
JPH10510689A (ja) * 1994-12-12 1998-10-13 ブリティッシュ・テレコミュニケーションズ・パブリック・リミテッド・カンパニー 特質データをメインデータのエラーチェック記号にエンコードおよびデコードするデジタル伝送システム
JP2003523682A (ja) * 2000-02-17 2003-08-05 アナログ デバイス インコーポレーテッド Crc、および他の剰余を基本とする符号の生成に用いる方法、装置、製品

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0385923A (ja) * 1989-08-30 1991-04-11 Fujitsu Ltd Crc演算方式
JPH04211547A (ja) * 1990-03-20 1992-08-03 Fujitsu Ltd 同期回路
CA2050123C (en) * 1990-10-11 1997-12-09 Subrahmanyam Dravida Apparatus and method for parallel generation of cyclic redundancy check (crc) codes
US5754564A (en) * 1994-08-24 1998-05-19 Harris Corporation Method of continuous calculation of cyclic redundancy check
DE69731074T2 (de) * 1997-04-30 2005-10-06 Hewlett-Packard Development Co., L.P., Houston Anordnung und Verfahren zur Übertragung von Daten über eine Vielzahl von Kanälen
US7185266B2 (en) 2003-02-12 2007-02-27 Alacritech, Inc. Network interface device for error detection using partial CRCS of variable length message portions
US6038577A (en) 1998-01-09 2000-03-14 Dspc Israel Ltd. Efficient way to produce a delayed version of a maximum length sequence using a division circuit
US5951677A (en) 1998-05-29 1999-09-14 Texas Instruments Incorporated Efficient hardware implementation of euclidean array processing in reed-solomon decoding
KR100302847B1 (ko) * 1998-09-03 2001-11-22 윤덕용 유한필드에서의긴다항식제산장치
US6763492B1 (en) 2000-09-26 2004-07-13 Qualcomm Incorporated Method and apparatus for encoding of linear block codes
US7458006B2 (en) 2002-02-22 2008-11-25 Avago Technologies General Ip (Singapore) Pte. Ltd. Methods for computing the CRC of a message from the incremental CRCs of composite sub-messages
US6904558B2 (en) 2002-02-22 2005-06-07 Agilent Technologies, Inc. Methods for computing the CRC of a message from the incremental CRCs of composite sub-messages

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07504312A (ja) * 1992-12-29 1995-05-11 コーデックス・コーポレイション 効率的なcrc剰余係数発生および検査装置および方法
JPH10510689A (ja) * 1994-12-12 1998-10-13 ブリティッシュ・テレコミュニケーションズ・パブリック・リミテッド・カンパニー 特質データをメインデータのエラーチェック記号にエンコードおよびデコードするデジタル伝送システム
JP2003523682A (ja) * 2000-02-17 2003-08-05 アナログ デバイス インコーポレーテッド Crc、および他の剰余を基本とする符号の生成に用いる方法、装置、製品

Also Published As

Publication number Publication date
GB2406249B (en) 2006-05-17
US7458006B2 (en) 2008-11-25
GB0418265D0 (en) 2004-09-15
US20040059984A1 (en) 2004-03-25
GB2406249A (en) 2005-03-23
JP2005102213A (ja) 2005-04-14

Similar Documents

Publication Publication Date Title
JP4643957B2 (ja) メッセージのcrcを計算するための方法
US6904558B2 (en) Methods for computing the CRC of a message from the incremental CRCs of composite sub-messages
JP5164277B2 (ja) 一組の多項式を用いたメッセージ剰余の決定
US4873688A (en) High-speed real-time Reed-Solomon decoder
US7219293B2 (en) High performance CRC calculation method and system with a matrix transformation strategy
JP5384492B2 (ja) メッセージ剰余の決定
US10248498B2 (en) Cyclic redundancy check calculation for multiple blocks of a message
JPH09507117A (ja) リードソロモン復号化器
JP4777258B2 (ja) ガロア体乗算のためのルックアップテーブルを使用するリード・ソロモン符号の符号化および復号化
JPH09507110A (ja) 有限体反転
CN101814922A (zh) 基于bch码的多位错纠错方法和装置以及存储系统
JP2007166031A (ja) Crc値の算出装置
WO2007132656A1 (ja) 誤り訂正符号化方法及び装置
JPH07202715A (ja) 時間定義域代数エンコーダ/デコーダ
JP3305525B2 (ja) 復号器、誤りロケータシーケンス生成器および復号方法
US20020144208A1 (en) Systems and methods for enabling computation of CRC' s N-bit at a time
JP3834122B2 (ja) 誤り位置検出多項式計算装置
JPH11225079A (ja) 新たな多項式配列構造を採用したリード−ソロモン復号器とその復号方法
US20050066257A1 (en) Parallelized CRC calculation method and system
JP3812983B2 (ja) エラー評価多項式係数計算装置
JPH09307458A (ja) エラー訂正向け多項式評価装置
EP0341851A2 (en) Method and apparatus for interleaved encoding
JP3953397B2 (ja) リードソロモン符号化回路およびリードソロモン復号化回路
JPH06230991A (ja) 有限体での任意元素の逆数算出方法及び装置
JPH09246999A (ja) エラー訂正向け多項式評価装置

Legal Events

Date Code Title Description
A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20060629

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20060913

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20061129

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070814

RD03 Notification of appointment of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7423

Effective date: 20071106

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100729

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100806

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20101104

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

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20101203

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131210

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131210

Year of fee payment: 3

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131210

Year of fee payment: 3

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: R3D02

LAPS Cancellation because of no payment of annual fees