JP4408712B2 - 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 - Google Patents

多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 Download PDF

Info

Publication number
JP4408712B2
JP4408712B2 JP2004017205A JP2004017205A JP4408712B2 JP 4408712 B2 JP4408712 B2 JP 4408712B2 JP 2004017205 A JP2004017205 A JP 2004017205A JP 2004017205 A JP2004017205 A JP 2004017205A JP 4408712 B2 JP4408712 B2 JP 4408712B2
Authority
JP
Japan
Prior art keywords
product
sum
data
bit width
register
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
Application number
JP2004017205A
Other languages
English (en)
Other versions
JP2005209095A (ja
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.)
Fujitsu Semiconductor Ltd
Original Assignee
Fujitsu Semiconductor Ltd
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 Fujitsu Semiconductor Ltd filed Critical Fujitsu Semiconductor Ltd
Priority to JP2004017205A priority Critical patent/JP4408712B2/ja
Priority to EP04017172A priority patent/EP1560110A1/en
Priority to US10/898,178 priority patent/US8078661B2/en
Priority to KR1020040063153A priority patent/KR100682354B1/ko
Priority to CNB2004100581735A priority patent/CN100504758C/zh
Publication of JP2005209095A publication Critical patent/JP2005209095A/ja
Application granted granted Critical
Publication of JP4408712B2 publication Critical patent/JP4408712B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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
    • 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/60Methods 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/72Methods 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/728Methods 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
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

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

Description

本発明は多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路に関し、特にモンゴメリ積和剰余演算に好適に使用可能な多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路に関する。
近年、電子商取引(Eコマース)などのようにネットワーク上で金銭授受を行う市場が広まり、クレジットカード番号や個人情報などの重要な情報を、ネットワークを介して送受信するような機会が急速に増大している。
このような重要な情報がネットワーク上に流れている間に、悪意ある第3者により情報が盗聴や改ざんされることを防止するため、情報の暗号化技術は欠かせないものとなっている。
暗号化技術の中の1つに公開鍵方式が知られている。
公開鍵方式は、公開鍵と秘密鍵の一対の鍵を用意しておき、送信者が受信者の公開鍵で暗号化し、受信者は受信者しか知りえない秘密鍵で復号化する。例えば、ネットワーク上で商品を購入する場合に、顧客は業者から公開鍵を送ってもらい、これによってクレジットカード番号などの情報を暗号化して送信する。業者は秘密鍵によって受信した情報を復号化する。公開鍵を広く公開することによって、不特定多数の者との通信の秘密が簡単に確保できる。
このような公開鍵方式として、RSA(Rivest Shamir Adleman)方式がある。RSA方式では、乗算剰余演算を用いる。ある数を何回も乗算して整数nで割った余りを計算することはコンピュータにとって簡単であるが、その逆の演算で、大きな整数nの素因数分解は困難である性質を利用した暗号化方式である。
しかしながら、RSA方式における乗算剰余演算の計算量は、DES(Data Encryption Standard)などの対称暗号方式に比較すると多くなるので、高速に計算できるアルゴリズムが求められている。その手法の1つにモンゴメリ積和剰余演算法がある。
モンゴメリ積和剰余演算法は、整数Nと整数Nと互いに素であって整数Nより大きな基数Rに対し、T×R-1modNを、0≦T≦R×Nである入力値Tから、Nを法とした既約値で求める演算方式である。なお、R-1はNを法とするRの乗算逆元を示す(すなわち、R×R-1modN=1を満たす)。この方式は、乗算剰余演算を、減算を繰り返す除算を用いず、加算と乗算とシフト演算の繰り返しにより、Nの剰余値を求める方式であり、Nの値が非常に大きな場合に適した方法である(例えば、非特許文献1参照)。
具体的な処理手順としては、入力値A、B、C、R、N、NDの入力に対し、以下の演算を行い、出力値X、Yを出力する。T、Mの値は演算中間値である。
T=A×B+C………………(1)
M=T×NDmodR………(2)
X=(M×N+T)/R……(3)
Y=X−N……………………(4)
なお、入力値NDは、R×R-1−N×ND=1の条件を満たす値である。
0<Yの場合は、出力値Xの値が演算結果であり、0≧Yの場合は、出力値Yの値が演算結果となる。
入力値A、B、C、Nは多倍長の値(例えば2048bit)であって、メモリ領域にワードごとに整列して格納されている。入力値Rは2のべき乗値(例えば22048)であり、値そのものではなく、データ長のみの情報が格納されている。入力値NDは演算器のビット幅のみ必要となるが、その理由は後述する。
式(1)の積和演算を実際に行う際には、演算器のビット幅(例えば32bit)が固定されている積和演算器(以下MAC(Multiplier Accumulator)と略す)により(d,e)=a×b+c+dを複数回演算して行うのが一般的である。なお、dは演算結果の上位ビットであり、次のサイクルの演算の入力として再利用する値である。また、eは演算結果の下位ビットである。
以下に式(1)の積和演算の際のアルゴリズムを示す。
(1.1) for (i=0 to s−1){
(1.2) a:=A[i]
(1.3) d:=0
(1.4) for(j=0 to s−1){
(1.5) b:=B[j]
(1.6) if(i==0) c=C[j]
(1.7) else c=T[i+j]
(1.8) (d,e):=a×b+c+d
(1.9) T[i+j]:=e
(1.10) }
(1.11) T[i+s]:=d
(1.12) }
上記のように、iとjをループ変数とした2重ループ(行番号1.1〜1.12の外ループと、行番号1.4〜1.10の内ループ)で下位ビット側から繰り返す。ここで、定数s(行番号1.1、1.4、1.11)は、データ長をワード長で割った数字である。表記中変数の次の[]の値は、データの中のワード位置を下位側から示す値である。例えば、ワード長が32ビットならば、A[0]は、Aの下位32ビットの値を示す。
図11は、従来の多倍長データ積和演算処理回路の一例の構成図である。
従来の多倍長データ積和演算処理回路900は、メモリ901と、MAC902と、レジスタ903、904、905、906、907と、からなる。メモリ901上には、演算に必要な多倍長の入力値A、B、Cが存在する。MAC902は、入力値A、B、Cをワードごとに入力し、演算処理を行って、T=A×B+Cをメモリ901上に書き込む。
以下、前述したアルゴリズムによる従来の多倍長データ積和演算処理回路900の動作を説明する。
まず、図示しない制御回路にてループ変数i,jが作成され、メモリ901に対してのアドレス入力とされる。次にメモリ901からワード長(W)分の入力値A[i]、B[j]、C[j]もしくはC[j]の代わりにT[i+j]をリードし、これらをa、b、cとしてレジスタ903、904、905に保持した後、MAC902を使用して、行番号1.8の(d,e):=a×b+c+dを演算し、d,eをそれぞれ、レジスタ906、907に保持させる。dは次のサイクルの演算の入力として再利用し、eをT[i+j]の新値としてメモリ901にライト更新する。
このように、従来の多倍長データ積和演算処理回路900では、前述のアルゴリズムの外ループ先頭(行番号1.2)にてaをリードしておき、その後内ループの1回の処理につき、b、cのメモリ901からのリード更新とeのメモリへのライト更新が必要となる。パイプライン動作を中断せず、MAC902をクロック時間ごとに動作させるためには、メモリ901の転送能力が1クロック時間に3ワード長(3W)分必要となる。
そのため、マルチポートメモリにしたり、メモリ901を領域分割したりすることによりデータの転送能力を補うことができる回路方式が提案されている(例えば、特許文献1参照)。
前述の式(3)の演算は、式(1)と同様の処理になる。なお、Rは2のべき乗値であることからRでの除算はビットシフト演算で実現できる。
式(1)、(2)、(3)の演算は、独立して行うと入力値NDが多倍長必要になるため、効率的ではない。そのため非特許文献2にあるような処理手法が一般に知られている。その処理手法とは、式(1)の演算処理過程で、演算中間値Tが下位側から順に決定していくときに、その都度、演算中間値Tの最下位ワードに対し、式(2)の演算結果である演算中間値Mの最下位ワードを演算決定し、式(3)の出力値Xを演算していく方法である。この場合入力値NDは演算ワード長のみで十分となる。
特開2002−207589号公報(第1図) P. L. Montgomery: "Modular Multiplication without Trial Division", Mathematics of Computation, Vol. 44, No. 170, pp. 519-521 (1985) C. K. Koc. "High-Speed RSA Implementation", Technical Report TR 201, RSA Laboratories, Version 2.0, November, pp. 48-49 (1994)
しかし、データ転送能力を上げるためメモリをマルチポートメモリとすることは、回路素子の使用面積が増えるという問題がある。またメモリを分割することは、レイアウト設計の妨げになるという問題があった。
一方、メモリをシングルポートメモリとした場合には、メモリ領域の回路規模の減少は図れるものの、データ転送能力が1クロック時間に1ワード長(W)のみとなる。この場合、MACをクロックごとに使用できず、MACの回路規模に対して効率的な演算が実施できない問題が発生する。例えば、前述した式(1)のような演算を行う際に、MACに入力値A、B、Cの1W分をクロックに応じて順に入力してから演算するために、少なくとも演算するのに3クロックごとの演算しかできなかった。
本発明はこのような点に鑑みてなされたものであり、シングルポートメモリを用いても効率よく積和演算が可能な多倍長データ積和演算処理回路を提供することを目的とする。
また本発明の他の目的は、シングルポートメモリを用いても効率よくモンゴメリ積和剰余演算が可能なモンゴメリ積和剰余演算回路を提供することである。
上記目的を達成するために、多倍長データに対し積和演算処理を行う以下のような多倍長データ積和演算処理回路が提供される。
この多倍長データ積和演算処理回路は、前記多倍長データを格納し、1クロックで第1のビット幅のデータを転送可能なシングルポートメモリと、ビット幅が異なる乗数と被乗数と、加算値とで前記積和演算処理を行う積和演算器と、第2のビット幅をもち、前記第2のビット幅の前記被乗数を前記積和演算器に入力する第1のレジスタと、前記第1のビット幅をもち、クロックごとに第3のビット幅の前記乗数を前記積和演算器に入力する第2のレジスタと、前記第1のビット幅をもち、前記クロックごとに前記第3のビット幅の第1の加算値を前記積和演算器に入力する第3のレジスタと、前記積和演算器での演算結果のうち、上位の前記第2のビット幅を保持し、第2の加算値として前記積和演算器に入力する第4のレジスタと、前記積和演算器での演算結果のうち、下位の前記第3のビット幅ごとを生成データとして保持していき、前記第1のビット幅に達した場合に、前記シングルポートメモリに書き込む第5のレジスタとを有し、前記シングルポートメモリは、前記第1のレジスタ、前記第2のレジスタ及び前記第3のレジスタに前記第1のビット幅ごとにデータを供給し、前記乗数、前記第1の加算値及び前記生成データのデータ量の総和は、前記第1のビット幅以下である。
開示の多倍長データ積和演算処理回路によれば、シングルポートメモリのデータ転送能力であってもMACの回路使用効率を下げることはなく、効率のよい積和演算を行うことができる。また、シングルポートメモリを用いるため、回路規模を削減することができる。
以下、本発明の実施の形態を図面を参照して詳細に説明する。
なお、以下では、基数Rを2のべき乗数、整数Nを奇数値として説明を行う。
図1は、本発明の実施の形態の多倍長データ積和演算処理回路の原理図である。
本発明の実施の形態の多倍長データ積和演算処理回路10は、多倍長データである入力値A、B、Cにより、A×B+Cの演算を行う回路であり、メモリ11と、MAC12と、レジスタ13、14、15、16、17とを有する。
メモリ11は、シングルポートメモリであり、例えば、2048ビットの多倍長データである入力値A、B、C及び演算結果を格納する。以下、メモリ11の1クロック時間での転送可能データ量を1ワード(1W)長分とする。
MAC12は、入力値A、B、Cのうち、例えば入力値Aを被乗数、入力値Bを乗数とした場合、ビット幅が異なる乗数と被乗数とで積和演算を行う。すなわち、被乗数の入力値Aを3ワード長(3×W)分のビット幅、乗数である入力値Bを3分の1ワード長(W/3)分のビット幅として積和演算A×B+Cを行い、演算結果を出力する。
レジスタ13は、多倍長データの入力値Aを3ワード長分(3×W)格納する。なお、図中の“A[i]”の“i”は、入力値Aのデータ長をワード長で割った値を“s”としたときに、0≦i≦s−1となる値であり、多倍長データの中のワード位置を下位側から示す値である。よって、レジスタ13は、下位からi番目の1ワード長分のデータであるA[i]と、i+1番目のA[i+1]、i+2番目のA[i+2]の計3ワード分を格納する。そしてこの3ワード分を“a”としてMAC12に入力する。
レジスタ14、15は、入力値B及び入力値Cを1ワード分格納する。ただし、レジスタ14、15は、読み出した1ワード分のデータを一時保持しておくリードバッファの機能を有し、図示しないクロック信号に応じてMAC12に対してW/3ずつ“b”、“c”として順次供給される。
レジスタ16は、MAC12での演算結果のうち上位の3×W分のデータを出力値dとして次の演算のために格納して、次の演算の際にはこれをMAC12に供給する。MAC12では、(d、e)=a×b+c+dを計算する。
レジスタ17は、MAC12での演算結果のうち下位のW/3のデータを出力値eとして格納する。レジスタ17は、ライトバッファの機能を有し、1ワード分のデータが貯まったところで、まとめてメモリ11に書き込む動作を行う。
これら、レジスタ13〜17により、MAC12のビット幅に応じて、MAC12における1クロック時間での消費データ量と生成データ量の総和が、メモリ11における1クロック時間での転送可能データ量となるように、多倍長データのうち1クロック時間でMAC12へ供給するデータ量が調整される。つまり、上記の例では、MAC12は、1クロックで入力値BのW/3と、入力値CのW/3とを消費して、演算結果のうち上位の3×Wは次のクロックの演算で用いられるので、下位のW/3のデータ量の演算結果を生成する。これら、データ量の総和はWとなり、メモリ11の1クロック時間に転送可能なデータ量以下(上記の例では転送可能なデータ量Wと一致)であるので、シングルポートメモリのデータ転送能力で十分である。
また、MAC12は、ビット幅の異なる乗数と被乗数とで積和演算処理を行う構成としたので、後述するキャリー分割や、中間レジスタを用いてMACを分割しパイプライン動作させる構成にすれば、乗数と被乗数のビット幅が同じ構成のMACと比べて、高速動作が可能となる。なお、MACの回路規模は乗数と被乗数のビット幅が同じものとほぼ変わらない。
また、上記のようなバッファ機能を有するレジスタ14、15、17はシフトレジスタを用いて容易に実現できる。
以下、図1の多倍長データ積和演算処理回路10の動作を説明する。
本発明の実施の形態の多倍長データ積和演算処理回路10は、従来と同様に2重ループを用いたアルゴリズムにより演算を行う。すなわち、外ループで入力値Aの下位ビットから3×WずつMAC12に入力し、それに対して、内ループでW/3ずつ入力される入力値B、Cを用いて積和演算を行う。
積和演算処理動作が開始すると、まず、メモリ11に格納された多倍長データの入力値Aを下位から3回リードし、A[i]、A[i+1]、A[i+2]をレジスタ13に保持し、その値を“a”としてMAC12に入力する。次に、メモリ11に格納された多倍長データの入力値B、Cを下位から1ワード長分まとめて読み出し、レジスタ14、15に格納する。その後、レジスタ14、15からW/3ずつ、“b”、“c”としてMAC12に供給する。
MAC12は、1クロックで(d,e)=a×b+c+dの演算を行い、結果として、3×W+W/3のデータ量の演算結果を出力する。ここで、上位の3×Wの出力値dは、レジスタ16に格納され、次のクロックで、レジスタ14、15から次のW/3長分のデータが入力されて演算が行われる際に用いられる。また下位のW/3の出力値eは、レジスタ17に格納される。レジスタ17に格納される出力値eは、1ワード長分貯まった際にまとめて、メモリ11に書き込まれる。このようにして、レジスタ14、15に格納された1ワード長分のデータが消費されると(内ループの1回の処理が終了)、レジスタ14、15には、新たに、前回の処理で入力したデータの1ワード長分上位のデータを格納して、上記と同様にMAC12にて演算処理が行われる。
なお、シングルポートメモリの場合、1ワード長分の入力値B、Cの入力は同時には行えないため時間をずらしてレジスタ14、15に格納されるが、例えば、レジスタ14のバッファのビット幅をレジスタ15より長くして、入力値Bの読み出しを先に行わせ、シフト動作により、MAC12へは同時に下位のW/3が入力されるようにすれば、MAC12での演算を停止させることがない(詳細は後述する)。
A[i]、A[i+1]、A[i+2]に対し入力値B、Cの全てについて演算が終了すると、A[i]、A[i+1]、A[i+2]を更新して、入力値Aの全てについて上記の処理を繰り返す。
上記のようにすることで、シングルポートメモリのデータ転送能力であっても、MAC12の回路使用効率を下げることはない。すなわち、1クロック時間ごとに1回の演算ができる効率のよい多倍長データの積和演算処理が実現可能となる。
次に、図1で示したような多倍長データ積和演算処理回路10を、モンゴメリ積和剰余演算に適用した場合について説明する。
以下では、入力値A、B、C、Nを入力し、モンゴメリ積和剰余演算を行い、出力値X、Yと出力値Yの正負の符号をシングルポートメモリに出力する場合について説明する。
また、以下では、説明のため入力値A、B、C、Nを256ビットとし、2のべき乗数R=2256、モンゴメリ積和剰余演算に必要なパラメータである入力値NDを64ビットする。またT及びMは演算の中間値である。また、各値を上位側から16ビットごとに以下のように表現する。
A[255:0]={a15,a14,a13,a12,a11,a10,a9,a8
,a7,a6,a5,a4,a3,a2,a1,a0};
B[255:0]={b15,b14,b13,b12,b11,b10,b9,b8
,b7,b6,b5,b4,b3,b2,b1,b0};
以下、C、N、T、M、X、Yも同様に表現する。
モンゴメリ積和剰余演算は以下のようになる。
T=A×B+C……………………………………………………(5)
M={t3、t2、t1、t0}×NDmod264…………(6)
X=(M×N+T)/264………………………………………(7)
Y=X−N…………………………………………………………(8)
0<Yの場合は、出力値Xの値が演算結果であり、0≧Yの場合は、出力値Yの値が演算結果である。
なお、上の式(6)、(7)において、R=2256とせずに、264としたのは、非特許文献2にあるような処理手法、すなわち、式(5)の演算処理過程で、演算中間値Tが下位側から順に決定していくときに、その都度、演算中間値Tの最下位ワードに対し、式(6)の演算結果である演算中間値Mの最下位ワードを演算決定し、式(7)の演算結果である出力値Xを演算していく方法を用いるからである。
図2は、本発明の実施の形態のモンゴメリ積和剰余演算回路の構成を示す図である。
本発明の実施の形態のモンゴメリ積和剰余演算回路100は、式(5)〜(8)で示したモンゴメリ積和剰余演算を行う回路であり、図1で示したような多倍長データ積和演算処理回路(図2では、積和演算部110、120と表記している)を2つ直列に接続した構成となっている。なお、図2では、メモリの図示を省略している。また、本発明の実施の形態のモンゴメリ積和剰余演算回路100は、式(8)の演算を行うための減算部130を有している。
図示しないメモリは、64ビット幅のシングルポート単一メモリである。1クロック時間に1アドレス領域に対して、リードもしくはライトアクセスのどちらかが可能な構造である。このメモリは演算に必要な入力値A、B、C、Nの値を保持している。また演算結果である出力値X、Yを格納する。演算中間値T、Mを保持する作業領域としても用いられる。なお、入力値R、NDは容量が小さいので図示しない別レジスタに保持している。
積和演算部110は、MAC111と、Areg112、Breg113、Creg114、Dreg115とを有し、式(5)の演算を行う。
MAC111は、入力値A、B、Cのうち、例えば入力値Aを被乗数、入力値Bを乗数とした場合、ビット幅が異なる乗数と被乗数とで積和演算を行う。すなわち、被乗数の入力値Aを64ビット幅、乗数である入力値Bを16ビット幅として積和演算A×B+Cを行い、演算結果を出力する。
Areg112は、メモリより読み出した多倍長データの入力値Aを64ビット分格納するレジスタである。
Breg113は、メモリより読み出した多倍長データの入力値Bを64ビット分格納するレジスタである。また、図示しないクロック信号に応じて入力値Bの64ビットのうち下位16ビットずつシフトさせてMAC111に供給する。なお、Breg113は、更に、32ビット分のバッファを有している。これは入力値B、Cは同時に1クロック時間では読み出せないので、入力値Bの読み出しを2クロック時間分前にして、MAC111への16ビットのデータ供給のタイミングを入力値Cと揃えるためである。
Creg114は、メモリより読み出した多倍長データの入力値C(外ループの1回目)または出力値X(外ループの2回目以降)を64ビット分格納するレジスタである。また、図示しないクロック信号に応じて入力値Cの64ビットのうち下位16ビットずつシフトさせてMAC111に供給する。
Dreg115は、MAC111の演算結果の80ビットの演算中間値Tのうち上位の64ビットを格納するレジスタである。なお、MAC111はキャリーの入出力を4ビットずつ持つため(後述する)、その分が付加されDreg115は、68ビットの構成となっている。
このような構成によれば、MAC111では、1クロック時間で入力値Bの16ビットと、入力値Cの16ビットとを消費して、演算結果のうち上位の64ビットは次のクロックの演算で用いられるので、下位の16ビットのデータ量の演算結果を生成する。これら、データ量の総和は48ビットとなり、メモリの1クロック時間に転送可能なデータ量64ビット以下であるので、シングルポートメモリのデータ転送能力で賄える。
積和演算部120は、MAC121と、Freg122、Greg123、Ereg124、Hreg125と、を有する。
MAC121は、{t3,t2,t1,t0}×NDの演算結果のうち下位の64ビットのみを演算することで(264の剰余を演算することに相当)、式(6)を演算し、式(7)のM×N+Tを行い、演算結果を出力する。
Freg122は、式(6)を演算する際は図示しないレジスタに格納された入力値NDを、式(7)を演算する際は、後述のIreg133に格納された演算中間値Mを格納するレジスタである。
Greg123は、メモリより読み出した多倍長データの入力値Nを64ビット分格納する。また、1クロック時間で入力値Nの64ビットのうち下位16ビットずつシフトしてMAC121に供給する。なお、Greg123は、式(6)の演算中間値Mを算出する際には、演算中間値Tの下位16ビットを読み込み、MAC121に供給する。
Ereg124は、式(5)による演算中間値Tの下位16ビットを格納し、MAC121に供給する。なお、式(6)の演算の際には、演算中間値Tの64ビット{t3、t2、t1、t0}は、Greg123に格納されるために、Ereg124の値は0となる。
Hreg125は、MAC121の演算結果の80ビットのうち上位の64ビットを格納するレジスタである。なお、MAC121はキャリーの入出力を4ビットずつ持ち(後述する)、その分が付加されるので、Hreg125は68ビットの構成となっている。
このような構成によれば、MAC121では、式(6)の演算では1クロック時間で演算中間値Tの16ビットを消費して、演算結果のうち上位の64ビットは次のクロックの演算で用いられるので、下位の16ビットのデータ量の演算結果を生成する。これら、データ量の総和は32ビットとなる。また、式(7)の演算の際には、1クロック時間で、入力値Nの16ビットと、演算中間値Tの16ビットとを消費して、16ビットのデータ量の演算結果を生成する。これらデータ量の総和は48ビットとなる。シングルポートメモリの1クロック時間に転送可能なデータ量は64ビット以下であるので、シングルポートメモリのデータ転送能力で賄える。
減算部130は、16ビット減算器131と、Jreg132、Ireg133、Kreg134と、キャリーを保持するキャリーレジスタ135、136と、を有する。
16ビット減算器131は、式(8)の演算を行い、演算結果を出力する。
Jreg132は、メモリより読み出した多倍長データの入力値Nを64ビット分格納する。また、1クロック時間で入力値Nの64ビットのうち下位16ビットずつシフトして16ビット減算器131に供給する。
Ireg133は、積和演算部120から16ビットずつ出力される式(6)による演算中間値M、または、式(7)のM×N+Tの値を格納する。64ビット分の演算中間値Mは、積和演算部120にて式(6)の演算に用いられるため、Freg122に供給される。また式(7)の演算結果である出力値Xは、M×N+Tを264で割ることで得られるが、メモリに書き込む際に、最初の4クロック時間分64ビット分を書き込まず捨てることによって得られる(詳細は後述する)。
Kreg134は、16ビット減算器131による式(8)の出力値Yを16ビットずつ格納し、64ビット分貯まったときにまとめてメモリに書き込む。
以下、図2のモンゴメリ積和剰余演算回路100の動作を説明する前に、MAC111、121の構成及び、メモリの管理構成及び制御コマンドレジスタの例を説明する。
図3は、本発明の実施の形態におけるMACの構成を示す図である。
図のように、MAC111は、ビット幅80ビット=64ビット×16ビット+16ビット+64ビットの構成である。図2で説明した入力値Aを格納するAreg112から入力される64ビットの値をAIN[63:0]、入力値Bを格納するBreg113から入力される16ビットの値をBIN[15:0]、入力値Cを格納するCreg114から入力される16ビットの値をCIN[15:0]、MAC111の演算結果の80ビットのうち上位の64ビットを格納するDreg115から入力される64ビットの値をDIN[63:0]と表記している。また、MAC111から出力される80ビットの値をXOUT[79:0]、Dreg115に一旦格納させるための4ビットのキャリーの出力値をYOUT[3:0]、4ビットのキャリーを格納したDreg115から入力されるキャリーをYIN[3:0]と表記している。
MAC111は、部分積生成部201と、複数項加算器部202と、複数の16ビットの桁上げ加算器203、204、205、206、207とを有する。
部分積生成部201は、AINとBINの部分積AB00[63:0]〜AB15[63:0]を生成する。なお、図示を省略したが16ビット×16ビットの部分積の生成を行う回路が4つ並列に配置されたAND−ARRAY構造となっている。
複数項加算器部202は、部分積AB00[63:0]〜AB15[63:0]とCIN、DINを加算する。
桁上げ加算器203、204、205、206、207は、1クロック時間で下位16ビットの値のみ確定値が出力すればよいので、16ビットずつの5つに分割して加算を実施する構成となっている(5つでキャリー分割している)。このため、YIN[3:0]、YOUT[3:0]のキャリー入出力が存在する。
キャリー出力のYOUT[3:0]は、一旦Dreg115に保持しておき、次回の積和演算のキャリー入力のYIN[3:0]として使用することができる。この構成は、桁上げ処理の遅延パスを短くすることができるので出力遅延時間を小さくでき、動作クロック周波数をあげることが可能となる。
MAC111のAINとBINのビット数に対して、このキャリー分割の幅は、ビット幅が少ないほうに合わせることが可能である。
従来のような(W)×(W)+(W)+(W)(Wはワード長)のビット幅構成のMACのキャリー分割幅はWとすることができる。一方、本発明の実施の形態のように、64ビット×16ビット+16ビット+64ビット、1Wを32ビットとすると(2W)×(W/2)+(W/2)+(2W)のビット幅構成のMAC111のキャリー分割幅は、(W/2)とすることができる。この2つのMACの1回の演算量は同じと見ることができるが、出力遅延時間は、後者の方が速くすることができる。ただし、キャリー分割を行っている場合には、演算最後に桁上げの処理時間が必要になる。しかしながら多倍長データの積和演算を行う場合であって、ワード長とデータ長の比が十分大きな場合には、動作クロック周波数をあげられる後者の構成のほうが全体の処理時間を短くすることができる。
なお、MAC121は、MAC111と同様の構成であるので説明を省略する。
次に、本発明の実施の形態におけるメモリの管理構成について説明する。
本発明の実施の形態のモンゴメリ積和剰余演算回路100では、メモリを単一の構成としているので、必要なデータを複数個格納する。それぞれのデータは、格納されている領域の先頭アドレスとデータ長がわかれば特定することができ、演算を実行する際には、入力値A、B、C、N、出力値X、Yの入出力領域として、メモリ上の領域を任意に割り振ることが可能になる。
しかし、式(8)の最後の比較減算の判定結果により、出力値X、Yのどちらかが最終結果となるので、モンゴメリ積和剰余演算回路100へ入力するデータ、演算結果を指定する図示しない制御部(例えばCPU(Central Processing Unit)などの処理プロセッサ)からのメモリ管理が煩雑になる。
図4は、本発明の実施の形態におけるメモリ管理の構成を示す図である。
メモリを管理する機構として図示しない制御部とは別に、モンゴメリ積和剰余演算回路100側に複数のポインタ格納レジスタを用意しておく。ポインタ格納レジスタには対応するメモリ領域の先頭アドレスが重複無く格納されるようにしておく。Amem、Bmem、…、Nmemは、図示しない制御部が指定するデータ領域名であり、ポインタ格納レジスタの1つ1つと対応している。すなわち図示しない制御部から見てポインタ格納レジスタは1つのデータ領域を示すことになる。例えば、図示しない制御部がデータ領域名Amemを指定した場合には、メモリ実アドレスの先頭アドレス“0110”を格納しているポインタ格納レジスタというデータ領域を指定することになる。
図5は、制御コマンドレジスタの一例を示す図である。
図のような制御コマンドレジスタは、図示しない制御部から見えるコマンドレジスタであり、図4で説明したように、データ領域として、Amem〜Nmemが存在しているので、4ビットの数値をそれぞれの領域名の引数(argument:図中では略してargと表記している)として指定することができる。32ビットのコマンドレジスタとした場合、例えば、図5のように、bit[3:0]は、R/W(読み出しまたは書き込み)の演算結果出力領域を指定するための領域を示し、演算結果である出力値Yが指定される。また、bit[7:4]は、R/Wの作業領域を指定するための領域を示し、演算結果である出力値Xが指定される(なお、XとYが逆でもかまわない)。ここで、作業領域とはメモリの内容が破壊される領域で演算後の値の保障がされない領域である。
bit[11:8]は、R/Wの入力値Cの入力領域を指定する領域を示す。同様にbit[15:12]は入力値B、bit[19:16]は入力値A、bit[23:20]は入力値Nの入力領域を指定する領域を示す。また、bit[31]はR/Wの演算を実行/停止制御の指定を行う領域である。
このようなメモリ管理方式では、モンゴメリ積和剰余演算回路100は、図示しない制御部からメモリ上での入出力先として指定されたデータ領域名から、ポインタ格納レジスタを一旦参照した上で、実データを入出力する実メモリ領域を決定し、式(5)〜(8)で示したようなモンゴメリ積和剰余演算処理を行う。また、指定されたデータ領域に演算結果である出力値X、Yの出力を行うが、その後、式(8)の比較減算結果に応じて、Y<0であればポインタ格納レジスタの中身(先頭アドレス)だけを入れ替える処理を実行する。
このような構成であれば、予め外部の図示しない制御部によりデータ領域名で、作業領域、出力結果格納領域を任意に指定されている場合でも、データ領域名を変えずに上記の入れ替え処理を行うことによって領域名と格納されているデータの整合性が実現される。これにより、制御部におけるメモリ管理が容易となる。
また、モンゴメリ積和剰余演算では、数値として定数0、定数1とメモリ上の値を演算する場合がある。例えば、T=A×1+0として演算する場合である。このようなときにメモリ上に実際に定数0と、定数1とを置く必要は無く、図6に示したように、コマンドレジスタのうち、メモリ領域が実存しないものを定数値として割り当てることでモンゴメリ積和剰余演算回路100に定数値を入力できる。
上記のようなメモリ管理構成・制御方法を構成することで、図示しない制御部からのモンゴメリ積和剰余演算回路100に対する制御を容易にすることができる。
このようなメモリ管理構成・制御方法は、図示しない制御部にて代替実施することも可能であるが、制御部が組み込み型プロセッサであって処理能力に乏しい場合でも、モンゴメリ積和剰余演算回路100側にポインタ格納レジスタを設けて実施することで、メモリ内部に非常に多くのデータが存在する場合でも演算処理を高速に実施できる。
次に、タイミングチャートを用いて、図2の本発明の実施の形態のモンゴメリ積和剰余演算回路100の動作を説明する。
図6は、本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの前半のステップである。
また図7は、本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの後半のステップである。
このタイミングチャート上では、上からクロックサイクル、図示しない制御部からのメモリへのアクセスがリードなのかライトなのかを示す“Memory Access”、メモリから読み出すデータを指定するための“Memory Read Data”、メモリへ書き込むデータを指定するための“Memory Write Data”が示されている。さらに、図2で示したモンゴメリ積和剰余演算回路100の各レジスタの値が示される。すなわち、Areg112の64ビットの値、Breg113の下位16ビット、Creg114の下位16ビット、Dreg115の64ビット、Ereg124の16ビット、Freg122の64ビット、Greg123の下位16ビット、Hreg125の64ビット、Ireg133の上位16ビット、Jreg132の下位16ビット、Kreg134の上位16ビットである。
また、タイミングチャート中で、“−”は演算途中の中間値を示し、斜線は不定値を示し、×印(Ireg133の値)は、処理不要な出力値を示す。“don’t care”は0でも1でもよいことを示す。
はじめのステップ(入力値A{a3,a2,a1,a0}を用いた演算)において、時刻t1までは、式(6)の演算中間値Mを算出する処理を行う。クロックサイクル1〜3において、図示しない制御部から、メモリへのリードアクセスがなされる。これにより、入力値B、A、Cの順で64ビットのデータがメモリから読み出される。そして、Areg112にはA{a3,a2,a1,a0}が格納され、Breg113にはB{b3,b2,b1,b0}が格納され、Creg114にはC{c3,c2,c1,c0}が格納される。これらの値により、MAC111は、積和演算処理を行うが、前述のように本発明の実施の形態では、入力値Aは64ビット、入力値B、Cは下位の16ビットずつ行うので、始めの1クロックの演算は、A{a3,a2,a1,a0}×b0+c0となる。この式によって算出される演算中間値Tの下位16ビットのt0は、Greg123に格納される。Greg123に格納されたt0は、MAC121に供給され、t0と、Freg122に格納された64ビットの入力値NDと、により式(6)の演算を行い、その結果のうち下位16ビットを、演算中間値Mの下位16ビットのm0として、Ireg133の上位16ビットに格納する。以上の処理をb1〜b3、c1〜c3についても繰り返し、Ireg133では、クロックごとに、m0、m1、m2、m3とシフトさせて、演算中間値M{m3、m2、m1、m0}を得る。
時刻t1からは、出力値Xを算出する処理を行う。クロックサイクル5において、64ビット分の入力値B{b3,b2,b1,b0}を読み込むためのリードアクセスを行い、その後1クロックサイクルあけて64ビットの入力値C{c3,c2,c1,c0}を読み込むためのリードアクセスを行う。前述したようにBreg113は32ビット分余計にバッファをもっているので、クロックに応じてBreg113とCreg114の下位16ビットずつ同時にMAC111に供給され、演算中間値Mを算出する際に入力した64ビットの入力値Aと、これらの値により式(5)の演算により演算中間値Tが得られる。演算中間値Tは、t0、t1、t2、t3の順でEreg124に格納され、MAC121に供給される。MAC121にはさらに、Freg122に格納された演算中間値Mの64ビットと、クロックサイクル8のリードアクセスでメモリよりGreg123に格納された入力値Nの下位16ビットずつ(n0,n1,n2,n3)が供給され、式(7)の演算を行いIreg133の上位16ビットに出力する。しかし、ここで、得られた出力値Xの64ビットは、前述のように式(7)の264で除算することからメモリへ書き込まずに捨てる(図6中の×印)。
クロックサイクル9では、再び入力値B{b7、b6、b5、b4}のリードアクセスが行われ、同様に入力値C、Nが読み出され、式(5)、(7)の演算を行って演算結果である出力値XがIreg133に16ビットずつ格納される。Ireg133に64ビットの出力値X{x3,x2,x1,x0}が貯まると、クロックサイクル18のライトアクセスによって、出力値X{x3,x2,x1,x0}がメモリに書き込まれる。
同様にして、出力値X{x7,x6,x5,x4}、出力値X{x11,x10,x9,x8}、出力値X{x15,x14,x13,x12}が算出されメモリに書き込まれる。ただし、最後の出力値X{x15,x14,x13,x12}の際には、式(5)で用いる入力値B、Cは0であり、式(7)で用いる演算中間値Mは“don’t care”、入力値Nは0となる。
以上ではじめのステップ(入力値A{a3,a2,a1,a0}を用いた演算)が終わり時刻t2から、次のステップ(入力値A{a7,a6,a5,a4}を用いた演算)が同様に行われる。ただし、入力値Cの代わりに、前のステップで算出されメモリに書き込まれた出力値Xを用いて演算を行う。
以下同様にして、入力値A{a11,a10,a9,a8}を用いた演算が行われ、最後のステップであるA{a15,a14,a13,a12}を用いた演算に移る(図7)。
最後のステップでは、16ビット減算器131を用いて式(8)の演算を行い、演算結果である出力値Yを算出する。そのため、出力値Xが16ビットずつ算出されるのと同時に、Jreg132にクロックサイクル87のリードアクセスで読み出された入力値N{n3,n2,n1,n0}の下位の16ビットずつ16ビット減算器131に供給されて、出力値Yが16ビットずつ算出されてKreg134に格納される。出力値Y{y3,y2,y1、y0}は、64ビット貯まったときに、クロックサイクル94のライトアクセスによって、まとめてメモリに書き込まれる。この出力値Yのメモリへの書き込み時間を捻出するために積和演算のパイプライン処理を中断している。以下同様にして、演算結果である出力値Y{y7,y6,y5,y4}、Y{y11,y10,y9,y8}、Y{y15,y14,y13,y12}を算出してメモリに書き込む。
以上説明したように、本発明の実施の形態のモンゴメリ積和剰余演算回路100によれば、4クロック時間に64ビットのリードアクセスが3回、ライトアクセスが1回の割合で発生することになり、64ビット幅のシングルポートメモリを用いた場合でも、MAC111、121をクロックごとに使用でき、効率よくモンゴメリ積和剰余演算処理を実行することが可能となる。
上記では、MACを2つ用いた場合について説明したが、1つのみ用いて、式(5)〜(7)の演算を時分割に実施することも可能であり、この場合であっても、MACの使用効率はさほど変わらない。また、MACを3個の直列構造として、式(5)〜(7)の演算を別個に実施することも可能である。この場合M=T×NDの演算のためのMACの使用効率が落ちるが、全体のパイプライン処理が乱れないため、高速な演算処理が可能となる。
また、モンゴメリ積和剰余演算回路100の入力値A、B、Nは複数のワードデータに分割されているので、それぞれのワードデータの演算処理を行うために積和演算部を4つ以上直列に接続して用いて分割処理すれば高速演算が可能となる。
図8は、MACを1つ用いたモンゴメリ積和剰余演算回路の構成図である。
この図では、式(8)を行う減算部については、図2で示した回路と同様であるので図示及び説明を省略する。またメモリも図示を省略したが、64ビット幅のシングルポートメモリである。
図8で示すモンゴメリ積和剰余演算回路300は、MAC301と、メモリより64ビットの入力値A、ND、演算中間値Mを入力して1ビット拡張し、65ビットのデータとしてMAC301に供給するAreg302と、メモリより64ビットの入力値A、B、Nを入力して下位の16ビットずつMAC301に供給する64+32ビットのビット幅を持つBreg303と、メモリより64ビットの入力値C、演算中間値T、出力値Xを入力して下位の16ビットずつMAC301に供給するCreg304を有する。また、MAC301の演算結果のうち上位65ビットを保持してMAC301に再び供給するDreg305と、演算結果のうち下位16ビットを保持して、64ビット分貯まった際に、メモリには、演算中間値Tと出力値X、Areg302には演算中間値Mを出力するEreg306を有する。
図8で示すMAC301が1つのモンゴメリ積和剰余演算回路300は、式(5)〜(7)の演算を時分割して処理する。
また以下の理由により、MAC301のビット数を81ビット=65×16+16+65としている。
モンゴメリ積和剰余演算によるべき乗値演算をバイナリ法で行った場合、2乗値(T=A×A)を演算する割合が高い。このためT=A×Aの2乗演算を高速に実現する必要がある。
2乗算は、演算ループの中で、i>jの場合は処理をスキップし、i=jの場合は、T=T+A[i]×A[j]、i<jの場合は、T=T+2×A[i]×A[j]とすることで、演算に必要なサイクル数の約半分に抑えることが可能になる。
T=T+2×A[i]の演算を実施する際に、A[i]×A[j]の値を左シフトする構成とする、MAC301の内部の構造が複雑になり、遅延パスが長くなる。図8では、Areg302を1ビット拡張し、i<jの場合はAreg302の入力値A[i]値を左シフトし、2×A[i]とA[j]の積を演算する構成とすることで、MAC301の構造の単純化と高速化を行っている。
以上の説明では、メモリをシングルポートメモリとして説明したが、マルチポートメモリを用いてもよい。本発明におけるMACは、乗数と被乗数のビット幅を異なるものとしたため、前述したキャリー分割以外に、以下に示すようなMACの高速動作が可能な構成がとれる。また、そのように構成したMACとマルチポートメモリとを組み合わせることにより、モンゴメリ積和演算処理をさらに高速に行うことができる。
図9は、MACを3つ用いたモンゴメリ積和剰余演算回路の構成図である。
この回路構成では、式(5)〜(7)の演算をそれぞれのMACで演算処理を行う構成である。
式(8)を行う減算部については、図2で示した回路と同様であるので図示及び説明を省略する。また、メモリも図示を省略しているが、512ビット幅の3ポートメモリを使用している。
図のように、モンゴメリ積和剰余演算回路400は、式(5)の演算を行うMAC411と、MAC411に入力値A、B、Cまたは出力値Xを供給するAreg412、Breg413、Creg414と、MAC411での演算結果のうち上位の512ビットを格納してMAC411に供給するDreg415とを有する。さらに、式(6)の演算を行うMAC421を有している。また、MAC421に512ビットの入力値NDを供給するHreg422と、MAC411での演算結果の下位32ビットである演算中間値Tを格納してMAC421に供給するEreg423と、MAC421の演算結果のうち上位の480ビットを格納して再びMAC421に供給するMreg424を有する。
式(7)の演算を行う部分は、MAC431と、512ビットの入力値Nを供給するNreg432と、MAC412での演算結果のうち下位32ビットである演算中間値Mまたは512ビットの入力値Nを32ビットずつMAC431に供給するPreg433と、を有する。さらに、MAC411での演算結果の演算中間値Tの下位32ビットまたは、上位480ビットを選択するマルチプレクサ(mux)434と、選択された値を保持し、MAC431に供給するRreg435と、MAC431での演算結果の下位32ビットを保持し、512ビット分貯まった際にまとめて出力値Xとしてメモリへ書き込むXreg436と、MAC431の上位512ビットを格納しMAC431またはメモリに書き込むVreg437とを有する。
図10は、中間レジスタを用いて、複数項加算器部分を分割したMACの構成を示す図である。
MAC411は、32ビット×32ビットの部分積生成回路501−1、…、501−15、501−16が、16個並列構造となった部分積生成部501と、複数項加算器部502と、中間レジスタ503と、4項加算器部504と、544ビットの桁上げ吸収加算器505により構成されている。
部分積生成部501には、Areg412からの512ビットが32ビットずつ分割されて入力され、Breg413からは、512ビットのうち、下位32ビットずつが前述のシフト動作により供給され、部分積生成回路501−1、…、501−15、501−16にて、部分積を生成する。
算出した部分積は、複数項加算器部502で加算され、中間レジスタ503を介して4項加算器部504に入力される。4項加算器部504には、Dreg415からの512ビットと、Creg414からの32ビットが入力され、A×Bの値に加算される。
最後に544ビットの桁上げ吸収加算器505にてキャリーが足し合わされ、上位の512ビットがDreg415に、下位の32ビットがEreg416に格納される。
このように複数項加算器部502と、4項加算器部504との間が中間レジスタ503により分割し、パイプライン動作させる構成においては、前段側の複数項加算器部502の遅延時間と、後段側の544ビットの桁上げ吸収加算器505の遅延時間を等しくすることで、MAC411の高速化が可能となる。
ここで、前段側の遅延時間は乗数(加算項数)の大きさで決定され、後段側の遅延時間はMAC411の出力ビット幅で決定される。乗数と被乗数のビット幅の比が同じ構成のMACを上記のように中間レジスタ503で分割すると、中間レジスタ503の前段側の複数項加算部分の遅延時間が、後段側の桁上げ吸収加算の遅延時間に比べて大きくなりすぎる。しかし、本発明の実施の形態のように、MAC411の乗数と被乗数のビット幅の比を変更することで、中間レジスタ503の前段側の遅延時間と後段側の遅延時間を等しくすることができ、全体としての高速動作が可能となる。
なお、中段のMAC421もほぼ同様の構成であり、最後段のMAC431は513ビットの加算器の機能を兼ね備えている以外はほぼ同様の構成であるので説明を省略する。
以下図9の回路で各入力値が512ビット以下のモンゴメリ積和剰余演算を行う場合について簡単に説明する。
最前段のMAC411にて入力値A、B、Cもしくは出力値Xの下位32ビットから演算中間値Tの下位32ビットの演算を行う。中段のMAC421は、前段の演算中間値Tの下位32ビットと入力値NDから演算中間値Mの下位32ビットを演算する。最後段のMAC431は、中段のMAC421の出力である演算中間値Mの下位32ビットと、最前段のMAC411の出力である演算中間値Tの下位32ビットと、入力値Nから出力値Xの下位32ビットを演算する。以上の3つの処理を各MAC411、421、431で16回繰り返すと、演算中間値Tの上位512ビットがDreg415に保持され、出力値Xの上位512ビットがVreg437に保持され、出力値Xの下位512ビットがXreg436に保持される。次のサイクルで最後段のMAC431にて、mux434で選択された演算中間値Tの上位ビットと出力値Xの上位ビットを加算処理し、結果をVreg437に保持する。出力値Xの上位ビットの値(Vreg437に格納)が最終結果であるので、これをメモリへ書き込む。
次に演算データ長が512ビットより大きな場合について説明する。
入力値Aの最下位512ビットを使用して、512ビット以下で示した手順で16回演算を行う。その間は、求めた演算中間値Mを全てPreg433に保持しておく。その後、演算中間値Mの512ビットをNreg432に転送し、入力値NをメモリからPreg433に取り込み、最後段のMAC431では、演算中間値Mの512ビットと、入力値Nの下位32ビット、演算中間値Tの下位32ビットから出力値Xの演算を継続する(図中のSwap)。以上の処理を入力値Aを変更して繰り返すことで、512ビットより大きな値でのモンゴメリ積和剰余演算が可能となる。
なお、上記では、基数Rを2のべき乗数、整数Nを奇数値として説明を行ったが、これに限定されず、整数Nと基数Rの関係が、互いに素であって基数Rが整数Nより大きければよい。
本発明は、例えば、公開鍵暗号方式の一つであるRSA方式における乗算剰余演算を行う暗号化回路または復号化回路が搭載されたIDカードなどに適用される。
本発明の実施の形態の多倍長データ積和演算処理回路の原理図である。 本発明の実施の形態のモンゴメリ積和剰余演算回路の構成を示す図である。 本発明の実施の形態におけるMACの構成を示す図である。 本発明の実施の形態におけるメモリ管理の構成を示す図である。 制御コマンドレジスタの一例を示す図である。 本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの前半のステップである。 本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの後半のステップである。 MACを1つ用いたモンゴメリ積和剰余演算回路の構成図である。 MACを3つ用いたモンゴメリ積和剰余演算回路の構成図である。 中間レジスタを用いて、複数項加算器部分を分割したMACの構成を示す図である。 従来の多倍長データ積和演算処理回路の一例の構成図である。
符号の説明
10 多倍長データ積和演算処理回路
11 メモリ
12 MAC
13、14、15、16、17 レジスタ

Claims (5)

  1. 多倍長データに対し積和演算処理を行う多倍長データ積和演算処理回路において、
    前記多倍長データを格納し、1クロックで第1のビット幅のデータを転送可能なシングルポートメモリと、
    ビット幅が異なる乗数と被乗数と、加算値とで前記積和演算処理を行う積和演算器と、
    第2のビット幅をもち、前記第2のビット幅の前記被乗数を前記積和演算器に入力する第1のレジスタと、
    前記第1のビット幅をもち、クロックごとに第3のビット幅の前記乗数を前記積和演算器に入力する第2のレジスタと、
    前記第1のビット幅をもち、前記クロックごとに前記第3のビット幅の第1の加算値を前記積和演算器に入力する第3のレジスタと、
    前記積和演算器での演算結果のうち、上位の前記第2のビット幅を保持し、第2の加算値として前記積和演算器に入力する第4のレジスタと、
    前記積和演算器での演算結果のうち、下位の前記第3のビット幅ごとを生成データとして保持していき、前記第1のビット幅に達した場合に、前記シングルポートメモリに書き込む第5のレジスタとを有し、
    前記シングルポートメモリは、前記第1のレジスタ、前記第2のレジスタ及び前記第3のレジスタに前記第1のビット幅ごとにデータを供給し、前記乗数、前記第1の加算値及び前記生成データのデータ量の総和は、前記第1のビット幅以下であることを特徴とする多倍長データ積和演算処理回路。
  2. 前記積和演算器における桁上げ加算器を複数に分割したことを特徴とする請求項1記載の多倍長データ積和演算処理回路。
  3. 1クロックで第1のビット幅のデータを転送可能なシングルポートメモリに格納された多倍長データを入力してモンゴメリ積和剰余演算を行うモンゴメリ積和剰余演算回路において、
    ビット幅が異なる乗数と被乗数と、加算値とで前記積和演算処理を行う積和演算器と、
    第2のビット幅をもち、前記第2のビット幅の前記被乗数を前記積和演算器に入力する第1のレジスタと、前記第1のビット幅をもち、クロックごとに第3のビット幅の前記乗数を前記積和演算器に入力する第2のレジスタと、前記第1のビット幅をもち、前記クロックごとに前記第3のビット幅の第1の加算値を前記積和演算器に入力する第3のレジスタと、前記積和演算器での演算結果のうち、上位の前記第2のビット幅を保持し、第2の加算値として前記積和演算器に入力する第4のレジスタと、前記積和演算器での演算結果のうち、下位の前記第3のビット幅ごとを生成データとして保持していき、前記第1のビット幅に達した場合に、前記シングルポートメモリに書き込む第5のレジスタとを具備する積和演算処理部を1つ、または直列に接続した複数個を有し、前記シングルポートメモリは、前記第1のレジスタ、前記第2のレジスタ及び前記第3のレジスタに前記第1のビット幅ごとにデータを供給し、前記乗数、前記第1の加算値及び前記生成データのデータ量の総和は、前記第1のビット幅以下であることを特徴とするモンゴメリ積和剰余演算回路。
  4. 前記積和演算器は、前記積和演算器における桁上げ加算器を複数に分割したことを特徴とする請求項3記載のモンゴメリ積和剰余演算回路。
  5. 前記モンゴメリ積和剰余演算で用いるデータの前記メモリ上での先頭アドレスを格納するポインタ格納レジスタを更に有し、外部の制御部により前記データの前記メモリ上での入出力先として指定されたデータ領域名を変えずに、前記ポインタ格納レジスタに格納された前記先頭アドレスを入れ替えることで、前記制御部にて参照可能な前記データを入れ替えることを特徴とする請求項3記載のモンゴメリ積和剰余演算回路。
JP2004017205A 2004-01-26 2004-01-26 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路 Expired - Fee Related JP4408712B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP2004017205A JP4408712B2 (ja) 2004-01-26 2004-01-26 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
EP04017172A EP1560110A1 (en) 2004-01-26 2004-07-21 Multiple-word multiplication-accumulation circuit and Montgomery modular multiplication-accumulation circuit
US10/898,178 US8078661B2 (en) 2004-01-26 2004-07-26 Multiple-word multiplication-accumulation circuit and montgomery modular multiplication-accumulation circuit
KR1020040063153A KR100682354B1 (ko) 2004-01-26 2004-08-11 다배장 데이터 곱합 연산 처리 회로 및 몽고메리 곱합잉여 연산 회로
CNB2004100581735A CN100504758C (zh) 2004-01-26 2004-08-13 多字乘法-累加电路和蒙哥马利模乘法-累加电路

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004017205A JP4408712B2 (ja) 2004-01-26 2004-01-26 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路

Publications (2)

Publication Number Publication Date
JP2005209095A JP2005209095A (ja) 2005-08-04
JP4408712B2 true JP4408712B2 (ja) 2010-02-03

Family

ID=34650749

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004017205A Expired - Fee Related JP4408712B2 (ja) 2004-01-26 2004-01-26 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路

Country Status (5)

Country Link
US (1) US8078661B2 (ja)
EP (1) EP1560110A1 (ja)
JP (1) JP4408712B2 (ja)
KR (1) KR100682354B1 (ja)
CN (1) CN100504758C (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4544870B2 (ja) * 2004-01-26 2010-09-15 富士通セミコンダクター株式会社 演算回路装置
EP1975906B1 (en) * 2006-01-13 2012-07-04 Fujitsu Ltd. Montgomery s algorithm multiplication remainder calculator
JP4894913B2 (ja) * 2007-03-19 2012-03-14 富士通株式会社 Fault攻撃対策機能を搭載した組み込み装置
US8028015B2 (en) * 2007-08-10 2011-09-27 Inside Contactless S.A. Method and system for large number multiplication
JP5097138B2 (ja) * 2009-01-15 2012-12-12 シャープ株式会社 モンゴメリ乗算のための演算回路及び暗号回路
JP5175983B2 (ja) * 2009-09-24 2013-04-03 株式会社東芝 演算装置
US8478969B2 (en) 2010-09-24 2013-07-02 Intel Corporation Performing a multiply-multiply-accumulate instruction
US9343124B1 (en) * 2011-07-29 2016-05-17 Altera Corporation Method and system for operating a multi-port memory system
US9081657B2 (en) * 2011-10-13 2015-07-14 Conexant Systems, Inc. Apparatus and method for abstract memory addressing
US9384168B2 (en) 2013-06-11 2016-07-05 Analog Devices Global Vector matrix product accelerator for microprocessor integration
WO2015053185A1 (ja) * 2013-10-10 2015-04-16 日本電信電話株式会社 秘密商転移装置、秘密ビット分解装置、秘密モジュラス変換装置、秘密商転移方法、秘密ビット分解方法、秘密モジュラス変換方法、プログラム
US10187208B2 (en) 2013-12-28 2019-01-22 Intel Corporation RSA algorithm acceleration processors, methods, systems, and instructions
US11262982B2 (en) * 2018-07-23 2022-03-01 SK Hynix Inc. Computation circuit including a plurality of processing elements coupled to a common accumulator, a computation device and a system including the same
JP7129857B2 (ja) * 2018-09-07 2022-09-02 ルネサスエレクトロニクス株式会社 積和演算装置、積和演算方法、及びシステム
CN109669666B (zh) * 2018-11-06 2022-12-16 清华大学 乘累加处理器
CN109669670B (zh) * 2018-12-26 2020-09-22 贵州华芯通半导体技术有限公司 用于蒙哥马利模乘中的不均等分块的数据处理方法及装置
US20220114431A1 (en) * 2019-01-28 2022-04-14 Rambus Inc. Memory-integrated neural network
CN109933304B (zh) * 2019-03-20 2022-06-21 成都三零嘉微电子有限公司 适用于国密sm2p256v1算法的快速蒙哥马利模乘器运算优化方法
DE102020102453A1 (de) * 2020-01-31 2021-08-05 Infineon Technologies Ag Integrierte Schaltung zum modularen Multiplizieren von zwei ganzen Zahlen für ein kryptographisches Verfahren und Verfahren zur kryptographischen Verarbeitung von Daten basierend auf modularer Multiplikation
US20230185537A1 (en) * 2020-04-23 2023-06-15 University Of Southern California Design of high-performance and scalable montgomery modular multiplier circuits
CN113076061A (zh) * 2021-03-18 2021-07-06 四川和芯微电子股份有限公司 单ram多模块数据的缓存方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0660245A3 (en) * 1993-12-20 1998-09-30 Motorola, Inc. Arithmetic engine
GB2291515B (en) * 1994-07-14 1998-11-18 Advanced Risc Mach Ltd Data processing using multiply-accumulate instructions
US5787025A (en) * 1996-02-28 1998-07-28 Atmel Corporation Method and system for performing arithmetic operations with single or double precision
US5941940A (en) * 1997-06-30 1999-08-24 Lucent Technologies Inc. Digital signal processor architecture optimized for performing fast Fourier Transforms
US5847981A (en) * 1997-09-04 1998-12-08 Motorola, Inc. Multiply and accumulate circuit
US6085210A (en) 1998-01-22 2000-07-04 Philips Semiconductor, Inc. High-speed modular exponentiator and multiplier
US6484194B1 (en) 1998-06-17 2002-11-19 Texas Instruments Incorporated Low cost multiplier block with chain capability
KR100322740B1 (ko) * 1998-07-10 2002-03-08 윤종용 모듈러 연산장치 및 그 방법
KR100325430B1 (ko) * 1999-10-11 2002-02-25 윤종용 상이한 워드 길이의 산술연산을 수행하는 데이터 처리장치 및 그 방법
US6557022B1 (en) * 2000-02-26 2003-04-29 Qualcomm, Incorporated Digital signal processor with coupled multiply-accumulate units
US6957242B1 (en) * 2000-10-26 2005-10-18 Cypress Semiconductor Corp. Noninterfering multiply-MAC (multiply accumulate) circuit
JP3709553B2 (ja) 2000-12-19 2005-10-26 インターナショナル・ビジネス・マシーンズ・コーポレーション 演算回路および演算方法

Also Published As

Publication number Publication date
JP2005209095A (ja) 2005-08-04
US20050165876A1 (en) 2005-07-28
EP1560110A1 (en) 2005-08-03
KR100682354B1 (ko) 2007-02-15
CN1648853A (zh) 2005-08-03
US8078661B2 (en) 2011-12-13
CN100504758C (zh) 2009-06-24
KR20050077001A (ko) 2005-07-29

Similar Documents

Publication Publication Date Title
JP4408712B2 (ja) 多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路
JP4870932B2 (ja) 多重精度を支援する拡張型モンゴメリモジュラ掛け算器
JP3525209B2 (ja) べき乗剰余演算回路及びべき乗剰余演算システム及びべき乗剰余演算のための演算方法
JP4732688B2 (ja) ガロア拡大体・積算/積算加算・積和演算
JP2722411B2 (ja) モンゴメリ法によるモジュラリダクションの実施方法
US7277540B1 (en) Arithmetic method and apparatus and crypto processing apparatus for performing multiple types of cryptography
US5745398A (en) Method for the implementation of modular multiplication according to the Montgomery method
JP3703092B2 (ja) 複数のほぼ完全に同一のプロセッサ要素を用いるモジュラ乗算のためのハードウェア
KR100442218B1 (ko) 몽고메리의 알고리즘을 이용한 멱승 잉여 연산기
JP2010044398A (ja) 多倍長演算装置
JP2002040933A (ja) データ暗号化標準アルゴリズムを利用した暗号化装置
JP3532860B2 (ja) 剰余系表現を利用した演算装置及び方法及びプログラム
JP4823467B2 (ja) ガロア体からの二つの係数を乗算するための方法及びこの方法を遂行するための乗算器
US7240204B1 (en) Scalable and unified multiplication methods and apparatus
Elkhatib et al. Accelerated RISC-V for post-quantum SIKE
JP2004258141A (ja) モンゴメリ乗算剰余の多倍長演算のための演算装置
JP2000353077A (ja) 多倍長演算装置
JP2004227344A (ja) 乗算器及び暗号回路
CN102884505B (zh) 数据处理装置和数据处理方法
JP5175983B2 (ja) 演算装置
JP4360792B2 (ja) べき乗剰余演算器
JP2001034167A (ja) 演算装置及び暗号処理装置
KR100417136B1 (ko) 다항식 기저에서 유한체 승산 장치 및 그 방법
JP2000207387A (ja) 演算装置及び暗号処理装置
KR20070062901A (ko) 중국인 나머지 정리(crt)와 캐리 저장 가산 기반의모듈러 곱셈 장치 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20070115

A711 Notification of change in applicant

Free format text: JAPANESE INTERMEDIATE CODE: A712

Effective date: 20080729

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20090128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090217

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090410

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090630

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090827

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: 20091110

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: 20091110

R150 Certificate of patent or registration of utility model

Ref document number: 4408712

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121120

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121120

Year of fee payment: 3

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121120

Year of fee payment: 3

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121120

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131120

Year of fee payment: 4

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees