(57)【特許請求の範囲】
【請求項１】
少なくとも２つの因数を有するＣＲＣ生成多項式に基づいて、合成サブメッセージに関するＣＲＣを生成する方法であって、
該合成サブメッセージは、サブメッセージ・データ、及びｎ個の後続するゼロを含み、
該方法は、
前記サブメッセージ・データと前記ＣＲＣ生成多項式の第１の因数に基づいて第１の剰余を生成するステップと、
前記サブメッセージ・データと前記ＣＲＣ生成多項式の第２の因数に基づいて第２の剰余を生成するステップと、
前記合成サブメッセージにおける前記ｎ個の後続するゼロに基づいて、前記第１の剰余及び前記第２の剰余の少なくとも一方を調整するステップと、
前記第１の剰余及び前記第２の剰余の調整バージョンに基づいて、前記合成サブメッセージに関するＣＲＣを生成するステップと
を有し、
前記第１の剰余がｍビットの剰余であり、
前記調整するステップが、
ｍビットのメモリロケーションに前記第１の剰余を記憶するステップと、
Ｎ（ここで、Ｎ＝ｎ  ｍｏｄ（２ｍ−１））の各ビットを検査するステップと、
Ｎの各ビットの値に基づいて、前記ｍビットのメモリロケーションの内容を、前記第１の因数によって定義されるガロア体によって決まる次の状態に選択的に進めるステップとを有する、方法。
【請求項２】
少なくとも２つの因数を有するＣＲＣ生成多項式に基づいて、合成サブメッセージに関するＣＲＣを生成する方法であって、
該合成サブメッセージは、サブメッセージ・データ、及びｎ個の後続するゼロを含み、
該方法は、
前記サブメッセージ・データと前記ＣＲＣ生成多項式の第１の因数に基づいて第１の剰余を生成するステップと、
前記サブメッセージ・データと前記ＣＲＣ生成多項式の第２の因数に基づいて第２の剰余を生成するステップと、
前記合成サブメッセージにおける前記ｎ個の後続するゼロに基づいて、前記第１の剰余及び前記第２の剰余の少なくとも一方を調整するステップと、
前記第１の剰余及び前記第２の剰余の調整バージョンに基づいて、前記合成サブメッセージに関するＣＲＣを生成するステップと
を有し、
前記第１の剰余がｍビットの剰余であり、
前記調整するステップが、
ｍビットのメモリロケーションに前記第１の剰余を記憶するステップと、
最上位ビットから最下位ビットの順番で、Ｎ（ここで、Ｎ＝ｎ  ｍｏｄ（２ｍ−１））の各ビットを検査するステップとを有し、
前記検査される各ビット毎の前記検査操作が、
前記ｍビットのメモリロケーションの内容に有限体自乗を施すステップと、
前記検査されるビットが１の場合、前記ｍビットのメモリロケーションの内容を、前記第１の因数によって定義されるガロア体によって決まる次の状態に進めるステップとを有する、方法。
【請求項３】
前記第１の剰余を生成するステップが、前記サブメッセージ・データを前記第１の因数で割るステップを有し、
前記第２の剰余を生成するステップが、前記サブメッセージ・データを前記第２の因数で割るステップを有する、請求項１又は２に記載の方法。
【請求項４】
前記第１の剰余を生成するステップが、前記サブメッセージ・データをＣＲＣ生成多項式で割ることによって、非調整合成剰余を生成するステップと、前記非調整合成剰余を前記第１の因数で割ることによって、前記第１の剰余を生成するステップとを有し、
前記第２の剰余を生成するステップが、前記非調整合成剰余を前記第２の因数で割ることによって、前記第２の剰余を生成するステップを有する、請求項１又は２に記載の方法。
【請求項５】
前記ＣＲＣを生成するステップが、前記第１及び第２の剰余の前記調整バージョンを対応するＣＲＣに写像するステップを有する、請求項１又は２に記載の方法。
【請求項６】
前記第１及び第２の因数が原始多項式である、請求項１又は２に記載の方法。
【請求項７】
前記第１及び第２の因数が既約多項式である、請求項１又は２に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、誤り検出に関するものであり、とりわけ、到着順に関係なく、サブメッセージの巡回冗長検査を累算する方法に関するものである。
【背景技術】
【０００２】
巡回冗長検査（ＣＲＣ）技法を利用するコーディング・システムは、容易に実施されるが、強力な誤り検出能力は得られない。従って、ＣＲＣ技法は、例えば、ディスク・コントローラ、ＩＰ及びｉＳＣＳＩのようなインターネット・プロトコル、及び、イーサネットを含むネットワーキング・プロトコルにおいて広く用いられている。ＣＲＣ技法では、フレームと称されるデータ・ビットのブロックが、フレーム・チェック・シーケンス（ＦＣＳ）と呼ばれるｍビットの余剰ブロック（extra block）と結合される。パリティ・ビットのようなチェックサム（checksum）とちょうど同じように、ＦＣＳによって伝送される（ｄ＋ｍ）ビットのコードワードに、受信機による誤り検出を可能にする冗長性が導入される。全てのビットが、多項式の２進係数として処理される。受信機は、生成多項式でコードワードを割ることによって（多項式演算を利用して）、受信した（ｄ＋ｍ）ビットのコードワードの誤りを検出する。この割り算による剰余が０の場合、ＣＲＣ操作可能受信機は、伝送されてきたコードワードに誤りが含まれていないものとみなす。
【０００３】
上述のように、いくつかのインターネット・プロトコルは、誤り検出にＣＲＣ符号化を必要とする。これらのプロトコルにおいて、データ・メッセージは、伝送のため、パケット化されるか、サブメッセージに分割される。例えば、ｉＳＣＳＩデータ・メッセージは、そのＣＲＣ  ＦＣＳで保護し、任意の順序で到着可能な複数ＩＰパケット（サブメッセージと称することが可能な）によって伝送することが可能である。しかし、ＦＣＳのＣＲＣ符号化は、もとのデータ・メッセージに基づくものであって、ＩＰパケット／サブメッセージに基づくものではない。従来、受信機は、２つのアプローチの一方によって、結果得られるサブメッセージに対するＣＲＣ計算を実施することが可能である。ＣＲＣ割算／計算を実施する第１のアプローチの場合、従来の受信機は、サブメッセージを累算して、メッセージを再構成し、そのメッセージを生成多項式で割ることが可能である。この割り算の剰余が０である場合、メッセージは誤りがないものとみなされる。この割算は、全てのサブメッセージの受信後に実施されるので、望ましくない遅延を生じさせる待ち時間を伴う。さらに、受信機は、累算サブメッセージを記憶しているメモリに対する読み取りアクセスをしなければならない。こうしたアクセスが実際的であったとしても、メモリ・バスに対する余分なローディングがシステム性能に影響を及ぼすことになる。
【０００４】
あるいはまた、ＣＲＣ計算を実施する第２のアプローチの場合、ＣＲＣ計算エンジンを用いて、順番に到着する各サブメッセージ毎にＣＲＣ割算を実施することによって、ＣＲＣ剰余を計算することが可能である。サブメッセージを順次処理するには、ＣＲＣ計算エンジンが適正な初期状態にあることを保証しなければならない。次に、処理済のサブメッセージが、ＣＲＣ計算エンジンにはアクセスできない、遠隔メモリに送られ、前回のアプローチで受けたメモリ・バスへのローディングが取り除かれる。しかし、第２のアプローチでは、サブメッセージを順番に配信することが必要になるので、サブメッセージの順番が乱れた配信をサポートすることが必要とされるか、または、望ましい場合には、適用できない。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従って、本発明の目的は、到着順に関係なく、サブメッセージのＣＲＣ計算を行うＣＲＣ計算技法を提供することにある。
【課題を解決するための手段】
【０００６】
本発明の形態の１つによれば、少なくとも２つの因数を有するＣＲＣ生成多項式に基づいて、合成サブメッセージに関するＣＲＣを生成する方法が得られる。合成サブメッセージには、サブメッセージ・データと、ｎ個の後続するゼロ（trailing zeros）が含まれている。この方法には、サブメッセージ・データ、及び、ＣＲＣ生成多項式の第１の因数に基づいて第１の剰余を生成するステップが含まれている。第２の剰余は、サブメッセージ・データ、及び、ＣＲＣ生成多項式の第２の因数に基づいて生成される。合成サブメッセージに関するＣＲＣが、第１及び第２の剰余の調整バージョンに基づいて生成される。
【０００７】
発明の種々の態様と特徴は、添付の図面を検討することにより、さらによく理解され得る。
【発明を実施するための最良の形態】
【０００８】
望ましい実施態様に関する以下の詳細な説明では、その一部を形成し、例証のため、本発明を実施することが可能な特定の実施態様を示す、添付の図面が参照される。もちろん、他の実施態様を利用することもできるし、あるいは、本発明の範囲を逸脱することなく、論理的変更を加えることも可能である。従って、以下の詳細な説明は、制限の意味にとるべきではなく、本発明の範囲は、付属の請求項によって定義されている。
【０００９】
図１には、（ｄ＋ｍ）ビット２進メッセージ１０が例示されている。メッセージ１０は、サブメッセージ１２、１４、及び、１６と称されるあるまとまったビットに、任意に分割することが可能である。メッセージ１０は、サブメッセージの非等価演算（modulo-2 summation）として表現することが可能である。しかし、各サブメッセージは、残りのサブメッセージからのデータの代わりに、ゼロで修正しなければならない。例えば、サブメッセージ１４について検討してみることにする。メッセージ１０を形成する非等価演算において用いられるためには、サブメッセージ１４は、合成（composite）サブメッセージ１８としてモデル化しなければならない。以上から明らかなように、合成サブメッセージ１８は、サブメッセージ１２及び１６からのサブメッセージ・データの代わりに、ゼロ２０を有している。このようにしてモデル化されると、各合成サブメッセージの長さ（ビット数）はもとのメッセージ１０と同じになる。
【００１０】
ＣＲＣ計算は、線形変換であるため、メッセージ１０のＣＲＣは、合成サブメッセージ１０のＣＲＣの和である。従来の直列ＣＲＣ計算エンジンを用いて、合成サブメッセージのＣＲＣを計算する場合、ＣＲＣ計算エンジンの初期状態が０であれば、先行する０を無視することが可能である。こうした場合、合成サブメッセージに関するＣＲＣの計算を開始するため、計算エンジンは、対応するサブメッセージのＣＲＣ計算から開始することが可能である。しかし、サブメッセージの結果得られるＣＲＣには、合成サブメッセージのＣＲＣを形成するように調整を施さなければならない。本明細書において用いられる限りにおいて、合成サブメッセージのＣＲＣは、インクリメンタル（incremental）ＣＲＣと称される。必要な調整（adjustment）は、後続するゼロ（trailing zeros）と同じ数ｎのクロック・サイクルにわたって、それ以上の入力がないようにして、引き続き計算エンジンをサイクル動作させることによって実施可能である。
【００１１】
「最適方法（optimal method）」と称される本発明の第１の実施態様では、ｎの後続するゼロを備えた合成サブメッセージに対応するサブメッセージのＣＲＣは、インクリメンタルＣＲＣを形成するように、ｌｏｇ  ｎのクロック・サイクルで調整することが可能である。次に、これらのインクリメンタルＣＲＣに任意の順番に非等価演算（modulo-2 sum）（排他的論理和演算）を施すと、もとのメッセージに関するＣＲＣを形成することが可能になる。
【００１２】
この最適方法を理解するには、通常の当該技術者にとっては周知のいくつかの符号化概念について十分に理解しておかなければならない。例えば、体（field）は、それによって２つの２項演算（binary operation）が定義される要素の集合である。これらの２項演算は、「加算」及び「乗算」と称することが可能である。しかし、加算及び乗算の通常の２項演算との混同を避けるため、これらの体の２項演算は、それぞれ、記号「＋」及び「＊」を用いて、「体加算」及び「体乗算」と称することにする。他の要件に加えて、２つの体要素間のいずれかの２項演算結果が、体内の別の要素に等しくなければならない。有限数の要素を備えた体が、とりわけ問題となり、「ガロア体（Galois field）」と呼ばれる。
【００１３】
最も単純なガロア体は、ＧＦ（２）として表わされる２進数｛１，０｝の集合である。この場合、体加算及び体乗算の２項演算は、おなじみのモジュロ２加算及びモジュロ２乗算である。符号化理論家は、ＧＦ（２）を利用して、ＧＦ（２ｍ）として表わされる２ｍの要素を備えた拡大ガロア体を作成することが可能である。こうした作成を開始するため、その係数がＧＦ（２）からのものである単一変数ｘを備えた多項式について考察することにする。本明細書において用いられる限りにおいて、「多項式」は、ＧＦ（２）からの係数を備える多項式だけを表わしている。その非ゼロの係数を備えたｘの最大べき指数がｍである、１つの変数ｘを備える多項式は、次数がｍと言われる。例えば、多項式Ｐ（ｘ）＝ｘ４＋ｘ＋１は次数が４である。さらに本明細書において解説されるように、既約多項式（irreducible polynomial）及び原始多項式（primitive polynomial）という、２つのタイプの多項式が、最適方法にとって特に重要である。ｍ次の既約多項式Ｐ（ｘ）は、１以上ｍ―１以下の次数の多項式で割ることはできない。原始多項式Ｐ（ｘ）は、多項式ｘｎ＋１をＰ（ｘ）で割り切ることができるｎのうち最小のものがｎ＝２ｍ−１となる既約多項式である。
【００１４】
ｍ次の原始多項式を利用して、ガロア体ＧＦ（２ｍ）の要素を生成することが可能である。例えば、原始多項式Ｐ（ｘ）＝１＋ｘ＋ｘ４について考察することにする。この多項式の次数は４であり、従って、４ビットの２進数（４項表現（4-tuple representation））で表現することが可能である。一般に、ｍ次の原始多項式を利用して、２ｍ−１の固有状態を生成することが可能である（わずかな全ゼロ状態を無視すると）。各状態は、多項式またはｍ項表現をすることが可能である。以下の論考では、慣習上、ｘの変わりに要素αを用いることにする。各多項式は、本明細書においてさらに解説することになる、αのべき（power）で表わすことも可能である（べき表現）。最も単純な４つの多項式は、それぞれ、ただ単に１、α、α２、及び、α３になる。これらの多項式は、それぞれ、０００１、００１０、０１００、及び、１０００としての４項形式（4-tuple form）（最上位ビットを最初にして）に相当する。べき表現は、それぞれ、直接、α０、α１、α２、及び、α３に対応する。生成多項式Ｐ（α）＝１＋α＋α４が０に等しくなるようにすることによって、αのべきをさらに展開することが可能である。これによって、漸化公式（recursive formula）α４＝α＋１が得られることになる。引き続きαを掛け、漸化公式を適用することによって、下記の表１に示すように、αのべきを導き出すことが可能である。
【表１】
0004643957.tif 000002
【００１５】
表１を検討すると明らかなように、このガロア体のそれぞれの要素は、有限状態マシンにおける状態とみなすことが可能である。例えば、状態マシンが状態０１１０（α５）状態にある場合、次の状態は１１００（α６）になる。ある特定の状態について、次の状態はαを掛けることによって得られる。
【００１６】
本発明にとって重要なもう１つの概念は、多項式Ｐ（ｘ）によって生成されるガロア体ＧＦ（２ｍ）内の要素を有限体二乗（finite field squaring）する概念である。一例として、やはり、生成（及び原始）多項式Ｐ（α）＝１＋α＋α４について考察することにする。結果得られるガロア体ＧＦ（２ｍ）内の多項式要素の１つ（ｂ３α３＋ｂ２α２＋ｂ１α＋ｂ０として表わされる）が、有限体二乗される場合、その結果が、ｂ３α６＋ｂ２α４＋ｂ１α２＋ｂ０になるのは明らかである。帰納式α４＝α＋１を利用することによって、その結果はｂ３α３＋（ｂ１＋ｂ３）α２＋ｂ２α＋（ｂ０＋ｂ２）になる。従って、表１からの任意の４項要素［ｂ３，ｂ２，ｂ１，ｂ０］が与えられると、それが、図２に示す回路２４によって有限体二乗されて、４項要素［ｃ３，ｃ２，ｃ１，ｃ０］を生じることになる。モジュロ２加算は、排他的論理和演算に相当するので、係数ｂ３、ｂ２、ｂ１、ｂ０のモジュロ２加算は、ＸＯＲゲート２６で実施される。一般に、ｍ次の生成多項式Ｐ（ｘ）の場合、ｍ項２進数の有限体二乗は、モジュロＰ（ｘ）のｍ項（m-tuple）２進数の自乗に相当するという点に留意されたい。
【００１７】
次に図３を参照すると、４項２進数を二乗する体を実施するためのシフト・レジスタ３０が示されており、ここで、体は、多項式Ｐ（ｘ）＝ｘ４＋ｘ＋１によって生成される。各段（stage）３１は、Ｄタイプ・フリップ・フロップである。段（stage）３１には、結果生じる４項２進数の４ビットが記憶される。この４項２進数は、多項式とみなすことができるので、従って、段３１は、ｘ０項〜ｘ３項で表示される。従って、各段３１の内容は、対応する多項式の因数の係数とみなすことが可能である。これらの係数は、４ビット・ベクトルＹ（ｎ）＝［ｙ０，ｙ１，ｙ２，ｙ３］として表わすことが可能である。ここで、ｙ３〜ｙ０は、それぞれ、段３１  ｘ３〜ｘ０の内容に対応する。ベクトルＹ（ｎ）は、シフト・レジスタ３０の状態とみなすことも可能である。段３１が刻時される毎に、４項２進数は体二乗される。ＸＯＲゲート２６によって、図２と同じ機能が得られる。図３のシフト・レジスタ３０と図２に例示の二乗変換の比較によって、同一性が例証されている。例えば、ｙ０（ｎ＋１）＝ｙ０（ｎ）＾ｙ２（ｎ）になるが、ここで、＾はＸＯＲ演算を表わしている。レジスタ３０の次の状態Ｙ（ｎ＋１）がＹ（ｎ）から導き出される。この次の状態が、式Ｙ（ｎ＋１）＝ＳＹ（ｎ）によって得られるが、ここで、Ｓは下記の式１によって示される正方行列である。
【数１】
0004643957.tif 000003
【００１８】
正方行列の各行は、シフト・レジスタ３０を調べることから導き出すことが可能である。例えば、シフト・レジスタ３０から、ｙ１（ｎ＋１）＝ｙ２（ｎ）であることが分る。従って、ｙ１（ｎ＋１）＝［００１０］［ｙ０（ｎ）ｙ１（ｎ）ｙ２（ｎ）ｙ３（ｎ）］Ｔになるが、ここで、Ｔは転置操作を表わしている。
【００１９】
これらの概念を念頭において、本発明の最適方法についてさらに論考することにする。この方法では、従来のＣＲＣ計算エンジンを利用して、合成サブメッセージのインクリメンタルＣＲＣを計算する。周知のように、こうしたＣＲＣ計算エンジンは、直列構成または並列構成をなす、ハードウェアまたはソフトウェアによって実施可能である。次に図４を参照すると、フィードバック・シフト・レジスタ３２を利用し、生成多項式Ｐ（ｘ）＝ｘ４＋ｘ＋１を用いてＣＲＣを計算する、ハードウェア実施例が例示されている。各段３１はＤタイプ・フリップ・フロップである。図３に関連して上述のように、各段の内容（または、同等に、レジスタ３２の状態）は、ベクトルＹ（ｎ）に対応する。これは、上述のものと同じ生成多項式であるため、シフト・レジスタ３２の段３１に記憶されているビットは、表１に関して論じた４項表現に対応する。サブメッセージを備えるビットストリームは、一度に１ビットずつ刻時され、シフト・レジスタ３２の入力ｄｉｎに送り込まれる。ＸＯＲゲート３６は、この入力及びビットｙ３（ｎ）に関する段３１のＱ出力を受信して、ビットｙ０（ｎ）を保持する段３１のＤ入力を形成する。同様に、もう１つのＸＯＲゲート３６は、ビットｙ０（ｎ）に関する段３１のＱ出力、並びに、ビットｙ３（ｎ）に関する段３１のＱ出力を受信して、ビットｙ１（ｎ）に関する段３１のＤ入力を形成する。
【００２０】
ＣＲＣ計算段にある間、スイッチ３３はフィードバック経路３４に結合して、必要とされるフィードバックを保持する。各クロック・サイクル毎に、段３１の内容によって表わされる４項２進数が、表１に関して既述のように、生成多項式Ｐ（ｘ）によって定義されるガロア体の次の状態に進む。受信したサブメッセージに関して、合成サブメッセージには、図１に関連して既述のように、ｎの０が後続するという点に留意されたい。本発明のＣＲＣ計算技法を実施せずに、シフト・レジスタ３２を利用する場合、スイッチ３３は、これらｎのクロック・サイクルにわたって、この位置に保持されることになるが、入力ｄｉｎにはそれ以上のデータ入力はない。これらｎのクロック・サイクルが済むと、スイッチ３３は出力ｄｏｕｔに結合し、ＣＲＣの読み取りが可能になる。
【００２１】
この期間中、スイッチ３３は、フィードバック３４に結合したままであり、入力ｄｉｎにはそれ以上のデータ入力はないので、フィードバック・シフト・レジスタ３２は、これらｎのクロック・サイクルの間、図５のフィードバック・シフト・レジスタ４０と同等にすることが可能である。従って、段３１は、図４のシフト・レジスタ３０に関して既述のように、ベクトルＹ（ｎ）を定義する４ビットｙ３（ｎ）〜ｙ０（ｎ）を記憶する。ｎの後続する０に処理を加える際、図４の入力ｄｉｎは、常に０であるため、ビットｙ０（ｎ）を保持する段３１への入力にはＸＯＲゲート３６は存在しない。段３１に記憶されているビットｙ３（ｎ）〜ｙ０（ｎ）は、表１に記載のように、Ｐ（ｘ）によって生成されたガロア体の要素の１つに相当する。ｙ３（ｎ）〜ｙ０（ｎ）を定義することによって、シフト・レジスタ４０は、その現在の状態（現在のクロック・サイクルに対応し、４ビット・ベクトルＹ（ｎ）として表示される）が、これらのビットの現在値によって得られる、有限状態マシンを形成することが可能である。シフト・レジスタ４０の次の状態Ｙ（ｎ＋１）（次のクロック・サイクルに対応する）は、線形関係Ｙ（ｎ＋１）＝ＡＹ（ｎ）によって、現在の状態Ｙ（ｎ）から計算されるが、ここで、Ａは状態遷移行列であり、モジュロ２の演算が行われる（すなわち、加算はＸＯＲ演算である）。状態遷移行列Ａの列は、状態の２進表現である（そのべき表現による）、すなわち、α、α２、α３、及び、α４。従って、この特定の生成多項式に関する状態遷移行列Ａは、下記の式２によって示される。
【数２】
0004643957.tif 000004
【００２２】
図４のシフト・レジスタ３２におけるサブメッセージの処理が済むと（すなわち、サブメッセージの全てが刻時されて、このレジスタに送り込まれると）、シフト・レジスタ３２は、ｎの状態を進めて、ＣＲＣを調整し、対応する合成サブメッセージに関するインクリメンタルＣＲＣを決定することができるようにしなければならないという点に留意されたい。この調整前に、シフト・レジスタ３２の段３１は、サブメッセージに関する未調整ＣＲＣを記憶する。ｎクロック・サイクルにわたって待機するのではなく、最適方法の下記ステップによって、できるだけ少ないｌｏｇ（ｎ）のクロック・サイクルで、サブメッセージのＣＲＣが調整されることになる。
【００２３】
シフト・レジスタ３２の状態は１５しかないので、後続する０の数ｎが１５を超えても、シフト・レジスタ３２の進めなければならない状態Ｎの実際の数は、n mod 15である。従って、ｎは４項数Ｎとして表わすことが可能である。ここで、Ｎはｎのモジュロ（２ｍ−１）、すなわち、Ｎ＝ｎ ｍｏｄ（２ｍ−１）である。最初のステップとして、最上位ビットから始めて、Ｎの各ビットが検査される。Ｎの検査される各ビット毎に、０か１かにかかわらず、図３に関連して既述のシフト・レジスタ３０を利用して、シフト・レジスタ３２の内容が体二乗される。さらに、検査される１に等しい各ビット毎に、シフト・レジスタ３２の内容は、１状態だけ進められる。Ｎの全ビットの検査が済むと、サブメッセージのＣＲＣの調整が済み、対応する合成サブメッセージのインクリメンタルＣＲＣが形成されることになる。
【００２４】
図６には、最適方法のフローチャートが例示されている。この方法の最初のステップとして、ステップ４１において、サブメッセージのｍビットＣＲＣが計算され、ｍビットメモリロケーションに記憶される。対応する合成サブメッセージは、ｎの後続する０が含まれることになる。ステップ４２では、Ｎ＝ｎ  ｍｏｄ（２ｍ−１）の各ビットが、最上位ビットから最下位ビットへと順番に検査される。ステップ４３では、Ｎの検査される各ビット毎に、ｍビットメモリロケーションの内容が体二乗される（field squared）。最後に、ステップ４４において、Ｎの検査ビットが１に等しい場合には、ｍビットメモリロケーションの内容が、ＣＲＣ生成多項式によって定義されるガロア体によって決まる、次の状態に進められる。Ｎのビットに未検査のままのものがあれば、全てのビットの検査が済むまで、ステップ４３及び４４が繰り返される。
【００２５】
前述の方法は、Ｎの各ビット毎に２クロック・サイクルを要する可能性がある（Ｎの検査ビットが１に等しい場合、体二乗ステップに１クロック・サイクルと、もしかすると、状態を進めるステップにもう１クロック・サイクル）。正方行列Ｓとステッピング行列Ａをあらかじめ組み合わせることによって、単一クロック・サイクルで両方の変換（二乗及びステッピング）を実施することが可能になる。二乗して、新しい行列Ｂ＝ＡＳが必要になると、状態を１つ進めなければならない。ベクトルＹ（ｎ）によって表わされるクロック・サイクルｎにおけるｍ項ＣＲＣが与えられると、Ｙ（ｎ＋１）によって表わされるクロック・サイクルｎ＋１におけるｍ項ＣＲＣが、線形関係Ｙ（ｎ＋１）＝ＢＹ（ｎ）によって得られることになる。行列Ａ及びＳが上述のとおりであれば、生成多項式Ｐ（ｘ）＝ｘ４＋ｘ＋１に関するＢ行列は、下記の式３によって示される。
【数３】
0004643957.tif 000005
【００２６】
次に、図７を参照すると、１クロック・サイクルで体二乗（field squaring）とステッピングの組合せを実施するためのシフト・レジスタ４５が例示されている。段３１には、１クロック・サイクルで調整されることになる、ＣＲＣビットが記憶されている。図５に関連して上述のように、記憶ビットは、ベクトルＹ（ｎ）＝［ｙ０（ｎ）ｙ１（ｎ）ｙ２（ｎ）ｙ３（ｎ）］を形成するものとみなすことが可能である。シフト・レジスタ４５と行列Ｂの比較によって、シフト・レジスタ４５による体二乗とステッピングの組合せの実施方法が明らかになる。例えば、行列Ｂによって明らかなように、ビットｙ１（ｎ＋１）は、ビットｙ０（ｎ）、ｙ２（ｎ）、及び、ｙ３（ｎ）のモジュロ２加算に等しい。従って、シフト・レジスタ４５は、ｘ１で表示された段３１への入力に、ＸＯＲゲート４７を備えており、この場合、ＸＯＲゲート４７は、ビットｙ０（ｎ）、ｙ２（ｎ）、及び、ｙ３（ｎ）を記憶している段３１からの出力を受信する。
【００２７】
次に図８を参照すると、ｍビットＣＲＣ調整を実施するための状態マシン１００は、例えば、ビットＭ１及びＭ０によって決まる４つの動作モードを備えることになる。状態マシン１００のＣＲＣ生成多項式は、図２〜図５に関連して上述の通りである。この生成多項式は、一例として用いられているが、明らかに、状態マシン１００は、生成多項式が要求されるいかなるものにも対応するように一般化することが可能である。Ｄタイプ・フリップ・フロップ３１は、多項式表現ｘ３〜ｘ０に対応するＣＲＣビットを記憶する。これらのビットは、各レジスタ３１を制御するクロック・サイクルに関して定義される。従って、レジスタ３１のＱ出力は、ｎ番目のクロック・サイクルに対応し、一方、レジスタ３１のＤ入力は、（ｎ＋１）番目のクロック・サイクルにおけるＱ出力に対応する。ビットＭ１及びＭ０は、４：１マルチプレクサ１１０を制御する。各４：１マルチプレクサによって、そのレジスタ３１に関するＤ入力が得られる。
【００２８】
各マルチプレクサ１１０は、０〜３の番号が付いた４つの入力を備えている。Ｍ１＝０及びＭ０＝０の場合、マルチプレクサ１１０は、０番の入力を選択する。Ｍ１＝０及Ｍ０＝１の場合、マルチプレクサ１１０は、１番の入力を選択する。Ｍ１＝１及びＭ０＝０の場合、マルチプレクサ１１０は、２番の入力を選択する。最後に、Ｍ１＝１及びＭ０＝１の場合、マルチプレクサ１１０は、３番の入力を選択する。従って、動作モードは次の通りになる。
【００２９】
状態マシン１００の第１のモードでは、最上位から最下位への順に、ビットＩ３、Ｉ２、Ｉ１、及び、Ｉ０によって表わされるサブメッセージのＣＲＣを受信することによって初期化される。この第１のモードは、ビットＭ１及びＭ０を、それぞれ、０及び０に設定することによって、マルチプレクサ１１０によって選択される。第２のモードでは、状態マシンは、現在の状態を表わす、状態マシンに記憶されているｍビットを体二乗する。この第２のモードは、ビットＭ１及びＭ０を、それぞれ、０及び１に設定することによって、マルチプレクサ１１０によって選択される。第３モードでは、状態マシンは、現在の状態を表わすその記憶ビットを次の状態に進める。この第３のモードは、ビットＭ１及びＭ０を、それぞれ、１及び０に設定することによって、マルチプレクサ１１０によって選択される。最後に、第４のモードにおいて、状態マシンは、現在の状態を表わすその記憶ビットを体二乗することと、次の状態に進めることの両方を実施する。この第４のモードは、ビットＭ１及びＭ０を、それぞれ、１及び１に設定することによって、マルチプレクサ１１０によって選択される。好都合なことには、体二乗演算の複雑性（基本的に、両方のオペランドが同じ、体乗数である）は、ステッピング変換と同等である。この同等の複雑性は、モジュロＰ（ｘ）及びモジュロ２演算の結果である。対照的に、一般的な２進数の乗数ははるかに複雑になる。
【００３０】
ＣＲＣを調整するための最適方法は、単一累算器を用いて、整数のべき乗を実施する先行技術によるアルゴリズムと同様であるという点に留意されたい。このアルゴリズムは次の通りである。βｎの計算が要求されるものと仮定する。累算器は、１によって初期化され、指数ｎの２進表現が、最上位ビット（ｍｓｂ）が最初にくる順序で、検査される。ｎの全ビットについて、累算器の現在の内容が二乗される。二乗した後、１に等しいｎの全ビットについて、累算器の内容にβが掛けられる。ｎの全ビットの検査が済むと、累算器はβｎを保持する。例えば、βのｎ＝５乗が要求されるものと仮定する。下記の表２には、累算器を１に初期化する方法、及び、ｎのビットの検査時に、各ステップ毎に、その内容を変換する方法が示されている。最後のステップが済むと、累算器には、予想通り、β５（１１６＊β４＊β１）が含まれている。このアルゴリズムがうまく働く理由は、指数をそのべきに分解すると、所望の結果β５をβ４＋β１と書くことが可能であり、ｎが１を備える場合には必ず、新しい因数としてβを導入することによって、そのβ因数（及び他の全て）が適正な数の二乗を施されることになる。
【表２】
0004643957.tif 000006
【００３１】
このアルゴリズムがうまく機能するのは、初期累算器状態が１の場合に限られるという点に留意されたい。従って、このアルゴリズムは、任意の状態から始まることになるＣＲＣの調整問題に直接適用することはできない。
【００３２】
上述のように、ｍ次の原始多項式は、２ｍ−１の固有の状態を有している（全て０というわずかなケースを除いて）。原始多項式でプログラムされたＣＲＣ計算エンジンの現在の状態が与えられると、次の状態が一意的に定義される。従って、こうしたＣＲＣエンジンは、最適方法の実施中に、次の状態に進めることが可能である。しかし、既約多項式によってプログラムされたＣＲＣ計算エンジンも、本発明の最適方法を実施することが可能である。例えば、Ｐ（ｘ）＝ｘ４＋ｘ３＋ｘ２＋ｘ＋１によって示される既約多項式について考察することにする。この既約多項式の帰納式はｘ４＝ｘ３＋ｘ２＋ｘ＋１になり、これを利用して、下記の表３によって示されたその状態の全てを導き出すことが可能である。
【表３】
0004643957.tif 000007
【００３３】
１５の固有の状態ではなく（４次の原始多項式に比べると）、固有の状態が５つしかない。しかし、固有の状態数は、１５の因数であるので、こうした既約多項式でプログラムされたＣＲＣ計算エンジンは、最適方法の要求に応じて、次の状態に進めることが可能である。例えば、４項表現［１０００］で示された状態について考察することにする。この状態をα３、α８、α１３のどれとして指定するかに関係なく、次の状態は、一意的に［１１１１］によって示される。
【００３４】
ＣＲＣ生成多項式が原始多項式でもなければ、既約多項式でもない、より一般的な事例では、いくつかの状態に関して、下記の状態が一意的に決定されないので、上述の最適方法はうまく帰納しないであろう。これらの状態の場合、ＣＲＣ計算エンジンは次の状態に進めることができないので、上述の最適方法は破綻する。しかし、ＣＲＣ計算エンジンの初期開始状態が１に等しい、すなわち、一致する場合、最適方法はこの一般的な事例でも有効に機能する。さらに、図１０〜図１２に関連して後述するように、ＣＲＣ生成多項式を因数に分解することによって、最適方法は、一般的な事例においてもうまく機能することになる。
【００３５】
本発明の代替実施態様によれば、生成多項式の形式に関係なく（すなわち、生成多項式が原始多項式か、既約多項式かに関係なく）、常にうまく機能するＣＲＣ調整方法が得られる。本明細書において用いられる限りにおいて、この方法は、「一般的方法」と呼ぶことにする。最適方法に比べると、一般的方法は低速である。しかし、一般的方法は、現在知られている方法よりもＣＲＣの調整がはるかに高速であり、最適方法の利点の大部分を共有している。
【００３６】
一般的方法は、（ｘ＊ｙ）ｍｏｄ ｍ＝（ｘ ｍｏｄ m ＊ ｙ ｍｏｄ ｍ）ｍｏｄ ｍというモジュラ演算からの周知の関係を利用する。ここで、ｘ、ｙ、及び、ｍは整数である。この関係は、ｘ、ｙ、及び、ｍが多項式である場合にも当てはまる。メッセージ多項式のＣＲＣ計算は、数学的には、モジュロＣＲＣ多項式演算によるメッセージ多項式の剰余の計算と説明することが可能である。単純化のため、通常、ｍビットＣＲＣの場所をあけるため、メッセージにｘｍをあらかじめ掛けておくという点は無視することにする。
【００３７】
合成サブメッセージ多項式は、サブメッセージ多項式とｘｎの積として表わすことが可能である（多項式は、１にｎの０が後続するビット・ストリームに相当する）。ここで、ｎは後続する０（trailing zeros）の数である。モジュラ演算からの上述の数学的関係を利用して、調整（インクリメンタル）ＣＲＣ、すなわち［ｘｎＡ（ｘ）］ｍｏｄ Ｐ（ｘ）を計算することが可能である。ここで、ｎは後続する０の数であり、Ｐ（ｘ）は生成多項式であり、Ａ（ｘ）はサブメッセージ多項式である。上記関係を利用すると、上記は［ｘｎｍｏｄＰ（ｘ）Ａ（ｘ）ｍｏｄＰ（ｘ）］ｍｏｄＰ（ｘ）に等しいと云える。
【００３８】
次に、図９ａを参照すると、一般的方法を要約したフローチャートが例示されている。一般的方法では、ステップ５０において、後続する０のない（すなわち、位置を考慮しない）、サブメッセージのＣＲＣである、Ａ（ｘ）ｍｏｄＰ（ｘ）を計算する。ステップ５１では、単一ルックアップ・テーブルを用いて、ｘｎ  ｍｏｄＰ（ｘ）を計算する。このステップは、ステップ５０と並行して実施することが可能である。最後に、ステップ５２では、ステップ５０及び５１の結果に体乗算を施し、Ｐ（ｘ）による体除算を施すことによって、それらの結果を組み合わせる。その剰余によって、調整（adjusted）ＣＲＣが得られる。
【００３９】
ステップ５１において実施されるテーブル・ルックアップは、ｘｎを２のべきに因数分解し、さらに、乗算することによって実施可能である。例えば、ｘ２７＝ｘ１６ｘ８ｘ２ｘ１が、結果として、ｘ１６ｍｏｄＰ（ｘ）、ｘ８ｍｏｄＰ（ｘ）、ｘ２ｍｏｄＰ（ｘ）、及び、ｘ  ｍｏｄＰ（ｘ）になり、さらに、このルックアップ結果が掛け合わせられる。次に、図９ｂを参照すると、この特定のテーブル・ルックアップ方法が例示されている。ステップ５１ａでは、ｎが２のべきに因数分解される。ステップ５１ｂでは、各因数が、テーブル・ルックアップされ、さらに掛け合わせられる。ｎのこの因数分解によって、必要とされるルックアップ・テーブルのサイズが最小限に抑えられる。ｎがＰ（ｘ）の次数より小さい場合、テーブル・ルックアップの必要がなくなり、多項式が単一項を備えるので、乗算は、ただ単に左にシフトすることから構成されるという点に留意されたい。
【００４０】
一般的方法では、必要とされるのは剰余だけなので、２つの短い（ＣＲＣと同じサイズ）多項式の体乗算を行い、同時にＰ（ｘ）によるそれらの体除算を行う。Ｐ（ｘ）による体除算は、標準的なＣＲＣ計算エンジンによって実施可能である。しかし、乗算は、大規模なＣＲＣの場合、最適な方法よりも強い計算力を必要とする。また、一般的方法は、ルックアップ・テーブルを必要とする。指数ｎを２のべきに因数分解する場合、一般的方法による２ｎビットのメッセージ・サイズの処理には、ｎ項目のルックアップ・テーブルを必要とする。各項目は、ＣＲＣと同じサイズである。例えば、３２ビットＣＲＣを備えた１６Ｋバイトのメッセージ・サイズは、多くとも１７の３２ビット項目からなるテーブルを必要とする。
【００４１】
最適方法と一般的方法のいずれを実施するかには関係なく、本発明によれば、先行技術によって可能になるよりも速いＣＲＣ計算が可能になる。さらに、ソフトウェアで実施される本ＣＲＣ計算技法では、メッセージ全体を受信するハードウェア・オフロード計算エンジンが用いられる。本発明を利用すると、メッセージをいくつかのサブメッセージに分割することが可能になり、各サブメッセージは、他のエンジンと並列に機能する、それ自体のＣＲＣ計算エンジンによって処理される。次に、ハードウェアまたはソフトウェアを利用して、サブメッセージの調整ＣＲＣをまとめることによって、メッセージＣＲＣの計算が可能になる。こうして、ＣＲＣ計算の並列化が可能になる。
【００４２】
さらに、固定体またはメッセージの不変部分の事前計算を実施することによって、本発明によるＣＲＣ計算時間を速めることが可能である。例えば、大きい２進ワードにハッシングを施して、テーブルに直接索引付けをするのに利用可能な、固定サイズの小さいワードにすることが可能である。ハッシュ・テーブル・ルックアップの場合、大きい２進ワードがテーブル内の項目と関連づけられるが、２進ワードのサイズが大きすぎるので、この２進ワードを直接テーブルに対する索引として利用することはできない。本発明では、大規模な２進ワードの一部があらかじめ分っていれば、ハッシュの事前計算部分が可能になる。
【００４３】
本発明は、アドレスまたはメッセージ内の他のフィールドを変更して、ＣＲＣを再計算すれば、経路指定またはスイッチング用途にも適用可能である。ルータまたはスイッチが、パケット内のあるフィールドの値を変更する場合、本発明を利用して、ＣＲＣを調整するに要する時間は、メッセージ全体の新しいＣＲＣを計算するのに比べて、大幅に短縮される。さらに、新しいＣＲＣを計算するのではなく、ＣＲＣに対する調整を計算することによって、パケットは、ルータまたはスイッチ内にある間、ずっと誤りから保護され続けることになる。新しいＣＲＣが計算され、もとのＣＲＣの検査と新しいＣＲＣの計算との間において、スイッチ／ルータに誤りが生じた場合、誤りによって損なわれているにもかかわらず、パケットのＣＲＣは良好になる。本発明が、パケット内のフィールドに対する変更に関して用いられる場合、ＣＲＣ調整は、変更されたビットに基づいて計算される。換言すれば、ＣＲＣ調整は、新フィールド値と旧フィールド値のＸＯＲに基づくものである。あるいはまた、ＣＲＣ調整は、旧フィールド値から減算され、新フィールド値のために加算される。
【００４４】
本発明の他の用途には、ハードウェア障害検出のための符号解析、誤り訂正技法におけるシンドロームの計算、及び、ガロア体からの全要素のいくつかのシーケンスを生成する回路のｎ状態にわたる迅速なスキップが含まれる。さらに、本発明を利用して、多項式が原始多項式であるか否かを判定することが可能である。多項式が原始多項式であるか否かを判定するための従来の技法には、ＣＲＣをある値に初期化し、次に、全状態をサイクル操作して、多項式が最大長であるか否かを判定することが必要になる。こうした技法の操作数は、サイクル長に比例し、多項式の次数に応じて急速に増大する。対照的に、計算が本発明に従って実施される場合には、操作数は、サイクル長の対数に比例し、サイクル長に応じてはるかに緩やかに増大する。
【００４５】
今日用いられている最も実用的なＣＲＣ生成多項式は、原始多項式（例えば、イーサネット多項式）または原始多項式と多項式ｘ＋１の積から構成される合成多項式（例えば、ｉＳＣＳＩ多項式）である。ｍ次の合成多項式Ｐ（ｘ）は、ｍ未満であるが、０を超える次数の１つ以上の多項式によって割ることが可能である。合成多項式は、最適方法に関して上述の制約条件を満たさない。しかし、本発明の実施態様の１つによれば、最適方法をｉＳＣＳＩ多項式を含む合成多項式に適用可能にする技法が得られる。
【００４６】
本発明の形態の１つは、その因数が相対的に素数である合成多項式に適用される。最も実用的な多項式は、原始多項式、または、共通因数のない（すなわち、相対的に素数である）２つの多項式の積である。実際、因数の１つは、通常、素数で、もう１つの因数は、通常、ｘ＋１（やはり素数）であり、従って、これらの因数は相対的に素数である。こうした合成多項式の場合、多項式に関する中国式剰余定理（Chinese Remainder Theorem）によって、合成剰余（composite remainder）（すなわち、合成多項式を用いて計算されたＣＲＣ）と個々の剰余（合成多項式の因数を用いて計算されたＣＲＣ）との間に固有の１対１の写像が生じることが保証される。本発明の形態の１つによれば、個々の剰余から合成剰余への写像を決定する方法が得られる。
【００４７】
図１０は、本発明の実施態様の１つに従って、合成ＣＲＣ生成多項式に基づくインクリメンタルＣＲＣを生成するための第１の方法２００を例示したデータ流れ図である。図１１は、本発明の実施態様の１つに従って、合成ＣＲＣ生成多項式に基づくインクリメンタルＣＲＣを生成するための第２の方法３００を例示したデータ流れ図である。図１０及び図１１について解説する前に、これらの図において用いられる記号のいくつかについて定義することにする。
【００４８】
１．Ａ（ｘ）はサブメッセージ（すなわち、０が後続しないサブメッセージ・データ）を表わす多項式である。
【００４９】
２．Ｐ（ｘ）は合成ＣＲＣ生成多項式である。
【００５０】
３．Ｐ１（ｘ）はＰ（ｘ）の第１の因数である。
【００５１】
４．Ｐ２（ｘ）はＰ（ｘ）の第２の因数である（ｘ＋１がＰ（ｘ）の因数の１つである場合、因数ｘ＋１がＰ２（ｘ）になる）。
【００５２】
５．Ｒｐ（ｘ）は合成部分（未調整）剰余またはＣＲＣである（すなわち、Ｒｐ（ｘ）＝Ａ（ｘ） ｍｏｄ Ｐ（ｘ））。
【００５３】
ＣＲＣ生成多項式Ｐ（ｘ）が素数である場合、サブメッセージＡ（ｘ）の未調整ＣＲＣであるＲｐ（ｘ）は、サブメッセージＡ（ｘ）を生成多項式Ｐ（ｘ）で割ることによって計算可能である。また、未調整ＣＲＣであるＲｐ（ｘ）は、上述の最適方法を用いて、未調整ＣＲＣであるＲｐ（ｘ）を調整することにより、調整またはインクリメンタルＣＲＣであるＲ（ｘ）を求めることが可能である。ＣＲＣ生成多項式Ｐ（ｘ）が素数でなく、少なくとも２つの因数Ｐ１（ｘ）及びＰ２（ｘ）から構成される場合、図１０及び図１１に関連して後述するように、最適方法を利用することも可能である。
【００５４】
図１０に示すように、第１の方法２００のステップ２０４では、サブメッセージ２０２（Ａ（ｘ））を第１の因数Ｐ１（ｘ）で割って、第１の因数の部分剰余２０６（Ｒ１ｐ（ｘ））を求める。ステップ２０４における除算は、下記の式４によって表わされる。
【００５５】
式４
Ｒ１ｐ（ｘ）＝Ａ（ｘ）ｍｏｄ Ｐ１（ｘ）
メッセージの同じパスの間に、ステップ２１２において、サブメッセージ２０２（Ａ（ｘ））を第２の因数Ｐ２（ｘ）で割って、第２の因数の部分剰余２１４（Ｒ２ｐ（ｘ））を求める。ステップ２１２における除算は、下記の式５によって表わされる。
【００５６】
式５
Ｒ２ｐ（ｘ）＝Ａ（ｘ）ｍｏｄ Ｐ２（ｘ）
ステップ２０８では、合成サブメッセージにおける後続する０の数ｎに基づいて、第１の因数の部分剰余２０６（Ｒ１ｐ（ｘ））を調整することにより、第１の因数の調整剰余２１０（Ｒ１（ｘ））を生成する。ステップ２０８における調整は、下記の式６によって表わされる。
【００５７】
式６
Ｒ１（ｘ）＝Ｒ１ｐ（ｘ）ｘｎ ｍｏｄ Ｐ１（ｘ）＝Ｒｐ（ｘ）ｘｎ ｍｏｄ Ｐ１（ｘ）
同様に、ステップ２１６において、合成サブメッセージにおける後続する０の数ｎに基づいて、第２の因数の部分剰余２１４（Ｒ２ｐ（ｘ））を調整することにより、第２の因数の調整剰余２１８（Ｒ２（ｘ））を生成する。ステップ２１６における調整は、下記の式７によって表わされる。
【００５８】
式７
Ｒ２（ｘ）＝Ｒ２ｐ（ｘ）ｘｎ ｍｏｄ Ｐ２（ｘ）＝Ｒｐ（ｘ）ｘｎ ｍｏｄ Ｐ２（ｘ）
実施態様の１つでは、因数Ｐ１（ｘ）及びＰ２（ｘ）が既約数であるため、ステップ２０８及び２１６において実施される調整は、上述の最適方法を利用することによって加速される。
【００５９】
ステップ２２０では、Ｒｐ（ｘ）の調整バージョンである、調整合成剰余またはインクリメンタルＣＲＣ２２２（Ｒ（ｘ））が、さらに詳細に後述する写像によって、個別剰余Ｒ１（ｘ）及びＲ２（ｘ）から求められる。
【００６０】
図１１は、本発明の実施態様の１つに従って、合成ＣＲＣ生成多項式に基づくインクリメンタルＣＲＣを生成するための第２の方法３００を例示したデータ流れ図である。ステップ３０４では、サブメッセージ３０２（Ａ（ｘ））の合成部分剰余３０６（Ｒｐ（ｘ））が、サブメッセージ３０２（Ａ（ｘ））を合成ＣＲＣ生成多項式Ｐ（ｘ）で割ることによって計算される。従って、第２の方法３００の場合、メッセージの処理時に実施される除算は１回だけである。しかし、一般にメッセージよりはるかに短い剰余を、後述するように、ＣＲＣ多項式の２つの因数によって割ることになる。ステップ３０４における除算は、下記の式８によって表わされる。
【００６１】
式８
Ｒｐ（ｘ）＝Ａ（ｘ）ｍｏｄ Ｐ（ｘ）
Ｒｐ（ｘ）は、後続する０のない（すなわち、位置を顧慮しない）、サブメッセージＡ（ｘ）のＣＲＣである。Ｐ（ｘ）が素数の場合に実施可能なように、最適方法を用いてＲｐ（ｘ）を直接調整するのではなく、第２の方法３００のステップ３０８では、合成部分剰余３０６（Ｒｐ（ｘ））を第１の因数Ｐ１（ｘ）で割って、第１の因数の部分剰余３１０（Ｒ１ｐ（ｘ））を求める。ステップ３０８における除算は、下記の式９によって表わされる。
【００６２】
式９
Ｒ１ｐ（ｘ）＝Ｒｐ（ｘ）ｍｏｄ Ｐ１（ｘ）
ステップ３１６では、合成部分剰余３０６（Ｒｐ（ｘ））を第２の因数Ｐ２（ｘ）で割って、第２の因数の部分剰余３１８（Ｒ２ｐ（ｘ））を求める。ステップ３１６における除算は、下記の式１０によって表わされる。
【００６３】
式１０
Ｒ２ｐ（ｘ）＝Ｒｐ（ｘ）ｍｏｄ Ｐ２（ｘ）
ステップ３１２では、合成サブメッセージにおける後続する０の数ｎに基づいて、第１の因数の部分剰余３１０（Ｒ１ｐ（ｘ））を調整して、第１の因数の調整剰余３１４（Ｒ１（ｘ））を生成する。ステップ３１２における調整は、上述の式６によって表わされる。
【００６４】
同様に、ステップ３２０では、合成サブメッセージにおける後続する０の数ｎに基づいて、第２の因数の部分剰余３１８（Ｒ２ｐ（ｘ））を調整して、第２の因数の調整剰余３２２（Ｒ２（ｘ））を生成する。ステップ３２０における調整は、上述の式７によって表わされる。
【００６５】
実施態様の１つでは、因数Ｐ１（ｘ）及びＰ２（ｘ）が既約数であるため、ステップ３１２及び３２０において実施される調整は、上述の最適方法を利用することによって加速される。
【００６６】
ステップ３２４では、Ｒｐ（ｘ）の調整バージョンである、調整合成剰余またはインクリメンタルＣＲＣ３２６（Ｒ（ｘ））が、さらに詳細に後述する写像によって、個別剰余Ｒ１（ｘ）及びＲ２（ｘ）から求められる。
【００６７】
本発明の形態の１つでは、方法３００のステップ３０８及び３１６における合成部分剰余３０６（Ｒｐ（ｘ））の計算が、方法２００のステップ２０４及び２１２におけるサブメッセージ２０２の計算よりも短いので、方法３００のほうが、方法２００よりも望ましい。
【００６８】
方法２００（図１０）及び方法３００（図１１）は、Ｐ（ｘ）の因数の１つがｘ＋１の場合、単純化される。例えば、Ｐ（ｘ）の因数の１つがｘ＋１の場合、ステップ２１２またはステップ３１６における除算は、パリティ計算と何ら変わらないので、些細なものである。一例として、第２の方法３００では、第２の因子Ｐ２（ｘ）がｘ＋１の場合、最適方法を利用して、調整を加速するのではなく、Ｒｐ（ｘ）が偶数の１を有する場合には、Ｒ２（ｘ）を０に等しくなるように設定し、Ｒｐ（ｘ）が奇数の１を有する場合には、Ｒ２（ｘ）を１に等しくなるように設定する。Ｐ２（ｘ）がｘ＋１でなければ、ステップ３１６における上記式１０に基づいて、Ｒ２ｐ（ｘ）を計算し、実施態様の１つでは、上述の最適方法を用いて、ステップ３２０におけるＲ２（ｘ）＝Ｒ２ｐ（ｘ）＊ｘｎｍｏｄ Ｐ２（ｘ）の計算を実施する。
【００６９】
Ｒ１ｐ（ｘ）の計算は、Ｐ（ｘ）の因数の１つがｘ＋１の場合にも単純化される。Ｐ２（ｘ）がｘ＋１の場合、Ｐ１（ｘ）はＰ（ｘ）より次数が１だけ小さくなる。「ｏ」がＰ（ｘ）の次数と仮定すると、Ｒ１ｐ（ｘ）は、次のように計算することが可能である。（１）Ｒｐ（ｘ）の最上位ビットをテストする、（２）Ｒｐ（ｘ）の最上位ビットが０の場合、Ｒ１ｐ（ｘ）は、Ｒｐ（ｘ）の「ｏ」引く１の最下位ビットになる、（３）Ｒｐ（ｘ）の最上位ビットが１の場合、Ｒ１ｐ（ｘ）は、Ｒｐ（ｘ）とＰ１（ｘ）のＸＯＲの「ｏ」引く１の最下位ビットになる。
【００７０】
Ｐ１（ｘ）の次数が、Ｐ（ｘ）の次数より少なくとも２だけ小さい（すなわち、Ｐ２（ｘ）がｘ＋１ではない）場合、通常のｍｏｄ２多項式除算を利用して、Ｒ１ｐ（ｘ）を求める。この除算は、一度に１ビットずつ処理することによって実施可能である。同時に複数ビットを処理し、１ステップでｍｏｄ演算を行うＣＲＣ方法を利用することも可能である。
【００７１】
次に、ステップ２２０（図１０）及びステップ３２４（図１１）において実施される写像についてさらに詳述することにする。実施態様の１つでは、写像は、Ｒ１（ｘ）及びＲ２（ｘ）の対からＲ（ｘ）を求めるために利用される、中国式剰余定理に基づく１対１写像である。調整プロセスが上述の通りであり、本明細書において取り扱う問題は、個々の剰余から合成剰余への写像であるため、下記の例において、メッセージがサブメッセージであるという事実は無視される。そのため、メッセージは、Ａ（ｘ）ではなく、Ｍ（ｘ）と呼ぶことにする。
【００７２】
例えば、合成ＣＲＣ生成多項式Ｐ（ｘ）がｘ４＋ｘ３＋ｘ２＋１であると仮定する。この多項式例Ｐ（ｘ）の因数は、Ｐ２（ｘ）＝ｘ＋１及びＰ１（ｘ）＝ｘ３＋ｘ＋１である。メッセージＭ（ｘ）をＰ１（ｘ）で割った剰余はＲ１（ｘ）である。同様に、メッセージＭ（ｘ）をＰ２（ｘ）で割った剰余はＲ２（ｘ）である。実施態様の１つにおいて、Ｒ１（ｘ）及びＲ２（ｘ）は、上述の最適方法を用いて計算される。下記の表４には、Ｍ（ｘ）をＰ（ｘ）で割った剰余Ｒ（ｘ）と個別剰余Ｒ１（ｘ）及びＲ２（ｘ）を関連づける方法が示されている。
【表４】
0004643957.tif 000008
【００７３】
上記表４におけるように、多項式を２値パターンとして２進係数で表わすと、２進係数は、図示のように、最上位ビットが左にくる。
【００７４】
写像を決定するため、下記の式１１及び式１２によって示されるモジュラ方程式系の解が求められる。
【００７５】
式１１
Ｒ１（ｘ）＝Ｒ（ｘ）ｍｏｄ Ｐ１（ｘ）
式１２
Ｒ２（ｘ）＝Ｒ（ｘ）ｍｏｄ Ｐ２（ｘ）
式１１及び式１２において、Ｐ１（ｘ）及びＰ２（ｘ）は、多項式Ｐ（ｘ）の因数であり、Ｒ（ｘ）は、メッセージＭ（ｘ）をＰ（ｘ）で割った剰余である。見つけたいのは、式１１及び式１２において示された上記２つのモジュラ多項方程式を満たす多項式Ｒ（ｘ）である。これは、事前に計算することが可能であり、ある特定のＣＲＣ多項式Ｐ（ｘ）に関して一定である。実施態様の１つでは、メッセージＭ（ｘ）によって左右されない写像が前もって分るので、個別剰余Ｒ１（ｘ）及びＲ２（ｘ）から合成剰余Ｒ（ｘ）への写像は、決まった組み合わせ論理を用いて実施される。
【００７６】
表４における４つの陰影つき項目（すなわち、第２、第３、第５、及び、第９項目）は、市販の数学的計算ソフトウェア・パッケージを利用して、式１１及び式１２で示されたモジュラ方程式系を解くことによって、生成されたものである。この４つの陰影つき項目に関して、Ｒ１（ｘ）及びＲ２（ｘ）を含む入力パターンが単一の「１」を備えるという点に留意されたい。
【００７７】
表４の陰影なし行の全項目は、下記のように、陰影つき行の項目から導き出すことが可能である。個別剰余Ｒ１（ｘ）及びＲ２（ｘ）を連結することによって形成された陰影なし入力パターンについて考察することにする。その陰影なし入力パターンに対応する出力パターンＲ（ｘ）を求めるため、陰影なし入力パターンを得るのにＸＯＲ演算を施す必要のある、陰影つき入力パターンが識別される。識別された陰影つき入力パターンに対応する出力パターン列Ｒ（ｘ）の項目にＸＯＲ演算を施すと、そのＸＯＲの結果が所望の陰影なし出力パターンになる。
【００７８】
例えば、Ｒ１（ｘ）が０１１で、Ｒ２（ｘ）が１（すなわち、表４の第８行に示す入力パターン）の場合にＲ（ｘ）を求めるために、陰影つき出力パターン１０１１、１０１０、１００１のＸＯＲ演算が行われる。この結果は、入力パターン０１１１に対応する出力パターンである、１０００になる。
【００７９】
Ｒ（ｘ）における各ビットｂは、ビットｂが出力パターンの１である、各陰影つき項目に関するＲ１（ｘ）及びＲ２（ｘ）のビットのＸＯＲ演算結果である。Ｒ１（ｘ）のビットがａ１、ｂ１、及び、ｃ１であって、ａ１が最上位ビットであり、Ｒ２（ｘ）のビットがａ２であり、Ｒ（ｘ）のビットがａ、ｂ、ｃ、及び、ｄであって、ａが最上位ビットであると仮定すると、上記表４を調べることによって、ａ、ｂ、ｃ、及び、ｄの値は、それぞれ、下記の式１３〜式１６に示すように求めることが可能である。
【００８０】
式１３
ａ＝ａ１ ＸＯＲ ｂ１ ＸＯＲ ｃ１ ＸＯＲ ａ２
式１４
ｂ＝ａ１
式１５
ｃ＝ａ１ ＸＯＲ ｃ１ ＸＯＲ ａ２
式１６
ｄ＝ａ１ ＸＯＲ ｂ１ ＸＯＲ ａ２
図１２は、ＣＲＣ生成多項式例Ｐ（ｘ）＝ｘ４＋ｘ３＋ｘ２＋１に関して上記式１３〜式１６によって表わされた写像を実施するための回路４００を例示する概略図である。剰余４０２（Ｒ１）の３ビットａ１、ｂ１、及び、ｃ１と、剰余４０６（Ｒ２）の１ビットａ２は、ＸＯＲゲート４０４Ａ〜４０４Ｃ（ＸＯＲゲート４０４と総称する）に対する入力として供給される。ＸＯＲゲート４０４の出力によって、調整合成剰余４０８（Ｒ）のビットａ、ｃ、及び、ｄが得られるが、調整合成剰余４０８（Ｒ）のビットｂは、剰余４０１（Ｒ１）のビットａ１と同じである。
【００８１】
望ましい実施態様の解説のため、本明細書では、特定の実施態様が例示され、解説されてきたが、通常の当該技術者には明らかなように、本発明の範囲を逸脱することなく、図示及び解説の特定の実施態様の代わりに、多種多様な代替実施態様及び／または同等実施態様を用いることが可能である。機械、電気機械、電気、コンピュータの技術者であればすぐに分るように、本発明は多種多様な用途において実施することが可能である。本出願は、本明細書において論考の望ましい実施態様に対するいかなる改変または変更をも網羅することを意図したものである。従って、本発明は、明らかに、請求項及びその同等物による制限しか受けないものとする。
【図面の簡単な説明】
【００８２】
【図１】サブメッセージに分割されたメッセージと、サブメッセージの１つに対応する合成サブメッセージを表わした図である。
【図２】生成多項式に従って４項２進数の体二乗を実施するための回路の論理表現図である。
【図３】図２に示す体二乗を実施するためのフィードバック・シフト・レジスタを例示した図である。
【図４】ＣＲＣ計算エンジンとして用いられるフィードバック・シフト・レジスタを例示した図である。
【図５】後続するｎの０の処理段における、図４のフィードバック・シフト・レジスタを例示した図である。
【図６】本発明の実施態様の１つに従ってＣＲＣを調整する方法のフローチャートである。
【図７】本発明の実施態様の１つに従って体二乗と状態ステッピングを同時に行うためのフィードバック・シフト・レジスタを例示した図である。
【図８】本発明の実施態様の１つに従ってＣＲＣを調整するための４つの動作モードを備えた状態マシンを例示した図である。
【図９ａ】本発明の実施態様の１つに従ってＣＲＣを調整する方法に関するフローチャートである。
【図９ｂ】本発明の実施態様の１つによる図９ａの方法に関するテーブル・ルックアップ技法のフローチャートである。
【図１０】本発明の実施態様の１つに従って合成ＣＲＣ生成多項式に基づくインクリメンタルＣＲＣを生成するための第１の方法を例示したデータ流れ図である。
【図１１】本発明の実施態様の１つに従って合成ＣＲＣ生成多項式に基づくインクリメンタルＣＲＣを生成するための第２の方法を例示したデータ流れ図である。
【図１２】本発明の実施態様の１つに従って、あるＣＲＣ生成多項式例に関して、個別剰余から合成剰余への写像を実施するための回路を例示した概略図である。
【符号の説明】
【００８３】
１４  サブメッセージ・データ
１８  合成サブメッセージ・データ
２０  ｎの後続する０
２０２  サブメッセージ・データ
２０４  第１の因数
２０６  第１の剰余
２１０  第１の剰余の調整バージョン
２１２  第２の因数
２１４  第２の剰余
２１８  第２の剰余の調整バージョン
２２２  ＣＲＣ
３０２  サブメッセージ・データ
３０４  ＣＲＣ生成多項式
３０６  非調整合成剰余
３０８  第１の因数
３１０  第１の剰余
３１４  第１の剰余の調整バージョン
３１６  第２の因数
３１８  第２の剰余
３２２  第２の剰余の調整バージョン
３２６  ＣＲＣ
【図１】
0004643957.tif 000009
【図２】
0004643957.tif 000010
【図３】
0004643957.tif 000011
【図４】
0004643957.tif 000012
【図５】
0004643957.tif 000013
【図６】
0004643957.tif 000014
【図７】
0004643957.tif 000015
【図８】
0004643957.tif 000016
【図９ａ】
0004643957.tif 000017
【図９ｂ】
0004643957.tif 000018
【図１０】
0004643957.tif 000019
【図１１】
0004643957.tif 000020
【図１２】
0004643957.tif 000021