(57)【特許請求の範囲】
【請求項１】
命令アドレスに従って命令コードを記憶すると共に、オペランドを記憶するメモリと、
複数の命令をシーケンスにより処理する複数の段を有する命令実行パイプラインと
を備えたマイクロプロセッサにおいて、前記複数の段は、
フェッチ・アドレスにより前記メモリをアドレス指定して命令コードを読み出し、前記命令のパイプラインに供給するフェッチ・ユニットと、
複数の命令を実行する少なくとも一つの実行ユニットと、
前記実行ユニットからの結果を行き先書き込みアドレスにより前記メモリに書き込む第１のロード／記憶ユニットと、
前記フェッチ・ユニット及び前記第１のロード／記憶ユニットに接続された自己変更コード検出回路と
を備え、前記自己変更コード検出回路は、
最低フェッチ・アドレス値を記憶する最小ラッチと、
最高フェッチ・アドレス値を記憶する最大ラッチと
前記行き先書き込みアドレスを前記最小ラッチ及び前記最大ラッチの内容と比較し、かつ前記行き先書き込みアドレスが前記最低フェッチ・アドレス値より大きい又は等しい、及び前記最高フェッチ・アドレス値より小さい又は等しいことに応答して、フラッシュ信号を前記命令実行パイプラインに対して発生する第１の書き込み比較器と、
前記フェッチ・アドレスを前記最小ラッチの内容と比較する第１の更新比較器と、
前記フェッチ・アドレスを前記最大ラッチの前記内容と比較する第２の更新比較器と、
前記第１及び第２の更新比較器に接続され、前記フェッチ・アドレスは前記最小ラッチに記憶されている前記最低フェッチ・アドレス値より小さいことを前記第１の更新比較器が判断したことに応答して、前記フェッチ・アドレスを記憶するように前記最小ラッチを制御し、かつ前記フェッチ・アドレスは前記最大ラッチに記憶されている前記最高フェッチ・アドレス値より大きいことを前記第２の更新比較器が判断したことに応答して、前記フェッチ・アドレスを記憶するように前記最大ラッチを制御する制御回路と
を備えたマイクロプロセッサ。
【請求項２】
前記制御回路は、更に、パイプライン・フラッシュに応答して、ハイ・メモリ・アドレス限界を記憶するように前記最小ラッチと、ロー・メモリ・アドレス限界を記憶するように最大ラッチとの両方を制御するためのものである請求項１に記載のマイクロプロセッサ。
【請求項３】
前記メモリは、
前記フェッチ・ユニットからのフェッチ・アドレスに対応する位置に命令コードを記憶する命令メモリと、
オペランドを記憶するデータ・メモリとを備えた請求項１に記載のマイクロプロセッサ。
【請求項４】
前記第１の書き込み比較器は、前記フェッチ・ユニットと前記第１のロード／ストア・ユニットとに接続され、かつ、
前記行き先書き込みアドレスを前記最小ラッチの内容と比較する第１の窓比較器と、
前記行き先書き込みアドレスを前記最大ラッチの内容と比較する第２の窓比較器と、
前記第１の窓比較器が、前記行き先書き込みアドレスは前記最低フェッチ・アドレス値より大きい又は等しいと判断したことと、前記第２の窓比較器が、前記行き先書き込みアドレスは前記最高フェッチ・アドレス値より小さい又は等しいと判断したこととの組合わせに応答して、前記フラッシュ信号を発生する比較器制御回路と、
前記フェッチ・アドレスを前記行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記行き先書き込みアドレスと一致することに応答して、現在の競合信号を発生する第１の等価比較器と、
未だ完了していない前記第１のロード／ストア・ユニットによる書き込み動作のために第１の保留行き先アドレスを記憶する第１の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記第１の保留行き先アドレスと比較し、かつ前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致することに応答して、第１の保留競合信号を発生する第２の等価比較器と、
前記第１及び第２の等価比較器に接続され、前記現在の競合信号か又は前記第１の保留競合信号に応答して、フラッシュ信号を発生する例外制御回路とを備えた請求項１に記載のマイクロプロセッサ。
【請求項５】
更に、
前記実行ユニットからの結果を行き先書き込みアドレスにおける前記メモリに書き込む第２のロード／ストア・ユニットと、
前記フェッチ・ユニットと前記第２のロード／ストア・ユニットとに接続された第２の書き込み比較器と
を備え、
前記行き先書き込みアドレスを前記最小ラッチの内容と比較する第１の窓比較器と、
前記行き先書き込みアドレスを前記最大ラッチの内容と比較する第２の窓比較器と、
前記第１の窓比較器が、前記行き先書き込みアドレスは前記最低フェッチ・アドレス値以上と判断したことと、前記第２の窓比較器が、前記行き先書き込みアドレスは前記最高フェッチ・アドレス値以下と判断したこととの組合わせに応答して、前記フラッシュ信号を発生する比較器制御回路と、
前記フェッチ・アドレスを前記行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記行き先書き込みアドレスと一致することに応答して、前記現在競合信号を発生する第１の等価比較器と、
未だ完了していない前記第１のロード／ストア・ユニットによる書き込み動作のために第１の保留行き先書き込みアドレスを記憶する第１の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記第１の保留行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致することに応答して、第１の保留競合信号を発生する第２の等価比較器と、
前記第１及び第２の等価比較器に接続され、前記現在の競合信号か又は前記第１の保留競合信号に応答して、フラッシュ信号を発生する例外制御回路と
を備えた請求項４に記載のマイクロプロセッサ。
【請求項６】
更に、
前記第１及び第２の書き込み比較器に接続された共有書き込み比較器と、
前記第１及び第２の書き込み比較器からの保留行き先書き込みアドレスを選択する選択回路と、
前記選択された保留行き先書き込みアドレスを記憶する第２の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記記憶し選択した保留行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記記憶し選択した保留行き先書き込みアドレスと一致することに応答して、第２の保留競合信号を発生する共有等価比較器と、
前記第３の等価比較器に接続され、前記第２の保留競合信号を受け取ることに応答して、フラッシュ信号を発生する共有制御回路と
を備えた請求項５に記載のマイクロプロセッサ。
【請求項７】
更に、
一方側を前記命令実行パイプラインと前記メモリとに接続され、かつ前記他方側を外部バスに接続されたバス・インターフェイスと、
前記外部バスに接続された外部サブシステムと
を備えた請求項４に記載のマイクロプロセッサ。
【請求項８】
自己変更コードの競合を検出するようにマイクロプロセッサを動作させる方法において、
命令を実行するステップと、
前記実行するステップの結果をメモリに書き込む書き込みアドレスを発生するステップと、
前記書き込みアドレスを最小フェッチ・アドレス及び最大フェッチ・アドレスと比較するステップであって、前記最小フェッチ・アドレスがパイプライン・フラッシュ以後に受け取った複数の命令のための最低フェッチ・アドレスに対応し、かつ前記最大フェッチ・アドレスが前記パイプライン・フラッシュ以後に受け取った複数の命令のための最高フェッチ・アドレスに対応している前記比較するステップと、
前記比較するステップに応答して、前記書き込みアドレスが共に前記最小フェッチ・アドレス以上、及び前記最高フェッチ・アドレス以下であることを判定するステップと、
現在のフェッチ・アドレスを発生して前記マイクロプロセッサが実行する命令コードをフェッチするステップと、
前記現在のフェッチ・アドレスを前記最小フェッチ・アドレスと比較するステップと、
前記フェッチ・アドレスが前記最小フェッチ・アドレスより小さいことに応答して、前記最小フェッチ・アドレスを前記現在のフェッチ・アドレスに等しく設定するステップと、
前記現在のフェッチ・アドレスを前記最大フェッチ・アドレスと比較するステップと、
前記フェッチ・アドレスが前記最大フェッチ・アドレスより大きいことに応答して、前記最大フェッチ・アドレスを前記現在のフェッチ・アドレスに等しく設定するステップと
を備えた前記方法。
【請求項９】
前記パイプライン・フラッシュを開始させるステップは、
例外信号を発生させるステップと、
前記例外信号に応答して、前記パイプラインをフラッシュさせるステップと
を含む請求項８に記載の方法。
【請求項１０】
更に、
現在のフェッチ・アドレスを発生して前記マイクロプロセッサが実行する命令コードをフェッチさせるステップと、
前記現在のフェッチ・アドレスを前記書き込みアドレスと比較するステップと、
前記比較ステップに応答して、前記現在のフェッチ・アドレスが前記書き込みアドレスと一致するということを判定し、パイプライン・フラッシュを開始させるステップと
を備えた請求項８に記載の方法。
【請求項１１】
未だ完了してない書き込み動作の行き先メモリアドレスに対応する少なくとも一つの保留書き込みアドレスを記憶するステップと、
前記現在のフェッチ・アドレスを前記少なくとも一つの保留書き込みアドレスのそれぞれと比較するステップと、
前記比較するステップに応答して、前記現在のフェッチ・アドレスが少なくとも一つの保留書き込みアドレスと一致するということを判定し、パイプライン・フラッシュを開始させるステップと
を備えた請求項１０に記載の方法。
【請求項１２】
前記パイプライン・フラッシュを開始させるステップは、
前記保留書き込みアドレスに対応する前記書き込み動作を完了させるステップと、
次いで前記現在のフェッチ・アドレスに対応するメモリ位置から命令コードをフェッチし、前記マイクロプロセッサにより実行させるステップと
を備えた請求項１１に記載の方法。
【請求項１３】
更に、
前記比較するステップの前に第２の命令の実行を開始するステップを備え、かつ前記開始するステップは、更に、
前記フェッチ・ステップの前に、前記第２の命令の実行を完了させるステップを備えた請求項１２に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサ集積回路自己変更プログラムを実行できるパイプライン型マイクロプロセッサの分野に係る。
【０００２】
【従来の技術】
最近のマイクロプロセッサは、いわゆるパイプライン・アーキテクチャにより構築される。パイプライン・マイクロプロセッサでは、多重シーケンス・プログラム命令が実行及び書き込みにより命令フェッチによる種々の実行段階で同時に処理される。換言すれば、前の命令の実行を完了する前に、（プログラム順において）後の命令がフェッチされる。パイプラインのために、個々の命令のそれぞれが実行及び書き込みを介してのフェッチによる処理のために、多くのマシン・サイクルを必要とすることがあっても、命令をマイクロプロセッサが実行する実効速度は、単一パイプライン・マイクロプロセッサにおける１命令／マシン・サイクルに近付けることができる。いわゆるスーパスカラ・アーキテクチャは並行して動作する多重パイプラインを効果的に備え、理論的に高いパフォーマンス・レベルさえも提供する。
【０００３】
普及している多くのプロセッサは、ユーザに「自己変更コード（ｓｅｌｆ−ｍｏｄｉｆｙｉｎｇ  ｃｏｄｅ）」の使用を許容することにより、高いレベルのプログラミング柔軟性を提供している。自己変更コードとは、プログラム命令がプログラムそれ自身により変更されるプログラミング技術を云う。換言すれば、プログラムの実行結果は、その結果の書き込みを介してプログラムにおいて後の命令の命令コードを変更することができる。従って、自己変更コードは、マイクロプロセッサに基づくコンピュータ・プログラムにおいてプログラマに高度の柔軟性を提供する。自己変更コード技術は、その使用により得られる高いプログラム効率のために、近年普及して来た。
【０００４】
【発明が解決しようとする課題】
変更されようとしているプログラム命令がメモリに存在し、かつパイプラインに未だ入っていない限り、最近のプロセッサにとってプログラム命令の変更は困難なことではない。しかし、一般に、「ｘ８６−アーキテクチャ・マイクロプロセッサ」と呼ばれているマイクロプロセッサのように、ごく最近のマイクロプロセッサはパイプラインにおける命令の変更を避けるために、どのような種類であっても「直列化」又は「同期」命令なしに、何時、どのような命令の変更も可能にする。従って、これらのマイクロプロセッサは、変更が発生した時点で自己変更の目標である命令が既にパイプラインに入ったか否かを検出すると共に、命令を変更したもの（オリジナルのものではない）が実際に実行されたコードであることを保証するように操作を行う能力を有する必要がある。そうでなければ、誤った命令の実行によりプログラム・エラーが発生する結果となる。
【０００５】
通常のマイクロプロセッサは、パイプラインにフェッチされた各命令に対する命令アドレスのコピーを記憶したテーブルを使用することにより、この機能を実現している。各書き込みの行き先アドレスはテーブルにおける各エントリと比較されて、書き込みはパイプラインにおける命令に対する変更であるか否かが判断される。イエスならば、パイプラインはフラッシュされ、前記命令コードが変更され、かつ変更命令を用いて実行が再開される。しかし、本発明に関連して、重要なチップ面積及び他のリソースは、このようなテーブルの実施により、特に４若しくはそれより多くのパイプラインが配置されたスーパスカラ・アーキテクチャにより、及び特に７若しくはそれより多くの段を有する深いパイプラインにより消費されることが観察されていた。
【０００６】
【課題を解決するための手段】
本発明は、最小及び最大フェッチ・アドレス・レジスタを有する検出回路により、自己変更コード機能を有するマイクロプロセッサに実施されてもよい。最小及び最大フェッチ・アドレス・レジスタは、最後のパイプライン・フラッシュ以後にフェッチされた命令の最高及び最低線形アドレスを記憶し、かつ各フェッチにより適当に更新される。書き込み段階において、書き込み動作の行き先アドレスは、前記レジスタに記憶された最小及び最大フェッチ・アドレスと比較されて、パイプラインにおける命令が多分、書き込みの行き先であるか否かを判断し、もしイエスであれば、パイプラインがフラッシュされ、書き込みが実行され、かつプログラムの実行が再開される。
【０００７】
本発明の他の特徴によれば、マイクロプロセッサは一連の書き込みを待ち行列にして動作することができので、実行が書き込みにおける待機のために停止することはない。全ての保留及び待ち行列にされた書き込みに関する行き先アドレスは、一連の書き込みアドレス・レジスタに記憶される。各命令のアドレスは、フェッチ時に書き込みアドレス・レジスタの内容と比較されて、実行した命令の結果による変更前に、メモリからの命令フェッチを検出する。コードの変更及び適正なプログラム・シーケンスの再開を可能にさせるために、このような検出があったときは、例外（ｅｘｃｅｐｔｉｏｎ）が発行される。
【０００８】
本発明の目的は、最小のオーバヘッド・ハードウエアをもって、パイプラインにおける命令による自己変更コードの競合を検出する機能を備えたマイクロプロセッサを提供することにある。
【０００９】
本発明の目的は、更に、完了したが、未だ書き込まれていない書き込みと、新しくフェッチされた命令との間の自己変更コードの競合を阻止するマイクロプロセッサを提供することにある。
【００１０】
本発明の目的は、更に、競合検出処理において実行されるアドレス比較がプロセッサ・パフォーマンスに実質的に影響しないマイクロプロセッサを提供することにある。
【００１１】
本発明の目的は、更に、比較のハードウエア・オーバヘッドを最小化するマイクロプロセッサを提供することにある。
【００１２】
本発明の他の目的及び効果は、その図面と共に以下の詳細な説明を参照することにより、当該技術分野において通常に習熟する者にとって明らかとなる。
【００１３】
【発明の実施の形態】
ここで、図１を参照し、スーパスカラ・パイプライン・マイクロプロセッサ（以下、単に「マイクロプロセッサ」という）１０を含み、本発明の好ましい実施例により構築された例示的なデータ処理システム２を説明する。ここでは、種々のアーキテクチャのマイクロプロセッサ及びシステムにおいて本発明を用いることができることを意図しているので、単なる例としてデータ処理システム２及びマイクロプロセッサ１０のアーキテクチャを説明していることを理解すべきである。従って、この明細書を参照すれば、当該技術分野において通常に習熟する者がこのような他のマイクロプロセッサ・アーキテクチャに本発明を容易に実施できることを意図している。更に、本発明は、シリコン基板、シリコン・オン・インシュレータ、ガリウムひ素、及び他の製造技術により達成され、かつＭＯＳ、ＣＭＯＳ、バイポーラ、ＢｉＭＯＳ、他のデバイス実施を用いた集積回路の製造者により、シングル・チップ・マイクロプロセッサ及び複数のマイクロプロセッサにより、又はマルチ・チップ実施により実現できることを意図している。
【００１４】
マイクロプロセッサ１０は、図１に示すように、外部バスＢＵＳにより他のシステム装置に接続される。この例では外部バスＢＵＳがシングル・バスとして示されているはいえ、外部バスＢＵＳは、勿論、例えばＰＣＩローカル・バス・アーキテクチャを利用した通常コンピュータにおいて知られているように、異なる速度及びプロトコルを有する多重バスを表し得ることを意図している。データ処理システム２は、通信ポート３（複数のモデム・ポート及び複数のモデム、複数のネットワーク・インターフェイス等を含む）、グラフィック・ディスプレイ・システム４（ビデオ・メモリ、複数のビデオ・プロセッサ、グラフィック・モニタを含む。）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）により典型的に実施されるメイン・メモリ・システム５、入力装置６（キー・ボード、ポィンティング装置、及びそれに対するインターフェイス回路を含む。）、及びディスク・システム８（複数のハードディスク・ドライブ、複数のフロッピー・ディスク・ドライブ、及び複数のＣＤ−ＲＯＭドライブを含み得る。）のような通常のサブシステムを含む。従って、図１のデータ処理システム２は、当該技術分野において現在は一般化している通常のデスクトップ・コンピュータ又はワークステーションに対応することを意図している。勿論、当該技術分野に習熟する者により認識されるように、マイクロプロセッサ１０の他のシステム実施も本発明により利益を得ることができる。
【００１５】
マイクロプロセッサ１０は、外部バスＢＵＳに接続されたバス・インターフェイス・ユニット（ＢＩＵ）１２を含み、マイクロプロセッサ１０とデータ処理システム２における外部要素との間で制御をし、かつ通信を行う。ＢＩＵ１２は、このような機能を実行するために適当な制御及びクロック回路を含むと共に、動作の速度を増加させる書き込みバッファ、及び内部のマイクロプロセッサの動作の結果を外部バスＢＵＳと同期させるタイミング回路を含む。マイクロプロセッサ１０は、更に、システム・クロックＳＹＳＣＬＫに基づきクロック位相を発生するクロック発生及び制御回路２０を含む。この例において、クロック発生及び制御回路２０は、外部バスＢＵＳ上のバス動作用の制御クロック信号であるバス・クロックＢＣＬＫと、マイクロプロセッサ１０の内部動作用の制御クロック信号であるコア・クロックＰＣＬＫとを発生する。
【００１６】
図１から明らかなように、マイクロプロセッサ１０は、３レベルの内部キャッシュ・メモリを有し、レベル２キャッシュ１１としてそのうちの最高レベルのものは内部バスによりＢＩＵ１２に接続されている。この例において、レベル２キャッシュ１１は統合されたキャッシュであって、マイクロプロセッサ１０により提供されるバス・トラフィックの大部分がレベル２キャッシュ１１を介して行われるように、ＢＩＵ１２を介する外部バスＢＵＳからの全てのキャッシュ可能データ及びキャッシュ可能命令を受け取る構成である。勿論、マイクロプロセッサ１０は、更に、「キャッシュ不能」として一定のバス読み出し及び書き込みを処理することにより、キャッシュ１１周辺のバス・トラフィックを実行することができる。レベル２キャッシュ１１は、図１に示すように、２レベル１キャッシュ１６に接続されている。即ち、レベル１キャッシュ１６。はデータに割り付けられ、一方レベル１キャッシュ１６ｉは命令に割り付けられている。マイクロキャッシュ１８は、この例では、完全二重ポートのレベル０である。
【００１７】
マイクロプロセッサ１０は、図１に示すように、スーパスカラ形式のものであり、従って多数の実行ユニットを含む。これらの実行ユニットは条件分岐、整数及び論理操作を処理する２つのＡＬＵ４２０、ＡＬＵ４２１と、浮動少数点ユニット（ＦＰＵ）３１と、２つのロードーストア・ユニット４００、４０１と、マイクロシーケンサ４８とを含む。２つのロードーストア・ユニット４０はこれに対する真の並列アクセスのためにマイクロキャッシュ１８の２ポートを使用し、更にレジスタ・ファイル３９におけるレジスタに対するロード及びストア操作を実行する。データ・マイクロ変換ルックアサイド・バッファ（μＴＬＢ：Ｄａｔａ  ｍｉｃｒｏｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）３８は、通常の方法により、論理データ・アドレスを物理アドレスに変換するために設けられている。
【００１８】
これら多数の実行ユニットは、それぞれ書き込みを有する７段の多重パイプラインにより制御される。これらのパイプライン段は以下のようである。
Ｆ      フェッチ：この段は命令アドレスを発生し、かつ命令キャッシュ又はメモリから命令を読み出す。
ＰＤ０  プリデコード段０：この段は、３フェッチｘ８６形式の命令までの長さ及び開始位置を決定する。
ＰＤ１  プリデコード段１：この段は、ｘ８６命令バイトを取り出し、これらをデコードのために固定長フォーマットに記録する。
ＤＣ    デコード：この段はｘ８６命令を複数の原子的動作（ａｔｏｍｉｃ  ｏｐｅｒａｔｉｏｎｓ，ＡＯｐ）に変換する。
ＳＣ    計画：適当な実行ユニット（ＦＰＵ３１を含む）に対して４ＡＯｐまで割り付ける。
ＯＰ    オペランド：この段はＡＯｐにより表されたレジスタ・オペレータを検索する。
ＥＸ    実行：この段はＡＯｐ及び検索したオペランドに従って実効ユニットを作動させる。
ＷＢ    書き戻し：この段はレジスタ又はメモリにおける実行結果を記憶する。
【００１９】
図１を参照すると、前述した複数のパイプライン段はマイクロプロセッサ１０内の種々の機能ブロックにより実行される。フェッチ・ユニット２６は、レベル１命令キャッシュ１６ｉに適用するために、命令マイクロ変換ルックアサイド・バッファ（μＴＬＢ）２２により、命令ポインタから複数の命令アドレスを発生する。フェッチ・ユニット２６は、当該技術分野において通常の方法により実施されてもよく、又は例えば本願と共通に譲受され、１９９５年１０月３１日に出願された米国仮出願第６０／００８，１６８号に説明されているように、分岐予測において付加的な機能の有用性を含むものでもよく、ここではこの引用により関連される。命令キャッシュ１６ｉは命令データ・ストリームをフェッチ・ユニット２６に対して発生し、フェッチ・ユニット２６が続いて命令コードを所望のシーケンスによりプリデコード０段２８及びプリデコード１段３２に供給する。これらの２段は、独立したパイプライン段として動作し、かつ相互に３ｘ８６命令まで設けるように動作し、かつこれらをデコード・ユニット３４に供給する。プリデコード０段２８は３可変長ｘ８６命令と同程度の大きさ及び位置を判断し、一方プリデコード１段３２はデコード処理を容易にするために多重バイト命令を固定長フォーマットに記録する。この例において、デコード・ユニット３４は、４命令デコーダを含み、それぞれはプリデコード１段３２から固定長のｘ８６命令を受け取って、ＲＩＳＣ命令にぼぼ等価な１〜３原子的操作（ＡＯｐ）を発生することができる。スケジューラ３６はデコード・ユニット３４の出力におけるデコード・キューから４ＡＯｐまで読み出して、これらのＡＯｐを適当な実行ユニットに割り付ける。オペランド・ユニット４４はスケジューラ３６から、更にマルチプレクサ４５を介してマイクロコードＲＯＭ４６から入力を受け取り、かつレジスタ・オペランドをフェッチして命令の実行に用いる。加えて、この例によれば、オペランド・ユニット４４は、更にオペランド転送を実行して受け入れ可能状態にあるレジスタに結果を送出して記憶させ、更にロード及び記憶形式のＡＯｐのためにアドレス発生を実行する。
【００２０】
マイクロシーケンサ４８及びマイクロコードＲＯＭ４６は、マイクロコード・エントリＡＯｐの実行においてＡＬＵ４２及びロードーストア・ユニット４０を制御し、これらは１サイクルにおいて実行するように通常、最終ＡＯｐである。この例において、マイクロシーケンサ４８は、マイクロコードＲＯＭ４６に記憶されるマイクロ命令をシーケンスに配列し、複雑な又はまれに用いるｘ８６命令、セグメント又は制御レジスタを修飾するｘ８６命令、例外の取り扱い、及び多重サイクル命令（例えば、ＲＥＰ命令、及び全てのレジスタをＰＵＳＨ及びＰＯＰする命令）のようなマイクロコード化されたマイクロ命令に応答して、制御を実行させる。
【００２１】
マイクロプロセッサ１０は、更に、ＪＴＡＧスキャン・テスト及び一定のビルト・イン・セルフ・テスト（ＢＩＳＴ）機能の動作を制御して、製造完了により及びリセット及び他の事象によりマイクロプロセッサ１０の動作の有効性を確認する回路２４を含む。
【００２２】
本発明の実施例によれば、マイクロプロセッサ１０は更に自己変更コード（ＳＭＣ）ユニット５０を含み、変更時に実行ユニットのうちの一つにより、パイプラインに存在し得る命令の命令コードを潜在的な変更例を検出し、かつ取り扱う制御回路である。本発明の実施例のために図１に示すように、ＳＭＣユニット５０は、ラインＦＡを介してフェッチ・ユニット２６からフェッチ・アドレスを受け取るように、更にロード／ストア・ユニット４０から書き込みアドレスを受け取るように、接続されている。ＳＭＣユニット５０は、例外を実行するためにスケジューラ３６に制御ライン出力を供給している。本発明の好ましい実施例によれば、例外を用いて自己変更コード（ＳＭＣ）の検出の際に、変更した命令をメモリから検索して実行すると共に、変更した命令の旧いものを実行しないことを保証する。例外取り扱い機構は、コード変更を開始させる動作に実行を完了できるようさせる、又はこれに代わって、コード変更を開始した命令が実行を既に完了した場合に、実行している命令又は複数の命令に実行を完了できるようにさせる。いずれの場合でも、例外は命令パイプラインをフラッシュさせることになり、また次の命令のアドレスで命令パイプラインがリスタートされて実行される。
【００２３】
当該技術分野においていくつかのクラスの例外が知られている。例えば、フォールトは、現在の原子的操作（ＡＯｐ）の完了により、直ちに実行を停止させる例外である。トラップは、トラップを知らせる命令がよりも（プログラム順序において）遅いパイプラインにおける全ての命令の完了を阻止させる要求である。割り込みは、発行されたときに、現在実行中でない全て命令の完了を阻止させる特殊型式のトラップである。従って、割り込みはパイプラインにおける特定命令に関連されない。本発明は、これら形式のうちの一任意形式の例外を用いることにより実施されてもよいことを意図しており、従って用語「例外」は、可能な自己変更コードの競合を検出することにより、命令パイプラインのフラッシングを開始させる事象及び要求を指すために、以下の説明において用いられる。しかし、以下の説明から明らかとなるように、マイクロプロセッサ１０が順次実行マシン（ｉｎ−ｏｒｄｅｒ  ｅｘｅｃｕｔｉｏｎ  ｍａｃｈｉｎｅ）であることを考慮すると、本発明の実施例においてこれらのタップを使用すること（両者は命令の開始に関連し、また関連もしない）は好ましいことであり、トラップよりもフォールトを用いることは、順序通りでない処理に係わるアーキテクチャにとって好ましいと思われる。
【００２４】
ここで、図２を参照して、ＳＭＣユニット５０の構造を以下説明する。本発明の実施例によるＳＭＣユニット５０は、フェッチ・アドレス窓保守ユニット５２を含み、フェッチ・アドレス窓保守ユニット５２は、フェッチ・アドレスが有効であるときにラインＦＡＶを介して表すフェッチ・アドレス有効信号と共に、ラインＦＡを介してフェッチ・ユニット２６（図１に示す）からフェッチ・アドレスを受け取っている。以下で更に詳細に説明するように、フェッチ・アドレス窓保守ユニット５２は、最後のパイプライン・フラッシュ以後にフェッチされた命令に関する線形フェッチ・アドレスの範囲の表示を保持している。従って、このアドレス範囲はその時点でパイプラインに潜在的に存在するアドレスを識別することになり、逆にフェッチ・アドレス窓保守ユニット５２に記憶されたアドレス範囲外であるアドレスは、現在、パイプラインにおける命令に対応し得ない。フェッチ・アドレス窓保守ユニット５２は（ラインＬＡＳＴＦＡ上に）最終フェッチ・アドレス、（ラインＭＡＸＦＡ上に）最終フラッシュ以後にフェッチされた最高線形アドレス値、及び（ラインＭＩＮＦＡ上に）最終フラッシュ以後にフェッチされた最低アドレス値を表す出力を発生する。更に、フェッチ・アドレス窓保守ユニット５２は、フェッチ・アドレス窓保守ユニット５２が記憶したアドレス範囲をリセットすることに応答して、ラインＳＭＣＦＬＵＳＨを介してＳＭＣ例外発生器５６から信号を入力している。
【００２５】
ここで図３を参照して、フェッチ・アドレス窓保守ユニット５２の構造を以下詳細に説明する。フェッチ・アドレス窓保守ユニット５２は、ライン（信号）ＦＡからフェッチ・アドレスを受け取るように、かつ制御回路６８により最新値を記憶するように接続されたラッチ５８を含む。ラッチ６０は最終パイプライン・フラッシュ以後にフェッチされた最低命令アドレスを記憶し、ラインＭＩＮＦＡを介して書き込み比較器５４に供給する。同様に、ラッチ６２は最終パイプライン・フラッシュ以後にフェッチされた最高命令アドレスを記憶し、ラインＭＡＸＦＡを介して書き込み比較器５４に供給する。各ラッチ５８、６０、６２は制御回路６８からのロード信号により制御される。マルチプレクサ６１は、ラインＬＡＳＴＦＡを介してラッチ５８から最終フェッチ・アドレスと、好ましくは、マイクロプロセッサ１０のメモリ空間において最高アドレスである上限値（例えば、０ｘＦＦＦＦＦＦＦＦｈ）とを受け取り、かっその一方又は他方を線ＳＥＬＭＴを介する制御回路６８の制御により選択してラッチ６０に供給する。制御回路６８は、マルチプレクサ６１がパイプライン・フラッシュ又はマイクロプロセッサ１０のリセットにより上限値を選択するように制御して、その後の最初のフェッチの前にラッチ６０を初期化させる。同様に、マルチプレクサ６３もその一方の入力にラインＬＡＳＴＦＡを介してラッチ５８から最終フェッチ・アドレスを受け取り、かつその他方の入力に好ましくはマイクロプロセッサ１０のメモリ空間における最低アドレス（例えば、０ｈ）を受け取っている。同様に、マルチプレクサ６３は、ラインＳＥＬＭＴを介して制御回路６８からの信号により下限値を選択するように制御されて、パイプライン・フラッシュ又はマシン・リセット後における最初の命令フェッチ前にラッチ６２を初期化させる。
【００２６】
フェッチ・アドレス窓保守ユニット５２は、更に、比較器６４、６６を含み、それぞれはラインＬＡＳＴＦＡを介してラッチ５８から最終フェッチ・アドレスを受け取っている。より小さい比較器６４は、更に、ラッチ６０の内容をラインＭＩＮＦＡを介して受け取り、かつラインＬＡＳＴＦＡ上のアドレス値がラッチ６０に記憶されている、前にフェッチされた最低アドレス値より小さいことに応答して、制御回路６８に対して信号を発生する。同様に、より大きい比較器６６は、ラッチ６２の内容をラインＭＡＸＦＡを介して受け取り、かつラインＬＡＳＴＦＡ上のアドレス値がラッチ６２に記憶されている、前にフェッチされた最高アドレス値より大きいことに応答して、制御回路６８に対して信号を発生する。
【００２７】
制御回路６８は、より小さい比較器６４、６６から受け取る信号と、ラインＦＡ上に有効フェッチ・アドレスの存在を表すラインＦＡＶ上の信号と、ラインＳＭＣＦＬＵＳＨを介してＳＭＣ例外発生器５６（図２）からの信号とに応答して、フェッチ・アドレス窓保守ユニット５２の動作を制御する際に用いる組合わせ又は逐次的なロジックである。制御回路６８は、更に、自己変更コード原因以外の理由（例えば、誤った予測分岐等を含む）のためにパイプライン・フラッシュを伝達し、かつフェッチ・アドレス窓保守ユニット５２をリセットする必要があるマシン・リセットのように、他の条件を伝達する、マイクロプロセッサ１０における他の所から制御信号（図示なし）を受け取る。ここでは、提供される機能的な説明により当該技術分野において通常に習熟する者が制御回路６８を容易に実施できることを意図している。
【００２８】
動作において、フェッチ・アドレス窓保守ユニット５２は、ラインＳＭＣＦＬＵＳＨを介する有効信号によって伝達され得るパイプライン・フラッシュ、又はマイクロプロセッサのリセットにより、リセットされる。制御回路６８は、この信号に応答して、ラインＳＥＬＭＴ上に信号を発行してマルチプレクサ６１、６３にそれぞれ上限値及び下限値を選択させてラッチ６０、６２、及び制御ラッチ６０、６２に供給し、これら上下限値を記憶させる。この時点で、上限値（例えば、０ｘＦＦＦＦＦＦＦＦｈ）がラッチ６０に記憶されて、ラインＭＩＮＦＡ上に供給され、一方下限値（例えば、０ｈ）はラッチ６２に記憶されて、ラインＭＡＸＦＡ上に供給される。
【００２９】
制御回路６８は、次のフェッチにより、ラインＦＡＶを介してフェッチ・ユニット２６から、有効フェッチ・アドレスがラインＦＡ上に存在していることを意味する有効信号を受け取る。そこで、制御回路６８は、ラッチ５８を制御してこの値を記憶させると共に、この値をラインＬＡＳＴＦＡを介してマルチプレクサ６１、６３及び比較器６４、６６に供給させる。加えて、制御回路６８はこの時点でマルチプレクサ６１、６３にラインＬＡＳＴＦＡ上の値を選択させてラッチ６０、６２の入力に供給する（しかし、未だこのアドレス値をラッチ６０、６２に記憶してはいない）。ラッチ５８の内容は、ラインＬＡＳＴＦＡを介して比較器６４、６６によりラッチ６０、６２の現在内容と比較される。上限値及び下限値をラッチ６０、６２にそれぞれ記憶した以後にこの最初のフェッチのために、比較器６４、６６の両者は、制御回路６８がラッチ６０、６２に線ＬＡＳＴＦＡ上の現在のフェッチ・アドレス（マルチプレクサ６１、６３を介して供給される）を記憶させることに応答して、制御回路６８に信号を発行する。この処理は、それぞれ連続する有効フェッチ・アドレスについて反復されると共に、最終フェッチ・アドレスがラッチ５８に記憶されてラッチ６０、６２の内容と比較される。最終フェッチ・アドレスが窓の外に（即ち現在の最小アドレスより小さく、又は現在の最大アドレスより大きく）なる度に、制御回路６８はラッチ６０、６２のうちの適当な一つを制御して新しい最小又は最大アドレス値を記憶させる。
【００３０】
図２を再び参照すると、ラインＬＡＳＴＦＡ、ＭＡＸＦＡ、ＭＩＮＦＡがフェッチ・アドレス窓保守ユニット５２により書き込み比較器５４に転送される。この例において、ＳＭＣユニット５０は、マイクロプロセッサ１０の２つのロード／ストア・ユニット４００、４０１にそれぞれ関連された２つの比較器５４０、５４１を有する。本発明のこの実施例によれば、一方の比較器５４はマイクロプロセッサ１０内に存在する各ロード／ストア・ユニット４０に関連される。従って、更に多くの又は少ないロード／ストア・ユニット（又は同様のメモリ書き戻しアドレスを発生する回路）を有する異なるアーキテクチャは、これに対応して更に多くの又は少ない書き込み比較器を有するものとなることを意図している。本発明のこの実施例によれば、各書き込み比較器５４は、フェッチ・アドレス窓保守ユニット５２からのアドレス値に加えて、それに対応するロード／ストア・ユニット４０から新しい書き戻しアドレスを受け取る。この例において、書き込み比較器５４０はロード／ストア・ユニット４００がラインＬＳ０ＡＤＲ上に発生した新しいそれぞれの書き込みアドレスを受け取り、また書き込み比較器５４１はロード／ストア・ユニット４０１がラインＬＳ１ＡＤＲ上に発生した新しいそれぞれの書き込みアドレスを受け取る。以下で更に詳細に説明するように、各書き込み比較器５４０、５４１は、それぞれラインＬＳ０ＡＤＲ、ＬＳ１ＡＤを介して受け取る新しい書き込みアドレス値をラインＭＩＮＦＡ、ＭＡＸＦＡを介してフェッチされた命令アドレスの窓と比較する。書き込み比較器５４０、５４１は、新しい書き込みアドレスが窓内に入る（従って、現在、パイプラインにおける命令に対応していてもよい。）と判断した場合に、それぞれラインＬＳ０ＳＭＣＸＣＰ、ＬＳ１ＳＭＣＸＣＰ上に例外信号を発生する。ラインＬＳ０ＳＭＣＸＣＰ、ＬＳ１ＳＭＣＸＣＰはスケジューラ３６に転送され、スケジューラ３６は、当該技術分野において知られているように、他の目的のためにマイクロプロセッサ１０に存在する命令例外機構を用いて、マイクロプロセッサ１０の再直列化を実行し、次のｘ８６命令において再スタートが続く。
【００３１】
この例のマイクロプロセッサ１０において、各ロード／ストア・ユニット４０は待ち行列の書き戻しの機能を有するので、パイプラインは、バスが書き込み動作に利用できない場合に、又は各キャッシュ・ミスの場合に、停止する必要はない。マイクロプロセッサ１０のキャッシュされるアーキテクチャによれば、書き込みは、典型的には、レベル０マイクロキャッシュ１８に、かつマイクロキャッシュ１８に対するキャッシュ・ミスの場合に、レベル１キャッシュ１６ｄに適用される。このアーキテクチャでは、ロード／ストア・ユニット４０によりレベル１キャッシュ１６ｉを書き込むことはできないので、命令コードのものであってもレベル１キャッシュ１６ｄを用いて書き戻しを受け入れる。続いて、レベル１キャッシュ１６ｄに対してキャッシュ・ミスが発生すれば、書き込みがレベル２キャッシュ１１に（必要ならば、最終的にメモリ・サブシステム５に）進む。この例によれば、レベル２キャッシュ１１はマイクロプロセッサ１０におけるキャッシュの統一性を制御している。その結果、ロード／ストア・ユニット４０は、２つのロード／ストア・ユニット４０間で保留レベル０書き込み、及び一つの保留レベル１をそれぞれ保持することができる（即ち、ロード／ストア・ユニット４００、４０１のうちの一つのみが保留レベル１書き戻しを有することができる）。この機能は、キャッシュ・ミスにおいて早い書き込みに帰結しても、低キャッシュ・レベルに対する次の書き込みを発生するのを許容する。
【００３２】
この手法はパフォーマンスを改善する一方で、自己変更コードの場合、特にレベル０のマイクロキャッシュ１８又はレベル１キャッシュ１６ｄに書き込みをするとき、従ってレベル２キャッシュ１１に関連したシステム・キャッシュ統一性機構に対してトランスペアレントな手法により、複雑さが問題となり得る。例えば、書き込みが保留であって、まだ完了していないアドレスに対して、フェッチされた命令アドレスが対応するのであれば、フェッチされた命令コードは変更前にその状態になり、プログラム・エラーに帰結する。この状況は、本発明の好ましい実施例によれば、書き込み比較器５４、５５により処理され、これらはラインＬＡＳＴＦＡを介してフェッチ・アドレス窓保守ユニット５２により伝達された最終フェッチの命令アドレスを、保留のまま、従って処理されていなかった書き込みのアドレスと比較する付加的な機能を有する。各書き込み比較器５４０、５４１は、ラインＬＡＳＴＦＡ上の最終フェッチ・アドレスとレベル０マイクロキャッシュ１８に対する保留書き込みとの間の競合を検出することに応答して、ラインＬＳ０ＷＢＸＣＰ、ＬＳ１ＷＢＸＣＰ上に例外信号を発生するように実施される。同様に、共有書き込み比較器５５は、ラインＬＡＳＴＦＡ上の最終フェッチ・アドレスとレベル１キャッシュ１６ｄに対する保留書き込みとの間の競合を検出することにより、ラインＬ１ＷＢＸＣＰ上に例外信号を発生する。この例外信号はＳＭＣ例外発生器５６に転送され、ＳＭＣ例外発生器５６はラインＳＭＣＷＢＸＣＰ上に例外信号を発生し、これがパイプラインのフラッシング、再直列化及び実行の再スタートを含む例外取り扱いのためにスケジューラ３６に転送される。ＳＭＣ例外発生器５６は、更に、線ＳＭＣＦＬＵＳＨ上に信号も発生しており、この信号は、以下で更に詳細に説明するように、フェッチ・アドレス窓保守ユニット５２をリセットさせる。ＳＭＣ例外発生器５６は、例外発生及び取り扱いのロジックに関して、当該技術分野において知られているように、通常技術により構築されてもよい。このような例外発生及び取り扱いのロジックは、典型的には、通常のマイクロプロセッサに設けられており、以下で説明するように、発生したＳＭＣ例外を受け付けるように容易に適応可能とされる。
【００３３】
ここで図４を参照して、共有書き込み比較器５５と組合わせられた書き込み比較器５４の一例の構造について以下詳細に説明する。図４は書き込み比較器５４。の構造を示している。勿論、これは、書き込み比較器５４１が同様に構築されることを意図している。書き込み比較器５４０はラインＬＳ０ＡＤＲを介してロード／ストア・ユニット４００から新しい書き込みを受け取り、この新しいアドレスをキュー・ラッチ７１に供給して記憶させ、キュー・ラッチ７１がラインＬＳ０ＡＤＲを他の伝送のために開放する。ラインＬＳ０ＡＤＲは、更に、キュー・ラッチ７１の出力としてマルチプレクサ７３の１入力に入力される。マルチプレクサ７３は、制御回路７８の制御により、キュー・ラッチ７１のラッチ内容か、又はラインＬＳ０ＡＤＲを介して新たに到達した書き込みアドレス（未だ有効ならば）かを選択してその出力及び保留アドレス・レジスタ７５に供給する。このアドレスは、その書き込みがレベル０マイクロキャッシュ１８に対する書き込みのためにロード／ストア・ユニット４００により保留状態に処理される時点で、保留アドレス・レジスタ又はラッチ７５に記憶される。
【００３４】
マルチプレクサ７３の出力及びラッチ７５の出力は共にマルチプレクサ７７に供給される。マルチプレクサ７７の出力は、ラインＬＳ０ＡＤＲ１を介して共有書き込み比較器５５に転送される。書き込み比較器５４０内のマルチプレクサ７７は、制御回路７８により制御されて、これに関連するロード／ストア・ユニット４００により起動されるレベル１キャッシュ１６ｄに対する書き込みのアドレスを供給する。この書き込みがレベル０マイクロキャッシュ１８におけるキャッシュ・ミスによるものであれば、マルチプレクサ７７により選択されたアドレスは、保留アドレス・レジスタ７５の現在内容となる。マルチプレクサ７７は、マルチプレクサ７３の出力から共有書き込み比較器５５へ直接、元はレベル１キャッシュ１６ｄに向けられている書き込みのアドレスを転送する。
【００３５】
制御回路７８はラインＷＲＤＮＥを介してマイクロキャッシュ１８及びマイクロプロセッサ１０のメモリ・システムの他の要素から、書き込み動作の完了を表す信号を受け取る。各書き込み動作が完了すると、制御回路７８はレジスタ７１、７５のシーケンスに沿って書き込みアドレスを進める。この例では書き込み比較器５４による取り扱いのために１保留書き込みを意図しているが、他のアーキテクチャでは、書き込み比較器５４における保留アドレス・ラッチの数がそれに関連するロード／ストア・ユニット４０によって取り扱われるキャッシュ・レベルの深さに従って、異なっていてもよい。
【００３６】
フェッチ・アドレス窓に対する比較が有効であれば直ちに、現在の書き戻しアドレスがラインＬＳ０ＡＤＲを介して比較器７２、７４の各１入力に供給される。比較器７２はその他方の入力にフェッチ・アドレス窓保守ユニット５２からのラインＭＩＮＦＡを受け取り、従って現在の書き込みアドレスをラインＭＩＮＦＡ上のアドレスと比較する。同様に、比較器７４はその他方の入力にフェッチ・アドレス窓保守ユニット５２からのライン（信号）ＭＡＸＦＡを受け取って、現在の書き込みアドレスを線ＭＡＸＦＡ上のアドレスと比較する。比較器７２、７４の出力はＡＮＤゲート７６の入力に供給され、その出力はラインＩＮＷＩＮを介して制御回路７８に伝達される。以下で更に説明するように、比較器７２、７４とＡＮＤゲート７６との組合わせは、現在の書き込みアドレスがパイプラインにおける命令のアドレスに潜在的に一致するか否かを判断する機能を実行するものとなる。
【００３７】
制御回路７８は、比較結果をラインＩＮＷＩＮを介して受け取り、かつ現在の書き込みアドレスがフェッチした命令のアドレス（ラインＬＡＳＴＦＡ上に示す最終フェッチ・アドレスを含む）範囲内にある場合に、ラインＬＳ０ＭＣＸＣＰを介してスケジューラ３６に対して例外信号を発生する組合わせ又は逐次的なロジックである。制御回路７８は、更に、その関連のロード／ストア・ユニット４００からの制御信号を受け取り、保留書き込み動作のステータスに従って、レジスタ７１、７５に保留アドレス値を記憶すること、及びマルチプレクサ７３、７７により実行される選択を制御する。ここに説明したように実行される機能を参照することにより、特定の実施に適した制御回路７８を構築することは、当該技術分野に習熟する者にとって容易に可能であると意図している。
【００３８】
マルチプレクサ７３により選択された書き込みアドレスは、更に、等価比較器８０の１入力に供給され、等価比較器８０はその他方の入力にフェッチ・アドレス窓保守ユニット５２からラインＬＡＳＴＦＡを受け取っている。ラインＬＡＳＴＦＡは、更に、保留アドレス・レジスタ７５の内容と共に、等価比較器８２に供給されている。等価比較器８０、８２はラインＦＡＸ、ＰＮＤ０Ｘを介して例外ロジック８６にこれらの比較結果をそれぞれ伝達している。以下で更に詳細に説明するように、等価比較器８０、８２は、最終フェッチ・アドレスが現在の保留書き込み動作のアドレスに一致するか否かを判断する機能を実行する。
【００３９】
例外ロジック８６は、ラインＦＡＸ、ＰＮＤ０Ｘを介して等価比較器８０、８２からの信号をそれぞれ受け取っている組合わせ及び逐次的なロジックであり、制御回路７８からの信号を制御して、最終フェッチ・アドレスが、完了した命令に対応する、保留書き込みキューにおける書き込みアドレスと一致する場合に、ラインＬＳ０ＷＢＸＣＰを介してＳＭＣ例外発生器５６（図２）に対して例外信号を発生する。ここで提供した機能説明に基づく通常の設計技術を用いて例外ロジック８６を実施することは、当該技術分野に習熟する者にとって容易に可能であることを意図している。
【００４０】
動作において、書き込み比較器５４は、ラインＬＳ０ＡＤＲを介してロード／ストア・ユニット４００から新しい書き込みアドレスを受け取ることにより、キュー・ラッチ７１にアドレスを記憶し、かつこのアドレスを直接、比較器７２、７４に転送してラインＭＩＮＦＡ、ＭＡＸＦＡを介して提供されるフェッチ・アドレス窓と比較する。比較器７２は、マルチプレクサ７３から現在の書き込みアドレスの値が最終パイプライン・フラッシュ以後にフェッチされた命令の最低線形アドレスより大きい又は等しいことに応答して、ＡＮＤゲート７６のうちの一方の入力に対して信号を発生する。同様に、比較器７４は、現在の書き込みアドレスの値が最終パイプライン・フラッシュ以後にフェッチされた命令の最高線形アドレスより小さい又は等しいことに応答して、ＡＮＤゲート７６のうちの他方の入力に対して信号を発生する。ＡＮＤゲート７６は、両比較器７２、７４が真の信号を戻して、現在の書き込みアドレスが最終パイプライン・フラッシュ以後にフェッチされた命令のアドレス範囲内にあることを表す場合に、ラインＩＮＷＩＮ上に信号を発生し、従ってパイプラインに存在する命令コードに対する変更であってもよい。逆に、現在の書き込みアドレスが最終パイプライン・フラッシュ以後にフェッチされた命令のアドレス範囲内にない（即ち、ラインＩＮＷＩＮがローである）ときは、書き込みがパイプラインにおける命令コードの変更である可能性はない。
【００４１】
制御回路７８は、ラインＩＮＷＩＮ上の活性信号を受け取ることに応答して、ラインＬＳ０ＳＭＣＸＣＰ上に例外信号を発生し、スケジューラ３６（図１）に伝達されて例外シーケンスを開始させる。現在の書き込みアドレスは、現在、パイプラインにおいて命令のうちの一つ（多分現在、実行している命令を含む）と競合状態にあり得るので、この例において、ＡＮＤゲート７６及び制御回路７８により発生される例外は、トラップ形式のものである。従って、現在の書き込みに対応するものより後の命令が完了するように許可されることはない。
【００４２】
更に、書き込み比較器５４。は最終フェッチ・アドレスを保留書き込みと比較する。ラインＬＡＳＴＦＡ上のフェッチ・アドレスは、命令のフェッチにより、等価比較器８０により現在の書き込みアドレスと、及び等価比較器８２により保留アドレス・レジスタ７５に記憶された保留書き込みのアドレスと比較される。最終フェッチ・アドレスが現在の書き込みアドレスと競合するのであれば、等価比較器８０はラインＦＡＸ上に信号を生じせしめる。同様に、最終フェッチ・アドレスが保留書き込みアドレスと競合するのであれば、等価比較器８２はライン（信号）ＰＮＤ０Ｘを生じさせる。例外ロジック８６は、ラインＦＡＸ上に又はラインＰＮＤ０Ｘ上に生じた信号に応答して、ラインＬＳ０ＷＢＸＣＰを介してＳＭＣ例外発生器５６（図２）に対して例外信号を発生し、ＳＭＣ例外発生器５６は続いてマイクロプロセッサ１０に対して（即ち、スケジューラ３６に対して）例外を発生する。本発明の好ましい実施例によれば、この例において例外ロジック８６により発生した例外は、パイプラインを直列化し、かつ再スタートする前に、これらの命令が完了するように現在実行されるのを許容する割り込み形式のものである。この例において、競合が最終フェッチされた命令間であることが知られているので、この形式の例外は許容され（かつパイプラインにおいて後の命令によってではない。さもなければトラップが既に比較器７２、７４により発生されてしまっている。）。
【００４３】
共有書き込み比較器５５において、マルチプレクサ８３は、一方の入力にラインＬＳ０ＡＤＲ１を介して書き込み比較器５４０のマルチプレクサ７７の出力を受け取り、かつ他方の入力に書き込み比較器５４１からＬＳ１ＡＤＲ１を介して同様の保留アドレス値を受け取る。マルチプレクサ８３は制御回路８１により制御されてレジスタ８５に記憶するために適当な保留書き込みのソースを選択する。以上で述べたように、ロード／ストア・ユニット４０のいずれかによりレベル１キャッシュ１６ｄに対する１回のみの書き込みは、任意の１時点で保留になるかも知れない。制御回路８１はラインＷＲＤを介してレベル１キャッシュ１６ｄからの制御信号を受け取って書き込み受け取るためにレベル１キャッシュ１６ｄの利用可能性と、アクセスを許可したロード／ストア・ユニット４０のうちの一つの識別とを表示させる。レベル１キャッシュ１６ｄに対する保留書き込みのアドレスに対応するレジスタ８５の内容は、ラインＬＡＳＴＦＡを介して現在のフェッチ・アドレスとして、等価比較器８７に転送される。等価比較器８７は、等価比較器８０、８２と同様に、レジスタ８５の保留書き込みアドレスをラインＬＡＳＴＦＡ上のフェッチ・アドレスと比較し、ラインＬＩＸを介して例外ロジック８９に対し、信号を発生する。例外ロジック８９は、例外ロジック８６と同様に構築されており、競合を検出した場合に、ラインＳＨＷＢＳＣＰを介してＳＭＣ例外発生器５６に対し、例外信号を発生する。
【００４４】
動作において、共有書き込み比較器５５は、レベル１キャッシュ１６ｄに対する書き込みが保留になる時点で、ラインＬＳ０ＡＤＲ１、ＬＳ１ＡＤＲ１を介して新しい書き込みアドレスを受け取る。制御回路８１はマルチプレクサ８３を制御して適当なアドレス・ソースを選択し、かつ保留書き込みアドレスはレジスタ８５に記憶されて等価比較器８７に提供される。等価比較器８７は、ラインＬＡＳＴＦＡを介して新しいフェッチ・アドレスを受け取るのに応答して、競合がこのフェッチ・アドレスとレジスタ８５に記憶された保留書き込みアドレスとの間に存在するか否かを判断する。等価比較器８７は、競合を検出するのに応答して、ラインＬＩＸを介して例外ロジック８９に信号を主張する。例外ロジック８９は、これに応答して、ラインＬ１ＷＢＸＣＰを介してＳＭＣ例外発生器５６に対して例外信号を発生する。ＳＭＣ例外発生器５６は、書き込み比較器５４により発生した例外の場合のように、ラインＳＭＣＷＢＸＣＰ上に信号を発生して割り込み形式の例外を実行させる。そこで、現在、実行している命令は完了し、かつパイプラインは直列化され、かつ再スタートされる。
【００４５】
ここで、図５を図２〜図４と組合わせて参照して、フェッチ・アドレス窓を保持する際に、及び保留書き込みによる競合に対する各フェッチ・アドレスを評価する際に、フェッチ・アドレス窓保守ユニット５２及び書き込み比較器５４を含め、ＳＭＣユニット５０の総合動作を説明する。
【００４６】
動作は処理８８から始まり、処理８８において、フェッチ・ユニット２６は新しいフェッチ・アドレスを発生し、これはフェッチ・アドレス窓保守ユニット５２がラインＦＡを介し、ラインＦＡＶを介する有効信号と組合わせて受け取る。フェッチ・アドレス窓保守ユニット５２はラインＦＡを介してフェッチ・アドレスをラッチ５８にラッチさせて、ラインＬＡＳＴＦＡを介してその内容を比較器６１、６３に提供し、これらは互いに並列に判断９１、９３を実行して現在のフェッチ・アドレス窓を更新すべきか否かを判断する。前述したように、各パイプライン・フラッシュ又はマシン・リセットにより、最小フェッチ・アドレスがメモリ空間のハイ・アドレス限界にセットされ、かつ最大フェッチ・アドレスがメモリ空間のロー・アドレス限界にセットされるので、リセット後の最初のフェッチは新しいフェッチ・アドレス窓の確立を開始する。判断９１がラインＬＡＳＴＦＡを介して最終フェッチ・アドレスがラインＭＩＮＦＡを介して前の最低フェッチ・アドレス未満であることを判断すると、処理９２がフェッチ・アドレス窓保守ユニットにより実行されて、ラインＬＡＳＴＦＡ上の値をラッチ６０にロードさせる。同様に、ラインＬＡＳＴＦＡ上の最終フェッチ・アドレスがラインＭＡＸＦＡ上の前の最高フェッチ・アドレスを超えるのであれば、処理９４はフェッチ・アドレス窓保守ユニット５２により実行されてラインＬＡＳＴＦＡ上の値をラッチ６２にロードさせる。必要に従って処理９２又は９４（又はリセット後の最初のフェッチの場合には両方）を完了することにより、制御は判断９５に渡される。
【００４７】
判断９５は書き込み比較器５４０、５４１により、及び共有書き込み比較器５５により実行されて、完了した命令のために、ラインＬＡＳＴＦＡ上の最終フェッチ・アドレスを、保留及び待ち行列にした書き込みのアドレスと比較する。図４に示すように、かつ以上で説明したように、判断９５は書き込み比較器５４０、５４１のそれぞれにおける等価比較器８０、８２により実行されて、ラインＬＡＳＴＦＡ上の値を（それぞれラインＬＳ０ＡＤＲ、ＬＳ１ＡＤＲ上の、又はキュー・ラッチ７１に待ち行列にされた）最終書き込みアドレスと、及び保留アドレス・レジスタ７５と比較する。判断９５は、更に、共有書き込み比較器５５における等価比較器８７により実行されて、ラインＬＡＳＴＦＡ上の最終フェッチ・アドレスをレジスタ８５に記憶された保留レベル１書き込みアドレスと比較する。等価比較器８０、８２、８７により競合が検出されないときは、命令のフェッチは通常の形式により進行する。しかし、一致が検出されれば（判断９５がイエスであれば）、（ラインＬＡＳＴＦＡ上のアドレスにより）最終フェッチされた命令の命令コードは、保留のうちの一つにより未だ修飾されていない、又は未だ完了していない待ち行列の書き込みとして、旧いものになっている恐れがある。次いで、制御は処理９６に渡されて、場合によって、書き込み比較器５４のうちの一つにおける例外ロジック８６、又は共有書き込み比較器５５における例外ロジック８９は、例外信号をＳＭＣ例外発生器５６に対して発生する。ＳＭＣ例外発生器５６は、これに応答して、ラインＳＭＣＷＢＸＣＰ（図２）を介し、スケジューラ３６又はマイクロプロセッサ１０におけるこのような他の適当な例外回路に例外を発行する。次いで、処理９８はマイクロプロセッサ１０における適当な回路により実行されてＳＭＣ例外を取り扱う。この例において、競合はフェッチ段と完了した命令との間にあり、従って結果の例外は割り込みとして実施されてもよい。処理９８は、好ましくは、現在実行している命令の実行を完了するステップ、全ての保留及び完了した結果の書き込みを実行することによりパイプラインを直列化するステップ、及び通常の方法において、プログラムの実行を再スタートさせることにより、競合を発生させる命令のフェッチが修飾した命令コードを検索するパイプライン例外を取り扱うステップを含む。加えて、処理９９により図５に示すように、フェッチ・アドレス窓保守ユニット５２（図３）は上限値（例えば、０ｘＦＦＦＦＦＦＦＦｈ）をラッチ６０に、また下限値（例えば、０ｈ）をラッチ６２に記憶することによりラッチ６０、６２をリセットさせ、これがフェッチ・アドレス窓をリセットさせる。
【００４８】
従って、本発明の好ましい実施例によれば、各フェッチ・アドレスが解析されて、フェッチ・アドレス窓はこの最終フェッチ・アドレスを含むように最小及び最大フェッチ・アドレス値のいずれか（又は両方）を変更することにより、更新されるべきか否かを判断する。加えて、各フェッチ・アドレスは、各保留又は待ち行列の書き込みに対して解析されて、未完了の書き込みにより意図された命令コード変更が命令のフェッチ前に実行されることを保証する。
【００４９】
ここで、図１〜図４と組合わせて図６を参照し、関連するロード／ストア・ユニット４０から各新しい書き込みアドレスを受け取ることに応答するＳＭＣユニット５０の動作を説明する。この処理は、書き込みが典型的に命令のフェッチに結合されていない意味において、図５のフェッチ窓更新及び競合チェック処理とほぼ同期して動作する。換言すれば、各マシン・サイクルは、フェッチ及び書き込み動作のいずれか含む、いずれも含まない、又は両方を含むことができる。
【００５０】
処理１００において、ロード／ストア・ユニット４００、４０１のうちの一つ（又は両方）は、命令の実行を完了すると、新しい書き戻しアドレスを発生する。この新しい命令は、その場合に従って、ラインＬＳ０ＡＤＲ、ＬＳ１ＡＤＲ（図６において通常、ＬＳｘＡＤＲと呼ばれる）を介して書き込み比較器５４のうちの対応する一つ（又は両方）により受け取られる。判断１０１において、各書き込み比較器５４は、この書き込みアドレスＬｘＡＤＲをフラッシュ以後にフェッチされ、ラインＭＩＮＦＡを介して提供される最低命令アドレスと比較する。判断１０３において、各書き込み比較器５４は、この書き込みアドレスＬＳｘＡＤＲをフラッシュ以後にフェッチされ、ラインＭＡＸＦＡを介して提供される最高命令アドレスと比較する。ＯＲ処理１０２（即ち、判断１０１、１０３のいずれかがノーである）により表されているように、最終書き込みアドレスＬＳｘＡＤＲが最低窓アドレス（ＭＩＮＦＡ）より小さいか、又は最高窓アドレス（ＭＡＸＦＡ）より大いのであれば、書き込みは現在、パイプラインにおける命令の変更であり得ない。次いで、制御は処理１０４に渡され、書き込み比較器５４が保留書き込みキュー（即ちレジスタ７５、８５）における最新アドレスＬＳｘＡＤＲを適当に進める。
【００５１】
しかし、ＡＮＤ処理１０５（即ち、判断１０１、１０３の両方がイエスである）により表されているように、最終書き込みアドレスＬＳｘＡＤＲがフラッシュ以後の最低フェッチ・アドレス（ＭＩＮＦＡ）より大きい、及びフラッシュ以後の最高フェッチ・アドレス（ＭＡＸＦＡ）より小さいのであれば、この書き込みは現在、パイプラインにある命令の変更であり得る。この書き込みが窓内にあることの判断は、パイプライン命令が変更されていることを必ずしも意味せず、その代わりに、この書き込みによるパイプライン命令の変更は、書き込みが進行すべきであったときに、可能であることを判断するだけであることに注意すべきである。この場合に、制御は処理１０６に進行し、潜在的に競合している書き込みアドレスを受け取る書き込み比較器５４０、５４１のうちの一つにおける制御回路７８は、ラインＬＳ０ＳＭＣＸＣＰ、ＬＳ１ＳＭＣＸＣＰを介してスケジューラ３６に対してその各例外信号を発生して主張する。この場合に起動される例外は、トラップに対応する。次に処理１０８において、スケジューラ３６は、競合する書き込みの完了を含むパイプラインの直列化、及び現在実行している命令を含むパイプラインのフラッシュを実行する。パイプラインのフラッシュは、変更され得る特定のパイプライン化された命令の識別が知られていないことを考慮して、この場合では必要とされ、かつ実行における命令のように遅い命令を含み得る。直列化及びフラッシュ動作には、命令の実行の再スタートが続き、競合している書き込みが続く次の命令のフェッチにより開始する。実行は以前と同じように継続する。
【００５２】
本発明によれば、マイクロプロセッサの制御において多くの重要な効果が得られる。このような効果のうちの一つは、最小量のハードウエア及び集積回路チップ面積により自己変更コードの例外を検出し、かつ取り扱う能力である。以上の説明から明らかなように、本発明の好ましい実施例は、各書き込みアドレスを比較しようとしているパイプラインにおける各命令のアドレスを記憶することを必要としない。即ち、通常のマイクロプロセッサに含まれているようなメモリは、特に、更に進歩したマイクロプロセッサにおいてパイプラインが（スーパスケーラの意味において）より深く、かつより広くなるに従って、相当量のチップ面積を消費する。代わって、フェッチ・アドレス窓の限界のみが記憶される必要がある。更に、本発明の好ましい実施例によれば、書き込みアドレスを、現在、パイプラインにある各命令の記憶アドレスと比較するものと比べて、２回の比較を必要とするだけである。従って、オーバヘッド時間及びこの動作に必要とされる回路は、大きく減少される。
【００５３】
本発明の好ましい実施例は、各書き込みアドレスが窓限界に対してのみ比較されることを考慮して、不必要なパイプライン・フラッシュに帰結し得ることを意図している。従って、書き込みアドレスが窓内にあっても、命令が既に完了した、又はフェッチされてはいないので、パイプラインにおける命令と対応しないことが考えられる。しかし、チップ面積の節約及びパフォーマンスを設定すると、本発明に関連して、他の理由（例えば、誤った予測の分岐）のためのパイプライン・フラッシュの頻度、及び更にプログラム命令の近接は、偽の自己変更コードの競合による不必要なフラッシュの可能性を、多くの通常のアーキテクチャにとって、許容し得るレベルへ減少させることが判った。
【００５４】
本発明の好ましい実施例は、新しいそれぞれのフェッチ・アドレスを、待ち行列及び保留の書き込みアドレスと比較し、自己変更コード事象により誤りに対して更なる保証を提供し、かつ比較的に深い書き込みキューを有するように能力を可能にする付加的な効果を提供する。
【００５５】
好ましい実施例により本発明を説明したが、これらの実施例に対する変更及び代替、本発明の効果及び利益を得る変更及び代替は、当該技術分野に習熟する者がこの明細書及びその図面を参照することにより、明らかとなることを勿論、意図している。このように変更及び代替は、ここでの特許請求の範囲内にあることを意図している。
【００５６】
以上の説明に関して更に以下の項を開示する。
【００５７】
（１）  命令アドレスに従って命令コードを記憶すると共に、オペランドを記憶するメモリと、
複数の命令をシーケンスにより処理する複数の段を有する命令実行パイプラインと
を備えたマイクロプロセッサにおいて、前記複数の段は、
フェッチ・アドレスにより前記メモリをアドレス指定して命令コードを読み出し、前記命令のパイプラインに供給するフェッチ・ユニットと、
複数の命令を実行する少なくとも一つの実行ユニットと、
前記実行ユニットからの結果を行き先書き込みアドレスにより前記メモリに書き込む第１のロード／記憶ユニットと、
前記フェッチ・ユニット及び前記第１のロード／記憶ユニットに接続された自己変更コード検出回路と
を備え、前記自己変更コード検出回路は、
最低フェッチ・アドレス値を記憶する最小ラッチと、
最高フェッチ・アドレス値を記憶する最大ラッチと
前記行き先書き込みアドレスを前記最小ラッチ及び前記最大ラッチの内容と比較し、かつ前記行き先書き込みアドレスが前記最低フェッチ・アドレス値より大きい又は等しい、及び前記最高フェッチ・アドレス値より小さい又は等しいことに応答して、フラッシュ信号を前記命令実行パイプラインに対して発生する第１の書き込み比較器とを備えたマイクロプロセッサ。
【００５８】
（２）  前記自己変更コード検出回路は、更に、
前記フェッチ・アドレスを前記最小ラッチの内容と比較する第１の更新比較器と、
前記フェッチ・アドレスを前記最大ラッチの前記内容と比較する第２の更新比較器と
前記第１及び第２の比較器に接続され、前記フェッチ・アドレスは前記最小ラッチに記憶されている前記最低フェッチ・アドレス値より小さいことを前記第１の更新比較器が判断したことに応答して、前記フェッチ・アドレスを記憶するように前記最小ラッチを制御し、かつ前記フェッチ・アドレスは前記最大ラッチに記憶されている前記最高フェッチ・アドレス値より大きいことを前記第２の更新比較器が判断したことに応答して、前記フェッチ・アドレスを記憶するように前記最大ラッチを制御する制御回路と
を備えた第１項記載のマイクロプロセッサ。
【００５９】
（３）  前記制御回路は、更に、パイプライン・フラッシュに応答して、ハイ・メモリ・アドレス限界を記憶するように前記最小ラッチと、ロー・メモリ・アドレス限界を記憶するように最大ラッチとの両方を制御するためのものである第２項記載のマイクロプロセッサ。
【００６０】
（４）  前記第１の書き込み比較器は、前記行き先書き込みアドレスが前記最低フェッチ・アドレス値より大きい又は等しい、又は前記最高フェッチ・アドレス値より小さい又は等しいことに応答して、前記命令実行パイプラインに対して例外信号を発生し、
かつ、前記命令実行パイプラインは前記例外信号の受け取りに応答してパイプライン・フラッシュを実行する第１項記載のマイクロプロセッサ。
【００６１】
（５）  前記命令実行パイプラインは、更に、
前記実行ユニットからの結果を行き先書き込みアドレスにより前記メモリに書き込む第２のロード／ストア・ユニット
を備え、
かつ、前記自己変更コード検出回路は、更に、
前記第２のロード／ストア・ユニットからの前記行き先書き込みアドレスを前記最小ラッチ及び前記最大ラッチの内容と比較し、かつ前記第２のロード／ストア・ユニットからの前記行き先書き込みアドレスが前記最低フェッチ・アドレス値より大きい又は等しいこと、及び前記最高フェッチ・アドレス値より小さい又は等しいことに応答して、前記命令実行パイプラインに対してフラッシュ信号を発生する第２の書き込み比較器を備えている第１項記載のマイクロプロセッサ。
【００６２】
（６）  前記第１の書き込み比較器は、
前記行き先書き込みアドレスを前記最小ラッチの内容と比較する第１の窓比較器と、
前記行き先書き込みアドレスを前記最大ラッチの内容と比較する第２の窓比較器と、
前記第１の窓比較器が、前記行き先書き込みアドレスは前記最低フェッチ・アドレス値より大きい又は等しいと判断したことと、前記第２の窓比較器が、前記行き先書き込みアドレスは前記最高フェッチ・アドレス値より小さい又は等しいと判断したこととの組合わせに応答して、前記フラッシュ信号を発生する比較器制御回路とを備えた第１項記載のマイクロプロセッサ。
【００６３】
（７）  前記第１の書き込み比較器は前記フェッチ・アドレスを受け取るように前記フェッチ・ユニットに接続され、
前記第１の書き込み比較器は、更に、
前記フェッチ・アドレスを前記行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記行き先書き込みアドレスと一致することに応答して、前記比較器制御回路に信号を発生する第１の品質比較器を備えている第６項記載のマイクロプロセッサ。
【００６４】
（８）  前記第１の書き込み比較器は、更に、
未だ完了していない前記第１のロード／記憶ユニットによる書き込み動作のために保留行き先書き込みアドレスを記憶する保留書き込みアドレス・ラッチと、フェッチ・アドレスを前記保留行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致することに応答して、信号を前記比較器制御回路に発生する第２の等価比較器と第７項記載のマイクロプロセッサ。
【００６５】
（９）  前記比較器制御回路は、
前記第２の等価比較器が前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致すると判断することに応答して、例外要求信号を発生する例外ロジックを備えた第８項記載のマイクロプロセッサ。
【００６６】
（１０）  前記メモリは、
前記フェッチ・ュニットからのフェッチ・アドレスに対応する位置に命令コードを記憶する命令メモリと、
オペランドを記憶するデータ・メモリとを備えた第１項記載のマイクロプロセッサ。
【００６７】
（１１）  更に、
前記命令実行パイプラインに対する、及び前記メモリに対する一方の側に接続され、かつ外部バスに対する他方の側に接続されたバス・インターフェイス・ユニットと、
前記外部バスに接続された外部サブシステムとを備えた第１項記載のマイクロプロセッサ。
【００６８】
（１２）  前記第１の窓比較器は前記フェッチ・ユニットと前記第１のロード／ストア・ユニットとに接続され、かつ、
前記行き先書き込みアドレスを前記最小ラッチの内容と比較する第１の窓比較器と、
前記行き先書き込みアドレスを前記最大ラッチの内容と比較する第２の窓比較器と、
前記第１の窓比較器が、前記行き先書き込みアドレスは前記最低フェッチ・アドレス値より大きい又は等しいと判断したことと、前記第２の窓比較器が、前記行き先書き込みアドレスは前記最高フェッチ・アドレス値より小さい又は等しいと判断したこととの組合わせに応答して、前記フラッシュ信号を発生する比較器制御回路と
前記フェッチ・アドレスを前記行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記行き先書き込みアドレスと一致することに応答して、現在の競合信号を発生する第１の品質比較器と、
未だ完了していない前記第１のロード／ストア・ユニットによる書き込み動作のために第１の保留行き先アドレスを記憶する第１の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記第１の保留行き先アドレスと比較し、かつ前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致することに応答して、第１の保留競合信号を発生する第２の等価比較器と、
前記第１及び第２の等価比較器に接続され、前記現在の競合信号か又は前記第１の保留競合信号に応答して、フラッシュ信号を発生する例外制御回路とを備えた第１項記載のマイクロプロセッサ。
【００６９】
（１３）  更に、
前記実行ユニットからの結果を行き先書き込みアドレスにおける前記メモリに書き込む第２のロード／ストア・ユニットと、
前記フェッチ・ユニットと前記第２のロード／ストア・ユニットとに接続された第２の窓比較器と
を備え、
前記行き先書き込みアドレスを前記最小ラッチの内容と比較する第１の窓比較器と、
前記行き先書き込みアドレスを前記最大ラッチの内容と比較する第２の窓比較器と、
前記第１の窓比較器が、前記行き先書き込みアドレスは前記最低フェッチ・アドレス値より大きい又は等しいと判断したことと、前記第２の窓比較器が、前記行き先書き込みアドレスは前記最高フェッチ・アドレス値より小さい又は等しいと判断したこととの組合わせに応答して、前記フラッシュ信号を発生する比較器制御回路と、
前記フェッチ・アドレスを前記行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記行き先書き込みアドレスと一致することに応答して、前記現在競合信号を発生する第１の等価比較器と、
未だ完了していない前記第１のロード／ストア・ユニットによる書き込み動作のために第１の保留行き先書き込みアドレスを記憶する第１の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記第１の保留行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記保留行き先書き込みアドレスと一致することに応答して、第１の保留競合信号を発生する第２の等価比較器と、
前記第１及び第２の等価比較器に接続され、前記現在の競合信号か又は前記第１の保留競合信号に応答して、フラッシュ信号を発生する例外制御回路とを備えた第１２項記載のマイクロプロセッサ。
【００７０】
（１４）  更に、
前記第１及び第２の書き込み比較器に接続された共有書き込み比較器と、
前記第１及び第２の書き込み比較器からの保留行き先書き込みアドレスを選択する選択回路と、
前記選択された保留行き先書き込みアドレスを記憶する第２の保留書き込みアドレス・ラッチと、
前記フェッチ・アドレスを前記記憶し、選択した保留行き先書き込みアドレスと比較し、かつ前記フェッチ・アドレスが前記記憶し、選択した保留行き先書き込みアドレスと一致することに応答して、第２の保留競合信号を発生する共有等価比較器と、
前記第３の等価比較器に接続され、前記第２の保留競合信号を受け取ることに応答して、フラッシュ信号を発生する共有制御回路とを備えた第１３項記載のマイクロプロセッサ。
【００７１】
（１５）  一方側を前記命令実行パイプラインと前記メモリとに接続され、かつ前記他方側を外部バスに接続されたバス・インターフェイスと、
前記外部バスに接続された外部サブシステムとを備えた第１２項記載のマイクロプロセッサ。
【００７２】
（１６）  自己変更コードの競合を検出するようにマイクロプロセッサを動作させる方法において、
命令を実行するステップと、
前記実行するステップの結果をメモリに書き込む書き込みアドレスを発生するステップと、
前記書き込みアドレスを最小フェッチ・アドレス及び最大フェッチ・アドレスと比較するステップであって、前記最小フェッチ・アドレスがパイプライン・フラッシュ以後に受け取った複数の命令のための最低フェッチ・アドレスに対応し、かつ前記最大フェッチ・アドレスが前記パイプライン・フラッシュ以後に受け取った複数の命令のための最高フェッチ・アドレスに対応しているステップと、前記比較するステップに応答して、前記書き込みアドレスが共に前記最小フェッチ・アドレスより大きく又は等しい、及び前記最高フェッチ・アドレスより小さい又は等しいことを判断するステップと
を備えた前記方法。
【００７３】
（１７）  現在のフェッチ・アドレスを発生して前記マイクロプロセッサが実行する命令コードをフェッチさせるステップと、
前記現在のフェッチ・アドレスを前記最小フェッチ・アドレスと比較するステップと、
前記フェッチ・アドレスが前記最小フェッチ・アドレスより小さいことに応答して、前記最小フェッチ・アドレスを前記現在のフェッチ・アドレスに等しく設定するステップと、
前記現在のフェッチ・アドレスを前記最大フェッチ・アドレスと比較するステップと、
前記フェッチ・アドレスが前記最大フェッチ・アドレスより大きいことに応答して、前記最大フェッチ・アドレスを前記現在のフェッチ・アドレスに等しく設定するステップと
を備えた第１６項記載の方法。
【００７４】
（１８）  更に、
パイプライン・フラッシュに応答して、前記最小フェッチ・アドレスを上限界値に設定し、かつ前記最大フェッチ・アドレスを下限値に設定するステップ
を備えた第１６項記載の方法。
【００７５】
（１９）  前記パイプライン・フラッシュを開始させるステップは、  例外信号を発生させるステップと、
前記例外信号に応答して、前記パイプラインをフラッシュさせるステップと
を含む第１６項記載の方法。
【００７６】
（２０）  更に、
現在のフェッチ・アドレスを発生して前記マイクロプロセッサが実行する命令コードをフェッチさせるステップと、
前記現在のフェッチ・アドレスを前記書き込みアドレスと比較するステップと、
前記比較ステップに応答して、前記現在のフェッチ・アドレスが前記書き込みアドレスと一致することを判断し、パイプライン・フラッシュを開始させるステップと
を備えた第１６項記載の方法。
【００７７】
（２１）  未だ完了してない書き込み動作の行き先メモリアドレスに対応する少なくとも一つの保留書き込みアドレスを記憶するステップと、
前記現在のフェッチ・アドレスを前記少なくとも一つの保留書き込みアドレスのそれぞれと比較するステップと、
前記比較するステップに応答して、前記現在のフェッチ・アドレスが少なくとも一つの保留書き込みアドレスと一致することを判断し、パイプライン・フラッシュを開始させるステップと
を備えた第２０項記載のマイクロプロセッサ。
【００７８】
（２２）  前記パイプライン・フラッシュを開始させるステップは、前記保留書き込みアドレスに対応する前記書き込み動作を完了させるステップと、
次いで前記現在のフェッチ・アドレスに対応するメモリ位置から命令コードをフェッチし、前記マイクロプロセッサにより実行させるステップと
を備えた第２１項記載の方法。
【００７９】
（２３）  更に、
前記比較するステップの前に第２の命令の実行を開始するステップを備え、かつ前記開始するステップは、更に、
前記フェッチ・ステップの前に、前記第２の命令の実行を完了させるステップを備えた第２２項記載の方法。
【００８０】
（２４）  パイプラインにおける潜在的な変更及び命令を検出し、かつ取り扱うための能力を実施するマイクロプロセッサ（１０）及びシステム（２）を開示する。前記マイクロプロセッサ（１０）は、フェッチ・アドレス窓保守ユニット（５２）と、メモリ（１６、１１、５）に対して書き込みを実行させるマイクロプロセッサ（１０）における各ロード／ストア・ユニット（４０）に関連した書き込み比較器（５４）と、共有書き込み比較器（５５）とを含む自己変更コード（ＳＭＣ）ユニット（５０）を含む。前記フェッチ・アドレス窓保守ユニット（５２）は、パイプライン・フラッシュ又はマシン・リセット以後の最低フェッチ・アドレスを記憶する最小ラッチ（６０）と、フラッシュ又はリセット以後の最高フェッチ・アドレスを記憶する最大ラッチ（６２）とを含み、かつ現在のフェッチ・アドレス（ＬＡＳＴＦ）が現在の窓の外側になるのを検出することにより、最小及び最大ラッチ（６０、６２）を更新する。書き込み比較器（５４）は、各新しい書き込みアドレス（ＬＳｘＡＤＲ）を、前記最小及び最大ラッチ（６０、６２）からの最小及び最大フェッチ・アドレス（ＭＩＮＦＡ、ＭＡＸＦＡ）とそれぞれ比較する。書き込みアドレス（ＬＳｘＡＤＲ）が前記窓内に含まれるのに応答して、例外シーケンスが前記パイプラインをフラッシュさせるために開始される。更に、書き込み比較器（５４、５５）は現在のフェッチ・アドレス（ＬＡＳＴＦＡ）を現在書き込みアドレス、及び保留しているが、未完了の書き込みのアドレスと比較して、フェッチした命令と保留書き込みとの間に競合が存在するか否かを判断する。
【図面の簡単な説明】
【図１】本発明の好ましい実施例によるマイクロプロセッサ及びシステムのブロック形式による電気図。
【図２】本発明の好ましい実施例による自己変更コード制御回路の電気的ブロック図。
【図３】本発明の好ましい実施例による図２の自己修飾コード制御回路におけるフェッチ・アドレス窓保守ユニットの電気的ブロック図。
【図４】本発明の好ましい実施例による図２の自己変更コード制御回路における書き込み比較器のうちの一つのブロック及び概要形式による電気的ブロック図。
【図５】本発明の好ましい実施例による、フェッチ・アドレス窓を保守する際に、及びフェッチ・アドレスを保留書き込みアドレスと比較する際に図２の自己変更コード制御回路の動作を説明するフローチャート。
【図６】本発明の好ましい実施例による、書き込みアドレスをフェッチ・アドレス窓と比較する際に図２の自己変更コード制御回路の動作を説明するフローチャート。
【符号の説明】
２  データ処理システム
５  メモリ・サブシステム、
１０  マイクロプロセッサ
１１  レベル２キャッシュ
１６  レベル１キャッシュ
２６  フェッチ・ユニット
２８  プリデコード０段
３２  プリデコード１段
３４  デコーダ
３６  スケジューラ
４０、４００、４０１ロード／ストア・ユニット
４２、４２０、４２１ＡＬＵ
５０  ＳＭＣユニット
５２  フェッチ・アドレス窓保守ユニット
５４、５４０、５４１書き込み比較器
５５  共有書き込み比較器
５８、６０、６２  ラッチ
６１、６３  マルチプレクサ
６４、６６  比較器
６８  制御回路
【図１】
0003857400.tif 000002
【図２】
0003857400.tif 000003
【図３】
0003857400.tif 000004
【図４】
0003857400.tif 000005
【図５】
0003857400.tif 000006
【図６】
0003857400.tif 000007