(57)【特許請求の範囲】
【請求項１】
任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成する並列巡回符号生成装置であって、
巡回符号生成対象データに含まれるビット列をＭビット幅に並列出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割手段と、
整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成手段と、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する第一排他的論理和手段と、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する第一シフト手段と、
第一シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成するＲ´（ｘ）生成手段と、
巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成する第二シフト手段と、
巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する第二排他的論理和手段とを備える
ことを特徴とする並列巡回符号生成装置。
【請求項２】
Ｒ（ｘ）生成手段とＲ´（ｘ）生成手段とが同一の回路であり、
データ分割手段がデータブロックＡ（ｘ）を出力しているときには、データブロックＡ（ｘ）を前記回路に送り、第一シフト手段が端数データブロックＢ（ｘ）を含むＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和に対するシフトおよび０の設定を行ったときには、シフトおよび０の設定が行われたデータを前記回路に送る選択手段を備える
請求項１に記載の並列巡回符号生成装置。
【請求項３】
Ｒ（ｘ）生成手段は、整数倍データブロックＡ（ｘ）に含まれる最初のＭビットのビット列に対して、当該ビット列の各ビットを係数とするＭ−１次多項式を次数ｄの生成多項式で除算して得られる剰余を求め、当該剰余を保持し、以降のＭビット毎のビット列毎に、保持しているデータを（Ｍ−ｄ）ビット上位側にシフトしたデータとＭビット幅のビット列との排他的論理和を求め、前記排他的論理和の各ビットを係数とするＭ−１次多項式を前記生成多項式で除算して得られる剰余を求め、当該剰余を保持することを繰り返すことにより、巡回符号Ｒ（ｘ）を生成する
請求項１または請求項２に記載の並列巡回符号生成装置。
【請求項４】
Ｒ´（ｘ）生成手段は、第一シフト手段によってシフトおよび０の設定が行われたデータの各ビットを係数とするＭ−１次多項式を生成多項式で除算した剰余を求めることによりＲ´（ｘ）を生成する
請求項１から請求項３のうちのいずれか１項に記載の並列巡回符号生成装置。
【請求項５】
巡回符号はＣＲＣ値である請求項１から請求項４のうちのいずれか１項に記載の並列巡回符号生成装置。
【請求項６】
巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査する並列巡回符号検査装置であって、
検査対象データに含まれるビット列をＭビット幅に並列出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割手段と、
整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成手段と、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する排他的論理和手段と、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定するシフト手段と、
シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成するＣ（ｘ）生成手段とを備える
ことを特徴とする並列巡回符号検査装置。
【請求項７】
Ｒ（ｘ）生成手段とＣ（ｘ）生成手段とが同一の回路であり、
データ分割手段がデータブロックＡ（ｘ）を出力しているときには、データブロックＡ（ｘ）を前記回路に送り、シフト手段が端数データブロックＢ（ｘ）を含むＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和に対するシフトおよび０の設定を行ったときには、シフトおよび０の設定が行われたデータを前記回路に送る選択手段を備える
請求項６に記載の並列巡回符号検査装置。
【請求項８】
Ｒ（ｘ）生成手段は、整数倍データブロックＡ（ｘ）に含まれる最初のＭビットのビット列に対して、当該ビット列の各ビットを係数とするＭ−１次多項式を次数ｄの生成多項式で除算して得られる剰余を求め、当該剰余を保持し、以降のＭビット毎のビット列毎に、保持しているデータを（Ｍ−ｄ）ビット上位側にシフトしたデータとＭビット幅のビット列との排他的論理和を求め、前記排他的論理和の各ビットを係数とするＭ−１次多項式を前記生成多項式で除算して得られる剰余を求め、当該剰余を保持することを繰り返すことにより、巡回符号Ｒ（ｘ）を生成する
請求項６または請求項７に記載の並列巡回符号検査装置。
【請求項９】
Ｃ（ｘ）生成手段は、シフト手段によってシフトおよび０の設定が行われたデータの各ビットを係数とするＭ−１次多項式を生成多項式で除算した剰余を求めることによりＣ（ｘ）を生成する
請求項６から請求項８のうちのいずれか１項に記載の並列巡回符号検査装置。
【請求項１０】
巡回符号はＣＲＣ値である請求項６から請求項９のうちのいずれか１項に記載の並列巡回符号検査装置。
【請求項１１】
任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成する並列巡回符号生成方法であって、
データ分割手段が、巡回符号生成対象データに含まれるビット列をＭビット毎に出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分け、
Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成し、
第一排他的論理和手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算し、
第一シフト手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定し、
Ｒ´（ｘ）生成手段が、第一シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成し、
第二シフト手段が、巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成し、
第二排他的論理和手段が、巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する
ことを特徴とする並列巡回符号生成方法。
【請求項１２】
巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査する並列巡回符号検査方法であって、
データ分割手段が、検査対象データに含まれるビット列をＭビット毎に出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分け、
Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成し、
排他的論理和手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算し、
シフト手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定し、
Ｃ（ｘ）生成手段が、シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成する
ことを特徴とする並列巡回符号検査方法。
【請求項１３】
任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成するコンピュータに搭載される並列巡回符号生成プログラムであって、
コンピュータに、
巡回符号生成対象データに含まれるビット列をＭビット毎に出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割処理、
整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成処理、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する第一排他的論理和処理、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する第一シフト処理、
第一シフト処理でシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成するＲ´（ｘ）生成処理、
巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成する第二シフト処理、および
巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する第二排他的論理和処理
を実行させるための並列巡回符号生成プログラム。
【請求項１４】
巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査するコンピュータに搭載される並列巡回符号検査プログラムであって、
コンピュータに、
検査対象データに含まれるビット列をＭビット毎に出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割処理、
整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成処理、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する排他的論理和処理、
端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定するシフト処理、および
シフト処理でシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成するＣ（ｘ）生成処理
を実行させるための並列巡回符号検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ通信の転送フレーム内のビット誤りを検出するための巡回符号の生成または検査を行う並列巡回符号生成装置、並列巡回符号生成方法、並列巡回符号生成プログラム、並列巡回符号検査装置、並列巡回符号検査方法、並列巡回符号検査プログラムに関する。
【背景技術】
【０００２】
近年、米国ＩＥＥＥ８０２委員会の４０ギガビット・イーサネットや１００ギガビット・イーサネットをはじめとして、データ通信技術におけるフレーム速度の広帯域化が進んでいる。なお、イーサネットは登録商標である。フレーム速度の広帯域化では、その処理においてシリアル信号での処理速度に限界があるため、フレーム信号のパラレル展開処理（以降、並列化と記す。）が必須である。
【０００３】
データ通信においては、フレームの誤り検出、誤り訂正に巡回符号が利用される。巡回符号には、ＣＲＣ（Cyclic Redundancy Check）符号、ハミング符号、ＢＣＨ符号などがあり、データ通信技術においても、これらの巡回符号がよく利用される。
【０００４】
フレーム速度の広帯域化の実現では、フレーム内の誤り検出として巡回符号による誤り制御、特にＣＲＣ生成処理・ＣＲＣ検査処理の広帯域化も重要であり、そのためには、Ｍビット（Ｍは、２以上の任意の正の整数）の並列化信号に対するＣＲＣ符号演算処理が必要である。
【０００５】
並列ＣＲＣ符号演算処理では、入力フレーム長（ｎビット：ｎは１以上の正の整数）が、並列幅（Ｍビット）の整数倍でない場合、端数ビットが発生する。この端数ビットを含む並列データを、ＭビットのＣＲＣ計算回路で処理すると、端数ビット以外の無効なビットデータまでがＣＲＣ符号の演算範囲となり、正しい演算結果を得ることができない。
【０００６】
この種の端数ビットを含む入力フレームに対する並列ＣＲＣ符号演算処理方式は、例えば非特許文献１に記載されている。
【０００７】
本発明に関連するＣＲＣ演算方式の構成の例を説明する。図１８は、非特許文献１に開示されたＣＲＣ演算方式の構成の一例を示すブロック図であり、ここではＭビット幅の入力フレームに対するＣＲＣ演算回路を例示している。図１８に示すＣＲＣ演算回路は、バッファリング部１６０−１と、読み出し制御部１６０−２と、フレームデータ並び替え部１６０−３と、ＣＲＣ計算部１６０−４と、フレーム長カウンタ部１６０−５とを備える。
【０００８】
バッファリング部１６０−１には、入力信号として、Ｍビット幅にパラレル展開されたフレーム信号と、そのフレームの先頭を示すＳＯＦ（Start of Frame）情報と、そのフレームの終わりを示す最終ワード有効データ情報Ｈ（ｋ）が入力される。バッファリング部１６０−１は、入力フレームをバッファリングするとともに、フレームをバッファリング中であることを示すカウントイネーブル信号ＣＥＮを、フレーム長カウンタ部１６０−５へ出力する。
【０００９】
フレーム長カウンタ部１６０−５は、バッファリング部１６０−１からのカウントイネーブル信号ＣＥＮをもとに、そのフレームのフレーム長をカウントする。そして、読み出し制御部１６０−２およびフレームデータ並び替え部１６０−３へフレーム長（フレーム長情報ＬＥＮと記す。）を出力する。
【００１０】
読み出し制御部１６０−２は、フレーム長カウンタ部１６０−５からのフレーム長情報ＬＥＮをもとに、バッファリング部１６０−１からフレームデータの読み出しを行い、フレームデータ並び替え部１６０−３へ出力する。
【００１１】
フレームデータ並び替え部１６０−３は、フレーム長カウンタ部１６０−５からのフレーム長情報ＬＥＮに従い、無効データがフレームの先頭なるように、フレームデータを並べ替える。なお、無効データ領域の値は‘０’である。
【００１２】
ＣＲＣ計算部１６０−４は、フレームデータ並び替え部１６０−３が出力するＭビット幅のフレームデータのＣＲＣ計算を行う。
【００１３】
次に、図１９を参照して、図１８に例示するＣＲＣ演算回路の動作を説明する。図１９は、図１８に例示するＣＲＣ演算回路におけるフレームデータの並べ替えの例を示す説明図である。図１９（ａ）は、並列幅Ｍ＝８ビット、フレーム長n＝２９ビットの場合の入力フレームデータの一例を示している。最終ワード有効データ情報Ｈ（ｋ）は端数ビットのビット数であり、本例では‘５’である。図１９に示す‘１８−１−１’から‘１８−４−５’はＣＲＣ演算対象となるデータを表し、黒く塗りつぶした部分はＣＲＣ演算対象外のデータ（無効データ）を表している。
【００１４】
バッファリング部１６０−１は、図１９（ａ）に例示するフレームデータが入力されると、そのフレームデータをバッファリングするとともに、カウントイネーブル信号ＣＥＮをフレーム長カウンタ部１６０−５へ出力する。
【００１５】
フレーム長カウンタ部１６０−５は、カウントイネーブル信号ＣＥＮをもとにフレーム長を計数する。最終ワード有効データ情報H（ｋ）を受信すると、バッファリング部１６０−１はバッファリングを終了し、フレーム長カウンタ部１６０−５は、フレーム長情報ＬＥＮを読み出し制御部１６０−２およびフレームデータ並び替え部１６０−３に出力する。読み出し制御部１６０−２は、 フレーム長カウンタ部１６０−５からのフレーム長情報ＬＥＮをもとに、バッファリング部１６０−１からフレームデータを読み出し、フレームデータ並び替え部１６０−３に出力する。
【００１６】
フレームデータ並び替え部１６０−３は、フレーム長情報ＬＥＮ（本例では２９ビット）および並列幅Ｍ＝８ビットから無効データ数（ここでは３ビット）を求め、無効データがフレームの先頭になるようにフレームデータを並べ替える。図１９（ｂ）は、フレームデータ並び替え部１６０−３によって並べ替えられ出力されるデータを示している。フレームデータ先頭の３ビット分（図１９（ｂ）における黒色部分）が無効データである。なお、この無効データ領域の値は‘０’である。並べ替えたフレームデータは、先頭の無効データ領域まで含めると合計３２ビットであり、これは並列幅８ビットの倍数である。フレーム先頭の無効データの値は‘０’であるため、ＣＲＣ計算結果に影響しない。フレームデータ並び替え部１６０−３の出力に対して、８ビット幅のＣＲＣ計算部１６０−４がＣＲＣ計算を行うことで、ＣＲＣ演算対象フレームデータである図１９（ｂ）に例示する‘１８−１−１’〜‘１８−４−５’の正しいＣＲＣ計算結果を得る。
【００１７】
また、特許文献１には、ＣＲＣ−３２のシリアルデータに対するＣＲＣ演算回路が記載されている。
【００１８】
【特許文献１】特開２００２−３５９５６１号公報
【非特許文献１】H. Michael Ji, and Earl Killian，“Fast Parallel CRC Algorithm and Implementation on a Configurable Processor”，ＩＥＥＥ  ＩＣＣ２００２（International Conference on Communications 2002）．
【発明の開示】
【発明が解決しようとする課題】
【００１９】
しかし、非特許文献１に開示されたＣＲＣ演算方式では、フレームデータを並べ替えるために、フレーム長を予め求める必要がある。フレームヘッダに、フレーム長情報ＬＥＮ（Ｌｅｎｇｔｈ情報）を含むフレームでは容易にフレーム長情報ＬＥＮが入手できるが、イーサネットフレームのように、フレームヘッダ内にフレーム長情報を持たない場合、フレーム長を得るためにバッファリングを行う必要がある。図１８に例示する構成では、バッファリング部１６０−１およびフレーム長カウンタ部１６０−５の処理が、フレーム長を求めるための処理に該当する。
【００２０】
このようにバッファリング処理を行うことにより、以下のような問題が生じる。
【００２１】
第一に、処理遅延が大きくなってしまう。バッファリングはフレーム長を求めるために行われるため、最低でも１フレーム以上をバッファリングする必要がある。このため、フレーム長に見合ったバッファリングの処理時間を要し、遅延が大きくなる。
【００２２】
第二に、回路規模が増大してしまう。図１８に例示する構成のように、ＣＲＣ計算部１６０−４の前段に、バッファリング部１６０−１、読み出し制御部１６０−２、フレーム長カウンタ部１６０−５、フレーム並び替え部１６０−３を設けることで、装置全体の規模が大きくなってしまう。
【００２３】
第三に、広帯域化の実現に制約が生じてしまう。この問題は広帯域のバッファリングに起因する。バッファリング処理帯域は、使用するメモリの帯域制約および回路動作速度により上限が生じる。数十Ｇｂｐｓ級のフレーム通信技術では、フレーム処理の並列幅Ｍの増加だけでなく、処理クロック速度の増加も必要であるが、特にメモリの入出力帯域に制約があることによって広帯域化も制約されてしまう。図１８に例示するバッファリングを用いる並列ＣＲＣ符号演算方式では、バッファリングのためにメモリを用いており、速度に制約が生じるため、広帯域化の実現にも制約が生じてしまう。
【００２４】
本発明の目的は、データの巡回符号演算処理において、演算対象データのデータ長情報を求めるためのバッファリングを不要とする並列巡回符号生成装置、並列巡回符号生成方法、並列巡回符号生成プログラム、並列巡回符号検査装置、並列巡回符号検査方法、並列巡回符号検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２５】
本発明の並列巡回符号生成装置は、任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成する並列巡回符号生成装置であって、巡回符号生成対象データに含まれるビット列をＭビット幅に並列出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割手段と、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成手段と、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する第一排他的論理和手段と、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する第一シフト手段と、第一シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成するＲ´（ｘ）生成手段と、巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成する第二シフト手段と、巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する第二排他的論理和手段とを備えることを特徴とする。
【００２６】
また、本発明の並列巡回符号検査装置は、巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査する並列巡回符号検査装置であって、検査対象データに含まれるビット列をＭビット幅に並列出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割手段と、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成手段と、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する排他的論理和手段と、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定するシフト手段と、シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成するＣ（ｘ）生成手段とを備えることを特徴とする。
【００２７】
また、本発明の並列巡回符号生成方法は、任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成する並列巡回符号生成方法であって、データ分割手段が、巡回符号生成対象データに含まれるビット列をＭビット毎に出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分け、Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成し、第一排他的論理和手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算し、第一シフト手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定し、Ｒ´（ｘ）生成手段が、第一シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成し、第二シフト手段が、巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成し、第二排他的論理和手段が、巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算することを特徴とする。
【００２８】
また、本発明の並列巡回符号検査方法は、巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査する並列巡回符号検査方法であって、データ分割手段が、検査対象データに含まれるビット列をＭビット毎に出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分け、Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成し、排他的論理和手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算し、シフト手段が、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定し、Ｃ（ｘ）生成手段が、シフト手段によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成することを特徴とする。
【００２９】
また、本発明の並列巡回符号生成プログラムは、任意のビット長の巡回符号生成対象データに対してＭビット毎に生成多項式による除算を行い、巡回符号生成対象データの巡回符号を生成するコンピュータに搭載される並列巡回符号生成プログラムであって、コンピュータに、巡回符号生成対象データに含まれるビット列をＭビット毎に出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割処理、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成処理、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する第一排他的論理和処理、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する第一シフト処理、第一シフト処理でシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成するＲ´（ｘ）生成処理、巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成する第二シフト処理、および巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する第二排他的論理和処理を実行させることを特徴とする。
【００３０】
また、本発明の並列巡回符号検査プログラムは、巡回符号を含む任意のビット長の検査対象データに対してＭビット毎に生成多項式による除算を行い、データの誤りを検査するコンピュータに搭載される並列巡回符号検査プログラムであって、コンピュータに、検査対象データに含まれるビット列をＭビット毎に出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分けるデータ分割処理、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成するＲ（ｘ）生成処理、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する排他的論理和処理、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を、端数データブロックＢ（ｘ）のビット長をＨ（ｋ）ビットとした場合におけるＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定するシフト処理、およびシフト処理でシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成するＣ（ｘ）生成処理を実行させることを特徴とする。
【発明の効果】
【００３１】
本発明によれば、演算対象データのデータ長情報を求めることなく、巡回符号の演算を行うことができるので、データ長情報を求めるためのバッファリングを不要とすることができる。また、その結果、データ長情報を求めるためのバッファリングに起因する処理遅延、回路規模の増大を防止し、広帯域化の制約を緩和することができる。
【発明を実施するための最良の形態】
【００３２】
本発明は、フレームのフレーム長情報を求めずに巡回符号を求める演算を行う。あるいは、フレーム長情報を求めずに巡回符号を検査する演算を行う。以下、フレーム長情報を求めずにこれらの演算を行えることを示す。また、以下の説明では、巡回符号としてＣＲＣ値を用いる場合を例にして説明する。
【００３３】
まず、フレーム長情報を求めずＣＲＣ値を求められることを示す。長さｎビットの入力フレームをＮ（ｘ）とする。フレームの長さｎビットは任意である。並列幅をＭビットとする。Ｍは２以上の正の整数である。また、フレームＮ（ｘ）における並列幅Ｍビットの整数倍ビットブロックをＡ（ｘ）と記す。また、入力フレームＮ（ｘ）における端数ビットブロックをＢ（ｘ）と記す。整数倍ビットブロックＡ（ｘ）は、フレームＮ（ｘ）における先頭から並列幅Ｍの整数倍分の長さのビットブロックである。端数ビットブロックＢ（ｘ）は、フレームＮ（ｘ）における整数倍ビットブロックＡ（ｘ）以外のＭビット未満のビットブロックである。整数倍ビットブロックＡ（ｘ）の後に端数ビットブロックＢ（ｘ）が続く。フレームＮ（ｘ）を整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）に分けると、フレームＮ（ｘ）は式（１）のように表すことができる。なお、以下の各式において「＋」は排他的論理和を示し、「ｍｏｄ」はモジュロ２演算を示す。また、Ｈ（ｋ）はｋ番目の入力フレーム（ｋは任意の正の整数）の端数ビットブロックＢ（ｘ）の長さ（ビット長）である。また、Ｇ（ｘ）は生成多項式を示し、ｄはＧ（ｘ）の次数である。ｘは、多次式を表すための変数である。
【００３４】
Ｎ（ｘ） = Ａ（ｘ）  ・  ｘＨ（ｋ）  +  Ｂ（ｘ）                   式（１）
【００３５】
また、整数倍ビットブロックＡ（ｘ）のＣＲＣ計算結果をＲ（ｘ）とすると、Ｒ（ｘ）は式（２）のように表すことができる。
【００３６】
Ｒ（ｘ） = [  Ａ（ｘ）  ・  ｘｄ   ]   ｍｏｄ Ｇ（ｘ）            式（２）
【００３７】
また、フレームＮ（ｘ）のＣＲＣ演算結果をＲ´´´（ｘ）とすると、Ｒ´´´（ｘ）は、式（３）のように表すことができる。
【００３８】
Ｒ´´´（ｘ）＝{  Ｎ（ｘ）  ・  ｘｄ  } ｍｏｄ Ｇ（ｘ）          式（３）
【００３９】
ここで、式（１）と式（３）とから、Ｒ´´´（ｘ）を式（４）のように表せる。
【００４０】
Ｒ´´´（ｘ）＝｛  ［  Ａ（ｘ）  ・  ｘｄ  ・  ｘＨ（ｋ）  ］  +［  Ｂ（ｘ） ・  ｘｄ ］  } ｍｏｄ Ｇ（ｘ）                                          式（４）
【００４１】
さらに、式（４）は、式（２）により、以下に示す式（５）のように変形できる。
Ｒ´´´（ｘ）＝｛  ［  Ｒ（ｘ）  ・  ｘＨ（ｋ）  ］  +  ［  Ｂ（ｘ）  ・  ｘｄ  ］  } ｍｏｄ Ｇ（ｘ）                                              式（５）
【００４２】
式（５）は、さらに以下に示す式（６）のように変形できる。
【００４３】
Ｒ´´´（ｘ）＝｛  ［  Ｒ（ｘ）  ・  ｘＨ（ｋ）−ｄ  +  Ｂ（ｘ）  ］  ・  ｘｄ  } ｍｏｄ Ｇ（ｘ）                                                    式（６）
【００４４】
しかし、式（６）が表すようにブロックを構成すると、Ｈ（ｋ）＜ｄの条件で、Ｒ（ｘ）の一部が消えてしまい、正しいＣＲＣ演算結果を得ることができない。そこで、Ｒ（ｘ）を式（７）のように展開し、Ｒ（ｘ）の式における次数が「ｄ−１」から「ｄ−Ｈ（ｋ）」までの部分をＲ１とし、次数が「ｄ−Ｈ（ｋ）−１」から「０」までの部分をＲ２とすると、以下に示す式（８）のようになる。
【００４５】
Ｒ（ｘ）＝ｒ（ｄ−１）・ｘｄ−１＋・・・＋ｒ（ｄ−Ｈ（ｋ））・ｘｄ−Ｈ（ｋ）＋ｒ（ｄ−Ｈ（ｋ）−１）・ｘｄ−Ｈ（ｋ）−１＋・・・ｒ（０）・ｘ０                                式（７）
【００４６】
Ｒ（ｘ）＝Ｒ１（ｘ）＋Ｒ２（ｘ）                                  式（８）
【００４７】
式（８）および式（６）から、フレームＮ（ｘ）のＣＲＣ演算結果をＲ´´´（ｘ）は以下に示す式（９）のように表される。
【００４８】
Ｒ´´´（ｘ）＝｛  ［  Ｒ１（ｘ）・  ｘＨ（ｋ）−ｄ  +  Ｂ（ｘ）  ］・  ｘｄ  ＋  Ｒ２（ｘ）・  ｘＨ（ｋ）  } ｍｏｄ Ｇ（ｘ）                            式（９）
【００４９】
ここで、式（９）における［  Ｒ２（ｘ）・  ｘＨ（ｋ）  ］をＲ´´（ｘ）とする。Ｒ´´（ｘ）の長さ（ビット長）はｄビットであり、Ｇ（ｘ）の次数と等しい。よって、Ｒ´´（ｘ）は、ｍｏｄ Ｇ（ｘ）の外に出すことができる。
【００５０】
また、［  Ｒ１（ｘ）・  ｘＨ（ｋ）−ｄ  +  Ｂ（ｘ）  ］の長さはＨ（ｋ）ビットであり、この加算の結果をＢ´（ｘ）とおくと、式（９）は以下の式（１０）のように表すことができる。
【００５１】
Ｒ´´´（ｘ）＝｛  ［  Ｂ´（ｘ）  ］  ・  ｘｄ  } ｍｏｄ Ｇ（ｘ）＋Ｒ´´（ｘ）
式（１０）
【００５２】
式（１０）の｛  ［  Ｂ´（ｘ）  ］  ・  ｘｄ  } ｍｏｄ Ｇ（ｘ）をＲ´（ｘ）とおくと、Ｒ´´´（ｘ）は、式（１１）のように表される。
【００５３】
Ｒ´´´（ｘ）＝Ｒ´（ｘ）＋Ｒ´´（ｘ）                          式（１１）
【００５４】
式（１１）で表されるように、巡回符号生成用のＣＲＣ符号演算処理ブロックを構成することができる。なお、Ｈ（ｋ）＞ｄの条件では、Ｒ２（ｘ）は存在しないため、Ｒ´（ｘ）の値がＲ´´´（ｘ）の値となる。
【００５５】
式（１０）および式（１１）に基づいてＣＲＣ値（Ｒ´´´（ｘ））を求めれば、フレームＮ（ｘ）の長さｎ（フレーム長情報）を求めなくてもＲ´´´（ｘ）を算出することができ、図１８に例示する構成のようにフレームのフレーム長情報を求めるためのバッファリングや図１９に例示するようなデータの並べ替えを行わずに済む。また、式（１０）および式（１１）に基づいてＣＲＣ値（Ｒ´´´（ｘ））を求める演算は、Ｂ´（ｘ）を求めるための排他的論和を求める手段と、長さＨ（ｋ）ビットのＢ´（ｘ）のＣＲＣ計算をＭビット入力のＣＲＣ計算回路で計算するためにｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットシフトする手段と、Ｒ´´（ｘ）を得るためにＲ（ｘ）をｑ（ｑ＝Ｈ（ｋ））ビットシフトする手段と、Ｒ´（ｘ）とＲ´´（ｘ）の排他的論理和を求める手段と、ＣＲＣ計算を行う手段とによって実現可能である。これらの手段によって、端数ビットブロックのビット長Ｈ（ｋ）ビット、生成多項式の次数dビットを用いて、N（ｘ）のＣＲＣ値（Ｒ´´´（ｘ））を求めることができる。
【００５６】
次に、フレーム長情報を求めずＣＲＣ値の検査を行えることを示す。ＣＲＣ値の検査が行われる入力フレームＮ´（ｘ）が、ＣＲＣ値（Ｒ´´´（ｘ））を含む符号系列であり、ＣＲＣ演算対象範囲を、そのフレームの先頭からＣＲＣ値までとする。このとき、式（５）におけるＢ（ｘ）がＣＲＣ値（Ｒ´´´（ｘ））を含むとすると、式（５）は、式（１２）のように表すことができる。
【００５７】
Ｃ（ｘ）＝｛  ［  Ｒ（ｘ）  ・  ｘＨ（ｋ）−d  ］  +  ［  Ｂ（ｘ）  ］  } ｍｏｄ Ｇ（ｘ）                                                          式（１２）
【００５８】
式（１２）のＣ（ｘ）は演算結果兼検査結果であり、値がＣ（ｘ）＝‘０’の場合、入力フレームデータに誤りがないといえる。式（１２）の［  Ｒ（ｘ）  ・  ｘＨ（ｋ）−d  ］とＢ（ｘ）の長さはＨ（ｋ）ビットであり、式（１２）の右辺の加算結果をＢ´´（ｘ）とおくと式（１２）は以下のように表せる。
【００５９】
Ｃ（ｘ）＝｛  Ｂ´´（ｘ）  } ｍｏｄ Ｇ（ｘ）                    式（１３）
【００６０】
式（１３）に基づいてＣ（ｘ）の値を検査すれば、フレームのフレーム長情報を求めるためのバッファリングや図１９に例示するようなデータの並べ替えを行わずに済む。また、Ｂ´´（ｘ）を求めるための排他的論和を求める手段と、長さＨ（ｋ）ビットのＢ´´（ｘ）のＣＲＣ計算をＭビット入力のＣＲＣ計算回路で計算するためにビットシフトを行う手段と、ＣＲＣ計算を行う手段によって、Ｎ（ｘ）に付与されたＣＲＣ値の検査を行うことができる。
【００６１】
以下、本発明の実施形態を図面を参照して説明する。以下に示す各実施形態でも、巡回符号がＣＲＣ値である場合を例にして説明する。
【００６２】
実施形態１．
第１の実施形態では、巡回符号を生成する演算を行う並列巡回符号生成装置を示す。図１は、本発明が適用されたネットワークインタフェースカード（ＮＩＣ：Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）の送信機能の構成例を示すブロック図である。図１に示すネットワークインタフェースカード２−８は、巡回符号を生成する演算を行う並列巡回符号生成装置を含んでいる。ネットワークインタフェースカードは、サーバ装置やコンピュータ装置等に搭載され、フレーム送受信処理を実施するカードである。
【００６３】
本発明が適用されたネットワークインタフェースカード２−８は、バス終端部２−１と、ＭＡＣ送信処理部２−７と、ＰＣＳ（Physical Coding Sublayer）部２−５と、送信器２−６とを備える。
【００６４】
ＭＡＣ送信処理部２−７は、送信ＭＡＣフレーム生成処理を行う。ＭＡＣ送信処理部２−７は、ヘッダ付与部２−２と、並列ＣＲＣ演算処理部２−３と、ＦＣＳ付与部２−４とを備える。
【００６５】
図１に例示するネットワークインタフェースカード２−８において、バス終端部２−１は、サーバ接続バスによって、サーバ（図示せず。）内のＣＰＵバスに接続されている。また、送信器２−６は、フレームを外部に送信するための伝送路に接続されている。ネットワークインタフェースカード２−８は、サーバから入力されるフレームに対して、フレームヘッダとＦＣＳ（Frame Check Sequence）とを付与し、伝送路へ送信する。
【００６６】
バス終端部２−１は、サーバ（図示せず。）から送られてくるフレームを受信する。このフレームは、Ｍビット幅のフレームである。すなわち、Ｍビットを１ワードとして１ワード毎に受け渡されるフレームである。バス終端部２−１は、サーバから送られてくるフレームから、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）を生成し、Ｍビット幅のフレームとともにヘッダ付与部２−２に出力する。なお、バス終端部２−１は、例えば、フレームの先頭のＭビットを出力するときにＳＯＦ信号を出力する。また、バス終端部２−１は、例えば、フレーム末尾の端数ビットブロックＢ（ｘ）を出力するときに、最終ワード有効データ信号Ｈ（ｋ）を出力する。また、最終ワード有効データ信号Ｈ（ｋ）として、端数ビットブロックＢ（ｘ）のビット長が出力される。
【００６７】
ヘッダ付与部２−２は、バス終端部２−１の出力フレームに対してフレームヘッダを付与し、フレームヘッダが追加されたフレームと、ＳＯＦと、Ｈ（ｋ）とを並列ＣＲＣ演算処理部２−３に出力する。フレームヘッダの付与に伴いフレームの長さが増加し、その結果、端数ビットブロックＢ（ｘ）も変化する。ヘッダ付与部２−２は、最終ワード有効データ信号Ｈ（ｋ）の値を、フレームヘッダ付与後の端数ビットブロックＢ（ｘ）のビット長に更新してＨ（ｋ）を出力する。
【００６８】
並列ＣＲＣ演算処理部２−３は、ヘッダ付与部２−２が出力するＭビット幅フレームに対するＣＲＣ符号を演算する。
【００６９】
ＦＣＳ付与部２−４は、並列ＣＲＣ演算処理部２−３によって演算されたＣＲＣ値をＦＣＳ値としてフレーム最後尾に付与する。ＦＣＳ値が付与されることで、フレームの長さが増加し、その結果、端数ビットブロックＢ（ｘ）も変化する。ＦＣＳ付与部２−４は、最終ワード有効データ信号Ｈ（ｋ）の値を、ＦＣＳ値付与後の端数ビットブロックＢ（ｘ）のビット長に更新してＨ（ｋ）を出力する。
【００７０】
ＰＣＳ部２−５は、ＦＣＳ付与部２−４から送られるＭビット幅のフレームを、符号化する。ここでの符号化とは、８Ｂ／１０Ｂ変換や６４Ｂ／６６Ｂ変換などの伝送路送出のための符号化である。
【００７１】
送信器２−６は、ＰＣＳ部２−５が出力するデータをパラレルシリアル変換し、伝送路に出力する。
【００７２】
並列ＣＲＣ演算処理部２−３は、本発明の並列巡回符号生成装置である。図２は、本発明の第１の実施形態を示すブロック図であり、図２を参照して、並列ＣＲＣ演算処理部２−３について説明する。
【００７３】
まず、並列幅Ｍビットのビット列における最上位ビットおよび最下位ビットについて説明する。フレームの端数ビットブロックＢ（ｘ）は、Ｂ（ｘ）を構成するビットデータの順に並列幅Ｍビットのビット列の端から順に格納される。このＭビットのビット列の両端部のうち、Ｂ（ｘ）を構成するビットデータが格納されている方の端部を最上位とし、もう一方の端部を最下位とする。
【００７４】
整数倍ビットブロックＡ（ｘ）について演算された巡回符号（ＣＲＣ値）は、ｄビットで表され、各ビットは式（７）に示す多項式の各項に対応する。整数倍ビットブロックＡ（ｘ）について演算された巡回符号については、多項式（式（７））の最高次の項に対応するビットを最上位ビットとし、最低次の項（０乗の項）に対応するビットを最下位ビットとする。
【００７５】
並列ＣＲＣ演算処理部２−３は、ＣＲＣ演算対象である入力フレームｋ（ｋは任意の正の整数）のビット長ｎがＭの整数倍でないとき、入力フレームを並列幅Ｍビットの整数倍ビットブロックＡ（ｘ）と、端数ビットブロックＢ（ｘ）とに分ける。なお、ｋは、フレームの順番を表す。並列ＣＲＣ演算処理部２−３は、整数倍ビットブロックＡ（ｘ）のＣＲＣ演算結果Ｒ（ｘ）と、ビット長がＨ（ｋ）である端数ビットブロックＢ（ｘ）の排他的論理和を計算する。並列ＣＲＣ演算処理部２−３は、Ｒ（ｘ）とＢ（ｘ）との排他的論理和の計算結果を最下位ビット側にｐビット分シフトし、上位側のｐビットに‘０’を付加した合計Ｍビット幅の信号を作成する。ここで、ｐ＝Ｍ−Ｈ（ｋ）である。並列ＣＲＣ演算処理部２−３は、このＭビット幅の信号に対してＣＲＣ演算を行い、ｄビット幅のＣＲＣ計算結果Ｒ´（ｘ）を算出する。さらに、並列ＣＲＣ演算処理部２−３は、Ｒ（ｘ）を上位ビット側にｑビット分シフトし、下位側のｑビットに‘０’を付加した合計ｄビット分のデータＲ´´（ｘ）を計算し、上記のＣＲＣ計算結果Ｒ´（ｘ）とＲ´´（ｘ）との排他的論理和を計算する。ここで、ｑ＝Ｈ（ｋ）である。並列ＣＲＣ演算処理部２−３は、これらの処理によって、フレームのビット長を求めるためのバッファリングを行うことなく並列ＣＲＣ符号演算処理を実現している。この処理によって、式（１１）のように表されるＣＲＣ値（Ｒ´´´（ｘ））が求められる。
【００７６】
図２に示すように、並列ＣＲＣ演算処理部２−３は、演算制御部１１と、第一排他的論理和部１２と、第一シフト部１３と、選択部１４と、ＣＲＣ計算部１５と、第二シフト部１６と、第二排他的論理和部１７と備える。
【００７７】
演算制御部１１は、ＳＯＦ信号と端数ビット数Ｈ（ｋ）から、ｋ番目の入力フレームの整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）を識別し、選択部１４、第一排他的論理和部１２へ出力する。
【００７８】
なお、端数ビットブロックＢ（ｘ）のビット数を表すＨ（ｋ）は、端数ビットブロックＢ（ｘ）とともに送られる最終ワード有効データ情報である。
【００７９】
また、演算制御部１１は、ビットのシフト量を示すシフト情報ｐ，ｑを生成し、シフト情報ｐを第一シフト部１３に出力し、シフト情報ｑを第二シフト部１６に出力する。ｐ＝Ｍ−Ｈ（ｋ）であり、ｑ＝Ｈ（ｋ）である。演算制御部１１は、Ｍ−Ｈ（ｋ）を計算することによりシフト情報ｐを生成すればよい。また、Ｈ（ｋ）の値をシフト情報ｑとすればよい。
【００８０】
演算制御部１１は、フレームに属するビット列が入力されていることを示す有効データ区間信号ＶＤＴを生成し、フレームのビット列の入力中（すなわちＳＯＦが入力されてからＨ（ｋ）が入力されるまでの間）ＶＤＴをＣＲＣ計算部１５に出力する。
【００８１】
また、演算制御部１１は、整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）のいずれを出力しているのかを示すデータ領域選択信号ＡＢＳＥＬを選択部１４およびＣＲＣ計算部１５に出力する。
【００８２】
入力フレームのフレーム長がＭビットの整数倍である場合、演算制御部１１は、整数倍ビットブロックＡ（ｘ）のみを出力し、端数ビットブロックＢ（ｘ）は出力しない。
【００８３】
第一排他的論理和部１２は、ＣＲＣ計算部１５によって求められる整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）と端数ビットブロックＢ（ｘ）の最上位ビットをそろえて、整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）と端数ビットブロックＢ（ｘ）との排他的論理和を求める。
【００８４】
第一シフト部１３は、第一排他的論理和部１２によって求められた排他的論理和演算の結果を、ＭビットのＣＲＣ計算部１５で処理するため、その排他的論理和演算の結果をｐ（ｐ＝Ｍ−Ｈ（ｋ））ビット分、最下位ビット側にシフトさせる。第一シフト部１３は、シフトによってデータがなくなることになる最上位側のｐビットに対して‘０’を設定する。第一シフト部１３は、シフト処理を行った結果を選択部１４に出力する。ＣＲＣ計算部１１５での演算対象は、シフト処理で設定された‘０’によってＣＲＣ値の演算結果は変化しないため、Ｈ（ｋ）ビットとなる。
【００８５】
選択部１４は、演算制御部１１で生成されたデータ領域選択信号ＡＢＳＥＬに従い、入力フレームのＭビット整数倍ビットブロックＡ（ｘ）と、第一シフト部１３の出力の切り替え処理を行う。すなわち、データ領域選択信号ＡＢＳＥＬが整数倍ビットブロックＡ（ｘ）の出力を示している場合、整数倍ビットブロックＡ（ｘ）をＣＲＣ計算部１５に出力し、データ領域選択信号ＡＢＳＥＬが端数ビットブロックＢ（ｘ）の出力を示している場合、第一シフト部１３の出力データをＣＲＣ計算部１５に出力する。入力フレーム長がＭビットの整数倍の場合、端数ビットは存在せず、第一シフト部１３の出力が選択されることはない。
【００８６】
ＣＲＣ計算部１５は、選択部１４が出力するＭビット幅データに対するＣＲＣ計算を行う。本ＣＲＣ計算部には、ｘｄを乗算する回路を含むＣＲＣ計算回路が使用される。
【００８７】
第二シフト部１６は、入力フレームのＭビット整数倍ビットブロックＡ（ｘ）に対するＣＲＣ計算（１５）の出力Ｒ（ｘ）を、上位側にｑ（ｑ＝Ｈ（ｋ））ビットシフトし、最下位側のｑビットに‘０’を割り当てる。これは、「Ｈ（ｋ）＜ｄ」となる場合に、第一シフト部１３で削除されてしまうＲ（ｘ）の一部分を得るために必要な処理である。なお、Ｒ（ｘ）は、入力フレームのＭビット整数倍ビットブロックＡ（ｘ）に対するＣＲＣ計算部１５の出力（ＣＲＣ値）である。第二シフト部１６は、ｑビットのシフト処理を行い、最下位側のｑビットに０を割り当てた結果を第二排他的論理和部１７に出力する。
【００８８】
第二排他的論理和部１７では、入力フレームのＣＲＣ値を得るため、第二シフト部１６の出力と、第一シフト部１３の出力に対するＣＲＣ計算部１５の出力との排他的論理和の処理を行う。
【００８９】
次に、図１に示すネットワークインタフェースカードおよび図２に示す並列ＣＲＣ演算処理部２−３（並列巡回符号生成装置）の動作について説明する。
【００９０】
図３は、ヘッダ付与部２−２および並列ＣＲＣ演算処理部２−３の入力信号および出力信号のタイミングチャートである。図３（ａ），（ｂ），（ｃ）は、それぞれヘッダ付与部２−２から出力されて並列ＣＲＣ演算処理部２−３に入力されるフレーム、ＳＯＦ、Ｈ（ｋ）を示している。同様に、図３（ｄ），（ｅ），（ｆ）は、それぞれＦＣＳ付与部２０４が出力するフレーム、ＳＯＦ、Ｈ（ｋ）を示している。
【００９１】
バス終端部２−１（図１参照）が、上位層からフレームを受信すると、フレームの先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）を生成し、Ｍビット幅のフレームとともに、ヘッダ付与部２−２へ出力する。バス終端部２−１は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【００９２】
ヘッダ付与部２−２は、バス終端部２−１から入力されたフレームにヘッダを付与し、ヘッダ付与後のフレームを並列ＣＲＣ演算処理回路２−３に出力する。また、ＳＯＦと、更新後のＨ（ｋ）を並列ＣＲＣ演算処理回路２−３に出力する（図３（ａ），（ｂ），（ｃ）参照）。ヘッダ付与部２−２は、ヘッダ付与後のフレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。ヘッダを付与することで端数ビットブロックＢ（ｘ）のビット数が変わるので、ヘッダ付与後の端数ビットブロックＢ（ｘ）のビット数をＨ（ｋ）として出力する。
【００９３】
並列ＣＲＣ演算処理部２−３は、ヘッダ付与部２−２が出力するフレーム（図３（ａ）では模式的に太線で表している。）のＣＲＣ値を演算し、その結果を、ＦＣＳ付与部２−４へ出力する。また、並列ＣＲＣ演算処理部２−３は、ヘッダ付与部２−２から入力されたフレーム、ＳＯＦ、Ｈ（ｋ）をＦＣＳ付与部２−４に出力する。
【００９４】
ＦＣＳ付与部２−４は、並列ＣＲＣ演算処理部２−３で演算されたＣＲＣ値をＦＣＳとして、並列ＣＲＣ演算処理部２−３から入力されたフレームの末尾に付与する（図３（ｄ）に示すＦＣＳ３−１，ＦＣＳ３−２参照）。そして、ＦＣＳ付与部２−４は、ＦＣＳを付与したフレーム、ＳＯＦ、Ｈ（ｋ）をＰＣＳ部２−５に出力する（図３（ｄ），（ｅ），（ｆ）参照）。ＦＣＳ付与部２−４は、ＦＣＳ付与後のフレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。ＦＣＳを付与することで端数ビットブロックＢ（ｘ）のビット数が変わるので、ＦＣＳ付与後の端数ビットブロックＢ（ｘ）のビット数をＨ（ｋ）として出力する。
【００９５】
ＰＣＳ部２−５は、ＦＣＳ付与部２−４からのフレームを符号化し、送信器２−６へ出力する。
【００９６】
送信器２−６は、ＰＣＳ部２−５からのＭビット幅のデータをパラレルシリアル変換し、伝送路へ送信する。
【００９７】
次に、並列ＣＲＣ演算処理部２−３の動作を説明する。図４は、並列ＣＲＣ演算処理回路２−３の各構成要素の入力や出力を示すタイミングチャートである。図４（ａ），（ｂ），（ｃ）は、それぞれ演算制御部１１に入力されるＳＯＦ、Ｈ（ｋ）、フレームを表している。また、図４（ｄ）は、演算制御部１１に入力されるフレームをワード（列）単位で示している。各ワードはＭビットである。図４（ｅ），（ｆ）は、それぞれ選択部１４、ＣＲＣ計算部１５の出力を表している。図４（ｇ）〜（ｊ）は、それぞれＶＤＴ、ＡＢＳＥＬ、シフト情報ｐ、シフト情報ｑを表している。
【００９８】
図４（ａ）〜（ｄ）に示すように、演算制御部１１には、ヘッダ付与部２−２（図１参照）から、ＣＲＣ演算対象となるＭビット幅のフレームと、フレームの先頭を示すＳＯＦ信号と、データ最後尾の端数ビット数を示す最終ワード有効データ信号Ｈ（ｋ）が入力される。
【００９９】
演算制御部１１に入力されるフレームのビット長が並列幅Ｍビットの整数倍でない場合、そのフレームには、Ｍビットの整数倍ビットブロックＡ（ｘ）と、ビット長がＨ（ｋ）ビットである端数ビットブロックＢ（ｘ）が含まれている。１番目からｗ−１番目までのワード列のデータ（‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’）全体が整数倍ビットブロックＡ（ｘ）である。なお、Ａ（ｘ）おける、各ワード列のデータ‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’は、それぞれＭビット幅のデータ列であり、‘＃１’〜‘＃（ｗ−１）’は、それぞれ該フレームデータ内でのワード列の番号を示している。また、ｗ番目のワード列のデータ‘ｂ（ｘ）’は、端数ビットブロックＢ（ｘ）を含むビット列である。
【０１００】
図４（ａ）〜（ｄ）に示すようにフレームと信号（ＳＯＦ，Ｈ（ｋ））が入力されると、演算制御部１１は、ＳＯＦが入力されてからＨ（ｋ）が入力されるまでの間、有効データ区間信号ＶＤＴを「有効（フレームに属するビット列が入力されていること）」を示す状態としてＣＲＣ計算部１５に出力する（図４（ｇ）参照）。図４（ｇ）では、‘Ｈ（ハイ）’レベルは有効を示し、‘Ｌ（ロー）’レベルは無効（フレームに属するビット列が入力されていないこと）を示している。
【０１０１】
また、演算制御部１１は、入力されたフレームに含まれる整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）を、選択部１４と第一排他的論理和部１２に出力する。また、整数倍ビットブロックＡ（ｘ）である１番目からｗ−１番目までの各ワード列の各ビット列が入力されてそのビット列を出力している間、演算制御部１１は、データ領域選択信号ＡＢＳＥＬを「Ａ（ｘ）側」として、選択部１４およびＣＲＣ計算部１５に出力する。端数ビットブロックＢ（ｘ）を含むビット列が入力されてそのビット列を出力する時には、演算制御部１１は、データ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」として、選択部１４およびＣＲＣ計算部１５に出力する。図４（ｈ）では、‘Ｈ’レベルは「Ａ（ｘ）側」を示し、‘Ｌ’レベルは「Ｂ（ｘ）側」を示している。
【０１０２】
選択部１４は、図４（ｈ）に示すデータ領域選択信号ＡＢＳＥＬに従い、ＡＢＳＥＬが「Ａ（ｘ）側」である時には、演算制御部１１から入力される１番目からｗ−１番目までの各ワード列のデータ‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’をＣＲＣ計算部１５へ出力する。また、ＡＢＳＥＬが「Ｂ（ｘ）側」である時には、第一シフト部１３が出力するデータ（Ｒ（ｘ）とＢ（ｘ）との排他的論理和を下位側にｐビットシフトしたデータ）をＣＲＣ計算部１５へ出力する。
【０１０３】
ＣＲＣ計算部１５は、選択部１４が出力する‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’の整数倍ビットブロックＡ（ｘ）に対するＣＲＣ 計算を行い、整数倍ビットブロックＡ（ｘ）のＣＲＣ値であるＲ（ｘ）を出力する（図４（ｆ）のｗワード列参照）。
【０１０４】
ここで、ＣＲＣ計算部１５が整数倍ビットブロックＡ（ｘ）のＣＲＣ値（Ｒ（ｘ））を計算する方法について説明する。ＣＲＣ計算部１５は、Ｍビット幅のデータの各ビットを係数とするＭ−１次多項式を次数ｄの任意の生成多項式Ｇ（ｘ）で除算し、剰余を求める。生成多項式Ｇ（ｘ）の次数ｄは予め定められている。整数倍ビットブロックＡ（ｘ）のビット長はＭの整数倍（ｗ−１倍）であるので、ＣＲＣ計算部１５は上記のようにＭビットのデータに関して剰余を求める計算を、整数倍ビットブロックＡ（ｘ）の最初のＭビット‘ａ（ｘ）＃１’から最後のＭビット‘ａ（ｘ）＃（ｗ−１）’までについてそれぞれ行う。ＣＲＣ計算部１５は、最初のＭビット‘ａ（ｘ）＃１’について剰余を求めたならば、その剰余を保持する。次のＭビット‘ａ（ｘ）＃２’が入力されると、ＣＲＣ計算部１５は、保持していた剰余を表すデータ（ｄビット）を上位側に（Ｍ−ｄ）ビットシフトし、次のＭビット‘ａ（ｘ）＃２’との排他的論理和を求め、その排他的論理和が表すＭ−１次多項式を生成多項式Ｇ（ｘ）で除算したときの剰余を求め、保持する。そして、ＣＲＣ計算部１５は、以降のＭビットのデータについても同様の処理を繰り返す。剰余を表すデータの各ビットはｄ−１次の多項式の係数に相当し、上位側に（Ｍ−ｄ）ビットシフトするとは、高次の項に対応するビット側に（Ｍ−ｄ）ビットシフトすることである。ＣＲＣ計算部１５は、最後のＭビット‘ａ（ｘ）＃（ｗ−１）’が入力されると、保持していた剰余を表すデータを上位側に（Ｍ−ｄ）ビットシフトし、最後のＭビット‘ａ（ｘ）＃（ｗ−１）’ との排他的論理和を求める。そして、ＣＲＣ計算部１５は、その排他的論理和が表すＭ−１次多項式を生成多項式Ｇ（ｘ）で除算したときの剰余を求め、その求めた剰余を整数倍ビットブロックＡ（ｘ）のＣＲＣ値（Ｒ（ｘ））として算出する。
【０１０５】
図４（ｅ），（ｆ）を参照して具体的に説明する。ＣＲＣ計算部１５は、整数倍ビットブロックＡ（ｘ）の１ワード目‘ａ（ｘ）＃１’について、各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。図４（ｆ）に示す‘Ｒ（ｘ）＃１’が、その保持されたデータである。続いて、ＣＲＣ計算部１５は、保持していた‘Ｒ（ｘ）＃１’を上位側に（Ｍ−ｄ）ビットシフトし、整数倍ビットブロックＡ（ｘ）の、２ワード目‘ａ（ｘ）＃２’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。図４（ｆ）に示す‘Ｒ（ｘ）＃２’が、その保持されたデータである。同様に、ＣＲＣ計算部１５は、保持していた‘Ｒ（ｘ）＃２’を上位側に（Ｍ−ｄ）ビットシフトし、整数倍ビットブロックＡ（ｘ）の、３ワード目‘ａ（ｘ）＃３’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。ＣＲＣ計算部１５は、この処理をｗ−１ワード目まで行うことでＲ（ｘ）を算出する。ｗ−１ワード目に関して処理を行うときに保持していた‘Ｒ（ｘ）＃（ｗ−２）’を上位側に（Ｍ−ｄ）ビットシフトシフトした結果とｗ−１ワード目‘ａ（ｘ）＃（ｗ−１）’との排他的論理和の各ビットを係数とする多項式を、生成多項式Ｇ（ｘ）で除算したときの剰余がＲ（ｘ）である。
【０１０６】
上記のような処理でＲ（ｘ）を求める処理を式で示す。１ワード目‘ａ（ｘ）＃１’および２ワード目‘ａ（ｘ）＃２’とからなるデータ列をＮ１（ｘ）とする、Ｎ１（ｘ）のＣＲＣ値‘Ｒ（ｘ）＃２’を求めるとする。このとき、Ｎ１（ｘ）は、式（１４）のように表される。
【０１０７】
Ｎ１（ｘ）＝ａ（ｘ）＃１・ｘＭ＋ａ（ｘ）＃２                    式（１４）
【０１０８】
Ｎ１（ｘ）のＣＲＣ値‘Ｒ（ｘ）＃２’は、式（１５）のように表される。
【０１０９】
Ｒ（ｘ）＃２＝［Ｎ１（ｘ）・ｘｄ］  ｍｏｄ  Ｇ（ｘ）            式（１５）
【０１１０】
式（１４）を用いて、式（１５）は、以下の式（１６）のように変形できる。
【０１１１】
Ｒ（ｘ）＃２＝｛［ａ（ｘ）＃１・ｘＭ＋ａ（ｘ）＃２］・ｘｄ｝  ｍｏｄ  Ｇ（ｘ）
式（１６）
【０１１２】
また、以下の式（１７）が成立し、式（１６）および式（１７）から式（１８）を導くことができる。式（１８）は、式（１９）のように変形することができる。
【０１１３】
Ｒ（ｘ）＃１＝［ａ（ｘ）＃１・ｘｄ］  ｍｏｄ  Ｇ（ｘ）          式（１７）
【０１１４】
Ｒ（ｘ）＃２＝｛Ｒ（ｘ）＃１・ｘＭ＋ａ（ｘ）＃２・ｘｄ｝  ｍｏｄ  Ｇ（ｘ）
式（１８）
【０１１５】
Ｒ（ｘ）＃２＝｛［Ｒ（ｘ）＃１・ｘ（Ｍ−ｄ）＋ａ（ｘ）＃２］・ｘｄ｝  ｍｏｄ  Ｇ（ｘ）
式（１９）
【０１１６】
上記の式が、保持していたデータを（Ｍ−ｄ）ビットシフトシフトした結果と次のＭビットとの排他的論理和に対する除算により剰余を求める処理を示している。
【０１１７】
また、ＣＲＣ計算部１５は、選択部１４が出力する‘ｂ´（ｘ）’については、その各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余をＲ´（ｘ）とする。Ｒ´（ｘ）を求めるときには、保持しているデータに対するビットシフトおよび排他的論理和演算は行わない。
【０１１８】
ＣＲＣ計算部１５は、第一排他的論理和部１２にＲ（ｘ）を出力する。また、演算制御部１１は、ｗ−１番目のワード列に続いて、最終ワード有効データ信号Ｈ（ｋ）と端数ビットブロックＢ（ｘ）を含むビット列ｂ（ｘ）をヘッダ付与部２−２から受信し、そのビット列ｂ（ｘ）を第一排他的論理和部１２に出力する。従って、第一排他的論理和部１２には、Ｒ（ｘ）と、端数ビットブロックＢ（ｘ）を含むビット列ｂ（ｘ）とが入力される。
【０１１９】
また、演算制御部１１は、最終ワード有効データ信号Ｈ（ｋ）を受信すると、データ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」として選択部１４へ出力する。また、演算制御部１１は、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））を第一シフト部１３へ出力し、シフト情報ｑ（ｑ＝Ｈ（ｋ））を第二シフト部１６へ出力する（図４（ｈ）〜（ｊ）参照）。
【０１２０】
第一排他的論理和部１２は、整数倍ビットブロックＡ（ｘ）に対するＣＲＣ計算部１５の出力（Ａ（ｘ）のＣＲＣ値）であるＲ（ｘ）と端数ビットブロックＢ（ｘ）との排他的論理和を計算する。Ｒ（ｘ）の長さはｄビットである。図５は、Ｒ（ｘ）とＢ（ｘ）との排他的論理和を求める演算を示す説明図である。図５（ａ）は、ビット列ｂ（ｘ）を示している。ビット列ｂ（ｘ）は、長さＨ（ｋ）ビットの端数ビットブロックＢ（ｘ）を含んでいる。図５（ｂ）は、図４（ｆ）のｗワード列に示す整数倍ビットブロックＡ（ｘ）のＣＲＣ計算値Ｒ（ｘ）である。第一排他的論理和部１２は、Ｂ（ｘ）とＲ（ｘ）との排他的論理和の計算結果であるＢ´（ｘ）（長さＨ（ｋ）ビット）を含むＭビットのデータ列（図５（ｃ）参照）を第一シフト部１３に出力する。第一排他的論理和部１２は、最上位ビットをあわせて、Ｂ（ｘ）を含むＭビットのデータ列とＲ（ｘ）との排他的論理和を計算し、Ｂ´（ｘ）を含むＭビットのデータ列を求め、そのデータ列を第一シフト部１３に出力すればよい。
【０１２１】
図６は、第一シフト部１３によるシフト処理を示す説明図である。第一シフト部１３は、第一排他的論理和部１２の出力（図６（ａ）参照）に含まれるＢ´（ｘ）に対するＣＲＣ計算をＭビット入力のＣＲＣ計算部１５で行えるようにするため、演算制御部１１からのシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））に従い、第一排他的論理和部１２の出力データをｐビット分、最下位ビット側へシフトする。なお、第一シフト部１３は、シフトによってデータがなくなることになる最上位側のｐビットには、ＣＲＣ演算値に影響を与えない‘０’を設定する。シフト処理および上位ｐビットに対する‘０’の設定を行ったデータ列をｂ´（ｘ）と記す。図６（ｂ）は、このデータ列ｂ´（ｘ）を示している。データ列ｂ´（ｘ）のビット長はＭビットである。第一シフト部１３は、データ列ｂ´（ｘ）を選択部１４に出力する。
【０１２２】
このとき、演算制御部１１はデータ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」としているので、選択部１４は、第一シフト部１３から入力されるデータ列ｂ´（ｘ）をＣＲＣ計算部１５に出力する（図４（ｅ）のｗ列参照）。
【０１２３】
図７は、第一シフト部１３の構成例を示すブロック図である。第一シフト部１３は、セレクタ回路と制御部との組をＭ組備える。図７では、１番目からＭ番目までの各セレクタ回路をそれぞれ符号‘８１−１’〜‘８１−Ｍ’で表している。同様に、１番目からＭ番目までの各制御部をそれぞれ符号‘８２−１’〜‘８２−Ｍ’で表している。各セレクタ回路８１−１〜８１−Ｍには、Ｍビットのデータと１ビットの‘０’の値が入力される。Ｍビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ１〜入力ビットデータＭと記す。各セレクタ回路８１−１〜８１−Ｍは、入力ビットデータ１から入力ビットデータＭのうちのいずれか、または入力される‘０’を選択して出力する。各セレクタ回路８１−１〜８１−Ｍが出力する出力データは１ビットのデータである。
【０１２４】
セレクタ回路と制御部の組は、それぞれ順番に最上位から最下位までの各ビットに対応している。そして、各制御部８２−１〜８２−Ｍはそれぞれ、組をなすセレクタ回路に対して、対応する入力ビットデータよりもｐビット上位の入力ビットデータの出力を指示し、ｐビット上位の入力ビットデータがなければ‘０’を出力することを指示する信号を出力する。セレクタ回路８１−１〜８１−Ｍは、制御部から送られるこの信号に応じて、１ビットのデータを出力する。
【０１２５】
セレクタ回路８１−１〜８１−Ｍから１ビットずつ出力されるビットのビット列がシフト処理後のデータとなる。
【０１２６】
次に具体例を挙げて、第一シフト部１３の動作を説明する。Ｍ＝３であり、第一シフト部１３は、セレクタ回路８１−１〜８１−３と、制御部８２−１〜８２−３とを備えているとする。第一シフト部１３に入力されるＭビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ１〜入力ビットデータ３とする。また、セレクタ回路８１−１〜８１−３が出力する各ビットを、それぞれ出力ビットデータ１〜出力ビットデータ３とする。出力ビットデータ１は、シフト後における最上位ビットのデータであり、出力ビットデータ３は、シフト後における最下位ビットのデータである。
【０１２７】
例えば、シフト情報ｐ＝１であるとする。この場合、以下のように動作する。
【０１２８】
制御部８２−１は、シフト情報ｐ＝１に基づいて、‘０’を出力する信号をセレクタ回路８１−１へ出力する。セレクタ回路８１−１は、制御部８２−１からの信号に従い‘０’を選択し、出力ビットデータ１として出力する。
【０１２９】
制御部８２−２は、シフト情報ｐ＝１に基づいて、入力ビットデータ１を出力する信号をセレクタ回路８１−２へ出力する。セレクタ回路８１−２は、制御部（８２−２）からの信号に従い入力ビットデータ１を選択し、出力ビットデータ２として出力する。
【０１３０】
制御部８２−３は、シフト情報ｐ＝１に基づいて、入力ビットデータ２を出力する信号をセレクタ回路８１−３へ出力する。セレクタ回路８１−３は、制御部８２−３からの信号に従い入力ビットデータ２を選択し、出力ビットデータ３として出力する。
【０１３１】
上記の動作により、第一シフト部１３の出力ビットデータ１として‘０’が出力され、出力ビットデータ２として入力ビットデータ１が出力され、出力ビットデータ３として入力ビットデータ２が出力される。このように、シフト情報ｐ＝１により、３ビットの入力データが1ビット最下位ビット側にシフトされる。
【０１３２】
また、例えば、シフト情報ｐ＝２であるとする。この場合、以下のように動作する。
【０１３３】
制御部８２−１は、シフト情報ｐ＝２に基づいて、‘０’を出力する信号をセレクタ回路８１−１へ出力する。セレクタ回路８１−１は、制御部８２−１からの信号に従い‘０’を選択し、出力ビットデータ１として出力する。
【０１３４】
制御部８２−２は、シフト情報ｐ＝２に基づいて、‘０’を出力する信号をセレクタ回路８１−２へ出力する。セレクタ回路８１−２は、制御部８２−２からの信号に従い‘０’を選択し、出力ビットデータ２として出力する。
【０１３５】
制御部８２−３は、シフト情報ｐ＝２に基づいて、入力ビットデータ１を出力する信号をセレクタ回路８１−３へ出力する。セレクタ回路８１−３は、制御部８２−３からの信号に従い入力ビットデータ１を選択し、出力ビットデータ３として出力する。
【０１３６】
上記の動作により、第一シフト部１３の出力ビットデータ１として‘０’が出力され、、出力ビットデータ２として‘０’が出力され、出力ビットデータ３として入力ビットデータ１が出力される。このように、シフト情報ｐ＝２により、入力ビットデータが、３ビットの入力データが２ビット最下位ビット側にシフトされる。
【０１３７】
ここではＭ＝３の場合を例示して説明したが、Ｍの値が他の値であっても同様である。
【０１３８】
ＣＲＣ計算部１５は、Ｍビット幅のＣＲＣ計算を行うブロックである。そして、ＡＢＳＥＬが「Ｂ（ｘ）側」であるとき、ＣＲＣ計算部１５は、選択部１４から入力されるデータ列ｂ´（ｘ）（最下位側にｐビットシフトされたB´（ｘ）を含むデータ列）に対してＣＲＣ計算を行い、B´ （ｘ）のＣＲＣ値Ｒ´（ｘ）を出力する（図４（ｆ）のｗ＋１列参照）。既に説明したように、ＣＲＣ計算部１５は、ｂ´（ｘ）の各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余をＲ´（ｘ）とする。
【０１３９】
図８は、第二シフト部１６によるシフト処理を示す説明図である。第二シフト部１６には、シフト情報ｑ（ｑ＝Ｈ（ｋ））が演算制御部１１から入力される（図４（ｊ）参照）。第二シフト部１６は、このシフト情報ｑに従い、整数倍ビットブロックＡ（ｘ）に対するＣＲＣ計算部１５の出力Ｒ（ｘ）を、図８に示すように、最上位ビット側へｑビットシフト処理し、長さdビットのデータＲ´´（ｘ）を出力する。図８（ａ）では、整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）を、式（７）を使用して示している。整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）は、シフト情報ｑに応じて最上位側にｑビットシフトされると、式（７）における「ｒ（ｄ−Ｈ（ｋ）−１）・ｘｄ−Ｈ（ｋ）−１」から「ｒ（０）・ｘ０」までを表すビットが残る。この「ｒ（ｄ−Ｈ（ｋ）−１）・ｘｄ−Ｈ（ｋ）−１」から「ｒ（０）・ｘ０」までの部分は、式（８）におけるＲ２（ｘ）と一致し、第二シフト部１６でのシフト結果は、式（１１）におけるＲ´´（ｘ）と一致する。なお、第二シフト部１６は、シフトによってデータがデータがなくなることになる最下位側のｑビットに対して‘０’を設定する。上記処理は、「Ｈ（ｋ）＜ｄ」となる場合に、第一シフト部１３で削除されてしまうＭビット整数倍ビットブロックＡ（ｘ）のＣＲＣ計算結果Ｒ（ｘ）の一部分を得るために必要な処理である。
【０１４０】
図９は、第二シフト部１６の構成例を示すブロック図である。第二シフト部１６は、セレクタ回路と制御部との組をｄ組備える。図９では、１番目からｄ番目までの各セレクタ回路をそれぞれ符号‘９１−１’〜‘９１−ｄ’で表している。同様に、１番目からｄ番目までの各制御部をそれぞれ符号‘９２−１’〜‘９２−ｄ’で表している。各セレクタ回路９２−１〜９２−ｄには、ｄビットのデータと１ビットの‘０’の値が入力される。ｄビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ１〜入力ビットデータｄと記す。各セレクタ回路９１−１〜９１−ｄは、入力ビットデータ１から入力ビットデータｄのうちのいずれか、または入力される‘０’を選択して出力する。各セレクタ回路９１−１〜９１−ｄが出力する出力データは１ビットのデータである。
【０１４１】
セレクタ回路と制御回路の組は、それぞれ順番に最上位から最下位までの各ビットに対応している。そして、各制御部９２−１〜９２−ｄはそれぞれ、組をなすセレクタ回路に対して、対応する入力ビットデータよりもｑビット下位の入力ビットデータの出力を指示し、ｑビット下位の入力ビットデータがなければ‘０’を出力することを指示する信号を出力する。セレクタ回路９１−１〜９１−ｄは、制御部から送られるこの信号に応じて、１ビットのデータを出力する。
【０１４２】
セレクタ回路９１−１〜９１−ｄから１ビットずつ出力されるビットのビット列がシフト処理後のデータとなる。
【０１４３】
次に具体例を挙げて、第二シフト部１６の動作を説明する。ここでは、ｄ＝３であり、第二シフト部１６は、セレクタ回路９１−１〜９１−３と、制御部９２−１〜９２−３とを備えているとする。第二シフト部１６に入力されるｄビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ１〜入力ビットデータ３とする。また、セレクタ回路９１−１〜９１−３が出力する各ビットを、それぞれ出力ビットデータ１〜出力ビットデータ３とする。出力ビットデータ１は、シフト後における最上位ビットのデータであり、出力ビットデータ３は、シフト後における最下位ビットのデータである。
【０１４４】
例えば、シフト情報ｑ＝１であるとする。この場合、以下のように動作する。
【０１４５】
制御部９２−１は、シフト情報ｑ＝１に基づいて、入力ビットデータ２を出力する信号をセレクタ回路９１−１へ出力する。セレクタ回路９１−１は、制御部９２−１からの信号に従い入力ビットデータ２を選択し、出力ビットデータ１として出力する。
【０１４６】
制御部９２−２は、シフト情報ｑ＝１に基づいて、入力ビットデータ３を出力する信号をセレクタ回路９１−２へ出力する。セレクタ回路９１−２は、制御部９２−２からの信号に従い入力ビットデータ３を選択し、出力ビットデータ２として出力する。
【０１４７】
制御部９２−３は、シフト情報ｑ＝１に基づいて、‘０’を出力する信号をセレクタ回路９１−３へ出力する。セレクタ回路９１−３は、制御部９２−３からの信号に従い‘０’を選択し、出力ビットデータ３として出力する。
【０１４８】
上記の動作により、第二シフト部１６の出力ビットデータ１として入力ビットデータ２が出力され、出力ビットデータ２として入力ビットデータ３が出力され、出力ビットデータ３として‘０’が出力される。このように、シフト情報ｑ＝１により、３ビットの入力データが１ビット最上位ビット側にシフトされる。
【０１４９】
また、例えば、シフト情報ｑ＝２であるとする。この場合、以下のように動作する。
【０１５０】
制御部９２−１は、シフト情報ｑ＝２に基づいて、入力ビットデータ３を出力する信号をセレクタ回路９１−１へ出力する。セレクタ回路９１−１は、制御部９２−１からの信号に従い入力ビットデータ３を選択し、出力ビットデータ１として出力する。
【０１５１】
制御部９２−２は、シフト情報ｑ＝２に基づいて、‘０’を出力する信号をセレクタ回路９１−２へ出力する。セレクタ回路９１−２は、制御部９２−２からの信号に従い‘０’を選択し、出力ビットデータ２として出力する。
【０１５２】
制御部９２−３は、シフト情報ｑ＝２に基づいて、‘０’を出力する信号をセレクタ回路９１−３へ出力する。セレクタ回路９１−３は、制御部９２−３からの信号に従い‘０’を選択し、出力ビットデータ３として出力する。
【０１５３】
上記の動作により、第二シフト部１６の出力ビットデータとして入力ビットデータ３が出力され、出力ビットデータ２として‘０’が出力され、出力ビットデータ３として‘０’が出力される。このように、シフト情報ｑ＝２により、３ビットの入力データが２ビット最上位ビット側にシフトされる。
【０１５４】
第二排他的論理和部１７は、第二シフト部１６の出力Ｒ´´（ｘ）と、第一シフト部１３の出力Ｂ´（ｘ）に対するＣＲＣ計算部１５の出力Ｒ´（ｘ）との排他的論理和を計算する。第二シフト部１６の出力Ｒ´´（ｘ）は、整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）をｑビット最上位側にシフトしたデータである。また、出力Ｂ´（ｘ）に対するＣＲＣ計算部１５の出力Ｒ´（ｘ）は、端数ビットブロックＢ（ｘ）とＲ（ｘ）との排他的論理和を最下位側にｐビットシフトしたデータのＣＲＣ値である。
【０１５５】
第二排他的論理和部１７によって計算されるＲ´´（ｘ）とＲ´（ｘ）との排他的論理和は、並列ＣＲＣ演算処理部２−３に入力されるフレームに対するＣＲＣ値である。第二排他的論理和部１７は、Ｒ´´（ｘ）とＲ´（ｘ）との排他的論理和を計算することによって得たＣＲＣ値を、Ｍビット幅のフレーム（入力されたフレーム）、ＳＯＦ、Ｈ（ｋ）とともにＦＣＳ付与部２−４に出力する。
【０１５６】
並列ＣＲＣ演算処理部（並列巡回符号生成装置）２−３が備える各構成要素（演算制御部１１、第一排他的論理和部１２、第一シフト部１３、選択部１４、ＣＲＣ計算部１５、第二シフト部１６、第二排他的論理和部１７）は、それぞれ別個の回路であってもよい。また、並列ＣＲＣ演算処理部２−３が備える各構成要素は、プログラム（並列巡回符号生成プログラム）に従って動作するＣＰＵによって実現されていてもよい。例えば、ＣＰＵが、予め記憶装置に記憶された並列巡回符号生成プログラムを読み込み、その並列巡回符号生成プログラムに従って、演算制御部１１、第一排他的論理和部１２、第一シフト部１３、選択部１４、ＣＲＣ計算部１５、第二シフト部１６、第二排他的論理和部１７として動作してもよい。
【０１５７】
次に、本実施形態の効果について説明する。
本実施形態によれば、第一排他的論理和部１２が、入力フレームのＭビットの整数倍ビットブロックのＣＲＣ値と、端数ビットブロックとの排他的論理和を計算し、第一シフト部１３が、その排他的論理和を最下位ビット側にｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットシフトする。そして、ＣＲＣ計算部１５は、そのシフト後のデータのＣＲＣ値（Ｒ´（ｘ））を計算する。また、第二シフト部１６が、可変長フレームのＭの整数倍ビットブロックのＣＲＣ値を最上位側にｑビットシフトし、第二排他的論理和部１７が、そのデータとＲ´（ｘ）との排他的論理和を計算することによって、入力フレームのＣＲＣ値を計算する。このように計算することにより、可変長の入力フレームのフレーム長によらず、フレーム長を求めるためのバッファリングを行わずに、入力フレームのＣＲＣ値を計算することができる。そして、その結果、巡回符号演算における処理遅延および回路の規模の増大を防止することができ、広帯域化の制約を緩和することができる。
【０１５８】
図１８に示す構成と本発明を比較すると、図１８に示す構成では、１フレーム分以上のデータのバッファリングが必要となり、その分、処理遅延が増大していた。本発明では、数クロック分の処理遅延のみでＣＲＣ値を生成することができる。遅延特性が重要なサーバ製品や高性能コンピューティング製品領域における通信技術、とくにネットワークインタフェースカードに本発明を適用すれば、超低遅延のＣＲＣ生成が可能となる。
【０１５９】
また、本発明によれば、バッファリングの必要がないので、バッファリングのための構成要素を設ける必要がなく、回路規模を削減することができる。よって、ルータ装置やＬＡＮスイッチ装置をはじめとする通信装置や、サーバ製品、高性能コンピューティング装置を小型化することが可能である。また、バッファリングを必要としないため、将来、イーサネットに代わるフレーム長を拡大した通信技術の実現が可能である。
【０１６０】
上記の説明では、図２に示す並列ＣＲＣ演算処理部２−３（並列巡回符号生成装置）がビット単位のシフトを行ってフレームのＣＲＣ値を求める場合を示したが、シフト処理におけるシフト量は１ビット単位でなくてもよい。演算制御部１１がバイト単位等のように複数ビット単位でシフト情報ｐ、シフト情報ｑを生成し、第一シフト部１３および第二シフト部１６が複数ビット単位でのシフト処理を行ってもよい。
【０１６１】
また、上記の実施形態では、並列ＣＲＣ演算処理部２−３がＣＲＣ符号（ＣＲＣ値）を求めるＣＲＣ符号演算を行う場合を例にして説明しているが、入力情報列を生成多項式Ｇ（ｘ）で除算して求められるハミング符号やＢＣＨ符号等のような、ＣＲＣ符号以外の巡回符号の生成にも本発明を適用することができる。その場合には、ＣＲＣ値を計算するＣＲＣ計算部１５の代わりに、他の巡回符号（ハミング符号やＢＣＨ符号等）を計算する手段を備えていればよい。ＣＲＣ値以外の巡回符号を計算する場合であっても、シフト処理によって、入力フレームのビット長を求めるためのバッファリングを行わなくて済むという効果を得ることができ、処理遅延および回路規模の増大を防止し、また、広帯域化の制約を緩和できる。
【０１６２】
実施形態２．
第２の実施形態では、巡回符号を検査する演算を行う並列巡回符号検査装置を示す。図１０は、本発明が適用されたイーサネットスイッチの構成例を示すブロック図である。図１０に示すイーサネットスイッチは、ラインカード受信部１０１−１〜１０１−Ｃと、スイッチ部１０３と、ラインカード送信部１０２−１〜１０２−Ｃとを備える。一つのラインカード受信部と、一つのラインカード送信部とが対となっていて、そのラインカード受信部とラインカード送信部との組の数をＣとする。Ｃは１以上の任意の正の整数である。図１０におてラインカード受信部を示す符号‘１０１−１’〜‘１０１−Ｃ’におけるハイフンの後の数字は、ラインカード受信部とラインカード送信部との組を表している。ラインカード送信部を示す符号‘１０２−１’〜‘１０２−Ｃ’においても同様である。任意の組のインカード受信部とラインカード送信部は、符号‘１０１−ｃ’， ‘１０２−ｃ’で表される。ただし、ｃは、１以上Ｃ以下の正の整数である。対になるラインカード受信部１０１−ｃおよびラインカード送信部１０２−ｃは、例えば１つのラインカードとして実装される。そして、Ｃ個のラインカードがそれぞれポート毎に存在し、スイッチ部１０３に接続される。
【０１６３】
各ラインカード受信部１０１−１〜１０１−Ｃは、フレームの受信、解析、検査、廃棄を行い、転送可能フレームをスイッチ部１０３へ転送する。以下、ラインカード受信部１０１−１を例にして構成および動作を説明するが、他のラインカード受信部の構成および動作についても同様である。
【０１６４】
ラインカード受信部１０１−１は、受信器１００−１と、ＰＣＳ部１００−２と、ヘッダ解析部１００−３と、並列ＣＲＣ検査部１００−４と、フレーム廃棄部１００−５と、フレームバッファ部１００−６とを備える。
【０１６５】
ラインカード受信部１０１−１内において、受信器１００−１は、ＰＣＳ部１００−２に接続される。受信器１００−１は、外部からフレームを受信すると、そのフレームをシリアルデータからパラレルデータに変換し、ＰＣＳ部１００−２に出力する。
【０１６６】
ＰＣＳ部１００−２は、受信器１００−１とヘッダ解析部１００−３に接続される。ＰＣＳ部１００−２は、８Ｂ／１０Ｂ変換や６４Ｂ／６６Ｂ変換符号により符号化されているフレームを復号し、Ｍビット幅のフレームをヘッダ解析部１００−３に出力する。例えば、１０ギガビット・イーサネットが採用されている場合には、６４Ｂ／６６Ｂ変換によってフレームを復号する。また、ＰＣＳ部１００−２は、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）を生成し、ビット幅のフレームとともにヘッダ解析部１００−３に出力する。ＰＣＳ部１００−２は、例えば、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１６７】
ヘッダ解析部１００−３は、ＰＣＳ部１００−２と、並列ＣＲＣ検査部１００−４と、フレーム廃棄部１００−５に接続される。ヘッダ解析部１００−３は、ＰＣＳ部１００−２から入力されるフレームのヘッダの内容を解析し、フレーム制御情報を出力する。また、ヘッダ解析部１００−３は、フレームを並列ＣＲＣ検査部１００−４に出力する。このとき、ヘッダ解析部１００−３は、例えば、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１６８】
並列ＣＲＣ検査部１００−４は、ヘッダ解析部１００−３とフレーム廃棄部１００−５に接続される。並列ＣＲＣ検査部１００−４は、フレームの誤りを検出するために、フレームのヘッダからフレームＦＣＳまでのＣＲＣ演算を行う。そして、並列ＣＲＣ検査部１００−４は、ＣＲＣ検査結果（誤り検出の結果）をフレーム廃棄部１００−５に出力する。
【０１６９】
フレーム廃棄部１００−５は、ヘッダ解析部１００−３と、並列ＣＲＣ検査部１００−４と、フレームバッファ部１００−６に接続される。フレーム廃棄部１００−５は、ヘッダ解析部１００−３からのフレーム制御情報と、並列ＣＲＣ検査部１００−４からのＣＲＣ検査結果とに応じて、並列ＣＲＣ検査部１００−４から入力されるフレームを廃棄する。また、フレーム廃棄部１００−５は、ＣＲＣ検査結果が正常であるフレームとその制御情報をフレームバッファ部１００−６に出力する。
【０１７０】
フレームバッファ部１００−６は、フレーム廃棄部１００−５とスイッチ部１０３に接続される。フレームバッファ部１００−６は、スイッチ部１０３に送信するフレームとその制御情報をバッファリングする。
【０１７１】
スイッチ部１０３は、ラインカード受信部１０１−１から入力されるフレームを、フレーム制御情報に従って、ラインカード受信部１０１−１と対になるラインカード送信部１０２−１に転送する。
【０１７２】
ラインカード送信部１０２−１は、スイッチ部１０３から転送されるフレームをシリアルデータに変換して送信する。他のラインカード送信部も同様である。
【０１７３】
並列ＣＲＣ検査部１００は、本発明の並列巡回符号検査装置である。図１１は、本発明の第２実施形態を示すブロック図であり、図１１を参照して、並列ＣＲＣ検査部１００について説明する。
【０１７４】
並列ＣＲＣ検査部１００−４には、Ｍビット幅の入力フレーム（ＦＣＳ値を含む）に対する誤り検出を行う。ＦＣＳ値は巡回符号であり、ＦＣＳ値を含むフレームのビット長は任意である。並列ＣＲＣ検査部１００−４は、入力されるフレームのフレーム長が並列幅Ｍビットの整数倍でない場合に、整数倍ビットブロックＡ（ｘ）、端数ビットブロックＢ（ｘ）、端数ビットブロックの長さＨ（ｋ）を検出し、また入力データの有効データ区間信号ＶＤＴを生成する。
【０１７５】
並列ＣＲＣ検査部１００−４は、整数倍ビットブロックＡ（ｘ）のＣＲＣ演算結果Ｒ（ｘ）と端数ビットブロックＢ（ｘ）の最上位ビットをあわせて、Ｒ（ｘ）とＢ（ｘ）とのＭビットの排他的論理和を求める。
【０１７６】
並列ＣＲＣ検査部１００−４は、その排他的論理和を最下位ビット側にｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットシフトさせる。Ｒ（ｘ）とＢ（ｘ）との排他的論理和Ｂ´´（ｘ）の長さはＨ（ｋ）ビットであり、Ｍビット幅入力のＣＲＣ計算部でＢ´´（ｘ）のＣＲＣ計算を行うために、このシフト処理を行う。
【０１７７】
また、並列ＣＲＣ検査部１００−４は、ＣＲＣ計算部によりＣＲＣ計算を行う。
【０１７８】
また、並列ＣＲＣ検査部１００−４は、上記のシフト処理の結果と整数倍ビットブロックＡ（ｘ）とを切り替えて、ＣＲＣ計算部に入力する。
【０１７９】
具体的に、並列ＣＲＣ検査部１００−４の構成を説明する。図１１に示すように、並列ＣＲＣ検査部１００−４は、演算制御部１１１と、排他的論理和部１１２と、シフト部１１３と、選択部１１４と、ＣＲＣ計算部１１５とを備える。
【０１８０】
演算制御部１１１は、Ｍビット幅に並列化されたＣＲＣ検査対象フレームについて整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）を識別し、選択部１１４、排他的論理和部１１２に出力する。
【０１８１】
また、演算制御部１１１には、端数ビットブロックＢ（ｘ）の長さを示すＨ（ｋ）が入力され、演算制御部１１１は、そのＨ（ｋ）の値を検出する。さらに、演算制御部１１１は、ビットのシフト量を示すシフト情報ｐを生成し、シフト情報ｐをシフト部１１３に出力する。演算制御部１１１は、Ｍ−Ｈ（ｋ）を計算することによりシフト情報ｐを生成すればよい。
【０１８２】
さらに、演算制御部１１１は、フレームに属するビット列が入力されていることを示す有効データ区間信号ＶＤＴを生成し、フレームのビット列の入力中（すなわちＳＯＦが入力されてからＨ（ｋ）が入力されるまでの間）ＶＤＴをＣＲＣ計算部１１５に出力する。
【０１８３】
また、演算制御部１１１は、第１の実施形態における演算制御部１１と同様に、整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）のいずれを出力しているのかを示すデータ領域選択信号ＡＢＳＥＬを選択部１１４およびＣＲＣ計算部１１５に出力する。
【０１８４】
入力フレームのフレーム長がＭビットの整数倍である場合、演算制御部１１１は、整数倍ビットブロックＡ（ｘ）のみを出力し、端数ビットブロックＢ（ｘ）は出力しない。
【０１８５】
演算制御部１１１は、第１の実施形態における演算制御部１１と同様に、上記の処理を行えばよい。
【０１８６】
排他的論理和部１１２は、ＣＲＣ計算部１１５によって求められる整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）と端数ビットブロックＢ（ｘ）の最上位ビットをそろえて、整数倍ビットブロックＡ（ｘ）のＣＲＣ値Ｒ（ｘ）と端数ビットブロックＢ（ｘ）との排他的論理和を求める。
【０１８７】
シフト部１１３は、排他的論理和部１１２で計算された排他的論理和の結果を、Ｍビット幅のＣＲＣ計算部１１５で処理するため、その排他的論理和の計算結果をｐ（ｐ＝Ｍ−Ｈ（ｋ））ビット分、最下位ビット側にシフトさせる。シフト部１１３は、シフトによってデータがなくなることになる最上位側のｐビットに対して‘０’を設定する。シフト部１１３は、シフト処理を行った結果を選択部１１４に出力する。ＣＲＣ計算部１１５での演算対象は、シフト処理で設定された‘０’よってＣＲＣ値の演算結果は変化しないため、Ｈ（ｋ）ビットとなる。
【０１８８】
選択部１１４は、演算制御部１１１で生成されたデータ領域選択信号ＡＢＳＥＬに従い、入力フレームの整数倍ビットブロックＡ（ｘ）と、シフト部１１３の出力の切り替え処理を行う。すなわち、データ領域選択信号ＡＢＳＥＬが整数倍ビットブロックＡ（ｘ）の出力を示している場合、整数倍ビットブロックＡ（ｘ）をＣＲＣ計算部１１５に出力し、データ領域選択信号ＡＢＳＥＬが端数ビットブロックＢ（ｘ）の出力を示している場合、シフト部１１３の出力データをＣＲＣ計算部１１５に出力する。入力フレーム長がＭの整数倍の場合、端数ビットは存在せず、シフト部１１３の出力が選択されることはない。
【０１８９】
ＣＲＣ計算部１１５は、選択部１１４が出力するＭビット幅データに対するＣＲＣ計算を行う。本ＣＲＣ計算部には、ｘｄを乗算する回路を含まないＣＲＣ計算回路が使用される。例えば、ＣＲＣ−３２が本計算部に適用された場合、特許文献１の図４に示されるシリアルデータに対するＣＲＣ計算回路をＭビット幅化した回路を使用できる。このＣＲＣ計算回路を使用すれば、フレームのヘッダからＦＣＳまでをＣＲＣの計算対象とした場合、フレームに誤りがないときにＣＲＣ計算結果は‘０’となり、誤りがあるときにＲＣＲ計算結果は‘０’以外の値となる。
【０１９０】
次に、図１０に示すイーサネットスイッチおよび図１１に示す並列ＣＲＣ検査部１００−４（並列巡回符号検査装置）の動作について説明する。
【０１９１】
図１２は、ＰＣＳ部１００−２に入力されるフレームおよびＰＣＳ部１００−２が出力するフレームや信号のタイミングチャートである。図１２（ａ）は、ＰＣＳ部１００−２に入力されるフレームを示している。図１２（ｂ），（ｃ），（ｄ）は、それぞれＰＣＳ部１００−２がヘッダ解析部１００−３に出力するフレーム、ＳＯＦ、Ｈ（ｋ）を示している。
【０１９２】
受信器１００−１（図１０参照）は、フレームを受信すると、そのフレームに対してシリアルパラレル変換を行い、変換後のフレームをＰＣＳ部１００−２に出力する。図１２（ａ）は、このフレームを表している。ＰＣＳ部１００−２は、受信器１００−１から入力されたフレームを復号する。そして、ＰＣＳ部１００−２は、フレーム先頭を示すＳＯＦ情報と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）を生成し、Ｍビット幅のフレームとともに、ヘッダ解析部１００−３に出力する（図１２（ｂ），（ｃ），（ｄ）参照）。ＰＣＳ部１００−２は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１９３】
なお、ＰＣＳ部１００−２に入力されるフレームにおいて、ヘッダ先頭には／ｓ／（フレーム開始区切り）が存在し、フレームの終わりには／ｔ／（フレーム終了区切り）が存在し、フレーム間にはＩＦＧ（Inter Frame Gap ：フレーム間隔）が存在する。ＰＣＳ部１００−２は、これらの／ｓ／（フレーム開始区切り）、／ｔ／（フレーム終了区切り）、およびＩＦＧを‘０’に置き換えて、ヘッダ解析部１００−３に出力する。この結果、図１２（ｂ）に示すように、フレーム開始区切り１２０−１、１２０−３、フレーム終了区切り１２０−２，１２０−４、およびＩＦＧは無効データとなる。
【０１９４】
ヘッダ解析部１００−３は、フレームのヘッダを解析し、フレームデータ制御情報を生成し、フレームデータ制御情報をフレーム廃棄部１００−５に出力する。また、ヘッダ解析部１００−３は、ＰＣＳ部１００−２から入力されるフレーム、ＳＯＦ信号、Ｈ（ｋ）信号を並列ＣＲＣ検査部１００−４に出力する。ヘッダ解析部１００−３は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の端数ビットブロックＢ（ｘ）の出力時に、端数ビットブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１９５】
並列ＣＲＣ検査部１００−４は、ヘッダ解析部１００−３から入力されるＳＯＦ信号、Ｈ（ｋ）信号に応じて、入力されるフレーム（検査対象フレーム）のヘッダからＦＣＳまでのＣＲＣ値を計算し、そのＣＲＣ値をＣＲＣ検査結果として、フレーム廃棄部１００−５へ出力する。
【０１９６】
フレーム廃棄部１００−５は、ヘッダ解析部１００−３から入力されるフレームデータ制御情報と、並列ＣＲＣ検査部１００−４から入力されるＣＲＣ検査結果に従って、フレームを廃棄する。また、フレーム廃棄部１００−５は、ＣＲＣ検査結果が正常なフレームをフレームデータ制御情報とともにフレームバッファ部１００−６へ出力する。
【０１９７】
フレームバッファ部１００−６は、フレーム廃棄部１００−５からフレームが入力されると、フレームデータ制御情報ともにバッファリングする。バッファリング後、フレームバッファ部１００−６は、フレームとフレームデータ制御情報をスイッチ部１０３に出力する。
【０１９８】
スイッチ部１０３は、フレームバッファ部１００−６から入力されるフレームを、フレームデータ制御情報に従い、ラインカード送信部へ転送する。スイッチ部１０３は、フレームをスイッチ部１０３に対して出力したラインカード受信部１０１−１と対になるラインカード送信部１０２−１にフレームを転送する。
【０１９９】
ラインカード送信部１０２−１は、スイッチ部１０３から転送されるフレームデータをシリアルデータに変換して送信する。
【０２００】
次に、並列ＣＲＣ検査部１００−４の動作を説明する。図１３は、並列ＣＲＣ検査部１００−４の各構成要素の入力や出力を示すタイミングチャートである。図１３（ａ），（ｂ），（ｃ）は、それぞれ演算制御部１１１に入力されるＳＯＦ、Ｈ（ｋ）、フレームを表している。また、図１３（ｄ）は、演算制御部１１１に入力されるフレームをワード（列）単位で示している。各ワードはＭビットである。図１３（ｅ），（ｆ）は、それぞれ選択部１１４、ＣＲＣ計算部１１５の出力を表している。図１３（ｇ）〜（ｉ）は、それぞれＶＤＴ、ＡＢＳＥＬ、シフト情報ｐを表している。
【０２０１】
図１３（ａ）〜（ｄ）に示すように、演算制御部１１１には、ヘッダ解析部１００−３から、ＣＲＣ検査対象となるＭビット幅のフレームと、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）が入力される。最終ワード有効データ信号Ｈ（ｋ）として、端数ビットブロックＢ（ｘ）のビット数が演算制御部１１１に入力される。本実施形態では、第１の実施形態と異なり、ＦＣＳ領域も端数ビットブロックＢ（ｘ）内に含まれる（図１３（ｃ）参照）。
【０２０２】
演算制御部１１１に入力されるフレームのビット長が並列幅Ｍビットの整数倍でない場合、そのフレームには、Ｍビットの整数倍ビットブロックＡ（ｘ）と、ビット長がＨ（ｋ）ビットである端数ビットブロックＢ（ｘ）が含まれている。１番目からｗ−１番目までのワード列のデータ（‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’）全体が整数倍ビットブロックＡ（ｘ）である。なお、Ａ（ｘ）おける、各ワード列のデータ‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’は、それぞれＭビット幅のデータ列であり、‘＃１’〜‘＃（ｗ−１）’は、それぞれ該フレームデータ内でのワード列の番号を示している。また、ｗ番目のワード列のデータ‘ｂ（ｘ）’は、端数ビットブロックＢ（ｘ）を含むビット列である。
【０２０３】
図１３（ａ）〜（ｄ）に示すようにフレームと信号（ＳＯＦ，Ｈ（ｋ））が入力されると、演算制御部１１１は、ＳＯＦが入力されてからＨ（ｋ）が入力されるまでの間、有効データ区間信号ＶＤＴを「有効（フレームに属するビット列が入力されていること）」を示す状態としてＣＲＣ計算部１１５に出力する（図１３（ｇ）参照）。図１３（ｇ）では、‘Ｈ（ハイ）’レベルは有効を示し、‘Ｌ（ロー）’レベルは無効（フレームに属するビット列が入力されていないこと）を示している。
【０２０４】
また、演算制御部１１１は、入力されたフレームに含まれる整数倍ビットブロックＡ（ｘ）と端数ビットブロックＢ（ｘ）を選択部１１４と排他的論理和部１１２に出力する。また、整数倍ビットブロックＡ（ｘ）である１番目からｗ−１番目までの各ワード列の各ビット列が入力されてそのビット列を出力している間、演算制御部１１１は、データ領域選択信号ＡＢＳＥＬを「Ａ（ｘ）側」として、選択部１１４およびＣＲＣ計算部１１５に出力する。端数ビットブロックＢ（ｘ）を含むビット列が入力されてそのビット列を出力する時には、演算制御部１１１は、データ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」として、選択部１１４およびＣＲＣ計算部１１５に出力する。図１３（ｈ）では、‘Ｈ’レベルは「Ａ（ｘ）側」を示し、‘Ｌ’レベルは「Ｂ（ｘ）側」を示している。
【０２０５】
選択部１１４は、図１３（ｈ）に示すデータ領域選択信号ＡＢＳＥＬに従い、ＡＢＳＥＬが「Ａ（ｘ）側」である時には、演算制御部１１１から入力される１番目からｗ−１番目までの各ワード列のデータ‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’をＣＲＣ計算部１１５に出力する。また、ＡＢＳＥＬが「Ｂ（ｘ）側」である時には、シフト部１１３が出力するデータ（Ｒ（ｘ）とＢ（ｘ）との排他的論理和を下位側にｐビットシフトしたデータ）をＣＲＣ計算部１１５に出力する。
【０２０６】
ＣＲＣ計算部１１５は、選択部１１４が出力する‘ａ（ｘ）＃１’〜‘ａ（ｘ）＃（ｗ−１）’の整数倍ビットブロックＡ（ｘ）に対するＣＲＣ 計算を行い、整数倍ビットブロックＡ（ｘ）のＣＲＣ値であるＲ（ｘ）を出力する（図１３（ｆ）のｗワード列参照）。
【０２０７】
ＣＲＣ計算部１１５は、Ｍビット幅のデータの各ビットを係数とするＭ−１次多項式を次数ｄの任意の生成多項式Ｇ（ｘ）で除算し、剰余を求める。生成多項式Ｇ（ｘ）の次数ｄは予め定められている。ＣＲＣ計算部１１５は、第１の実施形態におけるＣＲＣ計算部１５と同様に、保持しているデータを（Ｍ−ｄ）ビット上位側にシフトした結果と次のＭビットとの排他的論理和を求め、その排他的論理和を除算して得られる剰余を保持する処理を繰り返してＲ（ｘ）を算出する。すなわち、ＣＲＣ計算部１１５は、フレームの最初のＭビット‘ａ（ｘ）＃１’について上記の除算で剰余を求めたならば、その剰余を保持する。次のＭビット‘ａ（ｘ）＃２’が入力されると、ＣＲＣ計算部１１５は、保持していた剰余を表すデータ（ｄビット）を上位側に（Ｍ−ｄ）ビットシフトし、次のＭビット‘ａ（ｘ）＃２’との排他的論理和を求め、その排他的論理和が表すＭ−１次多項式を生成多項式Ｇ（ｘ）で除算したときの剰余を求め、保持する。そして、ＣＲＣ計算部１１５は、以降のＭビットのデータについても同様の処理を繰り返す。剰余を表すデータの各ビットはｄ−１次の多項式の係数に相当し、上位側に（Ｍ−ｄ）ビットシフトするとは、高次の項に対応するビット側に（Ｍ−ｄ）ビットシフトすることである。ＣＲＣ計算部１１５は、最後のＭビット‘ａ（ｘ）＃（ｗ−１）’ が入力されると、保持していた剰余を表すデータを上位側に（Ｍ−ｄ）ビットシフトし、最後のＭビット‘ａ（ｘ）＃（ｗ−１）’ との排他的論理和を求める。そして、ＣＲＣ計算部１１５は、その排他的論理和が表すＭ−１次多項式を生成多項式Ｇ（ｘ）で除算したときの剰余を求め、その求めた剰余を整数倍ビットブロックＡ（ｘ）のＣＲＣ値（Ｒ（ｘ））として算出する。
【０２０８】
図１３（ｅ），（ｆ）を参照して具体的に説明する。ＣＲＣ計算部１１５は、整数倍ビットブロックＡ（ｘ）の１ワード目‘ａ（ｘ）＃１’について、各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。図１３（ｆ）に示す‘Ｒ（ｘ）＃１’が、その保持されたデータである。続いて、ＣＲＣ計算部１１５は、保持していた‘Ｒ（ｘ）＃１’を上位側に（Ｍ−ｄ）ビットシフトし、整数倍ビットブロックＡ（ｘ）の、２ワード目‘ａ（ｘ）＃２’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。図４（ｆ）に示す‘Ｒ（ｘ）＃２’が、その保持されたデータである。同様に、ＣＲＣ計算部１１５は、保持していた‘Ｒ（ｘ）＃２’を上位側に（Ｍ−ｄ）ビットシフトし、整数倍ビットブロックＡ（ｘ）の、３ワード目‘ａ（ｘ）＃３’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式Ｇ（ｘ）で除算し、その剰余を示すデータを保持する。ＣＲＣ計算部１１５は、この処理をｗ−１ワード目まで行うことでＲ（ｘ）を算出する。ｗ−１ワード目に関して処理を行うときに保持していた‘Ｒ（ｘ）＃（ｗ−２）’を上位側に（Ｍ−ｄ）ビットシフトシフトした結果とｗ−１ワード目‘ａ（ｘ）＃（ｗ−１）’ との排他的論理和の各ビットを係数とする多項式を、生成多項式Ｇ（ｘ）で除算したときの剰余がＲ（ｘ）である。
【０２０９】
また、ＣＲＣ計算部１１５は、選択部１１４が出力する‘ｂ´（ｘ）’については、その各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余をＣ（ｘ）とする。Ｃ（ｘ）を求めるときには、保持しているデータに対するビットシフトおよび排他的論理和演算は行わない。
【０２１０】
ＣＲＣ計算部１１５は、排他的論理和部１１２にＲ（ｘ）を出力する。また、演算制御部１１１は、ｗ−１番目のワード列に続いて、最終ワード有効データ信号Ｈ（ｋ）と端数ビットブロックＢ（ｘ）を含むビット列ｂ（ｘ）をヘッダ解析部１００−３から受信し、そのビット列ｂ（ｘ）を排他的論理和部１１２に出力する。従って、排他的論理和部１１２には、Ｒ（ｘ）と、端数ビットブロックＢ（ｘ）を含むビット列ｂ（ｘ）とが入力される。
【０２１１】
また、演算制御部１１１は、最終ワード有効データ信号Ｈ（ｋ）を受信すると、データ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」として選択部１１４に出力する。また、演算制御部１１１は、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））をシフト部１１３に出力する。
【０２１２】
排他的論理和部１１２は、整数倍ビットブロックＡ（ｘ）に対するＣＲＣ計算部１１５の出力（Ａ（ｘ）のＣＲＣ値）であるＲ（ｘ）と端数ビットブロックＢ（ｘ）との排他的論理和を計算する。Ｒ（ｘ）の長さはｄビットである。図１４は、Ｒ（ｘ）とＢ（ｘ）との排他的論理和を求める演算を示す説明図である。図１４（ａ）は、ビット列ｂ（ｘ）を示している。ビット列ｂ（ｘ）は、長さＨ（ｋ）ビットの端数ビットブロックＢ（ｘ）を含んでいる。図１４（ｂ）は、図１３（ｆ）のｗワード列に示す整数倍ビットブロックＡ（ｘ）のＣＲＣ計算値Ｒ（ｘ）である。排他的論理和部１１２は、Ｂ（ｘ）とＲ（ｘ）との排他的論理和の計算結果であるＢ´´（ｘ）（長さＨ（ｋ）ビット）を含むＭビット幅のデータ列（図１４（ｃ）参照）をシフト部１１３に出力する。排他的論理和部１１２は、最上位ビットをあわせて、Ｂ（ｘ）を含むＭビットのデータ列とＲ（ｘ）との排他的論理和を計算し、Ｂ´´（ｘ）を含むＭビットのデータ列を求め、そのデータ列をシフト部に出力すればよい。
【０２１３】
図１５は、シフト部１１３によるシフト処理を示す説明図である。シフト部１１３は、排他的論理和部１１２の出力（図１５（ａ）参照）に含まれるＢ´´（ｘ）に対するＣＲＣ計算をＭビット入力のＣＲＣ計算部１１５で行えるようにするため、演算制御部１１１からのシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））に従い、排他的論理和部１１２の出力データをｐビット分、最下位ビット側へシフトする。なと、シフト部１１３は、シフトによってデータがなくなることになる最上位側のｐビットには、ＣＲＣ演算値に影響を与えない‘０’を設定する。シフト処理および上位ｐビットに対する‘０’の設定を行ったデータ列をｂ´（ｘ）と記す。図１５（ｂ）は、このデータ列ｂ´（ｘ）を示している。データ列ｂ´（ｘ）のビット長はＭビットである。シフト部１１３は、データ列ｂ´（ｘ）を選択部１１４に出力する。
【０２１４】
このとき、演算制御部１１１はデータ領域選択信号ＡＢＳＥＬを「Ｂ（ｘ）側」としているので、選択部１１４は、シフト部１１３から入力されるデータ列ｂ´（ｘ）をＣＲＣ計算部１１５に出力する（図１３（３）のｗ列参照）。
【０２１５】
本実施形態におけるシフト部１１３の構成は、第１の実施形態における第一シフト部１３と同様の構成である（図７参照）。そして、シフト部１１３は、第１の実施形態における第一シフト部１３と同様に動作する。
【０２１６】
ＣＲＣ計算部１１５は、ＡＢＳＥＬが「Ｂ（ｘ）側」であるとき、選択部１１４から入力されるデータ列ｂ´（ｘ）（最下位側にｐビットシフトされたＢ´´（ｘ）を含むデータ列）に対してＣＲＣ計算を行い、Ｂ´´（ｘ）のＣＲＣ値Ｃ（ｘ）を出力する。既に説明したように、ＣＲＣ計算部１１５は、ｂ´（ｘ）の各ビットを係数とするＭ−１次多項式を生成多項式Ｇ（ｘ）で除算し、その剰余をＣ（ｘ）とする。
【０２１７】
このＣ（ｘ）は、ＣＲＣ値の検査結果であり、Ｃ（ｘ）が０であれば、フレームに誤りは生じていないことになり、Ｃ（ｘ）が０以外の値であれば、フレームに誤りが生じていることになる。
【０２１８】
ＣＲＣ計算部１１５は、入力フレームデータに対するＣＲＣ検査結果Ｃ（ｘ）を、フレーム廃棄部１００−５にＭビット幅のフレームデータ、ＳＯＦ、Ｈ（ｋ）とともに出力する。
【０２１９】
次に、本実施形態の効果について説明する。
本実施形態によれば、排他的論理和部１１２が、整数倍ビットブロックのＣＲＣ値と、端数ビットブロックとの排他的論理和を計算し、シフト部１１３が、その排他的論理和を最下位ビット側にｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットシフトする。そして、ＣＲＣ計算部１５は、そのシフト後のデータのＣＲＣ値（Ｃ（ｘ））を検査結果として計算する。このように計算することにより、フレーム長を求めるためのバッファリングを行わずに検査結果Ｃ（ｘ）を算出することができる。
【０２２０】
このようにバッファリングを行う必要がないので、検査結果を求める際の処理遅延を抑えることができる。遅延特性が重要なサーバ製品や高性能コンピューティング製品領域における通信技術に本発明を適用すれば、超低遅延のＣＲＣ検査が可能となる。
【０２２１】
また、バッファリングの必要がないので、バッファリングのための構成要素を設ける必要がなく、第１の実施形態と同様、回路規模を削減することができる。
【０２２２】
また、図１１に示す構成では、演算制御部１１１が、フレーム先頭信号ＳＯＦ、および、端数ビット信号Ｈ（ｋ）から、データ領域選択信号ＡＢＳＥＬ、シフト情報ｐ、シフト情報ｑを生成する場合を示している。これらの信号や情報をＳＯＦおよびＨ（ｋ）以外の信号から生成してもよい。例えば、Ｍビットの入力毎のビットイネーブル信号に基づいてＡＢＳＥＬ、シフト情報ｐ、シフト情報ｑを生成してもよい。
【０２２３】
また、上記の説明では、図１１に示すに示す並列ＣＲＣ検査部１００−４（並列巡回符号検査装置）がビット単位のシフトを行って検査結果Ｃ（ｘ）を算出する場合を示したが、シフト処理におけるシフト量は１ビット単位でなくてもよい。演算制御部１１１がバイト単位等のように複数ビット単位でシフト情報ｐを生成し、シフト部１１３が複数ビット単位でのシフト処理を行ってもよい。
【０２２４】
また、上記の実施形態では、並列ＣＲＣ検査部１００−４がＣＲＣ符号（ＣＲＣ値）を用いて検査結果を算出する場合を例にして説明しているが、本実施例における式（１３）に基づく入力情報列長を用いずに演算結果を得る方法は他のハミング符号やＢＣＨ符号等のような、ＣＲＣ符号以外の巡回符号により検査結果を求める場合にも本発明を適用することができる。その場合には、ＣＲＣ値を計算するＣＲＣ計算部１１５の代わりに、他の巡回符号（ハミング符号やＢＣＨ符号等）を計算する手段を備えていればよい。ＣＲＣ値以外の巡回符号を計算する場合であっても、シフト処理によって、入力フレームのビット長を求めるためのバッファリングを行わなくて済むという効果を得ることができ、処理遅延および回路規模の増大を防止し、また、広帯域化の制約を緩和できる。
【０２２５】
また、並列ＣＲＣ検査部（並列巡回符号検査装置）１００−４が備える各構成要素（演算制御部１１１、排他的論理和部１１２、シフト部１１３、選択部１１４、ＣＲＣ計算部１１５）は、それぞれ別個の回路であってもよい。あるいは、並列ＣＲＣ検査部１００−４が備える各構成要素は、プログラム（並列巡回符号検査プログラム）に従って動作するＣＰＵによって実現されていてもよい。例えば、ＣＰＵが、予め記憶装置に記憶された並列巡回符号検査プログラムを読み込み、その並列巡回符号検査プログラムに従って、演算制御部１１１、排他的論理和部１１２、シフト部１１３、選択部１１４、ＣＲＣ計算部１１５として動作してもよい。
【０２２６】
なお、図１１に示す構成の並列ＣＲＣ検査部は、図１に示すネットワークインタフェースカード（本発明が適用されたネットワークインタフェースカード）から送信されるフレームを受信する装置において、巡回符号の検査回路として用いることが可能である。同様に、図２に示す構成の並列ＣＲＣ符号演算処理部は、図１０に示すラインカード（本発明が適用されたラインカード）に対してフレームを送信する装置において、巡回符号生成回路として用いることができる。
【０２２７】
また、説明では、本発明が適用されたネットワークインタフェースカードやラインカードを例示したが、本発明はネットワークインタフェースカードやラインカード以外の装置に適用されていてもよい。
【０２２８】
次に、本発明の概要について説明する。図１６は、本発明の並列巡回符号生成装置の概要を示すブロック図である。本発明の並列巡回符号生成装置５０は、データ分割手段５１と、Ｒ（ｘ）生成手段５２と、第一排他的論理和手段５３と、第一シフト手段５４と、Ｒ´（ｘ）生成手段５５と、第二シフト手段５６と、第二排他的論理和手段５７とを備える。
【０２２９】
データ分割手段５１は、例えばフレーム等の巡回符号生成対象データに含まれるビット列をＭビット幅に並列出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、巡回符号生成対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分ける。
【０２３０】
Ｒ（ｘ）生成手段５２は、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成する。第一排他的論理和手段５３は、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する。第一シフト手段５４は、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和をＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する。ここで、Ｈ（ｋ）は、端数データブロックＢ（ｘ）のビット長を表す値である。
【０２３１】
Ｒ´（ｘ）生成手段５５は、第一シフト手段５４によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｒ´（ｘ）を生成する。第二シフト手段５６は、巡回符号Ｒ（ｘ）をＨ（ｋ）ビット上位側にシフトし、下位Ｈ（ｋ）ビットに０を設定したデータであるデータＲ´´（ｘ）を生成する。第二排他的論理和手段５７は、巡回符号Ｒ´（ｘ）とデータＲ´´（ｘ）との排他的論理和を計算する。
【０２３２】
第二排他的論理和手段５７が計算した排他的論理和が巡回符号生成対象データの巡回符号である。このように、巡回符号を生成すれば、巡回符号生成対象データのビット長を求める必要がなく、巡回符号生成対象データのビット長を求めるためのバッファリング処理を不要とすることができる。
【０２３３】
なお、図１６に示すデータ分割手段５１は、例えば図２に示す演算制御部１１によって実現される。Ｒ（ｘ）生成手段５２およびＲ´（ｘ）生成手段５５は、例えばＣＲＣ計算部１５によって実現される。第一排他的論理和手段５３は、例えば第一排他的論理和部１２によって実現される。第一シフト手段５４は、例えば第一シフト部１３によって実現される。第二シフト手段５６は、例えば第二シフト部１６によって実現される。第二排他的論理和手段５７は、例えば第二排他的論理和部１７によって実現される。
【０２３４】
また、第一の実施形態には、Ｒ（ｘ）生成手段とＲ´（ｘ）生成手段とが同一の回路であり、データ分割手段がデータブロックＡ（ｘ）を出力しているときには、データブロックＡ（ｘ）をその回路に送り、第一シフト手段が端数データブロックＢ（ｘ）を含むＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和に対するシフトおよび０の設定を行ったときには、シフトおよび０の設定が行われたデータをその回路に送る選択手段を備えた構成が開示されている。
【０２３５】
また、Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に含まれる最初のＭビットのビット列に対して、そのビット列の各ビットを係数とするＭ−１次多項式を次数ｄの生成多項式で除算して得られる剰余を求め、その剰余を保持し、以降のＭビット毎のビット列毎に、保持しているデータを（Ｍ−ｄ）ビット上位側にシフトしたデータとＭビット幅のビット列との排他的論理和を求め、その排他的論理和の各ビットを係数とするＭ−１次多項式をその生成多項式で除算して得られる剰余を求め、その剰余を保持することを繰り返すことにより、巡回符号Ｒ（ｘ）を生成することが開示されている。
【０２３６】
また、Ｒ´（ｘ）生成手段が、第一シフト手段によってシフトおよび０の設定が行われたデータの各ビットを係数とするＭ−１次多項式を生成多項式で除算した剰余を求めることによりＲ´（ｘ）を生成することも開示されている。
【０２３７】
図１７は、本発明の並列巡回符号検査装置の概要を示すブロック図である。本発明の並列巡回符号検査装置６０は、データ分割手段６１と、Ｒ（ｘ）生成手段６２と、排他的論理和手段６３と、シフト手段６４と、Ｃ（ｘ）生成手段６５とを備える。
【０２３８】
データ分割手段６１は、例えばフレーム等の検査対象データに含まれるビット列をＭビット幅に並列出力して、検査対象データを、検査対象データにおける先頭からＭの整数倍分のデータブロックである整数倍データブロックＡ（ｘ）と、検査対象データからデータブロックＡ（ｘ）を除いたＭビット未満のデータブロックである端数データブロックＢ（ｘ）とに分ける。
【０２３９】
Ｒ（ｘ）生成手段６２は、整数倍データブロックＡ（ｘ）に対して生成多項式を用いて、当該整数倍データブロックＡ（ｘ）の巡回符号である巡回符号Ｒ（ｘ）を生成する。排他的論理和手段６３は、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和を計算する。シフト手段６４は、端数データブロックＢ（ｘ）を含み、当該端数データブロックＢ（ｘ）が端側から配置されたＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和をＭ−Ｈ（ｋ）ビット下位側にシフトし、上位Ｍ−Ｈ（ｋ）ビットに０を設定する。ここで、Ｈ（ｋ）は、端数データブロックＢ（ｘ）のビット長を表す値である。Ｃ（ｘ）生成手段６５は、シフト手段６４によってシフトおよび０の設定が行われたデータに対して生成多項式を用いて、当該データの巡回符号である巡回符号Ｃ（ｘ）を生成する。
【０２４０】
Ｃ（ｘ）が、データの誤り検査結果であり、Ｃ（ｘ）＝０であれば誤りはなく、０以外の値であれば誤りが生じていることになる。このように検査結果Ｃ（ｘ）を算出すれば、検査対象データのビット長を求める必要がなく、ビット長を求めるためのバッファリング処理を不要とすることができる。
【０２４１】
なお、図１７に示すデータ分割手段６１は、例えば図１１に示す演算制御部１１１によって実現される。Ｒ（ｘ）生成手段６２およびＣ（ｘ）生成手段６５は、例えばＣＲＣ計算部１１５によって実現される。排他的論理和手段６３は、例えば排他的論理和部１１２によって実現される。シフト手段６４は、例えばシフト部１１３によって実現される。
【０２４２】
また、第２の実施形態には、Ｒ（ｘ）生成手段とＣ（ｘ）生成手段とが同一の回路であり、データ分割手段がデータブロックＡ（ｘ）を出力しているときには、データブロックＡ（ｘ）をその回路に送り、シフト手段が端数データブロックＢ（ｘ）を含むＭビットのデータ列と巡回符号Ｒ（ｘ）との排他的論理和に対するシフトおよび０の設定を行ったときには、シフトおよび０の設定が行われたデータをその回路に送る選択手段を備えた構成が開示されている。
【０２４３】
また、Ｒ（ｘ）生成手段が、整数倍データブロックＡ（ｘ）に含まれる最初のＭビットのビット列に対して、そのビット列の各ビットを係数とするＭ−１次多項式を次数ｄの生成多項式で除算して得られる剰余を求め、その剰余を保持し、以降のＭビット毎のビット列毎に、保持しているデータを（Ｍ−ｄ）ビット上位側にシフトしたデータとＭビット幅のビット列との排他的論理和を求め、その排他的論理和の各ビットを係数とするＭ−１次多項式をその生成多項式で除算して得られる剰余を求め、その剰余を保持することを繰り返すことにより、巡回符号Ｒ（ｘ）を生成することが開示されている。
【０２４４】
また、Ｃ（ｘ）生成手段が、シフト手段によってシフトおよび０の設定が行われたデータの各ビットを係数とするＭ−１次多項式を生成多項式で除算した剰余を求めることによりＣ（ｘ）を生成することも開示されている。
【０２４５】
なお、各実施の形態で示した整数倍ビットブロックＡ（ｘ）は整数倍データブロックＡ（ｘ）に相当し、各実施の形態で示した端数ビットブロックＢ（ｘ）は端数データブロックＢ（ｘ）に相当する。
【産業上の利用可能性】
【０２４６】
本発明は、デジタル通信技術分野をはじめとする各分野において、デジタルデータの誤り検出用符号として用いられる巡回符号の生成や検査に好適に適用可能である。
【図面の簡単な説明】
【０２４７】
【図１】本発明が適用されたネットワークインタフェースカードの送信機能の構成例を示すブロック図である。
【図２】本発明の第１の実施形態を示すブロック図である。
【図３】ヘッダ付与部および並列ＣＲＣ演算処理部の入力信号および出力信号のタイミングチャートである。
【図４】並列ＣＲＣ演算処理回路の各構成要素の入力や出力を示すタイミングチャートである。
【図５】Ｒ（ｘ）とＢ（ｘ）との排他的論理和を求める演算を示す説明図である。
【図６】第一シフト部によるシフト処理を示す説明図である。
【図７】第一シフト部の構成例を示すブロック図である。
【図８】第二シフト部によるシフト処理を示す説明図である。
【図９】第二シフト部の構成例を示すブロック図である。
【図１０】本発明が適用されたイーサネットスイッチの構成例を示すブロック図である。
【図１１】本発明の第２実施形態を示すブロック図である。
【図１２】ＰＣＳ部に入力されるフレームおよびＰＣＳ部が出力するフレームや信号のタイミングチャートである。
【図１３】並列ＣＲＣ検査部の各構成要素の入力や出力を示すタイミングチャートである。
【図１４】Ｒ（ｘ）とＢ（ｘ）との排他的論理和を求める演算を示す説明図である。
【図１５】シフト部によるシフト処理を示す説明図である。
【図１６】本発明の並列巡回符号生成装置の概要を示すブロック図である。
【図１７】本発明の並列巡回符号検査装置の概要を示すブロック図である。
【図１８】非特許文献１に開示されたＣＲＣ演算方式の構成の一例を示すブロック図である。
【図１９】図１８に例示するＣＲＣ演算回路におけるフレームデータの並べ替えの例を示す説明図である。
【符号の説明】
【０２４８】
１１  演算制御部
１２  第一排他的論理和部
１３  第一シフト部
１４  選択部
１５  ＣＲＣ計算部
１６  第二シフト部
１７  第二排他的論理和部
１１１  演算制御部
１１２  排他的論理和部
１１３  シフト部
１１４  選択部
１１５  ＣＲＣ計算部
【図１】
0004831018.tif 000002
【図２】
0004831018.tif 000003
【図３】
0004831018.tif 000004
【図４】
0004831018.tif 000005
【図５】
0004831018.tif 000006
【図６】
0004831018.tif 000007
【図７】
0004831018.tif 000008
【図８】
0004831018.tif 000009
【図９】
0004831018.tif 000010
【図１０】
0004831018.tif 000011
【図１１】
0004831018.tif 000012
【図１２】
0004831018.tif 000013
【図１３】
0004831018.tif 000014
【図１４】
0004831018.tif 000015
【図１５】
0004831018.tif 000016
【図１６】
0004831018.tif 000017
【図１７】
0004831018.tif 000018
【図１８】
0004831018.tif 000019
【図１９】
0004831018.tif 000020