JP2007500388A - 長整数乗算器 - Google Patents

長整数乗算器 Download PDF

Info

Publication number
JP2007500388A
JP2007500388A JP2006521687A JP2006521687A JP2007500388A JP 2007500388 A JP2007500388 A JP 2007500388A JP 2006521687 A JP2006521687 A JP 2006521687A JP 2006521687 A JP2006521687 A JP 2006521687A JP 2007500388 A JP2007500388 A JP 2007500388A
Authority
JP
Japan
Prior art keywords
level
bit
carry
adder
inputs
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.)
Pending
Application number
JP2006521687A
Other languages
English (en)
Inventor
ヘラルドゥス、テー.エム.フバート
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Publication of JP2007500388A publication Critical patent/JP2007500388A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5318Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel with column wise addition of partial products, e.g. using Wallace tree, Dadda counters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • G06F7/53Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel
    • G06F7/5324Multiplying only in parallel-parallel fashion, i.e. both operands being entered in parallel partitioned, i.e. using repetitively a smaller parallel parallel multiplier or using an array of such smaller multipliers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods 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/50Adding; Subtracting
    • G06F7/505Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination
    • G06F7/509Adding; Subtracting in bit-parallel fashion, i.e. having a different digit-handling circuit for each denomination for multiple operands, e.g. digital integrators

Landscapes

  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Complex Calculations (AREA)

Abstract

2つの長整数[long integer]を乗算する加算器回路は、長整数を構成する一連のワードを合計して中間結果を生成する加算器のネットワークを配備する。加数[addends]の数はビット位置の関数として変化し、加算器のネットワークは想定される加数の最大数に従ってネットワーク内の加算器のレベル数を削減するように設計されている。戦略的に配置された複数の追加の加算器は、ネットワーク内に位置付けられてレベルの数をさらに削減してもよい。ネットワークの和出力とキャリー出力[sum and carry outputs]を加算し、最上位ビットをネットワークの後続の計算出力に利用できるように保持する出力段が提供されてもよい。ネットワークは、ネットワークによる後続の計算が前の計算が完了する前に開始でき、前の計算の出力が最上位レベル(入力)と最下位レベル(出力)との間の中間レベルでネットワークにフィードバックされるように構成されてもよい。

Description

本発明は、2つの長整数の乗算と、第3の長整数をモジュロ(modulo―法とする―)する第3の長整数の加算とを行なう方法および装置に関する。こうした乗算は、たとえば、スマート・カードで使用されるものなどの暗号化プロセッサにおける暗号化アルゴリズムの実施中に繰り返し実行される必要がある。
電子デバイスにおける暗号化アルゴリズムの利用を拡大することは、長整数の剰余乗算[modular multiplications]を迅速かつ効果的に実行することの必要性を定着させてきている。たとえば、スマート・カードや他の多くの電子デバイスはRSAやその他の楕円曲線や超楕円の計算に基づく複数の暗号化プロトコルを使用している。こうしたプロトコルは、すべて基本的な要件として「R=X・Y+Z mod N」の形式の長整数の剰余乗算を行なう機能を備えている(ただし、Zの加算は常に必要なわけではない)。
概して、RSAなどのプロトコルでは、長整数XとYが1024ビットまたは2048ビットの整数であり、暗号化または復号化の演算を完了するためには、何百回、あるいは何千回もの乗算演算を実行する必要がある。したがって、こうした演算を実行する暗号化デバイスは、長整数の乗算を迅速に実行するのが望ましい。
こうした長整数の乗算を実行するという態様は、長整数を複数のワードに分割し、最終結果を得るために累積される一連の中間結果を生成する反復処理の中で連続的にワードをかけ合わせる操作である。この技術の特徴は、乗算過程の各段階でさまざまな長さの非常に多くの加数を合計する必要があることである。したがって、指定された任意のビット位置ごとに加数の数が大幅に変わる可能性がある。従来、こうした合計の演算は、ウォーレス・ツリー[Wallace tree]を使用して実施されているが、望まれるよりやや多くのハードウェアを利用し、やや長い遅延が発生する場合が少なくない。
効果的な長整数の乗算演算をできるだけ迅速に実行する方法および装置を提供することは、本発明の目的である。
非常に多くの加数の和を求める(特に加数のビット数は和のビット位置の関数として変化する場合)より効率的な方法および装置を提供することは、本発明の目的である。
1つの編成において、2つの長整数の乗算を行う加算器回路は、長整数を構成する一連のワードを合計して中間結果を生成する加算器のネットワークを配備する。加数の数はビット位置の関数として変化し、加算器のネットワークは想定される加数の最大数に従ってネットワーク内の加算器のレベル数を削減するように設計されている。1つの目的は、ビット位置の関数として変化する複数の加算器を含むようにネットワークを適応させることである。
別の編成では、中間結果を表すネットワークの和出力とキャリー出力とを加算する出力段が提供されてもよい。1つの目的は、最上位(キャリー)ビットをネットワークの後続の計算出力に利用できるように保持することによって、この出力段からネットワークにキャリー・ビットを返すときの遅延を防止することである。
別の編成において、1つの目的は、ネットワークが前の計算を完了する前に新しい加数セットによる後続の計算を開始できるようにすることである。加算器のネットワークは、前の計算の出力が最上位レベル(入力)と最下位レベル(出力)との中間のレベルでネットワークにフィードバックされるように構成されてもよい。
1つの態様により、本発明はマルチビット・ワードから複数の加数を合計する加算器回路であって、
それぞれ第1の数の和出力と第2の数のキャリー出力を備えるn個の入力を伴うキャリー・セーブ加算器回路のネットワークと、
各列が前記和の中のあらかじめ指定されたビット位置に対応する複数の列に編成され、複数レベルに編成された加算器回路と、
前記複数のワードから選択されたワードの対応するビット位置から複数の加数を受け取る第1のレベルと、
それぞれが(i)前記複数のワードから選択された他のワードの対応するビット位置、(ii)前記同じ列の上位レベルの加算器回路からの和出力、および(iii)下位のビット位置に対応する列の上位レベルの加算器回路からのキャリー出力の1つまたは複数から加数を受け取る下位のレベルを備えており、
各列内の前記n個の入力を伴う加算器の数はビット位置によって変わる加算器回路を提供する。
別の態様により、本発明は
複数の加数を受け取る入力と、
複数の加数を合計して上位部分と第1および第2の下位部分を備える出力を生成する第1の合計手段と、
前記入力で前記第1の上位部分を後続の計算に使用する前記入力の下位の位置に接続する第1のフィードバック・ラインと、
前記第1および第2の下位部分を合計して第1のワード出力を提供する第2の合計手段と、前記第2の合計手段からのキャリー・ビットを保持し、前記キャリー・ビットを後続の計算時に前記第2の合計手段への入力として提供するフィードバック・レジスタを含む出力段とを備える加算器回路を提供する。
別の態様により、本発明はマルチビット・ワードから複数の加数を合計するパイプライン型の加算器回路であって、
キャリー・セーブ加算器回路のネットワークを備えており、前記加算器回路は複数の列に編成され、各列は和の中のあらかじめ指定されたビット位置に対応し、複数レベルに編成され、第1のレベルは複数のワードから選択されたワードの対応するビット位置から複数の加数を受け取るために接続されており、下位のレベルは(i)前記複数のワードから選択された他のワードの対応するビット位置、(ii)同じ列の上位レベルの加算器回路からの和出力、および、(iii)下位のビット位置に対応する列の上位レベルの加算器回路からのキャリー出力の1つまたは複数から加数を受け取るために接続される第1の合計手段と、
最下位レベルの加算器回路の第1の複数の上位ビット出力を加算器回路の後続の計算に使用する中間レベルの対応する数の下位ビット入力に接続し、前記中間レベルは前記第1のレベルの加算器回路と最下位レベルの加算器回路との間にある、第1のフィードバック・ラインとを備える加算器回路を提供する。
ここで、例として添付の図面に関連づけながら本発明の実施態様について記述する。
積「X・Y+Z mod N」を計算するために(ただし、X、YおよびZは、たとえば1024または2048のビット長のオーダーの長整数型変数)、長整数型変数X、YおよびZは、たとえば32ビットまたは64ビット長のより小さな「ワード」に分割される。
まず次に示すように、XとZは一般的にそれぞれ長さkのn個のワードに分割される。
X=xn−1 n−1+xn−2 n−2+…+xおよび
Z=zn−1 n−1+zn−2 n−2+…+z
ただし、B=2である。1つの例では、k=32であり、別の例ではk=64である。このように、XとZは、それぞれkビット長の複数のワードに分割される。
次に、結果Rは次のように計算できる。
Figure 2007500388
したがって、R=(xn−j−1Y+zn−j−1+Rj−1) mod Nとなる。
まず、xn−1にY全体をかけ、zn−1を加え、Nを法とする還元を計算する。この結果はRである。
次に、xn−2にY全体をかけ、その結果にzn−2とR.Bを加え、Nを法とする還元を計算する。この結果はRである。
次に、xn−3にY全体をかけ、その結果にzn−3とR.Bを加え、Nを法とする還元を計算する。この結果はRである。
Xを構成するすべてのワードを使用して、最後のワードであるxを処理するまでこの手順を繰り返し、最終的な結果、R=Rn−1を得る。
しかし、1024ビット長のYという乗数は、実際的な観点からは好ましくない。したがって、Y、さらにRもたとえば32ビット長または16ビット長のより小さな「ワード」に分割する。
よって、基本的な乗算であるR=(xn−j−1Y+zn−j−1+Rj−1) mod Nも分割される。
YとRをmビット長のp個のワードに分割し、たとえばB=2とする。
Y=yp−1 p−1+yp−2 p−2+…+y
=rj,n−1 p−1+rj,p−2 p−2+…+rj,0
簡単にするために、まずXとYの長さが同じであり、XとYのワードのサイズが同じ、つまりp=nおよびm=kと仮定する。後で、そうでない場合に変更を必要とする部分を示す。
このように、XおよびYはそれぞれ長さkビットのn個のワードに分割される。これで次の式が得られる。
Figure 2007500388
を計算するには、次の演算を実行する。
まず、xn−j−1にyをかけ、rj−1,−1=zn−j−1を加え、その結果を2つの等しい部分、すなわち下位部分rj,0(mビット)と上位部分cj,0(kビット)に分割し、B.cj,0+rj,0=xn−j−1.y+rj−1,−1.rj,0が結果の一部として保存される。
次に、xn−j−1にyをかけ、直前のキャリー・ワード(carry word)cj,0を加える。さらに、z=rj−i,0も加える。この結果は2つの等しい部分、すなわち下位部分rj,1、と上位部分cj,1に再度分割され、B.cj,1+rj,1=xn−j−1.y+cj,0+rj−1,0j,1が結果の一部として保存される。
次に、Xn−j−1にyをかけ、これに直前のキャリー・ワードcj,1を加える。さらに、z=rj−1,1も加える。この結果は2つの等しい部分、すなわち下位部分rj,2と上位部分cj,2に再度分割され、B.cj,2+rj,2=xn−j−1.y+cj,1+rj−1,1.rj,2が結果の一部として保存される。
この手順は、yn−1による最後の乗算(すなわちxn−j−1にyn−1をかける)を実行し、直前のキャリー・ワードcj,n−2を加えるまで繰り返される。さらに、zn−2=rj−1,n−2も加える。この結果はそれぞれkビット長とmビット長の2つの部分、すなわち下位部分rj,n−1、上位部分cj,n−1に再度分割され、B.cj,n−1+rj,n−1=xn−j−1.yn−1+cj,n−2+rj−1,n−2.rj,n−1が結果の一部として保存される。
最後のステップは、cj,n−1とzn−1の加算であり、rj,n=cj,n−1+rj−1,n−1.rj,nが結果の一部として保存される。
これでRは完了して、変数Yより大きく、Rは変数YからXの1つのワード長によって導かれたものである。Rのサイズは好ましくはNを法とする還元で1つのワードだけ縮小され、縮小された結果はその後後続のRj+1を計算するときにRとして使用される。
上記の計算は、Xのワードの長さ(k)がYのワードの長さ(m)と等しい場合、すなわちB=Bのときの一般的な手順を説明している。
XのワードはYワードのと長さが異なってもよい。たとえば、k/m>1の場合、k=64およびm=16であり、したがってB=B の場合は次のようになる。
1. zの加算は、最初のk/m(この例では4)の乗算の間に行われ、Rの加算はその後で開始される。
2. キャリー・ワードcj,iは、結果rj,i(長さmビット)のk/m(=4)倍(長さ4mビット)である。
3. 最後のステップは、キャリー・ワードとRの残りの部分(いずれも4mビット幅)の加算で構成される。この加算は、k/mステップでy=0を選択することにより同じ乗数により行われる可能性があり、ここでは、各ステップでmビットのワードが加算される。
したがって、基本的な演算で、すべてのインデックスを省略すると次のようになる。
B・c+r=x・y+c+z
最初の演算の間は、c=0であり、zはZを構成するk/m個のワードにrのすべてのワードが続いたもので構成される。最後のk/m演算の間は、y=0であり、xは各Rに関する一連の演算全体に対して一定に保持される。
xとyの乗算を実行するのと同じ乗算器は、Nを法とする還元に使用できる。Xを構成するワード、すなわちxによる一連の乗算をすべて実行すると、結果Rは1つのkビット・ワードだけ拡張される。次にRは、次のRを計算する前に元の長さに戻すため、Nを法とする還元によってkビットだけ縮小される必要がある。
法とする還元には(たとえば、クイスクォータ[Quisquater]、バレット[Barret]、モンゴメリ[Montgomery]など)いくつかのアルゴリズムがあるが、これらはすべて次の形式の乗算を使用する。
=Xred・N+R
ただし、Xred(サイズはkビット)はモジュロNにかけて結果に加えられる。あるいは、Nの代わりに2の補数N’を使用してXredから減算する。この方法は、係数Xredが計算される方法が異なる。モンゴメリ[Montgomery]の還元の場合は、その結果はBでも割る必要がある。すなわち、すべてが0になる最初のワードが除外される。
同じ基本演算を次の縮小にも使用できる。
B・c+r=x・y+c+z
ただし、B=B、r=rj,i、x=Xred、y=N、およびz=rj,i
上記の乗算演算は、実現可能である多くの乗算器で実行できる。しかし、アレイ乗算器[array multiplier]は、こうした乗算器を実施する慣例的な方法である。図1に例を示す。
例示的なアレイ乗算器10は64×16ビットの乗算器であるが、他のビット構成を使用することもできる。アレイ乗算器10は、式Rの各項をB.c+r=x.y+c+zの形で計算する。xとcは64ビット幅であり、y、z、およびrは16ビット幅である。cは入力と出力の両方として、実際には2つの項、CcおよびCsで構成される。
アレイ乗算器の基本要素12を図1に示す。それには、入力xおよびyを受け取っている乗算器13、および積の項x・y、キャリーと和入力cおよびsを受け取り、キャリーと和出力cおよびsを生成する加算器14が含まれている。
アレイ乗算器10は17の「レイヤ」または「レベル」、「add1」、「add2」…「add17」から構成される。最初の16のレイヤadd1…add16は、乗算と加算を実行する。最後のレイヤであるadd17と各レイヤの一番右側の要素は、加算のみを行う。出力は16ビットr(15:0)、63ビットのキャリー項[carry term]Cc’(79:16)、63ビットの和項[sum term]Cs’(79:16)である。キャリー項Cc’と和項Cs’の和は、次の計算のキャリー項である。
B・c+r=x.y+c+z
実際に、この項が計算されることはない。代わりに、次の計算が行われる。
B・(c’+s’)+r=x.y+c’+s’+z
アレイ乗算器10の基本要素12は、ビット計算(c,s)=y*x+c+sを行う。最初のレイヤを除く各レイヤで、一番右側の加算器によってzの加算が行われる。17番目のレイヤは、r(15)の加算に必要な加算器のみで構成されている。このアレイ乗算器の実施を使用する問題点は動作速度が低下することであり、これはロジックのレイヤ17で遅延が累積する結果である。
したがって、パイプライン型乗算器を使用すると、処理のさまざまな段階が重複でき、計算時間を短縮できるので有利である。図2を参照すると、乗算処理中に必要なさまざまな加数の概略が示されている。64×16ビットの乗算の場合には、このプロセスで、(i) 16個の積項P、P1,…,P15、ただしPX(63:0)Y(j)、(ii)16ビットZ項Z(15:0)、(iii)63ビット・キャリー項Cc(62:0)、および(iv)63ビット和項Cs(62:0)の加算が必要である。
結果のR(15:0)は出力であり、中間項Cc’(78:16)、Cs’(78:16)は次の項Rj+1の計算で使用される。
図3は、ビット位置ごとの加数の数を示している。ビット位置0からビット位置15まで、加数の数は、さらに多くのP項が含まれるので、4から19まで直線的に増加する。その後ビット16で、zビットがなくなるため、1つ減少する。キャリー項と和項CcとCsが脱落している場合に、加数の数はビット62まで一定の18のままである。したがって、加数の数はビット位置63で2つ減って16になる。最後に、ビット位置63からビット位置78まで、より高い各P項が続いて脱落するので、加数の数は16から1まで直線的に減少する。
ウォーレス・ツリーは、最適化されたレベル数を使用して、多数の加数のための加算演算の性能に対するキャリー・セーブ加算器の配列を構成する従来の方法である。図4は、こうしたウォーレス・ツリー40の断片を示している。
各加算器は3つの入力を加算し、キャリーと和の2つの出力を提供する。ウォーレス・ツリーは、ビット位置ごとの加数の数は一定であると仮定しており、図4は、図3で示した必要な加算を実施するのに適したツリー40の構成を示している。この場合、加数はビット位置15での最大19個に達するので、ツリーはビット位置ごとに19個の加数で構成されている。
この図で「レイヤ1」として示されている第1のレベルでは、たとえば、ビット位置jで示されているように各ビット位置に対して6つのキャリー・セーブ加算器41がある。これら6つのキャリー・セーブ加算器は、合計18個の入力42、6つの和出力43および6つのキャリー出力44を提供する。さらに、1つの追加入力45があり、これはレベル3(「レイヤ3」)に追加される。これは、必要な合計19個の入力を提供する。
6つの和の出力43は、キャリー・セーブ加算器46によって次のレベル2で加算される。
6つのキャリー出力44は、ツリーの次のレベル2に追加されるが、j+1と示されている左側の次のビット位置のキャリー・セーブ加算器56に追加される。前のビット位置j−1に対する最初のレベルのキャリー・セーブ加算器61もビット位置jに対するレベル2の加算器46に提供される6つのキャリー出力64を提供する。従来のウォーレス・ツリーは、キャリー入力(たとえば、43、44)の数がキャリー出力の数に等しいと仮定しており、レベル1の各ビット位置に対する入力の数が等しい場合は常にこのことが言える。
このようなウォーレス・ツリーは、下の表に従って指定された加数の数について最小のレベルの数を提供する。
Figure 2007500388
これは、限定されないが、特に上で説明した式R=XY+Z mod Nで必要な計算に対して、特に、加数の数が計算によって変化する場合は、与えられた加数の数に対して必要な加算器の数を削減できることが、認識されている。
図5は、本発明による例示的な「アダプティブ・ツリー[adaptive tree]」すなわちネットワーク70の基本的な構造の部分または断片を説明しており、各ビット番号の位置j+1、j、およびj−1は、ツリーの列に対応する各ビット位置である。図5の断片では、各ビット位置(列)における加数の数は18である。この基本的な構造はすべてのビット位置で使用されるが、各レベルおよび各ビット位置でのキャリー・セーブ加算器の数は、それぞれのビット位置で必要な加数の数に従って、個々に決定される。図8は、アダプティブ・ツリー70の別のセクション、特に、それぞれ4〜12個の加数が必要なビット位置0〜8(図3を参照)を示している。アダプティブ・ツリーは、このように個々の入力ビット位置に対する入力ビット数が変化するところで、必要な加算器の数を最小化または削減するように構成される加算器のツリー構造から構成されている。
アダプティブ・ツリーまたはネットワークの構造の決定は、次の規則に従って確立されている。
最初のレベルでは、与えられたビット位置のキャリー・セーブ加算器71の数は、入力の加数の数を3で割り、端数を切り捨てた最も近い整数に設定される。たとえば、16個の入力に対しては、5つの加算器が必要である。図5で示したように、位置jにおける18個の入力に対しては、6つの加算器71が必要である。
後続の各レベルで、与えられたビット位置に対する加算器の数は次の式に従って決定される。
(レベルnにおけるビット位置jの加算器の数)=
{(ビット位置jにおけるレベルn−1からの和出力の数)+
(ビット位置jにおけるレベルn−1の接続されていない入力の数)+(ビット位置j−1におけるレベルn−1のキャリーの数)}
を3で割り、端数を切り捨てた最も近い整数である。
したがって、特に図5によると、ツリー70の中間位置では、レベル1でのビット位置jに対して18個の入力が必要であり、加算器71の数は6である。レベル2では、上記の式にしたがって加算器72の数はINT{(6+0+6)/3}=4となる。レベル3では、加算器73の数はINT{(4+0+4)/3}=2となる。レベル4では、加算器74の数はINT{(2+2+2)/3}=2となる。レベル5では、加算器75の数はINT{(2+0+2)/3}=1となる。最後に、レベル6では、加算器76の数はINT{(1+1+1)/3}=1となる。加数が18個の場合、ビット位置j+1、jおよびj−1のそれぞれに対して、レベル3の各ビット位置で1つのキャリー・セーブ加算器を節約できることに留意されたい。
特に図8を参照すると、入力ビットの数が増加しているため、右からのキャリーの数がウォーレス・ツリーの場合よりも小さいので、ツリー70の1つの端でさらに節約することができる。たとえば、ビット位置7では11個の加数が存在する。従来のウォーレス・ツリーは5つのレベルを提示するはずである。実際、この位置では、4つのレベルで、それぞれ3、2、2、1個の加算器を備える必要がある。
場合によっては、ネットワーク内の戦略的な位置に2つの入力を伴うキャリー・セーブ加算器を1つ加えることによって、レベルの数は時にはさらに削減できる。まず、上で定義した戦略にしたがってネットワーク70を形成するために、3つの入力を伴うキャリー・セーブ加算器のみを使用してこの設計が実施される。2つの入力を伴うキャリー・セーブ加算器を挿入する戦略的な位置を特定するには、各レベル(’L ’)とビット位置(’B ’)、そのビット位置BとレベルLへの入力の数が最小の数、たとえば2か所を超える場所を特定する必要がある。そうした場所で、2つの入力を伴うキャリー・セーブ加算器をその場所の上のレベル(すなわち、Ln−1またはLn−2など)で、2つの接続されていない加数があるレベルで挿入する。これは、1つの入力を次の上位のビット位置Bj+1に移動するのが効果的である。このことにより今度は、次のビット位置に対して許されている出力の数を超える重大な超過が発生する可能性があるので、この手順はすべてのビット位置に対する入力の数が許されている数を超えなくなるまで、複数回繰り返されなければならない。
たとえば、特に図9を参照すると、高位ビットの入力の数が減少しており、結果として必要なレイヤの数を超える可能性がある。ビット位置ごとの入力の最大数は3なので、1つのレベルの加算器で十分である。図9では、ビット位置58の加算器100に対する3つの入力があり、ビット位置57の加算器(図示せず)から1つのキャリー出力101がある。ビット位置59および60のそれぞれの加算器102、103にはそれぞれ2つの入力があり、ビット位置61に対して1つの入力がある。ビット位置59について、レベル1からは、ビット位置58からのキャリー出力1つと接続されていないワード入力2つの3つ(2つが望ましい)の出力がある。ビット位置58から59までのキャリー101と、同様にビット59から60までのキャリーにより、3つのレベル(レイヤ1、レイヤ2、レイヤ3のラベルが付いている)が必要である。これで、2つの追加レイヤが得られる。
図10を参照すると、さらに2つの入力、2つの出力を伴う加算器110、111(3つの入力、2つの出力を伴うキャリー・セーブ加算器、「CSA3」と対比して「CSA2」とラベル付けされている)を使用することによって、この状況を軽減できる。このような加算器は入力の数を合計では削減しないが、このビット位置での入力を1つだけ削減する。CSA2加算器110は次の上位ビット位置60に対する入力の数を2から3に増加するので、問題はビット位置59からビット位置60に移動する。しかし、レベル1、ビット位置60の入力数を3から2に削減したCSA2加算器111も挿入されている。この結果により、ビット位置61の入力の数が1から2に増加することは問題がない。
原理上、2つの入力加算器で特定のビット位置の加数の対を上位レベルで戦略的に処理することによりレベルの数をさらに減らすことができると認識されている。換言すると、1つまたは複数の隣接する上位の位置にある2つの入力を伴う加算器によって和の容量が局所的に増大することで、結果として下位レベルで必要な和の容量が削減されることがあり、追加の3つの入力を伴う加算器を使用しなくても、最終的にはレベルの数を削減できる。
この解決策[solution―ソリューション―]は、左隣の加数の数を増大するので、結果として入力が多くなりすぎる可能性がある。その場合、ビット位置61が示すように、ビット位置が十分少ない数の入力を持つまで、複数の2つの入力を伴う加算器がレベルに挿入される必要があることもある。
一般的な意味で、追加の2つの入力を伴うキャリー・セーブ加算器を挿入する手順は、次に示す手順として定義してもよい。第1に、所定の数のレベルについて、第1の場所の出力の数が2より大きく(たとえば、2でなく3)、上位レベルに2つの接続されていない加数があり、ネットワーク上でビット位置BとレベルLをとる第1の場所を検出する。第2に、この第1の位置に関して、同じビット位置Bであるが、第1の場所より上位のレベル(たとえば、Ln−1、Ln−2など)であり、その場所に2つの接続されていない加数がある第2の場所に2つの入力を伴うキャリー・セーブ加算器を挿入する。
この手順は、場合によってはすべてのビット位置で入力の数が許されている数を超えなくなるまで複数回繰り返される必要がある。
図6を参照すると、アダプティブ・ツリーはパイプライン化されていない加算器構成80で使用されてもよい。この編成ではアダプティブ・ツリーは図2のすべての加数を加算するため、最大6つのレベル81、82…86がある。加算器は16のすべての積P…P15、Z、フィードバック・キャリー項Cc(62:0)および和項Cs(62:0)を、6つのレベルのアダプティブ・ツリーを使用して合計する。ツリーの出力87はレジスタに入り、最終的なキャリー項の上位部分Cc’(78:16)出力と最終的な和項の上位部分Cs’(78:16)出力はフィードバック・ライン91にフィードバックされ、次の計算の入力としてビット位置(62:0)にシフトされる。キャリー項の下位部分Cc’(15:0)と和項の下位部分Cs’(15:0)は追加の全加算器88で合計され、レジスタ89に保存される。これは、式、B・(c’+s’)+r=x・y+(c’+s’)+zの項「r」に相当する。
キャリー項と和項の下位部分Cc’(15:0)とCs’(15:0)を後で加算すると、それ自体が図6でc”16として識別されている1ビットのさらなるキャリー項を生成する。この1ビットのキャリー項は、フィードバック・ライン90により示されるように、全加算器88によってフィードバックされ、次の合計に追加される。
したがって、一般的な意味で、追加の全加算器88とレジスタ89は、和項とキャリー項を加算して最終結果の最初のワード出力を提供し、出力段で加算するために、メイン加算器アレイがさらに上位の和項とキャリー項を生成する後続の計算段の入力として使用される、キャリー・ビットc”16を保持する出力段の例を示している。
代替として、キャリー項c”16は、Cc’(16)およびCs’(16)と同じ重みがあるので、81に示すアダプティブ・ツリーのレベル1、ビット0にc”16をフィードバックすることもできる。この技術の欠点は、アダプティブ・ツリーが後続の計算を開始する前に、全加算器88のc”16出力を待たなければならないことである。したがって、全加算器88を使用してc”16項を加算することが好ましい。
それぞれの新しい乗算の開始時に、キャリー・ビットc”16はCc’とCs’と同様にクリアされる。
図7に示す別の編成において、アダプティブ・ツリー180は、複数のレベル181…187を備えるパイプライン型の構成が指定されることもできる。この場合、一般的にキャリー項Cc’(78:16)の上位部分と和項の上位部分Cs’(78:16)を最初のレベル181ではなく、前述のレベル(すなわち、「中間」のレベル185)にフィードバックする必要がある。したがって、図7に示す特定の編成では、最後のレベル187から最後のキャリー項の上位部分Cc’(78:16)と最後の和項の上位部分Cs’(78:16)の出力は、次の計算が開始される前にレベル1にフィードバックされるのを待たずに、図示するようにこれらの項はレベル5で加算できる。この編成はレベルの数が1つ増大して7となるが、遅延は図6の編成における6レベルの遅延から、図7の編成における4レベルの遅延に削減される。
この構成では、一般的な意味でフィードバック・ライン191は、加算器回路の上位ビット出力を、対応する数の中間レベルの加算器回路の下位ビット入力に接続する。最初の4つのレベル181〜184からの合計の結果を一次的に保持するために、場合によっては中間レベルのレジスタ191を提供する必要がある。
これで、ハードウェアのコストが大幅に増加する代わりに、演算の速度が1.5倍に向上する。指定された例では、追加のレベルを処理するために、275個のレジスタを追加する必要がある。
アダプティブ・ツリーのもう1つの利点は、パイプライン型のバージョンに関して発生する。図7において、下位ビット値の多くの加算器(ここでは最大4つのレベルが必要)は最初の4つのレイヤに配置されており、そのことによってレジスタの数を減少している。一方、ウォーレス・ツリーではこのような加算器を下位のレイヤにおく必要がある。したがって、ウォーレス・ツリーは下位のビット値に関して上位レベルの入力の数を削減しないので、レベル4を上回るレジスタが必要である。
図7の編成には、図6の編成の出力段88…90に関連して説明したように、出力段188…190を含めてもよい。
他の実施形態は、意図的に添付の請求項の範囲内にある。
乗算演算B・c+r=x・y+c+z(ただし、xとcは64ビット幅であり、y、z、rは16ビット幅である)を実行するのに適したアレイ乗算器を示す図である。 =xn−j−1+zn−j−1+(Xn−j−1+rj−1,0)B+(Xn−j−1+rj−1,1)B + … +(Xn−j−1n−1+rj−1,n−2)B n−1+rj−1,n−1)B (ただし、個々のワードの積x・yはPで表され、複数の積、たとえば、P…P15に分割される。和項はZで表される)の計算を実行するパイプライン型乗算器で加算されたワードのビット配列を示す図である。 図2に示すワードの和のビット位置あたりの加数の数を示すグラフである。 図2に示すパイプライン処理によるワードの和を実施するのに適した従来のウォーレス・ツリー構造の断片を示す図である。 図2に示すパイプライン処理によるワードの和を実施するのに適したアダプティブ・ツリー構造の断片を示す図である。 図2に示すワードの和を実施するのに適した非パイプライン型の加算器の概略を示すブロック図である。 図6に示す加算器の構造に基づくパイプライン型の加算器の概略を示すブロック図である。 図2に示すパイプライン化されたワードの和を実施するのに適した図5に示すアダプティブ・ツリー構造の別の断片を示す図である。 図5によるアダプティブ・ツリー構造の一部を示す図である。 図9に示すアダプティブ・ツリー構造に挿入する2つの入力を伴う複数のキャリー・セーブ加算器の挿入を示す図である。

Claims (20)

  1. マルチビット・ワードから複数の加数の和を求める加算器回路であって、
    それぞれ第1の数の和出力と第2の数のキャリー出力を備えるn個の入力を伴うキャリー・セーブ加算器回路のネットワークと、
    各列が前記和の中のあらかじめ指定されたビット位置に対応する複数の列に編成され、複数レベルに編成される加算器回路と、
    前記複数のワードから選択されたワードの対応するビット位置から複数の加数を受け取る第1のレベルと、
    それぞれが(i)前記複数のワードから選択された他のワードの対応するビット位置、(ii)同じ列の上位レベルの加算器回路からの和出力、および(iii)下位のビット位置に対応する列の上位レベルの加算器回路からのキャリー出力の1つまたは複数から加数を受け取る下位のレベルを備えており、
    前記各列のn個の入力を伴う加算器の数は前記ビット位置により変わる加算器回路。
  2. 前記各列内のn個の入力を伴う加算器の数は、前記列に必要な加数の数に特に適応する請求項1に記載の回路。
  3. 前記第1のレベルの各ビット位置における前記n個の入力を伴う加算器の数は、前記加数の数をnで割った整数部を超えない請求項1に記載の回路。
  4. 前記下位レベルの各ビット位置における前記n個の入力を伴う加算器の数は、
    (a)上位レベルの同じ列にある前記n個の入力を伴う加算器の前記和出力の数と(b)上位レベルの同じ列からの前記接続されていない入力の数と(c)上位レベルの下位ビット位置に対応する列からの前記キャリー出力の数を合計し、前記合計をnで割った整数部を超えない請求項1または請求項4に記載の回路。
  5. 前記接続されていない入力の数は、前記すぐ上のレベルの数である請求項4に記載の回路。
  6. 前記和出力の数は、前記すぐ上のレベルの数である請求項4に記載の回路。
  7. 前記キャリー出力の数は、前記すぐ上のレベルの数である請求項4に記載の回路。
  8. nは3であり、前記第1の和出力の数は2であり、前記第2のキャリー出力の数は2である請求項1に記載の回路。
  9. 前記ビット位置あたりの加数の数はビット位置の関数として変化するように、前記複数のマルチビット・ワードの各1つを前記n個の入力を伴う加算器のネットワークに送出する手段をさらに含む請求項1に記載の回路。
  10. 前記ネットワーク内の選択された位置に配置された1つまたは複数の(n−1)個の入力を伴う加算器をさらに含む請求項1または請求項4に記載の回路。
  11. 前記選択された位置は、前記複数の加数を合計するのに必要な前記レベルの数を削減するように決定される請求項10に記載の回路。
  12. 前記n個の入力を伴う加算器は3つの入力を伴う加算器であり、前記(n−1)個の入力を伴う加算器は2つの入力を伴う加算器であり、各選択された位置は特定されたビット位置と前記出力の数が2より大きいレベルによって決定され、前記選択された位置は前記特定された位置より上のレベルで前記同じビット位置である請求項11に記載の回路。
  13. 複数の加数を受け取る入力と、
    複数の加数を合計して上位部分と第1および第2の下位部分とを備える出力を生成する第1の合計手段と、
    前記入力で前記第1の上位部分を下位の位置に接続して後続の計算に備える第1のフィードバック・ラインと、
    前記第1および第2の下位部分を合計して第1のワード出力を提供する第2の合計手段と、前記第2の合計手段からのキャリー・ビットを保持し、前記キャリー・ビットを後続の計算時に前記第2の合計手段への入力として提供するフィードバック・レジスタを含む出力段とを備える加算器回路。
  14. 前記上位部分は後続の計算にフィードバックされた和項とキャリー項を備える請求項13に記載の加算器回路。
  15. 前記キャリー・ビットは前記第1の合計手段による前記第1および第2の下位部分の後続の計算の終わりに使用される請求項13に記載の加算器回路。
  16. マルチビット・ワードから複数の加数を合計する加算器回路であって、
    前記第1の合計手段は、それぞれが複数の入力と、複数の和出力と、複数のキャリー出力を備えるキャリー・セーブ加算器回路のネットワークを備えており、
    前記加算器回路は複数の列に編成されており、各列は前記和の中のあらかじめ指定されたビット位置に対応し、複数のレベルに編成されており、
    前記第1のレベルは前記複数のワードから選択されたワードの対応するビット位置から複数の加数を受け取るために接続されており、
    前記下位レベルは(i)前記複数のワードから選択された他のワードの対応するビット位置、(ii)前記同じ列の上位レベルの加算器回路からの和出力、および(iii)下位のビット位置に対応する列の上位レベルの加算器回路からのキャリー出力の1つまたは複数から加数を受け取るために接続されており、
    前記第1のフィードバック・ラインは前記最下位レベルの加算器回路の第1の複数の上位ビット出力を、前記第1の上位部分と同様に、前記下位の位置の前記第1のレベルの加算器回路の対応する数の下位ビット入力に接続する請求項13に記載の加算器回路。
  17. 前記上位部分は上位のキャリー項出力と上位の和項出力とを備えており、前記第1の下位部分は下位のキャリー項出力を備えており、前記第2の下位部分は下位の和項出力を備えている請求項13または請求項15に記載の加算器回路。
  18. マルチビット・ワードから複数の加数を合計するパイプライン型加算器回路であって、
    キャリー・セーブ加算器回路のネットワークを備えており、前記加算器回路は複数の列に編成され、各列は前記和の中のあらかじめ指定されたビット位置に対応し、複数レベルに編成され、前記第1のレベルは前記複数のワードから選択されたワードの対応するビット位置から複数の加数を受け取るために接続されており、前記下位レベルは(i)前記複数のワードから選択された他のワードの対応するビット位置、(ii)前記同じ列の上位レベルの加算器回路からの和出力、および(iii)下位のビット位置に対応する列の上位レベルの加算器回路からのキャリー出力の1つまたは複数から加数を受け取るために接続される第1の合計手段と、
    最下位レベルの加算器回路の第1の複数の上位ビット出力を加算器回路の後続の計算に使用する中間レベルの対応する数の下位ビット入力に接続し、前記中間レベルは前記第1のレベルの加算器回路と前記最下位レベルの加算器回路との間にある第1のフィードバック・ラインとを備えるパイプライン型の加算器回路。
  19. それぞれ前記最下位レベルの加算器回路の第2と第3の複数の下位ビット出力を備える第1および第2の下位部分を合計して第1のワード出力を提供する第2の合計手段と、前記第2の合計手段からのキャリー・ビットを保持し、前記キャリー・ビットを後続の計算時に前記第2の合計手段への入力として提供するフィードバック・レジスタを含む出力段をさらに含む請求項18に記載のパイプライン型の加算器回路。
  20. 実質的に、添付の図5から図11に関連して請求項1から19に記載した装置。
JP2006521687A 2003-07-26 2004-07-22 長整数乗算器 Pending JP2007500388A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB0317570.0A GB0317570D0 (en) 2003-07-26 2003-07-26 Long-integer multiplier
PCT/IB2004/002382 WO2005010745A2 (en) 2003-07-26 2004-07-22 Long-integer multiplier

Publications (1)

Publication Number Publication Date
JP2007500388A true JP2007500388A (ja) 2007-01-11

Family

ID=27772782

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006521687A Pending JP2007500388A (ja) 2003-07-26 2004-07-22 長整数乗算器

Country Status (6)

Country Link
US (1) US7627625B2 (ja)
EP (1) EP1652064A2 (ja)
JP (1) JP2007500388A (ja)
CN (1) CN1829957A (ja)
GB (1) GB0317570D0 (ja)
WO (1) WO2005010745A2 (ja)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102006025713B9 (de) * 2005-10-28 2013-10-17 Infineon Technologies Ag Kryptographie-Vorrichtung und Kryptographie-Verfahren zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE102006025569A1 (de) 2005-10-28 2007-05-03 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen einer Multiplikations-Additions-Operation und zum Berechnen eines Ergebnisses einer modularen Multiplikation
DE102006025677B4 (de) * 2005-10-28 2020-03-12 Infineon Technologies Ag Vorrichtung und Verfahren zum Berechnen eines Ergebnisses einer Summe mit einem Rechenwerk mit begrenzter Wortlänge
DE102006025673B9 (de) 2005-10-28 2010-12-16 Infineon Technologies Ag Rechenwerk zum Reduzieren einer Eingabe-Zahl bezüglich eines Moduls
JP5115307B2 (ja) * 2008-04-25 2013-01-09 富士通セミコンダクター株式会社 半導体集積回路
CN103607197B (zh) * 2013-10-17 2016-08-10 陕西万达信息工程有限公司 一种计1器电路
US10140090B2 (en) 2016-09-28 2018-11-27 International Business Machines Corporation Computing and summing up multiple products in a single multiplier
US11494331B2 (en) * 2019-09-10 2022-11-08 Cornami, Inc. Reconfigurable processor circuit architecture

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6222146A (ja) * 1985-07-23 1987-01-30 Toshiba Corp 並列乗算器
DE69303725D1 (de) 1992-11-20 1996-08-22 Unisys Corp Verbesserter schneller multiplizierer
US5787029A (en) * 1994-12-19 1998-07-28 Crystal Semiconductor Corp. Ultra low power multiplier
US6421699B1 (en) * 1999-03-19 2002-07-16 International Business Machines Corporation Method and system for a speedup of a bit multiplier

Also Published As

Publication number Publication date
US20060179105A1 (en) 2006-08-10
EP1652064A2 (en) 2006-05-03
WO2005010745A3 (en) 2005-08-11
US7627625B2 (en) 2009-12-01
CN1829957A (zh) 2006-09-06
WO2005010745A2 (en) 2005-02-03
GB0317570D0 (en) 2003-08-27

Similar Documents

Publication Publication Date Title
JP2722413B2 (ja) モンゴメリ法によるモジュラ乗算の実施方法
US20040098440A1 (en) Multiplication of multi-precision numbers having a size of a power of two
EP0890899A2 (en) Multiplication method and apparatus
KR20010040263A (ko) 고속의 정규 곱셈기 구조
WO2004042599A1 (en) Method and a system for performing calculation operations and a device
TWI263402B (en) Reconfigurable fir filter
WO1993022721A1 (en) Compact multiplier
JP3516503B2 (ja) 電子乗算および加算装置および方法
JPH04215126A (ja) 重み付け遅延桁加算方法および装置
US4346451A (en) Dual moduli exponent transform type high speed multiplication system
CN112465130A (zh) 数论变换硬件
JP2722412B2 (ja) モンゴメリ法によるモジュラ操作の実行に伴うエラー訂正パラメータの算出方法
JP2007500388A (ja) 長整数乗算器
US6574649B2 (en) Efficient convolution method and apparatus
US8577952B2 (en) Combined binary/decimal fixed-point multiplier and method
US10635397B2 (en) System and method for long addition and long multiplication in associative memory
US20010054053A1 (en) Method and apparatus for finite field multiplication
JPH04205026A (ja) 除算回路
EP0428942B1 (en) Plural-bit recoding multiplier
KR100308726B1 (ko) 고속 산술 장치에서 올림수 예견가산기 스테이지의 수를 감소시키는 장치 및 방법
US7607165B2 (en) Method and apparatus for multiplication and/or modular reduction processing
JPH04355827A (ja) 開平演算装置
JPH0312738B2 (ja)
US20060020654A1 (en) Multiplier with look up tables
US20060064455A1 (en) Processing unit having multioperand decimal addition

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070720

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A711

Effective date: 20080605

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090327

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20090901