(57)【特許請求の範囲】
【請求項１】
乗数と被乗数のそれぞれが単精度データ２ワード（ＸＨ、ＸＬとＹＨ、ＹＬ）によって構成されるブースのアルゴリズムを利用した倍精度乗算器において、
第１の入力に前記倍精度乗算器の外部から入力される第１の制御信号（Ｓ１）が入力され、第２の入力に前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）が入力され、出力が、前記倍精度乗算器に含まれる同一構成の複数のブースデコーダ（１A,1B,1C,1D）のうち、前記被乗数の上位ワード（ＹＨ）の最下位ビット（Ｙ４）とその上位に隣接するビット（Ｙ５）とが入力される１つのブースデコーダ(1B)のもう１つ別の入力に入力され、前記第１の制御信号（Ｓ１）に応じて、前記１つのブースデコーダに前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）と０とを切り替えて入力するアンドゲート(7A)と、
第１の入力に前記第１の制御信号（Ｓ１）が入力され、第２の入力に前記乗数の下位ワード（ＸＬ）の各ビット（Ｘ３〜Ｘ０）がそれぞれ入力される複数のアンドゲート(7B)と、
制御入力に前記被乗数の下位ワード（ＹＬ）をデコードする複数のブースデコーダ(1C,1D)の出力が入力され、乗数入力に前記複数のアンドゲート(7B)の出力が入力される複数の第１のブースセレクタ(2)と乗数入力に前記乗数の上位ワード（ＸＨ）が入力される複数の第２のブースセレクタ(2)とから成る第１のブースセレクタ群と、
第１の入力に前記乗数の下位ワード（ＸＬ）の最上位ビット（Ｘ３）が入力され、第２の入力に前記乗数の上位ワード（ＸＨ）の各ビット（Ｘ７〜Ｘ４）がそれぞれ入力され、前記第１の制御信号（Ｓ１）に応じてそれら２つの入力信号のうちどちらか一方を選択して出力する複数のセレクタ(10)と、
制御入力に前記被乗数の上位ワード（ＹＨ）をデコードする複数のブースデコーダ(1A,1B)の出力が入力され、乗数入力に前記乗数の下位ワード（ＸＬ）が入力される複数の第３のブースセレクタ(2)と乗数入力に前記複数のセレクタ(10)の出力が入力される複数の第４のブースセレクタ(2)とから成る第２のブースセレクタ群と、
前記第１及び第２のブースセレクタ群の出力が入力される並列加算回路(3)と
を具備し、
前記第１の制御信号（Ｓ１）が第１の論理レベル（“１”）のときには、前記１つのブースデコーダ(1B)に接続された前記アンドゲート(7A)は、前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）を出力し、前記乗数の上下のワード（ＸＨ、ＸＬ）がそれぞれ入力される前記複数のセレクタ(10)と前記複数のアンドゲート(7B)とは、前記乗数の上下のワードの各ビットをそれぞれ出力し、前記第１及び第２のブースセレクタ群がそれぞれの入力によって定まる部分積を生成することにより倍精度乗算が実行され、さらに、前記乗数と前記被乗数の上位ワード（ＸＨ、ＹＨ）のそれぞれに単精度データを入力すると共にそれらの下位ワード（ＸＬ、ＹＬ）の全ビットに０を入力することによって単精度乗算が実行され、前記第１の制御信号（Ｓ１）が第２の論理レベル（“０”）のときには、前記１つのブースデコーダ(1B)に接続された前記アンドゲート(7A)と前記乗数の下位ワード（ＸＬ）が入力される前記複数のアンドゲート(7B)とは、０をそれぞれ出力し、前記乗数の上位ワード（ＸＨ）が入力される前記複数のセレクタ(10)は、前記乗数の下位ワード（ＸＬ）の最上位ビット（Ｘ３）をそれぞれ出力し、前記第１及び第２のブースセレクタ群は、それぞれの入力によって定まる論理レベルの信号を倍精度乗算における部分積と同様に生成することにより、前記第１及び第２のブースセレクタ群が前記倍精度乗算において生成する部分積のうち、前記複数の第１のブースセレクタ(2)と前記複数の第４のブースセレクタ(2)とによって生成される部分積を等価的に零にして２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行されるようにしたことを特徴とする乗算器。
【請求項２】
請求項１に記載の乗算器において、さらに、
前記倍精度乗算器に含まれる複数のブースデコーダのうち、前記被乗数の下位ワード（ＹＬ）の最下位ビット（Ｙ０）とその上位に隣接するビット（Ｙ１）とが入力される１つのブースデコーダのもう１つ別の入力に前記倍精度乗算器の外部から入力される第２の制御信号（Ｓ２）を入力すると共に、前記第２の制御信号（Ｓ２）に応じて、前記被乗数の下位ワード（ＹＬ）をデコードする複数のブースデコーダに被乗数の下位ワード（ＹＬ）とその反転信号とを切り替えて入力する複数のエクスクルーシブオアゲート(11)を具備し、
前記第１の制御信号（Ｓ１）が前記第２の論理レベル（“０”）の場合に、前記第２の制御信号（Ｓ２）が第１の論理レベル（“１”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の下位ワード（ＹＬ）を反転し、前記複数のブースデコーダ(1C,1D)は、前記第２の制御信号（Ｓ２）によって与えられる前記第１の論理レベル（“１”）と前記被乗数の下位ワード（ＹＬ）の反転信号とをデコードすることにより２つの単精度乗算の差（ＸＬ×ＹＨ−ＸＨ×ＹＬ）が実行され、前記第２の制御信号（Ｓ２）が第２の論理レベル（“０”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の下位ワード（ＹＬ）を反転せずに出力し、前記複数のブースデコーダ(1C,1D)は、前記第２の制御信号（Ｓ２）によって与えられる前記第２の論理レベル（“０”）と前記被乗数の下位ワード（ＹＬ）とをデコードすることにより２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行されることを特徴とする乗算器。
【請求項３】
請求項１に記載の乗算器において、さらに、
第１の入力に前記第２の制御信号（Ｓ２）が入力され、第２の入力に前記アンドゲート(7A)の出力が入力され、出力が、前記倍精度乗算器に含まれる複数のブースデコーダのうち、前記被乗数の上位ワード（ＹＨ）の最下位ビット（Ｙ４）とその上位に隣接するビット（Ｙ５）とが入力される１つのブースデコーダのもう１つ別の入力に入力されるオアゲート(6)と、
前記第２の制御信号（Ｓ２）に応じて、前記被乗数の上位ワード（ＹＨ）をデコードする複数のブースデコーダに被乗数の上位ワード（ＹＨ）とその反転信号とを切り替えて入力する複数のエクスクルーシブオアゲート(11)と
を具備し、
前記第１の制御信号（Ｓ１）が前記第２の論理レベル（“０”）の場合に、前記第２の制御信号（Ｓ２）が第１の論理レベル（“１”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の上位ワード（ＹＨ）を反転し、前記オアゲート(6)は、１を出力し、前記複数のブースデコーダ(1A,1B)は、前記オアゲートから出力される１と前記被乗数の上位ワード（ＹＨ）の反転信号とをデコードすることにより２つの単精度乗算の差（ＸＨ×ＹＬ−ＸＬ×ＹＨ）が実行され、前記第２の制御信号（Ｓ２）が第２の論理レベル（“０”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の上位ワード（ＹＨ）を反転せずに出力し、前記オアゲート(6)は、０を出力し、前記複数のブースデコーダ(1A,1B)は、前記オアゲートから出力される０と前記被乗数の上位ワード（ＹＨ）とをデコードすることにより２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行されることを特徴とする乗算器。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、乗算器に関するもので、特に並列型乗算器に使用されるものである。
【０００２】
【従来の技術】
図５は、ブース（Ｂｏｏｔｈ）のアルゴリズムを利用した従来の並列型乗算器を示している。図５において、１は、ブースのデコーダ、２は、ブースのセレクタ、３は、部分積を加算するための並列加算回路である。
【０００３】
図６は、図５のブースのデコーダ１を構成する回路の一例を示している。図６において、４は、ナンド・ゲート、５は、ノア・ゲート、６は、オア・ゲート、７は、アンド・ゲート、８は、インバータである。
【０００４】
図７は、図５のブースのセレクタ２を構成する回路の一例を示している。図７において、９は、エクスクルーシブ・ノア・ゲートである。ｕ、ｖ、ｗは、制御入力、Ｌ、Ｒは、乗数入力である。
なお、並列加算回路３については、例えば、特開昭６３−５５２６７号公報に開示されるものを使用することができる。
【０００５】
ブースのアルゴリズムは、第１式及び第２式のように、２の補数表現された乗数Ｘと被乗数Ｙを高速に乗算するためのアルゴリズムである。このアルゴリズムでは、第３式のように、被乗数Ｙの値を３ビット毎にデコーダ１でデコードし、そのデコード結果に応じて乗数Ｘの各ビットをセレクタ２で選択すると、部分積ｐm が生成される。
【０００６】
積Ｚは、第４式のように、部分積ｐm をｍ＝０からｍ＝ｎ／２−１まで足し合わせることによって得られる。このアルゴリズムによれば、部分積の数は、部分積の生成にアンドゲートを用いるアレイ型乗算器の半分にできるため、演算速度を高速にできる。通常、ｍ＝０のときのｙ2m-1の値は０とおく。
（乗数）  Ｘ＝−２n-1 ｘn-1 ＋２n-2 ｘn-2 ＋…＋２ｘ1 ＋ｘ0     ［１］
（被乗数）Ｙ＝−２n-1 ｙn-1 ＋２n-2 ｙn-2 ＋…＋２ｙ1 ＋ｙ0     ［２］
（部分積）ｐm ＝Ｘ（−２ｙ2m+1＋ｙ2m＋ｙ2m-1）２2m              ［３］
ここで、    ｙ-1＝０である。
0003637073.tif 000002
となる。
【０００７】
近年、携帯用情報通信機器の普及により、これらの機器に搭載されるＬＳＩには、電池寿命の長期化を図るため、消費電力が少ないものが要求されている。さらに、雑音や回線容量の不足に対処するため処理のディジタル化が必須となり、当該機器には、ディジタル信号処理用のＬＳＩ、即ちディジタル・シグナル・プロセッサ（ＤＳＰ）が搭載されるようになった。
【０００８】
また、近年の携帯用情報通信機器は、ディジタル・シグナル・プロセッサの搭載により、複雑かつ高度な処理が実現できるようになったが、処理が高度化するにつれて、次のような問題も発生している。
【０００９】
即ち、ディジタル・シグナル・プロセッサの動作原理は、一般のマイクロプロセッサと変わらないため、処理が複雑になればなるほど処理時間が長くなる。実時間動作が必要な携帯用情報通信機器においては、処理時間に上限があるので、動作クロックの周波数を上げざるを得ない。ところが、クロック周波数を上げると、単位時間内にＬＳＩ内部で充放電される電流が増え、消費電力が増大する。このような事態は、携帯用情報通信機器に搭載されるＬＳＩに対する要求と相反するものである。
【００１０】
こうした問題を回避する手段として、処理の並列化がある。処理の並列化は、複数の処理を並列に実行するもので、クロック周波数を上げずに、単位時間内の処理量を増やすことが可能である。
【００１１】
しかし、ディジタル信号処理の基本演算は、積和演算、即ち乗算した結果を累積加算する操作である。従って、ディジタル・シグナル・プロセッサには、乗算器と加算器の両方が内蔵されている。
【００１２】
このため、上述のような従来の乗算器では、一度に１対のデータ（Ｘ，Ｙ）しか乗算できないため、積和演算を並列化により、２倍の速度で実行しようとすると、２つの同じ乗算器をディジタル・シグナル・プロセッサに内蔵しなければならなくなる。
【００１３】
また、乗算結果を累積加算するためには、少なくとも２つの加算器を内蔵する必要がある。さらに、最終的な累積加算結果を得ようとすると、別々に加算された結果を足し合わせなければならないため、もう１つ加算器を内蔵するか、別々に加算された結果を保存するためのレジスタ（アキュムレータ）を２組用意しなければならない。
【００１４】
こうした並列化されたアーキテクチャを使いこなすには、最適化機能付きのコンパイラが不可欠である。しかし、コンパイラのオブジェクト変換効率が十分でないため、ディジタル・シグナル・プロセッサのプログラミングは、普通アセンブラを用いて行われている。このことから、並列化されたアーキテクチャは、プログラムに最適化の負担をかけ、ソフトウエアの開発効率を落としてしまう。
【００１５】
さらに、ディジタル信号処理には、演算精度の問題が常につきまとう。これは、固定小数点ＤＳＰを採用したときに特に問題となる。累積加算により、乗算結果に含まれる誤差も累積され、システム全体の動作が不安定になってしまうのである。
【００１６】
なお、倍精度演算を取り入れると、精度の問題は改善されるが、倍精度乗算器は単精度乗算器の４倍の回路規模があり、ＬＳＩ上の面積占有率が大きくなる。これに従来の乗算器を用いると、上で述べた理由から、処理の並列化に際して乗算器が複数必要になるため、実用には、はなはだ不向きである。
【００１７】
【発明が解決しようとする課題】
このように、従来は、処理が複雑になるにつれてクロック周波数を上げなければならず、消費電力が増大する欠点がある。また、処理の並列化は、ディジタル・シグナル・プロセッサの回路規模を大きくする欠点がある。また、並列化されたア−キテクチャはプログラマに最適化の負担をかけるなどの欠点がある。
【００１８】
本発明は、上記欠点を解決すべくなされたもので、その目的は、消費電力の増大や回路規模の増大なく、一度に複数のデータ対の乗算が可能な乗算器を提供することである。
【００１９】
【課題を解決するための手段】
上記目的を達成するため、本発明の乗算器は、乗数と被乗数のそれぞれが単精度データ２ワード（ＸＨ、ＸＬとＹＨ、ＹＬ）によって構成されるブースのアルゴリズムを利用した倍精度乗算器であり、第１の入力に前記倍精度乗算器の外部から入力される第１の制御信号（Ｓ１）が入力され、第２の入力に前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）が入力され、出力が、前記倍精度乗算器に含まれる同一構成の複数のブースデコーダ（１A,1B,1C,1D）のうち、前記被乗数の上位ワード（ＹＨ）の最下位ビット（Ｙ４）とその上位に隣接するビット（Ｙ５）とが入力される１つのブースデコーダ(1B)のもう１つ別の入力に入力され、前記第１の制御信号（Ｓ１）に応じて、前記１つのブースデコーダに前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）と０とを切り替えて入力するアンドゲート(7A)と、第１の入力に前記第１の制御信号（Ｓ１）が入力され、第２の入力に前記乗数の下位ワード（ＸＬ）の各ビット（Ｘ３〜Ｘ０）がそれぞれ入力される複数のアンドゲート(7B)と、制御入力に前記被乗数の下位ワード（ＹＬ）をデコードする複数のブースデコーダ(1C,1D)の出力が入力され、乗数入力に前記複数のアンドゲート(7B)の出力が入力される複数の第１のブースセレクタ(2)と乗数入力に前記乗数の上位ワード（ＸＨ）が入力される複数の第２のブースセレクタ(2)とから成る第１のブースセレクタ群と、第１の入力に前記乗数の下位ワード（ＸＬ）の最上位ビット（Ｘ３）が入力され、第２の入力に前記乗数の上位ワード（ＸＨ）の各ビット（Ｘ７〜Ｘ４）がそれぞれ入力され、前記第１の制御信号（Ｓ１）に応じてそれら２つの入力信号のうちどちらか一方を選択して出力する複数のセレクタ (10)と、制御入力に前記被乗数の上位ワード（ＹＨ）をデコードする複数のブースデコーダ(1A,1B)の出力が入力され、乗数入力に前記乗数の下位ワード（ＸＬ）が入力される複数の第３のブースセレクタ(2)と乗数入力に前記複数のセレクタ(10)の出力が入力される複数の第４のブースセレクタ(2)とから成る第２のブースセレクタ群と、前記第１及び第２のブースセレクタ群の出力が入力される並列加算回路(3)とを備え、前記第１の制御信号（Ｓ１）が第１の論理レベル（“１”）のときには、前記１つのブースデコーダ(
1B)に接続された前記アンドゲート(7A)は、前記被乗数の下位ワード（ＹＬ）の最上位ビット（Ｙ３）を出力し、前記乗数の上下のワード（ＸＨ、ＸＬ）がそれぞれ入力される前記複数のセレクタ(10)と前記複数のアンドゲート(7B)とは、前記乗数の上下のワードの各ビットをそれぞれ出力し、前記第１及び第２のブースセレクタ群がそれぞれの入力によって定まる部分積を生成することにより倍精度乗算が実行され、さらに、前記乗数と前記被乗数の上位ワード（ＸＨ、ＹＨ）のそれぞれに単精度データを入力すると共にそれらの下位ワード（ＸＬ、ＹＬ）の全ビットに０を入力することによって単精度乗算が実行され、前記第１の制御信号（Ｓ１）が第２の論理レベル（“０”）のときには、前記１つのブースデコーダ(1B)に接続された前記アンドゲート(7A)と前記乗数の下位ワード（ＸＬ）が入力される前記複数のアンドゲート(7B)とは、０をそれぞれ出力し、前記乗数の上位ワード（ＸＨ）が入力される前記複数のセレクタ(10)は、前記乗数の下位ワード（ＸＬ）の最上位ビット（Ｘ３）をそれぞれ出力し、前記第１及び第２のブースセレクタ群は、それぞれの入力によって定まる論理レベルの信号を倍精度乗算における部分積と同様に生成することにより、前記第１及び第２のブースセレクタ群が前記倍精度乗算において生成する部分積のうち、前記複数の第１のブースセレクタ(2)と前記複数の第４のブースセレクタ(2)とによって生成される部分積を等価的に零にして２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行される。
【００２０】
本発明の乗算器は、さらに、前記倍精度乗算器に含まれる複数のブースデコーダのうち、前記被乗数の下位ワード（ＹＬ）の最下位ビット（Ｙ０）とその上位に隣接するビット（Ｙ１）とが入力される１つのブースデコーダのもう１つ別の入力に前記倍精度乗算器の外部から入力される第２の制御信号（Ｓ２）を入力すると共に、前記第２の制御信号（Ｓ２）に応じて、前記被乗数の下位ワード（ＹＬ）をデコードする複数のブースデコーダに被乗数の下位ワード（ＹＬ）とその反転信号とを切り替えて入力する複数のエクスクルーシブオアゲート(11)を備え、前記第１の制御信号（Ｓ１）が前記第２の論理レベル（“０”）の場合に、前記第２の制御信号（Ｓ２）が第１の論理レベル（“１”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の下位ワード（ＹＬ）を反転し、前記複数のブースデコーダ(1C,1D)は、前記第２の制御信号（Ｓ２）によって与えられる前記第１の論理レベル（“１”）と前記被乗数の下位ワード（ＹＬ）の反転信号とをデコードすることにより２つの単精度乗算の差（ＸＬ×ＹＨ−ＸＨ×ＹＬ）が実行され、前記第２の制御信号（Ｓ２）が第２の論理レベル（“０”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の下位ワード（ＹＬ）を反転せずに出力し、前記複数のブースデコーダ(1C,1D)は、前記第２の制御信号（Ｓ２）によって与えられる前記第２の論理レベル（“０”）と前記被乗数の下位ワード（ＹＬ）とをデコードすることにより２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行される。
【００２１】
本発明の乗算器は、さらに、第１の入力に前記第２の制御信号（Ｓ２）が入力され、第２の入力に前記アンドゲート(7A)の出力が入力され、出力が、前記倍精度乗算器に含まれる複数のブースデコーダのうち、前記被乗数の上位ワード（ＹＨ）の最下位ビット（Ｙ４）とその上位に隣接するビット（Ｙ５）とが入力される１つのブースデコーダのもう１つ別の入力に入力されるオアゲート(6)と、前記第２の制御信号（Ｓ２）に応じて、前記被乗数の上位ワード（ＹＨ）をデコードする複数のブースデコーダに被乗数の上位ワード（ＹＨ）とその反転信号とを切り替えて入力する複数のエクスクルーシブオアゲート(11)とを備え、前記第１の制御信号（Ｓ１）が前記第２の論理レベル（“０”）の場合に、前記第２の制御信号（Ｓ２）が第１の論理レベル（“１”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の上位ワード（ＹＨ）を反転し、前記オアゲート(6)は、１を出力し、前記複数のブースデコーダ(1A,1B)は、前記オアゲートから出力される１と前記被乗数の上位ワード（ＹＨ）の反転信号とをデコードすることにより２つの単精度乗算の差（ＸＨ×ＹＬ−ＸＬ×ＹＨ）が実行され、前記第２の制御信号（Ｓ２）が第２の論理レベル（“０”）のときには、前記複数のエクスクルーシブオアゲート(11)は、前記被乗数の上位ワード（ＹＨ）を反転せずに出力し、前記オアゲート(6)は、０を出力し、前記複数のブースデコーダ(1A,1B)は、前記オアゲートから出力される０と前記被乗数の上位ワード（ＹＨ）とをデコードすることにより２つの単精度乗算の和（ＸＨ×ＹＬ＋ＸＬ×ＹＨ）が実行される。
【００２２】
【作用】
上記構成によれば、２つの単精度のデータ対、例えば２次元ベクトルなどに対し、それぞれの対を構成する単精度データを上下のワードに配して、倍精度乗算と同じ演算を施したときに乗算器内部で生成される部分積の不要な部分を等価的に０にすることによって、１つの乗算器の中で、２つのデータ対の乗算が可能になる。等価的に０にするというのは、言いかえれば、部分積（Ｐ００〜Ｐ３８）とその符号反転のための内部制御信号（Ｗ０〜Ｗ３）とをすべて足し合わせた結果において、実効的に０にすることである。この操作は、部分積に対して直接実行する場合、乗数の下位ワード（ＸＬ）と被乗数の上下のワード（ＹＨ、ＹＬ）との乗算結果に対応する部分積（Ｐ０３〜Ｐ００、Ｐ１３〜Ｐ１０、Ｐ２３〜Ｐ２０、Ｐ３３〜Ｐ３０）に対しては、ブースデコーダから出力される上記内部制御信号（Ｗ０〜Ｗ３）のそれぞれが対応する部分積の全ビットをその制御信号で置き換える操作に相当する。また、乗数の上位ワード（ＸＨ）と被乗数の上下のワード（ＹＨ、ＹＬ）との乗算結果に対応する部分積（Ｐ０８〜Ｐ０４、Ｐ１８〜Ｐ１４、Ｐ２８〜Ｐ２４、Ｐ３８〜Ｐ３４）に対しては、それらの下位に意味のある部分積が存在するので、下位の部分積によって表現される重みの異なる２進数の符号を生成し、その符号で、上記の重みの異なる２進数の上位にある部分積全部を置き換える操作に相当する。これらの操作は、任意の数と０との積が０になること及びブースセレクタの左右の乗数入力Ｌ，Ｒに乗数の符号ビットを入力すると部分積の符号ビットが生成されることを利用すると、ブースセレクタに入力される信号の操作に置き換えられる。
【００２３】
また、一度に複数のデータ対の乗算が可能なため、１つの乗算器でありながら、通常の乗算はもちろんのこと、倍精度乗算、ベクトルの内積、複素乗算の実部若しくは虚部の演算が可能である。
【００２４】
本乗算器をプロセッサに応用すると、上記すべての演算が単一マシンサイクルで実行できるため、プログラムのステップ数が削減され、特に積和演算が主体の信号処理プログラムにおいて、従来の約１／２にまでステップ数を短縮できる。
【００２５】
また、演算スループットを同一とすると、マシンサイクルは従来よりも長くとれるため、プロセッサ全体の消費電力が削減される。特に、信号処理を専門に行うディジタル・シグナル・プロセッサにおいては、従来の約１／２にまで消費電力を削減できる。
【００２６】
【実施例】
以下、図面を参照しながら、本発明の乗算器について詳細に説明する。
まず、第１の実施例について説明する。
図１は、本発明の第１の実施例に係わる乗算器を示している。図１において、１Ａ，１Ｂ，１Ｃ，１Ｄは、ブースのデコーダ、２は、ブースのセレクタ、３は、部分積加算のための並列加算回路、７Ａ，７Ｂは、アンドゲート、１０は、セレクタである。
【００２７】
図２は、本発明の乗算器に使用するセレクタ１０の一例を示す回路図である。図２において、５は、ノア・ゲート、７は、アンド・ゲート、８は、インバータである。
【００２８】
図１の乗算器の動作を説明する。
まず、乗数Ｘと被乗数Ｙとを上位ワードと下位ワードとに分割し、
（乗数）  Ｘ＝ＸH ＋ＸL                                       ［５］
（被乗数）Ｙ＝ＹH ＋ＹL                                       ［６］
とする。
【００２９】
このとき、積Ｚは次式で表される。
0003637073.tif 000003
なお、図１のＸ7-4 、Ｘ3-0 がそれぞれＸH 、ＸL の入力端子であり、図１のＹ7-4 、Ｘ3-0 がそれぞれＹH 、ＹL の入力端子である。また、Ｓ1 は、制御信号である。
【００３０】
この実施例では、入力信号をワードごとに加工し、制御信号Ｓ1 を切り換えることにより、単精度、倍精度、それに内積の３種類の乗算が可能である。以下、単精度、倍精度及び内積の乗算について順次説明する。
【００３１】
［単精度］
第７式において、乗数、被乗数の下位ワードＸL 、ＹL をＸL ＝０、ＹL ＝０とおくと、第７式の第２〜４項はすべて０になるので、積Ｚは、
（単精度）      Ｚ＝ＸH ＹH                                   ［８］
になる。
【００３２】
ＸＬ＝０、ＹＬ＝０にするには、図１で制御信号Ｓ１＝１とし、入力端子Ｘ３−０、Ｙ３−０に０を入力する。
制御信号Ｓ１＝１のときには、この実施例の乗算器は、図５の従来例と同じ動作を行う。セレクタ１０は、右側の入力Ｘ７，Ｘ６，Ｘ５，Ｘ４を選択し、アンド・ゲート７Ｂは、一方の入力端子に入力されている制御信号Ｓ１が１になるので、他方の入力をそのまま出力する。
【００３３】
この状態で、ＸH 、ＹH 、即ちＸ7-4 、Ｙ7-4 に４ビットの単精度データを入力すれば、単精度乗算の結果が得られる。入力データが固定小数点データのときは、出力の小数点位置は、Ｚ14とＺ13の間になり、入力データが整数データのときは、出力の小数点位置は、Ｚ8 とＺ7 の間になる。
【００３４】
［倍精度］
第７式をそのまま計算する。
図１で制御信号Ｓ1 ＝１とすれば、本実施例の乗算器は、図５の従来の乗算器と同じ動作をするので、Ｘ，Ｙに８ビットの倍精度データを入力すれば、出力に倍精度乗算の結果が得られる。
【００３５】
入力データが固定小数点データのときは、出力の小数点位置は、Ｚ14とＺ13の間になり、入力データが整数データのときは、出力の小数点位置は、Ｚ0 のすぐ下になる。
【００３６】
［内積］
２つのベクトル
→
Ａ＝（ａ0 ，ａ1 ）
→
Ｂ＝（ｂ0 ，ｂ1 ）
の内積は次のようにして計算できる。
【００３７】
まず、第７式において、
ＸH ＝ａ1 ，
ＸL ＝ａ0 ，
ＹH ＝ｂ0 ，
ＹL ＝ｂ1 ．                                        ［９］
とおいて乗算を実行する。
【００３８】
その結果、次式が得られる。
Ｚ＝ａ1 ｂ0 ＋ａ1 ｂ1 ＋ａ0 ｂ0 ＋ａ0 ｂ1                 ［１０］
第１０式において、第１項と第４項とを乗算器内部で０にすると、第１１式が
→  →
得られ、ベクトル  Ａ、Ｂ  の内積が計算される。
（内積）  Ｚ＝ａ1 ｂ1 ＋ａ0 ｂ0                             ［１１］
第９式を実行するには、乗数の上位ワードＸ7-4 にａ1 を、下位ワードＸ3-0 にａ0 をそれぞれ４ビット・データとして入力し、被乗数の上位ワードＹ7-4 にｂ0 を、下位ワードＹ3-0 にｂ1 をそれぞれ４ビット・データとして入力する。
【００３９】
第１０式で、第１項と第４項とを乗算器内部で０にする操作は、制御信号Ｓ１＝０にすることに対応する。このとき、アンド・ゲート７Ｂは０を出力し、セレクタ１０は乗数の下位ワードＸＬの符号ビットＸ３を出力するので、ＸＬＹＬ＝ａ０ｂ１に対応する部分積Ｐ０３〜Ｐ００、Ｐ１３〜Ｐ１０を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも０が入力され、ＸＨＹＨ＝ａ１ｂ０に対応する部分積Ｐ２８〜Ｐ２４、Ｐ３８〜Ｐ３４を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも符号ビットＸ３が入力される。
【００４０】
また、被乗数Ｙの上位ワードＹＨ＝ｂ０が入力されるブースのデコーダ１Ａ，１Ｂの最下位ビット入力Ｙｍ−１には、Ｙ３の代わりに０が入力されるので、被乗数Ｙの上位ワードＹＨ＝ｂ０と下位ワードＹＬ＝ｂ１とは独立した４ビットの数値としてデコードされる。その結果、第７式の第１項と第４項、即ち、第１０式の第１項と第４項が０となって、第１１式の値が出力される。
【００４１】
入力データが固定小数点データのときは、出力の小数点位置は、Ｚ10とＺ9 の間になり、入力データが整数データのときは、出力の小数点位置は、Ｚ4 とＺ3 の間になる。このことは、内積演算では、オーバーフロー（桁溢れ）が生じないことを意味する。オーバーフローは、乗算で１ビット、加算で１ビット発生する可能性がある。内積演算では２組の乗算が行われるから、オーバーフローの桁数は、合計３ビットである。符号ビットの上には上下各ワードのビット数分符号拡張がされているので、各ワードのビット数が２ビットよりも大きければオーバーフローは生じない。
次に、第２の実施例について説明する。
図３は、本発明の第２の実施例に係わる乗算器を示している。図３において、１１は、エクスクルーシブ・オア・ゲート、Ｓ2 は、制御信号である。なお、図１と同じ構成要素には同じ番号を付して、その説明を省略する。
【００４２】
本実施例の乗算器は、制御信号Ｓ2 が０のときには、図１の乗算器とまったく同じ動作をするが、制御信号Ｓ2 が１になると、被乗数Ｙの下位ワードＹL の符号が反転する。このことを利用して、複素乗算が実行できる。
【００４３】
いま、２つの複素数
Ｆ＝ａ＋ｊｂ
Ｇ＝ｃ＋ｊｄ
の積を計算することを考える。
【００４４】
［実数部］
積の実数部は、次のようにして計算できる。まず、第７式において、
ＸH ＝ｂ，
ＸL ＝ａ，
ＹH ＝ｃ，
ＹL ＝−ｄ．                                      ［１２］
とおいて乗算を実行する。
【００４５】
その結果、次式が得られる。
Ｚ＝ｂｃ＋ｂ（−ｄ）＋ａｃ＋ａ（−ｄ）                    ［１３］
第１３式で、第１項と第４項とを乗算器内部で０にすると次式が得られ、複素数Ｆ、Ｇの積の実数部が計算される。
（実数部）Ｚ＝ａｃ−ｂｄ                                    ［１４］
第１２式を実行するには、乗数の上位ワードＸ7-4 にｂを、下位ワードＸ3-0 にａをそれぞれ４ビット・データとして入力し、被乗数の上位ワード入力Ｙ7-4 にｃを、下位ワードＹ3-0 にｄをそれぞれ４ビット・データとして入力し、Ｓ2 ＝１にする。
【００４６】
Ｓ２＝１にすると、エクスクルーシブ・オア・ゲート１１により下位ワードＹ３−０の各ビットは反転され、被乗数Ｙの下位ワードＹＬ＝ｄが入力されるブースのデコーダ１Ｃ，１Ｄの最下位ビット入力Ｙｍ−１にはＳ２＝１が入力されるので、下位ワードＹＬ＝ｄの符号は反転される。この被乗数符号反転方法は、例えば、特開昭６２−２２９４３９号公報に開示されている。
【００４７】
第１３式で、第１項と第４項とを乗算器内部で０にする操作は、制御信号Ｓ１＝０にすることに対応する。このとき、アンド・ゲート７Ｂは０を出力し、セレクタ１０は乗数の下位ワードＸＬの符号ビットＸ３を出力するので、ＸＬＹＬ＝ａ（−ｄ）に対応する部分積Ｐ０３〜Ｐ００、Ｐ１３〜Ｐ１０を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも０が入力され、ＸＨＹＨ＝ｂｃに対応する部分積Ｐ２８〜Ｐ２４、Ｐ３８〜Ｐ３４を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも符号ビットＸ３が入力される。
【００４８】
また、被乗数Ｙの上位ワードＹＨ＝ｃが入力されるブースのデコーダ１Ａ，１Ｂの最下位ビット入力Ｙｍ−１には、Ｙ３の代わりに０が入力されるので、被乗数Ｙの上位ワードＹＨ＝ｃと下位ワードＹＬ＝ｄとは独立した４ビットの数値としてデコードされる。
【００４９】
その結果、第７式の第１項と第４項、すなわち第１３式の第１項と第４項が０になって、第１４式の値が出力される。入力データが固定小数点データのときは、出力の小数点位置は、Ｚ10とＺ9 の間になり、入力データが整数データのときは、出力の小数点位置は、Ｚ4 とＺ3 の間になる。この場合も、符号ビットの上には上下各ワードのビット数分符号拡張がされているので、各ワードのビット数が２ビットよりも大きければオーバーフローは生じない。
【００５０】
［虚数部］
積の虚数部は、次のようにして計算できる。
まず、第７式において、
ＸH ＝ａ，
ＸL ＝ｂ，
ＹH ＝ｃ，
ＹL ＝ｄ．                                        ［１５］
とおいて乗算を実行する。
【００５１】
その結果、次式が得られる。
Ｚ＝ａｃ＋ａｄ＋ｂｃ＋ｂｄ                        ［１６］
第１６式で、第１項と第４項とを乗算器内部で０にすると第１７式が得られ、複素数Ｆ、Ｇの積の虚数部が計算される。
（虚数部）Ｚ＝ａｄ＋ｂｃ                                    ［１７］
第１５式を実行するには、乗数の上位ワードＸ7-4 にａを、下位ワードＸ3-0 にｂをそれぞれ４ビット・データとして入力し、被乗数の上位ワードＹ7-4 にｃを、下位ワードＹ3-0 にｄをそれぞれ４ビット・データとして入力し、Ｓ2 ＝０にする。
【００５２】
Ｓ２＝０にすると、エクスクルーシブ・オア・ゲート１１は下位ワードＹ３−０の各ビットをそのまま出力し、被乗数Ｙの下位ワードＹＬ＝ｄが入力されるブースのデコーダ１Ｃ，１Ｄの最下位ビット入力Ｙｍ−１にはＳ２＝０が入力されるので、下位ワードＹＬ＝ｄの符号は反転されない。
【００５３】
第１６式で、第１項と第４項とを乗算器内部で０にする操作は、制御信号Ｓ１＝０にすることに対応する。このとき、アンド・ゲート７Ｂは０を出力し、セレクタ１０は乗数の下位ワードＸＬの符号ビットＸ３を出力するので、ＸＬＹＬ＝ｂｄに対応する部分積Ｐ０３〜Ｐ００、Ｐ１３〜Ｐ１０を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも０が入力され、ＸＨＹＨ＝ａｃに対応する部分積Ｐ２８〜Ｐ２４、Ｐ３８〜Ｐ３４を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも符号ビットＸ３が入力される。
【００５４】
また、被乗数Ｙの上位ワードＹＨ＝ｃが入力されるブースのデコーダ１Ａ，１Ｂの最下位ビット入力Ｙｍ−１には、Ｙ３の代わりに０が入力されるので、被乗数Ｙの上位ワードＹＨ＝ｃと下位ワードＹＬ＝ｄとは独立した４ビットの数値としてデコードされる。
【００５５】
その結果、第７式の第１項と第４項、即ち第１６式の第１項と第４項が０になって、第１７式の値が出力される。入力データが固定小数点データのときは、出力の小数点位置はＺ10とＺ9 の間になり、入力データが整数データのときは、出力の小数点位置はＺ4 とＺ3 の間になる。この場合も、各ワードのビット数が２ビットよりも大きければオーバーフローは生じない。
次に、第３の実施例について説明する。
図４は、本発明の第３の実施例に係わる乗算器を示している。図４において、６は、オア・ゲート、Ｓ2 は、制御信号である。なお、図１及び図３の乗算器と同じ構成要素には同じ番号を付して、その説明を省略する。
【００５６】
本実施例の乗算器は、制御信号Ｓ2 が０のときには、図１の乗算器とまったく同じ動作をするが、制御信号Ｓ2 が１になると、被乗数Ｙの上位ワードＹH の符号が反転する。このことを利用して、複素乗算が実行できる。
【００５７】
再び、２つの複素数
Ｆ＝ａ＋ｊｂ
Ｇ＝ｃ＋ｊｄ
の積を計算することを考える。
【００５８】
［実数部］
積の実数部は、次のようにして計算できる。
まず、第７式において、
ＸH ＝ａ，
ＸL ＝ｂ，
ＹH ＝−ｄ，
ＹL ＝ｃ．                                        ［１８］
とおいて乗算を実行する。
【００５９】
その結果、次式が得られる。
Ｚ＝ａ（−ｄ）＋ａｃ＋ｂ（−ｄ）＋ｂｃ            ［１９］
第１９式で、第１項と第４項とを乗算器内部で０にすると第２０式が得られ、複素数Ｆ、Ｇの積の実数部が計算される。
（実数部）Ｚ＝ａｃ−ｂｄ                                    ［２０］
第１８式を実行するには、乗数の上位ワードＸ7-4 にａを、下位ワードＸ3-0 にｂをそれぞれ４ビット・データとして入力し、被乗数の上位ワードＹ7-4 にｄを、下位ワードＹ3-0 にｃをそれぞれ４ビット・データとして入力し、Ｓ2 ＝１にする。
【００６０】
Ｓ２＝１にすると、エクスクルーシブ・オア・ゲート１１により上位ワードＹ７−４の各ビットは反転され、被乗数Ｙの上位ワードＹＨ＝ｄが入力されるブースのデコーダ１Ａ，１Ｂの最下位ビット入力Ｙｍ−１にはオア・ゲート６の出力（＝１）が入力されるので、上位ワードＹＨ＝ｄの符号は反転される。
【００６１】
第１９式で、第１項と第４項とを乗算器内部で０にする操作は、制御信号Ｓ１＝０にすることに対応する。このとき、アンド・ゲート７Ｂは０を出力し、セレクタ１０は乗数の下位ワードＸＬの符号ビットＸ３を出力するので、ＸＬＹＬ＝ｂｃに対応する部分積Ｐ０３〜Ｐ００、Ｐ１３〜Ｐ１０を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも０が入力され、ＸＨＹＨ＝ａ（−ｄ）に対応する部分積Ｐ２８〜Ｐ２４、Ｐ３８〜Ｐ３４を生成するブースのセレクタ２の左右の乗数入力Ｌ、Ｒにはどちらにも符号ビットＸ３が入力される。
【００６２】
また、被乗数Ｙの上位ワードＹＨ＝ｄが入力されるブースのデコーダ１Ａ，１Ｂの最下位ビット入力Ｙｍ−１には、Ｙ３の代わりに１が入力されるので、被乗数Ｙの上位ワードＹＨ＝ｄと下位ワードＹＬ＝ｃとは独立した４ビットの数値としてデコードされる。
【００６３】
その結果、第７式の第１項と第４項、即ち第１９式の第１項と第４項が０になって、第２０式の値が出力される。入力データが固定小数点データのときは、出力の小数点位置は、Ｚ10とＺ9 の間になり、入力データが整数データのときは、出力の小数点位置は、Ｚ4 とＺ3 の間になる。各ワードのビット数が２ビットよりも大きければオーバーフローは生じない。
【００６４】
［虚数部］
積の虚数部は、図３の実施例と同じ様にして計算することができる。
なお、本発明において、乗算されるデータ対の数は、２対に限定されるものではなく、３対以上であっても良い。
【００６５】
【発明の効果】
以上、説明したように、本発明の乗算器によれば、次のような効果を奏する。一度に複数のデータ対の乗算が可能なため、１つの乗算器でありながら、通常の乗算はもちろんのこと、倍精度乗算、ベクトルの内積、複素乗算の実部若しくは虚部の演算が可能である。本乗算器をプロセッサに組み込んだ場合、上記すべての演算が単一マシンサイクルで実行可能なため、プログラムのステップ数削減に効果があり、特に積和演算が主体の信号処理プログラムにおいては、場合により従来の約１／２にまでステップ数を短縮できる。逆に、演算スループットを同一とした場合、マシンサイクルは従来よりも長くとれ、プロセッサ全体の消費電力削減に効果がある。特に、信号処理を専門に行うディジタル・シグナル・プロセッサにおいては、場合により従来の約１／２まで消費電力を削減できる。
【図面の簡単な説明】
【図１】本発明の第１の実施例に係わる乗算器を示すブロック図。
【図２】本発明の乗算器に使用するセレクタ１０の一例を示す回路図。
【図３】本発明の第２の実施例に係わる乗算器を示すブロック図。
【図４】本発明の第３の実施例に係わる乗算器を示すブロック図。
【図５】従来の乗算器を示すブロック図。
【図６】従来の乗算器に使用するブースのデコーダ１の一例を示す回路図。
【図７】従来の乗算器に使用するブースのセレクタ２の一例を示す回路図。
【符号の説明】
１，１Ａ，１Ｂ，１Ｃ，１Ｄ：  ブースのデコーダ、  ２：  ブースのセレクタ、  ３：  並列加算回路、  ４：  ナンド・ゲート、  ５：  ノア・ゲート、  ６：  オア・ゲート、  ７，７Ａ，７Ｂ：  アンド・ゲート、  ８：  インバータ、  ９：  エクスクルーシブ・ノア・ゲート、  １０：  セレクタ、  １１：  エクスクルーシブ・オア・ゲート、  ｕ，ｖ，ｗ：  制御入力、  Ｌ：  左側乗数入力、  Ｒ：  右側乗数入力。
【図１】
0003637073.tif 000004
【図２】
0003637073.tif 000005
【図３】
0003637073.tif 000006
【図４】
0003637073.tif 000007
【図５】
0003637073.tif 000008
【図６】
0003637073.tif 000009
【図７】
0003637073.tif 000010