(57)【要約】本発明は、分岐予測を誤った場合に、再命令フェッチ要求をメモリに出すまでの間、誤った命令フェッチリクエストやオペランドリクエストを抑止し又は無効化する、命令制御装置及びその制御方法を提供することを目的とする。この目的を達成するために、命令を記憶した記憶部から前記命令をフェッチし、アウトオブオーダ方式で命令を実行する、命令の分岐を予測する分岐命令予測部と分岐予測制御部とを有する命令制御装置であって、分岐予測制御部が分岐命令予測部による分岐予測が誤りであったと判断した場合には、分岐予測制御部が分岐命令予測部による分岐予測が誤であったと判断してから記憶部から正しい命令を再フェッチするまでの間、既に記憶部に出力された命令フェッチリクエストを抑止するとともに、既に記憶部から出力された命令を無効化する、命令制御装置により構成する。
2004107163.tif 000002
【特許請求の範囲】
【請求項１】
アウトオブオーダ方式で命令を実行する、命令を記憶した記憶部から前記命令をフェッチするように制御する命令フェッチ制御部と、
前記記憶部から供給される命令を一時記憶する命令バッファと、
前記命令バッファバッファから送られる命令をデコードする命令デコーダと、
命令の分岐を予測する分岐命令予測部と、
前記命令フェッチ制御部、前記命令バッファ、前記命令デコーダ及び、前記分岐命令予測部を制御する分岐予測制御部とを有する命令制御装置において、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤であったと判断してから前記記憶部から前記命令バッファが正しい命令を再フェッチするまでの間、前記分岐予測制御部は、既に前記記憶部に出力された命令フェッチリクエストを抑止する信号を前記命令フェッチ制御部へ出力し且つ、前記命令バッファを無効化する信号を前記命令バッファへ出力する、命令制御装置。
【請求項２】
前記分岐予測制御部は、前記分岐命令予測部により分岐すると予測された分岐命令が分岐しない場合又は、前記分岐命令予測部により分岐しないと予測された分岐命令が分岐する場合又は、前記分岐命令予測部により分岐命令でない命令を分岐命令であるかのごとく分岐すると予測する場合又は、前記分岐命令予測部により分岐すると予測した分岐命令の分岐先アドレスが誤りである場合の何れかの場合に、前記分岐命令予測部による分岐予測が誤りであると判断することを特徴とする、請求項１に記載の命令制御装置。
【請求項３】
アウトオブオーダ方式で命令を実行する、命令を記憶した記憶部から命令をフェッチするように制御する命令フェッチ制御部と、
前記記憶部からの命令を一時記憶する命令バッファと、
前記命令バッファバッファから送られる命令をデコードする命令デコーダと、
命令の分岐を予測する分岐命令予測部と、
前記命令フェッチ制御部、前記命令バッファ、前記命令デコーダ及び、前記分岐命令予測部を制御する分岐予測制御部とを有する命令制御装置において、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤であったと判断してから前記記憶部から前記命令バッファが正しい命令を再フェッチするまでの間、前記分岐予測制御部は、前記分岐命令予測部による前記分岐予測の誤りにより、誤って実行されようとしている命令からのオペランドリクエストの無効化を行う信号を前記記憶部へ出力し且つ、前記命令デコーダを無効化する信号を前記命令デコーダへ出力する、命令制御装置。
【請求項４】
前記分岐予測制御部は、前記分岐命令予測部により分岐すると予測された分岐命令が分岐しない場合又は、前記分岐命令予測部により分岐しないと予測された分岐命令が分岐する場合又は、前記分岐命令予測部により分岐命令でない命令を分岐命令であるかのごとく分岐すると予測する場合又は、前記分岐命令予測部により分岐すると予測した分岐命令の分岐先アドレスが誤りである場合の何れかの場合に、前記分岐命令予測部による分岐予測が誤りであると判断することを特徴とする、請求項３に記載の命令制御装置。
【請求項５】
命令を記憶した記憶部から前記命令をフェッチし、アウトオブオーダ方式で命令を実行する、命令の分岐を予測する分岐命令予測部と分岐予測制御部とを有する命令制御装置を制御する方法であって、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤であったと判断してから前記記憶部から正しい命令を再フェッチするまでの間、既に前記記憶部に出力された命令フェッチリクエストを抑止するステップと、既に前記記憶部から出力された命令を無効化するステップとを有する、命令制御装置の制御方法。
【請求項６】
前記分岐予測制御部は、前記分岐命令予測部により分岐すると予測された分岐命令が分岐しない場合又は、前記分岐命令予測部により分岐しないと予測された分岐命令が分岐する場合又は、前記分岐命令予測部により分岐命令でない命令を分岐命令であるかのごとく分岐すると予測する場合又は、前記分岐命令予測部により分岐すると予測した分岐命令の分岐先アドレスが誤りである場合の何れかの場合に、前記分岐命令予測部による分岐予測が誤りであると判断することを特徴とする、請求項５に記載の命令制御装置の制御方法。
【請求項７】
命令を記憶した記憶部から前記命令をフェッチし、アウトオブオーダ方式で命令を実行する、命令の分岐を予測する分岐命令予測部と分岐予測制御部とを有する命令制御装置を制御する方法であって、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤であったと判断してから前記記憶部から正しい命令を再フェッチするまでの間、誤って実行されようとしている命令からのオペランドリクエストの無効化を行うステップと、実行パイプラインへ投入される命令を無効化するステップとを有する、命令制御装置の制御方法。
【請求項８】
前記分岐予測制御部は、前記分岐命令予測部により分岐すると予測された分岐命令が分岐しない場合又は、前記分岐命令予測部により分岐しないと予測された分岐命令が分岐する場合又は、前記分岐命令予測部により分岐命令でない命令を分岐命令であるかのごとく分岐すると予測する場合又は、前記分岐命令予測部により分岐すると予測した分岐命令の分岐先アドレスが誤りである場合の何れかの場合に、前記分岐命令予測部による分岐予測が誤りであると判断することを特徴とする、請求項７に記載の命令制御装置の制御方法。
【発明の詳細な説明】
【技術分野】  本発明は、一般的には、コンピュータの中央処理ユニット内の命令制御装置に関連し、特に、分岐予測機構を持つアウトオブオーダ方式の命令制御装置において、分岐予測を誤った時に、再命令フェッチ要求をメモリに出せるようになるまで、誤った命令フェッチリクエスト、オペランドリクエストを抑止もしくは無効化する命令制御方式に関連する。
【背景技術】  コンピュータの中央処理ユニット内の命令制御装置（インストラクションユニット）を制御するための処理方式には、インオーダー方式とアウトオブオーダ処理方式がある。インオーダー方式の処理では、命令がメモリに記憶されている順序に実行される。
これに対して、アウトオブオーダ方式の処理では、一つの命令の実行が完了するのを待たずに、複数の後続の命令が、順次に、実行パイプラインに投入されて、命令が実行される。即ち、実行パイプラインの中で、複数の演算器より実行する命令の順序を変更しながら、命令を実行する。そして、最終的には、全体的な命令の実行は、インオーダーで完了する。このように、実行パイプラインへの命令の投入とそこからの完了は、順次に行われるが、実行パイプラインの中では、実際には、命令は、順序を変更しながら実行される。
しかし、アウトオブオーダ方式の処理でも、先行している命令の実行結果が後続の命令の実行に影響を与える場合には、先行している命令の処理が終了しなければ、その間、後続の命令は実行できない。従って、先行する命令の完了を待ち続けることになる。
これは、上述の先行している命令が分岐命令である場合に、この分岐命令の実行において顕著に見られる。分岐命令には、条件分岐命令と無条件分岐命令がある。この分岐命令の中でも、特に条件分岐命令は、自分自身より以前の実行中の命令において、分岐条件を変更しようとしている命令が存在する場合には、その命令が完了して、分岐条件が確定するまで、条件分岐命令による分岐するか又は、しないかが確定しない。
従って、この条件分岐命令の後続の命令シーケンスが確定できないために、後続の命令を実行パイプラインに投入できずに、処理が停止してしまう。これにより、処理能力が低下する結果となる。
処理能力即ち、性能の低下は、他の処理方式を採用している命令制御装置においても同様であり、そして、命令制御装置共通の課題である。この分岐命令による性能低下という課題を解決するための手段として、通常は、分岐命令の分岐実行を予測するための予測機構を、命令制御装置に保有し、分岐命令の実行の高速化を図るようにしている。
分岐予測機構を備えたアウトオブオーダ処理方式の場合には、複数の分岐命令が分岐予測の結果をもとに実行パイプラインに投入される。分岐条件が確定した分岐命令から順次、分岐の有無および分岐予測の成否が確定する。
分岐予測機構による分岐予測が正しい場合には、予測した分岐命令の後続の命令は、正しく実行パイプラインに投入される。しかし、分岐予測が誤っていた場合には、予測した分岐命令の後続の命令は、誤った命令シーケンスであるので、実行パイプライン上から消去し、且つ、正しい命令シーケンスで実行し直す必要がある。
分岐予測に失敗した場合には、命令フェッチを再度行うように動作する。しかし、分岐予測機構による分岐予測が失敗したことが判明してから、命令フェッチが再度行われるまでの間や、又は、実行パイプライン上から誤った命令シーケンスが消去されるまでに、ある程度の時間がかかる場合がある。
この間に、実際には実行しない命令が実行パイプライン上に存在することになり、これらの実際には実行しない命令から、オペランドのリクエスト要求が発生してしまう。これは、命令フェッチが行われる場合についても同様である。即ち、実際には使用しない命令シーケンスに対する不必要なリクエストが発生してしまう。実際には必要としないオペランド又は命令フェッチリクエストが発生すると、キャッシュにおける不必要なリプレースが発生し又は、演算器等の命令制御リソースの無駄な消費を引き起こし、それらが、性能の低下の要因となる。
即ち、分岐命令の分岐判定がおこなわれて、分岐予測が失敗していると判断された場合には、再命令フェッチリクエストを命令フェッチ制御部に出す必要がある。しかし、再命令フェッチリクエストを出すためには分岐条件と分岐先アドレスがともに確定していなければならない。更に、分岐条件が確定していて分岐予測が失敗していることが判明していても分岐先アドレスが確定していなければ再命令フェッチリクエストは出せずその間命令フェッチ制御部は不必要な命令フェッチリクエストを出しつづけるという問題がある。
更に、分岐予測に失敗し間違った予測をもとに実行パイプラインに投入された命令をパイプライン上から消去しなければならないがそのためには分岐予測に失敗した分岐命令が命令完了しなければならない。しかし命令完了はインオーダ処理のため分岐命令以前の命令が命令完了しなければ実行パイプラインに投入された命令をパイプライン上から消去することが出来ない。そのため分岐予測に失敗した分岐命令の命令完了が遅れると誤って実行パイプラインに投入された命令から不必要なオペランドリクエストが出てしまうという問題がある。
【発明の開示】
本発明は上記の点に鑑みてなされたもので、分岐予測を誤った場合に、再命令フェッチ要求をメモリに出すまでの間、誤った命令フェッチリクエストやオペランドリクエストを抑止し又は無効化する、命令制御方法及び命令フェッチ方法及び、その装置を提供することを目的とする。
この目的を達成するために、本発明は、アウトオブオーダ方式で命令を実行する、命令を記憶した記憶部から前記命令をフェッチするように制御する命令フェッチ制御部と、
前記記憶部から供給される命令を一時記憶する命令バッファと、
前記命令バッファバッファから送られる命令をデコードする命令デコーダと、
命令の分岐を予測する分岐命令予測部と、
前記命令フェッチ制御部、前記命令バッファ、前記命令デコーダ及び、前記分岐命令予測部を制御する分岐予測制御部とを有する命令制御装置において、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤であったと判断してから前記記憶部から前記命令バッファが正しい命令を再フェッチするまでの間、前記分岐予測制御部は、既に前記記憶部に出力された命令フェッチリクエストを抑止する信号を前記命令フェッチ制御部へ出力し且つ、前記命令バッファを無効化する信号を前記命令バッファへ出力する、命令制御装置を提供する。
本発明により、このように分岐予測失敗が判明していて再命令フェッチリクエストを出すための他の条件が確定していない時に再命令フェッチリクエストのための全ての条件が揃うまでキャッシュ制御部に対して全ての命令フェッチリクエストを無効化するためのキャンセル信号を通知でき、また、同時にデコーダ部に対しても命令の発行を止めるよう通知できる。
更に、この目的を達成するために、本発明は、アウトオブオーダ方式で命令を実行する、命令を記憶した記憶部から命令をフェッチするように制御する命令フェッチ制御部と、
前記記憶部からの命令を一時記憶する命令バッファと、
前記命令バッファバッファから送られる命令をデコードする命令デコーダと、
命令の分岐を予測する分岐命令予測部と、
前記命令フェッチ制御部、前記命令バッファ、前記命令デコーダ及び、前記分岐命令予測部を制御する分岐予測制御部とを有する命令制御装置において、
前記分岐予測制御部が前記分岐命令予測部による分岐予測が誤りであったと判断した場合には、前記分岐予測制御部が前記分岐命令予測部による前記分岐予測が誤りであったと判断してから前記記憶部から前記命令バッファが正しい命令を再フェッチするまでの間、前記分岐予測制御部は、前記分岐命令予測部による前記分岐予測の誤りにより、誤って実行されようとしている命令からのオペランドリクエストの無効化を行う信号を前記記憶部へ出力し且つ、前記命令デコーダを無効化する信号を前記命令デコーダへ出力する、命令制御装置を提供する。
本発明により上記、命令フェッチリクエストを無効化するためのキャンセル信号を出すことができ、同時にキャッシュ制御部に対して不必要なオペランドフェッチリクエストを抑止するためのキャンセル信号を通知できる。
また、この時、キャッシュ制御部に対して誤って実行パイプラインに投入された命令の識別子を同時に通知することでキャッシュ制御部において要求されたオペランドフェッチリクエストが必要なリクエストか不必要なリクエストであるかの判別ができる。このように本発明では不必要な命令フェッチリクエストやオペランドリクエストを抑止するためのキャンセル信号を、分岐命令制御部から命令フェッチ制御部、キャッシュ制御部にそれぞれ通知し、再命令フェッチが完了するまで命令投入を止めることができるので、キャッシュ部における不必要なリプレースを抑止し、プロセッサの性能向上を図ることができる。
【図面の簡単な説明】  本発明の他の目的、特徴及び利点は、添付の図面を参照しながら以下の詳細な説明を読むことにより一層明瞭となるであろう。
図１は、本発明の実施例のコンピュータの中央処理ユニット内の命令制御装置内の分岐命令制御動作を実行する部分の概要を示すブロック図である。
図２は、本発明の実施例の動作のフローチャートを示す図である。
図３は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図４は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図５は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図６は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図７は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図８は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図９は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図１０は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図１１は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図１２は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
図１３は、従来の分岐制御のタイミングチャートを示す図である。
図１４は、本発明に従って生成された信号のタイミングチャートを示す図である。
【発明を実施するための最良の形態】  以下に、本発明を実施するための実施の形態について、図面を用いて説明する。
図１は、本発明の実施例のコンピュータの中央処理ユニット内の命令制御装置１００（インストラクションユニット）内の分岐命令制御動作を実行する部分の概要を示すブロック図である。命令制御装置１００は、キャッシュメモリ１０１キャッシュ制御部１０２より構成される記憶部１０３と接続されている。命令制御装置（インストラクションユニット）１００内の分岐命令制御動作を実行する部分は、主に、命令フェッチ制御部（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｃｏｎｔｒｏｌ又は、ＩＦＣＴＬ）１１１、命令バッファ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｂｕｆｆｅｒ又は、ＩＢＢＵＦＥＲ）１１２、分岐予測部（Ｂｒａｎｃｈ  Ｈｉｓｔｏｒｙ、ＢＲＨＩＳ）１１３、分岐命令制御部（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  Ｆｏｒ  Ｂｒａｎｃｈ又は、ＲＳＢＲ）１１４、命令デコード部（Ｄｅｃｏｄｅｒ又は、ＤＤＥＣＲ）１１５、命令完了制御部（Ｃｏｍｍｉｔ  Ｆａｃｉｌｉｔｙ又は、ＣＯＭＩＴ）１１６により構成される。そして、命令制御装置１００は、キャッシュ制御部１０２を介して、キャッシュメモリ１０１からの命令を読み出しを制御する。命令制御装置１００では、命令は、前述のアウトオブオーダ方式に従って処理される。
本実施例の命令制御装置１００では、実行パイプライン上に存在する全命令に対して実行パイプライン上での命令順序を示すフラグ（Ｉｎｓｔｒｕｃｔｉｏｎ  ＩＤ又は、ＩＩＤ）が割り当てられている。実行パイプライン上ではアウトオブオーダ方式の処理に従って、各命令が処理されるが、命令完了時にはＩＩＤに基づいて、前述のインオーダ処理で命令の完了が行われる。
先ず最初に、図１のブロック図の概略の動作について説明する。
命令フェッチ制御部１１１は、例えば、アドレスのような、命令フェッチリクエスト（ＩＦ＿ＲＥＱ＿ＶＡＬ）をキャッシュ制御部１０２へ送る。これにより、キャッシュ制御部１０２を介して、キャッシュメモリ１０１に格納された命令が読み出される。このように読み出された命令又は、キャッシュ制御部１０２から命令バッファ１１２へ格納される。
また、命令フェッチ制御部１１１は、上述のアドレスを信号１２０を介して、分岐予測部１１３へも送る。命令フェッチ制御部１１１により、命令フェッチが行われると、命令フェッチアドレスをもとに、上述のように、ＢＲＨＩＳ１１３において分岐予測が実行される。分岐予測の結果、分岐すると予測した場合は、命令は、その命令に“分岐する”という予測結果を示すフラグ（＋ＢＲＨＩＳ＿ＨＩＴ＝１）を添付して、信号１２１を介してＩＦＣＬ１１１へそして、ＩＦＣＬ１１１とＩＢＢＵＦＥＲ１１２を介して、ＤＤＥＣＲ１１５に投入される。このように分岐予測された命令は、命令フェッチ制御部１１１から命令バッファ１１２へ格納される。
命令バッファ１１２は、格納された命令を、命令デコード部１１５へ送る。
命令デコード部１１５では、命令バッファ１１２より送られた命令を、デコードする。
命令デコード部（ＤＤＥＣＲ）１１５において命令をデコードする時に、“分岐命令”又は“分岐すると予測している命令”と判断された命令は、信号１２２を介して、ＲＳＢＲ１１４、ＣＯＭＩＴ１１６にエントリされる。なお、ＤＤＥＣＲ１１５でのデコード結果に関わらず、実行パイプラインに投入される全ての命令は命令完了制御部（ＣＯＭＩＴ）１１６にエントリされる。
ＤＤＥＣＲ１１５は、命令の実行パイプラインへの投入と全命令に対して実行パイプライン上での命令順序を示すフラグ（Ｉｎｓｔｒｕｃｔｉｏｎ  ＩＤ又は、ＩＩＤ）の割り当てを行う。
ＲＳＢＲ１１４は、分岐判定、及び分岐予測失敗時には、命令フェッチ制御部１１１へ、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）を出力して制御を行う。ＲＳＢＲ１１４は、実行パイプライン上に存在する複数の分岐命令（エントリ）を登録し制御することが可能であり、各エントリは、前述の実行パイプライン上での命令順序を示すフラグＩＩＤで管理されている。ＲＳＢＲ１１４での制御が終了した命令は、ＲＳＢＲ１１４から解放され、そして、命令完了までの間は、ＣＯＭＩＴ１１６で制御される。ＣＯＭＩＴ１１６は、実行パイプライン上の全命令の命令完了を制御している。実行パイプライン上の全命令は、ＩＩＤで管理されており、そして、命令完了条件を満たしたものから順にインオーダ処理で命令を完了する。
次に、本発明の実施例の動作について、図２を参照して説明する。図２は、本発明の実施例の動作のフローチャートを示す図である。
図２のステップ２０１では、先ず最初に、上述のように、命令デコード部（ＤＤＥＣＲ）１１５から分岐命令が、分岐命令制御部（ＲＳＢＲ）１１４へ、発行される。
次に、ステップ２０２では、上述のように、ＲＳＢＲ１１４は、分岐命令を登録する。ＲＳＢＲ１１４は、実行パイプライン上に存在する複数の分岐命令を登録して制御することが可能である。
次に、ステップ２０３では、分岐の判定が行われる。分岐予測の判断が失敗している場合には、処理は、ステップ２０４へ進む。
ＲＳＢＲ１１４で分岐予測の判定が行われたときに、ＢＲＨＩＳ１１３での分岐予測が失敗していると判断される場合とは、次の第１の条件から第４の条件のいずれか１つの条件を満たす場合である。
第１の条件は、分岐しないと予測した分岐命令が分岐する場合である。第２の条件は、分岐すると予測した分岐命令が分岐しない場合である。第３の条件は、分岐すると予測した分岐命令の分岐先アドレスが誤りの場合である。第４の条件は、分岐命令でない命令を、分岐命令であるかのごとく分岐すると予測する場合である。
以下に、第１の条件から第４の条件を満たしている論理式を示す。
第１の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  −ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ  ＆  ＋ＲＳＢＲ＿ＴＡＫＥＮが真である場合であり、
第２の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  ＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ  ＆  −ＲＳＢＲ＿ＴＡＫＥＮが真である場合であり、
第３の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  ＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＴＡＶ  ＆  −ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨが真である場合であり、
第４の条件を満たす場合は：＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤが真である場合である。
ここで、各信号は、次の意味を有する信号である。
（１）＋ＲＳＢＲ＿ＶＡＬＩＤは、ＲＳＢＲ１１４エントリが分岐命令であることを示す。
（２）＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴは、そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測されたことを示す。
（３）＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤは、そのエントリの分岐条件が確定したことを示す。
（４）＋ＲＳＢＲ＿ＴＡＫＥＮは、そのエントリが分岐することを示す。
（５）＋ＲＳＢＲ＿ＴＡＶは、そのエントリの分岐アドレスが確定したことを示す。
（６）＋ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨは、そのエントリの予測分岐アドレスが正しいアドレスであることを示す。
（７）＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤは、分岐命令でない命令を、分岐命令のように分岐すると判断したことを示す。
ここで、信号名の先頭に付された”＋”記号は、正論理であることを示し、一方信号名に付された”−”記号は、負論理であることを示す。即ち、例えば、上述の（１）＋ＲＳＢＲ＿ＶＡＬＩＤについては、”そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測された”時に、＋ＲＳＢＲ＿ＶＡＬＩＤは正である。一方、”そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測された”時に、＋ＲＳＢＲ＿ＶＡＬＩＤは負である。又、記号”＆”は論理積の演算をを示す。
上述の何れかの条件が成立する場合には、処理は、ステップ２０４に進む。
次にステップ２０４では、以下の制御が同時に行われる。
ＲＳＢＲ１１４から、信号１２３（ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）により、ＩＦＣＴＬ１１１を経由して、キャッシュ制御部１０２に対して、命令フェッチリクエストの無効を通知する信号（ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）が送られる。
この時、ＩＦＣＬ１１１では全てのＩＢＢＵＦＥＲ１１２（メモリからフェッチしたデータをＤＤＥＣＲ１１５に投入するまで、一時的に保存するためのメモリ機構。本実施例では６ポートを有している）の中のデータを消去する。
この信号は、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）がＲＳＢＲ１１４からＩＦＣＬ１１１に、信号１２３を介して出されるまで、連続して送られる。
更に、分岐予測に失敗した命令（エントリ）よりも後続のＲＳＢＲエントリからの、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）を抑えるために、後続のＲＳＢＲエントリを消去する。
そして、ＲＳＢＲ１１４からＤＤＥＣＲ１１５に対して、実行パイプラインへの命令投入を抑止するための信号（ＩＮＨ＿Ｅ＿ＶＡＬＩＤ）が送られる。この信号は、誤った分岐予測によって実行パイプラインに投入された不必要な命令を実行パイプライン上から消去するまで（即ち、分岐予測に失敗した分岐命令が命令完了するまでの間。これにより、ＣＯＭＩＴ１１６から各命令制御部に対して、ＦＬＵＳＨ＿ＲＳという信号が送られて実行パイプライン上の命令が消去される。）連続して送られる。
これと同時に、ＲＳＢＲ１１４から、キャッシュ制御部１０２に対して、不必要なオペランドリクエストの無効を通知する信号（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ）が送られる。これと同時に、誤った分岐予測によって実行パイプラインに投入された不必要な命令からのオペランドリクエストと分岐命令以前に実行パイプラインに投入されている命令からのオペランドリクエストとを区別するため、分岐予測に失敗した分岐命令以降のＩＩＤをＲＳＢＲ１１４からキャッシュ制御部１０２に対して通知する（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］）。
この信号（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］）は、誤った分岐予測によって実行パイプラインに投入された不必要な命令を実行パイプライン上から消去するまで連続して送られる。
次に、ステップ２０５へ進む。ステップ２０５では、上述のステップ２０４で、各信号が発生されるように制御が行われたので、キャッシュ制御部ではＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５が全て１である間は、命令フェッチリクエストが無効となる。また、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤが１である間は、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］が指し示すＩＩＤ以降の実行パイプライン上の命令からのオペランドリクエストを無効化する。
次に、ステップ２０６では、ＲＳＢＲ１１４からＩＦＣＬ１１１へ、命令再フェッチ要求（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）が出され、そして、命令の再フェッチが再開される。
そして、次にステップ２０７へ進み、ＲＳＢＲ１１４による分岐命令制御が終了する。
ステップ２０３で、分岐予測が成功したと判断された場合には、処理は、ステップ２０３から、ステップ２０７へ進む。
そして、最後にステップ２０８で、分岐命令は完了する。
以上のように本発明では分岐予測の失敗が判明してから正しい命令シーケンスを再フェッチするまで不必要な命令フェッチリクエスト、オペランドリクエストを抑止し、実行パイプライン上への無意味な命令発行を止めることでキャッシュにおける不必要なリプレースの発生、演算器等の命令制御リソースの無駄な消費を防ぎ、命令処理装置の性能向上を図ることができる。
次に、本発明に従った、制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］を発生する回路について説明する。
図３から１２は、本発明に従った、上述の制御信号を発生する回路の実施例を示す。図１３は、従来のＲＳＢＲ１１４の制御信号のタイムチャートを示し、また、図１４は、本発明に従った、上述の制御信号を加えた、ＲＳＢＲ１１４の制御信号のタイムチャートを示す。
先ず最初に、図３から１２の制御信号を発生する回路について説明する。
図３は、ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５をセットする信号（＋ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）を発生する回路を示す。回路図において、”ＡＬＬ”は、ＩＤ＿０，１，２，３，４，５を示すものとする。
図３は、回路ブロック３１０、３２０、３３０及び多入力ＯＲゲート３４０より構成される。回路ブロック３１０は、４入力ＡＮＤゲート３１１、４入力ＡＮＤゲート３１２、４入力ＡＮＤゲート３１３、バッファ３１４及び４入力ＯＲゲート３１５より構成される。回路ブロック３２０と３３０は、回路ブロック３１０と同一の構成である。しかし各回路ブロックへの入力信号は、ＲＳＢＲ１１４に登録されている各々の命令（エントリ）に対応する。例えば、回路ブロック３１０は、ＩＩＤが０のエントリについての命令に対しての回路であり、回路ブロック３２０は、ＩＩＤは１のエントリについての命令に対しての回路であり、そして、回路ブロック３３０は、ＩＩＤがｎのエントリについての命令に対しての回路である。
回路ブロック３１０の４入力ＡＮＤゲート３１１は、前述の第１の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１１には、＋ＲＳＢＲ０＿ＶＡＬＩＤ、＋ＲＳＢＲ０＿ＲＥＳＯＬＶＥＤ、＋ＲＳＢＲ＿ＴＡＫＥＮ及び、−ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１１から’１’が出力される。これは第１の条件が成立した場合に相当する。
回路ブロック３１０の４入力ＡＮＤゲート３１２は、前述の第２の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１２には、＋ＲＳＢＲ＿ＶＡＬＩＤ、＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ、−ＲＳＢＲ＿ＴＡＫＥＮ及び、＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１２から’１’が出力される。これは第２の条件が成立した場合に相当する。
回路ブロック３１０の４入力ＡＮＤゲート３１３は、前述の第３の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１３には、＋ＲＳＢＲ＿ＶＡＬＩＤ、＋ＲＳＢＲ＿ＴＡＶ、−ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨ及び、＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１３から’１’が出力される。これは第３の条件が成立した場合に相当する。
回路ブロック３１０のバッファ３１４は、前述の第４の条件をデコードする回路である。回路ブロック３１０のバッファ３１４には、＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤが入力される。入力が’１’の時に、バッファ３１４から’１’が出力される。これは、第４の条件が成立した場合に想到する。
回路ブロック３１０の４入力ＡＮＤゲート３１１、４入力ＡＮＤゲート３１２、４入力ＡＮＤゲート３１３、バッファ３１４の何れかの出力が’１’の場合には、４入力ＯＲゲート３１５から’１’が出力される。
回路ブロック３２０と３３０についても同様である。そして、回路ブロック３１０、３２０又は、３３０のいずれか１つの出力が’１’の場合には、ＯＲゲート３４０から’１’が出力され、ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬは’１’となる。
図４は、図３と同一の構成であり、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤをセットする、（＋ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ）を発生する。
図５は、前述の図３で示されたの同様な回路３１０から３３０及び、インバータ５０１、５０２、バッファ５０３、及び、ＡＮＤゲート５０４、５０５より構成される。図５は、中間信号＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０、＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１、及び＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎを発生する。これらの信号は、分岐予測を失敗した次の命令を示す。＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０は、回路３１０の出力と等しい。＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１は、回路３１０の出力がインバータ５０１により反転された信号と、回路３２０の出力とを入力として、ＡＮＤゲート５０４により論理積の演算を行った結果である。また、＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎも同様に、ＡＮＤゲート５０５により演算されて出力される。
図６は、＋ＲＥＩＦＣＨ＿ＴＲＧ信号を発生する、ＲＳフリップフロップ６０１より構成される回路を示す。ＲＳフリップフロップ６０１の出力の＋ＲＥＩＦＣＨ＿ＴＲＧは、ＲＳフリップフロップ６０１のセット端子（Ｓ）に入力される再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）によりセットされる。そして、ＲＳフリップフロップ６０１のリセット端子（Ｒ）に入力される、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号によりリセットされる信号である。＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号は、ＣＯＭＩＴ１１６が出力する、実行パイプラインのクリア命令信号である。
図７は、＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号を発生する、ＲＳフリップフロップ７０１より構成される回路を示す。ここで、記号”ＡＬＬ”は、ＩＤ＿０，１，２，３，４，５を示す。ＲＳフリップフロップ７０１の出力の＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号は、ＲＳフリップフロップ７０１のセット端子（Ｓ）に入力される、図３のＯＲゲート３４０から出力される、＋ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬによりセットされる。一方、ＯＲゲート７０２がＲＳフリップフロップ７０１のリセット端子（Ｒ）に接続される。ＯＲゲート７０２の３つの入力には、再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）と、図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号と、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号が入力される。そして、再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）又は、図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号又は、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号のいずれか１つが’１’の時に、ＲＳフリップフロップ７０１のリセット端子（Ｒ）には、ＯＲゲート７０２からリセット信号は入力されて、＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号は、リセットされる。
図８は、２入力ＯＲゲート８０１と２入力ＡＮＤゲート８０２からなる、＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤを出力する回路を示す。図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号と図７のＲＳフリップフロップ７０１の出力の＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号の論理和を、ＯＲゲート８０１により演算子、そして、このＯＲゲート８０１の出力と、ＣＯＭＩＴ１１６の出力する−ＦＬＵＳＨ＿ＲＳ信号の論理積を、ＡＮＤゲート８０２により演算して、＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤを出力する。−ＦＬＵＳＨ＿ＲＳ信号は、図１のＣＯＭＩＴ１１６の出力する＋ＦＬＵＳＨ＿ＲＳ信号の負論理の信号である。
図９は、ＲＳフリップフロップ９０１と２入力ＡＮＤゲート９０２により構成される、＋Ｄ＿ＶＡＬＩＤを出力する回路を示す。２入力ＡＮＤゲート９０２の出力は、ＲＳフリップフロップ９０１のセット端子（Ｓ）に接続されている。２入力ＡＮＤゲート９０２により、図８のＡＮＤゲート８０２の出力する＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤの負論理の−ＩＮＨ＿Ｅ＿ＶＡＬＩＤ信号と、＋Ｅ＿ＶＡＬＩＤ信号の論理積が、ＡＮＤゲート９０２により演算されそして、ＡＮＤゲート９０２の出力信号によりＲＳフリップフロップ９０１の出力の＋Ｄ＿ＶＡＬＩＤ信号がセットされる。＋Ｄ＿ＶＡＬＩＤ信号は、デコードサイクルの開始を示す信号であり、命令デコード部１１５からＲＳＢＲ１１４とＣＯＭＩＴ１１６へ出力される。また、＋Ｅ＿ＶＡＬＩＤ信号は、ＩＢＢＵＦＥＲ１１２からＤＤＥＣＲ１１５へのセットのタイミングを示す信号である。
図１０は、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］のセット信号＋ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］を発生する回路を示す。図１０に示す回路は、２入力ＡＮＤゲート１００１から１００７、５入力ＯＲゲート１０１０、１０１１及び２入力ＯＲゲート１０２０より構成される。
２入力ＡＮＤゲート１００１には、図５のインバータ５０３より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０と、命令ＩＤ（ＩＩＤ）の＋ＲＳＢＲ０＿ＩＩＤ＿ＰＬ１［５：０］が入力される。また、２入力ＡＮＤゲート１００２には、図５の２入力ＡＮＤゲート５０４より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１と、命令ＩＤの＋ＲＳＢＲ１＿ＩＩＤ＿ＰＬ１［５：０］が入力される。また、２入力ＡＮＤゲート１００７には、図５の２入力ＡＮＤゲート５０５より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎと、命令ＩＤの＋ＲＳＢＲｎ＿ＩＩＤ＿ＰＬ１［５：０］が入力される。そして、２入力ＯＲゲート１０２０からは、分岐予測を失敗した分岐命令の、次の命令の命令ＩＤが出力される。
図１１は、ＲＳフリップフロップ１１０１により構成される、＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤを発生する回路を示す。ＲＳフリップフロップ１１０１のセット入力端子（Ｓ）には、図４のＯＲゲート３４０から出力される、ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤが入力され、この信号により＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ信号がセットされる。また、ＲＳフリップフロップ１１０１のリセット入力端子（Ｒ）には、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号が入力され、この信号により＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ信号がリセットされる。＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号は、ＣＯＭＩＴ１１６が出力する、実行パイプラインのクリア命令信号である。
図１２は、ＲＳフリップフロップ１２０１により構成される、＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］を出力する回路を示す。ＲＳフリップフロップ１２０１のセット端子（Ｓ）には、図１０のＯＲゲート１０２０から出力される、ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］信号が接続され、これにより＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］信号はセットされる。
以上のように、制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］を発生することができる。
次に、本発明に従って生成された信号のタイミングを説明する。
図１３は、従来の分岐制御のタイミングチャートを示す図である。そして、図１４は、本発明に従って生成された信号のタイミングチャートを示す図である。
図１３においては、デコードサイクルの開始を示す信号であり、命令デコード部１１５からＲＳＢＲ１１４とＣＯＭＩＴ１１６へ出力される、（１）Ｄ＿ＶＡＬＩＤ信号でサイクルが開始する。そして、番号（２）から（１２）に示すように、図１の各部を制御する前述した信号が発生される。
図１４おいて、図１３と同一番号を付した信号は、同一の信号を示す。本発明に従って生成された番号（１０１）から（１０８）に示す信号は、前述の図３から１２に示された実施例の回路により発生された信号を示す。
以上より、図３から１２に示された実施例の回路により，制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ［５：０］を発生することができる。これにより、分岐予測を誤った場合に、再命令フェッチ要求をメモリに出すまでの間、誤った命令フェッチリクエストやオペランドリクエストを抑止し又は無効化することができる。
【図１】
2004107163.tif 000003
【図２】
2004107163.tif 000004
【図３】
2004107163.tif 000005
【図４】
2004107163.tif 000006
【図５】
2004107163.tif 000007
【図６】
2004107163.tif 000008
【図７】
2004107163.tif 000009
【図８】
2004107163.tif 000010
【図９】
2004107163.tif 000011
【図１０】
2004107163.tif 000012
【図１１】
2004107163.tif 000013
【図１２】
2004107163.tif 000014
【図１３】
2004107163.tif 000015
【図１４】
2004107163.tif 000016
【手続補正書】
【提出日】平成18年3月31日(2006.3.31)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶手段からの命令のフェッチ制御を行う命令フェッチ制御手段と、
前記記憶手段からフェッチされた命令を一時記憶する命令バッファ手段と、
前記フェッチされた命令のうち分岐命令の分岐予測を行う分岐命令予測手段と、
前記命令フェッチ制御手段、前記命令バッファ手段及び前記分岐命令予測手段を制御する分岐命令制御手段とを有し、前記命令をアウトオブオーダに実行する命令制御装置において、
前記分岐命令制御手段が、前記分岐命令予測手段による分岐予測が誤りであると判断した場合には、
前記命令フェッチ制御手段により前記命令バッファ手段に前記分岐予測が正しく実行された場合における分岐先の命令を再フェッチするまでの間、前記分岐命令制御手段が、前記命令フェッチ制御手段による命令フェッチ制御を抑止するとともに、前記命令バッファ手段の無効化を行うことを特徴とする命令制御装置。
【請求項２】
前記分岐命令制御手段は、
前記分岐命令予測手段により分岐が成立すると予測された分岐命令について分岐が成立しない場合、又は
前記分岐命令予測手段により分岐が成立しないと予測された分岐命令について分岐が成立する場合、又は
前記分岐命令予測手段により分岐が成立すると予測された分岐命令の分岐先アドレスが誤りである場合、又は
前記分岐命令予測手段により分岐命令でない命令を分岐命令であるかのごとく分岐が成立すると予測する場合、
の何れかの場合に、前記分岐命令予測手段による分岐予測が誤りであると判断することを特徴とする請求項１記載の命令制御装置。
【請求項３】
記憶制御手段により制御される記憶手段からの命令のフェッチ制御を行う命令フェッチ制御手段と、
前記記憶手段からフェッチされた命令を一時記憶する命令バッファ手段と、
前記命令バッファ手段から供給される命令のデコードを行う命令デコード手段と、
前記デコードされた命令のうち分岐命令の分岐予測を行う分岐命令予測手段と、
前記命令フェッチ制御手段、前記命令バッファ手段、前記命令デコード手段及び前記分岐命令予測手段を制御する分岐命令制御手段とを有し、前記命令をアウトオブオーダに実行する命令制御装置において、
前記分岐命令制御手段が前記分岐命令予測手段による分岐予測が誤りであると判断した場合には、
前記分岐命令制御手段は前記記憶制御手段に対して、前記分岐命令予測手段による分岐予測が誤りであることにより誤って実行されようとしている命令についてのオペランド要求の無効化制御を行うとともに、前記命令デコード手段の無効化制御を行うことを特徴とする命令制御装置。
【請求項４】
前記分岐命令制御手段は、
前記分岐命令予測手段により分岐が成立すると予測された分岐命令について分岐が成立しない場合、又は
前記分岐命令予測手段により分岐が成立しないと予測された分岐命令について分岐が成立する場合、又は
前記分岐命令予測手段により分岐が成立すると予測された分岐命令の分岐先アドレスが誤りである場合、又は
前記分岐命令予測手段により分岐命令でない命令を分岐命令であるかのごとく分岐が成立すると予測する場合、
の何れかの場合に、前記分岐命令予測手段による分岐予測が誤りであると判断することを特徴とする請求項３記載の命令制御装置。
【請求項５】
記憶装置からの命令のフェッチを行う命令フェッチステップと、
前記記憶装置からフェッチされた命令を命令バッファに一時記憶する命令バッファステップと、
前記フェッチされた命令のうち分岐命令の分岐予測を行う分岐命令予測ステップとを有し、前記命令をアウトオブオーダに実行する命令制御方法であって、
前記分岐命令予測ステップの分岐予測が誤りであると判断した場合には、
前記命令フェッチステップにおいて、前記命令バッファに前記分岐予測が正しく実行された場合における分岐先の命令を再フェッチするまでに、
前記命令フェッチステップにおける命令フェッチを抑止する命令フェッチ抑止ステップと、
前記命令バッファステップの無効化を行う命令バッファ無効化ステップとを実行することを特徴とする命令制御方法。
【請求項６】
前記分岐命令予測ステップにおいて分岐が成立すると予測された分岐命令について分岐が成立しない場合、又は
前記分岐命令予測ステップにおいて分岐が成立しないと予測された分岐命令について分岐が成立する場合、又は
前記分岐命令予測ステップにおいて分岐が成立すると予測された分岐命令の分岐先アドレスが誤りである場合、又は
前記分岐命令予測ステップにおいて分岐命令でない命令を分岐命令であるかのごとく分岐が成立すると予測する場合、
の何れかの場合に、前記分岐命令予測ステップによる分岐予測が誤りであると判断することを特徴とする請求項５記載の命令制御方法。
【請求項７】
記憶装置からの命令のフェッチを行う命令フェッチステップと、
前記フェッチされた命令のデコードを行う命令デコードステップと、
前記デコードされた命令のうち分岐命令の分岐予測を行う分岐命令予測ステップとを有し、前記命令をアウトオブオーダに実行する命令制御方法であって、
前記分岐命令予測ステップの分岐予測が誤りであると判断した場合には、
前記分岐命令予測ステップにおける前記分岐予測の誤りにより誤って実行されようとしている命令についてのオペランド要求の無効化制御を行うオペランド要求無効化ステップと、
前記命令デコードステップにおける命令デコードの無効化を行う命令デコード無効化ステップとを実行することを特徴とする命令制御方法。
【請求項８】
前記分岐命令予測ステップにおいて分岐が成立すると予測された分岐命令について分岐が成立しない場合、又は
前記分岐命令予測ステップにおいて分岐が成立しないと予測された分岐命令について分岐が成立する場合、又は
前記分岐命令予測ステップにおいて分岐が成立すると予測された分岐命令の分岐先アドレスが誤りである場合、又は
前記分岐命令予測ステップにおいて分岐命令でない命令を分岐命令であるかのごとく分岐が成立すると予測する場合、
の何れかの場合に、前記分岐命令予測ステップによる分岐予測が誤りであると判断することを特徴とする請求項７記載の命令制御方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には、コンピュータの中央処理ユニット内の命令制御装置に関連し、特に、分岐予測機構を持つアウトオブオーダ方式の命令制御装置において、分岐予測を誤った時に、再命令フェッチ要求をメモリに出せるようになるまで、誤った命令フェッチリクエスト、オペランドリクエストを抑止もしくは無効化する命令制御方式に関連する。
【背景技術】
【０００２】
コンピュータの中央処理ユニット内の命令制御装置（インストラクションユニット）を制御するための処理方式には、インオーダー方式とアウトオブオーダ処理方式がある。インオーダー方式の処理では、命令がメモリに記憶されている順序に実行される。
【０００３】
これに対して、アウトオブオーダ方式の処理では、一つの命令の実行が完了するのを待たずに、複数の後続の命令が、順次に、実行パイプラインに投入されて、命令が実行される。即ち、実行パイプラインの中で、複数の演算器より実行する命令の順序を変更しながら、命令を実行する。そして、最終的には、全体的な命令の実行は、インオーダーで完了する。このように、実行パイプラインへの命令の投入とそこからの完了は、順次に行われるが、実行パイプラインの中では、実際には、命令は、順序を変更しながら実行される。
【０００４】
しかし、アウトオブオーダ方式の処理でも、先行している命令の実行結果が後続の命令の実行に影響を与える場合には、先行している命令の処理が終了しなければ、その間、後続の命令は実行できない。従って、先行する命令の完了を待ち続けることになる。
【０００５】
これは、上述の先行している命令が分岐命令である場合に、この分岐命令の実行において顕著に見られる。分岐命令には、条件分岐命令と無条件分岐命令がある。この分岐命令の中でも、特に条件分岐命令は、自分自身より以前の実行中の命令において、分岐条件を変更しようとしている命令が存在する場合には、その命令が完了して、分岐条件が確定するまで、条件分岐命令による分岐するか又は、しないかが確定しない。
【０００６】
従って、この条件分岐命令の後続の命令シーケンスが確定できないために、後続の命令を実行パイプラインに投入できずに、処理が停止してしまう。これにより、処理能力が低下する結果となる。
【０００７】
処理能力即ち、性能の低下は、他の処理方式を採用している命令制御装置においても同様であり、そして、命令制御装置共通の課題である。この分岐命令による性能低下という課題を解決するための手段として、通常は、分岐命令の分岐実行を予測するための予測機構を、命令制御装置に保有し、分岐命令の実行の高速化を図るようにしている。
【０００８】
分岐予測機構を備えたアウトオブオーダ処理方式の場合には、複数の分岐命令が分岐予測の結果をもとに実行パイプラインに投入される。分岐条件が確定した分岐命令から順次、分岐の有無および分岐予測の成否が確定する。
【０００９】
分岐予測機構による分岐予測が正しい場合には、予測した分岐命令の後続の命令は、正しく実行パイプラインに投入される。しかし、分岐予測が誤っていた場合には、予測した分岐命令の後続の命令は、誤った命令シーケンスであるので、実行パイプライン上から消去し、且つ、正しい命令シーケンスで実行し直す必要がある。
【００１０】
分岐予測に失敗した場合には、命令フェッチを再度行うように動作する。しかし、分岐予測機構による分岐予測が失敗したことが判明してから、命令フェッチが再度行われるまでの間や、又は、実行パイプライン上から誤った命令シーケンスが消去されるまでに、ある程度の時間がかかる場合がある。
【００１１】
この間に、実際には実行しない命令が実行パイプライン上に存在することになり、これらの実際には実行しない命令から、オペランドのリクエスト要求が発生してしまう。これは、命令フェッチが行われる場合についても同様である。即ち、実際には使用しない命令シーケンスに対する不必要なリクエストが発生してしまう。実際には必要としないオペランド又は命令フェッチリクエストが発生すると、キャッシュにおける不必要なリプレースが発生し又は、演算器等の命令制御リソースの無駄な消費を引き起こし、それらが、性能の低下の要因となる。
【００１２】
即ち、分岐命令の分岐判定がおこなわれて、分岐予測が失敗していると判断された場合には、再命令フェッチリクエストを命令フェッチ制御部に出す必要がある。しかし、再命令フェッチリクエストを出すためには分岐条件と分岐先アドレスがともに確定していなければならない。更に、分岐条件が確定していて分岐予測が失敗していることが判明していても分岐先アドレスが確定していなければ再命令フェッチリクエストは出せずその間命令フェッチ制御部は不必要な命令フェッチリクエストを出しつづけるという問題がある。
【００１３】
更に、分岐予測に失敗し間違った予測をもとに実行パイプラインに投入された命令をパイプライン上から消去しなければならないがそのためには分岐予測に失敗した分岐命令が命令完了しなければならない。しかし命令完了はインオーダ処理のため分岐命令以前の命令が命令完了しなければ実行パイプラインに投入された命令をパイプライン上から消去することが出来ない。そのため分岐予測に失敗した分岐命令の命令完了が遅れると誤って実行パイプラインに投入された命令から不必要なオペランドリクエストが出てしまうという問題がある。
【発明の開示】
【発明が解決しようとする課題】
【００１４】
本発明は上記の点に鑑みてなされたもので、分岐予測を誤った場合に、再命令フェッチ要求をメモリに出すまでの間、誤った命令フェッチリクエストやオペランドリクエストを抑止し又は無効化する、命令制御方法及び命令フェッチ方法及び、その装置を提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明による命令制御装置は、記憶手段からの命令のフェッチ制御を行う命令フェッチ制御手段と、前記記憶手段からフェッチされた命令を一時記憶する命令バッファ手段と、前記フェッチされた命令のうち分岐命令の分岐予測を行う分岐命令予測手段と、前記命令フェッチ制御手段、前記命令バッファ手段及び前記分岐命令予測手段を制御する分岐命令制御手段とを有し、前記命令をアウトオブオーダに実行する命令制御装置において、前記分岐命令制御手段が、前記分岐命令予測手段による分岐予測が誤りであると判断した場合には、前記命令フェッチ制御手段により前記命令バッファ手段に前記分岐予測が正しく実行された場合における分岐先の命令を再フェッチするまでの間、前記分岐命令制御手段が、前記命令フェッチ制御手段による命令フェッチ制御を抑止するとともに、前記命令バッファ手段の無効化を行うことを特徴とする。
【００１６】
本発明の別の側面による命令制御装置は、記憶制御手段により制御される記憶手段からの命令のフェッチ制御を行う命令フェッチ制御手段と、前記記憶手段からフェッチされた命令を一時記憶する命令バッファ手段と、前記命令バッファ手段から供給される命令のデコードを行う命令デコード手段と、前記デコードされた命令のうち分岐命令の分岐予測を行う分岐命令予測手段と、前記命令フェッチ制御手段、前記命令バッファ手段、前記命令デコード手段及び前記分岐命令予測手段を制御する分岐命令制御手段とを有し、前記命令をアウトオブオーダに実行する命令制御装置において、前記分岐命令制御手段が前記分岐命令予測手段による分岐予測が誤りであると判断した場合には、前記分岐命令制御手段は前記記憶制御手段に対して、前記分岐命令予測手段による分岐予測が誤りであることにより誤って実行されようとしている命令についてのオペランド要求の無効化制御を行うとともに、前記命令デコード手段の無効化制御を行うことを特徴とする。
【発明の効果】
【００１７】
本発明により、このように分岐予測失敗が判明していて再命令フェッチリクエストを出すための他の条件が確定していない時に再命令フェッチリクエストのための全ての条件が揃うまでキャッシュ制御部に対して全ての命令フェッチリクエストを無効化するためのキャンセル信号を通知でき、また、同時にデコーダ部に対しても命令の発行を止めるよう通知できる。
【００１８】
本発明により上記、命令フェッチリクエストを無効化するためのキャンセル信号を出すことができ、同時にキャッシュ制御部に対して不必要なオペランドフェッチリクエストを抑止するためのキャンセル信号を通知できる。
【００１９】
また、この時、キャッシュ制御部に対して誤って実行パイプラインに投入された命令の識別子を同時に通知することでキャッシュ制御部において要求されたオペランドフェッチリクエストが必要なリクエストか不必要なリクエストであるかの判別ができる。このように本発明では不必要な命令フェッチリクエストやオペランドリクエストを抑止するためのキャンセル信号を、分岐命令制御部から命令フェッチ制御部、キャッシュ制御部にそれぞれ通知し、再命令フェッチが完了するまで命令投入を止めることができるので、キャッシュ部における不必要なリプレースを抑止し、プロセッサの性能向上を図ることができる。
【発明を実施するための最良の形態】
【００２０】
以下に、本発明を実施するための実施の形態について、図面を用いて説明する。
【００２１】
図１は、本発明の実施例のコンピュータの中央処理ユニット内の命令制御装置１００（インストラクションユニット）内の分岐命令制御動作を実行する部分の概要を示すブロック図である。命令制御装置１００は、キャッシュメモリ１０１キャッシュ制御部１０２より構成される記憶部１０３と接続されている。命令制御装置（インストラクションユニット）１００内の分岐命令制御動作を実行する部分は、主に、命令フェッチ制御部（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｆｅｔｃｈ  Ｃｏｎｔｒｏｌ又は、ＩＦＣＴＬ）１１１、命令バッファ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｂｕｆｆｅｒ又は、ＩＢＢＵＦＥＲ）１１２、分岐予測部（Ｂｒａｎｃｈ  Ｈｉｓｔｏｒｙ、ＢＲＨＩＳ）１１３、分岐命令制御部（Ｒｅｓｅｒｖａｔｉｏｎ  Ｓｔａｔｉｏｎ  Ｆｏｒ  Ｂｒａｎｃｈ又は、ＲＳＢＲ）１１４、命令デコード部（Ｄｅｃｏｄｅｒ又は、ＤＤＥＣＲ）１１５、命令完了制御部（Ｃｏｍｍｉｔ  Ｆａｃｉｌｉｔｙ又は、ＣＯＭＩＴ）１１６により構成される。そして、命令制御装置１００は、キャッシュ制御部１０２を介して、キャッシュメモリ１０１からの命令を読み出しを制御する。命令制御装置１００では、命令は、前述のアウトオブオーダ方式に従って処理される。
【００２２】
本実施例の命令制御装置１００では、実行パイプライン上に存在する全命令に対して実行パイプライン上での命令順序を示すフラグ（Ｉｎｓｔｒｕｃｔｉｏｎ
ＩＤ又は、ＩＩＤ）が割り当てられている。実行パイプライン上ではアウトオブオーダ方式の処理に従って、各命令が処理されるが、命令完了時にはＩＩＤに基づいて、前述のインオーダ処理で命令の完了が行われる。
【００２３】
先ず最初に、図１のブロック図の概略の動作について説明する。
【００２４】
命令フェッチ制御部１１１は、例えば、アドレスのような、命令フェッチリクエスト（ＩＦ＿ＲＥＱ＿ＶＡＬ）をキャッシュ制御部１０２へ送る。これにより、キャッシュ制御部１０２を介して、キャッシュメモリ１０１に格納された命令が読み出される。このように読み出された命令又は、キャッシュ制御部１０２から命令バッファ１１２へ格納される。
【００２５】
また、命令フェッチ制御部１１１は、上述のアドレスを信号１２０を介して、分岐予測部１１３へも送る。命令フェッチ制御部１１１により、命令フェッチが行われると、命令フェッチアドレスをもとに、上述のように、ＢＲＨＩＳ１１３において分岐予測が実行される。分岐予測の結果、分岐すると予測した場合は、命令は、その命令に“分岐する”という予測結果を示すフラグ（＋ＢＲＨＩＳ＿ＨＩＴ＝１）を添付して、信号１２１を介してＩＦＣＬ１１１へそして、ＩＦＣＬ１１１とＩＢＢＵＦＥＲ１１２を介して、ＤＤＥＣＲ１１５に投入される。このように分岐予測された命令は、命令フェッチ制御部１１１から命令バッファ１１２へ格納される。
【００２６】
命令バッファ１１２は、格納された命令を、命令デコード部１１５へ送る。
【００２７】
命令デコード部１１５では、命令バッファ１１２より送られた命令を、デコードする。
【００２８】
命令デコード部（ＤＤＥＣＲ）１１５において命令をデコードする時に、“分岐命令”又は“分岐すると予測している命令”と判断された命令は、信号１２２を介して、ＲＳＢＲ１１４、ＣＯＭＩＴ１１６にエントリされる。なお、ＤＤＥＣＲ１１５でのデコード結果に関わらず、実行パイプラインに投入される全ての命令は命令完了制御部（ＣＯＭＩＴ）１１６にエントリされる。
【００２９】
ＤＤＥＣＲ１１５は、命令の実行パイプラインへの投入と全命令に対して実行パイプライン上での命令順序を示すフラグ（Ｉｎｓｔｒｕｃｔｉｏｎ  ＩＤ又は、ＩＩＤ）の割り当てを行う。
【００３０】
ＲＳＢＲ１１４は、分岐判定、及び分岐予測失敗時には、命令フェッチ制御部１１１へ、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）を出力して制御を行う。ＲＳＢＲ１１４は、実行パイプライン上に存在する複数の分岐命令（エントリ）を登録し制御することが可能であり、各エントリは、前述の実行パイプライン上での命令順序を示すフラグＩＩＤで管理されている。ＲＳＢＲ１１４での制御が終了した命令は、ＲＳＢＲ１１４から解放され、そして、命令完了までの間は、ＣＯＭＩＴ１１６で制御される。ＣＯＭＩＴ１１６は、実行パイプライン上の全命令の命令完了を制御している。実行パイプライン上の全命令は、ＩＩＤで管理されており、そして、命令完了条件を満たしたものから順にインオーダ処理で命令を完了する。
【００３１】
次に、本発明の実施例の動作について、図２を参照して説明する。図２は、本発明の実施例の動作のフローチャートを示す図である。
【００３２】
図２のステップ２０１では、先ず最初に、上述のように、命令デコード部（ＤＤＥＣＲ）１１５から分岐命令が、分岐命令制御部（ＲＳＢＲ）１１４へ、発行される。
【００３３】
次に、ステップ２０２では、上述のように、ＲＳＢＲ１１４は、分岐命令を登録する。ＲＳＢＲ１１４は、実行パイプライン上に存在する複数の分岐命令を登録して制御することが可能である。
【００３４】
次に、ステップ２０３では、分岐の判定が行われる。分岐予測の判断が失敗している場合には、処理は、ステップ２０４へ進む。
【００３５】
ＲＳＢＲ１１４で分岐予測の判定が行われたときに、ＢＲＨＩＳ１１３での分岐予測が失敗していると判断される場合とは、次の第１の条件から第４の条件のいずれか１つの条件を満たす場合である。
【００３６】
第１の条件は、分岐しないと予測した分岐命令が分岐する場合である。第２の条件は、分岐すると予測した分岐命令が分岐しない場合である。第３の条件は、分岐すると予測した分岐命令の分岐先アドレスが誤りの場合である。第４の条件は、分岐命令でない命令を、分岐命令であるかのごとく分岐すると予測する場合である。
【００３７】
以下に、第１の条件から第４の条件を満たしている論理式を示す。
第１の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  −ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ  ＆  ＋ＲＳＢＲ＿ＴＡＫＥＮが真である場合であり、
第２の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  ＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ  ＆  −ＲＳＢＲ＿ＴＡＫＥＮが真である場合であり、
第３の条件を満たす場合は：＋ＲＳＢＲ＿ＶＡＬＩＤ  ＆  ＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴ  ＆  ＋ＲＳＢＲ＿ＴＡＶ  ＆  −ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨが真である場合であり、
第４の条件を満たす場合は：＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤが真である場合である。
【００３８】
ここで、各信号は、次の意味を有する信号である。
（１）＋ＲＳＢＲ＿ＶＡＬＩＤは、ＲＳＢＲ１１４エントリが分岐命令であることを示す。
（２）＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴは、そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測されたことを示す。
（３）＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤは、そのエントリの分岐条件が確定したことを示す。
（４）＋ＲＳＢＲ＿ＴＡＫＥＮは、そのエントリが分岐することを示す。
（５）＋ＲＳＢＲ＿ＴＡＶは、そのエントリの分岐アドレスが確定したことを示す。
（６）＋ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨは、そのエントリの予測分岐アドレスが正しいアドレスであることを示す。
（７）＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤは、分岐命令でない命令を、分岐命令のように分岐すると判断したことを示す。
【００３９】
ここで、信号名の先頭に付された”＋”記号は、正論理であることを示し、一方信号名に付された”−”
記号は、負論理であることを示す。即ち、例えば、上述の（１）＋ＲＳＢＲ＿ＶＡＬＩＤについては、” そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測された”時に、＋ＲＳＢＲ＿ＶＡＬＩＤは正である。一方、”
そのエントリがＢＲＨＩＳ１１３で“分岐する”と予測された”時に、＋ＲＳＢＲ＿ＶＡＬＩＤは負である。又、記号”＆”は論理積の演算を示す。
【００４０】
上述の何れかの条件が成立する場合には、処理は、ステップ２０４に進む。
【００４１】
次にステップ２０４では、以下の制御が同時に行われる。
【００４２】
ＲＳＢＲ１１４から、信号１２３（ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）により、ＩＦＣＴＬ１１１を経由して、キャッシュ制御部１０２に対して、命令フェッチリクエストの無効を通知する信号（ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）が送られる。
【００４３】
この時、ＩＦＣＬ１１１では全てのＩＢＢＵＦＥＲ１１２（メモリからフェッチしたデータをＤＤＥＣＲ１１５に投入するまで、一時的に保存するためのメモリ機構。本実施例では６ポートを有している）の中のデータを消去する。
【００４４】
この信号は、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）がＲＳＢＲ１１４からＩＦＣＬ１１１に、信号１２３を介して出されるまで、連続して送られる。
【００４５】
更に、分岐予測に失敗した命令（エントリ）よりも後続のＲＳＢＲエントリからの、再命令フェッチリクエスト（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）を抑えるために、後続のＲＳＢＲエントリを消去する。
【００４６】
そして、ＲＳＢＲ１１４からＤＤＥＣＲ１１５に対して、実行パイプラインへの命令投入を抑止するための信号（ＩＮＨ＿Ｅ＿ＶＡＬＩＤ）が送られる。この信号は、誤った分岐予測によって実行パイプラインに投入された不必要な命令を実行パイプライン上から消去するまで（即ち、分岐予測に失敗した分岐命令が命令完了するまでの間。これにより、ＣＯＭＩＴ１１６から各命令制御部に対して、ＦＬＵＳＨ＿ＲＳという信号が送られて実行パイプライン上の命令が消去される。）連続して送られる。
【００４７】
これと同時に、ＲＳＢＲ１１４から、キャッシュ制御部１０２に対して、不必要なオペランドリクエストの無効を通知する信号（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ）が送られる。これと同時に、誤った分岐予測によって実行パイプラインに投入された不必要な命令からのオペランドリクエストと分岐命令以前に実行パイプラインに投入されている命令からのオペランドリクエストとを区別するため、分岐予測に失敗した分岐命令以降のＩＩＤをＲＳＢＲ１１４からキャッシュ制御部１０２に対して通知する（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]）。
【００４８】
この信号（ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]）は、誤った分岐予測によって実行パイプラインに投入された不必要な命令を実行パイプライン上から消去するまで連続して送られる。
【００４９】
次に、ステップ２０５へ進む。ステップ２０５では、上述のステップ２０４で、各信号が発生されるように制御が行われたので、キャッシュ制御部ではＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５が全て１である間は、命令フェッチリクエストが無効となる。また、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤが１である間は、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]が指し示すＩＩＤ以降の実行パイプライン上の命令からのオペランドリクエストを無効化する。
【００５０】
次に、ステップ２０６では、ＲＳＢＲ１１４からＩＦＣＬ１１１へ、命令再フェッチ要求（ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）が出され、そして、命令の再フェッチが再開される。
【００５１】
そして、次にステップ２０７へ進み、ＲＳＢＲ１１４による分岐命令制御が終了する。
【００５２】
ステップ２０３で、分岐予測が成功したと判断された場合には、処理は、ステップ２０３から、ステップ２０７へ進む。
【００５３】
そして、最後にステップ２０８で、分岐命令は完了する。
【００５４】
以上のように本発明では分岐予測の失敗が判明してから正しい命令シーケンスを再フェッチするまで不必要な命令フェッチリクエスト、オペランドリクエストを抑止し、実行パイプライン上への無意味な命令発行を止めることでキャッシュにおける不必要なリプレースの発生、演算器等の命令制御リソースの無駄な消費を防ぎ、命令処理装置の性能向上を図ることができる。
【００５５】
次に、本発明に従った、制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]を発生する回路について説明する。
【００５６】
図３から１２は、本発明に従った、上述の制御信号を発生する回路の実施例を示す。図１３は、従来のＲＳＢＲ１１４の制御信号のタイムチャートを示し、また、図１４は、本発明に従った、上述の制御信号を加えた、ＲＳＢＲ１１４の制御信号のタイムチャートを示す。
【００５７】
先ず最初に、図３から１２の制御信号を発生する回路について説明する。
【００５８】
図３は、ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５をセットする信号（＋ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５）を発生する回路を示す。回路図において、”ＡＬＬ”は、ＩＤ＿０，１，２，３，４，５を示すものとする。
【００５９】
図３は、回路ブロック３１０、３２０、３３０及び多入力ＯＲゲート３４０より構成される。回路ブロック３１０は、４入力ＡＮＤゲート３１１、４入力ＡＮＤゲート３１２、４入力ＡＮＤゲート３１３、バッファ３１４及び４入力ＯＲゲート３１５より構成される。回路ブロック３２０と３３０は、回路ブロック３１０と同一の構成である。しかし各回路ブロックへの入力信号は、ＲＳＢＲ１１４に登録されている各々の命令（エントリ）に対応する。例えば、回路ブロック３１０は、ＩＩＤが０のエントリについての命令に対しての回路であり、回路ブロック３２０は、ＩＩＤは１のエントリについての命令に対しての回路であり、そして、回路ブロック３３０は、ＩＩＤがｎのエントリについての命令に対しての回路である。
【００６０】
回路ブロック３１０の４入力ＡＮＤゲート３１１は、前述の第１の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１１には、＋ＲＳＢＲ０＿ＶＡＬＩＤ、＋ＲＳＢＲ０＿ＲＥＳＯＬＶＥＤ、＋ＲＳＢＲ＿ＴＡＫＥＮ及び、−ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１１から’１’が出力される。これは第１の条件が成立した場合に相当する。
【００６１】
回路ブロック３１０の４入力ＡＮＤゲート３１２は、前述の第２の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１２には、＋ＲＳＢＲ＿ＶＡＬＩＤ、＋ＲＳＢＲ＿ＲＥＳＯＬＶＥＤ、−ＲＳＢＲ＿ＴＡＫＥＮ及び、＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１２から’１’が出力される。これは第２の条件が成立した場合に相当する。
【００６２】
回路ブロック３１０の４入力ＡＮＤゲート３１３は、前述の第３の条件をデコードする回路である。回路ブロック３１０の４入力ＡＮＤゲート３１３には、＋ＲＳＢＲ＿ＶＡＬＩＤ、＋ＲＳＢＲ＿ＴＡＶ、−ＲＳＢＲ＿ＴＧＴＣＰ＿ＭＡＴＣＨ及び、＋ＲＳＢＲ＿ＢＲＨＩＳ＿ＨＩＴが入力される。全ての入力が’１’の時に、４入力ＡＮＤゲート３１３から’１’が出力される。これは第３の条件が成立した場合に相当する。
【００６３】
回路ブロック３１０のバッファ３１４は、前述の第４の条件をデコードする回路である。回路ブロック３１０のバッファ３１４には、＋ＲＳＢＲ＿ＰＨＡＮＴＯＭ＿ＶＡＬＩＤが入力される。入力が’１’の時に、バッファ３１４から’１’が出力される。これは、第4の条件が成立した場合に想到する。
【００６４】
回路ブロック３１０の４入力ＡＮＤゲート３１１、４入力ＡＮＤゲート３１２、４入力ＡＮＤゲート３１３、バッファ３１４の何れかの出力が’１’の場合には、４入力ＯＲゲート３１５から’１’が出力される。
【００６５】
回路ブロック３２０と３３０についても同様である。そして、回路ブロック３１０、３２０又は、３３０のいずれか１つの出力が’１’の場合には、ＯＲゲート３４０から’１’が出力され、ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬは’１’となる。
【００６６】
図４は、図３と同一の構成であり、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤをセットする、（＋ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ）を発生する。
【００６７】
図５は、前述の図３で示されたのと同様な回路３１０から３３０及び、インバータ５０１、５０２、バッファ５０３、及び、ＡＮＤゲート５０４、５０５より構成される。図５は、中間信号＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０、＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１、及び＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎを発生する。これらの信号は、分岐予測を失敗した次の命令を示す。＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０は、回路３１０の出力と等しい。＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１は、回路３１０の出力がインバータ５０１により反転された信号と、回路３２０の出力とを入力として、ＡＮＤゲート５０４により論理積の演算を行った結果である。また、＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎも同様に、ＡＮＤゲート５０５により演算されて出力される。
【００６８】
図６は、＋ＲＥＩＦＣＨ＿ＴＲＧ信号を発生する、ＲＳフリップフロップ６０１より構成される回路を示す。ＲＳフリップフロップ６０１の出力の＋ＲＥＩＦＣＨ＿ＴＲＧは、ＲＳフリップフロップ６０１のセット端子（Ｓ）に入力される再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）によりセットされる。そして、ＲＳフリップフロップ６０１のリセット端子（Ｒ）に入力される、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号によりリセットされる信号である。＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号は、ＣＯＭＩＴ１１６が出力する、実行パイプラインのクリア命令信号である。
【００６９】
図７は、＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号を発生する、ＲＳフリップフロップ７０１より構成される回路を示す。ここで、記号”ＡＬＬ”は、ＩＤ＿０，１，２，３，４，５を示す。ＲＳフリップフロップ７０１の出力の＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号は、ＲＳフリップフロップ７０１のセット端子（Ｓ）に入力される、図３のＯＲゲート３４０から出力される、＋ＳＥＴ＿ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬによりセットされる。一方、ＯＲゲート７０２がＲＳフリップフロップ７０１のリセット端子（Ｒ）に接続される。ＯＲゲート７０２の３つの入力には、再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）と、図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号と、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号が入力される。そして、再命令フェッチリクエスト（＋ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱ）又は、図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号又は、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号のいずれか１つが’１’の時に、ＲＳフリップフロップ７０１のリセット端子（Ｒ）には、ＯＲゲート７０２からリセット信号は入力されて、＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号は、リセットされる。
【００７０】
図８は、２入力ＯＲゲート８０１と２入力ＡＮＤゲート８０２からなる、＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤを出力する回路を示す。図６のＲＳフリップフロップ６０１の出力する＋ＲＥＩＦＣＨ＿ＴＲＧ信号と図７のＲＳフリップフロップ７０１の出力の＋ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＡＬＬ信号の論理和を、ＯＲゲート８０１により演算子、そして、このＯＲゲート８０１の出力と、ＣＯＭＩＴ１１６の出力する−ＦＬＵＳＨ＿ＲＳ信号の論理積を、ＡＮＤゲート８０２により演算して、＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤを出力する。−ＦＬＵＳＨ＿ＲＳ信号は、図１のＣＯＭＩＴ１１６の出力する＋ＦＬＵＳＨ＿ＲＳ信号の負論理の信号である。
【００７１】
図９は、ＲＳフリップフロップ９０１と２入力ＡＮＤゲート９０２により構成される、＋Ｄ＿ＶＡＬＩＤを出力する回路を示す。２入力ＡＮＤゲート９０２の出力は、ＲＳフリップフロップ９０１のセット端子（Ｓ）に接続されている。２入力ＡＮＤゲート９０２により、図８のＡＮＤゲート８０２の出力する＋ＩＮＨ＿Ｅ＿ＶＡＬＩＤの負論理の−ＩＮＨ＿Ｅ＿ＶＡＬＩＤ信号と、＋Ｅ＿ＶＡＬＩＤ信号の論理積が、ＡＮＤゲート９０２により演算されそして、ＡＮＤゲート９０２の出力信号によりＲＳフリップフロップ９０１の出力の＋Ｄ＿ＶＡＬＩＤ信号がセットされる。＋Ｄ＿ＶＡＬＩＤ信号は、デコードサイクルの開始を示す信号であり、命令デコード部１１５からＲＳＢＲ１１４とＣＯＭＩＴ１１６へ出力される。また、＋Ｅ＿ＶＡＬＩＤ信号は、ＩＢＢＵＦＥＲ１１２からＤＤＥＣＲ１１５へのセットのタイミングを示す信号である。
【００７２】
図１０は、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]のセット信号＋ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]を発生する回路を示す。図１０に示す回路は、２入力ＡＮＤゲート１００１から１００７、５入力ＯＲゲート１０１０、１０１１及び２入力ＯＲゲート１０２０より構成される。
【００７３】
２入力ＡＮＤゲート１００１には、図５のインバータ５０３より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ０と、命令ＩＤ（ＩＩＤ）の＋ＲＳＢＲ０＿ＩＩＤ＿ＰＬ１[５：０]が入力される。また、２入力ＡＮＤゲート１００２には、図５の２入力ＡＮＤゲート５０４より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲ１と、命令ＩＤの＋ＲＳＢＲ１＿ＩＩＤ＿ＰＬ１[５：０]が入力される。また、２入力ＡＮＤゲート１００７には、図５の２入力ＡＮＤゲート５０５より出力される＋ＣＡＮＣＥＬ＿ＯＰ＿ＲＳＢＲｎと、命令ＩＤの＋ＲＳＢＲｎ＿ＩＩＤ＿ＰＬ１[５：０]が入力される。そして、２入力ＯＲゲート１０２０からは、分岐予測を失敗した分岐命令の、次の命令の命令ＩＤが出力される。
【００７４】
図１１は、ＲＳフリップフロップ１１０１により構成される、＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤを発生する回路を示す。ＲＳフリップフロップ１１０１のセット入力端子（Ｓ）には、図４のＯＲゲート３４０から出力される、ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤが入力され、この信号により＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ信号がセットされる。また、ＲＳフリップフロップ１１０１のリセット入力端子（Ｒ）には、＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号が入力され、この信号により＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ信号がリセットされる。＋ＣＬＥＡＲ＿ＰＩＰＥＬＩＮＥ信号は、ＣＯＭＩＴ１１６が出力する、実行パイプラインのクリア命令信号である。
【００７５】
図１２は、ＲＳフリップフロップ１２０１により構成される、＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]を出力する回路を示す。ＲＳフリップフロップ１２０１のセット端子（Ｓ）には、図１０のＯＲゲート１０２０から出力される、ＳＥＴ＿ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]信号が接続され、これにより＋ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]信号はセットされる。
【００７６】
以上のように、制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]を発生することができる。
【００７７】
次に、本発明に従って生成された信号のタイミングを説明する。
【００７８】
図１３は、従来の分岐制御のタイミングチャートを示す図である。そして、図１４は、本発明に従って生成された信号のタイミングチャートを示す図である。
【００７９】
図１３においては、デコードサイクルの開始を示す信号であり、命令デコード部１１５からＲＳＢＲ１１４とＣＯＭＩＴ１１６へ出力される、（１）Ｄ＿ＶＡＬＩＤ信号でサイクルが開始する。そして、番号（２）から（１２）に示すように、図１の各部を制御する前述した信号が発生される。
【００８０】
図１４おいて、図１３と同一番号を付した信号は、同一の信号を示す。本発明に従って生成された番号（１０１）から（１０８）に示す信号は、前述の図３から１２に示された実施例の回路により発生された信号を示す。
【００８１】
以上より、図３から１２に示された実施例の回路により，制御信号ＲＳＢＲ＿ＣＡＮＣＥＬ＿ＩＦ＿ＩＤ＿０，１，２，３，４，５と、ＲＳＢＲ＿ＲＥＩＦＣＨ＿ＲＥＱと、ＩＮＨ＿Ｅ＿ＶＡＬＩＤと、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ＿ＶＡＬＩＤ及び、ＣＡＮＣＥＬ＿ＯＰ＿ＩＩＤ[５：０]を発生することができる。これにより、分岐予測を誤った場合に、再命令フェッチ要求をメモリに出すまでの間、誤った命令フェッチリクエストやオペランドリクエストを抑止し又は無効化することができる。
【図面の簡単な説明】
【００８２】
【図１】図１は、本発明の実施例のコンピュータの中央処理ユニット内の命令制御装置内の分岐命令制御動作を実行する部分の概要を示すブロック図である。
【図２】図２は、本発明の実施例の動作のフローチャートを示す図である。
【図３】図３は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図４】図４は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図５】図５は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図６】図６は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図７】図７は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図８】図８は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図９】図９は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図１０】図１０は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図１１】図１１は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図１２】図１２は、本発明に従った制御信号を生成するための回路図の一部を示す図である。
【図１３】図１３は、従来の分岐制御のタイミングチャートを示す図である。
【図１４】図１４は、本発明に従って生成された信号のタイミングチャートを示す図である。
【符号の説明】
【００８３】
１００  命令制御装置
【国際調査報告】
2004107163.tif 000017
2004107163.tif 000018
2004107163.tif 000019
2004107163.tif 000020