(57)【特許請求の範囲】
【請求項１】
データの入出力を行う入出力回路と、データを記憶するメモリ回路と、該メモリ回路に記憶されているデータに対して所定の演算を行う第一の演算回路とを有するデジタルシグナルプロセッサ装置であって、
直列的に接続され、順次データを転送可能な複数の記憶素子と、
前記記憶素子より供給されるデータを用いて所定の演算を行い、該演算の結果を所定の前記記憶素子に出力する各々並列に動作可能な複数の演算器と、
前記複数の記憶素子の各記憶素子間に設けられ、順次入力されるデータのうち前記記憶素子からのデータもしくは前記演算器からの演算結果データのどちらかを選択する複数のデータセレクタと、
を有し、順次入力される一連のデータを順次後段の前記記憶素子に転送し、該転送過程において前記演算器により所定の演算を行い、所望の工程に基づき前記データセレクタを適応的に切り替えて出力データ系列を得る第２の演算回路
をさらに有するデジタルシグナルプロセッサ装置。
【請求項２】
入力行列に対して、少なくとも１の対角成分が無理数であり他の成分が「０」である第１の行列と、各成分が無理数、「＋１」、「−１」のいずれかである第２の行列とに行列分解できる第１の係数行列を左側から、前記第２の行列の転置行列である第３の行列と、前記第１の行列の転置行列である第４の行列とに行列分解できる第２の係数行列を右側からそれぞれ乗算し、その乗算結果である出力行列を得るデジタルシグナルプロセッサ装置であって、
前記第２の演算回路は、前記第２の行列と、前記入力行列と、前記第３の行列との順次左側からの乗算に相当する所定の演算を行い、
前記第１の演算回路は、前記第１の行列と、前記第２の演算回路の演算結果と、前記第４の行列との順次左側からの乗算に相当する所定の演算を行い
出力行列を得る請求項１記載のデジタルシグナルプロセッサ装置。
【請求項３】
前記第２の演算回路は、直列に接続されパイプライン方式でデータの転送が可能な少なくとも１３個のレジスタと、該レジスタの任意のデータに対して演算可能な少なくとも１個の乗算器と１個の加減算器と１個の加算器と２個の減算器より構成され、
該第２の演算回路は、行列〔Ｍ〕の転置行列〔Ｍt 〕が式１で定義されるとき、
【数１】
0003697720.tif 000030
式２の行列演算を繰り返し行うことにより、
【数２】
0003697720.tif 000031
入力された８×８の実空間の画像行列データ〔Ｘ〕に対して、式３の行列演算を実行し、
【数３】
0003697720.tif 000032
式３の演算の結果得られた行列〔Ｙ〕の転置行列〔Ｙt 〕に対する式４の行列演算を、式２の行列演算を繰り返すことにより行い、
【数４】
0003697720.tif 000033
前記第１の演算回路は、行列〔Ｗ〕が式５で定義されるとき、
【数５】
0003697720.tif 000034
前記第２の演算回路により式４の行列演算の結果得られた行列〔Ｚt 〕を転置行列とする行列〔Ｚ〕に対して式６の演算を行い、
【数６】
0003697720.tif 000035
８×８の周波数空間の画像行列データ〔Ｃ〕を求める式７の２次元８×８離散コサイン変換を行う
【数７】
0003697720.tif 000036
請求項１または２記載のデジタルシグナルプロセッサ装置。
【請求項４】
入力行列に対して、少なくとも１の対角成分が無理数であり他の成分が「０」である第１の行列と、各成分が無理数、「＋１」、「−１」のいずれかである第２の行列とに行列分解できる第１の係数行列を右側から、前記第２の行列の転置行列である第３の行列と、前記第１の行列の転置行列である第４の行列とに行列分解できる第２の係数行列を左側からそれぞれ乗算し、その乗算結果である出力行列を得るデジタルシグナルプロセッサ装置であって、
前記第２の演算回路は、前記第４の行列と、前記入力行列と、前記第１の行列との順次左側からの乗算に相当する所定の演算を行い、
前記第１の演算回路は、前記第３の行列と、前記第２の演算回路の演算結果と、前記第２の行列との順次左側からの乗算に相当する所定の演算を行い
出力行列を得る請求項１に記載のデジタルシグナルプロセッサ装置。
【請求項５】
前記第２の演算回路は、直列に接続されパイプライン方式でデータの転送が可能な少なくとも１３個のレジスタと、該レジスタの任意のデータに対して演算可能な少なくとも１個の乗算器と１個の加減算器と２個の加算器と１個の減算器より構成され、
前記第１の演算回路は、行列〔Ｇ〕が式８により定義されるとき、
【数８】
0003697720.tif 000037
８×８の周波数空間の画像行列データ〔Ｃ〕に対して式９の演算を行い、
【数９】
0003697720.tif 000038
前記第２の演算回路は、行列〔Ｆ〕が式１０で定義されるとき、
【数１０】
0003697720.tif 000039
式１１の行列演算を繰り返し行うことにより、
【数１１】
0003697720.tif 000040
前記第１の演算回路において式９の行列演算の結果得られた行列〔Ｐ〕に対して、式１２の行列演算を実行し、
【数１２】
0003697720.tif 000041
式１２の演算の結果得られた行列〔Ｑ〕の転置行列〔Ｑt 〕に対する式１３の行列演算を、式１１の行列演算を繰り返すことにより行い、
【数１３】
0003697720.tif 000042
８×８の実空間の画像行列データ〔Ｘ〕を求める式１４の２次元８×８逆離散コサイン変換を行う
【数１４】
0003697720.tif 000043
請求項１に記載のデジタルシグナルプロセッサ装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、デジタル信号の処理を行う信号処理装置に関し、特に、２次元離散コサイン変換（ＤＣＴ（Discrete Cosine Transform)）、および、２次元逆離散コサイン変換（ＩＤＣＴ(Inverse DCT) ）を行うのに好ましいデジタルシグナルプロセッサ装置に関する。
【０００２】
【従来の技術】
近年、画像圧縮に関しては２次元８×８ＤＣＴ、および、２次元８×８ＩＤＣＴを用いる方法が主流を占めている。その２次元８×８ＤＣＴ、および、２次元８×８ＩＤＣＴは各々式１５および式１６で示される変換である。
【０００３】
【数１５】
0003697720.tif 000002
【０００４】
【数１６】
0003697720.tif 000003
【０００５】
式１５および式１６において、行列〔Ｘ〕は、たとえば８×８の実空間の画像行列データであり、行列〔Ｃ〕は行列〔Ｘ〕に対応する８×８の周波数空間の画像行列データである。行列〔Ｎ〕は行列〔Ｃ〕を行列〔Ｘ〕に変換するための８×８定数行列である。また、添え字の「t 」は転置行列を示し、たとえば行列〔Ｎ〕と行列〔Ｎt 〕は転置行列であることを示す。その行列〔Ｎ〕および行列〔Ｎt 〕は式１７、式１８のように表される。
【０００６】
【数１７】
0003697720.tif 000004
【０００７】
【数１８】
0003697720.tif 000005
【０００８】
ところで、式１５に示した８×８ＤＣＴの計算、および、式１６に示した８×８ＩＤＣＴの計算を、各々その計算式の通りに行うと、乗算回数が多くなり演算速度が非常に遅くなり、また、回路規模が大きくなるという問題を生じる。
この問題を解決し、乗算回数を減少させて高速演算を可能にし、さらに、回路規模が小さくできる変換方法としては、本願出願人による特開平６−３５９５２号公報に開示されている変換装置の演算方法が挙げられる。
以下、この特開平６−３５９５２号公報に開示されている８×８ＤＣＴの変換方法、および、８×８ＩＤＣＴの変換方法について説明する。
【０００９】
まず、この８×８ＤＣＴの変換方法によれば、式１９に示すように、行列〔Ｎ〕を、対角線成分が無理数で他の成分が全て「０」の式２０に示す行列〔Ｗ〕と、各成分が無理数、「＋１」、「−１」のいずれかの式２１に示す行列〔Ｍ〕とに行列分解する。
【００１０】
【数１９】
0003697720.tif 000006
【００１１】
【数２０】
0003697720.tif 000007
【００１２】
【数２１】
0003697720.tif 000008
【００１３】
また、式２２に示すように、行列〔Ｎt 〕を、行列〔Ｗ〕の転置行列である式２３に示す行列〔Ｗt 〕と、行列〔Ｍ〕の転置行列である式２４に示す行列〔Ｍt 〕とに行列分解する。
【００１４】
【数２２】
0003697720.tif 000009
【００１５】
【数２３】
0003697720.tif 000010
【００１６】
【数２４】
0003697720.tif 000011
【００１７】
そして、これらの行列分解した行列式に基づいて式１５を式２５に変換し、さらに、式２５の計算式を式２６に示すように３つの計算ステップに分割する。
【００１８】
【数２５】
0003697720.tif 000012
【００１９】
【数２６】
0003697720.tif 000013
【００２０】
次に、このステップＳ１〜Ｓ３の計算を順次行う。
式２６のステップＳ１の計算は、式２７に示す行列演算を８回繰り返すことにより実現できる。
【００２１】
【数２７】
0003697720.tif 000014
【００２２】
すなわち、入力データｘｘｋ（ｋ＝０〜７）として、行列〔Ｘ〕の第０行目のデータｘ０ｋ（ｋ＝０〜７）を入力し、式２７を計算することにより、行列〔Ｙ〕の第０行目のデータｙ０ｋ（ｋ＝０〜７）が出力データｙｙｋ（ｋ＝０〜７）として出力される。以降同様に、第１行目〜第７行目までのデータｘ１ｋ（ｋ＝０〜７）〜ｘ７ｋ（ｋ＝０〜７）を入力データとして式２７を計算することにより、行列〔Ｙ〕の第１行目から第７行目のデータｙ１ｋ（ｋ＝０〜７）〜ｙ７ｋ（ｋ＝０〜７）が順次出力され、行列〔Ｙ〕が得られる。
【００２３】
なお、式２７のシグナルフローを図８に示す。入力されたデータｘｘ０〜ｘｘ７に対して、図８に示すような各演算を施すことにより、出力データｙｙ０〜ｙｙ７が得られる。
【００２４】
一方、転置行列の性質より、式２８が成立する。
【００２５】
【数２８】
0003697720.tif 000015
【００２６】
これを利用すると、式２６のステップＳ２の計算も、式２７の計算を８回繰り返すことにより実現できる。行列〔Ｙ〕の、第０列目のデータｙｋ０（ｋ＝０〜７）、すなわち、行列〔Ｙt 〕の第０行目のデータを式２７に入力して計算を行うと、出力されたデータは、行列〔Ｚ〕の転置行列〔Ｚt 〕の第０行目のデータ、すなわち、行列〔Ｚ〕の第０列目のデータｚｋ０（ｋ＝０〜７）である。以降同様に、第１列目〜第７列目までのデータｙｋ１（ｋ＝０〜７）〜ｙｋ７（ｋ＝０〜７）を入力データとして式２７を計算することにより、行列〔Ｚ〕の第１列目から第７列目のデータｚｋ１（ｋ＝０〜７）〜ｚｋ７（ｋ＝０〜７）が順次出力され、行列〔Ｚ〕が得られる。
【００２７】
式２６のステップＳ３の計算は、行列〔Ｗ〕，〔Ｗt 〕が対角成分以外の要素が全て０の定数行列なので、行列〔Ｚ〕の各要素に各々所定の定数を乗じる演算に変換できる。その乗じる定数を行列〔Ｂ〕として式２９に示す。
【００２８】
【数２９】
0003697720.tif 000016
【００２９】
行列〔Ｂ〕の各要素を用いると、式２６のステップＳ３の計算は、式３０に示す計算に変換できる。
【００３０】
【数３０】
0003697720.tif 000017
【００３１】
このように、２次元８×８ＤＣＴの計算を行うには、式２６に従って、まず、８×８行列〔Ｘ〕の各行を単位として、図８に示す計算を行い、８×８行列〔Ｙ〕を行単位で求める（ステップＳ１）。次に、その行列〔Ｙ〕の各列を単位として、再び図８に示す計算を行い、８×８行列〔Ｚ〕を列単位に求める（ステップＳ２）。そして、８×８行列〔Ｚ〕の各要素に対して、式２９に示す行列〔Ｂ〕の対応する各要素を各々乗じることにより、８×８行列〔Ｃ〕の各要素を求める（ステップＳ３）。これにより、式１５に示した計算式をそのまま計算するより、少ない乗算回数で２次元８×８ＤＣＴ計算ができる。
【００３２】
次に、この特開平６−３５９５２号公報に開示されている８×８ＩＤＣＴの変換方法について説明する。
この８×８ＩＤＣＴの変換方法によれば、まず、式３１に示すように、行列〔Ｎ〕を、対角線成分が無理数で他の成分が全て「０」の式３２に示す行列〔Ｇ〕と、各成分が無理数、「＋１」、「−１」のいずれかの式３３に示す行列〔Ｆ〕とに行列分解する。
【００３３】
【数３１】
0003697720.tif 000018
【００３４】
【数３２】
0003697720.tif 000019
【００３５】
【数３３】
0003697720.tif 000020
【００３６】
また、式３４に示すように、行列〔Ｎt 〕を、行列〔Ｇ〕の転置行列である式３５に示す行列〔Ｇt 〕と、行列〔Ｆ〕の転置行列である式３６に示す行列〔Ｆt 〕とに行列分解する。
【００３７】
【数３４】
0003697720.tif 000021
【００３８】
【数３５】
0003697720.tif 000022
【００３９】
【数３６】
0003697720.tif 000023
【００４０】
そして、これらの行列分解した行列式に基づいて式１６を式３７に変換し、さらに、式３７の計算式を式３８に示すように３つの計算ステップに分割する。
【００４１】
【数３７】
0003697720.tif 000024
【００４２】
【数３８】
0003697720.tif 000025
【００４３】
次に、このステップＳ１〜Ｓ３の計算を順次行う。
式３８のステップＳ１の計算は、行列〔Ｇ〕，〔Ｇt 〕が対角成分以外の要素が全て０の定数行列なので、行列〔Ｃ〕の各要素に各々所定の定数を乗じる演算に変換できる。その乗じる定数を行列〔Ｈ〕として式３９に示す。行列〔Ｈ〕の各要素を用いると、式３８のステップＳ１の計算は、式４０に示す計算に変換できる。
【００４４】
【数３９】
0003697720.tif 000026
【００４５】
【数４０】
0003697720.tif 000027
【００４６】
式３８のステップＳ２の計算は、式４１に示す行列演算を８回繰り返すことにより実現できる。
【００４７】
【数４１】
0003697720.tif 000028
【００４８】
すなわち、入力データｐｐｋ（ｋ＝０〜７）として、行列〔Ｐ〕の第０行目のデータｐ０ｋ（ｋ＝０〜７）を入力し、式４１を計算することにより、行列〔Ｑ〕の第０行目のデータｑ０ｋ（ｋ＝０〜７）が出力データｑｑｋ（ｋ＝０〜７）として出力される。以降同様に、第１行目〜第７行目までのデータｐ１ｋ（ｋ＝０〜７）〜ｐ７ｋ（ｋ＝０〜７）を入力データとして式４１を計算することにより、行列〔Ｑ〕の第１行目から第７行目のデータｑ１ｋ（ｋ＝０〜７）〜ｑ７ｋ（ｋ＝０〜７）が順次出力され、行列〔Ｑ〕が得られる。
【００４９】
なお、式４１のシグナルフローを図９に示す。入力されたデータｐｐ０〜ｐｐ７に対して、図９に示すような各演算を施すことにより、出力データｑｑ０〜ｑｑ７が得られる。
【００５０】
一方、転置行列の性質より、式４２が成立する。
【００５１】
【数４２】
0003697720.tif 000029
【００５２】
これを利用すると、式３８のステップＳ３の計算も、式４１の計算を８回繰り返すことにより実現できる。行列〔Ｑ〕の、第０列目のデータｑｋ０（ｋ＝０〜７）、すなわち、行列〔Ｑt 〕の第０行目のデータを式４１に入力して計算を行うと、出力されたデータは、行列〔Ｘ〕の転置行列〔Ｘt 〕の第０行目のデータ、すなわち、行列〔Ｘ〕の第０列目のデータｘｋ０（ｋ＝０〜７）である。以降同様に、第１列目〜第７列目までのデータｑｋ１（ｋ＝０〜７）〜ｑｋ７（ｋ＝０〜７）を入力データとして式４１を計算することにより、行列〔Ｘ〕の第１列目から第７列目のデータｘｋ１（ｋ＝０〜７）〜ｘｋ７（ｋ＝０〜７）が順次出力され、行列〔Ｘ〕が得られる。
【００５３】
このように、２次元８×８ＩＤＣＴの計算を行うには、式４０に従って、まず、８×８行列〔Ｃ〕の各要素に対して、式３９に示す行列〔Ｈ〕の対応する各要素を各々乗じることにより、８×８行列〔Ｐ〕の各要素を求める（ステップＳ１）。次に、８×８行列〔Ｐ〕の各行を単位として、図９に示す計算を行い、８×８行列〔Ｑ〕を行単位で求める（ステップＳ２）。そして、その行列〔Ｑ〕の各列を単位として、再び図９に示す計算を行い、８×８行列〔Ｘ〕を列単位に求める（ステップＳ３）。
これにより、式１６に示した計算式をそのまま計算するより、少ない乗算回数で２次元８×８ＩＤＣＴ計算ができる。
【００５４】
このように高速な演算方法の２次元８×８ＤＣＴ、および、２次元８×８ＩＤＣＴは、通常、デジタルシグナルプロセッサ（以後、ＤＳＰと言う）によりその演算が実行され、画像データの圧縮、伸張が行われる。
図１０に、一般的なＤＳＰの構成を示す。
ＤＳＰ９０は、メインプロセッサ部９１、メモリ９４、ＩＯ部９５、および、制御部９６より構成される。メインプロセッサ部９１は、演算器９２と、レジスタファイル９３より構成される。また、メインプロセッサ部９１とメモリ９４間はデータバス９７により、メインプロセッサ部９１内の演算器９２とレジスタファイル９３間はデータバス９８により、各々データ転送可能なように接続されている。
【００５５】
このＤＳＰ９０の動作について説明する。外部からのデータは、ＩＯ部９５より入力され、メモリ９４に一時記憶される。メモリ９４に記憶されたデータは、データバス９７を介してメインプロセッサ部９１内のレジスタファイル９３に転送される。演算器９２はデータバス９８を介してレジスタファイル９３のデータを読み込み、演算処理を行い、演算結果のデータを再びレジスタファイル９３に書き込む。そして、レジスタファイル９３のデータはデータバス９７を介してメモリ９４に記憶された後、ＩＯ部９５より外部に出力される。これらの、データの転送、演算などの制御は制御部９６により行われる。
【００５６】
【発明が解決しようとする課題】
しかし、前述したような、乗算回数を減らして高速化した方法の２次元８×８ＤＣＴおよび２次元８×８ＩＤＣＴであっても、このような通常のＤＳＰを用いて変換を行う場合には、十分満足できる演算速度は実現できず、より高速に演算を行いたいという要求があった。
図１０に示すＤＳＰ９０において、式２４および式３６の各演算を行う場合、全ての演算は演算器９２によって行わなければならない。そのため、演算器９２の負荷が非常に大きくなり、ＤＣＴおよびＩＤＣＴの変換時間を短縮できなかった。また、演算器９２の負荷を減らすような構成、たとえば、コプロセッサ部を有する構成のＤＳＰであっても、式２４および式３６の演算を効率よく高速に実現できる構成のＤＳＰはなかった。
【００５７】
したがって、本発明の目的は、前述したような２次元８×８ＤＣＴおよび２次元８×８ＩＤＣＴの演算を効率よく高速に実現できる構成のＤＳＰを提供するこにある。
【００５８】
【課題を解決するための手段】
前述した演算方法の２次元８×８ＤＣＴおよび２次元８×８ＩＤＣＴの演算を効率よく行うために、コプロセッサを用いて、ＤＳＰの演算器の負荷を減らすようにした。そして、そのコプロセッサは、式２６のステップＳ１およびステップＳ２、および、式３８のステップＳ３、ステップＳ４の行列演算を高速に行えるようなコプロセッサを設けることにした。
【００５９】
したがって、本発明のデジタルシグナルプロセッサ装置は、データの入出力を行う入出力回路と、データを記憶するメモリ回路と、該メモリ回路に記憶されているデータに対して所定の演算を行う第一の演算回路とを有するデジタルシグナルプロセッサ装置であって、直列的に接続され、順次データを転送可能な複数の記憶素子と、前記記憶素子より供給されるデータを用いて所定の演算を行い、該演算の結果を所定の前記記憶素子に出力する各々並列に動作可能な複数の演算器と、前記複数の記憶素子の各記憶素子間に設けられ、順次入力されるデータのうち前記記憶素子からのデータもしくは前記演算器からの演算結果データのどちらかを選択する複数のデータセレクタと、を有し、順次入力される一連のデータを順次後段の前記記憶素子に転送し、該転送過程において前記演算器により所定の演算を行い、所望の工程に基づき前記データセレクタを適応的に切り替えて出力データ系列を得る第２の演算回路をさらに有する。
【００６０】
特定的には、本発明のＤＳＰ装置は、入力行列に対して、少なくとも１の対角成分が無理数であり他の成分が「０」である第１の行列と、各成分が無理数、「＋１」、「−１」のいずれかである第２の行列とに行列分解できる第１の係数行列を左側から、前記第２の行列の転置行列である第３の行列と、前記第１の行列の転置行列である第４の行列とに行列分解できる第２の係数行列を右側からそれぞれ乗算し、その乗算結果である出力行列を得るデジタルシグナルプロセッサ装置であって、前記第２の演算回路において、前記第２の行列と前記入力行列と前記第３の行列との乗算に相当する所定の計算を行い、前記第１の演算回路において、前記第２の演算回路回路の演算結果に対して左側から前記第１の行列を乗算し右側から前記第４の行列を乗算する演算に相当する所定の計算を行う。
【００６１】
好適には、前記第２の演算回路は、直列に接続されパイプライン方式でデータの転送が可能な少なくとも１３個のレジスタと、該レジスタの任意のデータに対して演算可能な少なくとも１個の乗算器と１個の加減算器と１個の加算器と２個の減算器より構成され、その第２の演算回路で式２６のステップＳ１およびステップＳ２の演算を行い、前記第１の演算回路で式２６のステップＳ３の演算を行うことにより、２次元８×８離散コサイン変換を行う。
【００６２】
【作用】
本発明のデジタルシグナルプロセッサ装置においては、複数の記憶素子の各記憶素子間に設けられた複数のデータセレクタでは、順次入力されるデータのうち記憶素子からのデータもしくは演算器からの演算結果データのどちらかを選択して出力する。そして、第２の演算回路において、入力データ列を順次パイプライン方式の記憶素子に転送し、その転送過程において演算器により所定の演算を行う。
【００６３】
好適には、前記第２の演算回路は、直列に接続されパイプライン方式でデータの転送が可能な少なくとも１３個のレジスタと、該レジスタの任意のデータに対して演算可能な少なくとも１個の乗算器と１個の加減算器と２個の加算器と１個の減算器より構成され、前記第１の演算回路で式３８のステップＳ１の演算を行い、前記第２の演算回路で式３８のステップＳ２およびステップＳ３の演算を行うことにより、２次元８×８逆離散コサイン変換を行う。
【００６４】
【作用】
本発明のＤＳＰ装置においては、第２の演算回路において、入力データの系列を順次パイプライン方式の記憶素子に入力し、その記憶素子を通過中のデータに対して、各々並列に動作する複数の演算器により演算を行うことができるので、式２６のステップＳ１およびステップＳ２、式３８のステップＳ２およびステップＳ３の行列演算を、高速に実行することができる。そして、第１の演算回路においては、式２６のステップＳ３および式３８のステップＳ１の演算を行えばよいので、その負荷が軽減できる。
【００６５】
【実施例】
本発明の一実施例のＤＳＰについて、図１〜図７を参照して説明する。
図１は、本実施例のＤＳＰの構成を示すブロック図である。
ＤＳＰ１０は、メインプロセッサ部１１、コプロセッサ部２０、ＩＯ部１５、メモリ１４、および、制御部１６より構成されている。メインプロセッサ部１１は演算器１２およびレジスタファイル１３より構成されている。メインプロセッサ部１１、メモリ１４、および、コプロセッサ部２０は、データバス１７を介して相互にデータの転送が可能な構成である。また、メインプロセッサ部１１の演算器１２はデータバス１８を介してレジスタファイル１３よりデータの読み出しおよび書き込みが可能な構成である。
【００６６】
まず、各部の構成について説明する。
ＩＯ部１５は、データの入出力を行うＩＯポートである。
メモリ１４は、データを記憶するメモリである。メモリ１４は、データバス１７を介してメインプロセッサ部１１およびコプロセッサ部２０よりデータを転送される。また、ＩＯ部１５より入出力されるデータは、一旦、メモリ１４に記憶され、ＩＯ部１５より出力されるデータも、メモリ１４に記憶されているデータより出力される。画像データ、および、圧縮画像データはこのメモリ１４に記憶される。
【００６７】
メインプロセッサ部１１の演算器１２は、四則演算、論理演算、シフト演算を行う演算回路である。演算器１２は、データバス１８を介してレジスタファイル１３よりデータを読み込み、所定の演算を実行して、演算結果のデータを再びレジスタファイル１３に書き込む。
レジスタファイル１３は、演算器１２で演算を行うためのデータ、および、演算結果のデータを格納する複数のレジスタより構成されるレジスタファイルである。
制御部１６は、前記各構成部、および、データバス１７、データバス１８を制御する制御部である。
【００６８】
コプロセッサ部２０の構成について図２を参照して説明する。
図２は、コプロセッサ部２０の構成を示すブロック図である。
コプロセッサ部２０は、１３個のレジスタＲ０〜Ｒ１２、１２個のデータセレクタＳ１〜Ｓ１２、２つの加減算器ＡＳ１，ＡＳ２、加算器ＡＤＤ、減算器ＳＵ、乗算器ＭＰＹ、および、内部データバスＢＵＳより構成される。
【００６９】
１３個のレジスタＲ０〜Ｒ１２は直列に接続されており、パイプラインレジスタを構成している。初段のレジスタＲ０は入力端子ＩＮに接続されており、最終段のレジスタＲ１２は出力端子ＯＵＴに接続されている。各レジスタＲ０〜Ｒ１２の間には、１２個のデータセレクタＳ１〜Ｓ１２が設けられている。このデータセレクタＳｉ（ｉ＝１〜１２）は、レジスタＲi-1 （ｉ＝０〜１１）からのデータか、内部データバスからのデータか、いずれかを選択するためのセレクタであり、選択されたデータは、次段のレジスタＲｉ（ｉ＝１〜１２）へ入力される。
【００７０】
加減算器ＡＳ１，ＡＳ２は、各々内部データバスＢＵＳと接続されており、内部データバスＢＵＳを介して供給されたレジスタＲ０〜Ｒ１２の任意の２つのレジスタのデータについて、加算または減算を行い、その結果を内部データバスＢＵＳを介して任意のレジスタに格納する。加減算器ＡＳ１，ＡＳ２においては、前記演算を１クロックサイクルで行う。
加算器ＡＤＤも、内部データバスＢＵＳと接続されており、レジスタＲ０〜Ｒ１２の任意の２つのレジスタのデータを加算し、その結果を任意のレジスタに格納する。この加算も１クロックサイクルで行われる。
減算器ＳＵＢも、内部データバスＢＵＳと接続されており、レジスタＲ０〜Ｒ１２の任意のレジスタのデータを減算値および被減算値として、減算を行い、その結果を任意のレジスタに格納する。この減算も１クロックサイクルで行われる。
【００７１】
乗算器ＭＰＹは、内部データバスＢＵＳと接続されており、レジスタＲ０〜Ｒ１２の任意のレジスタのデータと、制御部１６より供給される乗数との乗算を計算する。この乗算は２クロックサイクルで行われるが、乗算器ＭＰＹ内部が２段にパイプライン化されているため、データの入力、乗算結果の出力はともに１クロックサイクル周期で可能である。ただし、入力したデータに対する乗算結果は１クロックサイクル遅れて出力される。出力されたデータは、内部データバスＢＵＳを介して任意のレジスタに格納される。
【００７２】
内部データバスＢＵＳは、レジスタＲ０〜Ｒ１２のデータを各演算器に供給するため、制御部１６から乗算器ＭＰＹに乗数を供給するため、および、各演算器での演算結果をレジスタＲ０〜Ｒ１２に転送するためのデータバスである。これらの転送は、全て１クロックサイクルの間に行われる。そのために、このデータバスＢＵＳは、１クロックサイクルをさらに時分割した転送クロックにしたがって、この転送を行う。また、これらの転送のための各レジスタＲ０〜Ｒ１２、および、各演算器の制御は制御部１６からの制御信号により適宜行われる。
【００７３】
次に、このような構成のＤＳＰ１０により、前述した２次元８×８ＤＣＴの計算を行う方法について説明する。
まず、コプロセッサ部２０において、図８にシグナルフローを示した式２７の計算を行うことについて図３および図４を参照して説明する。
図３は、コプロセッサ部２０のレジスタＲ０〜Ｒ１２のデータの流れを示す図である。
図４は、コプロセッサ部２０の各演算器で行われる演算を示す図である。
【００７４】
まず、１〜８サイクル目に、入力端子ＩＮより入力データを、データｘｘ６，ｘｘ７，ｘｘ５，ｘｘ４，ｘｘ３，ｘｘ２，ｘｘ１，ｘｘ０の順に入力する。各データは、レジスタＲ０から順次後段のレジスタに格納される。
６サイクル目より入力された各データを用いて順次演算が行われる。
まず、６サイクル目に、レジスタＲ０に格納されているデータｘｘ３と、レジスタＲ１に格納されているデータｘｘ４を演算器ＡＤＤおよび演算器ＳＵＢに供給し、各々データｘｘ３、ｘｘ４の加算および減算を行い、その加算結果のデータｘａ３をレジスタＲ２に、減算結果のデータｘａ４をレジスタＲ１に格納する。
【００７５】
７サイクル目には、加算器ＡＤＤにおいて、レジスタＲ０に格納されているデータｘｘ２とレジスタＲ３に格納されているデータｘｘ５との加算が行われ、加算結果のデータｘａ２がレジスタＲ４に格納される。また、減算器ＳＵＢにおいては、レジスタＲ０に格納されているデータｘｘ２よりレジスタＲ３に格納されているデータｘｘ５が減じられ、減算結果のデータｘａ５がレジスタＲ１に格納される。
【００７６】
８サイクル目には、加算器ＡＤＤにおいて、レジスタＲ０に格納されているデータｘｘ１とレジスタＲ６に格納されているデータｘｘ６との加算が行われ、加算結果のデータｘａ１がレジスタＲ７に格納される。また、減算器ＳＵＢにおいては、レジスタＲ０に格納されているデータｘｘ１よりレジスタＲ６に格納されているデータｘｘ６が減じられ、減算結果のデータｘａ６がレジスタＲ１に格納される。
【００７７】
９サイクル目には、乗算器ＭＰＹにおいて、制御部１６より供給された乗数２ａ４（＝２×ｃｏｓ（４×π／１６））と、レジスタＲ１に格納されているデータｘａ６との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｘｂ５は１０サイクル目にレジスタＲ３に格納される。加減算器１ＡＳ２においては、レジスタＲ２に格納されているデータｘａ５と、レジスタＲ１に格納されているデータｘａ６との加算が行われ、加算結果のデータｘｂ６がレジスタＲ３に格納される。加算器ＡＤＤにおいては、レジスタＲ０に格納されているデータｘｘ０とレジスタＲ６に格納されているデータｘｘ７との加算を行い、加算結果のデータｘａ０をレジスタＲ７に格納する。減算器ＳＵＢにおいては、レジスタＲ０に格納されているデータｘｘ０よりレジスタＲ６に格納されているデータｘｘ７が減じられ、減算結果のデータｘａ７をレジスタＲ１に格納する。
【００７８】
１０サイクル目には、乗算器ＭＰＹにおいて、制御部１６より供給された乗数２ａ４（＝２×ｃｏｓ（４×π／１６））と、レジスタＲ１に格納されているデータｘａ７との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｘｂ４は１１サイクル目にレジスタＲ３に格納される。加減算器ＡＳ２においては、レジスタＲ４に格納されているデータｘａ４と、レジスタＲ１に格納されているデータｘａ５との加算が行われ、加算結果のデータｘｂ７がレジスタＲ５に格納される。加算器ＡＤＤにおいては、レジスタＲ８に格納されているデータｘａ１とレジスタＲ６に格納されているデータｘａ２との加算を行い、加算結果のデータｘｃ１をレジスタＲ９に格納する。減算器ＳＵＢにおいては、レジスタＲ８に格納されているデータｘａ１よりレジスタＲ６に格納されているデータｘａ２が減じられ、減算結果のデータｘｃ３をレジスタＲ７に格納する。
【００７９】
１１サイクル目には、加算器ＡＤＤにおいて、レジスタＲ８に格納されているデータｘａ０とレジスタＲ６に格納されているデータｘａ３との加算が行われ、加算結果のデータｘｃ０がレジスタＲ９に格納される。また、減算器ＳＵＢにおいては、レジスタＲ８に格納されているデータｘａ０よりレジスタＲ６に格納されているデータｘａ３が減じられ、減算結果のデータｘｃ２がレジスタＲ７に格納される。
【００８０】
１２サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｃ１とレジスタＲ９に格納されているデータｘｃ０との加算が行われ、加算結果のデータｙｙ０がレジスタＲ１２に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数２ａ４（＝２×ｃｏｓ（４×π／１６））と、レジスタＲ７に格納されているデータｘｃ２との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｘｄ２は１３サイクル目にレジスタＲ９に格納される。加減算器ＡＳ２においては、レジスタＲ８に格納されているデータｘｃ３と、レジスタＲ７に格納されているデータｘｃ２との加算が行われ、加算結果のデータｘｄ３がレジスタＲ９に格納される。加算器ＡＤＤにおいては、レジスタＲ４に格納されているデータｘｂ５とレジスタＲ６に格納されているデータｘｂ７との加算を行い、加算結果のデータｘｃ５をレジスタＲ７に格納する。減算器ＳＵＢにおいては、レジスタＲ４に格納されているデータｘｂ５よりレジスタＲ６に格納されているデータｘｂ７が減じられ、減算結果のデータｘｃ７をレジスタＲ５に格納する。
【００８１】
１３サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｃ０よりレジスタＲ１１に格納されているデータｘｃ１が減じられ、減算結果のデータｙｙ４がレジスタＲ１２に格納される。加算器ＡＤＤにおいては、レジスタＲ４に格納されているデータｘｂ４とレジスタＲ６に格納されているデータｘｂ６との加算を行い、加算結果のデータｘｃ４をレジスタＲ７に格納する。減算器ＳＵＢにおいては、レジスタＲ４に格納されているデータｘｂ４よりレジスタＲ６に格納されているデータｘｂ６が減じられ、減算結果のデータｘｃ６をレジスタＲ５に格納する。
【００８２】
１４サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ３とレジスタＲ９に格納されているデータｘｄ２との加算が行われ、加算結果のデータｙｙ２がレジスタＲ１２に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数２ａ４（＝２×ｃｏｓ（４×π／１６））と、レジスタＲ７に格納されているデータｘｃ４との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｘｄ４は１５サイクル目にレジスタＲ９に格納される。加減算器ＡＳ２においては、レジスタＲ８に格納されているデータｘｃ５と、レジスタＲ７に格納されているデータｘｃ４との加算が行われ、加算結果のデータｘｄ５がレジスタＲ９に格納される。
【００８３】
１５サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ２よりレジスタＲ１１に格納されているデータｘｄ３が減じられ、減算結果のデータｙｙ６がレジスタＲ１２に格納される。
【００８４】
１６サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ５とレジスタＲ９に格納されているデータｘｄ４との加算が行われ、加算結果のデータｙｙ１がレジスタＲ１２に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数２ａ４（＝２×ｃｏｓ（４×π／１６））と、レジスタＲ７に格納されているデータｘｃ６との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｘｄ６は１７サイクル目にレジスタＲ９に格納される。加減算器ＡＳ２においては、レジスタＲ８に格納されているデータｘｃ７と、レジスタＲ７に格納されているデータｘｃ６との加算が行われ、加算結果のデータｘｄ７がレジスタＲ９に格納される。
【００８５】
１７サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ４よりレジスタＲ１１に格納されているデータｘｄ５が減じられ、減算結果のデータｙｙ７がレジスタＲ１２に格納される。
１８サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ７とレジスタＲ９に格納されているデータｘｄ６との加算が行われ、加算結果のデータｙｙ３がレジスタＲ１２に格納される。
１９サイクル目には、加減算器ＡＳ１において、レジスタＲ１０に格納されているデータｘｄ６よりレジスタＲ１１に格納されているデータｘｄ７が減じられ、減算結果のデータｙｙ５がレジスタＲ１２に格納される。
【００８６】
コプロセッサ部２０においては、このようにして図８に示した式２７の計算を実行する。計算結果は、１３〜２０サイクルの間に、データｙｙ０，ｙｙ４，ｙｙ２，ｙｙ６，ｙｙ１，ｙｙ７，ｙｙ３，ｙｙ５の順に出力端子ＯＵＴより出力される。
【００８７】
次に、２次元８×８ＤＣＴの計算を行う方法について説明する。
まず、ＩＯ部１５より入力された入力データである行列〔Ｘ〕は、順次メモリ１４に記憶される。行列〔Ｘ〕は、６４個の要素ｘｉｊ（ｉ，ｊ＝０〜７）より構成される８×８の行列である。
入力された行列データ〔Ｘ〕に対して、まず、式２６のステップＳ１の演算が、コプロセッサ部２０において行われる。
【００８８】
まず、メモリ１４に記憶されている行列〔Ｘ〕の第０行目のデータが、データバス１７を介して、データｘ０６，ｘ０７，ｘ０５，ｘ０４，ｘ０３，ｘ０２，ｘ０１，ｘ００の順にコプロセッサ部２０に入力される。入力されたデータは、コプロセッサ部２０において、前述した処理が行われ、式２７が計算される。この計算結果のデータは、式２６の行列〔Ｙ〕の第０行目のデータに相当し、前述したように、データｙ００，ｙ０４，ｙ０２，ｙ０６，ｙ０１，ｙ０７，ｙ０３，ｙ０５の順に出力される。なお、データｙｉｊは行列〔Ｙ〕の要素であり、ｉ，ｊ＝０〜７である。出力されたデータはデータバス１７を介してメモリ１４に記憶される。
【００８９】
以下同様にして、行列〔Ｘ〕の第１〜７行目のデータが、順次コプロセッサ部２０に入力され、式２７の計算が行われ、計算結果が再びメモリ１４に記憶される。その結果、式２６の行列〔Ｙ〕が得られる。
【００９０】
次に、式２６のステップＳ２の演算を、同じくコプロセッサ部２０において同様に行う。式２６のステップＳ２の演算は、式２８のように変換できるので、実際にはこの式２８の演算を行う。
まず、メモリ１４に記憶されている行列〔Ｙ〕の第０列目のデータが、データバス１７を介して、データｙ６０，ｙ７０，ｙ５０，ｙ４０，ｙ３０，ｙ２０，ｙ１０，ｙ００の順にコプロセッサ部２０に入力される。入力されたデータは、コプロセッサ部２０において、前述した処理が行われ、式２７が計算される。この計算結果のデータは、式２８の行列〔Ｚ〕の第０列目のデータに相当し、前述したように、データｚ００，ｚ４０，ｚ２０，ｚ６０，ｚ１０，ｚ７０，ｚ３０，ｚ５０の順に出力される。なお、データｚｉｊは行列〔Ｚ〕の要素であり、ｉ，ｊ＝０〜７である。出力されたデータはデータバス１７を介してメモリ１４に記憶される。
【００９１】
以下同様にして、行列〔Ｙ〕の第１〜７列目のデータが、順次コプロセッサ部２０に入力され、式２７の計算が行われ、計算結果が再びメモリ１４に記憶される。その結果、式２６および式２８の行列〔Ｚ〕が得られる。
【００９２】
最後に、式２６のステップＳ３の演算を、メインプロセッサ部１１において行う。まず、メモリ１４に記憶されている行列〔Ｚ〕のデータｚ００を読み出し、データバス１７、データバス１８を介してメインプロセッサ部１１のレジスタファイル１３に格納する。また、メモリ１４に予め記憶されている式２９の定数行列〔Ｂ〕の、データｚ００に対応するデータｂ００も同様にレジスタファイル１３に転送する。そして、演算器１２において、データｚ００とデータｂ００の乗算が行われ、演算結果のデータｃ００がレジスタファイル１３に格納される。その結果のデータｃ００は、再びデータバス１７、データバス１８を介してメモリ１４に記憶される。以下同様にして、行列〔Ｚ〕の各要素に対して、行列〔Ｂ〕の対応する要素との乗算が計算される。これにより、式２６のステップＳ３の計算結果の行列〔Ｃ〕が得られる。
【００９３】
このように、ＤＳＰ１０においては、式２６のステップＳ１およびステップＳ２の演算はコプロセッサ部２０で、ステップＳ３の演算はメインプロセッサ部１１で実行して、２次元８×８ＤＣＴの演算が行うことができる。
したがって、メインプロセッサ部１１に負荷が集中しない。また、メインプロセッサ部１１とコプロセッサ部２０の処理は並列に行うことができる。そのため、高速に、効率よく２次元８×８ＤＣＴの演算が行える。
【００９４】
次に、このような構成のＤＳＰ１０により、前述した２次元８×８ＩＤＣＴの計算を行う方法についてを参照して説明する。
まず、コプロセッサ部２０において、図９にシグナルフローを示した式４１の計算を行うことについて図５および図６を参照して説明する。
図５は、コプロセッサ部２０のレジスタＲ０〜Ｒ１２のデータの流れを示す図である。
図６は、コプロセッサ部２０の各演算器で行われる演算を示す図である。
【００９５】
まず、入力端子ＩＮより１〜８サイクル目に入力データｐｐ３，ｐｐ５，ｐｐ１，ｐｐ７，ｐｐ２，ｐｐ６，ｐｐ０，ｐｐ４を順次入力する。各データはレジスタＲ０から順次後段のレジスタに格納される。
３サイクル目より入力された各データを用いて順次演算が行われる。
まず、３サイクル目に、加減算器ＡＳ１において、レジスタＲ０に格納されているデータｐｐ５とレジスタＲ１に格納されているデータｐｐ３との加算が行われ、加算結果のデータｐａ６がレジスタＲ３に格納される。
【００９６】
４サイクル目には、加減算器ＡＳ１において、レジスタＲ２に格納されているデータｐｐ３よりレジスタＲ１に格納されているデータｐｐ５が減じられ、減算結果のデータｐａ７がレジスタＲ３に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数ａａ６｛＝１／（２×ｃｏｓ（６×π／１６））｝と、レジスタＲ３に格納されているデータｐａ６との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｐｂ６は５サイクル目にレジスタＲ５に格納される。
【００９７】
５サイクル目に、加減算器ＡＳ１において、レジスタＲ０に格納されているデータｐｐ７と、レジスタＲ１に格納されているデータｐｐ１との加算が行われ、加算結果のデータｐａ４がレジスタＲ３に格納される。
【００９８】
６サイクル目には、加減算器ＡＳ１において、レジスタＲ２に格納されているデータｐｐ１よりレジスタＲ１に格納されているデータｐｐ７が減じられ、減算結果のデータｐａ５がレジスタＲ３に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数ａａ２｛＝１／（２×ｃｏｓ（２×π／１６））｝と、レジスタＲ３に格納されているデータｐａ４との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｐｂ４は７サイクル目にレジスタＲ５に格納される。加減算器ＡＳ２においては、レジスタＲ４に格納されているデータｐａ７よりレジスタＲ５に格納されているデータｐｂ６が減じられ、減算結果のデータｐｂ７がレジスタＲ５に格納される。
【００９９】
７サイクル目に、加減算器ＡＳ１において、レジスタＲ０に格納されているデータｐｐ６とレジスタＲ１に格納されているデータｐｐ２との加算が行われ、加算結果のデータｐａ２がレジスタＲ３に格納される。
【０１００】
８サイクル目には、加減算器ＡＳ１において、レジスタＲ２に格納されているデータｐｐ２よりレジスタＲ１に格納されているデータｐｐ６が減じられ、減算結果のデータｐａ３がレジスタＲ３に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数ａａ４｛＝１／（２×ｃｏｓ（４×π／１６））｝と、レジスタＲ３に格納されているデータｐａ２との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｐｂ２は９サイクル目にレジスタＲ５に格納される。加減算器ＡＳ２においては、レジスタＲ４に格納されているデータｐａ５よりレジスタＲ５に格納されているデータｐｂ４が減じられ、減算結果のデータｐｂ５がレジスタＲ５に格納される。加算器ＡＤＤにおいては、レジスタＲ５に格納されているデータｐｂ４とレジスタＲ７に格納されているデータｐｂ５との加算が行われ、加算結果のデータｐｃ４がレジスタＲ８に格納される。減算器ＳＵＢにおいては、レジスタＲ５に格納されているデータｐｂ４よりレジスタＲ７に格納されているデータｐｂ６が減じられ、減算結果のデータｐｃ６がレジスタＲ６に格納される。
【０１０１】
９サイクル目には、加減算器ＡＳ１において、レジスタＲ０に格納されているデータｐｐ４とレジスタＲ１に格納されているデータｐｐ０との加算が実行され、加算結果のデータｐａ０がレジスタＲ３に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数ａａ４｛＝１／（２×ｃｏｓ（４×π／１６））｝と、レジスタＲ８に格納されているデータｐｃ４との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｐｄ４は１０サイクル目にレジスタＲ１０に格納される。加算器ＡＤＤにおいては、レジスタＲ５に格納されているデータｐｂ５とレジスタＲ７に格納されているデータｐｂ７との加算が行われ、加算結果のデータｐｃ５がレジスタＲ８に格納される。減算器ＳＵＢにおいては、レジスタＲ５に格納されているデータｐｂ５よりレジスタＲ７に格納されているデータｐｂ７が減じられ、減算結果のデータｐｃ７がレジスタＲ６に格納される。
【０１０２】
１０サイクル目には、加減算器ＡＳ１において、レジスタＲ２に格納されているデータｐｐ０よりレジスタＲ１に格納されているデータｐｐ４が減じられ、減算結果のデータｐａ１がレジスタＲ３に格納される。乗算器ＭＰＹにおいては、制御部１６より供給された乗数ａａ４｛＝１／（２×ｃｏｓ（４×π／１６））｝と、レジスタＲ８に格納されているデータｐｃ５との乗算が行われる。この乗算には２サイクルが必要なため、この乗算結果のデータｐｄ５は１１サイクル目にレジスタＲ１０に格納される。加減算器ＡＳ２においては、レジスタＲ４に格納されているデータｐａ３よりレジスタＲ５に格納されているデータｐｂ２が減じられ、減算結果のデータｐｂ３がレジスタＲ５に格納される。加算器ＡＤＤにおいては、レジスタＲ３に格納されているデータｐａ０とレジスタＲ５に格納されているデータｐｂ２との加算が行われ、加算結果のデータｐｃ０がレジスタＲ４に格納される。減算器ＳＵＢにおいては、レジスタＲ３に格納されているデータｐａ０よりレジスタＲ５に格納されているデータｐｂ２が減じられ、減算結果のデータｐｃ２がレジスタＲ６に格納される。
【０１０３】
１１サイクル目には、加減算器ＡＳ２において、レジスタＲ７に格納されているデータｐｃ７よりレジスタＲ１０に格納されているデータｐｄ４が減じられ、減算結果のデータｐｄ７がレジスタＲ８に格納される。加算器ＡＤＤにおいては、レジスタＲ３に格納されているデータｐａ１とレジスタＲ５に格納されているデータｐｂ３との加算が行われ、加算結果のデータｐｃ１がレジスタＲ４に格納される。減算器ＳＵＢにおいては、レジスタＲ３に格納されているデータｐａ１よりレジスタＲ５に格納されているデータｐｂ３が減じられ、減算結果のデータｐｃ３がレジスタＲ６に格納される。
【０１０４】
１２サイクル目には、加減算器ＡＳ２において、レジスタＲ９に格納されているデータｐｃ６よりレジスタＲ１０に格納されているデータｐｄ５が減じられ、減算結果のデータｐｄ６がレジスタＲ１０に格納される。加算器ＡＤＤにおいては、レジスタＲ５に格納されているデータｐｃ０とレジスタＲ１１に格納されているデータｐｄ４との加算が行われ、加算結果のデータｑｑ０がレジスタＲ１２に格納される。減算器ＳＵＢにおいては、レジスタＲ５に格納されているデータｐｃ０よりレジスタＲ１１に格納されているデータｐｄ４が減じられ、減算結果のデータｑｑ７がレジスタＲ６に格納される。
【０１０５】
１３サイクル目には、加算器ＡＤＤにおいて、レジスタＲ５に格納されているデータｐｃ１とレジスタＲ１１に格納されているデータｐｄ５との加算が行われ、加算結果のデータｑｑ１がレジスタＲ１２に格納される。減算器ＳＵＢにおいては、レジスタＲ５に格納されているデータｐｃ１よりレジスタＲ１１に格納されているデータｐｄ５が減じられ、減算結果のデータｑｑ６がレジスタＲ６に格納される。
【０１０６】
１４サイクル目には、加算器ＡＤＤにおいて、レジスタＲ８に格納されているデータｐｃ３とレジスタＲ１１に格納されているデータｐｄ６との加算が行われ、加算結果のデータｑｑ２がレジスタＲ１２に格納される。減算器ＳＵＢにおいては、レジスタＲ８に格納されているデータｐｃ３よりレジスタＲ１１に格納されているデータｐｄ６が減じられ、減算結果のデータｑｑ５がレジスタＲ９に格納される。
【０１０７】
１５サイクル目には、加算器ＡＤＤにおいて、レジスタＲ１０に格納されているデータｐｃ２とレジスタＲ１１に格納されているデータｐｄ７との加算が行われ、加算結果のデータｑｑ３がレジスタＲ１２に格納される。減算器ＳＵＢにおいては、レジスタＲ１０に格納されているデータｐｃ２よりレジスタＲ１１に格納されているデータｐｄ７が減じられ、減算結果のデータｑｑ４がレジスタＲ１１に格納される。
【０１０８】
コプロセッサ部２０においては、このようにして図９に示した式４１の計算を実行する。計算結果は、１３〜２０サイクルの間に、データｑｑ０，ｑｑ１，ｑｑ２，ｑｑ３，ｑｑ４，ｑｑ５，ｑｑ７，ｑｑ６の順に出力される。
【０１０９】
次に、２次元８×８ＩＤＣＴの計算を行う方法について説明する。
まず、ＩＯ部１５より入力された入力データである行列〔Ｃ〕は、順次メモリ１４に記憶される。行列〔Ｃ〕は、６４個の要素ｃｉｊ（ｉ，ｊ＝０〜７）より構成される８×８の行列である。
入力された行列データ〔Ｃ〕に対して、まず、式３８のステップＳ１の演算が、メインプロセッサ部１１において行われる。
【０１１０】
まず、メモリ１４に記憶されている行列〔Ｃ〕のデータｃ００を読み出し、データバス１７、データバス１８を介してメインプロセッサ部１１のレジスタファイル１３に格納する。また、メモリ１４に予め記憶されている式３９に示す定数行列〔Ｈ〕の、データｃ００に対応するデータｈ００も同様にレジスタファイル１３に転送する。そして、演算器１２において、データｚ００とデータｈ００の乗算が行われ、演算結果のデータｐ００がレジスタファイル１３に格納される。その結果のデータｐ００は、再びデータバス１７、データバス１８を介してメモリ１４に記憶される。以下同様にして、行列〔Ｃ〕の各要素に対して、行列〔Ｈ〕の対応する要素との乗算が計算される。これにより、式３８のステップＳ１の計算結果の行列〔Ｐ〕が得られる。
【０１１１】
次に、行列〔Ｐ〕に対して、式３８のステップＳ２の演算が、コプロセッサ部２０において行われる。
メモリ１４に記憶されている行列〔Ｐ〕の第０行目のデータが、データバス１７を介して、データｐ０３，ｐ０５，ｐ０１，ｐ０７，ｐ０２，ｐ０６，ｐ００，ｐ０４の順にコプロセッサ部２０に入力される。入力されたデータは、コプロセッサ部２０において、前述した処理が行われ、式４１が計算される。この計算結果のデータは、式３８の行列〔Ｑ〕の第０行目のデータに相当し、前述したように、データｑ００，ｑ０１，ｑ０２，ｑ０３，ｑ０４，ｑ０５，ｑ０７，ｑ０６の順に出力される。なお、データｑｉｊは行列〔Ｑ〕の要素であり、ｉ，ｊ＝０〜７である。出力されたデータはデータバス１７を介してメモリ１４に記憶される。
【０１１２】
以下同様にして、行列〔Ｐ〕の第１〜７行目のデータが、順次コプロセッサ部２０に入力され、式４１の計算が行われ、計算結果が再びメモリ１４に記憶される。その結果、式３８の行列〔Ｑ〕が得られる。
【０１１３】
最後に、式３８のステップＳ３の演算を、同じくコプロセッサ部２０において同様に行う。式３８のステップＳ３の演算は、式４２のように変換できるので、実際にはこの式４２の演算を行う。
したがって、まず、メモリ１４に記憶されている行列〔Ｑ〕の第０列目のデータが、データバス１７を介して、データｑ３０，ｑ５０，ｑ１０，ｑ７０，ｑ２０，ｑ６０，ｑ００，ｑ４０の順にコプロセッサ部２０に入力される。入力されたデータは、コプロセッサ部２０において、前述した処理が行われ、式４１が計算される。この計算結果のデータは、式４２の行列〔Ｘ〕の第０列目のデータに相当し、前述したように、データｘ００，ｘ１０，ｘ２０，ｘ３０，ｘ４０，ｘ５０，ｘ７０，ｘ６０の順に出力される。なお、データｘｉｊは行列〔Ｘ〕の要素であり、ｉ，ｊ＝０〜７である。出力されたデータはデータバス１７を介してメモリ１４に記憶される。
【０１１４】
以下同様にして、行列〔Ｑ〕の第１〜７列目のデータが、順次コプロセッサ部２０に入力され、式４１の計算が行われ、計算結果が再びメモリ１４に記憶される。その結果、式３８および式４２の行列〔Ｘ〕が得られる。
【０１１５】
このように、ＤＳＰ１０においては、式３８のステップＳ１の演算はメインプロセッサ部１１で、ステップＳ２およびステップＳ３の演算はコプロセッサ部２０で実行して、２次元８×８ＩＤＣＴの演算が行うことができる。
したがって、メインプロセッサ部１１に負荷が集中しない。また、メインプロセッサ部１１とコプロセッサ部２０の処理は並列に行うことができる。そのため、高速に、効率よく２次元８×８ＩＤＣＴの演算が行える。
【０１１６】
なお、本発明は本実施例に限られるものではなく、本実施例以外の種々の形態で実現されてよい。
たとえば、コプロセッサ部２０の構成は、図２に示した本実施例の構成に限られず種々の構成のコプロセッサを用いてよい。
【０１１７】
本実施例においては、コプロセッサ部２０は、１個の乗算器、２個の加減算器、１個の加算器、１個の減算器を有する構成とした。しかし、これに２次元８×８ＤＣＴおよび２次元８×８ＩＤＣＴの演算を行う場合の最適な一構成例であり、これ以外の構成の演算器でもよい。
たとえば、２次元８×８ＤＣＴの演算のみを行う場合には、１個の乗算器、１個の加減算器、２個の加算器、１個の減算器を有する構成でよい。また、２次元８×８ＩＤＣＴの演算のみを行う場合には、１個の乗算器、１個の加減算器、１個の加算器、２個の減算器を有する構成でよい。
【０１１８】
本発明のＤＳＰ装置は、レジスタを直列に接続してパイプラインレジスタを形成し、そのパイプラインレジスタをデータがワードシリアルに通過していく間に必要なデータを、適切な時刻に演算器に供給し、演算結果を再びパイプラインレジスタに戻すことが可能な構成のコプロセッサを有することを特徴とする。
そのようなコプロセッサの一般的な構成は図７のように示される。
図７に示すコプロセッサ部３０は、直列に接続された複数のレジスタよりなるパイプラインレジスタＰＬと、そのパイプラインレジスタＰＬの任意のレジスタのデータに対して演算を行い、任意のレジスタにデータを出力可能な演算器ＥＸＵ１〜ＥＸＵ４と、前記パイプラインレジスタＰＬと演算器ＥＸＵ１〜ＥＸＵ４とのデータの転送を行う内部データバスＢＵＳより構成される。
このような構成のコプロセッサを有するＤＳＰ装置であれば、適宜制御を行うことにより、メインプロセッサ部のみのＤＳＰと比較して、高速に効率よく、２次元８×８ＤＣＴ、または、２次元８×８ＩＤＣＴが実行可能である。
【０１１９】
また、コプロセッサ部２０の内部データバスＢＵＳは、レジスタＲ０〜Ｒ１２および各演算器の間でデータを転送をするためのデータバスであり、この内部データバスＢＵＳでは、１クロックサイクルをさらに時分割した転送クロックに従って転送を行い、全ての転送を１クロックサイクル内で行っていた。しかし、内部データバスＢＵＳの機能は、各演算器と各レジスタのデータの転送であり、これ以外の他の転送手段を用いてもよい。特に、本ＤＳＰの動作速度が高速になった場合、さらに高周波数で動作するこのデータ転送が、全体としての高速化の妨げとなる場合などには、次のような転送手段を用いるのが好ましい。
【０１２０】
たとえば、内部データバスＢＵＳのバス幅を拡張して、複数のデータの転送が平行に行えるような構成にしてよい。平行なバスの数に応じて、前記転送クロックのサイクルを長くすることができる。また、図２に示したコプロセッサ部２０においては、５系統のデータバスを用いるようにすれば、各演算器ごとに１つのデータバスを専有することができる。
さらに、各演算器の各入力、また各レジスタへの入力を、各々並列に任意に選択できるような構成にしてもよい。この場合、バス形式のデータ転送手段とは言えず、複数のスイッチ、セレクタなどの選択手段により構成されたデータ転送手段である。
【０１２１】
さらに、本ＤＳＰが、ＤＣＴおよびＩＤＣＴ専用のＤＳＰとして用いる場合のように、特定の用途、特定の演算のために用いられる場合であれば、全てのレジスタと演算器の間でデータの転送が可能なような転送手段を設ける必要はない。その特定の演算に基づいた所定の組み合わせで、各々データの転送が可能なような転送手段でよい。すなわち、ある演算器へのデータの入力としては、特定のレジスタのデータが入力可能、あるいは、特定の複数レジスタからのデータが選択可能なように、データバス、セレクタへ配線されているような構成でよい。
【０１２２】
また、本ＤＳＰ装置は、物理的に１つのＬＳＩチップ上に構成されるか、あるいは、複数のＬＳＩチップ上に構成されるかを限定されるものではない。１つのＬＳＩチップ上に構成し、ＤＣＴ／ＩＤＣＴ機能を搭載したＤＳＰチップ、あるいは、ＤＣＴ／ＩＤＣＴ専用ＤＳＰとして実施してもよい。また、そのコプロセッサ部と高速にデータの転送が可能なデータ転送手段を別のＬＳＩチップ上に設け、メインプロセッサ部を有する汎用ＤＳＰチップと共に２個のＬＳＩチップにより構成してもよい。
【０１２３】
【発明の効果】
本発明のＤＳＰ装置によれば、入力データ系列を順次パイプライン方式の記憶素子に入力し、その記憶素子を通過中のデータに対して各々並列に動作する複数の演算器により演算を行うことができるコプロセッサ部を設けたので、行列演算を、高速に実行することができた。また、そのため、メインプロセッサ部の負荷が軽減でき、演算時間が短縮できた。
したがって、２次元８×８ＤＣＴおよび２次元８×８ＩＤＣＴの演算を効率よく高速に実現できるＤＳＰを提供できた。
【図面の簡単な説明】
【図１】本実施例のＤＳＰの構成を示すブロック図である。
【図２】図１に示したＤＳＰのコプロセッサ部の構成を示すブロック図である。
【図３】２次元８×８ＤＣＴの演算を行う時の図１に示したＤＳＰのコプロセッサ部の各レジスタのデータの流れを示す図である。
【図４】２次元８×８ＤＣＴの演算を行う時の図１に示したＤＳＰのコプロセッサ部の各演算器で行われる演算を示す図である。
【図５】２次元８×８ＩＤＣＴの演算を行う時の図１に示したＤＳＰのコプロセッサ部の各レジスタのデータの流れを示す図である。
【図６】２次元８×８ＩＤＣＴの演算を行う時の図１に示したＤＳＰのコプロセッサ部の各演算器で行われる演算を示す図である。
【図７】本発明のＤＳＰ装置に用いるコプロセッサ部の一般的構成を示す図である。
【図８】式２７のシグナルフローである。
【図９】式４１のシグナルフローである。
【図１０】通常のＤＳＰの構成を示すブロック図である。
【符号の説明】
１０…ＤＳＰ
１１…メインプロセッサ部          １２…演算器
１３…レジスタファイル            １４…メモリ
１５…ＩＯ部                      １６…制御部
１７、１８…データバス
２０…コプロセッサ部
Ｒ０〜Ｒ１２…レジスタ            Ｓ１〜Ｓ１２…データセレクタ
ＡＳ１，ＡＳ２…加減算器          ＡＤＤ…加算器
ＳＵＢ…減算器                    ＭＰＹ…乗算器
ＢＵＳ…内部データバス            ＩＮ…入力端子
ＯＵＴ…出力端子
３０…コプロセッサ部
ＰＬ…パイプラインレジスタ        ＢＵＳ…内部データバス
ＥＸＵ１〜ＥＸＵ４…演算器
９０…ＤＳＰ
９１…メインプロセッサ部          ９２…演算器
９３…レジスタファイル            ９４…メモリ
９５…ＩＯ部                      ９６…制御部
９７、９８…データバス
【図１】
0003697720.tif 000044
【図２】
0003697720.tif 000045
【図３】
0003697720.tif 000046
【図４】
0003697720.tif 000047
【図５】
0003697720.tif 000048
【図６】
0003697720.tif 000049
【図７】
0003697720.tif 000050
【図８】
0003697720.tif 000051
【図９】
0003697720.tif 000052
【図１０】
0003697720.tif 000053