本発明は、フレームのフレーム長情報を求めずに巡回符号を求める演算を行う。あるいは、フレーム長情報を求めずに巡回符号を検査する演算を行う。以下、フレーム長情報を求めずにこれらの演算を行えることを示す。また、以下の説明では、巡回符号としてCRC値を用いる場合を例にして説明する。
まず、フレーム長情報を求めずCRC値を求められることを示す。長さnビットの入力フレームをN(x)とする。フレームの長さnビットは任意である。並列幅をMビットとする。Mは2以上の正の整数である。また、フレームN(x)における並列幅Mビットの整数倍ビットブロックをA(x)と記す。また、入力フレームN(x)における端数ビットブロックをB(x)と記す。整数倍ビットブロックA(x)は、フレームN(x)における先頭から並列幅Mの整数倍分の長さのビットブロックである。端数ビットブロックB(x)は、フレームN(x)における整数倍ビットブロックA(x)以外のMビット未満のビットブロックである。整数倍ビットブロックA(x)の後に端数ビットブロックB(x)が続く。フレームN(x)を整数倍ビットブロックA(x)と端数ビットブロックB(x)に分けると、フレームN(x)は式(1)のように表すことができる。なお、以下の各式において「+」は排他的論理和を示し、「mod」はモジュロ2演算を示す。また、H(k)はk番目の入力フレーム(kは任意の正の整数)の端数ビットブロックB(x)の長さ(ビット長)である。また、G(x)は生成多項式を示し、dはG(x)の次数である。xは、多次式を表すための変数である。
N(x) = A(x) ・ xH(k) + B(x) 式(1)
また、整数倍ビットブロックA(x)のCRC計算結果をR(x)とすると、R(x)は式(2)のように表すことができる。
R(x) = [ A(x) ・ xd ] mod G(x) 式(2)
また、フレームN(x)のCRC演算結果をR´´´(x)とすると、R´´´(x)は、式(3)のように表すことができる。
R´´´(x)={ N(x) ・ xd } mod G(x) 式(3)
ここで、式(1)と式(3)とから、R´´´(x)を式(4)のように表せる。
R´´´(x)={ [ A(x) ・ xd ・ xH(k) ] +[ B(x) ・ xd ] } mod G(x) 式(4)
さらに、式(4)は、式(2)により、以下に示す式(5)のように変形できる。
R´´´(x)={ [ R(x) ・ xH(k) ] + [ B(x) ・ xd ] } mod G(x) 式(5)
式(5)は、さらに以下に示す式(6)のように変形できる。
R´´´(x)={ [ R(x) ・ xH(k)−d + B(x) ] ・ xd } mod G(x) 式(6)
しかし、式(6)が表すようにブロックを構成すると、H(k)<dの条件で、R(x)の一部が消えてしまい、正しいCRC演算結果を得ることができない。そこで、R(x)を式(7)のように展開し、R(x)の式における次数が「d−1」から「d−H(k)」までの部分をR1とし、次数が「d−H(k)−1」から「0」までの部分をR2とすると、以下に示す式(8)のようになる。
R(x)=r(d−1)・xd−1+・・・+r(d−H(k))・xd−H(k)+r(d−H(k)−1)・xd−H(k)−1+・・・r(0)・x0 式(7)
R(x)=R1(x)+R2(x) 式(8)
式(8)および式(6)から、フレームN(x)のCRC演算結果をR´´´(x)は以下に示す式(9)のように表される。
R´´´(x)={ [ R1(x)・ xH(k)−d + B(x) ]・ xd + R2(x)・ xH(k) } mod G(x) 式(9)
ここで、式(9)における[ R2(x)・ xH(k) ]をR´´(x)とする。R´´(x)の長さ(ビット長)はdビットであり、G(x)の次数と等しい。よって、R´´(x)は、mod G(x)の外に出すことができる。
また、[ R1(x)・ xH(k)−d + B(x) ]の長さはH(k)ビットであり、この加算の結果をB´(x)とおくと、式(9)は以下の式(10)のように表すことができる。
R´´´(x)={ [ B´(x) ] ・ xd } mod G(x)+R´´(x)
式(10)
式(10)の{ [ B´(x) ] ・ xd } mod G(x)をR´(x)とおくと、R´´´(x)は、式(11)のように表される。
R´´´(x)=R´(x)+R´´(x) 式(11)
式(11)で表されるように、巡回符号生成用のCRC符号演算処理ブロックを構成することができる。なお、H(k)>dの条件では、R2(x)は存在しないため、R´(x)の値がR´´´(x)の値となる。
式(10)および式(11)に基づいてCRC値(R´´´(x))を求めれば、フレームN(x)の長さn(フレーム長情報)を求めなくてもR´´´(x)を算出することができ、図18に例示する構成のようにフレームのフレーム長情報を求めるためのバッファリングや図19に例示するようなデータの並べ替えを行わずに済む。また、式(10)および式(11)に基づいてCRC値(R´´´(x))を求める演算は、B´(x)を求めるための排他的論和を求める手段と、長さH(k)ビットのB´(x)のCRC計算をMビット入力のCRC計算回路で計算するためにp(p=M−H(k))ビットシフトする手段と、R´´(x)を得るためにR(x)をq(q=H(k))ビットシフトする手段と、R´(x)とR´´(x)の排他的論理和を求める手段と、CRC計算を行う手段とによって実現可能である。これらの手段によって、端数ビットブロックのビット長H(k)ビット、生成多項式の次数dビットを用いて、N(x)のCRC値(R´´´(x))を求めることができる。
次に、フレーム長情報を求めずCRC値の検査を行えることを示す。CRC値の検査が行われる入力フレームN´(x)が、CRC値(R´´´(x))を含む符号系列であり、CRC演算対象範囲を、そのフレームの先頭からCRC値までとする。このとき、式(5)におけるB(x)がCRC値(R´´´(x))を含むとすると、式(5)は、式(12)のように表すことができる。
C(x)={ [ R(x) ・ xH(k)−d ] + [ B(x) ] } mod G(x) 式(12)
式(12)のC(x)は演算結果兼検査結果であり、値がC(x)=‘0’の場合、入力フレームデータに誤りがないといえる。式(12)の[ R(x) ・ xH(k)−d ]とB(x)の長さはH(k)ビットであり、式(12)の右辺の加算結果をB´´(x)とおくと式(12)は以下のように表せる。
C(x)={ B´´(x) } mod G(x) 式(13)
式(13)に基づいてC(x)の値を検査すれば、フレームのフレーム長情報を求めるためのバッファリングや図19に例示するようなデータの並べ替えを行わずに済む。また、B´´(x)を求めるための排他的論和を求める手段と、長さH(k)ビットのB´´(x)のCRC計算をMビット入力のCRC計算回路で計算するためにビットシフトを行う手段と、CRC計算を行う手段によって、N(x)に付与されたCRC値の検査を行うことができる。
以下、本発明の実施形態を図面を参照して説明する。以下に示す各実施形態でも、巡回符号がCRC値である場合を例にして説明する。
実施形態1.
第1の実施形態では、巡回符号を生成する演算を行う並列巡回符号生成装置を示す。図1は、本発明が適用されたネットワークインタフェースカード(NIC:Network Interface Card)の送信機能の構成例を示すブロック図である。図1に示すネットワークインタフェースカード2−8は、巡回符号を生成する演算を行う並列巡回符号生成装置を含んでいる。ネットワークインタフェースカードは、サーバ装置やコンピュータ装置等に搭載され、フレーム送受信処理を実施するカードである。
本発明が適用されたネットワークインタフェースカード2−8は、バス終端部2−1と、MAC送信処理部2−7と、PCS(Physical Coding Sublayer)部2−5と、送信器2−6とを備える。
MAC送信処理部2−7は、送信MACフレーム生成処理を行う。MAC送信処理部2−7は、ヘッダ付与部2−2と、並列CRC演算処理部2−3と、FCS付与部2−4とを備える。
図1に例示するネットワークインタフェースカード2−8において、バス終端部2−1は、サーバ接続バスによって、サーバ(図示せず。)内のCPUバスに接続されている。また、送信器2−6は、フレームを外部に送信するための伝送路に接続されている。ネットワークインタフェースカード2−8は、サーバから入力されるフレームに対して、フレームヘッダとFCS(Frame Check Sequence)とを付与し、伝送路へ送信する。
バス終端部2−1は、サーバ(図示せず。)から送られてくるフレームを受信する。このフレームは、Mビット幅のフレームである。すなわち、Mビットを1ワードとして1ワード毎に受け渡されるフレームである。バス終端部2−1は、サーバから送られてくるフレームから、フレーム先頭を示すSOF信号と、フレーム最後尾を示す最終ワード有効データ信号H(k)を生成し、Mビット幅のフレームとともにヘッダ付与部2−2に出力する。なお、バス終端部2−1は、例えば、フレームの先頭のMビットを出力するときにSOF信号を出力する。また、バス終端部2−1は、例えば、フレーム末尾の端数ビットブロックB(x)を出力するときに、最終ワード有効データ信号H(k)を出力する。また、最終ワード有効データ信号H(k)として、端数ビットブロックB(x)のビット長が出力される。
ヘッダ付与部2−2は、バス終端部2−1の出力フレームに対してフレームヘッダを付与し、フレームヘッダが追加されたフレームと、SOFと、H(k)とを並列CRC演算処理部2−3に出力する。フレームヘッダの付与に伴いフレームの長さが増加し、その結果、端数ビットブロックB(x)も変化する。ヘッダ付与部2−2は、最終ワード有効データ信号H(k)の値を、フレームヘッダ付与後の端数ビットブロックB(x)のビット長に更新してH(k)を出力する。
並列CRC演算処理部2−3は、ヘッダ付与部2−2が出力するMビット幅フレームに対するCRC符号を演算する。
FCS付与部2−4は、並列CRC演算処理部2−3によって演算されたCRC値をFCS値としてフレーム最後尾に付与する。FCS値が付与されることで、フレームの長さが増加し、その結果、端数ビットブロックB(x)も変化する。FCS付与部2−4は、最終ワード有効データ信号H(k)の値を、FCS値付与後の端数ビットブロックB(x)のビット長に更新してH(k)を出力する。
PCS部2−5は、FCS付与部2−4から送られるMビット幅のフレームを、符号化する。ここでの符号化とは、8B/10B変換や64B/66B変換などの伝送路送出のための符号化である。
送信器2−6は、PCS部2−5が出力するデータをパラレルシリアル変換し、伝送路に出力する。
並列CRC演算処理部2−3は、本発明の並列巡回符号生成装置である。図2は、本発明の第1の実施形態を示すブロック図であり、図2を参照して、並列CRC演算処理部2−3について説明する。
まず、並列幅Mビットのビット列における最上位ビットおよび最下位ビットについて説明する。フレームの端数ビットブロックB(x)は、B(x)を構成するビットデータの順に並列幅Mビットのビット列の端から順に格納される。このMビットのビット列の両端部のうち、B(x)を構成するビットデータが格納されている方の端部を最上位とし、もう一方の端部を最下位とする。
整数倍ビットブロックA(x)について演算された巡回符号(CRC値)は、dビットで表され、各ビットは式(7)に示す多項式の各項に対応する。整数倍ビットブロックA(x)について演算された巡回符号については、多項式(式(7))の最高次の項に対応するビットを最上位ビットとし、最低次の項(0乗の項)に対応するビットを最下位ビットとする。
並列CRC演算処理部2−3は、CRC演算対象である入力フレームk(kは任意の正の整数)のビット長nがMの整数倍でないとき、入力フレームを並列幅Mビットの整数倍ビットブロックA(x)と、端数ビットブロックB(x)とに分ける。なお、kは、フレームの順番を表す。並列CRC演算処理部2−3は、整数倍ビットブロックA(x)のCRC演算結果R(x)と、ビット長がH(k)である端数ビットブロックB(x)の排他的論理和を計算する。並列CRC演算処理部2−3は、R(x)とB(x)との排他的論理和の計算結果を最下位ビット側にpビット分シフトし、上位側のpビットに‘0’を付加した合計Mビット幅の信号を作成する。ここで、p=M−H(k)である。並列CRC演算処理部2−3は、このMビット幅の信号に対してCRC演算を行い、dビット幅のCRC計算結果R´(x)を算出する。さらに、並列CRC演算処理部2−3は、R(x)を上位ビット側にqビット分シフトし、下位側のqビットに‘0’を付加した合計dビット分のデータR´´(x)を計算し、上記のCRC計算結果R´(x)とR´´(x)との排他的論理和を計算する。ここで、q=H(k)である。並列CRC演算処理部2−3は、これらの処理によって、フレームのビット長を求めるためのバッファリングを行うことなく並列CRC符号演算処理を実現している。この処理によって、式(11)のように表されるCRC値(R´´´(x))が求められる。
図2に示すように、並列CRC演算処理部2−3は、演算制御部11と、第一排他的論理和部12と、第一シフト部13と、選択部14と、CRC計算部15と、第二シフト部16と、第二排他的論理和部17と備える。
演算制御部11は、SOF信号と端数ビット数H(k)から、k番目の入力フレームの整数倍ビットブロックA(x)と端数ビットブロックB(x)を識別し、選択部14、第一排他的論理和部12へ出力する。
なお、端数ビットブロックB(x)のビット数を表すH(k)は、端数ビットブロックB(x)とともに送られる最終ワード有効データ情報である。
また、演算制御部11は、ビットのシフト量を示すシフト情報p,qを生成し、シフト情報pを第一シフト部13に出力し、シフト情報qを第二シフト部16に出力する。p=M−H(k)であり、q=H(k)である。演算制御部11は、M−H(k)を計算することによりシフト情報pを生成すればよい。また、H(k)の値をシフト情報qとすればよい。
演算制御部11は、フレームに属するビット列が入力されていることを示す有効データ区間信号VDTを生成し、フレームのビット列の入力中(すなわちSOFが入力されてからH(k)が入力されるまでの間)VDTをCRC計算部15に出力する。
また、演算制御部11は、整数倍ビットブロックA(x)と端数ビットブロックB(x)のいずれを出力しているのかを示すデータ領域選択信号ABSELを選択部14およびCRC計算部15に出力する。
入力フレームのフレーム長がMビットの整数倍である場合、演算制御部11は、整数倍ビットブロックA(x)のみを出力し、端数ビットブロックB(x)は出力しない。
第一排他的論理和部12は、CRC計算部15によって求められる整数倍ビットブロックA(x)のCRC値R(x)と端数ビットブロックB(x)の最上位ビットをそろえて、整数倍ビットブロックA(x)のCRC値R(x)と端数ビットブロックB(x)との排他的論理和を求める。
第一シフト部13は、第一排他的論理和部12によって求められた排他的論理和演算の結果を、MビットのCRC計算部15で処理するため、その排他的論理和演算の結果をp(p=M−H(k))ビット分、最下位ビット側にシフトさせる。第一シフト部13は、シフトによってデータがなくなることになる最上位側のpビットに対して‘0’を設定する。第一シフト部13は、シフト処理を行った結果を選択部14に出力する。CRC計算部115での演算対象は、シフト処理で設定された‘0’によってCRC値の演算結果は変化しないため、H(k)ビットとなる。
選択部14は、演算制御部11で生成されたデータ領域選択信号ABSELに従い、入力フレームのMビット整数倍ビットブロックA(x)と、第一シフト部13の出力の切り替え処理を行う。すなわち、データ領域選択信号ABSELが整数倍ビットブロックA(x)の出力を示している場合、整数倍ビットブロックA(x)をCRC計算部15に出力し、データ領域選択信号ABSELが端数ビットブロックB(x)の出力を示している場合、第一シフト部13の出力データをCRC計算部15に出力する。入力フレーム長がMビットの整数倍の場合、端数ビットは存在せず、第一シフト部13の出力が選択されることはない。
CRC計算部15は、選択部14が出力するMビット幅データに対するCRC計算を行う。本CRC計算部には、xdを乗算する回路を含むCRC計算回路が使用される。
第二シフト部16は、入力フレームのMビット整数倍ビットブロックA(x)に対するCRC計算(15)の出力R(x)を、上位側にq(q=H(k))ビットシフトし、最下位側のqビットに‘0’を割り当てる。これは、「H(k)<d」となる場合に、第一シフト部13で削除されてしまうR(x)の一部分を得るために必要な処理である。なお、R(x)は、入力フレームのMビット整数倍ビットブロックA(x)に対するCRC計算部15の出力(CRC値)である。第二シフト部16は、qビットのシフト処理を行い、最下位側のqビットに0を割り当てた結果を第二排他的論理和部17に出力する。
第二排他的論理和部17では、入力フレームのCRC値を得るため、第二シフト部16の出力と、第一シフト部13の出力に対するCRC計算部15の出力との排他的論理和の処理を行う。
次に、図1に示すネットワークインタフェースカードおよび図2に示す並列CRC演算処理部2−3(並列巡回符号生成装置)の動作について説明する。
図3は、ヘッダ付与部2−2および並列CRC演算処理部2−3の入力信号および出力信号のタイミングチャートである。図3(a),(b),(c)は、それぞれヘッダ付与部2−2から出力されて並列CRC演算処理部2−3に入力されるフレーム、SOF、H(k)を示している。同様に、図3(d),(e),(f)は、それぞれFCS付与部204が出力するフレーム、SOF、H(k)を示している。
バス終端部2−1(図1参照)が、上位層からフレームを受信すると、フレームの先頭を示すSOF信号と、フレーム最後尾を示す最終ワード有効データ信号H(k)を生成し、Mビット幅のフレームとともに、ヘッダ付与部2−2へ出力する。バス終端部2−1は、フレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。
ヘッダ付与部2−2は、バス終端部2−1から入力されたフレームにヘッダを付与し、ヘッダ付与後のフレームを並列CRC演算処理回路2−3に出力する。また、SOFと、更新後のH(k)を並列CRC演算処理回路2−3に出力する(図3(a),(b),(c)参照)。ヘッダ付与部2−2は、ヘッダ付与後のフレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。ヘッダを付与することで端数ビットブロックB(x)のビット数が変わるので、ヘッダ付与後の端数ビットブロックB(x)のビット数をH(k)として出力する。
並列CRC演算処理部2−3は、ヘッダ付与部2−2が出力するフレーム(図3(a)では模式的に太線で表している。)のCRC値を演算し、その結果を、FCS付与部2−4へ出力する。また、並列CRC演算処理部2−3は、ヘッダ付与部2−2から入力されたフレーム、SOF、H(k)をFCS付与部2−4に出力する。
FCS付与部2−4は、並列CRC演算処理部2−3で演算されたCRC値をFCSとして、並列CRC演算処理部2−3から入力されたフレームの末尾に付与する(図3(d)に示すFCS3−1,FCS3−2参照)。そして、FCS付与部2−4は、FCSを付与したフレーム、SOF、H(k)をPCS部2−5に出力する(図3(d),(e),(f)参照)。FCS付与部2−4は、FCS付与後のフレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。FCSを付与することで端数ビットブロックB(x)のビット数が変わるので、FCS付与後の端数ビットブロックB(x)のビット数をH(k)として出力する。
PCS部2−5は、FCS付与部2−4からのフレームを符号化し、送信器2−6へ出力する。
送信器2−6は、PCS部2−5からのMビット幅のデータをパラレルシリアル変換し、伝送路へ送信する。
次に、並列CRC演算処理部2−3の動作を説明する。図4は、並列CRC演算処理回路2−3の各構成要素の入力や出力を示すタイミングチャートである。図4(a),(b),(c)は、それぞれ演算制御部11に入力されるSOF、H(k)、フレームを表している。また、図4(d)は、演算制御部11に入力されるフレームをワード(列)単位で示している。各ワードはMビットである。図4(e),(f)は、それぞれ選択部14、CRC計算部15の出力を表している。図4(g)〜(j)は、それぞれVDT、ABSEL、シフト情報p、シフト情報qを表している。
図4(a)〜(d)に示すように、演算制御部11には、ヘッダ付与部2−2(図1参照)から、CRC演算対象となるMビット幅のフレームと、フレームの先頭を示すSOF信号と、データ最後尾の端数ビット数を示す最終ワード有効データ信号H(k)が入力される。
演算制御部11に入力されるフレームのビット長が並列幅Mビットの整数倍でない場合、そのフレームには、Mビットの整数倍ビットブロックA(x)と、ビット長がH(k)ビットである端数ビットブロックB(x)が含まれている。1番目からw−1番目までのワード列のデータ(‘a(x)#1’〜‘a(x)#(w−1)’)全体が整数倍ビットブロックA(x)である。なお、A(x)おける、各ワード列のデータ‘a(x)#1’〜‘a(x)#(w−1)’は、それぞれMビット幅のデータ列であり、‘#1’〜‘#(w−1)’は、それぞれ該フレームデータ内でのワード列の番号を示している。また、w番目のワード列のデータ‘b(x)’は、端数ビットブロックB(x)を含むビット列である。
図4(a)〜(d)に示すようにフレームと信号(SOF,H(k))が入力されると、演算制御部11は、SOFが入力されてからH(k)が入力されるまでの間、有効データ区間信号VDTを「有効(フレームに属するビット列が入力されていること)」を示す状態としてCRC計算部15に出力する(図4(g)参照)。図4(g)では、‘H(ハイ)’レベルは有効を示し、‘L(ロー)’レベルは無効(フレームに属するビット列が入力されていないこと)を示している。
また、演算制御部11は、入力されたフレームに含まれる整数倍ビットブロックA(x)と端数ビットブロックB(x)を、選択部14と第一排他的論理和部12に出力する。また、整数倍ビットブロックA(x)である1番目からw−1番目までの各ワード列の各ビット列が入力されてそのビット列を出力している間、演算制御部11は、データ領域選択信号ABSELを「A(x)側」として、選択部14およびCRC計算部15に出力する。端数ビットブロックB(x)を含むビット列が入力されてそのビット列を出力する時には、演算制御部11は、データ領域選択信号ABSELを「B(x)側」として、選択部14およびCRC計算部15に出力する。図4(h)では、‘H’レベルは「A(x)側」を示し、‘L’レベルは「B(x)側」を示している。
選択部14は、図4(h)に示すデータ領域選択信号ABSELに従い、ABSELが「A(x)側」である時には、演算制御部11から入力される1番目からw−1番目までの各ワード列のデータ‘a(x)#1’〜‘a(x)#(w−1)’をCRC計算部15へ出力する。また、ABSELが「B(x)側」である時には、第一シフト部13が出力するデータ(R(x)とB(x)との排他的論理和を下位側にpビットシフトしたデータ)をCRC計算部15へ出力する。
CRC計算部15は、選択部14が出力する‘a(x)#1’〜‘a(x)#(w−1)’の整数倍ビットブロックA(x)に対するCRC 計算を行い、整数倍ビットブロックA(x)のCRC値であるR(x)を出力する(図4(f)のwワード列参照)。
ここで、CRC計算部15が整数倍ビットブロックA(x)のCRC値(R(x))を計算する方法について説明する。CRC計算部15は、Mビット幅のデータの各ビットを係数とするM−1次多項式を次数dの任意の生成多項式G(x)で除算し、剰余を求める。生成多項式G(x)の次数dは予め定められている。整数倍ビットブロックA(x)のビット長はMの整数倍(w−1倍)であるので、CRC計算部15は上記のようにMビットのデータに関して剰余を求める計算を、整数倍ビットブロックA(x)の最初のMビット‘a(x)#1’から最後のMビット‘a(x)#(w−1)’までについてそれぞれ行う。CRC計算部15は、最初のMビット‘a(x)#1’について剰余を求めたならば、その剰余を保持する。次のMビット‘a(x)#2’が入力されると、CRC計算部15は、保持していた剰余を表すデータ(dビット)を上位側に(M−d)ビットシフトし、次のMビット‘a(x)#2’との排他的論理和を求め、その排他的論理和が表すM−1次多項式を生成多項式G(x)で除算したときの剰余を求め、保持する。そして、CRC計算部15は、以降のMビットのデータについても同様の処理を繰り返す。剰余を表すデータの各ビットはd−1次の多項式の係数に相当し、上位側に(M−d)ビットシフトするとは、高次の項に対応するビット側に(M−d)ビットシフトすることである。CRC計算部15は、最後のMビット‘a(x)#(w−1)’が入力されると、保持していた剰余を表すデータを上位側に(M−d)ビットシフトし、最後のMビット‘a(x)#(w−1)’ との排他的論理和を求める。そして、CRC計算部15は、その排他的論理和が表すM−1次多項式を生成多項式G(x)で除算したときの剰余を求め、その求めた剰余を整数倍ビットブロックA(x)のCRC値(R(x))として算出する。
図4(e),(f)を参照して具体的に説明する。CRC計算部15は、整数倍ビットブロックA(x)の1ワード目‘a(x)#1’について、各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。図4(f)に示す‘R(x)#1’が、その保持されたデータである。続いて、CRC計算部15は、保持していた‘R(x)#1’を上位側に(M−d)ビットシフトし、整数倍ビットブロックA(x)の、2ワード目‘a(x)#2’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。図4(f)に示す‘R(x)#2’が、その保持されたデータである。同様に、CRC計算部15は、保持していた‘R(x)#2’を上位側に(M−d)ビットシフトし、整数倍ビットブロックA(x)の、3ワード目‘a(x)#3’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。CRC計算部15は、この処理をw−1ワード目まで行うことでR(x)を算出する。w−1ワード目に関して処理を行うときに保持していた‘R(x)#(w−2)’を上位側に(M−d)ビットシフトシフトした結果とw−1ワード目‘a(x)#(w−1)’との排他的論理和の各ビットを係数とする多項式を、生成多項式G(x)で除算したときの剰余がR(x)である。
上記のような処理でR(x)を求める処理を式で示す。1ワード目‘a(x)#1’および2ワード目‘a(x)#2’とからなるデータ列をN1(x)とする、N1(x)のCRC値‘R(x)#2’を求めるとする。このとき、N1(x)は、式(14)のように表される。
N1(x)=a(x)#1・xM+a(x)#2 式(14)
N1(x)のCRC値‘R(x)#2’は、式(15)のように表される。
R(x)#2=[N1(x)・xd] mod G(x) 式(15)
式(14)を用いて、式(15)は、以下の式(16)のように変形できる。
R(x)#2={[a(x)#1・xM+a(x)#2]・xd} mod G(x)
式(16)
また、以下の式(17)が成立し、式(16)および式(17)から式(18)を導くことができる。式(18)は、式(19)のように変形することができる。
R(x)#1=[a(x)#1・xd] mod G(x) 式(17)
R(x)#2={R(x)#1・xM+a(x)#2・xd} mod G(x)
式(18)
R(x)#2={[R(x)#1・x(M−d)+a(x)#2]・xd} mod G(x)
式(19)
上記の式が、保持していたデータを(M−d)ビットシフトシフトした結果と次のMビットとの排他的論理和に対する除算により剰余を求める処理を示している。
また、CRC計算部15は、選択部14が出力する‘b´(x)’については、その各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余をR´(x)とする。R´(x)を求めるときには、保持しているデータに対するビットシフトおよび排他的論理和演算は行わない。
CRC計算部15は、第一排他的論理和部12にR(x)を出力する。また、演算制御部11は、w−1番目のワード列に続いて、最終ワード有効データ信号H(k)と端数ビットブロックB(x)を含むビット列b(x)をヘッダ付与部2−2から受信し、そのビット列b(x)を第一排他的論理和部12に出力する。従って、第一排他的論理和部12には、R(x)と、端数ビットブロックB(x)を含むビット列b(x)とが入力される。
また、演算制御部11は、最終ワード有効データ信号H(k)を受信すると、データ領域選択信号ABSELを「B(x)側」として選択部14へ出力する。また、演算制御部11は、シフト情報p(p=M−H(k))を第一シフト部13へ出力し、シフト情報q(q=H(k))を第二シフト部16へ出力する(図4(h)〜(j)参照)。
第一排他的論理和部12は、整数倍ビットブロックA(x)に対するCRC計算部15の出力(A(x)のCRC値)であるR(x)と端数ビットブロックB(x)との排他的論理和を計算する。R(x)の長さはdビットである。図5は、R(x)とB(x)との排他的論理和を求める演算を示す説明図である。図5(a)は、ビット列b(x)を示している。ビット列b(x)は、長さH(k)ビットの端数ビットブロックB(x)を含んでいる。図5(b)は、図4(f)のwワード列に示す整数倍ビットブロックA(x)のCRC計算値R(x)である。第一排他的論理和部12は、B(x)とR(x)との排他的論理和の計算結果であるB´(x)(長さH(k)ビット)を含むMビットのデータ列(図5(c)参照)を第一シフト部13に出力する。第一排他的論理和部12は、最上位ビットをあわせて、B(x)を含むMビットのデータ列とR(x)との排他的論理和を計算し、B´(x)を含むMビットのデータ列を求め、そのデータ列を第一シフト部13に出力すればよい。
図6は、第一シフト部13によるシフト処理を示す説明図である。第一シフト部13は、第一排他的論理和部12の出力(図6(a)参照)に含まれるB´(x)に対するCRC計算をMビット入力のCRC計算部15で行えるようにするため、演算制御部11からのシフト情報p(p=M−H(k))に従い、第一排他的論理和部12の出力データをpビット分、最下位ビット側へシフトする。なお、第一シフト部13は、シフトによってデータがなくなることになる最上位側のpビットには、CRC演算値に影響を与えない‘0’を設定する。シフト処理および上位pビットに対する‘0’の設定を行ったデータ列をb´(x)と記す。図6(b)は、このデータ列b´(x)を示している。データ列b´(x)のビット長はMビットである。第一シフト部13は、データ列b´(x)を選択部14に出力する。
このとき、演算制御部11はデータ領域選択信号ABSELを「B(x)側」としているので、選択部14は、第一シフト部13から入力されるデータ列b´(x)をCRC計算部15に出力する(図4(e)のw列参照)。
図7は、第一シフト部13の構成例を示すブロック図である。第一シフト部13は、セレクタ回路と制御部との組をM組備える。図7では、1番目からM番目までの各セレクタ回路をそれぞれ符号‘81−1’〜‘81−M’で表している。同様に、1番目からM番目までの各制御部をそれぞれ符号‘82−1’〜‘82−M’で表している。各セレクタ回路81−1〜81−Mには、Mビットのデータと1ビットの‘0’の値が入力される。Mビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ1〜入力ビットデータMと記す。各セレクタ回路81−1〜81−Mは、入力ビットデータ1から入力ビットデータMのうちのいずれか、または入力される‘0’を選択して出力する。各セレクタ回路81−1〜81−Mが出力する出力データは1ビットのデータである。
セレクタ回路と制御部の組は、それぞれ順番に最上位から最下位までの各ビットに対応している。そして、各制御部82−1〜82−Mはそれぞれ、組をなすセレクタ回路に対して、対応する入力ビットデータよりもpビット上位の入力ビットデータの出力を指示し、pビット上位の入力ビットデータがなければ‘0’を出力することを指示する信号を出力する。セレクタ回路81−1〜81−Mは、制御部から送られるこの信号に応じて、1ビットのデータを出力する。
セレクタ回路81−1〜81−Mから1ビットずつ出力されるビットのビット列がシフト処理後のデータとなる。
次に具体例を挙げて、第一シフト部13の動作を説明する。M=3であり、第一シフト部13は、セレクタ回路81−1〜81−3と、制御部82−1〜82−3とを備えているとする。第一シフト部13に入力されるMビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ1〜入力ビットデータ3とする。また、セレクタ回路81−1〜81−3が出力する各ビットを、それぞれ出力ビットデータ1〜出力ビットデータ3とする。出力ビットデータ1は、シフト後における最上位ビットのデータであり、出力ビットデータ3は、シフト後における最下位ビットのデータである。
例えば、シフト情報p=1であるとする。この場合、以下のように動作する。
制御部82−1は、シフト情報p=1に基づいて、‘0’を出力する信号をセレクタ回路81−1へ出力する。セレクタ回路81−1は、制御部82−1からの信号に従い‘0’を選択し、出力ビットデータ1として出力する。
制御部82−2は、シフト情報p=1に基づいて、入力ビットデータ1を出力する信号をセレクタ回路81−2へ出力する。セレクタ回路81−2は、制御部(82−2)からの信号に従い入力ビットデータ1を選択し、出力ビットデータ2として出力する。
制御部82−3は、シフト情報p=1に基づいて、入力ビットデータ2を出力する信号をセレクタ回路81−3へ出力する。セレクタ回路81−3は、制御部82−3からの信号に従い入力ビットデータ2を選択し、出力ビットデータ3として出力する。
上記の動作により、第一シフト部13の出力ビットデータ1として‘0’が出力され、出力ビットデータ2として入力ビットデータ1が出力され、出力ビットデータ3として入力ビットデータ2が出力される。このように、シフト情報p=1により、3ビットの入力データが1ビット最下位ビット側にシフトされる。
また、例えば、シフト情報p=2であるとする。この場合、以下のように動作する。
制御部82−1は、シフト情報p=2に基づいて、‘0’を出力する信号をセレクタ回路81−1へ出力する。セレクタ回路81−1は、制御部82−1からの信号に従い‘0’を選択し、出力ビットデータ1として出力する。
制御部82−2は、シフト情報p=2に基づいて、‘0’を出力する信号をセレクタ回路81−2へ出力する。セレクタ回路81−2は、制御部82−2からの信号に従い‘0’を選択し、出力ビットデータ2として出力する。
制御部82−3は、シフト情報p=2に基づいて、入力ビットデータ1を出力する信号をセレクタ回路81−3へ出力する。セレクタ回路81−3は、制御部82−3からの信号に従い入力ビットデータ1を選択し、出力ビットデータ3として出力する。
上記の動作により、第一シフト部13の出力ビットデータ1として‘0’が出力され、、出力ビットデータ2として‘0’が出力され、出力ビットデータ3として入力ビットデータ1が出力される。このように、シフト情報p=2により、入力ビットデータが、3ビットの入力データが2ビット最下位ビット側にシフトされる。
ここではM=3の場合を例示して説明したが、Mの値が他の値であっても同様である。
CRC計算部15は、Mビット幅のCRC計算を行うブロックである。そして、ABSELが「B(x)側」であるとき、CRC計算部15は、選択部14から入力されるデータ列b´(x)(最下位側にpビットシフトされたB´(x)を含むデータ列)に対してCRC計算を行い、B´ (x)のCRC値R´(x)を出力する(図4(f)のw+1列参照)。既に説明したように、CRC計算部15は、b´(x)の各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余をR´(x)とする。
図8は、第二シフト部16によるシフト処理を示す説明図である。第二シフト部16には、シフト情報q(q=H(k))が演算制御部11から入力される(図4(j)参照)。第二シフト部16は、このシフト情報qに従い、整数倍ビットブロックA(x)に対するCRC計算部15の出力R(x)を、図8に示すように、最上位ビット側へqビットシフト処理し、長さdビットのデータR´´(x)を出力する。図8(a)では、整数倍ビットブロックA(x)のCRC値R(x)を、式(7)を使用して示している。整数倍ビットブロックA(x)のCRC値R(x)は、シフト情報qに応じて最上位側にqビットシフトされると、式(7)における「r(d−H(k)−1)・xd−H(k)−1」から「r(0)・x0」までを表すビットが残る。この「r(d−H(k)−1)・xd−H(k)−1」から「r(0)・x0」までの部分は、式(8)におけるR2(x)と一致し、第二シフト部16でのシフト結果は、式(11)におけるR´´(x)と一致する。なお、第二シフト部16は、シフトによってデータがデータがなくなることになる最下位側のqビットに対して‘0’を設定する。上記処理は、「H(k)<d」となる場合に、第一シフト部13で削除されてしまうMビット整数倍ビットブロックA(x)のCRC計算結果R(x)の一部分を得るために必要な処理である。
図9は、第二シフト部16の構成例を示すブロック図である。第二シフト部16は、セレクタ回路と制御部との組をd組備える。図9では、1番目からd番目までの各セレクタ回路をそれぞれ符号‘91−1’〜‘91−d’で表している。同様に、1番目からd番目までの各制御部をそれぞれ符号‘92−1’〜‘92−d’で表している。各セレクタ回路92−1〜92−dには、dビットのデータと1ビットの‘0’の値が入力される。dビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ1〜入力ビットデータdと記す。各セレクタ回路91−1〜91−dは、入力ビットデータ1から入力ビットデータdのうちのいずれか、または入力される‘0’を選択して出力する。各セレクタ回路91−1〜91−dが出力する出力データは1ビットのデータである。
セレクタ回路と制御回路の組は、それぞれ順番に最上位から最下位までの各ビットに対応している。そして、各制御部92−1〜92−dはそれぞれ、組をなすセレクタ回路に対して、対応する入力ビットデータよりもqビット下位の入力ビットデータの出力を指示し、qビット下位の入力ビットデータがなければ‘0’を出力することを指示する信号を出力する。セレクタ回路91−1〜91−dは、制御部から送られるこの信号に応じて、1ビットのデータを出力する。
セレクタ回路91−1〜91−dから1ビットずつ出力されるビットのビット列がシフト処理後のデータとなる。
次に具体例を挙げて、第二シフト部16の動作を説明する。ここでは、d=3であり、第二シフト部16は、セレクタ回路91−1〜91−3と、制御部92−1〜92−3とを備えているとする。第二シフト部16に入力されるdビットのデータにおける最上位から最下位までの各ビットを入力ビットデータ1〜入力ビットデータ3とする。また、セレクタ回路91−1〜91−3が出力する各ビットを、それぞれ出力ビットデータ1〜出力ビットデータ3とする。出力ビットデータ1は、シフト後における最上位ビットのデータであり、出力ビットデータ3は、シフト後における最下位ビットのデータである。
例えば、シフト情報q=1であるとする。この場合、以下のように動作する。
制御部92−1は、シフト情報q=1に基づいて、入力ビットデータ2を出力する信号をセレクタ回路91−1へ出力する。セレクタ回路91−1は、制御部92−1からの信号に従い入力ビットデータ2を選択し、出力ビットデータ1として出力する。
制御部92−2は、シフト情報q=1に基づいて、入力ビットデータ3を出力する信号をセレクタ回路91−2へ出力する。セレクタ回路91−2は、制御部92−2からの信号に従い入力ビットデータ3を選択し、出力ビットデータ2として出力する。
制御部92−3は、シフト情報q=1に基づいて、‘0’を出力する信号をセレクタ回路91−3へ出力する。セレクタ回路91−3は、制御部92−3からの信号に従い‘0’を選択し、出力ビットデータ3として出力する。
上記の動作により、第二シフト部16の出力ビットデータ1として入力ビットデータ2が出力され、出力ビットデータ2として入力ビットデータ3が出力され、出力ビットデータ3として‘0’が出力される。このように、シフト情報q=1により、3ビットの入力データが1ビット最上位ビット側にシフトされる。
また、例えば、シフト情報q=2であるとする。この場合、以下のように動作する。
制御部92−1は、シフト情報q=2に基づいて、入力ビットデータ3を出力する信号をセレクタ回路91−1へ出力する。セレクタ回路91−1は、制御部92−1からの信号に従い入力ビットデータ3を選択し、出力ビットデータ1として出力する。
制御部92−2は、シフト情報q=2に基づいて、‘0’を出力する信号をセレクタ回路91−2へ出力する。セレクタ回路91−2は、制御部92−2からの信号に従い‘0’を選択し、出力ビットデータ2として出力する。
制御部92−3は、シフト情報q=2に基づいて、‘0’を出力する信号をセレクタ回路91−3へ出力する。セレクタ回路91−3は、制御部92−3からの信号に従い‘0’を選択し、出力ビットデータ3として出力する。
上記の動作により、第二シフト部16の出力ビットデータとして入力ビットデータ3が出力され、出力ビットデータ2として‘0’が出力され、出力ビットデータ3として‘0’が出力される。このように、シフト情報q=2により、3ビットの入力データが2ビット最上位ビット側にシフトされる。
第二排他的論理和部17は、第二シフト部16の出力R´´(x)と、第一シフト部13の出力B´(x)に対するCRC計算部15の出力R´(x)との排他的論理和を計算する。第二シフト部16の出力R´´(x)は、整数倍ビットブロックA(x)のCRC値R(x)をqビット最上位側にシフトしたデータである。また、出力B´(x)に対するCRC計算部15の出力R´(x)は、端数ビットブロックB(x)とR(x)との排他的論理和を最下位側にpビットシフトしたデータのCRC値である。
第二排他的論理和部17によって計算されるR´´(x)とR´(x)との排他的論理和は、並列CRC演算処理部2−3に入力されるフレームに対するCRC値である。第二排他的論理和部17は、R´´(x)とR´(x)との排他的論理和を計算することによって得たCRC値を、Mビット幅のフレーム(入力されたフレーム)、SOF、H(k)とともにFCS付与部2−4に出力する。
並列CRC演算処理部(並列巡回符号生成装置)2−3が備える各構成要素(演算制御部11、第一排他的論理和部12、第一シフト部13、選択部14、CRC計算部15、第二シフト部16、第二排他的論理和部17)は、それぞれ別個の回路であってもよい。また、並列CRC演算処理部2−3が備える各構成要素は、プログラム(並列巡回符号生成プログラム)に従って動作するCPUによって実現されていてもよい。例えば、CPUが、予め記憶装置に記憶された並列巡回符号生成プログラムを読み込み、その並列巡回符号生成プログラムに従って、演算制御部11、第一排他的論理和部12、第一シフト部13、選択部14、CRC計算部15、第二シフト部16、第二排他的論理和部17として動作してもよい。
次に、本実施形態の効果について説明する。
本実施形態によれば、第一排他的論理和部12が、入力フレームのMビットの整数倍ビットブロックのCRC値と、端数ビットブロックとの排他的論理和を計算し、第一シフト部13が、その排他的論理和を最下位ビット側にp(p=M−H(k))ビットシフトする。そして、CRC計算部15は、そのシフト後のデータのCRC値(R´(x))を計算する。また、第二シフト部16が、可変長フレームのMの整数倍ビットブロックのCRC値を最上位側にqビットシフトし、第二排他的論理和部17が、そのデータとR´(x)との排他的論理和を計算することによって、入力フレームのCRC値を計算する。このように計算することにより、可変長の入力フレームのフレーム長によらず、フレーム長を求めるためのバッファリングを行わずに、入力フレームのCRC値を計算することができる。そして、その結果、巡回符号演算における処理遅延および回路の規模の増大を防止することができ、広帯域化の制約を緩和することができる。
図18に示す構成と本発明を比較すると、図18に示す構成では、1フレーム分以上のデータのバッファリングが必要となり、その分、処理遅延が増大していた。本発明では、数クロック分の処理遅延のみでCRC値を生成することができる。遅延特性が重要なサーバ製品や高性能コンピューティング製品領域における通信技術、とくにネットワークインタフェースカードに本発明を適用すれば、超低遅延のCRC生成が可能となる。
また、本発明によれば、バッファリングの必要がないので、バッファリングのための構成要素を設ける必要がなく、回路規模を削減することができる。よって、ルータ装置やLANスイッチ装置をはじめとする通信装置や、サーバ製品、高性能コンピューティング装置を小型化することが可能である。また、バッファリングを必要としないため、将来、イーサネットに代わるフレーム長を拡大した通信技術の実現が可能である。
上記の説明では、図2に示す並列CRC演算処理部2−3(並列巡回符号生成装置)がビット単位のシフトを行ってフレームのCRC値を求める場合を示したが、シフト処理におけるシフト量は1ビット単位でなくてもよい。演算制御部11がバイト単位等のように複数ビット単位でシフト情報p、シフト情報qを生成し、第一シフト部13および第二シフト部16が複数ビット単位でのシフト処理を行ってもよい。
また、上記の実施形態では、並列CRC演算処理部2−3がCRC符号(CRC値)を求めるCRC符号演算を行う場合を例にして説明しているが、入力情報列を生成多項式G(x)で除算して求められるハミング符号やBCH符号等のような、CRC符号以外の巡回符号の生成にも本発明を適用することができる。その場合には、CRC値を計算するCRC計算部15の代わりに、他の巡回符号(ハミング符号やBCH符号等)を計算する手段を備えていればよい。CRC値以外の巡回符号を計算する場合であっても、シフト処理によって、入力フレームのビット長を求めるためのバッファリングを行わなくて済むという効果を得ることができ、処理遅延および回路規模の増大を防止し、また、広帯域化の制約を緩和できる。
実施形態2.
第2の実施形態では、巡回符号を検査する演算を行う並列巡回符号検査装置を示す。図10は、本発明が適用されたイーサネットスイッチの構成例を示すブロック図である。図10に示すイーサネットスイッチは、ラインカード受信部101−1〜101−Cと、スイッチ部103と、ラインカード送信部102−1〜102−Cとを備える。一つのラインカード受信部と、一つのラインカード送信部とが対となっていて、そのラインカード受信部とラインカード送信部との組の数をCとする。Cは1以上の任意の正の整数である。図10におてラインカード受信部を示す符号‘101−1’〜‘101−C’におけるハイフンの後の数字は、ラインカード受信部とラインカード送信部との組を表している。ラインカード送信部を示す符号‘102−1’〜‘102−C’においても同様である。任意の組のインカード受信部とラインカード送信部は、符号‘101−c’, ‘102−c’で表される。ただし、cは、1以上C以下の正の整数である。対になるラインカード受信部101−cおよびラインカード送信部102−cは、例えば1つのラインカードとして実装される。そして、C個のラインカードがそれぞれポート毎に存在し、スイッチ部103に接続される。
各ラインカード受信部101−1〜101−Cは、フレームの受信、解析、検査、廃棄を行い、転送可能フレームをスイッチ部103へ転送する。以下、ラインカード受信部101−1を例にして構成および動作を説明するが、他のラインカード受信部の構成および動作についても同様である。
ラインカード受信部101−1は、受信器100−1と、PCS部100−2と、ヘッダ解析部100−3と、並列CRC検査部100−4と、フレーム廃棄部100−5と、フレームバッファ部100−6とを備える。
ラインカード受信部101−1内において、受信器100−1は、PCS部100−2に接続される。受信器100−1は、外部からフレームを受信すると、そのフレームをシリアルデータからパラレルデータに変換し、PCS部100−2に出力する。
PCS部100−2は、受信器100−1とヘッダ解析部100−3に接続される。PCS部100−2は、8B/10B変換や64B/66B変換符号により符号化されているフレームを復号し、Mビット幅のフレームをヘッダ解析部100−3に出力する。例えば、10ギガビット・イーサネットが採用されている場合には、64B/66B変換によってフレームを復号する。また、PCS部100−2は、フレーム先頭を示すSOF信号と、フレーム最後尾を示す最終ワード有効データ信号H(k)を生成し、ビット幅のフレームとともにヘッダ解析部100−3に出力する。PCS部100−2は、例えば、フレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。
ヘッダ解析部100−3は、PCS部100−2と、並列CRC検査部100−4と、フレーム廃棄部100−5に接続される。ヘッダ解析部100−3は、PCS部100−2から入力されるフレームのヘッダの内容を解析し、フレーム制御情報を出力する。また、ヘッダ解析部100−3は、フレームを並列CRC検査部100−4に出力する。このとき、ヘッダ解析部100−3は、例えば、フレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。
並列CRC検査部100−4は、ヘッダ解析部100−3とフレーム廃棄部100−5に接続される。並列CRC検査部100−4は、フレームの誤りを検出するために、フレームのヘッダからフレームFCSまでのCRC演算を行う。そして、並列CRC検査部100−4は、CRC検査結果(誤り検出の結果)をフレーム廃棄部100−5に出力する。
フレーム廃棄部100−5は、ヘッダ解析部100−3と、並列CRC検査部100−4と、フレームバッファ部100−6に接続される。フレーム廃棄部100−5は、ヘッダ解析部100−3からのフレーム制御情報と、並列CRC検査部100−4からのCRC検査結果とに応じて、並列CRC検査部100−4から入力されるフレームを廃棄する。また、フレーム廃棄部100−5は、CRC検査結果が正常であるフレームとその制御情報をフレームバッファ部100−6に出力する。
フレームバッファ部100−6は、フレーム廃棄部100−5とスイッチ部103に接続される。フレームバッファ部100−6は、スイッチ部103に送信するフレームとその制御情報をバッファリングする。
スイッチ部103は、ラインカード受信部101−1から入力されるフレームを、フレーム制御情報に従って、ラインカード受信部101−1と対になるラインカード送信部102−1に転送する。
ラインカード送信部102−1は、スイッチ部103から転送されるフレームをシリアルデータに変換して送信する。他のラインカード送信部も同様である。
並列CRC検査部100は、本発明の並列巡回符号検査装置である。図11は、本発明の第2実施形態を示すブロック図であり、図11を参照して、並列CRC検査部100について説明する。
並列CRC検査部100−4には、Mビット幅の入力フレーム(FCS値を含む)に対する誤り検出を行う。FCS値は巡回符号であり、FCS値を含むフレームのビット長は任意である。並列CRC検査部100−4は、入力されるフレームのフレーム長が並列幅Mビットの整数倍でない場合に、整数倍ビットブロックA(x)、端数ビットブロックB(x)、端数ビットブロックの長さH(k)を検出し、また入力データの有効データ区間信号VDTを生成する。
並列CRC検査部100−4は、整数倍ビットブロックA(x)のCRC演算結果R(x)と端数ビットブロックB(x)の最上位ビットをあわせて、R(x)とB(x)とのMビットの排他的論理和を求める。
並列CRC検査部100−4は、その排他的論理和を最下位ビット側にp(p=M−H(k))ビットシフトさせる。R(x)とB(x)との排他的論理和B´´(x)の長さはH(k)ビットであり、Mビット幅入力のCRC計算部でB´´(x)のCRC計算を行うために、このシフト処理を行う。
また、並列CRC検査部100−4は、CRC計算部によりCRC計算を行う。
また、並列CRC検査部100−4は、上記のシフト処理の結果と整数倍ビットブロックA(x)とを切り替えて、CRC計算部に入力する。
具体的に、並列CRC検査部100−4の構成を説明する。図11に示すように、並列CRC検査部100−4は、演算制御部111と、排他的論理和部112と、シフト部113と、選択部114と、CRC計算部115とを備える。
演算制御部111は、Mビット幅に並列化されたCRC検査対象フレームについて整数倍ビットブロックA(x)と端数ビットブロックB(x)を識別し、選択部114、排他的論理和部112に出力する。
また、演算制御部111には、端数ビットブロックB(x)の長さを示すH(k)が入力され、演算制御部111は、そのH(k)の値を検出する。さらに、演算制御部111は、ビットのシフト量を示すシフト情報pを生成し、シフト情報pをシフト部113に出力する。演算制御部111は、M−H(k)を計算することによりシフト情報pを生成すればよい。
さらに、演算制御部111は、フレームに属するビット列が入力されていることを示す有効データ区間信号VDTを生成し、フレームのビット列の入力中(すなわちSOFが入力されてからH(k)が入力されるまでの間)VDTをCRC計算部115に出力する。
また、演算制御部111は、第1の実施形態における演算制御部11と同様に、整数倍ビットブロックA(x)と端数ビットブロックB(x)のいずれを出力しているのかを示すデータ領域選択信号ABSELを選択部114およびCRC計算部115に出力する。
入力フレームのフレーム長がMビットの整数倍である場合、演算制御部111は、整数倍ビットブロックA(x)のみを出力し、端数ビットブロックB(x)は出力しない。
演算制御部111は、第1の実施形態における演算制御部11と同様に、上記の処理を行えばよい。
排他的論理和部112は、CRC計算部115によって求められる整数倍ビットブロックA(x)のCRC値R(x)と端数ビットブロックB(x)の最上位ビットをそろえて、整数倍ビットブロックA(x)のCRC値R(x)と端数ビットブロックB(x)との排他的論理和を求める。
シフト部113は、排他的論理和部112で計算された排他的論理和の結果を、Mビット幅のCRC計算部115で処理するため、その排他的論理和の計算結果をp(p=M−H(k))ビット分、最下位ビット側にシフトさせる。シフト部113は、シフトによってデータがなくなることになる最上位側のpビットに対して‘0’を設定する。シフト部113は、シフト処理を行った結果を選択部114に出力する。CRC計算部115での演算対象は、シフト処理で設定された‘0’よってCRC値の演算結果は変化しないため、H(k)ビットとなる。
選択部114は、演算制御部111で生成されたデータ領域選択信号ABSELに従い、入力フレームの整数倍ビットブロックA(x)と、シフト部113の出力の切り替え処理を行う。すなわち、データ領域選択信号ABSELが整数倍ビットブロックA(x)の出力を示している場合、整数倍ビットブロックA(x)をCRC計算部115に出力し、データ領域選択信号ABSELが端数ビットブロックB(x)の出力を示している場合、シフト部113の出力データをCRC計算部115に出力する。入力フレーム長がMの整数倍の場合、端数ビットは存在せず、シフト部113の出力が選択されることはない。
CRC計算部115は、選択部114が出力するMビット幅データに対するCRC計算を行う。本CRC計算部には、xdを乗算する回路を含まないCRC計算回路が使用される。例えば、CRC−32が本計算部に適用された場合、特許文献1の図4に示されるシリアルデータに対するCRC計算回路をMビット幅化した回路を使用できる。このCRC計算回路を使用すれば、フレームのヘッダからFCSまでをCRCの計算対象とした場合、フレームに誤りがないときにCRC計算結果は‘0’となり、誤りがあるときにRCR計算結果は‘0’以外の値となる。
次に、図10に示すイーサネットスイッチおよび図11に示す並列CRC検査部100−4(並列巡回符号検査装置)の動作について説明する。
図12は、PCS部100−2に入力されるフレームおよびPCS部100−2が出力するフレームや信号のタイミングチャートである。図12(a)は、PCS部100−2に入力されるフレームを示している。図12(b),(c),(d)は、それぞれPCS部100−2がヘッダ解析部100−3に出力するフレーム、SOF、H(k)を示している。
受信器100−1(図10参照)は、フレームを受信すると、そのフレームに対してシリアルパラレル変換を行い、変換後のフレームをPCS部100−2に出力する。図12(a)は、このフレームを表している。PCS部100−2は、受信器100−1から入力されたフレームを復号する。そして、PCS部100−2は、フレーム先頭を示すSOF情報と、フレーム最後尾を示す最終ワード有効データ信号H(k)を生成し、Mビット幅のフレームとともに、ヘッダ解析部100−3に出力する(図12(b),(c),(d)参照)。PCS部100−2は、フレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。
なお、PCS部100−2に入力されるフレームにおいて、ヘッダ先頭には/s/(フレーム開始区切り)が存在し、フレームの終わりには/t/(フレーム終了区切り)が存在し、フレーム間にはIFG(Inter Frame Gap :フレーム間隔)が存在する。PCS部100−2は、これらの/s/(フレーム開始区切り)、/t/(フレーム終了区切り)、およびIFGを‘0’に置き換えて、ヘッダ解析部100−3に出力する。この結果、図12(b)に示すように、フレーム開始区切り120−1、120−3、フレーム終了区切り120−2,120−4、およびIFGは無効データとなる。
ヘッダ解析部100−3は、フレームのヘッダを解析し、フレームデータ制御情報を生成し、フレームデータ制御情報をフレーム廃棄部100−5に出力する。また、ヘッダ解析部100−3は、PCS部100−2から入力されるフレーム、SOF信号、H(k)信号を並列CRC検査部100−4に出力する。ヘッダ解析部100−3は、フレームの最初のMビットの出力時にSOF信号を出力し、フレームの末尾の端数ビットブロックB(x)の出力時に、端数ビットブロックB(x)のビット数を最終ワード有効データ信号H(k)として出力する。
並列CRC検査部100−4は、ヘッダ解析部100−3から入力されるSOF信号、H(k)信号に応じて、入力されるフレーム(検査対象フレーム)のヘッダからFCSまでのCRC値を計算し、そのCRC値をCRC検査結果として、フレーム廃棄部100−5へ出力する。
フレーム廃棄部100−5は、ヘッダ解析部100−3から入力されるフレームデータ制御情報と、並列CRC検査部100−4から入力されるCRC検査結果に従って、フレームを廃棄する。また、フレーム廃棄部100−5は、CRC検査結果が正常なフレームをフレームデータ制御情報とともにフレームバッファ部100−6へ出力する。
フレームバッファ部100−6は、フレーム廃棄部100−5からフレームが入力されると、フレームデータ制御情報ともにバッファリングする。バッファリング後、フレームバッファ部100−6は、フレームとフレームデータ制御情報をスイッチ部103に出力する。
スイッチ部103は、フレームバッファ部100−6から入力されるフレームを、フレームデータ制御情報に従い、ラインカード送信部へ転送する。スイッチ部103は、フレームをスイッチ部103に対して出力したラインカード受信部101−1と対になるラインカード送信部102−1にフレームを転送する。
ラインカード送信部102−1は、スイッチ部103から転送されるフレームデータをシリアルデータに変換して送信する。
次に、並列CRC検査部100−4の動作を説明する。図13は、並列CRC検査部100−4の各構成要素の入力や出力を示すタイミングチャートである。図13(a),(b),(c)は、それぞれ演算制御部111に入力されるSOF、H(k)、フレームを表している。また、図13(d)は、演算制御部111に入力されるフレームをワード(列)単位で示している。各ワードはMビットである。図13(e),(f)は、それぞれ選択部114、CRC計算部115の出力を表している。図13(g)〜(i)は、それぞれVDT、ABSEL、シフト情報pを表している。
図13(a)〜(d)に示すように、演算制御部111には、ヘッダ解析部100−3から、CRC検査対象となるMビット幅のフレームと、フレーム先頭を示すSOF信号と、フレーム最後尾を示す最終ワード有効データ信号H(k)が入力される。最終ワード有効データ信号H(k)として、端数ビットブロックB(x)のビット数が演算制御部111に入力される。本実施形態では、第1の実施形態と異なり、FCS領域も端数ビットブロックB(x)内に含まれる(図13(c)参照)。
演算制御部111に入力されるフレームのビット長が並列幅Mビットの整数倍でない場合、そのフレームには、Mビットの整数倍ビットブロックA(x)と、ビット長がH(k)ビットである端数ビットブロックB(x)が含まれている。1番目からw−1番目までのワード列のデータ(‘a(x)#1’〜‘a(x)#(w−1)’)全体が整数倍ビットブロックA(x)である。なお、A(x)おける、各ワード列のデータ‘a(x)#1’〜‘a(x)#(w−1)’は、それぞれMビット幅のデータ列であり、‘#1’〜‘#(w−1)’は、それぞれ該フレームデータ内でのワード列の番号を示している。また、w番目のワード列のデータ‘b(x)’は、端数ビットブロックB(x)を含むビット列である。
図13(a)〜(d)に示すようにフレームと信号(SOF,H(k))が入力されると、演算制御部111は、SOFが入力されてからH(k)が入力されるまでの間、有効データ区間信号VDTを「有効(フレームに属するビット列が入力されていること)」を示す状態としてCRC計算部115に出力する(図13(g)参照)。図13(g)では、‘H(ハイ)’レベルは有効を示し、‘L(ロー)’レベルは無効(フレームに属するビット列が入力されていないこと)を示している。
また、演算制御部111は、入力されたフレームに含まれる整数倍ビットブロックA(x)と端数ビットブロックB(x)を選択部114と排他的論理和部112に出力する。また、整数倍ビットブロックA(x)である1番目からw−1番目までの各ワード列の各ビット列が入力されてそのビット列を出力している間、演算制御部111は、データ領域選択信号ABSELを「A(x)側」として、選択部114およびCRC計算部115に出力する。端数ビットブロックB(x)を含むビット列が入力されてそのビット列を出力する時には、演算制御部111は、データ領域選択信号ABSELを「B(x)側」として、選択部114およびCRC計算部115に出力する。図13(h)では、‘H’レベルは「A(x)側」を示し、‘L’レベルは「B(x)側」を示している。
選択部114は、図13(h)に示すデータ領域選択信号ABSELに従い、ABSELが「A(x)側」である時には、演算制御部111から入力される1番目からw−1番目までの各ワード列のデータ‘a(x)#1’〜‘a(x)#(w−1)’をCRC計算部115に出力する。また、ABSELが「B(x)側」である時には、シフト部113が出力するデータ(R(x)とB(x)との排他的論理和を下位側にpビットシフトしたデータ)をCRC計算部115に出力する。
CRC計算部115は、選択部114が出力する‘a(x)#1’〜‘a(x)#(w−1)’の整数倍ビットブロックA(x)に対するCRC 計算を行い、整数倍ビットブロックA(x)のCRC値であるR(x)を出力する(図13(f)のwワード列参照)。
CRC計算部115は、Mビット幅のデータの各ビットを係数とするM−1次多項式を次数dの任意の生成多項式G(x)で除算し、剰余を求める。生成多項式G(x)の次数dは予め定められている。CRC計算部115は、第1の実施形態におけるCRC計算部15と同様に、保持しているデータを(M−d)ビット上位側にシフトした結果と次のMビットとの排他的論理和を求め、その排他的論理和を除算して得られる剰余を保持する処理を繰り返してR(x)を算出する。すなわち、CRC計算部115は、フレームの最初のMビット‘a(x)#1’について上記の除算で剰余を求めたならば、その剰余を保持する。次のMビット‘a(x)#2’が入力されると、CRC計算部115は、保持していた剰余を表すデータ(dビット)を上位側に(M−d)ビットシフトし、次のMビット‘a(x)#2’との排他的論理和を求め、その排他的論理和が表すM−1次多項式を生成多項式G(x)で除算したときの剰余を求め、保持する。そして、CRC計算部115は、以降のMビットのデータについても同様の処理を繰り返す。剰余を表すデータの各ビットはd−1次の多項式の係数に相当し、上位側に(M−d)ビットシフトするとは、高次の項に対応するビット側に(M−d)ビットシフトすることである。CRC計算部115は、最後のMビット‘a(x)#(w−1)’ が入力されると、保持していた剰余を表すデータを上位側に(M−d)ビットシフトし、最後のMビット‘a(x)#(w−1)’ との排他的論理和を求める。そして、CRC計算部115は、その排他的論理和が表すM−1次多項式を生成多項式G(x)で除算したときの剰余を求め、その求めた剰余を整数倍ビットブロックA(x)のCRC値(R(x))として算出する。
図13(e),(f)を参照して具体的に説明する。CRC計算部115は、整数倍ビットブロックA(x)の1ワード目‘a(x)#1’について、各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。図13(f)に示す‘R(x)#1’が、その保持されたデータである。続いて、CRC計算部115は、保持していた‘R(x)#1’を上位側に(M−d)ビットシフトし、整数倍ビットブロックA(x)の、2ワード目‘a(x)#2’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。図4(f)に示す‘R(x)#2’が、その保持されたデータである。同様に、CRC計算部115は、保持していた‘R(x)#2’を上位側に(M−d)ビットシフトし、整数倍ビットブロックA(x)の、3ワード目‘a(x)#3’との排他的論理和を求め、その排他的論理和の各ビットを係数とする多項式を生成多項式G(x)で除算し、その剰余を示すデータを保持する。CRC計算部115は、この処理をw−1ワード目まで行うことでR(x)を算出する。w−1ワード目に関して処理を行うときに保持していた‘R(x)#(w−2)’を上位側に(M−d)ビットシフトシフトした結果とw−1ワード目‘a(x)#(w−1)’ との排他的論理和の各ビットを係数とする多項式を、生成多項式G(x)で除算したときの剰余がR(x)である。
また、CRC計算部115は、選択部114が出力する‘b´(x)’については、その各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余をC(x)とする。C(x)を求めるときには、保持しているデータに対するビットシフトおよび排他的論理和演算は行わない。
CRC計算部115は、排他的論理和部112にR(x)を出力する。また、演算制御部111は、w−1番目のワード列に続いて、最終ワード有効データ信号H(k)と端数ビットブロックB(x)を含むビット列b(x)をヘッダ解析部100−3から受信し、そのビット列b(x)を排他的論理和部112に出力する。従って、排他的論理和部112には、R(x)と、端数ビットブロックB(x)を含むビット列b(x)とが入力される。
また、演算制御部111は、最終ワード有効データ信号H(k)を受信すると、データ領域選択信号ABSELを「B(x)側」として選択部114に出力する。また、演算制御部111は、シフト情報p(p=M−H(k))をシフト部113に出力する。
排他的論理和部112は、整数倍ビットブロックA(x)に対するCRC計算部115の出力(A(x)のCRC値)であるR(x)と端数ビットブロックB(x)との排他的論理和を計算する。R(x)の長さはdビットである。図14は、R(x)とB(x)との排他的論理和を求める演算を示す説明図である。図14(a)は、ビット列b(x)を示している。ビット列b(x)は、長さH(k)ビットの端数ビットブロックB(x)を含んでいる。図14(b)は、図13(f)のwワード列に示す整数倍ビットブロックA(x)のCRC計算値R(x)である。排他的論理和部112は、B(x)とR(x)との排他的論理和の計算結果であるB´´(x)(長さH(k)ビット)を含むMビット幅のデータ列(図14(c)参照)をシフト部113に出力する。排他的論理和部112は、最上位ビットをあわせて、B(x)を含むMビットのデータ列とR(x)との排他的論理和を計算し、B´´(x)を含むMビットのデータ列を求め、そのデータ列をシフト部に出力すればよい。
図15は、シフト部113によるシフト処理を示す説明図である。シフト部113は、排他的論理和部112の出力(図15(a)参照)に含まれるB´´(x)に対するCRC計算をMビット入力のCRC計算部115で行えるようにするため、演算制御部111からのシフト情報p(p=M−H(k))に従い、排他的論理和部112の出力データをpビット分、最下位ビット側へシフトする。なと、シフト部113は、シフトによってデータがなくなることになる最上位側のpビットには、CRC演算値に影響を与えない‘0’を設定する。シフト処理および上位pビットに対する‘0’の設定を行ったデータ列をb´(x)と記す。図15(b)は、このデータ列b´(x)を示している。データ列b´(x)のビット長はMビットである。シフト部113は、データ列b´(x)を選択部114に出力する。
このとき、演算制御部111はデータ領域選択信号ABSELを「B(x)側」としているので、選択部114は、シフト部113から入力されるデータ列b´(x)をCRC計算部115に出力する(図13(3)のw列参照)。
本実施形態におけるシフト部113の構成は、第1の実施形態における第一シフト部13と同様の構成である(図7参照)。そして、シフト部113は、第1の実施形態における第一シフト部13と同様に動作する。
CRC計算部115は、ABSELが「B(x)側」であるとき、選択部114から入力されるデータ列b´(x)(最下位側にpビットシフトされたB´´(x)を含むデータ列)に対してCRC計算を行い、B´´(x)のCRC値C(x)を出力する。既に説明したように、CRC計算部115は、b´(x)の各ビットを係数とするM−1次多項式を生成多項式G(x)で除算し、その剰余をC(x)とする。
このC(x)は、CRC値の検査結果であり、C(x)が0であれば、フレームに誤りは生じていないことになり、C(x)が0以外の値であれば、フレームに誤りが生じていることになる。
CRC計算部115は、入力フレームデータに対するCRC検査結果C(x)を、フレーム廃棄部100−5にMビット幅のフレームデータ、SOF、H(k)とともに出力する。
次に、本実施形態の効果について説明する。
本実施形態によれば、排他的論理和部112が、整数倍ビットブロックのCRC値と、端数ビットブロックとの排他的論理和を計算し、シフト部113が、その排他的論理和を最下位ビット側にp(p=M−H(k))ビットシフトする。そして、CRC計算部15は、そのシフト後のデータのCRC値(C(x))を検査結果として計算する。このように計算することにより、フレーム長を求めるためのバッファリングを行わずに検査結果C(x)を算出することができる。
このようにバッファリングを行う必要がないので、検査結果を求める際の処理遅延を抑えることができる。遅延特性が重要なサーバ製品や高性能コンピューティング製品領域における通信技術に本発明を適用すれば、超低遅延のCRC検査が可能となる。
また、バッファリングの必要がないので、バッファリングのための構成要素を設ける必要がなく、第1の実施形態と同様、回路規模を削減することができる。
また、図11に示す構成では、演算制御部111が、フレーム先頭信号SOF、および、端数ビット信号H(k)から、データ領域選択信号ABSEL、シフト情報p、シフト情報qを生成する場合を示している。これらの信号や情報をSOFおよびH(k)以外の信号から生成してもよい。例えば、Mビットの入力毎のビットイネーブル信号に基づいてABSEL、シフト情報p、シフト情報qを生成してもよい。
また、上記の説明では、図11に示すに示す並列CRC検査部100−4(並列巡回符号検査装置)がビット単位のシフトを行って検査結果C(x)を算出する場合を示したが、シフト処理におけるシフト量は1ビット単位でなくてもよい。演算制御部111がバイト単位等のように複数ビット単位でシフト情報pを生成し、シフト部113が複数ビット単位でのシフト処理を行ってもよい。
また、上記の実施形態では、並列CRC検査部100−4がCRC符号(CRC値)を用いて検査結果を算出する場合を例にして説明しているが、本実施例における式(13)に基づく入力情報列長を用いずに演算結果を得る方法は他のハミング符号やBCH符号等のような、CRC符号以外の巡回符号により検査結果を求める場合にも本発明を適用することができる。その場合には、CRC値を計算するCRC計算部115の代わりに、他の巡回符号(ハミング符号やBCH符号等)を計算する手段を備えていればよい。CRC値以外の巡回符号を計算する場合であっても、シフト処理によって、入力フレームのビット長を求めるためのバッファリングを行わなくて済むという効果を得ることができ、処理遅延および回路規模の増大を防止し、また、広帯域化の制約を緩和できる。
また、並列CRC検査部(並列巡回符号検査装置)100−4が備える各構成要素(演算制御部111、排他的論理和部112、シフト部113、選択部114、CRC計算部115)は、それぞれ別個の回路であってもよい。あるいは、並列CRC検査部100−4が備える各構成要素は、プログラム(並列巡回符号検査プログラム)に従って動作するCPUによって実現されていてもよい。例えば、CPUが、予め記憶装置に記憶された並列巡回符号検査プログラムを読み込み、その並列巡回符号検査プログラムに従って、演算制御部111、排他的論理和部112、シフト部113、選択部114、CRC計算部115として動作してもよい。
なお、図11に示す構成の並列CRC検査部は、図1に示すネットワークインタフェースカード(本発明が適用されたネットワークインタフェースカード)から送信されるフレームを受信する装置において、巡回符号の検査回路として用いることが可能である。同様に、図2に示す構成の並列CRC符号演算処理部は、図10に示すラインカード(本発明が適用されたラインカード)に対してフレームを送信する装置において、巡回符号生成回路として用いることができる。
また、説明では、本発明が適用されたネットワークインタフェースカードやラインカードを例示したが、本発明はネットワークインタフェースカードやラインカード以外の装置に適用されていてもよい。
次に、本発明の概要について説明する。図16は、本発明の並列巡回符号生成装置の概要を示すブロック図である。本発明の並列巡回符号生成装置50は、データ分割手段51と、R(x)生成手段52と、第一排他的論理和手段53と、第一シフト手段54と、R´(x)生成手段55と、第二シフト手段56と、第二排他的論理和手段57とを備える。
データ分割手段51は、例えばフレーム等の巡回符号生成対象データに含まれるビット列をMビット幅に並列出力して、巡回符号生成対象データを、巡回符号生成対象データにおける先頭からMの整数倍分のデータブロックである整数倍データブロックA(x)と、巡回符号生成対象データからデータブロックA(x)を除いたMビット未満のデータブロックである端数データブロックB(x)とに分ける。
R(x)生成手段52は、整数倍データブロックA(x)の巡回符号である巡回符号R(x)を生成する。第一排他的論理和手段53は、端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和を計算する。第一シフト手段54は、端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和をM−H(k)ビット下位側にシフトし、上位M−H(k)ビットに0を設定する。ここで、H(k)は、端数データブロックB(x)のビット長を表す値である。
R´(x)生成手段55は、第一シフト手段54によってシフトおよび0の設定が行われたデータの巡回符号である巡回符号R´(x)を生成する。第二シフト手段56は、巡回符号R(x)をH(k)ビット上位側にシフトし、下位H(k)ビットに0を設定したデータであるデータR´´(x)を生成する。第二排他的論理和手段57は、巡回符号R´(x)とデータR´´(x)との排他的論理和を計算する。
第二排他的論理和手段57が計算した排他的論理和が巡回符号生成対象データの巡回符号である。このように、巡回符号を生成すれば、巡回符号生成対象データのビット長を求める必要がなく、巡回符号生成対象データのビット長を求めるためのバッファリング処理を不要とすることができる。
なお、図16に示すデータ分割手段51は、例えば図2に示す演算制御部11によって実現される。R(x)生成手段52およびR´(x)生成手段55は、例えばCRC計算部15によって実現される。第一排他的論理和手段53は、例えば第一排他的論理和部12によって実現される。第一シフト手段54は、例えば第一シフト部13によって実現される。第二シフト手段56は、例えば第二シフト部16によって実現される。第二排他的論理和手段57は、例えば第二排他的論理和部17によって実現される。
また、第一の実施形態には、R(x)生成手段とR´(x)生成手段とが同一の回路であり、データ分割手段がデータブロックA(x)を出力しているときには、データブロックA(x)をその回路に送り、第一シフト手段が端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和に対するシフトおよび0の設定を行ったときには、シフトおよび0の設定が行われたデータをその回路に送る選択手段を備えた構成が開示されている。
また、R(x)生成手段が、整数倍データブロックA(x)に含まれる最初のMビットのビット列に対して、そのビット列の各ビットを係数とするM−1次多項式を次数dの生成多項式で除算して得られる剰余を求め、その剰余を保持し、以降のMビット毎のビット列毎に、保持しているデータを(M−d)ビット上位側にシフトしたデータとMビット幅のビット列との排他的論理和を求め、その排他的論理和の各ビットを係数とするM−1次多項式をその生成多項式で除算して得られる剰余を求め、その剰余を保持することを繰り返すことにより、巡回符号R(x)を生成することが開示されている。
また、R´(x)生成手段が、第一シフト手段によってシフトおよび0の設定が行われたデータの各ビットを係数とするM−1次多項式を生成多項式で除算した剰余を求めることによりR´(x)を生成することも開示されている。
図17は、本発明の並列巡回符号検査装置の概要を示すブロック図である。本発明の並列巡回符号検査装置60は、データ分割手段61と、R(x)生成手段62と、排他的論理和手段63と、シフト手段64と、C(x)生成手段65とを備える。
データ分割手段61は、例えばフレーム等の検査対象データに含まれるビット列をMビット幅に並列出力して、検査対象データを、検査対象データにおける先頭からMの整数倍分のデータブロックである整数倍データブロックA(x)と、検査対象データからデータブロックA(x)を除いたMビット未満のデータブロックである端数データブロックB(x)とに分ける。
R(x)生成手段62は、整数倍データブロックA(x)の巡回符号である巡回符号R(x)を生成する。排他的論理和手段63は、端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和を計算する。シフト手段64は、端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和をM−H(k)ビット下位側にシフトし、上位M−H(k)ビットに0を設定する。ここで、H(k)は、端数データブロックB(x)のビット長を表す値である。C(x)生成手段65は、シフト手段64によってシフトおよび0の設定が行われたデータの巡回符号である巡回符号C(x)を生成する。
C(x)が、データの誤り検査結果であり、C(x)=0であれば誤りはなく、0以外の値であれば誤りが生じていることになる。このように検査結果C(x)を算出すれば、検査対象データのビット長を求める必要がなく、ビット長を求めるためのバッファリング処理を不要とすることができる。
なお、図17に示すデータ分割手段61は、例えば図11に示す演算制御部111によって実現される。R(x)生成手段62およびC(x)生成手段65は、例えばCRC計算部115によって実現される。排他的論理和手段63は、例えば排他的論理和部112によって実現される。シフト手段64は、例えばシフト部113によって実現される。
また、第2の実施形態には、R(x)生成手段とC(x)生成手段とが同一の回路であり、データ分割手段がデータブロックA(x)を出力しているときには、データブロックA(x)をその回路に送り、シフト手段が端数データブロックB(x)を含むMビットのデータ列と巡回符号R(x)との排他的論理和に対するシフトおよび0の設定を行ったときには、シフトおよび0の設定が行われたデータをその回路に送る選択手段を備えた構成が開示されている。
また、R(x)生成手段が、整数倍データブロックA(x)に含まれる最初のMビットのビット列に対して、そのビット列の各ビットを係数とするM−1次多項式を次数dの生成多項式で除算して得られる剰余を求め、その剰余を保持し、以降のMビット毎のビット列毎に、保持しているデータを(M−d)ビット上位側にシフトしたデータとMビット幅のビット列との排他的論理和を求め、その排他的論理和の各ビットを係数とするM−1次多項式をその生成多項式で除算して得られる剰余を求め、その剰余を保持することを繰り返すことにより、巡回符号R(x)を生成することが開示されている。
また、C(x)生成手段が、シフト手段によってシフトおよび0の設定が行われたデータの各ビットを係数とするM−1次多項式を生成多項式で除算した剰余を求めることによりC(x)を生成することも開示されている。
なお、各実施の形態で示した整数倍ビットブロックA(x)は整数倍データブロックA(x)に相当し、各実施の形態で示した端数ビットブロックB(x)は端数データブロックB(x)に相当する。