(57)【要約】【課題】  プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置を提供する。【解決手段】  データ演算部１２は、複数のレジスタからなるレジスタファイル２００と、レジスタファイル２００のデータを用いて演算を行う演算器２０２とを備え、レジスタファイル２００とデータメモリ１０との間のデータアクセスを、４つのレジスタからなるグループレジスタ単位で行う。また、２つのグループレジスタをレジスタブロックとしてグループ化したときに、レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタファイル２０８と、インデックスレジスタファイル２０８のエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか１つのレジスタのデータを選択して演算器２０２に出力するセレクタ２０４，２０６とを備える。【選択図】  図３
2006004226.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、
インデックスデータを記憶するインデックスレジスタと、
前記インデックスレジスタのインデックスデータに基づいて、前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタのなかから、１または複数の前記レジスタのデータを選択して前記演算器に出力するセレクタとを備えることを特徴とするデータ演算装置。
【請求項２】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、
前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタと、
前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するセレクタとを備えることを特徴とするデータ演算装置。
【請求項３】
請求項２において、
さらに、複数の前記インデックスレジスタからなるインデックスレジスタファイルと、
与えられたセレクトデータに基づいて、前記インデックスレジスタファイルのなかからいずれか１つの前記インデックスレジスタのエレメントインデックスデータを選択して前記セレクタに出力する第２セレクタとを備えることを特徴とするデータ演算装置。
【請求項４】
請求項３において、
さらに、前記セレクタに出力したエレメントインデックスデータを更新して前記インデックスレジスタファイルに格納するインデックスデータ更新手段を備えることを特徴とするデータ演算装置。
【請求項５】
請求項２ないし４のいずれか１項において、
さらに、前記レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、および前記インデックスレジスタのエレメントインデックスデータに基づいて、当該バンドルインデックスデータにより指定される前記レジスタブロックおよび当該レジスタブロック内のデータの位置を示す第２エレメントインデックスデータを生成するインデックスデータ生成手段を備え、
前記セレクタは、前記インデックスデータ生成手段で生成した第２エレメントインデックスデータに基づいて、複数の前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するようになっていることを特徴とするデータ演算装置。
【請求項６】
請求項５において、
前記インデックスデータ生成手段は、２以上の第１所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第１バンドルモード、および前記第１所定数よりも多い第２所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第２バンドルモードのうちいずれかを指定するバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、前記バンドルインデックスデータおよび前記エレメントインデックスデータに基づいて、前記第２エレメントインデックスデータを生成するようになっていることを特徴とするデータ演算装置。
【請求項７】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置を利用して演算を行うデータ演算方法であって、
前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロックの各グループレジスタに前記外部からデータを読み込むデータ読込ステップと、
前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータをインデックスレジスタに格納するインデックスデータ格納ステップと、
前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するデータ選択ステップと、
前記演算器により演算を行う演算ステップとを含むことを特徴とするデータ演算方法。
【請求項８】
請求項７において、
さらに、前記インデックスデータ格納ステップ、前記データ選択ステップおよび前記演算ステップを繰り返し行う反復演算ステップを含むことを特徴とするデータ演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを演算する装置および方法に係り、特に、プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置に関する。
【背景技術】
【０００２】
デジタル信号処理をプロセッサで行う場合、メモリに対する１回のデータアクセスで、複数のデータをまとめて読み込んだり書き込んだりすることがある。これは、例えば、演算器で語長の長いデータが必要な場合や、処理効率を向上するために演算器で並列処理を行う場合に生じる。
３２ビットのＲＩＳＣプロセッサは、記憶容量が１バイト（８ビット）のレジスタを４つ単位でまとめてグループレジスタを構成し、レジスタファイルとメモリとの間のデータアクセスをグループレジスタ単位（４バイト単位）で行う。メモリに対しては、４の整数倍のアドレスを先頭アドレスとして４バイトのデータをグループレジスタにまとめて読み込み、４の整数倍のアドレスを先頭アドレスとしてグループレジスタのデータをまとめて書き込む。例えば、メモリの先頭から順にデータを読み込む場合、グループレジスタには、１回目のデータアクセスで0000h〜0003h番地のアドレスのデータが、２回目のデータアクセスで0004h〜0007h番地のアドレスのデータがそれぞれ読み込まれる。
【０００３】
このようなデータアクセスを行う際、メモリ上のデータの先頭アドレスがプロセッサのアクセス単位の整数倍でない場合に問題が生じる。この状況は、メモリ上のデータのアドレス境界（以下、データ境界という。）が、プロセッサのアクセス可能なアドレス境界（以下、アクセス境界という。）と一致していないため、境界不整列データアクセスと呼ばれる。
【０００４】
境界不整列データアクセスが引き起こす問題として、処理効率の低下を挙げることができる。３２ビットのＲＩＳＣプロセッサの場合、アクセス境界は、４の整数倍である。４バイト長のデータを処理する場合、４バイト長のデータをメモリから読み込むが、そのデータの先頭アドレスが４の倍数でないと、所望の４バイトを取得するために２回のデータアクセスが必要となり、さらにその並べ替えをソフトウェアで行うため、処理効率が低下する。このような問題を解決するため、ＲＩＳＣプロセッサ用のプログラムでは、コンパイル時に、データ境界とアクセス境界が一致するようにすべてのデータを配置し、実行時には境界不整列データアクセスが起こらないようにしている。
しかしながら、データの論理構造が重複している場合は、コンパイラでは対処することができない。
【０００５】
図１０は、メモリ上のデータの配置を示す図である。
図１０において、メモリには、0000h番地〜000Fh番地のアドレスに１６バイトのデータs[0]〜s[15]が格納され、0100h番地〜010Fh番地のアドレスに１６バイトのデータr[0]〜r[15]が格納されている。
データの論理構造が重複しているとは、s[0]〜s[3]が１つのグループデータを構成するが、s[1]〜s[4]、s[2]〜s[5]およびs[3]〜s[6]もそれぞれ１つのグループデータを構成する場合である。例えば、下式（１）〜（４）に示すような相関演算を行う場合には、境界不整列データアクセスを回避することができない。
【０００６】
p[0] = r[0]*s[0] + r[1]*s[1] + r[2]*s[2] + r[3]*s[3] + …            …（１）
p[1] = r[0]*s[1] + r[1]*s[2] + r[2]*s[3] + r[3]*s[4] + …            …（２）
p[2] = r[0]*s[2] + r[1]*s[3] + r[2]*s[4] + r[3]*s[5] + …            …（３）
p[3] = r[0]*s[3] + r[1]*s[4] + r[2]*s[5] + r[3]*s[6] + …            …（４）
【０００７】
さらに、プログラムも４通り作成しなければならない。
まず、p[0] を求めるには、次の（１）〜（５）のステップを含むプログラムになる。p[4]、p[8]、…、p[4n]についても同様である。
（１）グループレジスタにs[0]〜s[3]を読み込む。
（２）〜（５）グループレジスタのデータに基づいて、r[0]*s[0]、r[1]*s[1]、r[2]*s[2]、r[3]*s[3]を演算する。
【０００８】
次に、p[1] を求めるには、次の（１）〜（６）のステップを含むプログラムになる。p[5]、p[9]、…、p[4n+1]についても同様である。
（１）グループレジスタにs[0]〜s[3]を読み込む。
（２）〜（４）グループレジスタのデータに基づいて、r[0]*s[1]、r[1]*s[2]、r[2]*s[3]を演算する。
（５）グループレジスタにs[4]〜s[7]を読み込む。
（６）グループレジスタのデータに基づいて、r[3]*s[4]を演算する。
【０００９】
次に、p[2] を求めるには、次の（１）〜（６）のステップを含むプログラムになる。p[6]、p[10]、…、p[4n+2]についても同様である。
（１）グループレジスタにs[0]〜s[3]を読み込む。
（２），（３）グループレジスタのデータに基づいて、r[0]*s[2]、r[1]*s[3]を演算する。
（４）グループレジスタにs[4]〜s[7]を読み込む。
（５），（６）グループレジスタのデータに基づいて、r[2]*s[4]、r[3]*s[5]を演算する。
【００１０】
次に、p[3] を求めるには、次の（１）〜（６）のステップを含むプログラムになる。p[7]、p[11]、…、p[4n+3]についても同様である。
（１）グループレジスタにs[0]〜s[3]を読み込む。
（２）グループレジスタのデータに基づいて、r[0]*s[3]を演算する。
（３）グループレジスタにs[4]〜s[7]を読み込む。
（４）〜（６）グループレジスタのデータに基づいて、r[1]*s[4]、r[2]*s[5]、r[3]*s[6]を演算する。
【００１１】
このように、データの論理構造が重複している場合は、境界不整列データアクセスが生じてしまうため、処理効率が低下し、プログラムコスト（プログラムの作成に要する手間、プログラムのデータ容量および複雑さなどをいう。）が増加するという問題がある。このような問題を解決するため、特許文献１および非特許文献１記載のデジタル信号プロセッサが提案されている。
【００１２】
図１１は、従来のデジタル信号プロセッサの構成を示すブロック図である。
特許文献１および非特許文献１記載の発明は、図１１に示すように、レジスタファイル２００と、データを整列するデータ整列バッファ９００とを備え、データ整列バッファ９００を介してデータメモリ１０からレジスタファイル２００にデータを読み込む。
データ整列バッファ９００は、整列バッファ９１０およびマルチプレクサ／バレルシフタ９１２を含む。
【００１３】
マルチプレクサ／バレルシフタ９１２は、データメモリ１０からの３２ビットと、整列バッファ９１０の出力からの３２ビットとを含む６４ビットのデータを受け取り、与えられたオフセット信号に応答して、６４ビットのデータ中３２ビットをその入力として選択し、選択した３２ビットのデータをレジスタファイル２００に供給する。
データ整列バッファ９００は、境界整列データアクセス（データ境界がアクセス境界と一致している状況をいう。）および境界不整列データアクセスに用いることができる。境界整列データアクセスでは、マルチプレクサ／バレルシフタ９１２を介して、指定したオペランドを単一のメモリ行からレジスタファイル２００に供給する。境界不整列データアクセスでは、整列バッファ９１０およびマルチプレクサ／バレルシフタ９１２を介して、指定したオペランドを２つのメモリ行からレジスタファイル２００に供給する。
【００１４】
図１２は、従来のデジタル信号プロセッサの動作を説明するための図である。
図１２において、データメモリ１０には、0000h番地〜0007h番地のアドレスに８バイトのデータs[0]〜s[7]が格納されている。
s[1]〜s[4]を読み込む境界不整列データアクセスを行う場合は、まず、s[0]〜s[3]を整列バッファ９１０に読み込む。次いで、例えば、図１２（ａ）に示すように、「０」を示すオフセット信号をマルチプレクサ／バレルシフタ９１２に与えると、マルチプレクサ／バレルシフタ９１２によりデータの選択が行われ、レジスタファイル２００にs[1]〜s[4]が供給される。
【００１５】
また、s[2]〜s[5]を読み込む境界不整列データアクセスを行う場合は、例えば、図１２（ｂ）に示すように、「１」を示すオフセット信号をマルチプレクサ／バレルシフタ９１２に与えると、マルチプレクサ／バレルシフタ９１２によりデータの選択が行われ、レジスタファイル２００にs[2]〜s[5]が供給される。
また、s[3]〜s[6]を読み込む境界不整列データアクセスを行う場合は、例えば、図１２（ｃ）に示すように、「２」を示すオフセット信号をマルチプレクサ／バレルシフタ９１２に与えると、マルチプレクサ／バレルシフタ９１２によりデータの選択が行われ、レジスタファイル２００にs[3]〜s[6]が供給される。
【特許文献１】特表２００２−５０９３１２号公報
【非特許文献１】「ADSP-TS201 TigerSHARCR Processor Programming Reference」Analog Devices, Inc.,、Revision 0.1, June 2003, Part Number 82-000810-01、Ｐ．７−２４
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかしながら、特許文献１および非特許文献１記載の発明にあっては、少なくともプロセッサのアクセス単位に相当する記憶容量（図１１の例では、３２ビット）の整列バッファ９１０を設けなければならないため、製造コストが増加するという問題があった。
また、図１２の例では、境界不整列データアクセスのパターンを３つ示したが、この３つのアクセスパターンに対応するだけならば、オフセット信号は、２ビットですむ。しかしながら、例えば、s[0]、s[1]、s[4]、s[5]を読み込む境界不整列データアクセスなど、他のアクセスパターンにも対応しようとすると、オフセット信号のビット数がさらに必要となり、製造コストが増加するという問題があった。ちなみに、図１２の例では、境界不整列データアクセスの全アクセスパターンは、8Ｃ4−２＝６８通りあるので、全アクセスパターンに対応しようとすると、オフセット信号は、７ビット必要となる。
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置を提供することを目的としている。
【課題を解決するための手段】
【００１７】
上記目的を達成するために、本発明に係る請求項１記載のデータ演算装置は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、インデックスデータを記憶するインデックスレジスタと、前記インデックスレジスタのインデックスデータに基づいて、前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタのなかから、１または複数の前記レジスタのデータを選択して前記演算器に出力するセレクタとを備える。
【００１８】
このような構成であれば、まず、境界不整列データアクセスが生じる可能性のあるデータ群を少なくとも２つのグループレジスタにまとめて読み込む。そして、インデックスレジスタにインデックスデータを格納すると、セレクタにより、インデックスレジスタのインデックスデータに基づいて、それらグループレジスタのなかから１または複数のレジスタのデータが選択されて演算器に出力され、演算器により演算が行われる。したがって、インデックスデータの格納、セレクタによる選択、および演算器による演算を繰り返し行えば、それらグループレジスタにまとめて読み込まれたデータ群のなかで演算に必要なデータが逐次選択されて演算器に出力される。いずれのデータを演算に用いるかは、インデックスデータによって選択することができるので、境界整列データアクセスとなるグループデータも、境界不整列データアクセスとなるグループデータも区別なく取り扱うことができる。すなわち、境界整列データアクセスとなるグループデータについては、グループレジスタの先頭のレジスタから順にデータを選択していけばよいし、境界不整列データアクセスとなるグループデータについては、グループレジスタの所定箇所のレジスタから順にデータを選択していけばよい。
【００１９】
ここで、セレクタは、１または複数のレジスタのデータを選択するようになっていればどのような構成であってもよく、複数のレジスタのデータを選択する場合は、例えば、グループレジスタ内で連続したレジスタのデータであってもよいし、グループレジスタ内で分散したレジスタのデータであってもよい。
また、インデックスレジスタは、インデックスデータをあらゆる手段でかつあらゆる時期に記憶するものであり、インデックスデータをあらかじめ記憶してあるものであってもよいし、インデックスデータをあらかじめ記憶することなく、本装置の動作時に外部からの入力等によってインデックスデータを記憶するようになっていてもよい。
【００２０】
さらに、本発明に係る請求項２記載のデータ演算装置は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタと、前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するセレクタとを備える。
【００２１】
このような構成であれば、まず、境界不整列データアクセスが生じる可能性のあるデータ群をレジスタブロックのレジスタにまとめて読み込む。そして、インデックスレジスタにエレメントインデックスデータを格納すると、セレクタにより、インデックスレジスタのエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか１つのレジスタのデータが選択されて演算器に出力され、演算器により演算が行われる。したがって、エレメントインデックスデータの格納、セレクタによる選択、および演算器による演算を繰り返し行えば、レジスタブロックのレジスタにまとめて読み込まれたデータ群のなかで演算に必要なデータが逐次選択されて演算器に出力される。いずれのデータを演算に用いるかは、インデックスデータによって選択することができるので、境界整列データアクセスとなるグループデータも、境界不整列データアクセスとなるグループデータも区別なく取り扱うことができる。すなわち、境界整列データアクセスとなるグループデータについては、グループレジスタの先頭のレジスタから順にデータを選択していけばよいし、境界不整列データアクセスとなるグループデータについては、グループレジスタの所定箇所のレジスタから順にデータを選択していけばよい。
【００２２】
ここで、グループレジスタのグループ化は、物理的に行ってもよいし、論理的に行ってもよい。前者の場合、例えば、レジスタファイルのなかで、レジスタブロックに属するグループレジスタと、他のレジスタとをそれぞれ別々のものとして構成することができる。以下、請求項７記載のデータ演算方法において同じである。
また、インデックスレジスタは、エレメントインデックスデータをあらゆる手段でかつあらゆる時期に記憶するものであり、エレメントインデックスデータをあらかじめ記憶してあるものであってもよいし、エレメントインデックスデータをあらかじめ記憶することなく、本装置の動作時に外部からの入力等によってエレメントインデックスデータを記憶するようになっていてもよい。
【００２３】
さらに、本発明に係る請求項３記載のデータ演算装置は、請求項２記載のデータ演算装置において、さらに、複数の前記インデックスレジスタからなるインデックスレジスタファイルと、与えられたセレクトデータに基づいて、前記インデックスレジスタファイルのなかからいずれか１つの前記インデックスレジスタのエレメントインデックスデータを選択して前記セレクタに出力する第２セレクタとを備える。
【００２４】
このような構成であれば、セレクトデータが与えられると、第２セレクタにより、インデックスレジスタファイルのなかからいずれか１つのインデックスレジスタのエレメントインデックスデータが選択されてセレクタに出力され、セレクタにより、入力されたエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか１つのレジスタのデータが選択されて演算器に出力される。
【００２５】
さらに、本発明に係る請求項４記載のデータ演算装置は、請求項３記載のデータ演算装置において、さらに、前記セレクタに出力したエレメントインデックスデータを更新して前記インデックスレジスタファイルに格納するインデックスデータ更新手段を備える。
このような構成であれば、インデックスデータ更新手段により、セレクタに出力したエレメントインデックスデータが更新されてインデックスレジスタファイルに格納される。
【００２６】
さらに、本発明に係る請求項５記載のデータ演算装置は、請求項２ないし４のいずれか１項に記載のデータ演算装置において、さらに、前記レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、および前記インデックスレジスタのエレメントインデックスデータに基づいて、当該バンドルインデックスデータにより指定される前記レジスタブロックおよび当該レジスタブロック内のデータの位置を示す第２エレメントインデックスデータを生成するインデックスデータ生成手段を備え、前記セレクタは、前記インデックスデータ生成手段で生成した第２エレメントインデックスデータに基づいて、複数の前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するようになっている。
【００２７】
このような構成であれば、バンドルインデックスデータが与えられると、インデックスデータ生成手段により、与えられたバンドルインデックスデータおよびエレメントインデックスデータに基づいて、そのバンドルインデックスデータにより指定されるレジスタブロックおよびそのレジスタブロック内のデータの位置を示す第２エレメントインデックスデータが生成される。そして、セレクタにより、生成された第２エレメントインデックスデータに基づいて、複数のレジスタブロックのレジスタのなかからいずれか１つのレジスタのデータが選択されて演算器に出力される。
【００２８】
さらに、本発明に係る請求項６記載のデータ演算装置は、請求項５記載のデータ演算装置において、前記インデックスデータ生成手段は、２以上の第１所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第１バンドルモード、および前記第１所定数よりも多い第２所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第２バンドルモードのうちいずれかを指定するバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、前記バンドルインデックスデータおよび前記エレメントインデックスデータに基づいて、前記第２エレメントインデックスデータを生成するようになっている。
【００２９】
このような構成であれば、第１バンドルモードおよび第２バンドルモードのうちいずれかを指定するバンドルモードデータが与えられると、インデックスデータ生成手段により、与えられたバンドルモードデータ、バンドルインデックスデータおよびエレメントインデックスデータに基づいて、第２エレメントインデックスデータが生成される。
一方、上記目的を達成するために、本発明に係る請求項７記載のデータ演算方法は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置を利用して演算を行うデータ演算方法であって、前記レジスタファイルのレジスタのうち少なくとも２つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロックの各グループレジスタに前記外部からデータを読み込むデータ読込ステップと、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータをインデックスレジスタに格納するインデックスデータ格納ステップと、前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか１つの前記レジスタのデータを選択して前記演算器に出力するデータ選択ステップと、前記演算器により演算を行う演算ステップとを含む。
さらに、本発明に係る請求項８記載のデータ演算方法は、請求項７記載のデータ演算方法において、さらに、前記インデックスデータ格納ステップ、前記データ選択ステップおよび前記演算ステップを繰り返し行う反復演算ステップを含む。
【発明の効果】
【００３０】
以上説明したように、本発明に係る請求項１記載のデータ演算装置によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタおよびセレクタを設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、インデックスデータのビット数をさほど増やさなくてすむので、特許文献１記載の発明に比して、製造コストを低減することができるという効果も得られる。
【００３１】
さらに、本発明に係る請求項２記載のデータ演算装置によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタおよびセレクタを設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献１記載の発明に比して、製造コストを低減することができるという効果も得られる。
【００３２】
さらに、本発明に係る請求項３記載のデータ演算装置によれば、複数のエレメントインデックスデータをインデックスレジスタファイルに格納しておき、セレクトデータによってそれらエレメントインデックスデータを選択的に使用することができるので、インデックスレジスタの使い勝手が向上し、プログラムを作成しやすくなるという効果が得られる。
さらに、本発明に係る請求項４記載のデータ演算装置によれば、エレメントインデックスデータを使用するたびに自動的に更新されるので、エレメントインデックスデータの更新をソフトウェアで行わなくてすみ、演算速度を向上することができるという効果が得られる。
【００３３】
さらに、本発明に係る請求項５記載のデータ演算装置によれば、レジスタファイルに複数のレジスタブロックが存在する場合、バンドルインデックスデータによってそれらレジスタブロックを選択的に使用することができるので、レジスタの使い勝手が向上し、プログラムを作成しやすくなるという効果が得られる。
さらに、本発明に係る請求項６記載のデータ演算装置によれば、バンドルモードデータによってレジスタブロックの論理構造を変更することができるので、レジスタの使い勝手がさらに向上し、プログラムをさらに作成しやすくなるという効果が得られる。
【００３４】
一方、本発明に係る請求項７記載のデータ演算方法によれば、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタを利用するだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献１記載の発明に比して、製造コストを低減することができるという効果も得られる。
【００３５】
さらに、本発明に係る請求項８記載のデータ演算方法によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。
【発明を実施するための最良の形態】
【００３６】
以下、本発明の第１の実施の形態を図面を参照しながら説明する。図１ないし図６は、本発明に係るデータ演算装置の第１の実施の形態を示す図である。
本実施の形態は、本発明に係るデータ演算装置を、図１に示すように、デジタル信号処理を行う３２ビットＲＩＳＣ型のデジタル信号処理装置１００においてデータ演算部１２に適用したものである。
【００３７】
まず、デジタル信号処理装置１００の構成を図１を参照しながら説明する。
図１は、デジタル信号処理装置１００のハードウェア構成を示すブロック図である。
デジタル信号処理装置１００は、図１に示すように、演算用のデータを記憶するデータメモリ１０と、データメモリ１０からデータを読み込んで演算を行うデータ演算部１２と、データメモリ１０のデータアドレスを生成するデータアドレス生成部１４と、デジタル信号処理装置１００全体の制御プログラムを記憶したプログラムメモリ１６と、プログラムメモリ１６の制御プログラムに基づいてデジタル信号処理装置１００全体を制御するプログラムシーケンサ１８とで構成されている。データメモリ１０、データ演算部１２、データアドレス生成部１４およびプログラムシーケンサ１８は、データを転送するための信号線であるバス２０で相互にかつデータ授受可能に接続され、プログラムメモリ１６は、プログラムシーケンサ１８に直接接続されている。
【００３８】
データメモリ１０は、データ演算部１２で演算対象となるデータ、およびデータ演算部１２の演算結果のデータを格納する。また、データアドレス生成部１４またはプログラムシーケンサ１８内のレジスタの値を格納することもある。
データ演算部１２は、データメモリ１０に対して、４の整数倍のアドレス（0000h、0004h、0008h、000Ch…）をアクセス境界として４バイト単位でデータアクセスを行う。以下、データ演算部１２のアクセス境界をグループアドレスという。
【００３９】
データアドレス生成部１４は、データメモリ１０と、データ演算部１２、データアドレス生成部１４またはプログラムシーケンサ１８との間のデータ転送を実行する際に必要となるデータアドレスを生成する。また、データアドレスの生成に合わせて、データメモリ１０を制御するための信号を生成する。これらの動作は、プログラムシーケンサ１８からの制御信号により規定される。
【００４０】
図２は、データアドレスのデータ構造を示す図である。
データアドレスは、図２に示すように、ｍビットのデータからなり、データメモリ１０の最小記憶単位を１バイトとして２mバイトのメモリ空間を１バイト単位でアクセス可能なアドレスを構成している。データアドレスは、上位（ｍ−２）ビットｂm-1，…，ｂ2がグループアドレスを構成し、下位２ビットｂ1，ｂ0がグループアドレス間の細分されたアドレスを構成している。
【００４１】
データアドレス生成部１４は、より具体的には、複数のポインタレジスタを有し、データアドレスのうちグループアドレスをデータメモリ１０に出力し、データアドレスのうち下位２ビットをデータ演算部１２にそれぞれ出力する。
図１に戻り、プログラムシーケンサ１８は、プログラムメモリ１６から制御プログラムを読み出し、読み出した制御プログラムに従って、データメモリ１０、データ演算部１２、データアドレス生成部１４、プログラムメモリ１６およびプログラムシーケンサ１８を制御する。データメモリ１０、データ演算部１２およびデータアドレス生成部１４に対しては、バス２０を介して制御信号を出力し、プログラムメモリ１６は制御信号を直接出力する。
【００４２】
次に、データ演算部１２の構成を図３および図４を参照しながら詳細に説明する。
図３は、データ演算部１２のハードウェア構成を示すブロック図である。
データ演算部１２は、図３に示すように、複数のレジスタからなるレジスタファイル２００と、レジスタファイル２００のデータを用いて演算を行う演算器２０２と、レジスタファイル２００のなかからデータを選択するセレクタ２０４，２０６と、複数のインデックスレジスタからなるインデックスレジスタファイル２０８と、インデックスレジスタファイル２０８のなかからデータを選択するセレクタ２１０，２１２と、インデックスレジスタファイル２０８のデータを更新する計算器２１４と、計算器２１４とバス２０のデータを選択するセレクタ２１６とで構成されている。
【００４３】
レジスタファイル２００は、ｎ個のグループレジスタＲ0〜Ｒn-1からなる。グループレジスタＲ0は、４個のレジスタＲ0[0]〜Ｒ0[3]からなり、各レジスタＲ0[0]〜Ｒ0[3]は、１バイトの記憶容量を有している。他のグループレジスタＲ1〜Ｒn-1についても同様の構成となっている。
セレクタ２０４は、グループレジスタＲ0，Ｒ1をレジスタブロックＡとしてレジスタブロックＡの各レジスタと接続し、セレクタ２１０からのセレクトデータに基づいて、レジスタブロックＡのレジスタのなかからいずれか１つのレジスタのデータを選択し、選択したデータを演算器２０２の第１オペランドとして演算器２０２に出力する。
【００４４】
セレクタ２１０からのセレクトデータは、３ビットからなる。セレクタ２０４は、セレクトデータの最上位ビットが「０」であるときは、グループレジスタＲ0のうち下位２ビットの値により指定されるレジスタのデータを選択する。すなわち、セレクトデータが「０００」であるときはレジスタＲ0[0]のデータを、「００１」であるときはレジスタＲ0[1]のデータを、「０１０」であるときはレジスタＲ0[2]のデータを、「０１１」であるときはレジスタＲ0[3]のデータをそれぞれ選択する。また、セレクトデータの最上位ビットが「１」であるときは、グループレジスタＲ1のうち下位２ビットの値により指定されるレジスタのデータを選択する。すなわち、セレクトデータが「１００」であるときはレジスタＲ1[0]のデータを、「１０１」であるときはレジスタＲ1[1]のデータを、「１１０」であるときはレジスタＲ1[2]のデータを、「１１１」であるときはレジスタＲ1[3]のデータをそれぞれ選択する。
【００４５】
セレクタ２０６は、グループレジスタＲ2，Ｒ3をレジスタブロックＢとしてレジスタブロックＢの各レジスタと接続し、セレクタ２１２からのセレクトデータに基づいて、レジスタブロックＢのレジスタのなかからいずれか１つのレジスタのデータを選択し、選択したデータを演算器２０２の第２オペランドとして演算器２０２に出力する。データの選択手順は、セレクタ２０４と同様である。
インデックスレジスタファイル２０８は、エレメントインデックスデータを各インデックスレジスタに記憶する。
【００４６】
図４は、エレメントインデックスデータのデータ構造を示す図である。
エレメントインデックスデータは、図４に示すように、３ビットのデータからなり、最上位ビットｂ2がグループレジスタＲ0，Ｒ1（Ｒ2，Ｒ3）の別を示し、下位２ビットｂ1，ｂ0がグループレジスタの各レジスタの別を示す。エレメントインデックスデータの各ビットは、セレクタ２１０，２１２からのセレクトデータの各ビットに対応している。また、エレメントインデックスデータの下位２ビットｂ1，ｂ0は、データアドレスの下位２ビットｂ1，ｂ0に対応している。
【００４７】
図３に戻り、セレクタ２１０は、プログラムシーケンサ１８からのセレクトデータに基づいて、インデックスレジスタファイル２０８のなかからいずれか１つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ２０４に出力する。なお、プログラムシーケンサ１８では、セレクタ２１０を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２１０に出力する。
【００４８】
セレクタ２１２は、プログラムシーケンサ１８からのセレクトデータに基づいて、インデックスレジスタファイル２０８のなかからいずれか１つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ２０６に出力する。なお、プログラムシーケンサ１８では、セレクタ２１２を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２１２に出力する。
【００４９】
計算器２１４は、セレクタ２１０またはセレクタ２１２からセレクトデータとして出力されるエレメントインデックスデータを更新してセレクタ２１６に出力する。エレメントインデックスデータは、レジスタブロックＡ，Ｂのレジスタからデータを取得する順序があらかじめ決まっている場合に、その順序でデータが選択できるように更新する。例えば、レジスタブロックＡ，Ｂの先頭方向から末尾方向に連続してデータを選択する場合は、エレメントインデックスデータに「１」を加算することにより更新する。末尾方向から先頭方向に連続してデータを選択する場合は、エレメントインデックスデータから「１」を減算することにより更新する。
【００５０】
セレクタ２１６は、プログラムシーケンサ１８からのセレクトデータに基づいて、データアドレス生成部１４からのデータアドレスのうち下位２ビットのデータ、および計算器２１４からのエレメントインデックスデータのうちいずれか一方を選択してインデックスレジスタファイル２０８に格納する。なお、プログラムシーケンサ１８では、セレクタ２１６を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２１６に出力する。
【００５１】
次に、本実施の形態の動作を図５および図６を参照しながら説明する。
初めに、デジタル信号処理装置１００で上式（１）に示す相関演算を行う場合を説明する。ただし、s[n]とr[n]は、図１０に示すように、データメモリ１０に格納されているとする。
図５は、プログラムシーケンサ１８で実行される処理を示すフローチャートである。
プログラムシーケンサ１８では、プログラムメモリ１６から制御プログラムが読み出され、読み出された制御プログラムに従って、図５のフローチャートに示す相関演算処理がステップＳ１００〜Ｓ１５０の順で実行される。
【００５２】
ステップＳ１００では、ポインタレジスタＰ０にr[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部１４では、r[0]のデータアドレスのうちグループアドレスがポインタレジスタＰ０に格納される。また、データ演算部１２では、r[0]のデータアドレスのうち下位２ビットのデータがインデックスレジスタファイル２０８に格納される。r[0]のデータアドレスのうち下位２ビットは「００」なので、最上位ビットを「０」として３ビットのデータ「０００」がエレメントインデックスデータｒとして格納される。
【００５３】
ステップＳ１０２では、ポインタレジスタＰ１にs[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部１４では、s[0]のデータアドレスのうちグループアドレスがポインタレジスタＰ１に格納される。また、データ演算部１２では、s[0]のデータアドレスのうち下位２ビットのデータがインデックスレジスタファイル２０８に格納される。s[0]のデータアドレスのうち下位２ビットは「００」なので、最上位ビットを「０」として３ビットのデータ「０００」がエレメントインデックスデータｓとして格納される。
【００５４】
ステップＳ１０４では、レジスタＡ０（グループレジスタＲ4〜Ｒn-1のいずれか）の内容を初期化する命令コードが実行されると、データ演算部１２では、レジスタＡ０に「０」が設定される。
ステップＳ１０８では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ0に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[0]〜s[3]がグループレジスタＲ0に読み込まれる。
【００５５】
ステップＳ１１０では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[4]を指し示すことになる。
ステップＳ１１２では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ1に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[4]〜s[7]がグループレジスタＲ1に読み込まれる。
【００５６】
ステップＳ１１４では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[8]を指し示すことになる。
ステップＳ１１６では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ2に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[0]〜r[3]がグループレジスタＲ2に読み込まれる。
ステップＳ１１８では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[4]を指し示すことになる。
【００５７】
ステップＳ１２０では、レジスタブロックＡ，Ｂのレジスタのデータを演算する命令コード（以下、ブロック演算命令コードという。）が実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「０００」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[0]のデータs[0]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１２により、エレメントインデックスデータｒ「０００」が選択されてセレクタ２０６に出力され、セレクタ２０６により、レジスタＲ2[0]のデータr[0]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[0]とr[0]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓ，ｒにそれぞれ「１」が加算され、インデックスレジスタファイル２０８に格納される。
【００５８】
ステップＳ１２２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「００１」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[1]のデータs[1]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１２により、エレメントインデックスデータｒ「００１」が選択されてセレクタ２０６に出力され、セレクタ２０６により、レジスタＲ2[1]のデータr[1]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[1]とr[1]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項および第２項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓ，ｒにそれぞれ「１」が加算され、インデックスレジスタファイル２０８に格納される。
【００５９】
ステップＳ１２４では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[2]，Ｒ2[2]のデータs[2]，r[2]がそれぞれ選択される。そして、演算器２０２により、s[2]とr[2]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第３項の演算結果が得られる。
【００６０】
ステップＳ１２６では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[3]，Ｒ2[3]のデータs[3]，r[3]がそれぞれ選択される。そして、演算器２０２により、s[3]とr[3]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第４項の演算結果が得られる。
【００６１】
ステップＳ１２８では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ0に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[8]〜s[11]がグループレジスタＲ0に読み込まれる。
ステップＳ１３０では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[12]を指し示すことになる。
【００６２】
ステップＳ１３２では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ3に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[4]〜r[7]がグループレジスタＲ3に読み込まれる。
ステップＳ１３４では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[7]を指し示すことになる。
【００６３】
ステップＳ１３６では、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[0]，Ｒ3[0]のデータs[4]，r[4]がそれぞれ選択される。そして、演算器２０２により、s[4]とr[4]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第５項の演算結果が得られる。
【００６４】
ステップＳ１３８では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[1]，Ｒ3[1]のデータs[5]，r[5]がそれぞれ選択される。そして、演算器２０２により、s[5]とr[5]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第６項の演算結果が得られる。
【００６５】
ステップＳ１４０では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[2]，Ｒ3[2]のデータs[6]，r[6]がそれぞれ選択される。そして、演算器２０２により、s[6]とr[6]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第７項の演算結果が得られる。
【００６６】
ステップＳ１４２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[3]，Ｒ3[3]のデータs[7]，r[7]がそれぞれ選択される。そして、演算器２０２により、s[7]とr[7]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第８項の演算結果が得られる。
【００６７】
ステップＳ１４４では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ1に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[12]〜s[15]がグループレジスタＲ1に読み込まれる。
ステップＳ１４６では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[16]を指し示すことになる。
【００６８】
ステップＳ１４８では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ2に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[8]〜r[11]がグループレジスタＲ2に読み込まれる。
ステップＳ１５０では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[12]を指し示すことになる。
以下は、ステップＳ１２０〜Ｓ１５０の処理を必要な数だけ繰り返し行えばよい。
【００６９】
次に、デジタル信号処理装置１００で上式（２）に示す相関演算を行う場合を説明する。ただし、s[n]とr[n]は、図１０に示すように、データメモリ１０に格納されているとする。
図６は、プログラムシーケンサ１８で実行される処理を示すフローチャートである。
プログラムシーケンサ１８では、プログラムメモリ１６から制御プログラムが読み出され、読み出された制御プログラムに従って、図６のフローチャートに示す相関演算処理がステップＳ２００〜Ｓ２５０の順で実行される。
【００７０】
ステップＳ２００では、ステップＳ１００と同一の処理が実行される。
ステップＳ２０２では、ポインタレジスタＰ１にs[1]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部１４では、s[1]のデータアドレスのうちグループアドレスがポインタレジスタＰ１に格納される。また、データ演算部１２では、s[1]のデータアドレスのうち下位２ビットのデータがインデックスレジスタファイル２０８に格納される。s[1]のデータアドレスのうち下位２ビットは「０１」なので、最上位ビットを「０」として３ビットのデータ「００１」がエレメントインデックスデータｓとして格納される。
【００７１】
ステップＳ２０４〜Ｓ２１８では、ステップＳ１０４〜Ｓ１１８と同一の処理が実行される。
ステップＳ２２０では、ブロック演算命令コードが実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「００１」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[1]のデータs[1]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１２により、エレメントインデックスデータｒ「０００」が選択されてセレクタ２０６に出力され、セレクタ２０６により、レジスタＲ2[0]のデータr[0]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[1]とr[0]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓ，ｒにそれぞれ「１」が加算され、インデックスレジスタファイル２０８に格納される。
【００７２】
ステップＳ２２２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「０１０」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[2]のデータs[2]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１２により、エレメントインデックスデータｒ「００１」が選択されてセレクタ２０６に出力され、セレクタ２０６により、レジスタＲ2[1]のデータr[1]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[2]とr[1]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項および第２項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓ，ｒにそれぞれ「１」が加算され、インデックスレジスタファイル２０８に格納される。
【００７３】
ステップＳ２２４では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[3]，Ｒ2[2]のデータs[3]，r[2]がそれぞれ選択される。そして、演算器２０２により、s[3]とr[2]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第３項の演算結果が得られる。
【００７４】
ステップＳ２２６では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[0]，Ｒ2[3]のデータs[4]，r[3]がそれぞれ選択される。そして、演算器２０２により、s[4]とr[3]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第４項の演算結果が得られる。
【００７５】
ステップＳ２２８〜Ｓ２３４では、ステップＳ１２８〜Ｓ１３４と同一の処理が実行される。
ステップＳ２３６では、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[1]，Ｒ3[0]のデータs[5]，r[4]がそれぞれ選択される。そして、演算器２０２により、s[5]とr[4]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第５項の演算結果が得られる。
【００７６】
ステップＳ２３８では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[2]，Ｒ3[1]のデータs[6]，r[5]がそれぞれ選択される。そして、演算器２０２により、s[6]とr[5]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第６項の演算結果が得られる。
【００７７】
ステップＳ２４０では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[3]，Ｒ3[2]のデータs[7]，r[6]がそれぞれ選択される。そして、演算器２０２により、s[7]とr[6]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第７項の演算結果が得られる。
【００７８】
ステップＳ２４２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[0]，Ｒ3[3]のデータs[8]，r[7]がそれぞれ選択される。そして、演算器２０２により、s[8]とr[7]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（２）の第１項〜第８項の演算結果が得られる。
【００７９】
ステップＳ２４４〜Ｓ２５０では、ステップＳ１４４〜Ｓ１５０と同一の処理が実行される。
以下は、ステップＳ２２０〜Ｓ２５０の処理を必要な数だけ繰り返し行えばよい。
このように、上式（１）に示す相関演算を行う場合と異なるのは、ステップＳ２０２，Ｓ２２０〜Ｓ２２６，Ｓ２３６〜Ｓ２４２の処理であるが、プログラムシーケンサ１８の制御プログラムとしては、ステップＳ２０２の記述だけが異なる。このことは、上式（３），（４）に示す相関演算を行う場合についても同様である。
【００８０】
このようにして、本実施の形態では、複数のグループレジスタＲ0〜Ｒn-1からなるレジスタファイル２００と、レジスタファイル２００のデータを用いて演算を行う演算器２０２と、エレメントインデックスデータを記憶するインデックスレジスタと、インデックスレジスタのエレメントインデックスデータに基づいて、２つのグループレジスタＲ0，Ｒ1（Ｒ2，Ｒ3）をレジスタブロックとしてレジスタブロックのレジスタＲ0[0]〜Ｒ1[3]（Ｒ2[0]〜Ｒ3[3]）のなかからいずれか１つのレジスタのデータを選択して演算器２０２に出力するセレクタ２０４，２０６とを備える。
【００８１】
これにより、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイル２００へのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができる。さらに、インデックスレジスタおよびセレクタ２０４，２０６を設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献１の発明に比して、製造コストを低減することができる。
【００８２】
さらに、本実施の形態では、複数のインデックスレジスタからなるインデックスレジスタファイル２０８と、与えられたセレクトデータに基づいて、インデックスレジスタファイル２０８のなかからいずれか１つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ２０４，２０６に出力するセレクタ２１０，２１２とを備える。
これにより、複数のエレメントインデックスデータをインデックスレジスタファイル２０８に格納しておき、セレクトデータによってそれらエレメントインデックスデータを選択的に使用することができるので、インデックスレジスタの使い勝手が向上し、プログラムを作成しやすくなる。
【００８３】
さらに、本実施の形態では、セレクタ２０４，２０６に出力したエレメントインデックスデータを更新してインデックスレジスタファイル２０８に格納する計算器２１４を備える。
これにより、エレメントインデックスデータを使用するたびに自動的に更新されるので、エレメントインデックスデータの更新をソフトウェアで行わなくてすみ、演算速度を向上することができる。
【００８４】
上記第１の実施の形態において、エレメントインデックスデータは、請求項１ないし４または７記載のインデックスデータに対応し、セレクタ２０４，２０６は、請求項１ないし４記載のセレクタに対応し、セレクタ２１０，２１２は、請求項３記載の第２セレクタに対応し、計算器２１４は、請求項４記載のインデックスデータ更新手段に対応している。
【００８５】
次に、本発明の第２の実施の形態を図面を参照しながら説明する。図７ないし図９は、本発明に係るデータ演算装置の第２の実施の形態を示す図である。
本実施の形態は、本発明に係るデータ演算装置を、デジタル信号処理を行う３２ビットＲＩＳＣ型のデジタル信号処理装置１００においてデータ演算部１２に適用したものであり、上記第１の実施の形態と異なるのは、レジスタブロックに含まれるグループレジスタの数を動的に変更する点にある。なお、以下、上記第１の実施の形態と異なる部分についてのみ説明し、上記第１の実施の形態と重複する部分については同一の符号を付して説明を省略する。
【００８６】
次に、データ演算部１２の構成を図７ないし図９を参照しながら詳細に説明する。
図７は、データ演算部１２のハードウェア構成を示すブロック図である。
データ演算部１２は、図７に示すように、レジスタファイル２００と、演算器２０２と、レジスタファイル２００のなかからデータを選択するセレクタ２２４，２２６と、複数のインデックスレジスタからなるインデックスレジスタファイル２２８と、インデックスレジスタファイル２２８のなかからデータを選択するセレクタ２３０，２３２と、インデックスレジスタファイル２２８のデータを更新する計算器２３４と、計算器２３４とバス２０のデータを選択するセレクタ２３６とで構成されている。
【００８７】
図８は、レジスタブロックの構成を示す図である。
本実施の形態では、１つのグループレジスタを１つのレジスタブロックとしてグループ化するバンドルモード０と、２つのグループレジスタを１つのレジスタブロックとしてグループ化するバンドルモード１と、４つのグループレジスタを１つのレジスタブロックとしてグループ化するバンドルモード２と、８つのグループレジスタを１つのレジスタブロックとしてグループ化するバンドルモード３とを規定する。
【００８８】
バンドルモード０では、図８に示すように、グループレジスタＲ0をレジスタブロック０（バンドル番号「０」により特定されるレジスタブロックをいう。以下、同様に略記する。）とし、同様に、グループレジスタＲ2〜Ｒ7をレジスタブロック１〜７としてそれぞれグループ化する。
バンドルモード１では、グループレジスタＲ0，Ｒ1をレジスタブロック０とし、グループレジスタＲ2，Ｒ3をレジスタブロック１とし、グループレジスタＲ4，Ｒ5をレジスタブロック２とし、グループレジスタＲ6，Ｒ7をレジスタブロック３としてそれぞれグループ化する。
【００８９】
バンドルモード２では、グループレジスタＲ0〜Ｒ3をレジスタブロック０とし、グループレジスタＲ4〜Ｒ7をレジスタブロック１としてそれぞれグループ化する。
バンドルモード３では、グループレジスタＲ0〜Ｒ7をレジスタブロック０としてそれぞれグループ化する。
図７に戻り、セレクタ２２４は、グループレジスタＲ0〜Ｒ7の各レジスタと接続し、セレクタ２３０からのセレクトデータに基づいて、グループレジスタＲ0〜Ｒ7のなかからいずれか１つのレジスタのデータを選択し、選択したデータを演算器２０２の第１オペランドとして演算器２０２に出力する。
【００９０】
セレクタ２３０からのセレクトデータは、５ビットからなる。セレクタ２２４は、セレクトデータの上位３ビットが「０００」であるときは、グループレジスタＲ0のうち下位２ビットの値により指定されるレジスタのデータを選択し、セレクトデータの上位３ビットが「００１」であるときは、グループレジスタＲ1のうち下位２ビットの値により指定されるレジスタのデータを選択する。同様に、セレクトデータの上位３ビットが「０１０」、「０１１」、「１００」、「１０１」、「１１０」および「１１１」であるときは、グループレジスタＲ2〜Ｒ7のうち下位２ビットの値により指定されるレジスタのデータを選択する。
【００９１】
セレクタ２２６は、グループレジスタＲ0〜Ｒ7の各レジスタと接続し、セレクタ２３２からのセレクトデータに基づいて、グループレジスタＲ0〜Ｒ7のなかからいずれか１つのレジスタのデータを選択し、選択したデータを演算器２０２の第２オペランドとして演算器２０２に出力する。データの選択手順は、セレクタ２２４と同様である。
インデックスレジスタファイル２２８は、エレメントインデックスデータを各インデックスレジスタに記憶する。
【００９２】
図９は、エレメントインデックスデータのデータ構造を示す図である。
エレメントインデックスデータは、図９に示すように、５ビットのデータからなり、バンドルモード０のときは、５ビットのうち下位２ビットを使用し、下位２ビットｂ1，ｂ0がグループレジスタの各レジスタの別を示す。
バンドルモード１のときは、５ビットのうち下位３ビットを使用し、上位３番目のビットｂ2がグループレジスタＲ0，Ｒ1（Ｒ2，Ｒ3等）の別を示し、下位２ビットｂ1，ｂ0がグループレジスタの各レジスタの別を示す。
【００９３】
バンドルモード２のときは、５ビットのうち下位４ビットを使用し、上位２，３番目のビットｂ3，ｂ2がグループレジスタＲ0〜Ｒ3（Ｒ4〜Ｒ7）の別を示し、下位２ビットｂ1，ｂ0がグループレジスタの各レジスタの別を示す。
バンドルモード３のときは、上位１〜３番目のビットｂ4〜ｂ2がグループレジスタＲ0〜Ｒ7の別を示し、下位２ビットｂ1，ｂ0がグループレジスタの各レジスタの別を示す。エレメントインデックスデータの各ビットは、セレクタ２３０，２３２からのセレクトデータの各ビットに対応している。また、エレメントインデックスデータの下位２ビットｂ1，ｂ0は、データアドレスの下位２ビットｂ1，ｂ0に対応している。
【００９４】
図７に戻り、セレクタ２３０は、プログラムシーケンサ１８からのセレクトデータに基づいて、インデックスレジスタファイル２２８のなかからいずれか１つのインデックスレジスタのエレメントインデックスデータを選択し、選択したエレメントインデックスデータ、並びにプログラムシーケンサ１８からのバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータを生成し、生成したレジスタインデックスデータをセレクタ２２４に出力する。
【００９５】
バンドルインデックスデータは、バンドル番号を示す５ビットのデータである。バンドルモード０を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位３ビットを上位ビットとし、選択したエレメントインデックスデータの下位２ビットを下位ビットとして結合し、５ビットのレジスタインデックスデータを生成して出力する。
【００９６】
バンドルモード１を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位２ビットを上位ビットとし、選択したエレメントインデックスデータの下位３ビットを下位ビットとして結合し、５ビットのレジスタインデックスデータを生成して出力する。
バンドルモード２を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位１ビットを上位ビットとし、選択したエレメントインデックスデータの下位４ビットを下位ビットとして結合し、５ビットのレジスタインデックスデータを生成して出力する。
【００９７】
バンドルモード３を示すバンドルモードデータが与えられたときは、選択したエレメントインデックスデータをそのままレジスタインデックスデータとして出力する。
なお、プログラムシーケンサ１８では、セレクタ２３０を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２３０に出力する。また、バンドルモードまたはバンドル番号を設定する命令コードを実行すると、その命令コードに対応するオペランドをバンドルモードデータまたはバンドルインデックスデータとしてセレクタ２３０に出力する。
【００９８】
セレクタ２３２は、プログラムシーケンサ１８からのセレクトデータに基づいて、インデックスレジスタファイル２２８のなかからいずれか１つのインデックスレジスタのエレメントインデックスデータを選択し、選択したエレメントインデックスデータ、並びにプログラムシーケンサ１８からのバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータを生成し、生成したレジスタインデックスデータをセレクタ２２６に出力する。レジスタインデックスデータの生成手順は、セレクタ２３０と同様である。なお、プログラムシーケンサ１８では、セレクタ２３２を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２３２に出力する。また、バンドルモードまたはバンドル番号を設定する命令コードを実行すると、その命令コードに対応するオペランドをバンドルモードデータまたはバンドルインデックスデータとしてセレクタ２３２に出力する。
【００９９】
計算器２３４は、セレクタ２３０またはセレクタ２３２からセレクトデータとして出力されるレジスタインデックスデータを更新してセレクタ２３６に出力する。レジスタインデックスデータは、レジスタブロックのレジスタからデータを取得する順序があらかじめ決まっている場合に、その順序でデータが選択できるように更新する。レジスタインデックスデータの更新手順は、上記第１の実施の形態において計算器２１４によりエレメントインデックスデータを更新する手順と同じ要領で行うことができる。
【０１００】
セレクタ２３６は、プログラムシーケンサ１８からのセレクトデータに基づいて、データアドレス生成部１４からのデータアドレスのうち下位２ビットのデータ、および計算器２３４からのレジスタインデックスデータのうちいずれか一方を選択してインデックスレジスタファイル２２８に格納する。なお、プログラムシーケンサ１８では、セレクタ２３６を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ２３６に出力する。
【０１０１】
次に、本実施の形態の動作を説明する。
初めに、バンドルモード１で演算を行う場合を説明する。
プログラムシーケンサ１８では、バンドルモード１に設定する命令コードが実行されると、バンドルモード１を示すバンドルモードデータがデータ演算部１２に出力される。そして、バンドル番号「０」を設定する命令コードが実行されると、バンドルインデックスデータとして「０００００」がデータ演算部１２に出力される。
【０１０２】
データ演算部１２では、バンドルモードデータおよびバンドルインデックスデータが与えられると、セレクタ２３０，２３２により、エレメントインデックスデータが選択され、選択されたエレメントインデックスデータ、並びに与えられたバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータが生成されてセレクタ２２４，２２６に出力される。このとき、バンドルインデックスデータの下位２ビットが「００」なので、「００ｘｘｘ」（「ｘ」は、選択されたエレメントインデックスデータのビットを示す。以下、同様に表記する。）がレジスタインデックスデータとして出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータ「００ｘｘｘ」に基づいて、グループレジスタＲ0，Ｒ1のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１０３】
なお、セレクタ２３０，２３２に与えられるセレクトデータが異なるので、セレクタ２２４，２２６，２３０，２３２による選択はそれぞれ独立に行われる。
プログラムシーケンサ１８では、バンドル番号「１」を設定する命令コードが実行されると、バンドルインデックスデータとして「００００１」がデータ演算部１２に出力される。
【０１０４】
データ演算部１２では、バンドルインデックスデータの下位２ビットが「０１」なので、セレクタ２３０，２３２により、「０１ｘｘｘ」がレジスタインデックスデータとして生成・出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータ「０１ｘｘｘ」に基づいて、グループレジスタＲ2，Ｒ3のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
バンドル番号「２」または「３」を設定する命令コードが実行された場合も同様であり、グループレジスタＲ4，Ｒ5またはＲ6，Ｒ7のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１０５】
次に、バンドルモード２で演算を行う場合を説明する。
プログラムシーケンサ１８では、バンドルモード２に設定する命令コードが実行されると、バンドルモード２を示すバンドルモードデータがデータ演算部１２に出力される。そして、バンドル番号「０」を設定する命令コードが実行されると、バンドルインデックスデータとして「０００００」がデータ演算部１２に出力される。
【０１０６】
データ演算部１２では、バンドルモードデータおよびバンドルインデックスデータが与えられると、バンドルインデックスデータの下位１ビットが「０」なので、セレクタ２３０，２３２により、「０ｘｘｘｘ」がレジスタインデックスデータとして生成・出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータ「０ｘｘｘｘ」に基づいて、グループレジスタＲ0〜Ｒ3のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１０７】
プログラムシーケンサ１８では、バンドル番号「１」を設定する命令コードが実行されると、バンドルインデックスデータとして「００００１」がデータ演算部１２に出力される。
データ演算部１２では、バンドルインデックスデータの下位１ビットが「１」なので、セレクタ２３０，２３２により、「１ｘｘｘｘ」がレジスタインデックスデータとして生成・出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータ「１ｘｘｘｘ」に基づいて、グループレジスタＲ4〜Ｒ7のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１０８】
次に、バンドルモード３で演算を行う場合を説明する。
プログラムシーケンサ１８では、バンドルモード３に設定する命令コードが実行されると、バンドルモード３を示すバンドルモードデータがデータ演算部１２に出力される。
データ演算部１２では、バンドルモードデータが与えられると、セレクタ２３０，２３２により、選択されたエレメントインデックスデータがそのままレジスタインデックスデータとして出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータに基づいて、グループレジスタＲ0〜Ｒ7のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１０９】
次に、バンドルモード０で演算を行う場合を説明する。
プログラムシーケンサ１８では、バンドルモード０に設定する命令コードが実行されると、バンドルモード０を示すバンドルモードデータがデータ演算部１２に出力される。そして、バンドル番号「０」を設定する命令コードが実行されると、バンドルインデックスデータとして「０００００」がデータ演算部１２に出力される。
【０１１０】
データ演算部１２では、バンドルモードデータおよびバンドルインデックスデータが与えられると、バンドルインデックスデータの下位３ビットが「０００」なので、セレクタ２３０，２３２により、「０００ｘｘ」がレジスタインデックスデータとして生成・出力される。そして、セレクタ２２４，２２６により、与えられたレジスタインデックスデータ「０００ｘｘ」に基づいて、グループレジスタＲ0のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
【０１１１】
バンドル番号「１」〜「７」を設定する命令コードが実行された場合も同様であり、グループレジスタＲ1，Ｒ2，Ｒ3，Ｒ4，Ｒ5，Ｒ6またはＲ7のなかからいずれか１つのレジスタのデータが選択されて演算器２０２に出力される。
このようにして、本実施の形態では、レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、およびインデックスレジスタのエレメントインデックスデータに基づいて、そのバンドルインデックスデータにより指定されるレジスタブロックおよびそのレジスタブロック内のデータの位置を示すレジスタインデックスデータを生成するセレクタ２３０，２３２を備える。
【０１１２】
これにより、バンドルインデックスデータによって複数のレジスタブロックを選択的に使用することができるので、レジスタの使い勝手が向上し、プログラムを作成しやすくなる。
さらに、本実施の形態では、セレクタ２３０，２３２は、バンドルモードを示すバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、バンドルインデックスデータおよびエレメントインデックスデータに基づいて、レジスタインデックスデータを生成するようになっている。
これにより、バンドルモードデータによってレジスタブロックの論理構造を変更することができるので、レジスタの使い勝手がさらに向上し、プログラムをさらに作成しやすくなる。
【０１１３】
上記第２の実施の形態において、セレクタ２２４，２２６は、請求項５記載のセレクタに対応し、セレクタ２３０，２３２は、請求項５または６記載のインデックスデータ生成手段に対応し、レジスタインデックスデータは、請求項５または６記載の第２エレメントインデックスデータに対応している。
なお、上記第１の実施の形態においては、グループレジスタＲ0，Ｒ1をレジスタブロックＡとしてグループ化したが、これに限らず、特定の２つのグループレジスタをレジスタブロックＡとしてグループ化すればよいので、他の組み合わせでグループ化することもできる。レジスタブロックＢについても同様である。
【０１１４】
また、上記第１の実施の形態においては、インデックスレジスタファイル２０８を設けて構成したが、これに限らず、インデックスレジスタを１つだけ設けて構成することもできる。この場合、セレクタ２１０，２１２も不要となる。
また、上記第２の実施の形態においては、インデックスレジスタファイル２２８を設けて構成したが、これに限らず、インデックスレジスタを１つだけ設けて構成することもできる。この場合、セレクタ２３０，２３２は選択機能を設けず、レジスタインデックスデータを生成する機能だけ設ければよい。
【０１１５】
また、上記第２の実施の形態においては、８つのグループレジスタＲ0〜Ｒ7を用いてレジスタブロックを構成したが、これに限らず、８つ未満のグループレジスタを用いてレジスタブロックを構成することもできるし、９つ以上のグループレジスタを用いてレジスタブロックを構成することもできる。また、バンドルインデックスデータおよびエレメントインデックスデータのビット数は、例えば、２つのグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ３ビット、４つのグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ４ビット、１６個のグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ５ビットあればよい。いずれの場合も、上記第２の実施の形態と同じ要領で行うことができる。
【０１１６】
また、上記第２の実施の形態においては、８つのグループレジスタＲ0〜Ｒ7を用いてレジスタブロックを構成し、４つのバンドルモードを設定したが、これに限らず、バンドルモードを４つ未満として設定してもよい。この場合、バンドルインデックスデータのビット数は、３つのバンドルモード０〜２を設定する場合は４ビット、２つのバンドルモード０，１を設定する場合は３ビット、１つのバンドルモード０だけを設定する場合は２ビットあればよい。このことは、レジスタブロックの構成に用いるグループレジスタの数が８つ未満の場合、および９つ以上の場合であっても同様である。
【０１１７】
また、上記第１および第２の実施の形態においては、データ演算部１２に１つの演算器２０２を設けて構成したが、これに限らず、データ演算部１２に複数の演算器２０２を設けて構成することもできる。上記第１の実施の形態の場合は、各演算器２０２ごとにセレクタ２０４，２０６，２１０，２１２を設ければよい。上記第２の実施の形態の場合は、各演算器２０２ごとにセレクタ２２４，２２６，２３０，２３２を設ければよい。
【０１１８】
また、上記第１および第２の実施の形態においては、エレメントインデックスデータまたはレジスタインデックスデータをセレクタ２０４，２２４に出力するセレクタ２１０，２３０と、エレメントインデックスデータまたはレジスタインデックスデータをセレクタ２０６，２２６に出力するセレクタ２１２，２３２とを設けて構成したが、これに限らず、セレクタ２１０，２３０を設けず、セレクタ２０４，２２４は、プログラムシーケンサ１８からのセレクトデータに基づいて、レジスタファイル２００のなかからいずれか１つのレジスタのデータを選択するように構成することもできる。また、セレクタ２１２，２３２を設けず、セレクタ２０６，２２６は、プログラムシーケンサ１８からのセレクトデータに基づいて、レジスタファイル２００のなかからいずれか１つのレジスタのデータを選択するように構成することもできる。
【０１１９】
セレクタ２１２，２３２を設けない後者の構成とした場合の動作を、図５のフローチャートに示す相関演算処理を援用して説明する。
ステップＳ１００では、ポインタレジスタＰ０にr[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部１４では、r[0]のデータアドレスのうちグループアドレスがポインタレジスタＰ０に格納される。
【０１２０】
ステップＳ１０２では、ポインタレジスタＰ１にs[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部１４では、s[0]のデータアドレスのうちグループアドレスがポインタレジスタＰ１に格納される。また、データ演算部１２では、s[0]のデータアドレスのうち下位２ビットのデータがインデックスレジスタファイル２０８に格納される。s[0]のデータアドレスのうち下位２ビットは「００」なので、最上位ビットを「０」として３ビットのデータ「０００」がエレメントインデックスデータｓとして格納される。
【０１２１】
ステップＳ１０４では、レジスタＡ０の内容を初期化する命令コードが実行されると、データ演算部１２では、レジスタＡ０に「０」が設定される。
ステップＳ１０８では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ0に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[0]〜s[3]がグループレジスタＲ0に読み込まれる。
【０１２２】
ステップＳ１１０では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[4]を指し示すことになる。
ステップＳ１１２では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ1に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[4]〜s[7]がグループレジスタＲ1に読み込まれる。
【０１２３】
ステップＳ１１４では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[8]を指し示すことになる。
ステップＳ１１６では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ2に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[0]〜r[3]がグループレジスタＲ2に読み込まれる。
ステップＳ１１８では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[4]を指し示すことになる。
【０１２４】
ステップＳ１２０では、ブロック演算命令コードが実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「０００」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[0]のデータs[0]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２０６により、レジスタＲ2[0]のデータr[0]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[0]とr[0]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓに「１」が加算され、インデックスレジスタファイル２０８に格納される。
【０１２５】
ステップＳ１２２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２１０により、エレメントインデックスデータｓ「００１」が選択されてセレクタ２０４に出力され、セレクタ２０４により、レジスタＲ0[1]のデータs[1]が選択されて演算器２０２に出力される。また、プログラムシーケンサ１８からのセレクトデータに基づいて、セレクタ２０６により、レジスタＲ2[1]のデータr[1]が選択されて演算器２０２に出力される。そして、演算器２０２により、s[1]とr[1]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項および第２項の演算結果が得られる。また、計算器２１４により、エレメントインデックスデータｓに「１」が加算され、インデックスレジスタファイル２０８に格納される。
【０１２６】
ステップＳ１２４では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[2]，Ｒ2[2]のデータs[2]，r[2]がそれぞれ選択される。そして、演算器２０２により、s[2]とr[2]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第３項の演算結果が得られる。
【０１２７】
ステップＳ１２６では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ0[3]，Ｒ2[3]のデータs[3]，r[3]がそれぞれ選択される。そして、演算器２０２により、s[3]とr[3]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第４項の演算結果が得られる。
【０１２８】
ステップＳ１２８では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ0に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[8]〜s[11]がグループレジスタＲ0に読み込まれる。
ステップＳ１３０では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[12]を指し示すことになる。
【０１２９】
ステップＳ１３２では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ2に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[4]〜r[7]がグループレジスタＲ2に読み込まれる。
ステップＳ１３４では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[7]を指し示すことになる。
【０１３０】
ステップＳ１３６では、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[0]，Ｒ2[0]のデータs[4]，r[4]がそれぞれ選択される。そして、演算器２０２により、s[4]とr[4]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第５項の演算結果が得られる。
【０１３１】
ステップＳ１３８では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[1]，Ｒ2[1]のデータs[5]，r[5]がそれぞれ選択される。そして、演算器２０２により、s[5]とr[5]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第６項の演算結果が得られる。
【０１３２】
ステップＳ１４０では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[2]，Ｒ2[2]のデータs[6]，r[6]がそれぞれ選択される。そして、演算器２０２により、s[6]とr[6]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第７項の演算結果が得られる。
【０１３３】
ステップＳ１４２では、さらに、ブロック演算命令コードが実行されると、データ演算部１２では、同様に、セレクタ２０４，２０６により、レジスタＲ1[3]，Ｒ2[3]のデータs[7]，r[7]がそれぞれ選択される。そして、演算器２０２により、s[7]とr[7]が乗算され、その乗算結果がレジスタＡ０の値に加算されてレジスタＡ０に格納される。これにより、上式（１）の第１項〜第８項の演算結果が得られる。
【０１３４】
ステップＳ１４４では、ポインタレジスタＰ１が指し示すグループアドレスのデータをグループレジスタＲ1に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からs[12]〜s[15]がグループレジスタＲ1に読み込まれる。
ステップＳ１４６では、ポインタレジスタＰ１を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ１のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のs[16]を指し示すことになる。
【０１３５】
ステップＳ１４８では、ポインタレジスタＰ０が指し示すグループアドレスのデータをグループレジスタＲ2に読み込む命令コードが実行されると、データ演算部１２では、データメモリ１０からr[8]〜r[11]がグループレジスタＲ2に読み込まれる。
ステップＳ１５０では、ポインタレジスタＰ０を加算する命令コードが実行されると、データ演算部１２では、ポインタレジスタＰ０のグループアドレスが「１」加算される。データメモリ１０上では、４バイト先のr[12]を指し示すことになる。
【０１３６】
また、上記第１および第２の実施の形態においては、３２ビットＲＩＳＣ型のデジタル信号処理装置１００に適用したが、データメモリ１０に対するデータアクセスを、データメモリ１０の最小記憶単位よりも大きい単位で行うプロセッサであればどのようなプロセッサにも適用することができる。例えば、データメモリ１０の最小記憶単位が１バイトであれば、アクセス単位が１６ビット以上のプロセッサであり、データメモリ１０の最小記憶単位が２バイトであれば、アクセス単位が３２ビット以上のプロセッサである。
【０１３７】
また、上記第１の実施の形態において、図５および図６のフローチャートに示す処理を実行するにあたってはいずれも、プログラムメモリ１６にあらかじめ格納されている制御プログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記憶された記憶媒体から、そのプログラムをプログラムメモリ１６に読み込んで実行するようにしてもよい。
【０１３８】
ここで、記憶媒体とは、ＲＡＭ、ＲＯＭ等の半導体記憶媒体、ＦＤ、ＨＤ等の磁気記憶型記憶媒体、ＣＤ、ＣＤＶ、ＬＤ、ＤＶＤ等の光学的読取方式記憶媒体、ＭＯ等の磁気記憶型／光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
【０１３９】
また、上記第１および第２の実施の形態においては、本発明に係るデータ演算装置を、デジタル信号処理を行う３２ビットＲＩＳＣ型のデジタル信号処理装置１００においてデータ演算部１２に適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
【図面の簡単な説明】
【０１４０】
【図１】デジタル信号処理装置１００のハードウェア構成を示すブロック図である。
【図２】データアドレスのデータ構造を示す図である。
【図３】データ演算部１２のハードウェア構成を示すブロック図である。
【図４】エレメントインデックスデータのデータ構造を示す図である。
【図５】プログラムシーケンサ１８で実行される処理を示すフローチャートである。
【図６】プログラムシーケンサ１８で実行される処理を示すフローチャートである。
【図７】データ演算部１２のハードウェア構成を示すブロック図である。
【図８】レジスタブロックの構成を示す図である。
【図９】エレメントインデックスデータのデータ構造を示す図である。
【図１０】メモリ上のデータの配置を示す図である。
【図１１】従来のデジタル信号プロセッサの構成を示すブロック図である。
【図１２】従来のデジタル信号プロセッサの動作を説明するための図である。
【符号の説明】
【０１４１】
１００                          デジタル信号処理装置
１０                            データメモリ
１２                            プロセッサ
１４                            データアドレス生成部
１６                            プログラムメモリ
１８                            プログラムシーケンサ
２０                            バス
２００                          レジスタファイル
２０２                          演算器
２０４，２０６，２１０，２１２  セレクタ
２０８，２２８                  インデックスレジスタファイル
２１４，２３４                  計算器
２１６                          セレクタ
２２４，２２６，２３０，２３２  セレクタ
２３６                          セレクタ
【図１】
2006004226.tif 000003
【図２】
2006004226.tif 000004
【図３】
2006004226.tif 000005
【図４】
2006004226.tif 000006
【図５】
2006004226.tif 000007
【図６】
2006004226.tif 000008
【図７】
2006004226.tif 000009
【図８】
2006004226.tif 000010
【図９】
2006004226.tif 000011
【図１０】
2006004226.tif 000012
【図１１】
2006004226.tif 000013
【図１２】
2006004226.tif 000014