算術プロセッサ
【課題】有限体演算やモジュラ整数演算など一群の関連する算術演算をそれぞれパフォームする複数の算術回路を有するALUを含むことを特徴とする算術プロセッサを提供すること。
【解決手段】ALUは、オペランドデータを受信するオペランド入力データバスと、算術演算の結果を戻す結果データ出力バスとを有する。レジスタファイルはオペランドデータバスと結果データバスに結合されている。レジスタファイルは複数の算術回路によって共用されている。コントローラは、ALUおよびレジスタファイルに結合され、算術演算を要求するモード制御信号に応答して、複数の算術回路の1つを選択し、レジスタファイルとALUとの間でデータアクセスを制御し、それによりレジスタファイルが算術回路によって共用されるようにする。
【解決手段】ALUは、オペランドデータを受信するオペランド入力データバスと、算術演算の結果を戻す結果データ出力バスとを有する。レジスタファイルはオペランドデータバスと結果データバスに結合されている。レジスタファイルは複数の算術回路によって共用されている。コントローラは、ALUおよびレジスタファイルに結合され、算術演算を要求するモード制御信号に応答して、複数の算術回路の1つを選択し、レジスタファイルとALUとの間でデータアクセスを制御し、それによりレジスタファイルが算術回路によって共用されるようにする。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、有限体および整数の算術をパフォームする方法および装置に関する。
【背景技術】
【0002】
有限体(finitefield)に対するEC(Elliptic Curve)暗号法では、加算と、乗算と、二乗と、反転(inversion)の算術演算が必要となる。さらに、体(field)の標数が2でない場合には、減算も必要になる。例えば符号定数の計算では、モジュラ算術演算も必要になるが、このような演算は有限体の演算ほど必要にならない。例えばEC暗号法では、モジュラおよび有限体演算、加算、減算、乗算、反転の完全な補集合(fullcomplement)が必要になる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
暗号法のための体のサイズは比較的大きくなる傾向があり、算術演算を許容時間内で実行するために高速の専用プロセッサが必要になる。したがって、高速モジュラ算術プロセッサか、F2nの算術演算をパフォームする専用プロセッサのいずれかが、多数インプリメントされている。特殊目的または専用プロセッサを使用することは、当技術分野では、周知のことである。こうしたプロセッサは一般にコプロセッサと呼ばれ、通常は、ホスト計算システムで利用されており、従って、命令および制御はメインプロセッサからコプロセッサに提供されている。
【0004】
なかでもRSAが暗号化システムとして慣用されていたが、優秀かつよりセキュアなEC暗号法が登場したため、モジュラ冪法(modular exponentiation)専用のプロセッサの必要性は、薄らいで来ている。ユーザはRSA暗号法からEC暗号法に移行しているものの、性能およびコストをほとんどあるいは全く犠牲にすることなくこれらの両方の演算をサポートする算術プロセッサに対するニーズがある。
【0005】
本発明の第1の目的は、有限体算術と整数算術を組み合わせ、EC暗号法に必要な演算と、例えばRSA暗号法で必要なモジュラ冪法とを提供するプロセッサを提供することにある。
【0006】
本発明の第2の目的は、異なる体またはレジスタサイズにスケーリングすることができる算術プロセッサ設計を提供することにある。
【0007】
本発明の第3の目的は、異なる体サイズで使用することができる算術プロセッサを提供することにある。
【0008】
本発明の第4の目的は、マルチシーケンス中の複数のステップを同時にパフォームすることによってマルチシーケンス演算実行を高速化するためにスケーリングすることができる算術プロセッサを提供することにある。
【課題を解決するための手段】
【0009】
本発明によれば、
(a)一群の関連する算術演算をそれぞれ実行する複数の算術回路を有する論理演算装置であって、オペランドデータを受信するオペランド入力データバスと、前記算術演算の結果を戻す結果データ出力バスとを有する論理演算装置と、
(b)前記オペランドデータバスおよび前記結果データバスに結合されたレジスタファイルと、
(c)前記ALUおよび前記レジスタファイルに結合された制御装置であって、算術演算を要求するモード制御信号に応答して前記複数の算術回路の1つを選択し、かつ前記レジスタファイルと前記ALUの間でデータアクセスを制御することにより、前記レジスタファイルが前記算術回路によって共用されるようにする制御装置とを含む算術プロセッサが提供される。
【0010】
本発明によれば、有限体回路および整数算術回路を含み、かつ汎用レジスタおよび専用レジスタを備えたプロセッサが提供される。
【0011】
本発明によれば、有限体算術および整数算術を両方とも実行し、専用レジスタおよび汎用レジスタの両方ならびに算術回路を共用する算術プロセッサが提供される。この目的のために、多項式基底が整数の標準的な基数累乗基底(standard radix-power basis)と同様であるので、有限体ハードウェアについて多項式基底を想定する。
【発明の効果】
【0012】
本発明によれば、有限体算術と整数算術を組み合わせ、EC暗号法に必要な演算と、例えばRSA暗号法で必要なモジュラ冪法とを提供するプロセッサを提供できる。
【0013】
本発明によれば、異なる体またはレジスタサイズにスケーリングすることができる算術プロセッサ設計を提供できる。
【0014】
本発明によれば、異なる体サイズで使用することができる算術プロセッサを提供できる。
【0015】
本発明によれば、マルチシーケンス中の複数のステップを同時にパフォームすることによってマルチシーケンス演算実行を高速化するためにスケーリングすることができる算術プロセッサを提供できる。
【図面の簡単な説明】
【0016】
【図1】有限体算術および整数算術をパフォームする算術プロセッサアーキテクチャのブロック図である。
【図2】図1に示すALU(arithmetic logic unit)の概略ブロック図である。
【図3】有限体算術および整数算術をパフォームする算術プロセッサアーキテクチャの代替実施形態のブロック図である。
【図4】図3に示すALUの概略ブロック図である。
【図5】(a)、(b)、および(c)は図2に示すALUのビットスライスの実施形態のブロック図である。
【図6】図5に示すビットスライスの有限体乗算器の回路図である。
【図7】算術インバータのブロック図である。
【図8】組み合わせた有限体/整数乗算器の回路図である。
【図9】図1のマルチビットALUの実施形態を示す概略ブロック図である。
【図10】図9のマルチビット有限体乗算器の回路図である。
【発明を実施するための形態】
【0017】
図1を説明する。算術プロセッサの一実施形態は一般的に参照番号1で示してある。当然のことであるが、この算術プロセッサは総合計算システム中の汎用プロセッサとともに使用することができ、データはこの計算システムと算術プロセッサの間で交換される。算術プロセッサには、レジスタファイルと呼ばれる一群の汎用レジスタ(GP)2が含まれている。レジスタファイルはECの点加算(point addition)、点倍加(point doubling)などのための中間記憶域として使用することができるものである。一群の汎用レジスタ2はデータ入力またはオペランドバス6を介してALU(arithmeticlogic unit)4と通信を行なっている。ALU4にはシェアード(shared)有限体および整数算術回路が含まれている。ALU4による計算の結果をレジスタファイル2に書き込むため、データ出力または結果バス14がALU4とレジスタファイル2の間に設けてある。
【0018】
ALU4による計算オペレーションは、算術プロセッサ1のコントローラ8に駐在するマイクロプログラム化命令により制御されている。モード選択コントロール10は有限体計算またはモジュラ整数計算を選択するために用意してある。体サイズ制御12も、ALU4を初期設定して、種々のオペランドベクトルサイズに適応させるために用意してある。そこで、コントローラ8はなかんずく次のタスク、すなわち、適正な算術モードおよび演算をALU4に提供するタスクと、レジスタファイル2とALU4の間のデータアクセスをコーディネートするタスクと、使用される適正な体のサイズをALU4に提供するタスクとをパフォームする。
【0019】
汎用レジスタは、少なくとも予想可能な最大のF2mEC暗号システムをハンドルするだけのビット幅を有するように選択される。これら汎用レジスタは整数モジュラ算術で必要なビット長をサポートするために、組み合わせることができる。例えば、レジスタファイル2の単一レジスタのビット幅が512ビット幅である場合に、単一の2048ビットRSA量の記憶域を提供するため、4つのレジスタを使用することができる。これら汎用レジスタには、データのブロックがロードされ、例えば、2048ビットの計算をブロック単位で行い、ついで、再組み立てして、全幅結果(full width result)を得ることができる。典型的には、算術プロセッサ1は既存のホストコンピュータシステムで利用され、コントローラ8はこのホストコンピュータシステムから制御信号を受信し、適正なホストバスインタフェースを介して、ホストデータバスにデータを通信する。このようなインタフェースの詳細は当業者とって周知のことであり、説明は省略する。
【0020】
図2を説明する。ALU4には、幾つかの特殊レジスタ16と、複数のサブALU18と、出力データバス30と、コントローラ20とが含まれている。複数のサブALU18には組み合わせロジックおよび算術回路が含まれていて、組み合わせロジックおよび算術回路は、特殊レジスタからデータバス28を介して各サブALUに入力された1つ以上のビットをオペレートする。出力データバス30はサブALU18と特殊レジスタとの間に設けてある。コントローラ20は、なかんずく、次のタスク、すなわち、計算オペレーション中の各ステップを通してALU4を順序づけるタスクと、特殊レジスタ16からの制御ビットを監視するタスクと、使用してある体のサイズを決定するためにカウンタを制御レジスタ22に実装するとともに、プロセッサハードウェアを設計し直さずに、プロセッサ1が異なる体サイズに対して使用することができる機構を実装するタスクとをパフォームする。これらの機能を提供するため、特殊レジスタ16の制御ビット26は制御ビット入力24としてコントローラ20に供給される。特殊レジスタ16は、全て、個別にアドレス可能になっている。コントローラ20はレジスタファイルから入力バス6を介してサブALU18または特殊レジスタ16に入力されたデータも制御する。これらサブALUは、単一のビットにオペレートすることができ、複数のビットに一度にオペレートすることができる。これらのコンポーネントは後程より詳細に記述する。
【0021】
図3を説明する。算術プロセッサの代替例は参照番号1′で示してある。本実施形態では、別個の有限体装置34および整数モジュラ算術装置36を提供する。このプロセッサは、レジスタファイル2′と、データ入力バス6′と、データ出力バス14′と、コントローラ8′も含むが、制御13aおよび13bがそれぞれコントローラ8′から各ALU34および36に提供される。
【0022】
図4を説明する。図4は図3のALU34および36をより詳細に示す。ALU34および36には、それぞれ、特殊レジスタ16′aおよび16′bと、コントローラ20′aおよび20′bとが含まれている。ALU34および36には、それぞれ、サブALU18′aおよび18′bが含まれている。したがって、この実施形態では、特殊レジスタ16′aおよび16′bと、算術および制御回路は、当然、共有されない。サブALU18′aのうちの1つ以上のサブALU18′aは、協働して、シフト左/右とXORシフトの機能を実行し、サブALU18′bのうちの1つ以上のサブALU18′bは、協働し、任意選択で、桁上げ保存技術または桁上げ伝搬(carry propagation)を使用して、整数加算および整数減算の機能を実行する。
【0023】
図2を説明する。サブALU18は、特殊レジスタ16から供給されたオペランドに対して、次の論理機能、すなわち、XORと、シフト左/右と、XORシフトと、整数加算と、整数減算を実行する。これらの機能は、1つのサブALU18か、マルチプル・サブALUに含めることができる。マルチプル・サブALU18を設けることにより、当該プロセッサは複数の演算(例えば、有限体反転)を同時にパフォームすることができる。
【0024】
図5を説明する。図5は図2のALU4のビットスライスを詳細に示す。図5aの41は、当該ビットスライスを示す。次の考察では、ビットスライス41と関係付けをしたロジック回路と関連して、各特殊レジスタのセルを相互接続する、と言う。ビットスライスに含まれたロジック回路は、一般的に、図2に示すようなサブALU18のうちの1つで表される。ビットスライスの構成は、Nビットレジスタに対しては、N回繰り返えすことができる。さらに、明確にするため、Nをレジスタ内のセル数と定義し、レジスタ内の個別のセルを例えばAiという。ここで、0≦i≦N−1であり、AN−1は特殊レジスタの最も右にあるセルである。レジスタの内容は小文字で参照され、例えば、長さnのビットベクトルAは、a0をLSBとして、ビットにa0,…an−1と番号が付けられることになる。ここで、特殊レジスタには特定の名前が付けられているが、これらのレジスタは、後程説明するが、実行されている算術演算に依存して異なる機能をとることができる、ことに留意されたい。
【0025】
図5の特殊レジスタ16に含まれるレジスタとしては、乗算演算中に、例えば、被乗数および乗数を個々に保持するための一対のオペランドレジスタA42およびB44と、累算器レジスタC46と、モジュラスレジスタM48と、桁上げ拡張(carry extension)レジスタCext50(整数算術で使用される)とがある。
【0026】
これらのレジスタは、その中にロードされたビットベクトルの個々の2進数を保持するため、N個のセルを有する。これらのレジスタはシフトレジスタであるのが好ましい。図2に示すサブALU18は、後程説明するが、図5のブロック52の回路により実装することができる。
【0027】
乗算
ALU4のオペレーションは、有限体乗算のような具体的な算術演算を参照することにより最も良く理解することができる。ここで、2つの元aおよびbの積Cを考察することにする。ここで、aおよびbはビットベクトルであり、bは多項式表現でb=(b0,…bn-1)の形態となり、aは多項式表現でa=(a0,…an-1)の形態となる。モジュラスビットベクトルmは、m=(m0,…mn)の形態を有する。モジュラスレジスタは、モジュラスを表すのに必要なビット数より1ビット多い、ことに留意されたい。あるいはまた、最上位ビットmnが1であるので、この最上位ビットを暗黙に定義することができ、mを(m0,…mn-1)で表すこともできる。F2nにおいて、乗算は、次のような疑似コードにより明確に記述される一連のステップとして実装することができる。
【0028】
C=0{C-1=0}
For ifrom n-1 to 0 do
For jfrom n-1 to 0 do {cj=ci-1+bn-1ai+cn-1mj}
この乗算を実行する際には、MSB(most significant bit)からLSB(least significant bit)の順に、被乗数と乗数のbiの各ビットとの部分積を形成する。その前の部分積のMSBがセットされた場合には、部分積はモジュラスによって簡約(reduce)される。
【0029】
乗算の実装は、1×N乗算器を逐次使用することによって行なうことができ、この場合、上記疑似コードの内側の「for」ループはパラレルに実行される。各セルがそれぞれ2進数miの1つを含むように、モジュラスレジスタMには、MSBmnを剥ぎ取ったモジュラスビットベクトルmがロードされる。図示の実装では、ビットmiは、ベクトルのMSBを最も左側のビットとして、左から右に配列されている。すなわち、セルMn-1はビットmn-1を含む。N≠nである場合、スティルビット(still bit)Mn-1はMN-1にストアされる、すなわち、データは左寄せされる。各セルが個々に2進数aiまたはbiの1つを含むように、シフトレジスタAおよびBには、有限体元(finitefield element)ビットベクトルaおよびbがそれぞれロードされる。有限体元aおよびbは、左寄せされ、各レジスタにストアされ、乗数レジスタbのMSBが常に左境界セルのビット、すなわち(an-1,an-2,…a0)および(bn-1,bn-2,…b0)で利用可能になっている。ベクトルaおよびbの長さがレジスタの長さより短い場合には、残りのセルには0がパディングされる。以上、図2に示すコントローラ20によって一般的に実行される。逐次乗算(被乗数を逐次小さくするなど)の他の構成も可能であるが、そのような構成では、体のサイズに柔軟性を持たせることができないし、同様に、制御ビット位置を固定することができない。この乗算アルゴリズムを対応して変化させれば、LSBからMSBへのビット順序づけも可能である。
【0030】
ここでは、ALU4のビットスライス41は、有限体において乗算を実装するために、記載されている。ビットスライス41は第1および第2のコントローラブル加算器54および56を含み、第1および第2のコントローラブル加算器54および56は、それぞれ、XOR機能を有する。レジスタBの最上位のセルBN-1は、加算制御信号bn-157を第1の加算器54に供給する。第1の加算器54への入力58および60は、レジスタセルAiおよびアキュムレータセルCiから得られる。第1の加算器54からの出力62は、モジュラスレジスタセルMiからの入力64とともに、第2の加算器56の入力に接続されている。加算器54は出力62=入力60+(入力58および制御57)という演算をパフォームする。この演算を図5(b)に詳細に示す。
【0031】
ついで、第2の加算器56からの出力はアキュムレータセルCiに接続されている。第2の加算制御信号66はアキュムレータC46の最上位のセルCN−1から得られる。アキュムレータCの最上位のビットCN−1がセットされたとき、当然に、モジュラスベクトルmによるアキュムレータCでの部分積のモジュラ簡約が、第2の加算制御信号66により実装される。図5(c)に詳細に示すように、加算器56は、出力=入力64+(入力62および制御66)という演算を行う。Bレジスタはクロックシフトレジスタである。コントローラ20から供給することができるクロック信号CLK1 68は、部分積が計算される度に、このレジスタの内容を左にシフトさせる。
【0032】
図6を説明する。図6は図5のビットスライス41の詳細な回路実装を示す。この回路実装は有限体乗算を行なうためのものであって、参照番号70で示す。図6のビットスライスi、70を説明する。図6では、説明のために、ビットスライスは3つしか示していない。セルaiは、ANDゲート72により、加算制御信号bn−1とAND演算される。ANDゲート72の出力74は、アキュムレータCの隣接するセルCi−1からの入力78とともに、XORゲート76の入力に接続される。よって、項「ci-1+bn-1ai」の計算が実装される。項「cn−1mj」は、ANDゲートを利用して、信号cn80とmi82をAND演算することにより、実装される。ANDゲートの出力86は、XORゲート76の出力88とともに、XORゲート84の入力に接続される。XORゲート84の出力90は、セルCi92に接続される。よって、式「cj=ci-1+bn-1ai+cn−1mj」が実装される。この汎用の逐次乗算器により、2つのnビット有限体元の積がnクロックサイクルで生成されることになる。同期カウンタは、コントローラ20に含めることができるものであって、繰返し回数の制御を行うものが好ましい。以上の記述は、加算器54が整数加算器のビットスライスであって、加算器56が整数減算器のビットスライスであるときに、整数モジュラ乗算に適用される。このことは後程説明する。
【0033】
加算
有限体F2n中の乗算に関連して、回路を説明したが、その他の計算オペレーションも容易にパフォームすることができる。有限体加算は桁上げが生じないので、この点で、整数算術より有利である。有限体サム(sum)の計算では、有限体中の2つの元aおよびbの加算が、単に、aとbのXORであるので、XORゲートを注目レジスタの各セルに導入するだけでよい。したがって、図5に戻ると、入力100はセルBiから第1の加算器54に供給され、第2の加算器56は簡約に使用される。ついで、加算器54からの出力はセルCiに直接書き込まれる。オペランドがレジスタaおよびbに移動された後で、単一のクロックサイクルで、加算をパフォームすることができる。その加算をALUでパフォームするのは可能であり、その結果をレジスタファイルの汎用レジスタにライトバックするのも可能である。整数加算では、加算器54は整数加算器のビットスライスであり、整数加算結果に基づきモジュラオーバフローか否かを検査しなければならない。この状態が生じた場合には、整数減算器のビットスライスである加算器56は、その結果を簡約するのに用いられる。
【0034】
二乗
ある数を二乗するには、異なる2つの数の乗算と同じ時間でパフォームすることができる。多項式基底における二乗は、特定の既約(irreducible)が二乗展開と明示的に結線された(hardwired)場合は、単一のクロックサイクルでパフォームすることができる。あるいはまた、同じ入力を乗算して二乗をパフォームすることができる。
【0035】
反転
F2nの有限体元の反転は、ユークリッドの互除法を使用してパフォームすることができ、また、追加のコントロールロジックを有する4つの特殊レジスタを利用してパフォームすることができる。この反転は、シフトが加算と同時に行われる場合(これは加算の出力を次のレジスタセルに結線することによって容易に実装される)には、2nサイクルで完了する。
【0036】
この反転で使用されるレジスタは、A、B、M、およびCである。便宜上、これらのレジスタを概略的に図7に示す。MにはUL、CにはLL、AにはUR、BにはLRとラベル付けがしてある。再度、この反転を、ビットスライス110に関連して記述することができる。
【0037】
反転のオペランドは、一般に、反転する元gと、既約多項式fまたはモジュラスm(後述)と、ビットベクトル「0」と、ビットベクトル「1」である。ULレジスタ116にはfまたはmがロードされる。LLレジスタ118にはgがロードされ、URレジスタ112には「0」が、LRレジスタ114には「1」がロードされる。URレジスタ112およびLRレジスタ114では、セルURiおよびLRiはXORゲート120でXOR演算されて、出力122が生じる。制御信号124は、可能な3つの入力のうち1つがセルURiおよびULiに書き込まれるかどうかを決定する。入力は隣接するセルまたは出力122からの左または右シフトである。制御信号Bは後程記載する状態表によって決定される。ULレジスタ116またはLLレジスタ118では、セルULiおよびLLiはXORゲート126でXOR演算されて、出力128が生じる。制御信号130は、可能な2つの入力のうち1つがセルULiおよびLLiに書き込まれるかどうかを決定する。入力は隣接するセル(i−1)または出力128からの左シフトである。この場合も、制御信号130は後程記載する状態表によって決定される。
【0038】
制御変数をULレジスタの長さkuと、LLレジスタの長さklと仮定したとすると、Δ=ku−klとなる。値klおよびkuは、好ましくは、同期ダウンカウンタで実装され、Δは好ましくは同期アップ/ダウンカウンタで実装される。カウンタレジスタku、kl、およびΔも用意されている。ULおよびLLレジスタは左シフトレジスタであり、URおよびLRレジスタは、ともに、左および右シフトレジスタである。
【0039】
さらに、カウンタレジスタでは、Δには0がロードされ、kuはnに初期化される。制御ビットラッチは、「1」がアップカウントを示し、「0」がダウンカウントを示すトグル機能を有する。U/D制御は、最初、「1」にセットされる。この場合、ALUで反転を実行する制御装置に含まれるシーケンサは、次のような出力を有する。
【0040】
Deckl デクリメントkl kl
Decku デクリメントku ku
decDelta デクリメントΔ
incDelta インクリメントΔ
toggle トグルアップ/ダウン
lsUL 左シフト左上レジスタ
lsLL 左シフト左下レジスタ
lsUR 左シフト右上レジスタ
lsLR 左シフト右下レジスタ
rsUR 右シフト右上レジスタ
rsLR 右シフト左下レジスタ
outLR 出力右下レジスタ
outUR 出力右上レジスタ
dadd-lsLL ダウンXORおよび左シフト左下レジスタ
uadd-lsUL アップXORおよび左シフト左上レジスタ
インバータのオペレーションの概要を表す状態表は次のようになっており、MuおよびClはそれぞれレジスタULおよびLLの上位ビットであり、MuおよびClは現在の状態を決定する。レジスタおよびカウンタ上でアクションがパフォームされると、これによりインバータは新しい状態となる。このプロセスは、kuまたはklが0になるまで繰り返され、右レジスタRLまたはRUの一方はg−1を含み、もう一方はモジュラス自体を含むことになり、これは、後続の乗算または反転演算で使用するために、レジスタmにリストア(restore)することができる。
【0041】
【表1】
【0042】
整数算術
多項式表現と整数表現は非常に良く似ていることから、ALUでハードウェアを共有することが可能でなる。加算では、整数算術は、桁上げが必要であることから、複雑になるだけである。ALUの整数算術演算は、例えば乗算演算を利用すれば、最もよく説明することができる。
【0043】
疑似コードで表した次の一連のステップを参照して、Zにおける乗算を説明する。前述したのと同様に、aおよびbは乗算されるビットベクトルであり、cはaとbの積であり、C=(c0,c1,…,cn−1)である。
【0044】
C=0
M=0
For ifrom 0 to n-1 do
Cext←C
For jfrom 0 to n-1 do
cj=(bi(aj)+mj+cj)mod2
mj+1=(bj(aj)+mj+cj)/2
ここで、
Cext←C:For j from n-1 to 0 do
cj−1=cj
cj−1ext=cjext
となる。
【0045】
同様に、このようにすれば、XORを減算器で置換し、しかも、mレジスタに素数をロードした場合には、整数 modulo p(integers modulo p)を反転させることができる。改善策であるが、桁上げ保存方法を採用することにより、桁上げ伝搬を遅らせることができる。
【0046】
図6の実施形態で説明した有限体乗算の場合のビットスライス70を修正して、整数表現に対する乗算を含むようにすることができる、ことを観測することができる。注意すべきことであるが、整数乗算では、レジスタには、ビットベクトルがF2mとは逆順でロードされる、すなわち、レジスタの最左端のセルがビットベクトルのLSBを含む。整数乗算では、逐次(successive)部分積の間で、桁上げを実装する必要があり、さらに、部分積がモジュラスで簡約されていないので、逐次部分積の加算による桁上げを供給しなければならない。そこで、アキュムレータレジスタCが拡張してあり、図5に示すように、新しいレジスタCext49が設けてある。各部分積が形成される前に、アキュムレータCの最下位ビット(セルCM)を拡張レジスタCextの最上位ビット(セルCextl)にシフトし、ついで、アキュムレータCおよびCextは両方ともLSBに向けて1ビットだけシフトされる。最終結果はCおよびCextで獲得され、Cextには、当該積の低位ビットが含まれる。このことは、上記オペレーションCext←Cで表される。
【0047】
図8を説明する。図8はビットスライス170を示す。ビットスライス170は図6のビットスライス70に類似している。したがって、同様のコンポーネントは、識別するために、図6の説明で使用した参照番号を100番台にして使用することにする。つまり、参照番号70は170となる。図8の編成が図6と異なる点は、モジュラスレジスタmが桁上げレジスタとして使用され、モード選択信号Z/F2m171が提供されるという、2つの重要な点である。
【0048】
ここで、項cj=cj−1+biai+cn−1mjは、既に説明した有限体乗算でそうであったように、制御信号bmとレジスタセルAiの内容との積で実装され、この積はANDゲート172で実装される。ANDゲート172の出力174はレジスタセルcj−1の内容とXORゲート176によりXOR演算され、参照番号158で示す出力項cj−1+bi(ai)が生成される。この出力信号は、ANDゲート160から得られた参照番号185で示す項cn−1(mj)と、XORゲート184を使用してXOR演算され、項cjが生成される。さらに、積’biai,cj−1’162と、積(cj−1+biai,mj)163とのサム(sum)から、桁上げ項miが生成され、セルmi182に書き込まれる。積の項162および163はANDゲート164および166によってそれぞれ実装される。積の項162と163のサムはORゲート167によって実装される。
【0049】
モード選択信号Z171は、桁上げ入力信号cn180とOR演算され、クロック信号169とAND演算168される。したがって、Z=0をセットすることにより、有限体算術が実装され、Z=1をセットすることにより、整数算術が実装される。
【0050】
図8は、図6で既に説明した有限体乗算を、組合せ有限体/整数乗算器に変換するのに必要な修正を示す。乗算の低位のビットを集めるため、出力レジスタCが拡張されることに留意されたい。Zにおける計算はモジュラスなしでパフォームされるので、モジュラスレジスタMは、部分積を簡約するためではなく、桁上げのホルダとして使用される。制御信号Z/F2M171は、ALUのための整数乗算回路をイネーブルにする。
【0051】
最終桁上げ伝搬(finalcarry propagation)は、マンチェスターキャリーチェーン(Manchester carry chain)によって提供することができ、レジスタ長が長いことから、1レイヤまたは2レイヤの桁上げスキップ機構によって拡張可能である。さらにnサイクルだけクロックすることも可能であり、桁上げ保存加算器が桁上げを完全にマージすることが可能である。
【0052】
1つの入力はその入力において条件付きで補数をとることができ、しかも、加算器のLSBで「ホット」キャリインが行われる場合には、2の補数の減算は、桁上げ伝搬加算器で実装することができる。
【0053】
乗算時のリップル桁上げは、桁上げスキップにより改良したとしても、許容できなくなるが、この桁上げ伝搬は、桁上げ保存加算器を使用すれば、ほぼ完全に除去することができる。このようにすると、部分積が冗長表現されるが、乗算が完了した後は解決される。
【0054】
さらに別の実施形態では、ALU4は、図9に示すように、計算速度が線形に増加するように修正することができる。これは、特殊レジスタ16′からの連続ビットを一度に処理し、修正したサブALU190で示す追加回路を実装し、図9に示すようにインクリメント加算を処理することによって達成される。複数のビットを処理すると、速度が線形増加することになる。例えば、計算が順次にパフォームされる場合は、その順序中の2つ以上のステップを同時に実行することができる。この場合、コントローラ20′は特殊レジスタ16′からの2ビット以上の制御ビット194を処理することになり、制御装置の入力192は図9にマルチビットラインとして示す。
【0055】
有限体に対して一度に2ビット実行する乗算器(two-bit at a time multiplier)の回路図を図10に示す。この実装では、ビットスライス200はその数がXORゲート210の数の2倍であり、当該加算の2つの項を実装している。この乗算器は乗数から2ビットをとり、被乗数aiおよびai−1を2回だけ隣接してシフトすることにより加算し、モジュラスMiおよびMi−1を2回だけ隣接してシフトすることにより簡約する。このようにすると、モジュラス簡約(modulusreduction)で連続する2つの部分積が同時に生成され、したがって、全計算時間を半分にすることができるという効果がある。
【0056】
特殊レジスタの上位(top)ビットがコントローラ20または20′用の制御ビットとして使用される、ことに留意されたい。このようにすると、オペランドがレジスタにロードされると、左揃えされ、したがって、制御が常に固定ビット位置から得られるという利点がある。しかし、その他のビット例えば下位(bottom)ビットを制御ビットとして使用することもできる。しかし、このようにすると、ハードウェアが複雑になることもある。
【0057】
この場合も、Booth(または、修正Booth)記録などのオプションが可能となるので、マルチビット演算の計算速度がさらに線形的に増加する。
【0058】
このようなALUは汎用レジスタに対して簡単な算術演算をパフォームする能力を有するものと仮定している。他の例のALUは全ての算術をALU内部レジスタに対してパフォームするものであり、汎用レジスタはこれらのレジスタとの間でリード(read)およびライト(write)のみを行う能力を有する。
【0059】
このようなALUの機能には、リップル桁上げや、桁上げスキップ加算と桁上げ完了の組合せなど、何らかの桁上げ伝搬方法を利用した、整数加算が含まれる。
【0060】
このようなALUは、有限体加算で使用される単純なXOR機能も提供する。整数および有限体表現(ビット順序)が逆であるので、体から整数への変換と、整数から体への変換に使用されるビット逆転(bit reversal)機構を設けると有利である。2つのシフトレジスタの頂部どうしを接続することにより、nクロックサイクルでこの機能が提供される。ここで、nは算術オペランドの長さである。
【0061】
本明細書で与えた一般的なアーキテクチャは、ECとモジュラ指数算術との間でレジスタファイルを共用するだけでなく、共用制御レジスタに加えて、特殊レジスタおよび組み合わせロジックも共用する可能性がある。
【0062】
以上、本発明の具体的な実施形態と具体的な用途について説明したが、種々の修正は、本発明の範囲を逸脱しない限り、当業者にとって可能である。例えば、記載の実施形態では、特定のロジック回路について言及したが、例えば、ド・モルガンの法則を使用して等価な回路を使用することもでき、反転ロジック(inverted logic)が実装された場合には、相補形回路を使用することもできる、ことに留意されたい。さらに、レジスタおよびビットベクトルのオリエンテーション、すなわち、左、右、上、下には、これらの方向の他の編成も含まれる。
【0063】
本明細書で採用した項および式は、これらのものに限定されるものではなく、例として使用したものであり、これらの項および式を使用したことに、図示および記述した機構またはその一部分の均等物を排除する意図はなく、本発明の範囲内で種々の修正が可能であることを認識されたい。
【符号の説明】
【0064】
1 算術プロセッサ
2 レジスタファイル
4 有限体/整数エンジン
8 コントローラ
【技術分野】
【0001】
本発明は、有限体および整数の算術をパフォームする方法および装置に関する。
【背景技術】
【0002】
有限体(finitefield)に対するEC(Elliptic Curve)暗号法では、加算と、乗算と、二乗と、反転(inversion)の算術演算が必要となる。さらに、体(field)の標数が2でない場合には、減算も必要になる。例えば符号定数の計算では、モジュラ算術演算も必要になるが、このような演算は有限体の演算ほど必要にならない。例えばEC暗号法では、モジュラおよび有限体演算、加算、減算、乗算、反転の完全な補集合(fullcomplement)が必要になる。
【発明の概要】
【発明が解決しようとする課題】
【0003】
暗号法のための体のサイズは比較的大きくなる傾向があり、算術演算を許容時間内で実行するために高速の専用プロセッサが必要になる。したがって、高速モジュラ算術プロセッサか、F2nの算術演算をパフォームする専用プロセッサのいずれかが、多数インプリメントされている。特殊目的または専用プロセッサを使用することは、当技術分野では、周知のことである。こうしたプロセッサは一般にコプロセッサと呼ばれ、通常は、ホスト計算システムで利用されており、従って、命令および制御はメインプロセッサからコプロセッサに提供されている。
【0004】
なかでもRSAが暗号化システムとして慣用されていたが、優秀かつよりセキュアなEC暗号法が登場したため、モジュラ冪法(modular exponentiation)専用のプロセッサの必要性は、薄らいで来ている。ユーザはRSA暗号法からEC暗号法に移行しているものの、性能およびコストをほとんどあるいは全く犠牲にすることなくこれらの両方の演算をサポートする算術プロセッサに対するニーズがある。
【0005】
本発明の第1の目的は、有限体算術と整数算術を組み合わせ、EC暗号法に必要な演算と、例えばRSA暗号法で必要なモジュラ冪法とを提供するプロセッサを提供することにある。
【0006】
本発明の第2の目的は、異なる体またはレジスタサイズにスケーリングすることができる算術プロセッサ設計を提供することにある。
【0007】
本発明の第3の目的は、異なる体サイズで使用することができる算術プロセッサを提供することにある。
【0008】
本発明の第4の目的は、マルチシーケンス中の複数のステップを同時にパフォームすることによってマルチシーケンス演算実行を高速化するためにスケーリングすることができる算術プロセッサを提供することにある。
【課題を解決するための手段】
【0009】
本発明によれば、
(a)一群の関連する算術演算をそれぞれ実行する複数の算術回路を有する論理演算装置であって、オペランドデータを受信するオペランド入力データバスと、前記算術演算の結果を戻す結果データ出力バスとを有する論理演算装置と、
(b)前記オペランドデータバスおよび前記結果データバスに結合されたレジスタファイルと、
(c)前記ALUおよび前記レジスタファイルに結合された制御装置であって、算術演算を要求するモード制御信号に応答して前記複数の算術回路の1つを選択し、かつ前記レジスタファイルと前記ALUの間でデータアクセスを制御することにより、前記レジスタファイルが前記算術回路によって共用されるようにする制御装置とを含む算術プロセッサが提供される。
【0010】
本発明によれば、有限体回路および整数算術回路を含み、かつ汎用レジスタおよび専用レジスタを備えたプロセッサが提供される。
【0011】
本発明によれば、有限体算術および整数算術を両方とも実行し、専用レジスタおよび汎用レジスタの両方ならびに算術回路を共用する算術プロセッサが提供される。この目的のために、多項式基底が整数の標準的な基数累乗基底(standard radix-power basis)と同様であるので、有限体ハードウェアについて多項式基底を想定する。
【発明の効果】
【0012】
本発明によれば、有限体算術と整数算術を組み合わせ、EC暗号法に必要な演算と、例えばRSA暗号法で必要なモジュラ冪法とを提供するプロセッサを提供できる。
【0013】
本発明によれば、異なる体またはレジスタサイズにスケーリングすることができる算術プロセッサ設計を提供できる。
【0014】
本発明によれば、異なる体サイズで使用することができる算術プロセッサを提供できる。
【0015】
本発明によれば、マルチシーケンス中の複数のステップを同時にパフォームすることによってマルチシーケンス演算実行を高速化するためにスケーリングすることができる算術プロセッサを提供できる。
【図面の簡単な説明】
【0016】
【図1】有限体算術および整数算術をパフォームする算術プロセッサアーキテクチャのブロック図である。
【図2】図1に示すALU(arithmetic logic unit)の概略ブロック図である。
【図3】有限体算術および整数算術をパフォームする算術プロセッサアーキテクチャの代替実施形態のブロック図である。
【図4】図3に示すALUの概略ブロック図である。
【図5】(a)、(b)、および(c)は図2に示すALUのビットスライスの実施形態のブロック図である。
【図6】図5に示すビットスライスの有限体乗算器の回路図である。
【図7】算術インバータのブロック図である。
【図8】組み合わせた有限体/整数乗算器の回路図である。
【図9】図1のマルチビットALUの実施形態を示す概略ブロック図である。
【図10】図9のマルチビット有限体乗算器の回路図である。
【発明を実施するための形態】
【0017】
図1を説明する。算術プロセッサの一実施形態は一般的に参照番号1で示してある。当然のことであるが、この算術プロセッサは総合計算システム中の汎用プロセッサとともに使用することができ、データはこの計算システムと算術プロセッサの間で交換される。算術プロセッサには、レジスタファイルと呼ばれる一群の汎用レジスタ(GP)2が含まれている。レジスタファイルはECの点加算(point addition)、点倍加(point doubling)などのための中間記憶域として使用することができるものである。一群の汎用レジスタ2はデータ入力またはオペランドバス6を介してALU(arithmeticlogic unit)4と通信を行なっている。ALU4にはシェアード(shared)有限体および整数算術回路が含まれている。ALU4による計算の結果をレジスタファイル2に書き込むため、データ出力または結果バス14がALU4とレジスタファイル2の間に設けてある。
【0018】
ALU4による計算オペレーションは、算術プロセッサ1のコントローラ8に駐在するマイクロプログラム化命令により制御されている。モード選択コントロール10は有限体計算またはモジュラ整数計算を選択するために用意してある。体サイズ制御12も、ALU4を初期設定して、種々のオペランドベクトルサイズに適応させるために用意してある。そこで、コントローラ8はなかんずく次のタスク、すなわち、適正な算術モードおよび演算をALU4に提供するタスクと、レジスタファイル2とALU4の間のデータアクセスをコーディネートするタスクと、使用される適正な体のサイズをALU4に提供するタスクとをパフォームする。
【0019】
汎用レジスタは、少なくとも予想可能な最大のF2mEC暗号システムをハンドルするだけのビット幅を有するように選択される。これら汎用レジスタは整数モジュラ算術で必要なビット長をサポートするために、組み合わせることができる。例えば、レジスタファイル2の単一レジスタのビット幅が512ビット幅である場合に、単一の2048ビットRSA量の記憶域を提供するため、4つのレジスタを使用することができる。これら汎用レジスタには、データのブロックがロードされ、例えば、2048ビットの計算をブロック単位で行い、ついで、再組み立てして、全幅結果(full width result)を得ることができる。典型的には、算術プロセッサ1は既存のホストコンピュータシステムで利用され、コントローラ8はこのホストコンピュータシステムから制御信号を受信し、適正なホストバスインタフェースを介して、ホストデータバスにデータを通信する。このようなインタフェースの詳細は当業者とって周知のことであり、説明は省略する。
【0020】
図2を説明する。ALU4には、幾つかの特殊レジスタ16と、複数のサブALU18と、出力データバス30と、コントローラ20とが含まれている。複数のサブALU18には組み合わせロジックおよび算術回路が含まれていて、組み合わせロジックおよび算術回路は、特殊レジスタからデータバス28を介して各サブALUに入力された1つ以上のビットをオペレートする。出力データバス30はサブALU18と特殊レジスタとの間に設けてある。コントローラ20は、なかんずく、次のタスク、すなわち、計算オペレーション中の各ステップを通してALU4を順序づけるタスクと、特殊レジスタ16からの制御ビットを監視するタスクと、使用してある体のサイズを決定するためにカウンタを制御レジスタ22に実装するとともに、プロセッサハードウェアを設計し直さずに、プロセッサ1が異なる体サイズに対して使用することができる機構を実装するタスクとをパフォームする。これらの機能を提供するため、特殊レジスタ16の制御ビット26は制御ビット入力24としてコントローラ20に供給される。特殊レジスタ16は、全て、個別にアドレス可能になっている。コントローラ20はレジスタファイルから入力バス6を介してサブALU18または特殊レジスタ16に入力されたデータも制御する。これらサブALUは、単一のビットにオペレートすることができ、複数のビットに一度にオペレートすることができる。これらのコンポーネントは後程より詳細に記述する。
【0021】
図3を説明する。算術プロセッサの代替例は参照番号1′で示してある。本実施形態では、別個の有限体装置34および整数モジュラ算術装置36を提供する。このプロセッサは、レジスタファイル2′と、データ入力バス6′と、データ出力バス14′と、コントローラ8′も含むが、制御13aおよび13bがそれぞれコントローラ8′から各ALU34および36に提供される。
【0022】
図4を説明する。図4は図3のALU34および36をより詳細に示す。ALU34および36には、それぞれ、特殊レジスタ16′aおよび16′bと、コントローラ20′aおよび20′bとが含まれている。ALU34および36には、それぞれ、サブALU18′aおよび18′bが含まれている。したがって、この実施形態では、特殊レジスタ16′aおよび16′bと、算術および制御回路は、当然、共有されない。サブALU18′aのうちの1つ以上のサブALU18′aは、協働して、シフト左/右とXORシフトの機能を実行し、サブALU18′bのうちの1つ以上のサブALU18′bは、協働し、任意選択で、桁上げ保存技術または桁上げ伝搬(carry propagation)を使用して、整数加算および整数減算の機能を実行する。
【0023】
図2を説明する。サブALU18は、特殊レジスタ16から供給されたオペランドに対して、次の論理機能、すなわち、XORと、シフト左/右と、XORシフトと、整数加算と、整数減算を実行する。これらの機能は、1つのサブALU18か、マルチプル・サブALUに含めることができる。マルチプル・サブALU18を設けることにより、当該プロセッサは複数の演算(例えば、有限体反転)を同時にパフォームすることができる。
【0024】
図5を説明する。図5は図2のALU4のビットスライスを詳細に示す。図5aの41は、当該ビットスライスを示す。次の考察では、ビットスライス41と関係付けをしたロジック回路と関連して、各特殊レジスタのセルを相互接続する、と言う。ビットスライスに含まれたロジック回路は、一般的に、図2に示すようなサブALU18のうちの1つで表される。ビットスライスの構成は、Nビットレジスタに対しては、N回繰り返えすことができる。さらに、明確にするため、Nをレジスタ内のセル数と定義し、レジスタ内の個別のセルを例えばAiという。ここで、0≦i≦N−1であり、AN−1は特殊レジスタの最も右にあるセルである。レジスタの内容は小文字で参照され、例えば、長さnのビットベクトルAは、a0をLSBとして、ビットにa0,…an−1と番号が付けられることになる。ここで、特殊レジスタには特定の名前が付けられているが、これらのレジスタは、後程説明するが、実行されている算術演算に依存して異なる機能をとることができる、ことに留意されたい。
【0025】
図5の特殊レジスタ16に含まれるレジスタとしては、乗算演算中に、例えば、被乗数および乗数を個々に保持するための一対のオペランドレジスタA42およびB44と、累算器レジスタC46と、モジュラスレジスタM48と、桁上げ拡張(carry extension)レジスタCext50(整数算術で使用される)とがある。
【0026】
これらのレジスタは、その中にロードされたビットベクトルの個々の2進数を保持するため、N個のセルを有する。これらのレジスタはシフトレジスタであるのが好ましい。図2に示すサブALU18は、後程説明するが、図5のブロック52の回路により実装することができる。
【0027】
乗算
ALU4のオペレーションは、有限体乗算のような具体的な算術演算を参照することにより最も良く理解することができる。ここで、2つの元aおよびbの積Cを考察することにする。ここで、aおよびbはビットベクトルであり、bは多項式表現でb=(b0,…bn-1)の形態となり、aは多項式表現でa=(a0,…an-1)の形態となる。モジュラスビットベクトルmは、m=(m0,…mn)の形態を有する。モジュラスレジスタは、モジュラスを表すのに必要なビット数より1ビット多い、ことに留意されたい。あるいはまた、最上位ビットmnが1であるので、この最上位ビットを暗黙に定義することができ、mを(m0,…mn-1)で表すこともできる。F2nにおいて、乗算は、次のような疑似コードにより明確に記述される一連のステップとして実装することができる。
【0028】
C=0{C-1=0}
For ifrom n-1 to 0 do
For jfrom n-1 to 0 do {cj=ci-1+bn-1ai+cn-1mj}
この乗算を実行する際には、MSB(most significant bit)からLSB(least significant bit)の順に、被乗数と乗数のbiの各ビットとの部分積を形成する。その前の部分積のMSBがセットされた場合には、部分積はモジュラスによって簡約(reduce)される。
【0029】
乗算の実装は、1×N乗算器を逐次使用することによって行なうことができ、この場合、上記疑似コードの内側の「for」ループはパラレルに実行される。各セルがそれぞれ2進数miの1つを含むように、モジュラスレジスタMには、MSBmnを剥ぎ取ったモジュラスビットベクトルmがロードされる。図示の実装では、ビットmiは、ベクトルのMSBを最も左側のビットとして、左から右に配列されている。すなわち、セルMn-1はビットmn-1を含む。N≠nである場合、スティルビット(still bit)Mn-1はMN-1にストアされる、すなわち、データは左寄せされる。各セルが個々に2進数aiまたはbiの1つを含むように、シフトレジスタAおよびBには、有限体元(finitefield element)ビットベクトルaおよびbがそれぞれロードされる。有限体元aおよびbは、左寄せされ、各レジスタにストアされ、乗数レジスタbのMSBが常に左境界セルのビット、すなわち(an-1,an-2,…a0)および(bn-1,bn-2,…b0)で利用可能になっている。ベクトルaおよびbの長さがレジスタの長さより短い場合には、残りのセルには0がパディングされる。以上、図2に示すコントローラ20によって一般的に実行される。逐次乗算(被乗数を逐次小さくするなど)の他の構成も可能であるが、そのような構成では、体のサイズに柔軟性を持たせることができないし、同様に、制御ビット位置を固定することができない。この乗算アルゴリズムを対応して変化させれば、LSBからMSBへのビット順序づけも可能である。
【0030】
ここでは、ALU4のビットスライス41は、有限体において乗算を実装するために、記載されている。ビットスライス41は第1および第2のコントローラブル加算器54および56を含み、第1および第2のコントローラブル加算器54および56は、それぞれ、XOR機能を有する。レジスタBの最上位のセルBN-1は、加算制御信号bn-157を第1の加算器54に供給する。第1の加算器54への入力58および60は、レジスタセルAiおよびアキュムレータセルCiから得られる。第1の加算器54からの出力62は、モジュラスレジスタセルMiからの入力64とともに、第2の加算器56の入力に接続されている。加算器54は出力62=入力60+(入力58および制御57)という演算をパフォームする。この演算を図5(b)に詳細に示す。
【0031】
ついで、第2の加算器56からの出力はアキュムレータセルCiに接続されている。第2の加算制御信号66はアキュムレータC46の最上位のセルCN−1から得られる。アキュムレータCの最上位のビットCN−1がセットされたとき、当然に、モジュラスベクトルmによるアキュムレータCでの部分積のモジュラ簡約が、第2の加算制御信号66により実装される。図5(c)に詳細に示すように、加算器56は、出力=入力64+(入力62および制御66)という演算を行う。Bレジスタはクロックシフトレジスタである。コントローラ20から供給することができるクロック信号CLK1 68は、部分積が計算される度に、このレジスタの内容を左にシフトさせる。
【0032】
図6を説明する。図6は図5のビットスライス41の詳細な回路実装を示す。この回路実装は有限体乗算を行なうためのものであって、参照番号70で示す。図6のビットスライスi、70を説明する。図6では、説明のために、ビットスライスは3つしか示していない。セルaiは、ANDゲート72により、加算制御信号bn−1とAND演算される。ANDゲート72の出力74は、アキュムレータCの隣接するセルCi−1からの入力78とともに、XORゲート76の入力に接続される。よって、項「ci-1+bn-1ai」の計算が実装される。項「cn−1mj」は、ANDゲートを利用して、信号cn80とmi82をAND演算することにより、実装される。ANDゲートの出力86は、XORゲート76の出力88とともに、XORゲート84の入力に接続される。XORゲート84の出力90は、セルCi92に接続される。よって、式「cj=ci-1+bn-1ai+cn−1mj」が実装される。この汎用の逐次乗算器により、2つのnビット有限体元の積がnクロックサイクルで生成されることになる。同期カウンタは、コントローラ20に含めることができるものであって、繰返し回数の制御を行うものが好ましい。以上の記述は、加算器54が整数加算器のビットスライスであって、加算器56が整数減算器のビットスライスであるときに、整数モジュラ乗算に適用される。このことは後程説明する。
【0033】
加算
有限体F2n中の乗算に関連して、回路を説明したが、その他の計算オペレーションも容易にパフォームすることができる。有限体加算は桁上げが生じないので、この点で、整数算術より有利である。有限体サム(sum)の計算では、有限体中の2つの元aおよびbの加算が、単に、aとbのXORであるので、XORゲートを注目レジスタの各セルに導入するだけでよい。したがって、図5に戻ると、入力100はセルBiから第1の加算器54に供給され、第2の加算器56は簡約に使用される。ついで、加算器54からの出力はセルCiに直接書き込まれる。オペランドがレジスタaおよびbに移動された後で、単一のクロックサイクルで、加算をパフォームすることができる。その加算をALUでパフォームするのは可能であり、その結果をレジスタファイルの汎用レジスタにライトバックするのも可能である。整数加算では、加算器54は整数加算器のビットスライスであり、整数加算結果に基づきモジュラオーバフローか否かを検査しなければならない。この状態が生じた場合には、整数減算器のビットスライスである加算器56は、その結果を簡約するのに用いられる。
【0034】
二乗
ある数を二乗するには、異なる2つの数の乗算と同じ時間でパフォームすることができる。多項式基底における二乗は、特定の既約(irreducible)が二乗展開と明示的に結線された(hardwired)場合は、単一のクロックサイクルでパフォームすることができる。あるいはまた、同じ入力を乗算して二乗をパフォームすることができる。
【0035】
反転
F2nの有限体元の反転は、ユークリッドの互除法を使用してパフォームすることができ、また、追加のコントロールロジックを有する4つの特殊レジスタを利用してパフォームすることができる。この反転は、シフトが加算と同時に行われる場合(これは加算の出力を次のレジスタセルに結線することによって容易に実装される)には、2nサイクルで完了する。
【0036】
この反転で使用されるレジスタは、A、B、M、およびCである。便宜上、これらのレジスタを概略的に図7に示す。MにはUL、CにはLL、AにはUR、BにはLRとラベル付けがしてある。再度、この反転を、ビットスライス110に関連して記述することができる。
【0037】
反転のオペランドは、一般に、反転する元gと、既約多項式fまたはモジュラスm(後述)と、ビットベクトル「0」と、ビットベクトル「1」である。ULレジスタ116にはfまたはmがロードされる。LLレジスタ118にはgがロードされ、URレジスタ112には「0」が、LRレジスタ114には「1」がロードされる。URレジスタ112およびLRレジスタ114では、セルURiおよびLRiはXORゲート120でXOR演算されて、出力122が生じる。制御信号124は、可能な3つの入力のうち1つがセルURiおよびULiに書き込まれるかどうかを決定する。入力は隣接するセルまたは出力122からの左または右シフトである。制御信号Bは後程記載する状態表によって決定される。ULレジスタ116またはLLレジスタ118では、セルULiおよびLLiはXORゲート126でXOR演算されて、出力128が生じる。制御信号130は、可能な2つの入力のうち1つがセルULiおよびLLiに書き込まれるかどうかを決定する。入力は隣接するセル(i−1)または出力128からの左シフトである。この場合も、制御信号130は後程記載する状態表によって決定される。
【0038】
制御変数をULレジスタの長さkuと、LLレジスタの長さklと仮定したとすると、Δ=ku−klとなる。値klおよびkuは、好ましくは、同期ダウンカウンタで実装され、Δは好ましくは同期アップ/ダウンカウンタで実装される。カウンタレジスタku、kl、およびΔも用意されている。ULおよびLLレジスタは左シフトレジスタであり、URおよびLRレジスタは、ともに、左および右シフトレジスタである。
【0039】
さらに、カウンタレジスタでは、Δには0がロードされ、kuはnに初期化される。制御ビットラッチは、「1」がアップカウントを示し、「0」がダウンカウントを示すトグル機能を有する。U/D制御は、最初、「1」にセットされる。この場合、ALUで反転を実行する制御装置に含まれるシーケンサは、次のような出力を有する。
【0040】
Deckl デクリメントkl kl
Decku デクリメントku ku
decDelta デクリメントΔ
incDelta インクリメントΔ
toggle トグルアップ/ダウン
lsUL 左シフト左上レジスタ
lsLL 左シフト左下レジスタ
lsUR 左シフト右上レジスタ
lsLR 左シフト右下レジスタ
rsUR 右シフト右上レジスタ
rsLR 右シフト左下レジスタ
outLR 出力右下レジスタ
outUR 出力右上レジスタ
dadd-lsLL ダウンXORおよび左シフト左下レジスタ
uadd-lsUL アップXORおよび左シフト左上レジスタ
インバータのオペレーションの概要を表す状態表は次のようになっており、MuおよびClはそれぞれレジスタULおよびLLの上位ビットであり、MuおよびClは現在の状態を決定する。レジスタおよびカウンタ上でアクションがパフォームされると、これによりインバータは新しい状態となる。このプロセスは、kuまたはklが0になるまで繰り返され、右レジスタRLまたはRUの一方はg−1を含み、もう一方はモジュラス自体を含むことになり、これは、後続の乗算または反転演算で使用するために、レジスタmにリストア(restore)することができる。
【0041】
【表1】
【0042】
整数算術
多項式表現と整数表現は非常に良く似ていることから、ALUでハードウェアを共有することが可能でなる。加算では、整数算術は、桁上げが必要であることから、複雑になるだけである。ALUの整数算術演算は、例えば乗算演算を利用すれば、最もよく説明することができる。
【0043】
疑似コードで表した次の一連のステップを参照して、Zにおける乗算を説明する。前述したのと同様に、aおよびbは乗算されるビットベクトルであり、cはaとbの積であり、C=(c0,c1,…,cn−1)である。
【0044】
C=0
M=0
For ifrom 0 to n-1 do
Cext←C
For jfrom 0 to n-1 do
cj=(bi(aj)+mj+cj)mod2
mj+1=(bj(aj)+mj+cj)/2
ここで、
Cext←C:For j from n-1 to 0 do
cj−1=cj
cj−1ext=cjext
となる。
【0045】
同様に、このようにすれば、XORを減算器で置換し、しかも、mレジスタに素数をロードした場合には、整数 modulo p(integers modulo p)を反転させることができる。改善策であるが、桁上げ保存方法を採用することにより、桁上げ伝搬を遅らせることができる。
【0046】
図6の実施形態で説明した有限体乗算の場合のビットスライス70を修正して、整数表現に対する乗算を含むようにすることができる、ことを観測することができる。注意すべきことであるが、整数乗算では、レジスタには、ビットベクトルがF2mとは逆順でロードされる、すなわち、レジスタの最左端のセルがビットベクトルのLSBを含む。整数乗算では、逐次(successive)部分積の間で、桁上げを実装する必要があり、さらに、部分積がモジュラスで簡約されていないので、逐次部分積の加算による桁上げを供給しなければならない。そこで、アキュムレータレジスタCが拡張してあり、図5に示すように、新しいレジスタCext49が設けてある。各部分積が形成される前に、アキュムレータCの最下位ビット(セルCM)を拡張レジスタCextの最上位ビット(セルCextl)にシフトし、ついで、アキュムレータCおよびCextは両方ともLSBに向けて1ビットだけシフトされる。最終結果はCおよびCextで獲得され、Cextには、当該積の低位ビットが含まれる。このことは、上記オペレーションCext←Cで表される。
【0047】
図8を説明する。図8はビットスライス170を示す。ビットスライス170は図6のビットスライス70に類似している。したがって、同様のコンポーネントは、識別するために、図6の説明で使用した参照番号を100番台にして使用することにする。つまり、参照番号70は170となる。図8の編成が図6と異なる点は、モジュラスレジスタmが桁上げレジスタとして使用され、モード選択信号Z/F2m171が提供されるという、2つの重要な点である。
【0048】
ここで、項cj=cj−1+biai+cn−1mjは、既に説明した有限体乗算でそうであったように、制御信号bmとレジスタセルAiの内容との積で実装され、この積はANDゲート172で実装される。ANDゲート172の出力174はレジスタセルcj−1の内容とXORゲート176によりXOR演算され、参照番号158で示す出力項cj−1+bi(ai)が生成される。この出力信号は、ANDゲート160から得られた参照番号185で示す項cn−1(mj)と、XORゲート184を使用してXOR演算され、項cjが生成される。さらに、積’biai,cj−1’162と、積(cj−1+biai,mj)163とのサム(sum)から、桁上げ項miが生成され、セルmi182に書き込まれる。積の項162および163はANDゲート164および166によってそれぞれ実装される。積の項162と163のサムはORゲート167によって実装される。
【0049】
モード選択信号Z171は、桁上げ入力信号cn180とOR演算され、クロック信号169とAND演算168される。したがって、Z=0をセットすることにより、有限体算術が実装され、Z=1をセットすることにより、整数算術が実装される。
【0050】
図8は、図6で既に説明した有限体乗算を、組合せ有限体/整数乗算器に変換するのに必要な修正を示す。乗算の低位のビットを集めるため、出力レジスタCが拡張されることに留意されたい。Zにおける計算はモジュラスなしでパフォームされるので、モジュラスレジスタMは、部分積を簡約するためではなく、桁上げのホルダとして使用される。制御信号Z/F2M171は、ALUのための整数乗算回路をイネーブルにする。
【0051】
最終桁上げ伝搬(finalcarry propagation)は、マンチェスターキャリーチェーン(Manchester carry chain)によって提供することができ、レジスタ長が長いことから、1レイヤまたは2レイヤの桁上げスキップ機構によって拡張可能である。さらにnサイクルだけクロックすることも可能であり、桁上げ保存加算器が桁上げを完全にマージすることが可能である。
【0052】
1つの入力はその入力において条件付きで補数をとることができ、しかも、加算器のLSBで「ホット」キャリインが行われる場合には、2の補数の減算は、桁上げ伝搬加算器で実装することができる。
【0053】
乗算時のリップル桁上げは、桁上げスキップにより改良したとしても、許容できなくなるが、この桁上げ伝搬は、桁上げ保存加算器を使用すれば、ほぼ完全に除去することができる。このようにすると、部分積が冗長表現されるが、乗算が完了した後は解決される。
【0054】
さらに別の実施形態では、ALU4は、図9に示すように、計算速度が線形に増加するように修正することができる。これは、特殊レジスタ16′からの連続ビットを一度に処理し、修正したサブALU190で示す追加回路を実装し、図9に示すようにインクリメント加算を処理することによって達成される。複数のビットを処理すると、速度が線形増加することになる。例えば、計算が順次にパフォームされる場合は、その順序中の2つ以上のステップを同時に実行することができる。この場合、コントローラ20′は特殊レジスタ16′からの2ビット以上の制御ビット194を処理することになり、制御装置の入力192は図9にマルチビットラインとして示す。
【0055】
有限体に対して一度に2ビット実行する乗算器(two-bit at a time multiplier)の回路図を図10に示す。この実装では、ビットスライス200はその数がXORゲート210の数の2倍であり、当該加算の2つの項を実装している。この乗算器は乗数から2ビットをとり、被乗数aiおよびai−1を2回だけ隣接してシフトすることにより加算し、モジュラスMiおよびMi−1を2回だけ隣接してシフトすることにより簡約する。このようにすると、モジュラス簡約(modulusreduction)で連続する2つの部分積が同時に生成され、したがって、全計算時間を半分にすることができるという効果がある。
【0056】
特殊レジスタの上位(top)ビットがコントローラ20または20′用の制御ビットとして使用される、ことに留意されたい。このようにすると、オペランドがレジスタにロードされると、左揃えされ、したがって、制御が常に固定ビット位置から得られるという利点がある。しかし、その他のビット例えば下位(bottom)ビットを制御ビットとして使用することもできる。しかし、このようにすると、ハードウェアが複雑になることもある。
【0057】
この場合も、Booth(または、修正Booth)記録などのオプションが可能となるので、マルチビット演算の計算速度がさらに線形的に増加する。
【0058】
このようなALUは汎用レジスタに対して簡単な算術演算をパフォームする能力を有するものと仮定している。他の例のALUは全ての算術をALU内部レジスタに対してパフォームするものであり、汎用レジスタはこれらのレジスタとの間でリード(read)およびライト(write)のみを行う能力を有する。
【0059】
このようなALUの機能には、リップル桁上げや、桁上げスキップ加算と桁上げ完了の組合せなど、何らかの桁上げ伝搬方法を利用した、整数加算が含まれる。
【0060】
このようなALUは、有限体加算で使用される単純なXOR機能も提供する。整数および有限体表現(ビット順序)が逆であるので、体から整数への変換と、整数から体への変換に使用されるビット逆転(bit reversal)機構を設けると有利である。2つのシフトレジスタの頂部どうしを接続することにより、nクロックサイクルでこの機能が提供される。ここで、nは算術オペランドの長さである。
【0061】
本明細書で与えた一般的なアーキテクチャは、ECとモジュラ指数算術との間でレジスタファイルを共用するだけでなく、共用制御レジスタに加えて、特殊レジスタおよび組み合わせロジックも共用する可能性がある。
【0062】
以上、本発明の具体的な実施形態と具体的な用途について説明したが、種々の修正は、本発明の範囲を逸脱しない限り、当業者にとって可能である。例えば、記載の実施形態では、特定のロジック回路について言及したが、例えば、ド・モルガンの法則を使用して等価な回路を使用することもでき、反転ロジック(inverted logic)が実装された場合には、相補形回路を使用することもできる、ことに留意されたい。さらに、レジスタおよびビットベクトルのオリエンテーション、すなわち、左、右、上、下には、これらの方向の他の編成も含まれる。
【0063】
本明細書で採用した項および式は、これらのものに限定されるものではなく、例として使用したものであり、これらの項および式を使用したことに、図示および記述した機構またはその一部分の均等物を排除する意図はなく、本発明の範囲内で種々の修正が可能であることを認識されたい。
【符号の説明】
【0064】
1 算術プロセッサ
2 レジスタファイル
4 有限体/整数エンジン
8 コントローラ
【特許請求の範囲】
【請求項1】
明細書に記載の発明。
【請求項1】
明細書に記載の発明。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【公開番号】特開2011−134346(P2011−134346A)
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願番号】特願2011−49610(P2011−49610)
【出願日】平成23年3月7日(2011.3.7)
【分割の表示】特願2007−243107(P2007−243107)の分割
【原出願日】平成10年4月20日(1998.4.20)
【出願人】(397071791)サーティコム コーポレーション (38)
【Fターム(参考)】
【公開日】平成23年7月7日(2011.7.7)
【国際特許分類】
【出願日】平成23年3月7日(2011.3.7)
【分割の表示】特願2007−243107(P2007−243107)の分割
【原出願日】平成10年4月20日(1998.4.20)
【出願人】(397071791)サーティコム コーポレーション (38)
【Fターム(参考)】
[ Back to top ]