JP2009245407A - 複素数の積和演算装置および積和演算方法 - Google Patents
複素数の積和演算装置および積和演算方法 Download PDFInfo
- Publication number
- JP2009245407A JP2009245407A JP2008094553A JP2008094553A JP2009245407A JP 2009245407 A JP2009245407 A JP 2009245407A JP 2008094553 A JP2008094553 A JP 2008094553A JP 2008094553 A JP2008094553 A JP 2008094553A JP 2009245407 A JP2009245407 A JP 2009245407A
- Authority
- JP
- Japan
- Prior art keywords
- bit
- bits
- input
- sign
- order
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
【課題】 バタフライ演算を効率的に行う
【解決手段】 実数部Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)、虚数部Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なるバタフライ演算を行う。X(Re)をビットa列、X(Im)をビットb列、Y(Re)をビットc列、Y(Im)をビットd列、Z(Re)をビットe列、Z(Im)をビットf列で与え、図示の式に基づく演算を行う。「(K・M)+(L・Mbar)」なる形式からなるγ1〜γ6の積和演算を、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いて実行する。虚数部Q(Im)についても同様の式を用い、セレクタを用いた演算を行う。
【選択図】図23
【解決手段】 実数部Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)、虚数部Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なるバタフライ演算を行う。X(Re)をビットa列、X(Im)をビットb列、Y(Re)をビットc列、Y(Im)をビットd列、Z(Re)をビットe列、Z(Im)をビットf列で与え、図示の式に基づく演算を行う。「(K・M)+(L・Mbar)」なる形式からなるγ1〜γ6の積和演算を、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いて実行する。虚数部Q(Im)についても同様の式を用い、セレクタを用いた演算を行う。
【選択図】図23
Description
本発明は、複素数の積和演算装置および積和演算方法に関し、特に、可変点数FFT演算装置におけるCooley-Tukey型Radix-2バタフライ演算の実行に適した複素数の積和演算を行う技術に関する。
離散フーリエ変換における計算を三角関数の周期性を利用して高速に実行する手法として、FFTの手法が様々な分野において利用されている。特に、最近では、画像処理、音声処理、映像処理の分野など、いわゆるマルチメディアを取り扱う分野において、FFTの手法が頻繁に利用されるようになってきており、携帯電話機、デジタルカメラ、DVDレコーダといった民生機器においても広く利用される技術になっている。
FFTは、三角関数を用いた演算を必要とする手法であるため、複素数に対する複雑な演算が必要になる。具体的には、一般に「バタフライ演算」と呼ばれている積和演算を実行する必要がある。たとえば、下記の特許文献1には、バタフライ演算回路を用いたFFT演算装置の一例が開示されている。特に、可変点数FFT演算装置では、下記の非特許文献1に詳述されているとおり、Cooley-Tukey型Radix-2バタフライ演算が広く用いられるようになってきており、同文献には、このようなバタフライ演算を行うための具体的な回路構成が示されている。また、下記の非特許文献2には、このようなバタフライ演算において、複素乗算回数を削減する手法が開示され、下記の非特許文献3には、パイプライン構成を用いてバタフライ演算を高速化する手法が開示されている。
特開平8−137832号公報
荒木健悟,佐々木徹,溝口大介,長島雲兵,三好市郎,棚橋隆彦,"FPGAを用いた3次元FFT専用演算回路の開発",第18回数値流体力学,2004.
Jae H. Beak, Byung S. Son, Byung G. Jo, Myung H. Sunwoo, and Seung K. Oh, "A Continuous Flow Mixed-Radix FFT Architecture With An In-Place Algorithm." IEEE Transaction on Circuits and Systems. II, vol. 2, pp. 133-136, May, 2003.
Chang-Yeh Wang, "Hybrid Word-Length Optimization Methods of Piplined FFT Processors," IEEE Transaction on Computers, vol. 56, No. 8, pp. 1105-1118, August, 2007.
近年、FFT演算装置は、様々な民生機器に広く利用されるようになってきており、FFTの演算処理を専門に行うシステムLSIとして、これらの機器に組み込まれている。このシステムLSIは、前述した「バタフライ演算」を実行するために、多数の加算器(減算器)と乗算器とを含む複素数の積和演算装置を構成している。このため、回路構成が複雑になり、演算時間も長くかかるという問題が生じている。特に、乗算器を用いた論理回路は、LSI上での回路占有面積を広く必要とする上、桁上げ処理が必要になるため、下位ビットの演算が完了するまで、上位ビットの演算を待つ必要があり、演算時間が長くかかることになる。このように、従来の積和演算装置には、小型化および高速化を図ることが困難であるという問題がある。
そこで本発明は、「バタフライ演算」をより効率的に行うことが可能な複素数の積和演算装置および積和演算方法を提供することを目的とする。
(1) 本発明の第1の態様は、複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置において、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めるようにしたものである。
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めるようにしたものである。
(2) 本発明の第2の態様は、複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置において、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めるようにしたものである。
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めるようにしたものである。
(3) 本発明の第3の態様は、複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置において、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めるとともに、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めるようにしたものである。
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を設け、
第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めるとともに、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めるようにしたものである。
(4) 本発明の第4の態様は、上述の第1〜第3の態様に係る複素数の積和演算装置において、
第2の演算部が、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行うために、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを有するようにしたものである。
第2の演算部が、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行うために、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを有するようにしたものである。
(5) 本発明の第5の態様は、上述の第1の態様に係る複素数の積和演算装置において、
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
(6) 本発明の第6の態様は、上述の第2の態様に係る複素数の積和演算装置において、
第2の演算部が、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
第2の演算部が、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
(7) 本発明の第7の態様は、上述の第3の態様に係る複素数の積和演算装置において、
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有するようにしたものである。
(8) 本発明の第8の態様は、上述の第1〜第7の態様に係る複素数の積和演算装置をFFT演算装置に組み込み、第m番目の入力信号Amを複素数X、第(m+1)番目の入力信号Am+1を複素数Y、回転因子Wkを複素数Zとして当該積和演算装置に与えることにより、バタフライ演算を実行するようにしたものである。
(9) 本発明の第9の態様は、実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式で示される実数部Q(Re)をもった複素数Qを求める演算を行う方法において、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
(10) 本発明の第10の態様は、上述の第9の態様に係る複素数の積和演算方法において、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
(11) 本発明の第11の態様は、実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式で示される虚数部Q(Im)をもった複素数Qを求める演算を行う方法において、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して虚数部Q(Im)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して虚数部Q(Im)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
(12) 本発明の第12の態様は、上述の第11の態様に係る複素数の積和演算方法において、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
(13) 本発明の第13の態様は、実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式で示される実数部Q(Re)およびQ(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式で示される虚数部Q(Im)をもった複素数Qを求める演算を行う方法において、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)および虚数部Q(Im)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)および虚数部Q(Im)を求める段階と、
を行い、
各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにしたものである。
(14) 本発明の第14の態様は、上述の第13の態様に係る複素数の積和演算方法において、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いるようにしたものである。
本発明に係る複素数の積和演算装置および積和演算方法によれば、「バタフライ演算」を構成する積和演算の一部をセレクタを利用して行うことができるようにしたため、回路構成を単純化することができ、LSI上での回路占有面積を低減することができる。また、セレクタを利用したため、桁上げ伝播処理を削減することができ、並列処理による高速化が可能になる。かくして、本発明によれば、「バタフライ演算」をより効率的に行うことが可能になる。
以下、本発明を図示する実施形態に基づいて説明する。
<<< §1.Cooley-Tukey型Radix-2バタフライ演算 >>>
図1は、一般に、「Cooley-Tukey型Radix-2バタフライ演算」と呼ばれている演算を行うための積和演算装置の構成を示すブロック図である。この積和演算装置は、複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める機能をもった装置である。なお、本願にいう「積和演算」とは、文字どおり積と和を求める演算を意味するものであるが、ここでいう「和」には、「正の数と負の数との和」すなわち「差」も含まれる。要するに、本願にいう「積和演算」とは、乗算、加算、減算からなる演算を意味する。
図1は、一般に、「Cooley-Tukey型Radix-2バタフライ演算」と呼ばれている演算を行うための積和演算装置の構成を示すブロック図である。この積和演算装置は、複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める機能をもった装置である。なお、本願にいう「積和演算」とは、文字どおり積と和を求める演算を意味するものであるが、ここでいう「和」には、「正の数と負の数との和」すなわち「差」も含まれる。要するに、本願にいう「積和演算」とは、乗算、加算、減算からなる演算を意味する。
演算対象となる数X,Y,Zおよび演算結果として得られる数P,Qは、いずれも複素数であるので、実質的な演算を行う上では、それぞれを実数部(Re)と虚数部(Im)とに分けた取り扱いがなされる。ここでは、説明の便宜上、複素数Xの実数部をX(Re)、虚数部をX(Im)とし、複素数Yの実数部をY(Re)、虚数部をY(Im)とし、複素数Zの実数部をZ(Re)、虚数部をZ(Im)とし、複素数Pの実数部をP(Re)、虚数部をP(Im)とし、複素数Qの実数部をQ(Re)、虚数部をQ(Im)とする。
図示のとおり、第1の入力部10は、複素数Xの実数部X(Re)および虚数部X(Im)を入力する構成要素であり、第2の入力部20は、複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する構成要素であり、第3の入力部30は、複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する構成要素である。一方、図に一点鎖線で囲って示す第1の演算部40および第2の演算部50は、入力された複素数X,Y,Zに基づく演算を行い、新たな複素数P,Qを求める構成要素である。また、第1の出力部60は、第1の演算部40によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する構成要素であり、第2の出力部70は、第2の演算部50によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する構成要素である。各入力部10,20,30および各出力部60,70は、レジスタによって構成することができる。
第1の演算部40は、図示のとおり、2つの加算処理回路41,42によって構成されている。加算処理回路41は、X(Re)+Y(Re)=P(Re)なる演算によって、複素数Pの実数部P(Re)を求め、第1の出力部60に与える機能を果たす。また、加算処理回路42は、X(Im)+Y(Im)=P(Im)なる演算によって、複素数Pの虚数部P(Im)を求め、第1の出力部60に与える機能を果たす。このように、第1の演算部40は、単なる加算処理を行う要素であり、その構成は比較的単純である。
これに対して、第2の演算部50が行う演算処理は、加算、減算、乗算の組み合わせとなり、やや複雑である。まず、減算処理回路51により、X(Re)−Y(Re)なる減算が行われ、減算処理回路52により、X(Im)−Y(Im)なる減算が行われる。そして、乗算処理回路53では、(X(Re)−Y(Re))・Z(Re)なる乗算結果が求められ、乗算処理回路54では、(X(Im)−Y(Im))・Z(Im)なる乗算結果が求められ、最後に、減算処理回路55によって、両者の差、すなわち、(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)が求められ、この差が、複素数Qの実数部Q(Re)として、第2の出力部70に与えられる。
一方、乗算処理回路56では、(X(Re)−Y(Re))・Z(Im)なる乗算結果が求められ、乗算処理回路57では、(X(Im)−Y(Im))・Z(Re)なる乗算結果が求められ、最後に、加算処理回路58によって、両者の和、すなわち、(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)が求められ、この和が、複素数Qの虚数部Q(Im)として、第2の出力部70に与えられる。
結局、第1の演算部40は、図2上段の(式1)に示すとおり、複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する機能を果たす。同様に、第2の演算部50は、図2下段の(式2)に示すとおり、複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する機能を果たす。
このような演算が、一般に、「バタフライ演算」と呼ばれているのは、図1の第2の演算部50内に示されている矢印の交差形状が、「羽を広げた蝶」に似ているためである。このような「バタフライ演算」を含む積和演算は、FFT演算などで頻繁に利用される演算であり、特に、図1に示す積和演算は、CooleyとTukeyによって提案された基数2のバタフライ演算であるため、一般に、「Cooley-Tukey型Radix-2バタフライ演算」と呼ばれている。
前掲の非特許文献1などに記載があるとおり、この「Cooley-Tukey型Radix-2バタフライ演算」は、可変点数FFT演算に広く利用されている。具体的には、FFTの処理対象となる第m番目の入力信号Amを複素数X、第(m+1)番目の入力信号Am+1を複素数Y、回転因子Wkを複素数Zとして、図1に示す積和演算装置に与え、バタフライ演算を実行させることにより、FFTに必要な変換処理を行うことができる。したがって、この図1に示す積和演算装置を利用してFFT演算装置を構成することが可能になる。前述したとおり、このようなFFT演算装置は、画像処理、音声処理、映像処理の分野などに広く利用することができ、当該FFT演算装置を組み込んだシステムLSIは、携帯電話機、デジタルカメラ、DVDレコーダといった民生機器においても広く利用されている。
<<< §2.符号を考慮した一般的なビット演算 >>>
さて、図1に示す積和演算装置は、実際には、デジタル回路によって構成され、その具体的な演算処理は、二進数で表現されたデジタルデータに対して行われることになる。たとえば、各複素数の実数部(Re)および虚数部(Im)をそれぞれ16ビットの精度で表現した場合、複素数X,Y,Zは、いずれも32ビットのデジタルデータとして与えられることになる。一方、演算結果として得られる複素数P,Qの論理的な精度は、複素数X,Y,Zの精度よりも高くなる。これは、乗算処理により、有効桁数が増加するためである。
さて、図1に示す積和演算装置は、実際には、デジタル回路によって構成され、その具体的な演算処理は、二進数で表現されたデジタルデータに対して行われることになる。たとえば、各複素数の実数部(Re)および虚数部(Im)をそれぞれ16ビットの精度で表現した場合、複素数X,Y,Zは、いずれも32ビットのデジタルデータとして与えられることになる。一方、演算結果として得られる複素数P,Qの論理的な精度は、複素数X,Y,Zの精度よりも高くなる。これは、乗算処理により、有効桁数が増加するためである。
ただ、実用上は、得られた演算結果のうち、必要な有効桁数に相当する部分のみを複素数P,Qとして出力するようにすればよい。たとえば、図1に示す積和演算装置において、複素数X,Y,Zの実数部(Re)および虚数部(Im)をそれぞれ16ビットのデータとして与え、演算結果として得られる複素数P,Qも同じ精度で十分である場合には、第1の出力部60は、得られた複素数Pの実数部P(Re)および虚数部P(Im)のうち、それぞれ上位16ビットの部分を出力すれば足り、第2の出力部70は、得られた複素数Qの実数部Q(Re)および虚数部Q(Im)のうち、それぞれ上位16ビットの部分を出力すれば足りる。
一般的なFFT演算の場合、演算対象となる入力信号は符号をもった数値で示される。したがって、このFFT演算をデジタルデータを用いて実行する場合、符号付きのデジタルデータを用い、符号を考慮したビット演算を行う必要がある。そこで、ここでは、符号を考慮した一般的なビット演算を簡単に説明しておく。
まず、デジタルデータにおける一般的な負数表現について述べる。図3は、2の補数表現により負数を表現する方法を説明する図である。図3の左側の表は、十進表現による数値と二進表現による数値との対応を示している。図示のとおり、4ビットの二進数を用いることにより、0を含めて+7〜−8までの16通りの数値を表現することができる。正の数の二進表現は、「0000」に順に1を加えてゆくことにより行うことができ、負の数の二進表現は、「0000」から順に1を減じてゆくことにより行うことができる。このような負数の表現方法は、「2の補数表現」と呼ばれており、デジタルデータでの一般的な負数の表現方法となっている。
図3の右側には、正の数の各ビットと負の数の各ビットとの対応関係が示されている。すなわち、正の数「A」を4ビットの羅列「a3a2a1a0」で表わした場合、負の数「−A」は、この4ビット「a3a2a1a0」をすべて論理反転させた後に1を加えた二進数として表現されることになる。たとえば、「+7」の二進表現は、「0111」であるので、「−7」の二進表現は、「0111」の各ビットをすべて反転させて得られる「1000」に、1を加えた「1001」ということになる。絶対値が同じ正の数と負の数は、二進表現した場合、常に上述した関係が成り立つ。
図3の左側の表を見れば明らかなように、負の数を二進表現すると、その最上位ビットは必ず「1」になる。別言すれば、符号をもった二進数の場合、最上位ビットは符号を示す「符号部」、それ以外のビットは絶対値を示す「非符号部」として認識することができる。図示のように、全4ビットから構成される符号をもった二進数の場合、一番左の1ビットが「符号部」、残りの3ビットが「非符号部」ということになる。「符号部」が「0」であれば、その二進数は0または正の数であり、「符号部」が「1」であれば、その二進数は負の数である。
図4は、符号をもった任意の数値Aを、nビットからなる二進数のビット値を用いて定義した式を示す図である。この図4の上段には、まず、(式3)として、
A=−an−12n−1+an−22n−2+...+a121+a020
=−an−12n−1+Σi=0〜n-2ai2i
なる式が示されている(なお、本願特許請求の範囲および明細書本文では、電子出願の制約上、総和を示す算術演算子Σの下に記載すべきパラメータαおよびΣの上に記載すべきパラメータβを、Σα〜βのような下付き添字として記載することにする)。この(式3)におけるan−1,an−2,...,a1,a0は、数値Aをnビットからなる二進数として表現した場合の各ビット(0または1)に相当するものであり、an−1が最上位ビット(1番左側のビット)、a0が最下位ビット(1番右側のビット)である。上述したとおり、最上位ビットは符号部を構成することになるため、(式3)の右辺第1項である「−an−12n−1」は符号部となり、残りの項である「Σi=0〜n-2ai2i」は非符号部となる。
A=−an−12n−1+an−22n−2+...+a121+a020
=−an−12n−1+Σi=0〜n-2ai2i
なる式が示されている(なお、本願特許請求の範囲および明細書本文では、電子出願の制約上、総和を示す算術演算子Σの下に記載すべきパラメータαおよびΣの上に記載すべきパラメータβを、Σα〜βのような下付き添字として記載することにする)。この(式3)におけるan−1,an−2,...,a1,a0は、数値Aをnビットからなる二進数として表現した場合の各ビット(0または1)に相当するものであり、an−1が最上位ビット(1番左側のビット)、a0が最下位ビット(1番右側のビット)である。上述したとおり、最上位ビットは符号部を構成することになるため、(式3)の右辺第1項である「−an−12n−1」は符号部となり、残りの項である「Σi=0〜n-2ai2i」は非符号部となる。
(式3)の下方には、n=4の場合、すなわち、数値Aを4ビットからなる二進数として表現した場合のビット構成図が示されている。この場合、最上位ビットの「a3」が符号部となり、残りの3ビットの部分「a2a1a0」が非符号部となる。この(式3)の意味合いは、具体的な数値を当てはめてみれば容易に理解できよう。たとえば、A=+7を二進表現にすると、図3の表から「0111」である。すなわち、a3=0,a2=1,a1=1,a0=1となるが、これを(式3)において、n=4とした式に当てはめてみれば、
A=−0・23+1・22+1・21+1・20=+7
となる(・は積を示す演算子)。一方、負の数の場合、A=−7を二進表現にすると、図3の表から「1001」であるから、a3=1,a2=0,a1=0,a0=1となるが、これを(式3)において、n=4とした式に当てはめてみれば、
A=−1・23+0・22+0・21+1・20=−7
となる。符号部の項にマイナスがついているのは、このように負の数の場合に、正しい値が得られるようにするためである。
A=−0・23+1・22+1・21+1・20=+7
となる(・は積を示す演算子)。一方、負の数の場合、A=−7を二進表現にすると、図3の表から「1001」であるから、a3=1,a2=0,a1=0,a0=1となるが、これを(式3)において、n=4とした式に当てはめてみれば、
A=−1・23+0・22+0・21+1・20=−7
となる。符号部の項にマイナスがついているのは、このように負の数の場合に、正しい値が得られるようにするためである。
結局、図1に示す積和演算装置において、3つの複素数X,Y,Zの実数部(Re)および虚数部(Im)を、それぞれnビットの符号付きデジタルデータで表現すると、図5の(式4)に示すように、
複素数Xの実数部: X(Re)=−an−12n−1+Σi=0〜n-2ai2i
複素数Xの虚数部: X(Im)=−bn−12n−1+Σi=0〜n-2bi2i
複素数Yの実数部: Y(Re)=−cn−12n−1+Σi=0〜n-2ci2i
複素数Yの虚数部: Y(Im)=−dn−12n−1+Σi=0〜n-2di2i
複素数Zの実数部: Z(Re)=−en−12n−1+Σi=0〜n-2ei2i
複素数Zの虚数部: Z(Im)=−fn−12n−1+Σi=0〜n-2fi2i
となる。
複素数Xの実数部: X(Re)=−an−12n−1+Σi=0〜n-2ai2i
複素数Xの虚数部: X(Im)=−bn−12n−1+Σi=0〜n-2bi2i
複素数Yの実数部: Y(Re)=−cn−12n−1+Σi=0〜n-2ci2i
複素数Yの虚数部: Y(Im)=−dn−12n−1+Σi=0〜n-2di2i
複素数Zの実数部: Z(Re)=−en−12n−1+Σi=0〜n-2ei2i
複素数Zの虚数部: Z(Im)=−fn−12n−1+Σi=0〜n-2fi2i
となる。
ここで、第1の演算部40が行う演算処理は、図2の(式1)に示すように、
P(Re)=X(Re)+Y(Re)
P(Im)=X(Im)+Y(Im)
という単なる加算であり、デジタルデータを用いた実際の演算は、
P(Re)=−an−12n−1−cn−12n−1+Σi=0〜n-2ai2i+Σi=0〜n-2ci2i
P(Im)=−bn−12n−1−dn−12n−1+Σi=0〜n-2bi2i+Σi=0〜n-2di2i
という式で示される。このような演算は、桁上がりを考慮したビットごとの加算処理によって行うことができ、それほど複雑な演算ではない。
P(Re)=X(Re)+Y(Re)
P(Im)=X(Im)+Y(Im)
という単なる加算であり、デジタルデータを用いた実際の演算は、
P(Re)=−an−12n−1−cn−12n−1+Σi=0〜n-2ai2i+Σi=0〜n-2ci2i
P(Im)=−bn−12n−1−dn−12n−1+Σi=0〜n-2bi2i+Σi=0〜n-2di2i
という式で示される。このような演算は、桁上がりを考慮したビットごとの加算処理によって行うことができ、それほど複雑な演算ではない。
これに対して、第2の演算部50が行う演算処理は、図2の(式2)に示すように、
Q(Re)=(X(Re)−Y(Re))・Z(Re)
−(X(Im)−Y(Im))・Z(Im)
Q(Im)=(X(Re)−Y(Re))・Z(Im)
+(X(Im)−Y(Im))・Z(Re)
という乗算を含む「バタフライ演算」になり、デジタルデータを用いた実際の演算は、
Q(Re)=((−an−12n−1+Σi=0〜n-2ai2i)
−(−cn−12n−1+Σi=0〜n-2ci2i))
・(−en−12n−1+Σi=0〜n-2ei2i)
−((−bn−12n−1+Σi=0〜n-2bi2i)
−(−dn−12n−1+Σi=0〜n-2di2i))
・(−fn−12n−1+Σi=0〜n-2fi2i)
Q(Im)=((−an−12n−1+Σi=0〜n-2ai2i)
−(−cn−12n−1+Σi=0〜n-2ci2i))
・(−fn−12n−1+Σi=0〜n-2fi2i)
+((−bn−12n−1+Σi=0〜n-2bi2i)
−(−dn−12n−1+Σi=0〜n-2di2i))
・(−en−12n−1+Σi=0〜n-2ei2i)
という式で示される。このような乗算項を含む演算を行うために、従来は、多数の乗算器を用いていた。このため、LSI上での回路占有面積を広く必要とし、また、桁上げ処理が必要になるため、下位ビットの演算が完了するまで、上位ビットの演算を待つ必要があり、演算時間が長くかかるという問題も生じていた。
Q(Re)=(X(Re)−Y(Re))・Z(Re)
−(X(Im)−Y(Im))・Z(Im)
Q(Im)=(X(Re)−Y(Re))・Z(Im)
+(X(Im)−Y(Im))・Z(Re)
という乗算を含む「バタフライ演算」になり、デジタルデータを用いた実際の演算は、
Q(Re)=((−an−12n−1+Σi=0〜n-2ai2i)
−(−cn−12n−1+Σi=0〜n-2ci2i))
・(−en−12n−1+Σi=0〜n-2ei2i)
−((−bn−12n−1+Σi=0〜n-2bi2i)
−(−dn−12n−1+Σi=0〜n-2di2i))
・(−fn−12n−1+Σi=0〜n-2fi2i)
Q(Im)=((−an−12n−1+Σi=0〜n-2ai2i)
−(−cn−12n−1+Σi=0〜n-2ci2i))
・(−fn−12n−1+Σi=0〜n-2fi2i)
+((−bn−12n−1+Σi=0〜n-2bi2i)
−(−dn−12n−1+Σi=0〜n-2di2i))
・(−en−12n−1+Σi=0〜n-2ei2i)
という式で示される。このような乗算項を含む演算を行うために、従来は、多数の乗算器を用いていた。このため、LSI上での回路占有面積を広く必要とし、また、桁上げ処理が必要になるため、下位ビットの演算が完了するまで、上位ビットの演算を待つ必要があり、演算時間が長くかかるという問題も生じていた。
本願発明者は、第2の演算部50によって実行させる演算式の形式を若干変更することにより、このような問題を解決できると考えた。そして、試行錯誤を行った結果、次の§3で述べるような変形を行うことにより、極めて効率的な演算装置を構成できることに想到した。
<<< §3.演算装置の構成に理想的な変形式 >>>
本発明の本質は、図1に示す積和演算装置における第2の演算部50に対する工夫である。この第2の演算部50は、図2の(式2)に示す演算を行う構成要素であり、その具体的なビット単位の演算は、図5の(式4)に示すnビットのデジタルデータを用いた演算になることを§2で説明した。ただ、本発明に係る積和演算装置では、このビット単位の具体的な演算が、特別な形に変形された式(演算装置を構成する上での理想的な変形式)に基づいて行われることになる。この§3では、この理想的な変形式の導出を、図6〜図24を参照して説明する。
本発明の本質は、図1に示す積和演算装置における第2の演算部50に対する工夫である。この第2の演算部50は、図2の(式2)に示す演算を行う構成要素であり、その具体的なビット単位の演算は、図5の(式4)に示すnビットのデジタルデータを用いた演算になることを§2で説明した。ただ、本発明に係る積和演算装置では、このビット単位の具体的な演算が、特別な形に変形された式(演算装置を構成する上での理想的な変形式)に基づいて行われることになる。この§3では、この理想的な変形式の導出を、図6〜図24を参照して説明する。
最終的に得られる理想的な変形式は、複素数Qの実数部Q(Re)については図23の(式26)であり、虚数部Q(Im)については図24の(式27)である。したがって、本発明の本質は、図1に示す積和演算装置における第2の演算部50を、この理想的な変形式に基づく演算回路として構成した点にある。
まず、図6に示すように、一般に、
k・2n=2k・2n−1=k・2n−1+k・2n−1 (式5)であるから、
k・2n−1=k・2n−k・2n−1 (式6)が成り立つ。
ここで、k=an−1とおけば、
an−12n−1=an−12n−an−12n−1 (式7)である。
この(式7)を、図4に示す(式3)の「an−12n−1」の部分に代入すれば、
A=−an−12n+an−12n−1+Σi=0〜n-2ai2i
=−an−12n+Σi=0〜n-1ai2i (式8)が得られる。
したがって、図7に示す(式9)は、図5に示す(式4)と等価である。
k・2n=2k・2n−1=k・2n−1+k・2n−1 (式5)であるから、
k・2n−1=k・2n−k・2n−1 (式6)が成り立つ。
ここで、k=an−1とおけば、
an−12n−1=an−12n−an−12n−1 (式7)である。
この(式7)を、図4に示す(式3)の「an−12n−1」の部分に代入すれば、
A=−an−12n+an−12n−1+Σi=0〜n-2ai2i
=−an−12n+Σi=0〜n-1ai2i (式8)が得られる。
したがって、図7に示す(式9)は、図5に示す(式4)と等価である。
さて、ここでは、まず、複素数Qの実数部Q(Re)の演算のみに着目してみよう。図2の(式2)の上段に示されているとおり、
Q(Re)=(X(Re)−Y(Re))・Z(Re)
−(X(Im)−Y(Im))・Z(Im)
である。そこで、上式の右辺の1項目をQ(Re1)とおき、2項目をQ(Re2)とおけば、図8に(式10)として示されているとおり、
Q(Re)=Q(Re1)−Q(Re2)
但し、
Q(Re1)=(X(Re)−Y(Re))・Z(Re)
=X(Re)・Z(Re)−Y(Re)・Z(Re)
Q(Re2)=(X(Im)−Y(Im))・Z(Im)
=X(Im)・Z(Im)−Y(Im)・Z(Im)
である。
Q(Re)=(X(Re)−Y(Re))・Z(Re)
−(X(Im)−Y(Im))・Z(Im)
である。そこで、上式の右辺の1項目をQ(Re1)とおき、2項目をQ(Re2)とおけば、図8に(式10)として示されているとおり、
Q(Re)=Q(Re1)−Q(Re2)
但し、
Q(Re1)=(X(Re)−Y(Re))・Z(Re)
=X(Re)・Z(Re)−Y(Re)・Z(Re)
Q(Re2)=(X(Im)−Y(Im))・Z(Im)
=X(Im)・Z(Im)−Y(Im)・Z(Im)
である。
続いて、上式のQ(Re1)の右辺の各項に、図7の対応する項を代入すれば、図9に示す(式11)が得られる。この(式11)において、破線で囲った部分(Z(Re)の部分)をαとおき、形式を若干変えてみよう。図10に示すように、一般に任意の論理値「s」について、「s=(1−sbar)」が成り立つ。ここで、「sbar」は、「s」の論理反転である。すなわち、「s」を1ビットのデータとすれば、「s」が「0」なら「sbar」は「1」であり、「s」が「1」なら「sbar」は「0」の関係にある。なお、本願図面では、任意の論理値「s」についての論理反転値を記号「s」の上にバーを描いた記号で示すことにするが、本願明細書では、電子出願の制約上、「sbar」と記載することにする。
さて、「s=(1−sbar)」の関係を用いて、αを書き直せば、図10に示すとおり、
α=−en−12n+Σi=0〜n-1ei2i
=−(1−ebarn−1)2n+Σi=0〜n-1(1−ebari)2i
と変形することができる。ここで、「ebarn−1」は「en−1」の論理反転ビットであり、「ebari」は「ei」の論理反転ビットである。上述したとおり、本願図面では、論理反転を記号の上にバーを描くことによって示すが、本願明細書では、電子出願の制約上、記号barが介挿されたビット(たとえば「ebarn−1」)は、介挿前のビット(たとえば「en−1」)に対する論理反転ビットを示すものとする。上式を展開して整理すると、結局、図10の最下行に示すように、
α=−[−ebarn−12n+Σi=0〜n-1ebari2i+1] (式12)
が得られる。
α=−en−12n+Σi=0〜n-1ei2i
=−(1−ebarn−1)2n+Σi=0〜n-1(1−ebari)2i
と変形することができる。ここで、「ebarn−1」は「en−1」の論理反転ビットであり、「ebari」は「ei」の論理反転ビットである。上述したとおり、本願図面では、論理反転を記号の上にバーを描くことによって示すが、本願明細書では、電子出願の制約上、記号barが介挿されたビット(たとえば「ebarn−1」)は、介挿前のビット(たとえば「en−1」)に対する論理反転ビットを示すものとする。上式を展開して整理すると、結局、図10の最下行に示すように、
α=−[−ebarn−12n+Σi=0〜n-1ebari2i+1] (式12)
が得られる。
一方、図8に示すQ(Re2)については、右辺の各項に、図7の対応する項を代入することにより、図11に示す(式13)が得られる。この(式13)において、破線で囲った部分(Z(Im)の部分)をβとおき、上述したαと同様に形式を変えると、図12の最下行に示すように、
β=−[−fbarn−12n+Σi=0〜n-1fbari2i+1] (式14)
が得られる。
β=−[−fbarn−12n+Σi=0〜n-1fbari2i+1] (式14)
が得られる。
そこで、図9の(式11)におけるαの部分および図11の(式13)におけるβの部分を、それぞれ(式12)および(式14)に示す形式のαおよびβに置換すれば、図13に示す(式15)が得られる。この(式15)を展開して整理すると、図14に示す(式16)が得られる。ここで、(式16)の左側に示す丸数字1〜5は、2のべき乗項ごとに各項をまとめたグループを示している。すなわち、丸数字1で示すグループは、22nのべき乗項を示し、丸数字2で示すグループは、2nのべき乗項を示し、丸数字3で示すグループは、2iのべき乗項を示し、丸数字4で示すグループは、別な2iのべき乗項を示し、丸数字5で示すグループは、2i+jのべき乗項を示している。なお、丸数字5で示すグループ(図13におけるΣの項同士の積に対応する項)では、二重のΣ記号が用いられているため、Σ記号ごとに、添字iもしくはjを用いて両者を区別している。
続いて、図14の丸数字3で示すグループについて、更なる変形を試みる。図15に示すように、一般に、任意の論理値siについて、
Σi=0〜n-1(1−si)2i=Σi=0〜n-12i−Σi=0〜n-1si2i
であるから、
−Σi=0〜n-1si2i=Σi=0〜n-1(1−si)2i−Σi=0〜n-12i (式17)である。
これを変形すれば、図15の最下行に示されているように、
−Σi=0〜n-1si2i=Σi=0〜n-1(sbari)2i+1−2n (式18)を得る。
そこで、この(式18)を、図14の丸数字3で示すグループの各項に適用すれば、図16の(式19)を得ることができる。
Σi=0〜n-1(1−si)2i=Σi=0〜n-12i−Σi=0〜n-1si2i
であるから、
−Σi=0〜n-1si2i=Σi=0〜n-1(1−si)2i−Σi=0〜n-12i (式17)である。
これを変形すれば、図15の最下行に示されているように、
−Σi=0〜n-1si2i=Σi=0〜n-1(sbari)2i+1−2n (式18)を得る。
そこで、この(式18)を、図14の丸数字3で示すグループの各項に適用すれば、図16の(式19)を得ることができる。
そこで、図14の丸数字3で示すグループの代わりに、図16の丸数字3で示すグループを当てはめて整理すると、図17に示す(式20)が得られる。この(式20)における丸数字6で示すグループは、図14の丸数字1のグループに、図16の22nのべき乗項を追加したものであり、丸数字7で示すグループは、図14の丸数字2のグループに、図16の2nのべき乗項を追加したものであり、丸数字8で示すグループは、図16の2iのべき乗項を集めたものである。なお、丸数字9で示すグループは、図14の丸数字4で示すグループと全く同じであり、丸数字10で示すグループは、図14の丸数字5で示すグループと全く同じである。
次に、図17の丸数字6で示すグループについて、更なる変形を試みる。図18に示すように、一般に、任意の論理値s,tについて、
(s・t)−s−t=−(sORt) (式21)が成り立つ。
ここで、「OR」は、論理和演算子である。この(式21)が成り立つ理由は、図18の真理値表から明らかである。そこで、図17の丸数字6のグループを整理すると、図19の上段のようになるので、上記(式21)を適用すれば、図19の下段に示す(式22)が得られる。
(s・t)−s−t=−(sORt) (式21)が成り立つ。
ここで、「OR」は、論理和演算子である。この(式21)が成り立つ理由は、図18の真理値表から明らかである。そこで、図17の丸数字6のグループを整理すると、図19の上段のようになるので、上記(式21)を適用すれば、図19の下段に示す(式22)が得られる。
続いて、図17の丸数字7で示すグループについて、図20に示すような変形を行う。一般に、任意の論理値「s」と「sbar」とは、どちらか一方が0,他方が1の関係にあるので、常に「s+sbar=1」が成り立つ。よって、丸数字7で示すグループは、図20の最下行に示す(式23)のように変形される。
次に、図17の丸数字8で示すグループについて、更なる変形を試みる。図21に示すように、一般に、任意の論理値s,tについて、
sn−12nΣi=0〜n-1ti2i=Σi=0〜n-1(sn−12n・ti2i)
であるから、
sn−12nΣi=0〜n-1ti2i=Σi=0〜n-1(sn−1・ti・2n+i) (式24)
である。この(式24)を、図17の丸数字8で示すグループに適用すれば、図22に示す(式25)が得られる。
sn−12nΣi=0〜n-1ti2i=Σi=0〜n-1(sn−12n・ti2i)
であるから、
sn−12nΣi=0〜n-1ti2i=Σi=0〜n-1(sn−1・ti・2n+i) (式24)
である。この(式24)を、図17の丸数字8で示すグループに適用すれば、図22に示す(式25)が得られる。
結局、図17に示す丸数字6〜10からなる(式20)は、図23に示す丸数字11〜15からなる(式26)に書き換えることができる。すなわち、図23の丸数字11で示すグループは、丸数字6のグループを図19の(式22)の形式に書き換えたものであり、図23の丸数字12で示すグループは、丸数字7のグループを図20の(式23)の形式に書き換えたものであり、図23の丸数字13で示すグループは、丸数字8のグループを図22の(式25)の形式に書き換えたものである。なお、丸数字14で示すグループは、図17の丸数字9で示すグループと全く同じであり、丸数字15で示すグループは、図17の丸数字10で示すグループと全く同じである。
前述したとおり、この図23に示す(式26)は、複素数Qの実数部Q(Re)をデジタルデータの演算処理によって求める場合の理想的な形になっている。全く同様の式変形を行うことにより、複素数Qの虚数部Q(Im)についての理想的な演算式を、図24に示す(式27)として得ることができる。
<<< §4.理想的な変形式に基づく装置構成の利点 >>>
§1で述べたとおり、本発明は、図1に示す複素数の積和演算装置に係るものである。この装置の第1の入力部10には複素数Xが与えられ、第2の入力部20には複素数Yが与えられ、第3の入力部30には複素数Zが与えられる。ここで、各複素数の実数部(Re)および虚数部(Im)を、それぞれnビットからなるデジタルデータで表現すれば、図5の(式4)で示されるようなビット構成からなるデジタルデータが各入力部10,20,30に与えられることになる。別言すれば、各複素数X,Y,Zの実数部(Re)および虚数部(Im)は、いずれも、符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして与えられることになる。
§1で述べたとおり、本発明は、図1に示す複素数の積和演算装置に係るものである。この装置の第1の入力部10には複素数Xが与えられ、第2の入力部20には複素数Yが与えられ、第3の入力部30には複素数Zが与えられる。ここで、各複素数の実数部(Re)および虚数部(Im)を、それぞれnビットからなるデジタルデータで表現すれば、図5の(式4)で示されるようなビット構成からなるデジタルデータが各入力部10,20,30に与えられることになる。別言すれば、各複素数X,Y,Zの実数部(Re)および虚数部(Im)は、いずれも、符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして与えられることになる。
図5の(式4)に示す定義を行うことにすれば、第1の入力部10には、最上位ビット側から順に、an−1,an−2,...,a1,a0という合計nビットからなる実数部X(Re)と、bn−1,bn−2,...,b1,b0という合計nビットからなる虚数部X(Im)とが与えられる。同様に、第2の入力部20には、最上位ビット側から順に、cn−1,cn−2,...,c1,c0という合計nビットからなる実数部Y(Re)と、dn−1,dn−2,...,d1,d0という合計nビットからなる虚数部Y(Im)とが与えられ、第3の入力部30には、最上位ビット側から順に、en−1,en−2,...,e1,e0という合計nビットからなる実数部Z(Re)と、fn−1,fn−2,...,f1,f0という合計nビットからなる虚数部Z(Im)とが与えられる。
図1に示す第1の演算部40は、複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する構成要素である。このような単なる加算処理を行う回路構成は比較的単純であり、従来から利用されている一般的な加算処理回路を用いて構成しても、特に問題は生じない。具体的には、実数部P(Re)は、an−1,an−2,...,a1,a0という合計nビットのデジタルデータと、cn−1,cn−2,...,c1,c0という合計nビットのデジタルデータとの桁上げを考慮したビットごとの加算により求めることができ、虚数部P(Im)は、bn−1,bn−2,...,b1,b0という合計nビットのデジタルデータと、dn−1,dn−2,...,d1,d0という合計nビットのデジタルデータとの桁上げを考慮したビットごとの加算により求めることができる。
これに対して、第2の演算部50が行う演算処理は、いわゆる「バタフライ演算」であり、乗算器を用いた通常のビット間演算を行うことは、あまり効率的ではない。すなわち、第2の演算部50が行う演算処理は、複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する処理、ということができるが、これら各項に、上述した各ビット列からなるデジタルデータをそのまま当てはめてビット間演算を行うことにすると、乗算器を構成するために多大な占有面積が必要となり、演算速度の向上も期待できない。
本発明の本質は、図23の(式26)に基いてビット間演算を行うハードウエア構成により、複素数Qの実数部Q(Re)を算出させ、図24の(式27)に基いてビット間演算を行うハードウエア構成により、複素数Qの虚数部Q(Im)を算出させる点にある。すなわち、本発明では、第2の演算部50の具体的なハードウエアを、(式26)および(式27)に基づいて構成することになる。この(式26)および(式27)が、図2の(式2)に図5の(式4)を代入し、様々な変形を行うことによって得られた式であることは、既に§3で説明したとおりである。したがって、(式26)に基づく演算結果は、複素数Qの実数部Q(Re)の正しいデジタル値を示し、(式27)に基づく演算結果は、複素数Qの虚数部Q(Im)の正しいデジタル値を示すことになる。
(式26)および(式27)に含まれる変数は、an−1〜a0、bn−1〜b0、cn−1〜c0、dn−1〜d0、en−1〜e0、fn−1〜f0、もしくは、これらの論理反転ビットである。ここで、各ビットan−1〜a0、bn−1〜b0、cn−1〜c0、dn−1〜d0、en−1〜e0、fn−1〜f0は、第1の入力部10,第2の入力部20,第3の入力部30に複素数X,Y,Zの値として与えられたビットである。また、一般に、任意のビットsの論理反転ビットsbarは、インバータなどの演算器を用いて簡単に作り出すことができるので、上記各ビットの論理反転ビットは、必要に応じて適宜作り出すことができる。しかも、インバータは比較的単純な回路で実現できるので、必要に応じて論理反転ビットを作成することは、ハードウエア構成をそれほど複雑にする要因にはならない。
既に述べたとおり、この(式26)および(式27)は、実数部Q(Re)および虚数部Q(Im)を、デジタルデータの演算処理によって求める場合の理想的な形になっている。その理由は、各部において、セレクタ論理を適用できるからである。この点を、もう少し詳しく説明しよう。
図25は、図23の(式26)の中から、破線で囲ったγ1の部分を抽出して示す図である。ここで、
γ1=(cn−1・ei)+(an−1・ebari)
なる式において、ビット「ei」とビット「ebari」との関係に着目すると、後者は前者の論理反転ビットであるから、ei=0のとき、ebari=1になり、この場合、γ1=an−1になる。逆に、ei=1のとき、ebari=0になり、この場合、γ1=cn−1になる。結局、γ1の値は、eiの論理値によって決定されることになり、その値は、an−1かcn−1かの二者択一である。これは、γ1の演算にセレクタ論理が適用できることを示している。すなわち、γ1を求める演算回路として、図26に示すようなセレクタを用いることができる。
γ1=(cn−1・ei)+(an−1・ebari)
なる式において、ビット「ei」とビット「ebari」との関係に着目すると、後者は前者の論理反転ビットであるから、ei=0のとき、ebari=1になり、この場合、γ1=an−1になる。逆に、ei=1のとき、ebari=0になり、この場合、γ1=cn−1になる。結局、γ1の値は、eiの論理値によって決定されることになり、その値は、an−1かcn−1かの二者択一である。これは、γ1の演算にセレクタ論理が適用できることを示している。すなわち、γ1を求める演算回路として、図26に示すようなセレクタを用いることができる。
図26に示すセレクタは、ビット「an−1」とビット「cn−1」という2つの入力のうち、選択信号として与えられたビット「ei」の値に基づいて、いずれか一方を選択して出力する論理回路である。具体的には、ei=0のときには、ビット「an−1」を選択して、これをγ1として出力する処理を行い、ei=1のときには、ビット「cn−1」を選択して、これをγ1として出力する処理を行う。
一方、図27は、図23の(式26)の中から、破線で囲ったγ4の部分を抽出して示す図である。ここで、
γ4=(fn−1・dbari)+(fbarn−1・bbari)
なる式において、ビット「fn−1」とビット「fbarn−1」との関係に着目すると、後者は前者の論理反転ビットであるから、fn−1=0のとき、fbarn−1=1になり、この場合、γ4=bbariになる。逆に、fn−1=1のとき、fbarn−1=0になり、この場合、γ4=dbariになる。結局、γ4の値は、fn−1の論理値によって決定されることになり、その値は、bbariかdbariかの二者択一である。これは、γ4の演算にセレクタ論理が適用できることを示している。すなわち、γ4を求める演算回路として、図28に示すようなセレクタを用いることができる。
γ4=(fn−1・dbari)+(fbarn−1・bbari)
なる式において、ビット「fn−1」とビット「fbarn−1」との関係に着目すると、後者は前者の論理反転ビットであるから、fn−1=0のとき、fbarn−1=1になり、この場合、γ4=bbariになる。逆に、fn−1=1のとき、fbarn−1=0になり、この場合、γ4=dbariになる。結局、γ4の値は、fn−1の論理値によって決定されることになり、その値は、bbariかdbariかの二者択一である。これは、γ4の演算にセレクタ論理が適用できることを示している。すなわち、γ4を求める演算回路として、図28に示すようなセレクタを用いることができる。
図28に示すセレクタは、ビット「bbari」とビット「dbari」という2つの入力のうち、選択信号として与えられたビット「fn−1」の値に基づいて、いずれか一方を選択して出力する論理回路である。具体的には、fn−1=0のときには、ビット「bbari」を選択して、これをγ4として出力する処理を行い、fn−1=1のときには、ビット「dbari」を選択して、これをγ4として出力する処理を行う。
要するに、一般論として言えば、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算が必要な場合、当該演算は、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタによって実行することが可能ということになる。
図23に示す(式26)および図24に示す(式27)には、この「(K・M)+(L・Mbar)」なる形式の演算部分が随所に含まれている。たとえば、(式26)に破線で囲って示すγ1〜γ6の部分および(式27)に破線で囲って示すδ1〜δ6の部分は、いずれも「(K・M)+(L・Mbar)」なる形式の論理式であり、これらの部分に対する演算回路は、いずれもセレクタを用いて実現することが可能である。
しかも、γ1〜γ4の部分およびδ1〜δ4の部分は、いずれもΣ記号の内側部分にあるため、実際には、そのn倍もの箇所に用いられる演算であり、γ5〜γ6の部分およびδ5〜δ6の部分は、いずれも二重Σ記号の内側部分にあるため、実際には、そのn2倍もの箇所に用いられる演算部分である。本発明によれば、このように多数箇所で用いられる演算処理をすべて単純なセレクタ回路で実現することができるので、全体のハードウエア構成を非常に単純化することが可能になる。
また、セレクタ回路のもうひとつの利点は、桁上げが生じないという点である。たとえば、1ビット同士の加算の場合、「1+1=10」という演算が行われると、上位ビットへの桁上げ処理が必要になる。このため、一般的な加算器や乗算器では、桁上げ処理が必須になり、下位ビットの演算が完了するまで、上位ビットの演算を待つ必要があり、演算時間が長くかかるという弊害が生じる。ところが、セレクタ回路の動作には、桁上げ処理は不要であるため、多数のセレクタ回路を同時に並列的に動作させることができる。
このように本発明では、「バタフライ演算」を構成する積和演算の一部をセレクタを利用して行うことができるようにしたため、回路構成を単純化することができ、LSI上での回路占有面積を低減することができる。また、セレクタを利用したため、桁上げ伝播処理を削減することができ、並列処理による高速化が可能になる。
結局、本発明の最も重要な特徴は、図1に示す積和演算装置における第2の演算部50に、複素数Qの実数部Q(Re)および虚数部Q(Im)を演算させる際に、図23に示す(式26)および図24に示す(式27)に基づく論理演算を行わせるようにした点にある。
具体的には、実数部Q(Re)を求める際には、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算を行うことになる。
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算を行うことになる。
また、虚数部Q(Im)を求める際には、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算を行うことになる。
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算を行うことになる。
ここで、上記演算式において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行うために、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いるようにすれば、ハードウエア構成を非常に単純化することができ、また、演算の高速化を図ることができるようになる。
具体的には、
「(cn−1・ei)+(an−1・ebari)」なる論理演算(図23のγ1の部分を求める演算)を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算(図23のγ2の部分を求める演算)を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算(図23のγ3の部分を求める演算)を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算(図23のγ4の部分を求める演算)を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算(図23のγ5の部分を求める演算)を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算(図23のγ6の部分を求める演算)を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(cn−1・fi)+(an−1・fbari)」なる論理演算(図24のδ1の部分を求める演算)を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算(図24のδ2の部分を求める演算)を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算(図24のδ3の部分を求める演算)を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算(図24のδ4の部分を求める演算)を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算(図24のδ5の部分を求める演算)を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算(図24のδ6の部分を求める演算)を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を用いるようにすればよい。
「(cn−1・ei)+(an−1・ebari)」なる論理演算(図23のγ1の部分を求める演算)を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算(図23のγ2の部分を求める演算)を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算(図23のγ3の部分を求める演算)を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算(図23のγ4の部分を求める演算)を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算(図23のγ5の部分を求める演算)を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算(図23のγ6の部分を求める演算)を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(cn−1・fi)+(an−1・fbari)」なる論理演算(図24のδ1の部分を求める演算)を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算(図24のδ2の部分を求める演算)を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算(図24のδ3の部分を求める演算)を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算(図24のδ4の部分を求める演算)を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算(図24のδ5の部分を求める演算)を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算(図24のδ6の部分を求める演算)を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を用いるようにすればよい。
<<< §5.n=4に設定した場合の実施形態 >>>
これまで、複素数X,Y,Zの実数部(Re)および虚数部(Im)を、それぞれnビットのデジタルデータとして与え、複素数P,Qを求める一般的な例を述べた。この場合、第1の演算部40は、(n+1)ビットのデジタルデータからなる実数部P(Re)および虚数部P(Im)を算出することができ、第2の演算部50は、(2n+1)ビットのデジタルデータからなる実数部Q(Re)および虚数部Q(Im)を算出することができる。ここで、実数部P(Re)および虚数部P(Im)の20〜2n−2の桁は絶対値を示す非符号部を構成し、2n−1の桁は、符号を示す符号部を構成する。一方、実数部Q(Re)および虚数部Q(Im)の20〜22n−1の桁は絶対値を示す非符号部を構成し、22nの桁は、符号を示す符号部を構成する。
これまで、複素数X,Y,Zの実数部(Re)および虚数部(Im)を、それぞれnビットのデジタルデータとして与え、複素数P,Qを求める一般的な例を述べた。この場合、第1の演算部40は、(n+1)ビットのデジタルデータからなる実数部P(Re)および虚数部P(Im)を算出することができ、第2の演算部50は、(2n+1)ビットのデジタルデータからなる実数部Q(Re)および虚数部Q(Im)を算出することができる。ここで、実数部P(Re)および虚数部P(Im)の20〜2n−2の桁は絶対値を示す非符号部を構成し、2n−1の桁は、符号を示す符号部を構成する。一方、実数部Q(Re)および虚数部Q(Im)の20〜22n−1の桁は絶対値を示す非符号部を構成し、22nの桁は、符号を示す符号部を構成する。
ここでは、これまで述べてきたnビットのデジタルデータに基づいて複素数Qを求める一般例において、n=4に設定した具体的な実施形態を述べる。図29は、図23に示す実数部Q(Re)の演算式に、n=4を代入することにより得られる演算式を示す図であり、図30は、この図29の丸数字15の部分の詳細な演算式を示す図である。この図29および図30では、図23においてΣ記号で示されていた演算式は展開された状態で示されている。展開された各項は、それぞれが部分積項を構成しており、各部分積項には、20〜28という2のべき乗の項が含まれている。この2のべき乗の項は、各部分積項の位取り、すなわち、二進数の桁位置を示すものである。
たとえば、丸数字11のグループを構成する各項には、28の項が含まれているが、これは、これらの部分積項が28の桁の数値を示すことを意味している。この28の桁は、符号部に相当する桁であり、「0」であれば正、「1」であれば負を示すことになる。丸数字11のグループの先頭にマイナス記号が付されているのは、この丸数字11のグループが符号部として機能するためである。
一方、丸数字12〜15を構成する各部分積項には、20〜27という2のべき乗の項が含まれているが、これは、これらの各部分積項が20〜27の桁の数値を示すことを意味している。この20〜27の桁は、非符号部に相当する桁であり、これらの桁では、いずれの部分積項も正の項となっている。
図31は、図29および図30に示す実数部Q(Re)についての演算式に含まれている部分積項を、それぞれの桁位置に並べて示した図である。図の底部に示す28〜20は、それぞれの桁位置を示しており、各桁位置に並べられた升目は、各桁位置に対応する項を示している。
たとえば、図31の一番右の欄は、20の桁位置を示しており、この欄には、上から順に、「b0fbar0」,「d0f0」,「c0ebar0」,「a0e0」,「c0」,「b0」という6個の項が記載されている。ここで、「b0fbar0」,「d0f0」,「c0ebar0」,「a0e0」の4項は、図30の式の右辺第1行目に含まれる項(i=0の場合の20の各項)であり、「c0」,「b0」の2項は、図29の丸数字14の第1行目に含まれる20の各項である。
同様に、図31の右から2番目の欄は、21の桁位置を示しており、この欄には、上から順に、「b0fbar1」,「d0f1」,「c0ebar1」,「a0e1」,「b1fbar0」,「d1f0」,「c1ebar0」,「a1e0」,「c1」,「b1」という10個の項が記載されている。ここで、「b0fbar1」,「d0f1」,「c0ebar1」,「a0e1」の4項は、図30の式の右辺第2行目に含まれる項(i=0の場合の21の各項)であり、「b1fbar0」,「d1f0」,「c1ebar0」,「a1e0」の4項は、図30の式の右辺第5行目に含まれる項(i=1の場合の21の各項)であり、「c1」,「b1」の2項は、図29の丸数字14の第2行目に含まれる21の各項である。
この図31に示す個々の部分積項を個々の桁ごとに加算(縦方向に加算)すれば、実数部Q(Re)が得られることになる。なお、図31の一番左の欄である28の桁は、前述したとおり符号部に相当する桁であり、図29の丸数字11を構成する各項(論理和演算項:図に示すV記号は論理和演算子)が記載されている。
図31に示す多くの升目には、上下2段に部分積項が記載されているが、これは、当該升目についてはセレクタ論理が適用可能であることを示している。たとえば、図31の一番右の欄(20の桁)には、「b0fbar0」と「d0f0」とを上下2段に列挙した升目が記載されているが、これは、(b0fbar0)+(d0f0)なる演算に、セレクタを利用できることを示している。具体的には、この部分の演算には、ビットb0とビットd0とを入力し、ビットf0の論理値に基づいて、入力したいずれか一方のビットを出力するセレクタ回路を利用することができる。
このように、図31において、縦長の長方形の升目内に上下2段に記載された部分積項対の演算は、いずれもセレクタ回路を利用して実行することができる。前述したとおり、このセレクタ回路では、桁上げ処理が発生することがないので、これら多数のセレクタ回路は同時に並行して動作させることが可能である。
図32は、やはりn=4に設定した場合の虚数部Q(Im)についての演算式に含まれている部分積項を、それぞれの桁位置に並べて示した図である。こちらも、図31に示す実数部の部分積項と同様に、大多数の部分積項対の演算にセレクタ回路を利用することができる。
最後に、図31および図32に示す部分積項を個々の桁ごとに加算して、実数部Q(Re)および虚数部Q(Im)を得る具体的な回路の構成例を示すことにする。この回路は、基本的に、図33に示すセレクタとカウンタとの組合わせによって構成することができる。
図33(a) に示すセレクタ100は、2つの入力値x,y(いずれも1ビットの値)のうち、いずれか一方を選択値Sとして出力する機能をもった構成要素である。いずれの入力値を選択するかは、1ビットの制御値Dの論理状態によって定まる。すなわち、制御値D=0のときは、入力値xが選択され(S=xになる)、制御値D=1のときは、入力値yが選択される(S=yになる)。
一方、図33(b) に示す2−2カウンタ200は、2つの入力値x,y(いずれも1ビットの値)についての加算演算を行い、演算結果の20の桁の値を和Sとして出力し、演算結果の21の桁の値をキャリーC(上位桁への繰り上がり)として出力する機能をもった構成要素である。和SおよびキャリーCは、いずれも1ビットのデータになる。
また、図13(c) に示す3−2カウンタ300は、3つの入力値x,y,z(いずれも1ビットの値)についての加算演算を行い、演算結果の20の桁の値を和Sとして出力し、演算結果の21の桁の値をキャリーC(上位桁への繰り上がり)として出力する機能をもった構成要素である。やはり和SおよびキャリーCは、いずれも1ビットのデータになる。
図34〜図47は、図33に示すセレクタ100,2−2カウンタ200,3−2カウンタ300を組み合わせることにより構成した積和演算部を示す回路図である。図示の便宜上、図34〜図47の図面に分けて示してあるが、これら合計14の図面に描かれた回路全体によって、図1に示す積和演算装置における第2の演算部50が構成されることになる。図において、100番台の符号が記されている構成要素101〜148は、図33(a) に示すセレクタ100と同等の要素であり、200番台の符号が記されている構成要素201〜205は、図33(b) に示す2−2カウンタ200と同等の要素であり、300番台の符号が記されている構成要素301〜346は、図33(c) に示す3−2カウンタ300と同等の要素である。また、図40および図47に「OR」と表記した構成要素はOR回路(論理和回路)であり、「XOR」と表記した構成要素はXOR回路(排他的論理和回路)である。
また、これらの回路図において、各セレクタから出力される選択値は、当該セレクタの符号の頭にSをつけた符号で示し、各カウンタから出力される和もしくはキャリーは、当該カウンタの符号の頭にSもしくはCをつけた符号で示してある。たとえば、図34の右側に示されているS101は、セレクタ101から出力される選択値であり、S201は、カウンタ201から出力される和であり、C201は、カウンタ201から出力されるキャリー(上位桁へ加算されることになる)である。なお、図40および図47におけるS401〜S413は、OR回路もしくはXOR回路からの論理出力である。
図34〜図40は、図31に示す部分積項を個々の桁ごとに加算して、実数部Q(Re)を求めるための回路であり、下方に向けて出力されているビットS0〜S8は、実数部Q(Re)を構成する全9ビットからなるデジタルデータの20桁〜28桁のビット値を示している。同様に、図41〜図47は、図32に示す部分積項を個々の桁ごとに加算して、虚数部Q(Im)を求めるための回路であり、下方に向けて出力されているビットS0〜S8は、虚数部Q(Im)を構成する全9ビットからなるデジタルデータの20桁〜28桁のビット値を示している。
これら各図の上方に記載されている入力ビットは、複素数XもしくはYを構成するビットa3〜a0、b3〜b0、c3〜c0、d3〜d0、もしくは、これらの論理反転ビットである。また、これら各図における各セレクタの右下方から与えられている制御ビットは、複素数Zを構成するビットe3〜e0、f3〜f0、もしくは、これらの論理反転ビットである。前述したとおり、論理反転ビットが必要な場合には、インバータを用いて、元のビットを反転させればよい。
図34〜図40に示す回路が、図31に示す部分積項を桁ごとに加算する回路になっており、図41〜図47に示す回路が、図32に示す部分積項を桁ごとに加算する回路になっていることは、桁ごとの回路構成と桁ごとの部分積項とを対比すれば、容易に理解できよう。
たとえば、図34の破線より右側の回路部分は、実数部Q(Re)の20桁のビット値S0を算出する回路であり、図31の一番右の欄に記載されている「b0fbar0」,「d0f0」,「c0ebar0」,「a0e0」,「c0」,「b0」という6個の項の総和を求める回路になっている。すなわち、セレクタ101は、制御ビットf0が0の場合はb0を選択して出力し、制御ビットf0が1の場合はd0を選択して出力する機能を有しているので、このセレクタ101から出力される選択値S101は、「b0fbar0」+「d0f0」の値に対応する。一方、セレクタ102は、制御ビットe0が0の場合はc0を選択して出力し、制御ビットe0が1の場合はa0を選択して出力する機能を有しているので、このセレクタ102から出力される選択値S102は、「c0ebar0」+「a0e0」の値に対応する。
そして、カウンタ301は、この「選択値S102」と「ビットb0」と「ビットc0」とを加算する演算を行い、加算結果の20の桁を和S301として出力し、加算結果の21の桁をキャリーC301として出力する。更に、カウンタ201は、「セレクタ101が出力した選択値S101」と「カウンタ301が出力した和S301」とを加算する演算を行い、加算結果の20の桁を和S201として出力し、加算結果の21の桁をキャリーC201として出力する。カウンタ201から出力された和S201は、実数部Q(Re)の20桁のビット値S0を構成することになり、キャリーC301,C201は、図34の破線より左側の回路部分へと桁上げ伝播され、実数部Q(Re)の21桁のビット値S1を求める演算に利用される。
結局、図34の破線より右側の回路部分によって、図31の一番右の欄に記載されている「b0fbar0」,「d0f0」,「c0ebar0」,「a0e0」,「c0」,「b0」という6個の項の総和が求められ、その20の桁がビット値S0として出力されることになる。ここで、6個の項の総和が求められているにもかかわらず、実質的な加算処理を実行する回路要素は、カウンタ201とカウンタ301の2個だけである。これは、「b0fbar0」+「d0f0」なる加算処理にセレクタ論理を適用し、セレクタ101によって当該加算処理を代行させるとともに、「c0ebar0」+「a0e0」なる加算処理にセレクタ論理を適用し、セレクタ102によって当該加算処理を代行させているためである。
同様に、図34の破線より左側の回路部分は、実数部Q(Re)の21桁のビット値S1を算出する回路であり、図31の右から2番目欄に記載されている「b0fbar1」,「d0f1」,「c0ebar1」,「a0e1」,「b1fbar0」,「d1f0」,「c1ebar0」,「a1e0」,「c1」,「b1」という10個の項の総和を求める回路になっている。ここでも、「b0fbar1」+「d0f1」なる加算処理はセレクタ105によって代行され、「c0ebar1」+「a0e1」なる加算処理はセレクタ106によって代行され、「b1fbar0」+「d1f0」なる加算処理はセレクタ103によって代行され、「c1ebar0」+「a1e0」なる加算処理はセレクタ104によって代行される。したがって、21桁のビット値S1を算出する回路部分には、20桁から上がってくるキャリーC201,C301の加算処理を行う回路要素を含めて、実質的な加算処理を実行する回路要素は、カウンタ202,302,303,304の4個だけである。
以上、図34に示す回路について、その動作を詳細に説明したが、図35〜図47に示す回路の動作も全く同様である。いずれの回路においても、多くの加算処理がセレクタによって代行されている。このため、回路構成は単純化され、システムLSIを設計する場合に、回路占有面積を低減させることが可能になる。しかも、セレクタは、桁上げが発生しないため、下位の桁の処理が完了するまで上位の桁の処理を保留する必要はない。したがって、図34〜図47に示すセレクタ101〜148には、それぞれ受け持ちのビットに関する上位下位の関係が存在するものの、相互に並列動作が可能であり、すべてのセレクタ101〜148を同時に動作させても何ら問題は生じない。これにより、演算時間の短縮を図ることができる。
なお、図40の左側に示すビットS8についての回路部分(実数部Q(Re)の28桁を演算する部分)および図47の左側に示すビットS8についての回路部分(虚数部Q(Im)の28桁を演算する部分)は、符号部として機能するビットS8を決定する処理を行う必要があるため、他の演算部とは異なる構成を有している。
たとえば、実数部Q(Re)の28桁は、図31の一番左の欄に示されているとおり、論理和演算子を含む4つの負項の和として与えられる。図40の左上に示す4個のOR回路は、この4つの負項の値を求めるためのものである。また、ビットS8を求めるために、8個のXOR回路が用いられているが、これはビットS8を符号部として正しく機能させるための手法である。すなわち、28桁における加算結果は、27桁からの桁上げを考慮すると、二進表現での0,1,11のいずれかになり、これらの下位1ビットのみを出力すれば、ビットS8として正しい値が得られる。XOR回路によって構成される図示の回路は、正にこのような処理を行う回路である。図47の左側に示す虚数部Q(Im)の28桁を求める回路も同様である。
なお、一般に、2の補数表現により負数を表現した合計nビットのデジタルデータを用いた演算において、符号部として機能するビットを求める手法は公知の技術であるため、ここでは、このビットS8の算出手法についての詳しい説明は省略するが、符号部として正しく機能するビットS8を得るための回路は、必ずしも図示の例のようなXOR回路を用いて構成する必要はない。
また、これまでの説明では、複素数Qの実数部(Re)を求める演算と複素数Qの虚数部(Im)を求める演算との双方に本発明を適用した実施形態を示したが、もちろん、本発明は、複素数Qの実数部(Re)を求める演算にのみ単独適用することも可能であるし、複素数Qの虚数部(Im)を求める演算にのみ単独適用することも可能である。
10:第1の入力部
20:第2の入力部
30:第3の入力部
40:第1の演算部
41,42:加算処理回路
50:第2の演算部
51,52:減算処理回路
53,54:乗算処理回路
55:減算処理回路
56,57:乗算処理回路
58:加算処理回路
60:第1の出力部
70:第2の出力部
100〜148:セレクタ
200〜205:2−2カウンタ
300〜346:3−2カウンタ
OR:論理和回路
XOR:排他的論理和回路
P,Q,X,Y,Z:複素数
P(Re),Q(Re),X(Re),Y(Re),Z(Re):複素数の実数部
P(Im),Q(Im),X(Im),Y(Im),Z(Im):複素数の虚数部
20:第2の入力部
30:第3の入力部
40:第1の演算部
41,42:加算処理回路
50:第2の演算部
51,52:減算処理回路
53,54:乗算処理回路
55:減算処理回路
56,57:乗算処理回路
58:加算処理回路
60:第1の出力部
70:第2の出力部
100〜148:セレクタ
200〜205:2−2カウンタ
300〜346:3−2カウンタ
OR:論理和回路
XOR:排他的論理和回路
P,Q,X,Y,Z:複素数
P(Re),Q(Re),X(Re),Y(Re),Z(Re):複素数の実数部
P(Im),Q(Im),X(Im),Y(Im),Z(Im):複素数の虚数部
Claims (14)
- 複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置であって、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
前記第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
前記第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を備え、
前記第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
前記第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
前記第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
前記第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めることを特徴とする複素数の積和演算装置。 - 複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置であって、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
前記第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
前記第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を備え、
前記第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
前記第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
前記第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
前記第2の演算部は、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めることを特徴とする複素数の積和演算装置。 - 複素数X,Y,Zに基づく積和演算を行い、複素数PおよびQを求める演算装置であって、
複素数Xの実数部X(Re)および虚数部X(Im)を入力する第1の入力部と、
複素数Yの実数部Y(Re)および虚数部Y(Im)を入力する第2の入力部と、
複素数Zの実数部Z(Re)および虚数部Z(Im)を入力する第3の入力部と、
複素数Pの実数部P(Re)を、P(Re)=X(Re)+Y(Re)なる演算式に基づいて演算するとともに、複素数Pの虚数部P(Im)を、P(Im)=X(Im)+Y(Im)なる演算式に基づいて演算する第1の演算部と、
複素数Qの実数部Q(Re)を、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式に基づいて演算するとともに、複素数Qの虚数部Q(Im)を、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式に基づいて演算する第2の演算部と、
前記第1の演算部によって求められた複素数Pの実数部P(Re)および虚数部P(Im)のうちの必要な有効桁数に相当する部分を出力する第1の出力部と、
前記第2の演算部によって求められた複素数Qの実数部Q(Re)および虚数部Q(Im)のうちの必要な有効桁数に相当する部分を出力する第2の出力部と、
を備え、
前記第1の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)」とを入力し、
前記第2の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)」とを入力し、
前記第3の入力部は、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)」と、「符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)」とを入力し、
前記第2の演算部は、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、実数部Q(Re)を求めるとともに、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づくビットごとの演算により、虚数部Q(Im)を求めることを特徴とする複素数の積和演算装置。 - 請求項1〜3のいずれかに記載の複素数の積和演算装置において、
第2の演算部が、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行うために、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを有することを特徴とする複素数の積和演算装置。 - 請求項1に記載の複素数の積和演算装置において、
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有することを特徴とする複素数の積和演算装置。 - 請求項2に記載の複素数の積和演算装置において、
第2の演算部が、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有することを特徴とする複素数の積和演算装置。 - 請求項3に記載の複素数の積和演算装置において、
第2の演算部が、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタと、
を有することを特徴とする複素数の積和演算装置。 - 請求項1〜7のいずれかに記載の複素数の積和演算装置を備え、第m番目の入力信号Amを複素数X、第(m+1)番目の入力信号Am+1を複素数Y、回転因子Wkを複素数Zとして前記積和演算装置に与えることにより、バタフライ演算を実行するFFT演算装置。
- 実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式で示される実数部Q(Re)をもった複素数Qを求める演算を行う方法であって、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)を求める段階と、
を有し、
前記各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。 - 請求項9に記載の複素数の積和演算方法において、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。 - 実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式で示される虚数部Q(Im)をもった複素数Qを求める演算を行う方法であって、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して虚数部Q(Im)を求める段階と、
を有し、
前記各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。 - 請求項11に記載の複素数の積和演算方法において、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。 - 実数部X(Re)および虚数部X(Im)からなる複素数Xと、実数部Y(Re)および虚数部Y(Im)からなる複素数Yと、実数部Z(Re)および虚数部Z(Im)からなる複素数Zと、に基づいて、Q(Re)=(X(Re)−Y(Re))・Z(Re)−(X(Im)−Y(Im))・Z(Im)なる演算式で示される実数部Q(Re)およびQ(Im)=(X(Re)−Y(Re))・Z(Im)+(X(Im)−Y(Im))・Z(Re)なる演算式で示される虚数部Q(Im)をもった複素数Qを求める演算を行う方法であって、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、an−1,an−2,...,a1,a0なるビットを有する実数部X(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、bn−1,bn−2,...,b1,b0なるビットを有する虚数部X(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、cn−1,cn−2,...,c1,c0なるビットを有する実数部Y(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、dn−1,dn−2,...,d1,d0なるビットを有する虚数部Y(Im)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、en−1,en−2,...,e1,e0なるビットを有する実数部Z(Re)をレジスタ上に用意する段階と、
符号を示す最上位ビットからなる符号部と、絶対値を示す(n−1)ビットからなる非符号部と、によって構成され(但し、n≧2)、2の補数表現により負数を表現した合計nビットのデジタルデータとして、最上位ビット側から順に、fn−1,fn−2,...,f1,f0なるビットを有する虚数部Z(Im)をレジスタ上に用意する段階と、
各レジスタに格納されている個々のビットに対して、
Q(Re)=
−{(an−1 OR en−1)+(cn−1 OR ebarn−1)
+(dn−1 OR fn−1)+(bn−1 OR fbarn−1)}・22n
+(an−1+dn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・ei)+(an−1・ebari)
+(bn−1・fi)+(dn−1・fbari)
+(en−1・abari)+(ebarn−1・cbari)
+(fn−1・dbari)+(fbarn−1・bbari)}・2n+i]
+Σi=0 〜n-1[(bi+ci)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・ej)+(ci・ebarj)+(di・fj)+(bi・fbarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
各レジスタに格納されている個々のビットに対して、
Q(Im)=
−{(an−1 OR fn−1)+(cn−1 OR fbarn−1)
+(bn−1 OR en−1)+(dn−1 OR ebarn−1)}・22n
+(an−1+bn−1)・2n+2n+1
+Σi=0 〜n-1[
{(cn−1・fi)+(an−1・fbari)
+(dn−1・ei)+(bn−1・ebari)
+(fn−1・abari)+(fbarn−1・cbari)
+(en−1・bbari)+(ebarn−1・dbari)}・2n+i]
+Σi=0 〜n-1[(ci+di)2i]
+Σi=0 〜n-1Σj=0 〜n-1[
{(ai・fj)+(ci・fbarj)+(bi・ej)+(di・ebarj)}・2i+j]
なる演算式(但し、ORは論理和演算子であり、記号barが介挿されたビットは、介挿前のビットに対する論理反転ビットを示す)に基づく演算を演算器に実行させ、各桁の部分積項を求める段階と、
加算器を用いて、求められた部分積項を各桁について加算して実数部Q(Re)および虚数部Q(Im)を求める段階と、
を有し、
前記各桁の部分積項を求める段階において、ビットK,L,M,Mbar(但し、MbarはMの論理反転ビット)について「(K・M)+(L・Mbar)」なる式で表される演算を行う場合に、ビットK,Lを入力とし、ビットMの論理値に基づいて、ビットKもしくはLのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。 - 請求項13に記載の複素数の積和演算方法において、
「(cn−1・ei)+(an−1・ebari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bn−1・fi)+(dn−1・fbari)」なる論理演算を行うために、ビットbn−1およびdn−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・abari)+(ebarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・dbari)+(fbarn−1・bbari)」なる論理演算を行うために、ビットdbariおよびbbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・ej)+(ci・ebarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(di・fj)+(bi・fbarj)」なる論理演算を行うために、ビットdiおよびbiを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(cn−1・fi)+(an−1・fbari)」なる論理演算を行うために、ビットcn−1およびan−1を入力とし、ビットfiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(dn−1・ei)+(bn−1・ebari)」なる論理演算を行うために、ビットdn−1およびbn−1を入力とし、ビットeiの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(fn−1・abari)+(fbarn−1・cbari)」なる論理演算を行うために、ビットabariおよびcbariを入力とし、ビットfn−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(en−1・bbari)+(ebarn−1・dbari)」なる論理演算を行うために、ビットbbariおよびdbariを入力とし、ビットen−1の論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(ai・fj)+(ci・fbarj)」なる論理演算を行うために、ビットaiおよびciを入力とし、ビットfjの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用い、
「(bi・ej)+(di・ebarj)」なる論理演算を行うために、ビットbiおよびdiを入力とし、ビットejの論理値に基づいて、入力したビットのいずれかを選択して出力するセレクタを用いることを特徴とする複素数の積和演算方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008094553A JP2009245407A (ja) | 2008-04-01 | 2008-04-01 | 複素数の積和演算装置および積和演算方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008094553A JP2009245407A (ja) | 2008-04-01 | 2008-04-01 | 複素数の積和演算装置および積和演算方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009245407A true JP2009245407A (ja) | 2009-10-22 |
Family
ID=41307173
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008094553A Pending JP2009245407A (ja) | 2008-04-01 | 2008-04-01 | 複素数の積和演算装置および積和演算方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009245407A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013512491A (ja) * | 2009-11-30 | 2013-04-11 | コミサリアト ア レネルジー アトミクー エ オ エネルジーズ アルタナティヴズ | Fft/ifftを実行するバタフライ演算器を有するデジタルデータ処理プロセッサおよび移動通信端末 |
JP2013512492A (ja) * | 2009-11-30 | 2013-04-11 | コミサリアト ア レネルジー アトミクー エ オ エネルジーズ アルタナティヴズ | 加算/減算ハードウェア演算器、プロセッサおよびこのような演算器を備える移動通信端末 |
-
2008
- 2008-04-01 JP JP2008094553A patent/JP2009245407A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013512491A (ja) * | 2009-11-30 | 2013-04-11 | コミサリアト ア レネルジー アトミクー エ オ エネルジーズ アルタナティヴズ | Fft/ifftを実行するバタフライ演算器を有するデジタルデータ処理プロセッサおよび移動通信端末 |
JP2013512492A (ja) * | 2009-11-30 | 2013-04-11 | コミサリアト ア レネルジー アトミクー エ オ エネルジーズ アルタナティヴズ | 加算/減算ハードウェア演算器、プロセッサおよびこのような演算器を備える移動通信端末 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102447636B1 (ko) | 부동 소수점 수를 누산하기 위한 산술 연산을 수행하는 장치 및 방법 | |
US8078835B2 (en) | Reconfigurable array processor for floating-point operations | |
JP3750820B2 (ja) | パック・データの乗加算演算を実行する装置 | |
CN110955406A (zh) | 浮点动态范围扩展 | |
JPH076161A (ja) | 周波数から時間領域への変換方法及び装置 | |
JP4199100B2 (ja) | 関数演算方法及び関数演算回路 | |
WO1999066423A1 (fr) | Dispositif pour calcul de donnees | |
CN110349245A (zh) | 高精度纹理过滤 | |
JP2502836B2 (ja) | 除算回路の前処理装置 | |
JPWO2011161859A1 (ja) | 半導体集積回路及び指数算出方法 | |
JP2009245407A (ja) | 複素数の積和演算装置および積和演算方法 | |
JPH06203098A (ja) | 論理回路の自動設計方法およびその装置、並びに乗算器 | |
JP2010072981A (ja) | 複素数の積和演算装置および積和演算方法 | |
JP3660075B2 (ja) | 除算装置 | |
EP1936492A1 (en) | SIMD processor with reduction unit | |
JP5589628B2 (ja) | 内積演算装置および内積演算方法 | |
CN109669667B (zh) | 一种在定点dsp芯片上实现的数据处理方法及装置 | |
JP3613466B2 (ja) | データ演算処理装置及びデータ演算処理プログラム | |
JP4954019B2 (ja) | 演算装置 | |
JP3736745B2 (ja) | データ演算処理装置及びデータ演算処理プログラム | |
JP3336986B2 (ja) | 信号処理プロセッサ及びそれに用いる丸め機能付き積和演算器 | |
WO2023100372A1 (ja) | データ処理装置、データ処理方法、及びデータ処理プログラム | |
Lloris Ruiz et al. | Multiplication | |
JP2508286B2 (ja) | 平方根演算装置 | |
CN116991362A (zh) | 模乘运算处理方法、装置、电子设备及可读介质 |