(57)【特許請求の範囲】
【請求項１】
命令キャッシュに格納されている命令を取り出して実行するプロセッサであって、
前記命令キャッシュから取り出した１以上の命令を格納して供給する主命令バッファと、
前記命令キャッシュから取り出した１以上の命令を格納して副次的に供給し、前記命令キャッシュから取り出した１以上の命令が充填されたか否かを示すフラグ情報が記憶されるフラグ記憶手段を有する第１の副命令バッファと、
前記主命令バッファおよび前記第１の副命令バッファのいずれかを命令供給源に選択する第１のセレクタと、
前記命令キャッシュから取り出し前記主命令バッファに格納する命令のアドレスを保持する主命令用アドレスレジスタと、
前記命令キャッシュから取り出し前記第１の副命令バッファに格納する命令のアドレスを保持する第１の副命令用アドレスレジスタと、
前記命令キャッシュから取り出すアドレスを、前記主命令用アドレスレジスタに保持されたアドレスと前記第１の副命令用アドレスレジスタに保持されたアドレスのいずれかから選択する第２のセレクタと、
前記第１のセレクタを介して前記主命令バッファから命令を供給し、前記命令キャッシュの第１のアドレスから取り出した１以上の命令を前記第１の副命令バッファに充填することが示される第１の充填命令が実行された場合には、前記第１のアドレスを前記第１の副命令用アドレスレジスタに設定し、前記第２のセレクタを介して前記第１の副命令用アドレスレジスタを参照して前記第１のアドレスから１以上の命令を取り出して前記第１の副命令バッファに格納し、前記第１の副命令バッファに格納された命令が繰り返し実行される場合で、かつ、前記命令キャッシュから取り出した１以上の命令が前記第１の副命令バッファに充填されたことを示すフラグ情報が前記フラグ記憶手段に記憶されている場合には、前記第１のセレクタを制御して前記第１の副命令バッファを選択し、前記第１のセレクタを介して前記第１の副命令バッファから命令を繰り返し供給する命令フェッチ制御手段とを備え、
前記命令キャッシュの前記第１のアドレスから取り出された命令が前記副命令バッファに充填された場合に、前記第１のアドレスから取り出された命令が充填されていることを示すフラグ情報が前記フラグ記憶手段に記憶されることを特徴とするプロセッサ。
【請求項２】
新たな第１の充填命令が実行された場合に、新たな第１のアドレスから取り出された命令が充填されていないことを示すフラグ情報が前記フラグ記憶手段に記憶される
ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記命令フェッチ制御手段は、さらに、
前記第１の充填命令が実行された場合には、前記命令キャッシュから取り出した１以上の命令を前記主命令バッファに格納する合間を縫って、前記第１のアドレスから１以上の命令を取り出して前記第１の副命令バッファに格納する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記プロセッサは、さらに、
前記命令キャッシュから取り出した１以上の命令を格納して副次的に供給する第２の副命令バッファと、
前記命令キャッシュから取り出し前記第２の副命令バッファに格納する命令のアドレスを保持する第２の副命令用アドレスレジスタと
を備え、
前記第１のセレクタは、さらに、
前記主命令バッファ、前記第１の副命令バッファ、および前記第２の副命令バッファのいずれかを命令供給源に選択し、
前記第２のセレクタは、さらに、
前記命令キャッシュから取り出す命令のアドレスを、前記主命令用アドレスレジスタ、前記第１の副命令用アドレスレジスタ、前記第２の副命令用アドレスレジスタのいずれかに保持されたアドレスから選択し、
前記命令フェッチ制御手段は、さらに、
前記命令キャッシュの第２のアドレスから取り出した１以上の命令を前記第２の副命令バッファに充填することが示される第２の充填命令が実行された場合には、前記第２のアドレスを前記第２の副命令用アドレスレジスタに設定し、前記第２のセレクタを介して前記第２の副命令用アドレスレジスタを参照して前記第２のアドレスから１以上の命令を取り出して前記第２の副命令バッファに格納し、前記第２の副命令バッファに格納された命令を実行するための命令が実行された場合には、前記第１のセレクタを制御して前記第２の副命令バッファを選択し、前記セレクタを介して前記第２の副命令バッファから命令を繰り返し供給する
ことを特徴とする請求項１に記載のプロセッサ。
【請求項５】
前記命令キャッシュに格納されている命令列に対して、前記第１のアドレスは、分岐命令の分岐先アドレスであり、前記第２のアドレスは、サブルーチンからの戻り先アドレスであって、
前記第１の副命令バッファは、前記第１のアドレスから所定数の命令を格納し、
前記第２の副命令バッファは、前記第２のアドレスから所定数の命令を格納する
ことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
命令キャッシュに格納されている命令を取り出して実行する命令充填方法であって、
前記命令キャッシュから取り出した１以上の命令を格納して供給する主命令バッファと、
前記命令キャッシュから取り出した１以上の命令を格納して副次的に供給し、前記命令キャッシュから取り出した１以上の命令が充填されたか否かを示すフラグ情報が記憶されるフラグ記憶手段を有する第１の副命令バッファと、
前記主命令バッファおよび前記第１の副命令バッファのいずれかを命令供給源に選択する第１のセレクタと、
前記命令キャッシュから取り出し前記主命令バッファに格納する命令のアドレスを保持する主命令用アドレスレジスタと、
前記命令キャッシュから取り出し前記第１の副命令バッファに格納する命令のアドレスを保持する第１の副命令用アドレスレジスタと、
前記命令キャッシュから取り出すアドレスを、前記主命令用アドレスレジスタに保持されたアドレスと前記第１の副命令用アドレスレジスタに保持されたアドレスのいずれかから選択する第２のセレクタと
を制御して、
前記第１のセレクタを介して前記主命令バッファから命令を供給し、前記命令キャッシュの第１のアドレスから取り出した１以上の命令を前記第１の副命令バッファに充填することが示される第１の充填命令が実行された場合には、前記第１のアドレスを前記第１の副命令用アドレスレジスタに設定し、前記第２のセレクタを介して前記第１の副命令用アドレスレジスタを参照して前記第１のアドレスから１以上の命令を取り出して前記第１の副命令バッファに格納し、
前記第１の副命令バッファに格納された命令が繰り返し実行される場合で、かつ、前記命令キャッシュから取り出した１以上の命令が前記第１の副命令バッファに充填されたことを示すフラグ情報が前記フラグ記憶手段に記憶されている場合には、前記第１のセレクタを制御して前記第１の副命令バッファを選択し、前記第１のセレクタを介して前記第１の副命令バッファから命令を必要回数供給し、
前記命令キャッシュの前記第１のアドレスから取り出された命令が前記副命令バッファに充填された場合に、前記第１のアドレスから取り出された命令が格納されていることを示すフラグ情報を前記フラグ記憶手段に記憶し、
新たな第１の充填命令が実行された場合に、新たな第１のアドレスから取り出された命令が充填されていないことを示すフラグ情報を前記フラグ記憶手段に記憶する
ことを特徴とする命令充填方法。
【請求項７】
前記命令充填方法は、さらに、新たな第１の充填命令が実行された場合に、新たな第１のアドレスから取り出された命令が充填されていないことを示すフラグ情報を前記フラグ記憶手段に記憶する
ことを特徴とする請求項６に記載の命令充填方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令キャッシュに格納されている命令を取り出して実行するプロセッサなどとして、特に、ループ部分の命令を実行する場合において、命令キャッシュへのアクセスを省略しても命令を供給することができるプロセッサに関する。
【背景技術】
【０００２】
近年、携帯電話機、デジタルビデオカメラ、デジタルビデオレコーダなどのデジタル家電製品が普及している。そして、これらの製品に組み込まれるプロセッサとして低電力で処理能力が高いプロセッサが求められている。
【０００３】
これに対して、例えば、分岐予測のミスに伴うペナルティサイクルを短縮することで、消費電力を抑え処理能力を高めたプロセッサが提案されている（例えば、非特許文献１参照。）。
【０００４】
具体的には、このプロセッサは、命令フェッチを管理する部分に二つの命令バッファを備え、通常、どちらか一方の命令バッファを用いて命令キャッシュからフェッチした命令を蓄積して供給する。そして、分岐命令を実行するときに、二つの命令バッファを用いて命令キャッシュからフェッチした後続命令および分岐先命令を別々に蓄積し、分岐先に応じて、どちらか一方の命令バッファから供給する。
【０００５】
例えば、現在、命令の供給源として第１の命令バッファが利用されている場合には、分岐命令のデコードステージで、分岐先命令（ＴＡＫＥＮ）と予測すると、命令キャッシュから分岐先命令をフェッチして第２の命令バッファに蓄積して供給する。そして、分岐命令の実行ステージで、予測がミスしていれば、すなわち、実際の分岐では後続命令（ＮＯＴ  ＴＡＫＥＮ）とすれば、第１の命令バッファの命令をパイプラインに投入し、第２の命令バッファの命令を廃棄し、命令フェッチのレイテンシによって生じるペナルティを短縮する。
【０００６】
さらに、このプロセッサは、これらの命令バッファとは別に第３の命令バッファも備える。そして、分岐命令を実行する前に、その分岐命令の分岐先アドレスを特定することができる命令を実行し、その分岐先アドレスの命令を先読みして第３の命令バッファに蓄積し、命令フェッチのレイテンシによって生じるペナルティを短縮する。
【非特許文献１】Naohiko IRIE, Fumio ARAKAWA, Kunio UCHIYAMA, Shinichi YOSHIOKA, Atsushi HASEGAWA, Kevin IADONATE, Mark DEBBAGE, David SHEPHERD, and MargaretGEARTY,  "Branch Micro-Architecture of an Embedded Processor with Split Branch Architecture for Digital Consumer Products,"  IEICE TRANS. ELECTRON., VOL.E85-C, NO.2 FEBRUARY 2002, pp.315-322.
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、このプロセッサは、性質の異なる二種類の命令バッファを備えるため、同一の分岐命令であっても、分岐予測のミスに応じて、利用する命令バッファを使い分ける必要がある。結果、命令バッファを切り替える制御が複雑になる。また、分岐命令のデコードステージで、命令キャッシュから分岐先命令をフェッチして第２の命令バッファに蓄積するため、フェッチすることができる期間が短く、十分な命令を蓄積して供給することが困難である。結果、より低電力で高速にループ処理などを実行させるために、命令キャッシュのアクセス頻度を下げようとして命令バッファの容量を大きくしても、その効果が小さいという問題がある。
【０００８】
そこで、本発明は前記問題に鑑みてなされたものであり、低電力で高速にループ処理などを実行させることができるプロセッサを提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記目的を達成するため、本発明に係わるプロセッサは、（ａ）命令キャッシュに格納されている命令を取り出して実行するプロセッサであって、（ｂ）前記命令キャッシュから取り出した１以上の命令を格納して供給する主命令バッファと、（ｃ）前記命令キャッシュから取り出した１以上の命令を格納して副次的に供給し、前記命令キャッシュから取り出した１以上の命令が充填されたか否かを示すフラグ情報が記憶されるフラグ記憶手段を有する第１の副命令バッファと、（ｄ）前記主命令バッファおよび前記第１の副命令バッファのいずれかを命令供給源に選択する第１のセレクタと、（ｅ）前記命令キャッシュから取り出し前記主命令バッファに格納する命令のアドレスを保持する主命令用アドレスレジスタと、（ｆ）前記命令キャッシュから取り出し前記第１の副命令バッファに格納する命令のアドレスを保持する第１の副命令用アドレスレジスタと、（ｇ）前記命令キャッシュから取り出すアドレスを、前記主命令用アドレスレジスタに保持されたアドレスと前記第１の副命令用アドレスレジスタに保持されたアドレスのいずれかから選択する第２のセレクタと、（ｈ）前記第１のセレクタを介して前記主命令バッファから命令を供給し、前記命令キャッシュの第１のアドレスから取り出した１以上の命令を前記第１の副命令バッファに充填することが示される第１の充填命令が実行された場合には、前記第１のアドレスを前記第１の副命令用アドレスレジスタに設定し、前記第２のセレクタを介して前記第１の副命令用アドレスレジスタを参照して前記第１のアドレスから１以上の命令を取り出して前記第１の副命令バッファに格納し、前記第１の副命令バッファに格納された命令が繰り返し実行される場合で、かつ、前記命令キャッシュから取り出した１以上の命令が前記第１の副命令バッファに充填されたことを示すフラグ情報が前記フラグ記憶手段に記憶されている場合には、前記第１のセレクタを制御して前記第１の副命令バッファを選択し、前記第１のセレクタを介して前記第１の副命令バッファから命令を繰り返し供給する命令フェッチ制御手段とを備え、前記命令キャッシュの前記第１のアドレスから取り出された命令が前記副命令バッファに充填された場合に、前記第１のアドレスから取り出された命令が充填されていることを示すフラグ情報が前記フラグ記憶手段に記憶されることを特徴とする。
【００１０】
これによって、メインで利用される主命令バッファ以外に副次的に利用される第１の副命令バッファなどを備えることにより、ループ部分などに対して、繰り返し命令キャッシュにアクセスしてフェッチすることを省略することができる。そして、第１の副命令バッファなどから命令を供給することによって、パイプラインのペナルティを短縮することができ、分岐によって生じるパイプラインの空きを埋めることができる。さらに、命令キャッシュへのアクセスが省略されることによって、アクセス待ちなどを回避することができ、実行処理の性能を向上することができる。また、第１の充填命令で、フェッチする期間を調整して第１の副命令バッファに格納する期間を調整することができる。これにより、命令バッファの容量を大きくしても、その効果を十分に発揮できる程、十分な期間を見繕って前もって第１の充填命令を実行させるようにすることで、十分な命令を蓄積して供給することができる。結果、命令キャッシュのアクセス頻度を下げて、消費電力を抑えながら高速にループ処理などを実行させることができる。
【００１１】
なお、本発明は、プロセッサとして実現されるだけではなく、プロセッサを制御する方法（以下、命令充填方法と呼称する。）などとして実現されるとしてもよい。また、本発明に係わるプロセッサによって提供される機能（以下、命令充填機能と呼称する。）が組み込まれたＬＳＩ（Large Scale Integration）、命令充填機能をＦＰＧＡ（Field Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）などのプログラマブル・ロジック・デバイスに形成するＩＰコア（以下、命令充填コアと呼称する。）、および命令充填コアを記録した記録媒体などとして実現されるとしてもよい。
【発明の効果】
【００１２】
以上、本発明に係わるプロセッサによれば、メインで利用される主命令バッファ以外に副次的に利用される第１の副命令バッファおよび第２の副命令バッファなどを備えることにより、ループ部分およびサブルーチンのリターン部分などに対して、繰り返し命令キャッシュにアクセスしてフェッチすることを省略することができる。そして、第１の副命令バッファおよび第２の副命令バッファなどから命令を供給することによって、パイプラインのペナルティを短縮することができ、分岐によって生じるパイプラインの空きを埋めることができる。さらに、命令キャッシュへのアクセスが省略されることによって、アクセス待ちなどを回避することができ、実行処理の性能を向上することができる。また、第１の充填命令で、フェッチする期間を調整して第１の副命令バッファに格納する期間を調整することができる。これにより、命令バッファの容量を大きくしても、その効果を十分に発揮できる程、十分な期間を見繕って前もって第１の充填命令を実行させるようにすることで、十分な命令を蓄積して供給することができる。結果、命令キャッシュのアクセス頻度を下げて、消費電力を抑えながら高速にループ処理などを実行させることができる。
【発明を実施するための最良の形態】
【００１３】
（実施の形態１）
以下、本発明に係わる実施の形態１について図面を参照しながら説明する。
【００１４】
本実施の形態におけるプロセッサは、命令を通常格納する命令バッファとは別に、ループ部分の命令を格納する命令バッファを備え、ループ部分の命令を実行するときに、繰り返し命令キャッシュからフェッチする代わりに、ループ部分の命令を一度フェッチして格納している命令バッファから供給することを特徴とする。
【００１５】
さらに、これらの命令バッファとは別に、サブルーチンのリターン部分の命令を格納する命令バッファも備え、サブルーチンのリターン部分の命令を実行するときに、サブルーチンのリターン部分の命令を一度フェッチして格納している命令バッファから供給することも特徴とする。
【００１６】
以上の点を踏まえて本実施の形態におけるプロセッサについて説明する。
【００１７】
まず、本実施の形態におけるプロセッサの構成について説明する。
【００１８】
図１に示されるように、プロセッサ１００は、命令を通常格納する通常命令バッファ１２２とは別に、命令キャッシュ１０に格納されている命令列のうち、ループ部分の命令を格納するＴＡＲ用命令バッファ１２３を備える。そして、ループ部分の命令を実行する場合には、ＴＡＲ用命令バッファ１２３に格納されている命令を命令実行部１０１に供給する。
【００１９】
さらに、プロセッサ１００は、通常命令バッファ１２２およびＴＡＲ用命令バッファ１２３とは別に、サブルーチンのリターン部分の命令を格納するＬＲ用命令バッファ１２４も備える。そして、サブルーチンのリターン部分の命令を実行する場合には、ＬＲ用命令バッファ１２４に格納されている命令を命令実行部１０１に供給する。
【００２０】
ここでは、一例として、プロセッサ１００は、命令実行部１０１、命令フェッチ制御部１０２、セレクタ１１１、通常命令アドレスレジスタ１１２、ＴＡＲ用命令アドレスレジスタ１１３、ＬＲ用命令アドレスレジスタ１１４、セレクタ１２１、通常命令バッファ１２２、ＴＡＲ用命令バッファ１２３、ＬＲ用命令バッファ１２４などを備える。
【００２１】
命令実行部１０１は、セレクタ１２１を介して供給される命令を実行する。
【００２２】
命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令およびＬＲ用充填命令が実行されていない場合において、通常命令バッファ１２２に空きができる見込みがあれば、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択する。そして、通常命令アドレスレジスタ１１２に設定されたアドレスの命令を命令キャッシュ１０からフェッチし、フェッチした命令を通常命令バッファ１２２に格納する。
【００２３】
また、命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令が実行されれば、ＴＡＲ用充填命令に設定された充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＴＡＲ用命令アドレスレジスタ１１３に設定する。さらに、通常命令を通常命令バッファ１２２に充填する合間を縫って、ＴＡＲ用充填命令によって特定されるループ部分の命令をＴＡＲ用命令バッファ１２３に充填する。このとき、命令フェッチ制御部１０２は、合間を縫ってセレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択する。そして、命令実行部１０１において、ＴＡＲ用充填命令によって特定されるループ部分の命令が実行されるときに、ＴＡＲ用命令バッファ１２３から命令実行部１０１に命令を供給する。
【００２４】
同様に、命令フェッチ制御部１０２は、命令実行部１０１において、ＬＲ用充填命令が実行されれば、ＬＲ用充填命令に設定された充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＬＲ用命令アドレスレジスタ１１４に設定する。さらに、通常命令バッファ１２２に命令を充填する合間を縫って、ＬＲ用充填命令によって特定されるサブルーチンのリターン部分をＬＲ用命令バッファ１２４に充填する。このとき、命令フェッチ制御部１０２は、合間を縫ってセレクタ１１１を制御してＬＲ用命令アドレスレジスタ１１４を選択する。そして、命令実行部１０１において、ＬＲ用充填命令によって特定されるサブルーチンのリターン部分の命令が実行されるときに、ＬＲ用命令バッファ１２４から命令実行部１０１に命令を供給する。
【００２５】
「ＴＡＲ用充填命令」とは、例えば、下記のＴＡＲ用充填命令で示されるように、”ＬＡＢＥＬ”によって特定されるアドレスからループ部分が開始し、そのループ部分をＴＡＲ用命令バッファ１２３に格納することが示される命令である。
【００２６】
［ＴＡＲ用充填命令］  ＳＥＴＴＡＲ  ＬＡＢＥＬ
例えば、図２に示されるＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”のように、アドレス”ＬＡＢＥＬ＃１”の命令”Ｉ＃９”からＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”までのループ部分をＴＡＲ用命令バッファ１２３に充填することを指示する命令をいう。ここで、アドレス”ＬＡＢＥＬ＃１”は、分岐命令”ＪＵＭＰＴＡＲ＃１”に設定される分岐先アドレスでもあり、ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”によって充填が開始されるアドレス（以下、充填開始アドレスとも呼称する。）でもある。
【００２７】
なお、図２に示されるように、ここでは、ループ部分、すなわち、太い枠で囲まれた命令列が実行される前にＴＡＲ用充填命令が実行される。また、ここでは、話を簡単にするために、命令キャッシュ１０からフェッチされる命令長を固定長とし、１サイクルあたり１命令を命令キャッシュ１０からフェッチするとしているが、命令長を可変長としてもよいし、命令キャッシュ１０から１サイクルあたり１命令以上、例えば、４命令をフェッチするとしてもよい。
【００２８】
なお、命令実行部１０１において、ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”が実行されれば、ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”を含む太い枠で囲まれた命令列がＴＡＲ用命令バッファ１２３に充填される。
【００２９】
なお、一つのＴＡＲ用充填命令の代わりに、ループ部分をＴＡＲ用命令バッファ１２３に格納することが示される命令と、そのループ部分の開始アドレスが示される命令との二つの命令としてもよい。
【００３０】
「ＬＲ用充填命令」とは、例えば、下記のＬＲ用充填命令で示されるように、サブルーチンの戻り先アドレスによって特定されるアドレスからリターン部分が開始し、そのリターン部分をＬＲ用命令バッファ１２４に格納することが示される命令である。
【００３１】
［ＬＲ用充填命令］  ＳＥＴＬＲ
例えば、図２に示されるＬＲ用充填命令”ＳＥＴＬＲ＃１”のように、アドレス”ＬＡＢＥＬ＃２”の命令”Ｉ＃１８”から所定の命令数分のリターン部分、例えば、４命令だと命令”Ｉ＃２１”までのリターン部分をＬＲ用命令バッファ１２４に充填することを指示する命令をいう。ここで、アドレス”ＬＡＢＥＬ＃２”は、リターン命令”ＲＥＴＬＲ＃１”に設定される戻り先アドレスでもあり、ＬＲ用充填命令”ＳＥＴＬＲ＃１”によって充填が開始されるアドレス（以下、充填開始アドレスとも呼称される。）でもある。
【００３２】
なお、図２に示されるように、ここでは、リターン部分、すなわち、太い枠で囲まれた命令列が実行される前にＬＲ用充填命令が実行される。
【００３３】
なお、命令実行部１０１において、ＬＲ用充填命令”ＳＥＴＬＲ＃１”が実行されれば、ＣＡＬＬＬＲ＃１の後続命令”Ｉ＃１８”を含む太い枠で囲まれた命令列がＬＲ用命令バッファ１２４に充填される。
【００３４】
なお、一つのＬＲ用充填命令の代わりに、リターン部分をＬＲ用命令バッファ１２４に格納することが示される命令と、そのリターン部分の開始アドレスが示される命令との二つの命令としてもよい。
【００３５】
セレクタ１１１は、命令フェッチ制御部１０２からの指示に応じて、通常命令アドレスレジスタ１１２、ＴＡＲ用命令アドレスレジスタ１１３、およびＬＲ用命令アドレスレジスタ１１４のいずれかの命令アドレスレジスタを選択する。そして、選択した命令アドレスレジスタに設定されているアドレスを命令キャッシュ１０に出力する。
【００３６】
通常命令アドレスレジスタ１１２は、命令を取り出す際に通常利用される命令アドレスレジスタである。
【００３７】
ＴＡＲ用命令アドレスレジスタ１１３は、ＴＡＲ用充填命令によって特定されるループ部分の命令を取り出すときに利用される命令アドレスレジスタである。
【００３８】
ＬＲ用命令アドレスレジスタ１１４は、ＬＲ用充填命令によって特定されるリターン部分の命令を取り出すときに利用される命令アドレスレジスタである。
【００３９】
「アドレスレジスタ」とは、命令キャッシュ１０などから命令を取り出す際に、その命令のアドレスが登録されるレジスタをいう。
【００４０】
セレクタ１２１は、命令フェッチ制御部１０２からの指示に応じて、通常命令バッファ１２２、ＴＡＲ用命令バッファ１２３、およびＬＲ用命令バッファ１２４のいずれかの命令バッファを選択する。そして、選択した命令バッファに充填されている命令を命令実行部１０１に供給する。
【００４１】
通常命令バッファ１２２は、通常、命令を蓄積して供給する命令バッファである。
【００４２】
ＴＡＲ用命令バッファ１２３は、ＴＡＲ用充填命令によって特定されるループ部分の命令を格納して供給する命令バッファである。
【００４３】
ＬＲ用命令バッファ１２４は、ＬＲ用充填命令によって特定されるリターン部分の命令を格納して供給する命令バッファである。
【００４４】
なお、図３Ａ、図３Ｂに示されるように、ＴＡＲ用命令バッファ１２３は、命令供給源として選択されても、ループ部分の命令がＴＡＲ用命令バッファ１２３に充填中または充填が未実行のときは、Ｖａｌｉｄ  ｂｉｔ１３３に保持されている値”０”（Ｆ１４３）を、セレクタ１２１を介して命令実行部１０１に出力し、充填が完了していないことを知らせる（Ｒ１４１）。一方、充填が完了すると、Ｖａｌｉｄ  ｂｉｔとして値”１”を出力して充填が完了したことを知らせる。また、命令実行部１０１においてＴＡＲ用充填命令が実行され、ＴＡＲ用命令アドレスレジスタ１１３に充填開始アドレスが設定される場合には、命令フェッチ制御部１０２からＴＡＲ用命令アドレスレジスタ１１３へ書き込み要求信号”１”を出力する。このとき、図３Ｂに示されるように、論理表１４０に基づいて、Ｖａｌｉｄ  ｂｉｔとして値”０”が設定され、ＴＡＲ用命令バッファ１２３が選択されても、セレクタ１２１を介して命令実行部１０１に充填されていないことを知らせ（Ｒ１４５）、ＴＡＲ用命令バッファ１２３から命令が供給されない。なお、ＬＲ用命令バッファ１２４についても同様である。
【００４５】
続いて、本実施の形態におけるプロセッサの動作について説明する。
【００４６】
図４に示されるように、命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令が実行されると、ＴＡＲ用充填命令に設定された充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＴＡＲ用命令アドレスレジスタ１１３に設定する。そして、通常命令を通常命令バッファ１２２に充填する合間を縫って、ＴＡＲ用充填命令によって特定されるループ部分の命令をＴＡＲ用命令バッファ１２３に充填する（充填状態Ｓ１１）。このとき、命令フェッチ制御部１０２は、合間を縫ってセレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択する。
【００４７】
さらに、命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令と対応するＴＡＲ用分岐命令が実行され、ループ部分の命令が実行されるときに、ＴＡＲ用命令バッファ１２３から命令実行部１０１に命令を供給する（供給状態Ｓ１２）。このとき、命令フェッチ制御部１０２は、セレクタ１２１を制御してＴＡＲ用命令バッファ１２３を命令供給源として選択する。
【００４８】
さらに、命令フェッチ制御部１０２は、命令実行部１０１においてループ部分が繰り返し実行される場合には、ＴＡＲ用命令バッファ１２３から命令を繰り返し供給する。そして、命令実行部１０１において、ＴＡＲ用分岐命令が実行され、ループ部分を抜けると、通常命令バッファ１２２から命令実行部１０１に命令を供給する（通常状態Ｓ１０）。このとき、命令フェッチ制御部１０２は、セレクタ１２１を制御して通常命令バッファ１２２を命令供給源として選択する。
【００４９】
同様に、命令フェッチ制御部１０２は、命令実行部１０１において、ＬＲ用充填命令が実行されると、ＬＲ用充填命令に設定された充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＬＲ用命令アドレスレジスタ１１４に設定する。そして、通常命令バッファ１２２に命令を充填する合間を縫って、ＬＲ用充填命令によって特定されるリターン部分の命令をＬＲ用命令バッファ１２４に充填する（充填状態Ｓ１１）。このとき、命令フェッチ制御部１０２は、合間を縫ってセレクタ１１１を制御してＬＲ用命令アドレスレジスタ１１４を選択する。
【００５０】
さらに、命令フェッチ制御部１０２は、命令実行部１０１において、ＬＲ用充填命令と対応するＬＲ用リターン命令が実行され、リターン部分の命令が実行される場合には、ＬＲ用命令バッファ１２４から命令実行部１０１に命令を供給する（供給状態Ｓ１２）。このとき、命令フェッチ制御部１０２は、セレクタ１２１を制御してＬＲ用命令バッファ１２４を命令供給源として選択する。
【００５１】
さらに、命令フェッチ制御部１０２は、命令実行部１０１において、ＬＲ用リターン命令が実行され、リターン部分を抜けると、通常命令バッファ１２２から命令実行部１０１に命令を供給する（通常状態Ｓ１０）。このとき、命令フェッチ制御部１０２は、セレクタ１２１を制御して通常命令バッファ１２２を命令供給源として選択する。
【００５２】
続いて、本実施の形態における命令フェッチ制御部１０２において命令充填時の処理（以下、命令充填処理と呼称する。）について説明する。
【００５３】
図５に示されるように、命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令およびＬＲ用充填命令が実行されていない場合において（Ｓ１０１：Ｎｏ、Ｓ１０２：Ｎｏ）、通常命令バッファ１２２に空きができる見込みがあれば（Ｓ１０３：Ｙｅｓ）、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択する（Ｓ１０４）。そして、通常命令アドレスレジスタ１１２に設定されたアドレスの命令を命令キャッシュ１０からフェッチし（Ｓ１０５）、フェッチした命令を通常命令バッファ１２２に格納する（Ｓ１０６）。
【００５４】
一方、図５、図６Ａに示されるように、命令フェッチ制御部１０２は、命令実行部１０１において、ＴＡＲ用充填命令が実行された場合には（Ｓ１０１：Ｙｅｓ）、ＴＡＲ用命令の充填が完了するまで（Ｓ１０７：Ｎｏ）、通常命令バッファ１２２に空きができる見込みがないときを見計らって（Ｓ１０８：Ｎｏ）、セレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択する（Ｓ１０９）。そして、ＴＡＲ用命令アドレスレジスタ１１３に設定されたアドレスの命令を命令キャッシュ１０からフェッチし（Ｓ１１０）、フェッチした命令をＴＡＲ用命令バッファ１２３に格納する（Ｓ１１１）。
【００５５】
同様に、図５、図６Ｂに示されるように、命令フェッチ制御部１０２は、命令実行部１０１において、ＬＲ用充填命令が実行された場合には（Ｓ１０２：Ｙｅｓ）、ＬＲ用命令の充填が完了するまで（Ｓ１１２：Ｎｏ）、通常命令バッファ１２２に空きができる見込みがないときを見計らって（Ｓ１１３：Ｎｏ）、セレクタ１１１を制御してＬＲ用命令アドレスレジスタ１１４を選択する（Ｓ１１４）。そして、ＬＲ用命令アドレスレジスタ１１４に設定されたアドレスの命令を命令キャッシュ１０からフェッチし（Ｓ１１５）、フェッチした命令をＬＲ用命令バッファ１２４に格納する（Ｓ１１６）。
【００５６】
続いて、本実施の形態における命令フェッチ制御部１０２において命令供給時の処理（以下、命令供給処理と呼称する。）について説明する。
【００５７】
図７に示されるように、命令フェッチ制御部１０２は、セレクタ１２１を制御して通常命令バッファ１２２を選択し（Ｓ１２１）、選択した命令バッファから命令実行部１０１に命令を供給する（Ｓ１２２）。そして、命令実行部１０１において実行された命令に応じて、下記（１）〜（５）の処理を実行する。
【００５８】
（１）命令実行部１０１において実行された命令がＴＡＲ用充填命令である場合には、命令フェッチ制御部１０２は、ＴＡＲ用充填命令に設定された充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＴＡＲ用アドレスレジスタ１１３に設定する（Ｓ１２４）。そして、選択した命令バッファから命令を供給する（Ｓ１２２）。
【００５９】
（２）命令実行部１０１において実行された命令がＬＲ用充填命令である場合には、命令フェッチ制御部１０２は、ＬＲ用充填命令に設定されていた充填開始アドレスを命令実行部１０１から受け取り、受け取った充填開始アドレスをＬＲ用アドレスレジスタ１１４に設定する（Ｓ１２５）。そして、選択した命令バッファから命令を供給する（Ｓ１２２）。
【００６０】
（３）命令実行部１０１において実行された命令がＴＡＲ用分岐命令（１回目）である場合において、分岐先アドレスに分岐しない場合には、命令フェッチ制御部１０２は、選択した命令バッファ、すなわち、通常命令バッファ１２２から命令を供給する（Ｓ１２２）。
【００６１】
一方、命令フェッチ制御部１０２は、分岐先アドレスに分岐する場合には、セレクタ１２１を制御してＴＡＲ用命令バッファ１２３を選択する（Ｓ１２７）。さらに、図８Ａに示されるように、ＴＡＲ用充填命令によって特定されるループ部分がＴＡＲ用命令バッファ１２３に充填されるまで（Ｓ１３１：Ｎｏ）、セレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択し（Ｓ１３３）、ＴＡＲ用命令アドレスレジスタ１１３に設定されたアドレスの命令を命令キャッシュ１０からフェッチし（Ｓ１３３）、フェッチした命令をＴＡＲ用命令バッファ１２３に格納する（Ｓ１３４）。そして、ＴＡＲ用充填命令によって特定されるループ部分が充填されると（Ｓ１３１：Ｙｅｓ）、選択した命令バッファ、すなわち、ＴＡＲ用命令バッファ１２３から命令を供給する（Ｓ１２２）。
【００６２】
（４）命令実行部１０１において実行された命令がＴＡＲ用分岐命令（２回目以降）である場合において、分岐先アドレスに分岐する場合には（Ｓ１２８：Ｙｅｓ）、命令フェッチ制御部１０２は、選択した命令バッファ、すなわち、ＴＡＲ用命令バッファ１２３から命令を供給する（Ｓ１２２）。一方、分岐先アドレスに分岐しない場合には（Ｓ１２９：Ｎｏ）、セレクタ１２１を制御して通常命令バッファ１２２を選択する（Ｓ１２９）。そして、選択した命令バッファ、すなわち、通常命令バッファ１２２から命令を供給する（Ｓ１２２）。
【００６３】
（５）命令実行部１０１において実行された命令がＬＲ用リターン命令である場合には、命令フェッチ制御部１０２は、セレクタ１２１を制御してＬＲ用命令バッファ１２４を選択する（Ｓ１３０）。さらに、図８Ｂに示されるように、ＬＲ用充填命令によって特定されるリターン部分がＬＲ用命令バッファ１２４に充填されるまで（Ｓ１３５：Ｎｏ）、セレクタ１１１を制御してＬＲ用命令アドレスレジスタ１１４を選択し（Ｓ１３６）、ＬＲ用命令アドレスレジスタ１１４に設定されたアドレスの命令を命令キャッシュ１０からフェッチし（Ｓ１３７）、フェッチした命令をＬＲ用命令バッファ１２４に格納する（Ｓ１３８）。そして、ＬＲ用リターン命令の戻り先命令を含むリターン部分が充填されると（Ｓ１３５：Ｙｅｓ）、選択した命令バッファ、すなわち、ＬＲ用命令バッファ１２４から命令を供給する（Ｓ１２２）。
【００６４】
続いて、本実施の形態におけるプロセッサの動作例について説明する。
【００６５】
図９に示されるように、ここでは、一例として、通常命令バッファ１２２、ＴＡＲ用命令バッファ１２３、およびＬＲ用命令バッファ１２４として、３命令が充填できる命令バッファとする。
【００６６】
なお、図９において、ＩＢは、通常命令バッファ１２２を示す。また、ＩＡＲ１１２は、通常命令アドレスレジスタ１１２を示す。さらに、ＴＡＲ１１３は、ＴＡＲ用命令アドレスレジスタ１１３を示す。
【００６７】
また、命令フェッチアドレス”Ａ０”〜”Ａ２”に格納されている命令を”Ｉ＃Ａ０”〜”Ｉ＃Ａ２”とし、命令フェッチアドレス”Ｂ０”〜”Ｂ２”に格納されている命令を”Ｉ＃Ｂ０”〜”Ｉ＃Ｂ２”とする。
【００６８】
「命令フェッチアドレス」とは、フェッチ対象の命令が格納されているアドレスをいう。
【００６９】
さらに、命令”Ｉ＃Ａ０”〜”Ｉ＃Ａ２”については、通常命令バッファ１２２に格納され、命令”Ｉ＃Ｂ０”〜”Ｉ＃Ｂ２”については、ＴＡＲ用命令バッファ１２３に格納される。
【００７０】
なお、格納されるにあたっては、下記（１）〜（７）の順に格納される。
【００７１】
（１）時間Ｔ１〜Ｔ２において、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがあることから、通常命令アドレスレジスタ１１２に命令フェッチアドレス”Ａ０”を設定する。
【００７２】
（２）時間Ｔ２〜Ｔ３において、命令フェッチ制御部１０２は、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択し、選択した通常命令アドレスレジスタ１１２に設定されている命令フェッチアドレス”Ａ０”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ａ０”によって特定される命令”Ｉ＃Ａ０”を命令キャッシュ１０からフェッチする。
【００７３】
また、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがないことから、ＴＡＲ用命令アドレスレジスタ１１３に命令フェッチアドレス”Ｂ０”を設定する。
【００７４】
（３）時間Ｔ３〜Ｔ４において、命令フェッチ制御部１０２は、フェッチした命令”Ｉ＃Ａ０”を通常命令バッファ１２２に格納する。
【００７５】
また、命令フェッチ制御部１０２は、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択し、選択した通常命令アドレスレジスタ１１２に設定されている命令フェッチアドレス”Ｂ０”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ｂ０”によって特定される命令”Ｉ＃Ｂ０”を命令キャッシュ１０からフェッチする。
【００７６】
また、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがあることから、通常命令アドレスレジスタ１１２に命令フェッチアドレス”Ａ１”を設定する。
【００７７】
（４）時間Ｔ４〜Ｔ５において、命令フェッチ制御部１０２は、命令キャッシュ１０からフェッチした命令”Ｉ＃Ｂ０”をＴＡＲ用命令バッファ１２３に格納する。
【００７８】
また、命令フェッチ制御部１０２は、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択し、選択した通常命令アドレスレジスタ１１２に設定されている命令フェッチアドレス”Ａ１”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ａ１”によって特定される命令”Ｉ＃Ａ１”を命令キャッシュ１０からフェッチする。
【００７９】
また、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがないことから、ＴＡＲ用命令アドレスレジスタ１１３に命令フェッチアドレス”Ｂ１”を設定する。
【００８０】
（５）時間Ｔ５〜Ｔ６において、命令フェッチ制御部１０２は、命令キャッシュ１０からフェッチした命令”Ｉ＃Ａ１”を通常命令バッファ１２２に格納する。
【００８１】
また、命令フェッチ制御部１０２は、セレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択し、選択したＴＡＲ用命令アドレスレジスタ１１３に設定されている命令フェッチアドレス”Ｂ１”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ｂ１”によって特定される命令”Ｉ＃Ｂ１”を命令キャッシュ１０からフェッチする。
【００８２】
また、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがないことから、ＴＡＲ用命令アドレスレジスタ１１３に命令フェッチアドレス”Ｂ２”を設定する。
【００８３】
（６）時間Ｔ６〜Ｔ７において、命令フェッチ制御部１０２は、命令キャッシュ１０からフェッチした命令”Ｉ＃Ｂ１”をＴＡＲ用命令バッファ１２３に格納する。
【００８４】
また、命令フェッチ制御部１０２は、セレクタ１１１を制御してＴＡＲ用命令アドレスレジスタ１１３を選択し、選択したＴＡＲ用命令アドレスレジスタ１１３に設定されている命令フェッチアドレス”Ｂ２”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ｂ２”によって特定される命令”Ｉ＃Ｂ２”を命令キャッシュ１０からフェッチする。
【００８５】
また、命令フェッチ制御部１０２は、通常命令バッファ１２２に空きができる見込みがあることから、通常命令アドレスレジスタ１１２に命令フェッチアドレス”Ａ２”を設定する。
【００８６】
（７）時間Ｔ７〜Ｔ８において、命令フェッチ制御部１０２は、命令キャッシュ１０からフェッチした命令”Ｉ＃Ｂ２”をＴＡＲ用命令バッファ１２３に格納する。
【００８７】
また、命令フェッチ制御部１０２は、セレクタ１１１を制御して通常命令アドレスレジスタ１１２を選択し、選択した通常命令アドレスレジスタ１１２に設定されている命令フェッチアドレス”Ａ２”を命令キャッシュ１０に出力する。そして、命令フェッチアドレス”Ａ２”によって特定される命令”Ｉ＃Ａ２”を命令キャッシュ１０からフェッチする。
【００８８】
以上説明したように本実施の形態におけるプロセッサによれば、メインで利用される通常命令バッファ１２２以外に副次的に利用されるＴＡＲ用命令バッファ１２３およびＬＲ用命令バッファ１２４などを備えることにより、ループ部分およびサブルーチンリターン部分などに対して、繰り返し命令キャッシュにアクセスしてフェッチすることを省略することができる。そして、ＴＡＲ用命令バッファ１２３およびＬＲ用命令バッファ１２４などから命令を供給することによって、パイプラインのペナルティを短縮することができ、分岐によって生じるパイプラインの空きを埋めることができる。さらに、命令キャッシュへのアクセスが省略されることによって、アクセス待ちなどを回避することができ、実行処理の性能を向上することができる。また、ＴＡＲ用充填命令で、フェッチする期間を調整してＴＡＲ用命令バッファ１２３に格納する期間を調整することができることから、命令バッファの容量を大きくしても、その効果を十分に発揮できる程、十分な期間を見繕って前もってＴＡＲ用充填命令を実行させるようにすることで、十分な命令を蓄積して供給することができる。結果、命令キャッシュのアクセス頻度を下げて、消費電力を抑えながら高速にループ処理などを実行させることができる。同様に、ＬＲ用充填命令で、ＬＲ用命令バッファ１２４に格納する期間を調整することができる。
【００８９】
（実施の形態２）
次に、本発明に係わる実施の形態２について図面を参照しながら説明する。
【００９０】
本実施の形態におけるプロセッサは、ループ部分の命令を格納する命令バッファを複数備え、複数のループ部分の命令を供給することを特徴とする。
【００９１】
以上の点を踏まえて本実施の形態のプロセッサについて説明する。
【００９２】
なお、実施の形態１における構成要素と同一の構成要素については同一の参照符号を付して説明を省略する。
【００９３】
まず、本実施の形態におけるプロセッサの構成について説明する。
【００９４】
図１０に示されるように、プロセッサ２００は、プロセッサ１００と比べて、下記（１）〜（７）の点が異なる。
【００９５】
（１）命令フェッチ制御部１０２の代わりに、命令フェッチ制御部２０２を備える。
【００９６】
命令フェッチ制御部２０２は、命令実行部１０１において、第１ＴＡＲ用充填命令が実行されれば、通常命令バッファ１２２に命令を充填する合間を縫って、第１ＴＡＲ用充填命令によって特定される第１ループ部分の命令を第１ＴＡＲ用命令バッファ２２３に充填する。そして、命令実行部１０１において、第１ＴＡＲ用充填命令によって特定される第１ループ部分の命令が実行されるときに、第１ＴＡＲ用命令バッファ２２３から命令実行部１０１に命令を供給する。
【００９７】
さらに、命令フェッチ制御部２０２は、命令実行部１０１において、第２のＴＡＲ用充填命令が実行されれば、第１ＴＡＲ用命令バッファ２２３から命令を供給している合間を縫って、第２のＴＡＲ用充填命令によって特定される第２のループ部分の命令を第２ＴＡＲ用命令バッファ２２４に充填する。そして、命令実行部１０１において、第１ＴＡＲ用充填命令によって特定される第２ループ部分の命令が実行されるときに、第２ＴＡＲ用命令バッファ２２４から命令実行部１０１に命令を供給する。
【００９８】
（２）セレクタ１１１の代わりに、セレクタ２１１を備える。
セレクタ２１１は、命令フェッチ制御部２０２からの指示に応じて、通常命令アドレスレジスタ１１２、第１ＴＡＲ用命令アドレスレジスタ２１３、および第２ＴＡＲ用命令アドレスレジスタ２１４のいずれかの命令アドレスレジスタを選択する。そして、選択した命令アドレスレジスタに設定されているアドレスを命令キャッシュ１０に出力する。
【００９９】
（３）ＴＡＲ用命令アドレスレジスタ１１３の代わりに、第１ＴＡＲ用命令アドレスレジスタ２１３を備える。
【０１００】
第１ＴＡＲ用命令アドレスレジスタ２１３は、第１ＴＡＲ用充填命令によって特定されるループ部分の命令を取り出すときに利用される命令アドレスレジスタである。
【０１０１】
（４）ＬＲ用命令アドレスレジスタ１１４の代わりに、第２ＴＡＲ用命令アドレスレジスタ２１４を備える。
【０１０２】
第２ＴＡＲ用命令アドレスレジスタ２１４は、第２ＴＡＲ用充填命令によって特定されるループ部分の命令を取り出すときに利用される命令アドレスレジスタである。
【０１０３】
（５）セレクタ１２１の代わりに、セレクタ２２１を備える。
【０１０４】
セレクタ２２１は、命令フェッチ制御部２０２からの指示に応じて、通常命令バッファ１２２、第１ＴＡＲ用命令バッファ２２３、および第２ＴＡＲ用命令バッファ２２４のいずれかの命令バッファを選択する。そして、選択した命令バッファに充填されている命令を命令実行部１０１に供給する。
【０１０５】
（６）ＴＡＲ用命令バッファ１２３の代わりに、第１ＴＡＲ用命令バッファ２２３を備える。
【０１０６】
第１ＴＡＲ用命令バッファ２２３は、第１ＴＡＲ用充填命令によって特定されるループ部分の命令を格納して供給する命令バッファである。
【０１０７】
例えば、図１１に示されるように、第１ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”によって特定される第１ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃１”の命令”Ｉ＃１１”から第１ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”までの第１ループ部分が第１ＴＡＲ命令バッファ２２３に充填される。
【０１０８】
（７）ＬＲ用命令バッファ１２４の代わりに、第２ＴＡＲ用命令バッファ２２４を備える。
【０１０９】
第２ＴＡＲ用命令バッファ２２４は、第２ＴＡＲ用充填命令によって特定される第２ループ部分の命令を格納して供給する命令バッファである。
【０１１０】
例えば、図１１に示されるように、第２ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃２”によって特定される第２ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃２”の命令”Ｉ＃２２”から第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”までの第２ループ部分が第２ＴＡＲ用命令バッファ２２４に充填される。
【０１１１】
また、図１２に示されるように、二重ループの場合には、第１ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”によって特定される第１ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃１”の命令”Ｉ＃１７”から第１ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”までの内側ループ部分が第１ＴＡＲ用命令バッファ２２３に充填される。さらに、命令”Ｉ＃２０”から第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”までの外側ループ部分の一部分も第１ＴＡＲ用命令バッファ２２３に充填される。
【０１１２】
また、第２ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃２”によって特定される第２ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃２”の命令”Ｉ＃１１”から第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”までの外側ループ部分が第２ＴＡＲ用命令バッファ２２４に充填される。
【０１１３】
そして、命令フェッチ制御部２０２は、命令実行部１０１において、第１ＴＡＲ用命令バッファ２２３から供給された第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”が実行されてアドレス”ＬＡＢＥＬ＃２”に分岐する場合には、セレクタ２２１を制御して第２ＴＡＲ用命令バッファ２２４を選択する。
【０１１４】
また、命令フェッチ制御部２０２は、命令実行部１０１において、第２ＴＡＲ用命令バッファ２２４から供給される第１ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”が実行されてアドレス”ＬＡＢＥＬ＃１”に分岐する場合には、セレクタ２２１を制御して第１ＴＡＲ用命令バッファ２２３を選択する。
【０１１５】
同様に、図１３に示されるように、第１ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃１”によって特定される第１ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃１”の命令”Ｉ＃１１”から第１ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”までのループ部分が第１ＴＡＲ用命令バッファ２２３に充填される。さらに、命令”Ｉ＃２０”から第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”までの部分も第１ＴＡＲ用命令バッファ２２３に充填される。
【０１１６】
また、第２ＴＡＲ用充填命令”ＳＥＴＴＡＲ＃２”によって特定される第２ループ部分、すなわち、アドレス”ＬＡＢＥＬ＃２”の命令”Ｉ＃１７”から第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”までのループ部分が第２ＴＡＲ用命令バッファ２２４に充填される。
【０１１７】
そして、命令フェッチ制御部２０２は、命令実行部１０１において、第１ＴＡＲ用命令バッファ２２３から供給された第２ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃２”が実行されてアドレス”ＬＡＢＥＬ＃２”に分岐する場合には、セレクタ２２１を制御して第２ＴＡＲ用命令バッファ２２４を選択する。
【０１１８】
また、命令フェッチ制御部２０は、命令実行部１０において、第２ＴＡＲ用命令バッファ２２４から供給された第１ＴＡＲ用分岐命令”ＪＵＭＰＴＡＲ＃１”が実行されてアドレス”ＬＡＢＥＬ＃１”に分岐する場合には、セレクタ２２１を制御して第１ＴＡＲ用命令バッファ２２３を選択する。
【０１１９】
以上説明したように本実施の形態におけるプロセッサによれば、メインで利用される通常命令バッファ１２２以外に副次的に利用される複数のＴＡＲ用命令バッファなどを備えることにより、複数のループ部分などに対して、繰り返し命令キャッシュにアクセスしてフェッチすることを省略することができる。そして、第１ＴＡＲ用命令バッファ２２３および第２ＴＡＲ用命令バッファ２２４などから命令を供給することによって、パイプラインのペナルティを短縮することができ、分岐によって生じるパイプラインの空きを埋めることができる。さらに、命令キャッシュへのアクセスが省略されることによって、アクセス待ちなどを回避することができ、実行処理の性能を向上することができる。また、第１ＴＡＲ用充填命令で、フェッチする期間を調整して第１ＴＡＲ用命令バッファ２２３に格納する期間を調整することができ、第２ＴＡＲ用充填命令で、フェッチする期間を調整して第２ＴＡＲ用命令バッファ２２４に格納する期間を調整することができることから、命令バッファの容量を大きくしても、その効果を十分に発揮できる程、十分な期間を見繕って前もって第１ＴＡＲ用充填命令および第２ＴＡＲ用充填命令を実行させるようにすることで、十分な命令を蓄積して供給することができる。結果、命令キャッシュのアクセス頻度を下げて、消費電力を抑えながら高速にループ処理などを実行させることができる。アクセス頻度が減ることによって、消費電力の増大を抑制することができる。
【０１２０】
（その他）
なお、図１４に示されるように、プロセッサ３００は、命令実行部１０１、命令フェッチ制御部３０２、セレクタ３１１、通常命令アドレスレジスタ１１２、第１ＴＡＲ用命令アドレスレジスタ３１３、第２ＴＡＲ用命令アドレスレジスタ３１４、ＬＲ用命令アドレスレジスタ１１４、セレクタ３２１、通常命令バッファ１２２、第１ＴＡＲ用命令バッファ３２３、第２ＴＡＲ用命令バッファ３２４、およびＬＲ用命令バッファ１２４を備えるとしてもよい。すなわち、複数のＴＡＲ用命令バッファおよびＬＲ用命令バッファを備え、複数のループ部分の命令およびサブルーチン部分の命令を供給するとしてもよい。
【０１２１】
なお、プロセッサ１００、３００において、ＬＲ用命令バッファ１２４を備える代わりに、ＴＡＲ用命令バッファおよびＬＲ用命令バッファを兼用する命令バッファを備えるとしてもよい。さらに、ＬＲ用命令アドレスレジスタ１１４を備える代わりに、ＴＡＲ用命令アドレスレジスタおよびＬＲ用命令アドレスレジスタを兼用する命令アドレスレジスタを備えるとしてもよい。
【０１２２】
なお、プロセッサは、フルカスタムＬＳＩ（Large Scale Integration）によって実現されるとしてもよい。また、ＡＳＩＣ（Application Specific Integrated Circuit）などのようなセミカスタムＬＳＩによって実現されるとしてもよい。また、ＦＰＧＡ（Field Programmable Gate Array）、ＣＰＬＤ（Complex Programmable Logic Device）などのようなプログラマブル・ロジック・デバイスによって実現されるとしてもよい。また、動的に回路構成が書き換え可能なダイナミック・リコンフィギュラブル・デバイスとして実現されるとしてもよい。
【０１２３】
さらに、プロセッサを構成する１以上の機能を、これらのＬＳＩに形成する設計データは、ＶＨＤＬ（Very high speed integrated circuit Hardware Description Language）、Ｖｅｒｉｌｏｇ−ＨＤＬ、ＳｙｓｔｅｍＣ等のようなハードウェア記述言語によって記述されたプログラム（以下、ＨＤＬプログラムと呼称する。）としてもよい。また、ＨＤＬプログラムを論理合成して得られるゲート・レベルのネットリストとしてもよい。また、ゲート・レベルのネットリストに、配置情報、プロセス条件等を付加したマクロセル情報としてもよい。また、寸法、タイミング等が規定されたマスクデータとしてもよい。
【０１２４】
さらに、コンピュータシステム、組み込みシステム等のようなハードウェアシステムに読み出され得るように、光学記録媒体（例えば、ＣＤ−ＲＯＭ等。）、磁気記録媒体（例えば、ハードディスク等。）、光磁気記録媒体（例えば、ＭＯ等。）、半導体メモリ（例えば、メモリカード等。）等のようなコンピュータ読み取り可能な記録媒体に設計データを記録しておくとしてもよい。そして、これらの記録媒体を介して他のハードウェアタシステムに読み取られた設計データが、ダウンロードケーブルを介して、プログラマブル・ロジック・デバイスにダウンロードされるとしてもよい。
【０１２５】
または、ネットワーク等のような伝送路を経由して他のハードウェアシステムに取得され得るように、伝送路上のハードウェアシステムに設計データを保持しておくとしてもよい。さらに、ハードウェアシステムから伝送路を介して他のハードウェアタシステムに取得された設計データが、ダウンロードケーブルを介して、プログラマブル・ロジック・デバイスにダウンロードされるとしてよい。
【０１２６】
または、論理合成、配置、配線された設計データを、通電時にＦＰＧＡに転送され得るように、シリアルＲＯＭに記録しておくとしてもよい。そして、シリアルＲＯＭに記録された設計データが、通電時に、直接、ＦＰＧＡにダウンロードされるとしてもよい。
【産業上の利用可能性】
【０１２７】
本発明は、命令キャッシュに格納されている命令を取り出して実行するプロセッサなどとして、特に、ループ部分の命令を実行するときに、ループ部分用命令バッファに格納している命令を供給して命令キャッシュへのアクセス頻度を減らして、実行処理の向上を図り、かつ消費電力の増大を抑制するプロセッサなどとして、利用することができる。
【図面の簡単な説明】
【０１２８】
【図１】図１は、本発明に係わる実施の形態１におけるプロセッサの構成を示す図である。
【図２】図２は、本発明に係わる実施の形態１におけるプロセッサに供給される命令列の例を示す図である。
【図３Ａ】図３Ａは、本発明に係わる実施の形態１におけるプロセッサのＴＡＲ用命令バッファの充填完了を知らせる論理回路を示す図である。
【図３Ｂ】図３Ｂは、本発明に係わる実施の形態１におけるプロセッサのＴＡＲ用命令バッファの充填完了を知らせる論理回路に対する論理表を示す図である。
【図４】図４は、本発明に係わる実施の形態１におけるＴＡＲ用命令バッファおよびＬＲ用命令バッファの各状態遷移を示す図である。
【図５】図５は、本発明に係わる実施の形態１におけるプロセッサにおいて命令充填時に実行される命令充填処理を示す第１の図である。
【図６Ａ】図６Ａは、本発明に係わる実施の形態１におけるプロセッサにおいて命令充填時に実行される命令充填処理を示す第２の図である。
【図６Ｂ】図６Ｂは、本発明に係わる実施の形態１におけるプロセッサにおいて命令充填時に実行される命令充填処理を示す第３の図である。
【図７】図７は、本発明に係わる実施の形態１におけるプロセッサにおいて命令供給時に実行される命令供給処理を示す第１の図である。
【図８Ａ】図８Ａは、本発明に係わる実施の形態１におけるプロセッサにおいて命令供給時に実行される命令供給処理を示す第２の図である。
【図８Ｂ】図８Ｂは、本発明に係わる実施の形態１におけるプロセッサにおいて命令供給時に実行される命令供給処理を示す第３の図である。
【図９】図９は、本発明に係わる実施の形態１におけるプロセッサの命令充填時の動作例を示す図である。
【図１０】図１０は、本発明に係わる実施の形態２におけるプロセッサの構成を示す図である。
【図１１】図１１は、本発明に係わる実施の形態２におけるプロセッサに供給される命令列の第１の例を示す図である。
【図１２】図１２は、本発明に係わる実施の形態２におけるプロセッサに供給される命令列の第２の例を示す図である。
【図１３】図１３は、本発明に係わる実施の形態２におけるプロセッサに供給される命令列の第３の例を示す図である。
【図１４】図１４は、本発明に係わるその他の実施の形態におけるプロセッサの構成を示す図である。
【符号の説明】
【０１２９】
１０  命令キャッシュ
１００，２００，３００  プロセッサ
１０１  命令実行部
１０２，２０２，３０２  命令フェッチ制御部
１１１，２１１，３１１  セレクタ
１１２  通常命令アドレスレジスタ
１１３  ＴＡＲ用命令アドレスレジスタ
１１４  ＬＲ用命令アドレスレジスタ
１２１，２２１，３２１  セレクタ
１２２  通常命令バッファ
１２３  ＴＡＲ用命令バッファ
１２４  ＬＲ用命令バッファ
２１３，３１３  第１ＴＡＲ用命令アドレスレジスタ
２１４，３１４  第２ＴＡＲ用命令アドレスレジスタ
２２３，３２３  第１ＴＡＲ用命令バッファ
２２４，３２４  第２ＴＡＲ用命令バッファ
【図１】
0004354990.tif 000002
【図２】
0004354990.tif 000003
【図３Ａ】
0004354990.tif 000004
【図３Ｂ】
0004354990.tif 000005
【図４】
0004354990.tif 000006
【図５】
0004354990.tif 000007
【図６Ａ】
0004354990.tif 000008
【図６Ｂ】
0004354990.tif 000009
【図７】
0004354990.tif 000010
【図８Ａ】
0004354990.tif 000011
【図８Ｂ】
0004354990.tif 000012
【図９】
0004354990.tif 000013
【図１０】
0004354990.tif 000014
【図１１】
0004354990.tif 000015
【図１２】
0004354990.tif 000016
【図１３】
0004354990.tif 000017
【図１４】
0004354990.tif 000018