(57)【特許請求の範囲】
【請求項１】
複数の命令を命令順に登録するリオーダバッファと、
前記複数の命令のうちの第１命令を格納する第１バッファと、
前記複数の命令のうちの前記第１命令を除く第２命令を格納する第２バッファとを具備し、
前記第２命令は、前記第１命令が発行された後に発行されなければならない命令を含み、
前記第１バッファは、前記第１命令を前記命令順にそれぞれ格納する複数の第１エントリを備え、前記複数の第１エントリのうちの発行された命令を格納するエントリを解放し、前記第１命令のうちの発行されていない命令をそれぞれ順番が１つだけ早いエントリにシフトして格納し、
前記第２バッファは、発行可能な前記第２命令のうちの前記命令順が早い命令から発行し、
前記リオーダバッファは、前記複数の命令のうち、完了し、かつ、完了していない命令より前記命令順が早い命令を消去する
命令バッファ。
【請求項２】
請求項１において、
前記第１バッファは、前記第１命令のうち、前記命令順が最も早く、かつ、発行可能である命令を発行する
命令バッファ。
【請求項３】
請求項２において、
前記第２バッファは、
前記第２命令を前記命令順にそれぞれ格納する複数の第２エントリと、
前記第２命令の発行を制御する発行ポインタと、
前記複数の第２エントリうち、どのエントリまで発行されたかを示す先頭ポインタとを備える
命令バッファ。
【請求項４】
請求項３において、
前記第１命令のうちの１つの命令は、前記第２命令のうちの１つの命令と同時に実行可能である
命令バッファ。
【請求項５】
請求項４において、
前記第１命令は、演算系命令から形成され、
前記第２命令は、メモリアクセス系命令から形成される
命令バッファ。
【請求項６】
複数の命令を命令順に登録するリオーダバッファと、
前記複数の命令のうちの第１命令を格納する第１バッファと、
前記複数の命令のうちの前記第１命令を除く第２命令を格納する第２バッファとを備え、
前記第２命令は、前記第１命令が発行された後に発行されなければならない命令を含み、
前記第１バッファは、前記第１命令を前記命令順にそれぞれ格納する複数の第１エントリを備える
命令バッファにより実行されるバッファキュー制御であり、
前記複数の第１エントリのうちの発行された命令を格納するエントリを解放するステップと、
前記第１命令のうちの発行されていない命令をそれぞれ順番が１つだけ早いエントリにシフトして格納するステップと、
発行可能な前記第２命令のうちの前記命令順が最も早い命令を発行するステップと、
前記複数の命令のうち、完了し、かつ、完了していない命令より前記命令順が早い命令を消去するステップ
とを具備するバッファキュー制御。
【請求項７】
請求項６において、
前記第１命令のうち、前記命令順が最も早く、かつ、発行可能である命令を発行するステップ
を更に具備するバッファキュー制御。
【請求項８】
請求項７において、
前記第２バッファは、
前記第２命令を前記命令順にそれぞれ格納する複数の第２エントリと、
前記第２命令の発行を制御する発行ポインタと、
前記複数の第２エントリうち、どのエントリまで発行されたかを示す先頭ポインタとを備える
バッファキュー制御。
【請求項９】
請求項８において、
前記第１命令のうちの１つの命令は、前記第２命令のうちの１つの命令と同時に実行可能である
バッファキュー制御。
【請求項１０】
請求項９において、
前記第１命令は、演算系命令から形成され、
前記第２命令は、メモリアクセス系命令から形成される
バッファキュー制御。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、命令バッファ及びバッファキュー制御に関し、特に、複数命令をより高速に実行する命令バッファ及びバッファキュー制御に関する。
【０００２】
【従来の技術】
命令をより高速に処理するために、各命令の実行を複数のステージに細分し任意の時点において１群の命令が同時に複数のステージにあることができるパイプライン処理が行われている。例えば、命令を読み出すステージ、命令を解読するステージ、命令を発行するステージ、命令の演算を実行するステージからなり、１つの命令が命令を解読するステージにあり、他の１つの命令が命令を発行するステージにある時点が存在する。
【０００３】
複数の命令を発行する順序としてイン・オーダ発行とアウト・オブ・オーダ発行とがある。そのイン・オーダ発行は、命令をプログラムでの順序と同じ順序で発行することである。アウト・オブ・オーダ発行は、命令が実行可能になった順から命令を発行することである。このようなアウト・オブ・オーダ発行は、命令の発行効率を向上させ、演算器など使用効率を向上させ、全体の処理を速くする。
【０００４】
このようなアウト・オブ・オーダ発行は、プログラムの順序と独立に命令が発行されるため、順序が早い命令が取り残される場合がある。このとき、取り残された命令と依存関係がある命令は発行できなくなり、命令バッファに全ての命令が登録され、全体の処理が遅くなってしまう。
【０００５】
【発明が解決しようとする課題】
本発明の課題は、より高速に複数命令を発行できる命令バッファ及びバッファキュー制御を提供することにある。
【０００６】
【課題を解決するための手段】
その課題を解決するための手段が、下記のように表現される。その表現中に現れる技術的事項には、括弧（）付きで、番号、記号等が添記されている。その番号、記号等は、本発明の実施の複数・形態又は複数の実施例のうちの少なくとも１つの実施の形態又は複数の実施例を構成する技術的事項、特に、その実施の形態又は実施例に対応する図面に表現されている技術的事項に付せられている参照番号、参照記号等に一致している。このような参照番号、参照記号は、請求項記載の技術的事項と実施の形態又は実施例の技術的事項との対応・橋渡しを明確にしている。このような対応・橋渡しは、請求項記載の技術的事項が実施の形態又は実施例の技術的事項に限定されて解釈することを意味しない。
【０００７】
本発明による命令バッファは、順序が決定している命令からなる命令列と、順序が決定しているエントリ（６１〜６６）からなるバッファ（２２）とを含み、命令は、エントリに格納され、順序が早いエントリに格納される命令は、順序が遅いエントリに格納される命令より順序が早い。エントリの順序と格納されている命令の順序とは一致している。
【０００８】
エントリ（６１〜６６）は、格納している命令が取り出し可能であるかどうかを示すことが好ましい。取り出し可能であるエントリに格納されている命令のうち順序の最も早いエントリに格納されている命令が取り出される。このため、順序の早い命令ほど、取り出される優先順位は高い。
【０００９】
命令を格納しているエントリは、命令を格納していないエントリより順序が早い。命令を格納していないエントリがあり、そのエントリより順序が遅いエントリに格納されている命令は、命令を格納していないエントリに詰められる。
【００１０】
命令を格納する他のエントリ（８１〜８６）からなる他のバッファ（２３）を更に含み、他のエントリ（８１〜８６）に時間的に先に格納された命令は、他のエントリ（８１〜８６）に時間的に後に格納された命令より先に取り出される。他のバッファ（２３）に格納された命令のうち最も古い命令から順に取り出しが起こる。
【００１１】
エントリ（６１〜６６）に格納される命令は、演算系であり、他のエントリ（８１〜８６）に格納される命令は、メモリアクセス系であることが好ましい。
【００１２】
本発明によるバッファキュー制御は、順序が決定している複数の命令からなる第１命令群を生成すること、第１命令群に属し実行可能である命令からなる第２命令群を生成すること、第２命令群に属し順序が最も早い命令を実行することとを含む。このように命令を実行することにより、順序が早い命令が実行されずに取り残されることはない。
【００１３】
第１命令群に包含される第３命令群を生成すること、第１命令群に包含され第３命令群と互いに素である第４命令群を生成することとを更に含み、第４命令群に属し順序が最も早い命令が第２命令群に属さないとき、第４命令群に属する全ての命令は実行されない。第３命令群に属し且つ第４命令群に属する命令は存在しない。第４命令群に属する命令は、最も順序が早い命令から実行される。即ち、第４命令群に属する命令はイン・オーダ実行される。
【００１４】
第３命令群または第４命令群に属する所定の２つの命令のうち１つの命令が実行されるまで、２つの命令のうち他の１つの命令は実行可能ではない。命令が実行可能であるかどうかは、所定の２つの命令の依存関係によって決定する。第３命令群に属する命令は、演算系である。第４命令群に属する命令は、メモリアクセス系である。演算系命令は、順序保証されていない命令である。メモリアクセス系命令は、順序保証してある命令である。第１命令群は、これら２種類に分割されることが好ましい。
【００１５】
【発明の実施の形態】
図に一致対応して、本発明による命令バッファの実施の形態は、命令バッファが命令フェッチステージ、命令振り分けステージ、命令デコードステージ、命令登録ステージ、命令発行ステージ、命令実行ステージ及び命令完了ステージから構成されている。命令フェッチステージ１は、図１に示されるように、命令キャッシュメモリ１１を備えている。命令キャッシュメモリ１１は、命令を命令振り分けステージ２に供給する。
【００１６】
命令振り分けステージ２は、フェッチレジスタ１２を備えている。命令フェッチステージ１の命令キャッシュメモリ１１は、フェッチレジスタ１２に接続している。フェッチレジスタ１２は、命令キャッシュメモリ１１から供給された命令を蓄え、命令を演算系命令とメモリアクセス系命令とに振り分ける。
【００１７】
命令デコードステージ３は、デコードレジスタ１３とデコードレジスタ１４とを備えている。命令振り分けステージ２のフェッチレジスタ１２は、デコードレジスタ１３に接続し、デコードレジスタ１４に接続している。デコードレジスタ１３には、演算系命令が登録される。演算系命令は、順序保証されていない命令である。演算系命令としては、四則演算、論理演算が例示される。デコードレジスタ１４には、メモリアクセス系命令が登録される。メモリアクセス系命令は、順序保証してある命令であり、ロード命令、ストア命令が例示される。命令デコードステージ３は、更に、命令デコーダ１５〜１８を備えている。デコードレジスタ１３は、命令デコーダ１５に接続し、命令デコーダ１６に接続している。デコードレジスタ１４は、命令デコーダ１７に接続し、命令デコーダ１８に接続している。命令デコーダ１５，１６は、デコードレジスタ１３に登録された命令をデコードする。命令デコーダ１７，１８は、デコードレジスタ１４に登録された命令をデコードする。命令デコーダ１５〜１８は、命令登録報告３１を生成する。命令登録報告３１は、デコードされた命令が登録されることを示す。
【００１８】
命令登録ステージ４は、リオーダバッファ（以下、「ＲＯＢ」と記載される）２１、演算系命令バッファ２２及びメモリアクセス系命令バッファ２３を備えている。命令デコードステージ３の命令デコーダ１５〜１８は、ＲＯＢ２１に接続している。ＲＯＢ２１は、全ての命令を命令順に登録し、命令が完了した順に命令を解放する。ＲＯＢ２１は、命令順を保持し、命令間の依存関係の検出と命令の終了の確認とのために用いられる。演算系命令バッファ２２には演算系命令が登録され、演算系命令バッファ２２は演算系命令を発行する。メモリアクセス系命令バッファ２３にはメモリアクセス系命令が登録され、メモリアクセス系命令バッファ２３はメモリアクセス系命令を発行する。
【００１９】
命令発行ステージ５は、命令発行レジスタ２４と命令発行レジスタ２５とを備えている。演算系命令バッファ２２は、命令発行レジスタ２４に接続している。命令発行レジスタ２４は、演算系命令バッファ２２から発行された命令を蓄え、依存関係解放報告３２を演算系命令バッファ２２とメモリアクセス系命令バッファ２３とに通知する。依存関係解放報告３２は、どの命令が発行されたかを示す。メモリアクセス系バッファ２３は、命令発行レジスタ２５に接続している。命令発行レジスタ２５はメモリアクセス系バッファ２３から発行された命令を蓄え、依存関係解放報告３２を演算系命令バッファ２２とメモリアクセス系命令バッファ２３とに通知する。
【００２０】
命令実行ステージ６は、命令実行レジスタ２６と命令実行レジスタ２７とを備えている。命令発行レジスタ２４は命令実行レジスタ２６に接続し、命令実行レジスタ２６は演算系命令バッファ２２に接続している。命令実行レジスタ２６は、バッファ解放報告３３を演算系命令バッファ２２に通知する。バッファ解放報告３３は、バッファを解放しても良いかどうかを示す。命令発行レジスタ２５は命令実行レジスタ２７に接続し、命令実行レジスタ２７はメモリアクセス系命令バッファ２３に接続している。命令実行レジスタ２７は、バッファ解放報告３４をメモリアクセス系命令バッファ２３に通知する。バッファ解放報告３４は、バッファを解放しても良いかどうかを示す。
【００２１】
命令完了ステージ７は、命令完了レジスタ２８と命令完了レジスタ２９とを備えている。命令実行レジスタ２６は命令完了レジスタ２８に接続し、命令完了レジスタ２８はＲＯＢ２１に接続している。命令完了レジスタ２８は、命令完了報告３５をＲＯＢ２１に通知する。命令完了報告３５は、命令が完了したかどうかを示す。命令実行レジスタ２７は命令完了レジスタ２９に接続し、命令完了レジスタ２９はＲＯＢ２１に接続している。命令完了レジスタ２９は、命令完了報告３５をＲＯＢ２１に通知する。
【００２２】
図２は、ＲＯＢ２１の構成を示す。ＲＯＢ２１は、図２に示されるように、エントリ４１〜５２を備えている。各エントリ４１〜５２は、命令５３、エントリ解放５４及びエントリ有効５５を登録している。エントリ解放５４は、命令５３を解放して良いかどうかを示す。エントリ有効５５は、命令５３が有効かどうかを示す。ＲＯＢ２１は、命令登録報告３１を受けてエントリを有効にし、命令完了報告３５を受けてエントリを解放する。
【００２３】
図３は、演算系命令バッファ２２の構成を示す。演算系命令バッファ２２は、図３に示されるように、エントリ６１〜６６とセレクタ７３〜７７とを備えている。命令デコーダ１５，１６は、エントリ６６とセレクタ７３〜７７とに接続している。エントリ６６はセレクタ７７に接続し、セレクタ７７はエントリ６５に接続している。エントリ６５はセレクタ７６に接続し、セレクタ７６はエントリ６４に接続している。エントリ６４はセレクタ７５に接続し、セレクタ７５はエントリ６３に接続している。エントリ６３はセレクタ７４に接続し、セレクタ７４はエントリ６２に接続している。エントリ６２はセレクタ７３に接続し、セレクタ７３はエントリ６１に接続している。エントリ６１〜６６は、命令発行レジスタ２４に接続している。
【００２４】
各エントリ６１〜６６は、命令６７、依存関係制御６８、エントリ解放６９及びエントリ有効７１からなる。依存関係制御６８は、そのエントリに属する命令６７が他の命令と依存関係があるかどうかを示す。エントリ解放６９は、そのエントリを解放して良いかどうかを示す。エントリ有効７１は、そのエントリが有効かどうかを示す。
【００２５】
セレクタ７３〜７７は、各エントリ６１〜６６にそれぞれ命令を登録し更にバッファキュー制御を行う。即ち、セレクタ７３は、エントリ６１が解放されたら、エントリ６２の登録をエントリ６１に移動する。セレクタ７４は、エントリ６２が解放されたら、エントリ６３の登録をエントリ６２に移動する。セレクタ７５は、エントリ６３が解放されたら、エントリ６４の登録をエントリ６３に移動する。セレクタ７６は、エントリ６４が解放されたら、エントリ６５の登録をエントリ６４に移動する。セレクタ７７は、エントリ６５が解放されたら、エントリ６６の登録をエントリ６５に移動する。
【００２６】
新たな演算系命令は、有効でないエントリに登録される。バッファキュー制御と同時に演算系命令が登録されても良い。他の命令と依存関係がなく、添付番号が最も小さいエントリに属する演算系命令が発行される。演算系命令バッファ２２は、更に、発行ポインタ７２を備えている。発行ポインタ７２は、演算系命令の発行を制御する。バッファキュー制御と同時に演算系命令が発行されても良い。
【００２７】
図４は、メモリアクセス系バッファ２３の構成を示す。メモリアクセス系命令バッファ２３は、図４に示されるように、エントリ８１〜８６を備えている。命令デコーダ１７，１８は、エントリ８１〜８６に接続している。エントリ８１〜８６は、命令発行レジスタ２５に接続している。各エントリ８１〜８６は、命令８７、依存関係制御８８、エントリ解放９９及びエントリ有効９１を登録している。依存関係制御８８は、そのエントリに属する命令が他の命令と依存関係があるかどうかを示す。エントリ解放８９は、そのエントリを解放して良いかどうかを示す。エントリ有効９１は、そのエントリが有効かどうかを示す。
【００２８】
メモリアクセス系バッファ２２は、更に、発行ポインタ９２と先頭ポインタ９３とを備えている。発行ポインタ９２は、命令の発行を制御する。他の命令と依存関係がなく、最初に登録された命令が発行される。即ち、イン・オーダ発行される。先頭ポインタ９３は、どのエントリの命令までが発行されたかを示す。
【００２９】
図５は、本発明によるバッファキュー制御方法の実施の形態を示す。バッファキュー制御は、３つのタイミングから形成される。タイミングＴ１は、命令が選択され命令発行レジスタ２４にその命令が発行された状態である。タイミングＴ２は、命令が発行されてから数クロック進んだ状態であり、エントリが解放された状態である。タイミングＴ３は、キュー制御された状態である。演算系命令ＡＬＵ−１〜６は、エントリ６１〜６６に登録される命令である。
【００３０】
タイミングＴ１では、図５（ａ）に示されるように、エントリ６１には、演算系命令ＡＬＵ−１が登録されている。エントリ６２には、演算系命令ＡＬＵ−２が登録されている。エントリ６３には、演算系命令ＡＬＵ−３が登録されている。エントリ６４には、演算系命令ＡＬＵ−４が登録されている。エントリ６５には、演算系命令ＡＬＵ−５が登録されている。エントリ６６には、演算系命令ＡＬＵ−６が登録されている。このとき、演算系命令ＡＬＵ−３は選択され命令発行レジスタ２４に発行されている。
【００３１】
タイミングＴ２では、図５（ｂ）に示されるように、エントリ６３は、演算系命令ＡＬＵ−３が解放され空になっている。タイミングＴ３では、図５（ｃ）に示されるように、演算系命令ＡＬＵ−４はエントリ６３に登録され、演算系命令ＡＬＵ−５はエントリ６４に登録され、演算系命令ＡＬＵ−６はエントリ６５に登録される。エントリ６６は、空になっている。
【００３２】
図６は、バッファキュー制御と同時的に演算系命令が登録される動作を示す。タイミングＴ１では、図６（ａ）に示されるように、エントリ６１には、演算系命令ＡＬＵ−１が登録されている。エントリ６２には、演算系命令ＡＬＵ−２が登録されている。エントリ６３には、演算系命令ＡＬＵ−３が登録されている。エントリ６４〜６６は、空になっている。デコードレジスタ１３は、空になっている。このとき、演算系命令ＡＬＵ−１は選択され命令発行レジスタ２４に発行されている。
【００３３】
タイミングＴ２では、図６（ｂ）に示されるように、エントリ６１は、演算系命令ＡＬＵ−１が解放され空になっている。デコードレジスタ１３には、演算系命令ＡＬＵ−４と演算系命令ＡＬＵ−５とが登録される。
【００３４】
タイミングＴ３では、図６（ｃ）に示されるように、演算系命令ＡＬＵ−２はエントリ６１に登録され、演算系命令ＡＬＵ−３はエントリ６２に登録され、演算系命令ＡＬＵ−４はエントリ６３に登録され、演算系命令ＡＬＵ−５はエントリ６４に登録される。このように命令の登録は、バッファキュー制御と同時的に実行が可能である。
【００３５】
図７は、バッファキュー制御と同時的に演算系命令が発行される動作を示す。タイミングＴ１では、図７（ａ）に示されるように、エントリ６１には、演算系命令ＡＬＵ−１が登録されている。エントリ６２には、演算系命令ＡＬＵ−２が登録されている。エントリ６３には、演算系命令ＡＬＵ−３が登録されている。エントリ６４〜６６は、空になっている。演算系命令ＡＬＵ−１は、選択され命令発行レジスタ２４に発行されている。
【００３６】
タイミングＴ２では、図７（ｂ）に示されるように、エントリ６１は、演算系命令ＡＬＵ−１が解放され空になっている。タイミングＴ３では、図７（ｃ）に示されるように、演算系命令ＡＬＵ−２はエントリ６１に登録され、演算系命令ＡＬＵ−３はエントリ６２に登録される。演算系命令ＡＬＵ−２は、選択され命令発行レジスタ２４に発行されている。このように命令の発行は、バッファキュー制御と同時的に実行できる。
【００３７】
図８は、バッファキュー制御しないときの動作を示す。タイミングＴ１では、図８（ａ）に示されるように、エントリ６１には、演算系命令ＡＬＵ−１が登録されている。エントリ６２には、演算系命令ＡＬＵ−２が登録されている。エントリ６３には、演算系命令ＡＬＵ−３が登録されている。エントリ６４には、演算系命令ＡＬＵ−４が登録されている。エントリ６５，６６は、空になっている。演算系命令ＡＬＵ−２は、選択され命令発行レジスタ２４に発行されている。
【００３８】
タイミングＴ２では、図８（ｂ）に示されるように、エントリ６２は、演算系命令ＡＬＵ−２が解放され空になっている。デコードレジスタ１３には、演算系命令ＡＬＵ−５と演算系命令ＡＬＵ−６とが登録される。タイミングＴ３では、図８（ｃ）に示されるように、演算系命令ＡＬＵ−５はエントリ６２に登録され、演算系命令ＡＬＵ−６はエントリ６５に登録される。デコードレジスタ１３は空になる。
【００３９】
このようにバッファキュー制御しないとき、演算系命令ＡＬＵ−５は演算系命令ＡＬＵ−３，ＡＬＵ−４より後に登録されたにもかかわらず、優先順位は上位である。命令の順序は保持されず、バラバラである。
【００４０】
図９は、バッファキュー制御しないときの演算系命令バッファ２２とメモリアクセス系バッファ２３とを示す。依存関係制御６８が１のとき、他の命令の後にその命令が発行されなければならないことを示し、依存関係制御６８が０のとき、発行されて良いことを示す。エントリ解放６９が１のとき、そのエントリを解放しても良いことを示し、エントリ解放６９が０のとき、そのエントリを解放してはいけないことを示す。エントリ有効７１が１のとき、そのエントリに命令が登録されていることを示し、エントリ有効７１が０のとき、そのエントリに登録可能であることを示す。
【００４１】
演算系命令ＡＬＵ−７は、エントリ６１に登録されている。演算系命令ＡＬＵ−５は、エントリ６２に登録されている。演算系命令ＡＬＵ−３は、エントリ６３に登録されている。演算系命令ＡＬＵ−４は、エントリ６４に登録されている。演算系命令ＡＬＵ−６は、エントリ６５に登録されている。演算系命令ＡＬＵ−８は、エントリ６６に登録されている。
【００４２】
依存関係制御８８が１のとき、他の命令が発行された後にその命令が発行されなければならないことを示し、依存関係制御８８が０のとき、発行されて良いことを示す。エントリ解放８９が１のとき、そのエントリを解放しても良いことを示し、エントリ解放８９が０のとき、そのエントリを解放してはいけないことを示す。エントリ有効９１が１のとき、そのエントリに命令が登録されていることを示し、エントリ有効９１が０のとき、そのエントリに命令が登録可能であることを示す。
【００４３】
メモリアクセス系命令ＭＥＭ−１は、エントリ８１に登録されている。メモリアクセス系命令ＭＥＭ−２は、エントリ８２に登録されている。メモリアクセス系命令ＭＥＭ−３は、エントリ８３に登録されている。エントリ８４〜８６は空になっている。
【００４４】
メモリアクセス系命令ＭＥＭ−１は、依存関係を有し、演算系命令ＡＬＵ−３が発行された後発行される。メモリアクセス系命令ＭＥＭ−２は、依存関係を有し、演算系命令ＡＬＵ−４が発行された後発行される。メモリアクセス系命令ＭＥＭ−３は、依存関係を有し、演算系命令ＡＬＵ−５が発行された後発行される。
【００４５】
図１０のタイムチャートは、図９に示されるように命令が登録されたときのメモリアクセス系命令ＭＥＭ−１〜３と演算系命令ＡＬＵ−３〜８との状態を示す。タイムチャート中のＲは命令登録ステージ４を示し、ＡＩは命令発行ステージ５を示し、ＡＸは命令実行ステージ６を示し、ＡＷは命令完了ステージ７を示している。タイムチャート中のＲは命令登録ステージ４を示し、ＥＩは命令発行ステージ５を示し、ＥＸは命令実行ステージ６を示し、ＥＷは命令完了ステージ７を示している。
【００４６】
メモリアクセス系命令ＭＥＭ−１〜３は、依存関係があるので依存関係解放報告３２が通知されないと発行されず、且つ、エントリの番号の最も若い順に発行される。演算系命令ＡＬＵ−３〜８は、依存関係がないためエントリの添付番号の若い順に発行される。
【００４７】
タイミングＴ２では、演算系命令ＡＬＵ−７が発行される。タイミングＴ３では、演算系命令ＡＬＵ−７が実行される。演算系命令ＡＬＵ−５が発行され、依存関係解放報告３２が通知される。タイミングＴ４では、演算系命令ＡＬＵ−７は完了する。演算系命令ＡＬＵ−５は実行される。演算系命令ＡＬＵ−３は発行される。依存関係解放通知３２が通知される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−３の依存関係が解放される。
【００４８】
タイミングＴ５では、演算系命令ＡＬＵ−５は完了する。演算系命令ＡＬＵ−３は実行される。演算系命令ＡＬＵ−４は発行される。依存関係解放通知３２が通知される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−１の依存関係が解放される。
【００４９】
タイミングＴ６では、演算系命令ＡＬＵ−３は完了する。演算系命令ＡＬＵ−４は実行される。演算系命令ＡＬＵ−６は発行される。メモリアクセス系命令ＭＥＭ−１は発行される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−２の依存関係が解放される。
【００５０】
タイミングＴ７では、演算系命令ＡＬＵ−４は完了する。演算系命令ＡＬＵ−６は実行される。演算系命令ＡＬＵ−８は発行される。メモリアクセス系命令ＭＥＭ−１は実行される。メモリアクセス系命令ＭＥＭ−２は発行される。タイミングＴ８では、演算系命令ＡＬＵ−６は完了する。演算系命令ＡＬＵ−８は実行される。メモリアクセス系命令ＭＥＭ−１は完了する。メモリアクセス系命令ＭＥＭ−２は実行される。メモリアクセス系命令ＭＥＭ−３は発行される。
【００５１】
タイミングＴ９では、演算系命令ＡＬＵ−８は完了する。メモリアクセス系命令ＭＥＭ−２は完了する。メモリアクセス系命令ＭＥＭ−３は実行される。タイミングＴ１０では、メモリアクセス系命令ＭＥＭ−３は完了する。このように全ての命令が終了するまでには１０タイミングを要する。
【００５２】
図１１は、図１０のタイムチャートにおけるタイミングＴ８（図１０中の矢印の部分）のときのＲＯＢ２１の状態を示す。エントリ４１には、演算系命令ＡＬＵ−１が登録されている。エントリ４２には、演算系命令ＡＬＵ−２が登録されている。エントリ４３には、演算系命令ＡＬＵ−３が登録されている。エントリ４４には、メモリアクセス系命令ＭＥＭ−１が登録されている。エントリ４５には、演算系命令ＡＬＵ−４が登録されている。エントリ４６には、メモリアクセス系命令ＭＥＭ−２が登録されている。エントリ４７には、演算系命令ＡＬＵ−５が登録されている。エントリ４８には、メモリアクセス系命令ＭＥＭ−３が登録されている。エントリ４９には、演算系命令ＡＬＵ−６が登録されている。エントリ５０には、演算系命令ＡＬＵ−７が登録されている。エントリ５１には、演算系命令ＡＬＵ−８が登録されている。エントリ５２は、空になっている。
【００５３】
ＲＯＢ２１のエントリ４１〜５２は、先に登録された命令が解放されない限り解放されない。エントリ４７，４９，５０は、解放可能であるにもかかわらず、エントリ４６が解放されていないため先頭ポインタ５６は、エントリ４６を指している。
【００５４】
図１２は、バッファキュー制御したときの演算系命令バッファ２２とメモリアクセス系バッファ２３とを示す。演算系命令ＡＬＵ−３は、エントリ６１に登録されている。演算系命令ＡＬＵ−４は、エントリ６２に登録されている。演算系命令ＡＬＵ−５は、エントリ６３に登録されている。演算系命令ＡＬＵ−６は、エントリ６４に登録されている。演算系命令ＡＬＵ−７は、エントリ６５に登録されている。演算系命令ＡＬＵ−８は、エントリ６６に登録されている。メモリアクセス系命令ＭＥＭ−１は、エントリ８１に登録されている。メモリアクセス系命令ＭＥＭ−２は、エントリ８２に登録されている。メモリアクセス系命令ＭＥＭ−３は、エントリ８３に登録されている。エントリ８４〜８６は空になっている。
【００５５】
メモリアクセス系命令ＭＥＭ−１は、依存関係を有し、演算系命令ＡＬＵ−３が発行された後発行される。メモリアクセス系命令ＭＥＭ−２は、依存関係を有し、演算系命令ＡＬＵ−４が発行された後発行される。メモリアクセス系命令ＭＥＭ−３は、依存関係を有し、演算系命令ＡＬＵ−５が発行された後発行される。
【００５６】
図１３のタイムチャートは、図１２に示されるように命令が登録されたときのメモリアクセス系命令ＭＥＭ−１〜３と演算系命令ＡＬＵ−３〜８との状態を示す。メモリアクセス系命令ＭＥＭ−１〜３は、依存関係があるので依存関係解放報告３２が通知されないと発行されず、且つ、エントリの添付番号の最も若い順に発行される。演算系命令ＡＬＵ−３〜８は、依存関係がないためエントリの番号の若い順に発行される。
【００５７】
タイミングＴ２では、演算系命令ＡＬＵ−３が発行される。依存関係解放報告３２が通知される。タイミングＴ３では、演算系命令ＡＬＵ−３が実行される。演算系命令ＡＬＵ−４が発行され、依存関係解放報告３２が通知される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−１の依存関係が解放される。
【００５８】
タイミングＴ４では、演算系命令ＡＬＵ−３は完了する。演算系命令ＡＬＵ−４は実行される。演算系命令ＡＬＵ−５は発行される。依存関係解放通知３２が通知される。メモリアクセス系命令ＭＥＭ−１は発行される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−２の依存関係が解放される。
【００５９】
タイミングＴ５では、演算系命令ＡＬＵ−４は完了する。演算系命令ＡＬＵ−５は実行される。演算系命令ＡＬＵ−６は発行される。メモリアクセス系命令ＭＥＭ−１は実行される。メモリアクセス系命令ＭＥＭ−２は発行される。依存関係解放報告３２を受けてメモリアクセス系命令ＭＥＭ−３の依存関係が解放される。
【００６０】
タイミングＴ６では、演算系命令ＡＬＵ−５は完了する。演算系命令ＡＬＵ−６は実行される。演算系命令ＡＬＵ−７は発行される。メモリアクセス系命令ＭＥＭ−１は完了する。メモリアクセス系命令ＭＥＭ−２は実行される。メモリアクセス系命令ＭＥＭ−３は発行される。
【００６１】
タイミングＴ７では、演算系命令ＡＬＵ−６は完了する。演算系命令ＡＬＵ−７は実行される。演算系命令ＡＬＵ−８は発行される。メモリアクセス系命令ＭＥＭ−２は完了する。メモリアクセス系命令ＭＥＭ−３は実行される。
【００６２】
タイミングＴ８では、演算系命令ＡＬＵ−７は完了する。演算系命令ＡＬＵ−８は実行される。メモリアクセス系命令ＭＥＭ−３は完了する。タイミングＴ９では、演算系命令ＡＬＵ−８が完了する。このように全ての命令が終了するまでには９タイミングを要する。
【００６３】
図１４は、図１２のタイムチャートにおけるタイミングＴ８（図１２中の矢印の部分）のときのＲＯＢ２１の状態を示す。エントリ４１には、演算系命令ＡＬＵ−１が登録されている。エントリ４２には、演算系命令ＡＬＵ−２が登録されている。エントリ４３には、演算系命令ＡＬＵ−３が登録されている。エントリ４４には、メモリアクセス系命令ＭＥＭ−１が登録されている。エントリ４５には、演算系命令ＡＬＵ−４が登録されている。エントリ４６には、メモリアクセス系命令ＭＥＭ−２が登録されている。エントリ４７には、演算系命令ＡＬＵ−５が登録されている。エントリ４８には、メモリアクセス系命令ＭＥＭ−３が登録されている。エントリ４９には、演算系命令ＡＬＵ−６が登録されている。エントリ５０には、演算系命令ＡＬＵ−７が登録されている。エントリ５１には、演算系命令ＡＬＵ−８が登録されている。エントリ５２は、空になっている。
【００６４】
このとき、エントリ４１〜５０は解放可能である。先のバッファキュー制御しないときより、ＲＯＢ２１の資源を効率よく使用することができる。
【００６５】
本発明によるバッファキュー制御によれば、古い命令の優先順位を高く設定することができる。このため、イン・オーダ発行されるメモリアクセス系命令に対して速く依存関係が解消される。
【００６６】
【発明の効果】
本発明による命令バッファ及びバッファキュー制御は、より高速に複数命令を発行できる。
【図面の簡単な説明】
【図１】図１は、本発明による命令バッファの実施の形態を示すブロック図である。
【図２】図２は、ＲＯＢを示すブロック図である。
【図３】図３は、演算系命令バッファを示すブロック図である。
【図４】図４は、メモリアクセス系命令バッファを示すブロック図である。
【図５】図５は、演算系命令バッファの動作を示すタイムチャートである。
【図６】図６は、演算系命令バッファの動作を示すタイムチャートである。
【図７】図７は、演算系命令バッファの動作を示すタイムチャートである。
【図８】図８は、演算系命令バッファの動作を示すタイムチャートである。
【図９】図９は、制御しない場合の演算系命令バッファとメモリアクセス系命令バッファの状態を示すブロック図である。
【図１０】図１０は、制御しない場合の各命令の状態を示すタイムチャートである。
【図１１】図１１は、制御しない場合のＲＯＢを示すブロック図である。
【図１２】図１２は、制御した場合の演算系命令バッファとメモリアクセス系命令バッファを示す図である。
【図１３】図１３は、制御した場合の各命令の状態を示すタイムチャートである。
【図１４】図１４は、制御した場合のＲＯＢを示すブロック図である。
【符号の説明】
１…命令フェッチステージ
２…命令振り分けステージ
３…命令デコードステージ
４…命令登録ステージ
５…命令発行ステージ
６…命令実行ステージ
７…命令完了ステージ
１１…命令キャッシュメモリ
１２…フェッチレジスタ
１３，１４…デコードレジスタ
１５，１６，１７，１８…命令デコーダ
２１…ＲＯＢ
２２…演算系命令バッファ
２３…メモリアクセス系命令バッファ
２４，２５…命令発行レジスタ
２６，２７…命令実行レジスタ
２８，２９…命令完了レジスタ
３１…命令登録報告
３２…依存関係解放報告
３３，３４…バッファ解放報告
３５…命令完了報告
【図１】
0003558001.tif 000002
【図２】
0003558001.tif 000003
【図３】
0003558001.tif 000004
【図４】
0003558001.tif 000005
【図５】
0003558001.tif 000006
【図６】
0003558001.tif 000007
【図７】
0003558001.tif 000008
【図８】
0003558001.tif 000009
【図９】
0003558001.tif 000010
【図１０】
0003558001.tif 000011
【図１１】
0003558001.tif 000012
【図１２】
0003558001.tif 000013
【図１３】
0003558001.tif 000014
【図１４】
0003558001.tif 000015