JP2004227248A - 演算装置及び演算方法 - Google Patents
演算装置及び演算方法 Download PDFInfo
- Publication number
- JP2004227248A JP2004227248A JP2003013780A JP2003013780A JP2004227248A JP 2004227248 A JP2004227248 A JP 2004227248A JP 2003013780 A JP2003013780 A JP 2003013780A JP 2003013780 A JP2003013780 A JP 2003013780A JP 2004227248 A JP2004227248 A JP 2004227248A
- Authority
- JP
- Japan
- Prior art keywords
- partial product
- bit
- unit
- adder
- addition
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/60—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers
- G06F7/72—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic
- G06F7/728—Methods or arrangements for performing computations using a digital non-denominational number representation, i.e. number representation without radix; Computing devices using combinations of denominational and non-denominational quantity representations, e.g. using difunction pulse trains, STEELE computers, phase computers using residue arithmetic using Montgomery reduction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
- G06F7/52—Multiplying; Dividing
- G06F7/523—Multiplying only
- G06F7/533—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
- G06F7/5334—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product
- G06F7/5336—Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by using multiple bit scanning, i.e. by decoding groups of successive multiplier bits in order to select an appropriate precalculated multiple of the multiplicand as a partial product overlapped, i.e. with successive bitgroups sharing one or more bits being recoded into signed digit representation, e.g. using the Modified Booth Algorithm
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- General Engineering & Computer Science (AREA)
Abstract
【解決手段】演算装置1は、モンゴメリ法によって積和演算を行う。ブース符号化部20は、複数ビットからなる乗数Yを2ビット毎に分割し、分割した2ビットが取る0、1、2、3のいずれかの値に対応して−2、−1、0、1、2のいずれかにブース符号化する。部分積生成部400は、ブース符号化した乗数Yと被乗数Xとを乗算することによって、−2X、−X、0、X、2Xのいずれかの値をもつ複数の部分積列を複数生成する。部分積加算部450は、複数の部分積列の符号ビットをパディングして符号ビットのビット位置を揃え、所定の条件にしたがって所定の定数ビットを設定することにより符号拡張し、定数値を予め算出し、複数の部分積列を加算した加算結果に定数値を付加し、乗数Yと被乗数Xとの乗算結果として出力する。
【選択図】 図1
Description
【発明の属する技術分野】
本発明は、積和演算を実行する演算装置及びその方法に関するものである。
【0002】
【従来の技術】
一般に用いられるモンゴメリ法による多倍長演算装置は、rビットからなる被乗数X及び乗数Yを入力し、Z=X×Y+A+B型積和演算を処理する。処理の結果出力される出力値Zは2rビットとなるが、2rビットのうち下位半分のrビットを出力し、上位半分のrビットを多倍長演算装置にフィードバックすることによって、モンゴメリ法による多倍長演算装置を実現している。
一般に、剰余演算系で必要とされる除算処理は、ハードウエア実装において回路規模が大きく、遅延も大きい。
しかしながら、P.L.Montgomeryにより提案されたモンゴメリ法によるアルゴリズムは、除算処理をビットシフトで置き換えることができるため、演算処理の高速化及び演算装置の小型化が実現可能である(例えば、非特許文献1参照)。
【0003】
【非特許文献1】
佐藤証、高野光司“高速モンゴメリ演算回路”、PP237−PP241、SCIS2001 (電子情報通信学会により2001年1月23日〜26日に開催)
【0004】
【発明が解決しようとする課題】
このようにモンゴメリ法によるアルゴリズムは積和演算の連続処理からなっている。
また、モンゴメリ法を用いた演算で必要な中間値tを求める途中式t:=P[0]×n’(mod2r)の入力値P[0]は前のループにおける出力値P[0]である上、前式によって出力される中間値tは次の積和演算の入力となっている。
このため、このアルゴリズムを高速に処理し、かつ、コンパクトな回路規模を持つハードウエアでモンゴメリ法による積和演算を行う演算装置を実装するためには、上記アルゴリズムの処理の負荷を考慮した回路によって構成される演算装置が必要であった。
【0005】
ここで、演算装置の回路面積の大半は積和演算を処理するアルゴリズムによって決まる。
したがって、回路面積が増加することによるコストの増加を抑止するため、回路面積の制限が厳しい場合においては、積和演算処理を高速化する策として、製品に上記アルゴリズムを実行する演算装置を複数個実装することは困難であり、演算装置を1つのみ実装するのが望ましかった。
【0006】
さらに、ハードウエアの一般的な高速化手法としてパイプライン化があるが、積和演算装置をパイプライン化した場合、レイテンシ(入力データに対し出力データが出力されるまでの遅延時間)が発生する。このため、モンゴメリ法に見られるような、積和演算装置の出力データを次の入力データに用いる場合は待ち時間が発生する。よってパイプライン化を施しても待ち時間が発生しない、もしくはできるだけ少なくなるような機構が必要であった。
【0007】
この発明の演算装置は、剰余演算、乗算剰余演算等を高速に実行することを目的とする。
【0008】
【課題を解決するための手段】
個の発明に係る演算装置は、正の値を持つ複数ビットの被乗数Xと正の値を持つ複数ビットの乗数Yとの演算を行う演算装置であって、
複数ビットの乗数Yを正負のある複数の部分に分割する分割部と、
被乗数Xに対して上記分割部が分割した乗数Yの各部を各々乗算し、乗算した乗算結果の正負を示した符号ビットと乗算した乗算結果の絶対値とを含む部分積列を複数生成する部分積生成部と、
上記部分積生成部が生成した複数の部分積列に含まれる複数の符号ビットの値を加算し、加算した結果を定数値としてメモリに記憶し、上記部分積生成部が生成した複数の部分積列の絶対値を加算器によって加算し、加算した結果に上記メモリに記憶した符号ビットを付加する部分積加算部とを備える。
【0009】
【発明の実施の形態】
まず、P.L.Montgomeryにより提案されたモンゴメリ法を実行するためのアルゴリズムについて説明する。
モンゴメリ定数Rを除数nと互いに素で、除数nより大きく剰余計算が容易な整数(例えば2k)とする。nを除数とするモンゴメリ定数Rの乗法に関する逆数をR−1とする。また、n’を0<n’<R、かつ、R・R−1−n・n’=1を満たす整数とする。
このとき、0≦P<n・Rである整数P(=X・Y・R−1modn)はモンゴメリ法により以下に述べる手順で容易に計算可能である。
(1)入力 被乗数X、乗数Y、除数n
(2)前計算 n’=−n−1(modR)
(3)モンゴメリ乗算
step1: P:=(X・Y・modR)・n’・modR
step2: P:=(X・Y+P・n)/R
step3: if P≧n do P:=P−n
step4: return P
(4)出力 P≡X・Y・R−1・modn
【0010】
モンゴメリ乗算は、剰余乗算を加算、乗算、シフト演算の繰り返しによって、除算を行わずに実行することのできるアルゴリズムであり、公開鍵暗号系で多用する剰余乗算を、高速に処理する方法の1つである。すなわち、モンゴメリ乗算は、剰余系演算で必要な除算処理をビットシフト等に置き換え、単調な積和演算の繰り返しで剰余乗算を処理できるため、ハードウエアへの実装に適している。公開鍵暗号系では、上記除数n、被乗数X、乗数Y等のパラメータが非常に大きいビット長となるため、各入力ビットをm個のビットブロックに分割後、モンゴメリ法による各計算を行うのが一般的である。例として上記除数n、被乗数X、乗数Yに対する各々の全体の入力ビット長kをrビットにm分割したモンゴメリ法の計算手順を以下に示す。
(1)入力データ
入力ビット数kビットを持つ入力データ(被乗数X、乗数Y、除数n)を各々rビットにm分割すると入力データは、次のように表される。
入力:被乗数X(X[m−1],X[m−2],…,X[1],X[0]) k=m・r(bit)
乗数Y(Y[m−1],Y[m−2],…,Y[1],Y[0]) k=m・r(bit)
除数n(n[m−1],n[m−2],…,n[1],n[0]) k=m・r(bit)
0≦X,Y<n,R=(2r)m,gcd(n,R)=1
(2)前計算
n’について次の前処理を行う。
n’=−n−1(mod2r)
(3)モンゴメリ乗算
1.P←0
2.j=0からj=m−1まで次の計算を行う。
2.1 P[j]←P[j]+X・Y[j]
2.2 t=P[0]・n’mod2r
2.3 P[j−1]←(P[j]+t・n[j])/2r
(4)出力データ
P≧nの場合には(P−n)を出力する。それ以外の場合(P<n)にはPを出力する。
【0011】
上記モンゴメリ乗算を実行するためのプログラムを以下に示す。
なお、上記プログラム中「|」はビット連結を表し、例えば、A=1100,B=0011の場合には、A|B=11000011となる。
【0012】
上記モンゴメリ法のアルゴリズムにおいてハードウエア設計上問題となるのは2.2から2.3の計算である。なぜなら、乗算結果Pが次の積和演算の処理のための入力値となるためである。すなわち、上記アルゴリズムでは乗算と加算からなる積和演算の連続処理が実行されており、ステップ8で実行される式から算出される中間値t(t:=P[0]×n’(mod 2r))の入力値P[0]は前のループにおける出力値P[0]である。また、中間値tはステップ10で実行される積和演算carry|P[j]:=t×n[j]+P[j−1]+carryの入力値の一つとなっている。このため、演算装置をパイプライン化した場合、通常、処理効率を著しく低下させる待ち時間が発生してしまう。
以下のすべての実施の形態では、上記モンゴメリ法のアルゴリズムの問題点を考慮して、モンゴメリ乗算の高速処理を実現し、かつ、装置全体の面積を最小限に抑えた演算装置について説明する。
【0013】
実施の形態1.
以下、実施の形態1について説明する。
図1は、本実施の形態に係る演算装置1の全体構成図である。
演算装置1は、正の値を持つ複数ビットの被乗数Xと正の値を持つ複数ビットの乗数Yとの演算を行う装置であり、演算の一例としてモンゴメリ法による積和演算を行う。
演算装置1は、セレクタ10と、セレクタ11と、ブース符号化を行うブース符号化部20と、セレクタ11とブース符号化部20から出力されたビット列を保持する第1のレジスタ30と、積和演算を行う積和演算部40と、積和演算部40から出力されたビット列を保持する第2のレジスタ50と、第2のレジスタ50に保持された所定の部分のビット列(rビット×2)と1クロック前に演算した演算結果Piとを加算するによって入力ビットを圧縮して加算結果として出力する圧縮部60とから構成される。
【0014】
ブース符号化部20は、複数ビットの乗数Yを正負のある複数の部分に分割する分割部の一例である。すなわち、ブース符号化部20は、複数ビットからなる乗数Yを2ビット毎に分割し、分割した乗数Yの各2ビットが持つ0と1と2と3とのいずれかの値を−2と−1と0と1と2とのいずれかの変換値に変換(ブース符号化)する部である。
積和演算部40は、部分積生成部400と部分積加算部450と補正レジスタ470とから構成される。
部分積生成部400は、被乗数Xに対して分割部(ブース符号化部20)が分割(ブース符号化)した乗数Yの各部を各々乗算し、乗算した乗算結果の正負を示した符号ビットと乗算した乗算結果の絶対値とを含む部分積列を複数生成する部である。
部分積加算部450は、部分積生成部400が生成した複数の部分積列に含まれる複数の符号ビットの値を加算し、加算した結果を定数値としてメモリ451に記憶し、部分積生成部400が生成した複数の部分積列の絶対値を加算器によって加算し、加算した結果にメモリ451に記憶した符号ビットを付加し、2rビットのビット列を2本出力する部である。
補正レジスタ470は、部分積加算部450が行う加算処理の結果、桁上りが発生した場合に発生した桁上りを保持するレジスタである。
【0015】
第2のレジスタ50は、A(1)レジスタ500とA(2)レジスタ550と、B(1)レジスタ510とB(2)レジスタ560とから構成される。
A(1)レジスタ500とA(2)レジスタ550とは、部分積加算部450から出力された2rビットのビット列の1本目を格納するレジスタであり、A(1)レジスタ500には上位rビットが格納され、A(2)レジスタ550には下位rビットが格納されている。
B(1)レジスタ510とB(2)レジスタ560とは、部分積加算部450から出力された2rビットのビット列の2本目を格納するレジスタであり、B(1)レジスタ510には上位rビットが格納され、B(2)レジスタ560には下位rビットが格納されている。
圧縮部60は、全加算器600と2値加算器650と桁上りレジスタ610と桁上りレジスタ660とから構成される。
全加算器600は、A(2)レジスタ550に格納されたrビットのビット列とB(2)レジスタ560に格納されたrビットのビット列と1クロック前に演算装置1によって演算された演算結果Piを入力し、入力した3値を加算した結果、2値に圧縮して出力する処理をビット列のビット数分繰り返す加算器である。加算によって発生した桁上りは桁上りレジスタ610に保持され、全加算器600による次の加算処理時に保持された桁上りも一緒に加算される。
2値加算器650は、全加算器600から出力された2値を加算した結果、2値に圧縮して出力する処理を入力されるビット列のビット数分繰り返す加算器である。加算によって発生した桁上りは桁上りレジスタ660に保持され、2値加算器650による次の加算処理時に保持された桁上りも一緒に加算される。2値加算器650から出力された一定ビット数のビット列Pはモンゴメリ乗算結果である。
セレクタ10は、乗数Yと除数nと計算値n’(=−n−1(mod2r))とを入力し、積和演算部40で行う処理内容に合わせて1つのデータを選択する。同様にセレクタ11は、被乗数Xと演算装置1によって出力された前回のループにおける出力値P0と中間値tとを入力し、積和演算部40で行う処理内容に合わせて1つのデータを選択する。
【0016】
次に、図1に示す演算装置1の全体の動作について説明する。
まず、ブース符号化部20は、セレクタ10によって選択されたrビットの乗数Yをブース符号化する。
第1のレジスタ30は、セレクタ11によって選択されたrビットの被乗数Xとブース符号化された乗数Yとを格納する。
次に、積和演算部40が乗数Yと被乗数Xとの積和演算を行う。すなわち、積和演算部40の部分積生成部400は、第1のレジスタ30に格納された乗数Yと被乗数Xとからr+1個の部分積を生成する。
次に、部分積加算部450は、部分積生成部400によって生成されたr+1個の部分積にフィードバックしたキャリー1、キャリー2(Carry1、Carry2)を加算する。ここで、キャリー1、キャリー2は、部分積加算部450から前回のループで出力された上位2rビットを直接フィードバックした値である。すなわち、キャリー1、キャリー2としてフィードバックされるデータは、A(1)レジスタ500、B(1)レジスタ510に格納されたビット列となる。ただし、部分積加算部450が行う最初の加算では、フィードバックしたキャリー1、キャリー2の代わりにセレクタ11に入力され、セレクタ11によって選択されたP0(演算装置1によって出力された前回の出力値)と部分積とが加算される。
積和演算部40で積和演算に使用される上記モンゴメリ乗算を実行するためのアルゴリズムに記載した中間値t(t:=P[0]×n’(mod2r))は、セレクタ11に入力され、セレクタ11によって選択され、積和演算に使用されるタイミングに合わせて第1のレジスタ30から積和演算部40に入力される。
このように、部分積生成部400によって乗算され、部分積加算部450によって加算された結果、部分積加算部450から出力されたビット列は2本の2rビット列(A(1)レジスタ500とA(2)レジスタ550とに格納された2rビットのビット列+B(1)レジスタ510とB(2)レジスタ560とに格納された2rビットのビット列)にまで圧縮され、第2のレジスタ50に格納される。
第2のレジスタ50に格納された2本の2rビット列のうち、A(1)レジスタ500とB(1)レジスタ510とに格納された上位2rビットのデータは部分積生成部400にキャリー1、キャリー2として再びフィードバックされ、A(2)レジスタ550とB(2)レジスタ560とに格納された下位の2rビットとPiは圧縮部60に入力される。圧縮部60の全加算器600は入力された上記3値を加算して2値に変換し、桁上りが生じた場合には、桁上りレジスタ610に桁上りを格納する。圧縮部60の2値加算器650は、全加算器600から出力された2値を加算して1値に変換し、桁上りが生じた場合には、桁上りレジスタ660に桁上りを格納する。このような動作によって入力ビット列を1本のrビット列にまで圧縮し、モンゴメリ乗算結果Pとして出力する。
【0017】
次に、演算装置1の各部の機能と動作について、詳細に説明する。
<ブース符号化部20によるブース符号化>
ブース符号化部20は、乗数Yを2ビットずつに分割し、分割した乗数Yの各部を2進数表現(0,1,2,3のいずれかの値)から集合{−2、−1、0、1、2}の4進拡張SD(signed−digit)表現に変換する。この変換をブース符号化という。ブース符号化は、逐次型乗算器等の累算回数を減らし、高速な処理を可能とするために行われる。
一般に、nビットの乗数Y対し乗算を行う場合、次式のような加算の繰り返しを行う。
上記「X×Y[0]」、「X×Y[1]」、・・・、「X×Y[n−1]」で示される各々の積を以下、部分積列という。
ここで、Yの2ビット(Y[i],Y[i+1])を同時に計算すれば、部分積は「X×(Y[0]+Y[1])」、・・・、「X×(Y[n−2]+Y[n−1])」となるため、部分積の数(累算加算数)がn/2となる。したがって、部分積をn/2回加算することによって乗算結果Pを算出することができる。この場合、Yの2ビットが取りうる値は0、1、2、3のいずれかであるため、各部分積の取りうる値は、0、X、2X、3Xのいずれかとなる。
ハードウエア上、2Xはビットを1ビットシフトすることで生成できるが、3Xは前もって計算してレジスタ等に保存しておくか、毎回(X+2X)を実行することによって生成する必要がある。
これを回避するために、ブース符号化部20では、Yにあるレコード的な処理(ブース符号化)を施す。このことにより、部分積の加算時に3Xを用いずに計算を行うことができる。原理としては、3X=−X+4Xであることを用いて、3Xを計算する必要がある場合には、−Xを生成し、後から−Xに4Xを加算することによって3Xの計算を実現している。
【0018】
このような原理を利用するために、ブース符号化部20は、乗数Yをブース符号化する。
ブース符号化部20が行う乗数Yのブース符号化を図2に示す。
基数4のブース符号化は、3Xを用意せずに累算加算数をおよそ半分にすることができる。図2は乗数のY2i+1、Y2i、Y2i−1をYi/2=−2Y2i+1+Y2i+Y2i−1に代入することによってブース符号化されたYi/2を示す。図2に示すように、Yi/2が取りうる値は、−2、−1、0、1、2のいずれかであるため、各部分積列の取りうる値は、−2X、−X、0、X、2Xのいずれかとなる。
このように、部分積列は負の値(−2X、−X)を取る場合が生じるので、後述する部分積加算部450で行う部分積列の加算では、負の部分積列に対応するために符号ビットが必要となる。
本実施の形態に係る発明では、部分積加算部450が部分積列に含まれる部分積列の正負を示す符号ビットの加算を高速に処理することが可能であるが、処理方法については後述する。
【0019】
<部分積生成部400による部分積生成>
図3に部分積生成部400によって乗数Yと被乗数Xとから生成された部分積の一例を示す。
乗数Y(Y5、Y4、Y3、Y2、Y1、Y0)はブース符号化部20によってブース符号化されてY(Y54、Y32、Y10)となっている。Y54、Y32、Y10は−2、−1、0、1、2のいずれかの値を持つ。
生成された部分積は「X0×Y10」、「X1×Y10」、「X2×Y10」、「X3×Y10」、・・・・、「X5×Y54」となり、部分積の数はブース符号化する前r2個の半分r2/2個となっている。例えば、「X0×Y10」、「X1×Y10」、「X2×Y10」、「X3×Y10」、「X4×Y10」、「X5×Y10」の6つの部分積から構成される一列目の部分積列はX×Y10と等価である。乗数Xは正の数であるため、一列目の部分積列の正負はY10の正負により定まる。2列目、3列目の部分積列も同様である。
【0020】
<部分積加算部450による部分積列に含まれる符号ビットの処理>
次に、複数の部分積列の絶対値の高速加算処理のため、部分積加算部450によって実行される符号ビットの処理について説明する。
部分積加算部450は、部分積列を3列単位で加算して2列のビット列を出力するワレスツリー(WALLACE TREE)や部分積列を4列単位で加算して2列のビット列を出力するコンプレッサー(4−2COMPRESSOR)などにより実現することができる。
このように、部分積加算部450が部分積列を3列または4列単位に加算して2列のビット列を出力する処理を行うことは、処理スピード上好ましい。しかし、部分積加算部450は上記以外にも部分積列をn列単位に加算してk列のビット列を出力するカウンタ(n−kCOUNTER(n>k))によって実現可能である。
以下に説明する部分積加算部450は、部分積列を3列単位で加算して2列のビット列を出力するWALLACE TREEの実装を想定している。
【0021】
図4は、部分積加算部450が、符号ビットを含む複数の部分積列の加算のための前処理として行う符号ビットの処理方法を示している。
一般に、P=X×Y+A+Bの積和演算では、入力値Y、X、A、Bの各々がrビットである場合、最終結果Pが2rビット以下の正数であることが保証されている。これは、入力値Y、X、A、Bの各々の最高桁数が(2r−1)であるため、これをPに代入して、P=(2r−1)×(2r−1)+(2r−1)+(2r−1)=22r−1となるためである。よって、積和演算部40の部分積加算部450から出力された2rビットを持つ2本のビット列のうち、各々のビット列の上位rビットが、図1に示すA(1)レジスタ500とB(1)レジスタ510に保持され、下位rビットが、A(2)レジスタ550とB(2)レジスタ560に保持される。
また、乗数Yをブース符号化することにより部分積生成部400が生成した部分積列が負の値(−X、−2X)をとる場合があるため、部分積加算部450の出力が負の数になる場合がある。したがって、部分積加算部450による複数の部分積列の加算途中において、部分積加算部450から出力される出力値Pが一時的に負数になる場合賀生ずる。したがって、部分積加算部450から出力される出力値Pの絶対値を格納する上記A(1)レジスタ500、B(1)レジスタ510、A(2)レジスタ550、B(2)レジスタ560とともに出力値の正負を示す符合ビットを格納するレジスタが必要になる。
よって、出力値Pの最高桁数が2rビットであることを考慮して、付加する符号ビットの最終位置は2r+1ビットとし、2r+1ビット目の符号ビットの値は、図1に示す補正レジスタ470に格納する。
本実施の形態の演算装置1では、補正レジスタ470に格納された符号ビットを用いてA(1)レジスタ500とB(1)レジスタ510から部分積加算部450にフィードバックされるキャリー1、キャリー2の補正を行う。この補正については後述する。
【0022】
部分積加算部450がWALLACE TREEによって実現される場合、部分積列A、部分積列B、部分積列Cは図4(a)に示すように、ビット位置が同じ各部分積列の3値を加算して2値を出力する。このように、部分積加算部450は、入力された部分積列の3値を加算して2値を出力するとともに、桁上りを所定の記憶領域に保存する複数の加算器(桁上げ保存型の全加算器)によって加算処理を行う。
図4(a)に示すように部分積列A、部分積列B、部分積列Cの各部分積列には各々の部分積列の符号を示す符号ビットAk−1、Bk、Ck+1が必要である。また、各列の最下位ビットを合わせるために0の値を持つB0、C0、C1が付加されている。
【0023】
部分積列A、部分積列B、部分積列Cの加算において、部分積加算部450は、以下の処理を行う。
まず、部分積加算部450は、部分積生成部400が生成した複数の部分積列に含まれる複数の符号ビットのビット位置を所定数の部分積列毎に揃える。すなわち、図4(b)に示すように部分積列A、部分積列B、部分積列Cの各部分積列のビット長を合わせるために符号ビットをパディングする。つまり、部分積加算部450は、部分積列Cのビット長に部分積列Aと部分積列Bに含まれる符号ビットの位置を合わせるために、部分積列Aでは符号ビットAk−1をkビット目及びk+1ビット目にパディングし、同様に、部分積列BではBkの符号ビットをk+1ビット目にパディングする(符号パディング)。
符号ビットのビット位置を揃える所定数の部分積列とは、WALLACE TREEであれば、3列の部分積列であり、4−2COMPRESSORであれば4列の部分積列である。
上記符号ビットのパディングは、−2l+2l−1+・・・・+1=−2l+1+2l+2l−1+・・・・+1であることを利用している。部分積加算部450の上記符号パディングはこの式を以下のように変形することによって可能となる。
(−2k−1Ak−1+2k−2Ak−2+・・・+A0)+(−2kBk+2k−1Bk−1+・・・+B0)+(−2k+1Ck+1+2kCk+・・・+C0)
=(−2k+1Ak−1+2kAk−1+2k−1Ak−1+2k−2Ak−2+・・・+A0)+(−2k+1Bk+2kBk+2k−1Bk−1+2k−2Bk−2+・・・+B0)+(−2k+1Ck+1+2kCk+2k−1Ck−1+2k−2Ck−2+・・・+C0)・・・(2)
【0024】
次に、部分積加算部450は図4(b)に示すパディングされた部分積列毎に図4(c)に示すような符号拡張を行う。
この符号拡張を担保する式を次に説明する。
上記(2)
=−2k+1(Ak−1+Bk+Ck+1)+2k(Ak−1+Bk+Ck)+2k−1(Ak−1+Bk−1+Ck−1)+2k−2(Ak−2+Bk−2++Ck−2)+・・・(A0+B0+C0)
=2k+1(−Ak−1−Bk−Ck+1)+2k(Ak−1+Bk+Ck)+2k−1(Ak−1+Bk−1+Ck−1)+2k−2(Ak−2+Bk−2++Ck−2)+・・・+(A0+B0+C0)・・・(3)
ここで、Aの反転を[A]で表すと、−Ak−1=[Ak−1]−1であるため、上記(3)は、次のように変形できる。
上記(3)
=2k+1([Ak−1]+[Bk]+[Ck+1]−1−1−1)+2k(Ak−1+Bk+Ck)+2k−1(Ak−1+Bk−1+Ck−1)+2k−2(Ak−2+Bk−2+Ck−2)+・・・+(A0+B0+C0)
=2k+1([Ak−1]+[Bk]+[Ck+1]−1−1−1−1+1)+2k(Ak−1+Bk+Ck)+2k−1(Ak−1+Bk−1+Ck−1)+2k−2(Ak−2+Bk−2+Ck−2)+・・・+(A0+B0+C0)
=2k+3+2k+1([Ak−1]+[Bk]+[Ck+1]+1)+2k(Ak−1+Bk+Ck)+2k−1(Ak−1+Bk−1+Ck−1)+2k−2(Ak−2+Bk−2+Ck−2)+・・・+(A0+B0+C0)・・・(4)
上記(4)に基づいて、図4(c)に示すように、部分積列A、部分積列B、部分積列Cのいずれかの列の「K+3ビット目に1、K+2ビット目に0を設定し、K+1ビット目のAk−1とBkとCk+1とを反転させる(以下、反転したAk−1、Bk、Ck+1を[Ak−1]、[Bk]、[Ck+1]と示す)とともにK+1ビット目に1を加算する」という符号拡張を行うことが可能となる。
続いて、部分積列A、部分積列B、部分積列Cのいずれかの列の(K+4)ビット目〜(2r+1)ビット目のすべてのビットに1を立てることによって符号拡張する。2r+1ビット目は、前述したように符号ビットの最終位置である。
【0025】
上記符号パディングと符号拡張の処理後に行う部分積加算部450の動作を説明する。
図5は、部分積加算部450の動作を示すフローチャートである。
前述したように、部分積加算部450は符号のパディング(S100)と符号拡張)とを行う。次に、部分積加算部450は、符号拡張された複数の部分積列に含まれる複数の所定の定数ビットを加算する。すなわち、部分積加算部450は、部分積生成部400が生成した複数の部分積列に含まれる複数の所定の定数ビットの値を加算して、定数値を予め算出し(S120)、算出した定数値をメモリ451に記憶し(S130)しておく。
それから、部分積加算部450は、部分積生成部400によって生成された複数の部分積列の絶対値を加算器によって加算し(S140)、加算した結果にメモリ451に記憶した定数値を付加する(S150)。
【0026】
図6〜図9は、部分積加算部450の一例として16ビットデータを処理するWALLACE TREEを用いた場合の部分積列を構成するビット列の変化を示す。
図6は、部分積加算部450(WALLACE TREE)に入力される複数の部分積列を示す。部分積列A〜部分積列Iの9列に示された白丸は部分積生成部400で生成された部分積である。黒丸は部分積列の正負を示す符号ビットである。
図7は、部分積加算部450(WALLACE TREE)に内在する加算器(桁上り保存型の全加算器)を用いて加算処理するために、部分積加算部450(WALLACE TREE)が部分積列A〜部分積列C、部分積列D〜部分積列F、部分積列G〜部分積列Iの3列単位に加算処理を行うことを示している。
図8は、部分積加算部450(WALLACE TREE)が上記3列ごとにビット長を合わせるために符号ビットをパディングした後の複数の部分積列のビット列を示している。
図9は、部分積加算部450(WALLACE TREE)が、符号ビットの最終位置である2r+1=2×16(ビット)+1=33ビット目まで部分積列A及び部分積列Dの符号拡張を行った後の複数の部分積列のビット列データを示している。破線内は複数の定数ビットから構成される。破線内の複数の定数ビットは、前述したように一定の演算式に基づいて所定のビット位置に所定の定数ビットを複数設定する(符号拡張)ことによって生じたビットである。
図10は、部分積加算部450(WALLACE TREE)が、符号拡張において設定した複数の所定の定数ビットを加算して定数値を算出した状態を示す。すなわち、図9の破線内にある複数の定数ビットを加算し、その加算結果を定数値として最終列に示している。最終列に示された定数値は部分積加算部450によってメモリ451に格納される。
さらに、後述する補正処理のために必要な符号ビットである33ビット目も計算しておく。最終列の定数値は部分積列の初列である部分積列A以降の各部分積列に入れ込みながら処理することができる。
図11では、部分積加算部450(WALLACE TREE)が、部分積列の絶対値を3列単位に全加算器によって加算して2値を出力する動作を繰り返すことによってデータを少しずつ圧縮していく動作を表している。この動作により最終的には32ビットのビット列が2本になるまで入力された入力ビットを圧縮する。
【0027】
以上のように、本実施の形態では、正の値を持つ複数ビットの被乗数Xと正の値を持つ複数ビットの乗数Yとの演算を行う演算装置1であって、複数ビットの乗数Yを正負のある複数の部分に分割する分割部(ブース符号化部20)と、被乗数Xに対して上記分割部(ブース符号化部20)が分割した乗数Yの各部を各々乗算し、乗算した乗算結果の正負を示した符号ビットと乗算した乗算結果の絶対値とを含む部分積列を複数生成する部分積生成部400と、上記部分積生成部400が生成した複数の部分積列に含まれる複数の符号ビットの値を加算し、加算した結果を定数値としてメモリ451に記憶し、上記部分積生成部400が生成した複数の部分積列の絶対値を加算器によって加算し、加算した結果に上記メモリ451に記憶した符号ビットを付加する部分積加算部450とを備える演算装置1について説明した。
【0028】
また、ビットの符号拡張によるビット列の最適化を行ったWALLACE TREEや4−2COMPRESSORを用いて構成した積和演算部40を持ち、モンゴメリ法を実行する多倍長演算装置(演算装置1)について説明した。すなわち、上記部分積加算部450は、上記部分積生成部400が生成した複数の部分積列に含まれる複数の符号ビットのビット位置を所定数の部分積列毎に揃え、さらに、一定の演算式に基づいて所定のビット位置に所定の定数ビットを複数設定し、設定した複数の所定の定数ビットから定数値を算出し、算出した定数値をメモリ451に記憶する演算装置1について説明した。
【0029】
また、WALLACE TREEや4−2 COMPRESSOR等を用いた部分積加算部450を含む積和演算部40と、その後に必ず必要な高速2値加算器等によって構成される圧縮部60の間に第2のレジスタ50を入れて、第2のレジスタ50から出力される出力ビットのうち下位半数ビットを2値加算器650等によって構成される圧縮部60に入力し、上位半数ビットをWALLACETREEや4−2 COMPRESSOR等を用いた部分積加算部450を含む積和演算部40への入力としてフィードバックさせた構成をもつモンゴメリ法による多倍長演算装置(演算装置1)について説明した。すなわち、複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算装置1であって、複数ビットの乗数Yを複数の部分に分割する分割部(ブース符号化部20)と、被乗数Xに対して上記分割部(ブース符号化部20)が分割した乗数Yの各部を各々乗算して、部分積列を複数生成する部分積生成部400と、上記部分積生成部400が生成した複数の部分積列を加算器によって加算する部分積加算部450と、上記部分積加算部450が加算した加算結果を保持するレジスタ(第2のレジスタ50)と、上記レジスタ(第2のレジスタ50)が保持した加算結果の所定の部分(下位rビット×2)を複数の入力ビットとして入力し、入力した複数の入力ビットを加算器により加算することによって入力ビットを圧縮して加算結果Pとして出力する圧縮部60とを備えた演算装置1について説明した。
【0030】
上述したように本実施の形態の演算装置1では、ブース符号化部20が乗数Yをブース符号化することによって、部分積生成部400で生成される部分積列がブース符号化しない場合の半分となる。
また、部分積加算部450が符号拡張後の定数項をあらかじめ計算することを可能にするために、入力されたビット列の最適化が図られている。これによって、複数の部分積列を所定の単位に区切った各初列の符号パディングに必要な面積以外はほとんど面積を増加せずにビットデータの符号拡張を行うことができる。このように、本実施の形態の演算装置1においては、モンゴメリ乗算に使用する部分積が半分で、かつ、データを符号拡張することによってデータを最適化しているため、従来と比較して高速な処理が可能となり、かつ、前記高速処理に伴う面積増も最小限に抑止可能な回路を構成することができる。
【0031】
<補正レジスタ470による補正>
本実施の形態の演算装置1では、部分積加算部450から出力された加算結果は、A(1)レジスタ500とB(1)レジスタ510に格納された上位2rビットのデータを直接、部分積加算部450にフィードバックしている。このため、A(1)レジスタ500とB(1)レジスタ510にそれぞれ格納された上位rビットのデータを加算した後に部分積加算部450にフィードバックする場合と比べ、A(1)レジスタ500とB(1)レジスタ510にそれぞれ格納された上位rビットのデータを加算した後に部分積加算部450にフィードバックした場合にはr+1ビット目の繰り上がりのデータは切り捨てられた状態で部分積加算部450にフィードバックされるのに対し、本実施の形態の場合にはA(1)レジスタ500とB(1)レジスタ510にそれぞれ格納された上位rビットのデータを加算せずに、直接、部分積加算部450にフィードバックしているため、部分積加算部450による加算の結果には、上記r+1ビット目の繰り上がり、すなわち、切り捨てられるべき桁上りの値が含まれている場合が生じる。
【0032】
これを補正するために部分積加算部450は、2rビットの部分積列とフィードバックされたキャリー1とキャリー2とを加算するとともに加算結果の正負を示す符号ビットとして2r+1ビット目を計算し、2r+1ビット目の値(桁上り)は補正レジスタ470に格納する。
補正レジスタ470に格納された2r+1ビット目の値は、部分積加算部450による上記加算の結果、桁上りがない場合は0になる。すなわち、切り捨て項(2値加算の桁上り)がキャリー1とキャリー2との加算結果に含まれる場合には2r+1ビット目は1になり、切り捨て項(2値加算の桁上り)がキャリー1とキャリー2との加算結果に含まれない場合には2r+1ビット目は0になる。
よって、補正レジスタ470に格納された桁上りによって部分積加算部450から出力される加算結果を補正することができる。したがって、補正レジスタ470に1が格納されている場合(桁上りあり)には、部分積加算部450による加算結果から1を減算して出力し、補正レジスタ470に0が格納されている場合(桁上りなし)には、部分積加算部450による加算結果を補正せずに出力する。
このように、部分積加算部450から出力される出力結果を補正することによって、従来、キャリー1とキャリー2とを2値加算した後に、部分積加算部450にフィードバックしていたのを、キャリー1とキャリー2の2値加算をせずに、直接、部分積加算部450にフィードバックし、部分積加算部450によって、直接、部分積列にキャリー1とキャリー2とを加算しても正確な演算結果を得ることができる。
よって、従来の2値加算器では、rビットのモンゴメリ演算結果Pを出力するための2値加算とともにrビットのキャリー1とキャリー2との2値加算とを行っていたため、2rビットのビット列を処理する全加算器が必要であったが、本実施の形態の演算装置1では、キャリー1とキャリー2との2値加算は不要であり、rビットのビット列を処理する全加算器600があれば演算が可能となる。
【0033】
以上、積和演算部40の出力が必ず正数になることを利用してWALLACETREEや4−2COMPRESSOR等を用いた部分積加算部450において加算結果に補正処理を行う構成を持つモンゴメリ法による多倍長演算装置(演算装置1)について説明した。すなわち、部分積加算部450が行う加算処理の結果、発生した桁上りを保持する補正レジスタ470を備え、部分積加算部450は、上記レジスタ(第2のレジスタ50)が保持した加算結果の一部(上記rビット×2)をフィードバックビットとして入力し、入力したフィードバックビットを部分積生成部400が生成した複数の部分積列とともに加算器によって加算し、加算した結果を補正レジスタ470に保持されている桁上りに基づいて補正する演算装置1について説明した。
【0034】
このように、本実施の形態の演算装置1の全加算器600は従来の半分のビット長の処理を実行すればよいため、演算装置1は従来より小さい回路面積で構成できる。また、本実施の形態の演算装置1では、キャリー1とキャリー2とを加算せずにフィードバックすることが可能であるため、回路全体の遅延が従来のおよそ半分で済む。よって、従来のモンゴメリ演算装置に比べ高速な処理が可能となる。
【0035】
<積和演算部40と圧縮部60の処理の遅延>
以上のようの構成された演算装置1では、積和演算部40(部分積生成部400と部分積加算部450)が1クロックごとに行う処理に費やす処理時間と圧縮部60が1クロック毎に行う処理に費やす処理時間とがほぼ同時間で処理可能である。このように、積和演算部40と圧縮部60の処理の理論遅延がほぼ同等のため、演算装置1は部分積生成部400と上記部分積加算部450とが1クロック毎に行う処理に費やす処理時間と圧縮部60が1クロック毎に行う処理に費やす処理時間とを連動させることができる。したがって、積和演算部40(部分積生成部400と部分積加算部450)と圧縮部60との処理時間の差による待ち時間が生じないため、積和演算部40(部分積生成部400と部分積加算部450)と圧縮部60との間に第2のレジスタ50を入れることで演算装置1は従来の約2倍の処理速度を得ることができる。
【0036】
実施の形態2.
以下、実施の形態2について説明する。
実施の形態1は、レジスタの少ない環境において効果的な実装となっているが、ある特定のデバイス(FPGA等)においては論理回路部分(ロジック)と記憶部分(レジスタ)が1:1で使用できる場合がある。
図12は、このような場合に効果を発揮する、本実施の形態のシステム構成図である。
本実施の形態では、部分積加算部450の内部に並列に配置した複数の2値加算器を複数列設ける。複数列に設けられた複数の2値加算器は、入力ビット列を加算して半数ビットからなるビット列として出力する加算処理をトーナメント方式に行うことで部分積生成部400が生成した部分積を加算している。ただし、2値加算器によらず、4値加算器や8値加算器によってトーナメント方式に加算することもできる。
図12に示すように、本実施の形態の演算装置1の部分積加算部450は、2値加算をトーナメント式に行い、2値加算毎にその出力をレジスタに格納する。例えば、上位レジスタ(0)51から出力された任意のnビットのデータは、2値加算器61から2値加算器62までn/2個の加算器によって加算され、n/2個のデータに圧縮される。n/2個のデータは上位レジスタ(1)52に格納された後、2値加算器63から2値加算器64までn/4個の加算器によって加算され、n/4個のデータに圧縮される。この動作を繰り返すことにより、所定のビット数にまで入力された部分積列が圧縮される。
【0037】
このように、部分積加算部450は、複数の部分積列の加算処理を複数の2値加算でトーナメント方式に行い、その2値加算の出力をレジスタに格納して毎回、パイプライン化するが、部分積加算部450が部分積列の2値加算を行う際には、上位側と下位側を半数ビットに分けて各々パイプラインに処理する。
下位側の半数ビットを加算した結果生じた桁上りは桁上りレジスタ620に格納され、下位側から上位側へ桁上りを加算する処理は、上位側のパイプライン列数を1列増加して(2値加算器(桁上り加算部)69+上位レジスタ(f+1)47)、桁上りレジスタ620に格納された桁上りと上位レジスタ(f)54に格納された上位側の加算結果とを2値加算器(桁上り加算部)69によって加算することによって実行され、加算結果は上位レジスタ(f+1)47に格納される。
【0038】
2値加算器70は、上位レジスタ(f+1)47に格納されたビット列の上位ビットと、1クロック前のモンゴメリ乗算結果P1であるP1とを2値加算し、上位レジスタ(f+2)49に格納するとともに、桁上りを桁上りレジスタ630に格納する。上位レジスタ(f+2)49に格納されたデータは任意のタイミングにおいてモンゴメリ乗算結果P1として出力される。
また、2値加算器71は、上位レジスタ(f+1)47に格納されたビット列の下位ビットと、1クロック前の桁上りレジスタ640に格納されたビット列であるP3又は1クロック前の下位レジスタ(f+1)48に格納されたデータであるP2とを2値加算し、下位レジスタ(f+1)48に格納するとともに、桁上がりを桁上りレジスタ640に格納する。下位レジスタ(f+1)48に格納されたP2及び桁上りレジスタ640に格納されたP3は任意のタイミングに出力される。
【0039】
以上、複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算装置1であって、複数ビットの乗数Yを複数の部分に分割する分割部(ブース符号化部20)と、被乗数Xに対して上記分割部(ブース符号化部20)が分割した乗数Yの各部を各々乗算して、部分積列をビット列として複数生成する部分積生成部400と、上記部分積生成部400が生成した複数の部分積列の各ビット列を上位ビット列と下位ビット列とに分割し、分割した複数の上位ビット列と複数の下位ビット列とを複数段に配置された複数の加算器によって各々に分けて加算する部分積加算部450と、上記部分積加算部450が複数の下位ビット列を加算した結果、発生した桁上りを保持する桁上りレジスタ620と、上記桁上りレジスタ620が保持した桁上りを上記部分積加算部450が加算した複数の上位ビット列の加算結果に加算する2値加算器(桁上り加算部)69とを備えた演算装置1について説明した。
【0040】
また、上記部分積加算部450は、複数段に配置された複数の加算器が加算した加算結果を格納するレジスタ(上位レジスタ(0)51〜上位レジスタ(f)54、下位レジスタ(0)55〜下位レジスタ(f)58)を各段の加算器(2値加算器61〜2値加算器68)毎に備え、上記各段の加算器(2値加算器)と各段の加算器(2値加算器)毎に備えられたレジスタとによって上記分割した複数の上位ビット列の加算処理と複数の下位ビット列の加算処理とを別々にパイプライン処理する演算装置1について説明した。
【0041】
このように、本実施の形態の演算装置1の部分積加算部450は、2値加算器による加算をパイプライン化している。
ここで、モンゴメリ乗算のアルゴリズムを演算する演算装置1をパイプライン化した場合には通常、処理効率を著しく低下させる待ち時間が発生してしまう。これは、前述したようにモンゴメリ乗算のアルゴリズムが、ステップ8で実行される式から算出さる中間値t(t:=P[0]×n’(mod 2r))の入力値P[0]は前のループにおける出力P[0]であり、中間値tはステップ10で実行される積和演算carry|P[j]:=t×n[j]+P[j−1]+carryの入力値の一つとなっているからである。
したがって、待ち期間の発生を抑止しながらモンゴメリ乗算に必要な中間値tを計算するために、本実施の形態の演算装置1では、部分積加算部450と別の回路である中間値算出部80を設け、ここで中間値tの演算を行うことにより、パイプライン化した部分積加算部450を用いて中間値tを計算することにより待ち時間が発生することを避けている。
中間値算出部80は部分積加算部450の処理単位に依存して、回路構成を変更することができ、逐次乗算器やマルチサイクルパスを用いた乗算器、もしくは、部分積加算器450の代わりに2値加算を用いているため、中間値tを計算するために必要なデータが下位ビットから順次決定されることを利用してオンザフライ(on the fly)に乗算を行うことができる。
【0042】
図12に示す逐次型乗算の場合、下位レジスタ(f)58から出力された出力結果P1とn’とが中間値算出部80に入力され、中間値算出部80によって中間値tが部分積加算部450とは別回路で算出される。
逐次型乗算の場合、部分積加算部450によって下位のビット列が加算された結果出力される出力値n’を中間値算出部80に入力し、入力した出力値n’に基づいて中間値tを算出する。
オンザフライの場合、下位レジスタ(f)58から出力された出力結果P1が中間値算出部80に入力されるとともに、下位レジスタ(1)56に格納された出力値n’の最下位から0ビット目及び1ビット目(21ビット数)を図12の点線で示すように直接、中間値算出部80に入力し、同様に、下位レジスタ(2)57に格納された出力値n’の最下位から2ビット目〜5ビット目(22ビット)を図12の点線で示すように直接、中間値算出部80に入力する、という動作を繰り返すことによって、出力値n’を部分的に中間値算出部80に入力し、入力した出力値n’の一部に対応する部分の中間値tを入力される度に算出することを繰り返すことによって、最終的に出力値n’のすべてに対応する中間値tを算出する方法である。すなわち、中間値算出部80は、部分積加算部450に配置されたf段目(f>0、fは整数)のレジスタに格納されたビット列の一部を出力値n’の一部として入力し、入力した出力値n’の一部に基づいて中間値tの一部を算出する。
【0043】
図13は、本実施の形態の他のシステム構成図として、マルチサイクルパスによって中間値tを算出する場合を示す。
マルチサイクルパスの場合、中間値算出部80は、部分積加算部450によって下位のビット列が加算された結果、出力された出力値n’を複数クロックに一度の割合で取得し、取得した出力値n’に基づいて中間値tを算出する。
この演算装置1の中間値算出部80に入力されるデータは、演算装置1に入力される乗数Yと被乗数Xを入力し、さらに、あらかじめ計算したn’(=−n−1(modR))を入力する。中間値算出部80は、下位のビットが決定するまで待ち、それからマルチサイクルパスを用いて、例えば3クロック(2値加算を3回処理)に1回の割合でn’及び出力結果Pを入力する。ただし、マルチサイクルパスでは、上記入力データの入力を必ずしも3クロックに1回の割合に限ることはなく、複数回(予め定められた回数)に1回の割合で上記入力データを入力すればよい。
【0044】
以上、本実施の形態の演算装置1では、オンザフライ方式で演算するのではなく、下位のビットが決定するまで待ち、それから逐次型乗算方式に中間値算出部80を用いてモンゴメリ法で必要な中間値tを演算する回路である中間値算出部80を持つ多倍長演算装置(演算装置1)について説明した。
【0045】
さらに、本実施の形態の演算装置1では、オンザフライ方式や逐次型乗算方式で演算するのではなく、下位半分のビットが決定するまで待ち、それからマルチサイクルパスを用いてモンゴメリ法で必要な中間値tを演算する回路である中間値算出部80を持つ多倍長演算装置(演算装置1)について説明した。
【0046】
このように、本実施の形態の演算装置1は、部分積加算部450が処理する2値加算でパイプライン化が図られているため、n’は下位ビットから順番に、パイプラインを1列経るごとに2nビット(n=1,2,3・・・)ずつ決定される。これを利用してモンゴメリ法で必要な中間値tをパイプライン化している部分積加算部450とは別の回路である中間値算出部80でオンザフライ方式に並列に演算する回路を持つモンゴメリ法による多倍長演算装置(演算装置1)について説明した。
【0047】
上記逐次型乗算方式によって中間値tを算出する場合には、オンザフライ方式やマルチサイクルパス方式と比較して、回路面積を小さくできるという利点がある。ただし、入力値が大きい場合にはパイプライン列数が増加するために、オンザフライ方式やマルチサイクルパス方式と比較して、中間値tの算出までに時間がかかる。よって、入力値が大きい場合にはオンザフライ方式やマルチサイクルパス方式を用いて中間値tを算出するほうが望ましい。
【0048】
以上、すべての実施の形態で開示した発明は、ASIC(APPLICATION SPECIFIC INTEGRATED CIRCUIT)やFPGA(FILED PROGRAMMABLE GATE ARRAY)等の回路によって実装が可能である。
特に、実施の形態1に係る演算装置1は、チップ単価が低額なASICによって実装することによって積和演算の高速処理が可能になる。
また、実施の形態2に係る演算装置1は、設計の初期コストが安価であり、また、回路の変更に対して柔軟に対応できるとともに2値加算が高速に処理できるFPGAによって実装することによって、より高速なモンゴメリ乗算が可能となる。
また、すべての実施の形態で開示した発明は、公開鍵暗号系のアルゴリズムで多用されている、剰余演算、乗算剰余演算等を実行する上で適している。特に、P.L.Montgomeryが提案したアルゴリズムであるモンゴメリ法(P.L.Montgomery、“Modular Multiplication without Trial Division”、Mathematics of Computation、Vol.44、No.170、pp.519−521、April、1985)をハードウエアで高速に実行できる。
【0049】
【発明の効果】
この発明の演算装置によれば、剰余演算、乗算剰余演算等を高速に実行することができる。
【図面の簡単な説明】
【図1】実施の形態1に係る演算装置1の全体構成図。
【図2】ブース符号化部20が行う乗数Yのブース符号化を示す図。
【図3】部分積生成部400が生成する部分積の一例を示す図。
【図4】部分積加算部450が行うデータの最適化方法を示す図。
【図5】部分積加算部450が動作を示す図。
【図6】部分積加算部450に入力されるデータを示す図。
【図7】部分積加算部4503列ずつに処理を行うことを示す図。
【図8】部分積加算部450が行う符号ビットのパディングを示す図。
【図9】部分積加算部450が行う符号拡張を示す図。
【図10】部分積加算部450による定数項の計算と符号拡張終了後の部分積を示す図。
【図11】部分積加算部450が行う圧縮動作を示す図。
【図12】実施の形態2に係る演算装置1の全体構成図。
【図13】実施の形態2に係る演算装置1の他の全体構成図。
【符号の説明】
1 演算装置、10 セレクタ、11 セレクタ、20 ブース符号化部、30 第1のレジスタ、40 積和演算部、47 上位レジスタ(f+1)、48下位レジスタ(f+1)、49 上位レジスタ(f+2)、50 第2のレジスタ、51 上位レジスタ(0)、52 上位レジスタ(1)、53 上位レジスタ(2)、54 上位レジスタ(f)、55 下位レジスタ(0)、56 下位レジスタ(1)、57 下位レジスタ(2)、58 下位レジスタ(f)、60 圧縮部、61,62,63,64,65,66,67,68,70,71 2値加算器、69 2値加算器(桁上り加算部)、80 中間値算出部、400部分積生成部、450 部分積加算部、451 メモリ、470 補正レジスタ、500 A(1)レジスタ、510 B(1)レジスタ、550 A(2)レジスタ、560 B(2)レジスタ、600 全加算器、610,620,630,640 桁上りレジスタ、650 2値加算器、660 桁上りレジスタ。
Claims (17)
- 正の値を持つ複数ビットの被乗数Xと正の値を持つ複数ビットの乗数Yとの演算を行う演算装置であって、
複数ビットの乗数Yを正負のある複数の部分に分割する分割部と、
被乗数Xに対して上記分割部が分割した乗数Yの各部を各々乗算し、乗算した乗算結果の正負を示した符号ビットと乗算した乗算結果の絶対値とを含む部分積列を複数生成する部分積生成部と、
上記部分積生成部が生成した複数の部分積列に含まれる複数の符号ビットの値を加算し、加算した結果を定数値としてメモリに記憶し、上記部分積生成部が生成した複数の部分積列の絶対値を加算器によって加算し、加算した結果に上記メモリに記憶した符号ビットを付加する部分積加算部とを備える演算装置。 - 上記部分積加算部は、
上記部分積生成部が生成した複数の部分積列に含まれる複数の符号ビットのビット位置を所定数の部分積列毎に揃え、さらに、一定の演算式に基づいて所定のビット位置に所定の定数ビットを複数設定し、設定した複数の所定の定数ビットから定数値を算出し、算出した定数値をメモリに記憶する請求項1に記載された演算装置。 - 複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算装置であって、
複数ビットの乗数Yを複数の部分に分割する分割部と、
被乗数Xに対して上記分割部が分割した乗数Yの各部を各々乗算して、部分積列を複数生成する部分積生成部と、
上記部分積生成部が生成した複数の部分積列を加算器によって加算する部分積加算部と、
上記部分積加算部が加算した加算結果を保持するレジスタと、
上記レジスタが保持した加算結果の所定の部分を複数の入力ビットとして入力し、入力した複数の入力ビットを加算器により加算することによって入力ビットを圧縮して加算結果として出力する圧縮部とを備えた演算装置。 - 上記演算装置は、さらに、
上記部分積加算部が行う加算処理の結果、発生した桁上りを保持する補正レジスタを備え、
上記部分積加算部は、
上記レジスタが保持した加算結果の一部をフィードバックビットとして入力し、入力したフィードバックビットを上記部分積生成部が生成した複数の部分積列とともに加算器によって加算し、加算した結果を上記補正レジスタに保持されている桁上りに基づいて補正する請求項3に記載された演算装置。 - 上記部分積生成部と上記部分積加算部とが1クロック毎に行う処理に費やす処理時間と上記圧縮部が1クロック毎に行う処理に費やす処理時間とを連動させる請求項3に記載された演算装置。
- 上記部分積加算部は、部分積列を3列単位で加算するワレスツリー(WALLACE TREE)または部分積列を4列単位で加算するコンプレッサー(4−2COMPRESSOR)のいずれかの加算器によって複数の部分積列を加算する請求項1または請求項3のいずれかに記載された演算装置。
- 複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算装置であって、
複数ビットの乗数Yを複数の部分に分割する分割部と、
被乗数Xに対して上記分割部が分割した乗数Yの各部を各々乗算して、部分積列をビット列として複数生成する部分積生成部と、
上記部分積生成部が生成した複数の部分積列の各ビット列を上位ビット列と下位ビット列とに分割し、分割した複数の上位ビット列と複数の下位ビット列とを複数段に配置された複数の加算器によって各々に分けて加算する部分積加算部と、
上記部分積加算部が複数の下位ビット列を加算した結果、発生した桁上りを保持する桁上りレジスタと、
上記桁上りレジスタが保持した桁上りを上記部分積加算部が加算した複数の上位ビット列の加算結果に加算する桁上り加算部とを備えた演算装置。 - 上記部分積加算部は、さらに、
複数段に配置された複数の加算器が加算した加算結果を格納するレジスタを各段の加算器毎に備え、
上記各段の加算器と各段の加算器毎に備えられたレジスタとによって上記分割した複数の上位ビット列の加算処理と複数の下位ビット列の加算処理とを別々にパイプライン処理する請求項7に記載された演算装置。 - 上記演算装置は、さらに、
演算に必要な中間値tを算出する中間値算出部を備える請求項7に記載された演算装置。 - 上記中間値算出部は、上記部分積加算部によって下位のビット列が加算された結果出力される出力値n’に基づいて中間値tを算出する請求項9に記載された演算装置。
- 上記中間値算出部は、上記部分積加算部に配置されたf段目(f>0、fは整数)の加算器によって下位のビット列が加算された結果、出力されるビット列の一部を上記出力値n’の一部として入力し、入力した出力値n’の一部に基づいて中間値tの一部を算出する請求項9に記載された演算装置。
- 上記中間値算出部は、上記部分積加算部によって下位のビット列が加算された結果、出力された出力値n’を複数クロックに一度の割合で取得し、取得した出力値n’に基づいて中間値tを算出する請求項9に記載された演算装置。
- 上記分割部は、
複数ビットの乗数Yを2ビット毎に分割し、分割した乗数Yの各2ビットが持つ0と1と2と3とのいずれかの値を−2と−1と0と1と2とのいずれかの変換値に変換し、
上記部分積生成部は、被乗数Xと上記分割部によって変換された乗数Yの各変換値とを乗算することによって複数の部分積列を生成する請求項1または請求項3または請求項7のいずれかに記載された演算装置。 - 上記演算装置は、モンゴメリ法に従って被乗数Xと乗数Yとの積和演算を行う請求項1または請求項3または請求項7のいずれかに記載された演算装置。
- 正の値を持つ複数ビットの被乗数Xと正の値を持つ複数ビットの乗数Yとの演算を行う演算方法であって、
複数ビットの乗数Yを正負のある複数の部分に分割し、
被乗数Xに対して上記分割した乗数Yの各部を各々乗算し、乗算した乗算結果の正負を示した符号ビットと乗算した乗算結果の絶対値とを含む部分積列を複数生成し、
上記生成した複数の部分積列に含まれる複数の符号ビットの値を加算し、加算した結果を定数値としてメモリに記憶し、上記部分積生成部が生成した複数の部分積列の絶対値を加算器によって加算し、加算した結果に上記メモリに記憶した符号ビットを付加する演算方法。 - 複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算方法であって、
複数ビットの乗数Yを複数の部分に分割し、
被乗数Xに対して上記分割した乗数Yの各部を各々乗算して、部分積列を複数生成し、
上記生成した複数の部分積列を加算器によって加算し、
上記加算した加算結果をレジスタに保持し、
上記レジスタに保持された加算結果の所定の部分を複数の入力ビットとして入力し、入力した複数の入力ビットを加算器により加算することによって入力ビットを圧縮して加算結果として出力する演算方法。 - 複数ビットの被乗数Xと複数ビットの乗数Yとの演算を行う演算方法であって、
複数ビットの乗数Yを複数の部分に分割し、
被乗数Xに対して上記分割した乗数Yの各部を各々乗算して部分積列をビット列として複数生成し、
上記生成した複数の部分積列の各ビット列を上位ビット列と下位ビット列とに分割し、分割した複数の上位ビット列と複数の下位ビット列とを複数段に配置された複数の加算器によって各々に分けて加算し、
上記複数の下位ビット列を加算した結果、発生した桁上りを桁上りレジスタに保持し、
上記桁上りレジスタに保持された桁上りを上記加算した複数の上位ビット列の加算結果に加算する演算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003013780A JP4177125B2 (ja) | 2003-01-22 | 2003-01-22 | 演算装置及び演算装置の演算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003013780A JP4177125B2 (ja) | 2003-01-22 | 2003-01-22 | 演算装置及び演算装置の演算方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004227248A true JP2004227248A (ja) | 2004-08-12 |
JP4177125B2 JP4177125B2 (ja) | 2008-11-05 |
Family
ID=32902020
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003013780A Expired - Lifetime JP4177125B2 (ja) | 2003-01-22 | 2003-01-22 | 演算装置及び演算装置の演算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4177125B2 (ja) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
KR100958965B1 (ko) | 2006-09-29 | 2010-05-20 | 인텔 코오퍼레이션 | 어드레스 가능 위치로부터의 인코딩된 데이터에 기반한승수 곱 생성 |
JP5175983B2 (ja) * | 2009-09-24 | 2013-04-03 | 株式会社東芝 | 演算装置 |
JP2015068880A (ja) * | 2013-09-27 | 2015-04-13 | 富士通セミコンダクター株式会社 | 演算回路および演算方法 |
US9811318B2 (en) | 2014-03-31 | 2017-11-07 | Samsung Electronics Co., Ltd. | Montgomery multiplication method for performing final modular reduction without comparison operation and montgomery multiplier |
JP2023503119A (ja) * | 2019-11-21 | 2023-01-26 | 華為技術有限公司 | 乗算器及びオペレータ回路 |
-
2003
- 2003-01-22 JP JP2003013780A patent/JP4177125B2/ja not_active Expired - Lifetime
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008535011A (ja) * | 2005-04-01 | 2008-08-28 | テールズ | モンゴメリーのモジュラー乗算を実行する方法及びそのための装置 |
KR100958965B1 (ko) | 2006-09-29 | 2010-05-20 | 인텔 코오퍼레이션 | 어드레스 가능 위치로부터의 인코딩된 데이터에 기반한승수 곱 생성 |
US8078662B2 (en) | 2006-09-29 | 2011-12-13 | Intel Corporation | Multiplier product generation based on encoded data from addressable location |
JP5175983B2 (ja) * | 2009-09-24 | 2013-04-03 | 株式会社東芝 | 演算装置 |
JP2015068880A (ja) * | 2013-09-27 | 2015-04-13 | 富士通セミコンダクター株式会社 | 演算回路および演算方法 |
US9811318B2 (en) | 2014-03-31 | 2017-11-07 | Samsung Electronics Co., Ltd. | Montgomery multiplication method for performing final modular reduction without comparison operation and montgomery multiplier |
JP2023503119A (ja) * | 2019-11-21 | 2023-01-26 | 華為技術有限公司 | 乗算器及びオペレータ回路 |
JP7371255B2 (ja) | 2019-11-21 | 2023-10-30 | 華為技術有限公司 | 乗算器及びオペレータ回路 |
US11855661B2 (en) | 2019-11-21 | 2023-12-26 | Huawei Technologies Co., Ltd. | Multiplier and operator circuit |
Also Published As
Publication number | Publication date |
---|---|
JP4177125B2 (ja) | 2008-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5456766B2 (ja) | プログラム可能なプロセッサにおける随意選択的なガロア域計算の実行 | |
JP3238128B2 (ja) | リードソロモン符号化装置および方法 | |
US10768898B2 (en) | Efficient modulo calculation | |
CN108008932B (zh) | 除法合成 | |
US9928037B2 (en) | Modulo calculation using polynomials | |
JP2004326112A (ja) | マルチプルモジュラス選択器、累算器、モンゴメリー掛け算器、マルチプルモジュラス発生方法、部分掛け発生方法、累算方法、掛け算方法、モジュラス選択器、およびブースレコーダ | |
US20090132628A1 (en) | Method for Performing Decimal Division | |
US8261176B2 (en) | Polynomial division | |
JPH05210484A (ja) | ビット直列除算方法及び装置 | |
CN1258710C (zh) | 用于高效模数归约和模数乘法的电路和方法 | |
CN102004627B (zh) | 乘法舍入实现方法和装置 | |
JP4177125B2 (ja) | 演算装置及び演算装置の演算方法 | |
JP3297683B2 (ja) | 乗算器 | |
JP2004258141A (ja) | モンゴメリ乗算剰余の多倍長演算のための演算装置 | |
KR101929984B1 (ko) | 모듈러 곱셈기 및 그것의 모듈러 곱셈 방법 | |
KR100552694B1 (ko) | 유한 체에서 곱셈 연산 방법 및 장치 | |
JP3660075B2 (ja) | 除算装置 | |
Keote et al. | VLSI design of 64bit× 64bit high performance multiplier with redundant binary encoding | |
Monfared et al. | A new multiplicative inverse architecture in normal basis using novel concurrent serial squaring and multiplication | |
WO2003096182A1 (en) | “emod” a fast modulus calculation for computer systems | |
JP5450781B1 (ja) | 演算回路及び方法 | |
JP4408727B2 (ja) | ディジタル回路 | |
KR19980015799A (ko) | 조합 논리 회로에 의한 갈로아체 곱셈기 | |
Cho et al. | A hardware implementation of word-parallel bit-serial polynomial basis multiplier | |
JP2002358196A (ja) | 平方根の逆数計算方法、計算回路、及びプログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20040519 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20041026 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051221 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080610 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080717 |
|
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: 20080819 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20080821 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110829 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4177125 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110829 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120829 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120829 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130829 Year of fee payment: 5 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
EXPY | Cancellation because of completion of term |