(57)【要約】【課題】  パイプライン処理の停止を低減するとともに、ループ処理が実施されている期間のアクセス効率を向上する。【解決手段】  情報処理装置は、命令を取得するフェッチ部と、命令を解読するデコード部と、フェッチ部から出力される命令を順次記憶する書き込み動作と、ループ処理の範囲に対応する命令を繰り返し出力する読み出し動作とを切り替えて実施する命令バッファ部と、書き込み動作が実施されているとき、フェッチ部から出力される命令をデコード部に出力し、読み出し動作が実施されているとき、命令バッファ部から出力される命令をデコード部に出力する選択部とを有している。【選択図】  図１
2012221086.tif 000002
【特許請求の範囲】
【請求項１】
命令を取得するフェッチ部と、
前記命令を解読するデコード部と、
前記フェッチ部から出力される前記命令を順次記憶する書き込み動作と、ループ処理の範囲に対応する前記命令を繰り返し出力する読み出し動作とを切り替えて実施する命令バッファ部と、
前記書き込み動作が実施されているとき、前記フェッチ部から出力される前記命令を前記デコード部に出力し、前記読み出し動作が実施されているとき、前記命令バッファ部から出力される前記命令を前記デコード部に出力する選択部と
を備えていることを特徴とする情報処理装置。
【請求項２】
前記デコード部は、前記フェッチ部から前記選択部を介して受けた前記命令がループ処理の分岐先を含む分岐命令のとき、前記分岐命令を検出したことを前記命令バッファに通知すること
を特徴とする請求項１記載の情報処理装置。
【請求項３】
前記命令バッファ部は、
ループ処理の始点および終点を示す始点ポインタおよび終点ポインタの組みを保持するレジスタ部を含み、
前記デコード部が前記分岐命令を検出したとき、前記書き込み動作から前記読み出し動作に切り替え可能か判定し、
切り替え可能と判定したとき、前記始点ポインタおよび前記終点ポインタの組みを前記レジスタ部に保持するとともに、前記始点ポインタおよび前記終点ポインタ間の前記命令を繰り返し出力する前記読み出し動作を実施すること
を特徴とする請求項２記載の情報処理装置。
【請求項４】
前記レジスタ部は、前記始点ポインタおよび前記終点ポインタの組みを複数保持可能に形成され、
前記命令バッファ部は、
多重ループの前記ループ処理が実施されるとき、前記各ループ処理の前記始点ポインタおよび前記終点ポインタの組みを前記レジスタ部に順次保持すること
を特徴とする請求項３記載の情報処理装置。
【請求項５】
前記デコード部により解読された前記命令を実行し、前記ループ処理が実施されているとき、前記ループ処理が終了したか否かを判定し、判定結果に応じて、前記ループ処理が終了したことを示すループ終了通知を前記命令バッファ部に出力する実行部を備え、
前記命令バッファ部は、
多重ループの前記読み出し動作では、複数の前記終点ポインタのいずれかが示す終点位置から前記命令を出力した後、前記終点位置を示す前記終点ポインタに対応する前記始点ポインタと前記終点位置との間の前記命令を、前記ループ終了通知を受けるまで繰り返し出力すること
を特徴とする請求項４記載の情報処理装置。
【請求項６】
前記デコード部により解読された前記命令を実行し、前記ループ処理が実施されているとき、前記ループ処理が終了したか否かを判定し、判定結果に応じて、前記ループ処理が終了したことを示すループ終了通知を前記命令バッファ部に出力する実行部を備えていること
を特徴とする請求項１記載の情報処理装置。
【請求項７】
前記命令バッファ部は、前記ループ終了通知に応答して、前記読み出し動作から前記書き込み動作に切り替わるとともに、前記読み出し動作の終了を前記選択部に通知し、
前記選択部は、前記読み出し動作の終了を示す通知に応答して、前記フェッチ部から出力される前記命令を前記デコード部に出力すること
を特徴とする請求項６記載の情報処理装置。
【請求項８】
前記実行部は、前記ループ終了通知を前記命令バッファ部および前記デコード部に出力し、
前記デコード部は、前記ループ終了通知を受けたとき、保持している前記命令を破棄すること
を特徴とする請求項６記載の情報処理装置。
【請求項９】
前記デコード部により解読された前記命令を実行する実行部を備え、
前記命令バッファ部は、
前記ループ処理の始点および終点を示す始点ポインタおよび終点ポインタの組みを保持するレジスタ部を含み、
前記終点ポインタが示す前記命令を出力するとき、ループ処理の終点であることを示すループ終点通知を前記デコード部に出力し、
前記デコード部は、
前記ループ処理の終点に対応する前記命令と前記ループ終点通知とを前記実行部に転送すること
を特徴とする請求項１記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置に関する。
【背景技術】
【０００２】
プロセッサ等の情報処理装置は、命令メモリから命令を取得するフェッチ部、命令をデコードするデコード部および命令を実行する実行部を有している。例えば、情報処理装置は、パイプライン処理を実施することにより、効率のよい動作を実現する。なお、パイプライン処理では、分岐命令が実行されたとき、分岐命令の次に実行される命令が確定するまで、フェッチ部は正しい命令を取得できない。このため、分岐命令が実行されたとき、パイプライン処理は停止する。この結果、パイプライン処理の効率は低下する。パイプライン処理の効率低下は、１回のループ処理で実施される命令に要するサイクル数が少ないほど顕著になる。
【０００３】
パイプライン処理の停止を低減するための技術として、例えば、分岐予測が知られている。また、パイプライン処理の停止を低減するために、分岐先の情報（例えば、分岐先の命令）を保持する記憶部を有するプロセッサが提案されている（例えば、特許文献１、特許文献２参照）。この種のプロセッサは、例えば、所定のループ処理が実施される前に、登録命令を用いて分岐先の情報を記憶部に保持する。記憶部に記憶された分岐先の情報は、例えば、所定のループ処理を示す命令がデコードされたとき、参照される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平１１−７３３１６号公報
【特許文献２】特開平８−３１４７１９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
フェッチ部は、例えば、命令を取得する際、命令メモリにバスを介してアクセスする。このため、ループ処理が実施されている期間では、バスを使用するアクセスは制限される。例えば、フェッチ部以外のモジュールは、ループ処理が実施されている期間、バスを使用したアクセスを効率よく実施できない。この結果、情報処理装置の処理効率は低下する。すなわち、情報処理装置の性能は、低下する。なお、ループ処理中のバスの使用効率は、パイプライン処理の停止を分岐予測等により低減した構成でも、改善されない。
【０００６】
本発明の目的は、パイプライン処理の停止を低減するとともに、ループ処理が実施されている期間のアクセス効率を向上することである。
【課題を解決するための手段】
【０００７】
本発明の一形態では、情報処理装置は、命令を取得するフェッチ部と、命令を解読するデコード部と、フェッチ部から出力される命令を順次記憶する書き込み動作と、ループ処理の範囲に対応する命令を繰り返し出力する読み出し動作とを切り替えて実施する命令バッファ部と、書き込み動作が実施されているとき、フェッチ部から出力される命令をデコード部に出力し、読み出し動作が実施されているとき、命令バッファ部から出力される命令をデコード部に出力する選択部とを有している。
【発明の効果】
【０００８】
パイプライン処理の停止を低減するとともに、ループ処理が実施されている期間のアクセス効率を向上できる。
【図面の簡単な説明】
【０００９】
【図１】一実施形態における情報処理装置の例を示している。
【図２】別の実施形態における情報処理装置の一例を示している。
【図３】図２に示した命令バッファの一例を示している。
【図４】図３に示した制御部の論理構成の一例を示している。
【図５】図２に示したデコード部のフラッシュ制御の一例を示している。
【図６】図２に示した情報処理装置の動作の一例を示している。
【図７】図２に示した情報処理装置のループ処理開始時の動作の一例を示している。
【図８】図２に示した情報処理装置のループ処理終了時の動作の一例を示している。
【図９】図２に示した情報処理装置のループ処理開始時の動作の別の例を示している。
【図１０】別の実施形態における情報処理装置の一例を示している。
【図１１】図１０に示した命令バッファの一例を示している。
【図１２】図１１に示したループ数保持部を制御するための論理構成の一例を示している。
【図１３】図１１に示した始点ポインタ部および終点ポインタ部を制御するための論理構成の一例を示している。
【図１４】図１１に示した読み出しポインタ部を制御するための論理構成の一例を示している。
【図１５】図１０に示した情報処理装置の動作の一例を示している。
【図１６】図１５に示したループ２の処理開始時の動作の一例を示している。
【図１７】図１５に示したループ１の処理時の動作の一例を示している。
【図１８】図１５に示したループ２の処理時の動作の一例を示している。
【図１９】図１５に示したループ２の処理終了時の動作の一例を示している。
【図２０】図１５に示したループ２の処理開始時の動作の別の例を示している。
【発明を実施するための形態】
【００１０】
以下、実施形態を図面を用いて説明する。
【００１１】
図１は、一実施形態における情報処理装置１０の例を示している。例えば、情報処理装置１０は、パイプライン処理を実施するプロセッサである。情報処理装置１０は、例えば、フェッチ部２０、命令バッファ３０、選択部４０およびデコード部５０を有し、デコード部５０により解読された命令ＣＭＤを実行する。なお、図１では、命令ＣＭＤｆは、フェッチ部２０から出力される命令ＣＭＤを示し、命令ＣＭＤｂは、命令バッファ３０から出力される命令ＣＭＤを示している。また、命令ＣＭＤｍは、選択部４０から出力される命令ＣＭＤを示している。
【００１２】
フェッチ部２０は、例えば、命令メモリに保持されている命令ＣＭＤをフェッチ（取得）する。例えば、フェッチ部２０は、命令ＣＭＤをフェッチする際、命令メモリにバスを介してアクセスする。そして、フェッチ部２０は、フェッチした命令ＣＭＤを選択部４０に出力する。
【００１３】
命令バッファ３０は、例えば、リングバッファを有し、リングバッファに命令を書き込むための書き込み動作とリングバッファから命令を読み出すための読み出し動作とを切り替えて実施する。例えば、書き込み動作では、命令バッファ３０は、フェッチ部２０から選択部４０に出力される命令ＣＭＤｆをリングバッファに順次記憶する。また、例えば、読み出し動作では、命令バッファ３０は、ループ処理の範囲に対応する命令ＣＭＤｂを選択部４０に繰り返し出力する。
【００１４】
選択部４０は、フェッチ部２０および命令バッファ３０から命令ＣＭＤ（ＣＭＤｆ、ＣＭＤｂ）を受ける。そして、選択部４０は、例えば、命令バッファ３０が書き込み動作を実施しているとき、フェッチ部２０から出力される命令ＣＭＤｆをデコード部５０に出力する。また、選択部４０は、例えば、命令バッファ３０が読み出し動作を実施しているとき、命令バッファ３０から出力される命令ＣＭＤｂをデコード部５０に出力する。
【００１５】
このように、選択部４０は、デコード部５０に出力する命令ＣＭＤｍを、命令ＣＭＤｆおよび命令ＣＭＤｂから選択する。例えば、選択部４０が出力する命令ＣＭＤｍの選択は、命令バッファ３０により制御される。なお、選択部４０が出力する命令ＣＭＤｍの選択は、デコード部５０により制御されてもよい。
【００１６】
デコード部５０は、選択部４０から受けた命令ＣＭＤｍの内容を解釈する。すなわち、デコード部５０は、選択部４０から受けた命令ＣＭＤｍを解読する。例えば、デコード部５０は、ループ処理のない通常の動作では、フェッチ部２０から出力される命令ＣＭＤｆを、選択部４０を介して受ける。この際、命令バッファ３０は、フェッチ部２０から選択部４０に出力される命令ＣＭＤｆをリングバッファに順次記憶する。
【００１７】
そして、デコード部５０は、例えば、ループ処理が発生したとき、命令バッファ３０から出力される命令ＣＭＤｂを、選択部４０を介して受ける。例えば、１回目のループ処理では、デコード部５０は、フェッチ部２０から選択部４０を介して命令ＣＭＤを受ける。そして、２回目以降のループ処理では、デコード部５０は、命令バッファ３０から選択部４０を介して命令ＣＭＤを受ける。
【００１８】
例えば、情報処理装置１０は、デコード部５０が１回目のループ処理の分岐命令を解読したとき、ループ処理の先頭の命令ＣＭＤを命令バッファ３０からデコード部５０に選択部４０を介して転送する。すなわち、命令バッファ３０は、デコード部５０が１回目のループ処理の分岐命令を解読したとき、書き込み動作から読み出し動作に切り替わる。これにより、この実施形態では、パイプライン処理の停止を低減できる。ここで、ループ処理の分岐命令とは、例えば、アドレス値の小さい方向に向かう分岐命令である。
【００１９】
また、フェッチ部２０は、命令バッファ３０が読み出し動作を実施している期間、命令メモリに保持されている命令ＣＭＤをフェッチしなくてもよい。例えば、フェッチ部２０のフェッチ動作を停止するか否かの選択は、命令バッファ３０により制御される。なお、フェッチ部２０のフェッチ動作を停止するか否かの選択は、デコード部５０により制御されてもよい。
【００２０】
フェッチ部２０のフェッチ動作が停止しているとき、情報処理装置１０は、バスを使用したアクセスを効率よく実施できる。したがって、情報処理装置１０は、命令バッファ３０が読み出し動作を実施している期間、バスを使用したアクセスを効率よく実施できる。これにより、この実施形態では、ループ処理が実施されている期間のアクセス効率を向上できる。
【００２１】
なお、命令バッファ３０は、ループ処理の範囲の命令ＣＭＤを記憶していないとき、読み出し動作に切り替わらない。したがって、命令バッファ３０がループ処理の範囲の命令ＣＭＤを記憶していないとき、デコード部５０は、２回目以降のループ処理でも、フェッチ部２０から選択部４０を介して命令ＣＭＤを受ける。
【００２２】
以上、この実施形態では、情報処理装置１０は、フェッチ部２０からの命令ＣＭＤを順次記憶する書き込み動作とループ処理の範囲の命令ＣＭＤを選択部４０を介してデコード部５０に繰り返し出力する読み出し動作とを切り替えて実施する命令バッファ３０を有している。これにより、この実施形態は、パイプライン処理の停止を低減するとともに、ループ処理が実施されている期間のアクセス効率を向上できる。
【００２３】
図２は、別の実施形態における情報処理装置１２の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。情報処理装置１２では、ループ処理の終了を判定する実行部６０が図１に示した情報処理装置１０に追加されている。また、情報処理装置１２は、図１に示した命令バッファ３０およびデコード部５０の代わりに、命令バッファ３２およびデコード部５２を有している。したがって、図２では、例えば、命令ＣＭＤｂは、命令バッファ３２から出力される命令ＣＭＤを示している。情報処理装置１２のその他の構成は、上述した実施形態と同じである。例えば、情報処理装置１２は、パイプライン処理を実施するプロセッサである。
【００２４】
情報処理装置１２は、フェッチ部２０、命令バッファ３２、選択部４０、デコード部５２および実行部６０を有している。フェッチ部２０は、例えば、命令メモリにバスを介してアクセスし、命令メモリに保持されている命令ＣＭＤをフェッチする。また、フェッチ部２０は、例えば、ループ処理フラグＬＦＬＧを命令バッファ３２から受ける。
【００２５】
そして、フェッチ部２０は、ループ処理フラグＬＦＬＧが命令バッファ３２の書き込み動作を示しているとき、命令メモリに保持されている命令ＣＭＤをフェッチし、フェッチした命令ＣＭＤを命令バッファ３２および選択部４０に出力する。また、フェッチ部２０は、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示しているとき、フェッチ動作を停止する。
【００２６】
また、フェッチ部２０は、出力した命令ＣＭＤｆが有効であることを示すフェッチ出力イネーブル信号ＦＥＮを命令バッファ３２に出力する。なお、フェッチ部２０は、実行部６０から受けるフラッシュ制御信号ＦＬＳＨがアサートされたとき、フェッチ部２０内に保持している命令ＣＭＤ（フェッチした命令ＣＭＤ）を破棄する。例えば、フラッシュ制御信号ＦＬＳＨは、パイプラインフラッシュを実施するときに、アサートされる。
【００２７】
命令バッファ３２は、例えば、リングバッファとして機能するバッファ部（図３のバッファ部ＢＵＦ）を有している。そして、命令バッファ３２は、バッファ部に命令ＣＭＤを書き込むための書き込み動作とバッファ部から命令ＣＭＤを読み出すための読み出し動作とを切り替えて実施する。例えば、命令バッファ３２は、ループ検出信号ＬＤＥＴおよび分岐先アドレスＢＡＤＲをデコード部５２から受ける。
【００２８】
そして、命令バッファ３２は、例えば、ループ検出信号ＬＤＥＴがアサートされたとき、分岐先アドレスＢＡＤＲ等に基づいて、書き込み動作から読み出し動作に切り替え可能か判定する。なお、ループ検出信号ＬＤＥＴは、１回目のループ処理の分岐命令を検出したことを示す信号である。また、分岐先アドレスＢＡＤＲは、ループ処理の分岐先のアドレスを相対値で示すアドレス情報である。
【００２９】
例えば、命令バッファ３２は、書き込み動作から読み出し動作に切り替え可能と判定したとき、ループ検出応答信号ＬＤＥＴＲをアサートする。すなわち、命令バッファ３２は、書き込み動作から読み出し動作に切り替え可能と判定したとき、読み出し動作に切り替わることを示すループ検出応答信号ＬＤＥＴＲをデコード部５２に出力する。そして、命令バッファ３２は、ループ処理の範囲に対応する命令ＣＭＤｂを選択部４０に繰り返し出力する読み出し動作を実施するとともに、読み出し動作を示すループ処理フラグＬＦＬＧをフェッチ部２０および選択部４０に出力する。
【００３０】
例えば、読み出し動作では、命令バッファ３２は、ループ処理の終点に対応する命令ＣＭＤｂを選択部４０に出力するとき、ループ終点信号ＬＥＮＤをアサートする。すなわち、命令バッファ３２は、ループ処理の終点に対応する命令ＣＭＤｂを選択部４０に出力するとき、出力した命令ＣＭＤｂがループ処理の終点に対応する命令であることを示すループ終点信号ＬＥＮＤをデコード部５２に出力する。これにより、デコード部５２は、ループの終点を簡易に検出できる。
【００３１】
また、命令バッファ３２は、例えば、ループ処理の終了を示すループ終了通知ＬＦＩＮを実行部６０から受けたとき、読み出し動作から書き込み動作に切り替える。そして、命令バッファ３２は、書き込み動作を示すループ処理フラグＬＦＬＧをフェッチ部２０および選択部４０に出力する。例えば、書き込み動作では、命令バッファ３２は、フェッチ部２０から選択部４０に出力される命令ＣＭＤｆをバッファ部に順次記憶する。
【００３２】
ここで、命令バッファ３２は、書き込み動作から読み出し動作に切り替え不可と判定したとき、読み出し動作に切り替わらない。例えば、命令バッファ３２は、分岐先の命令ＣＭＤを記憶していないとき、読み出し動作に切り替わらない。したがって、命令バッファ３２は、書き込み動作から読み出し動作に切り替え不可と判定したとき、ループ検出応答信号ＬＤＥＴＲをアサートしない。
【００３３】
選択部４０は、命令バッファ３２から受けるループ処理フラグＬＦＬＧに基づいて、出力する命令ＣＭＤｍを選択する。例えば、選択部４０は、ループ処理フラグＬＦＬＧが命令バッファ３２の書き込み動作を示しているとき、フェッチ部２０から出力される命令ＣＭＤｆをデコード部５２に出力する。また、選択部４０は、例えば、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示しているとき、命令バッファ３２から出力される命令ＣＭＤｂをデコード部５２に出力する。
【００３４】
デコード部５２は、選択部４０から受けた命令ＣＭＤｍを解読する。そして、デコード部５２は、解読結果を実行部６０に出力する。なお、デコード部５２は、ループ終点信号ＬＥＮＤがアサートされたとき、ループ終点信号ＬＥＮＤに対応する命令ＣＭＤの解読結果と一緒に、ループ終点信号ＬＥＮＤを実行部６０に出力する。また、デコード部５２は、ループ検出応答信号ＬＤＥＴＲがアサートされたとき、ループ検出応答信号ＬＤＥＴＲに対応する命令ＣＭＤの解読結果と一緒に、ループ検出応答信号ＬＤＥＴＲを実行部６０に出力する。
【００３５】
また、デコード部５０は、例えば、１回目のループ処理の分岐命令を解読したとき、ループ検出信号ＬＤＥＴをアサートするとともに、分岐先アドレスＢＡＤＲを命令バッファ３２に出力する。例えば、デコード部５２は、分岐先を示す相対アドレスが負である分岐命令（アドレス値の小さい方向に向かう分岐命令）を検出したとき、ループ処理の終点と判断し、ループ検出信号ＬＤＥＴおよび分岐先アドレスＢＡＤＲを命令バッファ３２に出力する。
【００３６】
このように、デコード部５２は、フェッチ部２０から選択部４０を介して受けた命令ＣＭＤがループ処理の分岐先を含む分岐命令のとき、分岐命令を検出したことを命令バッファ３２に通知する。なお、デコード部５２は、例えば、命令バッファ３２から選択部４０を介して受けた命令ＣＭＤに対しては、ループ処理の分岐命令の検出を実施しなくてもよい。
【００３７】
また、デコード部５２は、実行部６０から受けるフラッシュ制御信号ＦＬＳＨおよびループ終了通知ＬＦＩＮのいずれかがアサートされたとき、デコード部５２内に保持している命令ＣＭＤを破棄する。例えば、ループ終了通知ＬＦＩＮは、ループ処理が終了したとき、アサートされる。
【００３８】
実行部６０は、例えば、ループ処理が終了したか否かを判定する。そして、実行部６０は、例えば、ループ終点信号ＬＥＮＤに対応するループ処理が終了したとき、ループ終了通知ＬＦＩＮをアサートする。また、実行部６０は、デコード部５０により解読された命令ＣＭＤを実行する。例えば、実行部６０は、デコード部５０の解読結果に基づいて、命令ＣＭＤのオペランド等をレジスタから読み出す。そして、実行部６０は、例えば、読み出したオペランド等に基づいて、四則演算や論理演算等を実行する。例えば、実行部６０は、命令ＣＭＤの実行に必要な読み出しデータＲＤＡＴＡや命令ＣＭＤの実行結果に対応する書き込みデータＷＤＡＴＡを、バスを介して転送する。
【００３９】
さらに、実行部６０は、各パイプラインに保持されている命令ＣＭＤ等を破棄するパイプラインフラッシュを実施する必要があるとき、フラッシュ制御信号ＦＬＳＨをアサートする。パイプラインフラッシュの実施条件は、分岐命令の解読結果を実行部６０が受けたときに、ループ終点信号ＬＥＮＤあるいはループ検出応答信号ＬＤＥＴＲがアサートされているか否かで異なる。
【００４０】
例えば、ループ終点信号ＬＥＮＤおよびループ検出応答信号ＬＤＥＴＲのいずれもアサートされていないときでは、パイプラインフラッシュは、分岐が発生する度に実施される。なお、ループ終点信号ＬＥＮＤおよびループ検出応答信号ＬＤＥＴＲのいずれもアサートされていないとき、ループ処理の終了では、パイプラインフラッシュは、実施されない。
【００４１】
また、例えば、ループ終点信号ＬＥＮＤおよびループ検出応答信号ＬＤＥＴＲのいずれかがアサートされているときでは、パイプラインフラッシュは、分岐が発生しても実施されない。そして、ループ終点信号ＬＥＮＤおよびループ検出応答信号ＬＤＥＴＲのいずれかがアサートされているときでは、ループ処理の終了に応じて、パイプラインフラッシュが実施される。
【００４２】
このように、実行部６０は、ループ終点信号ＬＥＮＤおよびループ検出応答信号ＬＤＥＴＲのいずれかがアサートされたときには、ループ処理が終了するまで、フラッシュ制御信号ＦＬＳＨをアサートしない。すなわち、命令バッファ３２から命令ＣＭＤｂが読み出されるループ処理では、ループ処理が終了するまで、フラッシュ制御信号ＦＬＳＨはアサートされない。これにより、この実施形態では、ループ処理の分岐が発生する度にパイプラインフラッシュが実施されることを防止できる。したがって、この実施形態では、パイプライン処理の停止を低減できる。
【００４３】
また、命令バッファ３２から命令ＣＭＤｂが読み出されている期間では、フェッチ部２０のフェッチ動作が停止しているため、実行部６０は、読み出しデータＲＤＡＴＡや書き込みデータＷＤＡＴＡの転送等のバスを使用したアクセスを効率よく実施できる。これにより、この実施形態では、ループ処理が実施されている期間のアクセス効率を向上できる。
【００４４】
図３は、図２に示した命令バッファ３２の一例を示している。命令バッファ３２は、命令ＣＭＤｆを記憶するバッファ部ＢＵＦと、バッファ部ＢＵＦ等を制御する制御部ＢＣＮＴを有している。
【００４５】
バッファ部ＢＵＦは、リングバッファとして機能する。例えば、バッファ部ＢＵＦは、書き込み動作では、書き込みポインタＷＰが示す位置に命令ＣＭＤｆを記憶する。そして、読み出し動作では、バッファ部ＢＵＦは、読み出しポインタＲＰが示す位置の命令ＣＭＤｂを出力する。制御部ＢＣＮＴは、制御信号ＦＥＮ、ＬＦＩＮ、ＢＡＤＲ、ＬＤＥＴを受け、制御信号ＬＦＬＧ、ＬＥＮＤ、ＬＤＥＴＲを出力する。また、制御部ＢＣＮＴは、例えば、書き込みポインタＷＰおよび読み出しポインタＲＰを更新し、バッファ部ＢＵＦの動作を制御する。
【００４６】
図４は、図３に示した制御部ＢＣＮＴの論理構成の一例を示している。なお、図４では、ポインタ等の値が伝達される信号線を太い線で示している。また、図４では、例えば、分岐先アドレスＢＡＤＲは負の値であり、制御信号ＦＥＮ、ＬＦＩＮ、ＬＤＥＴ、ＬＥＮＤ、ＬＤＥＴＲは、正論理である。なお、制御信号ＬＦＬＧ（ループ処理フラグＬＦＬＧ）は、論理値が“１”のとき、命令バッファ３２が読み出し動作であることを示している。また、図中の符号ｓｚは、図３に示したバッファ部ＢＵＦが記憶できる命令数（バッファサイズ）を示している。
【００４７】
制御部ＢＣＮＴは、例えば、書き込みポインタ部ＷＰＮＴ、読み出しポインタ部ＲＰＮＴ、始点ポインタ部ＳＰＮＴ、終点ポインタ部ＥＰＮＴ、フラグ制御部ＬＦＣＮＴ、命令数保持部ＣＮＵＭ、比較器ＩＣＭＰ１、ＭＣＭＰ１、ＭＣＭＰ２、マルチプレクサＭＵＸ１、加算部ＡＤＤ１、アンド回路ＡＮＤ１、ＡＮＤ２、ＡＮＤ３、ＡＮＤ４、オア回路ＯＲ１およびインバータＩＮＶ１を有している。
【００４８】
ポインタ部ＷＰＮＴ、ＲＰＮＴ、ＳＰＮＴ、ＥＰＮＴは、例えば、ループ検出応答信号ＬＤＥＴＲやループ処理フラグＬＦＬＧ等により制御される。したがって、ポインタ部ＷＰＮＴ、ＲＰＮＴ、ＳＰＮＴ、ＥＰＮＴの動作を説明する前に、ループ検出応答信号ＬＤＥＴＲを制御する比較器ＭＣＭＰ１等の動作を説明する。次に、ループ処理フラグＬＦＬＧを制御するフラグ制御部ＬＦＣＮＴ等の動作を説明する。
【００４９】
比較器ＭＣＭＰ１は、命令数保持部ＣＮＵＭの端子ＮＵＭの出力値（以下、命令数保持部ＣＮＵＭの値とも称する）と分岐先アドレスＢＡＤＲの絶対値とを比較する。命令数保持部ＣＮＵＭの値は、バッファ部ＢＵＦに記憶されている命令ＣＭＤの数である。例えば、比較器ＭＣＭＰ１は、分岐先アドレスＢＡＤＲの絶対値が命令数保持部ＣＮＵＭの値より小さいとき、論理値“１”をアンド回路ＡＮＤ２に出力する。すなわち、分岐先の命令ＣＭＤがバッファ部ＢＵＦに記憶されているとき、比較器ＭＣＭＰ１の出力は、論理値“１”である。
【００５０】
なお、分岐先アドレスＢＡＤＲの絶対値が命令数保持部ＣＮＵＭの値以上のとき、比較器ＭＣＭＰ１の出力は、論理値“０”である。すなわち、分岐先の命令ＣＭＤがバッファ部ＢＵＦに記憶されていないとき、比較器ＭＣＭＰ１の出力は、論理値“０”である。
【００５１】
アンド回路ＡＮＤ２は、ループ検出信号ＬＤＥＴと比較器ＭＣＭＰ１の出力値との論理積結果（ループ検出応答信号ＬＤＥＴＲ）を出力する。例えば、アンド回路ＡＮＤ２は、分岐先の命令ＣＭＤがバッファ部ＢＵＦに記憶されているとき、論理値“１”のループ検出信号ＬＤＥＴに応答して、論理値“１”のループ検出応答信号ＬＤＥＴＲを出力する。なお、分岐先の命令ＣＭＤがバッファ部ＢＵＦに記憶されていないとき、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”である。あるいは、ループ検出信号ＬＤＥＴの論理値が“０”のとき、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”である。
【００５２】
フラグ制御部ＬＦＣＮＴは、ループ検出応答信号ＬＤＥＴＲおよびループ終了通知ＬＦＩＮをセット端子ＳＥＴおよびクリア端子ＣＬでそれぞれ受け、ループ処理フラグＬＦＬＧを制御する。例えば、フラグ制御部ＬＦＣＮＴは、論理値“１”のループ検出応答信号ＬＤＥＴＲに応答して、ループ処理フラグＬＦＬＧの論理値を“１”に設定する。そして、フラグ制御部ＬＦＣＮＴは、論理値“１”のループ終了通知ＬＦＩＮに応答して、ループ処理フラグＬＦＬＧの論理値を“０”にクリアする。
【００５３】
インバータＩＮＶ１は、ループ処理フラグＬＦＬＧの反転信号をアンド回路ＡＮＤ１、ＡＮＤ４に出力する。アンド回路ＡＮＤ１は、ループ処理フラグＬＦＬＧの反転信号とフェッチ出力イネーブル信号ＦＥＮとの論理積結果を書き込みポインタ部ＷＰＮＴのカウントイネーブル端子ＣＥＮに出力する。
【００５４】
書き込みポインタ部ＷＰＮＴは、書き込みポインタＷＰを保持する。例えば、書き込みポインタ部ＷＰＮＴは、カウントイネーブル端子ＣＥＮで受けた信号の論理値が“１”の期間、情報処理装置１２の動作クロックに同期して、書き込みポインタＷＰを更新する。すなわち、書き込みポインタ部ＷＰＮＴは、ループ処理フラグＬＦＬＧおよびフェッチ出力イネーブル信号ＦＥＮのそれぞれの論理値が“０”および“１”のとき、書き込みポインタＷＰを更新する。
【００５５】
これにより、書き込みポインタＷＰは、例えば、書き込み動作時に、情報処理装置１２の動作クロックに同期してカウントアップする。なお、読み出し動作では、ループ処理フラグＬＦＬＧの論理値が“１”であるため、書き込みポインタＷＰは、更新されない。書き込みポインタＷＰは、例えば、終点ポインタ部ＥＰＮＴおよび図３に示したバッファ部ＢＵＦに出力される。
【００５６】
加算部ＡＤＤ１は、書き込みポインタＷＰの値に分岐先アドレスＢＡＤＲの値（負の値）を加算し、加算結果を始点ポインタ部ＳＰＮＴの入力端子ＩＮＴおよびマルチプレクサＭＵＸ１に出力する。加算結果（加算部ＡＤＤ１の出力値）は、例えば、ループ検出応答信号ＬＤＥＴＲが“１”のとき、ループ処理の分岐先の命令ＣＭＤが記憶されている位置を示している。
【００５７】
始点ポインタ部ＳＰＮＴは、例えば、ループ処理の始点を示す始点ポインタＳＰを保持する。例えば、始点ポインタ部ＳＰＮＴは、加算部ＡＤＤ１の加算結果およびループ検出応答信号ＬＤＥＴＲを入力端子ＩＮＴおよび初期化制御端子ＩＣＮＴでそれぞれ受ける。そして、始点ポインタ部ＳＰＮＴは、例えば、初期化制御端子ＩＣＮＴで受けたループ検出応答信号ＬＤＥＴＲの論理値が“１”のとき、入力端子ＩＮＴで受けた値（加算部ＡＤＤ１の出力値）を始点ポインタＳＰに設定する。
【００５８】
終点ポインタ部ＥＰＮＴは、例えば、ループ処理の終点を示す終点ポインタＥＰを保持する。例えば、終点ポインタ部ＥＰＮＴは、書き込みポインタＷＰおよびループ検出応答信号ＬＤＥＴＲを入力端子ＩＮＴおよび初期化制御端子ＩＣＮＴでそれぞれ受ける。そして、終点ポインタ部ＥＰＮＴは、例えば、初期化制御端子ＩＣＮＴで受けたループ検出応答信号ＬＤＥＴＲの論理値が“１”のとき、入力端子ＩＮＴで受けた値（書き込みポインタＷＰ）を終点ポインタＥＰに設定する。このように、命令バッファ３２は、始点ポインタＳＰおよび終点ポインタＥＰの組みを、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴに保持する。
【００５９】
マルチプレクサＭＵＸ１は、加算部ＡＤＤ１の出力値（書き込みポインタＷＰの値と分岐先アドレスＢＡＤＲの値との加算結果）、始点ポインタＳＰおよびループ終点信号ＬＥＮＤを受ける。そして、マルチプレクサＭＵＸ１は、ループ終点信号ＬＥＮＤの論理値に応じて、加算部ＡＤＤ１の出力値および始点ポインタＳＰのいずれかを読み出しポインタ部ＲＰＮＴの入力端子ＩＮＴに出力する。
【００６０】
例えば、マルチプレクサＭＵＸ１は、ループ終点信号ＬＥＮＤの論理値が“１”のとき（２回目以降のループ処理）、始点ポインタＳＰを読み出しポインタ部ＲＰＮＴの入力端子ＩＮＴに出力する。また、例えば、マルチプレクサＭＵＸ１は、ループ終点信号ＬＥＮＤの論理値が“０”のとき（１回目のループ処理）、加算部ＡＤＤ１の出力値を読み出しポインタ部ＲＰＮＴの入力端子ＩＮＴに出力する。
【００６１】
オア回路ＯＲ１は、ループ終点信号ＬＥＮＤとループ検出応答信号ＬＤＥＴＲとの論理和結果を読み出しポインタ部ＲＰＮＴの初期化制御端子ＩＣＮＴに出力する。読み出しポインタ部ＲＰＮＴは、読み出しポインタＲＰを保持する。例えば、読み出しポインタ部ＲＰＮＴは、マルチプレクサＭＵＸ１の出力値およびオア回路ＯＲ１の出力値を入力端子ＩＮＴおよび初期化制御端子ＩＣＮＴでそれぞれ受ける。
【００６２】
また、読み出しポインタ部ＲＰＮＴは、ループ処理フラグＬＦＬＧをカウントイネーブル端子ＣＥＮで受ける。例えば、読み出しポインタ部ＲＰＮＴは、初期化制御端子ＩＣＮＴで受けた信号の論理値が“１”のとき、入力端子ＩＮＴで受けた値を読み出しポインタＲＰに設定する。そして、読み出しポインタ部ＲＰＮＴは、例えば、カウントイネーブル端子ＣＥＮで受けたループ処理フラグＬＦＬＧの論理値が“１”の期間、情報処理装置１２の動作クロックに同期して、読み出しポインタＲＰを更新する。これにより、読み出しポインタ部ＲＰＮＴは、読み出し動作時に、始点ポインタＳＰから終点ポインタＥＰまでの値（読み出しポインタＲＰ）を繰り返し出力できる。読み出しポインタＲＰは、例えば、比較器ＩＣＭＰ１および図３に示したバッファ部ＢＵＦに出力される。
【００６３】
比較器ＩＣＭＰ１は、終点ポインタＥＰと読み出しポインタＲＰとを比較する。例えば、比較器ＩＣＭＰ１は、終点ポインタＥＰと読み出しポインタＲＰとが一致したとき、論理値“１”をアンド回路ＡＮＤ３に出力する。また、比較器ＩＣＭＰ１は、終点ポインタＥＰと読み出しポインタＲＰとが一致しないとき、論理値“０”をアンド回路ＡＮＤ３に出力する。
【００６４】
アンド回路ＡＮＤ３は、ループ処理フラグＬＦＬＧと比較器ＩＣＭＰ１の出力値との論理積結果（ループ終点信号ＬＥＮＤ）を出力する。これにより、ループ終点信号ＬＥＮＤの論理値は、例えば、読み出しポインタＲＰの示す命令ＣＭＤが分岐命令のとき、“１”に設定される。なお、例えば、読み出しポインタＲＰの示す命令ＣＭＤが分岐命令でないとき、ループ終点信号ＬＥＮＤの論理値は、“０”である。あるいは、例えば、ループ処理フラグＬＦＬＧの論理値が“０”のとき（書き込み動作時）、ループ終点信号ＬＥＮＤの論理値は、“０”である。
【００６５】
次に、バッファ部ＢＵＦに記憶されている命令ＣＭＤの数の計測について説明する。比較器ＭＣＭＰ２は、命令数保持部ＣＮＵＭの値とバッファサイズ（“ｓｚ”）とを比較する。例えば、比較器ＭＣＭＰ２は、命令数保持部ＣＮＵＭの値がバッファサイズ（“ｓｚ”）より小さいとき、論理値“１”をアンド回路ＡＮＤ４に出力する。したがって、比較器ＭＣＭＰ２の出力は、命令数保持部ＣＮＵＭの値がバッファサイズ（“ｓｚ”）と同じとき、論理値“０”である。
【００６６】
アンド回路ＡＮＤ４は、フェッチ出力イネーブル信号ＦＥＮと比較器ＭＣＭＰ２の出力値とループ処理フラグＬＦＬＧの反転信号との論理積結果を命令数保持部ＣＮＵＭのカウントイネーブル端子ＣＥＮに出力する。命令数保持部ＣＮＵＭは、例えば、カウントイネーブル端子ＣＥＮで受けた信号の論理値が“１”の期間、情報処理装置１２の動作クロックに同期して、端子ＮＵＭの出力値をカウントアップする。
【００６７】
これにより、命令数保持部ＣＮＵＭの値は、例えば、命令ＣＭＤを記憶するバッファ部ＢＵＦの位置（書き込みポインタＷＰ）が一巡するまで、更新される。そして、命令ＣＭＤを記憶するバッファ部ＢＵＦの位置が一巡したとき、命令数保持部ＣＮＵＭの値は、バッファサイズ（“ｓｚ”）に一致する。なお、命令数保持部ＣＮＵＭの値は、カウントイネーブル端子ＣＥＮで受けた信号の論理値が“０”の期間では、更新されない。したがって、命令ＣＭＤを記憶するバッファ部ＢＵＦの位置が一巡した後では、命令数保持部ＣＮＵＭの値は、例えば、“０”にクリアされるまで、バッファサイズ（“ｓｚ”）に維持される。
【００６８】
図５は、図２に示したデコード部５２のフラッシュ制御の一例を示している。デコード部５２は、例えば、選択部４０から受けた命令ＣＭＤｍを解読するデコーダＤＥＣと、オア回路ＯＲ２を有している。オア回路ＯＲ２は、フラッシュ制御信号ＦＬＳＨとループ終了通知ＬＦＩＮとの論理和結果を、デコーダＤＥＣに出力する。なお、オア回路ＯＲ２は、例えば、実行部６０に形成されてもよい。
【００６９】
デコーダＤＥＣは、例えば、オア回路ＯＲ２の出力が論理値“１”のとき、デコーダＤＥＣ内に保持している命令ＣＭＤを破棄する。すなわち、デコード部５２では、内部に保持している命令ＣＭＤ等を破棄するフラッシュ制御は、実行部６０から受けるフラッシュ制御信号ＦＬＳＨおよびループ終了通知ＬＦＩＮのいずれかがアサートされたとき、実施される。
【００７０】
また、デコーダＤＥＣは、ループ終点信号ＬＥＮＤを受けたとき、ループ終点信号ＬＥＮＤに対応する命令ＣＭＤｍの解読結果と一緒に、ループ終点信号ＬＥＮＤを実行部６０に出力する。例えば、デコーダＤＥＣは、ループ終点信号ＬＥＮＤを受けてから実行部６０に出力するまでのクロック数と、命令ＣＭＤｍを受けてから命令ＣＭＤｍの解読結果を実行部６０に出力するまでのクロック数とを一致させる。
【００７１】
さらに、デコーダＤＥＣは、ループ検出応答信号ＬＤＥＴＲを受けたとき、ループ検出応答信号ＬＤＥＴＲに対応する命令ＣＭＤｍの解読結果と一緒に、ループ検出応答信号ＬＤＥＴＲを実行部６０に出力する。なお、デコーダＤＥＣは、ループ検出応答信号ＬＤＥＴＲとループ終点信号ＬＥＮＤとの論理和結果を、ループ終点信号ＬＥＮＤとして実行部６０に出力してもよい。
【００７２】
図６は、図２に示した情報処理装置１２の動作の一例を示している。なお、図６の例では、命令ＣＭＤ７が命令バッファ３２に記憶される前に、命令バッファ３２には、“ｓｚ−３”個の命令ＣＭＤが記憶されている。符号ｓｚは、図３に示したバッファ部ＢＵＦが記憶できる命令数（バッファサイズ）を示している。
【００７３】
先ず、命令ＣＭＤ７−ＣＭＤ９は、命令バッファ３２のブッファ部ＢＵＦに順次記憶される。例えば、命令ＣＭＤ７は、書き込みポインタＷＰが示す位置“Ａ−３”に、記憶される。これにより、命令バッファ３２に記憶されている命令数（命令数保持部ＣＮＵＭの値）は、“ｓｚ−２”に更新される。そして、命令ＣＭＤ８は、書き込みポインタＷＰが示す位置“Ａ−２”に、記憶される。これにより、命令数保持部ＣＮＵＭの値は、“ｓｚ−１”に更新される。なお、命令ＣＭＤ８は、レジスタｒｅｇ０１の値を“１５”に設定する命令である。命令ＣＭＤ９は、書き込みポインタＷＰが示す位置“Ａ−１”に、記憶される。これにより、命令数保持部ＣＮＵＭの値は、“ｓｚ”に更新される。
【００７４】
命令ＣＭＤ１０−ＣＭＤ１３は、１回目のループ処理では、命令バッファ３２のブッファ部ＢＵＦに順次記憶される。例えば、命令ＣＭＤ１０、ＣＭＤ１１、ＣＭＤ１２、ＣＭＤ１３は、書き込みポインタＷＰが示す位置“Ａ”、“Ａ＋１”、“Ａ＋２”、“Ａ＋３”に、それぞれ記憶される。なお、命令バッファ３２に記憶されている命令数がバッファサイズに一致しているため、命令ＣＭＤ１０−ＣＭＤ１３では、命令数保持部ＣＮＵＭの値は、“ｓｚ”に維持される。
【００７５】
命令ＣＭＤ１０は、ループ処理の始点に対応する命令である。また、命令ＣＭＤ１２は、レジスタｒｅｇ０１の値を“１”減算する命令である。命令ＣＭＤ１３は、例えば、レジスタｒｅｇ０１の値が“０”以外のときに、命令ＣＭＤ１０に戻る分岐命令である。したがって、命令ＣＭＤ１３は、ループ処理の終点に対応する命令である。
【００７６】
命令ＣＭＤ１０−ＣＭＤ１３は、２回目以降のループ処理では、命令バッファ３２から順次読み出される。例えば、命令ＣＭＤ１０、ＣＭＤ１１、ＣＭＤ１２、ＣＭＤ１３は、読み出しポインタＲＰが示す位置“Ａ”、“Ａ＋１”、“Ａ＋２”、“Ａ＋３”からそれぞれ読み出される。
【００７７】
命令ＣＭＤ１４は、命令ＣＭＤ１０−ＣＭＤ１３のループ処理が終了した後、命令バッファ３２のブッファ部ＢＵＦに記憶される。例えば、命令ＣＭＤ１４は、書き込みポインタＷＰが示す位置“Ａ＋４”に、記憶される。なお、命令バッファ３２に記憶されている命令数がバッファサイズに一致しているため、命令ＣＭＤ１４では、命令数保持部ＣＮＵＭの値は、“ｓｚ”に維持される。
【００７８】
図７は、図２に示した情報処理装置１２のループ処理開始時の動作の一例を示している。なお、図７は、図６に示した命令ＣＭＤ１０−ＣＭＤ１３のループ処理の開始時の動作の一例を示している。また、図の太い線で囲んだ命令ＣＭＤ１３等は、ループ処理の終点に対応することを示している。図のデコード出力ＤＯＵＴは、デコード部５２の出力（解読結果）を示している。例えば、図のデコード出力ＤＯＵＴの命令ＣＭＤ７は、命令ＣＭＤ７の解読結果がデコード部５２から出力されることを示している。以下、デコード出力ＤＯＵＴを解読結果ＤＯＵＴとも称する。
【００７９】
期間Ｔ１０は、例えば、命令ＣＭＤ８−ＣＭＤ１３が命令バッファ３２に順次記憶される期間である。また、期間Ｔ２０は、例えば、ループ処理の範囲に対応する命令ＣＭＤ１０−ＣＭＤ１３が命令バッファ３２から繰り返し読み出される期間である。
【００８０】
例えば、期間Ｔ１０では、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ８−ＣＭＤ１３）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。例えば、デコード部５２は、命令ＣＭＤ８を受けるサイクルで、命令ＣＭＤ７の解読結果ＤＯＵＴを出力する。
【００８１】
命令バッファ３２は、フェッチ部２０から出力される命令ＣＭＤｆを順次記憶する。例えば、期間Ｔ１０では、書き込みポインタＷＰは、情報処理装置１２の動作クロックに同期して、“Ａ−２”から“Ａ＋３”までカウントアップする。これにより、命令ＣＭＤ８−ＣＭＤ１３は、書き込みポインタＷＰが示す位置（“Ａ−２”から“Ａ＋３”）に、それぞれ記憶される。すなわち、期間Ｔ１０では、命令バッファ３２は、書き込み動作を実施する。したがって、期間Ｔ１０では、有効な命令ＣＭＤｂは、命令バッファ３２から出力されない。
【００８２】
ループ検出信号ＬＤＥＴの論理値は、分岐命令（命令ＣＭＤ１３）が解読されるまで、“０”に維持される。例えば、デコード部５２は、命令ＣＭＤ１３を受けたサイクル内で、命令ＣＭＤ１３を解読する。これにより、命令ＣＭＤ１３が選択部４０から出力されるサイクルで、ループ検出信号ＬＤＥＴの論理値は、“０”から“１”に変化する。このとき、分岐先アドレスＢＡＤＲは、“−３”に設定される。分岐先アドレスＢＡＤＲの“−３”は、次のサイクルで、命令ＣＭＤ１３の３つ前の命令ＣＭＤ１０に戻ることを示している。
【００８３】
なお、図７の例では、命令バッファ３２の容量は、４つ以上の命令ＣＭＤを保持できるバッファサイズである。このため、ループ検出応答信号ＬＤＥＴＲの論理値は、ループ検出信号ＬＤＥＴに応答して、“０”から“１”に変化する。
【００８４】
ループ処理フラグＬＦＬＧの論理値は、命令バッファ３２が書き込み動作を実施している期間Ｔ１０では、“０”に維持されている。なお、命令バッファ３２が書き込み動作を実施しているため、始点ポインタＳＰ、終点ポインタＥＰ、読み出しポインタＲＰには、有効な値は設定されていない。また、ループ終点信号ＬＥＮＤの論理値は、“０”に維持されている。レジスタｒｅｇ０１の値は、レジスタｒｅｇ０１の値を“１５”に設定する命令ＣＭＤ８の解読結果ＤＯＵＴが出力された次のサイクルで、“１５”に設定される。
【００８５】
期間Ｔ２０では、フェッチ部２０は、フェッチした命令ＣＭＤ１４を保持した状態で、フェッチ動作を停止する。なお、フェッチ部２０は、命令ＣＭＤ１４を選択部４０に出力してもよいし、命令ＣＭＤ１４を選択部４０に出力しなくてもよい。命令バッファ３２は、期間Ｔ１０で記憶した命令ＣＭＤ１０−ＣＭＤ１３を順次出力する動作を繰り返す。例えば、命令ＣＭＤ１０、ＣＭＤ１１、ＣＭＤ１２、ＣＭＤ１３は、読み出しポインタＲＰが示す位置“Ａ”、“Ａ＋１”、“Ａ＋２”、“Ａ＋３”からそれぞれ読み出される。すなわち、期間Ｔ２０では、命令バッファ３２は、読み出し動作を実施する。
【００８６】
選択部４０は、命令バッファ３２から受けた命令ＣＭＤｂ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。例えば、デコード部５２は、命令ＣＭＤ１０を受けるサイクルで、命令ＣＭＤ１３の解読結果ＤＯＵＴを出力する。
【００８７】
書き込みポインタＷＰは、例えば、期間Ｔ１０（書き込み動作時）の最後のサイクルでの値“Ａ＋３”に“１”を加算した値“Ａ＋４”に維持される。ループ検出信号ＬＤＥＴの論理値は、命令バッファ３２が読み出し動作を実施している期間Ｔ２０では、“０”に維持される。したがって、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”に維持される。また、ループ処理フラグＬＦＬＧは、命令ＣＭＤ１０が命令バッファ３２から出力される最初のサイクルで、“０”から“１”に変化する。そして、ループ処理フラグＬＦＬＧの論理値は、“１”に維持される。
【００８８】
始点ポインタＳＰは、ループ検出信号ＬＤＥＴの論理値が“１”のときの分岐先アドレスＢＡＤＲ（“−３”）および書き込みポインタＷＰ（“Ａ＋３”）に基づいて、“Ａ”に設定される。すなわち、始点ポインタＳＰは、分岐先アドレスＢＡＤＲ（“−３”）および書き込みポインタＷＰ（“Ａ＋３”）の和（“Ａ”）に設定される。
【００８９】
終点ポインタＥＰは、ループ検出信号ＬＤＥＴの論理値が“１”のときの書き込みポインタＷＰと同じ値（“Ａ＋３”）に設定される。読み出しポインタＲＰは、情報処理装置１２の動作クロックに同期して更新される。例えば、読み出しポインタ部ＲＰＮＴは、読み出しポインタＲＰを“Ａ”から“Ａ＋３”までカウントアップする動作を、繰り返す。
【００９０】
ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが“Ａ”、“Ａ＋１”、“Ａ＋２”のとき、論理値“０”に設定され、読み出しポインタＲＰが“Ａ＋３”のとき、論理値“１”に設定される。すなわち、ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが終点ポインタＥＰに一致するサイクルで、論理値“１”に設定される。
【００９１】
レジスタｒｅｇ０１の値は、命令ＣＭＤ１２（ｒｅｇ０１＝ｒｅｇ０１−１）の解読結果ＤＯＵＴが出力された次のサイクルで、更新される。例えば、レジスタｒｅｇ０１の値は、期間Ｔ２０における最初の命令ＣＭＤ１３の解読結果ＤＯＵＴが出力されるサイクルで、“１５”から“１４”に更新される。そして、レジスタｒｅｇ０１の値は、期間Ｔ２０における２回目の命令ＣＭＤ１３の解読結果ＤＯＵＴが出力されるサイクルで、“１４”から“１３”に更新される。
【００９２】
なお、命令ＣＭＤ１３の解読結果ＤＯＵＴが実行部６０に出力されるサイクルでは、命令ＣＭＤ１０に戻る分岐を実行するか否かが実行部６０により判定される。すなわち、命令ＣＭＤ１３の解読結果ＤＯＵＴが実行部６０に出力される度に、ループ処理を終了するか否かが判定される。この実施形態では、レジスタｒｅｇ０１の値が“０”のとき（図８に示すゼロフラグＺＦＬＧの論理値が“１”のとき）、ループ処理が終了する。したがって、例えば、期間Ｔ２０では、レジスタｒｅｇ０１の値が“０”でないため、命令ＣＭＤ１０に戻る分岐が実行される。
【００９３】
このように、情報処理装置１２は、ループ処理の分岐命令（命令ＣＭＤ１３）が解読されたときに、パイプラインフラッシュを実施することなく、ループ処理の始点に対応する命令ＣＭＤ１０を命令バッファ３２からデコード部５２に選択部４０を介して転送する。これにより、この実施形態では、パイプライン処理の停止を低減できる。また、期間Ｔ２０では、フェッチ部２０のフェッチ動作は停止している。これにより、この実施形態では、ループ処理が実施されている期間のアクセス効率を向上できる。
【００９４】
図８は、図２に示した情報処理装置１２のループ処理終了時の動作の一例を示している。なお、図８は、図６に示した命令ＣＭＤ１０−ＣＭＤ１３のループ処理の終了時の動作の一例を示している。すなわち、図８に示した動作は、図７に示した動作の続きに対応する。図の太い線で囲んだ命令ＣＭＤ１３等は、ループ処理の終点に対応することを示している。図のデコード出力イネーブル信号ＤＥＮは、デコード部５２から出力された解読結果ＤＯＵＴが有効であることを示す信号であり、デコード部５２から出力される。また、ゼロフラグＺＦＬＧは、例えば、実行部６０内のフラグであり、レジスタｒｅｇ０１の値が“０”のときに論理値“１”に設定される。
【００９５】
期間Ｔ２２の動作は、レジスタｒｅｇ０１の値を除いて、図７に示した期間Ｔ２０の動作と同じである。なお、期間Ｔ２２では、デコード出力イネーブル信号ＤＥＮ、ゼロフラグＺＦＬＧおよびループ終了通知ＬＦＩＮのそれぞれの論理値は、“１”、“０”および“０”に維持される。
【００９６】
期間Ｔ２４では、命令ＣＭＤ１０が命令バッファ３２からデコード部５２に選択部４０を介して転送される。すなわち、命令バッファ３２は、読み出し動作を実施する。また、命令ＣＭＤ１３の解読結果ＤＯＵＴが実行部６０に出力され、デコード出力イネーブル信号ＤＥＮの論理値が“１”に維持されている。このため、実行部６０は、ループ処理を終了するか否かを判定する。
【００９７】
例えば、期間Ｔ２４では、レジスタｒｅｇ０１の値が“１”から“０”に更新されるため、ゼロフラグＺＦＬＧの論理値は、“０”から“１”に変化する。ゼロフラグＺＦＬＧの論理値が“０”であるため、実行部６０は、ループ終了と判断する。したがって、ループ終了通知ＬＦＩＮの論理値は、“０”から“１”に変化する。また、ループ終了通知ＬＦＩＮの論理値が“１”であるため、デコード部５２は、デコード部５２内に保持している命令ＣＭＤ１０を破棄する。
【００９８】
期間Ｔ３０では、ループ処理フラグＬＦＬＧの論理値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ２４で“１”に設定されたため、“１”から“０”に変化する。これにより、命令バッファ３２は、書き込み動作を実施する。また、フェッチ部２０は、フェッチ動作を再開する。例えば、フェッチ部２０は、図７の期間Ｔ２０に保持した命令ＣＭＤ１４を選択部４０に出力する。そして、例えば、命令バッファ３２は、書き込みポインタＷＰが示す位置“Ａ＋４”に、命令ＣＭＤ１４を記憶する。
【００９９】
選択部４０は、ループ処理フラグＬＦＬＧの論理値が“０”のため、フェッチ部２０から受けた命令ＣＭＤ１４をデコード部５２に出力する。デコード部５２は、期間Ｔ２４で命令ＣＭＤ１０を破棄したため、デコード出力イネーブル信号ＤＥＮの論理値を“０”に設定する。これにより、例えば、実行部６０は、デコード部５２からの解読結果ＤＯＵＴが無効であることを判断できる。
【０１００】
したがって、例えば、実行部６０は、命令ＣＭＤ１０の解読結果ＤＯＵＴをデコード部５２から受けたときにも、デコード出力イネーブル信号ＤＥＮの論理値が“０”であるため、命令ＣＭＤ１０の解読結果ＤＯＵＴが無効であることを判断できる。これにより、この実施形態では、命令ＣＭＤ１０がループ処理の終了後に実行されることを防止できる。
【０１０１】
なお、期間Ｔ３０では、レジスタｒｅｇ０１の値およびゼロフラグＺＦＬＧの論理値は、“０”および“１”にそれぞれ維持される。また、ループ終了通知ＬＦＩＮの論理値は、“１”から“０”に変化する。このように、情報処理装置１２は、命令ＣＭＤ１０−ＣＭＤ１３のループ処理が終了したときに、デコード部５２および実行部６０間のフラッシュ制御を実施する。
【０１０２】
期間Ｔ３２は、例えば、命令ＣＭＤ１５以降の命令ＣＭＤ（図８では、命令ＣＭＤ１５−ＣＭＤ１８）が命令バッファ３２に順次記憶される期間である。すなわち、期間Ｔ３２の動作は、フェッチされる命令ＣＭＤを除いて、期間Ｔ１０の動作と同じである。
【０１０３】
例えば、期間Ｔ３２では、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ１５−ＣＭＤ１８）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。書き込みポインタＷＰは、情報処理装置１２の動作クロックに同期して、”Ａ＋５”から“Ａ＋８”までカウントアップする。
【０１０４】
図９は、図２に示した情報処理装置１２のループ処理開始時の動作の別の例を示している。なお、図９は、命令バッファ３２の容量が分岐先アドレスＢＡＤＲの絶対値（“４０”）以下のバッファサイズ（“３２”）のときの情報処理装置１２の動作の一例を示している。図の太い線で囲んだ命令ＣＭＤ４３は、ループ処理の終点（分岐命令）に対応する命令ＣＭＤを示している。図９に示した命令ＣＭＤ４３の分岐命令では、例えば、４０個前の命令ＣＭＤ３に戻る。また、図の太い線で囲んだ書き込みポインタＷＰの“Ａ＋３”は、ループ処理の終点に対応することを示している。図の符号ｓｔａｌｌは、パイプラインフラッシュにより発生した各パイプラインの無効なサイクルを示している。
【０１０５】
期間Ｔ１０’は、図７に示した期間Ｔ１０に対応している。例えば、期間Ｔ１０’では、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ３８−ＣＭＤ４３）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。
【０１０６】
命令バッファ３２は、フェッチ部２０から出力される命令ＣＭＤｆを順次記憶する。例えば、命令ＣＭＤ３８−ＣＭＤ４３は、書き込みポインタＷＰが示す位置（“Ａ−２”から“Ａ＋３”）に、それぞれ記憶される。すなわち、期間Ｔ１０’では、命令バッファ３２は、書き込み動作を実施する。したがって、期間Ｔ１０’では、有効な命令ＣＭＤｂは、命令バッファ３２から出力されない。なお、命令数保持部ＣＮＵＭの値（命令数）は、例えば、情報処理装置１２の動作クロックに同期して、“２７”から“３２”までカウントアップする。
【０１０７】
ループ検出信号ＬＤＥＴの論理値は、分岐命令（命令ＣＭＤ４３）が解読されるまで、“０”に維持される。そして、命令ＣＭＤ４３が選択部４０から出力されるサイクルで、ループ検出信号ＬＤＥＴの論理値は、“０”から“１”に変化する。このとき、分岐先アドレスＢＡＤＲは、“−４０”に設定される。
【０１０８】
分岐先アドレスＢＡＤＲの絶対値（“４０”）以下のバッファサイズ（“３２”）であるため、命令ＣＭＤ４３の分岐命令で戻る命令ＣＭＤ３は、命令バッファ３２に記憶されていない。したがって、命令バッファ３２は、書き込み動作から読み出し動作に切り替えできないと判断する。このため、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”に維持される。したがって、ループ処理フラグＬＦＬＧの論理値は、“０”に維持される。このように、命令バッファ３２は、ループ処理の範囲の命令ＣＭＤを記憶していないとき、読み出し動作に切り替わらない。
【０１０９】
期間Ｔ１２では、命令バッファ３２は、書き込み動作を実施する。なお、命令バッファ３２が読み出し動作を実施しないため、パイプラインフラッシュが実施される。このため、例えば、期間Ｔ１２の最初の２サイクルでは、フェッチ部２０および選択部４０は、パイプライン処理を停止する。
【０１１０】
また、デコード部５２は、命令ＣＭＤ４３の解読結果ＤＯＵＴを出力した後、有効な命令ＣＭＤを受けるまで、解読処理を停止する。このため、デコード出力イネーブル信号ＤＥＮの論理値は、命令ＣＭＤ４３の解読結果ＤＯＵＴを出力した後に“０”に設定され、命令ＣＭＤ３の解読結果ＤＯＵＴを出力するまで、“０”に維持される。なお、期間Ｔ１２では、パイプラインフラッシュが実施されるため、書き込みポインタＷＰおよび命令数保持部ＣＮＵＭの値は、“０”にクリアされる。
【０１１１】
パイプラインフラッシュが実施された後、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ３−ＣＭＤ８）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。
【０１１２】
命令バッファ３２は、フェッチ部２０から出力される命令ＣＭＤｆを順次記憶する。例えば、命令ＣＭＤ３−ＣＭＤ８は、書き込みポインタＷＰが示す位置（“０”から“５”）に、それぞれ記憶される。また、命令数保持部ＣＮＵＭの値（命令数）は、例えば、フェッチ部２０から命令ＣＭＤ３が出力されるとき、情報処理装置１２の動作クロックに同期して、“０”から“１”にカウントアップする。その後、命令数保持部ＣＮＵＭの値（命令数）は、情報処理装置１２の動作クロックに同期して、カウントアップする。
【０１１３】
このように、情報処理装置１２は、分岐先の命令ＣＭＤが命令バッファ３２に記憶されていないとき、ループ処理の始点に対応する命令ＣＭＤ３をフェッチ部２０からデコード部５２に選択部４０を介して転送する。
【０１１４】
なお、情報処理装置１２の構成および動作は、この例に限定されない。例えば、デコード部５２は、ループ検出応答信号ＬＤＥＴＲの代わりに、ループ処理フラグＬＦＬＧを受けてもよい。この場合、フェッチ部２０およびデコード部５２は、例えば、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示している期間では、フラッシュ制御信号ＦＬＳＨがアサートされても、パイプラインフラッシュを実施しない。
【０１１５】
また、例えば、命令バッファ３２は、ループ終点信号ＬＥＮＤをデコード部５２に出力しなくてもよい。この場合、デコード部５２は、例えば、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示しているときにも、ループ処理の分岐命令の検出を実施する。そして、デコード部５２は、例えば、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示している期間にループ処理の分岐命令を検出したとき、ループ終点信号ＬＥＮＤを実行部６０に出力する。
【０１１６】
さらに、例えば、デコード部５２がループ終点信号ＬＥＮＤを生成するとき、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴが省かれてもよい。この場合、デコード部５２は、例えば、ループ処理フラグＬＦＬＧが命令バッファ３２の読み出し動作を示しているときにも、ループ検出信号ＬＤＥＴおよび分岐先アドレスＢＡＤＲを命令バッファ３２に出力する。これにより、情報処理装置１２は、多重ループに対応できる。
【０１１７】
また、例えば、命令バッファ３２は、ループ検出信号ＬＤＥＴがアサートされたとき（分岐命令が検出されたとき）、分岐命令の１つ前の命令ＣＭＤに対応する書き込みポインタＷＰを、終点ポインタＥＰに設定してもよい。この場合、例えば、実行部６０は、ループ検出応答信号ＬＤＥＴＲを受けたとき、分岐命令の解読結果（分岐条件）をループ処理が終了するまで保持する。そして、実行部６０は、ループ終点信号ＬＥＮＤを受けたとき、保持した分岐条件に基づいて、ループ処理を終了するか否かを判定する。
【０１１８】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。
【０１１９】
図１０は、別の実施形態における情報処理装置１４の一例を示している。上述した実施形態で説明した要素と同一の要素については、同一の符号を付し、これ等については、詳細な説明を省略する。情報処理装置１４は、図２に示した命令バッファ３２の代わりに、命令バッファ３４を有している。したがって、図１０では、例えば、命令ＣＭＤｂは、命令バッファ３４から出力される命令ＣＭＤを示している。情報処理装置１４のその他の構成は、図２−図９で説明した実施形態と同じである。例えば、情報処理装置１４は、パイプライン処理を実施するプロセッサである。
【０１２０】
情報処理装置１４は、フェッチ部２０、命令バッファ３４、選択部４０、デコード部５２および実行部６０を有している。命令バッファ３４は、多重ループに対応するために、始点ポインタＳＰおよび終点ポインタＥＰの組みを複数保持可能に形成されている。
【０１２１】
例えば、多重ループが実施されるとき、デコード部５２は、多重ループの最も外側のループを１周する間に、内側のループから外側のループにかけて、ループの終点を順次検出する。そして、命令バッファ３４は、例えば、ループの終点が検出される度に、ループ処理の始点ポインタＳＰおよび終点ポインタＥＰの組みを保持するとともに、読み出し動作に切り替わる。そして、命令バッファ３４は、実行中のループ処理が終了する度に、書き込み動作に切り替わる。
【０１２２】
また、例えば、多重ループの最も外側のループの２回目以降の動作では、命令バッファ３４は、複数の終点ポインタＥＰのいずれかが示す終点位置から命令ＣＭＤを出力した後、終点位置を示す終点ポインタＥＰに対応する始点ポインタＳＰが示す命令ＣＭＤを出力する。このようにして、命令バッファ３４は、始点ポインタＳＰと終点ポインタＥＰとの間の命令ＣＭＤを、ループ終了通知ＬＦＩＮを受けるまで繰り返し出力する。
【０１２３】
図１１は、図１０に示した命令バッファ３４の一例を示している。命令バッファ３４は、例えば、バッファ部ＢＵＦおよび制御部ＢＣＮＴ２を有している。すなわち、命令バッファ３４は、図３に示した制御部ＢＣＮＴの代わりに、制御部ＢＣＮＴ２を有している。命令バッファ３４のその他の構成は、命令バッファ３２と同じである。
【０１２４】
制御部ＢＣＮＴ２では、多重ループに対応するために、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴが複数形成され、エントリフラグテーブルＥＦＴＬ、ループ数保持部ＬＮＵＭおよびループ深さ保持部ＬＤＥＰが追加されている。制御部ＢＣＮＴ２のその他の構成は、追加されたモジュールを制御するための論理構成を除いて、制御部ＢＣＮＴと同じである。
【０１２５】
例えば、制御部ＢＣＮＴ２は、書き込みポインタ部ＷＰＮＴ、読み出しポインタ部ＲＰＮＴ、複数の始点ポインタ部ＳＰＮＴ（ＳＰＮＴ（０）−ＳＰＮＴ（ｎ−１））、複数の終点ポインタ部ＥＰＮＴ（ＥＰＮＴ（０）−ＥＰＮＴ（ｎ−１））、フラグ制御部ＬＦＣＮＴ、命令数保持部ＣＮＵＭ、エントリフラグテーブルＥＦＴＬ、ループ数保持部ＬＮＵＭおよびループ深さ保持部ＬＤＥＰを有している。
【０１２６】
エントリフラグテーブルＥＦＴＬは、始点ポインタＳＰおよび終点ポインタＥＰが有効か否かを示すエントリフラグＥＦ（０）−ＥＦ（ｎ−１）を設定する。なお、エントリフラグＥＦの符号の末尾のカッコ内の値は、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴの符号の末尾のカッコ内の値に対応している。例えば、始点ポインタ部ＳＰＮＴ（０）の始点ポインタＳＰおよび終点ポインタ部ＥＰＮＴ（０）の終点ポインタＥＰが有効のとき、エントリフラグＥＦ（０）の論理値は、“１”に設定される。
【０１２７】
ループ数保持部ＬＮＵＭは、有効を示しているエントリフラグＥＦの数を保持する。例えば、ループ数保持部ＬＮＵＭの値は、バッファ部ＢＵＦに記憶された命令ＣＭＤで対応したループ処理の数を示している。ループ深さ保持部ＬＤＥＰは、バッファ部ＢＵＦからの命令ＣＭＤｂを使用するループ処理が終了するまでのループ処理の数を保持する。例えば、多重ループが実施されるときでは、ループ深さ保持部ＬＤＥＰの値は、ループ処理の深さに対応する。
【０１２８】
図１２は、図１１に示したループ数保持部ＬＮＵＭを制御するための論理構成の一例を示している。なお、図１２では、ポインタ等の値が伝達される信号線を太い線で示している。例えば、制御部ＢＣＮＴ２は、ループ数保持部ＬＮＵＭを制御するために、比較器ＭＣＭＰ１、ナンド回路ＮＡＮＤ１およびアンド回路ＡＮＤ５を有している。比較器ＭＣＭＰ１は、図４に示した比較器ＭＣＭＰ１である。
【０１２９】
ナンド回路ＮＡＮＤ１は、エントリフラグテーブルＥＦＴＬから受けるエントリフラグＥＦ（０）−ＥＦ（ｎ−１）の否定論理積結果をアンド回路ＡＮＤ５に出力する。アンド回路ＡＮＤ５は、図４に示したアンド回路ＡＮＤ２の代わりに設けられている。アンド回路ＡＮＤ５は、ループ検出信号ＬＤＥＴと比較器ＭＣＭＰ１の出力値とナンド回路ＮＡＮＤ１の出力値との論理積結果（ループ検出応答信号ＬＤＥＴＲ）を出力する。
【０１３０】
例えば、アンド回路ＡＮＤ５は、値を保持可能な始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴが存在し、かつ、分岐先の命令ＣＭＤがバッファ部ＢＵＦに記憶されているとき、論理値“１”のループ検出信号ＬＤＥＴに応答して、論理値“１”のループ検出応答信号ＬＤＥＴＲを出力する。なお、値を保持可能な始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴが存在しないとき等では、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”である。
【０１３１】
ループ数保持部ＬＮＵＭは、カウントイネーブル端子ＣＥＮでループ検出応答信号ＬＤＥＴＲ（アンド回路ＡＮＤ５の出力）を受ける。そして、ループ数保持部ＬＮＵＭは、例えば、カウントイネーブル端子ＣＥＮで受けた信号の論理値が“１”の期間、情報処理装置１４の動作クロックに同期して、端子ＮＵＭの出力値をカウントアップする。以下、ループ数保持部ＬＮＵＭの端子ＮＵＭの出力値をループ数保持部ＬＮＵＭの値とも称する。
【０１３２】
図１３は、図１１に示した始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴを制御するための論理構成の一例を示している。なお、図１３では、ポインタ等の値が伝達される信号線を太い線で示している。例えば、制御部ＢＣＮＴ２は、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴを制御するために、加算部ＡＤＤ１、比較器ＩＣＭＰ２（ＩＣＭＰ２（０）−ＩＣＭＰ２（ｎ−１））およびアンド回路ＡＮＤ６（ＡＮＤ６（０）−ＡＮＤ６（ｎ−１））を有している。なお、比較器ＩＣＭＰ２およびアンド回路ＡＮＤ６の符号の末尾のカッコ内の値は、エントリフラグＥＦ等の符号の末尾のカッコ内の値に対応している。加算部ＡＤＤ１は、図４に示した加算部ＡＤＤ１である。
【０１３３】
比較器ＩＣＭＰ２は、例えば、比較器ＩＣＭＰ２の符号の末尾のカッコ内の値とループ数保持部ＬＮＵＭの値とを比較する。そして、例えば、比較器ＩＣＭＰ２は、比較器ＩＣＭＰ２の符号の末尾のカッコ内の値とループ数保持部ＬＮＵＭの値とが一致したとき、論理値“１”をアンド回路ＡＮＤ６に出力する。
【０１３４】
例えば、比較器ＩＣＭＰ２（０）は、値“０”とループ数保持部ＬＮＵＭの値とを比較し、ループ数保持部ＬＮＵＭの値が“０”のとき、論理値“１”をアンド回路ＡＮＤ６（０）に出力する。また、例えば、比較器ＩＣＭＰ２（ｎ−１）は、値“ｎ−１”とループ数保持部ＬＮＵＭの値とを比較し、ループ数保持部ＬＮＵＭの値が“ｎ−１”のとき、論理値“１”をアンド回路ＡＮＤ６（ｎ−１）に出力する。
【０１３５】
アンド回路ＡＮＤ６は、ループ検出応答信号ＬＤＥＴＲと比較器ＩＣＭＰ２の出力値との論理積結果を、エントリフラグテーブルＥＦＴＬ、始点ポインタ部ＳＰＮＴの初期化制御端子ＩＣＮＴおよび終点ポインタ部ＥＰＮＴの初期化制御端子ＩＣＮＴに出力する。例えば、アンド回路ＡＮＤ６（０）は、論理積結果を、エントリフラグテーブルＥＦＴＬ、始点ポインタ部ＳＰＮＴ（０）の初期化制御端子ＩＣＮＴおよび終点ポインタ部ＥＰＮＴ（０）の初期化制御端子ＩＣＮＴに出力する。また、例えば、アンド回路ＡＮＤ６（ｎ−１）は、論理積結果を、エントリフラグテーブルＥＦＴＬ、始点ポインタ部ＳＰＮＴ（ｎ−１）の初期化制御端子ＩＣＮＴおよび終点ポインタ部ＥＰＮＴ（ｎ−１）の初期化制御端子ＩＣＮＴに出力する。
【０１３６】
エントリフラグテーブルＥＦＴＬのエントリフラグＥＦは、アンド回路ＡＮＤ６の出力値に設定される。例えば、エントリフラグテーブルＥＦＴＬのエントリフラグＥＦ（０）は、アンド回路ＡＮＤ６（０）の出力値に設定される。また、例えば、エントリフラグテーブルＥＦＴＬのエントリフラグＥＦ（ｎ−１）は、アンド回路ＡＮＤ６（ｎ−１）の出力値に設定される。
【０１３７】
各始点ポインタ部ＳＰＮＴの動作は、図４に示した始点ポインタ部ＳＰＮＴの動作と同じである。例えば、各始点ポインタ部ＳＰＮＴは、加算部ＡＤＤ１の加算結果を入力端子ＩＮＴで受ける。そして、各始点ポインタ部ＳＰＮＴは、例えば、初期化制御端子ＩＣＮＴで受けた信号（アンド回路ＡＮＤ６の出力）の論理値が“１”のとき、入力端子ＩＮＴで受けた値を始点ポインタＳＰに設定する。
【０１３８】
各終点ポインタ部ＥＰＮＴの動作は、図４に示した終点ポインタ部ＥＰＮＴの動作と同じである。例えば、各終点ポインタ部ＥＰＮＴは、書き込みポインタ部ＷＰＮＴの値（書き込みポインタＷＰ）を入力端子ＩＮＴで受ける。そして、各終点ポインタ部ＥＰＮＴは、例えば、初期化制御端子ＩＣＮＴで受けた信号（アンド回路ＡＮＤ６の出力）の論理値が“１”のとき、入力端子ＩＮＴで受けた値（書き込みポインタＷＰ）を終点ポインタＥＰに設定する。
【０１３９】
図１４は、図１１に示した読み出しポインタ部ＲＰＮＴを制御するための論理構成の一例を示している。なお、図１４では、ポインタ等の値が伝達される信号線を太い線で示している。例えば、制御部ＢＣＮＴ２は、読み出しポインタ部ＲＰＮＴを制御するために、マルチプレクサＭＵＸ１、比較器ＩＣＭＰ３（ＩＣＭＰ３（０）−ＩＣＭＰ３（ｎ−１））、アンド回路ＡＮＤ３、ＡＮＤ７（ＡＮＤ７（０）−ＡＮＤ７（ｎ−１））、オア回路ＯＲ１、ＯＲ３、ＯＲ４および始点選択部ＳＰＳＥＬを有している。
【０１４０】
始点選択部ＳＰＳＥＬは、アンド回路ＡＮＤ８（ＡＮＤ８（０）−ＡＮＤ８（ｎ−１））、読み出しポインタ制御部ＲＰＣＮＴおよびオア回路ＯＲ５を有している。なお、比較器ＩＣＭＰ３、アンド回路ＡＮＤ７、ＡＮＤ８の符号の末尾のカッコ内の値は、エントリフラグＥＦ等の符号の末尾のカッコ内の値に対応している。始点選択部ＳＰＳＥＬは、マルチプレクサＭＵＸ１に出力するポインタを選択する。なお、マルチプレクサＭＵＸ１は、図４に示したマルチプレクサＭＵＸ１である。
【０１４１】
各比較器ＩＣＭＰ３の動作は、図４に示した比較器ＩＣＭＰ１の動作と同じである。例えば、各比較器ＩＣＭＰ３は、各終点ポインタ部ＥＰＮＴから受ける終点ポインタＥＰと読み出しポインタ部ＲＰＮＴから受ける読み出しポインタＲＰとを比較する。そして、各比較器ＩＣＭＰ３は、終点ポインタＥＰと読み出しポインタＲＰとが一致したとき、論理値“１”を各アンド回路ＡＮＤ７に出力する。
【０１４２】
例えば、比較器ＩＣＭＰ３（０）は、終点ポインタ部ＥＰＮＴ（０）の終点ポインタＥＰと読み出しポインタＲＰとが一致したとき、論理値“１”をアンド回路ＡＮＤ７（０）に出力する。また、例えば、比較器ＩＣＭＰ３（ｎ−１）は、終点ポインタ部ＥＰＮＴ（ｎ−１）の終点ポインタＥＰと読み出しポインタＲＰとが一致したとき、論理値“１”をアンド回路ＡＮＤ７（ｎ−１）に出力する。
【０１４３】
各アンド回路ＡＮＤ７は、各比較器ＩＣＭＰ３の出力値と各エントリフラグＥＦの論理値との論理積結果をオア回路ＯＲ３および各アンド回路ＡＮＤ８に出力する。例えば、アンド回路ＡＮＤ７（０）は、比較器ＩＣＭＰ３（０）の出力値とエントリフラグＥＦ（０）の論理値との論理積結果を、オア回路３およびアンド回路ＡＮＤ８（０）に出力する。また、例えば、アンド回路ＡＮＤ７（ｎ−１）は、比較器ＩＣＭＰ３（ｎ−１）の出力値とエントリフラグＥＦ（ｎ−１）の論理値との論理積結果を、オア回路３およびアンド回路ＡＮＤ８（ｎ−１）に出力する。
【０１４４】
なお、例えば、始点選択部ＳＰＳＥＬでは、各アンド回路ＡＮＤ８が受ける各アンド回路ＡＮＤ７の出力値のビット幅は、始点ポインタＳＰのビット幅に合わせて拡張される。各アンド回路ＡＮＤ８は、各アンド回路ＡＮＤ７の出力値と各始点ポインタ部ＳＰＮＴの始点ポインタＳＰとの論理積結果をオア回路ＯＲ５に出力する。
【０１４５】
例えば、アンド回路ＡＮＤ８（０）は、アンド回路ＡＮＤ７（０）の出力値と始点ポインタ部ＳＰＮＴ（０）の始点ポインタＳＰとの論理積結果をオア回路ＯＲ５に出力する。また、例えば、アンド回路ＡＮＤ８（ｎ−１）は、アンド回路ＡＮＤ７（ｎ−１）の出力値と始点ポインタ部ＳＰＮＴ（ｎ−１）の始点ポインタＳＰとの論理積結果をオア回路ＯＲ５に出力する。
【０１４６】
読み出しポインタ制御部ＲＰＣＮＴは、読み出しポインタＲＰ、ループ終点信号ＬＥＮＤおよびループ終了通知ＬＦＩＮを受ける。例えば、読み出しポインタ制御部ＲＰＣＮＴは、ループ終点信号ＬＥＮＤの論理値が“１”のときの読み出しポインタＲＰを保持する。そして、読み出しポインタ制御部ＲＰＣＮＴは、ループ終了通知ＬＦＩＮの論理値が“１”のとき、保持した読み出しポインタＲＰに“１”を加算した値をオア回路ＯＲ５に出力する。なお、読み出しポインタ制御部ＲＰＣＮＴは、ループ終了通知ＬＦＩＮの論理値が“０”のとき、“０”をオア回路ＯＲ５に出力する。
【０１４７】
オア回路ＯＲ５は、アンド回路ＡＮＤ８（０）−ＡＮＤ８（ｎ−１）の出力値と読み出しポインタ制御部ＲＰＣＮＴの出力値との論理和結果をマルチプレクサＭＵＸ１に出力する。このように、始点選択部ＳＰＳＥＬは、ループ処理が終了していないとき、実行中のループ処理の始点ポインタＳＰをマルチプレクサＭＵＸ１に出力する。また、始点選択部ＳＰＳＥＬは、ループ処理が終了したとき、終了したループ処理の後に実行される命令ＣＭＤに対応するポインタをマルチプレクサＭＵＸ１に出力する。
【０１４８】
オア回路ＯＲ３は、アンド回路ＡＮＤ７（０）−ＡＮＤ７（ｎ−１）の出力値の論理和結果をアンド回路ＡＮＤ３に出力する。アンド回路ＡＮＤ３は、ループ処理フラグＬＦＬＧとオア回路ＯＲ３の出力値との論理積結果（ループ終点信号ＬＥＮＤ）を出力する。これにより、ループ終点信号ＬＥＮＤの論理値は、例えば、読み出しポインタＲＰの示す命令ＣＭＤが分岐命令のとき、“１”に設定される。
【０１４９】
オア回路ＯＲ４は、アンド回路ＡＮＤ３の出力値とループ終了通知ＬＦＩＮとの論理和結果をオア回路ＯＲ１およびマルチプレクサＭＵＸ１に出力する。例えば、マルチプレクサＭＵＸ１は、オア回路ＯＲ４の出力値が“１”のとき、始点選択部ＳＰＳＥＬから受けたポインタを読み出しポインタ部ＲＰＮＴの入力端子ＩＮＴに出力する。
【０１５０】
オア回路ＯＲ１は、オア回路ＯＲ４の出力値とループ検出応答信号ＬＤＥＴＲとの論理和結果を、読み出しポインタ部ＲＰＮＴの初期化制御端子ＩＣＮＴに出力する。これにより、読み出しポインタ部ＲＰＮＴは、例えば、ループ終点信号ＬＥＮＤ、ループ終了通知ＬＦＩＮおよびループ検出応答信号ＬＤＥＴＲのいずれかの論理値が“１”のとき、入力端子ＩＮＴで受けた値を読み出しポインタＲＰに設定する。
【０１５１】
図１５は、図１０に示した情報処理装置１４の動作の一例を示している。なお、図１５は、情報処理装置１４の２重ループの処理時の動作の一例を示している。例えば、命令ＣＭＤ９は、２重ループの外側のループ（図のループ２）の始点に対応する命令である。また、命令ＣＭＤ１０は、２重ループの内側のループ（図のループ１）の始点に対応する命令である。
【０１５２】
命令ＣＭＤ８−ＣＭＤ１４の動作は、図６に示した命令ＣＭＤ８−ＣＭＤ１４の動作と同じである。例えば、命令ＣＭＤ１０−ＣＭＤ１３のループ１の処理は、２重ループの内側のループ処理であり、図６等で説明した命令ＣＭＤ１０−ＣＭＤ１３のループ処理に対応する。なお、命令ＣＭＤ９−ＣＭＤ１８のループ２の処理は、２重ループの外側のループ処理である。命令ＣＭＤ１５は、レジスタｒｅｇ０１の値を“１５”に設定する命令である。また、命令ＣＭＤ１７は、レジスタｒｅｇ０２の値を“１”減算する命令である。
【０１５３】
命令ＣＭＤ１４−ＣＭＤ１８は、１回目のループ２の処理では、命令バッファ３４のブッファ部ＢＵＦに順次記憶される。例えば、命令ＣＭＤ１４、ＣＭＤ１５、ＣＭＤ１６、ＣＭＤ１７、ＣＭＤ１８は、書き込みポインタＷＰが示す位置“Ａ＋４”、“Ａ＋５”、“Ａ＋６”、“Ａ＋７”、“Ａ＋８”に、それぞれ記憶される。なお、命令バッファ３４に記憶されている命令数がバッファサイズに一致しているため、命令ＣＭＤ１４−ＣＭＤ１８では、命令数保持部ＣＮＵＭの値は、“ｓｚ”に維持される。
【０１５４】
また、命令ＣＭＤ９−ＣＭＤ１８は、２回目以降のループ２の処理では、命令バッファ３４から順次読み出される。例えば、命令ＣＭＤ９−ＣＭＤ１８は、読み出しポインタＲＰが示す位置（“Ａ−１”から“Ａ＋８”）からそれぞれ読み出される。
【０１５５】
命令ＣＭＤ１９は、命令ＣＭＤ９−ＣＭＤ１８のループ処理（ループ２の処理）が終了した後、命令バッファ３４のブッファ部ＢＵＦに記憶される。例えば、命令ＣＭＤ１９は、書き込みポインタＷＰが示す位置“Ａ＋９”に、記憶される。なお、命令バッファ３４に記憶されている命令数がバッファサイズに一致しているため、命令ＣＭＤ１９では、命令数保持部ＣＮＵＭの値は、“ｓｚ”に維持される。
【０１５６】
図１６は、図１５に示したループ２の処理開始時の動作の一例を示している。なお、図１６に示した動作は、図７に示した動作の続きに対応する。したがって、期間Ｔ２２’、Ｔ２４’、Ｔ３０’、Ｔ３２’は、図８に示した期間Ｔ２２、Ｔ２４、Ｔ３０、Ｔ３２に対応する。図の太い線で囲んだ命令ＣＭＤ１３、ＣＭＤ１８等は、ループ処理の終点に対応することを示している。始点ポインタＳＰ（０）、ＳＰ（１）は、始点ポインタ部ＳＰＮＴ（０）、ＳＰＮＴ（１）の始点ポインタＳＰをそれぞれ示している。また、終点ポインタＥＰ（０）、ＥＰ（１）は、終点ポインタ部ＥＰＮＴ（０）、ＥＰＮＴ（１）の終点ポインタＥＰをそれぞれ示している。
【０１５７】
期間Ｔ２２’の動作は、情報処理装置１４で追加されたループ深さ保持部ＬＤＥＰの値等を除いて、図８に示した期間Ｔ２２の最後のサイクルと同じである。例えば、ループ深さ保持部ＬＤＥＰの値は、命令ＣＭＤ９−ＣＭＤ１８のループ２の処理が実施される前に、命令ＣＭＤ１０−ＣＭＤ１３のループ１の処理が実施されている状態であるため、“１”に設定されている。
【０１５８】
また、ループ数保持部ＬＮＵＭの値は、始点ポインタＳＰ（０）および終点ポインタＥＰ（０）のみに有効な値がされているため、“１”に設定されている。例えば、始点ポインタＳＰ（０）および終点ポインタＥＰ（０）には、命令ＣＭＤ１０−ＣＭＤ１３のループ１の始点および終点に対応する“Ａ”および“Ａ＋３”がそれぞれ設定されている。また、レジスタｒｅｇ０２の値は、例えば、“７”に設定されている。
【０１５９】
期間Ｔ２４’の動作は、情報処理装置１４で追加されたループ深さ保持部ＬＤＥＰの値等を除いて、図８に示した期間Ｔ２４の動作と同じである。例えば、期間Ｔ２４’では、レジスタｒｅｇ０１の値が“１”から“０”に更新されるため、ゼロフラグＺＦＬＧの論理値は、“０”から“１”に変化する。これにより、ループ終了通知ＬＦＩＮの論理値は、“０”から“１”に変化する。また、ループ終了通知ＬＦＩＮの論理値が“１”であるため、デコード部５２は、デコード部５２内に保持している命令ＣＭＤ１０を破棄する。
【０１６０】
期間Ｔ３０’では、読み出しポインタＲＰが“Ａ＋４”に設定される点が図８に示した期間Ｔ３０と相違する。期間Ｔ３０’のその他の動作は、情報処理装置１４で追加されたループ深さ保持部ＬＤＥＰの値等を除いて、図８に示した期間Ｔ３０の動作と同じである。例えば、期間Ｔ３０’では、ループ処理フラグＬＦＬＧの論理値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ２４’で“１”に設定されたため、“１”から“０”に変化する。これにより、命令バッファ３４は、書き込み動作を実施する。例えば、命令バッファ３４は、フェッチ部２０から出力された命令ＣＭＤ１４を、書き込みポインタＷＰが示す位置“Ａ＋４”に記憶する。
【０１６１】
また、ループ深さ保持部ＬＤＥＰの値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ２４’で“１”に設定されたため、“１”から“０”に変化する。このように、例えば、ループ深さ保持部ＬＤＥＰの値は、ループ終了通知ＬＦＩＮのアサートに応じて、カウントダウンする。また、デコード部５２で保持していた命令ＣＭＤ１０が期間Ｔ２４’に破棄されたため、デコード出力イネーブル信号ＤＥＮの論理値は“０”に設定される。
【０１６２】
期間Ｔ３２’では、命令ＣＭＤ１５−ＣＭＤ１８が命令バッファ３４に順次記憶される。例えば、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ１５−ＣＭＤ１８）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。
【０１６３】
書き込みポインタＷＰは、情報処理装置１４の動作クロックに同期して、”Ａ＋５”から“Ａ＋８”までカウントアップする。これにより、命令ＣＭＤ１５、ＣＭＤ１６、ＣＭＤ１７、ＣＭＤ１８は、書き込みポインタＷＰが示す位置“Ａ＋５”、“Ａ＋６”、“Ａ＋７”、“Ａ＋８”にそれぞれ記憶される。
【０１６４】
ループ検出信号ＬＤＥＴの論理値は、ループ２の分岐命令（命令ＣＭＤ１８）が解読されるまで、“０”に維持される。そして、命令ＣＭＤ１８が選択部４０から出力されるサイクルで、ループ検出信号ＬＤＥＴの論理値は、“０”から“１”に変化する。なお、命令ＣＭＤ１８の分岐命令では、命令ＣＭＤ１８の９つ前の命令ＣＭＤ９に戻る。このため、ループ検出信号ＬＤＥＴの論理値が“１”に設定されたとき、分岐先アドレスＢＡＤＲは、“−９”に設定される。なお、図１６の例では、命令バッファ３４の容量は、１０個以上の命令ＣＭＤを保持できるバッファサイズである。このため、ループ検出応答信号ＬＤＥＴＲの論理値は、ループ検出信号ＬＤＥＴに応答して、“０”から“１”に変化する。
【０１６５】
ループ処理フラグＬＦＬＧの論理値は、“０”に維持されている。また、ループ終点信号ＬＥＮＤの論理値は、“０”に維持されている。レジスタｒｅｇ０１の値は、レジスタｒｅｇ０１の値を“１５”に設定する命令ＣＭＤ１５の解読結果ＤＯＵＴが出力された次のサイクルで、“１５”に設定される。これにより、ゼロフラグＺＦＬＧの論理値は、“１”から“０”に変化する。また、ループ終了通知ＬＦＩＮの論理値は、“０”に維持されている。
【０１６６】
期間Ｔ４０では、フェッチ部２０は、フェッチした命令ＣＭＤ１９を保持した状態で、フェッチ動作を停止する。そして、命令バッファ３４は、読み出し動作を実施する。例えば、命令バッファ３４は、命令ＣＭＤ９−ＣＭＤ１３を順次出力する。なお、命令ＣＭＤ９は、ループ２の始点に対応する命令ＣＭＤである。また、命令ＣＭＤ１３は、ループ２より内側のループ１の終点に対応する命令ＣＭＤである。例えば、命令ＣＭＤ９、ＣＭＤ１０、ＣＭＤ１１は、読み出しポインタＲＰが示す位置“Ａ−１”、“Ａ”、“Ａ＋１”からそれぞれ読み出される。
【０１６７】
選択部４０は、命令バッファ３４から受けた命令ＣＭＤｂ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。デコード出力イネーブル信号ＤＥＮの論理値は、“１”に維持される。書き込みポインタＷＰは、期間Ｔ３２’（書き込み動作時）の最後のサイクルでの値“Ａ＋８”に“１”を加算した値“Ａ＋９”に維持される。
【０１６８】
ループ検出信号ＬＤＥＴおよびループ検出応答信号ＬＤＥＴＲの論理値は、“０”に維持される。また、ループ処理フラグＬＦＬＧは、命令ＣＭＤ９が命令バッファ３４から出力される最初のサイクルで、“０”から“１”に変化する。そして、ループ処理フラグＬＦＬＧの論理値は、“１”に維持される。始点ポインタＳＰ（０）および終点ポインタ（０）は、“Ａ”および“Ａ＋３”にそれぞれ維持される。
【０１６９】
また、ループ検出応答信号ＬＤＥＴＲの論理値が“１”のときのループ数保持部ＬＮＵＭの値が“１”であるため、始点ポインタＳＰ（１）および終点ポインタＥＰ（１）が更新される。例えば、始点ポインタＳＰ（１）は、ループ検出信号ＬＤＥＴの論理値が“１”のときの分岐先アドレスＢＡＤＲ（“−９”）および書き込みポインタＷＰ（“Ａ＋８”）の和（“Ａ−１”）に設定される。また、終点ポインタＥＰ（１）は、ループ検出信号ＬＤＥＴの論理値が“１”のときの書き込みポインタＷＰと同じ値（“Ａ＋８”）に設定される。
【０１７０】
読み出しポインタＲＰは、期間Ｔ４０の最初のサイクルで、分岐先アドレスＢＡＤＲ（“−９”）および書き込みポインタＷＰ（“Ａ＋８”）の和（“Ａ−１”）に設定される。そして、読み出しポインタＲＰは、情報処理装置１４の動作クロックに同期して更新される。例えば、読み出しポインタＲＰは、命令ＣＭＤ１０が命令バッファ３４から出力されるサイクルで、“Ａ−１”から“Ａ”にカウントアップする。
【０１７１】
ループ終点信号ＬＥＮＤは、例えば、読み出しポインタＲＰが“Ａ−１”、“Ａ”、“Ａ＋１”、“Ａ＋２”のとき、論理値“０”に設定される。なお、ループ終点信号ＬＥＮＤは、例えば、図１７に示すように、読み出しポインタＲＰが“Ａ＋３”のとき、論理値“１”に設定される。
【０１７２】
ループ深さ保持部ＬＤＥＰの値は、論理値“１”のループ検出応答信号ＬＤＥＴＲに応答して、“０”から“１”にカウントアップする。ループ数保持部ＬＮＵＭの値は、始点ポインタＳＰ（１）および終点ポインタＥＰ（１）に有効な値が設定されるため、“１”から“２”にカウントアップする。レジスタｒｅｇ０１の値は、例えば、期間Ｔ４０の最初のサイクルでは、命令ＣＭＤ１２が実行されていないため、“１５”に維持される。
【０１７３】
レジスタｒｅｇ０２の値は、命令ＣＭＤ１７（ｒｅｇ０２＝ｒｅｇ０２−１）の解読結果ＤＯＵＴが出力された次のサイクルで、更新される。例えば、レジスタｒｅｇ０２の値は、期間Ｔ４０における最初の命令ＣＭＤ１８の解読結果ＤＯＵＴが出力されるサイクルで、“７”から“６”に更新される。なお、ゼロフラグＺＦＬＧおよびループ終了通知ＬＦＩＮの論理値は、“０”に維持される。
【０１７４】
このように、情報処理装置１４は、多重ループにおけるループ２の分岐命令（命令ＣＭＤ１８）が解読されたときにも、パイプラインフラッシュを実施することなく、ループ２の始点に対応する命令ＣＭＤ９を命令バッファ３４からデコード部５２に選択部４０を介して転送する。これにより、この実施形態では、多重ループが実施されるときにも、パイプライン処理の停止を低減できる。
【０１７５】
図１７は、図１５に示したループ１の処理時の動作の一例を示している。なお、図１７に示した動作は、図１６に示した動作の続きに対応する。期間Ｔ４２は、図１６に示した期間Ｔ４０の続きである。図の太い線で囲んだ命令ＣＭＤ１３等は、ループ処理の終点に対応することを示している。
【０１７６】
期間Ｔ４２では、例えば、命令ＣＭＤ１２、ＣＭＤ１３が命令バッファ３４からデコード部５２に選択部４０を介して順次転送される。命令ＣＭＤ１２、ＣＭＤ１３は、例えば、読み出しポインタＲＰが示す位置“Ａ＋２”、“Ａ＋３”からそれぞれ読み出される。
【０１７７】
ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが“Ａ＋３”（終点ポインタＥＰ（０））のとき、論理値“１”に設定される。すなわち、ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが終点ポインタＥＰ（０）に一致するサイクルで、論理値“１”に設定される。
【０１７８】
なお、ループ終点信号ＬＥＮＤの論理値が“１”のときの読み出しポインタＲＰ“Ａ＋３”は、実行中のループ処理（ループ２の処理）の終点ポインタＥＰ（１）と異なる。このため、ループ深さ保持部ＬＤＥＰの値は、次のサイクル（期間Ｔ５０の最初のサイクル）で、“１”から“２”にカウントアップする。このように、ループ深さ保持部ＬＤＥＰの値は、例えば、実行中のループ処理の終点ポインタＥＰと異なる終点ポインタＥＰに読み出しポインタＲＰが一致したとき、論理値“１”のループ終点信号ＬＥＮＤに応答して、カウントアップする。
【０１７９】
期間Ｔ５０は、２重ループの内側のループ１の処理が命令バッファ３４から読み出される命令ＣＭＤで実施される期間である。例えば、命令バッファ３４は、論理値“１”のループ終点信号ＬＥＮＤを受けるまで、ループ１の処理の範囲に対応する命令ＣＭＤ１０−ＣＭＤ１３を順次出力する動作を繰り返す。
【０１８０】
ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが“Ａ”、“Ａ＋１”、“Ａ＋２”のとき、論理値“０”に設定され、読み出しポインタＲＰが“Ａ＋３”のとき、論理値“１”に設定される。すなわち、ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが終点ポインタＥＰ（０）、ＥＰ（１）のいずれか（図１７では、終点ポインタＥＰ（０））に一致するサイクルで、論理値“１”に設定される。
【０１８１】
なお、ループ終点信号ＬＥＮＤの論理値が“１”のときの読み出しポインタＲＰ“Ａ＋３”は、実行中のループ処理（ループ１の処理）の終点ポインタＥＰ（０）に一致する。このため、ループ深さ保持部ＬＤＥＰの値は、ループ終点信号ＬＥＮＤの論理値が“０”から“１”に変化しても、カウントアップしない。例えば、ループ深さ保持部ＬＤＥＰの値は、期間Ｔ５０の最初のサイクルで“１”から“２”にカウントアップした後、“２”に維持される。
【０１８２】
レジスタｒｅｇ０１の値は、命令ＣＭＤ１２（ｒｅｇ０１＝ｒｅｇ０１−１）が実行される度に、減少する。例えば、レジスタｒｅｇ０１の値は、期間Ｔ５０における最初の命令ＣＭＤ１３の解読結果ＤＯＵＴが出力されるサイクルで、“１５”から“１４”に更新される。そして、レジスタｒｅｇ０１の値は、期間Ｔ５０における１４回目の命令ＣＭＤ１３の解読結果ＤＯＵＴが出力されるサイクルで、“２”から“１”に更新される。なお、期間Ｔ５０では、例えば、レジスタｒｅｇ０１、ｒｅｇ０２の値が“０”でないため、ゼロフラグＺＦＬＧおよびループ終了通知ＬＦＩＮの論理値は、“０”に維持される。
【０１８３】
期間Ｔ６０では、レジスタｒｅｇ０１の値は、命令ＣＭＤ１２（ｒｅｇ０１＝ｒｅｇ０１−１）の実行に伴い、“１”から“０”に更新される。このため、ゼロフラグＺＦＬＧの論理値は、“０”から“１”に変化する。したがって、ループ終了通知ＬＦＩＮの論理値は、“０”から“１”に変化する。ループ終了通知ＬＦＩＮの論理値が“１”であるため、デコード部５２は、デコード部５２内に保持している命令ＣＭＤ１０を破棄する。
【０１８４】
期間Ｔ６２では、デコード出力イネーブル信号ＤＥＮの論理値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ６０で“１”に設定されたため、“０”に設定される。また、読み出しポインタＲＰは、ループ終了通知ＬＦＩＮの論理値が期間Ｔ６０で“１”に設定されたため、ループ終了通知ＬＦＩＮに対応するループ１の終点“Ａ＋３”に“１”を加算した“Ａ＋４”に設定される。
【０１８５】
ループ深さ保持部ＬＤＥＰの値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ６０で“１”に設定されたため、“２”から“１”にカウントダウンする。ループ処理フラグＬＦＬＧの論理値は、ループ深さ保持部ＬＤＥＰの値が１以上であるため、“１”に維持される。すなわち、ループ処理フラグＬＦＬＧの論理値は、ループ深さ保持部ＬＤＥＰの値が２以上の期間では、ループ終了通知ＬＦＩＮの論理値が“１”に設定されても、“１”に維持される。したがって、命令バッファ３４は、読み出し動作を継続する。例えば、命令ＣＭＤ１４は、読み出しポインタＲＰが示す位置“Ａ＋４”から読み出される。
【０１８６】
期間Ｔ６４では、例えば、命令ＣＭＤ１５、ＣＭＤ１６が命令バッファ３４からデコード部５２に選択部４０を介して順次転送される。命令ＣＭＤ１５、ＣＭＤ１６は、例えば、読み出しポインタＲＰが示す位置“Ａ＋５”、“Ａ＋６”からそれぞれ読み出される。
【０１８７】
このように、情報処理装置１４は、ループ１の処理の分岐命令（命令ＣＭＤ１３）が解読されたときに、パイプラインフラッシュを実施することなく、ループ１の処理の始点に対応する命令ＣＭＤ１０を命令バッファ３４からデコード部５２に選択部４０を介して転送する。そして、情報処理装置１４は、ループ１の処理が終了したときに、デコード部５２および実行部６０間のフラッシュ制御を実施する。これにより、この実施形態では、パイプライン処理の停止を低減できる。
【０１８８】
図１８は、図１５に示したループ２の処理時の動作の一例を示している。なお、図１８に示した動作は、図１７に示した動作の続きに対応する。期間Ｔ５０’は、図１７に示した期間Ｔ５０の最後のサイクルに対応する。また、期間Ｔ６０、Ｔ６２、Ｔ６４は、図１７に示した期間Ｔ６０、Ｔ６２、Ｔ６４である。図の太い線で囲んだ命令ＣＭＤ１３、ＣＭＤ１８等は、ループ処理の終点に対応することを示している。
【０１８９】
期間Ｔ６６では、例えば、命令ＣＭＤ１７、ＣＭＤ１８が命令バッファ３４からデコード部５２に選択部４０を介して順次転送される。命令ＣＭＤ１７、ＣＭＤ１８は、例えば、読み出しポインタＲＰが示す位置“Ａ＋７”、“Ａ＋８”からそれぞれ読み出される。
【０１９０】
ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが“Ａ＋８”（終点ポインタＥＰ（１））のとき、論理値“１”に設定される。すなわち、ループ終点信号ＬＥＮＤは、読み出しポインタＲＰが終点ポインタＥＰ（０）、ＥＰ（１）のいずれか（図１８では、終点ポインタＥＰ（１））に一致するサイクルで、論理値“１”に設定される。なお、ループ終点信号ＬＥＮＤの論理値が“１”のときの読み出しポインタＲＰ“Ａ＋８”は、実行中のループ処理（ループ２の処理）の終点ポインタＥＰ（１）に一致する。このため、次のサイクルでも、ループ深さ保持部ＬＤＥＰの値は、“１”に維持される。
【０１９１】
レジスタｒｅｇ０１の値は、レジスタｒｅｇ０１の値を“１５”に設定する命令ＣＭＤ１５の実行に伴い、“１５”に設定される。これにより、ゼロフラグＺＦＬＧの論理値は、“１”から“０”に変化する。また、ループ終了通知ＬＦＩＮの論理値は、“０”に維持されている。
【０１９２】
期間Ｔ４０の動作は、レジスタｒｅｇ０２の値を除いて、図１６に示した期間Ｔ４０の動作と同じである。例えば、レジスタｒｅｇ０２の値は、命令ＣＭＤ１７（ｒｅｇ０２＝ｒｅｇ０２−１）の実行に伴い、“６”から“５”に更新される。なお、ゼロフラグＺＦＬＧおよびループ終了通知ＬＦＩＮの論理値は、“０”に維持される。
【０１９３】
このように、情報処理装置１４は、命令ＣＭＤ１０−ＣＭＤ１３のループ１および命令ＣＭＤ９−ＣＭＤ１８のループ２を含む多重ループを、バッファ命令３２から命令ＣＭＤを読み出して実行する。このとき、フェッチ部２０のフェッチ動作は、停止している。このため、この実施形態では、多重ループが実施されるときにも、ループ処理が実施されている期間のアクセス効率を向上できる。
【０１９４】
図１９は、図１５に示したループ２の処理終了時の動作の一例を示している。図の太い線で囲んだ命令ＣＭＤ１３、ＣＭＤ１８等は、ループ処理の終点に対応することを示している。期間Ｔ５０’、Ｔ６０、Ｔ６２、Ｔ６４、Ｔ６６の動作は、レジスタｒｅｇ０２の値を除いて、図１８に示した期間Ｔ５０’、Ｔ６０、Ｔ６２、Ｔ６４、Ｔ６６の動作と同じである。例えば、レジスタｒｅｇ０２の値は、“１”に設定されている。
【０１９５】
期間Ｔ７０では、レジスタｒｅｇ０２の値は、命令ＣＭＤ１７（ｒｅｇ０２＝ｒｅｇ０２−１）の実行に伴い、“１”から“０”に更新される。このため、ゼロフラグＺＦＬＧの論理値は、“０”から“１”に変化する。したがって、ループ終了通知ＬＦＩＮの論理値は、“０”から“１”に変化する。ループ終了通知ＬＦＩＮの論理値が“１”であるため、デコード部５２は、デコード部５２内に保持している命令ＣＭＤ９を破棄する。
【０１９６】
ループ終了通知ＬＦＩＮの論理値が“１”に設定されたとき、ループ深さ保持部ＬＤＥＰの値は、“１”である。このため、ループ処理フラグＬＦＬＧの論理値は、次のサイクル（期間Ｔ７２）で、“１”から“０”に変化する。
【０１９７】
期間Ｔ７２では、デコード出力イネーブル信号ＤＥＮの論理値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ７０で“１”に設定されたため、“０”に設定される。また、ループ処理フラグＬＦＬＧの論理値は、ループ深さ保持部ＬＤＥＰの値が“１”のときの論理値“１”のループ終了通知ＬＦＩＮに応答して、“１”から“０”に変化する。これにより、命令バッファ３４は、書き込み動作を実施する。例えば、命令バッファ３４は、フェッチ部２０から出力された命令ＣＭＤ１９を、書き込みポインタＷＰが示す位置“Ａ＋９”に記憶する。また、命令ＣＭＤ１９は、フェッチ部２０からデコード部５２に選択部４０を介して転送される。
【０１９８】
ループ深さ保持部ＬＤＥＰの値は、ループ終了通知ＬＦＩＮの論理値が期間Ｔ７０で“１”に設定されたため、“１”から“０”にカウントダウンする。なお、ゼロフラグＺＦＬＧの論理値は、レジスタｒｅｇ０２の値が“０”のため、“１”に維持される。なお、ループ終了通知ＬＦＩＮの論理値は、“１”から“０”に変化する。
【０１９９】
期間Ｔ７４では、命令ＣＭＤ２０がフェッチ部２０からデコード部５２に選択部４０を介して転送される。また、命令ＣＭＤ２０は、命令バッファ３４に記憶される。例えば、書き込みポインタＷＰは、”Ａ＋９”から“Ａ＋１０”にカウントアップする。そして、命令ＣＭＤ２０は、書き込みポインタＷＰが示す位置“Ａ＋１０”に記憶される。
【０２００】
なお、命令ＣＭＤ２０以降の命令ＣＭＤは、ループ処理フラグＬＦＬＧの論理値が“０”の期間、フェッチ部２０からデコード部５２に選択部４０を介して順次転送されるとともに、命令バッファ３４に順次記憶される。
【０２０１】
図２０は、図１５に示したループ２の処理開始時の動作の別の例を示している。なお、図２０は、ｎ個の全ての始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴに有効な始点ポインタＳＰおよび終点ポインタＥＰが保持されているときの情報処理装置１４の動作の一例を示している。図の太い線で囲んだ命令ＣＭＤ１３、ＣＭＤ１８等は、ループ処理の終点（分岐命令）に対応することを示している。図の符号ｓｔａｌｌは、パイプラインフラッシュにより発生した各パイプラインの無効なサイクルを示している。
【０２０２】
期間Ｔ２４’、Ｔ３０’、Ｔ３２’の動作は、ループ検出応答信号ＬＤＥＴＲ、始点ポインタＳＰ、終点ポインタＥＰおよびループ数保持部ＬＮＵＭの値を除いて、図１６に示した期間Ｔ２４’、Ｔ３０’、Ｔ３２’の動作と同じである。例えば、始点ポインタＳＰ（０）−ＳＰ（ｎ−１）および終点ポインタＥＰ（ｎ）−ＥＰ（ｎ−１）には、ループ２の分岐命令に対応する命令ＣＭＤ１８が検出される前に、有効な値が設定されている。このため、ループ数保持部ＬＮＵＭの値は、“ｎ”に設定されている。
【０２０３】
期間Ｔ３２の最後のサイクルでは、ループ２の分岐命令に対応する命令ＣＭＤ１８がフェッチ部２０からデコード部５２に選択部４０を介して転送される。また、命令ＣＭＤ１８は、命令バッファ３４に記憶される。
【０２０４】
分岐命令（命令ＣＭＤ１８）が解読されることにより、ループ検出信号ＬＤＥＴの論理値は、“０”から“１”に変化する。このとき、分岐先アドレスＢＡＤＲは、“−９”に設定される。なお、図２０の例では、命令バッファ３４の容量は、１０個以上の命令ＣＭＤを保持できるバッファサイズである。このため、命令ＣＭＤ１８の分岐命令で戻る命令ＣＭＤ９は、命令バッファ３４に記憶されている。
【０２０５】
しかし、ｎ個の全ての始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴに有効な始点ポインタＳＰおよび終点ポインタＥＰが既に保持されている。このため、命令バッファ３４は、命令ＣＭＤ９に対応する始点ポインタＳＰおよび命令ＣＭＤ１８に対応する終点ポインタＥＰを保持できないと判断する。すなわち、命令バッファ３４は、書き込み動作から読み出し動作に切り替えできないと判断する。
【０２０６】
このため、ループ検出応答信号ＬＤＥＴＲの論理値は、“０”に維持される。したがって、ループ処理フラグＬＦＬＧの論理値は、“０”に維持される。このように、始点ポインタＳＰおよび終点ポインタＥＰの保持数が限界に達しているとき、命令バッファ３４は、読み出し動作に切り替わらない。
【０２０７】
期間Ｔ３４では、命令バッファ３４は、書き込み動作を実施する。なお、命令バッファ３４が読み出し動作を実施しないため、パイプラインフラッシュが実施される。このため、例えば、期間Ｔ３４の最初の２サイクルでは、フェッチ部２０および選択部４０は、パイプライン処理を停止する。
【０２０８】
また、デコード部５２は、命令ＣＭＤ１８の解読結果ＤＯＵＴを出力した後、有効な命令ＣＭＤを受けるまで、解読処理を停止する。このため、デコード出力イネーブル信号ＤＥＮの論理値は、命令ＣＭＤ１８の解読結果ＤＯＵＴを出力した後に“０”に設定され、命令ＣＭＤ９の解読結果ＤＯＵＴを出力するまで、“０”に維持される。なお、期間Ｔ３４では、パイプラインフラッシュが実施されるため、書き込みポインタＷＰ、ループ深さ保持部ＬＤＥＰの値およびループ数保持部ＬＮＵＭの値は、“０”にクリアされる。なお、例えば、図１１に示した命令数保持部ＣＮＵＭの値も、“０”にクリアされる。
【０２０９】
また、図１１に示したエントリフラグＥＦ（０）−ＥＦ（ｎ−１）は、無効（例えば、論理値“０”）に設定される。すなわち、ｎ個の全ての始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴは、新たな始点ポインタＳＰおよび終点ポインタＥＰを保持可能な状態になる。
【０２１０】
パイプラインフラッシュが実施された後、フェッチ部２０は、フェッチした命令ＣＭＤｆ（命令ＣＭＤ９、ＣＭＤ１０）を選択部４０に順次出力する。選択部４０は、フェッチ部２０から受けた命令ＣＭＤｆ（命令ＣＭＤｍ）をデコード部５２に順次出力する。デコード部５２は、選択部４０から受けた命令ＣＭＤｍを順次解読し、解読結果ＤＯＵＴを実行部６０に出力する。
【０２１１】
命令バッファ３４は、フェッチ部２０から出力される命令ＣＭＤｆを順次記憶する。例えば、命令ＣＭＤ９、ＣＭＤ１０は、書き込みポインタＷＰが示す位置“０”、“１”にそれぞれ記憶される。
【０２１２】
このように、情報処理装置１４は、始点ポインタＳＰおよび終点ポインタＥＰの保持数が限界に達しているとき、ループ処理の始点に対応する命令ＣＭＤ９をフェッチ部２０からデコード部５２に選択部４０を介して転送する。
【０２１３】
なお、情報処理装置１４の構成および動作は、この例に限定されない。例えば、始点ポインタ部ＳＰＮＴおよび終点ポインタ部ＥＰＮＴは、リング状に形成されてもよい。この場合、例えば、単独のループが続くとき、パイプライン処理の停止を効率よく低減できる。
【０２１４】
以上、この実施形態においても、上述した実施形態と同様の効果を得ることができる。
【０２１５】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずであり、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０２１６】
１０、１２、１４‥情報処理装置；２０‥フェッチ部；３０、３２、３４‥命令バッファ；４０‥選択部；５０、５２‥デコード部；ＡＤＤ１‥加算部；ＡＮＤ１−ＡＮＤ８‥アンド回路；ＢＣＮＴ、ＢＣＮＴ２‥制御部；ＢＵＦ‥バッファ部；ＣＮＵＭ‥命令数保持部；ＤＥＣ‥デコーダ；ＥＦＴＬ‥エントリフラグテーブル；ＥＰＮＴ‥終点ポインタ部；ＩＣＭＰ１−ＩＣＭＰ３、ＭＣＭＰ１、ＭＣＭＰ２‥比較器；ＩＮＶ１‥インバータ；ＬＤＥＰ‥ループ深さ保持部；ＬＦＣＮＴ‥フラグ制御部；ＬＮＵＭ‥ループ数保持部；ＭＣＭＰ１‥比較器；ＭＵＸ１‥マルチプレクサ；ＮＡＮＤ１‥ナンド回路；ＯＲ１−ＯＲ５‥オア回路；ＲＰＣＮＴ‥読み出しポインタ制御部；ＲＰＮＴ‥読み出しポインタ部；ＳＰＮＴ‥始点ポインタ部；ＳＰＳＥＬ‥始点選択部；ＷＰＮＴ‥書き込みポインタ部
【図１】
2012221086.tif 000003
【図２】
2012221086.tif 000004
【図３】
2012221086.tif 000005
【図４】
2012221086.tif 000006
【図５】
2012221086.tif 000007
【図６】
2012221086.tif 000008
【図７】
2012221086.tif 000009
【図８】
2012221086.tif 000010
【図９】
2012221086.tif 000011
【図１０】
2012221086.tif 000012
【図１１】
2012221086.tif 000013
【図１２】
2012221086.tif 000014
【図１３】
2012221086.tif 000015
【図１４】
2012221086.tif 000016
【図１５】
2012221086.tif 000017
【図１６】
2012221086.tif 000018
【図１７】
2012221086.tif 000019
【図１８】
2012221086.tif 000020
【図１９】
2012221086.tif 000021
【図２０】
2012221086.tif 000022