JP2009048532A - マイクロプロセッサ - Google Patents

マイクロプロセッサ Download PDF

Info

Publication number
JP2009048532A
JP2009048532A JP2007215777A JP2007215777A JP2009048532A JP 2009048532 A JP2009048532 A JP 2009048532A JP 2007215777 A JP2007215777 A JP 2007215777A JP 2007215777 A JP2007215777 A JP 2007215777A JP 2009048532 A JP2009048532 A JP 2009048532A
Authority
JP
Japan
Prior art keywords
complex
data
instruction
register
output
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2007215777A
Other languages
English (en)
Inventor
Hideki Matsuyama
英樹 松山
Masayuki Daito
正行 大東
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Electronics Corp
Original Assignee
NEC Electronics Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Electronics Corp filed Critical NEC Electronics Corp
Priority to JP2007215777A priority Critical patent/JP2009048532A/ja
Priority to US12/194,559 priority patent/US20090055455A1/en
Publication of JP2009048532A publication Critical patent/JP2009048532A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/141Discrete Fourier transforms
    • G06F17/142Fast Fourier transforms, e.g. using a Cooley-Tukey type algorithm
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/4806Computations with complex numbers
    • G06F7/4812Complex multiplication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Software Systems (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Discrete Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Algebra (AREA)
  • Complex Calculations (AREA)
  • Microcomputers (AREA)

Abstract

【課題】複素乗算を含む複素演算を実行するマイクロプロセッサにおいて、入力される複素数データの実部及び虚部の格納順序に対する制約を緩和する。
【解決手段】マイクロプロセッサ1は、複素演算ユニット140を含む命令実行部14を備える。複素演算ユニット140は、レジスタファイル13から供給される第1及び第2の複素数データを用いて複素乗算を含む複素演算を実行し、当該複素演算の結果をレジスタファイル13に向けて出力する。さらに、複素演算ユニット140は、データ格納位置決定手段の具体例であるセレクタ1490及び1491を有する。セレクタ1490及び1491は、複素演算ユニット140の出力データの実部及び虚部のレジスタファイル13内における格納順序が、第1及び第2の複素数データの実部及び虚部の格納順序と一致するように、出力データの実部及び虚部のレジスタファイル13内での格納位置を決定する。
【選択図】図5

Description

本発明は、高速フーリエ変換(FFT:Fast Fourier transform)、高速逆フーリエ変換(IFFT:Inverse Fast Fourier transform)等の複素乗算が含まれた複素演算を実行するマイクロプロセッサに関する。
FFT計算及びIFFT計算をマイクロプロセッサに効率よく実行させるための様々な提案が行われている。例えば、非特許文献1には、128ビット長のデータを一括処理可能なSIMD(Single Instruction Multiple Data)アーキテクチャを採用したプロセッサに、周波数間引き(DIF:Decimation In Frequency)型のFFT計算を実行させるためのプログラム例が開示されている。
また、特許文献1には、2つの複素数の乗算(複素乗算)を行う複素乗算ユニットをSIMDアーキテクチャのマイクロプロセッサ内に配置するとともに、当該複素演算ユニットに複素乗算を計算させるための特殊命令を定義し、当該特殊命令を使用することで複素乗算を数多く含むFFT計算を効率的に実行する技術が開示されている。
特許文献1に開示されているのと同等の複素乗算ユニット70の構成を図18に示す。図18の複素乗算ユニット70は、レジスタR3及びR4に格納されている2つの複素数X及びYを読み込み、複素数X及びYを乗算して得られる複素数ZをレジスタR5に出力する。入力データを格納するレジスタR3及びR4並びに複素乗算ユニット70の出力先レジスタであるレジスタR5は、複素乗算命令のオペランドにより指定される。
より具体的に述べると、4つの乗算器700〜703が、Xの実部XとYの実部Yの積、Xの虚部XとYの虚部Yの積、Xの実部XとYの虚部Yの積、及びXの虚部XとYの実部Yの積を計算する。乗算器700〜703の計算結果は、パイプラインラッチ710〜713に保持される。
次に減算器721が、レジスタ713に保持されたXとレジスタ712に保持されたXとの差を計算する。また、加算器720が、レジスタ711に保持されたXとレジスタ710に保持されたXとの和を計算する。つまり、減算器721の計算結果は、複素乗算後の出力Zの実部Zとなる。また、加算器720の計算結果は、複素乗算後の出力Zの虚部Zとなる。
なお、レジスタR3〜R5のレジスタ長がそれぞれ32ビットであり、複素数データX及びYの実部及び虚部がそれぞれ16ビット長である場合、複素乗算の計算精度を維持するために、複素乗算ユニット70内での演算結果は32ビット長とされる。このため、丸め回路731は、減算器721の32ビットの出力Zを16ビットに丸めてレジスタR5の下位16ビットに格納する。また、丸め回路730は、加算器720の32ビットの出力Zを16ビットに丸めてレジスタR5の上位16ビットに格納する。
Complex Fixed-Point Fast Fourier Transform Optimization for AltiVecTM、[online]、2006年10月、Freescale Semiconductor, Inc.、[2007年7月25日検索]、インターネット<URL: http://www.freescale.com/files/32bit/doc/app_note/AN2114.pdf> 特表2002−527808号公報
FFT計算の対象となる複素数データは、データメモリ(不図示)に格納され、データメモリからマイクロプロセッサ内のレジスタに読み出されて複素乗算ユニット70等の複素演算ユニットに供給される。なお、FFT計算の対象となる複素数データは、マイクロプロセッサ外部の他の装置、例えば撮像素子、マイクロフォン等の各種センサや画像処理装置などによって生成されることも多い。通常、これらの装置によって生成される複素数データの実部及び虚部の格納順序は、装置によって様々である。
本願の発明者等は、上述した複素乗算ユニット70のような複素乗算を実行する複素演算ユニットをマイクロプロセッサに設ける場合、入力される複素数データの実部及び虚部の格納順序に対するハードウェアの制約が大きく、ソフトウェアに冗長さをもたらす問題があることを見出した。
一例として、図18に示した複素乗算ユニット70において、レジスタR3及びR4に格納される複素数データX及びYの実部及び虚部の格納順序が図18と反対である場合を考える。つまり、レジスタR3及びR4の上位ビット側に実部X及びYが格納され、下位ビット側に虚部X及びYが格納される場合である。
通常、加算器720及び減算器721の加算機能及び減算機能は、減算の向きを含めてモード設定や命令種別によって選択可能である。しかし、実部及び虚部の格納順序が反転しているレジスタR3及びR4の保持データを複素乗算ユニット70に入力して演算を行うと、実部及び虚部の格納順序を反転する前のケースと同様に、丸め回路731の出力にZの実部Z現れ、丸め回路730の出力にZの虚部Zが現れる。
よって、出力レジスタR5における実部Zと虚部Zの格納順序を、入力レジスタR3及びR4の格納順序と整合させるためには、複素乗算ユニット70による演算前に予め、レジスタR3及びR4に保持された複素数データの実部と虚部のデータ配置を入れ替える処理を行うか、複素乗算ユニット70による演算後に、レジスタR5の保持データの実部及び虚部のデータ配置を入れ替える処理を行う必要がある。または、レジスタR3及びR4に複素数データを読み込む前に、データメモリ(不図示)上に保持された複素数データの実部と虚部のデータ配置を入れ替える処理が必要である。これらのレジスタ上又はデータメモリ上でのデータ配置を入れ替える処理を行うためには、冗長な命令を実行する必要がある。
本発明の第1の態様にかかるマイクロプロセッサは、命令デコード部、レジスタファイル、複素演算ユニット、及びデータ格納位置決定手段を備える。前記複素演算ユニットは、前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される第1及び第2の複素数データを用いて複素乗算を含む複素演算を実行し、当該複素演算の結果を前記レジスタファイルに向けて出力する。さらに、前記データ格納位置決定手段は、前記複素演算ユニットの出力データの実部及び虚部の前記レジスタファイル内における格納順序が、前記第1及び第2の複素数データの実部及び虚部の格納順序と一致するように、前記出力データの実部及び虚部の前記レジスタファイル内での格納位置を決定する。
なお、前記データ格納位置決定手段に相当する具体的構成の一例は、後述する発明の実施の形態1におけるセレクタ1490及び1491である。また、前記データ格納位置決定手段に相当する具体的構成の他の例は、後述する発明の実施の形態2におけるデータ選択回路26である。
このように、前記第1の態様にかかるマイクロプロセッサでは、前記データ格納位置決定手段が、前記第1及び第2の複素数データの実部及び虚部の格納順序と一致するように、前記出力データの実部及び虚部の前記レジスタファイル内での格納位置を決定する。つまり、前記第1の態様にかかるマイクロプロセッサは、前記レジスタファイル内での前記第1及び第2の複素数データの実部及び虚部の格納順序が入れ替わっても、これら第1及び第2の複素数データの格納順序に応じて、前記複素演算ユニットが出力する複素数データの実部及び虚部の前記レジスタファイル内での格納順序を変更できる。したがって、前記第1の態様にかかるマイクロプロセッサは、入力される複素数データの実部及び虚部の格納順序に対するハードウェアの制約が小さく、実部及び虚部の格納順序を入れ替えるための冗長な処理を必要としない。
本発明の第2の態様にかかるマイクロプロセッサは、命令デコード部、レジスタファイル、及び複素演算ユニットを備える。前記レジスタファイルは、第1乃至第3のレジスタを有し、前記第1のレジスタは第1の複素数データの実部及び虚部を格納可能であり、前記第2のレジスタは第2の複素数データの実部及び虚部を前記第1のレジスタと同じ順序で格納可能である。前記複素演算ユニットは、前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される複素数データを用いて複素演算を実行し、当該複素演算の結果を前記第3のレジスタに向けて出力する。さらに、前記複素演算ユニットは、それぞれが1系統の積和演算を行うことができる第1及び第2の積和演算回路によって複素乗算を実行する複素乗算器と、前記第1及び第2の積和演算回路の各々の出力先を、前記第3のレジスタの第1の領域及び前記第1の領域に隣接する第2の領域との間で入れ替える第1の選択回路とを有する。
このように構成された前記第2の態様にかかるマイクロプロセッサは、複素乗算を実行する前記第1及び第2の積和演算回路の各々の出力先を、前記第3のレジスタの第1の領域及び前記第2の領域との間で入れ替え可能である。つまり、前記第2の態様にかかるマイクロプロセッサは、前記第1及び第2のレジスタの実部及び虚部の格納順序に応じて、前記第3のレジスタにおける複素乗算後の複素数データの実部及び虚部の配列順序を入れ替えることが容易である。
本発明の第3の態様にかかるマイクロプロセッサは、命令デコード部、レジスタファイル、複素演算ユニット、格納領域選択回路、及び制御回路を備える。前記レジスタファイルは、第1乃至第3のレジスタを有し、前記第1のレジスタは第1の複素数データの実部及び虚部を格納可能であり、前記第2のレジスタは第2の複素数データの実部及び虚部を前記第1のレジスタと同じ順序で格納可能である。前記複素演算ユニットは、前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される複素数データを用いて複素演算を実行し、当該複素演算の結果を前記第3のレジスタに向けて出力する。前記格納領域選択回路は、前記複素演算ユニットの出力データの格納先を、前記第3のレジスタの第1の領域又は前記第1の領域に隣接する第2の領域との間で切り替える。また、前記制御回路は、前記第3の前記格納領域選択回路の動作を制御する。
さらに、前記第3の態様において、前記複素演算ユニットは、積和演算回路と、前記積和演算回路に入力されるデータの組み合わせを切り替える第3の選択回路とを有する。前記積和演算回路は、前記第3の選択回路の切り替え動作によって、第1の動作状態と第2の動作状態のいずれかを選択可能である。ここで、第1の動作状態は、前記第1のレジスタから供給される前記第1の複素数データの前半部分と前記第2のレジスタから供給される前記第2の複素数データの後半部分の乗算、前記第1の複素数データの後半部分と前記第2の複素数データの前半部分の乗算、及び当該2つの乗算結果の加算又は減算を実行する動作状態である。一方、第2の動作状態は、前記第1及び第2の複素数データの前半部分同士の乗算、前記第1及び第2の複素数データの後半部分同士の乗算、及び当該2つの乗算結果の加算又は減算を実行する動作状態である。そして、前記制御回路は、前記命令デコード部にてデコードされた命令に応じて、前記第3の選択回路と前記格納領域選択回路を同調させて切り替える。
このように構成された前記第3の態様にかかるマイクロプロセッサは、前記第1の動作状態とされた積和演算回路によって、前記第1及び第2の複素数データの積の虚部を演算可能であり、得られた前記第1及び第2の複素数データの積の虚部の出力先を前記格納領域選択回路によって選択可能である。また、前記第3の態様にかかるマイクロプロセッサは、前記第2の動作状態とされた積和演算回路によって、前記第1及び第2の複素数データの積の実部を演算可能であり、得られた前記第1及び第2の複素数データの積の実部の出力先を前記格納領域選択回路によって選択可能である。つまり、前記第3の態様にかかるマイクロプロセッサは、前記第1及び第2のレジスタの実部及び虚部の格納順序に応じて、前記第3のレジスタにおける複素乗算後の複素数データの実部及び虚部の配列順序を入れ替えることが容易である。
本発明により、複素乗算を含む複素演算を実行する複素演算ユニットを有するマイクロプロセッサにおいて、入力される複素数データの実部及び虚部の格納順序に対する制約を緩和し、実部及び虚部の配列順序の入れ替え処理を実行することに伴うソフトウェアの冗長性の増大を抑制することができる。
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
発明の実施の形態1.
本実施の形態にかかるマイクロプロセッサ1を図1に示す。図1は、マイクロプロセッサ1の全体構成を示すブロック図である。図1において、命令バッファ10は、命令メモリ50からフェッチされた命令を格納する一時記憶領域である。命令デコード部11は、命令バッファ10に格納された命令を読み出し、当該命令の命令種別を判定し、命令オペランドを取得する。制御部12は、命令デコードによって得られた命令種別と命令オペランドに応じて、後述するレジスタファイル13及び命令実行部14に対してデータ若しくは制御信号又はこれら両方を出力する。
レジスタファイル13は、複数のレジスタの集合である。本実施の形態では、レジスタファイル13が少なくとも5本のレジスタR0〜R5を有するものとして説明する。また、レジスタファイル13内の各レジスタのレジスタ長は、それぞれ64ビットとする。なお、ここでのレジスタファイル13が有するレジスタ数及びこれらのレジスタ長が一例にすぎないことはもちろんである。レジスタR0〜R5を含むレジスタファイル13内のレジスタは、命令実行部14の入力データ及び出力データを格納するアキュムレータ、あるいはデータメモリ51へアクセスする時のアドレス指定を行うためのアドレスレジスタなど、様々な用途に使用可能である。
命令実行部14は、命令デコード部11によりデコードされた命令に対応する処理を実行する。具体的には、命令実行部14は、複数の演算ユニットを有し、制御部12の制御に従って、デコードされた命令を各命令に適した演算ユニットにて実行する。例えば、加算命令、積和演算命令等の演算処理の実行を指示する命令がデコードされた場合、命令実行部14は、レジスタファイル13から供給されるデータを用いて指定された演算処理を実行する。また、例えば、ロード命令又はストア命令がデコードされた場合、命令実行部14は、データメモリ51のアクセス先アドレスを生成してデータメモリ51にアクセスする。命令実行部14は、浮動小数点演算ユニット、整数演算ユニット、ロード/ストアユニット等のほか、例えば、FFT処理などの特定の演算処理に特化した専用の実行ユニットを有してもよい。
本実施の形態の命令実行部14は、図2に示すように、少なくとも2つの複素演算ユニット140及び150を有する。図2において、IN1[0]〜IN1[3]は、レジスタファイル13から命令実行部14のIN1端子に供給される64ビットデータであり、IN1[0]〜IN1[3]の各々は16ビット長である。同様に、IN2[0]〜IN2[3]は、レジスタファイル13から命令実行部14のIN2端子に供給される64ビットデータであり、IN2[0]〜IN2[3]の各々は16ビット長である。OUT[0]〜OUT[3]は、命令実行部14からレジスタファイル13に出力される64ビットデータであり、OUT[0]〜OUT[3]の各々は16ビット長である。複素演算ユニット140及び150が実行する複素演算の内容及び複素演算ユニット140及び150の具体的な構成例については後述する。
なお、図1では、論理的な構成単位である命令メモリ50及びデータメモリ51を示しているが、これらはそれぞれ、ROM(Read Only Memory)、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)若しくはフラッシュメモリ、又はこれらの組合せ等により構成される。
続いて以下では、命令実行部14に含まれる複素演算ユニット140及び150が実行する複素演算の内容及びこれらの具体的な構成例について説明する。本実施の形態では、4点複素FFTに関する基数2のバタフライ演算を、複素演算ユニット140及び150に実行させる場合について説明する。
4点複素FFTに関する基数2のバタフライ演算のフローグラフを図3に示す。なお、図3は、周波数間引き型(DIF:Decimation In Frequency)のバタフライ演算の例である。つまり、4個の入力複素数データをX0〜X3とした場合、X0及びX2をデータ対とするバタフライ演算を実行することで出力データY0及びY2が得られる。同様に、X1及びX3をデータ対とするバタフライ演算を実行することで出力データY1及びY3が得られる。出力データY0〜Y3は、以下の(1)〜(4)式により表される。なお、W0及びW1は、回転因子(twiddle factor)である。
Y0=X0+X2 ・・・・・・・(1)
Y1=X1+X3 ・・・・・・・(2)
Y2=(X0−X2)W0 ・・・(3)
Y3=(X1−X3)W1 ・・・(4)
図3に示したバタフライ演算を2つの複素演算ユニット140及び150により実行する実行手順について図4を用いて説明する。まず、STEP1では、命令デコード部11において加算命令がデコードされたことに応じて、複素演算ユニット140及び150が(1)及び(2)式に相当する複素加算を実行し、Y0及びY1を出力する。次に、STEP2では、減算命令がデコードされたことに応じて、複素演算ユニット140及び150が、(3)及び(4)式の一部に当たる複素減算を実行し、T0及びT1を出力する。ここで、T0及びT1は、以下の(5)及び(6)式により表される。STEP3では、複素乗算命令がデコードされたことに応じて、複素演算ユニット140及び150が、STEP2で得られたT0及びT1と回転因子W0及びW1との複素乗算を実行し、Y2及びY3を出力する。
T0=X0−X2 ・・・・・・・(5)
T1=X1−X3 ・・・・・・・(6)
次に、図4に示した複素加算、複素減算及び複素乗算の各処理を選択的に実行する複素演算ユニット140及び150の具体的な構成例について説明する。図5は、複素演算ユニット140の構成例を示すブロック図である。複素演算ユニット150についても複素演算ユニット140と同一構成とすればよい。図5の構成例は、パイプライン構造を採用しており、複素加算、複素減算及び複素乗算の各処理を3ステージパイプラインによって実行する。なお、図5に示す複素演算ユニット140の構成が一例に過ぎないことはもちろんあり、当業者であれば、図5及び後述する説明並びに技術常識に基づいて様々な変形が可能である。
図5において、加減算器1400は、IN2端子に供給される16ビットデータIN2[1]と、IN1端子に供給される16ビットデータIN1[1]を加算又は減算する。加減算器1400の演算内容は、制御部12から供給される2ビット制御信号ADD_FNCL[1:0]によって制御される。加減算器1400の動作ロジックを図6(a)及び(b)に示す。加減算器1400は、図6(b)のテーブルに従って、A+B、A−B、B−Aの3通りの計算を実行する。
加減算器1401は、IN2端子に供給される16ビットデータIN2[0]と、IN1端子に供給される16ビットデータIN1[0]を加算又は減算する。加減算器1401の演算内容は、上述した加減算器1400と同様に、制御部12から供給される2ビット制御信号ADD_FNCR[1:0]によって制御される。
シフト回路1410は、加減算器1400の出力を1/2倍するスケーリング処理を行う回路であり、加減算器1400の出力データの下位15ビットを右に1ビットシフトさせて出力する。シフト回路1411は、加減算器1401の出力に対してシフト回路1410と同様のビットシフトを行う。
セレクタ1420は、加減算器1400の出力データ及びシフト回路1410の出力データを入力し、制御部12から供給される1ビット制御信号S_SCALEが"0"であるときに加減算器1400の出力データを選択して出力し、S_SCALEが"1"であるときにシフト回路1410の出力データを選択して出力する。
セレクタ1421は、加減算器1401の出力データ及びシフト回路1411の出力データに対して、セレクタ1420と同様の選択動作を実行する。セレクタ1420及び1421の出力は、パイプラインラッチ1440及び1445にそれぞれ保持される。
乗算器1430は、IN2端子に供給される16ビットデータIN2[0]と、IN1端子に供給される16ビットデータIN1[1]を乗算する。乗算器1431は、IN2端子に供給される16ビットデータIN2[1]と、IN1端子に供給される16ビットデータIN1[0]を乗算する。乗算器1432は、IN2端子に供給される16ビットデータIN2[1]と、IN1端子に供給される16ビットデータIN1[1]を乗算する。乗算器1433は、IN2端子に供給される16ビットデータIN2[0]と、IN1端子に供給される16ビットデータIN1[0]を乗算する。
乗算器1430〜1433の出力は、パイプラインラッチ1441〜1444にそれぞれ保持される。なお、計算精度を維持するために、乗算器1430〜1433の出力は32ビット長とされるため、パイプラインラッチ1441〜1444のレジスタ長はそれぞれ32ビットである。
次に、第2パイプラインステージにおいて、加減算器1450は、パイプラインラッチ1441及び1442から2つの32ビットデータを入力して加算又は減算を行う。加減算器1450の演算内容は、上述した加減算器1400と同様に、制御部12から供給される2ビット制御信号MAD_FNCL[1:0]によって制御される。
また、加減算器1451は、パイプラインラッチ1443及び1444から2つの32ビットデータを入力して加算又は減算を行う。加減算器1451の演算内容は、上述した加減算器1400と同様に、制御部12から供給される2ビット制御信号MAD_FNCR[1:0]によって制御される。
丸め回路1460は、加減算器1450の出力データを32ビットから16ビットに丸め、16ビット長のパイプラインラッチ1471に出力する。同様に、丸め回路1461は、加減算器1451の出力データを32ビットから16ビットに丸め、16ビット長のパイプラインラッチ1472に出力する。
パイプラインラッチ1470〜1473は、パイプラインラッチ1440、丸め回路1460、丸め回路1461、及びパイプラインラッチ1445の出力データをラッチする。
なお、図5及び上述した説明から分かるように、乗算器1430及び1431並びに加減算器1460は、1系統の積和演算を実行する第1の積和演算回路を構成している。乗算器1432及び1433並びに加減算器1461もまた、1系統の積和演算を実行する第2の積和演算回路を構成している。そして、これら2つの積和演算回路によって2つの複素数データの乗算を行うことができる。
最後に、第3パイプラインステージにおいて、セレクタ1480は、パイプラインラッチ1470及び1471の出力データを入力し、制御部12から供給される1ビット制御信号S_MADが"0"であるときにパイプラインラッチ1470の出力データを選択して出力し、S_MADが"1"であるときにパイプラインラッチ1471の出力データを選択して出力する。つまり、セレクタ1480は、複素加減算の結果(厳密には、複素加減算の結果の実部又は虚部のいずれか)及び複素乗算の結果(厳密には、複素乗算の結果の虚部)のどちらを後段の回路に出力するかを選択する。
また、セレクタ1481は、パイプラインラッチ1472及び1473の出力データを入力し、制御部12から供給される1ビット制御信号S_MADが"0"であるときにパイプラインラッチ1473の出力データを選択して出力し、S_MADが"1"であるときにパイプラインラッチ1472の出力データを選択して出力する。つまり、セレクタ1481は、複素加減算の結果(厳密には、複素加減算の結果の実部又は虚部のいずれか)及び複素乗算の結果(厳密には、複素乗算の結果の実部)のどちらを後段の回路に出力するかを選択する。
セレクタ1490は、セレクタ1480及び1481の出力データを入力し、制御部12から供給される1ビット制御信号S_OSWPが"0"であるときにセレクタ1480の出力データを選択して出力し、S_OSWPが"1"であるときにセレクタ1481の出力データを選択して出力する。
セレクタ1491も、セレクタ1480及び1481の出力データを入力し、セレクタ1490と同様の動作を実行する。ただし、セレクタ1490と1491の動作は、相補的である。つまり、セレクタ1490が複素乗算結果の虚部を出力する場合に、セレクタ1491が複素乗算結果の実部を出力する。また、セレクタ1490が複素乗算結果の実部を出力する場合に、セレクタ1491が複素乗算結果の虚部を出力する。
つまり、セレクタ1490及び1491は、セレクタ1480から複素乗算結果の虚部が出力され、セレクタ1481から複素乗算結果の実部が出力される場合に、OUT[0]及びOUT[1]に出力される複素演算結果の実部及び虚部のデータ順序を入れ替える回路である。
上述したように、図5の構成例では、加減算器1400が16ビット長の2つの入力データの加算又は減算を行った後に、17ビット長の加減算結果を1/2倍にスケーリングすることで16ビット長の加減算結果を得る構成としている。これにより、加減算器1400に対する2つの入力データを予め1/2倍にスケーリングした後に加算又は減算を行う場合に比べて、計算精度の低下を抑えることができる。加減算器1401も同様である。
また、図5の構成例では、加減算器1450が、乗算器1430及び1431によって得られた2つの32ビット長の乗算結果データ同士を加算又は減算した後に、丸め回路1460が32ビット長から16ビット長への丸め処理を行う構成としている。これにより、乗算器1430及び1431によって得られた2つの32ビット長の乗算結果データを予め16ビットに丸めた後に、これら2つの乗算結果データの加減算を行う場合に比べて、計算精度の低下を抑えることができる。加減算器1451及び丸め回路1461も同様である。
続いて以下では、図5に示した複素演算ユニット140及びこれと同一の構成を有する複素演算ユニット150に、図4に示したバタフライ演算の実行手順(STEP1〜3)を実行させる手順について説明する。図7は、図4に示したSTEP1〜3を、複素演算ユニット140及び150の具体的な構成要素を用いて書き改めたものである。
まず、STEP1では、命令デコード部11において加算命令(VADDS命令)がデコードされたことに応じて、加減算器1400及び1401並びに加減算器1500及び1501が、(1)及び(2)式に相当する複素加算を実行し、Y0及びY1の実部及び虚部を出力する。加減算器1500及び1501は、複素演算ユニット140と同一構成である複素演算ユニット150に含まれている演算器であって、それぞれ加減算器1400及び1401に対応する。また、加算命令であるVADDS命令の第1及び第2オペランドに指定されたレジスタR0及びR1は、加算対象となる4つの複素数データX0〜X3の供給元となるレジスタである。また、VADDS命令の第3オペランドに指定されたレジスタR2は、複素演算ユニット140及び150による加算結果Y0及びY1が出力されるレジスタである。
STEP2では、命令デコード部11において減算命令(VSUBS命令)がデコードされたことに応じて、加減算器1400及び1401並びに加減算器1500及び1501が、(3)及び(4)式の一部に当たる複素減算を実行し、T0及びT1を出力する。減算命令であるVSUBS命令の第1及び第2オペランドに指定されたレジスタR0及びR1は、減算対象となる4つの複素数データX0〜X3の供給元となるレジスタである。また、VSUBS命令の第3オペランドに指定されたレジスタR3は、複素演算ユニット140及び150による減算結果T0及びT1が出力されるレジスタである。
STEP3では、命令デコード部11において複素乗算命令(VCMUL命令)がデコードされたことに応じて、複素演算ユニット140及び150が、STEP2で得られたT0及びT1と回転因子W0及びW1との複素乗算を実行し、Y2及びY3を出力する。なお、乗算器1530〜1533と加減算器1550及び1551は、複素演算ユニット150に含まれている演算器であって、それぞれ乗算器1430〜1433と加減算器1450及び1451に対応する。また、複素乗算命令であるVCMUL命令の第1及び第2オペランドに指定されたレジスタR3及びR4は、複素乗算の対象となる4つの複素数データT0、T1、W0及びW1の供給元となるレジスタである。また、VCMUL命令の第3オペランドに指定されたレジスタR5は、複素演算ユニット140及び150による複素乗算結果Y2及びY3が出力されるレジスタである。
図7のSTEP1〜3の実行過程において、複素演算ユニット140及び150に含まれる複数の加減算器及び複数のセレクタの動作は、制御部12から命令実行部14に供給される制御信号群によって制御される。図8(a)のテーブルは、図7に示したVADDS命令、VSUBS命令及びVCMUL命令がデコードされたことに応じて制御部12から命令実行部14に供給される制御信号群の組合せを示している。
例えば、STEP3でVCMUL命令がデコードされた場合には、加減算器1451に対する制御信号MAD_FNCR[1:0]が"01"に設定され、セレクタ1490及び1491に対する制御信号S_OSWPが"0"に設定される。なお、加減算器1451の動作ロジックは、図6(b)に示した加減算器1400と同一である。上述したようにセレクタ1490及び1491は、複素乗算結果の実部及び虚部の出力順序を切り替える回路である。つまり、制御部12が、セレクタ1490及び1491、及びこれらに対応する複素演算ユニット150内の2つのセレクタの動作を制御することで、レジスタR5における複素乗算結果Y2及びY3の実部及び虚部の格納順序を、レジスタR0及びR1におけるバタフライ演算の対象データX0〜X3の実部及び虚部の格納順序と同一にすることができる。
セレクタ1490、1491、1590及び1591によって複素乗算結果Y2及びY3の実部及び虚部の出力順序を切り替えることの効果を説明するため、レジスタR0及びR1におけるX0〜X3の実部及び虚部の格納順序が図7と比べて反対である場合のSTEP1〜3の実行手順を図9に示す。
図7と図9とでは、STEP3の複素乗算命令(VCMUL命令)を実行する際に、加減算器1450、1451、1550及び1551の減算の向きが異なる。さらに、図7と図9とでは、STEP3を実行する際に、図示していないセレクタ1490、1491、1590及び1591の選択先が異なる。すなわち、図7では、加減算器1451の出力(厳密には丸め回路1461の出力)がレジスタR5の最下位の16ビット領域510に格納され、加減算器1450の出力(厳密には丸め回路1461の出力)がレジスタR5の領域510に隣接する16ビット領域511に格納される。これに対して、図9では、加減算器1450の出力がレジスタR5の最下位の16ビット領域510に格納され、加減算器1451の出力が領域511に格納される。同様に、図7では、加減算器1551の出力がレジスタR5の16ビット領域511に格納され、加減算器1550の出力がレジスタR5の最上位の16ビット領域512に格納される。これに対して、図9では、加減算器1550の出力がレジスタR5の16ビット領域511に格納され、加減算器1551の出力が領域512に格納される。
図9に示したVADDS命令、VSUBS命令及びVCMUL命令がデコードされたことに応じて制御部12から命令実行部14に供給される制御信号群の組合せを図8(b)に示す。STEP3でVCMUL命令がデコードされた場合には、加減算器1451に対する制御信号MAD_FNCR[1:0]が"10"又は"11"に設定され、セレクタ1490及び1491に対する制御信号S_OSWPが"1"に設定される。
なお、図7乃至9では、複素乗算命令の命令コードは、入力データの実部及び虚部の格納順序に関わらず同一としている。この場合、制御部12に対する動作モード設定によって制御信号MAD_FNCR[1:0]及びS_OSWPの値を切り替えればよい。しかしながら、演算対象の複素数データの実部及び虚部の格納順序に応じて、セレクタ1490、1491、1590及び1591の選択先を変更する方法は、特に限定されない。例えば、2つの複素乗算命令−0及び複素乗算命令−1を定義し、2つの複素乗算命令のどちらがデコードされたかに応じて、制御部12が、制御信号MAD_FNCR[1:0]及びS_OSWPの値を切り替えてもよい。
上述したように、本実施の形態にかかるマイクロプロセッサ1は、複素乗算を含む複素演算を実行する複素演算ユニット140及び150を有している。さらに、複素演算ユニット140及び150は、1490、1491、1590及び1591の動作によって、複素演算結果の実部及び虚部の出力順序を変更できる。これにより、マイクロプロセッサ1は、データメモリ51内又はレジスタファイル13内における複素演算対象データX0〜X3の実部及び虚部の格納順序が入れ替わっても、複素演算対象データX0〜X3の実部及び虚部の格納順序に一致するように、複素演算結果データY1〜Y4の実部及び虚部のデータ格納位置を決定することができる。
したがって、マイクロプロセッサ1は、入力される複素数データの実部及び虚部の格納順序に対するハードウェアの制約が小さく、実部及び虚部の格納順序を入れ替えるための冗長な処理を必要とせず、実部及び虚部の配列順序の入れ替え処理を実行することに伴うソフトウェアの冗長性の増大を抑制することができる。
発明の実施の形態2.
本実施の形態にかかるマイクロプロセッサ2の構成を図10に示す。上述したマイクロプロセッサ1と比べると、マイクロプロセッサ2は、命令実行部24に含まれる複素演算ユニットの構成が命令実行部14と相違する。また、マイクロプロセッサ2は、命令実行部24の出力とレジスタファイル13との間にデータ選択回路26を有している。データ選択回路26の動作は、制御部22によって制御される。
命令実行部24は、図11に示すように、少なくとも2つの複素演算ユニット240及び250を有する。複素演算ユニット240の構成例を図12に示す。なお、複素演算ユニット250も複素演算ユニット240と同様に構成すればよい。図12の複素演算ユニット240の構成例は、図5に示した複素演算ユニット140の構例と比べて、乗算器1432、1433及び加減算器1450から構成される第2の積和演算回路、丸め回路1461、並びにこれらの前後に配置されたパイプラインラッチ1443、1444及び1472が撤廃されている。また、図12の複素演算ユニット240の構成例では、出力データの順序を入れ替えるためのセレクタ1490及び1491も撤廃されている。
一方、複素演算ユニット240は、乗算器1430及び1431に対する入力データを切り替えるセレクタ2400及び2401を有する。セレクタ2400は、IN1端子に供給される16ビットデータIN1[0]及びIN1[1]を入力し、制御回路22から供給される1ビット制御信号S_ISELが"0"であるときにIN1[1]を選択して出力し、S_ISELが"1"であるときにIN1[0]を選択して出力する。セレクタ2401は、16ビットデータIN1[0]及びIN1[1]を入力し、制御回路22から供給される1ビット制御信号S_ISELが"0"であるときにIN1[0]を選択して出力し、S_ISELが"1"であるときにIN1[1]を選択して出力する。
つまり、セレクタ2400及び2401は、互いに相補的に動作し、一方がIN1[0]を選択する場合にもう一方がIN[0]を選択する。セレクタ2400及び2401を設けることによって、複素演算ユニット240は、図5に示した複素演算ユニット140内が並行して実行していた2つの積和演算を、乗算器1430及び1431並びに加減算器1450から構成される第1の積和演算回路によって選択的に実行することができる。
次に、データ選択回路26は、命令実行部24の64ビット長の出力データを入力すると共に、命令実行部24の出力データの格納先に指定されたレジスタに保持されていた64ビットデータをレジスタファイル13から入力する。そして、データ選択回路26は、これら2つのデータをマージして得られる64ビットデータを、命令実行部24の出力データの格納先に指定されたレジスタに格納する。データ選択回路26によるデータマージは、制御部22から供給される制御信号に応じて行われる。
データ選択回路26の構成例を図13に示す。図13において、IN1[0]〜IN1[3]は、データ選択回路26のIN1端子に供給される命令実行部24から出力された64ビットデータであり、IN1[0]〜IN1[3]の各々は16ビット長である。IN2[0]〜IN2[3]は、レジスタファイル13からデータ選択回路26のIN2端子に供給される64ビットデータであり、IN2[0]〜IN2[3]の各々は16ビット長である。
セレクタ260は、16ビットデータであるIN1[0]及びIN2[0]を入力し、制御回路22から供給される制御信号WS_EVENが"0"であるときにIN2[0]を選択して出力し、WS_EVENが"1"であるときにIN1[0]を選択して出力する。セレクタ261は、16ビットデータであるIN1[1]及びIN2[1]を入力し、制御回路22から供給される制御信号WS_ODDが"0"であるときにIN2[1]を選択して出力し、WS_ODDが"1"であるときにIN1[1]を選択して出力する。セレクタ262は、セレクタ260と同様に制御信号WS_EVENに応じて動作し、IN1[2]又はIN2[2]を選択的に出力する。また、セレクタ263は、セレクタ261と同様に制御信号WS_ODDに応じて動作し、IN1[3]又はIN2[3]を選択的に出力する。制御信号WS_EVEN及びWS_ODDを異なる値に設定されると、データ選択回路26は、レジスタファイル13に保持されていたデータと、命令実行部24の出力データのマージを実行する。
続いて以下では、図12に示した複素演算ユニット240及びこれと同一の構成を有する複素演算ユニット250に、図4に示したバタフライ演算の実行手順(STEP1〜3)を実行させる手順について説明する。図14及び15は、図4に示したSTEP1〜3を、複素演算ユニット240及び250の具体的な構成要素を用いて書き改めたものである。
図14に示した加算命令(VADDS命令)によるSTEP1の実行及び減算命令(VSUBS命令)によるSTEP2の実行は、図7に示した発明の実施の形態1にかかる命令実行部14によるものと同様である。
一方、図15に示した2つの命令、つまりVCMULRE命令及びVCMULIM命令によるSTEP3の実行は、図7に示した命令実行部14によるものとは異なる。VCMULRE命令は、複素乗算結果Y2及びY3の実部を求める積和演算の実行を指示する命令であり、VCMULIM命令は、複素乗算結果Y2及びY3の虚部を求める積和演算の実行を指示する命令である。つまり、命令実行部24は、2つの積和演算命令、つまりVCMULRE命令及びVCMULIM命令に応じて、2つの積和演算を逐次実行することで、2つの複素乗算を実行する。図15の例の場合、命令実行部24は、STEP3−1において、VCMULRE命令に応じて積和演算を実行し、Y2及びY3の実部を生成する。また、命令実行部24は、STEP3−2において、VCMULIM命令に応じて積和演算を実行し、Y2及びY3の虚部を生成する。
図14及び15に示したSTEP1〜3の実行過程において、複素演算ユニット240及び250に含まれる複数の加減算器及び複数のセレクタの動作は、制御部22から命令実行部24に供給される制御信号群によって制御される。また、データ選択回路26の動作も制御部22によって制御される。図16(a)のテーブルは、図14及び15に示したVADDS命令、VSUBS命令、VCMULRE命令、及びVCMULIM命令がそれぞれデコードされた場合に、制御部22から命令実行部24及びデータ選択回路26に供給される制御信号群の組合せを示している。
例えば、STEP1でVADDS命令がデコードされた場合、加減算器1400及び1500に対する制御信号AD_FNCL[1:0]と、加減算器1401及び1501に対する制御信号AD_FNCR[1:0]が、ともに"00"に設定される。併せて、加算結果のスケーリングを指示する制御信号S_SCALEが"1"に設定される。さらに、命令実行部24から出力される64ビットデータOUT[0]〜[3]を全てレジスタR2に格納するため、データ選択回路26に対する制御信号S_ODD及びS_EVENは共に"1"に設定される。
また、STEP3−1でVCMULRE命令がデコードされた場合、セレクタ2400及び2401に対する制御信号I_SELが"0"に設定され、Y2の実部Y2の計算に必要なデータが乗算器1430及び1431に供給される。なお、セレクタ2400及び2401に対応する複素演算ユニット250内の2つのセレクタも、セレクタ2400及び2401と同様に制御信号I_SELに応じて動作し、Y3の実部Y3の計算に必要なデータを乗算器1530及び1531に供給する。
さらに、STEP3−1では、制御信号S_MADが"1"に設定されることにより、OUT[0]及び[1]は共にY2の実部Y2となる。同様に、OUT[2]及び[3]は共にY3の実部Y3となる。さらに、データ選択回路26に対する制御信号S_ODDが"0"、S_EVENが"1"に設定されることにより、レジスタR5の最下位の16ビット領域510にY2の実部Y2が格納され、レジスタR5の16ビット領域512にY3の実部Y3が格納される。
一方、STEP3−2では、制御信号S_MADが"1"に設定されることにより、OUT[0]及び[1]は共にY2の虚部Y2となる。同様に、OUT[2]及び[3]は共にY3の虚部Y3となる。さらに、データ選択回路26に対する制御信号S_ODDが"1"、S_EVENが"0"に設定されることにより、レジスタR5の16ビット領域511にY2の虚部Y2が格納され、レジスタR5の最上位の16ビット領域513にY3の虚部Y3が格納される。つまり、レジスタR5に格納された複素乗算結果Y2及びY3の実部及ぶ虚部の格納順序は、レジスタR3及びR4に格納された複素乗算の対象データT0、T1、W0及びW1の実部及び虚部の格納順序と同一になる。
次に、レジスタR0及びR1におけるX0〜X3の実部及び虚部の格納順序が図7と比べて反対である場合のSTEP3−1及び3−2の実行手順を図17に示す。
図15と図17とでは、STEP3−1の複素乗算命令(VCMULRE命令)を実行する際に、加減算器1450及び1550の減算の向きが異なる。また、図15と図17とでは、図示していないデータ選択回路26によるY2の実部Y2及びY3の実部Y3の出力先が異なる。すなわち、図17では、Y2の実部Y2がレジスタR5の16ビット領域511に格納され、Y3の実部Y3がレジスタR5の最上位の16ビット領域513に格納される。
さらに、図15と図17とでは、STEP3−2の複素乗算命令(VCMULIM命令)を実行する際に、図示していないデータ選択回路26によるY2の虚部Y2及びY3の虚部Y3の出力先が異なる。すなわち、図17では、Y2の虚部Y2がレジスタR5の最下位の16ビット領域510に格納され、Y3の虚部Y3がレジスタR5の16ビット領域512に格納される。
図17に示したVCMULRE命令及びVCMULIM命令がそれぞれデコードされた場合に、制御部22から命令実行部24及びデータ選択回路26に供給される制御信号群の組合せを図16(b)に示す。STEP3−1でVCMULRE命令がデコードされた場合には、加減算器1450に対する制御信号MAD_FNC[1:0]が"10"又は"11"に設定され、データ選択回路26に対する制御信号S_ODDが"1"に設定され、S_EVENが"0"に設定される。一方、STEP3−2でVCMULIM命令がデコードされた場合には、セレクタ2400及び2401に対する制御信号S_ISELが"1"に設定され、データ選択回路26に対する制御信号S_ODDが"0"に設定され、S_EVENが"1"に設定される。
このように、制御部22が、データ選択回路26の動作を制御することで、レジスタR5における複素乗算結果Y2及びY3の実部及び虚部の格納順序を、レジスタR0及びR1におけるバタフライ演算の対象データX0〜X3の実部及び虚部の格納順序と同一にすることができる。つまり、マイクロプロセッサ2は、上述したマイクロプロセッサ1と同様に、データメモリ51内又はレジスタファイル13内における複素演算対象データX0〜X3の実部及び虚部の格納順序が入れ替わっても、複素演算対象データX0〜X3の実部及び虚部の格納順序に一致するように、複素演算結果データY1〜Y4の実部及び虚部のデータ格納位置を決定することができる。
したがって、マイクロプロセッサ2も、入力される複素数データの実部及び虚部の格納順序に対するハードウェアの制約が小さく、実部及び虚部の格納順序を入れ替えるための冗長な処理を必要とせず、実部及び虚部の配列順序の入れ替え処理を実行することに伴うソフトウェアの冗長性の増大を抑制することができる。
なお、発明の実施の形態1及び2では、DIF型のバタフライ演算をマイクロプロセッサ1及び2に実行させる具体例について説明した。しかしながら、DIF型のバタフライ演算は、複素乗算を含む複素演算の具体例の1つに過ぎないことはもちろんである。例えば、時間間引き(DIT:Decimation In Time)型のバタフライ演算をマイクロプロセッサ1及び2に実行させてもよい。
また、発明の実施の形態1及び2では、マイクロプロセッサ1及び2の外部に命令メモリ50及びデータメモリ51が存在する構成を示した。しかしながら、例えば、マイクロプロセッサ1及び2は、命令メモリ50若しくはデータメモリ51又はこれら両方を含めて1チップに集積されたマイクロプロセッサとしてもよい。つまり、本発明は、図1に示した具体的な実装に限られず、様々な実装形態のマイクロプロセッサに適用可能である。
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
発明の実施の形態1のマイクロプロセッサのブロック図である。 発明の実施の形態1のマイクロプロセッサが有する命令実行部のブロック図である。 4点FFTのバタフライ演算を示す図である。 4点FFTのバタフライ演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかる命令実行部が有する複素演算ユニットの構成例を示図である。 発明の実施の形態1にかかる複素演算ユニットが有する加減算器の動作ロジックを示す図である。 発明の実施の形態1にかかる複素演算ユニットによるバタフライ演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかる複素演算ユニットによってバタフライ演算を実行する際の制御信号の状態を示すテーブルである。 発明の実施の形態1にかかる複素演算ユニットによるバタフライ演算の実行手順を説明するための概念図である。 発明の実施の形態2のマイクロプロセッサのブロック図である。 発明の実施の形態2のマイクロプロセッサが有する命令実行部のブロック図である。 発明の実施の形態2にかかる命令実行部が有する複素演算ユニットの構成例を示図である。 発明の実施の形態2のマイクロプロセッサが有するデータ選択回路のブロック図である。 発明の実施の形態1にかかる複素演算ユニットによるバタフライ演算の実行手順を説明するための概念図である。 発明の実施の形態1にかかる複素演算ユニットによるバタフライ演算の実行手順を説明するための概念図である。 発明の実施の形態2にかかる複素演算ユニットによってバタフライ演算を実行する際の制御信号の状態を示すテーブルである。 発明の実施の形態1にかかる複素演算ユニットによるバタフライ演算の実行手順を説明するための概念図である。 背景技術に示す複素乗算ユニットのブロック図である。
符号の説明
1、2 マイクロプロセッサ
10 命令バッファ
11 命令デコード部
12 制御部
13 レジスタファイル
14 命令実行部
26 データ選択回路
140、150 複素演算ユニット
240、250 複素演算ユニット
260〜263 セレクタ
1400、1401 加減算器
1410、1411 シフト回路
1420、1421 セレクタ
1430〜1433 乗算器
1440〜1445 パイプラインラッチ
1450、1451 加減算器
1460、1461 丸め回路
1470〜1473 パイプラインラッチ
1480〜1481 セレクタ
1490〜1491 セレクタ
1500、1501 加減算器
1530〜1533 乗算器
1550、1551 加減算器

Claims (8)

  1. 命令をデコードする命令デコード部と、
    複数のレジスタを含むレジスタファイルと、
    前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される第1及び第2の複素数データを用いて複素乗算を含む複素演算を実行し、当該複素演算の結果を前記レジスタファイルに向けて出力する複素演算ユニットと、
    前記複素演算ユニットの出力データの実部及び虚部の前記レジスタファイル内における格納順序が、前記第1及び第2の複素数データの実部及び虚部の格納順序と一致するように、前記出力データの実部及び虚部の前記レジスタファイル内での格納位置を決定するデータ格納位置決定手段と、
    を備えるマイクロプロセッサ。
  2. 命令をデコードする命令デコード部と、
    第1乃至第3のレジスタを有し、前記第1のレジスタは第1の複素数データの実部及び虚部を格納可能であり、前記第2のレジスタは第2の複素数データの実部及び虚部を前記第1のレジスタと同じ順序で格納可能であるレジスタファイルと、
    前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される前記第1及び第2複素数データを用いて複素演算を実行し、当該複素演算の結果を前記第3のレジスタに向けて出力する複素演算ユニットとを備え、
    前記複素演算ユニットは、
    それぞれが1系統の積和演算を行うことができる第1及び第2の積和演算回路によって複素乗算を実行する複素乗算器と、
    前記第1及び第2の積和演算回路の各々の出力先を、前記第3のレジスタの第1の領域及び前記第1の領域に隣接する第2の領域との間で入れ替え可能な第1の選択回路とを有する、
    マイクロプロセッサ。
  3. 前記第1の積和演算回路は、前記第1のレジスタから供給される前記第1の複素数データの前半部分と前記第2のレジスタから供給される前記第2の複素数データの後半部分の乗算、前記第1の複素数データの後半部分と前記第2の複素数データの前半部分の乗算、及び当該2つの乗算結果の加算又は減算を実行し、
    前記第2の積和演算回路は、前記第1及び第2の複素数データの前半部分同士の乗算、前記第1及び第2の複素数データの後半部分同士の乗算、及び当該2つの乗算結果の加算又は減算を実行する、請求項2に記載のマイクロプロセッサ。
  4. 前記複素演算ユニットは、前記第3のレジスタの前記第1の領域にデータを出力する第1の出力端子と、前記第2の領域にデータを出力する第2の出力端子とを備え、
    前記第1の選択回路は、前記第1及び第2の積和演算回路と前記第1及び第2の主力端子との間の接続関係を入れ替え可能である、請求項2又は3に記載のマイクロプロセッサ。
  5. 前記複素演算ユニットは、複素加算又は複素減算を実行可能な加減算器をさらに有し、
    前記第1及び第2のソースレジスタから前記複素乗算器及び前記加減算器に対して、前記第1及び第2の複素数データが並行して供給され、
    第2の選択回路が、前記複素乗算器及び前記加減算器の出力側に設けられており、
    前記第2の選択回路は、前記命令デコード部によってデコードされた命令に基づいて動作し、デコードされた命令が複素乗算命令であれば前記複素乗算器の出力データを選択して出力し、デコードされた命令が複素加算又は複素減算を行うための命令であれば前記加減算器の出力データを選択して出力する、請求項2乃至4のいずれか1項に記載のマイクロプロセッサ。
  6. 命令をデコードする命令デコード部と、
    第1乃至第3のレジスタを有し、前記第1のレジスタは第1の複素数データの実部及び虚部を格納可能であり、前記第2のレジスタは第2の複素数データの実部及び虚部を前記第1のレジスタと同じ順序で格納可能であるレジスタファイルと、
    前記命令デコード部によってデコードされる命令に基づいて、前記レジスタファイルから供給される複素数データを用いて複素演算を実行し、当該複素演算の結果を前記第3のレジスタに向けて出力する複素演算ユニットと、
    前記複素演算ユニットの出力データの格納先を、前記第3のレジスタの第1の領域又は前記第1の領域に隣接する第2の領域との間で切り替える格納領域選択回路と、
    前記格納領域選択回路の動作を制御する制御回路とを備え、
    前記複素演算ユニットは、
    積和演算回路と、
    前記積和演算回路に入力されるデータの組み合わせを切り替える第3の選択回路とを有し、
    前記積和演算回路は、
    前記第3の選択回路の切り替え動作によって、前記第1のレジスタから供給される前記第1の複素数データの前半部分と前記第2のレジスタから供給される前記第2の複素数データの後半部分の乗算、前記第1の複素数データの後半部分と前記第2の複素数データの前半部分の乗算、及び当該2つの乗算結果の加算又は減算を実行する第1の動作状態、及び、
    前記第1及び第2の複素数データの前半部分同士の乗算、前記第1及び第2の複素数データの後半部分同士の乗算、及び当該2つの乗算結果の加算又は減算を実行する第2の動作状態のいずれかを選択可能であり、
    前記制御回路は、前記命令デコード部にてデコードされた命令に応じて、前記第3の選択回路と前記格納領域選択回路を同調させて切り替える、
    マイクロプロセッサ。
  7. 前記制御回路は、
    第1の積和演算命令がデコードされた場合に、前記積和演算回路が前記第1の動作状態となるよう前記第3の選択回路を動作させるともに、前記複素演算ユニットの出力データの格納先が前記第1の領域となるよう前記格納領域選択回路を動作させ、
    前記第1の積和演算命令とは異なる第2の積和演算命令がデコードされた場合に、前記積和演算回路が第2の動作状態となるよう前記第3の選択回路を動作させるともに、前記演算ユニットの出力データの格納先が前記第2の領域となるよう前記格納領域選択回路を動作させる、請求項6に記載のマイクロプロセッサ。
  8. 前記複素演算ユニットは、複素加算又は複素減算を実行可能な加減算器をさらに有し、
    前記第1及び第2のソースレジスタから前記積和演算器及び前記加減算器に対して、前記第1及び第2の複素数データが並行して供給され、
    第2の選択回路が、前記積和演算器及び前記加減算器の出力側に設けられており、
    前記第2の選択回路は、前記命令デコード部によってデコードされた命令に基づいて動作し、デコードされた命令が積和演算命令であれば前記積和演算器の出力データを選択して出力し、デコードされた命令が複素加算又は複素減算を行うための命令であれば前記加減算器の出力データを選択して出力する、請求項6又は7に記載のマイクロプロセッサ。
JP2007215777A 2007-08-22 2007-08-22 マイクロプロセッサ Pending JP2009048532A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007215777A JP2009048532A (ja) 2007-08-22 2007-08-22 マイクロプロセッサ
US12/194,559 US20090055455A1 (en) 2007-08-22 2008-08-20 Microprocessor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007215777A JP2009048532A (ja) 2007-08-22 2007-08-22 マイクロプロセッサ

Publications (1)

Publication Number Publication Date
JP2009048532A true JP2009048532A (ja) 2009-03-05

Family

ID=40383153

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007215777A Pending JP2009048532A (ja) 2007-08-22 2007-08-22 マイクロプロセッサ

Country Status (2)

Country Link
US (1) US20090055455A1 (ja)
JP (1) JP2009048532A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011096254A (ja) * 2009-10-30 2011-05-12 Arm Ltd 乗累算演算を実行するための装置および方法
JP2018156266A (ja) * 2017-03-16 2018-10-04 富士通株式会社 演算器および演算器の制御方法
CN108885550A (zh) * 2016-04-01 2018-11-23 Arm有限公司 复数乘法指令
JP2020527795A (ja) * 2017-07-20 2020-09-10 エイアールエム リミテッド レジスタベースの複素数処理

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8909361B2 (en) * 2008-06-19 2014-12-09 Broadcom Corporation Method and system for processing high quality audio in a hardware audio codec for audio transmission
US8880847B2 (en) * 2010-09-28 2014-11-04 Texas Instruments Incorporated Multistream prefetch buffer
US20120166511A1 (en) * 2010-12-22 2012-06-28 Hiremath Chetan D System, apparatus, and method for improved efficiency of execution in signal processing algorithms
KR20120077164A (ko) * 2010-12-30 2012-07-10 삼성전자주식회사 Simd 구조를 사용하는 복소수 연산을 위한 사용하는 장치 및 방법
US20140032626A1 (en) * 2012-07-26 2014-01-30 Verisilicon Holdings Co., Ltd. Multiply accumulate unit architecture optimized for both real and complex multiplication operations and single instruction, multiple data processing unit incorporating the same
US20160179470A1 (en) * 2014-12-23 2016-06-23 Shay Gueron Method and apparatus for performing big-integer arithmetic operations
US11023231B2 (en) * 2016-10-01 2021-06-01 Intel Corporation Systems and methods for executing a fused multiply-add instruction for complex numbers
GB2564853B (en) * 2017-07-20 2021-09-08 Advanced Risc Mach Ltd Vector interleaving in a data processing apparatus
US10795676B2 (en) 2017-09-29 2020-10-06 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US11256504B2 (en) 2017-09-29 2022-02-22 Intel Corporation Apparatus and method for complex by complex conjugate multiplication
US11074073B2 (en) 2017-09-29 2021-07-27 Intel Corporation Apparatus and method for multiply, add/subtract, and accumulate of packed data elements
US10552154B2 (en) 2017-09-29 2020-02-04 Intel Corporation Apparatus and method for multiplication and accumulation of complex and real packed data elements
US10534838B2 (en) 2017-09-29 2020-01-14 Intel Corporation Bit matrix multiplication
US10514924B2 (en) 2017-09-29 2019-12-24 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US11243765B2 (en) * 2017-09-29 2022-02-08 Intel Corporation Apparatus and method for scaling pre-scaled results of complex multiply-accumulate operations on packed real and imaginary data elements
US10795677B2 (en) 2017-09-29 2020-10-06 Intel Corporation Systems, apparatuses, and methods for multiplication, negation, and accumulation of vector packed signed values
US10802826B2 (en) 2017-09-29 2020-10-13 Intel Corporation Apparatus and method for performing dual signed and unsigned multiplication of packed data elements
US10664277B2 (en) 2017-09-29 2020-05-26 Intel Corporation Systems, apparatuses and methods for dual complex by complex conjugate multiply of signed words

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57168376A (en) * 1981-03-20 1982-10-16 Fujitsu Ltd Multiplier for complex number
JPH02181870A (ja) * 1989-01-09 1990-07-16 Mitsubishi Electric Corp ディジタル信号処理装置
JPH0371331A (ja) * 1989-08-11 1991-03-27 Nippon Telegr & Teleph Corp <Ntt> 乗算器
JPH0535774A (ja) * 1991-07-25 1993-02-12 Oki Electric Ind Co Ltd 演算回路
JP2001134556A (ja) * 1999-11-09 2001-05-18 Oki Electric Ind Co Ltd 繰り返し型乗算器とアレイ型乗算器
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
JP2003076673A (ja) * 2001-09-04 2003-03-14 Toyota Motor Corp 相関演算回路

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6272512B1 (en) * 1998-10-12 2001-08-07 Intel Corporation Data manipulation instruction for enhancing value and efficiency of complex arithmetic
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
JP4423953B2 (ja) * 2003-07-09 2010-03-03 株式会社日立製作所 半導体集積回路
US9465611B2 (en) * 2003-10-02 2016-10-11 Broadcom Corporation Processor execution unit with configurable SIMD functional blocks for complex number operations
GB2409061B (en) * 2003-12-09 2006-09-13 Advanced Risc Mach Ltd Table lookup operation within a data processing system
US7933405B2 (en) * 2005-04-08 2011-04-26 Icera Inc. Data access and permute unit

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS57168376A (en) * 1981-03-20 1982-10-16 Fujitsu Ltd Multiplier for complex number
JPH02181870A (ja) * 1989-01-09 1990-07-16 Mitsubishi Electric Corp ディジタル信号処理装置
JPH0371331A (ja) * 1989-08-11 1991-03-27 Nippon Telegr & Teleph Corp <Ntt> 乗算器
JPH0535774A (ja) * 1991-07-25 1993-02-12 Oki Electric Ind Co Ltd 演算回路
JP2001134556A (ja) * 1999-11-09 2001-05-18 Oki Electric Ind Co Ltd 繰り返し型乗算器とアレイ型乗算器
JP2001256038A (ja) * 1999-11-15 2001-09-21 Texas Instr Inc <Ti> 柔軟な乗算ユニットを有するデータ・プロセッサ
JP2003076673A (ja) * 2001-09-04 2003-03-14 Toyota Motor Corp 相関演算回路

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2011096254A (ja) * 2009-10-30 2011-05-12 Arm Ltd 乗累算演算を実行するための装置および方法
CN108885550A (zh) * 2016-04-01 2018-11-23 Arm有限公司 复数乘法指令
JP2019511056A (ja) * 2016-04-01 2019-04-18 エイアールエム リミテッド 複素数乗算命令
CN108885550B (zh) * 2016-04-01 2023-03-03 Arm有限公司 复数乘法指令
JP2018156266A (ja) * 2017-03-16 2018-10-04 富士通株式会社 演算器および演算器の制御方法
JP2020527795A (ja) * 2017-07-20 2020-09-10 エイアールエム リミテッド レジスタベースの複素数処理

Also Published As

Publication number Publication date
US20090055455A1 (en) 2009-02-26

Similar Documents

Publication Publication Date Title
JP2009048532A (ja) マイクロプロセッサ
US8443170B2 (en) Apparatus and method for performing SIMD multiply-accumulate operations
KR100909510B1 (ko) 감소된 대역폭 요건들을 갖는 행렬 곱셈
JP2009075676A (ja) マイクロプロセッサ
CN102231102B (zh) 基于余数系统的rsa密码处理方法及协处理器
JP2009527035A (ja) マイクロプロセッサにおけるパックされた加減演算
WO2015114305A1 (en) A data processing apparatus and method for executing a vector scan instruction
GB2444811A (en) Apparatus and method for performing reordering and arithmetic operations on data in a SIMD processor.
JP4349265B2 (ja) プロセッサ
JP2019511056A (ja) 複素数乗算命令
JP2011501310A (ja) 算術演算のためにマグニチュード検出を実行するための装置および方法
US9354893B2 (en) Device for offloading instructions and data from primary to secondary data path
JP2021507348A (ja) ベクトル・キャリー付き加算命令
US6675286B1 (en) Multimedia instruction set for wide data paths
US20100115232A1 (en) Large integer support in vector operations
JP2003241960A (ja) プロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法
EP1936492A1 (en) SIMD processor with reduction unit
JP5659772B2 (ja) 演算処理装置
JP4613992B2 (ja) Simd演算器、simd演算器の演算方法、演算処理装置及びコンパイラ
JP2014164659A (ja) プロセッサ
JP5813484B2 (ja) Vliwプロセッサと命令構造と命令実行方法
JP5505083B2 (ja) 情報処理装置
JP2004334297A (ja) 並列演算処理装置及び並列演算処理方法
Dam et al. RISC-V SoC with NTT-Blackbox for CRYSTALS-Kyber Post-Quantum Cryptography
JP2022131311A (ja) ベクトル演算装置、ベクトル演算方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100312

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120705

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120710

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20121106