本実施の形態は、16ビット幅のレジスタと混合回路を設け、制御部に特殊な制御をさせることにより、使用メモリ量(特に、DMFアルゴリズムに基づく演算処理時における使用メモリ量)を従来の2/3に低減することを目的とする。
図1は本発明に係る演算装置の構成を示す図である。
本発明に係る演算装置は、1ワードが標準的な2のn乗のビット幅でないデータの演算を、高速に少ないメモリ量で行えるように構成されている。
以下に、第3世代携帯電話に搭載されるDSPを例にして、本発明の実施の形態を説明する。なお、各図は本発明を理解できる程度に概略的に示してあるにすぎない。また、各図において、共通する要素については、同一の符号を付し、説明を省略する。
本実施の形態に係るDSPは、図1に示すように、レジスタ27と混合回路29とを備えている。レジスタ27は、メモリ17から出力されるデータを一時格納するために設けられている。混合回路29は、メモリ17から出力されるデータ(すなわち、レジスタ27に一時格納されたデータ)に対し、その一部をALU13’から出力されるデータに置き換えるために設けられている。なお、レジスタ27と混合回路29も、他の要素と同様に、図示しない制御部によって制御されている。また、本実施の形態に係るALU13’は、後述するように、分割信号Kが入力されることにより任意の位置でキャリー信号を分割する機能が付加されている。
ところで、本実施の形態は、メモリ17として、既に大量に普及している汎用的なメモリを利用可能とすることが意図されている。そこで、本実施の形態では、メモリ17に格納するデータを図2〜図12に示すように配列するとともに、ALU13’が演算し易くなるように、図示しない制御部によってメモリ17に対して特殊な制御を行っている。
図2〜図12は、2つのメモリブロックに格納されるデータの配置を示す図であり、図2にはメモリ17に格納されるデータの大まかな配置が、また図3〜図12にはメモリ17に格納されるデータの詳細な配置が示されている。なお、図3〜図12中、「[−In−]」はIパートデータを格納している領域、「[−Rn−]」はRパートデータを格納している領域、「*」は未使用データを格納している領域を示している。
図2〜図12に示すように、メモリ17は、10ビット幅のIパートデータと10ビット幅のRパートデータの組合せによるデータに4ビット幅の未使用データを付加して24ビット幅のデータとし、これらを各16ビット幅の第1及び第2のメモリブロック19、21の中に連続して格納する。本実施の形態は、データをこのように格納することにより、メモリ17の未使用領域を従来の12/32=37.5%分から4/32=12.5%分に低減している。
なお、未使用データのビット幅は、後述の理由により、後続のデータの先頭が0ビット目または8ビット目から始まるようにするのが望ましい。例えば、図2に示す例では、Iパートデータのビット幅が10ビット、Rパートデータのビット幅が10ビットであるので、未使用データのビット幅は4ビットになっている。仮に、IパートデータやRパートデータのビット幅が変われば、これに応じて後続のデータの先頭が0ビット目または8ビット目から始まるように、未使用データのビット幅も変えるのが望ましい。
本実施の形態では、図示しない制御部は、メモリ17に対して以下のような制御を行う。
すなわち、例えば、メモリ17には図3〜図12に示すようなデータが格納されているものとする。
図示しない制御部は、図22及び図23に示すDMFアルゴリズムに基づいて入力A0をALU13’に供給する。ここでは、入力A0は、I0パートデータとR0パートデータとする。I0パートデータとR0パートデータは、メモリ17のアドレス0と1に格納されている。そこで、図示しない制御部は、メモリ17のアドレス0と1に格納されていたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をアキュムレータ(以下、Accという)15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に、後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス0と1に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D1の出力A1をALU13’に供給する。ここでは、出力A1は、遅延値D1の値が128サイクルであるので0+128=128サイクル遅延して格納されたデータとなる。すなわち、I128パートデータとR128パートデータとなる。I128パートデータとR128パートデータは、メモリ17のアドレス192と193に格納されている。そこで、図示しない制御部は、メモリ17のアドレス192と193に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス192と193に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D2の出力A2をALU13’に供給する。ここでは、出力A2は、遅延値D2の値が64サイクルであるので128+64=192サイクル遅延して格納されたデータとなる。すなわち、I192パートデータとR192パートデータとなる。I192パートデータとR192パートデータは、メモリ17のアドレス288と289に格納されている。そこで、図示しない制御部は、メモリ17のアドレス288と289に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス288と289に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D3の出力A3をALU13’に供給する。ここでは、出力A3は、遅延値D3の値が16サイクルであるので192+16=208サイクル遅延して格納されたデータとなる。すなわち、I208パートデータとR208パートデータとなる。I208パートデータとR208パートデータは、メモリ17のアドレス312と313に格納されている。そこで、図示しない制御部は、メモリ17のアドレス312と313に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス312と313に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D4の出力A4をALU13’に供給する。ここでは、出力A4は、遅延値D4の値が32サイクルであるので208+32=240サイクル遅延して格納されたデータとなる。すなわち、I240パートデータとR240パートデータとなる。I240パートデータとR240パートデータは、メモリ17のアドレス360と361に格納されている。そこで、図示しない制御部は、メモリ17のアドレス360と361に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス360と361に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D5の出力A5をALU13’に供給する。ここでは、出力A5は、遅延値D5の値が8サイクルであるので240+8=248サイクル遅延して格納されたデータとなる。すなわち、I248パートデータとR248パートデータとなる。I248パートデータとR248パートデータは、メモリ17のアドレス372と373に格納されている。そこで、図示しない制御部は、メモリ17のアドレス372と373に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス372と373に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D6の出力A6をALU13’に供給する。ここでは、出力A6は、遅延値D6の値が1サイクルであるので248+1=249サイクル遅延して格納されたデータとなる。すなわち、I249パートデータとR249パートデータとなる。I249パートデータとR249パートデータは、メモリ17のアドレス373と374に格納されている。そこで、図示しない制御部は、メモリ17のアドレス373と374に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス373と374に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D7の出力A7をALU13’に供給する。ここでは、出力A7は、遅延値D7の値が4サイクルであるので249+4=253サイクル遅延して格納されたデータとなる。すなわち、I253パートデータとR253パートデータとなる。I253パートデータとR253パートデータは、メモリ17のアドレス379と380に格納されている。そこで、図示しない制御部は、メモリ17のアドレス379と380に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス379と380に格納させる。
また、図示しない制御部は、DMFアルゴリズムに基づいて遅延値D8の出力A8をALU13’に供給する。ここでは、出力A8は、遅延値D8の値が2サイクルであるので253+2=255サイクル遅延して格納されたデータとなる。すなわち、I255パートデータとR255パートデータとなる。I255パートデータとR255パートデータは、メモリ17のアドレス382と383に格納されている。そこで、図示しない制御部は、メモリ17のアドレス382と383に格納されたデータを、シフター11を介してALU13’に供給するとともに、レジスタ27にも供給してそこに一時格納させる。次に、図示しない制御部は、ALU13’に一演算処理を実行させ、その演算結果をAcc15に一時格納させる。次に、レジスタ27に一時格納させたデータを混合回路29に出力させるとともに、Acc15に一時格納された演算結果を混合回路29に出力させる。次に、混合回路29に後述する制御によって両者を混合させ、混合結果をメモリ17に出力させる。次に、メモリ17に、混合結果を元のアドレスであるアドレス382と383に格納させる。
この後、アドレス383のI255パートデータとR255パートデータには、次の遅延値D1の入力A0が配置される。そして、次の演算処理時において、図示しない制御部は、アドレス383を新たなアドレス0と見なして上述した動作と同様の動作を実行する。
なお、上述した動作において、データが遷移するパターンは3通りあり、それぞれを図13(a)〜(c)に示す。なお、図13は2つのメモリブロックに格納されるデータの遷移過程を示す図である。図13中、無地の領域はデータが更新される部分を示しており、斜線を付した領域はデータが更新されない部分を示している。
図13(a)〜(c)に示す各パターンの遷移過程において、DSPの各構成は以下のように動作する。
図13(a)に示すパターン1において、まず図示しない制御部は、第1のメモリブロック19からアドレスnに格納されたデータを読み出すとともに、第2のメモリブロック21からアドレスn+1に格納されたデータを読み出し、シフター11とレジスタ27に出力する。なお、アドレスnに格納されたデータとはI0パートデータとR0パートデータの一部である。またアドレスn+1に格納されたデータとはR0パートデータの一部と未使用データとI1パートデータである。
シフター11は、アキュムレータ15やメモリ17から伝送されるデータを所定ビットシフトして位相の調整を行う。そして、その結果をALU13’に出力する。
図14は本実施の形態に係るALU13’の内部構成を示す図である。図14中、AとBはシフター11を介して第1及び第2のメモリブロック19、21から伝送されるデータ、Cはキャリー信号、Kは分割信号、Xは出力信号、FAは加算演算回路である。
ALU13’は、シフター11から伝送されるデータに対し、図示しない制御部から伝送される分割信号Kに基づいて、I0パートデータとR0パートデータの組合せによるデータ(以下、演算に供するデータという)と、それ以外のデータ(以下、演算に供しないデータという)とに分割し、演算に供するデータを取得する。なお、分割は分割信号Kが0のときに行われる。また演算に供するデータは図14に示す出力信号Xに相当する。
次に、ALU13’は、アキュムレータ15から、前回の、現在の演算処理のサイクルと同じサイクルにおける演算結果(以下、前回サイクルの演算結果という)を取得する。なお、前回サイクルの演算結果とは、IパートデータとRパートデータの組合せによるデータである。そして、ALU13’は、シフター11から取得した演算に供するデータとアキュムレータ15から取得した前回サイクルの演算結果を用いて、上述のDMFアルゴリズムによる演算を実行する。図13(a)では、このときの演算結果を、I0’パートデータとR0’パートデータの組合せによるデータとして示している。
ALU13’は、演算結果をアキュムレータ15に出力する。アキュムレータ15はALU13’による演算結果を格納するとともに、演算結果を第1のルート23に沿って混合回路29に出力する。また、図示しない制御部の制御に基づいて所定のタイミングで演算結果を第2のルート25に沿ってALU13’に出力する。
他方、レジスタ27は、図示しない制御部の制御に基づいて、所定のタイミングでメモリ17から伝送されたデータを第3のルート23’に沿って混合回路29に出力する。
混合回路29は、図示しない制御部の制御に基づいて、第3のルート23’に沿ってレジスタ27から伝送されるデータを8ビット毎に分割し、その中の演算に供する部分(すなわち、第1のメモリブロック19に格納されていた下位8ビットと上位8ビットのデータと、第2のメモリブロック21に格納されていた下位8ビットのデータ)を、第1のルート23に沿ってALU13’から伝送されるデータに置き換える。そして、これらに、演算に供しない部分(すなわち、第2のメモリブロック21に格納されていた上位8ビットのデータ)を付加して出力データを生成し、それらをメモリ17に出力する。
メモリ17は、混合回路29から伝送された出力データを元のアドレスに格納する。すなわち、出力データの下位16ビットを第1のメモリブロック19のアドレスnに格納し、上位16ビットを第2のメモリブロック21のアドレスn+1に格納する。
その結果、パターン1により、第1及び第2のメモリブロック19、21に格納されていたデータは、第2のメモリブロック21に格納されていた上位8ビットだけが元の値のままで、それ以外が新たな値に更新される。
図13(b)に示すパターン2において、まず図示しない制御部は、第2のメモリブロック21からアドレスn+1に格納されたデータを読み出すとともに、第1のメモリブロック19からアドレスn+2に格納されたデータを読み出し、シフター11とレジスタ27に出力する。なお、アドレスn+1に格納されたデータとはR0’パートデータの一部と未使用データとI1パートデータの一部である。またアドレスn+2に格納されたデータとはI1パートデータの一部とR1パートデータの一部と未使用データである。
シフター11は、アキュムレータ15やメモリ17から伝送されるデータを所定ビットシフトして位相の調整を行う。そして、その結果をALU13’に出力する。
ALU13’は、シフター11から伝送されるデータに対し、分割信号Kに基づいて、演算に供するデータと演算に供しないデータとに分割し、演算に供するデータを取得する。
次に、ALU13’は、アキュムレータ15から前回サイクルの演算結果を取得する。そして、ALU13’は、シフター11から取得した演算に供するデータとアキュムレータ15から取得した前回サイクルの演算結果を用いて、DMFアルゴリズムによる演算を実行する。図13(b)では、このときの演算結果を、I1’パートデータとR1’パートデータの組合せによるデータとして示している。
ALU13’は、演算結果をアキュムレータ15に出力する。アキュムレータ15はALU13’による演算結果を格納するとともに、演算結果を第1のルート23に沿って混合回路29に出力する。また、図示しない制御部の制御に基づいて所定のタイミングで演算結果を第2のルート25に沿ってALU13’に出力する。
他方、レジスタ27は、図示しない制御部の制御に基づいて、所定のタイミングでメモリ17から伝送されたデータを第3のルート23’に沿って混合回路29に出力する。
混合回路29は、図示しない制御部の制御に基づいて、第3のルート23’に沿ってレジスタ27から伝送されるデータを8ビット毎に分割し、その中の演算に供する部分(すなわち、第2のメモリブロック21に格納されていた上位8ビットと、第1のメモリブロック19に格納されていた上位8ビットと下位8ビットのデータ)を、第1のルート23に沿ってALU13’から伝送されるデータに置き換える。そして、これらに、演算に供しない部分(すなわち、第2のメモリブロック21に格納されていた下位8ビットのデータ)を付加して出力データを生成し、それらをメモリ17に出力する。
メモリ17は、混合回路29から伝送される出力データを元のアドレスに格納する。すなわち、出力データの下位16ビットを第2のメモリブロック21のアドレスn+1に格納し、上位16ビットを第1のメモリブロック19のアドレスn+2に格納する。
その結果、パターン2により、第1及び第2のメモリブロック19、21に格納されていたデータは、第2のメモリブロック21に格納されていた下位8ビットだけが元の値のままで、それ以外が新たな値に更新される。
図13(c)に示すパターン3において、まず図示しない制御部は、第2のメモリブロック21からアドレスn+3に格納されたデータを読み出すとともに、第1のメモリブロック19からアドレスn+4に格納されたデータを読み出し、シフター11とレジスタ27に出力する。なお、アドレスn+3に格納されたデータとはI2パートデータとR2パートデータの一部である。またアドレスn+4に格納されたデータとはR2パートデータの一部と未使用データとI3パートデータである。
シフター11は、アキュムレータ15やメモリ17から伝送されるデータを所定ビットシフトして位相の調整を行う。そして、その結果をALU13’に出力する。
ALU13’は、シフター11から伝送されるデータに対し、分割信号Kに基づいて、演算に供するデータと演算に供しないデータとに分割し、演算に供するデータを取得する。
次に、ALU13’は、アキュムレータ15から前回サイクルの演算結果を取得する。そして、ALU13’は、シフター11から取得した演算に供するデータとアキュムレータ15から取得した前回サイクルの演算結果を用いて、DMFアルゴリズムによる演算を実行する。図13(c)では、このときの演算結果を、I2’パートデータとR2’パートデータの組合せによるデータとして示している。
ALU13’は、演算結果をアキュムレータ15に出力する。アキュムレータ15はALU13’による演算結果を格納するとともに、演算結果を第1のルート23に沿って混合回路29に出力する。また、図示しない制御部の制御に基づいて所定のタイミングで演算結果を第2のルート25に沿ってALU13’に出力する。
他方、レジスタ27は、図示しない制御部の制御に基づいて、所定のタイミングでメモリ17から伝送されたデータを第3のルート23’に沿って混合回路29に出力する。
混合回路29は、図示しない制御部の制御に基づいて、第3のルート23’に沿ってレジスタ27から伝送されるデータを8ビット毎に分割し、その中の演算に供する部分(すなわち、第2のメモリブロック21に格納されていた下位8ビットと上位8ビットと、第1のメモリブロック19に格納されていた下位8ビットのデータ)を、第1のルート23に沿ってALU13’から伝送されるデータに置き換える。そして、これらに、演算に供しない部分(すなわち、第1のメモリブロック19に格納されていた上位8ビットのデータ)を付加して出力データを生成し、それらをメモリ17に出力する。
メモリ17は、混合回路29から伝送される出力データを元のアドレスに格納する。すなわち、出力データの下位16ビットを第2のメモリブロック21のアドレスn+3に格納し、上位16ビットを第1のメモリブロック19のアドレスn+4に格納する。
その結果、パターン3により、第1及び第2のメモリブロック19、21に格納されていたデータは、第1のメモリブロック19に格納されていた上位8ビットだけが元の値のままで、それ以外が新たな値に更新される。
図15は混合回路29における出力データの遷移を示す図である。図15中、左側の上段のAcc[23:0],Reg[7:0]と左側の下段のReg[15:8],Acc[23:0]は、混合回路29がAcc15とレジスタ27からの出力を混合することによって生成したデータである。また、右側のOut[31:0]は、混合回路29がメモリ17から読み出されたデータの元のアドレスに応じて左側の上段のAcc[23:0],Reg[7:0]または左側の下段のReg[15:8],Acc[23:0]のいずれかを選択してメモリ17に出力する出力データである。
ここで、Acc[x:y]はアキュムレータ15からのxビット目からyビット目の出力データを表現しており、Reg[x:y]はレジスタ27からのxビット目からyビット目の出力データを表現している。例えばAcc[23:0],Reg[7:0]は、アキュムレータ15からの0ビット目〜23ビット目までの24ビット幅の出力データとレジスタ27からの0ビット目〜7ビット目までの8ビット幅の出力データの組合せを表現している。またOut[x:y]は混合回路29からのxビット目からyビット目の出力データを表現している。例えばOut[31:0]は混合回路29からの0ビット目〜31ビット目までの32ビット幅の出力データを表現している。
なお、図示しない制御部は、一演算処理毎に、アドレス383のI255パートデータとR255パートデータに、次の遅延値D1の入力A0を配置し、次の演算処理時において、アドレス383を新たなアドレス0と見なして処理を実行する。これは、メモリ17のアドレス0とアドレス383がリング状に繋がっていると想定した場合に、基準点を1つ左に進めて処理することと同様になる。そのため、DSPは、簡易な制御で、演算に用いるデータを好適に出力することができるようになる。
このような制御について、図16を用いて以下に詳述する。図16はサイクリックなデータの配置を示す図である。図16中、斜線を付した領域はデータの入力箇所を示している。
図示しない制御部は、メモリ17のDMFアルゴリズムによって定まる所定のアドレスに格納されたデータを、遅延値D1、D2、D3、D4、D5、D6、D7、D8の出力データとしてサイクリックに用いる。そして、一演算処理毎に、これらのデータは、各遅延値D1〜D8の出力データとして、上述のパターン1〜3によって演算された演算結果に更新される。なお、最終の遅延値D8の出力データは、次の演算処理時において、先頭の遅延値D0の入力データとなる。このようにして、図22及び図23に示すDMFアルゴリズム1サイクルの演算処理が実行される。すると、図示しない制御部は、図16に示す基準点の位置を所定量(ここでは1個)だけ左回りに移動させて、次の演算処理を実行する。このときの演算処理は、上述した動作と同様の動作となる。このようにして、図示しない制御部は、メモリ17から各遅延値に対応する入出力を次々と容易に読み出すことができる。このような機能は、DSPに標準的に設けられているモデュロアドレッシングを利用することにより簡単に実現できる。
以下に、DSP内部における各構成の動作について説明する。なお、ALU13’は、分割信号Kやレジスタ値に基づいて、キャリー信号Cを任意のビット位置で切断可能としている。本実施の形態では、ALU13’は、10ビット幅で切断している。
メモリ17に格納されたデータの構成が図13(a)に示すパターン1の場合、DSP内部における各構成は以下のように動作する。
まず、図示しない制御部は、第1のメモリブロック19と第2のメモリブロック21の所定のアドレスから合計32ビット幅のデータを読み出し、シフター11とレジスタ27に出力する。シフター11は、データをシフトせずに、そのままALU13’に出力する。また、レジスタ27は、第1のメモリブロック19と第2のメモリブロック21の所定のアドレスから読み出されたデータを一時格納する。
この後、ALU13’は、演算処理を実行して、その演算結果をAcc0とAcc1に出力する。
Acc0とAcc1は、演算結果を一時格納した後、それをシフター11に出力する。シフター11は、ALU13’を介して演算結果をそのままAcc0とAcc1に出力する。Acc0とAcc1は、再び演算結果を一時格納する。
この後、レジスタ27は格納していたデータを混合回路29に出力するとともに、Acc0とAcc1はALU13’による演算結果を混合回路29に出力する。
次に、混合回路29は、最下位ビット(LSB)側の8ビットがレジスタ27に格納されていたデータとなるように、レジスタ27に格納されていたデータとAcc0とAcc1に格納されていたALU13’による演算結果とを混合し、その混合結果をメモリ17に出力する。メモリ17は、混合結果を第1のメモリブロック19と第2のメモリブロック21の元のアドレスに格納する。
メモリ17に格納されたデータの構成が図13(b)に示すパターン2の場合、DSP内部における各構成は以下のように動作する。
まず、図示しない制御部は、第2のメモリブロック21と第1のメモリブロック19の所定のアドレスから合計32ビット幅のデータを読み出し、シフター11とレジスタ27に出力する。シフター11は、データを右に8ビットシフトしてALU13’に出力する。また、レジスタ27は、第2のメモリブロック21と第1のメモリブロック19の所定のアドレスから読み出されたデータを一時格納する。
この後、ALU13’は、演算処理を実行して、その演算結果をAcc0とAcc1に出力する。Acc0とAcc1は、演算結果を一時格納した後、それをシフター11に出力する。シフター11は、演算結果を左に8ビットシフトしてALU13’を介してAcc0とAcc1に出力する。Acc0とAcc1は、左に8ビットシフトされたALU13’による演算結果を一時格納する。
この後、レジスタ27は格納していたデータを混合回路29に出力するとともに、Acc0とAcc1は左に8ビットシフトされたALU13’による演算結果を混合回路29に出力する。
次に、混合回路29は、最上位ビット(MSB)側の8ビットがレジスタ27に格納されていたデータとなるように、レジスタ27に格納されていたデータとAcc0とAcc1に格納されていたALU13’による演算結果とを混合し、その混合結果をメモリ17に出力する。メモリ17は、混合結果を第2のメモリブロック21と第1のメモリブロック19の元のアドレスに格納する。
メモリ17に格納されたデータの構成が図13(c)に示すパターン3の場合、DSP内部における各構成は以下のように動作する。
まず、図示しない制御部は、第2のメモリブロック21と第1のメモリブロック19の所定のアドレスから合計32ビット幅のデータを読み出し、シフター11とレジスタ27に出力する。シフター11は、データをシフトせずに、そのままALU13’に出力する。また、レジスタ27は、第2のメモリブロック21と第1のメモリブロック19の所定のアドレスから読み出されたデータを一時格納する。
この後、ALU13’は、演算処理を実行して、その演算結果をAcc0とAcc1に出力する。Acc0とAcc1は、演算結果を一時格納した後、それをシフター11に出力する。シフター11は、ALU13’を介して演算結果をそのままAcc0とAcc1に出力する。Acc0とAcc1は、再び演算結果を一時格納する。
この後、レジスタ27は格納していたデータを混合回路29に出力するとともに、Acc0とAcc1はALU13’による演算結果を混合回路29に出力する。
次に、混合回路29は、最下位ビット(LSB)側の8ビットがレジスタ27に格納されていたデータとなるように、レジスタ27に格納されていたデータとAcc0とAcc1に格納されていたALU13’による演算結果とを混合し、その混合結果をメモリ17に出力する。メモリ17は、混合結果を第2のメモリブロック21と第1のメモリブロック19の元のアドレスに格納する。
以下に、ALU13’内部における演算過程を説明する。図17と図18はDMFアルゴリズムの概要を示す図である。図17と図18において括弧でくくる部分の演算過程を一例として詳述する。
まず、図示しない制御部は、第1のメモリブロック19と第2のメモリブロック21のアドレス0と1から合計32ビット幅のデータを読み出し、シフター11とレジスタ27に出力する。シフター11は、データをシフトせずに、そのままALU13’に出力する。また、レジスタ27は、第1のメモリブロック19と第2のメモリブロック21のアドレス0と1から読み出されたデータを一時格納する。この後、ALU13’は、演算処理を実行する。
その際に、まず、図示しない制御部がデータの構成に基づいて分割信号Kを生成し、ALU13’は分割信号Kに基づいて第1のメモリブロック19と第2のメモリブロック21のアドレス0と1から読み出されたデータを分割して入力A0を取得する。次に、ALU13’は、図17に示すように、A1、B1、C1、C1’を算出する。これらの値は、図24〜図27に示す通りである。このようにして算出された演算結果は、図17に示すDMFアルゴリズムの概要を示す図の上の段によるもの(例えばC1)がアキュムレータ15のAcc1に格納され、下の段によるもの(例えばB1、C1’)がアキュムレータ15のAcc0に格納される。このようにして演算結果は、アキュムレータ15のAcc0及びAcc1に格納される。
特に、演算結果C1は、アキュムレータ15のAcc0及びAcc1に格納された遅延値D1に対応するデータの最後に上書きで書き込まれる。そして、演算結果C1は、データD1とデータD2が連続しているため、次の遅延値D2の入力データとなる。
なお、第1のメモリブロック19と第2のメモリブロック21のアドレス0と1から読み出されたデータのうち、演算に供しない部分は、レジスタ27に格納されている。この部分は、混合回路29によって演算結果と混合される。混合回路29は、その混合結果をメモリ17に出力し、第1のメモリブロック19と第2のメモリブロック21のアドレス0と1に格納させる。そのため、本実施の形態は、演算に供しない部分を演算するための時間を必要とせずに、簡易に出力データを生成することができる。また、上書き時に未使用データをそのまま書き出すこともできる。
次に、ALU13’は、図18に示すように、A2、B2、C2、C2’を算出する。これらの値は、図24〜図27に示す通りである。このようにして算出された演算結果は、図18に示すDMFアルゴリズムの概要を示す図の上の段によるもの(例えばC2)がアキュムレータ15のAcc1に格納され、下の段によるもの(例えばB2、C2’)がアキュムレータ15のAcc0に格納される。このようにして演算結果は、アキュムレータ15のAcc0及びAcc1に格納される。
特に、演算結果C2は、アキュムレータ15のAcc0及びAcc1に格納された遅延値D2に対応するデータの最後に上書きで書き込まれる。そして、演算結果C2は、データD2とデータD3が連続しているため、次の遅延値D3の入力データとなる。
このようにして、ALU13’は、同様の演算を連続して実行し、最終的な演算結果を得る。
その後、図示しない制御部は、図16に示す基準点の位置を、1個だけ左回りに移動させ、メモリ17に格納するデータをサイクリックに1個前進した形にして、次の演算処理を実行する。
以上詳細に説明したように、本発明は、所定ビット幅のレジスタ27と混合回路29を設けるだけで、DMF処理における使用メモリ量を低減できるという効果を有する。そのため、例えば第3世代携帯電話に用いられるDSPに適用した場合に、メモリ量を、510ワードから384ワードに、すなわち、126ワード分低減をさせることができる。
しかも、本発明は、大幅な回路の増大がないので、極めて少ないコストでこのような効果を達成できる。
本発明は上述の実施の形態に限定されることなく、本発明の要旨を逸脱しない範囲で種々の応用及び変形が考えられる。例えば、本実施の形態においては、メモリ17を32ビット幅のメモリによって構成してもよい。また、本発明は、DSPだけでなく、9〜12ビット幅を有するデータの処理を行う機器に対しても適用することができる。