次に、本発明の実施形態の離散フーリエ変換装置について図面を参照して詳細に説明する。
(第1実施形態)
図1は、本発明の第1実施形態の離散フーリエ変換装置(以下「演算装置」とも称する)200を示すブロック図である。
図1において、演算装置200は、前加算ユニット201と、乗算ユニット202と、後加算ユニット203と、を含む。
前加算ユニット201は、前段第一加算ユニット204と、前段転置ユニット205と、前段第二加算ユニット206と、前段第三加算ユニット207と、を含む。乗算ユニット202は、乗算器208と、制御ユニット209と、を含む。後加算ユニット203は、後段第一加算ユニット210と、後段第二加算ユニット211と、後段転置ユニット212と、後段第三加算ユニット213と、を含む。
演算装置200は、複数種類のポイント数のうちの1つを示した制御信号と、複数のデータと、を受け付けると、複数のデータに対して、制御信号にて示されたポイント数の離散フーリエ変換(DFT)を実行する。
本実施形態では、複数種類のポイント数は、3点、5点、9点および15点にて構成される。複数のデータのそれぞれは、DFTが施される複素数データである。
演算装置200は、制御信号と複数のデータとを受け付けると、まず、制御信号が示すポイント数のDFTに応じた前段加算処理を、複素数データに対して実行して、前段加算処理結果を生成する。
続いて、演算装置200は、制御信号が示すポイント数のDFTに応じた乗算処理を、その前段加算処理結果に対して実行して、乗算処理結果を生成する。
続いて、演算装置200は、制御信号が示すポイント数のDFTに応じた後段加算処理を、その乗算処理結果に対して実行して、制御信号にて示されたポイント数のDFTの結果を出力する。
前段加算処理は、乗算処理の前に行われるべき加算処理であり、後段加算処理は、乗算処理の後に行われるべき加算処理である。
なお、DFTの処理を、前段加算処理と乗算処理と後段加算処理とに分けて行うことは、例えば、ウィノグラードの方法等により公知である(図49参照)
前加算ユニット201は、一般的に第一加算手段と呼ぶことができる。
前加算ユニット201は、複数のデータが、第一タイミングで入力されると、その複数のデータに対して、制御信号が示すポイント数の離散フーリエ変換に応じた前段加算処理を実行する。
乗算ユニット202は、一般的に乗算手段と呼ぶことができる。
乗算ユニット202は、第一タイミングよりも遅い第二タイミングで入力されたデータに対して、制御信号が示すポイント数の離散フーリエ変換に応じた乗算処理を実行する。
後加算ユニット203は、一般的に第二加算手段と呼ぶことができる。
後加算ユニット203は、第二タイミングよりも遅い第三タイミングで入力されたデータに対して、制御信号が示すポイント数の離散フーリエ変換に応じた後段加算処理を実行する。
なお、前加算ユニット201は、前段加算処理の結果を、制御信号にて示されたポイント数に関わらず、第二タイミングで、乗算ユニット202に出力する。
また、乗算ユニット202は、前段加算処理の結果に対して乗算処理を実行し、その乗算処理の結果を、制御信号にて示されたポイント数に関わらず、第三タイミングで、後加算ユニット203に出力する。
また、後加算ユニット203は、乗算処理の結果に対して後段加算処理を行い、その後段加算処理の結果を、複数のデータに対して制御信号にて示されたポイント数の離散フーリエ変換を実行した結果として出力する。
前段第一加算ユニット204は、一般的に第一演算手段と呼ぶことができる。
前段第一加算ユニット204は、第一タイミングで複数のデータを受け付けると、制御信号に従って、複数のデータ同士を選択的に加算する(加算処理)、もしくは、複数のデータをそのまま出力する。
前段転置ユニット205は、一般的に並び替え手段と呼ぶことができる。
前段転置ユニット205は、第一タイミングよりも遅く第二タイミングよりも早い第四タイミングで入力されたデータを、制御信号に従って、選択的に並べ替える(転置処理)、もしくは、そのまま出力(スルー処理)する。
前段第二加算ユニット206は、一般的に第二演算手段と呼ぶことができる。
前段第二加算ユニット206は、第四タイミングよりも遅く第二タイミングよりも早い第五タイミングで入力されたデータを、制御信号に従って、選択的に加算する(加算処理)、もしくは、そのまま出力する。
前段第三加算ユニット207は、一般的に第三演算手段と呼ぶことができる。
前段第三加算ユニット207は、第五タイミングよりも遅く第二タイミングよりも早い第六タイミングで入力されたデータを、制御信号に従って、選択的に加算する(加算処理)、もしくはそのまま出力する。
なお、前段第一加算ユニット204は、制御信号にて示されたポイント数に関わらず、自己の出力を、第四タイミングで、前段転置ユニット205に出力する。
前段転置ユニット205は、制御信号にて示されたポイント数に関わらず、自己の出力を、第五タイミングで、前段第二加算ユニット206に出力する。
前段第二加算ユニット206は、制御信号にて示されたポイント数に関わらず、自己の出力を、第六タイミングで、前段第三加算ユニット207に出力する。
前段第三加算ユニット207は、制御信号にて示されたポイント数に関わらず、自己の出力を、第二タイミングで、乗算ユニット202に出力する。
乗算器208は、制御ユニット209から乗算係数を読み出し、その乗算係数を前段第三加算ユニット207の出力に乗算する乗算処理を行う。
制御ユニット209は、ポイント数ごとに、そのポイント数に対応する複素数の乗算係数を蓄えたメモリ(記憶手段)と、制御信号が示すポイント数に対応する乗算係数をメモリから読み出すためのアドレスを生成するアドレス生成ユニット(読み出し手段)と、を含む。
後段第一加算ユニット210は、一般的に第四演算手段と呼ぶことができる。
後段第一加算ユニット210は、第三タイミングで乗算ユニット202の出力を受け付けると、制御信号に従って、乗算ユニット202の出力同士を選択的に加算する(加算処理)、もしくは、乗算ユニット202の出力をそのまま出力する。
後段第二加算ユニット211は、一般的に第五演算手段と呼ぶことができる。
後段第二加算ユニット211は、第三タイミングよりも遅い第七タイミングで入力されたデータを、制御信号に従って、選択的に加算する(加算処理)、そのまま出力する、または、選択的に加算した加算結果に選択的に純虚数を乗算する。
後段転置ユニット212は、一般的にデータ並び替え手段と呼ぶことができる。
後段転置ユニット212は、第七タイミングよりも遅い第八タイミングで入力されたデータを、制御信号に従って、選択的に並べ替える(転置処理)、もしくは、そのまま出力(スルー処理)する。
後段第三加算ユニット213は、一般的に第六演算手段と呼ぶことができる。
後段第三加算ユニット213は、第八タイミングよりも遅い第九タイミングで入力されたデータを、制御信号に従って、選択的に加算する(加算処理)、もしくは、そのまま出力する。
なお、後段第一加算ユニット210は、制御信号にて示されたポイント数に関わらず、自己の出力を、第七タイミングで、後段第二加算ユニット211に出力する。
後段第二加算ユニット211は、制御信号にて示されたポイント数に関わらず、自己の出力を、第八タイミングで、後段転置ユニット212に出力する。
後段転置ユニット212は、制御信号にて示されたポイント数に関わらず、自己の出力を、第九タイミングで、後段第三加算ユニット213に出力する。
後段第三加算ユニット213は、自己の出力を、複数のデータに対して制御信号にて示されたポイント数の離散フーリエ変換を実行した結果として出力する。
図2は、前段第一加算ユニット204を示したブロック図である。
図2において、前段第一加算ユニット204は、遅延回路Dと、クロスバ(Xbar)31および37と、加算器32、33、35および36と、セレクタ(Sel)34と、を含む。
なお、前段第一加算ユニット204は、入力された制御信号C_sigを取り込み、また、制御信号C_sigをC_outとして出力する。
遅延回路Dは、演算装置200へ入力された複素数データin3を1クロック分遅延する。
クロスバ31は、制御信号C_sigに従って、遅延回路Dからの出力regr及び複素数データin1、in2、in3のそれぞれを、sel1、sel2、sel3、sel4、sel6、sel7、sel8のいずれかとして出力する。
加算器32は、sel3とsel4とを加算する加算処理を行う。
加算器33は、sel3と符号を反転したsel4とを加算する加算処理を行う。
セレクタ34は、制御信号C_sigに従って、sel2か加算器32の出力add_o_3かを選択して出力する。
加算器35は、sel1とセレクタ34の出力sel5とを加算する加算処理を行う。
加算器36は、sel1と符号を反転したsel5とを加算する加算処理を行う。
クロスバ37には、加算器35の出力add_o_1、加算器36の出力add_o_2、加算器32の出力add_o_3、加算器33の出力add_o_4、sel6、sel7、および、sel8が、入力可能である。
クロスバ37は、入力された信号のそれぞれを、制御信号C_sigに従って、out1、out2、out3、 out4として出力する。
図3は、前段転置ユニット205を示したブロック図である。
図3において、複素数データin1は、前段第一加算ユニット204からのout1であり、複素数データin2は、前段第一加算ユニット204からのout2であり、複素数データin3は、前段第一加算ユニット204からのout3であり、複素数データin4は、前段第一加算ユニット204からのout4であり、制御信号C_sigは、前段第一加算ユニット204からのC_outである。
図3において、前段転置ユニット205は、複数の遅延回路Dと、クロスバ(Xbar)41、42および43と、を含む。なお、図3内の各遅延回路Dは、入力されたデータを1クロック遅延させる。
前段転置ユニット205は、入力された複素数データin1, in2, in3およびin4と、同じく入力された制御信号C_sigと、をペアとして扱う。すなわち、前段転置ユニット205内のクロスバなどに入力される個々の複素数データには、制御信号C_sigが付加されることになる。
前段転置ユニット205は、制御信号と複素数データとの入力時に、制御信号と複素数データをペアにする処理を行う。以下では、この処理を「統合」と呼ぶこととする。
クロスバ41は、複素数データin1からin4の各々を、それぞれの複素数データに統合された制御信号C_sigに従って、Sel_1_1からSel_1_7のいずれかとして出力する。
クロスバ42は、遅延回路Dからの出力D_Sel_1_1からD_Sel_1_4を、各データに統合されている制御信号C_sigに従って、Sel_2_1からSel_2_4のいずれかとして出力する。
クロスバ43は、D_dt_1からD_dt_11の各信号を、それぞれに統合された制御信号に従って、Sel_3_1からSel_3_4のいずれかとして出力する。
Sel_3_1からSel_3_4の各信号は、制御信号と複素数データとに分離される。この分離された信号のうち、複素数データのみが、本ユニットからの出力out1、out2、out3、out4として出力される。一方、制御信号は、図3のGNDで示したグラウンドに入力され、以降使用されることはない。また、制御信号C_sigは、10クロック遅延され、C_outとして出力される。
図4は、前段第二加算ユニット206を示したブロック図である。
図4において、複素数データin1は、前段転置ユニット205からのout1であり、複素数データin2は、前段転置ユニット205からのout2であり、複素数データin3は、前段転置ユニット205からのout3であり、複素数データin4は、前段転置ユニット205からのout4であり、制御信号C_sigは、前段転置ユニット205からのC_outである。
図4において、前段第二加算ユニット206は、複数の遅延回路Dと、クロスバ(Xbar)&符号反転器51と、加算器52、53、54および55と、を含む。
クロスバ(Xbar)&符号反転器51は、制御信号C_sigに従って、入力in1からin4と、遅延回路Dの出力regr1からregr5と、の符号を反転し、それぞれを、sel1からsel9のいずれかとして出力する。
加算器52は、sel1とsel2とsel3とを加算する加算処理を行う。加算器53は、sel4とsel5とを加算する加算処理を行う。加算器54は、sel6とsel7とを加算する加算処理を行う。加算器55は、sel8とsel9とを加算する加算処理を行う。
これら加算器の出力は、それぞれ、out1, out2, out3, out4として、本ユニットから出力される。
また、制御信号C_sigは、1クロック遅延されて、C_outとして出力される。
図5は、前段第三加算ユニット207を示したブロック図である。
図5において、複素数データin1は、前段第二加算ユニット206からのout1であり、複素数データin2は、前段第二加算ユニット206からのout2であり、複素数データin3は、前段第二加算ユニット206からのout3であり、複素数データin4は、前段第二加算ユニット206からのout4であり、制御信号C_sigは、前段第二加算ユニット206からのC_outである。
前段第三加算ユニット207は、複数の遅延回路Dと、クロスバ(Xbar)&符号反転器61と、加算器62、63、64および65と、を含む。
クロスバ(Xbar)&符号反転器61は、制御信号C_sigに従って、入力in1からin4と、遅延回路Dの出力regr1からregr4と、の符号を反転し、それぞれを、sel1からsel10のいずれかとして出力する。
加算器62は、sel1とsel2とsel3とを加算する加算処理を行う。加算器63は、sel4とsel5とを加算する加算処理を行う。加算器64は、sel6とsel7とsel8とを加算する加算処理を行う。加算器65は、sel9とsel10とを加算する加算処理を行う。
これら加算器の出力は、それぞれ、out1, out2, out3, out4として出力される。
また、制御信号C_sigは、C_outとして出力される。
図6は、制御ユニット209と乗算器208を示したブロック図である。
図6において、複素数データin1は、前段第三加算ユニット207からのout1であり、複素数データin2は、前段第三加算ユニット207からのout2であり、複素数データin3は、前段第三加算ユニット207からのout3であり、複素数データin4は、前段第三加算ユニット207からのout4であり、制御信号C_sigは、前段第三加算ユニット207からのC_outである。
図6において、制御ユニット209は、後述するクロック数信号に加算するオフセットを格納したオフセットテーブル702と、乗算係数メモリ704および705と、加算器703と、セレクタ706と、を含む。
乗算器208は、クロスバ(Xbar)701と、入力信号と乗算係数の、実数部と虚数部をそれぞれ乗算する並列乗算器707、708、709および710と、純虚数を乗算する純虚数乗算器711、712、713および714と、セレクタ715、716、717および718と、を含む。
制御ユニット209においては、制御信号C_sigが入力されると、C_sigに従ってオフセットテーブル702からオフセットが出力される。加算器703は、そのオフセットとクロック数信号とを加算する。この加算結果に従って、乗算係数メモリ704および705のそれぞれから、乗算係数が出力される。セレクタ706は、後述のDFT/IDFT選択信号に従って、乗算係数メモリ704からの乗算係数と乗算係数メモリ705からの乗算係数とのいずれかを、mult_cf1からmult_cf4として出力する。
なお、クロック数信号、DFT/IDFT選択信号、および、メモリやテーブルの構成とそのアクセス方法については、後で詳細を説明する。
乗算器208では、クロスバ(Xbar)701は、制御信号C_sigに従って、入力in1からin4のそれぞれを、sel1からsel5のいずれかとして出力する。
並列乗算器707、708、709および710は、それぞれ、sel2とmult_cf4、sel3とmult_cf3、sel4とmult_cf2、sel5とmult_cf1を乗算し、それら乗算結果を、mult_sel1からmult_sel4のいずれかとして出力する。
純虚数乗算器711、712、713および714は、それぞれ、mult_sel1からmult_sel4に対し、純虚数を乗算し、それら乗算結果を、mult_i_sel1からmult_i_sel4のいずれかとして出力する。
セレクタ715、716、717および718は、それぞれ、C_sigに従って、mult_sel1からmult_sel4と、mult_i_sel1からmult_i_sel4とを、それぞれ選択的にout1からout4として出力する。
なお、クロスバ(Xbar)701の出力sel1は、out1として出力される。また、制御信号C_sigは、C_outとして出力される。
図7は、後段第一加算ユニット210を示したブロック図である。
図7において、複素数データin1は、乗算器208からのout1であり、複素数データin2は、乗算器208からのout2であり、複素数データin3は、乗算器208からのout3であり、複素数データin4は、乗算器208からのout4であり、複素数データin5は、乗算器208からのout5であり、制御信号C_sigは、乗算器208からのC_outである。
図7において、後段第一加算ユニット210は、クロスバ(Xbar)81および85と、加算器82、83および84と、を含む。
クロスバ(Xbar)81は、制御信号C_sigに従って、入力in1からin6のそれぞれを、sel1からsel9のいずれかとして出力する。
加算器82は、sel4とsel5を加算し、その加算結果add_s1を出力する。加算器83は、sel6とsel7を加算し、その加算結果add_s2を出力する。加算器84は、sel8とsel9を加算し、その加算結果add_s3を出力する。
クロスバ(Xbar)85は、sel1、sel2、sel3、add_s1、add_s2およびadd_s3を入力可能である。クロスバ(Xbar)85は、C_sigに従って、入力信号のそれぞれを、out1からout4のいずれかとして出力する。
また、制御信号C_sigは、C_outとして出力される。
図8は、後段第二加算ユニット211を示したブロック図である。
図8において、複素数データin1は、後段第一加算ユニット210からのout1であり、複素数データin2は、後段第一加算ユニット210からのout2であり、複素数データin3は、後段第一加算ユニット210からのout3であり、複素数データin4は、後段第一加算ユニット210からのout4であり、制御信号C_sigは、後段第一加算ユニット210からのC_outである。
図8において、後段第二加算ユニット211は、複数の遅延回路Dと、クロスバ(Xbar)901と、加算器902、903、904および905と、純虚数乗算器906、907、908および909と、Sel(セレクタ)910、911、912および913と、を含む。
クロスバ(Xbar)901は、制御信号C_sigに従って、入力in1からin4と遅延回路Dの出力regr1からregr10とのそれぞれを、sel1からsel12のいずれかとして出力する。
加算器902は、sel1とsel2とsel3とを加算して、加算結果add_s1を出力する。加算器903は、sel4とsel5とsel6とを加算して、加算結果add_s2を出力する。加算器904は、sel7とsel8とsel9とを加算して、加算結果add_s3を出力する。加算器904は、sel10とsel11とsel12とを加算して、加算結果add_s4を出力する。
純虚数乗算器906は、加算結果add_s1に純虚数を乗算して、乗算結果add_i_s1を出力する。純虚数乗算器907は、加算結果add_s2に純虚数を乗算して、乗算結果add_i_s2を出力する。純虚数乗算器908は、加算結果add_s3に純虚数を乗算して、乗算結果add_i_s3を出力する。純虚数乗算器909は、加算結果add_s4に純虚数を乗算して、乗算結果add_i_s4を出力する。
セレクタSel910は、C_sigに従って、加算器902の出力か純虚数乗算器906の出力かを選択して、その選択結果を、out1として出力する。セレクタSel911は、C_sigに従って、加算器903の出力か純虚数乗算器907の出力かを選択して、その選択結果を、out2として出力する。セレクタSel912は、C_sigに従って、加算器904の出力か純虚数乗算器908の出力かを選択して、その選択結果を、out3として出力する。セレクタSel913は、C_sigに従って、加算器905の出力か純虚数乗算器909の出力かを選択して、その選択結果を、out4として出力する。
C_sigは、2クロック遅延され、C_outとして出力される。
図9は、後段転置ユニット212を示したブロック図である。
図9において、複素数データin1は、後段第二加算ユニット211からのout1であり、複素数データin2は、後段第二加算ユニット211からのout2であり、複素数データin3は、後段第二加算ユニット211からのout3であり、複素数データin4は、後段第二加算ユニット211からのout4であり、制御信号C_sigは、後段第二加算ユニット211からのC_outである。
図9において、後段転置ユニット212は、複数の遅延回路Dと、クロスバ(Xbar)1001、1002、1003および1004と、を含む。
後段転置ユニット212では、まず、入力in1、in2、in3、in4が、制御信号C_sigと統合される。
クロスバ(Xbar)1001は、これらの信号を、それぞれ、Sel1_1からSel1_7のいずれかとして出力する。
クロスバ(Xbar)1002は、Sel1_1と、遅延回路Dの出力D_Sel1_1からD_Sel1_3を、それぞれが有する制御信号に従って、Sel2_1からSel2_4のいずれかに振り分ける。
クロスバ(Xbar)1003は、遅延回路Dの出力D_Sel2_1からD_Sel2_3を、それぞれが有する制御信号に従って、Sel3_1、Sel3_2、Sel3_3のいずれかに振り分ける。
クロスバ(Xbar)1004は、D_Sel3_1からD_Sel3_3と、D_Sel2_1からD_Sel2_3と、Sel2_4、Sel1_5、Sel1_6、および、Sel1_7を、それぞれが有する制御信号に従って、Sel4_1からSel4_4のいずれかに振り分ける。
Sel4_1からSel4_4は、制御信号と複素数データに分離される。複素数データのそれぞれは、out1、out2、out3、out4のいずれかとして出力される。一方、制御信号は、図9のGNDで示されるグラウンドへと出力され、以降使用されることはない。
また、制御信号C_sigは、遅延回路Dによって3クロック遅延され、C_outとして出力される。
図10は、後段第三加算ユニット213を示したブロック図である。
図10において、複素数データin1は、後段転置ユニット212からのout1であり、複素数データin2は、後段転置ユニット212からのout2であり、複素数データin3は、後段転置ユニット212からのout3であり、複素数データin4は、後段転置ユニット212からのout4であり、制御信号C_sigは、後段転置ユニット212からのC_outである。
図10において、後段第三加算ユニット213は、複数の遅延回路Dと、クロスバ(Xbar)1101および1108と、加算器1102、1103、1106および1107と、Sel(セレクタ)1104および1105と、を含む。
クロスバ(Xbar)1101は、制御信号C_sigに従って、入力in1からin4と遅延回路Dの出力regr1からregr5とのそれぞれを、sel1からsel7のいずれかとして出力する。
加算器1102は、sel1とsel2を加算して、加算結果add_o_1を出力する。加算器1103は、sel1と符号を反転したsel2とを加算し、加算結果add_o_2を出力する。
セレクタSel1104は、制御信号C_sigに従って、sel1とadd_o_2のいずれかを選択し、その選択結果をadd_sel1として出力する。セレクタSel1105は、制御信号C_sigに従って、sel3とadd_o_1のいずれかを選択し、その選択結果をadd_sel2として出力する。
加算器1106は、add_sel2とsel4を加算して、加算結果add_o_3を出力する。加算器1107は、add_sel2と符号を反転したsel4を加算して、加算結果add_o_4を出力する。
クロスバ(Xbar)1108は、add_sel1、add_o_1、add_o_3、add_o_4、sel5、sel6およびsel7を入力可能である。クロスバ(Xbar)1108は、制御信号C_sigに従って、入力信号のそれぞれを、out1からout4のいずれかとして出力する。
次に、演算装置200が、制御信号に従って、3、5、9、15点DFT/IDFTを行う例を説明する。
まず、演算装置200が処理する3点DFT/IDFT、5点DFT/IDFT、9点DFT/IDFT、15点DFT/IDFTのデータフローのそれぞれを、図11、図12、図13、図14に示す。
なお、DFTとIDFTは、後述の乗算係数を変えるだけで、その他は同じデータフローで処理することができる。このため、本説明では、各点数のDFTとIDFTを、それぞれの点数について、1つの図、すなわち、3点DFT/IDFTを図11、5点DFT/IDFTを図12、9点DFT/IDFTを図13、15点DFT/IDFTを図14を用いて説明する。
図11、図12、図13、図14において、矢印が重なる箇所は加算を示し、“−”で示すボックスは、そこを通過した信号の符号を反転することを意味し、“i”で示すボックスは、そこを通過した信号に純虚数を乗算することを示し、“×”で示す記号は、そこを通過する信号と、×記号の上部に矢印で示された乗算係数と、を乗算することを示す。
また、15点DFT/IDFTは、処理の途中で並べ替えを行う必要があるが、その処理は、図14の“並べ替え”と記載された箇所で行われる。
また、各DFT/IDFTの入力Xおよび出力Yのインデクスは、数1で示した式のX、Yのインデクスに対応する。
次に、入力される信号について説明する。
演算装置200に入力されるデータは、複素数データであり、実数部と虚数部は、それぞれ、浮動小数形式で表されたデータであるものとする。
また、本ユニットに入力される制御信号C_sigは、図15に記載のフォーマットを使用する。図15に示したとおり、C_sigは、DFT/IDFTの3、5、9、15点のいずれかを2ビットで示す点数信号と、点数信号で示されたDFT/IDFTが開始されてから経過したクロック数を3ビットで示すクロック数信号と、制御信号で行う処理がDFTであるのかIDFTであるのかを1ビットで示すDFT/IDFT選択信号と、を含む。なお、点数信号とDFT/IDFT点数の対応、および、DFT/IDFT選択信号とDFT、IDFTの対応は、図16に示すとおりである。
次に、図6に記載のオフセットテーブル702の構成を図17に示す。
オフセットテーブル702は、図15に示す点数信号をアドレスとして用い、各アドレスが示す内容には、乗算係数メモリ704、705にアクセスするためのオフセットが格納されている。すなわち、外部よりオフセットテーブル702に点数信号が入力されると、それに対応したオフセットがオフセットテーブル702より読み出され、オフセットテーブル702の外部へと出力される。
次に、DFT乗算係数メモリ704、及びIDFT乗算係数メモリ705について図18を用いて説明する。
図18に示すように、DFT乗算係数メモリ704およびIDFT乗算係数メモリ705は、それぞれ4つのメモリを持つ。また、これら4つのメモリにアドレスが入力されると、図18の“アドレス”に記載の値に対応した行の、各メモリに格納された4つの値が読み出され、図6のmult_cf1, mult_cf2, mult_cf3, mult_cf4として、それぞれ出力される。
例として、DFT乗算係数メモリ704にアドレス“2”が入力されたとすると、メモリ1からは0.559017、メモリ2からは1.538842、メモリ3からは-0.36327、メモリ4からは-0.58779が読み出される。
なお、図18には、図11、図12、図13、図14に示した乗算係数の係数名も併記した。また、表内の斜線は、その箇所に値が格納されていないことを示すものである。さらに、DFT乗算係数メモリおよびIDFT乗算係数メモリの4つのメモリに入力されるアドレスとは、クロック数信号と、オフセットテーブル702から読み出されたオフセット値と、を加算したものである。
演算装置200への3点、5点、9点、15点のDFT/IDFTのデータの入力フォーマットを、図19を用いて説明する。
図19は、3点、5点、9点、15点DFT/IDFTの入力XをDFT/IDFT回路に入力して、出力Yを得る様子を示した図である。
なお、入力Xの上部に示したCは、制御信号を示しており、C(DFT/IDFT選択信号値、クロック数、点数信号)のフォーマットとなっている。なお、本説明においては、DFTを例として説明を行うが、IDFTは後述する乗算ユニット部以外はDFTと同一の処理であるため、説明を省略する。
なお、5点DFT/IDFTについて、演算装置200では3つの系列を同時に行うことができる。
ここで、系列とは、図12に示す処理を1回分とする処理である。よって、3つの系列とは、図12に示す処理を3つ同時に行うことを意味する。
以下では3つの系列のそれぞれを、系列0、系列1、系列2として呼ぶこととする。
図19のXの()内のインデクスは、(図12の各信号に付されたインデクス、系列番号)を示している。例として、X(0,0)は、系列0のX0を示すものである。
(3点DFT/IDFT)
次に、演算装置200による3点DFT/IDFTの処理を説明する。
図20を用いて、前段第一加算ユニット204の処理を説明する。なお、図20において、何も記述されていない箇所の値は0値をとるものとし、以降に示すタイムチャートも同様であるとする。
前段第一加算ユニット204では、図11に示すb0、b1、b2を算出する処理を、1サイクルで行う。
具体的には、入力されたC_sigに従って、クロスバ(Xbar)31が、sel1としてX(0)を、sel3としてX(1)を、sel4としてX(2)を出力する。
次に、加算器35がb0を出力し、加算器32がb1を出力し、加算器33がb2を出力する。
最後に、Xbar37が、制御信号C_sigに従って、b0をout1に出力し、b1をout2に出力し、b2をout3に出力する。
このように、Xbarおよびセレクタは、入力されたC_sigによって、入力の出力先を変更する。以下では、各Xbarやセレクタの詳しい説明は省略し、信号名に出力される信号値のみを説明中で示すこととする。
図21を用いて、前段転置ユニット205の処理を説明する。
前段転置ユニット205では、まず、入力されたデータin1、in2、in3を、クロスバ(Xbar)41が、D_Sel_1_1、D_Sel_1_2、D_Sel_1_3として出力する。
次に、クロスバ(Xbar)42が、D_Sel_1_1からD_Sel_1_3を、それぞれSel_2_1からSel_2_3として出力し、クロスバ(Xbar)43が、out1、out2、out3を出力する。
図22を用いて、前段第二加算ユニット206の処理内容を説明する。
前段転置ユニット205では、特に加算処理を行わず、入力されたデータを遅延回路Dによって遅延させ、次のユニットに出力する。
図23を用いて、前段第三加算ユニット207の処理内容を説明する。
前段第三加算ユニット207では、特に加算処理を行わず、入力されたデータをスルーさせ、次のユニットに出力する。
図24を用いて、制御ユニット209、乗算器208の処理内容を説明する。
制御ユニット209は、1サイクル目で乗算係数T_3_1およびT_3_2を読み出し、乗算器208は、それをb1、b2に乗算して、out2、out3に出力する。なお、乗算器208は、b0には、特に係数を乗算せず、out1として出力する。
図25を用いて、後段第一加算ユニット210の処理内容を説明する。
後段第一加算ユニット210は、特に処理を行わず、入力データin1、in2、in3を、それぞれsel1、sel2、sel3として出力し、それをout1、out2、out3として出力する。
図26を用いて、後段第二加算ユニット211の処理内容を説明する。
後段第二加算ユニット211は、特に加算処理を行わないが、入力されたデータを2クロック遅延させて出力する。具体的には、後段第二加算ユニット211は、入力データin1、in2、in3をそれぞれregr2、regr5、regr7として出力し、さらに、それらをsel1、sel4、sel7として出力する。その後、各加算器82および84は、それぞれ、sel4、sel7に0を加算することによって、sel4、sel7と同じ値のadd_s1、add_s2を出力する。最終的にout1、out2、out3が出力される。
図27を用いて、後段転置ユニット212の処理内容を説明する。
後段転置ユニット212では、入力されたデータin1、in2、in3を、Sel_1_1、Sel_1_2、Sel_1_3として出力し、その後、遅延回路Dによって遅延された信号を、クロスバ(Xbar)1002が、Sel_2_1、Sel_2_2、Sel_2_3として出力する。
このとき、後段転置ユニット212は、特に入力されたデータを入れ替える処理などは行わない。その後、それぞれの信号は、D_Sel_2_1、D_Sel_2_2、D_Sel_2_3として出力され、その後、クロスバ(Xbar)1004およびSel_4_1、Sel_4_2、Sel_4_3を通過してout1、out2、out3として出力される。
図28を用いて、後段第三加算ユニット213の処理内容を説明する。
後段第三加算ユニット213では、入力されたデータを1クロック遅延させた上で加算処理を行う。具体的には、入力データin1、in2、in3は、それぞれ、regr2、regr3、reg4として出力される。その後、加算器1102がm0+m1の計算を行い、加算器1107がm0+m1-m2の計算を行う。また、m0はsel5として出力される。最後に、クロスバ(Xbar)1108から、3点DFT/IDFT結果y0、y1およびy2が、それぞれ、out1、out2、out3として出力される。
このように、演算装置200は、3点DFT/IDFTを指示する制御信号を受け付けると、3点DFT/IDFTを実行する。
(5点DFT/IDFT)
次に、演算装置200による5点DFT/IDFTの処理を説明する。
図29を用いて、前段第一加算ユニット204の処理内容を説明する。
前段第一加算ユニット204は、特に加算処理を行わず、データをスルーして出力する。具体的には、前段第一加算ユニット204は、入力データin1、in2、in3を、それぞれ、sel6、sel7、sel8として出力する。また、制御信号は、第1サイクル目より1クロックずつ順に出力される。
図30を用いて、前段転置ユニット205の処理内容を説明する。
前段転置ユニット205は、5点DFT/IDFTのデータの転置処理を行う。
具体的には、第1サイクルにおいて、in1、in2、in3として入力されたデータX(0,0)、X(0,1)、X(0,2)が、それぞれ、Sel_1_5、Sel_1_6、Sel_1_7として出力され、遅延回路Dに入力される。
次に、第2サイクルにおいては、in1、in2、in3として入力されたデータX(1,0)、X(1,1)、X(1,2)が、それぞれ、Sel_1_1、Sel_1_2、Sel_1_4として出力され、遅延回路Dに入力される。
次に、第3サイクルにおいては、in1、in2、in3として入力されたデータX(2,0)、X(2,1)、X(2,2)が、それぞれ、Sel_1_1、Sel_1_2、Sel_1_4として出力され、遅延回路Dに入力される。
次に、第4サイクルにおいては、in1、in2、in3として入力されたデータX(3,0)、X(3,1)、X(3,2)が、それぞれ、Sel_1_1、Sel_1_2、Sel_1_4として出力され、遅延回路Dに入力される。
次に、第5サイクルにおいては、in1、in2、in3として入力されたデータX(4,0)、X(4,1)、X(4,2)が、それぞれ、Sel_1_1、Sel_1_2、Sel_1_4として出力され、遅延回路Dに入力される。同時に、D_Sel_1_1として、C(0,01,1)と統合されたX(1,0)が出力され、これはSel_2_1として出力される。
次に、第6サイクルにおいては、D_Sel_1_1、D_Sel_1_2として、C(0,01,2)と統合されたX(2,0)、C(0,01,1)と統合されたX(1,1)が、それぞれ、出力される。このうち、C(0,01,2)と統合されたX(2,0)は、Sel_2_2として出力される。一方、C(0,01,1)と統合されたX(1,1)は、Sel_2_1として出力される。このように、前段転置ユニット205は、入力されたデータの順序を入れ替えて出力する。
次に、第7サイクルにおいては、D_Sel_1_1、D_Sel_1_2として、C(0,01,3)と統合されたX(3,0)、C(0,01,1)と統合されたX(2,1)が、それぞれ、出力される。また、C(0,01,3)と統合されたX(3,0)は、Sel_2_3として出力される。C(0,01,1)と統合されたX(2,1)は、Sel_2_2として出力される。
次に、第8サイクルにおいては、D_Sel_1_1、D_Sel_1_2、D_Sel_1_4として、C(0,01,4)と統合されたX(4,0)、C(0,01,1)と統合されたX(3,1)、 C(0,01,1)と統合されたX(1,2)が、それぞれ、出力される。また、C(0,01,4)と統合されたX(4,0)は、Sel_2_4として出力される。C(0,01,1)と統合されたX(3,1)は、Sel_2_3として出力される。C(0,01,1)と統合されたX(1,2)は、Sel_2_1として出力される。
次に、第9サイクルにおいては、D_Sel_1_2、D_Sel_1_4として、C(0,01,1)と統合されたX(4,1)、C(0,01,1)と統合されたX(2,2)が、それぞれ、出力される。また、C(0,01,1)と統合されたX(4,1)は、Sel_2_4として出力される。C(0,01,1)と統合されたX(2,2)は、Sel_2_2として出力される。
次に、第10サイクルおいては、D_Sel_1_4として、C(0,01,1)と統合されたX(3,2)が出力される。ここで、このデータはSel_2_3としても出力される。
次に、第11サイクルにおいては、D_Sel_1_4として、C(0,01,1)と統合されたX(4,2)が出力される。ここで、このデータは、Sel_2_4としても出力される。また、同時にSel_3_1として、C(0,01,1)と統合されたX(1,0)が出力され、Sel_3_2として、C(0,01,2)と統合されたX(2,0)が出力され、Sel_3_3として、C(0,01,3)と統合されたX(3,0)が出力され、 Sel_3_4として、C(0,01,4)と統合されたX(4,0)が出力される。これらデータからは制御信号が分離され、データだけがoutとして出力される。すなわち、out1としてX(1,0)が出力され、out2としてX(2,0)が出力され、out3としてX(3,0)が出力され、out4としてX(4,0)が出力される。さらに、C_outとしてC(0,01,0)が出力される。
次に、第12サイクルにおいては、Sel_3_1として、C(0,01,1)と統合されたX(1,1)が出力される。また、Sel_3_2として、C(0,01,2)と統合されたX(2,1)が出力される。また、Sel_3_3として、C(0,01,3)と統合されたX(3,1)が出力される。また、Sel_3_4として、C(0,01,4)と統合されたX(4,1)が出力される。これらデータからは制御信号が分離され、データだけがoutとして出力される。すなわち、out1としてX(1,1)が出力され、out2としてX(2,1)が出力され、out3としてX(3,1)が出力され、out4としてX(4,1)が出力される。さらに、C_outとして、C(0,01,1)が出力される。
次に、第13サイクルにおいては、Sel_3_1として、C(0,01,0)と統合されたX(0,0)が出力される。また、Sel_3_2として、C(0,01,1)と統合されたX(0,1)が出力される。これらデータからは制御信号が分離され、データだけがoutとして出力される。すなわち、out1としてX(0,0)が出力され、out2としてX(0,1)が出力される。さらに、C_outとしてC(0,01,2)が出力される。
次に、第14サイクルにおいては、Sel_3_1として、C(0,01,1)と統合されたX(1,2)が出力される。また、Sel_3_2として、C(0,01,2)と統合されたX(2,2)が出力される。また、Sel_3_3として、C(0,01,3)と統合されたX(3,2)が出力される、また、Sel_3_4としてC(0,01,4)と統合されたX(4,2)が出力される。これらデータからは制御信号が分離され、データだけがoutとして出力される。すなわち、out1としてX(1,2)が出力され、out2としてX(2,2)が出力され、out3としてX(3,2)が出力され、out4としてX(4,2)が出力される。
さらに、C_outとしてC(0,01,3)が出力される。
最後に、第15サイクルにおいては、Sel_3_1として、C(0,01,0)と統合されたX(0,2)が出力される。このデータからは制御信号が分離され、データだけがoutとして出力される。すなわち、out1として、X(0,2)が出力される。さらに、C_outとしてC(0,01,4)が出力される。
また、制御信号は、第11サイクル目より、1クロックごとに1つずつ出力される。
図31を用いて、前段第二加算ユニット206の処理内容を説明する。
前段第二加算ユニット206は、図12に示したa0、a1、a2、a3、a4を算出する処理を行う。
具体的には、前段第二加算ユニット206での5点DFT/IDFT用処理での2サイクル目に、regr1、regr3、regr4、 regr5として、それぞれ、X(1,0)、X(2,0)、X(3,0)、X(4,0)が出力される。また、加算器52がX(1,0)+X(2,0)を計算し、その計算結果a1(0)をout1として出力する。また、加算器53がX(1,0)-X(2,0)を計算し、その計算結果a4(0)をout2として出力する。また、加算器54がX(3,0)+X(4,0)を計算し、その計算結果a2(0)をout3として出力する。また、加算器55がX(3,0)-X(4,0)を計算し、その計算結果a3(0)をout4として出力する。ここで、aに付随する()内の数字は系列番号を示す。例として、a1(0)は、系列0の入力Xの途中計算結果a1であることを示す。
3サイクル目では2サイクル目と同様の処理が行われ、a1(1)、a4(1)、a2(1)、a3(1)が出力される。
4サイクル目では、前段第二加算ユニット206は、a(0)、a(1)を出力する。具体的には、regr1、regr3として、それぞれ、X(0,0)、X(0,1)が出力される。それらは、それぞれsel1、sel4として出力される。加算器52および加算器53は、それぞれ、sel1、sel4に0を加算し、その加算された値を、out1、out2として出力する。
5サイクル目では、2、3サイクル目と同様の処理が行われ、a1(2)、a4(2)、a2(2)、a3(2)が出力される。
6サイクル目では、a(2)が出力される。具体的には、regr1としてX(0,2)が出力され、X(0,2)がsel1として出力され、加算器52が、sel1に0を加算し、その加算結果をout1として出力する。
また、制御信号は、第2サイクル目より1クロックごとに1つずつ出力される。
図32を用いて、前段第三加算ユニット207の処理内容を説明する。
前段第三加算ユニット207では、図12に示したc0からc5を算出する処理を行う。
具体的には、第1サイクル目において、加算器62は、a1(0)-a2(0)を行って算出結果c2(0)を得て、c2(0)をout1として出力する。また、加算器65は、a3(0)+a(4)を行って算出結果c5(0)を得て、c5(0)をout4として出力する。また、クロスバ61は、a3(0)、a4(0)を、それぞれ、sel4、sel7として出力する。加算器63は、sel4に0を加算し、加算結果c3(0)をout2として出力する。また、加算器64は、sel7に0を加算し、加算結果c4(0)をout3として出力する。
次に、第2サイクル目においては、第1サイクル目と同様の処理が行われ、c2(1)、c3(1)、c4(1)、c5(1)が、それぞれ、out1、out2、out3、out4として出力される。
次に、第3サイクル目においては、in1、in2のデータa0(0)とa0(1)、および、regr1、regr2、regr3、regr4としてそれぞれ出力されるa1(0)、a2(0)、a1(1)、a2(1)を使い、c0(0)、c1(0)、c0(1)、c1(1)が、それぞれ算出される。
具体的には、加算器62が、a0(0)+a1(0)+a2(0)を計算して計算結果c0(0)を得て、c0(0)をout1として出力する。また、加算器63が、a1(0)+a2(0)を計算して計算結果c1(0)を得て、c1(0)をout2として出力する。また、加算器64が、a0(1)+a1(1)+a2(1)を計算して計算結果c0(1)を得て、c0(1)をout3として出力する。また、加算器65が、a1(1)+a2(1)を計算して計算結果c1(1)を得て、c1(1)をout4として出力する。
次に、第4サイクル目においては、第1、2サイクル目と同様の処理が行われ、c2(2)、 c3(2)、c4(2)、c5(2)が、それぞれ、out1、out2、out3、out4として出力される。
最後に、第5サイクル目においては、第3サイクル目と同様のほぼ同様の処理が行われ、c0(2)、c1(2)が得られる。
また、制御信号は、第1サイクル目より1クロックごとに1つずつ出力される。
図33を用いて、制御ユニット209、乗算器208の処理内容を説明する。制御ユニット209と乗算器208では、図12に示したm0からm5までの係数を求める処理を行う。
具体的には、第1サイクル目では、乗算器208は、入力されたc2(0)、c3(0)、c4(0)、c5(0)に、それぞれ、T5_2、T5_3、T_5_4、T5_5の係数を乗算する。さらに、乗算器208は、c3(0)、c4(0)、c5(0)に関しては、上記係数をかけた後に、純虚数を乗算する。以上により、m2(0)、m3(0)、m4(0)、m5(0)が算出され、これらは、それぞれ、out1、out2、out3、out4として出力される。
第2サイクル目では、第1サイクル目と同様の処理が行われ、m2(1)、m3(1)、m4(1)、m5(1)のそれぞれが算出され、これらはout1、out2、out3、out4として出力される。
第3サイクル目では、乗算器208は、入力されたc0(0)、c1(0)、c0(1)、c1(1)に対し、それぞれ、T5_0、T5_1、T5_0、T5_1の係数を乗算する処理を行い、m0(0)、m1(0)、m0(1)、m1(1)を得る。これらはそれぞれ、out1、out2、out3、out4として出力される。
第4サイクル目では、第1サイクル目と同様の処理が行われ、m2(2)、m3(2)、m4(2)、m5(2)が算出され、これらは、それぞれ、out1、out2、out3、out4として出力される。
第5サイクル目では、第3サイクル目と同様の処理が行われ、m0(2)、m1(2)が得られる。これらは、それぞれ、out1、out2として出力される。
また、制御信号は、第1サイクル目より1クロックごとに1つずつ出力される。
図34を用いて、後段第一加算ユニット210の処理内容を説明する。本ユニットでは図12に示したn0からn4を求める処理を行う。
具体的には、第1サイクル目では、m2(0)が、sel1さらに言えばn2(0)として出力される。さらに、加算器82が、m3(0)+m5(0)を計算し、その計算結果n3(0)をadd_s1として出力する。また、加算器83が、m4(0)+m5(0)を計算し、その計算結果n4(0)をadd_s2として出力する。クロスバ85は、n2(0)、n3(0)、n4(0)を、それぞれ、out1、out2、out3として出力する。
第2サイクル目では、第1サイクルと同様の処理が行われ、n2(1)、n3(1)、n4(1)が得られる。これらはそれぞれ、out1、out2、out3として出力される。
第3サイクル目では、sel1、sel2さらに言えばn0(0), n0(1)として、m0(0)、m0(1)がそれぞれ出力される。さらに、加算器82が、m0(0)+m1(0)を計算し、その計算結果n1(0)をadd_s1として出力する。また、加算器83が、m0(1)+m1(1)を計算し、その計算結果n1(1)をadd_s2として出力する。クロスバ85は、n0(0)、n0(1)、n1(0)、n1(1)を、それぞれ、out1、out2、out3、out4に出力する。
第4サイクル目では、第1、2サイクル目と同様の処理が行われ、n2(2)、n3(2)、n4(2)が得られる。これらはそれぞれ、out1、out2、out3として出力される。
第5サイクル目では、第3サイクル目と同様の処理が行われ、n0(2)、n1(2)が得られる。これらはそれぞれ、out1、out2として出力される。
また、制御信号は、第1サイクル目より、1クロックごとに1つずつ出力される。
図35を用いて、後段第二加算ユニット211の処理内容を説明する。
後段第二加算ユニット211では、図12に示したy0からy4を計算する。
具体的には、後段第二加算ユニット211は、第1サイクル目、第2サイクル目では、特に加算処理を行わず、第3サイクル目において、加算器902がn1(0)+n2(0)+n4(0)を計算し、その計算結果y1(0)をadd_s1として出力する。また、加算器903がn1(0)+n2(0)-n4(0)を計算し、その計算結果y4(0)をadd_s2として出力する。また、加算器904がn1(0)-n2(0)+n3(0)を計算し、その計算結果y2(0)をadd_s3として出力する。また、加算器905がn1(0)-n2(0)-n3(0)を計算し、その計算結果y3(0)をadd_s4として出力する。これらはそれぞれ、out1、out2、out3、out4として出力される。
第4サイクル目においては、第3サイクル目と同様の処理が行われ、y(1,1)、y(4,1)、y(2,1)、y(3,1)が得られる。これらはそれぞれ、out1、out2、out3、out4として出力される。
第5サイクル目においては、第3、4サイクル目と同様の処理が行われ、y(1,2)、y(4,2)、y(2,2)、y(3,2)が得られる。これらはそれぞれ、out1、out2、out3、out4として出力される。
第6サイクル目においては、sel1、sel4、sel7として、それぞれ、n0(0)、n0(1)、n0(2)が出力される。また、加算器902は、sel1に0を加算し、その加算結果y(0,0)をadd_s1として出力する。また、加算器903は、sel4に0を加算し、その加算結果y(0,1)をadd_s2として出力する。また、加算器904は、sel7に0を加算し、その加算結果y(0,2)をadd_s3として出力する。これらはそれぞれ、out1、out2、out3として出力される。
また、制御信号は、第3サイクル目より1クロックごとに1つずつ出力される。
図36を用いて、後段転置ユニット212の処理内容を説明する。
後段転置ユニット212は、入力されたデータを並べ替える処理を行う。
具体的には、第1サイクル目では、入力されたy(1,0)、y(4,0)、y(2,0)、y(3,0)は、それぞれ、制御信号C(0,01,0)と統合され、Sel_1_1、Sel_1_2、Sel_1_3、Sel_1_4として出力される。また、y(1,0)は、Sel_2_1として出力される。
第2サイクル目では、入力されたy(1,1)、y(4,1)、y(2,1)、y(3,1)は、それぞれ、制御信号C(0,01,1)と統合され、Sel_1_1、Sel_1_2、Sel_1_3、Sel_1_4として出力される。また、D_Sel_1_1として、C(0,01,0)と統合されたy(4,0)が出力され、このデータは、さらにSel_2_1としても出力される。一方、Sel_1_1として出力されたy(1,1)は、Sel_2_2としても出力される。
第3サイクル目では、入力されたy(1,2)、y(4,2)、y(2,2)、y(3,2)は、それぞれ、制御信号C(0,01,2)と統合され、Sel_1_1、Sel_1_2、Sel_1_3、Sel_1_4として出力される。また、D_Sel_1_1、D_Sel_1_2として、それぞれ、C(0,01,1)と統合されたy(4,1)、C(0,01,0)と統合されたy(2,0)が出力される。さらに、Sel_2_1、Sel_2_2、Sel_2_3として、それぞれ、C(0,01,0)と統合されたy(2,0)、C(0,01,1)と統合されたy(4,1)、C(0,01,2)と統合されたy(1,2)が出力される。
第4サイクル目では、入力されたy(0,0)、y(0,1)、y(0,2)は、それぞれ、制御信号C(0,01,3)と統合され、Sel_1_5、Sel_1_6、Sel_1_7として出力され、その後、Sel_4_1、Sel_4_2、Sel_4_3として出力される。これらの信号では、制御信号とデータが分離され、データだけがoutとして出力される。すなわち、y(0,0)、y(0,1)、y(0,2)が、それぞれ、out1、out2、out3として出力される。一方、D_Sel_1_1、D_Sel_1_2、D_Sel_1_3としては、それぞれ、C(0,01,2)と統合されたy(4,2)、C(0,01,1)と統合されたy(2,1)、C(0,01,0)と統合されたy(3,0)が出力される。これらは、それぞれ、Sel_2_3、Sel_2_2、Sel_2_1として出力される。さらに、D_Sel_2_1、D_Sel_2_2、D_Sel_2_3として、C(0,01,0)と統合されたy(1,0)、C(0,01,1)と統合されたy(1,1)、C(0,01,2)と統合されたy(1,2)が出力され、これらはそれぞれSel_3_1、 Sel_3_2、Sel_3_3として出力される。
第5サイクル目では、D_Sel_1_2、D_Sel_1_3として、それぞれ、C(0,01,2)と統合されたy(2,2)、C(0,01,1)と統合されたy(3,1)が出力され、これらはそれぞれ、Sel_2_3、 Sel_2_2として出力される。一方、D_Sel_2_1、D_Sel_2_2、D_Sel_2_3としては、C(0,01,0)と統合されたy(4,0)、C(0,01,1)と統合されたy(4,1)、C(0,01,2)と統合されたy(4,2)が出力され、これらはそれぞれ、Sel_3_1、Sel_3_2、Sel_3_3として出力される。さらに、Sel_4_1、Sel_4_2、Sel_4_3としては、それぞれ、C(0,01,0)と統合されたy(1,0)、C(0,01,1)と統合されたy(1,1)、C(0,01,2)と統合されたy(1,2)が出力される。これらの信号では制御信号とデータが分離され、データだけがoutとして出力される。すなわち、y(1,0)、y(1,1)、y(1,2)が、out1、out2、out3として出力される。
第6サイクル目では、D_Sel_1_3として、C(0,01,2)と統合されたy(3,2)が出力され、これはSel_2_3として出力される。また、D_Sel_2_1、D_Sel_2_2、D_Sel_2_3としては、C(0,01,0)と統合されたy(2,0)、C(0,01,1)と統合されたy(2,1)、C(0,01,2)と統合されたy(2,2)が出力され、これらはそれぞれ、Sel_3_1、Sel_3_2、Sel_3_3として出力される。さらに、Sel_4_1、Sel_4_2、Sel_4_3としては、それぞれ、C(0,01,0)と統合されたy(4,0)、C(0,01,1)と統合されたy(4,1)、C(0,01,2)と統合されたy(4,2)が出力される。これらの信号では、制御信号とデータが分離され、データだけがoutとして出力される。すなわち、y(4,0)、y(4,1)、y(4,2)が、out1、out2、out3として出力される。
第7サイクル目では、D_Sel_2_1、D_Sel_2_2、D_Sel_2_3として、C(0,01,0)と統合されたy(3,0)、C(0,01,1)と統合されたy(3,1)、C(0,01,2)と統合されたy(3,2)が出力され、これらはそれぞれSel_3_1、Sel_3_2、Sel_3_3として出力される。さらに、Sel_4_1、Sel_4_2、Sel_4_3としては、それぞれ、C(0,01,0)と統合されたy(2,0)、C(0,01,1)と統合されたy(2,1)、C(0,01,2)と統合されたy(2,2)が出力される。これらの信号では、制御信号とデータが分離され、データだけがoutとして出力される。すなわち、y(2,0)、y(2,1)、y(2,2)が、out1、out2、out3に出力される。
第8サイクル目では、Sel_4_1、Sel_4_2、Sel_4_3として、それぞれ、C(0,01,0)と統合されたy(3,0)、C(0,01,1)と統合されたy(3,1)、C(0,01,2)と統合されたy(3,2)が出力される。これらの信号では、制御信号とデータが分離され、データだけがoutとして出力される。すなわち、y(3,0)、y(3,1)、y(3,2)が、out1、out2、out3として出力される。
また、制御信号は、4サイクル目より、1クロックごとに1つずつ出力される。
図37を用いて、後段第三加算ユニット213の処理内容を説明する。
後段第三加算ユニット213では、入力されたデータを1クロックの遅延をつけて出力するだけで、特に加算処理を行わない。具体的には、遅延回路Dによって1クロック遅延されたin1、in2、in3のデータが、sel5、sel6、sel7として出力され、その後、out1、out2、out3として出力される。
このように、演算装置200は、5点DFT/IDFTを指示する制御信号を受け付けると、5点DFT/IDFTを実行する。
(9点DFT/IDFT)
次に、演算装置200による9点DFT/IDFTの処理を説明する。
図38を用いて、前段第一加算ユニット204の処理内容を説明する。
前段第一加算ユニット204は、図13に示したa1からa8の係数を算出する処理を行う。
具体的には、第1サイクル目では、加算器35および加算器36が、それぞれ、X(1)+X(8)、X(1)-X(8)の処理を行うことにより、a1、a2を算出し、それらを、out1、out2として出力する。
次に、第2サイクル目では、加算器32、加算器33、加算器35、および、加算器36が、それぞれ、X(4)+X(5)、X(4)-X(5)、X(2)+X(7)、X(2)-X(7)を行うことにより、a3、a4、a5、a6をそれぞれ算出する。これらデータは、それぞれ、out1、out2、out3、out4として出力される。
次に第3サイクル目では、加算器35および加算器36が、それぞれ、X(3)+X(6)、X(3)-X(6)を計算し、a7、a8を得る。これらはout3、out4として出力される。さらに、X(0)がsel6として出力され、その後、out1として出力する。
図39を用いて、前段転置ユニット205の処理内容を説明する。
前段転置ユニット205は、特にデータの並べ替え処理などは行わずに、入力されたデータを出力する。具体的には、 in1、in2、in3、in4として入力されたデータは、それぞれ、Sel_1_1、Sel_1_2、Sel_1_3、Sel_1_4として出力され、次に、Sel_2_1、Sel_2_2、Sel_2_3、Sel_2_4として出力され、さらに、D_dt_1、D_dt_2、D_dt3、D_dt_4として出力され、最後にout1、out2、out3、out4として出力される。
図40を用いて、前段第二加算ユニット206の処理内容を説明する。
前段第二加算ユニット206は、図13に示したa7'、a8'、および、a9からa16を算出する処理を行う。
具体的には、第1サイクル目では、加算処理が行われず、第2サイクル目において、加算器52、加算器53、加算器54、加算器55が、それぞれ、a1+a3+a5、a5-a1、a1-a3、a5-a3を計算して、算出結果a15、a9、a10、a11を出力する。それらはout1、out2、out3、out4として出力される。
次に、第3サイクル目において、加算器52、加算器53、加算器54、加算器55が、それぞれ、a6-a4+a2、-a6-a4、a2-a6、a2-a4を計算して、算出結果a16、a14、a12、a13を出力する。これらはout1、out2、out3、out4として出力される。
最後に、第4サイクル目においては、X0'、a7、a8は、それぞれ、sel1、sel4、sel6として出力され、その後、加算器52、加算器53、加算器54において0が加算され、その後、それぞれ、out1、out2、out3として出力される。
図41を用いて、前段第三加算ユニット207の処理内容を説明する。本処理では、図 13に示したa17が算出される。
具体的には、第1サイクル目においては、入力されたデータin1、in2、in3、in4が、それぞれ、sel1、sel4、sel6、sel9として出力され、その後、加算器62、加算器63、加算器64、加算器65にて0と加算され、その後、それぞれ、out1、out2、out3、out4として出力される。
第2サイクル目においては、第1サイクル目と同様の処理が行われる。
第3サイクル目においては、加算器62が、a15+x0''+a7'を行い、加算結果a17をout1として出力する。さらに、x0''、a7'、a8が、第1、第2サイクル目と同様の方法で、それぞれ、out2、out3、out4として出力される。
図42を用いて、制御ユニット209、乗算器208の処理内容を説明する。
制御ユニット209と乗算器208は、図13においてmで示された係数を算出する処理を行う。
具体的には、第1サイクル目において、乗算器208は、a15'、a9'、a10'、a11'と乗算係数T9_9、T9_1、T9_2、T9_3の乗算処理を行い、それぞれ、算出結果m9、m1、m2、m3を出力する。これらはそれぞれout2、out3、out4、out5として出力される。
第2サイクル目においては、第1サイクル目と同様の処理が行われ、m10、m6、m4、m5という係数が得られる。
第3サイクル目においては、第1、2サイクル目と同様の処理が行われ、a7'''、m7、m8、a17'という係数が得られる。さらに、X0'''係数が、sel1として出力され、その後、out1として出力される。
図43を用いて、後段第一加算ユニット210の処理内容を説明する。
後段第一加算ユニット210は、図13におけるc、および、xa0で示される係数を求める処理を行う。
具体的には、第1サイクル目において、m9が、sel1として出力され、その後out1として出力される。さらに、加算器82、加算器83、加算器84が、それぞれ、m1+m2、m2-m3、m1+m3を計算し、それぞれ、計算結果c4、c2、c3を得る。これらは、それぞれ、out2、out3、out4として出力される。
第2サイクル目においては、m10が、sel1として出力され、その後out1として出力される。さらに、加算器82、加算器83、加算器84が、それぞれ、m4-m6、m5-m6、m4-m5を計算し、それぞれ、計算結果c8、c9、c10を得る。これらは、それぞれ、out2、out3、out4として出力される。
第3サイクル目においては、m8、a17'が、それぞれ、sel1、sel2として出力され、その後out1、out2として出力される。さらに、加算器82、加算器83が、それぞれ、x0''''-m7、x0''''+a7'''を計算し、それぞれ、計算結果c1、xa0を得る。これらは、それぞれ、out3、out4として出力される。
図44を用いて、後段第二加算ユニット211の処理内容を説明する。
後段第二加算ユニット211は、図13に示した、c7、c6、c5、c14、c11*i、c12*i、c13*i、および、m10''*iを算出する処理を行う。
具体的には、第1サイクル、第2サイクル目では、特に加算処理は行われず、第3サイクル目において、加算器902がc1-c4-c2を行い、加算器903がc1+4+c3を行い、加算器904がc1+c2-c3を行い、加算器905がxa0-m9'を行い、それぞれ、c7、c6、c5、c14を得る。これらは、out1、out2、out3、out4にそれぞれ出力される。
第4サイクル目においては、加算器902がc8+c9+m8'を計算し、加算器903がc8+c10-m8'を計算し、加算器904が-c9+c10+m8'を計算する。さらに、これらに対して、純虚数乗算器906、907、908が、それぞれ、純虚数を乗算し、その乗算結果を、それぞれ、out1、out2、ou3として出力する。
第5サイクル目においては、a17''、m10'が、それぞれ、sel1、sel4として出力され、その後、加算器902、903にて0が加算されて出力される。さらに、これらに対して、純虚数乗算器906、907が、それぞれ、純虚数を乗算し、その乗算結果を、それぞれout1、out2として出力する。
図45を用いて、後段転置ユニット212の処理内容について説明する。
後段転置ユニット212は、特に、入力されたデータの並べ替え処理などを行わない。
具体的には、in1、in2、in3、in4として入力されたデータは、それぞれ、Sel_1_1、Sel_1_2、Sel_1_3、Sel_1_4として出力され、次に、Sel_2_1、Sel_2_2、Sel_2_3、Sel_2_4として出力され、さらに、Sel_1_1、Sel_4_2、Sel_4_3、Sel_4_4として出力され、最後にout1、out2、out3、out4として出力される。
図46を用いて、後段第三加算ユニット213の処理内容を説明する。
後段第三加算ユニット213は、図13においてyで示される出力を算出する。
具体的には、第1サイクル目では特に加算処理は行われず、第2サイクル目において、加算器1102、加算器1103、加算器1106、加算器1107が、それぞれ、c5+c11*i、c5-c11*i、c6+c12*i、c6-c12*iを計算し、計算結果y8、y1、y7、y2を得る。これらは、それぞれ、out1、out2、out3、out4として出力される。
第3サイクル目では、第2サイクル目と同様の処理が行われ、y5、y4、y6、y3が計算され、それぞれ、out1、out2、out3、out4として出力される。
第4サイクル目では、a17'''が、sel5として出力され、その後、out1として出力される。
このように、演算装置200は、9点DFT/IDFTを指示する制御信号を受け付けると、9点DFT/IDFTを実行する。
(15点DFT/IDFT)
次に、演算装置200による15点DFT/IDFT処理内容を説明する。ここで、15点DFT/IDFTは、乗算ユニットを除いては、3点DFT/IDFT処理及び5点DFT/IDFT処理の組み合わせで行うことができる。よって以降では、乗算ユニット以外のユニットでは3点DFT/IDFT、5点DFT/IDFTのどちらの処理を行うかについて示し、詳細な説明は省略する。
まず、前段第一加算ユニット204は、3点DFT/IDFTの処理を行う。ここで、3点DFT/IDFTでは、1サイクルで入出力が完了するのに対し、15点DFT/IDFTでは、3点DFT/IDFTの処理を5サイクル分繰り返して計算及び出力が行われる。
前段転置ユニット205は、5点DFT/IDFTの処理を行う。
前段第二加算ユニット206は、5点DFT/IDFTの処理を行う。
前段第三加算ユニット207は、5点DFT/IDFTの処理を行う。
図47を用いて、制御ユニット209、乗算器208の処理内容の説明を行う。
制御ユニット209と乗算器208は、図14においてeで示される係数に乗算係数をかけ、mで示される係数を算出する処理を行う。
具体的には、第1サイクル目では、乗算器208は、e2に対してT15_2を乗算し、m2係数を得る。これはout1として出力される。同時に、e3、e4、e5係数が入力され、乗算器208は、これらにT15_3、T15_4、T15_5を乗算する。さらに、これら係数に関しては、純虚数を乗算する処理を純虚数乗算器907、908、909が行いm3、m4、m5を得る。これらは、out2、out3、out4として出力される。
第2サイクル目では、第1サイクル目と同様の処理が行われ、m8、m9、m10、m11係数が得られる。これらは、それぞれ、out1、out2、out3、out4として出力される。
第3サイクル目では、e0、e1、e6、e7係数が入力され、それぞれにT15_0、T15_1、T15_6、T15_7が乗算され、m0、m1、m6、m7が算出される。これらはそれぞれ、out1、out2、out3、out4として出力される。
第4サイクル目では、e15、e16、e17係数が入力され、これらにT15_15、T15_16、T15_17が乗算され、m15、m16、m17が算出される。これらはout2、out3、out4として出力される。同時にe14が入力され、これにT15_14係数が乗算される。さらに、純虚数乗算器906が、その乗算結果に純虚数を乗算し、その乗算結果をout1として出力する。
第5サイクル目には、e12、e13係数が入力され、これにT15_12、T15_13係数が乗算される。さらに、純虚数乗算器906、907が、それぞれ、その乗算結果に純虚数を乗算し、その乗算結果を、out1、out2として出力する。
後段第一加算ユニット210は、5点DFT/IDFTの処理を行う。
後段第二加算ユニット211は、5点DFT/IDFTの処理を行う。
後段転置ユニット212は、5点DFT/IDFTの処理を行う。
後段第三加算ユニット213は、3点DFT/IDFTの処理を行う。
このように、演算装置200は、15点DFT/IDFTを指示する制御信号を受け付けると、15点DFT/IDFTを実行する。
(その他の実施形態)
図28に本発明の第2実施形態を示す。本実施形態は、離散フーリエ変換装置(演算装置)200と、離散フーリエ変換装置200を制御するCPU1と、データを格納するメモリユニット2と、を含む。
本実施形態においては、CPU1が、CPU-メモリユニットアドレス信号にて、メモリユニット2にアクセスするアドレスを発行すると、メモリユニット2は、CPU-メモリユニットデータ信号にて、発行されたアドレスに対応したデータをCPU1に出力する。
次に、CPU1は、上記の3、5、9、15点DFT/IDFTの制御信号とともにデータを離散フーリエ変換装置200に出力する。
離散フーリエ変換装置200は、CPU1から制御信号とデータを受け取ると、制御信号に従ってDFT/IDFTを実行し、その結果をCPU1に返す。
このような実施形態においては、離散フーリエ変換装置200がサポートする3、5、9、15点DFT/IDFT以外の点数のDFT/IDFTをCPU1が行うことにより、さらにDFT点数の種類を増やすことができる。
上記各実施形態によれば、3、5、9、15点のDFT/IDFTを共通の回路で処理できる。このため、3、5、9、15点のDFT/IDFTの回路を、それぞれ、個別の回路で構成した場合と比較して、乗算器と加算器の数を削減することができる点である。
また、3、5、9、15点のDFT/IDFTに対し、設計する回路は1つの回路で済む。このため、3、5、9、15点のDFT/IDFTの回路を、それぞれ、個別の回路で構成した場合と比較して、設計及び実装に要する時間が短縮できる。
また、3、5、9、15点という異なる点数のDFT/IDFTが行われても、データが各ユニットに出力されるタイミングを合わせているので、各ユニットは、DFT/IDFTのポイント数に関わらず、予め定められたタイミングで動作することができる。このため、各ユニットの動作開始タイミングを、DFT/IDFTのポイント数に応じて変更するような制御を行うことなく、異なる点数のDFT/IDFTを共通の回路を用いて行うことが可能になる。
[産業上の利用可能性]
本実施形態の活用例として、LTEで必要となる無線信号処理を実行する基地局装置が挙げられる。