JP6856358B2 - ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサ - Google Patents

ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサ Download PDF

Info

Publication number
JP6856358B2
JP6856358B2 JP2016223778A JP2016223778A JP6856358B2 JP 6856358 B2 JP6856358 B2 JP 6856358B2 JP 2016223778 A JP2016223778 A JP 2016223778A JP 2016223778 A JP2016223778 A JP 2016223778A JP 6856358 B2 JP6856358 B2 JP 6856358B2
Authority
JP
Japan
Prior art keywords
microcode
instruction
instructions
call
queue
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.)
Active
Application number
JP2016223778A
Other languages
English (en)
Other versions
JP2018060491A (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 JP2018060491A publication Critical patent/JP2018060491A/ja
Application granted granted Critical
Publication of JP6856358B2 publication Critical patent/JP6856358B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier 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/22Microcontrol or microprogram arrangements
    • G06F9/223Execution means for microinstructions irrespective of the microinstruction function, e.g. decoding of microinstructions and nanoinstructions; timing of microinstructions; programmable logic arrays; delays and fan-out problems
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/3802Instruction 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3842Speculative 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines

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)
  • Executing Machine-Instructions (AREA)

Description

本発明は、ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサに関する。
一般的に中央処理装置(CPU)やマイクロプロセッサと称されるストアド・プログラム・プロセッサの性能向上に対する絶え間ない需要が存在する。歴史的に、一部のプロセッサには、プロセッサの命令セットアーキテクチャ(ISA)のすくなくとも一部のアーキテクチャ命令を実行し、および例外を処理するマイクロコードが含まれている。
従来のプロセッサは、クロックサイクルごとにプロセッサのマイクロコードメモリから単一のマイクロコード命令をフェッチするため、特にクロックごとに複数の命令を処理する能力を有するプロセッサにおいて、マイクロコード化されたアーキテクチャ命令および/または例外サービスルーチンの性能が制限される可能性がある。
命令セットアーキテクチャ(ISA)を有するプロセッサであって、
マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインと、
ISAによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータとを含み、
前記命令トランスレータは、
マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
前記メモリによって提供されたマイクロコード命令を保持するキューと、
前記メモリと前記キューとの間に結合され、前記複数のマイクロコード命令のうちの1つまたは複数のローカル分岐命令を検出するためにメモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その1つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで(プログラム順の最初のローカル分岐命令を含まない)を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止し、その中、ローカル分岐命令は、実行パイプラインではなく命令トランスレータによって解析される分岐デコーダと、
複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータとを含む。
プロセッサを示すブロック図である。 図1に示すプロセッサの命令トランスレータをより詳細に示すブロック図である。 図2に示すマイクロコードユニットの動作を示すフローチャートである。 図2に示すマイクロコードユニットの動作を示すフローチャートである。
「ローカル分岐命令」とは、プロセッサの実行パイプラインではなく命令トランスレータによって解析される分岐命令である。ローカル分岐命令は、無条件ジャンプ命令、コール命令、またはターゲットアドレスが命令トランスレータのコール/リターンスタックから得られるリターン命令のような無条件分岐命令であってよい。ローカル分岐命令は、条件が命令トランスレータによって解析可能である条件付き分岐命令であってもよく、したがって、静的条件などの実行パイプラインによって解析される必要はない。
「非ローカル分岐命令」とは、プロセッサの実行パイプラインによって解析される分岐命令である。
「マイクロコード」とは、アーキテクチャ命令の実行および/または例外の処理に使用される、プロセッサの非アーキテクチャメモリに格納された非アーキテクチャ命令である命令のルーチンまたはプログラムスレッドである。マイクロコードによって実行されるアーキテクチャ命令は、通常、複雑かつ/またはあまり実行されない。マイクロコードによって処理される例外は、アーキテクチャ上および/またはマイクロアーキテクチャ上の例外であってよい。マイクロコードルーチンは、1つまたは複数の分岐命令を含んでよい。
「マイクロ命令」とは、プロセッサの1つまたは複数の実行ユニットによって実行される命令であり、プロセッサのISAによって定義された命令セットとは異なる命令セットによって定義される。プロセッサのISAの例は、x86 ISAである。アーキテクチャ命令は、1つまたは複数のマイクロ命令に変換される。実行ユニットによる1つまたは複数のマイクロ命令の集合的実行は、アーキテクチャ命令を実施する、すなわち、ISAによって定義されたアーキテクチャ命令の結果を生成するために必要な動作を実行する。
ここで図1を参照すると、プロセッサ100を示すブロック図が示されている。プロセッサ100は、命令キャッシュ102と、命令トランスレータ104と、スーパースカラ・アウト・オブ・オーダー実行パイプライン192とを含む。命令キャッシュ102は、システムメモリからアーキテクチャ命令をキャッシュし、アーキテクチャプログラムカウンタ(図示せず)に基づいて命令トランスレータ104にアーキテクチャ命令178を供給する。命令トランスレータ104は、アーキテクチャ命令178をマイクロ命令138に変換し、それを実行パイプライン192に提供する。実行パイプライン192は、マイクロ命令138を実行して、プロセッサ100のISAによって定義されたように、変換されたアーキテクチャ命令178の結果を生成する。1つの実施形態では、プロセッサ100 ISAは、x86 ISAである。有利には、命令トランスレータ104は、クロックサイクルごとに複数のマイクロコード命令(例えば、図2のマイクロコード命令272参照)をフェッチし、それをマイクロ命令138に変換し、ここでより詳細に説明するように、クロックサイクルごとに単一のマイクロコード命令をフェッチする従来のプロセッサのスループットを超えるように、クロックサイクルごとに実行パイプライン192へ提供されるマイクロ命令138のスループットを増加させる。これはクロックサイクルごとに単一のマイクロコード命令をフェッチする従来のプロセッサの性能に対して、マイクロコード化アーキテクチャ命令178の性能を潜在的に向上させ、および/または割り込みなどの例外を処理するマイクロコードの性能を向上させる。
実行パイプライン192は、リネームユニット106と、リザベーションステーション108と、実行ユニット112と、アーキテクチャレジスタ116と、リオーダバッファ118と、メモリサブシステム122とを含む。実行ユニット112は、マイクロ命令138を実行する。1つの実施形態では、実行ユニット112は、1つまたは複数の整数ユニットと、1つまたは複数のメディア/浮動小数点ユニットと、1つまたは複数の分岐ユニットと、1つまたは複数のロード/ストアユニットとを含む。好ましくは、メモリサブシステム122は、メモリオーダバッファと、1つまたは複数のキャッシュメモリ(例えば、レベル1の命令キャッシュ、レベル1のデータキャッシュ)と、トランスレーション・ルックアサイド・バッファと、テーブルワークエンジンと、1つまたは複数のデータプリフェッチャと、ライトコンバインバッファと、ロードキュー、ストアキュー、スヌープキュー、フィルキューなどのさまざまな要求キューとを含む。
命令トランスレータ104は、マイクロ命令138をプログラム順にリネームユニット106に供給する。リネームユニット106は、命令トランスレータ104からマイクロ命令138を受信し、プログラム順に各マイクロ命令138にリオーダバッファ118内のエントリを割り当てる。好ましくは、リオーダバッファ118は循環キューであり、リオーダバッファ118内のエントリは、マイクロ命令138のプログラム順に保持するために割り当てられる。実行ユニット112は、プログラム順にマイクロ命令138を実行する。しかしながら、リネームユニット106は、マイクロ命令138の間の依存性をチェックし、マイクロ命令138と共に実行パイプライン192に沿って依存性情報を送信する。リザベーションステーション108は、実行準備が整うまでマイクロ命令138を保持する。リザベーションステーション108およびスケジューラ(図示せず)は、依存性情報を使用して、マイクロ命令138が、実行準備が整うまで実行ユニット112に実行のために発行されないことを保証する。マイクロ命令138は、実行ユニット112がそれを実行するために利用可能であるときおよびそのソースオペランドのすべてが利用可能であるときに実行する準備ができている。より具体的には、マイクロ命令138のソースオペランドは、それが依存する任意のマイクロ命令138が実行され、ソースオペランドであるその結果を生成したときに利用可能である。
1つの実施形態において、リオーダバッファ118は、実行されたマイクロ命令138の結果を格納するフィールドを各エントリに含む。マイクロ命令138が実行され、リオーダバッファ118への供給のために結果バス上にその結果が生成されると、マイクロ命令138のリオーダバッファ118のエントリが実行済みとしてマークされる。しかしながら、マイクロ命令138は、実行パイプライン192における最も古いマイクロ命令138であるまで、リタイアされない、すなわち、その結果がアーキテクチャ状態にコミットされない可能性がある。したがって、実行ユニット112がマイクロ命令138をプログラム順に実行するものの、リネームユニット106およびリオーダバッファ118は、マイクロ命令138がプログラム順にリタイアされることを保証するために共に動作する。好ましくは、結果はまた必要に応じて、次のクロックサイクルでの使用のために、転送バスを介して、実行ユニット112に送り返される。好ましくは、実行パイプライン192は、クロックサイクルごとに4つの最も古いマイクロ命令138までリタイアするように構成される。アーキテクチャ命令178が変換されたマイクロ命令138のすべてがリタイアされると、アーキテクチャ命令178はリタイアされている。例えば、アーキテクチャ命令178を実施するマイクロコードルーチンの最後のマイクロ命令138であるマイクロ命令138がリタイアするとき、アーキテクチャ命令178はリタイアされている。
別の実施形態では、リオーダバッファ118のエントリは、各マイクロ命令138の結果のための記憶域を含み、マイクロ命令138をリタイアすることは、結果を適切なアーキテクチャレジスタ116に書き込むことを含む。他の実施形態では、実行パイプライン192は、物理レジスタファイル(図示せず)を含み、それはアーキテクチャレジスタ116のための記憶域であり、リオーダバッファ118のエントリは結果の記憶域を含まない。代わりに、リネームユニット106は、各マイクロ命令138の結果に対して物理レジスタファイル内にレジスタを割り当て、物理レジスタファイル内の割り当てられたレジスタに基づいて依存性をチェックする。リネームユニット106は、物理レジスタファイル内の各レジスタの状態を示すテーブルをも保持する。より具体的には、マイクロ命令138がリタイアするとき、リネームユニット106は、マイクロ命令138の結果を保持する物理レジスタファイルのレジスタの状態を更新して、関連するアーキテクチャレジスタ116のアーキテクチャ状態を現在含んでいることを示す。
命令トランスレータ104は、高速トランスレータ154と、マイクロコードユニット156と、マルチプレクサ152(多工器)とを含む。高速トランスレータ154は、アーキテクチャ命令178をマイクロ命令136に変換する。マイクロコードユニット156は、アーキテクチャ命令178をマイクロ命令134に変換する。マルチプレクサ152は、実行パイプライン192にマイクロ命令138として供給するために、命令トランスレータ104のモードに応じて、高速トランスレータ154からのマイクロ命令136またはマイクロコードユニット156からのマイクロ命令134のいずれかを選択する。1つの実施形態では、キュー(図示せず)は、実行パイプライン192への供給のためにマイクロ命令138をバッファリングする。
高速トランスレータ154は、比較的単純および/または頻繁に実行されるアーキテクチャ命令178を変換する。好ましくは、高速トランスレータ154は、プログラマブルロジックアレイの集合を含む。上記、プログラマブルロジックアレイの集合は、アーキテクチャ命令178のサブセットに対して、好ましくは単一クロックサイクルで、各アーキテクチャ命令178を1つ以上のマイクロ命令136に変換する。1つの実施形態では、高速トランスレータ154は、クロックサイクルごとに最大4つのアーキテクチャ命令178を変換し、クロックサイクルごとに最大6つのマイクロ命令136を提供することができる。高速トランスレータ154はアーキテクチャ命令178を変換することができるが、命令トランスレータ104は高速変換モードのままであり、この場合、マルチプレクサ152は高速トランスレータ154によって生成されたマイクロ命令136を選択する。
しかしながら、高速トランスレータ154がマイクロコードアーキテクチャ命令178に遭遇するか、または例外条件が通知されると、高速トランスレータ154はアーキテクチャ命令178の変換を停止し、制御をマイクロコードユニット156に移し、マイクロコードモードに移行する。この場合、マルチプレクサ152は、マイクロコードユニット156によって生成されたマイクロ命令134を選択する。また、高速トランスレータ154は、マイクロコード化されたアーキテクチャ命令178または例外サービスを実行するマイクロコードROM202(図2参照)に記憶されたマイクロコードルーチンのアドレスを提供する。マイクロコードユニット156およびその動作は、以下の残りの図を参照しながらより詳細に説明する。
1つの実施形態では、アーキテクチャ命令178の一部はハイブリッドである。すなわち、高速トランスレータ154は、マイクロ命令136の一部を提供し、アーキテクチャ命令178の残りはマイクロコード化される。すなわち、高速トランスレータ154が高速変換モードでマイクロ命令136の先頭部分を供給した後、モードがマイクロコードモードに変更され、制御はマイクロコードユニット156に移転され、マイクロコードルーチンはマイクロコードユニット156によって供給されたマイクロ命令134を介してアーキテクチャ命令178の機能の残りを実行することができる。
有利には、以下により詳細に説明するように、命令トランスレータ104は、クロックサイクルごとに複数のマイクロコード命令をフェッチして、実行パイプライン192に供給されるマイクロ命令138のスループットを増加させることによって、マイクロコード化されたアーキテクチャ命令178および/またはマイクロコード化された例外サービスルーチンについて、実行パイプライン192のスーパースカラ機能を活用しまたそれの利用を増加させる。
ここで図2を参照すると、図1のプロセッサ100の命令トランスレータ104をより詳細に示すブロック図が示されている。命令トランスレータ104は、アドレスジェネレータ206と、マイクロコードROM202と、分岐デコーダ208と、マイクロコード命令キュー212と、キューコントローラ(キューCNTRL)214と、複数のマイクロコードトランスレータ216と、コール/リターンユニット222(CRU)とを含む。マイクロコードROM202は、バンクA 204A、バンクB 204B、バンクC 204C、およびバンクD 204Dの4つの別々にアドレサブルバンクを含み、集合的にバンク204と呼ばれ、また個別にバンク204と呼ばれるバンクメモリである。このように、マイクロコードROM202は、有利には、本明細書でフェッチ量子296と呼ばれる4つのマイクロコード命令272をクロックサイクルごとに分岐デコーダ208に提供する。図示されるように、マイクロコードROM202は、0から3で示される4つのそれぞれのレーン上の4つのマイクロコード命令272を分岐デコーダ208に供給する。レーン0は、プログラム順に第1のマイクロ命令272を提供し、レーン1は、プログラム順に第2のマイクロ命令272を提供し、レーン2は、プログラム順に第3のマイクロ命令272を提供し、レーン3は、プログラム順に第4のマイクロ命令272を提供する。1つの実施形態によれば、各バンク204は、有利には、そのサイズおよび電力消費を最小にするために、単一の読み出しポートを有する。
アドレスジェネレータ206は、マイクロコードROM202に供給されるマイクロコードフェッチアドレス268を生成する。第1の加算器224-1は、フェッチアドレス268を1だけインクリメントし、第2の加算器224-2は、フェッチアドレス268を2だけインクリメントし、第3の加算器224-3は、フェッチアドレス268を3だけインクリメントし、それぞれのインクリメントされたアドレスの各々は、フェッチアドレス268と共にマイクロコードROM202に提供される。4つのアドレスのそれぞれは、マイクロコードROM202のそれぞれのバンク204に供給され、フェッチ量子296の4つの順次マイクロコード命令272のフェッチを達成する。好ましくは、マイクロコードROM202は、4つのアドレスのそれぞれを4つのバンク204のうちの適切な1つに導く第1のセットのマルチプレクサ(図示せず)と、フェッチアドレス268の2つの最下位ビットに依存して、4つのバンク204によって提供される4つのマイクロコード命令272のそれぞれを分岐デコーダ208の適切なレーンに導く第2のセットのマルチプレクサ(図示せず)とを含む。好ましくは、フェッチアドレス268の下位2ビットの値が0である場合、フェッチアドレス268はバンクA 204Aに提供され、1インクリメントされたアドレスはバンクB 204Bに提供され、2インクリメントされたアドレスはバンクC 204Cに供給され、3インクリメントされたアドレスはバンクD 204Dに供給される。フェッチアドレス268の下位2ビットの値が1である場合、フェッチアドレス268はバンクB 204Bに提供され、1インクリメントされたアドレスはバンクC 204Cに提供され、2インクリメントされたアドレスはバンクD 204Dに供給され、3インクリメントされたアドレスはバンクA 204Aに供給される。フェッチアドレス268の下位2ビットの値が2である場合、フェッチアドレス268はバンクC 204Cに提供され、1インクリメントされたアドレスはバンクD 204Dに提供され、2インクリメントされたアドレスはバンクA 204Aに提供され、3インクリメントされたアドレスはバンクB 204Bに提供される。フェッチアドレス268の下位2ビットの値が3である場合、フェッチアドレス268はバンクD 204Dに提供され、1インクリメントされたアドレスはバンクA 204Aに提供され、2インクリメントされたアドレスはバンクB 204Bに供給され、3インクリメントされたアドレスはバンクC 204Cに供給される。同様に、バンクA 204Aの出力はフェッチアドレス268のモジュロ4の下位2ビットの値に対応する分岐デコーダ208のレーンに供給され、バンクB 204Bの出力はフェッチアドレス268の+1モジュロ4の下位2ビットの値に対応する分岐デコーダ208のレーンに供給され、バンクC 204Cの出力はフェッチアドレス268の+2モジュロ4の下位2ビットの値に対応する分岐デコーダ208のレーンに供給され、またバンクD 204Dの出力はフェッチアドレス268の+3モジュロ4の下位2ビットの値に対応する分岐デコーダ208のレーンに供給される。
フェッチアドレス268は、マイクロコードプログラムカウンタ(図示せず)に保持される。最初に、すなわち、高速トランスレータ154がマイクロコードモードに切り替わると、マイクロコードプログラムカウンタには、高速トランスレータ154によって提供されたマイクロコードルーチンのアドレスがロードされる。上述したように、ローカル分岐命令は、命令トランスレータ104によって(より具体的には、実行パイプライン192ではなく、マイクロコードユニット156によって)解析されるものである。逆に、非ローカル分岐命令は、解析のために実行パイプライン192に発行されなければならず、マイクロコードユニット156によって解析することができない命令である。分岐命令を解析することは、分岐命令が実行されたか否かを判断することと、実行された場合には、分岐命令のターゲットアドレスを判断することを意味する。フェッチ量子296がマイクロコードROM202からフェッチされるたびに、フェッチアドレス268(すなわち、マイクロコードプログラムカウンタ)が更新される。分岐デコーダ208がフェッチ量子296にローカル分岐命令が存在しないと判断した場合、アドレスジェネレータ206は次の順次命令をフェッチする。より具体的には、加算器226は、フェッチアドレス268を4、すなわち、フェッチ量子296のサイズだけインクリメントする。しかしながら、分岐デコーダ208がフェッチ量子296のローカル分岐命令を検出すると、分岐デコーダ208は、ローカル分岐命令を解析し、またもしその方向が使われれば、分岐デコーダ208は解析されたターゲットアドレス266を、アドレスジェネレータ206に提供して、マイクロコードプログラムカウンタを更新し、解析されたターゲットアドレス266で次のフェッチ量子296をフェッチする。
コールマイクロコード命令の場合では、その方向は常に採用され、分岐デコーダ208によって計算されたターゲットアドレス266は、コール命令後の次の順次アドレスである。以下により詳細に説明するように、上記次の順次アドレスは、コール/リターンユニット222に提供され、また現在のコール/リターンスタック254にプッシュされるリターンアドレスである。コールマイクロコード命令は、マイクロコードユニット156によって解析され、したがってローカル分岐命令である。リターンマイクロコード命令の場合では、その方向は常に採用され、リターンアドレス298は、以下により詳細に説明するように、現在のコール/リターンスタック254からポップされ、アドレスジェネレータ206に提供され、マイクロコードプログラムカウンタを更新する。リターンマイクロコード命令はマイクロコードユニット156によって解析され、したがってローカル分岐命令である。無条件ジャンプマイクロコード命令は、常に実行され、ローカルまたは非ローカル分岐であってよい。ローカル無条件ジャンプの場合では、ターゲットアドレス266は命令自体で指定され、実行パイプライン192は非ローカル無条件ジャンプのターゲットアドレスを計算する。同様に、条件付きジャンプマイクロコード命令は、ローカルでも非ローカルでもよい。ローカル条件付きジャンプマイクロコード命令の場合では、マイクロコードユニット156は方向を解析し、ターゲットアドレス266は命令自体に含まれる一方、実行パイプライン192は方向を解析し、非ローカル条件ジャンプのターゲットアドレスを計算する。好ましくは、マイクロコードユニット156は、すべての非ローカル分岐命令が実行されないことを効果的に予測し、またフェッチ量子296内の非ローカル分岐命令の存在に基づいて順次フェッチプロセスを中断しない。したがって、もし実行パイプライン192は非ローカル分岐命令が実行されたものと解析すれば、マイクロコード命令キュー212を含むマイクロコードユニット156のパイプラインをフラッシュして、実行パイプライン192は、マイクロコードプログラムカウンタを更新するための新しいターゲットアドレスを提供する。
分岐デコーダ208は、マイクロコードROM202からフェッチ量子296を受信し、マイクロコード命令272をマイクロコード命令274として通過させる。分岐デコーダ208は、ローカルおよび非ローカル分岐命令の両方を探すためにフェッチ量子296をデコードする。特に、分岐デコーダ208は、受信されたフェッチ量子296の0から3まで、すなわちプログラム順にレーンをサーチし、ここで「プログラム順の最初のローカル分岐命令」と称するローカル分岐命令を有する第1のレーンを検出する(もしあれば)。分岐デコーダ208は、プログラム順の最初のローカル分岐命令を有するレーンに先立って、レーン内のフェッチ量子296内の非ローカル分岐の数をも決定し、その数を信号num_non−local_br282を介してコール/リターンユニット222に出力する。分岐デコーダ208は、また、プログラム順の最初のローカル分岐命令がコール命令であるかどうかを決定し、もしそうであれば、コール/リターンユニット222に供給されるプッシュ信号284をアサートする。分岐デコーダ208は、またプログラム順の最初のローカル分岐命令がリターン命令であるかどうかを決定し、もしそうであれば、コール/リターンユニット222に供給されるポップ信号286をアサートする。
分岐デコーダ208はまた、キュー212に書き込まれるフェッチ量子296内の命令の数を示す信号num_valid_instrs288をキューコントローラ214に供給する。より具体的には、num_valid_instrs288の値がNである場合、分岐デコーダ208によって提供される前N個のマイクロコード命令274がキュー212に書き込まれる。キューコントローラ214は、キュー212に提供された書き込みポインタ244によって指定されたキュー212内の場所へのマイクロコード命令274の書き込みを制御する。キューコントローラ214は、現在の書き込みポインタ244の値を、num_valid_instrs288を、キュー212のサイズ、すなわちキュー212内のエントリの数をモジュロとしてインクリメントすることによって、書き込みポインタ244を更新する。最後に、分岐デコーダ208は、プログラム順の最初のローカル分岐命令のターゲットアドレス266をアドレスジェネレータ206へ供給する。num_valid_instrs288は、プログラム順の最初のローカル分岐命令の前の(プログラム順の最初のローカル分岐命令を含まない)フェッチ量子296の命令の数である。したがって、ローカル分岐命令がない場合では、num_valid_instrs288は4であり、プログラム順の最初のローカル分岐命令がレーン3にある場合、num_valid_instrs288は3であり、プログラム順の最初のローカル分岐命令がレーン2にある場合、num_valid_instrs288は2であり、プログラム順の最初のローカル分岐命令がレーン1にある場合、num_valid_instrs288は1であり、またプログラム順の最初のローカル分岐命令がレーン0にある場合、num_valid_instrs288は0である。したがって、分岐デコーダ208がフェッチ量子296内のローカル分岐命令を検出すると、プログラム順の最初のローカル分岐命令の後およびそれを含むマイクロコード命令274を効果的に捨てる、すなわちそれらをキュー212に書き込まないようにする。
分岐デコーダ208をマイクロコードROM202とキュー212との間に機能的に配置することにより、フェッチ量子296がキュー212に書き込まれる前にデコードすることは、分岐デコーダ208をキュー212の後ろに機能的に配置するより利点がある。まず、プログラム順の最初のローカル分岐命令までの(プログラム順の最初のローカル分岐命令は含まれない)フェッチ量子296内のマイクロコード命令のみをキュー212に書き込むことができる上、プログラム順の最初のローカル分岐命令に続くマイクロコード命令はキュー212に書き込まない。これは電力を節約することができる。さらに、分岐デコーダ208がローカル分岐をデコードした場合に、キュー212の性能を低下させるフラッシュを行う必要性を回避する。
キュー212は、マイクロコード命令274によって満杯になった場合、FULL264をアドレスジェネレータ206にアサートする。それによって、アドレスジェネレータ206はマイクロコードROM202からの命令のフェッチを停止するように誘導される。しかしながら、有利には、キュー212が満杯でない限り、実行パイプライン192が命令トランスレータ104からマイクロ命令138を受信することができなくても、例えば、実行パイプライン192が停止している場合であっても、アドレスジェネレータ206はフェッチし続け、キュー212にマイクロコード命令274を投入しようとする。さらに、キュー212は、マイクロコードユニット156のパイプラインの長さに関連する性能ペナルティを低減することができ、これは、1つの実施形態では4つのパイプラインステージを含み、したがってマイクロコードROM202のアクセスからマイクロコードROM202が変換したマイクロ命令134の実行パイプライン192への提供まで、4つのクロックサイクルがかかる。
キュー212は、マイクロコード命令274が空であるときに、マイクロコードトランスレータ216にEMPTY262をアサートし、それで、マイクロコードトランスレータ216はマイクロコード命令276を図1のマイクロ命令134に変換することを停止する。しかしながら、有利には、キュー212が空でない限り、マイクロコードトランスレータ216は、各クロックサイクルでキュー212からマイクロコード命令276を読み出し、それらをマイクロ命令134に変換する。好ましくは、キュー212は、各マイクロコード命令276と共に、各マイクロコード命令が有効であるかどうかを示す有効信号を供給する。これにより、マイクロコードトランスレータ216は無効なマイクロコード命令276を変換しないようになる。例えば、キュー212が2つのマイクロコード命令276のみを含む場合、キュー212はそれらをレーン0および1に提供し、またレーン0および1に関連する有効信号をアサートし、しかしレーン2および3に関連する有効信号をデアサートする。好ましくは、以下に説明するように、キューコントローラ214は、書き込みポインタ244の値から読み出しポインタ242の値を差し引いた差として、キュー212内のマイクロコード命令276の数を決定する。
マイクロコードトランスレータ216は、所定のクロックサイクルにおいてマイクロ命令134に変換されたマイクロコード命令276の数を示す、NUM_TRANSLATED信号246をキューコントローラ214に供給する。キューコントローラ214は、キュー212に供給されたリードポインタ242によって指定されたキュー212内の位置からマイクロコード命令276の読み出しを制御する。キューコントローラ214は、現在のリードポインタ242の値に対して、NUM_TRANSLATED信号246の値をキュー212のサイズ(すなわち、キュー212内のエントリの数)でモジュロにした値をインクリメントすることにより、リードポインタ242を更新する。
1つの実施形態では、マイクロコード命令276は、マイクロコード命令276の複雑さに応じて、1つから4つのマイクロ命令に変換される。好ましくは、4つのマイクロコードトランスレータ216があり、それぞれマイクロコード命令276を異なる数のマイクロ命令に変換することができる。好ましくは、レーン0のトランスレータ216は、任意のタイプのマイクロコード命令276を必要な数のマイクロ命令、すなわち最大4つのマイクロ命令に変換することができる。レーン1のトランスレータ216は、1つから3つのマイクロ命令を必要とするタイプのマイクロコード命令276を変換することができる。レーン2のトランスレータ216は、1つまたは2つのマイクロ命令を必要とするタイプのマイクロコード命令276を変換することができる。レーン3のトランスレータ216は、ただ1つのマイクロ命令を必要とするタイプのマイクロコード命令276を変換することができる。マイクロコードトランスレータ216は、4つのマイクロコードトランスレータ216の出力を受信し、図1のマルチプレクサ152へのマイクロ命令134として供給するための有効なマイクロ命令を選択するマルチプレクサマトリクス(図示せず)を含む。したがって、例えば、所定のクロックサイクルにおいて、レーン0のマイクロコードトランスレータ216は、それが単一のマイクロ命令134に変換されるマイクロコード命令276に遭遇し、またレーン1のマイクロコードトランスレータ216は、4つのマイクロ命令134への変換を必要とするマイクロコード命令276に遭遇し得る。この場合、マイクロコードトランスレータ216は、レーン0のマイクロコード命令276から変換された単一のマイクロ命令134のみを提供する。それは、マイクロ命令134のための残りのスロットは3つしかなく、4つではないからである。しかしながら、有利には、マイクロコード命令キュー212は、マイクロコード命令のストリーム内の複雑さのばらつきおよびストリーム内の可変複雑性マイクロコード命令の互いに対する位置のために、各クロックサイクルで変換されたマイクロコード命令の数の変動の影響を潜在的に改善するためのバッファを提供する。
コール/リターンユニット222は、投機ポインタ258と、非投機ポインタ256と、複数のコール/リターンスタック254と、コール/リターンスタック254に関連する複数のカウンタ252とを含む。投機ポインタ258は、現在のコール/リターンスタック254、すなわちリターンアドレス266がコール/リターンマイクロコード命令に応答してプッシュ/ポップされたコール/リターンスタック254を指す。投機ポインタ258はまた、現在のコール/リターンスタック254に関連するカウンタ252を指す。非投機ポインタ256は、非投機コール/リターンスタック254および関連するカウンタ252を指し、そこでマイクロコードユニット156は、実行パイプライン192によって解析される非ローカル分岐命令(すなわち、間違って採用されないと予測されたマイクロコードユニット156の非ローカル分岐命令を暗黙的に含む)が採用される場合、前記カウンタ252に回復する。すなわち、非投機コール/リターンスタック254は、プロセッサ100に未解析の非ローカル分岐命令がない場合に、分岐デコーダ208によって遭遇されたコール命令に関連するリターンアドレスを保持する。この場合、投機ポインタ258には、非投機ポインタ256の値がロードされ、すなわち、非投機コール/リターンスタック254を指すように更新される。
各カウンタ252は、対応するコール/リターンスタック254が割り当てられたので、分岐デコーダ208によって遭遇された非ローカル分岐命令の数をカウントする。分岐デコーダ208が1つまたは複数の非ローカル分岐命令に遭遇してから(これは現在のカウンタ252の値が非ゼロであることによって示される)、第1のコール/リターン命令に遭遇したとき(すなわち、分岐デコーダ208がプッシュ284/ポップ286をアサートしたとき)、コール/リターンユニット222は、新しいコール/リターンスタック254を割り当てる。この場合、コール/リターンユニット222は、現在のコール/リターンスタック254の内容を新たに割り当てられたコール/リターンスタック254にコピーし、投機ポインタ258を更新して新しく割り当てられたコール/リターンスタック254を指すようにして、リターンアドレスをそれにプッシュ/ポップする前に、それを現在のコール/リターンスタック254にする。新しく割り当てられたコール/リターンスタック254に関連するカウンタ252はゼロにクリアされる。留意すべきは、コール/リターン命令に先行する1つまたは複数の非ローカル分岐命令が同じフェッチ量子296内に存在してもよい。この場合、コール/リターンユニット222は、現在のカウンタ252をインクリメントし、またリターンアドレスをプッシュ/ポップする新しいコール/リターンスタック254を割り当てる。実行パイプライン192が非ローカル分岐命令を解析するたびに、コール/リターンユニット222は、非投機カウンタ252をデクリメントする。非投機カウンタ252がゼロにデクリメントされると、これは非投機コール/リターンスタック254に関連する未解析な非ローカル分岐命令ががもう存在しないことを示すため、コール/リターンユニット222は非投機ポインタ256をインクリメントして次のコール/リターンスタック254を指す。
1つの実施形態では、コール/リターンユニット222は、米国特許第7,975,132号に記載されているマイクロコードユニットの高速コール/リターンスタックユニットと同様のように動作するため、それは参照により本明細書に組み込まれるが、クロックサイクルごとに単一のマイクロコード命令ではなく、クロックサイクルごとに複数のマイクロコード命令をマイクロコードROMからフェッチすることを適応するように変更した。より具体的には、上述したように、分岐デコーダ208は、フェッチ量子296内のプログラム順の最初のローカル分岐命令の前の非ローカル分岐命令の数を検出し、コール/リターンユニット222は、現在のカウンタ252を1ではなく、上記数でインクリメントする。
好ましくは、マイクロコードユニット156は、システムソフトウェア(例えば、BIOSまたはオペレーティングシステム、例えば、x86ライトモデル固有レジスタ(Write Model Specific Register,WRMSR)アーキテクチャ命令を介して)によって書込み可能なパッチランダムアクセスメモリ(RAM)(図示せず)およびパッチコンテンツアドレサブルメモリ(Content Addressable Memory,CAM)をも含み、マイクロコードにパッチを当てる。パッチCAMは、フェッチアドレス268およびその3つのインクリメントされた値を受信する。フェッチアドレス268またはそれらのインクリメントされた値のいずれかがパッチCAM内のアドレスにヒットした場合、パッチCAMはアドレスをパッチRAMに提供する。それに応答して、パッチRAMはマイクロコード命令を提供し、マルチプレクサ(図示せず)はマイクロコードROM202からのマイクロコード命令272ではなくパッチRAMからマイクロコード命令を選択する。
クロックサイクルごとにマイクロコードROM202からフェッチされるマイクロコード命令272の数が4である実施形態について説明したが、他の実施形態では少なくとも2であるが、数が4より多くても少なくてもよい。さらに、クロックサイクルごとにマイクロコードトランスレータ216によって変換されるマイクロコード命令276の数が4までである実施形態について説明したが、他の実施形態では少なくとも2であるが、数が4より多くても少なくてもよい。最後に、クロックサイクルごとに命令トランスレータ104によって実行パイプライン192に提供されるマイクロ命令134の数が最大4である実施形態について説明したが、他の実施形態では、少なくとも2であるが、数が4より多くても少なくてもよい。
ここで図3を参照すると、図2のマイクロコードユニット156の動作を示すフローチャートが示されている。フローはブロック302で開始する。
ブロック302において、アドレスジェネレータ206は、マイクロコードROM202にフェッチアドレス268を提供し、マイクロコードROM202は、それに応答して分岐デコーダ208に4つのマイクロコード命令272のフェッチ量子296を供給する。フローはブロック304に進む。
ブロック304において、分岐デコーダ208は、フェッチ量子296をデコードして、ローカルおよび非ローカル分岐命令(あれば)を検出する。フローはブロック306に進む。
ブロック306において、分岐デコーダ208は、コール/リターンユニット222に、プログラム順の最初のローカル分岐命令の前にプログラム順に現れるフェッチ量子296内の非ローカル分岐命令の数を供給する。これはゼロであってもよい。これに応答して、コール/リターンユニット222は、現在のカウンタ252をその数だけインクリメントする。フローは決定ブロック308に進む。
決定ブロック308において、分岐デコーダ208はプログラム順の最初のローカル分岐命令がコール/リターン命令であるかどうかを決定する。コール/リターン命令でなければ、フローはブロック314に進む。コール/リターン命令である場合、フローはブロック312に進む。
ブロック312において、プログラム順の最初のローカル分岐命令がコール命令である場合、分岐デコーダ208は、コール/リターンユニット222にプッシュ信号284をアサートし、コール/リターンユニット222はそれに応答して、ターゲットアドレス266を現在のコール/リターンスタック254にプッシュして、アドレスジェネレータ206に供給する。しかしながら、プログラム順の最初のローカル分岐命令がリターン命令である場合、分岐デコーダ208は、ポップ信号286をコール/リターンユニット222にアサートし、コール/リターンユニット222はそれに応答して、現在のコール/リターンスタック254からリターンアドレス298をポップして、アドレスジェネレータ206に提供する。フローはブロック314に進む。
ブロック314において、分岐デコーダ208は、フェッチ量子296内のどのマイクロコード命令がキュー212に書き込まれるべきかをマイクロコード命令キュー212に示す。より具体的には、上述したように、フェッチ量子296内のプログラム順の最初のローカル分岐命令までの(プログラム順の最初のローカル分岐命令が含まれない)マイクロコード命令のみがキュー212に書き込まれる。フローはブロック316に進む。
ブロック316において、分岐デコーダ208は、プログラム順の最初のローカル分岐命令(あれば)を解析し、フェッチアドレス268を解析されたプログラム順の最初のローカル分岐命令のターゲットアドレス266に更新する。そうでなければ、アドレスジェネレータ206はフェッチアドレス268を4だけインクリメントする。キュー212が満杯でない限り、フローはブロック302に戻り、次のフェッチ量子296をキュー212にフェッチする。
ここで図4を参照すると、図2のマイクロコードユニット156の動作を示すフローチャートが示されている。フローはブロック402で開始する。
ブロック402において、図3の動作と並行して、マイクロコード命令のフェッチ量子296がマイクロコードROM202からフェッチされ、分岐デコーダ208によってデコードされ、ローカル分岐命令の場合に解析され、またキュー212に書き込まれる。キュー212が空でない限り、マイクロコードトランスレータ216は、マイクロコード命令をキュー212から読み出し、それらを実行パイプライン192に供給するためにマイクロ命令に変換する。フローはブロック402で終了する。
理解すべきは、本発明の様々な実施形態が本明細書に記載されているが、それらは限定ではなく例として提示されている。関連するコンピュータ技術の当業者には、本発明の範囲から逸脱することなく形態および詳細の様々な変更を行うことができることが明らかであろう。例えば、ソフトウェアは、例えば、本明細書に記載の装置および方法の機能、製造、モデリング、シミュレーション、記述および/または試験を可能にすることができる。これは、一般的なプログラミング言語(例えば、C、C++)、ハードウェア記述言語(Hardware description languages,HDL)、例えばVerilog HDL、VHDLなど、または他の利用可能なプログラムを使用して達成することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、または光ディスク(例えば、CD-ROM、DVD-ROMなど)、ネットワーク、有線または他の通信媒体のような既知のコンピュータ使用可能媒体に配置することができる。本明細書に記載の装置および方法の実施形態は、集積回路の製造においてハードウェアに変換されるプロセッサコア(例えば、HDLに具現化、または指定される)などの半導体知的財産コアに含まれてもよい。さらに、本明細書で説明された装置および方法は、ハードウェアとソフトウェアとの組み合わせとして実施されてもよい。したがって、本発明は、本明細書に記載された例示的な実施形態のいずれによっても制限されるべきではなく、添付の特許請求の範囲およびそれらの均等物に従ってのみ定義されるべきである。具体的には、本発明は、汎用コンピュータで使用可能なプロセッサ装置内で実施することができる。最後に、当業者は、開示された概念および特定の実施形態を、添付の特許請求の範囲によって定義される本発明の範囲を逸脱することなく、本発明と同じ目的を実行するための他の構造を設計または修正するための基礎として容易に使用できることを理解すべきである。
本出願は、2016年9月30日に出願されたCN201610875658.6の優先権を主張し、本明細書でその内容を参照により援用する。

Claims (21)

  1. 命令セットアーキテクチャ(ISA)を有するプロセッサであって、
    マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインと、
    ISAによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータとを含み、
    前記命令トランスレータは、
    マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
    前記メモリによって提供されたマイクロコード命令を保持するキューと、
    前記メモリと前記キューとの間に結合され、所定の分岐命令をローカル分岐命令とし、前記複数のマイクロコード命令のうちの前記実行パイプラインではなく前記命令トランスレータによって解析される1つまたは複数の前記ローカル分岐命令を検出するために前記メモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その1つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで(プログラム順の最初のローカル分岐命令を含まない)を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止する分岐デコーダと、
    複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータとを含むことを特徴とするプロセッサ。
  2. クロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、すくなくとも4つであることを特徴とする請求項1に記載のプロセッサ。
  3. 前記命令トランスレータは、さらにコール/リターンユニットを含み、
    前記コール/リターンユニットは、分岐デコーダによってデコードされ、対応するリターン命令がまだ分岐デコーダによってデコードされていないコール命令に関連付けられたリターンアドレスを保持する複数のコール/リターンスタックを有し、
    前記プログラム順の最初のローカル分岐命令がコール/リターン命令である場合、前記分岐デコーダは、コール/リターンユニットに、複数のコール/リターンスタックのうちの現在のものへ/からのリターンアドレスのプッシュ/ポップを指示することを特徴とする請求項1に記載のプロセッサ。
  4. 前記コール/リターンユニットは、前記複数のコール/リターンスタックに対応する複数のカウンタをさらに含み、
    前記複数のカウンタの各カウンタは、前記複数のコール/リターンスタックの対応する1つが前記複数のコール/リターンスタックのうちの現在のものである間において、実行パイプラインによって未解析であって分岐デコーダによってデコードされた非ローカル分岐命令を保持し、
    前記分岐デコーダは、前記複数のマイクロコード命令内の前記プログラム順の最初のローカル分岐命令に先行する非ローカル分岐命令の数をカウントし、
    前記コール/リターンユニットは、前記複数のコール/リターンスタックのうちの現在のものに対応する複数のカウンタのうちの1つに、カウントされた前記数を加算し、
    そのうち、非ローカル分岐命令は、命令トランスレータによってではなく実行パイプラインによって解析されることを特徴とする請求項3に記載のプロセッサ。
  5. 前記アドレスに応答してクロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、N個のマイクロコード命令であり、
    前記メモリは、N個のバンクを含み、前記N個のバンクの各バンクは単一の読み出しポートを有し、
    前記N個のバンクのうちの第1のバンクは、前記アドレスに応答して前記複数のマイクロコード命令のうちの第1のものを提供し、
    残りの前記N個のバンクの各バンクは、前記アドレスの各インクリメントされたバージョンに応答して、複数のマイクロコード命令のそれぞれ1つを提供することを特徴とする請求項1に記載のプロセッサ。
  6. 各クロックサイクルにおいてマイクロコード命令が書き込まれる前記キューの位置を指す書き込みポインタと、
    前記キューに書き込まれたマイクロコード命令の数によって各クロックサイクルにおいて書き込みポインタをインクリメントするキューコントローラと、をさらに含むことを特徴とする請求項1に記載のプロセッサ。
  7. 前記複数のマイクロコードトランスレータがマイクロコード命令を読み出す前記キューの位置を指す読み出しポインタと、
    前記複数のマイクロコードトランスレータによって変換されたマイクロコード命令の数によって各クロックサイクルにおいてリードポインタをインクリメントするキューコントローラと、をさらに含むことを特徴とする請求項1に記載のプロセッサ。
  8. 前記プロセッサは、x86 ISAプロセッサであることを特徴とする請求項1に記載のプロセッサ。
  9. 前記命令トランスレータは、実行パイプラインが現在命令トランスレータから前記マイクロ命令を受け取ることができなくても前記キューが満杯になるまで前記キューに供給するために前記メモリからマイクロコード命令をフェッチし続けるように構成されることを特徴とする請求項1に記載のプロセッサ。
  10. 前記複数のマイクロコード命令がローカル分岐命令を含む場合、前記アドレスは、前記プログラム順の最初のローカル分岐命令によって指定されたターゲットアドレスに更新されることを特徴とする請求項1に記載のプロセッサ。
  11. 前記複数のマイクロコード命令にローカル分岐命令が含まれない場合、前記アドレスは、Nインクリメントされ、Nはクロックサイクルごとに前記メモリによって提供される前記複数のマイクロコード命令の数であることを特徴とする請求項1に記載のプロセッサ。
  12. 前記複数のマイクロコードトランスレータの各々は、マイクロコード命令をマイクロ命令に変換する最大数が異なるように構成されることを特徴とする請求項1に記載のプロセッサ。
  13. プロセッサの命令セットアーキテクチャ(ISA)によって定義されたアーキテクチャ命令を、複数の実行ユニットを有する実行パイプラインによって実行されるためのマイクロ命令に変換する方法であって、
    アドレスに応じてクロックサイクルごとに複数のマイクロコード命令をメモリによって提供するステップと、
    所定の分岐命令をローカル分岐命令とし、前記複数のマイクロコード命令のうちの前記実行パイプラインではなく命令トランスレータによって解析される1つまたは複数の前記ローカル分岐命令を検出するために前記メモリとキューとの間に結合された分岐デコーダによって前記メモリによって提供された前記複数のマイクロコード命令をデコードするステップと、
    前記複数のマイクロコード命令のマイクロコード命令を、その1つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで(プログラム順の最初のローカル分岐命令を含まない)を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止するステップと、
    複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を複数のマイクロコードトランスレータによって変換するステップと、を含むことを特徴とする方法。
  14. クロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令はすくなくとも4つであることを特徴とする請求項13に記載の方法。
  15. 前記プロセッサは、さらにコール/リターンユニットを含み、
    前記コール/リターンユニットは、分岐デコーダによってデコードされて対応するリターン命令がまだ分岐デコーダによってデコードされていないコール命令に関連付けられたリターンアドレスを保持する複数のコール/リターンスタックを有し、
    前記プログラム順の最初のローカル分岐命令がコール/リターン命令である場合、コール/リターンユニットに、複数のコール/リターンスタックのうちの現在のものへ/からのリターンアドレスのプッシュ/ポップを、前記分岐デコーダによって指示するステップを含むことを特徴とする請求項13に記載の方法。
  16. 前記コール/リターンユニットは、さらに前記複数のコール/リターンスタックに対応する複数のカウンタを含み、
    前記複数のカウンタの各カウンタは、前記複数のコール/リターンスタックの対応する1つが前記複数のコール/リターンスタックのうちの現在のものである間において、実行パイプラインによって未解析であって分岐デコーダによってデコードされた非ローカル分岐命令を保持し、
    前記複数のマイクロコード命令内の前記プログラム順の最初のローカル分岐命令に先行する非ローカル分岐命令の数を、前記分岐デコーダによってカウントするステップと、
    前記複数のコール/リターンスタックのうちの現在のものに対応する複数のカウンタのうちの1つに、カウントされた前記数を、前記コール/リターンユニットによって加算するステップと、を含み、
    そのうち、非ローカル分岐命令は、命令トランスレータによってではなく実行パイプラインによって解析されることを特徴とする請求項15に記載の方法。
  17. 前記アドレスに応答してクロックサイクルごとに前記メモリによって提供された前記複数のマイクロコード命令は、N個のマイクロコード命令であり、
    前記メモリは、N個のバンクを含み、前記N個のバンクの各バンクは単一の読み出しポートを有し、
    前記アドレスに応答して前記複数のマイクロコード命令のうちの第1のものを、前記N個のバンクのうちの第1のバンクによって提供するステップと、
    前記アドレスの各インクリメントされたバージョンに応答して、複数のマイクロコード命令のそれぞれ1つを、残りの前記N個のバンクの各バンクによって提供するステップと、を含むことを特徴とする請求項13に記載の方法。
  18. 各クロックサイクルにおいてマイクロコード命令が書き込まれる前記キューの位置を、書き込みポインタによって指すステップと、
    前記キューに書き込まれたマイクロコード命令の数によって各クロックサイクルにおいて書き込みポインタをインクリメントするステップと、をさらに含むことを特徴とする請求項13に記載の方法。
  19. 前記複数のマイクロコードトランスレータがマイクロコード命令を読み出す前記キューの位置を、読み出しポインタによって指すステップと、
    前記複数のマイクロコードトランスレータによって変換されたマイクロコード命令の数によって各クロックサイクルにおいてリードポインタをインクリメントするステップと、をさらに含むことを特徴とする請求項13に記載の方法。
  20. 実行パイプラインが現在命令トランスレータから前記マイクロ命令を受け取ることができなくても前記キューが満杯になるまで前記キューに供給するために前記メモリからマイクロコード命令をフェッチし続けるステップをさらに含むことを特徴とする請求項13に記載の方法。
  21. コンピューティングデバイスと共に使用するための、少なくとも1つの非一時的なコンピュータ使用可能媒体で記録されたコンピュータプログラムであって、
    命令セットアーキテクチャ(ISA)を有するプロセッサを特定するためのプログラムコードを含み、
    記プログラムコードは、
    マイクロ命令を実行する複数の実行ユニットを有する実行パイプラインを指定する第1のプログラムコードと、
    ISAによって定義されたアーキテクチャ命令をマイクロ命令に変換する命令トランスレータを指定する第2のプログラムコードと、を含み、
    前記命令トランスレータは、マイクロコード命令を保持し、アドレスに応答してクロックサイクルごとに複数のマイクロコード命令を提供するメモリと、
    前記メモリによって提供されたマイクロコード命令を保持するキューと、
    前記メモリと前記キューとの間に結合され、所定の分岐命令をローカル分岐命令とし、前記複数のマイクロコード命令のうちの前記実行パイプラインではなく前記命令トランスレータによって解析される1つまたは複数の前記ローカル分岐命令を検出するために前記メモリによって提供された複数のマイクロコード命令をデコードし、前記複数のマイクロコード命令のマイクロコード命令を、その1つまたは複数のローカル分岐命令のプログラム順の最初のローカル分岐命令まで(プログラム順の最初のローカル分岐命令を含まない)を前記キューに書き込ませ、かつ前記複数のマイクロコード命令のプログラム順の最初のローカル分岐命令とそれに続くマイクロコード命令が前記キューに書き込まれることを防止する分岐デコーダと、
    複数のマイクロ命令を実行パイプラインに供給するために、クロックサイクルごとに前記キューから受信した複数のマイクロコード命令を変換する複数のマイクロコードトランスレータと、を含むことを特徴とするコンピュータプログラム。
JP2016223778A 2016-09-30 2016-11-17 ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサ Active JP6856358B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201610875658.6A CN106406814B (zh) 2016-09-30 2016-09-30 处理器和将架构指令转译成微指令的方法
CN201610875658.6 2016-09-30

Publications (2)

Publication Number Publication Date
JP2018060491A JP2018060491A (ja) 2018-04-12
JP6856358B2 true JP6856358B2 (ja) 2021-04-07

Family

ID=57256176

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016223778A Active JP6856358B2 (ja) 2016-09-30 2016-11-17 ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサ

Country Status (6)

Country Link
US (1) US10073698B2 (ja)
EP (1) EP3301566B1 (ja)
JP (1) JP6856358B2 (ja)
KR (1) KR102601858B1 (ja)
CN (1) CN106406814B (ja)
TW (1) TWI621065B (ja)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108228239B (zh) * 2016-12-13 2021-04-20 龙芯中科技术股份有限公司 基于快速模拟器qemu的分支指令抓取方法和装置
US20180203703A1 (en) * 2017-01-13 2018-07-19 Optimum Semiconductor Technologies, Inc. Implementation of register renaming, call-return prediction and prefetch
GB2563384B (en) * 2017-06-07 2019-12-25 Advanced Risc Mach Ltd Programmable instruction buffering
US11467838B2 (en) * 2018-05-22 2022-10-11 Advanced Micro Devices, Inc. Fastpath microcode sequencer
US11016763B2 (en) 2019-03-08 2021-05-25 Advanced Micro Devices, Inc. Implementing a micro-operation cache with compaction
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US10929129B2 (en) * 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11016766B2 (en) 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US10983796B2 (en) 2019-06-29 2021-04-20 Intel Corporation Core-to-core end “offload” instruction(s)
US11030000B2 (en) 2019-06-29 2021-06-08 Intel Corporation Core advertisement of availability
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US11775467B2 (en) * 2021-01-14 2023-10-03 Nxp Usa, Inc. System and method for ordering transactions in system-on-chips
US20220405102A1 (en) * 2021-06-21 2022-12-22 Intel Corporation Count to empty for microarchitectural return predictor security
CN113553102B (zh) * 2021-08-11 2022-07-05 成都海光微电子技术有限公司 微码取指方法、微码存储组合产生方法、装置、设备
CN113961247B (zh) * 2021-09-24 2022-10-11 北京睿芯众核科技有限公司 一种基于risc-v处理器的向量存/取指令执行方法、系统及装置
CN114090077B (zh) * 2021-11-24 2023-01-31 海光信息技术股份有限公司 调取指令的方法及装置、处理装置及存储介质
US11995443B2 (en) * 2022-10-04 2024-05-28 Microsoft Technology Licensing, Llc Reuse of branch information queue entries for multiple instances of predicted control instructions in captured loops in a processor
CN115629807B (zh) * 2022-10-31 2023-04-14 海光信息技术股份有限公司 多线程处理器的译码方法、处理器、芯片及电子设备
CN115525344B (zh) * 2022-10-31 2023-06-27 海光信息技术股份有限公司 一种译码方法、处理器、芯片及电子设备
CN117008977B (zh) * 2023-08-08 2024-03-19 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备
CN118193153A (zh) * 2024-03-07 2024-06-14 海光信息技术股份有限公司 资源分配方法、处理器和电子设备

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5896349A (ja) * 1981-12-02 1983-06-08 Hitachi Ltd マイクロ命令制御のデータ処理装置
WO1997013201A1 (en) * 1995-10-06 1997-04-10 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6094716A (en) * 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6338136B1 (en) * 1999-05-18 2002-01-08 Ip-First, Llc Pairing of load-ALU-store with conditional branch
US6691305B1 (en) * 1999-11-10 2004-02-10 Nec Corporation Object code compression using different schemes for different instruction types
US6766441B2 (en) * 2001-01-19 2004-07-20 International Business Machines Corporation Prefetching instructions in mis-predicted path for low confidence branches
US6968446B1 (en) * 2001-08-09 2005-11-22 Advanced Micro Devices, Inc. Flags handling for system call instructions
US6898697B1 (en) * 2002-03-29 2005-05-24 Advanced Micro Devices, Inc. Efficient method for mode change detection and synchronization
US9977674B2 (en) * 2003-10-14 2018-05-22 Intel Corporation Micro-operation generator for deriving a plurality of single-destination micro-operations from a given predicated instruction
US20090260013A1 (en) * 2008-04-14 2009-10-15 International Business Machines Corporation Computer Processors With Plural, Pipelined Hardware Threads Of Execution
US7802078B2 (en) * 2008-09-09 2010-09-21 Via Technologies, Inc. REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
US7979675B2 (en) * 2009-02-12 2011-07-12 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
US7975132B2 (en) * 2009-03-04 2011-07-05 Via Technologies, Inc. Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor
CN101866279B (zh) * 2009-08-14 2012-05-30 威盛电子股份有限公司 微处理器及其相关方法
CN107832083B (zh) * 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
US8880851B2 (en) * 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
EP2624126B1 (en) * 2011-04-07 2016-11-02 VIA Technologies, Inc. Efficient conditional ALU instruction in read-port limited register file microprocessor
US8959320B2 (en) * 2011-12-07 2015-02-17 Apple Inc. Preventing update training of first predictor with mismatching second predictor for branch instructions with alternating pattern hysteresis
US9898418B2 (en) * 2015-05-21 2018-02-20 Via Alliance Semiconductor Co., Ltd. Processor including single invalidate page instruction

Also Published As

Publication number Publication date
CN106406814A (zh) 2017-02-15
CN106406814B (zh) 2019-06-14
US10073698B2 (en) 2018-09-11
EP3301566A1 (en) 2018-04-04
KR102601858B1 (ko) 2023-11-13
JP2018060491A (ja) 2018-04-12
US20180095753A1 (en) 2018-04-05
KR20180036490A (ko) 2018-04-09
EP3301566B1 (en) 2023-05-10
TWI621065B (zh) 2018-04-11
TW201814501A (zh) 2018-04-16

Similar Documents

Publication Publication Date Title
JP6856358B2 (ja) ローカル分岐デコーダを有するマルチ発行マイクロコードユニットを備えたパイプラインプロセッサ
US9213551B2 (en) Return address prediction in multithreaded processors
EP2707794B1 (en) Suppression of control transfer instructions on incorrect speculative execution paths
US7437537B2 (en) Methods and apparatus for predicting unaligned memory access
US8429636B2 (en) Handling dependency conditions between machine instructions
US6907520B2 (en) Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US20160055004A1 (en) Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US10338928B2 (en) Utilizing a stack head register with a call return stack for each instruction fetch
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
US20120290821A1 (en) Low-latency branch target cache
US20130024647A1 (en) Cache backed vector registers
KR102702317B1 (ko) 보안 멀티쓰레딩 실행을 위한 파이프라인들
US20130138888A1 (en) Storing a target address of a control transfer instruction in an instruction field
TWI613590B (zh) 處理器流水線中的靈活的指令執行
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
US7373489B1 (en) Apparatus and method for floating-point exception prediction and recovery
US12019553B2 (en) System, apparatus and method for prefetching physical pages in a processor
WO2022026578A1 (en) Method and apparatus for back end gather/scatter memory coalescing
US8504805B2 (en) Processor operating mode for mitigating dependency conditions between instructions having different operand sizes
WO2022026560A1 (en) Method and apparatus for front end gather/scatter memory coalescing
JP2001356905A (ja) スタックに基づいたパイプライン型プロセッサにおけるレジスタ依存性を取扱うシステム及び方法
US11842198B1 (en) Managing out-of-order retirement of instructions based on received instructions indicating start or stop to out-of-order retirement
JP2023047283A (ja) クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路
Wu Architecture of out of order TURBO51 embedded microprocessor

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190613

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20191107

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20191113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200722

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200901

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20201027

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: 20210309

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20210318

R150 Certificate of patent or registration of utility model

Ref document number: 6856358

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250