(57)【特許請求の範囲】
【請求項１】
外部から受け取った、複素数の実数成分を表す実数成分データおよび前記複素数の虚数成分を表す虚数成分データを含む複数のデータに基づいて、ＣＯＲＤＩＣ（ＣＯｏｒｄｉｎａｔｅ  Ｒｏｔａｔｉｏｎ  ＤＩｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ）アルゴリズムにより実行可能な演算を実行可能に接続され、１ステージ以上のシフト加減算処理を行うバタフライ演算の前記シフト加減算処理を実行する複数のシフト加減算手段と、
前記バタフライ演算の基数を表す情報に基づいて、前記シフト加減算処理において加減算するデータの組み合わせを制御する情報を、前記シフト加減算手段に対して供給し、
前記シフト加減算処理に係数乗算処理が含まれる場合には、前記基数を表す情報に基づいて、前記係数乗算処理を実行するシフト加減算手段に対して、係数を乗算するデータに対するビットシフト量を表す情報をさらに供給し、前記係数乗算処理における前記係数が虚数である場合には、該係数乗算処理を実行する前記シフト加減算手段に対して、虚数である前記係数を乗算する実数成分データと虚数成分データとの入れ替えを制御する情報をさらに供給するシフト加減算制御手段と、
を有する演算手段と、
前記ＣＯＲＤＩＣアルゴリズムにより実行可能な演算またはバタフライ演算を実行することを前記演算手段に指示し、前記バタフライ演算を実行することを前記演算手段に指示する場合には、前記バタフライ演算の基数を表す情報を前記演算手段に供給する制御手段と、
を備えるプロセッサ。
【請求項２】
前記シフト加減算制御手段は、前記バタフライ演算の基数の２倍が前記シフト加減算手段に入力可能なデータ数よりも多い場合には、前記実数成分データに対する前記シフト加減算処理と、前記虚数成分データに対する前記シフト加減算処理とを、互いに異なるサイクルにおいて制御する
請求項１に記載のプロセッサ。
【請求項３】
外部から受け取った、複素数の実数成分を表す実数成分データおよび前記複素数の虚数成分を表す虚数成分データを含む複数のデータに基づいて、ＣＯＲＤＩＣアルゴリズムにより実行可能な演算を実行可能に接続され、１ステージ以上のシフト加減算処理を行うバタフライ演算の前記シフト加減算処理を実行する複数のシフト加減算手段を備えるプロセッサによって、
前記バタフライ演算の基数を表す情報に基づいて、前記シフト加減算処理において加減算するデータの組み合わせを制御する情報を、前記シフト加減算手段に対して供給し、
前記シフト加減算処理に係数乗算処理が含まれる場合には、前記基数を表す情報に基づいて、前記係数乗算処理を実行するシフト加減算手段に対して、係数を乗算するデータに対するビットシフト量を表す情報をさらに供給し、前記係数乗算処理における前記係数が虚数である場合には、該係数乗算処理を実行する前記シフト加減算手段に対して、虚数である前記係数を乗算する実数成分データと虚数成分データとの入れ替えを制御する情報をさらに供給する、
演算方法。
【請求項４】
前記バタフライ演算の基数の２倍が前記シフト加減算手段に入力可能なデータ数よりも多い場合には、前記実数成分データに対する前記シフト加減算処理と、前記虚数成分データに対する前記シフト加減算処理とを、互いに異なるサイクルにおいて制御する
請求項３に記載の演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＣＯＲＤＩＣ（ＣＯｏｒｄｉｎａｔｅ  Ｒｏｔａｔｉｏｎ  ＤＩｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ）演算を実行可能な演算回路を有するプロセッサおよびこれを用いた演算方法に関する。
【背景技術】
【０００２】
初等関数（三角関数など）を演算するハードウェアに適用するアルゴリズムとして、ＣＯＲＤＩＣアルゴリズムが知られている。ＣＯＲＤＩＣアルゴリズムは、反復求解法である。当該ＣＯＲＤＩＣアルゴリズムでは、関数は２次元平面におけるベクトル回転として捉え、予め決められた基本回転角分のベクトル回転を繰り返し計算することによって、その関数の真値が得られる。ＣＯＲＤＩＣアルゴリズムでは、回転座標系として線形、円、双曲線のいずれかを選択し、シフト加減算とテーブル参照という単純な演算を繰り返し行うことによって、乗除算、三角関数演算、指数・対数演算、双曲関数演算等が実行される。ＣＯＲＤＩＣアルゴリズムは、ディジタル信号処理の分野で広範に用いられている。
ここで、シフト加減算とは、シフト演算および加減算によって構成される演算のことをいう。
以下、ＣＯＲＤＩＣアルゴリズムについて、詳細に説明する。
ＣＯＲＤＩＣアルゴリズムにおいて、ｊ番目に回転処理される演算式は、次に示すような数式（１）で表される。
0005516731.tif 000002
ここで、ｎは反復回数、αｊはマイクロ回転量である。また、σｊ∈｛１，−１｝は、回転方向パラメータである。
例えば、円座標において、ベクトル［ｘ（０），ｙ（０）］’を回転角θだけ回転したベクトル［ｘ（ｎ），ｙ（ｎ）］’は、数式（１）に基づき、数式（２）および数式（３）で表される。
0005516731.tif 000003
ここで、Ｋｎはスケーリング係数である。ＣＯＲＤＩＣアルゴリズムに基づいた回転は、スケーリングを伴う擬似回転である。スケーリングを補正するために、数式（４）に示す処理（演算）を行う必要がある。
0005516731.tif 000004
また、ＣＯＲＤＩＣアルゴリズムでは、数式（５）に示すように、回転角θは、基本回転による回転量αｊの加算として表すことができる。
0005516731.tif 000005
また、ＣＯＲＤＩＣアルゴリズムには、数式（６）に示す回転方向パラメータσｊの決定方法として、Ｒｏｔａｔｉｏｎモード（ローテンション（回転）モード）およびＶｅｃｔｏｒモード（ベクターモード）の２つのモードがある。
0005516731.tif 000006
Ｒｏｔａｔｉｏｎモードでは、目的角度θを初期角度ｚ（０）として考え、初期ベクトル［ｘ（０），ｙ（０）］’をθ分回転する処理が行われる。Ｖｅｃｔｏｒモードでは、初期角度ｚ（０）を０として考え、ベクトルをｘ軸まで回転した回転角度（ｚ（ｎ））と、初期ベクトルのノルム（ｘ（ｎ））とを求める処理が行われる。
ＣＯＲＤＩＣアルゴリズムにおいては、回転処理は、基本回転をｎ回行う処理である。このために、当該回転処理では、最終の基本回転角αｎ−１未満の回転角度誤差が生じる虞がある。その誤差が生じた場合には、ｎビット精度で数式（７）が成り立つため、ＣＯＲＤＩＣアルゴリズムでは、所要ビット精度と同じ段数（ステージ数）の反復処理を行う必要がある。
0005516731.tif 000007
このように、ＣＯＲＤＩＣアルゴリズムの特徴は、乗除算、三角関数演算、指数・対数演算、双曲関数演算等を単一のアルゴリズムで実現できることである。この特徴を利用してディジタル信号を処理するプロセッサに関わる技術として、ＣＯＲＤＩＣ演算回路を基本演算回路に採用した第１の関連技術が知られている（非特許文献１および非特許文献２参照）。
図７は、第１の関連技術を利用したプロセッサの構成を簡略的に示している。プロセッサ１０００は、制御回路１００１と、Ｍ個のＣＯＲＤＩＣ−Ｐｒｏｃｃｅｓｉｎｇ  Ｅｌｅｍｅｎｔ（以下、ＣＯＲＤＩＣ−ＰＥと記す）１００２１〜１００２Ｍと、メモリ１００３とを有する。なお、Ｍは正の整数である。
メモリ１００３は、制御回路１００１から受け取ったアドレスに基づき、ＣＯＲＤＩＣ−ＰＥ１００２１〜１００２Ｍに提供するデータ（入力データ）を読み出す処理、および、ＣＯＲＤＩＣ−ＰＥ１００２１〜１００２Ｍから出力されたデータ（演算結果）を書き込む処理を行う。
ＣＯＲＤＩＣ−ＰＥ１００２１〜１００２Ｍは、制御回路１００１から受け取った演算モード制御信号に従って演算モードを切り替える。また、ＣＯＲＤＩＣ−ＰＥ１００２１〜１００２Ｍは、メモリ１００３から受け取った入力データを利用して演算を行い、その演算結果をメモリ１００３に返す。ここで、演算モードとは、ＣＯＲＤＩＣアルゴリズムに基づいて行われる演算処理（乗除算、三角関数演算、指数・対数演算、双曲関数演算等）を指す。ＣＯＲＤＩＣ−ＰＥ１００２１〜１００２Ｍは、複数種の演算モードを実行できる。
ところで、ディジタル信号を処理する際に頻繁に利用される処理として、ＤＦＴ（Ｄｉｓｃｒｅｔｅ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ）が挙げられる。Ｎ個の離散周期データを処理するＮポイントＤＦＴは、数式（８）で表される。
0005516731.tif 000008
ここで、Ｎ＝Ｎ１＊Ｎ２（“＊”は乗算を表す）とすると、数式（８）は数式（９）に書き換えることができる。
0005516731.tif 000009
数式（９）によれば、ＮポイントＤＦＴは、Ｎ２個のＮ１ポイントＤＦＴによる演算結果に、回
0005516731.tif 000010
各ステージでは、（Ｎ／Ｒｉ）個（なお、ここでの“／”は除算を表す）のＲｉポイントＤＦＴ、および、回転子を乗算する演算（回転子乗算）が行われる。なお、ここで、ステージとは、演算処理を複数の段階に分割したときの１つの段階を指す。各ステージで行うＲポイントＤＦＴを基数Ｒのバタフライ演算と呼称する。バタフライ演算の実現手法として、ｓｍａｌｌ−Ｎアルゴリズムが知られている（例えば、非特許文献３参照）。
以下に、図８〜図１０を用いて、ｓｍａｌｌ−Ｎアルゴリズムを用いた基数２，３，５のバタフライ演算を説明する。
数式（８）および数式（９）に示されるように、ポイント数が２のべき乗のＤＦＴは、図８に示す基数２のバタフライ演算と、回転子乗算とを行う演算である。回転子乗算は、ＣＯＲＤＩＣの円座標系Ｒｏｔａｔｉｏｎモードで処理できる。基数２のバタフライ演算は、数式（１０）に示すように、π／４回転と、±√２のスケーリング処理に分解できる。
0005516731.tif 000011
√２のスケーリング処理を無視すると、π／４回転は、ＣＯＲＤＩＣの円座標系Ｒｏｔａｔｉｏｎモードで処理できる。符号反転の影響は、回転子乗算で余分にπ回転することにより、抑えることができる。√２スケーリングの影響は、全ステージを処理した後に、まとめてスケーリング補正処理を行えばよい。このスケーリング補正処理はＣＯＲＤＩＣの乗算モード（線形座標系Ｒｏｔａｔｉｏｎモード）により行うことができる。従って、ポイント数が２のべき乗のＤＦＴは、全てＣＯＲＤＩＣで処理できる。そのＤＦＴの詳細な説明は、非特許文献１に示されている。
図９および図１０に示すように、基数３および基数５のバタフライ演算は、それぞれ、基数２のバタフライ演算と同様な加減算処理と、係数乗算処理とで処理できる。同様に、任意の基数のバタフライ演算は、加減算処理と係数乗算処理で処理できる。係数乗算処理は、ＣＯＲＤＩＣの乗算モードで処理できる。このため、任意の基数のバタフライ演算は、ＣＯＲＤＩＣのみで処理できる。
このようなバタフライ演算を、上述の第１の関連技術を利用したプロセッサ（ＣＯＲＤＩＣ−ＰＥを基本演算回路に採用しているプロセッサ）によって行う場合には、２個の入力信号に対する加減算処理を１回行う度に、数式（１）に示した演算精度ｎ回分のシフト加減算処理を伴うＣＯＲＤＩＣ処理を行う。このために、上記プロセッサにおいては、効率が悪いという問題がある。また、スケーリング補正処理が必要であるために、上記プロセッサの演算量が増大するという問題がある。
この問題を解決する基本演算回路として、ＣＯＲＤＩＣ−ＰＥに加え、バタフライ演算回路を具備した回路に関わる第２の関連技術が知られている（例えば、非特許文献４および非特許文献５参照）。
図１１は、第２の関連技術を利用したプロセッサの構成を簡略的に示している。プロセッサ２０００は、第１の関連技術を採用したプロセッサ１０００と同様の構成に加え、バタフライ演算回路２００２を有している。バタフライ演算回路２００２は、制御回路１００１からの基数切替制御信号に基づいて、指定された基数のバタフライ演算を実行する。なお、図１１において、図７に示す構成部分と同様の構成部分には同一符号を付している。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｈｅｙｎｅ，Ｂ．，Ｂｕｅｃｋｅｒ，Ｍ．，ａｎｄ  Ｇｏｅｔｚｅ，Ｊ．：Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｏｆ  ａ  ＣＯＲＤＩＣ  Ｂａｓｅｄ  ＦＦＴ  ｏｎ  ａ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｈａｒｄｗａｒｅ  Ａｃｃｅｌｅｒａｔｏｒ，ｉｎ：３ｒｄ  Ｋａｒｌｓｒｕｈｅ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｓｏｆｔｗａｒｅ  Ｒａｄｉｏｓ，２００４．
【非特許文献２】Ｍ．Ｓｉｍａ  ａｎｄ  Ｍ．ＭｃＧｕｉｒｅ，“Ｅｍｂｅｄｄｅｄ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ｓｏｌｕｔｉｏｎ  ｆｏｒ  ＯＦＤＭ  Ｄｅｔｅｃｔｉｏｎ  ｏｖｅｒ  Ｆａｓｔ  Ｆａｄｉｎｇ  Ｒａｄｉｏ  Ｃｈａｎｎｅｌｓ，”ｉｎ  Ｐｒｏｃ．ｔｈｅ  ＩＥＥＥ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｓｙｓｔｅｍｓ（ＳｉＰＳ  ２００７）．Ｓｈａｎｇｈａｉ，Ｃｈｉｎａ，Ｏｃｔ．２００７，ｐｐ．１３−１８．
【非特許文献３】Ｓ．Ｗｉｎｏｇｒａｄ，“Ｏｎ  Ｃｏｍｐｕｔｉｎｇ  ｔｈｅ  Ｄｉｓｃｒｅｔｅ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ”，Ｐｒｏｃ．Ｎａｔｉｏｎａｌ  Ａｃａｄｅｍｙ  ｏｆ  Ｓｃｉｅｎｃｅｓ，ＵＳＡ，７３，１９７６，Ａｐｒｉｌ，ｐｐ．１００６−１００６．
【非特許文献４】Ｓａｒｍｉｅｎｔｏ，Ｒ．；ｄｅ  Ａｒｍａｓ，Ｖ．；Ｌｏｐｅｚ，Ｊ．Ｆ．；Ｍｏｎｔｉｅｌ−Ｎｅｌｓｏｎ，Ｊ．Ａ．；Ｎｕｎｅｚ，Ａ．；“Ａ  ＣＯＲＤＩＣ  ｐｒｏｃｅｓｓｏｒ  ｆｏｒ  ＦＦＴ  ｃｏｍｐｕｔａｔｉｏｎ  ａｎｄ  ｉｔｓ  ｉｍｐｌｅｍｅｎｔａｔｉｏｎ  ｕｓｉｎｇ  ｇａｌｌｉｕｍ  ａｒｓｅｎｉｄｅ  ｔｅｃｈｎｏｌｏｇｙ“，Ｖｅｒｙ  Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ（ＶＬＳＩ）Ｓｙｓｔｅｍｓ，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｖｏｌｕｍｅ：６，Ｉｓｓｕｅ：１，１９９８，Ｐａｇｅ（ｓ）：１８−３０
【非特許文献５】Ｄｅｓｐａｉｎ，Ａ．Ｍ．，″Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｆｏｒｍ  Ｃｏｍｐｕｔｅｒｓ  Ｕｓｉｎｇ  ＣＯＲＤＩＣ  Ｉｔｅｒａｔｉｏｎｓ″，Ｃｏｍｐｕｔｅｒｓ，ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｖｏｌｕｍｅ：Ｃ−２３，Ｉｓｓｕｅ１０，１９７４，Ｐａｇｅ（ｓ）：９９３−１００１
【発明の概要】
【発明が解決しようとする課題】
【０００４】
前記第１の関連技術を利用したプロセッサは、ＣＯＲＤＩＣ演算回路を有する。このため、当該プロセッサは、バタフライ演算を実行する際に、前述したようなＣＯＲＤＩＣ演算を行う必要がある。そのＣＯＲＤＩＣ演算では、加減算処理を１回実行する際に、演算精度ｎ回分のシフト加減算処理を伴う。このために、当該プロセッサは、効率が悪いという課題を有する。さらに、第１の関連技術を利用したプロセッサは、スケーリング補正処理を必要とする場合がある。この場合には、プロセッサの演算量が増大するため、当該プロセッサは、さらに効率が悪くなるという課題を有する。
前記第２の関連技術を利用したプロセッサは、ＣＯＲＤＩＣ演算回路に加えてバタフライ演算回路を有する。このため、当該プロセッサは、ＤＦＴ演算以外の処理時には、バタフライ演算回路をアイドル状態にしてしまうという課題を有する。
本発明は、上記したような課題を解決するために成された。すなわち、本発明の主な目的は、ＤＦＴ演算以外の処理時にも基本演算回路の一部をアイドル状態にすることなく、ＤＦＴ演算を効率的に実行できるプロセッサなどを提供することである。
【課題を解決するための手段】
【０００５】
本発明のプロセッサは、
ＣＯＲＤＩＣ（ＣＯｏｒｄｉｎａｔｅ  Ｒｏｔａｔｉｏｎ  ＤＩｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ）演算を実行可能に接続された複数のシフト加減算手段を有し、１ステージ以上のシフト加減算処理を行うバタフライ演算の前記シフト加減算処理を、前記シフト加減算手段が実行する演算手段と、
外部から受け取った複数のデータに基づいてＣＯＲＤＩＣ演算またはバタフライ演算を実行することを前記演算手段に指示する制御手段と、
を備える。
本発明の演算方法においては、
ＣＯＲＤＩＣ演算を実行可能に接続された複数のシフト加減算手段を有する演算手段を備えたプロセッサが、
外部から受け取った複数のデータに基づいて、１ステージ以上のシフト加減算処理を行うバタフライ演算の前記シフト加減算処理を、前記シフト加減算手段が実行する。
【発明の効果】
【０００６】
本発明は、ＤＦＴ演算以外の処理時にも基本演算回路の一部をアイドル状態にすることなく、ＤＦＴ演算を効率的に実行できるプロセッサを提供できる。
【図面の簡単な説明】
【０００７】
図１は、本発明に係るプロセッサの一実施形態を簡略的に示すブロック図である。
図２は、本発明に係る実施形態において、プロセッサが有するＣＯＲＤＩＣ兼バタフライ演算回路の一例を示すブロック図である。
図３は、本発明に係る実施形態において、ＣＯＲＤＩＣ兼バタフライ演算回路が有するシフト加減算処理回路の一例を示す図である。
図４は、本発明に係る実施形態において、プロセッサが実行する基数２のバタフライ演算を説明する模式図である。
図５は、本発明に係る実施形態において、プロセッサが実行する基数３のバタフライ演算を説明する模式図である。
図６は、本発明に係るプロセッサのその他の実施形態を簡略的に示すブロック図である。
図７は、第１の関連技術を利用したプロセッサの構成を簡略的に示すブロック図である。
図８は、基数２のバタフライ演算を説明する模式図である。
図９は、基数３のバタフライ演算を説明する模式図である。
図１０は、基数５のバタフライ演算を説明する模式図である。
図１１は、第２の関連技術を利用したプロセッサの構成を簡略的に示すブロック図である。
【発明を実施するための形態】
【０００８】
以下に、本発明に係る実施形態を、図面を参照して説明する。
図１は、本発明に係るプロセッサの一実施形態を簡略的に示すブロック図である。プロセッサ１０は、制御回路１００と、ＣＯＲＤＩＣ兼バタフライ演算回路（以下、演算回路と略して記す）２００と、メモリ３００とを有している。ここで、制御回路１００およびメモリ３００は、本発明における制御手段（制御部）に対応している。また、演算回路２００は、本発明における演算手段（演算部）に対応している。
制御回路１００は、メモリ３００に向けて、演算する入力データのアドレス情報および演算結果を書き込むアドレス情報を出力する。
また、制御回路１００は、演算回路２００に向けて、演算モード制御信号を出力する。演算モード制御信号は、ＣＯＲＤＩＣ演算モード（ＣＯＲＤＩＣ演算を実行するモード）を示す情報と、バタフライ演算モード（バタフライ演算を実行するモード）を示す情報とのいずれかを含む信号である。ここで、演算モード制御信号が、バタフライ演算モードを示す情報を含んでいる場合には、当該演算モード制御信号は、バタフライ演算の基数を示す情報をも含んでいる。
メモリ３００は、外部から受け取ったデータを記憶する。例えば、メモリ３００は、ＣＯＲＤＩＣ演算を行うベクトルデータ［ｘ（０），ｙ（０）］’および回転角ｚ（０）を示すデータを記憶する。例えば、メモリ３００は、バタフライ演算を行うＮ（Ｎ：整数）個の離散周期データを記憶する。その離散周期データは、複素数の形態である。メモリ３００は、離散周期データとして、離散周期データの実数成分を示す実数成分データＲｅ｛ｘ（０）｝，Ｒｅ｛ｘ（１）｝，・・・Ｒｅ｛ｘ（Ｎ）｝、および、その離散周期データの虚数成分を示す虚数成分データＩｍ｛ｘ（０）｝，Ｉｍ｛ｘ（１）｝，・・・Ｉｍ｛ｘ（Ｎ）｝を記憶する。
メモリ３００は、制御回路１００から受け取ったアドレス情報に基づき、演算回路２００に出力する３＊Ｍ（Ｍ：並列数）個の入力データを読み出す。また、メモリ３００は、制御回路１００から受け取ったアドレス情報に基づき、演算回路２００が出力した３＊Ｍ個の演算結果を書き込む。
なお、Ｍは、演算回路２００が並列に実行可能なＣＯＲＤＩＣ演算数を表す正の整数である。すなわち、３＊Ｍは、演算回路２００が有するシフト加減算回路（シフト加減算部（シフト加減算手段）；以下、シフト回路とも略して記す）２２０（図２参照）に入力可能なデータ数に相当する。
なお、以下に説明する実施形態においては、並列数Ｍを２とする例について主に説明するが、本発明において演算部（演算回路２００）が並列に実行可能なＣＯＲＤＩＣ演算数は２に限定されない。
演算回路２００は、制御回路１００から受け取った演算モード制御信号に基づき、ＣＯＲＤＩＣ演算モードと、バタフライ演算モードとを選択的に切り替える。そして、演算回路２００は、その切り替えた演算モードに基づいて、メモリ３００から受け取った入力データを演算する。さらに、この演算結果をメモリ３００に出力する。
また、演算回路２００は、ＣＯＲＤＩＣ演算モードでは、座標系を選択するとともに、Ｒｏｔａｔｉｏｎモード（ローテンション（回転）モード）とＶｅｃｔｏｒｉｎｇモード（ベクターモード）を選択的に切り替える。そして、演算回路２００は、その切り替えたＲｏｔａｔｉｏｎモードあるいはＶｅｃｔｏｒｉｎｇモードにより、乗除算、三角関数演算、指数・対数演算または双曲関数演算を実行する。なお、演算回路２００は、並列数Ｍを２とした場合には、ＣＯＲＤＩＣ演算を２並列に実行してもよい。
バタフライ演算モードでは、演算回路２００は、基数を切り替えることにより、バタフライ演算を実行する。なお、演算回路２００は、Ｍを２とした場合には、基数５までのバタフライ演算を実行できる。
図２は、演算回路２００の構成の一例を示す。なお、この実施形態では、ＣＯＲＤＩＣ演算精度は１６ビットと仮定されているが、本発明における演算部のＣＯＲＤＩＣ演算精度は限定されない。
図２においては、演算回路２００は、シフト加減算制御回路（シフト加減算制御部（シフト加減算制御手段）；以下、シフト制御回路とも略して記す）２１０と、１６個のシフト回路２２０１〜２２０１６（総称して、シフト回路２２０とも記す）とを有している。
シフト制御回路２１０は、制御回路１００から受け取った演算モード制御信号に基づいて、シフト加減算制御信号をシフト回路２２０１〜２２０１６に供給する。このシフト加減算制御信号は、シフト回路２２０１〜２２０１６の動作を制御する信号である。つまり、各シフト回路２２０１〜２２０１６は、演算モードの種類に応じて当該演算モード毎に定められた動作をそれぞれ行う。その演算モード制御信号は、各シフト回路２２０１〜２２０１６に、演算モードに応じた動作を実行する指令となる情報を含んでいる。
具体的には、シフト回路２２０１〜２２０１６の演算モードをＣＯＲＤＩＣ演算モードとする場合には、シフト制御回路２１０は、シフト加減算制御信号に、ビットシフト量、座標系の種類、ＲｏｔａｔｉｏｎモードとＶｅｃｔｏｒｉｎｇモードのうちの一方を示す情報などを含める。
シフト回路２２０１〜２２０１６の演算モードをバタフライ演算モードとする場合には、シフト制御回路２１０は、シフト加減算制御信号に次のような制御情報を含める。つまり、シフト加減算処理は、基数に応じた１以上のステージで実行される。そのステージに対応するシフト回路２２０が予め定められている。シフト加減算制御信号に含まれる制御情報は、シフト回路２２０に、対応するステージに応じた動作を制御する指令となる情報である。
例えば、基数が２のべき乗のバタフライ演算は、１ステージ以上の加減算処理で実行される。そこで、シフト回路２２０１〜２２０１６の演算モードを、２のべき乗の基数のバタフライ演算とする場合には、シフト制御回路２１０は、次のような制御情報を含むシフト加減算制御信号をシフト回路２２０に供給する。その制御情報は、ステージ毎に、加減算する入力データの組み合わせを基数に応じて知らせる情報である。
例えば、基数が２のべき乗でないバタフライ演算は、複数のステージで実行される。各ステージでは、加減算処理および係数乗算処理を含む処理を行う。その係数乗算処理は、シフト演算処理を繰り返す処理である。
シフト回路２２０１〜２２０１６の演算モードを、２のべき乗でない基数のバタフライ演算とする場合には、シフト制御回路２１０は、次の制御情報を含むシフト加減算制御信号を各シフト回路２２０に供給する。その制御情報は、基数に応じた係数乗算処理に利用されるビットシフト量である。
また、シフト制御回路２１０は、演算モード制御信号に基づいたバタフライ演算の基数を２倍した数が、シフト回路２２０に入力可能なデータの個数（３＊Ｍ）よりも多い場合、次のように各シフト回路２２０を制御する。すなわち、各シフト回路２２０は、シフト制御回路２１０による制御によって、前述の実数成分データに対する各ステージのシフト加減算処理と、虚数成分データに対する各ステージのシフト加減算処理とを異なるサイクルで実行する。例えば、各シフト回路２２０は、実数成分データの処理を偶数サイクルで、虚数成分データの処理を基数サイクルで実行する。
バタフライ演算を構成する係数乗算処理において係数が虚数の場合には、シフト制御回路２１０は、次に示すような制御情報を含むシフト加減算制御信号を各シフト回路２２０に供給する。その制御情報は、係数乗算処理を実行するいずれかのシフト回路２２０に対して、虚数の係数を乗算する実数成分データと、虚数成分データとを入れ替える指示を示す情報である。
実数成分データを処理するサイクルが偶数サイクルに設定され、かつ、基数成分データを処理するサイクルが奇数サイクルに設定されている場合には、シフト制御回路２１０は、次に示すような制御情報を含むシフト加減算制御信号を各シフト回路２２０に供給する。その制御情報は、係数乗算処理を実行するいずれかのシフト回路２２０に対して、偶数サイクルで入力されて虚数の係数を乗算する実数成分データと、奇数サイクルで入力されて虚数の係数を乗算する虚数成分データとを入れ替える指示を示す情報である。
次に、シフト回路２２０の構成の一例について詳細に説明する。
図２に示すように、シフト回路２２０１〜２２０１６は、直列接続されている。各シフト回路２２０は、それぞれ、３＊Ｍ個のシフト加減算入力データに基づいて、シフト加減算処理を実行し、その処理による３＊Ｍ個のシフト加減算結果データを出力する。
この実施形態では、Ｍを２とする。この場合には、シフト回路２２０１は、メモリ３００から第１〜第６のシフト加減算入力データを受け取る。そして、シフト回路２２０１は、第１〜第６のシフト加減算入力データに基づいてシフト加減算処理を行い、その処理による第１〜第６のシフト加減算結果データをシフト回路２２０２に出力する。
シフト回路２２０２〜２２０１５は、それぞれ、受け取った第１〜第６のシフト加減算結果データをシフト加減算入力データとして、上記同様に、シフト加減算処理を行う。そして、シフト回路２２０２〜２２０１５は、それぞれ、第１〜第６のシフト加減算結果データを、次の順番のシフト回路２２０３〜２２０１６に出力する。
シフト回路２２０１６は、シフト回路２２０１５から受け取った第１〜第６のシフト加減算結果データをシフト加減算入力データとして、上記同様に、シフト加減算処理を行う。そして、シフト回路２２０１６は、その処理による第１〜第６のシフト加減算結果データを、演算回路２００の演算結果として、メモリ３００に出力する。
図３は、シフト回路２２０の構成の一例を示す。図３において、シフト回路２２０は、クロスバ２２１と、６個のシフタ兼ＬＵＴ（以下、Ｓ＆Ｌとも略して記す）２２２１〜２２２６と、６個の加減算器２２３１〜２２３６と、２個の回転方向判定回路（以下、略して判定回路とも記す）２２４１，２２４２とを含んでいる。なお、ＬＵＴは、ルックアップテーブル（Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ）の略である。また、Ｓ＆Ｌ２２２１〜２２２６は、総称してＳ＆Ｌ２２２とも記す。さらに、加減算器２２３１〜２２３６は、総称して加減算器２２３とも記す。さらに、判定回路２２４１，２２４２は、総称して判定回路２２４とも記す。
クロスバ２２１は、第１〜第６のシフト加減算入力データを受け取り、第１〜第６のクロスバ出力データを出力する。このとき、クロスバ２２１は、シフト加減算制御信号に基づき、第１〜第６のシフト加減算入力データのうち、指定されたデータを入れ替えて第１〜第６のクロスバ出力データとして出力する。
また、クロスバ２２１は、互いに異なるサイクルで入力した複数の入力データのうち、任意のデータを入れ替え、入れ替え後の前記入力データを、各サイクルの各クロスバ出力データとして出力することが可能である。例えば、クロスバ２２１は、偶数サイクルと奇数サイクルで入力した計１２個の入力データのうち、シフト加減算制御信号で指定されたデータを入れ替え、入れ替え後の１２個の入力データを、各サイクルの各クロスバ出力データとして出力する。
Ｓ＆Ｌ２２２１〜２２２６は、第１〜第６のクロスバ出力データに対して、シフト加減算制御信号で指定された処理を行い、処理後のデータを、第１〜第６のＳ＆Ｌ出力データとして、対応する加減算器２２３１〜２２３６に出力する。
また、Ｓ＆Ｌ２２２は、ＣＯＲＤＩＣ演算で用いるＬＵＴ（Ｌｏｏｋ  Ｕｐ  Ｔａｂｌｅ）を有している。ＬＵＴは、ＣＯＲＤＩＣ演算で選択される座標系ごとに、シフト加減算処理の反復回数ｊ（ｊ＝０，・・・，１５）に対応するマイクロ回転量αｊを示す情報を予め格納している。
Ｓ＆Ｌ２２２の処理内容を、Ｓ＆Ｌ２２２１を例にして説明する。Ｓ＆Ｌ２２２１は、第１と第２のクロスバ出力データのうちの一方を選択し、選択したデータをビットシフトして加減算器２２３１に出力する。
もしくは、Ｓ＆Ｌ２２２１は、数式（１）に示したｚデータに対する処理を行う際は、シフト加減算制御信号で指定された座標系に対応するマイクロ回転量αｊを内部のＬＵＴから呼び出し、加減算器２２３１に出力する。
なお、Ｓ＆Ｌ２２２は、シフト加減算制御信号に含まれる制御情報に基づいて、ビットシフト量およびＬＵＴから呼び出すデータを決定する。
Ｓ＆Ｌ２２２２〜２２２６も、Ｓ＆Ｌ２２２１と同様である。
判定回路２２４１〜２２４２は、ＣＯＲＤＩＣ演算を実行する場合に、数式（６）に従って回転方向パラメータσｊを求め、当該回転方向パラメータσｊを示す情報を、加減算器２２３１〜２２３６に出力する。判定回路２２４は、シフト加減算制御信号に基づいて、ＲｏｔａｔｉｏｎモードとＶｅｃｔｏｒｉｎｇモードのうちの一方を実行モードとして決定する。
加減算器２２３１〜２２３６は、シフト加減算制御信号に基づいて、第１〜第６のクロスバ出力データと、Ｓ＆Ｌ２２２１〜２２２６から出力された出力データとに対して、加減算処理を行う。そして、加減算器２２３１〜２２３６は、その演算処理による結果を、第１〜第６のシフト加減算結果データとして、次の処理を行うシフト回路２２０に出力する。
以下に、プロセッサ１０の動作例について説明する。この実施形態では、プロセッサ１０がＣＯＲＤＩＣ演算を実行する動作、および、基数２、３、５のバタフライ演算を実行する動作について説明する。
＜ＣＯＲＤＩＣ演算に関する動作＞
まず、ＣＯＲＤＩＣ演算を行うプロセッサ１０の動作について説明する。
ここでは、まず、メモリ３００は、制御回路１００によって指定されたアドレスに基づいて、ベクトルデータ［ｘ（０），ｙ（０）］’および回転角ｚ（０）を表す３つのデータを読み出す。そして、メモリ３００は、それらデータを演算回路２００に出力する。
次に、シフト回路２２０１〜２２０１６が、数式（１）に示したシフト加減算処理による回転処理を順次実行する。
ここで、シフト回路２２０ｊ＋１（ｊ＝０，・・・，１５）が行う処理について詳細に説明する。
まず、シフト回路２２０ｊ＋１のクロスバ２２１に、メモリ３００またはシフト回路２２０ｊからのデータ｛ｘ（ｊ），ｙ（ｊ），ｚ（ｊ）｝が入力する。
次に、クロスバ２２１は、第１〜第３の入力データをそのまま第１〜第３のクロスバ出力データとして出力する。
次に、Ｓ＆Ｌ２２２１は、ｙ成分に対応する第２のクロスバ出力データに対し、ｊ＋１ビット右シフトを行い、加減算器２２３１に出力する。
また、Ｓ＆Ｌ２２２２は、ｘ成分に対応する第１のクロスバ出力データに対し、ｊ＋１ビット右シフトを行い、加減算器２２３２に出力する。
また、Ｓ＆Ｌ２２２３は、シフト加減算制御信号で指定されたＣＯＲＤＩＣ演算モードの座標系に基づいて、マイクロ回転量αｊを示す情報を、内蔵しているＬＵＴから呼び出し、加減算器２２３３に出力する。
また、判定回路２２４１は、シフト加減算制御信号で指定されたＲｏｔａｔｉｏｎモードまたはＶｅｃｔｏｒｉｎｇモードに基づいて、数式（６）に従って回転方向パラメータσｊを求める。そして、判定回路２２４１は、その回転方向パラメータσｊを示す情報を、加減算器２２３１〜２２３６に出力する。
次に、加減算器２２３１〜２２３３は、それぞれ、Ｓ＆Ｌ２２２１〜２２２３からの出力データ、クロスバ２２１からの出力データ、および、判定回路２２４１からの出力データに基づいて、数式（１）に示した加減算処理を行う。これにより、加減算器２２３１〜２２３３は、データ｛ｘ（ｊ＋１），ｙ（ｊ＋１），ｚ（ｊ＋１）｝を算出する。
そして、加減算器２２３１は、シフト加減算制御信号で指定されたＣＯＲＤＩＣ演算モードの座標系に基づいて、上記処理による加算結果と減算結果のうちから、出力する一方を決定し、その決定した結果を出力する。
このようにして、シフト回路２２０１〜２２０１６は、回転処理を順次実行する。
そして、シフト回路２２０１６は、演算結果であるデータ｛ｘ（１６），ｙ（１６），ｚ（１６）｝を演算回路２００の出力データとして出力する。
次に、メモリ３００は、制御回路１００によって指定されたアドレスに基づいて、演算回路２００の出力データを書き込む。
これにより、プロセッサ１０は、ＣＯＲＤＩＣ演算の動作を終了する。
なお、プロセッサ１０において、上述の３個の入力データ｛ｘ（０），ｙ（０），ｚ（０）｝に加え、他の３個の入力データ｛ｘ１（０），ｙ１（０），ｚ１（０）｝を演算回路２００に入力することにより、演算回路２００は、ＣＯＲＤＩＣ演算を２並列に実行可能である。
この場合には、シフト回路２２０１は、上述の第１〜第３のシフト加減算入力データに加えて、第４〜第６のシフト加減算入力データを受け取る。シフト回路２２０１〜２２０１６は、第４〜第６のシフト加減算入力データに対する回転処理を、第１〜第３の入力データに対する回転処理と同様に実行する。
＜基数２のバタフライ演算に関する動作＞
次に、基数２のバタフライ演算に関わるプロセッサ１０の動作について、図４の模式図を用いて説明する。
図４では、基数２のバタフライ演算を行う複素数データは、｛ｘ（０），ｘ（１）｝として表されている。また、演算結果は複素数｛Ｘ（０），Ｘ（１）｝として表されている。図４に示すように、基数２のバタフライ演算は、２つの複素数データに対する１ステージの加減算処理によって行う。図４は、シフト回路２２０１が、その１ステージの加減算処理を実行することを示している。
基数２のバタフライ演算を行う場合には、制御回路１００による制御に基づき、演算回路２００のシフト回路２２０１に、第１と第２のシフト加減算入力データとして、実数成分データ｛Ｒｅ｛ｘ（０）｝，Ｒｅ｛ｘ（１）｝｝が入力する。また、第３と第４のシフト加減算入力データとして、シフト回路２２０１に、虚数成分データ｛Ｉｍ｛ｘ（０）｝，Ｉｍ｛ｘ（１）｝｝が入力する。
次に、制御回路１００は、基数２のバタフライ演算に関わる情報を含む演算モード制御信号を、演算回路２００に供給する。
演算回路２００において、シフト制御回路２１０は、その演算モード制御信号に基づき、シフト回路２２０１にシフト加減算制御信号を供給する。そのシフト加減算制御信号は、加減算処理を行う２つの実数成分データの組み合わせと、２つの虚数成分データの組み合わせとを示す制御情報を含んでいる。また、シフト制御回路２１０は、シフト回路２２０２〜２２０１６にシフト加減算制御信号を供給する。そのシフト加減算制御信号は、シフト加減算入力データをそのままシフト加減算結果データとして出力する指示情報を含んでいる。
以下に、シフト加減算制御信号に基づくシフト回路２２０の動作について説明する。
ここでは、シフト回路２２０１のクロスバ２２１は、第１と第２のシフト加減算入力データをそのまま第１と第２のクロスバ出力データとして出力する。
次に、Ｓ＆Ｌ２２２１は、Ｒｅ｛ｘ（１）｝に対応する第２のクロスバ出力データを、シフト処理を行わずに加減算器２２３１に出力する。また、Ｓ＆Ｌ２２２２は、Ｒｅ｛ｘ（０）｝成分に対応する第１のクロスバ出力データを、シフト処理を行わずに加減算器２２３２に出力する。
次に、加減算器２２３１〜２２３２は、それぞれ、２つの実数成分データについて加算処理および減算処理を行い、その演算処理による結果を、第１と第２のシフト加減算結果データとして、出力する。
その後に、シフト回路２２０１は、虚数成分である第３と第４のシフト加減算入力データについても、実数成分である第１と第２のシフト加減算入力データと同様に、Ｓ＆Ｌ２２２３，２２２４および加減算器２２３３，２２３４を用いて加減算処理を実行する。そして、シフト回路２２０１は、その演算処理による結果を第３と第４のシフト加減算結果データとして出力する。
その後、シフト回路２２０２〜２２０１６は、シフト回路２２０１から出力される第１〜第４のシフト加減算結果データを、順次、そのまま出力する。つまり、シフト回路２２０１６は、シフト回路２２０１から出力される第１〜第４のシフト加減算結果データを、演算回路２００の出力データとして出力する。
そして、メモリ３００は、制御回路１００によって指定されたアドレスに基づいて、演算回路２００の出力データを書き込む。
これにより、プロセッサ１０は、基数２のバタフライ演算の動作を終了する。
＜基数３のバタフライ演算に関する動作＞
次に、基数３のバタフライ演算を行うプロセッサ１０の動作について、図５の模式図を用いて説明する。
ここで、図５において、基数３のバタフライ演算を行う複素数データは、｛ｘ（０），ｘ（１），ｘ（２）｝として表されている。その基数３のバタフライ演算による結果は、複素数｛Ｘ（０），Ｘ（１），Ｘ（２）｝として表されている。図５に示すように、基数３のバタフライ演算は、第１加減算ステージ〜第４加減算ステージでの加減算処理と、係数乗算ステージでの係数乗算処理によって、実行される。また、係数乗算処理は、シフト加減算の繰り返しで実現されることが知られている。
図５においては、シフト回路２２０１が、第１加減算ステージでの処理を実行する。シフト回路２２０２が、第２加減算ステージでの処理を実行する。シフト回路２２０７が、第３加減算ステージでの処理を実行する。シフト回路２２０８が、第４加減算ステージでの処理を実行する。シフト回路２２０３〜２２０６が、係数乗算ステージでの処理を実行する。
基数３のバタフライ演算を行う場合には、まず、制御回路１００による制御によって、演算回路２００のシフト回路２２０１に、第１〜第３のシフト加減算入力データとして、図５に示した｛ｘ（０），ｘ（１），ｘ（２）｝の実数成分データ｛Ｒｅ｛ｘ（０）｝，Ｒｅ｛ｘ（１）｝，Ｒｅ｛ｘ（２）｝｝が入力する。また、第４〜第６のシフト加減算入力データとして、虚数成分データ｛Ｉｍ｛ｘ（０）｝，Ｉｍ｛ｘ（１）｝，Ｉｍ｛ｘ（２）｝｝が、シフト回路２２０１に入力する。
制御回路１００は、基数３のバタフライ演算を指示する演算モード制御信号を、演算回路２００に供給する。
その後に、シフト制御回路２１０は、シフト回路２２０１，２２０２，２２０７，２２０８に、それぞれ、次のようなシフト加減算制御信号を供給する。そのシフト加減算制御信号は、それぞれ、第１〜第４加減算ステージにおいて加減算を行う入力データの組み合わせを示す情報を含んでいる。また、シフト制御回路２１０は、シフト回路２２０３〜２２０６に、次に示すようなシフト加減算制御信号を供給する。そのシフト加減算制御信号は、係数乗算ステージにおいて係数を乗算する入力データおよびビットシフト量を制御する情報を含んでいる。
なお、係数乗算ステージにおける係数が、図５に示す０．８６６０ｊ（“ｊ”は虚数単位を表す）のように虚数である場合には、シフト加減算制御信号は、係数乗算ステージを実行するシフト回路２２０３〜２２０６のいずれかに対して、虚数の係数を乗算する虚数成分データと実数成分データとを入れ替えるように指示する情報を含んでいる。
以下に、シフト加減算制御信号に基づくシフト回路２２０の動作について説明する。
（第１加減算ステージ）
まず、シフト回路２２０１は、第１加減算ステージでの処理を実行する。
つまり、シフト回路２２０１には、第１〜第３のシフト加減算入力データとして、｛Ｒｅ｛ｘ（０）｝，Ｒｅ｛ｘ（１）｝，Ｒｅ｛ｘ（２）｝｝が入力する。シフト回路２２０１において、クロスバ２２１は、第１〜第３のシフト加減算入力データを並べ替え、第１〜第３のクロスバ出力データとして、｛Ｒｅ｛ｘ（１）｝，Ｒｅ｛ｘ（２）｝，Ｒｅ｛ｘ（０）｝｝を出力する。
その後に、シフト回路２２０１において、Ｓ＆Ｌ２２２１，２２２２および加減算器２２３１，２２３２は、第１〜第２のクロスバ出力データである｛Ｒｅ｛ｘ（１）｝，Ｒｅ｛ｘ（２）｝｝に対して、基数２のバタフライ演算と同様の処理を行う。第３のクロスバ出力であるＲｅ｛ｘ（０）｝は、シフト回路２２０１によってそのまま出力される。
シフト回路２２０１には、第４〜第６の入力データとして、虚数成分データ｛Ｉｍ｛ｘ（０）｝，Ｉｍ｛ｘ（１）｝，Ｉｍ｛ｘ（２）｝｝が入力する。
シフト回路２２０１において、クロスバ２２１、Ｓ＆Ｌ２２２、加減算器２２３は、虚数成分データに対して、実数成分データと同様の処理を行う。
（第２加減算ステージ）
次に、シフト回路２２０２は、シフト回路２２０１から出力されたデータに、第２加減算ステージにおける処理を実行する。つまり、シフト回路２２０２において、クロスバ２２１とＳ＆Ｌ２２２と加減算器２２３により、上記データに、第２加減算ステージにおける加減算処理を実行する。
（係数乗算ステージ）
次に、シフト回路２２０３〜２２０６は、係数乗算ステージでの係数乗算処理を実行する。その係数乗算処理では、シフト加減算が繰り返し実行される。１６ビット精度は、４ステージ（４段）のシフト加減算を行うことによって実現される。
例えば、図５における−０．８６６０ｊの係数乗算処理においては、数式（１１）に示すシフト加減算が繰り返し実行される。
0005516731.tif 000012
−０．８６６０ｊの係数乗算処理に着目して説明を続ける。
この実施形態では、図５における係数１．０、係数−１．５、係数−０．８６６０ｊをそれぞれ乗算する各実数成分データが、第１〜第３のシフト加減算入力データとして、シフト回路２２０２からシフト回路２２０３に入力する。
さらに、図５における係数１．０、係数−１．５、係数−０．８６６０ｊをそれぞれ乗算する各虚数成分データが、第４〜第６の入力データとして、シフト回路２２０２からシフト回路２２０３に入力する。
次に、シフト回路２２０３において、クロスバ２２１は、第３のシフト加減算入力データと、第６のシフト加減算入力データとを入れ替える。第３のシフト加減算入力データは、虚数の係数である−０．８６６０ｊを乗ずる実数成分に対応するデータである。第６のシフト加減算入力データは、虚数の係数である−０．８６６０ｊを乗ずる虚数成分に対応するデータである。
その後に、シフト回路２２０３において、Ｓ＆Ｌ２２２３は、第３のクロスバ出力データを３ビット右シフト処理し、処理後のデータを加減算器２２３１に出力する。
加減算器２２３３は、Ｓ＆Ｌ２２２３から出力した上記データから、第３のクロスバ出力データを減算し、当該演算による結果をシフト回路２２０４に出力する。
この実施形態では、シフト回路２２０３において、クロスバ２２１により、前述したように、実数成分（第３のシフト加減算入力データ）と虚数成分（第６のシフト加減算入力データ）とが入れ替えられている。これにより、シフト回路２２０４〜２２０６においては、クロスバ２２１は、実数成分と虚数成分との入れ替えを行わない。
シフト回路２２０４〜２２０６で実行される−０．８６６０ｊ係数乗算処理においては、Ｓ＆Ｌ２２２３および加減算器２２３３によって、７ビットと９ビットと１２ビットの各右シフト処理、および、減算処理が行われる。
同様に、シフト回路２２０３〜２２０６は、それぞれＳ＆Ｌ２２２１，２２２２および加減算器２２３１，２２３２を用いて、係数１．０および係数−１．５についての乗算処理を実行する。
（第３〜第４の加減算ステージ）
次に、シフト回路２２０７，２２０８は、それぞれ、シフト回路２２０１，２２０２と同様に動作して、第３〜第４加減算ステージにおける加減算処理を実行する。
シフト回路２２０９〜２２０１６は、それぞれ、シフト回路２２０８から出力した第１〜第６のシフト加減算結果データをそのまま出力する。つまり、シフト回路２２０１６は、シフト回路２２０８から出力した第１〜第６のシフト加減算結果データを、そのまま演算回路２００の出力データとして出力する。
その後に、メモリ３００は、制御回路１００によって指定されるアドレスに基づいて、演算回路２００の出力データを書き込む。
これにより、プロセッサ１０は、基数３のバタフライ演算の動作を終了する。
＜基数４と基数５の各バタフライ演算に関する動作＞
次に、基数４と基数５の各バタフライ演算を行うプロセッサ１０の動作について説明する。
基数４と基数５の各バタフライ演算を行う場合には、プロセッサ１０は、複数サイクルでバタフライ演算を行う。このプロセッサ１０の動作が、上述の基数３のバタフライ演算を行う動作とは異なる。
基数４のバタフライ演算を行う場合には、入力データの数は、実数成分を示すデータと、虚数成分を示すデータとを合わせると、８個である。基数５のバタフライ演算を行う場合には、入力データの数は、実数成分を示すデータと、虚数成分を示すデータとを合わせると、１０個である。この実施形態では、演算回路２００に入力可能な入力データの数は、３＊Ｍ＝６個である。このため、演算回路２００は、基数４と基数５の各バタフライ演算を１サイクルだけでは処理できない。
このことから、シフト制御回路２１０は、基数４または基数５のバタフライ演算処理を、実数成分処理と虚数成分処理に分け、それぞれの処理を異なるサイクルで行う。例えば、演算回路２００は、偶数サイクルで実数成分処理を行う。演算回路２００は、奇数サイクルで虚数成分処理を行う。
また、係数乗算ステージで用いる係数が虚数の場合には、係数乗算ステージを処理するシフト回路２２０のいずれかのクロスバ２２１が、前述同様に、虚数の係数を乗算する実数成分データと虚数成分データとを入れ替える。その実数成分データは、偶数サイクルで入力したデータである。虚数成分データは、奇数サイクルで入力したデータである。
上記以外の点については、プロセッサ１０は、基数４と基数５の各バタフライ演算を行う複数ステージにおけるシフト加減算処理を、上述の基数３のバタフライ演算と同様に行う。このことから、その重複する詳細な説明を省略する。
なお、この実施形態では、演算回路２００に入力可能なデータの個数を６としている。これにより、プロセッサは、ＣＯＲＤＩＣ演算を並列数２で実行可能である。また、プロセッサは、基数５までの任意の基数のバタフライ演算を処理可能である。これに対して、演算回路２００に入力可能なデータの個数が増加し、かつ、シフト加減算回路（シフト回路）が時分割で複数の処理を行えば、プロセッサが実行できるＣＯＲＤＩＣ演算の並列数およびバタフライ演算の基数を増大できる。
以下に、この実施形態のプロセッサが得ることができる効果について述べる。
この実施形態のプロセッサは、ＤＦＴ演算以外の処理を行う場合にも、基本演算回路の一部をアイドル状態にすることなく、ＤＦＴ演算を効率的に処理できる。
その理由は、ＣＯＲＤＩＣ演算を実行する複数のシフト加減算回路（シフト回路）が、それぞれ、バタフライ演算でのシフト加減算処理の各ステージを分担して実行するためである。このため、この実施形態のプロセッサは、バタフライ演算での加減算処理１回につき演算精度回数分の反復処理を伴うＣＯＲＤＩＣ演算を行う必要がない。
さらなる理由は、この実施形態のプロセッサは、ＣＯＲＤＩＣ演算を行うシフト加減算回路（シフト回路）を用いてバタフライ演算を行う。このため、シフト加減算回路（シフト回路）と別個のバタフライ演算回路が必要でない。換言すれば、そのバタフライ演算回路は設けられない。したがって、バタフライ演算以外の処理を行うときにバタフライ演算回路がアイドル状態になるという事態が発生しない。
なお、この実施形態では、演算回路２００は、シフト制御回路２１０を省略しても、所定の基数のバタフライ演算について、上記効果を奏することができる。
この場合には、予め定められた基数のバタフライ演算を行うシフト加減算処理の各ステージにおいて、加減算するデータの組み合わせは予め定まる。予め定められた基数のバタフライ演算を行うシフト加減算処理に、係数乗算処理が含まれる場合であっても、係数乗算処理を実現するシフト演算におけるビットシフト量も予め定まる。したがって、演算回路２００がシフト制御回路２１０を有していない場合には、各シフト回路２２０は、バタフライ演算モードでは、予め定められた入力データを入れ替える動作およびビットシフトを行う動作を行えばよい。
また、この実施形態のプロセッサは、アプリケーションから要求される基数の種類に応じたバタフライ演算回路を予め備えることなく、任意の基数のバタフライ演算を効率的に処理できる。
これに対して、第２の関連技術を採用したプロセッサ（ＣＯＲＤＩＣ演算回路に加えてバタフライ演算回路を備えているプロセッサ）では、アプリケーションから要求される基数の種類に応じたバタフライ演算回路を用意する必要がある。このために、プロセッサの効率が悪かった。この問題を、この実施形態のプロセッサは解決している。
つまり、この実施形態では、基数が２のべき乗のバタフライ演算を行う場合には、シフト制御回路（シフト加減算制御回路）が、各シフト回路（シフト加減算回路）に対して、基数に応じて加減算を行うデータの組み合わせを制御する。この制御により、アプリケーションから要求される２のべき乗の基数の種類に応じたバタフライ演算回路を備える必要が無くなる。
また、基数が２のべき乗でないバタフライ演算を行う場合には、シフト制御回路（シフト加減算制御回路）は、上記した加減算するデータの組み合わせを制御することに加えて、基数に応じた係数乗算処理を実行するシフト回路（シフト加減算回路）に対して、基数に応じたビットシフト量を制御する。これにより、アプリケーションから要求される２のべき乗でない基数の種類に応じたバタフライ演算回路を備える必要が無くなる。
さらに、基数の２倍が演算回路に入力可能なデータ数以上である場合にバタフライ演算を行う場合には、シフト制御回路（シフト加減算制御回路）は、バタフライ演算に関わるシフト加減算処理を行うシフト回路（シフト加減算回路）に、実数成分データに対する処理と、虚数成分データに対する処理とを、異なるサイクルで実行するように制御する。
上記のようなことにより、この実施形態では、上記問題（プロセッサの効率が悪化する問題）が解決される。
この実施形態のプロセッサは、基数が２のべき乗でないバタフライ演算であって虚数の係数乗算処理を含むバタフライ演算も、効率的に実行できる。この理由は、シフト制御回路（シフト加減算制御回路）が、係数乗算処理を実行するシフト回路（シフト加減算回路）に、虚数の係数を乗算する実数成分データと虚数成分データを入れ替える制御を行うからである。
なお、この発明は上述した実施形態に限定されるものではなく、様々な実施形態を採り得る。例えば、本発明に係るプロセッサは、図６に示される構成を採用してもよい。図６に示されるプロセッサ１は、演算部（演算手段）２と、制御部（制御手段）３とを有している。演算部２は、ＣＯＲＤＩＣ（ＣＯｏｒｄｉｎａｔｅ  Ｒｏｔａｔｉｏｎ  ＤＩｇｉｔａｌ  Ｃｏｍｐｕｔｅｒ）演算を実行可能に接続された複数のシフト加減算部（シフト加減算手段）を有する。前記シフト加減算部は、１ステージ以上のシフト加減算処理を行うバタフライ演算の前記シフト加減算処理をも実行する。制御部３は、外部から受け取った複数のデータに基づいて、ＣＯＲＤＩＣ演算またはバタフライ演算を実行することを前記演算部２に指示する。このプロセッサ１においても、前記実施形態と同様に、ＤＦＴ演算以外の処理時にも基本演算回路の一部をアイドル状態にすることなく、ＤＦＴ演算を効率的に実行できる。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
なお、この出願は、２０１０年６月２３日に出願された日本出願特願２０１０−１４２２０６を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０００９】
本発明は、ＣＯＲＤＩＣ演算を行うプロセッサに有効である。
【符号の説明】
【００１０】
１，１０  プロセッサ
２  演算部
３  制御部
１００  制御回路
２００  演算回路（ＣＯＲＤＩＣ兼バタフライ演算回路）
２１０  シフト制御回路
２２０  シフト回路
２２１  クロスバ
２２２  Ｓ＆Ｌ（シフタ兼ＬＵＴ）
２２３  加減算器
２２４  回転方向判定回路
３００  メモリ
１００１  制御回路
１００２  ＣＯＲＤＩＣ−ＰＥ
１００３  メモリ
２００２  バタフライ演算回路
【図１】
0005516731.tif 000013
【図２】
0005516731.tif 000014
【図３】
0005516731.tif 000015
【図４】
0005516731.tif 000016
【図５】
0005516731.tif 000017
【図６】
0005516731.tif 000018
【図７】
0005516731.tif 000019
【図８】
0005516731.tif 000020
【図９】
0005516731.tif 000021
【図１０】
0005516731.tif 000022
【図１１】
0005516731.tif 000023