(57)【要約】【課題】要求される演算処理に応じて、メモリから読み出したデータを効率よく演算部に供給する。【解決手段】データ供給回路は、第１の幅のデータを複数個格納可能なバッファと、メモリに格納された所定処理対象データを読み出して１つ又は複数個の前記第１の幅のデータとして前記バッファに格納するメモリアクセスユニットと、前記バッファから前記第１の幅以下の第２の幅のデータを読み出す動作を、複数回繰り返すことにより、前記バッファから複数個の前記第２の幅のデータを隙間なく順番に読み出し、読み出し部分が前記処理対象データの終端に至ると前記処理対象データの始端から読み出しを継続する選択制御部とを含むことを特徴とする。【選択図】図５
2015060256.tif 000002
【特許請求の範囲】
【請求項１】
第１の幅のデータを複数個格納可能なバッファと、
メモリに格納された所定処理対象データを読み出して１つ又は複数個の前記第１の幅のデータとして前記バッファに格納するメモリアクセスユニットと、
前記バッファから前記第１の幅以下の第２の幅のデータを読み出す動作を、複数回繰り返すことにより、前記バッファから複数個の前記第２の幅のデータを隙間なく順番に読み出し、読み出し部分が前記処理対象データの終端に至ると前記処理対象データの始端から読み出しを継続する選択制御部と
を含むことを特徴とするデータ供給回路。
【請求項２】
前記所定処理対象データのデータ長が前記第１の幅以下であるときに、前記メモリアクセスユニットは、前記所定処理対象データを含む前記第１の幅のデータを一度だけ前記バッファに格納し、前記選択制御部は、前記バッファに格納される１つの前記第１の幅のデータのうちの前記所定処理対象データに相当するデータ部分から、前記第２の幅に相当する個数の連続した単位データを選択しながら、複数個の前記第２の幅のデータを隙間なく順番に読み出すことを特徴とする請求項１記載のデータ供給回路。
【請求項３】
前記所定処理対象データのデータ長が前記第１の幅よりも長いときに、前記メモリアクセスユニットは、前記所定処理対象データを分割して得られる複数の前記第１の幅のデータを前記メモリから読み出して前記バッファに順番に格納し、前記所定処理対象データの終端に読み出しが至ると前記所定処理対象データの始端から読み出しを継続することにより前記所定処理対象データの終端と前記所定処理対象データの始端とが隙間なく継続するように前記バッファに順番に格納し、前記選択制御部は、前記バッファに格納される前記複数の第１の幅のデータから、前記第２の幅に相当する個数の連続した単位データを選択しながら、複数個の前記第２の幅のデータを隙間なく順番に読み出すことを特徴とする請求項１記載のデータ供給回路。
【請求項４】
前記選択制御部は、
１つの前記第１の幅のデータと次の前記第１の幅のデータとを並べて構成した前記第１の幅の２倍の幅のデータから、選択制御信号の指定する前記第２の幅に相当する個数の連続した単位データを選択するセレクタ回路と、
前記第１の幅の２倍の幅のデータから選択する各単位データの選択位置を示す位置データを格納したテーブルと、
前記テーブルから前記位置データを受け取り、前記受け取った位置データをシフトし、前記シフトした位置データを前記セレクタ回路に前記選択制御信号として供給するシフタ回路と
を含む請求項１乃至３何れか一項記載のデータ供給回路。
【請求項５】
メモリと、
前記メモリに結合される１つ又は複数のデータ供給回路と、
前記１つ又は複数のデータ供給回路に結合されるデータ演算ユニットと、
前記データ演算ユニットと前記メモリとに結合されるデータストア回路と
を含み、前記１つ又は複数のデータ供給回路の各々は、
第１の幅のデータを複数個格納可能なバッファと、
メモリに格納された所定処理対象データを読み出して１つ又は複数個の前記第１の幅のデータとして前記バッファに格納するメモリアクセスユニットと、
前記バッファから前記第１の幅以下の第２の幅のデータを読み出す動作を、複数回繰り返すことにより、前記バッファから複数個の前記第２の幅のデータを隙間なく順番に読み出し、読み出し部分が前記処理対象データの終端に至ると前記処理対象データの始端から読み出しを継続する選択制御部と
を含む演算処理回路。
【請求項６】
メモリに格納された所定処理対象データを読み出して１つ又は複数個の第１の幅のデータとしてバッファに格納し、
前記バッファから前記第１の幅以下の第２の幅のデータを読み出す動作を、複数回繰り返すことにより、前記バッファから複数個の前記第２の幅のデータを隙間なく順番に読み出し、読み出し部分が前記処理対象データの終端に至ると前記処理対象データの始端から読み出しを継続する
段階を含むデータ供給方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願開示は、データ供給回路、演算処理回路、及びデータ供給方法に関する。
【背景技術】
【０００２】
無線通信信号処理においては行列演算が多く存在する。特に次世代の高速な無線通信信号処理の方式と期待されるLTE-Advancedにおいては、行列演算が全体の演算量に占める割合が大きい。従って、行列演算のような複雑な演算に適していない一般のＣＰＵ（Central Processing Unit）による処理だけでは、所望の処理時間内に所望の演算を処理することができない。
【０００３】
一般に、行列演算のような演算量が多い処理を高速に実行することが要求される場合、当該処理のための専用回路を設ける。しかし専用回路を設けたのでは、処理方式が少し変化しただけで対応できなくなってしまう。汎用性を考えた場合、行列演算のような配列データを扱うには、ＳＩＭＤ（Single Instruction Multiple Data）型アーキテクチャが適している。
【０００４】
一般に、ＳＩＭＤ型アーキテクチャでは、単位データとして例えば３２ビットのスカラデータを扱う。例えばＳＩＭＤ幅が４のシステムであれば、スカラデータを４つ並べた長さ４のベクトルを対象として、ベクトルの４つの要素のそれぞれを並列処理することにより、高速に演算を実行する。このようなＳＩＭＤ型アーキテクチャでは、一般に、例えば単位データ長ＵＬ＝３２ビット、ＳＩＭＤ幅＝４、データ処理幅Ｐ＝１２８（＝４×３２）ビット等に固定されている。
【０００５】
単位データとして、スカラデータだけでなく、行列やベクトルも扱うことができるストリーム（配列）処理アーキテクチャのプロセッサが開発されている。またそのようなストリーム処理アーキテクチャのプロセッサにおいて、単位データ長やＳＩＭＤ幅等を可変なパラメタとしたハードウェア構成とすることで、様々な単位データ長の命令を柔軟に定義できるようになる。このようなハードウェア構成では、単位データ長ＵＬとＳＩＭＤ幅とにより決まるデータ処理幅Ｐ＝ＵＬ×ＳＩＭＤが、演算命令により異なることになる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−３１２０８５号公報
【特許文献２】特開２００８−７７５９０号公報
【特許文献３】特願２０１２−０７２２３７号
【特許文献４】特願２０１２−０６６４３０号
【特許文献５】特願２０１３−０５６５６９号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
以上を鑑みると、要求される演算処理に応じて、メモリから読み出したデータを効率よく演算部に供給することが望まれる。
【課題を解決するための手段】
【０００８】
データ供給回路は、第１の幅のデータを複数個格納可能なバッファと、メモリに格納された所定処理対象データを読み出して１つ又は複数個の前記第１の幅のデータとして前記バッファに格納するメモリアクセスユニットと、前記バッファから前記第１の幅以下の第２の幅のデータを読み出す動作を、複数回繰り返すことにより、前記バッファから複数個の前記第２の幅のデータを隙間なく順番に読み出し、読み出し部分が前記処理対象データの終端に至ると前記処理対象データの始端から読み出しを継続する選択制御部とを含むことを特徴とする。
【発明の効果】
【０００９】
少なくとも１つの実施例によれば、、要求される演算処理に応じて、メモリから読み出したデータを効率よく演算部に供給することができる。
【図面の簡単な説明】
【００１０】
【図１】演算処理装置の構成の一例を示す図である。
【図２】演算処理回路の構成の一例を示す図である。
【図３】演算データパスによる演算の一例を示す図である。
【図４】演算データパスによる演算の一例を示す図である。
【図５】データ供給回路の構成の一例を示す図である。
【図６】図２及び図５に示す演算処理回路の動作の一例を示すフローチャートである。
【図７】メモリアクセスユニット及びデータ供給回路の処理を模式的に示す図である。
【図８】メモリアクセスユニット及びデータ供給回路の処理を模式的に示す図である。
【図９】選択制御部の構成の一例を示す図である。
【図１０】制御回路による選択動作の一例を示す図である。
【図１１】制御回路による選択動作の別の一例を示す図である。
【図１２】制御回路による選択動作の更に別の一例を示す図である。
【図１３】制御回路の構成の一例を示す図である。
【図１４】ＳＥＬ＿ＷＲＡＰ回路の構成の一例を示す図である。
【図１５】ＡＤＤ＿ＯＦＦＳＥＴ回路の構成の一例を示す図である。
【図１６】ＳＬＳ≦Ｍの場合の各信号の生成ロジックを示した図である。
【図１７】ＳＬＳ＞Ｍの場合の各信号の生成ロジックを示した図である。
【図１８】制御回路の構成の別の一例を示す図である。
【図１９】ＳＬＳ＿ＭＯＤテーブルのデータの一例を示す図である。
【図２０】演算処理回路の構成の別の一例を示す図である。
【発明を実施するための形態】
【００１１】
以下に、本発明の実施例を添付の図面を用いて詳細に説明する。
【００１２】
図１は、演算処理装置の構成の一例を示す図である。図１に示す例では、演算処理装置が、携帯電話のベースバンド処理ＬＳＩ（Large Scale Integrated circuit）に適用されている。ベースバンド処理ＬＳＩである演算処理装置は、ＲＦ部１０と、専用ハードウェア１１と、ＤＳＰ（Digital Signal Processor）１２−１〜１２−３とを備える。
【００１３】
図１及び以降の図において、各ボックスで示される各回路又は機能ブロックと他の回路又は機能ブロックとの境界は、基本的には機能的な境界を示すものであり、物理的な位置の分離、電気的な信号の分離、制御論理的な分離等に対応するとは限らない。各回路又は機能ブロックは、他のブロックと物理的にある程度分離された１つのハードウェアモジュールであってもよいし、或いは他のブロックと物理的に一体となったハードウェアモジュール中の１つの機能を示したものであってもよい。
【００１４】
ＲＦ部１０は、アンテナ１４を介して受信された無線信号の周波数をダウンコンバートし、デジタル信号に変換してバス１３に出力する。また、ＲＦ部１０は、バス１３に出力されたデジタル信号をアナログ信号に変換し、無線周波数にアップコンバートして、アンテナ１４に出力する。
【００１５】
専用ハードウェア１１は、例えば誤り訂正符号を扱うｔｕｒｂｏ、ビタビアルゴリズムを実行するｖｉｔｅｒｂｉ、複数のアンテナでデータの送受信を行なうためのＭＩＭＯ（Multi Input Multi Output）等を含む。
【００１６】
ＤＳＰ１２−１〜１２−３の各々は、プロセッサ２１と、プログラムメモリ３５と、周辺回路２３と、データメモリ３０とを備える。プロセッサ２１は、ＣＰＵ２５及び行列処理プロセッサ２６を含む。ＤＳＰ１２−１〜１２−３には、Searcher（同期）、Demodulator（復調）、Decoder（復号）、Codec（符号化）、Modulator（変調）等、無線通信信号処理の各要素処理が割り当てられる。
【００１７】
図２は、演算処理回路の構成の一例を示す図である。図２に示す演算処理回路は、図１に示す演算処理装置のうち、行列処理プロセッサ２６、データメモリ３０、及びプログラムメモリ（命令メモリ）３５の部分に相当する。
【００１８】
演算処理回路は、データメモリ３０、データ供給回路３１、演算データパス（データ演算ユニット）３２、データストア回路３３、命令デコーダ３４、及び命令メモリ３５を含む。データ供給回路３１は、データメモリ３０に結合され、データメモリ３０からデータを読み出す。演算データパス３２は、データ供給回路３１に結合され、データ供給回路３１から供給されるデータに対する演算を実行する。データストア回路３３は、演算データパス３２とデータメモリ３０とに結合され、演算データパス３２から供給される演算結果データをデータメモリ３０に書き込む。命令メモリ３５には、複数の命令からなる命令列が格納されており、命令列の各命令が命令デコーダ３４に順番に供給される。命令デコーダ３４は、供給される各命令をデコードし、デコード結果に従いデータ供給回路３１、演算データパス３２、及びデータストア回路３３を制御することで、データメモリ３０へのアクセス及び演算データパス３２による演算処理を実行する。
【００１９】
図３は、演算データパス３２による演算の一例を示す図である。第１のソースデータｓｒｃ０及び第２のソースデータｓｒｃ１の各々は、２×２の行列である。これ以上は分解できない最小のデータの長さ、即ち単位データの長さは１ｓｈｏｒｔであり、１６ビットに等しい。行列の各要素は１ｓｈｏｒｔであり、１つの２×２の実数行列は４ｓｈｏｒｔで表現できる。また１つの２×２の複素数行列は８ｓｈｏｒｔで表現できる。１つの行列を演算単位として考えるので、演算ユニット長ＵＬは、２×２の実数行列の場合４ｓｈｏｒｔであり、２×２の複素数行列の場合８ｓｈｏｒｔである。
【００２０】
図３に示す例では、演算データパス３２は、命令３６のデコード結果に従い、行列同士の積を演算する（乗算を行う）。演算データパス３２はＳＩＭＤ型アーキテクチャであり、１つの命令による演算を複数のデータに対して実行する。例えば、第１のソースデータｓｒｃ０の４つの行列と第２のソースデータｓｒｃ１の４つの行列とを受け取り、それぞれの行列同士を乗算し、デスティネーションデータｄｓｔの４つの行列を演算結果として出力してよい。この場合の行列演算では、２つのソースデータそれぞれの１番目の行列同士を乗算するのと並行して、２番目の行列同士の乗算、３番目の行列同士の乗算、及び４番目の行列同士の乗算を実行する。このときＳＩＭＤ幅は４である。即ち、ＳＩＭＤ幅は、並列に演算が実行される演算単位（この例では２×２の行列）の数に等しい。各演算サイクルでのデータ処理幅Ｐは、ＳＩＭＤ幅と演算ユニット長ＵＬとの積に等しい。
【００２１】
演算データパス３２では、ＳＩＭＤ幅と演算ユニット長ＵＬとが可変設定可能であってよい。即ち、命令毎に異なるＳＩＭＤ幅と演算ユニット長ＵＬとの演算を行ってよい。
【００２２】
ソースデータのデータ長、即ち、演算対象となるソースデータの全体の長さを、ストリーム長ＳＬＳと呼ぶ。例えば、演算単位が２×２の実数行列（演算ユニット長ＵＬ＝４ｓｈｏｒｔ）であり、１０００個の行列が演算対象となる場合、ストリーム長ＳＬＳは４０００ｓｈｏｒｔである。
【００２３】
図４は、演算データパス３２による演算の一例を示す図である。図４において、図２と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。図４では、２つのデータ供給回路３１と１つのデータストア回路３３とを纏めてロードストアユニット３８として示してある。図４に示されるように、データ供給回路３１は、各ソースデータ（ソースオペランド）に対して１つずつ設けられる。第１のソースデータｓｒｃ０の全体データ数は１０００行列であり、第２のソースデータｓｒｃ１の全体データ数は２０行列である。またデスティネーションデータｄｓｔの全体データ数は１０００行列である。
【００２４】
命令メモリ３５（図２参照）からフェッチされた命令「opecode=mul」のデコード結果に従い、演算データパス３２が、行列同士を乗算するように制御される。第１のソースデータｓｒｃ０のメモリ３０中の開始アドレスはＸであり、演算単位で数えた第１のソースデータｓｒｃ０のデータ長は１０００行列である。これらを指定する命令コード「src0 addr=X」及び「src0 length=1000」が第１のデータ供給回路３１に供給され、このデータ供給回路３１がアドレスＸから１０００個の行列を順次読み出す。第２のソースデータｓｒｃ１のメモリ３０中の開始アドレスはＹであり、演算単位で数えた第２のソースデータｓｒｃ１のデータ長は２０行列である。これらを指定する命令コード「src1 addr=Y」及び「src1 length=20」が第２のデータ供給回路３１に供給され、このデータ供給回路３１がアドレスＹから２０個の行列を順次読み出す。
【００２５】
デスティネーションデータｄｓｔのメモリ３０中の格納開始アドレスはＺであり、演算単位で数えたデスティネーションデータｄｓｔのデータ長は１０００行列である。これらを指定する命令コード「dst addr=Z」及び「dst length=1000」がデータストア回路３３に供給され、このデータストア回路３３がアドレスＺから１０００個の行列を順次格納する。
【００２６】
デスティネーションデータｄｓｔのデータ長が１０００行列、即ち演算出力のデータ長が１０００行列であるので、１０００個の行列を出力するまで、演算データパス３２による行列演算が実行される。この際、第１のソースデータｓｒｃ０については、全体のデータ長１０００行列が演算出力のデータ長に等しい。従って、第１のソースデータｓｒｃ０の先頭の行列データから終端の行列データまでを、データ供給回路３１により順次読み出して、データ供給回路３１から演算データパス３２に供給すればよい。第２のソースデータｓｒｃ１については、全体のデータ長２０行列が演算出力のデータ長よりも短い。従って、第２のソースデータｓｒｃ１の先頭の行列データから終端の行列データまでを、データ供給回路３１により順次読み出すと、その後先頭の行列データに戻り、再度先頭の行列データから終端の行列データまでを、データ供給回路３１により順次読み出す。このようにしてデータ供給回路３１は、２０個の行列を順番に読み出す動作を繰り返えし、読み出したデータを演算データパス３２に供給する。第２のソースデータｓｒｃ１の読み出し動作の繰り返し数が５０回に到達すると、読み出した行列数は２０行列×５０回で１０００行列となり、読み出し動作が終了することになる。
【００２７】
なお例えば、第１のソースデータｓｒｃ０のデータ長が１０００行列であり、第２のソースデータｓｒｃ１のデータ長が２０行列であり、デスティネーションデータｄｓｔのデータ長が２０００行列であってもよい。この場合、第１のソースデータｓｒｃ０の先頭の行列データから終端の行列データまでを順次読み出すと、その後先頭の行列データに戻り、再度先頭の行列データから終端の行列データまでを順次読み出すことになる。第１のソースデータｓｒｃ０の読み出し動作の繰り返し数が２回に到達すると、読み出した行列数は１０００行列×２回で２０００行列となり、読み出し動作が終了することになる。また、第２のソースデータｓｒｃ１については、その読み出し動作の繰り返し数が１００回に到達すると、読み出した行列数は２０行列×１００回で２０００行列となり、読み出し動作が終了することになる。
【００２８】
図５は、データ供給回路３１の構成の一例を示す図である。図５において、図２と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００２９】
図５においてデータ供給回路３１は、メモリアクセスユニット（ＭＡＵ）４０、バッファキュー４１、及び選択制御部４２を含む。バッファキュー４１は、幅Ｍ（Ｍ：正の整数）ｓｈｏｒｔのデータを複数個格納可能なＦＩＦＯ（First in First out）である。メモリアクセスユニット４０は、データメモリ３０に格納されたデータ長ＳＬＳ（ｓｈｏｒｔ）のデータを読み出して１つ又は複数個の幅Ｍ（ｓｈｏｒｔ）のデータとしてバッファキュー４１に格納する。具体的には、メモリアクセスユニット４０は、データメモリ３０に格納されたデータ長ＳＬＳ（ｓｈｏｒｔ）のデータの先頭から、データメモリ３０の１ラインに等しい、即ちバス３０Ａの幅に等しい、Ｍ（ｓｈｏｒｔ）個のデータを読み出す。メモリアクセスユニット４０は、幅Ｍのバス３０Ａを介して受け取った幅Ｍのデータを、バッファキュー４１に書き込む。バッファキュー４１は、幅Ｍのデータを順次格納することができ、先に格納された幅Ｍのデータから順番に読み出すことができる。
【００３０】
選択制御部４２は、データ選択部４５及び制御回路４６を含む。選択制御部４２は、バッファキュー４１からＰ（≦Ｍ）個（ｓｈｏｒｔ）の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、バッファキュー４１から複数個の幅Ｐのデータを隙間なく順番に読み出す。具体的には、選択制御部４２は、まず最初に、バッファキュー４１の最も先に格納された幅ＭのデータのＭ個の単位データのうちで、先頭からＰ（≦Ｍ）個の連続した単位データを選択する。選択制御部４２は、選択したＰ個の単位データを、演算データパス３２に供給してよい。但し、選択制御部４２と演算データパス３２との間のデータ転送幅を固定（例えば幅Ｍ）とした場合、選択制御部４２は、選択したＰ個の単位データを含む例えば幅Ｍのデータを、演算データパス３２に供給してよい。このとき、選択したＰ個の単位データ以外のＭ−Ｐ個の単位データについては、どのような値であってよい。
【００３１】
Ｐ個の連続した単位データを選択した後、選択制御部４２は、既に選択した最後の単位データの次の単位データからＰ個の連続した単位データを選択し、選択したＰ個の単位データを、演算データパス３２に供給してよい。これを繰り返すことにより、選択制御部４２は、複数個の幅Ｐのデータを隙間なく順番にバッファキュー４１から読み出す。なお、選択制御部４２により選択する単位データが幅Ｍのデータの終端の単位データになる場合には、次の順番の幅Ｍのデータをバッファキュー４１から読み出して、この新たな幅Ｍのデータの先頭の単位データ及びそれに続く単位データを選択し続ければよい。
【００３２】
図６は、図２及び図５に示す演算処理回路の動作の一例を示すフローチャートである。なお図６において、フローチャートに記載された各ステップの実行順序は一例にすぎず、本願の意図する技術範囲が、記載された実行順番に限定されるものではない。例えば、Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、Ａステップの次にＢステップを実行することが可能なだけでなく、Ｂステップの次にＡステップを実行することが、物理的且つ論理的に可能である場合がある。この場合、どちらの順番でステップを実行しても、当該フローチャートの処理に影響する全ての結果が同一であるならば、本願に開示の技術の目的のためには、Ｂステップの次にＡステップが実行されてもよいことは自明である。Ａステップの次にＢステップが実行されるように本願に説明されていたとしても、上記のような自明な場合を本願の意図する技術範囲から除外することを意図するものではなく、そのような自明な場合は、当然に本願の意図する技術範囲内に属する。
【００３３】
図６のステップＳ１で、命令デコーダ３４が命令メモリ３５から１つの命令を取得し、その命令をデコードする。ステップＳ２で、メモリアクセスユニット４０が、アクセス対象のソースデータのストリーム長ＳＬＳがＭ以下であるか否かを判定する。ＳＬＳ≦Ｍでない場合、ステップＳ３で、メモリアクセスユニット４０は、指定サイズのｓｒｃ０のデータをロードし、ロードしたデータをバッファキュー４１のＦＩＦＯにプッシュする。この指定サイズは、バッファキュー４１に格納可能な最大のデータサイズ又はそれ以下のサイズであってよい。具体的には、メモリアクセスユニット４０は、ストリーム長ＳＬＳのデータを分割して得られる複数の幅Ｍのデータを、バッファキュー４１に順番に格納すればよい。
【００３４】
なおロードする対象がストリーム長ＳＬＳのソースデータの最後の部分以外の場合、幅Ｍのデータが順次ロードされてバッファキュー４１に格納される。ロードする対象がストリーム長ＳＬＳのソースデータの最後の部分である場合、バスを介して読み出される幅Ｍのデータの一部にしかソースデータが存在しないことがある。この場合には、無効領域（ソースデータが存在しない領域）を除去する処理が行われる。具体的には、バッファキュー４１中で、ストリーム長ＳＬＳのソースデータの最後の部分が格納されている幅Ｍのデータ領域において、無効領域がある場合には、その無効領域を埋めるように、繰り返しの次の回で読み出されるソースデータの先頭部分が格納される。
【００３５】
ステップＳ４で、選択制御部４２が、Ｐ単位の消費速度調整して、データを演算データパス３２に供給する。即ち、選択制御部４２が、各演算サイクルにおいて、バッファキュー４１から幅Ｐのデータを取り出し、取り出したデータを演算データパス３２に供給する。これにより、各演算サイクルにおいてデータ処理幅Ｐの演算対象のデータがデータ供給回路３１から演算データパス３２に供給されることになる。
【００３６】
ステップＳ５で、演算データパス３２が、ステップＳ１でのデコード結果に従い、指定された演算を実行する。更に、データストア回路３３が、演算結果であるデータをデータメモリ３０に格納する。ステップＳ６で、例えばメモリアクセスユニット４０が、ストリーム長ＳＬＳの全データの処理を終了したか否かを判定する。全データの処理が終了していない場合には、ステップＳ３に戻り、以降の処理を繰り返す。
【００３７】
なおステップＳ６のストリームの全データの処理が終了したか否かの判断は、演算結果の出力データ数に依存してよい。前述のように、例えば第１のソースデータｓｒｃ０のデータ長が１０００行列であり、デスティネーションデータｄｓｔのデータ長が２０００行列である場合、第１のソースデータｓｒｃ０は２回繰り返して読み出される。従ってこのような場合、ＳＬＳ＞Ｍである状況において、ストリーム長ＳＬＳの全てのデータを読み出した後に、再度同じデータを読み出してよい。このようにして、バッファキュー４１に格納される複数の幅Ｍのデータから複数個の幅Ｐのデータを隙間なく順番に読み出す動作において、読み出し部分がデータ長ＳＬＳのデータの終端に至ると、データ長ＳＬＳのデータの始端から読み出しを継続してよい。
【００３８】
ステップＳ６で全データの処理が終了していると判定された場合、ステップＳ１でデコードした命令に対する処理が終了する。
【００３９】
ステップＳ２での判定の結果、ＳＬＳ≦Ｍである場合、ステップＳ７で、メモリアクセスユニット４０は、幅Ｍのデータを一度だけロードし、ロードしたデータをバッファキュー４１のＦＩＦＯにプッシュする。即ち、メモリアクセスユニット４０は、ストリーム長ＳＬＳのデータを含む幅Ｍのデータを一度だけバッファに格納する。ＳＬＳ≦Ｍであるので、一度のロード及びプッシュ動作により、全てのソースデータがバッファキュー４１に格納されることになる。
【００４０】
ステップＳ４で、選択制御部４２が、データ複製及びＰ単位の消費速度調整して、データを演算データパス３２に供給する。即ち、選択制御部４２が、各演算サイクルにおいて、バッファキュー４１から幅Ｐのデータを取り出し、取り出したデータを演算データパス３２に供給する。より詳しくは、選択制御部４２は、バッファキュー４１に格納される１つの幅Ｍのデータのうちのストリーム長ＳＬＳのデータに相当するデータ部分から、複数個の幅Ｐのデータを隙間なく順番に読み出す。当該読み出し動作において読み出し部分が当該データ部分の終端に至ると、選択制御部４２は、当該データ部分の始端から読み出しを継続する。例えば、ストリーム長ＳＬＳのデータに相当するデータ部分の終端部においてＱ（＜Ｐ）個の単位データを選択した場合、当該データ部分の先端部からＰ−Ｑ個の単位データを選択し、Ｐ−Ｑ個の単位データをＱ個の単位データに後続させて合計Ｐ個のデータとする。これにより、各演算サイクルにおいてデータ処理幅Ｐの演算対象のデータがデータ供給回路３１から演算データパス３２に供給されることになる。
【００４１】
ステップＳ９で、演算データパス３２が、ステップＳ１でのデコード結果に従い、指定された演算を実行する。更に、データストア回路３３が、演算結果であるデータをデータメモリ３０に格納する。ステップＳ１０で、例えばメモリアクセスユニット４０が、ストリーム長ＳＬＳの全データの処理を終了したか否かを判定する。全データの処理が終了していない場合には、ステップＳ８に戻り、以降の処理を繰り返す。ステップＳ１０で全データの処理が終了していると判定された場合、ステップＳ１でデコードした命令に対する処理が終了する。
【００４２】
なお、ＳＬＳ≦Ｍである場合、メモリアクセスユニット４０は、幅Ｍのデータを一度だけロードすればよい。このようにデータを一度だけロードすればよいので、消費電力を削減することが出来る。
【００４３】
図７は、メモリアクセスユニット４０及びデータ供給回路３１の処理を模式的に示す図である。図７に示す処理は、ＳＬＳ＞Ｍの場合に実行される処理である。
【００４４】
図７（ａ）に示されるようにデータメモリ３０にはストリーム長ＳＬＳのデータが格納されている。ストリーム長ＳＬＳは、幅Ｍよりも長い。このストリーム長ＳＬＳのデータが、メモリアクセスユニット４０により、幅Ｍ毎に読み出され、バッファキュー４１に格納される。図７（ｂ）には、バッファキュー４１に格納されたデータ５１が示される。このバッファキュー４１に格納されたデータから、Ｐ（≦Ｍ）個の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、バッファキュー４１から複数個の幅Ｐのデータ６１乃至６４を隙間なく順番に読み出す。幅Ｐのデータ６５はデータ５１の終端部分にかかってしまうので、幅Ｐのデータ６５を読み出す前までに、メモリアクセスユニット４０により、ストリーム長ＳＬＳのデータをデータメモリ３０から読み出して、バッファキュー４１にデータ５２として格納しておく。これにより、バッファキュー４１から複数個の幅Ｐのデータ６１乃至６９を隙間なく順番に読み出すことができる。なお、幅Ｐのデータ６１乃至６９の各々は、演算サイクル毎に、即ち各演算サイクルにおいて１つずつ読み出される。
【００４５】
なお図７の動作例では、ストリーム長ＳＬＳのデータをデータメモリ３０から読み出して、バッファキュー４１にデータ５１として格納している。そして更にその後、同一のストリーム長ＳＬＳのデータをデータメモリ３０から読み出して、バッファキュー４１にデータ５２として格納している。このような構成にする代わりに、バッファキュー４１内に既に格納されているデータ５１を使い回して、データ５２に相当するデータ部分をバッファキュー４１に配置してもよい。
【００４６】
図８は、メモリアクセスユニット４０及びデータ供給回路３１の処理を模式的に示す図である。図８に示す処理は、ＳＬＳ≦Ｍの場合に実行される処理である。
【００４７】
図８（ａ）に示されるようにデータメモリ３０にはストリーム長ＳＬＳのデータが格納されている。ストリーム長ＳＬＳは、幅Ｍよりも短い。このストリーム長ＳＬＳのデータが、メモリアクセスユニット４０により、幅Ｍのデータとしてロードされ、バッファキュー４１に格納される。図８（ｂ）には、バッファキュー４１に格納されたデータ７０が示される。このバッファキュー４１に格納されたデータから、Ｐ（≦Ｍ）個の連続した単位データを選択することにより幅Ｐのデータを読み出す動作を、複数回繰り返すことにより、バッファキュー４１から複数個の幅Ｐのデータ７１乃至７５を隙間なく順番に読み出す。但し、幅Ｐのデータ７３の場合、データ７０の終端部分にかかってしまうので、データ７０の先端部分に戻り、先端部分から続けてデータを選択して読み出すことになる。これは幅Ｐのデータ７５についても同様である。このようにして、バッファキュー４１から複数個の幅Ｐのデータ７１乃至７５を隙間なく順番に読み出すことができる。なお、幅Ｐのデータ７１乃至７５の各々は、演算サイクル毎に、即ち各演算サイクルにおいて１つずつ読み出される。
【００４８】
図９は、選択制御部４２の構成の一例を示す図である。選択制御部４２は、データ選択部４５と制御回路４６とを含む。データ選択部４５は、セレクタ回路８１、バッファ回路８２、結合回路８３、セレクタ回路８４、及び結合回路８５を含む。セレクタ回路８４は、セレクタ８４−１乃至８４−３２を含む。
【００４９】
バッファキュー４１の最も先に格納された幅Ｍ（この例で３２ｓｈｏｒｔ）のデータが、制御回路４６からのＰＯＰ信号の「１」に応答して、バッファキュー４１から読み出され、セレクタ回路８１を介してバッファ回路８２に格納される。この時、セレクタ回路８１はＰＯＰ信号の「１」により、図面右側の入力を選択する状態となっている。幅３２のデータがバッファ回路８２に格納された状態で、バッファキュー４１が出力している幅３２のデータ（即ち現時点で最も先に格納された幅３２のデータ）は、バッファ回路８２に格納されたデータの次のデータとなっている。
【００５０】
なおＰＯＰ信号の「１」に応答して、メモリアクセスユニット４０により、ストリーム長ＳＬＳのデータのうちバッファキュー４１に未だ格納していない残りのデータをデータメモリ３０から読み出して、バッファキュー４１に後続データとして格納してよい。この際、データメモリ３０から読み出したデータが、ストリーム長ＳＬＳのデータの終端に至った場合には、次のＰＯＰ信号の「１」に応答して、ストリーム長ＳＬＳのデータの始端から読み出しを再開してよい。この場合、図７（ｂ）に示されるように、ストリーム長ＳＬＳのデータの始端が、前に読み出したストリーム長ＳＬＳのデータの終端に隙間なく続くように、バッファキュー４１にデータを格納してよい。
【００５１】
結合回路８３は、バッファ回路８２の格納する１つの幅３２のデータと、バッファキュー４１の出力する次の幅３２のデータとを並べて構成した、幅６４のデータＢＵＦＯＵＴを出力する。このデータＢＵＦＯＵＴの長さは、６４ｓｈｏｒｔ×１６ビット、即ち１０２４ビットである。
【００５２】
セレクタ回路８４は、結合回路８３の出力する幅６４のデータＢＵＦＯＵＴから、制御回路４６が供給する選択制御信号ＳＥＬ００乃至ＳＥＬ３１の指定するＰ個の連続した単位データを選択する。実際には、データ選択部４５の出力は幅３２（ｓｈｏｒｔ）であるので、選択したＰ個の連続した単位データは、幅３２の出力データのうちの連続した一部（典型的には左端の連続した一部分）に配置されてよい。演算データパス３２は、データ処理幅Ｐのデータのみを演算対象とするので、データ選択部４５の出力する幅３２のデータのうちで例えば左端の連続したＰ個の単位データを対象として演算を実行すればよい。
【００５３】
具体的には、セレクタ８４−１が、幅６４のデータＢＵＦＯＵＴのうち、選択制御信号ＳＥＬ００の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。またセレクタ８４−２が、幅６４のデータＢＵＦＯＵＴのうち、選択制御信号ＳＥＬ０１の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。以下同様であり、セレクタ８４−３２が、幅６４のデータＢＵＦＯＵＴのうち、選択制御信号ＳＥＬ３１の指し示す位置にある１ｓｈｏｒｔの単位データを選択して出力する。
【００５４】
図１０は、制御回路４６による選択動作の一例を示す図である。図１０に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが３４（ｓｈｏｒｔ）、データ処理幅Ｐが８（ｓｈｏｒｔ）である。図１０の表に示されるＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが８であるので、以下の説明においては、図９に示す左端の８個のセレクタ８４−１乃至８４−８に供給される選択制御信号ＳＥＬ００乃至ＳＥＬ０７のみに着目する。
【００５５】
まず、ストリーム長ＳＬＳが３４であるデータの先頭の３２個の単位データが図９のバッファ回路８２に格納され、残りの２個の単位データが、バッファキュー４１の出力しているデータの左端に格納された状態であるとする。なお、前述のように、バッファキュー４１の出力しているデータにおいては、左端の上記の２個の単位データに続くようにして、その右側に、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の３０個の単位データ）が格納されている。このように、メモリアクセスユニット４０により、ストリーム長ＳＬＳのデータをデータメモリ３０から随時読み出して、バッファキュー４１に後続データとして格納する動作が、継続的に実行される。
【００５６】
最初のサイクル（ｃｙｃｌｅ＝０）では、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「０」乃至「７」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから７番（左端から数えて８個目）の単位データまでが選択される。次のサイクル（ｃｙｃｌｅ＝１）では、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「８」乃至「１５」であり、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１５番（左端から数えて１６個目）の単位データまでが選択される。その後同様に進行し、バッファ回路８２を利用しながら、バッファキュー４１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【００５７】
５番目のサイクル（ｃｙｃｌｅ＝４）において、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「３２」乃至「３９」であり、幅６４のデータＢＵＦＯＵＴの３２番の単位データから３９番の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、次のサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の２個の単位データとそれに続く先頭の３０個の単位データが、図９のバッファ回路８２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の４個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２８個の単位データ）とが、バッファキュー４１の出力データ部分に並んで格納される。
【００５８】
６番目のサイクルでは、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「８」乃至「１５」であり、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１５番（左端から数えて１６個目）の単位データまでが選択される。その後同様に進行し、バッファキュー４１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【００５９】
図１１は、制御回路４６による選択動作の別の一例を示す図である。図１１に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが３４（ｓｈｏｒｔ）、データ処理幅Ｐが３２（ｓｈｏｒｔ）である。図１１の表に示されるＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが３２であるので、以下の説明においては、図９に示す３２個のセレクタ８４−１乃至８４−３２に供給される選択制御信号ＳＥＬ００乃至ＳＥＬ３１に着目する。
【００６０】
まず、ストリーム長ＳＬＳが３４であるデータの先頭の３２個の単位データが図９のバッファ回路８２に格納され、残りの２個の単位データが、バッファキュー４１の出力しているデータの左端に格納された状態であるとする。なお、前述のように、バッファキュー４１の出力しているデータにおいては、左端の上記の２個の単位データに続くようにして、その右側に、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の３０個の単位データ）が格納されている。このように、メモリアクセスユニット４０により、ストリーム長ＳＬＳのデータをデータメモリ３０から随時読み出して、バッファキュー４１に後続データとして格納する動作が、継続的に実行される。
【００６１】
最初のサイクル（ｃｙｃｌｅ＝０）では、選択制御信号ＳＥＬ００乃至ＳＥＬ３１は、「０」乃至「３１」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから３１番（一番右端）の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、次のサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の２個の単位データとそれに続く先頭の３０個の単位データが、図９のバッファ回路８２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の４個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２８個の単位データ）とが、バッファキュー４１の出力データ部分に並んで格納される。
【００６２】
次のサイクル（ｃｙｃｌｅ＝１）でも、選択制御信号ＳＥＬ００乃至ＳＥＬ３１は、「０」乃至「３１」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから３１番（一番右端）の単位データまでが選択される。このとき、ＰＯＰ信号が「１」になる。従って、次のサイクルにおいては、ストリーム長ＳＬＳが３４であるデータの終端の４個の単位データとそれに続く先頭の２８個の単位データが、図９のバッファ回路８２に格納される。またそれに続くストリーム長ＳＬＳが３４であるデータの終端の６個の単位データと、ストリーム長ＳＬＳが３４であるデータの先頭の部分のデータ（先頭の２６個の単位データ）とが、バッファキュー４１の出力データ部分に並んで格納される。以降同様に進行し、バッファ回路８２を利用しながら、バッファキュー４１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。
【００６３】
図１２は、制御回路４６による選択動作の更に別の一例を示す図である。図１２に示す例では、幅Ｍが３２（ｓｈｏｒｔ）、ストリーム長ＳＬＳが１２（ｓｈｏｒｔ）、データ処理幅Ｐが８（ｓｈｏｒｔ）である。図１０の表に示されるＳＬＳ＿ＭＯＤ、ＯＦＦＳＥＴについては、後程説明する。データ処理幅Ｐが８であるので、以下の説明においては、図９に示す左端の８個のセレクタ８４−１乃至８４−８に供給される選択制御信号ＳＥＬ００乃至ＳＥＬ０７のみに着目する。
【００６４】
まず、ストリーム長ＳＬＳが１２であるデータの１２個の単位データが図９のバッファ回路８２の左端側に詰めて格納された状態であるとする。
【００６５】
最初のサイクル（ｃｙｃｌｅ＝０）では、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「０」乃至「７」であり、幅６４のデータＢＵＦＯＵＴの０番（一番左端）の単位データから７番（左端から数えて８個目）の単位データまでが選択される。次のサイクル（ｃｙｃｌｅ＝１）では、選択制御信号ＳＥＬ００乃至ＳＥＬ０７は、「８，９，１０，１１，０，１，２，３」である。従って、幅６４のデータＢＵＦＯＵＴの８番（左端から数えて９個目）の単位データから１１番（左端から数えて１２個目）の単位データまでと、それに続いて０番（一番左端）の単位データから３番（左端から数えて４個目）の単位データまでが選択される。その後同様に進行し、バッファ回路８２を利用しながら、バッファキュー４１から複数個の幅Ｐのデータを隙間なく順番に選択し、読み出していく。この読み出し動作では、ストリーム長ＳＬＳが幅Ｍよりも短いので、ＰＯＰ信号が「１」になることはない。
【００６６】
図１３は、制御回路４６の構成の一例を示す図である。図１３に示す制御回路４６は、ＳＬＳ＿ＭＯＤ回路９１、ＳＬＳレジスタ９２、ＳＥＬ＿ＷＲＡＰ回路９３−１乃至９３−３２、ＯＦＦＳＥＴレジスタ９４、ＡＤＤ＿ＯＦＦＳＥＴ回路９５、Ｐ減算回路９６、及びセレクタ回路９７を含む。
【００６７】
図１４は、ＳＥＬ＿ＷＲＡＰ回路の構成の一例を示す図である。図１４に示すＳＥＬ＿ＷＲＡＰ回路は、ＳＬＳ判定回路１０１、ＳＬＳ減算回路１０２、Ｎ加算回路１０３、セレクタ回路１０４、比較回路１０５、１加算回路１０６、及びセレクタ回路１０７を含む。ＳＥＬ＿ＷＲＡＰ回路９３−１の場合、印加されるＳＬＳ＿ＭＯＤ信号は、ＳＬＳ＿ＭＯＤ回路９１の格納する値に等しい。それ以降のＳＥＬ＿ＷＲＡＰ回路９３−２乃至９３−３２の場合、印加されるＳＬＳ＿ＭＯＤ信号は、前段のＳＥＬ＿ＷＲＡＰ回路の出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号に等しい。
【００６８】
図１５は、ＡＤＤ＿ＯＦＦＳＥＴ回路の構成の一例を示す図である。図１５に示すＡＤＤ＿ＯＦＦＳＥＴ回路は、加算回路１１１、ＯＦＦＳＥＴレジスタ１１２、ＯＦＦＳＥＴレジスタ１１３、セレクタ回路１１４、及びセレクタ回路１１５を含む。
【００６９】
図１３乃至図１５並びに図１０を用いて、制御回路４６の動作の一例を説明する。初期状態においては、ＳＬＳ＿ＭＯＤ回路９１の格納するＳＬＳ＿ＭＯＤ信号は「０」である。またＯＦＦＳＥＴレジスタ９４の格納するＯＦＦＳＥＴ信号は「０」である。
【００７０】
図１０の例において、ＳＬＳ＞Ｍであることにより図１４に示すセレクタ回路１０４は、ＯＦＦＳＥＴ信号の値にＮを加算した値を選択する。この値Ｎは、何番目のＳＥＬ＿ＷＲＡＰ回路であるかを示す値であり、「０」を開始番号として、０番のＳＥＬ＿ＷＲＡＰ回路９３−１の場合には「０」である。従って、ＳＥＬ＿ＷＲＡＰ回路９３−１の場合、ＯＦＦＳＥＴ信号の値に「０」を加算した「０」が、出力の選択制御信号ＳＥＬの値となる。また「０」であるＳＬＳ＿ＭＯＤ信号に１加算回路１０６により「１」を加算した値、即ち「１」が、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号として出力される。次のＳＥＬ＿ＷＲＡＰ回路９３−２の場合、ＯＦＦＳＥＴ信号の値に「１」を加算した「１」が、出力の選択制御信号ＳＥＬの値となる。またこのＳＥＬ＿ＷＲＡＰ回路９３−２の場合、印加されるＳＬＳ＿ＭＯＤ信号は前段からの値「１」のＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号であるので、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値は「２」となる。以下同様にして、ＳＥＬ＿ＷＲＡＰ回路９３−ｎ（ｎ：自然数）の場合、出力する選択制御信号ＳＥＬは「ｎ−１」であり、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号は「ｎ」となる。これにより、図１０の０番のサイクルに示すような選択制御信号ＳＥＬ００乃至ＳＥＬ３１が生成される。
【００７１】
セレクタ回路９７は、ＳＥＬ＿ＷＲＡＰ回路９３−１乃至９３−３２のそれぞれが出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴを受け取る。セレクタ回路９７は更に、データ処理幅Ｐから１減算した値、この例では「７」を選択制御信号として受け取る。セレクタ回路９７は、０番を開始番号とした場合の７番（即ち８番目）のＳＥＬ＿ＷＲＡＰ回路９３−８が出力する値「８」であるＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号を選択して、ＳＬＳ＿ＭＯＤ回路９１に供給する。これにより、次のサイクルにおいて、ＳＬＳ＿ＭＯＤ回路９１に格納されているＳＬＳ＿ＭＯＤ信号は「８」となる。
【００７２】
図１５に示すＡＤＤ＿ＯＦＦＳＥＴ回路９５において、ＳＬＳ＞Ｍであることにより、セレクタ回路１１５は、データ処理幅ＰにＯＦＦＳＥＴ信号の値を加算した値を選択し、ＯＦＦＳＥＴ＿ＮＥＸＴ信号として出力する。このＯＦＦＳＥＴ＿ＮＥＸＴ信号が、図１３に示すＯＦＦＳＥＴレジスタ９４に格納され、次のサイクルでのＯＦＦＳＥＴ信号となる。従って、ＯＦＦＳＥＴ信号の値は、１サイクル毎にＰずつ増加していく。但し、ＯＦＦＳＥＴ信号の値に加算回路１１１によりＰを加算した値が「３２」となるサイクルにおいては、ＯＦＦＳＥＴレジスタ１１２に格納された値が１となり、ＰＯＰ＿ＮＥＸＴ信号が「１」となる。このＰＯＰ＿ＮＥＸＴ信号が、制御回路４６からＰＯＰ信号として出力される。またＯＦＦＳＥＴ信号の値に加算回路１１１によりＰを加算した値の下位５ビットのみをＯＦＦＳＥＴレジスタ１１３に格納することにより、ＯＦＦＳＥＴ＿ＮＥＸＴ信号の値は、「０」乃至「３１」の範囲の値のみをとることになる。即ち、ＯＦＦＳＥＴレジスタ９４に格納されるＯＦＦＳＥＴ値は、「０」乃至「３１」の範囲の値を繰り返すことになる。このようにして、図１０の動作例に示すような、ＯＦＦＳＥＴ信号及びＰＯＰ信号が生成される。なお図１０では、ＯＦＦＳＥＴの値は、６ビット目も含めた値を示してあるため、値「３２」の場合が示されている。
【００７３】
図１３乃至図１５並びに図１２を用いて、制御回路４６の動作の別の一例を説明する。初期状態においては、ＳＬＳ＿ＭＯＤ回路９１の格納するＳＬＳ＿ＭＯＤ信号は「０」である。またＯＦＦＳＥＴレジスタ９４の格納するＯＦＦＳＥＴ信号は「０」である。
【００７４】
図１２の例において、ＳＬＳ≦Ｍであることにより図１４に示すセレクタ回路１０４はＳＬＳ＿ＭＯＤ信号を選択するので、ＳＥＬ＿ＷＲＡＰ回路９３−１の場合、出力の選択制御信号ＳＥＬは「０」である。また「０」であるＳＬＳ＿ＭＯＤ信号に「１」を加算した値、即ち「１」が、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号として出力される。次のＳＥＬ＿ＷＲＡＰ回路９３−２の場合、印加されるＳＬＳ＿ＭＯＤ信号は前段からの値「１」のＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号であるので、出力の選択制御信号ＳＥＬは「１」であり、且つ、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値は「２」となる。以下同様にして、ＳＥＬ＿ＷＲＡＰ回路９３−ｎ（ｎ：ＳＬＳより小さい自然数）の場合、出力する選択制御信号ＳＥＬは「ｎ−１」であり、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号は「ｎ」となる。
【００７５】
図１２の例ではストリーム長ＳＬＳが１２であるので、ＳＥＬ＿ＷＲＡＰ回路９３−１２の場合、図１４に示す比較回路１０５の出力が１となり、「０」がセレクタ回路１０７により選択されて、出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号の値が「０」となる。従って、図１２の０番のサイクルに示すように、選択制御信号ＳＥＬ００乃至ＳＥＬ３１は、「０」乃至「１１」の間を繰り返す信号となる。
【００７６】
セレクタ回路９７は、ＳＥＬ＿ＷＲＡＰ回路９３−１乃至９３−３２のそれぞれが出力するＳＬＳ＿ＭＯＤ＿ＮＥＸＴを受け取る。セレクタ回路９７は更に、データ処理幅Ｐから１減算した値、この例では「７」を選択制御信号として受け取る。セレクタ回路９７は、０番を開始番号とした場合の７番（即ち８番目）のＳＥＬ＿ＷＲＡＰ回路９３−８が出力する値「８」であるＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号を選択して、ＳＬＳ＿ＭＯＤ回路９１に供給する。これにより、次のサイクルにおいて、ＳＬＳ＿ＭＯＤ回路９１に格納されているＳＬＳ＿ＭＯＤ信号は「８」となる。
【００７７】
図１５に示すＡＤＤ＿ＯＦＦＳＥＴ回路９５において、ＳＬＳ≦Ｍであることにより、セレクタ回路１１４及び１１５は、値「０」を選択して、値「０」のＰＯＰ＿ＮＥＸＴ信号及び値「０」のＯＦＦＳＥＴ信号を出力する。これにより、図１２の動作例に示すように、ＯＦＦＳＥＴ信号及びＰＯＰ信号は、両方とも常に「０」となる。
【００７８】
図１６は、ＳＬＳ≦Ｍの場合の各信号の生成ロジックを示した図である。ＳＬＳ≦Ｍの場合には、図１６に示されるロジックにより、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号、選択制御信号ＳＥＬ、及びＰＯＰ信号が生成される。
【００７９】
図１７は、ＳＬＳ＞Ｍの場合の各信号の生成ロジックを示した図である。ＳＬＳ＞Ｍの場合には、図１６に示されるロジックにより、ＰＯＰ信号、ＯＦＦＳＥＴ信号、及び選択制御信号ＳＥＬが生成される。
【００８０】
図１８は、制御回路４６の構成の別の一例を示す図である。図１３に示す制御回路４６は、ＳＬＳ判定回路１２１、セレクタ回路１２２、ＳＬＳ＿ＭＯＤ回路１２３、セレクタ回路１２４、１加算回路１２５、ＳＬＳ＿ＭＯＤテーブル（ＳＬＳ＿ＭＯＤ＿ＴＢＬ）１２６、及びシフタ回路（ｓｈｉｆｔｅｒ３８４）１２７を含む。制御回路４６は更に、ＯＦＦＳＥＴレジスタ９４、ＡＤＤ＿ＯＦＦＳＥＴ回路９５、Ｐ減算回路９６、及びセレクタ回路９７を含む。図１８において、図１３と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００８１】
図１９は、ＳＬＳ＿ＭＯＤテーブル１２６のデータの一例を示す図である。図１９に示すように、ＳＬＳ＿ＭＯＤテーブル１２６には、１番から３３番までの３３個の行に対して、６４個の位置データが格納されている。例えば、値が「０」の位置データは、図９の結合回路８３の出力するデータＢＵＦＯＵＴの６４個の単位データのうち、０番（一番左端）の単位データを選択する。同様に、値がｎ（ｎ：０〜６３の整数）の位置データは、図９の結合回路８３の出力するデータＢＵＦＯＵＴの６４個の単位データのうち、ｎ番の単位データを選択する。このように、ＳＬＳ＿ＭＯＤテーブル１２６は、幅２Ｍのデータから選択する各単位データの選択位置を示す位置データを格納したテーブルである。
【００８２】
また図１８に示すシフタ回路１２７は、ＳＬＳ＿ＭＯＤテーブル１２６から位置データを受け取り、受け取った位置データをシフトし、シフトした位置データをセレクタ回路８４（図９参照）に選択制御信号ＳＥＬ００乃至ＳＥＬ３１として供給する。この構成により、データ選択部４５のセレクタ回路８４により、適切な単位データを選択することができる。
【００８３】
図１８において、ＳＬＳ判定回路１２１は、ストリーム長ＳＬＳがＭ以下であるか否かを判定する。ＳＬＳ＞Ｍである場合、ＳＬＳ判定回路１２１の出力は「０」となり、セレクタ回路１２２は値「３３」を選択して出力する。従って、この場合、ＳＬＳ＿ＭＯＤテーブル１２６の３３番の行が選択され、図１９の３３番の行に示されるように「０」乃至「６３」の６４個の位置データが出力される。このときセレクタ回路１２４は、ＯＦＦＳＥＴレジスタ９４に格納されるＯＦＦＳＥＴ信号の値を選択し、１加算回路１２５が、セレクタ回路１２４により選択された値に「１」を加算し、加算後の値をシフタ回路１２７に供給する。シフタ回路１２７は、ＳＬＳ＿ＭＯＤテーブル１２６から供給された６４個の位置データを、ＯＦＦＳＥＴ信号の値に応じてシフトし、シフト後の６４個の位置データを選択制御信号ＳＥＬとして出力する。これにより、図１０や図１１に示すような選択制御信号ＳＥＬが生成されることになる。
【００８４】
ＳＬＳ≦Ｍである場合、ＳＬＳ判定回路１２１の出力は「１」となり、セレクタ回路１２２は、ストリーム長ＳＬＳの値を選択して出力する。この結果、例えば、図１２に示すようにストリーム長ＳＬＳが１２である場合、ＳＬＳ＿ＭＯＤテーブル１２６の１２番の行が選択される。即ち、図１９の１２番の行に示されるように「０」乃至「１１」の値を繰り返す６４個の位置データが、ＳＬＳ＿ＭＯＤテーブル１２６から出力される。このときセレクタ回路１２４は、ＳＬＳ＿ＭＯＤ回路１２３に格納されるＳＬＳ＿ＭＯＤ信号の値を選択し、１加算回路１２５が、セレクタ回路１２４により選択された値に「１」を加算し、加算後の値をシフタ回路１２７に供給する。シフタ回路１２７は、ＳＬＳ＿ＭＯＤテーブル１２６から供給された６４個の位置データを、ＳＬＳ＿ＭＯＤ信号の値に応じてシフトし、シフト後の６４個の位置データを選択制御信号ＳＥＬとして出力する。これにより、図１２に示すような選択制御信号ＳＥＬが生成されることになる。
【００８５】
図１３の制御回路４６では、ＳＥＬ＿ＷＲＡＰ回路９３−１乃至９３−３２が３２段に縦続接続されている。従って、ＳＬＳ＿ＭＯＤ＿ＮＥＸＴ信号が格段を伝搬していくのに時間かかり、データ供給回路３１による選択動作を十分に高速に実行できない可能性がある。それに対し図１８に示す制御回路４６では、シフタ回路１２７による少数段の遅延が発生するのみであり、データ供給回路３１による選択動作を十分に高速に実行することができる。
【００８６】
図２０は、演算処理回路の構成の別の一例を示す図である。図２０において、図２と同一又は対応する構成要素は同一又は対応する番号で参照し、その説明は適宜省略する。
【００８７】
図２０の演算処理回路は、データメモリ３０、複数のデータ供給回路３１−１乃至３１−ｎ、演算データパス（データ演算ユニット）３２、データストア回路３３、命令デコーダ３４、及び命令メモリ３５を含む。データ供給回路３１−１乃至３１−ｎは、データメモリ３０に格納される複数ｎ個のソースデータ（オペランド）をそれぞれ読み出し、演算データパス３２に供給する。例えば、図４に示す例のように２つのソースデータｓｒｃ０とｓｒｃ１とが演算対象となる場合、データ供給回路３１−１がソースデータｓｒｃ０を読み出し、データ供給回路３１−２がソースデータｓｒｃ１を読み出してよい。データ供給回路３１−１乃至３１−ｎの各々の構成及び動作は、前述のデータメモリ３０の構成及び動作と基本的に同一であってよい。図２０の演算処理回路では、複数ｎ個のソースデータ（オペランド）に対応することが可能となる。
【００８８】
以上、本発明を実施例に基づいて説明したが、本発明は上記実施例に限定されるものではなく、特許請求の範囲に記載の範囲内で様々な変形が可能である。
【００８９】
例えば、図３及び図４では、オペランドが行列であり、演算データパス３２が行列演算を並列に実行する場合について説明した。しかしながら、本願発明によるデータ供給回路は、行列演算等の特定の種類の演算に限定されるものではなく、演算一般について適用可能である。即ち、単位データのサイズＵＬとＳＩＭＤ幅とにより決まるデータ処理幅Ｐ＝ＵＬ×ＳＩＭＤが可変である演算処理回路一般に対して、データ供給回路３１を適用可能である。
【符号の説明】
【００９０】
１０  ＲＦ部
１１  専用ハードウェア１１
１２−１〜１２−３  ＤＳＰ（Digital Signal Processor）
２１  プロセッサ
２２  プログラムメモリ
２３  周辺回路
２４  データメモリ
３０  データメモリ
３１  データ供給回路
３２  演算データパス
３３  データストア回路
３４  命令デコーダ
３５  命令メモリ
４０  メモリアクセスユニット
４１  バッファキュー
４２  選択制御部
４５  データ選択部
４６  制御回路
【図１】
2015060256.tif 000003
【図２】
2015060256.tif 000004
【図３】
2015060256.tif 000005
【図４】
2015060256.tif 000006
【図５】
2015060256.tif 000007
【図６】
2015060256.tif 000008
【図７】
2015060256.tif 000009
【図８】
2015060256.tif 000010
【図９】
2015060256.tif 000011
【図１０】
2015060256.tif 000012
【図１１】
2015060256.tif 000013
【図１２】
2015060256.tif 000014
【図１３】
2015060256.tif 000015
【図１４】
2015060256.tif 000016
【図１５】
2015060256.tif 000017
【図１６】
2015060256.tif 000018
【図１７】
2015060256.tif 000019
【図１８】
2015060256.tif 000020
【図１９】
2015060256.tif 000021
【図２０】
2015060256.tif 000022