(57)【要約】【課題】  データの精度がどのようなものであっても同一の計算アルゴリズムを適用して演算できる任意精度演算器を比較的簡単な構成で実現する。【解決手段】  第１の任意精度数値Ｘおよび第２の任意精度数値Ｙのそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割して、Ｎビット長の第１の入力値および第２の入力値として順に出力する親プロセス部（２）を備える。供給された第１の入力値Ｘと第２の入力値Ｙとの演算を実施し、演算が完了するごとに親プロセス部（２）に次のＮビットの演算を要求するとともに、該演算で発生したキャリーCarryを次のＮビットの演算に加えるＮビット演算器（１）を備える。【選択図】    図１
2006139566.tif 000002
【特許請求の範囲】
【請求項１】
任意精度の演算をするために、第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割して、Ｎビット長の第１の入力値および第２の入力値として順に出力する親プロセス部と、
供給された該第１の入力値と該第２の入力値との演算を実施し、演算が完了するごとに該親プロセス部に次のＮビットの演算を要求するとともに、該演算で発生したキャリーを次のＮビットの演算に加えるＮビット演算器と、を備えることを特徴とする任意精度演算器。
【請求項２】
第１の任意精度数値が下位からＮ（Ｎは自然数）ビットずつに分割されて供給されたＮビット長の第１の入力値と、第２の任意精度数値が下位からＮビットずつに分割されて供給されたＮビット長の第２の入力値とを加算するＮビット全加算器と、
該Ｎビット全加算器による加算により発生したキャリーを、次のＮビットの演算における最下位ビットに加算可能に保持する保持回路と、を備えたことを特徴とする任意精度演算器。
【請求項３】
該第２の入力値の論理否定を生成する論理否定回路と、
加算か減算かを指示するオペレータが減算であることを示している場合に、論理否定された該第２の入力値を該Ｎビット全加算器に出力する選択回路とを備える請求項１又は２に記載の任意精度演算器。
【請求項４】
前記保持回路は、前記オペレータが減算であることを示している場合に、演算開始後の最初のＮビット演算時には値１を前記Ｎビット全加算器に供給し、それ以降のＮビット演算時には前回の加算で発生したキャリーを前記Ｎビット全加算器に供給する、請求項３に記載の任意精度演算器。
【請求項５】
前記第１の入力値と前記第２の入力値とを同一の入力線から入力して、それぞれラッチし、前記Ｎビット全加算器に供給するラッチ回路を備える、請求項４に記載の任意精度演算器。
【請求項６】
前記ラッチ回路は、前記オペレータをさらに入力し、該オペレータを前記選択回路に供給してから、前記第１の入力値と前記第２の入力値とをラッチする、請求項５に記載の任意精度演算器。
【請求項７】
任意精度の演算をするために、第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割する手段と、
分割された該第１の任意精度数値をＮビット長の第１の入力値として、該第２の任意精度数値をＮビット長の第２の入力値として順にＮビット演算器へと出力する手段と、を備えたことを特徴とする任意精度演算器。
【請求項８】
前記Ｎビット演算器から次のＮビットの演算が要求される毎に、次のＮビットの該第１の入力値と該第２の入力値とを出力する、請求項１又は７に記載の任意精度演算器。
【請求項９】
前記Ｎビット演算器に加算させるか減算させるかを示すオペレータを出力可能に構成されており、最上位のＮビットの演算が終了した場合に、該オペレータとして任意精度演算の終了を示す識別情報を出力する、請求項８に記載の任意精度演算器。
【請求項１０】
入出力情報の少なくとも１以上が２線エンコード方式により符号化されている、請求項１乃至９のいずれかに記載の任意精度演算器。
【請求項１１】
ハンドシェイク方式によって駆動される非同期式回路構成を備える、請求項１乃至１０のいずれかに記載の任意精度演算器。
【請求項１２】
グローバルクロックによって駆動される同期式回路構成を備える、請求項１乃至１０のいずれかに記載の任意精度演算器。
【請求項１３】
請求項１１または１２に記載の任意精度演算器を備える電子機器。
【請求項１４】
第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割するステップと、
分割された分割された該第１の任意精度数値をＮビット長の第１の入力値として、該第２の任意精度数値をＮビット長の第２の入力値として順に出力するステップと、
次のＮビットの演算が要求される毎に、次のＮビットの該第１の入力値および該第２の入力値の出力を許可するステップと、を備えることを特徴とする任意精度演算方法。
【請求項１５】
第１の任意精度数値が下位からＮ（Ｎは自然数）ビットずつに分割されて供給されたＮビット長の第１の入力値と、第２の任意精度数値が下位からＮビットずつに分割されて供給されたＮビット長の第２の入力値との演算を実施するステップと、
該演算が完了する毎に次のＮビットの演算を要求するステップと、
該演算で発生したキャリーを次のＮビットの演算に加えるステップと、を備えることを特徴とする任意精度演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は加減算を行う演算器に関し、特にコンパイラが取り扱える精度に制限されない任意精度の可変長データの演算に適した任意精度演算器に関する。
【背景技術】
【０００２】
従来、プロセッサ内部で加減算を行う演算器は、固定長の整数を取り扱うことを前提としていた。例えば、８ビットＣＰＵ（中央演算装置）には、算術四則演算用に８ビット固定長の全加算器や、アドレス生成に併用できるような１６ビット固定長の全加算器が用いられていた。
【０００３】
また、可変長データがソフトウェア記述により指定されている場合には、ソフトウェア言語のコンパイラが、固定長の全加算器に対する繰り返し演算で可変長データの演算を実現できるように命令セットを生成していた。
【０００４】
このようなコンパイラ処理によって、上記のようにハードウェアによって取り扱える語語長が規定された固定長の全加算器を用いていても、可変長データを取り扱う演算が実行できるように構成されていた。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、プログラミング言語毎に、取り扱うことのできるデータの精度（語長）が定められているため、取り扱える精度を超える演算は困難であった。可変長データが取り扱えるといっても、極端に桁数の大きい演算を実施できるものではなかった。
【０００６】
例えば、１０，０００桁の数値同士の演算を実施したくても、従来のコンピュータ装置では、コンパイラが提供した計算アルゴリズムで演算できる精度を超えてしまい、対応できなかった。これに対応するには、数値の桁数に応じて、つまり取り扱う数値の精度に応じて、特別な数値の取り扱いを可能とするように計算アルゴリズムを変更する必要があったが、このような措置を取ろうとすれば、プログラミングが複雑化してしまっていた。
【０００７】
もちろん、演算器が一時に取り扱うことのできる固定長を多くすることで取り扱うことのできるデータの桁数も増える。しかし、これではハードウェアが大きく複雑になる。何よりも、ある桁数から計算アルゴリズムを変更せざるを得ない、という本質的な問題を解決してはいなかった。
【０００８】
そこで、本発明は、データの精度がどのようなものであっても同一の計算アルゴリズムを適用して演算できる任意精度演算器を比較的簡単な構成で実現することを課題とする。
【課題を解決するための手段】
【０００９】
上記の課題を解決するために、本発明の任意精度演算器は、第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割して、Ｎビット長の第１の入力値および第２の入力値として順に出力する親プロセス部を備える。また、供給された該第１の入力値と該第２の入力値との演算を実施し、演算が完了するごとに該親プロセス部に次のＮビットの演算を要求するとともに、該演算で発生したキャリーを次のＮビットの演算に加えるＮビット演算器を備える。
【００１０】
例えば、親プロセス部では、第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割するステップと、分割された分割された該第１の任意精度数値をＮビット長の第１の入力値として、該第２の任意精度数値をＮビット長の第２の入力値として順に出力するステップと、次のＮビットの演算が要求される毎に、次のＮビットの該第１の入力値および該第２の入力値の出力を許可するステップとを備える任意精度演算方法が実施される。
【００１１】
また例えば、Ｎビット演算器では、第１の任意精度数値が下位からＮ（Ｎは自然数）ビットずつに分割されて供給されたＮビット長の第１の入力値と、第２の任意精度数値が下位からＮビットずつに分割されて供給されたＮビット長の第２の入力値との演算を実施するステップと、該演算が完了する毎に次のＮビットの演算を要求するステップと、該演算で発生したキャリーを次のＮビットの演算に加えるステップとを備える任意精度演算方法が実施される。
【００１２】
上記構成やステップによれば、親プロセスにおいて、任意精度の、例えば非常に多い桁数の数値が、そのシステムに備えられているＮビットの固定長のデータに下位側（ＬＳＢ）から順に分割され、下位のＮビットからＮビット演算器に送られる。Ｎビット演算器では、供給されたＮビットの数値の演算を実行し、キャリーが発生すれば、次に送られてくるＮビットの数値に加えられるように保持する。またＮビット演算が終了する度に親プロセスに次のＮビット数値に供給を要求する。親プロセスでは、この要求を受けて次のＮビットの出力を許可する。この構成により、順次下位からＮビットずつ数値が供給され、固定長（Ｎビット）やコンパイラの取り扱う精度に影響されず、極めて精度の高い、すなわち桁数の多い数値の演算も取り扱えるようになる。ハードウェアは、Ｎビットの演算器のみで足りるため、ハードウェア構成も極めて簡単にしたまま高精度の演算が可能となる。
【００１３】
本発明の任意精度演算器は、第１の任意精度数値が下位からＮ（Ｎは自然数）ビットずつに分割されて供給されたＮビット長の第１の入力値と、第２の任意精度数値が下位からＮビットずつに分割されて供給されたＮビット長の第２の入力値とを加算するＮビット全加算器と、該Ｎビット全加算器による加算により発生したキャリーを、次のＮビットの演算における最下位ビットに加算可能に保持する保持回路とを備えている。
【００１４】
この構成は、Ｎビット演算器の構成に対応している。Ｎビット全加算器において加算され、発生したキャリーは、保持回路に保持される。保持回路に保持されたキャリーは、次のＮビット数値の最下位ビットに加算される。これにより、Ｎビットずつに分割された数値同士をキャリーで繋ぎながら何段にも繰り返すことが可能となる。
【００１５】
本発明の任意精度演算器は、第２の入力値の論理否定を生成する論理否定回路と、加算か減算かを指示するオペレータが減算であることを示している場合に、論理否定された該第２の入力値を該Ｎビット全加算器に出力する選択回路とを備える。
【００１６】
この構成は、Ｎビット演算器の構成を示しており、減算をする場合に、第２の入力値の論理否定が選択回路により選択され、Ｎビット全加算器で第１の入力値と加算されるので、結果的に両入力値の減算が実施されるよう動作する。
【００１７】
ここで、保持回路は、オペレータが減算であることを示している場合に、演算開始後の最初のＮビット演算時には値１をＮビット全加算器に供給し、それ以降のＮビット演算時には前回の加算で発生したキャリーをＮビット全加算器に供給するように構成することは好ましい。第１の入力値から第２の入力値を減算する場合、正確には第２の入力値の２の補数を演算し、その２の補数と第１の入力値を加える。当該Ｎビット演算器のための構成によれば、オペレータが減算を示している場合に、最初に値１が加算器に加えられ、１の補数表現である第２の入力値の論理否定値と加えられるので、結局、第２の入力値の２の補数が第１の入力値と加えられることになる。このため、オペレータを保持回路に出力するだけで、正確な減算が可能となる。
【００１８】
また本発明は、第１の入力値と第２の入力値とを同一の入力線から入力して、それぞれラッチし、Ｎビット全加算器に供給するラッチ回路を備えていてもよい。この構成は、変形例に属し、ラッチ回路が同一の入力線から時間差で第１の入力値と第２の入力値を入力し、それぞれをラッチして出力するので、入力線数を制限しコンパクトな構成を実現可能である。
【００１９】
また、ラッチ回路は、オペレータをさらに入力し、該オペレータを選択回路に供給してから、第１の入力値と第２の入力値とをラッチするように構成してもよい。先にオペレータをラッチして加算減算の別を切り替えてから、入力値をそれぞれラッチする構成である。
【００２０】
本発明は、任意精度の演算をするために、第１の任意精度数値および第２の任意精度数値のそれぞれを下位からＮ（Ｎは自然数）ビットずつに分割する手段と、分割された該第１の任意精度数値をＮビット長の第１の入力値として、該第２の任意精度数値をＮビット長の第２の入力値として順にＮビット演算器へと出力する手段と、を備えている。
【００２１】
この構成は、親プロセス部の構成を示している。双方の任意精度数値が下位からＮビットずつに分割され、それぞれ分割された第１の入力値および第２の入力値が出力される。任意精度の数値が入力されたとしても、固定長（Ｎビット）の演算器においてそのまま演算できる形式に変形され出力されるので、任意精度の演算が可能となる。
【００２２】
ここで、Ｎビット演算器から次のＮビットの演算が要求される毎に、次のＮビットの該第１の入力値と該第２の入力値とを出力することは好ましい。この構成によれば、Ｎビット演算の完了を受けて次のＮビットの数値が出力されるので、演算器の速度によって入力値の出力タイミングを変更しなくてもよいし、特に、要求の発生とともに出力をするハンドシェイク形式であるため、非同期式回路構成に適する。
【００２３】
また、Ｎビット演算器に加算させるか減算させるかを示すオペレータを出力可能に構成されており、最上位のＮビットの演算が終了した場合に、該オペレータとして任意精度演算の終了を示す識別情報を出力するように構成することは好ましい。この構成によれば、Ｎビット演算器側においてオペレータを監視することにより、任意精度数値の演算完了を認識することが可能となる。
【００２４】
本発明では、入出力情報の少なくとも１以上が２線エンコード方式により符号化されていることが好ましい。２線エンコード方式によれば、別途クロックを必要とせずデータの送受信が可能であり、回路構成を簡単にできる。
【００２５】
また本発明は、ハンドシェイク方式によって駆動される非同期式回路構成を備えることは好ましい。本発明の処理は同様の処理の要求と出力とが繰り返し実行されるものであり、ハンドシェイクにより実行される非同期式の処理において、最大限にパフォーマンスを引き上げることができる。このため任意精度数値の桁数が多くても、高速に処理が行われる。
【００２６】
また本発明は、グローバルクロックによって駆動される同期式回路構成を備えていてもよい。同期式回路構成によっても、確実に実施される構成である。
【００２７】
また本発明は、本発明の任意精度演算器を備える電子機器でもある。本発明の任意精度演算器を備えることによって高精度の演算を簡単な回路で実現できるので、大凡このような演算を必要とする装置一般において、有用性が高い。
【発明を実施するための最良の形態】
【００２８】
次の本発明の実施の形態を、図面を参照しながら説明する。
以下の実施の形態は、本発明の例示であり、その開示に限定されることなく本発明は種々に変形して適用することが可能である。
【００２９】
（実施形態１）
本発明の実施形態１は、Ｎビット（Ｎは１以上の整数）の固定長加算器を用いて任意精度演算器を構成する例に関する。
図１に本発明の任意精度演算器のシステム図を示す。図１に示すように、本任意精度演算器は、親プロセス部２とＮビット演算器１とで構成されている。
【００３０】
親プロセス部２は、第１の任意精度数値Ｘおよび第２の任意精度数値Ｙのそれぞれを下位からＮビットずつに分割して、Ｎビット長の第１の入力値（Ｘ１、Ｘ２、…、Ｘｍ）および第２の入力値（Ｙ１、Ｙ２、…、Ｙｍ）として順に出力するよう構成されている。Ｎビット演算器１は、供給された第１の入力値（Ｘ１、Ｘ２、…、Ｘｍ）と第２の入力値（Ｙ１、Ｙ２、…、Ｙｍ）との演算を実施する。そして、演算が完了するごとに親プロセス部２に次のＮビットの演算を要求する信号ＰＣを出力するとともに、該演算で発生したキャリーを次のＮビットの演算に加えるものである。
【００３１】
なお、本明細書で、大文字で「Ｘ」というように表記する場合は元の任意精度数値であることを示し、「Ｘｎ」（１≦ｎ≦ｍ）というように記載するときは任意精度数値から分割された、Ｎビット長の各Ｎビットブロックを示す。また、小文字で「ｘ（ｎ）」（０≦ｎ≦Ｎ−１）というように記載する場合はＮビットブロック中のｎビット目のビットデータ、「ｘ＿１」や「ｘ＿０」と記載する場合はビットデータが２線エンコード方式（Dual-rail Encoding）で符号化された、２線のそれぞれのデータを示す。
【００３２】
具体的には、親プロセス部２は、分割手段２１と出力手段２２とを備えている。分割手段２１は、第１の任意精度数値Ｘおよび第２の任意精度数値Ｙのそれぞれを下位からＮビットずつに分割し、Ｎの倍数で正規化するものである。第１の任意精度数値Ｘおよび第２の任意精度数値Ｙの双方は、Ｎビットごとに同一数ｍ（ｍは１以上の整数）に分割される。例えば、図２に示すように、第１の任意精度数値ＸがＰビット（Ｎ＜Ｐ≦ｍ＊Ｎ）、第２の任意精度数値ＹがＱビット（Ｐ＜Ｑ）であったとする。下位からＮビットごとに分割していった場合、Ｙについてはｍ個目のＮビットブロックにＭＳＢが分配される。ｍ個目のＮビットのうち、ＭＳＢ以上の桁数のビットは“０”とされる。ところが、第１の任意精度数値Ｘの方が、第２の任意精度数値Ｙよりビット数が少ないため、ＸのＭＳＢは、途中（例えばｍ−２番目）のＮビットブロックに配置される。Ｙと同様に、任意精度数値Ｘのｍ−２番目のＭＳＢ以上は“０”とされる。さらに残りのｍ−１番目およびｍ番目のＮビットブロックも総て“０”とされる。
【００３３】
出力手段２２は、分割された第１の任意精度数値ＸをＮビット長の第１の入力値（Ｘ１、Ｘ２、…、Ｘｍ）として、第２の任意精度数値ＹをＮビット長の第２の入力値（Ｙ１、Ｙ２、…、Ｙｍ）として順にＮビット演算器１へと出力する。ここで、出力手段２２は、Ｎビット演算器１から次のＮビットの演算が要求される毎に、次のＮビットの第１の入力値と第２の入力値とを出力する。すなわち、出力手段２２は、Ｎビット演算器１からの要求信号であるプリチャージ信号ＰＣ（Pre Charge）が送信されるたびに、次のＮビットブロックを出力するようになっている。
【００３４】
また、親プロセス部２では、Ｎビット演算器１に加算させるか減算させるかを示すオペレータOperatorを出力可能に構成されている。このオペレータOperatorは、最上位のＮビットの演算が終了した場合に、オペレータOperatorとして任意精度演算の終了を示す識別情報Nullを出力するように構成されている。
【００３５】
上記した親プロセス部２の構成によれば、Ｎビット演算の完了を受けて次のＮビットの数値が出力されるので、Ｎビット演算器１の処理速度によって出力手段２２による出力タイミングを変更しなくてもよい。特に、要求の発生とともに出力をするハンドシェイク形式であるため、非同期式回路構成に適する。この構成の詳細は後述する。
【００３６】
また親プロセスで無ければｍ個のＮビットブロックの演算が終了したことを知り得ないが、この親プロセス部２の構成によれば、Ｎビット演算器１においてオペレータOperatorを監視することにより、任意精度数値の演算完了を認識することが可能となる。
【００３７】
図２にＮビット演算器１の構成図を示す。このＮビット演算器１は同期式回路構成によっても非同期式回路構成によっても構成することができる。
図２に示すＮビット演算器１は、Ｎビット全加算器１０、選択回路１１、論理否定回路１２、および保持回路１３を備えている。Ｎビット全加算器１０は、第１の任意精度数値Ｘが下位からＮビットずつに分割されて供給されたＮビット長の第１の入力値（Ｘ１、Ｘ２、…、Ｘｍ）と、第２の任意精度数値が下位からＮビットずつに分割されて供給されたＮビット長の第２の入力値（Ｙ１、Ｙ２、…、Ｙｍ）とを加算するものである。当該加算器は固定長（Ｎビット）の加算器である。論理否定回路１２は、第２の入力値（Ｙ１、Ｙ２、…、Ｙｍ）の論理否定を生成するものである。すなわち第２の入力値の１の補数を演算する。選択回路１１は、加算か減算かを指示するオペレータOperatorが減算であることを示している場合に、第２の入力値に代えて論理否定回路１２から供給された、論理否定演算された第２の入力値をＮビット全加算器１０に入力するものである。オペレータOperatorは、計算開始と演算方法を指定するものである。例えば、“０”である場合に「加算」を示し、“１”である場合に「減算」を示す。選択回路１１はいわゆるマルチプレクサであり、オペレータOperatorが“０”である場合には論理否定演算されていない、親プロセス部２から供給された第２の入力値をそのまま出力するが、オペレータOperatorが“１”である場合には論理否定演算された第２の入力値を出力するようになっている。この構成により、Ｎビット全加算器１０側では加算演算を実施するだけで、加算と減算とが実現される。保持回路１３は、Ｎビット全加算器１０による加算により発生したキャリーCarryを、次のＮビットの演算における最下位ビットに加算可能に保持するラッチ回路として機能する。オペレータOperatorにおいて“１”を減算と定義した場合、最初のＮビット演算時にオペレータの値“０”をキャリー入力Ｃinとして加えることは好ましい。減算は、減数の２の補数を被減数と加算することで実施される。論理否定回路１２では、１の補数が生成されるため、これにオペレータOperatorの“１”を加えれば、２の補数が生成でき、正確な減算が実施できるからである。
【００３８】
なお、図２の回路では、オペレータOperatorは直接、選択回路１１に供給されていたが、一旦、オペレータOperatorを保持回路１３に入力し、保持回路１３経由で、または、別個のラッチ回路経由で、選択回路１１に供給されるように構成してもよい。例えば、後述する２線エンコード方式により符号化されたオペレータOperatorを供給するようにした場合、オペレータは２ビット構成となり４つの値を取り得る（表１参照）。そのうち例えば無効符号語である“Null”を非演算時の識別子、有効符号語である“０”／“１”を演算内容が加算か減算かを指示する識別子としてとして規定しておく。そしてオペレータが“Null”以外の有効符号語になった時に、その有効符号語をラッチし、その有効符号語が示す演算内容で演算を開始させる。この有効符号語は、次にオペレータに無効符号語“Null"が出力されるまで保持される。このように構成することで、オペレータOperatorの制御により、演算開始と演算内容を同時に指示できるのである。オペレータOperatorを保持する回路と、キャリーCarryを保持する保持回路１３とは同一の回路にしても別の回路にしてもよい。
【００３９】
上記したＮビット演算器１の構成によれば、論理否定回路１２を備え、選択回路１１でオペレータOperatorの値により、第２の入力値をそのまま出力するか、論理否定して出力するかを選択するようにしたので、オペレータOperatorの値により加算か減算かを指定することが可能である。
【００４０】
また上記したＮビット演算器１の構成によれば、保持回路１３は、前回の加算で発生したキャリーCarryをＮビット全加算器１０に供給するように構成されているので、Ｎビットずつに分割された入力値同士をキャリーで繋ぎながら、何段にも繰り返すことが可能となる。このため、桁数に無関係に、任意精度の数値の加減算が自在に行える。
【実施例１】
【００４１】
図３に、非同期式回路構成でＮビット演算器を構成した実施例を示す。
図３に示すように、実施例のＮビット演算器１は、Ｎビット全加算器１０として、Ｎ個の非同期１ビット全加算器１０（０）〜１０（Ｎ−１）が連結されて構成されている。選択回路１１はパラレルにＮビット長の第２の入力値ｙ（０）〜ｙ（Ｎ−１）を出力する。論理否定回路１２（０）〜１２（Ｎ−１）は、ビットごとに設けられている。
【００４２】
非同期１ビット全加算器１０（ｎ）、選択回路１１、論理否定回路１２（ｎ）、保持回路１３の総ての回路構成は、非同期式回路構成を備えている。各回路の各ビット入出力が２線エンコード方式により符号化されており、非同期に動作する。非同期１ビット全加算器１０（ｎ）や論理否定回路１２（ｎ）が各々２線エンコード方式で符号化された１ビットデータを扱う他は、基本的な動作は図２のものと同様である。本実施例１では、各データ線を通常の同期型回路構成で構成する場合のように１本の信号線で構成してあるように示してあるが、２線エンコード方式により符号化してもよい。２線エンコード方式による符号化を利用する場合には、各信号線は二本が束ねられている。すなわち、図中で、例えばＸ（ｎ）と表記されるデータ線は、符号化されたＸｎ＿１およびＸｎ＿０の２線より構成されている。
表１に２線エンコード方式でビットｂを符号化した場合の真理値表を示す。
【表１】
2006139566.tif 000003
表１に示すように、ビットデータｂは２線式エンコードにより｛ｂ＿１，ｂ＿０｝に変換される。ビットデータｂは有効符号語としての"０"又は"１"と、無効符号語としての"Null"の値をとる。有効符号語としての"０"は｛０，１｝に、"１"は｛１，０｝にそれぞれ変換され、無効符号語としての"Null"は｛０，０｝に変換される。データの入出力は有効符号語を用いて行われるが、無効符号語“Null"は、非演算時を示す他、データ間の区別のために利用される。すなわち、同一の有効符号語が連続して非同期１ビット全加算器１０に入力されると、受信回路ではデータの到着を認識できないため、有効符号語と無効符号語を交互に伝送することで、有効符号語を識別できるようにしている。
【００４３】
例えば、４ビットのデータ “１”、“１”、“０”、“１”は、２線エンコードにより各々[1,0]、[1,0]、[0,1]、[1,0]と符号化されて入力される。このエンコード方式は例示に過ぎず、符号化方法を限定するものではないが、少なくとも有効符号語“１”と“０”、および無効符号語“Null”を符号化できる方式であることが望まれる。
【００４４】
なお、｛1,1｝は通常あってはならない状態であり、仮にこのような値が入力された場合には回路側で排除することが考えられる。検出時点で動作を停止して異常発生警報を出力することは、誤動作の報知と誤ったデータの伝播を防止する上で好ましい。
【００４５】
このような２線エンコード方式による符号化を非同期式回路構成と併せて用いれば、ビット間のデータ到来に時間差が生じても、それを許容する回路を構成できる。すなわち、ビットデータごとの信号線における素子遅延および配線遅延に由来してデータが異なる時間に到着したとしても、非同期式回路においては総ての入力が揃って出力されるため、本質的に最後に届くデータの到着を待って動作するよう構成されているからである。
【００４６】
図３に示される各ビットデータは、表１のようなスキームに基づき符号化される。すなわち、第１の入力値Ｘのビットデータ入力値ｘ（ｎ）は、２線エンコードにより｛ｘ＿１，ｘ＿０｝に変換される。同様に、第２の入力値Ｙのビットデータ、キャリー入力Ｃin（ｎ）、加算出力ｚ（ｎ）、キャリー出力Ｃout（ｎ）についても、それぞれ同様に、２線エンコードにより｛ｙ＿１，ｙ＿０｝，｛Ｃin＿１，Ｃin＿０｝，｛ｚ＿１，ｚ＿０｝，｛Ｃout＿１，Ｃout＿０｝に変換される。
表２に各々の非同期１ビット全加算器１０（ｎ）の真理値表を示す。
【表２】
2006139566.tif 000004
【００４７】
非同期１ビット全加算器１０（ｎ）では、２線エンコード方式により符号化された第１の入力値Ｘのビットデータ入力値ｘ（ｎ）と第２の入力値Ｙのビットデータｙ（ｎ）を入力し、１段下位の非同期１ビット全加算器１０（ｎ―１）から入力されたキャリーＣout（ｎ―１）をキャリー入力Ｃin（ｎ）として加算するようになっている。最下段の非同期１ビット全加算器１０（０）のキャリー入力Ｃin（０）としては、保持回路１３で保持されていた、直前のＮビットブロックの加算による最終的なキャリー出力、すなわち最上段の非同期１ビット全加算器１０（Ｎ−１）からのキャリー出力Ｃout（Ｎ−１）が加算されるようになっている。キャリーCarryは、発生したキャリーが“１”の場合には｛1,0｝、“０”の場合には[0,1]と符号化される。入力値ｘ（ｎ）、ｙ（ｎ）、Ｃin（ｎ）のうちいずれか一つでも“Null”（＝[0,0]）であれば、出力ｚ（ｎ）、Ｃout（ｎ）の値も“Null" （＝[0,0]）となる。総ての入力に有効符号語である“０”か“１”かが入力された場合に、非同期１ビット全加算器１０（ｎ）は、一定の遅延時間経過後に、表２の真理値表に基づいて、出力ｚ（ｎ）およびＣout（ｎ）に“０”か“１”を出力する。
【００４８】
第１の入力値ｘ（ｎ）、第２の入力値ｙ（ｎ）、およびキャリー入力Ｃin（ｎ）を入力値とし、和出力ｚ（ｎ）、およびキャリー出力Ｃout（ｎ）を出力値とすると、１ビット全加算においては、（１）式、および（２）式が成立する。
ｚ（ｎ）＝ｘ（ｎ）（＋）ｙ（ｎ）（＋）Ｃin（ｎ）…（１）
Ｃout（ｎ）＝Ｘ（ｎ）・Ｙ（ｎ）＋Ｙ（ｎ）・Ｃin（ｎ）＋Ｃin（ｎ）・Ｘ（ｎ）…（２）
ここで、（＋）は排他的論理和を示すものとする。表２は（１）式、および（２）式の真理値表であり、入出力間の全ての組み合わせを示している。
【００４９】
図４に非同期１ビット全加算器１０（ｎ）のブロック図、図５にNull検出回路の回路図、図６〜図９にＺ＿１、Ｚ＿０、Ｃout＿１、Ｃout＿０の各々の出力回路の回路図を示す。これらの回路は例示に過ぎず、種々変更して構成可能である。
図４に示すように、非同期１ビット全加算器１０（ｎ）は、例えば、Null検出回路１７０、Ｚ＿１出力回路１００、Ｚ＿０出力回路１２０、Ｃout＿１出力回路１４０、Ｃout＿０出力回路１６０を備えて構成されている。各回路は非同期式回路構成を備えている。
【００５０】
図５に示すNull検出回路１７０は、総ての入力値ｘ（ｎ）、ｙ（ｎ）、Ｃin（ｎ）が“Null"となった場合に、プリチャージ信号ＰＣ（Pre-Charge）に“Ｌ”レベルを出力し、それ以外の場合に“Ｈ”レベルを出力するようになっている。総ての入力値が“Null”になるのは、非演算時およびデータ間の区切り区間においてである。図６〜図９の回路図から判るように、各出力回路ではこのプリチャージ状態において出力が“L"レベルとなり、従って総ての出力ｚ（ｎ）およびＣout（ｎ）に“Null"が出力されることになる。
【００５１】
図６に示すＺ＿１出力回路１００ではトランジスタ１０１〜１１３が、図７に示すＺ＿０出力回路１２０ではトランジスタ１２１〜１３３が、図８に示すＣout＿１出力回路１４０ではトランジスタ１４１〜１５３が、図９に示すＣout＿０出力回路１６０ではトランジスタ１６１〜１７３がそれぞれ図示されたように接続されている。インバータ１１４、１３４、１５４、１７４はそれぞれが論理を反転するインバータ回路となっている。
【００５２】
プリチャージ信号ＰＣが入力されているトランジスタ１０１、１２１、１４１、１６１がＰチャネルＭＯＳＦＥＴで構成されており、プリチャージ信号ＰＣが入力される状態（入力値が総て“Null”の場合には出力が“Ｌ”レベルに、それ以外の場合には、各入力値の示す有効符号語（“０”か“１”か）に応じて出力が定まることになる。それ以外のトランジスタは、ＮチャネルＭＯＳＦＥＴで構成されおり、入力値が“Ｈ”レベルの場合に導通し、“Ｌ”レベルの場合に遮断状態となる。そのためカスケード接続されているトランジスタ、例えば図６のＺ＿１出力回路１００におけるトランジスタ１０２〜１０４は、入力値Ｘ＿１、ｙ＿０、Ｃin＿０の総てが“Ｈ”レベルとなった場合、すなわちＸ＿１、ｙ＿０、Ｃin＿０が｛1、1、1｝になった場合に低電位電源が印加され、Ｚ＿１が｛1｝となる。このような構成により、表２の真理値表に従って出力が規定される。
【００５３】
なお、ＰチャネルＭＯＳＦＥＴがオンからオフになるタイミングとしては、少なくとも何れかのＮチャネルＭＯＳＦＥＴがオフからオンになるタイミングよりも遅くならないように配慮し、高電位電源Ｖｄｄから接地電位Ｖｓｓへ向けて貫通電流が流れないようにするのが望ましい。また、必要に応じてＮチャネルＭＯＳＦＥＴの接続関係を最適化し、トランジスタ数を削減してもよい。例えば、トランジスタ１０４と１０７とは単一のトランジスタに代替できる。また、（２）式から明らかなように入力値ｘ（ｎ）、ｙ（ｎ）が"１"のときはキャリー入力Ｃinの値に関係なく、キャリー出力Ｃoutは必ず"１"になるため、ｘ＿１とｙ＿１がそれぞれ"１"のときには、Ｃin＿１が"１"であるか "０"であるかを問わずに、Ｃout＿１が"１"になるように組み合わせ回路を構成してもよい。また、出力回路として、ＮチャネルＭＯＳＦＥＴの回路網に替えて複数のＰチャネルＭＯＳＦＥＴで構成された回路網を採用してもよい。
表３に論理否定回路１２（ｎ）の真理値表を示す。
【表３】
2006139566.tif 000005
表３に示すように、入力値Ｉｎが無効符号語の“Null”である場合には同じく“Null"を出力値Ｏｕｔとするが、有効符号語の“０”または“１”である場合にはその論理を反転して、“１”および“０”を出力するようになっている。
【００５４】
親プロセス部２から供給されるオペレータOperatorも２線エンコード方式により符号化されており、加算の場合には“０”、減算の場合には“１”に、一つの任意精度数値ＸおよびＹの演算が総て終了した非演算期間（演算終了時）には“Null”が出力されるようになっている。選択回路１１は、オペレータOperatorが有効符号語である“０”の場合には加算をするため、論理否定回路１２（ｎ）を経ていない第２の入力値ｙ（ｎ）を選択する。オペレータOperatorが有効符号語である“１”の場合には減算をするため、論理否定回路１２（ｎ）を経て、表３の真理値表に従い論理反転された第２の入力値ｙ（ｎ）を選択する。また選択回路１１は、オペレータOperatorが“Null”である場合、総ての出力を“Null”とする。
【実施例２】
【００５５】
図１０に、本発明のＮビット演算器においてＮ＝１として構成した１ビット演算器の実施例を示す。
図１０に示すように、この１ビット演算器１ｂでは１ビットデータのみを扱うため、２線エンコード方式により符号化された第１の入力値、ｘ＿１、ｘ＿０、第２の入力値ｙ＿１、ｙ＿０、およびオペレータOperator、Operator＿１、Operator＿０のみが入力データになっている。このため、１ビット演算器１ｂには、実施例１で説明した非同期１ビット全加算器１０ｂが一つのみ設けられている。非同期１ビット全加算器１０ｂの構成は、実施例１で示したものと同様であり（図４〜９参照）、特に変更はない。すなわち、表２の真理値表に基づいて動作するようになっている。
【００５６】
論理否定回路１２も１ビットデータに対応するよう一つのみ設けられている。選択回路１１は、１ビットデータのみを取り扱う点を除き実施例１と同様である。すなわち、選択回路はオペレータ｛Operator＿１，Operator＿０｝によって制御される。オペレータOperatorが｛0,1｝の場合には第２の入力値ｙが反転せずに出力され、[1,0]の場合には論理否定回路１２で論理反転された入力値が出力される。｛0,0｝の場合、つまり“Null"入力の場合には”Null"を出力する。
【００５７】
保持回路１３は、オペレータOperatorとして無効符号語である“Null"が入力されている場合には“０”を出力し、“Null"から最初に入力された有効符号語として “０”が入力されている場合には “０”を出力し、“１”が入力されている場合には“１”を出力するようになっている。この値“１”と入力値ｙの論理反転とを合算することにより、減算が正確に演算できる。すなわち、減算は、厳密には２の補数表現された値を加えることによって実施される。オペレータOperatorが“Null"から有効符号語に変化すると、演算が開始される。演算開始直後に入力されたオペレータの値は、キャリーＣinの代わりに非同期１ビット全加算器１ｂに加えられる。オペレータが加算を示す“０”である場合には“０”がキャリー入力Ｃinされるが、“０”入力なので加算値に変更を加えない。ところが、オペレータが減算を示す“１“である場合、“１”がキャリー入力Ｃinされる。このキャリー入力Ｃinは、論理否定回路１２で生成された第２の入力値ｙの１の補数表現に同時に加算されることになる。このため、結局、非同期１ビット全加算器１０ｂには２の補数表現された第２の入力値ｙが加えられたことと同等になる。これによって第１の入力値ｘから第２の入力値ｙを減算することに等しい演算が実施される。
【００５８】
保持回路１３には、別途、非同期１ビット全加算器１０ｂのキャリー出力Ｃout＿１およびＣout＿０がそのまま入力されている。演算開始後、オペレータOperatorをキャリー入力Ｃinに加える最初の１ビット演算がされ、その結果としてのキャリー出力Ｃoutが入力されると、保持回路１３はこれをラッチする。そして次のビットの演算のために一旦キャリー出力Ｃoutが“Null”になると、その後は保持回路１３に保持された前回の演算のキャリー出力Ｃoutがキャリー入力Ｃinに加算されるようになる。
【００５９】
なお、この保持回路によるオペレータOperatorのラッチは必須ではない。誤差として値１を許容する場合には、オペレータOperatorの値のラッチをせず、したがって、演算開始後、最初の演算に、キャリー入力Ｃinが常に“０”であるように構成してもよい。
【００６０】
親プロセス部２においても、この１ビット演算器１ｂに対応して、１ビットデータを順次出力するように構成されている。すなわち図１の親プロセス部２において、Ｎ＝１とし、分割手段２１が任意精度数値ＸおよびＹを１ビットずつに分割し、出力手段２２が１ビットずつ下位から任意精度数値ＸおよびＹを読み出し、プリチャージ信号ＰＣに対応させて出力する。
【００６１】
図１１に、本実施例の１ビット演算器１ｂを用いて４ビット精度の加減算を行った場合のタイミングチャートを示す。
図１１に示すように、このタイミングチャートでは、４相ハンドシェイキングのスキームが適用されている。すなわち、演算開始前、親プロセス部２は全入力に“Null”を出力している。演算開始後は、以下のI〜IVの手順が１ビット演算毎に、計４回繰り返される。
（I）入力値ｘおよびｙに該当ビットデータが出力される；
（II）所定時間経過後、加算器より出力値ｚおよびキャリー出力Ｃoutが出力される；
（III）出力値ｚが外部で取り込まれ、キャリー出力Ｃoutが保持回路１３に取り込まれた後、入力値ｘおよびｙに“Null"が出力される；
（IV）所定時間経過後、加算器の出力値ｚおよびキャリー出力Ｃoutに“Null”が出力される。
【００６２】
図１１では、第１の入力値ｘ、第２の入力値ｙ、およびオペレータOperatorとして、以下のものを例示してある。
入力値ｘ：“１１０１”＝（｛1,0｝，｛1,0｝，｛0,1｝，｛1,0｝）；
入力値ｙ：“１０００”＝（｛1,0｝，｛0,1｝，｛0,1｝，｛0,1｝）；および
オペレータOperator：“０”＝｛0,1｝（加算）。
【００６３】
図１１のタイミングチャートから判るように、本実施例では、親プロセス部２は、１ビット演算毎に、オペレータOperatorに“Null”を出力することを禁止している。このように親プロセスの処理を構成することによって、保持回路１３はオペレータOperatorが無効符号語である“Null”状態から有効符号語に変わった際に一度だけ、その有効符号語（当該タイミングチャートでは“０”）をラッチして、次にオペレータに“Null”が出力されるまで、その状態を保持する。この構成によれば、最初にオペレータに加算か減算かを指定する“０”または“１”を出力すればビット演算が完了するまで同じ演算内容を持続することができる。また、オペレータOperatorに“Null"を出力することでビット演算終了を１ビット演算器１ｂに通知することができる。
【００６４】
以上、当該実施形態１によれば、Ｎビットの繰り返し演算、極端には実施例記載のように、１ビット単位の繰り返し演算によっても任意精度数値の加減算が可能となる。
【００６５】
本実施形態１によれば、オペレータOperatorの“Null"出力を任意精度演算の終了を示す識別情報として利用するので、Ｎビット演算器側においてオペレータを監視することにより、任意精度数値の演算完了を認識することが可能となる。
【００６６】
本実施形態１によれば、保持回路１３が、オペレータOperatorが減算を示していたときに、“１”をＮビット全加算器に出力し、一方の入力値の論理反転と加算されるようになっているので、オペレータOperatorを減算の指示の他に減算時に加える数値情報も含めることができる。このため、正確な減算を簡単な回路で実現可能である。
【００６７】
本実施形態１によれば、同期式回路で構成することも、非同期式回路で構成することも可能である。特に非同期式回路構成を備えている場合、グローバルクロックで動作する同期式回路で生じ易いクロック遅延、クロックスキュー、クロックジッター等の問題が無い。
【００６８】
非同期式回路においては、最小機能回路はイベント駆動によって制御され、自律的に動作する必要があると判断した場合と、他律的に動作する必要があると判断した場合にのみ動作する。つまり、各々の最小機能回路は他の最小機能回路とは独立して並列動作が可能であり、他の最小機能回路の処理が完了するまでウェイティングする必要がない。最小機能回路は所望の処理を実行する準備が完了した段階で処理を進めることができる。このため、単純な加減算を繰り返し行うことにより任意精度演算を可能とする本発明のような回路に非同期式回路構成は適する。このため任意精度数値の桁数が多くても、高速に処理が行われる。
【００６９】
（実施形態２）
本発明の実施形態２は、Ｎビット演算器における入力線数を削減した構成に関する。
図１２に実施形態２のＮビット演算器１ｃの構成図を示す。
図１２に示すように、本実施形態２のＮビット演算器１ｃは、図２で説明した実施形態１のＮビット演算器１の構成に、さらにラッチ回路１４を加えた構成を備えている。ラッチ回路１４は、第１の入力値Ｘと第２の入力値Ｙとを同一の入力線Ｄから入力して、それぞれラッチし、Ｎビット全加算器１０に供給するものである。また、ラッチ回路１４は、オペレータOperatorをさらに入力し、該オペレータを選択回路１１に供給してから、第１の入力値Ｘと第２の入力値Ｙとをラッチするように構成されている。オペレータOperatorは、入力線Ｄ経由で送られてくるものでよい。その他の構成は実施形態１と同様の構成を備えている。
【００７０】
すなわち、ラッチ回路１４は、同一の入力線Ｄから時間差を持って送られてくるオペレータOperator、第１の入力値Ｘ、第２の入力値Ｙをそれぞれラッチし、対応する回路に出力するように構成されている。
【００７１】
親プロセス部２では、当該Ｎビット演算器１ｃに対応させて、オペレータOperator、第１の入力値Ｘ、第２の入力値Ｙを順次送り出すよう構成されている。各々のデータの間では“Null”を出力することで、第１の入力値、第２の入力値のそれぞれを区別させる。データ送出の順番を予め定めておくことで、各々のデータが正しく反映させる。例えば、第１の入力値Ｘ、第２の入力値Ｙの順で値が送られてくるものとすれば、親プロセスでは、オペレータOperatorを“Null”から加算か減算かに応じて“０”や“１”を送出し、選択回路１１を切り替えさせる。次いで“Null”を送出してから第１の入力値Ｘを出力する。ラッチ回路１４からはＮビット全加算器１０に第１の入力値Ｘが出力される。次いで“Null”を出力してからし、次に“Null”を送出してから第２の入力値Ｙを出力する。オペレータOperatorにより加算が示されているなら、選択回路１１は論理否定されていない第２の入力値Ｙを選択し、Ｎビット全加算器１０には正論理のＹが供給される。減算が示されているなら、選択回路１１は論理否定された第２の入力値Ｙを選択肢、Ｎビット全加算器１０には負論理のＹが供給される。
【００７２】
なお、オペレータを入力線Ｄに含めて出力するように構成してもよい。この場合、オペレータOperator、第１の入力値Ｘ、第２の入力値Ｙがそれぞれ時間差でラッチ回路１４に供給される。
【００７３】
本実施形態２の構成によれば、上記実施形態１と同様の効果を奏する他、ラッチ回路が同一の入力線から時間差で第１の入力値と第２の入力値を入力し、それぞれをラッチして出力するので、入力線数を制限しコンパクトな構成を実現可能である。
【００７４】
（実施形態３）
本発明の任意精度演算器は、任意のコンピュータ装置に適用可能であり、そのようなコンピュータ装置を組み込んだ任意の電子機器に適用可能である。
図１３にこのような電子機器の一例であるノート型パーソナルコンピュータ装置の概観図を示す。このパーソナルコンピュータ装置１０００は、液晶ディスプレイ１００１、キーボード１００２を備え、内部にマイクロプロセッサ回路１００４を備えている。本発明の任意精度演算器は、このようなマイクロプロセッサ回路１００４の演算器として適用可能である。
【００７５】
その他、本発明の任意精度演算器は大凡演算を必要とする機器一般に適用可能であり、ノート型コンピュータ装置等のコンピュータの他、例えば、電卓、電子手帳、携帯型情報端末（ＰＡＤ）、携帯電話、ＩＣカード、スマート・カード等に適用可能である。本発明の任意精度演算器を備えることによって高精度の演算を簡単な回路で実現できるので、大凡このような演算を必要とする装置一般において、有用性が高い。
【図面の簡単な説明】
【００７６】
【図１】本発明の任意精度演算器のシステム図
【図２】実施形態１のＮビット演算器のブロック図
【図３】実施例１のＮビット演算器のブロック図
【図４】実施例１の非同期１ビット全加算器のブロック図
【図５】Null検出回路の回路図
【図６】ｚ＿１出力回路の構成図
【図７】ｚ＿０出力回路の構成図
【図８】Ｃout＿１出力回路の構成図
【図９】Ｃout＿０出力回路の構成図
【図１０】実施例２の１ビット演算器のブロック図
【図１１】実施例２の１ビット演算器のタイミングチャート
【図１２】実施形態２のＮビット演算器のブロック図
【図１３】実施形態３の電子機器の例
【符号の説明】
【００７７】
１、１ｂ、１ｃ…ビット演算器、２…親プロセス部、１０…Ｎビット全加算器、１０（０）、１０（１）、１０（Ｎ−１）、１０（ｎ）、１０ｂ…非同期１ビット全加算器、１１…選択回路、１２…論理否定回路、１３…保持回路、１４…ラッチ回路、２１…分割手段、２１…分割手段、２２…出力手段、１００、１２０、１４０、１６０…出力回路、１０１〜１１３、１２１〜１３３、１４１〜１５３、１６１〜１７３…トランジスタ、１１４、１３４、１５４、１７４…インバータ、１８０…検出回路、１０００…パーソナルコンピュータ装置、１００１…液晶ディスプレイ、１００２…キーボード、１００４…マイクロプロセッサ回路、Carry…キャリー、Ｃin…キャリー入力、Ｃout…キャリー出力、Ｄ…入力線、Ｉｎ…入力値、Operator…オペレータ、Ｏｕｔ…出力値、ＰＣ…プリチャージ信号、Ｖｄｄ…高電位電源、Ｖｓｓ…接地電位、ｘ、ｘ（０）、ｘ（１）、ｘ（Ｎ−１）、Ｘ１、Ｘ２、Ｘｍ…第１の入力値、Ｘ…第１の任意精度数値、ｙ、ｙ（０）、ｙ（１）、ｙ（Ｎ−１）、Ｙ１、Ｙ２、Ｙｍ…第２の入力値、Ｙ…第２の任意精度数値、ｚ、ｚ（０）、ｚ（１）、ｚ（Ｎ−１）、Ｚ…出力値
【図１】
2006139566.tif 000006
【図２】
2006139566.tif 000007
【図３】
2006139566.tif 000008
【図４】
2006139566.tif 000009
【図５】
2006139566.tif 000010
【図６】
2006139566.tif 000011
【図７】
2006139566.tif 000012
【図８】
2006139566.tif 000013
【図９】
2006139566.tif 000014
【図１０】
2006139566.tif 000015
【図１１】
2006139566.tif 000016
【図１２】
2006139566.tif 000017
【図１３】
2006139566.tif 000018