(57)【特許請求の範囲】
【請求項１】
プロセッサ内ソフトウェアの順序外命令の実行で生じた不正確な結果から回復するためのシステムであって、
前記プロセッサに接続され、命令を読出すフェッチ・メカニズムと、
前記プロセッサに接続され、前記命令を前記フェッチ・メカニズムから受け取り、前記命令を順序外で実行する再処理メカニズムと、
前記再処理メカニズムに接続され、前記再処理メカニズムの命令の構造的に不正確な実行を認識し、前記実行の後、前記命令をパニック・トラップ・インジケータと関連付けるパニック・トラップ論理手段と、
前記再処理メカニズムと前記フェッチ・メカニズムに接続され、前記再処理メカニズム内の命令を消去し、前記フェッチ・メカニズムに再読出しをさせ、前記パニック・トラップ・インジケータに基づいて前記命令を開始するトラップ・ベクトル・ジェネレータと、
を備え、前記パニック・トラップ・インジケータは、前記構造的に不正確な実行を生じさせた命令を前記再処理メカニズムから引退させる引退信号による制御によって、前記トラップ・ベクトル・ジェネレータに送られるようにした、前記システム。
【請求項２】
プロセッサ内ソフトウェアの順序外命令の実行で生じた不正確な結果から回復するためのシステムであって、
前記順序外命令を集め、実行する第１の手段と、
前記第１の手段に接続され、命令の構造的に不正確な実行を認識し、前記不正確な実行を生じた命令を示す、前記ソフトウェアに不可視の非構造的ハードウェア信号である、パニック・トラップ・インジケータを、該命令を引退させる引退信号によってアサートする第２の手段と、
前記アサートされたパニック・トラップ・インジケータを認識し、前記不正確な実行を生じた命令から順に命令の再読出しを行う第３の手段と、
を有する前記システム。
【請求項３】
プロセッサ内ソフトウェアの順序外命令の実行で生じた不正確な結果から回復するための方法であって、
再処理メカニズムに命令を集めるステップと、
前記命令を順序外で実行するステップと、
命令の構造的に不正確な実行を認識するステップと、
命令の構造的に不正確な命令を認識し、該不正確な実行を生じた命令を示す、前記ソフトウェアに不可視の非構造的ハードウェア信号であるパニック・トラップ・インジケータを、該命令を引退させる引退信号によってアサートするステップと、
前記アサートされたパニック・トラップ・インジケータを認識し、前記再処理メカニズム内の命令を消去し、前記不正確な実行を生じた命令から順に命令の再読出しを行うステップと、
を有する前記方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、一般にコンピュータ・プロセッサ・アーキテクチャに関連する。特に、プロセッサの命令の実行順序が狂っているときに、不正確な処理からリカバリするためのパニック・トラップ・システムと方法に関する。また、パニック・トラップ・システムと方法は、タイミングと同期を図るためにも使用される。
【０００２】
【従来の技術】
コンピュータ・プロセッサ（演算処理装置）は、一般に、システムのオペレーションを実行する制御装置と、計算型のオペレーションを実行する算術論理演算装置（ＡＬＵ）を含む。プロセッサのデザインは、レジスタ・セット、これらのレジスタ間の通信経路、及びこれらが稼働する方法を指示し制御する手段の選択によって決定される。通常、プロセッサは、メイン・メモリの中に保持されている一連の命令から成るプログラムによって稼働される。各々の命令は、ビット群であり、通常、プロセッサによって実行されるオペレーションを指定する１又は複数のワードの長さである。
【０００３】
一般に、プロセッサの基本サイクルは、以下のステップから成る。
（ａ）命令をメイン・メモリから命令レジスタに取り出す。
（ｂ）命令を復号する（すなわち、命令が示す実行すべきことを決定する。各命令が、実行されるオペレーションとそのオペレーションが使用するデータを示す）。
（ｃ）命令によって指定されたオペレーションを実行する。
（ｄ）次の命令の位置を決定する。通常、次の命令が、現在の命令の直後に続いている。
【０００４】
しかしながら、複数のスカラ・オペレーションが平行して実行されるスーパースカラ・プロセッサのような高性能なプロセッサにおいて、プロセッサが、混乱した順序またはプロセッサを操作しているソフトウェアによって定義された順序と一致していない順序で命令を実行するように設計される場合がある。これらのシステムでは、プログラムによって定義された順序で命令が発生したときではなく、命令が実行されることができるときに、命令は実行される。更に、順序の混乱した命令の実行の後、プログラムにその結果を渡す前に、命令順序に対応させて、最終的に再処理される。
【０００５】
キャッシュ・メモリは、しばしばパフォーマンスを最適化するために、コンピュータのプロセッサに関連して、使われている。キャッシュ・メモリは、コンピュータのプロセッサとメイン・メモリの間に置かれた高速バッファである。プロセッサで使用される現在のデータと命令が、キャッシュ・メモリに移され、それによって、２つの利益を生じる。第１に、プロセッサのメモリ使用要求のための平均のアクセス時間が減少し、プロセッサのスループットが増加する。第２に、それによって、利用可能なメモリ・バンド幅によるプロセッサの使用が減り、システム・バス上の他の装置が、プロセッサのじゃまをすることなくメモリを使用できるようになる。キャッシュ・メモリは、メイン・メモリからプロセッサへの命令とデータの転送スピードをアップさせるために使用される。メイン・メモリ・サイクル・タイムが一般的にプロセッサ・クロッキング率より遅いので、このキャッシュ機能が重要となる。
【０００６】
プロセッサがデータ・キャッシュをデータ・ラインのためにアクセスするとき、プロセッサはアドレスをキャッシュに転送する。キャッシュが、アドレスからキャッシュ・インデックスを解析して、要求されたデータ・ラインを含む記憶領域を選択するためにそれを使用する。キャッシュが、実ページ番号（ＲＰＮ）であり、領域と状態インジケータに対応し、タグに対応するデータ・ラインが有効であるか否かを示す、タグを出力する。
【０００７】
一般的に、キャッシュと関連するサポート回路は、状態インジケータとタグを受け取る。状態インジケータが無効データを示すとき、サポート回路がプロセッサに「ミス」表示を転送し、その場合には、プロセッサがデータ・ラインのためにメイン・メモリをアクセスしなければならない。状態インジケータが有効なデータを示すとき、キャッシュが要求されたデータ・ラインを現在記憶しているか否かを決定するために、サポート回路はタグとアドレスの残余とを比較する。キャッシュがタグの比較によって決められるような要求されたデータ・ラインを持たないとき、サポート回路が、プロセッサに「ミス」表示を転送する。その場合、プロセッサが、メイン・メモリをデータ・ラインのためにアクセスしなければならない。キャッシュがタグの比較によって決められるような要求されたデータ・ラインを持つとき、サポート回路が、プロセッサに「ヒット」表示を転送して、要求されたデータ・ラインを読出すためにプロセッサにプロンプトを出す。
【０００８】
命令の順序外実行を行うプロセッサにおいて、命令の不正確な実行処理のために不正確な結果が生じる場合がある。また、命令がそれが依存する命令より先に実行されるとき、不正確な結果が生成じ、例えば、記憶（ストア）命令に依存するロード命令によって、ストア命令が転送される場合を考える。一般に、「ロード」命令はストレージ（キャッシュ又はメイン・メモリ）からレジスタへのデータ転送要求であるのに、「ストア」命令はレジスタからストレージへのデータ転送要求である。ロード命令がストア命令の前に処理される場合、ロード命令は無効データを送信する。従って、ストア命令は、正しい結果を得るためにロード命令の前に実行される。順序外命令を実行するスーパースカラ・プロセッサにおいて、不正確な結果が得られた場合、不正確な結果を認識して、そこから回復するためのメカニズムが必要である。
【０００９】
【発明が解決しようとする課題】
従って、本発明の目的は、順序外命令を実行するスーパースカラ・プロセッサにおいて、不正確な結果が得られた場合、不正確な結果を認識して、そこから回復するためのメカニズムを提供することである。
【００１０】
また、本発明の他の目的は、スーパースカラ・プロセッサ及び順序外命令を実行するプロセッサのパフォーマンスを改善することである。
【００１１】
更に、本発明の他の目的は、命令の不正確な順序の実行からプロセッサを回復するためのシステムと方法を提供することである。
【００１２】
即ち、本発明の目的は、命令の順序外実行から生成された不正確な結果からプロセッサを回復するのに使われ、更には、タイミングと同期を図るパニック・トラップ・システム及び方法を提供することである。
【００１３】
【課題を解決するための手段】
パニック・トラップ（panic trap）・システムは、以下の構造から成る。
【００１４】
命令フェッチ・メカニズム（ＩＦＥＴＣＨ）は、命令を命令キャッシュ（ＩＣＡＣＨＥ）から取り出す。ＩＦＥＴＣＨは、タイミングや同期を取るためにパニック・トラップ・インジケータと命令を関連付ける。パニック・トラップ・インジケータとは、プロセッサを操作しているソフトウェアには発生しない非構造的な信号である。命令が終了したならば、このパニック・トラップ・インジケータは、最終的に、パニック・トラップ・インジケータを持っている命令から順に取出しを再開する。
【００１５】
２つの待ち行列は、命令をＩＦＥＴＣＨから受け取る。ＡＬＵ（算術論理演算装置）命令待ち行列（ＡＱＵＥＵＥ）は、ＡＬＵで示される命令を受け取って、順序外命令を実行する。各々の命令は、それぞれの命令レジスタの内でＡＱＵＥＵＥに置かれる。メモリ命令待ち行列（ＭＱＵＥＵＥ）は、データ・キャッシュ（ＤＣＡＣＨＥ）かメイン・メモリで示される命令を受け取って、順序外命令を実行する。ＭＱＵＥＵＥは、命令レジスタを含み、メモリ命令と命令実行の結果に応じたデータ・アドレスを受け取るアドレス・リオーダ・バッファ・スロット（ＡＲＢＳＬＯＴＳ）と関連付けられる。
【００１６】
トラップ・インジケータ・ロジックは、メモリ命令の構造的に不正確な実行を認識し、パニック・トラップ・インジケータを実行後の命令と関連付けるための各ＡＲＢＳＬＯＴと関連する。実行されたロード命令が実行されていないストア命令に依存する場合が、命令の構造的に不正確な実行の一例を示す場面である。パニック・トラップ・インジケータ・ロジックは、この場面を決定し、発見した場合にパニック・トラップ・インジケータを発生する依存ロジックを持つ。
【００１７】
ＡＲＢＳＬＯＴは、さらに、命令が可干渉性チェック信号を基に転送されたデータに影響を与える場合を決定するキャッシュ可干渉性チェック（ＣＣＣ）ハザード分解システムを含む。ＣＣＣハザード分解システムは、パニック・トラップ・インジケータをセットすることができる。
【００１８】
システム・インタフェースへのアクセスを制御するシステム・インタフェース制御は、同期信号や遠隔装置からの外部割込の受信に基づいて、パニック・トラップ・インジケータを起動することがある。この場合、システム・インタフェース制御が、実行後の引退し（RETIRE）た命令を担当して、パニック・トラップ・インジケータと命令とを関係付ける引退メカニズムにパニック・トラップ・インジケータを転送する。
【００１９】
命令に応じてキャッシュ・アクセスに関係付けられたパリティ・エラーが生じた場合、ＤＣＡＣＨＥはパニック・トラップを起動することがある。ＤＣＡＣＨＥは、パニック・トラップ・インジケータを引退メカニズムに提供することによってパニック・トラップを発生する。
【００２０】
命令がＡＱＵＥＵＥかＭＱＵＥＵＥの中で実行された後、命令は引退メカニズムによって引退させられる。引退処理の間、パニック・トラップ・インジケータを認識しながら、引退メカニズムに関連するトラップ・ベクトル・ゼネレータが、ＡＱＵＥＵＥやＭＱＵＥＵＥからの命令を消去し、ＩＦＥＴＣＨに再び読出しをさせ、パニック・トラップを引き起こした命令から順に実行する。
【００２１】
また、本発明はいくつかの新しい方法を提供している。最初の方法は、プロセッサを命令の順序外実行で処理された不正確な結果から回復することを許可し、特に、実行段階の間のパニック・トラップの関係を管理する。
【００２２】
第１の方法の概要を次に示す。再処理メカニズムの中で命令を集め、順序外命令を実行する。命令の構造的に不正確な実行を認識し、命令と関連するパニック・トラップ・インジケータを発生する。発生したパニック・トラップ・インジケータは不正確な実行を示している。実行後の命令を引退させるとき、発生したパニック・トラップ・インジケータを認識し、再処理メカニズムを除去して、無効な命令から順に読出しを再び始める。
【００２３】
第２の方法は、読出段階の間、順序外命令を実行し、特に、命令と関連付けられたパニック・トラップを示すプロセッサで、不正確な実行結果を生じた命令から回復を可能とする。第２の方法の概要を次に示す。命令を読出し、命令が読出しの間、無効であることを決める。パニック・トラップ・インジケータを無効な命令と関連付け、他の命令によって無効な命令を再処理メカニズムに置く。再処理メカニズムの中で順序外命令を実行する。そして、実行後の命令を引退させるとき、パニック・トラップ・インジケータを認識し、再処理メカニズムを除去して、無効な命令から順に再び読出し始める。
【００２４】
３番目の方法は、順序外命令を実行するプロセッサと関連するデータ・キャッシュによって発見されたパリティ・エラーからの回復を可能とする。第３の方法の概要を次に示す。再処理メカニズムの中に命令を集め、順序外命令を実行する。データ・キャッシュに対するアクセスを含んでいる命令を実行し、パリティ・エラーがアクセス中に起こったかを決める。プロセッサでパニック・トラップを生成し、データ・キャッシュからトラップ・ベクトル・ゼネレータへ転送する。再処理メカニズムを除去して、その命令で命令の実行を再び始める。
【００２５】
前述した目的を達成することに加えて、本発明は、次の他の特徴を持つ。
【００２６】
本発明の特徴は、ＩＦＥＴＣＨがタイミングと同期目的のためにパニック・トラップ・システムを使用することができるということである。
【００２７】
また、本発明の他の特徴は、ＤＣＡＣＨＥがキャッシュ・アクセスに関係するパリティ・エラーを示し、回復するためにパニック・トラップ・システムを使用することができるということである。
【００２８】
更に、本発明の他の特徴は、システム・インタフェース制御がタイミングと同期を図るためにパニック・トラップ・システムを使用することができるということである。
【００２９】
また更に、本発明の他の特徴は、パニック・トラップ・システムのデザインが単純でその処理が信頼でき、大量生産でコンピュータが安価にできるということである。
【００３０】
【発明の実施の形態】
図１には、コンピュータ11内で、特に、コンピュータ11のプロセッサ14内の命令読出／実行システム12内で、実行するパニック・トラップ・システム100（図３〜５参照）が表示されている。コンピュータ11は、一般に、プロセッサ14と、プロセッサ14を操作するソフトウェア（Ｓ／Ｗ）18を持つメイン・メモリ16と、図中の矢印23で示すようにプロセッサ14と接続するデータ・キャッシュ24（ＤＣＡＣＨＥ）と、プロセッサ14とメイン・メモリ16を相互に連結させる１又は複数のバスのようなシステム・インタフェース22とから成る。
【００３１】
オペレーションにおいて、プロセッサ14の中の命令読出／実行システム12がソフトウェア18を実行できるように、プロセッサ14の中で現在使用されているデータが、ＤＣＡＣＨＥ24へ移される。それによって、プロセッサのメモリ要求の平均アクセス時間が減少し、システム・インタフェース22上の通信量が最少となる。ここで、新しいパニック・トラップ・システム100を除く前述のコンピュータ装置とそれらの構成の相互作用は従来技術として知られている。
【００３２】
ＤＣＡＣＨＥ24の一般的なキャッシュ・ラインは、タグ、状態インジケータ、及びデータを含む。キャッシュ・インデックスは、ＤＣＡＣＨＥ24に転送されて、要求されたデータ・ラインを含む記憶域を選択するために、ＤＣＡＣＨＥ24によって使用される。キャッシュ・インデックスの受信に応じて、ＤＣＡＣＨＥ24が、タグを出力する。タグは、記憶域に対応している実ページ番号（ＲＰＮ）であり、状態インジケータは、タグに対応しているデータ・ラインが有効であるか無効であるかを示し、データは、有効又は無効のどちらかである。一般的に、状態インジケータは次の状態を示す。「無効（invalid）」は、データが供給されないことを意味する。「有効共有（valid shared）」は、データが供給されるが、どこか他の場所にあることを意味する。「有効プライベイト・クリーン（valid private clean）」は、ラインがソール（sole）・コピーを持ち、ＤＣＡＣＨＥ24がラインにまだ書込んでいないことを意味する。「有効プライベイト・ダーティ（valid private dirty）」は、ラインがソール・コピーを持ち、ＤＣＡＣＨＥ24がラインに書込まれる（即ち、メイン・メモリ16にラインをコピーする必要がある）。
【００３３】
ＤＣＡＣＨＥ24と接続しているタグ比較メカニズム228（図６）は、状態（ステータス）インジケータとタグを受け取る。状態インジケータが無効データを示すとき、タグ比較メカニズム228はプロセッサ14に「ミス」表示を転送する。その場合、プロセッサ14はメイン・メモリ16をデータ・ラインのためにアクセスする。状態インジケータが有効データを示すとき、ＤＣＡＣＨＥ24が要求されたデータ・ラインを現在記憶しているか否かを決定するために、タグ比較メカニズム228は、タグとアドレスの残余とを比較する。タグの比較によって決定され要求されたデータ・ラインをＤＣＡＣＨＥ24が持たないとき、タグ比較メカニズム228はプロセッサ14に「ミス」表示を転送する。その場合、プロセッサ14はメイン・メモリ16をデータ・ラインのためにアクセスする。タグ比較によって決定され要求されたデータ・ラインをＤＣＡＣＨＥ24が持つとき、タグ比較メカニズム228はプロセッサ14に「ヒット」表示を転送し、要求されたデータ・ラインを読取るためにプロセッサ14にプロンプトを出す。
【００３４】
命令読出／実行システム12の実行を図２のブロック図で示す。図２の中で示されるように、命令読出／実行システム12が、命令をソフトウェア18（図１）から記憶するための命令キャッシュ（ＩＣＡＣＨＥ）26を持つ。命令フェッチ・メカニズム（ＩＦＥＴＣＨ）28が命令キャッシュ26と接続され、最後に、実行のためにキャッシュ26から命令を検索する。ここで、命令ＩＦＥＴＣＨ 28は、一度に４つの命令（各３２ビット）を読取り、ソート・メカニズム32へ命令を転送する。
【００３５】
命令は、ＩＦＥＴＣＨ28から、待ち行列か保留場所のような適当な再処理メカニズムに送り出される。ここで、命令は、ソートされ、算術論理ユニット（ＡＬＵ）とメモリ待ち行列に（ＭＱＵＥＵＥ）に分配される。
【００３６】
特に、ソート・メカニズム32は、ＩＦＥＴＣＨ28から命令を受取り、各命令が算術論理ユニット（ＡＬＵ）かメモリかに前もって分別されているかどうかを決定する。それに応じて、ソート・メカニズム32が、図２の矢印36aと36bに示すように、それぞれ命令をＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bに分配する。
【００３７】
ＡＱＵＥＵＥ38aは、矢印43で示されるように、算術論理演算装置（ＡＬＵ）42に転送されるそれぞれの命令を記憶するレジスタ41aを持つＡＬＵ命令処理メカニズム39a（総計２８個）を含む。ＡＱＵＥＵＥ38aの命令は、順序付けられて（即ち、データフロー型式で）実行される。命令が完了すると、ＡＱＵＥＵＥリネーム・レジスタ44aによって結果が獲得され、命令にＡＱＵＥＵＥ38aの中で完了したことを示す印が付けられる。ＡＱＵＥＵＥ38aは、ソート・メカニズム32からサイクル毎に４つの命令（それぞれ３２ビット）を受信し、矢印51aによって示されるように引退（RETIRE）メカニズム52へ、サイクル毎に２つの命令（それぞれ３２ビット）を送信する。
【００３８】
インタフェース45で示すように、ＡＱＵＥＵＥ38aの制御の下に、ＡＬＵ42がリネーム・レジスタ44a、44bと汎用レジスタ46からオペランドを検索することができる。ＡＬＵ42がオペランドを実行した後、矢印49で示されるように、実行結果は、ＡＱＵＥＵＥリネーム・レジスタ44aに記憶される。ＭＱＵＥＵＥ38bは、命令処理メカニズム39bを含む。各々の命令処理メカニズム39bは、それぞれのメモリ命令を記憶するレジスタ41bと、それぞれのアドレスを記憶するアドレス・リオーダ・バッファ・スロット（ＡＲＢＳＬＯＴ：総計２８個）48を含む。ＭＱＵＥＵＥ38b中のメモリ命令は、メモリに対して「ロード（load）」及び「記憶（store）」として類別することができる。「ロード」は、メモリ（キャッシュやメイン・メモリ）からレジスタへデータを伝送する要求であるのに対して、「記憶」はレジスタからメモリへデータを伝送する要求である。
【００３９】
命令の実行の間、最初の行程は、アドレスを計算するために定められた数学的オペレーションをオペランドの上で実行することを意味し、２番目の行程は、計算されたアドレスに基づくデータのためにメモリやキャッシュをアクセスすることを意味する。ＭＱＵＥＵＥ38bは、各々の命令と、２つの行程と、順次（即ち、データフロー型式）メモリ／キャッシュ・アクセスとを実行する。命令が完了すると、結果がＭＱＵＥＵＥリネーム・レジスタ44bによって獲得され、命令にＭＱＵＥＵＥ38bの中で完了したことを示す印が付けられる。ＭＱＵＥＵＥ38bは、ソート・メカニズム32からサイクル毎に４つの命令（それぞれ３２ビット）を受信し、矢印51bによって示されるように引退（RETIRE）メカニズム52へ、サイクル毎に２つの命令（それぞれ３２ビット）を送信する。
【００４０】
特に、命令実行の最初行程の間、アドレスはアドレス計算機58で生成される。アドレス計算機58が、ＭＱＵＥＵＥリネーム・レジスタ44bから検索されたオペランドに基づいてアドレスを計算し、矢印62で示されるように、ＭＱＵＥＵＥ38bの中の命令に対応するＡＲＢＳＬＯＴ48に（実または仮想）アドレスを渡す。
【００４１】
命令による計算の制御は、図２の矢印64で示される。メモリ命令実行の２番目の行程が遂行されるとき、ＤＣＡＣＨＥ24でロード又は記憶を達成するために、矢印54で示されるように、計算されたアドレス（キャッシュ・インデックスを含む）がＤＣＡＣＨＥ24へ転送される。ここで、可能であれば、２つアドレスが、各々の各サイクルでＭＱＵＥＵＥ38bからＤＣＡＣＨＥ24へ転送される。このマルチ・アドレス機能を適応させるため、例えば、ＤＣＡＣＨＥ24は、デュアル・ポートで実行される。これに対して他の例として、奇数と偶数アドレスが、単一移行されたランダム・アクセス・メモリ（ＲＡＭ）中のそれぞれの奇数と偶数キャッシュ・バンクに同時に送られるものもある。この詳細は、同じ発明者によって同日、同時に出願された"Address Aggregation System And Method For Increasing Throughput Of Addresses To A Data Cache From A Processor"に記述されている。一度、ＤＣＡＣＨＥ24がアドレスを処理すると、矢印56に示すように、データ結果はＭＱＵＥＵＥリネーム・レジスタ44bに転送される。
【００４２】
引退メカニズム52は、実行された命令（即ち、サイクル毎に２つの３２ビット・ワード）を待ち行列38a、38bの各々から受け取る。引退メカニズム52は、構造的状態で命令結果を入れる。ソフトウェア18（図１）は、結果が引退メカニズム52によって構造的状態に変換されることに関与しない。引退メカニズム52が、それぞれ矢印73、74によって示されるように、命令の属性に基づいて命令結果を汎用レジスタ46や制御レジスタ72に移動することにより、ソフトウェア18によって定義されたプログラム命令の中の待ち行列38a、38bの命令を引退させ、矢印76a、76bによって示すように命令結果をリネーム・レジスタ44a、44bから汎用レジスタ46に渡す。
【００４３】
引退メカニズム52が、キャッシュ24のデータ・ラインに結果的に記憶された命令を、引退させるとき、ラインが変わり、メイン・メモリ16でラインを更新し、メイン・メモリ16に最終的に転送することを示すために、引退メカニズム52が、ラインに応じて状態インジケータを、「ダーティ」とマークする。
【００４４】
また、引退メカニズム52は、命令に関係する「例外」があるか否かを決定するロジックを持つ。「例外」は、１又は複数の以前の命令に対応する特別な状況を示すフラグである。引退メカニズム52は、「例外」を示した命令に先行する待ち行列38a、38b内の全ての命令を捨てて、命令フェッチメカニズム28に、もう一度再処理するために問題となっている命令を検索させるか、または、特別な状況を扱う特別なソフトウェアを検索させるかする。
【００４５】
パニック・トラップ・システム及び方法
ここで、パニック・トラップ・システム100とそれに関連する方法を図３〜５を参照して詳述する。一般に、パニック・トラップ・システム100及び方法が、エラーを認識し、エラーの生じた命令を再実行することによって、命令の不正確な順序外実行からの回復を可能とする。それによって、２回目の実行で、正しい結果となる。このことは、ソフトウェア18（図１）では見られない非構造的なハードウェア信号であるパニック・トラップの概念を利用することによって達成される。
【００４６】
パニック・トラップは、以下の構成によって発生する。
（ａ） 命令に関するタイミング又は同期要求時、ＩＦＥＴＣＨ28。
（ｂ）メモリ命令の不正確な順序外実行時、ＭＱＵＥＵＥ38bのメモリ命令処理メカニズム39bの中のＡＲＢＳＬＯＴ48。
（ｃ）メモリ命令に従うアクセスに関する発見されたパリティ・エラー時、ＤＣＡＣＨＥ24。
（ｄ）同期命令（例えば、マルチ・プロセッサ（ＭＰ）システムの中での）、外部割込み、その他の事象での、システム・インタフェース22へ（又は、から）のアクセスを制御するシステム・インタフェース制御22。
【００４７】
特に、ＩＦＥＴＣＨ28は、タイミングや同期を図るためにパニック・トラップを始める。例えば、ＩＦＥＴＣＨ28は、命令と関連してパニック・トラップをセットすることによって、待ち時間サイクルを挿入することができる。ここで、パニック・トラップ・インジケータ102（１又は複数のビット）は、命令処理メカニズム39a、39bに渡される各命令104と関連する。ＩＦＥＴＣＨ28は、インジケータ102が潜在的に不正確な動作を引き起こす命令104と関係するパニック・トラップを発生する。この発生又は非発生に基づき、パニック・トラップ・インジケータ102は、特別な命令104が引退メカニズム52によって最終的に引退するときパニック・トラップを始めるか否かを示めす。パニック・トラップ・インジケータ102として１又は複数のビットを実行する代わりに、パニック・トラップ・ロード命令が、引退メカニズム52でパニック・トラップを始めるＩＦＥＴＣＨ28によって、ＡＱＵＥＵＥ38aに置かれる。
【００４８】
命令の実行が不正確な結果を引き起こすとき、ＡＲＢＳＬＯＴ48自身によるパニック・トラップの生成に関して、メモリ命令104と関連するパニック・トラップ・インジケータ102が、対応するＡＲＢＳＬＯＴ48によって、発生される。発生又は非発生に基づき、パニック・トラップ・インジケータ102は、特別な命令104が引退メカニズム52によって最終的に引退するときパニック・トラップを始めるか否かを示めす。パニック・インジケータ102が命令104と関連するＡＲＢＳＬＯＴ48によって発生される時の例としては、命令104がストア命令に従うロード命令であって、ストア命令がロード命令に先立って実行されなかったという状況がある。この場合、ロード命令は、無視される無効データを生成する結果となる。
【００４９】
また、矢印106で示されるように、ＤＣＡＣＨＥ24はパニック・トラップ・インジケータ102を引退メカニズム52に供給する。この事によって、ＤＣＡＣＨＥ24は、ＤＣＡＣＨＥ24への記憶及びＤＣＡＣＨＥ24からのロードが有効であることを確保するために、パリティ・チェック・ロジックを持つ。特に、ロードの間、ＤＣＡＣＨＥ24はパリティ・エラーのためにタグとデータをチェックし、記憶の間、ＤＣＡＣＨＥ24はパリティ・エラーのためにタグをチェックする。パリティ・エラーが発見されたならば、ＤＣＡＣＨＥ24は、パニック・トラップ・インジケータを引退メカニズム52に発生する。幾つかのケースでは、パリティ・エラーから回復でき、他のケース（例えば、ダーティ・データ、タグ・エラー等）では、回復できない。回復ができる場合において、引退メカニズム52によって、パリティ・エラーを発生した命令の再実行を行い、新しいデータ・ラインがメイン・メモリ16から検索されるようになる。回復が可能でない場合において、最終的にコンピュータ11のオペレーションを停止するトラップ・コードに、引退メカニズム52が、向くことになる。
【００５０】
また、矢印112で示すように、プロセッサ14に接続されたシステム・インタフェース制御108は、引退メカニズム52にパニック・トラップ・インジケータを提供する。システム・インタフェース制御108がシステム・インタフェース22へ（又はから）のアクセスを制御する。例えば、マルチ・プロセッサ（ＭＰ）システムで、プロセッサ14がＭＰシステムの他のプロセッサと同期するように、システム・インタフェース制御108が、同期命令をシステム・インタフェース22から受け取ることができる。同期命令がシステム・インタフェース制御108によって受け取られるとき、システム・インタフェース制御108は、パニック・トラップ・インジケータを引退メカニズム52に発生する。待ち行列38a、38bがフラッシュされたあと、パニック・トラップを得る命令がリフェッチされ、フラッシュとリスタート・オペレーションの結果、プログラムの実行の同期がそのまま続くことになる。
【００５１】
引退メカニズム52が発生されたパニック・トラップ・インジケータ102を持つ命令104を引退させるとき、あるいは、引退メカニズム52が発生されたパニック・トラップ・インジケータ106、112をＤＣＡＣＨＥ24又はシステム・インタフェース制御108から受け取るとき、引退メカニズム52は、トラップ表示をトラップ・ベクトル・ゼネレータ114へ知らせる（矢印116）。引退メカニズム52は、パニック・トラップが発生されたトラップ・ベクトル・ゼネレータ114に対して指示を出し、パニック・トラップに対応する命令アドレスを転送する。次に、矢印118、118a、118bによって示されるように、トラップ・ベクトル・ゼネレータ114は、ＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bの内容を削除する。さらに、矢印121で示すように、トラップ・ベクトル・ゼネレータ114は、命令アドレスをＩＦＥＴＣＨ28へ送る。ＩＦＥＴＣＨ28は、矢印27で示されるように、新しい命令アドレスから始まる命令アドレスをＩＣＡＣＨＥ26から検索し、順序外実行のためにアドレスをＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bに置く。従って、パニック・トラップにかけられた命令の命令アドレスで、命令の実行がもう一度始まる。
【００５２】
また、引退メカニズム52は、構造的トラップ（非構造的パニック・トラップでなく）を受け取る場合がある。例えば、システム・インタフェース制御108は、外部割込みをシステム・インタフェース22から受け取る場合がある。この場合、システム・インタフェース制御108は、外部割込みを扱うためにコードと対応している命令アドレスとともに、引退メカニズム52へトラップ信号を発生する。さらに、引退メカニズム52は、トラップ・ベクトル・ゼネレータ114へ、トラップが発生したことを示し、トラップと対応している命令アドレスを転送する。上述のように、トラップ・ベクトル・ゼネレータ114は、順次に応答する。
【００５３】
従来の構造的トラップと同様に非構造的パニック・トラップを生成するための各ＡＲＢＳＬＯＴ48の内のトラップ・インジケータ・ロジックのオペレーションを図４に示す。図４において、トラップ・インジケータ・ロジック122は、構造的トラップ・インジケータ（Ｔ）122からの構造的トラップ信号126と同様にパニック・トラップ・インジケータ（Ｐ）102からのパニック・トラップ信号121を発生できる入力を、受け取る。ここで、トラップ・インジケータ102、122は、ラッチ又は他の適当なロジック記憶装置である。
【００５４】
ここで、トラップ・インジケータ・ロジック122が、記憶・ロード（ＳＴ／ＬＤ）ハザード信号124（図７のST/LD_HAZARD）とキャッシュ可干渉性チェック（ＣＣＣ）ハザード信号125（図６のCCC_HAZARD)を受取る。ハザード信号124、125は、パニック・トラップが発生される時を示すためにＡＮＤ論理ゲート135に渡される信号132を生成するＯＲ論理ゲート128に伝えられる。また、ＡＮＤ論理ゲート135は、UPDATE信号131を受け取る否定回路133から、-UPDATE信号134を受け取る。トラップ・インジケータ・ロジック122と対応する命令がそのデータ・アドレスを対応するＡＲＢＳＬＯＴ48に示すとき、UPDATE信号134が、発生する。UPDATE信号134の発生が、Ｐ信号121を消滅するか、クリアする。UPDATE信号134の発生は、TLB_TRAP信号141が消滅されている場合、トラップ信号126をクリアし、TLB_TRAP141がトランジスタ145を通じて発生する場合、トラップ信号126をセットする。さらに、ＡＮＤ論理ゲート135に与えられる-UPDATE信号134が、クリア処理の後に発生し、ハザード信号124、125が、命令が有効な間に獲得され、ＡＮＤ論理ゲート135からの信号136が発生する。
【００５５】
ＡＮＤ論理ゲート135からの信号136は、トランジスタ137、138に作用する。トランジスタ137が、最終的にパニック・トラップを生成し、トランジスタ138が、最終的に構造的トラップを生成する。パニック・トラップに関連して、UPDATE信号123が発生していないとき、トランジスタ137は、パニック・トラップ信号121を発生することができる。構造的トラップに関連して、UPDATE信号123が発生せず、且つ変換ルックアサイド・バッファ（ＴＬＢ）214（図６）からTLB_TRAP信号141が発生するとき、トランジスタ138は、構造的トラップ信号126を発生する。
【００５６】
ＡＲＢＳＬＯＴ48と関連する命令が、引退メカニズム52（図３）によって引退されるとき、矢印146で示すように、引退信号ＲＥＴ［ｉ］（ここで、ｉはトラップ・インジケータ・ロジック122を含む特別のＡＲＢＳＬＯＴ48に対応する）によって制御されるようなドライバ142、144は、パニック・トラップ信号121と構造的トラップ信号126のそれぞれを引退メカニズム52へ送り出す。
【００５７】
ここで、２８個の引退ポインタRET[27：0]は、ＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bの各々のために生成される。これらの引退ポインタRET[27：0]は、次の２つの命令が各待ち行列38a、38bの中で引退する場所を示す。各待ち行列38a、38bに与えられた時間で、前述の２つの引退ポインタが各々２つの連続的命令処理メカニズム39a、39bに対して発生し、それによって、まだ引退していない最も古い命令を含む２つの命令処理メカニズム39a、39bを示す。命令が引退するとき、その対応するポインタは消滅し、次の最も古いものが発生する。実行の例として、引退ポインタRET[27:0]は、循環桁移動チェインから２８個のマスタ・スレーブ・ラッチで生成される。
【００５８】
図５は、本発明を実行するために、ロジックの実行が引退メカニズム52と関連することを示す。引退メカニズム52が、ＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38b中に引退命令と関連データで構成され、構造的状態になる。図５において、引退メカニズム52は、第１の行程52aと第２の行程52bを含む２つの行程パイプを含む。
【００５９】
第１行程52aにおいて、ＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bからの命令データは、構造的トラップと非構造的パニック・トラップの表示のために、それぞれのＡＱＵＥＵＥとＭＱＵＥＵＥの一部52a'、52a''によって、別々に分析される。構造的トラップの概念は、よく知られている技術である。構造的トラップの例は、アドレス・カルキュレータ58（図２）の変換ルックアサイド・バッファ（ＴＬＢ）214（図６）によって生成される（ＴＬＢミス、書込違反、調整違反、参照違反など）である。（構造的又はパニック）トラップが発生するならば、関連命令は機能停止し、トラップ表示がトラップ・ベクトル・ゼネレータ114に転送される。更に、第１行程52aは、ＡＱＵＥＵＥ38aとＭＱＵＥＵＥ38bからの命令を再処理して、再結合するために、命令と関連データを分析する。第１行程52aが第２行程52bに情報を伝送するように、再結合処理が発生する。最終的に、命令結果は、順に、汎用レジスタ46（図２）や制御レジスター72（図２）に転送される。
【００６０】
特に、図５の中で示されるように、第１行程52aが４つのレジスタ148（簡潔にするため148a、148bの２つのみ示す）を含む。レジスタ148aは命令データをＡＱＵＥＵＥ38aから受け取るのに対して、レジスタ148bは命令データをＭＱＵＥＵＥ38bから受け取る。
【００６１】
レジスタ148aが、ＡＬＵオペレーション・コード（OPCODE）154と、命令アドレス（INSTR_ADDR）155と、トラップ・タイプ・インジケータ（T_TYPE：１又は複数のビット）156と、構造的トラップ・インジケータ（Ｔ：１又は複数のビット）157と、パニック・トラップ・インジケータ（Ｐ：１又は複数のビット）102とを受け取る。T_TYPE156は、構造的トラップのタイプを示す。RET_INSERT信号152によって記録されるそれぞれのトランジスタ159に接続されるそれぞれの入力158を介して、前述の情報がレジスタ148に置かれる。
【００６２】
第１行程52aのＭＱＵＥＵＥ部分において、レジスタ148bは、メモリ・オペレーション・コード（INSTR_OPCODE）164と、命令アドレス（INSTR_ADDR）165と、トラップ・タイプ・インジケータ（T_TYPE：１又は複数のビット）166と、構造的トラップ・インジケータ（Ｔ：１又は複数のビット）167と、パニック・トラップ・インジケータ（Ｐ）102と、データ・アドレス（DATA_ADDR）62とを受け取る。前述の情報は、RET_INSERT152信号によって記録されるそれぞれの入力168とそれぞれのトランジスタ169を介して、レジスタ148bに移される。
【００６３】
ＯＲ論理ゲート172は、パニック・トラップ・インジケータ106、112と同様に、構造的トラップ入力をＤＣＡＣＨＥ24とシステム・インタフェース制御108から受け取るために配置される。このゲート172の結果は、この引退した命令がトラップに必要か否かを示す。
【００６４】
図５において、ＯＲ論理ゲート173が、ＭＱＵＥＵＥ38bと、ＤＣＡＣＨＥ24と、システム・インタフェース制御108とから、パニック・トラップ・インジケータを受け取るために配置されている。このゲート173の結果は、パニック・トラップ・インジケータ102がこの引退した命令と関連しているか否かを示す。ＤＣＡＣＨＥ24及びシステム・インタフェース制御108からのパニック・トラップ・インジケータ102は、外部システムによって生成されるので、命令と関係付けることができる。トラップを引退する次のＭＱＵＥＵＥ命令に割り当てる。構造的トラップ（T_TYPE166で示される）とパニック・トラップとを選択できるならば、パニック・トラップが準備されていることがソフトウェア18に対して意味があるので、構造的トラップが機能する。
【００６５】
他の実施の形態として、INSTR_ADDR155、165が、実際の命令アドレスを記憶するルックアップ・テーブルに、ポインタで置換される場合がある。この場合は、引退メカニズム52の第１行程52a内で、記憶域を節約する。
【００６６】
第２行程52bにおいて、ADVANCE信号174が、レジスタ148a、148bの内容をそれぞれのレジスタ178a-178dに伝送するために、それぞれのトランジスタ176a-176dに作用する。上述では、レジスタ178a-178dの中で位置決めされた命令は、プログラム順となっている。トラップされた命令があるならば、最初のトラップされた命令だけが、レジスタ178a、178dの中で許可される。各々の命令は、命令の順序を示す一組のb4ビット182と関係付けられる。b4ビット182が引退メカニズム52からの出力であるとき、b4ビット182は命令を処理するために利用される。
【００６７】
構造的トラップ・インジケータＴ157、167が、（図４の構造的又はパニック）トラップが生成されたか否かを示すトラップ信号187を生成するために、矢印185で示されるように、ＯＲ論理ゲート184に転送される。トラップ信号187は、トラップ・ベクトル・ゼネレータ114へ渡される。
【００６８】
トラップ・タイプ・インジケータ156、166とパニック・トラップ・インジケータ102が結合され、トラップ・タイプ信号196を生じるために、矢印194で示されるように、マルチプレクサ（ＭＵＸ）192に伝えられる。トラップされた命令が、レジスタ178a-178dの１つの中にあるとき、他の有効なトラップされた命令は、他のレジスタ178a-178dのいずれにも存在しない。更に、トラップされた命令を持っているレジスタ178a-178dが、T_TYPEとＰを出力するとき、矢印196で示すように、トラップ・ゼネレータ114にこれらのビットを渡すために、レジスタ178a-178dは、ＭＵＸ192を制御する。トラップ・タイプ・インジケータ156、166は、構造的トラップのタイプを識別するトラップ・インジケータＴ157、167に対応している。
【００６９】
INSTR_ADDR155、165は、トラップ・ベクトル・ゼネレータ114のための命令アドレス201を生成するために、矢印199で示すように、ＭＵＸ198に伝えられる。ＭＵＸ198は、ＭＵＸ192と同時に制御され、従って、トラップされた命令に関連するINSTR_ADDR201がトラップ・ベクトル・ゼネレータ114に転送される。
【００７０】
発生されたトラップ信号187、トラップ・タイプ信号196、パニック・トラップ・インジケータ102、及び命令アドレス201の受取りに基づいて、トラップ・ベクトル・ゼネレータ114は、新しい命令アドレス121を生成して、それをＩＦＥＴＣＨ28（図３）に渡す。トラップが構造的トラップＴであるとき、新しい命令アドレス121がトラップ・ハンドラ、例えば、ＴＬＢミス・ハンドラ、外部割込ハンドラなど、のアドレスに対応する。トラップが、ＩＦＥＴＣＨ28又は命令処理メカニズム39a、39bからの非構造的パニック・トラップＰであるとき、新しい命令アドレス121は、パニック・トラップされた命令に対応する。
【００７１】
キャッシュ可干渉性チェック（ＣＣＣ）ハザード分解システム
キャッシュ可干渉性チェック（ＣＣＣ）ハザード125（図４）の生成を、図６を基に説明する。各々ＡＲＢＳＬＯＴ48は、ＤＣＡＣＨＥ24から出力されプロセッサ14で利用可能でないすでに使用されたＣＣＣデータを、ロード命令が持つかどうかを決定するＣＣＣハザード分解システム202を含む。
【００７２】
キャッシュ可干渉性チェックの間、システム・インタフェース22に接続される、遠隔処理装置や遠隔入出力（Ｉ／Ｏ）装置のような他の装置が、データ・ラインの独占排他的なコピーを行う。従って、遠隔装置は、ＤＣＡＣＨＥ24がデータ・ラインのコピーを持つか否かを決定するために、要求をＤＣＡＣＨＥ24へ送り出す。ＤＣＡＣＨＥ24がデータ・ラインを持つならば、データ・ラインの所有権が、ＤＣＡＣＨＥ24からシステム・インタフェース22に接続される遠隔装置に移される。
【００７３】
本発明のＭＱＵＥＵＥ38bにおいて、個別のＡＲＢＳＬＯＴ48は、ＣＣＣデータ・ラインと対応しているアドレス（キャッシュ・インデックスとタグを含む）を受け取るか否か及びデータ・ラインが存在するか否かを決定するために、ＤＣＡＣＨＥ24をアクセスすることに使用される。ＣＣＣ照会に対するレスポンスが、システム・インタフェース制御108（最終的には、システム・インタフェース22）に送り出される。レスポンスは、その状態インジケータと同様に、（存在するならば）データ・ラインを含む。
【００７４】
ＣＣＣデータ・ラインのアドレスは、いずれかのＡＲＢＳＬＯＴ48の命令がＣＣＣデータ・ラインを使用するか否かを決定するために、ＭＱＵＥＵＥ38b内の全てのＡＲＢＳＬＯＴ48へ移される。ＣＣＣデータ・ラインのロードを意味する命令がすでに実行されるならば、パニック・トラップは、その対応するパニック・トラップ・インジケータ102（図４）を介してその命令に関連付けられる。
【００７５】
図６において、ＣＣＣハザード分解システム202は、ヒット（ＨＩＴ）インジケータ206と、キャッシュ・インデックス207と、タグ208とを有するレジスタ204を含む。キャッシュ・インデックス207とタグ208は、アドレス・カルキュレータ58から受け取られる。アドレス・カルキュレータ58は、リネーム・レジスタ44a、44bや汎用レジスタ46（図２）からオペランド（ＯＰ）212を受け取って、実行する加算機211を含む。加算機211が、矢印216で示すように、ＡＲＢＳＬＯＴ48及び変換ルックアサイド・バッファ（ＴＬＢ）214に渡される仮想アドレスを生成する。ＴＬＢ214は仮想アドレス216に基づいて実アドレス・タグを生成し、矢印218で示すように、レジスタ204にそれを渡す。
【００７６】
レジスタ204のキャッシュ・インデックス207は、矢印222で示すように、ＤＣＡＣＨＥ24へアクセスするのに使用される。キャッシュ・インデックス222を受信して、ＤＣＡＣＨＥ24が、タグ224と、状態インジケータ226と、データとを選別して出力するために、着信キャッシュ・インデックスを使用する。タグ224と状態インジケータ226は、ヒットかミスかを判断するために、タグ比較メカニズム228に渡される。データは、ＭＱＵＥＵＥリネーム・レジスタ44bに移される。また、タグ比較メカニズム228が、ＡＲＢＳＬＯＴレジスタ204から受け取ったタグ208とＤＣＡＣＨＥ24からのタグ224を比較する。比較の結果が一致したならば、矢印227で示すように、タグ比較メカニズム228が、ヒット・インジケータ206を通してレジスタ204の中にヒットを発生する。
【００７７】
更に、ＣＣＣハザード分解システム202が、矢印232で示すように、遠隔ＣＣＣＡＲＢＳＬＯＴ48から（キャッシュ・インデックスを持つ）アドレスMISS_ADDR231と、ローカルＡＲＢＳＬＯＴレジスタ204からキャッシュ・インデックス207とを受け取るように構成された、キャッシュ・インデックス比較メカニズム228を含む。キャッシュ・インデックスの比較に基づいて、比較メカニズム228は、ローカルＡＲＢＳＬＯＴ48の中の命令が、ＣＣＣデータ・ラインを使用したどうかを示すマッチ信号（MATCH）234を生成する。MATCH信号234は、ＣＣＣハザード信号125を発生するＡＮＤ論理ゲート236と、ＣＣＣハザード信号125を消滅するＡＮＤ論理ゲート238とに転送される。
【００７８】
ＡＮＤ論理ゲート236は、MATCH信号234と、ローカルＡＲＢＳＬＯＴ48がキャッシュ・ヒットを持ち、既にデータを受信しているかどうかを示すDONE信号239と、ＣＣＣ  ＡＲＢＳＬＯＴ48が比較のためにそのアドレスMISS_ADDR231を配信したことを示す、ＣＣＣ  ＡＲＢＳＬＯＴ48からのＣＣＣ制御信号（ＣＣＣ-CNTL）241と、を受け取る。前述の信号の状態に基づいて、ＡＮＤ論理ゲート236は、信号237を生成して、ＣＣＣハザード信号125を生成するＡＮＤ論理ゲート247にそれを渡す。
【００７９】
DONE信号239は、ＡＮＤ論理ゲート243によって生成される。このDONE信号239を生成するために、ＡＮＤ論理ゲート243は、以下のものを受け取る。
（ａ）ＡＲＢＳＬＯＴ48が他のＡＲＢＳＬＯＴ48の中のストア命令に依存するロード命令を持つときを示すストア非依存信号（-DS：図７）242。
（ｂ）ＡＲＢＳＬＯＴ48の中に有効アドレスがあるときを示すキャッシュ・アクセス有効信号（CAV）245。
（ｃ）ＤＣＡＣＨＥ24がＡＲＢＳＬＯＴ48の中の命令によってアクセスしたときを示す非キャッシュ保留信号（-CP：図７）246'。
（ｄ）ヒット又はミスがＤＣＡＣＨＥ24で起こったことを示すヒット信号（HIT）247。
（ｅ）ローカルＡＲＢＳＬＯＴ48の中の命令がＤＣＡＣＨＥ24には無い現在発生しているミス・データに依存しないときを示す非依存ノーミス（onmiss）信号（-DM）248。
【００８０】
ＡＮＤ論理ゲート238が、キャッシュ・インデックス比較メカニズム228からのMATCH信号234と、ＡＮＤ論理ゲート243からのDONE信号239と、最も古い命令ポインタOLDEST_INSTR237と、を受け取る。ポインタOLDEST_INSTR237が、ローカルＡＲＢＳＬＯＴ48が最も古い命令を持って、既にその命令を引退させるために準備している時を示す。ここで、現在のＡＲＢＳＬＯＴ48と以前のＡＲＢＳＬＯＴ48とに対応する引退ポインタRETを考慮することによって、OLDEST_INSTR信号237が生成される。もし、現在のＡＲＢＳＬＯＴ48に対応する引退ポインタが存在し、以前のＡＲＢＳＬＯＴ48のそれが消滅しているならば、現在のＡＲＢＳＬＯＴ48が最も古く、OLDEST_INSTR信号237が発生する。しかしながら、もし、現在のＡＲＢＳＬＯＴ48に対応する引退ポインタが存在し、また、以前のＡＲＢＳＬＯＴ48のそれも存在するならば、現在のＡＲＢＳＬＯＴ48が一番古いものではなく、OLDEST_INSTR信号237が消滅する。
【００８１】
ローカルＡＲＢＳＬＯＴ48の中の命令が、引退メカニズム52（図３）によって引退するとき、ＡＮＤ論理ゲート238が、否定回路245によって反転され、ＣＣＣハザード信号125を消滅するＡＮＤ論理ゲート247に送り出す、待ち時間信号（WAIT）244を生成する。従って、もし、ＡＲＢＳＬＯＴ48が、引退メカニズム52（図３）にその命令を始めるために準備するならば、ＣＣＣハザード分解システム202がパニック・トラップを防ぎ、ＡＲＢＳＬＯＴ48を完了させる。この機能は、不必要で役に立たないパニック・トラップを防いで、パフォーマンスを最適化する。
【００８２】
記憶・ロード（ST/LD）ハザード分解システム
各々ＡＲＢＳＬＯＴ48は、実行されるロード命令がまだ実行されていないストア命令に依存したデータを利用する場合、パニック・トラップを生成する記憶・ロード（ST/LD）ハザード分解システム252を有し、それを利用する。ロード命令が、実行されていないストア命令に依存するデータを使用したとき、データは無効であり、よって、ロード命令の結果も無効となり捨てられ、ロード命令が再実行される。
【００８３】
図７において、ＳＴ／ＬＤハザード分解システム252は、キャッシュ・インデックスの一致があるか否かを示す比較信号258を得るために、遠隔ＡＲＢＳＬＯＴ48からの遠隔キャッシュ・インデックス253とローカル・レジスタ204の中のローカル・キャッシュ・インデックス207とを比較するキャッシュ・インデックス比較メカニズム228を持つ。一致する場合、それらのそれぞれの命令は、同じデータを必要とするオペレーションを指示する場合がある。後述するように、それらのキャッシュ・インデックスが一致するならば、命令が同じデータを必要とするか否かを確定するために、更に、それらの相対データ・サイズに関係して、チェックが実行される。
【００８４】
スロット比較メカニズム259は、遠隔ＡＲＢＳＬＯＴ48からの遠隔スロット番号SLOT261受け取って、それを、２つのＡＲＢＳＬＯＴ48の２つの命令がより新しい命令であることを示すYOUNGER信号264を得るために、ローカル・レジスタ204の中のローカル・スロット番号SLOT263と比較する。命令が、順番にＡＲＢＳＬＯＴ48に置かれ、したがって、スロット番号が、より新しい命令を含むＡＲＢＳＬＯＴ48の番号を直接意味する。
【００８５】
ＡＮＤ論理ゲート266は、キャッシュ・インデックス比較メカニズム254からの比較信号258と、MATCH信号269を得るために命令に応じたデータ・サイズが一致するか否かを示すSIZE_MATCH信号267とを受け取る。ここで、このデータ・サイズは、１バイト（８ビット）、ハーフ・ワード（ｈｗ：１６ビット）、１ワード（３２ビット）、及びダブル・ワード（ｄｗ：６４ビット）を含む。データが一致する場合、それらが重なればよく、データ・サイズが同一である必要はない。図８に示されるサイズ・マッチ決定メカニズム326によって、SIZE_MATCH信号267が得られる。MATCH信号269が発生するとき、キャッシュ・インデックス207、255が一致し、そして、それらに対応するデータ・サイズが一致する。
【００８６】
ＡＮＤ論理ゲート272は、YOUNGER信号264と、遠隔ＡＲＢＳＬＯＴ48によってＤＣＡＣＨＥ24に送られるストア命令があるか否かを示すSTORE_LAUNCH信号274と、ローカルＡＲＢＳＬＯＴ48の中の命令がロード命令であるか否かを示すLOAD信号275と、キャッシュ・インデックスとそれらのデータ・サイズが一致するか否かを示すＡＮＤ論理ゲート266からのMATCH信号269と、を受け取る。前述の信号に基づいて、ＡＮＤ論理ゲート272は、ＡＮＤ論理ゲート278、279に送る信号277を生成する。信号277によって、ラッチあるいは他の適当なロジック・メカニズムのような依存ストア（ＤＳ）インジケータ281でDS信号315が発生し、若しくは、ＡＲＢＳＬＯＴ48がすでに実行してデータ・アドレスを受け取ったか否かに応じて、ＳＴ／ＬＤハザード信号124（図４）が発生する。一般に、他のＡＲＢＳＬＯＴ48がＤＣＡＣＨＥ24にアドレスを渡すことを実行するストア命令を持つとき、ＡＮＤ論理ゲート272は、ロード命令を持つＡＲＢＳＬＯＴ48の中で稼働するようになる。
【００８７】
ＡＮＤ論理ゲート278がＡＮＤ論理ゲート272からの信号277と否定信号-DONE282を受け取り、DSインジケータ281でDS信号315を発生するトランジスタ286に対するアクチュエータ信号284を得る。
【００８８】
ＡＮＤ論理ゲート279がＡＮＤ論理ゲート272からの信号277と肯定信号DONE288を受け取り、最終的にパニック・トラップを発生させるST/LD_HAZARD信号124（図４）を得る。
【００８９】
ＡＮＤ論理ゲート292は、ローカルＡＲＢＳＬＯＴ48の命令が遠隔ＡＲＢＳＬＯＴ48の命令より古いかどうかを示すスロット比較メカニズム259からのYOUNGER信号264と、遠隔ＡＲＢＳＬＯＴ48で実行されている命令がロード命令であるかどうかを示すLOAD_LAUNCH信号294と、ローカルＡＲＢＳＬＯＴ48がストア命令を含むかどうかを示すSTORE信号295と、対応するデータ・サイズと同様にキャッシュ・インデックス207、255が一致するかどうかを示すＡＮＤ論理ゲートロジック266からのマッチ信号269と、を受け取る。前述の信号に応じて、ＡＮＤ論理ゲート292は、一致がトリガーとなって、同じ遠隔ＡＲＢＳＬＯＴ48の中のＤＳインジケータ281を介して最終的にDS信号315を発生するASSERT_DS信号を生成する。HIT_DS信号302を他の遠隔ＡＲＢＳＬＯＴ48に送り出すドライバ299へASSERT_DS信号298が送られる。ＡＮＤ論理ゲート303と駆動信号305に基づくGRANTED_+_2信号307が真であるならば、HIT_DS信号302が、ＤＳインジケータ281にDS信号315を発生するトランジスタ304を駆動する。ＤＣＡＣＨＥ24へのアクセスがＡＲＢＳＬＯＴ48に与えられた後に、GRANTED_+_2信号が２サイクルで発生するという問題がある。従って、ロード命令がＤＣＡＣＨＥ24で開始され、ローカルＡＲＢＳＬＯＴ48がロード命令に依存するデータに関連するストア命令を含むとき、ＡＮＤ論理ゲート292は、上述のように稼働する。この場合、ロード命令が始められていて、データがまだ受け取られていない場合には、パニック・トラップは必要ない。
【００９０】
ＡＮＤ論理ゲート306が、ストア命令が遠隔ＡＲＢＳＬＯＴ48で引退するときを示す遠隔ＡＲＢＳＬＯＴ48からのSTORE_RETIRE信号308と、（アドレスMISS_ADDRのキャッシュ・インデックスがローカル・キャッシュ・インデックスと一致するかどうかを示す図６のＡＮＤ論理ゲート228からの）MATCH信号234と、を受け取る。前述の信号に基づいて、ＡＮＤ論理ゲート306は、ＤＳインジケータ281によって維持されたDS信号315を最終的に消滅するDEASSERT_DS信号309を生成する。図７で示すように、DEASSERT_DS信号309が、ＤＳインジケータ281によってを生じたDS信号315を消滅するトランジスタ312に作用する。
【００９１】
ＤＳインジケータ281によるDS信号315の発生は、いつＡＲＢＳＬＯＴ48がその命令を実行しその結果に対応するデータ・アドレスを受け取るかを示すDONE信号239の生成に影響する。これについて、ＡＮＤ論理ゲート243（図６）は、否定回路318でDS信号315の反転によって生成される-DS信号242、CAV信号245、-CP信号2461、-DM信号248、及びＨＩＴインジケータ206からHIT信号247によって、DONE信号239を生成する。DS信号315が発生されるとき、この信号は、ＤＣＡＣＨＥ24に対するアクセス要求からの依存するロード命令を防止する。
【００９２】
更に、ストア命令が引退メカニズム52のパイプを通じて、スムーズに実行されなかったため、ＡＲＢＳＬＯＴ48がデータを得るためにＤＣＡＣＨＥ24をもう一度アクセスするとき、ＡＲＢＳＬＯＴ48が、引退メカニズム52からHIT_RETRY信号322を受け取る。このHIT_RETRY信号322は、否定回路323を通じて、ＡＮＤ論理ゲート324へ渡される。ＡＮＤ論理ゲート324も、GRANT_+_2信号327を受け取る。ＤＣＡＣＨＥアクセスが与えられた後、２サイクルでHIT_RETRY信号322が受け取られるとき、ＡＮＤ論理ゲート324は信号325を発生する。信号325は、順番に、ＣＰインジケータ327から作用するトランジスタ326に作用する。ＰＣインジケータ327は、それぞれＡＲＢＳＬＯＴ48がＤＣＡＣＨＥ24をアクセスしたのか否かを示すCP信号246を消滅するか発生するために構成されるラッチか他の適当なロジック装置である。ＣＰインジケータ327は、論理ハイ・ボルテージ（high voltage）に接続され、UPDATE信号123によって作用するトランジスタ328によって、CP信号246を発生するためにセットされる。さらに、CP信号246は、DONE信号239を生成するＡＮＤ論理ゲート243に送出される-CP信号246'を生成するために、否定回路329に送出される。従って、HIT_RETRY信号322が発生するとき、-CP信号246'がＡＮＤ論理ゲート243に発生せず、DONE信号239が消滅する。
【００９３】
図８は、SIZE_MATCH信号267（図７）を生成する各ＡＲＢＳＬＯＴ48のサイズ一致決定ロジック326を示す。一般に、図８のロジック326は、ロード命令が、それらのそれぞれのデータ・サイズに基づくストア命令に依存するか否かを決定する。各命令と関連するデータは、次のサイズのいずれかである。１バイト（8ビット）、ハーフ・ワード（１６ビット）、１ワード（３２ビット）、又はダブル・ワード（６４ビット）。データ・アドレスの重複がある限り、データが異なるサイズのとき、ロード・データは記憶データに依存することができる。例えば、ロード・バイトが記憶ワードと重複するならば、ロード・バイトは、記憶ワードに依存する場合がある。また例えば、記憶バイトがロード・ハーフ・ワードの範囲内であるならば、ロード・ハーフ・ワードは、記憶バイトに依存する場合がある。
【００９４】
ＡＲＢＳＬＯＴ48の各々と対応するアドレスは、そのサイズを示すSIZE信号（例えば、２ビット）を含む。サイズの符号化を次に示す。「００」は１バイトを意味し、「０１」はハーフ・ワードを意味し、「１０」は１ワードを意味し、「１１」はダブル・ワードを意味する。
【００９５】
図８において、SIZE_MATCHメカニズム326は、開始命令に対応するREMOTE_ADDR[62]信号331と、ローカル命令に対応するLOCAL_ADDR[62]信号256a、334とを受け取るＸＯＲ論理ゲート328を含む。これらの信号に基づいて、ＸＯＲ論理ゲート328が、これらのアドレス・ビットが一致するか否かを示す信号332を生成する。
【００９６】
ＮＡＮＤ論理ゲート334が、遠隔発生信号と対応しているREMOTE_SIZE[0]信号333と、ローカル命令と対応しているLOCAL_SIZE[0]信号335とを受け取り、これらの１つ又は両方のアドレスがハーフ・ワード・サイズより大きいサイズで発生したことを示す信号336を生成する。よって、オーバーラップ（重複）オペレーションは、これらの命令のアドレス・ビット[63,62]の一致を必要としない。
【００９７】
ＸＯＲ論理ゲート338が、遠隔発生信号と対応しているREMOTE_ADDR[63]信号339と、ローカル命令と対応しているLOCAL_ADDR[63]信号342とを受け取り、これらのアドレス・ビットが一致するか否かを示す信号346を生成する。
【００９８】
ＮＡＮＤ論理ゲート348が、遠隔発生信号と対応しているREMOTE_SIZE[1]信号352と、ローカル命令と対応しているLOCAL_SIZE[1]信号354とを受け取り、これらの１つ又は両方のアドレスが１バイト・サイズより大きいサイズで発生したことを示す信号356を生成する。よって、オーバーラップ（重複）オペレーションは、この命令のアドレス・ビット[63]の一致を必要としない。
【００９９】
ＡＮＤ論理ゲート358は、信号332、336受け取って、それらの信号から、アドレス・ビット[62]が一致しないことを示す信号362を生成する。
【０１００】
ＡＮＤ論理ゲート364が、信号346、356受け取って、それらの信号から、アドレス・ビット[63]が一致するか否かを示す信号366を生成する。
【０１０１】
ＮＯＲ論理ゲート368が、信号362、366受け取って、SIZE_MATCH信号267を生成する。この信号により、最適な比較ができるようにデータ・サイズが一致する。
【０１０２】
サイズ一致決定メカニズム326（図８）と同様に、ＳＴ／ＬＤハザード分解システム252（図７）の全体的なオペレーションを以下に説明する。
【０１０３】
ストア命令が開始されローカルＡＲＢＳＬＯＴ48内でロード命令と一致するとき、ストア命令よりロード命令が新しいかどうかが確認される。ロード命令がストア命令より新しくない場合、なにも起きない。ロード命令がストア命令より新しい場合、ロード命令が実行されていれば、ST/LD_HAZARD信号124が発生し、ロード命令が実行されていないならば、ＤＳインジケータが発生する。
【０１０４】
ロード命令が開始され他のＡＲＢＳＬＯＴ48内でストア命令と一致するとき、ストア命令を持っているＡＲＢＳＬＯＴ48は、ロード命令を持っているＡＲＢＳＬＯＴ48の中で、DS信号315を発生させる。
【０１０５】
他のＡＲＢＳＬＯＴ48の中で一致するストア命令が引退するとき、ＤＳインジケータ281によって発生し消滅するDS信号315は、ＡＲＢＳＬＯＴ48の中のロード命令によってクリアされる。DSインジケータがＡＲＢＳＬＯＴ48で消滅するとき、ＡＲＢＳＬＯＴ48は、ＤＣＡＣＨＥ 24をアクセスできるようになる。
【０１０６】
本願発明は、例として次の実施態様を含む。
（１）プロセッサの順序外命令の実行で生じた不正確な結果から回復するためのシステムであって、前記プロセッサに接続され、命令を読出すフェッチ・メカニズムと、前記プロセッサに接続され、前記命令を前記フェッチ・メカニズムから受け取り、前記命令を順序外で実行する再処理メカニズムと、前記再処理メカニズムに接続され、前記再処理メカニズムの命令の構造的に不正確な実行を認識し、前記実行の後、前記命令をパニック・トラップ・インジケータと関連付けるパニック・トラップ論理手段と、前記再処理メカニズムと前記フェッチ・メカニズムに接続され、前記再処理メカニズムを消去し、前記フェッチ・メカニズムに再読出しをさせ、前記パニック・トラップ・インジケータに基づいて前記命令を開始するトラップ・ベクトル・ゼネレータと、を有する前記システム。
（２）前記パニック・トラップ論理手段が、ロード命令がストア命令より先に実行される場合と前記ロード命令が前記ストア命令によって供給されるデータに依存する場合とを決定し、前記決定に基づいて前記パニック・トラップインジケータを発生する依存論理手段を有する、（１）記載のシステム。
（３）更に、命令が、可干渉性チェック信号に基づいて転送されるデータを必要とする場合を決定するハザード論理手段を有する（１）記載のシステム。
（４）前記フェッチ・メカニズムが前記パニック・トラップ・インジケータと前記命令の１つとを関連付ける手段を有する（１）記載のシステム。
（５）更に、前記命令の１つがデータ・キャッシュへのアクセスの結果パリティ・エラーを生じたことを検出し、前記パニック・トラップ・インジケータと前記命令を関連付ける手段を有する（１）記載のシステム。
【０１０７】
（６）順序外命令を実行するプロセッサにおいて、不正確な実行結果を生じる命令から回復するシステムであって、前記プロセッサに接続され、命令を読出し、パニック・トラップ・インジケータと再実行される命令とを関連付けるフェッチ・メカニズムと、前記プロセッサに接続され、前記命令を前記フェッチ・メカニズムから受け取り、前記命令を順序外で実行する再処理メカニズムと、前記再処理メカニズムと前記フェッチ・メカニズムに接続され、命令の実行後に該命令を受け取り、前記再処理メカニズムを消去し、前記フェッチ・メカニズムに前記パニック・トラップ・インジケータに基づいて前記命令を順番に再読出しをさせるトラップ・ベクトル・ゼネレータと、を有する前記システム。
【０１０８】
（７）順序外命令を実行するプロセッサに接続されたデータ・キャッシュによって発生したパリティ・エラーから回復するためのシステムであって、命令を読出すフェッチ・メカニズムと、前記命令を前記フェッチ・メカニズムから受け取り、前記命令を順序外で実行し、前記データ・キャッシュへアクセスする再処理メカニズムと、アクセス中にパリティ・エラーが発生したことを検知し、アクセスによってパリティ・エラーが生じたときパニック・トラップ・インジケータを生成するデータ・キャッシュと、実行後に前記命令を引退させるタイミングを操作し、前記パニック・トラップ・インジケータを認識し、前記再処理メカニズムを消去し、前記フェッチ・メカニズムに再読出しをさせるパニック・トラップゼネレータと、を有する前記システム。
【０１０９】
（８）プロセッサにおいて、順序外命令の実行で生じた不正確な結果から回復するための方法であって、再処理メカニズムに命令を集めるステップと、前記命令を順序外で実行するステップと、命令の構造的に不正確な実行を認識するステップと、前記命令に応じて前記不正確な命令を示すパニック・トラップ・インジケータを発生するステップと、実行後前記命令を引退させる場合、前記パニック・トラップ・インジケータ認識し、前記再処理メカニズムを消去し、無効命令を順に再読出しするステップと、を有する前記方法。
【０１１０】
（９）順序外命令を実行するプロセッサにおいて、不正確な実行結果を生じる命令から回復する方法であって、命令を読出すステップと、前記読出し中に、命令が無効であることを決定するステップと、パニック・トラップ・インジケータと前記無効命令とを関連付けるステップと、前記無効命令を他の命令と共に再処理メカニズムへ配置するステップと、前記命令を前記再処理メカニズムの中で順序外に実行するステップと、実行後に前記命令を引退させる場合、パニック・トラップ・インジケータを認識し、前記再処理メカニズムを消去し、前記無効命令を順番に再読出しするステップと、を有する前記方法。
（１０）順序外命令を実行するプロセッサに接続されたデータ・キャッシュによって発生したパリティ・エラーから回復するための方法であって、再処理メカニズムに命令を集めるステップと、前記命令を順序外で実行するステップと、前記キャッシュにアクセスする命令を実行するステップと、前記アクセス中にパリティ・エラーが発生したことを検知するステップと、前記プロセッサにおいて、前記データ・キャッシュからトラップ・ベクトル・ゼネレータへパニック・トラップ・インジケータを生成して転送するステップと、を有する前記方法。
【０１１１】
【発明の効果】
本発明によると、命令の順序外実行から生成された不正確な結果からプロセッサを回復するのに使われ、更には、タイミングと同期を図るパニック・トラップ・システム及び方法を提供することができる。
【図面の簡単な説明】
【図１】本発明の新しいパニック・トラップ・システム及び方法を実行するコンピュータを示すブロック図である。
【図２】図１のプロセッサの命令読出／実行システムの実行処理を示すブロック図である。
【図３】図１の新しいパニック・トラップ・システムの実行処理を示すブロック図である。
【図４】図３の各アドレス・リオーダ・バッファ・スロット（ＡＲＢＳＬＯＴ）中のパニック・インジケータを発生するトラップ・インジケータ・ロジックの実行処理を示すブロック図である。
【図５】図３の引退メカニズム（ＲＥＴＩＲＥ）の実行処理を示すブロック図である。
【図６】図４のハザード信号CCC_HAZARD（最終的にパニック・トラップ）を生成するためのキャッシュ可干渉性チェック（ＣＣＣ）システムを示すブロック図である。
【図７】図４のハザード信号ST/LD_HAZARD（最終的にパニック・トラップ）を生成するための記憶／ロード（ST/LD）ハザード分解システムの実行処理を示すブロック図である。
【図８】図７の信号SIZE_MATCHを生成するサイズ・マッチ決定メカニズムの実行処理を示すブロック図である。
【符号の説明】
１２    命令読出／実行システム
２４    データ・キャッシュ
２６    命令キャッシュ
２８    命令フェッチ・メカニズム
３２    ソート・メカニズム
３８ａ  ＡＬＵ待ち行列
３８ｂ  メモリ待ち行列
４２    算術演算論理装置
４８    アドレス・リオーダ・バッファ・スロット
５２    引退メカニズム
【図１】
0003715057.tif 000002
【図２】
0003715057.tif 000003
【図３】
0003715057.tif 000004
【図４】
0003715057.tif 000005
【図５】
0003715057.tif 000006
【図６】
0003715057.tif 000007
【図７】
0003715057.tif 000008
【図８】
0003715057.tif 000009