JP2009301265A - 倍数判定方法、倍数判定装置および倍数判定プログラム - Google Patents
倍数判定方法、倍数判定装置および倍数判定プログラム Download PDFInfo
- Publication number
- JP2009301265A JP2009301265A JP2008154002A JP2008154002A JP2009301265A JP 2009301265 A JP2009301265 A JP 2009301265A JP 2008154002 A JP2008154002 A JP 2008154002A JP 2008154002 A JP2008154002 A JP 2008154002A JP 2009301265 A JP2009301265 A JP 2009301265A
- Authority
- JP
- Japan
- Prior art keywords
- quotient
- integer
- bits
- value
- approximate
- 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.)
- Withdrawn
Links
Images
Abstract
【課題】 少ない計算量で高速に倍数判定を実施する。
【解決手段】 近似商算出処理(S10)において、第1整数(A)を第2整数(N)で割った場合の真の商に対する近似の商について、2のべき乗を第2整数で割った場合の商を用いて、真の商および近似の商の関係に基づく所定のビット数分の下位ビットの値が算出される。仮定商算出処理(S20)において、第1整数は第2整数で割り切れると仮定した場合の商について、所定のビット数分の下位ビットの値が算出される。判定処理(S30)において、近似商算出処理および仮定商算出処理の算出値の差が真の商および近似の商の関係に基づく所定の上限値より大きい場合に、第1整数は第2整数の倍数ではないと判定される。
【選択図】 図1
【解決手段】 近似商算出処理(S10)において、第1整数(A)を第2整数(N)で割った場合の真の商に対する近似の商について、2のべき乗を第2整数で割った場合の商を用いて、真の商および近似の商の関係に基づく所定のビット数分の下位ビットの値が算出される。仮定商算出処理(S20)において、第1整数は第2整数で割り切れると仮定した場合の商について、所定のビット数分の下位ビットの値が算出される。判定処理(S30)において、近似商算出処理および仮定商算出処理の算出値の差が真の商および近似の商の関係に基づく所定の上限値より大きい場合に、第1整数は第2整数の倍数ではないと判定される。
【選択図】 図1
Description
本発明は、倍数判定方法、倍数判定装置および倍数判定プログラムに関する。
ある整数Aが別の整数Nの倍数であるか否かを判定する倍数判定は、データ転送処理、暗号処理、信号処理、画像処理、画像圧縮/伸長処理やグラフィックス処理等で使用されている。例えば、ネットワークを介してMPEG−2TS(Moving Picture Experts Group phase 2 Transport Stream)により動画像データや音声データを伝送するシステムでは、送信側で動画像データや音声データのエンコードにより生成されたMPEG−2TSが複数のパケット(バイト長:188)に分割して送信され、受信側で受信データのバイト長が188の倍数であるか否かの倍数判定を用いて伝送エラーの有無が検証される。また、暗号技術には、暗号化用の鍵および復号用の鍵が同一である共通鍵暗号方式と暗号化用の鍵および復号用の鍵が異なる公開鍵暗号方式とがあり、公開鍵暗号方式で鍵に用いられる素数を生成する際に倍数判定が使用される。
倍数判定の従来手法としては、整数Aを整数Nで割った場合の剰余Rを除算により求めて剰余Rが0であるか否かを判定する手法が知られている。この手法では、回復法、非回復法やSRT法等の除算を用いることで、計算量を削減することが可能である。また、別の従来手法としては、モンゴメリ法等の剰余算を使用し、整数Aを整数Nで割った場合の剰余Rを除算ではなく主に乗算により求めて剰余Rが0であるか否かを判定する手法が知られている。この手法では、除算が乗算に置き換えられることで、計算量が削減されるという利点がある。
なお、倍数判定回路に関しては、クロック周波数の高速化、入力信号等のビット数に対する回路規模の増大の抑制や演算時間の低減を実現するための技術が考案されている(例えば、特許文献1を参照)。また、除算装置に関しては、除数および被除数の特性に拘わらず高速に除算を実施するための技術が考案されている(例えば、特許文献2を参照)。モンゴメリ・リダクション装置に関しては、モンゴメリ・リダクションを少ない計算量で実現するための技術が考案されている(例えば、特許文献3を参照)。
特開平10−307707号公報
特開平5−257650号公報
特開2000−10479号公報
倍数判定において、回復法、非回復法やSRT法等の除算を使用した従来手法では、加減算の回数を少なくすることはできるものの、除算を実施するため、非常に大きな多倍長数に関する倍数判定等にはある程度の計算量が必要になる。また、倍数判定において、モンゴメリ法等の剰余算を使用した従来手法では、剰余を効率的に求めることはできるが、計算量が十分に削減されるとは言い難い。
本発明は、このような問題に鑑みてなされたものであり、少ない計算量で高速に倍数判定を実施することを目的とする。
第1整数を第2整数で割った場合の真の商に対する近似の商について、2のべき乗を第2整数で割った場合の商を用いて、真の商および近似の商の関係に基づく所定のビット数分の下位ビットの値が算出される(近似商算出工程)。第1整数は第2整数で割り切れると仮定した場合の商について、所定のビット数分の下位ビットの値が算出される(仮定商算出工程)。近似商算出工程および仮定商算出工程の算出値の差が真の商および近似の商の関係に基づく所定の上限値より大きい場合に、第1整数は第2整数の倍数ではないと判定される(判定工程)。
近似商算出工程、仮定商算出工程および判定工程は除算や剰余算を使用することなく簡易な演算により実現されるため、少ない計算量で高速に倍数判定を実施することができる。
以下、本発明の実施形態について図面を用いて説明する。
図1は、本発明の一実施形態を示している。本発明の一実施形態において、倍数判定処理は、近似商算出処理(ステップS10)、仮定商算出処理(ステップS20)および判定処理(ステップS30)を含んでいる。詳細については後述するが、近似商算出処理では、整数Aを整数Nで割った場合の真の商Qtに対する近似の商Qaについて、所定のビット数(整数Aのビット数を2進表現した際のビット数以上)分の下位ビットの値が算出される。仮定商算出処理では、整数Aは整数Nで割り切れると仮定した場合の商Qpについて、所定のビット数分の下位ビットの値が算出される。判定処理では、仮定商算出処理および近似商算出処理の算出値の差が所定の上限値(整数Aのビット数)より大きい場合に、整数Aは整数Nの倍数ではないと判定される。
なお、整数A、Nの双方が偶数である場合には、整数A、Nを「2k×A’」、「2k×N’」(A’、N’の少なくとも一方は奇数)に置き換えることができ、整数A’、N’に関する倍数判定の結果を整数A、Nに関する倍数判定の結果として使用することができる。また、整数Aが奇数であり整数Nが偶数である場合には、整数A、Nの最下位ビットを参照するだけで、整数Aは整数Nの倍数ではないと判定することができる。従って、ここでは、整数Nは奇数であるものとする。
図2は、倍数判定処理を具現するハードウェアの構成例を示している。図1の倍数判定処理(ステップS10〜S30)は、例えば、図2(a)、(b)に示すようなハードウェア構成により具現される。図2(a)のハードウェア構成では、プログラムに従って各種処理を実施するCPU(Central Processing Unit)11と、CPU11により実行される各種プログラム(倍数判定用プログラムを含む)やCPU11により使用される各種データを格納するメモリ装置12とが設けられており、CPU11により図1の倍数判定処理が実現される。図2(b)のハードウェア構成では、プログラムに従って各種処理を実施するCPU21と、CPU21により実行される各種プログラムやCPU21により使用される各種データを格納するメモリ装置22と、CPU21に代わって倍数判定処理を実施する倍数判定装置23とが設けられており、倍数判定装置23により図1の倍数判定処理が実現される。
図3は、MPEG−2TS伝送システムの一例を示している。図1の倍数判定処理(ステップS10〜S30)は、例えば、図3に示すようなMPEG−2TS伝送システムにおいて使用される。MPEG−2TS伝送システム30では、送信装置31および受信装置32がネットワーク33を介して接続されている。送信装置31においては、動画像データや音声データのエンコード処理によりMPEG−2TSが生成され、そのMPEG−2TSが複数のパケット(バイト長:188)に分割される。そして、複数のパケットをバッファリングして送信データが生成され、所望のタイミングでネットワーク33に送信データが出力される。受信装置32においては、ネットワーク33を介して送信装置31からデータを受信すると、受信データのバイト長および188に関する倍数判定(図1の倍数判定処理を使用)によるデータ長エラーチェックが実施され、その後、その他のエラーチェックが実施される。各種エラーチェックで伝送エラーが検出された場合には、受信データが破棄される。一方、各種エラーチェックで伝送エラーが検出されなかった場合には、続いて、MPEG−2TSのデコード処理が実施される。
図4は、素数生成システムの一例を示している。図1の倍数判定処理(ステップS10〜S30)は、MPEG−2TS伝送システムだけでなく、例えば、図4に示すような素数生成システムにおいても使用される。素数生成システム40は、乱数生成部41、ふるい処理部42(演算部43およびメモリ部44を具備)および素数判定部45を有している。乱数生成部41は、奇数をランダムに生成して素数候補としてふるい処理部42に出力する。ふるい処理部42において、演算部43は、メモリ部44に予め格納されている小さな素数(3、5、7、11、13、17、19、・・・)を読み出し、乱数生成部41から出力された素数候補およびメモリ部44から読み出された素数に関する倍数判定(図1の倍数判定処理を使用)を実施する。乱数生成部41から出力された素数候補はメモリ部44から読み出された素数の倍数ではないと判定されなかった場合、乱数生成部41から出力された素数候補が合成数であるため、演算部43は、乱数生成部41に対して素数候補の再出力を要求する。一方、乱数生成部41から出力された素数候補はメモリ部44から読み出された素数の倍数ではないと判定された場合、演算部43は、素数候補を素数判定部45に出力する。素数判定部45は、ふるい処理部42(演算部43)から出力された素数候補が素数であるか否かを判定する。ふるい処理部42から出力された素数候補は素数ではないと判定された場合(ふるい処理部42から出力された素数候補は合成数であると判定された場合)、素数判定部45は、乱数生成部41に対して素数候補の再出力を要求する。一方、ふるい処理部42から出力された素数候補は素数ではないと判定されなかった場合、素数判定部45は、素数候補を実用素数として出力する。
図5は、近似商算出処理の詳細を示している。図1の近似商算出処理(ステップS10)では、例えば、図5に示すような処理フローにより、整数Aを整数Nで割った場合の真の商Qtに対する近似の商Qaの下位iビット(Qa[i−1:0])の値が算出される。近似商算出処理では、まず、整数A、整数Aのビット数a、整数Nおよび商に関する算出ビット数iが入力される(ステップS101)。次に、変数jの値が0に設定されるとともに、変数Qaの全要素の値が0に設定される(ステップS102)。そして、変数jの値が入力値aと一致するか否かが判定される(ステップS103)。ステップS103で変数jの値は入力値aと一致しないと判定されると、入力値A[a−j−1]が1であるか否かが判定される(ステップS104)。ステップS104で入力値A[a−j−1]は1であると判定された場合には、変数Qa[i−1:0]の値に2の(a−j−1)乗を整数Nで割った場合の商の下位iビットの値が足されて変数Qa[i−1:0]の値が更新される(ステップS105)。一方、ステップS104で入力値A[a−j−1]は1ではないと判定された場合には、変数Qa[i−1:0]の値は更新されない。そして、変数jの値がインクリメントされる(ステップS106)。この後、ステップS103で変数jの値が入力値aと一致するか否かが再び判定される。即ち、ステップS103で変数jの値は入力値aと一致すると判定されるまでステップS103〜S106が繰り返し実施される。ステップS103で変数jの値は入力値aと一致すると判定されると、変数Qaの値が出力される(ステップS107)。
なお、2の(a−j−1)乗を整数Nで割った場合の商は、2のa乗を整数Nで割った場合の商Qwに基づいて算出される。2の(a−1)乗を整数Nで割った場合の商は、商Qwに対して1ビット分の右シフトを実施した結果(Qw>>1)である。また、2の(a−2)乗を整数Nで割った場合の商は、商Qwに対して2ビット分の右シフトを実施した結果(Qw>>2)である。即ち、2の(a−p)乗を整数Nで割った場合の商は、商Qwに対してpビット分の右シフトを実施した結果(Qw>>p)である。これを利用して、2の(a−j−1)乗を整数Nで割った場合の商が算出される。また、2のa乗を整数Nで割った場合の商Qwについては、メモリ等により予め保持していてもよいが、フェルマー/オイラーの定理に基づき、2のべき乗を整数Nで割った場合の商の値は整数Nに依存したべき乗値を境に巡回することを利用して、整数Nの条件に応じて容易に算出することができる。
図6は、2のべき乗を11で割った場合の商および剰余の関係を示している。例えば、整数Aのビット数aおよび整数Nが11であるときに2のa乗を整数Nで割った場合の商Qwを算出することを考える。2のべき乗を11で割った場合の剰余および剰余の奇遇性は図6に示すようになり、2の1乗から2の11乗までを11で割った場合の剰余の奇遇性が2の11乗を11で割った場合の商Qw(11’b00010111010)に対応する。また、2のm乗を11で割った場合の剰余と2の(m+10)乗を11で割った場合の剰余とは同一になる。従って、2の11乗を11で割った場合の商Qwについては、2の0乗から2の9乗までを11で割った場合の剰余の奇遇性に対応する値から容易に算出することができる。
このように、2のa乗を整数Nで割った場合の商Qwについては、2の0乗から2の(N−2)乗までを整数Nで割った場合の剰余の奇遇性に対応する値を予め保持していれば、ビットローテーション等を使用して容易に算出することができる。整数Nが小さい場合には、2の0乗から2の(N−2)乗までを整数Nで割った場合の剰余の奇遇性に対応する値をメモリにより予め保持しておき、その値に基づいて2のa乗を整数Nで割った場合の商Qwを算出することで、商Qwをメモリにより予め保持する場合に比べてメモリ使用量を大幅に削減することが可能である。
図7は、仮定商算出処理の詳細を示している。図1の仮定商算出処理(ステップS20)では、例えば、図7に示すような処理フローにより、整数Aは整数Nで割り切れると仮定した場合の商Qpの下位iビット(Qp[i−1:0])の値が算出される。仮定商算出処理では、まず、整数A、整数Nおよび商に関する算出ビット数iが入力される(ステップS201)。次に、変数jの値が入力値iに設定されるとともに、変数A’[2i−1:0]の値が入力値A[2i−1:0]に設定される(ステップS202)。そして、変数jの値が0であるか否かが判定される(ステップS203)。ステップS203で変数jの値は0ではないと判定されると、変数A’[0]の値が1であるか否かが判定される(ステップS204)。ステップS204で変数A’[0]の値は1であると判定された場合には、変数Qp[i−j]の値が1に設定され(ステップS205)、その後、変数A’[2i−1:0]の値から入力値N[i−1:0]が引かれて変数A’[2i−1:0]の値が更新される(ステップS206)。一方、ステップS204で変数A’[0]の値は1ではないと判定された場合には、変数Qp[i−j]の値が0に設定される(ステップS207)。この後、変数A’[2i−1:0]の値に対して1ビット分の右シフトが実施されて変数A’[2i−1:0]の値が更新される(ステップS208)。そして、変数jの値がデクリメントされる(ステップ209)。この後、ステップS203で変数jの値が0であるか否かが再び判定される。即ち、ステップS203で変数jの値は0であると判定されるまでステップS203〜S209が繰り返し実施される。ステップS203で変数jの値は0であると判定されると、変数Qpの値が出力される(ステップS210)。
図8は、判定処理の詳細を示している。図1の判定処理(ステップS30)では、例えば、図8に示すような処理フローにより、整数Aは整数Nの倍数ではないと言えるか否かが判定される。判定処理では、まず、近似商算出処理(図5)の出力値Qa、仮定商算出処理(図7)の出力値Qp、整数Aのビット数aおよび商に関する算出ビット数iが入力される(ステップS301)。そして、入力値Qa[i−1:0]、Qp[i−1:0]の差が入力値aより大きいか否かが判定される(ステップS302)。ステップS302で入力値Qa[i−1:0]、Qp[i−1:0]の差は入力値aより大きいと判定された場合には、変数rの値が1に設定される(ステップS303)。一方、ステップS302で入力値Qa[i−1:0]、Qp[i−1:0]の差は入力値aより大きくないと判定された場合には、変数rの値が0に設定される(ステップS304)。そして、変数rの値が出力される(ステップS305)。
ここで、整数Aを整数Nで割った場合の真の商Qtおよび近似の商Qaの関係について説明する。整数Aの2進表現が整数Aのビット数aおよび整数Nのビット数nを用いて(ya−1,ya−2,・・・,yn,・・・,y1,y0)で表される場合、整数Aは、「ya−1×2a−1+ya−2×2a−2+・・・+yn×2n+・・・+y1×21+y0×20」に置き換えることができる。また、2の(a−p)乗は、2のa乗を整数Nで割った場合の商Qwを用いて「(Qw>>p)×N+Ra−p」に置き換えることができる。
真の商Qtは、整数Aの2進表現におけるビットya−pの値が1である場合に、商Qwに対してpビット分の右シフトを実施した結果を商の部分和に足し、更に、剰余Ra−pを剰余の部分和に足し、剰余の部分和が整数N以上になるのに伴って剰余の部分和から整数Nを引いて商の部分和に1を足すという処理を逐次的に実施することで最終的に得られる商の部分和である。これに対して、近似の商Qaは、整数Aの2進表現におけるビットya−pの値が1である場合に、商Qwに対してpビット分の右シフトを実施した結果を商の部分和に足すという処理を逐次的に実施することで最終的に得られる商の部分和である。従って、真の商Qtおよび近似の商Qaの差の最大値が整数Aの2進表現において値が1であるビットの数になることは明らかである。これは、真の商Qtおよび近似の商Qaの差が整数Aのビット数aより大きくならないことを意味する。別の言い方をすると、真の商Qtと近似の商Qaとでは、整数Aのビット数aを2進表現した際のビット数a’分の下位ビットのみに関して異なっている可能性があるということである。
そこで、本発明の一実施形態の倍数判定処理では、整数Aを整数Nで割った場合の真の商Qtに対する近似の商Qaの下位(a’+α)ビットの値と整数Aは整数Nで割り切れると仮定した場合の商Qpの下位(a’+α)ビットの値との差が整数Aのビット数aより大きい場合に、整数Aは整数Nの倍数ではないと判定される。なお、整数Aを整数Nで割った場合の真の商Qtと整数Aは整数Nで割り切れると仮定した場合の商Qpとの間には相関関係はないため、各αに対して、整数Aが整数Nで割り切れないにも拘わらず、商Qaの下位(a’+α)ビットの値と商Qpの下位(a’+α)ビットの値との差が整数Aのビット数aより大きくならない確率は、1/2である。
次に、整数Aが1675(11’b11010001011)であり、整数Nが11(4’b1011)である場合の倍数判定について説明する。なお、実際に整数Aを整数Nで割った場合、商は152であり、剰余は3である。整数Aのビット数aが11であり、整数Aのビット数aを2進表現した際のビット数a’が4であるため、例えば、商に関する算出ビット数iを5とする。近似商算出処理においては、1675は「210+29+27+23+21+20」に置き換えられることから、2の11乗を11で割った場合の商Qw(11’b00010111010)を利用して、「Qw>>1」の下位5ビット、「Qw>>2」の下位5ビット、「Qw>>4」の下位5ビット、「Qw>>8」の下位5ビット、「Qw>>10」の下位5ビットおよび「Qw>>11」の下位5ビットの値が足されることにより、商Qaの下位5ビットの値が算出される。従って、商Qaの下位5ビットの値として22(5’b10110)が算出される。仮定商算出処理においては、1675(11’b11010001011)の1ビット目の値が1であることから、商Qpの1ビット目の値は1に決定され、これに伴って、1675(11’b11010001011)から11(4’b1011)を引いた値(11’b11010000000)が算出される。1675から11を引いた値(11’b11010000000)の2ビット目、3ビット目、4ビット目および5ビット目の値はいずれも0であることから、商Qpの2ビット目、3ビット目、4ビット目および5ビット目の値はいずれも0に決定される。従って、商Qpの下位5ビットの値として1(5’b00001)が算出される。判定処理においては、商Qaの下位5ビットの値(22)と商Qpの下位5ビットの値(1)との差(21)が11より大きいことから、1675は11の倍数ではないと判定される。
以上のような本発明の一実施形態の倍数判定処理においては、近似商算出処理は高々a回のiビットの加算およびビットシフトにより実現され、仮定商算出処理はi回のiビットの減算およびビットシフトにより実現され、判定処理は1回のiビットの減算により実現される。例えば、整数Aのビット数aが1024であり、整数Nのビット数nが32である場合、除算を使用した従来手法では、1024回の32ビットの減算が必要であり、SRT法の適用により演算回数が1/2に減少したとしても、512回の32ビットの減算が必要である。また、整数Nのビット数nが32から64に増加すると、512回の64ビットの減算が必要になる。これに対して、本発明の一実施形態の倍数判定処理では、整数Aのビット数aが1024であることから、商に関する算出ビット数iを11とした場合、整数Nのビット数nに拘わらず、近似商算出処理は高々1024回の11ビットの加算およびビットシフトにより実現され、仮定商算出処理は11回の11ビットの減算およびビットシフトにより実現され、判定処理は1回の11ビットの減算により実現される。従って、従来手法に比べて、少ない計算量で高速に倍数判定が実施される。
図9は、倍数判定装置の一例を示している。図1の倍数判定処理を専用のハードウェア(例えば、図2(b)の倍数判定装置23)により実現する場合には、例えば、図9に示すような倍数判定装置が使用される。倍数判定装置50は、近似商算出部51、仮定商算出部52および判定部53を有している。なお、倍数判定装置50においては、整数Aのビット数aおよび整数Nのビット数nが1024以下であり、商に関する算出ビット数iが32以下であるものとしている。
近似商算出部51は、外部入力信号start_in、dividend_in[1023:0]、dividend_bit_in[10:0]、rotation_cnt_in[10:0]、mode_inを受けて、信号qa[31:0]を出力する。仮定商算出部52は、外部入力信号start_in、dividend_in[63:0]、divisor_in[31:0]、quotient_bit_in[5:0]を受けて、信号qp[31:0]を出力する。判定部53は、近似商算出部51の出力信号qa[31:0]、仮定商算出部52の出力信号qp[31:0]および外部入力信号dividend_bit_in[10:0]を受けて、外部出力信号result_outを出力する。
外部入力信号start_inは、倍数判定装置50の動作開始を指示するための信号である。外部入力信号start_inは、倍数判定装置50を動作開始させる際に基準クロック(図示せず)の1サイクル分の期間だけ“1”に設定され、その他の期間では“0”に設定される。外部入力信号dividend_in[1023:0]は、整数Aの2進表現(1024ビット)に対応する信号である。外部入力信号dividend_bit_in[10:0]は、整数Aのビット数aの2進表現(11ビット)に対応する信号である。外部入力信号divisor_in[31:0]は、整数Nの2進表現(1024ビット)の下位32ビットに対応する信号である。外部入力信号quotient_bit_in[5:0]は、商に関する算出ビット数iの2進表現(6ビット)に対応する信号である。
外部入力信号rotation_cnt_in[10:0]は、2の0乗から2の(N−2)乗までを整数Nで割った場合の剰余の奇遇性に対応する値((N−1)ビット)に基づいて2の(a−1)乗を整数Nで割った場合の商の下位(N−1)ビットの値を算出するときの右ローテーションのビット数の2進表現(11ビット)に対応する信号である。外部入力信号mode_inは、2のべき乗を整数Nで割った場合の商の算出にビットローテーションを使用するか否かを指示するための信号である。外部入力信号mode_inは、2のa乗を整数Nで割った場合の商Qwのビット数が33以上であり、2のべき乗を整数Nで割った場合の商の算出にビットローテーションを使用する場合に“1”に設定され、2のa乗を整数Nで割った場合の商Qwのビット数が32以下であり、2のべき乗を整数Nで割った場合の商の算出にビットローテーションを使用しない場合に“0”に設定される。
近似商算出部51の出力信号qa[31:0]は、整数Aを整数Nで割った場合の真の商Qtに対する近似の商Qaの2進表現の下位32ビットに対応する信号である。仮定商算出部52の出力信号qp[31:0]は、整数Aは整数Nで割り切れると仮定した場合の商Qpの2進表現の下位32ビットに対応する信号である。外部出力信号(判定部53の出力信号)result_outは、判定結果に対応する信号である。外部出力信号result_outは、整数Aは整数Nの倍数ではないと判定された場合に“1”に設定され、整数Aは整数Nの倍数ではないと判定されなかった場合に“0”に設定される。
図10は、近似商算出部の詳細を示している。近似商算出部51は、メモリ(MEM)101、右ローテーション回路(ROR)102、セレクタ103、105、107、110、113、114、右シフト回路(SHR)104、レジスタ(REG)106、108、111、115、左シフト回路(SHL)109、加算回路(ADD)112、116および出力回路(OUT)117を有している。
メモリ101は、予め格納された値(xビット)を示す信号q_power_in[x−1:0]を出力する。2のa乗を整数Nで割った場合の商Qwのビット数が32以下である場合(整数Nが比較的大きい場合に相当)には、商Qwの2進表現(32ビット)がメモリ101に予め格納される。一方、商Qwのビット数が33以上である場合(整数Nが比較的小さい場合に相当)には、2の0乗から2の(N−2)乗までを整数Nで割った場合の剰余の奇遇性に対応する値((N−1)ビット)がメモリ101に予め格納される。なお、2のa乗を整数Nで割った場合の商Qwを算出する回路をメモリ101の代わりに設けてもよい。
右ローテーション回路102は、倍数判定装置50の動作開始後における基準クロックの1サイクル目では、メモリ101の出力信号q_power_in[x−1:0](x=N−1)が示す値(xビット)に対して外部入力信号rotation_cnt_in[10:0]が示す値に相当するビット数分の右ローテーションを実施することにより、2の(a−1)乗を整数Nで割った場合の商の下位(N−1)ビットの値を算出する。メモリ101の出力信号q_power_in[x−1:0]のビット数xが32以上である場合、右ローテーション回路102は、算出値(xビット)を出力基準値として保持し、出力基準値の下位32ビットに対応する信号を出力する。一方、メモリ101の出力信号q_power_in[x−1:0]のビット数xが32未満である場合、右ローテーション回路102は、算出値(xビット)が複数個並んだ32ビット以上の値を生成して出力基準値として保持し、出力基準値の下位32ビットに対応する信号を出力する。
右ローテーション回路102は、倍数判定装置50の動作開始後における基準クロックの2サイクル目、3サイクル目、・・・、(a−33)サイクル目では、1サイクル前の出力基準値(32ビット以上)に対して1ビット分の右ローテーションを実施して出力基準値を更新し、更新後の出力基準値の下位32ビットに対応する信号を出力する。右ローテーション回路102は、倍数判定装置50の動作開始後における基準クロックの(a−32)サイクル目、(a−31)サイクル目、・・・、aサイクル目では、1サイクル前の出力基準値(32ビット以上)に対して1ビット分の右ローテーションを実施することなく、1サイクル前の出力信号(32ビット)に対して1ビット分の右シフトを実施して得られる信号を出力する。
例えば、整数Aのビット数a(外部入力信号dividend_bit_in[10:0]が示す値)が1024であり、整数N(外部入力信号divisor_in[31:0]が示す値)が11である場合、外部入力信号rotation_cnt_in[10:0]が示す値は6になる。また、メモリ101の出力信号q_power_in[x−1:0](x=10)は、10’b1000101110に設定される。このような場合、基準クロックの1サイクル目では、右ローテーション回路102は、10’b1000101110に対して6ビット分の右ローテーションを実施することにより、2の1023乗を11で割った場合の商の下位10ビットの値として10b’1011101000を算出する。そして、右ローテーション回路102は、算出値のビット数(10)が32未満であるため、算出値が4個並んだ40ビットの値(40b’1011101000_1011101000_1011101000_1011101000)を生成して出力基準値として保持し、出力基準値の下位32ビットに対応する信号を出力する。
基準クロックの2サイクル目では、右ローテーション回路102は、基準クロックの1サイクル目における出力基準値(40ビット)に対して1ビット分の右ローテーションを実施して出力基準値を更新し、更新後の出力基準値(40b’0101110100_0101110100_0101110100_0101110100)の下位32ビットに対応する信号を出力する。基準クロックの3サイクル目、4サイクル目、・・・、(1024−33)サイクル目では、右ローテーション回路102は、基準クロックの2サイクル目と同様に、1サイクル前の出力基準値(40ビット)に対して1ビット分の右ローテーションを実施して出力基準値を更新し、更新後の出力基準値の下位32ビットに対応する信号を出力する。基準クロックの(1024−32)サイクル目、(1024−31)サイクル目、・・・、1024サイクル目では、右ローテーション回路102は、1サイクル前の出力基準値(40ビット)に対して1ビット分の右ローテーションを実施することなく、1サイクル前の出力信号(32ビット)に対して1ビット分の右シフトを実施して得られる信号を出力する。
セレクタ103は、外部入力信号start_inが“1”に設定されている場合、メモリ101の出力信号q_power_in[x−1:0](x=32)を選択して出力する。セレクタ103は、外部入力信号start_inが“0”に設定されている場合、レジスタ106の出力信号q_power[31:0]を選択して出力する。右シフト回路104は、セレクタ103の出力信号(32ビット)に対して1ビット分の右シフトを実施して得られる信号(32ビット)を出力する。セレクタ105は、外部入力信号mode_inが“1”に設定されている場合、右ローテーション回路102の出力信号(32ビット)を選択して出力する。セレクタ105は、外部入力信号mode_inが“0”に設定されている場合、右シフト回路104の出力信号(32ビット)を選択して出力する。レジスタ106は、基準クロックに同期して、セレクタ105の出力信号(32ビット)を取り込んで信号q_power[31:0]として出力する。
セレクタ107は、外部入力信号start_inが“1”に設定されている場合、外部入力信号dividend_in[1023:0]を選択して出力する。セレクタ107は、外部入力信号start_inが“0”に設定されている場合、左シフト回路109の出力信号dividend_next[1023:0]を選択して出力する。レジスタ108は、基準クロックに同期して、セレクタ107の出力信号(1024ビット)を取り込んで信号dividend[1023:0]として出力する。左シフト回路109は、レジスタ108の出力信号dividend[1023:0]に対して1ビット分の左シフトを実施して得られる信号dividend_next[1023:0]を出力する。セレクタ110は、外部入力信号start_inが“1”に設定されている場合、32d’0に設定された固定値信号を選択して出力する。セレクタ110は、外部入力信号start_inが“0”に設定されている場合、セレクタ113の出力信号qa_tmp_next[31:0]を選択して出力する。レジスタ111は、基準クロックに同期して、セレクタ110の出力信号(32ビット)を取り込んで信号qa_tmp[31:0]として出力する。加算回路112は、レジスタ111の出力信号qa_tmp[31:0]が示す値にレジスタ106の出力信号q_power[31:0]が示す値を足した結果を示す信号(32ビット)を出力する。セレクタ113は、レジスタ108の出力信号dividend[1023]が“1”に設定されている場合、加算回路112の出力信号(32ビット)を選択して信号qa_tmp_next[31:0]として出力する。セレクタ113は、レジスタ108の出力信号dividend[1023]が“0”に設定されている場合、レジスタ111の出力信号qa_tmp[31:0]を選択して信号qa_tmp_next[31:0]として出力する。
セレクタ114は、外部入力信号start_inが“1”に設定されている場合、 11’d0に設定された固定値信号を選択して出力する。セレクタ114は、外部入力信号start_inが“0”に設定されている場合、加算回路116の出力信号loop_cnt_next[10:0]を選択して出力する。レジスタ115は、基準クロックに同期して、セレクタ114の出力信号(11ビット)を取り込んで信号loop_cnt[10:0]として出力する。加算回路116は、レジスタ115の出力信号loop_cnt[10:0]が示す値に1(11ビットの固定値信号が示す値)を足した結果を示す信号loop_cnt_next[10:0]を出力する。出力回路117は、レジスタ115の出力信号loop_cnt[10:0]が示す値が外部入力信号dividend_bit_in[10:0]が示す値と一致するのに伴って、レジスタ111の出力信号qa_tmp[31:0]を取り込んで信号qa[31:0]として出力する。以上のような構成により、近似商算出部51は、図1の近似商算出処理(図5の処理フロー)を実現するハードウェアとして機能する。
図11は、仮定商算出部の詳細を示している。仮定商算出部52は、セレクタ(SEL)201、204、206、レジスタ(REG)202、207、減算回路(SUB)203、208、右シフト回路(SHR)205および出力回路(OUT)209を有している。セレクタ201は、外部入力信号start_inが“1”に設定されている場合、外部入力信号dividend_in[63:0]を選択して出力する。セレクタ201は、外部入力信号start_inが“0”に設定されている場合、右シフト回路205の出力信号dividend_next[63:0]を選択して出力する。レジスタ202は、基準クロックに同期して、セレクタ201の出力信号(64ビット)を取り込んで信号dividend[63:0]として出力する。減算回路203は、レジスタ202の出力信号dividend[63:0]が示す値から外部入力信号divisor_in[31:0]が示す値を引いた結果を示す信号(64ビット)を出力する。セレクタ204は、レジスタ202の出力信号dividend[0]が“1”に設定されている場合、減算回路203の出力信号(64ビット)を選択して出力する。セレクタ204は、レジスタ202の出力信号dividend[0]が“0”に設定されている場合、レジスタ202の出力信号dividend[63:0]を選択して出力する。右シフト回路205は、セレクタ204の出力信号(64ビット)に対して1ビット分の右シフトを実施して得られる信号dividend_next[63:0]を出力する。
セレクタ206は、外部入力信号start_inが“1”に設定されている場合、外部入力信号quotient_bit_in[5:0]を選択して出力する。セレクタ206は、外部入力信号start_inが“0”に設定されている場合、減算回路208の出力信号loop_cnt_next[5:0]を選択して出力する。レジスタ207は、基準クロックに同期して、セレクタ206の出力信号(6ビット)を取り込んで信号loop_cnt[5:0]として出力する。減算回路208は、レジスタ207の出力信号loop_cnt[5:0]が示す値から1(6ビットの固定値信号が示す値)を引いた結果を示す信号loop_cnt_next[5:0]を出力する。出力回路209は、基準クロックに同期して、32ビットの内部レジスタに対して最下位ビットから順番にレジスタ202の出力信号dividend[0]の値を格納する。出力回路209は、レジスタ207の出力信号loop_cnt[5:0]が6’d0に設定されるのに伴って、内部レジスタの値(32ビット)を示す信号qp[31:0]を出力する。以上のような構成により、仮定商算出部52は、図1の仮定商算出処理(図7の処理フロー)を実現するハードウェアとして機能する。
図12、判定部の詳細を示している。判定部53は、比較回路(CMP)301、303および減算回路(SUB)302を有している。比較回路301は、近似商算出部51(図10)の出力信号qa[31:0]が示す値が仮定商算出部52(図11)の出力信号qp[31:0]が示す値以上である場合、出力信号を“1”に設定する。比較回路301は、近似商算出部51の出力信号qa[31:0]が示す値が仮定商算出部52の出力信号qp[31:0]が示す値未満である場合、出力信号を“0”に設定する。減算回路302は、比較回路301の出力信号が“1”に設定されている場合、近似商算出部51の出力信号qa[31:0]が示す値から仮定商算出部52の出力信号qp[31:0]が示す値を引いた結果を示す信号df[31:0]を出力する。減算回路302は、比較回路301の出力信号が“0”に設定されている場合、仮定商算出部52の出力信号qp[31:0]が示す値から近似商算出部51の出力信号qa[31:0]が示す値を引いた結果を示す信号df[31:0]を出力する。比較回路303は、減算回路302の出力信号df[31:0]が示す値が外部入力信号dividend_bit_in[10:0]が示す値より大きい場合、外部出力信号result_outを“1”に設定する。比較回路303は、減算回路302の出力信号df[31:0]が示す値が外部入力信号dividend_bit_in[10:0]が示す値以下である場合、外部出力信号result_outを“0”に設定する。以上のような構成により、判定部53は、図1の判定処理(図8の処理フロー)を実現するハードウェアとして機能する。
以上のように、本発明の一実施形態においては、近似商算出処理(ステップS10)、仮定商算出処理(ステップS20)および判定処理(ステップS30)は除算や剰余算を使用することなく簡易な演算により実現されるため、少ない計算量で高速に倍数判定を実施することができる。なお、前述の実施形態では、整数Aのビット数aを商Qa、Qpの差の比較対象(所定の上限値)として使用し、整数Aのビット数aを2進表現した際のビット数a’以上の値を商に関する算出ビット数i(所定のビット数)として使用しているが、商Qt、Qaの差の最大値を商Qa、Qpの差の比較対象として使用し、商Qt、Qaの差の最大値を2進表現した際のビット数以上の値を商に関する算出ビット数iとして使用してもよい。これにより、倍数判定の精度を向上させることが可能である。
以上、本発明について詳細に説明してきたが、前述の実施形態およびその変形例は発明の一例に過ぎず、本発明はこれらに限定されるものではない。本発明を逸脱しない範囲で変形可能であることは明らかである。
50‥倍数判定装置;51‥近似商算出部;52‥仮定商算出部;53‥判定部;101‥メモリ;102‥右ローテーション回路;103、105、107、110、113、114‥セレクタ;104‥右シフト回路;106、108、111、115‥レジスタ;109‥左シフト回路;112、116‥加算回路;117‥出力回路;201、204、206‥セレクタ;202、207‥レジスタ;203、208‥減算回路;205‥右シフト回路;209‥出力回路;301、303‥比較回路;302‥減算回路
Claims (5)
- 第1整数を第2整数で割った場合の真の商に対する近似の商について、2のべき乗を前記第2整数で割った場合の商を用いて、前記真の商および前記近似の商の関係に基づく所定のビット数分の下位ビットの値を算出する近似商算出工程と、
前記第1整数は前記第2整数で割り切れると仮定した場合の商について、前記所定のビット数分の下位ビットの値を算出する仮定商算出工程と、
前記近似商算出工程および前記仮定商算出工程の算出値の差が前記真の商および前記近似の商の前記関係に基づく所定の上限値より大きい場合に、前記第1整数は前記第2整数の倍数ではないと判定する判定工程とを含むことを特徴とする倍数判定方法。 - 請求項1に記載の倍数判定方法において、
前記所定の上限値は、前記第1整数のビット数であり、
前記所定のビット数は、前記第1整数のビット数を2進表現した際のビット数以上であることを特徴とする倍数判定方法。 - 請求項1に記載の倍数判定方法において、
前記所定の上限値は、前記真の商および前記近似の商の差の最大値であり、
前記所定のビット数は、前記真の商および前記近似の商の差の最大値を2進表現した際のビット数以上であることを特徴とする倍数判定方法。 - 第1整数を第2整数で割った場合の真の商に対する近似の商について、2のべき乗を前記第2整数で割った場合の商を用いて、前記真の商および前記近似の商の関係に基づく所定のビット数分の下位ビットの値を算出する近似商算出部と、
前記第1整数は前記第2整数で割り切れると仮定した場合の商について、前記所定のビット数分の下位ビットの値を算出する仮定商算出部と、
前記近似商算出部および前記仮定商算出部の算出値の差が前記真の商および前記近似の商の前記関係に基づく所定の上限値より大きい場合に、前記第1整数は前記第2整数の倍数ではないと判定する判定部とを備えることを特徴とする倍数判定装置。 - 第1整数を第2整数で割った場合の真の商に対する近似の商について、2のべき乗を前記第2整数で割った場合の商を用いて、前記真の商および前記近似の商の関係に基づく所定のビット数分の下位ビットの値を算出する近似商算出工程と、
前記第1整数は前記第2整数で割り切れると仮定した場合の商について、前記所定のビット数分の下位ビットの値を算出する仮定商算出工程と、
前記近似商算出工程および前記仮定商算出工程の算出値の差が前記真の商および前記近似の商の前記関係に基づく所定の上限値より大きい場合に、前記第1整数は前記第2整数の倍数ではないと判定する判定工程とをコンピュータに実行させることを特徴とする倍数判定プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008154002A JP2009301265A (ja) | 2008-06-12 | 2008-06-12 | 倍数判定方法、倍数判定装置および倍数判定プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008154002A JP2009301265A (ja) | 2008-06-12 | 2008-06-12 | 倍数判定方法、倍数判定装置および倍数判定プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009301265A true JP2009301265A (ja) | 2009-12-24 |
Family
ID=41548097
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008154002A Withdrawn JP2009301265A (ja) | 2008-06-12 | 2008-06-12 | 倍数判定方法、倍数判定装置および倍数判定プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009301265A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009205667A (ja) * | 2008-01-28 | 2009-09-10 | Fujitsu Ltd | 通信装置、受信データサイズチェック方法、倍数判定回路および倍数判定方法 |
JP2011133999A (ja) * | 2009-12-22 | 2011-07-07 | Fujitsu Ltd | 通信装置、受信データ長判定方法、倍数判定回路及び受信データ長判定プログラム |
-
2008
- 2008-06-12 JP JP2008154002A patent/JP2009301265A/ja not_active Withdrawn
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009205667A (ja) * | 2008-01-28 | 2009-09-10 | Fujitsu Ltd | 通信装置、受信データサイズチェック方法、倍数判定回路および倍数判定方法 |
JP2011133999A (ja) * | 2009-12-22 | 2011-07-07 | Fujitsu Ltd | 通信装置、受信データ長判定方法、倍数判定回路及び受信データ長判定プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8504602B2 (en) | Modular multiplication processing apparatus | |
US20050198093A1 (en) | Montgomery modular multiplier | |
CN102096609A (zh) | 可编程循环冗余校验(crc)计算的指令集架构 | |
JP2004326112A (ja) | マルチプルモジュラス選択器、累算器、モンゴメリー掛け算器、マルチプルモジュラス発生方法、部分掛け発生方法、累算方法、掛け算方法、モジュラス選択器、およびブースレコーダ | |
KR100591761B1 (ko) | 몽고메리 모듈러 곱셈기 및 캐리 저장 가산을 이용한몽고메리 모듈러 곱셈 방법 | |
US9813232B2 (en) | Device and method for resisting non-invasive attacks | |
US7024560B2 (en) | Power-residue calculating unit using Montgomery algorithm | |
JP2002040933A (ja) | データ暗号化標準アルゴリズムを利用した暗号化装置 | |
US20230222229A1 (en) | Shapeshift data encryption methods and systems | |
JP3940714B2 (ja) | 演算装置、および、暗号・復号演算装置 | |
US20030002666A1 (en) | Method and apparatus for creating a message digest using a parallel, one-way hash algorithm | |
JP2004258141A (ja) | モンゴメリ乗算剰余の多倍長演算のための演算装置 | |
JP2009301265A (ja) | 倍数判定方法、倍数判定装置および倍数判定プログラム | |
JP2009169316A (ja) | ハッシュ関数演算装置及び署名装置及びプログラム及びハッシュ関数演算方法 | |
US5928315A (en) | Apparatus and method for calculating Bc (mod n) | |
KR20190022023A (ko) | 하드웨어 구현된 모듈러 역원 모듈 | |
JP4567753B2 (ja) | パリティ生成回路、計数回路および計数方法 | |
WO2011036746A1 (ja) | 演算装置 | |
EP1455270A2 (en) | Method and apparatus for basis conversion in finite field and a multiplier | |
JP4317738B2 (ja) | 平均値算出装置および平均値算出方法 | |
CN115270155A (zh) | 一种获取大数拓展最大公约数的方法及硬件架构 | |
CN1550975A (zh) | 蒙哥马利模数乘法器及其方法 | |
JP3137599B2 (ja) | BのC乗のnを法とした剰余を計算する回路 | |
US20240220210A1 (en) | Modulo divider and modulo division operation method for binary data | |
US7472154B2 (en) | Multiplication remainder calculator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Withdrawal of application because of no request for examination |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20110906 |