(57)【特許請求の範囲】
【請求項１】
データを処理するための装置であって、
メモリからフェッチされたプログラム命令に応答し、プリデコードオペレーションを前記プログラム命令に実行してプリデコードされた命令を形成するプリデコード回路と、
前記プリデコード回路に接続されて、前記プリデコードされた命令を格納するキャッシュメモリと、
前記キャッシュメモリから読み出されたプリデコードされた命令に応答して、制御信号を生成するデコード回路と、
前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行する処理回路と
を具備し、
前記プログラム命令は、複数の異なる命令セットからの命令であり、
前記プリデコード回路は、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、
前記デコード回路の共有される部分は、前記制御信号を生成して前記共有される機能に関して前記処理回路を制御し、
前記プリデコードされた命令の前記共有されるフォーマットは、前記第１の命令セットおよび前記第２の命令セットからの前記プログラム命令のフォーマットと異なり、
前記プリデコードされた命令が、前記第１の命令セットおよび前記第２の命令セットからのプログラム命令により共有されない機能を表すために使用される１つまたは複数のビットフィールドを含み、
前記１つまたは複数のビットフィールドのうちの同じビットフィールドが、前記第１の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能を表すために使用されるとともに、前記第２の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能と異なる第２の機能を表すために使用されることを特徴とする装置。
【請求項２】
前記第１の命令セットからのプログラム命令が、条件コードを含み、
前記第２の命令セットからのプログラム命令が、条件コードを含まず、
前記１つまたは複数のビットフィールドが、前記第１の命令セットからのプログラム命令に対する条件コードを表すために使用されることを特徴とする請求項１に記載の装置。
【請求項３】
前記第１の命令セットからのプログラム命令が、固定長命令であり、
前記第２の命令セットからのプログラム命令が、上位部分と下位部分とを有する少なくともいくつかのプログラム命令を含む可変長命令であり、
前記１つまたは複数のビットフィールドが、前記第２の命令セットからの少なくともいくつかのプログラム命令に対する上位部分と下位部分とを識別するために使用されることを特徴とする請求項１に記載の装置。
【請求項４】
前記第２の命令セットのうちの少なくともいくつかのプログラム命令が、予測不可能な挙動を有し、
対応するプリデコードされた命令が、前記第２の命令セットのプログラム命令と共有されない機能を有する前記第１の命令セットのプログラム命令を表すために使用されることを特徴とする請求項１に記載の装置。
【請求項５】
前記第２の命令セットのプログラム命令と共有されない前記機能が、第１のレジスタ内に格納されているオペランドを、第２のレジスタで指定された量だけシフトすることを含むことを特徴とする請求項４に記載の装置。
【請求項６】
前記第２の命令セットの命令のうちの予測不可能な挙動を有する命令であって、即値により指定された量だけ、前記第１のレジスタ内に格納されているオペランドをシフトする動作を含む処理のための命令に対応する、プリデコードされた命令内の前記即値が配置される位置に、前記第２のレジスタを指定するフィールドが、配置されることを特徴とする請求項５に記載の装置。
【請求項７】
前記デコード回路の前記共有される部分が使用されない前記第１の命令セットの命令に対応するプリデコードされた命令内のビットフィールドが、前記デコード回路の非共有部分の使用を選択するように所定の値に設定されることを特徴とする請求項１に記載の装置。
【請求項８】
前記複数の命令セットが、第３の命令セットを含み、
前記プリデコード回路が、前記第２の命令セットのうちの１つの複合命令に対応する複合機能を有する前記第３の命令セットの隣接するフェッチされたプログラム命令に応答し、前記複合命令に対応するプリデコードされた命令を生成することを特徴とする請求項１に記載の装置。
【請求項９】
前記プリデコード回路が、プログラム命令の現在のストリームのプリデコードを打ち切るためにプログラムフローのリダイレクションに対応するプログラム命令の検出に応答することを特徴とする請求項１に記載の装置。
【請求項１０】
データを処理するための装置であって、
プリデコードオペレーションをメモリからフェッチされたプログラム命令に実行してプリデコードされた命令を形成するプリデコード手段と、
前記プリデコード手段に接続され、前記プリデコードされた命令を格納するキャッシュ手段と、
前記キャッシュ手段から読み出されたプリデコードされた命令に応答して、制御信号を生成するデコード手段と、
前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行する処理回路と
を具備し、
前記プログラム命令は、複数の異なる命令セットからの命令であり、
前記プリデコード手段は、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、
前記デコード手段の共有される部分は、前記制御信号を生成して前記共有される機能に関して前記処理回路を制御し、
前記プリデコードされた命令の前記共有されるフォーマットは、前記第１の命令セットおよび第２の命令セットからの前記プログラム命令のフォーマットと異なり、
前記プリデコードされた命令が、前記第１の命令セットおよび前記第２の命令セットからのプログラム命令により共有されない機能を表すために使用される１つまたは複数のビットフィールドを含み、
前記１つまたは複数のビットフィールドのうちの同じビットフィールドが、前記第１の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能を表すために使用されるとともに、前記第２の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能とは異なる第２の機能を表すために使用されることを特徴とする装置。
【請求項１１】
データを処理する方法であって、
プリデコードオペレーションをメモリからフェッチされたプログラム命令に実行してプリデコードされた命令を形成するステップと、
前記プリデコードされた命令をキャッシュメモリに格納するステップと、
前記キャッシュメモリから読み出されたプリデコードされた命令に応答して、制御信号を生成するステップと、
前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行するステップと
を有し、
前記プログラム命令は、複数の異なる命令セットからの命令であり、
プリデコードオペレーションを実行する前記ステップは、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、
前記制御信号を生成する前記ステップは、デコード回路の共有される部分を使用して、前記制御信号を生成し、前記共有される機能に関して前記処理オペレーションを制御し、
前記プリデコードされた命令の前記共有されるフォーマットは、前記第１の命令セットおよび第２の命令セットからの前記プログラム命令のフォーマットと異なり、
前記プリデコードされた命令が、前記第１の命令セットおよび前記第２の命令セットからのプログラム命令により共有されない機能を表すために使用される１つまたは複数のビットフィールドを含み、
前記１つまたは複数のビットフィールドのうちの同じビットフィールドが、前記第１の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能を表すために使用されるとともに、前記第２の命令セットからのプログラム命令をプリデコードすることにより生成されたプリデコードされた命令内の第１の機能と異なる第２の機能を表すために使用されることを特徴とする方法。
【請求項１２】
前記第１の命令セットからのプログラム命令が、条件コードを含み、
前記第２の命令セットからのプログラム命令が、条件コードを含まず、
前記１つまたは複数のビットフィールドが、前記第１の命令セットからのプログラム命令に対する条件コードを表すために使用されることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第１の命令セットからのプログラム命令が、固定長命令であり、
前記第２の命令セットからのプログラム命令が、上位部分と下位部分とを有する少なくともいくつかのプログラム命令を含む可変長命令であり、
前記１つまたは複数のビットフィールドが、前記第２の命令セットからの少なくともいくつかのプログラム命令に対する上位部分と下位部分とを識別するために使用されることを特徴とする請求項１１に記載の方法。
【請求項１４】
前記第２の命令セットのうちの少なくともいくつかのプログラム命令が、予測不可能な挙動を有し、
対応するプリデコードされた命令が、前記第２の命令セットのプログラム命令と共有されない機能を有する前記第１の命令セットのプログラム命令を表すために使用されることを特徴とする請求項１１に記載の方法。
【請求項１５】
前記第２の命令セットのプログラム命令と共有されない前記機能が、第１のレジスタ内に格納されているオペランドを、第２のレジスタで指定された量だけシフトすることを含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記第２の命令セットの命令のうちの予測不可能な挙動を有する命令であって、即値により指定された量だけ、前記第１のレジスタ内に格納されているオペランドをシフトする動作を含む処理のための命令に対応する、プリデコードされた命令内の前記即値が配置される位置に、前記第２のレジスタを指定するフィールドが、配置されることを特徴とする請求項１５に記載の方法。
【請求項１７】
前記デコード回路の前記共有される部分が使用されない前記第１の命令セットの命令に対応するプリデコードされた命令内のビットフィールドが、前記デコード回路の非共有部分の使用を選択するように所定の値に設定されることを特徴とする請求項１１に記載の方法。
【請求項１８】
前記複数の命令セットが、第３の命令セットを含み、
プリデコードの前記ステップが、前記第２の命令セットのうちの１つの複合命令に対応する複合機能を有する前記第３の命令セットの隣接するフェッチされたプログラム命令に応答し、前記複合命令に対応するプリデコードされた命令を生成することを特徴とする請求項１１に記載の方法。
【請求項１９】
プリデコードの前記ステップが、プログラム命令の現在のストリームのプリデコードを打ち切るためにプログラムフローのリダイレクションに対応するプログラム命令の検出に応答することを特徴とする請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令をプリデコードするためのデータ処理装置および方法に関する。プリデコードされた命令は、その後で処理回路によってデコードされて使用されるために、キャッシュに格納される。
【背景技術】
【０００２】
典型的なデータ処理装置では、処理回路の実行パイプライン内での実行に先立って、命令のデコード作業に著しいパワーが消費される。この問題は、複数の命令セットをサポートする処理回路では、様々な命令セットの命令をデコードするために複数の独立したデコーダを用意する必要があるために、特に問題となる。例えば、いくつかの実装では、プロセッサのパワーの約15%が、命令デコーダにより消費される可能性がある。
【０００３】
これは、典型的には、処理回路によって必要とされる命令およびデータをキャッシュするために、データ処理装置内に１つまたは複数のキャッシュが用意されるケースである。キャッシュ階層の特定のレベルにおいて、命令キャッシュとデータキャッシュとが別々に用意される(多くの場合、ハーバードアーキテクチャと称される)か、またはそれとは別に、命令とデータとを格納するユニファイドキャッシュが用意される(多くの場合、フォンノイマンアーキテクチャと称される)。命令がメモリからフェッチされ、キャッシュ内に格納される場合に、いくつかの既知のシステムでは、これまで、パフォーマンス重視の観点からプリデコードメカニズムを採用していた。このようなメカニズムによれば、命令は、キャッシュ内への格納に先立ってプリデコードされるが、そのような場合、プリデコードプロセスにより生成される付加情報を収められるように、キャッシュには、主記憶に格納されている命令よりも広いフォーマットで命令を格納することが多い。命令が後からデコードされ、実行されるときにパフォーマンスの改善をアシストするため、キャッシュ内に格納されているプリデコード命令に収められている付加情報を使用することで、分岐命令を識別し、命令のクラス(例えば、ロード/ストア命令、コプロセッサ命令など)を識別して特定の命令を特定の実行パイプラインにディスパッチする複数命令発行回路を遅延アシストし、可変長命令セットの命令境界を識別してきた。
【０００４】
例えば、非特許文献１の論文「Performance Evaluation Of A Decoded Instruction Cache For Variable Instruction Length Computers」では、プリデコード命令のキャッシュへの格納について説明されている。非特許文献２の「The S-1 Project: Developing High-Performance Digital Computers」では、S1 Mark IIAコンピュータについて説明しているが、その論文では、デコード命令キャッシュは、36ビット命令ワードを56ビット命令キャッシュフォーマットに拡張し、命令のデコード時間を短縮した(非特許文献３の「Livermore S-1 Supercomputer - A Short History」という論説も参照されたい)。さらに、分岐を事前識別し、命令境界を事前識別するためにプリデコードメカニズムを使用するというアイデアは、非特許文献４の「AMD K5 Processor Data sheet」において説明されており、そこでは、命令バイト毎に4ビットを加えて、個々のx86命令がその後の翻訳のため必要とするRops(RISCオペレーション)の開始、終了、opコード位置、および個数を識別する方法について説明している。
【０００５】
処理回路を制御する制御信号を生成するプリデコードされた命令をデコードするために使用されるデコード回路に付随するオーバーヘッドを低減すると都合がよい。このデコード回路のゲート数を減らすことで、装置の複雑度、コスト、および消費電力が低減される。
【０００６】
米国特許第5,568,646号から、複数の命令セットをサポートするプロセッサを実現し、命令パイプラインのデコードステージ内のプログラマブルロジックアレーを使用して、第１の命令セットの命令の複数のビットのうちの少なくとも一部を第２の命令セット内の対応するビットにマップすることが知られている。第１の命令セットの命令は、第２の命令セットの命令に少なくとも部分的にマップされ、マップされたバージョンは、次いで、他のパイプラインステージを制御する少なくともいくつかの制御信号を生成するために使用される。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許第５５６８６４６号明細書
【非特許文献】
【０００８】
【非特許文献１】G Intrater et al., "Performance Evaluation Of A Decoded Instruction Cache For Variable Instruction Length Computers", IEEE Transactions on Computers, Volume 43, number 10, page 1140 to 1150, October 1994
【非特許文献２】L. Curtis Widdoes, Jr., "The S-1 Project: Developing High-Performance Digital Computers", Lawrence Livermore National Laboratory, 11 December 1979
【非特許文献３】"Livermore S-1 Supercomputer - A Short History", http://www.cs.clemson.edu/~mark/s1.html
【非特許文献４】AMD K5 Processor Data sheet, Publication no. 18522E-0, Sept.1996, Section 4.5, Innovative x86 Instruction Predecoding, page 6
【発明の概要】
【課題を解決するための手段】
【０００９】
一態様から見ると、本発明は、データを処理するための装置を実現するものであり、メモリからフェッチされたプログラム命令に応答し、プリデコードオペレーションを前記プログラム命令に実行してプリデコードされた命令を形成するプリデコード回路と、前記プリデコード回路に接続されて、前記プリデコードされた命令を格納するキャッシュメモリと、前記キャッシュメモリから読み出されたプリデコードされた命令に応答して、制御信号を生成するデコード回路と、前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行する処理回路とを具備し、前記プログラム命令は、複数の異なる命令セットからの命令であり、前記プリデコード回路は、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、前記デコード回路の共有される部分は、前記制御信号を生成して前記共有される機能に関して前記処理回路を制御する。
【００１０】
本発明の技術では、プリデコード回路が、共有される機能を表す共有されるフォーマットを使用して異なる命令セットからの命令をプリデコードされた命令にマップする機会を与えることが認識されている。このため、デコード回路の共有される部分を使用して、プリデコードされた命令から制御信号を生成することが容易である。このようにして、デコード回路に関わるオーバーヘッドは、その少なくとも一部が異なる命令セットにより共有されるため、低減され得る。さらに、プリデコードステージにおいてこのマッピングを共有されるフォーマットに実行することにより、このマッピングを実行する際に消費されるエネルギーをプリデコードされた命令の複数回の使用で償却することができるが、それというのも、プリデコードされた命令は、典型的には、命令キャッシュから何回もフェッチされるからである。さらに、マッピングをプリデコードステージで実行することにより、タイミング制約条件を満たすのを難しくするデコードステージの余分な処理をしなくて済む。
【００１１】
複数の命令セットからのすべての命令の完全な機能が共有され得ることは理解されるが、異なる命令セットでは、共有されない一部の機能を有する可能性が高く、したがっていくつかの実施態様では、プリデコードされた命令は、第１の命令セットおよび第２の命令セットからのプログラム命令により共有されない機能を表すために使用される１つまたは複数のビットフィールドを備える。
【００１２】
共有されえない機能の一実施例として、第２の命令セットが条件コードを含まない場合に第１の命令セットで条件コードを使用することが挙げられる。条件コードに応答する付加的機能は、前の処理活動の結果に基づき実行または非実行をゲートする働きをする重なり合わない機能を表すために使用される１つまたは複数のビットフィールドにより実現され得る。
【００１３】
命令セットはすべて、固定長とすることも可能であろうが、いくつかの実施態様では、第２の命令セットの命令は、可変長命令であり、上位部分と下位部分とを有する少なくともいくつかのプログラム命令を含む。このようなコンテキストにおいて、デコード回路によるデコードがしやすいようにこのような命令の上位部分および下位部分を識別するために１つまたは複数のビットフィールドが使用され得る。
【００１４】
上記の技術に関わる制約は、第１の命令セットおよび第２の命令セットからの命令により実現される様々な異なる種類の機能を表すために使用され得るプリデコードされた命令内で利用可能な命令ビットである。いくつかの実施態様では、第２の命令セットのうちの少なくともいくつかのプログラム命令は、予測不可能な挙動を有するものとして定義され、したがって、対応するプリデコードされた命令は、第２の命令セットのプログラム命令と共有されない機能を有する第１の命令セット内のプログラム命令を表すために使用され得るが、それは、第２の命令セットが、予測可能な挙動を有するその固有の命令を表すためにプリデコードされた命令内でこの命令ビット空間を正当に使用しないからである。
【００１５】
異なる命令セットによって共有されない機能の一実施例は、第２のレジスタで指定された量だけシフトされた第１のレジスタ内に格納されている値として指定されたオペランドのサポートである。このようなコンテキスト内で、第２のレジスタを指定するフィールドは、異なる命令セットの命令の予測不可能なバリアントを表すプリデコードされた命令内のシフト量を指定する即値に対応するプリデコードされた命令内の位置に配置することができ、しかもその予測不可能なバリアントでは再利用される即値により指定された量だけシフトされた第３のレジスタ内に格納されている値をオペランドとして使用する。
【００１６】
命令セットのうちの少なくとも１つの命令セット内に、デコード回路を共有することが可能でないいくつかの命令があり得、したがって、プリデコードされた命令内のビットフィールドは、デコード回路の非共有部分の使用を選択してこの非共有機能をデコードするために使用できる。
【００１７】
またプリデコード回路を使用することで、第３の命令セット内の隣接する命令が、第２の命令セットの１つの命令に対応する複合機能を有すると識別されたときに、その第３の命令セットのプログラム命令間のマッピングを実行することにより消費エネルギーを削減することができる。このような状況において、プリデコード回路は、第１の命令セットで指定された隣接する命令の代わりに第２の命令セットの１つの命令に対応するプリデコードされた命令を生成することができる。この１つの命令は、次いで、２つの前の命令の代わりに実行され、これにより時間とエネルギーを節約することができる。
【００１８】
プリデコード回路は、さらに、プログラム命令の現在のストリームのプリデコードを打ち切るためにプログラムフローのリダイレクションに対応するプログラム命令の検出に応答するようにすることによりエネルギーを節約することができる。プログラムフローのリダイレクションが生じた場合、命令ストリーム内の後続の命令のプリデコードで消費されるエネルギーは、無駄になる可能性が高いが、それは、プログラムフローが異なるポイントにリダイレクトされ、それらのプロデコードされた命令が使用されないからである。
【００１９】
別の態様から見ると、本発明は、データを処理するための装置を実現するものであり、プリデコードオペレーションをメモリからフェッチされた前記プログラム命令に実行してプリデコードされた命令を形成するプリデコード手段と、前記プリデコード回路に接続され、前記プリデコードされた命令を格納するキャッシュ手段と、前記キャッシュメモリから読み出されたプリデコードされた命令に応答して、制御信号を生成するデコード手段と、前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行する処理回路とを具備し、前記プログラム命令は、複数の異なる命令セットからの命令であり、前記プリデコード手段は、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、前記デコード手段の共有される部分は、前記制御信号を生成して前記共有される機能に関して前記処理回路を制御する。
【００２０】
さらなる態様から見ると、本発明は、データを処理する方法を実現するものであり、プリデコードオペレーションをメモリからフェッチされたプログラム命令に実行してプリデコードされた命令を形成するステップと、前記プリデコードされた命令をキャッシュメモリに格納するステップと、前記キャッシュメモリから読み出されたプリデコードされた命令に応答して、制御信号を生成するステップと、前記制御信号に応答して、前記プリデコードされた命令により指定された処理オペレーションを実行するステップとを有し、前記プログラム命令は、複数の異なる命令セットからの命令であり、プリデコードオペレーションを実行する前記ステップは、第１の命令セットからのプログラム命令と第２の命令セットからのプログラム命令とを、共有される機能を表す共有されるフォーマットを有するプリデコードされた命令にマップし、前記制御信号を生成する前記ステップは、デコード回路の共有される部分を使用して、前記制御信号を生成し、前記共有される機能に関して前記処理回路を制御する。
【００２１】
本発明は、例示のみを目的として、添付の図面に示されている実施形態を参照しつつ、さらなる説明がなされる。
【図面の簡単な説明】
【００２２】
【図１】一実施形態によるデータ処理装置を例示した概略図である。
【図２】一実施形態によるデータ処理装置により実行される一連のステップを例示した流れ図である。
【図３】異常な指標を与えたときにプリデコード回路により実行される一連のステップの詳細を例示した流れ図である。
【図４】命令をフェッチして実行するときに処理回路により実行される一連のステップを例示した流れ図である。
【図５】データ処理装置の特定の例示的な一実施形態を示す図である。
【図６】プリデコードが実行される前の２つの命令フォーマットを例示した図である。
【図７】プログラム命令を表すデータをメモリ空間内にどのように格納できるかを示す図である。
【図８Ａ】プリデコードエラーが発生する可能性のあるいくつかの考えられる状況を例示した図である。
【図８Ｂ】プリデコードエラーが発生する可能性のあるいくつかの考えられる状況を例示した図である。
【図８Ｃ】プリデコードエラーが発生する可能性のあるいくつかの考えられる状況を例示した図である。
【図８Ｄ】プリデコードエラーが発生する可能性のあるいくつかの考えられる状況を例示した図である。
【図９】一実施形態によるプリデコード後の２つの例示的な命令のフォーマットを示す図である。
【図１０】プリデコードエラーが発生する場合、または発生しない場合の状況を一覧にした表である。
【図１１】いくつかの実施形態におけるデータ処理システムのオペレーションを例示した流れ図である。
【図１２】一実施形態によるプリデコードされたThumb32命令内の不完全フィールドの使用を例示した図である。
【図１３】一実施形態による、キャッシュライン境界をまたぐThumb32命令に対するデータ処理装置を通る２つの考えられる経路を例示した図である。
【図１４】一実施形態によるプリデコードオペレーションシーケンスを例示した流れ図である。
【図１５】一実施形態によるプリデコード後の２つの例示的な命令のフォーマットを示す図である。
【図１６】一実施形態による図11のステップ202を実装するために実行されるステップを詳細に示す流れ図である。
【図１７】一実施形態による命令キャッシュ内に用意されたコンポーネントを例示した図である。
【図１８】一実施形態により、投機的プロセッサ状態を格納するようにキャッシュのタグRAMのそれぞれのエントリがどのように拡張されるかを例示した図である。
【図１９】一実施形態で使用されるような2ウェイセット連想命令キャッシュの構成を例示した概略図である。
【図２０】一実施形態によるプリデコードオペレーションを例示した流れ図である。
【図２１】一実施形態によるキャッシュルックアッププロシージャを例示した図である。
【図２２】データ処理装置内の複合レベル2キャッシュにプリデコーダ回路が関連付けられている一実施形態を例示した図である。
【図２３】図22の複合レベル2キャッシュ内のそれぞれのキャッシュラインに関連して付加的命令/データ識別子値の使用例を示す図である。
【図２４】異なる命令セット内の命令に対応するプリデコードされた命令をデコードするために使用される共有されている部分を含むデコード回路を有する処理パイプラインの一部を例示した概略図である。
【図２５】ARM命令の異なる部分がThumb32命令と共有されるフォーマットを有するプリデコードされた命令内にどのようにプリデコードされ得るかを例示した図である。
【図２６】Thumb32およびARM命令が共有される機能を表すため共有されるフォーマットを有するプリデコードされた命令内にそれぞれどのようにプリデコードされ得るかを例示した図である。
【図２７】ARM命令がThumb32命令ビット空間内の未使用部分に対応するプリデコードされた命令内にどのようにプリデコードされ得るかを例示した図である。
【図２８】どのように２つの隣接するThumb16命令が、連結され、単一のThumb32命令に対応するプリデコードされた命令内にプリデコードされ得るかを例示した図である。
【図２９】ARM命令をThumb32命令に再マップする概略を例示した流れ図である。
【図３０】どのように２つのThumb16命令が、プリデコード時に単一のThumb32命令に対応するプリデコード命令に再マップされ得るかを例示した図である。
【図３１】どのように分岐命令が、プリデコード時に識別され、プリデコードの早期終了をトリガするために使用され得るかの概略を示す流れ図である。
【発明を実施するための形態】
【００２３】
図1は、一実施形態によるデータ処理システム1を例示した概略図である。データ処理システム1は、メモリ(図示せず)からプログラム命令を表すデータをフェッチする命令フェッチ回路を含むプロセッサシステムインターフェース5を備える。プロセッサシステムインターフェース5は、メモリからフェッチされた命令をプリデコード回路10に受け渡す。プリデコード回路10は、命令にプリデコードオペレーションを実行してプリデコードされた命令を生成し、これらの命令がラインフィルバッファ15に渡され、命令キャッシュ20に格納される。命令キャッシュ20に格納されている命令は、処理回路25により実行される。処理回路25は、処理オペレーションを実行するように処理回路を制御するプリデコードされた命令から制御信号を生成するデコード回路30を備える。エラー検出回路35は、プリデコードされた命令中に発生する特定のエラーを検出し、処理回路25に供給する前に関係する命令、つまりそれらの命令を含むキャッシュラインを(直接的に、またはラインフィルオペレーションの起動を介して)プリデコード回路10に再度通させるために使用される。このようなエラーが検出された場合、エラー信号がエラー検出回路35から処理回路25に送られ、これによりデコード回路30は、エラーが検出されたそのようなプリデコードされた命令に関して開始した可能性のあるデコードを中止し、代わりに処理回路25は、プリデコード回路10に再度通すことにより得られるプリデコードされた命令を待つ。
【００２４】
命令キャッシュ内に格納する前に命令をプリデコードする方法は、データ処理装置のパフォーマンスを高めるためにすでに実装されている技術である。しかしながら、このようにして命令をプリデコードするパフォーマンス面の利点は、一般的に、プリデコードオペレーションの結果生じるプリデコードされた命令の長さが大きくなることにより、実行のため後からそれらの命令を命令キャッシュからフェッチしたときに消費電力が大きくなることと引き換えである。しかしながら、主記憶からキャッシュラインをフェッチするのは、通常は、命令キャッシュからフェッチするのと比べて希な事象なので、プリデコーダは、通常、後のデコーダに比べて与えられた命令に対しはるかに少ないオペレーションを行い、したがって、データ処理装置の消費電力節減の余地があることが認識されている。それでも、より広い命令キャッシュにアクセスすることによって消費される電力よりも、命令キャッシュの後に特徴をデコードしなくて済むようにすることにより行われる省電力が勝る命令の特徴を識別することが可能である場合に限り、全体的消費電力を削減することが可能であろうことは認識されていた。
【００２５】
上述のように、命令プリデコードは、一般的に、パフォーマンス向上技術として実装され、付加的な電力消費は、パフォーマンス面の利点の代価を支払う価値のある価格とみなされる。しかしながら、命令キャッシュの後のデコードステージにおける異常命令の識別に必要なデコード回路が、デコーダのゲート総数の増大に著しく関わる可能性のあることが分かっている。このことは、異常命令は、プロセッサがどのような状態にあろうと、またどのような命令が最近実行されていようと、特定の異常命令と同じ挙動を示すように矛盾のない決定論的方法でデコードされなければならないため、セキュアなデータ処理装置ではなおいっそう著しい。異常命令は、矛盾のない決定論的方法でデコードされなければならないので、命令セットのアーキテクチャにおけるめったに発生しない厄介なケースを取り扱うためにさらに多くのゲートをデコーダに入れなければならない。この識別をプリデコードステージにシフトし、異常命令識別子をプリデコードされた命令に関連して与えることにより、この配置の付加的な電力消費よりも、デコードステージで異常命令を識別しなくてよい省電力の方が勝ることが分かっている。
【００２６】
図2は、一実施形態によりプリデコードオペレーションを実行するときにデータ処理装置1により実行される一連のステップの概略を例示している。フローは、プリデコード回路10内においてステップ300から始まり、命令がメモリから(プロセッサシステムインターフェース5を介して)取り出されている。ステップ302で、命令が異常であるかそうでないかが判定される。一実施形態では、異常命令は、未定義であるか、または予測不可能である命令として定義される。未定義命令は、命令空間内にあるが、命令セットの一部ではない命令である。32ビット(例えば)の命令空間では、232(40億超)の符号化が可能であるため、そのような未定義命令が多数あることは明らかとしてよい。他方、予測不可能命令は、定義済み命令であるとしても、データ処理装置内で明確に定義された結果が得られないような方法で使用されている命令であり、例えば、プログラムカウンタレジスタにベースセットとともにベースレジスタライトバックを実行しようとするロードまたはストア命令である。
【００２７】
命令が異常であると識別された場合、ステップ304で、プリデコード回路10は、その命令を異常として識別する識別子を付与する。この識別子は、一実施形態において、識別子として使用されるプリデコードされた命令内の一実施形態のサイドバンドビットにおいて、プリデコード回路10が生成するプリデコードされた命令に関連付けられている。
【００２８】
しかしながら、ステップ302で、命令が異常でないと識別された場合、ステップ304は省かれる。フローは、ステップ306に進み、そこで、プリデコード回路10が、必要な他のプリデコードステップを実行する(他のプリデコードステップの実施例は、後に説明される)。最後に、ステップ308で、プリデコードされた命令が、命令キャッシュ20内に(ラインフィルバッファ15を介して)格納される。
【００２９】
図3は、図2のステップ304におけるプリデコード回路10により一実施形態において実行される一連のステップをより詳細に示す概略図である。最初に、ステップ320で、プリデコード回路10が、現在、すべての異常命令を所定の未定義命令に変換するように構成されているかどうかがチェックされる。もしそうであれば、フローは、ステップ324に進み、そこでこの変換が実行される。プリデコード回路が、これを行うように構成されている本発明のいくつかの実施形態おいて、これにより、処理回路で異常命令を取り扱うためのメカニズムを特に単純なものにすることができるが、それは、処理回路により特定の未定義命令１つだけが受け取られ、そしてその応答(例えば、専用例外ルーチンを呼び出す)が、すべての異常命令について明確に定義され、予測可能であるからである。ステップ324から、フローは、図2のステップ306に続く。したがって、この実施形態では、所定の未定義命令それ自体の使用が、異常命令の「指標」となる。
【００３０】
そうでない場合、フローはステップ326に進み、そこで、プリデコード回路10が、現在、すべての異常命令に未定義というラベルを付けるように構成されているかどうかがチェックされる。プリデコード回路10のこの構成でも、異常命令を取り扱うための下流のメカニズムが簡素化されるが、それは、すべての異常命令が、未定義命令であり、処理回路の応答が、すべての異常命令に対し明確に定義され、予測可能であるかのように取り扱われるからである(例えば、このような命令は、例外をトリガする可能性があるか、またはそれとは別に、NOP(ノーオペレーション)処理され、結果として処理回路の内部状態に影響を及ぼすことなく処理回路を通過し得る)。すべての異常命令が未定義のラベルを付けられるとすれば、フローはステップ330に進み、対応する指標が生成され、この場合、サイドバンドビットをプリデコードされた命令に付加し、その命令が未定義であることを示す。
【００３１】
プリデコード回路10が、現在、すべての異常命令に未定義というラベルを付けるように構成されていない場合、フローはステップ328に進み、そこで、識別された異常命令が、未定義命令であるかどうかがチェックされる。そうであれば、フローはステップ330に進み、サイドバンドビットが、プリデコードされた命令に付加され、その命令が未定義であることを示す。異常命令が未定義でない場合、この実施形態では、それは予測不可能な命令でなければならず、ステップ332において、サイドバンドビットが、プリデコードされた命令に付加され、その命令が予測不可能であるであることを示す。図3までのすべての経路は、最終的に合流し、図2のステップ306に進む。
【００３２】
図4は、プリデコードされた命令に異常というラベルを付ける関連する指標を有している可能性のある命令をフェッチして実行する場合に、処理回路25により実行される一連のステップを例示している。ステップ350で、プリデコードされた命令は、命令キャッシュ20から処理回路25へフェッチされる。
【００３３】
次に、ステップ352で、プリデコードされた命令が調べられ、関連する指標を使って、異常であるというラベルが付けられたかどうかを判定する。プリデコードされた命令に、異常であるというラベルがそのように付けられていない場合、ステップ354で、命令の通常実行(必要に応じてデコード回路30によるさらなるデコードが先行する)が実行される。
【００３４】
他方、命令が異常である場合、処理回路25は、所定の方法で命令を実行する(ステップ356)。この実施形態では、処理回路は、２つの方法のうちの１つで行うように構成される。第１に、ステップ358で、処理回路が命令のNOP処理を行うように構成されている場合、ステップ360で、命令はNOPとして実行され、結果として処理回路の状態が変化することなく処理回路を通過する。それとは別に、処理回路が異常命令に対する応答として例外をトリガするように構成されている場合、ステップ362で、適切な例外が呼ばれる。
【００３５】
したがって、上述の実施形態によれば、プリデコードステージで異常命令を識別することにより省電力を行えるデータ処理装置が実現される。命令が異常であることを示す識別子を生成することにより、プリデコードされた命令が後から命令キャッシュから取り出されたときに、処理回路側で、異常命令を速やかに処理することができる。さらに、異常命令であるという早期の識別により、他の方法ではデバイスのオペレーションおよびセキュリティを脅かすおそれのある命令に対し予測可能であり、かつ明確に定義された方法により応答するデータ処理装置を実現することが可能になる。
【００３６】
データ処理システム1は、１つまたは複数の命令セットからの複数の命令を処理する。例えば、ケンブリッジ所在のARM Limited社により製造されているいくつかのプロセッサは、ARM命令セットだけでなく、混合長のThumb2命令セットの命令も実行することができる。Thumb2命令は、16ビットまたは32ビット長としてよい。したがって、デコード回路30は、命令のそれぞれのセットに対するデコーダを備えることができる。図5は、デコード回路30がARMデコーダ40、Thumb-32デコーダ45、およびThumb-16デコーダ50を備えるデータ処理装置1の一実施例を示している。デコーダ40，45，50は、命令キャッシュ20に格納されているプリデコードされた命令をデコードするために使用される。デコーダ40，45，50は、処理オペレーションを実行するように処理回路を制御するプリデコードされた命令から制御信号を生成する。マルチプレクサ65は、プロセッサ状態に応じてデコーダ40，45，50のうちのどれが使用されるかを選択する。
【００３７】
図6は、プリデコードされる前のThumb-16(T16)命令100およびThumb-32(T32)命令110を示している。T16命令100は、16ビットopコード(すべてのフィールドを含む)からなる。T32命令110は、２つの部分からなる。第１の部分T32aは、16ビットからなる。T32命令110の第１の部分T32a内のビット[15:13]は0b111に設定される。第１の部分T32aのビット[12:0]は、T32 opコードの最初の13ビットを格納する。T32命令110の第２の部分T32bは、T32 opコードの第２の半分を含む16ビットを含む。T16およびT32命令では、T32の２つの部分は、互いに同じ長さであり、またT16と同じ長さである。しかしながら、これは、すべての混合長の命令セットについて必ずしもあてはまるわけではない。
【００３８】
図7は、プログラム命令を表すデータをメモリ空間150内にどのように格納できるかを示す。データは、ブロック170内に配列され、それぞれのブロックはプログラム命令の一部を表す。例えば、それぞれのブロックは、T16命令、T32命令の第１の部分T32a、またはT32命令の第２の部分T32bを表すことができる。ブロックは、キャッシュライン160内に配列される。簡略化のため、図7では、キャッシュライン160は、４つのブロックを含むように示されているが、キャッシュライン160は、他の数の(典型的には多数の)ブロック170を格納できることは明白である。T32命令は、２つのキャッシュライン160の間の境界をまたぐことができ、したがって、１つのキャッシュラインの最後のブロックは、T32aを表し、続くキャッシュラインの第１のブロックは、T32bを表す。
【００３９】
プログラムが実行されるときに、処理回路は、可能ならば命令キャッシュ20に格納されている命令を実行する。命令が、命令キャッシュ20内に存在しない場合、キャッシュミスが発生し、命令を表すデータのブロックが、メモリからフェッチされる。プロセッサシステムインターフェース5内のフェッチ回路は、メモリから所望の命令を表す１つまたは複数のブロックを含むキャッシュライン160をフェッチする。フェッチされたブロックは、命令キャッシュ20内に入れてさらにデコードする準備をする前に、プリデコード回路10によりプリデコードされる。しかしながら、ブロックがフェッチされると、プリデコード回路10は、ブロックが命令のどの部分を表すかを確実に決定することができない。そこで、プリデコード回路10は、フェッチされたブロックが命令のどの部分を表すかを示す投機的識別を行う。
【００４０】
命令ブロックは、ブロックがどの部分を表す可能性が高いかを示す指標となるいくつかのビットを持つことができる。例えば、混合長のThumb2命令では、T32命令の第１の部分T32aを表すブロックは、0b111に設定されたビット[15:13]を有する。プリデコードオペレーションは、プリデコード回路10により行われる識別に応じて、ブロックに対し実行される。例えば、異常命令識別子をブロックに付加して、そのブロックが異常命令であるかどうかを指示することができる。しかしながら、T32命令の第２の部分T32bについて、その命令に対するopコードの値に応じて、同じビットパターンが生じる可能性も潜在的にあり得る。したがって、投機的識別は、間違っている可能性がある。ブロックの誤識別がなされた場合、プリデコード回路10は、そのブロックに対し間違ったプリデコードオペレーションを実行し、その結果プリデコードエラーが生じる可能性がある。
【００４１】
図8Aから8Dは、エラーが発生する可能性のあるいくつかの考えられる状況を例示している。図8Aは、キャッシュラインの中央にプロセッサが分岐した場合に発生し得るエラーを示している。キャッシュミスが発生した場合、プロセッサシステムインターフェースは、メモリからキャッシュラインをフェッチする。プリデコード回路10は、プロセッサができる限り速やかにアンストールできるようにプログラムが分岐するポイントからプリデコードを開始する。次いで、プリデコード回路10は、キャッシュラインの終わりまでブロックのプリデコードを継続する。次いで、プリデコード回路10は、キャッシュラインの先頭に戻り、キャッシュライン内の第１のブロックがどの部分を表すかを示す投機的識別を実行し、キャッシュライン内の残りのブロックをプリデコードする。キャッシュライン内の第１のブロックの投機的識別は、間違っている場合があり、プリデコードエラーを発生することがある。例えば、図8Aでは、T32bを実際に表す、キャッシュラインの第１のブロックは、そのブロックのビット[15:13]の値によっては、誤ってT32a部分またはT16部分と識別される可能性もある。
【００４２】
他のタイプのエラーは、分岐予測ミスが発生したときに生じる可能性があり、図8Bに例示されているように、プログラムフローが誤ってT32命令の中央に分岐することになる。この場合、プリデコード回路10は、続くT32b部分をT16命令またはT32aとして間違って識別することがある。後続のブロックも、誤識別され得る。例えば、T32b部分を実際に表す、分岐ポイントのブロックが、T32aと間違って識別された場合、続くブロックは、T32bと識別されることになる。これは、さらなるエラーを引き起こす可能性がある。
【００４３】
図8Cに例示されているように、T32命令がキャッシュライン境界をまたがる場合、プリデコード回路10が第２のキャッシュラインをデコードするときにエラーが発生し得る。T32b部分が、T16命令またはT32aとして識別される可能性がある。
【００４４】
図8Dは、キャッシュラインがプログラム命令(リテラル)を表さないデータを含む場合に発生する可能性のあるエラーを示している。この場合、プリデコード回路10は、そのリテラルを命令部分として解釈し得る。これは、後続のブロックの識別に波及効果をもたらす可能性がある。例えば、プリデコード回路10が、そのリテラルをT32a部分と識別した場合、続くブロックをT32命令のT32b部分としてプリデコードすることになる。
【００４５】
ゆえに、プリデコードエラーが発生する可能性のある状況がいくつかある。したがって、いくつかの実施形態では、データ処理システム1は、プリデコード回路10により行われる投機的識別が正しかったか、正しくなかったかを検出し、正しくなかった場合に、プリデコードエラーであることを知らせ、キャッシュ20内のエラー命令を訂正することができるエラー検出回路35を備える。プリデコードエラーは、エラーが検出されたプリデコードされた命令の少なくとも一部をプリデコード回路10に送り返して再びプリデコードされるようにすることにより解消され得る。いくつかの状況において、プリデコード回路10は、プリデコードされたブロックから元の命令ブロックを再現することができる場合がある。エラーを訂正する代替の一方法では、エラーを含むキャッシュ20内のキャッシュラインを無効化し、そのキャッシュラインをメモリからフェッチし直させ、再びプリデコードさせる。
【００４６】
プリデコード回路10がブロックをどの部分として投機的に識別したかをエラー検出回路が検出できるようにするために、プリデコード回路は、それぞれのブロックに、そのブロックがどの部分として識別されたかを示す命令部分識別子をマークとして付ける。命令部分識別子は、１つまたは複数の付加ビットとしてブロックに付加される。
【００４７】
一実施形態では、プリデコードオペレーションが実行され、異常命令識別子をT32命令に付加し、その命令が異常であるか異常でないかを示す。異常命令識別子は、T32命令の第１の部分T32aにサイドバンド情報の形式で付加される。この実施形態では、どのようなサイドバンド情報も、T32命令の第２の部分T32bまたはT16命令に付加されない。
【００４８】
したがって、T16 opコードおよびT32 opコードの第２の半分が、プリデコード回路10により修正されない。このことは、opコードが未修正であり、したがって命令キャッシュ20に格納されているブロックが、行われた識別に関係なく同じになるため、プリデコード回路10がT16命令を表すブロックをT32命令の第２の部分T32bと誤って識別するかどうかは問題にならないことを意味する。同様に、プリデコード回路10が、T32bを実際に表すブロックをT16と識別するかどうかも問題にならない。ここでもまた、誤識別からは、プリデコードエラーはいっさい生じない。このことは、発生するプリデコードエラーの個数を減らせることを意味している。発生するプリデコードエラーが少なければ、エラー検出回路35で訂正する必要のあるエラーは少なく、プリデコード回路10は、何回も命令を命令の数だけプリデコードする必要がない。したがって、データ処理システム1で消費される電力は、低減される。
【００４９】
ブロックがT16と識別されるか、T32bと識別されるかは問題にならないので、プリデコード回路10は、同じ命令部分識別子をそれぞれのケースについてブロックに付加する。そのため、命令部分識別子では、ブロックがT32命令の第１の部分T32aを表すかどうかを識別するだけでよい。このことは、命令部分識別子に対し１つのビットがあるだけでよいということを意味し、したがって、命令は、過度に拡張される必要がない。このことは、プリデコードされた命令をキャッシュ20内に格納する際に消費される電力が少ないことを意味している。一実施形態では、命令部分識別子は、ブロックがT32aを表すと識別された場合に「1」に設定され、ブロックがT32bまたはT16命令のいずれかを表す場合因「0」に設定される。
【００５０】
図9は、例示的な一実施形態におけるプリデコード後のT16およびT32命令のフォーマットを示している。ブロックがT32命令の第１の部分T32aを表すものとして識別された場合、プリデコード回路10は、命令部分識別子(IDビット)をビット[16]に付加し、命令部分識別子を「1」に設定する。命令が異常命令であるかどうかを示すサイドバンド情報が挿入される。ビット[16]のところの命令部分識別子は、現在、ブロックがT32命令のT32a部分を表すことを示しているので、ビット[15:13]は、ブロックを識別するために冗長である。したがって、サイドバンド情報が、情報の喪失を生じることなくこれらのビットに挿入され得る。これを行う方法の１つは、T32a部分のビット[15:14]内にサイドバンドビットを挿入することであり、１つのビットで命令が未定義であるかどうかを示し、１つのビットで命令が予測不可能であるかどうかを示す。そのため、サイドバンド情報は、ブロックの長さを延ばすことなくブロックに付加され、これにより、命令をキャッシュ20内に格納する際に消費される電力を低減することができる。
【００５１】
T32命令に対するサイドバンド情報は、命令の第１の部分T32aにしか付加されないので、これにより、第２の部分T32b上で実行されるプリデコードオペレーションは、T16命令の場合と同じものとなり、発生するエラーの数が低減され得る。ブロックがT16命令を表すものとして識別された場合、プリデコード回路10は、命令部分識別子(IDビット)をビット[16]に付加し、命令部分識別子を「0」に設定する。ビット[15:0]内のT16 opコードは修正されない。ブロックが、T32命令の第２の部分を表すものとして識別された場合、T16命令の場合と同じプリデコードオペレーションがそのブロックに対し実行される。T32命令のビット[33](T32命令の第２の部分T32bを表すブロックのビット[16]に対応する)が0に設定される。T32 opコードの第２の半分の残りは、修正されない。
【００５２】
したがって、プリデコード回路は、T16がT32bとして識別された場合、またはその逆にT32bがT16として識別された場合にエラーを検出する必要はなく、したがって、検出するエラーが少なくなる。検出される必要のあるエラーは、T32b部分がT32a部分として間違って投機的に識別されたとき、２つの連続するブロックがT32a部分としてマークされたとき(これは、T32命令がキャッシュライン境界をまたいだときに発生し得る)、またはT32a部分がT32b部分として間違って識別されたとき(前のブロックの誤識別からの波及効果により引き起こされる)のエラーだけである。図10は、エラーが発生する場合、または発生しない場合の状況を一覧にした表である。「ネイティブ命令ストリーム」という列は、キャッシュライン内のブロックのシーケンスが実際にどの部分を表しているかを示す。「プリデコード投機」という列は、プリデコード回路がそれらのブロックをどの部分として投機的に識別したかを示す。いくつかのプリデコードエラーは、分岐予測ミスが発生したときに生じる可能性があり、プログラムフローがT32命令の中央に分岐することになる。他のエラーは、フローが前のキャッシュラインから続く場合に発生し得る。
【００５３】
本発明の技術は、Thumb2命令セット内の命令に制限されず、可変長命令セットからの命令、または異なる長さの命令セットからの命令に適用可能であることは明白である。本発明の技術は、第１の命令セットからの１つの命令の少なくとも１つの部分および第２の命令セットからの１つの命令の少なくとも１つの部分について、ブロックに対し実行されるプリデコードオペレーションが、プリデコード回路10がそのブロックをそれらの部分のうちのどの部分として認識するかに関係なく同じであるようにすることにより実装され得る。そのため、システムで消費される電力は、低減され得る。
【００５４】
図11は、いくつかの実施形態におけるデータ処理システム1のオペレーションを例示した流れ図である。まず、ステップ200で、プロセッサシステムインターフェース5内の命令フェッチ回路が、プログラム命令を表すデータからなる複数のブロックを含むメモリからキャッシュラインをフェッチする。次に、ステップ202で、データのブロックが、プリデコード回路10に渡され、そこで、プリデコード回路10は、ブロックに対しプリデコードオペレーションを実行することによりブロックをプリデコードし、プリデコードされたブロックを生成する。プリデコードオペレーションは、図15に関してさらに詳しく説明される。ステップ204で、プリデコードされたブロックで構成されるプリデコードされた命令は、命令キャッシュ20内に格納される。その後、ステップ206で、エラー検出回路35が、キャッシュ20内に格納されているプリデコードされたブロックにエラーがないかチェックする。ステップ208で、エラー検出回路35は、プリデコードエラーが検出されたかどうかを識別する。
【００５５】
エラー検出回路35が、プリデコードエラーが検出されたことをステップ208で識別した場合、エラー検出回路35は、プリデコードエラーを訂正するように動作する。一実施形態では、エラー検出回路35は、ステップ210で、間違ってプリデコードされたブロックの少なくとも一部をプリデコード回路10に送り返す。次いで、フローはステップ202に戻り、そこで、プリデコード回路が、間違ってプリデコードされたブロックを再びプリデコードする。
【００５６】
ステップ210の代替として、エラー検出回路35は、代わりに、ステップ212を実行することができる。ステップ212で、エラー検出回路35は、間違ってプリデコードされた命令を含む、命令キャッシュ20内のキャッシュラインを無効化する。次いで、フローはステップ200に戻り、そこで、間違ってプリデコードされた命令を含むキャッシュラインがメモリから再びフェッチされる。
【００５７】
他方、エラーが検出されていないとエラー検出回路35がステップ208で識別した場合、フローは、ステップ216に進む。ステップ216で、処理回路25内のデコード回路30は、プリデコードされた命令をデコードし、制御信号を生成する。次に、ステップ220で、処理回路は、その制御信号に応答して処理オペレーションを実行する。次いで、このプロセスは終わる。
【００５８】
発生し得る、したがって識別されるべき他のプリデコードエラーは、Thumb-32命令がキャッシュライン境界をまたがる場合のエラーであり、また第２のハーフワードは、プリデコードオペレーションの実行時にはプリデコード回路からは利用できない。通常のオペレーションでは、プリデコーダは、前のキャッシュラインからの第１のハーフワードおよび新しいキャッシュラインからの第２のハーフワードを有している場合に、キャッシュライン境界をまたぐThumb-32命令を正しくプリデコードすることができる。しかしながら、Thumb-32命令が、キャッシュライン境界をまたぎ、新しいキャッシュラインが、プリデコードオペレーションの実行中にフェッチされていない場合、プリデコードオペレーションは、不完全なものとなり、そのため、サイドバンド信号は、正しくプリデコードされない。
【００５９】
処理回路が後で、命令キャッシュからプリデコードされた命令を読み出すときに、プリデコードオペレーションが不完全であったと判定できるようにするために、一実施形態では、不完全プリデコード識別子を形成するために不完全フィールドがプリデコードされた命令に付加され、このフィールドは、プリデコード回路が、プリデコードオペレーションを実行する際にThumb-32命令の両方の部分にアクセスできない場合に設定され、特定の一実施形態では、プリデコードされたThumb-32命令は、図12に示されているように表すことができる。特に、図12を前の方で説明されている図9と比較すると、それぞれのプリデコードされた命令部分が、17ビットから18ビットに拡張されており、ビット0から17は、第１のプリデコードされた命令部分を表し、ビット18から35は、第２のプリデコードされた命令部分を表す。第１のプリデコードされた命令部分のビット0から16は、前の方で説明されている図9と同じであるが、サイドバンド信号(異常命令の存在を識別する)がビット位置14および15に挿入され、命令部分識別子がビット16に挿入されている。さらに、ビット位置17は、不完全フィールドを形成するために使用されるが、このビットは、プリデコード回路が、プリデコードオペレーションを実行するときにThumb-32命令の第２の半分にアクセスしなかった場合にセットされ、ビット位置14および15のサイドバンド信号に頼ることができず、実際、正しくない可能性のあることを示す。
【００６０】
プリデコードされた命令の第２の半分を考えると、ビット17から34は、図9に示されている前の方で説明されている実施形態のビット16から33と同じである。ビット位置35は、第２のプリデコードされた命令部分が第１のプリデコードされた命令部分と同じ長さになるように追加され、一実施形態では、ビット35が0に設定される。しかしながら、後で詳しく説明されるように、代替の一実施形態では、ビット位置35は、他の目的に使用することができる。
【００６１】
代替の一実施形態では、ビット位置17で不完全フィールドを使用する代わりに、プリデコードオペレーションを実行するときにThumb32命令の第１のハーフワードにしかアクセスしない状況において、ビット位置16の命令部分識別子を設定し、第１のプリデコードされた命令部分が、例えばビット位置16を論理0値に設定することによりThumb16命令に関係するものとして識別するようにプリデコード回路が配列され得る。このようなプリデコードされた命令部分が、後で命令キャッシュからフェッチされる場合、エラー検出回路35は、命令部分が実際にはThumb16命令として間違ってマークされているThumb32命令の一部であると観察することになり、そこで、エラーを通知して、処理回路により破損している可能性のあるプリデコードされた命令が実行されるのを防ぐ。したがって、このようなメカニズムを通じて、図12に示されているように別の不完全ビットを必要とすることなく処理回路が不完全にプリデコードされた命令を使用するのを防止することができる。
【００６２】
図12に示されている実施形態の代替となる他の実施形態では、不完全なプリデコード識別子は、特定のキャッシュライン用のタグRAMエントリに関連してキャッシュ内に格納され得る。このような識別子が、設定された場合(好ましくは、これは単一のビットフィールドとして用意される)、これは、キャッシュラインの末尾に出現するプリデコードされた命令部分に対し不完全プリデコードオペレーションが実行されたというフラグを立て、したがって正しくプリデコードされているためには依存できない。
【００６３】
いくつかの実施形態では、それぞれのプリデコードされた命令の中に付加的情報断片を入れようとする代わりに、それぞれのタグRAMエントリに関連してこの単一識別子ビットを用意すると空間効率が改善されると思われる。
【００６４】
図13は、キャッシュライン境界をまたぐThumb32命令が取り得る、データ処理装置を通る２つの可能な経路を例示している。図13に示されているように、バッファ380は、プロセッサシステムインターフェース5を介してメモリシステムからフェッチされた特定のキャッシュラインの最後のハーフワードを格納するために用意されており、このバッファリングされた情報は、その最後のハーフワードがThumb32命令の第１のハーフワードであった場合に使用される。プロセッサが、メモリから連続するキャッシュラインを連続的にフェッチしている場合、この最後の命令部分をバッファリングすることにより、プリデコード回路10は、次のキャッシュラインがプロセッサシステムインターフェース5およびマルチプレクサ60を介する経路でメモリからプリデコード回路10へ送られるのを待ち、送られてきたら、キャッシュライン境界をまたぐ命令の両方のハーフワードを使用して、完全プリデコードオペレーションを実行し、適切なサイドバンド信号を生成することができる。その結果、プリデコードされた命令が、ラインフィルバッファ15を通り、命令キャッシュ20内に入る場合、これは、その後、命令キャッシュから読み出され、図13の経路「A」により概略が示されているように、デコード回路30に直接通され得る。
【００６５】
しかしながら、プロセッサが、連続的なキャッシュラインを連続的にフェッチしていない場合、キャッシュライン境界をまたぐThumb32m命令の第１の半分に対応するプリデコードされた命令部分は、不完全プリデコードオペレーションを適用され、したがって、上述の３つの可能な技術のうちのどれかを使用して、不完全プリデコード識別子を設定する必要がある。このような場合、第１のプリデコードされた命令部分を含むThumb32命令が、命令キャッシュ20から読み出されたときに、プリデコードエラー検出回路35は、不完全プリデコード識別子の設定を検出し、一実施形態では、図13の経路「B」により概略が示されているように、Thumb32命令全体を、マルチプレクサ60を介してプリデコード回路10に送り返す。特に、制御信号は、経路37上でプリデコードエラー検出回路35からマルチプレクサ60に送り返され、これにより、マルチプレクサは、ループバック経路39上に提示される命令データを選択する。本発明のいくつかの実施形態では、これは、プリデコードオペレーションにより生成される情報がプリデコードされた命令を作成する際に命令に付加される仕方であるため可能である。特に、サイドバンド信号がビット位置15および14に付加されるのは、命令部分識別子がいったんビット位置16に挿入されると、ビット位置15および14が冗長になるからである。その結果、プリデコードされた命令から元の命令を容易に再作成することが可能になり、したがって、命令は、メモリから命令を再フェッチすることなく、プリデコード回路10を通る経路で再送され得る。
【００６６】
代替の一実施形態では、プリデコードされた命令から元の命令が再作成できない場合、プリデコードエラー検出回路35は、命令キャッシュ内の２つの関連する隣接キャッシュラインを無効化し、ラインフィルオペレーションを実行してそれら２つのキャッシュラインをメモリから逐次再フェッチし、プリデコード回路に通すように配列され得る。
【００６７】
エラーの検出の後、プリデコード回路に命令を再び通すと、命令は、処理回路側で必要になったときに、経路Aを辿り、デコード回路30内に取り出され得る。
【００６８】
図14は、上述の技術によるプリデコード回路のオペレーションの概略を例示している。プリデコードオペレーションは、ステップ400から始まり、ステップ402で、命令がThumb32命令であるかどうかが判定される。そうであれば、ステップ404で、Thumb32命令がキャッシュライン境界をまたぐかどうかが検出され、もしそうであれば、次いで、プロセッサが逐次キャッシュラインからフェッチしているかどうかが判定される。
【００６９】
プロセッサが、逐次キャッシュラインからフェッチしている場合、キャッシュラインの末尾に出現するThumb32命令の第１の命令部分は、ステップ410でレジスタ380内にバッファリングされ、その後、ステップ412で、プリデコード回路10は、プロセッサシステムインターフェース5から次のキャッシュラインを受け取るのを待つ。次のキャッシュラインが利用可能になったら、プリデコードオペレーションが、ステップ414において通常の方法でThumb32命令に対し実行される。本発明の一実施形態では、プロセッサによって実行される他の命令セットの命令が、キャッシュライン境界に揃えられるため、プロセスは、さらに、ステップ402で命令がThumb23命令でないと検出された場合に直接ステップ414に進む。同様に、命令がThumb32命令であるが、ステップ404で、Thumb32命令はキャッシュライン境界をまたがないと判定された場合、ここでもまた、プロセッサは、ステップ414に直接進む。
【００７０】
ステップ406で、プロセッサが、逐次キャッシュラインからフェッチしていないと判定された場合、プロセッサはステップ408に進み、そこで、不完全プリデコードオペレーションが、Thumb32命令の第１のハーフワードに関して実行され、プリデコードされた命令部分内に付加されたサイドバンド信号が不完全プリデコードオペレーションを使用して生成されたことを識別するように不完全フィールドが設定される。
【００７１】
上記の説明から、１つまたは複数のプリデコードされた命令部分に関連してこのような不完全プリデコード指示を構成することにより、そのようなプリデコードされた命令部分を含むプリデコードされた命令が、後で処理回路によりキャッシュから読み出される場合、その指示は、プリデコードされた命令が潜在的に破損していることを知らせる、処理回路に対するフラグとなり、これにより処理回路は適切な措置を講じることができる。したがって、不完全にプリデコードされている命令を実行した結果生じる不正なオペレーションは、設計に著しい追加コストおよび複雑さを持ち込むことなく回避され得る。
【００７２】
上述の実施形態では、異常命令識別子は、T32命令にのみ付加される。例えば、これは、サイドバンド情報をT32命令の第１の部分T32aに付加することにより行える。異常命令識別子は、T16命令には付加されない。このことは、T16命令セットが十分に小さく、T32命令に比べて異常命令を容易にデコードできるので、ある程度許容でき、そのため、それらの異常命令をデコードする際にデコード回路により消費される電力が少なくなる。
【００７３】
しかしながら、一実施形態では、T32命令の第１の部分T32aは、不完全プリデコード識別子が付加された場合に拡張される。利用可能なメモリ空間を有効に使用するために、２つのT16命令が、１つのT32命令(またはARM命令)と同じ長さでなければならない。したがって、T32命令の第１の部分は、不完全プリデコード識別子を収められるように拡張されているので、プリデコード時に付加ビットをT16命令に付加することもできる。このビットは、異常命令識別子を格納するために使用され得る。例えば、ビットは、命令が未定義命令であるかどうかを示すサイドバンド情報を含むことが可能であろう。このようにして、未定義命令をデコードする際に消費される電力が、低減され得る。
【００７４】
T32命令の第２の部分T32bは、この情報が第１の部分T32aに含まれるため、異常命令識別子を必要としない。しかしながら、T32b部分に対し実行されるプリデコードオペレーションは、プリデコード回路10によりT16命令に対し実行されるオペレーションと同じであることが重要である。したがって、ブロックが、T32b部分を表すものとして投機的に識別される場合、プリデコード回路10は、そのブロックがT16命令を表すと暫定的に仮定して(投機に対して)、T16命令が異常であるかどうかを示す異常命令識別子を付加する。そのため、ブロックに対し実行されるオペレーションは、T16命令またはT32b部分として識別されるかどうかに関係なく同じである。プリデコード回路10が、T16命令を間違ってT32b部分として識別した場合でも、異常命令識別子が、とにかくブロックに付加されるため、これは問題にならず、したがってプリデコードエラーは発生しない。投機が正しかった場合、T32b部分の中の異常命令識別子は、無視してよい。
【００７５】
図15は、少なくともいくつかの実施形態に応じて、プリデコードオペレーションが実行された後のT16命令およびT32命令のフォーマットを示している。T16命令として投機的に識別されたブロックについては、命令部分識別子が、ビット[16]に付加され、「0」に設定され、サイドバンドビットが、ビット[17]に付加され、その命令が異常であるかどうかを示す。ビット[15:0]内のT16 opコードは修正されない。T32命令の第２の部分T32bを表すものとして投機的に識別されたブロックに対し、同じオペレーションが実行される。命令部分識別子が、ビット[34]に付加され、「0」に設定され、サイドバンドビットが、ビット[35]に付加され、そのブロックをT16命令として暫定的に識別している一方で、T16命令が異常であるかどうかを示す。ビット[33:18]内のT32 opコードの第２の半分は修正されない。
【００７６】
T32命令の第１の部分T32aとして投機的に識別されたブロックでは、プリデコード回路10は、サイドバンド情報をそのブロックのビット[15:14]に付加する。命令部分識別子が、ビット[16]に付加され、「1」に設定され、不完全プリデコード識別子が、ビット[17]に付加され、T32命令がキャッシュライン境界をまたぐかどうかを示す。
【００７７】
そのため、T16命令またはT32b部分として識別されるかどうかに関係なく、ブロックに対し同じプリデコードオペレーションが実行される。命令に使用されるエラーに強いプリデコードフォーマットは、さらに、一貫して、異常命令識別子を伝達することができる付加ビットを利用する。
【００７８】
ブロックがプリデコード回路10によりプリデコードされる、図11のステップ202のプロセスは、図16を参照しつつさらに詳しく説明される。ステップ250において、プリデコード回路10は、ブロックがどの命令部分を表すかを投機的に識別する。ステップ254で、プリデコード回路10は、ブロックがT32命令の第１の部分T32aとして識別されているかどうかを検出する。
【００７９】
プリデコード回路10が、ブロックをT32命令の第１の部分T32aとして識別する場合、フローはステップ260に進み、そこで、プリデコード回路10は、T32命令が異常命令であるかどうかを検出する。ステップ262で、プリデコード回路10は、T32命令が異常命令であるかどうかに応じて、サイドバンド情報をブロックに付加する。ステップ264で、プリデコード回路10は、命令部分識別子を、ブロックのビット[16]に付加され「1」に設定されるIDビットの形式で付加する。
【００８０】
他方、ステップ254で、プリデコード回路10が、ブロックをT32a部分として識別しなかった場合、フローはステップ270に進む。プリデコード回路10では、そのブロックがT16命令を表すと暫定的に仮定し、T16命令が異常命令かどうかを検出する。次いで、ステップ272で、ブロックがT16命令であるか、またはT32命令の第２の部分T32bであるかとは無関係に、プリデコード回路10は、サイドバンド情報をそのブロックに付加し、T32が異常命令かどうかを指示する。ステップ274で、プリデコード回路10は、命令部分識別子を、ブロックのビット[16]に付加され0に設定されるIDビットの形式で付加する。
【００８１】
図16の流れ図を通る両方の経路について、フローはステップ280に進み、そこで、さらなるプリデコードオペレーションが、プリデコード回路10により実行される。これは、例えば、不完全命令識別子を付加するため図14に関して説明されているオペレーションを付加することを含む。さらなるプリデコードオペレーションが完全なものとなった後、プリデコードされたブロックは、次いで、ステップ284においてキャッシュ20に渡される。次いで、フローは、図11のステップ204に戻る。
【００８２】
プリデコード回路を使用する場合にデータ処理装置内に発生する可能性のある他の問題は、特定のキャッシュライン内に命令が混合した状態で存在する場合である。具体的な実施例として、ARMプロセッサは、英国所在のARM Limited社によって開発されたARM、Thumb、ThumbEE、またはJazelle命令セットのいずれかからの命令を実行することが可能であり、またこれらの命令セットのうちの複数からの命令を１つのキャッシュラインに含めることが可能である。
【００８３】
特定の時点において、処理回路は、現在実行中の命令がどの命令セットに属しているかに応じて、特定のプロセッサ状態にある。したがって、ある時点において、処理回路は、ARMプロセッサ状態に置かれている可能性があるが、その後のある時点においては、Thumb命令のシーケンスに分岐し、したがって、Thumbプロセッサ状態に入る場合もある。
【００８４】
命令をプリデコードする場合、プリデコード回路は、プリデコードを実行するときに投機的プロセッサ状態を仮定する必要があり、この選択された投機的プロセッサ状態は、次いで、典型的には、プロセッサシステムインターフェース5を介して受け取る、キャッシュライン全体に相当する命令をプリデコードするために使用される。特定の一実施形態では、投機的プロセッサ状態は、プリデコードオペレーションがプリデコード回路により実行されるときにプロセッサの状態となるように選択される。命令キャッシュ20は、例えば、選択された投機的プロセッサ状態がキャッシュライン内の命令のすべてに対して適切なプロセッサ状態ではない場合に、破損してしまっているプリデコードされた命令を格納することが可能であると理解される。例えば、プリデコードオペレーションが特定のキャッシュラインに対して実行されるときにプロセッサがThumb状態にあるが、キャッシュラインではARMとThumbの命令を混ぜ合わせている場合、ARM命令は、間違ってプリデコードされ、その結果、それらのARM命令に対しプリデコードされた命令が破損している可能性があると理解される。実際、一方のキャッシュライン内の最後の命令が状態変更分岐命令であり、次のキャッシュラインが、プリデコード回路によりプリデコードオペレーションをすでに実行されている場合、キャッシュライン全体は、間違った状態でプリデコードされる可能性もある。
【００８５】
プリデコードに使用される投機的プロセッサ状態の指示をマークとして、プリデコードされるすべてのハーフワードに付けることも可能であるが、このようにすると、命令キャッシュの命令データRAM内の領域を大量に消費することになる。キャッシュラインが状態を混合することは希であるため、一実施形態では、キャッシュラインは、キャッシュラインがプリデコードされたときにプロセッサが入っていた状態をマークとして付けられ、このことは領域効率の高いことを証明している。したがって、一実施形態では、キャッシュの命令タグRAM内のそれぞれのエントリは、図18に概略が示されているように投機的プロセッサ状態を格納するように拡張できる。当業者であれば理解するように、命令タグRAM内のそれぞれのエントリは、典型的には、アドレス部分480を格納し、また多くの場合、１つまたは複数の他の制御ビット、例えば、関連するキャッシュラインが有効かどうかを示すバリッドビットを格納する。図18に示されているように、エントリ毎に追加の2ビットを備え、命令データRAM内の対応するキャッシュラインに対しプリデコードオペレーションを実行するときに使用された投機的プロセッサ状態485を識別することができる。
【００８６】
図17は、このような拡張タグRAMエントリが、命令タグRAM内で使用される場合に、命令キャッシュ20内に用意されるコンポーネントをさらに詳しく示している。図17に示されているように、特定のキャッシュラインに対するプリデコードされた命令は、命令キャッシュの命令データRAM450内のそのキャッシュラインに格納されるので、関連する命令タグRAM460内の対応するエントリは、プリデコード回路10によりすでに出力されている、アドレス部分480および投機的プロセッサ状態情報485を埋め込まれる。
【００８７】
プロセッサが、その後、命令キャッシュ20から命令を読み出すことを求めるアクセス要求を発行すると、キャッシュ側では、アドレス比較回路464、状態比較回路468、およびヒット/ミス回路470を使用してルックアップオペレーションを実行する。特に、アドレス比較回路464は、アクセス要求により指定されたアドレスが、命令タグRAM460内の選択されたエントリに格納されたアドレス部分のどれかと一致するかどうかを判定する。一実施形態では、命令キャッシュ20は、nウェイセット連想キャッシュとして配列され、特定の一実施形態では、図19に示されている2ウェイセット連想キャッシュの形をとる。したがって、そのような一実施形態では、２つのタグRAM460-0および460-1、ならびに関連する２つのデータRAM450-0および450-1がある。それぞれのキャッシュライン492について、図18に概略が示されている情報を格納するための関連するタグRAM内に対応するエントリ490が入る。
【００８８】
アクセス要求が、処理回路により発行されたときに、アドレスのインデックス部分が、命令キャッシュ内の特定のセットを識別するために使用されることは当業者には明白であるが、ただし、それぞれのセットはウェイ毎に１つのキャッシュラインを備え、それに応じて、図19の実施例では、それぞれのセットは２つのキャッシュラインを備える。次いで、アクセス要求で指定されたアドレスのタグ部分が、それぞれのタグRAM内の対応するエントリに格納されているアドレス部分480と比較され、それに応じて、図19の実施例では、アドレス比較論理回路464が、２つのアドレス比較を実行する、つまり、アドレスのタグ部分を、アドレスのインデックス部分により指定されたセットに関連するそれぞれのタグRAM内のエントリからのアドレス部分480と比較する。
【００８９】
さらに、アドレス比較回路464を使用してアドレス比較を実行することに加えて、状態比較回路468も、タグRAM内のアクセスされたエントリに格納されている投機的プロセッサ状態485に対する現在のプロセッサ状態の比較を実行する。ヒット/ミス回路470は、アドレス比較回路464が一致を識別し、さらに状態比較回路468も一致を識別する場合にのみヒット条件を検出するように配列されている、つまりアクセスされることを求める命令が命令キャッシュ内に存在し、その命令をプリデコードするために使用される投機的プロセッサ状態が現在のプロセッサ状態に一致する場合にのみヒット条件が検出されるということである。
【００９０】
ヒット条件が発生した場合、これによりマルチプレクサ472は、命令キャッシュ内の適切なウェイのデータRAM450から読み出された命令を出力することになり、次いで、そこから、その命令がデコード回路30に送られる。
【００９１】
ヒット条件が検出されない場合、ミス信号が経路474上で発行され、ラインフィル要求がプロセッサシステムインターフェース5から発行される。その結果、命令の関連するキャッシュラインが、メモリからフェッチされ、プリデコード回路10に通される。
【００９２】
ミス条件には2種類あることを理解されたい。第１のものは、アクセスされることを求める命令が現在命令キャッシュ内にはない古典的な種類であり、この場合、プリデコード回路10からの出力は、通常の方法で命令キャッシュに割り当てられ得る。前の方で説明されている2ウェイセット連想キャッシュの実施例では、これは、いくつかウェイのうちの１つにおけるキャッシュラインの内容をクリーニングし、無効化することと、新規にプリデコードされた命令をそのキャッシュラインに割り当てることとを伴う。しかしながら、現在発生し得る他のミス条件は、アドレス比較回路464が、一致を検出する、つまりその命令がキャッシュ内に存在するが、状態比較回路468は、一致を検出せず、したがって、間違ったプロセッサ状態を仮定して関連する命令がプリデコードされていると識別する場合である。この場合、キャッシュミスは、フェッチされた命令のプリデコード回路内再通過とともに、メモリからのキャッシュラインの再フェッチを引き起こす。一実施形態では、このような状況におけるプリデコード回路10からの出力は、上述したのとまったく同じようにして割り当てられ得るが、代替実施形態では、プリデコード回路10からの出力は、優先的に、異なるウェイに割り当てられる。これにより、キャッシュラインが複数の命令セットからの命令を含む状況において、そうしなかった場合に生じ得る潜在的「スラッシング」問題を回避できる。
【００９３】
このスラッシング問題を例示するために、キャッシュラインの第１の部分がThumb命令を含み、キャッシュラインの第２の部分がARM命令を含み、Thumbプロセッサ状態をとると仮定してキャッシュライン全体が最初にプリデコードされる実施例を考える。次いで、処理回路がARMプロセッサ状態に入っている間にARM命令の１つがアクセスされた場合、状態比較回路468により、投機的プロセッサ状態(つまり、Thumb状態)が現在のプロセッサ状態(つまり、ARM状態)と一致しないことが検出され、したがって、上述の再フェッチプロセスが実行されることは明白である。このときに、ARMプロセッサ状態を仮定して、キャッシュライン全体がプリデコードされ、これでアクセス要求の対象であった正しいプリデコードされたARM命令が得られる。しかしながら、プリデコード回路からのこの出力が使用され、前のキャッシュラインの内容が上書きされた場合、次いで、処理回路の後の方のステージが、Thumbプロセッサ状態にある間に、キャッシュラインの第１の部分内のThumb命令の１つにアクセスすることを求めた場合、状態比較回路468が再び投機的プロセッサ状態と現在のプロセッサ状態が一致しないと識別するため、ミス条件が再び検出されることは明白である。
【００９４】
そのような状況においてプリデコード回路10からの出力を異なるキャッシュラインに割り当てると、両方のバージョンをキャッシュ内に共存させることができるため、この問題が回避され得る。したがって、前の方の実施例を考えると、特定のキャッシュラインに相当するプリデコードされた命令を形成する同じ命令セットは、Thumbプロセッサ状態を仮定してプリデコードされた一連のプリデコードされた命令として１つのキャッシュライン内に格納され、ARMプロセッサ状態を仮定してプリデコードされた一連のプリデコードされた命令として異なるウェイで他のキャッシュライン内に格納される。
【００９５】
これにより、上述のスラッシング問題は回避されるが、キャッシュのクリーニングおよび無効化を行うときに、クリーンおよび無効化オペレーションは、物理アドレスにある命令が上述の手順で複数のキャッシュライン内に格納されている場合に物理アドレスに従って複数のキャッシュライン上で動作する必要がある。
【００９６】
図20は、一実施形態による上述のプリデコードオペレーションを例示している。ステップ500で、プリデコードオペレーションが開始し、その後、ステップ504で、処理回路の現在のプロセッサ状態が判定され、投機的プロセッサ状態として設定される。その後、ステップ508で、プリデコードオペレーションは、投機的プロセッサ状態を使用してプリデコード回路10により実行される。次いで、それぞれのプリデコードされた命令が、ステップ510で、投機的プロセッサ状態の指示とともに、キャッシュ20内に格納される。
【００９７】
図21は、処理回路からのアクセス要求を受け取った後、命令キャッシュ20により実行されるプロセスの概略を例示している。ステップ550で、処理回路からアクセス要求が来るのを待ち、そのようなアクセス要求を受け取った後、アクセス要求により指定されたアドレスを使用してステップ554においてルックアッププロシージャがキャッシュ内で実行される。
【００９８】
ステップ558で、アドレス比較回路464が、アドレスの一致を検出したかどうかが判定され、一致しなかった場合、ヒット/ミス回路470は、ステップ570でミス条件を生成し、ラインフィルオペレーションを実行させる。
【００９９】
ステップ558で、アドレス一致が検出された場合、ステップ560で、状態比較回路468が、現在のプロセッサ状態と関連する命令タグRAMエントリ内に格納されている投機的プロセッサ状態との間の一致を検出したかどうかが判定される。そうである場合、ヒット/ミス回路470は、関連するデータ命令RAM450からマルチプレクサ472を経由して処理回路25のデコード回路30に一致するプリデコードされた命令を出力させるヒット信号を生成する。しかしながら、ステップ560で、現在のプロセッサ状態が投機的プロセッサ状態に一致しないと判定された場合、ステップ568でミス条件が発生し、これにより、ラインフィルオペレーションが、アドレス一致がアドレス比較回路464により検出されたキャッシュウェイから異なるキャッシュウェイ内へと実行される。
【０１００】
多くの場合、プロセッサ状態の変更をトリガするために使用される状態変更命令は、新しいプロセッサ状態で実行される第１の命令を含む新しいアドレス(したがって異なるキャッシュライン)への分岐を引き起こす。しかしながら、代替の一実施形態では、これは、そういう場合ではなく、したがって、状態変更命令の後に、実行すべき次の命令が、同じキャッシュライン内の次の命令となり得る。このような状況では、命令キャッシュからのフェッチが複数の命令を含み、そのフェッチ内の１つの命令(最後の命令以外)が状態変更命令である。この場合、「ヒット」は、フェッチについて正しく実行され、状態変更命令の後のすべての命令は、命令キャッシュが１つの状態のみでプリデコードされているキャッシュラインを保持する場合に間違ってプリデコードされていることになる。これに対処するために、一実施形態では、この状況を突き止め、状態変更命令の後の逐次命令に対する「状態エラー」をトリガし、プリデコードプロセスを通してラインフィルまたはループバックを開始するように、エラー検出回路35が配列される。
【０１０１】
ARM命令セットとThumb命令セットとの間の遷移において、状態変更命令は新しいキャッシュラインに分岐するBLX型命令であるため、この潜在的問題は発生しない。しかしながら、Thumb命令セットとThumbEE命令セットとの間の遷移では、状態変更命令(ENTERX/LEAVEX)が分岐を使用せず、したがって新しいアドレスからのフェッチが、状態変更命令によりトリガさされないため、この問題が発生するおそれがある。この場合、上述のエラー検出メカニズムは、状態変更命令を識別し、状態変更命令の後の逐次命令に対する「状態エラー」をトリガし、状態変更命令直後のメモリアドレスから新しいフェッチを開始するために使用できる。
【０１０２】
上述の実施形態では、プリデコード回路は、命令を処理回路25に直接送るために使用されるレベル1命令キャッシュに関連付けられているが、図22に示されているような代替の一実施形態では、プリデコード回路10は、命令とデータの両方を格納する複合キャッシュ、例えば、レベル2キャッシュ605に関連付けられ得る。この図では、プロセッサシステムインターフェース5は、実際には、メモリと直接的に通信するのではなく、複合レベル2キャッシュ605と通信するように示されているが、完全を期すために、レベル1データキャッシュ615も、前の方で説明されている命令キャッシュ20に加えて示されている。この実施形態では、メモリからの命令は、プリデコード回路10に通され、そこでプリデコードされた命令が生成され、複合レベル2キャッシュ605に格納される。しかしながら、メモリからレベル2キャッシュに取り出されたデータ、またはレベル2キャッシュからメモリに書き戻されたデータは、プリデコード回路10をバイパスする。
【０１０３】
図23に示されているように、キャッシュラインが命令を格納するか、またはデータを格納するかを識別するために、追加の識別子630はそれぞれのキャッシュラインに関連付けられ得る。これは、投機的プロセッサ状態ビット635およびそれぞれのタグRAMエントリ625内のアドレス部分640に加えて付加され、そこで、対応するキャッシュライン650について、そのキャッシュラインの内容が、プリデコードされた命令であるのか、それともそれらの命令が実行されるときに処理回路により使用されるデータ値であるのかを識別する。このようなアプローチにより、命令/データ識別子630を使用することで、プリデコードを実行されているキャッシュラインを明確に識別できる。したがって、キャッシュ内でルックアッププロシージャを実行する場合、ルックアッププロシージャの実行時に現在のプロセッサ状態と突き合わせて投機的プロセッサ状態をチェックする必要があるかどうかの判定を行うことができ、特にそのようなチェックは、プリデコードされた命令を格納するキャッシュラインについてのみ必要である。
【０１０４】
上記の説明から、キャッシュに投機的プロセッサ状態を格納することにより、プリデコード回路による投機的プロセッサ状態の仮定が誤りであった場合の条件を後で検出することが可能であり、したがってキャッシュから読み出されたプリデコードされた命令は、処理回路によって使用されるべきではないことが分かる。これにより、命令がプリデコードプロセスにより破損してしまったいくつかの状況を検出する単純で、効果的で、電力効率の高いメカニズムが実現される。
【０１０５】
図24は、前述のと似た形式の命令パイプラインを例示している。この命令パイプラインは、３つの異なる命令セットの命令、つまり、ARM命令、Thumb32命令、およびThumb16命令に対応する処理オペレーションプリデコードおよびその後の実行をサポートする。多数の共通ARM命令が、Thumb32命令内にも存在する命令に密に対応する機能を共有するか、または有していることが認識されている。この認識は、命令キャッシュ20内に格納されているプリデコードされた命令を形成するためにARM命令がプリデコード回路10によりプリデコードされるシステムを使用し、また対応するThumb32命令との共有機能を表すために共有フォーマットを使用することにより利用され得る。したがって、命令キャッシュ20内に格納されているデコードされた命令において、ARM命令またはThumb32命令のいずれかに対応する個々のプリデコードされた命令は、同じ機能を表すために同じフォーマットを共有する。ARM命令がThumb32命令と同じようにしてプリデコードされた命令内に表される形式にARM命令を再マッピングしようとするプリデコード回路10によりARM命令に対し実行される再マッピングは、プリデコードステージにおける付加的活動を表すが、この活動は、それらの命令が命令キャッシュ20内にロードされるときに実行される一方で、このようにして再マップされているプリデコードされた命令は、典型的には、命令キャッシュ20から何回も読み込まれ、システムの残り部分により実行される。したがって、再マッピングで消費される付加的活動(エネルギー)は、再マップされた命令を何回も使用することで償却される。
【０１０６】
図24から明らかなように、ARM命令をプリデコードされた形式のThumb32命令と似た形式に再マップすることで、Thumb32デコード回路45を、何が元々ARM命令であったのかということに関して実行される必要のあるデコードオペレーションの大半に対し再利用できる。このため、デコード回路内のゲート数が節減され、その結果省エネにもつながる。
【０１０７】
共有フォーマットに再マップできるほど十分に密にはThumb32命令と機能を共有しない、またデコード回路がThumb32デコード回路45内にすでに備えられている可能性のある、いくつかのARM命令がある。これらのARM専用命令に関して、付加的なデコード回路46が備えられ、そのようなARM専用命令が識別されたときに使用されるように切り換えが行われる。このARM専用デコード回路46は、従来の複数の命令セットシステムでは必要になるであろう完全なARMデコード回路ブロックよりも相当小さい。
【０１０８】
すでに説明されているように、プリデコードされた命令は、36ビット長である。元のARM命令は、32ビット命令である。そこで、プリデコードされた命令内の付加ビットは、図25に示されているようにすでに説明されているサイドバンド信号を表すために使用され得る。ARM命令だけでなく他の命令に関しても同じサイドバンド信号を用意することにより、デコード回路45、50、46内のデコードがより効率的なものとなる。プリデコードされた命令内の１つのビットは、Thumb32に相当する命令のない、またデコードを実行してそこから適切な制御信号を生成するためにARM専用デコード回路46が使用されるARM専用命令であることを示すフラグとするために使用される。このARM専用ビットは、すべてのThumb32命令内に固定値を有し、ARM専用命令に対応するプリデコードされた命令内の反対の値に設定されるビットとして選択される。
【０１０９】
ARM命令セットの特徴の１つは、すべての命令が条件コードの４つのビット、つまりコードN、C、Z、およびVを含むことである。図25内に示されているように、これらの条件コードは、ビット位置16、17、34、および35に対応するプリデコードされた命令内の位置を割り当てられる。これらは、Thumb32命令に対応するプリデコードされた命令内で他の目的に通常は使用されるビット位置、つまり、識別ビット、不完全ビット、およびサイドバンド信号である。ARM命令が、メモリ内に32ビットアライメントワードとして格納されるとすると、識別および不完全ビットは、プリデコードされた命令内のARM命令には必要なく、サイドバンドビットの領域が１つあるだけでよく、これにより、条件コードN、C、Z、およびVを表すためにARM命令に対するプリデコードされた命令内のビット空間が解放される。Thumb32デコード回路45は、関連する条件コード値に応じてプリデコードされた命令の実行をゲートする方法でARM命令に対するプリデコードされた命令内の条件コードに対応するように容易に修正できる。ARM命令に対応するプリデコードされた命令が、その条件コードを満たす場合、命令は、実行され、適切な制御信号がそこから生成される。プリデコードされた命令がその条件コードを満たさない場合は、命令は実行されない。
【０１１０】
図26は、共有される機能が共有フォーマットで表されているプリデコードされた命令の形式に両方ともデコードされたThumb32 ADC命令とARM ADC命令の実施例を示している。Thumb32命令およびARM命令内の対応するフィールドは、同じ名前を付けられている。元のThumb32命令および元のARM命令のフォーマットは、非常に異なるが、それでも、同じフィールドのほぼすべてを含み、したがってThumb32命令がプリデコードされたときのそれらのフィールドの同じ位置に対応するプリデコードされた命令内の位置にARM命令内のフィールドを再マッピングするのは、比較的単純で、効率的であることが分かる。この再マッピングは、図24に例示されているプリデコード回路10により実行される。
【０１１１】
ARM命令は、ビット位置[31:28]に４つの条件コードビットを含む。すでに説明されているように、これらの条件コードは、ARM命令に対応するプリデコードされた命令内のビット位置35、34、17、および16にマッピングされる。ARM命令に対応するプリデコードされた命令は、ビット位置[15:14]にサイドバンド信号をそのまま含むが、これらは、ARM命令がメモリ内で32ビット境界に揃えられているため、プリデコードされた命令の36ビットの全体に適用され、したがってキャッシュライン境界をまたぐ命令に関連する問題は、キャッシュラインがワード境界に揃えられているためARM命令に関しては生じない。図26内では、プリデコードされた命令内のビット位置33に注意している。これは、Thumb32命令およびARM命令に対応する両方のプリデコードされた命令に関して「0であるべき」という値を持つものとして示されている。この「0であるべき」値は、Thumb32命令内のビット31に対応する。Thumb32命令内のビット31が、0でない場合、これは、予測不可能な挙動を示すものとして定義される。
【０１１２】
図27は、Thumb32命令により共有されないARM命令の機能を表すためにプリデコードされた命令内の命令ビット空間を構成するように、「1」に設定されているプリデコードされた命令内の「0であるべき」値に関連する予測不可能な挙動がどのように使用され得るかを示している。図27の実施例では、Thumb32相当命令がないARM命令は、レジスタ-シフトレジスタバリアントにおけるADC命令である。このバリアントでは、ARM命令のビット[11:8]で指定されたシフトレジスタRsは、２つの入力ソースレジスタRm、Rn内に格納されている値のうちの１つに適用されるシフト量を表す値を格納する。Thumb32命令は、ADC命令のレジスタ-シフトレジスタバリアントを持たない。図27のARM命令内のフィールドの残り部分は、図26に例示されているものと類似している。しかしながら、ARM命令のレジスタ-シフトレジスタバリアントは、即値フィールドを含まない。この即値フィールドは、図26のThumb32およびARM命令の両方に対するプリデコードされた命令内のビット[32:30]および[23:22]にマッピングされた。プリデコードされた命令内のビット空間は、図27のプリデコードされた命令に対するARM命令のレジスタ-シフトレジスタバージョン内にシフト値を格納するレジスタのレジスタ識別子Rsを表すために再利用され得る。デコード回路45は、レジスタ-シフトレジスタバリアントARM命令のADCを表すプリデコードされた命令内の「1」の値に「0であるべき」ビット33を設定することにより、この特定の形式を持つものとして、供給されるプリデコードされた命令を識別するように構成されている。
【０１１３】
Thumb32命令に対する予測不可能な挙動に対応するビット空間が、ARM専用バリアント命令を表すために再利用されるこの挙動は、ビット位置13でARM専用ビットを使用することと対比できる。ビット位置13のARM専用ビットは、Thumb32命令とあまり似ていない、AMR専用デコード回路46が備えられている命令について予約され得る。Thumb32命令内の予測不可能な挙動に対応するビット空間を再利用することで、プリデコードされた命令内に命令ビット空間を保持するだけでなく、デコード回路45の共有部分内で同じゲートを再利用することも容易になる。
【０１１４】
図28は、プリデコード回路10により実現され得る他の特徴を示している。Thumb16命令のシーケンスは、単一のThumb32命令に対応する複合機能を指定する隣接する命令を含むことができることが認識されている。プリデコード回路は、これを、隣接するThumb16命令を同等のThumb32命令に対応する単一のプリデコードされた命令にプリデコードすることにより認識できる。Thumb32命令に対応する単一のプリデコードされた命令は、単一エンティティとして実行パイプライン内に発行され、それに応じて、より高速に実行され、次いで、２つはThumb16命令を分離する。プリデコード回路10は、２つの隣接するThumb16命令がThumb32命令の対応するプリデコードされた形式に再マッピングされ得る比較的少数の共通の場合に集中し、そのような機会を識別するために回路を付加する場合の得失のバランスをとることができる。
【０１１５】
図29は、プリデコード回路内でARM命令をThumb32命令に再マップする概略を例示した流れ図である。ステップ700で、キャッシュラインが、メモリからフェッチされる。ステップ702で、デコードされるべき第１の命令が、ARM命令セットからの命令であるかどうかに関する判定が下される。プリデコードされるべき命令が、ARM命令セットからの命令ではない場合、処理は、ステップ704に進み、そこで、Thumb16またはThumb32のいずれかの命令によるプリデコードが実行される。
【０１１６】
ステップ702における判定が、デコードされるべき命令がARM命令であるという判定であった場合、ステップ706で、デコーダの共有部分によりデコードするためにARM命令がT32フォーマットのプリデコードされた命令にマッピングできるかどうかを判定する。ARM命令が、このようにしてマッピングできる場合、処理はステップ707を介して進む。ARM命令が、このようにしてマッピングできない場合、ステップ709では、ARM命令を、デコーダの非共有部分が使用されるようにARM専用ビットが設定されているプリデコードされた命令にプリデコードする。次いで、ステップ708で、プリデコードされた命令をキャッシュメモリ20に格納する。ステップ710では、プリデコードが必要とされる命令がフェッチされたキャッシュラインフィル内にまだあるかどうかを判定する。そのような命令がまだある場合、処理はステップ702に戻り、そうでなければ、処理は停止する。
【０１１７】
図30は、どのように２つのThumb16命令が、単一のThumb32命令に対応するプリデコードされた命令に再マップされ得るかの概略を示す流れ図である。ステップ712で、キャッシュラインが、メモリからフェッチされる。ステップ714で、デコードされるべき第１の命令が、Thumb16命令であるかどうかが判定される。命令がThumb16命令でない場合、処理はステップ716に進み、そこで、ARMまたはThumb32命令に対する適切な挙動に従ってプリデコードが実行される。
【０１１８】
ステップ714における判定が、フェッチされた命令がThumb16命令であるという判定であった場合、ステップ718で、次のThum16命令を読み込み、ステップ720で、２つの隣接するThumb16命令が１つのThumb32命令に対応するかどうかを識別する。
【０１１９】
ステップ720における判定が、２つの隣接するThumb16命令が１つのThumb32命令に対応しないという判定であった場合、ステップ722で、２つの別々のThumb16命令についてプリデコードされている命令を生成する。しかしながら、ステップ720における判定が、２つの隣接するThumb16命令が１つのThumb32命令に対応するという判定であった場合、ステップ724で、ステップ722により生成されるであろう２つの別々のThumb16命令と反対に同等のThumb32命令に対応するプリデコードされている命令を生成する。
【０１２０】
ステップ726で、プリデコードされた命令を命令キャッシュ20に格納する。次いで、ステップ728で、プリデコードを必要とする命令がフェッチされたキャッシュライン内にまだあるかどうかを判定する。そのような命令がまだある場合、処理はステップ714に戻る。
【０１２１】
図31は、分岐命令を識別し、プリデコードオペレーションを早期に打ち切るために、プリデコード回路10内で実行され得る処理に対応する流れ図を例示している。いずれかが取られる、または取られると予測される分岐命令に遭遇した場合、分岐(または選ばれることが予測される分岐)の後の命令が実行されない可能性が高いため、そのようなプリデコードの後に消費されるエネルギーが無駄になるので、プリデコードを早期に打ち切ることがエネルギー効率上よいことである。ステップ730で、キャッシュラインが、メモリからフェッチされる。ステップ732で、プリデコード回路10は、プリデコードされる命令が取られた分岐であるかどうかを識別する。プリデコードされる命令が、取られた分岐(例えば、無条件分岐(jump))である場合、処理は終了する。ステップ732における判定が、命令が取られた分岐でないという判定である場合、命令は、ステップ734でプリデコードされる。次いで、ステップ736で、プリデコードされた命令を命令キャッシュ20内に格納し、ステップ738で、プリデコードを必要とした命令がキャッシュライン内にまだあるかどうかを判定する。そのような命令がまだある場合、処理はステップ732に戻る。
【０１２２】
図29、30、および31の流れ図により例示されるプロセスは、逐次プロセスおよび互いに独立しているプロセスとして例示されていることを理解されたい。この技術分野を熟知する当業者であれば、これらのプロセスがプリデコード回路10を使用して実装される場合、これらのプロセスは、ステップ順序を変えて、またはいくつかのステップを並列実行して、行うこともできる。さらに、図29、30、および31に別々に例示されているプロセスは、実際に、少なくとも部分的に並列で実行される可能性が高い。本発明の技術は、これら様々な代替物のすべてを包含する。
【０１２３】
本明細書では、特定の実施形態が説明されているが、本発明はこれらに限定されず、多くの修正形態および追加形態もまた、本発明の範囲内で構成され得ることは明らかである。例えば、特許請求の範囲に記載された従属請求項の特徴の様々な組合せを、本発明の範囲から逸脱することなく独立請求項の特徴とともに構成することができる。
【符号の説明】
【０１２４】
1  データ処理システム
5  プロセッサシステムインターフェース
10  プリデコード回路
15  ラインフィルバッファ
20  命令キャッシュ
25  処理回路
30  デコード回路
35  エラー検出回路
39  ループバック経路
40  ARMデコーダ
45  Thumb-32デコーダ
46  ARM専用デコード回路
50  Thumb-16デコーダ
60  マルチプレクサ
65  マルチプレクサ
100  Thumb-16(T16)命令
110  Thumb-32(T32)命令
150  メモリ空間
160  キャッシュライン
170  ブロック
380  バッファ
380  レジスタ
450  命令データRAM
450-0，450-1  データRAM
460  命令タグRAM
460-0，460-1  タグRAM
464  アドレス比較回路
468  状態比較回路
470  ヒット/ミス回路
472  マルチプレクサ
480  アドレス部分
485  投機的プロセッサ状態
490  エントリ
492  キャッシュライン
605  レベル2キャッシュ
625  タグRAMエントリ
630  命令/データ識別子
635  投機的プロセッサ状態ビット
640  アドレス部分
650  キャッシュライン
【図１】
0005424653.tif 000002
【図２】
0005424653.tif 000003
【図３】
0005424653.tif 000004
【図４】
0005424653.tif 000005
【図５】
0005424653.tif 000006
【図６】
0005424653.tif 000007
【図７】
0005424653.tif 000008
【図８Ａ】
0005424653.tif 000009
【図８Ｂ】
0005424653.tif 000010
【図８Ｃ】
0005424653.tif 000011
【図８Ｄ】
0005424653.tif 000012
【図９】
0005424653.tif 000013
【図１０】
0005424653.tif 000014
【図１１】
0005424653.tif 000015
【図１２】
0005424653.tif 000016
【図１３】
0005424653.tif 000017
【図１４】
0005424653.tif 000018
【図１５】
0005424653.tif 000019
【図１６】
0005424653.tif 000020
【図１７】
0005424653.tif 000021
【図１８】
0005424653.tif 000022
【図１９】
0005424653.tif 000023
【図２０】
0005424653.tif 000024
【図２１】
0005424653.tif 000025
【図２２】
0005424653.tif 000026
【図２３】
0005424653.tif 000027
【図２４】
0005424653.tif 000028
【図２５】
0005424653.tif 000029
【図２６】
0005424653.tif 000030
【図２７】
0005424653.tif 000031
【図２８】
0005424653.tif 000032
【図２９】
0005424653.tif 000033
【図３０】
0005424653.tif 000034
【図３１】
0005424653.tif 000035