(57)【特許請求の範囲】
【請求項１】
一定の順番で配列された複数の実行前命令を格納した命令ウインドウバッファと、
前記命令ウインドウバッファの出力を一方の入力に入力するマルチプレクサと、
前記マルチプレクサの出力と前記マルチプレクサの他方の入力との間に接続されたロールバックユニット
前記ロールバックユニットに接続されたデコーダユニットと、
前記デコーダユニットに接続された制御ユニットと、
前記制御ユニットに接続され、前記マルチプレクサにロールバック制御信号を発行するロールバックコントロールユニット
とを備えることを特徴とする命令ロールバックプロセッサシステム。
【請求項２】
前記ロールバックユニットは、実行段パイプラインの長さ分だけ前記マルチプレクサの出力を保持するパイプラインレジスタを備えることを特徴とする請求項１記載の命令ロールバックプロセッサシステム。
【請求項３】
前記ロールバックユニットは、リング状に縦続接続される複数段のパイプラインレジスタを備えることを特徴とする請求項１記載の命令ロールバックプロセッサシステム。
【請求項４】
前記パイプラインレジスタは、
命令の第１ソースレジスタ値を格納するデータ格納部と、
命令の第２ソースレジスタ値を格納するデータ格納部と、
命令のデスティネーション番号を格納するデータ格納部と、
命令のオペレーションコードを格納するデータ格納部
とを備えることを特徴とする請求項２又は３記載の命令ロールバックプロセッサシステム。
【請求項５】
前記デコーダユニットは、
前記複数段のパイプラインレジスタの内、第１段目のパイプラインレジスタからの命令をデコードする第１の命令デコーダ
を備えることを特徴とする請求項１記載の命令ロールバックプロセッサシステム。
【請求項６】
キャッシュミス発生時には、ロールバックユニットにおいて、未完了命令をループで回転させて保持するロールバック手順と、
キャッシュミスが解消されず、ロールバックが正常に終了しない時には、ロールバック手順を繰り返す手順と、
ロールバックが正常に終了する時には、ロールバック制御信号をマルチプレクサに発行して、命令ウインドウバッファから未発行命令を発行する命令再発行手順
とを備えることを特徴とする命令ロールバック方法。
【請求項７】
一定の順番で配列された複数の実行前命令を格納した命令ウインドウバッファと、前記命令ウインドウバッファの出力を一方の入力とするマルチプレクサと、前記マルチプレクサに接続されたロールバックユニットとを備え、前記ロールバックユニットの出力を前記マルチプレクサの他方の入力に接続した命令ロールバックプロセッサシステムにおいて、
未完了命令をロールバックする時は前記ロールバックユニット側の入力を選択するロールバック手順と、
未発行命令発行時は、前記命令ウインドウバッファからの入力を選択する命令再発行手順とを備えることを特徴とする命令ロールバック方法。
【請求項８】
命令ウインドウバッファから発行された実行前命令を実行させる手順と、
キャッシュミスの発生時、キャッシュリフィル回路を駆動し、パイプラインレジスタ中のロード命令と後続命令を不活性とし、前記命令ウインドウバッファを前記キャッシュミスの発生時の状態にフリーズさせる手順と、
前記キャッシュリフィル回路が完了しかつロード命令が前記キャッシュミスの発生時直前の位置にあるならば、前記ロード命令と前記後続命令を実行する手順に戻す手順と、
前記キャッシュリフィル回路が完了しないならば、前記命令ウインドウバッファから発行された発行済命令をループ回転して保持させる手順と、
更に、前記キャッシュリフィル回路が完了しかつ前記ロード命令が前記キャッシュミスの発生時直前の位置にないならば、前記発行済命令をループ回転させる手順
とを備えることを特徴とする命令ロールバック方法。
【請求項９】
命令ウインドウバッファから発行された実行前命令を実行させる手順と、
キャッシュミスの発生時、キャッシュリフィル回路を駆動し、パイプラインレジスタ中のロード命令と後続命令を不活性とし、前記命令ウインドウバッファを前記キャッシュミスの発生時の状態にフリーズさせる手順と、
前記キャッシュリフィル回路が完了しかつ前記ロード命令が前記キャッシュミスの発生時直前の位置にあるならば、前記ロード命令と前記後続命令を実行する手順に戻す手順と、
前記キャッシュリフィル回路が完了しないならば、前記命令ウインドウバッファから発行された発行済命令をループ回転して保持させる手順と、
更に、前記キャッシュリフィル回路が完了しかつ前記ロード命令が前記キャッシュミスの発生時直前の位置にないならば、前記発行済命令をループ回転させる手順
とからなるアルゴリズムを命令ロールバックプロセッサシステムに実行させることを特徴とする命令ロールバックプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、パイプライン処理をする計算機に係り、特に低コストで高性能な命令ロールバックプロセッサシステム、また命令ロールバック方法及び命令ロールバックプログラムに関する。
【０００２】
【従来の技術】
中央演算処理装置（ＣＰＵ）は、パイプラインの段数が増大すると共に並列処理の速度が増加できるため、パイプラインの段数を増加する傾向は強い。一方において、パイプラインの段数が増大すると、パイプラインのリスタートに時間を要する。このため、かえって処理速度が遅くなるという欠点も存在する。アウトオブオーダーＣＰＵにおいて、ディスパッチ不能時、或いはインオーダーＣＰＵにおいて、実行された命令が終了できない時、ロード命令でキャッシュミス時、データをリフィルした後に、再発行する必要がある。再発行の可能性ある命令を終了できるかどうかが問題となるが、従来例においても、再発行の可能性ある命令を命令ウインドウバッファに蓄積しておくという動作を行っている。この動作は、ロールバック制御の一部である。ロード命令とその後続命令において、エントリーの深さにも関係するが、一定期間命令を保持し、リザーブしておくことが必要になる。
【０００３】
従来のマイクロプロセッサシステムの構成例は、図１２に示すように、命令フェッチユニット１と、命令ウインドウバッファ（ＩＷＢ）２と、第1の命令デコーダ（Ａ）６，第２の命令デコーダ（Ｂ）７、パイプラインレジスタ（ＰＬＧ）３，４，５と、制御ユニット８とを備える。
【０００４】
命令フェッチユニット１から命令ＣＯＭがＩＷＢ２に供給され、保持される。データハザード、リソースハザードが解決したらＩＷＢ２から命令ＩＮＳが発行される。命令ＩＮＳは、制御ユニット８、ＰＬＧ３，ＰＬＧ４，ＰＬＧ５、第１の命令デコーダ（Ａ）６，第２の命令デコーダ（Ｂ）７に供給され、命令ＩＮＳが実行パイプラインを流れて実行されていく。制御ユニット８は、第1の命令デコーダ（Ａ）６からのロード命令ＬＣＯＭ，第２の命令デコーダ（Ｂ）７からの信号及びＩＷＢ２からの命令ＩＮＳを受信する。制御ユニット８は、既知の汎用レジスタファイル、ファンクションユニット、データキャッシュユニット、バイパスネットワーク、バイパスコントロールブロック、及びパイプラインレジスタ等から構成される。ここで例えば、ロード命令ＬＣＯＭは制御ユニット８内において、データキャッシュユニットにアクセスしてデータをフェッチするが、キャッシュミスを起こした場合、データは得られない。そのときはロード命令ＬＣＯＭとその後続命令の実行をキャンセルする。そしてレベル２（L２）キャッシュ等にアクセスしてデータをフェッチしデータが得られたら、ロード命令ＬＣＯＭとその後続命令をＩＷＢ２から再発行して実行しなおす。今度はキャッシュがヒットするので後続命令の実行を続行することができる。
【０００５】
このとき、ロード命令ＬＣＯＭとその後続命令を再発行するために、それらをＩＷＢ２に保存しておく必要がある。また、ロードミスが判明するのは命令発行後、数サイクル後になるのでその間ＩＷＢ２に命令が保持されたままになる。その数サイクル間はたとえキャッシュがヒットする場合においても、キャッシュがヒットすることの事実がわからないため、常に発行した命令をＩＷＢ２に保持し続ける必要がある。
【０００６】
従来のマイクロプロセッサシステムの動作は、図１３に示すように表される：
（ａ）ステップＳ１において、命令フェッチユニット１から命令ＣＯＭがＩＷＢ２に供給された状態から開始する。
【０００７】
（ｂ）次に、ステップＳ２に進み、ＩＷＢ２から命令ＩＮＳを発行する。
【０００８】
（ｃ）次に、ステップＳ３に進み、命令ＩＮＳを実行する。
【０００９】
（ｄ）次に、ステップＳ４に進み、ロード命令ＬＣＯＭを実行してキャッシュミスが発生するかどうかを判断する。
【００１０】
（ｅ）キャッシュミスが発生しないならば、ステップＳ５に進み、実行を完了する。
【００１１】
（ｆ）キャッシュミスが発生するならば、ステップＳ６に進み、キャッシュリフィルをトリガーする。
【００１２】
（ｇ）次に、ステップＳ７に進み、自己命令（ロード命令）と実行途中の後続命令をパイプラインから消去する。
【００１３】
（ｈ）次に、ステップＳ８に進み、無効化した命令に対してＩＷＢを発行前状態に戻す。
【００１４】
（ｉ）次に、ステップＳ９に進み、キャッシュリフィルを完了するかどうかを判断する。
【００１５】
（ｊ）ＮＯであるならば、ステップＳ９を繰り返す。
【００１６】
（ｋ）ＹＥＳであるならば、ステップＳ１０に進み、発行済命令をループ中で回転する。
【００１７】
（ｌ）次に、ステップＳ２、ステップＳ３、ステップＳ４と進み、ステップＳ４においてロード命令ＬＣＯＭでキャッシュミスが発生しなくなるまで一連の動作を繰り返す。
【００１８】
ＩＷＢ２は命令ＩＮＳを発行するための複雑な発行ロジック構成を保持しており、コストの高いＩＷＢを発行済みの命令ＩＮＳが占有するため、ＩＷＢ２のロジックの利用効率が悪くなる。
【００１９】
【非特許文献１】
Ｔ・サトー他“命令再発行メカニズムの総合的な評価（Comprehensive Evaluation of Instruction Reissue Mechanism.）”，パラレルアーキテクチャー、アルゴリズム及びネットワークに関するインターナショナルシンポジウム，プロシーディング（Proceedings of International Symposium on Parallel Architectures, Algorithms and Networks）２０００年，Ｐ．７８−８５．
【００２０】
【非特許文献２】
グレン・ヒントン他“ペンティアム（登録商標）４プロセッサのマイクロアーキテクチャー（The Microarchitecture of the Pentium（登録商標）4 Processor）”，http://developer.intel.com,２００1
【００２１】
【発明が解決しようとする課題】
従来のマイクロプロセッサシステムにおいては、命令の発行後、データキャッシュミスなどによって命令を再実行することが必要になる場合がある。このため従来は命令の発行後もＩＷＢ２に命令を残しておき、再実行が必要だと判明した時に、ＩＷＢ２から命令を演算器に再発行していた。そのため、ＩＷＢ２に命令を一定期間保持しておく必要があり、面積コストの大きいＩＷＢ２の貴重なエントリーを費やすという問題があった。
【００２２】
本発明の目的は、ＰＬＧをリング状に接続して、再実行するための命令を保持し、ロールバック動作時にはリング状ＰＬＧに再実行するための命令を内に保持し、命令再発行動作時にはＰＬＧから命令などを再発行する機能を有する、低コストで、高性能な命令ロールバックプロセッサシステム、命令ロールバック方法及び命令ロールバックプログラムを提供することにある。
【００２３】
【課題を解決するための手段】
上記目的を達成するために、本発明の第１の特徴は、（イ）一定の順番で配列された複数の実行前命令を発行するウインドウバッファと、（ロ）命令ウインドウバッファの出力を一方の入力に入力するマルチプレクサと、（ハ）マルチプレクサの出力と、マルチプレクサの他方の入力との間に接続されたロールバックユニット、（ニ）ロールバックユニットに接続されたデコーダユニットと、（ホ）デコーダユニットに接続された制御ユニットと、（へ）制御ユニットに接続され、マルチプレクサにロールバック制御信号を発行するロールバックコントロールユニットとを備える命令ロールバックプロセッサシステムであることを要旨とする。
【００２４】
本発明の第２の特徴は、（イ）キャッシュミス発生時には、ロールバックユニットにおいて、未完了命令をループで回転させて保持するロールバック手順と、（ロ）キャッシュミスが解消されず、ロールバックが正常に終了しない時には、ロールバック手順を繰り返す手順と、（ハ）ロールバックが正常に終了する時には、ロールバック制御信号をマルチプレクサに発行して、命令ウインドウバッファから未発行命令を発行する命令再発行手順とを備える命令ロールバック方法であることを要旨とする。
【００２５】
本発明の第３の特徴は、（イ）一定の順番で配列された複数の実行前命令を格納した命令ウインドウバッファと、命令ウインドウバッファの出力を一方の入力とするマルチプレクサと、マルチプレクサに接続されたロールバックユニットとを備え、ロールバックユニットの出力をマルチプレクサの他方の入力に接続した命令ロールバックプロセッサシステムにおいて、（ロ）未完了命令をロールバックする時はロールバックユニット側の入力を選択するロールバック手順と、（ハ）未発行命令発行時は、命令ウインドウバッファからの入力を選択する命令再発行手順とを備える命令ロールバック方法であることを要旨とする。
【００２６】
本発明の第４の特徴は、（イ）命令ウインドウバッファから発行された実行前命令を実行させる手順と、（ロ）キャッシュミスの発生時、キャッシュリフィル回路を駆動し、パイプラインレジスタ中のロード命令と後続命令を不活性とし、命令ウインドウバッファをキャッシュミスの発生時の状態にフリーズさせる手順と、（ハ）キャッシュリフィル回路が完了しかつロード命令がキャッシュミスの発生時直前の位置にあるならば、ロード命令とその後続命令を実行する手順に戻す手順と、（ニ）キャッシュリフィル回路が完了しないならば、命令ウインドウバッファから発行された発行済命令をループ回転して保持させる手順と、（ホ）更に、キャッシュリフィル回路が完了しかつロード命令がキャッシュミスの発生時直前の位置にないならば、発行済命令をループ回転させる手順とを備える命令ロールバック方法であることを要旨とする。
【００２７】
本発明の第５の特徴は、（イ）命令ウインドウバッファから発行された実行前命令を実行させる手順と、（ロ）キャッシュミスの発生時、キャッシュリフィル回路を駆動し、パイプラインレジスタ中のロード命令と後続命令を不活性とし、命令ウインドウバッファをキャッシュミスの発生時の状態にフリーズさせる手順と、（ハ）キャッシュリフィル回路が完了しかつループ回転命令がキャッシュミスの発生時直前の位置にあるならば、ロード命令と後続命令を実行する手順に戻す手順と、（ニ）キャッシュリフィル回路が完了しないならば、命令ウインドウバッファから発行された発行済命令をループ回転して保持させる手順と、（ホ）キャッシュリフィル回路が完了しかつループ命令がキャッシュミスの発生時直前の位置にないならば、発行済命令をループ回転させる手順とからなるアルゴリズムを命令ロールバックプロセッサシステムに実行させる命令ロールバックプログラムであることを要旨とする。
【００２８】
【発明の実施の形態】
次に、図面を参照して、本発明の実施の形態を説明する。以下の図面において、同一又は類似の部分には同一又は類似の符号を付している。又、以下に示す実施の形態は、この発明の技術思想を具体化するための装置や方法を例示するものであって、この発明の技術思想は、構成部品の構造、配置等を下記のものに特定するものではない。この発明の技術思想は、特許請求の範囲において、種々の変更を加えることができる。
【００２９】
本発明において「命令ロールバックプロセッサシステム」とは、命令ロールバック機能或いは命令ロールバック装置を備えた、プロセッサシテムをいう。「命令ロールバックプロセッサシステム」は命令ロールバック方法及び命令ロールバックプログラムによって動作するプロセッサシステムである。本発明において「命令ロールバック」とは、リング状に縦続接続されたＰＬＧ群内において、発行済命令をループ状に回転させる動作をいう。
【００３０】
本発明の実施の形態に係る命令ロールバックプロセッサシステムは、図１に示すように、一定の順番で配列された複数の命令を格納した命令ウインドウバッファ（ＩＷＢ）２と、命令ウインドウバッファ２の出力を一方の入力に入力するマルチプレクサ（ＭＵＸ）１１と、ＭＵＸ１１の出力とＭＵＸ１１の他方の入力との間に接続されたロールバックユニット９とを備える。命令フェッチユニット１からは命令ＣＯＭがＩＷＢ２に供給される。ＭＵＸ１１の出力は、ＰＬＧ１３，１４，１５，１６を備えるロールバックユニット９に接続されている。更に、ロールバックユニット９は、第1の命令デコーダ（Ａ）６と第２の命令デコーダ（Ｂ）７とを備えるデコーダユニット１２に接続されている。更に、デコーダユニット１２は、制御ユニット８に接続されている。更に制御ユニット８とＭＵＸ１１との間には、ロールバックコントロールユニット１０が接続されている。ＰＬＧ１３，１４，１５，１６の内部にはそれぞれ命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部171,172,173,174、命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部181,182,183,184、命令のデスティネーション番号Ｒｄを格納するデータ格納部191,192,193,194、命令のオペレーションコードを格納するデータ格納部201,202,203,204、が含まれている。これらの命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部171,172,173,174、命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部181,182,183,184、命令のデスティネーション番号Ｒｄを格納するデータ格納部191,192,193,194、及び命令のオペレーションコードＯｐを格納するデータ格納部201,202,203,204、はＰＬＧ内に命令を分けて格納するためのデータ格納部を構成している。動作の詳細については後述する。
【００３１】
図１に示すＰＬＧ１３乃至ＰＬＧ１６内のそれぞれ命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部171,172,173,174、命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部181,182,183,184、命令のデスティネーション番号Ｒｄを格納するデータ格納部191,192,193,194、命令のオペレーションコードＯｐを格納するデータ格納部201,202,203,204等はデータ格納部を表す。
【００３２】
命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部171,172,173,174は命令のソースレジスタ値Ｒｓが格納されるデータ格納部である。
【００３３】
命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部181,182,183,184は命令のソースレジスタ値Ｒｔが格納されるデータ格納部である。
【００３４】
命令のデスティネーション番号Ｒｄを格納するデータ格納部191,192,193,194は命令のデスティネーションレジスタ番号Ｒｄが格納されるデータ格納部である。
【００３５】
命令のオペレーションコードを格納するデータ格納部201,202,203,204は命令のオペレーションコードＯｐが格納されるデータ格納部である。命令のオペレーションコードＯｐをデコードして、命令の種類を判定することができる。
【００３６】
図１２に示した従来例と異なる点は、ＩＷＢ２の出力とＰＬＧ群との間にＭＵＸ１１を配置し、ロールバックコントロールユニット１０によってマルチプレクサ１１を制御して、最終段のＰＬＧ１６の出力がロールバックライン６０を介して、命令発行段側に戻されて、マルチプレクサ１１の一方の入力とされ、またＩＷＢ２の出力はマルチプレクサ１１の他方の入力に接続されている点である。また、マルチプレクサ１１を制御するためのロールバックコントロールユニット１０が必要になる。尚、図１に示すＰＬＧ群は４段の例が示されているが、必ずしも４段に限定されるものではない。図６乃至８に示すように、３段にて構成してもよい。或いは又、図９に示すように、任意の段数ｎをもって構成されていてもよい。
【００３７】
図１に示した命令ロールバックプロセッサシステムを構成する制御ユニット８は、図２に示すように、汎用レジスタファイル（ＧＰＲ）２１と、キャッシュリフィル回路２２と、ＴＬＢ（Translation Look-aside Buffer）２３と、データキャッシュユニット２４と、ロード命令格納レジスタ２７と、加算器３０と、キャッシュヒットレジスタ３１と、ＴＬＢヒットレジスタ３２と、及びロードデータレジスタ３３と、命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部２８、命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部２９とから構成されている。ロード命令格納レジスタ２７は第1の命令デコーダ（Ａ）６からのロード命令ＬＣＯＭを受信して加算器３０に送信する。加算器３０は、ロード命令格納レジスタ２７の仮想アドレスを計算する。一般に、ロードストア命令のアクセスすべきメモリの仮想アドレスは、ソースレジスタの内容に別のレジスタの内容や既知の値などが加算して算出される。ここでは、既知の値の加算については記載されていない。ソースレジスタとソースレジスタの加算で仮想アドレスを算出するパスだけを記載している。従って、加算器３０はロード命令格納レジスタ２７、命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部２８及び命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部２９からのデータを受信して、加算し、データキャッシュユニット２４及びＴＬＢ２３に送信する。データキャッシュユニット２４は、ＴＬＢ２３及び加算器３０からのデータを受信し、キャッシュリフィル回路２２との間でデータを送受信しつつ、ロードデータレジスタ３３及びキャッシュヒットレジスタ３１に送信する。ロードデータレジスタ３３はデータキャッシュユニット２４からのデータを受信して、ＧＰＲ２１に送信する。ＧＰＲ２１は、ロードデータレジスタ３３、第1の命令デコーダ（Ａ）６、ＰＬＧ１３内の命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部171および命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部181からのデータを受信してそれぞれ命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部２８及び命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部２９に送信する。一方、ＴＬＢ２３は、加算器３０からの仮想アドレスを受信し、キャッシュリフィル回路２２との間においてデータの送受信を実行し、かつ、データキャッシュユニット２４及びＴＬＢヒットレジスタ３２に対してデータを送信する。ＴＬＢヒットレジスタ３２は、ＴＬＢ２３からのＴＬＢヒット情報を受信し、キャッシュリフィル回路２２にデータを送信すると共に、ロールバックコントロールユニット１０内のロールバック判定回路２６に対してＴＬＢヒット情報を送信する。同様に、キャッシュリフィル回路２２はキャッシュヒットレジスタ３１及びＴＬＢヒットレジスタ３２からデータを受信し、ＴＬＢ２３及びデータキャッシュユニット２４との間でデータを送受信しつつ、ロールバックコントロールユニット１０内のロールバック制御回路２５に対してデータを送信する。また、図２中に示されるように、データキャッシュユニット２４とキャッシュリフィル回路２２との間においてもデータの送受信が行なわれる。
【００３８】
尚、図１に示したデコーダユニット１２内には第１の命令デコーダ（Ａ）６及び第２の命令デコーダ（Ｂ）７の２個の命令デコーダが示されているが、第１の命令デコーダ（Ａ）６だけで機能させることも可能である。即ち、例えば、図２に示すように、ロード命令ＬＣＯＭを含む、すべての命令に対する制御を第１の命令デコーダ（Ａ）６でデコードして、このデコード済の情報を制御ユニット８の中で保持してＧＰＲ２１、或いはＴＬＢ２３、加算器３０等に提供するように動作させることもできる。
【００３９】
図１に示した命令ロールバックプロセッサシステムを構成するロールバックコントロールユニット１０は、図３に示すように、ロールバック制御回路２５と、ロールバック判定回路２６と、ヘッドポインタ（ＨＰ）用ＰＬＧ３４，３５，３６，３７と、イネーブル信号（ＥＮ）用ＰＬＧ３８，３９，４０，４１と、バリッド信号（ＶＬ）用ＰＬＧ４２，４３，４４，４５と、ＡＮＤゲート回路４６，４７，４８と、ＭＵＸ４９と、バリッドバッファ（Valid Buffer）５０とから構成されている。
【００４０】
ロールバック制御回路２５は、制御ユニット８内のキャッシュリフィル回路２２からリフィル完了信号ＲＦＣを受信し、またロールバック判定回路２６からロールバック開始信号ＲＢＳを受信し、またヘッドポインタ（ＨＰ）用ＰＬＧ３７からの信号を受信する。また、ロールバック制御回路２５は、ヘッドポインタ（ＨＰ）用ＰＬＧ３４及びイネーブル信号（ＥＮ）用ＰＬＧ３８に対して信号を送信すると共に、ＭＵＸ１１及びＭＵＸ４９に対してロールバック制御信号ＲＢＣを送信する。一方、ロールバック判定回路２６は制御ユニット８内のＴＬＢヒットレジスタ３２内に格納されたヒットミス信号ＨＭＴ、キャッシュヒットレジスタ３１内に格納されたヒットミス信号ＨＭＣを受信する。また、命令デコーダ（Ｂ）７からのフラグ信号ＦＬＡも受信する。また、ロールバックコントロールユニット１０内においては、ＡＮＤゲート４８からの出力信号を受信し、ロールバック制御回路２５に対しては、ロールバック開始信号ＲＢＳを送信する。ＭＵＸ４９はバリッドバッファ５０からの信号とバリッド信号（ＶＬ）用ＰＬＧ４５からの信号を受信し、バリッド信号（ＶＬ）用ＰＬＧ４２に対してデータを送信する。ここで、バリッド信号（ＶＬ）用ＰＬＧ４２からバリッド信号（ＶＬ）用ＰＬＧ４３，４４及び４５へのデータシフトは、ヘッドポインタ（ＨＰ）用ＰＬＧ３４からヘッドポインタ（ＨＰ）用ＰＬＧ３５，３６及び３７へのデータシフト、イネーブル信号（ＥＮ）用ＰＬＧ３８からイネーブル信号（ＥＮ）用ＰＬＧ３９，４０及び４１へのデータシフトに対応している。更に、このようなデータシフトのタイミングは図１において、ＰＬＧ１３からＰＬＧ１４，１５及び１６へのデータシフトに対応している。ＰＬＧ１３からＰＬＧ１４の間がＰＬＧ４２とＰＬＧ４３の間に対応し、ＰＬＧ１４からＰＬＧ１５の間がＰＬＧ４３とＰＬＧ４４の間に対応し、ＰＬＧ４４からＰＬＧ４５の間がＰＬＧ１５とＰＬＧ１６との間に対応している。これらのステージをそれぞれ「ＩＤステージ」、「ＥＸステージ」、「ＷＢステージ」と定義する。更に、バリッドバッファ５０からＭＵＸ４９を介してＰＬＧ４２までのステージはＩＷＢ２からＭＵＸ１１を介してＰＬＧ１３までのステージに対応し、「ＩＳステージ」と定義する。更に、データが命令フェッチユニット１からＩＷＢ２に入力するまでを、「ＩＦステージ」と定義する。
【００４１】
ここで、図１乃至３を参照しながら、本発明の実施の形態に係る命令ロールバックプロセッサシステムにおける、ロールバック制御の動作を説明する。
【００４２】
はじめに言葉の説明をする。以下の説明において、フラグ（Flag：ＦＬＡ）信号、バリッド（ＶＡＬ）信号、ヒット信号、デコード出力はすべて正論理で、“０”の時、「無効」、“１”の時、「有効」を意味するものとする。また、「アサ−ト」とは、その信号が「有効」状態、即ち“１”を出力すること、「ネゲート」とは、その信号が「無効」状態、即ち“０”を出力することを意味する。また、バリッド信号ＶＡＬ等はループ状に構成されており、各ステージに存在している。ステージ毎に区別するために例えば、「ＩＤステージのバリッド信号」、「ＥＸステージのバリッド信号」、「ＷＢステージのバリッド信号」と表現する。
【００４３】
「バリッド信号（ＶＡＬ）」は、各ステージに存在し、有効な命令がステージ中に存在する時“１”となる。ロールバック中かどうかに関わらず、命令が存在する時は“１”である。「イネーブル信号（ＥＮＡ）」は、ＰＬＧのステージ毎に存在し、そのステージにおける命令を実行すべきかどうかを示す。「イネーブル信号」が“１”であり、かつ「バリッド信号」が“１”であるステージでは、命令を実行する。「ヘッドポインタ（ＨＰ）信号」は、通常動作時は全ステージ“０”になる。ロールバック中は、ロールバックを開始すべき先頭の命令に対してだけ“１”がセットされる。先頭ではない命令には、“０”がセットされる。
【００４４】
「ＩＦステージ」では、命令フェッチユニット（命令キャッシュ）１から命令を読み出し、ＩＷＢ２に書き込む。命令を書き込んだ時は、バリッド信号ＶＡＬとして“１”をバリッドバッファ５０に書き込む。バリッドバッファ５０は、ＩＷＢ２の各エントリーに対応したエントリーを持ち、有効な命令がＩＷＢ２に格納されている時は、“１”、格納されていない時には、“０”が書き込まれている。
【００４５】
「ＩＳステージ」では、バリッドバッファ５０が“１”、即ち「有効」である命令を命令の古い順に発行する。ＩＷＢ２に存在する命令のハザードを検出し、命令発行可能かどうかを調査する。命令発行可能ならば、命令を実行する。命令ロールバック中は、命令バッファからではなく、ロールバックされているＰＬＧの命令を発行する。
【００４６】
「ＩＤステージ」では、命令をデコードする。ソースレジスタをＧＰＲ２１から読み出す。データバイパスを行なう。
【００４７】
「ＥＸステージ」では、命令を実行する。ロード命令の場合は、ソースレジスタの値からメモリアドレスを計算する。そのアドレスにおいてＴＬＢ２３を参照し、仮想アドレスから物理アドレスへ変換する。ＴＬＢ２３がヒットした場合は、正しい物理アドレスが得られる。ＴＬＢ２３がヒットミスした場合は正しい物理アドレスは得られない。ヒットしたかヒットミスしたかはＴＬＢ２３が出力するＴＬＢヒット信号で判定される。ＴＬＢヒット信号はＴＬＢヒットレジスタ３２に格納される。
【００４８】
変換された物理アドレスでデータキャッシュユニット２４を参照する。データキャッシュユニット２４がヒットした場合は、データキャッシュユニット２４はヒット信号を「アサ−ト」する。ヒット信号をキャッシュヒットレジスタ３１に格納する。ヒットした場合は、データキャッシュはデータを出力する。そのデータをロードデータレジスタ３３に格納する。加算などの算術演算命令もこのステージで実行される。
【００４９】
「ＷＢステージ」では、バリッド信号ＶＡＬが“１”であり、かつイネーブル信号ＥＮＡが“１”の時は、演算結果、ロードデータをＧＰＲ２１へ書き込む（Write Back）。ＴＬＢヒットレジスタ３２、キャッシュヒットレジスタ３１の値が共に“１”の場合、即ち、ＴＬＢヒットでかつ、キャッシュヒットの場合、データが正常にロードできているので、ＰＬＧ（データレジスタ）３３の値をＧＰＲ２１へ書き込む。
【００５０】
ＴＬＢヒットレジスタ３２、キャッシュヒットレジスタ３１の値のどちらかが“０”、即ち、ヒットミスの場合には正常にロードできていないので、ロールバック動作を行なう。命令デコーダ（Ｂ）７は命令の命令のオペレーションコードを格納するデータ格納部２０をデコードし、実行中の命令がロード命令であるかどうかを示すフラグ信号ＦＬＡを出力する。ロールバック判定回路２６は、このフラグ信号ＦＬＡと、ＴＬＢレジスタ３２に格納された信号と、キャッシュヒットレジスタ３１に格納された信号と、イネーブル信号ＥＮＡと、バリッド信号ＶＡＬを入力とし、以下の動作を行なう。即ち、ＴＬＢヒットが“１”かつ、キャッシュヒットが“０”かつ、イネーブル信号が“１”でかつ、バリッド信号が“１”である時、ロールバック開始信号ＲＢＳをアサ−トする。
【００５１】
更に、キャッシュリフィル回路２２は、この時、キャッシュリフィル動作を開始する。即ち、外部メモリ７０からのデータの読み込みを開始し、読み込んだデータをデータキャッシュユニット２４やＴＬＢ２３へ書き込む。データキャッシュユニット２４やＴＬＢ２３への書き込みが終了すると、リフィル完了信号ＲＦＣをアサートする。
【００５２】
バリッド信号ＶＡＬ、ヘッドポインタ信号ＨＰは各ステージ間でリング状に接続されている。命令がパイプラインステージを移動するのに伴って、内容を次のステージに伝達してい行く。
【００５３】
（ロールバック動作）
本発明の実施の形態に係るロールバックプロセッサシステムは、図４に示すように、その内部状態を遷移しつつロールバック動作を実行している。図４において、ＳＴ０、ＳＴ１、ＳＴ２、ＳＴ３、ＳＴ４はそれぞれ状態遷移を表す。「通常動作」、「ロールバック動作」、「先頭命令アライン動作」及び「命令再発行動作」はそれぞれの動作状態を表現しており、Ｃ１、Ｃ２、Ｃ３、Ｃ４はそれぞれの動作状態内部における状態遷移を示す。即ち、ＳＴ０は、初期化を表しており、初期状態から「通常動作」への状態遷移を表す。ＳＴ１は、ロールバック開始信号ＲＢＳがアサートして、かつ、「ヘッドポインタ」が「１」になり、「通常動作」から「ロールバック動作」への状態遷移を表す。
【００５４】
ＳＴ２は、リフィル完了信号ＲＦＣがアサートして、「ロールバック動作」から「先頭命令アライン動作」への状態遷移を表す。ＳＴ３は、「先頭命令アライン動作」から「命令再発行動作」への状態遷移を表す。ＳＴ４は、ヘッドポインタが「０」になり、「命令再発行動作」から「通常動作」への状態遷移を表す。また、Ｃ１は、「通常動作」における内部状態遷移を表し、Ｃ２は、「ロールバック動作」における内部状態遷移を表し、Ｃ３は、「先頭命令アライン動作」における内部状態遷移を表し、Ｃ４は、「命令再発行動作」における内部状態遷移を表す。
【００５５】
以下にロールバック動作を説明する。
【００５６】
（１）ＷＢステージにおいて、ロールバック開始信号ＲＢＳがアサートされた場合に、ロールバック制御回路２５が動作を開始する。
【００５７】
（i）ロールバック制御回路２５は、ロールバック開始信号ＲＢＳが“１”の時、内部状態を「ロールバック動作」の動作状態に遷移させる。
【００５８】
（ii）ＩＳステージのヘッドポインタ（ＨＰ）用のＰＬＧ３４に格納される信号として、“１”を出力する。これにより、ロールバックの先頭命令に対するヘッドポインタ（ＨＰ）が“１”にセットされる。但し、その次のサイクルからはループ側（ＷＢステージ）の値を受け取り、それをそのままスルーさせるように出力する動作を行なう。
【００５９】
（iii）ＩＷＢ２、バリッドバッファ５０の出力に接続されるＭＵＸ１１、４９がループ側を出力するように制御する。２つのＭＵＸ１１、４９は、それぞれともにＩＳステージからの信号とループ側（ＷＢステージ）からの信号が入力となっている。非ロールバック動作（通常動作）中はＩＳステージ側を選択して出力するように動作している。ロールバック動作時は、ループ側を選択するように動作し、命令や、バリッド信号をループ動作させる。
【００６０】
（iv）ＩＳステージのイネーブル信号として、“０”を出力する。これにより、順次各ステージのイネーブル信号が“０”になる。
【００６１】
ロールバック動作を開始すると、上記状態を保ちつつ、命令などをループさせて保持する。
【００６２】
（２）キャッシュリフィル回路２２がデータを外部メモリ７０からリードして、データキャッシュユニット２４やＴＬＢ２３へのリフィルを完了すると、リフィル完了信号ＲＦＣをアサートする。ロールバック制御回路２５はリフィル完了信号ＲＦＣがアサートされたら、次の動作を行なう。
【００６３】
（i）内部状態を「先頭命令アライン動作」状態に遷移させる。
【００６４】
（ii）ヘッドポインタ（ＨＰ）用のＰＬＧ３４，３５，３６、３７はＷＢステージの値をスルーして出力する。
【００６５】
（iii）ＩＳステージのイネーブル信号として引き続き、“０”を出力し、各ステージの動作を停止させたままにする。
【００６６】
（iv）ＭＵＸ１１，４９に対してループ側を選択するように制御する。
【００６７】
（v）ＷＢステージ（ループ側）のヘッドポインタ（ＨＰ）信号を監視し、“１”になるまで状態を保持する。
【００６８】
（３）ＷＢステージ（ループ側）のヘッドポインタ（ＨＰ）信号が“１”になったら、次の動作を実行する。
【００６９】
（i）内部状態を「命令再発行動作」状態に遷移させる。
【００７０】
（ii）ヘッドポインタ（ＨＰ）用のＰＬＧ３４，３５，３６、３７はＷＢステージの値をスルーして出力する。
【００７１】
（iii）ＩＳステージのイネーブル信号として“１”を出力し、順次、ステージの動作をさせる。
【００７２】
（iv）ＭＵＸ１１，４９に対して、ループ側を選択するように制御する。
【００７３】
再実行される命令がループを一周して、再びＷＢステージのヘッドポインタ（ＨＰ）用のＰＬＧ３４、３５，３６、３７に格納される情報がが“１”になるまで、再実行を続ける。
【００７４】
（４）ＷＢステージのヘッドポインタ（ＨＰ）が再び“１”になったら、次の動作を行ない、通常モードに復帰する。
【００７５】
（i）内部状態を「通常動作」状態に遷移させる。
【００７６】
（ii）ヘッドポインタ（ＨＰ）信号として“０”を出力する。
【００７７】
（iii）ＩＳステージのイネーブル信号として“１”を出力する。
【００７８】
（iv）ＭＵＸ１１，４９に対して、ステージ側、即ち、ＩＷＢ２側を選ぶように制御する。
【００７９】
本発明の実施の形態に係るロールバックプロセッサシステムの動作を説明するフローチャートは、図５に示すように、ステップＳ１からステップＳ１２で表される。
【００８０】
（ａ）ステップＳ１において、命令フェッチユニット１から命令ＣＯＭがＩＷＢ２に供給された状態から開始する。
【００８１】
（ｂ）次に、ステップＳ２において、ＩＷＢ２から実行前命令ＩＮＳを発行する。
【００８２】
（ｃ）次に、ステップＳ３において、実行前命令ＩＮＳを実行する。
【００８３】
（ｄ）次に、ステップＳ４において、実行前命令ＩＮＳがロード命令ＬＣＯＭであった場合は、キャッシュミスが発生するかどうかを判断する。
【００８４】
（ｅ）ロード命令ＬＣＯＭによって、キャッシュミスが発生しないならば、ステップＳ５に進み、命令を完了する。
【００８５】
（ｆ）ロード命令ＬＣＯＭによって、キャッシュミスが発生したならば、ステップＳ６に進み、キャッシュリフィル回路２２をトリガー信号ＨＭＣにより駆動する。
【００８６】
（ｇ）次に、ステップＳ７に進み、パイプラインレジスタ群中のロード命令と後続命令を不活性とする（情報は保持）。
【００８７】
（ｈ）次に、ステップＳ８に進み、ＩＷＢ２をキャッシュミス発生時の状態にフリーズする。
【００８８】
（ｉ）次に、ステップＳ９に進み、キャッシュリフィル回路２２を完了するかどうかを判断する。
【００８９】
（ｊ）キャッシュリフィル回路２２を完了できないならば、ステップＳ１０に進み、発行済命令をループで回転ながら保持する。
【００９０】
（ｋ）次に、ステップＳ９に戻り、キャッシュリフィル回路２２を完了するかどうかの判断を繰り返す。
【００９１】
（ｌ）キャッシュリフィル回路２２を完了できるならば、ステップＳ１１に進み、ループで回転しているロード命令が、キャッシュミス発生の直前の位置にあるかどうかを判断する。
【００９２】
（ｍ）ステップＳ１１において、ループで回転している命令が、キャッシュミス発生の直前の位置にあるならば、ステップＳ３に戻り、命令ＩＮＳを実行する。
【００９３】
（ｎ）ステップＳ１１において、ループで回転している命令が、キャッシュミス発生の直前の位置にないならば、ステップＳ１２に進み、発行済命令をループ中で回転する。
【００９４】
（ｏ）次に、ステップＳ１１に戻り、ループで回転している発行済命令が、キャッシュミス発生の直前の位置にあるかどうかを判断する。
【００９５】
（ｐ）ステップＳ１１において、ループで回転している命令が、キャッシュミス発生の直前の位置にあるならば、ステップＳ３に戻り、命令ＩＮＳを実行し、ステップＳ４において、ロード命令ＬＣＯＭによって、キャッシュミスが発生しないならば、ステップＳ５に進み、命令を完了する。
【００９６】
従来、命令のパイプライン実行と同期して、命令と使用するリソースの種類、オペランド制御情報などがＰＬＧ間でステージされ、ＰＬＧに保持されている。本発明の命令ロールバックプロセッサシステムでは、この保持された情報が、命令を再実行するためにも必要十分な情報であることに着目して、それを再実行が必要なときに命令発行部を構成するマルチプレクサ１１に戻して再利用することが特徴となっている。このため、制御ユニット８においては、データキャッシュユニット２４のヒットミス信号をキャッシュヒットレジスタ３１に保持し、ＴＬＢ２３のヒットミス信号をＴＬＢヒットレジスタ３２に保持し、ロールバックコントロールユニット１０ではロールバックの原因となるこれらのトリガー信号が入力され、命令の実行と同期してトリガー信号をサンプリングし、ロールバックが必要かどうかを判定する。ここで、トリガー信号とは、図２及び図３に示すように、キャッシュヒットレジスタ内に格納されたヒットミス信号ＨＭＣ及びＴＬＢヒットレジスタ内に格納されたヒットミス信号ＨＭＴに相当する。キャッシュヒットレジスタ内に格納されたヒットミス信号ＨＭＣは、キャッシュヒットレジスタ３１からキャッシュリフィル回路２２及びロールバック判定回路２６に入力される。ＴＬＢヒットレジスタ内に格納されたヒットミス信号ＨＭＴは、ＴＬＢヒットレジスタ３２から同じくキャッシュリフィル回路２２及びロールバック判定回路２６に入力される。
【００９７】
次に、図６乃至図８を使用して本発明の命令ロールバックプロセッサシステムの動作を説明する。図６はデータキャッシュミスが発生した状態、図７はロールバック動作状態、図８はロールバック終了状態をそれぞれ示している。図６乃至図８に示す命令ロールバックプロセッサシステムの構成は、基本的には、図１の構成において、ＰＬＧが３段の場合に対応している。図６乃至図８中には、デコーダユニット１２及び制御ユニット８についても記載されている通りである。図６乃至図８及び後述する図９に示される命令は、図１及び図２に示したデコーダユニット１２及び制御ユニット８において、パイプライン処理されている。
【００９８】
データキャッシュミス発生状態においては、図６に示すように、ＩＷＢ２内に「命令４」，「命令５」，「命令６」が順に格納され、ＭＵＸ１１の先に配置された３段のＰＬＧ１，ＰＬＧ２，ＰＬＧ３には、それぞれ「命令３」，「命令２」，「命令１」が格納されている。ＩＷＢ２の出力はＭＵＸ１１に入力される。ＰＬＧ３の出力はＭＵＸ１１の入力にループ状に戻されている。ＭＵＸ１１にはロールバックコントロールユニット１０が接続されている。ここで、「命令１」がロード命令であり、「命令２」、「命令３」はその後続命令であるとする。図６はＰＬＧ３において、「命令１」がデータキャッシュミスを発生し、ロールバック動作を開始する瞬間を示している。従って、以後、ＭＵＸ１１において「命令１」を選択するモードに遷移する。
【００９９】
ロールバックが必要な場合、図７及び図８に示すように、その命令が最終段のＰＬＧ３に到達した時、ロールバックの先頭である「命令１」は最終段のＰＬＧ３に到達しており、この時、最終段のＰＬＧ３の出力側をＭＵＸ１１が選択して出力するようにロールバックコントロールユニット１０は制御信号を設定する。すると、ＰＬＧ３，ＰＬＧ２，ＰＬＧ１に保持されていた「命令１」、「命令２」、「命令３」が順にＭＵＸ１１を通ってＰＬＧ群で構成されるパイプラインレジスタに再び戻され、再びＰＬＧに保持される。ロールバックの最初の命令とその時点ですでにＰＬＧに存在する命令（「命令１」〜「命令３」）は、ループを巡るようにように次々とロールバックされる(図７)。次に、キャッシュリフィル回路２２がキャッシュのリフィル終了をロールバック制御回路２５に通知すると、「命令１」が再びＰＬＧ３の位置に戻るまでロールバックを続ける。
【０１００】
そしてロールバックを開始した「命令１」が再び最終段のＰＬＧ３に到達し、ロールバックが正常に終了したと判明した場合には、図８に示すように、その後はＩＷＢ２側からの新規命令である「命令４」を選択するようにＭＵＸ１１の制御を行ない、以降通常に命令を発行する。
【０１０１】
このとき、キャッシュミスからリカバーされてなく、再びロールバックが必要であった場合は、ＭＵＸ１１の制御信号はＰＬＧ側を引き続き選ぶように制御し、更にロールバック動作を続行させることができる。そしてロールバックが成功するまで「命令１」〜「命令３」を繰り返し実行する。
【０１０２】
また、図６乃至図８ではＰＬＧ１，ＰＬＧ２，ＰＬＧ３に命令がすべて詰まっていることを仮定しているが、パイプラインハザードなどで毎サイクル命令を発行できない場合もある。その場合は、ＰＬＧ１，ＰＬＧ２，ＰＬＧ３の一部が「バブル（空）」となる。そして、この「バブル」は、パイプラインハザード解消のためにタイミング制御を行なう上で必要なものである。したがって、たとえロールバック動作時においてもほとんど同一なハザードが発生する（一部そうでない場合もある）ため、「通常実行」と同じように「バブル」が必要である。本発明の実施の形態に係る命令ロールバックプロセッサシステムにおいて、命令ロールバック方法を採用した場合、この「バブル」は既に挿入されているので、新たにハザード解消のための制御は不要である。このため、単純にＰＬＧに保持された命令を順番に再発行するだけで簡単にロールバックを実現できることになる。
【０１０３】
ＭＵＸ１１に接続されるＰＬＧの段数は３段に限られることは無い。ｎを自然数として、ｎ段存在する場合には、図９に示すように、構成され、命令は各ＰＬＧ１，ＰＬＧ２，ＰＬＧ３，…，ＰＬＧｎとシフトされる。最終段のＰＬＧｎの出力はＭＵＸ１１に戻されている。ロールバックコントロールユニット１０による制御によって、ロールバック動作或いはＩＷＢ２から新たな命令が発行される命令再発行動作が選択される。ＰＬＧの段数ｎが増えると並列処理の速度が上がるため、ＣＰＵの処理能力は上昇する。一方、各ＰＬＧ内には、一定期間命令が保持されることから、ＰＬＧの段数ｎが増えて、エントリーの深さが深くなると、パイプラインのリスタート処理に時間を要する。そのため、命令の実行処理速度が遅くなる。そこで、現実に使用されるｎの段数としては、例えば１６段、３２段程度が選ばれている。
【０１０４】
本発明の実施の形態に係る命令ロールバックプロセッサシステムに適用するキャッシュメモリを構成するデータキャッシュユニット２４の構成は図１０に示すように、加算器３０に接続される仮想アドレス格納部５１と、ＴＬＢ２３と、物理的アドレス格納部５４と、キャッシュメモリ部５５とから構成される。加算器３０の出力は仮想アドレス格納部５１に接続され、仮想アドレス格納部５１の出力がＴＬＢ２３に入力される。ＴＬＢ２３はこの仮想アドレス格納部５１に格納される仮想アドレスを次のように物理アドレスに変換する。ＴＬＢ２３には複数のエントリーがあり、それぞれにバリッド（valid）,ダーティー(dirty),タグ(TAG),物理的ページ番号(Physical Page Number)のフィールドがある。ＴＬＢ２３は、仮想アドレス格納部５１の仮想ページ番号(ＶＰＮ:Virtual Page Number)をキーにして、ＴＬＢ２３を検索し、複数のエントリーから１つを取り出す。取り出されたエントリーのタグ(TAG)フィールドの値と仮想アドレス格納部５１内の仮想ページ番号とを一致比較器５２で比較する。それが一致すると、一致比較器５２は「１」を出力する。更に、そのエントリーの内、バリッド（valid）が「１」（有効）であるときに、ＡＮＤゲート５３の出力は「１」となり、ＴＬＢ２３がヒットし、必要なエントリーがＴＬＢ２３中に発見されたことになる。一致しなかった場合は、ＴＬＢ２３のヒットは「０」となり、必要なエントリーがＴＬＢ２３中に見つからなかったことになるので、必要なエントリーをメモリから読み出し、ＴＬＢ２３に書き込む。この動作はＴＬＢリフィルと呼ばれる。その後、再度ＴＬＢ２３を検索すれば、必要なエントリーが発見されるので、ＴＬＢ２３はヒットとなり、データキャッシュの検索を次に行う。
【０１０５】
ヒットしたＴＬＢ２３のエントリーに、物理的ページ番号のフィールドがあり、これがロード命令ＬＣＯＭの物理アドレスの上位ビットとなる。これと、物理アドレスの下位ビットとなる、仮想アドレス格納部５１内のページオフセット（Page Offset）とを連結して物理アドレス５４を生成する。
【０１０６】
キャッシュメモリ部５５は複数のエントリーからなり、それぞれのエントリーにバリッド（valid）,タグ(TAG),データ(Data)のフィールドがある。物理アドレスの下位ビットをインデックス(INDEX)キーとして、キャッシュを検索する。検索されたキャッシュのエントリーのタグ(TAG)フィールドの値と物理アドレスの上位ビットであるタグ(TAG)部とを比較する。一致比較器５２の出力が「１」（一致を示す）であり、バリッド（valid）が「１」（有効）である場合に、ＡＮＤゲート５３の出力が「１」となり、キャッシュがヒットする。
【０１０７】
エントリーが一致しなかった場合は、キャッシュヒットが「０」となりキャッシュミスとなり、キャッシュリフィル回路２２がメモリからデータを読み出してキャッシュメモリのエントリーに書き込む。その後、再度キャッシュにアクセスすればヒットし、データを出力することができる。
【０１０８】
本発明の実施の形態に係る命令ロールバックプロセッサシステムにおいて、パイプライン処理するＣＰＵの構成は、図１０に示すように、命令キャッシュ(ICHACHE)１０１と、命令キャッシュ１０１に接続されるＩＷＢ２と、ＧＰＲ２１と、ＬＤ／ＳＴパイプ１０２,分岐パイプ１０３,整数パイプ０,整数パイプ１,ＣＯＰ１パイプ１０７及びＣＯＰ２パイプ１０８とからなる実行パイプラインと、仮想アドレス計算部１０９と、ＤＴＬＢ(Data TLB)１１０と、ＤＣＡＣＨＥ(Data Cache)１１１と、レスポンスバッファ１１２、バスインタフェースユニット（ＢＩＵ：Bus Interface Unit）１１３とから構成される。命令キャッシュ(ICACHE)１０１から実行すべき命令をリードする。リードした命令をＩＷＢ２に書き込む。次に、命令で指定されたソースレジスタ値ＲｓとＲｔとをＧＰＲ２１から読み出す。次に、読み出したソースレジスタ値を実行部（実行パイプライン）に送信する。実行パイプラインは複数あり、ここでは、ロードストア命令を実行するＬＤ／ＳＴパイプ１０２、分岐命令を実行する分岐パイプ１０３、整数演算命令を実行する整数パイプ０と整数パイプ１、コプロセッサ１の命令を実行するＣＯＰ１パイプ１０７、コプロセッサ２の命令を実行するＣＯＰ２パイプ１０８とがある。実行される命令はその命令の種類に従って、ソースレジスタ値とともにいずれかの適切な実行パイプラインに送信される。ＬＤ／ＳＴパイプ１０２は、仮想アドレス計算部１０９、ＤＴＬＢ１１０、ＤＣＡＣＨＥ(Data Cache)１１１と連係して動作する。即ち、ＧＰＲ２１から与えられたソースレジスタ値を仮想アドレス計算部１０９に入力し、データの仮想アドレス５１を生成する。次に、ＤＴＬＢ１１０において、仮想アドレス５１を物理アドレス５４に変換し、ＤＣＡＣＨＥ１１１をアクセスしてロードストア命令を実行する。キャッシュミスした場合は、ロード命令ＬＣＯＭの物理アドレスをレスポンスバッファ１１２に転送し、更に、ＢＩＵ（Bus Interface Unit）１１３に外部メモリへのデータロードを行なわせる。ＢＩＵ１１３が外部メモリから読み出したデータはレスポンスバッファ１１２に書き込み、続いてＤＣＡＣＨＥ１１１に書き込む。この動作は、キャッシュリフィル動作と呼ばれる。書き込んだ後、再度キャッシュミスした命令を再実行する。
【０１０９】
次に、各実行パイプラインは命令の結果、即ち、演算結果や、ロードデータを結果バス１１４に出力し、それはＧＰＲ２１に書き戻され、命令の実行を終了する。
【０１１０】
本発明のロールバック方式は次の利点がある。
【０１１１】
従来から存在するＰＬＧを利用するため、ハードウエアの追加としては、ＭＵＸ１１とその制御ロジックであり、システム全体を低コストで実現できる。
【０１１２】
ロールバック動作のためにＩＷＢ２のいくつかのエントリーを占有する必要がなく、ＩＷＢエントリーを本来の命令発行のために使用することができる。更に又、先読みできる命令数が増えるために命令レベル並列性（Instruction Level Parallelism:ＩＬＰ）を有効に活用できるようになり、性能が向上する。
【０１１３】
ロールバック動作時には、パイプラインハザード（データハザード、リソースハザード、コントロールハザード）を検出する必要がないので、制御が簡単になり、低コストで実現できる。
【０１１４】
（その他の実施の形態）
上記のように、本発明は実施の形態によって記載したが、この開示の一部をなす論述及び図面はこの発明を限定するものであると理解すべきではない。この開示から当業者には様々な代替実施の形態、実施例及び運用技術が明らかとなろう。したがって、本発明の技術範囲は上記の説明から妥当な特許請求の範囲に係る発明特定事項によってのみ定められるものである。
【０１１５】
【発明の効果】
本発明によれば、従来からあるパイプラインレジスタを利用し、ＩＷＢを命令発行のために占有でき、命令レベル並列性を有効活用でき、制御が簡単で、低コストで高性能な命令ロールバックプロセッサシステム、命令ロールバック方法及び命令ロールバックプログラムを実現することができる。
【図面の簡単な説明】
【図１】本発明の実施の形態に係る命令ロールバックプロセッサシステムの模式的全体ブロック構成図。
【図２】本発明の実施の形態に係る命令ロールバックプロセッサシステムの制御ユニットの模式的ブロック構成図。
【図３】本発明の実施の形態に係る命令ロールバックプロセッサシステムのロールバックコントロールユニットの模式的ブロック構成図。
【図４】本発明の実施の形態に係る命令ロールバックプロセッサシステムにおけるロールバック動作の説明のための内部状態遷移図。
【図５】本発明の実施の形態に係る命令ロールバックプロセッサシステムの動作説明のためのフローチャート図。
【図６】本発明の実施の形態に係る命令ロールバックプロセッサシステムの動作の模式的ブロック説明図であって、はデータキャッシュミスが発生した状態の説明図。
【図７】本発明の実施の形態に係る命令ロールバックプロセッサシステムの動作の模式的ブロック説明図であって、ロールバック動作状態の説明図。
【図８】本発明の実施の形態に係る命令ロールバックプロセッサシステムの動作の模式的ブロック説明図であって、ロールバック終了状態の説明図。
【図９】本発明の実施の形態に係る命令ロールバックプロセッサシステムの模式的ブロック構成図であって、パイプラインレジスタの段数がｎ段の例における構成図。
【図１０】本発明の実施の形態に係る命令ロールバックプロセッサシステムに適用するキャッシュメモリを構成するデータキャッシュユニットの模式的構成図。
【図１１】本発明の実施の形態に係る命令ロールバックプロセッサシステムにおいて、パイプライン処理するＣＰＵの構成図。
【図１２】従来のマイクロプロセッサシステムの模式的ブロック構成図。
【図１３】従来のマイクロプロセッサシステムの動作説明のためのフローチャート図。
【符号の説明】
１…命令フェッチユニット
２…命令ウインドウバッファ（ＩＷＢ）
３，４，５，１３，１４，１５，１６…パイプラインレジスタ（ＰＬＧ）
６…第1の命令デコーダＡ
７…第２の命令デコーダＢ
８…制御ユニット
９…ロールバックユニット
１０…ロールバックコントロールユニット
１１，４９…マルチプレクサ（ＭＵＸ）
１２…デコーダユニット
171,172,173,174,２８…命令の第1ソースレジスタ値Ｒｓを格納するデータ格納部
181,182,183,184,２９…命令の第２ソースレジスタ値Ｒｔを格納するデータ格納部
191,192,193,194…命令のデスティネーション番号Ｒｄを格納するデータ格納部201,202,203,204…命令のオペレーションコードを格納するデータ格納部
２１…汎用レジスタ（ＧＰＲ）
２２…キャッシュリフィル回路
２３…ＴＬＢ
２４…データキャッシュユニット
２５…ロールバック制御回路
２６…ロールバック判定回路
２７…ロード命令格納レジスタ
３０…加算器
３１…キャッシュヒットレジスタ
３２…ＴＬＢヒットレジスタ
３３…ロードデータレジスタ
３４，３５，３６，３７…ヘッドポインタ（ＨＰ）用ＰＬＧ
３８，３９，４０，４１…イネーブル信号（ＥＮ）用ＰＬＧ
４２，４３，４４，４５…バリッド信号（ＶＬ）用ＰＬＧ
４６，４７，４８、５３…ＡＮＤゲート
５０…バリッドバッファ
５１…仮想アドレス格納部
５２…一致比較器
５４…物理的アドレス格納部
５５…キャッシュメモリ部
６０…ロールバックライン
７０…外部メモリ
１００…ＣＰＵ
１０１…命令キャッシュ(ICACHE)
１０２…LD／ＳＴパイプ
１０３…分岐パイプ
１０６ａ…整数パイプ０
１０６ｂ…整数パイプ１
１０７…ＣＯＰ１パイプ
１０８…ＣＰＯ２パイプ
１０９…仮想アドレス計算部
１１０…データＴＬＢ(ＤＴＬＢ：Data TLB)
１１１…データキャッシュ(ＤＣＡＣＨＥ：Data Cache)
１１２…レスポンスバッファ
１１３…バスインタフェースユニット(ＢＩＵ)
Ｓ１，Ｓ２，Ｓ３，…，Ｓ１２…ステップ
ＳＴ０…初期状態から「通常動作」への状態遷移
ＳＴ１…「通常動作」から「ロールバック動作」への状態遷移
ＳＴ２…「ロールバック動作」から「先頭命令アライン動作」への状態遷移
ＳＴ３…「先頭命令アライン動作」から「命令再発行動作」への状態遷移
ＳＴ４…「命令再発行動作」から「通常動作」への状態遷移
Ｃ１…「通常動作」における内部状態遷移
Ｃ２…「ロールバック動作」における内部状態遷移
Ｃ３…「先頭命令アライン動作」における内部状態遷移
Ｃ４…「命令再発行動作」における内部状態遷移
ＰＬＧ，ＰＬＧ１，ＰＬＧ２，ＰＬＧ３，ＰＬＧ４，…，ＰＬＧｎ…パイプラインレジスタ
ＬＣＯＭ…ロード命令
ＣＯＭ…命令
ＩＮＳ…命令
ＦＬＡ…フラグ信号
ＥＮＡ…イネーブル信号
ＶＡＬ…バリッド信号
ＲＦＣ…リフィル完了信号
ＲＢＳ…ロールバック開始信号
ＲＢＣ…ロールバック制御信号
ＨＭＣ…キャッシュヒットレジスタ内に格納されたヒットミス信号
ＨＭＴ…ＴＬＢヒットレジスタ内に格納されたヒットミス信号
【図１】
0003655908.tif 000002
【図２】
0003655908.tif 000003
【図３】
0003655908.tif 000004
【図４】
0003655908.tif 000005
【図５】
0003655908.tif 000006
【図６】
0003655908.tif 000007
【図７】
0003655908.tif 000008
【図８】
0003655908.tif 000009
【図９】
0003655908.tif 000010
【図１０】
0003655908.tif 000011
【図１１】
0003655908.tif 000012
【図１２】
0003655908.tif 000013
【図１３】
0003655908.tif 000014