(57)【特許請求の範囲】
【請求項１】
第１乃至第３のソースレジスタと、
前記第１乃至第３のソースレジスタから供給されるデータを用いてＩＩＲフィルタ演算を実行し、１サンプル分のフィルタ演算済みデータ及び次の前記ＩＩＲフィルタ演算に使用するための引継ぎデータを出力するフィルタ演算回路とを備え、
前記第１のソースレジスタは、前記ＩＩＲフィルタ演算に使用される複数のフィルタ係数を前記フィルタ演算回路に供給し、
前記第２のソースレジスタは、過去の前記引継ぎデータを前記フィルタ演算回路に供給するとともに、前記フィルタ演算回路より出力される新たな前記引継ぎデータによって上書き更新され、
前記第３のソースレジスタは、複数サンプル分の被フィルタ演算データを保持可能であって、前記被フィルタ演算データを前記フィルタ演算回路に供給するとともに、
前記第３のソースレジスタの少なくとも１サンプル分の記憶領域は、前記フィルタ演算回路より出力される前記フィルタ演算済みデータによって上書き更新され、
前記第３のソースレジスタは、保持データの循環シフトが可能であり、
前記フィルタ演算回路による前記ＩＩＲフィルタ演算及びシフト幅を１サンプル分とした前記第３のソースレジスタの循環シフトの反復実行によって、前記フィルタ演算済みデータが前記第３のソースレジスタに順次格納され、
前記第３のソースレジスタが格納可能な最大サンプル数がＮ個である場合に、前記ＩＩＲフィルタ演算及び前記循環シフトがＭ回実行される毎に、前記第３のソースレジスタに保持されたデータが外部メモリに出力される、ただしＭはＮ以下の正の整数である、
マイクロプロセッサ。
【請求項２】
前記フィルタ演算回路による演算は、フィルタ演算命令に応じて実行され、前記第１乃至第３のソースレジスタは、前記フィルタ演算命令のオペランドによって指定される、請求項１に記載のマイクロプロセッサ。
【請求項３】
循環シフト命令に応じて、シフト幅を１サンプル分とした前記第３のソースレジスタの循環シフトが実行される、請求項１又は２に記載のマイクロプロセッサ。
【請求項４】
ｎサンプル目の前記被フィルタ演算データをＸ［ｎ］、前記引継ぎデータをＰ［ｎ］、前記フィルタ演算済みデータをＹ［ｎ］、並びに前記フィルタ係数をａｋ及びｂｋとした場合に、前記ＩＩＲフィルタ演算が次式により表される、請求項１乃至３のいずれか１項に記載のマイクロプロセッサ。
【数１】
0005059508.tif 000004
【請求項５】
前記引継ぎデータは、過去の前記被フィルタ演算データ及び前記フィルタ演算済みデータを含む請求項１乃至４のいずれか１項に記載のマイクロプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＩＩＲフィルタ演算を実行するマイクロプロセッサに関する。
【背景技術】
【０００２】
デジタル信号処理に特化して設計されたデジタル信号プロセッサ（DSP：Digital Signal Processor）等のマイクロプロセッサを用いてＩＩＲ（Infinite Impulse Response）フィルタ演算を実行することが行われている。
【０００３】
ＩＩＲフィルタの表現形式として様々なものが提案されているが、代表的な形式は直接型I（Direct form I）及び直接型II（Direct form II）である。図１５は直接型Iで表した２次ＩＩＲフィルタ７を示す図である。２次ＩＩＲフィルタ７は、フィードフォワード部分７２、フィードバック部分７１の順に直列接続された構成である。図１５において、７１１、７１２、７２１及び７２２は、入力データを１サンプル分遅延させる遅延回路（記憶素子）である。７１３、７１４、７２３及び７２４は、乗算器である。ａ１、ａ２、ｂ１及びｂ２は、乗算器７１３、７１４、７２３及び７２４に適用されるフィルタ係数である。また、７１５及び７２５は、入力データを算術加算する加算器である。なお、"サンプル"とは、アナログ信号を所定の時間間隔でサンプリングすることでデジタル化されたデジタルデータ系列において、１回のサンプリングで得られるデジタルデータを意味する。
【０００４】
ｎサンプル目の被フィルタ演算データをＸ［ｎ］、フィルタ演算済みデータをＹ［ｎ］とした場合に、図１５のＩＩＲフィルタ７によるフィルタ演算は、以下の（１）式により表される。
【数２】
0005059508.tif 000002
【０００５】
一方、図１６は直接型IIで表した２次ＩＩＲフィルタ８を示す図である。直接型IIの２次ＩＩＲフィルタ８は、直接型Iに比べてフィードバック部分とフィードフォワード部分を転置した構成である。図１６において、８１１及び８１２は、入力データを１サンプル分遅延させる遅延回路（記憶素子）である。８１３乃至８１６は、乗算器である。ａ１、ａ２、ｂ１及びｂ２は、乗算器８１３乃至８１６に適用されるフィルタ係数である。また、８１７及び８１８は、入力データを算術加算する加算器である。
【０００６】
ｎサンプル目の被フィルタ演算データをＸ［ｎ］、フィルタ演算済みデータをＹ［ｎ］、被フィルタ演算データＸ［ｎ＋１］以降に対する新たなフィルタ演算に引き継がれる中間生成データをＰ［ｎ］とした場合に、図１６のＩＩＲフィルタ８によるフィルタ演算は、以下の（２）及び（３）式により表される。
【数３】
0005059508.tif 000003
【０００７】
図１５及び１６に示した２次ＩＩＲフィルタ７及び８は、バイカッド(biquad)フィルタと呼ばれている。高次のＩＩＲフィルタを実現する際には、バイカッドフィルタを直列に接続した構成が一般的に使用されている。例えば、図１７に示すように、４つの直接型IIのバイカッドフィルタを直列に接続することで８次のＩＩＲフィルタ９を実現できる。図１７において、８１１、８１２、８２１、８２２、８３１、８３２、８４１及び８４２は、入力データを１サンプル分遅延させる遅延回路（記憶素子）である。８１３乃至８１６、８２３乃至８２６、８３３乃至８３６、並びに８４３乃至８４６は、乗算器である。
【０００８】
ａ１１、ａ１２、ｂ１１及びｂ１２は、乗算器８１３乃至８１６に適用されるフィルタ係数である。同様に、ａ２１、ａ２２、ｂ２１及びｂ２２は、乗算器８２３乃至８２６に適用されるフィルタ係数であり、ａ３１、ａ３２、ｂ３１及びｂ３２は、乗算器８３３乃至８３６に適用されるフィルタ係数であり、ａ４１、ａ４２、ｂ４１及びｂ４２は、乗算器８４３乃至８４６に適用されるフィルタ係数である。
【０００９】
８１７、８１８、８２７、８２８、８３７、８３８、８４７及び８４８は、入力データを算術加算する加算器である。また、Ａ［ｎ］は、１段目のバイカッドフィルタ９１の出力データを表している。同様に、Ｂ［ｎ］は２段目のバイカッドフィルタ９２の出力データを表し、Ｃ［ｎ］は３段目のバイカッドフィルタ９３の出力データを表している。
【００１０】
一般的に、ＩＩＲフィルタ演算をＤＳＰに実行させるプログラム（以下、ＩＩＲフィルタ演算プログラムと呼ぶ）は、ループ処理により表される。ＩＩＲフィルタ演算プログラムのループ処理は、例えば、１サンプル分のＩＩＲフィルタ処理を実行するための命令群をループ単位とするループ処理として記述される。また、他の例は、バイカッドフィルタ等の直列接続の単位を基本ブロックとした場合に、基本ブロック処理を実行する命令群をループ単位とするループ処理として記述される。なお、基本ブロックは、バイカッドフィルタ（２次フィルタ）に限られず、例えば３次以上のＩＩＲフィルタとされる場合もある。
【００１１】
例えば、非特許文献１の第４章"Signal Processing"の９〜１１頁には、２つの直接型IIのバイカッドフィルタを直列接続して構成される４次ＩＩＲフィルタの演算処理を、マイクロプロセッサに実行させるためのプログラム例が示されている。
【非特許文献１】TMS320C54x DSP Reference Set Volume 4: Applications Guide、[online]、1996年10月、4-9〜4-11頁、Texas Instruments Inc.、[2007年7月10日検索]、インターネット＜URL: http://focus.ti.com/lit/ug/spru173/spru173.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【００１２】
ＩＩＲフィルタ演算は、連続的に入力されるサンプルに対して繰り返し実行されることが多い。例えば、マイクやカメラ等のセンサにより取得された音声信号及び画像信号や通信信号に対するフィルタ処理を行う場合等である。また、ＩＩＲフィルタは、いわゆるフィードバックを有する再帰形フィルタである。したがって、次々と入力されるサンプルに対してＩＩＲフィルタ演算を繰り返し実行するためには、過去のフィルタ演算により生成されたデータを次の演算に効率よく入力データとして与える必要がある。
【００１３】
本願の発明者等は、マイクロプロセッサにＩＩＲフィルタ演算を実行させる場合に、ＩＩＲフィルタ演算の本質部分である算術演算に加えて、データメモリからアキュムレータ（汎用レジスタ）へのデータロード処理及びアキュムレータからデータメモリへのデータストア処理や、データメモリ内でデータの格納領域を移動する処理等の冗長な処理が多発するために、ＩＩＲフィルタ演算の高速化が妨げられるという課題を見出した。
【課題を解決するための手段】
【００１４】
本発明の第１の態様は、ＩＩＲフィルタ演算を実行するマイクロプロセッサである。当該マイクロプロセッサは、第１乃至第３のソースレジスタと、前記第１乃至第３のソースレジスタから供給されるデータを用いてＩＩＲフィルタ演算を実行し、１サンプル分のフィルタ演算済みデータ及び次の前記ＩＩＲフィルタ演算に使用するための引継ぎデータを出力するフィルタ演算回路とを有する。ここで、前記第１のソースレジスタは、前記ＩＩＲフィルタ演算に使用される複数のフィルタ係数を前記フィルタ演算回路に供給するレジスタであり、前記第２のソースレジスタは、過去の前記引継ぎデータを前記フィルタ演算回路に供給するとともに、前記フィルタ演算回路より出力される新たな前記引継ぎデータによって上書き更新されるレジスタである。また、前記第３のソースレジスタは、複数サンプル分の被フィルタ演算データを保持可能であって、前記被フィルタ演算データを前記フィルタ演算回路に供給するレジスタである。さらに、前記第３のソースレジスタの少なくとも１サンプル分の記憶領域は、前記フィルタ演算回路より出力される前記フィルタ演算済みデータによって上書き更新される。
【００１５】
上述したように、前記第２のソースレジスタは、前記フィルタ演算回路に対する引継ぎデータの供給元であるとともに、前記フィルタ演算回路から出力される新たな引継ぎデータによって上書き更新されるデータ出力先でもある。つまり、前記第２のソースレジスタが、前記フィルタ演算回路からの引継ぎデータの出力先と前記フィルタ演算回路に対する引継ぎデータの入力元とを兼ねている。このため、前記フィルタ演算回路から出力された引継ぎデータを新たに前記フィルタ演算回路に入力するための冗長なデータ移動処理が不要である。
【００１６】
さらに、前記第３のソースレジスタは、複数サンプル分の被フィルタ演算データを保持可能であるとともに、前記フィルタ演算回路に対する被フィルタ演算データの入力元と前記フィルタ演算回路からのフィルタ演算済みデータの出力先とを兼ねている。これにより、データメモリから被フィルタ演算データを取得するため、及び、データメモリにフィルタ演算済みデータを格納するために要するデータメモリのアクセス回数を削減できる。また、ＩＩＲフィルタ演算の実行に必要なアキュムレータ数又はサイズを削減可能である。
【００１７】
このように、前記第２及び第３のソースレジスタを、前記フィルタ演算回路のデータ入力元及び出力先として兼用することにより、冗長なデータ移動命令、及びデータメモリへのアクセス命令の実行回数を削減できる。つまり、前記第１の態様にかかるマイクロプロセッサは、前記第１乃至第３のソースレジスタと前記フィルタ演算回路の間でのデータ入出力によって、ＩＩＲフィルタ演算の基本ブロック処理の繰り返しを簡潔に実行できる。このため、前記第１の態様にかかるマイクロプロセッサは、ＩＩＲフィルタ演算を高速に実行することができる。
【発明の効果】
【００１８】
本発明により、ＩＩＲフィルタ演算を高速に実行可能なマイクロプロセッサを提供することができる。
【発明を実施するための最良の形態】
【００１９】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００２０】
発明の実施の形態１．
本実施の形態にかかるマイクロプロセッサ１を図１に示す。マイクロプロセッサ１は、アドレスバス５２及びデータバス５３を介して命令メモリ５０及びデータメモリ５１と接続されている。命令メモリ５０は、マイクロプロセッサ１により実行される命令列を格納するメモリである。また、データメモリ５１は、マイクロプロセッサ１に入力されるデータや、マイクロプロセッサ１によって処理されたデータが格納されるメモリである。なお、図１では、論理的な構成単位である命令メモリ５０及びデータメモリ５１を示しているが、これらはそれぞれ、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）若しくはフラッシュメモリ、又はこれらの組合せ等により構成される。
【００２１】
実行制御部１０は、命令メモリ５０から命令をフェッチし、フェッチした命令をデコードする。より具体的に述べると、実行制御部１０は、フェッチした命令の命令種別を判定し、命令オペランドを取得し、命令デコードにより得られたこれらの情報に応じて、後述するプログラムカウンタ（ＰＣ）１１、汎用レジスタファイル１２、フィルタ演算回路１３に対してデータ若しくは制御信号又はこれら両方を出力する。
【００２２】
プログラムカウンタ１１は、実行制御部１０によるフェッチ対象命令のアドレスが保持されるレジスタである。プログラムカウンタ１１の値は実行制御部１０によって更新される。
【００２３】
汎用レジスタファイル１２は、複数の汎用レジスタの集合である。本実施の形態では、図１に示すように、汎用レジスタファイル１２が１６本の汎用レジスタＲ０乃至Ｒ１５を有するものとして説明する。また、汎用レジスタＲ０乃至Ｒ１５は、それぞれ６４ビットのレジスタとする。なお、ここでの汎用レジスタＲ０乃至１５の数並びにレジスタ長が一例にすぎないことはもちろんである。汎用レジスタＲ０乃至Ｒ１５は、フィルタ演算回路１３の入力データ及び出力データを格納するアキュムレータ、あるいはメモリアクセス時のアドレス指定を行うためのアドレスレジスタなど、様々な用途に使用可能なレジスタである。なお、以下では、汎用レジスタＲ０乃至Ｒ１５に保持される６４ビットデータのうち、最下位ビットＬＳＢ（Least Significant Bit）を含む下位１６ビットを「最下位の１６ビット」呼ぶ。また、汎用レジスタＲ０乃至Ｒ１５に保持される６４ビットデータのうち、最上位ビットＭＳＢ（Most Significant Bit）を含む上位１６ビットを「最上位の１６ビット」呼ぶ。
【００２４】
フィルタ演算回路１３は、実行制御部１０によってＩＩＲフィルタ演算命令がデコードされたことに応じてＩＩＲフィルタ演算を実行する演算回路である。フィルタ演算回路１３は、汎用レジスタＲ０乃至Ｒ１５のうちの３本の汎用レジスタから供給されるデータを用いてＩＩＲフィルタ演算を実行し、１サンプル分のフィルタ演算済みデータ及び次のＩＩＲフィルタ演算に使用するための引継ぎデータを出力する。
【００２５】
フィルタ演算回路１３へのデータ供給元である３本のレジスタには、フィルタ係数群、過去のフィルタ演算からの引継ぎデータ、及び被フィルタ演算データが保持されている。また、フィルタ演算回路１３の出力データの出力先は、データ供給元の３本の汎用レジスタのうちの２本である。具体的には、１サンプル分のフィルタ演算済みデータは、被フィルタ演算データが保持されていたレジスタに上書きされる。一方、フィルタ演算回路１３から出力される引継ぎデータは、過去のフィルタ演算からの引継ぎデータが保持されていたレジスタに上書きされる。なお、フィルタ演算回路１３のデータ入力元レジスタ及び出力先レジスタとされる３本のレジスタは、ＩＩＲフィルタ演算命令のオペランドに基づいて実行制御部１０によって決定される。
【００２６】
[実施例１]
一例として、図１６に示した直接型IIの２次ＩＩＲフィルタ８の演算処理をフィルタ演算回路１３により実行する場合における入出力データの具体例を図２に示す。図２は、２次ＩＩＲフィルタ８における被フィルタ演算データＸ［ｎ］、フィルタ演算済みデータＹ［ｎ］、中間生成データ（引継ぎデータ）Ｐ［ｎ］、並びにフィルタ係数ａ１、ａ２、ｂ１及びｂ２のデータ長を全て１６ビットとし、ｎ＝４である場合の入出力データを示したものである。
【００２７】
図２において、フィルタ係数ａ１、ａ２、ｂ１及びｂ２をフィルタ演算回路１３に供給する第１の汎用レジスタは、レジスタＲ０である。６４ビット長とされた本実施の形態のレジスタＲ０には、４つのフィルタ係数ａ１、ａ２、ｂ１及びｂ２が格納される。なお、レジスタ長に比べて供給すべきフィルタ係数の総データ量が大きく、１つの汎用レジスタに全てのフィルタ係数が格納できない場合には、複数の汎用レジスタに分割して格納すればよい。
【００２８】
図２において、直接型IIのＩＩＲフィルタ８における引継ぎデータである中間生成データＰ［ｎ−１］及びＰ［ｎ−２」をフィルタ演算回路１３に供給する第２の汎用レジスタは、レジスタＲ１である。レジスタＲ１には、２次フィルタで必要となる２サンプル前までの中間生成データＰ［３］及びＰ［２］が格納されている。なお、レジスタＲ１にＰ［３］及びＰ［２］を２つずつ格納しているのは、演算の便宜のためである。
【００２９】
図２において、被フィルタ演算データをフィルタ演算回路１３に供給する第３の汎用レジスタは、レジスタＲ２である。レジスタＲ２には、Ｘ［４］を最下位の１６ビットとする合計４つの被フィルタ演算データが格納されている。なお、Ｘ［４］乃至Ｘ［７］は、ＩＩＲフィルタ演算の実行に先立って、データメモリ５１から読み出されてレジスタＲ２に格納される。
【００３０】
上述したレジスタＲ０乃至Ｒ２の保持データを入力データとして、フィルタ演算回路１３がＩＩＲフィルタ演算を行った結果は、レジスタＲ１及びＲ２に出力される。具体的には、レジスタＲ１は、中間生成データＰ［４］及びＰ［３］により上書きされる。また、被フィルタ演算データＸ［４］が格納されていたレジスタＲ２の最下位の１６ビット（上書き領域１２１）が、フィルタ演算済みデータＹ［４］により上書きされる。
【００３１】
ここで、直接型IIの２次ＩＩＲフィルタ８の演算処理を実行するフィルタ演算回路１３の構成例について説明する。図３は、図２のフィルタ演算回路１３の構成例を示すブロック図である。図３の構成例は、パイプライン構造を採用しており、２次ＩＩＲフィルタの１サンプル分の演算を３ステージに分割されたパイプラインにより処理する。なお、図３に示すフィルタ演算回路１３の構成が一例に過ぎないことはもちろんあり、当業者であれば、図３及び後述する説明並びに技術常識に基づいて様々な変形が可能である。
【００３２】
図３において、乗算器１３１１は、ＩＮ２端子に供給されるフィルタ係数ｂ１とＩＮ１端子に供給される中間生成データＰ［３］を乗算する。乗算器１３１１の出力は、パイプラインラッチ１３２１に保持される。つまり、乗算器１３１１は、図１６の乗算器８１５に対応する。これと同様に、第１ステージのその他の乗算器１３１２乃至１３１４は、図１６の乗算器８１６、８１３及び８１４にそれぞれ対応する。乗算器１３１２乃至１３１４による演算結果は、パイプラインラッチ１３２２乃至１３２４に保持される。また、パイプラインラッチ１３２５及び１３２６は、中間生成データＰ［３］をラッチする。
【００３３】
次に、図３の第２ステージにおいて、加算器１３３１は、パイプラインラッチ１３２１及び１３２２からデータを入力して加算を行う。つまり、加算器１３３１の演算結果は、上述した（３）式の右辺第２項に相当する。また、加算器１３３２は、パイプラインラッチ１３２３及び１３２４からデータを入力して加算を行う。つまり、加算器１３３２の演算結果は、上述した（２）式の右辺第２項に相当する。さらに、加算器１３３３は、上述の２つの加算器１３３１及び１３３２の出力を加算する。パイプラインラッチ１３４１乃至１３４４は、加算器１３３２及び１３３３の出力、並びにパイプラインラッチ１３２５及び１３２６の出力をラッチする。
【００３４】
次に図３の第３ステージにおいて、変換器１３５１は、ＩＮ２端子に供給される被フィルタ演算データＸ［４］のデータ長を１６ビットから３２ビットに変換する。この変換は、フィルタ演算回路１３内において各数値を３２ビットの固有小数点数で扱うために行うものである。
【００３５】
加算器１３５２は、３２ビット長とされたＸ［４］とパイプラインラッチ１３４２に保持されたデータを加算する。加算器１３５２の出力は、変換器１３５４によって１６ビット長とされた後にフィルタ演算済みデータＹ［４］として出力される。上述した通り、Ｙ［４］は、Ｘ［４］が格納されていた記憶領域、具体的には、レジスタＲ２の最下位の１６ビットに格納される。
【００３６】
加算器１３５３は、３２ビット長とされたＸ［４］とパイプラインラッチ１３４２に保持されたデータを加算する。加算器１３５３の出力は、変換器１３５５によって１６ビット長とされた後に中間生成データＰ［４］としてＯＵＴ１端子に出力される。上述した通り、Ｐ［４］は、レジスタＲ１のＰ［３］が格納されていた記憶領域に上書きされる。
【００３７】
続いて以下では、図２のフィルタ演算回路１３を含むマイクロプロセッサ１に、２次ＩＩＲフィルタ演算を繰り返し実行させるためのプログラム例を紹介する。図４は、２次ＩＩＲフィルタ演算の繰り返し実行に関するプログラムの主要部分を示したものである。なお説明の便宜のために、図４では、被フィルタ演算データＸ［ｎ］の読み出し元アドレス（ｍｅｍ１）及びフィルタ演算済みデータＹ［ｎ］の格納先アドレス（ｍｅｍ２）をインクリメントする命令等の記載を省略している。
【００３８】
図４の１行目は、単なるコメント行である。図４の２行目のＭＯＶ命令はデータ転送命令であり、第１オペランドはデータの転送先を示し、第２オペランドはデータの転送元を示している。つまり、図４の２行目は、４つの被フィルタ演算データＸ［ｎ］〜Ｘ［ｎ＋３］をデータメモリ５１からレジスタＲ２にロードするための命令である。
【００３９】
図４の３行目のＭＯＶ命令は、第１オペランドに指定されたレジスタＲ９に、第２オペランドで指定された即値を設定する処理を示している。ここで、レジスタＲ９に設定される値は、後段のループ処理のループ回数を示す初期値である。図４の例では、４回のループを行うために、レジスタＲ９に"３ｈ"が設定される。
【００４０】
図４の４行目は、ループ処理の先頭を示すコメント行である。図４の５〜９行目は、ＩＩＲフィルタ演算を実行するループ処理を示している。
【００４１】
図４の５行目のＩＩＲＳＵＭ命令は、フィルタ演算回路１３によるＩＩＲフィルタ演算の実行を指示する命令である。具体的に述べると、ＩＩＲＳＵＭ命令の第１オペランドには、フィルタ係数ａ１、ａ２、ｂ１及びｂ２をフィルタ演算回路１３に供給する第１の汎用レジスタが指定される。ＩＩＲＳＵＭ命令の第２オペランドには、中間生成データＰ［ｎ−１］及びＰ［ｎ−２］をフィルタ演算回路１３に供給する第２の汎用レジスタが指定される。また、ＩＩＲＳＵＭ命令の第３オペランドには、被フィルタ演算データＸ［ｎ］をフィルタ演算回路１３に供給する第３の汎用レジスタが指定される。図２に対応させるため、図４では、第１の汎用レジスタをレジスタＲ０、第２の汎用レジスタをレジスタＲ１、第３の汎用レジスタをレジスタＲ２としている。
【００４２】
なお、上述したように、ＩＩＲＳＵＭ命令の実行により得られる新たな中間生成データＰ［ｎ］及びＰ［ｎ−１］はレジスタＲ１に上書きされる。また、フィルタ演算済みデータＹ［ｎ］は、レジスタＲ２のＸ［ｎ］が格納されていた領域１２１（具体的にはレジスタＲ２の最下位の１６ビット）に上書きされる。
【００４３】
図４の６行目のＲＯＲ命令は、右方向への循環シフト処理を示す命令である。具体的には、ＲＯＲ命令の第２オペランドで指定されたレジスタＲ２の値が、第１オペランドで指定されたビット数（図４では１６ビット）だけ右方向に循環シフトされる。この結果、５行目のＩＩＲＳＵＭ命令に基づくフィルタ演算で得られたＹ［ｎ］は、レジスタＲ２の最上位の１６ビットに移動し、レジスタＲ２の最下位の１６ビットにはＸ［ｎ＋１］が現れる。
【００４４】
図４の７行目のＬＯＯＰ命令は、ループ処理の終了判定を実行するための命令である。具体的には、ＬＯＯＰ命令の第１オペランドに指定されたレジスタＲ９の値がゼロでないとき、Ｒ９の値を１だけ減算するとともに、第２オペランドに指定された即値により表される位置（４行目）に分岐が行われる。図４の例では、レジスタＲ９の初期値が"３"であるから、５及び６行目の処理が４回繰り返される。４回のループ処理が実行された後のレジスタＲ２には、４つのフィルタ演算済みデータＹ［ｎ］〜Ｙ［ｎ＋３］が格納された状態となる。
【００４５】
図４の８行目のＭＯＶ命令は、４つのフィルタ済み演算データＹ［ｎ］〜Ｙ［ｎ＋３］をレジスタＲ２からデータメモリ５１に格納するための命令である。最後に、図４の９行目のＢＲ命令は、第１オペランドで指定された位置（１行目）への無条件分岐を示す命令である。
【００４６】
図５は、図４に示したプログラムの実行に伴うレジスタＲ２の値の変化を示す概念図である。なお、図５は、ｎ＝４の場合を示している。図５（１）は、１回目のループ処理が開始される前のレジスタＲ２の状態であり、データメモリ５１からロードされたＸ［４］〜Ｘ［７］が格納されている。
【００４７】
図５（２）は、１回目のループ処理においてＩＩＲＳＵＭ命令が実行された後のレジスタＲ２の状態を示しており、Ｘ［４］が格納されていた最下位の１６ビット（上書き領域１２１）がＹ［４］によって上書きされている。
【００４８】
図５（３）は、１回目のループ処理におけるＲＯＲ命令により右循環シフトが実行された後のレジスタＲ２の状態を示している。具体的には、最下位の１６ビットに位置していたＹ［４］が最上位側にシフトし、最下位の１６ビットには次のＩＩＲフィルタ演算の入力データとなるＸ［５］が現れている。
【００４９】
図５（４）は、２回目のループ処理においてＩＩＲＳＵＭ命令が実行された後のレジスタＲ２の状態を示している。具体的には、レジスタＲ２からフィルタ演算回路１３にＸ［５］が供給されてＩＩＲフィルタ演算が実行された結果、Ｙ［５］がレジスタＲ２の最下位の１６ビットに格納される。
【００５０】
図５（５）は、２回目のループ処理におけるＲＯＲ命令により右循環シフトが実行された後のレジスタＲ２の状態を示している。具体的には、最下位の１６ビットに位置していたＹ［５］が最上位側にシフトし、最下位の１６ビットには次のＩＩＲフィルタ演算の入力データとなるＸ［６］が現れている。
【００５１】
同様に、図５（６）乃至（９）は、第３及び第４ループのＩＩＲＳＵＭ命令又はＲＯＲ命令の実行結果を示している。
【００５２】
このように、図４のプログラムによれば、複数の被フィルタ演算データＸ［４］〜Ｘ［７］をまとめて読み出したうえで、ＩＩＲフィルタ演算命令（ＩＩＲＳＵＭ命令）と循環シフト命令（ＲＯＲ命令）が繰り返し実行される。これによって、データメモリ５１から被フィルタ演算データＸ［ｎ］を取得するため、及び、データメモリ５１にフィルタ演算済みデータＹ［ｎ］を格納するために要するデータメモリのアクセス回数を削減できる。
【００５３】
また、本実施例では、第２の汎用レジスタ（図２ではレジスタＲ１）を、フィルタ演算回路１３に対する中間生成データＰ［ｎ］の供給元とし、かつ、フィルタ演算回路１３から出力される中間生成データＰ［ｎ＋１］によって次々と上書き更新することとした。これにより、フィルタ演算回路１３から出力された中間生成データを新たにフィルタ演算回路１３に入力するための冗長なデータ移動処理が不要となる。
【００５４】
つまり、本実施例にかかるマイクロプロセッサ１は、ＩＩＲフィルタ演算の基本ブロック処理の繰り返しが、第１乃至第３の汎用レジスタ（レジスタＲ０乃至Ｒ２）とフィルタ演算回路１３の間でのデータ入出力によって簡潔に実行できるため、ＩＩＲフィルタ演算を高速に実行することができる。
【００５５】
なお、図４に示したプログラム例は一例に過ぎないことはもちろんであり、本明細書に接した当業者であれば、ループ処理を展開する等の様々な変形が可能である。
【００５６】
［実施例２］
次に、図１５に示した直接型Iの２次ＩＩＲフィルタ７の演算処理をフィルタ演算回路１３に実行させる場合について説明する。上述した直接型IIの場合は、（２）式で表される中間生成データＰ［ｎ］が、引き継ぎデータとして第２の汎用レジスタに格納されていた。一方、本実施例の直接型Iの場合は、（１）式から明らかであるように、次のサンプルＸ［ｎ＋１］のフィルタ演算に必要なＸ［ｎ−１］、Ｘ［ｎ］、Ｙ［ｎ−１］及びＹ［ｎ］を引継ぎデータとして第２の汎用レジスタに格納すればよい。
【００５７】
図６では、２次ＩＩＲフィルタ７における被フィルタ演算データＸ［ｎ］、フィルタ演算済みデータＹ［ｎ］、引継ぎデータ、並びにフィルタ係数ａ１、ａ２、ｂ１及びｂ２のデータ長を全て１６ビットとしている。また、図６は、ｎ＝４である場合の入出力データを示したものである。図２に示した直接型IIの場合と比べて、図６の構成は、レジスタＲ１に保持される引継ぎデータが異なっている。
【００５８】
図７は、直接型Iの２次ＩＩＲフィルタ７の演算を実行するフィルタ演算回路１３の具体的な構成例を示すブロック図である。図３に示した直接型IIに対応する構成と図７の構成とを比較すると、第１及び第２パイプラインステージに含まれている乗算器１３１１乃至１３１４並びに加算器１３３１乃至１３３４に差異はない。ただし、図７と図３では、ＩＮ１端子に入力される引継ぎデータが異なる。第３パイプラインステージについて見ると、中間生成データＰ［ｎ］の計算が行われないために、図７では、パイプラインラッチ１３４１、加算器１３５３、及び変換器１３５５が省略されている。
【００５９】
上述したように、直接型IのＩＩＲフィルタ７に対応した本実施例の構成と、上述した直接型IIのＩＩＲフィルタ８に対応した実施例１の構成とは、第２の汎用レジスタ（レジスタＲ１）に格納される引継ぎデータが異なるのみである、したがって、実施例１に示したのと同様に、本実施例の具体的構成を有するマイクロプロセッサ１も、ＩＩＲフィルタ演算の基本ブロック処理の繰り返しを、第１乃至第３の汎用レジスタ（レジスタＲ０乃至Ｒ２）とフィルタ演算回路１３の間でのデータ入出力によって簡潔に実行できるため、ＩＩＲフィルタ演算を高速に実行することができる。
【００６０】
［実施例３］
本実施例では、バイカッドフィルタ９１乃至９４の直列接続により構成された図１７の８次ＩＩＲフィルタ９の演算処理を、フィルタ演算回路１３に実行させる場合について説明する。直列接続された４つのバイカッドフィルタ９１乃至９４に対応する演算を１つのフィルタ演算回路１３で実行するためには、フィルタ演算回路１３に対して、フィルタ係数、引継ぎデータ（中間生成データ）、被フィルタ演算データを選択的に供給する必要がある。これは、フィルタ演算命令（ＩＩＲＳＵＭ命令）のオペランドに指定される第１乃至第３の汎用レジスタを変更することで達成される。
【００６１】
図８は、サンプル番号ｎ＝４としたときに、汎用レジスタＲ０乃至Ｒ８に保持される初期値を示している。図８において、レジスタＲ０は、バイカッドフィルタ９１のフィルタ係数ａ１１、ａ１２、ｂ１１及びｂ１２を保持している。同様に、レジスタＲ１乃至Ｒ３は、バイカッドフィルタ９２乃至９４のフィルタ係数を保持している。また、レジスタＲ４は、バイカッドフィルタ９１に関する中間生成データＰ１［３］及びＰ１［２］を保持している。これと同様に、レジスタＲ５乃至７は、バイカッドフィルタ９２乃至９４に関する中間生成データを保持している。最後に、レジスタＲ８は、被フィルタ演算データＸ［４］〜Ｘ［７］を保持している。
【００６２】
次に、マイクロプロセッサ１に８次ＩＩＲフィルタ９の演算を繰り返し実行させるためのプログラム例を紹介する。図９は、８次ＩＩＲフィルタ９によるフィルタ演算の繰り返し実行に関するプログラムのうち、ループ処理部分のみを抜き出して示したプログラムである。つまり、図９のプログラムは、図４のプログラムの４行目から７行目までのループ処理に対応している。
【００６３】
図９の１行目は、ループ処理の先頭を示すコメント行であり、図９の２〜７行目は、ＩＩＲフィルタ演算を実行するループ処理を示している。
【００６４】
図９の２行目のＩＩＲＳＵＭ命令は、図１７の１段目のバイカッドフィルタ９１によるフィルタ演算の実行を指示する命令である。具体的には、図９の２行目のＩＩＲＳＵＭ命令のオペランドには、レジスタＲ０、Ｒ４及びＲ８が指定される。当該ＩＩＲＳＵＭ命令の実行によって、レジスタＲ８の最下位の１６ビットに格納されていたＸ［４］は、フィルタ演算済みデータＡ［４］によって上書きされる。
【００６５】
図９の３行目のＩＩＲＳＵＭ命令は、２段目のバイカッドフィルタ９２によるフィルタ演算の実行を指示する命令である。具体的には、図９の３行目のＩＩＲＳＵＭ命令のオペランドには、レジスタＲ１、Ｒ５及びＲ８が指定される。当該ＩＩＲＳＵＭ命令の実行によって、レジスタＲ８の最下位の１６ビットに格納されていたＡ［４］は、フィルタ演算済みデータＢ［４］によって上書きされる。
【００６６】
図９の４行目のＩＩＲＳＵＭ命令は、３段目のバイカッドフィルタ９３によるフィルタ演算の実行を指示する命令である。具体的には、図９の４行目のＩＩＲＳＵＭ命令のオペランドには、レジスタＲ２、Ｒ６及びＲ８が指定される。当該ＩＩＲＳＵＭ命令の実行によって、レジスタＲ８の最下位の１６ビットに格納されていたＢ［４］は、フィルタ演算済みデータＣ［４］によって上書きされる。
【００６７】
図９の５行目のＩＩＲＳＵＭ命令は、４段目のバイカッドフィルタ９４によるフィルタ演算の実行を指示する命令である。具体的には、図９の５行目のＩＩＲＳＵＭ命令のオペランドには、レジスタＲ３、Ｒ７及びＲ８が指定される。当該ＩＩＲＳＵＭ命令の実行によって、レジスタＲ８の最下位の１６ビットに格納されていたＣ［４］は、フィルタ演算済みデータＹ［４］によって上書きされる。
【００６８】
図９の６行目のＲＯＲ命令は、右方向への循環シフト処理を示す命令であって、図４の６行目のＲＯＲ命令に対応する。当該ＲＯＲ命令の実行によって、５行目のＩＩＲＳＵＭ命令に基づくフィルタ演算で得られたＹ［４］は、レジスタＲ８の最上位の１６ビットに移動し、レジスタＲ８の最下位の１６ビットにはＸ［５］が現れる。
【００６９】
図９の７行目のＬＯＯＰ命令は、ループ処理の終了判定を実行するための命令であり、図４の７行目のＬＯＯＰ命令に対応する。図９にはレジスタＲ９の初期値の設定処理を示していないが、図４と同様に"３ｈ"を初期値としてレジスタＲ９にセットし、図９第２〜７行目のループ処理を４回繰り返せばよい。
【００７０】
図１０乃至１３は、図９第２〜７行目のループ処理を４回繰り返す過程における、レジスタＲ４乃至Ｒ８による保持データの変化を示したものである。特筆すべきは、４段のバイカッドフィルタ９１乃至９４のフィルタ演算に相当する４つのＩＩＲＳＵＭ命令を実行する過程では、レジスタＲ８の最下位の１６ビットを順次上書き更新し、更新後の値を次のＩＩＲＳＵＭ命令の入力データに利用すればよい点である。つまり、４つのＩＩＲＳＵＭ命令の間で、レジスタＲ８の循環シフトやデータメモリ５１に対するロード／ストアで実行する必要がない。
【００７１】
図９に示したプログラム例のように、ＩＩＲフィルタ演算命令（ＩＩＲＳＵＭ命令）の連続実行が可能であるという利点をより活用するためには、マイクロプロセッサ１をパイプライン構造とするとよい。図１４は、図９のプログラムに含まれる命令群のパイプライン処理を示す図である。
【００７２】
図１４において、ＩＦステージは、命令メモリ５０又は命令メモリ５０からプリフェッチされた命令が格納された命令キャッシュ（不図示）から、実行制御部１０が命令を取得するステージである。ＩＤステージは、フェッチした命令を実行制御部１０がデコードするステージである。デコードされた命令がＩＩＲＳＵＭ命令であれば、第１及び第２オペランドに指定されたデータが、フィルタ演算回路１３に供給するために読み出される。
【００７３】
ＥＸ１、ＥＸ２及びＤＦステージは、フィルタ演算回路１３によるフィルタ演算の実行ステージである。なお、図３及び図７に示したフィルタ演算回路１３の具体例は、実行ステージを３段とした図１４のパイプラインに合致するものである。ＤＦステージでは、ＩＩＲＳＵＭ命令の第３オペランドが読み出されてフィルタ演算回路１３に供給される。
【００７４】
最後に、ＷＢステージは、ＥＸ１、ＥＸ２及びＤＦステージによる演算結果が汎用レジスタファイル１２に格納されるライトバックステージである。
【００７５】
図１４に示すように、例えば、第１ループ最初のＩＩＲＳＵＭ命令のＷＢステージ（Ｃ６サイクル）では、演算済みデータＡ［４］がレジスタＲ８に書き戻される。このとき、後続のＩＩＲＳＵＭ命令はＤＦステージにあり、先行するＩＩＲＳＵＭ命令の出力データＡ［４］を参照することができる。つまり、パイプラインストールを生じることなく、連続するＩＩＲＳＵＭ命令を１クロックピッチで次々と実行することができる。
【００７６】
なお、連続するＩＩＲＳＵＭ命令を１クロックピッチで確実に実行するために、フィルタ演算回路１３のＯＵＴ１端子に現れるフィルタ演算済みデータを、汎用レジスタファイル１２を介さずにフィルタ演算回路のＩＮ１端子に供給するためのバイパス回路を設けてもよい。
【００７７】
上述した説明では、説明容易化のために、フィルタ演算回路１３にバイカッドフィルタの演算を実行させる例のみを示した。しかしながら、フィルタ演算回路１３は、３次以上の高次ＩＩＲフィルタを基本ブロックとするフィルタ演算を実行するよう構成されてもよい。また、図１５乃至１６に示した構成以外のバイカッドフィルタの演算をフィルタ演算回路１３に実行させることも可能である。
【００７８】
また、図１では、マイクロプロセッサ１の外部にデータメモリ５１が存在する構成を示した。しかしながら、例えば、データメモリ５１を含めて１チップに集積されたマイクロプロセッサなど、データメモリ５１がマイクロプロセッサ１の内部に存在する構成としてもよい。つまり、本発明は、図１に示した具体的な実装に限られず、様々な実装形態のマイクロプロセッサに適用可能である。
【００７９】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【図面の簡単な説明】
【００８０】
【図１】本発明の実施の形態にかかるマイクロプロセッサの構成図である。
【図２】本発明の実施の形態にかかるフィルタ演算回路の入出力データを示す概念図である。
【図３】本発明の実施の形態にかかるフィルタ演算回路の構成例を示す図である。
【図４】本発明の実施の形態にかかるＩＩＲフィルタ演算を実行するためのプログラムの抜粋である。
【図５】本発明の実施の形態にかかるＩＩＲフィルタ演算の実行過程におけるレジスタ格納値の変化を示す図である。
【図６】本発明の実施の形態にかかるフィルタ演算回路の入出力データを示す概念図である。
【図７】本発明の実施の形態にかかるフィルタ演算回路の構成例を示す図である。
【図８】本発明の実施の形態において、汎用レジスタに保持されるにかかるＩＩＲフィルタ演算の初期値を示す図である。
【図９】本発明の実施の形態にかかるＩＩＲフィルタ演算を実行するためのプログラムの抜粋である。
【図１０】本発明の実施の形態にかかるＩＩＲフィルタ演算の実行過程におけるレジスタ格納値の変化を示す図である。
【図１１】本発明の実施の形態にかかるＩＩＲフィルタ演算の実行過程におけるレジスタ格納値の変化を示す図である。
【図１２】本発明の実施の形態にかかるＩＩＲフィルタ演算の実行過程におけるレジスタ格納値の変化を示す図である。
【図１３】本発明の実施の形態にかかるＩＩＲフィルタ演算の実行過程におけるレジスタ格納値の変化を示す図である。
【図１４】本発明の実施の形態にかかるＩＩＲフィルタ演算命令のパイプライン処理を示す図である。
【図１５】直接型Iの２次ＩＩＲフィルタを示す図である。
【図１６】直接型IIの２次ＩＩＲフィルタを示す図である。
【図１７】直接型IIのバイカッドフィルタが直列接続された高次ＩＩＲフィルタを示す図である。
【符号の説明】
【００８１】
１  マイクロプロセッサ
１０  実行制御部
１１  プログラムカウンタ
１２  汎用レジスタファイル
１３  フィルタ演算回路
５０  命令メモリ
５１  データメモリ
５２  アドレスバス
５３  データバス
１２１  上書き領域
Ｒ０〜Ｒ１５  汎用レジスタ
【図１】
0005059508.tif 000005
【図２】
0005059508.tif 000006
【図３】
0005059508.tif 000007
【図４】
0005059508.tif 000008
【図５】
0005059508.tif 000009
【図６】
0005059508.tif 000010
【図７】
0005059508.tif 000011
【図８】
0005059508.tif 000012
【図９】
0005059508.tif 000013
【図１０】
0005059508.tif 000014
【図１１】
0005059508.tif 000015
【図１２】
0005059508.tif 000016
【図１３】
0005059508.tif 000017
【図１４】
0005059508.tif 000018
【図１５】
0005059508.tif 000019
【図１６】
0005059508.tif 000020
【図１７】
0005059508.tif 000021