JP3678444B2 - パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ - Google Patents

パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ Download PDF

Info

Publication number
JP3678444B2
JP3678444B2 JP25199094A JP25199094A JP3678444B2 JP 3678444 B2 JP3678444 B2 JP 3678444B2 JP 25199094 A JP25199094 A JP 25199094A JP 25199094 A JP25199094 A JP 25199094A JP 3678444 B2 JP3678444 B2 JP 3678444B2
Authority
JP
Japan
Prior art keywords
instruction
instructions
register
stage
execution
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
JP25199094A
Other languages
English (en)
Other versions
JPH07152559A (ja
Inventor
ブルーム マーク
エイ ガリベイ ジュニア ロール
シー マクマハン スチーブン
ベアード ダグラス
ダブリュー ハーヴィン マーク
ケイ アイトリーム ジョン
Original Assignee
ヴァイア サイリックス インコーポレイテッド
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ヴァイア サイリックス インコーポレイテッド filed Critical ヴァイア サイリックス インコーポレイテッド
Publication of JPH07152559A publication Critical patent/JPH07152559A/ja
Application granted granted Critical
Publication of JP3678444B2 publication Critical patent/JP3678444B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3871Asynchronous instruction pipeline, e.g. using handshake signals between stages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/226Microinstruction function, e.g. input/output microinstruction; diagnostic microinstruction; microinstruction format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Description

【0001】
【産業上の利用分野】
本発明は、一般に、マイクロプロセッサに係り、より詳細には、パイプライン式スーパースカラーのマイクロプロセッサアーキテクチャに係る。
【0002】
【従来の技術】
マイクロプロセッサの設計においては、命令スループット、即ち1秒当たりに実行される命令の数が第1に重要なものである。1秒当たりに実行される命令の数は、種々の手段によって増加することができる。命令スループットを増加するための最も簡単な技術は、マイクロプロセッサが動作する周波数を増加することである。しかしながら、作動周波数の増加は、製造技術によって制限されると共に、過剰な発熱を招く。
【0003】
従って、近代のマイクロプロセッサ設計は、クロックサイクル周期当たりに実行される命令の平均数を増加する設計技術を用いることにより命令スループットを増加することに集中している。命令スループットを増加するこのような1つの技術が「パイプライン」である。パイプライン技術は、マイクロプロセッサを通して流れる各命令を多数の部分にセグメント化し、その各々をパイプラインの個別の段により取り扱うことができる。パイプライン動作は、実行中に多数の命令をオーバーラップすることによってマイクロプロセッサの速度を増加する。例えば、各命令を6つの段階で実行することができそして各段階がその機能を実行するのに1つのクロックサイクルを必要とする場合には、6つの個別の命令を同時に実行し(各々がパイプラインの個別の段階で実行される)、各クロックサイクルに1つの命令を完了することができる。この考え方によれば、パイプライン式アーキテクチャは、6個のクロックサイクルごとに1つの命令を完了する非パイプライン式アーキテクチャよりも6倍も大きな命令スループットをもつことになる。
【0004】
マイクロプロセッサの速度を高めるための第2の技術は、マイクロプロセッサを「スーパースカラー」として構成することである。スーパースカラーアーキテクチャにおいては、クロックサイクル当たりに2つ以上の命令が発行される。流れの中の他の命令に依存する命令がなければ、命令スループットの増加は、スカラー性の程度に比例する。従って、アーキテクチャがレベル2までスーパースカラーである(各クロックサイクルに2つの命令が発行されることを意味する)場合には、マシンの命令スループットが2倍となる。
【0005】
マイクロプロセッサは、高い命令スループットを得るためには、スーパーパイプライン式(多数の段をもつ命令パイプラインを「スーパーパイプライン」と称する)であると共にスーパースカラーとすることができる。しかしながら、このようなシステムの動作は、実際には、各々の命令を所与の数のパイプ段で手際よく実行でき且つ命令の実行が相互依存しないような理想的な状態からかけ離れている。実際の動作においては、命令は変化するリソース要求を有し、従って、パイプラインを通る命令の流れに割り込みを生じる。更に、命令は典型的に相互依存的であり、例えば、レジスタの値を読み取る命令は、その同じレジスタに値を書き込む手前の命令に依存し、第1の命令がレジスタへの書き込みを完了するまで第2の命令を実行できない。
【0006】
【発明が解決しようとする課題】
従って、スーパーパイプライン及びスーパースカラー技術は、マイクロプロセッサのスループットを高めることはできるが、命令のスループットは、スーパーパイプライン式スーパースカラーアーキテクチャの実施によって大きく左右される。1つの特定の問題は、パイプラインにおける命令の流れを制御することにより、マイクロプロセッサの周波数を増加せずに命令スループットが高められることである。マイクロプロセッサの動作中に依存性又は他のファクタによって種々の段が不作動にされるので、スーパーパイプライン式スーパースカラーマシンの効率が低下される。
【0007】
それ故、命令の流れを効率的に制御できるマイクロプロセッサアーキテクチャの必要性が生じている。
【0008】
【課題を解決するための手段】
本発明は、複数の命令パイプラインを備え、各パイプラインは、パイプラインへ発生された命令を処理する複数の段を有しているようなスーパースカラー、パイプライン式のプロセッサに関する。
【0009】
本発明の1つの特徴において、プロセッサは、発生される命令間のデータ依存性に係わりなく多数のパイプラインへ命令を同時に発生する。パイプ制御手段はパイプラインにおける命令間の依存性を検出し、そして1つのパイプラインの現在段における第1命令を適切に処理するために別のパイプラインの第2命令におけるデータ依存性を解決しなければならないことがない限り、上記現在段における第1命令が上記データ依存性によって遅延されないように、上記パイプラインの段を通る命令の流れを制御する。
【0010】
本発明の別の特徴においては、パイプ制御手段は、所与の段に対し、シニア命令がもはや例外を生じることがなくなる後までジュニア命令がシニア命令の前にプロセッサ状態を変更できないように、パイプラインにおける命令の流れを制御する。
【0011】
本発明の別の特徴においては、パイプスイッチ手段は、パイプラインにおける命令をあるシーケンスで順序付けして命令間の依存性を減少するように、パイプライン間で命令を選択的に切り換えられるようにする。
【0012】
本発明の別の特徴においては、パイプラインの少なくとも2つが実行段を備えており、マイクロコントローラ手段は、各実行段に独立したマイクロ命令の流れを与え、選択的命令に対して、実行段が独立して制御されて単一の命令を処理するように、各マイクロ命令の流れを選択的に制御する。
【0013】
本発明の別の特徴においては、パイプ制御手段は、各段の状態情報を監視し、そしてパイプラインにおける命令が他のパイプラインにおける命令流とは独立してある段から別の段へ進み得るように、状態情報に応答して段間の命令の流れを制御する。
【0014】
本発明の別の特徴においては、パイプ制御手段は、第1命令と第2命令との間の依存性を、その一方の命令に対するオペランドソースを変更することによって排除する。
【0015】
本発明の別の特徴においては、レジスタ変換手段は、論理レジスタへの書き込みに応答してこれら論理レジスタの各々に最も最近割り当てられている1組の物理レジスタを定めるプロセッサ状態情報を維持する。パイプラインの各段において命令が例外を生じるかどうかを決定する前にパイプラインに命令が発生されたときに、その段において命令に対する状態情報がチェックポイント処理され、命令が例外を生じる場合には、それに対応するチェックポイント処理された状態情報が検索されて、プロセッサ状態を、その命令を発生した点へと復帰させる。更に、パイプラインへ分岐又は浮動小数点命令が発生され、そしてその後の命令がこのような分岐又は浮動小数点命令の後で推論的に発生されるものである場合には、このような分岐又は浮動小数点命令に対する状態情報がチェックポイント処理されて、分岐の予想を誤るか又は浮動小数点命令が失敗に終わった場合に、それに対応するチェックポイント処理された状態情報が検索されて、プロセッサ状態を、その分岐又は浮動小数点命令を発生した点へと復帰させる。
【0016】
本発明の別の特徴においては、定められた1組の論理レジスタは、命令のためのオペランドのソース及び行き先として多数のアドレス可能なサイズを有している。レジスタ変換手段は、上記定められた1組の論理レジスタの1つへ書き込む命令及びその論理レジスタに関連したサイズに応答して、その1つの論理レジスタへ物理レジスタを割り当てる。
【0017】
本発明の別の特徴においては、レジスタ変換手段は、各物理レジスタに対して現在指示及び論理IDコードを記憶し、これは、その物理レジスタがこのような論理IDコードによって識別された論理レジスタに対する現在値を含んでいるかどうかを指示するものである。論理レジスタへの各アクセスに対し、それに対応する論理IDコードが、物理レジスタと共に記憶された各論理IDコードと比較され、そして対応する物理IDコードが、その関連する論理レジスタの現在値を含む物理レジスタに対して出力される。更に、レジスタ変換ユニットは、各物理レジスタに対し、それに関連する論理レジスタにデータ依存性が存在するかどうかを指示する状態情報を記憶することができる。
【0018】
本発明の別の特徴においては、少なくとも1つの実行パイプラインは、マイクロコントローラ手段によって制御される実行ユニットを備えている。選択された命令に対し、レジスタ変換ユニットも、マイクロコントローラ手段によって制御される。
【0019】
本発明の実施例は、次の技術的硬化の1つ以上を実現するように実施される。命令は、それらの間の依存性に係わりなく発生され、パイプラインに不必要にバブルが入り込まないようにされる。というのは、依存性は、通常の命令の流れによるか、又は依存性を解決すためのパイプラインにおけるメカニズムにより、ストールを生じることなく、それ自体解決できるからである。命令は、それらがもはや欠陥を生じることがなくなった後に順序から外れて完了することができる。これは、完了のために多数のクロックサイクルを必要とするマルチボックス命令の場合に特に効果的であり、さもなくば、命令の流れを著しくストールすることになる。依存性は、パイプライン間で命令を切り換えることによって減少することができる。個別のパイプラインにおける2つの実行ユニットは、2つの個別のマイクロ命令流を用いて単一の命令を処理するよう個々に制御することができ、実行段又はマイクロシーケンサの複雑さを著しく増加することもない。命令は、各実行パイプラインを経て独立して進むことができ、依存性により生じるバブルを命令の処理中に除去することができ、特に、リード・アフタ・ライト(書き込み後の読み取り)依存性は、命令の順序を変更するようにソースコードを再コンパイルすることなく排除される。これら全ての特徴及び効果は、パイプラインの実行性能を最大にするよう働く。
【0020】
本発明の実施例が次の技術的効果の1つ以上を実現するように実施される他の領域は、次の通りである。物理レジスタの各々への書き込み保留状態を維持することにより、レジスタを割り当てそして状態情報を与える制御が簡単にされる。物理レジスタに関する状態情報をチェックポイント処理することにより、マイクロプロセッサは、例外、誤った予想分岐、浮動小数点エラー又は他の命令エラーを生じた命令の後のプロセッサ状態を単一クロックサイクル内に回復することができ、これにより、このようなエラーからの回復におけるペナルティを相当に軽減することができる。多サイズの論理レジスタに対しては、幾つかのデータ依存性を排除する一方、多サイズレジスタを使用する既存の命令セットとの適合性を維持するために、レジスタ再ネーミングがサポートされる。物理レジスタは、最小限のハードウェアを使用して論理レジスタの要求に応答して迅速に識別することができる。物理レジスタに関連した状態情報を維持することにより、データ依存性を容易に検出することができる。これらの特徴及び効果を得るのに使用されるレジスタ変換ユニットは、選択された命令に対し、このような命令を処理する実行ユニットを制御するマイクロコントローラにより(ハードウェア制御信号を用いる通常の方法によるのではなく)直接制御することができる。
【0021】
【実施例】
本発明及びその効果を完全に理解するために、添付図面を参照して以下に詳細に説明する。本発明のマイクロプロセッサの模範的実施例の詳細な説明は、次のように構成される。
1.模範的プロセッサシステム
1.1 マイクロプロセッサ
1.2 システム
2.一般化されたパイプラインの流れ
3.パイプライン制御
3.1 一般化されたストール制御
3.2 パイプの切り換え
3.3 マルチボックス命令
3.4 排他的命令
4.順序通りの命令通過/順序を外れた命令の完了
5.パイプの切り換え
6.依存性に関わりにない命令の発生
7.マルチスレッドのEX動作
8.レジスタ変換ユニット
8.1 レジスタ変換の概要
8.2 変換制御レジスタ
8.3 レジスタ割り当て
8.4 2つの行き先をもつ命令
8.5 推論的分岐実行のためのチェックポイントレジスタ
8.6 例外からの回復
8.7 レジスタ変換ユニットのマイクロコントロール
8.8 レジスタID変換及びハザード検出
9.送り
10. 結論
【0022】
この構成テーブル及びこの詳細な説明で使用する対応する見出しは、参照の便宜上設けられているものに過ぎない。マイクロプロセッサの従来又は既知の観点の説明は、これを不必要に詳細にすることにより本発明の説明を不明瞭にしない程度に省略する。
【0023】
1.模範的プロセッサシステム
模範的プロセッサシステムが図1、2及び3に示されている。図1及び2は、各々、模範的なスーパースカラー、スーパーパイプライン型マイクロプロセッサと、2つの実行パイプラインのパイプ段階との基本的な機能ブロックを示している。図3は、マイクロプロセッサを使用する模範的プロセッサシステム(マザーボード)設計を示している。
【0024】
1.1 マイクロプロセッサ
図1を参照すれば、マイクロプロセッサ10の主たるサブブロックは、次のものを含む。(a)CPUコア20;(b)プリフェッチバッファ30;(c)プリフェッチャ35;(d)BPU(分岐処理ユニット)40;(e)ATU(アドレス変換ユニット)50;及び(f)TAG RAM62を含む単一化した16Kバイトのコード/データキャッシュ60。256バイトの命令ラインキャッシュ65は、単一化キャッシュへの命令フェッチを減少するための一次命令キャッシュを構成し、単一化キャッシュは、二次命令キャッシュとして働く。オンボード浮動小数点ユニット(FPU)70は、CPUコア20によってこれに発せられた浮動小数点命令を実行する。
【0025】
マイクロプロセッサは、内部32ビットアドレス及び64ビットデータバスADS及びDATAを使用している。単一化キャッシュ60及び命令ラインキャッシュ65の32バイトラインサイズに対応する256ビット(32バイト)プリフェッチバス(PFB)は、32命令バイトの全ラインを単一のクロックにおいて命令ラインキャッシュへ転送できるようにする。外部32ビットアドレス及び64ビットデータバスへのインターフェイスは、バスインターフェイスユニット(BIU)を経て行われる。
【0026】
CPUコア20は、2つの実行パイプX及びYを有するスーパースカラー設計のものである。これは、命令デコーダ21と、アドレス計算ユニット22X及び22Yと、実行ユニット23X及び23Yと、32個の32ビットレジスタをもつレジスタファイル24とを備えている。ACコントロールユニット25は、レジスタスコアボード及びレジスタ再ネーミングハードウェアをもつレジスタ変換ユニット25aを備えている。マイクロシーケンサ及びマイクロROMを含むマイクロコントロールユニット26は、実行制御を与える。
【0027】
CPUコア20からの書き込みは、12個の32ビット書き込みバッファ29へ待ち行列され、書き込みバッファの割り当ては、ACコントロールユニット25によって実行される。これらの書き込みバッファは、単一化キャッシュ60へ書き込むためのインターフェイスを形成し、非キャッシュ処理書き込みは、書き込みバッファから外部メモリへ直接送られる。書き込みバッファロジックは、オプションの読み取りソース作用及び書き込み集合作用をサポートする。
【0028】
パイプコントロールユニット28は、実行パイプを通る命令の流れを制御し、これは、命令が例外を生じないことが決定されるまで命令の順序を保持し、命令流におけるバブルを押しつぶし、そして誤って予想された分岐及び例外を生じる命令の後に実行パイプをフラッシュすることを含む。各段階に対し、パイプコントロールユニットは、どの実行パイプが最も初期の命令を含むかを追跡し、「ストール」出力を与え、そして「遅延」入力を受け取る。
【0029】
BPU40は、分岐(行われる又は行われない)の方向を予想し、そしてその予想された行われる分岐及び流れ命令の無条件変更(ジャンプ、コール、リターン)に対するターゲットアドレスを与える。更に、このBPUは、分岐及び浮動小数点命令の場合には推論的実行を監視し、即ち予想を誤ることのある分岐後に推論的に発生される命令の実行、及びFPU70へ発生される浮動小数点命令であって推論的に発生された命令が実行を完了した後に失敗となることのある浮動小数点命令の実行を監視する。浮動小数点命令が失敗に終わった場合、又は分岐が誤って予想された(これは、分岐に対するEX又はWB段階まで分からない)場合には、実行パイプラインは、その失敗となった又は予想を誤った命令の点まで修理され(即ち、その命令の後に実行パイプラインがフラッシュされ)、そして命令のフェッチが再開されねばならない。
【0030】
パイプラインの修理は、各パイプ段において浮動小数点又は予想分岐命令がその段に入るときにプロセッサ状態のチェックポイントを形成することにより行われる。これらのチェックポイント検査される命令に対し、その後の推論的に発生される命令によって変更され得る全てのリソース(プログラマが見ることのできるレジスタ、命令ポインタ、条件コードレジスタ)がチェックポイント検査される。チェックポイント検査される浮動小数点命令が失敗に終わるか又はチェックポイント検査される分岐が誤って予想された場合は、そのチェックポイント検査された命令の後に実行パイプラインがフラッシュされ、浮動小数点命令の場合には、これは、典型的に、実行パイプライン全体をフラッシュすることを意味し、一方、誤って予想された分岐の場合には、完了することが許されたEXの対命令及びWBの2つの命令があることを意味する。
【0031】
模範的なマイクロプロセッサ10の場合に、推論の程度についての主たる制約は、次の通りである。(a)一度に4つまでの浮動小数点又は分岐命令に対してのみ推論的実行が許される(即ち、推論レベルは最大4である)。(b)書き込み又は浮動小数点の記憶は、それに関連した分岐又は浮動小数点命令が解決する(即ち、予想が正しいか又は浮動小数点命令が失敗に終わらない)までキャッシュ又は外部メモリに対して完了しない。
【0032】
単一化キャッシュ60は、4方セット連想(4kセットサイズをもつ)のもので、擬似LRU置換アルゴリズムを使用し、ライトスルー及びライトバックモードを有している。これは、クロック当たり2つのメモリアクセス(データ読み取り、命令フェッチ又はデータ書き込み)を許すためにデュアルポート式(バンク構成による)にされている。命令ラインキャッシュは、完全連想、ルックアサイド実施(単一化キャッシュに対して)のもので、LRU置換アルゴリズムを使用する。
【0033】
FPU70は、4深さロード及び記憶待ち行列をもつロード/記憶段と、変換段(32ビットないし80ビットの拡張フォーマット)と、実行段とを備えている。ロードは、CPUコア20により制御され、そしてキャッシュ処理記憶は、書き込みバッファ29により指示される(即ち、各浮動小数点記憶動作に対して書き込みバッファが割り当てられる)。図2を参照すれば、マイクロプロセッサは、7段のX及びY実行パイプラインを有し、即ち、命令フェッチ段IF、2つの命令デコード段ID1、ID2、2つのアドレス計算段AC1、AC2、実行段EX、及びライトバック段WBを有している。複合命令デコードID及びアドレス計算ACパイプ段は、スーパーパイプラインであることに注意されたい。
【0034】
IF段は、CPUコア20に連続的なコード流を与える。プリフェッチャ35は、(一次)命令ラインキャッシュ65或いは(二次)単一化キャッシュ60のいずれかからプリフェッチバッファ30へ16バイトの命令データをフェッチする。BPU40は、プリフェットアドレスでアクセスされ、そして予想される流れの変更に対してプリフェッチャへターゲットアドレスを供給し、プリフェッチャが1つのクロック内に新たなコード流へシフトできるようにする。
【0035】
デコード段ID1及びID2は、可変長さのX86命令セットをデコードする。命令デコーダ21は、各クロックごとにプリフェッチバッファ30から16バイトの命令データを検索する。ID1において、2つの命令の長さがデコードされて(X及びYの実行パイプに対して各々1つづつ)、X及びY命令ポインタを得、それに対応するX及びYバイト使用信号がプリフェッチバッファへ返送される(これは、次いで、次の16バイト転送のために増加する)。又、ID2においても、流れの変更のような幾つかの命令形式が決定され、即座及び/又は変位オペランドが分離される。ID2段は、X及びY命令のデコード、マイクロROMに対するエントリポイントの発生、及びアドレスモード及びレジスタフィールドのデコードを完了する。
【0036】
ID段の間に、命令を実行するための最適なパイプが決定され、命令がそのパイプへ発生される。パイプの切り換えにより、ID2XからAC1YへそしてID2YからAC1Xへ命令を切り換えることができる。模範的な実施例については、流れ変更命令、浮動小数点命令及び排他的命令のような幾つかの命令がXパイプラインのみへ発生される。排他的命令は、EXパイプ段において失敗となることのある命令、及びある形式の命令、例えば、保護モードセグメントロード、ストリング命令、特殊なレジスタアクセス(制御、デバッグ、テスト)、乗算/除算、入力/出力、PUSHA/POPA(プッシュオール/ポップオール)、及びタスクスイッチを含む。排他的命令は、両パイプのリソースを使用することができる。というのは、これらは、ID段のみから発生される(即ちこれらは他の命令と対にされない)からである。これらの発生制約を除くと、いかなる命令も対にして、X又はYのいずれのパイプへ発生することもできる。
【0037】
アドレス計算段AC1及びAC2は、メモリ参照のためのアドレスを計算し、そしてメモリオペランドを供給する。AC1段は、クロックごとに2つの32ビットリニア(3オペランド)アドレスを計算する(比較的稀である4つのオペランドアドレスは、2つのクロックを必要とする)。このパイプ段の間に、データ依存性もチェックされそしてレジスタ変換ユニット25a(レジスタスコアボード及びレジスタ再ネーミングハードウェア)を用いて分析され、32個の物理レジスタ24は、X86アーキテクチャで定められた8個の汎用のプログラマから見える論理レジスタをマップするのに使用される(EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP)。AC2段の間に、レジスタファイル26及び単一化キャッシュ70は、物理アドレスでアクセスされ(キャッシュヒットの場合には、デュアルポート式の単一化キャッシュのためのキャッシュアクセス時間は、レジスタのアクセス時間と同じであり、レジスタセットを効果的に拡張する)、物理アドレスは、リニアアドレスであるか、或いはアドレス変換がイネーブルされた場合には、TLB60によって発生された変換されたアドレスである。
【0038】
ACユニットは、8個のアーキテクチャ(論理)レジスタ(X86で定められたレジスタセットを表す)を備えており、これらは、アドレス変換のためのレジスタオペランドをアクセスする前にレジスタ変換ユニットAC1のアクセスに必要な遅延を回避するようにACユニットによって使用される。アドレス変換を必要とする命令については、AC1は、アーキテクチャレジスタをアクセスする前にこれらアーキテクチャレジスタの所要データが有効になる(リード・アフタ・ライトの依存性がない)まで待機する。AC2段の間に、レジスタファイル24及び単一化キャッシュ60を物理アドレスでアクセスすることによりソースオペランドが得られ(キャッシュヒットの場合には、デュアルポート式の単一化キャッシュのためのキャッシュアクセス時間は、レジスタのアクセス時間と同じであり、レジスタセットを効果的に拡張する)、物理アドレスは、リニアアドレスであるか、或いはアドレス変換がイネーブルされた場合には、ATU50によって発生された変換されたアドレスである。
【0039】
変換されたアドレスは、メモリのページテーブル及びチップ上のワークスペース制御レジスタからの情報を用いてリニアアドレスからATU(TLB又は変換ルックアサイドバッファを用いた)によって発生される。単一化キャッシュは、仮想インデックスされると共に物理的にタグが付けられていて、アドレス変換がイネーブルされたときには、変換されていないアドレス(AC1の終わりに得られる)でセットの選択を行うことができ、そして各セットに対し、ATUからの変換されたアドレス(AC2において初期に得られる)でタグの比較を行うことができる。セグメント化及び/又はアドレス変換違反のチェックも、AC2で行われる。
【0040】
命令は、それらが例外を生じないと決定されるまではプログラム順序に保たれる。ほとんどの命令に対し、この決定は、AC2の間又はその前に行われ、浮動小数点命令及びある排他的命令は、実行中に例外を生じることがある。命令は、AC2からEXへ順次に通され(又は浮動小数点命令の場合はFPU70へ)、EXにおいて依然として例外を生じることのある整数命令は、排他的と示され、それ故、単独で両方の実行パイプへ発生されるので、しかるべき順序での例外の取り扱いが確保される。
【0041】
実行段EXx及びEXyは、命令により定められた動作を実行する。命令は、EXにおいて可変数のクロックを消費し、即ち順序がずれて実行することが許される(順序ずれ完了)。両方のEX段は、加算、論理及びシフト機能ユニットを備え、そして更に、EXx段は、乗算/除算ハードウェアを含む。
【0042】
ライトバック段WBは、レジスタファイル24、条件コード、及びマシン状態の他の部分を既に実行された命令の結果で更新する。レジスタファイルは、WBのフェーズ1(PH1)に書き込まれ、そしてAC2のフェーズ2(PH2)に読み取られる。
【0043】
書き込みバッファ27、推論的実行及びマイクロシーケンサについての付加的な開示は、本発明と同日に出願されたガリベイ氏等の「書き込みバッファをもつマイクロプロセッサにおける推論的実行及び例外処理のためのデータの制御(Control of Data for Speculative Execution and Exception Handling in a Microprocessor with Write Buffer)」と題する米国特許出願;本発明と同日に出願されたマクマホン氏の「分岐処理ユニット(Branch Processing Unit)」と題する米国特許出願;本発明と同日に出願されたブラハム氏の「パイプライン式プロセッサにおける推論的実行(Speculative Execution in a Pipelined Processor)」と題する米国特許出願;及び本発明と同日に出願されたハービン氏等の「単一クロック命令デコードアーキテクチャを有するマイクロプロセッサ(Microprocessor Having Single Clock Instruction Decode Architecture)」と題する米国特許出願に見ることができ、これらは全て参考としてここに取り上げる。
【0044】
1.2 システム
図3を参照すれば、模範的な実施例として、マイクロプロセッサ10は、単一チップのメモリ及びバスコントローラ82を含むプロセッサシステムに使用される。メモリ/バスコントローラ82は、マイクロプロセッサと外部メモリサブシステム−−レベル2キャッシュ84及びメインメモリ86−−との間のインターフェイスを形成し、64ビットプロセッサデータバス(PD)上でのデータの移動を制御する(データ路はコントローラの外部であり、ピンの本数及びコストを低減する)。
【0045】
コントローラ82は、32ビットアドレスバスPADDRに直接インターフェイスし、コントローラ内のレジスタを読み取ったり書き込んだりするための1ビット巾のデータポート(図示せず)を備えている。両方向性の分離バッファ88は、マイクロプロセッサ10と、VL及びISAバスとの間のアドレスインターフェイスを形成する。
【0046】
コントローラ82は、VL及びISAバスインターフェイスの制御を行う。VL/ISAインターフェイスチップ91(HT321のような)は、32ビットVLバス及び16ビットISAバスへの標準インターフェイスを形成する。ISAバスは、BIOS92、キーボードコントローラ93、I/Oチップ94及び標準ISAスロット95へインターフェイスする。インターフェイスチップ91は、二重の高/低ワード〔31:16〕/〔15:0〕分離バッファにより形成された両方向性32/16マルチプレクサ96を経て32ビットVLバスへインターフェイスする。VLバスは、標準VLスロット97へインターフェイスし、そして両方向性分離バッファ98を経て64ビットプロセッサデータバスの下位ダブルワード〔31:0〕へインターフェイスする。
【0047】
2.一般化されたパイプラインの流れ
図4は、パイプラインを通る8個の命令の流れを示すもので、2パイプラインアーキテクチャに対するオーバーラップした命令実行を示している。付加的なパイプラインと、各パイプラインに対する付加的な段とを設けることができる。好ましい実施例において、マイクロプロセッサ10は、システムクロック信号124の倍数である内部クロック122を使用している。図4において、内部クロックはシステムクロックの周波数の2倍で動作するものとして示されている。
【0048】
第1内部クロックサイクル126の間に、ID1は、各命令X0及びY0に基づいて動作する。内部クロックサイクル128の間に、命令X0及びY0はID2段にあり(X0はID2xそしてY0はID2yにあり)、ID1段には命令X1及びY1がある。内部クロックサイクル130の間には、ID1に命令X2及びY2があり、ID2に命令X1及びY1があり(X1はID2xにそしてY1はID2yにあり)、そしてAC1段に命令X0及びY0がある(X0はAC1xにそしてY0はAC1yにある)。内部クロックサイクル132の間には、ID1段に命令X3及びY3があり、ID2段に命令X2及びY2があり、AC1段に命令X1及びY1があり、そしてAC2段に命令X0及びY0がある。これらの命令は、X及びYパイプラインの段を経て順次流れ続ける。
【0049】
クロック134ないし140に示されたように、各命令の実行部分は、順次クロックサイクルにおいて実行される。これは、パイプライン式アーキテクチャの主たる利点であり、個々の命令の実行時間を減少せずに、クロック当たりに完了される命令の数が増加される。従って、ハードウェアの速度に対する大きな需要と共に大きな命令スループットが達成される。
【0050】
図4に示す命令の流れは、最適な場合である。図示されたように、2つ以上のクロックサイクルを必要とする段はない。しかしながら、実際のマシンでは、1つ以上の段が完了のために付加的なクロックサイクルを必要とし、他のパイプ段を通る命令の流れを変更する。更に、一方のパイプラインを通る命令の流れは、他方のパイプラインを通る命令の流れによって左右される。
【0051】
多数のファクタにより1つ又は全てのパイプラインの種々の段に遅延が生じることがある。例えば、メモリへのアクセスがメモリキャッシュにおいて失敗し、1クロックで命令を処理するに必要な時間にデータをアクセスするのを妨げることがある。これは、データがメインメモリから検索されるまでEX段の片側又は両側が遅れることを必要とする。ある命令は、ここに示す実施例では1つの実行段(X実行パイプのEXX)にしかない乗算器のようなハードウェアリソースを必要とする。この場合には、リソースが使用できるまでその段が遅れることになる。データ依存性も遅延を生じることがある。ある命令が加算のような手前の命令の結果を必要とする場合には、その命令が実行ユニットによって処理されるまで待機しなければならない。
【0052】
「マルチボックス」命令、即ち多数のマイクロ命令を用いて実行され、従って完了するのにEXパイプ段に2つ以上のクロックサイクルを必要とする命令、によって他の遅延が生じる。これらの命令は、ID2段の出力においてパイプラインを通るその後の命令の流れを停止する。
【0053】
パイプラインを通る命令の流れは、パイプコントロールユニット28によって制御される。好ましい実施例では、両方(又は全て)のパイプを通る命令の流れを制御するのに単一のパイプコントロールユニット28が使用される。パイプを通る命令の流れを制御するために、パイプコントロールユニット28は、パイプライン102及び104を含む種々のユニットからの「遅延」信号を受け取り、そして種々のユニットへ「ストール」信号を発行する。
【0054】
X及びYの両パイプラインに対して単一のパイプコントロールユニット28が使用されるので、パイプライン自体は互いに独立して制御される。換言すれば、Xパイプラインのストールが必ずしもYパイプラインのストールを生じることはない。
【0055】
3.パイプライン制御
図5は、パイプライン段間における段間通信を示している。これらの段は、段N−1、段N、及び段N+1と任意に示されている。各段は、パイプコントロールユニット(パイプコントローラ)28からの独特の入力STALLと、出力DELAYとを有する。DELAY出力は、その段がそこに含まれた命令を完了するのに少なくとももう1つのクロックを必要とする場合にイネーブルされる。各パイプラインに対し、パイプコントロールユニット28は、パイプ段が「終了」であるかどうかをDELAY信号に基づいて決定する。段は、その命令を後続段へ通す準備ができた場合に「終了」である。段へのSTALL入力は、その段が命令を後続パイプ段へ転送できない場合にパイプコントロールユニット28によってイネーブルされる。というのは、その後続段が遅延又はストールされるからである。好ましい実施例では、パイプライン段は、それが遅延されない(即ち、DELAY信号が偽である)場合にのみストールされる。
【0056】
「有効」パイプ段は、進行中又は完了した命令を含んでいる段である。無効パイプ段は、命令を含まない。無効パイプ段は、「バブル」を含むと言える。「バブル」は、ID1及びID2段が、AC1及びAC2段112及び114を完全に空にするに充分なほど命令をデコードできないときに、パイプライン100の前端において形成される。又、バブルは、パイプ段がその命令を後続段へ転送しそしてその手前の段が遅れるときにも形成される。パイプ段が段の有効性を指示するビットを入力も出力もしない間に、その段のバブルがパイプラインコントロールユニット28によって追跡される。
【0057】
ある場合には、パイプ段におけるバブルが手前の段からの命令によってオーバーライトされ、これは「スリップ」と称される。又、パイプ段は、後続パイプ段に例外状態があるために完了すべきでない命令を含む場合には、「フラッシュ」することもできる。信号FLUSHは各パイプ段への入力である。パイプ段は、その命令がエラー状態のために完了できずそして現在段を越えて転送してはならない場合に「例外」を発生する。例外は、全ての命令に対し、IF段106、ID1及びID2段、並びにAC1及びAC2段に生じ得る。「排他的」命令と示される幾つかの命令は、実行段116に例外を生じることがある。更に、浮動小数点命令についても、例外が生じ得る。
【0058】
3.1 一般化されたストール制御
一般的な場合において、パイプコントローラは、パイプラインの段が有効であって遅れがないが次の段が遅れるか又はストールされる場合に、その段をストールする。これは、段Nについて論理的に表すと、次のようになる。
STALLN =vN ・!dN ・(dN+1 +STALLN+1
但し、vN は、段Nが有効である場合に真であり、
N は、段Nに対するDELAYが真である場合に真であり、そして
!は、後続項が否定されることを表す。
【0059】
6段のパイプラインについては、次のように表すことができる。
Figure 0003678444
【0060】
パイプコントロールユニット28は、パイプラインの段をストールするときには、他のパイプラインの対応段は必ずしもストールしない。他の段がストールされるかどうかは、以下に述べるように、命令のシーケンス及び他のファクタによって左右される。
【0061】
3.2 パイプの切り換え
上記の一般的なモデルは、命令が入るパイプに命令が流れるようなアーキテクチャに対して機能するが、図3に示すようにパイプ間で命令を切り換えることができるときには、更に複雑な制御構造が必要とされる。切り換えが生じるかどうかを判断するメカニズムを以下に詳細に説明する。
【0062】
好ましい実施例では、パイプコントロールユニット28は、命令がAC2段からEX段へ送られるまで命令を「プログラム順序」に(或いは「順序通り」に)保持する。「順序通り」とは、「ジュニア」命令がパイプライン段において「シニア」命令を越えることができない(マイクロプロセッサによって受け取られた命令のシーケンスにおけるジュニア命令の位置はシニア命令の後である)ことを意味するが、ジュニア命令がシニア命令と同じ段にあってもよい。従って、命令IT+1 (ジュニア命令)がAC1X にある間に、命令IT (シニア命令)がAC1y に存在することはあるが、IT がAC2y に進むまでIT+1 はAC2x に進むことはできない。しかし、IT は、IT+1 の進むのを待機せずに進むことができる。
【0063】
IF段及びID1段の逐次性により、命令は、これら2つの段内では順序が狂うことはない。しかしながら、ID2、AC1及びAC2段を通る命令の流れは一般的なストールメカニズムに対して変更を必須とする。この状態における命令流の制御を助けるために、パイプコントロールユニット28は、各パイプ段に対して制御信号XFIRSTを維持する。特定の段に対しXFIRSTが真であれば、Xパイプラインのこの段における命令は、Yパイプラインの対応段における命令に対してシニアである。2つのパイプラインをもつここに示す実施例では、XFIRSTは、特定段の2つの命令についてどちらのパイプラインがシニアであるかを指示し、3つ以上のパイプラインをもつ実施例では、XFIRSTは、各段の各命令について相対的にシニアであることを指示する。
【0064】
ID2ユニットの出力において、パイプコントロールユニットは、命令をAC1x 又はAC1y のいずれかへ進めることができるかどうかを判断しなければならない。シニア命令は、(それが有効であって遅れがないと仮定すれば)いずれかのパイプラインの後続段に遅れがなく又はストールされなければ、進めることができる。ジュニア命令は、(それが有効であって遅れがないと仮定すれば)他方のパイプラインの対応段におけるシニア命令に遅れもストールもない場合にのみ進めることができる。これは、論理的に、次のように表される。
st3X=v3X・(d3X+d4X+STALL4X
st3Y=v3Y・(d3Y+d4Y+STALL4Y
但し、st3 は、対応するパイプラインがID2段又はそれ以降においてストール又は遅延するかどうかを指定するものである。
STALL3X=v3X・!d3X・(d4X+STALL4X)+!XFIRST3 ・st3Y
STALL3Y=v3Y・!d3Y・(d4Y+STALL4Y)+!XFIRST3 ・st3X
【0065】
3.3 マルチボックス命令
各パイプラインのEX段は、マイクロROMからのマイクロ命令によって他のEX段とは独立して制御される。多数の命令が単一のマイクロ命令で実施され、ひいては、単一のクロックサイクル中にEX段に通されるが、ある命令は、それらの実行に多数のマイクロ命令を必要とし、ひいては、それを完了するのに2つ以上のクロックサイクルを必要とする。これらの命令を「マルチボックス」命令と称する。
【0066】
マイクロROMは、マルチボックス命令の実行中に同じパイプラインの別の命令によってアクセスできないので、マルチボックス命令に対する最後のマイクロROMアクセスの後まで、パイプのID2段からパイプのAC1段まで新たな命令を通すことができない。これは、AC1中にマイクロROMがアクセスされることによるものである。マルチボックス命令がその最後のマイクロ命令を読み取るときに、その後の命令がマイクロROMをアクセスしてAC1に入ることが許され、従って、バブルが生じることはない。
【0067】
パイプラインのID2段がID1段から命令を受け取るときには、命令がマルチボックス命令であるかどうかをデコードする。パイプコントロールユニット28は、マルチボックス命令がマイクロROMで終了されるまでID2段をストールする。EX段は、UDONE信号によりマルチボックス命令の終わりを知らせる。マルチボックス命令をサポートするのに必要な制御は、次の通りである。
st3X=!d3x・v3X・(d4X+STALL4X+MULTIBOX4X・!UDONE4X
st3Y=!d3Y・v3Y・(d4Y+STALL4Y+MULTIBOX4Y・!UDONE4Y
STALL3X=st3X+!XFIRST3 ・st3Y
STALL3Y=st3Y+!XFIRST3 ・st3X
【0068】
マルチボックス命令は、AC1、AC2及びEXのリソースを使用することができる。マルチボックス命令に関する付加的なパイプ制御は、図26ないし27について説明する。図26において、I0 は、XパイプラインのEX段にあり、そしてマルチボックス命令I1 は、AC2(I1a)とAC1(I1b)段にある。パイプコントロールユニットの観点から、マルチボックス命令I1 は単一命令として処理され、そしてマルチボックス命令により占有された段に遅延があると、マルチボックス命令に関連した全ての段をストールさせる。従って、たとえパイプラインにおいてI1aがI1bの前にあっても、I1bの遅延はI1aをストールさせる。これは、1つの段における遅延がその後続段にストールを生じさせる唯一の状態である。
【0069】
パイプコントロールユニット28は、各マイクロ命令に関連したヘッドビットを使用することにより命令間の境界を追跡する。ヘッドビットは、たとえ命令が1ボックス命令であっても、マイクロ命令がその命令の第1マイクロ命令であるかどうかを指示する。ヘッドビットが所与のマイクロ命令に対して真でない場合には、それが第1のマイクロ命令ではない。パイプライン内の各マイクロ命令に対してヘッドビットをチェックすることにより、パイプコントロールユニットは命令間の境界を決定して、それに応じて段をストールすることができる。
【0070】
3.4 排他的命令
好ましい実施例に使用される別の形式の命令は、「排他的」命令である。EX段において実行される間に例外を生じるおそれのある命令は、排他的と称する。例外については以下で詳細に述べる。多数のメモリアクセスを要求する命令は、このようなアクセス中に例外を生じることがあるので、排他的と表される。他の命令も、制御レジスタ又はメモリマネージメントレジスタを変更したり又は1つの実行パイプにしか使用できない乗算ハードウェアのようなリソースを使用するので、排他的と表される。排他的命令は、単一ボックス又はマルチボックスのいずれでもよい。排他的命令は、マシンの状態に対する排他的命令の影響によるか又は両EXユニットの使用がこの命令にとって有益であることから、単独で実行されねばならない(即ち、他のパイプの対応段には他の命令が使用されない)。EX段に例外を生じることのある排他的命令は、例えば、0で除算するエラーを生じることのあるDIV(除算)や、PUSHAのようにEX段の間にメモリアクセスを実行しなければならない命令である。486個の命令セットの中からの排他的命令の他の例は、次の通りである。ARPL、BOUND、CALL、CLC、CLD、CLI、CLTS、CMC、CMPS、DIV、ENTER、HLT、IDIV、IMUL、IN、INS、INT、INTO、INVD、INVLPG、IRET、LAHF、LAR、LEAVE、LGDT、LIDT、LGS(PM)、LSS(PM)、LDS(PM)、LES(PM)、LFS(PM)、LLDT、LMSW、LODS、LSL、LTR、MOV(SR)、MOVS、MUL、OUT、OUTS、POPA、POPF、POP MEM、PUSHA、PUSHF、PUSH MEM、RET、SAHF、SCAS、SGDT、SIDT、SLDT、SMSW、STC、STD、STI、STOS、STR、VERR、VERW、WAIT及びWBINVD。但し、「PM」は、保護モード命令を表し、そして「SR」は、特殊なレジスタ又は制御レジスタを用いた命令を表している。
【0071】
ID1段は、どの命令が排他的であるかをデコードする。パイプコントロールユニット28は、AC1x 及びAC1y の両方の段が使用できるまでID2段において排他的命令をストールする。
【0072】
図27は、排他的マルチボックス命令の遅延の影響を示している。排他的マルチボックス命令は、X及びYの両パイプラインに対し、EX、AC2及びAC1段を占有する。排他的マルチボックス命令により占有されたいずれかの段が遅延する場合には、反対のパイプラインの対応段も遅延し、マルチボックス命令に関連した他の段は、マルチボックス命令を一緒に保持するためにパイプコントロールユニットによってストールされる。従って、命令Ixbが遅延する場合は、Iybも遅延し、そしてIxa、Iya、Ixc及びIycはストールされる。排他的マルチボックス命令では、各パイプラインごとに1つづつ2つのヘッドビットを用いて、命令の開始が指示される。
【0073】
4.順序通りの命令通過/順序を外れた命令の完了
図1及び2を参照すれば、上記したように、命令は、AC2段からEX段へと通過するまでパイプコントロールユニット28によって順序通りに維持される。命令は、その命令に対して実行がいったん開始すると、EX段へ「通過」されると考えられる。というのは、命令に対するポインタを変更するといった次の段へ進むことに関連した幾つかの予備的な手順が、全ての例外が報告される前に行われるからである。
【0074】
命令がAC2段からEX段へ通過すると、命令が順序づれして実行されるのを防止するリソース又はデータ依存性がない限り、順序づれして実行を完了することができる(即ち、シニア命令の前にジュニア命令をライトバック段へと継続することができる)。例えば、リード・アフタ・ライト(RAW)依存性は、この依存性がクリアされるまで命令がそのEX段を完了するのに防止する。従って、ADD AX,BXのような命令は、手前のADD BX,CXの実行が完了するまでそのEX段を完了できない。というのは、オペランドBXが手前の命令に基づいているからである。
【0075】
しかしながら、シニア命令に依存性をもつことなくEX段へ通過するジュニア命令は、完了することができ、それ故、多くの命令は、反対のEX段に多数のクロック周期を必要とするシニア命令を通過することができる。好ましい実施例のこの観点は、命令スループットを大巾に増大する。
【0076】
好ましい実施例では、命令は、例外を生じることがなくなるまで、順序通りに維持される。例外はプログラムエラーによって生じ、その例外を生じた命令が完了する前に報告される。命令の完了の前に例外を報告することにより、プロセッサは、命令を再スタートできると共にその欠陥命令の影響を無効にすることのできる状態に保たれる。例外は、例えば、0で除算するエラー、無効のOPコード及びページ欠陥を含む。デバッグ例外も、データブレークポイント及び単一ステップ動作を除いて、例外として処理される。例外サービスルーチンの実行後に、命令ポインタは、その例外を生じた命令を指し、典型的に、命令は再スタートされる。
【0077】
例外を生じることのある命令は、再スタート可能でなければならない。従って、例外が生じた場合には、マシンの状態が、命令をスタートする前の状態に回復されねばならない。従って、例外を生じた命令及びその後の命令によってマシンの状態が変更されてはならない。典型的に、命令の再スタートは、レジスタファイルの状態をリセットし、そしてスタックポインタ、命令ポインタ及びフラグを復帰することを伴う。ほとんどの例外はAC2段で生じるので、例外はAC2段の出力においてアサートされる(EX段で例外を生じる排他的命令を除き)。命令は、ID1段で再スタートされる。
【0078】
例外を生じる命令が、対応するAC2段の命令(隣接命令)に対してジュニアである場合には、その隣接命令がEX段へと継続される。しかしながら、例外を生じる命令がシニア命令である場合には、両方の命令を再スタートしなければならない。換言すれば、マシンの状態は、例外を生じる命令によって生じた変化の前に存在した状態であってプログラムシーケンスにおいてその手前にある命令をパイプラインに通し続けられる状態へ回復しなければならない。
【0079】
好ましい実施例では、非排他的なマルチボックス命令が一方のパイプラインにおいて実行される場合に、そのマルチボックス命令の実行中に他方のパイプラインに多数の命令が流れることがある。マルチボックス命令は、AC1、AC2及びEX段を使用するので、そのマルチボックス命令に対するヘッドビットを有するマイクロ命令を処理する段のみが順序を保つ。従って、AC1及びAC2は、これらの段がヘッドビットをもつマイクロ命令を含まない場合は、ジュニア命令が進むのを防止しない。命令が流れ続けることができるかどうかを制御する2つのファクタは、(1)マルチボックス命令がジュニア命令とのデータ依存性を生じるかどうか、又は(2)マルチボックス命令がジュニア命令とのリソース依存性を生じるかどうかである。
【0080】
リソース依存性は、シニア命令により使用されているリソースをジュニア命令が必要とするときに生じる。例えば、好ましい実施例では、EXユニットに対する面積を減少するために、XパイプのEXユニットしか乗算器を有していない。マルチボックス命令がX側のEXユニットで作用する場合には、乗算器を必要とするその後の命令は、シニア命令が完了するまで実行できない。
【0081】
図6は、AC2段からEX段への命令の通過及びEX段の完了に関するパイプコントロールユニット28の一般的動作を示すフローチャートである。パイプコントローラは、命令がその現在段(又はそれを越えて)例外を生じ得るかどうか判断する(200)。もしそうでなければ、命令は、シニア命令の前に完了することができる(202)(これらシニア命令がもはや例外を生じることがない限りは)。命令がまだ例外を生じることがある場合には、パイプコントローラは、全てのシニア命令がマイクロプロセッサの状態に対してそれらの変更を行ってしまうまで、その命令がマイクロプロセッサの状態を変更できないようにする(204)。換言すれば、命令がもはや例外を生じなくなるまで、全ての状態変更はプログラム順序でなされる。
【0082】
上記した更に特定の場合には、流れ図のブロック204は、AC2段を通る命令のプログラム順序を維持することによって実施される。X86命令セットのほとんどの命令については、命令がAC2段により例外を生じるかどうか判断することができる。EX段において例外を生じることが許される排他的命令は、EX段においてのみ実行され、例外が生じた場合にはマシンの状態が復帰される。
【0083】
上記の説明では、命令は、もはや例外を生じることのない点を通して順序が保たれたが、より一般的なパイプ制御方法は、命令がプロセッサの状態を変更することがない限り、命令を順序づれして進められるようにする。
【0084】
5.パイプの切り換え
図1及び2を参照すれば、パイプコントロールユニット28は、命令がID2段の後にパイプライン間で切り換わるかどうかを制御する。従って、命令は、パイプコントロールユニット28の制御のもとでパイプラインを経てID2x からAC1x 又はAC1y のいずれかへそしてID2y からAC1x 又はAC1y のいずれかへ進む。
【0085】
好ましい実施例では、パイプコントロールユニット28は、どちらのパイプX又はYが命令を出すかをある基準に基づいて判断する。第1の基準は、一方のパイプラインが除去することのできるバブルを有するかどうかである。もしそうであれば、パイプラインは、ID2段における命令の最もシニアなものをそのパイプラインへ移動するよう試みる。従って、AC1x が有効で、AC1y が無効でそしてID2X における命令がID2段における2つの命令のシニアである場合には、パイプコントロールユニット28は、その命令をID1x からAC1y へ転送する。
【0086】
第2の基準は、パイプラインにおける新たなバブルの発生を防止することである。バブルの発生を防止するために、パイプコントロールユニット28は、従属命令が遅延される場合にその命令の従属対が他の命令に影響を及ぼさないように試みる。これを行うために、好ましい実施例では、パイプコントロールユニット28は、プログラム順序における隣接命令がパイプラインにおいて互いに他の上に来ないように保つ。
【0087】
図7はこの問題を示している。時間T1 において、命令I1 はEXx にあり、命令I2 はEXy にあり、命令I3 はAC2y にありそして命令I4 はAC2x にある。I2 は、I1 においてリード・アフタ・ライト依存性を有し、換言すれば、命令I2 がEXy 段において適切に処理されるためには、EXx 段における命令I1 の結果を待機しなければならない。例えば、I1 は、ADD AX,BX命令であり、そしてI2 は、ADD AX,CX命令である。I2 は、I1 が完了するまでそのオペランドの一方が準備できないので完了し得ない。時間T2 に、I1 が完了し、EXx にバブルを残す。I2 はEXy において実行される。I3 は、I2 が完了するまでEX段へ進むことができない。I4 は、I3 のジュニアであるからEX段へ進むことができず、上記のように、命令は、EX段に入るまではシニア命令を越えて進むことができない。
【0088】
隣接命令がパイプラインにおいて互いに他の上に来ないようにプログラム順序に維持する結果が図8に示されている。この例では、パイプコントロールユニット28は、時間T1 においてAC2の対を、I3 がAC2x にありそしてI4 がAC2y にあるように順序付けする。命令をこのように順序付けする理由は、YパイプラインにおいてI3 がI2 の上にならないよう防止することである。従って、時間T2 に、I1 はEX段を完了し、そしてライトバック段へ移動する。ここで、I3 がEXx へ移動することができ、従って、EXx にバブルが発生するのを防止する。同様に、I5 がAC2x へ移動できる。
【0089】
ある場合には、パイプコントロールユニット28は、隣接命令をパイプラインにおいて互いに他の上に置かねばならない。一般に、この状態は、Xのみの命令によって生じ、これは、Xパイプラインに入れられねばならないか、又はパイプコントロールユニット28がバブルを除去する必要があるために、所望の順序での攪拌を必須とするものである。図9はこのような状態を示している。時間T1 に、I1 及びI2 は、各々EXx 及びEXy にあり、I3 及びI4 は、各々AC2x 及びAC2y にあり、I5 及びI6 は、各々AC1y 及びAC1x にある。というのは、I6 はXのみの命令だからである。それ故、パイプコントロールユニット28は、I6 をAC1x に入れるよう強制されるが、たとえそのようにしても、YパイプラインにおいてI5 がI4 の上に来るように強制される。I7 とI8 は各々ID2x とID2y にある。I4 は、I3 においてリード・アフタ・ライト依存性を有し、I6 は、I5 においてリード・アフタ・ライト依存性を有する。時間T2 に、I1 及びI2 は、WB段へ移動され、I3 及びI4 は、EX段へ移動されている。I6 は、AC2x へ移動され、そしてI5 は、AC2y へ移動されている。それ故、パイプコントロールユニット28は、I7 及びI8 がパイプラインを切り換えて、I7 がXパイプラインにおいてI6 の上に来ないよう防止することができる。I9 及びI10は、ID2へ移動される。
【0090】
時間T3 において、I3 は、EXx で完了して、EXy へ移動し、そしてI4 は、その動作を完了するためにEXy に留まる。図7について上記したように、I5 もI6 も、いずれのパイプラインも下流へ進むことができず、従って、命令I5 及びそれ以上は、それらの各段に保たれる。時間T4 に、I4 が完了し、そしてI5 及びI6 は各々EXy 及びEXx へ移動する。I7 及びI8 は各々AC2y 及びAC2x へ移動し、I9 及びI10は各々AC1y 及びAC1x へ移動して、隣接命令I9 及びI8 の両方がXパイプラインへ行くのを防止する。I11及びI12は、ID2段へ移動する。
【0091】
時間T5 において、I5 は完了し、I7 はEXy へ移動する。I6 は、リード・アフタ・ライト依存性のために、EXx に留まる。I9 はAC2y へ移動し、I11はAC1y へ移動し、I3 はID2x へ移動する。明らかなように、EXx に留まっているI6 により形成される潜在的なバブルは、パイプコントロールユニット28により命令を適切にシーケンスすることによって回避される。
【0092】
図7ないし9について命令の特定の順序付けを説明したが、命令をシーケンスする他の方法を用いて、パイプラインを通る命令の効率的な流れを促進することができる。又、切り換え点は、ID2段である必要はない。上記したように、パイプコントロールユニット28は、この切り換え点を使用し、バブルを生じることのある命令間の依存性を減少するような命令シーケンスを与える。
【0093】
パイプの切り換えに関するパイプ制御ユニットの一般的な動作を示すフローチャートが図10に示されている。パイプコントローラは、Xのみの命令のように命令をあるパイプラインを下るように出さねばならないかどうかを決定する(210)。もしそうであれば、パイプコントロールユニット28は、使用できるパイプラインに命令を出す(212)。命令をいずれのパイプにも出せる場合は、パイプコントロールユニット28は、いっぱいになるパイプラインのいずれかにバブルが生じるかどうかを決定する(214)。もしそうであれば、パイプコントロールユニット28は、バブルのある段へ命令を移動する(216)。バブルがない(又は両方のパイプラインが使用できる)場合には、パイプコントロールユニット28は、依存性を回避するための最良のシーケンスの評価に基づいてX又はYパイプラインに命令を出す(218及び220)。上記したように、1つの実施例においては、パイプコントローラは、隣接する命令を同じパイプラインにおいて互いに他の上に出すことを回避することにより、依存性を回避する。
【0094】
6.依存性に関わりのない命令の発生
命令は、2つの命令間に存在することのある依存性に係わりなくID1からID2へ送られる。別の解決策は、一対(又はそれ以上)の命令が依存性をもつかどうかを決定し、もしそうであれば、他のパイプの対応段にバブルをもつ第1の命令を発生して、バブルがパイプラインを通る発生された命令と対を保つようにすることである。従って、所与の時間周期にわたって処理される命令の数が減少される。
【0095】
性能を改善するために、ここに開示するマイクロプロセッサは、依存性をもつ命令をパイプラインに同時に発生する。依存性は、命令がそれに依存するデータを使用する必要のある点でチェックされる。即ち、依存性がパイプラインにストールを生じる点は、依存性の性質に基づいており、依存性のデータがアドレスの計算に必要とされる場合には、AC1にストールが生じるが、そのデータが実行に必要とされる場合には、ストールがEXに生じる。ストールのときまで、パイプ又は他のメカニズムにおける命令の移動は、依存性を解決し、従って、命令のより効率的な流れを与える。
【0096】
7.マルチスレッドのEX動作
図1及び2を参照すれば、マイクロシーケンサ回路23は、EX段へのマイクロ命令の独立した流れを形成する。従って、EXx 段の制御は、EXy 段の制御とは独立している。
【0097】
単一のマイクロ命令ワードを用いて両EX段を制御するのではなく、2つの独立したマイクロ命令の流れによって両EX段の実行を制御することにより、命令の実行において相当の融通性が与えられ、性能が高められる。更に、2つのEX段を単一のマイクロ命令で制御するのに必要な付加的なハードウェアが回避される。
【0098】
特に、ある排他的命令は、EXx 及びEXy の両方の段を使用することにより有利になる。両方のEX段を使用すると、排他的命令は、アドレス計算のために両AC段へアクセスし、この場合、ACは、又、マイクロ命令制御される。
【0099】
両EX(及びAC)段は、単一の命令を実行するのに使用されるが、各EX段は、マイクロシーケンサからマイクロ命令の2つの独立した流れを受け取り続ける。2つのEXユニットの動作は、マイクロ命令の適切なコード化によって維持される。
【0100】
8.レジスタ変換ユニット
8.1 レジスタ変換の概要
図1及び2を参照すると、命令レベルデータハザードを検出して分析するためにレジスタ変換ユニット25aが使用される。EXパイプ段における実行の完了前に、各命令は、そのソースオペランドが有効になっていなければならない。レジスタ変換ユニットは、各レジスタを追跡して、アクティブな命令が未解決の書き込み(書き込み保留)を有するかどうかを決定するのに使用される。
【0101】
書き込み保留中のソースレジスタを命令が有する場合には、その命令に関連した常駐制御ワード(セクション9及び図19ないし22を参照)がAC1段に表示されて、ソースレジスタが書き込み保留を有することを指示する。パイプラインを経て命令が進むにつれて、各段は、従属レジスタへの書き込みを検出するためにライトバックバスを「スヌープ(snoop) 」する。従属レジスタへの書き込みが検出された場合は、ソースレジスタに関連した残留制御ワードの書き込み保留フィールドがクリアされる。
【0102】
図11は、レジスタ変換ユニット25aの一般的なブロック図である。物理レジスタファイル(図1の24)は、X86アーキテクチャの8個のローカルレジスタに関連した情報を記憶するための32個の物理レジスタを備えている。物理レジスタへのアクセスは、レジスタ変換ユニット25aにより制御される。物理及びローカルレジスタに関連した状態情報は、変換制御レジスタ236に記憶される。変換制御回路238は、状態情報に基づいて物理レジスタへのアクセスを管理する。
【0103】
真のデータ依存性は、命令の完了を妨げるRAWハザードから生じる。又、WAR(ライト・アフタ・リード)ハザードに対応する依存性、「反依存性」と称する、及びWAW(ライト・アフタ・ライト)ハザードに対応する依存性、「出力依存性」と称する、も存在する。真のデータ依存性ではないこれらの反依存性及び出力依存性は、レジスタ変換ユニット25aによって制御されるレジスタ再ネーミングを使用することによって移動し得る。レジスタ再ネーミングにおいては、アーキテクチャが(論理的又は構造的に)定める以上の物理レジスタが設けられる。論理レジスタが書き込まれるたびに新たな物理レジスタを指定することにより(結果の行き先)、レジスタは再ネーミングされ、両WAR及びWAWハザードを排除する。
【0104】
X86アーキテクチャは、プログラマから見える8個の汎用レジスタを定める(EAX、EBX、ECX、EDX、EDI、ESI、EBP、ESP)。ここに示す実施例では、これら8個の汎用レジスタ(論理レジスタ)をマップするのに使用される32個の物理レジスタがある。マイクロプロセッサは、条件分岐が実行を完了する前に命令を予想し実行するので、レジスタ変換ユニットは、誤って予想した分岐の結果を処理することができねばならない。予想が間違いであった場合には、マイクロプロセッサは、状態を条件分岐点まで復帰しなければならない。以下に述べるように、チェックポイント処理を用いて、推論的経路が得られる前に状態情報をセーブする。間違って予想された条件分岐からの復帰はチェックポイント処理した物理レジスタへ戻ることを伴う。
【0105】
各AC1パイプ段に対し、レジスタ変換及び再ネーミングハードウェアによって次の動作が完了される。
1.ACパイプ段における現在命令の行き先である2つまでの新たなレジスタを割り当てる(再ネーミングする)。この割り当ては、両方の命令が同じレジスタを行き先として指定する場合に依存性が形成されるためにプログラム順序で行われる。
2.ACパイプ段における命令に対し、RAW依存性をチェックする。
3.アドレス計算のためにAC中に使用されるレジスタに対し、ライトバックバス上の物理レジスタIDをチェックして、レジスタ変換ユニットにおける書き込み保留中ビットをバイパス及びクリアできるようにする。
4.4つまでのレジスタに対し論理−物理変換を行う。
【0106】
8.2 変換制御レジスタ
図12は変換制御レジスタ236を示している。論理IDレジスタ240は、論理レジスタを物理レジスタに対してマップする。サイズレジスタ242は、物理レジスタが指定される論理レジスタのサイズに対応するコードを記憶する。この特徴は、以下で説明する。現在レジスタ244は、所与の論理レジスタに対して最も最近指定されたレジスタを指示する。従って、新たな物理レジスタが割り当てられるたびに、その対応する論理レジスタに対してそれまで現在レジスタであった物理レジスタに対する現在ビットがオフにされ、そして新たに割り当てられたレジスタに対する現在ビットがオンにされる。従って、いつでも、現在レジスタ244は、8ビットがオンでありそして24ビットがオフである。各物理レジスタに対し、保留レジスタ246は、その物理レジスタへの書き込みが保留中であるかどうかを指示するビットを有している。
【0107】
4つのチェックポイントレジスタ248、Chkpnt0−Chkpnt3、は、チェックポイントが生じるたびに現在レジスタ244のコピーを記憶するのに用いられる。好ましい実施例において、チェックポイントは、条件分岐又は浮動小数点演算がAC1に通されるときに生じる。チェックポイントレジスタ248は、回転ベースで書き込まれる。例外復帰レジスタ250は、AC1、AC2及びEXにおける各命令に対する現在ビットを記憶する。というのは、これらが命令に対する割り当てがAC1段で行われる前に存在するからである。例外復帰レジスタの内容は、命令が段から段へ移動するときに命令に従う。
【0108】
8.3 レジスタ割り当て
論理レジスタへ結果を書き込む各命令に対し、新たな物理レジスタがレジスタ変換ユニット25aによって割り当てられる。レジスタ割り当てプロセスは、最初に、「フリー」の物理レジスタ、即ち使用中でないレジスタを識別する。フリーレジスタの検出については、図13を参照して説明する。フリーレジスタが位置決めされると、論理レジスタ番号が物理レジスタのデータ構造体に入れられ、現在と表示される。論理レジスタを表していた手前の物理レジスタは、その現在ビットがクリアされる。
【0109】
フリーレジスタを識別する回路が図12及び13に示されている。レジスタビジーレジスタ252は、各物理レジスタに対して1ビット位置を有している。レジスタビジーレジスタの各ビットは、保留、現在、チェックポイント及び例外復帰レジスタにおける対応位置に応答してセットされる。図13に示すように、レジスタビジーレジスタ252のビットnは、保留、現在、チェックポイント及び例外復帰レジスタの第nビットに対する論理オア演算の結果である。レジスタは、レジスタビジーレジスタの対応ビットが「0」にセットされた場合にフリーであり、そしてその対応ビットが「1」にセットされた場合に使用中である。
【0110】
割り当ての際に、現在レジスタの対応ビットは、物理レジスタを現在レジスタとして表示するために「1」にセットされる。物理レジスタが指定される論理レジスタを指示するために論理IDレジスタ240の対応する3ビットにコードが入れられ、そしてサイズレジスタの対応ビットが、割り当てられる論理レジスタのサイズにセットされる(以下のテーブル1を参照)。物理レジスタに対応する保留ビットもセットされる。割り当てを生じる命令は、指定された物理レジスタへの書き込みであり、そして論理レジスタからのその後の命令による読み取りはこの新たな物理レジスタからの読み取りを生じる。この再ネーミングは、AC1パイプ段の間に生じ、プログラム順序で処理される。命令をプログラム順序で処理することは、AC1x 及びAC1y における両命令が同じ論理レジスタをソース及び行き先として指定する場合に生じる。一例として、これは、両命令がADD(加算)であって、AXレジスタがソース及び行き先の両方として定められる場合に生じる。レジスタの再ネーミングにより、2つの新たな物理レジスタが論理AXレジスタとして割り当てられ、最後の1つは現在レジスタとして表示される。以下の例は、各命令がいかに再ネーミングされるかを示している。
【0111】
第1の例:(ADD AX,BX)。命令ADDがAC1に受け取られたときにAX及びBXレジスタに対する物理レジスタIDが現在各々「1」及び「2」であると仮定する。AXレジスタは行き先でもあるから、新たな物理レジスタがAXに対して割り当てられる。この物理レジスタは、IDが「3」である(物理レジスタ「3」がフリーであると仮定すれば)。この加算命令は、次いで、物理レジスタ「1」と「2」を加え、その結果をレジスタ「3」に書き込む。
AX(物理レジスタ1)+BX(物理レジスタ2)→AX(物理レジスタ3)
【0112】
第2の例:(ADD AX,BX)。AXレジスタは行き先であるから、新たな物理レジスタがAXに割り当てられる。これは、IDが「4」である。手前の命令でAXレジスタは物理「3」と再ネーミングされているので、これがADDのためのAXソースとして使用される。というのは、これは、割り当て時に現在と表示されているからである。それ故、この第2のADD命令は、物理レジスタ「3」と「2」を加え、その結果をレジスタ「4」へ書き込む。
AX(物理レジスタ3)+BX(物理レジスタ2)→AX(物理レジスタ4)
【0113】
X86アーキテクチャは、幾つかのレジスタをワード(例えば「AX」)、下位バイト(例えば「AL」)、上位バイト(例えば「AH」)又はダブルワード(例えば「EAX」)としてアドレスできるようにするので、レジスタが命令によっていかに指定されるかに基づいて各割り当てごとにサイズが指定される。レジスタの割り当て可能と考えられる部分が、EAXレジスタについて図14に示されている。各物理レジスタは、コードを記憶するサイズレジスタにサイズレジスタに対応する2ビットフィールドを有している。例示的なコードをテーブル1に示す。
Figure 0003678444
【0114】
可変サイズのレジスタを用いてレジスタ変換する方法が図15に示されている。レジスタ変換ユニット(図1の25a)の変換制御回路は、割り当てられるべき論理レジスタのサイズを、その論理レジスタに対する現在レジスタのサイズと比較し、そしてレジスタを割り当てできるか又は命令をストールしなければならないかどうかを決定する。
【0115】
割り当て要求が受け取られ(258)、割り当てられるべきレジスタのサイズが、それに対応する現在レジスタのサイズと比較される(260及び262)。2つの命令が同じ論理行き先レジスタを異なるサイズ(即ち、AH及びAL)として指定する場合であって、プログラム順序における第2の命令の論理的行き先が、第1の命令に割り当てられた論理レジスタの部分を完全に含まない場合は、サイズに基づくRAW依存性が形成される。従って、この依存性が解決されるまでレジスタを割り当てることができない(264)。
【0116】
命令の保留中書き込みを伴う論理レジスタのサイズが、それより前の命令によって指定された論理レジスタの部分を包囲する場合には(以下のテーブル2に定められたように、例えば、EAXレジスタを用いて)、新たなレジスタを割り当てることができる(266)。
Figure 0003678444
【0117】
8.4 2つの行き先をもつ命令
X86命令の大部分は、1つのレジスタ行き先のみを指定する。2つのレジスタ行き先を指定する命令は僅かである(例えば、XCHG AX,BX)。レジスタ変換ユニットのハードウェアを複雑にしないように、各クロックごとに命令に対して1つの行き先しか再ネーミングできない。それ故、2つの行き先を指定する命令は、特殊なケースに使用される。これらの命令は、AC1パイプ段にある間に、1クロック中、他の命令をレジスタ変換ハードウェアを使用することからストールし、これにより、第2の行き先を再ネーミングできるようにする。
【0118】
8.5 推論的分岐実行のためのチェックポイントレジスタ
図12を参照すれば、マイクロプロセッサは、分岐の方向(条件流れ変更)を予想し、そして分岐が実際に解明される前に、その予想された方向において命令の実行を開始する。分岐が誤った予想であった場合には、マイクロプロセッサはプロセッサの状態を分岐点まで復帰させねばならない。
【0119】
レジスタ変換ユニット(図1の25a)は、予想された分岐方向における命令を推論的に実行する前に、レジスタをチェックポイント処理し、即ち現在レジスタ244をチェックポイントレジスタ248の1つにコピーすることにより、マイクロプロセッサが分岐の境界におけるプロセッサ状態をセーブできるようにする。チェックポイントレジスタ248は、回転する順序で書き込まれる。
【0120】
好ましい実施例では、浮動小数点演算に対してもレジスタがチェックポイント処理される。
【0121】
チェックポイント処理は、マイクロプロセッサがチェックポイントレジスタによって定められた状態へ復帰できるようにするので、各命令ごとに使用することができる。しかしながら、各チェックポイントに対してリソースを設けなければならず、従って、チェックポイント処理の機能と、チェックポイント処理に割り当てるべきハードウェアリソースとの間で妥協をとらねばならない。ここに示す実施例では、4つのチェックポイントレジスタが使用され、いつでも4つまでのチェックポイント処理を行うことができる。
【0122】
間違って予想された分岐(又は浮動小数点エラー)からの復帰は、チェックポイント処理された物理レジスタへ戻ることを伴う。分岐がパイプラインのAC段に入るときに、現在レジスタ244がチェックポイントレジスタ248の1つにコピーされる。予想された方向に命令を実行する間に、新たなレジスタが割り当てられる。新たなレジスタが割り当てられると、現在と表示された物理レジスタが、通常通りに、その現在ビットをクリアする。予想された方向が誤りであった場合は、その分岐に関連したチェックポイントレジスタ248が現在レジスタへコピーされ、該現在レジスタは、物理レジスタの状態を、その分岐の直前に存在した状態へ復帰させる。従って、マイクロプロセッサは、誤って予想された分岐又は浮動小数点エラーから単一のクロックサイクルで復帰することができる。
【0123】
8.6 例外からの回復
図12を参照すれば、例外からの回復は、誤って予想された分岐からの回復に類似している。例外が所与の段(AC1x 、AC1y 、AC2x 、AC2y 、EXx 、EXy )で生じた場合には、その段に関連した例外レジスタ250が現在レジスタにコピーされる。所与の段の例外レジスタは、その段における現在命令に対する割り当て(AC1段で生じた)の前に存在したときの現在レジスタ244のコピーを含んでいるので、関連する例外レジスタ250を現在レジスタ244にコピーすることは、物理レジスタと論理レジスタとの関連性を、その例外を生じた命令がAC1に入る前に存在した関連性へリセットする。従って、本発明では、たとえ状態を変更する命令が後で例外を生じたとしても、マシンの状態を変更することができる。
【0124】
現在レジスタ244の回復にどの例外レジスタを使用すべきかを決定するために、レジスタ変換ユニット25aはパイプコントロールユニット(図1の28)からの情報を使用する。例外が生じたときには、パイプコントロールユニットはパイプラインの段をフラッシュする。どの段がフラッシュされたかを指示すると共に、フラッシュ時にどの段が有効であったかを指示するパイプコントロールユニットからの信号を、各段に対するXFIRSTビットと一緒に使用することにより、レジスタ変換ユニットは、フラッシュされた最もシニアな段を決定する。その段に対応する例外レジスタが現在レジスタ244へコピーされる。
【0125】
8.7 レジスタ変換ユニットのマイクロコントロール
図1を参照すれば、レジスタ変換ユニット25aは、通常は、パイプラインハードウェアによって発生された信号により制御される。しかしながら、ある状態においては、マイクロコントローラ26のマイクロシーケンサにより命令の一部として発生されたマイクロコード信号を介してレジスタ変換ユニット25aを制御するのが有用である。例えば、排他的命令は、どの物理レジスタが論理レジスタにマップされるかを決定するためにレジスタ変換ユニットのハードウェアにアクセスすることが必要である。PUSHA(プッシュ・オール)のような命令は、それらの実行中に8個全部の論理レジスタの論理−物理変換を必要とする。
【0126】
排他的命令によりレジスタ変換ユニットへアクセスする必要性を効率的に受け入れるために、制御信号は、図16に示すように、マイクロコードによって制御されるマルチプレクサを介してレジスタ変換ユニット25aへマルチプレクスされる。ハードウェア及びマイクロコードによって(マイクロシーケンサを経て)発生された制御信号は、マルチプレクサ260へ入力される。このマルチプレクサ260は、これを制御するマイクロコード選択信号の値に基づいて制御信号を通過させる。マイクロコード選択信号は、マイクロコードにより発生される。従って、命令に関連したマイクロコードがレジスタ変換ユニット25aを必要とする場合は、マイクロ命令ビットの1つがマルチプレクサ260をイネーブルし、パイプラインハードウェアからの信号ではなくて、マイクロコード制御信号を通過させる。マイクロ命令の他のビットは、所望の機能をイネーブルするためのレジスタ変換ユニット25aへの制御信号として働く。実行にレジスタ変換ユニットを必要としない命令は、ハードウェアにより発生された制御信号のみを通すようにマルチプレクサをイネーブルする。
【0127】
8.8 レジスタID変換及びハザード検出
論理レジスタの要求に応答して、レジスタ変換ユニット(図1の25a)は、その要求された論理レジスタへとマップされた現在物理レジスタの識別を供給する。又、レジスタ変換ユニットは、各倫理レジスタに対して1つづつ8個のビットを出力し、これは、その関連する論理レジスタに対する現在物理レジスタが書き込み保留中であるかどうかを指示する。これらのビットは、RAWハザードを検出するのに使用される。
【0128】
好ましい実施例において、レジスタ変換ユニットは、各々1つの物理レジスタを表す複数のセルで形成される。図17は、レジスタID変換及びハザード検出に関連した1つのセル270を概略的に示している。trans idバスに出された8個の論理レジスタの1つを表す3ビットコードに応答して、その指定の論理レジスタに対する現在物理レジスタを表す5ビットコードがphy idバスに出される。各セル270は、trans idバスからコードを受け取る。trans idバスの3ビットコードは、そのセルに対応する論理IDレジスタのビットと比較される。好ましい実施例においては、制御レジスタ240ないし252のビットがセル間で分割され、各セルがそれに関連した物理レジスタに対応する各レジスタ240ないし252のビットを含むようにする。
【0129】
論理IDビットは、比較器272により3ビットコードと比較される。3ビットコードが論理IDビットに等しい場合に、一致信号がイネーブルされる。この一致信号と、セルに対する現在ビットがアンドゲート274に入力される。従って、セルにより表された物理レジスタが指定の論理レジスタに関連している場合及び物理レジスタが指定の論理レジスタに対する現在レジスタとして表示された場合には、アンドゲート274の出力が「1」となる。アンドゲート274の出力は、5ビットの3状態バッファ276をイネーブルする。アンドゲートの出力が「1」の場合には、バッファは、セルに関連した物理IDをphy idバスへ通す。所与の論理レジスタIDに対し、1つの物理レジスタのみが現在レジスタとなり、それ故、1つのセルだけがその3状態バッファをイネーブルする。
【0130】
論理IDビットは、3−8デコーダ278にも入力される。従って、このデコーダ278の8個の出力の1つは、そのセルに対してマップされた論理レジスタに応答してイネーブルされる。デコーダ278の各出力は、各アンドゲート280(個々にアンドゲート280a−280gと示されている)の入力に接続される。各アンドゲート280は、そのセルに関連した物理レジスタに対し現在ビット及び保留ビットも受け取る。各アンドゲート280の出力は、各論理レジスタに関連した各ハザードバスに接続される。例えば、アンドゲート280aは、EAX論理レジスタに関連したハザードEAXバスに接続される。アンドゲート280gは、ESP論理レジスタに関連したハザードESPバスに接続される。
【0131】
所与のセルに対し、そのセルがそのセルにより表された物理レジスタにマップされた論理レジスタを表す場合及び物理レジスタが書き込み保留の現在レジスタと表示された場合に、せいぜい1つのアンドゲート280がイネーブルされる。図18に示すように、ハザードバスは、各セルの出力においてワイヤードオアを実行する。各ハザードバスに対し、関連アンドゲート280の1つのみがイネーブルされる。というのは、論理レジスタに関連した1つの現在ビットしかイネーブルされないからである。現在物理レジスタに関連した保留ビットもイネーブルされた場合には、それに対応するアンドゲート280がイネーブルされ、ハザードバスは、その論理レジスタに対して書き込み保留中であることを指示する。この情報は、RAWハザードを検出するのに使用される。
【0132】
9.送り
上記したように、RAW依存性は、マイクロプロセッサを依存命令においてストールさせる。好ましい実施例においては、「送り(フォワーディング)」を用いて、ある状況でRAW依存性を排除し、命令のスループットを高める。この送りは、両方が同時にEX段にある2つの命令間のRAW依存性を排除するように命令を変更する。
【0133】
好ましい実施例では2つの形式の送りが使用される。「オペランド送り」は、ある条件のもとで、シニアMOV(又は同様の)命令のソースを、その命令に対するソースデータとしてジュニア命令に送る。「結果送り」は、ある条件のもとで、シニア命令の結果をその後のMOV(又は同様の)命令の行き先へ送る。
【0134】
次のコードは、オペランド送りを示している。
1)MOV AX,BX
2)ADD AX,CX
【0135】
図19及び20を参照すれば、オペランド送りを用いると、ジュニアADD命令は、BX+CX→AXへと効果的に変更される。各命令は、残留制御ワードに記憶された残留制御情報に組み合わされ、この残留制御ワードは、他の制御情報(図示せず)の中でも、動作に対するソース(各ソースに対する書き込み保留があるかどうかを指示するフィールドを伴う)及び行き先を含むものである。従って、物理レジスタ「0」が論理レジスタBXに割り当てられそして物理レジスタ「1」が論理行き先レジスタAXに割り当てられると仮定すれば、SRC0(ソース0)フィールドには「0」が記憶され、そしてMOV命令に関連した残留制御ワードのDES0(行き先0)フィールドには「1」が記憶される。同様に、物理レジスタ「2」が論理レジスタCXに割り当てられると仮定すれば、送りは、ADD命令に関連した残留制御ワードのSRC0フィールドに「1」を記憶できるようにし(MOV命令の行き先レジスタは、ADD命令のソースの1つであるから)、SRC2フィールドには「2」が記憶され、そしてDES0フィールドには「3」が記憶される(レジスタ再ネーミングにより、論理行き先AXレジスタに対してフリーレジスタが見つかるので)。
【0136】
明らかなように、MOV命令とADD命令との間にはRAW依存性が存在する。というのは、MOV命令は、ADD命令の実行の前に物理レジスタ「1」に書き込まねばならないからである。しかしながら、オペランド送りを用いると、この依存性を排除することができる。図20に示すように、オペランド送りは、MOVコマンドに影響を及ぼさない。しかしながら、ADD命令の残留制御ワードは、SRC0フィールドがMOVに対する論リソースレジスタBXに関連した物理レジスタを指すように変更される。
【0137】
同様に、結果送りは、ジュニアMOV命令の残留制御ワードをシニア命令の結果で変更する。結果送りを説明するために、次のシーケンスを使用する。
1)ADD AX,BX
2)MOV CX,AX
【0138】
図21及び22を参照すれば、結果送りは、ADD命令の結果として発生されたデータがCXレジスタにロードされるようにMOVコマンドを変更する。物理レジスタ「0」は論理ソースレジスタBXに割り当てられ、物理レジスタ「1」は論理ソースレジスタAXに割り当てられ、物理レジスタ「2」は論理行き先レジスタAXに割り当てられ、そして物理レジスタ「3」は論理行き先レジスタCXに割り当てられる。従って、2つの命令間にはRAW依存性が存在する。というのは、ADD命令の行き先(物理レジスタ2)は、MOV命令のソースだからである。
【0139】
結果送りの後に(図22)、ADD命令は不変のままであるが、MOV命令に関連した残留制御ワードは、行き先レジスタCX(物理レジスタ3)が、AXが書き込まれるのと同時に、ADDを実行するEXユニットに関連したライトバックバス(図22にX側のライトバックバスとして示された)からそのデータを受け取るように変更される。従って、RAW依存性は排除され、ADD及びMOVの両命令が同時に実行される。
【0140】
送りは、ある条件のもとでしか使用されない。シーケンスにおける命令の1つは、MOV命令又は同様の「非作用」命令でなければならない。この非作用命令とは、オペランドデータをある位置から別の位置へ転送するが、そのデータに対して実質的に動作を行わないような命令である。作用命令とは、オペランドデータに応答して新たなデータを発生するか又はオペランドデータを変更するものである。X86命令セットにおいては、非作用命令は、MOV、LEA、PUSH<reg>及びPOP<reg>を含む。又、OR<reg1>,<reg1>及びAND<reg1>,<reg1>(ソース及び行き先の両レジスタが同じである場合)は、フラグをセットすることにしか使用されないので、「非作用」命令と考えることができる。
【0141】
更に、好ましい実施例では、送りは、シーケンスにおける両命令が同じクロックサイクルにそれらの各EXユニットにある場合にのみ使用される。送りは、AC2段の命令に先行する3つまでの命令を(プログラム順序で)サーチし、送りのケースが生じ得るかどうかを判断する。たとえ送り命令が2命令先行していたとしても、AC2段の命令がEX段へ移動するに充分な長い時間、送り命令がEX段において遅延する場合には、送りが生じ得る。
【0142】
図23に示すように、命令「1」及び「2」が各々X及びY側のEXユニットにあり、そして命令「3」及び「4」がX及びY側のAC2ユニットにある状況においては、命令「4」が命令「3」及び「1」を見て、オペランド又は結果送り状態が考えられるかどうかを判断する。命令「4」は、まだAC2段にあるから、命令「4」がY側のEX段へ発生されるまで命令「1」がEX段において遅延しない限り、命令「1」と共に送ることはできない。同様に、命令「3」で送り状態が考えられる場合には、「3」及び「4」の両方が各EX段へ発生された場合だけ送りが生じ、これら命令が少なくとも1つのクロックサイクルに対してEX段に同時に存在するようにされる。
【0143】
命令「4」は、送り状態に対して命令「2」を見ない。というのは、図示されたアーキテクチャが与えられた場合に、両命令が同時にEXユニットに存在することがないからである。命令「4」と「2」との間のRAW依存性の待ち時間を減少するためにバイパスを用いることができる。AC2/EX境界でパイプを切り換えることのできるアーキテクチャのような別のパイプライン構成では、命令「4」と「2」との間で送りを行うことができる。
【0144】
図24は、図23に関連して述べた初期状態が与えられた場合に命令「3」に関連した送りについて監視される状態を示している。この状態において、送り状態に対して命令「2」のみが監視される。命令「1」は、命令「3」では送ることができない。というのは、これらが同時にEX段に存在することはないからである。命令「3」は命令「4」においてRAW依存性をもつことはない。というのは、命令「4」は命令「3」のジュニアだからである(が、図23に示すように、命令「4」は、命令「3」においてRAW依存性をもつことはある)。
【0145】
送り制御回路のブロック図が図25に示されている。送り制御段の回路には、AC2段が関連される。送り制御回路300は、AC2パイプ段における命令のソースオペランドと、EX段における命令のソース及び行き先オペランドを監視し、そして残留制御情報を上記したように変更するために、オペランド監視・制御回路302を備えている。更に、送り状態の可能性が検出されると、送り制御回路300の命令移動監視回路304が命令の移動を監視して、各EXユニットにおける両命令の存在を検出し、送りを実施する。制御回路306は、オペランド監視・制御回路302と、命令移動監視回路304とを整合する。
【0146】
好ましい実施例では、送り回路は、物理レジスタファイル(図1の24)に見られるレジスタファイルコントロールの一部である。レジスタファイルコントロールも、残留制御ワードを維持する。
【0147】
2つの命令パイプラインを用いるプロセッサについて送りを説明したが、いかなる数のパイプラインにも同様に使用することができる。この場合は、送り制御回路は、EX及びAC2段において各パイプラインのEXユニットの命令に関連した残留制御ワードを監視する。
【0148】
送り及びレジスタ変換は互いに独立している。所与のマイクロプロセッサにおいて、そのいずれか又は両方の技術を用いて命令スループットを高めることができる。
【0149】
10.結論
特定の段をもつ2つのパイプラインの特定の実施例について本発明を説明したが、特許請求の範囲に規定された本発明は、3つ以上のパイプライン及び異なる段構成に関連して使用できることに注意されたい。
【0150】
ここに開示するパイプコントロールユニットは、パイプラインを通る命令の効率的な流れを与え、これにより、命令を処理する速度を高める。従って、高い周波数に依存せずに高い命令スループットを得ることができる。更に、レジスタ変換ユニット及び送り構成は、多数の依存性を排除し、命令をストールする必要性を低減する。
【0151】
幾つかの特定の実施例について本発明を詳細に説明したが、当業者であれば、これら実施例の種々の変更や、別の実施例が明らかとなろう。例えば、パイプライン制御のための種々の方法及び回路を互いに独立して使用することに関連して説明したが、これら種々の方法及び回路の1つ又はそれ以上が一般的に有用な結果をもたらす。更に、本発明は、特許請求の範囲に包含されるいかなる変更又は別の実施例も網羅するものとする。
【図面の簡単な説明】
【図1】スーパースカラー、スーパーパイプライン式マイクロプロセッサのブロック図である。
【図2】X及びY実行パイプを含むマイクロプロセッサの7つのパイプライン段を示す図である。
【図3】例示的コンピュータシステムのブロック図である。
【図4】パイプラインユニットを通る命令の流れを示すタイミング図である。
【図5】パイプラインユニットを通る命令の流れを制御するための制御機構を示すブロック図である。
【図6】順序から外れた命令の完了を示す流れ図である。
【図7】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図8】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図9】パイプ切り換えを用いたパイプラインを通る命令の流れを示す図である。
【図10】パイプ切り換え方法を説明する流れ図である。
【図11】レジスタ変換ユニットの機能ブロック図である。
【図12】レジスタ変換ユニットに使用される制御レジスタを示す図である。
【図13】レジスタビジーレジスタのビットを発生する回路を示す図である。
【図14】X86アーキテクチャのもとにある可変サイズ拡張レジスタを示す図である。
【図15】可変サイズの論理レジスタを割り当てるフローチャートである。
【図16】レジスタ変換ユニットを選択可能に制御する回路を示す図である。
【図17】変換及びハザード検出を行うレジスタ変換ユニットの部分を示す図である。
【図18】変換及びハザード検出を行うレジスタ変換ユニットの部分を示す図である。
【図19】オペランド送りを説明する図である。
【図20】オペランド送りを説明する図である。
【図21】結果送りを説明する図である。
【図22】結果送りを説明する図である。
【図23】送り状態の検出を示す図である。
【図24】送り状態の検出を示す図である。
【図25】送り回路のブロック図である。
【図26】マルチボックス命令のパイプ制御を示す図である。
【図27】マルチボックス命令のパイプ制御を示す図である。
【符号の説明】
10 マイクロプロセッサ
20 CPUコア
21 命令デコーダ
22 アドレス計算ユニット
23 実行ユニット
24 レジスタファイル
25 ACコントロールユニット
26 マイクロコントロールユニット
29 書き込みバッファ
30 プリフェッチバッファ
35 プリフェッチャ
40 分岐処理ユニット(BPU)
50 アドレス変換ユニット(ATU)
60 単一化キャッシュ
62 タグRAM
65 命令ラインキャッシュ
70 浮動小数点ユニット

Claims (10)

  1. 各々が複数のパイプステージを有する複数の実行パイプラインのあるパイプライン化したプロセッサであって、
    前記パイプステージの各々は、状態情報をパイプステージと関連づけ前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは、
    それぞれ対応するパイプステージを有する少なくとも第1と第2の実行パイプライン、
    前記第2の実行パイプラインへ発せられる命令の第2のシーケンスにおける命令と実質的に同時に前記第1の実行パイプラインへ発せられる命令の第1のシーケンスにおける命令の少なくとも幾つかを伴って、前記命令の第1と第2のシーケンスをそれぞれ前記第1と第2の実行パイプラインへ発する命令発生回路、および
    前記第1と第2の実行パイプラインのそれぞれ対応するパイプステージと関連した状態情報を含む、少なくとも第1と第2の実行パイプラインへ発せられる命令の実行をモニタするパイプ制御回路、
    を有し、
    この状態情報に応答して、前記パイプ制御回路は、前記第1の実行パイプラインの命令が現在のパイプステージから次のパイプステージへ、前記第2の実行パイプラインの対応するパイプステージにおける命令の移動とは無関係に、移動するように、前記第1と第2の実行パイプラインの、それぞれ対応するパイプステージ間で前記命令の第1と第2のシーケンスの流れを制御することを特徴とするプロセッサ。
  2. 前記命令の第1と第2のシーケンスは、それぞれ前記第1と第2の実行パイプラインへ実質的に同時に発せられる第1と第2の命令をそれぞれ有し、前記第1の命令はシニアであり、前記第2の命令は前記第1の命令に関するデータ依存性を有し、かつ前記第2の命令に対する現在のパイプステージである前記第2の実行パイプラインの対応するパイプステージに対する関連した状態情報は、前記第1の命令に関するデータ依存性が決まったかの指示を含み、その後、前記パイプ制御回路は、現在のパイプステージから前記データ依存性が前記現在のパイプステージにおける前記第2の命令を処理するために解決されなければならないか否かに依存する次のパイプステージへの前記第2の命令の移動を制御することを特徴とする請求項1に記載のプロセッサ。
  3. それぞれ前記第1と第2の実行パイプラインの少なくとも第1と第2の対応するパイプステージに対して、前記命令の第1と第2のシーケンスは、単一クロックにおいて処理を完了する命令と1より多いクロックにおいて処理を完了する命令の双方を含み、かつ前記第1と第2のパイプステージに対して関連する状態情報は、前記第1または第2の対応するパイプステージの何れかにおいて、現在の命令が処理を完了するために1より多いクロックを必要とするか否かの指示を含み、且つ
    前記パイプ制御回路は、現在の命令が処理を完了するために、1より多いクロックサイクルを必要とするとき、前記状態情報に基づいて次のパイプステージへの流れから現在の命令を遅延することを特徴とする請求項1に記載のパイプライン化されたプロセッサ。
  4. 各々が複数のパイプステージを有する複数の実行パイプラインのあるパイプライン化したプロセッサであって、
    前記パイプステージの各々は、状態情報をパイプステージと関連づけ、前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは
    第1と第2の命令をそれぞれ前記第1と第2の実行パイプラインへ独立して発するための命令発生手段、前記第1の命令はシニアであり、かつ前記第2の命令は前記第1の命令に関するデータ依存性を有しており、少なくとも一つのパイプステージと関連した状態情報はデータの依存性を示し、且つ前記データの依存性はリード・アフタ・ライト・データ・ハザードであり、および
    発せられた命令間にデータ依存性を有し、この実行パイプラインのパイプステージ間で命令の流れを制御するように、少なくとも前記第1と第2の実行パイプラインへ発せられた命令の実行をモニタするためのパイプ制御手段を有し、
    前記パイプ制御手段は、前記データ依存性が現在のステージにおける前記第2の命令処理を完了するのために解決されない限り、前記第2の実行パイプラインの現在のパイプステージから前記第2の実行パイプラインの次のステージへの流れから前記第2の命令が遅延されないように、前記状態情報に基づいてそれぞれの実行パイプラインのステージ間で前記第1と第2の命令の流れを制御することを特徴とするプロセッサ。
  5. 命令は一組の論理レジスタを参照し、かつ前記プロセッサは、論理レジスタの数より大きな数の物理レジスタを有するレジスタファイルを有し、更に、プロセッサは、
    前記レジスタファイルにおける物理レジスタへの命令によって参照される論理レジスタをマッピングすることによってリネーミングするレジスタを選択的に実現化するためのレジスタ変換手段、
    前記第1と第2の実行パイプラインへそれぞれ第3と第4の命令を独立して発する前記命令発生手段、前記第3の命令はシニアであり、前記第4の命令は前記第3の命令に関するライト・アフタ・リード依存性またはライト・アフタ・ライト依存性を有し、および
    前記第4の命令に対するこの依存性を除くために残っているレジスタを使用するための前記レジスタ変換手段、
    を有することを特徴とする請求項4に記載のプロセッサ。
  6. 前記リード・アフタ・ライト・データ・ハザードは、前記第1の命令の行き先レジスタと同じであるソースレジスタを参照する第2の命令から生じ、かつ前記パイプ制御手段は、前記第1と第2の命令間のデータ依存性を除くために、前記第2の命令によって参照されるソースレジスタを変更することによって、前記第1の命令から前記第2の命令へデータを選択的に送るための送り手段を有することを特徴とする請求項4に記載のプロセッサ。
  7. 複数の実行パイプライの各々が複数の対応するパイプラインステージを有し、各々のステージは、状態情報をパイプステージと関連づけるパイプライン化したプロセッサであって、
    前記複数の実行パイプラインの一つの実行パイプラインに発せられた命令は、前記実行パイプラインの少なくとも一つのパイプステージで処理され、それによって前記少なくとも一つのパイプステージに対して関連した状態情報を変更し、前記プロセッサは
    同時に異なるパイプラインへの少なくとも1つの命令の発生を有し、それぞれのパイプラインへ命令のシーケンスにおける命令を発するように動作可能な命令発生手段、および
    前記パイプラインの複数の対応するパイプラインステージに対する状態情報に応答して、それぞれのパイプラインにおける前記複数の対応するステージ間の命令の流れを制御するように、かつ前記パイプラインの1つにおける1つのパイプラインステージの命令が他のパイプラインの対応するパイプラインステージ間の命令の移動に無関係に、そのパイプラインにおける他のパイプラインステージへ移動するように動作可能なパイプライン制御手段、
    を有するプロセッサ。
  8. 選択された命令に対して、前記命令発生手段は、各々のパイプラインにおける実行ステージによって処理するための少なくとも2つのパイプラインへ単一の命令を発するように動作し、前記パイプライン化したプロセッサは、更にマイクロ制御手段を有し、且つ、
    各々の選択された命令に対して、これらの実行ステージが前記選択された命令を処理するように独立して制御されるように、前記少なくとも2つのパイプラインの前記実行ステージへの、マイクロ命令の流れを制御するために、前記マイクロ制御手段は、選択的に動作可能であることを特徴とする請求項7に記載のプロセッサ。
  9. 論理レジスタの組を参照する少なくとも複数の命令を処理する実行パイプラインを有するパイプライン化したプロセッサであって、
    少なくとも命令デコードステージ及び実行ステージを含む実行パイプラインと
    パイプライン制御回路と
    マイクロ制御回路と
    を有し、
    前記論理レジスタを参照する少なくとも複数の命令は、マイクロ制御された命令であり
    前記マイクロ制御回路は、前記マイクロ制御された命令の各々に対して、前記実行パイプラインの実行ステージにおける前記マイクロ制御された命令の実行を制御する1以上のマイクロ命令を与え、更に
    前記論理レジスタと関連する情報を記憶するための複数の物理レジスタを有するレジスタファイルと
    前記レジスタファイルにおける物理レジスタを前記論理レジスタに割当てるレジスタ変換回路と
    を有し
    前記レジスタ変換回路は、前記命令デコードステージまたは前記パイプライン制御回路によって発生されたハードウエア制御信号か、または所定形式のマイクロ制御された命令の各々に対して、前記所定形式のマイクロ制御された命令と関連する1以上のマイクロ命令によって発生されたマイクロコード制御信号の何れかによって制御可能であり、且つ
    前記マイクロ制御回路は、前記所定形式のマイクロ制御された命令の実行中に、前記マイクロ制御信号を前記レジスタ変換回路へ与えることを特徴とするプロセッサ。
  10. 前記パイプライン化したプロセッサは、少なくとも2つの実行パイプラインを有し、且つ前記所定形式のマイクロ制御された命令は、排他的なマイクロ制御された命令を有し、前記排他的なマイクロ制御された命令の各々は、他の命令と対にされることなく、前記少なくとも2つの実行パイプラインへ単独で発せられることを特徴とする請求項9に記載のプロセッサ。
JP25199094A 1993-10-18 1994-10-18 パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ Expired - Lifetime JP3678444B2 (ja)

Applications Claiming Priority (24)

Application Number Priority Date Filing Date Title
US13828193A 1993-10-18 1993-10-18
US13828093A 1993-10-18 1993-10-18
US13865593A 1993-10-18 1993-10-18
US13959793A 1993-10-18 1993-10-18
US13890193A 1993-10-18 1993-10-18
US13857493A 1993-10-18 1993-10-18
US13857293A 1993-10-18 1993-10-18
US13878993A 1993-10-18 1993-10-18
US13890293A 1993-10-18 1993-10-18
US13857393A 1993-10-18 1993-10-18
US13827893A 1993-10-18 1993-10-18
US13827293A 1993-10-18 1993-10-18
US08/138655 1993-10-18
US08/138573 1993-10-18
US08/138901 1993-10-18
US08/138280 1993-10-18
US08/138789 1993-10-18
US08/138281 1993-10-18
US08/138574 1993-10-18
US08/138902 1993-10-18
US08/138278 1993-10-18
US08/138572 1993-10-18
US08/139597 1993-10-18
US08/138272 1993-10-18

Publications (2)

Publication Number Publication Date
JPH07152559A JPH07152559A (ja) 1995-06-16
JP3678444B2 true JP3678444B2 (ja) 2005-08-03

Family

ID=27583764

Family Applications (1)

Application Number Title Priority Date Filing Date
JP25199094A Expired - Lifetime JP3678444B2 (ja) 1993-10-18 1994-10-18 パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ

Country Status (3)

Country Link
EP (2) EP0779577B1 (ja)
JP (1) JP3678444B2 (ja)
DE (1) DE69408769T2 (ja)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW353732B (en) * 1994-03-31 1999-03-01 Ibm Processing system and method of operation
US7301541B2 (en) 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5742840A (en) * 1995-08-16 1998-04-21 Microunity Systems Engineering, Inc. General purpose, multiple precision parallel operation, programmable media processor
US5649138A (en) * 1996-01-04 1997-07-15 Advanced Micro Devices Time dependent rerouting of instructions in plurality of reservation stations of a superscalar microprocessor
US5802338A (en) * 1996-10-01 1998-09-01 International Business Machines Corporation Method of self-parallelizing and self-parallelizing multiprocessor using the method
US5872949A (en) * 1996-11-13 1999-02-16 International Business Machines Corp. Apparatus and method for managing data flow dependencies arising from out-of-order execution, by an execution unit, of an instruction series input from an instruction source
US5870578A (en) * 1997-12-09 1999-02-09 Advanced Micro Devices, Inc. Workload balancing in a microprocessor for reduced instruction dispatch stalling
US6216222B1 (en) 1998-05-14 2001-04-10 Arm Limited Handling exceptions in a pipelined data processing apparatus
EP1004959B1 (en) 1998-10-06 2018-08-08 Texas Instruments Incorporated Processor with pipeline protection
EP0992896A1 (en) * 1998-10-06 2000-04-12 Texas Instruments Inc. Pipeline protection
US6862563B1 (en) 1998-10-14 2005-03-01 Arc International Method and apparatus for managing the configuration and functionality of a semiconductor design
US7114056B2 (en) 1998-12-03 2006-09-26 Sun Microsystems, Inc. Local and global register partitioning in a VLIW processor
US7117342B2 (en) 1998-12-03 2006-10-03 Sun Microsystems, Inc. Implicitly derived register specifiers in a processor
US6279100B1 (en) * 1998-12-03 2001-08-21 Sun Microsystems, Inc. Local stall control method and structure in a microprocessor
AU4848700A (en) * 1999-05-13 2000-12-05 Arc International U.S. Holdings Inc. Method and apparatus for processor pipeline segmentation and re-assembly
US6587940B1 (en) * 2000-01-18 2003-07-01 Hewlett-Packard Development Company Local stall/hazard detect in superscalar, pipelined microprocessor to avoid re-read of register file
AU2001243463A1 (en) 2000-03-10 2001-09-24 Arc International Plc Memory interface and method of interfacing between functional entities
JP2003536132A (ja) * 2000-06-02 2003-12-02 サン・マイクロシステムズ・インコーポレイテッド Vliwプロセッサでの部分的パイプライン式命令の同期
US6993641B2 (en) 2000-11-08 2006-01-31 Pts Corporation Stall control
US7000095B2 (en) 2002-09-06 2006-02-14 Mips Technologies, Inc. Method and apparatus for clearing hazards using jump instructions
US7124318B2 (en) 2003-09-18 2006-10-17 International Business Machines Corporation Multiple parallel pipeline processor having self-repairing capability
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements
US7634641B2 (en) 2005-03-18 2009-12-15 Sun Microsystems, Inc. Method and apparatus for using multiple threads to spectulatively execute instructions
US7571304B2 (en) 2005-03-18 2009-08-04 Sun Microsystems, Inc. Generation of multiple checkpoints in a processor that supports speculative execution
US8417922B2 (en) * 2006-08-02 2013-04-09 Qualcomm Incorporated Method and system to combine multiple register units within a microprocessor
US8127113B1 (en) 2006-12-01 2012-02-28 Synopsys, Inc. Generating hardware accelerators and processor offloads
JP5598114B2 (ja) * 2010-06-22 2014-10-01 富士通株式会社 演算ユニット
US9448800B2 (en) * 2013-03-14 2016-09-20 Samsung Electronics Co., Ltd. Reorder-buffer-based static checkpointing for rename table rebuilding
CN110187883B (zh) * 2019-05-17 2022-12-06 湖南科技大学 一种面向指令目标操作数的寄存器对分配方法及存储介质
US11204770B2 (en) * 2020-04-01 2021-12-21 Andes Technology Corporation Microprocessor having self-resetting register scoreboard

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0762823B2 (ja) 1985-05-22 1995-07-05 株式会社日立製作所 デ−タ処理装置
US4752973A (en) * 1986-05-05 1988-06-28 Wolfberg Larry B Glove
US4992938A (en) 1987-07-01 1991-02-12 International Business Machines Corporation Instruction control mechanism for a computing system with register renaming, map table and queues indicating available registers
US4901233A (en) * 1987-07-20 1990-02-13 International Business Machines Corporation Computer system with logic for writing instruction identifying data into array control lists for precise post-branch recoveries
US5019967A (en) * 1988-07-20 1991-05-28 Digital Equipment Corporation Pipeline bubble compression in a computer system
US5150469A (en) * 1988-12-12 1992-09-22 Digital Equipment Corporation System and method for processor pipeline control by selective signal deassertion
US5226126A (en) * 1989-02-24 1993-07-06 Nexgen Microsystems Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
DE69032292T2 (de) * 1989-09-25 1998-09-24 Matsushita Electric Ind Co Ltd Rechner mit Pipeline-Struktur
EP0514763A3 (en) * 1991-05-20 1993-08-25 Motorola, Inc. A data processor having a logical register content-addressable memory
US5363495A (en) * 1991-08-26 1994-11-08 International Business Machines Corporation Data processing system with multiple execution units capable of executing instructions out of sequence
GB2263565B (en) * 1992-01-23 1995-08-30 Intel Corp Microprocessor with apparatus for parallel execution of instructions
EP0636256B1 (en) * 1992-03-31 1997-06-04 Seiko Epson Corporation Superscalar risc processor instruction scheduling
EP0651331B1 (en) 1993-10-18 2002-01-09 National Semiconductor Corporation A write buffer for a superpipelined, superscalar microprocessor
EP0649086B1 (en) 1993-10-18 2000-07-19 National Semiconductor Corporation Microprocessor with speculative execution
EP0649084A1 (en) 1993-10-18 1995-04-19 Cyrix Corporation Microprocessor branch processing
DE69425310T2 (de) 1993-10-18 2001-06-13 Via Cyrix Inc Mikrosteuereinheit für einen superpipeline-superskalaren Mikroprozessor

Also Published As

Publication number Publication date
JPH07152559A (ja) 1995-06-16
EP0649085B1 (en) 1998-03-04
DE69408769D1 (de) 1998-04-09
EP0779577A2 (en) 1997-06-18
EP0649085A1 (en) 1995-04-19
EP0779577B1 (en) 2002-05-22
EP0779577A3 (ja) 1997-09-17
DE69408769T2 (de) 1998-07-09

Similar Documents

Publication Publication Date Title
JP3678444B2 (ja) パイプ制御及びレジスタ変換機能を増強したスーパースカラーパイプライン式のプロセッサ
US6138230A (en) Processor with multiple execution pipelines using pipe stage state information to control independent movement of instructions between pipe stages of an execution pipeline
US5630149A (en) Pipelined processor with register renaming hardware to accommodate multiple size registers
US5692168A (en) Prefetch buffer using flow control bit to identify changes of flow within the code stream
US5835951A (en) Branch processing unit with target cache read prioritization protocol for handling multiple hits
US5706491A (en) Branch processing unit with a return stack including repair using pointers from different pipe stages
US5835967A (en) Adjusting prefetch size based on source of prefetch address
US5584009A (en) System and method of retiring store data from a write buffer
US5448705A (en) RISC microprocessor architecture implementing fast trap and exception state
US6073231A (en) Pipelined processor with microcontrol of register translation hardware
EP1385085B1 (en) High performance risc microprocessor architecture
US5471598A (en) Data dependency detection and handling in a microprocessor with write buffer
JP3870973B2 (ja) スーパースケーラマイクロプロセサ
EP0547247B1 (en) Extensible risc microprocessor architecture
US5732243A (en) Branch processing unit with target cache using low/high banking to support split prefetching
JP3678443B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ
US5732253A (en) Branch processing unit with target cache storing history for predicted taken branches and history cache storing history for predicted not-taken branches
JPH07334364A (ja) スーパースカラマイクロプロセッサおよびropを処理する方法
GB2287111A (en) Pipelined processing of instructions
US5740398A (en) Program order sequencing of data in a microprocessor with write buffer
US5596735A (en) Circuit and method for addressing segment descriptor tables
EP0649084A1 (en) Microprocessor branch processing
EP0649086B1 (en) Microprocessor with speculative execution
US5740416A (en) Branch processing unit with a far target cache accessed by indirection from the target cache
JP3736866B2 (ja) スーパーパイプライン式スーパースカラーマイクロプロセッサ用のマイクロコントロールユニット

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20040907

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040921

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20041221

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20041227

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050310

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20050411

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20050510

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20090520

Year of fee payment: 4

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20100520

Year of fee payment: 5

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20110520

Year of fee payment: 6

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20120520

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130520

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130520

Year of fee payment: 8

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term