(57)【要約】【課題】ベクトル演算用のプロセッサを制御するプロセッサのオーバヘッドを少なくしてプロセッサ全体の性能の低下を防止することができるプロセッサを実現する。【解決手段】プロセッサ１は、ベクトル演算のためのベクトル演算用パラメータを出力する第１のプロセッサ２と、ベクトル演算を前記ベクトル演算用パラメータに基づいて実行する第２のプロセッサ３とを含む。第２のプロセッサ３は、ベクトル演算用パラメータを格納する第１のレジスタ２６と、第１のプロセッサ２から指定された命令に従って、第１のレジスタ２６にベクトル演算用パラメータを書き込むスカラプロセッサ３１と、第１のプロセッサ２により指定された命令を、第１のレジスタ２６に格納されたベクトル演算用パラメータに基づいて実行する１以上のベクトルプロセッサ３２，３３とを有する。【選択図】図１
2008158699.tif 000002
【特許請求の範囲】
【請求項１】
ベクトル演算のためのベクトル演算用パラメータを出力する第１のプロセッサと、
前記ベクトル演算を前記ベクトル演算用パラメータに基づいて実行する第２のプロセッサと、
を含み、
前記第２のプロセッサは、
前記ベクトル演算用パラメータを格納する第１のレジスタと、
前記第１のプロセッサから指定された命令に従って、前記第１のレジスタに前記ベクトル演算用パラメータを書き込むスカラプロセッサと、
前記第１のプロセッサにより指定された命令を、前記第１のレジスタに格納された前記ベクトル演算用パラメータに基づいて実行する１以上のベクトルプロセッサと、
を有することを特徴とするプロセッサ。
【請求項２】
前記スカラプロセッサと前記第１のレジスタとを接続するように設けられ、前記ベクトル演算用パラメータを複数個、並列に書き込むための、該複数個と同じ数の複数の信号線を有することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記１以上のベクトルプロセッサにおいて実行可能な複数の命令を保持する命令保持部と、
記憶部から前記命令保持部に前記複数の命令を書き込むために、前記複数の命令を前記記憶部から前記命令保持部に転送する第１の転送部と、
を有し、
前記１以上のベクトルプロセッサは、それぞれ、前記指定された命令のアドレスに基づいて、前記複数の命令の中から前記第１のプロセッサにより指定された命令を実行することを特徴とする請求項２に記載のプロセッサ。
【請求項４】
ベクトル演算のためのベクトル演算用パラメータを出力する第１のプロセッサと、
それぞれが、前記ベクトル演算を前記ベクトル演算用パラメータに基づいて実行する複数の第２のプロセッサと、
を含み、
前記複数の第２のプロセッサは、それぞれ、
前記ベクトル演算用パラメータを格納する第１のレジスタと、
前記第１のプロセッサから指定された命令に従って、前記第１のレジスタに前記ベクトル演算用パラメータを書き込むスカラプロセッサと、
前記第１のプロセッサにより指定された命令を、前記第１のレジスタに格納された前記ベクトル演算用パラメータに基づいて実行する１以上のベクトルプロセッサと、
を有することを特徴とするプロセッサ。
【請求項５】
ベクトル演算のためのベクトル演算用パラメータを出力する第１のプロセッサと、
前記ベクトル演算を前記ベクトル演算用パラメータに基づいて実行する第２のプロセッサと、
を含み、
前記第２のプロセッサは、
前記ベクトル演算用パラメータを格納する第１のレジスタと、
前記第１のプロセッサから指定された命令に従って、前記第１のレジスタに前記ベクトル演算用パラメータを書き込む第１のスカラプロセッサと、
前記第１のプロセッサから指定された命令に従って、所定のスカラ演算を行う第２のスカラプロセッサと、
前記第１のプロセッサにより指定された命令を、前記第１のレジスタに格納された前記ベクトル演算用パラメータに基づいて実行する１以上のベクトルプロセッサと、
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサに関し、特に、ベクトル演算を実行可能なプロセッサに関する。
【背景技術】
【０００２】
従来より、複数のプロセッサを含むマルチプロセッサが開発され、実用化されている。例えば、コントロールプロセッサが全体的な処理及び例外的な処理を行い、ベクトルコプロセッサが反復処理を行うように構成されるマルチプロセッサが提案されている（例えば、特許文献１参照）。
【０００３】
その提案に係るシステムでは、コントロールプロセッサがスカラ演算を行い、ベクトルコプロセッサがベクトル演算を行うが、コントロールプロセッサが、ベクトルコプロセッサの初期化、開始及び停止を行うようになっている。これにより、２つのプロセッサの処理の同期化を実現するものである。
【０００４】
しかし、このようなマルチプロセッサを、ベクトル演算におけるベクトル長が短い（すなわち、データ数が少ない）データ処理に適用すると、初期化、開始及び停止のための、コントロールプロセッサのオーバヘッドが高くなり、プロセッサ全体の性能が上がり難いという問題があった。これは、コントロールプロセッサとベクトルコプロセッサの間の通信が律速し、プロセッサ全体の性能が制限されるからである。
【特許文献１】特開平10-149341号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
そこで、本発明は、ベクトル演算用のプロセッサを制御するプロセッサのオーバヘッドを少なくしてプロセッサ全体の性能の低下を防止することができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様によれば、ベクトル演算のためのベクトル演算用パラメータを出力する第１のプロセッサと、前記ベクトル演算を前記ベクトル演算用パラメータに基づいて実行する第２のプロセッサと、を含み、前記第２のプロセッサは、前記ベクトル演算用パラメータを格納する第１のレジスタと、前記第１のプロセッサから指定された命令に従って、前記第１のレジスタに前記ベクトル演算用パラメータを書き込むスカラプロセッサと、前記第１のプロセッサにより指定された命令を、前記第１のレジスタに格納された前記ベクトル演算用パラメータに基づいて実行する１以上のベクトルプロセッサと、を有する
【発明の効果】
【０００７】
本発明によれば、ベクトル演算用のプロセッサを制御するプロセッサのオーバヘッドを少なくしてプロセッサ全体の性能の低下を防止することができるプロセッサを実現することができる。
【発明を実施するための最良の形態】
【０００８】
以下、図面を参照して本発明の実施の形態を説明する。  
（プロセッサ１全体の構成）  
まず、本実施の形態に係わるプロセッサの構成を説明する。図１は、本実施の形態に係わるプロセッサの構成を示すブロック図である。  
以下、本実施の形態は、デジタルテレビジョン装置における画像データと音声データのデコード装置としてのプロセッサの例で説明する。
【０００９】
図１に示すプロセッサ１は、２つのサブプロセッサ２，３を含むマルチプロセッサである。第１のプロセッサ２は、制御用及びオーディオデータ処理用のプロセッサであり、第２のプロセッサ３は、ビデオデータ処理用のプロセッサである。制御用のプロセッサ２は、プロセッサ３の制御と、音声データのデコード処理とを行い、ベクトル演算用のプロセッサ３は、ブロック単位（例えばマクロブロック単位）に分割された画像データに対して、ブロック毎に同じ処理を繰り返すような画像データのデコード処理を行う。
【００１０】
プロセッサ１は、さらに、ダイレクトメモリアクセス（以下、DMAという）コントローラ（以下、DMACと略す）４と、バスインターフェース（以下、バスI/Fと略す）５を有する。バスI/F５は、プロセッサ２と３を、グローバルバス７に接続するためのインターフェースである。グローバルバス７には、記憶部である主メモリ６が接続されている。よって、プロセッサ２と３は、グローバルバス７を介して主メモリ６と接続されている。グローバルバス７は、プロセッサ１と主メモリ６間のデータの送受信だけでなく、デジタルテレビジョン装置の他の機能等を実現するための回路、プロセッサ、チップ等との通信を行うためのバスでもある。
【００１１】
また、プロセッサ２とプロセッサ３は、制御バス８を介して、互いに接続され、かつ制御バス８にはDMAC４が接続されている。  
さらにまた、プロセッサ３は、ローカルバス９を介してバスI/F５と接続されている。
【００１２】
プロセッサ２は、命令キャッシュ１１と、データキャッシュ１２と、中央処理装置（以下、CPUと略す）１３とを含んで構成され、上述したように、プロセッサ３の制御と音声データの処理とを行う。  
プロセッサ３は、命令メモリ２１と、データメモリ２２と、ベクトルレジスタ２３と、DMAC２４と、制御バスレジスタ２５と、制御レジスタ２６と、スカラプロセッサ３１と、複数（ここでは２つ）のベクトルプロセッサ３２、３３とを含んで構成され、画像データのデコード処理を行う。  
なお、図１では、プロセッサ３には、２つのベクトルプロセッサ３２，３３が設けられているが、３つ以上でもよい。
【００１３】
（プロセッサ２、プロセッサ３及びDMA４の構成）
次に、それぞれがサブプロセッサであるプロセッサ２とプロセッサ３の構成について説明する。  
まず、プロセッサ２について説明する。  
命令キャッシュ１１は、CPU１３が実行すべき１つの命令あるいは複数の命令（複数の命令からなるプログラムも、以下単に命令という）を一時的に格納するためのキャッシュであり、データキャッシュ１２は、CPU１３が処理すべきデータ及び処理したデータを一次的に格納するためのキャッシュである。  
CPU１３は、データキャッシュ１２に格納されたデータについて、命令キャッシュ１１に格納された命令を読み出して実行する。  
プロセッサ２の命令キャッシュ１１に格納される命令は、主メモリ６から読み出された命令である。データキャッシュ１２に書き込まれるデータも、主メモリ６から読み出されたデータである。プロセッサ２において処理されてデータキャッシュ１２に一時的に格納されたそれぞれのデータは、主メモリ６に転送されて記憶される。
【００１４】
従って、プロセッサ２は、主メモリ６に記憶された命令を実行し、主メモリ６に記憶されたプロセッサ３において実行すべき命令とデコードすべき対象データをDMAC４によりプロセッサ３に転送し、プロセッサ３に所定の画像処理、ここではデコード処理をベクトル演算により実行させる。  
また、プロセッサ２は、後述するように、プロセッサ３にベクトル演算用パラメータを出力する。
【００１５】
次に、プロセッサ３について説明する。  
命令メモリ２１は、スカラプロセッサ３１、ベクトルプロセッサ３２，３３及びDMAC２４がそれぞれ実行すべき、あるいは実行可能な命令を記憶するための記憶領域を有する命令保持部である。  
データメモリ２２は、デコードすべき対象データと、デコードされた結果データとを、それぞれ記憶するための記憶領域を有するデータ保持部である。すなわち、データメモリ２２は、対象データ記憶領域と結果データ記憶領域の２つの記憶領域を有する。
【００１６】
命令メモリ２１に書き込まれる命令も、主メモリ６から読み出された命令であり、データメモリ２２に書き込まれるデータも、主メモリ６から読み出されたデータである。なお、プロセッサ３において処理されて得られた結果の結果データも、データメモリ２２に出力され、その後転送されて、主メモリ６に記憶される。
【００１７】
ベクトルレジスタ２３は、ベクトルプロセッサ３２，３３とデータメモリ２２の間に設けられ、ベクトルプロセッサ３２，３３が処理する対象の単位データ、例えば１６×１６画素のマクロブロックデータを連続して格納するレジスタである。ベクトルプロセッサ２２，２３において処理すべき対象データと、ベクトルプロセッサ２２，２３において処理して得られた結果データが格納される。すなわち、ベクトルレジスタ２３は、対象データ格納領域と結果データ格納領域の２つの格納領域を有する。
【００１８】
DMAC２４は、ベクトルレジスタ２３とデータメモリ２２間で、対象データ及び結果データの転送を行うための転送部を構成する。DMAC２４の動作は、命令メモリ２１から読み出されたスカラLIW（Long Instruction Word）命令中に含まれる命令によって制御される。従って、あるベクトル演算が実行されている間に、その後に処理される対象データを、データメモリ２２からベクトルレジスタ２５へ予め転送してセットしておくようにすることができる。DMAC２４を制御する命令については後述する。  
制御バスレジスタ２５は、命令メモリ２１中の実行すべき命令のアドレス、データメモリ２２中の処理すべき対象データのアドレス、処理して得られた結果データを格納するアドレス等を、プロセッサ２により制御バス８を介して書き込まれることによって、指定するためのレジスタである。
【００１９】
例えば、命令メモリ２１には、それぞれがサブルーチンプログラムとしての複数の命令が格納され、データメモリ２２にも、大きなサイズのデータが格納される場合がある。そのような場合、制御バスレジスタ２５には、命令メモリ２１中のどの命令（サブルーチン）を起動するのかを示すプログラムカウンタの初期値、及び大きなサイズのデータを格納するデータメモリ２２中のデータのアドレスが保持される。
【００２０】
具体的には、処理して得られた大きなサイズの結果データを、ローカルバス９を介して、プロセッサ２へのアドレスデータ等を供給する場合、制御バスレジスタ２５には、スカラプロセッサ３１及びベクトルプロセッサ３２，３３によって、その結果データを書き込む、データメモリ２２中のアドレスデータが書き込まれる。  
なお、プロセッサ２とプロセッサ３との間で、小さなサイズのデータの送受信が行われる場合もある。そのような場合、制御バスレジスタ２５には、プロセッサ２とプロセッサ３との間で受け渡される小さなデータ構造のデータも格納される。
【００２１】
制御レジスタ２６は、プロセッサ２から受信した、ベクトルプロセッサ３２，３３が各種ベクトル演算を行うときに必要なベクトル演算用パラメータを格納するためのレジスタである。制御レジスタ２６の複数のレジスタのそれぞれには、ベクトル演算の繰り返し回数、ベクトル演算時の自動インクリメントの幅、ベクトル演算器で使用する定数値データ、各ブロックの特徴量データ等のスカラデータが格納される。これらのデータは、制御バス８経由でプロセッサ２からは直接設定されない。これらのデータは、スカラプロセッサ３１によって、直接、制御レジスタ２６に設定される。
【００２２】
プロセッサ３のスカラプロセッサ３１は、内部に汎用レジスタを持ち、算術論理演算命令、分岐命令などを実行する回路を含む。後述するように、スカラプロセッサ３１は、プロセッサ２により指定された命令に従って、ベクトルプロセッサ３２，３３において実行される命令に関するパラメータを書き込んでセットするためのプロセッサである。スカラプロセッサ３１が、必要に応じて制御バスレジスタ２５と制御レジスタ２６に対するデータの読み書きをすることができるように、スカラプロセッサ３１と、制御バスレジスタ２５及び制御レジスタ２６との間は、データ転送用バス４１，４２によって接続されている。
【００２３】
例えば、スカラプロセッサ３１が、ベクトルプロセッサ３２，３３において得られた画像の複雑度を示す特徴量データに基づいて各ブロックの特徴量に基づく処理等を行うような場合、その特徴量データに関するデータは、制御バスレジスタ２５あるいは制御レジスタ２６に書き込まれる。
【００２４】
なお、スカラプロセッサ３１は、オペレーティングシステム（以下、OSという）等の処理を実行しないプロセッサである方が好ましい。スカラプロセッサ３１をOSの処理ができるように構成してもよいが、OSの処理ができるように構成すると、半導体装置であるチップにおけるスカラプロセッサ３１の部分の面積が広くなってしまうというデメリットがある。後述するように、パラメータの設定の処理だけ、あるいはパラメータの設定処理に加えて所定のスカラ演算（例えば、画像の特徴量の計算）を行うだけであれば、スカラプロセッサ３１は、OSの処理を実行できないようなプロセッサである方が好ましい。  
さらになお、スカラプロセッサ３１は、ベクトルプロセッサ３２，３３において実行される命令に関するパラメータをセットするための専用のプロセッサであってもよい。
【００２５】
ベクトルプロセッサ３２，３３は、それぞれプロセッサ２により指定された命令を、制御レジスタ２６に格納されたベクトル演算用パラメータに基づいて実行する。すなわち、ベクトルプロセッサ３２，３３は、それぞれ、必要に応じて、制御バスレジスタ２５、制御レジスタ２６及びベクトルレジスタ２３からデータを読み出し、指定された命令に基づく演算を繰り返し実行し、演算結果の結果データを制御バスレジスタ２５またはベクトルレジスタ２３に書き込む。そのため、ベクトルプロセッサ３２，３３と、制御バスレジスタ２５及び制御レジスタ２６との間は、データ転送用バス４１，４２によって接続されている。ベクトルプロセッサ３２，３３は、それぞれ異なる演算を実行するようにしてもよいし、同じ演算を行うようにしてもよい。  
特に、複数の命令にそれぞれ対応した複数のパラメータデータを制御レジスタ２６に同時に設定できるように、スカラプロセッサ３１と制御レジスタ２６の間を接続するように設けられたデータ転送用バス４２は、複数の信号線あるいは複数のバスから構成されている。ここでは、３つの命令に対応したパラメータデータを制御レジスタ２６に並列に書き込んで設定できるように、３つのバスの信号線が並列に設けられている。そのため、データ転送用バス４２は、制御バス８よりも並列データ転送能力が高くなるので、プロセッサ３は、複数のベクトルプロセッサ（ここでは２つのベクトルプロセッサ３２，３３）を同時に実行させて並列処理させることができる。
【００２６】
後述するように、スカラプロセッサ３１用の命令の中には、スカラプロセッサ３１が制御レジスタ２６にどのようなデータを設定するかを指示する命令も含まれている。これにより、プロセッサ２が、制御レジスタ２６に対するパラメータデータの設定を行う必要はないので、プロセッサがプロセッサ３を制御するためのオーバヘッドが少なくなる、すなわちプロセッサ２と３の間の通信により、プロセッサ１全体の処理速度が制限されるというようなことが無くなる。
【００２７】
また、本実施の形態では、一つのスカラプロセッサ３１に対して、複数の（ここでは２つの）ベクトルプロセッサ３２，３３が設けられている。これにより、従来のように、プロセッサ２から複数のベクトルプロセッサとの間で通信を行われないようにして、プロセッサ１の処理速度が制限されるというようにすることができる。
【００２８】
DMAC４は、主メモリ６と命令メモリ２１の間、及び主メモリ６とデータメモリ２２の間での、DMAによるデータ転送を行う転送部を構成する。DMAC４は、プロセッサ２のCPU１３の制御の下で、主メモリ６と命令メモリ２１の間、及び主メモリ６とデータメモリ２２の間のデータ転送処理を行う。具体的には、プロセッサ２のCPU１３は、DMAC４を制御して、実行すべき命令と対象データをそれぞれ主メモリ６から読み出して、命令メモリ２１とデータメモリ２２へデータ転送し、結果データをデータメモリ２２から、主メモリ６へ転送して書き込む。そして、実行すべき命令は、ベクトル演算の場合、同じ処理を繰り返し実行することが多いので、命令メモリ２１には、複数の命令が格納可能となっている。
【００２９】
そして、CPU１３は、命令メモリ２１に格納した命令のアドレスデータを、プロセッサ３の制御バスレジスタ２５の所定の領域に、制御バス８経由で書き込む。具体的には、後述するように、デコード処理を行うときに、プロセッサ２は命令メモリ２１中の、命令の先頭アドレスを指定することによって、プロセッサ３に、実行すべき命令を通知して指定することができる。
【００３０】
なお、処理内容あるいは処理対象データによっては、プロセッサ３における命令メモリ２１とデータメモリ２２は、それぞれキャッシュでもよい。さらになお、プロセッサ３の命令メモリ２１とデータメモリ２２の容量を大きく取れる場合も、キャッシュミスの発生も低くなるので、命令メモリ２１とデータメモリ２２はそれぞれキャッシュでもよい。
【００３１】
以上のように、プロセッサ１は、音声データと画像データの処理を行う、いわゆるメディアプロセッサであるが、プロセッサ２は、プロセッサ３を制御して、画像データのデコード処理を行わせている。  
なお、本実施の形態では、上述したように、プロセッサ３は、画像データをブロック単位に分割してブロック毎に同じ処理を繰り返すような画像のデコード処理を行う。そのため、プロセッサ３では、そのような処理に最適なように、キャッシュではなく、それぞれ記憶容量が比較的小さい命令メモリ２１とデータメモリ２２が用いられている。これは、そのような処理の場合、CPU１３は、デコード処理のために実行すべき命令及びデコード処理すべきデータを予測可能であること、そして、キャッシュを用いるとキャッシュミスの発生による処理の停止が発生してしまうからである。
【００３２】
（命令）
次に、プロセッサ３において実行される命令について説明する。  
プロセッサ３において実行される命令には、大きく分けて、スカラLIW命令とベクトルLIW命令の2種類ある。特に、スカラLIW命令は、プロセッサ３内のDMAC２４が実行するDMAに関する各種パラメータを設定するフィールドと、ベクトル演算用のパラメータを制御レジスタ２６に設定するためのフィールドを含む。
【００３３】
命令メモリ２６には、スカラプロセッサ３１用の命令としてのスカラLIW命令と、ベクトルプロセッサ３２，３３用の命令としてのベクトルLIW命令とが混在した命令群が記憶される。従って、スカラLIW命令とベクトルLIW命令は、それぞれ、スカラプロセッサ用の命令であるのか、ベクトル演算用の命令であるのかが識別できるようにするための指定（あるいは識別）フィールドを有する。なお、ベクトルLIW命令には、その命令がベクトルプロセッサ３２と３３のいずれのプロセッサ用の命令なのかを示す、すなわち識別するデータが含まれる。
【００３４】
図２は、複数の命令が記憶された命令メモリ２１の構成を説明するための図である。図２に示すように、命令メモリ２１には、複数のLIW命令が記憶され、スカラプロセッサ３１用の命令と、ベクトルプロセッサ３２，３３用の命令が混在して含まれている。CPU１３が、複数のLIW命令の中から実行すべき命令を指定するときには、命令メモリ２１中の、その実行すべき命令の先頭アドレスを指定することによって、ベクトルプロセッサ３２，３３に実行すべき命令を通知する。
【００３５】
図３は、各LIW命令の構成例を示す図である。１つのLIW命令５０は、ここでは、１２８ビット長を有している。スカラLIW命令とベクトルLIW命令のいずれの場合も、１つのLIW命令５０は、スカラプロセッサ２１用の命令なのか、あるいはベクトルプロセッサ３１，３２のいずれのプロセッサ用の命令なのかを示すフィールド５１を含む。すなわち、実行すべきプロセッサを識別するための識別フィールドを有する。さらに、本実施の形態では、１つのLIW命令５０は、４つのフィールド５２，５３，５４，５５を有する。  
まず、LIW命令５０がスカラLIW命令の場合について説明する。スカラLIW命令には、DMAC２４に対するDMA命令である場合と、ベクトル演算用のパラメータを制御レジスタ２６に設定するためのベクトル演算パラメータ設定命令である場合とがある。
【００３６】
スカラLIW命令がDMAC２４に対するDMA命令の場合、フィールド５２にはDMAC２４用の起動指示とDMA用のパラメータ（例えば、データメモリ２２中の対象データのアドレスデータ等）とが含まれ、他のフィールド５３，５４，５５には、何も実行しないことを示すNOPが含まれるように記述される。言い換えると、DMAC２４は、スカラLIW命令中のフィールド５２に含まれるパラメータ等に基づいて、ベクトルレジスタ２３とデータメモリ２２の間でDMAを行うように構成されている。  
なお、DMAC２４用の起動命令とDMA用のパラメータを、スカラLIW命令中に含めるようにしたのは、スカラLIW命令と、ベクトルLIW命令とを比べた場合、スカラプロセッサ３１に供給させるスカラ演算用の命令は、ベクトルプロセッサ３２，３３に実行させる命令よりも短くて済むためである。
【００３７】
また、スカラLIW命令がベクトル演算のための各種パラメータを制御レジスタ２６に設定するための命令の場合、フィールド５３，５４，５５には各種パラメータを制御レジスタ２６に設定するためパラメータが含まれる。具体的には、フィールド５３，５４，５５には、それぞれ、制御レジスタ２６中のレジスタの番号とパラメータの値が含まれる。制御レジスタ２６中の各レジスタは、ベクトル演算における各種パラメータのそれぞれに対応しており、そのレジスタの番号を指定し、その番号のレジスタにパラメータの値を書き込むことにより、ベクトル演算の各種パラメータが設定され得る。各種パラメータは、例えば、ベクトル演算の繰り返し回数、ベクトル演算時の自動インクリメントの幅、ベクトル演算器で使用する定数値データ等である。よって、スカラLIW命令は、ベクトルプロセッサ３２，３３のそれぞれにおいて実行されるベクトル演算のための各種パラメータを、制御レジスタ２６に設定するための命令を含む。  
以上のように、スカラLIW命令は、DMAC２４に対するDMA処理の指示をする命令である場合と、ベクトル演算のためのパラメータ設定の指示をする命令である場合がある。また、ベクトルLIW命令は、識別フィールドで指定されたベクトルプロセッサで実行される命令である。すなわち、命令メモリ２１に記憶される命令には、DMAC２４に対するDMA処理の指示をする命令と、ベクトル演算のためのパラメータ設定の指示をする命令と、ベクトルプロセッサで実行される命令とが含まれ、かつ、DMA処理の指示をする命令と、ベクトル演算のためのパラメータ設定の指示をする命令とは、１つのLIW命令中に含まれる。
【００３８】
ベクトル演算は、識別フィールドで指定されたベクトルプロセッサにおいて、対応するレジスタに格納されたパラメータを用いて実行される。例えば、ベクトルプロセッサ３２において、あるベクトル演算が、繰り返し実行される場合、制御レジスタ２６内の、ベクトルプロセッサ３の繰り返し回数を格納する所定のレジスタのデータに基づいて、命令メモリ２１中の１つの又は複数のベクトルLIW命令がその回数だけ繰り返し実行される。なお、そのような繰り返し回数等のパラメータは、上述したように、スカラプロセッサ３１によって、制御レジスタ２６に格納される。
【００３９】
従って、複数の命令をベクトルLIW命令中に含ませることができるので、複数の（ここでは２つの）ベクトルプロセッサのうち、一つのベクトルプロセッサが自動的に、ある演算を繰り返し実行している間に、別のベクトルプロセッサが、ベクトルLIW命令により起動されて、別の演算を自動的に繰り返し実行するようにすることができる。また、複数のベクトルプロセッサが自動的にある演算を繰り返し実行している間に、並行して、スカラプロセッサ３１がスカラLIW命令を実行することもできる。さらに、DMAC２４は、スカラプロセッサ３１とベクトルプロセッサ３２，３３による処理とは、並行してDMAを実行することができる。
【００４０】
（処理の流れ）  
次に、プロセッサ２とプロセッサ３との間で、画像データのデコード処理を行う際にお互いに処理の同期を取るための動作について説明する。図４は、プロセッサ２と３の間での処理の流れの例を説明するための図である。図４は、複数のマクロブロックのデータをデコードするときに、プロセッサ２からの1回の命令の起動で、複数のマクロブロックのデータに対して、同じ命令を実行する場合の例を示す。  
上述したように、はじめに、プロセッサ２は、DMA４によって、実行すべき命令あるいは複数の命令群（すなわちプログラム）を、命令メモリ２１に予めロード、すなわち転送して記憶させておく（ステップS1）。これは、画像データのデコード処理のように、複数のブロックに対して同じ命令を繰り返して行うような場合は、その命令が命令メモリ２１に一旦格納されれば、その後は、その格納された命令を繰り返して実行すればよいからである。  
なお、デコード処理の直前に、プロセッサ２が、命令メモリ２１に、DMAC４によって転送してもよい。
【００４１】
そして、次に、プロセッサ２は、デコードすべき対象データを、プロセッサ３のデータメモリ２２へ転送して供給する（ステップS2）。ここでは、例えば、対象データとして、複数のマクロブロックのデータが、まとめてデータメモリ２２の対象データ記憶領域に転送される。そのとき、供給されるデータの構造すなわちサイズが、小さい場合と大きい場合がある。  
小さなサイズの対象データをプロセッサ３へ転送する場合、プロセッサ２は、制御バス８経由でプロセッサ３内の制御バスレジスタ２５に、その対象データを直接に書き込むようにして、転送する。
【００４２】
これに対して、大きなデータ構造の対象データをプロセッサ３へ転送する場合は、プロセッサ２は、まず、第１段階として、DMAC４を利用して、ローカルバス９経由でプロセッサ３内のデータメモリ２２の対象データ記憶領域にDMAによりデータ転送する。なお、プロセッサ２は、マクロブロック単位で対象データの転送を行うのではなく、１回のDMAC４の起動で複数のデータをまとめて転送するようにしてもよい。
【００４３】
そして、第２段階として、プロセッサ２は、転送した対象データのアドレスデータ、すなわちデータメモリ２２中のアドレスデータを、プロセッサ３の制御バスレジスタ２５に制御バス８経由で書き込む。その結果、プロセッサ３は、デコードすべき対象データのアドレスデータを得ることができる。
【００４４】
第３段階として、命令メモリ２１に格納されたDMAC２４に対する命令によって、プロセッサ３内のDMAC２４が起動される。DMAC２４は、制御バスレジスタ２５に格納されたアドレスデータを用いて、DMAにより、データメモリ２２中の１つのマクロブロックのデータをベクトルレジスタ２３に転送する。なお、プロセッサ２は、１回のDMAC２４の起動で複数のマクロブロックのデータをまとめて転送してもよい。  
以上のようにして、デコードすべき対象データが、プロセッサ３のベクトルレジスタ２３に格納される。
【００４５】
また、DMAにより結果データを主メモリ６へ転送するために、プロセッサ２は、プロセッサ３に、結果データを格納する、データメモリ２２中のアドレスを通知する（ステップS3）。この通知は、上述したように、プロセッサ２が、制御バスレジスタ２５にそのアドレスを書き込むことによって行われる。
【００４６】
次に、プロセッサ２は、命令メモリ２１中の実行すべき命令を、プロセッサ３へ通知する。この通知は、具体的には、プロセッサ２が、制御バス８経由で、プロセッサ３の制御バスレジスタ２５の所定の領域に、実行すべき命令（あるいはサブルーチン）の、命令メモリ２６中の先頭アドレスデータを書き込むことによって行われる。これにより、プロセッサ２は、プロセッサ３に、命令メモリ２１中の、実行すべき命令を指定することができる。
【００４７】
そして、プロセッサ２が、制御バス８経由で、制御バスレジスタ２５の所定の領域（上記の命令の先頭アドレスのデータを格納した領域とは別の領域）に、起動指示を示すデータ、例えばフラグデータを書き込む。これにより、プロセッサ２は、例えばプロセッサ３のベクトルプロセッサ３２，３３に、命令の起動を指示することができる（ステップS4）。  
その結果、プロセッサ３において、指定されたアドレスから命令が起動され、指定されたベクトルプロセッサにおいてその命令が実行される（ステップS11）。  
このとき、命令の起動は１回行うだけで、その命令は、複数のマクロブロックのデータに対して繰り返すように行われる。例えば、マクロブロック毎に同じ命令を実行するような場合、複数のマクロブロックに対して繰り返しその命令を実行するように、所定のパラメータ（例えば繰り返し回数のパラメータ）を設定することによって、最初に１回だけ命令を起動するだけで、指定されたベクトルプロセッサが複数のマクロブロックに対して、同じ命令を実行するようにすることができる。
【００４８】
プロセッサ２は、ステップS4の後は、プロセッサ３から１つのマクロブロックに対する命令の実行が終了したか否かを判定する（ステップS5）。  
一方、プロセッサ３は、命令を１つのマクロブロックに対して実行し、その命令の実行が終了すると、割り込み命令をプロセッサ２へ出力する。その結果、割り込み命令はプロセッサ２に受信され、プロセッサ２は、１つのマクロブロックに対する命令の実行が終了したことが判る。よって、ステップS5において、命令の実行が終了したと判断されて、結果データを主メモリ６へ出力する（ステップS6）。
【００４９】
なお、デコードデータ、すなわち結果データは、一旦、ベクトルレジスタ２３に格納されるが、その後は、DMAC２４により、データメモリ２２中の結果データ記憶領域中の指定されたアドレスに転送されて格納される。よって、結果データは、データメモリ２２から主メモリ６あるいはプロセッサ２へ出力される。  
具体的には、デコードして得られた結果データのサイズあるいは構造が、小さい場合と大きい場合がある。小さなデータ構造のデータの場合、プロセッサ３が、制御バス８経由で、プロセッサ３内の制御バスレジスタ２５に、結果データを書き込む。そして、プロセッサ２は、その制御バスレジスタ２５からその結果データを直接に読み出すことによって、結果データを得ることができる。
【００５０】
また、大きなデータ構造の結果データを、データメモリ２２から主メモリ６へ転送する場合は、ステップS3において、データメモリ２２のどこに結果データを格納すべきかのアドレスは指定されているので、プロセッサ３は、命令メモリ２１中のDMAC２４のDMA転送を実行させる命令により、DMAC２４を起動して、ベクトルレジスタ２３からデータメモリ２２の結果データ記憶領域の指定されたアドレスに、結果データを転送することができる。なお、プロセッサ３は、１回のDMAC２４の起動で複数のデータをまとめて、ベクトルレジスタ２３からデータメモリ２２へ転送するようにしてもよい。
【００５１】
そして、プロセッサ２は、DMAC４を用いて、ローカルバス９を経由して、データメモリ２２から主メモリ６へ結果データを転送して出力する。  
なお、ここでも、プロセッサ２は、１回のDMAC４の起動で複数の結果データをまとめて、データメモリ２２から主メモリ６へ転送するようにしてもよい。
【００５２】
対象データが主メモリ６へ出力されると、次にデコードすべき対象データがあるか否かを判定、すなわちデコードすべき対象データである全てのマクロブロックについて命令の実行が終了したか否かを判断する（ステップS7）。
【００５３】
全てのマクロブロックについて処理が終了していない場合は、処理は、ステップS5に戻り、プロセッサ２は、ステップS5において、プロセッサ３から割り込み命令を受信するのを待つ。割り込み命令が受信されると、ステップS5で、次のマクロブロックのデータに対する命令の実行が終了したと判断され、プロセッサ２は、全てのマクロブロックについて命令の実行が終了するまで、ステップS5からS7を繰り返す。
【００５４】
従って、プロセッサ３は、複数のマクロブロックのデータに対して順次、命令を実行し、各マクロブロックに対する命令の実行が終了する度に、割り込み命令を出力する。指定されたすべてのマクロブロックのデータに対する命令の実行が終了すると、プロセッサ３の処理は、停止する。
【００５５】
このとき、具体的には、プロセッサ３では、命令メモリ２１に格納されたDMAC２４に対する命令によって、DMAC２４が起動され、データメモリ２２中の対象データがベクトルレジスタ２３に転送される。そして、プロセッサ３は、次の対象データである各マクロブロックのデータに対して、命令を実行するが、その命令の起動は、プロセッサ２から行われず、上述したように、その命令は、繰り返し回数等のパラメータによって設定された回数だけ、プロセッサ３において自動的実行される。そして、各マクロブロックに対して命令の実行が終了する度に、結果データが出力され、かつ次の処理すべき対象データが入力されて、その命令が実行される。
【００５６】
従って、例えば、ｎ個のマクロブロックに対して、同じデコード処理を施すために命令をｎ回実行する場合であっても、プロセッサ２は、最初の１回目だけ、プロセッサ３に対して命令の起動を行うだけで、後は、プロセッサ３内で、ｎ個のマクロブロックに対して自動的に同じ命令を実行させることができる。よって、プロセッサ２は、その間、他の処理を実行することができる。  
図５は、プロセッサ２と３の間での処理の流れの他の例を説明するための図である。図４と同じ処理については、同じ符号を付し、説明は省略する。図５は、複数のマクロブロックのデータをデコードするときに、プロセッサ２からの命令の起動の度に、１つのマクロブロックのデータに対して、命令が実行される場合の例を示す。  
図５の場合も、はじめに、プロセッサ２は、DMA４によって、実行すべき命令あるいは複数の命令群を、命令メモリ２１にロードしておく（ステップS1）。  
そして、次に、プロセッサ２は、デコードすべき対象データであるマクロブロックのデータを、DMA４によってプロセッサ３のデータメモリ２２へ転送して供給する（ステップS2）。ここでは、例えば、対象データとして、１つのマクロブロックのデータが、データメモリ２２の対象データ記憶領域に転送される。
【００５７】
また、供給される対象データの構造すなわちサイズが、小さい場合と大きい場合があるが、図４で説明した手順と同じ手順で、対象データは、プロセッサ２からプロセッサ３へ転送される。  
その結果、デコードすべき対象データが、プロセッサ３のベクトルレジスタ２３に格納される。  
また、プロセッサ２は、結果データを記憶する、データメモリ２２中のアドレスを、プロセッサ３に通知する（ステップS3）。
【００５８】
そして、プロセッサ２は、プロセッサ３に、命令の起動を指示する（ステップS4）。  
その結果、プロセッサ３において、指定されたアドレスから命令が起動され、命令が実行されるが、命令中に書かれたHALT命令（停止命令）が実行されると、ベクトルプロセッサは一旦停止する（ステップS21）。
【００５９】
HALT命令が実行されると、プロセッサ３は、HALT命令が実行されたことをプロセッサ２へ通知し、プロセッサ２は、命令の実行の終了を検知することができる。
【００６０】
プロセッサ２は、ステップS4の後、命令の実行が終了したか否かを監視し（ステップS5）、その終了を検知すると、結果データを出力する（ステップS6）。結果データの出力は、図４の場合と同様である。
【００６１】
対象データが主メモリ６へ出力されると、次にデコードすべき対象データがあるか否かを判定、すなわちデコードすべき全てのマクロブロックについて命令の実行が終了したか否かを判断する（ステップS22）。
【００６２】
全てのマクロブロックについて命令の実行が終了していない場合は、プロセッサ２の処理は、ステップS2に戻り、次のマクロブロックの対象データを主メモリ６から、データメモリ２２へ転送して供給する（ステップS2）。  
以下、上述したステップS2からS22までの処理が、指定された全てのブロックについて実行されるまで、繰り返される。
【００６３】
プロセッサ３は、対象データである１つのマクロブロックのデータに対する命令の実行の最後にHALT命令を実行し、その後は、その命令の実行については停止状態となる。ステップS4において、プロセッサ２から命令の起動がされると、再度、命令を実行する。  
このようにして、複数のマクロブロックのデータに対して、同一の命令が連続して実行される。
【００６４】
図５のような処理においても、プロセッサ２は、ベクトル演算のための処理としては、命令の指定と起動を行うだけでよいので、プロセッサ３に対する制御のためのオーバヘッドが少なくて済む。
【００６５】
以上のように、上述した実施の形態に係るプロセッサ１によれば、ベクトル演算用のプロセッサ３を制御する制御用のプロセッサ２のオーバヘッドを少なくしてプロセッサ全体の性能の低下を防止することができる。
【００６６】
また、プロセッサ１によれば、ベクトル演算命令を命令メモリ２１からベクトルプロセッサ３２，３３に直接供給するので、ベクトル演算の起動頻度が高いアプリケーションに対しても、プロセッサ１の性能が低下し難い。
【００６７】
さらにまた、適用するアプリケーションのスカラ演算とベクトル演算の比率に応じて、プロセッサ３内のベクトルプロセッサの数を柔軟に調整できるので、広範囲な種々のアプリケーションに応じて、低コストでかつ高い性能を達成できる構成を提供することができる。
【００６８】
（変形例）  
次に、変形例を説明する。  
図６は、１つの制御用のプロセッサに対して、ベクトル演算を行う複数のプロセッサを設けた第１の変形例のプロセッサの構成例を示すブロック図である。図１の構成と同じ構成要素については、同じ符号を付して説明は省略する。図６に示すように、メディアプロセッサであるプロセッサ１Aは、１つのプロセッサと、それぞれがベクトル演算を行う複数のプロセッサを含んで構成されている。プロセッサ１Aにおいて、制御用のプロセッサ２Aは、図１のプロセッサ２と同じ構成を有する。ベクトル演算を行うｍ個のプロセッサ３A1〜３Am（以下、纏めてあるいはそれぞれのプロセッサを指すときは、プロセッサ３Aという）は、それぞれ図１のプロセッサ３と同じ構成を有し、プロセッサ３A1〜３Amのそれぞれにおいて、制御バスレジスタ２５は、制御バス８に接続されており、命令メモリ２１とデータメモリ２２は、ローカルバス９に接続されている。なお、ｍは、整数である。DMAC４Aは、上述したDMAC４と同様に、各プロセッサ３Aの命令メモリ２１と主メモリ６との間、及び各プロセッサ３Aのデータメモリ２２と主メモリ６との間、における命令及びデータの転送を、プロセッサ２Aの制御の下で実行する。
【００６９】
このような構成によれば、ベクトル演算に高い性能を要求された場合に、プロセッサ３Aを複数個設けて並列度を上げても、プロセッサ２は、ベクトル演算のための処理としては、命令の指定と起動を行うだけでよいので、オーバヘッドが少なくて済む。
【００７０】
上述した特開平10-149341号公報に開示の構成に比べても、図６の構成のプロセッサ１Aの方が、オーバヘッドは少なくて済むものである。  
すなわち、上述した特開平10-149341号公報に開示の構成においては、ベクトル演算に高い性能を要求された場合、ベクトルコプロセッサを複数設けて並列度を上げることにより、より高い性能に対応することもできるが、コントロールプロセッサは、複数のベクトルコプロセッサに対する、開始、停止等のための制御のオーバヘッドも高くなり、性能の向上は上がり難い。なお、より高い性能を上げるには、コントロールプロセッサとベクトルコプロセッサからなるプロセッシングコアを、複数並べて設けることも考えられるが、そのようなマルチプロセッサが適用装置される装置によっては、コストパフォーマンスが低くなる。
【００７１】
これに対して、第１の変形例に係るプロセッサによれば、一つの汎用の制御用のプロセッサ２Aに対して複数のサブプロセッサを接続できるので、ベクトル演算処理の比率が、制御処理に対して高いアプリケーションについては、従来よりも効率よく高い性能を達成できる。また、プロセッサ３Aの単位でサブプロセッサを増やすことが可能であるので、プロセッサ１Aは、アプリケーションに応じてプロセッサ３Aの数を調整することにより、さまざまなアプリケーションに対して、効率よく高い性能を達成できる構成を提供することができる。さらに、各プロセッサ３A内にスカラプロセッサを含み、そのスカラプロセッサがベクトルプロセッサを素早く起動するための処理を行うので、プロセッサ３Aの数が増えてもベクトル演算の起動処理が律速しにくい。
【００７２】
図７は、制御用のプロセッサにSIMD（Single Instruction/Multiple Data）コプロセッサを設け、さらに、ベクトル演算を行うプロセッサにもSIMDコプロセッサを設けた第２の変形例のプロセッサの構成例を示すブロック図である。図１の構成と同じ構成要素については、同じ符号を付して説明は省略する。
【００７３】
プロセッサ２Bは、拡張可能な汎用プロセッサであるCPU１３を有し、CPU１３には、拡張機能を実行するプロセッサとしてSIMDコプロセッサ１４が接続されている。また、サブプロセッサとしてのプロセッサ３Bには、図１と同様の構成に加えて、SIMDコプロセッサ３４を有する。SIMDコプロセッサ３４は、内部にコプロセッサ用の汎用レジスタを有する。この場合、スカラLIW命令は、ベクトル演算用パラメータを設定するためのスカラ演算を指定するフィールドと、DMAC２４へのパラメータを設定するフィールドとに加えて、SIMDコプロセッサ３４における演算を指定するフィールドと、を含む。
【００７４】
このような構成によれば、ベクトル演算を行うプロセッサ３Bにおいて、画像データに対するデブロッキング処理の前処理における検出処理等の処理を、スカラプロセッサであるSIMDコプロセッサ１４又は３４にさせることができるので、プロセッサ１Bの処理能力の向上を図ることができる。すなわち、例えば、画像等の処理において、ベクトル演算による画像処理した結果に対して、スカラ量を算出し、さらにそのスカラ量に基づいて別な処理を行うような、ベクトル演算とスカラ演算とが混在している複雑な応用の場合には、スカラ演算をSIMDコプロセッサ１４又は３４にさせることができる。
【００７５】
すなわち、上述した特開平10-149341号公報に開示の構成においては、このようなベクトル演算とスカラ演算とが混在している複雑な応用の場合、スカラ演算量の増加に対して、ベクトル演算量は相対的に増えないので、プロセッサ全体の性能は上がり難い。
【００７６】
これに対して、第２の変形例に係るプロセッサ１Bによれば、ベクトル長が短い処理に対してはSIMDコプロセッサ１４又は３４で処理するようにできるので、ベクトル長の長い処理と短い処理が混在しているときに、プロセッサ３Bにおいて効率よく高い性能を達成することができる。
【００７７】
以上説明した実施の形態に係わる装置は、デジタルテレビジョン装置であったが、上述したプロセッサ１、１A、１Bは、デジタルテレビジョン装置以外にも、例えば、DVDレコーダ等の他のデジタル家電製品、車載用画像認識処理装置、ロボット用画像認識処理装置等の各種画像処理装置、パーソナルコンピュータ、携帯電話等の機器にも適用可能である。  
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【図面の簡単な説明】
【００７８】
【図１】本発明の実施の形態に係わるプロセッサの構成を示すブロック図である。
【図２】本発明の実施の形態に係わる、複数の命令が記憶された命令メモリの構成を説明するための図である。
【図３】本発明の実施の形態に係わる、各LIW命令の構成例を示す図である。
【図４】本発明の実施の形態に係わる、２つのプロセッサ間での処理の流れの例を説明するための図である。
【図５】本発明の実施の形態に係わる、２つのプロセッサ間での処理の流れの他の例を説明するための図である。
【図６】本発明の実施の形態の第１の変形例のプロセッサの構成例を示すブロック図である。
【図７】本発明の実施の形態の第２の変形例のプロセッサの構成例を示すブロック図である。
【符号の説明】
【００７９】
１，１A，1B  プロセッサ、２，２A，２B，３，３A，３B  サブプロセッサ、７  グローバルバス、８  制御バス、９  ローカルバス、２１  命令メモリ、４１，４２  データ転送用バス、５０  LIW命令、５１〜５５  フィールド
【図１】
2008158699.tif 000003
【図２】
2008158699.tif 000004
【図３】
2008158699.tif 000005
【図４】
2008158699.tif 000006
【図５】
2008158699.tif 000007
【図６】
2008158699.tif 000008
【図７】
2008158699.tif 000009