(57)【要約】【課題】ＣＰＵが発行する命令は、１サイクルに１命令以上が供給されるため、毎サイクル、命令メモリ読み出しが発生し、消費電力が大きい。また、マルチプロセッサ構成の場合、命令メモリ個数が増加し、毎サイクル、命令メモリの同時アクセスが発生し、消費電力が大きくなる。【解決手段】命令のオペランドに２次元のソースレジスタとデスティネーションレジスタを指定する手段を設け、複数サイクルで、複数のソースレジスタを使用した演算を実行し、複数のデスティネーションを得る。複数ソースレジスタを利用して、複数サイクル消費してデスティネーションを得る命令において、データ丸め込み演算器をパイプラインの最終段に接続する。更に、複数のＣＰＵを直列接続し、共有型の命令メモリを共有して使用する。この際、各ＣＰＵの命令オペランドに、隣り合うＣＰＵ間の同期を制御するためのフィールドを有し、同期化制御を行う。【選択図】図２
2008003708.tif 000002
【特許請求の範囲】
【請求項１】
命令メモリとデータメモリとＣＰＵとを具備した映像処理エンジンであって、
前記ＣＰＵは、さらに命令デコーダと汎用レジスタと演算器とを有し、
前記ＣＰＵの命令オペランドは、データ幅並びに高さ方向を示すデータカウント数を指定するフィールドと、演算処理に使用するデータが格納された汎用レジスタの起点を示すソースレジスタポインタと、演算結果を格納する汎用レジスタの起点を示すデスティネーションレジスタポインタとを有し、
前記データ幅と前記データカウント数と前記ソースレジスタポインタと前記デスティネーションレジスタポインタとに基づいて、アクセスする前記ソースレジスタのアドレスおよび前記デスティネーションレジスタのアドレスを、サイクル毎に、順次生成する手段を有し、
前記ソースレジスタから読み出されたデータを前記演算器に投入して演算を実行し、得られた演算結果を順次、前記デスティネーションレジスタに格納することにより、一つの命令で、複数サイクルを消費して、複数の演算を行う映像処理エンジン。
【請求項２】
前記ＣＰＵにおいて、
前記データメモリに対してリード命令およびライト命令を発行する命令のオペランドが、データ幅とデータカウント数とデータ間隔とを指定するフィールドを有し、
前記データメモリへのアクセスの際に、前記データ幅と前記データカウント数と前記データ間隔から、２次元矩形を表現可能なデータメモリアドレスを生成し、前記データメモリアドレスを用いて、１命令にて、複数サイクルを消費して、複数回に亘り、前記データメモリをアクセスすることにより、２次元のデータを１命令にてアクセス可能である請求項１に記載の映像処理エンジン。
【請求項３】
前記ＣＰＵにおいて、前記ＣＰＵが発行する畳み込み演算命令と内積演算命令を有し、
前記ソースレジスタポインタにより指定されて読み出されたソースデータを入力するデータ入力段において、供給するクロック毎に前記ソースデータをシフト出力する手段と、畳み込み演算および内積演算に特化したソースレジスタアドレスとデスティネーションレジスタアドレスを生成する手段を有し、
前記演算器は、乗算器とシグマ加算器とデータ丸め込み演算器とが直列接続され、１次元もしくは２次元の前記畳み込み演算、および前記内積演算を一つの命令で実行可能である請求項１に記載の映像処理エンジン。
【請求項４】
前記ＣＰＵにおいて、前記命令メモリから読み出した命令を格納する命令レジスタを複数セット有し、
前記命令レジスタのいずれもが有効でない場合、自動的に次の命令読出しを行う手段を有し、
前記命令読出しの際に、読み出した命令が分岐命令の場合、前記分岐命令を前記命令レジスタに格納せず、分岐先の命令を直ちに読み出し、前記分岐先の命令を前記命令レジスタに格納し、前記分岐命令のオペランドの一つに、分岐するかしないかを指定する分岐条件レジスタを指定するフィールドを有し、
前記分岐命令時に、選択された分岐条件レジスタの値により、分岐するか分岐しないかを判定する手段を有し、分岐しない場合、次の命令を読み出し、前記分岐命令を命令レジスタには格納せず、
前記命令メモリからの命令読出しを毎サイクル行わないことで、前記分岐命令による命令の再読出しに要するサイクルを隠蔽する請求項１に記載の映像処理エンジン。
【請求項５】
前記映像処理エンジン内に、請求項１から請求項３のいずれかに記載のＣＰＵを複数有し、前記複数のＣＰＵの各々の演算結果を隣り合うＣＰＵのレジスタに格納する手段を有し、前記複数のＣＰＵは、互いに隣り合うＣＰＵに対して接続され、最終端のＣＰＵは初段ＣＰＵに接続されてリング状の接続がなされる請求項１に記載の映像処理エンジン。
【請求項６】
前記ＣＰＵが発行する命令のオペランド中に、前記ＣＰＵの次段側のＣＰＵが有するレジスタにデータを格納することが可能か否かを確認するための第１のフラグを有し、
前記次段側のＣＰＵが発行する命令のオペランド中には、前段のＣＰＵからのデータ書き込みが受託可能か否かを示す第２のフラグを有し、
隣り合う２つのＣＰＵ間にて、前記第１及び第２のフラグにより同期化を行う回路を有し、
書き込みが不可の場合、前段ＣＰＵはストールする手段を有し、
また、前記ＣＰＵが発行する命令のオペランド中に、前段のＣＰＵからレジスタに対してデータ書き込みが終了し、データが使用可能か否かを判断するための第３のフラグを有し、前段のＣＰＵが発行する命令のオペランドには、後段のＣＰＵにデータの書き込みを終了したことを伝えるための第４のフラグを有し、
２つのＣＰＵ間で、前記第３および第４のフラグの情報から、同期化を行う回路を有し、
データの準備が終了していない場合、後段のＣＰＵを待機させるためのストール信号を出力する手段を有し、
命令のオペランドに隣り合う２つのＣＰＵ間の同期化を行うためのフラグを有し、これらのフラグと共に、同期化を制御する回路を有する請求項５に記載の映像処理エンジン。
【請求項７】
前記複数のＣＰＵは、命令メモリを共有し、命令の返送をサイクル毎に時分割で行う請求項５に記載の映像処理エンジン。
【請求項８】
請求項１から請求項７のいずれかに記載の映像処理エンジンが、バスを介して複数個接続された映像処理部を有する映像処理システムであって、
前記映像処理エンジンの各々には、前記映像処理エンジンの一つが有するデータメモリからデータを読出し、他の一つの映像処理エンジン内のデータメモリに対して、前記データをダイレクトメモリアクセス転送するダイレクトメモリアクセスコントローラを有し、
前記ＣＰＵは、ダイレクトメモリアクセスコントローラを起動および制御する手段を有し、複数の映像処理エンジン間でダイレクトメモリアクセスによるデータ転送を行うことが可能な映像処理システム。
【請求項９】
前記映像処理部において、バスに接続するブロックの一つに、映像処理エンジンに加えて、システムバスなどの第２の内部バスと前記バスとの間でデータ転送を行う内部バスマスタ制御部と内部バススレーブ制御部、および内部バスブリッジからなるデータ転送回路を有し、
前記データ転送回路では、前記第２のバスを介して、外部メモリに対してアクセスすることが可能で、前記映像処理エンジンの各々と前記外部メモリとの間でデータ転送を可能とする請求項８に記載の映像処理システム。
【請求項１０】
複数のシフトレジスタで構成され、前記シフトレジスタ間毎に、同時に複数のデータ転送が可能で、前記シフトレジスタの接続方向を互いに逆とする第１のバスを有し、
前記第１のバスの一方は、映像処理エンジン間および映像処理エンジンからデータ転送回路の方向に対してデータ転送を行い、
前記第１のバスの他方は、外部メモリから読み出されたデータを、内部バスとデータ転送回路を介して、各映像処理エンジンに対してデータ転送を行い、
前記複数の第１のバスにより、映像処理エンジン間のデータ転送と、外部メモリからのデータ転送の競合が発生しない、若しくは、競合頻度を削減できる請求項９に記載の映像処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、映像処理エンジンおよびそれを含む映像処理システムに係り、特にＣＰＵとダイレクトメモリアクセスコントローラがバス接続された映像処理エンジンおよびそれを含む映像処理システムに関する。
【背景技術】
【０００２】
半導体プロセスの微細化に伴い、大規模なシステムを１つのＬＳＩ上で実現するＳＯＣ（システムオンチップ）化や１つのパッケージ内に複数のＬＳＩを搭載するＳＩＰ（システムインパッケージ）という技術が主流となっている。この論理の大規模化により、組込み用途に見られるように、ＣＰＵコアと画像コーデックアクセラレータや大規模なＤＭＡＣモジュールといった全く異なった機能を１つのＬＳＩ内に実装することが可能となってきた。
【０００３】
また、半導体プロセスの微細化は、ＬＳＩ定常状態におけるリーク電流を増加させ、リーク電流による消費電力の増加が問題となっている。近年では、未使用モジュールへのクロック供給停止や、供給電源遮断などにより、消費電力削減を実現している。これらの低電力化は、スリープなどの待機状態時の低電力化である。
【０００４】
一方、携帯端末などで映像を視聴する場合、ＬＳＩ内のほぼ全部のモジュールが定常状態として動作するため、先に示した待機状態時の低電力化手法を用いることはできない。
定常状態時の消費電力は、動作周波数、論理物量、トランジスタの活性化率、および供給電圧の２乗に比例する。従って、低電力化は、これらの要素を小さくすることで実現できる。
【０００５】
動作周波数を下げるには、並列化などにより、１サイクルで処理する処理量を増やすことで実現できる。これは、必要とする論理物量を増やし、消費電力を増加させる傾向となるが、低速動作が可能で、タイミングクリティカルパスを少なく出来るため、供給電圧を下げることが可能で、これに伴い、消費電力を削減できる。従って、近年は、動作周波数向上よりも、ＳＩＭＤ型ＡＬＵや、マルチプロセッサなど、並列度向上による低電力化が主流となっている。
【０００６】
特開２０００−５７１１１号公報（特許文献１）は、ＳＩＭＤ型ＡＬＵについて示している。これは、並列に演算器を動作させることで１サイクルに演算する処理量を増やし、結果、動作周波数削減を実現している。画像処理など、画素毎に同一の演算を施す場合、本ＳＩＭＤ型ＡＬＵは有効である。
【０００７】
特開２０００−２９８６５２号公報（特許文献２）は、マルチプロセッサについて示している。これは、マルチプロセッサが使用する命令メモリを共有することで、命令メモリの総論理物量を削減し、低電力化を実現している。
【０００８】
特開２００１−１００９７７号公報（特許文献３）は、ＶＬＩＷ型ＣＰＵについて示している。ＶＬＩＷは、演算器を並列に配置し、これを並列動作させることで、必要処理サイクルを削減し、低電力化を実現している。
【０００９】
【特許文献１】特開２０００−５７１１１号公報
【特許文献２】特開２０００−２９８６５２号公報
【特許文献３】特開２００１−１００９７７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
特許文献１では、ＳＩＭＤ型ＡＬＵについて開示されている。一般的な画像処理は、同一演算を２次元のブロック全体に施すアルゴリズムである。これをＳＩＭＤ型ＡＬＵで実現する場合、汎用レジスタのリードレジスタ番号とライトレジスタ番号のみが異なる同一の命令を毎サイクル供給する。これは、毎サイクル、命令フェッチを行う事を意味し、命令の格納されたメモリを毎サイクルアクセスしなければならない。ＬＳＩ全体の消費電力に対し、メモリが消費する電力の割合は、比較的高い。従って、毎サイクル命令メモリの読出しを行うことは、消費電力を増加させる。
【００１１】
また、ＳＩＭＤ型ＡＬＵでは、限られた入力データに対し演算を行う構成である。例えば、縦方向の畳み込み演算などを行う場合、複数の命令列で各要素の演算を行い、最後に各演算結果を加算する。桁上げを考慮した場合、前処理としてのビット拡張や、後処理としての丸め込み処理など、実際の畳み込み演算に対し、処理サイクルが大きくなる。従って、高い動作周波数が必要で、消費電力が高くなる。
【００１２】
特許文献２では、マルチプロセッサの面積削減による低電力化について開示されている。本文献によれば、プロセスが動作しているプロセッサのみが共有命令メモリをアクセスする。従って、複数のプロセッサにて同時にプロセスが動作している場合、命令メモリアクセス競合が発生し、実質的にプロセッサの稼働率が低下し、性能低下が発生する。
これらのように、プロセッサの命令供給は、命令メモリアクセスに依存し、消費する電力の比率も大きい。
【００１３】
特許文献３では、ＶＬＩＷ型ＣＰＵについて開示されている。本方式によれば、並列動作させる演算器数を増加させるに従い、１サイクルに読み出す命令数も増加し、消費電力が大きい。また、演算器数に比例し、レジスタのポート数が増加し、面積コストが大きく、これも消費電力を大きくする。
【００１４】
本発明の目的は、プロセッサで画像処理を行う場合の低電力化技術の提供にある。
【課題を解決するための手段】
【００１５】
命令のオペランドに２次元のソースレジスタとデスティネーションレジスタを指定する手段を設け、複数サイクルで、複数のソースレジスタを使用した演算を実行し、複数のデスティネーションを得る手段を有する。また、複数ソースレジスタを利用して、複数サイクル消費してデスティネーションを得る命令において、データ丸め込み演算器をパイプラインの最終段に接続する。
【００１６】
更に、複数のＣＰＵを直列接続し、共有型の命令メモリを共有して使用する。この際、各ＣＰＵの命令オペランドに、隣り合うＣＰＵ間の同期を制御するためのフィールドを有し、同期化制御を行う手段を設ける。
【発明の効果】
【００１７】
上記手段により、命令メモリのアクセス回数を削減することにより、命令メモリ読み出しの際に消費する電力を削減する。また、命令数の削減と、命令メモリの共有化により、命令メモリの総容量を削減することにより、トランジスタの充放電個数を削減し、手消費電力化を実現する。
【発明を実施するための最良の形態】
【００１８】
以下に、本発明の実施例を、図を用いて詳細に説明する。
【実施例１】
【００１９】
本発明の第１の実施例について、図面を参照して詳細に説明する。
図1は、本実施例における組込みシステムのブロック図である。
本組込みシステムは、システムの制御と汎用的な処理を行うＣＰＵ１と、ＭＰＥＧなどの画像コーデックの１処理であるストリーム処理を行うストリーム処理部２と、ストリーム処理部２と連携して画像コーデックの符号化や復号化を行う映像処理部６と、ＡＡＣやＭＰ−３などの音声コーデックの符号化や復号化を行う音声処理部３と、ＳＤＲＡＭなどで構成する外部メモリ２０のアクセスを制御する外部メモリ制御部４と、標準バスであるＰＣＩバス２２と接続するためのＰＣＩインタフェース５と、画像表示を制御する表示制御部８と、様々なＩＯデバイスに対して、ダイレクトメモリアクセスを行うＤＭＡコントローラ７が、内部バス９に相互接続される。
【００２０】
ＤＭＡコントローラ７には、ＤＭＡバス１０を介して、様々なＩＯデバイスが接続される。ＩＯデバイスには、カメラやＮＴＳＣ信号などの映像入力を行う映像入力部１１、ＮＴＳＣなど映像を出力する映像出力部１２、マイクなど音声の入力を行う音声入力部１３と、スピーカーや光出力などの音声出力を行う音声出力部１４、リモコンなどのシリアル転送を行うシリアル入力部１５、シリアル出力部１６、ＴＣＩバスなどのストリームを入力するためのストリーム入力部１７、ハードディスクなどストリームを出力するためのストリーム出力部１８及び様々なＩＯデバイス１９が接続される。
ＰＣＩバス２２には、ハードディスクやフラッシュメモリなどの様々なＰＣＩデバイス２３が接続される。
【００２１】
表示制御部８には、表示デバイスであるディスプレイ２１が接続される。
映像処理部６は、画像コーデックや画像の拡大縮小、また画像のフィルタリングなど、２次元画像に対して処理を施す処理部である。
このように、本組込みシステムは、映像や音声の入出力を有し、映像や音声処理を行うシステムである。例えば、携帯電話や、ＨＤＤレコーダ、監視装置、車載向け画像処理装置などが上げられる。
【００２２】
図２は、本実施例における映像処理部６のブロック図である。
映像処理部６は、内部バスブリッジ６０を介して内部バス９に接続される。内部バスブリッジ６０は、パス６３を介して内部バスマスタ制御部６１と、パス６４を介して内部バススレーブ制御部６２に接続される。内部バスマスタ制御部６１は、映像処理部６が内部バス９に対してバスマスタとなり、リードアクセスやライトアクセスのリクエストを生成し、内部バスブリッジ６０にリクエストを出力するブロックである。内部バス９に対するライトアクセス時は、リクエスト、アドレス、データを出力する。内部バス９に対するリードアクセス時は、リクエストとアドレスを出力し、数サイクル後、リードデータが返送される。内部バススレーブ制御部６２は、内部バス９から入力され、内部バスブリッジ６０を経由して入力されるリード要求やライト要求を受付け、対応して処理を行うブロックである。内部バスブリッジ６０は、内部バス９と内部バスマスタ制御部６１間、および内部バス９と内部バススレーブ制御部６２との間で受け渡されるリクエストやデータの調停を行うブロックである。
シフト型バス５０は、映像処理部６内のブロック間データ転送を行うバスである。各ブロックとシフト型バス５０は、３種類の信号線群で接続される。まず、図３と図４を使用して、シフト型バス５０の説明を行う。
【００２３】
図３は、シフト型バス５０のブロック図である。シフト型バス５０には、各ブロックとのインタフェースとして３種の信号線群で接続される。よって、信号線群５０ａ、５０ｂ、５０ｃが１つのブロックに接続され、信号線群５１ａ、５１ｂ、５１ｃが他の１つのブロックに接続され、信号線群５５ａ、５５ｂ、５５ｃが他の１つのブロックに接続される。信号線群５０ａ、５０ｂ、５０ｃは、シフトレジスタスロット５００に接続され、信号線群５１ａ、５１ｂ、５１ｃは、シフトレジスタスロット５０１に接続され、信号線群５５ａ、５５ｂ、５５ｃは、シフトレジスタスロット５０５に接続される。
各シフトレジスタスロット５００、５０１、５０５は、直列に接続される。例えば、シフトレジスタスロット５００の出力５０ｅは、シフトレジスタスロット５０１の５１ｄに入力され、シフトレジスタスロット５０１の出力５１ｆは、シフトレジスタスロット５００の５０ｇに入力される。同様に、シフトレジスタスロット５０５の出力５５ｅは、シフトレジスタスロット５００の５０ｄに入力され、シフトレジスタスロット５００の出力５０ｆは、シフトレジスタスロット５０５の５５ｇに入力される。
信号線５００ｐは、シフトレジスタスロット毎に供給されるクロック停止信号５００ｐであり、５０ｐ端子、５１ｐ端子、５５ｐ端子に入力される。クロック停止信号５００ｐに関しては後述する。
シフトレジスタスロット５００、５０１、５０５は、後述する自身ブロックＩＤを除き、同一の構成である。従って、代表して、シフトレジスタスロット５００について、詳細に説明する。
【００２４】
図４は、シフトレジスタスロット５００のブロック図である。シフトレジスタスロット５００には、各ブロックとのインタフェースである信号線群５０ａ、５０ｂ、５０ｃと、ブロック間インタフェースの信号線群である５０ｄ、５０ｅ、５０ｆ、５０ｇが接続される。これらの信号線群５０ａ、５０ｂ、５０ｃ、５０ｄ、５０ｅ、５０ｆ、５０ｇについて、表１から表７に信号の意味をまとめる。ここで、信号線群５０ｂ、５０ｄ、５０ｇは入力信号で、５０ａ、５０ｃ、５０ｅ、５０ｆは出力信号である。
なお、各信号線群５０ａ、５０ｂ、５０ｃ、５０ｄ、５０ｅ、５０ｆ、５０ｇは、同一サイクルで有効な値である。
【００２５】
【表１】
2008003708.tif 000003
【００２６】
【表２】
2008003708.tif 000004
【００２７】
【表３】
2008003708.tif 000005
【００２８】
【表４】
2008003708.tif 000006
【００２９】
【表５】
2008003708.tif 000007
【００３０】
【表６】
2008003708.tif 000008
【００３１】
【表７】
2008003708.tif 000009
【００３２】
信号線群５０ｄは入力信号で、レジスタ５１０に格納される。レジスタ５１０の出力である、１サイクルディレイした右回り入力信号群５１１はＢＩＤデコーダ５１２とセレクタ５１３、および信号線群５０ａに入力される。ＢＩＤデコーダ５１２には、入力信号群５１１のうち、少なくとも、ＷＥ、ＢＩＤが入力される。ＢＩＤデコーダ５１２は、自身のブロック番号を認知するためのブロックＩＤ[４：０]を有する。
【００３３】
図５に、右回りシフト型バスのタイミングチャートについて示す。本タイミングチャートと、図４のシフトレジスタスロット５００の信号線群を用いて、右回りシフト型バスのバスプロトコルを説明する。なお、本タイミングチャートにおける、自身のブロックＩＤは“Ｂ”である。
入力されたＥＩＤとブロックＩＤが等しくなく、かつ、ＷＥが１の場合、セレクタ５１３には、信号線群５１１を選択し、信号線群５０ｅには、信号線群５１１が出力される。結果、信号線群５０ｄが１サイクル遅れて、信号線群５０ｅに出力され、次段のシフトレジスタスロットに投入され、有効なデータライトトランザクションとして引き継がれる。本プロトコルは、図５におけるデータシフト出力である。
次に、入力されたＥＩＤとブロックＩＤが等しく、かつ、ＷＥが１の場合、自身のブロックへの入力として認知し、信号線群５０ａのＲ＿ＷＥ＿ＩＮ信号を１とする。本Ｒ＿ＷＥ＿ＩＮ信号が１の場合、各ブロックは、右回りシフト型バスからの入力がデータライトトランザクションであると認識し、データライト処理を実行する。本プロトコルは、図５におけるデータライトである。
【００３４】
更に、データライト条件が成立した場合、セレクタ５１３を入力信号線群５０ｂ側に選択し、信号線群５０ｅには、入力信号線群５０ｂが出力される。この時、入力信号線群５０ｅのＳＢＲ＿ＷＥ＿ＯＵＴに入力信号線群５０ｂのＳＢＲ＿ＯＵＴ＿ＲＥＱを出力する。
ＳＢＲ＿ＯＵＴ＿ＲＥＱが０の場合は、次段シフトレジスタスロットには、無効なトランザクションとして入力される。本プロトコルは、図５におけるデータライトと同様である。
ＳＢＲ＿ＯＵＴ＿ＲＥＱが１の場合は、次段シフトレジスタスロットには、有効なトランザクションとして入力される。これは、図５におけるデータライト＆データ出力である。
なお、入力されたＷＥが０の場合、無効なトランザクションが入力されたと認知し、セレクタ５１３を入力信号線群５０ｂ側に選択し、自身ブロックからのデータライトを可能である。
【００３５】
これらのＢＩＤデコーダ５１２の振る舞いにより、信号線群５０ｄからの入力を、データライトトランザクションとして受託する振る舞いと、信号線群５０ｂを次段シフトレジスタスロットにデータライトトランザクションとして出力する振る舞いと、自身のブロックに対するデータライトトランザクションでない場合にも、そのトランザクションを次段に引き継ぐことが可能となる。これにより、左側のブロックから右側のブロックへの右回りのデータ転送を実現する。
【００３６】
同様に、先の説明に対し、信号線群５０ｄを信号線群５０ｇに置換え、信号線群５０ｅを信号線群５０ｆに置換え、信号線群５０ａを信号線群５０ｃに置換え、レジスタ５１０をレジスタ５１４に置換え、ＢＩＤデコーダ５１２をＢＩＤデコーダ５１６に置換え、セレクタ５１３をセレクタ５１７に置換え、ＳＢＲ＿ＯＵＴ＿ＲＥＱ信号をＳＢＬ＿ＯＵＴ＿ＲＥＱ信号に置き換えることで、右側のブロックから左側のブロックへの左回りのデータ転送を実現する。
【００３７】
なお、メモリなど、１ポートメモリを使用したメモリに対し、信号線群５０ａと信号線群５０ｃから同時にデータライトトランザクションが発生した場合、メモリライトポートの競合が発生する。これを回避するため、いくつかの方式がある。
１つは、一方のシフト型バスをストールさせ、一方からのデータライトを優先するものである。この場合、競合信号を全ブロックにブロードキャストして停止する。また、信号線群５０ａと信号線群５０ｃをＦＩＦＯに投入することで、競合の頻度を削減できる。更に、このようなメモリを使用する場合は、インタリーブ型メモリ構成をとり、右回りシフト型バスと左回りシフト型バスからの書込みを別バンクメモリとすることで競合を回避できる。
但し、データフローがシンプルで、ブロック間のデータ引渡しは右回りシフト型バスを使用し、外部メモリからの読み込み、すなわち内部バスブリッジ６０を介したデータライトトランザクションは左回りシフト型バスを使用することにより、競合を回避できる。また、１つのメモリに対し、右回りシフト型バスと左回りシフト型バスから同一サイクルで、データライトトランザクションが発生し競合する確率は非常に小さい。このため、性能低下の割合は小さいと言える。
【００３８】
本方式により、一般的にタイミングクリティカルとなるグローバルなバス調停回路を有することなく、バス転送を実現することができる。また、シフトレジスタスロット５００内のレジスタ５１０、５１４により、ブロック単位でレジスタを介することで、実際のＬＳＩのフロアプランにおいて、長い配線とタイミングクリティカルパスを削減できる。
一般的に、トライステートバス方式や、クロスバスイッチ型バスでは、ブロック数が増加した場合、タイミングクリティカルや、配線物量が増加するが、本方式によれば、バスに接続するブロック数を増加させた場合においても、タイミングクリティカルと配線量増加を抑止することが可能である。
【００３９】
更に、複数のブロック間で、同一サイクルにて、並列にデータ転送を行うことが可能で、高いデータ転送性能を得ることができる。特に、隣り合うブロックに対してのみデータ転送する場合、ブロック数に比例したデータバンド幅を得ることが可能である。
この様に、シフト型バス５０のバスプロトコルは、データのライトのみである。データライトのバスプロトコルでは、リクエスト信号（ＷＥ＿ＯＵＴ）と同一サイクルにて、アドレス（ＡＤＤＲ＿ＯＵＴ）やデータ（ＤＡＴＡ＿ＯＵＴ）を出力することが可能で、ＦＩＦＯやキューを用いて、状態を保持しながら実行するバス構造と比較し、よりシンプルなバスを構成できる。
【００４０】
クロック停止信号５００ｐは５０ｐ端子に入力される。本クロック停止信号５０ｐ信号がアクティブな場合、セレクタ５１３とセレクタ５１７は、共に信号線群５０ｄと信号線群５０ｇが選択される。これにより、入力から出力まで、レジスタを介さずにスルーで伝播する。本方式により、例えば、１つのブロックのクロックを停止した場合においても、データ転送を可能とする。本シフト型バス５０は、グローバルなバス調停回路を有しないため、少なくとも動作すべきブロックのみにクロックを供給することで、ブロック間のデータ転送を可能とし、動作するレジスタ数の削減により、消費電力を低減可能である。なお、シフト型バス５０全体にはクロックを供給し、各ブロックにはクロックを供給しないことで、レジスタ５１０、５１４、５１８分の電力増加で、各ブロックを停止することも可能である。
【００４１】
このようにシフト型バス５０は、隣り合うブロック間をシンプルなインタフェースで接続できる。従って、ブロックＩＤフィールドを増やすことで、複数のブロックを接続可能である。本実施例の説明では、映像処理部６内の共通バスとして説明しているが、これに限定されない。例えば、ＬＳＩのピンにシフト型バスインタフェースを用いることで、複数のＬＳＩを直列接続可能となり、隣り合うＬＳＩのみでなく、配置的に離れたＬＳＩとの通信を可能とする。なお、ＬＳＩ間接続では、高速シリアルインタフェースなどを使用し、ピン数削減も実現できる。
【００４２】
また、シフト型バス５０では、Ｌａｓｔ信号を有する。データ転送と同時に、本信号線が“１”の場合、後述する同期制御部４７３内のデータメモリレディカウンタＤＭＲＣをカウントアップする。これにより、命令レベルでブロック間の同期化を実現する。詳細については後述する。
なお、シフト型バスでは、リードトランザクションも有する。本リードトランザクションについても後述する。
【００４３】
再び、図２を用いて、映像処理部６の説明を行う。
シフト型バス５０には、複数のブロックが接続される。先に示した内部バスマスタ制御部６１、内部バススレーブ制御部６２に加え、映像処理部６全体で共有可能なメモリを有する共有ローカルメモリ６５、ソフトウェアによって動作する、映像コーデックや画像の回転、拡大縮小など、２次元の画像に対して処理を行う複数の映像処理エンジン６６、６７、画像処理の一部の処理を実行する専用ハードウェア６８などが接続される。専用ハードウェア６８の一例としては、ＭＰＥＧ−２やＨ．２６４符号化規格における、エンコード時の動き予測などを処理するブロックである。但し、専用ハードウェア６８の処理内容は、本発明の本質に係りを持たないため、説明を省略する。
映像処理エンジン６６、６７は、プロセッサ型のブロックで、シフト型バス上に複数接続することができる。
共有ローカルメモリ６５、映像処理エンジン６６、６７、専用ハードウェア６８、内部マスタ制御部６１、内部バススレーブ制御部６２は、それぞれ独自のブロックＩＤを有し、シフト型バス５０の共通バスプロトコルで、相互に接続される。
【００４４】
次に、図６を用いて、第１の実施例における、映像処理エンジン６６のより詳細な説明を行う。図６は映像処理エンジン６６のブロック図である。
映像処理エンジン６６のインタフェースは、シフト型バス５０とのインタフェースのみであり、右回りシフト型バスの入力信号５１ａ、左回りシフト型バスの入力信号５１ｃ、及び、シフト型バス５０への出力信号５１ｂである。これら３種の信号は、データパス部３６に接続される。データパス部３６には、信号線４４を介して、シフト型バス５０に対してデータ出力処理を行うローカルＤＭＡＣ３４が接続される。
【００４５】
更に、映像処理エンジン６６は、シフト型バス５０からデータライトを行うことが可能な命令メモリ３１とデータメモリ３５を有し、データパス部３６には、パス４２を介して、命令メモリ３１の制御を行う命令メモリ制御部３２と接続され、パス４３を介して、データメモリ制御部３３が接続される。
命令メモリ制御部３２は、シフト型バス５０からの命令メモリ３１へのデータライトと、ＣＰＵ部３０への命令供給を制御するブロックで、パス４０を介して命令メモリ３１と、パス３７を介してＣＰＵ部３０と、パス４２を介してデータパス部３６に接続される。
データメモリ制御部３３は、シフト型バス５０からのデータメモリ３５へのデータライトと、ローカルＤＭＡＣ３４が制御する、データメモリ３５からシフト型バス５０へのデータ出力の制御と、ＣＰＵ３０からデータメモリ３５へのアクセスの制御を行うブロックである。データメモリ３５の制御は、パス４１を使用して行う。
【００４６】
シフト型バス５０からのデータメモリ３５へのデータライトと、データメモリ３５からシフト型バス５０へのデータ出力は、パス４３を介して、データパス部３６と強調して制御する。ＣＰＵ部３０との接続は、２つのパスで制御される。データメモリ３５からＣＰＵ部３０へのデータ読出し処理は、パス３８により制御され、ＣＰＵ部３０から、データメモリ３５へのデータ書込みはパス３９により制御される。共に、データメモリ３５のアクセスアドレスはパス４５で供給される。
【００４７】
なお、本実施例の説明では、説明を容易にするため、データメモリ３５の個数を１つとするが、複数のデータメモリを使用したインタリーブ構成も可能である。インタリーブ構成により、複数のデータメモリ３５のアクセスを並列に行うことが可能である。
本発明を説明するにあたり、ＣＰＵ３０による演算内容を定義する。但し、本演算内容は、本発明の本質を説明するためのものであり、演算内容の種類については限定を持たない。
【００４８】
図７に、演算内容の概要を示す。図７が示す通り、演算内容は、２次元の画像Ａと２次元画像Ｂの画素毎に加算を行い、メモリに書込みを行うものである。
特許文献１に示したＳＩＭＤ型演算器を使用した場合、必要サイクルは、行列Ａの読出しに４サイクル、行列Ｂの読出しに４サイクル、加算に４サイクル、減算に４サイクル消費し、合計１６サイクル必要となる。なお、ＳＩＭＤ型演算器の並列数を８とした場合、加算に必要なサイクル数は２となるが、本説明では、４並列のＳＩＭＤ型演算器として説明する。この時、ＳＩＭＤ型演算器が必要と総命令数は、必要サイクル数と同一の１６命令である。本演算内容を使用し、本発明の実現方式について述べる。
【００４９】
ＣＰＵ部３０は、２次元画像に対する演算などを行うＣＰＵである。本実施例では、説明を容易にするため、ＣＰＵ部３０は、次に示す４命令を有するものとする。但し、本命令の種類は、説明を容易にするためのものであり、命令種類についての制限はもたない。但し、後述する、レジスタポインタと高さ方向を指定する手段については、必要な要素である。
４命令は、分岐命令、リード命令、ライト命令、加算命令とする。各命令の命令フォーマットにおいて、必要なビットフィールドを表８から表１１に示す。
【００５０】
【表８】
2008003708.tif 000010
【００５１】
【表９】
2008003708.tif 000011
【００５２】
【表１０】
2008003708.tif 000012
【００５３】
【表１１】
2008003708.tif 000013
【００５４】
図８はＣＰＵ部３０のブロック図である。命令メモリ制御部３２とのインタフェース３７は、２種の信号に別れ、１つは、命令デコード部３０３が命令メモリ制御部３２に対して出力する命令フェッチ要求３７ｒと、命令メモリ制御部３２が出力し、ＣＰＵ部３０に入力される命令３７ｉである。命令デコード部３０３は、１つの命令処理が終了した時点で、命令フェッチ要求３７ｒを出力する。対応して、命令３７ｉと命令レディ信号３７ｄが入力され、命令レジスタ３０１に格納される。ここでの説明では、命令レジスタ３０１のセット数を１として説明する。但し、命令の読出しレイテンシは１サイクルよりも大きいため、複数セットの命令レジスタ３０１を有すことも可能である。命令レジスタ３０１の値は、命令デコード部３０３に供給され、命令をデコードする。命令デコード部３０３では、レジスタファイル（汎用レジスタ）３０４の読出しポートと書込みポートを制御する制御線３０８と、演算器３１３を制御するための命令デコード信号３０９と、命令の種類によって、セレクタ３１１を制御するための制御線３１０を生成する。また、１つの命令処理が終了した時点で、命令フェッチ要求３７ｒを出力する。
【００５５】
本説明では、分岐命令を除き、リード命令、ライト命令、分割加算命令を持つＣＰＵ部３０として説明する。従って、制御線３０８は、リード命令時は、リードデータ３８が返送された時点で、リードデータを格納するレジスタ番号ポインタ値を格納先レジスタ番号ポインタとして使用する。ライト命令時は、レジスタファイル３０４の読出しが必要なため、ライトデータレジスタ番号を使用する。分割加算命令時は、レジスタファイル３０４の読出しと書込み共に必要で、これを制御する。命令デコード信号３０９は、本説明では、分割加算命令時のみにアクティブとなるが、他の命令を有する場合、命令種類に従い、演算器を制御するための信号を出力する。制御線３１０は、リード命令時は、リードデータ３８を選択し、分割加算命令時は演算器３１３の演算結果３１４を選択する。選択された演算データ３１５は、レジスタファイル３０４に格納される。また、命令デコード部３０３は、リード命令時とライト命令時、演算部３１３を制御し、データメモリ３５のアクセスアドレス４５を生成する。
【００５６】
なお、演算器３０３は、特許文献１と同様に８並列のＳＩＭＤ型の演算器で構成され、８ビット幅の加算を並列に８個演算可能な構成とする。すなわち、分割加算を８個並列に演算できる。また、ＣＰＵ３０のデータ幅を８バイトとする。従って、リード命令、ライト命令、分割加算命令には８バイト単位で実行できる構成である。
また、リード命令、ライト命令、分割加算命令のＷｉｄｔｈフィールドには、８、１６、３２が定義できるものとし、カウントフィールドには、１から１６まで、１間隔で指定できるものとする。
【００５７】
図９を用いて命令デコード部３０３および演算部３１３のアクセスアドレス４５の生成動作を説明する。図９は、命令デコード部３０３が生成するレジスタファイル３０４の読出しポートと書込みポートを制御する制御線３０８と、データメモリ３５のアクセスアドレス４５を生成するフローチャートである。
【００５８】
命令デコード部３０３は、Ｗｃカウンタを有し、命令起動時に０にクリアされる（ステップ９０）。次に、ステップ９１にて、ＳｒｃとＤｅｓｔ、（Ａｄｄｒ＋Ｗｃ）を使用して、リード命令、ライト命令、分割加算命令を実行する。次にステップ９２にて、ＳｒｃとＤｅｓｔに１を加算し、Ｗｃに８を加算する。ステップ９３にて、命令フィールドで指定されたＷｉｄｔｈフィールドとＷｃの比較を行う。ＷｉｄｔｈがＷｃに大きい場合、再度ステップ９１に戻り、命令実行を繰り返す。ＷｉｄｔｈがＷｃと等しい、若しくは小さい場合、ステップ９４に遷移し、命令フィールドに示されたＣｏｕｎｔ値が０であるかを判定する。Ｃｏｕｎｔ値が０で無い場合、ステップ９５に遷移して、Ｃｏｕｎｔ値から１を減算し、ＡｄｄｒにＰｉｔｃｈを加算し、再度、ステップ９０に遷移して、命令実行を繰り返す。Ｃｏｕｎｔ値が０の場合、命令実行を終了する。この時、命令デコード部３０３は命令フェッチ要求３７ｒを出力する。
【００５９】
図９のタイミングチャートの振る舞いにより、１つの命令にて、２次元矩形に対する演算を可能とする。特にリード命令では、Ｐｉｔｃｈを指定することで、データメモリ３５上に分散的に配置された２次元矩形を、レジスタファイル３０４に連続データとして格納できる。また、ライト命令では、同じくＰｉｔｃｈを指定することで、レジスタファイル上に配置された連続データを、データメモリ３５上の分散的に配置された２次元矩形領域にライトすることが可能である。
【００６０】
図７で示した演算内容では、２つのリード命令、１つの分割加算命令、１つのライト命令という、合計３命令のみで演算を終了できる。すなわち、命令メモリ３１からは、４命令のみをフェッチすればよい。但し、特許文献１に示したＳＩＭＤ型の命令長に対し、本発明の命令は、Ｗｉｄｔｈ、Ｃｏｕｎｔ、Ｐｉｃｔｈなどのオペランドが付加され、命令長が長くなる。特許文献１の命令幅を３２ビットとした場合、本発明における命令長は６４ビット程度である。一回の命令メモリアクセスで消費する電力は２倍となるが、アクセス回数を１６から４と削減可能で、命令メモリが消費する総消費電力は２×４÷１６で示され、電力を半分に削減できる。また、１つの命令で２次元のデータに対して処理を行うことは、実質的にプログラムの同一命令によるループの回数を削減する。これは、命令メモリ３１の容量を削減できることを意味する。
【００６１】
なお、図８において、入力データ３０ｉは、レジスタファイル３０４に入力され、レジスタファイル３０４のデータを更新可能である。更に、演算データ３１５は、演算データ３０wbとして出力される。この入力データ３０ｉと演算データ３０wbについては、第２の実施例の説明にて行う。
【００６２】
図１０を用いて、第１の実施例における命令メモリ制御部３２の説明を行う。図１０は命令メモリ制御部３２のブロック図である。
命令メモリ制御部３２は、命令メモリ３１のメモリアクセスを制御するブロックである。命令メモリ３１には、ＣＰＵ部３０からの命令フェッチアクセスと、シフト型バス５０からのアクセスがあり、命令メモリ制御部３２はこれらのアクセスを調停して、命令メモリ３１をアクセスするものである。アクセス調停は調停部３２０で行う。メモリアクセス要求は、ＣＰＵ部３０から入力される命令フェッチ要求３７ｒと、データパス部３６から入力されるパス４２である。調停結果により、セレクタ３２３を制御し、命令メモリ３１をアクセスするためのアドレスなどの制御線４０ｃを出力する。
【００６３】
命令フェッチアクセスの場合、調停部３２０は、セレクタ３２３に命令のプログラムカウンタ３２２の出力を選択し、命令メモリ３１を読み出すと共に、制御線３２１を出力し、プログラムカウンタ３２２をインクリメントする。命令メモリ３１から返送された命令４０ｄは命令レジスタ３２４に格納され、命令３７ｉとして、ＣＰＵ部３０に返送する。同時に、命令のオペコードフィールドは分岐制御部３２５に入力され、分岐命令か判断し、分岐命令時に１となる信号３２６を調停部３２０に入力する。また、分岐条件レジスタの読出しインデックスフィールドは、分岐条件レジスタ３２７に入力される。分岐条件レジスタ３２７とは１ビット幅の複数ワードで構成するレジスタ群で、分岐条件レジスタの読出しインデックスフィールドにてワードを指定し、１ビット幅の信号３２８を調停部３２０に入力する。
【００６４】
実際の分岐は、信号３２６が１かつ、信号３２８が１の時に分岐する。本組合せ以外は、分岐命令以外の命令として認識する。調停部３２０は、分岐命令以外の命令時のみ、命令レディ信号３７ｄを返送する。分岐命令時は、命令レディ信号３７ｄを返送せず、セレクタ３２３を命令レジスタ３２４内に格納された即値を選択する。この時、本即値をインクリメントした値でプログラムカウンタ３２２を更新する。
【００６５】
本方式によれば、ＣＰＵの命令フェッチ要求３７ｒの発行間隔が数サイクル必要な場合、分岐命令による命令の再読み出しに要するサイクルを完全に隠蔽することが可能となり、分岐による性能低下を抑止可能となる。本発明におけるＣＰＵ部３０では、２次元のオペランドを指定することにより、命令フェッチ要求３７ｒの発行ピッチは大きく、本効果は大きい。
【００６６】
図１１を用いて、第１の実施例におけるデータメモリ制御部３３の説明を行う。図１１はデータメモリ制御部３３のブロック図である。
データメモリ３５は、ＣＰＵ部３０からのリード及びライトアクセスと、シフト型バス５０からのライト処理と、ローカルＤＭＡＣ３４からのリードアクセスが可能で、データメモリ制御部３３は、これらのアクセスの調停を行うブロックである。これらの調停は、調停部３３０で行い、アドレスセレクタ３３１とデータセレクタ３３２の制御を行う。なお、データメモリ３５との信号線４１は、４１ａ、４１ｄ、４１ｗの３つの信号線に分類される。またデータパス部３６との信号線４３は、信号線４３ａ、４３ｄ、４１ｌ、４３ｒの４つの信号線に分類される。
【００６７】
まず、ＣＰＵ部３０との接続について説明する。リード命令時およびライト命令時のデータメモリアドレス４５は、アドレスセレクタ３３１を通り、データメモリアドレス４１ａとして、データメモリ３５に入力される。ライト命令時は、ライトデータ３９がデータセレクタ３３２を経由して、ライトデータ４１ｗとしてデータメモリ３５に入力される。リード命令時は、データメモリアドレス４１ａに従い、リードデータ４１ｄが読み出され、データレジスタ３３３に格納される。格納されたリードデータは、リードデータ３８としてＣＰＵ部３０に返送される。なお、リード命令のＤｅｓｔＲｅｇに、マスタＳ／Ｄレジスタの値を指定した場合、リードデータ４３ｒにリードデータは出力される。
次にシフト型バス５０からのライト処理では、アドレス線４３ａがアドレスセレクタ３３１を通り、データメモリアドレス４１ａとして、データメモリ３５に入力される。同時にデータ線４３ｄがデータセレクタ３３２を経由して、ライトデータ４１ｗとしてデータメモリ３５に入力される。
【００６８】
最後に、ローカルＤＭＡＣ３４からのアクセス時は、アドレス４３pがアドレスセレクタ３３１を通り、データメモリアドレス４１ａとして、データメモリ３５に入力される。対応して読み出されたリードデータ４１ｄはデータレジスタ３３３に格納され、リードデータ４３ｒとして返送される。
【００６９】
図１２を用いて、第１の実施例におけるローカルＤＭＡＣ３４の説明を行う。図１２はローカルＤＭＡＣ３４のブロック図である。
ローカルＤＭＡＣ３４は、シフト型バス５０に対してデータ出力する処理における、データメモリアドレス４４ｄａと、シフト型バス５０から入力されるデータメモリ３５からのリードアクセスに対応して、リード処理を行うためのデータメモリアドレス４４ｄａ生成する機能と、シフト型バス５０に対してデータ出力する際の、シフト型バスアドレス４４ｓａを生成する機能と、シフト型バス５０に対して、リードコマンドを発生させるための機能を有する。ローカルＤＭＡＣ３４は、信号線４４にてデータパス部３６のみが接続される。ここで、信号線４４は、信号線４４pｗ、４４ｓwb、４４ｄａ、４４ｓａ、４４ｄｗの５種の信号線に分類できる。
【００７０】
ローカルＤＭＡＣ３４内には、リード命令によって書き換え可能なマスタＤレジスタ３４０およびマスタＳレジスタ３４１と、シフト型バス５０から書き込むことが可能なスレーブＤレジスタ３４２およびスレーブＳレジスタ３４３の４セットのレジスタ群を有する。各レジスタのフォーマットを表１２から表１５に示す。
【００７１】
【表１２】
2008003708.tif 000014
【００７２】
【表１３】
2008003708.tif 000015
【００７３】
【表１４】
2008003708.tif 000016
【００７４】
【表１５】
2008003708.tif 000017
【００７５】
ローカルＤＭＡＣ３４を使用したデータ転送は、３種の動作モードを有する。
【００７６】
１つ目は、データライトモードである。データライトモードでは、マスタＤレジスタ３４０のパラメータを用いて、自身のデータメモリ３５を読出し、マスタＳレジスタ３４１のパラメータを用いて、他の映像処理エンジンなどのブロックにデータを転送し、データメモリ３５などのアドレスマッピングされた領域にデータをライトするモードである。
【００７７】
２つ目は、リードコマンドモードである。リードコマンドモードでは、マスタＤレジスタとマスタＳレジスタの値そのものをデータとして、他の映像処理エンジンなどのブロックにデータを転送し、その他ブロック内のスレーブＤレジスタとスレーブＳレジスタに値を格納処理である。これは、他のブロックへのリード要求として動作する。なお、リードコマンドモード時は、シフト型バス５０のインタフェースとして、ＣＭＤ信号を１として転送する。リードコマンドを受託するブロックは、ＣＭＤ信号により、そのシフト型バス転送がリードコマンドであるかを認識する。
【００７８】
３つ目は、リードモードである。先のリードコマンドモードで受託したリード要求に対し、スレーブＤレジスタ３４２のパラメータを用いて、データメモリ３５を読出し、スレーブＳレジスタ３４３のパラメータを用いて、他の映像処理エンジンなどのブロックにデータを転送し、データメモリ３５などのアドレスマッピングされた領域にデータを格納するモードである。
これら３つのモードの組合せにより、映像処理エンジンなどのブロック間で、データ転送を実現する。
【００７９】
マスタＤレジスタ３４０とマスタＳレジスタ３４１は、ＣＰＵ部３０が発行するリード命令により更新可能で、この時、信号線４４pｗからデータが入力され、２つのレジスタが更新される。すなわち、予め、データ転送内容を記述した記述子をデータメモリ３５に格納し、その内容をマスタＤレジスタ３４０とマスタＳレジスタ３４１にコピーすることで、データ転送を開始する。
【００８０】
２つのレジスタが更新された時点で、マスタＤレジスタ３４０のＭｏｄｅフィールドにより２つの状態に遷移する。
Ｍｏｄｅフィールドがデータライトモードを示している場合、アドレスセレクタ３４４を介して、マスタＤレジスタ３４０のＭＡＤＤＲ、ＭＷｉｄｔｈ、ＭＣｏｕｎｔ、ＭＰｉｔｃｈはデータメモリアドレス生成器３４６に転送される。データメモリアドレス生成器３４６は、データメモリ３５を読み出すためのアドレス生成を行い、アドレス４４ｄａを出力する。アドレス生成の方式は、ＣＰＵ部３０内の命令デコード部３０３が生成するアクセスアドレス４５と同一の方式で生成される。従って、データメモリアドレス生成器３４６にはＷｃカウンタを有し、ＭＷｉｄｔｈ、ＭＣｏｕｎｔ、ＭＰｉｔｃｈをそれぞれＷｉｄｔｈ、Ｃｏｕｎｔ、Ｐｉｔｃｈと置き換えたアドレス生成により、２次元矩形のアドレスを生成する。
【００８１】
同様に、マスタＳレジスタ３４１のＳＡＤＤＲ、ＳＷｉｄｔｈ、ＳＣｏｕｎｔ、ＳＰｉｔｃｈはアドレスセレクタ３４５を経由して、シフト型バスアドレス生成器３４７に入力され、シフト型バス５０に出力するアドレスを生成し、アドレス４４ｓａを出力する。このシフト型バスアドレス生成器３４７によるアドレス生成も、データメモリアドレス生成器３４６のアドレス生成と同様に、２次元矩形を表現する。これら２つのアドレスにより、データメモリ３５から順次リードデータ４３ｒが読み出され、結果、信号線群５０ｂとして、映像処理エンジン６６からシフト型バス５０に対してデータライト処理を実現する。この時、転送先ブロックは、マスタＳレジスタ３４１のＳＢＩＤが示すフィールドである。この時、ＭＤＩＲフラグに従い、右回りのシフト型バスを使用するか、左回りのシフト型バスを使用するか決定される。
【００８２】
なお、本方式では、ＭＷｉｄｔｈ、ＭＣｏｕｎｔ，ＭＰｉｔｃｈとＳＷｉｄｔｈ、ＳＣｏｕｎｔ，ＳＰｉｔｃｈそれぞれを使用して、データメモリ３５のアドレス４４ｄａとシフト型バスに出力するためのアドレス４４ｓａを生成する。このように、２つのレジスタセットで、それぞれアドレス生成を行うことにより、２次元矩形の形を変換してデータ転送を可能としている。但し、同一矩形として転送する場合は、片方のみのパラメータでアドレス生成可能である。
【００８３】
一方、Ｍｏｄｅフィールドがリードコマンドモードと示している場合、マスタＤレジスタ３４０とマスタＳレジスタ３４１の値は、直接出力信号４４swbとして出力され、リードコマンドを他のブロックに転送する。この時、転送先ブロックは、マスタＤレジスタ３４０のＭＢＩＤフィールドが示すブロックである。転送先ブロックが本リードコマンドを受託した場合、スレーブＤレジスタ３４２とスレーブＳレジスタ３４３を更新し、リードモードとして処理を開始する。リードコマンドは、パス４４ｓｗを介して、スレーブＤレジスタ３４２とスレーブＳレジスタ３４３に更新される。
転送先ブロックがリードコマンドを受託後、先のデータライト処理とほぼ同様な動作にて、リードデータを読出し、シフト型バス５０に対して出力する。スレーブＤレジスタ３４２のＭＡＤＤＲ，ＭＷｉｄｔｈ、ＭＣｏｕｎｔ，ＭＰｉｔｃｈは、アドレスセレクタ３４４を経由して、データメモリアドレス発生器３４６に入力され、アドレス４４ｄａとしてデータメモリ３５をアクセスする。その後の振る舞いは、データライト時と同様である。
同様に、スレーブＳレジスタ３４３のＳＡＤＤＲ，ＳＷｉｄｔｈ、ＳＣｏｕｎｔ，ＳＰｉｔｃｈは、セレクタ３４５を経由して、シフト型バスアドレス生成器３４７に入力され、アドレス４４ｓａが生成される。その後の動作は、データライト時と同様である。
これら３つのローカルＤＭＡＣ３４の振る舞いにより、シフト型バス５０では、アドレスとデータが同一サイクルで出力可能なライトトランザクションのみでデータ転送を実現する。一般に、バスの性能を向上するため、アドレスとデータを分離したスプリット型のバスが使用される。スプリット型バスとは、アドレスとデータを同一のトランザクションＩＤなどのＩＤで管理し、各リクエストスレーブ側は、アドレスをＦＩＦＯなどにキューイングして、データ受信まで待機する。従って、キューやＦＩＦＯの段数により、バス性能が制限される。一方、本方式では、全てのバス転送において、同一サイクルでアドレスとデータを転送可能であり、ＦＩＦＯ段数などによる性能の飽和が発生しない。
【００８４】
なお、ローカルＤＭＡＣ３４の動作は、リード命令により起動され、起動された時点で、ＣＰＵ部３０は次の命令を実行可能となる。但し、ローカルＤＭＡＣ３４を使用した転送が実行中のみ、次のローカルＤＭＡＣ３４の使用は禁止状態となりストールする。但し、ローカルＤＭＡＣ３４起動の発行ピッチを大きくすることで、競合による性能低下は発生しない。この間、ＣＰＵ部３０は別の処理シーケンスを実行することにより、ＣＰＵ部３０の処理とブロック間転送を並列に実行可能で、必要な処理サイクル数を削減できる。
また、リード転送に関しては、１セットのスレーブＤレジスタ３４２とスレーブＳレジスタ３４３のみ有するため、リード処理実行中は、次のリードコマンド受託を禁止し、シフト型バス５０上にて終端を行わない。シフト型バス５０は、ループ形状をしており、本リードコマンドがシフト型バス５０を一周した時点で、リードコマンドを受託することにより、リードコマンドの再起動を可能とする。
ブロック間のデータ転送の大部分をライトモードで行い、リードの発生頻度を抑えることで、この性能低下を低減可能である。映像処理は、データフロー的な振る舞いが多く、ブロック間転送は、ライトモードの使用が大部分となるため、本方式は性能低下を抑止できる。
【００８５】
ローカルＤＭＡＣ３４による転送では、シフト型バス５０に対し、“Ｌａｓｔ”信号を出力することができる。これは、マスタＤレジスタ３４０若しくはスレーブＤレジスタ３４２内のＬａｓｔフィールドが“１”の転送時、２次元矩形の転送の最後の転送時に、１サイクルのみアサートする。これにより、対象とするダイレクトメモリ転送が終了したかた認識可能となる。これは、後述するブロック間同期の際に使用する。
【００８６】
図１３を用いて、第１の実施例におけるデータパス部３６の説明を行う。図１３はデータパス部３６のブロック図である。
データパス部３６は、シフト型バス５０と、命令メモリ制御部３２とデータパス部３３とローカルＤＭＡＣ３４との間のデータ受渡しを行うブロックである。
まず、シフト型バス部５０からのデータ入力について説明する。右回りシフト型バスの入力である信号線群５１ａと左回りシフト型バスの入力である信号線群５１ｃは、命令メモリ３１への書込みパスであるパス４２と、データメモリ３５への書込みパスであり、そのうちアドレスであるパス４３ａとデータであるパス４３ｄ、及びローカルＤＭＡＣ３４内のスレーブＤレジスタ３４２とスレーブＳレジスタ３４３への書込みパスであるパス４４ｓｗに接続される。シフト型バス５０へのデータ出力である信号線群５１ｂは、２つのブロックから入力され、１つはデータメモリ３５からのリードデータ４３ｒであり、２つ目は、ローカルＤＭＡＣ３４からの出力である、マスタＤレジスタ３４０とマスタＳレジスタ３４１の直接出力信号４４swbと、シフト型バス５０への出力アドレス４４ｓａである。これらは、排他的に処理され、シフト型バス５０のプロトコルをもって制御される。
また、ローカルＤＭＡＣ３４がデータメモリ３５を読み出すためのアドレス４４ｄａは、データメモリ制御部３３のアドレス４３pに接続される。
【００８７】
このように、第１の実施例によれば、命令メモリ３１のアクセス頻度削減と、各ブロックへのクロック供給停止などにより、消費電力を削減可能である。また、分岐命令に隠蔽や、ローカルＤＭＡＣ３４との並列動作などにより、実質的に処理サイクル数を削減し、低電力化を実現する。
【実施例２】
【００８８】
図１４を用いて、本発明の第２の実施例について説明する。図１４は、本実施例における映像処理エンジン６６のブロック図である。図６に示した、第１の実施例の映像処理エンジン６６に対し、３つの差分がある。
１つ目は、ＣＰＵ部３０の入力データ３０ｉと演算データ３０wbが、ベクトル演算部４６に接続されたものである。入力データ３０ｉは、ＣＰＵ部３０内のレジスタファイル３０４に入力するデータであり、レジスタファイル３０４のデータを更新可能である。演算データ３０wbは、ＣＰＵ部３０演算結果であり、ベクトル演算部４６に入力される。
２つ目は、図６の命令メモリ制御部３２に対し、命令メモリ制御部４７が接続される。命令メモリ制御部４７は、複数のプログラムカウンタを有し、命令メモリ３１の制御を行う。これに伴い、三つ目の差分は、ベクトル演算部４６が、命令メモリ制御部４７にパス３７を介して接続される。
【００８９】
図１５に、第２の実施例におけるベクトル演算部４６のブロック図を示す。ベクトル演算部４６の機能は、図８で示したＣＰＵ部３０に対し、データメモリ３５に対するアクセスが出来ない点である。インタフェースの差は、パス３８、パス３９、パス４５が存在しない。なお、演算部４６３は、図８の演算部３１３と同一構成、若しくは、命令セットが異なっていてもよい。
ベクトル演算部４６の演算内容については、図２１から図２６を用いて後述する。
【００９０】
図１６に命令メモリ制御部４７のブロック図を示す。命令メモリ制御部４７と図１０に示した命令メモリ制御部３２との差は２つである。
１つ目は、調停部４７０で、ＣＰＵ部３０とベクトル演算部４６からの２つの命令フェッチ要求３７ｒを受託し、調停する。
調停結果４７１は、ベクトル演算部４６向けのプログラムカウンタ４７２に入力される。また、セレクタ４７５を制御して、命令メモリ３１をアクセスするためのアドレスなどの制御線４０ｃを出力する。このように、命令メモリ３１からは２つのＣＰＵの命令列が格納され、命令メモリ３１を共有することが可能である。第１の実施例の説明にて、本方式では、命令フェッチの発行間隔を大きく出来ると述べた。従って、複数のＣＰＵが共有の命令メモリ３１をアクセスした場合においても、アクセス競合の発生する頻度は低く、性能低下を抑止可能である。
２つ目の差分は、同期制御部４７３である。同期制御部４７３は、ＣＰＵ部３０とベクトル演算部４６の同期処理を行うブロックで、各ＣＰＵに対するストール信号４７４を生成する。
【００９１】
図１４および図１５の説明にて、ＣＰＵ部３０とベクトル演算部４６の演算結果は、他方のレジスタファイル３０４と４６２に格納可能と示した。同期制御は、２つの方式があり、１つは、入力データの準備が出来ているかを示す同期化である。例えば、ＣＰＵ部３０の演算データ３０wbが有効になった時点で、ベクトル演算部４６は、その演算データ３０wbを使用可能となる。従って、演算データ３０wbが有効となるまで、ベクトル演算部４６はストールしなければならない。これを入力同期とする。２つ目は、書込み先のレジスタファイルが、書込み可能常態であるかを知る同期化である。例えば、ベクトル演算部４６のレジスタファイル４６２が書込み可能となるまで、ＣＰＵ部３０はストールしなければならない。これを出力同期とする。
【００９２】
また、他の映像処理エンジン６から、ローカルＤＭＡＣ３４を使用して、データメモリ３５にデータをダイレクトメモリ転送し、本転送データをＣＰＵ部３０が読み出す場合、そのダイレクトメモリ転送が終了していることを認識しなければならない。データ転送が終了していない場合、ＣＰＵ部３０はストールする。これをブロック間同期と呼ぶ。なお、ブロック間同期については、第１の実施例でも使用可能であるが、この第２の実施例のみで説明を行う。
同期制御部４７３は、これら３つの同期化処理を行う。次に、同期制御方式について説明する。
同期制御には、ＣＰＵ毎に配置される４つのカウンタと、ブロックに１ペアで配置される２つのカウンタと、命令上に定義された５つのフラグにより同期化を行う。表１６にカウンタの定義を示す。また、表１７に命令内に配置する同期化フィールドの定義を示す。
【００９３】
【表１６】
2008003708.tif 000018
【００９４】
【表１７】
2008003708.tif 000019
【００９５】
まず、図１７を用いて、入力同期について説明する。ＣＰＵ部３０の演算データ３０wbが有効になった時点で、ベクトル演算部４６は、その演算データ３０wbを使用可能となる。従って、演算データ３０wbが有効となるまで、ベクトル演算部４６はストールする必要がある。ＣＰＵ部３０の命令にて、ＤＲＥフィールドが１の命令が終了時点で、ベクトル演算部４６内の実行レディカウンタＥＲＣ〔ベクトル演算部４６〕をカウントアップする。本命令にて、演算データ３０wbをベクトル演算部４６に格納し、本命令終了時点にて、ベクトル演算器４６は、データ３０wbを使用した演算が可能となる。それまでベクトル演算器４６における、ＩＳＹＮＣを有した命令はストールする。本ストール条件は、ＥＲＣ〔ベクトル演算部４６〕がＳＲＣ〔ベクトル演算部４６〕よりも小さいか等しい時で、ＩＳＹＮＣを有した命令時ある。先の実行レディカウンタＥＲＣ〔ベクトル演算部４６〕がカウントアップされた時点で、実行レディカウンタＥＲＣ〔ベクトル演算部４６〕はスレーブ要求数カウンタＳＲＣ〔ベクトル演算部４６〕よりも大きくなる。この時点で、ベクトル演算器４６は、ストールを解除し演算をスタートできる。同時にスレーブ要求数カウンタＳＲＣ〔ベクトル演算部４６〕をカウントアップする。この２つのカウンタの更新１セットで、１つの入力同期を行う。
【００９６】
また、ベクトル演算器４６の処理速度が遅く、ＳＲＣとＥＲＣのカウントアップに乖離があった場合においても、ＣＰＵ部３０による演算データ３０wbの準備、すなわち、実行レディカウンタＥＲＣのカウントアップは可能で、データのプリフェッチとして動作可能である。
【００９７】
同様に、ベクトル演算器４６が生成した演算データ３０ｉをＣＰＵ部３０が使用する場合は、先の説明とは逆に、ベクトル演算器４６の命令にて、ＤＲＥフィールドを使用し、ＣＰＵ部３０の命令にてＩＳＹＮＣフィールドを使用し、ＣＰＵ部３０内に配置された実行レディカウンタＥＲＣ〔ＣＰＵ部３０〕とスレーブ要求数カウンタＳＲＣ〔ＣＰＵ部３０〕により、入力同期が可能となる。
なお、ここでは、実行レディカウンタＥＲＣとスレーブ要求数カウンタＳＲＣを使用した入力同期について説明したが、１ビット幅のフラグでも可能である。例えば、実行レディカウンタＥＲＣの更新条件でフラグをセットする。本フラグと演算データの受け手側のＣＰＵ命令のＩＳＹＮＣフラグが共に１になるまで、２つのＣＰＵはストールする。ストール解除時点で、フラグをクリアすることにより、少ない論理回路で、２つのＣＰＵ間の同期化を可能とする。
【００９８】
次に、図１８を使用して、出力同期について説明する。出力同期も入力同期と同様に２つのカウンタと２つの命令内で定義する同期フィールドにより同期化を行う。出力同期は、書込み先のレジスタファイルが、書込み可能常態であるかを知る同期化であり、例えば、ベクトル演算部４６のレジスタファイル４６２が書込み可能となるまで、ＣＰＵ部３０はストールしなければならない。入力同期は、後段ＣＰＵのストールであったのに対し、出力同期は前段ＣＰＵのストールである。
【００９９】
本例の動作では、ベクトル演算器４６の命令にて、ＲＦＲフィールドが１にセットされた命令が終了した時点で、ベクトル演算器４６のレジスタファイル４６２に対して、ＣＰＵ部３０から書込み可能とする。このＲＦＲフィールドが１にセットされた命令が終了した時点で、ＣＰＵ部３０のレジスタファイルレディカウンタＲＦＲＣ〔ＣＰＵ部〕をカウントアップする。これまで、ＣＰＵ３０部のＯＳＹＮＣがセットされた命令は起動要求時点でストールする。本ストール条件は、レジスタファイルレディカウンタＲＦＲＣ〔ＣＰＵ部〕の値が、マスタ要求数カウンタＭＲＣ〔ＣＰＵ部〕よりも小さいか等しい時である。ＣＰＵ部３０のＯＳＹＮＣがセットされた命令を起動受託時点で、マスタ要求数カウンタＭＲＣ〔ＣＰＵ部〕をカウントアップする。本方式も入力同期と同様に、前段ＣＰＵの処理が非常に遅く、後段ＣＰＵの処理が早い場合、レジスタファイルの空き容量を多く空けることが可能である。この場合、前段ＣＰＵの出力同期時にはストールが発生しない。
同様に、ＣＰＵ部３０のレジスタファイル３０４が書込み可能となるまで、ベクトル演算部４６はストールする出力同期では、ベクトル演算部４６がＯＳＹＮＣを使用し、ＣＰＵ部３０がＲＦＲフィールドをセットすることで、２ＣＰＵ間の出力同期を実現する。
これら入力同期と出力同期の組合せにより、２つのＣＰＵ間のレジスタファイルレベルの細粒度な同期化を実現する。これらの同期化方式では、命令自身に同期化フィールドを有することが特徴である。
【０１００】
最後に、図１９を用いて、ブロック間同期について説明する。ブロック間同期とは、他の情報処理エンジン６などが、ダイレクトメモリ転送により、データメモリ３５にデータを格納し、本転送データをＣＰＵ部３０によるリード命令にて使用する際の同期化である。ＣＰＵ部３０は、ダイレクトメモリ転送が終了し、全てのデータがデータメモリ３５内に格納されていることを認識する必要があり、格納されていない場合、入力データは無効な値となるため、ストールしなければならない。すなわち、リード命令時において、そのリード命令が実行可能かどうかを調べるため、先に示した、入力同期とほぼ同様な方式で同期化を行う。すなわち、２つのカウンタの大小比較により同期化を行う。
１つ目のカウンタは、データメモリレディカウンタＤＭＲＣで、先に示したシフト型バス５０の転送にて、“Ｌａｓｔ”信号を伴う転送にてカウントアップするカウンタである。これは、ローカルＤＭＡＣ３４のマスタＤレジスタ３４０の“Ｌａｓｔ”フラグの設定により、ダイレクトメモリ転送の最終転送、すなわち、２次元矩形転送の最後の転送時点でアサートされる。すなわち、ダイレクトメモリ転送が終了したことを認知可能な信号で、これが“１”のときに、データメモリレディカウンタＤＭＲＣをカウントアップする。すなわち、ＣＰＵ部３０から見た場合、データの準備ができていることを示す。
【０１０１】
２つ目のカウンタは、データメモリアクセスカウンタＤＡＲＣで、リード命令のオペコード内に配置されたＭＳＹＮＣが“１”の命令が実行可能となった時点でカウントアップするカウンタである。従って、ＣＰＵ部３０がリードを実行可能なタイミングは、データメモリレディカウンタＤＭＲＣがデータメモリアクセスカウンタＤＡＲＣよりも大きいときである。言い換えれば、データメモリレディカウンタＤＭＲＣがデータメモリアクセスカウンタＤＡＲＣよりも等しいか小さい場合、ＣＰＵ部３０はストールする。この様に、リード命令という命令レベルで、ブロック間の同期化を可能とする。
【０１０２】
この様に、第２の実施例によれば、複数の２次元のオペランドを使用可能なＣＰＵが命令メモリを共有化した場合においても、命令の発行間隔が大きいため、性能低下を抑止可能であるとともに、命令メモリの共有化によるメモリ面積の削減が可能である。更に、ＣＰＵ部３０にて、データメモリ３５へのリードとライト処理、及びベクトル演算器４６にて、演算処理を行い、同期手段にて２つのＣＰＵ間のレジスタファイルレベルの同期化により、演算スループットを向上できる。また、命令レベルで、ブロック間の同期化を実現する。
【実施例３】
【０１０３】
図２０を用いて、第３の実施例について説明する。図２０は、本実施例における映像処理エンジン６６内に配置されるＣＰＵ部の構成である。第１の実施例では、１つのＣＰＵ部３０で構成し、第２の実施例では、ＣＰＵ部３０とベクトル演算部４６の２つのＣＰＵによる構成にて説明した。第３の実施例では、２つ以上の複数のＣＰＵを直列かつリング型に接続するものである。図３では、先頭のＣＰＵに、データメモリ３５へのアクセスが可能なＣＰＵ部３０を配置し、複数のベクトル演算部４６、４６ｎを直列接続し、終端にデータメモリ３５へのアクセスが可能なＣＰＵ部３０ｓを接続する。ＣＰＵ部３０ｓの演算データ３０ｉは、再度、ＣＰＵ部３０の入力データ部に接続される。
この時、各ＣＰＵはそれぞれプログラムカウンタを有す構成となり、実際には図１６で示した命令メモリ制御部４７内のプログラムカウンタを複数持つ構成となる。調停部４７０は、複数の命令フェッチ要求３７ｒから、命令フェッチの選択を行う。
【０１０４】
また、同期化処理についても、制御が異なる。第２の実施例の説明では、２つの隣り合うＣＰＵ間の入力同期方式と出力同期化方式について述べた。第３の実施例にても同様の同期化処理を行う。すなわち、隣り合うＣＰＵ同士で、入力同期と出力同期を行うものである。また、最終段のＣＰＵ部３０ｓと初段のＣＰＵ３０との間でも、同期化を行う。
また、ＣＰＵ部３０とＣＰＵ部３０ｓは共にデータメモリ３５をアクセスする。従って、図１１で示したデータメモリ制御部３３も、複数のデータメモリアクセスを制御する。
本方式によれば、ＣＰＵ部３０にて、データメモリ３５からのデータ読み込みを行い、ベクトル演算部４６に転送する。ベクトル演算器４６の演算結果をベクトル演算器４６ｎに転送し、ベクトル演算器ｎは、次の処理を行い、ＣＰＵ部３０ｓに演算データを転送する。ＣＰＵ部３０ｓは、演算結果をデータメモリ３５に転送することで、データのリード、演算、データの格納がパイプラインで動作し、高い演算スループットを得ることが出来る。特にデータメモリ３５をインタリーブ構成とし、リード命令とライト命令、およびダイレクトメモリアクセスのブロックを分割することで、高いスループットを得ることが可能である。
【０１０５】
さらに本方式によれば、２つ以上のＣＰＵを直列かつリング的に接続した構成においても、ＣＰＵ間の同期化を伴うマルチＣＰＵ構成を実現する。さらに、ＣＰＵ数が増えた場合においても、レジスタファイルのリードライトポート数は増加せず、ネットワークやレジスタファイルの面積を増加させない。例えば、上掲の特許文献３に示されたＶＬＩＷ構成などによるＣＰＵ数の増加では、演算器数に比例して、レジスタのポート数が増加し、面積コストが大きくなるのに対し、本方式の直列接続では、これが増加しない。
【０１０６】
また、ＶＬＩＷ方式では、複数の演算器が活性するタイミングが異なる。例えば、同一演算ループ内にて、１つの演算器はメモリリードを行い、２つ目の演算器は、汎用演算を行い、３つ目の演算器がメモリライトする例を考える。この時、それぞれのＣＰＵが実際に動作する演算サイクル数は異なるが、同一演算ループで処理がなされるため、演算器の稼働率が低下し、結果、必要処理サイクル数が増加し、消費電力が増加する。一方、本方式では、各ＣＰＵがそれぞれプログラムカウンタを有することが可能で、他のＣＰＵの動作及びプログラムカウンタの動作に依存しないで、各自の演算を処理することができる。例えば、１０回のループのうち、５回目と６回目の間に、１つのパラメータを変更する場合、ＶＬＩＷ方式では、５回ずつの２ループで命令列を記述する必要があるが、本方式では、それぞれプログラムカウンタを有することにより、パラメータ変更を行うＣＰＵのみ２つのループで命令列を指定可能で、演算稼働率を向上可能であると同時に、使用する命令メモリ３１の容量を削減できる。
【０１０７】
次に、命令のオペランドにＷｉｄｔｈフィールドとＣｏｕｎｔフィールドによる２次元オペランド指定方式について、その実施例を示す。これまで、２次元オペランド指定により、命令数を削減し、命令メモリ３１の読出し回数削減による低電力化、命令メモリ３１の容量削減による低電力化と面積コスト削減について述べた。これに加え、処理サイクル数削減による、低電力化も実現できる。ここでは、内積演算と畳み込み演算を用いて、その実施例について説明する。
【０１０８】
内積演算は、画像コーデックや画像フィルタなどに使用される汎用的な画像処理の１つである。ここでは、４ｘ４行列の内積演算を例として説明を行う。本内積演算例を図２１に示す。図が示すように、４ｘ４行列の内積演算の１つのデータ出力は、乗算を４回実行し、それらの演算結果を加算した値である。本演算を４ｘ４行列として、１６要素に対して、同様の演算を行うものである。本例での説明では、各データ要素のサイズを１６ビット（２バイト）とし、６４ビット幅演算器で演算するものとする。また、ベクトル演算器４６のレジスタファイル４６２内のレジスタには、行列Ａと行列Ｂが以下のように格納されているものとし、演算結果は、レジスタ８，９，１０，１１に格納するものとする。
レジスタ０：｛Ａ００、Ａ１０，Ａ２０，Ａ３０｝
レジスタ１：｛Ａ０１、Ａ１１，Ａ２１，Ａ３１｝
レジスタ２：｛Ａ０２、Ａ１２，Ａ２２，Ａ３２｝
レジスタ３：｛Ａ０３、Ａ１３，Ａ２３，Ａ３３｝
レジスタ４：｛Ｂ００、Ｂ１０，Ｂ２０，Ｂ３０｝
レジスタ５：｛Ｂ０１、Ｂ１１，Ｂ２１，Ｂ３１｝
レジスタ６：｛Ｂ０２、Ｂ１２，Ｂ２２，Ｂ３２｝
レジスタ７：｛Ｂ０３、Ｂ１３，Ｂ２３，Ｂ３３｝
このように、２次元内積演算では、演算の入力に複数のレジスタを使用することが特徴である。図２２に示す一般的な１サイクルに１命令を発行する４並列のＳＩＭＤ型演算器では、以下のような命令列で処理される。なお、行列Ａは、以下のように転置された値が格納されているものとする。
レジスタ０：｛Ａ００、Ａ０１，Ａ０２，Ａ０３｝
レジスタ１：｛Ａ１０、Ａ１１，Ａ１２，Ａ１３｝
レジスタ２：｛Ａ２０、Ａ２１，Ａ２２，Ａ２３｝
レジスタ３：｛Ａ３０、Ａ３１，Ａ３２，Ａ３３｝
命令１：Ｓｒｃ１（レジスタ０）、Ｓｒｃ２（レジスタ４）、Ｄｅｓｔ（レジスタ８［０］）とする、積和演算。
命令２：Ｓｒｃ１（レジスタ０）、Ｓｒｃ２（レジスタ５）、Ｄｅｓｔ（レジスタ８［１］）とする、積和演算。
命令３：Ｓｒｃ１（レジスタ０）、Ｓｒｃ２（レジスタ６）、Ｄｅｓｔ（レジスタ８［２］）とする、積和演算。
命令４：Ｓｒｃ１（レジスタ０）、Ｓｒｃ２（レジスタ７）、Ｄｅｓｔ（レジスタ８［３］）とする、積和演算。
【０１０９】
この４命令にて、内積演算に第１行を演算し、Ｓｒｃ１レジスタを変更することで、４行分の演算を行う。従って、合計１６命令を１６サイクルかけて演算する。なお、前処理として、行列Ａの転置が必要となる。従って、実質的に必要サイクル数が１６サイクルよりも大きい。
【０１１０】
一方、２次元オペランドを指定可能な本実施例では、図２３に示す演算器構成をとる。図２２に示したＳＩＭＤ型の演算器と比較し、Ｓｒｃ２入力の前段にセレクタ６０９を配置し、Ｓｒｃ２とＳｒｃ２［０］の値を選択入力する。また、演算１サイクル毎に、パス６１０を使用して、Ｓｒｃ２の値を左シフトする。更に乗算器６００の演算結果を格納するレジスタ６０１の出力は、シグマ加算器６０７に入力され、シグマ加算器６０７の演算結果はレジスタ６０８に格納される。シグマ加算器６０７は、レジスタ６０１の結果とレジスタ６０８の結果を順次シグマ加算する演算器である。本例では、４サイクル分の乗算結果をシグマ加算し、丸め込みを行い、Ｄｅｓｔとして演算結果を得る。
【０１１１】
図２１の内積演算例の演算結果の第１行目に注目する。行列Ｂに関しては、１６要素のデータ入力が必要であるのに対し、行列Ａの入力は、Ａ００、Ａ１０、Ａ２０、Ａ３０で、レジスタ０に格納された値のみである。また第１要素の乗算に関しては、全てＡ００が入力される。本演算の処理例を図２３に示す演算器で実現する。
Ｓｒｃ１には行列Ｂ、すなわちレジスタ４を設定し、Ｓｒｃ２には行列Ａ、すなわちレジスタ０を設定する。Ｓｒｃ１側は、クロックが供給されるたびに、レジスタ４、レジスタ５、レジスタ６、レジスタ７、再びレジスタ４の順で供給する。Ｓｒｃ２側は、１サイクル目にレジスタ０を入力し、２，３，４サイクル目は、パス６１０を使用して左シフトする。この時セレクタ６０９は、Ｓｒｃ２［０］データを選択する。これにより、Ｓｒｃ２出力は、１サイクル目はＡ００となり、２サイクル目はＡ１０となり、３サイクル目はＡ２０となり、４サイクル目はＡ３０となる。５サイクル目にはレジスタ１を供給し、６，７，８サイクルは同様にシフトする。このようなデータ供給により、４サイクルで１行の演算結果を得ることが出来る。これにより、４サイクルに一度、演算結果Ｄｅｓｔ６０６が生成され、このタイミングにて、レジスタファイル４６２を更新する。本方式により、レジスタファイル４６２の書込みにバイトイネーブルを必要とせず、レジスタファイルの面積を縮小できると共に、データの転置を必要とせず、合計１６サイクルで内積演算を実現する。
【０１１２】
次に転置行列に対する内積演算について、図２４の内積演算例を用いて動作を説明する。図２４では、第１行列である行列Ａを転置した場合の内積である。ここでも、演算結果の第１行目に注目する。行列Ｂに関しては、１６要素のデータ入力が必要であるのに対し、行列Ａの入力は、Ａ００、Ａ０１、Ａ０２、Ａ０３で、レジスタ０からレジスタ３までのデータ要素［０］に格納された値のみである。本演算では、先の転置のない内積演算と比較し、Ｓｒｃ２の供給方法を変更することで、第１行列が転置の内積演算を実現する。先の転置のない行列演算では、サイクル２，３，４時にパス６１０を用いて、Ｓｒｃ２をシフトしてデータ供給したのに対し、本例では、サイクル１ではレジスタ０を使用し、サイクル２ではレジスタ１を使用し、サイクル３ではレジスタ２を使用し、サイクル４ではレジスタ３を使用する。第１行の内積では、レジスタ０から３までのデータ要素［０］を使用し、第２行の内積ではデータ要素［１］を使用し、第３行の内積ではデータ要素［２］を使用し、第３行の内積ではデータ要素［３］を使用する。本方式により、先に示したＳｒｃ２の供給方法のみを変更することで、第１行列が転置の内積演算を実現する。この時、乗算器以降のデータパスの異なった動作は存在しない。従って、一般的なＳＩＭＤ型演算器では、内積演算前の前処理として転置が必要となるが、本方式では必要なく、処理サイクル数を削減できる。
【０１１３】
なお、第２行列のみ転置の行列演算では、Ｓｒｃ１とＳｒｃ２の入力は転置を伴わない内積と同様なデータ供給を行い、演算器は通常のＳＩＭＤ型演算器と同様に、１サイクルで４要素を加算する構成で実現する。本方式では、シグマ加算器６０７の入力にレジスタ６０８を使用せず、４つのレジスタ６０１の出力を加算する。
次に畳み込み演算の動作例について説明する。畳み込み演算は、画像のローパスフィルタやハイパスフィルタなどによるフィルタリング処理やエッジ強調などに使用される。また、画像コーデックの動き補償処理などでも使用される演算である。畳み込み演算は、内積演算と異なり、第２行列（畳み込み係数とする）が固定で、本畳み込み係数を、第１行列の全データ要素に対して演算するものである。図２５に２次元の畳み込み演算例を示す。図が示すとおり、出力データの全データ要素には、第２配列の畳み込み係数が乗じられ、シグマ加算したものである。
【０１１４】
これを実現する演算器構成の一部を図２６に示す。本構成では、図２３で示した内積演算器構成のレジスタ６０１の入力手前までの構成を示している。内積演算器構成との違いは、Ｓｒｃ１も同様に、パス６１２によるシフトレジスタ構成であることである。
畳み込み演算の動作を示す。まず、配列Ａと配列Ｂは、以下に示すレジスタに配置されているものとする。この時、配列Ａの１列目から４列目のデータと５列目のデータは異なったレジスタに配置する。配列Ｂは１つのレジスタに配置する。
レジスタ０：｛Ａ００、Ａ１０，Ａ２０，Ａ３０｝
レジスタ１：｛Ａ４０、なし，なし，なし｝
レジスタ２：｛Ａ０１、Ａ１１，Ａ２１，Ａ３１｝
レジスタ３：｛Ａ４１、なし，なし，なし｝
レジスタ４：｛Ａ０２、Ａ１２，Ａ２２，Ａ３２｝
レジスタ５：｛Ａ４２、なし，なし，なし｝
レジスタ６：｛Ａ０３、Ａ１３，Ａ２３，Ａ３３｝
レジスタ７：｛Ａ４３、なし，なし，なし｝
レジスタ８：｛Ｂ００、Ｂ０１，Ｂ１０，Ｂ１１｝
Ｓｒｃ１には、レジスタ０を投入し、Ｓｒｃ２にはレジスタ８と投入する。この時、Ｓｒｃ２の出力はセレクタ６０９により、Ｓｒｃ２の第一データ要素が投入される。すなわち、Ｓｒｃ２［０］、Ｓｒｃ２［０］、Ｓｒｃ２［０］、Ｓｒｃ２［０］である。１サイクル目での、４つの乗算器６００の出力は以下の通りである。
１サイクル目：
６００［０］出力：Ａ００＊Ｂ［００］
６００［１］出力：Ａ１０＊Ｂ［００］
６００［２］出力：Ａ２０＊Ｂ［００］
６００［３］出力：Ａ３０＊Ｂ［００］
２サイクル目では、Ｓｒｃ１とＳｒｃ２共にパス６１０と６１２を使用して左シフトする。Ｓｒｃ１は、レジスタ１の第１データ要素であるＡ４０をＳｒｃ１の［３］に投入する。結果、４つの乗算器６００の出力は以下となる。な
２サイクル目：
６００［０］出力：Ａ１０＊Ｂ［０１］
６００［１］出力：Ａ２０＊Ｂ［０１］
６００［２］出力：Ａ３０＊Ｂ［０１］
６００［３］出力：Ａ４０＊Ｂ［０１］
３サイクル目では、Ｓｒｃ２はパス６１２を使用して左シフトする。Ｓｒｃ１は読み出しレジスタポインタを更新し、レジスタ２を投入する。結果、４つの乗算器６００の出力は以下となる。
３サイクル目：
６００［０］出力：Ａ０１＊Ｂ［１０］
６００［１］出力：Ａ１１＊Ｂ［１０］
６００［２］出力：Ａ２１＊Ｂ［１０］
６００［３］出力：Ａ３１＊Ｂ［１０］
４サイクル目では、２サイクル目と同様に、Ｓｒｃ１とＳｒｃ２共にパス６１０とパス６１２を使用して左シフトする。結果、４つの乗算器６００の出力は以下となる。
４サイクル目：
６００［０］出力：Ａ１１＊Ｂ［１０］
６００［１］出力：Ａ２１＊Ｂ［１０］
６００［２］出力：Ａ３１＊Ｂ［１０］
６００［３］出力：Ａ４１＊Ｂ［１０］
この４サイクル分のデータをシグマ加算器６０７でシグマ加算することにより、１行目の畳み込み演算結果を得る。
５サイクル目では、再度、Ｓｒｃ１にレジスタ２を投入し、Ｓｒｃ２には再度レジスタ８を投入し、第２行目の畳み込み演算を行う。結果、１６サイクルで、４ｘ４行列の畳み込み演算結果を得る。
【０１１５】
なお、これらの説明では、Ｓｒｃ１とＳｒｃ２の供給にシフトレジスタを使用すると説明したが、セレクタを使用したデータの選択を行い、同様のデータ供給を行うことで、同様の効果を得る。従って、データの供給手段が特徴である。
【０１１６】
図２２に示した一般的なＳＩＭＤ型演算器では、垂直方向の畳み込み演算は、データ要素毎の積和演算を用いる。但し、４つの積和演算を終了した時点で、データの丸め込みが必要であるため、各積和演算のステージでは、８ビットデータを１６ビットデータにビット拡張して積和演算を行わなくてはならない。更に４つの積和演算が終了した時点で、再度、１６ビットデータを８ビットデータに丸め込む。積和演算時は、ビット拡張のため、実質的に並列使用する演算器数が半減し、処理サイクル数が増加する。また、ビット拡張自身と丸め込み自身の演算サイクル数が増加する。本方式のように、２次元オペランドを指定することにより、処理サイクル数を削減できる。
【０１１７】
一方、図２２に示した一般的なＳＩＭＤ型演算器による、水平方向の畳み込み演算では、データ要素を生成する度に、配列Ａをデータ要素単位でシフトして、演算器に投入しなければならず、処理サイクル数が増加する。更に、２次元の畳み込みでは、ビット拡張、シフト、丸めなどにより処理サイクル数が増加する。
【０１１８】
従って、本方式のように２次元のオペランドを指定することは、複数のソース使用する命令を１つの命令で表現することを意味し、真に必要な積和演算以外の前処理や後処理を含めて処理サイクルを削減することができる。その結果、低い動作周波数で処理を実現可能でき、さらに消費電力を削減できる。
【図面の簡単な説明】
【０１１９】
【図１】本実施例における組込みシステムのブロック図である。
【図２】本実施例における映像処理部６のブロック図である。
【図３】本実施例におけるシフト型バス５０のブロック図である。
【図４】本実施例におけるシフトレジスタスロット５００のブロック図である。
【図５】本実施例におけるシフト型バス５０のタイミングチャートである。
【図６】本実施例における映像処理エンジン６６のブロック図である。
【図７】本実施例における演算の一例である。
【図８】本実施例におけるＣＰＵ部３０のブロック図である。
【図９】本実施例における命令デコード部３０３が生成するレジスタファイル３０４の読出しポートと書込みポートを制御する制御線３０８と、データメモリ３５のアクセスアドレス４５を生成するフローチャートである。
【図１０】本実施例における命令メモリ制御部３２のブロック図である。
【図１１】本実施例におけるデータメモリ制御部３３のブロック図である。
【図１２】本実施例におけるローカルＤＭＡＣ３４のブロック図である。
【図１３】本実施例におけるデータパス部３６のブロック図である。
【図１４】第２の実施例における映像処理部６６のブロック図である。
【図１５】第２の実施例におけるベクトル演算部４６のブロック図である。
【図１６】第２の実施例における命令メモリ制御部４７のブロック図である。
【図１７】本実施例における、入力同期のストール条件を説明するための図である。
【図１８】本実施例における、出力同期のストール条件を説明するための図である。
【図１９】本実施例における、映像処理エンジン間同期のストール条件を説明するための図である。
【図２０】第３の実施例における、映像処理エンジン６６内に配置されるＣＰＵ部の構成を示した図である。
【図２１】内積演算の例を説明するための図である。
【図２２】従来的なＳＩＭＤ型演算器の構成である。
【図２３】本実施例における演算器の構成を示した図である。
【図２４】転置を伴う内積演算の例を説明するための図である。
【図２５】畳み込み演算の例を説明するための図である。
【図２６】本実施例における演算器の構成を示した図である。
【符号の説明】
【０１２０】
１…ＣＰＵ、２…ストリーム処理部、３…音声処理部、４…外部メモリ制御部、５…ＰＣＩインタフェース、６…映像処理部、７…ＤＭＡコントローラ、８…表示制御部、９…内部バス、１０…ＤＭＡバス、１１…映像入力部、１２…映像出力部、１３…音声入力部、１４…音声出力部、１５…シリアル入力部、１６…シリアル出力部、１７…ストリーム入力部、１８…ストリーム出力部、１９…ＩＯデバイス、２０…外部メモリ、２１…ディスプレイ、２２…ＰＣＩバス、２３…ＰＣＩデバイス、３０,３０ｓ…ＣＰＵ部、３１…命令メモリ、３２…命令メモリ制御部、３３…データメモリ制御部、３４…ローカルＤＭＡＣ、３５…データメモリ、３６…データパス部、４６、４６n…ベクトル演算部、４７命令メモリ制御部、５０…シフト型バス、６０…内部バスブリッジ、６１…内部バスマスタ制御部、６２…内部バススレーブ制御部、６５…共有ローカルメモリ、６６，６７…映像処理エンジン、６８…専用ハードウェア、３０１…命令レジスタ、３０３…命令デコード部、３０４…レジスタファイル（汎用レジスタ）、３１３…演算部、３２０…調停部、３２２…プログラムカウンタ、３２３…セレクタ、３２４…命令レジスタ、３２５…分岐制御部、３２７…条件分岐レジスタ、３３０…調停部、３３１…アドレスセレクタ、３３２…データセレクタ、３３３…データレジスタ、３４０…マスタＤレジスタ、３４１…マスタＳレジスタ、３４２…スレーブＤレジスタ、３４３…スレーブＳレジスタ、３４４…セレクタ、３４５セレクタ、３４６…データメモリアドレス発生器、３４７…シフト型バスアドレス発生器、
４６０…命令レジスタ、４６１…命令デコード部、４６２…レジスタファイル、４６３…演算部、４７０…調停部、４７２…プログラムカウンタ、４７３…同期制御部、４７５…セレクタ、５００，５０１，５０５…シフトレジスタスロット、５１２，５１６…ＢＩＤデコーダ、５１０，５１４，５１８…レジスタ、６００…乗算器、６０１…レジスタ、６０２…加算器、６０４…レジスタ、６０５…丸め込みシフタ、６０６…Ｄｅｓｔレジスタ、６０７…シグマ加算器、６０９,６１２…セレクタ。
【図１】
2008003708.tif 000020
【図２】
2008003708.tif 000021
【図３】
2008003708.tif 000022
【図４】
2008003708.tif 000023
【図５】
2008003708.tif 000024
【図６】
2008003708.tif 000025
【図７】
2008003708.tif 000026
【図８】
2008003708.tif 000027
【図９】
2008003708.tif 000028
【図１０】
2008003708.tif 000029
【図１１】
2008003708.tif 000030
【図１２】
2008003708.tif 000031
【図１３】
2008003708.tif 000032
【図１４】
2008003708.tif 000033
【図１５】
2008003708.tif 000034
【図１６】
2008003708.tif 000035
【図１７】
2008003708.tif 000036
【図１８】
2008003708.tif 000037
【図１９】
2008003708.tif 000038
【図２０】
2008003708.tif 000039
【図２１】
2008003708.tif 000040
【図２２】
2008003708.tif 000041
【図２３】
2008003708.tif 000042
【図２４】
2008003708.tif 000043
【図２５】
2008003708.tif 000044
【図２６】
2008003708.tif 000045