(57)【要約】  命令がキャッシュに記憶される前に、プリデコードされるパイプライン方式のプロセッサにおいて、不正確にプリデコードされた命令が、パイプライン内の実行中に検出される。対応する命令は、キャッシュ内で無効にされ、命令は、分岐命令として評価するように強制される。具体的には、分岐命令は、“行われない（not taken）と予測ミスされた”と評価され、不正確にプリデコードされた命令のアドレスの分岐ターゲットアドレスをもつ。したがって、キャッシュラインは無効にされ、不正確にプリデコードされた命令が、メモリから正確なアドレスで再びフェッチされるようにする。次に、再びフェッチされた命令は、正確にプリデコードされ、キャッシュに書き込まれ、実行される。【選択図】    図２
2008521141.tif 000002
【特許請求の範囲】
【請求項１】
不正確にプリデコードされた命令を訂正する方法であって、
プリデコードのエラーを検出することと、
前記エラーを検出することに応答して、不正確にプリデコードされた命令のターゲットアドレスで、分岐訂正手続きを強制することとを含む方法。
【請求項２】
前記分岐訂正手続きを強制する前に、キャッシュ内の前記不正確にプリデコードされた命令を無効にすることをさらに含む請求項１記載の方法。
【請求項３】
前記分岐訂正手続きに応答して、メモリから前記命令をフェッチすることをさらに含む請求項２記載の方法。
【請求項４】
前記命令をプリデコードすること、および前記命令と、前記命令と関係付けられたプリデコード情報とを前記キャッシュに記憶することをさらに含む請求項３記載の方法。
【請求項５】
分岐訂正手続きが、分岐条件の真を強制することと、分岐予測の偽を強制することとを含む請求項１記載の方法。
【請求項６】
不正確にプリデコードされた命令のターゲットアドレスで分岐訂正手続きを強制することが、前記アドレスをターゲット アドレス レジスタに記憶することと、レジスタの分岐命令の訂正を強制することとを含む請求項１記載の方法。
【請求項７】
前記アドレスをターゲット アドレス レジスタに記憶することが、前記ターゲット アドレス レジスタが、２つのオペランドレジスタの内容に対する算術演算の結果をロードされる場合、計算された値を前記オペランドレジスタに記憶することを含み、前記値が、前記算術演算から前記アドレスを得るために計算される請求項６記載の方法。
【請求項８】
不正確にプリデコードされた命令のターゲットアドレスで分岐訂正手続きを強制することが、０の分岐の変位で、ＰＣに対する分岐命令の訂正を強制することを含む請求項１記載の方法。
【請求項９】
命令フェッチパス内に挿入されていて、命令と関係付けられたプリデコード情報を生成するプリデコーダと、
前記命令と関係付けられた不正確なプリデコード情報を検出し、前記命令を、前記命令のアドレスの分岐ターゲットアドレスをもつ、予測ミスされた分岐として実行することを強制するプリデコードエラー検出器および訂正器とを含むプロセッサ。
【請求項１０】
前記命令と前記プリデコード情報とを記憶するキャッシュメモリをさらに含み、前記プリデコードエラー検出器および訂正器が、前記プリデコードエラーを検出すると、前記キャッシュメモリ内の前記命令を無効にする請求項９記載のプロセッサ。
【請求項１１】
行われない（not taken）と予測され、行われる（taken）と評価された条件付き分岐に応答して、命令フェッチのために、訂正された分岐ターゲットアドレスを与える分岐訂正パスおよび分岐予測子をさらに含む請求項９記載のプロセッサ。
【請求項１２】
前記プリデコードエラー検出器および訂正器が、前記分岐訂正パスを使用して、前記不正確にプリデコードされた命令を、行われない（not taken）と予測ミスされた分岐命令として実行するように強制する請求項１１記載のプロセッサ。
【請求項１３】
不正確にプリデコードされた命令を訂正する方法であって、
プリデコードのエラーを検出することと、
前記エラーを検出することに応答して、前記命令をメモリからフェッチし、前記命令をプリデコードすることによって、前記プリデコードのエラーを訂正することとを含む方法。
【請求項１４】
メモリから前記命令をフェッチすることが、
キャッシュメモリ内の前記命令を無効にすることと、
前記命令を無効にした後で、前記キャッシュメモリから前記命令をフェッチすることを試みることとを含む請求項１３記載の方法。
【請求項１５】
メモリから前記命令をフェッチすることが、前記命令を、分岐ターゲットアドレスとして前記命令のアドレスをもつ、分岐として評価することを含む請求項１３記載の方法。
【請求項１６】
分岐として前記命令を評価することが、前記命令を、行われない（not taken）と予測ミスされた分岐として評価することを含む請求項１５記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概ね、プロセッサの分野、より具体的には、命令のターゲットアドレスで分岐訂正手続きを強制することによって、命令と関係付けられた間違いのあるプリデコードされたデータ（erroneous pre-decoded data）を訂正する方法に関する。
【背景技術】
【０００２】
マイクロプロセッサは、多様な応用において計算タスクを行う。向上したプロセッサの性能は、ソフトウェアの変化によって、より高速の動作または拡張された機能性、あるいはこの両者を可能にすることを、ほぼ常に望まれている。携帯型電子デバイスのような多くの埋め込まれた応用（embedded application）では、電力を節約することも、プロセッサの設計および実施における重要な目標である。
【０００３】
最新のプロセッサは、パイプライン方式のアーキテクチャを採用し、連続する命令が、実行時にオーバーラップされ、全体的なプロセッサのスループットを高めている。パイプラインによって円滑な実行を維持することは、高性能を実現するのに重要である。さらに加えて、最新のプロセッサは、最近アクセスしたデータおよび命令のローカルなコピーを記憶する高速のオンチップのキャッシュメモリを備えた階層メモリを使用している。この技術において知られている１つのパイプライン最適化技術は、命令をプリデコードすることである。すなわち、命令は、それらがメモリから読み出されるときに検査され、部分的にデコードされ、その命令に関するある情報（プリデコード情報として知られているもの）が、関係付けられた命令と共に、キャッシュメモリに記憶される。後で命令がキャッシュからフェッチされるとき、プリデコード情報もフェッチされ、命令を完全にデコードするのを助けるのに使用される。
【０００４】
時々、プリデコード情報は、エラーを含む。これらのエラーは、パイプライン内のデコード段中に検出され得る。エラーが発見されると、例外が発生し、パイプラインをフラッシュしなければならず、間違ってプリデコードされた命令を含む全命令を、再びフェッチしなければならない。このプロセスは、性能および電力管理の相当な低下を招く。
【発明の開示】
【課題を解決するための手段】
【０００５】
本発明は、１つの実施形態において、不正確にプリデコードされた命令(incorrectly pre-decoded data)を訂正する方法に関する。プリデコードのエラーが検出される。エラーの検出に応答して、分岐訂正手続きが、不正確にプリデコードされた命令のターゲットアドレスで強制される。
【０００６】
本発明は、別の実施形態において、プロセッサに関する。プロセッサは、命令フェッチパス内に挿入されたプリデコーダを含み、プリデコーダは、特定の命令と関係付けられたプリデコード情報を生成する。プロセッサは、命令と関係付けられた不正確なプリデコード情報を検出し、命令を、命令のアドレスの分岐ターゲットアドレスをもつ、予測ミスされた分岐として実行することを強制するプリデコードエラー検出器および訂正器をさらに含む。
【発明を実施するための最良の形態】
【０００７】
パイプライン方式のプロセッサのアーキテクチャは、各命令が多数の実行ステップをもつ複数の連続する命令の実行をオーバーラップさせることによって、並列処理を利用している。典型的な実行ステップは、命令フェッチ、デコード、実行、およびライトバックを含む。各ステップは、論理と、ラッチまたはレジスタのようなメモリ素子とを含む１つ以上のパイプ段によって、パイプラインで行われる。パイプ段は、一緒に接続され、パイプラインを形成する。命令は、パイプラインに入り、段によって連続的に処理される。前の命令が実行を完了する前に、追加の命令がパイプラインに入る。したがって、任意の所与の時間において、多数の命令がパイプライン内で処理され得る。連続する命令のストリーム内の命令間で並列処理を利用するこの能力は、向上したプロセッサの性能に相当に寄与する。理想的な条件の下で、パイプラインを一杯にする短い初期プロセスの後で、各パイプ段を１サイクルで完成させるプロセッサにおいて、命令は、１サイクルごとに、実行を完了させ得る。多数の現実世界の制約が、この理想的な条件が維持されるのを妨げる。しかしながら、パイプラインを一杯にし続けること、および円滑に流すことは、プロセッサ設計の共通の目標である。
【０００８】
一般的な今日のプロセッサも、メモリ階層を採用しており、メモリ階層は、少量の高速で高価なメモリをプロセッサの近くに置き、大量のより低速で廉価なメモリによってバックアップさせている。典型的なプロセッサのメモリ階層は、レジスタをプロセッサの最上位レベルに含み、１つ以上のオンチップのキャッシュメモリ(例えば、ＳＲＡＭ)と、場合によっては、レベル２（Level 2）またはＬ２キャッシュ(例えば、ＳＲＡＭ)と呼ばれるオフチップのキャッシュメモリと、メインメモリ(一般に、ＤＲＡＭ)と、ディスク記憶装置(磁気媒体)と、最低レベルにおけるテープまたはＣＤ(磁気または光媒体)とによってバックアップされている。携帯型電子デバイスのような埋め込まれた応用では、もしあるとすれば、ディスク記憶装置が制限され、したがって、(一般に、サイズが制限されている)メインメモリが、メモリ階層における最低レベルであり得る。
【０００９】
図１は、パイプライン方式のアーキテクチャおよび階層メモリ構造の両者を採用した典型的なプロセッサ10の機能ブロック図を示している。プロセッサ10は、制御論理14にしたがって、命令実行パイプライン12において命令を実行する。パイプラインは、パイプ段で編成された種々のレジスタまたはラッチ16、および１つ以上の算術論理演算ユニット(Arithmetic Logic Units, ALU)18を含む。汎用レジスタ(General Purpose Register, GPR)ファイル20は、メモリ階層の最上位を構成するレジスタを与えている。パイプラインは、命令側変換索引緩衝器(Instruction-side Translation Lookaside Buffer, ITLB)24によって管理されているメモリのアドレス指定および許可と、プリデコーダ21によって行われる命令の一部の初期デコードとで、命令キャッシュ（instruction cache, I-cache）22から命令をフェッチする。データは、主変換索引緩衝器(Translation Lookaside Buffer, TLB)28によって管理されているメモリのアドレス指定および許可で、データキャッシュ（Data Cache, D-cache）26からアクセスされる。種々の実施形態において、ＩＴＬＢは、ＴＬＢの一部のコピーを含み得る。その代わりに、ＩＴＬＢとＴＬＢとは、統合されることもある。同様に、プロセッサ10の種々の実施形態において、Ｉキャッシュ22およびＤキャッシュ26は、統合または一体構成にされることもある。Ｉキャッシュ22またはＤキャッシュ26、あるいはこの両者に存在しないアクセス（失敗）は、メモリインターフェース（interface, I/F）30の制御のもとで、メイン(オフチップ)メモリ32へのアクセスをもたらす。プロセッサ10は、入力／出力（Input/Output, I/O）インターフェース34を含み、種々の周辺機器36へのアクセスを制御し得る。当業者には、プロセッサ10の多数のバリエーションが可能であることが分かるであろう。例えば、プロセッサ10は、ＩキャッシュおよびＤキャッシュの何れかまたは両者のための二次レベル（second-level, L2）のキャッシュを含み得る。さらに加えて、プロセッサ10内に示されている機能ブロックの１つ以上が、特定の実施形態から省かれ得る。
【００１０】
プロセッサの性能を向上し、電力消費量を低減する１つの既知の技術は、プリデコーディングとして知られている。プリデコーダ21は、メインメモリ32と命令キャッシュ22との間のパス内に挿入された論理を含む。メモリからフェッチされた命令の幾つかは、プリデコードされ、プリデコード情報が生成され、命令と共にＩキャッシュ22に書き込まれ得る。プリデコード情報は、命令が実行のためにキャッシュからフェッチされるとき、命令をデコードする１つ以上のデコードパイプ段を助け得る。例えば、プリデコーダは、可変長命令の長さを判断し、可変長命令の正確なビット数を検索するデコードパイプ段を助けるプリデコード情報をキャッシュへ書き込み得る。種々の情報が、プリデコードされ、Ｉキャッシュ22に記憶され得る。
【００１１】
プリデコーダ21は、１つ以上のデコードパイプ段から論理を取り去り、論理のより早期の使用を可能にし、場合によっては、より短いマシンサイクル時間を可能にすることによって、性能を向上する。さらに加えて、プリデコーダ21は、プリデコード動作を１回行うことによって、電力消費量を低減する。Ｉキャッシュ22のヒット率は、通常、９０％と高いので、命令がＩキャッシュ22から実行されるたびに、論理演算を行う必要を無くすことによって、相当な電力の節約が実現され得る。
【００１２】
時々、プリデコーダ21は、エラーを生じる。例えば、パラメータまたは即値のようなデータが、命令と共にメモリに記憶されたとき、単にキャッシュラインの始めからバイトを数えることによって命令の長さを判断するプリデコード動作は、１つ以上のこのようなパラメータまたは即値のバイトを、命令として間違って識別し、ラインをさらにダウンし得る。他のタイプのエラー、例えば、プリデコーダ21またはＩキャッシュ22の何れかにおけるランダムなビットエラーも起こり得る。これらのエラーは、１つ以上のデコードパイプ段において発見されるはずであり、通常は、例外を発生し、パイプラインをフラッシュし、やり直すことを要求し、それによって、性能および電力消費量のペナルティを招くことになる。
【００１３】
例外、およびそれに伴うパイプライン12のフラッシュをさせることを要求しない、プリデコードのエラーを訂正するやり方がある。図２は、プロセッサ10およびパイプライン12の一部を示す機能ブロック図である。図２は、命令キャッシュ アドレス レジスタ(Instruction Cache Address Register, ICAR)48も示しており、ＩＣＡＲ48は、Ｉキャッシュ22にインデックスを付ける。ＩＣＡＲ48にロードされるアドレスは、次のフェッチのアドレス計算回路46によって生成されるか、または選択されるか、あるいはこの両者を行われる。命令は、メモリ32(またはＬ２キャッシュ)からフェッチされると、プリデコーダ21によってプリデコードされ、プリデコード情報23が、対応する命令と共に、命令キャッシュ22に記憶される。
【００１４】
パイプライン12において、命令と、関係付けられたプリデコードされた情報23とが、Ｉキャッシュ22からフェッチされ、デコード論理40によって少なくとも部分的にデコードされ、結果は、ＤＣＤ１のパイプ段ラッチ42に記憶される。多くのプロセッサ10において、ＤＣＤ１のパイプ段は、分岐予測子（branch predictor）を含む。分岐予測子が、分岐が行われる（taken）ことになると予測する場合、パイプ段は、分岐ターゲットアドレスを計算し、それを、分岐予測アドレスパス44に沿って次のフェッチのアドレス計算論理46に与え得る。これは、パイプ段から次のフェッチのアドレス計算論理46へのアドレスパスの一例である(行われない（not taken）と予測された分岐は、単に、連続する命令をフェッチし続けることを許すことになる)。
【００１５】
例示的な実施形態において、フェッチされ、部分的にデコードされた命令は、次に、パイプ段ＤＣＤ２に流れる。これは、不正確なプリデコードの検出および訂正論理50を含む。プリデコード情報内のエラーが検出されると、ＤＣＤ２のパイプ段は、既に記載したように、例外を知らせ、パイプライン12をフラッシュし得る。
【００１６】
その代わりに、プリデコードのエラーは、メモリ32から命令を再びフェッチすることによって訂正されることもある。これを達成する１つのやり方では、キャッシュ22内の命令を無効にし、命令アドレスを、パス54に沿って次のフェッチのアドレス回路46へ与える。次に、このアドレスは、ＩＣＡＲ48へロードされることになる。命令はキャッシュ22において無効にされているので、キャッシュへのアクセスは失敗し、メインメモリ32へアクセスすることになる。次に、メインメモリ32からフェッチされた命令は、プリデコーダ21によって正確にプリデコードされ、命令キャッシュ22内に再び置かれることになる。次に、命令は、正確なプリデコード情報23と共に、キャッシュ22から再びフェッチされ得る。
【００１７】
次のフェッチのアドレス計算論理46は、通常、ほとんどのプロセッサのデータフローのクリティカルパス上にあり、したがって、マシンサイクル時間を制限する。不正確なプリデコードと関係付けられた命令アドレスのためのパス54を加えることは、次のフェッチのアドレス計算46に論理を追加することになり、マシンサイクル時間を増加させ、性能を下げる。プリデコードされた情報23が誤っていることはほとんどないことを考慮すると、この性能のヒットは、とくに著しく悪い。通常の場合を犠牲にして、稀な場合のための性能を最適化することは、一般的に、全体的なプロセッサの性能を下げる。
【００１８】
本発明の１つの実施形態にしたがうと、次のフェッチのアドレス計算機46への不正確なプリデコードのパス54は、(図２において点線によって示されているように)無くされる。不正確なプリデコードの検出および訂正論理50は、次のフェッチのアドレス計算機46への専用パスを与えるのではなく、パイプライン12に、不正確にプリデコードされた命令を、分岐命令として評価させる。プリデコード訂正論理50は、不正確にプリデコードされた命令のセマンティクス（semantics）を、分岐命令のものへ変更するか、または、その代わりに、パイプラインによって運ばれるフラグであって、命令を分岐として扱うパイプ段を実行することを示すフラグを設定し得る。
【００１９】
具体的には、不正確にプリデコードされた命令は、行われない（not taken）と予測され、行われる（taken）と評価された分岐として評価され、不正確にプリデコードされた命令のアドレスである分岐ターゲットアドレスをもつ。（実施の詳細に応じて）パイプライン12を下ったある地点において、命令は、実行パイプ段（execute pipe stage, EXE）56によって評価され、ＥＸＥ56は、“分岐が行われる(branch taken)”条件を評価し、分岐ターゲットアドレスを生成する。分岐ターゲットアドレスは、分岐訂正パス58に沿って、次のフェッチのアドレス計算機46に与えられる。分岐条件評価論理、分岐ターゲットアドレス生成論理、分岐訂正パス58、および次のフェッチのアドレス計算器46内の関連する制御論理は、分岐の振る舞いを予測する全てのパイプラインプロセッサ10内に既に存在している。
【００２０】
図３は、分岐訂正論理の１つの可能な実施の機能図である。ＥＸＥパイプ段ラッチ56内には、行われると予測された分岐(Branch Predicted Taken, BPT)のビット60と、分岐条件評価(branch condition evaluation, COND)のビット62とがある。分岐予測子によって、パイプライン12において早期に、分岐が行われる（taken）と予測されたときは、ＢＰＴビット60は、１であり、分岐が行われない（not taken）と予測されたときは、０である。分岐が行われる（taken）と評価するときは、ＣＯＮＤビット62は、１であり、分岐が行われない(not taken)と評価するときは、０である。これらの２つのビットは、ゲート66によって示されているように、ＸＯＲされ、次のフェッチのアドレス計算器46に与えられるマルチプレクサの選択または同様の制御信号を生成し、分岐訂正パス58が次のフェッチのアドレスとして選択されるべきであることを示す。次のテーブル１は、ＸＯＲ66の真理値表を示している。
【表１】
2008521141.tif 000003
【００２１】
条件評価ビット62は、マルチプレクサ68への選択入力としても働き得る。選択入力は、次のアドレスか、計算された分岐ターゲットアドレス64かを選択し、分岐訂正パス58上に置かれるアドレスを生成する。
【００２２】
本発明の１つの実施形態にしたがうと、不正確にプリデコードされた命令を処理するために、ＢＰＴビット60を０に設定または強制し、ＣＯＮＤビット62を１に設定または強制し、“行われない（not taken）と予測ミスされた分岐”の状態を強制し得る。この場合は、計算された分岐ターゲットアドレス64が、分岐訂正パス58によって次のアドレスフェッチ回路46へ導かれることになる。
【００２３】
本発明の１つの実施形態にしたがうと、不正確にプリデコードされた命令は、０の分岐の変位フィールドで、ＰＣに対する分岐命令として評価される。この命令が、ＥＸＥパイプ段56において評価されるとき、計算された分岐ターゲットアドレスは、(ゼロのオフセットをもつ)間違ってプリデコードされた命令のアドレスを含むことになる。本発明の別の実施形態では、不正確にプリデコードされた命令は、レジスタの分岐命令として評価され、さらに加えて、分岐ターゲットアドレスのレジスタは、不正確にプリデコードされた命令のアドレスをロードされる。分岐ターゲットアドレスのレジスタが、算術演算によってロードされるとき、オペランドレジスタは、不正確にプリデコードされた命令のアドレスを生成するように、ロードされ得る。不正確にプリデコードされた命令を、命令自体のターゲットアドレスをもつ、行われないと予測ミスされた分岐命令（mispredicted not taken branch instruction）として評価する多数の他の方法は、当業者に容易に明らかになり、本発明の範囲内に含まれる。
【００２４】
図２を再び参照すると、行われないと予測ミスされたと強制された分岐命令（forced mispredicted not taken branch instruction）は、ＥＸＥ段56において実行され、不正確にプリデコードされた命令のアドレスを含んでいる分岐ターゲットアドレスが、分岐訂正パス58上に置かれる。このアドレスは、次のフェッチのアドレス計算器46によって選択され、ＩＣＡＲ48にロードされ、Ｉキャッシュ22において、命令フェッチが行われる。
【００２５】
不正確なプリデコードの検出および訂正論理50が、不正確にプリデコードされた命令を含んでいるキャッシュラインを無効にしているので、Ｉキャッシュ22へのアクセスは失敗し、命令をメモリ32(またはＬ２キャッシュ)からフェッチすることを強制することになる。次に、命令は、プリデコーダ21によって正確にプリデコードされ、正確なプリデコード情報23と共に、Ｉキャッシュ22へ置かれることになる。次に、命令およびプリデコード情報23は、Ｉキャッシュ22から再びフェッチされ、パイプライン12において、正確にデコードされ、正確に実行され得る。例えば、メモリが、キャッシュラインの始めではなく、命令の正確なアドレスへアクセスするので、命令を組み入れられたデータによるオフセットエラーは、プリデコーダ21において再び起こらない。
【００２６】
メモリアクセスについてのこれまでの記述は、概念であることに注意すべきである。任意の所与の実施では、Ｉキャッシュ22へのアクセスと並行して、メモリ32へのアクセスが行われ得る；Ｉキャッシュ22の失敗が予測され、したがって、Ｉキャッシュ22へのアクセスは回避され得る；Ｉキャッシュ22への書き込みと並行して、メモリ32へのアクセス結果がパイプライン12へ直接に入れられ得る、等である。概して、本発明は、動作において、上述から外れ得る全てのメモリまたはキャッシュ、あるいはこの両者の性能の最適化を含む。
【００２７】
本発明は、本明細書において、その特定の特徴、態様、および実施形態に関して記載されたが、多数のバリエーション、変更、および他の実施形態が、本発明の広い範囲内で可能であり、したがって、全てのバリエーション、変更、および実施形態が、本発明の範囲内であると見なされることが明らかであるだろう。したがって、本発明の実施形態は、全ての態様において、例示的であって、制限的でないと解釈され、本発明の特許請求項の意味および相当する範囲内に入る変更は全て、その中に含まれることを意図される。
【図面の簡単な説明】
【００２８】
【図１】プロセッサの機能ブロック図。
【図２】メモリ、プリデコーダ、命令キャッシュ、およびプロセッサのパイプラインの一部の機能ブロック図。
【図３】分岐訂正論理の機能ブロック図。
【符号の説明】
【００２９】
16・・・レジスタまたはラッチ、18・・・算術論理演算ユニット、36・・・周辺機器、66・・・ゲート、68・・・マルチプレクサ。
【図１】
2008521141.tif 000004
【図２】
2008521141.tif 000005
【図３】
2008521141.tif 000006
【国際調査報告】
2008521141.tif 000007
2008521141.tif 000008