説明

データ演算装置

【課題】 プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置を提供する。
【解決手段】 データ演算部12は、複数のレジスタからなるレジスタファイル200と、レジスタファイル200のデータを用いて演算を行う演算器202とを備え、レジスタファイル200とデータメモリ10との間のデータアクセスを、4つのレジスタからなるグループレジスタ単位で行う。また、2つのグループレジスタをレジスタブロックとしてグループ化したときに、レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタファイル208と、インデックスレジスタファイル208のエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか1つのレジスタのデータを選択して演算器202に出力するセレクタ204,206とを備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、データを演算する装置および方法に係り、特に、プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置に関する。
【背景技術】
【0002】
デジタル信号処理をプロセッサで行う場合、メモリに対する1回のデータアクセスで、複数のデータをまとめて読み込んだり書き込んだりすることがある。これは、例えば、演算器で語長の長いデータが必要な場合や、処理効率を向上するために演算器で並列処理を行う場合に生じる。
32ビットのRISCプロセッサは、記憶容量が1バイト(8ビット)のレジスタを4つ単位でまとめてグループレジスタを構成し、レジスタファイルとメモリとの間のデータアクセスをグループレジスタ単位(4バイト単位)で行う。メモリに対しては、4の整数倍のアドレスを先頭アドレスとして4バイトのデータをグループレジスタにまとめて読み込み、4の整数倍のアドレスを先頭アドレスとしてグループレジスタのデータをまとめて書き込む。例えば、メモリの先頭から順にデータを読み込む場合、グループレジスタには、1回目のデータアクセスで0000h〜0003h番地のアドレスのデータが、2回目のデータアクセスで0004h〜0007h番地のアドレスのデータがそれぞれ読み込まれる。
【0003】
このようなデータアクセスを行う際、メモリ上のデータの先頭アドレスがプロセッサのアクセス単位の整数倍でない場合に問題が生じる。この状況は、メモリ上のデータのアドレス境界(以下、データ境界という。)が、プロセッサのアクセス可能なアドレス境界(以下、アクセス境界という。)と一致していないため、境界不整列データアクセスと呼ばれる。
【0004】
境界不整列データアクセスが引き起こす問題として、処理効率の低下を挙げることができる。32ビットのRISCプロセッサの場合、アクセス境界は、4の整数倍である。4バイト長のデータを処理する場合、4バイト長のデータをメモリから読み込むが、そのデータの先頭アドレスが4の倍数でないと、所望の4バイトを取得するために2回のデータアクセスが必要となり、さらにその並べ替えをソフトウェアで行うため、処理効率が低下する。このような問題を解決するため、RISCプロセッサ用のプログラムでは、コンパイル時に、データ境界とアクセス境界が一致するようにすべてのデータを配置し、実行時には境界不整列データアクセスが起こらないようにしている。
しかしながら、データの論理構造が重複している場合は、コンパイラでは対処することができない。
【0005】
図10は、メモリ上のデータの配置を示す図である。
図10において、メモリには、0000h番地〜000Fh番地のアドレスに16バイトのデータs[0]〜s[15]が格納され、0100h番地〜010Fh番地のアドレスに16バイトのデータr[0]〜r[15]が格納されている。
データの論理構造が重複しているとは、s[0]〜s[3]が1つのグループデータを構成するが、s[1]〜s[4]、s[2]〜s[5]およびs[3]〜s[6]もそれぞれ1つのグループデータを構成する場合である。例えば、下式(1)〜(4)に示すような相関演算を行う場合には、境界不整列データアクセスを回避することができない。
【0006】
p[0] = r[0]*s[0] + r[1]*s[1] + r[2]*s[2] + r[3]*s[3] + … …(1)
p[1] = r[0]*s[1] + r[1]*s[2] + r[2]*s[3] + r[3]*s[4] + … …(2)
p[2] = r[0]*s[2] + r[1]*s[3] + r[2]*s[4] + r[3]*s[5] + … …(3)
p[3] = r[0]*s[3] + r[1]*s[4] + r[2]*s[5] + r[3]*s[6] + … …(4)
【0007】
さらに、プログラムも4通り作成しなければならない。
まず、p[0] を求めるには、次の(1)〜(5)のステップを含むプログラムになる。p[4]、p[8]、…、p[4n]についても同様である。
(1)グループレジスタにs[0]〜s[3]を読み込む。
(2)〜(5)グループレジスタのデータに基づいて、r[0]*s[0]、r[1]*s[1]、r[2]*s[2]、r[3]*s[3]を演算する。
【0008】
次に、p[1] を求めるには、次の(1)〜(6)のステップを含むプログラムになる。p[5]、p[9]、…、p[4n+1]についても同様である。
(1)グループレジスタにs[0]〜s[3]を読み込む。
(2)〜(4)グループレジスタのデータに基づいて、r[0]*s[1]、r[1]*s[2]、r[2]*s[3]を演算する。
(5)グループレジスタにs[4]〜s[7]を読み込む。
(6)グループレジスタのデータに基づいて、r[3]*s[4]を演算する。
【0009】
次に、p[2] を求めるには、次の(1)〜(6)のステップを含むプログラムになる。p[6]、p[10]、…、p[4n+2]についても同様である。
(1)グループレジスタにs[0]〜s[3]を読み込む。
(2),(3)グループレジスタのデータに基づいて、r[0]*s[2]、r[1]*s[3]を演算する。
(4)グループレジスタにs[4]〜s[7]を読み込む。
(5),(6)グループレジスタのデータに基づいて、r[2]*s[4]、r[3]*s[5]を演算する。
【0010】
次に、p[3] を求めるには、次の(1)〜(6)のステップを含むプログラムになる。p[7]、p[11]、…、p[4n+3]についても同様である。
(1)グループレジスタにs[0]〜s[3]を読み込む。
(2)グループレジスタのデータに基づいて、r[0]*s[3]を演算する。
(3)グループレジスタにs[4]〜s[7]を読み込む。
(4)〜(6)グループレジスタのデータに基づいて、r[1]*s[4]、r[2]*s[5]、r[3]*s[6]を演算する。
【0011】
このように、データの論理構造が重複している場合は、境界不整列データアクセスが生じてしまうため、処理効率が低下し、プログラムコスト(プログラムの作成に要する手間、プログラムのデータ容量および複雑さなどをいう。)が増加するという問題がある。このような問題を解決するため、特許文献1および非特許文献1記載のデジタル信号プロセッサが提案されている。
【0012】
図11は、従来のデジタル信号プロセッサの構成を示すブロック図である。
特許文献1および非特許文献1記載の発明は、図11に示すように、レジスタファイル200と、データを整列するデータ整列バッファ900とを備え、データ整列バッファ900を介してデータメモリ10からレジスタファイル200にデータを読み込む。
データ整列バッファ900は、整列バッファ910およびマルチプレクサ/バレルシフタ912を含む。
【0013】
マルチプレクサ/バレルシフタ912は、データメモリ10からの32ビットと、整列バッファ910の出力からの32ビットとを含む64ビットのデータを受け取り、与えられたオフセット信号に応答して、64ビットのデータ中32ビットをその入力として選択し、選択した32ビットのデータをレジスタファイル200に供給する。
データ整列バッファ900は、境界整列データアクセス(データ境界がアクセス境界と一致している状況をいう。)および境界不整列データアクセスに用いることができる。境界整列データアクセスでは、マルチプレクサ/バレルシフタ912を介して、指定したオペランドを単一のメモリ行からレジスタファイル200に供給する。境界不整列データアクセスでは、整列バッファ910およびマルチプレクサ/バレルシフタ912を介して、指定したオペランドを2つのメモリ行からレジスタファイル200に供給する。
【0014】
図12は、従来のデジタル信号プロセッサの動作を説明するための図である。
図12において、データメモリ10には、0000h番地〜0007h番地のアドレスに8バイトのデータs[0]〜s[7]が格納されている。
s[1]〜s[4]を読み込む境界不整列データアクセスを行う場合は、まず、s[0]〜s[3]を整列バッファ910に読み込む。次いで、例えば、図12(a)に示すように、「0」を示すオフセット信号をマルチプレクサ/バレルシフタ912に与えると、マルチプレクサ/バレルシフタ912によりデータの選択が行われ、レジスタファイル200にs[1]〜s[4]が供給される。
【0015】
また、s[2]〜s[5]を読み込む境界不整列データアクセスを行う場合は、例えば、図12(b)に示すように、「1」を示すオフセット信号をマルチプレクサ/バレルシフタ912に与えると、マルチプレクサ/バレルシフタ912によりデータの選択が行われ、レジスタファイル200にs[2]〜s[5]が供給される。
また、s[3]〜s[6]を読み込む境界不整列データアクセスを行う場合は、例えば、図12(c)に示すように、「2」を示すオフセット信号をマルチプレクサ/バレルシフタ912に与えると、マルチプレクサ/バレルシフタ912によりデータの選択が行われ、レジスタファイル200にs[3]〜s[6]が供給される。
【特許文献1】特表2002−509312号公報
【非特許文献1】「ADSP-TS201 TigerSHARCR Processor Programming Reference」Analog Devices, Inc.,、Revision 0.1, June 2003, Part Number 82-000810-01、P.7−24
【発明の開示】
【発明が解決しようとする課題】
【0016】
しかしながら、特許文献1および非特許文献1記載の発明にあっては、少なくともプロセッサのアクセス単位に相当する記憶容量(図11の例では、32ビット)の整列バッファ910を設けなければならないため、製造コストが増加するという問題があった。
また、図12の例では、境界不整列データアクセスのパターンを3つ示したが、この3つのアクセスパターンに対応するだけならば、オフセット信号は、2ビットですむ。しかしながら、例えば、s[0]、s[1]、s[4]、s[5]を読み込む境界不整列データアクセスなど、他のアクセスパターンにも対応しようとすると、オフセット信号のビット数がさらに必要となり、製造コストが増加するという問題があった。ちなみに、図12の例では、境界不整列データアクセスの全アクセスパターンは、84−2=68通りあるので、全アクセスパターンに対応しようとすると、オフセット信号は、7ビット必要となる。
そこで、本発明は、このような従来の技術の有する未解決の課題に着目してなされたものであって、プロセッサの処理効率を向上し、プログラムコストおよび製造コストを低減するのに好適なデータ演算装置を提供することを目的としている。
【課題を解決するための手段】
【0017】
上記目的を達成するために、本発明に係る請求項1記載のデータ演算装置は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、インデックスデータを記憶するインデックスレジスタと、前記インデックスレジスタのインデックスデータに基づいて、前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタのなかから、1または複数の前記レジスタのデータを選択して前記演算器に出力するセレクタとを備える。
【0018】
このような構成であれば、まず、境界不整列データアクセスが生じる可能性のあるデータ群を少なくとも2つのグループレジスタにまとめて読み込む。そして、インデックスレジスタにインデックスデータを格納すると、セレクタにより、インデックスレジスタのインデックスデータに基づいて、それらグループレジスタのなかから1または複数のレジスタのデータが選択されて演算器に出力され、演算器により演算が行われる。したがって、インデックスデータの格納、セレクタによる選択、および演算器による演算を繰り返し行えば、それらグループレジスタにまとめて読み込まれたデータ群のなかで演算に必要なデータが逐次選択されて演算器に出力される。いずれのデータを演算に用いるかは、インデックスデータによって選択することができるので、境界整列データアクセスとなるグループデータも、境界不整列データアクセスとなるグループデータも区別なく取り扱うことができる。すなわち、境界整列データアクセスとなるグループデータについては、グループレジスタの先頭のレジスタから順にデータを選択していけばよいし、境界不整列データアクセスとなるグループデータについては、グループレジスタの所定箇所のレジスタから順にデータを選択していけばよい。
【0019】
ここで、セレクタは、1または複数のレジスタのデータを選択するようになっていればどのような構成であってもよく、複数のレジスタのデータを選択する場合は、例えば、グループレジスタ内で連続したレジスタのデータであってもよいし、グループレジスタ内で分散したレジスタのデータであってもよい。
また、インデックスレジスタは、インデックスデータをあらゆる手段でかつあらゆる時期に記憶するものであり、インデックスデータをあらかじめ記憶してあるものであってもよいし、インデックスデータをあらかじめ記憶することなく、本装置の動作時に外部からの入力等によってインデックスデータを記憶するようになっていてもよい。
【0020】
さらに、本発明に係る請求項2記載のデータ演算装置は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタと、前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するセレクタとを備える。
【0021】
このような構成であれば、まず、境界不整列データアクセスが生じる可能性のあるデータ群をレジスタブロックのレジスタにまとめて読み込む。そして、インデックスレジスタにエレメントインデックスデータを格納すると、セレクタにより、インデックスレジスタのエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか1つのレジスタのデータが選択されて演算器に出力され、演算器により演算が行われる。したがって、エレメントインデックスデータの格納、セレクタによる選択、および演算器による演算を繰り返し行えば、レジスタブロックのレジスタにまとめて読み込まれたデータ群のなかで演算に必要なデータが逐次選択されて演算器に出力される。いずれのデータを演算に用いるかは、インデックスデータによって選択することができるので、境界整列データアクセスとなるグループデータも、境界不整列データアクセスとなるグループデータも区別なく取り扱うことができる。すなわち、境界整列データアクセスとなるグループデータについては、グループレジスタの先頭のレジスタから順にデータを選択していけばよいし、境界不整列データアクセスとなるグループデータについては、グループレジスタの所定箇所のレジスタから順にデータを選択していけばよい。
【0022】
ここで、グループレジスタのグループ化は、物理的に行ってもよいし、論理的に行ってもよい。前者の場合、例えば、レジスタファイルのなかで、レジスタブロックに属するグループレジスタと、他のレジスタとをそれぞれ別々のものとして構成することができる。以下、請求項7記載のデータ演算方法において同じである。
また、インデックスレジスタは、エレメントインデックスデータをあらゆる手段でかつあらゆる時期に記憶するものであり、エレメントインデックスデータをあらかじめ記憶してあるものであってもよいし、エレメントインデックスデータをあらかじめ記憶することなく、本装置の動作時に外部からの入力等によってエレメントインデックスデータを記憶するようになっていてもよい。
【0023】
さらに、本発明に係る請求項3記載のデータ演算装置は、請求項2記載のデータ演算装置において、さらに、複数の前記インデックスレジスタからなるインデックスレジスタファイルと、与えられたセレクトデータに基づいて、前記インデックスレジスタファイルのなかからいずれか1つの前記インデックスレジスタのエレメントインデックスデータを選択して前記セレクタに出力する第2セレクタとを備える。
【0024】
このような構成であれば、セレクトデータが与えられると、第2セレクタにより、インデックスレジスタファイルのなかからいずれか1つのインデックスレジスタのエレメントインデックスデータが選択されてセレクタに出力され、セレクタにより、入力されたエレメントインデックスデータに基づいて、レジスタブロックのレジスタのなかからいずれか1つのレジスタのデータが選択されて演算器に出力される。
【0025】
さらに、本発明に係る請求項4記載のデータ演算装置は、請求項3記載のデータ演算装置において、さらに、前記セレクタに出力したエレメントインデックスデータを更新して前記インデックスレジスタファイルに格納するインデックスデータ更新手段を備える。
このような構成であれば、インデックスデータ更新手段により、セレクタに出力したエレメントインデックスデータが更新されてインデックスレジスタファイルに格納される。
【0026】
さらに、本発明に係る請求項5記載のデータ演算装置は、請求項2ないし4のいずれか1項に記載のデータ演算装置において、さらに、前記レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、および前記インデックスレジスタのエレメントインデックスデータに基づいて、当該バンドルインデックスデータにより指定される前記レジスタブロックおよび当該レジスタブロック内のデータの位置を示す第2エレメントインデックスデータを生成するインデックスデータ生成手段を備え、前記セレクタは、前記インデックスデータ生成手段で生成した第2エレメントインデックスデータに基づいて、複数の前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するようになっている。
【0027】
このような構成であれば、バンドルインデックスデータが与えられると、インデックスデータ生成手段により、与えられたバンドルインデックスデータおよびエレメントインデックスデータに基づいて、そのバンドルインデックスデータにより指定されるレジスタブロックおよびそのレジスタブロック内のデータの位置を示す第2エレメントインデックスデータが生成される。そして、セレクタにより、生成された第2エレメントインデックスデータに基づいて、複数のレジスタブロックのレジスタのなかからいずれか1つのレジスタのデータが選択されて演算器に出力される。
【0028】
さらに、本発明に係る請求項6記載のデータ演算装置は、請求項5記載のデータ演算装置において、前記インデックスデータ生成手段は、2以上の第1所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第1バンドルモード、および前記第1所定数よりも多い第2所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第2バンドルモードのうちいずれかを指定するバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、前記バンドルインデックスデータおよび前記エレメントインデックスデータに基づいて、前記第2エレメントインデックスデータを生成するようになっている。
【0029】
このような構成であれば、第1バンドルモードおよび第2バンドルモードのうちいずれかを指定するバンドルモードデータが与えられると、インデックスデータ生成手段により、与えられたバンドルモードデータ、バンドルインデックスデータおよびエレメントインデックスデータに基づいて、第2エレメントインデックスデータが生成される。
一方、上記目的を達成するために、本発明に係る請求項7記載のデータ演算方法は、複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置を利用して演算を行うデータ演算方法であって、前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロックの各グループレジスタに前記外部からデータを読み込むデータ読込ステップと、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータをインデックスレジスタに格納するインデックスデータ格納ステップと、前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するデータ選択ステップと、前記演算器により演算を行う演算ステップとを含む。
さらに、本発明に係る請求項8記載のデータ演算方法は、請求項7記載のデータ演算方法において、さらに、前記インデックスデータ格納ステップ、前記データ選択ステップおよび前記演算ステップを繰り返し行う反復演算ステップを含む。
【発明の効果】
【0030】
以上説明したように、本発明に係る請求項1記載のデータ演算装置によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタおよびセレクタを設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、インデックスデータのビット数をさほど増やさなくてすむので、特許文献1記載の発明に比して、製造コストを低減することができるという効果も得られる。
【0031】
さらに、本発明に係る請求項2記載のデータ演算装置によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタおよびセレクタを設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献1記載の発明に比して、製造コストを低減することができるという効果も得られる。
【0032】
さらに、本発明に係る請求項3記載のデータ演算装置によれば、複数のエレメントインデックスデータをインデックスレジスタファイルに格納しておき、セレクトデータによってそれらエレメントインデックスデータを選択的に使用することができるので、インデックスレジスタの使い勝手が向上し、プログラムを作成しやすくなるという効果が得られる。
さらに、本発明に係る請求項4記載のデータ演算装置によれば、エレメントインデックスデータを使用するたびに自動的に更新されるので、エレメントインデックスデータの更新をソフトウェアで行わなくてすみ、演算速度を向上することができるという効果が得られる。
【0033】
さらに、本発明に係る請求項5記載のデータ演算装置によれば、レジスタファイルに複数のレジスタブロックが存在する場合、バンドルインデックスデータによってそれらレジスタブロックを選択的に使用することができるので、レジスタの使い勝手が向上し、プログラムを作成しやすくなるという効果が得られる。
さらに、本発明に係る請求項6記載のデータ演算装置によれば、バンドルモードデータによってレジスタブロックの論理構造を変更することができるので、レジスタの使い勝手がさらに向上し、プログラムをさらに作成しやすくなるという効果が得られる。
【0034】
一方、本発明に係る請求項7記載のデータ演算方法によれば、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができるという効果も得られる。さらに、インデックスレジスタを利用するだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献1記載の発明に比して、製造コストを低減することができるという効果も得られる。
【0035】
さらに、本発明に係る請求項8記載のデータ演算方法によれば、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイルへのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができるという効果が得られる。
【発明を実施するための最良の形態】
【0036】
以下、本発明の第1の実施の形態を図面を参照しながら説明する。図1ないし図6は、本発明に係るデータ演算装置の第1の実施の形態を示す図である。
本実施の形態は、本発明に係るデータ演算装置を、図1に示すように、デジタル信号処理を行う32ビットRISC型のデジタル信号処理装置100においてデータ演算部12に適用したものである。
【0037】
まず、デジタル信号処理装置100の構成を図1を参照しながら説明する。
図1は、デジタル信号処理装置100のハードウェア構成を示すブロック図である。
デジタル信号処理装置100は、図1に示すように、演算用のデータを記憶するデータメモリ10と、データメモリ10からデータを読み込んで演算を行うデータ演算部12と、データメモリ10のデータアドレスを生成するデータアドレス生成部14と、デジタル信号処理装置100全体の制御プログラムを記憶したプログラムメモリ16と、プログラムメモリ16の制御プログラムに基づいてデジタル信号処理装置100全体を制御するプログラムシーケンサ18とで構成されている。データメモリ10、データ演算部12、データアドレス生成部14およびプログラムシーケンサ18は、データを転送するための信号線であるバス20で相互にかつデータ授受可能に接続され、プログラムメモリ16は、プログラムシーケンサ18に直接接続されている。
【0038】
データメモリ10は、データ演算部12で演算対象となるデータ、およびデータ演算部12の演算結果のデータを格納する。また、データアドレス生成部14またはプログラムシーケンサ18内のレジスタの値を格納することもある。
データ演算部12は、データメモリ10に対して、4の整数倍のアドレス(0000h、0004h、0008h、000Ch…)をアクセス境界として4バイト単位でデータアクセスを行う。以下、データ演算部12のアクセス境界をグループアドレスという。
【0039】
データアドレス生成部14は、データメモリ10と、データ演算部12、データアドレス生成部14またはプログラムシーケンサ18との間のデータ転送を実行する際に必要となるデータアドレスを生成する。また、データアドレスの生成に合わせて、データメモリ10を制御するための信号を生成する。これらの動作は、プログラムシーケンサ18からの制御信号により規定される。
【0040】
図2は、データアドレスのデータ構造を示す図である。
データアドレスは、図2に示すように、mビットのデータからなり、データメモリ10の最小記憶単位を1バイトとして2mバイトのメモリ空間を1バイト単位でアクセス可能なアドレスを構成している。データアドレスは、上位(m−2)ビットbm-1,…,b2がグループアドレスを構成し、下位2ビットb1,b0がグループアドレス間の細分されたアドレスを構成している。
【0041】
データアドレス生成部14は、より具体的には、複数のポインタレジスタを有し、データアドレスのうちグループアドレスをデータメモリ10に出力し、データアドレスのうち下位2ビットをデータ演算部12にそれぞれ出力する。
図1に戻り、プログラムシーケンサ18は、プログラムメモリ16から制御プログラムを読み出し、読み出した制御プログラムに従って、データメモリ10、データ演算部12、データアドレス生成部14、プログラムメモリ16およびプログラムシーケンサ18を制御する。データメモリ10、データ演算部12およびデータアドレス生成部14に対しては、バス20を介して制御信号を出力し、プログラムメモリ16は制御信号を直接出力する。
【0042】
次に、データ演算部12の構成を図3および図4を参照しながら詳細に説明する。
図3は、データ演算部12のハードウェア構成を示すブロック図である。
データ演算部12は、図3に示すように、複数のレジスタからなるレジスタファイル200と、レジスタファイル200のデータを用いて演算を行う演算器202と、レジスタファイル200のなかからデータを選択するセレクタ204,206と、複数のインデックスレジスタからなるインデックスレジスタファイル208と、インデックスレジスタファイル208のなかからデータを選択するセレクタ210,212と、インデックスレジスタファイル208のデータを更新する計算器214と、計算器214とバス20のデータを選択するセレクタ216とで構成されている。
【0043】
レジスタファイル200は、n個のグループレジスタR0〜Rn-1からなる。グループレジスタR0は、4個のレジスタR0[0]〜R0[3]からなり、各レジスタR0[0]〜R0[3]は、1バイトの記憶容量を有している。他のグループレジスタR1〜Rn-1についても同様の構成となっている。
セレクタ204は、グループレジスタR0,R1をレジスタブロックAとしてレジスタブロックAの各レジスタと接続し、セレクタ210からのセレクトデータに基づいて、レジスタブロックAのレジスタのなかからいずれか1つのレジスタのデータを選択し、選択したデータを演算器202の第1オペランドとして演算器202に出力する。
【0044】
セレクタ210からのセレクトデータは、3ビットからなる。セレクタ204は、セレクトデータの最上位ビットが「0」であるときは、グループレジスタR0のうち下位2ビットの値により指定されるレジスタのデータを選択する。すなわち、セレクトデータが「000」であるときはレジスタR0[0]のデータを、「001」であるときはレジスタR0[1]のデータを、「010」であるときはレジスタR0[2]のデータを、「011」であるときはレジスタR0[3]のデータをそれぞれ選択する。また、セレクトデータの最上位ビットが「1」であるときは、グループレジスタR1のうち下位2ビットの値により指定されるレジスタのデータを選択する。すなわち、セレクトデータが「100」であるときはレジスタR1[0]のデータを、「101」であるときはレジスタR1[1]のデータを、「110」であるときはレジスタR1[2]のデータを、「111」であるときはレジスタR1[3]のデータをそれぞれ選択する。
【0045】
セレクタ206は、グループレジスタR2,R3をレジスタブロックBとしてレジスタブロックBの各レジスタと接続し、セレクタ212からのセレクトデータに基づいて、レジスタブロックBのレジスタのなかからいずれか1つのレジスタのデータを選択し、選択したデータを演算器202の第2オペランドとして演算器202に出力する。データの選択手順は、セレクタ204と同様である。
インデックスレジスタファイル208は、エレメントインデックスデータを各インデックスレジスタに記憶する。
【0046】
図4は、エレメントインデックスデータのデータ構造を示す図である。
エレメントインデックスデータは、図4に示すように、3ビットのデータからなり、最上位ビットb2がグループレジスタR0,R1(R2,R3)の別を示し、下位2ビットb1,b0がグループレジスタの各レジスタの別を示す。エレメントインデックスデータの各ビットは、セレクタ210,212からのセレクトデータの各ビットに対応している。また、エレメントインデックスデータの下位2ビットb1,b0は、データアドレスの下位2ビットb1,b0に対応している。
【0047】
図3に戻り、セレクタ210は、プログラムシーケンサ18からのセレクトデータに基づいて、インデックスレジスタファイル208のなかからいずれか1つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ204に出力する。なお、プログラムシーケンサ18では、セレクタ210を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ210に出力する。
【0048】
セレクタ212は、プログラムシーケンサ18からのセレクトデータに基づいて、インデックスレジスタファイル208のなかからいずれか1つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ206に出力する。なお、プログラムシーケンサ18では、セレクタ212を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ212に出力する。
【0049】
計算器214は、セレクタ210またはセレクタ212からセレクトデータとして出力されるエレメントインデックスデータを更新してセレクタ216に出力する。エレメントインデックスデータは、レジスタブロックA,Bのレジスタからデータを取得する順序があらかじめ決まっている場合に、その順序でデータが選択できるように更新する。例えば、レジスタブロックA,Bの先頭方向から末尾方向に連続してデータを選択する場合は、エレメントインデックスデータに「1」を加算することにより更新する。末尾方向から先頭方向に連続してデータを選択する場合は、エレメントインデックスデータから「1」を減算することにより更新する。
【0050】
セレクタ216は、プログラムシーケンサ18からのセレクトデータに基づいて、データアドレス生成部14からのデータアドレスのうち下位2ビットのデータ、および計算器214からのエレメントインデックスデータのうちいずれか一方を選択してインデックスレジスタファイル208に格納する。なお、プログラムシーケンサ18では、セレクタ216を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ216に出力する。
【0051】
次に、本実施の形態の動作を図5および図6を参照しながら説明する。
初めに、デジタル信号処理装置100で上式(1)に示す相関演算を行う場合を説明する。ただし、s[n]とr[n]は、図10に示すように、データメモリ10に格納されているとする。
図5は、プログラムシーケンサ18で実行される処理を示すフローチャートである。
プログラムシーケンサ18では、プログラムメモリ16から制御プログラムが読み出され、読み出された制御プログラムに従って、図5のフローチャートに示す相関演算処理がステップS100〜S150の順で実行される。
【0052】
ステップS100では、ポインタレジスタP0にr[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部14では、r[0]のデータアドレスのうちグループアドレスがポインタレジスタP0に格納される。また、データ演算部12では、r[0]のデータアドレスのうち下位2ビットのデータがインデックスレジスタファイル208に格納される。r[0]のデータアドレスのうち下位2ビットは「00」なので、最上位ビットを「0」として3ビットのデータ「000」がエレメントインデックスデータrとして格納される。
【0053】
ステップS102では、ポインタレジスタP1にs[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部14では、s[0]のデータアドレスのうちグループアドレスがポインタレジスタP1に格納される。また、データ演算部12では、s[0]のデータアドレスのうち下位2ビットのデータがインデックスレジスタファイル208に格納される。s[0]のデータアドレスのうち下位2ビットは「00」なので、最上位ビットを「0」として3ビットのデータ「000」がエレメントインデックスデータsとして格納される。
【0054】
ステップS104では、レジスタA0(グループレジスタR4〜Rn-1のいずれか)の内容を初期化する命令コードが実行されると、データ演算部12では、レジスタA0に「0」が設定される。
ステップS108では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR0に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[0]〜s[3]がグループレジスタR0に読み込まれる。
【0055】
ステップS110では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[4]を指し示すことになる。
ステップS112では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR1に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[4]〜s[7]がグループレジスタR1に読み込まれる。
【0056】
ステップS114では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[8]を指し示すことになる。
ステップS116では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR2に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[0]〜r[3]がグループレジスタR2に読み込まれる。
ステップS118では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[4]を指し示すことになる。
【0057】
ステップS120では、レジスタブロックA,Bのレジスタのデータを演算する命令コード(以下、ブロック演算命令コードという。)が実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「000」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[0]のデータs[0]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ212により、エレメントインデックスデータr「000」が選択されてセレクタ206に出力され、セレクタ206により、レジスタR2[0]のデータr[0]が選択されて演算器202に出力される。そして、演算器202により、s[0]とr[0]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項の演算結果が得られる。また、計算器214により、エレメントインデックスデータs,rにそれぞれ「1」が加算され、インデックスレジスタファイル208に格納される。
【0058】
ステップS122では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「001」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[1]のデータs[1]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ212により、エレメントインデックスデータr「001」が選択されてセレクタ206に出力され、セレクタ206により、レジスタR2[1]のデータr[1]が選択されて演算器202に出力される。そして、演算器202により、s[1]とr[1]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項および第2項の演算結果が得られる。また、計算器214により、エレメントインデックスデータs,rにそれぞれ「1」が加算され、インデックスレジスタファイル208に格納される。
【0059】
ステップS124では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[2],R2[2]のデータs[2],r[2]がそれぞれ選択される。そして、演算器202により、s[2]とr[2]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第3項の演算結果が得られる。
【0060】
ステップS126では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[3],R2[3]のデータs[3],r[3]がそれぞれ選択される。そして、演算器202により、s[3]とr[3]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第4項の演算結果が得られる。
【0061】
ステップS128では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR0に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[8]〜s[11]がグループレジスタR0に読み込まれる。
ステップS130では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[12]を指し示すことになる。
【0062】
ステップS132では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR3に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[4]〜r[7]がグループレジスタR3に読み込まれる。
ステップS134では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[7]を指し示すことになる。
【0063】
ステップS136では、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[0],R3[0]のデータs[4],r[4]がそれぞれ選択される。そして、演算器202により、s[4]とr[4]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第5項の演算結果が得られる。
【0064】
ステップS138では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[1],R3[1]のデータs[5],r[5]がそれぞれ選択される。そして、演算器202により、s[5]とr[5]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第6項の演算結果が得られる。
【0065】
ステップS140では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[2],R3[2]のデータs[6],r[6]がそれぞれ選択される。そして、演算器202により、s[6]とr[6]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第7項の演算結果が得られる。
【0066】
ステップS142では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[3],R3[3]のデータs[7],r[7]がそれぞれ選択される。そして、演算器202により、s[7]とr[7]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第8項の演算結果が得られる。
【0067】
ステップS144では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR1に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[12]〜s[15]がグループレジスタR1に読み込まれる。
ステップS146では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[16]を指し示すことになる。
【0068】
ステップS148では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR2に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[8]〜r[11]がグループレジスタR2に読み込まれる。
ステップS150では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[12]を指し示すことになる。
以下は、ステップS120〜S150の処理を必要な数だけ繰り返し行えばよい。
【0069】
次に、デジタル信号処理装置100で上式(2)に示す相関演算を行う場合を説明する。ただし、s[n]とr[n]は、図10に示すように、データメモリ10に格納されているとする。
図6は、プログラムシーケンサ18で実行される処理を示すフローチャートである。
プログラムシーケンサ18では、プログラムメモリ16から制御プログラムが読み出され、読み出された制御プログラムに従って、図6のフローチャートに示す相関演算処理がステップS200〜S250の順で実行される。
【0070】
ステップS200では、ステップS100と同一の処理が実行される。
ステップS202では、ポインタレジスタP1にs[1]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部14では、s[1]のデータアドレスのうちグループアドレスがポインタレジスタP1に格納される。また、データ演算部12では、s[1]のデータアドレスのうち下位2ビットのデータがインデックスレジスタファイル208に格納される。s[1]のデータアドレスのうち下位2ビットは「01」なので、最上位ビットを「0」として3ビットのデータ「001」がエレメントインデックスデータsとして格納される。
【0071】
ステップS204〜S218では、ステップS104〜S118と同一の処理が実行される。
ステップS220では、ブロック演算命令コードが実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「001」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[1]のデータs[1]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ212により、エレメントインデックスデータr「000」が選択されてセレクタ206に出力され、セレクタ206により、レジスタR2[0]のデータr[0]が選択されて演算器202に出力される。そして、演算器202により、s[1]とr[0]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項の演算結果が得られる。また、計算器214により、エレメントインデックスデータs,rにそれぞれ「1」が加算され、インデックスレジスタファイル208に格納される。
【0072】
ステップS222では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「010」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[2]のデータs[2]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ212により、エレメントインデックスデータr「001」が選択されてセレクタ206に出力され、セレクタ206により、レジスタR2[1]のデータr[1]が選択されて演算器202に出力される。そして、演算器202により、s[2]とr[1]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項および第2項の演算結果が得られる。また、計算器214により、エレメントインデックスデータs,rにそれぞれ「1」が加算され、インデックスレジスタファイル208に格納される。
【0073】
ステップS224では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[3],R2[2]のデータs[3],r[2]がそれぞれ選択される。そして、演算器202により、s[3]とr[2]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第3項の演算結果が得られる。
【0074】
ステップS226では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[0],R2[3]のデータs[4],r[3]がそれぞれ選択される。そして、演算器202により、s[4]とr[3]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第4項の演算結果が得られる。
【0075】
ステップS228〜S234では、ステップS128〜S134と同一の処理が実行される。
ステップS236では、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[1],R3[0]のデータs[5],r[4]がそれぞれ選択される。そして、演算器202により、s[5]とr[4]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第5項の演算結果が得られる。
【0076】
ステップS238では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[2],R3[1]のデータs[6],r[5]がそれぞれ選択される。そして、演算器202により、s[6]とr[5]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第6項の演算結果が得られる。
【0077】
ステップS240では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[3],R3[2]のデータs[7],r[6]がそれぞれ選択される。そして、演算器202により、s[7]とr[6]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第7項の演算結果が得られる。
【0078】
ステップS242では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[0],R3[3]のデータs[8],r[7]がそれぞれ選択される。そして、演算器202により、s[8]とr[7]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(2)の第1項〜第8項の演算結果が得られる。
【0079】
ステップS244〜S250では、ステップS144〜S150と同一の処理が実行される。
以下は、ステップS220〜S250の処理を必要な数だけ繰り返し行えばよい。
このように、上式(1)に示す相関演算を行う場合と異なるのは、ステップS202,S220〜S226,S236〜S242の処理であるが、プログラムシーケンサ18の制御プログラムとしては、ステップS202の記述だけが異なる。このことは、上式(3),(4)に示す相関演算を行う場合についても同様である。
【0080】
このようにして、本実施の形態では、複数のグループレジスタR0〜Rn-1からなるレジスタファイル200と、レジスタファイル200のデータを用いて演算を行う演算器202と、エレメントインデックスデータを記憶するインデックスレジスタと、インデックスレジスタのエレメントインデックスデータに基づいて、2つのグループレジスタR0,R1(R2,R3)をレジスタブロックとしてレジスタブロックのレジスタR0[0]〜R1[3](R2[0]〜R3[3])のなかからいずれか1つのレジスタのデータを選択して演算器202に出力するセレクタ204,206とを備える。
【0081】
これにより、境界不整列データアクセスとなる場合や、データの論理構造が重複している場合でも、レジスタファイル200へのデータの読み込み回数が極端に増加することがないので、処理効率を向上することができる。また、データの論理構造が重複している場合でも、プログラムの多少の変更で対応することができるので、プログラムコストを低減することができる。さらに、インデックスレジスタおよびセレクタ204,206を設けるだけでよく、また、多くの境界不整列データアクセスのパターンに対応する場合でも、エレメントインデックスデータのビット数をさほど増やさなくてすむので、特許文献1の発明に比して、製造コストを低減することができる。
【0082】
さらに、本実施の形態では、複数のインデックスレジスタからなるインデックスレジスタファイル208と、与えられたセレクトデータに基づいて、インデックスレジスタファイル208のなかからいずれか1つのインデックスレジスタのエレメントインデックスデータを選択してセレクタ204,206に出力するセレクタ210,212とを備える。
これにより、複数のエレメントインデックスデータをインデックスレジスタファイル208に格納しておき、セレクトデータによってそれらエレメントインデックスデータを選択的に使用することができるので、インデックスレジスタの使い勝手が向上し、プログラムを作成しやすくなる。
【0083】
さらに、本実施の形態では、セレクタ204,206に出力したエレメントインデックスデータを更新してインデックスレジスタファイル208に格納する計算器214を備える。
これにより、エレメントインデックスデータを使用するたびに自動的に更新されるので、エレメントインデックスデータの更新をソフトウェアで行わなくてすみ、演算速度を向上することができる。
【0084】
上記第1の実施の形態において、エレメントインデックスデータは、請求項1ないし4または7記載のインデックスデータに対応し、セレクタ204,206は、請求項1ないし4記載のセレクタに対応し、セレクタ210,212は、請求項3記載の第2セレクタに対応し、計算器214は、請求項4記載のインデックスデータ更新手段に対応している。
【0085】
次に、本発明の第2の実施の形態を図面を参照しながら説明する。図7ないし図9は、本発明に係るデータ演算装置の第2の実施の形態を示す図である。
本実施の形態は、本発明に係るデータ演算装置を、デジタル信号処理を行う32ビットRISC型のデジタル信号処理装置100においてデータ演算部12に適用したものであり、上記第1の実施の形態と異なるのは、レジスタブロックに含まれるグループレジスタの数を動的に変更する点にある。なお、以下、上記第1の実施の形態と異なる部分についてのみ説明し、上記第1の実施の形態と重複する部分については同一の符号を付して説明を省略する。
【0086】
次に、データ演算部12の構成を図7ないし図9を参照しながら詳細に説明する。
図7は、データ演算部12のハードウェア構成を示すブロック図である。
データ演算部12は、図7に示すように、レジスタファイル200と、演算器202と、レジスタファイル200のなかからデータを選択するセレクタ224,226と、複数のインデックスレジスタからなるインデックスレジスタファイル228と、インデックスレジスタファイル228のなかからデータを選択するセレクタ230,232と、インデックスレジスタファイル228のデータを更新する計算器234と、計算器234とバス20のデータを選択するセレクタ236とで構成されている。
【0087】
図8は、レジスタブロックの構成を示す図である。
本実施の形態では、1つのグループレジスタを1つのレジスタブロックとしてグループ化するバンドルモード0と、2つのグループレジスタを1つのレジスタブロックとしてグループ化するバンドルモード1と、4つのグループレジスタを1つのレジスタブロックとしてグループ化するバンドルモード2と、8つのグループレジスタを1つのレジスタブロックとしてグループ化するバンドルモード3とを規定する。
【0088】
バンドルモード0では、図8に示すように、グループレジスタR0をレジスタブロック0(バンドル番号「0」により特定されるレジスタブロックをいう。以下、同様に略記する。)とし、同様に、グループレジスタR2〜R7をレジスタブロック1〜7としてそれぞれグループ化する。
バンドルモード1では、グループレジスタR0,R1をレジスタブロック0とし、グループレジスタR2,R3をレジスタブロック1とし、グループレジスタR4,R5をレジスタブロック2とし、グループレジスタR6,R7をレジスタブロック3としてそれぞれグループ化する。
【0089】
バンドルモード2では、グループレジスタR0〜R3をレジスタブロック0とし、グループレジスタR4〜R7をレジスタブロック1としてそれぞれグループ化する。
バンドルモード3では、グループレジスタR0〜R7をレジスタブロック0としてそれぞれグループ化する。
図7に戻り、セレクタ224は、グループレジスタR0〜R7の各レジスタと接続し、セレクタ230からのセレクトデータに基づいて、グループレジスタR0〜R7のなかからいずれか1つのレジスタのデータを選択し、選択したデータを演算器202の第1オペランドとして演算器202に出力する。
【0090】
セレクタ230からのセレクトデータは、5ビットからなる。セレクタ224は、セレクトデータの上位3ビットが「000」であるときは、グループレジスタR0のうち下位2ビットの値により指定されるレジスタのデータを選択し、セレクトデータの上位3ビットが「001」であるときは、グループレジスタR1のうち下位2ビットの値により指定されるレジスタのデータを選択する。同様に、セレクトデータの上位3ビットが「010」、「011」、「100」、「101」、「110」および「111」であるときは、グループレジスタR2〜R7のうち下位2ビットの値により指定されるレジスタのデータを選択する。
【0091】
セレクタ226は、グループレジスタR0〜R7の各レジスタと接続し、セレクタ232からのセレクトデータに基づいて、グループレジスタR0〜R7のなかからいずれか1つのレジスタのデータを選択し、選択したデータを演算器202の第2オペランドとして演算器202に出力する。データの選択手順は、セレクタ224と同様である。
インデックスレジスタファイル228は、エレメントインデックスデータを各インデックスレジスタに記憶する。
【0092】
図9は、エレメントインデックスデータのデータ構造を示す図である。
エレメントインデックスデータは、図9に示すように、5ビットのデータからなり、バンドルモード0のときは、5ビットのうち下位2ビットを使用し、下位2ビットb1,b0がグループレジスタの各レジスタの別を示す。
バンドルモード1のときは、5ビットのうち下位3ビットを使用し、上位3番目のビットb2がグループレジスタR0,R1(R2,R3等)の別を示し、下位2ビットb1,b0がグループレジスタの各レジスタの別を示す。
【0093】
バンドルモード2のときは、5ビットのうち下位4ビットを使用し、上位2,3番目のビットb3,b2がグループレジスタR0〜R3(R4〜R7)の別を示し、下位2ビットb1,b0がグループレジスタの各レジスタの別を示す。
バンドルモード3のときは、上位1〜3番目のビットb4〜b2がグループレジスタR0〜R7の別を示し、下位2ビットb1,b0がグループレジスタの各レジスタの別を示す。エレメントインデックスデータの各ビットは、セレクタ230,232からのセレクトデータの各ビットに対応している。また、エレメントインデックスデータの下位2ビットb1,b0は、データアドレスの下位2ビットb1,b0に対応している。
【0094】
図7に戻り、セレクタ230は、プログラムシーケンサ18からのセレクトデータに基づいて、インデックスレジスタファイル228のなかからいずれか1つのインデックスレジスタのエレメントインデックスデータを選択し、選択したエレメントインデックスデータ、並びにプログラムシーケンサ18からのバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータを生成し、生成したレジスタインデックスデータをセレクタ224に出力する。
【0095】
バンドルインデックスデータは、バンドル番号を示す5ビットのデータである。バンドルモード0を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位3ビットを上位ビットとし、選択したエレメントインデックスデータの下位2ビットを下位ビットとして結合し、5ビットのレジスタインデックスデータを生成して出力する。
【0096】
バンドルモード1を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位2ビットを上位ビットとし、選択したエレメントインデックスデータの下位3ビットを下位ビットとして結合し、5ビットのレジスタインデックスデータを生成して出力する。
バンドルモード2を示すバンドルモードデータが与えられたときは、バンドルインデックスデータの下位1ビットを上位ビットとし、選択したエレメントインデックスデータの下位4ビットを下位ビットとして結合し、5ビットのレジスタインデックスデータを生成して出力する。
【0097】
バンドルモード3を示すバンドルモードデータが与えられたときは、選択したエレメントインデックスデータをそのままレジスタインデックスデータとして出力する。
なお、プログラムシーケンサ18では、セレクタ230を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ230に出力する。また、バンドルモードまたはバンドル番号を設定する命令コードを実行すると、その命令コードに対応するオペランドをバンドルモードデータまたはバンドルインデックスデータとしてセレクタ230に出力する。
【0098】
セレクタ232は、プログラムシーケンサ18からのセレクトデータに基づいて、インデックスレジスタファイル228のなかからいずれか1つのインデックスレジスタのエレメントインデックスデータを選択し、選択したエレメントインデックスデータ、並びにプログラムシーケンサ18からのバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータを生成し、生成したレジスタインデックスデータをセレクタ226に出力する。レジスタインデックスデータの生成手順は、セレクタ230と同様である。なお、プログラムシーケンサ18では、セレクタ232を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ232に出力する。また、バンドルモードまたはバンドル番号を設定する命令コードを実行すると、その命令コードに対応するオペランドをバンドルモードデータまたはバンドルインデックスデータとしてセレクタ232に出力する。
【0099】
計算器234は、セレクタ230またはセレクタ232からセレクトデータとして出力されるレジスタインデックスデータを更新してセレクタ236に出力する。レジスタインデックスデータは、レジスタブロックのレジスタからデータを取得する順序があらかじめ決まっている場合に、その順序でデータが選択できるように更新する。レジスタインデックスデータの更新手順は、上記第1の実施の形態において計算器214によりエレメントインデックスデータを更新する手順と同じ要領で行うことができる。
【0100】
セレクタ236は、プログラムシーケンサ18からのセレクトデータに基づいて、データアドレス生成部14からのデータアドレスのうち下位2ビットのデータ、および計算器234からのレジスタインデックスデータのうちいずれか一方を選択してインデックスレジスタファイル228に格納する。なお、プログラムシーケンサ18では、セレクタ236を制御する命令コードを実行すると、その命令コードに対応するオペランドをセレクトデータとしてセレクタ236に出力する。
【0101】
次に、本実施の形態の動作を説明する。
初めに、バンドルモード1で演算を行う場合を説明する。
プログラムシーケンサ18では、バンドルモード1に設定する命令コードが実行されると、バンドルモード1を示すバンドルモードデータがデータ演算部12に出力される。そして、バンドル番号「0」を設定する命令コードが実行されると、バンドルインデックスデータとして「00000」がデータ演算部12に出力される。
【0102】
データ演算部12では、バンドルモードデータおよびバンドルインデックスデータが与えられると、セレクタ230,232により、エレメントインデックスデータが選択され、選択されたエレメントインデックスデータ、並びに与えられたバンドルモードデータおよびバンドルインデックスデータに基づいてレジスタインデックスデータが生成されてセレクタ224,226に出力される。このとき、バンドルインデックスデータの下位2ビットが「00」なので、「00xxx」(「x」は、選択されたエレメントインデックスデータのビットを示す。以下、同様に表記する。)がレジスタインデックスデータとして出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータ「00xxx」に基づいて、グループレジスタR0,R1のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0103】
なお、セレクタ230,232に与えられるセレクトデータが異なるので、セレクタ224,226,230,232による選択はそれぞれ独立に行われる。
プログラムシーケンサ18では、バンドル番号「1」を設定する命令コードが実行されると、バンドルインデックスデータとして「00001」がデータ演算部12に出力される。
【0104】
データ演算部12では、バンドルインデックスデータの下位2ビットが「01」なので、セレクタ230,232により、「01xxx」がレジスタインデックスデータとして生成・出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータ「01xxx」に基づいて、グループレジスタR2,R3のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
バンドル番号「2」または「3」を設定する命令コードが実行された場合も同様であり、グループレジスタR4,R5またはR6,R7のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0105】
次に、バンドルモード2で演算を行う場合を説明する。
プログラムシーケンサ18では、バンドルモード2に設定する命令コードが実行されると、バンドルモード2を示すバンドルモードデータがデータ演算部12に出力される。そして、バンドル番号「0」を設定する命令コードが実行されると、バンドルインデックスデータとして「00000」がデータ演算部12に出力される。
【0106】
データ演算部12では、バンドルモードデータおよびバンドルインデックスデータが与えられると、バンドルインデックスデータの下位1ビットが「0」なので、セレクタ230,232により、「0xxxx」がレジスタインデックスデータとして生成・出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータ「0xxxx」に基づいて、グループレジスタR0〜R3のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0107】
プログラムシーケンサ18では、バンドル番号「1」を設定する命令コードが実行されると、バンドルインデックスデータとして「00001」がデータ演算部12に出力される。
データ演算部12では、バンドルインデックスデータの下位1ビットが「1」なので、セレクタ230,232により、「1xxxx」がレジスタインデックスデータとして生成・出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータ「1xxxx」に基づいて、グループレジスタR4〜R7のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0108】
次に、バンドルモード3で演算を行う場合を説明する。
プログラムシーケンサ18では、バンドルモード3に設定する命令コードが実行されると、バンドルモード3を示すバンドルモードデータがデータ演算部12に出力される。
データ演算部12では、バンドルモードデータが与えられると、セレクタ230,232により、選択されたエレメントインデックスデータがそのままレジスタインデックスデータとして出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータに基づいて、グループレジスタR0〜R7のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0109】
次に、バンドルモード0で演算を行う場合を説明する。
プログラムシーケンサ18では、バンドルモード0に設定する命令コードが実行されると、バンドルモード0を示すバンドルモードデータがデータ演算部12に出力される。そして、バンドル番号「0」を設定する命令コードが実行されると、バンドルインデックスデータとして「00000」がデータ演算部12に出力される。
【0110】
データ演算部12では、バンドルモードデータおよびバンドルインデックスデータが与えられると、バンドルインデックスデータの下位3ビットが「000」なので、セレクタ230,232により、「000xx」がレジスタインデックスデータとして生成・出力される。そして、セレクタ224,226により、与えられたレジスタインデックスデータ「000xx」に基づいて、グループレジスタR0のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
【0111】
バンドル番号「1」〜「7」を設定する命令コードが実行された場合も同様であり、グループレジスタR1,R2,R3,R4,R5,R6またはR7のなかからいずれか1つのレジスタのデータが選択されて演算器202に出力される。
このようにして、本実施の形態では、レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、およびインデックスレジスタのエレメントインデックスデータに基づいて、そのバンドルインデックスデータにより指定されるレジスタブロックおよびそのレジスタブロック内のデータの位置を示すレジスタインデックスデータを生成するセレクタ230,232を備える。
【0112】
これにより、バンドルインデックスデータによって複数のレジスタブロックを選択的に使用することができるので、レジスタの使い勝手が向上し、プログラムを作成しやすくなる。
さらに、本実施の形態では、セレクタ230,232は、バンドルモードを示すバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、バンドルインデックスデータおよびエレメントインデックスデータに基づいて、レジスタインデックスデータを生成するようになっている。
これにより、バンドルモードデータによってレジスタブロックの論理構造を変更することができるので、レジスタの使い勝手がさらに向上し、プログラムをさらに作成しやすくなる。
【0113】
上記第2の実施の形態において、セレクタ224,226は、請求項5記載のセレクタに対応し、セレクタ230,232は、請求項5または6記載のインデックスデータ生成手段に対応し、レジスタインデックスデータは、請求項5または6記載の第2エレメントインデックスデータに対応している。
なお、上記第1の実施の形態においては、グループレジスタR0,R1をレジスタブロックAとしてグループ化したが、これに限らず、特定の2つのグループレジスタをレジスタブロックAとしてグループ化すればよいので、他の組み合わせでグループ化することもできる。レジスタブロックBについても同様である。
【0114】
また、上記第1の実施の形態においては、インデックスレジスタファイル208を設けて構成したが、これに限らず、インデックスレジスタを1つだけ設けて構成することもできる。この場合、セレクタ210,212も不要となる。
また、上記第2の実施の形態においては、インデックスレジスタファイル228を設けて構成したが、これに限らず、インデックスレジスタを1つだけ設けて構成することもできる。この場合、セレクタ230,232は選択機能を設けず、レジスタインデックスデータを生成する機能だけ設ければよい。
【0115】
また、上記第2の実施の形態においては、8つのグループレジスタR0〜R7を用いてレジスタブロックを構成したが、これに限らず、8つ未満のグループレジスタを用いてレジスタブロックを構成することもできるし、9つ以上のグループレジスタを用いてレジスタブロックを構成することもできる。また、バンドルインデックスデータおよびエレメントインデックスデータのビット数は、例えば、2つのグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ3ビット、4つのグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ4ビット、16個のグループレジスタを用いてレジスタブロックを構成する場合はそれぞれ5ビットあればよい。いずれの場合も、上記第2の実施の形態と同じ要領で行うことができる。
【0116】
また、上記第2の実施の形態においては、8つのグループレジスタR0〜R7を用いてレジスタブロックを構成し、4つのバンドルモードを設定したが、これに限らず、バンドルモードを4つ未満として設定してもよい。この場合、バンドルインデックスデータのビット数は、3つのバンドルモード0〜2を設定する場合は4ビット、2つのバンドルモード0,1を設定する場合は3ビット、1つのバンドルモード0だけを設定する場合は2ビットあればよい。このことは、レジスタブロックの構成に用いるグループレジスタの数が8つ未満の場合、および9つ以上の場合であっても同様である。
【0117】
また、上記第1および第2の実施の形態においては、データ演算部12に1つの演算器202を設けて構成したが、これに限らず、データ演算部12に複数の演算器202を設けて構成することもできる。上記第1の実施の形態の場合は、各演算器202ごとにセレクタ204,206,210,212を設ければよい。上記第2の実施の形態の場合は、各演算器202ごとにセレクタ224,226,230,232を設ければよい。
【0118】
また、上記第1および第2の実施の形態においては、エレメントインデックスデータまたはレジスタインデックスデータをセレクタ204,224に出力するセレクタ210,230と、エレメントインデックスデータまたはレジスタインデックスデータをセレクタ206,226に出力するセレクタ212,232とを設けて構成したが、これに限らず、セレクタ210,230を設けず、セレクタ204,224は、プログラムシーケンサ18からのセレクトデータに基づいて、レジスタファイル200のなかからいずれか1つのレジスタのデータを選択するように構成することもできる。また、セレクタ212,232を設けず、セレクタ206,226は、プログラムシーケンサ18からのセレクトデータに基づいて、レジスタファイル200のなかからいずれか1つのレジスタのデータを選択するように構成することもできる。
【0119】
セレクタ212,232を設けない後者の構成とした場合の動作を、図5のフローチャートに示す相関演算処理を援用して説明する。
ステップS100では、ポインタレジスタP0にr[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部14では、r[0]のデータアドレスのうちグループアドレスがポインタレジスタP0に格納される。
【0120】
ステップS102では、ポインタレジスタP1にs[0]のデータアドレスを設定する命令コードが実行されると、データアドレス生成部14では、s[0]のデータアドレスのうちグループアドレスがポインタレジスタP1に格納される。また、データ演算部12では、s[0]のデータアドレスのうち下位2ビットのデータがインデックスレジスタファイル208に格納される。s[0]のデータアドレスのうち下位2ビットは「00」なので、最上位ビットを「0」として3ビットのデータ「000」がエレメントインデックスデータsとして格納される。
【0121】
ステップS104では、レジスタA0の内容を初期化する命令コードが実行されると、データ演算部12では、レジスタA0に「0」が設定される。
ステップS108では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR0に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[0]〜s[3]がグループレジスタR0に読み込まれる。
【0122】
ステップS110では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[4]を指し示すことになる。
ステップS112では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR1に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[4]〜s[7]がグループレジスタR1に読み込まれる。
【0123】
ステップS114では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[8]を指し示すことになる。
ステップS116では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR2に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[0]〜r[3]がグループレジスタR2に読み込まれる。
ステップS118では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[4]を指し示すことになる。
【0124】
ステップS120では、ブロック演算命令コードが実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「000」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[0]のデータs[0]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ206により、レジスタR2[0]のデータr[0]が選択されて演算器202に出力される。そして、演算器202により、s[0]とr[0]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項の演算結果が得られる。また、計算器214により、エレメントインデックスデータsに「1」が加算され、インデックスレジスタファイル208に格納される。
【0125】
ステップS122では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ210により、エレメントインデックスデータs「001」が選択されてセレクタ204に出力され、セレクタ204により、レジスタR0[1]のデータs[1]が選択されて演算器202に出力される。また、プログラムシーケンサ18からのセレクトデータに基づいて、セレクタ206により、レジスタR2[1]のデータr[1]が選択されて演算器202に出力される。そして、演算器202により、s[1]とr[1]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項および第2項の演算結果が得られる。また、計算器214により、エレメントインデックスデータsに「1」が加算され、インデックスレジスタファイル208に格納される。
【0126】
ステップS124では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[2],R2[2]のデータs[2],r[2]がそれぞれ選択される。そして、演算器202により、s[2]とr[2]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第3項の演算結果が得られる。
【0127】
ステップS126では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR0[3],R2[3]のデータs[3],r[3]がそれぞれ選択される。そして、演算器202により、s[3]とr[3]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第4項の演算結果が得られる。
【0128】
ステップS128では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR0に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[8]〜s[11]がグループレジスタR0に読み込まれる。
ステップS130では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[12]を指し示すことになる。
【0129】
ステップS132では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR2に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[4]〜r[7]がグループレジスタR2に読み込まれる。
ステップS134では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[7]を指し示すことになる。
【0130】
ステップS136では、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[0],R2[0]のデータs[4],r[4]がそれぞれ選択される。そして、演算器202により、s[4]とr[4]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第5項の演算結果が得られる。
【0131】
ステップS138では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[1],R2[1]のデータs[5],r[5]がそれぞれ選択される。そして、演算器202により、s[5]とr[5]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第6項の演算結果が得られる。
【0132】
ステップS140では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[2],R2[2]のデータs[6],r[6]がそれぞれ選択される。そして、演算器202により、s[6]とr[6]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第7項の演算結果が得られる。
【0133】
ステップS142では、さらに、ブロック演算命令コードが実行されると、データ演算部12では、同様に、セレクタ204,206により、レジスタR1[3],R2[3]のデータs[7],r[7]がそれぞれ選択される。そして、演算器202により、s[7]とr[7]が乗算され、その乗算結果がレジスタA0の値に加算されてレジスタA0に格納される。これにより、上式(1)の第1項〜第8項の演算結果が得られる。
【0134】
ステップS144では、ポインタレジスタP1が指し示すグループアドレスのデータをグループレジスタR1に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からs[12]〜s[15]がグループレジスタR1に読み込まれる。
ステップS146では、ポインタレジスタP1を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP1のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のs[16]を指し示すことになる。
【0135】
ステップS148では、ポインタレジスタP0が指し示すグループアドレスのデータをグループレジスタR2に読み込む命令コードが実行されると、データ演算部12では、データメモリ10からr[8]〜r[11]がグループレジスタR2に読み込まれる。
ステップS150では、ポインタレジスタP0を加算する命令コードが実行されると、データ演算部12では、ポインタレジスタP0のグループアドレスが「1」加算される。データメモリ10上では、4バイト先のr[12]を指し示すことになる。
【0136】
また、上記第1および第2の実施の形態においては、32ビットRISC型のデジタル信号処理装置100に適用したが、データメモリ10に対するデータアクセスを、データメモリ10の最小記憶単位よりも大きい単位で行うプロセッサであればどのようなプロセッサにも適用することができる。例えば、データメモリ10の最小記憶単位が1バイトであれば、アクセス単位が16ビット以上のプロセッサであり、データメモリ10の最小記憶単位が2バイトであれば、アクセス単位が32ビット以上のプロセッサである。
【0137】
また、上記第1の実施の形態において、図5および図6のフローチャートに示す処理を実行するにあたってはいずれも、プログラムメモリ16にあらかじめ格納されている制御プログラムを実行する場合について説明したが、これに限らず、これらの手順を示したプログラムが記憶された記憶媒体から、そのプログラムをプログラムメモリ16に読み込んで実行するようにしてもよい。
【0138】
ここで、記憶媒体とは、RAM、ROM等の半導体記憶媒体、FD、HD等の磁気記憶型記憶媒体、CD、CDV、LD、DVD等の光学的読取方式記憶媒体、MO等の磁気記憶型/光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のいかんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、あらゆる記憶媒体を含むものである。
【0139】
また、上記第1および第2の実施の形態においては、本発明に係るデータ演算装置を、デジタル信号処理を行う32ビットRISC型のデジタル信号処理装置100においてデータ演算部12に適用したが、これに限らず、本発明の主旨を逸脱しない範囲で他の場合にも適用可能である。
【図面の簡単な説明】
【0140】
【図1】デジタル信号処理装置100のハードウェア構成を示すブロック図である。
【図2】データアドレスのデータ構造を示す図である。
【図3】データ演算部12のハードウェア構成を示すブロック図である。
【図4】エレメントインデックスデータのデータ構造を示す図である。
【図5】プログラムシーケンサ18で実行される処理を示すフローチャートである。
【図6】プログラムシーケンサ18で実行される処理を示すフローチャートである。
【図7】データ演算部12のハードウェア構成を示すブロック図である。
【図8】レジスタブロックの構成を示す図である。
【図9】エレメントインデックスデータのデータ構造を示す図である。
【図10】メモリ上のデータの配置を示す図である。
【図11】従来のデジタル信号プロセッサの構成を示すブロック図である。
【図12】従来のデジタル信号プロセッサの動作を説明するための図である。
【符号の説明】
【0141】
100 デジタル信号処理装置
10 データメモリ
12 プロセッサ
14 データアドレス生成部
16 プログラムメモリ
18 プログラムシーケンサ
20 バス
200 レジスタファイル
202 演算器
204,206,210,212 セレクタ
208,228 インデックスレジスタファイル
214,234 計算器
216 セレクタ
224,226,230,232 セレクタ
236 セレクタ

【特許請求の範囲】
【請求項1】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、
インデックスデータを記憶するインデックスレジスタと、
前記インデックスレジスタのインデックスデータに基づいて、前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタのなかから、1または複数の前記レジスタのデータを選択して前記演算器に出力するセレクタとを備えることを特徴とするデータ演算装置。
【請求項2】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置であって、
前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータを記憶するインデックスレジスタと、
前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するセレクタとを備えることを特徴とするデータ演算装置。
【請求項3】
請求項2において、
さらに、複数の前記インデックスレジスタからなるインデックスレジスタファイルと、
与えられたセレクトデータに基づいて、前記インデックスレジスタファイルのなかからいずれか1つの前記インデックスレジスタのエレメントインデックスデータを選択して前記セレクタに出力する第2セレクタとを備えることを特徴とするデータ演算装置。
【請求項4】
請求項3において、
さらに、前記セレクタに出力したエレメントインデックスデータを更新して前記インデックスレジスタファイルに格納するインデックスデータ更新手段を備えることを特徴とするデータ演算装置。
【請求項5】
請求項2ないし4のいずれか1項において、
さらに、前記レジスタブロックを指定するバンドルインデックスデータが与えられたときに、与えられたバンドルインデックスデータ、および前記インデックスレジスタのエレメントインデックスデータに基づいて、当該バンドルインデックスデータにより指定される前記レジスタブロックおよび当該レジスタブロック内のデータの位置を示す第2エレメントインデックスデータを生成するインデックスデータ生成手段を備え、
前記セレクタは、前記インデックスデータ生成手段で生成した第2エレメントインデックスデータに基づいて、複数の前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するようになっていることを特徴とするデータ演算装置。
【請求項6】
請求項5において、
前記インデックスデータ生成手段は、2以上の第1所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第1バンドルモード、および前記第1所定数よりも多い第2所定数の前記グループレジスタを前記レジスタブロックとして論理的にグループ化する第2バンドルモードのうちいずれかを指定するバンドルモードデータが与えられたときに、与えられたバンドルモードデータ、前記バンドルインデックスデータおよび前記エレメントインデックスデータに基づいて、前記第2エレメントインデックスデータを生成するようになっていることを特徴とするデータ演算装置。
【請求項7】
複数のレジスタからなるレジスタファイルと、前記レジスタのデータを用いて演算を行う演算器とを備え、前記レジスタファイルと外部との間のデータアクセスを、複数の前記レジスタからなるグループレジスタ単位で行うデータ演算装置を利用して演算を行うデータ演算方法であって、
前記レジスタファイルのレジスタのうち少なくとも2つの前記グループレジスタをレジスタブロックとしてグループ化したときに、前記レジスタブロックの各グループレジスタに前記外部からデータを読み込むデータ読込ステップと、
前記レジスタブロック内のデータの位置を指定するエレメントインデックスデータをインデックスレジスタに格納するインデックスデータ格納ステップと、
前記インデックスレジスタのエレメントインデックスデータに基づいて、前記レジスタブロックのレジスタのなかからいずれか1つの前記レジスタのデータを選択して前記演算器に出力するデータ選択ステップと、
前記演算器により演算を行う演算ステップとを含むことを特徴とするデータ演算方法。
【請求項8】
請求項7において、
さらに、前記インデックスデータ格納ステップ、前記データ選択ステップおよび前記演算ステップを繰り返し行う反復演算ステップを含むことを特徴とするデータ演算方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate