(57)【要約】【課題】回路の規模を小さくするとともに低遅延で処理することが可能な巡回符号演算処理回路を提供すること。【解決手段】この回路２３は入力データを構成する複数のビットのうちの、並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、生成多項式によって除算した剰余である第１の剰余を、並列ビット数のビットに対して処理を並列に行うことにより算出する。更にこの回路は入力データのうちの整数倍データブロック以外のビットからなる最終ワード有効データブロックを生成多項式によって除算した剰余である第２の剰余を算出する。加えてこの回路は第１の剰余と第２の剰余とに基づいて、入力データを生成多項式により除算した剰余である入力データ剰余を算出する。【選択図】図２
2010068429.tif 000002
【特許請求の範囲】
【請求項１】
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する巡回符号演算処理回路であって、
前記入力データを構成する複数のビットのうちの、前記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、前記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
前記入力データのうちの、前記最終ワードに含まれるビットからなる最終ワード有効データブロックを前記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
前記算出された整数倍データブロック剰余と、前記算出された最終ワード有効データブロック剰余と、に基づいて前記入力データ剰余を算出する入力データ剰余算出手段と、
を備える巡回符号演算処理回路。
【請求項２】
請求項１に記載の巡回符号演算処理回路であって、
前記入力データ剰余算出手段は、
前記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、前記生成多項式によって除算した剰余である前記剰余算出用係数と、前記整数倍データブロック剰余と、を乗算した乗算値と、前記最終ワード有効データブロック剰余と、を加算することにより前記入力データ剰余を算出するように構成された巡回符号演算処理回路。
【請求項３】
請求項１又は請求項２に記載の巡回符号演算処理回路であって、
前記最終ワード有効データブロック剰余算出手段は、
前記並列ビット数のビットに対して処理を並列に行うことにより、前記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された前記並列ビット数のデータを前記生成多項式によって除算した剰余を前記最終ワード有効データブロック剰余として算出するように構成された巡回符号演算処理回路。
【請求項４】
請求項１乃至請求項３のいずれか一項に記載の巡回符号演算処理回路であって、
前記整数倍データブロック剰余算出手段及び前記最終ワード有効データブロック剰余算出手段は、制御信号生成手段と、シフト手段と、選択手段と、計算手段と、からなり、
前記制御信号生成手段は、
前記入力データを先頭から順に前記並列ビット数のビットからなるワード毎に出力するとともに、前記最終ワード有効データブロックを構成するデータを出力するときには出力するデータが当該最終ワード有効データブロックを構成する旨を表す最終ワード有効データ信号と、前記並列ビット数から当該最終ワード有効データブロックを構成するビットの数を減じた数を表すシフト情報と、を出力するように構成され、
前記シフト手段は、
前記制御信号生成手段から出力されたデータを受け付けるとともに、当該制御信号生成手段から前記シフト情報が出力された場合に当該受け付けたデータを当該シフト情報が表す数のビットだけ前記一端側にシフトし且つそのシフトされたデータよりも他端側のすべてのビットを０に設定したデータを出力し、当該制御信号生成手段から当該シフト情報が出力されなかった場合に当該受け付けたデータを出力するように構成され、
前記選択手段は、
前記計算手段から前回の演算処理にて出力されたデータを受け付けるとともに、前記制御信号生成手段から前記最終ワード有効データ信号が出力された場合に前記生成多項式の次数と同数の０からなるデータを出力し、一方、当該制御信号生成手段から当該最終ワード有効データ信号が出力されなかった場合に前記受け付けたデータを出力するように構成され、
前記計算手段は、
前記シフト手段から出力されたデータと、前記選択手段から出力されたデータと、に基づいて、前記並列ビット数のビットに対して演算処理を並列に行うことにより、その処理結果を表すデータを出力するように構成された巡回符号演算処理回路。
【請求項５】
請求項１乃至請求項４のいずれか一項に記載の巡回符号演算処理回路であって、
誤り検出処理を行うためのフレームチェックシーケンス（ＦＣＳ：Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）値として前記入力データ剰余を前記入力データに付加する回路に適用される巡回符号演算処理回路。
【請求項６】
請求項１乃至請求項５のいずれか一項に記載の巡回符号演算処理回路であって、
前記入力データ剰余に基づいて前記入力データの誤り検出処理を行う回路に適用される巡回符号演算処理回路。
【請求項７】
請求項１乃至請求項６のいずれか一項に記載の巡回符号演算処理回路であって、
巡回冗長検査方式を用いてデータの誤り検出処理を行うために前記入力データ剰余を使用する回路に適用された巡回符号演算処理回路。
【請求項８】
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出するネットワーク・インタフェース・カードであって、
前記入力データを構成する複数のビットのうちの、前記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、前記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
前記入力データのうちの、前記最終ワードに含まれるビットからなる最終ワード有効データブロックを前記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
前記算出された整数倍データブロック剰余と、前記算出された最終ワード有効データブロック剰余と、に基づいて前記入力データ剰余を算出する入力データ剰余算出手段と、
を備えるネットワーク・インタフェース・カード。
【請求項９】
請求項８に記載のネットワーク・インタフェース・カードであって、
前記入力データ剰余算出手段は、
前記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、前記生成多項式によって除算した剰余である前記剰余算出用係数と、前記整数倍データブロック剰余と、を乗算した乗算値と、前記最終ワード有効データブロック剰余と、を加算することにより前記入力データ剰余を算出するように構成されたネットワーク・インタフェース・カード。
【請求項１０】
請求項８又は請求項９に記載のネットワーク・インタフェース・カードであって、
前記最終ワード有効データブロック剰余算出手段は、
前記並列ビット数のビットに対して処理を並列に行うことにより、前記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された前記並列ビット数のデータを前記生成多項式によって除算した剰余を前記最終ワード有効データブロック剰余として算出するように構成されたネットワーク・インタフェース・カード。
【請求項１１】
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する巡回符号演算方法であって、
前記入力データを構成する複数のビットのうちの、前記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、前記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出工程と、
前記入力データのうちの、前記最終ワードに含まれるビットからなる最終ワード有効データブロックを前記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出工程と、
前記算出された整数倍データブロック剰余と、前記算出された最終ワード有効データブロック剰余と、に基づいて前記入力データ剰余を算出する入力データ剰余算出工程と、
を含む巡回符号演算方法。
【請求項１２】
請求項１１に記載の巡回符号演算方法であって、
前記入力データ剰余算出工程は、
前記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、前記生成多項式によって除算した剰余である前記剰余算出用係数と、前記整数倍データブロック剰余と、を乗算した乗算値と、前記最終ワード有効データブロック剰余と、を加算することにより前記入力データ剰余を算出するように構成された巡回符号演算方法。
【請求項１３】
請求項１１又は請求項１２に記載の巡回符号演算方法であって、
前記最終ワード有効データブロック剰余算出工程は、
前記並列ビット数のビットに対して処理を並列に行うことにより、前記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された前記並列ビット数のデータを前記生成多項式によって除算した剰余を前記最終ワード有効データブロック剰余として算出するように構成された巡回符号演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの誤り検出処理に用いる巡回符号の生成演算及び検査演算を行う、巡回符号演算処理回路に関する。
【背景技術】
【０００２】
近年、米国ＩＥＥＥ８０２委員会の４０ギガビット・イーサネット（なお、「イーサネット」は、登録商標（第１７０２１１９号）である。）や１００ギガビット・イーサネットをはじめとして、データ通信技術における、フレーム伝送速度の広帯域化が進んでいる。フレーム伝送処理のうち、電気信号で処理するものに、ユーザデータをフレーム化するフレーム生成処理、及び、フレームからユーザデータを取り出すフレーム受信処理がある。これらの電気信号処理は、シリアル処理では処理速度の限界があるため、広帯域化のためにはフレーム信号をパラレル展開して処理（以降、本願では、並列化と記す）することが必須である。
【０００３】
データ通信においては、フレームの誤り検出に、巡回符号が多く使用される。巡回符号の例に、巡回冗長検査（ＣＲＣ；Ｃｙｃｌｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）符号がある。例えば、イーサネットでは、フレームのヘッダとユーザデータに対する誤り検出用に、そのＣＲＣ符号演算結果（以降、本願ではＣＲＣ値と称す。）から算出したＦＣＳ（Ｆｒａｍｅ  Ｃｈｅｃｋ  Ｓｅｑｕｅｎｃｅ）値を用いる。
【０００４】
フレーム伝送の広帯域化のためには、フレームの誤り検出用の巡回符号の生成処理及び巡回符号に基づく誤り検出処理を高速に行う必要がある。そのため、パラレル展開幅Ｍ（以降、本願では並列ビット数Ｍ、もしくは、並列幅Ｍと称す。また、（Ｍは２以上の任意の正の整数）の並列化信号に対する巡回符号演算処理を行う技術が提案されている。
【０００５】
フレームの並列化では、処理を容易にするために、各フレームの先頭ビットを最上位ビット側に詰めた形で扱い、８Ｂ／１０Ｂ変換や６４Ｂ／６６Ｂ変換などの伝送路符号化処理の直前に、フレーム間が所定の間隔（ＩＦＧ：Ｉｎｔｅｒ  Ｆｒａｍｅ  Ｇａｐ）になるように変換する方法がある。このような、先頭ビットを最上位ビット側に詰めたフレームでも、入力フレーム長ｎビット（ｎは１以上の正の整数）が、並列ビット数Ｍの整数倍でない場合、入力フレームを並列ビット数Ｍビットで並列化すると、フレームの最後のワード列（以降、本願では最終ワードと称す）内に、Ｍビット幅未満の有効データビット（以降、本願では端数ビットと称す）が発生する場合がある。特に、近年のデータ通信で多く用いられるイーサネットのように、可変長フレームの伝送を行う場合には、端数ビットが生じる可能性が高い。この端数ビットを含む並列化フレームを、Ｍビット幅の並列巡回符号計算部で処理すると、端数ビット以外の無効なビットまでが巡回符号の演算範囲となり、正しい演算結果を得ることができない。これは巡回符号生成のみでなく、巡回符号に基づく誤り検出でも同様である。
【０００６】
この種の端数ビットを含む入力フレームに対する並列巡回符号演算処理回路の一つは、例えば、非特許文献１に開示されている。
【０００７】
図１５に、この並列巡回符号演算処理回路の構成の一例を示す。これは、巡回符号にＣＲＣ符号を用いる例であり、Ｍビット幅（図１５内でＭは２のＬ乗。なお、Ｌは１以上の任意の正の整数）の入力フレームに対するＣＲＣ値を生成する並列ＣＲＣ符号演算処理回路である。該並列ＣＲＣ符号演算処理回路は、制御部１５０１と、入力幅２Ｌ（Ｌ＝ｌｏｇ２Ｍ）ビットのＣＲＣ計算部「２Ｌ」１５０２と、入力幅２Ｌ−１ビットのＣＲＣ計算部「２Ｌ−１」１５０３と、入力幅２１ビットのＣＲＣ計算部「２１」１５０４と、入力幅２０ビットのＣＲＣ計算部「２０」１５０５と、データ選択部「２Ｌ−１」１５０６と、データ選択部「２１」１５０７と、データ選択部「２０」１５０８と、結果選択部「２Ｌ−１」１５０９と、結果選択部「２１」１５１０と、結果選択部「２０」１５１１とを備える。
【０００８】
制御部１５０１には、Ｍビット幅にパラレル展開され、フレーム先頭が並列ビットＭの最上位ビット側に詰められた、ｋ番目（ｋは１以上の任意の整数）のフレーム信号Ｎｋ（ｘ）と、該フレームＮｋ（ｘ）の先頭位置を示すＳＯＦ（Ｓｔａｒｔ  ｏｆ  Ｆｒａｍｅ）情報及び、該フレームＮｋ（ｘ）の末尾を示す最終ワード有効情報Ｈ（ｋ）が入力される。なお、Ｈ（ｋ）は、Ｈ（ｋ）＞０のとき、フレームＮｋ（ｘ）の最終ワードＥＯＦ（Ｅｎｄ  ｏｆ  Ｆｒａｍｅ）位置であることを示し、また、最終ワード内の有効データビット数を示す情報である。つまり、ＥＯＦの位置の場合、Ｈ（ｋ）＝１〜Ｍであり、Ｈ（ｋ）＝ｈ（ｈは、１≦ｈ＜Ｍの任意の正の整数）の場合、最終ワードはｈビットの端数ビットを含んでいることを示し、Ｈ（ｋ）＝Ｍならば、最終ワードは全てが有効データビットであることを示す。制御部１５０１は、前記入力信号から、「結果選択信号」及び「データ選択信号」を生成し、フレーム信号とともに出力する。具体的には、「結果選択信号」を結果選択部「２Ｌ−１」１５０９〜結果選択部「２０」１５１１へ、「データ選択信号」をデータ選択部「２Ｌ−１」１５０６〜データ選択部「２０」１５０８へ出力する。
【０００９】
データ選択部「２Ｌ−１」１５０６〜データ選択部「２０」１５０８は、「データ選択信号」に従い、出力データ（Ｊ０〜ＪＬ−１）を、ＣＲＣ計算部「２Ｌ−１」１５０３〜ＣＲＣ計算部「２０」１５０５へそれぞれ出力する。なお、出力データ（Ｊ０〜ＪＬ−１）のビット幅は、Ｊ０はＭ／２１，Ｊ１はＭ／２２，  …，ＪＬ−２はＭ／２Ｌ−１，ＪＬ−１はＭ／２Ｌである。
【００１０】
ＣＲＣ計算部「２Ｌ」１５０２〜ＣＲＣ計算部「２０」１５０５は、制御部１５０１から出力されるＭビット幅のフレーム信号Ｎｋ（ｘ）、または、データ選択部「２Ｌ−１」１５０６〜データ選択部「２０」１５０８から出力される（２Ｌ−１〜２０）ビット幅のデータ（Ｊ０〜ＪＬ−１）のＣＲＣ計算を行う。また、その結果を、結果選択部「２Ｌ−１」１５０９〜結果選択部「２０」１５１１へ出力する。
【００１１】
結果選択部「２Ｌ−１」１５０９〜結果選択部「２０」１５１１は、制御部１５０１からの「結果選択信号」に従い、ＣＲＣ計算部「２Ｌ」１５０２〜ＣＲＣ計算部「２０」１５０５より出力される信号（Ｑ´０〜Ｑ´Ｌ）を、選択し、所望のＣＲＣ値ＱＬとして出力する。
【００１２】
次に、図１６を参照しながら、上記並列ＣＲＣ符号演算処理回路の作動について説明する。
図１６（ａ）は、並列ビット数Ｍ＝８、フレーム長ｎ＝２９ビットの場合における、ｋ番目の入力フレームＮｋ（ｘ）の一例であり、最終ワード有効情報Ｈ（ｋ）＝５となる。１８−１−１〜１８−４−５がＣＲＣ符号演算対象となるデータであり、１８−４−６〜１８−４−８がＣＲＣ符号演算対象外の無効データである。また、Ｍ＝８であることから、Ｌ＝３（＝Ｌｏｇ２８）である。
【００１３】
この場合、図１５の各ブロックの数と信号は、Ｌ＝３であることから次のようになる。制御部１５０１の出力信号「データ選択信号」は、ｓ０，ｓ１，ｓ２、「結果選択信号」は、ｍ０，ｍ１，ｍ２となる。ＣＲＣ計算部は、ＣＲＣ計算部「２３」１５０２、ＣＲＣ計算部「２２」１５０３、ＣＲＣ計算部「２１」１５０４、ＣＲＣ計算部「２０」１５０５の４つとなり、該ＣＲＣ計算部の出力信号は、それぞれＱ´０、Ｑ´１、Ｑ´２、Ｑ´３となる。データ選択部は、データ選択部「２２」１５０６、データ選択部「２１」１５０７、データ選択部「２０」１５０８の３つとなり、該データ選択部の出力信号は、それぞれＪ０、Ｊ１、Ｊ２となる。結果選択部は、結果選択部「２２」１５０９、結果選択部「２１」１５１０、結果選択部「２０」１５１１の３つとなり、該結果選択部の出力信号は、それぞれＱ１、Ｑ２、Ｑ３となる。
【００１４】
図１５の制御部１５０１は、図１６（ａ）の８ビット幅のフレームデータが入力されると、最終ワードの手前までのワード１〜３では、「データ選択信号」（ｍ０＝‘０’，ｍ１＝‘０’，ｍ２＝‘０’）と「結果選択信号」（ｓ０＝‘１’，ｓ１＝‘１’，ｓ２＝‘１’）を生成する。
【００１５】
ＣＲＣ計算部「２３」１５０２は、制御部１５０１から出力される８ビット幅フレーム信号のワード１〜３のＣＲＣ計算を行い、結果Ｑ´０を、該ＣＲＣ計算部「２３」１５０２の入力、ＣＲＣ計算部「２２」１５０３の入力及び、結果選択部「２２」１５０９に出力する。結果選択部「２２」１５０９は、制御部１５０１からの「結果選択信号」ｍ０＝‘０’により、Ｑ´０を選択し、出力する。結果選択部「２１」１５１０は、制御部１５０１からの「結果選択信号」ｍ１＝‘０’により、Ｑ１（Ｌ＝３であるのでＱＬ−２＝Ｑ１）を選択し、出力する。結果選択部「２０」１５１１は、制御部１５０１からの「結果選択信号」ｍ２＝‘０’により、Ｑ２を選択し、出力する。
【００１６】
次に、図１５の制御部１５０１は、図１６（ａ）の入力データのワード４が入力されると、「データ選択信号」（ｍ０＝‘１’，ｍ１＝‘０’，ｍ２＝‘１’）と「結果選択信号」（ｓ０＝‘１’，ｓ１＝‘０’，ｓ２＝‘１’）を生成する。
【００１７】
データ選択部「２２」１５０６は、制御部１５０１からの「データ選択信号」ｓ０＝‘１’により、ワード４の８ビット幅の入力データの内、上位４ビット（１８−４−１〜１８−４−４）をＪ０として、ＣＲＣ計算部「２２」１５０３へ出力する。また、ワード４の下位４ビット（１８−４−５〜１８−４−８）を、データ選択部「２１」１５０７へ出力する。
【００１８】
なお、データ選択部「２２」１５０６は、「データ選択信号」ｓ０＝‘０’の場合、ワード４の８ビット幅の入力データの内、上位４ビット（１８−４−１〜１８−４−４）をＪ０として、ＣＲＣ計算部「２２」１５０３へ出力する。また、データ選択部「２２」１５０６は、データ選択部「２１」１５０７へもワード４の上位４ビット（１８−４−１〜１８−４−４）を、出力する。
【００１９】
ＣＲＣ計算部「２２」１５０３は、ＣＲＣ計算部「２３」１５０２のワード３での演算結果Ｑ´０と、Ｊ０と、からＣＲＣ計算を行い、その結果Ｑ´１を結果選択部「２２」１５０９へ出力する。
【００２０】
結果選択部「２２」１５０９は、制御部１５０１からの「結果選択信号」ｍ０＝‘１’により、入力信号Ｑ´１をＱ１として、ＣＲＣ計算部「２１」１５０４と、結果選択部「２１」１５１０と、へ出力する。
【００２１】
次に、データ選択部「２１」１５０７は、ワード４の４ビット幅の入力データの内、上位２ビット（１８−４−５〜１８−４−６）をＪ１として、ＣＲＣ計算部「２１」１５０４へ出力する。また、データ選択部「２１」１５０７は、制御部１５０１からの「データ選択信号」ｓ１＝‘０’（Ｌ＝３のためｓＬ−２＝ｓ１）により、ワード４の下位２ビット（１８−４−７〜１８−４−８）に代えて上位２ビット（１８−４−５〜１８−４−６）を、データ選択部「２０」１５０８へ出力する。
【００２２】
なお、「データ選択信号」ｓ１＝‘１’の場合、データ選択部「２１」１５０７は、ワード４の４ビット幅の入力データの内、上位２ビット（１８−４−５〜１８−４−６）をＪ１として、ＣＲＣ計算部「２１」１５０４へ出力し、データ選択部「２０」１５０８へワード４の下位２ビット（１８−４−７〜１８−４−８）を出力する。
【００２３】
ＣＲＣ計算部「２１」１５０４は、結果選択部「２２」１５０９の出力Ｑ１（Ｌ＝３なので、ＱＬ−２＝Ｑ１）と、データ選択部「２１」１５０７の出力Ｊ１と、からＣＲＣ計算を行い、その結果Ｑ´２を結果選択部「２１」１５１０へ出力する。
【００２４】
結果選択部「２１」１５１０は、制御部１５０１からの「結果選択信号」ｍ１＝‘０’（Ｌ＝３なので、ｍＬ−２＝ｍ１）により、入力信号Ｑ１をＱ２として、ＣＲＣ計算部「２０」１５０５と、結果選択部「２０」１５１１と、へ出力する。
【００２５】
データ選択部「２０」１５０８は、制御部１５０１からの「データ選択信号」ｓ２＝‘１’（Ｌ＝３のためｓＬ−１＝ｓ２）により、ワード４の２ビット幅の入力データの内、上位１ビット（１８−４−５）をＪ２として、ＣＲＣ計算部「２０」１５０５へ出力する。（なお、ｓ２＝‘０’の場合、ワード４の２ビット幅の入力データの内、下位１ビット（１８−４−６）をＪ２として出力する。）
【００２６】
ＣＲＣ計算部「２０」１５０５は、結果選択部「２１」１５１０の出力Ｑ２と、データ選択部「２０」１５０８の出力Ｊ２と、からＣＲＣ計算を行い、その結果Ｑ´３を結果選択部「２０」１５１１へ出力する。
【００２７】
結果選択部「２０」１５１１は、制御部１５０１からの「結果選択信号」ｍ２＝‘１’（Ｌ＝３なので、ｍＬ−１＝ｍ２）により、入力信号Ｑ´３を、ＣＲＣ値Ｑ３として出力する。
【００２８】
このように、上記並列ＣＲＣ符号演算処理回路は、図１６（ｂ）に示したように、入力データのワード１〜３（１８−１−１〜１８−３−８）を８ビット幅入力のＣＲＣ計算部「２３」１５０２で計算し、入力データのワード４の１８−４−１〜１８−４−４を４ビット幅入力のＣＲＣ計算部「２２」１５０３で計算し、入力データのワード４の１８−４−５を１ビット幅入力のＣＲＣ計算部「２０」１５０５で計算することで、図１６（ａ）の入力データのＣＲＣ符号演算対象１８−１−１〜１８−４−５の正しいＣＲＣ値を得る。
【非特許文献１】片下、外４名、「高速かつ軽量な可変データ長対応のＣＲＣ回路構成手法」、情報処理学会論文誌、情報処理学会、２００７年７月、第４８巻、第７号、ｐｐ．２３８２−２３９２
【特許文献１】特開２００２−３５９５６１号公報
【発明の開示】
【発明が解決しようとする課題】
【００２９】
しかしながら、上記非特許文献１に開示された並列ＣＲＣ符号演算処理回路においては、入力フレームＮｋ（ｘ）の最終ワード（ワード４）内の端数ビット（端数ビット長：Ｈ（ｋ））を処理するために、Ｌ＋１個（Ｌ＝ｌｏｇ２Ｍ、Ｍは並列ビット数）のＣＲＣ計算部（図１５のＣＲＣ計算部「２Ｌ」１５０２〜ＣＲＣ計算部「２０」１５０５）が必要である。例えば、Ｍ＝８であれば４個、Ｍ＝６４であれば７個、Ｍ＝５１２であれば１０個、のＣＲＣ計算部を備える必要がある。
【００３０】
従って、入力データの並列ビット数Ｍが大きくなるにつれて、必要となるＣＲＣ計算部１５０２〜１５０５、データ選択部１５０６〜１５０８、及び、結果選択部１５０９〜１５１１が増加する。この結果、回路規模が大きくなるという問題がある。更に、ＣＲＣ計算部１５０２〜１５０５、データ選択部１５０６〜１５０８、及び、結果選択部１５０９〜１５１１は、縦続接続されるので、入力データの並列ビット数Ｍが大きくなるほど、縦続接続の段数が増え処理遅延が増加するという問題も生じる。
なお、既に前述しているが、前記非特許文献１に開示された並列ＣＲＣ符号演算処理回路は、巡回符号にＣＲＣ符号を用いた並列巡回符号演算処理回路であり、並列ＣＲＣ符号演算処理回路内ＣＲＣ計算部は、巡回符号の計算をおこなう巡回符号計算部である。
【００３１】
このため、本発明の目的は、上述した課題である「入力データの並列幅が大きくなるにつれて回路規模が大きくなるとともに処理遅延が増加すること」を解決することが可能な並列巡回符号演算処理回路を提供することにある。
【課題を解決するための手段】
【００３２】
かかる目的を達成するため本発明の一形態である巡回符号演算処理回路は、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する巡回符号演算処理回路である。
【００３３】
更に、この巡回符号演算処理回路は、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出手段と、
を備える。
【００３４】
また、本発明の他の形態であるネットワーク・インタフェース・カードは、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出するネットワーク・インタフェース・カードである。
【００３５】
更に、このネットワーク・インタフェース・カードは、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出手段と、
を備える。
【００３６】
また、本発明の他の形態である巡回符号演算方法は、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する方法である。
【００３７】
更に、この巡回符号演算方法は、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出工程と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出工程と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出工程と、
を含む。
【発明の効果】
【００３８】
本発明は、以上のように構成されることにより、入力データの並列幅が大きくなっても、回路規模が過大となることを防止するとともに処理遅延が過大となることを防止することができる。
【発明を実施するための最良の形態】
【００３９】
本発明の一形態である巡回符号演算処理回路は、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する巡回符号演算処理回路である。
【００４０】
更に、この巡回符号演算処理回路は、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出手段と、
を備える。
【００４１】
これによれば、上記巡回符号演算処理回路は、最終ワード有効データブロック剰余と、整数倍データブロック剰余と、を独立に算出する。従って、巡回符号演算処理回路は、整数倍データブロックを構成するデータを、並列ビット数ずつ並列に処理することにより、適切に整数倍データブロック剰余を算出することができる。この結果、上記巡回符号演算処理回路は、入力データ剰余を低遅延で算出することができる。
【００４２】
また、上記巡回符号演算処理回路によれば、並列ビット数が異なる複数の巡回符号計算部を備えなくても、最終ワード有効データブロック剰余を適切に算出することができる。即ち、巡回符号演算処理回路の規模を小さくすることができる。さらに、上記巡回符号演算処理回路によれば、複数の巡回計算部を縦続接続しなくても良いため、入力データ剰余を低遅延で算出することができる。
【００４３】
この場合、
上記入力データ剰余算出手段は、
上記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、上記生成多項式によって除算した剰余である上記剰余算出用係数と、上記整数倍データブロック剰余と、を乗算した乗算値と、上記最終ワード有効データブロック剰余と、を加算することにより上記入力データ剰余を算出するように構成されることが好適である。
【００４４】
この場合、
上記最終ワード有効データブロック剰余算出手段は、
上記並列ビット数のビットに対して処理を並列に行うことにより、上記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された上記並列ビット数のデータを上記生成多項式によって除算した剰余を上記最終ワード有効データブロック剰余として算出するように構成されることが好適である。
【００４５】
これによれば、並列ビット数のビットに対して並列に処理を行うことにより、適切に最終ワード有効データブロック剰余を算出することができる。従って、上記巡回符号演算処理回路は、入力データ剰余を低遅延で算出することができる。
【００４６】
この場合、
上記巡回符号演算処理回路は、
上記整数倍データブロック剰余算出手段及び上記最終ワード有効データブロック剰余算出手段は、制御信号生成手段と、シフト手段と、選択手段と、計算手段と、からなることが好適である。
【００４７】
ここで、上記制御信号生成手段は、
上記入力データを先頭から順に上記並列ビット数のビットからなるワード毎に出力するとともに、上記最終ワード有効データブロックを構成するデータを出力するときには出力するデータが当該最終ワード有効データブロックを構成する旨を表す最終ワード有効データ信号と、上記並列ビット数から当該最終ワード有効データブロックを構成するビットの数を減じた数を表すシフト情報と、を出力するように構成される。
【００４８】
更に、上記シフト手段は、
上記制御信号生成手段から出力されたデータを受け付けるとともに、当該制御信号生成手段から上記シフト情報が出力された場合に当該受け付けたデータを当該シフト情報が表す数のビットだけ上記一端側にシフトし且つそのシフトされたデータよりも他端側のすべてのビットを０に設定したデータを出力し、当該制御信号生成手段から当該シフト情報が出力されなかった場合に当該受け付けたデータを出力するように構成される。
【００４９】
加えて、上記選択手段は、
上記計算手段から前回の演算処理にて出力されたデータを受け付けるとともに、上記制御信号生成手段から上記最終ワード有効データ信号が出力された場合に上記生成多項式の次数と同数の０からなるデータを出力し、一方、当該制御信号生成手段から当該最終ワード有効データ信号が出力されなかった場合に上記受け付けたデータを出力するように構成される。
【００５０】
更に、上記計算手段は、
上記シフト手段から出力されたデータと、上記選択手段から出力されたデータと、に基づいて、上記並列ビット数のビットに対して演算処理を並列に行うことにより、その処理結果を表すデータを出力するように構成される。
【００５１】
これによれば、並列ビット数のビットに対して並列に処理を行う１つの巡回符号計算部を用いて、最終ワード有効データブロック剰余及び整数倍データブロック剰余の両方を算出することができる。この結果、回路の規模をより一層小さくすることができる。
【００５２】
この場合、
上記巡回符号演算処理回路は、
誤り検出処理を行うためのＦＣＳ値として上記入力データ剰余を上記入力データに付加する回路に適用されることが好適である。
【００５３】
この場合、
上記巡回符号演算処理回路は、
上記入力データ剰余に基づいて上記入力データの誤り検出処理を行う回路に適用されることが好適である。
【００５４】
この場合、
上記巡回符号演算処理回路は、
ＣＲＣを用いてデータの誤り検出処理を行うために上記入力データ剰余を使用する回路に適用されることが好適である。
【００５５】
また、本発明の他の形態であるネットワーク・インタフェース・カードは、
所定の並列ビット数のビットに対して処理を並列に行うことによって、複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出するように構成される。
【００５６】
また、本発明の他の形態であるネットワーク・インタフェース・カードは、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出するネットワーク・インタフェース・カードである。
【００５７】
更に、このネットワーク・インタフェース・カードは、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出手段と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出手段と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出手段と、
を備える。
【００５８】
この場合、
上記入力データ剰余算出手段は、
上記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、上記生成多項式によって除算した剰余である上記剰余算出用係数と、上記整数倍データブロック剰余と、を乗算した乗算値と、上記最終ワード有効データブロック剰余と、を加算することにより上記入力データ剰余を算出するように構成される。
【００５９】
この場合、
上記最終ワード有効データブロック剰余算出手段は、
上記並列ビット数のビットに対して処理を並列に行うことにより、上記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された上記並列ビット数のデータを上記生成多項式によって除算した剰余を上記最終ワード有効データブロック剰余として算出するように構成されることが好適である。
【００６０】
また、本発明の他の形態である巡回符号演算方法は、
所定の並列ビット数のビットに対して処理を並列に行うことによって、連続する複数のビットからなる入力データを生成多項式により除算した剰余である入力データ剰余を算出する方法である。
【００６１】
更に、この巡回符号演算方法は、
上記入力データを構成する複数のビットのうちの、上記並列ビット数のビットからなるワード毎に当該複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなる整数倍データブロックを、上記生成多項式によって除算した剰余である整数倍データブロック剰余を、当該並列ビット数のビットに対して処理を並列に行うことにより算出する整数倍データブロック剰余算出工程と、
上記入力データのうちの、上記最終ワードに含まれるビットからなる最終ワード有効データブロックを上記生成多項式によって除算した剰余である最終ワード有効データブロック剰余を算出する最終ワード有効データブロック剰余算出工程と、
上記算出された整数倍データブロック剰余と、上記算出された最終ワード有効データブロック剰余と、に基づいて上記入力データ剰余を算出する入力データ剰余算出工程と、
を含む。
【００６２】
この場合、
上記入力データ剰余算出工程は、
上記最終ワード有効データブロックを構成するビットの数を指数として有するべき乗の項のみを有する多項式を、上記生成多項式によって除算した剰余である上記剰余算出用係数と、上記整数倍データブロック剰余と、を乗算した乗算値と、上記最終ワード有効データブロック剰余と、を加算することにより上記入力データ剰余を算出するように構成されることが好適である。
【００６３】
この場合、
上記最終ワード有効データブロック剰余算出工程は、
上記並列ビット数のビットに対して処理を並列に行うことにより、上記最終ワード有効データブロックの末尾のビットが０を指数として有するべき乗の項に対応する一端に位置するように当該最終ワード有効データブロックを含み且つ当該最終ワード有効データブロックよりも他端側のすべてのビットが０に設定された上記並列ビット数のデータを上記生成多項式によって除算した剰余を上記最終ワード有効データブロック剰余として算出するように構成されることが好適である。
【００６４】
上述した構成を有する、ネットワーク・インタフェース・カード、又は、巡回符号演算方法、の発明であっても、上記巡回符号演算処理回路と同様の作用を有するために、上述した本発明の目的を達成することができる。
【００６５】
以下、本発明に係る、巡回符号演算処理回路、ネットワーク・インタフェース・カード、及び、巡回符号演算処理方法、の各実施形態について図１〜図１４を参照しながら説明する。
なお、以降、本発明における各実施形態は、説明上前記非特許文献１と同様に巡回符号としてＣＲＣ符号を使用するが、これは、本発明をＣＲＣ符号のみに限定するものは無く、ＣＲＣ符号以外の他の巡回符号であっても良い。
【００６６】
＜基礎式の導出＞
先ず、本発明の基礎となる式（基礎式）の導出について説明する。
連続する複数（ここでは、ｎ）のビットからなる入力フレーム（入力データ）Ｎｋ（ｘ）のＣＲＣ値を求める場合、ＣＲＣ符号演算対象であるＮｋ（ｘ）は、整数倍データブロックＡ（ｘ）と、最終ワード有効データブロックＢ（ｘ）と、を用いて下記式（１）のように表すことができる。ここで、ｘは多項式の変数である。また、入力フレームは、その入力フレームを構成する各ビットを係数とする多項式Ｎｋ（ｘ）により表現される。同様に、整数倍データブロックＡ（ｘ）、最終ワード有効データブロックＢ（ｘ）及び後述する他のデータも、そのデータの各ビットを係数とする多項式により表現される。
【００６７】
また、整数倍データブロックＡ（ｘ）は、入力フレームＮｋ（ｘ）を構成する複数のビットのうちの、並列ビット数Ｍのビットからなるワード毎にその複数のビットを先頭から順に分割した場合における最も末尾側のワードである最終ワードよりも先頭側のビットからなるデータである。更に、最終ワード有効データブロックＢ（ｘ）は、入力フレームＮｋ（ｘ）のうちの上記最終ワードに含まれるビット（即ち、入力フレームＮｋ（ｘ）のうちの整数倍データブロックＡ（ｘ）以外のビット）からなるデータである。従って、最終ワード有効データブロックＢ（ｘ）を構成するビットのビット数Ｈ（ｋ）は、１〜Ｍの値をとる。なお、Ｈ（ｋ）≠Ｍの場合、最終ワードは、端数ビット（１〜Ｍ−１個のビット）を含んでいることを示し、Ｈ（ｋ）＝Ｍならば、最終ワードは端数ビットではなく、該ワードの全てが有効データビットであることを示す。
Ｎｋ（ｘ）＝Ａ（ｘ）・ｘＨ（ｋ）＋Ｂ（ｘ）  …（１）
【００６８】
なお、本明細書において、数式内の「＋」はモジュロ（ｍｏｄｕｌｏ）２演算における加算（排他的論理和）を示し、「ｍｏｄ」は、モジュロ２演算における除算の剰余を示す。また、Ｈ（ｋ）はｋ番目の入力フレーム（ｋは任意の正の整数）の最終ワード有効データブロックＢ（ｘ）の長さ（最終ワード有効データブロックＢ（ｘ）を構成するビットの数（最終ワード有効ビット数））を示し、Ｇ（ｘ）は生成多項式を示し、ｄはＧ（ｘ）の次数を示す。
【００６９】
次に、整数倍データブロックＡ（ｘ）のＣＲＣ値（整数倍データブロック剰余）をＲａ（ｘ）とすると、Ｒａ（ｘ）は、下記式（２）のように表すことができる。
Ｒａ（ｘ）＝［Ａ（ｘ）・ｘｄ］  ｍｏｄ  Ｇ（ｘ）  …（２）
【００７０】
入力フレームＮｋ（ｘ）のＣＲＣ値（入力データ剰余）をＲ（ｘ）とすると、Ｒ（ｘ）は、式（３）により表すことができる。
Ｒ（ｘ）＝［Ｎｋ（ｘ）・ｘｄ］  ｍｏｄ  Ｇ（ｘ）  …（３）
【００７１】
ここで、式（１）及び式（３）から、下記式（４）が得られる。
Ｒ（ｘ）＝｛［Ａ（ｘ）・ｘｄ・ｘＨ（ｋ）］＋［Ｂ（ｘ）・ｘｄ］｝  ｍｏｄ  Ｇ（ｘ）
…（４）
【００７２】
更に、式（４）は、式（２）から下記式（５）のように表すことができる。
Ｒ（ｘ）＝｛［Ｒａ（ｘ）・ｘＨ（ｋ）］＋［Ｂ（ｘ）・ｘｄ］｝  ｍｏｄ  Ｇ（ｘ）
…（５）
【００７３】
更に、式（５）は、下記式（６）のように表すことができる。
Ｒ（ｘ）＝｛Ｒａ（ｘ）・［ｘＨ（ｋ）］  ｍｏｄ  Ｇ（ｘ）｝
＋｛［Ｂ（ｘ）・ｘｄ］  ｍｏｄ  Ｇ（ｘ）｝  …（６）
【００７４】
ここで、式（６）の［ｘＨ（ｋ）］  ｍｏｄ  Ｇ（ｘ）は、予め計算することが可能であることから、以下のように表すことができる。即ち、剰余算出用係数βＨ（ｋ）（ｘ）は、最終ワード有効データブロックＢ（ｘ）を構成するビットの数Ｈ（ｋ）を指数として有するべき乗の項のみを有する多項式（即ち、ｘＨ（ｋ））を、生成多項式Ｇ（ｘ）によって除算した剰余である。
［ｘＨ（ｋ）］  ｍｏｄ  Ｇ（ｘ）βＨ（ｋ）（ｘ）＝  …（７）
【００７５】
式（７）を式（６）に代入し、且つ、［Ｂ（ｘ）・ｘｄ］  ｍｏｄ  Ｇ（ｘ）＝Ｒｂ（ｘ）と置き換えると、下記式（８）が得られる。
Ｒ（ｘ）＝｛Ｒａ（ｘ）・βＨ（ｋ）（ｘ）｝＋Ｒｂ（ｘ）  …（８）
【００７６】
式（８）の｛Ｒａ（ｘ）・βＨ（ｋ）（ｘ）｝は、ガロア体上の乗算であることから、以下のようになる。
Ｒ（ｘ）＝｛［Ｒａ（ｘ）・βＨ（ｋ）（ｘ）］  ｍｏｄ  Ｇ（ｘ）｝＋Ｒｂ（ｘ）
…（９）
【００７７】
式（９）から、下記の手順（１）〜（６）によりＮｋ（ｘ）のＣＲＣ値Ｒ（ｘ）を求めることができることが分かる。
（１）並列ビット数Ｍのビットに対して処理を並列に行う、Ｍビット入力のＣＲＣ計算回路により整数倍データブロック剰余Ｒａ（ｘ）を算出する
（２）剰余算出用係数βＨ（ｋ）（ｘ）を最終ワード有効ビット数Ｈ（ｋ）に基づいて算出する
（３）最終ワード有効ビット数Ｈ（ｋ）のビットからなるＢ（ｘ）をｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットだけ最下位ビット側にシフトする
（４）（３）にてシフトしたデータに基づいて、Ｍビット入力のＣＲＣ計算回路により最終ワード有効データブロック剰余Ｒｂ（ｘ）を算出する
（５）Ｒａ（ｘ）とβＨ（ｋ）（ｘ）との乗算（ガロア体上の乗算）を行う
（６）（５）にて乗算した結果と、Ｒｂ（ｘ）と、の加算（ガロア体上の加算：排他的論理和）を行うことにより、Ｎｋ（ｘ）のＣＲＣ値（入力データ剰余）Ｒ（ｘ）を求める
【００７８】
従って、並列ビット数Ｍ以外のビット数の入力のＣＲＣ計算回路を用いることなく、Ｎｋ（ｘ）のＣＲＣ値Ｒ（ｘ）を求めることができる。即ち、入力データの並列幅が大きくなっても、回路規模が過大となることを防止するとともに処理遅延が過大となることを防止することができる。
【００７９】
次に、誤り検出用のＣＲＣ符号演算処理に係る基礎式の導出について説明する。
入力フレームＮｋ´（ｘ）内に含まれる誤りを検出する場合、ＣＲＣ符号演算対象範囲を、Ｎｋ´（ｘ）の先頭から、最後尾までとすることで、演算結果よりＮｋ´（ｘ）内の誤りを検出することが出来る。
これは、Ｎｋ´（ｘ）＝ Ｎｋ（ｘ）・ｘd＋Ｒ（ｘ）であり、ＣＲＣ値Ｒ（ｘ）は、Ｎｋ（ｘ）を生成多項式Ｇ（ｘ）で除算した際の剰余であるため、Ｎｋ´（ｘ）は、生成多項式Ｇ（ｘ）の倍数となる。つまり、Ｎｋ´（ｘ）をＧ（ｘ）で除算した際の剰余は、必ず‘０’になり、剰余が‘０’以外の場合、Ｎｋ´（ｘ）内に誤りがあることになる。
前述を式で表すと、下記式（１０）〜（１２）のようになる。なお、また、Ａ（ｘ）は、Ｎｋ´（ｘ）の並列幅Ｍビットの整数倍データブロックであり、Ｂ（ｘ）は、Ｎｋ´（ｘ）の最終ワード有効データブロックである。
Ｎｋ´（ｘ）＝Ａ（ｘ）・ｘＨ（ｋ）＋Ｂ（ｘ）  …（１０）
Ｒａ（ｘ）＝［Ａ（ｘ）］  ｍｏｄ  Ｇ（ｘ）  …（１１）
Ｃ（ｘ）＝［Ｎｋ´（ｘ）］  ｍｏｄ  Ｇ（ｘ）  …（１２）
【００８０】
更に、式（１０）〜（１２）は、式（１３）のように表すことができる。
Ｃ（ｘ）＝｛Ｒａ（ｘ）・［ｘＨ（ｋ）］  ｍｏｄ  Ｇ（ｘ）｝
＋｛［Ｂ（ｘ）］  ｍｏｄ  Ｇ（ｘ）｝  …（１３）
【００８１】
ここで、式（１３）の［Ｂ（ｘ）］  ｍｏｄ  Ｇ（ｘ）＝Ｒｂ（ｘ）とし、且つ、［ｘＨ（ｋ）］  ｍｏｄ  Ｇ（ｘ）を式（７）で置き換えると、下記式（１４）のように表すことができる。
Ｃ（ｘ）＝｛Ｒａ（ｘ）・βＨ（ｋ）（ｘ）｝＋Ｒｂ（ｘ）  …（１４）
【００８２】
なお、式（１４）の｛Ｒａ（ｘ）・βＨ（ｋ）（ｘ）｝はガロア体上の乗算であることから、式（１４）は式（１５）のようになる。
Ｃ（ｘ）＝｛［Ｒａ（ｘ）・βＨ（ｋ）（ｘ）］  ｍｏｄ  Ｇ（ｘ）｝＋Ｒｂ（ｘ）
…（１５）
【００８３】
式（１５）のＣ（ｘ）は、入力フレームＮｋ´（ｘ）のＣＲＣ値であり、値がＣ（ｘ）＝‘０’の場合、該入力フレームＮｋ´（ｘ）に誤りがないといえる。また、式（１５）から、式（９）に基づく手順と同様の手順により、入力フレームＮｋ´（ｘ）の誤り検出処理を行うことができる。
【００８４】
従って、並列ビット数Ｍ以外のビット数の入力のＣＲＣ計算回路を用いることなく、入力フレームＮｋ´（ｘ）の誤り検出処理を行うことができる。即ち、入力データの並列幅が大きくなっても、回路規模が過大となることを防止するとともに処理遅延が過大となることを防止することができる。なお、イーサネットをはじめとする各通信においては、フレームの誤り検出処理用にはＣＲＣ値をそのまま使用するのではなく、ＣＲＣ値から算出したＦＣＳ値を使用することが多い。
【００８５】
＜第１実施形態＞
（構成）
次に、本発明の第１実施形態について、図１及び図２を参照しながら、詳細に説明する。図１は、本発明の第１実施形態に係るネットワーク・インタフェース・カード（ＮＩＣ；Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）２８の送信機能の構成を示すブロック図である。ネットワーク・インタフェース・カード２８は、図示しないサーバ装置又はコンピュータ装置に搭載され、フレームを送受信する処理を行うカードである。
【００８６】
ネットワーク・インタフェース・カード２８は、バス終端部２１と、ヘッダ付与部２２と、並列ＣＲＣ符号演算処理部２３と、ＦＣＳ付与部２４と、ＰＣＳ（Ｐｈｙｓｉｃａｌ  Ｃｏｄｉｎｇ  Ｓｕｂｌａｙｅｒ）部２５と、送信器２６と、を含む。
【００８７】
ネットワーク・インタフェース・カード２８は、サーバ接続バスにより、サーバ内のＣＰＵバスとバス終端部２１とが接続されている。また、送信器２６は、フレームを外部へ送信するための伝送路（図１の右端）に接続されている。ネットワーク・インタフェース・カード２８は、サーバから入力されるフレーム（入力フレーム、入力データ）に対して、フレームヘッダと、ＦＣＳ値と、を付与し、伝送路へ送信する。
【００８８】
バス終端部２１は、サーバ側から送られてくるフレームを受信する。このフレームは、Ｍビット幅のフレームである。すなわち、フレームは、並列ビット数Ｍのビットからなる１ワード毎に受け渡される。１ワード内の一端である最上位ビットには、フレームのうちの先頭側のビットが格納される。また、１ワード内の他端である最下位ビットには、フレームのうちの末尾側のビットが格納される。
【００８９】
バス終端部２１は、サーバ側から送られてくるフレームから、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾（末尾）を示す最終ワード有効データ信号Ｈ（ｋ）と、を生成し、Ｍビット幅のフレームとともにヘッダ付与部２２へ出力する。なお、Ｈ（ｋ）は、Ｈ（ｋ）＞０のとき、フレームＮｋ（ｘ）の最終ワードＥＯＦ位置であることを示し、また、最終ワード内の有効データビット数を示す情報である。つまり、ＥＯＦの位置であるとき、Ｈ（ｋ）＝１〜Ｍであり、Ｈ（ｋ）＝ｈ（ｈは、１≦ｈ＜Ｍの任意の正の整数）の場合、最終ワードはｈビットの端数ビットを含むことを示す。また、Ｈ（ｋ）＝Ｍならば、最終ワードは端数ビットではなく、全てが有効データビットであることを示す。
【００９０】
なお、バス終端部２１は、フレームの先頭ワードの出力時に同時にＳＯＦ信号を出力する。また、バス終端部２１は、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に、同時に最終ワード有効データ信号Ｈ（ｋ）を出力する。
【００９１】
ヘッダ付与部２２は、バス終端部２１から出力されたフレームにフレームヘッダを付与し、フレームヘッダが追加されたフレームとＳＯＦ信号と最終ワード有効データ信号Ｈ（ｋ）とを並列ＣＲＣ符号演算処理部２３へ出力する。なお、フレームヘッダの付与に伴い、フレームのビット数が増加する。その結果、最終ワード有効データブロックＢ（ｘ）も変化する。従って、ヘッダ付与部２２は、最終ワード有効データ信号Ｈ（ｋ）の値を、フレームヘッダ付与後の最終ワード有効データブロックＢ（ｘ）のビット数（最終ワード有効ビット数）に更新してＨ（ｋ）を出力する。
【００９２】
並列ＣＲＣ符号演算処理部２３は、ヘッダ付与部２２から出力されるＭビット幅のフレームに対する、ＣＲＣ値を生成する。
【００９３】
ＦＣＳ付与部２４は、並列ＣＲＣ符号演算処理部２３が生成したＣＲＣ値をＦＣＳ値としてフレーム最後尾（フレームの末尾）に付与する。ＦＣＳ値が付与されることで、フレーム長（ビット数）が増加し、その結果、最終ワード有効データブロックＢ（ｘ）も変化する。そこで、ＦＣＳ付与部２４は、最終ワード有効データ信号Ｈ（ｋ）の値を、ＦＣＳ値付与後の最終ワード有効データブロックＢ（ｘ）のビット数に更新してＨ（ｋ）を出力する。なお、ヘッダ付与部２２、並列ＣＲＣ符号演算処理部２３、及び、ＦＣＳ付与部２４は、送信ＭＡＣフレーム生成処理を行うＭＡＣ送信処理部２７を構成している。
【００９４】
ＰＣＳ部２５は、ＦＣＳ付与部２４からのＭビット幅のフレームを伝送路符号化する。この伝送路符号化は、８Ｂ／１０Ｂ変換や６４Ｂ／６６Ｂ変換等の伝送路送出のための符号化である。
【００９５】
送信器２６は、ＰＣＳ部２５から出力されるフレームをパラレルデータからシリアルデータに変換して伝送路へ出力する。
【００９６】
なお、この実施形態においては、本発明に係る並列巡回符号演算処理回路は、並列ＣＲＣ符号演算処理回路として、図１に示した並列ＣＲＣ符号演算処理部２３に適用されている。次に、図２を参照しながら、本発明に係る並列ＣＲＣ符号演算処理部２３の詳細な構成について説明する。
【００９７】
上述したように、並列ＣＲＣ符号演算処理部２３は、並列ビット数Ｍのビットからなる１ワード毎にフレームを受け取る。１ワード内の最上位ビットから最下位ビットへ向かう順に並んだビットには、フレーム内の先頭側から末尾側へ向かう順に並んだビットがそれぞれ１つずつ格納される。
【００９８】
並列ＣＲＣ符号演算処理部２３は、入力フレームＮｋ（ｘ）（ｋは任意の正の整数）のＣＲＣ値を得るため、ＣＲＣ符号演算対象である入力フレームＮｋ（ｘ）のビット数ｎが並列ビット数Ｍの整数倍でない場合、すなわち最終ワード有効データブロックが端数ビットである場合に、入力フレームのうちの最終ワード有効データブロック以外のビットからなるデータ（先頭のビットを含み且つ並列ビット数Ｍを整数倍した数の連続したビットからなるデータ）である整数倍データブロックＡ（ｘ）のＣＲＣ値（整数倍データブロック剰余）Ｒａ（ｘ）と、最終ワード有効ビット数Ｈ（ｋ）の最終ワード有効データブロックＢ（ｘ）のＣＲＣ値（最終ワード有効データブロック剰余）Ｒｂ（ｘ）と、を独立に算出する。
【００９９】
このとき、並列ＣＲＣ符号演算処理部２３は、１ワードに対して処理を並列に行う、Ｍビット幅のＣＲＣ計算部により、ＣＲＣ値Ｒａ（ｘ）を算出する。
【０１００】
更に、並列ＣＲＣ符号演算処理部２３は、最終ワード有効データブロックＢ（ｘ）を、ｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットだけ最下位ビット側にシフトし、且つ、シフトされたデータよりも最上位ビット側のすべてのビットに‘０’を設定したＭビット幅のデータ（ワード）ｂ’（ｘ）を生成し、そのデータｂ’（ｘ）を上記Ｍビット幅のＣＲＣ計算部に入力することにより、ＣＲＣ計算結果Ｒｂ（ｘ）を算出する。即ち、このデータｂ’（ｘ）は、最終ワード有効データブロックＢ（ｘ）の末尾のビットが０を指数として有するべき乗の項に対応する一端（最下位ビット）に位置し、且つ、最終ワード有効データブロックＢ（ｘ）よりも他端（最上位ビット）側のすべてのビットが‘０’に設定されたデータである。
【０１０１】
そして、並列ＣＲＣ符号演算処理部２３は、ＣＲＣ値Ｒａ（ｘ）と、最終ワード有効ビット数Ｈ（ｋ）に対応する係数βＨ（ｋ）（ｘ）と、を乗算（ガロア体上の乗算）し、その結果Ｒ´ａ（ｘ）と上記ＣＲＣ計算結果Ｒｂ（ｘ）との加算（ガロア体上の加算、即ち、排他的論理和）を行う。これらの処理により、ＣＲＣ計算部の数を増やすことなく並列ＣＲＣ符号演算処理を行うことができる。なお、これらの処理は、式（９）に基づく手順に従った処理である。
【０１０２】
図２に示したように、並列ＣＲＣ符号演算処理部２３は、制御信号生成部（制御信号生成手段）１１と、シフト部（シフト手段）１２と、選択部（選択手段）１３と、ＣＲＣ計算部（計算手段）１４と、係数部１５と、乗算部１６と、加算部１７と、を有する。なお、制御信号生成部１１、シフト部１２、選択部１３及びＣＲＣ計算部１４は、整数倍データブロック剰余算出手段（整数倍データブロック剰余算出工程）及び最終ワード有効データブロック剰余算出手段（最終ワード有効データブロック剰余算出工程）を構成している。また、係数部１５、乗算部１６及び加算部１７は、入力データ剰余算出手段（入力データ剰余算出工程）を構成している。
【０１０３】
制御信号生成部１１は、入力フレーム（入力データ）Ｎｋ（ｘ）を先頭のビットから順に１ワード（並列ビット数Ｍのビット）毎にシフト部１２へ出力する。制御信号生成部１１は、ＳＯＦ信号と端数ビット数Ｈ（ｋ）とから、制御信号であるＥＯＦ信号、シフト情報ｐ、有効データ区間信号ＶＤＴを生成する。
【０１０４】
そして、制御信号生成部１１は、出力するデータが、フレームデータの最終ワード（Ｈ（ｋ）≠０）の場合、フレーム最後尾（末尾）を示すＥＯＦ信号を生成し、生成したＥＯＦ信号を選択部１３へ出力する。更に、この場合、制御信号生成部１１は、並列ビット数ＭからＨ（ｋ）を減じることによりシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））を生成し、生成したシフト情報ｐをシフト部１２へ出力する。加えて、この場合、制御信号生成部１１は、受け取った信号Ｈ（ｋ）を係数部１５へ出力する。係数部１５へ出力するＨ（ｘ）の値は、フレームのＥＯＦ位置での値であるため、１〜Ｍの値となる。
【０１０５】
なお、入力フレーム長が並列ビット数Ｍの整数倍である場合、制御信号生成部１１は、最終ワード有効データ信号Ｈ（ｋ）＝Ｍを受信する。この場合、制御信号生成部１１は、フレーム最後尾を示すＥＯＦ信号を生成し、生成したＥＯＦ信号を選択部１３へ出力する。更に、この場合、制御信号生成部１１は、並列ビット数ＭからＨ（ｋ）を減じることによりシフト情報ｐ＝０（ｐ＝Ｍ−Ｈ（ｋ））を生成し、生成したシフト情報ｐをシフト部１２へ出力する。加えて、この場合、制御信号生成部１１は、受け取った信号Ｈ（ｋ）＝Ｍを係数部１５へ出力する。
【０１０６】
また、制御信号生成部１１は、入力データの少なくとも一部を含むデータを出力している間、有効データ区間信号ＶＤＴを生成し、生成した有効データ区間信号ＶＤＴをＣＲＣ計算部１４へ出力する。
【０１０７】
シフト部１２は、制御信号生成部１１から出力されたシフト情報ｐを入力した場合、制御信号生成部１１から出力されたＭビット幅の信号を、該制御信号生成部１１から出力されたシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））が表す数のビットだけ最下位ビット（０を指数として有するべき乗の項に対応する一端）側へシフトさせる。更に、この場合、シフト部１２は、シフト処理によって発生した最上位ビット（他端）側のｐビット（即ち、シフトされたデータよりも最上位ビット側のすべてのビット）に‘０’を設定する。
【０１０８】
これにより、ＣＲＣ計算部１４における演算対象は、最終ワード有効ビット数Ｈ（ｋ）のビットからなる最終ワード有効データブロックＢ（ｘ）となる。即ち、最終ワード有効ビット数Ｈ（ｋ）のビットからなる最終ワード有効データブロックＢ（ｘ）のＣＲＣ計算結果を、Ｍビット入力のＣＲＣ計算部１４により処理することができる。
【０１０９】
選択部１３は、制御信号生成部１１から出力されたＥＯＦ信号を入力した場合、生成多項式Ｇ（ｘ）の次数ｄと同数の‘０’からなるデータ（‘０’データ）をＣＲＣ計算部１４へ出力し、一方、制御信号生成部１１から出力されたＥＯＦ信号を入力しなかった場合、ＣＲＣ計算部１４の１サイクル前の（前回入力されたワードに対する演算処理にて出力された）計算結果をＣＲＣ計算部１４へ出力する。
【０１１０】
ＣＲＣ計算部１４は、選択部１３から出力される、ｄビット幅の１サイクル前のＣＲＣ値（または、‘０’データ）と、シフト部１２から出力されるＭビット幅のデータと、に基づいて、並列ビット数Ｍのビットに対して演算処理を並列に行うことにより、その処理結果を表すデータ（計算結果）を出力する（ＣＲＣ計算を行う）。即ち、ＣＲＣ計算部１４は、選択部１３から出力されたデータにｘＭ―ｄを乗算したデータと、シフト部１２から出力されたデータと、を加算し、その加算値にｘｄを乗算したデータを生成多項式Ｇ（ｘ）により除算した剰余を計算結果として算出する。
【０１１１】
係数部１５は、上記式（７）に基づいて算出されたＭ組の係数（剰余算出用係数）βＨ（ｋ）（ｘ）（Ｈ（ｋ）＝１〜Ｍ）を予め記憶している。係数部１５は、制御信号生成部１１から出力された信号Ｈ（ｋ）を入力した場合、その信号Ｈ（ｋ）に応じた係数βＨ（ｋ）（ｘ）を出力する。
【０１１２】
乗算部１６は、係数部１５から出力された係数βＨ（ｋ）（ｘ）と、ＣＲＣ計算部１４から出力された整数倍データブロックＡ（ｘ）のＣＲＣ値Ｒａ（ｘ）と、の乗算（ガロア体上の乗算）処理を行い、その乗算結果Ｒ´ａ（ｘ）を加算部１７へ出力する。
【０１１３】
加算部１７は、乗算部１６からの出力Ｒ´ａ（ｘ）と、最終ワード有効データブロックＢ（ｘ）のＣＲＣ値Ｒｂ（ｘ）と、の加算（ガロア体上の加算、即ち、排他的論理和）処理を行う。
【０１１４】
（作動）
次に、上述したように構成されたネットワーク・インタフェース・カード２８の作動について説明する。
【０１１５】
図１に示したバス終端部２１が、上位層からフレームを受信すると、フレームの先頭を示すＳＯＦ信号と、最後尾を示す最終ワード有効データ信号Ｈ（ｋ）と、を生成し、生成したＳＯＦ信号及び最終ワード有効データ信号Ｈ（ｋ）をＭビット幅のフレームとともに、ヘッダ付与部２２へ出力する。バス終端部２１は、フレームの最初の１ワード（Ｍビット）の出力時にＳＯＦ信号を出力し、フレームの末尾の１ワード（最終ワード有効データブロックＢ（ｘ）を含むＭビット）の出力時に、最終ワード有効データブロックＢ（ｘ）のビット数（最終ワード有効ビット数）を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１１６】
ヘッダ付与部２２は、入力フレームにフレームヘッダを付与し、ＳＯＦ信号と最終ワード有効データ信号Ｈ（ｋ）とを更新する。そして、ヘッダ付与部２２は、並列ＣＲＣ符号演算処理部２３へ、ヘッダ付与後のフレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に最終ワード有効データ信号Ｈ（ｋ）を出力する（図３の（ａ）〜（ｃ））。
【０１１７】
並列ＣＲＣ符号演算処理部２３は、ヘッダ付与部２２から出力されるフレームＮｋ（ｘ），Ｎ（ｋ＋１）（ｘ））（図３の（ａ）にて模式的に太線で表す）のＣＲＣ値を算出し、算出したＣＲＣ値をＦＣＳ付与部２４へ出力する。
【０１１８】
ＦＣＳ付与部２４は、並列ＣＲＣ符号演算処理部２３から出力されたＣＲＣ値を、図３に示したように、ＦＣＳ３１，３２としてフレームに付与するとともに、Ｈ（ｋ）を更新する。そして、ＦＣＳ付与部２４は、ＰＣＳ部２５へ、ＦＣＳ付与後のフレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレーム最後尾の最終ワード有効データブロックＢ（ｘ）の出力時に最終ワード有効データ信号Ｈ（ｋ）を出力する（図３の（ｄ）〜（ｆ））。
【０１１９】
ＰＣＳ部２５は、ＦＣＳ付与部２４からのフレームを伝送路符号化し、符号化したデータを送信器２６へ出力する。送信器２６は、ＰＣＳ部２５から出力されたＭビット幅のフレームをパラレルデータからシリアルデータに変換して伝送路へ送信する。
【０１２０】
次に、並列ＣＲＣ符号演算処理部２３の作動について、より詳細に説明する。図４は、並列ＣＲＣ符号演算処理部２３の各構成要素の入力や出力を示すタイミングチャートである。図４の（ａ）〜（ｃ）は、それぞれ制御信号生成部１１に入力されるＳＯＦ信号、信号Ｈ（ｋ）、及び、フレームを表している。また、図４の（ｄ）は、制御信号生成部１１に入力されるフレームをワード（列）単位で示している。各ワードはＭビットからなる。図４の（ｅ）〜（ｊ）は、それぞれシフト部１２〜加算部１７の出力を表している。図４の（ｋ）〜（ｍ）は、それぞれ信号ＶＤＴ、ＥＯＦ信号及びシフト情報ｐを表している。
【０１２１】
図４の（ａ）〜（ｄ）に示したように、制御信号生成部１１には、ヘッダ付与部２２からの、Ｍビット幅のＣＲＣ符号演算対象のフレームと、フレーム先頭を示すＳＯＦ信号と、データ最後尾の最終ワード有効ビット数を示す最終ワード有効データ信号Ｈ（ｋ）と、が入力される。
【０１２２】
入力フレームが入力されると、図４の（ｃ）に示したように、並列ビット数Ｍの整数倍のビットからなる整数倍データブロックＡ（ｘ）と、最終ワード有効ビット数Ｈ（ｋ）のビットからなる最終ワード有効データブロックＢ（ｘ）と、が存在する。
【０１２３】
図４の（ｄ）は、入力フレームをワード（１つのワードは、並列ビット数Ｍのビットからなる。また、ワードはワード列とも呼ばれる。）毎に示した図である。第１ワードａ（ｘ）＃１〜第（ｗ−１）ワードａ（ｘ）＃（ｗ−１）が整数倍データブロックＡ（ｘ）であり、第ｗワードｂ（ｘ）が最終ワードである。第ｗワードｂ（ｘ）は、最終ワード有効データブロックＢ（ｘ）を含む。
【０１２４】
図４の（ａ）〜（ｄ）に示したフレーム及び信号が入力されると、制御信号生成部１１は、該フレームを構成するデータを出力している間、有効データ区間信号ＶＤＴを「有効（フレームを構成するビットが入力されていること）」を表す信号に設定し、その有効データ区間信号ＶＤＴをＣＲＣ計算部１４へ出力する。
【０１２５】
また、制御信号生成部１１は、入力フレームの１つ目のワード（第１ワード）が入力されてから第（ｗ−１）ワードが入力されるまでの間、フレーム最後尾信号（ＥＯＦ信号）を「Ｌ：Ｌｏｗ」を表す信号に設定し、そのＥＯＦ信号を選択部１３へ出力する。
【０１２６】
なお、図４の（ｋ）〜（ｍ）は、制御信号生成部１１が生成する信号である。図４の（ｋ）は、有効データ区間信号ＶＤＴであり、ここでは、‘Ｈ’レベルが「有効」を表し、‘Ｌ’レベルが「無効（フレームを構成するビットが入力されていないこと）」を表す。図４の（ｌ）は、ＥＯＦ信号であり、ここでは、‘Ｈ’レベルがフレームの最終ワード（第ｗワード）であることを示し、‘Ｌ’レベルがフレームの最終ワード（第ｗワード）でないことを示す。
【０１２７】
シフト部１２は、制御信号生成部１１からのシフト情報ｐに応じて、Ｍビット幅の入力フレーム（図４の（ｄ））のシフト処理を行う。ところで、Ｍビット幅の入力フレーム（図４の（ｄ））の第１ワード〜第（ｗ−１）ワードは、最終ワード有効データブロックＢ（ｘ）を含まない。従って、シフト部１２は、シフト処理を行うことなく、ＣＲＣ計算部１４へ第１ワードａ（ｘ）＃１〜第（ｗ−１）ワードａ（ｘ）＃（ｗ−１）を順に出力する。
【０１２８】
選択部１３は、図４の（ｌ）のＥＯＦ信号に応じて、図４の（ｆ）に示したように、第２ワードが入力されてから第（ｗ−１）ワードが入力されるまでの間、前回のワードに対する演算処理にてＣＲＣ計算部１４が出力したデータＲａ（ｘ）＃１〜Ｒａ（ｘ）＃（ｗ−２）を該ＣＲＣ計算部１４へ出力する。
【０１２９】
ここで、ＣＲＣ計算部１４が整数倍データブロックＡ（ｘ）のＣＲＣ値（整数倍データブロック剰余）Ｒａ（ｘ）を計算する方法について説明する。ＣＲＣ計算部１４は、Ｍビット幅のデータ（ワード）の各ビットを係数とするＭ−１次多項式にｘｄを乗算した多項式を次数ｄの生成多項式Ｇ（ｘ）により除算した剰余を算出する。ここで、生成多項式Ｇ（ｘ）の次数ｄは予め定められている。
【０１３０】
整数倍データブロックＡ（ｘ）のビット数は、Ｍの整数倍（本例では、（ｗ−１）倍）であるので、ＣＲＣ計算部１４は上記のようにＭビットのデータに関して剰余を算出する処理を、整数倍データブロックＡ（ｘ）の最初のＭビットａ（ｘ）＃１から最後のＭビットａ（ｘ）＃（ｗ−１）まで、順に行う。ＣＲＣ計算部１４は、最初のＭビットａ（ｘ）＃１について剰余Ｒａ（ｘ）＃１を算出すると、算出した剰余Ｒａ（ｘ）＃１を選択部１３へ出力する。
【０１３１】
そして、ＣＲＣ計算部１４は、次のＭビットａ（ｘ）＃２が入力されると、選択部１３から出力された前回のワードａ（ｘ）＃１に基づく剰余Ｒａ（ｘ）＃１（ｄビット）を最上位ビット側に（Ｍ−ｄ）ビットだけシフトする。更に、ＣＲＣ計算部１４は、シフトしたデータと今回の入力ワードであるＭビットａ（ｘ）＃２との排他的論理和を求める。そして、ＣＲＣ計算部１４は、求めた排他的論理和が表すＭ−１次多項式にｘｄを乗算した多項式を生成多項式Ｇ（ｘ）により除算した剰余Ｒａ（ｘ）＃２を算出する。
【０１３２】
加えて、ＣＲＣ計算部１４は、以降のＭビットのデータについても同様の処理を繰り返す。剰余を表すデータの各ビットはｄ−１次の多項式の係数に相当し、最上位ビット側に（Ｍ−ｄ）ビットだけシフトすることは、剰余を表す多項式にｘＭ−ｄを乗じることに対応している。
【０１３３】
そして、ＣＲＣ計算部１４は、最後のＭビットａ（ｘ）＃（ｗ−１）が入力されると、選択部１３から出力された前回のワードａ（ｘ）＃（ｗ−２）に基づく剰余Ｒａ（ｘ）＃（ｗ−２）を最上位ビット側に（Ｍ−ｄ）ビットだけシフトする。更に、ＣＲＣ計算部１４は、シフトしたデータと今回の入力ワードであるＭビットａ（ｘ）＃（ｗ−１）との排他的論理和を求める。そして、ＣＲＣ計算部１４は、求めた排他的論理和が表すＭ−１次多項式にｘｄを乗算した多項式を生成多項式Ｇ（ｘ）により除算した剰余Ｒａ（ｘ）＃（ｗ−１）を算出する。この算出した剰余Ｒａ（ｘ）＃（ｗ−１）は、整数倍データブロックＡ（ｘ）のＣＲＣ値Ｒａ（ｘ）である。
【０１３４】
このように、ＣＲＣ計算部１４は、シフト部１２が出力する入力フレームａ（ｘ）＃１〜ａ（ｘ）＃（ｗ−１）と、選択部１３が出力するＲａ（ｘ）＃１〜Ｒａ（ｘ）＃（ｗ−２）と、から、整数倍データブロックＡ（ｘ）に対するＣＲＣ計算を行い、図４の（ｇ）に示したように、第ｗワードとして（第ｗワード列にて）ＣＲＣ計算結果Ｒａ（ｘ）を出力する。
【０１３５】
制御信号生成部１１は、最終ワード有効データ信号Ｈ（ｋ）（Ｈ（ｋ）＞０）を受信すると、ＥＯＦ信号を‘Ｈ’レベルに設定し（図４の（ｌ）の第ｗワード）、そのＥＯＦ信号を選択部１３へ出力する。更に、制御信号生成部１１は、図４の（ｍ）に示したように、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））をシフト部１２へ出力する。
【０１３６】
シフト部１２には、Ｂ（ｘ）を含むＭビットのデータｂ（ｘ）（図４の（ｄ）の第ｗワード）が入力される。シフト部１２は、Ｍビット幅の入力フレームｂ（ｘ）（図５の（ａ））を受け取ると、そのデータを制御信号生成部１１からのシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））だけ最下位ビット側へシフトする。更に、シフト部１２は、シフトにより発生した最上位ビット側のｐビット（データｂ（ｘ）を構成するビット以外のビット）に、ＣＲＣ値に影響を与えない‘０’を設定する。これにより、シフト部１２は、Ｍビット幅のデータｂ´（ｘ）（図５の（ｂ））を生成し、生成したデータｂ´（ｘ）をＣＲＣ計算部１４へ出力する（図４の（ｅ）の第ｗワード）。
【０１３７】
図６は、シフト部１２の詳細構成を表す。
シフト部１２は、セレクタ回路６１１〜６１Ｍと、制御部６２１〜６２Ｍと、を含む。セレクタ回路６１１〜６１Ｍには、Ｍビットのデータと１ビットの‘０’と、が入力される。セレクタ回路６１１〜６１Ｍは、制御部６２１〜６２Ｍの信号に応じて、入力されたビットのうちの１つのビットを出力する。
【０１３８】
制御部６２１〜６２Ｍは、シフト情報ｐに応じて、セレクタ回路６１１〜６１Ｍを制御する信号を生成し、生成した信号を出力する。次に、具体例を挙げ、シフト部１２の作動について説明する。
【０１３９】
入力ビット幅Ｍ＝３の場合、シフト部１２は、セレクタ回路６１１〜６１３と、制御部６２１〜６２３と、により構成される。
いま、入力側の最上位ビットを入力ビットデータ１とし、入力側の最下位ビットを入力ビットデータ３とし、出力側の最上位ビットを出力ビットデータ１とし、出力側の最下位ビットを出力ビットデータ３とし、且つ、シフト情報ｐ＝１である場合を想定して説明を続ける。
【０１４０】
この場合、制御部６２１は、シフト情報ｐ＝１に応じて、‘０’を出力させるための信号をセレクタ回路６１１へ出力する。セレクタ回路６１１は、制御部６２１からの信号に応じて‘０’を選択し、出力ビットデータ１として出力する。
【０１４１】
更に、制御部６２２は、シフト情報ｐ＝１に応じて、入力ビットデータ１を出力させるための信号を、セレクタ回路６１２へ出力する。セレクタ回路６１２は、制御部６２２からの信号に応じて入力ビットデータ１を選択し、出力ビットデータ２として出力する。
【０１４２】
加えて、制御部６２３は、シフト情報ｐ＝１に応じて、入力ビットデータ２を出力させるための信号を、セレクタ回路６１３へ出力する。セレクタ回路６１３は、制御部６２３からの信号に応じて、入力ビットデータ２を選択し、出力ビットデータ３として出力する。
【０１４３】
このようにして、シフト部１２は、出力ビットデータ１として‘０’、出力ビットデータ２として入力データビット１、出力ビットデータ３として入力データビット２を出力する。即ち、シフト情報ｐ＝１により、入力ビットデータは、１ビットずつ最下位ビット側にシフトされる。
【０１４４】
次に、シフト情報ｐ＝２である場合について説明する。この場合、制御部６２１は、シフト情報ｐ＝２に応じて‘０’を出力させるための信号をセレクタ回路６１１へ出力する。セレクタ回路６１１は、制御部６２１からの信号に応じて‘０’を選択し、出力ビットデータ１として出力する。
【０１４５】
更に、制御部６２２は、シフト情報ｐ＝２に応じて、‘０’を出力させるための信号をセレクタ回路６１２へ出力する。セレクタ回路６１２は、制御部６２２からの信号に応じて‘０’を選択し、出力ビットデータ２として出力する。
【０１４６】
加えて、制御部６２３は、シフト情報ｐ＝２に応じて、入力ビットデータ１を出力させるための信号をセレクタ回路６１３へ出力する。セレクタ回路６１３は、制御部６２３からの信号に応じて入力ビットデータ１を選択し、出力ビットデータ３として出力する。
【０１４７】
このようにして、シフト部１２は、出力ビットデータ１として‘０’、出力ビットデータ２として‘０’、出力ビットデータ３として入力データビット１を出力する。即ち、シフト情報ｐ＝２により、入力ビットデータは、２ビットずつ最下位ビット側にシフトされる。
【０１４８】
なお、Ｍ＝３の場合について具体的に説明したが、Ｍの値が他の値であっても同様である。
【０１４９】
選択部１３は、制御信号生成部１１からのＥＯＦ信号に応じて、‘０’データをＣＲＣ計算部１４へ出力する（図４の（ｆ）の第ｗワード）。ＣＲＣ計算部１４は、Ｍビット幅のＣＲＣ計算を行う。ＣＲＣ計算部１４は、選択部１３から出力された‘０’データを用いて、シフト部１２から出力されたデータｂ´（ｘ）に含まれるＢ（ｘ）に対するＣＲＣ計算を行うことにより、計算結果（最終ワード有効データブロック剰余）Ｒｂ（ｘ）を出力する（図４の（ｇ）の第（ｗ＋１）ワード）。
【０１５０】
係数部１５は、制御信号生成部１１から出力された最終ワード有効ビット数Ｈ（ｋ）に応じて、その最終ワード有効ビット数Ｈ（ｋ）に対応する係数βＨ（ｋ）（ｘ）を乗算部１６へ出力する（図４の（ｈ）の第ｗワード）。
【０１５１】
図７は、係数部１５の詳細構成を表す。
係数部１５は、セレクタ回路７１１と、係数テーブル７２１と、を含む。係数テーブル７２１は、上記式（７）に基づいて算出されたＭ組の係数β１（ｘ）７３１〜βＭ（ｘ）７３Ｍを予め記憶している。
【０１５２】
次に、具体例として、Ｍ＝３の場合における係数部１５の作動について説明する。
この場合、係数テーブル７２１は、係数β１（ｘ）７３１〜β３（ｘ）７３３を含む。セレクタ回路７１１は、最終ワード有効ビット数Ｈ（ｋ）＝１を受け取ったとき、係数β１（ｘ）を出力する。また、セレクタ回路７１１は、最終ワード有効ビット数Ｈ（ｋ）＝２を受け取ったとき、係数β２（ｘ）を出力する。同様に、セレクタ回路７１１は、最終ワード有効ビット数Ｈ（ｋ）＝３を受け取ったとき、係数β３（ｘ）を出力する。
【０１５３】
なお、Ｍ＝３の場合について具体的に説明したが、Ｍの値が他の値であっても同様である。
【０１５４】
乗算部１６は、係数部１５から出力されたβＨ（ｋ）（ｘ）（図４の（ｈ）の第ｗワード）と、ＣＲＣ計算部１４から出力されたＲａ（ｘ）と、の乗算（ガロア体上の乗算）処理を行い、その結果Ｒ´ａ（ｘ）を加算部１７へ出力する（図４の（ｉ）の第（ｗ＋１）ワード）。
【０１５５】
この乗算結果は、一般的な多項式の乗算を行った後に生成多項式Ｇ（ｘ）により除算した剰余である。以下に、ガロア体の乗算回路の例を示す。ここで、３ビットの多項式である、Ｒａ（ｘ）＝（ｒａ２・ｘ２＋ｒａ１・ｘ１＋ｒａ０・ｘ０）及びβ（ｘ）＝（ｂｔ２・ｘ２＋ｂｔ１・ｘ１＋ｂｔ０・ｘ０）の乗算を行うと、下記（１６）式により与えられる４次の多項式となる。
Ｅ（ｘ）＝Ｒａ（ｘ）・β（ｘ）
＝ｅ４・ｘ４＋ｅ３・ｘ３＋ｅ２・ｘ２＋ｅ１・ｘ１＋ｅ０・ｘ０  …（１６）
【０１５６】
上記式（１６）の各係数は、下記式（１７）〜（２１）のようになる。なお、‘・’はＡＮＤ演算であり、‘＋’は排他的論理和（ＸＯＲ）演算である。
ｅ４＝ｒａ２・ｂｔ２  …（１７）
ｅ３＝ｒａ１・ｂｔ２＋ｒａ２・ｂｔ１  …（１８）
ｅ２＝ｒａ０・ｂｔ２＋ｒａ１・ｂｔ１＋ｒａ２・ｂｔ０  …（１９）
ｅ１＝ｒａ０・ｂｔ１＋ｒａ１・ｂｔ０  …（２０）
ｅ０＝ｒａ０・ｂｔ０  …（２１）
【０１５７】
次に、Ｅ（ｘ）を、下記式（２２）の生成多項式Ｇ（ｘ）により除算すると、下記式（２３）に示したように、その剰余は、２次以下の多項式Ｒ´ａ（ｘ）になる。即ち、Ｒ´ａ（ｘ）が、Ｒａとβ（ｘ）との乗算結果である。
Ｇ（ｘ）＝ｘ３＋ｘ１＋ｘ０  …（２２）
Ｒ´ａ （ｘ）＝ｒ´ａ２・ｘ２＋ｒ´ａ１・ｘ１＋ｒ´ａ０・ｘ０  …（２３）
【０１５８】
なお、ガロア体では加算と減算が同じであるので、式（２３）の各係数は以下のように表される。
ｒ´ａ２＝ｅ２＋ｅ４  …（２４）
ｒ´ａ１＝ｅ１＋ｅ３＋ｅ４  …（２５）
ｒ´ａ０＝ｅ０＋ｅ３  …（２６）
【０１５９】
以上のように、２つの３ビットの多項式Ｒａ（ｘ）及びβ（ｘ）の乗算を行い、その結果Ｅ（ｘ）に対する除算の剰余（Ｅ（ｘ）  ｍｏｄ  Ｇ（ｘ））を計算することにより、ガロア体上の乗算結果Ｒ´ａ（ｘ）を得ることができる。
【０１６０】
図８に乗算部１６の具体的な回路例を示す。
乗算部１６は、ＡＮＤ部８１１〜８１ｄと、生成多項式Ｇ（ｘ）の次数ｄの２倍の数２ｄのビットを入力幅とするｍｏｄ計算部８２１と、複数の排他的論理和演算部と、を含む。
【０１６１】
ＡＮＤ部８１１〜８１ｄは、係数部１５から出力された信号β（ｘ）とＲａ（ｘ）とのＡＮＤ処理が行われる。図９は、ＡＮＤ部８１１〜８１ｄのうちの任意の１つであるＡＮＤ部９０１の詳細構成を表す。
【０１６２】
ＡＮＤ部９０１は、ｄ個のＡＮＤ素子９１１〜９１ｄを含む。ｒａｆ（ｆは、０≦ｆ＜ｄ−１の任意の整数）は１ビットの信号である。ＡＮＤ部９０１は、ｒａｆ＝１の場合にβ（ｘ）を出力し、一方、ｒａｆ＝０の場合にｄビットの‘０’データを出力する。
【０１６３】
次に、具体的な作動について、図８及び図９を参照しながら説明する。
ｄ＝３であり且つ生成多項式Ｇ（ｘ）＝ｘ３＋ｘ１＋ｘ０である場合を想定して説明を続ける。この場合、入力信号Ｒａ（ｘ）＝（ｒａ２・ｘ２＋ｒａ１・ｘ１＋ｒａ０・ｘ０）であり、β（ｘ）＝（ｂｔ２・ｘ２＋ｂｔ１・ｘ１＋ｂｔ０・ｘ０）である。
【０１６４】
乗算部１６は、３つのＡＮＤ部８１１〜８１３（ｄ＝３なので８１ｄは８１３となる）と、６ビット入力（ｄ＝３なので２ｄ＝６）のｍｏｄ計算部８２１とからなる。Ｒａ（ｘ）とβ（ｘ）とが入力されると、β（ｘ）は、各ＡＮＤ部８１１〜８１３へ入力され、Ｒａ（ｘ）は、ｒａ２がＡＮＤ部８１１へ、ｒａ１がＡＮＤ部８１２へ、ｒａ０がＡＮＤ部８１３へ、それぞれ入力される。各ＡＮＤ部８１１〜８１３は、入力された信号のＡＮＤ処理を行う。
【０１６５】
即ち、ＡＮＤ部８１１は、ｒａ２・ｂｔ２、ｒａ２・ｂｔ１及びｒａ２・ｂｔ０を出力する（図９のｒａｆ＝ｒａ２）。同様に、ＡＮＤ部８１２は、ｒａ１・ｂｔ２、ｒａ１・ｂｔ１及びｒａ１・ｂｔ０を出力する（図９のｒａｆ＝ｒａ１）。同様に、ＡＮＤ部８１３は、ｒａ０・ｂｔ２、ｒａ０・ｂｔ１及びｒａ０・ｂｔ０を出力する（図９のｒａｆ＝ｒａ０）。
【０１６６】
そして、乗算部１６は、複数の排他的論理和演算部にて各ＡＮＤ部８１１〜８１３から出力されたデータの排他的論理和を求める。具体的には、乗算部１６は、ｅ４としてｒａ２・ｂｔ２を算出し、ｅ３としてｒａ１・ｂｔ２とｒａ２・ｂｔ１との排他的論理和を算出し、ｅ２としてｒａ０・ｂｔ２と、ｒａ１・ｂｔ１と、ｒａ２・ｂｔ０と、の排他的論和を算出し、ｅ１としてｒａ０・ｂｔ１とｒａ１・ｂｔ０との排他的論理和を算出し、ｅ０としてｒａ０・ｂｔ０を算出する。
【０１６７】
そして、乗算部１６は、算出したｅ０〜ｅ４をｍｏｄ計算部８２１へ入力する。ｍｏｄ計算部８２１は、ｒ´ａ２としてｅ２とｅ４との排他的論理和を算出し、ｒ´ａ１としてｅ１と、ｅ３と、ｅ４と、の排他的論理和を算出し、ｒ´ａ０としてｅ０とｅ３との排他的論理和を算出する。次いで、ｍｏｄ計算部８２１は、乗算結果Ｒ´ａ（ｘ）（＝ｒ´ａ２・ｘ２＋ｒ´ａ１・ｘ１＋ｒ´ａ０・ｘ０）を出力する。
【０１６８】
加算部１７は、乗算部１６から出力されたＲ´ａ（ｘ）（図４の（ｉ）の第（ｗ＋１）ワード）と、ＣＲＣ計算部１４から出力されたＲｂ（ｘ）と、の排他的論理和を算出し、入力フレームに対するＣＲＣ値（入力データ剰余）Ｒ（ｘ）を、Ｍビット幅のフレーム、ＳＯＦ信号及び信号Ｈ（ｋ）とともに出力する（図４の（ｊ）の第（ｗ＋２）ワード）。これらは、ＦＣＳ付与部２４へ出力される。そして、入力データ剰余Ｒ（ｘ）は、巡回冗長検査（ＣＲＣ）方式を用いてデータの誤り検出処理を行うために使用される。
【０１６９】
以上、説明したように、本発明に係る第１実施形態によれば、整数倍データブロックＡ（ｘ）を構成するデータを、並列ビット数Ｍずつ並列に処理することにより、適切に整数倍データブロック剰余Ｒａ（ｘ）を算出することができる。この結果、入力データ剰余Ｒ（ｘ）を低遅延で算出することができる。
【０１７０】
また、上記第１実施形態によれば、並列ビット数Ｍが異なる複数の計算部を備えなくても、最終ワード有効データブロック剰余Ｒｂ（ｘ）を適切に算出することができる。即ち、ＣＲＣ符号演算処理回路の規模を小さくすることができる。さらに、上記第１実施形態によれば、複数のＣＲＣ計算部を縦続接続しなくても良いため、入力データ剰余Ｒ（ｘ）を低遅延で算出することができる。
【０１７１】
更に、上記第１実施形態によれば、並列ビット数Ｍのビットに対して並列に処理を行うことにより、適切に最終ワード有効データブロック剰余Ｒｂ（ｘ）を算出することができる。従って、入力データ剰余Ｒ（ｘ）をより一層低遅延で算出することができる。
【０１７２】
加えて、上記第１実施形態によれば、並列ビット数Ｍのビットに対して並列に処理を行う１つの計算部（ＣＲＣ計算部１４）を用いて、最終ワード有効データブロック剰余Ｒｂ（ｘ）及び整数倍データブロック剰余Ｒａ（ｘ）の両方を算出することができる。この結果、回路の規模をより一層小さくすることができる。
【０１７３】
なお、上記第１実施形態においては、ＣＲＣ計算部１４は、多項式のうちの最も次数が高い項に対応するビットが最上位ビットに位置するデータを処理するように構成されていたが、多項式のうちの最も次数が低い項に対応するビットが最上位ビットに位置するデータを処理するように構成されていてもよい。更に、この場合、シフト部１２は、制御信号生成部１１から出力されたＭビット幅の信号を、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））だけ最上位ビット側へシフトさせ、且つ、シフト処理によって発生した下位ビット側のｐビットに‘０’を設定するように構成される。
【０１７４】
また、上記第１実施形態においては、制御信号生成部１１は、フレーム先頭信号であるＳＯＦ信号、及び、最終ワード有効ビット数Ｈ（ｋ）から、フレーム最後尾信号であるＥＯＦ信号、及び、シフト情報ｐを生成するように構成されていたが、ＳＯＦ信号及び信号Ｈ（ｋ）以外の信号（例えば、入力Ｍビット毎のビットイネーブル信号）から生成するように構成されていてもよい。
【０１７５】
加えて、上記第１実施形態においては、入力フレーム長が並列ビット数Ｍの整数倍である場合、整数倍データブロック剰余Ｒａと最終ワード有効データブロック剰余Ｒｂとを独立に算出するとともに、算出した整数倍データブロック剰余Ｒａ及び最終ワード有効データブロック剰余Ｒｂに基づいて入力データ剰余Ｒ（ｘ）を算出するように構成されていたが、整数倍データブロック剰余Ｒａを入力データ剰余Ｒ（ｘ）として算出するように構成されていてもよい。
【０１７６】
更に、上記第１実施形態は、制御信号生成部１１が１ビット単位のシフト情報ｐを生成し、シフト部１２が１ビット単位のシフト処理を行なうように構成されていたが、制御信号生成部１１が複数のビット（例えば、バイト）単位のシフト情報ｐを生成し、シフト部１２が複数のビット単位のシフト処理を行なうように構成されていてもよい。
【０１７７】
加えて、上記第１実施形態は、巡回符号としてＣＲＣ（巡回冗長検査）符号を用いるように構成されていたが、ハミング符号及びＢＣＨ符号等の他の巡回符号を用いるように構成されていてもよい。また、並列ＣＲＣ符号演算処理部２３は、プログラムに従って動作するＣＰＵによって実現されていてもよい。
【０１７８】
＜第２実施形態＞
次に、本発明の第２実施形態に係るイーサネット・スイッチについて説明する。
図１０に示したように、このイーサネット・スイッチは、ラインカード受信部１０１１〜１０１Ｃと、スイッチ部１０３と、ラインカード送信部１０２１〜１０２Ｃと、を備える。このイーサネット・スイッチは、１つのラインカード受信部１０１１〜１０１Ｃと、１つのラインカード送信部１０２１〜１０２Ｃと、からなる組をＣ組だけ構成している。ここで、Ｃは１以上の任意の正の整数である。
【０１７９】
１つの組を構成するラインカード受信部１０１１〜１０１Ｃ及びラインカード送信部１０２１〜１０２Ｃは、本例では、１つのラインカード上に実装されている。１つのラインカードは、１つのポートを有する。ラインカード受信部１０１１〜１０１Ｃ及びラインカード送信部１０２１〜１０２Ｃのそれぞれは、スイッチ部１０３に接続されている。
【０１８０】
各ラインカード受信部１０１１〜１０１Ｃは、フレームの受信、解析、検査、廃棄を行い、転送可能フレームをスイッチ部１０３へ転送する。以下、ラインカード受信部１０１１を例にして構成及び作動を説明するが、他のラインカード受信部の構成及び作動についても同様である。
【０１８１】
ラインカード受信部１０１１は、受信器１００１と、ＰＣＳ部１００２と、ヘッダ解析部１００３と、並列ＣＲＣ検査部１００４と、フレーム廃棄部１００５と、フレームバッファ部１００６と、を備える。
【０１８２】
受信器１００１は、ＰＣＳ部１００２に接続されている。受信器１００１は、外部からフレーム（入力フレーム）を受信すると、そのフレームをシリアルデータからパラレルデータに変換してＰＣＳ部１００２へ出力する。
【０１８３】
ＰＣＳ部１００２は、受信器１００１及びヘッダ解析部１００３に接続されている。ＰＣＳ部１００２は、８Ｂ／１０Ｂ変換や６４Ｂ／６６Ｂ変換符号により伝送路符号化されているフレームを復号し、Ｍビット幅のフレームをヘッダ解析部１００３へ出力する。例えば、１０ギガビット・イーサネットが採用されている場合には、ＰＣＳ部１００２は、６４Ｂ／６６Ｂ変換によってフレームを復号する。
【０１８４】
また、ＰＣＳ部１００２は、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）を生成し、Ｍビット幅のフレームとともにヘッダ解析部１００３へ出力する。具体的には、ＰＣＳ部１００２は、ヘッダ解析部１００３へ、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に、最終ワード有効データブロックＢ（ｘ）のビット数（最終ワード有効ビット数）を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０１８５】
ヘッダ解析部１００３は、ＰＣＳ部１００２と、並列ＣＲＣ検査部１００４と、フレーム廃棄部１００５と、に接続されている。ヘッダ解析部１００３は、ＰＣＳ部１００２から出力されたフレームのヘッダの内容を解析し、その解析結果に基づくフレーム制御情報を出力する。
【０１８６】
また、ヘッダ解析部１００３は、フレームを並列ＣＲＣ検査部１００４へ出力する。このとき、ヘッダ解析部１００３は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に最終ワード有効データ信号Ｈ（ｋ）を出力する。
【０１８７】
並列ＣＲＣ検査部１００４は、ヘッダ解析部１００３とフレーム廃棄部１００５とに接続されている。並列ＣＲＣ検査部１００４は、フレームの誤りを検出するために、フレームのヘッダからＦＣＳまでのＣＲＣ符号演算を行う。そして、並列ＣＲＣ検査部１００４は、ＣＲＣ検査結果をフレーム誤り検出の結果として、フレーム廃棄部１００５へ出力する。
【０１８８】
フレーム廃棄部１００５は、ヘッダ解析部１００３と、並列ＣＲＣ検査部１００４と、フレームバッファ部１００６と、に接続されている。フレーム廃棄部１００５は、ヘッダ解析部１００３からのフレーム制御情報と、並列ＣＲＣ検査部１００４からのＣＲＣ検査結果と、に応じて、並列ＣＲＣ検査部１００４から入力されたフレームを廃棄する。また、フレーム廃棄部１００５は、ＣＲＣ検査結果が正常であるフレームとその制御情報とをフレームバッファ部１００６へ出力する。
【０１８９】
フレームバッファ部１００６は、フレーム廃棄部１００５とスイッチ部１０３とに接続されている。フレームバッファ部１００６は、スイッチ部１０３へ出力するフレームとその制御情報とをバッファリングする。
【０１９０】
スイッチ部１０３は、ラインカード受信部１０１１から入力されたフレームを、フレーム制御情報に従って、ラインカード受信部１０１１と組を構成するラインカード送信部１０２１へ転送する。即ち、ここでは、フレーム制御情報は、転送先のラインカード送信部がラインカード送信部１０２１であることを表す情報である。なお、フレーム制御情報は、転送先のラインカード送信部がラインカード送信部１０２１以外のラインカード送信部であることを表す情報であってもよい。
【０１９１】
ラインカード送信部１０２１は、スイッチ部１０３から転送されたフレームをパラレルデータからシリアルデータに変換して送信する。なお、他のラインカード送信部も同様である。
【０１９２】
なお、この実施形態においては、本発明に係る並列巡回符号演算処理回路は、並列ＣＲＣ符号演算処理回路として、図１０における並列ＣＲＣ検査部１００４に適用されている。次に、図１１を参照しながら、ラインカード受信部１０１１における並列ＣＲＣ検査部１００４の詳細な構成について説明する。
【０１９３】
上述した並列ＣＲＣ符号演算処理部２３と同様に、並列ＣＲＣ検査部１００４は、並列ビット数Ｍのビットからなる１ワード毎にフレーム（ＦＣＳ値を含む入力フレーム）を受け取る。
並列ＣＲＣ検査部１００４は、入力フレームＮ´ｋ（ｘ）（ｋは任意の正の整数）の先頭からＦＣＳ値までに含まれる誤りを検出するため、入力フレームＮ´ｋ（ｘ）の先頭からＦＣＳ値までをＣＲＣ符号演算する。
並列ＣＲＣ検査部１００４は、ＣＲＣ符号演算対象である入力フレームＮ´ｋ（ｘ）のビット数ｎが並列ビット数Ｍの整数倍でない場合、つまり、最終ワード有効データブロックが端数ビットである場合に、入力フレームＮ´ｋ（ｘ）のうち最終ワード有効データブロック以外のビット（並列ビット数Ｍを整数倍した数のビット）からなる整数倍データブロックＡ（ｘ）のＣＲＣ値（整数倍データブロック剰余）Ｒａ（ｘ）と、最終ワード有効ビット数Ｈ（ｋ）のビットからなる最終ワード有効データブロックＢ（ｘ）のＣＲＣ値（最終ワード有効データブロック剰余）Ｒｂ（ｘ）と、を独立に算出する。
【０１９４】
このとき、並列ＣＲＣ検査部１００４は、Ｍビット幅のＣＲＣ計算部により、ＣＲＣ値Ｒａ（ｘ）を算出する。更に、並列ＣＲＣ検査部１００４は、最終ワード有効データブロックＢ（ｘ）を、ｐ（ｐ＝Ｍ−Ｈ（ｋ））ビットだけ最下位ビット側にシフトし、且つ、シフトされたデータよりも最上位ビット側のすべてのビットに‘０’を設定したＭビット幅のデータ（信号）ｂ’（ｘ）を生成し、そのデータｂ’（ｘ）を上記Ｍビット幅のＣＲＣ計算部に入力することにより、ＣＲＣ計算結果Ｒｂ（ｘ）を算出する。
【０１９５】
そして、並列ＣＲＣ検査部１００４は、ＣＲＣ計算結果Ｒａ（ｘ）と、最終ワード有効ビット数Ｈ（ｋ）に対応する係数（剰余算出用係数）βＨ（ｋ）（ｘ）と、を乗算（ガロア体上の乗算）し、その結果Ｒ´ａ（ｘ）と上記ＣＲＣ計算結果Ｒｂ（ｘ）との加算（ガロア体上の加算、即ち、排他的論理和）を行う。これらの処理により、ＣＲＣ計算部の数を増やすことなく並列ＣＲＣ符号演算処理を行うことができる。なお、これらの処理は、式（１５）に基づく手順に従った処理である。
【０１９６】
図１１において、並列ＣＲＣ検査部１００４は、制御信号生成部（制御信号生成手段）１１１と、シフト部（シフト手段）１１２と、選択部（選択手段）１１３と、ＣＲＣ計算部（計算手段）１１４と、係数部１１５と、乗算部１１６と、加算部１１７と、を有する。なお、制御信号生成部１１１、シフト部１１２、選択部１１３及びＣＲＣ計算部１１４は、整数倍データブロック剰余算出手段（整数倍データブロック剰余算出工程）及び最終ワード有効データブロック剰余算出手段（最終ワード有効データブロック剰余算出工程）を構成している。また、係数部１１５、乗算部１１６及び加算部１１７は、入力データ剰余算出手段（入力データ剰余算出工程）を構成している。
【０１９７】
制御信号生成部１１１は、入力フレーム（入力データ）Ｎｋ´（ｘ）を先頭から順に並列ビット数Ｍのビットからなるワード毎にシフト部１１２へ出力する。制御信号生成部１１１は、ＳＯＦ信号と最終ワード有効ビット数Ｈ（ｋ）とから、制御信号であるＥＯＦ信号、シフト情報ｐ、有効データ区間信号ＶＤＴを生成する。
【０１９８】
そして、制御信号生成部１１１は、出力するデータが、フレームデータの最終ワード（Ｈ（ｋ）≠０）の場合、フレームの最後尾（末尾）を示すＥＯＦ信号を生成し、生成したＥＯＦ信号を選択部１１３へ出力する。更に、この場合、制御信号生成部１１１は、並列ビット数ＭからＨ（ｋ）を減じることによりシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））を生成し、生成したシフト情報ｐをシフト部１１２へ出力する。加えて、この場合、制御信号生成部１１１は、信号Ｈ（ｋ）を係数部１１５へ出力する。係数部１１５へ出力するＨ（ｘ）の値は、フレームのＥＯＦ位置での値であるため、１〜Ｍの値となる。
【０１９９】
なお、入力フレーム長が並列ビット数Ｍの整数倍である場合、制御信号生成部１１１は、最終ワード有効データ信号Ｈ（ｋ）＝Ｍを受信する。制御信号生成部１１１は、最終ワード有効データ信号Ｈ（ｋ）＝Ｍを受信すると、フレームの最後尾（末尾）を示すＥＯＦ信号を生成し、生成したＥＯＦ信号を選択部１１３へ出力する。更に、この場合、制御信号生成部１１１は、並列ビット数ＭからＨ（ｋ）を減じることによりシフト情報ｐ＝０（ｐ＝Ｍ−Ｈ（ｋ））を生成し、生成したシフト情報ｐをシフト部１１２へ出力する。加えて、この場合、制御信号生成部１１１は、受け取った信号Ｈ（ｋ）＝Ｍを係数部１１５へ出力する。
【０２００】
また、制御信号生成部１１１は、入力フレームの少なくとも一部を含むデータを出力している間、有効データ区間信号ＶＤＴを生成し、生成した有効データ区間信号ＶＤＴをＣＲＣ計算部１１４へ出力する。
【０２０１】
シフト部１１２は、制御信号生成部１１１から出力されたシフト情報ｐを入力した場合、制御信号生成部１１１から出力されたＭビット幅のデータを、該制御信号生成部１１１から出力されたシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））だけ最下位ビット側へシフトさせる。更に、この場合、シフト部１１２は、シフト処理によって発生した最上位ビット側のｐビット（即ち、制御信号生成部１１１から出力されたデータ以外のビット）に‘０’を設定する。
【０２０２】
これにより、ＣＲＣ計算部１１４における演算対象は、長さＨ（ｋ）ビットの最終ワード有効データブロックＢ（ｘ）（の各ビットを係数とする多項式）となる。従って、最終ワード有効ビット数Ｈ（ｋ）のビットからなる最終ワード有効データブロックＢ（ｘ）のＣＲＣ計算結果を、Ｍビット入力のＣＲＣ計算部１１４により処理することができる。
【０２０３】
選択部１１３は、制御信号生成部１１１から出力されたＥＯＦ信号を入力した場合、生成多項式Ｇ（ｘ）の次数ｄの‘０’からなるデータ（‘０’データ）をＣＲＣ計算部１１４へ出力し、一方、制御信号生成部１１１から出力されたＥＯＦ信号を入力しなかった場合、ＣＲＣ計算部１１４の１サイクル前の（前回の演算処理により出力された）ＣＲＣ値をＣＲＣ計算部１１４へ出力する。
【０２０４】
ＣＲＣ計算部１１４は、選択部１１３から出力される、ｄビット幅の１サイクル前のＣＲＣ値（または、‘０’データ）と、シフト部１１２から出力されるＭビット幅のデータと、に基づいて、並列ビット数Ｍのビットに対して演算処理を並列に行うことにより、その処理結果を表すデータ（計算結果）を出力する（ＣＲＣ計算を行う）。即ち、ＣＲＣ計算部１１４は、選択部１１３から出力されたデータにｘＭを乗算したデータと、シフト部１１２から出力されたデータと、を加算し、その加算値を生成多項式Ｇ（ｘ）により除算した剰余を計算結果として算出する。
【０２０５】
係数部１１５は、上記式（７）に基づいて算出されたＭ組の係数βＨ（ｋ）（ｘ）（Ｈ（ｋ）＝１〜Ｍ）を予め記憶している。係数部１１５は、制御信号生成部１１１から出力された信号Ｈ（ｋ）を入力した場合、その信号Ｈ（ｋ）に応じた係数βＨ（ｋ）（ｘ）を出力する。
【０２０６】
乗算部１１６は、係数部１１５から出力された係数βＨ（ｋ）（ｘ）と、ＣＲＣ計算部１１４から出力された整数倍データブロックＡ（ｘ）のＣＲＣ値Ｒａ（ｘ）と、の乗算（ガロア体上の乗算）処理を行い、その乗算結果Ｒ´ａ（ｘ）を加算部１１７へ出力する。
【０２０７】
加算部１１７は、乗算部１１６からの出力Ｒ´ａ（ｘ）と、最終ワード有効データブロックＢ（ｘ）のＣＲＣ値Ｒｂ（ｘ）と、の加算（ガロア体上の加算、即ち、排他的論理和）処理を行う。
【０２０８】
なお、上述したように、ＣＲＣ計算部１１４にＣＲＣ−３２が適用された場合、上記特許文献１の図４に示されるシリアルデータに対するＣＲＣ計算回路をＭビット幅化した回路がＣＲＣ計算部として使用される。このＣＲＣ計算回路を使用すれば、フレームのヘッダからＦＣＳまでをＣＲＣの計算対象とすることにより、フレームに誤りがない場合、ＣＲＣ計算結果（加算部１１７の出力）は‘０’となり、誤りがある場合、‘０’以外の値となる。
【０２０９】
次に、図１０に示したイーサネット・スイッチ及び図１１に示した並列ＣＲＣ検査部１００４（並列ＣＲＣ符号演算処理回路）の作動について説明する。
【０２１０】
図１２は、ＰＣＳ部１００２に入力されるフレーム、並びに、ＰＣＳ部１００２が出力するフレーム及び信号のタイミングチャートである。図１２の（ａ）は、ＰＣＳ部１００２に入力されるフレームを示している。図１２の（ｂ），（ｃ），（ｄ）は、それぞれＰＣＳ部１００２がヘッダ解析部１００３へ出力するフレーム、ＳＯＦ信号、信号Ｈ（ｋ）を示している。
【０２１１】
受信器１００１（図１０参照）は、フレームを受信すると、そのフレームをシリアルデータからパラレルデータに変換し、変換したフレームをＰＣＳ部１００２へ出力する。図１２の（ａ）は、このフレームを表している。
【０２１２】
ＰＣＳ部１００２は、受信器１００１から入力されたフレームを復号する。そして、ＰＣＳ部１００２は、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）と、を生成し、Ｍビット幅のフレームとともに、ヘッダ解析部１００３へ出力する（図１２の（ｂ）〜（ｄ）を参照）。具体的には、ＰＣＳ部１００２は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に最終ワード有効データブロックＢ（ｘ）のビット数を最終ワード有効データ信号Ｈ（ｋ）として出力する。
【０２１３】
なお、ＰＣＳ部１００２に入力されるフレームにおいて、ヘッダ先頭には「／ｓ／」（フレーム開始区切り）が存在し、フレームの終わり（末尾）には「／ｔ／」（フレーム終了区切り）が存在し、隣接するフレーム間にはＩＦＧ（Ｉｎｔｅｒ  Ｆｒａｍｅ  Ｇａｐ、フレーム間隔）が存在する。
【０２１４】
ＰＣＳ部１００２は、これらの「／ｓ／」（フレーム開始区切り）、「／ｔ／」（フレーム終了区切り）及びＩＦＧを‘０’に置き換えて、ヘッダ解析部１００３へ出力する。この結果、図１２の（ｂ）に示したように、フレーム開始区切り１２０１，１２０３、フレーム終了区切り１２０２，１２０４、及び、ＩＦＧ、は無効データとなる。
【０２１５】
ヘッダ解析部１００３は、フレームのヘッダを解析し、フレーム制御情報を生成し、フレーム制御情報をフレーム廃棄部１００５へ出力する。また、ヘッダ解析部１００３は、ＰＣＳ部１００２から出力されたフレーム、ＳＯＦ信号及びＨ（ｋ）信号を並列ＣＲＣ検査部１００４へ出力する。具体的には、ヘッダ解析部１００３は、フレームの最初のＭビットの出力時にＳＯＦ信号を出力し、フレームの末尾の最終ワード有効データブロックＢ（ｘ）の出力時に最終ワード有効データ信号Ｈ（ｋ）を出力する。
【０２１６】
並列ＣＲＣ検査部１００４は、ヘッダ解析部１００３から入力されるＳＯＦ信号及びＨ（ｋ）信号に応じて、入力されるフレーム（検査対象フレーム）のヘッダからＦＣＳまでのＣＲＣ値を算出する。並列ＣＲＣ検査部１００４は、算出したＣＲＣ値をＣＲＣ検査結果として、フレーム廃棄部１００５へ出力する。
【０２１７】
フレーム廃棄部１００５は、ヘッダ解析部１００３から出力されたフレーム制御情報と、並列ＣＲＣ検査部１００４から出力されたＣＲＣ検査結果と、に従って、フレームを廃棄する。また、フレーム廃棄部１００５は、ＣＲＣ検査結果が正常なフレームをフレーム制御情報とともにフレームバッファ部１００６へ出力する。
【０２１８】
フレームバッファ部１００６は、フレーム廃棄部１００５からフレームが入力されると、フレーム制御情報ともにバッファリングする。バッファリング後、フレームバッファ部１００６は、フレームとフレーム制御情報とをスイッチ部１０３へ出力する。
【０２１９】
スイッチ部１０３は、フレームバッファ部１００６から出力されたフレームを、フレーム制御情報に従い、ラインカード送信部へ転送する。スイッチ部１０３は、フレームをスイッチ部１０３に対して出力したラインカード受信部１０１１と組を構成するラインカード送信部１０２１へフレームを転送する。即ち、ここでは、フレーム制御情報は、転送先のラインカード送信部がラインカード送信部１０２１であることを表す情報である。なお、フレーム制御情報は、転送先のラインカード送信部がラインカード送信部１０２１以外のラインカード送信部であることを表す情報であってもよい。
【０２２０】
ラインカード送信部１０２１は、スイッチ部１０３から転送されたフレームをパラレルデータからシリアルデータに変換して送信する。
【０２２１】
次に、並列ＣＲＣ検査部１００４の詳細な作動について説明する。図１３は、並列ＣＲＣ検査部１００４の各構成要素の入力や出力を示すタイミングチャートである。図１３の（ａ）〜（ｃ）は、それぞれ制御信号生成部１１１に入力されるＳＯＦ信号、信号Ｈ（ｋ）及びフレームを表している。また、図１３の（ｄ）は、制御信号生成部１１１に入力されるフレームをワード（列）単位で示している。各ワードはＭビットである。図１３の（ｅ）〜（ｊ）は、それぞれシフト部１１２〜加算部１１７の出力を表している。図１３の（ｋ）〜（ｍ）は、それぞれ信号ＶＤＴ、ＥＯＦ信号及びシフト情報ｐを表している。
【０２２２】
図１３の（ａ）〜（ｄ）に示したように、制御信号生成部１１１には、ヘッダ解析部１００３からＣＲＣ検査対象となるＭビット幅の入力フレームと、フレーム先頭を示すＳＯＦ信号と、フレーム最後尾を示す最終ワード有効データ信号Ｈ（ｋ）と、が入力される。最終ワード有効データ信号Ｈ（ｋ）は、最終ワード有効データブロックＢ（ｘ）のビット数（最終ワード有効ビット数）を表す信号である。本実施形態で並列ＣＲＣ検査部１００４の入力フレームＮ´ｋ（ｘ）は、第１実施形態のＭＡＣ送信処理部２７に実装される並列ＣＲＣ符号演算処理部２３の入力フレームＮｋ（ｘ）と異なり、入力フレーム内にＦＣＳを含んでいる（図１３の（ｃ））。
【０２２３】
図１３の（ｄ）は、入力フレームをワード（１つのワードは、並列ビット数Ｍのビットからなる）毎に示した図である。第１ワードａ（ｘ）＃１〜第（ｗ−１）ワードａ（ｘ）＃（ｗ−１）が整数倍データブロックＡ（ｘ）であり、第ｗワードｂ（ｘ）が最終ワード有効データブロックＢ（ｘ）である。
【０２２４】
なお、図１３の（ｋ）〜（ｍ）は、制御信号生成部１１１が生成する信号である。図１３の（ｋ）は、有効データ区間信号ＶＤＴであり、ここでは、‘Ｈ’レベルが「有効」を表し、‘Ｌ’レベルが「無効」を表す。図１３の（ｌ）は、ＥＯＦ信号であり、ここでは、‘Ｈ’レベルがフレームの最終ワード（第ｗワード）であることを示し、‘Ｌ’レベルがフレームの最終ワード（第ｗワード）でないことを示す。
【０２２５】
図１３の（ａ）〜（ｄ）に示したように、フレーム及び信号（ＳＯＦ，Ｈ（ｋ））が入力されると、制御信号生成部１１１は、ＳＯＦ信号が入力されてからＨ（ｋ）信号が入力されるまでの間、有効データ区間信号ＶＤＴを「有効」を示す信号に設定し、その信号ＶＤＴをＣＲＣ計算部１１４へ出力する（図１３の（ｋ））。
【０２２６】
また、制御信号生成部１１１は、ＳＯＦ信号が入力されてからＨ（ｋ）信号が入力されるまでの間（第１ワードから第（ｗ−１）ワードまでの間）、ＥＯＦ信号を「Ｌ：Ｌｏｗ」を表す信号に設定し、そのＥＯＦ信号を選択部１１３へ出力する。
【０２２７】
シフト部１１２は、制御信号生成部１１１からのシフト情報ｐに応じて、Ｍビット幅の入力フレーム（図１３の（ｄ））のシフト処理を行う。ところで、Ｍビット幅の入力フレーム（図１３の（ｄ））の第１ワード〜第（ｗ−１）ワードは、最終ワード有効データブロックＢ（ｘ）を含まない。従って、シフト部１１２は、シフト処理を行うことなく、ＣＲＣ計算部１１４へ第１ワードａ（ｘ）＃１〜第（ｗ−１）ワードａ（ｘ）＃（ｗ−１）を順に出力する。
【０２２８】
選択部１１３は、図１３の（ｌ）のＥＯＦ信号に応じて、図１３の（ｆ）に示したように、第２ワード〜第（ｗ−１）ワードまでの間、前回のワードに対する演算処理にてＣＲＣ計算部１１４が出力したデータＲａ（ｘ）＃１〜Ｒａ（ｘ）＃（ｗ−２）を該ＣＲＣ計算部１１４へ出力する。
【０２２９】
ＣＲＣ計算部１１４は、シフト部１１２が出力する入力フレームａ（ｘ）＃１〜ａ（ｘ）＃（ｗ−１）と、選択部１１３が出力するＲａ（ｘ）＃１〜Ｒａ（ｘ）＃（ｗ−２）と、から、整数倍データブロックＡ（ｘ）に対するＣＲＣ計算を行い、図１３の（ｇ）に示したように、第ｗワードにてＣＲＣ計算結果（整数倍データブロック剰余）Ｒａ（ｘ）を出力する。
【０２３０】
制御信号生成部１１１は、最終ワード有効データ信号Ｈ（ｋ）（Ｈ（ｋ）＞０）を受信すると、ＥＯＦ信号を‘Ｈ’レベルに設定し（図１３の（ｌ）の第ｗワード）、そのＥＯＦ信号を選択部１１３へ出力する。更に、制御信号生成部１１１は、図１３の（ｍ）に示したように、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））をシフト部１１２へ出力する。
【０２３１】
シフト部１１２には、Ｂ（ｘ）を含むＭビットのデータｂ（ｘ）（図１３の（ｄ）の第ｗワード）が入力される。シフト部１１２は、Ｍビット幅の入力フレームｂ（ｘ）（図１４の（ａ））を受け取ると、そのデータを制御信号生成部１１１からのシフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））だけ最下位ビット側へシフトする。更に、シフト部１１２は、シフトにより発生した最上位ビット側のｐビット（シフトしたデータｂ（ｘ）よりも最上位ビット側のすべてのビット）に、ＣＲＣ値に影響を与えない‘０’を設定する。これにより、シフト部１１２は、Ｍビット幅のデータｂ´（ｘ）（図１４の（ｂ））を生成し、生成したデータｂ´（ｘ）をＣＲＣ計算部１１４へ出力する（図１３の（ｅ）の第ｗワード）。
【０２３２】
なお、シフト部１１２は、第１実施形態に係るシフト部１２と同様の構成を有し、シフト部１２と同様に作動する。
【０２３３】
選択部１１３は、制御信号生成部１１１からのＥＯＦ信号に応じて、‘０’データをＣＲＣ計算部１１４へ出力する（図１３の（ｆ）の第ｗワード）。ＣＲＣ計算部１１４は、Ｍビット幅のＣＲＣ計算を行う。ＣＲＣ計算部１１４は、選択部１１３から出力された‘０’データを用いて、シフト部１１２から出力されたデータｂ´（ｘ）に含まれるＢ（ｘ）に対するＣＲＣ計算を行うことにより、ＣＲＣ値（最終ワード有効データブロック剰余）Ｒｂ（ｘ）を出力する（図１３の（ｇ）の第（ｗ＋１）ワード）。
【０２３４】
係数部１１５は、制御信号生成部１１１から出力された最終ワード有効ビット数Ｈ（ｋ）に応じて、その最終ワード有効ビット数Ｈ（ｋ）に対応する係数（剰余算出用係数）βＨ（ｋ）（ｘ）を乗算部１１６へ出力する（図１３の（ｈ）の第ｗワード）。
【０２３５】
なお、係数部１１５は、第１実施形態に係る係数部１５と同様の構成を有し、係数部１５と同様に作動する。
【０２３６】
乗算部１１６は、係数部１１５から出力されたβＨ（ｋ）（ｘ）（図１３の（ｈ）の第ｗワード）と、ＣＲＣ計算部１１４から出力されたＲａ（ｘ）と、の乗算（ガロア体上の乗算）処理を行い、その結果Ｒ´ａ（ｘ）を加算部１１７へ出力する（図１３の（ｉ）の第（ｗ＋１）ワード）。
【０２３７】
なお、乗算部１１６は、第１実施形態に係る乗算部１６と同様の構成を有し、乗算部１６と同様に作動する。
【０２３８】
加算部１１７は、乗算部１１６から出力されたＲ´ａ（ｘ）（図１３の（ｉ）の第（ｗ＋１）ワード）と、ＣＲＣ計算部１１４から出力されたＲｂ（ｘ）と、の排他的論理和を算出し、入力フレームに対するＣＲＣ検査結果（入力データ剰余）Ｃ（ｘ）を、Ｍビット幅のフレーム、ＳＯＦ信号及び信号Ｈ（ｋ）とともに出力する（図１３の（ｊ）の第（ｗ＋２）ワード）。これらは、フレーム廃棄部１００５へ出力される。
【０２３９】
以上、説明したように、本発明に係る第２実施形態によれば、整数倍データブロックＡ（ｘ）を構成するデータを、並列ビット数Ｍずつ並列に処理することにより、適切に整数倍データブロック剰余Ｒａ（ｘ）を算出することができる。この結果、入力データ剰余Ｒ（ｘ）を低遅延で算出することができる。
【０２４０】
また、上記第２実施形態によれば、並列ビット数Ｍが異なる複数の計算部を備えなくても、最終ワード有効データブロック剰余Ｒｂ（ｘ）を適切に算出することができる。即ち、ＣＲＣ符号演算処理回路の規模を小さくすることができる。さらに、上記第２実施形態によれば、複数のＣＲＣ計算部を縦続接続しなくても良いため、入力データ剰余Ｒ（ｘ）を低遅延で算出することができる。
【０２４１】
更に、上記第２実施形態によれば、並列ビット数Ｍのビットに対して並列に処理を行うことにより、適切に最終ワード有効データブロック剰余Ｒｂ（ｘ）を算出することができる。従って、入力データ剰余Ｒ（ｘ）をより一層低遅延で算出することができる。
【０２４２】
加えて、上記第２実施形態によれば、並列ビット数Ｍのビットに対して並列に処理を行う１つの計算部（ＣＲＣ計算部１１４）を用いて、最終ワード有効データブロック剰余Ｒｂ（ｘ）及び整数倍データブロック剰余Ｒａ（ｘ）の両方を算出することができる。この結果、回路の規模をより一層小さくすることができる。
【０２４３】
なお、上記第２実施形態においては、ＣＲＣ計算部１１４は、多項式のうちの最も次数が高い項に対応するビットが最上位ビットに位置するデータを処理するように構成されていたが、多項式のうちの最も次数が低い項に対応するビットが最上位ビットに位置するデータを処理するように構成されていてもよい。更に、この場合、シフト部１１２は、制御信号生成部１１１から出力されたＭビット幅の信号を、シフト情報ｐ（ｐ＝Ｍ−Ｈ（ｋ））だけ最上位ビット側へシフトさせ、且つ、シフト処理によって発生した最下位ビット側のすべてのビット（ｐビット）に‘０’を設定するように構成される。
【０２４４】
また、上記第２実施形態においては、制御信号生成部１１１は、フレーム先頭信号であるＳＯＦ信号、及び、最終ワード有効ビット数Ｈ（ｋ）から、フレーム最後尾信号であるＥＯＦ信号、及び、シフト情報ｐを生成するように構成されていたが、ＳＯＦ信号及び信号Ｈ（ｋ）以外の信号（例えば、入力Ｍビット毎のビットイネーブル信号）から生成するように構成されていてもよい。
【０２４５】
更に、上記第２実施形態は、制御信号生成部１１１が１ビット単位のシフト情報ｐを生成し、シフト部１１２が１ビット単位のシフト処理を行なうように構成されていたが、制御信号生成部１１１が複数のビット（例えば、バイト）単位のシフト情報ｐを生成し、シフト部１１２が複数のビット単位のシフト処理を行なうように構成されていてもよい。
【０２４６】
加えて、上記第２実施形態においては、入力フレーム長が並列ビット数Ｍの整数倍である場合、整数倍データブロック剰余Ｒａと最終ワード有効データブロック剰余Ｒｂとを独立に算出するとともに、算出した整数倍データブロック剰余Ｒａ及び最終ワード有効データブロック剰余Ｒｂに基づいて入力データ剰余Ｒ（ｘ）を算出するように構成されていたが、整数倍データブロック剰余Ｒａを入力データ剰余Ｒ（ｘ）として算出するように構成されていてもよい。
【０２４７】
加えて、上記第２実施形態は、巡回符号としてＣＲＣ（巡回冗長検査）符号を用いるように構成されていたが、ハミング符号及びＢＣＨ符号等の他の巡回符号を用いるように構成されていてもよい。また、並列ＣＲＣ検査部１００４は、プログラムに従って動作するＣＰＵによって実現されていてもよい。
【０２４８】
更に、並列ＣＲＣ検査部１００４は、ネットワーク・インタフェース・カードの受信側のＣＲＣ検査回路として用いられてもよい。また、第１実施形態に係る並列ＣＲＣ符号演算処理部２３は、ラインカード送信部１０２１〜１０２Ｃが備えるＣＲＣ生成回路として用いられてもよい。
【０２４９】
なお、本発明は上記各実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。
【０２５０】
また、上記各実施形態は、
任意長のデータ系列Ｎｋ（ｘ）に対して、任意の生成多項式Ｇ（ｘ）による除算演算を、任意の並列度Ｍ（Ｍは２以上の正の整数）で行い、その剰余を算出するＣＲＣ符号演算処理方式であって、
前記データ系列Ｎｋ（ｘ）を、最終ワード有効データブロックＢ（ｘ）を除く、Ｍの整数倍の長さを有する整数倍データブロックＡ（ｘ）と、長さＭ−ｐ（ｐは０以上Ｍ−１未満の正の整数）の最終ワード有効データブロックＢ（ｘ）とに分割し、
前記整数倍データブロックＡ（ｘ）を生成多項式Ｇ（ｘ）で除算し、
前記最終ワード有効データブロックＢ（ｘ）を生成多項式Ｇ（ｘ）で除算し、
該Ａ（ｘ）のＧ（ｘ）による剰余結果と、係数との乗算を行い、
該乗算結果と、該Ｂ（ｘ）のＧ（ｘ）による剰余結果との排他的論和演算を行うことで、データ系列Ｎｋ（ｘ）に対する生成多項式Ｇ（ｘ）による剰余を算出することを特徴とするＣＲＣ符号演算処理方式、
を用いている、と言うことができる。
【０２５１】
また、上記各実施形態は、
任意長のデータ系列Ｎｋ（ｘ）に対して、次数ｄの任意の生成多項式Ｇ（ｘ）による除算演算を、任意の並列度Ｍビット（Ｍは２以上の正の整数）で行い、その剰余を算出するＣＲＣ符号生成演算処理回路であって、
前記データ系列Ｎｋ（ｘ）を、最終ワード有効データブロックＢ（ｘ）を除く、Ｍビットの整数倍の長さを有するデータブロックＡ（ｘ）と、Ｍ−ｐビット幅（ｐは０以上Ｍ−１未満の正の整数）の最終ワード有効データブロックＢ（ｘ）とに分割する手段と、
前記最終ワード有効データブロックＢ（ｘ）を下位ビット側にシフトし、その上位ビット側にｐビットの‘０’を付加して、Ｍビット幅のデータブロックを生成する手段と、
前記のＭビット幅のシフトデータと、前記整数倍データブロックＡ（ｘ）の剰余演算を行う手段と、
前記整数倍データブロックＡ（ｘ）に対する剰余計算結果と、Ｍ−ｐビットに対応する係数との乗算計算を行う手段と、
前記ｄビット幅の乗算結果と、ｄビット幅の前記最終ワード有効データブロックＢ（ｘ）に対する剰余計算結果との排他的論理和を行う手段を備えることを特徴とする、ＣＲＣ符号生成演算処理回路、
を用いている、と言うこともできる。
【０２５２】
また、上記第２実施形態は、
検査用ＣＲＣ符号を含む任意長のデータ系列Ｎｋ（ｘ）に対して、次数ｄの任意の生成多項式Ｇ（ｘ）による除算演算を、任意の並列度Ｍビット（Ｍは２以上の正の整数）で行い、Ｎｋ（ｘ）の誤りを検出するＣＲＣ符号検査演算処理回路であって、
検査用ＣＲＣ符号を含む任意長のデータ系列Ｎｋ（ｘ）を、最終ワード有効データブロックＢ（ｘ）を除く、Ｍの整数倍の長さを有する整数倍データブロックＡ（ｘ）と、Ｍ−ｐビット幅（ｐは０以上Ｍ−１未満の正の整数）の最終ワード有効データブロックＢ（ｘ）とに分割する手段と、
前記最終ワード有効データブロックＢ（ｘ）を下位ビット側にシフトし、その上位ビット側にｐビットの‘０’を付加して、Ｍビット幅のデータブロックを生成する手段と、
前記のＭビット幅のシフトデータと、前記整数倍データブロックＡ（ｘ）のＣＲＣ計算を行う手段と、
前記整数倍データブロックＡ（ｘ）に対するＣＲＣ計算結果と、Ｍ−ｐビットに対応する係数との乗算計算を行う手段と、
前記ｄビット幅の乗算結果と、ｄビット幅の前記最終ワード有効データブロックＢ（ｘ）に対するＣＲＣ計算結果との排他的論理和を行う手段を備えることを特徴とする、並列ＣＲＣ符号検査演算処理回路、
を用いている、と言うことができる。
【産業上の利用可能性】
【０２５３】
本発明は、巡回符号を用いる通信装置等に適用可能である。
【図面の簡単な説明】
【０２５４】
【図１】本発明の第１実施形態に係るネットワーク・インタフェース・カードを示したブロック図である。
【図２】図１に示した並列ＣＲＣ符号演算処理部を示したブロック図である。
【図３】図１に示した並列ＣＲＣ符号演算処理部及びＦＣＳ付与部の入力信号及び出力信号を示したタイムチャートである。
【図４】並列ＣＲＣ符号演算処理部の各構成要素の入力や出力を示したタイムチャートである。
【図５】図２に示したシフト部によるシフト処理を示した説明図である。
【図６】図２に示したシフト部を示したブロック図である。
【図７】図２に示した係数部を示したブロック図である。
【図８】図２に示した乗算部を示したブロック図である。
【図９】図８に示したＡＮＤ部を示したブロック図である。
【図１０】本発明の第２実施形態に係るイーサネット・スイッチを示したブロック図である。
【図１１】図１０に示した並列ＣＲＣ検査部を示したブロック図である。
【図１２】図１０に示した並列ＣＲＣ検査部及びＰＣＳ部の入力信号及び出力信号を示したタイムチャートである。
【図１３】並列ＣＲＣ検査部の各構成要素の入力や出力を示したタイムチャートである。
【図１４】図１１に示したシフト部によるシフト処理を示した説明図である。
【図１５】並列ＣＲＣ符号演算処理回路の一例を示したブロック図である。
【図１６】図１５に示した並列ＣＲＣ符号演算処理回路における、入力フレームと、各ＣＲＣ計算部における計算範囲と、を示した説明図である。
【符号の説明】
【０２５５】
１１、１１１  制御信号生成部
１２、１１２  シフト部
１３、１１３  選択部
１４、１１４、１５０２〜１５０５  ＣＲＣ計算部
１５、１１５  係数部
１６、１１６  乗算部
１７、１１７  加算部
２１          バス終端部
２２          ヘッダ付与部
２３          並列ＣＲＣ符号演算処理部
２４          ＦＣＳ付与部
２５          ＰＣＳ部
２６          送信器
２７          ＭＡＣ送信処理部
２８          ネットワーク・インタフェース・カード
３１、３２    ＦＣＳ
６１１〜６１Ｍ  セレクタ回路
６２１〜６２Ｍ  制御部
７１１        セレクタ回路
７２１        係数テーブル
７３０〜７３Ｍ  係数
８１１〜８１ｄ、９０１  ＡＮＤ部
８２１        ｍｏｄ計算部
１００１      受信器
１００２      ＰＣＳ部
１００３      ヘッダ解析部
１００４      並列ＣＲＣ計算部
１００５      フレーム廃棄部
１００６      フレームバッファ
１０１１〜１０１Ｃ  ラインカード受信部
１０２１〜１０２Ｃ  ラインカード送信部
１０３        スイッチ部
１５０１      制御部
１５０６〜１５０８  データ選択部
１５０９〜１５１１  結果選択部
【図１】
2010068429.tif 000003
【図２】
2010068429.tif 000004
【図３】
2010068429.tif 000005
【図４】
2010068429.tif 000006
【図５】
2010068429.tif 000007
【図６】
2010068429.tif 000008
【図７】
2010068429.tif 000009
【図８】
2010068429.tif 000010
【図９】
2010068429.tif 000011
【図１０】
2010068429.tif 000012
【図１１】
2010068429.tif 000013
【図１２】
2010068429.tif 000014
【図１３】
2010068429.tif 000015
【図１４】
2010068429.tif 000016
【図１５】
2010068429.tif 000017
【図１６】
2010068429.tif 000018