(57)【要約】【課題】積和演算におけるスケーリングによる計算精度の低下を、追加のレジスタを過度に使用することなく抑制する。【解決手段】複素積和演算ユニット１３は、（１）第１の複素数データの実部又は虚部と第３の複素数データの実部とを乗算する乗算器１３２０、（２）第１の複素数データの虚部又は実部と第３の複素数データの虚部とを乗算する乗算器１３２１、（３）第２の複素数データの実部又は虚部と第４の複素数データの実部とを乗算する乗算器１３２２、（４）第２の複素数データの虚部又は実部と第４の複素数データの虚部とを乗算する乗算器１３２３、（５）乗算器１３２０〜１３２３の出力値（各々最大３２ビット長）を相互に加算又は減算して１つの演算結果を出力する第１の加減算部（加減算器１３４０、１３４１並びに加算器１３５０）、（６）第１の加減算部の出力値をレジスタ長が６４ビットである第３のレジスタに加算する加算器１３７０を有する。【選択図】図３
2009075676.tif 000002
【特許請求の範囲】
【請求項１】
複素数の積和演算を指示する複素積和演算命令を含む命令を取得し、当該命令の実行を制御する実行制御部と、
第１乃至第３のレジスタと、
前記複素積和演算命令を取得した前記実行制御部による制御に基づいて、前記第１及び第２のレジスタに格納された複素数データを入力して複素演算を実行するとともに、得られた複素演算結果と前記第３のレジスタの格納値とを加算した値によって前記第３のレジスタを上書きする複素積和演算ユニットとを備え、
前記第１のレジスタは、レジスタ長が少なくとも２ｍ＋１ビットであって、それぞれが２ｍ−１ビット長の実部及び２ｍ−１ビット長の虚部からなる２ｍビット長の第１の複素数データ及び第２の複素数データを格納可能であり、
前記第２のレジスタは、レジスタ長が少なくとも２ｍ＋１ビットであって、それぞれが２ｍ−１ビット長の実部及び２ｍ−１ビット長の虚部からなる２ｍビット長の第３の複素数データ及び第４の複素数データを格納可能であり、
前記第３のレジスタは、レジスタ長が少なくとも２ｍ＋２ビットであり、
前記複素積和演算ユニットは、
前記第１及び第３の複素数データの積と前記第２及び第４の複素数データの積との実部どうしの和又は虚部どうしの和を算出し、得られた前記実部どうしの和又は虚部どうしの和を前記第３のレジスタの格納値に加算する、マイクロプロセッサ。
【請求項２】
前記複素積和演算ユニットは、
（１）前記第１の複素数データの実部又は虚部と前記第３の複素数データの実部とを乗算して、最大２ｍビット長の乗算結果を出力する第１の乗算部と、
（２）前記第１の複素数データの虚部又は実部と前記第３の複素数データの虚部とを乗算して、最大２ｍビット長の乗算結果を出力する第２の乗算部と、
（３）前記第２の複素数データの実部又は虚部と前記第４の複素数データの実部とを乗算して、最大２ｍビット長の乗算結果を出力する第３の乗算部と、
（４）前記第２の複素数データの虚部又は実部と前記第４の複素数データの虚部とを乗算して、最大２ｍビット長の乗算結果を出力する第４の乗算部と、
（５）少なくとも前記第１乃至第４の乗算部の４つの出力値を相互に加算又は減算して、１つの加減算結果を出力する第１の加減算部と、
（６）前記第１の加減算部の出力値と前記第３のレジスタの格納値とを加算し、得られた加算結果を前記第３のレジスタに出力する第１の累積加算部と、
を有する、請求項１に記載のマイクロプロセッサ。
【請求項３】
前記第１の加減算部は、
前記第１及び第２の乗算部の出力値を加算又は減算することで、前記第１の複素数と前記第３の複素数との乗算結果の実部又は虚部を出力する第１の加減算器と、
前記第３及び第４の乗算部の出力値を加算又は減算することで、前記第２の複素数と前記第４の複素数との乗算結果の実部又は虚部を出力する第２の加減算器と、
前記第１及び第２の加減算器の出力値を加算する第１の加算器と、
を有する、請求項２に記載のマイクロプロセッサ。
【請求項４】
前記複素積和演算命令は、前記第１乃至第３のレジスタを指定するオペランド含む、請求項１乃至３のいずれか１項に記載のマイクロプロセッサ。
【請求項５】
前記複素積和演算命令は、２つの複素数データの乗算結果の実部の累積加算を指示する実部積和演算命令、及び２つの複素数データの乗算結果の虚部の累積加算を指示する虚部積和演算命令のいずれかであって、
前記複素積和演算ユニットは、
前記第１の乗算器に対して、前記第１の複素数データの実部又は虚部を選択的に供給する第１のセレクタ回路と、
前記第２の乗算器に対して、前記第１の複素数データの実部又は虚部を選択的に供給する第２のセレクタ回路と、
前記第３の乗算器に対して、前記第２の複素数データの実部又は虚部を選択的に供給する第３のセレクタ回路と、
前記第４の乗算器に対して、前記第２の複素数データの実部又は虚部を選択的に供給する第４のセレクタ回路とを備え、
前記実行制御部は、
前記実部積和演算命令を実行する場合に、前記第１のセレクタ回路に前記第１の複素数の実部を供給させ、前記第２のセレクタ回路に前記第１の複素数の虚部を供給させ、前記第３のセレクタ回路に前記第３の複素数の実部を供給させ、前記第４のセレクタ回路に前記第３の複素数の虚部を供給させ、前記第１及び第２の加減算器に減算処理を実行させ、
前記虚部積和演算命令を実行する場合に、前記第１のセレクタ回路に前記第１の複素数の虚部を供給させ、前記第２のセレクタ回路に前記第１の複素数の実部を供給させ、前記第３のセレクタ回路に前記第３の複素数の虚部を供給させ、前記第４のセレクタ回路に前記第３の複素数の実部を供給させ、前記第１及び第２の加減算器に加算処理を実行させる、請求項３又は請求項３に従属する請求項４に記載のマイクロプロセッサ。
【請求項６】
レジスタ長が少なくとも２ｍ＋２ビットである第４のレジスタをさらに備え、
前記第１の乗算部は、前記第１の複素数データの実部と前記第３の複素数データの実部とを乗算し、
前記第２の乗算部は、前記第１の複素数データの虚部と前記第３の複素数データの虚部とを乗算し、
前記第３の乗算部は、前記第２の複素数データの実部と前記第４の複素数データの実部とを乗算し、
前記第３の乗算部は、前記第２の複素数データの虚部と前記第４の複素数データの虚部とを乗算し、
前記複素積和演算ユニットは、
（７）前記第１の複素数データの虚部と前記第３の複素数データの実部とを乗算して、最大２ｍビット長の乗算結果を出力する第５の乗算部と、
（８）前記第１の複素数データの実部と前記第３の複素数データの虚部とを乗算して、最大２ｍビット長の乗算結果を出力する第６の乗算部と、
（９）前記第２の複素数データの虚部と前記第４の複素数データの実部とを乗算して、最大２ｍビット長の乗算結果を出力する第７の乗算部と、
（１０）前記第２の複素数データの実部と前記第４の複素数データの虚部とを乗算して、最大２ｍビット長の乗算結果を出力する第８の乗算部と、
（１１）少なくとも前記第５乃至第８の乗算部の４つの出力値を相互に加算し、１つの加減算結果を出力する第２の加減算部と、
（１２）前記第２の加減算部の出力値と前記第４のレジスタの格納値とを加算し、得られた加算結果を前記第４のレジスタに出力する第２の累積加算部と、
をさらに有する、請求項１乃至４のいずれか１項に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複素数のＦＩＲ（Finite Impulse Response）フィルタ演算などで多用される複素数の積和演算を実行するための演算ユニットを有するマイクロプロセッサに関する。
【背景技術】
【０００２】
ＦＩＲフィルタの入出力を表す時間表現の一般式は（１）式で表される。
【数１】
2009075676.tif 000003
（１）式において、ｍはＦＩＲフィルタのタップ数を示し、Ｗ［ｋ］がｋ番目のタップに関するフィルタ係数を表す。また、Ｘ［ｎ−ｋ］は入力複素数データ列であり、Ｙ［ｎ］は、ＦＩＲフィルタ出力である。このように、ＦＩＲフィルタ演算は、いわゆる"畳み込み演算"であり、積和演算の繰り返しによって実行される。
【０００３】
ＦＩＲフィルタ演算をマイクロプロセッサに効率よく実行させるための様々な提案が行われている。例えば、非特許文献１には、１２８ビット長のデータを一括処理可能なＳＩＭＤ（Single Instruction Multiple Data）アーキテクチャを採用したプロセッサに、複素数のＦＩＲフィルタ演算を実行させるためのプログラム例が開示されている。
【０００４】
非特許文献１に記載されたプロセッサはＳＩＭＤアーキテクチャを採用している。つまり、非特許文献１に記載されたプロセッサは、同様の積和演算回路を複数個有しており、１つの命令に応じて複数のデータ（ベクトルデータ）を入力し、これら複数のデータに対して並行して積和演算処理を行い、複数の積和演算結果データを出力する。
【０００５】
以下では、タップ数ｍが４であるときのＦＩＲフィルタ演算を、非特許文献１に開示された思想に従って実行する例を説明する。なお、非特許文献１には、１６ビット長のデータを８並列化した１２８ビット長のベクトルデータを処理可能なマイクロプロセッサに関して記載されている。しかしながら、説明の容易化のために、以下では、１６ビット長のデータを４並列化した６４ビット長のベクトルデータを取り扱うマイクロプロセッサについて説明する。また、説明の容易化のために、（１）式の畳み込みの演算式を（２）式のように変形する。
【数２】
2009075676.tif 000004
【０００６】
（２）式により得られる出力データＹ［ｎ］は、４つの複素積の総和によって表される。図１２は、Ｙ［０］〜Ｙ［３］までを図示したものである。非特許文献１に開示されたプロセッサは、ＳＩＭＤアーキテクチャによる並列処理の効果を高めるために、２並列であれば、１つのアキュムレータを使用してＹ［ｎ］〜Ｙ［ｎ＋１］を並行して計算する。また、４並列であれば、非特許文献１に開示されたプロセッサは、２つのアキュムレータ・レジスタを使用して、Ｙ［ｎ］〜Ｙ［ｎ＋３］を並行して計算する。
【０００７】
例えば、Ｙ［０］及びＹ［１］を並行して計算する場合、図１２に示すように、第１ステップでは、２つの複素積Ｗ［０］＊Ｘ［０］及びＷ［０］＊Ｘ［１］の実部及び虚部が計算され、結果がアキュムレータに格納される。続く第２ステップでは、２つの複素積Ｗ［１］＊Ｘ［１］及びＷ［１］＊Ｘ［２］の実部及び虚部が計算され、結果がアキュムレータに加算される。同様に第３及び第４ステップを実行することによって、アキュムレータにＹ［０］及びＹ［１］の実部及び虚部が得られる。図１３は、図１２に示した第１〜第４ステップの計算を実行する際に使用されるベクトルデータ群を示している。なお、レジスタＲ２〜Ｒ１３のレジスタ長は、いずれも６４ビットである。図１３に示した複数のレジスタのうち、レジスタＲ２〜Ｒ５は、入力データＸ［０］〜Ｘ［４］の実部及び虚部を格納している。例えば、レジスタＲ２は、Ｘ［０］の実部ＸＲ［０］及び虚部ＸＩ［０］、並びにＸ［１］の実部ＸＲ［１］及び虚部ＸＩ［１］を格納している。ＸＲ［０］、ＸＩ［０］、ＸＲ［１］及びＸＩ［１］のデータ長は、いずれも１６ビットである。また、レジスタＲ６〜Ｒ１３は、フィルタ係数Ｗ［１］〜［３］を保持するレジスタである。
【０００８】
ＳＩＭＤアーキテクチャの演算ユニットの具体例を図１４Ａ及びＢに示す。図１４Ａ及びＢは、乗算器９３２０及び９３２１、加算器９３３０並びに加算器９３４０を要素とする第１の積和演算回路と、乗算器９３２２及び９３２３、加算器９３３１並びに加算器９３４１を要素とする第２の積和演算回路が並行して設けた構成を示している。なお、図１４Ａ及びＢに示した演算ユニットの構成は、発明者等が非特許文献１の記載に基づいて従来のマイクロプロセッサの改良を検討する過程で考案したものであり、非特許文献１に開示された公知の構成ではない。
【０００９】
図１４Ａは、図１２に示した第１ステップの計算のうち、２つの複素積Ｗ［０］＊Ｘ［０］及びＷ［０］＊Ｘ［１］の実部を求める計算が、積和演算の実行を指示する１つの命令に基づいて実行される過程を示している。Ｗ［０］＊Ｘ［０］の実部は、アキュムレータとして使用されるレジスタＲ０の下位側の３２ビットに格納され、Ｗ［０］＊Ｘ［１］の実部は、レジスタＲ０の上位側の３２ビットに格納される。
【００１０】
一方、図１４Ｂは、図１２に示した第１ステップの計算のうち、２つの複素積Ｗ［０］＊Ｘ［０］及びＷ［０］＊Ｘ［１］の虚部を求める計算が、積和演算の実行を指示する１つの命令に基づいて実行される過程を示している。Ｗ［０］＊Ｘ［０］の虚部は、アキュムレータとして使用されるレジスタＲ１の下位側の３２ビットに格納され、Ｗ［０］＊Ｘ［１］の虚部は、レジスタＲ１の上位側の３２ビットに格納される。
【００１１】
なお、図１４Ａ及びＢのように、乗算結果を格納するアキュムレータのレジスタ長が乗算結果のデータ長と同一である場合には、オーバーフローの発生を防止するために、アキュムレータに格納される累積値を適切にスケーリングする必要がある。このようなスケーリングの実行は、計算精度の低下をもたらす。このため、積和演算の結果を格納するアキュムレータのレジスタ長を、累積加算される乗算結果のデータ長に比べて大きくする技術が知られている（例えば特許文献１及び２を参照）。例えば、乗算結果データが３２ビットである場合に、これらを累積加算する積和演算のアキュムレータのレジスタ長が４８ビット又は６４ビットとされる。
【非特許文献１】AltiVec Complex FIR、[online]、2002年10月28日、Freescale Semiconductor, Inc.、[2007年9月6日検索]、インターネット＜URL: http://www.freescale.com/webapp/sps/site/overview.jsp?code=DRPPCALTVCCFIR＞
【特許文献１】特開平１０−１３４０３２号公報
【特許文献２】米国特許第７，１２０，７８３号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１２】
本願の発明者等は、図１２、１３、１４Ａ及び１４Ｂを参照して説明した複素数のＦＩＲフィルタ演算をＳＩＭＤアーキテクチャによって高速化する技術に、スケーリングによる計算精度の低下を防止するために積和演算結果を格納するアキュムレータのレジスタ長を増大させる技術を適用すると、積和演算用のアキュムレータに割り当てるべきレジスタの数が増加する問題があることを見出した。例えば、図１４Ａの構成について見ると、６４ビット長のレジスタＲ０だけでは、各々が３２ビットを越える２つの積和演算結果を保持することは不可能であり、新たにもう１つのレジスタを積和演算用のアキュムレータに割り当てる必要がある。通常、命令のオペランド数には制約があり、命令オペランドで指定できるレジスタ数も制約されることが多い。このため、使用する命令セットによっては、積和演算用のアキュムレータ数の増加が困難な場合もある。
【課題を解決するための手段】
【００１３】
本発明の第１の態様にかかるマイクロプロセッサは、実行制御部、第１乃至第３のレジスタ、並びに複素積和演算ユニットを有する。前記実行制御部は、複素数の積和演算を指示する複素積和演算命令を含む命令を取得し、当該命令の実行を制御する。
【００１４】
前記第１のレジスタは、レジスタ長が少なくとも２ｍ＋１ビットであって、それぞれが２ｍ−１ビット長の実部及び２ｍ−１ビット長の虚部からなる２ｍビット長の第１の複素数データ及び第２の複素数データを格納可能である。同様に、前記第２のレジスタは、レジスタ長が少なくとも２ｍ＋１ビットであって、それぞれが２ｍ−１ビット長の実部及び２ｍ−１ビット長の虚部からなる２ｍビット長の第３の複素数データ及び第４の複素数データを格納可能である。また、前記第３のレジスタは、レジスタ長が少なくとも２ｍ＋２ビットである。
【００１５】
一方、前記複素積和演算ユニットは、前記複素積和演算命令を取得した前記実行制御部による制御に基づいて、前記第１及び第２のレジスタに格納された複素数データを入力して複素演算を実行するとともに、得られた複素演算結果と前記第３のレジスタの格納値とを加算した値によって前記第３のレジスタを上書きする。さらに、前記複素積和演算ユニットは、前記第１及び第３の複素数データの積と前記第２及び第４の複素数データの積との実部どうしの和又は虚部どうしの和を算出し、得られた前記実部どうしの和又は虚部どうしの和を前記第３のレジスタの格納値に加算する。
【００１６】
前記第１の態様にかかるマイクロプロセッサにおいて、前記複素積和演算ユニットは、２つの複素乗算結果の実部どうし又は虚部どうしを加算した結果である１つの演算結果を生成する。ここで、２つの複素乗算結果の実部及び虚部のデータ長はそれぞれ最大２ｍ＋１ビットである。したがって、２つの複素乗算結果の実部どうし又は虚部同士を加算して得られる１つの演算結果のデータ長は、最大２ｍ＋２ビットである。前記第１の態様にかかるマイクロプロセッサは、この１つの演算結果を、レジスタ長が少なくとも２ｍ＋２ビットである第３のレジスタの格納値に加算する。
【００１７】
このように、前記複素積和演算ユニットは、前記第１のレジスタに保持されたベクトルデータ（第１及び第２の複素数データ）及び前記第２のレジスタに保持されたベクトルデータ（第３及び第４の複素数データ）を用いて１つの演算結果を生成し、得られた演算結果を複素積の実部又は虚部のデータ長（２ｍ＋１ビット）より大きなレジスタ長（２ｍ＋２ビット以上）とされた第３のレジスタに加算することとした。つまり、前記第１の態様にかかるマイクロプロセッサは、前記第３のレジスタを積和演算用のアキュムレータとして使用することで、追加のレジスタを過度に使用することなく、スケーリングに伴う計算精度の低下を抑制することができる。
【発明の効果】
【００１８】
本発明により、積和演算結果を格納するアキュムレータのオーバーフローを回避するためのスケーリングに起因する計算精度の低下を、追加のレジスタを過度に使用することなく抑制することが可能なマイクロプロセッサを提供できる。
【発明を実施するための最良の形態】
【００１９】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００２０】
＜発明の実施の形態１＞
本実施の形態にかかるマイクロプロセッサ１を図１に示す。マイクロプロセッサ１は、アドレスバス５２及びデータバス５３を介して命令メモリ５０及びデータメモリ５１に接続されている。命令メモリ５０は、マイクロプロセッサ１により実行される命令列を格納するメモリである。また、データメモリ５１は、マイクロプロセッサ１に入力されるデータや、マイクロプロセッサ１によって処理されたデータが格納されるメモリである。なお、図１では、論理的な構成単位である命令メモリ５０及びデータメモリ５１を示しているが、これらはそれぞれ、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）若しくはフラッシュメモリ、又はこれらの組合せ等により構成される。
【００２１】
実行制御部１０は、命令メモリ５０から命令をフェッチし、フェッチした命令をデコードする。より具体的に述べると、実行制御部１０は、フェッチした命令の命令種別を判定し、命令オペランドを取得し、命令デコードにより得られたこれらの情報に応じて、後述するプログラムカウンタ（ＰＣ）１１、レジスタファイル１２、複素積和演算ユニット１３に対してデータ若しくは制御信号又はこれら両方を出力する。
【００２２】
プログラムカウンタ１１は、実行制御部１０によるフェッチ対象となる命令のアドレスが保持されるレジスタである。プログラムカウンタ１１の値は実行制御部１０によって更新される。
【００２３】
レジスタファイル１２は、複数の汎用レジスタの集合である。本実施の形態では、図１に示すように、レジスタファイル１２が１６本の汎用レジスタＲ０乃至Ｒ１５を有するものとして説明する。また、汎用レジスタＲ０乃至Ｒ１５は、それぞれ６４ビットのレジスタとする。なお、ここでの汎用レジスタＲ０乃至１５の数並びにレジスタ長が一例にすぎないことはもちろんである。汎用レジスタＲ０乃至Ｒ１５は、複素積和演算ユニット１３の入力データ及び出力データを格納するアキュムレータ、あるいはメモリアクセス時のアドレス指定を行うためのアドレスレジスタなど、様々な用途に使用可能なレジスタである。
【００２４】
複素積和演算ユニット１３は、複素積和演算命令をデコードした実行制御部１０の制御に従って、複素積和演算を実行する。１つの複素積和演算命令がデコードされたことに応じて複素積和演算ユニット１３が実行する演算処理の例を図２に示す。図２において、ＸＲ［ｉ］、ＸＩ［ｉ］、ＸＲ［ｉ＋１］、ＸＩ［ｉ＋１］、ＷＲ［ｉ］、ＷＩ［ｉ］、ＷＲ［ｉ＋１］及びＷＩ［ｉ＋１］の各々は、１６ビット長である。また、ＸＲ［ｉ］及びＸＩ［ｉ］は、それぞれ複素数Ｘ［ｉ］の実部及び虚部を意味し、ＷＲ［ｉ］及びＷＩ［ｉ］は、複素数Ｗ［ｉ］の実部及び虚部を意味する。
【００２５】
図２の例では、複素積和演算ユニット１３は、６４ビット長のレジスタＲ２に保持された２つの複素数データＸ［ｉ］及びＸ［ｉ＋１］と、６４ビット長のレジスタＲ０保持された２つの複素数データＷ［ｉ］及びＷ［ｉ＋１］を入力し、Ｗ［ｉ］＊Ｘ［ｉ］＋Ｗ［ｉ＋１］＊Ｘ［ｉ＋１］の実部を演算する。そして、複素積和演算ユニット１３は、得られた３２〜３４ビット長の演算結果を６４ビット長のレジスタＲ０の保持値ＤＴと加算し、このＤＴとの加算結果によってレジスタＲ０を上書きする。また、図２には示していないが、複素積和演算ユニット１３は、Ｗ［ｉ］＊Ｘ［ｉ］＋Ｗ［ｉ＋１］＊Ｘ［ｉ＋１］の虚部を演算し、演算結果をレジスタＲ０に加算することも可能である。
【００２６】
次に、図１及び２に示した複素積和演算ユニット１３の具体的な構成例について説明する。図３は、複素積和演算ユニット１３の構成例を示すブロック図である。図３の構成例は、３ステージパイプライン構造を採用している。なお、図３に示す複素積和演算ユニット１３の構成が一例に過ぎないことはもちろんあり、当業者であれば、図３及び後述する説明並びに技術常識に基づいて様々な変形が可能である。
【００２７】
図３において、ＩＮ１［０］〜ＩＮ１［３］は、レジスタファイル１２から複素積和演算ユニット１３のＩＮ１端子に供給される６４ビットデータであり、ＩＮ１［０］〜ＩＮ１［３］の各々は１６ビットである。同様に、ＩＮ２［０］〜ＩＮ２［３］は、レジスタファイル１２から複素積和演算ユニット１３のＩＮ２端子に供給される６４ビットデータであり、ＩＮ２［０］〜ＩＮ２［３］の各々は１６ビットである。
【００２８】
セレクタ１３１０は、ＩＮ１端子に供給されるＩＮ１［０］及びＩＮ１［１］を入力し、実行制御部１０から供給される１ビット論理信号Ｓ＿ＩＳＥＬが"０"であるときにＩＮ１［０］を選択して出力し、Ｓ＿ＩＳＥＬが"１"であるときにＩＮ１［１］を選択して出力する。
【００２９】
セレクタ１３１１は、セレクタ１３１０のＩＮ１端子に供給されるＩＮ１［０］及びＩＮ１［１］を入力し、実行制御部１０から供給される１ビット論理信号Ｓ＿ＩＳＥＬが"０"であるときにＩＮ１［１］を選択して出力し、Ｓ＿ＩＳＥＬが"１"であるときにＩＮ１［０］を選択して出力する。つまり、セレクタ１３１１及び１３１２は、互いに相補的に動作し、一方がＩＮ１［０］を選択する場合にもう一方がＩＮ１［１］を選択する。
【００３０】
乗算器１３２０は、ＩＮ２端子に供給される１６ビットデータＩＮ２［０］と、セレクタ１３１０の出力データを乗算し、３２ビット長の乗算結果を出力する。乗算器１３２１は、ＩＮ２端子に供給される１６ビットデータＩＮ２［１］と、セレクタ１３１０の出力データを乗算し、３２ビット長の乗算結果を出力する。乗算器１３２０及び１３２１の出力は、パイプラインラッチ１３３０及び１３３１にそれぞれ保持される。
【００３１】
次に、第２のパイプラインステージにおいて、加減算器１３４０は、パイプラインラッチ１３３０及び１３３１に保持された２つの乗算結果を入力し、これらを加算又は減算する。加減算器１３４０の出力データは、３３ビット長である。加減算器１３４０の演算内容は、実行制御部１０から供給される２ビット制御信号ＭＡＤ＿ＦＮＣ［１：０］によって制御される。加減算器１３４０の動作ロジックを図４（ａ）及び（ｂ）に示す。加減算器１３４０は、図４（ｂ）のテーブルに従って、Ａ＋Ｂ、Ａ−Ｂ、Ｂ−Ａの３通りの計算を実行する。
【００３２】
一方、セレクタ１３１２及び１３１３、乗算器１３２２及び１３２３、パイプラインラッチ１３３２及び１３３３並びに加減算器１３４１は、４つの１６ビットデータＩＮ１［２］、ＩＮ１［３］、ＩＮ２［２］、及びＩＮ２［３］に対して、上述したセレクタ１３１０及び１３１１、乗算器１３２０及び１３２１、パイプラインラッチ１３３０及び１３３１並びに加減算器１３４０と同様の演算を実行する。
【００３３】
加算器１３５０は、加減算器１３４０及び１３４１の２つの出力を加算する。加算器１３５０の出力データは、３４ビット長である。加算器１３５０の出力は、パイプラインラッチ１３６０に保持される。
【００３４】
最後に、第３パイプラインステージにおいて、加算器１３７０は、パイプラインラッチ１３６０に保持された３４ビット長の演算結果を、ＩＮ３端子に供給される６４ビットデータに加算して得られる６４ビットデータを出力する。複素積和演算ユニット１３に積和演算を実行させる場合には、ＩＮ３端子へのデータ供給元レジスタ及びＯＵＴ１端子の出力先レジスタを同一とすればよいが、これらに各々別個のレジスタを指定してもよい。
【００３５】
上述した図３の構成例では、セレクタ１３１０及び１３１１、乗算器１３２０及び１３２１、パイプラインラッチ１３３０及び１３３１並びに加減算器１３４０によって、ＩＮ１［０］及びＩＮ１［１］に供給される第１の複素数データ（例えばＸＲ［ｉ］及びＸＩ［ｉ］）と、ＩＮ２［０］及びＩＮ２［１］に供給される第３の複素数データ（例えばＷＲ［ｉ］及びＷＩ［ｉ］）との乗算結果の実部又は虚部を求めることができる。
【００３６】
同様に、セレクタ１３１２及び１３１３、乗算器１３２２及び１３２３、パイプラインラッチ１３３２及び１３３３並びに加減算器１３４１によって、ＩＮ１［２］及びＩＮ１［３］に供給される第２の複素数データ（例えばＸＲ［ｉ＋１］及びＸＩ［ｉ＋１］）と、ＩＮ２［２］及びＩＮ２［３］に供給される第４の複素数データ（例えばＷＲ［ｉ＋１］及びＷＩ［ｉ＋１］）との乗算結果の実部又は虚部を求めることができる。
【００３７】
したがって、図３の構成例では、加算器１３５０の出力は、２つの複素乗算結果の実部どうし又は虚部どうしの加算結果となる。つまり、複素積和演算ユニット１３は、合計４つの複素数データを入力し、２つの複素乗算を並行して実行することで複素乗算結果の実部（又は虚部）を２つ求める。さらに、複素積和演算ユニット１３は、これら２つの値（複素乗算結果の実部又は虚部）を加算器１３５０によって加算した後に、さらに、加算器１３７０によって過去の累積値に加算するよう構成されている。
【００３８】
続いて以下では、マイクロプロセッサ１に、図１２に示したのと同じタップ数ｍ＝４のＦＩＲフィルタ演算を実行させる手順について説明する。上述したように、図１２の例は、ＳＩＭＤアーキテクチャを有するマイクロプロセッサの並列処理性能を活用するため、２つの出力データＹ［０］及びＹ［１］に関する２つの複素乗算（具体的には、Ｗ［０］＊Ｘ［０］及びＷ［０］＊Ｘ［１］）を並行して計算することを特徴としていた。これに対して、以下に説明するマイクロプロセッサ１によるＦＩＲフィルタ演算の実行例は、１つの出力データＹ［０］を得るための２つの複素乗算を並行して行ったうえ、これら２つの乗算結果を加算して１つの出力データを生成する点が特徴である。具体的には、図５に示すように、第１ステップでは、２つの複素積の和"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部及び虚部が計算され、結果がアキュムレータに格納される。続く第２ステップでは、２つの複素積の和"Ｗ［２］＊Ｘ［２］＋Ｗ［３］＊Ｘ［３］"の実部及び虚部が計算され、結果がアキュムレータに加算される。これにより、アキュムレータにＹ［０］の実部及び虚部が得られる。同様に、第３及び第４ステップを実行することによって、アキュムレータにＹ［１］の実部及び虚部が得られる。
【００３９】
なお、マイクロプロセッサ１は、２つの複素乗算命令によって図５の第１ステップの計算を実行する。２つの複素乗算命令の一方は、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部を求めるための命令（ＶＣＭＡＤＲＥ命令）であり、もう一方は、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の虚部を求めるための命令（ＶＣＭＡＤＩＭ命令）である。
【００４０】
図６Ａは、図５の第１ステップの実部を計算するためのＶＣＭＡＤＲＥ命令に応じた複素積和演算ユニット１３の動作を示している。図６Ａに示すように、ＶＣＭＡＤＲＥ命令では３つのオペランドが指定される。第１オペランド及び第２オペランドとして指定されたレジスタＲ２及びＲ３は、複素積和演算の対象である複素数データＸ［０］、Ｘ「１」、Ｗ［０］及びＷ［１］の実部及び虚部を格納するレジスタである。また、第３オペランドとして指定されたレジスタＲ０は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。このＶＣＭＡＤＲＥ命令をデコードした実行制御部１０の制御に基づいて、乗算器１３２０及び１３２１並びに加減算器１３４０が、Ｘ［０］＊Ｗ［０］の実部を算出する。また、この計算に並行して、乗算器１３２２及び１３２３並びに加減算器１３４１が、Ｘ［１］＊Ｗ［１］の実部を算出する。さらに、加算器１３５０が、Ｘ［０］＊Ｗ［０］及びＸ［１］＊Ｗ［１］の実部どうしを加算する。最後に、加算器１３７０が、加算器１３５０の出力をレジスタＲ０の格納値に加算する。これにより、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部が、累積値ＤＴＲとしてレジスタＲ０に保持される。
【００４１】
一方、図６Ｂは、図５の第１ステップの虚部を計算するためのＶＣＭＡＤＩＭ命令に応じた複素積和演算ユニット１３の動作を示している。ＶＣＭＡＤＩＭ命令も３つのオペランドを含む。これら３つのオペランドの役割は、上述したＶＣＭＡＤＲＥ命令と同様である。つまり、第１オペランド及び第２オペランドとして指定されたレジスタＲ２及びＲ３は、複素積和演算の対象である複素数データＸ［０］、Ｘ「１」、Ｗ［０］及びＷ［１］の実部及び虚部を格納するレジスタである。また、第３オペランドとして指定されたレジスタＲ１は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。このＶＣＭＡＤＩＭ命令をデコードした実行制御部１０の制御に基づいて、乗算器１３２０及び１３２１並びに加減算器１３４０が、Ｘ［０］＊Ｗ［０］の虚部を算出する。また、この計算に並行して、乗算器１３２２及び１３２３並びに加減算器１３４１が、Ｘ［１］＊Ｗ［１］の虚部を算出する。さらに、加算器１３５０が、Ｘ［０］＊Ｗ［０］及びＸ［１］＊Ｗ［１］の虚部どうしを加算する。最後に、加算器１３７０が、加算器１３５０の出力をレジスタＲ１の格納値に加算する。これにより、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の虚部が、累積値ＤＴＩとしてレジスタＲ１に保持される。
【００４２】
図６Ｃ及びＤは、図５の第１ステップの計算に引き続いて実行される図５の第２ステップに対応するＶＣＭＡＤＲＥ命令及びＶＣＭＡＤＩＭ命令の実行過程を示している。図６Ｃに示すＶＣＭＡＤＲＥ命令をデコードした実行制御部１０の制御に基づいて、乗算器１３２０及び１３２１並びに加減算器１３４０が、Ｘ［２］＊Ｗ［２］の実部を計算する。また、この計算に並行して、乗算器１３２２及び１３２３並びに加減算器１３４１が、Ｘ［３］＊Ｗ［３］の実部を計算する。さらに、加算器１３５０が、Ｘ［２］＊Ｗ［２］及びＸ［３］＊Ｗ［３］の実部どうしを加算する。最後に、加算器１３７０が、加算器１３５０の出力をレジスタＲ０の格納値ＤＴＲ（具体的には、先に保持されていた"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部）に加算する。これにより、出力データＹ［０］の実部が、レジスタＲ０に保持される。
【００４３】
図６Ｄに示すＶＣＭＡＤＩＭ命令をデコードした実行制御部１０の制御に基づいて、乗算器１３２０及び１３２１並びに加減算器１３４０が、Ｘ［２］＊Ｗ［２］の虚部を計算する。また、この計算に並行して、乗算器１３２２及び１３２３並びに加減算器１３４１が、Ｘ［３］＊Ｗ［３］の虚部を計算する。さらに、加算器１３５０が、Ｘ［２］＊Ｗ［２］及びＸ［３］＊Ｗ［３］の虚部どうしを加算する。最後に、加算器１３７０が、加算器１３５０の出力をレジスタＲ０の格納値ＤＴＩ（具体的には、先に保持されていた"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の虚部）に加算する。これにより、出力データＹ［０］の虚部が、レジスタＲ１に保持される。
【００４４】
なお、上述した通り、複素積和演算ユニット１３が有するセレクタ１３１０及び１３１１並びに加減算器１３４０及び１３４１の動作は、実行制御部１０から複素積和演算ユニット１３に供給される制御信号Ｓ＿ＩＳＥＬ及びＭＡＤ＿ＦＮＣ［１：０］によって制御される。図７のテーブルは、図６Ａ乃至Ｄに示したＶＣＭＡＤＲＥ命令及びＶＣＭＡＤＩＭ命令がデコードされたことに応じて実行制御部１０から複素積和演算ユニット１３に供給される制御信号群の組合せを示している。
【００４５】
上述したように、本実施の形態にかかるマイクロプロセッサ１は、複素積和演算の実行に適した複素積和演算ユニット１３を有して構成され、複素積和演算の１つの出力データ（例えばＹ［０］）を得るための２つの複素乗算（例えば、Ｗ［０］＊Ｘ［０］及びＷ［１］＊Ｘ［１］）を並行して行ったうえ、これら２つの乗算結果を加算して１つの出力データを生成する点が特徴である。
【００４６】
複素積和演算ユニット１３は、６４ビット長の２つの入力レジスタ（例えば、レジスタＲ２及びＲ３）から合計４つの複素数データ（例えば、Ｘ［０］、Ｘ［１］、Ｗ［０］及びＷ［１］）を入力し、これら４つの複素数データを用いた２つの複素乗算（例えば、Ｗ［０］＊Ｘ［０］及びＷ［１］＊Ｘ［１］）を並行して実行することで複素乗算結果の実部（又は虚部）を２つ求める。さらに、複素積和演算ユニット１３は、得られた２つの複素乗算結果の実部（又は虚部）を加算器１３５０によって加算した値（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部）を、アキュムレータとして使用される６４ビット長の出力レジスタ（例えばレジスタＲ０）の格納値に加算する。
【００４７】
このような構成によって、マイクロプロセッサ１は、１つの出力レジスタ（例えばレジスタＲ０）に１つの出力データ（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部）を保持できればよい。つまり、マイクロプロセッサ１は、２つの複素乗算結果の実部（又は虚部）をアキュムレータに保持しておく必要がある図１４Ａ及びＢに示した構成例とは異なる。このため、マイクロプロセッサ１は、アキュムレータとして使用される６４ビット長の出力レジスタの全体を積和演算結果の格納のために使用することができ、追加のレジスタを使用することなく、スケーリングに伴う計算精度の低下を抑制することができる。
【００４８】
＜発明の実施の形態２＞
本実施の形態にかかるマイクロプロセッサ２の構成を図８に示す。マイクロプロセッサ２は、複素積和演算ユニット２３の構成が上述した複素積和演算ユニット１３と相違する。発明の実施の形態１で説明した複素積和演算ユニット１３は、２つの複素積の実部どうしの和及び虚部どうしの和（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部及び虚部）を２つの命令（例えば、ＶＣＭＡＤＲＥ命令及びＶＣＭＡＤＩＭ命令）によって求めるよう構成されていた。これに対して、複素積和演算ユニット２３は、ハードウェアの並列度を高めることで、２つの複素積の実部どうしの和及び虚部どうしの和を１つの命令によって求めるよう構成されている。複素積和演算ユニット２３は、レジスタファイル１２に含まれる４つのレジスタから４つの６４ビットデータを入力し、演算結果である２つの６４ビットデータをレジスタファイル１２に含まれる２つのレジスタに出力するよう構成された４入力２出力の演算ユニットである。また、複素積和演算ユニット２３の動作は、実行制御部２０によって制御される。
【００４９】
複素積和演算ユニット２３の構成例を図９に示す。以下では、図３との相違点に着目して図９の構成を説明する。図９において、乗算器１３２０〜１３２３、パイプラインラッチ１３３０〜１３３３、加減算器１３４０及び１３４１、加算器１３５０、パイプラインラッチ１３６０、並びに加算器１３７０は、図３に示したものと同一である。説明の便宜上、以下では、これらのハードウェアを共通ハードウェア群と呼ぶ。図９の構成では、これらの共通ハードウェア群に加えて、共通ハードウェア群と同じ機能を有する追加ハードウェア群が設けられている。すなわち、追加ハードウェア群は、乗算器１３２４〜１３２７、パイプラインラッチ１３３４〜１３３７、加減算器１３４２及び１３４３、加算器１３５１、パイプラインラッチ１３６１、並びに加算器１３７１である。図８に示す構成によれば、共通ハードウェア群が、２つの複素積の和（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"）の実部を計算する。また、この計算に並行して、追加ハードウェア群が、２つの複素積の和（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"）の虚部を計算する。
【００５０】
つまり、複素積和演算ユニット２３は、上述した複素積和演算ユニット１３が２回に分けて行っていた「２つの複素積和の和の実部及び虚部を求める計算」、例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部及び虚部を求める計算を並行して実行できるよう構成されている。このため、乗算器１３２０及び１３２１に対する入力データ選択用に設けていたセレクタ１３１０及び１３１１は、図９の構成例では不要である。
【００５１】
続いて以下では、マイクロプロセッサ２に、図５に示したタップ数ｍ＝４のＦＩＲフィルタ演算の第１ステップ及び第２ステップを実行させる手順について説明する。マイクロプロセッサ２は、１つの複素乗算命令（ＶＣＭＡＤ命令）によって図５の第１ステップの計算を実行する。つまり、ＶＣＭＡＤ命令に応じて、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部及び虚部を計算する。
【００５２】
図１０Ａは、図５の第１ステップを計算するためのＶＣＭＡＤ命令に応じた複素積和演算ユニット２３の動作を示している。図１０Ａに示すように、ＶＣＭＡＤ命令では４つのオペランドが指定される。第１オペランド及び第２オペランドとして指定されたレジスタＲ２及びＲ３は、複素積和演算の対象である複素数データＸ［０］、Ｘ「１」、Ｗ［０］及びＷ［１］の実部及び虚部を格納するレジスタである。また、第３及び第４オペランドとして指定されたレジスタＲ０及びＲ１は、複素積和演算の結果を格納するアキュムレータとして使用されるレジスタである。具体的には、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部の計算結果がレジスタＲ０に加算され、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の虚部の計算結果がレジスタＲ１に加算される。
【００５３】
図１０Ａについてより詳細に説明する。ＶＣＭＡＤ命令をデコードした実行制御部２０の制御に基づいて、乗算器１３２０及び１３２１並びに加減算器１３４０が、Ｘ［０］＊Ｗ［０］の実部を算出する。一方、乗算器１３２２及び１３２３並びに加減算器１３４１が、Ｘ［１］＊Ｗ［１］の実部を算出する。さらに、乗算器１３２４及び１３２５並びに加減算器１３４２が、Ｘ［０］＊Ｗ［０］の虚部を算出し、乗算器１３２６及び１３２７並びに加減算器１３４３が、Ｘ［１］＊Ｗ［１］の虚部を算出する。続いて、加算器１３５０が、Ｘ［０］＊Ｗ［０］及びＸ［１］＊Ｗ［１］の実部どうしを加算する。また、加算器１３５１が、Ｘ［０］＊Ｗ［０］及びＸ［１］＊Ｗ［１］の虚部どうしを加算する。最後に、加算器１３７０が、加算器１３５０の出力をレジスタＲ０の格納値に加算する。また、加算器１３７１が、加算器１３５１の出力をレジスタＲ１の格納値に加算する。これにより、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部が、累積値ＤＴＲとしてレジスタＲ０に保持される。また、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の虚部が、累積値ＤＴＩとしてレジスタＲ１に保持される。
【００５４】
図１０Ｂは、図５の第１ステップの計算に引き続いて実行される図５の第２ステップに対応するＶＣＭＡＤ命令の実行過程を示している。図１０Ｂの実行過程は、入力データが異なることを除いて図１０Ａと同様である。第２ステップの実行によって、出力データＹ［０］の実部がレジスタＲ０に保持され、Ｙ［０］の虚部がレジスタＲ１に保持される。
【００５５】
なお、複素積和演算ユニット２３が有する加減算器１３４０〜１３４３の動作は、実行制御部２０から複素積和演算ユニット２３に供給される制御信号ＭＡＤ＿ＦＮＣＬ［１：０］及びＭＡＤ＿ＦＮＣＲ［１：０］によって制御される。図１１のテーブルは、図１０Ａ及びＢに示したＶＣＭＡＤ命令がデコードされたことに応じて実行制御部１０から複素積和演算ユニット１３に供給される制御信号群の組合せを示している。
【００５６】
本実施の形態にかかるマイクロプロセッサ２も、上述したマイクロプロセッサ１と同様に、複素積和演算の１つの出力データ（例えばＹ［０］）を得るための２つの複素乗算（例えば、Ｗ［０］＊Ｘ［０］及びＷ［１］＊Ｘ［１］）を並行して行ったうえ、これら２つの乗算結果を加算して１つの出力データを生成する点が特徴である。ただし、マイクロプロセッサ１が２命令で行っていた「２つの複素積和の和の実部及び虚部を求める計算」を１命令で実行できるように、複素積和演算ユニット２３の演算ハードウェアの並列度を向上させている。
【００５７】
このような構成によって、マイクロプロセッサ２は、２つの出力データ（例えば、"Ｗ［０］＊Ｘ［０］＋Ｗ［１］＊Ｘ［１］"の実部及び虚部）を２つの出力レジスタ（例えばレジスタＲ０及びＲ１）に保持できればよい。これに対して、図１４Ａ及びＢに示した構成のハードウェア並列度を向上させると４つの出力データ（例えば、Ｗ［０］＊Ｘ［０］の実部及び虚部と、Ｗ［０］＊Ｘ［１］の実部及び虚部）を保持する必要がある。これらを比較すると、マイクロプロセッサ２は、アキュムレータに保持すべき積和演算結果のデータ量を削減することができ、スケーリングを回避するために用意すべきレジスタサイズ、レジスタ数を削減することができる利点がある。
【００５８】
なお、図１及び図８には、複素積和演算ユニット１３及び２３を除く他の処理ユニットを示していないが、マイクロプロセッサ１及び２が他の処理ユニットを有してもよいことはもちろんである。例えば、マイクロプロセッサ１及び２は、浮動小数点演算ユニット、整数演算ユニット、ロード／ストアユニット等を有してもよい。
【００５９】
また、例えば、レジスタＲ０〜Ｒ１５のレジスタ長を１２８ビットとして、複素積和演算ユニット１３及び２３のハードウェア並列度を２倍とすれば、図５の第１ステップ及び第２ステップを並行して実行することができる。このように、レジスタＲ０〜Ｒ１５のレジスタ長を大きくしてデータの並列度を高めると共に、複素積和演算ユニット１３及び２３のハードウェア並列度をさらに向上させてもよい。
【００６０】
また、発明の実施の形態１及び２では、複素積和演算結果を格納するアキュムレータとして、レジスタファイル１２内の汎用レジスタ（レジスタＲ０〜Ｒ１５のいずれか）を使用し、複素積和演算命令（ＶＣＭＡＤＲＥ命令、ＶＣＭＡＤＩＭ命令、ＶＣＭＡＤ命令）のオペランドにおいてアキュムレータを明示的に指定するものとして説明した。しかしながら、複素積和演算結果が格納されるアキュムレータは、専ら積和演算結果の格納のために設けられた専用レジスタであってもよい。また、複素積和演算結果が格納されるアキュムレータは、複素積和演算命令のオペランドに明示的に指定されず、予め決定されているものでもよい。
【００６１】
また、発明の実施の形態１及び２では、複素乗算結果のデータ長３２ビットに対して、複素積和演算結果を格納するアキュムレータのサイズを６４ビット長としたが、６４ビットのレジスタの一部のみ（例えば４８ビット）を複素乗算結果の格納のために使用しても良い。また、複素乗算結果を格納するアキュムレータのサイズは、複素乗算結果のデータ長の２倍未満であってもよい。例えば、４つの複素乗算結果（各々が３２ビット長）を加算した結果の最大データ長は、３４ビット長であるから、複素乗算結果を格納するアキュムレータのサイズは、少なくとも３４ビット長とすればよい。
【００６２】
また、図３及び９に示した複素積和演算ユニット１３及び２３の構成が一例に過ぎないことは上述した通りであり、図３及び９は、複素積和演算ユニット１３及び２３のハードウェア構成を限定するものではない。例えば、加減算器１３４０及び１３４１並びに加算器１３５０における加減算の順序を適宜変更してもよいし、これらを一体のハードウェアとして構成してもよい。
【００６３】
また、発明の実施の形態１及び２では、タップ数ｍ＝４の比較的簡易なＦＩＲフィルタ演算の具体例に関して説明した。しかしながら、ＦＩＲフィルタのタップ数ｍをより大きくした場合のＦＩＲフィルタ演算も、上述したＶＣＭＡＤＲＥ命令及びＶＣＭＡＤＩＭ命令の繰り返し実行回数、又はＶＣＭＡＤ命令の繰り返し実行回数を増大させることで、マイクロプロセッサ１又は２により容易に演算可能である。
【００６４】
また、発明の実施の形態１及び２では、Ｘ［０］及びＷ［０］等の複素数データがレジスタＲ０〜Ｒ１５のいずれかに格納される際に、レジスタの下位ビット側に実部が格納され、上位ビット側に虚部が格納されるものとして説明した。しかしながら、発明の実施の形態１及び２で説明したマイクロプロセッサ１及び２は、複素数データの格納順序を、上述した｛虚部、実部｝という格納順序に限定するものではない。すなわち、マイクロプロセッサ１及び２は、｛実部、虚部｝の順序で格納された複素数データを用いた複素積和演算も実行可能である。
【００６５】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００６６】
【図１】発明の実施の形態１にかかるマイクロプロセッサのブロック図である。
【図２】発明の実施の形態１にかかるマイクロプロセッサが有する複素積和演算ユニットの入出力データを示す概念図である。
【図３】発明の実施の形態１にかかるマイクロプロセッサが有する複素積和演算ユニットの構成例を示す図である。
【図４】発明の実施の形態１にかかる複素積和演算ユニットが有する加減算器の動作ロジックを示す図である。
【図５】複素積和演算の実行手順を説明するための図である。
【図６Ａ】発明の実施の形態１にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図６Ｂ】発明の実施の形態１にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図６Ｃ】発明の実施の形態１にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図６Ｄ】発明の実施の形態１にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図７】発明の実施の形態１にかかるマイクロプロセッサによって複素積和演算を実行する際の制御信号の状態を示すテーブルである。
【図８】発明の実施の形態２にかかるマイクロプロセッサのブロック図である。
【図９】発明の実施の形態２にかかるマイクロプロセッサが有する複素積和演算ユニットの構成例を示す図である。
【図１０Ａ】発明の実施の形態２にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図１０Ｂ】発明の実施の形態２にかかるマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図１１】発明の実施の形態２にかかるマイクロプロセッサによって複素積和演算を実行する際の制御信号の状態を示すテーブルである。
【図１２】背景技術に関するマイクロプロセッサに複素積和演算を実行させる際の手順を説明するための図である。
【図１３】背景技術に関するマイクロプロセッサに複素積和演算を実行させる際に使用されるベクトルデータを示す図である。
【図１４Ａ】背景技術に関するマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【図１４Ｂ】背景技術に関するマイクロプロセッサによる複素積和演算の実行手順を説明するための概念図である。
【符号の説明】
【００６７】
１、２  マイクロプロセッサ
１０、２０  実行制御部
１１  プログラムカウンタ
１２  レジスタファイル
１３、２３  複素積和演算ユニット
５０  命令メモリ
５１  データメモリ
５２  アドレスバス
５３  データバス
１３１０〜１３１３  セレクタ
１３２０〜１３２７  乗算器
１３３０〜１３３７  パイプラインラッチ
１３４０〜１３４３  加減算器
１３５０、１３５１  加算器
１３６０、１３６１  パイプラインラッチ
１３７０、１３７１  加算器
Ｒ０〜Ｒ１５  レジスタ
【図１】
2009075676.tif 000005
【図２】
2009075676.tif 000006
【図３】
2009075676.tif 000007
【図４】
2009075676.tif 000008
【図５】
2009075676.tif 000009
【図６Ａ】
2009075676.tif 000010
【図６Ｂ】
2009075676.tif 000011
【図６Ｃ】
2009075676.tif 000012
【図６Ｄ】
2009075676.tif 000013
【図７】
2009075676.tif 000014
【図８】
2009075676.tif 000015
【図９】
2009075676.tif 000016
【図１０Ａ】
2009075676.tif 000017
【図１０Ｂ】
2009075676.tif 000018
【図１１】
2009075676.tif 000019
【図１２】
2009075676.tif 000020
【図１３】
2009075676.tif 000021
【図１４Ａ】
2009075676.tif 000022
【図１４Ｂ】
2009075676.tif 000023