JP4057876B2 - ガロア体掛け算器の制御方法 - Google Patents
ガロア体掛け算器の制御方法 Download PDFInfo
- Publication number
- JP4057876B2 JP4057876B2 JP2002299354A JP2002299354A JP4057876B2 JP 4057876 B2 JP4057876 B2 JP 4057876B2 JP 2002299354 A JP2002299354 A JP 2002299354A JP 2002299354 A JP2002299354 A JP 2002299354A JP 4057876 B2 JP4057876 B2 JP 4057876B2
- Authority
- JP
- Japan
- Prior art keywords
- bit
- order
- bit string
- galois field
- crc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Description
【発明の属する技術分野】
本発明はガロア体掛け算器の制御方法に関する。
【0002】
【従来の技術】
通信装置のひとつとして、異なるインターネットワーク同士を相互に接続するルータがある。ルータは、入力したデータ中の接続先のアドレスを抽出し、その抽出したアドレスから次に繋ぐルータをルーティングテーブルから検索する。そして、ルーティングテーブルを使って、前記抽出したアドレスから次に繋ぐルータが見つかると、ルータは、その次のルータにデータを出力する。
【0003】
ところで、アドレスデータから次に接続するルータをルーティングテーブルから検索する際、一般にハッシュ検索が採用されている。
ハッシュ検索は、各検索データのハッシュ値を予め演算しておく。ハッシュ値とは、検索データを適当な桁数の素数で割り算した時に得られる余りの値をハッシュ値という。異なるデータ系列の検索データにおいてそのハッシュ値が等しくなることがあるので、ハッシュ値ごとに各検索データをグループに分類する。つまり、同一のハッシュ値になる検索データを同一グループに分類しておく。
【0004】
そして、被検索データについて、ハッシュ値を求める。その求めたハッシュ値からこの被検索データが、前記分類したグループのどのグループに属するかを特定する。その特定したグループ内の検索データ中から被検索データと一致する検索データを検索するようにしたのがハッシュ検索である。
【0005】
図3は、ハッシュ検索を説明するための説明図である。図3において、検索データテーブルTDは、m個のnバイトからなる検索データDSの集合で、予めハッシュ値を演算して、グループ化されたテーブルである。このグループ化は、各検索データブロックDBの中のネクストポインタPによって順次グループ内の次候補をリンクしてリストを構成している。各グループの最後のリストのポインタPはそれぞれ“0”にする。
【0006】
各グループの最初の検索データブロックDBのポインタPは、検索タグテーブルTTに書き込まれている。検索タグテーブルTTには、ハッシュ値HTをインデックス番号(アドレス)としてそのハッシュ値HTに対応する検索データテーブルTDの各グループの最初の検索データブロックDBのポインタPが書き込まれている。
【0007】
そして、入力データとしてnバイトの被検索データDXが入力されると、このnバイトの被検索データDXのハッシュ値HTを演算する。演算して得られたハッシュ値HTを前記検索データテーブルTDのインデックスとして、前記検索タグテーブルTTから同ハッシュ値HTと一致するグループの検索データDSの先頭ポインタPを獲得する。獲得した先頭のポインタPに基づいて、そのグループに属する検索データDSを検索する。
【0008】
グループに属する検索データDSと、被検索データDXとが一致すれば、検索一致となって検索が終了する。
このように、ハッシュ検索は、被検索データDXを所定桁数の素数で割り算した余りをハッシュ値HTとしたことから、検索候補を少なくでき、検索回数も減少し検索時間の短縮を図ることができる点で優れている。
【0009】
ところで、このハッシュ検索において、前記割り算の代わりにCRC(Cyclic Redundancy Check)演算を用いる方法もある。CRC演算は、ビット系列の割り算に相当することから、割り算と同じ性質を示すからである。そこで、通信装置においては、誤り訂正のために用いられるCRC符号器を備えていることから、このCRC符号器を用いたハッシュ検索が行なわれている(例えば、特許文献1参照)。
【0010】
ところで、実際に、ハッシュ検索する際、被検索データDXは、複数のデータフィールドからなる入力データ(通信フレーム)の一部分に含まれている。そのため、その被検索データDXの部分のCRC値(ハッシュ値)を演算する必要がある。
【0011】
例えば、図4に示すように、nビットの入力データDについて、先頭ビット(LSB)から(k1−1)ビット目までの領域のデータD1と先頭ビットから数えて(k2+1)ビット目から最終ビット(MSB)までの領域のデータD2とを被検索データDXとする。この被検索データDXのCRC値(ハッシュ値)を求める場合、CRCの線形性を利用して、以下のように演算する。
【0012】
先ず、nビットの入力データDについてのCRC値(ハッシュ値)を演算する。また、k1ビット目からk2ビット目までの第1ビット長としての領域(マスク領域)のデータD3のCRC値(ハッシュ値)を求める。このとき、nビット(全領域)のデータDのCRC値をCRCnとし、k1ビット目からk2ビット目までのマスク領域のデータD3のCRC値をCRCmとし、前記被検索データDXのCRC値(ハッシュ値)をCRCxとしたとき、以下の演算で求めることができる。
【0013】
CRCx=(CRCn)XOR(CRCm)
但し、「XOR」は排他的論理和
このとき、データD3のCRC値(=CRCm)の演算は、CRC符号器での演算において、先頭ビットから(k1−1)ビット目まではデータが「0」なので、CRC演算を行なう必要がなく、直ちにk1ビット目のデータを入力してCRC演算を行なう。しかしながら、k2ビット目までのCRC演算しても、引き続いて(k2+1)ビットから最終ビットまでの第2ビット長の「0」のデータを入力してCRC演算を行なう必要がある。「0」のデータであっても通常のデータと同じ演算量が必要なため、CRCmの演算に時間がかかるという問題があった。
【0014】
そこで、k1ビットからk2ビットまでの途中のCRC値に対して(k2+1)ビット目から最終ビットまでの「0」を入力した時の、値を予め演算しておく。そして、種々の途中までのCRC値に対して演算した結果をテーブル化し、そのテーブルを使用してマスク領域におけるデータD3のCRC値(=CRCm)を求める方法が考えられる。しかしながら、この方法では高速化が図れるが、例えば、マスク領域のビット数が大きい場合、パターン数が膨大となり大きなデータテーブルが必要となる。
【0015】
また、ガロア体の掛け算の原理を利用すること、即ち、ガロア符号器において、一つシフトさせることはガロア体の要素を1つ掛けることと同じあることから、「0」の数を次数とするガロア体の要素を積(掛け算)とすることで演算することができること知られている(例えば、特許文献2参照)。マスク領域のビット数(第1ビット長)が固定であって「0」の数(第2ビット長)も固定の場合、第2ビット長を次数Mとするガロア体の要素を1つ用意しておくだけで対応できる点で有利である。
【0016】
ガロア体GF(2r)は、計算法則を持った有限な数の集合体であって、r=4とすると、そのガロア体の要素(素数)の数は、16(=2r)個となる。そして、その非零の各元は、
α0,α1,α2,α3,…………………α14
で表される。そして、各元の値は1以上15以下の整数と1対1に対応している。
【0017】
ガロア体は、乗除算をはじめとする四則演算も全て完結するようになっている。例えば、α2×α3=α5、または、α10×α9=α19=α4となる。なお、α4の4は、19を15で割ったときの余りの数である。さらに、加減算は、ベクトル表現の排他的論理和(XOR)で行なうことができる。
【0018】
ガロア体の掛け算の一例を以下に説明する。例えば、ガロア体の要素であるα6とα7の積(掛け算)は、以下のように展開することができる。
図5は、そのガロア体掛け算器の一例を示す論理回路を示す。図5に示すガロア体掛け算器は、ビットパターンの組合わせの掛け算、即ち、積(AND)演算を行なう第1の演算部51と、第1の演算部51によって得られた演算結果についてそのビット単位の排他的論理和(XOR)演算を行なう第2の演算部52とからなる。
【0019】
そして、この掛け算器を使って前記図4で示したマスク領域のデータD3におけるCRC値(=CRCm)を演算する場合、第1レジスタ53に、k1ビット目からk2ビット目までのデータD3について演算した演算途中のCRC値であるガロア体の要素からなるNビットのビット列Diを入力する。一方、第2レジスタ54に、(k2+1)ビット目から最終ビットまでの「0」の数を次数とするガロア体の要素を示すNビットのビット列Sjを入力する。
【0020】
第1レジスタ53に入力されたビット列Diと第2レジスタ54に入力されたビット列Sjは、第1の演算部51に出力される。第1の演算部51に設けられた多数のアンドゲート回路51aにおいて、ビット列Diの各ビット毎に、ビット列Sjの各ビットに対してアンド計算を行なう。この時、各組み合わせの計算が同時に実行できるように、組合わせの数だけアンドゲート回路51aが設けられている。第1の演算部51の各アンドゲート回路51aで得られた結果は、第2の演算部52に出力される。第2の演算部52は、多数の排他的論理和ゲート回路(XOR回路)52aからなり、各XOR回路52aにて全てのビットパターンについて排他的論理和をすることにとって出力レジスタ55にデータD3におけるCRC値(=CRCm)が出力される。
【0021】
しかしながら、演算速度は高速になるが、アンド計算を行なう際の全ての組み合わせの数(N2個)だけアンドゲート回路51aが必要となり、回路規模が非常に大きくなる。
【0022】
そこで、回路規模を小さく構成することができるガロア体掛け算器を図6に示す。図6において、このガロア体掛け算器は、入力レジスタ61、シフトレジスタ62、アンドゲート回路63、排他的論理和ゲート回路64、及び、ガロア符号器65を備えている。
【0023】
今、ガロア符号器65のガロア符号器レジスタ65aが「0」に初期化されている状態で、入力レジスタ61に、前記図4で示したマスク領域のk1ビットからk2ビットまでのデータD3について演算した演算途中のCRC値であるガロア体の要素からなるNビットのビット列Diを入力する。又、シフトレジスタ62に、(k2+1)ビット目から最終ビットまでの「0」の数を次数とするガロア体の要素を示すNビットのビット列Sjを入力する。
【0024】
そして、シフトレジスタ62の最上位ビット(MSB)が「1」であるとき、排他的論理和ゲート回路64において、入力レジスタ61の内容(ビット列Di)とガロア符号器レジスタ65aの内容gとを排他的論理和の演算、すなわち、
g=gXOR(Di×(シフトレジスタ62のMSB))
但し、「×」は掛け算(Di各ビットとのアンド演算)
を行い、その結果を同ガロア符号器65に入力する。
【0025】
そして、ガロア符号器レジスタ65aの内容gを一回右(最上位側)に1ビットシフトする。又、シフトレジスタ62の内容(ビット列Sj)も同様に一回右にシフトする。そして、シフトレジスタ62の内容を一回右に1ビットシフトすることによって、同シフトレジスタ62の新たなMSBが「1」であれば、前記入力レジスタ61の内容と前記ガロア符号器レジスタ65aの内容gとを排他的論理和の演算、すなわち、
g=gXOR(Di×(シフトレジスタ62のMSB))
を行い、その結果を同ガロア符号器65に入力する。そして、ガロア符号器65の内容を一回右(最上位側)に1ビットシフトするとともに、シフトレジスタ62も同様に一回右に1ビットシフトする。
【0026】
そして、この演算を、シフトレジスタ62に初期セットした時に最下位ビット(LSB)のビットがMSBになって上記演算が行なわれるまで繰り返す。
そして、最後にガロア符号器65にて得られたガロア符号器レジスタ65aの内容g、すなわち、
g=gXOR(Dj×(シフトレジスタ62のMSB))
がデータD3のCRC値(=CRCm)となり出力される。
【0027】
このガロア掛け算器は、図5で説明したガロア掛け算器に比べて最大(N−1)回のシフト動作が加わる分だけ演算速度は劣るものの、回路規模を大幅に小さくできる。
【0028】
【特許文献1】
特開平09−218877号公報
【特許文献2】
特開平2002−207593号公報
【0029】
【発明が解決しようとする課題】
ところで、上記のようなハードウェアで、CRC値(=CRCm)を求めることができるが、ソフトウェアで実現することもできる。上記掛け算器等のハードウェアを新たに実装することなく、プログラムを追加するだけで実現することができる点で有利である。しかしながら、既存のCRC符号器を制御して、CRC値を求める場合、その(k2+1)ビットから最終ビットまでのビット数(第2ビット長)だけCRC符号器をシフトさせる必要があり、命令サイクル数が多くなり、その分時間を要していた。
【0030】
このように、ソフトウェアで実現する場合にも、命令サイクルが少なく演算が高速で処理されることが要求される。
図7は、前記CRC値(=CRCm)を既存のCRCエンジンを使って行われていた従来の演算処理するためのフローチャートである。なお、説明の便宜上、前記図4で示したマスク領域のデータD3におけるCRC値(=CRCm)を演算する場合を例にして説明する。このとき、特にことわりがない場合、ビットをバイト単位に変更して説明する。従って、データD3の領域(第1ビット長)はk1バイト目からk2バイト目までであって、(k+1)バイトから最終バイトまでの「0」とする。そして、(k+1)バイトから最終バイトまでのバイト数(第2ビット長)をKバイトとする。また、CRCエンジンのCRC符号器はNビットのものとする。
【0031】
図7において、ステップST1において、k1バイト目からk2バイト目までのデータD3についてCRC符号器を使ってCRC演算した演算途中のCRC値としてNビットのガロア体の要素(元)からなるビット列Diが求められると、ステップST2に移る。
【0032】
ステップST2に移ると、予め用意されたガロア体テーブルから、Kバイト分のビット数に相当する次数M(M=8×K)のガロア体の要素、すなわち、(k2+1)バイトから最終バイトまでの「0」の数(この場合、M=8×K)を次数とするガロア体の要素を示すNビットのビット列Sjを取り込む。
【0033】
次に、ステップST3において、このNビットのビット列Sjと先に求めたビット列Diとの間でビットシフト及び排他的論理和演算処理を行なう。
この演算処理は、Nビットのビット列Sjの各ビット中「1」であるビット位置を検索し、その位置がNビットのビット列Diの最下位ビットになるようにビット列Diをシフトし、各「1」であるビット数個配置し、これらを順次排他的論理和を行う。結果として、2N−1ビットのビット列が生成され、さらに最上位ビットに「0」である1ビットを追加して2Nビット列を生成する。
【0034】
ビット列Sjとビット列Diとの間でビットシフト及び排他的論理和演算処理が終了すると、ステップST4に移り、CRC符号器のレジスタの内容を一旦「0」に初期化する。続いて、ステップST5において、前記ビット列Sjの「1」との間でビットシフト及び排他的論理和演算処理で求めた2Nビットの演算結果の上位NビットをCRC符号器に順番に入力し、その結果に前記2Nビットの演算結果の下位Nビットを排他的論理和を行う。これによって、CRC符号器によって、マスク領域のデータD3のCRC値(=CRCm)が演算される(ステップST6)。
【0035】
ところで、前記ステップST3において行なわれるビット列Sjとビット列Diとの間で行なうビットシフト及び排他的論理和演算処理の命令サイクルは、「0」の数(この場合、M=8×K)を次数とするガロア体の要素を示すNビットのビット列Sj中の「1」となるビット数によって決まる。
【0036】
従って、16ビットのビット列Sjにおいて、「0」の数が多いほど命令数も少なくなる。しかしながら、ビット列Sj中の「0」の数は、(k+1)バイトから最終バイトまでの「0」の数(この場合、Kバイト)によって、一義的に決まる。従って、Kバイトの値が固定であって、そのビット列Sjの「1」の数が少なければ、命令サイクルは少なくて済み高速に処理することができる。しかしながら、そのビット列Sjの「1」の数が多ければ、命令サイクルは多くなり演算処理の高速を図れない。また、Kバイトが変動する場合は、ビット列Sj中の「1」の数がその時々で変動するため、命令サイクル数も変動する。
【0037】
従って、(k2+1)バイトから最終バイトまでのバイト数に左右されないで、全体として命令サイクルの数を少なくでき演算処理の高速化を図ることができる演算処理方法が求められる。
【0038】
本発明は、上記問題点を解消するためになされたものであって、その目的はCRC符号器を使ったガロア掛け算装置であって排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができるガロア体掛け算器の制御方法を提供するにある。
【0039】
【課題を解決するための手段】
請求項1に記載の発明は、任意のガロア体の要素からなるNビットの第1ビット列と次数Mのガロア体の要素を示すNビットの第2ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をCRC符号器を使って、前記第1ビット列と前記第2ビット列とのとのガロア体掛け算を行うガロア体掛け算器の制御方法において、必要な次数のガロア体の要素の中から、そのビット列中のビット「1」の数が少ない前記次数Mのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、前記次数Mより小さい前記基準次数ビット列を読み出すとともに、前記次数Mから前記読み出した基準次数を引いた残り次数を求め、前記第1ビット列で初期化したCRC符号器に、その残り次数に相当するビット数分だけ「0」を入力し、CRC演算を行い、そのCRC演算結果と前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とCRC符号器を使用して前記ガロア体掛け算を行うようにしたことをその要旨とする。
【0040】
請求項2に記載の発明は、任意のガロア体の要素からなるNビットの第1ビット列と次数Mのガロア体の要素を示すNビットの第2ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をCRC符号器を使って、前記第1ビット列と前記第2ビット列とのガロア体掛け算を行うガロア体掛け算器の制御方法において、必要な次数のガロア体の要素の中から、そのビット列中のビット「1」の数が少ない前記次数Mのガロア体の要素を示すビット列を基準次数ビット列としてメモリに予め用意し、前記次数Mより小さい前記基準次数ビット列を読み出すとともに、前記次数Mから前記読み出した基準次数を引いた残りの次数を求め、前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とCRC符号器を使用してガロア体掛け算を行い、その後に、前記ガロア体掛け算結果に設定されているCRC符号器に、その残り次数に相当するビット数分だけ「0」を入力し、CRC演算を行い、最終ガロア体掛け算結果を得ることをその要旨とする。
【0041】
請求項3に記載の発明は、請求項1又は2に記載のガロア体掛け算器の制御方法において、前記基準次数は複数設けられ、それら各基準次数に対するビット列がそれぞれメモリに予め用意されていることをその要旨とする。
【0042】
請求項4に記載の発明は、請求項3に記載のガロア体掛け算器の制御方法において、前記メモリから読み出される次数Mより小さい基準次数のビット列は、次数Mより小さく且つ次数Mに最も近い基準次数のビット列であることをその要旨とする。
【0043】
(作用)
請求項1に記載の発明によれば、次数Mに基づいて基準次数とその基準次数に対するビット列が読み出されるとともに、残り次数が求められる。そして、残り次数だけ、CRC符号器を使って第1ビット列をシフト動作させてCRC演算し、そのCRC演算結果と基準次数のビット列Sjを使ってビットシフト及び排他的論理和演算処理を行なうようにした。
【0044】
従って、演算処理ための命令サイクル数の少ない基準次数のビット列を使ってビットシフト及び排他的論理和演算処理を行なうことができる。
請求項2に記載の発明によれば、次数Mに基づいて基準次数とその基準次数に対するビット列が読み出されるとともに、残り次数を求められる。そして、その読み出した基準次数に対するビット列と前記第1ビット列との間でビットシフト及び排他的論理和演算処理し、その演算結果を前記残り次数に基づいてCRC演算を行なうようにした。
【0045】
従って、演算処理ための命令サイクル数の少ない基準次数のビット列を使ってビットシフト及び排他的論理和演算処理を行なうことができる。
請求項3に記載の発明によれば、複数の基準次数とその基準次数に対するビット列を設定したことにより、次数Mがどんな値となっても最適な基準次数を選択することができ、残り次数を小さくし、CRC演算のシフト回数を少なくすることができる。
【0046】
請求項4に記載の発明によれば、前記メモリから読み出される基準次数は、次数Mより小さい基準次数であることから、第2ビット列に最終ビットに最も近い基準次数が選択される。その結果、残り次数を小さくし、CRC演算のシフト回数を少なくすることができる。
【0047】
【発明の実施の形態】
次に、本発明を具体化した一実施形態を図面に従って説明する。図1はルータ等の通信装置に実装された信号処理装置の電気的構成を説明するためのブロック回路図を示す。なお、本実施形態においても、説明の便宜上、前記図4で示したマスク領域のデータD3におけるCRC値(=CRCm)を演算する場合を例にして説明する。このとき、特にことわりがない場合、前記と同様に、ビットをバイト単位に変更して説明する。従って、データD3の領域(第1ビット長)はk1バイト目からk2バイト目までであって、(k+1)バイトから最終バイトまでの「0」とする。そして、(k+1)バイトから最終バイトまでのバイト数をKバイトとする。
【0048】
図1において、信号処理装置10は、ALU11、レジスタ群12、CRCエンジン13及びメモリ14を備え、これらは互いにバスB1,B2を介して信号の授受が行われる。ALU11は、本実施形態では前記メモリ14に記憶したプログラムに従って、レジスタ群12と協働して通信のための各種の信号処理を行う。CRCエンジン13は、通信装置に入力されてくる入力信号の誤り訂正のためのCRC(Cyclic Redundancy Check)の演算を実行するエンジンであって、Nビット(本実施形態では16ビットとする)のCRC符号器を備えている。
【0049】
また、CRCエンジン13は、CRCを使ったハッシュ検索のためのCRC演算を、ALU11に従って実行する。この場合のハッシュ検索のCRC演算は、図4に示したマスク領域のk1〜k2バイトまでのデータD3と(k1+1)バイトから最終バイトまでが全て「0」となるデータ列のCRC値(=CRCm)の演算である。即ち、k1〜k2バイトまでのデータD3について演算した演算途中のCRC値であるガロア体の要素からなるNビット(本実施形態では16ビット)のビット列Diと、(k2+1)バイトから最終バイトまでの「0」の数を次数Mとするガロア体の要素を示すNビット(本実施形態では16ビット)のビット列Sjとの間でビットシフト及び排他的論理和演算処理を行なう演算である。
【0050】
メモリ14は、ALU11を信号処理を実行させるためのプログラムを記憶するとともに、前記ハッシュ検索のためのCRC演算を実行させるためのプログラムを記憶している。
【0051】
また、メモリ14には、Nビット(16ビット)からなるガロア体の要素が記憶されている。このメモリ14に記憶されるガロア体の要素は、前記16ビットのビット列Diとの間でビットシフト及び排他的論理和演算処理を行なう際に使う前記16ビットのビット列Sjであって、予め定めた数のガロア体の要素が記憶されている。ここで、ハッシュ検索を行なうデータ領域を64バイトとする。その範囲で、本計算をする場合、最大64個のガロア体の要素が必要になるが、本実施形態では、メモリ14には予め定めた3個のガロア体の要素のビット列についてのみ記憶させている。そして、本実施形態では、この3個のガロア体の要素は、以下のように求めている。一般に、使用されている16ビットのCRC符号器の生成多項式は、CRC16とCCITT16ビットの2種類あり、以下の生成多項式で示される。
【0052】
CRC16:X16+X15+X2 +1
CCITT:X16+X12+X5 +1
ここで、1バイトから64バイトまでの範囲において、その各バイト数に対する「0」の数を次数とするガロア体の要素を示す16ビットのビット列Sjを、前記2種類の生成多項式毎に予め演算する。
【0053】
また、64バイトの範囲を4分割すると、その区切り値は、16、32、48となり、各区切りバイト数に対する前記演算したビット列Sj中のビット「1」の数をそれぞれのCRC符号器に生成多項式ごとに比較する。この「1」の数は、CRC16では、16、32、48次数で、それぞれ3、3、9個、CCITTでは、それぞれ11、7、9個となる。
【0054】
また、区間を1ずらして、区切りの次数を15、31、47とした場合では、CRC16で、3、3、5個であり、一方、CCITTでは、9、7、9個となる、ここで、「1」の数が少ないビット列SjとなるCRC符号器の生成多項式と区切りの次数を選択する。この場合、CRC符号器はCRC16とし、区切りの次数は、15、31、47を選択する。
【0055】
そして、本実施形態では、これら予め演算して得た結果から、15、31、47バイト(これらを総称して基準次数という)に対する「0」の数を次数とするガロア体の要素を示す16ビットのビット列Sjがそれぞれ記憶されている。従って、これら15、31、47バイトにおけるビット列Sjと前記16ビットのビット列Diとの間でビットシフト及び排他的論理和演算処理を行なう場合、他のバイト数におけるビット列Sjとの演算に比べ、ALU11の処理動作回数は非常に少なく短時間で演算結果が得られることになる。
【0056】
次に、上記のように構成した信号処理装置10の作用を図2に示すフローチャートに従って説明する。
図2において、信号処理装置10は、ステップST11において、CRCエンジン13のCRC符号器を使ってk1〜k2バイト目までのデータD3についてCRC演算した演算途中のCRC値として16ビットのガロア体の要素からなるビット列Diを求めると、ステップST12に移る。
【0057】
ステップST12に移ると、信号処理装置10は(k2+1)バイトから最終バイトまでのバイト数Kを求める。そして、そのバイト数Kに相当する次数Mと前記メモリ14に記憶した前記各基準次数と比較する。そして、各基準次数の中から、バイト数Kに相当する次数Mと一致するものがあれば、その一致する基準次数を選択する。
【0058】
また、一致するものがない場合には、各基準次数の中から、バイト数Kに相当する次数Mより小さくかつその次数Mに最も近い基準次数を選択する。この時、前記次数Mを、各基準次数の中から選択された基準次数で引いて残りのバイト数(以下、残り次数Rという)を求める。
【0059】
ここで、説明の便宜上、(k2+1)バイトから最終バイトまでのバイト数K(次数M)が33バイトとすると、15、31、47バイトからなる基準次数の中から31バイトの基準次数が選択されるとともに、残り次数Rが2バイトとなる。
【0060】
基準次数と残り次数Rが求まると、ステップST13に移り、前記ステップST11で求めた、16ビットのビット列Diを、初期値としてCRCエンジン13の16ビットCRC符号器に入力した後、そのCRC符号器を前記求めた残り次数Rである2バイト分シフト動作させる。これによって、2バイト分の「0」の数を次数とするガロア体の要素を示す16ビットのビット列SjとのCRC演算が終了することになる。
【0061】
続いて、ステップST14に移り、前記求めた31バイトの基準次数のビット列Sjをメモリ14から読み出す。そして、この読み出したビット列Sjと、ステップST13で求めた演算結果との間で、ビットシフト及び排他的論理和演算処理を実行する。
【0062】
この演算処理は、基準次数のビット列Sjの各ビット中「1」であるビット位置を検索し、その位置が16ビットのビット列Diの最下位ビットになるようにビット列Diをシフトし、各「1」であるビット数個配置し、これらを順次排他的論理和を行う。結果として、2N−1ビット(31ビット)のビット列が生成され、さらに最上位ビットに「0」である1ビットを追加して2N(=32)ビット列を生成する。
【0063】
この時、31バイトの基準次数のビット列Sjは、ビット列Sj中の「0」の数が多く「1」の数が3個と少ないため、ALU11の処理動作回数は非常に少なく短時間で演算結果が得られることになる。
【0064】
ビット列Sjとビット列Diとの間でビットシフト及び排他的論理和演算処理が終了すると、ステップST15に移り、CRC符号器のレジスタの内容を一旦「0」に初期化する。続いて、ステップST16において、前記ビット列Sjの「1」との間でビットシフト及び排他的論理和演算処理で求めた32ビットの演算結果の上位16ビットをCRC符号器に順番に入力する。続いて、その結果に前記32ビットの演算結果の下位16ビットを排他的論理和を行う。これによって、CRC符号器によって、マスク領域のデータD3のCRC値(=CRCm)が演算される(ステップST17)。
【0065】
そして、この得られたデータD3のCRC値(=CRCm)と、入力データD全体のCRC値(=CRCn)とを、排他的論理和することによって、被検索データDXのCRC値(=CRCx=CRCn XOR CRCm)を求めることができる。この被検索データDXのCRC値(=CRCx)が求められると、信号処理装置10は、メモリ14に予め記憶した検索タグデーブルTT及び検索データテーブルTDを使って、被検索データDXに対する検索データDSを検索することになる。
【0066】
このように、本実施形態のルータ等の通信装置の信号処理装置10によれば、1バイトから64バイトまでの範囲において、その各バイト数に対する「0」の数を次数とするガロア体の要素を示す16ビットのビット列Sjを選択可能なCRC符号器の生成多項式ごとにそれぞれ予め演算する。1バイトから64バイトまでの範囲を均等に区切り、各区切りバイト数に対する「0」の数を次数とするガロア体の要素を示す16ビットのビット列Sj中の「1」の数の少ないビット列SjとなるCRC符号器の生成多項式と区切りの次数を選択し、この区切りの次数を基準次数としてそのビット列Sjをメモリ14に記憶するようにした。
【0067】
そして、k1〜k2バイト目までがデータD3で、(k2+1)バイトから最終バイトまでが全て「0」となるCRC値(=CRCm)を演算する前段階の、k1〜k2バイト目までのビット列Diと(k2+1)バイトから最終バイトまでのビット列Sjとの間でのビットシフト及び排他的論理和演算処理について、(k2+1)バイトから最終バイトまでのバイト数K、即ち、次数Mを求める。その求めた次数Mから予め用意した演算処理回数の少ない複数の基準次数から1つを選ぶとともに、残り次数Rを求める。
【0068】
そして、残り次数R分だけ、CRCエンジン13を使ってビット列Diをシフト動作させて、その残り次数R分だけCRC演算させる。続いて、そのCRC演算結果と基準次数のビット列Sjを使ってビットシフト及び排他的論理和演算処理を行なうようにした。
【0069】
従って、演算処理回数の少ない基準次数のビット列Sjを使って排他的論理和の演算処理を行なうことができるため、ALU11が実行する命令サイクルの数は非常に少なくなり短時間で演算結果が得られることになる。
【0070】
つまり、本実施形態のルータ等の通信装置の信号処理装置10によれば、回路規模拡張することなく、プログラムを追加するだけでCRCのハッシュ検索ための排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができる。
【0071】
しかも、メモリ14には、3個の基準次数に対するビット列Sjのデータが記憶されるだけなので、メモリ14の大記憶容量化を抑制することができる。
尚、本発明の実施形態は、以下のように変更してもよい。
【0072】
上記実施形態では、基準次数は3個であったが、適宜変更して実施してもよい。この基準次数を増やすと、区切りの間隔が短くなり、残り次数Rの最大値が小さくなり、残り次数Rに対するCRC符号器の演算量が減るため、高速化が図れる。また、メモリ14には、基準次数に対するビット列Sjそのものを記憶させるのではなく、各ビット列Sjを用いたビットシフト及び排他的論理和演算処理プログラムそのものを記憶させておくことにより、基準次数選択時にプログラム自体を選択することにより、さらに高速化が図れる。特に、基準次数の数が少ない場合は、各次数のプログラム自体を記憶させてもメモリの容量の肥大化を抑制することができる。
【0073】
又、上記実施形態では、残り次数Rに基づく演算動作を、基準次数に基づく演算動作より先に実行した。これを、基準次数に基づく演算動作を先に実行した後に、残り次数Rに基づく演算動作を実行させるようにしてもよい。この場合にも前記実施形態と同様な効果を奏する。
【0074】
前記実施形態では、説明の便宜上、バイト数Kを64バイトで説明したが、これに限定されるものではない。例えば、バイト数Kがどんな値になっても対応できる汎用性のある信号処理装置に応用してもよい。
【0075】
【発明の効果】
以上詳述したように、本発明によれば、CRC符号器を用いたガロア体の掛け算を回路規模を拡張することなく排他的論理和演算処理を少ない命令サイクル数で行なうことができ高速化を図ることができる。
【図面の簡単な説明】
【図1】第1実施形態の通信装置の信号処理装置を説明するためのブロック回路図。
【図2】 信号処理装置の作用を説明するためのフローチャート。
【図3】 ハッシュ検索を説明するための説明図。
【図4】 ハッシュ検索にための被検索データのデータ構造とその求め方を説明するための説明図。
【図5】 従来のガロア符号器を使ったガロア体掛け算器を説明するためのブロック回路図。
【図6】 同じく従来のガロア符号器を使ったガロア体掛け算器を説明するためのブロック回路図。
【図7】 従来の信号処理装置の作用を説明するためのフローチャート。
【符号の説明】
10…信号処理装置
11…ALU
12…レジスタ群
13…CRCエンジン
14…メモリ
D3…データ
Di…第1ビット列としてのビット列
Sj…第2ビット列としてのビット列
R…残り次数
M…次数
Claims (4)
- 任意のガロア体の要素からなるNビットの第1ビット列と次数Mのガロア体の要素を示すNビットの第2ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をCRC符号器を使って、前記第1ビット列と前記第2ビット列とのガロア体掛け算を行うガロア体掛け算器の制御方法において、
必要な次数のガロア体の要素の中から少なくとも1個のガロア体の要素のビット列を複数の生成多項式を用いて該生成多項式毎に演算し、前記複数の生成多項式の中からビット「1」の数がより少ないビット列となる生成多項式を選択してそのビット列を基準次数ビット列としてメモリに予め用意し、
前記次数Mより小さい前記基準次数ビット列を読み出すとともに、前記次数Mから前記読み出した基準次数を引いた残り次数を求め、前記第1ビット列で初期化したCRC符号器に、その残り次数に相当するビット数分だけ「0」を入力し、CRC演算を行い、そのCRC演算結果と前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とCRC符号器を使用して前記ガロア体掛け算を行うようにしたことを特徴とするガロア体掛け算器の制御方法。 - 任意のガロア体の要素からなるNビットの第1ビット列と次数Mのガロア体の要素を示すNビットの第2ビット列とでビットシフト及び排他的論理和演算処理を行い、その演算結果をCRC符号器を使って、前記第1ビット列と前記第2ビット列とのガロア体掛け算を行うガロア体掛け算器の制御方法において、
必要な次数のガロア体の要素の中から少なくとも1個のガロア体の要素のビット列を複数の生成多項式を用いて該生成多項式毎に演算し、前記複数の生成多項式の中からビット「1」の数がより少ないビット列となる生成多項式を選択してそのビット列を基準次数ビット列としてメモリに予め用意し、
前記次数Mより小さい前記基準次数ビット列を読み出すとともに、前記次数Mから前記読み出した基準次数を引いた残りの次数を求め、前記読み出した基準次数に対するビット列との間でビットシフト及び排他的論理和演算処理をした後に、その演算結果とCRC符号器を使用してガロア体掛け算を行い、その後に、前記ガロア体掛け算結果に設定されているCRC符号器に、その残り次数に相当するビット数分だけ「0」を入力し、CRC演算を行い、最終ガロア体掛け算結果を得ることを特徴とするガロア体掛け算器の制御方法。 - 請求項1又は2に記載のガロア体掛け算器の制御方法において、
前記基準次数は複数設けられ、それら各基準次数に対するビット列がそれぞれメモリに予め用意されていることを特徴とするガロア体掛け算器の制御方法。 - 請求項3に記載のガロア体掛け算器の制御方法において、
前記メモリから読み出される次数Mより小さい基準次数のビット列は、次数Mより小さく且つ次数Mに最も近い基準次数のビット列であることを特徴とするガロア体掛け算器の制御方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002299354A JP4057876B2 (ja) | 2002-10-11 | 2002-10-11 | ガロア体掛け算器の制御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2002299354A JP4057876B2 (ja) | 2002-10-11 | 2002-10-11 | ガロア体掛け算器の制御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004135172A JP2004135172A (ja) | 2004-04-30 |
JP4057876B2 true JP4057876B2 (ja) | 2008-03-05 |
Family
ID=32288515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2002299354A Expired - Fee Related JP4057876B2 (ja) | 2002-10-11 | 2002-10-11 | ガロア体掛け算器の制御方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4057876B2 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747105B2 (en) * | 2009-12-17 | 2017-08-29 | Intel Corporation | Method and apparatus for performing a shift and exclusive or operation in a single instruction |
US8607129B2 (en) * | 2011-07-01 | 2013-12-10 | Intel Corporation | Efficient and scalable cyclic redundancy check circuit using Galois-field arithmetic |
WO2013051139A1 (ja) * | 2011-10-06 | 2013-04-11 | 株式会社日立製作所 | 有限体上の乗算方法、計算機、およびプログラム |
US20210279055A1 (en) * | 2020-03-03 | 2021-09-09 | Nvidia Corporation | Technique for performing bit-linear transformations |
-
2002
- 2002-10-11 JP JP2002299354A patent/JP4057876B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004135172A (ja) | 2004-04-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5456766B2 (ja) | プログラム可能なプロセッサにおける随意選択的なガロア域計算の実行 | |
JPS59123945A (ja) | 多数バイトエラ−訂正システム | |
JPS59124011A (ja) | 多数バイトエラ−訂正システム | |
JP3238128B2 (ja) | リードソロモン符号化装置および方法 | |
CN102096609A (zh) | 可编程循环冗余校验(crc)计算的指令集架构 | |
TW200522531A (en) | High performance CRC calculation method and system with a matrix transformation strategy | |
JPH05127934A (ja) | 周期的冗長チエツク符号生成の方法および装置 | |
JP4057876B2 (ja) | ガロア体掛け算器の制御方法 | |
JP2000004169A (ja) | Crc演算方法及びcrc演算回路 | |
US20020002694A1 (en) | Coding apparatus | |
JP3394781B2 (ja) | トランスフォームを生成する方法および装置 | |
JP3614978B2 (ja) | ガロア体の除算方法および除算装置 | |
JPH06314978A (ja) | チェン・サーチ回路 | |
JP4313555B2 (ja) | ガロア体掛け算器及び通信装置 | |
JP3417286B2 (ja) | 乗算器 | |
JP5550413B2 (ja) | Crc演算回路 | |
JPH06244740A (ja) | 誤り訂正回路 | |
JPH0385923A (ja) | Crc演算方式 | |
US11489544B2 (en) | Fast CRC computation circuit using an on-the-fly reconfigurable generator polynomial | |
JP2008112522A (ja) | 誤り検出装置および誤り検出方法 | |
JP3539077B2 (ja) | 並列演算方式による除算方法 | |
JPH03119835A (ja) | 誤り訂正回路 | |
JPS623619B2 (ja) | ||
CN113068046A (zh) | Mpeg-2同步字节解码器中伴随式的并行产生装置 | |
JPH06252777A (ja) | 巡回符号器、巡回符号復号器及び巡回符号初期値設定方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20040927 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050922 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070605 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070831 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20071204 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20071214 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101221 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |