(57)【要約】【課題】パイプライン処理を行うデータ処理装置において、リピート命令の繰り返し対象ブロックのサイズが小さい場合にも正常動作を保証できるデータ処理装置を得る。【解決手段】ｄｉｓｐ判定部６６４が変位値が“２”以下と判定した場合、判定結果を受けた制御信号生成部６６５は、“Ｈ”（活性状態）の命令フェッチ抑止信号６８１を命令フェッチ要求生成部６５２に送る。命令フェッチ要求生成部６５２は“Ｈ”の命令フェッチ抑止信号６８１を受けると命令のフェッチを一時停止する命令フェッチ抑止制御を開始する。その後、“Ｈ”（活性状態）の命令フェッチ抑止解除信号６８２、あるいは“Ｈ”のジャンプ信号６８４を受けるまで、命令フェッチ抑止状態を維持する。【選択図】図１７
2006031329.tif 000002
【特許請求の範囲】
【請求項１】
パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、
パイプライン処理対象の命令をフェッチする命令フェッチ部と、
前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が所定の条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、
前記リピート設定命令用判定部が前記所定の条件を満足すると判定した場合、前記パイプライン処理対象の命令の新規フェッチ開始を一時抑止させる命令フェッチ抑止制御を行うリピート時パイプライン制御手段と、
を備えるデータ処理装置。
【請求項２】
請求項１記載のデータ処理装置であって、
前記所定の条件は前記所定のコードサイズが第１の基準値以下である条件を含み、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部の前記判定動作によって前記所定の条件を満足すると判定した時に前記命令フェッチ抑止制御を開始し、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記命令フェッチ抑止制御を解除する、
データ処理装置。
【請求項３】
請求項１記載のデータ処理装置であって、
前記所定の条件は前記所定のコードサイズが第２の基準値以下である条件を含み、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部の前記判定動作によって前記所定の条件を満足すると判定した時に前記命令フェッチ抑止制御を開始し、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行する、
データ処理装置。
【請求項４】
請求項１記載のデータ処理装置であって、
前記所定の条件は、前記リピート設定命令に引き続く、前記命令フェッチ開始後、前記判定動作実行前の状態の命令コードサイズに基づく条件を含み、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部の前記判定動作によって前記所定の条件を満足すると判定した時に前記命令フェッチ抑止制御を実行し、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記命令フェッチ抑止制御を解除する、
データ処理装置。
【請求項５】
請求項４記載のデータ処理装置であって、
前記リピート対象ブロックにおける前記少なくとも一つの命令は所定の制御基準命令コードを含み、前記所定の条件は前記判定動作実行前状態の命令に前記所定の制御基準命令コードが存在しない場合を含み、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部が前記所定の条件を満足しないと判定した場合、前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行する、
データ処理装置。
【請求項６】
請求項１記載のデータ処理装置であって、
前記リピート対象ブロックにおける前記少なくとも一つの命令は所定の制御基準命令コードを含み、前記所定の条件は前記判定動作実行前状態の命令に前記所定の制御基準命令コードが存在しない場合を含み、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部が前記所定の条件を満足すると判定した場合、前記所定の制御基準命令コードの直前の命令コードの前記フェッチ部によるフェッチ動作開始後に前記命令フェッチ抑止制御を開始し、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記命令フェッチ抑止制御を解除し、
前記リピート設定命令用判定部が前記所定の条件を満足しないと判定した場合、前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行する、
データ処理装置。
【請求項７】
パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、
パイプライン処理対象の命令をフェッチする命令フェッチ部と、
前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が第１の条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、
前記リピート設定命令判定部が前記第１の条件を満足すると判定した場合、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行するリピート時パイプライン制御手段とを備え、
前記第１の条件は前記所定のコードサイズが第１の基準値以下である条件を含む、
データ処理装置。
【請求項８】
請求項７記載のデータ処理装置であって、
前記リピート設定命令用判定部は、前記リピート対象ブロックに関する前記リピート機能の設定内容として、前記所定のコードサイズが前記第１の基準値より大きく第２の基準値以下である第２の条件を満足するか否かをさらに判定し、
前記リピート時パイプライン制御手段は、
前記リピート設定命令用判定部が前記判定動作によって前記第２の条件を満足すると判定した時に、前記パイプライン処理対象の命令の新規フェッチ開始を一時抑止させる命令フェッチ抑止制御を開始し、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記命令フェッチ抑止制御を解除する、
データ処理装置。
【請求項９】
パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、
パイプライン処理対象の命令をフェッチする命令フェッチ部と、
前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が所定のキャンセル条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、
前記リピート設定命令用判定部が前記所定のキャンセル条件を満足すると判定した場合、前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行するリピート時パイプライン制御手段とを備え、
前記少なくとも一つの命令は所定の制御基準命令コードを含み、前記所定のキャンセル条件は前記判定動作実行前状態の命令に前記所定の制御基準命令コードが存在する場合を含む、
データ処理装置。
【請求項１０】
請求項９記載のデータ処理装置であって、
前記リピート時パイプライン制御手段は、
前記所定のキャンセル条件を満足する場合、前記パイプラインキャンセル処理を前記判定動作の実行タイミングで実行した後、前記所定の制御基準命令コードの直前の命令コードの前記フェッチ部によるフェッチ動作開始後に、前記パイプライン処理対象の命令の新規フェッチ開始を一時抑止させる命令フェッチ抑止制御を行い、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記命令フェッチ抑止制御を解除する、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明はブロックリピート命令を有するデータ処理装置に関するものである。
【背景技術】
【０００２】
ディジタル・シグナル・プロセッサ（ＤＳＰ）等ディジタル信号処理を効率よく処理するデータ処理装置では、繰り返し演算／転送処理を行う頻度が非常に高い。このようなデータ処理装置では、繰り返し処理のループ処理のオーバーヘッドを削減するために、指定された繰り返し対象ブロックの命令を指定された回数だけ繰り返し実行するブロックリピート命令を実装しているものも多い。
【０００３】
例えば、特許文献１で開示されているデータ処理装置は、ブロックリピート命令を備え、ループ制御のためのカウンタのデクリメント、カウンタ値の終了判定、条件分岐を繰り返し対象ブロックの命令実行と並列にハードウェア的に処理することにより、ループ制御のためのオーバーヘッドをなくしている。ブロックリピート命令の実行により繰り返しブロックの先頭アドレスや終了アドレス、繰り返し回数のカウンタ値等のリピート処理に必要な設定を行う。しかし、動作周波数向上のためパイプライン処理を行っているため、リピート命令の実行段階では既に後続命令のフェッチが進んでいる。従って、動作保証できるリピートブロックのサイズには、制限がある。この制約を守るために、ループ処理を展開するなどして繰り返し対象ブロックのサイズを大きくしなければならない場合もある。
【０００４】
繰り返し対象ブロックが大きくすることにより、コードサイズが大きくなる。また、繰り返し対象ブロックの１回の処理データ数が増加すると、リピート命令で対処できない端数処理を行う部分のオーバーヘッドも大きくなる場合がある。さらに、繰り返し回数がダイナミックに変化する場合などは、端数処理のためのオーバーヘッドは更に大きくなる。すなわち、繰り返し回数を条件判定するための処理サイクル数が増大する。また、繰り返し回数の条件判定および繰り返し回数に応じたコードが必要となるため、処理を実現するためのプログラムサイズが大きくなる。
【０００５】
ソフトウェアをＲＯＭ化する場合には、プログラムサイズが大きくなると実装命令ＲＯＭサイズが大きくなり、ハードウェアのコストが高くなる。
【０００６】
また、処理サイクル数が大きくなるということは高い性能が得られないと言うことであり、実装すべき機能を実現するための必要動作周波数が高くなるとともに、消費電力も増大する。
【０００７】
さらに、高速処理を行うために単純な繰り返し処理でも複雑なプログラムとなるため、プログラム開発負荷が大きく、バグ混入の可能性も高い。
【０００８】
【特許文献１】米国特許５，９０１，３０１号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００９】
従来のデータ処理装置は以上のように構成されているので、ハードウェア処理（パイプライン処理）を考慮し、リピート命令の繰り返し対象ブロックのサイズの最小値に制限を設けざるを得ないため、コードサイズが大きくなり製品コストが上がったり、処理サイクル数が増え高い性能が得られず消費電力も増大するなどの問題点があった。
【００１０】
さらに、プログラムが複雑になるため、ソフトウェアの開発効率が低下し、バグ混入の可能性も高くなるという問題点もあった。
【００１１】
この発明は上記のような問題点を解消するためになされたもので、パイプライン処理を行うデータ処理装置において、リピート命令の繰り返し対象ブロックのサイズが小さい場合にも正常動作を保証できるようすることにより、コード効率のよい高性能で低コストなデータ処理装置を実現することを目的とする。また、繰り返し処理単位を小さくすることにより、繰り返し処理のプログラムの開発効率を向上し、バグの混入を削減することを目的とする。
【課題を解決するための手段】
【００１２】
この発明における請求項１記載のデータ処理装置は、パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、パイプライン処理対象の命令をフェッチする命令フェッチ部と、前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が所定の条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、前記リピート設定命令用判定部が前記所定の条件を満足すると判定した場合、前記パイプライン処理対象の命令の新規フェッチ開始を一時抑止させる命令フェッチ抑止制御を行うリピート時パイプライン制御手段とを備えている。
【００１３】
この発明における請求項７記載のデータ処理装置は、パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、パイプライン処理対象の命令をフェッチする命令フェッチ部と、前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が第１の条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、前記リピート設定命令判定部が前記第１の条件を満足すると判定した場合、前記リピート設定命令に規定したリピート関連の設定動作が終了した後に前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行するリピート時パイプライン制御手段とを備え、前記第１の条件は前記所定のコードサイズが第１の基準値以下である条件を含んでいる。
【００１４】
この発明における請求項９記載のデータ処理装置は、パイプライン処理機能を有するとともに、リピート関連の設定の少なくとも一部を規定したリピート設定命令に従い、少なくとも一つの命令を含み総コードサイズが所定のコードサイズとなるリピート対象ブロックをハードウェア的に繰り返し実行するリピート機能を有するデータ処理装置であって、パイプライン処理対象の命令をフェッチする命令フェッチ部と、前記命令フェッチ部から前記命令を受け、当該命令が前記リピート設定命令である場合に、前記リピート対象ブロックに関する前記リピート機能の設定内容が所定のキャンセル条件を満足するか否かを判定する判定動作を実行するリピート設定命令用判定部と、前記リピート設定命令用判定部が前記所定のキャンセル条件を満足すると判定した場合、前記リピート設定命令以降の命令のパイプライン処理をキャンセルするパイプラインキャンセル処理を実行するリピート時パイプライン制御手段とを備え、前記少なくとも一つの命令は所定の制御基準命令コードを含み、前記所定のキャンセル条件は前記判定動作実行前状態の命令に前記所定の制御基準命令コードが存在する場合を含んでいる。
【発明の効果】
【００１５】
この発明に係る請求項１記載のデータ処理装置は、リピート対象ブロックに関するリピート機能の設定内容が所定の条件を満足すると判定した場合、パイプライン処理対象の命令の新規フェッチ開始を一時抑止させることができる。
【００１６】
したがって、リピート設定命令の設定動作完了前にリピート対象ブロックの命令が無条件に命令フェッチ部にフェッチされる場合に正常動作が保証できない場合を上記所定の条件に設定することにより、リピート対象ブロックの所定のコードサイズが比較的小さい場合にも正常にリピート動作を実行することができる。
【００１７】
この発明に係る請求項７記載のデータ処理装置は、所定のコードサイズが第１の基準値以下である場合であっても、パイプラインキャンセル処理を実行することにより、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【００１８】
この発明に係る請求項９記載のデータ処理装置は、判定実行前状態の命令に所定の制御基準命令コードが存在する場合である場合に、パイプラインキャンセル処理を実行することより、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【発明を実施するための最良の形態】
【００１９】
＜実施の形態１＞
本発明の実施の形態１のデータ処理装置について説明する。本データ処理装置は、１６ビットプロセッサであり、アドレス及びデータのビット長は１６ビットである。また、本データ処理装置は、ビット順、バイト順に関してビッグエンディアンを採用しており、ビット位置としてはＭＳＢがビット０になる。実際、本データ処理装置は説明されていない多くの機能を含んでいるが、本発明の説明に関係ない部分は、簡単のため説明を省いている。
【００２０】
図１から図３に本データ処理装置のレジスタセットを示す。
【００２１】
図１は汎用レジスタを示しており、１６本の汎用レジスタＧＲ０〜ＧＲ１５はデータやアドレス値を格納する。汎用レジスタＧＲ１４は、サブルーチンジャンプ時の戻り先アドレスを格納するためのリンク（ＬＩＮＫ）レジスタとして割り当てられている。汎用レジスタＧＲ１５はスタックポインタ（ＳＰ）であり、割り込み用のスタックポインタ（ＳＰＩ）ＧＲ１５ａとユーザ用のスタックポインタ（ＳＰＵ）ＧＲ１５ｂとが後で説明するプロセッサ・ステータス・ワード（ＰＳＷ）によって切り替えられる。以後、ＳＰＩとＳＰＵを総称して、スタックポインタ（ＳＰ）と呼ぶ。特別な場合を除き、４ビットのレジスタ指定フィールドでオペランドとなる各レジスタの番号が指定される。本データ処理装置では、例えば汎用レジスタＧＲ０，ＧＲ１のように２つのレジスタをペアにして、処理する命令を備えている。この場合、偶数番号のレジスタを指定する。ペアのレジスタとして、レジスタ番号を１たした奇数番号のレジスタが暗に指定される。
【００２２】
図２は、アキュムレータを示しており、各々４０ビットのアキュムレータＡ０、Ａ１が構成される。
【００２３】
図３の制御レジスタＣＲ０〜ＣＲ３，制御レジスタＣＲ９〜ＣＲ１１は各々１６ビットの制御レジスタである。各制御レジスタも、汎用レジスタと同様、通常レジスタの番号が４ビットで示される。制御レジスタＣＲ０は、プロセッサ・ステータス・ワード（ＰＳＷ）であり、データ処理装置の動作モードを指定するビットや演算結果を示すフラグからなる。図４は制御レジスタＣＲ０（ＰＳＷ）の構成を示す図である。
【００２４】
ＳＭビット４１（ビット０）はスタックモードを示すビットである。ＳＭビット４１が“０”の場合は割り込みモードであることを示し、汎用レジスタＧＲ１５としてＳＰＩが用いられる。ＳＭビット４１が“１”の場合はユーザーモードであることを示し、汎用レジスタＧＲ１５としてＳＰＵが用いられる。
【００２５】
ＩＥビット４２（ビット４）は割り込みイネーブルを指定するビットであり、ＩＥビット４２が“０”の場合は割り込みをマスク（アサートされても無視）し、“１”の場合は割り込みを受け付ける。
【００２６】
本データ処理装置では、ゼロオーバーヘッドのループ処理を実現するためのブロックリピート機能が実装されている。ＲＰビット４３（ビット５）はブロックリピート状態を示すビットであり、ＲＰビット４３が“０”の場合はブロックリピート中でないことを、“１”の場合はブロックリピート中であることを示す。
【００２７】
Ｆ０フラグ４４（ビット１２）は実行制御フラグ（Ｆ０フラグ）であり、比較命令の比較結果などがこのフラグにセットされる。
【００２８】
キャリー・フラグ４５（ビット１５）は、加減算命令実行時のキャリーがセットされるフラグである。
【００２９】
図３の制御レジスタＣＲ２はプログラムカウンタ（ＰＣ）であり、実行中の命令アドレスを示す。本データ処理装置が処理する命令は、基本的に３２ビット固定長であり、制御レジスタＣＲ２（ＰＣ）は、３２ビットを１ワードとした命令ワードアドレスを保持する。本レジスタは、読み出しのみ可能である。
【００３０】
制御レジスタＣＲ１は、バックアップ・プロセッサ・ステータス・ワード（ＢＰＳＷ）、制御レジスタＣＲ３は、バックアップ・プログラム・カウンタ（ＢＰＣ）であり、各々例外や割り込みが検出された場合に実行中の制御レジスタＣＲ０（ＰＳＷ）の値と制御レジスタＣＲ２（ＰＣ）の値を待避・保持するためのレジスタである。
【００３１】
制御レジスタＣＲ９〜ＣＲ１１は、ブロックリピート関連のレジスタであり、リピート中であっても割り込みを受け付けられるように、ユーザーが値を読み書きできるようになっている。制御レジスタＣＲ９は、リピート・カウンタ（ＲＰＴＣ）であり、リピート回数を示すカウント値を保持する。制御レジスタＣＲ１０は、リピート・ブロック・スタート・アドレス・レジスタ（ＲＰＴＳ）であり、リピートを行うブロックの先頭の命令アドレスを保持する。制御レジスタＣＲ１１は、リピート・ブロック・エンド・アドレス・レジスタ（ＲＰＴＥ）であり、リピートを行うブロックの最後の命令のアドレスを保持する。
【００３２】
本データ処理装置は２ウェイのＶＬＩＷ（Very Long Instruction Word）命令セットを処理する。図５は、本データ処理装置の命令フォーマットを示す。基本命令長は３２ビット固定であり、３２ビット境界に整置されている。各３２ビットの命令コードは、命令のフォーマットを示す２ビットのフォーマット指定ビット（ＦＭビット）１０１と、１５ビットの左コンテナ１０２と右コンテナ１０３から構成される。各コンテナ１０２、１０３はそれぞれ１５ビットからなるショートフォーマットのサブ命令を格納できるほか、２つで１つの３０ビットのロングフォーマットのサブ命令を格納できる。今後、簡単のため、ショートフォーマットのサブ命令をショート命令、ロングフォーマットのサブ命令をロング命令と呼ぶ。
【００３３】
ＦＭビット１０１は命令のフォーマット及び２つのショート命令の実行順序を指定する。図６に、ＦＭビット１０１のフォーマット及び実行順序指定の詳細を示す。命令実行順序において、第１は先に実行される命令を、第２は後で実行される命令であることを示す。ＦＭビット１０１が“１１”の場合は、コンテナ１０２、１０３の３０ビットで１つのロング命令を保持することを示し、それ以外の場合は各コンテナ１０２、１０３がそれぞれショート命令を保持することを示す。さらに、２つのショート命令を保持する場合、ＦＭビット１０１で実行順序を指定する。ＦＭビット１０１が“００”のときは、２つのショート命令を並列に実行することを示すＲ。ＦＭビット１０１が“０１”のときは、左コンテナ１０２に保持されているショート命令を実行した後に、右コンテナ１０３に保持されているショート命令を実行することを示す。ＦＭビット１０１が“１０”のときは、右コンテナ１０３に保持されているショート命令を実行した後に、左コンテナ１０２に保持されているショート命令を実行することを示す。このように、シーケンシャルに実行する２つのショート命令も含めて１つの３２ビット命令にエンコード出来るようにして、コード効率の向上を図っている。
【００３４】
図７〜図１０に典型的な命令のビット割り付けの例を示す。図７は２つのオペランドを持つショート命令のビット割り付けを示す。フィールド１１１、１１４は、オペレーションコードフィールドである。フィールド１１４は、アキュムレータ番号を指定する場合もある。フィールド１１２、１１３はオペランドとして参照あるいは更新されるデータの格納位置を、レジスタ番号やアキュムレータ番号で指定する。フィールド１１３は、４ビットの小さな即値を指定する場合もある。
【００３５】
図８は、ショートフォーマットの分岐命令の割り付けを示しており、オペレーションコードフィールド１２１と８ビットの分岐変位フィールド１２２からなる。分岐変位は、ＰＣ値と同様、命令ワード（３２ビット）のオフセットで指定される。
【００３６】
図９は、１６ビットの変位や即値を持つ３オペランド命令やロード／ストア命令のフォーマットを示しており、オペレーションコードフィールド１３１、ショートフォーマットと同様レジスタ番号等を指定するフィールド１３２、１３３と、１６ビットの変位や即値等を指定する拡張データフィールド１３４からなる。
【００３７】
図１０は、右コンテナ１０３側にオペレーションコードを持つロングフォーマットの命令のフォーマットを示しており、２ビットのフィールド１４１が“０１”になっている。フィールド１４３，１４６はオペレーションコードフィールドで、フィールド１４４，１４５はレジスタ番号等を指定するフィールドである。フィールド１４２は予約フィールドであり必要に応じてオペレーションコードやレジスタ番号等の指定に使用される。
【００３８】
上述以外に、ＮＯＰ（ノー・オペレーション）のように、１５ビットすべてがオペレーションコードとなる命令や、１オペランド命令等、特殊な命令のビット割り付けを持つものもある。
【００３９】
本データ処理装置の各サブ命令は、ＲＩＳＣライクな命令セットとなっている。メモリデータのアクセスを行う命令はロード／ストア命令のみであり、演算命令はレジスタ／アキュムレータ中のオペランドや即値オペランドに対して演算を行う。オペランドデータのアドレッシングモードとしては、レジスタ間接モード、ポストインクリメント付きレジスタ間接モード、ポストデクリメント付きレジスタ間接モード、プッシュモード、レジスタ相対間接モードの５種類ある。各々のニーモニックは、“  Ｒｓｒｃ”、“  Ｒｓｒｃ＋”、“  Ｒｓｒｃ−”、“  −ＳＰ”、“  （ｄｉｓｐ１６、Ｒｓｒｃ）”で示される。Ｒｓｒｃはベースアドレスを指定するレジスタ番号を、ｄｉｓｐ１６は１６ビットの変位値を示す。オペランドのアドレスはバイトアドレスで指定される。
【００４０】
レジスタ相対間接モード以外のロード／ストア命令は、図７に示す命令フォーマットとなる。フィールド１１３でベースレジスタ番号が指定され、フィールド１１２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。レジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなる。ポストインクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストインクリメントされて、書き戻される。ポストデクリメント付きレジスタ間接モードは、ベースレジスタとして指定されたレジスタの値がオペランドアドレスとなり、このベースレジスタの値がオペランドのサイズ（バイト数）分ポストデクリメントされて、書き戻される。プッシュモードは、ストア命令で、かつ、ベースレジスタがＲ１５の場合にのみ使用可能であり、スタックポインタ（ＳＰ）値がオペランドのサイズ（バイト数）分プリデクリメントされた値が、オペランドアドレスとなり、デクリメントされた値がＳＰに書き戻される。
【００４１】
レジスタ相対間接モードのロード／ストア命令は図９に示す命令フォーマットとなる。フィールド１３３でベースレジスタ番号が指定され、フィールド１３２でメモリからロードしてきた値を書き込むレジスタの番号もしくはストアする値を保持するレジスタの番号が指定される。フィールド１３４はオペランド格納位置のベースアドレスからの変位値を指定する。レジスタ相対間接モードは、ベースレジスタとして指定されたレジスタの値に１６ビットの変位値を加算した値がオペランドアドレスとなる。
【００４２】
ジャンプ命令のジャンプ先アドレス指定には、ジャンプ先アドレスをレジスタ値で指定するレジスタ間接モードと、ジャンプ命令のプログラム・カウンタＰＣからの分岐変位で指定するＰＣ相対間接モードとがある。ＰＣ相対間接モードについては、分岐変位を８ビットで指定するショートフォーマットと、分岐変位を１６ビットで指定するロングフォーマットの２種類ある。また、オーバーヘッドなしにループ処理を実現するリピート機能を起動するためのブロックリピート命令も備える。
【００４３】
図１１は本実施の形態のデータ処理装置２００の機能ブロック構成を示すブロック図である。同図に示すように、データ処理装置２００は、ＭＰＵコア部２０１、ＭＰＵコア部２０１からの要求により命令データのアクセスを行う命令フェッチ部２０２、内蔵命令メモリ２０３、ＭＰＵコア部２０１からの要求によりオペランドデータのアクセスを行うオペランドアクセス部２０４、内蔵データメモリ２０５、及び命令フェッチ部２０２とオペランドアクセス部２０４からの要求を調停し、データ処理装置２００の外部のメモリアクセスを行う外部バスインターフェイス部２０６からなる。
【００４４】
ＭＰＵコア部２０１は、制御部２１１、レジスタファイル２２１、第１演算部２２２、第２演算部２２３、ＰＣ部２２４からなる。
【００４５】
制御部２１１は、パイプライン処理制御、命令の実行制御、命令フェッチ部２０２やオペランドアクセス部２０４とのインターフェイス制御など、ＭＰＵコア部２０１のすべての制御を行う。
【００４６】
制御部２１１内の命令キュー２１２は、２エントリの３２ビット命令バッファと有効ビット、及び入出力ポインタ等からなり、ＦＩＦＯ（先入れ先出し）方式で制御される。命令フェッチ部２０２でフェッチされた命令データを一時保持し、命令デコード部２１３に送る。
【００４７】
命令デコード部２１３は、主として２つのデコーダを含み、命令キュー２１２から送られる命令コードをデコードする。第１デコーダ２１４は、第１演算部２２２で実行する命令をデコードし、第２デコーダ２１５は、第２演算部２２３で実行する命令をデコードする。３２ビットの命令のデコードの第１サイクルでは、必ず左コンテナ１０２の命令コードが第１デコーダ２１４で解析され、右コンテナ１０３の命令コードが第２デコーダ２１５で解析される。ただし、ＦＭビット１０１及び左コンテナのビット０とビット１のデータは両方のデコーダで解析される。また、拡張データの切り出しを行うために、右コンテナ１０３のデータが第１デコーダ２１４に送られるが、解析は行われない。従って、最初に実行する命令はその命令を実行する演算器に対応した位置に置かれなければならない。２つのショート命令をシーケンシャルに実行する場合、先行して実行される命令のデコード中に後で実行する側の命令が図示していないプリデコーダでデコードされ、どちらのデコーダでデコードすべきかを判定する。先行する命令のデコード後、後で実行する命令の命令コードが選択されたデコーダに取り込まれ、解析される。後で実行される命令がどちらのデコーダでも処理できる命令の場合は第１デコーダ２１４でデコードする。
【００４８】
レジスタファイル２２１は、汎用レジスタＧＲ０〜ＧＲ１５の汎用レジスタ値を物理的に保持するレジスタからなり、第１演算部２２２、第２演算部２２３、ＰＣ部２２４、オペランドアクセス部２０４に複数のバスで結合されている。
【００４９】
図１２は第１演算部２２２の詳細ブロック構成を示すブロック図である。第１演算部２２２は、レジスタファイル２２１と、１６ビット幅のＳ１バス２５１、Ｓ２バス２５２、Ｓ３バス２５３で結合されており、この３つのバスでレジスタからデータを読み出し、演算器等にリードオペランドとなるデータやストアデータを転送する。また、第１演算部２２２は、レジスタファイル２２１と、１６ビット幅のＤ１バス２６１、Ｗバス２７２で結合されており、Ｄ１バス２６１で演算結果や転送データを、Ｗバス２７２でロードしたバイトデータをレジスタファイル２２１に転送する。
【００５０】
さらに、第１演算部２２２及びレジスタファイル２２１は、オペランドアクセス部２０４と３２ビットのＯＤバス２７１で結合されており、１ワード、もしくは、２ワードのデータを転送することが可能である。
【００５１】
ＡＡラッチ３０２、ＡＢラッチ３０３は、ＡＬＵ３０１の入力ラッチである。ＡＡラッチ３０２は、Ｓ１バス２５１もしくはＳ３バス２５３を介して読み出されたレジスタ値を取り込む。ゼロクリアする機能も備えている。ＡＢラッチ３０３は、Ｓ３バス２５３を介して読み出されたレジスタ値もしくは第１デコーダ２１４でデコードの結果生成された１６ビットの即値を取り込む。ゼロクリアする機能も備えている。ＡＬＵ３０１では、主として比較、算術論理演算、オペランドアドレスの計算／転送、オペランドアドレス値のインクリメント／デクリメント、ジャンプ先アドレスの計算／転送等が行われる。演算結果やアドレスモディファイの結果はセレクタ３０５、Ｄ１バス２６１を介して、レジスタファイル２２１中の命令で指定されたレジスタに書き戻される。ＯＡラッチ３０６は、オペランドのアドレスを保持するラッチであり、ＡＬＵ３０１でのアドレス計算結果もしくはＡＡラッチ３０２に保持されたベースアドレスの値を選択的に保持し、ＯＡバス２７３を介してオペランドアクセス部２０４に出力する。また、ジャンプ先アドレスやリピートブロックエンドアドレスなどを計算した場合には、ＡＬＵ３０１の出力が、ＪＡバス２７４を介してＰＣ部２２４に転送される。ラッチ３０４は、制御レジスタ値や汎用レジスタ値の転送時に転送する値を保持するラッチであり、Ｓ１バス２５１もしくはＳ３バス２５３を介して転送された値をセレクタ３０５に出力する。転送時にはラッチ３０４の値が、Ｄ１バス２６１を介して、レジスタファイル２２１中の命令で指定されたレジスタや、第１演算部２２２もしくはＰＣ部２２４内の制御レジスタに書き込まれる。
【００５２】
ストアデータ（ＳＤ）レジスタ３１１は、３２ビットのレジスタであり、Ｓ１バス２５１もしくはＳ２バス２５２の一方、もしくは、Ｓ１バス２５１とＳ２バス２５２の両方に出力されたストアデータを一時保持する。ＳＤレジスタ３１１に保持されたデータは、ラッチ３１２を介して整置回路３１３に転送される。整置回路３１３では、オペランドのアドレスに従ってストアデータが３２ビット境界に整置され、整置後のストアデータがラッチ３１４、ＯＤバス２７１を介してオペランドアクセス部２０４に出力される。
【００５３】
また、オペランドアクセス部２０４でロードされたバイトデータは、ＯＤバス２７１を介して、１６ビットのロードデータ（ＬＤ）レジスタ３１５に取り込まれる。ＬＤレジスタ３１５の値は、整置回路３１６に転送される。整置回路３１６では、バイト整置及びバイトデータのゼロ／符号拡張を行う。整置、拡張後のデータが、ラッチ３１７、Ｗバス２７２を介してレジスタファイル２２１中の指定されたレジスタに書き込まれる。１ワード（１６ビット）、あるいは、２ワード（３２ビット）ロードの場合には、ＬＤレジスタ３１５を介さず、ＯＤバス２７１からレジスタファイル２２１にロードした値が直接書き込まれる。
【００５４】
制御部２１１中のＰＳＷ部３２３は図３の制御レジスタＣＲ０（ＰＳＷ）の値を物理的に保持するラッチや、ＰＳＷ更新回路等からなり、演算結果や命令の実行によりＰＳＷの値を更新する。制御部２１１中の制御レジスタに値を転送する場合、Ｓ３バス２５３に出力されたデータがＣＮＴＩＦラッチ３２１を介して、ＰＳＷ部３２３に転送される。また、制御部２１１中の制御レジスタの値を読み出す場合には、ＰＳＷ部３２３から読み出し対象となる制御レジスタの値がＤ１バス２６１に出力され、レジスタファイル２２１に書き込まれる。ＢＰＳＷレジスタ３２２は図３の制御レジスタＣＲ１（ＢＰＳＷ）の値を物理的に保持するレジスタである。例外処理等の起動にともなうＰＳＷ値の待避時には、Ｄ１バス２６１に出力された制御レジスタＣＲ０（ＰＳＷ）の値がＢＰＳＷレジスタ３２２に書き込まれる。例外処理等からの復帰時には、ＢＰＳＷレジスタ３２２の値は、直接ＣＮＴＩＦラッチ３２１を介して、ＰＳＷ部３２３に転送される。また、ＢＰＳＷレジスタ３２２はＳ３バス２５３への出力経路、及び、Ｄ１バス２６１からの入力経路を備える。
【００５５】
図１３はＰＣ部２２４の内部構成の詳細を示すブロック図である。同図に示すように、命令アドレス（ＩＡ）レジスタ３３７は、次にフェッチする命令のアドレスを保持し、次にフェッチする命令のアドレスを命令フェッチ部２０２に出力する。引き続き後続の命令をフェッチする場合には、ＩＡレジスタ３３７からラッチ３３８を介して転送されたアドレス値がインクリメンタ３３９で１インクリメントされて、ＩＡレジスタ３３７に書き戻される。ジャンプやブロックリピート等によりシーケンスが切り替わる場合には、ＩＡレジスタ３３７はＪＡバス２７４を介して転送されるジャンプ先アドレスや、リピートブロックスタートアドレスを取り込む。
【００５６】
ＲＰＴＳレジスタ３４１、ＲＰＴＥレジスタ３４３、及びＲＰＴＣレジスタ３４５はブロックリピート制御用の制御レジスタであり、それぞれ図３の制御レジスタＣＲ１０、制御レジスタＣＲ１１、及び制御レジスタＣＲ９に対応する値を物理的に保持する。ＲＰＴＳレジスタ３４１、ＲＰＴＥレジスタ３４３、及びＲＰＴＣレジスタ３４５は、Ｄ１バス２６１からの入力ポートとＳ３バス２５３への出力ポートを持ち、必要に応じてブロックリピート時の初期設定や待避、復帰が行なわれる。
【００５７】
ＲＰＴＳレジスタ３４１はリピートブロックの開始命令アドレスを保持する。ＲＰＴＳレジスタ３４１初期設定直後には、ラッチ３４２も更新される。ブロックリピート処理中で、リピートブロックの先頭命令に戻る場合は、ラッチ３４２の値が、ＪＡバス２７４を介して、ＩＡレジスタ３３７に転送される。
【００５８】
ＲＰＴＥレジスタ３４３はリピートブロックの最終命令のアドレスを保持する。この最終アドレスは、ブロックリピート命令処理時に第１演算部２２２で計算され、ＪＡバス２７４を介してＲＰＴＥレジスタ３４３に取り込まれる。比較器３４４は、ＲＰＴＥレジスタ３４３の値と、命令フェッチアドレスを保持しているＩＡレジスタ３３７の値とを比較し、一致情報６９２を制御部２１１へ出力する。
【００５９】
ＲＰＴＣレジスタ３４５及びＴＲＰＴＣレジスタ３４８は、リピートブロックの実行回数を管理するためのカウント値を保持する。ＴＲＰＴＣレジスタ３４８は、パイプライン処理における命令フェッチ段階での先行更新情報を保持する。ＴＲＰＴＣレジスタ３４８はＤ１バス２６１からの入力ポートを備えており、ＲＰＴＣレジスタ３４５の初期設定時に、同時に初期化される。リピートブロック最終命令のフェッチを行った場合、ＴＲＰＴＣレジスタ３４８の値がラッチ３５０を介してデクリメンタ３５１に転送され、デクリメントされてＴＲＰＴＣレジスタ３４８に書き戻される。１検出回路（ONE）３４９は、ＴＲＰＴＣレジスタ３４８が“１”である事を検出し、検出結果情報６９３を制御部２１１へ出力する。ＲＰＴＣレジスタ３４５は、マスタとなる実行段階でのカウント値を保持する。リピートブロック最終命令が実行されると、ＲＰＴＣレジスタ３４５の値がラッチ３４６を介してデクリメンタ３４７に転送され、デクリメントされてＲＰＴＣレジスタ３４５に書き戻される。また、ジャンプが起こった場合にＴＲＰＴＣレジスタ３４８の値を初期化するために、ＲＰＴＣレジスタ３４５から、ラッチ３５２を介し、ＴＲＰＴＣレジスタ３４８へ転送する経路がある。
【００６０】
実行ステージＰＣ（ＥＰＣ）３３４は実行中の命令のＰＣ値を保持し、次命令ＰＣ（ＮＰＣ）３３１は次に実行する命令のＰＣ値を保持する。ＮＰＣ３３１は、実行段階でジャンプが起こった場合、ＪＡバス２７４上のジャンプ先アドレス値を取り込む。リピートブロックの処理を繰り返す場合には、ラッチ３４２からリピートを行うブロックの先頭アドレスを取り込む。処理シーケンスの変更なく命令の実行が進むの場合には、１命令の実行が終了する毎にラッチ３３２を介して転送されたＮＰＣ３３１の値が、インクリメンタ３３３でインクリメントされ、ＮＰＣ３３１に書き戻される。サブルーチンジャンプ命令の場合には、ラッチ３３２の値が戻り先アドレスとしてＤ１バス２６１に出力され、レジスタファイル２２１中のリンクレジスタとして定義されているＲ１４に書き込まれる。
【００６１】
次に実行する命令のＰＣを参照する場合には、ＮＰＣ３３１の値がＳ３バス２５３に出力され、第１演算部２２２に転送される。また、次の命令が実行状態に入る場合には、ラッチ３３２の値がＥＰＣ３３４に転送される。実行中の命令のＰＣ値を参照する場合には、ＥＰＣ３３４の値がＳ３バス２５３に出力され、第１演算部２２２に転送される。ＢＰＣ３３６は、図３の３４のＣＲ３に対応する値を物理的に保持する。例外や割り込み等が検出された場合には、ＥＰＣ３３４の値がラッチ３３５を介してＢＰＣ３３６に転送される。ＢＰＣ３３６は、Ｄ１バス２６１からの入力ポートとＳ３バス２５３への出力ポートを持ち、必要に応じて待避、復帰が行なわれる。
【００６２】
第２演算部２２３は、レジスタファイル２２１と、複数のバスで接続されており、参照／更新するレジスタ値を転送する。第２演算部２２３は、ＡＬＵ、バレルシフタ、プライオリティエンコーダ、積和演算器等を含み命令で指定された演算実行等を行う。図２で示したアキュムレータＡ０，Ａ１の２本の４０ビットアキュムレータを物理的に保持するアキュムレータも、第２演算部２２３に含まれる。
【００６３】
次に本実施の形態におけるデータ処理装置のパイプライン処理について説明する。図１４はパイプライン処理を示す説明図である。本データ処理装置は、命令データのフェッチを行う命令フェッチ（ＩＦ）ステージ４０１、命令の解析を行う命令デコード（Ｄ）ステージ４０２、演算実行を行う命令実行（Ｅ）ステージ４０３、データメモリのアクセスを行うメモリアクセス（Ｍ）ステージ４０４、メモリからロードしたバイトオペランドをレジスタへ書き込むライトバック（Ｗ）ステージ４０５の５段のパイプライン処理を行う。
【００６４】
Ｅステージ４０３での演算結果のレジスタへの書き込みはＥステージ４０３、ワード（２バイト）、２ワード（４バイト）ロード時のレジスタへの書き込みはＭステージ４０４で完了する。積和／積差演算、倍精度演算に関しては、更に乗算と加算の２段のパイプラインで命令の実行を行う。後段の処理を命令実行２（Ｅ２）ステージ４０６と呼ぶ。連続する積和／積差演算を１回／１クロックサイクルのスループットで実行できる。
【００６５】
ＩＦステージ４０１では、主として命令のフェッチ、命令キュー２１２の管理、ブロックリピート制御が行われる。命令フェッチ部２０２、内蔵命令メモリ２０３、外部バスインターフェイス部２０６、ＰＣ部２２４のＩＡレジスタ３３７、ラッチ３３８、インクリメンタ３３９、ＴＲＰＴＣレジスタ３４８、ラッチ３５０、デクリメンタ３５１、１検出回路３４９、比較器３４４等や制御部２１１のＩＦステージステージ制御、命令フェッチ制御、命令キュー２１２、ＰＣ部２２４制御等を行う部分が、このＩＦステージ４０１の制御で動作する。ＩＦステージ４０１は、Ｅステージ４０３のジャンプで初期化される。
【００６６】
命令フェッチアドレスは、ＩＡレジスタ３３７で保持される。Ｅステージ４０３でジャンプが起こるとＪＡバス２７４を介してジャンプ先アドレスを取り込み、初期化を行う。シーケンシャルに命令データをフェッチする場合には、インクリメンタ３３９でアドレスをインクリメントする。ブロックリピート処理中で、リピートブロックの最終命令処理後リピートブロックの先頭に戻る場合、ＩＦステージ４０１で命令処理シーケンスの切り替え制御が行われる。この際、ＲＰＴＳレジスタ３４１に保持されているアドレスが、ラッチ３４２、ＪＡバス２７４を介してＩＡレジスタ３３７に転送される。
【００６７】
ＩＡレジスタ３３７の値は命令フェッチ部２０２に送られ、命令フェッチ部２０２が命令データのフェッチを行う。対応する命令データが内蔵命令メモリ２０３にある場合には、内蔵命令メモリ２０３から命令コードを読み出す。この場合、１クロックサイクルで３２ビットの命令のフェッチを完了する。対応する命令データが内蔵命令メモリ２０３にない場合には、外部バスインターフェイス部２０６に命令フェッチ要求を出す。外部バスインターフェイス部２０６は、オペランドアクセス部２０４からの要求とを調停し、命令の取り込みが可能になったら、外部のメモリから命令データを取り込み、命令フェッチ部２０２に送る。外部バスインターフェイス部２０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。命令フェッチ部２０２は取り込まれた命令を、命令キュー２１２に転送する。
【００６８】
命令キュー２１２は２エントリのキューになっており、ＦＩＦＯ制御で取り込まれた命令コードを、命令デコード部２１３に出力する。ブロックリピート処理中で命令フェッチアドレスがＲＰＴＥレジスタ３４３と一致した事を示すリピートブロック最終命令情報と、ブロックリピート処理中で、命令フェッチアドレスがＲＰＴＥレジスタ３４３と一致し、かつ、更新前のＴＲＰＴＣレジスタ３４８が“１”であった事を示すブロックリピート処理終了情報が、命令キューに対応する命令コードとともに保持され、対応する命令コードとともに命令デコード部２１３に出力される。以降のステージでは、この情報の基づき、ブロックリピート処理に関する命令非依存のハードウェア制御が行われる。
【００６９】
Ｄステージ４０２では、命令デコード部２１３でオペレーションコードの解析を行い、第１演算部２２２、第２演算部２２３、ＰＣ部２２４等で命令の実行を行うための制御信号群を生成する。Ｄステージ４０２は、Ｅステージ４０３のジャンプで初期化される。命令キュー２１２から送られてくる命令コードが無効な場合には、アイドルサイクルとなり、有効な命令コードが取り込まれるまで待つ。Ｅステージ４０３が次の処理を開始できない場合には、演算器等に送る制御信号を無効化し、Ｅステージ４０３での先行命令の処理の終了を待つ。例えば、Ｅステージ４０３で実行中の命令がメモリアクセスを行う命令であり、Ｍステージ４０４でのメモリアクセスが終了していない場合にこのような状態になる。
【００７０】
Ｄステージ４０２では、シーケンシャル実行を行う２命令の分割や、２サイクル実行命令のシーケンス制御も行う。さらに、Ｅステージ４０３で参照もしくは更新するレジスタ値のロードが完了しているかどうかを判定するロードオペランドの干渉チェックや第２演算部２２３の演算器のＥ２ステージ４０６とＥステージ４０３の干渉チェック等も行い、干渉が検出された場合には、干渉が解消されるまで制御信号の出力を抑止する。
【００７１】
第１デコーダ２１４は、主として第１演算部２２２のすべて、ＰＣ部２２４のＩＦステージ４０１で制御される部分以外、レジスタファイル２２１のＳ１バス２５１、Ｓ２バス２５２、Ｓ３バス２５３への読み出し制御とＤ１バス２６１からの書き込み制御に関する実行制御信号を生成する。命令に依存するＭステージ４０４やＷステージ４０５での処理に必要な制御信号もここで生成され、パイプラインの処理の流れに付随して転送される。第２デコーダ２１５は、主として第２演算部２２３での実行制御、レジスタファイル２２１の第２演算部２２３にデータを転送する複数のバスへの読み出し制御と第２演算部２２３から出力されるデータの書き込み制御に関する実行制御信号を生成する。
【００７２】
命令キュー２１２から取り込まれたリピートブロック最終命令情報とブロックリピート処理終了情報をもとに、命令に依存しないブロックリピート処理に関するＮＰＣ３３１の更新制御信号、ＲＰＴＣレジスタ３４５の更新制御信号や、制御レジスタＣＲ０（ＰＳＷ）のＲＰビット４３のクリアに関する更新制御信号などが生成される。
【００７３】
Ｅステージ４０３では、演算、比較、制御レジスタを含むレジスタ間転送、ロード／ストア命令のオペランドアドレス計算、ジャンプ命令のジャンプ先アドレスの計算、ジャンプ処理、ＥＩＴ（例外、割り込み、トラップの総称）検出と各ＥＩＴのベクタアドレスへのジャンプ等、メモリアクセスと積和／積差演算命令の加算処理を除く命令実行に関するほとんどすべての処理を行う。
【００７４】
割り込みイネーブルの場合の割り込みの検出は、必ず３２ビット命令の切れ目で行われる。３２ビット命令の中にシーケンシャルに実行する２つのショート命令がある場合も、この２つのショート命令間で割り込みを受け付けることはない。
【００７５】
Ｅステージ４０３で処理中の命令がオペランドアクセスを行う命令であり、Ｍステージ４０４でメモリアクセスが完了しない場合には、Ｅステージ４０３での完了は待たされる。ステージ制御は制御部２１１で行われる。
【００７６】
Ｅステージ４０３において、第１演算部２２２内のＡＬＵ３０１で、算術論理演算、比較、転送、メモリオペランドのアドレスや分岐先のアドレス計算等が行われる。オペランドとして指定されたレジスタの値が、Ｓ１バス２５１、Ｓ２バス２５２、Ｓ３バス２５３に読み出され、必要に応じて別途取り込まれる即値、変位等の拡張データを使用して、ＡＬＵ３０１で演算が行われ、演算結果がＤ１バス２６１を介してレジスタファイル２２１に書き戻される。ロード／ストア命令の場合には、演算結果はＯＡラッチ３０６、ＯＡバス２７３を介して、オペランドアクセス部２０４に送られる。ジャンプ命令の場合には、ジャンプ先アドレスがＪＡバス２７４を介して、ＰＣ部２２４に送られる。ストアデータはＳ１バス２５１、Ｓ２バス２５２を介して、レジスタファイル２２１から読み出され、ＳＤレジスタ３１１、ラッチ３１２を介して転送後、整置回路３１３で整置が行われる。また、ＰＣ部２２４では、実行中の命令のＰＣ値の管理、次に実行する命令のアドレスの生成が行われる。第１演算部２２２、ＰＣ部２２４に含まれる制御レジスタ（アキュムレータを除く）とレジスタファイル２２１間の転送は、Ｓ３バス２５３、Ｄ１バス２６１を介して行われる。
【００７７】
Ｅステージ４０３において、第２演算部２２３では、算術論理演算、比較、転送、シフト他、積和演算の加算以外のすべての演算実行が行われる。オペランドの値が、レジスタファイル２２１やアキュムレータ等からバスを介して各演算器に転送され、指定された演算を行い、演算結果がアキュムレータや、Ｄ２バス２６２を介してレジスタファイル２２１に書き戻される。
【００７８】
第１演算部２２２及び第２演算部２２３での演算結果によるＰＳＷ中のフラグ値の更新制御も、Ｅステージ４０３で行われる。しかし、演算結果の確定がＥステージ４０３の遅い時期になるため、実際のＰＳＷ値の更新は、次サイクルで行われる。データ転送によるＰＳＷの更新は、対応するサイクルで完了する。
【００７９】
Ｅステージ４０３では、実行する命令に依存しないＰＣ値の更新やブロックリピート制御も行われる。新しい３２ビット命令の処理を開始するたびに、ラッチ３３２の値をＥＰＣ３３４に転送する。ＮＰＣ３３１は次に処理する命令のアドレスを保持する。Ｅステージ４０３でジャンプが起こった場合には、ＡＬＵ３０１で生成されるジャンプ先アドレスがＪＡバス２７４を介してＮＰＣ３３１に書き込まれ、初期化される。シーケンシャルに命令の処理が継続する場合には、３２ビット命令の処理を開始するたびに、インクリメンタ３３３で１インクリメントされた値がＮＰＣ３３１に書き戻される。ブロックリピート継続でリピートブロック最終命令の処理を開始する際には、ラッチ３４２からリピートブロックの先頭アドレスを取り込む。リピートブロック最終命令の処理を終了するサイクルで、ＲＰＴＣレジスタ３４５の値がラッチ３４６を介してデクリメンタ３４７でデクリメントして書き戻される。ブロックリピート処理を終了する場合、リピートブロック最終命令の処理を終了するサイクルで、ＰＳＷのＲＰビット４３を“０”にクリアする。
【００８０】
第１デコーダ２１４で生成されたロード／ストア命令のメモリアクセス関連情報、ロードレジスタ情報は、Ｅステージ４０３の制御のもとに保持され、Ｍステージ４０４に送られる。また、第２デコーダ２１５で生成された積和／積差演算の加減算実行のための演算制御信号は、Ｅステージ４０３の制御のもとに保持され、Ｅ２ステージ４０６に送られる。Ｅステージ４０３のステージ制御も制御部２１１で行われる。
【００８１】
Ｍステージ４０４では、第１演算部２２２から送られたアドレスでオペランドのアクセスが行われる。オペランドアクセス部２０４は、オペランドが内蔵データメモリ２０５やチップ内ＩＯ（図示せず）にある場合には、内蔵データメモリ２０５やチップ内ＩＯに対し、１クロックサイクルに１回のオペランドのリードもしくはライトを行う。オペランドが内蔵データメモリ２０５やチップ内ＩＯでない場合には、外部バスインターフェイス部２０６にデータアクセス要求を出す。外部バスインターフェイス部２０６は、外部のメモリに対してデータアクセスを行い、ロードの場合には読み出されたデータをオペランドアクセス部２０４に転送する。
【００８２】
外部バスインターフェイス部２０６は、最小２クロックサイクルで外部メモリのアクセスを行うことが可能である。ロードの場合には、オペランドアクセス部２０４は読み出されたデータを、ＯＤバス２７１を介して転送する。バイトデータの場合はＬＤレジスタ３１５に、ワード、もしくは、２ワードデータの場合にはレジスタファイル２２１に直接書き込む。ストアの場合には、整置されたストアデータの値が、整置回路３１３からラッチ３１４、ＯＤバス２７１を介してオペランドアクセス部２０４に転送され、対象となるメモリへの書き込みが行われる。Ｍステージ４０４のステージ制御も制御部２１１で行われる。
【００８３】
Ｗステージ４０５において、ＬＤレジスタ３１５に保持されたロードオペランド（バイト）は、整置回路３１６で整置、ゼロ／符号拡張された後に、ラッチ３１７へ転送され、Ｗバス２７２を介してレジスタファイル２２１へ書き込まれる。
【００８４】
Ｅ２ステージ４０６では、積和／積差演算の加減算処理を行い、加減算結果をアキュムレータに書き戻す。
【００８５】
本データ処理装置は、入力クロックに基づいて内部制御を行う。最短の場合、各パイプラインステージは、内部の１クロックサイクルで処理を終了する。ここでは、クロック制御の詳細については、本発明に直接関係ないので説明を省略する。
【００８６】
各サブ命令の処理例について説明する。加減算、論理演算、比較等の演算命令やレジスタ間の転送命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３の３段で処理を終了する。演算やデータ転送をＥステージ４０３で行う。
【００８７】
積和／積差命令は、乗算を行うＥステージ４０３と加減算を行うＥ２ステージ４０６の２クロックサイクルで演算実行を行うため、４段の処理となる。
【００８８】
バイトロード命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４、Ｗステージ４０５の５段で処理を終了する。１ワード／２ワードのロードやストア命令は、ＩＦステージ４０１、Ｄステージ４０２、Ｅステージ４０３、Ｍステージ４０４の４段で処理を終了する。
【００８９】
非整置アクセスの場合には、オペランドアクセス部２０４でＭステージ４０４の制御のもと整置された２回のアクセスに分割され、メモリアクセスが行われる。
【００９０】
実行に２サイクルかかる命令では、第１、第２命令デコーダ２１４、２１５で、２サイクルかけて処理し、各サイクル毎に各々実行制御信号を出力し、２サイクルかけて演算実行を行う。
【００９１】
ロング命令は、１つの３２ビット命令が１つのロング命令で構成されており、この１つのロング命令の処理で３２ビット命令の実行が完了する。パラレル実行する２つの命令は、２つのショート命令のうち処理サイクルの大きい方の命令の処理に律速される。例えば、２サイクル実行の命令と１サイクル実行の命令の組み合わせの場合には、２サイクルかかる。シーケンシャル実行の２つのショート命令の場合には、各サブ命令の組み合わせになり、デコード段階で各命令がシーケンシャルにデコードされ、実行される。例えば、Ｅステージ４０３で１サイクルで実行が完了する加算命令が２つの場合には、Ｄステージ４０２、Ｅステージ４０３とも各命令に１サイクル、計２サイクルかけて処理する。Ｅステージ４０３における先行命令の実行と並列して、Ｄステージ４０２で後続命令のデコードが行われる。
【００９２】
次に、本実施の形態におけるデータ処理装置のブロックリピート処理の動作を詳細に説明する。本データ処理装置のリピート命令は２つ命令フォーマットを備えている。
【００９３】
図１５及び図１６はそれぞれリピート命令のビット割り付けを示す説明図である。繰り返し回数をレジスタ値で指定する“ＲＥＰ  Ｒｓ，ｄｉｓｐ”のビット割り付けを図１５に、繰り返し回数を８ビットの即値で指定する“ＲＥＰＩ  ｉｍｍ，ｄｉｓｐ”のビット割り付けを図１６に示す。共に、ロング命令のフォーマットであり、図９に示したものに近い命令ビット割り付けとなっている。
【００９４】
ＦＭビット１０１はロングフォーマットを示す“１１”となる。図１５及び図１６において、オペレーションコード５０１，５１１、予約フィールド５０２、ｄｉｓｐ５０４、ｄｉｓｐ５１３はリピートブロックの最終命令のアドレスを、リピート命令のアドレスからの変位（３２ビットの命令ワード単位）で指定する。リピートブロック（繰り返し対象命令のブロック）は、リピート命令の次の命令から、ｄｉｓｐ５０４、５１３で指定される命令までとなる。Ｒｓ５０３はリピートブロックの繰り返し回数を指定するレジスタ番号である。ｉｍｍ５１２はリピートブロックの繰り返し回数を指定する即値フィールドである。なお、本実施の形態では、繰り返し回数が“０”の場合には、動作保証しないものとする。
【００９５】
基本的に、リピート命令はリピートブロックのサイズにより、３種類に分類され、異なった処理を行う。第１はリピートブロックのサイズが１命令（変位値が“１”）の場合であり、リピート命令の実行後ジャンプ処理を行い、パイプラインをキャンセルする。
【００９６】
第２はリピートブロックのサイズが２命令（変位値が“２”）の場合であり、リピート命令デコード時に命令フェッチを一旦停止（抑止）し、リピート命令の実行終了時に、命令フェッチの停止を解除する。
【００９７】
第３はリピートブロックのサイズが３命令以上（変位値が“３”以上）の場合であり、リピート命令の実行後ジャンプをしたり、命令フェッチの一時停止制御を行ったりすることなく、パイプライン処理を継続する。
【００９８】
図１７は、本発明の実施の形態であるデータ処理装置の制御部２１１のうち、リピート制御の説明に必要な部分の一部のみを模式的に示したブロック図である。実際の論理はより複雑である。また、図１７で示しているように明確にブロック分けできるようなものでないものもある。あくまでも、説明しやすいように示した概念的なブロック図である。
【００９９】
ＩＦステージ制御部６５１は命令フェッチステージの制御を行う。ＩＦステージ制御部６５１内に存在しリピート時パイプライン制御手段の一部としても機能する命令フェッチ要求生成部６５２は命令キューの空き状態やリピート関連の制御信号（命令フェッチ抑止信号６８１，命令フェッチ抑止解除信号６８２）に基づき、命令フェッチ要求信号６９１を生成する。
【０１００】
リピート制御部６５３はリピート制御を行い、ＰＣ部２２４から比較器３４４の出力である命令フェッチアドレス（ＩＡアドレス３３７の値）とＲＰＴＥ（ＲＰＴＥレジスタ３４３の値）との一致情報６９２と、１検出回路３４９の出力であるＴＲＰＴＣレジスタ３４８の値が“１”であるかどうかの検出結果情報６９３を入力する。ＴＲＰビット６５４は制御レジスタＣＲ０（ＰＳＷ）のＲＰビット４３に対応する情報を保持するリピート状態ビットである。最終的なリピート状態は実行ステージで管理されている。このＴＲＰビット６５４は、パイプライン処理において命令フェッチ段階で先行更新するために保持する情報である。命令キュー２１２は、命令フェッチ部２０２から取り込まれた命令データを保持するバッファであり、２つの３２ビット命令をキューイングすることができる。
【０１０１】
Ｄステージ制御部６６１は、命令デコードステージの制御を行う。命令デコード部２１３内の命令レジスタ６６２は命令デコード中の命令を保持する。リピート命令は第１デコーダ２１４のみで処理される。デコーダ６６３はオペレーションコードのデコードを行う。リピート設定用判定部としても機能するｄｉｓｐ判定部６６４はリピート命令の変位値の値が“１”であるか、“２”であるか、“３”以上であるかという、所定の条件を満足するか否かを判定する判定動作を実行する。
【０１０２】
リピート時パイプライン制御手段の一部としても機能する制御信号生成部６６５は、デコーダ６６３、ｄｉｓｐ判定部６６４、命令レジスタ６６２や図示していないその他の部分からの入力に基づき命令の実行に必要な制御信号等を生成する。リピート命令開始時で、変位値が“２”以下の場合には、活性状態の命令フェッチ抑止信号６８１を所定の信号線を介して命令フェッチ要求生成部６５２に出力する。
【０１０３】
Ｅステージ制御部６７１は、命令実行ステージの制御を行う。Ｅステージ制御部６７１内のジャンプ制御部６７２はジャンプの制御を行い、ジャンプ処理を行う場合には活性状態のジャンプ信号６８４を所定の信号線を介してＩＦステージ制御部６５１、Ｄステージ制御部６６１に送り、パイプライン処理における前処理をキャンセルする。すなわち、ジャンプ制御部６７２はリピート時パイプライン制御手段の一部として機能する。
【０１０４】
リピート時パイプライン制御手段の一部としても機能するＥステージ制御信号ラッチ６７３は実行ステージでの制御に必要な制御信号を保持するラッチである。Ｅステージ制御信号ラッチ６７３は、リピート命令の終了時で、変位値が“２”（第１の基準値）の場合には、ＲＥＰＩ（２）のＥステージにおいて、Ｅステージ制御信号ラッチ６７３に保持された活性状態の命令フェッチ抑止解除信号６８２を所定の信号線を介して命令フェッチ要求生成部６５２に送る。また、リピート命令の終了時のＥステージで、変位値が“１”（第２の基準値，所定の基準値）の場合には、ジャンプを要求するジャンプ要求信号６８３を所定の信号線を介してジャンプ制御部６７２に送る。
【０１０５】
ＰＳＷ部３２３内のＲＰビット６７５は制御レジスタＣＲ０（ＰＳＷ）のＲＰビット４３を物理的に保持するラッチであり、特に明示的に示している。ジャンプが起こった場合には、パイプライン前処理をキャンセルするために、ＲＰビット６７５の値がＴＲＰビット６５４に転送され、再設定される。
【０１０６】
次に、プログラム例をいくつか挙げ、本実施の形態のデータ処理装置による、リピート命令実行時、及び、ブロックリピート処理中の動作について詳細に説明する。
【０１０７】
図１８はリピート（対象）ブロックの命令数（この命令数に対応する総コードサイズが所定のコードサイズとなる）が３命令の場合のプログラム例を示す説明図である。実行する命令は、本発明の説明においてそれほど重要ではないので、ＩａやＩ１など簡略的な表記で示している。各命令は、１サイクルで処理を終了するロング命令、もしくは、並列実行する２命令の場合を想定している。コマンド行７０１〜７０３に示す命令Ｉａ〜Ｉｃは、リピート関連の設定を規定するリピート設定命令であるＲＥＰＩ（リピート）命令７０４の前に実行される命令である。コマンド行７０５〜７０７に示す命令Ｉ１〜Ｉ３がリピートブロック命令であり、２回繰り返し実行する。コマンド７０８以降の命令Ｉ４等がリピートブロックに引き続く後続命令である。
【０１０８】
図１９は実施の形態１のデータ処理装置が図１８で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。同図では、内蔵命令メモリ２０３に格納された命令を実行する場合を示している。
【０１０９】
同図において、上の部分は各パイプラインステージの処理（ＩＦステージ、Ｄステージ、Ｅステージ、Ｍ／Ｅ２ステージ）の様子を、下の部分はリピート処理に関係するレジスタの値や信号の値を示している。命令フェッチ要求は図１７の命令フェッチ要求信号６９１の値を示す。ＩＡは図３１のＩＡレジスタ３３７、ＲＰＴＥはＲＰＴＥレジスタ３４３、ＲＰＴＳはＲＰＴＳレジスタ３４１、ＴＲＰＴＣはＴＲＰＴＣレジスタ３４８、ＲＰＴＣはＲＰＴＣレジスタ３４５、ＮＰＣはＮＰＣ３３１、ＥＰＣはＥＰＣ３３４の値をそれぞれ意味する。
【０１１０】
“ＩＡ＝＝ＲＰＴ＿Ｅ”は図１３、図１７で示した一致情報６９２、“ＴＲＰＴＣ＝＝１”は図１３、図１７で示した検出結果情報６９３を意味する。ＲＰビットは図１７で示したＲＰビット６７５、ＴＲＰビットは図１７で示したＲＰビット６５４の値をそれぞれ意味する。なお、図１９において、“Ｈ”，“Ｌ”が重複する期間（一部ハッチングで示す）は不定期間を意味する。また、“ＩＡ＝＝ＲＰＴ＿Ｅ”，“ＴＲＰＴＣ＝＝１”における丸印は認識されるタイミングを意味する。
【０１１１】
リピート命令は、Ｄステージ４０２で２つのステップに分解され、Ｅステージ４０３で各々１サイクル、計２サイクルかけて実行される。図１９では、２つのステップを“ＲＥＰＩ（１）”、“ＲＥＰＩ（２）”と示している。第１ステップ（ＲＥＰＩ（１））でＲＰＴＥレジスタ３４３、ＲＰＴＳレジスタ３４１を設定し、第２ステップ(ＲＥＰＩ（２）)でＲＰＴＣレジスタ３４５、ＴＲＰＴＣレジスタ３４８、ＲＰビット６７５、ＴＲＰビット６５４を設定する。ＲＥＰＩ命令のデコード時にｄｉｓｐ判定部６６４によってリピート命令の変位値が判定される。変位値が“３”以上の場合は、後で説明する“２”以下の場合の命令フェッチの一時停止制御（命令フェッチ抑止及び解除機能）や、Ｅステージでのジャンプ制御（パイプラインキャンセル機能）等は行われない。
【０１１２】
Ｔ３サイクルで、ＲＥＰＩ命令の第１ステップ(ＲＥＰＩ（１）)の実行を行う。ＲＥＰＩ命令７０４のアドレスを保持しているＥＰＣ３３４の値がＳ３バス２５３を介してＡＡラッチ３０２に、ＲＥＰＩ命令のｄｉｓｐフィールド５１３の値が第１デコーダ２１４からＡＢラッチ３０３に各々取り込まれ、ＡＬＵ３０１で両者の値を加算することによりリピートブロックエンドアドレスであるＩ３命令のアドレスが計算され、加算結果がＪＡバス２７４を介してＲＰＴＥレジスタ３４３に書き込まれる。また、ＮＰＣ３３１に保持されているリピートブロックの先頭命令であるＩ１命令のアドレスがラッチ３３２、Ｄ１バス２６１を介して、ＲＰＴＳレジスタ３４１に書き込まれ、その後ラッチ３４２にも書き込まれる。
【０１１３】
Ｔ４サイクルで、ＲＥＰＩ命令の第２ステップ(ＲＥＰＩ（２）)の実行を行う。ＡＡラッチ３０２は“０”にする。ＲＥＰＩ命令のｉｍｍフィールド５１２の値が第１デコーダ２１４からＡＢラッチ３０３に取り込まれ、ＡＬＵ３０１で“０”と加算し、加算結果がＤ１バス２６１を介してＲＰＴＣレジスタ３４５、ＴＲＰＴＣレジスタ３４８に書き込まれる。また、リピート処理中であることを示すＲＰビット６７５、ＴＲＰビット６５４が“１”にセットされる。Ｔ４サイクルで、ＲＥＰＩ命令の実行に伴うリピート関連の設定が終了し、Ｔ５サイクル以降でフェッチされる命令に関して、リピートによる命令フェッチシーケンスの切り替えが可能になる。
【０１１４】
本プログラム例では、リピート設定命令としてＲＥＰＩ命令を用いているが、繰り返し回数をレジスタ値で指定するＲＥＰ命令の場合、レジスタ番号フィールド５０３で指定されるレジスタの値（繰り返し回数）がレジスタファイル２２１からＳ３バス２５３に読み出され、ＡＢラッチ３０３に転送される点のみが異なる。
【０１１５】
本データ処理装置は、２本の命令キューを備えているため、ＲＥＰＩ命令デコード中にＩ１、Ｉ２命令のフェッチが行われるが、Ｉ１命令のデコード処理が開始されるＴ４までは命令キュー２１２はフル状態となっているため、Ｉ３命令の命令フェッチ要求は出力されない。従って、Ｔ４サイクルでＩ１命令のデコード処理が開始されることにより、命令キュー２１２のＩ１命令が格納されていた領域が空くため、Ｔ５サイクルでＩ３命令のフェッチが行われる。この処理例は、最も命令キューが詰まる場合の例を示している。すなわち、リピートブロックが３命令上の場合には、特にパイプライン処理の前段処理の状態を配慮することなく、ブロックリピート処理を開始できる。
【０１１６】
次に、実行する命令とは無関係にハードウェア的に行われるリピート制御について説明する。実行する命令処理シーケンスの切り替えは、ＩＦステージ４０１で行われる。ＴＲＰビット６５４が“１”の状態で、リピートによるシーケンス制御が行われる。ＴＲＰ６５４が“１”の状態時に、ＩＡレジスタ３３７内の命令フェッチアドレスとＲＰＴＥレジスタ３４３のリピートブロック最終命令のアドレスとが比較器３４４で比較される。また、ＴＲＰビット６５４が“１”の状態で、ＴＲＰＴＣレジスタ３４８の値が“１”であるかどうかが、１検出回路３４９でチェックされる。
【０１１７】
ＴＲＰビット６５４が“１”で、かつ、ＴＲＰＴＣレジスタ３４８の値が“１”でない状態時に、ＩＡレジスタ３３７の値がＲＰＴＥレジスタ３４３と一致した場合、リピートブロックの最終命令のフェッチであり、かつ、リピート継続であることを示しており、処理シーケンスを切り替え、次にリピートブロックの先頭アドレスの命令（Ｉ１）をフェッチする。すなわち、Ｔ５サイクルでリピートブロック最終命令（Ｉ３）をフェッチ後、Ｔ６サイクルでＩ１命令をフェッチする。Ｔ５サイクルでは、ラッチ３４２に保持されているＩ１命令のアドレス値が、ＪＡバス２７４を介して、ＩＡレジスタ３３７に転送され、命令フェッチアドレスとして使用される。ＴＲＰビット６５４が“１”の状態で、ＩＡレジスタ３３７の値がＲＰＴＥレジスタ３４３と一致した場合、ＴＲＰＴＣレジスタ３４８の値が“１”だけデクリメントされる。すなわち、Ｔ５サイクルでＴＲＰＴＣレジスタ３４８の値が１デクリメントされる。
【０１１８】
ＴＲＰビット６５４が“１”で、かつ、ＴＲＰＴＣレジスタ３４８の値が“１”の状態時に、ＩＡレジスタ３３７の値がＲＰＴＥレジスタ３４３と一致した場合、リピート処理が終了することを示す。この場合、リピートブロックの命令は指定された回数の繰り返し処理を終えたことになるので、命令フェッチのシーケンス切り替えは行われず、次にリピートブロックの次の命令（Ｉ４）をフェッチする。すなわち、Ｔ８サイクルでＩ３命令をフェッチ後、Ｔ９サイクルでＩ４命令をフェッチする。この場合も、Ｔ８サイクルでＴＲＰＴＣレジスタ３４８の値はデクリメントされる。また、リピート処理の命令フェッチ段階での処理終了に伴い、Ｔ８サイクルでＴＲＰビット６５４は“０”にクリアされる。その後、シーケンシャルな命令フェッチを継続する。
【０１１９】
ブロックリピート処理中で命令フェッチアドレスがＲＰＴＥレジスタ３４３と一致した事を示すリピートブロック最終命令情報と、ブロックリピート処理中で命令フェッチアドレスがＲＰＴＥレジスタ３４３と一致し、かつ、更新前のＴＲＰＴＣレジスタ３４８が“１”であった事を示すブロックリピート処理終了情報が、命令コードとともに保持、転送され、この情報に基づき以降のステージで命令非依存のブロックリピート処理に関するハードウェア制御が行われる。
【０１２０】
リピート処理を継続するリピートブロック最終命令（Ｉ３）処理時には、Ｅステージ４０３での処理実行前のＴ６サイクルで、次に実行する命令のアドレスとしてリピートブロック先頭命令（Ｉ１）のアドレスがラッチ３４２からＮＰＣ３３１に書き込まれる。リピートブロック最終命令（Ｉ３）実行時のＴ７、Ｔ１０サイクルでは、ＲＰＴＣレジスタ３４５の値がデクリメントされる。また、リピート処理を終了するリピートブロック最終命令（Ｉ３）実行時でＴ１０サイクルで、ＲＰビット６７５がゼロクリアされる。
【０１２１】
このようにして、実行する命令とは独立にリピート制御を行うことにより、オーバーヘッドのない繰り返し処理を実現している。しかし、リピートブロックの命令数が“２”以下の場合、リピート制御のための各種判定が正しく行えるＴ４サイクルにはすでにリピートブロックの最終命令のフェッチが終了するタイミングとなるため、無条件に命令フェッチ部にフェッチされる構成の場合、正しいリピート制御が実現できない。以下、リピートブロックの命令数が２以下の場合の本データ処理装置の実行制御について説明する。
【０１２２】
図２０はリピートブロックの命令数が２命令の場合のプログラム例を示す説明図である。図２１は本実施の形態のデータ処理装置が図２０で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。図２０に示すように、Ｉ１、Ｉ２の２命令がリピートブロックは２となり、これらの命令（Ｉ１，Ｉ２）が２回繰り返して実行される。
【０１２３】
以下、図１８、図１９に示したプログラム処理例と異なる点に着目して説明を行う。なお、図２１において、“Ｈ”，“Ｌ”が重複する期間（一部ハッチングで示す）は不定期間を意味する。また、“ＩＡ＝＝ＲＰＴ＿Ｅ”，“ＴＲＰＴＣ＝＝１”における丸印は認識されるタイミングを意味する。
【０１２４】
リピート命令のデコードを開始するＴ２サイクルの最初では、命令キューにＲＥＰＩ命令とＩ１命令の２命令が格納されているため、それ以前のパイプライン処理状態に依存せずＩ２命令のフェッチは開始されていない。Ｔ２サイクルでＲＥＰＩ命令のデコードを開始する。リピート命令のデコード時にはｄｉｓｐ判定部６６４でリピートブロックの最終命令を指定するための変位値(所定のコードサイズ)が判定され、“２”であることが判定される。
【０１２５】
実施の形態１のデータ処理装置では、ＲＥＰＩ命令の第１ステップ(ＲＥＰＩ（１）)のデコード時に、ｄｉｓｐ判定部６６４が変位値が“２”以下と判定した場合、判定結果を受けた制御信号生成部６６５は、“Ｈ”（活性状態）の命令フェッチ抑止信号６８１を所定の信号線を通して命令フェッチ要求生成部６５２に送る。このとき、命令フェッチ抑止解除信号６８２に関する信号がＥステージ制御信号ラッチ６７３に送られる。
【０１２６】
ＩＦステージ制御部６５１内の命令フェッチ要求生成部６５２は“Ｈ”の命令フェッチ抑止信号６８１を受けると命令のフェッチを一時停止する命令フェッチ抑止制御を開始し、命令フェッチ要求信号６９１のアサートを停止する。その後、“Ｈ”（活性状態）の命令フェッチ抑止解除信号６８２、あるいは“Ｈ”のジャンプ信号６８４を受けるまで、命令フェッチ抑止状態を維持する。
【０１２７】
そして、ＲＥＰＩ命令の第２ステップ(ＲＥＰＩ（２）)を実行するＴ４サイクルで、ＲＥＰＩ命令の設定が完了する。Ｔ４サイクルでは、Ｅステージ制御信号ラッチ６７３から“Ｈ”の命令フェッチ抑止解除信号６８２が所定の信号線を介して命令フェッチ要求生成部６５２に送られる。ＩＦステージ制御部６５１は、“Ｈ”の命令フェッチ抑止解除信号６８２に応答して、命令フェッチ抑止状態を解除し、Ｔ４サイクルでＩ２命令のフェッチ要求出力を行い、続くＴ５サイクルでＩ２命令のフェッチを行う。
【０１２８】
このように、リピート設定命令(ＲＥＰＩ)の設定が完了するまで、命令フェッチを一時停止する命令フェッチ抑止状態を設けることにより、Ｉ２命令のフェッチから命令フェッチ段階でのリピート関連の判定や制御が正しく行われることを保証する。
【０１２９】
ただし、実施の形態１では、命令フェッチを一時停止することにより、図２１の処理例の場合、Ｉ２命令の実行が開始されるまでに１クロックサイクルのオーバーヘッドを生じる。ただし、このオーバーヘッドは最初の１回目の実行に関してのみ生じるが、その後の繰り返し処理に関してはオーバーヘッドを生じない。また、パイプラインの状態によっては、オーバーヘッドを生じない場合もある。例えば、Ｉ１命令がシーケンシャル実行を行うショートサブ命令を２命令含む場合、Ｉ１命令の実行に２サイクルを要するため、オーバーヘッドは生じない。
【０１３０】
このようにリピート命令処理時に命令フェッチの一時停止制御を行うことにより、リピートブロックの命令数が２命令の場合も、低オーバーヘッドでリピート処理を実現できる。
【０１３１】
すなわち、実施の形態１のデータ処理装置は、リピートブロックの命令数（所定のコードサイズ）が“２”（第１の基準値）以下である場合であっても、ｄｉｓｐ判定部６６４の判定動作によって上記命令数が“２”以下であることの判定時からリピート設定命令に規定したリピート関連の設定動作が終了するまでの期間、パイプライン処理対象の命令のフェッチを停止することにより、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【０１３２】
図２２はリピートブロックの命令数が１命令の場合のプログラム例を示す説明図である。図２３は本実施の形態のデータ処理装置が図２２で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。図２２に示すように、Ｉ１命令のみがリピートブロックとなり、２回繰り返し実行される。以下、図１８、図１９に示したプログラム処理例と異なる点に着目して説明を行う。なお、図２３において、“Ｈ”，“Ｌ”が重複する期間（一部ハッチングで示す）は不定期間を意味する。また、“ＩＡ＝＝ＲＰＴ＿Ｅ”，“ＴＲＰＴＣ＝＝１”における丸印は認識されるタイミングを意味する。
【０１３３】
リピート命令のデコードを開始するＴ２サイクルの最初では、リピート関連の設定が始まっていない状態ですでにＩ１命令のフェッチが完了しているため、そのまま継続して処理を続けても現状のハードウェア構成では正しい処理が行えない。以下、その理由について説明する。
【０１３４】
本実施の形態相当のデータ処理装置では、命令フェッチ要求の出力サイクルの後半からリピート関連の判定を行う。すなわち、Ｉ１命令のフェッチ要求を出力するＴ１サイクルの後半から、アドレスの一致判定やカウント値の判定を行うことになる。
【０１３５】
ところが、その判定に必要なリピート関連の制御レジスタ等の設定は、リピート命令を実行するＴ３、Ｔ４サイクルで行われる。したがって、Ｔ１サイクルでは正しい判定を行うことができず、Ｔ２サイクルでのＩ１命令のフェッチ後、リピート処理により次にＩ１命令をフェッチするという判断も行えない。本来、最初のＩ１命令のフェッチに伴い、Ｔ２サイクルで行うべきＴＲＰＴＣのデクリメント処理等も行えない。このように、正しいリピート関連の処理が行えないため、後続命令の正常な動作が保証できない。
【０１３６】
そこで、実施の形態１におけるデータ処理装置は、リピートブロックが１命令の場合は、リピート関連の設定終了後、パイプラインの前処理をキャンセルし、１回目のＩ１命令のフェッチから処理をやり直すように構成している。
【０１３７】
Ｔ２サイクルでＲＥＰＩ命令のデコードを開始する。リピート命令のデコード時にはｄｉｓｐ判定部６６４でリピートブロックの最終命令を指定するための変位値(所定のコードサイズ)が判定され、“１”であることが判定される。ＲＥＰＩ命令の第１ステップ(ＲＥＰＩ（１）)のデコード時に、変位値が“２”以下の場合、前述したように、制御信号生成部６６５から、“Ｈ”の命令フェッチ抑止解除信号６８２が所定の信号線を通して命令フェッチ要求生成部６５２に送られる。このとき、ジャンプ要求信号６８３に関連する情報がＥステージ制御信号ラッチ６７３にラッチされる。
【０１３８】
ＩＦステージ制御部６５１は“Ｈ”の命令フェッチ抑止解除信号６８２に応答して、命令フェッチ抑止状態となる。したがって、ＩＦステージ制御部６５１は、その後に“Ｈ”の命令フェッチ抑止解除信号を受けるか、“Ｈ”のジャンプ信号６８４を受けるまで、命令のフェッチを一時停止する。
【０１３９】
なお、リピートブロックが１命令の場合、“Ｈ”のジャンプ信号６８４によってパイプライン処理をキャンセルすることになるため、命令フェッチを停止することは必須ではないが、なるべく不要な命令フェッチを行わないように命令フェッチを停止する制御を行っている。
【０１４０】
Ｔ４サイクルで、ＲＥＰＩ命令の第２ステップ(ＲＥＰＩ（２）)の実行を行う。ＲＥＰＩ命令の第２ステップの処理時に、リピートブロックの命令数が“３”命令以上の場合の処理に加え、リピートブロックの先頭命令へのジャンプ処理を行う。このとき、Ｅステージ制御信号ラッチ６７３からジャンプ要求を指示するジャンプ要求信号６８３がＥステージ制御部６７１内のジャンプ制御部６７２に送られる。
【０１４１】
その結果、リピートブロックの先頭命令であるＩ１の命令アドレスが、ＮＰＣ３３１からラッチ３３２、ＪＡバス２７４を介してＩＡレジスタ３３７に転送されるとともに、ジャンプ制御部６７２からＨ”のジャンプ信号６８４がＩＦステージ制御部６５１及び命令フェッチ要求生成部６５２に送られ、“Ｈ”のジャンプ信号６８４を受けたＩＦステージ制御部６５１及びＤステージ制御部６６１はそれぞれパイプライン処理の前段処理をキャンセルする。
【０１４２】
このように、ＩＦステージ制御部６５１は、フェッチが完了しているＩ１命令のフェッチをやり直すことにより、リピート命令の設定後Ｉ１命令のフェッチが行われるようになり、正しいリピート制御が行われる。
【０１４３】
ただし、この場合パイプラインの前段処理をキャンセルするので、図２３の処理例の場合、Ｉ１命令の実行が開始されるまでに２クロックサイクルのオーバーヘッドを生じる。ただし、このオーバーヘッドは最初の１回目の実行に関してのみ生じるが、その後の繰り返し処理に関してはオーバーヘッドを生じない。
【０１４４】
このように、実施の形態１のデータ処理装置は、リピート設定命令の設定処理完了時にジャンプ処理を行うパイプラインキャンセル機能を有することにより、リピートブロックの命令数が１命令の場合も、リピート処理を実現できる。
【０１４５】
すなわち、実施の形態１のデータ処理装置は、上記パイプラインキャンセル機能により、リピートブロックの命令数（所定のコードサイズ）が“１”（第２の基準値）である場合であっても、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【０１４６】
上述のように、実施の形態１よるデータ処理装置は、リピート命令処理時に命令フェッチを一時停止する命令フェッチ抑止及び解除機能と、ジャンプ処理によりパイプライン処理の前段処理をキャンセルするパイプラインキャンセル機能とを有することにより、リピート命令の繰り返し対象ブロックのサイズが小さい場合にも正常動作を保証できるようになる。
【０１４７】
その結果、プログラム作成に際して、リピート命令で実行できるリピートブロックのサイズに制限がなくなるため、不必要にループ処理を展開する必要もなく、繰り返し回数がダイナミックに変化する場合も含めリピート命令で対処できない端数処理を行う部分が単純化でき、コードサイズも処理サイクル数も削減できるという効果を奏する。
【０１４８】
特にディジタル信号処理においては繰り返し処理の占める割合が非常に多く、繰り返し処理のコードサイズの削減は有効である。また、プログラムをＲＯＭ化する場合には、プログラムのコード効率がチップサイズに直接影響を及ぼすため、コスト削減にも大きく寄与する。
【０１４９】
このように、実施の形態１のデータ処理装置では、命令フェッチ抑止及び解除機能並びにパイプラインキャンセル機能を有することにより、リピート設定命令の第１ステップ(ＲＥＰＩ（１）)のＤステージ４０２から命令フェッチを一時停止したり、リピート設定命令の第２ステップ(ＲＥＰＩ（２）)のＥステージ４０３で命令フェッチの抑止解除あるいはジャンプ処理によりパイプライン処理の前段処理をキャンセルすることにより、コード効率のよい高性能、低消費電力で低コストなデータ処理装置を得ることができる。また、プログラム自体も単純になるため、プログラム開発の生産性が上がるとともに、バグの混入を低減できるという効果もある。
【０１５０】
上述した実施の形態１におけるデータ処理装置の構成例は、あくまでも一構成例を示したものであり、本発明の適用範囲を限定するものではない。基本的に、ハードウェアリピート機能を備えた、パイプライン処理を行うデータ処理装置であれば、どのようなものに本発明を適用しても同様の効果がある。上述の実施の形態に示した構成に限定されるものではない。
【０１５１】
上記実施の形態では、ＶＬＩＷプロセッサに対して本発明の技術を適用した例を示しているが、ＲＩＳＣプロセッサ、ＣＩＳＣプロセッサやＤＳＰ等、基本的にどのようなアーキテクチャのデータ処理装置に関しても適用可能である。また、可変長命令セットアーキテクチャのプロセッサに適用してもよい。ただし、可変長命令セットを処理する場合は、整置を配慮する必要があり、制御は多少複雑になる。また、可変長命令セットを処理する場合は、命令数とコードサイズが１対１に対応しないため、リピートブロックのコードサイズで処理内容の判定を行うように制御する必要がある。
【０１５２】
上記実施の形態では、命令フェッチ抑止信号６８１及び命令フェッチ抑止解除信号６８２に基づく命令フェッチ抑止及び解除機能とジャンプ信号６８４に基づくパイプラインキャンセル機能を共に実装した例を示しているが、各々の機能を単独で実装してもよい。例えば、上記パイプラインキャンセル機能のみを実装し、リピート命令の設定終了時における“Ｈ”のジャンプ信号６８４に基づくパイプラインキャンセルのみを行うように構成し、リピートブロックの命令が２命令以下の場合は常に上述したジャンプ処理を行うようにしてもよい。
【０１５３】
また、上記命令フェッチ抑止及び解除機能のみを実装し、リピートブロックの命令が２命令の場合には対処するが、リピートブロックの命令が１命令の場合は動作保証しないようにし構成してもよい。ただし、このように、上記命令フェッチ抑止及び解除機能並びに上記パイプラインキャンセル機能のうちの一方を単独で実装した場合、効果が小さくなったり、制限が増えたりするが、その点は設計時に開発コストと性能のトレードオフを考慮して判断すればよいことである。
【０１５４】
また、実施の形態１では、簡単のため比較的浅いパイプラインで、命令キューが２本の単純な例を示しているが、上記実施の形態と異なるパイプライン処理構成のものに適用しても良い。高性能化のため、パイプライン１段の処理量は小さくして処理段数を増やすという狭ピッチパイプライン化によりリピート関連の設定を行うステージまでのパイプライン段数が多い場合や、命令キューのエントリ数が多い場合は、リピート関連の設定が完了するまでに取り込まれる命令数の最大値が大きくなり、対処を行わない場合に保証できるリピートブロックのサイズが増大するため、本発明の技術は特に有効である。
【０１５５】
実施の形態１では、１レベルのみリピート機能を実装した例を示したが、入れ子構造の複数レベルのリピートを実装している場合にも適用可能である。
【０１５６】
また、条件分岐の分岐／非分岐両方向の複数の処理シーケンスの命令フェッチを行っておくような構成の場合でも、本発明は適用可能である。以下、この点について詳述する。高性能なプロセッサでは、条件分岐命令処理時の分岐ペナルティ（分岐によりパイプラインキャンセルが起こった場合に、分岐先命令のフェッチから実行に至るまでのＥステージアイドルサイクル）を削減するために、分岐／非分岐の両方のシーケンスの命令をフェッチするような機能を実装するものがある（さらに３つ以上の場合もある）。そのような場合でも、リピート命令処理（命令デコード／実行）時に処理しているリピート命令が含まれるシーケンスの命令に関して、本実施の形態と同じ処理を行えばよい。すなわち、複数の処理シーケンスの命令フェッチを行っておくような構成の場合でも、各々１つの処理シーケンスに着目すれば同じ処理を行えばよいことになる。
【０１５７】
上記実施の形態では、リピート命令の実行を２サイクルかけて行っているが、１サイクルで行ってもよいし、３サイクル以上かけてもよい。また、上記実施の形態では、リピート命令実行後にジャンプを行う場合、第２ステップ(ＲＥＰＩ（２）)が実行される２サイクル目でジャンプ処理を行っているが、第３ステップを追加し、第３ステップでジャンプ処理を行うようにしてもよい。ジャンプ処理のタイミングは、命令フェッチ段階で正しいシーケンス制御が保証できるタイミング以降なら任意のタイミングで行ってもよい。例えば、リピート命令処理時にリピート関連の設定を実行ステージ以前に行う場合は、リピート関連の設定タイミングに応じてより早くリピート設定命令以降のパイプラインキャンセル（ジャンプ処理）を行っても問題ない。
【０１５８】
実施の形態１では、命令フェッチの抑止解除をリピート命令の実行の最終ステップの実行時に行っているが、ハードウェア的に動作が保証できるタイミングであれば、それ以降のどのタイミングで行ってもよい。例えば、リピート命令処理時にリピート関連の設定を実行ステージ以前に行う場合は、リピート関連の設定タイミングに応じてより早く命令フェッチの抑止解除を行っても問題ない。
【０１５９】
実施の形態１では、ジャンプ処理によりパイプラインの前段処理をキャンセルする場合も命令のフェッチ抑止を行っているが、命令フェッチの抑止を行わなくてもよい。ただし、命令フェッチの抑止を行っておく方が無駄な命令のフェッチを抑えることが可能であり、ジャンプ処理時に命令フェッチ要求がすぐに受け付け可能な状態となる。なお、命令フェッチに複数サイクルがかかる場合など、ジャンプ要求がすぐに受け付けられない場合がある。この場合はフェッチ動作を止めれば命令フェッチがすぐに受け付けられるようになる。
【０１６０】
実施の形態１では、リピート関連の設定／リピート処理の起動を１つのリピート命令で全て行うようにしているが、複数の命令で設定／起動を行うようにしてもよいし、各設定値について異なる指定方法を採ってもかまわない。基本的に、どのような命令仕様や制御レジスタのハードウェア仕様であっても、リピート関連の最後の設定を行う命令の処理時に、その命令からリピート機能により処理シーケンスを切り替えるための判定に使用される命令フェッチアドレスの命令までのコードサイズ情報を判定するための手段を設け、パイプライン処理を考慮して、正しく動作保証できるように、上述した命令フェッチ抑止及び解除機能やパイプラインキャンセル機能を備えればよい。
【０１６１】
例えば、繰り返し回数は別命令で予め設定するようにしても、上記命令フェッチ抑止及び解除機能や上記パイプラインキャンセル機能の実行制御等のリピート命令の制御方法の判定に繰り返し回数は影響しないので、上記実施の形態と同様に制御できる。また、上記実施の形態では、繰り返し回数としてリピートブロックの実行回数を指定するようになっているが、繰り返し回数を“繰り返し回数−１”で設定し管理するなど、上記実施の形態と異なる命令仕様であってもかまわない。この場合、上記実施の形態ではリピートの終了のためカウント値が“１”であることを判定しているが、その代わりに“０”であることを判定すればよい。
【０１６２】
また実施の形態１では、リピート命令はリピートブロックの直前で実行するようにしており、リピートブロックの先頭命令はリピート命令の次命令であることが暗黙で指定されている。例えば、リピートブロックの開始命令をリピート命令で明示的に指定、あるいは、暗黙的に数命令先に指定したり、予め別命令で指定しておくようにしてもよい。リピート命令とリピートブロックの最終命令までのコード量を判定するのにリピートブロックの先頭命令がどこであるかは、関連しない。
【０１６３】
また実施の形態１では、リピートブロックの最終命令をリピート命令からの変位値で指定している。リピートブロックの開始命令や最終命令を変位値でなく絶対アドレスで指定してもよいし、リピートブロックの最終命令をリピート命令の次命令からの変位値等で指定してもよい。さらに、リピートブロックの最終命令のアドレス情報として、リピートブロックの最終命令の次命令への変位値で指定するようにしておくような命令仕様であってもかまわない。この場合、内部ハードウェア的にリピートブロックの最終命令のアドレスを計算、管理してもよいし、アドレス比較を行うタイミングを早め、フェッチアドレスとリピートブロックの最終命令の次命令アドレスと比較し、一致したらその命令のフェッチを行わずリピートブロックの先頭命令のアドレスの命令フェッチを行うようにすればよい。
【０１６４】
また、リピートブロックの最終命令のアドレスが絶対アドレスで指定される場合、リピート命令のアドレスとリピートブロックの最終命令のアドレスの差分をとれば、リピートブロックの最終命令までのコードサイズ情報を判定できる。
【０１６５】
また、リピートブロックの最終命令のアドレスが予め別命令で設定が行われている場合には、既に設定が終わっているレジスタ等の値を参照して、リピートブロックの最終命令までのコードサイズを判定すればよい。
【０１６６】
実施の形態１では、リピートブロックの最終命令フェッチ時にリピート関連の判定を行うようにしているが、早いタイミングで判定を行うため、リピートブロックの最終命令の１つ前の命令アドレスをハードウェア的に保持するようにしておき、そのアドレスとフェッチアドレスを比較を行うようにしてもよい。
【０１６７】
また、フェッチ時に準備段階の次にフェッチする命令アドレス（例えばインクリメンタ３３９の出力）と比較するようにしてもよい。また、リピートブロックの最終命令のフェッチが受け付けられた後でもシーケンス制御の切り替えが正しく行えるハードウェア構成をとっているのであれば、それを配慮してリピートブロックのサイズを判定すればよい。以下、この点について詳述する。
【０１６８】
実施の形態１では、命令フェッチの要求出力時に判定を開始し、命令フェッチ中にＴＲＰＴＣやＴＲＰビットの更新を行うようにしている。したがって、図２３で示した例ではＩ１の命令フェッチ(Ｔ２サイクル)がリピート関連の設定（Ｔ４サイクル）の前に終わっているため対処できなくなっている。
【０１６９】
しかし、この場合、Ｔ４サイクルではＩ２の命令フェッチをまだ開始していないので、直前に命令フェッチしたＩ１のアドレスを別途保持しておき、リピート関連の設定が完了し正しい判定が可能となるＴ４サイクルで、別途保持しているアドレスとの判定を行い、Ｔ５サイクルでの処理シーケンスの切り替えやＴＲＰＴＣやＴＲＰビットの更新を行うことが可能となるようなハードウェア構成をとれば、Ｔ４サイクルでデコードしたＩ１命令をＴ５サイクルで実行することができるため、１サイクルアイドル期間を削減できる。したがって、リピートブロックの命令数が“１”の場合でも、命令数が“２”の場合と同様、命令フェッチ抑止及び解除機能により正常動作可能となり、パイプラインキャンセル機能は不要となる。上記した例に限らず、いずれの場合においても、正しく動作保証できるように、命令フェッチ抑止及び解除機能やパイプラインキャンセル機能を備えれば良い。
【０１７０】
実施の形態１では、共にリピート設定命令の命令デコード段階で命令のフェッチ抑止制御を行っているが、命令フェッチ完了直後に取り込まれた命令のプリデコードを行い実施の形態１で行っていたリピート命令の命令フェッチ抑止制御をより早い段階で行うようにしてもよい。命令デコードステージまでのパイプライン段数が深く、命令キューのエントリ数が多くなると、リピート命令のフェッチ完了後、リピート命令の実行がすぐに行えない場合もあるが、命令フェッチ完了直後にリピート処理のための命令フェッチ抑止制御を行うことにより、パイプラインキャンセル処理を必要とするリピートブロック数を削減することができるため、さらなる性能向上を実現できる。また、命令フェッチ抑止及び解除に関する制御は行わず、単に動作保証できない場合にパイプラインキャンセル機能を実行するハードウェア構成の場合は、命令の実行段階でリピートブロックのサイズに関する判定を行ってもかまわない。このように、どの段階でリピート命令に関する処理内容の判定を行ってもかまわない。
【０１７１】
＜実施の形態２＞
上述の実施の形態１では、リピートブロックの命令数の判定結果のみで、リピート命令の処理方法を決定している。上述の実施の形態１のように、命令キューのエントリ数も少なく比較的パイプライン段数が浅い場合には、制御が単純であり制御の複雑さを含む開発コストと製品コスト等の効果のトレードオフのバランスがよい。
【０１７２】
しかし、パイプライン段数が多い場合や、命令キューのエントリ数が多い場合は、命令デコード時までにパイプライン処理を行う最大命令数に対応して、リピートブロックの命令数の判定結果のみでリピート命令の処理方法を決定すると、性能的にオーバーヘッドが大きくなる場合がある。このような場合は、リピートブロックの命令数の判定結果のみではなく、命令キューに取り込まれている命令数、すなわち、命令フェッチ段階後、命令デコード段階前のデコード待機状態の命令数の判定も行い、ダイナミックにリピート命令の処理方法を決定すればよい。
【０１７３】
この場合、制御方法が異なる実施の形態２の構成を図を用いて簡単に説明する。パイプライン構成や命令キューのエントリ数等は異なるが、全体的な制御は前述の実施の形態１と同様な構成を想定しており、詳細な説明は省略し、ポイントとなる点のみを簡単に説明する。
【０１７４】
図２４はパイプライン処理を模式的に示す説明図である。最大１０段のパイプライン処理を行う例を示している。命令フェッチ１（ＩＦ１）ステージ８０１は命令フェッチ要求を出力するステージであり、命令フェッチ２(ＩＦ２)ステージ８０２は命令フェッチに関するメモリアクセスを行うステージであり、命令フェッチ３(ＩＦ３)ステージ８０３は命令フェッチ完了待ち、及び、完了時にフェッチデータの命令キューへの転送を行うステージである。これらのステージ８０１〜８０３は８０１〜８０３の順にパイプライン処理される。
【０１７５】
命令デコード１（Ｄ１）ステージ８０４は命令コードの前段デコードを行うステージであり、命令デコード２（Ｄ２）ステージ８０５は命令コードの後段デコード、及び、レジスタファイルからのオペランドデータ読み出しを行うステージであり、命令実行１ステージ８０６は１サイクルで演算実行を終了する命令の演算実行、及び、ロード／ストア／分岐命令等のアドレス計算等命令の実行を行うステージである。これらのステージ８０４〜８０６は８０４〜８０６の順にパイプライン処理される。
【０１７６】
また、メモリアクセス１（Ｍ１）ステージ８０７はデータアクセス要求を出力するステージであり、メモリアクセス２（Ｍ２）ステージ８０８はデータアクセスに関するメモリアクセスを行うステージであり、メモリアクセス３（Ｍ３）ステージ８０９はデータアクセス完了待ち、及び、データアクセス完了時にロードデータを転送するステージであり、ライトステージ８１０はロードデータをレジスタファイルに書き込むライト（ＷＭ）ステージである。これらのステージ８０７〜８１０は、命令実行１ステージ８０６に続いて、８０７〜８１０の順にパイプライン処理される。
【０１７７】
ライト１（Ｗ１）ステージ８１１は１サイクルで演算実行を終了する命令の演算結果をレジスタに書き込むステージである。このライト１ステージ８１１は命令実行１ステージ８０６に続いてパイプライン処理される。
【０１７８】
命令実行２（Ｅ２）ステージ８１２は積和演算命令等演算実行に２サイクルを要する命令の後段実行を行うステージであり、ライト２（Ｗ２）ステージ８１３はＥ２ステージ８１２での演算結果をレジスタに書き込むステージである。これらのステージ８１２，８１３は、命令実行１ステージ８０６に続いて、８１２，８１３の順にパイプライン処理される。
【０１７９】
図２５は本発明の実施の形態２であるデータ処理装置の制御部のうち、リピート制御の説明に必要な部分を示したブロック図である。なお、概略構成は図１７で示した実施の形態１と同様の構成を想定している。
【０１８０】
挿図に示すように、ＭＰＵコア部８５１は内部に制御部８５３を有しており、外部の命令フェッチ部８５２を介して命令を受ける。制御部８５３、内部に命令フェッチ制御部８５４、Ｄ１ステージ制御部８５６、Ｄ２ステージ制御部８５８、Ｅ１ステージ制御部８６０、命令キュー８５５、第１命令デコード部８５７、第２命令デコード部８５９、及び制御信号生成部８６１を有している。
【０１８１】
リピート時パイプライン制御手段の一部としても機能する命令フェッチ制御部８５４はＩＦ１ステージ８０１〜ＩＦ３ステージ８０３のステージ制御を含む命令フェッチの制御を行い、実施の形態１のＩＦステージ制御部６５１と同等の機能を有するとともに、さらに後述する機能を有する。
【０１８２】
命令キュー８５５は８エントリの命令キューを含む命令キューであり、Ｄ１ステージ制御部８５６はＤ１ステージ８０４の制御を行い、第１命令デコード部８５７はＤ１ステージ８０４で命令の前段デコードを行い、Ｄ２ステージ制御部８５８はＤ２ステージ８０５の制御を行い、第２命令デコード部８５９はＤ２ステージ８０５で命令の後段デコードを行い、Ｅ１ステージ制御部８６０はＥ１ステージ８０６での命令実行制御を行い、制御信号生成部８６１はＥ１ステージ８０６での実行制御信号の生成等を行う。
【０１８３】
第１命令デコード部８５７は、命令レジスタ８７１、リピート処理判定部８７２，デコーダ８７３及び制御信号生成部８７４を内部に有する。
【０１８４】
命令レジスタ８７１は第１命令デコード部でデコードする命令を保持するレジスタであり、リピート設定命令用判定部として機能するリピート処理判定部８７２はリピート命令の処理方法を判定し、デコーダ８７３は命令をデコードする。
【０１８５】
リピート時パイプライン制御手段の一部として機能する制御信号生成部８７４は主として命令フェッチ抑止情報８８４やＤ２ステージでの制御に使用する制御信号)やパイプラインの後段で必要となる情報（命令フェッチ抑止解除信号８８３、ジャンプ要求信号８８５に関する情報を含む）を生成する。実際は非常に複雑なブロック構成となるが、図２５では説明容易化を考慮して単純化して示している。
【０１８６】
以下、前述の実施の形態１と異なる点に着目し、実施の形態２の相違点のみ簡単に説明する。この例では、命令キュー８５５が８エントリ存在するため、リピート命令デコード開始時には最大後続の７命令が命令キュー８５５に取り込まれている場合があり得る。しかし、パイプラインで処理される前後の命令、及び、命令の格納位置等に依存し命令キューにどの程度命令がたまっているかは大きく異なる。常に、最大の場合を想定して上述の実施の形態１と同様の制御を行うと、リピートブロックの命令数が７命令以下の場合には常に実行ステージでジャンプ処理を実行しないといけなくなる。また、パイプラインが深いので分岐によるサイクル数のペナルティも大きくなる。通常、そこまで命令キューが詰まることは少ない。
【０１８７】
実施の形態２では、命令デコード開始時にデコード対象の命令の何命令後の命令のフェッチが受け付けられているか（すなわち、デコード実行前状態（デコード待ち状態もしくは命令フェッチ完了待ち状態とを含む）であるか）を示すフェッチ情報８８２が、命令フェッチ制御部８５４から所定の信号線を介して第１命令デコード部８５７内のリピート処理判定部８７２に出力される。なお、デコード実行前状態とはリピート処理判定部８７２による判定動作実行前にも該当する。
【０１８８】
リピート処理判定部８７２ではリピート命令処理時に、リピート命令で指定されるリピートブロックのサイズと、フェッチ情報８８２に基づき命令フェッチ処理を開始している後続の命令数を判定し、リピート命令の処理方法を決定する。
【０１８９】
すなわち、前述した実施の形態１のデータ処理装置と同様、そのサイクルで出力しようとしている命令フェッチ要求は抑止可能であり、リピートブロックの最終命令の命令フェッチ要求が受け付けられていなければ、パイプライン処理をキャンセルする必要はない。そこで、リピートブロックの最終命令（所定の制御基準命令）の命令フェッチ要求が既に受け付けられおりデコード実行前状態である場合には、リピート設定命令の実行によるリピート関連の設定後、後述するジャンプ処理が行われ、そうでない場合は、活性状態の命令フェッチ抑止情報８８４を命令フェッチ制御部８５４に送る。
【０１９０】
このように、実施の形態２のデータ処理装置は、デコード実行前状態の命令数に基づく所定の条件に成立時に、デコード実行前状態の命令を有効活用し、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【０１９１】
命令フェッチ抑止情報８８４には命令フェッチを一時停止するまでにフェッチ可能な命令数の情報も含まれる。したがって、命令フェッチ制御部８５４は、命令フェッチ抑止情報８８４に基づくことにより、リピートブロックの最終命令の１つ前の命令までの命令フェッチの継続は許可することができる。このように制御することにより、命令プリフェッチの停止期間を最小限に抑え、性能低下を低減している。
【０１９２】
したがって、命令フェッチ制御部８５４は命令フェッチ抑止情報８８４に基づき、指定された命令数の命令フェッチ後は、活性状態の命令フェッチ抑止解除信号８８３を受信するまで、命令のフェッチ要求の出力を抑止する。もちろん、活性状態の命令フェッチ抑止情報８８４を受けた時点で、リピートブロックの最終命令の１つ前の命令までフェッチが終わっている場合には、すぐに命令フェッチ要求の出力を抑止する。
【０１９３】
このように、実施の形態２のデータ処理装置は、所定の制御基準命令となるリピートブロックの最終命令がデコード実行前状態でない場合、当該最終命令の直前の命令の命令フェッチ部８５２によるフェッチ動作完了後に、命令フェッチ抑止制御を命令フェッチ部８５２に対して行うことにより、デコード実行前状態の命令を有効に活用しながら、正常なリピート動作を実行することができる。
【０１９４】
Ｅ１ステージ８０６でリピート関連の設定が完了する。正しい命令フェッチシーケンスの制御が可能なタイミングにおいて、活性状態の命令フェッチ抑止解除信号８８３が所定の信号線を介して命令フェッチ部８５４に送られる。なお、命令フェッチ抑止解除信号８８３は第２命令デコード部８５９によるリピート命令のデコード終了後、当該リピート命令の実行時のタイミングで制御信号生成部８６１から出力される。この制御信号生成部８６１はリピート時パイプライン制御手段の一部としても機能する。
【０１９５】
その結果、命令フェッチ制御部８５４は、活性状態の命令フェッチ抑止解除信号８８３に応答して命令のフェッチを再開する。一方、活性状態の命令フェッチ抑止情報８８４を受けたものの、まだフェッチ抑止状態に入っていない時点において、活性状態の命令フェッチ抑止解除信号８８３を受けた場合、当該命令フェッチ抑止情報８８４は無効化され、フェッチは抑止されることなく継続される。
【０１９６】
一方、上述したジャンプ処理は以下のように行われる。第２命令デコード部８５９によりリピート命令のデコード終了後、リピート命令の実行時のタイミングで制御信号生成部８６１からジャンプ要求信号８８５がＥ１ステージ制御部８６０に出力される。
【０１９７】
すると、リピート時パイプライン制御手段の一部としても機能するＥ１ステージ制御部８６０からジャンプ信号８８６が命令フェッチ制御部８５４、Ｄ１ステージ制御部８５６、Ｄ２ステージ制御部８５８に出力されることにより、ＩＦ１ステージ８０１〜ＩＦ３ステージ８０３、Ｄ１ステージ８０４及びＤ２ステージ８０５のパイプライン処理内容がキャンセルされる。
【０１９８】
このように、実施の形態２のデータ処理装置は、ジャンプ信号８８６に基づくパイプラインキャンセル機能を有することにより、所定の制御基準命令となるリピートブロックの最終命令が既にデコード実行前状態である場合であっても、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【０１９９】
また、ジャンプ処理を命令フェッチ抑止情報８８４のタイミングで出力させることも考えられる。すなわち、制御信号生成部８７４から命令フェッチ抑止情報８８４と共に命令フェッチ制御部８５４のみを初期化する（Ｄ１ステージ制御部８５６，Ｄ２ステージ制御部８５８は初期化しない）命令フェッチキャンセル信号に相当する信号を出力させ、命令フェッチに関するパイプラインキャンセル機能の効果を発揮させた上、命令フェッチ制御部８５４により、命令フェッチに関するリピートブロックの最終命令の１つ前の命令までの命令フェッチを改めて行った後、命令フェッチ抑止状態に移行するように制御することにより、オーバーヘッドを最小限に抑えることができる。
【０２００】
このように、実施の形態２のデータ処理装置では、パイプラインキャンセル処理を実行した後、所定の制御基準命令であるリピートブロックの最終命令の直前の命令の命令フェッチ部８５２によるフェッチ要求受け付け後に、命令フェッチ制御部８５４によって命令フェッチ抑止制御を行うことにより、オーバーヘッドを最小限に抑えながら正常なリピート動作を実行することができる。
【０２０１】
この実施の形態２では、リピートブロックの最終命令の１命令前の命令まで、フェッチを継続できるようにしているが、制御を簡単にするために実施の形態１と同様、単に、活性状態の命令フェッチ抑止情報８８４を受けた時点で命令フェッチを停止するような制御を行ってもよい。ただし、処理サイクル数のオーバーヘッドの削減効果はやや落ちる場合がある。
【０２０２】
このような構成をとった場合も、実施の形態１と同じ効果を得ることができる。また、実施の形態２は、パイプライン処理の命令フェッチの状態も絡めてリピート命令の処置方法を判断することにより、さらに処理サイクル数のオーバーヘッドを削減することが可能となるという実施の形態１以上の効果を奏する。
【０２０３】
この場合、パイプライン段数が多く、命令キューのサイズも大きいため、実施の形態１で説明したように命令フェッチ後命令キューに書き込む段階でプリデコードを行い、リピート命令の処理方法を決定し、早期に命令のフェッチ制御を行うようにすれば、更にパイプライン処理の乱れを抑えることができる。
【０２０４】
実施の形態２も、実施の形態１と同様、あくまでも一つの構成例を示したものであり、本発明の適用範囲を限定するものではない。基本的に、ハードウェアリピート機能を備えた、パイプライン処理を行うデータ処理装置であれば、どのようなものに適用しても同様の効果がある。図２５で示した実施の形態２の構成に限定されるものではない。実施の形態１と同様、異なるアーキテクチャやハードウェア実装手法を採用した場合にも、適用可能である。
【０２０５】
実施の形態２では、既にリピートブロックの最終命令の命令フェッチが受け付けられている場合には、一律リピート関連の設定完了後ジャンプを行うような制御を行っているが、この場合、命令フェッチ制御部８５４にリピートブロックの先頭命令からリピートブロックの最終命令の１命令前まで命令フェッチを再実行し、その後命令フェッチの抑止解除がまだ行われていなければ命令フェッチを一時停止するように制御してもよい。そうすれば、さらにパイプライン処理の乱れを低減できる。ただし、デコード中の命令の次命令のアドレスを管理する機能、及び、そのアドレスへ命令フェッチ段階でジャンプする機能が追加となり、制御も複雑になる。また、フェッチ済みの命令の一部（リピートブロックの最終命令以降の命令）のみを破棄する機能が有れば、さらに無駄な命令フェッチの再実行を削減できる。
【図面の簡単な説明】
【０２０６】
【図１】汎用レジスタを示す説明図である。
【図２】アキュムレータの構成を示す説明図である。
【図３】制御レジスタを示す説明図である。
【図４】制御レジスタＣＲ０に格納されるＰＳＷの構成を示す説明図である。
【図５】本データ処理装置の命令フォーマットを示す説明図である。
【図６】ＦＭビットのフォーマット及び実行順序指定の詳細を示す説明図である。
【図７】典型的な命令のビット割り付けの例（その１）を示す説明図である。
【図８】典型的な命令のビット割り付けの例（その２）を示す説明図である。
【図９】典型的な命令のビット割り付けの例（その３）を示す説明図である。
【図１０】典型的な命令のビット割り付けの例（その４）を示す説明図である。
【図１１】本実施の形態のデータ処理装置の機能ブロック構成を示すブロック図である。
【図１２】第１演算部の詳細ブロック構成を示すブロック図である。
【図１３】ＰＣ部の内部構成の詳細を示すブロック図である。
【図１４】パイプライン処理を示す説明図である。
【図１５】リピート命令（その１）のビット割り付けを示す説明図である。
【図１６】リピート命令（その２）のビット割り付けを示す説明図である。
【図１７】本発明の実施の形態１であるデータ処理装置の制御部のうち、リピート制御の説明に必要な部分を示したブロック図である。
【図１８】リピートブロックの命令数が３命令の場合のプログラム例を示す説明図である。
【図１９】本実施の形態１のデータ処理装置が図１８で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。
【図２０】リピートブロックの命令数が２命令の場合のプログラム例を示す説明図である。
【図２１】本実施の形態１のデータ処理装置が図２０で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。
【図２２】リピートブロックの命令数が１命令の場合のプログラム例を示す説明図である。
【図２３】本実施の形態１のデータ処理装置が図２２で示したプログラムを実行する場合のリピート処理中のパイプライン処理を示すタイミング図である。
【図２４】パイプライン処理を模式的に示す説明図である。
【図２５】本発明の実施の形態２であるデータ処理装置の制御部のうち、リピート制御の説明に必要な部分を示したブロック図である。
【符号の説明】
【０２０７】
２０１  ＭＰＵコア部、２０２  命令フェッチ部、２１１  制御部、２１２，８５５  命令キュー、２１３  命令デコード部、２１４  第１デコーダ、２２４  ＰＣ部、３２３  ＰＳＷ部、６５１  ＩＦステージ制御部、６５２  命令フェッチ要求生成部、６５３  リピート制御部、６５４  ＴＲＰビット、６６１  Ｄステージ制御部、６６２，８７１  命令レジスタ、６６３，８７３  デコーダ、６６４  ｄｉｓｐ判定部、６６５，６７４，８６１，８７４，  制御信号生成部、６７１  Ｅステージ制御部、６７２  ジャンプ制御部、６７３  Ｅステージ制御信号ラッチ、６７５  ＲＰビット、６８１  命令フェッチ抑止信号、６８２  命令フェッチ抑止解除信号、６８４  ジャンプ信号、８５４  命令フェッチ制御部、８５６  Ｄ１ステージ制御部、８５８  Ｄ２ステージ制御部、８６０  Ｅ１ステージ制御部、８７２  リピート処理判定部。
【図１】
2006031329.tif 000003
【図２】
2006031329.tif 000004
【図３】
2006031329.tif 000005
【図４】
2006031329.tif 000006
【図５】
2006031329.tif 000007
【図６】
2006031329.tif 000008
【図７】
2006031329.tif 000009
【図８】
2006031329.tif 000010
【図９】
2006031329.tif 000011
【図１０】
2006031329.tif 000012
【図１１】
2006031329.tif 000013
【図１２】
2006031329.tif 000014
【図１３】
2006031329.tif 000015
【図１４】
2006031329.tif 000016
【図１５】
2006031329.tif 000017
【図１６】
2006031329.tif 000018
【図１７】
2006031329.tif 000019
【図１８】
2006031329.tif 000020
【図１９】
2006031329.tif 000021
【図２０】
2006031329.tif 000022
【図２１】
2006031329.tif 000023
【図２２】
2006031329.tif 000024
【図２３】
2006031329.tif 000025
【図２４】
2006031329.tif 000026
【図２５】
2006031329.tif 000027