図1は、行列演算アクセラレータ100及び高速フーリエ変換(FFT)アクセラレータ120の構成例を示す図である。行列演算アクセラレータ100は行列演算を行い、FFTアクセラレータ120は高速フーリエ変換を行う。例えば、行列演算アクセラレータ100及びFFTアクセラレータ120は、無線通信装置内に設けられる。
行列演算アクセラレータ100は、コントローラ101、入力バッファ102、演算部103、出力バッファ104、メモリコントローラ105、及びメモリ106を有する。コントローラ101は、外部から行列演算命令を入力し、行列演算命令に応じて、入力バッファ102、演算部103、出力バッファ104及びメモリコントローラ105を制御する。入力バッファ102は、第1のファーストインファーストアウト(FIFO)メモリ107及び第2のFIFOメモリ108を有する。演算部103は、複数の算出論理演算ユニット(ALU)109及びスイッチ110を有する。出力バッファ104は、第3のFIFOメモリ111及び第4のFIFOメモリ112を有する。
メモリ106には、複数の行列データが記憶されている。メモリコントローラ105は、メモリ106から行列データを読み出し、第1のFIFOメモリ107及び第2のFIFOメモリ108に出力する。第1のFIFOメモリ107及び第2のFIFOメモリ108は、それぞれ、ファーストインファーストアウトにより、行列データを複数のALU109に出力する。複数のALU109は、例えば行列の四則演算等の行列演算を行う。スイッチ110は、複数のALU109の出力データを選択的に第3のFIFOメモリ111及び第4のFIFOメモリ112に出力する。例えば、行列データが複素数データである場合、スイッチ110は、複素数データのうちの実数データ又は虚数データを選択して出力することができる。第3のFIFOメモリ111及び第4のFIFOメモリ112は、それぞれ、ファーストインファーストアウトにより、行列データをメモリコントローラ105に出力する。メモリコントローラ105は、第3のFIFOメモリ111及び第4のFIFOメモリ112の出力データをメモリ106に書き込む。
FFTアクセラレータ120は、コントローラ121、入力スイッチ122、メモリ123、バタフライ演算器124、出力スイッチ125、メモリコントローラ126、及びメモリ127を有する。コントローラ101は、外部からFFT命令を入力し、FFT命令に応じて、入力スイッチ122、メモリ123、バタフライ演算器124、出力スイッチ125、及びメモリコントローラ126を制御する。
メモリ127には、高速フーリエ変換をするためのデータが記憶されている。メモリコントローラ126は、メモリ127からデータを読み出し、入力スイッチ122に出力する。入力スイッチ122は、データの位置を入れ替えてバタフライ演算器124に出力する。メモリ123には、回転因子データWnが記憶されている。バタフライ演算器124は、入力スイッチ122から入力したデータ及びメモリ123から入力した回転因子データWnを基にバタフライ演算を行い、データを出力スイッチ125に出力する。出力スイッチ125は、データの位置を入れ替えてメモリコントローラ126に出力する。メモリコントローラ126は、出力スイッチ125の出力データをメモリ127に書き込む。
図19は、本実施形態による無線通信装置1901の構成例を示す図である。無線通信装置1901は、ベースバンド処理装置1902を有する。ベースバンド処理装置1902は、行列演算及びFFTアクセラレータ200を有する。
図2は、本実施形態による行列演算及びFFTアクセラレータ200の構成例を示す図である。行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100の機能及びFFTアクセラレータ120の両方の機能を有し、行列演算及び高速フーリエ変換を行うことができる。行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100及びFFTアクセラレータ120に対して、ハードウェアを共有化することにより、面積を小さくすることができる。すなわち、行列演算及びFFTアクセラレータ200は、図1の行列演算アクセラレータ100に対してメモリ203を追加した構成であり、メモリ203以外のハードウェアを共有することができる。
行列演算及びFFTアクセラレータ200は、処理装置であり、コントローラ201、入力バッファ202、メモリ203、演算部204、出力バッファ205、メモリコントローラ206、及びメモリ207を有する。コントローラ201は、外部から命令を入力し、命令に応じて、入力バッファ202、メモリ203、演算部204、出力バッファ205及びメモリコントローラ206を制御する。入力バッファ202は、第1のFIFOメモリ208及び第2のFIFOメモリ209を有する。演算部204は、複数のALU210及びスイッチ211を有する。出力バッファ205は、第3のFIFOメモリ212及び第4のFIFOメモリ213を有する。メモリ207には、複数の行列データ及び高速フーリエ変換のためのデータが記憶される。
まず、行列演算及びFFTアクセラレータ200が行列演算を行う場合を説明する。メモリコントローラ206は、メモリ207から行列データを読み出し、第1のFIFOメモリ208及び第2のFIFOメモリ209に出力する。第1のFIFOメモリ208及び第2のFIFOメモリ209は、それぞれ、ファーストインファーストアウトにより、行列データを複数のALU210に出力する。複数のALU210は、例えば行列の四則演算等の行列演算を行う。スイッチ211は、複数のALU210の出力データを選択的に第3のFIFOメモリ212及び第4のFIFOメモリ213に出力する。例えば、行列データが複素数データである場合、スイッチ211は、複素数データのうちの実数データ又は虚数データを選択して出力することができる。第3のFIFOメモリ212及び第4のFIFOメモリ213は、それぞれ、ファーストインファーストアウトにより、行列データをメモリコントローラ206に出力する。メモリコントローラ206は、第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データをメモリ207に書き込む。
次に、図3(A)及び(B)等を参照しながら、行列演算及びFFTアクセラレータ200が高速フーリエ変換する処理を説明する。
図3(A)は、高速フーリエ変換を行うためのバタフライ演算の記号を示す図である。バタフライ演算は、第1の入力データX1及び第2の入力データX2を入力し、下記の演算を行い、第1の出力データY1及び第2の出力データY2を出力する。ここで、Wnは回転因子データであり、Nは高速フーリエ変換のデータ数である。
Y1=X1+X2×Wn
Y2=X1−X2×Wn
Wn=exp(−2πj×n/N)
図3(B)は、バタフライ演算器EXの構成例を示す図である。バタフライ演算器EXは、ALU301及び302を有する。ALU301及び302は、図2のALU210に対応する。ALU210は、複数のバタフライ演算器EXを構成することができる。回転因子データWnは、図2のメモリ203に記憶されている。ALU301は、第2の入力データX2及び回転因子データWnの乗算を行い、データX2×Wnを出力する。ALU302は、第1の入力データX1及びALU301の出力データを入力し、加算による第1の出力データY1及び減算による第2の出力データY2を出力する。
図2において、1個のバタフライ演算を行う場合を説明する。メモリコントローラ206は、メモリ207から第1の入力データX1及び第2の入力データX2を読み出し、第1のFIFOメモリ208及び第2のFIFOメモリ209を介して、ALU210に第1の入力データX1及び第2の入力データX2を出力する。メモリ203は、回転因子データWnをALU210に出力する。ALU210は、第1の入力データX1、第2の入力データX2及び回転因子データWnを基にバタフライ演算を行い、第1の出力データY1及び第2の出力データY2を、第3のFIFOメモリ212及び第4のFIFOメモリ213を介して、メモリコントローラ206に出力する。メモリコントローラ206は、第1の出力データY1及び第2の出力データY2をメモリ207に書き込む。
図4は、バタフライ演算による高速フーリエ変換の例を示す図であり、図5(A)の16個のバタフライ演算器EX1〜EX16により行われる。バタフライ演算器EX1〜EX16は、それぞれ、図3(A)のバタフライ演算器EXに対応し、図2のALU210により構成される。高速フーリエ変換のポイント数は32の場合、第1〜第5のステージを実行することにより、高速フーリエ変換が完了する。
第1のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び1番目の出力データを出力する。バタフライ演算器EX2は、8番目の入力データ及び24番目の入力データを基にバタフライ演算を行い、16番目の出力データ及び17番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第2のステージの入力データになる。
第2のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び2番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び3番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第3のステージの入力データになる。
第3のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び4番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び5番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第4のステージの入力データになる。
第4のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び8番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び9番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが第5のステージの入力データになる。
第5のステージでは、32個の入力データがメモリ207から入力バッファ202を介してバタフライ演算器EX1〜EX16に入力される。バタフライ演算器EX1〜EX16は、32個のデータを入力し、32個のデータを出力する。例えば、バタフライ演算器EX1は、0番目の入力データ及び16番目の入力データを基にバタフライ演算を行い、0番目の出力データ及び16番目の出力データを出力する。バタフライ演算器EX2は、1番目の入力データ及び17番目の入力データを基にバタフライ演算を行い、1番目の出力データ及び17番目の出力データを出力する。バタフライ演算器EX1〜EX16が出力する32個のデータは、スイッチ211及び出力バッファ205を介して、メモリ207に書き込まれる。この32個のデータが高速フーリエ変換の最終データになる。
図2のALU210の個数は、有限である。ALU210が図5(A)のように16個のバタフライ演算器EX1〜EX16を構成する場合には、上記のように、各ステージを1サイクルで実行可能である。例えば、第3のステージでは、16個のバタフライ演算器EX1〜EX16は、16個のバタフライ演算401を1サイクルで実行する。
これに対し、ALU210が図5(B)のように8個のバタフライ演算器EX1〜EX8を構成する場合には、各ステージを2サイクルで実行する。例えば、第3のステージの場合、第1のサイクルでは、8個のバタフライ演算器EX1〜EX8は、上側の8個のバタフライ演算402を実行し、第2のサイクルでは、8個のバタフライ演算器EX1〜EX8は、下側の8個のバタフライ演算403を実行する。
本実施形態によれば、行列演算に使用するALU210の個数で、任意のFFTデータ数の高速フーリエ変換を行うことができる。すなわち、メモリコントローラ206は、高速フーリエ変換の1個のステージのデータを複数のデータの組みに分割し、分割された複数のデータの組みを順にメモリ207から第1のFIFOメモリ208及び第2のFIFOメモリ209に出力する。これにより、各ステージを複数サイクルで実行する。
図6(A)は、図1の行列演算アクセラレータ100及びFFTアクセラレータ120の処理例を示す図である。FFTアクセラレータ120は、時刻t1で第1のFFT命令が入力されると、時刻t1〜t3でFFT処理Pf1を行う。行列演算アクセラレータ100は、時刻t2で第1の行列演算命令が入力されると、時刻t2〜t3で行列演算処理Pm1を行う。FFTアクセラレータ120は、時刻t3で第2のFFT命令が入力されると、時刻t3〜t5でFFT処理Pf2を行う。行列演算アクセラレータ100は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。FFTアクセラレータ120は、時刻t5で第3のFFT命令が入力されると、時刻t5〜t6でFFT処理Pf3を行う。行列演算処理Pm1は、FFT処理Pf1に対して並列に行われる。行列演算処理Pm2は、FFT処理Pf2に対して並列に行われる。
これに対し、図2の行列演算及びFFTアクセラレータ200は、行列演算処理及びFFT処理を並列に行うことができない。例えば、行列演算処理は、FFT処理に対して優先度が高い。その場合、行列演算及びFFTアクセラレータ200は、図6(B)又は(C)の処理を行うことが考えられる。
図6(B)は、行列演算及びFFTアクセラレータ200の処理例を示す図である。行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFT命令が入力されると、時刻t1〜t3でFFT処理Pf1を行う。行列演算及びFFTアクセラレータ200は、時刻t2で第1の行列演算命令が入力されると、FFT処理Pf1が終了するまで待機し、時刻t3〜t4で行列演算処理Pm1を行う。行列演算及びFFTアクセラレータ200は、時刻t3で第2のFFT命令が入力されると、行列演算処理Pm1が終了するまで待機する。行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。行列演算及びFFTアクセラレータ200は、行列演算処理Pm2が終了すると、時刻t5〜t6で、時刻t3で入力された第2のFFT命令に対応するFFT処理Pf2を行う。しかし、この場合、行列演算処理Pm1は優先度が高いのに、第1の行列演算命令が入力された時刻t2から時刻t3まで、行列演算処理Pm1の実行が待機される。これでは、優先度の高い行列演算命令の処理速度が低下してしまう課題がある。
図6(C)は、行列演算及びFFTアクセラレータ200の他の処理例を示す図である。行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFT命令が入力されると、時刻t1でFFT処理Pf1を開始する。行列演算及びFFTアクセラレータ200は、時刻t2で第1の行列演算命令が入力されると、FFT処理Pf1を中断し、内部状態をメモリ又はレジスタに退避し、行列演算処理Pm1を開始する。行列演算及びFFTアクセラレータ200は、時刻t3で行列演算処理Pm1が終了すると、メモリ又はレジスタの内部状態を復元し、中断していたFFT処理Pf1を再開する。FFT処理Pf1は、時刻t4で終了する。また、行列演算及びFFTアクセラレータ200は、時刻t3で第2のFFT命令が入力されると、FFT処理Pf1が終了するまで待機する。行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。行列演算及びFFTアクセラレータ200は、行列演算処理Pm2が終了すると、時刻t5〜t6で、時刻t3で入力された第2のFFT命令に対応するFFT処理Pf2を行う。これにより、優先度が高い行列演算処理Pm1を高速に実行することができる。しかし、FFT処理Pf1の中断及び再開を行うために、内部状態の退避及び復元を行う複雑な制御が必要になるため、コントローラ201の回路面積が大きくなってしまう課題がある。
次に、図7(A)〜(C)を参照しながら、優先度の高い行列演算命令を高速に実行し、かつ面積を小さくすることができる行列演算及びFFTアクセラレータ200を説明する。
図7(A)は、図6(A)と同じであり、図1の行列演算アクセラレータ100及びFFTアクセラレータ120の処理例を示す図である。
図7(B)は、図2の行列演算及びFFTアクセラレータ200が行うFFT処理の例を示す図である。図7(A)のFFT処理Pf1は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf1a、FFTの第2のステージの処理Pf1b、FFTの第3のステージの処理Pf1c、FFTの第4のステージの処理Pf1d及びFFTの第5のステージの処理Pf1eに分割される。
同様に、図7(A)のFFT処理Pf2は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf2a、FFTの第2のステージの処理Pf2b、FFTの第3のステージの処理Pf2c、FFTの第4のステージの処理Pf2d及びFFTの第5のステージの処理Pf2eに分割される。
同様に、図7(A)のFFT処理Pf3は、例えば図4のように第1〜第5のステージを有し、図7(B)のFFTの第1のステージの処理Pf3a、FFTの第2のステージの処理Pf3b、FFTの第3のステージの処理Pf3c、FFTの第4のステージの処理Pf3d及びFFTの第5のステージの処理Pf3eに分割される。
行列演算及びFFTアクセラレータ200には、高速フーリエ変換が複数のステージの処理に分割された複数の高速フーリエ変換ステージ処理命令が順に入力される。例えば、FFTの第1のステージ命令fft(1)、FFTの第2のステージ命令fft(2)、FFTの第3のステージ命令fft(3)、FFTの第4のステージ命令fft(4)、FFTの第5のステージ命令fft(5)が順に入力される。行列演算及びFFTアクセラレータ200は、FFTの第1のステージ命令fft(1)が入力されると、FFTの第1のステージの処理Pf1aを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第2のステージ命令fft(2)が入力されると、FFTの第2のステージの処理Pf1bを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第3のステージ命令fft(3)が入力されると、FFTの第3のステージの処理Pf1cを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第4のステージ命令fft(4)が入力されると、FFTの第4のステージの処理Pf1dを行う。次に、行列演算及びFFTアクセラレータ200は、FFTの第5のステージ命令fft(5)が入力されると、FFTの第5のステージの処理Pf1eを行う。FFT処理Pf2a〜Pf2e及びFFT処理Pf3a〜Pf3eも同様である。
図7(C)は、図2の行列演算及びFFTアクセラレータ200が行う行列演算処理及びFFT処理の例を示す図である。図7(C)のFFTの各ステージ命令の入力時刻は、図7(B)のものと同じである。
行列演算及びFFTアクセラレータ200は、時刻t1で第1のFFTの第1のステージ命令が入力されると、第1のFFT処理の第1のステージの処理Pf1aを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第2のステージ命令が入力されると、第1のFFTの第2のステージの処理Pf1bを行う。次に、行列演算及びFFTアクセラレータ200には、時刻t2で、第1のFFTの第3のステージ命令及び第1の行列演算命令が入力される。行列演算命令は、FFT命令より優先度が高いので、行列演算及びFFTアクセラレータ200は、第1の行列演算命令に対応する行列演算処理Pm1を実行する。第1のFFTの第3のステージ命令は、待機させられる。同様に、行列演算処理Pm1の実行中に入力された第1のFFTの第4のステージ命令及び第1のFFTの第5のステージ命令も、待機させられる。
次に、行列演算及びFFTアクセラレータ200は、時刻t3で、行列演算処理Pm1が終了すると、第1のFFTの第3のステージ命令に対応する第1のFFTの第3のステージの処理Pf1cを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第4のステージ命令に対応する第1のFFTの第4のステージの処理Pf1dを行う。次に、行列演算及びFFTアクセラレータ200は、第1のFFTの第5のステージ命令に対応する第1のFFTの第5のステージの処理Pf1eを行う。
次に、行列演算及びFFTアクセラレータ200は、時刻t4で第2の行列演算命令が入力されると、時刻t4〜t5で行列演算処理Pm2を行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第1のステージ命令に対応する第2のFFTの第1のステージの処理Pf2aを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第2のステージ命令に対応する第2のFFTの第2のステージの処理Pf2bを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第3のステージ命令に対応する第2のFFTの第3のステージの処理Pf2cを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第4のステージ命令に対応する第2のFFTの第4のステージの処理Pf2dを行う。次に、行列演算及びFFTアクセラレータ200は、第2のFFTの第5のステージ命令に対応する第2のFFTの第5のステージの処理Pf2eを行う。
コントローラ201は、行列演算処理命令が入力されると、複数のALU(演算器)210が行列演算を行うように制御する。また、コントローラ201は、FFTが複数のステージの処理に分割された複数のFFTステージ処理命令が入力されると、複数のALU210がFFT処理をステージ単位で行うように制御する。
また、コントローラ201は、複数のALU210がFFTのあるステージの処理Pf1bを実行している最中に、行列演算命令が入力されると、複数のALU210が実行しているFFTのステージの処理Pf1bが終了すると、複数のALU210に行列演算命令に対応する行列演算処理Pm1を行うように制御する。そして、コントローラ201は、複数のALU210が行列演算処理Pm1を終了すると、終了した高速フーリエ変換のステージの次のステージの処理Pf1cを複数のALU210が行うように制御する。
図8は、行列データの例を示す図である。行列801は、例えば2行2列の行列である。第1行第1列のデータは、複素数データa+ibであり、実数部a及び虚数部bを有し、行列データ802の最下位ビット(LSB)側から1番目のデータである。第1行第2列のデータは、複素数データc+idであり、実数部c及び虚数部dを有し、行列データ802の最下位ビット(LSB)側から2番目のデータである。第2行第1列のデータは、複素数データe+ifであり、実数部e及び虚数部fを有し、行列データ802の最下位ビット(LSB)側から3番目のデータである。第2行第2列のデータは、複素数データg+ihであり、実数部g及び虚数部hを有し、行列データ802の最下位ビット(LSB)側から4番目のデータである。例えば、実数部及び虚数部は、それぞれ、16ビットである。
図9(A)及び(B)は、行列演算を行う場合の図2のスイッチ211の処理例を示す図である。
図9(A)は、スイッチ211が行列の対角成分ベクトル抽出を行う処理例を示す図である。スイッチ211は、3行3列の行列902に対応する行列データ901を入力すると、第1行第1列の複素数データ、第2行第2列の複素数データ、及び第3行第3列の複素数データを、出力データ903として出力する。
図9(B)は、スイッチ211が行列の対角成分実数部抽出を行う処理例を示す図である。スイッチ211は、3行3列の行列912に対応する行列データ911を入力すると、第1行第1列の実数部データ、第2行第2列の実数部データ、及び第3行第3列の実数部データを、出力データ913として出力する。
同様に、スイッチ211は、行列の対角成分虚数部抽出を行うことができる。また、スイッチ211は、行列の実数部抽出を行うことができる。また、スイッチ211は、行列の虚数部抽出を行うことができる。また、スイッチ211は、入力した行列データを変換なしで、そのまま出力することができる。
以上のように、スイッチ211は、複数のALU210の出力データを入力し、行列演算命令に応じて、複数のALU210の出力データを選択し、選択したデータを出力することができる。
図10(A)、(B)、図11(A)、(B)及び図12は、FFTを行うバタフライ演算器EX1〜EX16及びスイッチ211の各ステージの処理例を示す図である。例えば、FFTデータ数が512であり、1サイクルのデータ数が32である。この場合、第1〜第9のステージの処理が行われる。各ステージのサイクル数は、512/32=16である。512個のデータは、32個のデータに16分割される。各サイクルで32個のデータが処理され、16サイクルで512個のデータが処理される。
図10(A)は、FFTの第1のステージの処理例を示す図である。第1の入力データ1001は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1002は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1001を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1001を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1002を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1002を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1001を入力し、第2の入力端子に第2の入力データ1002を入力し、第1の出力端子から第1の出力データ1003を出力し、第2の出力端子から第2の出力データ1004を出力する。第1の出力データ1003は、図3(B)の第1の出力データY1に対応する。第2の出力データ1004は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第1のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び1番目の出力データを出力する。バタフライ演算器EX2は、図4の第1のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、2番目の出力データ及び3番目の出力データを出力する。なお、図10(A)、(B)、図11(A)、(B)及び図12では、図4に対して、バタフライ演算器EX1〜EX16の順番を変えて示している。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1003及び第2の出力データ1004を入力し、第1の出力データ1003及び第2の出力データ1004の位置を入れ替えて、第3の出力データ1005及び第4の出力データ1006を出力する。第1の出力データ1003は0番目、2番目及び4番目等の出力データを有し、第2の出力データ1004は1番目、3番目及び5番目等の出力データを有する。これに対し、第3の出力データ1005は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1006は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1005は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1006は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第2のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。これにより、図1の入力スイッチ122が不要になる。
図10(B)は、FFTの第2のステージの処理例を示す図である。第1の入力データ1011は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1012は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1011を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1011を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1012を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1012を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1011を入力し、第2の入力端子に第2の入力データ1012を入力し、第1の出力端子から第1の出力データ1013を出力し、第2の出力端子から第2の出力データ1014を出力する。第1の出力データ1013は、図3(B)の第1の出力データY1に対応する。第2の出力データ1014は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第2のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び2番目の出力データを出力する。バタフライ演算器EX2は、図4の第2のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び3番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1013及び第2の出力データ1014を入力し、第1の出力データ1013及び第2の出力データ1014の位置を入れ替えて、第3の出力データ1015及び第4の出力データ1016を出力する。第1の出力データ1013は0番目、1番目及び4番目等の出力データを有し、第2の出力データ1014は2番目、3番目及び6番目等の出力データを有する。これに対し、第3の出力データ1015は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1016は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1015は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1016は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第3のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図11(A)は、FFTの第3のステージの処理例を示す図である。第1の入力データ1101は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1102は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1101を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1101を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1102を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1102を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1101を入力し、第2の入力端子に第2の入力データ1102を入力し、第1の出力端子から第1の出力データ1103を出力し、第2の出力端子から第2の出力データ1104を出力する。第1の出力データ1103は、図3(B)の第1の出力データY1に対応する。第2の出力データ1104は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第3のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び4番目の出力データを出力する。バタフライ演算器EX2は、図4の第3のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び5番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1103及び第2の出力データ1104を入力し、第1の出力データ1103及び第2の出力データ1104の位置を入れ替えて、第3の出力データ1105及び第4の出力データ1106を出力する。第1の出力データ1103は0番目、1番目及び2番目等の出力データを有し、第2の出力データ1104は4番目、5番目及び6番目等の出力データを有する。これに対し、第3の出力データ1105は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1106は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1105は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1106は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第4のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図11(B)は、FFTの第4のステージの処理例を示す図である。第1の入力データ1111は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1112は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1111を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1111を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1112を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1112を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1111を入力し、第2の入力端子に第2の入力データ1112を入力し、第1の出力端子から第1の出力データ1113を出力し、第2の出力端子から第2の出力データ1114を出力する。第1の出力データ1113は、図3(B)の第1の出力データY1に対応する。第2の出力データ1114は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第4のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び8番目の出力データを出力する。バタフライ演算器EX2は、図4の第4のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び9番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1113及び第2の出力データ1114を入力し、第1の出力データ1113及び第2の出力データ1114の位置を入れ替えて、第3の出力データ1115及び第4の出力データ1116を出力する。第1の出力データ1113は0番目、1番目及び2番目等の出力データを有し、第2の出力データ1114は8番目、9番目及び10番目等の出力データを有する。これに対し、第3の出力データ1115は0番目、1番目及び2番目等の出力データを有し、第4の出力データ1116は16番目、17番目及び18番目等の出力データを有する。第3の出力データ1115は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1116は、図2の第4のFIFOメモリ213に出力される。このデータの位置の入れ替えにより、次の第5のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図12は、FFTの第5〜第9のステージの処理例を示す図である。第1の入力データ1201は、図3(B)の第1の入力データX1に対応し、図2の第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16の第1の入力端子にそれぞれ出力される。第2の入力データ1202は、図3(B)の第2の入力データX2に対応し、図2の第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16の第2の入力端子にそれぞれ出力される。
第1のFIFOメモリ208は、メモリコントローラ206を介してメモリ207から第1の入力データ1201を入力し、複数のバタフライ演算器EX1〜EX16の第1の入力端子に第1の入力データ1201を出力する。第2のFIFOメモリ209は、メモリコントローラ206を介してメモリ207から第2のデータ1202を入力し、複数のバタフライ演算器EX1〜EX16の第2の入力端子に第2の入力データ1202を出力する。
16個のバタフライ演算器EX1〜EX16は、第1の入力端子に第1の入力データ1201を入力し、第2の入力端子に第2の入力データ1202を入力し、第1の出力端子から第1の出力データ1203を出力し、第2の出力端子から第2の出力データ1204を出力する。第1の出力データ1203は、図3(B)の第1の出力データY1に対応する。第2の出力データ1204は、図3(B)の第2の出力データY2に対応する。例えば、バタフライ演算器EX1は、図4の第5のステージと同様に、0番目の入力データ及び16番目の入力データを入力し、0番目の出力データ及び16番目の出力データを出力する。バタフライ演算器EX2は、図4の第4のステージと同様に、1番目の入力データ及び17番目の入力データを入力し、1番目の出力データ及び17番目の出力データを出力する。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1の出力データ1203及び第2の出力データ1204を入力し、そのまま、第3の出力データ1205及び第4の出力データ1206として出力する。第3の出力データ1205は、第1の出力データ1203と同じである。第4の出力データ1206は、第2の出力データ1204と同じである。第3の出力データ1205は、図2の第3のFIFOメモリ212に出力される。第4の出力データ1206は、図2の第4のFIFOメモリ213に出力される。第5〜第9のステージでは、スイッチ211は、データの位置の入れ替えを行わず、後述の方法により、メモリコントローラ206がデータの位置の入れ替えを行い、次のステージのバタフライ演算器EX1〜EX16の入力データの位置を決める。
図13は、図2の行列演算及びFFTアクセラレータ200の一部の構成例を示す図である。4個のバンクBK0、BK1、BK2及びBK3は、図2のメモリ207に対応し、図14(A)、(B)、図15(A)、(B)、図16(A)、(B)、図17(A)、(B)、図18(A)、(B)に示すように、それぞれ、0〜N(512)のアドレスにデータが格納される。第1のFIFOメモリ208及び第2のFIFOメモリ209には、バンクBK0〜BK3から読み出されたデータが記憶される。第1の入力データ1301は、第1のFIFOメモリ208の出力データであり、バタフライ演算器EX1〜EX16に入力される。第2の入力データ1302は、第2のFIFOメモリ209の出力データであり、バタフライ演算器EX1〜EX16に入力される。第3の出力データ1303は、図2のスイッチ211の出力データであり、第3のFIFOメモリ212に入力される。第4の出力データ1304は、図2のスイッチ211の出力データであり、第4のFIFOメモリ213に入力される。第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データは、バンクBK0〜BK3に書き込まれる。
図14(A)、(B)、図15(A)、(B)、図16(A)、(B)、図17(A)、(B)、図18(A)、(B)において、かっこ内の数字はサイクル番号を示す。各ステージでは、512個のデータを32個のデータに16サイクル分割する。すなわち、各ステージは、16サイクルで処理される。各サイクルでは、32個のデータが処理される。
図14(A)は、FFTの第1〜第5のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、バンクBK0の「0」のアドレスから、0番目〜15番目のデータを読み出して第1のFIFOメモリ208に出力し、バンクBK0の「256」のアドレスから、256番目〜271番目のデータを読み出して第2のFIFOメモリ209に出力する。第2のサイクルでは、メモリコントローラ206は、バンクBK1の「16」のアドレスから、16番目〜31番目のデータを読み出して第1のFIFOメモリ208に出力し、バンクBK1の「272」のアドレスから、272番目〜287番目のデータを読み出して第2のFIFOメモリ209に出力する。
図14(B)は、FFTの第1〜第5のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する32番目〜47番目のデータをバンクBK2の「32」のアドレスに書き込み、第4のFIFOメモリ213が出力する48番目〜63番目のデータをバンクBK3の「48」のアドレスに書き込む。
以上のように、第1〜第5のステージでは、スイッチ211がデータの位置の入れ替えを行うので、メモリコントローラ206は、データの位置の入れ替えを行わない。
図15(A)は、FFTの第6のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図15(A)は図14(A)と同じであり、第6のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図15(B)は、FFTの第6のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する32番目〜47番目のデータをバンクBK2の「32」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する48番目〜63番目のデータをバンクBK3の「48」のアドレスに書き込む。図15(B)の書き込みにより、データの位置の入れ替えが行われ、次の第7のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。これにより、図1の入力スイッチ122が不要になる。
図16(A)は、FFTの第7のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図16(A)は図14(A)と同じであり、第7のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図16(B)は、FFTの第7のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する64番目〜79番目のデータをバンクBK0の「64」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する80番目〜95番目のデータをバンクBK1の「80」のアドレスに書き込む。図16(B)の書き込みにより、データの位置の入れ替えが行われ、次の第8のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図17(A)は、FFTの第8のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図17(A)は図14(A)と同じであり、第8のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図17(B)は、FFTの第8のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する128番目〜143番目のデータをバンクBK0の「128」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する144番目〜159番目のデータをバンクBK1の「144」のアドレスに書き込む。図17(B)の書き込みにより、データの位置の入れ替えが行われ、次の第9のステージのバタフライ演算器EX1〜EX16の入力データの位置が決まる。
図18(A)は、FFTの第9のステージにおいてメモリコントローラ206がバンクBK0〜BK3から第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出すアドレスを示す図であり、図13の第1のFIFOメモリ208及び第2のFIFOメモリ209に読み出されるデータをそれぞれ図13と同じハッチで示す。図18(A)は図14(A)と同じであり、第9のステージでは、メモリコントローラ206は、第1〜第5のステージと同じ読み出しを行う。
図18(B)は、FFTの第9のステージにおいてメモリコントローラ206が第3のFIFOメモリ212及び第4のFIFOメモリ213からバンクBK0〜BK3に書き込むアドレスを示す図であり、図13の第3のFIFOメモリ212及び第4のFIFOメモリ213に書き込まれるデータをそれぞれ図13と同じハッチで示す。第1のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する0番目〜15番目のデータをバンクBK0の「0」のアドレスに書き込み、第4のFIFOメモリ213が出力する256番目〜271番目のデータをバンクBK0の「256」のアドレスに書き込む。第2のサイクルでは、メモリコントローラ206は、第3のFIFOメモリ212が出力する16番目〜31番目のデータをバンクBK1の「16」のアドレスに書き込み、第4のFIFOメモリ213が出力する272番目〜287番目のデータをバンクBK1の「272」のアドレスに書き込む。図18(B)の書き込みにより、データの位置の入れ替えが行われ、FFTの最終データの位置が決まる。
以上のように、第1〜第5のステージでは、スイッチ211により、データの位置の入れ替えを行い、第6〜第9のステージでは、メモリコントローラ206の書き込みにより、データの位置の入れ替えを行う。これにより、図1の入力スイッチ122が不要になり、面積を小さくすることができる。
スイッチ211は、複数のバタフライ演算器EX1〜EX16の第1及び第2の出力端子のデータを入力し、FFTの各ステージに応じて、入力したデータの位置を入れ替えて第3のFIFOメモリ212及び第4のFIFOメモリ213に出力する。
メモリコントローラ206は、FFTの各ステージに応じて、第3のFIFOメモリ212及び第4のFIFOメモリ213の出力データをメモリ207の異なるアドレスに書き込む。
FFTデータ数(例えば512)が1サイクルのデータ数(例えば32)より多い場合には、上記のように、一部のステージでは、スイッチ211により、データの位置の入れ替えを行い、他部のステージでは、メモリコントローラ206の書き込みにより、データの位置の入れ替えを行う。
また、FFTデータ数が1サイクルのデータ数以下である場合には、上記の第1〜第5のステージのように、すべてのステージで、スイッチ211により、データの位置の入れ替えを行う。
本実施形態による行列演算及びFFTアクセラレータ200は、小面積で行列演算及び高速フーリエ変換を行うことができる。
また、コントローラ201は、プログラムを実行することにより上記の処理を行うコンピュータであってもよい。すなわち、本実施形態は、コンピュータがプログラムを実行することによって実現することもできる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、磁気テープ、不揮発性のメモリカード、ROM等を用いることができる。
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。