本発明の実施形態について、図面を参照しながら説明する。
図1は、本実施の形態にかかるコンピュータ1のシステム構成を示す図である。同図に示すように、コンピュータ1はDSP10、CPU20、メモリ部30を含んで構成される。コンピュータ1はサンプラーやイコライザーとして用いられるものである。また、DSP10及びCPU20は、予め記述されたプログラムに従って動作する演算処理装置である。
ここでは特に、DSP10は、音声データの入力を受け、CPU20により選択される種々のデジタル処理(例えば、IIR(無限インパルス応答)フィルタ処理)を施す。このデジタル処理の中でメモリアクセスが必要となり、本実施形態では、このメモリアクセスにおいて相対アドレスを絶対アドレスに変換する際の演算処理装置(ここではDSP10。)の処理負荷の軽減を実現するための構成について説明する。以下では、まずコンピュータ1の一般的構成について説明し、その後、相対アドレスを絶対アドレスに変換する際のDSP10の処理負荷の軽減を実現するための構成について説明する。
図1に示すように、DSP10は、制御部11、データパス部12、乗算係数生成部13を含んで構成され、さらにデータパス部12はその内部に入力信号セレクト部121、積和演算部122、出力信号生成部123を含んで構成される。
CPU20は、制御部11に対し、DSP10が行うべき処理を指示する。例えば、IIRフィルタ処理や、サンプリングレートの変更処理、プリエンファシス(高域強調)した音声データを元に戻す処理、ステレオ音声信号の左右の音量を制御し、定位(パンポット)を変化させる処理などを行うよう指示する。
データパス部12の入力信号セレクト部121には、図示しない音源やDAC(Digital Analog converter)などから、所定数チャネル分の音声データが入力される。また、メモリ部30からも音声データが入力される。
制御部11は、入力信号セレクト部121に対し、CPU20の指示に応じた音声データの入力を受け付けるよう指示する。入力信号セレクト部121は、この指示に応じて音声データの入力を受け付け、受け付けた音声データを積和演算部122に出力する。
また、制御部11は、積和演算部122に対し、入力信号セレクト部121から入力された音声データに対し、乗算処理又は加算処理を行うよう指示する。さらに、この乗算処理において音声データに乗算すべき乗算係数を生成するよう、乗算係数生成部13に指示する。
乗算係数生成部13は、制御部11の指示に応じて乗算係数を生成し、積和演算部122に出力する。
積和演算部122は、制御部11の指示に応じて乗算処理又は加算処理を行う。なお、このうち乗算処理においては、積和演算部122は、乗算係数生成部13から入力された乗算係数を音声データに乗算する。積和演算部122は、処理結果を示す出力データを出力信号生成部123及びメモリ部30に出力する。
出力信号生成部123は、積和演算部122から入力された出力データに基づいて音声信号を生成し、出力する。こうして出力された音声信号は、例えばスピーカ(不図示)に入力され、音声出力される。
メモリ部30はメモリアクセス部31及びRAM(Random Access Memory)32を含んで構成される。メモリアクセス部31は、RAM32へのメモリアクセスを行うためのものであり、ここでは積和演算部122から入力される出力データをRAMへ記憶する。また、こうして記憶したデータを、制御部11の指示に応じて読み出し、入力信号セレクト部121に入力する。こうして、積和演算部122の処理結果は再帰的に積和演算部122の処理の用に供され、これによりDSP10は、出力を再帰的に用いてデジタル信号の特性を変化させるためのIIRフィルタとして機能する。
以下、制御部11、データパス部12、乗算係数生成部13、及びメモリ部30が行う処理について、より詳細に説明する。
図2は、制御部11の内部構成を示す図である。同図に示すように、制御部11はステートマシン部111、カウンタ部112、複数のサブモジュール113(図2では、SPE(SPEctrum analyzer)部113a、DIR_SRC(Digitalaudio Interface Raceiver_Sampling Rate Converter)部113b、DEF(De Emphasis Filter)部113c、DEC_SRC(DECorder_Sampling Rate Converter)部113dの4つを代表として記載している。)、信号選択部114、信号選択部115、信号選択部116を含んで構成される。
また、図3は、データパス部12及び乗算係数生成部13の内部構成を示す図である。同図に示すように、データパス部12は乗算器1221、加算器1222、シフタ1223を含んで構成される。これらは積和演算部122の構成要素であり、図3では、入力信号セレクト部121及び出力信号生成部123に関する構成については、その記載を省略している。また、乗算係数生成部13は、上記各サブモジュール113にそれぞれ対応する複数のサブモジュール131(図3では、SPE部113aに対応するSPE部131aのみを代表として記載している。)、信号選択部132、イネーブル信号生成部133、信号選択部134、乗算係数生成部135を含んで構成される。
まず、制御部11について説明する。制御部11に含まれる複数のサブモジュール113はそれぞれ異なる処理を実現する。図2にはSPE部113a、DIR_SRC部113b、DEF部113c、及びDEC_SRC部113dのみを示しているが、制御部11は、実際にはこの他にも様々なサブモジュール113を備えている。SPE部113aは、データパス部12、乗算係数生成部13、及びメモリ部30を用いて、IIRフィルタとしての処理を実現する。SPE部113aの処理の詳細については後述する。DIR_SRC部113bは、デジタルオーディオインターフェイスレシーバー(不図示)が出力し、データパス部12に入力される音声データのサンプリングレートを変換する処理を実現する。DEF部113cは、プリエンファシスした音声データを元に戻す処理を実現する。DEC_SRC部113dは、デコーダ(不図示)が出力し、データパス部12に入力される音声データのサンプリングレートを変換する処理を実現する。
ステートマシン部111は、CPU20からの指示に従い、処理を実施すべきサブモジュール113を特定し、特定したサブモジュール113及び該サブモジュール113に対応するサブモジュール131に対し、処理の開始を指示するための指示信号を出力する。また、この指示信号を出力するタイミングで、カウンタ部112に対してイネーブル信号(動作許可信号)を出力する。
カウンタ部112はカウンタを保持しており、ステートマシン部111から入力されるイネーブル信号に応じて該カウンタのカウントアップを開始するとともに、カウンタの値を示すカウンタ信号を各サブモジュール113及び各サブモジュール131に対して出力する。なお、カウンタ部112は、図示しないクロックから発振されるクロック信号の周期に応じた周期で、カウンタのカウントアップを行う。
各サブモジュール113は、それぞれ信号選択部1131及びデコーダ部1132を含んで構成される。信号選択部1131は、カウンタ部112からカウンタ信号の入力を受け付けるとともに、ステートマシン部111から指示信号の入力を受け付ける。そして、指示信号が入力されている場合に限り、デコーダ部1132に対し、カウンタ信号を出力する。逆に言えば、信号選択部1131は、指示信号が入力されていないときには、デコーダ部1132に対し、カウンタ信号を出力しない。このように、指示信号が入力されていないときにカウンタ信号を入力しないようにする信号選択部1131の処理を、カウンタ信号をマスクするという。
デコーダ部1132は、カウンタ信号により示されるカウンタの値に応じて、所定の処理を行う。そしてその結果として、RAMの絶対アドレスを示す絶対アドレス信号と、データパス部12及びメモリ部30に対して処理動作(メモリ読み出し/メモリ書き込み/乗算/加算/シフトなど)の実行を命令するためのイネーブル信号と、指示信号に応じた一連の処理が完了したことを示す処理完了信号と、を出力する。このうち、絶対アドレス信号及びイネーブル信号については、SPE部113aを例にとって後に詳しく説明する。
デコーダ部1132は、指示信号に応じた一連の処理が完了すると、信号選択部114に対して処理完了信号を出力する。信号選択部114は、各サブモジュール113のデコーダ部1132と接続されており、いずれかのデコーダ部1132から処理完了信号が入力された場合に、カウンタ部112のカウンタをクリアするためのカウンタクリア信号をカウンタ部112に対して出力する。カウンタ部112は、このカウンタクリア信号の入力を受け付けると、カウンタをクリアする(初期値に戻す)。
信号選択部115も、各サブモジュール113のデコーダ部1132と接続されており、いずれかのデコーダ部1132から絶対アドレス信号が入力された場合に、該絶対アドレス信号をメモリ部30に対して出力する。
信号選択部116は、各サブモジュール113のデコーダ部1132及び乗算係数生成部13と接続されており、いずれかのデコーダ部1132又は乗算係数生成部13からイネーブル信号が入力された場合に、該イネーブル信号をメモリ部30に対して出力する。
なお、カウンタ信号がマスクされているサブモジュール113のデコーダ部1132は、その出力を例えば無出力状態に保持することが望ましい。各サブモジュール113が出力する各信号は上述のように各信号選択部に入力されるが、複数の有意信号が入力されることによって各信号選択部が誤動作するのを防止するためである。
次に、乗算係数生成部13について説明する。乗算係数生成部13に含まれる複数のサブモジュール131は、図3に示すように、それぞれ信号選択部1311及びデコーダ部1312を含んで構成される。信号選択部1311は、カウンタ部112からカウンタ信号の入力を受け付けるとともに、ステートマシン部111から指示信号の入力を受け付ける。そして、指示信号が入力されている場合に限り、デコーダ部1312に対し、カウンタ信号を出力する。逆に言えば、信号選択部1311は、指示信号が入力されていないときには、デコーダ部1312に対し、カウンタ信号を出力しない。このように、指示信号が入力されていないときにカウンタ信号を入力しないようにする信号選択部1311の処理を、信号選択部1131と同様、カウンタ信号をマスクするという。
デコーダ部1312は、カウンタ信号により示されるカウンタの値に応じて、所定の処理を行う。そしてその結果を示す処理結果信号を信号選択部132及び信号選択部134に対して出力する。
信号選択部132は、各サブモジュール131のデコーダ部1312と接続されており、いずれかのデコーダ部1312から処理結果信号が入力された場合に、該処理結果信号をイネーブル信号生成部133に対して出力する。
イネーブル信号生成部133は、信号選択部132から入力された処理結果信号に基づき、乗算器1221の乗算処理実行を許可するためのイネーブル信号を生成し、信号選択部116に出力する。信号選択部116は、イネーブル信号生成部133からイネーブル信号が入力されると、乗算器1221に対してこれを出力する。
信号選択部134も、各サブモジュール131のデコーダ部1312と接続されており、いずれかのデコーダ部1312から処理結果信号が入力された場合に、該処理結果信号を乗算係数生成部135に対して出力する。
乗算係数生成部135は、信号選択部134から入力された処理結果信号に基づき、乗算器1221の乗算処理において入力データに乗算するための乗算係数を生成し、乗算器1221に出力する。
最後に、データパス部12及びメモリ部30について説明する。メモリ部30は、信号選択部116からメモリ読み出しを命令するためのイネーブル信号の入力を受け付けると、信号選択部115から入力される絶対アドレス信号を取得する。そして、取得した絶対アドレス信号により示される絶対アドレスに記憶しているデータを読み出し、乗算器1221に出力する。
乗算器1221は、データパス部12が信号選択部116から乗算処理の実行を命令するためのイネーブル信号の入力を受け付けると、メモリ部30から入力されるデータと、乗算係数生成部135から入力される乗算係数と、を乗算し、その結果を、加算器1222に出力する。
加算器1222は、データパス部12が信号選択部116から加算処理の実行を命令するためのイネーブル信号の入力を受け付けると、乗算器1221の乗算結果と、自身の出力(加算結果)と、を加算し、シフタ1223に出力する。
シフタ1223は、データパス部12が信号選択部116からシフト処理の実行を命令するためのイネーブル信号の入力を受け付けると、加算器1222の加算結果をシフトし、その結果をメモリ部30に出力する。
メモリ部30は、信号選択部116からメモリ書き込みを命令するためのイネーブル信号の入力を受け付けると、信号選択部115から入力される絶対アドレス信号により示される絶対アドレスに対し、シフタ1223から出力されるデータを書き込む。
以上のように、デコーダ部1132は、絶対アドレス信号とイネーブル信号とを出力することにより、メモリ部30や積和演算部122を動作させ、その結果、所定の処理を実現する。ここで、絶対アドレス信号を得るために、デコーダ部1132は相対アドレスを絶対アドレスに変換するための処理を行っており、以下では、この変換の際のDSP10の処理負荷の軽減を実現するための構成について、具体的な例としてSPE部113aの処理を取り上げつつ、説明する。
図4は、コンピュータ1の機能ブロックのうち、SPE部113aが実現するIIRフィルタ処理にかかる機能ブロックを示す概略ブロック図である。同図に示すように、デコーダ部1132aはインストラクション取得部11321、イネーブル信号生成部11322、オフセットアドレス取得部11323、絶対アドレス取得/メモリアクセス指示部11324を含んで構成される。また、RAM32は、オフセットアドレス記憶部321、FIFO(First In First Out)323、及びFIFO324−0〜6を含んで構成される。
また、図5は、データパス部12及びメモリ部30が行う処理を具体的に説明するための図である。ここでは、入力された音声データが7つのBAND0〜BAND6に分けて出力される。そしてその際、FIFO323、FIFO324−0〜6、乗算器1221、及び加算器1222が用いられる。なお、図5では複数の乗算器1221(乗算器1221−i−1〜4(i=0〜6)。ただしi=2〜6の分については省略。)と複数の加算器1222(加算器1222−i(i=0〜6)。ただしi=2〜6の分については省略。)とを記載しているが、これは説明のための便宜的な記載であり、実際には、これらは乗算器1221と加算器1222各1つにより構成される。また、FIFO323は、書き込み時期の古い順にデータD0,データD1,データD2の3つのデータにより構成されている。同様に、FIFO324−0〜6は、それぞれ書き込み時期の古い順にデータD0,データD1の2つのデータにより構成されている。
さらに、図6は、メモリ部30のRAM32内においてFIFO323及びFIFO324−0〜6が記憶される物理位置の例を示す図である。同図に示すように、FIFO323は、それぞれ絶対アドレス001101000,001101001,001101010に記憶される3つのデータにより構成される。また、FIFO324−0は、それぞれ絶対アドレス001110010,001110011に記憶される2つのデータにより構成される。他のFIFO324についても同様である。
オフセットアドレス記憶部321は、RAM32内に記憶される複数のFIFO(FIFO323,FIFO324−0〜6)(一連のアクセス対象データ)それぞれについて、n桁のビット列により表現されるRAM32の絶対アドレスのうち、上位n−m桁分(m<n)のビット列により構成されるオフセットアドレスを記憶する。
ここで、RAM32は、FIFO323及びFIFO324−0〜6を、その絶対アドレスの上位がオフセットアドレス記憶部321において当該FIFOについて記憶されるオフセットアドレスである当該RAM32内の領域に記憶している。例えば図6では、FIFO323についてm=2であり、オフセットアドレス記憶部321に記憶される具体的なオフセットアドレスは0011010である。そして、FIFO323は、その絶対アドレスの上位がオフセットアドレス0011010となるRAM32内の領域に記憶されている。また、FIFO324−0についてm=1であり、オフセットアドレス記憶部321に記憶される具体的なオフセットアドレスは00111001である。そして、FIFO324−0は、その絶対アドレスの上位がオフセットアドレス00111001となるRAM32内の領域に記憶されている。
インストラクション取得部11321は、カウンタ部112からカウンタ信号が入力されている場合(すなわち、信号選択部1131aによってカウンタ信号がマスクされていない場合)、カウンタ信号により示されるカウンタ値に応じてインストラクションを取得する。こうして取得されるインストラクションは、実行を指示する処理の具体的方法(メモリ読み出し/メモリ書き込み/乗算/加算/シフトなど)を示す処理方法情報と、該処理においてアクセスすべきFIFO(FIFO323、FIFO324−0〜6)を示すFIFO情報と、を含む処理内容情報(演算処理装置が行う処理の内容を示す情報)と、RAM32の絶対アドレスのうち、下位m桁分のビット列により構成される相対アドレスと、を含んで構成される。
ここで、インストラクション取得部11321は、処理方法情報及びFIFO情報の組み合わせにより示される処理内容ごとに、ポインタを保持する。このポインタは上記相対アドレスを保持するためのものであり、処理方法情報及びFIFO情報の組み合わせ(処理内容情報)により示される処理内容のインストラクションを生成・出力する都度インクリメントされる。例えば、ある処理内容について00,01,10の3つの相対アドレスが用いられる場合、ポインタは、インストラクション生成・出力の都度00,01,10と変化し、10の次は00に戻る。
イネーブル信号生成部11322は、インストラクション取得部11321により取得されるインストラクションに含まれる処理方法情報に基づき、該処理方法情報により示される処理の方法を実行するよう命令するためのイネーブル信号を生成し、メモリアクセス部31及びデータパス部12に出力する。
オフセットアドレス取得部11323は、インストラクション取得部11321により取得されるインストラクションに含まれる処理内容情報に応じて、オフセットアドレス記憶部321により記憶される複数のオフセットアドレスの中から1のオフセットアドレスを取得する。具体的には、インストラクション取得部11321により取得されるインストラクションに含まれるFIFO情報により示されるFIFO323又はFIFO324−0〜6について、オフセットアドレス記憶部321に記憶されるオフセットアドレスを取得する。
絶対アドレス取得/メモリアクセス指示部11324は、オフセットアドレス取得部11323により取得されたオフセットアドレスと、インストラクション取得部11321により取得されたインストラクションに含まれる相対アドレスと、に基づいて絶対アドレスを取得する。具体的には、オフセットアドレス取得部11323により取得されたオフセットアドレスを上位とし、インストラクション取得部11321により取得されたインストラクションに含まれる相対アドレスを下位としてなるn桁のビット列を、上記絶対アドレスとして取得する。そして、こうして取得した絶対アドレスをメモリ部30のメモリアクセス部31に対して出力する。これにより、絶対アドレス取得/メモリアクセス指示部11324は、メモリアクセス部31に対し、上記n桁のビット列を絶対アドレスとするRAM32内の位置へのアクセスを指示する。
メモリアクセス部31は、絶対アドレス取得/メモリアクセス指示部11324から入力された絶対アドレスに基づき、RAM32にアクセスする。具体的には、イネーブル信号生成部11322から入力されるイネーブル信号によりメモリ読み出しが命令されている場合には、絶対アドレス取得/メモリアクセス指示部11324から入力された絶対アドレスからデータを読み出す。一方、イネーブル信号生成部11322から入力されるイネーブル信号によりメモリ書き込みが命令されている場合には、データパス部12から入力されたデータを、絶対アドレス取得/メモリアクセス指示部11324から入力された絶対アドレスに書き込む。
以上の処理について、図4及び図5を参照しながら具体的な例により説明する。図5の例では、インストラクション取得部11321は、まず初めに、データパス部12に入力される音声データ(音声データAとする。)をFIFO323に書き込ませる処理を、メモリ部30に実行させるためのインストラクションを生成し、出力する。
ここで、インストラクション取得部11321は、FIFO323に書き込む処理についてのポインタ(ポインタP1とする。)として2ビットの情報を保持しており、ポインタP1は00,01,10の3つの値のうちのいずれかの値をとる。処理開始の段階におけるポインタP1の値は00であり、インストラクション取得部11321は、メモリ書き込みを示す処理方法情報と、ポインタP1により示される相対アドレス00と、FIFO323を示すFIFO情報と、を含むインストラクションを生成し、出力する。そして、この出力が完了すると、ポインタP1を1インクリメントし、01とする。
この場合、絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO323のオフセットアドレス0011010と、インストラクションに含まれる相対アドレス00と、に基づき001101000となる。メモリアクセス部31は、メモリ書き込み処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001101000に、データパス部12から入力される音声データAを書き込む。この処理により、FIFO323のデータD2は音声データAとなる。
次に、インストラクション取得部11321は、FIFO323のデータD2をメモリ部30に読み取らせ、さらに読み取ったデータと、別途の処理により乗算係数生成部13に生成させた乗算係数と、を乗算する処理を乗算器1221−i−1(i=0〜6)に実行させるためのインストラクションを順次生成し、出力する。
ここで、インストラクション取得部11321は、FIFO323のデータD2を読み取る処理についてのポインタ(ポインタP2とする。)として2ビットの情報を保持しており、ポインタP2も00,01,10の3つの値のうちのいずれかの値をとる。インストラクション取得部11321は、ポインタP1の現在値の1つ前の値を、ポインタP2の値とする。このため、この段階におけるポインタP2の値は00であり、インストラクション取得部11321は、メモリ読み出し及び乗算を示す処理方法情報と、ポインタP2により示される相対アドレス00と、FIFO323を示すFIFO情報と、を含むインストラクションを順次生成し、出力する。そして、この出力が全て完了すると、ポインタP2を1インクリメントし、01とする。
この場合、絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO323のオフセットアドレス0011010と、インストラクションに含まれる相対アドレス00と、に基づき001101000となる。また、この場合において、デコーダ部1132aは、乗算係数生成部13に各BANDi(i=0〜6)にそれぞれ対応する7つの乗算係数を生成させ、これらを各乗算器1221−i−1(i=0〜6)に入力させる。
メモリアクセス部31は、メモリ読み出し処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001101000から音声データAを読み出す。各乗算器1221−i−1(i=0〜6)は、乗算処理の実行を命令するためのイネーブル信号の入力を受け、読み出された音声データAと、乗算係数生成部13から入力される乗算係数と、を乗算し、加算器1222−i(i=0〜6)に対して出力する。
次に、インストラクション取得部11321は、加算処理を加算器1222−i(i=0〜6)に実行させるためのインストラクションを順次生成し、出力する。このインストラクションには、加算を示す処理方法情報が含まれる。各加算器1222−i(i=0〜6)は、加算処理の実行を命令するためのイネーブル信号の入力を受け、入力されているデータ(この段階では乗算器1221−i−1(i=0〜6)からの入力データのみ)を加算し、出力する。この出力は、各BANDi(i=0〜6)の出力となる。
次に、インストラクション取得部11321は、加算器1222−i(i=0〜6)の出力データをFIFO324−i(i=0〜6)に書き込む処理を、メモリ部30に実行させるためのインストラクションを順次生成し、出力する。
ここで、インストラクション取得部11321は、各FIFO324−i(i=0〜6)に書き込む処理についてのポインタ(ポインタP3−i(i=0〜6)とする。)として各1ビットの情報を保持しており、各ポインタP3−i(i=0〜6)は0,1の2つの値のうちのいずれかの値をとる。処理開始の段階におけるポインタ各P3−i(i=0〜6)の値は0であり、インストラクション取得部11321は、メモリ書き込みを示す処理方法情報と、ポインタP3−i(i=0〜6)により示される相対アドレス0と、FIFO324−i(i=0〜6)を示すFIFO情報と、を含むインストラクションを順次生成し、出力する。そして、この出力が完了する都度、ポインタP3−i(i=0〜6)を1インクリメントし、1とする。
この場合、例えばFIFO324−0につき絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO324−0のオフセットアドレス00111001と、インストラクションに含まれる相対アドレス0と、に基づき001110010となる。メモリアクセス部31は、メモリ書き込み処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001110010に、加算器1222−0の出力データを書き込む。
次に、インストラクション取得部11321は、データパス部12に続けて入力される音声データ(音声データBとする。)をFIFO323に書き込ませる処理を、メモリ部30に実行させるためのインストラクションを生成し、出力する。
具体的には、インストラクション取得部11321は、メモリ書き込みを示す処理方法情報と、ポインタP1により示される相対アドレス01と、FIFO323を示すFIFO情報と、を含むインストラクションを生成し、出力する。そして、この出力が完了すると、ポインタP1を1インクリメントし、10とする。
この場合、絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO323のオフセットアドレス0011010と、インストラクションに含まれる相対アドレス01と、に基づき001101001となる。メモリアクセス部31は、メモリ書き込み処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001101001に、データパス部12から入力される音声データBを書き込む。この処理により、FIFO323のデータD2は音声データBとなる。また、音声データAは、FIFO323のデータD1となる。
次に、インストラクション取得部11321は、FIFO323のデータD2をメモリ部30に読み取らせ、さらに読み取ったデータと、別途の処理により乗算係数生成部13に生成させた乗算係数と、を乗算する処理を乗算器1221−i−1(i=0〜6)に実行させるためのインストラクションを順次生成し、出力する。
具体的には、インストラクション取得部11321は、メモリ読み出し及び乗算を示す処理方法情報と、ポインタP2により示される相対アドレス01と、FIFO323を示すFIFO情報と、を含むインストラクションを順次生成し、出力する。そして、この出力が全て完了すると、ポインタP2を1インクリメントし、10とする。
この場合、絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO323のオフセットアドレス0011010と、インストラクションに含まれる相対アドレス01と、に基づき001101001となる。また、この場合において、デコーダ部1132aは、乗算係数生成部13に各BANDi(i=0〜6)にそれぞれ対応する7つの乗算係数を生成させ、これらを各乗算器1221−i−1(i=0〜6)に入力させる。
メモリアクセス部31は、メモリ読み出し処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001101001から音声データBを読み出す。各乗算器1221−i−1(i=0〜6)は、乗算処理の実行を命令するためのイネーブル信号の入力を受け、読み出された音声データBと、乗算係数生成部13から入力される乗算係数と、を乗算し、加算器1222−i(i=0〜6)に対して出力する。
次に、インストラクション取得部11321は、FIFO324−i(i=0〜6)のデータD1をメモリ部30に読み取らせ、さらに読み取ったデータと、別途の処理により乗算係数生成部13に生成させた乗算係数と、を乗算する処理を乗算器1221−i−3(i=0〜6)に実行させるためのインストラクションを順次生成し、出力する。
ここで、インストラクション取得部11321は、各FIFO324−i(i=0〜6)のデータD1を読み取る処理についてのポインタ(ポインタP4−i(i=0〜6)とする。)として各1ビットの情報を保持しており、ポインタP4−i(i=0〜6)は0,1の2つの値のうちのいずれかの値をとる。インストラクション取得部11321は、ポインタP3−i(i=0〜6)の現在値の1つ前の値を、ポインタP4−i(i=0〜6)の値とする。このため、この段階における各ポインタP4−i(i=0〜6)の値はいずれも0であり、インストラクション取得部11321は、メモリ読み出し及び乗算を示す処理方法情報と、ポインタP4−i(i=0〜6)により示される相対アドレス0と、FIFO324−i(i=0〜6)を示すFIFO情報と、を含むインストラクションを順次生成し、出力する。そして、この出力が完了する都度、ポインタP4−i(i=0〜6)を1インクリメントし、1とする。
この場合、例えばFIFO324−0につき絶対アドレス取得/メモリアクセス指示部11324により取得される絶対アドレスは、FIFO324−0のオフセットアドレス00111001と、インストラクションに含まれる相対アドレス0と、に基づき001110010となる。また、この場合において、デコーダ部1132aは、乗算係数生成部13に各BANDi(i=0〜6)にそれぞれ対応する7つの乗算係数を生成させ、これらを各乗算器1221−i−3(i=0〜6)に入力させる。メモリアクセス部31は、メモリ読み出し処理の実行を命令するためのイネーブル信号の入力を受け、上記絶対アドレス001110010からデータを読み出す。乗算器1221−0−3は、乗算処理の実行を命令するためのイネーブル信号の入力を受け、読み出されたデータと、乗算係数生成部13から入力される乗算係数と、を乗算し、加算器1222−0に対して出力する。
次に、インストラクション取得部11321は、加算処理を加算器1222−i(i=0〜6)に実行させるためのインストラクションを順次生成する。このインストラクションには、加算を示す処理方法情報が含まれる。各加算器1222−i(i=0〜6)は、加算処理の実行を命令するためのイネーブル信号の入力を受け、入力されているデータ(この段階では乗算器1221−i−1(i=0〜6)からの入力データと乗算器1221−i−3(i=0〜6)からの入力データ)を加算し、出力する。この出力は、各BANDi(i=0〜6)の出力となる。
SPE部113aは、デコーダ部1132a、データパス部12、乗算係数生成部13、メモリ部30等を用いて、以上説明したような処理と同様の処理を繰り返し行うことにより、IIRフィルタ処理を実現している。
ここで、以上説明したインストラクション取得部11321及びオフセットアドレス取得部11323の処理について、異なる観点から再度詳細に説明する。
図7は、インストラクション取得部11321及びオフセットアドレス取得部11323の処理について説明するための図である。上記処理において、インストラクション取得部11321は図7に示すセレクタS1として振る舞い、オフセットアドレス取得部11323は同セレクタS2として振舞う。
すなわち、プログラムの記述に基づいて処理内容が決定されると、セレクタS1としてのインストラクション取得部11321は、該処理内容に基づく1のポインタを選択する。例えば、FIFO323に書き込む処理を行う場合には、ポインタP1を選択する(図7(a))。そして、選択したポインタP1を含むインストラクションを生成し、出力する。
また、セレクタS2としてのオフセットアドレス取得部11323は、決定された処理内容に基づき、オフセットアドレス記憶部321に記憶されるオフセットアドレスの中から1のオフセットアドレスを選択する(図7(b))。そして、選択したオフセットアドレスを絶対アドレス取得/メモリアクセス指示部11324に出力する。
このように、上記各処理は、インストラクション取得部11321及びオフセットアドレス取得部11323が、それぞれセレクタS1及びセレクタS2として振舞うことにより、実現されている。
以上説明したように、コンピュータ1によれば、先頭アドレスに代えて絶対アドレスのうち上位m桁分のビット列により構成されるオフセットアドレスを用い、さらに相対アドレスを絶対アドレスのうち下位n−m桁分のビット列としているので、加算処理を実行することなく、オフセットアドレスと相対アドレスとを連結するだけで、相対アドレスを絶対アドレスに変換することができる。よって、相対アドレスを絶対アドレスに変換する際のDSP10の処理負荷の軽減が実現される。
また、コンピュータ1は、記憶されているオフセットアドレスの中から、適切なオフセットアドレスを選択して取得することができる。
さらに、コンピュータ1は、オフセットアドレスにより、一連のアクセス対象データが記憶されるメモリ内の領域を特定することができる。
なお、本発明は上記実施の形態に限定されるものではない。例えば、上記実施形態におけるオフセットアドレスは1つのビット列であったが、オフセットアドレスをポインタとしてもよい。以下、この変形例について詳細に説明する。
図8は、メモリ内において2つのFIFO(FIFO−A,FIFO−B)が記憶される物理位置の例を示す図である。同図に示すように、FIFO−Aは、それぞれ絶対アドレス0000〜1001に記憶される10個のデータにより構成される。また、FIFO−Bは、それぞれ絶対アドレス1100,1101,1110に記憶される3つのデータにより構成される。
FIFO−Bのオフセットアドレスは、上記実施形態と同様、上位の数ビット(ここでは2ビットのビット列11)によって表されるのに対し、FIFO−Aのオフセットアドレスは、ポインタ(ポインタP5とする。)によって表される。ポインタP5は2ビットの情報であり、00,01,10の3つの値のうちのいずれかの値をとる。インストラクション取得部11321はこのポインタP5を更新するためのポインタ更新手段としても機能し、インストラクションに応じて行われる処理の進行に応じてポインタP5の値を更新していく。これにより、オフセットアドレス取得部11323により取得されるオフセットアドレスの値は、処理の進行に併せて変化することとなる。この場合、図7(b)に示したセレクタS2には、オフセットアドレスを示すポインタが入力され、オフセットアドレス取得部11323は、その時点におけるポインタの値を、オフセットアドレスとして取得することとなる。
このようにオフセットアドレスをポインタとすると、オフセットアドレスをFIFOごとに固定されたビット列とする場合に比べ、メモリ内の広い領域にFIFOを記憶させることができるようになる。
また、コンピュータ1の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより、上記各処理を行ってもよい。
ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものであってもよい。また、この「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、フラッシュメモリ等の書き込み可能な不揮発性メモリ、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
さらに、「コンピュータ読み取り可能な記録媒体」には、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(例えばDRAM(Dynamic Random Access Memory))のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
さらに、上記プログラムは、上述した各機能の一部を実現するためのものであってもよい。さらに、上述した各機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であってもよい。
1 コンピュータ、10 DSP、11 制御部、12 データパス部、13,135 乗算係数生成部、20 CPU、30 メモリ部、31 メモリアクセス部、32 RAM、111 ステートマシン部、112 カウンタ部、113 サブモジュール、113a SPE部、113b DIR_SRC部、113c DEF部、113d DEC_SRC部、114,115,116,132,134,1131,1311 信号選択部、121 入力信号セレクト部、122 積和演算部、123 出力信号生成部、131 サブモジュール、131a SPE部、133 イネーブル信号生成部、321 オフセットアドレス記憶部、323,324 FIFO、1132,1312 デコーダ部、1221 乗算器、1222 加算器、1223 シフタ、11321 インストラクション取得部、11322 イネーブル信号生成部、11323 オフセットアドレス取得部、11324 絶対アドレス取得/メモリアクセス指示部、S1,S2 セレクタ。