(57)【特許請求の範囲】
【請求項１】
複数の多ビットデータを加算する演算処理装置であって、
該複数の多ビットデータの共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより各桁の加算を行なう第１の加算手段と、
該第１の加算手段による加算結果の総和を求める第２の加算手段とを有し、
前記個数検出手段は、
入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、
該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備えることを特徴とする演算処理装置。
【請求項２】
前記第１の加算手段は、前記複数の多ビットデータを、複数桁毎に加算することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第２の加算手段は、前記第１の加算手段の加算結果のうちで、桁の重複のない複数の加算結果を合わせて１データとして、加算を行うことを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記第１の加算手段は前記個数検出手段を複数有し、少なくとも１つの前記個数検出手段に、他の複数の前記個数検出手段の出力を入力することを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記判定手段は、複数の多数決論理演算手段を有することを特徴とする請求項１に記載の演算処理装置。
【請求項６】
前記複数の多数決論理演算手段の少なくとも１つが、複数の入力端子と、該複数の入力端子とスイッチ手段を介して接続された複数の容量手段と、該複数の容量手段が共通に接続されたセンスアンプとを有することを特徴とする請求項５に記載の演算処理装置。
【請求項７】
前記複数の容量手段において、特定の容量手段の容量を、他の容量手段の複数個分の容量としたことを特徴とする請求項６に記載の演算処理装置。
【請求項８】
前記センスアンプの出力が、前記複数の入力端子の少なくとも１つにフィードバック入力されることを特徴とする請求項６に記載の演算処理装置。
【請求項９】
前記センスアンプの出力は、前記複数の入力端子の少なくとも１つに、ラッチ手段を介して接続されていることを特徴とする請求項６に記載の演算処理装置。
【請求項１０】
前記複数の多ビットデータは符号を表すフラグビットを含み、前記第１の加算手段は、前記複数の多ビットデータの各桁をフラグビットも含めて独立に加算することを特徴とする請求項１に記載の演算処理装置。
【請求項１１】
前記複数の多ビットデータは、負の数を２の補数または１の補数により表すことを特徴とする請求項１０に記載の演算処理装置。
【請求項１２】
前記第２の加算手段は、前記第１の加算手段による異なる桁についての加算結果におけるそれぞれの桁よりｎ（ｎ≧０）桁目の値を合わせて１データとして、加算を行うことを特徴とする請求項１に記載の演算処理装置。
【請求項１３】
前記第２の加算手段は、前記第１の加算手段による各桁についての加算結果におけるそれぞれの桁よりｎ（ｎ≧０）桁目の値を合わせて１データとして、加算を行うことを特徴とする請求項１に記載の演算処理装置。
【請求項１４】
前記ｎ桁目はそれぞれの桁についての加算結果の最上位桁であることを特徴とする請求項１２に記載の演算処理装置。
【請求項１５】
前記第１の加算手段は、加算結果を最上位桁から順次出力することを特徴とする請求項１４に記載の演算処理装置。
【請求項１６】
前記第２の加算手段は、前記第１の加算手段による１部の桁についての加算と並行して、前記第１の加算手段によって既に実行された他の１部の桁についての加算結果を用いて加算を実行することを特徴とする請求項１に記載の演算処理装置。
【請求項１７】
複数の多ビットデータを乗算する演算処理装置であって、
該複数の多ビットデータの部分積を生成する部分積生成手段と、
該部分積生成手段で生成された複数の部分積の共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより、各桁を独立に加算する第１の加算手段と、
該第１の加算手段による加算結果の総和を求める第２の加算手段とを有し、
前記個数検出手段は、
入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、
該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備えることを特徴とする演算処理装置。
【請求項１８】
前記部分積生成手段が、第１の多ビットデータの各ビットと、第２の多ビットデータの特定の１ビットとの部分積を同時に生成することを特徴とする請求項１７に記載の演算処理装置。
【請求項１９】
前記部分積生成手段が、
前記第１の多ビットデータの各ビットを並列に入力する入力手段と、
該入力手段からの入力を、前記第２の多ビットデータの各ビットの値に応じてオン・オフするスイッチ手段とを有することを特徴とする請求項１７に記載の演算処理装置。
【請求項２０】
前記部分積生成手段が、ゲート電極を共通化した複数のトランジスタを有することを特徴とする請求項１７に記載の演算処理装置。
【請求項２１】
前記部分積生成手段が、複数のＡＮＤ回路を有することを特徴とする請求項１７に記載の演算処理装置。
【請求項２２】
データを入力する入力手段と、
データを記憶する記憶手段と、
該記憶手段に記憶されたデータと前記入力手段より入力されたデータとを、所定の処理手順で処理する処理手段と、
該処理手段の処理結果を出力する出力手段とを有し、
前記処理手段が、
複数の多ビットデータの共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより各桁の加算を行なう第１の加算手段と、
該第１の加算手段による加算結果の総和を求める第２の加算手段とを具えて複数の多ビットデータの加算を実行し、
前記個数検出手段は、
入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、
該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備えることを特徴とするデータ処理装置。
【請求項２３】
前記処理手段が、更に、複数の多ビットデータの部分積を生成する部分積生成手段を具え、該部分積生成手段の生成した部分積を、前記第１、第２の加算手段を用いて加算することにより、多ビットデータ同士の乗算を実行することを特徴とする請求項２２に記載のデータ処理装置。
【請求項２４】
前記入力手段は信号を入力し、前記記憶手段は重み係数を記憶し、前記処理手段は、入力された信号に重み係数を乗じて累算することを特徴とする請求項２２に記載のデータ処理装置。
【請求項２５】
前記入力手段は多ビット符号を入力し、前記記憶手段は多ビット符号を予め記憶し、前記処理手段は、入力された多ビット符号と記憶された多ビット符号との相関量を計算し、計算された相関量に基づいて入力された多ビット符号を復調することを特徴とする請求項２２に記載のデータ処理装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、加算や乗算などの演算を実行する半導体装置等の演算処理装置、及び該装置で用いる演算方法、並びに前記演算処理装置を用いたデータ処理装置に関するものである。
【０００２】
【従来の技術】
近年、微細化に伴う半導体製造技術及びアルゴリズムを含む半導体回路技術の目ざましい発展に伴い、加算器(adder) や乗算器(multiplier)等の演算速度の向上には著しいものが有る。又その演算処理は、CPU(central processing unit)やDSP(digital signal processor) の分野をはじめ、あらゆる半導体装置に使用されている。しかしながら、技術が発展すればするほどこのような演算処理に対する要求は厳しいものになり、さらなる高速化が求められているのが現状である。
【０００３】
特に、マルチメディア時代における画像処理や行列演算等の莫大な量の計算を必要とする分野において、演算処理の高速化の要求が強く、中でも、加算器や乗算器の処理は、これらの処理の性能を決定する最も重要な演算処理の１つであり、処理の高速化が望まれている。
【０００４】
現状の演算方式による加算器の一例として、「ＣＭＯＳ超ＬＳＩの設計」（菅野卓雄監修、培風館）に記載された加算器について説明する。
【０００５】
２つの２進数の加算は、２つの２進数をＸ、Ｙとし、ＸとＹの和(sum) をＳ、桁上げ(carry) をＣと置くと、Ｘ、Ｙが１桁の場合は、次の４通りとなる。
【０００６】
Ｘ＝０，Ｙ＝０のとき、Ｓ＝０、Ｃ＝０
Ｘ＝０，Ｙ＝１のとき、Ｓ＝１、Ｃ＝０
Ｘ＝１，Ｙ＝０のとき、Ｓ＝１、Ｃ＝０
Ｘ＝１，Ｙ＝１のとき、Ｓ＝０、Ｃ＝１
【０００７】
これを真理値表(truth-table) と見なして、和Ｓ及び桁上げＣを論理式で表すと、Ｓ＝Ｘ＋Ｙ，Ｃ＝Ｘ＊Ｙとなり、図４１の（Ａ）に示すような１つの排他的論理和(exclusive OR)と１つの論理積(AND) からなる２入力２出力の回路で実現できる。この機能を持つ回路を半加算器(half adder)と称する。
【０００８】
２つの２進数が複数桁の場合、すなわち２ビット以上のビット幅を持つ場合は、下位桁からの桁上げ信号の処理を要する。従って１桁当たりではXi，Yi及びCi-1の３つの２進数を加算できる回路が必要である。この３入力２出力の回路を全加算器(full adder)と称する。図４１（Ｃ）に、その動作を表す真理値表と論理式を示す。この全加算器を必要な個数だけ複数個配置し、下位の加算器の桁上げ信号を上位の加算器に入力するように接続することにより、任意の桁数の加算を行なう回路が得られる。これをリップルキャリーアダー(ripple carry adder)と呼ぶ。４ビットアダーとして構成した例を図４１の（Ｂ）に示す。図４１の（Ｃ）の真理値表の動作を正しく反映する１ビット全加算器の回路構成には、多くのヴァリエーションが考えられるが、高速演算を目的とする場合の設計上のポイントは、和信号の生成ではなく、下位桁から入力された桁上げ信号をいかに速く上位桁に伝えるかにある。図４１の（Ｄ）に、この観点から設計した全加算器の例を示す。
【０００９】
また、桁数が大きくなり、例えば１６ビットになると、個々の全加算器における工夫による高速化には限界があり、１６ビットアダー全体で高速化を図る必要がある。上述したように、アダーの演算速度はキャリーの伝搬速度により律速されているため、下位の加算器からの桁上げ信号を待たずにその加算器自身の桁上げ信号が決定できれば高速化が図れる。
【００１０】
全ての桁の桁上げ信号は自桁の入力値と最下位桁の桁上げ信号だけから生成することができる。これを桁上げ先見方式(Carry Look Ahead: CLA) と呼ぶ。この方式を利用した回路（ＣＬＡ回路）の例を図４２の（Ａ）に示す。図４２の（Ａ）において、ＨＡは図４２の（Ｂ）に示す半加算器、点線で囲まれた部分は、図４２の（Ｃ）に示すＣＭＯＳ回路で実現される。
【００１１】
実際に回路にインプリメントする場合には、ハードウェア量や効率を考えて、全ての桁の桁上げ信号をＣＬＡで生成することはなく、例えば４ビットを１つのブロックとして、ブロック単位でＣＬＡを用いて桁上げ信号を伝搬させ、ブロック内はリップルで桁上げ信号を伝える方式（ブロックＣＬＡと呼ぶ）を採る場合が多い。この方式を用いた１６ビットアダーの例を図４３に示す。
【００１２】
また、減算は、加算回路をそのまま用いて、減数(subtracter)の２の補数(2's complement)を被減数(minuend) に加えることで実現される。
【００１３】
しかしながら、以上の方法によっても、operand 数が増大すればするほど、素子数、演算時間とも大きく増大し、operandsの増加に対して更なる高速化を図ることは容易でない。
【００１４】
例えば、６３個のデータを全て加算する場合において、高速化を追求すれば、図４４のように、並列に６段の加算処理を行なうことができるが、６２個の全加算器を要する。一方、素子数を減らせば、図４５のように全加算器を１個とすることもできるが、６２回の加算を順次行なう必要がある。
【００１５】
次に、現状の演算方式の乗算器(multiplier)の一例として、ここでは並列乗算器について簡単に説明する。
【００１６】
n×n ビットの乗算の場合、まず部分積(partial product)
【００１７】
【外１】
0003658079.tif 000002
を求める。ここで部分積とは、被乗数(multiplicand)
【００１８】
【外２】
0003658079.tif 000003
に乗数(multiplicator) Ｙの１ビット2jYj（J=0,1,・・・,n-1 ）を掛け合わせた結果を言う。
【００１９】
２進数の場合は０か１しかないので、Yjが０のときはPij はすべて０となり、Yjが１のときはPij の各ビットはXiの各ビットに等しい。従って部分積は、被乗数の各ビットと乗数の１ビットとの論理積をとることにより得られる。生成された部分積を乗数ビットの重みに従って桁を合わせ、それらを加算することにより、乗算結果
【００２０】
【外３】
0003658079.tif 000004
が得られる。最も基本的な並列乗算器は、上記の部分積生成のハードウエア（AND ゲート) および部分積加算の回路を、アレイ状に配列して結線することにより得られる。例として、８ビット×８ビットの並列乗算器を図４６に示す。同図に示すように、この並列乗算器は、全加算器301 、半加算器302 、ＡＮＤゲート303 を含む。
【００２１】
この例に示されるように、乗算は、n ×n ビットの場合、n2個のＡＮＤゲートで部分積を容易に且つ高速に演算するとともに、この部分積を加算する加算工程が演算速度を律速している。従って、部分積の加算工程の高速化が乗算器の高速化の鍵である。
【００２２】
そのための改良案として、各部分積の加算段の桁上げ信号を次の加算段の加算器に伝えることにより、自段内での桁上げ信号伝搬をなくすことが可能となるキャリーセーブアダー方式や、同一桁内の加算工程を並列に行うWallace-tree方式(Wallace, C., IEEE Trans.on Electronic Computers,EC-13,1,1964, pp14-17) 、および生成される部分積の個数そのものを減らす、Booth のアルゴリズム(Rubinifield,L.,IEEE Trans. on Computers, C24,10,1975, pp.1014-1015)を用いる方式等があり、高速化が図られている。
【００２３】
しかしながら、上述の方式では、いずれもビット数が増大すればするほど、素子数、演算時間とも大きく増大し、多ビット化に対して更なる高速化を図ることは容易でなく、最近では多値理論を応用した乗算器等も報告されているが(T.Hanyu et al. Proc. IEEE Int. Symp. on MVL, pp19-26, May(1994).Nov.1993)、なかなか実用化に至らないのが、実状である。
【００２４】
本発明の目的は、上述した技術課題を解決し、高速で素子数の少ない演算処理装置及びその方法、並びにデータ処理装置を提供することにある。
【００２５】
本発明の他の目的は、演算処理装置及びデータ処理装置において、高速化を図りつつ、必要な素子数を削減し、消費電力を減少させることにある。
【００２６】
本発明の他の目的は、加算においてキャリーの伝搬をなくし、演算の高速化を図ることにある。
【００２７】
本発明の他の目的は、データを再編成して加算すべきデータ数を削減し、演算を高速化させ、演算に必要な素子数を削減することにある。
【００２８】
本発明の他の目的は、演算を並列に実行することで、処理の高速化を図ることにある。
【００２９】
【課題を解決するための手段】
上述の目的を達成するために、本発明によれば、複数の多ビットデータを加算する演算処理装置に、該複数の多ビットデータの共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより各桁の加算を行なう第１の加算手段と、該第１の加算手段による加算結果の総和を求める第２の加算手段とを有し、前記個数検出手段は、入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備える。
【００３０】
また、本発明の他の態様によれば、複数の多ビットデータを乗算する演算処理装置に、該複数の多ビットデータの部分積を生成する部分積生成手段と、該部分積生成手段で生成された複数の部分積の共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより、各桁を独立に加算する第１の加算手段と、該第１の加算手段による加算結果の総和を求める第２の加算手段とを有し、前記個数検出手段は、入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備える。
【００３３】
また、本発明の他の態様によれば、データを入力する入力手段と、該入力手段より入力されたデータを記憶する記憶手段と、該記憶手段に記憶されたデータと前記入力手段より入力されたデータとを、所定の処理手順で処理する処理手段と、該処理手段の処理結果を出力する出力手段とを有し、前記処理手段が、複数の多ビットデータの共通する桁について、値が１である入力の個数を検出して２進表現で出力する個数検出手段に対して当該桁の値を並列入力することにより各桁の加算を行なう第１の加算手段と、該第１の加算手段による加算結果の総和を求める第２の加算手段とを具えて複数の多ビットデータの加算を実行し、前記個数検出手段は、入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定する判定手段と、該判定手段の判定出力に基づいて値が１であるビットの個数を２進表現で出力する２進化手段とを備える。
【００３４】
【発明の実施の形態】
以下、図面を参照しながら、本発明の実施の形態を詳細に説明する。
【００３５】
（実施形態１）
本実施形態では、複数の多ビットデータの加算方法について、８ビットデータ列７個を加算する演算を例として説明する。
【００３６】
図１は、本実施形態を表す図である。ここでは、８ビットのデータ列を７個加算するために、まず、７個の８ビットデータ列をそれぞれ桁ごとに一括加算する第１の加算工程を行なう。この加算は後に詳細に構成を説明するが、n 入力中何個がhighであったかをバイナリーモード( 図１ではS(pq) で示している。（ pは桁の重み、 qはS の中での桁の重みを表わす）) で出力する機能を持つブロック１１を用いて行う。
【００３７】
以下、この機能を持つブロック１１をNumber Detector と称し、NDと略記する。図１では、このND１１というブロックを１つの箱で表している。箱の中の数字は、"/" の前後がそれぞれ入力数(In)と出力数(Out) を示している。この出力数は入力数で決定され、Out=〔Log2(In)〕で表わせる。ここで〔a〕 はZ>a となる最小の整数Z を表わすとする。
【００３８】
本実施形態では、この第１の加算工程を並列に処理するため、演算速度は各NDの中で最も遅いNDの速度により決定される。ここでは、演算速度は全て同じであるから１つのNDの演算速度で決定される。本実施形態では、データ列が８ビットであるから８個のNDを用いる。また、７個の８ビットデータ列加算を行う演算のため、NDへ入力される最大の入力数は７個となる。
【００３９】
通常の加算演算では、キャリーが発生するため、そのキャリー伝搬により演算速度が遅くなる。これに対し、本実施形態では、一括加算を行いキャリーの無い加算演算を並列処理で行うことに特徴があり、高速化が可能となる。本実施形態では、全て８ビットのデータ列７個を加算する例を示したが、これに限定されず、複数個の多ビットデータのビット数が各々異なっていても構わない。
【００４０】
次いで、バイナリーモードで表わされた８個の加算結果を全て加算する第２の加算工程を行うことにより、所望の加算結果Q が高速に得られる。
【００４１】
上記NDについて説明する。まず、図２にA,B,C,D,E の５入力多数決論理回路(majority logic circuit)の回路図を示す。５入力多数決論理回路とは、５入力中３入力以上がHighの場合に出力としてHighが出る論理である。ブール代数(Boolean Algebra) 表現では、A(B+C)(D+E)+C(B+E)(A+D)+E(A+B)(C+D) となり、AND21 とOR22で構成されるCMOS回路で容易に形成できる。ここでは５入力であるが、一般のn 入力に拡張できるのはいうまでもない。
【００４２】
図３の(a) は、５入力多数決論理回路31を複数用いて、 mビット中 nビットが真か否かを判定する回路である。ここで、出力Fi(X1....X7)は、入力の数がi 個以上のときHighを出力することを示す。
【００４３】
さらに図３の(b) は、図３の(a) に相当するアレイ32の出力に、３ビット２進数のバイナリーコードにするための２進化回路33を接続し、NDとして機能する回路を示している。ここでは出力例として、７ビット中５ビットが真である場合を示している。NDの１例として、ここではCMOS回路を使ったNDについて説明したが、これに限定されるものではなく、前述したNDの機能を持っている回路であればよい。
【００４４】
（実施形態２）
本実施形態では、実施形態１の加算を更に高速化するために、第２の加算工程を高速化した例を示す。
【００４５】
図４は、本実施形態の加算器の構成を示している。同図に示すように、第１実施形態でNDから得られた各３ビットの出力データのうち、桁が重ならない加算結果をまとめて１つの10ビットデータ列とすることができる。以上のことを図４の例で説明する。
【００４６】
同図において、楕円の枠で囲まれた桁の３ビット出力データは、お互いに重なる桁が存在しないため、まとめて10ビットデータ列A とすることができる。（加算結果３つをまとめても値の存在しない桁があるが、そこは０とする。この例では1 桁目は０である。）この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで、演算は全く行っていない点が重要である。
【００４７】
このステップで、8 個の加算結果を3 個の10ビットデータ列と変換することができる。遅延時間は、他のステップに比べて無視できるほど小さい。最後に3 個の10ビットデータ列を加算すれば最終的な演算結果が得られる。図４の例では3 個の10ビットデータであるから、図５に示すように、わずか２段の全加算器通過で最終加算結果が求められ、複数の多ビットデータを高速に加算演算が行える。
【００４８】
最大n ビットデータ列をm 個加算する一般的な場合に拡張して説明する。n 個のNDから出力される加算結果は、最大〔Log2m〕 ビットであり、最大でも〔Log2m〕 個の（n+〔Log2m〕 ）ビットデータ列へ変換することができる。最後に〔Log2m〕 個の（n+〔Log2m〕 ）ビットデータ列を加算すれば最終的な演算結果が得られる。全加算器通過段数は、
【００４９】
【外４】
0003658079.tif 000005
で表わせる。ここで、
【００５０】
【外５】
0003658079.tif 000006
は Z≧a となる最小の整数 Zを表わすとする。上式より、多ビットデータの数が増大しても全加算器通過段数は低く抑えられることがわかる。
【００５１】
（実施形態３）
本実施形態では、多ビットデータ同士の乗算について説明する。以下、 8×8 ビット乗算器を例にとって説明するが、これは、一般の m×n ビットの乗算に拡張できる。
【００５２】
被乗数をX(X7 X6 X5 X4 X3 X2 X1 X0)、乗数をY(Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0)として、 X×Y= Qとする。X,Y ともども最大値は１０進数では28-1であるから、Q<(28-1)2<216-1 であり、Q は最大 16 ビットで表わせる。 m×n ビットでは、Q<(2m-1)(2n-1)<2m+n-1 であり、Q は最大m+n ビットである。
【００５３】
まず、図６に示すように、 X×Yjという部分積を生成する。通常の CMOS 乗算器の様に、被乗数であるX の各ビットXiと乗数であるYjとの ANDをとって部分積を求めても構わないが、ここでは、図７に示すように、ゲート電極を共通化した単なるnMOSトランジスタを用い簡素化した。１例としてnMOSトランジスタを用いているが、その他のトランスミッションゲートMOS トランジスタ等でも構わないのはいうまでもない。
【００５４】
初期状態ではXi=Low(0),Yj=high(1)とし、出力は全て0 としておくと良い。そしてYjをLow 状態にした後に、Xiを入力する。演算時はこの状態でYjにhigh(1) もしくはLow(0)を入力する。即ちYjがhighの時はゲート電極にhigh信号が入力され、nMOSトランジスタがオン状態になり、
0003658079.tif 000007
なる8 ビットデータ列が生成される。YjがLow(0)の時はゲート電極にLow 信号が入力されるため、nMOSトランジスタはオフ状態になり、初期状態のまま８ビットデータ列(0、0、0、0、0、0、0、0が生成される。これにより、通常の AND回路より小さい回路規模で X×Y のAND を形成することができるが、通常のAND 回路を用いてもよい。
【００５５】
次いで、図６で示された部分積の各桁の和をそれぞれ桁ごとにNDにより一括加算する。この加算工程は並列で処理するため、高速演算に適しているのが特徴である。 m×n ビットの乗算回路では（m+n-1)個のNDを用いる。NDへ入力される最大の入力数はMin(m,n)となる。図６に示すように 8×8 ビット乗算器の例では、このNDを15個用いる。最大の入力数は8 である（X7Y0+X6Y1+X5Y2+X4Y3+X3Y4+X2Y5+X1Y6+X0Y7 なる演算を行っているところ）。
【００５６】
ただし、これは、１入力１出力という、そのまま配線を延ばせば済むところもNDを用いた場合の数であり、それを除くと（m+n-3 ）個のNDを用いる。さらに2 入力2 出力のHAですむところを除き（HAもNDの一種であるがここでは区別する）、3 入力以上の場合にのみNDを用いることにすると（m+n-5 ）個のNDで良い。
【００５７】
通常、３入力以上であると加算演算も複雑になり、特にキャリーが発生するためその伝搬により演算速度が遅くなる。本実施形態は一括加算を行いキャリーの無い演算を行うことに特徴があり、高速化が可能となる。図８は図６をブロック図で示した。簡単化のため部分積形成部は入力部として省略している。部分積形成部はＡＮＤでもよい。ここではNDを１つの箱で表している。
【００５８】
次いで、バイナリーモードで表わされた(m+n-1) 個の加算結果を全て加算する第２の加算工程を行うことにより、所望の乗算結果Q が高速に得られる。
【００５９】
更に加算回数を減じるために、実施形態２と同様に、次の演算方式を導入する。すなわち、それぞれ（m+n-1 ）個のNDから出力される加算結果は最大〔Log2(Min(m,n))〕ビットであるので、最終的な乗算結果Q の(m+n）ビットのうち、ほんの１部の桁しか各々使用していない。図６の例ではNDからの出力は、最大４ビットであり、一方最終的な乗算結果は16ビットである。従って（m+n-1 ）個のNDから出力される加算結果のうち、桁が重ならない加算結果をまとめて１つの（m+n ）ビットデータ列とすることができる。
【００６０】
以上のことを図６の例で説明する。楕円で囲まれた桁のNDからの加算結果は、お互いに重なる桁が存在しないため、まとめて16ビットデータ列B とすることができる。（NDからの加算結果4 つをまとめているが、それでも値が存在しない桁は０とする。この例では２〜４桁及び8 、12、15、16桁は０である。）この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで演算は全く行っていない点が重要である。
【００６１】
このステップで、（m+n-1 ）個の加算結果を、〔Log2(Min(m,n))〕個の（m+n ）ビットデータ列と変換することができる。遅延時間は、他のステップに比べて無視できるほど小さい。最後に〔Log2(Min(m,n))〕個の（m+n ）ビットデータ列を加算すれば、最終的な演算結果が得られる。
【００６２】
図６、８の例では、４個の16ビットデータであるから、図９のように、わずか２段の全加算器通過で最終積が求められる。一般に、全加算器通過段数は、実施形態２と同一の記号を用いて、
【００６３】
【外６】
0003658079.tif 000008
で表わせる。
【００６４】
図10は、横軸にMin(m,n)を、縦軸に全加算器通過段数をとったグラフである。このグラフに示すように、m,n が大きくなっても、全加算器の通過段数は、２度log をとるため、小さく抑えられている。即ち多ビット化しても高速性が保たれる。
【００６５】
以上の演算方法のフローチャートを図11に示す。
【００６６】
先ず、ステップs111で、AND 回路もしくはスイッチ等により、 X×Yjという部分積を生成する。次に、ステップs112で、NDにより、生成された部分積 X×Yjのそれぞれの桁同士を一括して、並列に加算する。続いて、ステップs113で、ステップs112の加算結果のうちで桁の重なりのない項をまとめて１つのデータとする。但し、上述したように、このステップに対応する装置の動作はなく、ND出力と後段の全加算器の入力との接続関係によってなされるものである。最後にステップs114で、ステップs113でまとめられたデータを全加算器により加算する。
【００６７】
次いで、今回使用したNDをはじめ、上記演算方法を実行する実際の乗算回路について、図12を用いて説明する。被乗数入力部71は被乗数X を入力する。乗数入力部72は乗数Y を入力する。部分積生成部73は、AND 回路もしくは図７で示したようなスイッチ部等であり、部分積を生成する。前述したように、その他の構成の回路で部分積を生成してもよい。ND74は、複数の多ビットデータ（ここでは各部分積）の同じ桁を一括並列加算を行う。
【００６８】
図13は、７入力のNDを表した模式図である。ここでは、実施形態１のものとは異なる構成のものを用いており、多数決論理回路ブロック131-A 、131-B 、131-C 、インバータ132 を有する。端子134 、135 にも、入力端子133 に入力される信号と同様の信号が入力される。端子136 、137 、138 は、前段の多数決論理回路ブロックからの出力信号を入力する端子であり、図中、2C、4Cは、通常の入力端子に接続された容量をC としたときに、入力端子136 、137 、138 に対応して接続される容量値を示している。同図において、信号はそれぞれ多数決論理回路ブロック131-A 、131-B 、131-C に入力される。
【００６９】
例えば、７入力の多数決論理回路ブロック131-A に入力されると、HIGH LEVELの数が過半数の場合、つまり７入力中４入力以上がHIGH LEVELであった場合、多数決論理回路ブロック131-A からはHIGH LEVELが出力される。同様に、例えば１１入力の多数決論理回路ブロックでは、６入力以上がHIGH LEVELであった場合、１３入力の多数決論理回路ブロックでは、７入力以上がHIGH LEVELであった場合に、それぞれHIGH LEVELが出力される。７入力の多数決論理回路ブロックの出力値を入力のHIGH LEVELの数ごとに示すと、表１のS3のようになる。
【００７０】
次に、図13に示すように、７入力の多数決論理回路ブロック131-A の出力をインバータで極性反転して、多数決論理回路ブロック131-B の重みづけ入力端子136 に印加する。多数決論理回路ブロック131-B の回路構成を図14に示す。同図において、キャパシタ212 は、他の入力端子経路に接続するキャパシタ202 のおよそ４倍の容量値を持つ。同回路は入力端子経路に接続するキャパシタ値を仮にC とすると、11個のC が共通接続されそのうち４つのC に重み付け入力端子からの信号が印加され他の７つの端子には131-A に入力されたものと同じ信号が印加される構成の１１入力多数決論理回路である。
【００７１】
例えば７入力中４入力以上がHIGH LEVELであった場合、先に述べたように重み付け入力端子にはLOW LEVEL が印加される。さらに重み付け入力端子以外の入力端子に加えられる信号のうち７入力中６入力以上がHIGH LEVELであった場合、トータルとして１１入力多数決論理回路は過半数であるとの判定を下しHIGH LEVELを出力する。７入力中４入力以上５入力以下の場合は過半数に至らずLOW LEVEL を出力する。一方、７入力中３入力以下がHIGH LEVELであった場合には重み付け入力端子にはHIGH LEVELが印加される。７入力中２入力以上３入力以下がHIGH LEVELであった場合は、4+2 または4+3 となり６以上であるので、過半数と判定されてHIGH LEVELが出力される。１入力以下がHIGH LEVELであった場合は、4+0 または4+1 となり５以下であるのでLOW LEVEL が出力される。
【００７２】
多数決論理回路ブロック131-B の出力値を入力のHIGH LEVELの数ごとに示すと、表１のS2のようになる。多数決論理回路ブロック131-C についても４倍の容量値、２倍の容量値を有する二つの重み付け端子に、多数決論理回路131-A 、多数決論理回路131-B の出力の反転信号を印加して動作させることにより、表１のS1に示したような出力が得られる。
【００７３】
本回路構成により、表１に示したように複数入力のうちハイレベル入力の数を３桁の２進数に変換して出力することができる。
【００７４】
図15に多数決論理回路ブロックの模式回路図を示す。この多数決論理回路ブロックは、リセットスイッチ201 、キャパシタ202 、信号転送スイッチ203 、センスアンプ205 、センスアンプ内のインバータ206 、センスアンプ内の第二のインバータ204 、インバータ206 をリセットするための第２のリセットスイッチ207 、リセット電源208 、第二のリセット電源210 、出力端子211 、キャパシタ 202の共通接続された一端につく寄生容量209 を備える。図15は、これを模式的に表わしたものであるがこれに限るものではない。
【００７５】
図16は、図15の回路の動作タイミング説明図である。同図を用いてその動作を説明すると、まずリセットパルスφRES により、キャパシタ202 の一端をリセットする。リセット電圧は、例えば電源電圧が5V系であった場合、そのほぼ半分の2.5Vを用いる。リセット電圧はこれに限るものではなく、他の電圧でも良い。この時ほぼ同時に、センスアンプ内のインバータ206 の入力端を、リセットスイッチ207 を導通させることによりリセットする。この時リセット電圧は、インバータの出力が反転する論理反転電圧近傍の値が選ばれる。リセットパルスφRES をOFF すると、キャパシタ 202の両端はそれぞれのリセット電位に保持される。
【００７６】
次に転送パルスφT により転送スイッチ203 が導通すると、信号がキャパシタ 202の一端に転送され、キャパシタの一端の電位は、例えば2.5Vのリセット電圧から、LOW LEVEL に相当する0V、もしくはHIGH LEVELに相当する5Vに変化する。ここでキャパシタ 202の容量をC 、寄生容量の容量値をCoとし、キャパシタ 202がN 個並列に接続されていると仮定すると、キャパシタ202 の共通接続された一端は、一個の入力に対して、容量分割により、インバータの論理反転電圧近傍から±〔2.5C/(C0+CN)〕×|V| だけ変化する。
【００７７】
インバータ 206の入力端電圧が論理反転電圧から変化すると、インバータ 206の出力端電圧はそれに応じて反転する。N 個の入力にそれぞれ信号が入力されると、インバータ 206の入力端には容量分割出力のN 個の和が入力される。結局、N 個の入力のうちHIGH LEVELの信号数が過半数であれば、インバータ 206の入力端は論理反転電圧より高電位にシフトして、センスアンプの出力端211 にはHIGH LEVELが出力される。一方、LOW LEVEL の信号数が過半数であれば、LOW LEVEL が出力される。以上の様に構成することで、図15の回路は、複数入力のうち過半数を占める論理値を出力する多数決論理回路として機能する。
【００７８】
図13では、一例として７入力のNDを示しているが、もちろんこれに限るものではなく、さらに多入力に容易に拡張できる。また多数決論理回路と多数決論理回路の間にラッチ回路等をいれてパイプライン処理を行ない、更に高速化する構成をとることも自由にできる。
【００７９】
NDが必要とする多数決論理回路ブロックの数は、NDへの入力数n に対して〔Log2n〕 で表わせる。一方、NDへの入力数はm ×n ビットの乗算器では、1 からMin(m,n)までの値をとるが、演算時間は、明らかに入力数が最大となるMin(m,n)入力のNDが最も長い。これは、多数決論理回路の段数が入力数n に対して〔Log2n〕 で増加していくからである。しかしながら、ビット数が増えてもこの段数はLog 関数で増加するため、大きくは増大しないのは明らかである。
【００８０】
並列演算であるので、入力数最大であるMin(m,n)入力のNDの演算速度で、複数のND74での演算が終了する。早めに演算が終了するNDについては、ラッチ回路78等を設けて、タイミングを揃えると好ましいが、特にそれに限定されない。
【００８１】
このようにNDを構成すると、並列演算であるので高速で、且つ素子数も少なく低消費電力化が可能なNDが形成でき、前述の実施形態の演算方法の特性を、大きく改善することができる。
【００８２】
次に、アルゴリズム上では、複数のNDから出力されたデータを１つのデータ列にまとめるステップがあるが、回路的には特に何も処理しないのは既に述べたとおりであり、図12には、特にこのステップに対応する回路は存在しない。全加算器75、76、77は、図６で示した 8×8 ビットの乗算の例では、16ビット以下の加算器となる。この図12では、 8×8 ビットの乗算器なので、３つの加算器が必要であり、段数は２段である。ここでは、加算器として通常のCLA(Carry Look Ahead) 型の全加算器を用いたが、これに限定されないことは言うまでもない。
【００８３】
また、ここでは、加算器と加算器の間にラッチ回路79を設けて、２段目の加算器が演算している間に初段の加算器にも演算を行わせる、いわゆるパイプライン方式をとって高速化しているが、この方式に限定されるものではない。演算結果出力部80は、演算結果を、ここでは 8×8 ビットの乗算の例であるので、16ビットで出力する。
【００８４】
以上のように乗算回路を構成することで、素子数が少なく、消費電力が少ない、且つ並列演算のため高速な乗算器が形成できる。
【００８５】
（実施形態４）
実施形態１−３の並列一括加算を行うND部の他の構成について説明する。
【００８６】
図17に、本実施形態に用いるNDの模式図を示し、並列演算回路ブロック401 、ラッチ回路12を有する。図18に並列演算回路ブロック401 の回路図を示す。同図において端子501 、502 、503 は第１、第２、第３の重み付け入力端子である。各端子には他の入力端子経路に接続するキャパシタ2 のおよそ１倍、２倍、３倍の容量値を持ったキャパシタが設けられている。本実施形態の動作タイミング図を図19に示す。並列演算回路ブロック401 は、パルスφRES 、φT によって動作する。ラッチ回路12は、パルスφPHによって動作する。
【００８７】
初めに、図18を用いて基本動作を説明すると、まず、入力信号がラッチ回路12-Aにラッチされる。この時パルスφSET により、重み付け端子501 、502 にはLOW LEVEL に相当する0Vが、503 にはHIGH LEVELに相当する5Vが印加される。次にリセットパルスφRES によって、キャパシタ202 の両端の電圧は、それぞれのリセット電圧にリセットされる。
【００８８】
次に、転送パルスφT により転送スイッチ203 が導通すると、信号がキャパシタ 202の１端に転送され、キャパシタの１端の電位は例えばLOW LEVEL 、もしくはHIGH LEVELに変化する。キャパシタ 202の共通接続された１端は入力に対して容量分割によって変化する。インバータ 206の入力端電圧が論理反転電圧から変化すると、インバータ 206の出力端電圧はそれに応じて反転する。N 個の入力にそれぞれ信号が入力されると、インバータ 206の入力端には、容量分割出力のN 個の和が入力される。
【００８９】
本実施形態では、３倍の容量値を持つ重み付け端子503 と、１倍および２倍の容量値を持つ重み付け端子501 、502 とに、反対極性の信号が印加されるため、キャパシタ 2の共通接続された１端での電圧変化量が、相互に打ち消される。重み付け入力端子以外の各入力に設けられたキャパシタ 2は、ほぼ同じ容量値を有しているので、結局、N 個の入力のうち、HIGH LEVELの信号数が過半数であれば、インバータ 206の入力端は、論理反転電圧より高電位にシフトして、センスアンプの出力端211 にはHIGH LEVELが出力される。一方、LOW LEVEL の信号数が過半数であれば、LOW LEVEL が出力される。
【００９０】
以上の様に構成することで、図18の回路は、複数入力のうち過半数を占める論理値を出力する多数決論理回路として機能する。図17は、１例として７入力のNDを示している。
【００９１】
同図において、信号はそれぞれ多数決回路ブロック401 に入力される。多数決論理回路ブロック401 は、入力端子経路に接続するキャパシタ値を仮にC とすると、13個のC が共通接続され、そのうち３つのC に重み付け入力端子からHIGH LEVELの信号が印加され、別の３つのC に重み付け入力端子からLOW LEVEL の信号が印加され、他の７つの端子には402 からの信号が印加される構成の、１3 入力多数決論理回路と見ることができる。
【００９２】
よって、入力値が入力されると、HIGH LEVELの数が過半数の場合、つまり、７入力中４入力以上がHIGH LEVELであった場合、多数決論理回路ブロックからHIGH LEVELが出力される。13入力の多数決論理回路ブロックの出力値を入力のHIGH LEVELの数ごとに示すと、表１のS3のようになる。次にパルスφLAT1、φLAT2によって、出力信号はラッチ回路12にラッチされる。例えば、７入力中４入力以上がHIGH LEVELであった場合、重み付け入力端子501 にはHIGH LEVELが、502 、503 にはLOW LEVEL が、それぞれ印加される。
【００９３】
更に、重み付け入力端子以外の入力端子に加えられる信号において、７入力中６入力以上がHIGH LEVELであった場合、トータルとして１３入力多数決論理回路は過半数であるとの判定を下し、HIGH LEVELを出力する。７入力中４入力以上５入力以下の場合は、過半数に至らずLOW LEVEL を出力する。同様に、重み付け端子に印加する信号を、出力信号の極性およびスイッチ403 の切り替えにより変えることで、表１に示すような出力を得ることができる。
【００９４】
本回路構成により、表１に示すように、複数入力のうちハイレベル信号の入力の数を、３桁の２進数に変換して出力することが、非常に小規模な回路で、かつ低消費電力できるものである。後は、実施形態３と同様であるが、以上のように構成することで、素子数がさらに少なく、小規模で消費電力が少なく、且つ並列演算のために高速な半導体装置が形成できる。
【００９５】
（実施形態５）
実施形態１−４の並列一括加算を行うND部の他の構成について説明する。
【００９６】
実施形態3 の15個のNDを複数個まとめてしまい、演算を行う方式である。
【００９７】
図20に、 2×2 乗算器に用いる 2×2 多数決論理回路を基にその例を示す。即ち、実施形態３の図13の初段の多数決論理回路である。１桁目（20の桁であるx0y0）は単位容量Ｃに入力される。2 桁目（21の桁であるx1y0及びx0y1）の２つはそれぞれ２倍の容量２Ｃを持つ端子に入力されるため、１入力で２カウントされることになる。さらに3 桁目（22の桁であるx1y1）は22の重み付けがなされ、１入力で４カウントされる。
【００９８】
後は実施形態1-4 と同様で、４入力であるが最高７までがバイナリーモードで出力されるNDとなる。この重み付けを行うことにより、並列一括加算機能が更に効率よく行える。
【００９９】
例えば実施形態3 の 8×8 ビットの乗算器で言えば、図21に示すように、桁の重みが0,1,2,3 である桁を加算するNDをND91１つにまとめ、同様に桁の重みが(4,5,6),(7,8,9),(10,11,12,13,14)である領域をそれぞれ１つにまとめることができる( 図中のND92-ND94 ）。
【０１００】
図21のNDには、それぞれ何入力で何出力であるかが数字で示してあるが、最高で56入力をカウントできるNDを用いればよい。それぞれ全て６ビットの出力となる。その６ビットデータ列を桁の小さい順にA,B,C,D とすると、実施形態３の図11のフローチャートにおけるステップS113である新たなデータ列を形成するステップにおいて、A とC 、B とD を、それぞれ１つのデータ列P,Q としてまとめることができる。
【０１０１】
従って、加算演算はP+Q のみを行えばよい。すなわち、この実施形態では、並列一括加算をNDで行うステップと、16ビット加算を１度だけ行うステップの２つのステップで、 8×8 ビットの乗算器演算が実行される。
【０１０２】
後は実施形態3 もしくは実施形態4 と同様であるが、以上のように乗算回路を構成することで、素子数がさらに少なく、小規模で消費電力が少ない、且つ並列演算であり、加算段数が少なくさらに高速な乗算器が形成できる。
【０１０３】
本実施形態では、一般的な重み付けの例として、連続した桁をまとめる例で説明したが、特にこれに限定されるわけでなく、重み付けが連続でない場合や（例えば20の桁と22の桁を合わせて入力する場合）、１つの桁を分割してそれぞれ別のNDに異なる重み付けで入力したりして（例えば28の桁を二つに分割して別のNDに入力する等）、効率化を図ることも自由にできる。
【０１０４】
（実施形態６）
実施形態３−５では、部分積を並列加算するNDが１段あり、その後段に全加算器があるが、NDの後にさらにNDを接続してもよい。図22で32×32ビット乗算器の例で説明する。32入力ND付近の図である。32入力NDは7 ビット出力である。下位ビットは16-31 入力NDまで6 ビット出力であって、この出力はNDによる演算結果としての部分積とみなすこともできる。
【０１０５】
従って、再びNDを用いて各々3 ビットの出力とすることができる。ここまで来るとデータ列としては、３つの64ビットデータＡ、Ｂ、Ｃとなり、全加算段数としては高々２段でよい。加算器とNDの性能にもよるが、特にビット数が多くなる場合には有効である。また実施形態５で示したような重みづけNDと組み合せて使用しても、何ら問題がない。
【０１０６】
（実施形態７）
図23に、本実施形態の乗算器を示す。本実施形態では、実施形態３の図６において、ND出力であるS73,S72,S71,S70 とS102,S101,S100を先に加算する。実際はS73 をS102,S101,S100に加えればよく、単純な３ビット加算器でよい。
【０１０７】
このステップの結果として、実施形態３では４つの１６ビットデータ列が形成されていたものが、本実施形態では、３つの１６ビットデータ列Ａ、Ｂ、Ｃが形成されることになり、実施形態３と比較すると、更に素子数が軽減される。
【０１０８】
（実施形態８）
実施形態８では、３個のデータの乗算演算の演算方法を示す。簡単な例として、２ビットデータで説明するが、多ビットで且つ各データのビット数が異なっていても同様に実現でき、また３個に限ることなく、任意の複数個のデータに拡張できる。
【０１０９】
乗算数をA(a1 a0),B(b1 b0),C(c1 c0)とする。A ×B ×C を行うが、図24に示すように、Σaibjckなる部分積が生じ、それらの和をとれば、乗算結果Q が得られる。Σaibjckなる部分積形成には、これまでの実施形態と同様に、それぞれのAND をとればよい。３個以上のデータになってもこの部分積の演算速度は速く、並列処理により部分積が形成できる。
【０１１０】
次いで、この部分積の同じ桁同士の一括加算を行う。図24の例では、各同じ桁同士をそれぞれ一括加算行っているが、これまでの実施形態で述べたように、重みづけを行ったり、その他のステップを交えても構わないことはいうまでもない。続いて図24では、楕円で囲まれた桁の一括加算出力結果を、重なり桁が無いことから１つのデータ列として、結局３個の７ビットデータ列とし、それらを足し合わせて３個の３ビットデータの乗算演算結果Q を得る。
【０１１１】
詳細には、７ビットデータ列のうち、下２桁(20,21の桁）は加算の必要が無く、それぞれS00,S10 がそのまま出力結果である。従って、２ステップ目の加算工程は、３個の5 ビットデータ列を加算する工程となり、高速な演算が行える。
【０１１２】
このように、３個以上のデータ列の乗算においても、本発明の演算方法は効果があり、高速な乗算演算が、素子数も少なくその結果低消費電力化に対応でき形成することができた。
【０１１３】
（実施形態９）
本実施形態では、少なくとも１つの負数を含む複数の多ビットデータの加算方法について、７ビットデータ列６３個を加算する演算を例として説明する。
【０１１４】
ここで、負の数は、２の補数で表現されている。即ち、７bit の内の最上位ビット０は符号(sign)を表し、０ならば正の数、１ならば負の数であり、データ列Ｘ＝(X6X5X4X3X2X1X0)は
【０１１５】
【外７】
0003658079.tif 000009
【０１１６】
図２５は、本実施形態を表す図である。ここでは、８ビットのデータ列を７個加算するために、まず７個の８ビットデータ列をそれぞれ桁ごとに一括加算する。この第１の加算は前述した実施形態と同様、ＮＤを用いて行なわれる。本実施形態では、データ列がフラグも含めて７ビットであるから７個のNDを用いる。
【０１１７】
この加算工程は並列で処理するため、演算速度は単体のND自体の速度で決定される。演算速度は全て同じであるから１つのNDの演算速度で決定される。また、ここでは６３個の７ビットデータ列を加算するため、NDへの最大の入力数は、６３個となる。
【０１１８】
通常の加算演算では、キャリーが発生するため、そのキャリー伝搬により演算速度が遅くなるのに対し、本実施形態では、フラグも含めて一括加算を行いキャリーの無い加算演算を並列処理で行うので、加算段数を減じることができ、高速化が可能となる。本実施形態では、全て７ビットのデータ列６３個を例として示したが、これに限定されることなく、少なくとも１つの負数を含む複数個の多ビットデータのビット数が各々異なっていても構わない。
【０１１９】
次いでバイナリーモードで表わされた８個の加算結果を全て加算する、第２の加算工程を行うことにより所望の加算結果Q が高速に得られる。
【０１２０】
ここで、正または負を示すフラグビットについて説明する。
【０１２１】
フラグビットが１の時、２の補数表現であるから、(-1)・26 を示す。従って、６３個のうち１の数がｎ個ならば、数としては-n・26 を表す。最小値はｎが６３の時で、その時、-63・26 = -(26-1)・26 となり、絶対値において 212を越えない。そこで、この負の数を２の補数として、１３ビット目をフラグとして用い、ｎの２進表示を(SF5,SF4,SF3,SF2,SF1,SF0) 、その反転を(BSF6,BSF5, …,BSF0)とすると、
【０１２２】
【外８】
0003658079.tif 000010
Ａ−|F| = Ａ+ F   （|F| + F = 0 , 13ビット目が 1+1で０になり14ビット目はない）となるので、Ｆを加算すればよい。
【０１２３】
図２５では、operandsのフラグビットをNDで２進表示SFにし、その反転をとることで、 BSFを生成する。更に、マイナスを表すフラグデータの２の補数表示のための１を、７ビット目、１３ビット目に加えることにより、Ｆが形成できる。
【０１２４】
次いで、バイナリーモードで表わされた７個の加算結果を全て加算する第２の加算工程を行なうことにより、所望の加算結果Q が高速に得られる。
【０１２５】
フラグビットも数値を表すビットと同様に扱えることは上記に示した通りであり、少なくとも１つの負数を含む６３個の７ビットデータが、NDを通すことにより、７つの６ビットデータに変換される。フラグに対しての２の補数変換のための７ビット目と１３ビット目の１は、例えば、図２５の(b) に示すように、それぞれＳon、 BSFのデータ列に加えれば、演算を行なうことなくとり込むことができる。
【０１２６】
この方法で１３ビット目をフラグとして用いることができ、
【０１２７】
【外９】
0003658079.tif 000011
上述の計算を数値的に記述すると、Ｘijが i個目のデータ列の (j+1)ビット目を表すとして、
【０１２８】
【外１０】
0003658079.tif 000012
従って、 out≧0 の時は、上式より、
【０１２９】
【外１１】
0003658079.tif 000013
すなわち、１３ビット目は１が加わり０となる。
【０１３０】
一方、 out<0の時は、
【０１３１】
【外１２】
0003658079.tif 000014
１３ビット目は１のままであり、負の数である。
【０１３２】
一般化すると、ｍビット目がフラグビットであり、ｎ個あるoperandsをNDを用いて加算（減算）演算するには、 m+〔log2n〕目に１を立て、ｍビット目に１を加える２の補数化を行なえば、フラグビット以外の他の数値ビットと同等にフラグビットを扱え、演算が容易に行なえる。
【０１３３】
（実施形態１０）
本実施形態では、実施形態９の加算を更に高速化するために、第２の加算工程を高速化した例を示す。
【０１３４】
図２６は、本実施形態の加算器の構成を示している。同図はフラグ込みで８ビットのデータ７個を加算する例であり、NDから得られた各３ビットの出力データのうち、桁が重ならない加算結果をまとめて１つの11ビットデータ列とすることができる。以上のことを図２６の例で説明する。フラグビットに関しては、実施形態９で示したように、２の補数として考え、ＮＤの出力をインバータを通している。更に１を加えるために、３ビットの出力データと、0001で表されるデータとを全加算器で加算するが、これに限るものではない。また、実施形態９と同様、(a) で示されるＭＳＢの１が存在する。
【０１３５】
同図において、楕円の枠で囲まれた桁の３ビットもしくは４ビットの出力データは、お互いに重なる桁が存在しないため、まとめて11ビットデータ列 Aとすることができる。（加算結果３つをまとめても値の存在しない桁があるが、そこは０とする。この例では1 桁目は０である。）この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで、演算は全く行っていない点が重要である。
【０１３６】
このステップで、8 個の加算結果を3 個の11ビットデータ列と変換することができる。遅延時間は、他のステップに比べて無視できるほど小さい。最後に3 個の11ビットデータ列を加算すれば最終的な演算結果が得られる。図26の例では3 個の11ビットデータであるから、図５に示すように、わずか２段の全加算器通過で最終加算結果が求められ、複数の多ビットデータを高速に加算演算が行える。
【０１３７】
最大n ビットデータ列をm 個加算する一般的な場合に拡張して説明する。n 個のNDから出力される加算結果は、最大〔Log2m〕 ビットであり、最大でも〔Log2m〕 個の（n+〔Log2m〕-1)ビットデータ列へ変換することができる。最後に〔Log2m〕 個の（n+〔Log2m〕-1)ビットデータ列を加算すれば最終的な演算結果が得られる。全加算器通過段数は、
【０１３８】
【外１３】
0003658079.tif 000015
で表わせる。上式より、多ビットデータの数が増大しても全加算器通過段数は低く抑えられることがわかる。
【０１３９】
また、フラグビットのところで小さな全加算器を通しているが、これを１段とすると、
【０１４０】
【外１４】
0003658079.tif 000016
となる。一方、そこに全加算器を持たせずに、フラグビットをｌとした時、ｌビットのみが１となるデータ列を最後に加算すると考えると、データ列は 〔Log2m〕＋１個あると考えられるので、全加算器通過段数は、
【０１４１】
【外１５】
0003658079.tif 000017
で表せる。いずれにせよ、ビット数が増えても、全加算器通過段数は低く抑えられることがわかる。
【０１４２】
（実施形態１１）
本実施形態では、少なくとも１つ以上の負数を含む複数の多ビットデータの加算方法について、７ビットデータ列６３個を加算する演算を例として説明する。
【０１４３】
ここで、負の数は１の補数で表されている。１の補数は、数値ビットに関して単に反転をとればよいため、前処理を簡素化しやすいというメリットがある。
【０１４４】
図２７は、本実施形態を表す図である。ここでは、７ビットのデータ列を６３個加算するために、まず６３個の７ビットデータ列をそれぞれ桁ごとに一括加算する。この加算は６３入力６出力のNDで行なう。
【０１４５】
本実施形態では、この加算工程を並列に処理するため、演算速度は各NDの演算速度で決定される。本実施形態では、データ列が７ビットであるから７個のNDを用いる。また、６３個の７ビットデータ列加算を行う演算のため、NDへ入力される入力数は６３個となる。
【０１４６】
通常の加算演算では、キャリーが発生するため、そのキャリー伝搬により演算速度が遅くなる。これに対し、本実施形態では、一括加算を行いキャリーの無い加算演算を並列に行うことに特徴があり、加算段数が減じられ、高速化が可能となる。本実施形態では、全て７ビットのデータ列６３個を加算する例を示したが、これに限定されず、少なくとも１つ以上の負数を含む複数個の多ビットデータのビット数が各々異なっていても構わない。
【０１４７】
次いで、バイナリーモードで表わされた８個の加算結果を全て加算する第２の加算工程を行うことにより、所望の加算結果Q が高速に得られる。
【０１４８】
なお、フラグビットに関しては、実施形態９と同様であるが、１の補数を２の補数に変えるために、フラグの数（負のデータ列の数）だけ加算する必要がある。それが(SF5,SF4,SF3,SF2,SF1,SF0) で表されるデータで、図中(a) で示されている。これもNDよりの出力であり、その反転をインバータで形成し、データ列BSF を形成している。(b) はマイナスを示すフラグデータの１の補数表示のための１である。このNDとしては、図１３あるいは図１７につき説明したものを利用できる。
【０１４９】
（実施形態１２）
本実施形態は、実施形態１０の８個のNDを複数個まとめてしまい、演算を行なうものである。図２８に、Ｘ（X1X0で表す）＋Ｙ（Y1Y0で表す）の２ビット加算器の例を、多数決論理回路をもとに説明する。
【０１５０】
１桁目X0、Y0は単位容量Ｃに入力される。そして２桁目X1、Y1の２つは、各々２倍の容量２Ｃを持つ端子に入力されるため、１入力で２カウントされる。
【０１５１】
例えば実施形態１０の場合、図２９に示すように、桁の重みが０，１，２である桁を加算するNDを１つのND９１にまとめ、同様に桁の重みが３，４，５である領域を１つのND９２にまとめることができる。図２９のNDには入力数および出力数が数字で示してあるが、最高で２１入力を最大４９までカウントできるNDを用いればよい。それぞれ６ビットの出力となる。ND９１では、０桁目が単位容量Ｃに入力され、１桁目は２Ｃ、２桁目は２2 ＝４Ｃに入力される。
【０１５２】
また、フラグビット（８ビット目）と数値ビット（７ビット目、ＭＳＢ(most significant bit)）とを合わせることが可能である。図２９では、フラグビットはインバータを通してND９３に入力する。前述の実施形態では、ND通過後にインバータを通して反転させたが、どちらでも構わない。但し本実施形態によれば、NDの総容量は、(2n-1)Ｃ（ｎは整数）とする。
【０１５３】
更に、２の補数用の(00010) を加え、重み付けとして2Cの容量へ入力する。一方、数値ビットはＣの容量へ入力する。図２９に示すように、各出力と２の補数用の１１ビット目の１を加え、データ列としては一気に２つ減少させられるため、２つのデータ列を加算すればよい。重み付けを利用することにより、更に処理が並列化され、高速化、必要な素子数やパワーの低減に寄与する。
【０１５４】
本実施形態では、一般的な重み付けの例として、連続した桁をまとめる例を中心に説明したが、これに限定されることなく、重み付けが連続でない場合（例えば、20の桁と22の桁とを合わせて入力する場合）、１つの桁を分割してそれぞれ別のNDに異なる重み付けで入力したりして、効率化を図ることも自由にできる。
【０１５５】
（実施形態１３）
本実施形態では、複数の多ビットデータの加算方法について、８ビットデータ列７個を加算する演算を例として説明する。
【０１５６】
図３０は、本実施形態を表す図である。ここでは、８ビットのデータ列を７個加算するために、まず７個の８ビットデータ列をそれぞれ桁ごとに一括加算する。この加算はNDで実行する。
【０１５７】
第２実施形態と同様、この加算工程の演算速度は１つのNDの演算速度で決定され、８個のNDを用い、NDへ入力される最大の入力数は７個となる。また、キャリーの無い加算演算を並列処理で行うことで高速化が可能となり、複数個の多ビットデータのビット数が各々異なっていても構わないのも上述実施形態と同様である。次いで、バイナリーモードで表わされた８個の加算結果を全て加算する第２の加算工程を行うことにより、所望の加算結果Q が高速に得られる。
【０１５８】
この加算工程を行なうにあたって、全てを単純に足し合わせるのではなく、複数のデータを１つのデータにまとめあげることで、更に効率化を図ることができる。そのために、図３０で一括加算した結果のMSB に注目すると、各々Si2(０≦ｉ≦７）であるが、どのデータもお互いに重なることなく、データ列
【０１５９】
【外１６】
0003658079.tif 000018
と表せる。各々次の桁も、LSB (least significant bit) も同様に１つのデータ列となる。これらのデータ列を形成するステップは演算を要さない。
【０１６０】
上述のステップを一般化する。３桁目であるI4(I=T,U,・・・,Z) を一括加算すると、S30,S31,S32 という３つのデータが生じるが、各々桁としては、3+0,3+1,3+2 である。ｍ桁目(m≦1)を一括加算すると、 m+n(〔Log2(IN)〕 ≧n ≧0, IN はデータ数、ここではIN=7であるから 2≧ n≧0)の桁にデータが生じる。m'（m'≠m)桁目を一括加算すると、同様にm'+n桁目にデータが生じる。 m+n≠m'+nであるから、これらのデータの桁は重ならない。よって演算なしで１つのデータとすることができる。この効率化により、図３０の例では、３つのデータＡ、Ｂ、Ｃにまとめることができる。この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで、演算は全く行っていないのは実施形態２と同様である。
【０１６１】
このステップで、8 個の加算結果を3 個の８ビットデータ列と変換することができる。遅延時間は、他のステップに比べて無視できるほど小さい。最後に3 個の８ビットデータ列を加算すれば最終的な演算結果が得られる。図30の例では3 個の８ビットデータであるから、図５に示したような、わずか２段の全加算器通過で最終加算結果が求められ、複数の多ビットデータが高速に加算できる。
【０１６２】
最大n ビットデータ列をm 個加算する一般的な場合に拡張して説明する。n 個のNDから出力される加算結果は、最大〔Log2m〕 ビットであり、〔Log2m〕 個のデータ列へ変換することができる。最後に〔Log2m〕 個のデータ列を加算すれば最終的な演算結果が得られる。全加算器通過段数は、
【０１６３】
【外１７】
0003658079.tif 000019
で表わせる。上式より、多ビットデータの数が増大しても全加算器通過段数は低く抑えられることがわかる。なお、この効率化は２つ以上のデータであれば適用できることは明らかである。
【０１６４】
（実施形態１４）
本実施形態では、図３１につき、多ビットデータ同士の乗算について説明する。以下、 8×8 ビット乗算器を例にとって説明するが、これは、一般の m×n ビットの乗算に拡張できる。
【０１６５】
被乗数をX(X7 X6 X5 X4 X3 X2 X1 X0)、乗数をY(Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0)として、 X×Y= Qとする。実施形態３で説明したように、 Qは最大 16 ビットで表わせる。 m×n ビットでは、Q は最大m+n ビットである。
【０１６６】
まず、図31に示すように、 X×Yjという部分積を生成する。そのために、通常の CMOS 乗算器の様に、被乗数であるX の各ビットXiと乗数であるYjとの ANDをとって部分積を求める。他の方法、例えば実施形態３で説明した方法等でも構わない。
【０１６７】
次いで、図31で示された部分積の各桁の和をそれぞれ桁ごとにNDにより一括加算する。この加算工程は並列で処理するため、高速演算に適している。 m×n ビットの乗算回路では（m+n-1 ）個のNDを用いる。NDへ入力される最大の入力数はMin(m,n)となる。図31に示すような 8×8 ビット乗算器の例では、このNDを15個用いる。最大の入力数は8 である（X7Y0+X6Y1+X5Y2+X4Y3+X3Y4+X2Y5+X1Y6+X0Y7 なる演算を行っているところ）。
【０１６８】
ただし、これは、１入力１出力という、そのまま配線を延ばせば済むところもNDを用いた場合の数であり、それを除くと（m+n-3 ）個のNDを用いる。さらに2 入力2 出力のHAで済むところを除き、3 入力以上の場合にのみNDを用いることにすると（m+n-5 ）個のNDで良い。
【０１６９】
通常、３入力以上であると加算演算も複雑になり、特にキャリーが発生するためその伝搬により演算速度が遅くなる。本実施形態は一括加算を行いキャリーの無い演算を行うことで高速化が可能となる。
【０１７０】
次いでバイナリーモードで表わされた(m+n-1) 個の加算結果を全て加算する、第２の加算工程を行うことにより所望の乗算結果Q が高速に得られる。
【０１７１】
更に加算回数を減じるために、実施形態13に則り、データの再配列を行なう。図32の例で説明する。８桁目の部分積の和は４ビットである。 S73に対して、他の一括加算からの出力は３ビットであるから、条件を満たすデータはない。故にこれは１つのデータ (A)である。 S72に関しては、４桁目から12桁目までの部分積が 3ビットデータであり、 S72と重ならないデータが存在する。これは、 Si2(3≦ i≦11）と表せる９ビットデータ (B)となる。同様にして、Si1, Si0も１つのデータとなり、結局 4つのデータ(A,B,C,D) へ再編成できる。前述したように、この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで演算は全く行っていない。
【０１７２】
遅延時間は、他のステップに比べて無視できるほど小さい。このステップで、（m+n-1 ）個の加算結果を、〔Log2(Min(m,n))〕個のデータ列へ変換することができる。最後に〔Log2(Min(m,n))〕個のデータ列を加算すれば、最終的な演算結果が得られる。
【０１７３】
図32の例では、４個のデータであるから、図９のように、わずか２段の全加算器通過で最終積が求められる。一般に、全加算器通過段数は、実施形態 3と同様、
【０１７４】
【外１８】
0003658079.tif 000020
で表わせる。よって、全加算器通過段数は図10のグラフに従い、m,n が大きくなっても、小さく抑えられる。即ち多ビット化しても高速性が保たれ、素子数も削減でき、消費電力を低減させることができる。また、 S73と Si2の加算は、11桁目以上での加算(S73+S112 S102 S92 S82) なので４ビット（桁上りを入れて出力は 5ビット）の加算器でよい。以上の演算方式は、実施形態 3と同様の図12の構成の乗算回路により実現できる。
【０１７５】
NDとしては図13の構成のものを利用できる。この回路構成により、図13の表１に示したように複数入力のうちハイレベル入力の数を３桁の２進数に変換して出力することができる。また、この回路は２進数に変換して出力する際に、MSB から出力され、各MSB はほぼ同じタイミングで出力される。このようなNDによれば、ほぼ同じタイミングで出力されるMSB を１つのデータとすることができ、上述の演算におけるデータの圧縮にはより効果的である。
【０１７６】
以上のように乗算回路を構成することで、素子数が少なく、低消費電力で、且つ並列演算のため高速な乗算器が形成できる。
【０１７７】
（実施形態１５）
また、上述した実施形態１３、１４の並列一括加算を行うND部を、実施形態４と同様に図17に示す構成としてもよい。そうすることで、図17の表１に示すように、複数入力のうちハイレベル信号の入力の数を、３桁の２進数に変換して出力することが、非常に小規模な回路で、かつ低消費電力でできる。またこの回路は２進数に変換して出力する際に、MSB から出力される。後は、実施形態１３、１４と同様であるが、以上のように構成することで、素子数がさらに少なく、小規模で消費電力が少なく、且つ並列演算のために高速な半導体装置が形成できる。
【０１７８】
（実施形態１６）
実施形態５と同様、実施形態13の15個のNDを複数個まとめてしまい、演算を行う方式である。NDを図21に示す構成とする。
【０１７９】
図21のNDには、それぞれ何入力で何出力であるかが数字で示してあるが、最高で56入力をカウントできるNDを用いればよい。また、配線としては、21入力でよい。それぞれ全て６ビットの出力となる。次いで再編成によりデータをまとめるが、各MSB であるS105,S85,S45,S05は、実施形態１３の法則に則る。次の桁のS104,S84,S44,S43も１つのデータとなるが、更にMSB のデータ列とも重なる桁がないため、併せて１つのデータ列とできる。これにより、最終的には２つのデータ列にまとめられる。後は実施形態13もしくは14と同様であるが、以上のように乗算回路を構成することで、素子数がさらに少なく、小規模で消費電力が少ない、且つ並列演算であり、加算段数が少なくさらに高速な乗算器が形成できる。
【０１８０】
本実施形態では、一般的な重み付けの例として、連続した桁をまとめる例で説明したが、特にこれに限定されるわけでなく、重み付けが連続でない場合や（例えば20の桁と22の桁を合わせて入力する場合）、１つの桁を分割してそれぞれ別のNDに異なる重み付けで入力したりして（例えば28の桁を二つに分割して別のNDに入力する等）、効率化を図ることも自由にできる。
【０１８１】
（実施形態１７）
７ビットデータ列を６３個加算する例を説明する。図３３は、本実施形態を説明する図である。まず、６３個の７ビットデータ列をそれぞれ桁ごとに一括加算する。この加算は、実施形態14−16で用いた回路で行なう。本実施形態では、データ列が７ビットであるから７個のNDを用いる。各NDにおける演算速度は同一であるから、１つのNDの演算速度で全体の速度が決定される。また、６３個の７ビットデータ列加算のため、NDへ入力される入力数は６３個となる。NDからの出力データは 6ビットであり、MSB から順に出力される。NDを用いてキャリーの無い加算を並列に行うことで、高速化が可能となる。本実施形態では、全て７ビットのデータ列６３個を加算する例を示したが、これに限定されず、複数個の多ビットデータのビット数が各々異なっていても構わない。
【０１８２】
次いで、バイナリーモードで表わされた８個の加算結果を全て加算する第２の加算工程を行うことにより、所望の加算結果Q が高速に得られる。
【０１８３】
この加算工程について説明する。上述のように、NDではMSB から順に出力され、しかも、どのNDからのMSB も更にはそれ以下の桁も、同一のタイミングで出力される。MSB で説明すると、ｍ桁目(m≧1)のNDから出力されるMSB は、m+5 桁目に出力される。即ち 1≦ｍ≦7 であるｍ桁のNDからのMSB は各々、お互いに桁が全く重ならないため、演算することなく１つのデータにできる（図33の枠で囲った部分）同様に、MSB より 1つ下の桁の出力は、各々m+4 桁目、次の桁はm+3 桁目と、順次出力する順番に１つのデータとすることができる。図33では、各MSB は Si5(0≦ i≦6)で表せ、以下 Sik(0≦ i≦6)で表せ、(0≦ k≦5)の６個のデータが順次出力される。この 6個のデータを加算するが、上記のデータの再編成により、MSB のデータ Si5とその下の桁 Si4のデータが出力された後、各NDが Si3を計算している間に Si5+Si4の計算を行なうことができる。同様にして、 Si3と Si2が出力された後、NDが Si1を計算している間に Si3+Si2を行なうことができる。このようにして、NDの結果が全て出力されるのを待たずに、第 2の加算工程を開始することで高速化が達成できる。
【０１８４】
極端な例としては、図34に示すように、 Si3の計算中に Si5+Si4を行ない、次いで Si2の計算中に (Si5+Si4)の結果に Si3を加え、更に順次加算していくようにすると、演算が高速化できると共に、加算器が 1つで済み、素子数の低減が図れる。NDの演算にかかる時間と第 2の加算にかかる時間の関係には、最適値があるが、NDの加算、すなわち共通桁の一括加算と並行して、第 2の加算を行なうことができ、高速化とともに素子数の低減、ひいては消費電力の低減につながる。
【０１８５】
（実施形態１８）
本実施形態では、ビット数の異なる複数のデータ列を加算する例を説明する。図３５は、本実施形態を表す図である。ここでは、ｎビット(8≦ｎ≦1)のデータ列８個を加算する。まず８個のｎビットデータ列をそれぞれ桁ごとに一括加算する。この第１の加算はNDで行なう。
【０１８６】
本実施形態では、データ列が最大８ビットであるから８個のNDを用いる（z7は１つの数なのでNDは７個でよい。またY6+Z6 も２入力なのでHAでよいが、ここではNDを用いている）。本実施形態では、この加算工程を並列に処理するため、演算速度は最も遅いNDの演算速度で決定される。また、８個のデータ列加算を行う演算のため、NDへ入力される入力数の最大は８個となる。各NDの演算速度はそれぞれ異なり、８入力のNDにより演算速度が律速される。
【０１８７】
通常の加算演算では、キャリーが発生するため、そのキャリー伝搬により演算速度が遅くなるが、本実施形態では、キャリーの無い加算演算を並列に行うことで、高速化が可能となる。本実施形態では、１ビットから８ビットまでの全てビット数の異なるデータ列８個を加算する例を示したが、もちろん、これに限定されるものではない。
【０１８８】
次いで、バイナリーモードで表わされた８個の加算結果を全て加算する第２の加算工程を行うことにより、所望の加算結果Q が高速に得られる。
【０１８９】
この加算工程を行なうにあたって、全てを単純に足し合わせるのではなく、複数のデータを１つのデータにまとめあげることで、更に効率化を図ることができる。そのために、図３５で一括加算した結果を調べると、例えば、S70 とS51 、S50 は桁としては全く重ならず、演算なしで１つのデータとすることができる。この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで、演算は全く行っておらず、遅延時間は無視できるほど小さいのは実施形態２と同様である。この効率化により、図３５の例では、２つのデータを１つにまとめることができる。これに限らず、２つ以上のデータであれば同様に効率化が図れる。
【０１９０】
更に高速化するために、第１、第２の加算工程を並列に実行する。図３５では、NDからのデータとしては、８桁目のデータ、すなわちS70(Z7) が最も早く出力され、次いで７桁目のデータS61 S60、更に６桁目、５桁目の順である。そのために、図３５の例では、例えば、１桁目の演算が終るのを待つことなく、S70 S51 S50+S61 S60 の演算を行なう。引き続き次の出力結果S42 S41 S40 S12 S11 S10 を加算する（実際はS42 S41 を加えればよい。）。このように第１の加算工程であるNDの演算と第２の加算工程の演算は並列に実行でき、こうすることで高速化ができる。
【０１９１】
（実施形態１９）
本実施形態では、図31につき、多ビットデータ同士の乗算について説明する。以下、 8×8 ビット乗算器を例にとって説明するが、これは、一般の m×n ビットの乗算に拡張できる。
【０１９２】
被乗数をX(X7 X6 X5 X4 X3 X2 X1 X0)、乗数をY(Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0)として、 X×Y= Qとする。実施形態３で説明したように、 Qは最大 16 ビットで表わせる。 m×n ビットでは、Q は最大m+n ビットである。
【０１９３】
まず、図31に示すように、 X×Yjという部分積を生成する。そのために、通常の CMOS 乗算器の様に、被乗数であるX の各ビットXiと乗数であるYjとの ANDをとって部分積を求める。他の方法、例えば実施形態３で説明した方法等でも構わない。
【０１９４】
次いで、図31で示された部分積の各桁の和をそれぞれ桁ごとにNDにより一括加算する。この加算工程は並列で処理するため、高速演算に適している。 m×n ビットの乗算回路では（m+n-1 ）個のNDを用いる。NDへ入力される最大の入力数はMin(m,n)となる。図31に示すような 8×8 ビット乗算器の例では、このNDを15個用いる。最大の入力数は8 である（X7Y0+X6Y1+X5Y2+X4Y3+X3Y4+X2Y5+X1Y6+X0Y7 なる演算を行っているところ）。
【０１９５】
ただし、これは、１入力１出力という、そのまま配線を延ばせば済むところもNDを用いた場合の数であり、それを除くと（m+n-3 ）個のNDを用いる。さらに2 入力2 出力のHAで済むところを除き、3 入力以上の場合にのみNDを用いることにすると（m+n-5 ）個のNDで良い。
【０１９６】
通常、３入力以上であると加算演算も複雑になり、特にキャリーが発生するためその伝搬により演算速度が遅くなる。本実施形態は一括加算を行いキャリーの無い演算を行うことで高速化が可能となる。
【０１９７】
次いでバイナリーモードで表わされた(m+n-1) 個の加算結果を全て加算する、第２の加算工程を行うことにより所望の乗算結果Q が高速に得られる。
【０１９８】
更に加算回数を減じるために、実施形態18と同様にデータの共通化を行ない、結局 4つのデータ(A,B,C,D) にできる。前述したように、この処理はアルゴリズム上は１つのステップであるが、回路内の処理としては配線を引き回しているのみで演算は全く行っていない。
【０１９９】
遅延時間は、他のステップに比べて無視できるほど小さい。NDは図１３の構成、乗算回路は図１２の構成を用いることができる。図１３において、実施形態３で述べたようにパイプライン処理を行なうこともできる。
【０２００】
NDが必要とする多数決論理回路ブロックの数は、NDへの入力数n に対して〔Log2n〕 で表わせる。一方、NDへの入力数はm ×n ビットの乗算器では、1 からMin(m,n)までの値をとるが、演算時間は、明らかに入力数が最大となるMin(m,n)入力のNDが最も長い。これは、多数決論理回路の段数が入力数n に対して〔Log2n〕 で増加していくからである。しかしながら、ビット数が増えてもこの段数はLog 関数で増加するため、大きくは増大しないのは明らかである。
【０２０１】
並列演算であるので、入力数最大であるMin(m,n)入力のNDの演算速度で、複数のND74での演算が終了する。この構成では、まず、S73(A)が最初に出力される。次いで早めに演算を終了するＢと加算を行なうが、この時まだ他の出力は全て終了していない。同様にＤが完全に出力される前にＣを加算する。このようにして並列演算により高速化が達成できる。
【０２０２】
このようにNDを構成すると、並列演算であるので高速で、且つ素子数も少なく低消費電力化が可能なNDが形成でき、前述の実施形態の演算方法の特性を、大きく改善することができる。
【０２０３】
次に、アルゴリズム上は、複数のNDから出力されたデータを１つのデータ列にまとめるステップがあるが、回路的には特に何も処理しないのは既に述べたとおりであり、図12には、特にこのステップに対応する回路は存在しない。
【０２０４】
以上のように乗算回路を構成することで、素子数が少なく、消費電力が少ない、且つ並列演算のため高速な乗算器が形成できる。なお、NDとして、実施形態４のように図１７の構成を用いてもよい。
【０２０５】
（実施形態２０）
本実施形態は、実施形態19の図31の15個のNDを複数個まとめてしまい、演算を行う方式である。なお、ここでは８×８乗算の結果を２つ加算する例で説明するが、これに限るものではない。
【０２０６】
図20に、 2×2 乗算器に用いる 2×2 多数決論理回路を基にその例を示す。即ち、実施形態19の図13の初段の多数決論理回路である。１桁目（20の桁であるx0y0）は単位容量Ｃに入力される。2 桁目（21の桁であるx1y0及びx0y1）の２つはそれぞれ２倍の容量２Ｃを持つ端子に入力されるため、１入力で２カウントされることになる。さらに3 桁目（22の桁であるx1y1）は22の重み付けがなされ、１入力で４カウントされる。
【０２０７】
後は実施形態19と同様で、４入力であるが最高７までがバイナリーモードで出力されるNDとなる。この重み付けを行うことにより、並列一括加算機能が更に効率よく行える。
【０２０８】
例えば実施形態19の 8×8 ビットの乗算器で言えば、図36に示すように、桁の重みが0,1,2,3 である桁を加算するNDをND91にまとめ、同様に桁の重みが(4,5,6),(7,8,9),(10,11,12,13,14)である領域をそれぞれ１つにまとめることができる( 図中のND92-94 ）。
【０２０９】
図36のNDには、それぞれ何入力で何出力であるかが数字で示してあるが、最高で56入力をカウントできるNDを用いればよい。配線としては21入力でよい。それぞれ全て６ビットの出力となる。NDの数が少なく素子数を大幅に削減できる。ここで、他の８×８の乗算結果Q'を加算するにあたっては、S105が出力されND94がつぎのS104を演算している間にS105に対するS105' を加算してしまうことができる。他のデータであるS85 やS45 も同様であり、かつさらにS104,S104'はその加算和に更に加算して行くことができる。S103,S103'・・も同様に行なうことができ、NDの演算と並列の演算で部分和S"が形成できる。
【０２１０】
本実施形態では、最終的にP,Q,R の３つのデータの加算を行なえばよい。更には、ND92から生じるS"46を別個にP と和をとってしまえば、P とQ も１つのデータとでき、２つのデータの加算を行なえばよい。
【０２１１】
従って高速化が実現でき、また１つの加算器を何度も繰り返し使用することも可能で、素子数も大幅に削減できる。特に上述の多数決論理回路を用いたNDを使用すると、クロック動作であり、効果的である。以上のように乗算回路を構成することで、素子数がさらに少なく、小規模で消費電力が少ない、且つ並列演算であり、加算段数が少なくさらに高速な乗算器が形成できる。
【０２１２】
本実施形態では、一般的な重み付けの例として、連続した桁をまとめる例で説明したが、特にこれに限定されるわけでなく、重み付けが連続でない場合や（例えば20の桁と22の桁を合わせて入力する場合）、１つの桁を分割してそれぞれ別のNDに異なる重み付けで入力したりして（例えば28の桁を二つに分割して別のNDに入力する等）、効率化を図ることも自由にできる。
【０２１３】
（実施形態２１）
本実施形態では、上述した演算方法を行う半導体装置を用いたデータ処理装置の例として、DSP に用いた場合を説明する。
【０２１４】
本実施形態では、代表的なDSP である固定小数点演算用DSP について説明するが、特にこれに限定されず、他の形式のDSP やCPU などにも適用可能であることは言うまでもない。
【０２１５】
上述した実施形態における演算処理装置は、通常の半導体MOS トランジスタで形成できるため互換性がよく、入出力バッファをつけて、今までの半導体装置を置き換えることができる。
【０２１６】
図37に本実施形態のDSP の構成を示す。DSP に搭載される演算ユニットは、乗算器と累算器であり、乗算器は、２つの１６ビットデータを乗算し、３１ビットの出力を得る。累算器は、１６ビットの算術論理演算ユニット（ALU)と、ALU の出力信号を格納するレジスタとから構成される。
【０２１７】
オンチップメモリは次の４種類である。データRAM は入力信号を記憶し、そのアドレスは８ビットデータポインタ（DP）により指定される。DPの下位４ビットは４ビットアップダウンカウンタが、上位４ビットは４ビットレジスタが、各々担当する。データROM はフィルタの重み係数などを格納する。そのアドレスは１０ビットダウンカウンタのROM ポインタ(RP)により指定される。１６ビットテンポラリーレジスタ（TR）はデータの一時記憶に使う。命令ROM は、命令（インストラクション）を格納し、そのアドレスは命令カウンタ（PC）により、指定される。
【０２１８】
DSP 外部との信号の送受は１ビットシリアル出力レジスタ、１ビットシリアル入力レジスタ、及び８ビットパラレル入出力レジスタを介して行われる。シリアル出力及びシリアル入力は、各々、出力制御信号（SOEN) 及び入力制御信号（SIEN) が０V の時に、シリアル入出力クロック（SCK ）に同期して実行される。８ビット並列出力は、読み出し／書き込み制御信号（CS）が０V のときに、書き込み制御信号（WR）または読み出し制御信号（RD）を０V にして行う。SOから出力されるデータ８ビット分がシリアル出力レジスタにそろうと、出力準備完了信号（SORQ) が５V になる。
【０２１９】
各命令はプログラムカウンタ（PC）の指定により、クロック周期ごとにROM から読み出される。読み出された命令の、それぞれのデコード結果にしたがって、各演算ユニットやメモリが動作する。
【０２２０】
リセットパルス（RST ）が加わると、まずPCのポインタ位置が０番地となり、DSP が動作を開始する。次に割り込みパルス(INT) が印加されると、PCのポインタ位置は２５６番地へジャンプする。入出力モード（８ビットまたは１６ビット）の選択や、割り込みを受け付けるか否かの選択は、８ビットパラレル入出力レジスタ中の１６ビットステイタスレジスタ（SR）が判断する。クロックドライバは外部からのクロックパルス（CLK ）をもとにT0とT2の２相クロックを生成し演算ユニットやメモリ等に供給する。入出力レジスタ、演算ユニット及びメモリとデータのやりとりは１６ビットバスを介して行う。
【０２２１】
本実施形態では、前述した１６ビット×１６ビット高速乗算器を、他の論理回路及びメモリー部と同一基板上に同一プロセスで形成している。
【０２２２】
このDSP の実際の動作タイミングについて、２段パイプライン積和演算を例に説明する。図38に、動作時の２相クロックパルスを示す。データROM 、データRAM に各々格納された入力信号、重み係数の読み出し、即ち乗算器へのデータ供給は、クロック周期m のT0が高レベル（５V ）となるとき(T0 のタイミングと呼ぶ）に行われ、引き続き乗算が実行される。乗算結果は、次のクロック周期（m ＋１）のT0のタイミングでレジスタにラッチされる。これと同時に乗算器では、次のデータの乗算が並列に処理されている。
【０２２３】
一般に演算速度は、ビット数が大きくなるほど、特に乗算演算速度が律速原因となるが、本実施形態の高速乗算器により、演算速度が向上し、DSP の性能自体を大きく引き上げることができる。しかも、通常のCMOSプロセスに形成できるというメリットがある。本実施形態ではDSP に乗算器として応用した例であるが、限定されないことはいうまでもなく、他の応用例として複数の多ビット加算過程や乗算過程を内部に持つ演算回路に広く応用できることは、入出力や、プロセスが通常のCMOSプロセスであることの汎用性を考えると明らかであり、高速性をはじめチップ面積の縮小化、低消費電力化にも寄与するという大きな効果がある。
【０２２４】
（実施形態２２）
本実施形態は、上述した演算装置をスプレッド・スペクトラム通信（ＳＳ通信）の受信回路の相関演算部に応用したものである。この受信回路の構成を図39に示す。同図に示すように、受信アンテナ1401、信号を増幅する増幅部1402、相関演算部1403A、B 、A/D 変換部1404、判定器1405、検波部1406を備える。
【０２２５】
ＳＳ通信では、信号をＰＮコードと呼ばれる多ビット符号に変換し、そのＰＮコードを送信する。受信側では、予め有している同様のＰＮコードと、受信した信号とを比較し、最も相関の高い状態を検出して、送られてきた信号を復調している。
【０２２６】
図39において、アンテナ部1401で受信された信号は、検波部1406で１次復調された後に、１つは相関演算部1403Ａに、もう１つはA/D 変換部でデジタル信号に変換された後、相関演算部1403Ｂに入る。入力された信号は、受信側で予め保持しているＰＮコードと比較され、２つの信号の相関度から、相関演算部1403Ａでは同期信号が形成され、その同期信号で同期をとって、相関演算部1403Ｂで相関スコアを計算する。相関演算部1403Ｂから出力された相関スコアを元に、判定器1405で信号が復調される。
【０２２７】
ＳＳ通信は、信号を多ビットのコードに変換して送信することから、秘話性が高い、ノイズに対して強いといった優れた特徴を有しているが、送信する情報量が増大するため、実際の信号処理に関しては、受信した信号をＰＮコードと比較し、相関の高い状態を検出するために、図４５に示すような加算回路で加算を繰り返す処理が必要となり、処理の負荷が膨大になるという問題点があった。
【０２２８】
しかしながら、上述の実施形態の演算装置でこの加算を行なうことで、拘束で素子数が少なく、低消費電力のＳＳ通信受信回路が構成できる。従って、ＳＳ通信により無線通信を行なう携帯型情報機器を実現できる。
【０２２９】
更に、演算速度の高速化により、多量の情報の通信を可能とすると共に、素子数が少なく、低消費電力に対応できるため、図４０に示すようなコンパクトなカード型送受信部2001を形成することが可能となる。従って、従来のパソコンのインターフェースを備えたPCMCIAカードにＳＳ通信を使用することが容易になった。ここでは、PCMCIAカードを例にとったが、他のインターフェースに合わせることも容易にできる。入出力は通常のＣＭＯＳコンパチブルであり、上述の演算装置により、小型化、低消費電力化が容易に達成できる。
【０２３０】
また、ここではＳＳ通信用のデータ処理装置を例に説明したが、これまで述べたようにＣＭＯＳコンパチブルな入出力インターフェースであり、複数の多ビットデータ、特に負数を含む複数の多ビットデータを加算する他のデータ処理装置、例えば、既に述べたＤＳＰやＣＰＵ、画像や音声を処理する並列演算処理部に適用できる。更に、平均値や標準偏差を求める統計処理、最小自乗法などの数値演算にも利用できる。
【０２３１】
他にも、高速化、小型化、低消費電力化のメリットにより、ワイヤレスＬＡＮや、入出管理、課金システム、ＴＶ会議システムなどの各種システムを大きく改善できる。
【０２３２】
【発明の効果】
以上説明したように、本発明によれば、複数の多ビットデータの共通する桁について、当該桁の値を並列入力し、値が１である入力の個数を検出して２進表現で出力することにより各桁の加算を行ない、その加算結果の総和を求めるようにし、前記個数を検出する際に、入力がｍビットであるとき値が１であるビットがｉ個以上あるか否かを各ｉ（１≦ｉ≦ｍ）について並列して判定し、該判定の出力に基づいて値が１であるビットの個数を２進表現で出力することで、複数の多ビットデータを高速に加算することができる。
【０２３３】
また、負数も含む複数の多ビットデータを高速に加算することができる。
【０２３４】
また、更に、複数の多ビットデータを高速に乗算することができる。
【０２３５】
また、更に、複数の多ビットデータを高速に演算する演算装置を、小さなチップ面積で、かつ低消費電力の半導体装置で構成できる。
【０２３６】
また、この演算装置は、通常の半導体プロセスを用いて実現できるので、様々なデータ処理装置に応用でき、DSP 、CPU 、ＳＳ通信用の送受信装置等のデータ処理装置を、高速で、チップ面積が小さく、且つ低消費電力の装置として実現できる。
【図面の簡単な説明】
【図１】実施形態１の加算器を表わす図である。
【図２】実施形態１の多数決論理回路を表わす図である。
【図３】実施形態１のＮＤを表わす図である。
【図４】実施形態２の加算器を表わす図である。
【図５】実施形態２の第２加算工程を行う加算器を表わす図である。
【図６】実施形態３の乗算器を表わす図である。
【図７】実施形態３の部分積生成回路を表わす図である。
【図８】実施形態３の乗算器を表わす図である。
【図９】実施形態３の加算器を表わす図である。
【図１０】実施形態３における全加算器通過段数を表わす図である。
【図１１】実施形態３の乗算処理手順を表わすフローチャート。
【図１２】実施形態３の乗算回路を表わす図である。
【図１３】実施形態３で用いるＮＤを表わす図である。
【図１４】実施形態３で用いる多数決論理回路を表わす図である。
【図１５】実施形態３で用いる多数決論理回路を表わす図である。
【図１６】実施形態３で用いる信号のタイミングチャートである。
【図１７】実施形態４で用いるＮＤを表わす図である。
【図１８】実施形態４で用いる多数決論理回路を表わす図である。
【図１９】実施形態４で用いる信号のタイミングチャートである。
【図２０】実施形態５で用いる多数決論理回路を表わす図である。
【図２１】実施形態５の乗算器を表わす図である。
【図２２】実施形態６の乗算器を表わす図である。
【図２３】実施形態７の乗算器を表わす図である。
【図２４】実施形態８の乗算器を表わす図である。
【図２５】実施形態９の加算器を表わす図である。
【図２６】実施形態１０の加算器を表わす図である。
【図２７】実施形態１１の加算器を表わす図である。
【図２８】実施形態１２の２ビット加算器を表わす図である。
【図２９】実施形態１２の加算器を表わす図である。
【図３０】実施形態１３の加算器を表わす図である。
【図３１】実施形態１４の乗算器を表わす図である。
【図３２】実施形態１４の他の乗算器を表わす図である。
【図３３】実施形態１７の加算器を表わす図である。
【図３４】実施形態１７の他の加算器を表わす図である。
【図３５】実施形態１８の加算器を表わす図である。
【図３６】実施形態２０の乗算器を表わす図である。
【図３７】実施形態２１のＤＳＰを表わす図である。
【図３８】実施形態２１の動作タイミングチャートである。
【図３９】実施形態２２の受信回路を表わす図である。
【図４０】実施形態２２のカード型送受信部を表わす図である。
【図４１】従来の加算器を説明するための図である。
【図４２】従来のＣＬＡ回路を説明するための図である。
【図４３】ブロックＣＬＡを用いた従来の加算回路の構成例を示す図である。
【図４４】従来の加算回路の構成例を示す図である。
【図４５】従来の加算回路の構成例を示す図である。
【図４６】従来の乗算器の構成例を示す図である。
【符号の説明】
１１，７４，９１，９２，９３，９４，１３１  Ｎｕｍｂｅｒ  ｄｅｔｅｃｔｏｒ
１２，７８，７９  ラッチ回路
２１，７３，３０３  ＡＮＤ回路
２２  ＯＲ回路
３１，９１，９２，９３，９４，１３１  多数決演算回路ブロック
３２  アレイ
３３  ２進化回路
７１  被乗数入力部
７２  乗数入力部
７３  部分積生成部
７５，７６，７７，３０１  全加算器
８０  演算結果出力部
１３２，２０４，２０６  インバータ
１３３，１３４，１３５    入力部
１３６，１３７，１３８，２１１  出力端子
２０１，２０７  リセットスイッチ
２０２，２０９，２１２  キャパシタ
２０３  信号転送スイッチ
２０５  センスアンプ
２０８，２１０  リセット電源
３０２  半加算器
４０１  並列演算回路ブロック
４０３  スイッチ
５０１，５０２，５０３  重みづけ入力端子
１４０１  アンテナ
１４０２  増幅部
１４０３  相関演算部
１４０４  Ａ／Ｄ変換部
１４０５  判定部
１４０６  検波部
２００１  カード型送受信部
【図１】
0003658079.tif 000021
【図２】
0003658079.tif 000022
【図３】
0003658079.tif 000023
【図４】
0003658079.tif 000024
【図５】
0003658079.tif 000025
【図６】
0003658079.tif 000026
【図７】
0003658079.tif 000027
【図８】
0003658079.tif 000028
【図９】
0003658079.tif 000029
【図１０】
0003658079.tif 000030
【図１１】
0003658079.tif 000031
【図１２】
0003658079.tif 000032
【図１３】
0003658079.tif 000033
【図１４】
0003658079.tif 000034
【図１５】
0003658079.tif 000035
【図１６】
0003658079.tif 000036
【図１７】
0003658079.tif 000037
【図１８】
0003658079.tif 000038
【図１９】
0003658079.tif 000039
【図２０】
0003658079.tif 000040
【図２１】
0003658079.tif 000041
【図２２】
0003658079.tif 000042
【図２３】
0003658079.tif 000043
【図２４】
0003658079.tif 000044
【図２５】
0003658079.tif 000045
【図２６】
0003658079.tif 000046
【図２７】
0003658079.tif 000047
【図２８】
0003658079.tif 000048
【図２９】
0003658079.tif 000049
【図３０】
0003658079.tif 000050
【図３１】
0003658079.tif 000051
【図３２】
0003658079.tif 000052
【図３３】
0003658079.tif 000053
【図３４】
0003658079.tif 000054
【図３５】
0003658079.tif 000055
【図３６】
0003658079.tif 000056
【図３７】
0003658079.tif 000057
【図３８】
0003658079.tif 000058
【図３９】
0003658079.tif 000059
【図４０】
0003658079.tif 000060
【図４１】
0003658079.tif 000061
【図４２】
0003658079.tif 000062
【図４３】
0003658079.tif 000063
【図４４】
0003658079.tif 000064
【図４５】
0003658079.tif 000065
【図４６】
0003658079.tif 000066