(57)【要約】【課題】  シングルポートメモリを用いても効率よく積和演算が可能な多倍長データ積和演算処理回路を提供する。【解決手段】  ＭＡＣ１２は、ビット幅が異なる乗数と被乗数とで積和演算処理を行い、レジスタ１３、１４、１５、１６、１７は、そのビット幅に応じて、ＭＡＣ１２における１クロック時間での消費データ量と生成データ量の総和が、メモリ１１における１クロック時間での転送可能データ量となるように、多倍長データのうち１クロック時間でＭＡＣ１２へ供給するデータ量を調整するので、シングルポートのメモリ１１のデータ転送能力であってもＭＡＣ１２の回路使用効率を下げることはない。【選択図】  図１
2005209095.tif 000002
【特許請求の範囲】
【請求項１】
多倍長データに対し積和演算処理を行う多倍長データ積和演算処理回路において、
前記多倍長データを格納するメモリと、
ビット幅が異なる乗数と被乗数とで前記積和演算処理を行う積和演算器と、
前記ビット幅に応じて、前記積和演算器における１クロック時間での消費データ量と生成データ量の総和が、前記メモリにおける前記１クロック時間での転送可能データ量となるように、前記多倍長データのうち前記１クロック時間で前記積和演算器へ供給するデータ量を調整した複数のレジスタと、
を有することを特徴とする多倍長データ積和演算処理回路。
【請求項２】
前記メモリは、シングルポートメモリであることを特徴とする請求項１記載の多倍長データ積和演算処理回路。
【請求項３】
前記積和演算器における桁上げ加算器を複数に分割したことを特徴とする請求項１記載の多倍長データ積和演算処理回路。
【請求項４】
メモリに格納された多倍長データを入力してモンゴメリ積和剰余演算を行うモンゴメリ積和剰余演算回路において、
ビット幅が異なる乗数と被乗数とで積和演算処理を行う積和演算器と、前記ビット幅に応じて、前記積和演算器における１クロック時間での消費データ量と生成データ量の総和が、前記メモリにおける前記１クロック時間での転送可能データ量となるように、前記多倍長データのうち前記１クロック時間で前記積和演算器へ供給するデータ量を調整した複数のレジスタと、からなる積和演算処理部を１つ、または直列に接続した複数個を有することを特徴とするモンゴメリ積和剰余演算回路。
【請求項５】
前記メモリは、シングルポートメモリであることを特徴とする請求項４記載のモンゴメリ積和剰余演算回路。
【請求項６】
前記積和演算器は、前記積和演算器における桁上げ加算器を複数に分割したことを特徴とする請求項４記載のモンゴメリ積和剰余演算回路。
【請求項７】
前記モンゴメリ積和剰余演算で用いるデータの前記メモリ上での先頭アドレスを格納するポインタ格納レジスタを更に有し、外部の制御部により前記データの前記メモリ上での入出力先として指定されたデータ領域名を変えずに、前記ポインタ格納レジスタに格納された前記先頭アドレスを入れ替えることで、前記制御部にて参照可能な前記データを入れ替えることを特徴とする請求項４記載のモンゴメリ積和剰余演算回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路に関し、特にモンゴメリ積和剰余演算に好適に使用可能な多倍長データ積和演算処理回路及びモンゴメリ積和剰余演算回路に関する。
【背景技術】
【０００２】
近年、電子商取引（Ｅコマース）などのようにネットワーク上で金銭授受を行う市場が広まり、クレジットカード番号や個人情報などの重要な情報を、ネットワークを介して送受信するような機会が急速に増大している。
【０００３】
このような重要な情報がネットワーク上に流れている間に、悪意ある第３者により情報が盗聴や改ざんされることを防止するため、情報の暗号化技術は欠かせないものとなっている。
【０００４】
暗号化技術の中の１つに公開鍵方式が知られている。
公開鍵方式は、公開鍵と秘密鍵の一対の鍵を用意しておき、送信者が受信者の公開鍵で暗号化し、受信者は受信者しか知りえない秘密鍵で復号化する。例えば、ネットワーク上で商品を購入する場合に、顧客は業者から公開鍵を送ってもらい、これによってクレジットカード番号などの情報を暗号化して送信する。業者は秘密鍵によって受信した情報を復号化する。公開鍵を広く公開することによって、不特定多数の者との通信の秘密が簡単に確保できる。
【０００５】
このような公開鍵方式として、ＲＳＡ（Rivest Shamir Adleman）方式がある。ＲＳＡ方式では、乗算剰余演算を用いる。ある数を何回も乗算して整数ｎで割った余りを計算することはコンピュータにとって簡単であるが、その逆の演算で、大きな整数ｎの素因数分解は困難である性質を利用した暗号化方式である。
【０００６】
しかしながら、ＲＳＡ方式における乗算剰余演算の計算量は、ＤＥＳ（Data Encryption Standard）などの対称暗号方式に比較すると多くなるので、高速に計算できるアルゴリズムが求められている。その手法の１つにモンゴメリ積和剰余演算法がある。
【０００７】
モンゴメリ積和剰余演算法は、整数Ｎと整数Ｎと互いに素であって整数Ｎより大きな基数Ｒに対し、Ｔ×Ｒ-1ｍｏｄＮを、０≦Ｔ≦Ｒ×Ｎである入力値Ｔから、Ｎを法とした既約値で求める演算方式である。なお、Ｒ-1はＮを法とするＲの乗算逆元を示す（すなわち、Ｒ×Ｒ-1ｍｏｄＮ＝１を満たす）。この方式は、乗算剰余演算を、減算を繰り返す除算を用いず、加算と乗算とシフト演算の繰り返しにより、Ｎの剰余値を求める方式であり、Ｎの値が非常に大きな場合に適した方法である（例えば、非特許文献１参照）。
【０００８】
具体的な処理手順としては、入力値Ａ、Ｂ、Ｃ、Ｒ、Ｎ、ＮＤの入力に対し、以下の演算を行い、出力値Ｘ、Ｙを出力する。Ｔ、Ｍの値は演算中間値である。
Ｔ＝Ａ×Ｂ＋Ｃ………………（１）
Ｍ＝Ｔ×ＮＤｍｏｄＲ………（２）
Ｘ＝（Ｍ×Ｎ＋Ｔ）／Ｒ……（３）
Ｙ＝Ｘ−Ｎ……………………（４）
なお、入力値ＮＤは、Ｒ×Ｒ-1−Ｎ×ＮＤ＝１の条件を満たす値である。
【０００９】
０＜Ｙの場合は、出力値Ｘの値が演算結果であり、０≧Ｙの場合は、出力値Ｙの値が演算結果となる。
入力値Ａ、Ｂ、Ｃ、Ｎは多倍長の値（例えば２０４８ｂｉｔ）であって、メモリ領域にワードごとに整列して格納されている。入力値Ｒは２のべき乗値（例えば２2048）であり、値そのものではなく、データ長のみの情報が格納されている。入力値ＮＤは演算器のビット幅のみ必要となるが、その理由は後述する。
【００１０】
式（１）の積和演算を実際に行う際には、演算器のビット幅（例えば３２ｂｉｔ）が固定されている積和演算器（以下ＭＡＣ（Multiplier Accumulator）と略す）により（ｄ，ｅ）＝ａ×ｂ＋ｃ＋ｄを複数回演算して行うのが一般的である。なお、ｄは演算結果の上位ビットであり、次のサイクルの演算の入力として再利用する値である。また、ｅは演算結果の下位ビットである。
【００１１】
以下に式（１）の積和演算の際のアルゴリズムを示す。
（１．１）  ｆｏｒ  （ｉ＝０  ｔｏ  ｓ−１）｛
（１．２）        ａ：＝Ａ［ｉ］
（１．３）        ｄ：＝０
（１．４）        ｆｏｒ（ｊ＝０  ｔｏ  ｓ−１）｛
（１．５）            ｂ：＝Ｂ［ｊ］
（１．６）            ｉｆ（ｉ＝＝０）  ｃ＝Ｃ［ｊ］
（１．７）            ｅｌｓｅ          ｃ＝Ｔ［ｉ＋ｊ］
（１．８）            （ｄ，ｅ）：＝ａ×ｂ＋ｃ＋ｄ
（１．９）            Ｔ［ｉ＋ｊ］：＝ｅ
（１．１０）      ｝
（１．１１）      Ｔ［ｉ＋ｓ］：＝ｄ
（１．１２）  ｝
上記のように、ｉとｊをループ変数とした２重ループ（行番号１．１〜１．１２の外ループと、行番号１．４〜１．１０の内ループ）で下位ビット側から繰り返す。ここで、定数ｓ（行番号１．１、１．４、１．１１）は、データ長をワード長で割った数字である。表記中変数の次の［］の値は、データの中のワード位置を下位側から示す値である。例えば、ワード長が３２ビットならば、Ａ［０］は、Ａの下位３２ビットの値を示す。
【００１２】
図１１は、従来の多倍長データ積和演算処理回路の一例の構成図である。
従来の多倍長データ積和演算処理回路９００は、メモリ９０１と、ＭＡＣ９０２と、レジスタ９０３、９０４、９０５、９０６、９０７と、からなる。メモリ９０１上には、演算に必要な多倍長の入力値Ａ、Ｂ、Ｃが存在する。ＭＡＣ９０２は、入力値Ａ、Ｂ、Ｃをワードごとに入力し、演算処理を行って、Ｔ＝Ａ×Ｂ＋Ｃをメモリ９０１上に書き込む。
【００１３】
以下、前述したアルゴリズムによる従来の多倍長データ積和演算処理回路９００の動作を説明する。
まず、図示しない制御回路にてループ変数ｉ，ｊが作成され、メモリ９０１に対してのアドレス入力とされる。次にメモリ９０１からワード長（Ｗ）分の入力値Ａ［ｉ］、Ｂ［ｊ］、Ｃ［ｊ］もしくはＣ［ｊ］の代わりにＴ［ｉ＋ｊ］をリードし、これらをａ、ｂ、ｃとしてレジスタ９０３、９０４、９０５に保持した後、ＭＡＣ９０２を使用して、行番号１．８の（ｄ，ｅ）：＝ａ×ｂ＋ｃ＋ｄを演算し、ｄ，ｅをそれぞれ、レジスタ９０６、９０７に保持させる。ｄは次のサイクルの演算の入力として再利用し、ｅをＴ［ｉ＋ｊ］の新値としてメモリ９０１にライト更新する。
【００１４】
このように、従来の多倍長データ積和演算処理回路９００では、前述のアルゴリズムの外ループ先頭（行番号１．２）にてａをリードしておき、その後内ループの１回の処理につき、ｂ、ｃのメモリ９０１からのリード更新とｅのメモリへのライト更新が必要となる。パイプライン動作を中断せず、ＭＡＣ９０２をクロック時間ごとに動作させるためには、メモリ９０１の転送能力が１クロック時間に３ワード長（３Ｗ）分必要となる。
【００１５】
そのため、マルチポートメモリにしたり、メモリ９０１を領域分割したりすることによりデータの転送能力を補うことができる回路方式が提案されている（例えば、特許文献１参照）。
【００１６】
前述の式（３）の演算は、式（１）と同様の処理になる。なお、Ｒは２のべき乗値であることからＲでの除算はビットシフト演算で実現できる。
式（１）、（２）、（３）の演算は、独立して行うと入力値ＮＤが多倍長必要になるため、効率的ではない。そのため非特許文献２にあるような処理手法が一般に知られている。その処理手法とは、式（１）の演算処理過程で、演算中間値Ｔが下位側から順に決定していくときに、その都度、演算中間値Ｔの最下位ワードに対し、式（２）の演算結果である演算中間値Ｍの最下位ワードを演算決定し、式（３）の出力値Ｘを演算していく方法である。この場合入力値ＮＤは演算ワード長のみで十分となる。
【特許文献１】特開２００２−２０７５８９号公報（第１図）
【非特許文献１】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)
【発明の開示】
【発明が解決しようとする課題】
【００１７】
しかし、データ転送能力を上げるためメモリをマルチポートメモリとすることは、回路素子の使用面積が増えるという問題がある。またメモリを分割することは、レイアウト設計の妨げになるという問題があった。
【００１８】
一方、メモリをシングルポートメモリとした場合には、メモリ領域の回路規模の減少は図れるものの、データ転送能力が１クロック時間に１ワード長（Ｗ）のみとなる。この場合、ＭＡＣをクロックごとに使用できず、ＭＡＣの回路規模に対して効率的な演算が実施できない問題が発生する。例えば、前述した式（１）のような演算を行う際に、ＭＡＣに入力値Ａ、Ｂ、Ｃの１Ｗ分をクロックに応じて順に入力してから演算するために、少なくとも演算するのに３クロックごとの演算しかできなかった。
【００１９】
本発明はこのような点に鑑みてなされたものであり、シングルポートメモリを用いても効率よく積和演算が可能な多倍長データ積和演算処理回路を提供することを目的とする。
また本発明の他の目的は、シングルポートメモリを用いても効率よくモンゴメリ積和剰余演算が可能なモンゴメリ積和剰余演算回路を提供することである。
【課題を解決するための手段】
【００２０】
本発明では上記問題を解決するために、図１に示すように、多倍長データに対し積和演算処理を行う多倍長データ積和演算処理回路１０において、多倍長データを格納するメモリ１１と、ビット幅が異なる乗数と被乗数とで積和演算処理を行うＭＡＣ１２と、そのビット幅に応じて、ＭＡＣ１２における１クロック時間での消費データ量と生成データ量の総和が、メモリ１１における１クロック時間での転送可能データ量となるように、多倍長データのうち１クロック時間でＭＡＣ１２へ供給するデータ量を調整した複数のレジスタ１３、１４、１５、１６、１７と、を有することを特徴とする多倍長データ積和演算処理回路１０が提供される。
【００２１】
上記の構成によれば、ＭＡＣ１２は、ビット幅が異なる乗数と被乗数とで積和演算処理を行い、レジスタ１３、１４、１５、１６、１７は、そのビット幅に応じて、ＭＡＣ１２における１クロック時間での消費データ量と生成データ量の総和が、メモリ１１における１クロック時間での転送可能データ量となるように、多倍長データのうち１クロック時間でＭＡＣ１２へ供給するデータ量を調整するので、シングルポートのメモリ１１のデータ転送能力であってもＭＡＣ１２の回路使用効率を下げることはない。
【発明の効果】
【００２２】
本発明の多倍長データ積和演算処理回路によれば、乗数と被乗数のビット幅が異なる積和演算処理を行うＭＡＣを用い、さらに、複数のレジスタによって、そのビット幅に応じて、ＭＡＣにおける１クロック時間での消費データ量と生成データ量の総和が、メモリにおける１クロック時間での転送可能データ量となるように、多倍長データのうち１クロック時間でＭＡＣへ供給するデータ量を調整したので、シングルポートメモリのデータ転送能力であってもＭＡＣの回路使用効率を下げることはなく、効率のよい積和演算を行うことができる。また、シングルポートメモリを用いることができるため、回路規模を削減することができる。
【発明を実施するための最良の形態】
【００２３】
以下、本発明の実施の形態を図面を参照して詳細に説明する。
なお、以下では、基数Ｒを２のべき乗数、整数Ｎを奇数値として説明を行う。
図１は、本発明の実施の形態の多倍長データ積和演算処理回路の原理図である。
【００２４】
本発明の実施の形態の多倍長データ積和演算処理回路１０は、多倍長データである入力値Ａ、Ｂ、Ｃにより、Ａ×Ｂ＋Ｃの演算を行う回路であり、メモリ１１と、ＭＡＣ１２と、レジスタ１３、１４、１５、１６、１７とを有する。
【００２５】
メモリ１１は、シングルポートメモリであり、例えば、２０４８ビットの多倍長データである入力値Ａ、Ｂ、Ｃ及び演算結果を格納する。以下、メモリ１１の１クロック時間での転送可能データ量を１ワード（１Ｗ）長分とする。
【００２６】
ＭＡＣ１２は、入力値Ａ、Ｂ、Ｃのうち、例えば入力値Ａを被乗数、入力値Ｂを乗数とした場合、ビット幅が異なる乗数と被乗数とで積和演算を行う。すなわち、被乗数の入力値Ａを３ワード長（３×Ｗ）分のビット幅、乗数である入力値Ｂを３分の１ワード長（Ｗ／３）分のビット幅として積和演算Ａ×Ｂ＋Ｃを行い、演算結果を出力する。
【００２７】
レジスタ１３は、多倍長データの入力値Ａを３ワード長分（３×Ｗ）格納する。なお、図中の“Ａ［ｉ］”の“ｉ”は、入力値Ａのデータ長をワード長で割った値を“ｓ”としたときに、０≦ｉ≦ｓ−１となる値であり、多倍長データの中のワード位置を下位側から示す値である。よって、レジスタ１３は、下位からｉ番目の１ワード長分のデータであるＡ［ｉ］と、ｉ＋１番目のＡ［ｉ＋１］、ｉ＋２番目のＡ［ｉ＋２］の計３ワード分を格納する。そしてこの３ワード分を“ａ”としてＭＡＣ１２に入力する。
【００２８】
レジスタ１４、１５は、入力値Ｂ及び入力値Ｃを１ワード分格納する。ただし、レジスタ１４、１５は、読み出した１ワード分のデータを一時保持しておくリードバッファの機能を有し、図示しないクロック信号に応じてＭＡＣ１２に対してＷ／３ずつ“ｂ”、“ｃ”として順次供給される。
【００２９】
レジスタ１６は、ＭＡＣ１２での演算結果のうち上位の３×Ｗ分のデータを出力値ｄとして次の演算のために格納して、次の演算の際にはこれをＭＡＣ１２に供給する。ＭＡＣ１２では、（ｄ、ｅ）＝ａ×ｂ＋ｃ＋ｄを計算する。
【００３０】
レジスタ１７は、ＭＡＣ１２での演算結果のうち下位のＷ／３のデータを出力値ｅとして格納する。レジスタ１７は、ライトバッファの機能を有し、１ワード分のデータが貯まったところで、まとめてメモリ１１に書き込む動作を行う。
【００３１】
これら、レジスタ１３〜１７により、ＭＡＣ１２のビット幅に応じて、ＭＡＣ１２における１クロック時間での消費データ量と生成データ量の総和が、メモリ１１における１クロック時間での転送可能データ量となるように、多倍長データのうち１クロック時間でＭＡＣ１２へ供給するデータ量が調整される。つまり、上記の例では、ＭＡＣ１２は、１クロックで入力値ＢのＷ／３と、入力値ＣのＷ／３とを消費して、演算結果のうち上位の３×Ｗは次のクロックの演算で用いられるので、下位のＷ／３のデータ量の演算結果を生成する。これら、データ量の総和はＷとなり、メモリ１１の１クロック時間に転送可能なデータ量以下（上記の例では転送可能なデータ量Ｗと一致）であるので、シングルポートメモリのデータ転送能力で十分である。
【００３２】
また、ＭＡＣ１２は、ビット幅の異なる乗数と被乗数とで積和演算処理を行う構成としたので、後述するキャリー分割や、中間レジスタを用いてＭＡＣを分割しパイプライン動作させる構成にすれば、乗数と被乗数のビット幅が同じ構成のＭＡＣと比べて、高速動作が可能となる。なお、ＭＡＣの回路規模は乗数と被乗数のビット幅が同じものとほぼ変わらない。
【００３３】
また、上記のようなバッファ機能を有するレジスタ１４、１５、１７はシフトレジスタを用いて容易に実現できる。
以下、図１の多倍長データ積和演算処理回路１０の動作を説明する。
【００３４】
本発明の実施の形態の多倍長データ積和演算処理回路１０は、従来と同様に２重ループを用いたアルゴリズムにより演算を行う。すなわち、外ループで入力値Ａの下位ビットから３×ＷずつＭＡＣ１２に入力し、それに対して、内ループでＷ／３ずつ入力される入力値Ｂ、Ｃを用いて積和演算を行う。
【００３５】
積和演算処理動作が開始すると、まず、メモリ１１に格納された多倍長データの入力値Ａを下位から３回リードし、Ａ［ｉ］、Ａ［ｉ＋１］、Ａ［ｉ＋２］をレジスタ１３に保持し、その値を“ａ”としてＭＡＣ１２に入力する。次に、メモリ１１に格納された多倍長データの入力値Ｂ、Ｃを下位から１ワード長分まとめて読み出し、レジスタ１４、１５に格納する。その後、レジスタ１４、１５からＷ／３ずつ、“ｂ”、“ｃ”としてＭＡＣ１２に供給する。
【００３６】
ＭＡＣ１２は、１クロックで（ｄ，ｅ）＝ａ×ｂ＋ｃ＋ｄの演算を行い、結果として、３×Ｗ＋Ｗ／３のデータ量の演算結果を出力する。ここで、上位の３×Ｗの出力値ｄは、レジスタ１６に格納され、次のクロックで、レジスタ１４、１５から次のＷ／３長分のデータが入力されて演算が行われる際に用いられる。また下位のＷ／３の出力値ｅは、レジスタ１７に格納される。レジスタ１７に格納される出力値ｅは、１ワード長分貯まった際にまとめて、メモリ１１に書き込まれる。このようにして、レジスタ１４、１５に格納された１ワード長分のデータが消費されると（内ループの１回の処理が終了）、レジスタ１４、１５には、新たに、前回の処理で入力したデータの１ワード長分上位のデータを格納して、上記と同様にＭＡＣ１２にて演算処理が行われる。
【００３７】
なお、シングルポートメモリの場合、１ワード長分の入力値Ｂ、Ｃの入力は同時には行えないため時間をずらしてレジスタ１４、１５に格納されるが、例えば、レジスタ１４のバッファのビット幅をレジスタ１５より長くして、入力値Ｂの読み出しを先に行わせ、シフト動作により、ＭＡＣ１２へは同時に下位のＷ／３が入力されるようにすれば、ＭＡＣ１２での演算を停止させることがない（詳細は後述する）。
【００３８】
Ａ［ｉ］、Ａ［ｉ＋１］、Ａ［ｉ＋２］に対し入力値Ｂ、Ｃの全てについて演算が終了すると、Ａ［ｉ］、Ａ［ｉ＋１］、Ａ［ｉ＋２］を更新して、入力値Ａの全てについて上記の処理を繰り返す。
【００３９】
上記のようにすることで、シングルポートメモリのデータ転送能力であっても、ＭＡＣ１２の回路使用効率を下げることはない。すなわち、１クロック時間ごとに１回の演算ができる効率のよい多倍長データの積和演算処理が実現可能となる。
【００４０】
次に、図１で示したような多倍長データ積和演算処理回路１０を、モンゴメリ積和剰余演算に適用した場合について説明する。
以下では、入力値Ａ、Ｂ、Ｃ、Ｎを入力し、モンゴメリ積和剰余演算を行い、出力値Ｘ、Ｙと出力値Ｙの正負の符号をシングルポートメモリに出力する場合について説明する。
【００４１】
また、以下では、説明のため入力値Ａ、Ｂ、Ｃ、Ｎを２５６ビットとし、２のべき乗数Ｒ＝２256、モンゴメリ積和剰余演算に必要なパラメータである入力値ＮＤを６４ビットする。またＴ及びＭは演算の中間値である。また、各値を上位側から１６ビットごとに以下のように表現する。
【００４２】
Ａ［２５５：０］＝｛ａ１５，ａ１４，ａ１３，ａ１２，ａ１１，ａ１０，ａ９，ａ８
，ａ７，ａ６，ａ５，ａ４，ａ３，ａ２，ａ１，ａ０｝；
Ｂ［２５５：０］＝｛ｂ１５，ｂ１４，ｂ１３，ｂ１２，ｂ１１，ｂ１０，ｂ９，ｂ８
，ｂ７，ｂ６，ｂ５，ｂ４，ｂ３，ｂ２，ｂ１，ｂ０｝；
以下、Ｃ、Ｎ、Ｔ、Ｍ、Ｘ、Ｙも同様に表現する。
【００４３】
モンゴメリ積和剰余演算は以下のようになる。
Ｔ＝Ａ×Ｂ＋Ｃ……………………………………………………（５）
Ｍ＝｛ｔ３、ｔ２、ｔ１、ｔ０｝×ＮＤｍｏｄ２64…………（６）
Ｘ＝（Ｍ×Ｎ＋Ｔ）／２64………………………………………（７）
Ｙ＝Ｘ−Ｎ…………………………………………………………（８）
０＜Ｙの場合は、出力値Ｘの値が演算結果であり、０≧Ｙの場合は、出力値Ｙの値が演算結果である。
【００４４】
なお、上の式（６）、（７）において、Ｒ＝２256とせずに、２64としたのは、非特許文献２にあるような処理手法、すなわち、式（５）の演算処理過程で、演算中間値Ｔが下位側から順に決定していくときに、その都度、演算中間値Ｔの最下位ワードに対し、式（６）の演算結果である演算中間値Ｍの最下位ワードを演算決定し、式（７）の演算結果である出力値Ｘを演算していく方法を用いるからである。
【００４５】
図２は、本発明の実施の形態のモンゴメリ積和剰余演算回路の構成を示す図である。
本発明の実施の形態のモンゴメリ積和剰余演算回路１００は、式（５）〜（８）で示したモンゴメリ積和剰余演算を行う回路であり、図１で示したような多倍長データ積和演算処理回路（図２では、積和演算部１１０、１２０と表記している）を２つ直列に接続した構成となっている。なお、図２では、メモリの図示を省略している。また、本発明の実施の形態のモンゴメリ積和剰余演算回路１００は、式（８）の演算を行うための減算部１３０を有している。
【００４６】
図示しないメモリは、６４ビット幅のシングルポート単一メモリである。１クロック時間に１アドレス領域に対して、リードもしくはライトアクセスのどちらかが可能な構造である。このメモリは演算に必要な入力値Ａ、Ｂ、Ｃ、Ｎの値を保持している。また演算結果である出力値Ｘ、Ｙを格納する。演算中間値Ｔ、Ｍを保持する作業領域としても用いられる。なお、入力値Ｒ、ＮＤは容量が小さいので図示しない別レジスタに保持している。
【００４７】
積和演算部１１０は、ＭＡＣ１１１と、Ａｒｅｇ１１２、Ｂｒｅｇ１１３、Ｃｒｅｇ１１４、Ｄｒｅｇ１１５とを有し、式（５）の演算を行う。
ＭＡＣ１１１は、入力値Ａ、Ｂ、Ｃのうち、例えば入力値Ａを被乗数、入力値Ｂを乗数とした場合、ビット幅が異なる乗数と被乗数とで積和演算を行う。すなわち、被乗数の入力値Ａを６４ビット幅、乗数である入力値Ｂを１６ビット幅として積和演算Ａ×Ｂ＋Ｃを行い、演算結果を出力する。
【００４８】
Ａｒｅｇ１１２は、メモリより読み出した多倍長データの入力値Ａを６４ビット分格納するレジスタである。
Ｂｒｅｇ１１３は、メモリより読み出した多倍長データの入力値Ｂを６４ビット分格納するレジスタである。また、図示しないクロック信号に応じて入力値Ｂの６４ビットのうち下位１６ビットずつシフトさせてＭＡＣ１１１に供給する。なお、Ｂｒｅｇ１１３は、更に、３２ビット分のバッファを有している。これは入力値Ｂ、Ｃは同時に１クロック時間では読み出せないので、入力値Ｂの読み出しを２クロック時間分前にして、ＭＡＣ１１１への１６ビットのデータ供給のタイミングを入力値Ｃと揃えるためである。
【００４９】
Ｃｒｅｇ１１４は、メモリより読み出した多倍長データの入力値Ｃ（外ループの１回目）または出力値Ｘ（外ループの２回目以降）を６４ビット分格納するレジスタである。また、図示しないクロック信号に応じて入力値Ｃの６４ビットのうち下位１６ビットずつシフトさせてＭＡＣ１１１に供給する。
【００５０】
Ｄｒｅｇ１１５は、ＭＡＣ１１１の演算結果の８０ビットの演算中間値Ｔのうち上位の６４ビットを格納するレジスタである。なお、ＭＡＣ１１１はキャリーの入出力を４ビットずつ持つため（後述する）、その分が付加されＤｒｅｇ１１５は、６８ビットの構成となっている。
【００５１】
このような構成によれば、ＭＡＣ１１１では、１クロック時間で入力値Ｂの１６ビットと、入力値Ｃの１６ビットとを消費して、演算結果のうち上位の６４ビットは次のクロックの演算で用いられるので、下位の１６ビットのデータ量の演算結果を生成する。これら、データ量の総和は４８ビットとなり、メモリの１クロック時間に転送可能なデータ量６４ビット以下であるので、シングルポートメモリのデータ転送能力で賄える。
【００５２】
積和演算部１２０は、ＭＡＣ１２１と、Ｆｒｅｇ１２２、Ｇｒｅｇ１２３、Ｅｒｅｇ１２４、Ｈｒｅｇ１２５と、を有する。
ＭＡＣ１２１は、｛ｔ３，ｔ２，ｔ１，ｔ０｝×ＮＤの演算結果のうち下位の６４ビットのみを演算することで（２64の剰余を演算することに相当）、式（６）を演算し、式（７）のＭ×Ｎ＋Ｔを行い、演算結果を出力する。
【００５３】
Ｆｒｅｇ１２２は、式（６）を演算する際は図示しないレジスタに格納された入力値ＮＤを、式（７）を演算する際は、後述のＩｒｅｇ１３３に格納された演算中間値Ｍを格納するレジスタである。
【００５４】
Ｇｒｅｇ１２３は、メモリより読み出した多倍長データの入力値Ｎを６４ビット分格納する。また、１クロック時間で入力値Ｎの６４ビットのうち下位１６ビットずつシフトしてＭＡＣ１２１に供給する。なお、Ｇｒｅｇ１２３は、式（６）の演算中間値Ｍを算出する際には、演算中間値Ｔの下位１６ビットを読み込み、ＭＡＣ１２１に供給する。
【００５５】
Ｅｒｅｇ１２４は、式（５）による演算中間値Ｔの下位１６ビットを格納し、ＭＡＣ１２１に供給する。なお、式（６）の演算の際には、演算中間値Ｔの６４ビット｛ｔ３、ｔ２、ｔ１、ｔ０｝は、Ｇｒｅｇ１２３に格納されるために、Ｅｒｅｇ１２４の値は０となる。
【００５６】
Ｈｒｅｇ１２５は、ＭＡＣ１２１の演算結果の８０ビットのうち上位の６４ビットを格納するレジスタである。なお、ＭＡＣ１２１はキャリーの入出力を４ビットずつ持ち（後述する）、その分が付加されるので、Ｈｒｅｇ１２５は６８ビットの構成となっている。
【００５７】
このような構成によれば、ＭＡＣ１２１では、式（６）の演算では１クロック時間で演算中間値Ｔの１６ビットを消費して、演算結果のうち上位の６４ビットは次のクロックの演算で用いられるので、下位の１６ビットのデータ量の演算結果を生成する。これら、データ量の総和は３２ビットとなる。また、式（７）の演算の際には、１クロック時間で、入力値Ｎの１６ビットと、演算中間値Ｔの１６ビットとを消費して、１６ビットのデータ量の演算結果を生成する。これらデータ量の総和は４８ビットとなる。シングルポートメモリの１クロック時間に転送可能なデータ量は６４ビット以下であるので、シングルポートメモリのデータ転送能力で賄える。
【００５８】
減算部１３０は、１６ビット減算器１３１と、Ｊｒｅｇ１３２、Ｉｒｅｇ１３３、Ｋｒｅｇ１３４と、キャリーを保持するキャリーレジスタ１３５、１３６と、を有する。
１６ビット減算器１３１は、式（８）の演算を行い、演算結果を出力する。
【００５９】
Ｊｒｅｇ１３２は、メモリより読み出した多倍長データの入力値Ｎを６４ビット分格納する。また、１クロック時間で入力値Ｎの６４ビットのうち下位１６ビットずつシフトして１６ビット減算器１３１に供給する。
【００６０】
Ｉｒｅｇ１３３は、積和演算部１２０から１６ビットずつ出力される式（６）による演算中間値Ｍ、または、式（７）のＭ×Ｎ＋Ｔの値を格納する。６４ビット分の演算中間値Ｍは、積和演算部１２０にて式（６）の演算に用いられるため、Ｆｒｅｇ１２２に供給される。また式（７）の演算結果である出力値Ｘは、Ｍ×Ｎ＋Ｔを２64で割ることで得られるが、メモリに書き込む際に、最初の４クロック時間分６４ビット分を書き込まず捨てることによって得られる（詳細は後述する）。
【００６１】
Ｋｒｅｇ１３４は、１６ビット減算器１３１による式（８）の出力値Ｙを１６ビットずつ格納し、６４ビット分貯まったときにまとめてメモリに書き込む。
以下、図２のモンゴメリ積和剰余演算回路１００の動作を説明する前に、ＭＡＣ１１１、１２１の構成及び、メモリの管理構成及び制御コマンドレジスタの例を説明する。
【００６２】
図３は、本発明の実施の形態におけるＭＡＣの構成を示す図である。
図のように、ＭＡＣ１１１は、ビット幅８０ビット＝６４ビット×１６ビット＋１６ビット＋６４ビットの構成である。図２で説明した入力値Ａを格納するＡｒｅｇ１１２から入力される６４ビットの値をＡＩＮ［６３：０］、入力値Ｂを格納するＢｒｅｇ１１３から入力される１６ビットの値をＢＩＮ［１５：０］、入力値Ｃを格納するＣｒｅｇ１１４から入力される１６ビットの値をＣＩＮ［１５：０］、ＭＡＣ１１１の演算結果の８０ビットのうち上位の６４ビットを格納するＤｒｅｇ１１５から入力される６４ビットの値をＤＩＮ［６３：０］と表記している。また、ＭＡＣ１１１から出力される８０ビットの値をＸＯＵＴ［７９：０］、Ｄｒｅｇ１１５に一旦格納させるための４ビットのキャリーの出力値をＹＯＵＴ［３：０］、４ビットのキャリーを格納したＤｒｅｇ１１５から入力されるキャリーをＹＩＮ［３：０］と表記している。
【００６３】
ＭＡＣ１１１は、部分積生成部２０１と、複数項加算器部２０２と、複数の１６ビットの桁上げ加算器２０３、２０４、２０５、２０６、２０７とを有する。
部分積生成部２０１は、ＡＩＮとＢＩＮの部分積ＡＢ００［６３：０］〜ＡＢ１５［６３：０］を生成する。なお、図示を省略したが１６ビット×１６ビットの部分積の生成を行う回路が４つ並列に配置されたＡＮＤ−ＡＲＲＡＹ構造となっている。
【００６４】
複数項加算器部２０２は、部分積ＡＢ００［６３：０］〜ＡＢ１５［６３：０］とＣＩＮ、ＤＩＮを加算する。
桁上げ加算器２０３、２０４、２０５、２０６、２０７は、１クロック時間で下位１６ビットの値のみ確定値が出力すればよいので、１６ビットずつの５つに分割して加算を実施する構成となっている（５つでキャリー分割している）。このため、ＹＩＮ［３：０］、ＹＯＵＴ［３：０］のキャリー入出力が存在する。
【００６５】
キャリー出力のＹＯＵＴ［３：０］は、一旦Ｄｒｅｇ１１５に保持しておき、次回の積和演算のキャリー入力のＹＩＮ［３：０］として使用することができる。この構成は、桁上げ処理の遅延パスを短くすることができるので出力遅延時間を小さくでき、動作クロック周波数をあげることが可能となる。
【００６６】
ＭＡＣ１１１のＡＩＮとＢＩＮのビット数に対して、このキャリー分割の幅は、ビット幅が少ないほうに合わせることが可能である。
従来のような（Ｗ）×（Ｗ）＋（Ｗ）＋（Ｗ）（Ｗはワード長）のビット幅構成のＭＡＣのキャリー分割幅はＷとすることができる。一方、本発明の実施の形態のように、６４ビット×１６ビット＋１６ビット＋６４ビット、１Ｗを３２ビットとすると（２Ｗ）×（Ｗ／２）＋（Ｗ／２）＋（２Ｗ）のビット幅構成のＭＡＣ１１１のキャリー分割幅は、（Ｗ／２）とすることができる。この２つのＭＡＣの１回の演算量は同じと見ることができるが、出力遅延時間は、後者の方が速くすることができる。ただし、キャリー分割を行っている場合には、演算最後に桁上げの処理時間が必要になる。しかしながら多倍長データの積和演算を行う場合であって、ワード長とデータ長の比が十分大きな場合には、動作クロック周波数をあげられる後者の構成のほうが全体の処理時間を短くすることができる。
【００６７】
なお、ＭＡＣ１２１は、ＭＡＣ１１１と同様の構成であるので説明を省略する。
次に、本発明の実施の形態におけるメモリの管理構成について説明する。
本発明の実施の形態のモンゴメリ積和剰余演算回路１００では、メモリを単一の構成としているので、必要なデータを複数個格納する。それぞれのデータは、格納されている領域の先頭アドレスとデータ長がわかれば特定することができ、演算を実行する際には、入力値Ａ、Ｂ、Ｃ、Ｎ、出力値Ｘ、Ｙの入出力領域として、メモリ上の領域を任意に割り振ることが可能になる。
【００６８】
しかし、式（８）の最後の比較減算の判定結果により、出力値Ｘ、Ｙのどちらかが最終結果となるので、モンゴメリ積和剰余演算回路１００へ入力するデータ、演算結果を指定する図示しない制御部（例えばＣＰＵ（Central Processing Unit）などの処理プロセッサ）からのメモリ管理が煩雑になる。
【００６９】
図４は、本発明の実施の形態におけるメモリ管理の構成を示す図である。
メモリを管理する機構として図示しない制御部とは別に、モンゴメリ積和剰余演算回路１００側に複数のポインタ格納レジスタを用意しておく。ポインタ格納レジスタには対応するメモリ領域の先頭アドレスが重複無く格納されるようにしておく。Ａｍｅｍ、Ｂｍｅｍ、…、Ｎｍｅｍは、図示しない制御部が指定するデータ領域名であり、ポインタ格納レジスタの１つ１つと対応している。すなわち図示しない制御部から見てポインタ格納レジスタは１つのデータ領域を示すことになる。例えば、図示しない制御部がデータ領域名Ａｍｅｍを指定した場合には、メモリ実アドレスの先頭アドレス“０１１０”を格納しているポインタ格納レジスタというデータ領域を指定することになる。
【００７０】
図５は、制御コマンドレジスタの一例を示す図である。
図のような制御コマンドレジスタは、図示しない制御部から見えるコマンドレジスタであり、図４で説明したように、データ領域として、Ａｍｅｍ〜Ｎｍｅｍが存在しているので、４ビットの数値をそれぞれの領域名の引数（ａｒｇｕｍｅｎｔ：図中では略してａｒｇと表記している）として指定することができる。３２ビットのコマンドレジスタとした場合、例えば、図５のように、ｂｉｔ［３：０］は、Ｒ／Ｗ（読み出しまたは書き込み）の演算結果出力領域を指定するための領域を示し、演算結果である出力値Ｙが指定される。また、ｂｉｔ［７：４］は、Ｒ／Ｗの作業領域を指定するための領域を示し、演算結果である出力値Ｘが指定される（なお、ＸとＹが逆でもかまわない）。ここで、作業領域とはメモリの内容が破壊される領域で演算後の値の保障がされない領域である。
【００７１】
ｂｉｔ［１１：８］は、Ｒ／Ｗの入力値Ｃの入力領域を指定する領域を示す。同様にｂｉｔ［１５：１２］は入力値Ｂ、ｂｉｔ［１９：１６］は入力値Ａ、ｂｉｔ［２３：２０］は入力値Ｎの入力領域を指定する領域を示す。また、ｂｉｔ［３１］はＲ／Ｗの演算を実行／停止制御の指定を行う領域である。
【００７２】
このようなメモリ管理方式では、モンゴメリ積和剰余演算回路１００は、図示しない制御部からメモリ上での入出力先として指定されたデータ領域名から、ポインタ格納レジスタを一旦参照した上で、実データを入出力する実メモリ領域を決定し、式（５）〜（８）で示したようなモンゴメリ積和剰余演算処理を行う。また、指定されたデータ領域に演算結果である出力値Ｘ、Ｙの出力を行うが、その後、式（８）の比較減算結果に応じて、Ｙ＜０であればポインタ格納レジスタの中身（先頭アドレス）だけを入れ替える処理を実行する。
【００７３】
このような構成であれば、予め外部の図示しない制御部によりデータ領域名で、作業領域、出力結果格納領域を任意に指定されている場合でも、データ領域名を変えずに上記の入れ替え処理を行うことによって領域名と格納されているデータの整合性が実現される。これにより、制御部におけるメモリ管理が容易となる。
【００７４】
また、モンゴメリ積和剰余演算では、数値として定数０、定数１とメモリ上の値を演算する場合がある。例えば、Ｔ＝Ａ×１＋０として演算する場合である。このようなときにメモリ上に実際に定数０と、定数１とを置く必要は無く、図６に示したように、コマンドレジスタのうち、メモリ領域が実存しないものを定数値として割り当てることでモンゴメリ積和剰余演算回路１００に定数値を入力できる。
【００７５】
上記のようなメモリ管理構成・制御方法を構成することで、図示しない制御部からのモンゴメリ積和剰余演算回路１００に対する制御を容易にすることができる。
このようなメモリ管理構成・制御方法は、図示しない制御部にて代替実施することも可能であるが、制御部が組み込み型プロセッサであって処理能力に乏しい場合でも、モンゴメリ積和剰余演算回路１００側にポインタ格納レジスタを設けて実施することで、メモリ内部に非常に多くのデータが存在する場合でも演算処理を高速に実施できる。
【００７６】
次に、タイミングチャートを用いて、図２の本発明の実施の形態のモンゴメリ積和剰余演算回路１００の動作を説明する。
図６は、本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの前半のステップである。
【００７７】
また図７は、本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの後半のステップである。
このタイミングチャート上では、上からクロックサイクル、図示しない制御部からのメモリへのアクセスがリードなのかライトなのかを示す“Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ”、メモリから読み出すデータを指定するための“Ｍｅｍｏｒｙ  Ｒｅａｄ  Ｄａｔａ”、メモリへ書き込むデータを指定するための“Ｍｅｍｏｒｙ  Ｗｒｉｔｅ  Ｄａｔａ”が示されている。さらに、図２で示したモンゴメリ積和剰余演算回路１００の各レジスタの値が示される。すなわち、Ａｒｅｇ１１２の６４ビットの値、Ｂｒｅｇ１１３の下位１６ビット、Ｃｒｅｇ１１４の下位１６ビット、Ｄｒｅｇ１１５の６４ビット、Ｅｒｅｇ１２４の１６ビット、Ｆｒｅｇ１２２の６４ビット、Ｇｒｅｇ１２３の下位１６ビット、Ｈｒｅｇ１２５の６４ビット、Ｉｒｅｇ１３３の上位１６ビット、Ｊｒｅｇ１３２の下位１６ビット、Ｋｒｅｇ１３４の上位１６ビットである。
【００７８】
また、タイミングチャート中で、“−”は演算途中の中間値を示し、斜線は不定値を示し、×印（Ｉｒｅｇ１３３の値）は、処理不要な出力値を示す。“ｄｏｎ’ｔ  ｃａｒｅ”は０でも１でもよいことを示す。
【００７９】
はじめのステップ（入力値Ａ｛ａ３，ａ２，ａ１，ａ０｝を用いた演算）において、時刻ｔ１までは、式（６）の演算中間値Ｍを算出する処理を行う。クロックサイクル１〜３において、図示しない制御部から、メモリへのリードアクセスがなされる。これにより、入力値Ｂ、Ａ、Ｃの順で６４ビットのデータがメモリから読み出される。そして、Ａｒｅｇ１１２にはＡ｛ａ３，ａ２，ａ１，ａ０｝が格納され、Ｂｒｅｇ１１３にはＢ｛ｂ３，ｂ２，ｂ１，ｂ０｝が格納され、Ｃｒｅｇ１１４にはＣ｛ｃ３，ｃ２，ｃ１，ｃ０｝が格納される。これらの値により、ＭＡＣ１１１は、積和演算処理を行うが、前述のように本発明の実施の形態では、入力値Ａは６４ビット、入力値Ｂ、Ｃは下位の１６ビットずつ行うので、始めの１クロックの演算は、Ａ｛ａ３，ａ２，ａ１，ａ０｝×ｂ０＋ｃ０となる。この式によって算出される演算中間値Ｔの下位１６ビットのｔ０は、Ｇｒｅｇ１２３に格納される。Ｇｒｅｇ１２３に格納されたｔ０は、ＭＡＣ１２１に供給され、ｔ０と、Ｆｒｅｇ１２２に格納された６４ビットの入力値ＮＤと、により式（６）の演算を行い、その結果のうち下位１６ビットを、演算中間値Ｍの下位１６ビットのｍ０として、Ｉｒｅｇ１３３の上位１６ビットに格納する。以上の処理をｂ１〜ｂ３、ｃ１〜ｃ３についても繰り返し、Ｉｒｅｇ１３３では、クロックごとに、ｍ０、ｍ１、ｍ２、ｍ３とシフトさせて、演算中間値Ｍ｛ｍ３、ｍ２、ｍ１、ｍ０｝を得る。
【００８０】
時刻ｔ１からは、出力値Ｘを算出する処理を行う。クロックサイクル５において、６４ビット分の入力値Ｂ｛ｂ３，ｂ２，ｂ１，ｂ０｝を読み込むためのリードアクセスを行い、その後１クロックサイクルあけて６４ビットの入力値Ｃ｛ｃ３，ｃ２，ｃ１，ｃ０｝を読み込むためのリードアクセスを行う。前述したようにＢｒｅｇ１１３は３２ビット分余計にバッファをもっているので、クロックに応じてＢｒｅｇ１１３とＣｒｅｇ１１４の下位１６ビットずつ同時にＭＡＣ１１１に供給され、演算中間値Ｍを算出する際に入力した６４ビットの入力値Ａと、これらの値により式（５）の演算により演算中間値Ｔが得られる。演算中間値Ｔは、ｔ０、ｔ１、ｔ２、ｔ３の順でＥｒｅｇ１２４に格納され、ＭＡＣ１２１に供給される。ＭＡＣ１２１にはさらに、Ｆｒｅｇ１２２に格納された演算中間値Ｍの６４ビットと、クロックサイクル８のリードアクセスでメモリよりＧｒｅｇ１２３に格納された入力値Ｎの下位１６ビットずつ（ｎ０，ｎ１，ｎ２，ｎ３）が供給され、式（７）の演算を行いＩｒｅｇ１３３の上位１６ビットに出力する。しかし、ここで、得られた出力値Ｘの６４ビットは、前述のように式（７）の２64で除算することからメモリへ書き込まずに捨てる（図６中の×印）。
【００８１】
クロックサイクル９では、再び入力値Ｂ｛ｂ７、ｂ６、ｂ５、ｂ４｝のリードアクセスが行われ、同様に入力値Ｃ、Ｎが読み出され、式（５）、（７）の演算を行って演算結果である出力値ＸがＩｒｅｇ１３３に１６ビットずつ格納される。Ｉｒｅｇ１３３に６４ビットの出力値Ｘ｛ｘ３，ｘ２，ｘ１，ｘ０｝が貯まると、クロックサイクル１８のライトアクセスによって、出力値Ｘ｛ｘ３，ｘ２，ｘ１，ｘ０｝がメモリに書き込まれる。
【００８２】
同様にして、出力値Ｘ｛ｘ７，ｘ６，ｘ５，ｘ４｝、出力値Ｘ｛ｘ１１，ｘ１０，ｘ９，ｘ８｝、出力値Ｘ｛ｘ１５，ｘ１４，ｘ１３，ｘ１２｝が算出されメモリに書き込まれる。ただし、最後の出力値Ｘ｛ｘ１５，ｘ１４，ｘ１３，ｘ１２｝の際には、式（５）で用いる入力値Ｂ、Ｃは０であり、式（７）で用いる演算中間値Ｍは“ｄｏｎ’ｔ  ｃａｒｅ”、入力値Ｎは０となる。
【００８３】
以上ではじめのステップ（入力値Ａ｛ａ３，ａ２，ａ１，ａ０｝を用いた演算）が終わり時刻ｔ２から、次のステップ（入力値Ａ｛ａ７，ａ６，ａ５，ａ４｝を用いた演算）が同様に行われる。ただし、入力値Ｃの代わりに、前のステップで算出されメモリに書き込まれた出力値Ｘを用いて演算を行う。
【００８４】
以下同様にして、入力値Ａ｛ａ１１，ａ１０，ａ９，ａ８｝を用いた演算が行われ、最後のステップであるＡ｛ａ１５，ａ１４，ａ１３，ａ１２｝を用いた演算に移る（図７）。
【００８５】
最後のステップでは、１６ビット減算器１３１を用いて式（８）の演算を行い、演算結果である出力値Ｙを算出する。そのため、出力値Ｘが１６ビットずつ算出されるのと同時に、Ｊｒｅｇ１３２にクロックサイクル８７のリードアクセスで読み出された入力値Ｎ｛ｎ３，ｎ２，ｎ１，ｎ０｝の下位の１６ビットずつ１６ビット減算器１３１に供給されて、出力値Ｙが１６ビットずつ算出されてＫｒｅｇ１３４に格納される。出力値Ｙ｛ｙ３，ｙ２，ｙ１、ｙ０｝は、６４ビット貯まったときに、クロックサイクル９４のライトアクセスによって、まとめてメモリに書き込まれる。この出力値Ｙのメモリへの書き込み時間を捻出するために積和演算のパイプライン処理を中断している。以下同様にして、演算結果である出力値Ｙ｛ｙ７，ｙ６，ｙ５，ｙ４｝、Ｙ｛ｙ１１，ｙ１０，ｙ９，ｙ８｝、Ｙ｛ｙ１５，ｙ１４，ｙ１３，ｙ１２｝を算出してメモリに書き込む。
【００８６】
以上説明したように、本発明の実施の形態のモンゴメリ積和剰余演算回路１００によれば、４クロック時間に６４ビットのリードアクセスが３回、ライトアクセスが１回の割合で発生することになり、６４ビット幅のシングルポートメモリを用いた場合でも、ＭＡＣ１１１、１２１をクロックごとに使用でき、効率よくモンゴメリ積和剰余演算処理を実行することが可能となる。
【００８７】
上記では、ＭＡＣを２つ用いた場合について説明したが、１つのみ用いて、式（５）〜（７）の演算を時分割に実施することも可能であり、この場合であっても、ＭＡＣの使用効率はさほど変わらない。また、ＭＡＣを３個の直列構造として、式（５）〜（７）の演算を別個に実施することも可能である。この場合Ｍ＝Ｔ×ＮＤの演算のためのＭＡＣの使用効率が落ちるが、全体のパイプライン処理が乱れないため、高速な演算処理が可能となる。
【００８８】
また、モンゴメリ積和剰余演算回路１００の入力値Ａ、Ｂ、Ｎは複数のワードデータに分割されているので、それぞれのワードデータの演算処理を行うために積和演算部を４つ以上直列に接続して用いて分割処理すれば高速演算が可能となる。
【００８９】
図８は、ＭＡＣを１つ用いたモンゴメリ積和剰余演算回路の構成図である。
この図では、式（８）を行う減算部については、図２で示した回路と同様であるので図示及び説明を省略する。またメモリも図示を省略したが、６４ビット幅のシングルポートメモリである。
【００９０】
図８で示すモンゴメリ積和剰余演算回路３００は、ＭＡＣ３０１と、メモリより６４ビットの入力値Ａ、ＮＤ、演算中間値Ｍを入力して１ビット拡張し、６５ビットのデータとしてＭＡＣ３０１に供給するＡｒｅｇ３０２と、メモリより６４ビットの入力値Ａ、Ｂ、Ｎを入力して下位の１６ビットずつＭＡＣ３０１に供給する６４＋３２ビットのビット幅を持つＢｒｅｇ３０３と、メモリより６４ビットの入力値Ｃ、演算中間値Ｔ、出力値Ｘを入力して下位の１６ビットずつＭＡＣ３０１に供給するＣｒｅｇ３０４を有する。また、ＭＡＣ３０１の演算結果のうち上位６５ビットを保持してＭＡＣ３０１に再び供給するＤｒｅｇ３０５と、演算結果のうち下位１６ビットを保持して、６４ビット分貯まった際に、メモリには、演算中間値Ｔと出力値Ｘ、Ａｒｅｇ３０２には演算中間値Ｍを出力するＥｒｅｇ３０６を有する。
【００９１】
図８で示すＭＡＣ３０１が１つのモンゴメリ積和剰余演算回路３００は、式（５）〜（７）の演算を時分割して処理する。
また以下の理由により、ＭＡＣ３０１のビット数を８１ビット＝６５×１６＋１６＋６５としている。
【００９２】
モンゴメリ積和剰余演算によるべき乗値演算をバイナリ法で行った場合、２乗値（Ｔ＝Ａ×Ａ）を演算する割合が高い。このためＴ＝Ａ×Ａの２乗演算を高速に実現する必要がある。
【００９３】
２乗算は、演算ループの中で、ｉ＞ｊの場合は処理をスキップし、ｉ＝ｊの場合は、Ｔ＝Ｔ＋Ａ［ｉ］×Ａ［ｊ］、ｉ＜ｊの場合は、Ｔ＝Ｔ＋２×Ａ［ｉ］×Ａ［ｊ］とすることで、演算に必要なサイクル数の約半分に抑えることが可能になる。
【００９４】
Ｔ＝Ｔ＋２×Ａ［ｉ］の演算を実施する際に、Ａ［ｉ］×Ａ［ｊ］の値を左シフトする構成とする、ＭＡＣ３０１の内部の構造が複雑になり、遅延パスが長くなる。図８では、Ａｒｅｇ３０２を１ビット拡張し、ｉ＜ｊの場合はＡｒｅｇ３０２の入力値Ａ［ｉ］値を左シフトし、２×Ａ［ｉ］とＡ［ｊ］の積を演算する構成とすることで、ＭＡＣ３０１の構造の単純化と高速化を行っている。
【００９５】
以上の説明では、メモリをシングルポートメモリとして説明したが、マルチポートメモリを用いてもよい。本発明におけるＭＡＣは、乗数と被乗数のビット幅を異なるものとしたため、前述したキャリー分割以外に、以下に示すようなＭＡＣの高速動作が可能な構成がとれる。また、そのように構成したＭＡＣとマルチポートメモリとを組み合わせることにより、モンゴメリ積和演算処理をさらに高速に行うことができる。
【００９６】
図９は、ＭＡＣを３つ用いたモンゴメリ積和剰余演算回路の構成図である。
この回路構成では、式（５）〜（７）の演算をそれぞれのＭＡＣで演算処理を行う構成である。
【００９７】
式（８）を行う減算部については、図２で示した回路と同様であるので図示及び説明を省略する。また、メモリも図示を省略しているが、５１２ビット幅の３ポートメモリを使用している。
【００９８】
図のように、モンゴメリ積和剰余演算回路４００は、式（５）の演算を行うＭＡＣ４１１と、ＭＡＣ４１１に入力値Ａ、Ｂ、Ｃまたは出力値Ｘを供給するＡｒｅｇ４１２、Ｂｒｅｇ４１３、Ｃｒｅｇ４１４と、ＭＡＣ４１１での演算結果のうち上位の５１２ビットを格納してＭＡＣ４１１に供給するＤｒｅｇ４１５とを有する。さらに、式（６）の演算を行うＭＡＣ４２１を有している。また、ＭＡＣ４２１に５１２ビットの入力値ＮＤを供給するＨｒｅｇ４２２と、ＭＡＣ４１１での演算結果の下位３２ビットである演算中間値Ｔを格納してＭＡＣ４２１に供給するＥｒｅｇ４２３と、ＭＡＣ４２１の演算結果のうち上位の４８０ビットを格納して再びＭＡＣ４２１に供給するＭｒｅｇ４２４を有する。
【００９９】
式（７）の演算を行う部分は、ＭＡＣ４３１と、５１２ビットの入力値Ｎを供給するＮｒｅｇ４３２と、ＭＡＣ４１２での演算結果のうち下位３２ビットである演算中間値Ｍまたは５１２ビットの入力値Ｎを３２ビットずつＭＡＣ４３１に供給するＰｒｅｇ４３３と、を有する。さらに、ＭＡＣ４１１での演算結果の演算中間値Ｔの下位３２ビットまたは、上位４８０ビットを選択するマルチプレクサ（ｍｕｘ）４３４と、選択された値を保持し、ＭＡＣ４３１に供給するＲｒｅｇ４３５と、ＭＡＣ４３１での演算結果の下位３２ビットを保持し、５１２ビット分貯まった際にまとめて出力値Ｘとしてメモリへ書き込むＸｒｅｇ４３６と、ＭＡＣ４３１の上位５１２ビットを格納しＭＡＣ４３１またはメモリに書き込むＶｒｅｇ４３７とを有する。
【０１００】
図１０は、中間レジスタを用いて、複数項加算器部分を分割したＭＡＣの構成を示す図である。
ＭＡＣ４１１は、３２ビット×３２ビットの部分積生成回路５０１−１、…、５０１−１５、５０１−１６が、１６個並列構造となった部分積生成部５０１と、複数項加算器部５０２と、中間レジスタ５０３と、４項加算器部５０４と、５４４ビットの桁上げ吸収加算器５０５により構成されている。
【０１０１】
部分積生成部５０１には、Ａｒｅｇ４１２からの５１２ビットが３２ビットずつ分割されて入力され、Ｂｒｅｇ４１３からは、５１２ビットのうち、下位３２ビットずつが前述のシフト動作により供給され、部分積生成回路５０１−１、…、５０１−１５、５０１−１６にて、部分積を生成する。
【０１０２】
算出した部分積は、複数項加算器部５０２で加算され、中間レジスタ５０３を介して４項加算器部５０４に入力される。４項加算器部５０４には、Ｄｒｅｇ４１５からの５１２ビットと、Ｃｒｅｇ４１４からの３２ビットが入力され、Ａ×Ｂの値に加算される。
【０１０３】
最後に５４４ビットの桁上げ吸収加算器５０５にてキャリーが足し合わされ、上位の５１２ビットがＤｒｅｇ４１５に、下位の３２ビットがＥｒｅｇ４１６に格納される。
このように複数項加算器部５０２と、４項加算器部５０４との間が中間レジスタ５０３により分割し、パイプライン動作させる構成においては、前段側の複数項加算器部５０２の遅延時間と、後段側の５４４ビットの桁上げ吸収加算器５０５の遅延時間を等しくすることで、ＭＡＣ４１１の高速化が可能となる。
【０１０４】
ここで、前段側の遅延時間は乗数（加算項数）の大きさで決定され、後段側の遅延時間はＭＡＣ４１１の出力ビット幅で決定される。乗数と被乗数のビット幅の比が同じ構成のＭＡＣを上記のように中間レジスタ５０３で分割すると、中間レジスタ５０３の前段側の複数項加算部分の遅延時間が、後段側の桁上げ吸収加算の遅延時間に比べて大きくなりすぎる。しかし、本発明の実施の形態のように、ＭＡＣ４１１の乗数と被乗数のビット幅の比を変更することで、中間レジスタ５０３の前段側の遅延時間と後段側の遅延時間を等しくすることができ、全体としての高速動作が可能となる。
【０１０５】
なお、中段のＭＡＣ４２１もほぼ同様の構成であり、最後段のＭＡＣ４３１は５１３ビットの加算器の機能を兼ね備えている以外はほぼ同様の構成であるので説明を省略する。
以下図９の回路で各入力値が５１２ビット以下のモンゴメリ積和剰余演算を行う場合について簡単に説明する。
【０１０６】
最前段のＭＡＣ４１１にて入力値Ａ、Ｂ、Ｃもしくは出力値Ｘの下位３２ビットから演算中間値Ｔの下位３２ビットの演算を行う。中段のＭＡＣ４２１は、前段の演算中間値Ｔの下位３２ビットと入力値ＮＤから演算中間値Ｍの下位３２ビットを演算する。最後段のＭＡＣ４３１は、中段のＭＡＣ４２１の出力である演算中間値Ｍの下位３２ビットと、最前段のＭＡＣ４１１の出力である演算中間値Ｔの下位３２ビットと、入力値Ｎから出力値Ｘの下位３２ビットを演算する。以上の３つの処理を各ＭＡＣ４１１、４２１、４３１で１６回繰り返すと、演算中間値Ｔの上位５１２ビットがＤｒｅｇ４１５に保持され、出力値Ｘの上位５１２ビットがＶｒｅｇ４３７に保持され、出力値Ｘの下位５１２ビットがＸｒｅｇ４３６に保持される。次のサイクルで最後段のＭＡＣ４３１にて、ｍｕｘ４３４で選択された演算中間値Ｔの上位ビットと出力値Ｘの上位ビットを加算処理し、結果をＶｒｅｇ４３７に保持する。出力値Ｘの上位ビットの値（Ｖｒｅｇ４３７に格納）が最終結果であるので、これをメモリへ書き込む。
【０１０７】
次に演算データ長が５１２ビットより大きな場合について説明する。
入力値Ａの最下位５１２ビットを使用して、５１２ビット以下で示した手順で１６回演算を行う。その間は、求めた演算中間値Ｍを全てＰｒｅｇ４３３に保持しておく。その後、演算中間値Ｍの５１２ビットをＮｒｅｇ４３２に転送し、入力値ＮをメモリからＰｒｅｇ４３３に取り込み、最後段のＭＡＣ４３１では、演算中間値Ｍの５１２ビットと、入力値Ｎの下位３２ビット、演算中間値Ｔの下位３２ビットから出力値Ｘの演算を継続する（図中のＳｗａｐ）。以上の処理を入力値Ａを変更して繰り返すことで、５１２ビットより大きな値でのモンゴメリ積和剰余演算が可能となる。
【０１０８】
なお、上記では、基数Ｒを２のべき乗数、整数Ｎを奇数値として説明を行ったが、これに限定されず、整数Ｎと基数Ｒの関係が、互いに素であって基数Ｒが整数Ｎより大きければよい。
【産業上の利用可能性】
【０１０９】
本発明は、例えば、公開鍵暗号方式の一つであるＲＳＡ方式における乗算剰余演算を行う暗号化回路または復号化回路が搭載されたＩＤカードなどに適用される。
【図面の簡単な説明】
【０１１０】
【図１】本発明の実施の形態の多倍長データ積和演算処理回路の原理図である。
【図２】本発明の実施の形態のモンゴメリ積和剰余演算回路の構成を示す図である。
【図３】本発明の実施の形態におけるＭＡＣの構成を示す図である。
【図４】本発明の実施の形態におけるメモリ管理の構成を示す図である。
【図５】制御コマンドレジスタの一例を示す図である。
【図６】本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの前半のステップである。
【図７】本発明の実施の形態のモンゴメリ積和剰余演算回路の動作を示すタイミングチャートの後半のステップである。
【図８】ＭＡＣを１つ用いたモンゴメリ積和剰余演算回路の構成図である。
【図９】ＭＡＣを３つ用いたモンゴメリ積和剰余演算回路の構成図である。
【図１０】中間レジスタを用いて、複数項加算器部分を分割したＭＡＣの構成を示す図である。
【図１１】従来の多倍長データ積和演算処理回路の一例の構成図である。
【符号の説明】
【０１１１】
１０  多倍長データ積和演算処理回路
１１  メモリ
１２  ＭＡＣ
１３、１４、１５、１６、１７  レジスタ
【図１】
2005209095.tif 000003
【図２】
2005209095.tif 000004
【図３】
2005209095.tif 000005
【図４】
2005209095.tif 000006
【図５】
2005209095.tif 000007
【図６】
2005209095.tif 000008
【図７】
2005209095.tif 000009
【図８】
2005209095.tif 000010
【図９】
2005209095.tif 000011
【図１０】
2005209095.tif 000012
【図１１】
2005209095.tif 000013