(57)【特許請求の範囲】
【請求項１】
１個の乗算器、１個の補数発生器、２個（第１及び第２）のアキュムレータ並びに２個（第１及び第２）の加算器からなる積和演算装置であって、前記乗算器は、２個のｎビットデータをかけ算することにより２ｎビットの乗算値を算出し、前記補数発生器は、前記乗算値の２の補数値を算出し、前記第１及び第２のアキュムレータは、それぞれ１個のｎビットデータを格納する領域を有し、前記第１の加算器は、前記第１のアキュムレータに格納されていたｎビットデータを読み出し、その値と前記乗算値の上位ｎビットデータとを加算し、その結果を前記第１のアキュムレータに格納し、前記第２の加算器は、前記第２のアキュムレータに格納されていたｎビットデータを読み出し、その値と前記補数発生器の上位ｎビットデータとを加算し、その結果を前記第２のアキュムレータに格納することを特徴とする積和演算装置。
【請求項２】
１個の乗算器、１個の補数発生器、２個（第１及び第２）のアキュムレータ、１個のセレクタ並びに２個（第１及び第２）の加算器からなる積和演算装置であって、前記乗算器は、２個のｎビットデータをかけ算することにより２ｎビットの乗算値を算出し、前記補数発生器は、前記乗算値の２の補数値を算出し、前記第１及び第２のアキュムレータは、それぞれ１個のｎビットデータを格納する領域を有し、前記セレクタは、そのセレクタが有する端子に入力された制御信号に基づいて、前記第１及び第２のアキュムレータのいずれか一方に格納されていたｎビットデータを前記第１の加算器に出力すると共に、他の一方に格納されていたｎビットデータを前記第２の加算器に出力し、前記第１の加算器は、前記セレクタから出力されたｎビットデータと前記乗算値の上位ｎビットデータとを加算し、その結果を前記第１のアキュムレータに格納し、前記第２の加算器は、前記セレクタから出力されたｎビットデータと前記補数発生器の上位ｎビットデータとを加算し、その結果を前記第２のアキュムレータに格納することを特徴とする積和演算装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は積和演算装置に関し、特に複素演算における積和計算の高速化に関する。
【０００２】
【従来の技術】
デジタル信号処理に代表される数値計算においては、積和演算を繰り返すことが多い。そのために、高速に積和演算を行う専用の装置が要求される。
ここで、積和演算とは、２種類のデータ列
｛ｘ(i)：ｉ＝０，１，…，ｎ｝、
｛ｙ(i)：ｉ＝０，１，…，ｎ｝
に対して、対応するデータどうしの積を求めて加算すること、即ち、
Σｘ(i)・ｙ(i)
を算出することである。
【０００３】
図５は、従来の積和演算装置の構成を示すブロック図である。
従来の積和演算装置は、乗算器５０１、補数発生器５０２、加算器５０３、アキュムレータ５０４及びシフタ５０５から構成される。ｘバス５１３及びｙバス５１４は、積和演算装置へのデータ入力及びデータ出力のための信号線である。なお、ｘバス５１３、ｙバス５１４及びデータ信号線５０６、５０７、５１２は１６ビット幅とし、データ信号線５０８〜５１１は３２ビット幅とし、制御信号線５１５は１ビット幅とする。
【０００４】
従来の積和演算装置の動作は、以下の通りである。
ｘバス５１３及びｙバス５１４を経由して与えられた２個の１６ビットデータｘ(0)、ｙ(0)は、乗算器５０１によって、それらの積が算出され、補数発生器５０２に送られる。
補数発生器５０２は、制御信号線５１５から入力される値が１の場合には、乗算器５０１から送られてきたデータの２の補数、即ち、符号を反転したデータを加算器５０３に送る。一方、制御信号線５１５から入力される値が０の場合には、補数発生器５０２は、乗算器５０１から送られてきたデータをそのまま加算器５０３に送る。
【０００５】
加算器５０３は、補数発生器５０２から送られてきたデータと、アキュムレータ５０４から読み出したデータとを加算し、その結果を再びアキュムレータ５０４に格納する。
その結果、アキュムレータ５０４には、データ
Ａcc＋ｘ(0)・ｙ(0)  又は
Ａcc−ｘ(0)・ｙ(0)
が格納される。なお、アキュムレータ５０４は、１個の３２ビットデータを記憶するレジスタであり、Ａccは、アキュムレータ５０４に格納されていた初期値である。
【０００６】
以上の積和演算が繰り返されると、アキュムレータ５０４には、データ
Ａcc＋ｘ(0)・ｙ(0)＋ｘ(1)・ｙ(1)＋・・・    又は
Ａcc−ｘ(0)・ｙ(0)−ｘ(1)・ｙ(1)−・・・
が格納される。
このようにして必要な回数の積和演算が終了すると、アキュムレータ５０４に格納されている３２ビットデータは、シフタ５０５によって、その上位と下位の１６ビットデータに２分割され、順次ｘバス５１３に出力される。
【０００７】
以上のように、従来の積和演算装置は、乗算器と加算器とアキュムレータ等を具備することにより、アキュムレータに格納されていた値に乗算結果を加算し、その結果を再びアキュムレータに戻すという動作を繰り返すことによって、積和演算を実現していた。
【０００８】
【発明が解決しようする課題】
しかしながら、従来の積和演算装置では、１組の入力データ（例えば、ｘ(i)とｙ(i)）に対しては１種類の演算結果しか得られない。そのために、同一の入力データに対して加算時の符号だけが異なるような２種類以上の積和演算を求める場合であっても、再び、同一のデータを与えて積和演算を繰り返さなければならなかった。
【０００９】
特に、高速フーリエ変換（ＦＦＴ）でのバタフライ演算に代表される複素演算においては、同一の入力データに対して、加算時の符号が異なる積和演算を行う必要がある。このことを、数式を用いて以下に説明する。
いま、２個の複素数を、Ａ，Ｂ、即ち、
Ａ＝Ａr＋ｊ・Ａi
Ｂ＝Ｂr＋ｊ・Ｂi
とすると、これらの積Ｃ（＝Ｃr＋ｊ・Ｃi）は、次式の通りである。
【００１０】
Ｃr＝Ａr・Ｂr−Ａi・Ｂi
Ｃi＝Ａr・Ｂi＋Ａi・Ｂr
従って、複素数の積和演算においては、次式の演算が必要とされる。
Ｚr＝Ａcc＋Ａr・Ｂr−Ａi・Ｂi
Ｚi＝Ａcc＋Ａr・Ｂi＋Ａi・Ｂr
また、バタフライ演算等においては、次式のような、積の符号を反転させて加算するという演算も必要とされる。
【００１１】
Ｗr＝Ａcc−Ａr・Ｂr＋Ａi・Ｂi
Ｗi＝Ａcc−Ａr・Ｂi−Ａi・Ｂr
ところで、上式におけるＺrとＷr、又はＺiとＷiは、加算する積の符号が異なるだけである。しかし、従来の積和演算装置では、１組の入力データに対しては１種類の演算結果しか得られないために、Ｚr（又はＺi）を算出した後にＷr（又はＷi）を改めて算出しなければならない。そのために、従来の積和演算装置では、複素数の演算処理に時間を要するという問題点があった。また、そのような演算処理の時間を短縮するために、Ｚr（又はＺi）を算出する装置と、Ｗr（又はＷi）を算出する装置とを別個に備える方法も考えられるが、そのような方法では、回路構成に無駄が多くなりコストがかかる。
【００１２】
そこで、本発明はかかる問題点に鑑みてなされたものであり、従来の装置の基本構成部と同じビット幅分の基本構成部であるにもかかわらず、高速フーリエ変換に代表される複素数の積和演算を高速に行うことができる積和演算装置を提供することを目的としている。
【００１３】
【課題を解決するための手段】
上記課題を解決するために本発明は、データバス、１個の乗算器、１個の補数発生器、２個のアキュムレータ、１個のセレクタ、１個の桁上げ制御器並びに２個の加算器からなり、以下の２種類の積和演算を行う構成としている。
１．２ｎビットデータ＋ｎビットデータ＊ｎビットデータ
の積和演算を行う。
２．ｎビットデータ＋ｎビットデータ＊ｎビットデータ  及び
ｎビットデータ−ｎビットデータ＊ｎビットデータ
の積和演算を同時に行う。
【００１４】
【発明の実施の形態】
（請求項ごとの手段と作用）
請求項１記載の積和演算装置は、１個の乗算器、１個の補数発生器、２個（第１及び第２）のアキュムレータ並びに２個（第１及び第２）の加算器からなる積和演算装置であって、前記乗算器は、２個のｎビットデータをかけ算することにより２ｎビットの乗算値を算出し、前記補数発生器は、前記乗算値の２の補数値を算出し、前記第１及び第２のアキュムレータは、それぞれ１個のｎビットデータを格納する領域を有し、前記第１の加算器は、前記第１のアキュムレータに格納されていたｎビットデータを読み出し、その値と前記乗算値の上位ｎビットデータとを加算し、その結果を前記第１のアキュムレータに格納し、前記第２の加算器は、前記第２のアキュムレータに格納されていたｎビットデータを読み出し、その値と前記補数発生器の上位ｎビットデータとを加算し、その結果を前記第２のアキュムレータに格納することを特徴とする。
【００１５】
本装置において、第１及び第２のアキュムレータに格納されていたそれぞれの初期値をＡ1（nビット）、Ａ2（nビット）、本装置に入力された２個のデータをＢ（nビット）、Ｃ（nビット）とすると、本装置による演算の結果、それらアキュムレータが保持する値は以下の通り更新される。
A1(nビット)+B(nビット)*C(nビット) => 第１のアキュムレータ
A2(nビット)-B(nビット)*C(nビット) => 第２のアキュムレータ
続いて、本装置に２個のデータＤ（nビット）、Ｅ（nビット）が入力されると、本装置による演算の結果、前記アキュムレータが保持する値は以下の通り更新される。
【００１６】
A1(nビット)+B(nビット)*C(nビット)+D(nビット)*E(nビット) => 第１のアキュムレータ  A2(nビット)-B(nビット)*C(nビット)-D(nビット)*E(nビット) => 第２のアキュムレータこれにより、従来とほぼ同様の回路構成であるにも拘らず、１組の入力データに対して、２種類の積和演算が同時に実行される。
請求項２記載の積和演算装置は、１個の乗算器、１個の補数発生器、２個（第１及び第２）のアキュムレータ、１個のセレクタ並びに２個（第１及び第２）の加算器からなる積和演算装置であって、前記乗算器は、２個のｎビットデータをかけ算することにより２ｎビットの乗算値を算出し、前記補数発生器は、前記乗算値の２の補数値を算出し、前記第１及び第２のアキュムレータは、それぞれ１個のｎビットデータを格納する領域を有し、前記セレクタは、そのセレクタが有する端子に入力された制御信号に基づいて、前記第１及び第２のアキュムレータのいずれか一方に格納されていたｎビットデータを前記第１の加算器に出力すると共に、他の一方に格納されていたｎビットデータを前記第２の加算器に出力し、前記第１の加算器は、前記セレクタから出力されたｎビットデータと前記乗算値の上位ｎビットデータとを加算し、その結果を前記第１のアキュムレータに格納し、前記第２の加算器は、前記セレクタから出力されたｎビットデータと前記補数発生器の上位ｎビットデータとを加算し、その結果を前記第２のアキュムレータに格納することを特徴とする。
【００１７】
本装置は、請求項１記載の装置における２個の加算器へのデータ入力の直前に、１個のセレクタが付加された構成となっている。このセレクタにより、第１及び第２の加算器は、第１及び第２のアキュムレータのいずれかに格納されたデータに対しても加算することができる。従って、本装置は、請求項１記載の装置が行う上述の単純な積和（積差）演算のみならず、以下の演算も行う。
【００１８】
例えば、本装置において、第１及び第２のアキュムレータに格納されていたそれぞれの初期値をＡ1（nビット）、Ａ2（nビット）、本装置に連続して入力された２組のデータを［Ｂ（nビット）、Ｃ（nビット）］、［Ｄ（nビット）、Ｅ（nビット）］とすると、本装置による演算の結果、それらアキュムレータが保持する値は以下の通り更新される。
【００１９】
A1(nビット)+B(nビット)*C(nビット)-D(nビット)*E(nビット) => 第１のアキュムレータ  A2(nビット)-B(nビット)*C(nビット)+D(nビット)*E(nビット) => 第２のアキュムレータ請求項３記載の積和演算装置は、データバス、１個の乗算器、１個の補数発生器、２個（第１及び第２）のアキュムレータ、１個のセレクタ、１個の桁上げ制御器並びに２個（第１及び第２）の加算器からなる積和演算装置であって、
前記データバスには、２個のｎビットデータを１組とする複数組の入力データが順次与えられ、前記乗算器は、前記データバスを介して１組の入力データが与えられると、その２個のｎビットデータをかけ算することにより２ｎビットの乗算値を算出し、前記補数発生器は、その補数発生器が有する端子に入力された第１の制御信号が第１の状態であるときには、前記乗算値の２の補数値を算出し、その補数値の上位ｎビットデータを前記第１の加算器に出力すると共に、その補数値の下位ｎビットデータを前記第２の加算器に出力し、前記第１の制御信号が第２の状態であるときには、前記乗算値の上位ｎビットデータを前記第１の加算器に出力すると共に、前記乗算値の下位ｎビットデータを前記第２の加算器に出力し、前記第１の制御信号が第３の状態であるときには、前記乗算値の２の補数値を算出し、その補数値の上位ｎビットデータを前記第２の加算器に出力すると共に、前記乗算値の上位ｎビットデータを前記第１の加算器に出力し、前記第１及び第２のアキュムレータは、それぞれ１個のｎビットデータを格納する領域を有し、前記セレクタは、前記第１の制御信号が第１又は第２の状態であるときには、前記第１及び第２のアキュムレータに格納されていたｎビットデータをそれぞれ前記第１及び第２の加算器に出力し、前記第１の制御信号が第３の状態であるときには、そのセレクタが有する端子に入力された第２の制御信号に基づいて、前記第１及び第２のアキュムレータのいずれか一方に格納されたｎビットデータを前記第１の加算器に出力すると共に、他の一方に格納されたｎビットデータを前記第２の加算器に出力し、前記第２の加算器は、前記セレクタから出力されたｎビットデータと前記補数発生器から出力されたｎビットデータとを加算し、その結果を前記第２のアキュムレータに格納すると共に、加算による桁上げについてのデータを前記桁上げ制御器に出力し、前記桁上げ制御器は、前記第１の制御信号が第１又は第２の状態であるときには、前記桁上げについてのデータを前記第１の加算器に出力し、前記第１の制御信号が第３の状態であるときには、前記桁上げが生じなかったことを示すデータを前記第１の加算器に出力し、前記第１の加算器は、前記セレクタから出力されたｎビットデータと前記補数発生器から出力されたｎビットデータと前記桁上げ制御器から出力されたデータとを加算し、その結果を前記第１のアキュムレータに格納することを特徴とする積和演算装置。
【００２０】
本装置は、請求項２記載の装置にさらに、桁上げ制御器等が付加された構成となっている。この桁上げ制御器により、第２の加算器において生じた桁上げデータが第１の加算器に入力される。従って、本装置は、請求項２記載の装置が行う上述の演算のみならず、以下の通り、２ｎビットの精度による積和演算も行う。例えば、本装置において、第１及び第２のアキュムレータに跨って格納されていた初期値をＡ（2nビット）、本装置に連続して入力された２組のデータを［Ｂ（nビット）、Ｃ（nビット）］、［Ｄ（nビット）、Ｅ（nビット）］とすると、本装置による演算の結果、それらアキュムレータが保持する値（2nビット）は以下の通り更新される。
【００２１】
A(2nビット)+B(nビット)*C(nビット)+D(nビット)*E(nビット)  又は、
A(2nビット)-B(nビット)*C(nビット)-D(nビット)*E(nビット)
（実施の形態）
以下、本発明の実施形態について図面を用いて詳細に説明する。
図１は、本発明の実施形態に係る積和演算装置の構成を示すブロック図である。
【００２２】
本装置は、乗算器１０１、補数発生器１０２、加算器１０３、１０４、アキュムレータ１０５、１０６、桁上げ制御器１０７、セレクタ１０８、２回路セレクタ１０９及びシフタ１１０から構成される。本装置は、基本的には２個の１６ビットデータを処理する構成となっており、その点において従来の装置と同様である。即ち、ｘバス１３２、ｙバス１３３及びデータ信号線１１１〜１１７、１１９、１２１〜１２４、１２６、１２７、１３１は１６ビット幅とし、データ信号線１２８、１２９は１ビット幅とし、制御信号線１１８は２ビット幅とし、制御信号線１２０、１２５、１３０は１ビット幅としている。なお、各構成部１０１〜１１０には、演算やデータ入出力の同期のための制御信号が入力されているが、図１においては、それらの信号線の表示を省略している。
【００２３】
乗算器１０１は、ｘバス１３２及びｙバス１３３を介して入力された２個の１６ビットデータの積を算出し、得られた３２ビットデータの上位１６ビットデータをデータ信号線１１３に出力し、下位１６ビットデータをデータ信号線１１４に出力する。
補数発生器１０２は、制御信号線１１８から入力される値に応じて、データ信号線１１３、１１４から送られてきた３２ビットデータをそのまま、又は、その２の補数を算出し、データ信号線１１５〜１１７に出力する。
【００２４】
図２は、補数発生器１０２の詳細な構成を示すブロック図である。補数発生器１０２は、インバータ１０２ａ、１０２ｂ、インクリメンタ１０２ｃ、セレクタ１０２ｄ、１０２ｅ、１０２ｆ、セレクタ駆動器１０２ｇから構成される。なお、セレクタ駆動器１０２ｇの入出力信号を除く他の信号線は、全て１６ビット幅である。
【００２５】
データ信号線１１３、１１４から入力された乗算結果は、インバータ１０２ａ、１０２ｂで各ビットの論理が反転された後、インクリメンタ１０２ｃで”１”が加算されることによって、乗算結果の２の補数値が求められる。算出された２の補数値の上位１６ビットデータはセレクタ１０２ｄ、１０２ｅに出力され、その下位１６ビットデータはセレクタ１０２ｆに出力される。セレクタ駆動器１０２ｇは、制御信号線１１８からのデータをデコードすることにより、各セレクタ１０２ｄ、１０２ｅ、１０２ｆを制御する。
【００２６】
図３は、制御信号線１１８から入力される値とデータ信号線１１５〜１１７に出力されるデータとの関係を表す図である。この図から判るように、データ信号線１１５、１１６には、乗算器１０１の出力値の上位１６ビットデータ、又は乗算器１０１の出力値の２の補数の上位１６ビットデータが出力される。また、データ信号線１１６には、乗算器１０１の出力値の下位１６ビットデータ、又は乗算器１０１の出力値の２の補数の下位１６ビットデータが出力される。
【００２７】
セレクタ１０８は、制御信号線１２０から入力される値に応じて、データ信号線１１６又はデータ信号線１１７のいずれかのデータをデータ信号線１１９に出力する。
２回路セレクタ１０９は、制御信号線１２５から入力される値に応じて、データ信号線１２１及び１２２から送られてきた１６ビットデータを振り分けてデータ信号線１２３及び１２４に出力する。図４は、制御信号線１２５から入力される値とデータ信号線１２３及び１２４に出力されるデータとの関係を表す図である。
【００２８】
加算器１０４は、データ信号線１１９及び１２４から送られてきた各１６ビットデータを加算し、その結果をデータ信号線１２７に出力する。ここで、加算した結果、桁上げが生じた場合には、加算器１０４は、キャリーデータとして”１”をデータ信号線１２８に１に出力する。
桁上げ制御器１０７は、制御信号線１３０からの値が”１”のときにデータ信号線１２８から出力されたキャリーデータをデータ信号線１２９に通過させ、”０”のときに遮断する。
【００２９】
加算器１０３は、データ信号線１１５及び１２３から送られてきた各１６ビットデータと桁上げ制御器１０７からのキャリデータとの合計値を算出し、その結果をデータ信号線１２６に出力する。
アキュムレータ１０５及び１０６は、それぞれ１６ビットデータを記憶するレジスタであり、記憶している値は、２回路セレクタ１０９及びシフタ１１０によって読み出される。
【００３０】
シフタ１１０は、必要な回数の積和演算が終了した時に、アキュムレータ１０５及び１０６に記憶されている各１６ビットデータを順次ｘバス１３２に出力する。
次に、以上のように構成された積和演算装置の動作について説明する。ここでは、従来の装置が行っていた演算、即ち、単純な積和演算を行う場合（第１の動作例）と、複素演算を行う場合（第２の動作例）とに分けて説明する。
（第１の動作例）
まず、本装置が、単純な積和演算を行う場合の動作について説明する。ここで、単純な積和演算とは、以下の式に示す演算をいう。
A(32ビット)+B(16ビット)*C(16ビット) => A(32ビット)
即ち、１６ビットデータＢと１６ビットデータＣが与えられると、本装置は、それらの積Ｂ＊Ｃを算出し、前に記憶していた３２ビットデータＡに加算する。
【００３１】
本動作例においては、制御信号線１１８には”００”が、制御信号線１２５には”０”が、制御信号線１３０には”１”が入力されているとする。従って、３２ビットデータの乗算結果Ｂ＊Ｃに対して、加算器１０３は上位１６ビットの加算器、加算器１０４は下位１６ビットの加算器、アキュムレータ１０５は上位１６ビットのアキュムレーター、アキュムレータ１０６は下位１６ビットのアキュムレーターとして動作する。具体的には、以下の動作により積和演算が行われる。
【００３２】
先ず、データ信号線１１１及び１１２を介して、それぞれ１６ビットデータＢ及びＣが乗算器１０１に入力される。
乗算器１０１は、データＢとデータＣとの積を算出し、得られた乗算結果Ｂ＊Ｃ（３２ビットデータ）の上位１６ビットをデータ信号線１１３に、下位１６ビットをデータ信号線１１４に出力する。
【００３３】
補数発生器１０２は、制御信号線１１８から入力される値が”００”であるので、データ信号線１１３から入力された乗算結果の上位１６ビットデータをそのままデータ信号線１１５に出力し、同様に、データ信号線１１４から入力された乗算結果の下位１６ビットデータをそのままデータ信号線１１７に出力する。
セレクタ１０８は、制御信号線１２０から入力される値に従って、データ信号線１１７から入力されたデータをデータ信号線１１９に出力する。
【００３４】
２回路セレクタ１０９は、制御信号線１２５から入力される値が”０”であるので、データ信号線１２１から入力されるデータをデータ信号線１２３に出力し、データ信号線１２２から入力されるデータをデータ信号線１２４に出力する。加算器１０４は、データ信号線１１９から入力された乗算結果Ｂ＊Ｃの下位１６ビットデータとデータ信号線１２４を介して入力されたアキュムレータ１０６での保持値（３２ビットデータＡの下位１６ビット）との加算を実行し、その加算結果をデータ信号線１２７を介してアキュムレータ１０６に書き込むと共に、桁上げデータをデータ信号線１２８に出力する。その結果、アキュムレータ１０６には、目的とする積和演算（A(32ビット)+B(16ビット)*C(16ビット)）の下位１６ビットデータが格納される。
【００３５】
加算器１０３は、データ信号線１１５から入力された乗算結果Ｂ＊Ｃの上位１６ビットデータとデータ信号線１２３を介して入力されたアキュムレータ１０５での保持値（３２ビットデータＡの上位１６ビット）と桁上げ制御器１０７を介して入力された加算器１０４からの桁上げデータとの加算を実行し、その加算結果をデータ信号線１２６を介してアキュムレータ１０５に書き込む。その結果、アキュムレータ１０５には、目的とする積和演算（A(32ビット)+B(16ビット)*C(16ビット)）の上位１６ビットデータが格納される。
【００３６】
以上のようにして、目的とする積和演算が終了した。なお、以上の動作を繰り返すことにより、連続した積和演算が実行されることは言うまでもない。
アキュムレータ１０５及び１０６に記憶されている積和演算の結果は、シフタ１１０を経由して順次ｘバス１３２に出力される。
（第２の動作例）
次に、本装置が複素演算を行う場合の動作について説明する。ここで、複素演算とは、以下に示される２つ演算を同時に行うことをいう。
【００３７】
第１の演算：A(16ビット)+B(16ビット)*C(16ビット)+D(16ビット)*E(16ビット) => 16ビットデータ
第２の演算：A(16ビット)-B(16ビット)*C(16ビット)-B(16ビット)*C(16ビット) => 16ビットデータ
即ち、１６ビットデータＢと１６ビットデータＣが与えられると、本装置は、それらの積Ｂ＊Ｃを算出し、その結果の上位１６ビットを前に記憶していた１６ビットデータＡに加算すると共に、別に減算も行う。続いて与えられた１６ビットデータＣと１６ビットデータＤについても同様の演算を繰り返す。
【００３８】
本動作例においては、制御信号線１１８には”１０”が、制御信号線１３０には”０”が入力されているとする。一方、制御信号線１２５には、入力データＢ，Ｃに対しては”１”が、入力データＤ，Ｅに対しては”０”が入力される。従って、３２ビットデータの乗算結果Ｂ＊Ｃ、Ｄ＊Ｅに対して、加算器１０３は上位１６ビットの加算器、加算器１０４は上位１６ビットの減算器、アキュムレータ１０５は上位１６ビットのアキュムレーター、アキュムレータ１０６は上位１６ビットのアキュムレーターとして動作する。具体的には、以下の動作により複素演算が行われる。
【００３９】
先ず、データ信号線１１１及び１１２を介して、それぞれ１６ビットデータＢ及びＣが乗算器１０１に入力される。
乗算器１０１は、第１の動作例と同様に、データＢとデータＣとの積を算出し、得られた乗算結果Ｂ＊Ｃ（３２ビットデータ）の上位１６ビットをデータ信号線１１３に、下位１６ビットをデータ信号線１１４に出力する。
【００４０】
補数発生器１０２は、制御信号線１１８から入力される値が”１０”であるので、データ信号線１１３から入力された乗算結果の上位１６ビットデータをそのままデータ信号線１１５に出力し、一方、乗算結果の２の補数の上位１６ビットデータをそのままデータ信号線１１６に出力する。
セレクタ１０８は、制御信号線１２０から入力される値に従って、データ信号線１１６から入力されたデータをデータ信号線１１９に出力する。
【００４１】
２回路セレクタ１０９は、制御信号線１２５から入力される値が”１”であるので、データ信号線１２１から入力されるデータをデータ信号線１２４に出力し、データ信号線１２２から入力されるデータをデータ信号線１２３に出力する。加算器１０３は、データ信号線１１５から入力された乗算結果Ｂ＊Ｃの上位１６ビットデータとデータ信号線１２３を介して入力されたアキュムレータ１０６での保持値（１６ビットデータＡ）との加算を実行し、その加算結果をデータ信号線１２６を介してアキュムレータ１０５に書き込む。その結果、アキュムレータ１０５には、上記第１の演算の前半（A(16ビット)+B(16ビット)*C(16ビット)）に相当する演算結果が格納される。
【００４２】
同様にして、加算器１０４は、データ信号線１１９から入力された乗算結果Ｂ＊Ｃの２の補数の上位１６ビットデータとデータ信号線１２４を介して入力されたアキュムレータ１０５での保持値（１６ビットデータＡ）との加算を実行し、その加算結果をデータ信号線１２７を介してアキュムレータ１０６に書き込む。その結果、アキュムレータ１０６には、上記第２の演算の前半（A(16ビット)-B(16ビット)*C(16ビット)）に相当する演算結果が格納される。
【００４３】
続いて、データ信号線１１１及び１１２を介して、それぞれ１６ビットデータＤ及びＥが乗算器１０１に入力される。これ以降の各部の動作は、入力データＢ，Ｃが与えられた場合とほぼ同様である。
但し、制御信号線１２５から入力される値が”０”であるので、２回路セレクタ１０９の動作だけが異なる。即ち、２回路セレクタ１０９は、データ信号線１２１から入力されるデータをデータ信号線１２３に出力し、データ信号線１２２から入力されるデータをデータ信号線１２４に出力する。
【００４４】
その結果、アキュムレータ１０５には、上記第１の演算結果（A(16ビット)+B(16ビット)*C(16ビット)+D(16ビット)*E(16ビット)）が格納され、一方、アキュムレータ１０６には、上記第２の演算結果（A(16ビット)-B(16ビット)*C(16ビット)-D(16ビット)*E(16ビット)）が格納される。
以上のようにして、本装置によれば、１組の入力データに対して第１の演算と第２の演算が同時に行われ、複素演算に必要とされる２種類のデータが同時に算出された。即ち、図１と図５とを比較して明らかなように、本装置は、従来の装置と同じビット幅分の乗算器、加算器、アキュムレータ等から構成されているにもかかわらず、従来の装置で２回の演算処理が必要とされた演算を、１回の演算処理で行っている。
【００４５】
なお、アキュムレータ１０５及び１０６に記憶されている複素演算の結果は、シフタ１１０を経由して順次ｘバス１３２に出力される。
以上、本発明に係る積和演算装置について、実施形態に基づいて説明したが、本発明はこの実施形態に限られないことは勿論である。即ち、
（１）本実施形態における積和演算装置は、１６ビット幅の入力データを演算するものであったが、このビット幅に限定されるものではない。例えば、第１の動作例において、３２ビット幅の入力データに対して、６４ビットからなる積和演算結果を算出するものであってもよい。
（２）第２の動作例では、
Ａ＋Ｂ＊Ｃ＋Ｄ＊Ｅ、及び、Ａ−Ｂ＊Ｃ−Ｄ＊Ｅ
の演算例を示したが、制御信号線１２５に与える値を変えることにより、
Ａ−Ｂ＊Ｃ＋Ｄ＊Ｅ、及び、Ａ＋Ｂ＊Ｃ−Ｄ＊Ｅ
等の演算を行わせることもできる。これによって、バタフライ演算等の多様な複素演算に対応した演算が可能となる。
【００４６】
【発明の効果】
以上の説明から明らかなように、請求項１記載の積和演算装置によれば、バタフライ演算等に必要とされる２種類の積和演算が同時に実行される。即ち、本装置は従来の装置の基本構成部と同じビット幅分の基本構成部から構成されているにも拘らず、従来の装置で２回の処理が必要とされた演算が、本装置においては１回の処理によって終了する。これによって、従来の装置にわずかな回路を付加するだけで、高速フーリエ変換に代表される積和演算が短時間で終了するという効果がある。
【００４７】
請求項２記載の積和演算装置によれば、請求項１記載の装置が行うような２個のデータの乗算値の加算（減算）を繰り返すだけでなく、加算（減算）と減算（加算）を交互に繰り返すような積和演算が可能となる。これによって、従来の装置で２回の処理が必要とされた複素演算が、本装置においては１回の処理によって終了する。
【図面の簡単な説明】
【図１】本発明の実施形態に係る積和演算装置の構成を示すブロック図である。
【図２】同装置の補数発生器１０２の詳細な構成を示すブロック図である。
【図３】同装置の補数発生器１０２への制御信号線１１８の値と補数発生器１０２からの出力との関係を示す図である。
【図４】同装置の２回路セレクタ１０９への制御信号線１２５の値と２回路セレクタ１０９からの出力との関係を示す図である。
【図５】従来の積和演算装置の構成を示すブロック図である。
【符号の説明】
１０１    乗算器
１０２    補数発生器
１０３、１０４    加算器
１０５、１０６    アキュムレータ
１０７    桁上げ制御器
１０８    セレクタ
１０９    ２回路セレクタ
１１０    シフタ
【図１】
0003696307.tif 000002
【図２】
0003696307.tif 000003
【図３】
0003696307.tif 000004
【図４】
0003696307.tif 000005
【図５】
0003696307.tif 000006