(57)【特許請求の範囲】
【請求項１】
主記憶装置からの複数の命令コードを取り込んで格納するキャッシュブロックと、
前記キャッシュブロックにフェッチアクセスし、逐次、前記複数の命令コードを取り込んで実行する中央演算装置と、
前記キャッシュブロックに格納された前記複数の命令コードのうち、処理プログラム中で反復実行されるリピートブロックの先頭の命令コードから、前記キャッシュブロックのライン構成によらず、バッファサイズ分の命令コード群を格納するリピートバッファと、
前記リピートバッファ内の操作対象エントリを指し示すとともに操作後にインクリメントされるエントリポインタと、
前記リピートブロックの反復により、前記リピートバッファに格納された前記命令コード群を前記中央演算装置に供給するように制御する命令キャッシュ制御部と、
を備え、
前記命令キャッシュ制御部は、
前記リピートバッファ内の各エントリが有効か無効かを判定し、
前記中央演算装置からの逐次要求、リピート要求、及び、分岐要求であってリピート以外のもの、の各フェッチの種類を識別し、
リピート要求に応答して、前記エントリポインタを初期化してリピートバッファの先頭に位置づけ、
逐次要求に応答して、
エントリポインタが指し示すリピートバッファエントリが有効であれば、該エントリの内容を命令コードとして選択してエントリポインタをインクリメントし、
エントリポインタが指し示すリピートバッファエントリが無効であれば、前記キャッシュブロックからフェッチした命令コードを選択するとともにエントリポインタの指し示すリピートバッファエントリに該命令コードを格納して該エントリを有効とし、エントリポインタをインクリメントし、
分岐要求であってリピート以外のものに応答して、前記リピートバッファへの命令コードの格納を中止し、
前記リピートバッファに格納された前記命令コード群と前記中央演算装置からのフェッチアクセスとのアドレス比較をせず、前記リピートバッファまたは前記キャッシュブロックからの命令コードの選択を行う
ことを特徴とする演算処理装置。
【請求項２】
前記キャッシュブロックは複数のデータＲＡＭを有して構成され、
前記リピートバッファに格納された前記命令コード群の終端の命令コードに続く命令コードが格納されている、前記データＲＡＭを指し示すウェイインジケータをさらに備えることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記キャッシュブロックのラインに対応するタグ情報を記憶するタグＲＡＭと、
前記キャッシュブロックのラインの境界を越える以前のフェッチアクセス時に、あらかじめ次のラインに対応するタグ情報を前記タグＲＡＭから読み出して、次のライン境界を越える逐次的フェッチ要求によりアクセスすることが予想されるアドレスを生成し、その生成された前記アドレスと前記タグ情報とを比較した結果を保持する先引き結果ストレージと
をさらに備え、
前記中央演算装置からのライン境界を越える逐次的フェッチ要求に応じて実際に前記キャッシュブロックへアクセスする際には、前記先引き結果ストレージで保持されている比較結果にもとづいて、前記キャッシュブロックへのアクセス制御を行うことを特徴とする請求項１に記載の演算処理装置。
【請求項４】
前記リピートバッファは、前記主記憶装置からの複数の命令コードを取り込んで格納する、前記キャッシュブロックのプリフェッチバッファとしても機能する多機能バッファにより構成され、
前記多機能バッファは、前記処理プログラム中で反復実行されるリピートブロックがない場合に前記プリフェッチバッファとして機能するように、その用途が前記中央演算装置からのフェッチ要求により切り替え制御されることを特徴とする請求項１に記載の演算処理装置。
【請求項５】
前記リピートブロックは、ネスト構造が排除されていることを特徴とする請求項１に記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置に関するもので、特に、命令キャッシュメモリからフェッチした、リピートブロック（反復実行する命令コード群）を含む命令コードを実行するマイクロプロセッサに関する。
【背景技術】
【０００２】
命令キャッシュメモリからフェッチした命令コードを実行するプロセッサにおいては、プログラム中のリピートブロックを実行する場合がある。リピートブロックの実行に際しては、同じ命令コード群を繰り返し実行するにも関わらず、その都度、命令キャッシュメモリにアクセスし、命令コードをフェッチしていた。このため、命令キャッシュメモリにアクセスするたびに電力を消費するという問題があった。
【０００３】
そこで、バッファを設けて命令キャッシュからの命令に関する情報を順次記憶させ、命令が命令ループに入ったことを検知した場合に、命令ループの命令をバッファから出力させるようにしたシステムも提案されている（たとえば、特許文献１参照）。
【０００４】
しかしながら、この提案のような方式とした場合には、いくつかの問題点があった。たとえば、リピート命令の発行によって、バッファ内にリピートブロックの命令コードを格納する際に、命令デコーダのデコード結果にしたがってバッファを制御し、命令コードの格納を開始させるための制御回路が新たに必要となる。また、バッファ内のリピートブロックの命令コードとフェッチ対象の命令コードとの一致が確認された命令コードをバッファから出力させるためにはアドレス比較器が必要であり、命令コードをフェッチするたびに、フェッチした命令コードとバッファ内に格納されている命令コードとのアドレス比較を行わなければならず、余計に電力を消費する。
【０００５】
特に、命令キャッシュメモリがセットアソシアティブ命令キャッシュの場合、バッファの境界と命令キャッシュメモリのライン境界とが一致していないと、バッファ内の命令コードの続きとなる命令コードがどのｗａｙ（キャッシュデータＲＡＭ）に存在するのかが判断できないので、バッファ内の命令コードを使い果たした後には、すべてのｗａｙにアクセスすることになり、余計な電力を消費する。
【０００６】
上記したように、プログラム中のリピートブロックを実行する際に、バッファから命令コードを供給するようにして、命令キャッシュメモリへのアクセス数を減らすようにした従来方式においては、命令キャッシュメモリへのアクセスにともなう消費電力を抑えることが可能である。しかし、バッファに命令コードの格納を開始させるための制御回路、および、フェッチした命令コードとバッファ内に格納されている命令コードとのアドレス比較を行うためのアドレス比較器が必要であり、バッファ内の命令コードの続きとなる命令コードを読み出すために、すべてのｗａｙにアクセスしなければならず、余計な電力を消費するという問題があった。
【特許文献１】特開平９−９１１３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、上記の問題点を解決すべくなされたもので、プログラム中のリピートブロックを実行する場合に、余計な電力の消費を抑えることが可能な演算処理装置を提供することを目的としている。
【課題を解決するための手段】
【０００８】
実施形態に係る演算処理装置によれば、主記憶装置からの複数の命令コードを取り込んで格納するキャッシュブロックと、前記キャッシュブロックにフェッチアクセスし、逐次、前記複数の命令コードを取り込んで実行する中央演算装置と、前記キャッシュブロックに格納された前記複数の命令コードのうち、処理プログラム中で反復実行されるリピートブロックの先頭の命令コードから、前記キャッシュブロックのライン構成によらず、バッファサイズ分の命令コード群を格納するリピートバッファと、前記リピートバッファ内の操作対象エントリを指し示すとともに操作後にインクリメントされるエントリポインタと、前記リピートブロックの反復により、前記リピートバッファに格納された前記命令コード群を前記中央演算装置に供給するように制御する命令キャッシュ制御部と、を備え、前記命令キャッシュ制御部は、前記リピートバッファ内の各エントリが有効か無効かを判定し、前記中央演算装置からの逐次要求、リピート要求、及び、分岐要求であってリピート以外のもの、の各フェッチの種類を識別し、リピート要求に応答して、前記エントリポインタを初期化してリピートバッファの先頭に位置づけ、逐次要求に応答して、エントリポインタが指し示すリピートバッファエントリが有効であれば、該エントリの内容を命令コードとして選択してエントリポインタをインクリメントし、エントリポインタが指し示すリピートバッファエントリが無効であれば、前記キャッシュブロックからフェッチした命令コードを選択するとともにエントリポインタの指し示すリピートバッファエントリに該命令コードを格納して該エントリを有効とし、エントリポインタをインクリメントし、分岐要求であってリピート以外のものに応答して、前記リピートバッファへの命令コードの格納を中止し、前記リピートバッファに格納された前記命令コード群と前記中央演算装置からのフェッチアクセスとのアドレス比較をせず、前記リピートバッファまたは前記キャッシュブロックからの命令コードの選択を行う。
【発明の効果】
【０００９】
上記の構成により、プログラム中のリピートブロックを実行する場合に、余計な電力の消費を抑えることが可能な演算処理装置を提供できる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態について図面を参照して説明する。ただし、図面は模式的なものであり、各図面の寸法および比率などは現実のものとは異なることに留意すべきである。また、図面の相互間においても、互いの寸法の関係および／または比率が異なる部分が含まれていることは勿論である。特に、以下に示すいくつかの実施形態は、本発明の技術思想を具体化するための装置および方法を例示したものであって、構成部品の形状、構造、配置などによって、本発明の技術思想が特定されるものではない。この発明の技術思想は、その要旨を逸脱しない範囲において、種々の変更を加えることができる。
【００１１】
［第１の実施形態］
図１は、本発明の第１の実施形態にしたがった演算処理装置（マイクロプロセッサ）の構成例を示すものである。ここでは、キャッシュブロックとしての命令キャッシュメモリからの命令コードを格納するための、リピートバッファを備えた命令キャッシュシステムを例に説明する。
【００１２】
図１に示すように、この命令キャッシュシステム１０は、命令キャッシュデータＲＡＭ１１、命令キャッシュタグＲＡＭ１２、命令キャッシュ制御部１３、リピートバッファ１４、エントリポインタ１５、ウェイインジケータ１６、タグ比較器１７、プロセッサ内命令フェッチユニット（中央演算装置）１８、および、選択回路１９，２０を備えている。
【００１３】
命令キャッシュデータＲＡＭ１１は、たとえば、２つのセットアソシアティブ命令キャッシュデータＲＡＭ（ｗａｙ−０，ｗａｙ−１）１１ａ，１１ｂを有して構成されている。これらキャッシュデータＲＡＭ１１ａ，１１ｂは、それぞれ、図示していない外部のメインメモリ（主記憶装置）に記憶されているプログラム中の一部の命令コードを格納するものである。なお、本実施形態においては、命令キャッシュデータＲＡＭ１１のｗａｙ数を“２”とした場合を示している。命令キャッシュデータＲＡＭ１１のｗａｙ数は、ｎ×ｗａｙへと自由に拡張することが可能である。
【００１４】
命令フェッチユニット１８は、命令キャッシュ制御部１３を介して、命令キャッシュデータＲＡＭ１１にフェッチアクセスし、命令キャッシュデータＲＡＭ１１からの命令コード（または、リピートバッファ１４からの命令コード）を選択的に取り込んで実行するものである。また、この命令フェッチユニット１８は、プログラム中の反復実行する命令コード群であるリピートブロックを定義するリピート命令が発行された際に、そのリピートブロック先頭（Ｒｅｐｅａｔ  Ｂｅｇｉｎ）のプログラムカウンタ値および末尾（Ｒｅｐｅａｔ  Ｅｎｄ）のプログラムカウンタ値を記憶するようになっている。
【００１５】
リピートバッファ１４は、そのサイズ（容量）に応じて、命令キャッシュデータＲＡＭ１１に格納されているリピートブロックの、少なくとも一部の命令コードを格納するものである。つまり、リピートバッファ１４は、キャッシュデータＲＡＭ１１ａ，１１ｂのラインサイズに依存することなく、命令コード群の先頭からバッファサイズ分の命令コードを格納する。
【００１６】
エントリポインタ１５は、リピートバッファ１４内の各エントリ中、処理対象となるエントリを記憶するものであって、たとえば、逐次要求のたびにその値がインクリメントされる。
【００１７】
ウェイインジケータ１６は、リピートバッファ１４内の各エントリに格納された命令コードに続く、リピートブロックの命令コードが格納されている命令キャッシュデータＲＡＭのｗａｙ情報（フラグ）を管理するものである。
【００１８】
命令キャッシュ制御部１３は、命令フェッチユニット１８からの要求および選択回路２０の選択結果に応じて、命令キャッシュデータＲＡＭ１１、命令キャッシュタグＲＡＭ１２、および、選択回路１９，２０などを制御するものである。
【００１９】
命令キャッシュタグＲＡＭ１２は、動作履歴などを記憶する管理情報メモリであって、命令キャッシュ制御部１３からのアドレス（たとえば、命令キャッシュデータＲＡＭ１１ａ，１１ｂのライン）に対応するタグ情報を記憶するものである。
【００２０】
タグ比較器１７は、命令キャッシュタグＲＡＭ１２からのタグ情報と命令キャッシュ制御部１３からのアドレスとを比較し、その比較結果をウェイインジケータ１６および選択回路２０に出力するものである。
【００２１】
選択回路１９は、命令キャッシュ制御部１３によって制御され、命令キャッシュデータＲＡＭ１１からの命令コードまたはリピートバッファ１４からの命令コードを選択し、命令フェッチユニット１８に出力するものである。
【００２２】
選択回路２０は、命令キャッシュ制御部１３によって制御され、ウェイインジケータ１６の出力またはタグ比較器１７の出力を選択し、命令キャッシュ制御部１３に出力するものである。
【００２３】
ここで、プロセッサのプログラム実行においては、リピートブロックのネスト構造を排除すれば、リピートブロックに対応したプログラムカウンタの記憶セットは１セットで構成可能である。本実施形態においては、説明の簡潔化のために、リピートブロックのネスト構造を排除した場合について説明する。
【００２４】
すなわち、プログラム中のリピート命令が発行された後、命令キャッシュデータＲＡＭ１１から供給される命令コードによるプログラム実行が進み、実行中のプログラムカウンタ値が、リピートブロック末尾のプログラムカウンタ値に達したとする。すると、命令フェッチユニット１８は、リピート動作によるフェッチ要求を命令キャッシュ制御部１３に発行する。
【００２５】
リピート動作によるフェッチ要求を受けた命令キャッシュ制御部１３は、エントリポインタ１５を初期化（この例では、たとえば“０”に設定）する。そして、エントリポインタ１５によって示される、リピートバッファ１４内のエントリが有効か否かを判定する。有効でない場合は、命令キャッシュデータＲＡＭ１１にリクエスト（アドレス）を発行する。その後、命令キャッシュデータＲＡＭ１１から命令コードが出力されると、その命令コードを命令フェッチユニット１８に出力するとともに、リピートバッファ１４のエントリに命令コードを格納する。
【００２６】
その後、リピートブロック内のプログラム実行がシーケンシャルに（分岐によるジャンプを起こさずに）実行されると、命令フェッチユニット１８から逐次要求が発行される。すると、命令キャッシュ制御部１３は、リピートバッファ１４のエントリを逐次的に（要求のたびにエントリポインタ１５をインクリメントしながら順々に）チェックする。有効でない場合は、命令キャッシュデータＲＡＭ１１からの命令コードをリピートバッファ１４に格納する動作を繰り返す。
【００２７】
命令キャッシュ制御部１３が、この逐次的なリピートバッファ１４内への命令コードの格納動作を行わない場合は、以下のケースである。
【００２８】
（１）  エントリポインタ１５の指す、リピートバッファ１４内のエントリがすでに有効である場合。
【００２９】
（２）  プログラムが分岐によるジャンプを発生し、命令フェッチユニット１８から分岐によるフェッチ要求が届いた場合（エントリポインタ１５は、リピートバッファ１４内のエントリを指さない値に設定される）。
【００３０】
（３）  リピートバッファ１４の全エントリをチェックした場合（命令コードがリピートバッファ１４の容量に達した場合で、エントリポインタ１５はリピートバッファ１４内のエントリを指さない値に設定される）。
【００３１】
その後、リピート動作によるフェッチ要求が、再度、命令キャッシュ制御部１３に届いた際には、エントリポインタ１５が初期化される。そして、リピートバッファ１４の先頭エントリが指定され、逐次的なエントリの有効／無効のチェックが開始される。
【００３２】
以前の、リピートブロック内のプログラム実行により、リピートバッファ１４内の各エントリに命令コードがすでに格納されている場合、命令キャッシュ制御部１３は、命令キャッシュデータＲＡＭ１１へのアクセスを行わない。この場合は、エントリポインタ１５の指すリピートバッファ１４内の有効エントリからの命令コードを、命令フェッチユニット１８に出力させる。その後、エントリポインタ１５をインクリメントし、エントリポインタ１５が次のエントリを指すことにより、次の逐次要求に備える。エントリポインタ１５がインクリメントされない場合は、以下のケースである。
【００３３】
（１）  プログラムが分岐によるジャンプを発生し、命令フェッチユニット１８から分岐によるフェッチ要求が届いた場合（エントリポインタ１５は、リピートバッファ１４内のエントリを指さない値に設定される）。
【００３４】
（２）  リピートバッファ１４の全エントリをチェックした場合（命令コードがリピートバッファ１４の容量に達した場合で、エントリポインタ１５はリピートバッファ１４内のエントリを指さない値に設定される）。
【００３５】
図２は、リピートバッファ１４およびウェイインジケータ１６の動作を説明するために示すものである。図中の１ワード（Ｗｏｒｄ  ｎ）は、命令フェッチユニット１８から要求されるフェッチ単位の命令コードを指す。ここでは、一例として、２−ｗａｙ・８ワード／ライン構成の、セットアソシアティブ命令キャッシュデータＲＡＭ１１ａ，１１ｂにおける動作について説明する。
【００３６】
図２において、命令キャッシュデータＲＡＭ１１ａのあるラインの途中に、リピートブロックの先頭ワード（Ｒｅｐｅａｔ  Ｂｅｇｉｎ）が格納されている。一方、リピートバッファ１４には、リピートブロックの先頭ワードからバッファサイズ分のワードデータ（命令コード群としてのＲｅｐｅａｔ  Ｂｅｇｉｎ〜ｎ９）が格納されている。
【００３７】
図２に示すように、リピートブロックの各ワードデータが命令キャッシュデータＲＡＭ１１ａの１ライン上に整列されている必要はなく、また、リピートバッファ１４のサイズ（容量）も命令キャッシュデータＲＡＭ１１ａのラインサイズに依存することなく、そのサイズを自由に設定することができる。命令キャッシュデータＲＡＭ１１ａのラインサイズに依存することなく、リピートブロックの先頭ワードからバッファサイズ分のワードデータをリピートバッファ１４内に格納する結果として、リピートバッファ１４の終端ワード（ｎ９）が、命令キャッシュデータＲＡＭ１１ａのラインの途中になることが十分に想定される。
【００３８】
ここで、２−ｗａｙ以上のセットアソシアティブ命令キャッシュデータＲＡＭを使用する場合において、リピートバッファ１４の終端ワード（ｎ９）に続く命令コードが、複数のｗａｙ中のどの命令キャッシュデータＲＡＭに格納されているか判断できないと、全ｗａｙの命令キャッシュデータＲＡＭにアクセスし、後続の命令コードを得る必要がある。この場合、リピートバッファ１４内の命令コードを使い果たすたびに、全ｗａｙの命令キャッシュデータＲＡＭにアクセスするようにすると、余計な電力消費を招く。
【００３９】
そこで、本実施形態においては、リピートバッファ１４に命令コードを格納する際に、終端ワード（ｎ９）に続く命令コードが格納されている命令キャッシュデータＲＡＭのｗａｙ情報を、ウェイインジケータ１６によって管理するようにする。この場合、リピートバッファ１４の終端ワード（ｎ９）をフェッチした後には、ウェイインジケータ１６が指し示す命令キャッシュデータＲＡＭにのみアクセスを行うことにより、後続の命令コードをフェッチすることが容易に可能となる。すなわち、後続の命令コードを格納する命令キャッシュデータＲＡＭのみを活性化させることにより、電力の無駄な消費が抑えられる。
【００４０】
本実施形態のように、リピートブロックのネスト構造を排除した場合、プログラム実行中において、リピート要求（リピートブロック先頭の命令コードフェッチ要求）が発生すると、そのフェッチ要求に対応する命令コードのアドレスは一意に決まる。よって、プログラム中のリピートブロックの先頭ワードのアドレスを記憶することにより、リピート要求によってリピートブロックの先頭ワードを対象とした命令フェッチが発生した場合にも、フェッチする命令コードのアドレスをアドレス比較器で比較したりすることなく、命令フェッチの種類（逐次要求、リピート要求、リピートを除いた分岐要求）の識別のみで、リピートブロック先頭の命令コードを命令フェッチユニット１８に出力させることが可能となる。
【００４１】
本実施形態の構成によれば、命令コードをフェッチするための命令キャッシュデータＲＡＭ１１の物理的構造に依存することなく、リピートバッファ１４のサイズを自由に設定することができる。また、図３に示すように、リピートバッファ１４に格納される命令コード群（Ｒｅｐｅａｔ  ｂｅｇｉｎ〜ｎ９）が命令キャッシュデータＲＡＭ１１ａ，１１ｂの境界を越え、複数のｗａｙ−０，ｗａｙ−１に存在する場合にも、リピートバッファ１４として機能させることができる。
【００４２】
次に、上記した構成の命令キャッシュシステム１０の動作について説明する。たとえば、プログラム中のリピートブロックの実行時、リピートブロックの最初の反復により、リピートブロックの先頭にプログラム実行が戻るタイミングから、リピートバッファ１４上にリピートブロックの先頭からの命令コードの格納を開始する。そして、命令コードがリピートバッファ１４の全容量に達するか、あるいは、リピートブロックの末尾の命令コードまで格納し終えたか、もしくは、リピートブロック中に“分岐”が発生した際は、リピートバッファ１４への命令コードの格納を終了する。その後は、リピートブロックの反復により、リピートブロックの先頭にプログラム実行が戻るたびに、命令フェッチユニット１８にリピートバッファ１４から命令コードを供給する。これにより、リピートブロック反復中の命令キャッシュデータＲＡＭ１１へのアクセスを減らし、命令キャッシュデータＲＡＭ１１へのアクセスにともなう消費電力を削減できる。
【００４３】
また、リピートバッファ１４の命令コードを使い果たした後には、ウェイインジケータ１６からのｗａｙ情報にしたがって、リピートバッファ１４内の命令コードの続きとなる命令コードを格納する命令キャッシュデータＲＡＭにのみ確実にアクセスすることで、無駄な電力の消費を抑えることが可能となる。
【００４４】
上記したように、プログラム中のリピートブロックを実行する際に、有効なリピートバッファ内のエントリにヒットすることで、リピートバッファから命令コードを出力させるようにしている。しかも、セットアソシアティブ命令キャッシュデータＲＡＭ内の命令コードをリピートバッファに格納する際には、リピートバッファ内の終端ワードに続く命令コードをフェッチしやすくするために、次にアクセスすべきｗａｙを示すフラグを管理するようにしている。これにより、命令キャッシュメモリへのアクセス数を減少でき、命令キャッシュメモリへのアクセスにともなう消費電力を抑えることが可能となるとともに、加えて、リピートバッファをアクセスした後の、全ｗａｙの命令キャッシュデータＲＡＭへのアクセスによる余計な電力の消費をも抑制できるようになるものである。
【００４５】
しかも、バッファに命令コードの格納を開始させるための制御回路、および、フェッチした命令コードとバッファ内に格納されている命令コードとのアドレス比較を行うためのアドレス比較器を、必要とせずに実施できるものである。
【００４６】
［第２の実施形態］
図４は、本発明の第２の実施形態にしたがった演算処理装置（マイクロプロセッサ）の構成例を示すものである。ここでは、リピートバッファを備えた命令キャッシュシステムにおいて、リピートバッファに命令キャッシュメモリからの命令コードを格納するとともに、命令キャッシュメモリから命令コードを読み出す際には、命令キャッシュタグＲＡＭを先んじて読む（先引きする）ことで、命令キャッシュメモリへのアクセスにともなう消費電力を削減できるようにした場合について説明する。なお、図１に示した命令キャッシュシステムと同一部分には同一符号を付して、詳しい説明は割愛する。
【００４７】
すなわち、このタグメモリ先引き機能を兼ね備えた命令キャッシュシステム１０Ａは、命令キャッシュメモリ（命令キャッシュデータＲＡＭ（ｗａｙ−０）１１ａ，（ｗａｙ−１）１１ｂ）１１、命令キャッシュタグＲＡＭ１２、命令キャッシュ制御部１３、リピートバッファ１４、エントリポインタ１５、ウェイインジケータ１６、タグ比較器１７、プロセッサ内命令フェッチユニット１８、選択回路１９，２０ａ、および、先引き結果ストレージ２１を備えている。
【００４８】
ここで、「タグメモリ先引き機能」とは、２−ｗａｙ以上のセットアソシアティブ命令キャッシュデータＲＡＭの使用時において、連続してフェッチしようとする命令コードが、命令キャッシュデータＲＡＭのラインの境界をまたいで存在する際に使用可能な機能である。
【００４９】
以下に、タグメモリ先引き機能の動作と、その効果について説明する。たとえば、命令フェッチユニット１８からアドレスの連続した逐次要求が発行される場合を想定する。その際、最初の逐次要求により要求されるフェッチ対象ワード（命令フェッチユニット１８から要求されるフェッチ単位の命令コード）が、ある命令キャッシュデータＲＡＭ１１ａのラインの最終ワードであり、次の逐次要求によって要求されるフェッチ対象ワードが、たとえば、ラインの境界をまたいで別の命令キャッシュデータＲＡＭ１１ｂに存在することが予測されるとする。すると、次の逐次要求により要求されるであろうフェッチ対象ワードのアドレスを、命令キャッシュ制御部１３にてあらかじめ作成する。そして、そのアドレスにしたがって命令キャッシュタグＲＡＭ１２のタグ情報を先引きし、タグ比較器１７でのアドレスとタグ情報との比較結果を先引き結果ストレージ２１に格納する。この先引き結果ストレージ２１内の比較結果を、選択回路２０ａを介して、命令キャッシュ制御部１３が参照することによって、実際に次の逐次要求により要求されるであろうフェッチ対象ワードが存在する、命令キャッシュデータＲＡＭを事前に把握できるようになる。
【００５０】
この機能により、すべての命令キャッシュデータＲＡＭ１１ａ，１１ｂを活性化させることなく、目的の命令コードが格納されている命令キャッシュデータＲＡＭだけを活性化させることで、命令キャッシュデータＲＡＭ１１での消費電力を大幅に削減することが可能である。なお、タグ比較器１７での比較結果が明白な場合は、新たに命令キャッシュデータＲＡＭ１１ａ，１１ｂのラインの境界をまたぐタイミングで、命令キャッシュタグＲＡＭ１２を読む必要はない。
【００５１】
一方、この「タグメモリ先引き機能」は、リピートバッファ１４が有効であり、すでに命令キャッシュデータＲＡＭ１１ａ，１１ｂのラインの境界をまたいで存在する命令コードがリピートバッファ１４内に存在することが明白な場合、「タグメモリ先引き機能」の動作を停止する。これにより、リピートバッファ１４を機能させている際の、命令キャッシュタグＲＡＭ１２の無用な読み出しを防ぐことが可能である。
【００５２】
なお、上記の説明では、タグ先引き動作の発生タイミングを、フェッチ対象ワードがラインの最終ワードの場合を例に説明したが、先引きのタイミングを早めることも、本機能の実現においては十分に可能である。
【００５３】
［第３の実施形態］
図５は、本発明の第３の実施形態にしたがった演算処理装置（マイクロプロセッサ）の構成例を示すものである。ここでは、リピートバッファを備えた命令キャッシュシステムにおいて、リピートバッファを、リピートブロック中の命令コード群の格納のみならず、命令キャッシュメモリのプリフェッチバッファとしての機能をも兼ね備えた多機能バッファとした場合について説明する。なお、図１に示した命令キャッシュシステムと同一部分には同一符号を付して、詳しい説明は割愛する。
【００５４】
すなわち、この命令キャッシュシステム１０Ｂは、命令キャッシュメモリ（命令キャッシュデータＲＡＭ１１ａ，１１ｂ）１１、命令キャッシュタグＲＡＭ１２、命令キャッシュ制御部１３、リピートバッファ（多機能バッファ）１４ａ、エントリポインタ１５、ウェイインジケータ１６、タグ比較器１７、プロセッサ内命令フェッチユニット１８、選択回路１９，２０、および、外部バスインタフェース（Ｉ／Ｆ）２２を備えている。
【００５５】
外部バスインタフェース２２は、外部バス３１を介して、メインメモリ（主記憶装置）３２に接続されている。
【００５６】
本実施形態の場合、リピートバッファ１４ａは、命令キャッシュ制御部１３からの機能スイッチ制御線を介した指示にしたがって、命令キャッシュデータＲＡＭ１１ａ，１１ｂのプリフェッチバッファとしても機能する。つまり、実行中のプログラムにリピートブロックが存在しない場合、リピートバッファ１４ａは、リピートブロック中の命令コード群を格納するためのリピートバッファとしては使用されない。そこで、命令フェッチユニット１８が要求するであろう命令キャッシュデータＲＡＭ１１ａ，１１ｂのワードデータに対応する、外部バス３１上のメインメモリ３２からの命令コードを、あらかじめリピートバッファ１４ａに割り当てられたプリフェッチバッファ機能によって保持させる。こうすることで、実際に命令フェッチユニット１８から命令キャッシュデータＲＡＭ１１ａ，１１ｂに要求が出された際の、外部バスレイテンシを大きく削減できるようになる。
【００５７】
一方で、プリフェッチバッファとしてリピートバッファ１４ａが機能中に、プログラム中のリピートブロックが実行されて、命令フェッチユニット１８から命令キャッシュ制御部１３にリピート要求が発行されたとする。この場合、リピートバッファ１４ａが使用中（この例では、プリフェッチバッファとして保持している命令コードが読み出されているか、もしくは、命令キャッシュデータＲＡＭ１１ａ，１１ｂへのリフィルが行われている事象を指す）であれば、プリフェッチバッファとして保持している命令コードは破棄しない。ただし、プリフェッチバッファとして保持している命令コードを使用していない時は、その命令コードを破棄する。そして、命令キャッシュ制御部１３からの機能スイッチ制御線を介した指示にしたがって、リピートバッファ１４ａは、リピートブロック内の命令コード群を格納するリピートバッファとして機能する。
【００５８】
なお、本実施形態においては、「タグメモリ先引き機能（第２の実施形態参照）」を付加することも可能である。
【００５９】
その他、本願発明は、上記（各）実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。さらに、上記（各）実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。たとえば、（各）実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題（の少なくとも１つ）が解決でき、発明の効果の欄で述べられている効果（の少なくとも１つ）が得られる場合には、その構成要件が削除された構成が発明として抽出され得る。
【図面の簡単な説明】
【００６０】
【図１】本発明の第１の実施形態にしたがった、演算処理装置（マイクロプロセッサ）の構成例を示すブロック図。
【図２】図１のプロセッサにおける、リピートバッファおよびウェイインジケータの動作を説明するために示す図。
【図３】図１のプロセッサにおける、リピートバッファおよびウェイインジケータの動作を説明するために示す図。
【図４】本発明の第２の実施形態にしたがった、演算処理装置（マイクロプロセッサ）の構成例を示すブロック図。
【図５】本発明の第３の実施形態にしたがった、演算処理装置（マイクロプロセッサ）の構成例を示すブロック図。
【符号の説明】
【００６１】
１０，１０Ａ，１０Ｂ…命令キャッシュシステム、１１…命令キャッシュデータＲＡＭ、１１ａ，１１ｂ…セットアソシアティブ命令キャッシュデータＲＡＭ（ｗａｙ−０，ｗａｙ−１）、１２…命令キャッシュタグＲＡＭ、１３…命令キャッシュ制御部、１４，１４ａ…リピートバッファ、１５…エントリポインタ、１６…ウェイインジケータ、２１…先引き結果ストレージ、３２…メインメモリ。
【図１】
0005159258.tif 000002
【図２】
0005159258.tif 000003
【図３】
0005159258.tif 000004
【図４】
0005159258.tif 000005
【図５】
0005159258.tif 000006