(57)【特許請求の範囲】
【請求項１】
整数同士の乗算を行う整数乗算時には被乗数となる２ｎ（ｎは正の整数）ビットの整数を格納し、複素数同士の乗算を行う複素数乗算時には被乗数となる複素数のｎビットの実数部を上位側に格納すると共にｎビットの虚数部を下位側に格納する被乗数レジスタと、
前記整数乗算時には乗数の２ｎビットの整数を格納し、前記複素数乗算時には乗数となる複素数のｎビットの実数部を上位側に格納すると共にｎビットの虚数部を下位側に格納する乗数レジスタと、
前記乗数レジスタに格納された乗数を乗算サイクルごとに複数ビットずつデコードするデコーダと、
前記整数乗算時には前記被乗数レジスタに格納された前記被乗数の上位側と下位側とをパラレルに出力し、前記複素数乗算時において前記被乗数に前記乗数の実数部を乗算する乗算サイクルには前記被乗数の上位側と下位側とをパラレルに出力し、該複素数乗算時において該被乗数に前記乗数の虚数部を乗算する乗算サイクルには該被乗数の上位側と下位側とを入れ替えてパラレルに出力する入れ替え手段と、
前記入れ替え手段が下位側及び上位側に出力した各データを前記デコード結果に基づきそれぞれ変換する下位側変換手段及び上位側変換手段と、
前記乗算サイクルごとに与えられる下位側被加算データ及び上位側被加算データと前記下位側変換手段及び上位側変換手段によって変換された各データとを加算し、下位側部分加算データ及び上位側部分加算データをそれぞれ求める下位側部分加算器及び上位側部分加算器と、
前記整数乗算時には前記下位側部分加算器の加算結果の桁上がりを前記上位側部分加算器の加算に反映させ、前記複素数乗算時には該桁上がりをマスクするマスク手段と、
前記下位側部分加算器及び上位側部分加算器がそれぞれ出力する前記下位側部分加算データ及び上位側部分加算データを前記乗算サイクルごとにそれぞれ桁移動させる下位側桁移動手段及び上位側桁移動手段と、
前記下位側桁移動手段を介した前記下位側部分加算データ及び前記上位側桁移動手段を介した前記上位側部分加算データを前記乗算サイクルごとにそれぞれ取り込み格納内容を更新しつつ格納する下位側部分積レジスタ部及び上位側部分積レジスタ部と、
前記下位側部分積レジスタ部に格納された前記下位側部分加算データの一部及び前記上位側部分積レジスタ部に格納された前記上位部分加算データの一部を前記乗算サイクルごとに桁をずらして読出し、前記下位側被加算データ及び上位側被加算データをそれぞれ生成する下位側シフタ及び上位側シフタと、
前記複素数乗算時の前記被乗数に前記乗数の実数部を乗算する乗算サイクルが終了した段階で、該乗算の結果における虚数部のデータの一部を格納する下位側補助レジスタと、
前記複素数乗算時の前記被乗数に前記乗数の実数部を乗算する乗算サイクルが終了した段階で、該乗算の結果における実数部のデータの一部を格納する上位側補助レジスタと、
前記複素数乗算時の前記被乗数に前記乗数の虚数部を乗算する乗算サイクルが終了した段階で、前記下位側シフタで生成した前記下位側被加算データと前記下位側補助レジスタが格納したデータとを前記下位側部分加算器に加算させる下位側加算補助手段と、
前記複素数乗算時の前記被乗数に前記乗数の虚数部を乗算する乗算サイクルが終了した段階で、前記上位側シフタで生成した前記上位側被加算データと前記上位側補助レジスタが格納したデータとを前記上位側部分加算器に加算させる上位側加算補助手段とを、備えたことを特徴する繰り返し型乗算器。
【請求項２】
請求項１記載の被乗数レジスタ、乗数レジスタ及び入れ替え手段と、
最初の乗算サイクルでは前記乗数レジスタに格納された乗数の下位側をデコードし、次の乗算サイクルでは該乗数の上位側をデコードするデコーダと、
前記入れ替え手段が下位側に出力したデータを入力すると共に下位側被加算データを入力し、前記デコード結果に基づき該入れ替え手段から入力したデータを変換して該下位側被加算データと加算する下位側初段部分加算器、該下位側初段部分加算器の出力側に複数段縦続接続され、該入れ替え手段が下位側に出力したデータを桁移動した上で該デコード結果に基づき変換し、前段から与えられたデータとそれぞれ加算する下位側縦続部分加算器、該入れ替え手段が上位側に出力したデータを入力すると共に上位側被加算データを入力し、該デコード結果に基づき該入れ替え手段から入力したデータを変換して該上位側被加算データと加算する上位側初段部分加算器、該上位側初段部分加算器の出力側に複数段縦続接続され、該入れ替え手段が上位側に出力したデータを桁移動した上で該デコード結果に基づき変換し、前段から与えられたデータとそれぞれ加算する上位側縦続部分加算器、及び前記整数乗算時には該下位側初段部分加算器及び下位側縦続部分加算器の加算結果の桁上がりを該上位側初段部分加算器及び上位側縦続部分加算器の加算に反映させ、前記複数乗算時には該桁上がりをマスクするマスク手段を有するアレイ乗算部と、
２ｎビット幅以上の格納領域を持つレジスタと、
前記整数乗算時及び前記複素数乗算時に、前記レジスタの格納領域のうちの前記各乗算サイクルごと設定された領域からデータをそれぞれ読出し前記下位側被加算データ及び上位側被加算データとして前記アレイ乗算部に入力する入力マルチプレクサと、
前記整数乗算時及び前記複素数乗算時の前記各乗算サイクルの終了時に、前記レジスタの格納領域のうちの該各乗算サイクルごと設定された領域に前記アレイ乗算部が出力するデータを格納する出力マルチプレクサとを、備えたことを特徴とするアレイ型乗算器。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、汎用プロセッサ等に設けられ、整数同士の乗算と複素数同士の乗算の両方の乗算を行う繰り返し型乗算器及びアレイ型乗算器に関するものである。
【０００２】
【従来の技術】
ＲＩＳＣ（Reduced Instruction Set Computer）プロセッサには、ディジタル信号処理用に積和演算機能の付いた乗算器が組み込まれている。一般に広く使用されているＲＩＳＣプロセッサには、例えば３２ビット×８の積和演算機能を有する乗算器が組み込まれている。これらの乗算器においては、１６ビットのハーフワード同士を乗算するのに２サイクルかかる。
ところで、通信用の信号処理を行う等化器等では、複素数表現した数値に対して積和演算することが多い。２つの複素数Ａ，Ｂの乗算は、各複素数Ａ，Ｂの実数部をＡr ，Ｂr とすると共に虚数部をＡi 、Ｂi とすると、次の（１）式になる。
0003982965.tif 000002
これをそのまま演算すると、実数部及び虚数部共に乗算が２回、加算が１回それぞれ必要である。この演算をＲＩＳＣプロセッサの乗算器で行うと、実数部、虚数部共、２サイクル×２回の乗算と１回の加算が必要になる。よって、最低１０サイクルが必要になる。
【０００３】
従来の複素数の乗算が可能な乗算器は、例えば次の文献１，２に記載されたものがあった。
文献１：CAVANAGH著“Digital Computer Arithmetic Design and Implementa-tion  ”（１９８４）McGraw-Hill 発行、P.171,181
文献２；IEEE 1996 Custum Integrated Circuits Conference 、ＩＥＥＥ、         Shousheng He and Mats Torkelson著“A Complex Array Multiplier  Using Distributed Araithmetic ”P.71-74
【０００４】
図２は、従来の乗算器の積和演算サイクル数を示す図である。
前記文献１には、後述するブースのアルゴリズムを用いた繰り返し型乗算器とアレイ型乗算器が示されている。繰り返し型乗算器は、部分積を繰り返して求めるものであり、１６ビット×１６ビットの乗算器で１サイクルで２ビット分の処理を行うと、図２のように、整数１６ビットの乗算には８サイクルかかり、実数部が８ビットで虚数部が８ビットの複素数の乗算には、乗算の１６サイクルと加算の２サイクルとが必要になる。アレイ型乗算器は、複数の部分積を同時に求める構成になっており、同様の整数の乗算には２サイクルかかり、複素数の乗算には乗算が４サイクルと加算が２サイクルかかる。一方、前記文献２の乗算器は、複素数専用のものである。
【０００５】
【発明が解決しようとする課題】
しかしながら、前記従来の乗算器では、次のような課題があった。
従来のＲＩＳＣプロセッサに組み込まれた乗算器では、複素数同士の乗算を行うときには、乗算回数が整数の場合の４倍になり、文献１の乗算器でも、２倍以上のサイクルが必要となり、いずれも、パフォーマンスが悪くなる。一方、文献２に示された乗算器は整数同士の乗算を行うことができないので、汎用的でないばかりでなく、ハード量が大きくなり、ディジタル信号処理用プロセッサのＣＰＵに搭載される乗算器には適していない。
また、複素数に対して実数部及び虚数部を個別に計算することは、ソフトウエアとして極めて繁雑になる。
図３（ａ），（ｂ）は、複素数データと複素数表現を示す図である。
例えば実数部が１６ビット及び虚数部が１６ビットの複素数を、図３（ａ）のように連続した１つのワードで処理できるようにすると、ソフトウエアの特にＣ言語では、図３（ｂ）の構造体で複素数表現が可能になる。これにより、繁雑さが緩和できることになる。つまり、１つの複素数を図３（ａ）のように連続したワードで処理できる乗算器が望まれている。
【０００６】
【課題を解決するための手段】
前記課題を解決するために、本発明のうちの第１の発明は、繰り返し型乗算器において、次のような構成にしている。
即ち、整数同士の乗算を行う整数乗算時には被乗数となる２ｎ（ｎは正の整数）ビットの整数を格納し、複素数同士の乗算を行う複素数乗算時には被乗数となる複素数のｎビットの実数部を上位側に格納すると共にｎビットの虚数部を下位側に格納する被乗数レジスタと、前記整数乗算時には乗数の２ｎビットの整数を格納し、前記複素数乗算時には乗数となる複素数のｎビットの実数部を上位側に格納すると共にｎビットの虚数部を下位側に格納する乗数レジスタと、前記乗数レジスタに格納された乗数を乗算サイクルごとに複数ビットずつデコードするデコーダと、前記整数乗算時には前記被乗数レジスタに格納された前記被乗数の上位側と下位側とをパラレルに出力し、前記複素数乗算時において前記被乗数に前記乗数の実数部を乗算する乗算サイクルには前記被乗数の上位側と下位側とをパラレルに出力し、該複素数乗算時において該被乗数に前記乗数の虚数部を乗算する乗算サイクルには該被乗数の上位側と下位側とを入れ替えてパラレルに出力する入れ替え手段と、前記入れ替え手段が下位側及び上位側に出力した各データを前記デコード結果に基づきそれぞれ変換する下位側変換手段及び上位側変換手段と、前記乗算サイクルごとに与えられる下位側被加算データ及び上位側被加算データと前記下位側変換手段及び上位側変換手段によって変換された各データとを加算し、下位側部分加算データ及び上位側部分加算データをそれぞれ求める下位側部分加算器及び上位側部分加算器とを備えている。
【０００７】
さらに、この繰り返し型乗算器には、前記整数乗算時には前記下位側部分加算器の加算結果の桁上がりを前記上位側部分加算器の加算に反映させ、前記複素数乗算時には該桁上がりをマスクするマスク手段と、前記下位側部分加算器及び上位側部分加算器がそれぞれ出力する前記下位側部分加算データ及び上位側部分加算データを前記乗算サイクルごとにそれぞれ桁移動させる下位側桁移動手段及び上位側桁移動手段と、前記下位側桁移動手段を介した前記下位側部分加算データ及び前記上位側桁移動手段を介した前記上位側部分加算データを前記乗算サイクルごとにそれぞれ取り込み格納内容を更新しつつ格納する下位側部分積レジスタ部及び上位側部分積レジスタ部と、前記下位側部分積レジスタ部に格納された前記下位側部分加算データの一部及び前記上位側部分積レジスタ部に格納された前記上位部分加算データの一部を前記乗算サイクルごとに桁をずらして読出し、前記下位側被加算データ及び上位側被加算データをそれぞれ生成する下位側シフタ及び上位側シフタと、前記複素数乗算時の前記被乗数に前記乗数の実数部を乗算する乗算サイクルが終了した段階で、該乗算の結果における虚数部のデータの一部を格納する下位側補助レジスタと、前記複素数乗算時の前記被乗数に前記乗数の実数部を乗算する乗算サイクルが終了した段階で、該乗算の結果における実数部のデータの一部を格納する上位側補助レジスタと、前記複素数乗算時の前記被乗数に前記乗数の虚数部を乗算する乗算サイクルが終了した段階で、前記下位側シフタで生成した前記下位側被加算データと前記下位側補助レジスタが格納したデータとを前記下位側部分加算器に加算させる下位側加算補助手段と、前記複素数乗算時の前記被乗数に前記乗数の虚数部を乗算する乗算サイクルが終了した段階で、前記上位側シフタで生成した前記上位側被加算データと前記上位側補助レジスタが格納したデータとを前記上位側部分加算器に加算させる上位側加算補助手段とが、設けられている。
【０００８】
このような構成を採用したことにより、例えばブースのアルゴリズムを用いれば、デコーダによるデコードと下位側変換手段及び上位側変換手段による変換とで、被乗数に乗数の一部を乗じたデータが得られる。下位側部分加算器及び上位側部分加算器により、前の乗算サイクルで得られた下位側部分加算データ及び上位側部分加算データと下位側変換手段及び上位側変換手段で変換されたデータとがそれぞれ加算され、新たな下位側部分加算データ及び上位側部分加算データが得られる。整数乗算時には、下位側部分加算器の加算の桁上がりが上位側部分加算器の加算に反映される。新たな下位側部分加算データ及び上位側部分加算データが下位側レジスタ部と上位側レジスタ部とに更新されつつ、格納される。よって、乗算サイクルを繰り返すことにより、整数同士の乗算が可能になっている。一方、複素数乗算時には、マスク手段により、下位側部分加算器の加算の桁上がりが上位側部分加算器に対してマスクされる。これにより、虚数部同士の加算が下位側部分加算器で行われ、実数部同士の加算が上位側部分加算器で行われるようになる。被乗数の実数部と虚数部の入れ替えは、入れ替え手段で行われる。また、被乗数に乗数の実数部の乗算を行う乗算サイクルが終了した段階で得られた下位側部分加算データ及び上位側部分加算データは、下位側補助レジスタ及び上位側補助レジスタに格納され、被乗数に乗数の虚数部の乗算を行う乗算サイクルが終了した段階で、下位側部分加算器及び上位側部分加算器によって加算される。よって、乗算サイクルを繰り返すことにより、複素数同士の乗算が可能になっている。
【０００９】
第２の発明では、アレイ型乗算器において、次のような被乗数レジスタ、乗数レジスタ、入れ替え手段、デコーダ、アレイ乗算部。レジスタ、入力マルチプレクサ及び出力マルチプレクサにより、構成している。
前記被乗数レジスタ、乗数レジスタ及び入れ替え手段は、第１の発明の被乗数レジスタ、乗数レジスタ及び入れ替え手段と同様のものである。デコーダは、最初の乗算サイクルでは前記乗数レジスタに格納された乗数の下位側をデコードし、次の乗算サイクルでは該乗数の上位側をデコードするものである。
アレイ乗算部は、前記入れ替え手段が下位側に出力したデータを入力すると共に下位側被加算データを入力し、前記デコード結果に基づき該入れ替え手段から入力したデータを変換して該下位側被加算データと加算する下位側初段部分加算器、該下位側初段部分加算器の出力側に複数段縦続接続され、該入れ替え手段が下位側に出力したデータを桁移動した上で該デコード結果に基づき変換し、前段から与えられたデータとそれぞれ加算する下位側縦続部分加算器、該入れ替え手段が上位側に出力したデータを入力すると共に上位側被加算データを入力し、該デコード結果に基づき該入れ替え手段から入力したデータを変換して該上位側被加算データと加算する上位側初段部分加算器、該上位側初段部分加算器の出力側に複数段縦続接続され、該入れ替え手段が上位側に出力したデータを桁移動した上で該デコード結果に基づき変換し、前段から与えられたデータとそれぞれ加算する上位側縦続部分加算器、及び前記整数乗算時には該下位側初段部分加算器及び下位側縦続部分加算器の加算結果の桁上がりを該上位側初段部分加算器及び上位側縦続部分加算器の加算に反映させ、前記複数乗算時には該桁上がりをマスクするマスク手段を有している。
【００１０】
レジスタは、２ｎビット幅以上の格納領域を持っている。入力マルチプレクサは、前記整数乗算時及び前記複素数乗算時に、前記レジスタの格納領域のうちの前記各乗算サイクルごと設定された領域からデータをそれぞれ読出し前記下位側被加算データ及び上位側被加算データとして前記アレイ乗算部に入力するものである。出力マルチプレクサは、前記整数乗算時及び前記複素数乗算時の前記各乗算サイクルの終了時に、前記レジスタの格納領域のうちの該各乗算サイクルごと設定された領域に前記アレイ乗算部が出力するデータを格納するものである。
【００１１】
このような構成を採用したことにより、下位側初段部分加算器及び下位側縦続部分加算器と上位側初段部分加算器及び上位側縦続部分加算器との加算により、下位側部分加算データ及び上位側部分加算データが累算される。整数乗算時には、下位側初段部分加算器及び下位側縦続部分加算器の加算の桁上がりが上位側初段部分加算器及び上位側縦続部分加算器の加算に反映され、累算結果が出力マルチプレクサを介してレジスタに格納される。よって、整数同士の乗算が可能になっている。複素数乗算時には、マスク手段により、下位側初段部分加算器及び下位側縦続部分加算器の加算の桁上がりが上位側初段部分加算器及び上位側縦続部分加算器の加算に反映されなず、下位側初段部分加算器及び下位側縦続部分加算器により、虚数部の加算が行われ、上位側初段部分加算器及び上位側縦続部分加算器により、実数部の加算が行われる。被乗数の実数部と虚数部の入れ替えは、入れ替え手段で行われる。また、乗算サイクルが終了した段階で得られた累算結果から被加算データを乗算サイクルに応じて読出すのは、入力マルチプレクサが行う。よって、複素数同士の乗算も可能になっている。
【００１２】
【発明の実施の形態】
第１の実施形態
図１は、本発明の第１の実施形態を示す繰り返し型乗算器の概略の構成図であり、制御信号の転送ルートは省略している。
この乗算器は、乗数及び被乗数が共に１６ビットで積が３２ビットになる整数同士の乗算を行う機能と、実数部及び虚数部が共に８ビットで積の実数部が１６ビットで虚数部が１６ビットとなる複素数同士の乗算を行う機能を有する乗算器であり、被乗数を格納する１６ビットの被乗数レジスタ１と、乗数を格納する乗数レジスタ２とを備えている。被乗数レジスタ１には、入れ替え手段であるスワッパ３が接続され、乗数レジスタ２には、デコーダ４が接続されている。
スワッパ３の出力データにおける上位８ビットは、上位側加算補助手段である２入力マルチプレクサ５の一方の入力ポートに入力され、下位８はかい側加算補助手段である２入力マルチプレクサ６の一方の入力ポートに入力される接続になっている。マルチプレクサ５の出力側に部分加算器１０が接続され、マルチプレクサ６の出力側に部分加算器２０が接続されている。部分加算器１０は、２つの入力ポート１０ａ，１０ｂを持ち、該入力ポート１０ｂにマルチプレクサ５が８ビット幅で出力するデータが入力される接続になっている。部分加算器２０は、２つの入力ポート２０ａ，２０ｂを持ち、該入力ポート２０ｂにマルチプレクサ６が８ビット幅で出力するデータが入力される接続になっている。
【００１３】
部分加算器１０の出力ポート１０ｓは、３つの入力ポート３１ａ，３１ｂ，３１ｃを持つ上位側桁移動手段であるマルチプレクサ３１の入力ポート３１ａに接続され、該マルチプレクサ３１の出力ポート３１ｏが上位側部分積レジスタ３２と上位側部分積補助レジスタ３３とに接続されている。部分積レジスタ３２の出力側がマルチプレクサ３１の入力ポート３１ｃとシフタ３４の入力ポート３４ａとに接続されている。部分積補助レジスタ３３の出力側が、マルチプレクサ５の他方の入力ポートに接続されている。
部分加算器２０の出力ポート２０ｓは、３つの入力ポート３６ａ，３６ｂ，３６ｃを持つ下位側桁移動手段であるマルチプレクサ３６の入力ポート３６ｂに接続され、該マルチプレクサ３６の出力ポート３６ｏが下位側部分積レジスタ３７と下位側部分積補助レジスタ３８とに接続されている。部分積レジスタ３７の出力側がマルチプレクサ３６の入力ポート３６ｃとシフタ３４の入力ポート３４ｂと下位側シフタ３５の入力ポート３５ｂに接続されている。部分積補助レジスタ３８の出力側が、マルチプレクサ６の他方の入力ポートに接続されている。
部分加算器１０の出力ポート１０ｓは、マルチプレクサ３６の入力ポート３６ｂにも接続され、部分加算器２０の出力ポート２０ｓは、マルチプレクサ３１の入力ポート３１ｂにも接続されている。
【００１４】
以下に各部の機能を説明する。
スワッパ３は、複素数乗算時に被乗数レジスタ１の上位８ビットと下位８ビットを入れ替えて出力するものである。
図４は、図１中のデコーダ４が使用するブースのアルゴリズムを示す図である。図５（ａ），（ｂ）は、図１中のデコーダ４が行う乗数のデコード順序を示す図であり、同図（ａ）は整数乗算時を示す、同図（ｂ）は複素数乗算時を示している。
デコーダ４は、乗数をデコードし制御信号Ｓｃを出力するものであり、乗数が整数の場合には、該乗数の１６ビットに対して図５（ａ）のようにサイクルＣｙ１からＣｙ８の８回にわけ、下位側から２ビットずらせて３ビット単位で順にデコードする。但し、最初のサイクルＣｙ１のデコードでは、０ビットを最下位に付加している。複素数の場合には、乗数の１６ビットに対して、図５（ｂ）のように、実数部用にｒ１からｒ４の４回にわけ、虚数部用に、ｊ１からｊ４の４回にわけ、それぞれの下位側から２ビットずらせて３ビット単位で順にデコードする。但し、最初ｒ１回目のデコードとｊ１回目のデコードでは、０ビットを最下位に付加している。
各デコードで用いる３ビットのうちの上位２ビットで構成される乗数ビットペアと下位１ビット（右ビット）との組み合わせにより、デコード結果が異なり、対応する制御信号Ｓｃを出力する。これらの制御信号Ｓｃは、図４のように、加算器１０，２０における被乗数の加算を制御する信号である。ここで、図４中のａは、前演算処理結果を示し、ｂは被乗数を示している。また、図４中の減算は、（１）式における「−Ａｉ・Ｂｉ」の処理の場合を示している。
【００１５】
図６は、図１中の部分加算器１０，２０を示す構成図である。
部分加算器１０には、上位側変換手段である９個のマルチプレクサ（ＭＵＸ）１１0 〜１１8 と、上位側部分加算器である９個のフルアダー回路（ＦＵＬＬ  ＡＤＤＥＲ）１２0 〜１２8 と、マスク回路（ＭＳＫ）１３とを備えている。部分加算器２０は、下位側変換手段である９個のマルチプレクサ（ＭＵＸ）２１0 〜２１8 と、下位側部分加算器である９個のフルアダー回路（ＦＵＬＬ  ＡＤＤＥＲ）２２0 〜２２8 とを備えている。
部分加算器２０中の最下位ビットを担当するマルチプレクサ２１0 には、“０”の固定データが３本入力されると共に、シフタ３５から与えられる８ビットのデータａ３５7 〜ａ３５0 のうちの最下位のデータａ３５0 とその補数−ａ３５0 とが入力されている。部分加算器２０中のマルチプレクサ２１1 には、“０”の固定データが１本入力されると共に、ブースのアルゴリズムの２倍を実現するために下位のマルチプレクサ２１0 から与えられたデータａ３５0 及びその補数−ａ３５0 と、シフタ３５から与えられるデータａ３５1 とが入力されている。以下、マルチプレクサ２１7 までは、マルチプレクサ２１1 と同様の入力データが与えられるようになっている。最上位のマルチプレクサ２１8 は、符号ビットの拡張用に設けられたものであり、該マルチプレクサ２１8 には、“０”の固定データが１本入力されると共に、下位のマルチプレクサ２１7 からデータａ３５7 及びその補数−ａ３５7 が２本ずつ入力されるようになっている。
【００１６】
部分加算器２０中の最下位ビットを担当するフルアダー回路２２0 には、“０”の固定データがキャリーとして入力されると共に、マルチプレクサ６を介した８ビットのデータｂ６7 〜ｂ６0 のうちの最下位のデータｂ６0 と、マルチプレクサ２１0 の出力データとが与えられている。部分加算器２０中のフルアダー回路２２1 には、下位のフルアダー回路２２0 からキャリーデータｃ２２0 が入力されると共に、データｂ６1 と、マルチプレクサ２１1 の出力データとが与えられている。以下、フルアダー回路２２7 までは、フルアダー回路２２1 と同様に入力データが与えられるようになっている。最上位のフルアダー回路２２8 は、符号ビットの拡張用に設けられたものであり、該フルアダー回路２２8 には、下位のフルアダー回路２２7 からキャリーｃ２２7 が入力されると共に、マルチプレクサ６から与えられるデータｂ６7 と、マルチプレクサ２１7 の出力データとが与えられる構成になっている。
部分加算器１０は、整数の乗算を行うときには、部分加算器２０と連結して動作し、複素数の乗算を行うときには乗算器２０とは切り離されて動作する。この連結と切り離しを行うのが、マスク回路１３である。マスク回路１３は、複素数乗算時に、部分加算器２０側のデータａ３５7 とその補数データ−ａ３５7 とフルアダー回路２２7 で発生するキャリーｃ２２7 とを、部分加算器１０に対してマスクして“０”に固定する機能を有している。
【００１７】
部分加算器１０中の最下位ビットを担当するマルチプレクサ１１0 には、“０”の固定データが１本と、マスク回路１３でマスクされるかまたはそのまま通過するデータａ３５7 とその補数データ−ａ３５7 とが入力されると共に、シフタ３４から与えられる８ビットのデータａ３４7 〜ａ３４0 のうちの最下位のデータａ３４0 とその補数−ａ３４0 とが入力されている。部分加算器１０中のマルチプレクサ１１1 には、“０”の固定データが１本入力されると共に、ブースのアルゴリズムの２倍を実現するために下位のマルチプレクサ１１0 から与えられたデータａ３４0 及びその補数−ａ３４0 と、シフタ３４から与えられるデータａ３４1 とが入力されている。以下、マルチプレクサ１１7 までは、マルチプレクサ１１1 と同様に入力データが与えられるようになっている。最上位のマルチプレクサ１１8 は、符号ビットの拡張用に設けられたものであり、該マルチプレクサ１１8 には、“０”の固定データが１本入力されると共に、下位のマルチプレクサ１１7 からデータａ３４7 及びその補数−ａ３４7 が２本ずつ入力されるようになっている。各フルアダー回路２２0 〜２２8 がそれぞれ出力するビットデータｓ２２0 〜ｓ２２8 が、部分加算器２０の出力ポート２０ｓから出力する９ビット幅のデータになる。
【００１８】
部分加算器１０中の最下位ビットを担当するフルアダー回路１２0 には、マスク回路１３でマスクされるかまたはそのまま通過するキャリーｃ２２7 が入力されると共に、マルチプレクサ５が出力する８ビットのデータｂ５7 〜ｂ５0 のうちの最下位のデータｂ５0 と、マルチプレクサ１１0 の出力データとが与えられている。部分加算器１０中の図示しないフルアダー回路１２1 には、下位のフルアダー回路１２0 からキャリーｃ１２0 が入力されると共に、マルチプレクサ５から与えられるデータｂ５1 と、マルチプレクサ１１1 の出力データとが与えられている。以下、フルアダー回路１２7 までは、フルアダー回路１２1 と同様に入力データが与えられるようになっている。最上位のフルアダー回路１２8 は、符号ビットの拡張用に設けられたものであり、該フルアダー回路１２8 には、下位のフルアダー回路１２7 からキャリーｃ１２7 が入力されると共に、マルチプレクサ５から与えられるデータｂ５7 〜ｂ５0 のうちの対応するデータｂ５7 と、マルチプレクサ１１7 の出力データとが与えられる構成になっている。各フルアダー回路１２0 〜１２8 がそれぞれ出力するビットデータｓ１２0 〜ｓ１２8 が、部分加算器１０の出力ポート１０ｓから出力する９ビット幅のデータになる。
【００１９】
図７（ａ），（ｂ）は、マルチプレクサ３１，３６の選択を示す図であり、同図（ａ）は整数乗算時、及び同図（ｂ）は複素数乗算時をそれぞれ示している。
マルチプレクサ３１，３６は、部分加算器１０，２０及び各部分積補助レジスタ３３，３８の出力データから選択したデータを１６ビット幅で出力するものであり、その選択範囲と選択順序は、図７（ａ），（ｂ）のようになる。なお、図７（ａ），（ｂ）において、ａ［］，ｂ［］，ｃ［］は、入力ポート３１ａ，３１ｂ，３１ｃ及び３６ａ，３６ｂ，３６ｃから入力されたデータのビットデータをそれぞれ示すものであり、各ａ［８］ａｌｌ及びｂ［８］ａｌｌは、ａ［８］，ｂ［８］のデータを連続的に配列したデータを示している。
部分積レジスタ３２，３７は、部分積を格納するものであり、整数の乗算では部分積レジスタ３２に積の上位側が格納され、部分積レジスタ３７に積の下位がが格納される。複素数の乗算では、部分積レジスタ３２に実数部が格納され、部分積レジスタ３７には虚数部が格納されるようになっている。
部分積補助レジスタ３３，３８は、複素数乗算時に、部分積の上位８ヒットを４回目の繰り返し完了時に取り込んで格納するものである。
【００２０】
図８（ａ），（ｂ）は、シフタ３４，３５が選択するフィールドを示す図であり、同図（ａ）は整数乗算時、及び同図（ｂ）は複素数乗算時をそれぞれ示している。
シフタ３４，３５は、部分積の値をシフトして加算器１０，２０にそれぞれ加算するものであり、各部分積レジスタ３２，３７が出力する部分積から８ビットのフィールドを図８のように選択し、２ビットシフトして加算器１０，２０へ与えるようになっている。図８中のａ［］，ｂ［］は、部分積レジスタ３２，３７の出力データにおけるビットをそれぞれ示している。また、“０００００００”は、すべて“０”が出力されることを示し、ａ［］ａｌｌ、すべてａ［］のデータが出力されることを示している。
【００２１】
次に、図１の繰り返し型乗算器の動作を説明する。
前記（１）式の複素数は、次の（２）式に書換えられる。
0003982965.tif 000003
この（２）式は、複素数の乗算を次の（ｉ）〜（iii)に別けて計算することが可能であることを示している。
（ｉ）被乗数（Ａr ＋ｊＡi ）の実数部Ａr 、虚数部Ａi に乗数Ｂr を掛ける。
（ii) 被乗数の実数部Ａr 、虚数部Ａi とを入替え、実数部の符号を反転させる。
（iii)（ii）の処理で得られた被乗数部に乗数の虚数部Ｂi を掛ける。
【００２２】
図１の複素数乗算器は、（ｉ）〜（iii)に沿って複素数の乗算を行うと共に、整数の乗算も可能になっている。実数部が８ビットで虚数部が８ビットの複素数同士の乗算は、次のサイクルＣｙ１〜Ｃｙ９の９サイクルで演算する。１６ビットの整数同士の乗算は、後述するＣｙ１〜Ｃｙ８の８サイクルで演算する。
複素数乗算時、最初のサイクルＣｙ１において、乗数レジスタ２に格納された１６ビットデータのうちのビット［９：８］の部分が、図５（ｂ）の順序に従ってデコーダ５でデコードされる。マルチプレクサ５及び６は、被乗数レジスタ１からスワッパ３を介して与えられたデータを選択し、部分加算器１０及び２０に与える。このとき各シフタ３４，３５は、“０”を出力している。部分加算器１０，２０では、デコーダ５のデコード結果に基づく制御信号Ｓｃにより、図４のブースのアルゴリズムに従った加算を行う。加算結果は、図７（ｂ）のようにマルチプレクサ３１，３６に選択されて部分積として部分積レジスタ３２，３７にそれぞれ格納される。
サイクルＣｙ２において、乗数レジスタ２に格納された１６ビットのデータのうちのビット［１１：９］の部分が、図５（ｂ）の順序に従ってデコーダ４でデコードされる。また、このときには、部分積レジスタ３２，３７及びシフタ３４，３５によって、上位側被加算データ及び下位側被加算データが生成されて部分加算器１０，２０に与えられている。この被加算データは、図８（ｂ）のようにシフトされたデータであり、ブースのアルゴリズムで選択したデータと部分加算器１０，２０によって加算される。加算結果は、図７（ｂ）のようにマルチプレクサ３１，３６に選択されて部分積として部分積レジスタ３２，３７にそれぞれ格納される。
【００２３】
サイクルＣｙ３において、乗数レジスタ２に格納された１６ビットデータのうちのビット［１３：１１］の部分が図５（ｂ）の順序に従ってデコーダ４でデコードされる。以下、サイクルＣｙ２と同様に動作する。
サイクルＣｙ４において、乗数レジスタ２に格納された１６ビットデータのうちのビット［１５：１３］の部分が、図５（ｂ）の順序に従ってデコーダ４でデコードされる。以下、マルチプレクサ３１，３６まではサイクルＣｙ２と同様に動作する。各マルチプレクサ３１，３６の出力データのうち、下位８ビットが部分積レジスタ３２，３７にそれぞれ格納され、上位８ビットが部分積レジスタ３３，３８にそれぞれ格納される。よって、このサイクルＣｙ４が終了した段階で、（２）式の第１項の乗算結果が、部分積レジスタ３２，３７と部分積レジスタ３３，３８とにそれぞれ実数部及び虚数部に分けて格納されたことになる。
サイクルＣｙ５において、乗数レジスタ２に格納された１６ビットデータのうちのビット［１：０］の部分が、図５（ｂ）の順序に従ってデコーダ４でデコードされる。スワッパ２は、被乗数レジスタ１に格納された複素数の実数部と虚数部を入替え、マルチプレクサ５，６を介して部分加算器１０，２０に与える。シフタ３４，３５は、部分積レジスタ３２，３７の出力データの下位８ビットを、図８（ｂ）に従って選択して部分加算器１０，２０に与える。これにより、（２）式の第１項の（Ａr ＋ｊＡi ）Ｂr の実数部及び虚数部の下位８ビットが第２項の（−Ａi ＋ｊＡr ）Ｂi の実数部及び虚数部の各部分積に加算されることになる。なお、（２）式の第１項の（Ａr ＋ｊＡi ）Ｂr の上位８ビットは、第２項の（−Ａi ＋ｊＡr ）Ｂi の実数部及び虚数部の部分積が求まった後のサイクルＣｙ９で、（−Ａi ＋ｊＡr ）Ｂi の上位８ビットと加算される。
【００２４】
部分加算器１０，２０は、デコーダ４のデコード結果に基づき加算を行う。ここで、部分加算部１０では、（２）式の第１項の実数部が負になるので、図４の減算処置が採用する。つまり、補数のデータを選択して加算を行う。部分加算器１０，２０の出力データは、マルチプレクサ３１，３６に図７に基いて選択され、部分積として部分積レジスタ３２，３７にそれぞれ格納される。
サイクルＣｙ６〜Ｃｙ８は、乗数レジスタ２に格納された１６ビットデータのうちの図５（ｂ）の順序に従った部分が、デコーダ４でデコードされ、該各デコード結果に基づき、以下サイクルＣｙ５と同様に動作する。
サイクルＣｙ９において、シフタ３４，３５が、図８（ｂ）に示すように、部分積レジスタ３２，３７の出力データの上位８ビットを選択し、部分加算器１０，２０に与える。また、マルチプレクサ５，６は、部分積補助レジスタ３３，３８に格納されたデータを選択して部分加算器１０，２０に与える。デコーダ４ではデコードを行わず、部分加算器１０，２０が、部分積補助レジスタ３３，３８から与えられたデータとシフタ３４，３５から与えられたデータを加算する。部分加算器１０，２０の出力データは、マルチプレクサ３１，３６に図７（ｂ）に基いて選択され、部分積として部分積レジスタ３２，３７にそれぞれ格納される。
以上の一連のサイクルＣｙ１〜Ｃｙ９の動作により、実数部が８ビットで虚数部が８ビットの複素数同士の乗算が行われ、結果が部分積レジスタ３２，３７にそれぞれ格納されたことになる。
【００２５】
次に、整数同士の乗算を行う場合の動作を説明する。
被乗算レジスタ１には１６ビットの被乗数が格納され、乗数レジスタ２には１６ビットの乗算が格納されている。サイクルＣｙ１において、デコーダ４が、図５（ａ）のデコード順序に従い、乗算レジスタ２の［１：０］のビットに０を付加した値をデコードする。スワッパ３は、被乗数の入れ替えは行わない。マルチプレクサ５，６は、被乗数レジスタ１からスワッパ３を介して与えられた非乗数データを選択して部分加算器１０，２０に与える。このとき、シフタ３４，３５からは図８（ａ）のように“０００００００”を部分加算器１０，２０に出力している。各部分加算器１０，２０は、デコード結果に対応する乗算結果を“０００００００”に加算し、加算結果を部分積としてそれぞれ出力する。マルチプレクサ３１，３６は、図７（ａ）の順序に従った選択を行い、部分積レジスタ３２，３７にそれぞれ与える。
【００２６】
サイクルＣｙ２において、デコーダ４が、図５（ａ）のデコード順序に従い、乗算レジスタ２の［３：１］のビットの値をデコードする。マルチプレクサ５，６は、被乗数レジスタ１からスワッパ３を介して与えられたデータを選択して部分加算器１０，２０に与える。このとき、シフタ３４，３５は、図８（ａ）のように、部分積レジスタ３２，３７から取得した部分積を２ビットシフトし、部分加算器１０，２０に与えている。各部分加算器１０，２０は、デコード結果に対応して被乗数と乗数の部分積を求め、シフタ３４，３５から与えられた部分積に加算する。マルチプレクサ３１，３６は、図７（ａ）の順序に従った選択を行い、部分積レジスタ３２，３７にそれぞれ与える。この結果、部分積レジスタ３２，３７には、前のサイクルで得られた部分積の上位２ビットが今回得られた部分積の積和演算結果の下位側に付加された状態で格納される。
サイクルＣｙ３〜Ｃｙ８において、サイクルＣｙ２と同様に、乗数レジスタ２のデコードするビットをずらしながら、積和演算結果を部分積レジスタ３２，３７に格納して行く。サイクルＣｙ８が終了すると、被乗数と乗数の積が部分積レジスタ３２，３７に格納される。
以上のように、この第１の実施形態では、１６ビットの整数の乗算が８サイクル、複素数の乗算が９サイクルで可能になる。しかも、整数の乗算のみが可能な乗算器に対してマルチプレクサ５，６や部分積補助レジスタ３３，３８を付加するだけで、極端なハード量の増加はない。
【００２７】
第２の実施形態
図９は、本発明の第２の実施形態を示すアレイ型乗算器の構成図である。
前述の第１の実施形態では積和演算を繰り返す繰り返し型乗算器を示したが、この第２の実施形態の乗算器は、１６ビットの整数同士の乗算をサイクルＣｙ１，Ｃｙ２の２サイクルで行うと共に、実数部が８ビットで虚数部が８ビットの複素数同士の乗算をサイクルＣｙ１，Ｃｙ２の２サイクルで行うでアレイ型であり、被乗数を入れる１６ビットの被乗数レジスタ４１と、乗数を入れる乗数レジスタ４２と、アレイ乗算部である１６ビット×８アレー乗算器５０と、３２ビット出力マルチプレクサ７０と、３２ビットレジスタ７１と、３２ビット入力マルチプレクサ７２とを備えている。被乗数レジスタ４１には、スワッパ４３が接続され、乗数レジスタ４２には、デコーダ４４が接続されている。スワッパ４３は、第１の実施形態と同様に機能するものである。
【００２８】
図１０（ａ），（ｂ）は、図１中のデコーダ４４による乗数のデコード順序を示す図であり、同図（ａ）は整数乗算時、及び同図（ｂ）は複素数乗算時をそれぞれ示している。
デコーダ４４は、第１の実施形態とは異なり、１サイクルで８ビット或いは９ビットをデコードする機能を有している。つまり、整数の乗算を行うときには、図１０（ａ）のように、最初のサイクルＣｙ１では最下位に“０”を付加した乗数の８ビット［７：０］をデコードし、次のサイクルＣｙ２では、上位側の９ビット［１５：７］をデコードする機能を持ち、複素数の乗算を行うときには、図１０（ｂ）のように、サイクルＣｙ１で最下位を“０”として虚数部の８ビット［７：０］をデコードし、サイクルＣｙ２では、実数部のビット［１５：７］をデコードする機能を有している。
【００２９】
図１１は、図９中の１６ビット×８アレー乗算器５０を示す構成図である。
１６ビット×８アレー乗算器５０は、上位側初段部分加算器及び下位側初段部分加算器である２個の９ビット部分加算器５１，５２と、２個の１０ビット部分加算器５３，５４と、２個の１１ビット部分加算器５５，５６と、２個の１２ビット部分加算器５７，５８と、２個の１１ビット部分加算器５５，５６と、２個の１２ビット部分加算器５７，５８と、２個の１１ビット加算器５９，６０とを有している。１０ビット部分加算器５３、１１ビット部分加算器５５及び１２ビット部分加算器５７は、複数段の上位側縦続部分加算器を構成するものであり、９ビット部分加算器５１の出力側に縦続接続されている。１０ビット部分加算器５４、１１ビット部分加算器５６及び１２ビット部分加算器５８は、複数段の下位側縦続部分加算器を構成するものであり、９ビット部分加算器５２の出力側にマルチプレクサ６１、マルチプレクサ６２及びマルチプレクサ６３を介して縦続接続されている。１２ビット部分加算器５７，５８の出力側に、１１ビット加算器５９，６０が接続されると共に、該１１ビット加算器５９，６０の出力側に８ビット加算器６４，６５がそれぞれ接続され、合計６段の積和演算回路が上位側及び下位側に構成されている。
【００３０】
４段目までの９ビット部分加算器５１，５２、１０ビット部分加算器５３，５４、１１ビット部分加算器５５，５６及び１２ビット部分加算器５７，５８は、部分和をビット単位で示すビット加算データＤをそれぞれ出力するばかりでなく、ビットごとのキャリーＣも出力するキャリーセーブアダーをそれぞれ有している。図１１の各部分加算器５１〜５８の出力側の信号線には、ビットごとの加算データを示すＤとキャリーを示すＣとがそのビット数と共に示されている。
９ビット部分加算器５１には、被乗数レジスタ４１からスワッパ４３を介して被乗数の一部の８ビットが入力されると共に、固定の“０”と、３２ビット入力マルチプレクサ７２が出力する３２ビットのデータのうちの上位側の下位８ビットが入力される接続になっている。９ビット部分加算器５２には、被乗数レジスタ４１からスワッパ４３を介した被乗数の残りの８ビットが入力されると共に、固定の“０”と、３２ビット入力マルチプレクサ７２が出力する３２ビットのデータのうちの下位側の下位８ビットとが入力される接続になっている。
【００３１】
マルチプレクサ６１は、９ビット部分加算器５１及び５２の出力データから１０ビット部分加算器５４の入力データを選択するようになっている。マルチプレクサ６２は、１０ビット部分加算器５３及び５４の出力データから、１１ビット部分加算器５６の入力データを選択するようになっている。マルチプレクサ６３は、１１ビット部分加算器５５及び５６の出力データから、１２ビット部分加算器５８の入力データを選択するようになっている。
９ビット部分加算器５１の出力するビット加算データＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、ビット加算データＤの残りの８ビット分と９ビット分のキャリーＣとは、１０ビット部分加算器５３の入力ポートに出力し、該８ビット分のビット加算データＤのうちの２ビットと１ビット分のキャリーデータＣがマルチプレクサ６１の入力ポートに出力する接続になっている。一方、９ビット部分加算器５２のビット加算データＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの８ビット分と９ビット分のキャリーデータＣは、マルチプレクサ６１の入力ポートに出力する構成になっている。
【００３２】
２段目の１０ビット部分加算器５３には、９ビット部分加算器５１から与えられるビット加算データＤ及びキャリーＣの他に、スワッパ４３を介して与えられるデータに下位１ビットの“０”を付加した９ビットのデータが、入力されるようになっている。１０ビット部分加算器５４には、マルチプレクサ６１が出力するデータが入力されると共に、３２ビット入力マルチプレクサ７２が出力する８ビットのデータの下位に“０”を１ビット分追加したデータが、入力されるようになっている。１０ビット部分加算器５３が出力するビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの９ビット分のビット加算データと１０ビット分のキャリーは、１１ビット部分加算器５５の入力ポートに出力し、該残りの９ビット分のデータのうちの２ビットと１ビット分のキャリーがマルチプレクサ６２の入力ポートに出力する接続になっている。一方、９ビット部分加算器５４のビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの９ビット分のデータと１０ビット分のキャリーＣは、マルチプレクサ６２の入力ポートへ出力する構成になっている。
【００３３】
３段目の１１ビット部分加算器５５には、１０ビット部分加算器５３から与えられるデータの他に３２ビット入力マルチプレクサ７２が出力する８ビットのデータの下位に“０”を２ビット分追加したデータが、入力されるようになっている。１１ビット部分加算器５６には、マルチプレクサ６２が出力するデータの他に、３２ビット入力マルチプレクサ７２が出力する８ビットのデータの下位に“０”を２ビット分追加したデータが、入力されるようになっている。１１ビット部分加算器５５が出力するビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの１０ビット分のビット加算データと１１ビット分のキャリーＣは、１２ビット部分加算器５７の入力ポートへ出力し、該残りの１０ビット分のデータのうちの２ビットと１ビット分のキャリーＣがマルチプレクサ６３の入力ポートへ出力する接続になっている。一方、１１ビット部分加算器５６のビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの１０ビット分のデータと１１ビット分のキャリーＣは、マルチプレクサ６３の入力ポートへ出力する構成になっている。
【００３４】
４段目の１２ビット部分加算器５７には、１１ビット部分加算器５５から与えられるデータの他に３２ビット入力マルチプレクサ７２が出力する８ビットのデータの下位に“０”を３ビット分追加したデータが入力されるようになっている。１２ビット部分加算器５８には、マルチプレクサ６３が出力するデータの他に、３２ビット入力マルチプレクサ７２が出力する８ビットのデータの下位に“０”を３ビット分追加したデータが、入力されるようになっている。１２ビット部分加算器５７が出力するビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの１１ビット分のビット加算データと１１ビット分のキャリーＣは、１１ビット加算器５９の入力ポートへ出力するようになっている。一方、１２ビット部分加算器５８のビットデータＤの下位の１ビット分のデータは、３２ビット出力マルチプレクサ７０へ出力し、残りの１１ビット分のデータと１１ビット分のキャリーＣは、１１ビット加算器６０の入力ポートへそれぞれ出力する構成になっている。
【００３５】
１１ビット加算器５９，６０の出力側には、８ビット加算器６４，６５が接続されている。８ビット加算器６４には、１１ビット加算器６４が出力するデータの他に、３２ビット入力マルチプレクサ７２の出力データの上位側の下位８ビットが入力されるようになっている。８ビット加算器６５には、１１ビット加算器６５が出力するデータの他に、３２ビット入力マルチプレクサ７２の出力データの下位側の下位８ビットが入力されるようになっている。
１１ビット加算器５９の出力データの下位４ビットと８ビット加算器６４の出力データの８ビットが３２ビット出力マルチプレクサ７０へ出力される構成になっている。８ビット加算器６０の出力データの下位４ビットと８ビット加算器６５の出力データの８ビットとが、３２ビット出力マルチプレクサ７０へ出力される構成になっている。
【００３６】
図１２は、図１１中の９ビット部分加算器５１，５２を示す構成図である。
９ビット部分加算器５１の入力側には、並列の９個のマルチプレクサ（ＭＵＸ）５１−１ａ〜５１−９ａが設けられ、該各マルチプレクサ５１−１ａ〜５１−９ａの出力側に、キャリーセーブアダー（ＦＵＬＬ  ＡＤＤＥＲ）５１−１ｂ〜５１−９ｂがそれぞれ接続されている。また、９ビット加算器５１の９ビット加算器５２側には、マスク手段であるマスク回路５１ｃが設けられている。９ビット部分加算器５１の入力側には、並列の９個のマルチプレクサ５１−１ａ〜５１−９ａが設けられ、該各マルチプレクサ５１−１ａ〜５１−９ａの出力側には、前記キャリーセーブアダー５１−１ｂ〜５１−９ｂがそれぞれ接続されている。図１２には、９ビット部分加算器５１の入力データａ５１0 〜ａ５１7 ，ｂ５１0 〜ｂ５１7 及び該入力データａ５１0 〜ａ５１7 の補数の−ａ５１0 〜−ａ５１7 と、９ビット部分加算器５２の入力データａ５２0 〜ａ５２7 ，ｂ５２0 〜ｂ５２7 及び該入力データａ５２0 〜ａ５２7 の補数で−ａ５２0 〜−ａ５２7 とが示されている。
【００３７】
９ビット部分加算器５２の入力データａ５２0 〜ａ５２7 は、スワッパ４３から与えられた８ビットのデータであり、入力データａ５２0 及び補数−ａ５２0 は、マルチプレクサ５２−１ａに“０”と共に入力され、かつ、該マルチプレクサ５２−１ａの上位側のマルチプレクサ５２−２ａに入力されている。以下、同様に、９ビット部分加算器５２の入力データａ５２1 〜ａ５２7 及び補数−ａ５２1 〜−ａ５２7 は、各マルチプレクサ５２−２ａ〜５２−８ａに“０”と共に入力され、かつ、その上位側のマルチプレクサ５２−３ａ〜５２−９ａにそれぞれ入力される構成になっている。入力データａ５２7 及び補数−ａ５２7 は、さらに、マスク回路５１ｃを介して９ビット加算器５１中のマルチプレクサ５１−１ａに入力される接続になっている。９ビット部分加算器５２の入力データｂ５２0 〜ｂ５２7 は、３２ビット入力マルチプレクサ７２から与えられた８ビットの下位側被加算データであり、該各入力データｂ５２0 〜ｂ５２6 は、各マルチプレクサ５２−１ａ〜５２−７ａの出力するデータと共に、キャリーセーブアダー５２−１ｂ〜５２−７ｂにそれぞれ入力される。入力データｂ５２7 は、各マルチプレクサ５２−８ａ及び５２−９ａの出力データと共にキャリーセーブアダー５２−８ｂ，５２−９ｂに共通に入力される接続になっている。
【００３８】
９ビット部分加算器５１の入力データａ５１0 〜ａ５１7 は、スワッパ４３から与えられた８ビットのデータであり、入力データａ５１0 及び補数−ａ５１0 は、マルチプレクサ５１−１ａに“０”と共に入力され、かつ、該マルチプレクサ５１−１ａの上位側のマルチプレクサ５１−２ａに入力されている。以下、同様に、９ビット部分加算器５１の入力データａ５１1 〜ａ５１7 及び補数−ａ５１1 〜−ａ５１7 は、各マルチプレクサ５１−２ａ〜５１−８ａに“０”と共に入力され、かつ、その上位側のマルチプレクサ５１−３ａ〜５１−９ａにそれぞれ入力される構成になっている。９ビット部分加算器５１の入力データｂ５１0 〜ｂ５１7 は、３２ビット入力マルチプレクサ７２から与えられた８ビットの上位側被加算データであり、該各入力データｂ５１0 〜ｂ５１6 は、各マルチプレクサ５１−１ａ〜５１−７ａの出力するデータと共に、キャリーセーブアダー５１−１ｂ〜５１−７ｂに入力される。入力データｂ５１7 は、各マルチプレクサ５１−８ａ及び５１−９ａの出力データと共にキャリーセーブアダー５１−８ｂ，５１−９ｂにそれぞれ入力される接続になっている。
９ビット部分加算器５２の各キャリーセーブアダー５２−１ｂ〜５２−９ｂが、ビット単位の加算データｄ５２0 〜ｄ５２8 及びキャリーｃ５２0 〜ｃ５２8 をそれぞれ出力し、同様に、９ビット部分加算器５１の各キャリーセーブアダー５１−１ｂ〜５１−９ｂが、ビット単位の加算データｄ５１0 〜ｄ５１8 及びキャリーｃ５１0 〜ｃ５１8 をそれぞれ出力する構成になっている。
【００３９】
図１３は、図１１中の１０ビット部分加算器５３，５４を示す構成図てある。
１０ビット部分加算器５３の入力側には、並列の１０個のマルチプレクサ５３−１ａ〜５３−１０ａが設けられ、該各マルチプレクサ５３−１ａ〜５３−１０ａの出力側に、キャリーセーブアダー５３−１ｂ〜５３−１０ｂがそれぞれ接続されている。また、１０ビット加算器５３の１０ビット加算器５４側には、マスク手段であるマスク回路５３ｃが設けられている。１０ビット部分加算器５４の入力側には、並列の１０個のマルチプレクサ５４−１ａ〜５４−１０ａが設けられ、該各マルチプレクサ５４−１ａ〜５４−１０ａの出力側には、キャリーセーブアダー５４−１ｂ〜５４−１０ｂがそれぞれ接続されている。図１３には、１０ビット部分加算器５４の入力データａ５４0 〜ａ５４8 ，ｂ５４0 〜５４9 、該各入力データａ５４0 〜ａ５４8 の補数−ａ５４0 〜−ａ５４8 及びビット単位の入力キャリーｃｉ５４0 〜ｃｉ５４9 が示されると共に、１０ビット部分加算器５３の入力データａ５３0 〜ａ５３8 ，ｂ５３0 〜ｂ５３8 、該入力データａ５３0 〜ａ５３8 の補数−ａ５３0 〜−ａ５３8 及び入力キャリーｃｉ５３0 〜ｃｉ５３8 が示されている。
【００４０】
１０ビット部分加算器５４の入力データａ５４0 〜ａ５４8 が、スワッパ４３から与えられた８ビットのデータの下位に“０”を付加したデータであり、入力信号ａ５４0 及び補数−ａ５４0 は、マルチプレクサ５４−１ａに“０”と共にされ、かつ、該マルチプレクサ５４−１ａの上位側のマルチプレクサ５４−２ａに入力されている。以下、同様に、１０ビット部分加算器５４の入力データａ５４1 〜ａ５４8 及び補数−ａ５４1 〜−ａ５４8 は、各マルチプレクサ５４−２ａ〜５４−８ａに“０”と共に入力され、かつ、その上位側のマルチプレクサ５２−３ａ〜５２−９ａにそれぞれ入力される構成になっている。入力データａ５４8 及び補数−ａ５４8 は、さらに、マスク回路５３ｃを介して１０ビット部分加算器５３中のマルチプレクサ５３−１ａに入力される接続になっている。
１０ビット部分加算器５４の入力データｂ５４0 〜ｂ５４9 及び入力キャリーｃｉ５４0 〜ｃｉ５４9 は、前段の９ビット部分加算器５２の出力データが９ビットであったのに対し、マルチプレクサ６１で符号拡張されて入力されたものであり、該各入力データｂ５４0 〜ｂ５４9 及び入力キャリーｃｉ５４0 〜ｃｉ５４9 は、各マルチプレクサ５４−１ａ〜５４−１０ａの出力するデータと共に、キャリーセーブアダー５４−１ｂ〜５２−１０ｂに入力されようになっている。
【００４１】
１０ビット部分加算器５３の入力データａ５３0 〜ａ５３8 は、スワッパ４３から与えられた８ビットのデータの下位に“０”を付加したデータであり、入力信号ａ５３0 及び補数−ａ５３0 は、マルチプレクサ５３−１ａに“０”と共に入力され、かつ、該マルチプレクサ５３−１ａの上位側のマルチプレクサ５３−２ａに入力される接続になっている。以下、同様に、１０ビット部分加算器５３の入力データａ５３1 〜ａ５３8 及び補数−ａ５３1 〜−ａ５３8 は、各マルチプレクサ５３−２ａ〜５３−９ａに“０”と共に入力され、かつ、その上位側のマルチプレクサ５３−３ａ〜５３−１０ａにそれぞれ入力される構成になっている。１０ビット部分加算器５３の入力データｂ５３0 〜ｂ５３8 及び入力キャリーｃｉ５３0 〜ｃｉ５３8 は、前段の９ビット部分加算器５２の出力と同じ９ビットであるが、キャリーセーブアダー５３−１０ｂにより、符号ビットが拡張されたようになる。つまり、各入力データｂ５３0 〜ｂ５３8 及び入力キャリーｃｉ５３0 〜ｃｉ５３8 は、各マルチプレクサ５３−１ａ〜５３−１０ａの出力するデータと共にキャリーセーブアダー５３−１ｂ〜５３−９ｂに入力され、入力信号ｂ５３8 及び入力キャリーｃｉ５３8 が、キャリーセーブアダー５３−９ｂに入力される構成になっている。
【００４２】
１０ビット部分加算器５４の各キャリーセーブアダー５４−１ｂ〜５４−１０ｂが、ビット単位の加算データｄ５４0 〜ｄ５４9 及びキャリーｃ0 〜ｃ５４9 をそれぞれ出力し、同様に、１０ビット部分加算器５３の各キャリーセーブアダー５３−１ｂ〜５３−１０ｂが、ビット単位のｄ５３0 〜ｄ５３9 及びキャリーデータｃ0 〜ｃ５３9 をそれぞれ出力する構成になっている。
１１ビット部分加算器５５，５６、及び１２ビット部分加算器５７，５９も、入力信号のビット数、マルチプレクサの数、及びキャリーセーブアダーの数及び出力信号のビット数が増加するだけで、基本的構成は図１３と同様になっている。
【００４３】
図１４は、図１１中のマルチプレクサ６１の選択の説明図である。
マルチプレクサ６１には、９ビット部分加算器５１の出力する加算データｄ５１0 〜ｄ５１8 及びキャリーｃ５１0 〜ｃ５１8 のうちの下位２ビットのデータｄ５１0 ，ｄ５１1 及び下位のキャリーｃ５１0 と、９ビット部分加算器５２の出力する加算データｄ５２0 〜ｄ５２8 及びキャリーｃ５２0 〜ｃ５２8 のうちの上位８ビットのデータｄ５２1 〜ｄ５２8 及びすべてのキャリーｃ５２0 〜ｃ５２8 を入力している。マルチプレクサ６１は、整数の乗算を行うときと複素数の乗算を行うときとで、図１４のようにこれらの選択を切替えて出力するようになっている。マルチプレクサ６２，６３も、ヒット数は異なるが、図１４と同様の切替えを行って１１ビット部分加算器５４及び１２ビット部分加算器５６に出力するようになっている。
【００４４】
図１５は、図１１中の１１ビット加算器５９，６０を示す構成図である。
５段目の１１ビット加算器５９，６０は、前段の１２ビット部分加算器５７，５８から出力される加算データｄ５７0 〜ｄ５７11，ｄ５８0 〜ｄ５８11及びキャリーｃ５７0 〜ｃ５７11，ｃ５８0 〜ｃ５８11を加算するものである。１１ビット加算器５９は、加算データｄ５７0 〜ｄ５７11とキャリーｃ５７0 〜ｃ５７11の加算を行う加算器５９ａと、マスク回路（ＭＳＫ）５９ｂ及びマスク回路５９ｃとを備えている。マスク回路５９ｂは、整数の乗算を行うときに加算データｄ５７0 〜ｄ５７11及びキャリーｃ５７0 〜ｃ５７11のうちのデータｄ５７0 〜ｄ５７2 をマスクして“０”に固定し、キャリーｃ５７0 〜ｃ５７2 を“１”に固定するものであり、下位側の加算結果のキャリーが４ビット目から反映されるようになっている。マスク回路５９ｃは、複素数の乗算を行うときに１１ビット加算器６０から与えられるキャリーｃ６０をマスクするものである。加算回路５９ａが加算結果をビット単位に示す加算データｄ５９0 〜ｄ５９11とキャリーｃ５９を出力するようになっている。
１１ビット加算器６０は、加算データｄ５８0 〜ｄ５８11とキャリーｃ５８0 〜ｃ５８11の加算を行う加算器５６ａを備ている。加算回路６０ａが加算結果をビット単位に示す加算データｄ６０0 〜ｄ６０10とキャリーｃ６０を出力するようになっている。
６段目の８ビット加算器６４，６５は、複数乗算時には前記（２）式における右辺第１項の結果の上位８ビットと、各８ビット加算器５９，６０の出力するデータの上位８ビットとをそれぞれ加算し、整数の乗算を行うときには“０”を加算するものである。
【００４５】
図１６（ａ），（ｂ）は、図９中の３２ビット出力マルチプレクサ７０での選択の説明図であり、同図（ａ）は整数乗算時、及び同図（ｂ）は複素数乗算時をそれぞれ示している。
３２ビット出力マルチプレクサ７０には、１６×８アレー乗算器５０から、上位側の１６ビットのデータと下位側の１６ビットのデータとが入力データとして３２ビット幅で与えられている。３２ビット出力マルチプレクサ７０は、整数乗算時には、図１６（ａ）のように、上位側の入力データのうちの９ビットと、下位側の１５ビットを有効とし、最初の乗算サイクルＣｙ１には、有効なデータを下位側に並べて出力し、次の乗算サイクルＣｙ２には、上位側から並べて出力する。複素数乗算時には、図１６（ｂ）のように、３２ビット幅で与えられる入力データの上位の１４ビットと下位の１４ビットとを有効とし、これらをそのまま３２ビットレジスタ７１に出力するように動作する。
【００４６】
図１７（ａ），（ｂ）は、図９中の３２ビット入力マルチプレクサ７２の選択の説明図であり、同図（ａ）は整数乗算時、及び同図（ｂ）は複素数乗算時をそれぞれ示している。
３２ビット入力マルチプレクサ７２は、３２ビットレジスタ７１からデータを選択して１６×８アレイ乗算器５０に与える機能を有している。３２ビットレジスタ７１から入力される上位側の１６ビットのデータと下位側の１６ビットのデータに対し、３２ビット入力マルチプレクサ７２は、整数乗算時にはその上位側の下位８ビットと下位側の上位８ビットを有効とし、これらを図１７（ａ）のように並べ、他のビットを“０”とし、９ビット部分加算器５１，５２に分割して与える。複素数乗算時には、３２ビットレジスタ７１から入力される上位側の１６ビットのデータと下位側の１６ビットのデータに対し、これらを図１７（ｂ）のようにして９ビット部分加算器５１，５２に分割して与えるようになっている。
【００４７】
次に、整数乗算時の図９の乗算器の動作を説明する。
整数乗算時には、乗数レジスタ４１に１６ビットの整数の被乗数が格納され、乗数レジスタ４２に整数の１６ビットの乗数が格納される。
最初のサイクルＣｙ１において、デコーダ４４が乗数の下位８ビットの３ビットずつデコードし、１６×８アレイ乗算器５０の動作を指示する制御信号Ｓｃを生成し、該１６×８アレイ乗算器５０の各部分加算器５１〜５８中のマルチプレクサに与える。スワッパ４３は、被乗数をそのまま出力し、１６×８アレイ乗算器５０に与える。これに対し、３２ビット入力マルチプレクサ７２は、初期値として格納したオール“０”を１６×８アレイ乗算器５０に入力する。
１６×８アレイ乗算器５０において、上位側の１段目の９ビット部分加算器５１内のマルチプレクサ５１−１ａ〜５１−９ａは、デコード結果の制御信号Ｓｃに基づき、前記ブースのアルゴリズムの加算を行うために、入力データである被乗数、補数または“０”を選択し、各キャリーセーブアダー５１−１ｂ〜５１−９ｂが、マルチプレクサ５１−１ａ〜５１−９ａで選択したビット単位のデータを“０”と加算する。同様に、９ビット部分加算器５２内のマルチプレクサ５２−１ａ〜５２−９ａは、デコード結果に基づき入力データである被乗数、補数または“０”を選択し、キャリーセーブアダー５２−１ｂ〜５２−９ｂがマルチプレクサ５２−１ａ〜５２−９ａの選択したデータを“０”と加算する。下位側の１段目の９ビット部分加算器５２内のマルチプレクサ５２−１ａ〜５２−９ａは、デコード結果の制御信号Ｓｃに基づき、入力データである被乗数、補数または“０”を選択し、各キャリーセーブアダー５２−１ｂ〜５２−９ｂが、選択されたビット単位のデータと“０”とを加算する。
【００４８】
９ビット部分加算器５１が出力する加算結果のうちの最下位のビット加算データｄ５１0 は、３２ビット出力マルチプレクサ７０に与えられる。残りの加算結果のビット加算データｄ５１1 〜ｄ５１8 と、キャリーｃ５１0 〜ｃ５１8 が、２段目の１０ビット部分加算器５３に与えられる。また、９ビット部分加算器５１が出力する加算結果のうちの２個のビット加算データｄ５１1 ，ｄ５１2 と最下位のキャリーｃ５１0 は、マルチプレクサ６１にも与えられる。
９ビット部分加算器５２が出力する加算結果のうちの最下位のビット加算データｄ５２0 は、３２ビット出力マルチプレクサ７０に与えられる。残りの加算結果のビット加算データｄ５２1 〜ｄ５２8 とキャリーｃ５２0 〜ｃ５２8 は、マルチプレクサ６１に与えられる。
マルチプレクサ６１は、図１４の選択に基づき、下位側のビット加算データｄ５２1 〜ｄ５２8 と上位側のビット加算データｄ５１0 及びｄ５１1 とを選択し、これらを順に並べてパラレルに出力し、かつ、下位側のキャリーｃ５２0 〜ｃ５２8 と上位側のキャリーｃ５１0 とを選択し、これらを順に並べてパラレルに出力し、１０ビット部分加算器５４に与える。
【００４９】
２段目の１０ビット部分加算器５３においても、デコード結果の制御信号Ｓｃに基づいた前記ブースのアルゴリズムの加算を行うために、各マルチプレクサ５３−１ａ〜５３−１０ａが、入力データである被乗数、補数または“０”を選択し、各キャリーセーブアダー５３−１ｂ〜５３−１０ｂが、マルチプレクサ５３−１ａ〜５３−１０ａで選択したビット単位のデータと、前段の９ビット部分５１から与えられデータとを加算する。同様に、２段目の１０ビット部分加算器５４も、デコード結果の制御信号Ｓｃに基づき、前記ブースのアルゴリズムの加算を行うために、各マルチプレクサ５４−１ａ〜５４−１０ａが、入力データである被乗数、補数または“０”を選択し、各キャリーセーブアダー５４−１ｂ〜５４−１０ｂが、マルチプレクサ５４−１ａ〜５４−１０ａで選択したビット単位のデータと、マルチプレクサ６１を介して与えられたデータとを加算する。
【００５０】
１０ビット部分加算器５３が出力する加算結果のうちの最下位のビット加算データｄ５３0 は、３２ビット出力マルチプレクサ７０に与えられる。残りの加算結果のビット加算データｄ５３1 〜ｄ５３9 と、キャリーｃ５３0 〜ｃ５３9 が、３段目の１１ビット部分加算器５５に与えられる。また、１０ビット部分加算器５３が出力する加算結果のうちの２個のビット加算データｄ５３1 ，ｄ５３2 と最下位のキャリーｃ５３0 は、マルチプレクサ６２にも与えられる。
１０ビット部分加算器５４が出力する加算結果のうちの最下位のビット加算データｄ５４0 は、３２ビット出力マルチプレクサ７０に与えられる。残りの加算結果のビット加算データｄ５４1 〜ｄ５４9 とキャリーｃ５４0 〜ｃ５４9 は、マルチプレクサ６２に与えられる。
マルチプレクサ６２は、マルチプレクサ６１と同様の選択を行う。
【００５１】
３段目の１１ビット部分加算器５５，５６は、２段目の１０ビット部分加算器５３，５４と同様の動作で部分加算結果を出力し、マルチプレクサ６３がマルチプレクサ６１及び６２と同様の選択をする。さらに、４段目の１２ビット部分加算器５７，５８が、２段目の１０ビット部分加算器５３，５４と同様の動作で部分加算結果を出力する。
５段目の１２ビット加算器５９，６０は、それぞれ１２ビットの加算結果を出力する。１２ビット加算器５９が出力する加算結果のうちの下位４ビット分が直接３２ビット出力マルチプレクサ７０に与えられる。１２ビット加算器５９が出力する加算結果のうちの上位８ビット分は、８ビット加算器６４で“０”と加算されて３２ビット出力マルチプレクサ７０に与えられる。１２ビット加算器６０が出力する加算結果のうちの下位４ビット分が直接３２ビット出力マルチプレクサ７０に与えられる。１２ビット加算器６０が出力する加算結果のうちの上位８ビット分は、８ビット加算器６５で“０”と加算されて３２ビット出力マルチプレクサ７０に与えられる。
３２ビット出力マルチプレクサ７０には、合計３２ビットのデータが入力されているが、このサイクルでは、図１６（ａ）に示すように、入力の上位側の９ビットと下位の１５ビットを選択し、下位側から並べてパラレルに３２ビットレジスタ７１に出力して格納する。
【００５２】
以上が最初の乗算サイクルＣｙ１である。この最初の乗算サイクルＣｙ１の動作により、１６ビットの整数同士の乗算結果の３２ビットｉｐ0 〜ｉｐ31のうちの下位側のｉｐ0 〜ｉｐ7 が確定する。９ビット部分加算器５２、１０ビット部分加算器５４及び１１ビット部分加算器５６、１２ビット部分加算器５８がそれぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データが、図１１に示すように、乗算結果のｉｐ0 〜ｉｐ3 に相当し、１１ビット加算器６０が３２ビット出力マルチプレクサ７０に出力する４ビットのビット加算データがｉｐ4 〜ｉｐ7 に相当する。確定した乗算結果のｉｐ0 〜ｉｐ7 は、３２ビット出力マルチプレクサ７０を介して３２ビットレジスタ７１に格納される。
乗算サイクルＣｙ２において、デコーダが４４が、乗数レジスタ４２に格納された乗数の上位８ビットを３ビットずつ組みでデコードし、１６×８アレイ乗算器５０の動作を指示する制御信号Ｓｃを発生する。スワッパ４３は、被乗数レジスタ４１に格納された被乗数をそのまま１６×８アレイ乗算器５０へ転送する。３２ビット入力マルチプレクサ７２は、図１７（ａ）のように、３２ビットレジスタ７１に格納されたデータのうちの上位側の下位８ビットのデータと、下位側の上位８ビットのデータを取得し、該取得した下位８ビットのデータの上位に８ビット分の“０”を追加し、取得した上位８のデータの上位に８ビットの“０”を追加し、これらをパラレルにして３２ビットで出力する。
１６×８アレイ乗算器５０は、制御信号Ｓｃに基づきサイクルＣｙ１と同様に動作する。３２ビット出力マルチプレクサ７０は、図１６（ａ）のように、１６×８アレイ乗算器５０の出力するビットの上位側の９ビットと下位の１５ビットを選択し、上位側にならべて３２ビットレジスタに出力する。
【００５３】
以上により、乗算サイクルＣｙ２が終了する。このサイクルＣｙ２により、乗算結果の３２ビットのデータｉｐ0 〜ｉｐ31のうちの未確定であったデータｉｐ8 〜ｉｐ31が確定する。９ビット部分加算器５２、１０ビット部分加算器５４及び１１ビット部分加算器５６、１２ビット部分加算器５８がそれぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データが、図１１に示すように、乗算結果のデータｉｐ8 〜ｉｐ11に相当し、１１ビット加算器６０が３２ビット出力マルチプレクサ７０に出力する４ビットのビット加算データがｉｐ12〜ｉｐ15に相当する。８ビット加算器６５が出力する８ビットのビット加算データが乗算結果のデータｉｐ16〜ｉｐ23に相当し、８ビット加算器６４が出力する８ビットのビット加算データが乗算結果のデータｉｐ24〜ｉｐ31に相当する。新たに確定した乗算結果のデータｉｐ8 〜ｉｐ31が、３２ビット出力マルチプレクサ７０を介して３２ビットレジスタ７１に格納される。
【００５４】
次に、複素数同士の乗算を行うときの動作を説明する。
１６ビットの複素数同士の乗算の場合、被乗数レジスタ４１の上位側に被乗数の複素数の実数部が格納されると共に下位側に虚数部が格納され、乗数レジスタ４２に乗数の複素数が格納される。
最初のサイクルＣｙ１にらおいて、デコーダち４４は、乗数レジスタ４２に格納された複素数のうちの実数部の８ビットを２ビットずつ組でデコードし、１６×８アレイ乗算器５０の動作を指示する制御信号Ｓｃを発生する。スワッパ４３は、乗数レジスタ４１に上位側から順に格納された複素数の８ビットの実数部と８ビットの虚数部をそのまま１６×８アレイ乗算器５０に転送する。３２ビット入力マルチプレクサ７２は、３２ビットレジスタ７１の格納データがこの時点ですべて“０”なので、“０”を３２ビット幅で出力する。
【００５５】
１６×８アレイ乗算器５０において、被乗数の実数部は、スワッパ４３を介して９ビット部分加算器５１に与えられ、虚数部は９ビット部分加算器５２に与えられる。９ビット部分加算器５１内のマルチプレクサ５１−１ａ〜５１−９ａは、デコード結果の制御信号Ｓｃに基づき、ブースのアルゴリズムの加算を行うために、入力データである被乗数、補数または“０”を選択し、各キャリーセーブアダー５１−１ｂ〜５１−９ｂが、マルチプレクサ５１−１ａ〜５１−９ａで選択したビット単位のデータを“０”と加算する。これらと同時に、９ビット部分加算器５２内のマルチプレクサ５２−１ａ〜５２−９ａが、デコード結果に基づき入力データである被乗数、補数または“０”を選択し、該選択したデータをキャリーセーブアダー５２−１ｂ〜５２−９ｂが“０”と加算する。
９ビット部分加算器５１が出力する加算結果のうちの最下位のビット加算データｄ５１0 は、３２ビット出力マルチプレクサ７０に与えられる。残りの加算結果のビット加算データｄ５１1 〜ｄ５１8 と、キャリーｃ５１0 〜ｃ５１8 が、２段目の１０ビット部分加算器５３に与えられる。また、９ビット部分加算器５１が出力する加算結果のうちの２個のビット加算データｄ５１1 ，ｄ５１2 と最下位のキャリーｃ５１0 は、マルチプレクサ６１にも与えられる。マルチプレクサ６１は、図１４の選択に基づき、下位側のビット加算データｄ５２1 〜ｄ５２8 と２ビット分の“０”とを順に並べてパラレルに出力し、かつ、下位側のキャリーｃ５２0 〜ｃ５２8 を選択すると共にキャリーｃ５２8 を追加して順に並べてパラレルに出力し、１０ビット部分加算器５４に与える。
【００５６】
２段目の１０ビット部分加算器５３，５４、３段目の１１ビット部分加算器５５，５６、４段目の１２ビット部分加算器５７，５８、及び各段間のマルチプレクサ６２，６３も、９ビット部分加算器５１，５２及びマルチプレクサ６１と同様に動作する。
５段目の１１ビット加算器５９，６０が、１２ビットずつのデータを出力し、６段目の８ビット加算器６４，６５において、１１ビット加算器５９，６０の各出力データのうちの上位８ビットと、３２ビット入力マルチプレクサ７２の出力データの上位側の下位８ビット及び下位側の下位８ビットとを加算する。ただし、３２ビット入力マルチプレクサ７２の出力データがこのときは“０”なので、加算による変化は起こらない。
３２ビット出力マルチプレクサ７０は、図１６（ｂ）のように、１６×８アレイ乗算器５０からのデータをそのまま３２ビットレジスタ７１に出力する。
【００５７】
以上が乗算サイクルＣｙ１の動作である。この乗算サイクルＣｙ１の動作により、（２）式の第１項目のＡｒ・ＢｒとＡｉ・Ｂｒとが計算されたことになる。９ビット部分加算器５２、１０ビット部分加算器５４、１１ビット部分加算器５６及び１２ビット部分加算器５８がそれぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データと、１１ビット加算器６０と８ビット加算器６５の出力するデータとを合成したものが、Ａｉ・Ｂｒに相当し、９ビット部分加算器５１、１０ビット部分加算器５３、１１ビット部分加算器５５及び１２ビット部分加算器５７がそれぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データと、１１ビット加算器５９と８ビット加算器６４の出力するデータとを合成したものが、Ａｒ・Ｂｒに相当する。これらのデータは、３２ビット出力マルチプレクサ７０を介して３２ビットレジスタ７１に格納される。
乗算サイクルＣｙ２において、デコーダ４４は、乗数レジスタ４２に格納された虚数部の８ビットを２ビットずつ組みでデコードし、１６×８アレイ乗算器５０の動作を指示する制御信号Ｓｃを発生する。スワッパ４３は、被乗数レジスタ４１に格納されたデータの上位８ビットと下位８ビットを入れ替え、１６×８アレイ乗算器５０に転送する。３２ビット入力マルチプレクサ７２は、３２ビットレジスタ７１が格納するデータをそのままパラレルに出力する。
【００５８】
１６×８アレイ乗算器５０において、被乗算データが制御信号Ｓｃに基づき、マルチプレクサ５１−１ａ〜５１−９ａ，５２−１ａ〜５２−９ａで変形され、キャリーセーブアダー５１−１ｂ〜５１−９ｂ，５２−１ｂ〜５２−９ｂによって、３２ビット入力マルチプレクサ７２から与えられたデータの上位側（実数部）の下位８ビット及び下位側（虚数部）の下位８ビットと加算される。ただし、被乗数の上位８ビットは（２）式に示すように負になるので、実質的には補数を用いた減算が行われる。以下、２段目の１０ビット部分加算器５３，５４から５段目の１２ビット加算器５７，５８まで、乗算サイクルＣｙ１と同様の処理を行う。６段目の８ビット加算器６４，６５が、１１ビット加算器５９，６０が出力するデータのうちの上位８ビットと、３２ビット入力マルチプレクサ７２の出力データのうちの上位側の下位８ビットのデータ及び下位側の下位８ビットのデータとをそれぞれ加算する。３２ビット出力マルチプレクサ７０は、１６×８アレイ加算器５０が出力したデータを、そのまま３２ビットレジスタ７１に与えて格納する。
【００５９】
以上により、乗算サイクルＣｙ２が終了する。このサイクルＣｙ２の動作により、（２）式の演算結果が求められたことになる。演算結果の実数部をｒｐ0 〜ｒｐ15とし、虚数部をｊｐ0 〜ｊｐ15とすると、乗算サイクルＣｙ２における９ビット部分加算器５２、１０ビット部分加算器５４、１１ビット部分加算器５６及び１２ビット部分加算器５８が、それぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データが、図１１に示すように、虚数部のｊｐ0 〜ｊｐ3 に相当し、１１ビット加算器６０が３２ビット出力マルチプレクサ７０に出力する４ビットのビット加算データがｊｐ4 〜ｊｐ7 に相当する。８ビット加算器６５が出力する８ビットのビット加算データが乗算結果のデータｊｐ8 〜ｊｐ15に相当する。また、９ビット部分加算器５１、１０ビット部分加算器５３及び１１ビット部分加算器５３、１２ビット部分加算器５７がそれぞれ３２ビット出力マルチプレクサ７０に直接出力する最下位ビットのビット加算データが、実数部のｒｐ0 〜ｒｐ3 に相当し、１１ビット加算器５９が３２ビット出力マルチプレクサ７０に出力する４ビットのビット加算データがｒｐ4 〜ｒｐ7 に相当する。８ビット加算器６４が出力する８ビットのビット加算データが乗算結果のデータｒｐ8 〜ｒｐ15に相当する。
以上のように、この第２の実施形態では、整数同士の乗算ばかりでなく、複素数同士の乗算が可能なアレイ型乗算器になっており、しかも、整数のみを乗算するアレイ型乗算器に対しても、わずかなハードウエアの追加で構成できる。
【００６０】
なお、本発明は、上記実施形態に限定されず種々の変形が可能である。
例えば、第１の実施形態では、符号付データの乗算に対応する繰り返し型乗算器を説明したが、レジスタビット数を１つ増やし、反復回数をもう１回増やせば、符号なしデータに対しても整数乗算及び複素数乗算が可能である。第２の実施形態でも符号付データの乗算に対応するアレイ型乗算器を説明したが、レジスタビット数を１つ増やし、１６×８アレイ乗算器の部分加算器の段数を１段増やすことにより、符号なしデータに対しても整数乗算及び複素数乗算が可能である。
【００６１】
【発明の効果】
以上詳細に説明したように、第１の発明によれば、被乗数レジスタ、乗数レジスタ、デコーダ及び入れ替え手段と、下位側変換手段及び上位側変換手段と、下位側部分加算器及び上位側部分加算器と、下位側桁移動手段及び上位側桁移動手段と、下位側部分積レジスタ部及び上位側部分積レジスタ部と、下位側シフタ及び上位側シフタとを備えると共に、マスク手段、下位側補助レジスタ及び上位側補助レジスタを設けたので、整数同士の乗算と複素数同士の乗算との両方が可能な繰り返し型乗算器を少ないハード量で実現できる。
第２の発明によれば、被乗数レジスタ、乗数レジスタ、デコーダ及び入れ替え手段と、デコーダと、下位側初段部分加算器、下位側縦続部分加算器、上位側初段部分加算器、上位側縦続部分加算器及びマスク手段を有するアレイ乗算部と、レジスタと、入力マルチプレクサと、出力マルチプレクサとを設けたので、整数同士の乗算と複素数同士の乗算との両方が可能なアレイ型乗算器を少ないハード量で実現できる。
【図面の簡単な説明】
【図１】本発明の第１の実施形態を示す繰り返し型乗算器の概略の構成図である。
【図２】従来の乗算器の積和演算サイクル数を示す図である。
【図３】複素数データと複素数表現を示す図である。
【図４】図１中のデコーダ４が使用するブースのアルゴリズムを示す図である。
【図５】図１中のデコーダ４が行う乗数のデコード順序を示す図である。
【図６】図１中の部分加算器１０，２０を示す構成図である。
【図７】マルチプレクサ３１，３６の選択を示す図である。
【図８】シフタ３４，３５が選択するフィールドを示す図である。
【図９】本発明の第２の実施形態を示すアレイ型乗算器の構成図である。
【図１０】図１中のデコーダ４４による乗数のデコード順序を示す図である。
【図１１】図９中の１６ビット×８アレー乗算器５０を示す構成図である。
【図１２】図１１中の９ビット部分加算器５１，５２を示す構成図である。
【図１３】図１１中の１０ビット部分加算器５３，５４を示す構成図てある。
【図１４】図１１中のマルチプレクサ６１の選択の説明図である。
【図１５】図１１中の１１ビット加算器５９，６０を示す構成図である。
【図１６】図９中の３２ビット出力マルチプレクサ７０の選択の説明図である。
【図１７】図９中の３２ビット入力マルチプレクサ７２の選択の説明図である。
【符号の説明】
１，４１    被乗数レジスタ
２，４２    乗数レジスタ
３，４３    スワッパ
４，４４    デコーダ
５，６，３１，３６    マルチプレクサ
１０，２０    部分加算器
３２，３７    部分積レジスタ
３３，３８    部分積補助レジスタ
３４，３５    シフタ
５０    １６×８アレイ乗算器
７０    出力マルチプレクサ
７１    レジスタ
７２    入力マルチプレクサ
【図１】
0003982965.tif 000004
【図２】
0003982965.tif 000005
【図３】
0003982965.tif 000006
【図４】
0003982965.tif 000007
【図５】
0003982965.tif 000008
【図６】
0003982965.tif 000009
【図７】
0003982965.tif 000010
【図８】
0003982965.tif 000011
【図９】
0003982965.tif 000012
【図１０】
0003982965.tif 000013
【図１１】
0003982965.tif 000014
【図１２】
0003982965.tif 000015
【図１３】
0003982965.tif 000016
【図１４】
0003982965.tif 000017
【図１５】
0003982965.tif 000018
【図１６】
0003982965.tif 000019
【図１７】
0003982965.tif 000020