(57)【特許請求の範囲】
【請求項１】
乗数の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と，
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し，所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と，
複数のデータを並列に乗算する並列モードで，上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し，
前記部分積加算回路は，前記並列モードで，下位側の並列データを入力し第１の加算データ及び第１のキャリーデータを生成する第１のキャリー保存加算器と，上位側の並列データを入力し第２の加算データ及び第２のキャリーデータを生成する第２のキャリー保存加算器と，前記第１の加算データ及び第１のキャリーデータと前記第２の加算データ及び第２のキャリーデータとを加算する第３のキャリー保存加算器と，前記並列モードで，前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路。
【請求項２】
さらに，
前記並列モードで，前記上位側の要素データの下位側の桁を０にして前記部分積生成回路に入力される被乗数の上位側の要素データを生成し，前記下位側の要素データの上位側の桁を０または符号ビットにして前記部分積生成回路に入力される被乗数の下位側の要素データを生成する分割回路を有し，
前記ブースセレクタは，前記デコード結果が負の部分積を選択する場合，セレクトされるデータをビット反転して前記負の部分積を生成し，
前記並列モード及び単一のデータを乗算する通常モードのいずれの場合も，前記負の部分積の最下位ビットにホットビットが加算される請求項１に記載の乗算回路。
【請求項３】
さらに，
前記並列モードで，前記第３のキャリー保存加算器に入力される前記第１の加算データ及び第１のキャリーデータの上位側の桁を０に変更し，前記第２の加算データ及び第２のキャリーデータの下位側の桁を０に変更するゼロマスク回路を有する請求項１または２に記載の乗算回路。
【請求項４】
前記第３のキャリー保存加算器は，第１の前記補正ホットビット加算回路を有し，
前記第１の補正ホットビット加算回路は，前記並列モードで，前記第２の加算データまたは前記第２のキャリーデータに前記補正ホットビットを加算する請求項１または３に記載の乗算回路。
【請求項５】
前記部分積加算回路は，前記第３のキャリー保存加算器が出力する第３の加算データ及び第３のキャリーデータを加算する全加算器を有し，
前記全加算器は，第２の前記補正ホットビット加算回路を有し，
前記第２の補正ホットビット加算回路は，前記並列モードで，前記第３の加算データ及び前記第３のキャリーデータに前記補正ホットビットを加算する請求項４に記載の乗算回路。
【請求項６】
前記キャリー保存加算器は，４つの入力データを演算して加算データとキャリーデータを有する２つの出力データを出力し，
前記部分積加算回路は，複数段のキャリー保存加算器を有し，
前記補正ホットビット生成部は，前記並列モードで，前記上位側の要素データについて，前記乗数の複数の組合せのデコード結果が全て正の部分積（Ｚ）の場合は前記補正ホットビットを０に，全て負の部分積（Ｆ）の場合は前記補正ホットビットを２に，一部に負の部分積が含まれる場合は前記補正ホットビットを１にする請求項１に記載の乗算回路。
【請求項７】
乗数の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と，
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し，所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路とを有し，
前記部分積加算回路は，前記並列モードで，下位側の並列データを入力し第１の加算データ及び第１のキャリーデータを生成する第１のキャリー保存加算器と，上位側の並列データを入力し第２の加算データ及び第２のキャリーデータを生成する第２のキャリー保存加算器と，前記第１の加算データ及び第１のキャリーデータと前記第２の加算データ及び第２のキャリーデータとを加算する第３のキャリー保存加算器とを有する乗算回路の乗算方法において，
複数のデータを並列に乗算する並列モードで，上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成し，
前記部分積加算回路は，前記並列モードで，前記上位側の並列データに前記補正ホットビットを加算する乗算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，乗算回路及びその乗算方法に関する。
【背景技術】
【０００２】
乗算器は，一般的には，被乗数を乗数の各桁と乗算して複数の部分積を生成し，複数の部分積を加算して乗算値を出力する。部分積の数を減らす方法としてブースアルゴリズム(Booth Algorism)が知られている。ブースアルゴリズムによれば，例えば２次のブースアルゴリズムであれば，被乗数を複数桁の乗数に応じて１倍の正数もしくは負数，または２倍の正数もしくは負数を部分積として生成する。そして，２次のブースアルゴリズムでは乗数を２ビット単位で処理するので，部分積の数を１／２にすることができる。
【０００３】
また，複数の部分積を短時間で加算する方法として，ワレスツリー（Wallace tree）が知られている。ワレスツリーは，桁上げ保存加算器（Carry Saved Adder: CSA）をツリー状に配置した構成を有し，ツリーの各段では複数のCSAを並列に配置して並列に演算する。CSAはキャリーデータである桁上げビットを下位桁から上位桁に伝搬させることなく保持するので，演算結果が出力されるまでの論理段数を短くできる。
【０００４】
上記のように，ブースアルゴリズムによる部分積生成回路と，ワレスツリーによる部分積加算回路とを組み合わせることで，乗算結果が出力されるまでの時間を短くする。
【０００５】
このようなブースアルゴリズムとワレスツリーを組み合わせた乗算器は，ビット数を増大させることでｎ倍精度の被乗数と乗数を乗算する。そして，ｎ倍精度の乗算器は，ｎ／ｍ倍精度でｍ並列の被乗数と乗数を演算する並列モードで動作することが望まれる。例えば，単精度が３２ビットの場合，倍精度は６４ビットである。その場合，２つの３２ビットデータを並列に乗算することで，乗算効率を高めることができる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平７−１２１３５４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ブースアルゴリズムによる部分積生成回路は，乗数Ｙの複数桁の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数Ｘの，例えば２次であれば，１倍，２倍，マイナス１倍，マイナス２倍（被乗数Ｘの×１，×２，−×１，−×２）のいずれかのデータを選択するブースセレクタとを有する。２倍は被乗数Ｘを左シフトすることで簡単に求めることができる。
【０００８】
しかしながら，デコード結果がマイナス１倍，マイナス２倍の場合，負数を２の補数にするために，セレクトしたデータのビット反転とその最下位桁に１を加える処理を行う必要がある。この最下位桁に加えられる１を，ホットビット（Hotbit）と称する。したがって，ブースアルゴリズムの部分積生成回路は，ブースデコード結果に応じてホットビットを加算する回路が必要になる。
【０００９】
このことは，単一のデータを乗算する通常モードでは，最下位ビットにだけホットビットを加算すれば良いが，複数のデータを並列に乗算する並列モードでは，複数の並列データそれぞれの最下位ビットにホットビットを加算することが必要になることを意味する。２の補数にするためのホットビットは，通常，ワレスツリーの入力段で加算される。そのため，通常モードか並列モードかによって，並列データの最下位ビットにホットビットを加算する回路を有効にするか否かを切り替える制御が必要になる。
【００１０】
そこで，実施の形態の第１の側面の目的は，簡単な回路で並列モードでの乗算を行うことにより，乗算回路の物理量および消費電力を削減できる乗算器及び乗算器の乗算方法を提供することにある。
【課題を解決するための手段】
【００１１】
本実施の形態の第１の側面は，乗数の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と，
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し，所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と，
複数のデータを並列に乗算する並列モードで，上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し，
前記部分積加算回路は，前記並列モードで，下位側の並列データを入力し第１の加算データ及び第１のキャリーデータを生成する第１のキャリー保存加算器と，上位側の並列データを入力し第２の加算データ及び第２のキャリーデータを生成する第２のキャリー保存加算器と，前記第１の加算データ及び第１のキャリーデータと前記第２の加算データ及び第２のキャリーデータとを加算する第３のキャリー保存加算器と，前記並列モードで，前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路である。
【発明の効果】
【００１２】
第１の側面によれば，簡単な回路構成で並列モードの乗算を行うことができ，乗算回路の物理量および消費電力を削減できる。
【図面の簡単な説明】
【００１３】
【図１】ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第１の例を示す図である。
【図２】ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第２の例を示す図である。
【図３】ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第３の例を示す図である。
【図４】図３の乗算回路を実現する場合の問題点を示す図である。
【図５】通常モードと並列モードの違いを説明する図である。
【図６】本実施の形態における乗算回路の概略構成図である。
【図７】ブースセレクタ１２の構成を示す図である。
【図８】ワレスツリー加算器２０＿１，２０＿０と，ワレスツリー加算器が内蔵する４ｔｏ２ＣＳＡとの回路構成を示す図である。
【図９】４ｔｏ２ＣＳＡの４入力の全パターンに対する出力Ｓ，Ｃとキャリーの関係を示す図である。
【図１０】図９に示した５つのパターンの発生したキャリーＣＲＹ，発生すべきキャリーＣＲＹ，それらの差分をまとめた図である。
【図１１】ワレスツリー加算器により伝搬するキャリーと不足するホットビットの数の一例を示す図である。
【図１２】３段のワレスツリー加算器の各段の４ｔｏ２ＣＳＡの入力パターンを示す図である。
【図１３】入力パターンの組合せ例に対する１段目での差分（不足数），２，３段目で発生したキャリーＣＲＹ，最終的に残った数（補正値）を示す図である。
【図１４】入力パターンの組合せ例に対する１段目での差分（不足数），２，３段目で発生したキャリーＣＲＹ，最終的に残った数（補正値）を示す図である。
【図１５】補正ホットビット生成部５０の回路図である。
【図１６】本実施の形態における乗算回路の具体的な構成を示す図である。
【図１７】本実施の形態における乗算回路の具体的な構成を示す図である。
【図１８】分割回路の一例を示す図である。
【図１９】ブースデコーダ１１とブースセレクタ１２＿１，１２＿０の構成を示す図である。
【図２０】ワレスツリー加算器の構成を示す図である。
【図２１】３次のブースアルゴリズムの場合のブースデコード表である。
【図２２】３次のブースアルゴリズムを使用した場合の補正ホットビット生成ユニットを示す図である。
【発明を実施するための形態】
【００１４】
図１は，ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第１の例を示す図である。図１（Ａ）には，１つの入力データに対して乗算を行う通常モードの場合の乗算回路が，図１（Ｂ）には，２つの入力データに対して乗算を行う並列モードの場合の乗算回路が示されている。
【００１５】
乗算回路は，入力データが単精度と倍精度（またはｎ倍精度）のいずれでも演算可能に構成されている。図１の例では２倍精度（ｎ＝２）の演算が可能である。さらに，乗算回路は，ｎ倍精度のデータに代えてｍ個のデータを並列に演算するｎ／ｍ倍精度のｍ並列の演算も可能である。ｍ＝２とすると，単精度（２／２＝１）の２つのデータを２並列に乗算する。
【００１６】
図１に示された乗算回路は，乗数Ｙの複数ビットの組合せをデコードするブースデコーダ１１と，デコード結果に応じて被乗数Ｘと乗数Ｙの部分積ＰＭを複数生成するブースセレクタ１２とを含む部分積生成回路１０を有する。さらに，乗算回路は，複数の部分積ＰＭを加算して乗算値ＰＭを出力するワレスツリー構成の部分積加算回路２０を有する。
【００１７】
例えば，２次のブースアルゴリズムの場合，ブースデコーダ１１は乗数Ｙの３ビットをデコードし，ブースセレクタ１２は，デコード結果に応じて０，Ｘ，２Ｘ，−２Ｘ，−Ｘ，０のいずれかを選択して部分積ＰＭを出力する。そして，乗数Ｙは２ビットずつシフトしてデコードされるので，部分積ＰＭの数は乗数Ｙのビット数の１／２に減らすことができる。部分積ＰＭの上位側には符号ビットＳが拡張して格納されている。
【００１８】
ブースセレクタ１２は，デコード結果に応じて−２Ｘ，−Ｘを選択する場合，被乗数Ｘを左シフトして２Ｘを生成しまたは左シフトせずにＸを生成し，負数を表すために２Ｘ，Ｘのビットを反転し，１を加算（＋１）するためのホットビットを生成する。そして，生成されたホットビットはワレスツリーの部分積加算回路２０に入力され加算される。図１には，このホットビットＨが便宜的に部分積ＰＭの最下位ビットに表記されている。
【００１９】
ワレスツリーの部分積加算回路２０は，複数の部分積ＰＭを並列に加算するキャリー保存加算器（以下ＣＳＡ：carry saved adder, 図示せず）をツリー状に配置し，所定段のキャリー保存加算器が出力する加算データとキャリーデータを後段のキャリー保存加算器が加算する。４入力に対して加算データとキャリーデータの２データを出力する４ｔｏ２ＣＳＡの場合は，各段のＣＳＡを通過するたびに加算すべきデータ数が１／２に減っていく。各ＣＳＡはキャリーを伝搬することなく保存するので，各段のＣＳＡの演算時間は短い。そして，ツリー状に配置することで，加算すべき部分積ＰＭの入力から最終加算結果が出力されるまでの段数も少なくなり，短時間で結果を出力する。
【００２０】
以上の基本的な説明に基づいて，ブースアルゴリズムとワレスツリーによる乗算器の問題点について説明する。図１（Ａ）の通常モードの場合，ワレスツリーの加算器２０には単一データの部分積ＰＭが入力されるので，ワレスツリー加算器２０が出力する乗算値ＰＭは正しい結果になる。
【００２１】
一方，図１（Ｂ）の並列モードの場合，２／２（＝ｎ／ｍ）倍精度のデータを２（＝ｍ）要素並べた並列データをそのまま演算する例である。この場合，２倍精度の被乗数には上位側の要素の被乗数Ｘ＿１と下位側の要素の被乗数Ｘ＿０とが並んでいて，この並列データからブースセレクタ１２が部分積ＰＭを生成する。この場合，部分積ＰＭも並列データであり，上位側の被乗数Ｘ＿１の最下位ビットにもホットビットＨが加算される必要がある。そして，ワレスツリー加算器２０には，並列データの部分積ＰＭが入力されると，部分積ＰＭは上位側にビットシフトしているため，上位側と下位側の部分積ＰＭがワレスツリー加算器２０内のＣＳＡ加算器で混ざり合い，ワレスツリー加算器２０が出力する乗算値ＰＭは間違った結果になる。
【００２２】
図２は，ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第２の例を示す図である。この乗算回路では，ブースセレクタ１２が上位側の部分積ＰＭ＿１と下位側の部分積ＰＭ＿０とを別々に生成し，２つのワレスツリー加算器２０＿１，２０＿２が２つの部分積ＰＭ＿１，ＰＭ＿０をそれぞれ加算して，それぞれの乗算値ＭＰ＿１，ＭＰ＿０を出力する。最後に，２つの乗算値ＭＰ＿１，ＭＰ＿０を合成して正しい並列データの乗算値ＭＰを得る。
【００２３】
図２の例は，正しい乗算値ＭＰを得ることができるが，並列データの数（２個）に対応した数（２個）のワレスツリー加算器が必要になり，回路規模が大幅に増大する。
【００２４】
図３は，ブースアルゴリズムとワレスツリーを組み合わせた乗算回路の第３の例を示す図である。この乗算回路では，ブースセレクタ２０が，下位側の要素の部分積ＰＭ＿０の上位側を０でマスクし上位側の要素の部分積ＰＭ＿１の下位側を０でマスクする０マスク機能と，上位側の要素にホットビットを加算するホットビット加算回路を有する。このような下位側の要素の部分積ＰＭ＿０と上位側の要素の部分積ＰＭ＿１とをワレスツリー加算器２０が加算演算しても，両部分積のデータが混ざり合うことはなく，ワレスツリー加算器２０が出力する乗算結果は正しい並列データの乗算結果になる。
【００２５】
図４は，図３の乗算回路を実現する場合の問題点を示す図である。図３で説明したホットビット加算回路は，例えば，部分積ＰＭを入力するワレスツリー加算器２０の入力段に追加される。そして，乗算回路が，単一の要素を乗算する通常モードと，複数の要素の並列データを乗算する並列モードとを切り替え制御される必要がある。
【００２６】
図５は，通常モードと並列モードの違いを説明する図である。図５（Ａ）の通常モードでは，ブースセレクタ１２がデコード結果に応じて単一の被乗数の０倍，正の１倍，正の２倍，負の２倍，負の１倍のいずれかを選択して部分積ＰＭを出力する。そして，負の場合は，ビット反転した部分積ＰＭの最下位にホットビットＨ（＋１）を加算すればよい。
【００２７】
一方，図５（Ｂ）の並列モードでは，ブースセレクタ１２が上位側の要素１と下位側の要素０それぞれをデコード結果に応じて上記と同様に選択する。部分積が負の場合は，各部分積の要素ＰＭ＿１，ＰＭ＿０の最下位ビットにホットビットＨ（＋１）を加算する必要がある。したがって，通常モードでは上位側の要素ＰＭ＿１の最下位の位置へのホットビットＨの加算を行われず，並列モードではその位置へのホットビットＨの加算を行う必要がある。図５（Ｂ）内に示されたホットビットＨである。
【００２８】
図４に戻り，図５のように通常モードでは上位側の要素１にホットビットの加算は行われず，並列モードでは加算が行われるので，図中に示すとおり，ホットビットセレクト信号Ｓｅｌをワレスツリー２０の入力段に供給して，全ての並列モードに対応するビットの位置に設けたホットビット加算回路をイネーブルまたはディセーブルにする制御が必要になる。このような回路構成では，ホットビットセレクト信号Ｓｅｌの伝搬が乗算器全体の動作速度を律則することになり，セレクト信号Ｓｅｌの伝搬路がクリティカルパスになる。また，全ての並列モードに対応するビットの位置にホットビット加算回路を設けることは，回路規模の増大になる。
【００２９】
［本実施の形態の乗算回路］
図６は，本実施の形態における乗算回路の概略構成図である。図６の乗算回路は，図１と同様に，乗数Ｙの組合せをデコードするブースデコーダ１１と，デコード結果に応じて被乗数Ｘと乗数Ｙの部分積ＰＭを生成するブースセレクタ１２とを有する部分積生成回路１０と，複数の部分積ＰＭを並列に加算するキャリー保存加算器（ＣＳＡ）をツリー状に配置し，所定段のキャリー保存加算器が出力する加算データとキャリーデータを後段のキャリー保存加算器が加算する部分積加算回路（ワレスツリー加算回路）２０，２１を有する。また，ワレスツリー加算回路の最終段のＣＳＡ２１の後に，加算データＳＵＭとキャリーデータＣＲＹとを加算する全加算器３０を有する。
【００３０】
図６の乗算回路は，さらに，複数のデータを並列に乗算する並列モードで，上位側の並列データのブースデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部５０を有する。この補正ホットビット生成部５０は，ブースデコーダ１１のデコード結果に応じて補正キャリーの判定を行って補正キャリー信号を出力する補正キャリー判定回路５０＿１と，補正キャリー信号に基づいて補正ホットビット信号を生成する補正ホットビット生成回路５０＿２とを有する。
【００３１】
この乗算回路では，第１に，入力される被乗数Ｘを上位側の並列データ（要素１）と下位側の並列データ（要素０）の並列データに分割し，要素１の下位側を全て０にし，要素０の上位側を全て０にする分割回路３０を設け，第２に，ブースセレクタ１２が生成する要素０の部分積ＰＭ＿０の最下位ビットと，要素１の部分積ＰＭ＿１の最下位ビットにホットビットＨを加算し，第３に，ワレスツリー加算回路２１に入力する上位側の要素１の下位側をゼロにマスクし，下位側の要素０の上位側をゼロにマスクするゼロマスク回路４０を設けることで，ワレスツリー加算回路２１での上位側と下位側の要素１，０が混ざってしまい誤った加算結果が出力されることを防止する。
【００３２】
このゼロマスク回路４０により上位側の要素１の下位側をゼロにマスクすることで，部分積ＰＭ＿１に加算したホットビットＨの一部が消失してしまう。そこで，乗算回路は，この消失するホットビットＨを補正するための補正ホットビットをブースデコーダ１１のデコード結果に基づいて予め生成する補正ホットビット生成部５０＿１，５０＿２を有する。そして，補正ホットビットＣＨが上位側の要素１の最下位ビットに加算される。図６の例では，最終段の４ｔｏ２ＣＳＡ２１と，全加算器２２とで加算されている。補正ホットビットＣＨの加算は，ワレスツリー加算回路２０で加算するようにしても良い。但し，補正ホットビットＣＨは，要素１の３２ビットの最下位ビットに加算する必要がある。その結果，ゼロマスク回路４０で要素１の下位側がゼロに変換されても加算した補正ホットビットＣＨが消失することはない。
【００３３】
図６の乗算回路について，さらに具体的に説明する。乗算回路は，単精度と倍精度のデータについて乗算することができる。そして，乗算回路は，倍精度のデータを乗算できることを利用して，１組の被乗数Ｘと乗数Ｙを乗算する通常モードと，２組の被乗数Ｘ＿１，Ｘ＿０と乗数Ｙ＿１，Ｙ＿０をそれぞれ乗算する並列モードとを，切替可能に構成される。これを一般化すると，乗算回路は，単精度からｎ倍精度のデータについて乗算することができ，ｎ倍精度のデータを乗算できることを利用して，１組の被乗数Ｘと乗数Ｙを乗算する通常モードと，ｍ組の被乗数Ｘ＿１，Ｘ＿０と乗数Ｙ＿１，Ｙ＿０をそれぞれ乗算する並列モードとを，切替可能に構成される。並列モードでのデータはｎ／ｍ倍精度である。以下の実施の形態では，入力データは単精度３２ビットと倍精度６４ビットのいずれかであり，並列モードでは３２ビットの２組の被乗数Ｘ＿１，Ｘ＿０とが入力される例である。
【００３４】
図６の乗算回路では，分割回路３０が，上位側に要素１の被乗数Ｘ＿１が下位側に要素０の被乗数Ｘ＿０が格納された入力データを，上位側の要素１の下位側を全て０にし，下位側の要素０の上位側を全て０（または符号ビットＳ）にして，上位側の要素１のデータと下位側の要素０のデータとに分割する。そして，要素０のデータと要素１のデータがそれぞれブースセレクタ１２に入力される。
【００３５】
好ましくは，ブースセレクタ１２は，要素０のデータを入力し要素０の部分積ＰＭ＿０を生成する要素０のブースセレクタ１２＿０と，要素１のデータを入力し要素１の部分積ＰＭ＿１を生成する要素１のブースセレクタ１２＿１とを有する。そして，ブースデコーダ１１が，乗数Ｙ＿１，Ｙ＿０をそれぞれデコードしたデコード結果を出力し，両ブースセレクタ１２＿０，１２＿１がデコード結果に応じて要素０の部分積ＰＭ＿０，要素１の部分席ＰＭ＿１を同時に出力する。
【００３６】
図７は，ブースセレクタ１２の構成を示す図である。この例は，２次のブースアルゴリズムによる構成である。また，図７には，３２ビットのデータのうちｋビット目のブースセレクタのみが示されている。ブースデコーダ１１は，論理値表に示すように，被乗数Ｙの３ビットの組合せｎ＋１，ｎ，ｎ−１をデコードして，乗数Ｘの０倍，１倍（×１），２倍（×２），負の２倍（−×２），負の１倍（−×１），０倍のいずれかをデコード結果として出力する。ブースセレクタ１２は，デコード結果である１倍（×１），２倍（×２），負の２倍（−×２），負の１倍（−×１）に対応して，被乗数Ｘ［ｋ］をビットシフトせずに出力する（×１），左シフトして出力する（×２），ビットシフトせずビット反転して出力する（−×１），左シフトしてビット反転して出力する（−×２）のいずれかを選択して，部分積ＰＭ［ｋ］として出力するセレクタ１２１を有する。
【００３７】
ビット反転された部分積ＰＭには，最下位ビットにホットビットＨとして１が加算される。具体的には，部分積ＰＭをワレスツリー加算器２０の初段の最下位ビットのＣＳＡに加算するホットビット加算回路が設けられる。ビット反転して＋１加算することで，負の部分積が２の補数に変換される。
【００３８】
図６に戻り，ブースセレクタ１２＿０は，要素０の部分積ＰＭ＿０を生成し，ブースセレクタ１２＿１は，要素１の部分積ＰＭ＿１を生成する。乗数Ｙ＿０，Ｙ＿１がそれぞれ３２ビットとすると，２次のブースアルゴリズムにより部分積の数は３２／２＝１６個になる。ここで注意すべき点は，要素０の部分積ＰＭ＿０も要素１の部分積ＰＭ＿１も，最下位ビットにホットビットＨ（＝＋１）が加算されることである。特に，分割回路２０が上位側の要素１の下位側を全て０にマスクしたため，ブースセレクタ１２＿１が負の部分積をセレクトした場合，要素１の下位側が全て１にビット反転される。その結果，要素１のデータについても６４ビットの最下位ビットにホットビットを加算することで，上位側にある要素１の３２ビットのデータにホットビットが伝搬する。つまり，要素０の部分積ＰＭ＿０も要素１の部分積ＰＭ＿１も同様に，６４ビットの最下位ビットにホットビットを加算する構成をワレスツリー加算器２０の入力部に設ければよく，通常モードと並列モードとで部分積ＰＭに対するホットビットの加算回路を同じ構成にできる。
【００３９】
次に，乗算回路は，２組のワレスツリー加算器２０＿１，２０＿０を有する。このワレスツリー加算器２０＿１，２０＿０は，それぞれ３段の４ｔｏ２ＣＳＡで構成される。したがって，上位側のワレスツリー加算器２０＿１は，１６個の要素１の部分積ＰＭ＿１を入力し２個の部分積ＰＭ３＿１を出力する。下位側のワレスツリー加算器２０＿０も同様である。
【００４０】
図８は，ワレスツリー加算器２０＿１，２０＿０と，ワレスツリー加算器が内蔵する４ｔｏ２ＣＳＡとの回路構成を示す図である。図８の上側に示した４ｔｏ２ＣＳＡは，３つの入力ビットからキャリーアウトビットＣＯ，キャリービットＣと，加算ビットＳを出力するキャリー保存加算器ＣＳＡ３を２個有する。そして，一方のＣＳＡ３は入力ビットＡ２，Ａ３，Ａ４からキャリーアウトビットＣＯと加算ビットＳを出力し，もう一方のＣＳＡ３は下位ビットからのキャリーインビットＣＩと入力ビットＡ１とＣＳＡ３からの加算ビットを入力し，下段へのキャリービットＣと加算ビットＳとを出力する。各キャリーアウトビットＣＯとキャリービットＣと加算ビットＳの論理式が図８に示されている。
【００４１】
４ｔｏ２ＣＳＡは，入力データのビット数だけ横方向に配列され，下位ビットからのキャリーアウトＣＯが上位ビットにキャリーインＣＩとして入力されるが，最下位ビットからのキャリーが最上位ビットまで伝搬することはない。これがＣＳＡの演算時間が短い理由である。
【００４２】
更に，図８にはワレスツリー加算器２０＿１，２０＿０の内部構成が示される。初段の４つの４ｔｏ２ＣＳＡには，１６個の部分積が４グループに分けて入力される。つまり，初段の４つの４ｔｏ２ＣＳＡがそれぞれ４つの部分積を有するグループＡ，Ｂ，Ｃ，Ｄを入力する。更に，初段の４つの４ｔｏ２ＣＳＡがそれぞれ出力する４組のキャリーデータＣと加算データＳとを，次段の２つの４ｔｏ２ＣＳＡがそれぞれ入力し，キャリーデータＣと加算データＳとをそれぞれ出力する。そして，３段目の１つの４ｔｏ２ＣＳＡは２組のキャリーデータＣと加算データＳを入力し，キャリーデータＣと加算データＳとを出力する。
【００４３】
図６に戻り，上記の通り，４ｔｏ２ＣＳＡは，４入力Ａ１−Ａ４に対して加算データＳとキャリーデータＣを出力するので，１段の４ｔｏ２ＣＳＡでデータの数が半減する。したがって，３段の４ｔｏ２ＣＳＡによりデータ数が１／２３＝１／８に減ることになる。よって，ワレスツリー加算器２０＿１が，１６個の部分積ＰＭ＿１から２個の部分積ＰＭ３＿１，つまり加算データＳＵＭとキャリーデータＣＲＹを生成する。同様に，下位側のワレスツリー加算器２０＿０は，１６個の要素０の部分積ＰＭ＿０を入力し２個の部分積ＰＭ３＿０，つまり加算データＳＵＭとキャリーデータＣＲＹを出力する。
【００４４】
２組のワレスツリー加算器２０＿１，２０＿０が，上位側の要素１の１６個の部分積ＰＭ＿１と下位側の要素０の１６個の部分積ＰＭ＿０をそれぞれ加算するので，それぞれのワレスツリー加算器２０＿１，２０＿０では，要素１の部分積ＰＭ＿１と要素０の部分積ＰＭ＿０とが混ざり合うことはない。
【００４５】
さらに，キャリー保存加算器ＣＳＡは，各桁で発生したキャリーを全て伝搬せずに保存して加算データとキャリーデータを出力し，次の段のキャリー保存加算器ＣＳＡに入力する。したがって，ワレスツリー加算器２０＿１，２０＿０が出力する部分積ＰＭ３＿１，ＰＭ３＿０内には加算したホットビットＨの伝搬によるキャリーが含まれている。
【００４６】
そして，２つの部分積ＰＭ３＿１と２つの部分積ＰＭ３＿０とを合わせて計４つのデータが，最終段の４ｔｏ２ＣＳＡ２１に入力されると，上位側の要素１と下位側の要素０とが混じり合うことになる。そこで，乗算回路は，上位側の要素１の下位ビットを０に置きかえ，下位側の要素０の上位ビットを０に置きかえるゼロマスク回路４０を有する。このゼロマスク回路によるゼロへの置きかえにより，上位側の要素１の下位ビットに含まれていたホットビットの伝搬によるキャリーが消失される。
【００４７】
そこで，ゼロマスク回路４０により消失されたホットビットを，上位側の要素１のデータに加算する必要がある。この追加すべきホットビットを補正ホットビットと称する。図６の乗算回路は，ブースデコーダ１１による上位側の要素１の乗数Ｙ＿１のデコード結果に応じて，補正すべきキャリーを判定する補正キャリー判定回路５０＿１と，補正キャリー信号に基づいて補正ホットビットを生成する補正ホットビット生成回路５０＿２とを有する。補正キャリー判定回路５０＿１と補正ホットビット生成回路５０＿２により，補正ホットビットＣＨを生成する補正ホットビット生成部が構成される。
【００４８】
上記の補正ホットビットＣＨを上位側の要素１の最下位ビットに加算することで，ゼロマスク回路４０により消失されたホットビットを補うことができる。補正ホットビットＣＨを加算する回路は，図６の例では，最終段の４ｔｏ２ＣＳＡの入力部または全加算器２２の入力部に設けられる。後述するとおり，３段の４ｔｏ２ＣＳＡの例では，補正ホットビットＣＨは２，１，０のいずれかである。そこで，図６の例では，補正ホットビットＣＨが最大値２の場合は，最終段の４ｔｏ２ＣＳＡの入力部と全加算器２２の入力部で＋１ずつ加算され，補正ホットビットＣＨが１の場合は最終段の４ｔｏ２ＣＳＡの入力部または全加算器２２の入力部のいずれかで加算される。
【００４９】
図６の乗算回路は，最終段の４ｔｏ２ＣＳＡ２１が出力する部分積ＰＭ５の加算データＳＵＭとキャリーデータＣＲＹを，全加算器２２が加算して乗算値データＭＰを出力する。部分積ＰＭ５は，上位側に要素１のデータを，下位側に要素０のデータをそれぞれ有する。そして，全加算器２２が，部分積ＰＭ５の加算データＳＵＭとキャリーデータＣＲＹとを加算して乗算値データＭＰを出力する。全加算器２２はキャリーを全て伝搬させて入力データを加算するので，乗算値データＭＰにはブースセレクタ１２の出力に加算したホットビットＨが全て反映される。
【００５０】
［補正ホットビットの生成アルゴリズム］
次に，図６の乗算回路内の補正キャリー判定回路５０＿１と補正ホットビット生成回路５０＿２による補正ホットビットの生成アルゴリズムについて説明する。
【００５１】
図６の乗算回路では，分割回路３０が要素１の下位側を全て０にし，要素０の上位側を全て０または符号ビットＳにする。したがって，要素１の下位側を全て０にしてブースセレクタ１２＿１に入力した結果，ブースセレクタ１２＿１によりセレクトされる要素０の下位側は，正の部分積がセレクトされると全て０になり，負の部分積がセレクトされると全て１になる。この結果，ワレスツリー加算器２０＿１の入力と出力との間にはある規則性が生じる。
【００５２】
図９は，４ｔｏ２ＣＳＡの４入力の全パターンに対する出力Ｓ，Ｃとキャリーの関係を示す図である。入力される要素１の下位側は全て０か全て１かである。したがって，４ｔｏ２ＣＳＡの４入力についての組合せは１６通りとなる。４ｔｏ２ＣＳＡは組み合わせ回路であるので，４つの入力と２つの出力の組合せは一意に決まり，４つの入力が００００のときは出力Ｓ，Ｃは００，４つの入力が１１１１のときは出力Ｓ，Ｃは１１，それ以外のときは出力Ｓ，Ｃは１０または０１である。
【００５３】
また，ワレスツリー加算器では，４ｔｏ２ＣＳＡが，出力Ｃ，Ｓ以外にキャリーアウトＣＯを出力し上位ビットに伝搬する。要素１の下位側のビットにおけるキャリーＣとキャリーアウトＣＯは，負の部分積の場合に加算したホットビットＨの伝搬そのものである。したがって，キャリーＣとキャリーアウトＣＯが発生した数は，ホットビットＨが伝搬した数になる。以上を前提にして，４ｔｏ２ＣＳＡの入力と出力の組合せ，キャリーＣ，ＣＯが発生した数，ホットビット伝搬のために発生すべきキャリーの数について説明する。
【００５４】
なお，図９では，便宜上，要素１の下位側の３２ビットのうち任意の３ビットだけを示している。また，図９では，１段の４ｔｏ２ＣＳＡにおいて発生したキャリーの数と発生すべきキャリーの数とそれらの差分とを示している。１段の４ｔｏ２ＣＳＡの法則性が理解できれば，３段またはＮ段（Ｎは複数）の４ｔｏ２ＣＳＡによるワレスツリー加算器において発生したキャリーの数と発生すべきキャリーの数とそれらの差分とを知ることができる。
【００５５】
（１）パターンＺは，４入力Ａ１−Ａ４が全て０の例である。図８の論理式に示したとおり，入力Ａ２，Ａ３，Ａ４からキャリーアウトＣＯが生成され，キャリーアウトＣＯは上位ビットでキャリーインＣＩとなる。そして，入力Ａ２，Ａ３，Ａ４から生成された加算ビットと入力Ａ１とキャリーインＣＩ（＝ＣＯ）からキャリービットＣと加算ビットＳとが生成される。４入力Ａ１−Ａ４が全て０の場合は，出力Ｓ，Ｃは００となる。また，生成されたキャリーＣは０，キャリーアウトＣＯは０であるので，発生したキャリーＣＲＹも０である。そして，発生すべきキャリーＣＲＹの数は，入力Ａ１−Ａ４の１の数に等しいので，０である。つまり，入力Ａ１−Ａ４の下位側が全て１の場合は負の部分積が選択されてホットビットＨが加算されているからである。上記から，発生すべきキャリーＣＲＹの数から発生したキャリーＣＲＹの数を減算した差分は，０−０＝０である。つまり，入力Ａ１−Ａ４が全て０の場合は，ゼロマスク回路４０により失われるホットビットの数は，上記の差分の０になることが理解できる。
【００５６】
（２）パターンＸ−１は，４入力Ａ１−Ａ４のうち１つが１で残り３つが０の例である。この場合の出力Ｓ，Ｃは１０であり，発生したキャリーＣＲＹの数（ＣＯ＋Ｃ）は０，発生すべきキャリーＣＲＹの数（入力の１の数）は１となる。したがって差分は１になる。４種類の入力の組合せのいずれも同じ結果になる。
【００５７】
（３）パターンＸ−２は，４入力Ａ１−Ａ４のうち２つが１で残り２つが０の例である。この場合の出力Ｓ，Ｃは１０または０１であり，発生したキャリーＣＲＹの数（ＣＯ＋Ｃ）は１，発生すべきキャリーＣＲＹの数（入力の１の数）は２となる。したがって差分は１になる。
【００５８】
（４）パターンＸ−３は，４入力Ａ１−Ａ４のうち３つが１で残り１つが０の例である。この場合の出力Ｓ，Ｃは０１であり，発生したキャリーＣＲＹの数（ＣＯ＋Ｃ）は２，発生すべきキャリーＣＲＹの数（入力の１の数）は３となる。したがって差分は１になる。
【００５９】
（５）パターンＦは，４入力Ａ１−Ａ４がすべて１の例である。この場合の出力Ｓ，Ｃは１１であり，発生したキャリーＣＲＹの数（ＣＯ＋Ｃ）は２，発生すべきキャリーＣＲＹの数（入力の１の数）は４となる。したがって差分は２になる。
【００６０】
上記の４入力パターンに対する出力Ｓ，Ｃには，加算したホットビットは反映されていない。
【００６１】
図１０は，図９に示した５つのパターンの発生したキャリーＣＲＹ，発生すべきキャリーＣＲＹ，それらの差分をまとめた図である。図１０には，図９と同じように，５つのパターンＺ，Ｘ−１，Ｘ−２，Ｘ−３，Ｆに対する出力Ｓ，Ｃの組合せが示され，図１０内の表には，５つのパターンに対する発生したキャリーＣＲＹ，発生すべきキャリーＣＲＹ，それらの差分が示されている。
【００６２】
そこで，図１０にまとめた入力パターンと，出力Ｓ，Ｃと，発生したキャリーＣＲＹと，発生すべきキャリーＣＲＹと，それらの差分（消失で不足するホットビットの数）に基づいて，３段の４ｔｏ２ＣＳＡのワレスツリー加算器における不足するホットビットの数について，以下で検討する。
【００６３】
図１１は，ワレスツリー加算器により伝搬するキャリーと不足するホットビットの数の一例を示す図である。図１１は，一例として，ワレスツリー加算器に入力する４組の４入力が，グループＡ（Ｘ−３），グループＢ（Ｘ−１），グループＣ（Ｘ−２），グループＤ（Ｆ）の場合において，３段の４ｔｏ２ＣＳＡで伝搬するキャリーを示している。グループＡ−Ｄと図１０のパターンＺ，Ｘ−１，Ｘ−２，Ｘ−３，Ｆとの関係は，括弧内に示したとおりである。
【００６４】
図１１において，１段目の４つの４ｔｏ２ＣＳＡで発生したキャリーＣＲＹ，発生すべきキャリーＣＲＹ，それらの差分は，図示されるとおりである。したがって，１段目で発生したキャリーＣＲＹ，発生すべきキャリーＣＲＹ，差分は，４つの４ｔｏ２ＣＳＡのキャリーＣＲＹ，発生すべきキャリーＣＲＹ，差分の数を合計した数になり，図示されるとおり，５，１０，５である。
【００６５】
次に，２段目の２つの４ｔｏ２ＣＳＡには，グループＡ，Ｂそれぞれの出力Ｓ，Ｃからなる４つのデータ（Ｘ−２）と，グループＣ，Ｄそれぞれの出力Ｓ，Ｃからなる４つのデータ（Ｘ−３）とが入力される。図１０によれば，それぞれの４ｔｏ２ＣＳＡで発生するキャリーＣＲＹの数は１，２であるので，２段目で発生したキャリーＣＲＹの合計は３，１段目で残っていたキャリー（差分）が５だったため，２段目での残りのキャリーＣＲＹの数を示す差分は，５−３＝２になる。
【００６６】
そして，３段目の１つの４ｔｏ２ＣＳＡには，グループＡＢの出力Ｓ，ＣとグループＣＤの出力Ｓ，Ｃからなる４つのデータ（Ｘ−２）が入力される。図１０によれば，４ｔｏ２ＣＳＡで発生したキャリーＣＲＹの数は１であるので，２段目で残っているキャリー（差分）の数２から３段目で発生したキャリーＣＲＹの数１を減じると，３段目での残りのキャリーＣＲＹの数を示す差分は，２−１＝１になる。
【００６７】
図１１によれば，要素１の入力の組合せがパターンＸ−３，Ｘ−１，Ｘ−２，Ｆの場合は，３段のワレスツリー加算器の出力Ｓ，Ｃに残っているキャリーＣＲＹの数は１になるので，補正ホットビットＣＨは１になる。
【００６８】
ワレスツリー加算器１２は，４ｔｏ２ＣＳＡが３段積まれていて，各グループの入力データは２４＝１６種類あるので，図１１により予測される補正ホットビットの種類の組合せは膨大な数になる。しかしながら，４ｔｏ２ＣＳＡの出力が入力パターンによって一意に決まること，その出力が次段の４ｔｏ２ＣＳＡの入力なる。したがって，図１１に示した５つのパターンＺ，Ｘ−１，Ｘ−２，Ｘ−３，Ｆに対する出力Ｓ，Ｃに基づいて，３段のワレスツリー加算器において発生する補正ホットビットの規則性は以下の通りとなる。
【００６９】
図１２は，３段のワレスツリー加算器の各段の４ｔｏ２ＣＳＡの入力パターンを示す図である。まず，４ｔｏ２ＣＳＡの入出力の組合せの規則に基づいて，３段のワレスツリー加算器の各段の４ｔｏ２ＣＳＡの入力パターンを検討する。
【００７０】
（１）ＣＳＡの入力がパターンＺであれば出力ＳＣ＝００であるので，４グループの入力Ａ−Ｄが全てパターンＺの場合は，２段目の入力パターンも全てＺになり，３段目の入力パターンもＺになる。つまり，入力が全てパターンＺの場合は３段目の入力パターンはＺになり，その出力ＳＣ＝００になる。
【００７１】
（２）ＣＳＡの入力がパターンＦであれば出力ＳＣ＝１１であるので，４グループの入力Ａ−Ｄが全てパターンＦの場合は，２段目の入力パターンも全てＦになり，３段目の入力パターンもＦになる。つまり，入力が全てパターンＦの場合は３段目の入力パターンはＦになり，その出力ＳＣ＝１１になる。
【００７２】
（３）ＣＳＡの入力がパターンＸであれば出力ＳＣ＝０１または１０であるので，ワレスツリーのどこかでパターンＸの入力が発生すると，その先の入力はパターンＸに収束する。そして，その場合３段目の出力ＳＣ＝０１または１０になる。
【００７３】
図１３，図１４は，入力パターンの組合せ例に対する１段目での差分（不足数），２，３段目で発生したキャリーＣＲＹ，最終的に残った数（補正値）を示す図である。図１０の表を参照して，図１３，図１４の５つの例について説明する。
【００７４】
（１）４グループの入力がパターンＸのみの例である。この場合，１段目の４つのＣＳＡでのキャリーの不足数（差分）は合計４である。２段目以降の入力はパターンＸに収束し，発生するキャリー数は合計３となる。したがって，１段目のキャリーの不足数４に対して２，３段目のキャリー発生数３であるので，補正すべきキャリー数は１になる。つまり，補正ホットビットは１になる。
【００７５】
（２）４グループの入力にパターンＺが含まれる例である。この場合，パターンＺが入力の場合のキャリーの不足数（差分）は０であるので，３つのパターンＸにより，１段目の４つのＣＳＡでのキャリーの不足数（差分）は合計３である。２段目では，パターンＺとＸの組合せではパターンＸ−１となりキャリーが発生せず，パターンＸとＸの組合せではパターンＸ−２となりキャリーが１発生し，発生するキャリー数は合計１となる。さらに，３段目で発生するキャリー数は１である。したがって，１段目のキャリーの不足数３に対して２，３段目のキャリー発生数２であるので，（１）と同様に，補正すべきキャリー数は１になる。つまり，補正ホットビットは１になる。
【００７６】
（３）４グループの入力にパターンＦが含まれる例である。この場合，パターンＦが入力の場合のキャリーの不足数（差分）は２であるので，３つのパターンＸによる不足分の３を加えて，１段目の４つのＣＳＡでのキャリーの不足数（差分）は合計５である。２段目では，パターンＸとＦの組合せではパターンＸ−３となりキャリーが２発生し，パターンＸとＸの組合せではパターンＸ−２となりキャリーが１発生し，発生するキャリー数は合計３となる。さらに，３段目で発生するキャリー数は１である。したがって，１段目のキャリーの不足数５に対して２，３段目のキャリー発生数が４であるので，（１）（２）と同様に，補正すべきキャリー数は１になる。つまり，補正ホットビットは１になる。
【００７７】
（４）４グループの入力が全てパターンＺの例である。この場合は，１段目の不足数は０，２，３段目のキャリー発生数は０，その結果補正すべきキャリー数も０になる。
【００７８】
（５）４グループの入力が全てパターンＦの例である。この場合は，ツリーの入力は全てパターンＦになる。よって，１段目で不足する数（差分）は２×４＝８，２段目で発生するキャリー数は２×２＝４，３段目で発生するキャリー数は２である。したがって，補正すべきキャリー数は２となる。
【００７９】
上記の法則は，ワレスツリー加算器が３段構成に限らず，２段または４段以上の構成であっても適用される。したがって，入力データである部分積の数にかかわらず上記の法則は適用できる。
【００８０】
上記の５つの例をまとめると，入力にパターンＸが含まれる場合は，補正値（不足するキャリー数，差分）は１，入力が全てパターンＺの場合は０，入力が全てパターンＦの場合は２になる。入力のパターンＸ，Ｚ，Ｆは１の数に基づいており，入力が１になるのはブースデコーダのデコード値が負の部分積を選択しビット反転した場合，つまりデコード値が−×１，−×２の場合である。
【００８１】
したがって，この法則を利用すれば，補正すべきキャリー数，つまり補正ホットビットの数は，ブースデコーダのデコード値が−×１または−×２になる数に基づいて判定することができる。すなわち，入力にパターンＸが含まれるか否かは，１６個のブースデコード値のうち負を示す−×１，−×２がひとつでもあるかどうかで判定する。入力が全てパターンＦか否かは，１６個の全てのブースデコード値が−×１，−×２のどちらかであるかどうかで判定する。入力が全てパターンＺになるか否かは，１６個のブースデコード値が−×１，−×２のいずれにもならないかどうかで判定する。
【００８２】
図１５は，補正ホットビット生成部５０の回路図である。補正ホットビットＣＨ［１：０］は，以下のようにして生成される。まず，補正キャリー判定回路５０＿１は，３２ビットの乗数Ｙ＿１の３ビットの組合せをデコードする１６個のブースデコーダ１１＿１〜１１＿１６それぞれのブースデコード値が−×１，−×２のいずれかであることを検出するＯＲゲート５１＿１〜５１＿１６と，これら１６個のＯＲゲート５１の出力を入力して第１の補正キャリーＣＲＹ＿１を出力するＯＲゲート５２と，同じ１６個のＯＲゲート５１の出力を入力して第２の補正キャリーＣＲＹ＿２を出力するＡＮＤゲート５３とを有する。
【００８３】
ＯＲゲート５２が出力する第１の補正キャリーＣＲＹ＿１は，入力にパターンＸが一つでも含まれるか否かを示す。したがって，第１の補正キャリーＣＲＹ＿１＝１であれば，補正ホットビットは１になる。また，第２の補正キャリーＣＲＹ＿２は，入力全てがパターンＦであるか否かを示す。したがって，第２の補正キャリーＣＲＹ＿２＝１であれば，補正ホットビットは２になる。
【００８４】
補正ホットビット生成回路５０＿２は，インバータ５４とＡＮＤゲート５５とを有する。上記したとおり，２ビットの補正ホットビットＣＨ［１：０］は，次の通りである。
ＣＨ［０］＝ＣＲＹ＿１＊（ｎｏｔＣＲＹ＿２）
ＣＨ［１］＝ＣＲＹ＿２
これにより，補正ホットビットＣＨ［１：０］は，００，０１，１０のいずれか，つまり補正ホットビット数０，１，２いずれかになる。
【００８５】
図６に示したとおり，補正ホットビット生成ユニット５０は，ワレスツリー加算器２１の動作と並行して行うことができる。そして，補正ホットビットは，ワレスツリー加算器２１以降のどこかで要素１の最下位ビットに加算するようにすればよい。この結果，補正ホットビットを加算することによる，本来のブースアルゴリズムによる部分積生成回路とワレスツリー加算器の動作に遅延の影響を与えることはない。
【００８６】
［乗算器の具体的構成］
図１６，図１７は，本実施の形態における乗算回路の具体的な構成を示す図である。図６の乗算回路の具体例である。この乗算回路は，単精度３２ビットまたは倍精度６４ビットの乗算を行う通常モードと，２つの３２ビットの並列データを並列に乗算する並列モードとを有する。図１６，１７には，並列モードでの並列データが示され，図６と同様に並列データが上位側の要素１と下位側の要素０で構成される。図６と同じ構成には同じ引用番号を付与している。
【００８７】
図１６において，被乗数として要素１の被乗数Ｘ＿１と要素０の被乗数Ｘ＿０とが入力される。また，乗数として要素１の乗数Ｙ＿１と要素０の乗数Ｙ＿０とが入力される。要素１，０の乗数，被乗数はいずれも３２ビット構成である。
【００８８】
乗算回路は，要素１と要素０を分割する分割回路３０を有する。分割回路３０は，要素１，０の並列データを，上位側を要素１の３２ビットデータに下位側を全て０にした要素１の被乗数データＸ＿１と，上位側を全て０（または符号ビットＳ）に下位側を要素０の３２ビットデータにした要素０の被乗数データＸ＿０とに分割する。
【００８９】
図１８は，分割回路の一例を示す図である。分割回路３０は，並列モードで並列モード信号ＭＯＤＥが１に制御される場合に，入力される被乗数Ｘのうち要素１のデータを上位ビット［６３：３２］に下位ビット［３１：０］を０にし，要素０のデータを下位ビット［３１：０］に上位ビット［６３：３２］を０にして，分割後の要素１のデータＸ＿１，要素０のデータＸ＿０を出力する。
【００９０】
図１６に戻り，ブースセレクタ１２＿１は，分割後の要素１のデータＸ＿１を入力し，ブースデコーダ１１による要素１の乗数Ｙ＿１のデコード値に応じて，部分積ＰＭ＿１を出力する。同様に，ブースセレクタ１２＿０は，分割後の要素０のデータＸ＿０を入力し，ブースデコーダ１１による要素０の乗数Ｙ＿０のデコード値に応じて，部分積ＰＭ＿０を出力する。好ましくは，ブースデコーダ１１は，要素１，０の乗数Ｙ＿１，Ｙ＿０それぞれの１６通りの３ビットを同時にデコードし，それぞれ１６のデコード値を出力する。そして，好ましくは，ブースセレクタ１２＿１，１２＿０も，要素１，０それぞれの１６のデコード値に応じて，それぞれ１６個の部分積ＰＭ＿１，ＰＭ＿０を同時に出力する。
【００９１】
図１９は，ブースデコーダ１１とブースセレクタ１２＿１，１２＿０の構成を示す図である。図１９には，ブースデコーダ１１の１組のデコード値（×１，×２，−×２，−×１）に対するブースセレクタ回路が示されている。ブースセレクタ１２＿＃は，６４ビットの入力データからデコード値に基づいて選択した６４ビットのデータを出力する。そして，図１９内の１ビット分のブースセレクタ回路は，図７に示した回路と同じである。
【００９２】
前述したとおり，好ましい例では，ブースデコーダ１１が要素１，０の乗数Ｙ＿１，Ｙ＿０に対してそれぞれの１６個のデコード値を出力する。したがって，図１６の好ましいブースデコーダ１１とブースセレクタ１２は，図１９に示した回路を１６個×２＝３２個有する。
【００９３】
ブースセレクタ１２＿＃は，デコード値が−×１，−×２のいずれかの場合に，被乗数Ｘ＿１，Ｘ＿０のビットを反転して出力する。その場合は，反転されたデータにホットビットとして１を加算して２の補数を生成する必要がある。そのために，図１９の回路は，ブースセレクタ１２＿＃が出力する部分積ＰＭ＿＃にホットビットを加算する回路６０を有する。このホットビット加算回路６０は，デコード値が−×１，−×２のいずれかの場合に１を出力するＯＲ回路である。そして，部分積ＰＭ＿＃とホットビット加算回路６０が出力するホットビットＨとが，ワレスツリー加算器２０に入力され，ホットビットが加算される。つまり，ホットビット加算回路６０は，ホットビットＨをワレスツリー加算器に入力し加算させる。
【００９４】
図１６に戻り，ブースセレクタ１２＿１，１２＿０が要素１，０の部分積ＰＭ＿１，ＰＭ＿０をそれぞれ出力する。部分積ＰＭ＿１，ＰＭ＿０は，それぞれ１６個の部分積を有する。好ましくは，ブースセレクタ１２＿１，１２＿０が要素１，０それぞれの１６個の部分積を同時に出力する。そして，要素１，０それぞれの１６個の部分積ＰＭ＿１，ＰＭ＿０は，ワレスツリー加算器２０に入力され，図示しないホットビットと共に加算される。ワレスツリー加算器２０は，要素１，０それぞれの１６個の部分積ＰＭ＿１，ＰＭ＿０を，最初に異なるワレスツリー２０＿１，２０＿０で加算してから，その加算結果を共通のワレスツリー２１のＣＳＡで加算する。図１６には，ワレスツリー加算器２０の最終段の全加算器２２が示されている。
【００９５】
図１７には，図１６のワレスツリー加算器２０の構成が示されている。ワレスツリー加算器２０は，要素１の部分積ＰＭ＿１を入力して加算する第１のワレスツリー加算器２０＿１と，要素０の部分積ＰＭ＿０を入力して加算する第２のワレスツリー加算器２０＿０と，ゼロマスク回路４０＿１，４０＿０と，共通の第３のワレスツリー加算器２１と，全加算器２２＿１，２２＿０とを有する。
【００９６】
第１，第２のワレスツリー加算器２０＿１，２０＿０は，それぞれ３段の４ｔｏ２ＣＳＡを有し，それぞれ１６個の部分積ＰＭ＿１，ＰＭ＿０を加算して，それぞれ加算データＳとキャリーデータＣを有する部分積ＰＭ３＿１，ＰＭ３＿０を出力する。つまり，１６入力から２出力が生成される。したがって，第１，第２のワレスツリー加算器２０＿１，２０＿０では，要素１と要素０の部分積ＰＭ＿１．ＰＭ＿０が混ざり合うことはない。
【００９７】
ワレスツリー加算器では，更に，それぞれ加算データＳとキャリーデータＣを有する部分積ＰＭ３＿１，ＰＭ３＿０の４つのデータを一緒に加算する第３のワレスツリー加算器２１を有する。但し，この第３のワレスツリー加算器２１では，要素１，０の部分積ＰＭ３＿１，ＰＭ３＿０が混ざり合う。そこで，マスク回路４０＿１が要素１の部分積ＰＭ３＿１の下位側を０に変換し，マスク回路４０＿０が要素０の部分積ＰＭ３＿０の上位側を０に変換し，ワレスツリー加算器２１がそれぞれゼロマスクされた要素１，０の部分積ＰＭ４＿１，ＰＭ４＿０を加算する。ワレスツリー加算器２１は１段の４ｔｏ２ＣＳＡを有し，要素１，０のそれぞれ加算データＳとキャリーデータＣとを有する部分積ＰＭ４＿１，ＰＭ４＿０を加算して，加算データＳとキャリーデータＣを有する部分積ＰＭ５を出力する。
【００９８】
ワレスツリー加算器２１では，要素１の部分積ＰＭ４＿１と要素０の部分積ＰＭ４＿０が４ｔｏ２ＳＡにより加算されるが，対応するビットでは要素１または要素０のデータしかないので，両要素１，０のデータが混ざり合うことはない。
【００９９】
しかし，ゼロマスク回路４０−１で下位側がゼロにマスクされた要素１のデータからは残っているキャリーが消失する。そこで，補正ホットビットＣＨ［１：０］が，ワレスツリー加算器２１と全加算器２２＿１に入力され加算される。例えば，補正ホットビットＣＨ［１：０］＝０１であれば，例えばワレスツリー加算器２１にのみ１が加算され，ＣＨ［１：０］＝１０であれば，ワレスツリー加算器２１と全加算器２２＿１にそれぞれ１が加算される。
【０１００】
そして，全加算器２２が出力する乗算値ＰＭは要素１の乗算データと要素０の乗算データとを含み，要素１の乗算データはホットビットが補正されている。
【０１０１】
図２０は，ワレスツリー加算器の構成を示す図である。ワレスツリー加算器は，要素１，０のそれぞれ１６個の部分積ＰＭ＿１，ＰＭ＿０を別々に加算する第１，第２のワレスツリー加算器２０＿１，２０＿０と，要素１，０の部分積を合わせて加算する第３のワレスツリー加算器２１と，全加算器２２とを有する。そして，第１，第２のワレスツリー加算器２０＿１，２０＿０と第３のワレスツリー加算器２１との間に，要素１，０の下位側と上位側をそれぞれゼロマスクするゼロマスク回路４０＿１，４０＿０を有する。さらに，第３のワレスツリー加算器２１の入力と，全加算器２２の入力に補正ホットビットを入力する補正ホットビット加算回路６２を有する。
【０１０２】
第１のワレスツリー加算器２０＿１は，前述のとおり，３段の４ｔｏ２ＣＳＡを有し，初段は４グループＡ〜Ｄの入力をそれぞれ加算する４組の４ｔｏ２ＣＳＡを有し，２段目はグループＡ，Ｂそれぞれの加算データとキャリーデータを加算し，グループＣ，Ｄそれぞれの加算データとキャリーデータを加算する２組の４ｔｏ２ＣＳＡを有し，３段目はグループＡＢとＣＤそれぞれの加算データとキャリーデータを加算する１組の４ｔｏ２ＣＳＡを有する。
【０１０３】
マスク回路４０＿１，４０＿０は，並列モード信号ＭＯＤＥ＝１の場合にＡＮＤゲートにより要素１の下位側のビットを０に変換し，要素０の上位側のビットを０に変換する。
【０１０４】
そして，第３のワレスツリー加算器２１は，要素１の加算データＳとキャリーデータＣ及び要素２の加算データＳとキャリーデータＣを有し，それぞれゼロマスクされた部分積ＰＭ４＿１，ＰＭ４＿０を加算して，加算データとキャリーデータを有する部分積ＰＭ５出力する。この部分積ＰＭ５の加算データとキャリーデータは，要素１，０のデータを上位側と下位側に有する。最後に，全加算器２２が部分積ＰＭ５の加算データとキャリーデータを全加算して，乗算データＭＰを出力する。
【０１０５】
補正ホットビット加算回路６２は，並列モード信号ＭＯＤＥ＝１で補正ホットビットＣＨ［１：０］を入力するマルチプレクサＭＵＸを有する。補正ホットビット加算回路６２は，ＣＨ［１：０］＝０１，１０の場合に，ＯＲゲートの出力「１」を第２のワレスツリー加算器２１の要素１の最下位の４ｔｏ２ＣＳＡに入力して＋１加算し，ＣＨ［１：０］＝１０の場合のみ全加算器２２の要素１の最下位の加算器に「１」を入力して＋１加算する。したがって，補正ホットビット加算回路６２は，実際には補正ホットビットを第３のワレスツリー加算器２１と全加算器２２の入力に供給し，加算させている。図１９で説明したホットビット加算回路６０が，第１のワレスツリー加算器２０＿０の入力にホットビットを供給しているのと同様である。
【０１０６】
［ｎ＝４，ｍ＝２の乗算回路］
キャリー補正値である補正ホットビットの予測は，４ｔｏ２ＣＳＡの入出力組合せで一意に決まるので，倍精度の数ｎと並列数ｍを変えても同様に予測することができる。したがって，本実施の形態は，たとえば，ｎ＝４，ｍ＝２とし，２次のブースアルゴリズムを利用した乗算回路に適用することができる。この場合は，データ幅は１２８ビット，要素の幅は６４ビットになる。その結果，ブースセレクタが出力する部分積の数は，要素１，０それぞれに３２個になる。したがって，第１，第２のワレスツリー加算器２０＿１，２０＿０は，それぞれ，入力数が８グループになり，４段構成になる。そして，図１５の補正ホットビット生成部の補正キャリー判定回路は，３２個のブースデコーダの出力を入力する構成になる。
【０１０７】
この場合でも，入力にパターンＸが含まれる場合は補正値（差分）は１，全てパターンＺの場合は補正値は０，全てパターンＦの場合は補正値は２になる。
【０１０８】
［３次のブースアルゴリズム］
３次以上のブースアルゴリズムを利用した乗算回路にも，本実施の形態を適用することができる。再び，ｎ＝２，ｍ＝２の例で説明する。
【０１０９】
図２１は，３次のブースアルゴリズムの場合のブースデコード表である。３次のブースデコーダは，乗数の４ビットの組合せをデコードして０，×１，×２，×３，×４，−×４，−×３，−×２，−×１のいずれかをデコード値として出力する。そして，デコード値が−×４，−×３，−×２，−×１の場合は，ビット反転をしてホットビットを加算する。したがって，図７，１９のブースセレクタは，デコード値が×３，×４，−×４，−×３の場合のビットシフト回路や加算回路が必要になる。
【０１１０】
図２２は，３次のブースアルゴリズムを使用した場合の補正ホットビット生成ユニットを示す図である。図示されるとおり，補正キャリー判定回路５０＿１のＯＲゲート５１＿１〜５１＿１６は，４つのデコード値−×４，−×３，−×２，−×１の論理和を出力する。それ以外の構成は，図１５と同じである。
【０１１１】
以上説明したとおり，本実施の形態の乗算回路によれば，ブースアルゴリズムの部分積生成回路とワレスツリー加算器に，並列モードの場合に上位側の要素１にホットビットを加算する回路を設ける必要がなく構成が簡単になる。また，ワレスツリー加算器により消失するホットビットを簡単な回路で補正することができる。よって，回路規模を大幅に増大することなく乗算回路の演算速度が向上する。
【０１１２】
以上の実施の形態をまとめると，次の付記のとおりである。
【０１１３】
（付記１）
乗数の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と，
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し，所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路と，
複数のデータを並列に乗算する並列モードで，上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成する補正ホットビット生成部とを有し，
前記部分積加算回路は，前記並列モードで，下位側の並列データを入力し第１の加算データ及び第１のキャリーデータを生成する第１のキャリー保存加算器と，上位側の並列データを入力し第２の加算データ及び第２のキャリーデータを生成する第２のキャリー保存加算器と，前記第１の加算データ及び第１のキャリーデータと前記第２の加算データ及び第２のキャリーデータとを加算する第３のキャリー保存加算器と，前記並列モードで，前記上位側の並列データに前記補正ホットビットを加算する補正ホットビット加算回路を有する乗算回路。
【０１１４】
（付記２）
さらに，
前記並列モードで，前記上位側の要素データの下位側の桁を０にして前記部分積生成回路に入力される被乗数の上位側の要素データを生成し，前記下位側の要素データの上位側の桁を０または符号ビットにして前記部分積生成回路に入力される被乗数の下位側の要素データを生成する分割回路を有し，
前記ブースセレクタは，前記デコード結果が負の部分積を選択する場合，セレクトされるデータをビット反転して前記負の部分積を生成し，
前記並列モード及び単一のデータを乗算する通常モードのいずれの場合も，前記負の部分積の最下位ビットにホットビットが加算される付記１に記載の乗算回路。
【０１１５】
（付記３）
前記部分積加算回路は，前記キャリー保存加算器に前記ホットビットを入力して加算させる付記２に記載の乗算回路。
【０１１６】
（付記４）
さらに，
前記並列モードで，前記第３のキャリー保存加算器に入力される前記第１の加算データ及び第１のキャリーデータの上位側の桁を０に変更し，前記第２の加算データ及び第２のキャリーデータの下位側の桁を０に変更するゼロマスク回路を有する付記１または２に記載の乗算回路。
【０１１７】
（付記５）
前記第３のキャリー保存加算器は，第１の前記補正ホットビット加算回路を有し，
前記第１の補正ホットビット加算回路は，前記並列モードで，前記第２の加算データまたは前記第２のキャリーデータに前記補正ホットビットを加算する付記１または４に記載の乗算回路。
【０１１８】
（付記６）
前記部分積加算回路は，前記第３のキャリー保存加算器が出力する第３の加算データ及び第３のキャリーデータを加算する全加算器を有し，
前記全加算器は，第２の前記補正ホットビット加算回路を有し，
前記第２の補正ホットビット加算回路は，前記並列モードで，前記第３の加算データ及び前記第３のキャリーデータに前記補正ホットビットを加算する付記５に記載の乗算回路。
【０１１９】
（付記７）
前記キャリー保存加算器は，４つの入力データを演算して加算データとキャリーデータを有する２つの出力データを出力し，
前記部分積加算回路は，複数段のキャリー保存加算器を有し，
前記補正ホットビット生成部は，前記並列モードで，前記上位側の要素データについて，前記乗数の複数の組合せのデコード結果が全て正の部分積（Ｚ）の場合は前記補正ホットビットを０に，全て負の部分積（Ｆ）の場合は前記補正ホットビットを２に，一部に負の部分積が含まれる場合は前記補正ホットビットを１にする付記１に記載の乗算回路。
【０１２０】
（付記８）
前記補正ホットビット生成部は，前記第１，第２のキャリー保存加算器と並列に前記補正ホットビットを生成し，前記補正ホットビット加算回路に前記補正ホットビットを出力する付記１に記載の乗算回路。
【０１２１】
（付記９）
乗数の組合せをデコードするブースデコーダと，デコード結果に応じて被乗数と前記乗数の部分積を生成するブースセレクタとを有する部分積生成回路と，
複数の前記部分積を並列に加算するキャリー保存加算器をツリー状に配置し，所定段の前記キャリー保存加算器が出力する加算データとキャリーデータを後段の前記キャリー保存加算器が加算する部分積加算回路とを有し，
前記部分積加算回路は，前記並列モードで，下位側の並列データを入力し第１の加算データ及び第１のキャリーデータを生成する第１のキャリー保存加算器と，上位側の並列データを入力し第２の加算データ及び第２のキャリーデータを生成する第２のキャリー保存加算器と，前記第１の加算データ及び第１のキャリーデータと前記第２の加算データ及び第２のキャリーデータとを加算する第３のキャリー保存加算器とを有する乗算回路の乗算方法において，
複数のデータを並列に乗算する並列モードで，上位側の並列データのデコード結果に応じて補正加算すべき補正ホットビットを生成し，
前記部分積加算回路は，前記並列モードで，前記上位側の並列データに前記補正ホットビットを加算する乗算方法。
【符号の説明】
【０１２２】
１１：ブースデコーダ
１２：ブースセレクタ
１０：部分積生成回路
２０，２１，２２：ワレスツリー加算器，部分積加算回路
ＣＳＡ：キャリー保存加算器
２２：全加算器
Ｈ，ＨＢ：ホットビット，補正ホットビット
３０：分割回路
４０：ゼロマスク回路
６０：ホットビット加算回路
６２：補正ホットビット加算回路
【図１】
0006350111.tif 000002
【図２】
0006350111.tif 000003
【図３】
0006350111.tif 000004
【図４】
0006350111.tif 000005
【図５】
0006350111.tif 000006
【図６】
0006350111.tif 000007
【図７】
0006350111.tif 000008
【図８】
0006350111.tif 000009
【図９】
0006350111.tif 000010
【図１０】
0006350111.tif 000011
【図１１】
0006350111.tif 000012
【図１２】
0006350111.tif 000013
【図１３】
0006350111.tif 000014
【図１４】
0006350111.tif 000015
【図１５】
0006350111.tif 000016
【図１６】
0006350111.tif 000017
【図１７】
0006350111.tif 000018
【図１８】
0006350111.tif 000019
【図１９】
0006350111.tif 000020
【図２０】
0006350111.tif 000021
【図２１】
0006350111.tif 000022
【図２２】
0006350111.tif 000023