(57)【要約】【課題】回路規模を拡張することなく排他的論理和演算処理を少ない命令サイクル数で行なうことができガロア体掛け算器の制御方法を提供する。【解決手段】ｋ１〜ｋ２バイトまでのデータＤ３のＣＲＣ値としてガロア体の要素からなるビット列Ｄｉを求める（ＳＴ１１）。（ｋ２＋１）〜最終バイトまでのバイト数Ｋに相当する次数Ｍを求め、その次数Ｍから基準次数と残り次数Ｒを求める（ＳＴ１２）。そして、ビット列Ｄｉを、ＣＲＣ符号器にセットした後、ＣＲＣ符号器を残り次数Ｒ分シフト動作させる（ＳＴ１３）。続いて、前記基準次数のビット列Ｓｊと、ＣＲＣ符号器によるシフト動作で求めた演算結果との間で、ビットシフト及び排他的論理和演算処理をする（ＳＴ１４）。【選択図】　　　　図２
2004135172.tif 000002
【特許請求の範囲】
【請求項１】
任意のガロア体の要素からなるＮビットの第１ビット列と次数Ｍのガロア体の要素を示すＮビットの第２ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をＣＲＣ符号器を使って、前記第１ビット列と前記第２ビット列とのとのガロア体掛け算を行うガロア体掛け算器の制御方法において、
必要な次数のガロア体の要素の中から、そのビット列中のビット「１」の数が少ない前記次数Ｍのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、
前記次数Ｍより小さい前記基準次数ビット列を読み出すとともに、前記次数Ｍから前記読み出した基準次数を引いた残り次数を求め、前記第１ビット列で初期化したＣＲＣ符号器に、その残り次数に相当するビット数分だけ「０」を入力し、ＣＲＣ演算を行い、そのＣＲＣ演算結果と前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とＣＲＣ符号器を使用して前記ガロア体掛け算を行うようにしたことを特徴とするガロア体掛け算器の制御方法。
【請求項２】
任意のガロア体の要素からなるＮビットの第１ビット列と次数Ｍのガロア体の要素を示すＮビットの第２ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をＣＲＣ符号器を使って、前記第１ビット列と前記第２ビット列とのガロア体掛け算を行うガロア体掛け算器の制御方法において、
必要な次数のガロア体の要素の中から、そのビット列中のビット「１」の数が少ない前記次数Ｍのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、
前記次数Ｍより小さい前記基準次数ビット列を読み出すとともに、前記次数Ｍから前記読み出した基準次数を引いた残りの次数を求め、前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とＣＲＣ符号器を使用してガロア体掛け算を行い、その後に、前記ガロア体掛け算結果に設定されているＣＲＣ符号器に、その残り次数に相当するビット数分だけ「０」を入力し、ＣＲＣ演算を行い、最終ガロア体掛け算結果を得ることを特徴とするガロア体掛け算器の制御方法。
【請求項３】
請求項１又は２に記載のガロア体掛け算器の制御方法において、
前記基準次数は複数設けられ、それら各基準次数に対するビット列がそれぞれメモリに予め用意されていることを特徴とするガロア体掛け算器の制御方法。
【請求項４】
請求項３に記載のガロア体掛け算器の制御方法において、
前記メモリから読み出される次数Ｍより小さい基準次数のビット列は、次数Ｍより小さく且つ次数Ｍに最も近い基準次数のビット列であることを特徴とするガロア体掛け算器の制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はガロア体掛け算器の制御方法に関する。
【０００２】
【従来の技術】
通信装置のひとつとして、異なるインターネットワーク同士を相互に接続するルータがある。ルータは、入力したデータ中の接続先のアドレスを抽出し、その抽出したアドレスから次に繋ぐルータをルーティングテーブルから検索する。そして、ルーティングテーブルを使って、前記抽出したアドレスから次に繋ぐルータが見つかると、ルータは、その次のルータにデータを出力する。
【０００３】
ところで、アドレスデータから次に接続するルータをルーティングテーブルから検索する際、一般にハッシュ検索が採用されている。
ハッシュ検索は、各検索データのハッシュ値を予め演算しておく。ハッシュ値とは、検索データを適当な桁数の素数で割り算した時に得られる余りの値をハッシュ値という。異なるデータ系列の検索データにおいてそのハッシュ値が等しくなることがあるので、ハッシュ値ごとに各検索データをグループに分類する。つまり、同一のハッシュ値になる検索データを同一グループに分類しておく。
【０００４】
そして、被検索データについて、ハッシュ値を求める。その求めたハッシュ値からこの被検索データが、前記分類したグループのどのグループに属するかを特定する。その特定したグループ内の検索データ中から被検索データと一致する検索データを検索するようにしたのがハッシュ検索である。
【０００５】
図３は、ハッシュ検索を説明するための説明図である。図３において、検索データテーブルＴＤは、ｍ個のｎバイトからなる検索データＤＳの集合で、予めハッシュ値を演算して、グループ化されたテーブルである。このグループ化は、各検索データブロックＤＢの中のネクストポインタＰによって順次グループ内の次候補をリンクしてリストを構成している。各グループの最後のリストのポインタＰはそれぞれ“０”にする。
【０００６】
各グループの最初の検索データブロックＤＢのポインタＰは、検索タグテーブルＴＴに書き込まれている。検索タグテーブルＴＴには、ハッシュ値ＨＴをインデックス番号（アドレス）としてそのハッシュ値ＨＴに対応する検索データテーブルＴＤの各グループの最初の検索データブロックＤＢのポインタＰが書き込まれている。
【０００７】
そして、入力データとしてｎバイトの被検索データＤＸが入力されると、このｎバイトの被検索データＤＸのハッシュ値ＨＴを演算する。演算して得られたハッシュ値ＨＴを前記検索データテーブルＴＤのインデックスとして、前記検索タグテーブルＴＴから同ハッシュ値ＨＴと一致するグループの検索データＤＳの先頭ポインタＰを獲得する。獲得した先頭のポインタＰに基づいて、そのグループに属する検索データＤＳを検索する。
【０００８】
グループに属する検索データＤＳと、被検索データＤＸとが一致すれば、検索一致となって検索が終了する。
このように、ハッシュ検索は、被検索データＤＸを所定桁数の素数で割り算した余りをハッシュ値ＨＴとしたことから、検索候補を少なくでき、検索回数も減少し検索時間の短縮を図ることができる点で優れている。
【０００９】
ところで、このハッシュ検索において、前記割り算の代わりにＣＲＣ（ＣｙｃｌｉｃＲｅｄｕｎｄａｎｃｙ　Ｃｈｅｃｋ）演算を用いる方法もある。ＣＲＣ演算は、ビット系列の割り算に相当することから、割り算と同じ性質を示すからである。そこで、通信装置においては、誤り訂正のために用いられるＣＲＣ符号器を備えていることから、このＣＲＣ符号器を用いたハッシュ検索が行なわれている（例えば、特許文献１参照）。
【００１０】
ところで、実際に、ハッシュ検索する際、被検索データＤＸは、複数のデータフィールドからなる入力データ（通信フレーム）の一部分に含まれている。そのため、その被検索データＤＸの部分のＣＲＣ値（ハッシュ値）を演算する必要がある。
【００１１】
例えば、図４に示すように、ｎビットの入力データＤについて、先頭ビット（ＬＳＢ）から（ｋ１−１）ビット目までの領域のデータＤ１と先頭ビットから数えて（ｋ２＋１）ビット目から最終ビット（ＭＳＢ）までの領域のデータＤ２とを被検索データＤＸとする。この被検索データＤＸのＣＲＣ値（ハッシュ値）を求める場合、ＣＲＣの線形性を利用して、以下のように演算する。
【００１２】
先ず、ｎビットの入力データＤについてのＣＲＣ値（ハッシュ値）を演算する。また、ｋ１ビット目からｋ２ビット目までの第１ビット長としての領域（マスク領域）のデータＤ３のＣＲＣ値（ハッシュ値）を求める。このとき、ｎビット（全領域）のデータＤのＣＲＣ値をＣＲＣｎとし、ｋ１ビット目からｋ２ビット目までのマスク領域のデータＤ３のＣＲＣ値をＣＲＣｍとし、前記被検索データＤＸのＣＲＣ値（ハッシュ値）をＣＲＣｘとしたとき、以下の演算で求めることができる。
【００１３】
ＣＲＣｘ＝（ＣＲＣｎ）ＸＯＲ（ＣＲＣｍ）
但し、「ＸＯＲ」は排他的論理和
このとき、データＤ３のＣＲＣ値（＝ＣＲＣｍ）の演算は、ＣＲＣ符号器での演算において、先頭ビットから（ｋ１−１）ビット目まではデータが「０」なので、ＣＲＣ演算を行なう必要がなく、直ちにｋ１ビット目のデータを入力してＣＲＣ演算を行なう。しかしながら、ｋ２ビット目までのＣＲＣ演算しても、引き続いて（ｋ２＋１）ビットから最終ビットまでの第２ビット長の「０」のデータを入力してＣＲＣ演算を行なう必要がある。「０」のデータであっても通常のデータと同じ演算量が必要なため、ＣＲＣｍの演算に時間がかかるという問題があった。
【００１４】
そこで、ｋ１ビットからｋ２ビットまでの途中のＣＲＣ値に対して（ｋ２＋１）ビット目から最終ビットまでの「０」を入力した時の、値を予め演算しておく。そして、種々の途中までのＣＲＣ値に対して演算した結果をテーブル化し、そのテーブルを使用してマスク領域におけるデータＤ３のＣＲＣ値（＝ＣＲＣｍ）を求める方法が考えられる。しかしながら、この方法では高速化が図れるが、例えば、マスク領域のビット数が大きい場合、パターン数が膨大となり大きなデータテーブルが必要となる。
【００１５】
また、ガロア体の掛け算の原理を利用すること、即ち、ガロア符号器において、一つシフトさせることはガロア体の要素を１つ掛けることと同じあることから、「０」の数を次数とするガロア体の要素を積（掛け算）とすることで演算することができること知られている（例えば、特許文献２参照）。マスク領域のビット数（第１ビット長）が固定であって「０」の数（第２ビット長）も固定の場合、第２ビット長を次数Ｍとするガロア体の要素を１つ用意しておくだけで対応できる点で有利である。
【００１６】
ガロア体ＧＦ（２ｒ）は、計算法則を持った有限な数の集合体であって、ｒ＝４とすると、そのガロア体の要素（素数）の数は、１６（＝２ｒ）個となる。そして、その非零の各元は、
α０，α１，α２，α３，…………………α１４
で表される。そして、各元の値は１以上１５以下の整数と１対１に対応している。
【００１７】
ガロア体は、乗除算をはじめとする四則演算も全て完結するようになっている。例えば、α２×α３＝α５、または、α１０×α９＝α１９＝α４となる。なお、α４の４は、１９を１５で割ったときの余りの数である。さらに、加減算は、ベクトル表現の排他的論理和（ＸＯＲ）で行なうことができる。
【００１８】
ガロア体の掛け算の一例を以下に説明する。例えば、ガロア体の要素であるα６とα７の積（掛け算）は、以下のように展開することができる。
2004135172.tif 000003
図５は、そのガロア体掛け算器の一例を示す論理回路を示す。図５に示すガロア体掛け算器は、ビットパターンの組合わせの掛け算、即ち、積（ＡＮＤ）演算を行なう第１の演算部５１と、第１の演算部５１によって得られた演算結果についてそのビット単位の排他的論理和（ＸＯＲ）演算を行なう第２の演算部５２とからなる。
【００１９】
そして、この掛け算器を使って前記図４で示したマスク領域のデータＤ３におけるＣＲＣ値（＝ＣＲＣｍ）を演算する場合、第１レジスタ５３に、ｋ１ビット目からｋ２ビット目までのデータＤ３について演算した演算途中のＣＲＣ値であるガロア体の要素からなるＮビットのビット列Ｄｉを入力する。一方、第２レジスタ５４に、（ｋ２＋１）ビット目から最終ビットまでの「０」の数を次数とするガロア体の要素を示すＮビットのビット列Ｓｊを入力する。
【００２０】
第１レジスタ５３に入力されたビット列Ｄｉと第２レジスタ５４に入力されたビット列Ｓｊは、第１の演算部５１に出力される。第１の演算部５１に設けられた多数のアンドゲート回路５１ａにおいて、ビット列Ｄｉの各ビット毎に、ビット列Ｓｊの各ビットに対してアンド計算を行なう。この時、各組み合わせの計算が同時に実行できるように、組合わせの数だけアンドゲート回路５１ａが設けられている。第１の演算部５１の各アンドゲート回路５１ａで得られた結果は、第２の演算部５２に出力される。第２の演算部５２は、多数の排他的論理和ゲート回路（ＸＯＲ回路）５２ａからなり、各ＸＯＲ回路５２ａにて全てのビットパターンについて排他的論理和をすることにとって出力レジスタ５５にデータＤ３におけるＣＲＣ値（＝ＣＲＣｍ）が出力される。
【００２１】
しかしながら、演算速度は高速になるが、アンド計算を行なう際の全ての組み合わせの数（Ｎ２個）だけアンドゲート回路５１ａが必要となり、回路規模が非常に大きくなる。
【００２２】
そこで、回路規模を小さく構成することができるガロア体掛け算器を図６に示す。図６において、このガロア体掛け算器は、入力レジスタ６１、シフトレジスタ６２、アンドゲート回路６３、排他的論理和ゲート回路６４、及び、ガロア符号器６５を備えている。
【００２３】
今、ガロア符号器６５のガロア符号器レジスタ６５ａが「０」に初期化されている状態で、入力レジスタ６１に、前記図４で示したマスク領域のｋ１ビットからｋ２ビットまでのデータＤ３について演算した演算途中のＣＲＣ値であるガロア体の要素からなるＮビットのビット列Ｄｉを入力する。又、シフトレジスタ６２に、（ｋ２＋１）ビット目から最終ビットまでの「０」の数を次数とするガロア体の要素を示すＮビットのビット列Ｓｊを入力する。
【００２４】
そして、シフトレジスタ６２の最上位ビット（ＭＳＢ）が「１」であるとき、排他的論理和ゲート回路６４において、入力レジスタ６１の内容（ビット列Ｄｉ）とガロア符号器レジスタ６５ａの内容ｇとを排他的論理和の演算、すなわち、
ｇ＝ｇＸＯＲ（Ｄｉ×（シフトレジスタ６２のＭＳＢ））
但し、「×」は掛け算（Ｄｉ各ビットとのアンド演算）
を行い、その結果を同ガロア符号器６５に入力する。
【００２５】
そして、ガロア符号器レジスタ６５ａの内容ｇを一回右（最上位側）に１ビットシフトする。又、シフトレジスタ６２の内容（ビット列Ｓｊ）も同様に一回右にシフトする。そして、シフトレジスタ６２の内容を一回右に１ビットシフトすることによって、同シフトレジスタ６２の新たなＭＳＢが「１」であれば、前記入力レジスタ６１の内容と前記ガロア符号器レジスタ６５ａの内容ｇとを排他的論理和の演算、すなわち、
ｇ＝ｇＸＯＲ（Ｄｉ×（シフトレジスタ６２のＭＳＢ））
を行い、その結果を同ガロア符号器６５に入力する。そして、ガロア符号器６５の内容を一回右（最上位側）に１ビットシフトするとともに、シフトレジスタ６２も同様に一回右に１ビットシフトする。
【００２６】
そして、この演算を、シフトレジスタ６２に初期セットした時に最下位ビット（ＬＳＢ）のビットがＭＳＢになって上記演算が行なわれるまで繰り返す。
そして、最後にガロア符号器６５にて得られたガロア符号器レジスタ６５ａの内容ｇ、すなわち、
ｇ＝ｇＸＯＲ（Ｄｊ×（シフトレジスタ６２のＭＳＢ））
がデータＤ３のＣＲＣ値（＝ＣＲＣｍ）となり出力される。
【００２７】
このガロア掛け算器は、図５で説明したガロア掛け算器に比べて最大（Ｎ−１）回のシフト動作が加わる分だけ演算速度は劣るものの、回路規模を大幅に小さくできる。
【００２８】
【特許文献１】
特開平０９−２１８８７７号公報
【特許文献２】
特開平２００２−２０７５９３号公報
【００２９】
【発明が解決しようとする課題】
ところで、上記のようなハードウェアで、ＣＲＣ値（＝ＣＲＣｍ）を求めることができるが、ソフトウェアで実現することもできる。上記掛け算器等のハードウェアを新たに実装することなく、プログラムを追加するだけで実現することができる点で有利である。しかしながら、既存のＣＲＣ符号器を制御して、ＣＲＣ値を求める場合、その（ｋ２＋１）ビットから最終ビットまでのビット数（第２ビット長）だけＣＲＣ符号器をシフトさせる必要があり、命令サイクル数が多くなり、その分時間を要していた。
【００３０】
このように、ソフトウェアで実現する場合にも、命令サイクルが少なく演算が高速で処理されることが要求される。
図７は、前記ＣＲＣ値（＝ＣＲＣｍ）を既存のＣＲＣエンジンを使って行われていた従来の演算処理するためのフローチャートである。なお、説明の便宜上、前記図４で示したマスク領域のデータＤ３におけるＣＲＣ値（＝ＣＲＣｍ）を演算する場合を例にして説明する。このとき、特にことわりがない場合、ビットをバイト単位に変更して説明する。従って、データＤ３の領域（第１ビット長）はｋ１バイト目からｋ２バイト目までであって、（ｋ＋１）バイトから最終バイトまでの「０」とする。そして、（ｋ＋１）バイトから最終バイトまでのバイト数（第２ビット長）をＫバイトとする。また、ＣＲＣエンジンのＣＲＣ符号器はＮビットのものとする。
【００３１】
図７において、ステップＳＴ１において、ｋ１バイト目からｋ２バイト目までのデータＤ３についてＣＲＣ符号器を使ってＣＲＣ演算した演算途中のＣＲＣ値としてＮビットのガロア体の要素（元）からなるビット列Ｄｉが求められると、ステップＳＴ２に移る。
【００３２】
ステップＳＴ２に移ると、予め用意されたガロア体テーブルから、Ｋバイト分のビット数に相当する次数Ｍ（Ｍ＝８×Ｋ）のガロア体の要素、すなわち、（ｋ２＋１）バイトから最終バイトまでの「０」の数（この場合、Ｍ＝８×Ｋ）を次数とするガロア体の要素を示すＮビットのビット列Ｓｊを取り込む。
【００３３】
次に、ステップＳＴ３において、このＮビットのビット列Ｓｊと先に求めたビット列Ｄｉとの間でビットシフト及び排他的論理和演算処理を行なう。
この演算処理は、Ｎビットのビット列Ｓｊの各ビット中「１」であるビット位置を検索し、その位置がＮビットのビット列Ｄｉの最下位ビットになるようにビット列Ｄｉをシフトし、各「１」であるビット数個配置し、これらを順次排他的論理和を行う。結果として、２Ｎ−１ビットのビット列が生成され、さらに最上位ビットに「０」である１ビットを追加して２Ｎビット列を生成する。
【００３４】
ビット列Ｓｊとビット列Ｄｉとの間でビットシフト及び排他的論理和演算処理が終了すると、ステップＳＴ４に移り、ＣＲＣ符号器のレジスタの内容を一旦「０」に初期化する。続いて、ステップＳＴ５において、前記ビット列Ｓｊの「１」との間でビットシフト及び排他的論理和演算処理で求めた２Ｎビットの演算結果の上位ＮビットをＣＲＣ符号器に順番に入力し、その結果に前記２Ｎビットの演算結果の下位Ｎビットを排他的論理和を行う。これによって、ＣＲＣ符号器によって、マスク領域のデータＤ３のＣＲＣ値（＝ＣＲＣｍ）が演算される（ステップＳＴ６）。
【００３５】
ところで、前記ステップＳＴ３において行なわれるビット列Ｓｊとビット列Ｄｉとの間で行なうビットシフト及び排他的論理和演算処理の命令サイクルは、「０」の数（この場合、Ｍ＝８×Ｋ）を次数とするガロア体の要素を示すＮビットのビット列Ｓｊ中の「１」となるビット数によって決まる。
【００３６】
従って、１６ビットのビット列Ｓｊにおいて、「０」の数が多いほど命令数も少なくなる。しかしながら、ビット列Ｓｊ中の「０」の数は、（ｋ＋１）バイトから最終バイトまでの「０」の数（この場合、Ｋバイト）によって、一義的に決まる。従って、Ｋバイトの値が固定であって、そのビット列Ｓｊの「１」の数が少なければ、命令サイクルは少なくて済み高速に処理することができる。しかしながら、そのビット列Ｓｊの「１」の数が多ければ、命令サイクルは多くなり演算処理の高速を図れない。また、Ｋバイトが変動する場合は、ビット列Ｓｊ中の「１」の数がその時々で変動するため、命令サイクル数も変動する。
【００３７】
従って、（ｋ２＋１）バイトから最終バイトまでのバイト数に左右されないで、全体として命令サイクルの数を少なくでき演算処理の高速化を図ることができる演算処理方法が求められる。
【００３８】
本発明は、上記問題点を解消するためになされたものであって、その目的はＣＲＣ符号器を使ったガロア掛け算装置であって排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができるガロア体掛け算器の制御方法を提供するにある。
【００３９】
【課題を解決するための手段】
請求項１に記載の発明は、任意のガロア体の要素からなるＮビットの第１ビット列と次数Ｍのガロア体の要素を示すＮビットの第２ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をＣＲＣ符号器を使って、前記第１ビット列と前記第２ビット列とのとのガロア体掛け算を行うガロア体掛け算器の制御方法において、必要な次数のガロア体の要素の中から、そのビット列中のビット「１」の数が少ない前記次数Ｍのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、前記次数Ｍより小さい前記基準次数ビット列を読み出すとともに、前記次数Ｍから前記読み出した基準次数を引いた残り次数を求め、前記第１ビット列で初期化したＣＲＣ符号器に、その残り次数に相当するビット数分だけ「０」を入力し、ＣＲＣ演算を行い、そのＣＲＣ演算結果と前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とＣＲＣ符号器を使用して前記ガロア体掛け算を行うようにしたことをその要旨とする。
【００４０】
請求項２に記載の発明は、任意のガロア体の要素からなるＮビットの第１ビット列と次数Ｍのガロア体の要素を示すＮビットの第２ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をＣＲＣ符号器を使って、前記第１ビット列と前記第２ビット列とのガロア体掛け算を行うガロア体掛け算器の制御方法において、必要な次数のガロア体の要素の中から、そのビット列中のビット「１」の数が少ない前記次数Ｍのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、前記次数Ｍより小さい前記基準次数ビット列を読み出すとともに、前記次数Ｍから前記読み出した基準次数を引いた残りの次数を求め、前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とＣＲＣ符号器を使用してガロア体掛け算を行い、その後に、前記ガロア体掛け算結果に設定されているＣＲＣ符号器に、その残り次数に相当するビット数分だけ「０」を入力し、ＣＲＣ演算を行い、最終ガロア体掛け算結果を得ることをその要旨とする。
【００４１】
請求項３に記載の発明は、請求項１又は２に記載のガロア体掛け算器の制御方法において、前記基準次数は複数設けられ、それら各基準次数に対するビット列がそれぞれメモリに予め用意されていることをその要旨とする。
【００４２】
請求項４に記載の発明は、請求項３に記載のガロア体掛け算器の制御方法において、前記メモリから読み出される次数Ｍより小さい基準次数のビット列は、次数Ｍより小さく且つ次数Ｍに最も近い基準次数のビット列であることをその要旨とする。
【００４３】
（作用）
請求項１に記載の発明によれば、次数Ｍに基づいて基準次数とその基準次数に対するビット列が読み出されるとともに、残り次数が求められる。そして、残り次数だけ、ＣＲＣ符号器を使って第１ビット列をシフト動作させてＣＲＣ演算し、そのＣＲＣ演算結果と基準次数のビット列Ｓｊを使ってビットシフト及び排他的論理和演算処理を行なうようにした。
【００４４】
従って、演算処理ための命令サイクル数の少ない基準次数のビット列を使ってビットシフト及び排他的論理和演算処理を行なうことができる。
請求項２に記載の発明によれば、次数Ｍに基づいて基準次数とその基準次数に対するビット列が読み出されるとともに、残り次数を求められる。そして、その読み出した基準次数に対するビット列と前記第１ビット列との間でビットシフト及び排他的論理和演算処理し、その演算結果を前記残り次数に基づいてＣＲＣ演算を行なうようにした。
【００４５】
従って、演算処理ための命令サイクル数の少ない基準次数のビット列を使ってビットシフト及び排他的論理和演算処理を行なうことができる。
請求項３に記載の発明によれば、複数の基準次数とその基準次数に対するビット列を設定したことにより、次数Ｍがどんな値となっても最適な基準次数を選択することができ、残り次数を小さくし、ＣＲＣ演算のシフト回数を少なくすることができる。
【００４６】
請求項４に記載の発明によれば、前記メモリから読み出される基準次数は、次数Ｍより小さい基準次数であることから、第２ビット列に最終ビットに最も近い基準次数が選択される。その結果、残り次数を小さくし、ＣＲＣ演算のシフト回数を少なくすることができる。
【００４７】
【発明の実施の形態】
次に、本発明を具体化した一実施形態を図面に従って説明する。図１はルータ等の通信装置に実装された信号処理装置の電気的構成を説明するためのブロック回路図を示す。なお、本実施形態においても、説明の便宜上、前記図４で示したマスク領域のデータＤ３におけるＣＲＣ値（＝ＣＲＣｍ）を演算する場合を例にして説明する。このとき、特にことわりがない場合、前記と同様に、ビットをバイト単位に変更して説明する。従って、データＤ３の領域（第１ビット長）はｋ１バイト目からｋ２バイト目までであって、（ｋ＋１）バイトから最終バイトまでの「０」とする。そして、（ｋ＋１）バイトから最終バイトまでのバイト数をＫバイトとする。
【００４８】
図１において、信号処理装置１０は、ＡＬＵ１１、レジスタ群１２、ＣＲＣエンジン１３及びメモリ１４を備え、これらは互いにバスＢ１，Ｂ２を介して信号の授受が行われる。ＡＬＵ１１は、本実施形態では前記メモリ１４に記憶したプログラムに従って、レジスタ群１２と協働して通信のための各種の信号処理を行う。ＣＲＣエンジン１３は、通信装置に入力されてくる入力信号の誤り訂正のためのＣＲＣ（Ｃｙｃｌｉｃ　Ｒｅｄｕｎｄａｎｃｙ　Ｃｈｅｃｋ）の演算を実行するエンジンであって、Ｎビット（本実施形態では１６ビットとする）のＣＲＣ符号器を備えている。
【００４９】
また、ＣＲＣエンジン１３は、ＣＲＣを使ったハッシュ検索のためのＣＲＣ演算を、ＡＬＵ１１に従って実行する。この場合のハッシュ検索のＣＲＣ演算は、図４に示したマスク領域のｋ１〜ｋ２バイトまでのデータＤ３と（ｋ１＋１）バイトから最終バイトまでが全て「０」となるデータ列のＣＲＣ値（＝ＣＲＣｍ）の演算である。即ち、ｋ１〜ｋ２バイトまでのデータＤ３について演算した演算途中のＣＲＣ値であるガロア体の要素からなるＮビット（本実施形態では１６ビット）のビット列Ｄｉと、（ｋ２＋１）バイトから最終バイトまでの「０」の数を次数Ｍとするガロア体の要素を示すＮビット（本実施形態では１６ビット）のビット列Ｓｊとの間でビットシフト及び排他的論理和演算処理を行なう演算である。
【００５０】
メモリ１４は、ＡＬＵ１１を信号処理を実行させるためのプログラムを記憶するとともに、前記ハッシュ検索のためのＣＲＣ演算を実行させるためのプログラムを記憶している。
【００５１】
また、メモリ１４には、Ｎビット（１６ビット）からなるガロア体の要素が記憶されている。このメモリ１４に記憶されるガロア体の要素は、前記１６ビットのビット列Ｄｉとの間でビットシフト及び排他的論理和演算処理を行なう際に使う前記１６ビットのビット列Ｓｊであって、予め定めた数のガロア体の要素が記憶されている。ここで、ハッシュ検索を行なうデータ領域を６４バイトとする。その範囲で、本計算をする場合、最大６４個のガロア体の要素が必要になるが、本実施形態では、メモリ１４には予め定めた３個のガロア体の要素のビット列についてのみ記憶させている。そして、本実施形態では、この３個のガロア体の要素は、以下のように求めている。一般に、使用されている１６ビットのＣＲＣ符号器の生成多項式は、ＣＲＣ１６とＣＣＩＴＴ１６ビットの２種類あり、以下の生成多項式で示される。
【００５２】
ＣＲＣ１６：Ｘ１６＋Ｘ１５＋Ｘ２　＋１
ＣＣＩＴＴ：Ｘ１６＋Ｘ１２＋Ｘ５　＋１
ここで、１バイトから６４バイトまでの範囲において、その各バイト数に対する「０」の数を次数とするガロア体の要素を示す１６ビットのビット列Ｓｊを、前記２種類の生成多項式毎に予め演算する。
【００５３】
また、６４バイトの範囲を４分割すると、その区切り値は、１６、３２、４８となり、各区切りバイト数に対する前記演算したビット列Ｓｊ中のビット「１」の数をそれぞれのＣＲＣ符号器に生成多項式ごとに比較する。この「１」の数は、ＣＲＣ１６では、１６、３２、４８次数で、それぞれ３、３、９個、ＣＣＩＴＴでは、それぞれ１１、７、９個となる。
【００５４】
また、区間を１ずらして、区切りの次数を１５、３１、４７とした場合では、ＣＲＣ１６で、３、３、５個であり、一方、ＣＣＩＴＴでは、９、７、９個となる、ここで、「１」の数が少ないビット列ＳｊとなるＣＲＣ符号器の生成多項式と区切りの次数を選択する。この場合、ＣＲＣ符号器はＣＲＣ１６とし、区切りの次数は、１５、３１、４７を選択する。
【００５５】
そして、本実施形態では、これら予め演算して得た結果から、１５、３１、４７バイト（これらを総称して基準次数という）に対する「０」の数を次数とするガロア体の要素を示す１６ビットのビット列Ｓｊがそれぞれ記憶されている。従って、これら１５、３１、４７バイトにおけるビット列Ｓｊと前記１６ビットのビット列Ｄｉとの間でビットシフト及び排他的論理和演算処理を行なう場合、他のバイト数におけるビット列Ｓｊとの演算に比べ、ＡＬＵ１１の処理動作回数は非常に少なく短時間で演算結果が得られることになる。
【００５６】
次に、上記のように構成した信号処理装置１０の作用を図２に示すフローチャートに従って説明する。
図２において、信号処理装置１０は、ステップＳＴ１１において、ＣＲＣエンジン１３のＣＲＣ符号器を使ってｋ１〜ｋ２バイト目までのデータＤ３についてＣＲＣ演算した演算途中のＣＲＣ値として１６ビットのガロア体の要素からなるビット列Ｄｉを求めると、ステップＳＴ１２に移る。
【００５７】
ステップＳＴ１２に移ると、信号処理装置１０は（ｋ２＋１）バイトから最終バイトまでのバイト数Ｋを求める。そして、そのバイト数Ｋに相当する次数Ｍと前記メモリ１４に記憶した前記各基準次数と比較する。そして、各基準次数の中から、バイト数Ｋに相当する次数Ｍと一致するものがあれば、その一致する基準次数を選択する。
【００５８】
また、一致するものがない場合には、各基準次数の中から、バイト数Ｋに相当する次数Ｍより小さくかつその次数Ｍに最も近い基準次数を選択する。この時、前記次数Ｍを、各基準次数の中から選択された基準次数で引いて残りのバイト数（以下、残り次数Ｒという）を求める。
【００５９】
ここで、説明の便宜上、（ｋ２＋１）バイトから最終バイトまでのバイト数Ｋ（次数Ｍ）が３３バイトとすると、１５、３１、４７バイトからなる基準次数の中から３１バイトの基準次数が選択されるとともに、残り次数Ｒが２バイトとなる。
【００６０】
基準次数と残り次数Ｒが求まると、ステップＳＴ１３に移り、前記ステップＳＴ１１で求めた、１６ビットのビット列Ｄｉを、初期値としてＣＲＣエンジン１３の１６ビットＣＲＣ符号器に入力した後、そのＣＲＣ符号器を前記求めた残り次数Ｒである２バイト分シフト動作させる。これによって、２バイト分の「０」の数を次数とするガロア体の要素を示す１６ビットのビット列ＳｊとのＣＲＣ演算が終了することになる。
【００６１】
続いて、ステップＳＴ１４に移り、前記求めた３１バイトの基準次数のビット列Ｓｊをメモリ１４から読み出す。そして、この読み出したビット列Ｓｊと、ステップＳＴ１３で求めた演算結果との間で、ビットシフト及び排他的論理和演算処理を実行する。
【００６２】
この演算処理は、基準次数のビット列Ｓｊの各ビット中「１」であるビット位置を検索し、その位置が１６ビットのビット列Ｄｉの最下位ビットになるようにビット列Ｄｉをシフトし、各「１」であるビット数個配置し、これらを順次排他的論理和を行う。結果として、２Ｎ−１ビット（３１ビット）のビット列が生成され、さらに最上位ビットに「０」である１ビットを追加して２Ｎ（＝３２）ビット列を生成する。
【００６３】
この時、３１バイトの基準次数のビット列Ｓｊは、ビット列Ｓｊ中の「０」の数が多く「１」の数が３個と少ないため、ＡＬＵ１１の処理動作回数は非常に少なく短時間で演算結果が得られることになる。
【００６４】
ビット列Ｓｊとビット列Ｄｉとの間でビットシフト及び排他的論理和演算処理が終了すると、ステップＳＴ１５に移り、ＣＲＣ符号器のレジスタの内容を一旦「０」に初期化する。続いて、ステップＳＴ１６において、前記ビット列Ｓｊの「１」との間でビットシフト及び排他的論理和演算処理で求めた３２ビットの演算結果の上位１６ビットをＣＲＣ符号器に順番に入力する。続いて、その結果に前記３２ビットの演算結果の下位１６ビットを排他的論理和を行う。これによって、ＣＲＣ符号器によって、マスク領域のデータＤ３のＣＲＣ値（＝ＣＲＣｍ）が演算される（ステップＳＴ１７）。
【００６５】
そして、この得られたデータＤ３のＣＲＣ値（＝ＣＲＣｍ）と、入力データＤ全体のＣＲＣ値（＝ＣＲＣｎ）とを、排他的論理和することによって、被検索データＤＸのＣＲＣ値（＝ＣＲＣｘ＝ＣＲＣｎ　ＸＯＲ　ＣＲＣｍ）を求めることができる。この被検索データＤＸのＣＲＣ値（＝ＣＲＣｘ）が求められると、信号処理装置１０は、メモリ１４に予め記憶した検索タグデーブルＴＴ及び検索データテーブルＴＤを使って、被検索データＤＸに対する検索データＤＳを検索することになる。
【００６６】
このように、本実施形態のルータ等の通信装置の信号処理装置１０によれば、１バイトから６４バイトまでの範囲において、その各バイト数に対する「０」の数を次数とするガロア体の要素を示す１６ビットのビット列Ｓｊを選択可能なＣＲＣ符号器の生成多項式ごとにそれぞれ予め演算する。１バイトから６４バイトまでの範囲を均等に区切り、各区切りバイト数に対する「０」の数を次数とするガロア体の要素を示す１６ビットのビット列Ｓｊ中の「１」の数の少ないビット列ＳｊとなるＣＲＣ符号器の生成多項式と区切りの次数を選択し、この区切りの次数を基準次数としてそのビット列Ｓｊをメモリ１４に記憶するようにした。
【００６７】
そして、ｋ１〜ｋ２バイト目までがデータＤ３で、（ｋ２＋１）バイトから最終バイトまでが全て「０」となるＣＲＣ値（＝ＣＲＣｍ）を演算する前段階の、ｋ１〜ｋ２バイト目までのビット列Ｄｉと（ｋ２＋１）バイトから最終バイトまでのビット列Ｓｊとの間でのビットシフト及び排他的論理和演算処理について、（ｋ２＋１）バイトから最終バイトまでのバイト数Ｋ、即ち、次数Ｍを求める。その求めた次数Ｍから予め用意した演算処理回数の少ない複数の基準次数から１つを選ぶとともに、残り次数Ｒを求める。
【００６８】
そして、残り次数Ｒ分だけ、ＣＲＣエンジン１３を使ってビット列Ｄｉをシフト動作させて、その残り次数Ｒ分だけＣＲＣ演算させる。続いて、そのＣＲＣ演算結果と基準次数のビット列Ｓｊを使ってビットシフト及び排他的論理和演算処理を行なうようにした。
【００６９】
従って、演算処理回数の少ない基準次数のビット列Ｓｊを使って排他的論理和の演算処理を行なうことができるため、ＡＬＵ１１が実行する命令サイクルの数は非常に少なくなり短時間で演算結果が得られることになる。
【００７０】
つまり、本実施形態のルータ等の通信装置の信号処理装置１０によれば、回路規模拡張することなく、プログラムを追加するだけでＣＲＣのハッシュ検索ための排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができる。
【００７１】
しかも、メモリ１４には、３個の基準次数に対するビット列Ｓｊのデータが記憶されるだけなので、メモリ１４の大記憶容量化を抑制することができる。
尚、本発明の実施形態は、以下のように変更してもよい。
【００７２】
上記実施形態では、基準次数は３個であったが、適宜変更して実施してもよい。この基準次数を増やすと、区切りの間隔が短くなり、残り次数Ｒの最大値が小さくなり、残り次数Ｒに対するＣＲＣ符号器の演算量が減るため、高速化が図れる。また、メモリ１４には、基準次数に対するビット列Ｓｊそのものを記憶させるのではなく、各ビット列Ｓｊを用いたビットシフト及び排他的論理和演算処理プログラムそのものを記憶させておくことにより、基準次数選択時にプログラム自体を選択することにより、さらに高速化が図れる。特に、基準次数の数が少ない場合は、各次数のプログラム自体を記憶させてもメモリの容量の肥大化を抑制することができる。
【００７３】
又、上記実施形態では、残り次数Ｒに基づく演算動作を、基準次数に基づく演算動作より先に実行した。これを、基準次数に基づく演算動作を先に実行した後に、残り次数Ｒに基づく演算動作を実行させるようにしてもよい。この場合にも前記実施形態と同様な効果を奏する。
【００７４】
前記実施形態では、説明の便宜上、バイト数Ｋを６４バイトで説明したが、これに限定されるものではない。例えば、バイト数Ｋがどんな値になっても対応できる汎用性のある信号処理装置に応用してもよい。
【００７５】
【発明の効果】
以上詳述したように、本発明によれば、ＣＲＣ符号器を用いたガロア体の掛け算を回路規模を拡張することなく排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができる。
【図面の簡単な説明】
【図１】第１実施形態の通信装置の信号処理装置を説明するためのブロック回路図。
【図２】信号処理装置の作用を説明するためのフローチャート。
【図３】ハッシュ検索を説明するための説明図。
【図４】ハッシュ検索にための被検索データのデータ構造とその求め方を説明するための説明図。
【図５】従来のガロア符号器を使ったガロア体掛け算器を説明するためのブロック回路図。
【図６】同じく従来のガロア符号器を使ったガロア体掛け算器を説明するためのブロック回路図。
【図７】従来の信号処理装置の作用を説明するためのフローチャート。
【符号の説明】
１０…信号処理装置
１１…ＡＬＵ
１２…レジスタ群
１３…ＣＲＣエンジン
１４…メモリ
Ｄ３…データ
Ｄｉ…第１ビット列としてのビット列
Ｓｊ…第２ビット列としてのビット列
Ｒ…残り次数
Ｍ…次数
【図１】
2004135172.tif 000004
【図２】
2004135172.tif 000005
【図３】
2004135172.tif 000006
【図４】
2004135172.tif 000007
【図５】
2004135172.tif 000008
【図６】
2004135172.tif 000009
【図７】
2004135172.tif 000010