(57)【要約】【課題】小さな回路面積で、種々の大きさの行列の積を演算することができる積和演算回路を提供することを課題とする。【解決手段】積和演算回路は、第１の行列及び第２の行列の積の演算を行うことにより第３の行列を出力する積和演算回路であって、複数の乗算器（３０１〜３０８）と、前記複数の乗算器の乗算結果を２個ずつ加算する複数の第１の加算器（３０９〜３１２）と、前記複数の第１の加算器の加算結果を２個ずつ加算する複数の第２の加算器（３１３〜３１４）と、前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記第１の行列の要素及び前記第２の行列の要素を前記複数の乗算器の入力端子に出力する入力セレクタ（３００）と、前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記複数の第１の加算器又は前記複数の第２の加算器の加算結果を選択し、前記第３の行列として出力する出力セレクタ（３１６）とを有する。【選択図】図５
2015055971.tif 000002
【特許請求の範囲】
【請求項１】
第１の行列及び第２の行列の積の演算を行うことにより第３の行列を出力する積和演算回路であって、
複数の乗算器と、
前記複数の乗算器の乗算結果を２個ずつ加算する複数の第１の加算器と、
前記複数の第１の加算器の加算結果を２個ずつ加算する複数の第２の加算器と、
前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記第１の行列の要素及び前記第２の行列の要素を前記複数の乗算器の入力端子に出力する入力セレクタと、
前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記複数の第１の加算器又は前記複数の第２の加算器の加算結果を選択し、前記第３の行列として出力する出力セレクタと
を有することを特徴とする積和演算回路。
【請求項２】
前記第１の行列の行数をＭ、前記第２の行列の列数をＮとすると、
前記入力セレクタは、前記第１の行列の各行の要素をＮ組みずつ前記複数の乗算器の入力端子に出力し、前記第２の行列の各列の要素をＭ組みずつ前記複数の乗算器の入力端子に出力することを特徴とする請求項１記載の積和演算回路。
【請求項３】
前記出力セレクタは、前記第１の行列の行数が２、前記第１の行列の列数及び前記第２の行列の行数が３、前記第２の行列の列数が１の場合、前記複数の第２の加算器の加算結果を選択し、前記第３の行列として出力することを特徴とする請求項１又は２記載の積和演算回路。
【請求項４】
前記出力セレクタは、前記第１の行列の行数が２、前記第１の行列の列数及び前記第２の行列の行数が２、前記第２の行列の列数が２の場合、前記複数の第１の加算器の加算結果を選択し、前記第３の行列として出力することを特徴とする請求項１又は２記載の積和演算回路。
【請求項５】
請求項１〜４のいずれか１項に記載の積和演算回路と、
前記第１の行列及び前記第１の行列を記憶するメモリと、
前記第１の行列及び前記第２の行列の行数及び列数、前記第１の行列及び前記第２の行列が前記メモリに記憶されているアドレスの情報を含む行列積演算命令をデコードし、前記第１の行列及び前記第２の行列の行数及び列数の情報を前記入力セレクタ及び前記出力セレクタに出力するデコーダと、
前記第１の行列及び前記第２の行列が前記メモリに記憶されているアドレスの情報に応じて、前記メモリから前記第１の行列及び前記第２の行列を読み出し、前記入力セレクタに出力するコントローラと
を有することを特徴とする積和演算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、積和演算回路及び積和演算システムに関する。
【背景技術】
【０００２】
行列積の演算を行う積和演算回路が知られている（例えば、特許文献１参照）。所定数の乗算器は、第１の行列の要素を行方向に所定数ごとにグループにした行ベクトルと、第２の行列の要素を列方向に所定数ごとにグループにした列ベクトルとの積算を並列に実行する。乗算器用加算器は、所定の要素数と同じ数量設けられた乗算器の次段に、乗算器の乗算結果を取得して加算をする。加算器用加算器は、乗算器用加算器の次段に、乗算器用加算器の加算結果を取得して加算をする。レイテンシカウンタは、最終段の加算器用加算器のレイテンシを計測する。可変カウンタは、レイテンシカウンタが最終段の加算器用加算器のレイテンシを計測するごとにカウントして、所定の累算回数までカウントすると行列積の演算結果が取得可能状態であることを示す信号を出力する。可変カウンタ設定部は、可変カウンタのカウント値の設定をする。
【０００３】
また、行列演算装置が知られている（例えば、特許文献２参照）。行列演算装置は、演算を行うべき行列の全ての項のデータを複数のマトリクスデータ分割格納メモリに分割して格納し、デコーダの解読結果に従い、複数のマトリクスデータ分割格納メモリから読み出し部により必要なデータを同時に出力する。そして、行列演算装置は、セレクタ部を介して積和演算器へ送り、積和演算を行い、演算結果を出力するとともに書き込み部を介してマトリクスデータ分割格納メモリに書き込む。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２４５２９６号公報
【特許文献２】特開平１０−６３６４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
無線通信の信号処理では、複素行列の積を大量に計算する必要がある。複素行列の積を求めるには多くの乗算器を必要とするため、回路面積及び消費電力が増大してしまう。また、積を求める行列の行数及び列数が一定ではないことが、回路面積増大の要因となる。例として、送受信アンテナ数が４本の場合のチャネル容量の計算を挙げると、４行４列の行列と４行４列の行列との積、３行４列の行列と４行３列の行列との積など、様々な異なる大きさの行列の積を求める必要がある。
【０００６】
LTE(Long Term Evolution)-Advancedの通信規格においては、送受信アンテナ数は最大８本にもなるため、これまでよりさらに多くの異なる大きさの行列の積を求める必要があり、演算量そのものも増加する。
【０００７】
この計算に対する最も単純な解は、異なる大きさの行列の積の演算回路を全てハードウェア実装することである。しかし、この場合、稼働していない演算器が存在することになり、冗長な演算器が存在し、回路面積が増大してしまう。
【０００８】
本発明の目的は、小さな回路面積で、種々の大きさの行列の積を演算することができる積和演算回路及び積和演算システムを提供することである。
【課題を解決するための手段】
【０００９】
積和演算回路は、第１の行列及び第２の行列の積の演算を行うことにより第３の行列を出力する積和演算回路であって、複数の乗算器と、前記複数の乗算器の乗算結果を２個ずつ加算する複数の第１の加算器と、前記複数の第１の加算器の加算結果を２個ずつ加算する複数の第２の加算器と、前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記第１の行列の要素及び前記第２の行列の要素を前記複数の乗算器の入力端子に出力する入力セレクタと、前記第１の行列及び前記第２の行列の行数及び列数に応じて、前記複数の第１の加算器又は前記複数の第２の加算器の加算結果を選択し、前記第３の行列として出力する出力セレクタとを有する。
【発明の効果】
【００１０】
入力セレクタ及び出力セレクタを設けることにより、小さな回路面積で、種々の大きさの行列の積を演算することができる。
【図面の簡単な説明】
【００１１】
【図１】図１は、本実施形態による積和演算システムの構成例を示す図である。
【図２】図２（Ａ）及び（Ｂ）は、積和演算回路の構成例を示す図である。
【図３】図３は、図１の積和演算回路の構成例を示す図である。
【図４】図４は、図１の積和演算回路の他の処理例を示す図である。
【図５】図５は、図３及び図４の積和演算回路のより具体的な構成例を示す図である。
【図６】図６（Ａ）及び（Ｂ）は、積和演算回路の入出力を示す図である。
【図７】図７（Ａ）は入力セレクタの動作を示す図であり、図７（Ｂ）は出力セレクタの動作を示す図である。
【図８】図８（Ａ）は入力値の例を示す図であり、図８（Ｂ）は複素乗算器の構成例を示す図である。
【図９】図９（Ａ）は入力値の例を示す図であり、図９（Ｂ）は複素加算器の構成例を示す図である。
【発明を実施するための形態】
【００１２】
図１は、本実施形態による積和演算システムの構成例を示す図である。積和演算システムは、第１の行列及び第２の行列を積を演算することにより第３の行列を得る。第１の行列及び第２の行列は入力行列であり、第３の行列は出力行列である。第１の行列及び第２の行列は、データメモリ１１４に記憶されている。第３の行列は、演算後、データメモリ１１４に書き込まれる。
【００１３】
命令メモリ１０１は、行列積演算命令１０２を記憶する。行列積演算命令１０２のニーモニックは、例えば、「ｍｘｍｕｌ  Ａ，Ｂ，Ｃ，Ｍ，Ｎ，Ｋ」である。ここで、「ｍｘｍｕｌ」は、オペコードである。「Ａ」は、第１の行列が記憶されているデータメモリ１１４の先頭アドレスである。「Ｂ」は、第２の行列が記憶されているデータメモリ１１４の先頭アドレスである。「Ｃ」は、第３の行列が書き込まれるデータメモリ１１４の先頭アドレスである。「Ｍ」は、第１の行列の行数である。「Ｎ」は、第２の行列の列数である。「Ｋ」は、第１の行列の列数及び第２の行列の行数である。
【００１４】
デコーダ１０３は、命令メモリ１０１から行列積演算命令１０２を入力し、行列積演算命令１０２をデコードし、制御情報１０４を制御レジスタ１０５に書き込む。制御情報１０４は、制御情報１０６〜１０８を有する。制御情報１０６は、第１の行列が記憶されているデータメモリ１１４の先頭アドレスＡ及び第２の行列が記憶されているデータメモリ１１４の先頭アドレスＢを含む。制御情報１０７は、第１の行列の行数Ｍ、第２の行列の列数Ｎ、第１の行列の列数（＝第２の行列の行数）Ｋを含む。制御情報１０８は、第３の行列が書き込まれるデータメモリ１１４の先頭アドレスＣを含む。ダイレクトメモリアクセスコントローラ（ＤＭＡＣ）１０９は、ロード用ＤＭＡＣであり、制御レジスタ１０５から入力した制御情報１０６に応じて、データメモリ１１４から第１の行列及び第２の行列を読み出し、入力行列１１０として、積和演算回路１１１に出力する。入力行列１１０は、第１の行列及び第２の行列である。積和演算回路１１１は、制御レジスタ１０５から入力した制御情報１０７に応じて、第１の行列及び第２の行列の積を演算し、第３の行列を出力行列１１２として、ＤＭＡＣ１１３に出力する。ＤＭＡＣ１１３は、ストア用ＤＭＡＣであり、制御レジスタ１０５から入力した制御情報１０８に応じて、データメモリ１１４に第３の行列を書き込む。
【００１５】
図２（Ａ）は、積和演算回路２００の構成例を示す図である。第１の行列Ａ及び第２の行列Ｂは入力行列であり、第３の行列Ｃは出力行列である。積和演算回路２００は、第１の行列Ａ及び第２の行列Ｂの積を演算し、第３の行列Ｃを出力する。第１の行列Ａは、２行３列の行列であり、６個の要素Ａ１１〜Ａ２３を有する。第２の行列Ｂは、３行１列の行列であり、３個の要素Ｂ１１〜Ｂ３１を有する。第３の行列Ｃは、２行１列の行列であり、２個の要素Ｃ１１及びＣ２１を有する。
【００１６】
要素の添え字は、行番号及び列番号を示す。例えば、要素Ａ１２は、第１行第２列の要素を示す。なお、要素Ａ１１の番号「０」、要素Ｂ１１の番号「０」、要素Ｃ１１の番号「０」等は、値を示すものではなく、各行列の順序番号を示すものである。
【００１７】
積和演算回路２００は、複数の乗算器２０１〜２０３，２１１〜２１３と、複数の加算器２０４，２０５，２１４，２１５を有する。乗算器２０１は、要素Ａ１１及び要素Ｂ１１を乗算する。乗算器２０２は、要素Ａ１２及び要素Ｂ２１を乗算する。乗算器２０３は、要素Ａ１３及び要素Ｂ３１を乗算する。加算器２０４は、乗算器２０１の乗算結果及び乗算器２０２の乗算結果を加算する。加算器２０５は、加算器２０４の加算結果及び乗算器２０３の乗算結果を加算し、要素Ｃ１１を出力する。
【００１８】
乗算器２１１は、要素Ａ２１及び要素Ｂ１１を乗算する。乗算器２１２は、要素Ａ２２及び要素Ｂ２１を乗算する。乗算器２１３は、要素Ａ２３及び要素Ｂ３１を乗算する。加算器２１４は、乗算器２１１の乗算結果及び乗算器２１２の乗算結果を加算する。加算器２１５は、加算器２１４の加算結果及び乗算器２１３の乗算結果を加算し、要素Ｃ２１を出力する。
【００１９】
第３の行列Ｃは、加算器２０５が出力する要素Ｃ１１及び加算器２１５が出力する要素Ｃ２１により構成される。
【００２０】
図２（Ｂ）は、他の積和演算回路２２０の構成例を示す図である。第１の行列Ａ及び第２の行列Ｂは入力行列であり、第３の行列Ｃは出力行列である。積和演算回路２２０は、第１の行列Ａ及び第２の行列Ｂの積を演算し、第３の行列Ｃを出力する。第１の行列Ａは、２行２列の行列であり、４個の要素Ａ１１〜Ａ２２を有する。第２の行列Ｂは、２行２列の行列であり、４個の要素Ｂ１１〜Ｂ２２を有する。第３の行列Ｃは、２行２列の行列であり、４個の要素Ｃ１１〜Ｃ２２を有する。
【００２１】
積和演算回路２２０は、複数の乗算器２２１〜２２４，２３１〜２３４と、複数の加算器２２５，２２６，２３５，２３６を有する。乗算器２２１は、要素Ａ１１及び要素Ｂ１１を乗算する。乗算器２２２は、要素Ａ１２及び要素Ｂ２１を乗算する。乗算器２２３は、要素Ａ２１及び要素Ｂ１１を乗算する。乗算器２２４は、要素Ａ２２及び要素Ｂ２１を乗算する。加算器２２５は、乗算器２２１の乗算結果及び乗算器２２２の乗算結果を加算し、要素Ｃ１１を出力する。加算器２２６は、乗算器２２３の乗算結果及び乗算器２２４の乗算結果を加算し、要素Ｃ２１を出力する。
【００２２】
乗算器２３１は、要素Ａ１１及び要素Ｂ１２を乗算する。乗算器２３２は、要素Ａ１２及び要素Ｂ２２を乗算する。乗算器２３３は、要素Ａ２１及び要素Ｂ１２を乗算する。乗算器２３４は、要素Ａ２２及び要素Ｂ２２を乗算する。加算器２３５は、乗算器２３１の乗算結果及び乗算器２３２の乗算結果を加算し、要素Ｃ１２を出力する。加算器２３６は、乗算器２３３の乗算結果及び乗算器２３４の乗算結果を加算し、要素Ｃ２２を出力する。
【００２３】
第３の行列Ｃは、加算器２２５が出力する要素Ｃ１１と、加算器２２６が出力する要素Ｃ２１と、加算器２３５が出力する要素Ｃ１２と、加算器２３６が出力する要素Ｃ２２により構成される。
【００２４】
以上のように、図２（Ａ）の積和演算回路２００は、２行３列の行列Ａ及び３行１列の行列Ｂの積を演算する。図２（Ｂ）の積和演算回路２２０は、２行２列の行列Ａ及び２行２列の行列Ｂの積を演算する。第１の行列Ａ及び第２の行列Ｂの行数及び列数により、積和演算回路２００及び２２０の構成は異なる。
【００２５】
異なる大きさの行列Ａ及び行列Ｂの積を演算するには、異なる積和積演算回路２００及び２２０が必要になる。種々の大きさの行列Ａ及び行列Ｂの積を演算するには、積和演算回路２００及び２２０等の種類が多くなり、回路面積が大きくなる。
【００２６】
本実施形態では、小さな回路面積で、種々の大きさの行列の積を演算することができる積和演算回路及び積和演算システムを提供する。
【００２７】
図３は、図１の積和演算回路１１１の構成例を示す図である。積和演算回路１１１は、第１の行列Ａ及び第２の行列Ｂの積を演算し、第３の行列Ｃを出力する。第１の行列Ａは、２行３列の行列であり、６個の要素Ａ１１〜Ａ２３を有する。第２の行列Ｂは、３行１列の行列であり、３個の要素Ｂ１１〜Ｂ３１を有する。第３の行列Ｃは、２行１列の行列であり、２個の要素Ｃ１１及びＣ２１を有する。この場合、第１の行列Ａの行数Ｍは２であり、第１の行列Ａの列数（＝第２の行列Ｂの行数）Ｋは３であり、第２の行列Ｂの列数Ｎは１である。
【００２８】
積和演算回路１１１は、入力セレクタ３００と、複数の乗算器３０１〜３０８と、複数の加算器３０９〜３１５と、出力セレクタ３１６とを有する。入力セレクタ３００は、要素Ａ１１及びＢ１１を選択して乗算器３０１に出力する。また、入力セレクタ３００は、要素Ａ１２及びＢ２１を選択して乗算器３０２に出力する。また、入力セレクタ３００は、要素Ａ１３及びＢ３１を選択して乗算器３０３に出力する。また、入力セレクタ３００は、要素Ａ２１及びＢ１１を選択して乗算器３０５に出力する。また、入力セレクタ３００は、要素Ａ２２及びＢ２１を選択して乗算器３０６に出力する。また、入力セレクタ３００は、要素Ａ２３及びＢ３１を選択して乗算器３０７に出力する。
【００２９】
乗算器３０１は、要素Ａ１１及び要素Ｂ１１を乗算する。乗算器３０２は、要素Ａ１２及び要素Ｂ２１を乗算する。乗算器３０３は、要素Ａ１３及び要素Ｂ３１を乗算する。乗算器３０４は、“０”及び“０”を乗算し、“０”を出力する。乗算器３０５は、要素Ａ２１及び要素Ｂ１１を乗算する。乗算器３０６は、要素Ａ２２及び要素Ｂ２１を乗算する。乗算器３０７は、要素Ａ２３及び要素Ｂ３１を乗算する。乗算器３０８は、“０”及び“０”を乗算し、“０”を出力する。
【００３０】
加算器３０９は、乗算器３０１の乗算結果及び乗算器３０２の乗算結果を加算する。加算器３１０は、乗算器３０３の乗算結果及び乗算器３０４の乗算結果を加算する。加算器３１１は、乗算器３０５の乗算結果及び乗算器３０６の乗算結果を加算する。加算器３１２は、乗算器３０７の乗算結果及び乗算器３０８の乗算結果を加算する。
【００３１】
加算器３１３は、加算器３０９の加算結果及び加算器３１０の加算結果を加算する。加算器３１４は、加算器３１１の加算結果及び加算器３１２の加算結果を加算する。加算器３１５は、加算器３１３の加算結果及び加算器３１４の加算結果を加算する。
【００３２】
出力セレクタ３１６は、加算器３１３の加算結果を要素Ｃ１１として選択出力し、加算器３１４の加算結果を要素Ｃ２１として選択出力する。第３の行列Ｃは、出力セレクタ３１６が出力する要素Ｃ１１及び要素Ｃ２１により構成される。
【００３３】
図４は、図１の積和演算回路１１１の他の処理例を示す図である。図４の積和演算回路１１１は、図３の積和演算回路１１１に対して、構成が同じであり、第１の行列Ａ及び第２の行列Ｂの大きさが異なる。第１の行列Ａは、２行２列の行列であり、４個の要素Ａ１１〜Ａ２２を有する。第２の行列Ｂは、２行２列の行列であり、４個の要素Ｂ１１〜Ｂ２２を有する。第３の行列Ｃは、２行２列の行列であり、４個の要素Ｃ１１〜Ｃ２２を有する。この場合、第１の行列Ａの行数Ｍは２であり、第１の行列Ａの列数（＝第２の行列Ｂの行数）Ｋは２であり、第２の行列Ｂの列数Ｎは２である。
【００３４】
入力セレクタ３００は、要素Ａ１１及びＢ１１を選択して乗算器３０１に出力する。また、入力セレクタ３００は、要素Ａ１２及びＢ２１を選択して乗算器３０２に出力する。また、入力セレクタ３００は、要素Ａ１１及びＢ１２を選択して乗算器３０３に出力する。また、入力セレクタ３００は、要素Ａ１２及びＢ２２を選択して乗算器３０４に出力する。また、入力セレクタ３００は、要素Ａ２１及びＢ１１を選択して乗算器３０５に出力する。また、入力セレクタ３００は、要素Ａ２２及びＢ２１を選択して乗算器３０６に出力する。また、入力セレクタ３００は、要素Ａ２１及びＢ１２を選択して乗算器３０７に出力する。また、入力セレクタ３００は、要素Ａ２２及びＢ２２を選択して乗算器３０８に出力する。
【００３５】
乗算器３０１は、要素Ａ１１及び要素Ｂ１１を乗算する。乗算器３０２は、要素Ａ１２及び要素Ｂ２１を乗算する。乗算器３０３は、要素Ａ１１及び要素Ｂ１２を乗算する。乗算器３０４は、要素Ａ１２及び要素Ｂ２２を乗算する。乗算器３０５は、要素Ａ２１及び要素Ｂ１１を乗算する。乗算器３０６は、要素Ａ２２及び要素Ｂ２１を乗算する。乗算器３０７は、要素Ａ２１及び要素Ｂ１２を乗算する。乗算器３０８は、要素Ａ２２及び要素Ｂ２２を乗算する。
【００３６】
加算器３０９は、乗算器３０１の乗算結果及び乗算器３０２の乗算結果を加算する。加算器３１０は、乗算器３０３の乗算結果及び乗算器３０４の乗算結果を加算する。加算器３１１は、乗算器３０５の乗算結果及び乗算器３０６の乗算結果を加算する。加算器３１２は、乗算器３０７の乗算結果及び乗算器３０８の乗算結果を加算する。
【００３７】
加算器３１３は、加算器３０９の加算結果及び加算器３１０の加算結果を加算する。加算器３１４は、加算器３１１の加算結果及び加算器３１２の加算結果を加算する。加算器３１５は、加算器３１３の加算結果及び加算器３１４の加算結果を加算する。
【００３８】
出力セレクタ３１６は、加算器３０９の加算結果を要素Ｃ１１として選択出力し、加算器３１０の加算結果を要素Ｃ１２として選択出力し、加算器３１１の加算結果を要素Ｃ２１として選択出力し、加算器３１２の加算結果を要素Ｃ２２として選択出力する。第３の行列Ｃは、出力セレクタ３１６が出力する要素Ｃ１１、Ｃ１２、Ｃ２１及びＣ２２により構成される。
【００３９】
以上のように、第２の行列Ｂの列数がＮである場合、入力セレクタ３００は、第１の行列Ａの各行の要素をＮ組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。図３の場合、入力セレクタ３００は、第１の行列Ａの各行の要素をＮ（＝１）組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。また、図４の場合、入力セレクタ３００は、第１の行列Ａの各行の要素をＮ（＝２）組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。
【００４０】
また、第１の行列Ａの行数がＭである場合、入力セレクタ３００は、第２の行列Ｂの各列の要素をＭ組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。図３の場合、入力セレクタ３００は、第２の行列Ｂの各列の要素をＭ（＝２）組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。また、図４の場合、入力セレクタ３００は、第２の行列Ｂの各列の要素をＭ（＝２）組みずつ複数の乗算器３０１〜３０８の入力端子に出力する。
【００４１】
図５は、図３及び図４の積和演算回路１１１のより具体的な構成例を示す図である。要素ａ０〜ａ７は、第１の行列Ａの要素であり、図１のデータメモリ１１４からアドレス順に順次入力される。図３のように第１の行列Ａの大きさが２行３列の場合、図６（Ａ）に示すように、要素ａ０〜ａ５は、それぞれ要素Ａ１１、Ａ１２、Ａ１３、Ａ２１、Ａ２２、Ａ２３に対応する。また、図４のように第１の行列Ａの大きさが２行２列の場合、図６（Ｂ）に示すように、要素ａ０〜ａ３は、それぞれ要素Ａ１１、Ａ１２、Ａ２１、Ａ２２に対応する。
【００４２】
要素ｂ０〜ｂ７は、第２の行列Ｂの要素であり、図１のデータメモリ１１４からアドレス順に順次入力される。図３のように第２の行列Ｂの大きさが３行１列の場合、図６（Ａ）に示すように、要素ｂ０〜ｂ２は、それぞれ要素Ｂ１１、Ｂ２１、Ｂ３１に対応する。また、図４のように第２の行列Ｂの大きさが２行２列の場合、図６（Ｂ）に示すように、要素ｂ０〜ｂ３は、それぞれ要素Ｂ１１、Ｂ１２、Ｂ２１、Ｂ２２に対応する。
【００４３】
入力セレクタ３００は、第１の行列Ａの要素ａ０〜ａ７及び第２の行列Ｂの要素ｂ０〜ｂ７を入力し、制御情報１０７に応じて、入力値Ｉ０＿０〜Ｉ０＿７，Ｉ１＿０〜Ｉ１＿７を乗算器３０１〜３０８に出力する。制御情報１０７は、上記のように、第１の行列Ａの行数Ｍ、第２の行列Ｂの列数Ｎ、第１の行列Ａの列数（＝第２の行列Ｂの行数）Ｋを含む。具体的には、図７（Ａ）に示すように、入力セレクタ３００は、数Ｍ、Ｎ及びＫに応じて、入力値Ｉ０＿０〜Ｉ０＿７，Ｉ１＿０〜Ｉ１＿７を出力する。
【００４４】
例えば、図３のようにＭ＝２、Ｎ＝１、Ｋ＝３の場合、入力セレクタ３００は、入力値Ｉ０＿０として要素ａ０、入力値Ｉ０＿１として要素ａ１、入力値Ｉ０＿２として要素ａ２、入力値Ｉ０＿３として“０”、入力値Ｉ０＿４として要素ａ３、入力値Ｉ０＿５として要素ａ４、入力値Ｉ０＿６として要素ａ５、入力値Ｉ０＿７として“０”、入力値Ｉ１＿０として要素ｂ０、入力値Ｉ１＿１として要素ｂ１、入力値Ｉ１＿２として要素ｂ２、入力値Ｉ１＿３として“０”、入力値Ｉ１＿４として要素ｂ０、入力値Ｉ１＿５として要素ｂ１、入力値Ｉ１＿６として要素ｂ２、入力値Ｉ１＿７として“０”を選択出力する。
【００４５】
また、図４のようにＭ＝２、Ｎ＝２、Ｋ＝２の場合、入力セレクタ３００は、入力値Ｉ０＿０として要素ａ０、入力値Ｉ０＿１として要素ａ１、入力値Ｉ０＿２として要素ａ０、入力値Ｉ０＿３として要素ａ１、入力値Ｉ０＿４として要素ａ２、入力値Ｉ０＿５として要素ａ３、入力値Ｉ０＿６として要素ａ２、入力値Ｉ０＿７として要素ａ３、入力値Ｉ１＿０として要素ｂ０、入力値Ｉ１＿１として要素ｂ１、入力値Ｉ１＿２として要素ｂ２、入力値Ｉ１＿３として要素ｂ３、入力値Ｉ１＿４として要素ｂ０、入力値Ｉ１＿５として要素ｂ１、入力値Ｉ１＿６として要素ｂ２、入力値Ｉ１＿７として要素ｂ３を選択出力する。
【００４６】
乗算器３０１〜３０８は、１６ビット複素乗算器である。複素乗算器３０１は、入力値Ｉ０＿０及びＩ１＿０を複素乗算し、出力値Ｄ０＿０を出力する。複素乗算器３０２は、入力値Ｉ０＿１及びＩ１＿１を複素乗算し、出力値Ｄ０＿１を出力する。複素乗算器３０３は、入力値Ｉ０＿２及びＩ１＿２を複素乗算し、出力値Ｄ０＿２を出力する。複素乗算器３０４は、入力値Ｉ０＿３及びＩ１＿３を複素乗算し、出力値Ｄ０＿３を出力する。複素乗算器３０５は、入力値Ｉ０＿４及びＩ１＿４を複素乗算し、出力値Ｄ０＿４を出力する。複素乗算器３０６は、入力値Ｉ０＿５及びＩ１＿５を複素乗算し、出力値Ｄ０＿５を出力する。複素乗算器３０７は、入力値Ｉ０＿６及びＩ１＿６を複素乗算し、出力値Ｄ０＿６を出力する。複素乗算器３０８は、入力値Ｉ０＿７及びＩ１＿７を複素乗算し、出力値Ｄ０＿７を出力する。
【００４７】
図８（Ａ）は入力値Ｉ０＿０及びＩ１＿０の例を示す図であり、図８（Ｂ）は複素乗算器３０１の構成例を示す図である。なお、複素乗算器３０２〜３０８も複素乗算器３０１と同様の構成を有する。入力値Ｉ０＿０は（Ａ＋ｊＢ）の複素数であり、入力値Ｉ１＿０は（Ｃ＋ｊＤ）の複素数である。ここで、Ａ及びＣはそれぞれ１６ビットの実数部であり、Ｂ及びＤはそれぞれ１６ビットの虚数部である。複素乗算器３０１は、乗算器８０１〜８０４、減算器８０５及び加算器８０６を有する。乗算器８０１は、１６ビットの実数部Ａ及び１６ビットの実数部Ｃを乗算し、Ａ×Ｃを出力する。乗算器８０２は、１６ビットの虚数部Ｂ及び１６ビットの虚数部Ｄを乗算し、Ｂ×Ｄを出力する。乗算器８０３は、１６ビットの実数部Ａ及び１６ビットの虚数部Ｄを乗算し、Ａ×Ｄを出力する。乗算器８０４は、１６ビットの虚数部Ｂ及び１６ビットの実数部Ｃを乗算し、Ｂ×Ｃを出力する。減算器８０５は、乗算器８０１の乗算結果から乗算器８０２の乗算結果を減算し、Ａ×Ｃ−Ｂ×Ｄを出力値Ｄ０＿０の実数部（３３ビット）として出力する。加算器８０６は、乗算器８０３の乗算結果及び乗算器８０４の乗算結果を加算し、Ａ×Ｄ＋Ｂ×Ｃを出力値Ｄ０＿０の虚数部（３３ビット）として出力する。出力値Ｄ０＿０は、（Ａ×Ｃ−Ｂ×Ｄ）＋ｊ（Ａ×Ｄ＋Ｂ×Ｃ）の複素数である。
【００４８】
図５において、加算器３０９〜３１２は３３ビット複素加算器であり、加算器３１３及び３１４は３４ビット複素加算器であり、加算器３１５は３５ビット複素加算器である。加算器３１３及び３１４は、３４ビット複素加算器である。加算器３１５は、３５ビット複素加算器である。複素加算器３０９は、出力値Ｄ０＿０及びＤ０＿１を複素加算し、出力値Ｄ１＿０を出力する。複素加算器３１０は、出力値Ｄ０＿２及びＤ０＿３を複素加算し、出力値Ｄ１＿１を出力する。複素加算器３１１は、出力値Ｄ０＿４及びＤ０＿５を複素加算し、出力値Ｄ１＿２を出力する。複素加算器３１２は、出力値Ｄ０＿６及びＤ０＿７を複素加算し、出力値Ｄ１＿３を出力する。複素加算器３１３は、出力値Ｄ１＿０及びＤ１＿１を複素加算し、出力値Ｄ２＿０を出力する。複素加算器３１４は、出力値Ｄ１＿２及びＤ１＿３を複素加算し、出力値Ｄ２＿１を出力する。複素加算器３１５は、出力値Ｄ２＿０及びＤ２＿１を複素加算し、出力値Ｄ３＿０を出力する。
【００４９】
図９（Ａ）は入力値Ｄ０＿０及びＤ０＿１の例を示す図であり、図９（Ｂ）は複素加算器３０９の構成例を示す図である。なお、複素加算器３１０〜３１５も複素乗算器３０９と同様の構成を有する。入力値Ｄ０＿０は（Ａ＋ｊＢ）の複素数であり、入力値Ｄ０＿１は（Ｃ＋ｊＤ）の複素数である。ここで、Ａ及びＣはそれぞれ３３ビットの実数部であり、Ｂ及びＤはそれぞれ３３ビットの虚数部である。複素加算器３０９は、加算器９０１及び９０２を有する。加算器９０１は、実数部Ａ及び実数部Ｃを加算し、Ａ＋Ｃを出力値Ｄ１＿０の実数部（３４ビット）として出力する。加算器９０２は、虚数部Ｂ及び虚数部Ｄを加算し、Ｂ＋Ｄを出力値Ｄ１＿０の虚数部（３４ビット）として出力する。出力値Ｄ１＿０は、（Ａ＋Ｃ）＋ｊ（Ｂ＋Ｄ）の複素数である。
【００５０】
図５において、出力セレクタ３１６は、出力値Ｄ０＿０〜Ｄ０＿７，Ｄ１＿０〜Ｄ１＿３，Ｄ２＿０〜Ｄ２＿１，Ｄ３＿０を入力し、制御情報１０７に応じて、要素ｃ０〜ｃ７を出力する。具体的には、図７（Ｂ）に示すように、出力セレクタ３１６は、制御情報１０７の数Ｍ、Ｎ及びＫに応じて、要素ｃ０〜ｃ７を出力する。
【００５１】
例えば、図３のようにＭ＝２、Ｎ＝１、Ｋ＝３の場合、出力セレクタ３１６は、要素ｃ０として出力値Ｄ２＿０、要素ｃ１として出力値Ｄ２＿１を選択出力する。また、図４のようにＭ＝２、Ｎ＝２、Ｋ＝２の場合、出力セレクタ３１６は、要素ｃ０として出力値Ｄ１＿０、要素ｃ１として出力値Ｄ１＿１、要素ｃ２として出力値Ｄ１＿２、要素ｃ３として出力値Ｄ１＿３を選択出力する。
【００５２】
要素ｃ０〜ｃ７は、第３の行列Ｃの要素であり、図１のデータメモリ１１４に順次書き込まれる。図３のようにＭ＝２、Ｎ＝１、Ｋ＝３の場合、図６（Ａ）に示すように、要素ｃ０は要素Ｃ１１に対応し、要素ｃ１は要素Ｃ２１に対応する。要素Ｃ１１及びＣ２１は、第３の行列Ｃを構成する。
【００５３】
また、図４のようにＭ＝２、Ｎ＝２、Ｋ＝２の場合、図６（Ｂ）に示すように、要素ｃ０は要素Ｃ１１に対応し、要素ｃ１は要素Ｃ１２に対応し、要素ｃ２は要素Ｃ２１に対応し、要素ｃ３は要素Ｃ２２に対応する。要素Ｃ１１，Ｃ１２，Ｃ２１，Ｃ２２は、第３の行列Ｃを構成する。
【００５４】
なお、第１の行列Ａ、第２の行列Ｂ及び第３の行列Ｃは、複素数に限らず、一元数でもよい。その場合、乗算器３０１〜３０８は単純な乗算器であり、加算器３０９〜３１５は単純な加算器である。
【００５５】
以上のように、複数の第１の加算器３０９〜３１２は、複数の乗算器３０１〜３０８の乗算結果を２個ずつ加算する。複数の第２の加算器３１３〜３１４は、複数の第１の加算器３０９〜３１２の加算結果を２個ずつ加算する。入力セレクタ３００は、第１の行列Ａの行数Ｍ、第２の行列Ｂの列数Ｎ、第１の行列Ａの列数（＝第２の行列Ｂの行数）Ｋに応じて、第１の行列Ａの要素及び第２の行列Ｂの要素を複数の乗算器３０１〜３０８の入力端子に出力する。出力セレクタ３１６は、第１の行列Ａの行数Ｍ、第２の行列Ｂの列数Ｎ、第１の行列Ａの列数（＝第２の行列Ｂの行数）Ｋに応じて、複数の第１の加算器３０９〜３１２又は複数の第２の加算器３１３〜３１４の加算結果を選択し、第３の行列Ｃとして出力する。
【００５６】
本実施形態によれば、第１の行列Ａ及び第２の行列Ｂの大きさが変わっても、図３及び図４のように、乗算器３０１〜３０８及び加算器３０９〜３１５を共用することができる。入力セレクタ３００及び出力セレクタ３１６を設けることにより、乗算器３０１〜３０８及び加算器３０９〜３１５を共用し、小さな回路面積で、種々の大きさの行列の積を演算することができる。
【００５７】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００５８】
１０１  命令メモリ
１０２  命令
１０３  デコーダ
１０４，１０６〜１０８  制御情報
１０５  制御レジスタ
１０９，１１３  ダイレクトメモリアクセスコントローラ
１１０  入力行列
１１１  積和演算回路
１１２  出力行列
１１４  データメモリ
３００  入力セレクタ
３０１〜３０８  乗算器
３０９〜３１５  加算器
３１６  出力セレクタ
【図１】
2015055971.tif 000003
【図２】
2015055971.tif 000004
【図３】
2015055971.tif 000005
【図４】
2015055971.tif 000006
【図５】
2015055971.tif 000007
【図６】
2015055971.tif 000008
【図７】
2015055971.tif 000009
【図８】
2015055971.tif 000010
【図９】
2015055971.tif 000011