(57)【要約】      （修正有）【課題】  高速で直交変換処理を実行することのできる半導体信号処理装置を提供する。【解決手段】  メモリセルマット（３０）を各サンプリングポイントに応じて複数のエントリ（ＥＲＹ０−ＥＲＹ７）に分割し、各エントリにおいて、演算対象データ格納領域（５０）、中間値を格納するテンポラリー領域（５２）、係数データ格納領域（５４）および演算実行可否制御データ格納領域（５０）を設ける。メモリセルマット外部に、選択的に指定された演算操作を実行するＡＬＵ群およびＡＬＵ間のデータ転送経路を設定するスイッチ回路を配置する。高速フーリエ変換操作の信号フローに従って、エントリには基本バタフライ演算の双対ノードのデータを格納し、また、信号フロー図の各ノードに対応して係数データを格納する。複数のエントリにおいてエントリパラレルかつビットシリアル態様で乗算、加算および減算を行なって、基本バタフライ演算を実行する。【選択図】        図３１
2007004542.tif 000002
【特許請求の範囲】
【請求項１】
高速フーリエ変換処理を行なうための半導体信号処理装置であって、
複数のエントリに分割され、各エントリが前記フーリエ変換処理におけるバタフライ演算を行なう組のデータ、演算時の係数データおよび該エントリの格納データに対する演算の実行可否を指定する制御データを格納するメモリマット、
各前記エントリに対応して配置され、データを格納するレジスタおよび演算を実行する演算器を各々が含み、対応のエントリの制御データに従って選択的に活性化されて、活性化時演算を実行して対応のエントリの格納データに前記バタフライ演算処理を行なう複数の単位演算回路ブロック、
前記複数の単位演算回路ブロック間でデータの転送を行なう演算ブロック間データ転送回路、
前記メモリセルアレイと前記単位演算回路ブロックの間でのデータ転送を行なうエントリデータ転送回路、および
前記エントリデータ転送回路のデータ転送、各前記エントリに対するデータの書込および読出、前記基本演算ブロックにおける演算の指定および前記ブロック間転送回路の動作を制御する制御回路を備え、前記制御回路は、各前記エントリに対して各前記動作を並行に制御する、半導体信号処理装置。
【請求項２】
前記フーリエ変換処理のデータは、実数部と虚数部とを有し、
前記複数のエントリは、各バタフライ演算データについて実数部のデータを格納する第１のエントリと虚数部のデータを格納する前記第１のエントリと異なる第２のエントリとを備える、請求項１記載の半導体信号処理装置。
【請求項３】
前記第１および第２のエントリは、各々、前記バタフライ演算において双対ノードの入力データを格納する、請求項２記載の半導体信号処理装置。
【請求項４】
前記複数のエントリは、前記メモリセルアレイの一方方向に整列して配置されてかつ連続番号が付され、
前記演算ブロック間転送回路は、ｎを非負の整数として前記複数のエントリにおいて２のｎ乗離れた位置のエントリに対応する基本演算ブロック間のデータ転送を行なうように前記制御回路により転送経路が設定される、請求項１記載の半導体信号処理装置。
【請求項５】
前記高速フーリエ変換はＮ段のバタフライ演算処理を含み、
前記制御回路は、ｎ段目のバタフライ演算においては、
前記制御データを前記単位演算回路ブロックに転送して選択的に前記単位演算回路ブロックを活性化して、前記ｎ段目のバタフライ演算段に対する係数データと前記エントリのデータとの乗算を行い、前記メモリマットのテンポラリ領域に乗算結果を格納させ、
２のｎ乗離れたエントリ間で一方方向にデータを転送して格納させてコピーデータで転送先のエントリのデータを書換え、
前記コピーデータと前記テンポラリ領域に格納されたデータの減算および加算を行って、減算および加算結果をそれぞれ隣接エントリのデータ格納領域に格納するように動作制御し、前記隣接エントリには、双対ノードの出力データがそれぞれ格納される、請求項１記載の半導体信号処理装置。
【請求項６】
前記複数のエントリは、変換処理されるデータおよび係数の実数成分を格納する第１エントリと、前記変換処理されるデータおよび前記係数の虚数成分を格納する第２エントリとを含み、
前記エントリの各々においては、フーリエ変換のバタフライ演算の双対ノードのデータが格納され、
前記高速フーリエ変換はＮ段のバタフライ演算処理を含み、
前記制御回路は、ｎを０からＮ−１の整数として、ｎ段目のバタフライ演算においては、
各エントリにおいて、双対ノードの下側ノードの入力データと対応の係数データとの乗算を行わせ、該乗算結果を対応のエントリの第１の領域に格納させ、
１ビット離れた隣接エントリの係数データの交換を行わせて、各係数データの実数成分および虚数成分を交換させ、
各前記エントリの双対ノードの下側ノードの入力データと交換後の係数データとの乗算を行い、該乗算結果を対応のエントリの第２の領域に格納させ、
前記演算ブロック間転送回路を介してデータを１ビットシフトして転送させて、対を成すエントリの第１領域および第２領域の格納データの加算および減算を行って、該減算および加算結果を、対を成すエントリの第１のエントリの前記第１領域および第２のエントリの前記第２領域にそれぞれ格納させ、
前記複数のエントリの第２のエントリにおいて、前記第１領域へ第２領域のデータを転送して格納させ、
各前記エントリにおいて、前記双対ノードの上側ノードのデータと前記第１の領域のデータの加算および前記双対ノードの下側ノードのデータと前記第２の領域のデータとの減算を行い、該演算結果をそれぞれ上側ノードデータおよび下側データ格納領域に格納するように動作制御する、請求項１記載の半導体信号処理装置。
【請求項７】
前記制御回路は、さらに、前記ｎが１以上のときには、演算開始前に、前記第１および第２のエントリの２のｎ乗離れたエントリの下側ノードデータと上側ノードデータの交換を行い、各エントリにおいては双対ノードの入力データが配置されるように、データ転送および格納動作を制御する、請求項６記載の半導体信号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、デジタル信号に対して直交変換処理を行う半導体信号処理装置に関し、特に、高速フーリエ変換を半導体メモリを用いて高速に実行する半導体信号処理装置の構成に関する。
【背景技術】
【０００２】
音声および画像などのデータの解析および処理のために、直交変換処理が広く用いられる。この直交変換処理の１つに、フーリエ変換処理があり、このフーリエ変換処理を高速で実行するためのアルゴリズムとして、高速フーリエ変換（ＦＦＴ）処理がある。この高速フーリエ変換（ＦＦＴ）は、音声信号および画像信号を周波数領域で表現して解析するため、広く用いられている。携帯機器などの端末装置においても、音声データおよび画像データなどの大量のデータを高速で処理することが要求され、このようなフーリエ変換を高速かつ低消費電力でデジタル処理することへの重要性が高くなってきている。
【０００３】
デジタル信号処理においては、専用の半導体装置としてＤＳＰ（デジタル・シグナル・プロセッサ）が一般的に用いられる。音声および画像データに対するデジタル信号処理においては、フィルタ処理などのデータ処理が行なわれる。このような処理においては、積和演算を繰返す演算処理が多い。したがって、ＤＳＰの構成においては、一般に、乗算回路、加算回路および累算用のレジスタが設けられる。このような専用のＤＳＰを用いる場合、積和演算を１マシンサイクルで実行することが可能となり、高速演算処理が可能となる。
【０００４】
このような専用のＤＳＰを利用してＦＦＴ処理を実行する場合、ＦＦＴ処理の基本演算であるバタフライ演算が繰返し実行される。したがって、専用のＤＳＰを用いた場合、積和演算が１マシンサイクルで実行されるものの、バタフライ演算では、画像データの実数部および虚数部を考慮すると、１２クロックサイクルが必要となり、サンプリング数が増大すると、バタフライ演算の数が応じて増大し、高速でＦＦＴ処理を実行することができなくなる。
【０００５】
このＦＦＴの高速実行を目的とする構成が、特許文献１（特開２００１−５６８０６号公報）および特許文献２（特開２００２−３２３５８号公報）に示されている。
【０００６】
特許文献１に示される高速フーリエ変換装置においては、１つのバタフライ演算において同時に用いられる入出力データ（ＦＦＴの基数）に応じて複数のメモリ（ＲＡＭ：ランダム・アクセス・メモリ）を配置し、演算対象のデータおよび演算処理後のデータを並列にこれらの複数のメモリとバタフライ演算部２との間で転送することにより、メモリアクセスに要する時間を低減し、応じて、バタフライ演算に要する時間を制限することを図る。
【０００７】
特許文献２に示される構成においては、２個の乗算器と、２個の演算論理ユニット（ＡＬＵ）と、２個の第１サイクルレジスタと、２個の第２のサイクルレジスタと、マルチプレクサとが設けられる。乗算器においては、データおよび係数の乗算を行ない、演算論理ユニットは、乗算器の出力データと第２のデータとを受け、加算または減算を行なう。第１サイクルレジスタに、連続する演算サイクルの第１演算サイクル中の演算論理ユニットの出力結果を格納し、第２サイクルレジスタは、この第２演算サイクル中の計算された演算論理ユニットの出力を受けて格納する。マルチプレクサにより、第１および第２のサイクルレジスタの出力を交互に選択してメモリに書込む。
【０００８】
この特許文献２は、バタフライ演算を、複数の乗算器および演算論理ユニットを用いて乗算、加算および減算を並行して実行することにより、バタフライ演算に要する時間を低減することを図る。
【特許文献１】特開２００１−０５６８０６号公報
【特許文献２】特開２００２−０３２３５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
一般に、専用のＤＳＰを利用する場合、１つ１つの処理が高速であるものの、データ処理が直列に行なわれるため、データ量が多くなればそれに比例して処理時間が増大する。また、ＤＳＰにおいては、その性能が動作周波数に大きく依存しており、高速処理を優先した場合、消費電力が増大する。また、ＤＳＰは、一般にある用途に特化して設計されるため、演算データのビット幅および演算回路の構成等が固定されており、他の用途に転用する場合には柔軟性に欠けることが多い。
【００１０】
また、特許文献１に示される構成においては、バタフライ演算の入力ノード数に応じた数だけメモリを設け、このバタフライ演算の入力データおよび出力データが並列にメモリとの間で転送される。したがって、メモリへのアクセスサイクル数を低減することが可能であるものの、サンプリング対に対する基本バタフライ演算が直列的に実行されるため、サンプリング点が増大すると、応じて、バタフライ演算の数も増大し、ＦＦＴ処理の時間が増大する。
【００１１】
また、この特許文献１に示される構成においても、メモリとバタフライ演算部との間の転送データバスのビット幅は、一定であり、演算データのビット幅の変更に対しては柔軟に対応することができない。特許文献１は、バタフライ演算部の構成については、明確には示しておらず、バタフライ演算自体を高速化することについては考慮していない。
【００１２】
特許文献２に示される構成においては、バタフライ演算における係数とデータとの乗算賀状慙愧において実行され、乗算結果の加算および減算は、複数系統設けられる演算論理ユニットにより実行されてＦＦＴ結果を生成する、このＦＦＴ結果がマルチプレクサにより順次選択されてメモリに格納される。したがって、この特許文献２に示される構成においても、バタフライ演算のサイクル数は、並列演算およびメモリへのパイプライン転送により低減することができるものの、サンプリング点数が増大した場合、同様、ＦＦＴ処理に要する時間が増大する。また、演算系統における転送データのビット幅は一定であり、演算データのビット幅の変更に柔軟に対応することができない。
【００１３】
それゆえ、この発明の目的は、高速で、サンプリング点数にかかわらず、高速フーリエ変換（ＦＦＴ）処理等の直交変換処理を行なうことのできる半導体信号処理装置を提供することである。
【課題を解決するための手段】
【００１４】
この発明に係る半導体信号処理装置は、複数エントリに分割されかつ各々がフーリエ変換処理におけるバタフライ演算を行なう組のデータ演算時の係数データおよび該エントリの格納データに対する演算の実行可否を指定する制御データを格納するメモリセルアレイと、各エントリに対応して配置され、データを格納するレジスタおよび演算を実行する演算器を含み、対応のエントリの制御データが演算実行を指定するとき対応のエントリの格納データにバタフライ演算処理を行なう複数の基本演算ブロックと、これら複数の基本演算ブロック間でデータの転送を行なう演算ブロック間データ転送回路と、メモリセルアレイと基本演算ブロック間でのデータ転送を行なうエントリ転送回路と、このエントリ転送回路のデータの転送、各エントリにおけるデータの書込および読出、この演算ブロックにおける演算の所定およびブロック間転送回路の動作を制御する制御回路を備える。この制御回路は、各エントリに対して動作制御を並行に行なう。
【発明の効果】
【００１５】
この発明に係る半導体信号処理においては、メモリセルアレイを複数のエントリに分割し、各エントリにおいて演算対象データおよび演算実行制御データを格納するとともに、所定のエントリに、変換係数データを格納している。エントリ間は、演算ブロック転送回路により、必要なデータの転送を行なうことができる。したがって、各エントリにおいて、並列にバタフライ演算を実行することができ、変換対象のサンプリング点の数が増大しても、基本バタフライ演算に要するクロックサイクル内で、演算対象のサンプリング点に対するバタフライ演算を実行することができる。これにより、サンプリング点数増大時においても、フーリエ変換に要する時間の増大を抑制することができ、高速にＦＦＴ処理等の直交変換処理を実行することができる。
【００１６】
また、各エントリに対応して基本演算ブロックが配置され、このエントリのデータを基本演算ブロックへ転送して演算処理を実行しており、演算対象のデータのビット幅増大時においても、エントリ内に格納される演算データのビット幅が増大するだけであり、演算対象ビット幅の変更に対し柔軟に対応することができる。また、基本演算ブロックは、レジスタと演算器が配置されているだけであり、変換演算処理の内容変更時においても、基本演算ブロックの構成を変更することなく処理手順を変更するだけで対応することができ、処理内容変更に対しても柔軟に対応することができる。
【発明を実施するための最良の形態】
【００１７】
［実施の形態１］
ディジタル信号処理において、長さＮのディジタル信号列ｘｎとそのスペクトル列Ｘｎは、次式（１）で示されるＮ点離散フーリエ変換（ＤＦＴ）により結合される。
【００１８】
【数１】
2007004542.tif 000003
【００１９】
高速フーリエ変換（ＦＦＴ）は、上式（１）の離散フーリエ変換において演算時間を要する乗算の重複をなくす計算手順を実行することにより、効率的に変換を行なう。上述の長さＮの信号列ｘｎから、偶数番目のサンプルおよび奇数番目のサンプルを取出して、それぞれ、長さＮ／２の配列を形成し、それぞれｂｎおよびｃｎとする。
【００２０】
【数２】
2007004542.tif 000004
【００２１】
上式（２）の信号系列ｂｎおよびｃｎのＮ／２点ＤＦＴ（離散フーリエ変換）を、それぞれＢｎ，Ｃｎとすると、これらは、それぞれ、次式（３）で表わされる。
【００２２】
【数３】
2007004542.tif 000005
【００２３】
したがって、信号系列ｘｎのフーリエ変換Ｘｋは、これらのＢｋおよびＣｋを用いて、次式で表わされる。
【００２４】
【数４】
2007004542.tif 000006
【００２５】
したがって、Ｎ点離散フーリエ変換Ｘｋは、２つのＮ／２点離散フーリエ変換ＢｋおよびＣｋから、上式（４）により導き出される。
【００２６】
図１は、上述のＤＦＴの計算手法のＮ＝８の場合のデータフローを示す図である。偶数信号（サンプル）列ｘ［０］、［４］、ｘ［２］、およびｎ［６］は、上式（３）に示す信号列Ｂｋに対応し、奇数の信号列ｘ［１］、ｘ［５］、ｘ［３］およびｘ［７］は、上式（３）における信号列Ｃｋに対応する。
【００２７】
図１に示すデータフローにおいては、信号系列ＢｋおよびＣｋにおいてＮ点ＤＦＴを、２つのＮ／２点ＤＦＴに分割される。これらのＮ／２点ＤＦＴに対しさらに上述の関係式を適用し、Ｎ／４点ＤＦＴを求め、最終的に、２点ＤＦＴにまで分解する。この２点ＤＦＴは、基本バタフライ演算ＢＢＯであり、ＤＦＴを、このような２点ＤＦＴに分関して順次計算する手法が、ＦＦＴ（高速フーリエ変換）と呼ばれる。この基本バタフライ演算ＢＢＯにおいては、白丸記号で示す演算部において係数Ｗｋと下側に与えられる入力との乗算が行なわれ、かつ演算ノードの上側のノードに与えられる信号と乗算結果の加算または減算が実行される。基本バタフライ演算ＢＢＯは、信号成分が、実数成分および虚数成分を有しており、次式（５Ａ）および（５Ｂ）で示される。
【００２８】
【数５】
2007004542.tif 000007
【００２９】
上式（５Ａ）および（５Ｂ）に対する式の定義において、符号Ｒｅは、対応の信号の実数部を示し、Ｉｍは対応の信号の虚数部を示す。ｊは、虚数である。
【００３０】
すなわち、図１において、信号ｘ［０］およびｘ［４］を、それぞれ信号ｘ［ｉ］およびｘ［ｉ＋ｎ］とすると、係数Ｗ0およびＷ4を用いて、２点ＤＦＴ演算、すなわち基本バタフライ演算結果ｘ′［０］およびｘ′［４］が生成される。
【００３１】
基本バタフライ演算処理において、専用のＤＳＰを用いて積和演算または積差演算を１マシンサイクルで実行するとともに各演算を直列に実行した場合、式（５Ａ）および（５Ｂ）において、それぞれ係数Ｗの値が異なるため、それぞれ６クロックサイクル必要とされ、合計１２クロックサイクルが必要とされる。１回の計算において、基本バタフライ演算は、４回実行され、このＦＦＴを完了するまでに、計算段数は、合計３段であり、したがって合計１４４（＝１２×４×３）クロックサイクルが必要とされる。Ｎ＝２０４８の場合には、１回の計算に、基本バタフライ演算は、１０２４回行なわれ、計算段数は、１１段であり、合計１３５１６８クロックサイクルが必要となる。一般に、Ｎが、２のｒ乗の場合には、Ｎ点ＤＦＴのｒ回の分解で２点ＤＦＴ（基本バタフライ演算ブロック）に分解され、この基本バタフライ演算を順次、各演算段ごとに入力信号の距離を１／２倍ずつ半減して実行することによりＮ点ＤＦＴが得られる。このＮ点ＤＦＴ（Ｎ＝２のｒ乗の場合）は、式（１）に従う定義に基づいて演算を実行すると、乗算回数は、Ｎの２乗となる。一方、ＦＦＴにおいては、式（５Ａ）および（５Ｂ）における乗算のみを考慮する必要があり、乗算回数は、ｒ・Ｎ＝Ｎ・ｌｏｇ2Ｎとなる。したがって、乗算回数が大幅にＦＦＴの場合に低減され、高速のフーリエ変換処理が実現される。
【００３２】
一般に、ＤＦＴ処理においては、上述のようなバタフライ演算を利用するＦＦＴ処理が実行される。ＦＦＴにおいても、各基本バタフライ演算を、直列に実行すると、処理時間がサンプリング点数に応じて増大し、高速化が困難である。本発明においては、このＦＦＴ処理を、以下の構成を利用して高速で演算対象データの数にかかわらず処理する。
【００３３】
図１は、この発明の実施の形態１に従う半導体信号処理装置に要する処理システムの全体の構成を概略的に示す図である。図２において、処理システムは、並列演算を実行する半導体演算装置１と、この半導体演算装置１における処理の制御、システム全体の制御およびデータ処理を行なうホストＣＰＵ２と、システムの主記憶として利用されて必要な種々のデータを格納するメモリ３と、メモリ３に対し直接ホストＣＰＵ２を介することなくアクセスするＤＭＡ（ダイレクト・メモリ・アクセス）回路４とを含む。ＤＭＡ回路４の制御により、メモリ３と半導体演算装置１との間でデータ転送を行なうことができ、また、半導体演算装置１へ直接アクセスすることができる。
【００３４】
ホストＣＰＵ２、メモリ３、ＤＭＡ回路４、および半導体演算装置１は、システムバス５を介して相互接続される。半導体演算装置１は、複数の並列に設けられる基本演算ブロックＦＢ１−ＦＢｎと、システムバス５との間でデータ／命令を転送する入出力回路１０と、この半導体演算装置１内部での動作処理を制御する集中制御ユニット１５を含む。
【００３５】
基本演算ブロックＦＢ１−ＦＢｎおよび入出力回路１０は、内部データバス１２に結合され、また、集中制御ユニット１５、入出力回路１０および基本演算ブロックＦＢ１−ＦＢｎは、内部バス１４に結合される。基本演算ブロックＦＢ（ＦＢ１−ＦＢｎを総称的に示す）の間には、隣接ブロック間データバス１６が設けられる。図２においては、基本演算ブロックＦＢ１およびＦＢ２の間に配置される隣接ブロック間データバス１６を代表的に示す。
【００３６】
基本演算ブロックＦＢ１−ＦＢｎを並列に設け、半導体演算装置１の内部で並列に同一または異なる演算処理を実行する。これらの基本演算ブロックＦＢ１−ＦＢｎは、同一構成を有するため、図２においては、基本演算ブロックＦＢ１の構成を代表的に示す。
【００３７】
基本演算ブロックＦＢ１は、メモリセルアレイ（メモリセルマット）および演算器を含む主演算回路２０と、マイクロコード化された実行プログラムを格納するマイクロプログラム格納メモリ２３と、基本演算ブロックＦＢ１の内部動作を制御するコントローラ２１と、アドレスポインタ等として用いられる複数のレジスタを含むレジスタ群２２と、主演算回路２０における不良の救済を行なうためのヒューズプログラムを実行するためのヒューズ回路２４を含む。
【００３８】
コントローラ２１は、ホストＣＰＵ２からシステムバス５および入出力回路１０を介して与えられる制御命令により制御が手渡され、対応の基本演算ブロックＦＢ（ＦＢ１−ＦＢｎ）の動作を制御する。これらの基本演算ブロックＦＢ１−ＦＢｎそれぞれに、マイクロプログラム格納メモリ２３を設け、コントローラ２１がメモリ２３内に実行プログラムを格納することにより、基本演算ブロックＦＢ１−ＦＢｎそれぞれにおいて実行する処理内容を個々に変更することができ、基本演算ブロックＦＢ１−ＦＢｎにおいてそれぞれ演算実行される処理内容を変更することができる。
【００３９】
隣接ブロック間データバス１６は、内部データバス１２を占用することなく基本演算ブロック間の高速データ転送を可能とする。たとえば、ある基本演算ブロックに内部データバス１２を介してデータ転送中に、別の基本演算ブロック間で、隣接ブロック間データバス１６を利用してデータ転送を行なうことができる。
【００４０】
集中制御ユニット１５は、制御用ＣＰＵ２５と、制御用ＣＰＵ２５が実行する命令を格納する命令メモリ２６と、制御用ＣＰＵ２５のワーキングレジスタまたはポインタ格納用のレジスタを含むレジスタ群２７と、マイクロプログラムのライブラリを格納するマイクロプログラムライブラリ格納メモリ２８を含む。集中制御ユニット１５は、内部バス１４を介してホストＣＰＵ２から制御キーを手渡されて内部バス１４を介して基本演算ブロックＦＢ１−ＦＢｎの処理動作を制御する。
【００４１】
マイクロプログラムライブラリ格納メモリ２８に、各種シーケンス処理がコード化されたマイクロプログラムをライブラリとして格納することにより、集中制御ユニット１５から必要なマイクロプログラムを選択して基本演算ブロックＦＢ１−ＦＢｎのマイクロプログラム格納メモリ２３に格納されるマイクロプログラムを変更することができ、処理内容の変更に柔軟に対応することができる。
【００４２】
また、ヒューズ回路２４を利用することにより、基本演算ブロックＦＢ１−ＦＢｎそれぞれにおいて不良が発生した場合、冗長置換を用いて不良救済を行なうことにより歩留りを改善する。
【００４３】
図３は、図２に示す基本演算ブロックＦＢ１−ＦＢｎ各々に含まれる主演算回路２０の要部の構成を概略的に示す図である。図３において、主演算回路２０は、メモリセルＭＣが行列状に配列されるメモリマット３０と、このメモリマット３０の一方端に配置される演算処理ユニット（ＡＬＵ）群３２を含む。
【００４４】
メモリマット３０においては、行列状に配列されるメモリセルＭＣが、ｍ個のエントリＥＲＹに分割される。各エントリＥＲＹは、ｎビットのビット幅を有し、本実施の形態１においては、１つのエントリＥＲＹは、１列のメモリセルで構成される。
【００４５】
演算処理ユニット群３２は、エントリＥＲＹそれぞれに対して設けられる演算処理ユニット（ＡＬＵ）３４を含む。演算処理ユニット３４は、加算、論理積、一致検出（ＥＸＯＲ）、および反転（ＮＯＴ）などの演算を実行することができる。
【００４６】
エントリＥＲＹと対応の演算処理ユニット３４の間でデータのロードおよびストアを行なって演算処理を実行する。エントリＥＲＹは、メモリマット３０の列方向に整列して配置されるメモリセルＭＣで構成され、演算処理ユニット（ＡＬＵ）３４は、ビットシリアル態様、すなわち、データワードをビット単位で処理する態様で演算処理を実行する。各エントリＥＲＹには、演算対象のデータワードがそれぞれ格納され、演算処理ユニット群３２において、ビットシリアルかつ複数のエントリが並行して処理されるエントリパラレルな態様でデータの演算処理が実行される。
【００４７】
演算処理ユニット（ＡＬＵ）３４において、ビットシリアル態様で演算処理を実行することにより、演算対象のデータのビット幅が異なる場合においても、単に演算サイクル数がデータワードのビット幅に応じて変更されるだけであり、その処理内容は変更されず、語構成の異なるデータを容易に処理することができる。
【００４８】
また、複数のエントリＥＲＹのデータを、演算処理ユニット群３２において並行して処理することができ、エントリ数ｍを大きくすることにより、大量のデータを一括して演算処理することができる。本実施の形態１においては、このエントリにＦＦＴ処理対象のデータを格納し、演算処理ユニット群３２のＡＬＵ３４を利用して、複数のバタフライ演算を並列に実行し、大量のデータのＦＦＴ演算処理を高速で実行する。ここで、一例として、エントリ数ｍは、１０２４であり、１エントリのビット幅ｎは、５１２ビットである。
【００４９】
図４は、図３に示すメモリセルＭＣの構成の一例を示す図である。図４において、メモリセルＭＣは、電源ノードとストレージノードＳＮ１の間に接続されかつそのゲートがストレージノードＳＮ２に接続されるＰチャネルＭＯＳトランジスタ（絶縁ゲート型電界効果トランジスタ）ＰＱ１と、電源ノードとストレージノードＳＮ２の間に接続されかつそのゲートがストレージノードＳＮ１に接続されるＰチャネルＭＯＳトランジスタＰＱ２と、ストレージノードＳＮ１と接地ノードの間に接続されかつそのゲートがストレージノードＳＮ２に接続されるＮチャネルＭＯＳトランジスタＮＱ１と、ストレージノードＳＮ２と接地ノードの間に接続されかつそのゲートがストレージノードＳＮ１に接続されるＮチャネルＭＯＳトランジスタＮＱ２と、ワード線ＷＬ上の電位に応答してストレージノードＳＮ１およびＳＮ２をそれぞれ、ビット線ＢＬおよび／ＢＬに接続するＮチャネルＭＯＳトランジスタＮＱ３およびＮＱ４を含む。
【００５０】
この図４に示すメモリセルＭＣは、フルＣＭＯＳ（相補ＭＯＳ）構成のＳＲＡＭ（スタティック・ランダム・アクセス・メモリ）セルであり、高速でデータの書込／読出を行なう。このメモリセルＭＣとしては、データの書込経路およびデータの読出経路が異なるデュアルポートＳＲＡＭセルが用いられてもよく、また、２つのＤＲＡＭセルがビット線ＢＬおよび／ＢＬの間に直列に接続されかつ共通のワード線ＷＬの電位により選択状態とされる「ツインセル構造」のＤＲＡＭ（ダイナミック・ランダム・アクセス・メモリ）セルユニットが用いられてもよい。
【００５１】
図３に示す主演算回路２０において演算を行なう場合には、基本的には、以下の手順が用いられる。また、各エントリＥＲＹに演算対象データの格納が行なわれる。次いで格納されたデータのある桁のビットが、すべてのエントリＥＲＹについて並列に読出され、対応の演算処理ユニット（ＡＬＵ）３４へ転送（ロード）される。２項演算の場合には、各エントリＥＲＹにおいて別のデータワードのビットに対しても同様の転送動作を行なった後、各演算処理ユニット（ＡＬＵ）３４で２入力演算を行なう。この演算処理結果は、演算処理ユニット（ＡＬＵ）３４から対応のエントリ内の所定領域に再書込（ストア）されるか、または、転送回路（後に説明する）を利用して別のエントリに対応して配置される演算処理ユニット（ＡＬＵ）へ転送して、所定領域に格納する。
【００５２】
図５は、この図３に示す主演算回路２０における演算操作を例示的に示す図である。図５においては、２ビット幅のデータワードａおよびｂの加算を行なって、データワードｃを生成する。各エントリＥＲＹには、演算対象の組をなすデータワードａおよびｂがともに格納される。
【００５３】
図５においては、第１行目のエントリＥＲＹに対する演算処理ユニット（ＡＬＵ）３４において、１０Ｂ＋０１Ｂの加算が行なわれ、２行目エントリに対する演算処理ユニット（ＡＬＵ）３４においては、００Ｂ＋１１Ｂの演算が行なわれる。ここで、“Ｂ”は、２進数を示す。３行目のエントリに対する演算処理ユニット（ＡＬＵ）３４におていは、１１Ｂ＋１０Ｂの演算が行なわれる。以下、各エントリＥＲＹに格納されたデータワードａおよびｂの加算演算が実行される。
【００５４】
演算は、下位側ビットから順にビットシリアル態様で行なわれる。まず、エントリＥＲＹにおいて、データワードａの下位ビットａ［０］を対応の演算処理ユニット（以下単に、ＡＬＵと称する）３４へ転送する。次に、データワードｂの下位ビットｂ［０］を対応のＡＬＵ３４へ転送する。ＡＬＵ３４においては、これらの与えられた２ビットデータを用いて加算演算を行なう。この加算演算結果ａ［０］＋ｂ［０］は、データワードｃの下位ビットｃ［０］の位置に書込まれる（ストアされる）。すなわち、１行目のエントリＥＲＹにおいては、ビット“１”がｃ［０］の位置に書込まれる。
【００５５】
この加算処理を、次いで、上位ビットａ［１］およびｂ［１］に対しても行い、その演算結果ａ［１］＋ｂ［１］が、ビットｃ［１］の位置に書込まれる。
【００５６】
加算演算においては、桁上がりが生じる可能性があり、この桁上がり（キャリー）の値が、ビットｃ［２］の位置に書込まれる。これにより、データワードａおよびｂの加算がすべてのエントリＥＲＹにおいて完了し、その結果がデータｃとして各エントリＥＲＹにおいて格納される。エントリ数ｍとして、上述のように、たとえば１０２４を準備した場合、１０２４個のデータの加算を並列に実行することができる。
【００５７】
図６は、この加算演算処理時の内部タイミングを模式的に示す図である。以下、図６を参照して、加算演算処理時の内部タイミングについて簡単に説明する。ＡＬＵ３４においては、２ビット加算器（ＡＤＤ）が利用される。このＡＬＵ３４の内部構成については後に詳細に説明する。
【００５８】
図６において、“Read”は、メモリマット３０から演算対象のデータビットを読出して対応のＡＬＵ３４に転送する動作（ロード）を示し、“Write”は、ＡＬＵ３４の演算結果データを対応のエントリの対応のビット位置に書込む動作（ストア）または動作命令を示す。
【００５９】
マシンサイクルｋにおいて、データビットａ［ｉ］がメモリマット３０から読出され、次のマシンサイクル（ｋ＋１）で、別の演算対象のデータビットｂ［ｉ］が読出され（Read）、これらの読出ビットが、対応のＡＬＵ３４の加算器（ＡＤＤ）にそれぞれ各サイクルにおいて与えられる。
【００６０】
マシンサイクル（ｋ＋２）においては、ＡＬＵ３４の加算器（ＡＤＤ）において、与えられたデータビットａ［ｉ］およびｂ［ｉ］の加算処理が行なわれる。マシンサイクル（ｋ＋３）において、加算結果ｃ［ｉ］が、対応のエントリの対応の位置に書込まれる。
【００６１】
次のマシンサイクル（ｋ＋４）および（ｋ＋５）において、次の演算対象のデータビットａ［ｉ＋１］およびｂ［ｉ＋１］が読出され、ＡＬＵ３４の加算器（ＡＤＤ）へ転送されて保持される。マシンサイクル（ｋ＋６）において、ＡＬＵ３４により加算処理が行なわれる。マシンサイクル（ｋ＋７）において、この加算結果が対応のエントリのビット位置ｃ［ｉ＋１］へ格納される。
【００６２】
メモリマット３０とＡＬＵ３４の間でのデータビット転送に、それぞれ１サイクルが必要とされ、ＡＬＵ３４において１マシンサイクルの演算サイクルが必要とされる。したがって、２ビットデータの加算および加算結果の格納を行なうために、４マシンサイクルが必要とされる。メモリマットを複数のエントリＥＲＹに分割し、各エントリに演算対象データの組をそれぞれ格納して、対応のＡＬＵ３４においてビットシリアル態様で演算処理を行なう方式の特徴は、１つ１つのデータの演算には、比較的多くのマシンサイクルが必要とされるものの、処理すべきデータ量が非常に多い場合には、演算の並列度を高くすることにより高速データ処理を実現することができることである。また、ビットシリアル態様で演算処理を行なっており、処理されるデータのビット幅は固定されないため、種々のデータ構成を有するさまざまなアプリケーションに適用することができる。
【００６３】
たとえば、演算対象のデータワードのビット幅がＮの場合、各エントリＥＲＹの演算には、４・Ｎマシンサイクルが必要とする。演算対象のデータワードのビット幅は、８ビットから６４ビット程度であり、エントリ数ｍをたとえば１０２４と大きくすることにより、並列演算処理時間に関して、たとえば８ビットデータの場合、３２マシンサイクルで１０２４個の演算結果を得ることができ、１０２４組のデータをシーケンシャルに処理する場合に比べて大幅に処理時間を短縮することができる。
【００６４】
図７は、主演算回路２０の構成の一例をより具体的に示す図である。メモリマット３０において、メモリセルＭＣが行列状に配列され、各メモリセル行に対応してワード線ＷＬが配設され、メモリセル列それぞれに対応してビット線対ＢＬＰが配置される。メモリセルＭＣは、これらのビット線対ＢＬＰとワード線ＷＬの交差部に対応して配置される。ワード線ＷＬには、対応の行のメモリセルが接続され、またビット線対ＢＬＰには、対応の列のメモリセルが接続される。
【００６５】
エントリＥＲＹは、各ビット線対ＢＬＰに対応して設けられ、メモリマット３０においては、ビット線対ＢＬＰ０からＢＬＰ（ｍ−１）それぞれに対応してエントリＥＲＹ０−ＥＲＹ（ｍ−１）が配置される。ビット線対ＢＬＰが、対応のエントリＥＲＹとＡＬＵ群３２に含まれる対応のＡＬＵとの間のデータ転送線として利用される。エントリＥＲＹを１列のメモリセルで構成することにより、１エントリに格納されるデータのビット幅が用途に応じてまたは処理内容に応じて変更される場合においても、ビットシリアル態様で対応のＡＬＵで演算処理を行なうことができ、データビット幅の変更に容易に対応することができる。
【００６６】
メモリマット３０のワード線ＷＬに対して、コントローラ（図２参照）からのアドレス信号に従って演算対象のデータビットが接続されるワード線ＷＬを選択状態へ駆動するロウデコーダ４６が設けられる。ワード線ＷＬには、エントリＥＲＹ０−ＥＲＹ（ｍ−１）の同一位置のメモリセルが接続されており、このロウデコーダ４６によりワード線を選択することにより、各エントリＥＲＹ各々において同一位置のデータビットを選択する。
【００６７】
演算処理ユニット群（ＡＬＵ群）３２においては、各ＡＬＵがビット線対ＢＬＰ０−ＢＬＰ（ｍ−１）に対応して配置されるが、図７においては明確に示していない。このＡＬＵ群３２とメモリマット３０との間に、データのロード／ストア（転送）を行なうための転送回路を構成するセンスアンプ群４０およびライトドライバ群４２が設けられる。
【００６８】
センスアンプ群４０は、ビット線対ＢＬＰ各々に対して設けられるセンスアンプを含み、対応のビット線対ＢＬＰ（ＢＬＰ０−ＢＬＰ（ｍ−１））に読出されたデータを増幅して、演算処理ユニット群３２の対応のＡＬＵ（３４）に伝達する。
【００６９】
ライトドライバ群４２も同様、ビット線対ＢＬＰ（ＢＬＰ０−ＢＬＰ（ｍ−１））それぞれに対応して配置されるライトドライバを含み、演算処理ユニット群３２の対応のＡＬＵからのデータを増幅して対応のビット線対ＢＬＰへ増幅データを転送する。
【００７０】
これらのセンスアンプ群４０およびライトドライバ群４２がビット線（データ転送線）とＡＬＵ群３２との間の転送回路を構成し、メモリマット３０とＡＬＵ群３２との間、すなわちエントリと対応のＡＬＵとの間で双方向にデータを転送することができる。
【００７１】
これらのセンスアンプ群４０およびライトドライバ群４２に対し、入出力回路４８が設けられ、図２に示す内部データバス１２との間でのデータの転送が行なわれる。この入出力回路４８のデータの入出力の態様は、エントリ数およびデータビット幅に応じて適当に定められる。
【００７２】
演算処理ユニット群（ＡＬＵ群）３２に対し、さらに、ＡＬＵ間相互接続用スイッチ回路４４が設けられる。このスイッチ回路４４は、ＡＬＵ群３２におけるＡＬＵ間の相互接続経路を、図２に示すコントローラ２１からの制御信号に基づいて設定する。これにより、バレルシフタなどと同様に、隣接ＡＬＵ間でのデータ転送のみならず、遠く物理的に離れたＡＬＵ間でのデータ転送を行なうことができる。このＡＬＵ間相互接続用スイッチ回路４４は、たとえば、ＦＰＧＡ（フィールド・プログラマブル・ゲート・アレイ）などを用いたクロスバースイッチで実現される。また、このスイッチ回路４４として、バレルシフタなどのように、１マシンサイクル内で複数ビット間のシフト動作を行なう構成が用いられてもよい。
【００７３】
このＡＬＵ間相互接続用スイッチ回路４４を用いてＡＬＵ間でのデータ転送を行なうことにより、ＦＦＴ処理におけるバタフライ演算時において、Ｎ点ＦＦＴ処理を行なう場合、Ｎ／２離れたサンプリング点を対として、演算処理を行なうことができ、双対ノードのデータを生成する際のアドレス変換などの処理が不要となり、高速でデータを転送してバタフライ演算を実行することができる。
【００７４】
なお、この図７において、図２に示す隣接ブロック間データバス１６は明確に示していない。隣接ブロック間データバス１６は、ＡＬＵ間相互接続用スイッチ回路４４に接続されてもよく、また、入出力回路４８とセンスアンプ群４０およびライトドライバ群４２との間の内部データ転送バスに接続されてもよい。
【００７５】
また、演算処理ユニット群３２のＡＬＵは、コントローラ２１（図２参照）からの制御信号に従ってその演算処理動作タイミングおよび演算操作内容が決定される。すなわち、ＡＬＵにおいて複数の演算器（加算器（ＯＲゲート）、反転器、ＡＮＤゲート、ＥＸＯＲゲート等）を配置し、これらの演算器を選択的に活性化する。
【００７６】
図８は、１つのＡＬＵの構成の一例を示す図である。図７において、ＡＬＵ３４（以下、算術演算論理回路との違いを明確にするために、単位ＡＬＵ回路ブロックとも称す）は、指定された演算処理を行なう算術演算論理回路５０と、対応のエントリから読出されるデータを一時的に格納するＡレジスタ５２と、対応のエントリから読出されたデータビットまたは算術演算論理回路５０の演算処理結果データまたはライトドライバへ転送するデータを一時的に格納するＸレジスタ５４と、加減算処理時のキャリーまたはボローを格納するＣレジスタ５６と、この算術演算論理回路５０の演算処理の禁止を指定するマスクデータを格納するＶレジスタ（マスクレジスタ）５８を含む。
【００７７】
図７に示すセンスアンプ群４０およびライトドライバ群４２は、単位構成の基本回路として、対応のビット線ＢＬＰに対して設けられるセンスアンプ６２およびライトドライバ６０を含む。センスアンプ６２は、対応のエントリのメモリセルから読出されたデータを増幅してＡレジスタ５２またはＸレジスタ５４またはＶレジスタ５８へ転送する。ＦＦＴ処理実行時において、演算の実行／禁止を示す制御データは、各エントリ内に格納され、各バタフライ演算段の計算実行前に、Ｖレジスタ５８に格納される。
【００７８】
ライトドライバ６０は、Ｘレジスタ５４に格納されたデータをバッファ処理して対応のエントリのメモリセルへ対応のビット線対ＢＬＰを介して書込む。
【００７９】
算術演算論理回路５０は、加算（ＡＤＤ）、論理積（ＡＮＤ）、論理和（ＯＲ）、排他的論理和（ＥＸＯＲ）、反転（ＮＯＴ）等の演算を実行することができ、その演算内容が図２に示すコントローラ２１からの制御信号（図８には示さず）により設定される（並列に配置されるこれらの演算ゲートを選択的に制御信号に従ってイネーブルする）。
【００８０】
Ｖレジスタ５８に格納されるマスクデータは、“０”のときに、このＡＬＵ３４の演算処理動作を停止させ、“１”のときに、このＡＬＵ３４の演算処理動作をイネーブルする。演算マスク機能を利用することにより、仮に全エントリが利用されない場合においても、有効にエントリに対してのみ演算を実行することができ、正確な処理を行なうことができる。また、不必要な演算を停止させることにより、消費電流を低減することができる。さらに、ＦＦＴ処理実行時において、このＶレジスタ５８のマスクデータを利用して、ＡＬＵ３４において選択的に演算を実行することにより、正確なデータの組合せ（双対ノードのデータ）を利用してバタフライ演算を実行する。
【００８１】
Ｘレジスタ５４は、また、スイッチ回路４４に含まれるＡＬＵ間接続回路６５を介して他のＡＬＵ（単位ＡＬＵ回路ブロック）に接続される。このＡＬＵ間接続回路６５は、前述のように、ＦＰＧＡセルなどのスイッチ回路で構成され、演算処理ユニット群３２に含まれる任意のＡＬＵ３４に対してデータを転送する際に用いられる。また、このＡＬＵ間接続回路６５の転送機能により、メモリマット内のさまざまな物理位置に格納されているデータとの演算を実現することが可能となり、演算の自由度を高くする。特に、このＡＬＵ間接続回路６５を利用することにより、距離Ｎ／２離れたデータ対を利用してバタフライ演算を実行することができ、複雑なアドレス計算を行なってメモリマット内においてデータの再配列を行なうことなくＦＦＴ処理を実行することができる。
【００８２】
図９は、ＡＬＵ間相互接続用スイッチ回路４４の接続の態様の一例を概略的に示す図である。図９においては、１つの主演算回路において８個の単位ＡＬＵ回路ブロック（ＡＬＵ３４）ＡＬＵ０−ＡＬＵ７が設けられる。この単位ＡＬＵ回路ブロックは、図８に示すＡＬＵ３４に対応し、算術演算論理回路５０および各レジスタを含む。
【００８３】
ＡＬＵ間相互接続用スイッチ回路４４においては、ＡＬＵ３４間を１ビットシフト（ｍｏｖｅ）するスイッチ回路および配線を配置する１ビットシフト領域ＡＲ０と、２ビットシフトするスイッチ回路および配線を配置する２ビットシフト領域ＡＲ１と、４ビットシフトするスイッチ回路および配線を配置する４ビットシフト領域ＡＲ２とが設けられる。これらのシフト領域ＡＲ０、ＡＲ１およびＡＲ２においては、１つの基本演算ブロック内において２のｎ乗離れたＡＬＵ内のＸレジスタのデータをシフトして２のｎ乗離れたＡＬＵ間のデータ転送（シフト：ｍｏｖｅ）をスイッチ回路４４において実現することにより、任意のＡＬＵ間のデータ転送を１クロックサイクルで行ない、最大２サイクルでデータの転送およびメモリセルへの格納を完了することができる。
【００８４】
ただし、２のｎ乗離れたＡＬＵ間のデータのシフトを行なう場合、１ビットシフト領域から２のｎ乗ビットシフト領域まで、合計（ｎ＋１）の配線領域が必要となる。
【００８５】
図１０は、ＡＬＵ間相互接続用スイッチ回路４４における接続の他の形態を示す図である。図１０においても、８個の単位ＡＬＵ回路ブロック（ＡＬＵ３４）ＡＬＵ０−ＡＬＵ７に対する接続経路を示す。図１０において、１ビットシフト領域ＡＷＲ０において、１ビット離れたＡＬＵ間のＸレジスタの格納データの交換（スワップ）を行なうために、ＡＬＵ０およびＡＬＵ１が相互接続され、また、ＡＬＵ２およびＡＬＵ３が相互接続される。ＡＬＵ４およびＡＬＵ５が相互接続され、ＡＬＵ６およびＡＬＵ７が相互接続される。
【００８６】
２ビットシフト領域ＡＷＲ１において２ビット離れたＡＬＵ間のＸレジスタの格納データのスワップを行なうために、ＡＬＵ０およびＡＬＵ２が相互接続され、ＡＬＵ１およびＡＬＵ３が相互接続される。また、ＡＬＵ４がＡＬＵ６と相互接続され、ＡＬＵ５がＡＬＵ７と相互接続される。
【００８７】
４ビットシフト領域ＡＷＲ２においては、４ビット離れた位置のＡＬＵ間のＸレジスタのスワップを行なうために、ＡＬＵ、ＡＬＵ１、ＡＬＵ２、およびＡＬＵ３が、それぞれ、ＡＬＵ４、ＡＬＵ５、ＡＬＵ６およびＡＬＵ７とそれぞれ相互接続される。
【００８８】
この図１０に示す接続形態において、２のｎ乗ビット離れた位置のＡＬＵ間においてＸレジスタの格納データのスワップが行なわれる。これにより、ＦＦＴ処理において、バタフライ演算の対象の組として、Ｎ／２離れた位置のサンプリング点（Ｎ点ＦＦＴの場合）の演算結果を組合せることを可能にする。
【００８９】
図１１は、このＡＬＵ間相互接続用スイッチ回路４４の構成の一例を示す図である。図１１においては、ｋビット離れた位置のＡＬＵ（単位ＡＬＵ回路ブロック）３４に対するＡＬＵ間接続回路６５の構成を代表的に示す。ＡＬＵ回路の分離距離を示すために、ＡＬＵとして、ＡＬＵｉ、ＡＬＵｉ＋ｋおよびＡＬＵｉ＋２・ｋを示す。
【００９０】
スイッチ回路４４においては、ｋビットのデータ転送線として、２本のデータ転送線ＴＬ０およびＴＬ１が設けられる。ＡＬＵ間接続回路６５は、対応の単位ＡＬＵ回路ブロック３４のＸレジスタの出力および入力部にそれぞれ結合される送信レジスタＴＸおよび受信レジスタＲＸと、経路設定用スイッチＳＴ１およびＳＲ１またはＳＴ２およびＳＲ２を含む。
【００９１】
ＡＬＵｉに対するＡＬＵ間接続回路６５において、送信レジスタＴＸがスイッチＳＴ１を介して選択的にデータ転送線ＴＬ０に結合され、受信レジスタＲＸがスイッチＳＲ１を介してデータ転送線ＴＬ１に結合される。
【００９２】
ＡＬＵｉ＋ｋにおいては、受信レジスタＴＸが、スイッチＳＴ２を介してデータ転送線ＴＬ１に結合され、受信レジスタＲＸがスイッチＳＲ２を介してデータ転送線ＴＬ０に結合される。
【００９３】
ＡＬＵｉ＋２・ｋにおていは、送信レジスタＴＸおよび受信レジスタＲＸが、それぞれスイッチＳＴ１およびＳＲ１を介してデータ転送線ＴＬ０およびＴＬ１にそれぞれ結合される。すなわち、このＡＬＵ間接続回路６５において、スイッチが接続するデータ転送線が、送信レジスタおよび受信レジスタそれぞれに対して交互に配置される。
【００９４】
この図１１に示すスイッチＳＴ１、ＳＲ１、ＳＴ２およびＳＲ２は、ｋビット離れた位置の双方向データ転送を実現するＡＬＵ間接続経路設定のために用いられる。
【００９５】
図１２は、図１１に示す送信または転送経路を設定するスイッチＳＴ１またはＳＴ２の構成の一例を示す図である。これらのスイッチＳＴ１およびＳＴ２は同一構成を有するため、スイッチＳＴ２の参照符号を括弧内に示す。
【００９６】
図１２において、スイッチＳＴ１（ＳＴ２）は、転送制御信号Ｕ１（またはＵ２）に従って対応の送信レジスタＴＸをデータ転送線ＴＬ０（またはＴＬ１）に結合する転送ゲートＴＧ１と、転送制御信号Ｄ１（またはＤ２）に従って送信レジスタＴＸをデータ転送線ＴＬ０（またはＴＬ１）に結合する転送ゲートＴＧ２を含む。この転送ゲートＴＧ１およびＴＧ２は、一方の導通時、他方は非導通状態に設定される。これらの転送ゲートは、ＣＭＯＳトランスミッションゲートで構成されても良く、トライステートバッファで構成されても良い。
【００９７】
図１３は、図１１に示すスイッチＳＲ１およびＳＲ２の構成の一例を示す図である。これらのスイッチＳＲ１およびＳＲ２は同一構成を有するため、図１２と同様、スイッチＳＲ２の参照符号は括弧内に示す。スイッチＳＲ１（ＳＲ２）は、制御信号Ｄ１（Ｄ２）に従って対応の受信レジスタＲＸとデータデータ線ＴＬ１（ＴＬ０）に結合する転送ゲートＴＧ３と、制御信号Ｕ１（Ｕ２）に従って対応の受信レジスタＲＸをデータ転送線ＴＬ１（ＴＬ０）に結合する転送ゲートＴＧ４を含む。
【００９８】
制御信号Ｕ１およびＤ１、およびＵ２およびＤ２は、図１２に示す制御信号と同様である。データの転送方向に従って制御信号Ｕ１、Ｕ２、Ｄ１、およびＤ２が選択的に活性化される。
【００９９】
図１４は、ｋビットシフト動作時の接続経路を模式的に示す図である。図１４においては、制御信号Ｕ１およびＵ２を活性状態とし、転送ゲートＴＧ１およびＴＧ３をスイッチ回路ＳＴ１、ＳＴ２およびＳＲ１、ＳＲ２において導通状態とし、図１２および図１３に示す転送ゲートＴＧ２およびＴＧ４は、オフ状態に設定する。
【０１００】
この場合、図１４に示すように、ＡＬＵｉにおいては、送信レジスタＴＸがスイッチＳＴ１を介して上部方向にデータをデータ転送線ＴＬ０を介して転送し、受信レジスタＲＸが、データ転送線ＴＬ１を介して下方向から転送されるデータを受ける。
【０１０１】
ＡＬＵｉ＋ｋにおいては、送信レジスタＴＸがスイッチＳＴ２を介してデータ転送線ＴＬ１を介して受信ＡＬＵｉの受信レジスタＲＸスイッチＳＲ１を介してデータを送信する。ＡＬＵｉ＋ｋの受信レジスタＲＸは、スイッチＳＲ２を介してデータ転送線ＴＬ０を介して下方向に配置されたＡＬＵｉ＋２ｋの送信レジスタＴＸからスイッチＳＴ１を介して転送されるデータを受信する。ＡＬＵｉ＋２・ｋの受信レジスタＲＸが対応のスイッチＳＲ２を介してデータ転送線ＴＬ１を介して転送されたデータを受信する。
【０１０２】
したがって、この経路接続の場合、データ転送線ＴＬ０およびＴＬ１においては、スイッチＳＴ１およびＳＴ２は、下方向へのデータの転送経路が遮断され、またスイッチＳＲ１およびＳＲ２は、上方向のデータ転送経路が遮断されており、ｋビット離れたＡＬＵ間においてデータビットを上方向に沿って転送することができる。
【０１０３】
図１５は、ｋビット離れたＡＬＵに対するデータビットの下方向への転送時のスイッチ回路４４の接続経路を概略的に示す図である。ｋビットシフトダウン動作時においては、制御信号Ｄ１およびＤ２が活性状態とされ、スイッチＳＴ１およびＳＴ２において、下方向にデータを転送する転送ゲートＴＧ２がオン状態となり、転送ゲートＴＧ１はオフ状態となる。スイッチＳＲ１およびＳＲ２においては、上方向からのデータを受ける転送ゲートＴＧ３がオン状態となり、下方向からのデータを転送する転送ゲートＴＧ４はオフ状態となる。
【０１０４】
したがって、図１５に示すように、ＡＬＵｉにおいては、送信レジスタＴＸがスイッチＳＴ１を介してデータ転送線ＴＬ０上にデータを下方向に転送する。また、受信レジスタＲＸがデータ転送線ＴＬ１を介して転送されたデータを受信する。
【０１０５】
ＡＬＵｉ＋ｋは、スイッチＳＲ２を介してＡＬＵｉの送信レジスタＴＸからデータ転送線ＴＬ０に転送されるデータを受けて受信レジスタＲＸに格納する。送信レジスタＴＸは、スイッチＳＴ２を介して下方向にデータ転送線ＴＬ１を介してデータを転送する。
【０１０６】
ＡＬＵｉ＋２・ｋにおいては、受信レジスタＲＸが、このＡＬＵｉ＋ｋの送信レジスタＴＸからスイッチＳＴ２を介して伝達されたデータをスイッチＳＲ２を介して受信し、送信レジスタＴＸが、スイッチＳＴ１を介して下方向にデータ転送線ＴＬ０を介してデータを転送する。
【０１０７】
したがって、図１５において示すように、データ転送線ＴＬ０およびＴＬ１各々においては、スイッチＳＴ１、ＳＴ２、ＳＲ１およびＳＲ２において不要なデータ転送経路が遮断されており、確実に、ｋビット離れたＡＬＵへシフトダウン動作によりデータを転送することができる。
【０１０８】
図１６は、ｋビット離れたＡＬＵ間のスワップ動作時のＡＬＵ間相互接続用スイッチ回路４４の接続経路を概略的に示す図である。図１６において、ＡＬＵｉにおいては、接続回路６５においてスイッチＳＴ１が下方向を送信レジスタＴＸからのデータを転送する状態に制御信号Ｄ１により選択され、またスイッチＳＲ１が、受信レジスタＲＸからデータ転送線ＴＵ１を介して転送されるデータを受信する状態に、制御信号Ｄ１により設定される。
【０１０９】
ＡＬＵｉ＋ｋに対するＡＬＵ間接続回路６５においては、送信レジスタＴＸに対するスイッチＳＴ２が制御信号Ｕ２により、上方向にデータを転送する状態に設定され、スイッチＳＲ２が、受信レジスタＲＸに対し上部の位置の送信レジスタＴＸからのデータを転送する状態に制御信号Ｄ２により設定される。ＡＬＵｉ＋２ｋのスイッチＳＴ１およびＳＲ２は、ＡＬＵｉのスイッチＳＴ１およびＳＲ１と同様の状態に設定される。
【０１１０】
この接続状態においては、ＡＬＵｉの送信レジスタＴＸが、スイッチＳＴ１およびＳＲ２を介してＡＬＵｉ＋ｋの受信レジスタＲＸにデータを転送し、一方ＡＬＵｉ＋ｋの送信レジスタＴＸが、スイッチＳＴ２およびＳＲ１を介してＡＬＵｉの受信レジスタＲＸにデータを転送する。同様、ＡＬＵｉ＋２・ｋの送信レジスタＴＸがスイッチＳＴ１を介して下方向にデータを転送し、受信レジスタＲＸがスイッチＳＲ１を介して下部の位置の対応のＡＬＵからのデータの受信する。
【０１１１】
すなわち、データ転送線ＴＬ０に接続されるスイッチは、データを下方向に転送する状態に設定し、一方、データ転送線ＴＬ１に接続されるスイッチＳＲ１およびＳＴ２においては、制御信号Ｇ１およびＧ２に従って、上方向にデータビットが転送される状態に設定する。これにより、ｋビット離れたＡＬＵ（Ｘレジスタ）間においてデータビットの送受信を行なって、データビットのスワップを１クロックサイクルで行なうことができる。
【０１１２】
なお、図１４から図１６に示す構成において、送信レジスタＴＸおよび受信レジスタＲＸは設けられず、Ｘレジスタの出力部および入力部が、それぞれ、直接データ転送線ＴＬ０およびＴＬ１またはその逆に接続されてもよい。
【０１１３】
また、このＡＬＵ間接続用スイッチ回路４４においては、クロスバースイッチなどとして知られるスイッチマトリクスが用いられ、このスイッチマトリクスにおいてスイッチを選択的にオン状態とすることにより、データ転送経路が設定されてもよい。
【０１１４】
図１７は、図８に示すＡＬＵ（単位ＡＬＵ回路ブロック）の動作シーケンスを示す図である。図１７に示す動作シーケンスにおいては、１ビット加算器を利用して、２項加算演算ａ＋ｂを実行する。この２項加算演算時において、ＦＦＴ処理を実行するため、バタフライ演算の組の２項を生成するために、ＡＬＵ間接続回路６５（ＡＬＵ間相互接続用スイッチ回路４４）を利用して、ｎビット離れたＡＬＵ間のＸレジスタの値のシフト動作またはスワップ動作が行なわれる。
【０１１５】
以下、図１７を参照して、図８に示すＡＬＵ（単位ＡＬＵ回路ブロック）３４における加算動作について、図８を合わせて参照して説明する。
【０１１６】
まず、マシンサイクル（ｋ−１）において、Ｖレジスタ５８に、ビット“１”をセットして、演算処理実行を指定する。また、Ｃレジスタ５６を“０”にクリアして、初期化する。
【０１１７】
マシンサイクルｋにおいて、メモリマット３０からデータビットａ［ｉ］が読出され、センスアンプ６２を介してＸレジスタ５４に転送されて格納される。このＸレジスタ５４の格納値は、次のマシンサイクル（ｋ＋１）において確定する。
【０１１８】
マシンサイクル（ｋ＋１）において、メモリセルマット３０からデータビットｂ［ｉ］が読出され、Ａレジスタ１２に転送されて格納される。ビットｂ［ｉ］の読出および格納と並行して、バタフライ演算の組、すなわち、ｎビット離れたＡＬＵ回路のＸレジスタの値がシフトされて格納されるかまたはスワップにより交換される。これにより、Ｘレジスタの値が、ビットａ［ｉ］からビットａ′［ｉ］に更新される。
【０１１９】
マシンサイクル（ｋ＋２）において、データビットａ′［ｉ］およびｂ［ｉ］が確定状態にあるため、ＡＬＵ内の算術演算論理回路５０において演算が実行され、その演算結果（加算結果）ａ′［ｉ］＋ｂ［ｉ］が、ビット位置ｃ［ｉ］に書込まれる。この演算時にキャリーが発生した場合にはＣレジスタ５６にキャリーの値が格納される。この加算結果の書込は、図８に示すライトドライバ６０を介して実行される。
【０１２０】
ＡＬＵ（単位ＡＬＵ回路ブロック）３４においては、マシンサイクル（ｋ＋２）において加算結果ａ′［ｉ］＋ｂ［ｉ］が確定しており、またキャリーＣ［ｉ］の有無も確定している。したがって、マシンサイクル（ｋ＋３）において、ＡＬＵ（単位ＡＬＵ回路ブロック）３４のＸレジスタ５４からライトドライバ６０を介してメモリマット３０のビット位置ｃ［ｉ］に加算結果を書込むことができる。キャリーＣ［ｉ］は、Ｃレジスタ５６に格納され、その書込はまだ行なわれない。
【０１２１】
マシンサイクル（ｋ＋４）においては、次の上位データビットａ［ｉ＋１］が読出され、ＡＬＵ（単位ＡＬＵ回路ブロック）３４に転送され、次のマシンサイクル（ｋ＋５）において、Ｘレジスタ５４の格納データビットが、ビットａ［ｉ＋１］に確定する。このマシンサイクル（ｋ＋５）において、メモリセルマット３０においてビットｂ［ｉ＋１］が読出されて単位ＡＬＵ回路ブロック３４のＡレジスタ５２に対してデータビットｂ［ｉ＋１］の転送が行なわれる。このビットｂ［ｉ＋１］の読出および転送と平行して、Ｘレジスタの格納値ａ［ｉ＋１］が、バタフライ演算の組となるＡＬＵのＸレジスタとの間でのシフトまたはスワップにより更新される。
【０１２２】
マシンサイクル（ｋ＋６）においては、Ａレジスタ５２およびＸレジスタ５４の格納データビットが確定状態にあり、これらのビットに対して演算（加算演算）が実行され、次のマシンサイクル（ｋ＋７）において、加算結果ａ′［ｉ＋１］＋ｂ［ｉ＋１］が、メモリセルマットのビット位置ｃ［ｉ＋１］の位置に書込まれる。またキャリーＣ［ｉ＋１］が、Ｃレジスタに格納される。
【０１２３】
これらの一連の動作を、対応のエントリのデータワードａおよびｂの全ビットに対して繰返しビットシリアル態様で実行することにより、データワードａ′およびｂの加算演算が実現される。最終ビットの加算演算結果の書込の後、Ｃレジスタ５６が格納するキャリーＣの書込が、データワードｃの格納領域の最上位ビット位置に対して実行される。
【０１２４】
メモリマット３０のワード線ＷＬの選択時、図７に示すロウデコーダ４６が、これらのデータワードａ、ｂおよびｃの各ビットの記憶領域の開始時点をレジスタ群のポインタ値として格納し、各マシンサイクルごとにそのポインタ値を増分することにより、下位ビットから上位ビットの順で、加算および加算結果の格納を実現することができる。
【０１２５】
また、２のｎ乗の距離離れたエントリ間のデータの移動が、ＡＬＵ間接続回路６５により実現され、バタフライ演算の組のデータに対して高速で演算処理を実行することができる。
【０１２６】
演算処理操作はソフトウェアにより決定する。この場合、基本演算ブロックＦＢ内に設けられるマイクロプログラム格納メモリ２３に、ＦＦＴ演算処理実行用のプログラムを格納し、コントローラ２１の制御の下に、ビットシリアル態様で、演算処理を実行する。このプログラムは、特にマイクロコード化されていなくても良い。
【０１２７】
図１８は、この発明の実施の形態１に用いられる基本演算ブロックＦＢｉの要部の構成を概略的に示す図であり、ソフトウェアにより動作設定可能な構成を示す。
【０１２８】
図１８において、メモリセルマット３０は、エントリＥＲＹとして、番号０からＭＡＸ＿ＥＮＴＲＹが付されたエントリを含む。エントリＥＲＹの各々は、ビット位置として、０からＭＡＸ＿ＢＩＴを有し、ビット幅は、ＢＩＴ＿ＭＡＸ＋１である。
【０１２９】
演算処理ユニット群（ＡＬＵ群）３２においては、各エントリＥＲＹに対して単位ＡＬＵ回路ブロック（適宜ＡＬＵと称す）３４が配置される。この演算処理ユニット群（ＡＬＵ群）３２に対し、ＡＬＵ間相互接続用スイッチ回路４４が配置されている。
【０１３０】
主演算回路２０の動作は、プログラム格納メモリ２３に格納されるプログラムにより設定される。コントローラ２１が、このプログラム格納メモリ２３に格納されたプログラムに従って処理を実行する。
【０１３１】
このプログラム格納メモリ２３に格納されるプログラムは、マイクロプログラムの形態で格納されるものの、このプログラム格納メモリ２３に格納されるプログラム命令は、マイクロ命令でなくてもよく、マクロ命令であってもよい。コントローラ２１が、プログラム命令をデコードし、この命令により指定された動作に必要な処理を実行することができればよい。
【０１３２】
レジスタ群２２においては、ポインタレジスタｒ０−ｒ３が設けられ、演算対象のデータのメモリマット３０内のアドレスが、これらのポインタレジスタｒ０−ｒ３に格納される。コントローラ２１は、これらのポインタレジスタｒ０−ｒ３に格納されるポインタに従って主演算回路２０におけるエントリまたはエントリ内位置を指定するアドレスを生成して、メモリマット３０と演算処理ユニット群３２との間のデータの転送（ロード／ストア）を制御し、また加えて、ＡＬＵ３４間の接続経路を、ＡＬＵ間相互接続用スイッチ回路４４のＡＬＵ間接続回路（６０）の接続経路を接続制御信号に従って設定して、バタフライ演算時のシフト／スワップ動作の転送経路を設定する。
【０１３３】
図１９は、図１８に示すポインタレジスタｒ０−ｒ３に対する操作命令（レジスタ命令）を一覧にして示す図である。レジスタ命令として、５種類の命令が準備される。
【０１３４】
命令“reg. set n,rx”は、レジスタｒｘに、定数ｎをセットする命令である。定数ｎは、１つのエントリにおけるビット位置を示すものであり、１エントリのビット０からＭＡＸ＿ＢＩＴのいずれかの値を規定する。レジスタｒｘは、ポインタレジスタｒ０−ｒ３のいずれかである。
【０１３５】
命令“reg.cpy rx,ry”は、ポインタレジスタｒｘの内容を、ポインタレジスタｒｙにコピーする命令である。
【０１３６】
命令“reg.inc rx”は、ポインタレジスタｒｘの格納値を１増分する命令である。
命令“reg.dec rx”は、ポインタレジスタｒｘの格納値を１減分する命令である。
【０１３７】
命令“reg.sft rx”は、ポインタレジスタｒｘの格納値を１ビット左シフトする命令である。
【０１３８】
これらの５種類のレジスタ命令により、ポインタレジスタｒ０−ｒ３の格納値（ポインタ）を操作して、メモリマットの演算対象データのビットのアドレスを指定する。
【０１３９】
図２０は、図１８に示すＡＬＵ（単位ＡＬＵ回路ブロック）３４に対する操作命令を一覧にして示す図である。以下、図２０を参照して、各ＡＬＵ命令の操作内容について簡単に説明する。
【０１４０】
命令“alu.set.♯”は、レジスタ♯（Ｘ、ＣまたはＶ）に“１”を設定する命令である。このＡＬＵセット命令は、エントリ単位でレジスタのセットを指定する。
【０１４１】
命令“ALU.clr.♯”は、レジスタ♯（Ｘレジスタ、Ｃレジスタ、またはＶレジスタ）の格納値を、“０”にクリアする命令である。
【０１４２】
命令“alu.cpy.♯１♯２”は、レジスタ♯１の格納値をレジスタ♯２へコピーする命令である。このａｌｕコピー命令が実行されると、各エントリにおいて設けられたＡＬＵ（単位ＬＡＵ回路ブロック３４）内においてレジスタ間でデータの転送（Move/Copy）が実行される。
【０１４３】
図２１は、メモリセルマットと単位ＡＬＵ回路ブロック（ＡＬＵ）との間のデータ転送を規定するＡＬＵ命令のうちのロード／ストア命令を一覧にして示す図である。
【０１４４】
命令“mem.lb@rx”は、ポインタレジスタｒｘの示すメモリセル位置Ａｊ（ｒｘ）から、対応のＡＬＵ内のＸレジスタＸｊへデータをロードする命令である。
【０１４５】
命令“mem.st@rx”は、Ｖレジスタ（マスクレジスタ）にビット“１”が設定されている場合に、ＸレジスタＸｊに格納されたデータを、ポインタレジスタｒｘが指定するアドレス位置Ａｊ（ｒｘ）へ格納する命令である。
【０１４６】
これらのメモリロード／ストア命令を利用することにより、ポインタレジスタｒｘの格納値をアドレスとして、メモリセルとＡＬＵとの間で各エントリ単位でデータの転送を行なうことができる。
【０１４７】
図２２は、ＡＬＵ命令のうち、エントリ間のデータ移動（Move、Swap）を行なう命令を一覧にして示す図である。
【０１４８】
命令“ecm.mv.n♯m”は、データ移動命令（move）における移動量を数値で規定する命令である。したがって、この命令では、Ｘレジスタの格納データの転送時に、エントリｊ＋ｍのＸレジスタの格納値が、エントリｊのＸレジスタに移動される。エントリ移動量ｍは、０からＭＡＸ＿ＥＮＴＲＹ−１の自然数をとり、リング状にデータの移動を行なうとして、最大、ＭＡＸ＿ＥＮＴＲＹ離れた位置のエントリ間でデータ移動（Move）を行なうことができる。
【０１４９】
命令“ecm.mv.r rx”は、ポインタレジスタｒｘに格納された値だけ離れたエントリ間でデータ移動させる命令である。この命令が実行されると、エントリｊ＋ｒｘのＸレジスタの格納値が、エントリｊのＸレジスタに転送される。
【０１５０】
命令“ecm.swp.n♯m”は、数値ｍで指定される値離れたエントリ、すなわちエントリｊおよびｊ＋ｍのＸレジスタの値が交換される。
【０１５１】
命令“ecm.swp.r rx”は、ポインタレジスタｒｘに格納されている値離れたエントリｊおよびｊ＋ｒｘのＸレジスタの値の交換（swap）が実行される。
【０１５２】
この図２２に一覧にして示す命令を利用することにより、各ＡＬＵ（単位ＡＬＵ回路ブロック）に、所望のエントリのデータを設定することができ、バタフライ演算時に、バタフライ演算の組のデータに対して正確に、バタフライ演算を実行することができ、またメモリセルマット内における格納データを並べ替えおよびアドレス変換を行なう必要がなく、１クロックサイクルでデータビットのスワップ（swap）またはシフト（move）動作を行なって、バタフライ演算を実行することができる。
【０１５３】
なお、これらのＡＬＵ命令は、対応のＶレジスタの格納データが“１”のときに実行され、Ｖレジスタの格納値が“０”の時には、命令は実行されない。
【０１５４】
図２３は、単位ＡＬＵ回路ブロック内で行なわれる演算を指定する命令を一覧にして示す図である。
【０１５５】
命令“alu.op.adc@rx”は、ポインタレジスタｒｘが指定するメモリセルアドレスのデータとＸレジスタに格納されたデータとを加算し、その加算結果をＸレジスタに格納する動作を指定する命令である。加算演算時、全加算演算が行なわれるため、キャリー発生時、Ｃレジスタにキャリーが格納される。すなわちＸレジスタ（Ｘｊ）には、ポインタレジスタｒｘが指定するアドレスのメモリセルデータＡｊ［ｒｘ］とＸレジスタに格納されたビット値ＸｊとＣレジスタに格納されたキャリーＣｊの排他的論理和（“＾”）演算によりサムＳｕｍが生成されて、Ｘレジスタ（Ｘｊ）に格納される。
【０１５６】
キャリーＣｊは、メモリセルデータＡｊ［ｒｘ］とＸレジスタの格納ビットＸｊとＣレジスタの格納値Ｃｊのビットの各ビットのＡＮＤ演算（＆）の論理和（＋）により求められる。
【０１５７】
この加算命令、マスクレジスタ（ＶレジスタＶｊ）に“１”が設定されたときに実行され、Ｖレジスタ（マスクレジスタ）に“０”が設定されている場合には、このエントリにおいて加算命令は実行されない。
【０１５８】
命令“alu.op.sbb@rx”は減算命令であり、この減算命令実行値、ポインタレジスタｒｘが指定するメモリアドレスのデータＡｊ［ｒｘ］からＸレジスタに格納されたビット値Ｘｊを減算する。演算結果がＸレジスタに格納され、Ｃレジスタには、ボローが格納される。
【０１５９】
この減算時においては、Ｘレジスタに格納されたビットＸｊの反転値！Ｘｊが用いられ、加算時と同様の処理が実行される。したがって、この減算命令が与えられた場合には、Ｘレジスタに格納された値が反転されて加算器へ与えられる（最下位ビットのキャリーが１にセットされる）。これにより、２の補数表示による減算を行なうことができる。
【０１６０】
この減算命令も、マスクレジスタ（ＶレジスタＶｊ）に格納された値が“１”のときに、演算処理が実行され、“０”が格納されているときには、減算処理は実行されない。
【０１６１】
図２４は、ＡＬＵ内で行なわれる論理演算を指定する命令を一覧にして示す図である。
命令“alu.op.and@rx”は、ＡＮＤ命令であり、この命令実行時、ポインタレジスタｒｘのポインタが指定するメモリアドレスのデータＡｊ［ｒｘ］とＸレジスタに格納されたビット値Ｘｊの論理積（ＡＮＤ）がとられ、その論理積結果がＸレジスタに格納される。ただし、Ｖレジスタ（マスクレジスタ）Ｖの格納値（Ｖｊ）が“０”のときには、このＡＮＤ命令は実行されない。以下の論理演算命令についても同様に、マスクレジスタ（ＶレジスタＶｊ）の格納値が“１”のときに、指定された演算が実行され、格納値が“０”のときには、指定された演算の実行は禁止される。
【０１６２】
命令“alu.op.or@rx”は、ポインタレジスタｒｘのポインタが指定するメモリアドレスのデータＡｊ［ｒｘ］とＸレジスタの格納ビットＸｊの論理和（ＯＲ演算）を行ない、その結果をＸレジスタに格納する操作を指定する。
【０１６３】
命令“alu.op.ex@rx”は、ＥＸＯＲ命令であり、ポインタレジスタｒｘのポインタが指定するアドレスのメモリセルデータＡｊ［ｒｘ］とＸレジスタの格納ビットＸｊの値の排他的論理和演算（ＥＸＯＲ演算）が行なわれ、その演算結果がＸレジスタに格納される。
【０１６４】
命令“alu.op.not”は、ＮＯＴ命令（反転命令）であり、Ｘレジスタのビット値Ｘｊを反転し、その反転結果！ＸｊをＸレジスタに格納する。
【０１６５】
また、ポインタレジスタｒｘのポインタが指定するアドレスのメモリセルデータは、Ａレジスタに格納される。
【０１６６】
単位ＡＬＵ回路ブロック（ＡＬＵ）３４を、マスクレジスタ（Ｖレジスタ）５８、Ｃレジスタ５６、Ｘレジスタ５４、Ａレジスタ５２、および算術演算論理回路５０で構成し、前述の図１９から図２４に一覧にして示す命令と組合せて演算処理を記述することにより、種々の演算処理を行なうことができ、特に、ＦＦＴに必要なバタフライ演算をワードパラレルかつビットシリアル態様で実行することができる。
【０１６７】
ＦＦＴ処理においては、積和演算および積差演算が繰返し実行される。以下、これらの積和演算および積差演算において利用される加算処理、減算処理および乗算処理のプログラムおよび演算シーケンスの一例について説明する。
【０１６８】
図２５は、加算演算を実行するプログラムの一例を示す図である。図２５において、行番号によりプログラム内の各演算命令の行を指定し、各行において、実行される命令が記述される“//”の記号の後に、実行される演算命令の内容が説明される。したがって、この“//”の後に記述される内容は、演算内容の説明であり、何ら実行命令ではない。図２５に示す加算プログラムは、２項加算処理であり、（ａ＋ｂ）＝ｃの処理が実行される。以下、図２５に示す加算プログラムの処理動作について説明する。
【０１６９】
行番号０において、マスクレジスタ（Ｖレジスタ）に“１”が設定され、キャリーレジスタ（Ｃレジスタ）の格納値が“０”にクリアされる。
【０１７０】
行番号１において、ポインタレジスタｒ０に定数ａｓが格納され、ポインタレジスタｒ１に定数ｂｓが格納され、ポインタレジスタｒ２に定数ｃｓが格納される。これらの定数ａｓ、ｂｓ、およびｃｓは、２項加算演算における各演算数ａ、ｂおよびｃの最下位ビットの対応のエントリ内の位置を示す。
【０１７１】
行番号２および行番号３において、加算命令が指定される。ポインタｉが、０から演算データのビット幅（bit_count）−１の間、繰返し、加算が実行され、各加算命令実行ごとに、ポインタｉが増分される（ｉ＋＋）。ｆｏｒ文の後の中括弧で囲まれる関数の内容が、“ｆｏｒループ命令”の条件が満たされるまで、すなわち、ポインタｉが演算対象データのビット幅の値に到達するまで、繰返し実行される。
【０１７２】
このｆｏｒ文で規定されるループ命令においては、ポインタレジスタｒ０の内容が、対応のＡＬＵ（単位ＡＬＵ回路ブロック）に転送され（ロードされ）てＸレジスタに格納される。次いで、ポインタレジスタｒ１に格納されるポインタ値が示すアドレスのメモリセルのデータが対応のＡＬＵ（単位ＡＬＵ回路ブロック）へ転送されてＸレジスタの格納値と加算される（Ｃレジスタの格納値をキャリーとして入力する）。加算結果が、ポインタレジスタｒ２のポインタが示すアドレス位置に格納される。この命令列において、“ｒ０＋”、“ｒ１＋”および“ｒ２＋”は、命令実行後、ポインタレジスタｒ０、ｒ１およびｒ２のポインタが、１増分されることを示す。
【０１７３】
行番号３において、このループ命令において実行される命令列の末尾が示される。このｆｏｒ｛｝のループ命令が完了し、データビット列について加算処理が完了すると、行番号４において、Ｃレジスタの格納値が対応のＡＬＵ内のＸレジスタに転送され、次いで、このＸレジスタの格納値が、ポインタレジスタｒ２が指定するアドレス位置に格納される。この処理により、加算結果により生成されたキャリーが対応のエントリのメモリセル内に格納される。
【０１７４】
図２６は、図２５に示す加算操作時のデータの流れを概略的に示す図である。まず、演算数ａ、ｂおよびｃのエントリＥＲＹの格納領域の最下位ビット位置ａｓ、ｂｓおよびｃｓが、それぞれポインタレジスタｒ０、ｒ１およびｒ２のポインタにより指定される。次いで、ポインタレジスタｒ０、ｒ１およびｒ２のポインタが示すメモリセルのデータａｉ、ｂｉが順次読出されて加算されて、その加算結果が、ポインタレジスタｒ２がポインタが示すメモリセル位置に格納される。演算数ａおよびｂが３ビットデータの場合、ｉ＝０〜２において加算およびストアが実行され、最終的にＣレジスタの格納値（キャリー）が、Ｘレジスタを介してポインタレジスタｒ２のポインタが指定するビット位置（ｃｓ＋３）に格納される。
【０１７５】
演算命令“ad.op.adc@r1+”により、ＡＬＵ内の算術論理演算回路の実行内容を、加算に設定することができる。
【０１７６】
図２７は、減算操作を示すプログラムの一例を示す図である。この図２７に示す減算プログラムにおいては、演算数ａおよびｂの演算（ａ−ｂ）が実行され、その減算結果ｃが生成される。以下、図２７を参照して、この２項減算処理の操作について説明する。
【０１７７】
まず、行番号０において、ＶレジスタおよびＣレジスタの初期設定が、加算演算処理時と同様に実行される。
【０１７８】
行番号１において、加算演算時と同様に、演算数ａ、ｂおよびｃ内のアドレスの初期設定が行なわれ、ポインタレジスタｒ０、ｒ１およびｒ２に、各対象演算数ａ、ｂおよびｃの最下位ビット位置が開始ビットａｓ、ｂｓ、およびｃｓとして設定される。
【０１７９】
行番号２および３においてループ演算命令が、加算演算実行プログラムと同様に指定される。命令“alu.op.sbb@r1+”により、演算数ａから演算数ｂを減算する処理が実行される。ロード命令“mem.ld”およびストア命令“mem.st”は、加算時と同様であり、これらの命令により、演算データの対応のＡＬＵへの転送および減算結果のメモリマットのビット位置ｃ［ｉ］への格納が実行される。
【０１８０】
行番号４の命令に従って、行番号２および３が指定するループ命令の完了後（演算数ａおよびｂの全ビットについての減算が完了後）、Ｃレジスタの内容がＸレジスタに転送され、次いで、Ｘレジスタの内容がポインタレジスタｒ２のポインタが指定するメモリセル位置に格納されてボローが格納される。
【０１８１】
減算処理における各データビットの流れは、図２６に示す加算演算において“加算”に代えて“減算”が行なわれればよく、ビットｂｉの反転値！ｂｉとビットａｉとの加算が行われる。したがって、減算操作時のデータビットの流れは、図２６に示す加算演算時と同じである。
【０１８２】
図２８は、乗算ａ・ｂ＝ｃを行なう乗算プログラムの一例を示す図である。以下、図２８を参照して、２項乗算演算処理について説明する。
【０１８３】
まず、行番号０において、ポインタレジスタｒ２およびｒ３に、定数ａｓおよびｃｓが指定される。この行番号０における初期設定時においては、被乗数ａおよび乗算結果ｃの領域の初期設定が行なわれ、乗数ｂの領域の設定はまだ行なわれない。
【０１８４】
行番号１において、ｆｏｒ文において被乗数ａの格納領域範囲のビット幅だけ乗算を繰返すことが指定される。“a_bit_count”は、被乗数ａのビット幅を示す。
【０１８５】
行番号２の関数部において、ポインタレジスタｒ２の指定する被乗数ビットａ［ｊ］が転送されてＸレジスタに格納される。このＸレジスタに格納された被乗数ビットａ［ｊ］が、Ｖレジスタ（マスクレジスタ）に格納される。この処理は、被乗数ビットａ［ｊ］が、“０”のときには、乗算を行なう必要がないためその乗算を停止し、消費電力を低減する。
【０１８６】
行番号３の命令により、ポインタレジスタｒ３のポインタがポインタレジスタｒ０にコピーされ、次いで、ポインタレジスタｒ１に、定数ｂｓが設定され、乗数ｂの初期アドレスが設定される。
【０１８７】
行番号４において、Ｃレジスタのクリアが実行される。
行番号５において、ｆｏｒ文により、乗数ｂに対する繰返し処理が指定される。値“b_bit_count”は、乗数ｂのビット幅を示す。
【０１８８】
行番号６における関数文においては、ポインタレジスタｒ０のポインタが指定するメモリセルのデータ、すなわち乗算結果が、Ｘレジスタへ転送される（ロードされる）操作が規定される。次に、ポインタレジスタｒ１のポインタが指定する乗数ビットｂ［ｉ］の対応のＡＬＵへの転送が行なわれ、Ｖレジスタ（マスクレジスタ）の格納値が“１”のときに、Ｘレジスタの乗算結果ｃと乗数ｂの対応のビットｂ［ｉ］との加算が行なわれる。この加算演算命令は、Ｖレジスタ（マスクレジスタ）の格納値が“０”のときには行なわれない。この処理により、乗算ａ［ｊ］×ｂ［ｉ］が実現され、この乗算結果が、それまでの部分積と加算される。
【０１８９】
この加算結果が、ポインタレジスタｒ０がポインタが示す位置に転送されて格納され（ストアされ）、ポインタレジスタｒ０のカウント値が１増分される。この行番号６の関数文の命令が、行番号５のｆｏｒ文の条件が満たされるまで、すなわち、乗数ｂの全ビットについて繰返し実行される。この加算処理により、１つのビットａ［ｊ］についての部分積生成とそれまでに生成された部分積との加算が実行される。
【０１９０】
１つの乗数ｂの全ビットについての処理が完了すると、行番号８において、Ｃレジスタの格納値がＸレジスタに格納され、ポインタレジスタｒ０のポインタが指定するアドレス位置に、このＸレジスタに転送されたキャリーが格納される。これにより、１つの桁ｉについての部分積の加算演算処理が完了する。
【０１９１】
次いで、行番号９において、ポインタレジスタｒ３のポインタが１増分され、次の桁の乗数ビットが指定される。行番号２から行番号９の演算処理が、被乗数ａの各ビットについて繰返し実行される。これらの一連の処理により、ビットシリアル態様で乗算を行なうことができる。
【０１９２】
図２９は、図２８に示す乗算プログラム実行時のビットの流れを模式的に示す図である。図２９において、被乗数ａのビットａ［ｊ］がマスクレジスタ（Ｖ）に格納される。次いで、乗算結果ビットｃ［ｊ］が読出されてＸレジスタに格納され、また、乗数ビットｂ［ｉ］が読出されて加算が選択的に実行される。この加算時において、マスクレジスタ（Ｖレジスタ）に格納された被乗数ビットａ［ｊ］が“０”のときには、加算は行なわれず、Ｘレジスタには、乗算結果ビットｃ［ｊ］が維持される。したがって、この加算結果は、ｃ［ｊ］＋ａ［ｊ］×ｂ［ｉ］を示しており、この加算結果が元のビット位置ｃｊに格納される。この処理が、乗数ｂの全ビットについて繰返し実行される。したがって、乗数ｂと被乗数ビットａ［ｊ］の部分積が求められ、その部分積結果が、対応の桁の部分積ビットに加算される。これにより、被乗数ａの各ビットごとに部分積を生成して、それまでの部分積とを加算する処理が繰返し実行されて、最終積が求められる。
【０１９３】
このような加算、減算および乗算プログラムを利用して、ＦＦＴ処理を実行する。
なお、乗算実行時、図２９に示す領域ｃにおいて、乗算結果をクリアせずに、たとえば演算対象数ｄを格納しておけば、積和演算、すなわちｄ＋ａ・ｂを行なうことができ、同様、ｄの２の補数値を格納しておくことにより、２の補数表示での積差演算処理、ａ・ｂ−ｄを実行することができる。
【０１９４】
また、乗算実行時においては、たとえば、単位ＡＬＵ回路ブロック内にＸレジスタを２つ設け、２次のブースアルゴリズムに従って、乗算を実行することも可能である。
【０１９５】
次に、ＦＦＴ処理について、サンプリング点数Ｎが８個である８点ＦＦＴの演算操作について説明する。
【０１９６】
このＦＦＴにおいて用いられる係数Ｗは、周期性を有しており、係数Ｗ＾ｋとしては、Ｎ点ＦＦＴの場合、Ｎ／２−１個の係数が必要とされるだけである。以下の説明においては、“＾”は、図において上付き文字で示される指数を示し、べき乗を示す。したがって、８点ＦＦＴの場合、４つの係数Ｗ＾０、Ｗ＾１、Ｗ＾２、およびＷ＾３が利用される。
【０１９７】
図３０は、時間間引き型８点ＦＦＴにおける信号（データ）の流れをその重み係数とともに示す図である。図３０において白丸印で示すノードは、利得１のノードであり、単に加算が実行される。各信号線において付される“−１”は、対応の信号に対し（−１）倍が実行される。したがって、第１段目のバタフライ演算においては、係数Ｗ＾０が用いられ、２段目のバタフライ演算時においては係数Ｗ＾０およびＷ＾２が用いられる。３段目のバタフライ演算において係数Ｗ＾０からＷ＾３が用いられる。
【０１９８】
これらの係数Ｗ＾０−Ｗ＾３を用いて積和演算および積算演算を行なってＦＦＴ処理を実行する。この信号フロー図において水平方向に延びる直線が、エントリに対応する。
【０１９９】
図３１は、時間間引き型８点ＦＦＴ処理時におけるメモリマット３０の記憶データの配列を概略的に示す図である。図３１において、メモリマット３０においては、８個のエントリＥＲＹ０−ＥＲＹ７が利用される。メモリマット３０は、処理データを格納する処理データ格納領域５０と、バタフライ演算による中間結果データを一時的に格納するテンポラリー領域５２と、各バタフライ演算実行時の係数データを格納する係数データ格納領域５４と、対応のＡＬＵ（単位ＡＬＵ回路ブロック）における演算の実行の制御を行なう制御データを格納する制御データ格納領域５６とを含む。
【０２００】
データ格納領域５０は、実数成分（Ｒｅで示す）を格納する実数成分領域５０ｒと、虚数成分（Ｉｍで示す）を格納する虚数成分領域５０ｉに分割される。これらの領域５０ｒおよび５０ｉにおいては、初期設定時（ステップ１）に、各エントリに入力データの実数成分および虚数成分がが配置される。図３１においては、時間間引き型ＦＦＴを実行する場合の入力データが、各エントリＥＲＹ０−ＥＲＹ７に順次格納される。
【０２０１】
テンポラリー領域５２も、同様、実数成分格納領域５２ｒと、虚数成分格納領域５２ｉに分割され、それぞれ中間演算結果の実数成分および虚数成分が格納される。
【０２０２】
係数データ格納領域５４は、８点ＦＦＴの場合、バタフライ演算段数は３段であり、１回目の計算（初段のバタフライ演算段）の係数を格納する領域５４ｆｒおよび５４ｆｉと、２回目の計算の係数を格納する領域５４ｓｒおよび５４ｓｉと、３回目の計算の係数を格納する領域５４ｔｒおよび５４ｔｉを含む。領域５４ｔｒ、５４ｓｒおよび５４ｆｒに、係数の実数成分が格納され、領域５４ｔｉ、５４ｓｉ、および５４ｔｉに、係数の虚数成分が格納される。この領域５４に示される係数データにおいて上付き文字で示される数字は、指数を示す。
【０２０３】
図３０に示す８点ＦＦＴにおける各信号線に対応してエントリＥＲＹ０−ＥＲＹ７が配設されており、この信号線に対応して領域５４において係数データが配置される。
【０２０４】
制御データ格納領域５６は、この１回目から３回目の計算の演算処理時において、動作可能とされるＡＬＵを設定する。この演算制御データは、各計算段に対応してメモリマット３０の下位ビット０から２の領域にそれぞれ格納され、ビット０、１および２において格納される制御データが、それぞれ対応のエントリに対応して配置されるＡＬＵの演算の実行可否を設定する。この演算制御データは、後に詳細に説明するように、Ｘレジスタから反転または非反転でＶレジスタに転送されて格納される。したがって、ＸレジスタからＶレジスタへの転送時に反転操作が行われる場合、演算制御データが“１”のときには、対応のＡＬＵにおいて命令（シフトおよびスワップ操作を含む）は実行されず、演算制御データが“０”のときに、対応のＡＬＵにおいて命令が実行される。
【０２０５】
上述の処理により、初期設定（ステップ１）が完了する。このメモリマット３０へのデータの格納は、図２に示す内部データバス１２を介して対応のコントローラ２１の制御の下に実行される。
【０２０６】
（ステップ２）
制御データ格納領域５６の最下位ビット（ビット番号０）の演算制御データパターンを読出し、転送回路（センスアンプ）を介して対応のＡＬＵのＸレジスタにロードし、次いで、各ＡＬＵにおいてＸレジスタに格納された演算制御データを反転してＶレジスタにコピーする。この結果、エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７に対応するＡＬＵ（単位ＡＬＵ回路ブロック）がアクティブ状態となり、指定された演算が実行される。
【０２０７】
この操作においては、データ格納領域５０に格納される入力データと係数データ格納領域５４ｆｒおよび５４ｆｉに格納されるデータを順次読出して対応のＡＬＵ（単位ＡＬＵ回路ブロック）において演算処理を行ない、その処理結果をテンポラリー領域５２に格納する。この演算処理においては、エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７において格納される入力データｘ［４］、ｘ［６］、ｘ［５］およびｘ［７］についての係数との乗算を行う演算処理が実行される。したがって、積和演算または積差演算を上述の加算、減算および乗算プログラム等を利用して実行することにより、複素数乗算ｘ［ｉ］・Ｗを実行し、テンポラリー領域５２に演算結果が格納される。この複素数乗算時においては、データを実数成分および虚数成分にそれぞれ分割して乗算を行い、乗算の結果に対して、実数成分となる乗算成分の積差演算および虚数成分となる成分の積和演算を実行する。したがって、入力信号ｘ［ｉ］と係数Ｗの乗算結果の実数成分Ｒｅおよび虚数成分Ｉｍは、それぞれ、次式で表わされる。
【０２０８】
Ｒｅ＝ｘｉＲｅ・ｗＲｅ＾０−ｘ４Ｉｍ・ｗＩｍ＾０、
Ｉｍ＝ｘ４Ｒｅ・ｗＩｍ＾０＋ｘｉＩｍ・ｗＲｅ＾０
ここで、記号ｗＲｅ＾０およびｗＩｍ＾０は、それぞれ係数Ｗの０乗の実数成分および虚数成分を示す。これらの実数成分Ｒｅおよび虚数成分Ｉｍが、それぞれ、テンポラリ領域５２の領域５２ｒおよび５２ｉにそれぞれ格納される。
【０２０９】
この乗算により、図３０に示す信号フロー図における入力信号ｘ［４］、ｘ［６］、ｘ［５］およびｘ［７］に対するバタフライ演算前のノードへの入力値が求められる（係数−１）の乗算はまだ行なわれていない。この乗算処理およびテンポラリ領域への乗算結果の格納により、第１回目（１段目）のバタフライ演算に対する準備処理が完了する。
【０２１０】
この乗算の演算実行時、１例として、以下の手順で処理が実行される。前述の乗算プログラムに従って、ｘｉＩｍ・ｗＩｍを算出し、次いでビット反転および１加算を行なって２の補数表示における反転値−ｘｉＩｍ・ｗＩｍを生成し、実数成分格納領域５２ｒの初期値として格納する。次いで、乗算ｘｉＲｅ・ｒＲｅを乗算し、先の乗算プログラムにおいて示した乗算結果格納領域ｃに対応する領域（テンポラリ領域５２の実数成分格納領域５２ｒが用いられても良い）に格納された反転値−ｘｉＩｍ・ｗＩｍを初期値として、積和演算を行なうことにより、最終的に領域５２ｒに格納される値が、積和演算により求められる。
【０２１１】
領域５２ｉにおいて配置される値については、データｘおよび係数の実数成分および虚数成分の積を求め、その和を加算演算処理により求める。この場合、ビットシリアル態様で領域５０および５４ｆｒおよび５４ｆｉに格納されるデータを読出して対応のＡＬＵにより演算処理を実行する。エントリＥＲＹ０−ＥＲＹ７において、演算制御データにより演算実行が許可されたＡＬＵにおいて並列に演算が実行される。
【０２１２】
図３３においては、図３２に示す領域５２ｒおよび５２ｉに格納される値をそれぞれ、以後の表示の簡略化のために、実数成分ｔｍｐＲｅｉおよび虚数成分ｔｍｐＩｍｉで置換して表示する。
【０２１３】
［ステップ３］
次いで、実際にバタフライ演算を行なうために、まず、各基本バタフライ演算において双対ノードの下側のノードの演算を実行するために、入力データのシフト動作を実行する。この場合、図３３に矢印で示すように、ＡＬＵ間接続用スイッチ回路４４においてスイッチの接続経路を１ビット下方向シフト状態に設定する。この状態において、演算制御データは、エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７に対して有効状態であるため、これらのエントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７において、コピー動作が実行され、転送データが有効状態のＡＬＵを介して対応のエントリに格納される。したがって、エントリＥＲＹ０の入力データｘ０Ｒｅおよびｘ０Ｉｍが、エントリＥＲＹ１にそれぞれ転送され、エントリＥＲＹ２の入力データｘ２Ｒｅおよびｘ２Ｉｍが、エントリＥＲＹ３に転送される。同様、エントリＥＲＹ４の入力データｘ１Ｒｅおよびｘ１Ｉｍが、エントリＥＲＹ５に転送され、エントリＥＲＹ６の入力データｘ３Ｒｅおよびｘ３Ｉｍが、エントリＥＲＹ７へ転送されて、それぞれ、実数成分格納領域５０ｒおよび虚数成分格納領域５０ｉに格納される。図３３においては、データ格納領域５２においてこの転送後のデータ配列を示す。
【０２１４】
このコピー動作時においては、以下の手順に従ってデータの転送（コピー）動作が、図２１に示すデータロード／ストア命令ｍｅｍ．ｌｄ／ｓｔおよび図２２に示すエントリ間データ移動命令ｍｏｖｅに従って実行される。１ビット下方向シフト状態に、ＡＬＵ間接続用スイッチ回路４４を設定する。メモリマット３０において、各データビットを並列にエントリＥＲＹ０−ＥＲＹ７において読出して、対応のセンスアンプ回路を介してＡＬＵ間接続回路の送信レジスタに読出データを設定して送信動作を行なう（１ビット下方向シフト動作）。次いで、演算制御データが有効状態とされるＡＬＵ（単位ＡＬＵ回路ブロック）において、受信レジスタが能動状態に設定され、送信データの取込が行なわれ、ＸレジスタまたはＡレジスタを介して再び、メモリマット３０へ転送される。メモリマット３０において、ワード線がこの動作期間中選択状態にあれば、同一ビット位置において、エントリ間でのデータビットの転送動作を実現することができる（ライトドライバを有効状態の単位ＡＬＵ回路ブロック（ＡＬＵ）に対して活性状態に設定する）。
【０２１５】
これにより、１クロックサイクルで、１ビットのデータのコピー動作を実現することができる。したがって、図３３に示すように、演算対象データのコピー動作完了後、エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４およびＥＲＹ６のデータ格納領域５２のデータが、それぞれ奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７に転送されて格納される。テンポラリー領域５２においては、その格納データは同一であり、また係数データ格納領域５４および演算制御データ格納領域５６においても、その状態は変化しない。
【０２１６】
［ステップ４］
データ格納領域５０の奇数とエントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５、およびＥＲＹ７に格納されたデータとテンポラリー領域５２の領域５２ｒおよび５２ｉに格納されたデータの実数成分および虚数成分それぞれについて減算を行ない、その減算結果を、それぞれ実数成分および虚数成分について、実数成分格納領域５０ｒおよび虚数成分格納領域５０ｉに格納する。この場合、演算制御データ格納領域５６において、ビット位置０の制御データは、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５、およびＥＲＹ７に対してのみ有効状態であり、対応のＡＬＵにおいて、減算処理が実行される。これにより、図３４に示すように、エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５、およびＥＲＹ７において、ｘｉＲｅ−ｔｍｐＲｅ（ｉ＋４）およびｘｉＩｍ−ｔｍｐＩｍ（ｉ＋４）がそれぞれ格納される。この演算処理の結果、図３０に示す第１段目のバタフライ演算において２点ＦＦＴ（基本バタフライ演算）の下側ノードにおける演算結果が求められる。
【０２１７】
この減算処理時においても、エントリＥＲＹ０−ＥＲＹ７それぞれにおいてデータの書込および読出が実行される。対応のＡＬＵにおける演算処理が選択的に制御データ格納領域５６に格納された演算制御データにより制御される。無効状態（非活性状態）のＡＬＵにおいては、以下の動作が行われても良い。対応のエントリから読出されたデータがＸレジスタに格納されず、単に読出データが元のメモリセル位置に書込まれる（センスアンプのリストア動作による）。また、非活性状態のＡＬＵにおいて、ＸおよびＡレジスタの入出力を、ロード／ストア命令実行時に、ハイインピーダンス状態に設定して、ライトドライバが活性化されると、センスアンプの保持データがライトドライバを介して元のメモリセルに格納される。ライトドライバを対応のＡＬＵの活性／非活性に係らずに活性化することができ、データロード（書込）時のライトドライバの制御が簡略化される。
【０２１８】
次いで、各基本バタフライ演算回路の双対ノードの上側ノードについての演算処理を実行するために、以下のステップ５の処理が実行される。
【０２１９】
［ステップ５］
図３５に示すように、ＡＬＵ間相互接続用スイッチ回路４４において、１ビット上方向シフト状態に接続経路を設定する。ＡＬＵ群３２においては、算術論理演算回路が加算ＡＤＤを行なう状態に設定される。また、制御データ格納領域５６の最下位ビット位置０のデータパターンが、それぞれＡＬＵへ非反転で転送されてＶレジスタに格納される。したがって、この状態においては、Ｖレジスタに“１”が格納されるのは、偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６に対応して配置されるＡＬＵである。ＡＬＵ間相互接続用スイッチ回路４４を介して転送されるデータは、転送先のＸレジスタに格納される。テンポラリー領域５２の実数成分格納領域５２ｒおよび虚数成分格納領域５２ｉを順次選択して、スイッチ回路４４を介してシフトさせて偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６のＡＬＵ（単位ＡＬＵ回路ブロック）におけるＸレジスタに格納する。次いで、データ格納領域５０における領域５０ｒおよび５０ｉのデータを順次読出して対応のＡＬＵのＸレジスタに格納し、加算操作ＡＤＤを行なって、その演算結果を元のビット位置に格納する。この演算時のデータの流れを、図３５においては矢印で示す。
【０２２０】
したがって、実数成分格納領域５０ｒおよび５２ｒの隣接エントリ間のデータの加算が行なわれ、偶数エントリの実数成分格納領域５０ｒに加算結果が格納され、また、虚数成分については、領域５０ｉおよび５２ｉの隣接エントリ間の虚数成分の加算が行なわれ、加算結果が偶数エントリの虚数成分格納領域５０ｉに格納される。奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５、およびＥＲＹ７においては、転送データがＸまたはＡレジスタに格納されず、加算操作は行なわれず、また、ＸおよびＡレジスタへの格納も行なわれないため、元の読出されたデータがそのまま元のメモリセル位置に再書込される。
【０２２１】
したがって、この１ビットシフト（ｍｏｖｅ）操作を伴う加算操作を行なった結果、偶数エントリのデータ格納領域５０の領域５０ｒおよび５０ｉそれぞれにおいて、基本バタフライ演算の上側ノードの演算結果データが、図３６に示すように格納される。すなわち、ｘｉＲｅ＋ｔｍｐＲｅ（ｉ＋４）およびｘｉＩｍ＋ｔｍｐＩｍ（ｉ＋４）が、それぞれエントリＥＲＹｉの実数成分格納領域５０ｒおよび虚数成分格納領域５０ｉに格納される。この場合、領域５２、５４および５６に対するデータの書込は行なわれないため、保持データが維持される。
【０２２２】
この偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６への演算処理が完了すると、第１回目の計算、すなわち第１段目のバタフライ演算が完了する。
【０２２３】
［ステップ６］
２回目の計算の入力データは、１回目の計算の結果の各エントリのデータ格納領域５０に格納されるデータである。したがって、２回目の計算時においては、図３６に示すデータ配列が用いられ、２段目のバタフライ演算が実行される。
【０２２４】
図３７は、８点ＦＦＴの第１回目の計算が完了した際に形成された信号を示す図である。第一段目の基本バタフライ演算完了時、図３７で破線で囲む領域の演算が完了し、各ノードにおいて、演算データｆ［０］−ｆ［７］がそれぞれ生成される。これらの演算結果データｆ［０］−ｆ［７］を用いて、２段目のバタフライ演算、すなわち２回目の計算が実行される。この場合、係数は、Ｗ＾０およびＷ＾２であり、この図３７に示す信号フロー図における各水平方向の信号経路に対応してエントリにおけるデータおよび係数データが格納される（水平方向の線が各エントリに対応する）。
【０２２５】
［ステップ６］
まず、テンポラリー領域５２は、図３８に示すようにクリアされ、また、データ格納領域５０において実数成分格納領域５０ｒおよび虚数成分格納領域５０ｉにおいて演算対象データが格納される。この演算対象データは、以下の表記を簡単にするために、エントリＥＲＹｉの格納演算データｆ［ｉ］の実数成分および虚数成分を、それぞれ、ｆｉＲｅおよびｆｉＩｍで表記する。
【０２２６】
この２段目の計算時においては、先の第１段目のバタフライ演算完了時のデータが利用される。また係数データとしては、図３７に示す信号経路に対応して係数データが格納される領域５４ｓｒおよび５４ｓｉの格納データが利用される。テンポラリー領域５２は初期化される。この場合、単に領域５２ｒおよび５２ｉに対してはデータの書込が行なわれるだけであり、重ね書きが行なわれてもよく、初期化が行われなくても良い。
【０２２７】
また、制御データ格納領域５６のビット位置１に配置される制御データパターンがＡＬＵ群へ転送されて対応のＸレジスタに格納された後、反転されてＶレジスタへ格納される。したがって、この２回目の計算時においては、エントリＥＲＹ２、ＥＲＹ３、ＥＲＹ６およびＥＲＹ７に対して設けられたＡＬＵ（単位ＡＬＵ回路ブロック）において演算が実行される。また、図３７に示す係数データとの乗算を行なうノードの出力データを求めるために、各エントリＥＲＹ０−ＥＲＹ７に格納されるデータと、係数データ格納領域５４ｓｒおよび５４ｓｉにおける格納データの複素数乗算ｆ［ｉ］・Ｗが実行され、その乗算結果が、テンポラリー領域５２に格納される。この複素数乗算実行時においても、単に先の書込計算時と同様、乗算、積和演算および積差演算を利用する。
【０２２８】
これらのエントリＥＲＹ２、ＥＲＹ３、ＥＲＹ６およびＥＲＹ７の格納データに対する演算においては、メモリマット３０におけるデータの書込／読出が並列に実行され、ＡＬＵ群（図示せず）における演算が制御データビットに応じて選択的に非活性化されるだけであり、演算処理は並列に実行される（ビットシリアル態様でかつエントリパラレル態様で）。
【０２２９】
この複素数乗算の結果、図３９に示すように、テンポラリー領域５２において、エントリＥＲＹ２、ＥＲＹ３、ＥＲＹ６およびＥＲＹ７各々に対する複素数乗算結果の実数成分および虚数成分が、それぞれ実数成分格納領域５２ｒおよび虚数成分格納領域５２ｉに格納される。
【０２３０】
この複素数乗算実行時においても、先の１回目の計算時と同様の乗算アルゴリズムおよび積和／積差演算アルゴリズムが利用される。
【０２３１】
［ステップ７］
次いで、図４０に示すように、ＡＬＵ間接続スイッチ回路４４において、ＡＬＵ間接続を２ビット下位方向にデータをシフトする経路に確立する。制御データ格納領域５６において、ビット位置“１”の制御データパターンの反転データパターンが、各ＡＬＵのＶレジスタに格納されている。したがって、エントリＥＲＹ２およびＥＲＹ３に対応するＡＬＵにおいて、エントリＥＲＹ０およびＥＲＹ１に対応して配置されるＡＬＵからの転送ビットを受け、また、エントリＥＲＹ６およびＥＲＹ７が、エントリＥＲＹ４およびＥＲＹ５に対応して配置されるＡＬＵからの転送データビットを受付ける。このシフト動作時においては、エントリＥＲＹ０−ＥＲＹ７は、すべて転送可能状態に設定され、受信動作および受信データのロードが制御データに従って選択的に活性化される。
【０２３２】
この状態で、領域５０の実数成分格納領域５０ｒおよび虚数成分格納領域５０ｉに格納されるデータビットの転送を実行する。この転送操作により、エントリＥＲＹ０の格納データｆ０Ｒｅおよびｆ０Ｉｍが、エントリＥＲＹ２へコピーされる。また、エントリＥＲＹ１のデータｆ１Ｒｅおよびｆ１Ｉｍが、エントリＥＲＹ３へコピーされる。同様、エントリＥＲＹ４のデータｆ４Ｒｅおよびｆ４Ｉｍが、エントリＥＲＹ６へ転送されて格納され、エントリＥＲＹ５のデータｆ５Ｒｅおよびｆ５Ｉｍが、エントリＥＲＹ７へ転送されて格納される。
【０２３３】
これにより、先の図３７に示す信号フロー図における２回目の計算のバタフライ演算における双対ノードのデータの組が準備される。
【０２３４】
なお、図４０においては、テンポラリー領域５２に格納される積差結果および積和結果を、以後の計算の表記を簡略化するため、それぞれｔｍｐＲｅおよびｔｍｐＩｍの記号で表記する。
【０２３５】
次いで、図４１に示すように、活性化されたＡＬＵに対応するエントリにおいて、領域５０および５２に格納されたデータの実数成分同士および虚数成分同士の演算を行ない、減算結果を、領域５０ｒおよび５０ｉに格納する。この演算操作時、制御データは、領域５６におけるビット位置１の制御データパターンであり、エントリＥＲＹ２、ＥＲＹ３、ＥＲＹ６およびＥＲＹ７において、減算が行なわれて減算結果が格納される。これにより、２回目の計算におけるバタフライ演算の双対ノードの下側のノードの出力値が算出される。
【０２３６】
次いで、制御データ格納領域５６のビット位置１の制御パターンをＸレジスタへ格納し、このＸレジスタのビット値を、非反転でＶレジスタに格納する。したがって、この状態において、エントリＥＲＹ０、ＥＲＹ１、ＥＲＹ４およびＥＲＹ５のデータに対して演算が可能となる。ＡＬＵ間相互接続用スイッチ回路４４においては、図４２に示すように、２ビット上方向にシフトする状態に、その接続経路を設定する。この状態で、領域５２に格納されるデータと領域５０に格納されるデータの実数成分および虚数成分それぞれの加算操作を実行し、その加算結果を、領域５０の元の位置に格納する。図４２においては、演算データの流れを矢印で示す。
【０２３７】
したがって、この状態においては、エントリＥＲＹ０の領域５０のデータｆ［０］（＝ｆ０Ｒｅ＋ｊ・ｆ０Ｉｍ）とエントリＥＲＹ２に格納されるデータｔｍｐＲｅ２＋ｊ・ｔｍｐＩｍ２の加算が行なわれ、その加算結果が格納される。同様、エントリＥＲＹ１においては、２ビット離れた位置のエントリのＥＲＹ３のテンポラリー領域５２の格納データとの加算が行なわれ、その加算結果が領域５０に格納される。エントリＥＲＹ４およびＥＲＹ５においても、同様、エントリＥＲＹ６およびＥＲＹ７のテンポラリー領域５２の格納データとの加算が実行され、その加算結果が元の位置に格納される。この演算操作により、各双対ノードにおける上側のノードの加算操作が実行される。
【０２３８】
図４３は、この加算操作完了後の、メモリマット３０の格納データを示す図である。図４３に示すように、エントリＥＲＹ０およびＥＲＹ２においては、それぞれ、積和演算結果および積差演算結果が格納され、エントリＥＲＹ１およびＥＲＹ３にも、同様、２項の被演算値が同じであり、これらの２項被演算値の加算および減算がそれぞれ行なわれたデータが格納される。同様、エントリＥＲＹ４およびＥＲＹ６においても加算および減算されたデータがそれぞれ格納され、エントリＥＲＹ５およびＥＲＹ７においても、加算および減算されたデータがそれぞれ格納される。この加算および減算操作により、８点ＦＦＴにおける２段目のバタフライ演算時実行時の、各双対ノードの加算ノードの出力および減算ノードの出力が求められる。
【０２３９】
図４４は、２回目の計算完了時の内部ノードの出力の態様を示す図である。すなわち、図４４において破線で囲む領域のバタフライ演算が完了すると、各信号伝達経路において、データＳ０−Ｓ７がそれぞれ生成され、これらのデータＳ０−Ｓ７がそれぞれエントリＥＲＹ０−ＥＲＹ７に格納される。これらの値を用いて、次の第３回目の計算を実行する。この第３段目のバタフライ演算時においては、係数データとしては、係数データ格納領域５４の領域５４ｔｒおよび５４ｔｉに格納された係数データを利用する。
【０２４０】
第３回目の計算においても、計算の手順は１回目および２回目と同じであり、単に双対ノードの組が異なるだけである。この第３回目の計算における各双対ノードの入力信号は、４エントリ離れた信号Ｓ０およびＳ４、Ｓ１およびＳ５、Ｓ２およびＳ６、およびＳ３およびＳ７の組であり、４ビットシフト動作を利用して、減算および加算を行なう。
【０２４１】
すなわち、第３回目の計算実行時においては、まず、図４３に示す制御データ格納領域５６のビット位置２の制御データを反転してＶレジスタに格納し、エントリＥＲＹ４−ＥＲＹ７のデータ格納領域５０のデータに対する演算を実行する。この場合、単に係数データ格納領域５４の領域５４ｔｒおよび５４ｉｒに格納されるデータと、データ格納領域５０の格納データとの複素数乗算が実行され、その乗算結果が、テンポラリー領域５２の対応のエントリに格納される。
【０２４２】
次いで、コピー動作を行なうため、エントリＥＲＹ０−ＥＲＹ３のデータ格納領域５０に格納されるデータが、それぞれエントリＥＲＹ４−ＥＲＹ７へ転送されて格納される（４ビットシフト動作によるコピー操作）。この状態で、テンポラリー領域の格納データとデータ格納領域５０の格納データとの実数成分および虚数成分それぞれについて減算を行ない、その減算結果を、エントリＥＲＹ４−ＥＲＹ７に格納する。この操作により、図４４に示す最終出力ノードにおける×（−１）演算操作が実現され、出力データＸ［４］−Ｘ［７］が求められる。
【０２４３】
一方、この４ビットシフト動作（コピー操作）を実行する前に、制御データ格納領域５６のビット位置２の制御データパターンをＸレジスタに格納し、次いで、Ｘレジスタの格納値を非反転でそのままＶレジスタに格納する。今度は、エントリＥＲＹ０−ＥＲＹ３の格納データに対する演算が実行される。この場合、４ビットシフト動作を実現する操作を行ない、テンポラリー領域に格納されたデータとデータ格納領域５０に格納されたデータの加算を行ない、加算結果を元の位置に格納する。したがって、図４４に示す信号フロー図の出力データＸ［０］−Ｘ［３］が、この加算操作により求められ、加算結果のデータが、エントリＥＲＹ０−ＥＲＹ３にそれぞれ格納される。
【０２４４】
この操作により、バタフライ演算を、データビットに対して並列に実行することができ、サンプリング点数が増大する場合においても、各基本バタフライ演算が並列に実行されるため、１段のバタフライ演算に要するクロックサイクル数は増大せず、高速でＦＦＴ処理を実行することができる。
【０２４５】
図４５は、Ｎ点ＦＦＴ実行時の処理操作を示すフロー図である。演算処理装置としては、これまでに示した半導体信号処理装置の主演算回路が用いられ、メモリマットにおいて、Ｎ個のエントリが準備されて利用される。以下、Ｎ点ＦＦＴ処理操作について、図４５を参照して説明する。
【０２４６】
まず、メモリマットに必要なデータ、すなわち入力データｘ、係数データＷおよび制御データがそれぞれ格納される（ステップＳＰ１）。入力データは、データ格納領域５０に、実数成分および虚数成分を分離して格納し、係数データＷが、信号フロー図の経路に従って、各バタフライ演算段に応じて格納される。また制御データが、各演算回数（バタフライ演算段）に応じて所定のパターンを持って格納される。この場合、係数データが格納されるエントリの位置と、制御データパターンとは対応する。
【０２４７】
まず、演算操作を実行するために、ｎを０に設定する（ステップＳＰ２）。
この状態で、ｎ番目の制御データパターンを読出し、この制御データパターンを用いてＡＬＵ群のＡＬＵ（基本ＡＬＵ回路ブロック）を選択的に活性化する（ステップＳＰ３）。この制御データパターンは、制御データを反転してＡＬＵを非活性化する論理レベルのデータであっても良く、また制御データが非反転の状態で対応のＡＬＵを非活性化する論理レベルのデータであっても良い。
【０２４８】
この状態で、ｎ番目の係数データＷとデータ領域に格納されるデータとの複素数乗算を行ない、その乗算結果をテンポラリー領域へ格納する（ステップＳＰ４）。
【０２４９】
次いで、２＾ｎ離れたエントリのデータ領域のデータを下方向へシフトし、コピー操作を行なう（ステップＳＰ５）。この場合、各ＡＬＵにおいては、制御データパターン（反転値）がマスクデータとして設定されており、活性化されたＡＬＵにおいてのみ転送データの受信およびコピー動作が実行される。
【０２５０】
次いで、このコピーデータとテンポラリー領域のデータとの複素数減算を行ない、対応のエントリのデータ領域へ結果データを格納する（ステップＳＰ６）。これにより、ＦＦＴのバタフライ演算の双対ノードの下側のノードについての出力データが求められる。
【０２５１】
次いで、ｎ番目の制御データパターンによるＡＬＵのマスク状態を反転する（ステップＳＰ７）。この操作のために、制御データパターンを読出して、Ｘレジスタを介してＶレジスタ（マスクレジスタ）に格納する。
【０２５２】
この状態で、２＾ｎ離れたエントリのテンポラリー領域データの上方向シフトを行なうように接続経路を設定し、この接続状態で、活性化されたＡＬＵにおいて、対応のエントリのデータ領域に格納されたデータと２＾ｎビット離れた位置のテンポラリー領域のデータとの加算を行ない、加算結果を対応のエントリの元のデータ領域へ格納する（ステップＳＰ８）。この場合においても、複素数演算が実行される。この操作により、双対ノードの上側のノードの出力データが求められる。
【０２５３】
次いで、ｎが２を底とするＮの対数より１小さい値であるかの判定が行なわれる（ステップＳＰ９）。すなわち、最終のバタフライ演算段の計算が完了したかの判定が行なわれる。まだ、最終ＦＦＴ結果が求められていない場合には、ｎを１増分し、再びステップＳＰ３へ戻り、同様の操作を実行する。一方、ステップＳＰ９においてｎが２を底とするＮの対数よりも１小さい値に等しいと判定されると、最終ＦＦＴ処理データが求められたとして、処理結果データが出力される。
【０２５４】
したがって、Ｎ点ＦＦＴとして、サンプリング点が２のべき乗のＦＦＴ処理は、高速で実行することができる。すなわち、バタフライ演算に要する時間のみで、サンプリング点数にかかわらず、各バタフライ演算段の演算操作を完了することができる。したがって、ビットシリアル態様で演算操作が行なわれ、１つの基本バタフライ演算に要する時間が長い場合においても、１０２８点、２０４８点などの多くのサンプリング点に対するＦＦＴ処理を行なう場合、大幅に処理時間を短縮することができる。
【０２５５】
なお、上述の説明においては、制御データパターンの“０”および“１”のパターンが逆であってもよい。すなわち、マスクレジスタ（Ｖレジスタ）への格納操作時の反転／非反転操作を反対とすることにより、制御データのビット値と対応のＡＬＵの活性／非活性の状態との対応関係を反転させることができる。
【０２５６】
また、上述の演算処理においては、双対ノードの下側のノードの出力データを積差演算により先に求め、ついで上側ノードの出力データを積和演算により求めている。しかしながら、上側ノードの出力データを先に求め、ついで、下側ノードの出力データが求められても良い。
【０２５７】
以上のように、この発明の実施の形態１に従えば、メモリセルマットを複数のエントリに分割し、各エントリに対応して演算回路を配置し、各エントリにおいて、対応の演算回路の演算の実行可否を制御するデータを係数データとともに格納し、この制御データを用いて係数データと処理データとの複素数乗算を行ない、またＡＬＵ間接続経路をスイッチ回路により設定してコピー動作および転送動作を行なっており、各エントリにおいて並列に積和演算および積差演算各々を行ない、また加算および減算を並列に行なってバタフライ演算を実行することができ、各サンプリング点に対する基本バタフライ演算を並列に実行することができ、バタフライ演算を基本バタフライ演算単位で逐次実行する場合に比べて大幅に処理時間を低減することができる。
【０２５８】
［実施の形態２］
図４６は、この発明の実施の形態２に従う半導体信号処理装置におけるメモリマットのデータの配置を示す図である。この図４６に示す構成においても、８点ＦＦＴ処理を対象とし、メモリマット３０は、８個のエントリＥＲＹ０−ＥＲＹ７に分割される。このメモリマット３０は、先の実施の形態１と同様、演算対象データ格納領域５０と、中間演算結果データを格納するテンポラリー領域５２と、係数データを格納する係数データ格納領域５４と、ＡＬＵの演算を選択的に活性化する制御データを格納する制御データ格納領域５６を含む。
【０２５９】
この発明の実施の形態２においては、偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６には、演算対象データの実数成分が格納され、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５、およびＥＲＹ７には、演算対象データの虚数成分が格納される。ＥＲＹ０−ＥＲＹ７それぞれにおいては、ＦＦＴバタフライ演算の双対ノードのデータの組の実数部および虚数部が格納される。したがって、データ格納領域５０は、双対ノードに対する入力データの上側ノードの入力データを格納する領域５０ｕと、下側ノードの入力データを格納する領域５０ｌとを含む。
【０２６０】
テンポラリー領域５２は、２つの領域５２ａおよび５２ｂに分割される。エントリが演算対象データの実数成分および虚数成分を格納するようにグループ化されており、これらの領域５２ａおよび５２ｂには、それぞれ、各演算において異なる演算サイクルにおいて生成される中間演算結果が格納される。エントリを実数成分および虚数成分にグループ化することにより、双対ノードにおける入力データの算出時のエントリの指定が簡略化され、応じて、バタフライ演算時のエントリ指定のアドレス制御が簡略化される。
【０２６１】
係数格納領域５４においても、エントリの偶数／奇数に応じて、係数データが、実数部および虚数部に分割されて格納される。８点ＦＦＴ処理であり、３回の計算（３段のバタフライ演算）が行なわれるため、係数データ格納領域５４は、各段の係数をそれぞれ格納する領域５４ｆ、５４ｓおよび５４ｔに分割される。領域５４ｆ、５４ｓおよび５４ｔにおいては、８点ＦＦＴ信号フロー図において、上側から記述される重み係数が順次実数成分および虚数成分それぞれに分割されて格納される。
【０２６２】
すなわち、１回目の計算に用いられる係数データを格納する領域５４ｆにおいては、係数データＷ＾０の実数成分ｗＲｅ＾０と虚数成分ｗＩｍ＾０が、それぞれ偶数エントリおよび奇数エントリに格納される。２回目の計算に用いられる係数を格納する領域５４ｓにおいては、係数データＷ＾０およびＷ＾２が利用されるため、これらの係数データＷ＾０およびＷ＾２の実数成分および虚数成分がエントリＥＲＹ０−ＥＲＹ７に順次格納される。すなわち、エントリＥＲＹ０およびＥＲＹ１と、エントリＥＲＹ４およびＥＲＹ５に、係数データＷ＾０の実数成分および虚数成分がそれぞれ格納され、エントリＥＲＹ２およびＥＲＹ６には、係数データＷ＾２の実数成分が格納され、エントリＥＲＹ３およびＥＲＹ７に、係数データＷ＾２の虚数成分が格納される。
【０２６３】
３回目の計算に用いられる係数を格納する領域５４ｔにおいては、係数データＷ＾０からＷ＾３が、各々実数成分および虚数成分に分離してエントリＥＲＹ０からＥＲＹ７に、順次格納される。
【０２６４】
演算制御データ格納領域５６においては、先の実施の形態１と同じパターンを有する制御データが、ビット位置０から２の領域に格納される。この制御データ格納領域５６に格納される制御データは、８点ＦＦＴにおいて時間間引き型のＦＦＴ処理が実行されるため、各エントリの番号の２進表示のビット反転値のパターンが、各対応のエントリに格納される。マスクレジスタに格納されるビット値の論理に応じて、この制御データパターンのビット値がすべて反転されてもよい。次に、図４６に示すメモリマット３０に格納されるデータを用いたＦＦＴ処理について説明する。
【０２６５】
（ステップ１）
まず、図４７に示すように、ＡＬＵ群３２に対しＶレジスタに対するマスクビットをすべて１に設定する（Ｖ＝１）。また、ＡＬＵ群３２における各ＡＬＵを乗算ＭＵＬを行なう状態に設定する。
【０２６６】
この状態で、ポインタレジスタ（ｒ０−ｒ３）を利用して、領域５０ｌおよび５４ｆを、演算対象領域に設定し、領域５２ｒを中間データ格納領域に設定し、ビットシリアル態様で乗算を実行する。この乗算により、偶数エントリにおいては、実数成分同士の乗算結果が格納され、奇数エントリにおいては、虚数成分同士の乗算結果が格納される。したがって、領域５２ａにおいては、すべて実数成分の演算結果データが格納される。すなわち、たとえば、エントリＥＲＹ０においては、実数成分ｘ４Ｒｅ・ｗＲｅ＾０が格納され、エントリＥＲＹ１においては、虚数成分の積ｘ４Ｉｍ・ｗＩｍ＾０が格納される。同様にして、入力データｘ［４］、ｘ［６］、ｘ［５］およびｘ［７］についても、係数Ｗ＾０との実数成分および虚数成分の積がそれぞれ対応のエントリに格納される。
【０２６７】
次いで、１ビット離れたＡＬＵ間のスワップ命令ecm．swpを実行し、命令間接続用スイッチ回路の接続を１ビットシフト状態に設定する。この状態で、すべてのＡＬＵにおいては、マスクビットＶが１であり、演算を実行して、虚数成分の算出を行なう。この乗算結果は、図４８に示すように、領域５２ｂに格納される。
【０２６８】
図４８に示すように、ＡＬＵ間相互接続用スイッチ回路４４において、隣接エントリのＡＬＵを相互接続し、この接続信号伝送状態を、図１６に示すスワップswapを行なう状態に設定する。このスワップ命令swap実行時においては、係数データ格納領域５４ｆの係数データの交換が行なわれる。係数データの実数成分と虚数成分の交換後、各エントリＥＲＹ０−ＥＲＹ７の領域５０ｌに格納される双対ノードの下側ノードのデータと実数成分と虚数成分が交換された係数との乗算が実行される。したがって、この乗算結果は、すべて虚数成分であり、図４８に示すように、テンポラリー領域５２の領域５２ｂにおいて各対応のエントリにそれぞれ格納される。
【０２６９】
この処理により、１段目のバタフライ演算において必要とされる２項のデータ値はすべて求められ、次いで、加算または減算が実行される。
【０２７０】
（ステップ２）
次に、制御データ格納領域５６のビット番号０の制御データパターンをＡＬＵ群３２へ転送し、Ｘレジスタを介してＶレジスタに、非反転で、ビット位置０の制御データを格納する。これにより、図４９に示すように、エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６において、演算が実行される。このＡＬＵ群３２において各ＡＬＵを、減算ＳＵＢを行なう状態に設定し、また、ＡＬＵ間相互接続用スイッチ回路４４においては、１ビット上方向シフト状態に設定し、領域５２ａの偶数エントリに格納された値から、領域５２ａの奇数エントリに格納された値を減算する操作を実行する。
【０２７１】
この減算処理においては、活性状態のＡＬＵにおいては、１ビット上方向にシフトされたデータをＸレジスタに格納し、次いで、Ａレジスタに格納された対応のエントリからのデータとの減算を実行する。したがって、まず領域５２ａにおいて、ワード線を立上げてデータを読出し、１ビット上方向にシフトして（スイッチ回路４４を介して）、上側の偶数エントリのＡＬＵのＸレジスタに、この１ビット上方向にシフトされた値が格納される。このワード線を立上げた状態で、次いで、対応のエントリのメモリセルから読出されたデータを、Ａレジスタに格納する（対応のＡＬＵにおいて）。この場合、偶数エントリにおいてのみ、ＡＬＵ回路が活性状態であり、この活性状態のＡＬＵのＡレジスタにおいてのみ、転送データの格納が行なわれる。この状態で、Ａレジスタに格納された値から、Ｘレジスタに格納された値の減算を行ない、その減算結果を、元の領域５２ａに格納する。これにより、偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４およびＥＲＹ６において領域５２ａにおいて、積差演算結果が格納され、信号フロー図における１段目の双対ノードの下側ノードの出力値が求められる。
【０２７２】
（ステップ３）
次いで、図５０に示すように、制御データ格納領域５６のビット位置０のデータを反転して、ＡＬＵ群３２へ転送し、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７に対応して配置されるＡＬＵを活性状態に設定する。また、ＡＬＵ間相互接続用スイッチ回路４４においては、１ビット下方向にシフトする状態にその内部の接続回路が設定される。また、ＡＬＵ群３２において、各ＡＬＵは加算ＡＤＤを行なう状態に設定される。この状態において、テンポラリー領域５２の領域５２ｂに格納されるデータを読出してＸレジスタに格納する。このＸレジスタの格納データが１ビット下方向にシフトされ、奇数エントリに対応して設けられるＡＬＵにおいて、Ｘレジスタに転送データの格納が行なわれる。偶数エントリのＡＬＵに対しては、接続回路がデータ送信状態に設定されており、Ｘレジスタへのシフトデータの格納は行なわれない。次いで、ロード命令に従って、同じビット位置において、データを再び読出し、Ａレジスタに読出データを格納する。この場合、偶数エントリにおいては、Ａレジスタへの格納は行なわれず、奇数エントリにおいてのみ、転送データビットのＡレジスタへの格納が実行されても良く、また、Ａレジスタへの格納が行われても良い。非活性状態のＡＬＵにおいて、加算処理が非活性状態とされて、また、ストア命令が無効とされ、ストア動作時においてはメモリセルの読出データがセンスアンプおよびライトドライバを介して再書き込みされても良い（ストア命令実行時、非活性のＡＬＵ（単位ＡＬＵか色ブロックにおいてレジスタを全て出力ハイインピーダンス状態に設定することにより、この再書き込み動作は実現される）。
【０２７３】
次いで、活性化されたＡＬＵにおいて加算ＡＤＤを行ない、その加算結果が、テンポラリー領域５２の領域５２ｂに格納される。この処理を繰返すことにより、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７の領域５２ｂにおいて、乗算結果を加算した値の虚数成分が格納され、領域５２に格納される差分値および加算値により各双対ノードの上側のノードの入力データが生成される。
【０２７４】
（ステップ４）
次いで、制御データ格納領域５６のビット位置０の演算制御データを読出して、Ｘレジスタを介してＶレジスタに反転して格納した状態で、ＡＬＵ群３２の演算操作をコピー命令copyを実行する状態に設定する。このコピー操作により、テンポラリー領域５２において、領域５２ｂの格納データを領域５２ａへ転送する。すなわち、領域５２ｂのデータビットが、対応のＡＬＵのＸレジスタに格納される。次いで、活性状態のＡＬＵにおいて、このＸレジスタに格納された値が、領域５２ａに転送されて格納される。非活性状態のＡＬＵにおいては、Ｘレジスタが出力ハイインピーダンス状態であるかまたは対応のライトドライバが非活性状態とされる。したがって、領域５２ａへのデータ転送時、ワード線が選択され、偶数エントリにおいて、メモリセルデータが読出されても、単に読出されたデータが、センスアンプおよびライトドライバを介してまたはセンスアンプにより再書込されるだけであり、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７においてのみ、領域５２ｂの格納データの領域５２ａへのコピー動作が実行される。
【０２７５】
この一連の動作完了後、図５１に示すように、エントリＥＲＹ０からＥＲＹ７において、それぞれ、対応の双対ノードの入力データの準備が完了する。
【０２７６】
（ステップ５）
次いで、図５２に示すように、エントリＥＲＹ０−ＥＲＹ７それぞれにおいて、領域５２ａに格納される中間値と領域５０ｕに格納されたデータとの加算を行ない、加算結果を領域５０ｕに再び格納する。また、領域５０ｌに格納されるデータから、テンポラリーデータ格納領域５２ｂに格納されたデータの減算を実行する。加算および減算はいずれが先に実行されても良い。
【０２７７】
この演算操作時においては、ＡＬＵ群３２においては、マスクビットＶがすべて１に設定され、各ＡＬＵにおいて加算ＡＤＤおよび減算ＳＵＢが選択的に実行される。すなわち、領域５０ｕに対する演算処理時には加算ＡＤＤが実行され、領域５０ｌの場合には、減算が実行される。これにより、対をなすエントリＥＲＹｉ，ＥＲＹ（ｉ＋１）において、領域５０ｕに、双対ノードの上側のノードの出力値が格納され、領域５０ｌにおいて、双対ノードの下側ノードの出力値が格納される。この処理により、１回目のバタフライ演算が完了し、出力データがそれぞれ生成される。
【０２７８】
この結果、図５２に示すように、図３０に示す表記に従って、偶数エントリには、実数成分データが格納され、奇数エントリには、虚数成分が格納される。この領域５０ｕおよび５０ｌそれぞれにおいて、１つの偶数エントリおよび奇数エントリにより、１つのバタフライ演算完了後の出力データが格納され、領域５０ｕにおいては、双対ノードの上側ノードの出力値が格納され、領域５０ｌには、双対ノードの下側ノードの出力値が格納される。
【０２７９】
次いで、２回目のバタフライ演算を実行するために、まず、スワップswap操作を実行する。この場合、図１０に示す２ビット分離ＡＬＵ間スワップの接続形態が利用される。ＡＬＵ群３２において、各ＡＬＵがスワップ命令swapを実行する状態に設定され、また、スイッチ回路４４においては、２ビット双方向シフトを実現する接続形態に設定される。
【０２８０】
このスワップ時においては、図５３に示すように、偶数エントリ間での格納領域の異なるデータ（異なる演算結果データ）の実数成分の交換が行なわれ、奇数エントリ間においては、異なる演算結果データ、すなわち、格納領域の異なる虚数成分間の交換が実行される。このスワップ動作時においては、一例として、以下のデータ転送手順が実行される。まず、領域５０ｌのデータが読出され、Ｘレジスタに格納され、次いで送信レジスタに転送される。次いで、領域５０ｕのメモリセルデータが読出されて、対応のＡＬＵのＸレジスタを介して送信レジスタに転送される。この送信レジスタを介してデータを双方向に転送することにより、それぞれ対応のＡＬＵ間においてＸレジスタの保持データの交換が行なわれる。この後、領域５０ｌおよび５０ｕに、それぞれＸレジスタ（対応のＡＬＵに含まれる）に保持されるデータを格納する。これにより、スワップ動作が実現される。
【０２８１】
この格納領域が異なるデータを並行して領域５０ｕおよび５０ｌに格納することはできない（同一メモリマットにおいて同時に２本のワード線を選択状態に駆動することはできない）。したがって、ＡＬＵのストア命令実行を選択的に活性化して、領域５０ｕおよび５０ｌに対して別のサイクルにおいてデータの転送および書込を実行する。この操作においては、例えば、Ｖレジスタのマスクデータを利用して選択的にＡＬＵを活性化して、スワップする組のエントリの上位側のエントリに対して先ずストア命令を実行し、次いで下位側のエントリに対してストア命令を実行する。
【０２８２】
スワップ動作時においては、領域５４および５６のデータは操作されず、そのまま維持される。
【０２８３】
図５４は、このスワップ動作完了後のメモリセルマットの格納データの配置概略的に示す図である。図５４に示すように、偶数エントリＥＲＹ０、ＥＲＹ２、ＥＲＹ４、およびＥＲＹ６には、実数成分Ｒｅが格納され、奇数エントリＥＲＹ１、ＥＲＹ３、ＥＲＹ５およびＥＲＹ７は、虚数成分Ｉｍが格納される。領域５０ｕにおいては、２回目のバタフライ演算時における双対ノードの上側ノードの入力データが格納され、領域５０ｌには、この双対ノードの下側ノードの入力データが格納される。たとえば、エントリＥＲＹ０およびＥＲＹ１の領域５０ｕには、双対ノードの上側ノードのデータｆ０の実数成分および虚数成分がそれぞれ格納され、領域５０ｌには、双対ノードの入力ノードの下側ノードの入力データｆ２の実数成分および虚数成分がそれぞれ格納される。これにより、先の図３７に示す信号フロー図における２回目の計算時の双対ノードの入力データが、組をなして配列される。この状態は、先の図４６に示す１回目の計算時の双対ノードの入力データの配列と同じである。したがって、各エントリにおいて第１回目の計算と同様の演算処理を実行することにより、２回目の計算（２段目のバタフライ演算）を行なうことができる。
【０２８４】
この２回目の計算時においては、マスクレジスタのデータとしては、制御データ格納領域５６のビット位置“１”の制御データパターンが用いられ、また、係数データとしては、係数データ格納領域５４の領域５４ｓに格納される係数が用いられる。
【０２８５】
すなわち、図５５に示すように、２回目の計算時において基本バタフライ演算の双対ノードの入力データ対において、実数成分および虚数成分がそれぞれ同じエントリに格納される。図５５においては、エントリＥＲＹ０およびＥＲＹ１に格納されるデータｆ０およびｆ２を破線ブロックで代表的に示す。したがって、１回目の基本バタフライ演算時において、エントリＥＲＹ０およびＥＲＹ１において格納される双対ノードの入力データｘ［０］およびｘ［４］と同じ操作を行なって、バタフライ演算を実行することができる。他のエントリにおいても同様であり、エントリＥＲＹｉおよびＥＲＹｉ＋１において双対ノードの入力データが格納される。したがって、１回目の計算と同様の処理を、図５４に示すデータ配列に対して実行することにより、２回目の計算（２段目のバタフライ演算）を行なうことができる。
【０２８６】
図５６は、図５５に示す２回目の計算完了時における領域５０の格納データの配置を示す図である。エントリＥＲＹ０−ＥＲＹ７においては、２回目の計算（２段目のバタフライ演算）の双対ノードの出力データが格納されており、したがって、その３回目の演算対象データも、図５５に示す出力信号ｓ０−ｓ７と対応させて、２回目の計算時の入力データ（演算対象データ）と番号は同じとした。すなわち、エントリＥＲＹ０およびＥＲＹ１に、出力データｓ０およびｓ１が格納され、エントリＥＲＹ２およびＥＲＹ３に、出力データｓ２およびｓ３の組が格納され、エントリＥＲＹ４およびＥＲＹ５において、出力データｓ４およびｓ５の組が格納され、エントリＥＲＹ６およびＥＲＹ７に、出力データｓ６およびｓ７の組が格納される。図５５においては、エントリＥＲＹ０およびＥＲＹ１において格納されるデータｓ０およびｓ４の組を代表的に示す。
【０２８７】
このデータ配置においても、先の１回目の計算時と同様、偶数エントリに実数成分Ｒｅが格納され、奇数エントリに虚数成分Ｉｍが格納される。
【０２８８】
次いで、３回目の計算を行なう場合、２回目の計算と同様に、双対ノードの入力データの組を、隣接エントリの組に格納する必要がある。したがって、図５６において示すように、４ビット離れた位置のエントリ間において、双対ノードの下側のデータについて交換を行なう。すなわち、ＡＬＵ群３２においては、スワップ命令swapを実行する状態に設定し、またＡＬＵ間相互接続スイッチ回路４４においては、４ビット分離ＡＬＵの結合を行なう状態に設定する。この状態においては、エントリＥＲＹ０−ＥＲＹ３の領域５０ｌの格納データが、エントリＥＲＹ４−ＥＲＹ７の領域５０ｕの格納データと交換される。
【０２８９】
この結果、図５６に示すように、エントリＥＲＹ０およびＥＲＹ１においては、３回目の計算時における双対ノードの入力データｓ０およびｓ４が格納され、エントリＥＲＹ２およびＥＲＹ３には、データｓ１およびｓ５の組が格納され、エントリＥＲＹ４およびＥＲＹ５においては、データｓ２およびｓ６が格納され、エントリＥＲＹ６およびＥＲＹ７においては、判断結果データｓ３およびｓ７が格納される。この場合においても、偶数エントリにおいては実数成分Ｒｅが格納され、奇数エントリには、虚数成分Ｉｍが格納される。
【０２９０】
したがって、この状態においては、図５７において示すように、組をなすエントリにおいて、３回目のバタフライ演算実行時においても双対ノードの入力データの組が各エントリに格納されている。従って、係数データＷは領域５４ｔに格納される係数データを利用し、また、演算制御データとしては、領域５６のビット位置２のデータパターンを利用して、１回目の計算時と同様の演算処理を行なうことにより、最終結果Ｘ［０］−Ｘ［７］が生成される。
【０２９１】
この最終演算結果形成時のメモリマット３０における格納データの配置を、図５８に示す。すなわち、図５８に示すように、エントリＥＲＹ０およびＥＲＹ１にＦＦＴ処理結果のデータＸ［０］およびＸ［４］が格納され、エントリＥＲＹ２およびＥＲＹ３に、ＦＦＴ結果のデータＸ［１］およびＸ［５］が格納され、エントリＥＲＹ４およびＥＲＹ５に、ＦＦＴ結果Ｘ［２］およびＸ［６］が格納され、エントリＥＲＹ６およびＥＲＹ７に、ＦＦＴ結果のデータＸ［３］およびＸ［７］が格納される。この場合、領域５０ｕにおいて、ＦＦＴ処理結果のデータＸ［０］−Ｘ［３］が格納され、領域５０ｌに、データＸ［４］−Ｘ［７］が格納され、偶数エントリには、実数成分Ｒｅが格納され、奇数エントリには、虚数成分が格納される。
【０２９２】
このＦＦＴ処理結果のデータの読出時には、領域５０ｕのデータを読出し、次いで領域５０ｌのデータを読出すことにより、ＦＦＴ処理結果を、上位データ群および下位データ群の順序に従って順次読出すことができる。この場合、さらに、１ビット分離ＡＬＵ間でのスワップ動作を行なって領域５０ｌと領域５０ｕのデータを交換することにより、エントリＥＲＹ０−ＥＲＹ７に、ＦＦＴ後の処理データが、領域５０ｕおよび領域５０ｌにおいてビット逆転順序で整列して配列される。
【０２９３】
Ｎ点ＦＦＴ処理の場合、したがって、上述の処理を、２を底とするＮの対数回繰返し、かつ各バタフライ演算段の実行前に演算対象のデータの組を生成するスワップ動作時のＡＬＵ間距離を、２の＾ｎ乗ずつ増分することにより、Ｎ点ＦＦＴ処理を実行することができる。
【０２９４】
図５９は、実施の形態２に従ってＮ点ＦＦＴ処理を実行する際の処理操作を示すフロー図である。以下、図５９を参照して、この発明の実施の形態２に従うＮ点ＦＦＴ処理の操作について簡単に説明する。
【０２９５】
まず、メモリマットの初期設定が行なわれる（ステップＳＰ２０）。この初期設定時においては、メモリマットに係数データＷおよび制御データが格納され、また計算回数ｎがクリアされる（０に設定される）。係数データＷは、各計算回数（バタフライ演算段）に応じたパターンを有し、各係数データは、実数成分および虚数成分が分離され、それぞれ、偶数エントリおよび奇数エントリに格納される。また、各計算回数に応じたパターンを有する制御データが制御データ格納領域に格納される。各エントリに格納される制御データは、対応のエントリの番号をビット逆順序で記述することにより得られる。
【０２９６】
次いで、演算データが格納される（ステップＳＰ２１）。この演算データの設定においても、演算対象データの実数成分が偶数エントリに格納され、虚数成分が奇数エントリに格納される。各エントリにおいては、双対ノードのデータが同一エントリに配設されるようにデータの格納が行なわれる。
【０２９７】
次いで、計算回数ｎが０であるかの判定が行なわれる（ステップＳＰ２２）。計算回数ｎが１以上であり、２回目の計算以後の計算の場合には、２＾ｎビット離れたＡＬＵ間スワップ接続が行なわれ、この２＾ｎビット離れたエントリの演算対象データの実数成分のスワップおよび虚数成分のスワップが実行される。ｎ回目の計算時の双対ノードのデータの組を各エントリに格納する（実数成分および虚数成分について）。
【０２９８】
１回目の計算時においては、計算回数ｎは０であるため、ステップＳＰ２４において、各エントリにおいて双対ノードの下側ノードの演算データと対応の係数Ｗとの乗算が行なわれ、乗算結果が対応のエントリの第１のテンポラリー領域（第１領域）に格納される（ステップＳＰ２４）。
【０２９９】
次いで、１ビットスワップ動作により、１ビット離れた位置の隣接ＡＬＵを介して係数Ｗの交換が行なわれる（ステップＳＰ２５）。この係数交換操作時においては、係数Ｗの実数成分ｗＲｅおよび虚数成分ｗＩｍの交換が行なわれる。
【０３００】
各エントリにおいて、交換後の係数Ｗと相補対ノードの下側ノードの入力データとの乗算が行なわれ、この乗算結果が、対応のエントリのテンポラリー領域の第２テンポラリー領域（第２領域）に格納する（ステップＳＰ２６）。これにより、各エントリのテンポラリー領域において、交換前の係数データとの乗算結果が第１領域に格納され、第２領域に交換後の係数データとの乗算結果が格納される。相補対ノードの入力データ項が、準備される。
【０３０１】
次いで、１ビットシフト操作を行ない、選択的に制御データに従ってＡＬＵを活性化し、双対ノードのエントリの同一位置間の第１領域の上位ノードエントリのデータから下位ノードエントリのデータの減算を行ない、また第２領域のデータの加算を行なう。減算結果は、上位ノードエントリの第１領域に格納し、加算結果は、下位ノードエントリの第２領域へ格納する（ステップＳＰ２７）。ここで、上位ノードエントリは、信号フロー図におけるノードの上位側のノードに対応するエントリを示し、下位ノードエントリは、信号フロー図の下位側のノードに対応するエントリを示す。
【０３０２】
次いで、制御データパターンに従って、選択的にＡＬＵを活性化し、各下位ノードエントリにおいて第２領域データを、第１領域へ転送して格納する（コピー動作）（ステップＳＰ２８）。
【０３０３】
次いで、各エントリにおいて、上側ノードのデータに第１領域のデータを加算し、この上側ノードデータ領域へ加算結果を格納する。また、各エントリにおいて、下側ノードの演算データから第１領域データを減算し、この減算結果を下側ノード領域に格納する（ステップＳＰ２８）。このように、１つのバタフライ演算動作が完了する。
【０３０４】
次いで、計算回数ｎが２を底とするＮの対数より１小さいかの判定が行なわれる（ステップＳＰ３０）。この計算回数ｎが、２を底とするＮの対数より１小さい場合には、最後のバタフライ演算が完了したため、その生成データがＦＦＴ処理データとして出力される。一方、ステップＳＰ３０においてまだバタフライ演算段の処理が完了していないと判定されると、ステップＳＰ３１において今回のｎを１増分して、ステップＳＰ２２へ戻る。この場合、判定ステップＳＰ２２においては、判定処理によりステップＳＰ２３へ処理が移行し、２＾ｎビット離れたエントリ間において実数成分および虚数成分のスワップが行なわれ、双対ノードデータが、隣接エントリに格納されるようにデータが再配置される。以降、ステップＳＰ２４以降の処理がバタフライ演算段の操作が完了するまで繰返し実行される。
【０３０５】
上述の操作により、Ｎ点ＦＦＴ処理を実行することができる。
なお、上述の構成においてスワップ命令swapを用いて係数の交換を行なって乗算を実行している。このスワップ命令swapは、コピー命令copyを用いても実現することができる。すなわち、コピー先（ディスティネーション領域）のデータを、テンポラリー領域へ退避する。この後、コピー元（ソース領域）の格納データをコピーして、ディスティネーション領域に格納する。次いで、ソース領域に対しテンポラリー領域へ退避したデータを上書きする。これにより、ソース領域およびディスティネーション領域間でのデータのスワップ操作を実現することができる。
【０３０６】
以上のように、この発明の実施の形態２に従えば、メモリセルマットのエントリにおいて、実数成分格納領域および虚数成分格納領域を別々に設けられている、これらの領域を利用して、各バタフライ演算を各エントリごとにスワップ操作を利用して並列に乗算、加算および減算を行なっており、サンプリング点数が増大しても、並列に基本バタフライ演算を実行することができ、高速のＦＦＴ処理が実現される。また、実数成分および虚数成分を別々のエントリに格納して処理を開始することにより、中間値処理時の操作が簡略化される。
【産業上の利用可能性】
【０３０７】
この発明は、一般に、ＦＦＴを行なう半導体回路装置に適用することが可能である。この場合、上述のような時間間引き型ＦＦＴに限定されず、この時間間引き型ＦＦＴと信号の流れが逆になるビット非逆転型ＦＦＴにおいても適用することができる。また、上述の説明においては、２点ＦＦＴを基本演算段に用いて、基数２のＦＦＴ処理を行なっているものの、４点ＤＦＴを基本演算とする基数４のＦＦＴに対しても、同様、信号フロー図に従って係数パターンおよび制御データパターンを変更にすることにより、容易に実現される。基数４のＦＦＴにおいては、基数２のＦＦＴ処理において連続する２つのバタフライ演算段を１つの演算段として処理することにより実現される。すなわち、基数４のＦＦＴにおいては、基数２のＦＦＴの４個の基本バタフライ演算を１つの基本バタフライ演算として構成する。
【０３０８】
また、ＦＦＴ操作として、スプリットラディックス（Ｓｐｌｉｔ・Ｒａｄｉｘ）型ＦＦＴに対しても、同様に適用することができる。このスプリットラディックス型ＦＦＴにおいては、偶数項出力データに対しては基数２のＦＦＴに従った分解を行い、奇数項の出力データに対しては基数４の分解を行う。バタフライ演算はＬ字型となり、基数２の演算および基数４の演算は別途行うことが要求されるものの信号フロー図に従って係数データを設定し、各信号経路の水平方向の信号経路をエントリに対応させることにより、上述の実施の形態１または２の手法に従って変換処理を実現することができる。
【０３０９】
また、ＦＦＴと逆の操作である逆ＦＦＴ（ＩＦＦＴ）操作に対しても、同様の手順で、操作を行なうことができる（重み係数が逆数となる）。
【０３１０】
また、積和演算または積差演算を実行することにより信号変換処理を実行する、すなわち、係数行列を入力信号列に適用して出力信号列を得る直交変換処理を行う用途においても、この発明に従う半導体信号処理装置を用いて、高速に演算処理を実行することができる。
【図面の簡単な説明】
【０３１１】
【図１】８点ＦＦＴ処理の信号の流れを示す図である。
【図２】この発明に従う半導体信号処理装置を利用するシステムの構成を概略的に示す図である。
【図３】図２に示す主演算回路の構成を概略的に示す図である。
【図４】図３に示すメモリセルの構成の一例を示す図である。
【図５】図３に示す演算回路における演算操作の一例を示す図である。
【図６】図５に示す格納データを用いた加算処理のイベントの流れを示す図である。
【図７】図２に示す主演算回路の構成を具体的に示す図である。
【図８】図７に示す主演算回路のメモリマットの周辺回路の構成を概略的に示す図である。
【図９】図７に示すＡＬＵ間相互接続用スイッチ回路の接続の態様を概略的に示す図である。
【図１０】図７に示すＡＬＵ間相互接続用スイッチ回路のスワップ操作時の接続を模式的に示す図である。
【図１１】図７に示すＡＬＵ間相互接続用スイッチ回路の構成の一例を概略的に示す図である。
【図１２】図１１に示すスイッチの構成の一例を示す図である。
【図１３】図１１に示す受信レジスタに結合されるスイッチの構成を概略的に示す図である。
【図１４】図１１に示すＡＬＵ間相互接続用スイッチ回路の接続の一例を示す図である。
【図１５】図１１に示すＡＬＵ間相互接続用スイッチ回路のｋビットシフトダウン時の接続経路を概略的に示す図である。
【図１６】図１１に示すＡＬＵ間相互接続用スイッチ回路のスワップ動作時の接続回路を概略的に示す図である。
【図１７】図８に示す単位ＡＬＵ回路ブロックに対する２項加算操作時のイベントの流れを示す図である。
【図１８】この発明に従う主演算回路の構成を概略的に示す図である。
【図１９】図１８に示す主演算回路におけるレジスタ命令を一覧にして示す図である。
【図２０】図１８に示す主演算回路におけるＡＬＵレジスタセット／クリア命令を一覧にして示す図である。
【図２１】図１８における主演算回路におけるＡＬＵロード／ストア命令を一覧にして示す図である。
【図２２】図１８に示す主演算回路におけるエントリ間データ移動実行時のＡＬＵ名例を示す図である。
【図２３】図１８に示す主演算回路における算術演算を行なうＡＬＵ命令を示す図である。
【図２４】図１８に示す主演算回路における論理演算実行用のＡＬＵ命令を一覧にして示す図である。
【図２５】２項加算演算のプログラムの一例を示す図である。
【図２６】図２５に示す加算プログラムの実行時の１つのエントリにおけるデータの流れを示す図である。
【図２７】この発明における２項減算操作時のプログラムの一例を示す図である。
【図２８】この発明に従う主演算回路における２項乗算操作時のプログラムの一例を示す図である。
【図２９】図２８に示す乗算プログラム実行時のデータの流れを模式的に示す図である。
【図３０】８点ＦＦＴにおける信号フローをその重み係数とともに示す図である。
【図３１】この発明の実施の形態１におけるメモリセルマットのデータの格納配列を示す図である。
【図３２】この発明の実施の形態１におけるＦＦＴ処理時の中間値の格納データを示す図である。
【図３３】図３２に示すデータ格納状況からコピー操作完了時のデータの格納状況を示す図である。
【図３４】図３３に示す中間データに対する読出操作完了時のデータの配列を示す図である。
【図３５】図３４に示すエントリの格納データに対する加算操作時のデータの流れを示す図である。
【図３６】図３５に示す加算操作完了時の格納データを示す図である。
【図３７】８点ＦＦＴにおける１回目の計算完了時の生成データを示す図である。
【図３８】１回目の計算完了時におけるメモリセルマットの格納データを示す図である。
【図３９】２回目の計算における双対ノードの演算処理結果データの格納位置を示す図である。
【図４０】図３９に示す状態の次の操作および格納データを示す図である。
【図４１】図４０に示す実行される減算操作完了時の格納データを示す図である。
【図４２】図４１に示す格納データに対する演算操作およびデータの流れを模式的に示す図である。
【図４３】図４２に示す演算完了時の格納データを示す図である。
【図４４】図４３に示すデータ配列の８点ＦＦＴ信号フロー図における生成データとの対応を示す図である。
【図４５】Ｎ点ＦＦＴ実行操作を示すフロー図である。
【図４６】この発明の実施の形態２に従うメモリセルマットの格納データを示す図である。
【図４７】この発明の実施の形態２における１回目の操作完了後の格納データを示す図である。
【図４８】この発明の実施の形態２におけるＦＦＴ処理時のための操作およびデータの流れを格納データとともに示す図である。
【図４９】図４８に示す格納データに対する    操作およびデータの流れを示す図である。
【図５０】図４９に示す格納データに対する演算操作およびデータの流れを演算完了後のデータ配列とともに示す図である。
【図５１】図５０に示す操作完了後のデータに対して実行される操作および生成されたデータの配列を示す図である。
【図５２】図５１に示す操作に対してさらに行なわれる演算操作および生成データの格納位置を示す図である。
【図５３】この発明の実施の形態２におけるＦＦＴ処理における２回目の計算開始時におけるスワップ操作を示す図である。
【図５４】図５３に示すスワップ操作完了時のメモリセルマットの格納データを概略的に示す図である。
【図５５】図５４に示すデータ配列と８点ＦＦＴにおける２回目の計算時のエントリ格納データとの対応を３回目の計算時のエントリ格納データとの対応とともに示す図である。
【図５６】図５５に示す３回目の計算開始時におけるスワップ操作を示す図である。
【図５７】図５６に示すスワップ操作完了時のデータとメモリセルマット内の配列を示す図である。
【図５８】３回目の計算完了後の生成データを示す図である。
【図５９】この発明の実施の形態２に従うＦＦＴのＮ点ＦＦＴ処理時の操作を示すフロー図である。
【符号の説明】
【０３１２】
２０  主演算回路、３０  メモリマット、３２  ＡＬＵ群、３４  ＡＬＵ（単位ＡＬＵ回路ブロック）、ＥＲＹ  エントリ、４０  センスアンプ群、４２  ライトドライバ群、４４  ＡＬＵ間相互接続用スイッチ回路、６５  ＡＬＵ間接続回路、５０  演算データ格納領域、５０ｒ  実数成分データ格納領域、５０ｉ  虚数成分格納領域、５２  テンポラリー領域、５２ｒ  実数成分格納領域、５２ｉ  虚数成分格納領域、５４  係数データ格納領域、５４ｔｒ、５４ｓｒ、５４ｆｒ  実数係数成分格納領域、５４ｔｉ、５４ｓｉ、５４ｆｉ  重み係数虚数成分格納領域、５４ｔ、５４Ｓ、５４ｆ  係数データ格納領域、５６  制御データ格納領域、５２ａ，５２ｂ  第１，第２テンポラリー領域。
【図１】
2007004542.tif 000008
【図２】
2007004542.tif 000009
【図３】
2007004542.tif 000010
【図４】
2007004542.tif 000011
【図５】
2007004542.tif 000012
【図６】
2007004542.tif 000013
【図７】
2007004542.tif 000014
【図８】
2007004542.tif 000015
【図９】
2007004542.tif 000016
【図１０】
2007004542.tif 000017
【図１１】
2007004542.tif 000018
【図１２】
2007004542.tif 000019
【図１３】
2007004542.tif 000020
【図１４】
2007004542.tif 000021
【図１５】
2007004542.tif 000022
【図１６】
2007004542.tif 000023
【図１７】
2007004542.tif 000024
【図１８】
2007004542.tif 000025
【図１９】
2007004542.tif 000026
【図２０】
2007004542.tif 000027
【図２１】
2007004542.tif 000028
【図２２】
2007004542.tif 000029
【図２３】
2007004542.tif 000030
【図２４】
2007004542.tif 000031
【図２５】
2007004542.tif 000032
【図２６】
2007004542.tif 000033
【図２７】
2007004542.tif 000034
【図２８】
2007004542.tif 000035
【図２９】
2007004542.tif 000036
【図３０】
2007004542.tif 000037
【図３１】
2007004542.tif 000038
【図３２】
2007004542.tif 000039
【図３３】
2007004542.tif 000040
【図３４】
2007004542.tif 000041
【図３５】
2007004542.tif 000042
【図３６】
2007004542.tif 000043
【図３７】
2007004542.tif 000044
【図３８】
2007004542.tif 000045
【図３９】
2007004542.tif 000046
【図４０】
2007004542.tif 000047
【図４１】
2007004542.tif 000048
【図４２】
2007004542.tif 000049
【図４３】
2007004542.tif 000050
【図４４】
2007004542.tif 000051
【図４５】
2007004542.tif 000052
【図４６】
2007004542.tif 000053
【図４７】
2007004542.tif 000054
【図４８】
2007004542.tif 000055
【図４９】
2007004542.tif 000056
【図５０】
2007004542.tif 000057
【図５１】
2007004542.tif 000058
【図５２】
2007004542.tif 000059
【図５３】
2007004542.tif 000060
【図５４】
2007004542.tif 000061
【図５５】
2007004542.tif 000062
【図５６】
2007004542.tif 000063
【図５７】
2007004542.tif 000064
【図５８】
2007004542.tif 000065
【図５９】
2007004542.tif 000066