JP3708022B2 - プロセッサ - Google Patents
プロセッサ Download PDFInfo
- Publication number
- JP3708022B2 JP3708022B2 JP2001006278A JP2001006278A JP3708022B2 JP 3708022 B2 JP3708022 B2 JP 3708022B2 JP 2001006278 A JP2001006278 A JP 2001006278A JP 2001006278 A JP2001006278 A JP 2001006278A JP 3708022 B2 JP3708022 B2 JP 3708022B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- operand
- stage
- branch
- register
- 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 - Fee Related
Links
- 230000007274 generation of a signal involved in cell-cell signaling Effects 0.000 claims description 17
- 238000010586 diagram Methods 0.000 description 21
- 238000000034 method Methods 0.000 description 8
- FMNZAHDAULEOSO-UHFFFAOYSA-N 2,2-dibromo-2-nitroethanol Chemical compound OCC(Br)(Br)[N+]([O-])=O FMNZAHDAULEOSO-UHFFFAOYSA-N 0.000 description 2
- 102000000532 Methionine Sulfoxide Reductases Human genes 0.000 description 1
- 108010041559 Methionine Sulfoxide Reductases Proteins 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000001343 mnemonic effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
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
【発明の属する技術分野】
本発明はプロセッサに関し、特に、パイプライン処理を行う際にデータバイパスをするプロセッサに関する。
【0002】
【従来の技術】
図8は、従来のプロセッサの内部構造を示す図であり、図9は、図8に示したプロセッサの各パイプラインにおけるパイプラインステージを示す図である。
【0003】
図9に示すように、図8のプロセッサは、5段階のパイプラインステージを有している。すなわち、演算命令をフェッチするステージである「Iステージ」と、命令をデコードしてレジスタファイルからレジスタを読み出す「Rステージ」と、演算を行う「Aステージ」と、データキャッシュをアクセスする「Dステージ」と、レジスタファイルに演算結果をライトバックする「Wステージ」とを、有している。このプロセッサにおいては、「Aステージ」で、命令の演算の他に、条件分岐命令の条件を判定して、分岐が成立するか、成立しないかの判断を行う。
【0004】
図8に示すように、プロセッサは、主として、命令フェッチユニット110と、レジスタファイル120と、バイパスセレクトロジック回路130と、2つのパイプライン140、150と、レジスタRG101〜RG106とを、備えて構成されている。
【0005】
2つのパイプライン140、150で演算ユニットが構成されている。これら2つのパイプライン140、150では、同時に命令の実行可能である。すなわち、このプロセッサは、2ウェイのスーパースカラープロセッサ(2 way supperscalar processer)である。
【0006】
この図8の例では、パイプライン140が、ALU142と、レジスタRG110〜113と、バイパスマルチプレクサ144、146とを、備えており、ALU演算命令を実行する。また、パイプライン150が、ブランチユニット152と、レジスタRG120〜RG122と、バイパスマルチプレクサ154、156とを、備えており、分岐命令の実行する。ここでは、簡単のためにこれらALU142とブランチユニット152のみを示しているが、各パイプライン140、150は他の演算装置も備えている。
【0007】
命令フェッチユニット110は、「Iステージ」において、命令キャッシュメモリ(図示省略)から演算命令を読み出し、この演算命令の種類を判断した上で、実行可能な命令を演算ユニットに送出する。すなわち、命令フェッチユニット110は、演算命令をフェッチして、演算命令の命令部分とオペランド部分とに分離する。この図8には示していないが、演算命令の命令部分の種類に基づいて、ALU命令はALU142を有するパイプライン140に送出し、条件分岐命令はブランチユニット152を有するパイプライン150に送出する。
【0008】
一方、命令フェッチユニット110は、演算命令のオペランド部分のうち、ソースオペランド番号Rs0R、Rt0R、Rs1R、Rt1Rは、レジスタファイル120に出力する。つまり、ソースオペランド番号Rs0R、Rt0Rは、パイプライン140に発行される命令のソースオペランドの番号であり、ソースオペランドRs1R、Rt1Rは、パイプライン150に発行される命令のソースオペランドの番号である。
【0009】
また、命令フェッチユニット110は、演算命令のオペランド部分のうち、ディスティネーションオペランド番号Rd0Rを、レジスタRG101に出力する。このディスティネーションオペランド番号Rd0Rは、パイプライン140に発行される命令のディスティネーションオペランドの番号を示している。これらソースオペランド番号Rs0R、Rt0R、Rs1R、Rt1Rと、ディスティネーションオペランド番号Rd0Rは、5ビットの信号である。つまり、このプロセッサには、32個のレジスタが存在することを想定している。
【0010】
このため、命令ニーモニックは、次のように書き表すことができる。
【0011】
Add Rd、Rs、Rt
なお、本件明細書において、各種信号を示す符号の末尾は、その信号が到達しているステージを示すこととする。例えば、「Rステージ」にあるディスティネーションオペランド番号Rd0Rが、「Aステージ」に到達するとディスティネーションオペランド番号Rd0Aになる。
【0012】
命令フェッチユニット110は、ブランチディレイスロット情報BDS0Rと、命令有効情報Valid1Rとを、出力する。ブランチディレイスロット情報BDS0Rは、パイプライン140の命令が、ブランチライクリー命令のブランチディレイスロット(branch delay slot)の命令であるか否かを示す信号である。ブランチディレイスロットとは、命令列において、ブランチライクリー命令の直後に位置する命令のことである。この図8の例では、条件分岐命令直後の命令スロットである場合に、ブランチディレイスロット情報BDS0Rが1になり、それ以外の場合に0になる。また、この命令セットアーキテクチャ(ISA)では、ブランチディレイスロットにある1命令は、直前の条件分岐命令の条件が成立したかどうかに関わらず原則として実行される。つまり、通常の条件分岐命令の直後の命令は、無条件で実行される。但し、この命令セットアーキテクチャでは、ブランチライクリー命令の場合は、条件が成立しないときはブランチディレイスロットの命令を実行せず、条件が成立したときはブランチディレイスロットの命令を実行する。
【0013】
通常の条件分岐命令の命令例の一例を図10に示す。この図10において、Add命令は、レジスタr2の内容とレジスタr3の内容を加算して、レジスタr1に格納するという命令である。BNE命令は、レジスタRsの内容とレジスタRtの内容が異なるときに、分岐が成立するという命令である。すなわち、(レジスタr1の内容)≠(レジスタr2の内容)のとき、BNE命令で分岐が成立してLoopのラベルのあるAdd命令に処理が戻る。ところが、ブランチディレイスロットにあるSub命令は、分岐が成立したとしても、実行される。すなわち、命令実行順序は次のようになる。
【0014】
Add → … → BNE → Sub → Add
一方、分岐命令が不成立のときには、そのままシーケンシャルに命令列が実行されるので、命令実行順序は次のようになる。
【0015】
Add → … → BNE → Sub → lw
ここで、Sub命令はレジスタr4の内容からレジスタr5の内容を減算して、レジスタr3に格納するという命令である。また、lw命令はレジスタr6の内容に、(0+レジスタr7の内容)で特定されるメモリアドレスのデータをロードするという命令である。
【0016】
以上が、通常の条件分岐命令の実行列であるが、次に、ブランチライクリー命令の実行列を説明する。図11は、ブランチライクリー命令の実行列の一例を示す図である。このブランチライクリー命令は、上述したように、分岐が成立したときはブランチディレイスロットの命令を実行し、分岐が成立しないときはブランチディレイスロットの命令は実行しないような命令である。
【0017】
図11に示すBNEL命令は、Rt≠Rs、つまり、(レジスタr1の内容)≠(レジスタr2の内容)のときは、BNEL命令で分岐が成立し、Loopのラベルに戻り、Add命令が実行される。また、ブランチディレイスロットにあるSub命令は、分岐が成立したときは実行される。このため、命令実行順序は次のようになる。
【0018】
Add → … → BNEL → Sub → Add
一方、ブランチライクリー命令においては、分岐が不成立のときは、ブランチディレイスロットは実行されない。このため、命令実行順序は次のようになる。
【0019】
Add → … → BNEL → lw
このように、ブランチライクリー命令は、分岐不成立のときの処理が通常の条件分岐命令とは異なり、ブランチディレイスロットにある命令が実行されない。
【0020】
再び図8に説明を戻す。「Rステージ」で命令フェッチユニット110から送出された4つのソースオペランド番号Rs0R、Rt0R、Rs1R、Rt1Rは、レジスタファイル120に入力される。そして、このレジスタファイル120において、これらソースオペランド番号Rs0R、Rt0R、Rs1R、Rt1Rに対応するレジスタの内容が読み出される。つまり、各レジスタに格納されているデータ内容が読み出され、このデータがソースオペランドとなる。
【0021】
この例では、ソースオペランドは64ビットのデータであり、この読み出されたデータが、レジスタRG110、111、120、121に保持されて、次の「Aステージ」に送られる。
【0022】
「Aステージ」のパイプライン140においては、データバイパスが起きなければ、レジスタファイル120から読み出されたソースオペランドがALU142に転送されて、演算が行われる。ここで、データバイパスとは次のような場合に起きる。
【0023】
すなわち、データ依存関係のある命令が近接していると、前の演算結果がレジスタファイル120にライトバックされる前に、データ依存関係のある次の命令が実行されてしまう。このため、前の演算結果を、レジスタファイル120を介さずに、直接、バイパスマルチプレクサ144、146、154、156にバイパスする必要がある。図12は、このようなデータ依存関係のある命令が近接している命令列の一例を示す図である。
【0024】
この図12においては、Add命令の結果がレジスタr1に格納されるが、このレジスタr1がSub命令のソースオペランドとして使用されている。このように2つの命令が近接している場合、Add命令の結果は、「Dステージ」からSub命令の「Aステージ」に、内部のバイパスDAを使用して供給する必要がある。これを、「Dステージ」から「Aステージ」へのデータバイパスという。同様の理由により、「Wステージ」から「Aステージ」にバイパスWAを使用して、データバイパスをする必要が生ずる場合もある。
【0025】
ALU142における演算が終了すると、演算結果はDステージのレジスタRG112に格納される。「Dステージ」では、この図では示していないが、データキャッシュメモリのアクセスが行われる。このため、ALU142の演算結果は、レジスタファイル120への書き込みタイミングをそろえるために、単に「Dステージ」の間、このレジスタRG112に演算結果が保持される。そして、次のサイクルで「Wステージ」のレジスタRG113に格納されて、レジスタファイル120にライトバックされる。
【0026】
ブランチユニット152を有するパイプライン150では、BNE命令、BEQ命令、BNEL命令、BEQL命令の処理を行う。
【0027】
BNE命令は通常の条件分岐命令であり、2つのソースオペランドが等しくないとき、分岐が成立する。BEQ命令も通常の条件分岐命令であり、2つのソースオペランドが等しいとき、分岐が成立する。BNEL命令はブランチライクリー命令であり、2つのソースオペランドが等しくないとき、分岐が成立する。BEQL命令もブランチライクリー命令であり、2つのソースオペランドが等いとき、分岐が成立する。
【0028】
図13は、ブランチユニット152の内部構成を示す図である。この図13に示すように、「Aステージ」におけるブランチユニット152には、バイパスマルチプレクサ154からオペランドP1RsAが入力され、バイパスマルチプレクサ156からオペランドP1RtAが入力される。上述したように、これらのオペランドP1RsA、P1RtAは、64ビットのデータである。
【0029】
ブランチユニット152に入力されたオペランドP1RsA、P1RtAは、比較ロジック160に入力され、全ビット比較が行われる。そして、この比較ロジック160は、オペランドP1RsAとオペランドP1RtAとが等しい場合には1を出力し、等しくない場合には0を出力する。
【0030】
この比較ロジック160の出力は、反転した上でAND回路161に入力され、また、そのまま反転せずにAND回路162に入力される。このAND回路161にはデコードBNE信号DBNEも入力され、AND回路162にはデコードBEQ信号DBEQも入力される。デコードBNE信号DBNEは、BNE命令又はBNEL命令が「Aステージ」に到達した際に1になる信号であり、デコードBEQ信号DBEQは、BEQ命令又はBEQL命令が「Aステージ」に到達した際に1になる信号である。
【0031】
これらAND回路161とAND回路162の出力は、OR回路163に入力される。さらに、このOR回路163の出力は、NAND回路164に入力される。このNAND回路164には、命令有効情報Valid1Aも入力される。この命令有効情報Valid1Aは、有効な命令がパイプライン150の「Aステージ」に到達したことを示す信号である。図8に示すように、この命令有効情報Valid1Aは、「Rステージ」において、命令フェッチユニット110が命令とともにレジスタRG103に出力する。これが、パイプラインステージに沿って、「Aステージ」のレジスタ104まで転送された信号である。
【0032】
NAND回路164の出力が分岐条件不成立信号NTknAとなり、このブランチユニット152の出力となる。図13に示すように、ブランチユニット152が構成されているので、オペランドP1RsAとオペランドP1RtAとが等しく、且つ、命令がBEQ命令又はBEQL命令である場合に、分岐が成立するので、分岐条件不成立信号NTknAは0になる。また、オペランドP1RsAとオペランドP1RtAとが等しくなく、且つ、命令がBNE命令又はBNEL命令である場合に、分岐が成立するので、分岐条件不成立信号NTknAは0になる。これら2つの場合以外は、この分岐条件不成立信号NTknAは1になる。
【0033】
図8に示すバイパスセレクトロジック回路130は、パイプライン140にあるバイパスマルチプレクサ144、146と、パイプライン150にあるバイパスマルチプレクサ154、156の制御を行う。この制御は、ALU142とブランチユニット152へ、正しいオペランドを転送するために行われる。
【0034】
具体的には、バイパスセレクトロジック回路130は、4つのセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成し、バイパスマルチプレクサ144、146、154、156のそれぞれに供給する。これらセレクト信号SelRs0、SelRt0、SelRs1、SelRt1は、ワン・ホット(one-hot)の3ビット信号であり、3ビットの信号のうち1ビットが1になる信号である。
【0035】
この例では、ビット0が1の場合には、バイパスマルチプレクサ144、146、154、156は、「Dステージ」からのバイパスDAからのオペランドを選択して出力する。ビット1が1の場合には、バイパスマルチプレクサ144、146、154、156は、「Wステージ」からのバイパスWAからのオペランドを選択して出力する。ビット2が1の場合には、バイパスマルチプレクサ144、146、154、156は、レジスタファイル120からのオペランドを選択して出力する。
【0036】
セレクト信号SelRt0を例にバイパスセレクトロジック回路130の動作を説明すると、このセレクト信号SelRt0は、データバイパスをしようとするサイクルの前のサイクルで生成し、これをフリップフロップでラッチした上で、バイパスマルチプレクサ144に供給する必要がある。これは、一般的に、パイプラインの「Aステージ」は、ALU142等の演算器が動作するステージであるため、動作タイミングが最も長くなるステージである場合が多い。このため、ALU142等に与えるオペランドは、なるべく早いタイミングで確定しておく必要がある。このためには、バイパスマルチプレクサ144のオペランドも可能な限り早いタイミングで通過させなければならず、バイパスマルチプレクサ144に与えるセレクト信号SelRt0はそれよりも早いタイミングで確定させなければならない。したがって、通常、セレクト信号SelRt0は、「Aステージ」の前のステージである「Rステージ」で生成しておく必要がある。
【0037】
図14は、バイパスセレクトロジック回路130の内部構成の一例を示す図である。この図14に示すように、バイパスセレクトロジック回路130は、4個のセレクト信号生成回路132A〜132Dを備えて構成されている。これらセレクト信号生成回路132A〜132Dが、それぞれ、セレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成する。
【0038】
各セレクト信号生成回路132A〜132Dは、同様の構成をしている。例えば、セレクト信号生成回路132Aは、比較ロジック172、174と、AND回路176、178、180、182と、インバータ回路184、186とを、備えて構成されている。
【0039】
このセレクト信号生成回路132Aの動作を、「Dステージ」から「Aステージ」へのデータバイパスが生じる場合を例に説明する。このように「Dステージ」から「Aステージ」へのデータバイパスが生じる場合の命令列としては、例えば、上述した図12に示すような命令列が挙げられる。
【0040】
この図12の例の場合、第4サイクルにおいて、Add命令の演算結果が「Dステージ」から「Aステージ」にバイパスされる必要がある。このためには、1つ前のサイクルである第3サイクルで、そのためのセレクト信号SelRs0を生成しておく必要がある。
【0041】
第3サイクルで、Add命令とSub命令との間のデータ依存性を検出するために、図14に示すように、「Aステージ」に到達したAdd命令のディスティネーションオペランド番号Rd0Aと、「Rステージ」に到達したSub命令のソースオペランド番号Rs0Rとが、比較ロジック172で比較される。この比較ロジック172は、これらディスティネーションオペランド番号Rd0Aとソースオペランド番号Rs0Rとが一致する場合に1を出力し、一致しない場合に0を出力する。この例の場合、ディスティネーションオペランド番号Rd0Aとソースオペランド番号Rs0Rとが一致するので、比較ロジック172は1を出力する。このため、AND回路176の一方の入力が1となる。
【0042】
AND回路176の他方の入力には、ブランチディレイスロット情報BDS0Rと分岐条件不成立信号NTknAのNANDをとったNAND回路190からの信号が、入力される。つまり、「Aステージ」の命令がブランチライクリー命令の次の命令であり、且つ、このブランチライクリー命令が条件不成立の場合に、このNAND回路190の出力が0になる。この例では、Add命令は、ブランチディレイスロットではないため、NAND回路190の出力は1になる。よって、AND回路176の出力は1となり、セレクト信号SelRs0のビット0が1となる。一方、AND回路176における1の出力は、インバータ回路184を介して、AND回路180、182に入力されるので、AND回路180、182の出力は0になり、セレクト信号SelRs0のビット1、ビット2が0になる。このセレクト信号SelRs0は、フリップフロップ192Aにラッチされる。
【0043】
このフリップフロップ192Aにラッチされたセレクト信号SelRs0は、次のサイクルでバイパスマルチプレクサ144に入力される。このセレクト信号SelRs0に基づいて、バイパスマルチプレクサ144は、「Dステージ」からのバイパスDAから入力されたオペランドを選択して、ALU142に出力する。
【0044】
次に、ブランチディレイスロットの命令が、キャンセルされて「Dステージ」から「Aステージ」へのデータバイパスが生じないケースを説明する。図15は、このようなケースが発生する命令列の一例を示す図である。
【0045】
この図15に示す例では、Add命令のレジスタr1とAND命令のレジスタr1とが一致している。また、Add命令は、命令列においてブランチライクリー命令であるBNEL命令の次の命令である。さらに、ここでは、このBNEL命令については、分岐が成立しないと予測しているものとする。このため、命令列においてAdd命令の次の命令であるAND命令を、投機的に実行する。このような場合に、予測が当たって、BNEL命令の条件が成立しなかった場合には、ブランチディレイスロットに位置するAdd命令はキャンセルされるため、Add命令からAND命令へのデータバイパスは行われない。すなわち、第4サイクルにおいて、バイパスマルチプレクサ144は、レジスタファイルRG110から入力されたソースオペランドを、ALU142に出力する。
【0046】
【発明が解決しようとする課題】
しかしながら、上述したプロセッサにおいては、バイパスセレクトロジック回路130の処理時間が長いため、プロセッサの動作周波数を低下させるという問題があった。なぜなら、図13に示したように、条件分岐命令の分岐が成立するかどうかの判断は、ブランチユニット152においてオペランドRsとオペランドRtとを全64ビット比較して決めなければならず、これが「Aステージ」の終わり近くにならないと決まらないからである。
【0047】
このことを図16に基づいて、詳しく説明する。この図16は、図15に示したようにBNEL命令とAND命令とが連続するサイクルに位置する場合における分岐条件不成立信号NTknAとセレクト信号SelRs0の動作タイミングを説明する図である。
【0048】
この図16に示すように、BNEL命令の「Aステージ」の前半でバイパスマルチプレクサ154、156が動作し、ブランチユニット152に入力されるオペランドが確定する。その後、このブランチユニット152で64ビットのオペランドの全ビット比較が行われる。このため、比較結果である分岐条件不成立信号NTknAが確定するのは、「Aステージ」の終わり頃になる。上述したように、バイパスセレクトロジック回路130では、この分岐条件不成立信号NTknAを用いてセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成するので、これらセレクト信号SelRs0、SelRt0、SelRs1、SelRt1の生成はさらに遅いタイミングになってしまう。
【0049】
一般的に、パイプライン処理におけるサイクルタイムは、「Aステージ」でのALU演算がちょうど終了する程度の時間に設定するのが、最適である。すなわち、このように設定した場合に、動作周波数とハードウェアの効率が最も良くなる。
【0050】
しかし、ALU142の処理に必要な時間と、ブランチユニット152の処理に必要な時間とは、ほぼ同じ程度である。また、ALU142にオペランドが与えられるタイミングと、ブランチユニット152にオペランドが与えられるタイミングも、ほぼ同じである。このため、この比較結果である分岐条件不成立信号NTknAを用いるバイパスセレクトロジック回路130に残された時間は、ほとんどないことになってしまう。このため、バイパスセレクトロジック回路130が、プロセッサの動作周波数を低下させるボトルネックになってしまうという問題があった。
【0051】
そこで、本発明は上記課題に鑑みてなされたものであり、バイパスセレクトロジック回路がプロセッサの動作周波数を決定する上でのボトルネックとならないようにすることを目的とする。そして、これにより、動作周波数の高いプロセッサを提供することを目的とする。
【0052】
【課題を解決するための手段】
上記課題を解決するため、本発明に係るプロセッサは、複数のステージを持つパイプライン処理を実行するプロセッサであって、演算命令をフェッチして、この演算命令のソースオペランド番号とディスティネーションオペランド番号とを出力する命令フェッチユニットであって、前記演算命令が条件分岐命令である場合には、前記条件分岐命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記ソースオペランド番号に対応するソースオペランドを出力する、レジスタファイルと、バイパスマルチプレクサと演算装置とを少なくとも有する第1パイプラインであって、前記バイパスマルチプレクサには、前記演算装置の演算結果である演算結果オペランドと前記レジスタファイルから出力された前記ソースオペランドが入力され、前記演算結果オペランドと前記ソースオペランドのうちの一方をセレクト信号に基づいて選択して前記演算装置に出力する、第1パイプラインと、前記分岐命令の条件が成立したか否かを判断するブランチユニットを少なくとも有する第2パイプラインと、少なくとも前記予測結果情報を用いて、前記セレクト信号を生成するバイパスセレクトロジック回路と、を備えることを特徴とする。
【0053】
また、本発明に係るプロセッサは、第1ステージから第5ステージの5つのステージとを少なくとも有するパイプライン処理を行うとともに、命令セットアーキテクチャとして、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立したか否かに関わらず実行する通常の条件分岐命令と、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立した場合にのみ実行するブランチライクリー命令とを少なくとも有する、プロセッサであって、前記第1ステージにおいて、少なくとも2つの演算命令をフェッチして、各演算命令につき1つ又は2つのソースオペランド番号と1つのディスティネーションオペランド番号とをそれぞれ出力する命令フェッチユニットであって、前記演算命令の1つがブランチライクリー命令である場合には、前記ブランチライクリー命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記第2ステージにおいて、前記各ソースオペランド番号に対応するソースオペランドをそれぞれ出力する、レジスタファイルと、前記第4ステージに到達した演算結果オペランドである第1演算結果オペランドと、前記第5ステージに到達した演算結果オペランドである第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち1の前記演算命令に対する1の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記1の演算命令に対する前記1のソースオペランドとのうちの1つを第1セレクト信号に基づいて選択して第1演算オペランドとして出力する、第1バイパスマルチプレクサと、前記第4ステージに到達した前記第1演算結果オペランドと、前記第5ステージに到達した前記第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち前記1の演算命令に対する他の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記1の演算命令に対する前記他のソースオペランドとのうちの1つを第2セレクト信号に基づいて選択して第2演算オペランドとして出力する、第2バイパスマルチプレクサと、前記第1演算オペランドと前記第2演算オペランドとが入力され、前記第3ステージにおいて、前記第1演算オペランドと前記第2演算オペランドに基づいて演算を行い、その演算結果を前記演算結果オペランドとして出力する演算装置と、前記第4ステージに到達した第1演算結果オペランドと、前記第5ステージに到達した第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する1の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記他の演算命令に対する前記1のソースオペランドとのうちの1つを第3セレクト信号に基づいて選択して第1比較オペランドとして出力する、第3バイパスマルチプレクサと、前記第4ステージに到達した第1演算結果オペランドと、前記第5ステージに到達した第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する他の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記他の演算命令に対する前記他のソースオペランドとのうちの1つを第4セレクト信号に基づいて選択して第2比較オペランドとして出力する、第4バイパスマルチプレクサと、前記第3ステージにおいて、前記第1比較オペランドと前記第2比較オペランドとが入力され、前記第1比較オペランドと前記第2比較オペランドとを比較して、前記分岐命令の条件が成立したか否かを判断するブランチユニットと、前記第2ステージにおいて、少なくとも前記予測結果情報を用いて、前記第1乃至第4セレクト信号を生成するバイパスセレクトロジック回路と、を備えることを特徴とする。
【0054】
【発明の実施の形態】
図1は、本発明の一実施形態に係るプロセッサの内部構成を示す図である。この図1に示すように、本実施形態に係るプロセッサは、主として、命令フェッチユニット10と、レジスタファイル20と、バイパスセレクトロジック回路30と、第1パイプライン40と、第2パイプライン50と、レジスタRG1〜RG8とを備えて構成されている。
【0055】
さらに、第1パイプライン40は、レジスタRG10〜RG13と、ALU42と、バイパスマルチプレクサ44、46とを、備えて構成されている。第2パイプライン50は、レジスタRG20〜RG22と、ブランチユニット52と、バイパスマルチプレクサ54、56とを、備えて構成されている。
【0056】
本実施形態におけるプロセッサは、次の3つの点を主たる特徴としている。
【0057】
(a)命令フェッチユニット10が命令をフェッチした段階で、条件分岐命令である場合には、その条件分岐命令の条件が成立するかどうかを予測する。そして、この予測した結果である予測結果フラグPrdNTkn1Rを出力する。また、命令フェッチユニット10は、この分岐予測結果に基づき、分岐命令以後の命令をパイプライン40、50に供給する。
【0058】
(b)この予測結果フラグPrdNTkn1Rを、条件分岐命令の命令部分やソースオペランド部分と同期させて、「Aステージ」、「Dステージ」まで転送し、それぞれレジスタRG7、RG8に格納する。これがそれぞれ、予測結果フラグPrdNTkn1A、PrdNTkn1Dとなる。
【0059】
(c)バイパスセレクトロジック回路30は、ブランチユニット52が出力する実際の分岐条件不成立信号NTknAではなく、分岐を予測した結果である予測結果フラグPrdNTkn1A、PrdNTkn1Dを使用して、セレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成する。
【0060】
具体的に説明すると、命令フェッチユニット10は、「Rステージ」において、条件分岐命令をフェッチした場合には、ブランチユニット51を有する第2パイプライン50に、この条件分岐命令の命令部分とソースオペランド部分とを発行する。このとき、命令フェッチユニット10は、発行した条件分岐命令の分岐条件が成立するか又は成立しないかを予測する。その予測方法は問わないが、例えば、この条件分岐命令における過去の条件成立/不成立の履歴を保持しておき、回数の多い方を予測結果として用いるというような方法が挙げられる。
【0061】
図2は、図1におけるバイパスセレクトロジック回路30の内部構成を示す図である。この図2に示すように、バイパスセレクトロジック回路30は、セレクト信号生成回路32A〜32Dと、NAND回路34、36と、フリップフロップ38A〜38Dとを、備えて構成されている。
【0062】
NAND回路34には、レジスタRG5に格納されているブランチディレイスロット情報BDS0Aと、レジスタRG7に格納されている予測結果フラグPrdNTkn1Aとが、入力される。つまり、「Aステージ」に到達したブランチディレイスロット情報BDS0Aと予測結果フラグPrdNTkn1Aとが、入力される。このNAND回路34の出力は、セレクト信号生成回路32A〜32Dのぞれぞれに入力される。
【0063】
NAND回路36には、レジスタRG6に格納されているブランチディレイスロット情報BDS0Dと、レジスタRG8に格納されている予測結果フラグPrdNTkn1Dとが、入力される。つまり、「Dステージ」に到達したブランチディレイスロット情報BDS0Dと予測結果フラグPrdNTkn1Dとが、入力される。このNAND回路36の出力も、セレクト信号生成回路32A〜32Dのぞれぞれに入力される。
【0064】
このように、バイパスセレクトロジック回路30が、バイパスマルチプレクサ44、46、54、56を切り替えるのに用いるセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成するのにあたり、予測結果フラグPrdNTkn1A、PrdNTkn1Dを使用することが、本実施形態の特徴的な部分の1つである。
【0065】
セレクト信号生成回路32A〜32Dはそれぞれ同様の内部構成をしている。セレクト信号生成回路32Aを例に説明すると、このセレクト信号生成回路32Aは、比較ロジック72、74と、AND回路76、78、80、82と、インバータ回路84、86とを、備えて構成されている。
【0066】
次に、これら図1及び図2に示したプロセッサにおけるデータバイパスの動作を、(1)ブランチライクリー命令の分岐が成立すると予測した場合、(2)ブランチライクリー命令の分岐が成立しないと予測した場合、(3)条件分岐命令でない通常命令で「Dステージ」から「Aステージ」へのバイパスが発生する場合、(4)分岐命令でない通常命令で「Wステージ」から「Aステージ」へのバイパスが発生する場合、(5)バイパスが発生せずにレジスタファイル20からのソースオペランドが選択される場合、とに分けて説明する。
【0067】
(1)ブランチライクリー命令の分岐が成立すると予測した場合
命令フェッチユニット10がブランチライクリー命令の条件分岐命令をフェッチし、分岐が成立すると予測した場合には、この条件分岐命令を第2パイプライン50に発行するとともに、0の予測結果フラグPrdNTkn1Rを出力する。すなわち、本実施形態においては、分岐が成立すると予測した場合に、予測結果フラグPrdNTkn1Rを0にし、分岐が成立しないと予測した場合に、予測結果フラグPrdNTkn1Rを1にする。また、本実施形態においては、この予測結果フラグPrdNTkn1Rを1にするのは、ブランチライクリー命令において分岐が成立しないと予測した場合であるが、通常の条件分岐命令において分岐が成立しないと予測した場合にも予測結果フラグPrdNTkn1Rを1にするようにしてもよい。
【0068】
例えば、図3に示すような命令列を、このプロセッサで処理するとする。この図3に示す命令列を分岐が成立するとした予測の下、ブランチライクリー命令であるBNEL命令以降の命令を、このプロセッサで処理すると、図4に示すようなパイプライン処理が行われる。
【0069】
この図4に示すように、命令フェッチユニット10は、第1サイクルで、BNEL命令とAdd命令とをフェッチし、第2サイクルで、BNEL命令を第2パイプライン50に発行し、Add命令を第1パイプライン40に発行する。また、ここではBNEL命令の分岐条件が成立すると予測したので、第2サイクルで、予測結果フラグPrdNTkn1Rを0にして、レジスタRG7に出力する。
【0070】
また、分岐が成立すると予測したので、分岐飛び先の命令であるターゲット命令をパイプラインに投入する。すなわち、この第2サイクルでは、命令フェッチユニット10は、ターゲット命令であるSub命令を第1パイプライン40に発行する。
【0071】
第3サイクルにおいては、BNEL命令とAdd命令とは、「Aステージ」に到達しており、ターゲット命令であるSub命令は「Rステージ」に到達している。Add命令からSub命令へのバイパスは第4サイクルで発生するため、この第3サイクルにおいてデータバイパスをするか否かを決定しておく必要がある。つまり、この第3サイクルで、バイパスセレクトロジック回路30は、セレクト信号SelRs0、SelRt0、SelRs1、SelRt1を確定しておく必要がある。
【0072】
図2に基づいて、セレクト信号SelRs0の生成過程を詳細に説明すると、この例では、セレクト信号生成回路32Aの比較ロジック72において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Aとが比較される。ここでは、「Rステージ」にあるソースオペランド番号Rs0Rと「Aステージ」にあるディスティネーションオペランド番号Rd0Aとは、ともにレジスタr1で等しいので、この比較ロジック72の出力は1になる。つまり、Add命令とSub命令との間に、レジスタr1について依存関係があることが検出される。また、上述したように予測結果フラグPrdNTkn1Aが0であるので、NAND回路34の出力も1になる。このように比較ロジックの出力が1であり、且つ、NAND回路34の出力も1であるので、AND回路76の出力が1になる。したがって、フリップフロップ38Aのビット0に1が格納される。
【0073】
一方、AND回路76の出力が1であるので、AND回路80、82の一方の入力は0になり、このため、AND回路80、82の出力は0になる。したがって、フリップフロップ38Aのビット1、ビット2には、0が格納される。これにより、セレクト信号SelRs0が生成され、次の第4サイクルで、フリップフロップ38Aからバイパスマルチプレクサ44に供給される。このビット0が1のセレクト信号SelRs0の供給を受けたバイパスマルチプレクサ44は、バイパスDAから入力されているオペランドを選択してALU42に出力する。つまり、これにより、第4サイクルで、「Dステージ」から「Aステージ」へのデータバイパスが行われる。
【0074】
すなわち、命令フェッチユニット10は、BNEL命令の分岐は成立すると予測した。この予測が正しいとすると、ブランチディレイスロットのAdd命令はキャンセルされないと予測される。このため、Add命令から次の命令であるSub命令へのデータバイパスが行われるように、バイパスセレクトロジック回路30がセレクト信号SelRs0を生成したことになる。
【0075】
この分岐予測が当たった場合には、このプロセッサはそのまま処理を続行する。予測がはずれた場合には、分岐が不成立であったことになるので、ブランチライクリー命令の次の命令は、そもそも実行されない。つまり、ブランチディレイスロットにあるAdd命令は実行されない命令になる。したがって、Add命令がキャンセルされる。また、分岐が不成立であったので、その次のターゲット命令であるSub命令もキャンセルされる。このため、データバイパスが間違っていても、何らの問題も生じない。
【0076】
(2)ブランチライクリー命令の分岐が成立しないと予測した場合
命令フェッチユニット10がブランチライクリー命令の条件分岐命令をフェッチし、分岐が成立しないと予測した場合には、この条件分岐命令を第2パイプライン50に発行するとともに、1の予測結果フラグPrdNTkn1Rを出力する。
【0077】
例えば、上述した図3に示すような命令列を、このプロセッサで処理するとする。この図3に示す命令列を分岐が成立しないとした予測の下、ブランチライクリー命令であるBNEL命令以降の命令を、このプロセッサで処理すると、図5に示すようなパイプライン処理が行われる。
【0078】
この図5に示すように、命令フェッチユニット10は、第1サイクルで、BNEL命令とAdd命令とをフェッチし、第2サイクルで、BNEL命令を第2パイプライン50を発行し、Add命令を第1パイプライン40に発行する。また、ここではBNEL命令の分岐条件が成立しないと予測したので、第2サイクルで、予測結果フラグPrdNTkn1Rを1にして、レジスタRG7に出力する。
【0079】
また、分岐が成立しないと予測したので、さらにその次の命令であるシーケンシャル命令をパイプラインに投入する。すなわち、この第2サイクルでは、命令フェッチユニット10は、Add命令の次の命令であるAND命令を第1パイプライン40に発行する。
【0080】
第3サイクルにおいては、BNEL命令とAdd命令とは、「Aステージ」に到達しており、シーケンシャル命令であるAND命令は「Rステージ」に到達している。Add命令からAND命令へのバイパスは第4サイクルで発生するため、この第3サイクルにおいてデータバイパスをするか否かを決定しておく必要がある。つまり、この第3サイクルで、バイパスセレクトロジック回路30はセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を確定しておく必要がある。
【0081】
図2に基づいて、セレクト信号SelRs0の生成過程を詳細に説明すると、この例では、セレクト信号生成回路32Aの比較ロジック72において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Aとが等しいかどうかが判断される。ここでは、「Rステージ」にあるソースオペランド番号Rs0Rと「Aステージ」にあるディスティネーションオペランド番号Rd0Aとは、ともにレジスタr1で等しいので、この比較ロジック72の出力は1になる。つまり、Add命令とAND命令との間に、レジスタr1について依存関係があることが検出される。
【0082】
また、Add命令は、ブランチライクリー命令の次の命令であるので、ブランチディレイスロット情報BDS0Aが1になっている。したがって、予測結果フラグPrdNTkn1Aが1であり、且つ、ブランチディレイスロット情報BDS0Aも1であるので、NAND回路34の出力は0になる。このように比較ロジックの出力が1であり、且つ、NAND回路34の出力が0であるので、AND回路76の出力が0になる。したがって、フリップフロップ38Aのビット0に0が格納される。一方、AND回路76の出力が0であるので、AND回路80、82の一方の入力は1になる。
【0083】
また、比較ロジック74において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Dとが、等しいかどうかが判断される。ここでは、「Dステージ」の命令とはオペランドの依存関係はなかったと仮定する。このため、「Rステージ」にあるソースオペランド番号Rs0Rと「Dステージ」にあるディスティネーションオペランド番号Rd0Dとは、等しくない。すると、この比較ロジック72の出力は0になる。さらに、「Dステージ」の命令は、ブランチライクリー命令のブランチディレイスロットにある命令でないと仮定する。すなわち、NAND回路36において、ブランチディレイスロット情報BDS0Dは0であり、且つ、予測結果フラグPrdNTkn1Dも0である。すると、このNAND回路36の出力は1になる。このため、AND回路78の出力は0になる。したがって、AND回路80の他方の入力には0が入力され、AND回路82の他方の入力には1が入力される。
【0084】
このため、AND回路80の出力は0になり、フリップフロップ38Aのビット1に0が格納される。また、AND回路82の出力は1になり、フリップフロップ38Aのビット2に1が格納される。これにより、セレクト信号SelRs0が生成され、次の第4サイクルで、フリップフロップ38Aからバイパスマルチプレクサ44に供給される。このビット2が1のセレクト信号SelRs0の供給を受けたバイパスマルチプレクサ44は、レジスタファイル20から入力されているオペランドを選択してALU42に出力する。つまり、データバイパスが行われないことになる。
【0085】
すなわち、命令フェッチユニット10は、BNEL命令の分岐は成立しないと予測した。この予測が正しいとすると、ブランチディレイスロットのAdd命令はキャンセルされると予測される。この場合、Add命令から次の命令であるAND命令へのデータバイパスは行われてはならないので、バイパスセレクトロジック回路30は、データバイパスが起きないようにセレクト信号SelRs0を生成する。
【0086】
この分岐予測が当たった場合には、このプロセッサはそのまま処理を続行する。つまり、Add命令をキャンセルした上で、レジスタr1の内容をレジスタファイル20から読み出して、AND命令を実行する。
【0087】
予測がはずれた場合には、分岐が成立したことになるので、ブランチライクリー命令の次の命令は、そのまま実行される。つまり、ブランチディレイスロットにあるAdd命令はそのまま実行される。但し、分岐が成立しているので、その次のシーケンシャル命令であるAND命令は、実行されずにキャンセルされる。したがって、バイパス予測が間違っていたとしても問題は生じない。
【0088】
なお、上記においては、「Dステージ」から「Aステージ」へのデータバイパスが生じる場合について説明したが、「Wステージ」から「Aステージ」へのデータバイパスが生じる場合でも同様の動作になる。
【0089】
(3)分岐命令でない通常命令で「Dステージ」から「Aステージ」へのバイパスが発生する場合
例えば、上述した図12に示す命令列がこのプロセッサで実行されたとする。この場合、上述したように第4サイクルでデータバイパスが発生するので、その前のサイクルである第3サイクルで、バイパスセレクトロジック回路30はセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を確定しておく必要がある。
【0090】
図2に基づいて、セレクト信号SelRs0の生成過程を詳細に説明すると、この例では、セレクト信号生成回路32Aの比較ロジック72において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Aとが等しいかどうかが判断される。ここでは、「Rステージ」にあるソースオペランド番号Rs0Rと「Aステージ」にあるディスティネーションオペランド番号Rd0Aとは、ともにレジスタr1で等しいので、この比較ロジック72の出力は1になる。つまり、Add命令とAND命令との間に、レジスタr1について依存関係があることが検出される。
【0091】
また、Add命令は、ブランチライクリー命令の次の命令ではないと仮定すると、ブランチディレイスロット情報BDS0Aが0になっており、予測結果フラグPrdNTkn1Aが0になっている。このため、NAND回路34の出力は1になる。このように比較ロジックの出力が1であり、且つ、NAND回路34の出力も1であるので、AND回路76の出力が1になる。したがって、フリップフロップ38Aのビット0に1が格納される。一方、AND回路76の出力が1であるので、AND回路80、82の一方の入力は0になる。このため、AND回路80、82の出力は0になり、フリップフロップ38Aのビット1、ビット2に0が格納される。これにより、セレクト信号SelRs0が生成され、次の第4サイクルで、フリップフロップ38Aからバイパスマルチプレクサ44に供給される。このビット0が1のセレクト信号SelRs0の供給を受けたバイパスマルチプレクサ44は、バイパスDAから入力されているオペランドを選択してALU42に出力する。つまり、これにより、第4サイクルで、「Dステージ」から「Aステージ」へのデータバイパスが行われる。
【0092】
(4)分岐命令でない通常命令で「Wステージ」から「Aステージ」へのバイパスが発生する場合
例えば、図6に示す命令列がこのプロセッサで実行されたとする。この図6の命令列におけるnop命令とは、何も実行しない命令である。この場合、Add命令の結果がレジスタr1に格納されるが、このレジスタr1が2サイクル後のSub命令のソースオペランドとして使用されている。このため、Sub命令の「Aステージ」においては、レジスタr1を「Wステージ」からデータバイパスする必要がある。
【0093】
このように第5サイクルでデータバイパスが発生するので、その前のサイクルである第4サイクルで、バイパスセレクトロジック回路30はセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を確定しておく必要がある。
【0094】
図2に基づいて、セレクト信号SelRs0の生成過程を詳細に説明すると、この例では、セレクト信号生成回路32Aの比較ロジック72において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Aとが等しいかどうかが判断される。ここでは、「Rステージ」にあるソースオペランド番号Rs0Rはレジスタr1であり、「Aステージ」にはディスティネーションオペランド番号Rd0Aはレジスタr1ではないので、この比較ロジック72の出力は0になる。このため、AND回路76の出力は0になり、フリップフロップ38Aのビット0に0が格納される。また、AND回路76の出力が0であるので、AND回路80、82の一方の入力には、1が入力される。
【0095】
一方、比較ロジック74において、ソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Dとが等しいかどうかが判断される。ここでは、「Rステージ」にあるソースオペランド番号Rs0Rはレジスタr1であり、「Dステージ」にあるディスティネーションオペランド番号Rd0Dもレジスタr1であるので、この比較ロジック72の出力は1になる。つまり、Add命令とSub命令との間に、レジスタr1について依存関係があることが検出される。
【0096】
また、Add命令が、ブランチライクリー命令の次の命令ではないと仮定すると、ブランチディレイスロット情報BDS0Dは0になっており、予測結果フラグPrdNTkn1Dも0になっている。このため、NAND回路36の出力は1になる。このように比較ロジック74の出力が1であり、且つ、NAND回路36の出力も1であるので、AND回路78の出力が1になる。したがって、AND回路80の入力の双方が1になるので、AND回路80の出力が1になる。このため、フリップフロップ38Aのビット1に1が格納される。
【0097】
一方、AND回路76の出力が1であるので、AND回路82の他方の入力は0になる。このため、AND回路82の出力は0になり、フリップフロップ38Aのビット2に0が格納される。これにより、セレクト信号SelRs0が生成され、次の第5サイクルで、フリップフロップ38Aからバイパスマルチプレクサ44に供給される。このビット1が1のセレクト信号SelRs0の供給を受けたバイパスマルチプレクサ44は、バイパスWAから入力されているオペランドを選択してALU42に出力する。つまり、これにより、第5サイクルで、「Wステージ」から「Aステージ」へのデータバイパスが行われる。
【0098】
(5)バイパスが発生せずにレジスタファイル20からのソースオペランドが選択される場合
これは、近接する命令の間にソースオペランドの依存関係がない場合である。この場合、図2に示す比較ロジック72がソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Aの不一致を検出し、0を出力する。このため、AND回路76の出力は0になり、フリップフロップ38Aのビット0に0が格納される。
【0099】
また、比較ロジック74がソースオペランド番号Rs0Rとディスティネーションオペランド番号Rd0Dとの不一致を検出し、0を出力する。このため、AND回路78の出力が0になり、フリップフロップ38Aのビット1に0が格納される。また、AND回路76の出力が0であり、AND回路78の出力が0であるので、AND回路82の双方の入力は1になる。このため、AND回路82から1が出力され、フリップフロップ38Aのビット2に1が格納される。
【0100】
これにより、セレクト信号SelRs0が生成され、次のサイクルで、このセレクト信号SelRs0がバイパスマルチプレクサ44に供給される。このビット2が1のセレクト信号SelRs0が供給されたバイパスマルチプレクサ44は、レジスタファイル20からのオペランドを選択して、ALU42に出力する。
【0101】
以上のように、本実施形態に係るプロセッサは、セレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成するにあたり、予測結果フラグPrdNTkn1A、PrdNTkn1Dを使用し、ブランチユニット52の分岐条件不成立信号NTknA、NTknDを使用しないこととした。このため、従来のようなセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成する際のタイミングの問題が生じないようにすることができる。
【0102】
すなわち、予測結果フラグPrdNTkn1A、PrdNTkn1Dは、命令フェッチユニット10が事前に確定する値である。このため、バイパスセレクトロジック回路30は、予測結果フラグPrdNTkn1A、PrdNTkn1Dを、レジスタRG7、RG8から読み出し、図7に示すように、BNEL命令の「Aステージ」又は「Dステージ」の最初に確定させることができる。このため、バイパスセレクトロジック回路30は、この早いタイミングで確定した予測結果フラグPrdNTkn1A、PrdNTkn1Dを用いてセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成することができる。したがって、バイパスセレクトロジック回路30は、これらセレクト信号SelRs0、SelRt0、SelRs1、SelRt1を生成するにあたり、十分な時間を確保することができる。
【0103】
【発明の効果】
以上説明したように、本発明に係るプロセッサよれば、バイパスセレクトロジック回路がセレクト信号を生成するにあたり、早いタイミングで確定する予測結果情報に基づいてこのセレクト信号を生成することとしたので、バイパスセレクトロジック回路は、このセレクト信号を生成するのにあたり、十分な時間を確保することができる。
【図面の簡単な説明】
【図1】本発明の一実施形態に係るプロセッサの内部構成の主要部分を示す図。
【図2】図1に示すバイパスセレクトロジック回路の内部構成を示す図。
【図3】図1に示すプロセッサで処理する命令列の一例を示す図。
【図4】図3に示す命令列を分岐が成立するとした予測の下、ブランチライクリー命令であるBNEL命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図5】図3に示す命令列を分岐が成立しないとした予測の下、ブランチライクリー命令であるBNEL命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図6】「Wステージ」から「Aステージ」へのデータバイパスが発生する命令列の一例を示す図。
【図7】予測結果フラグが確定するタイミングを示すタイミングチャート。
【図8】従来のプロセッサの内部構造の主要部分を示す図。
【図9】パイプライン処理における5つのステージの内容を説明する図。
【図10】図8に示したプロセッサで処理する通常の条件分岐命令を有する命令列の一例を示す図。
【図11】図8に示したプロセッサで処理するブランチライクリー命令を有する命令列の一例を示す図。
【図12】ソースオペランド間に依存関係のある命令が近接している命令列の一例を示す図。
【図13】図8に示すブランチユニットの内部構成の一例を示す図。
【図14】図8に示すバイパスセレクトロジック回路の内部構成の一例を示す図。
【図15】ブランチライクリー命令の条件が成立しないとした予測の下、ブランチライクリー命令であるBNEL命令以降の命令を、このプロセッサで処理した場合のタイミングチャート。
【図16】分岐条件不成立信号とセレクト信号の生成タイミングを説明するタイミングチャート。
【符号の説明】
10 命令フェッチユニット
20 レジスタファイル
30 バイパスセレクトロジック回路
40 第1パイプライン
42 ALU
50 第2パイプライン
52 ブランチユニット
Claims (17)
- 複数のステージを持つパイプライン処理を実行するプロセッサであって、
演算命令をフェッチして、この演算命令のソースオペランド番号とディスティネーションオペランド番号とを出力する命令フェッチユニットであって、前記演算命令が条件分岐命令である場合には、前記条件分岐命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、
前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記ソースオペランド番号に対応するソースオペランドを出力する、レジスタファイルと、
バイパスマルチプレクサと演算装置とを少なくとも有する第1パイプラインであって、前記バイパスマルチプレクサには、前記演算装置の演算結果である演算結果オペランドと前記レジスタファイルから出力された前記ソースオペランドが入力され、前記演算結果オペランドと前記ソースオペランドのうちの一方をセレクト信号に基づいて選択して前記演算装置に出力する、第1パイプラインと、
前記分岐命令の条件が成立したか否かを判断するブランチユニットを少なくとも有する第2パイプラインと、
少なくとも前記予測結果情報を用いて、前記セレクト信号を生成するバイパスセレクトロジック回路と、
を備えることを特徴とするプロセッサ。 - 前記予測結果情報を格納する予測レジスタを備えるとともに、前記予測結果情報は、パイプライン処理の各ステージに同期して前記予測レジスタに順次転送されることを特徴とする請求項1に記載のプロセッサ。
- 前記命令フェッチユニットは、前記条件分岐命令の次の命令列に位置する演算命令の前記ソースオペランド番号を出力する際には、その演算命令が前記条件分岐命令の次の命令列に位置する演算命令であることを示すブランチディレイスロット情報も出力する、ことを特徴とする請求項2に記載のプロセッサ。
- 前記ブランチディレイスロット情報を格納するブランチレジスタを備えるとともに、前記ブランチディレイスロット情報は、パイプライン処理の各ステージに同期して前記ブランチレジスタに順次転送されることを特徴とする請求項3に記載のプロセッサ。
- 前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、
前記予測レジスタから取り出した前記予測結果情報と、
前記ブランチレジスタから取り出した前記ブランチディレイスロット情報と、
前記セレクト信号を出力するステージの前のステージで演算ステージに到達している前記ディスティネーションオペランド番号と、
を用いて前記セレクト信号を生成する、ことを特徴とする請求項4に記載のプロセッサ。 - 前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、前記ディスティネーションオペランド番号とを比較する、比較ロジック回路を、
少なくとも有するセレクト信号生成回路を備えており、
前記セレクト信号生成回路は、
前記比較ロジック回路が前記ソースオペランド番号と前記ディスティネーションオペランド番号とが一致することを検出するとともに、前記ブランチディレイスロット情報が演算ステージに到達している命令が条件分岐命令の次の命令でないことを示している場合、又は、前記予測結果情報が条件成立を示している場合には、前記前記バイパスマルチプレクサが前記演算結果オペランドを選択する第1状態の前記セレクト信号を生成し、
前記第1状態の前記セレクト信号を生成しない場合には、前記前記バイパスマルチプレクサが前記ソースオペランドを選択する第2状態の前記セレクト信号を生成する、
ことを特徴とする請求項5に記載のプロセッサ。 - 前記セレクトバイパスロジック回路は、フリップフロップをさらに備えるとともに、
前記演算装置が演算を行う前のステージで前記セレクト信号を生成して前記フリップフロップに格納し、前記演算装置が演算を行うステージで前記フリップフロップから前記セレクト信号を出力する、
ことを特徴とする請求項6に記載のプロセッサ。 - 前記演算結果オペランドを格納する結果レジスタを、さらに備えることを特徴とする請求項7に記載のプロセッサ。
- 第1ステージから第5ステージの5つのステージとを少なくとも有するパイプライン処理を行うとともに、
命令セットアーキテクチャとして、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立したか否かに関わらず実行する通常の条件分岐命令と、条件分岐命令の次の命令列に位置する演算命令を前記条件分岐命令の条件が成立した場合にのみ実行するブランチライクリー命令とを少なくとも有する、プロセッサであって、
前記第1ステージにおいて、少なくとも2つの演算命令をフェッチして、各演算命令につき1つ又は2つのソースオペランド番号と1つのディスティネーションオペランド番号とをそれぞれ出力する命令フェッチユニットであって、前記演算命令の1つがブランチライクリー命令である場合には、前記ブランチライクリー命令の条件が成立するか否かを予測して、その結果を予測結果情報として出力する命令フェッチユニットと、
前記命令フェッチユニットから出力された前記ソースオペランド番号が入力され、前記第2ステージにおいて、前記各ソースオペランド番号に対応するソースオペランドをそれぞれ出力する、レジスタファイルと、
前記第4ステージに到達した演算結果オペランドである第1演算結果オペランドと、前記第5ステージに到達した演算結果オペランドである第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち1の前記演算命令に対する1の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記1の演算命令に対する前記1のソースオペランドとのうちの1つを第1セレクト信号に基づいて選択して第1演算オペランドとして出力する、第1バイパスマルチプレクサと、
前記第4ステージに到達した前記第1演算結果オペランドと、前記第5ステージに到達した前記第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち前記1の演算命令に対する他の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記1の演算命令に対する前記他のソースオペランドとのうちの1つを第2セレクト信号に基づいて選択して第2演算オペランドとして出力する、第2バイパスマルチプレクサと、
前記第1演算オペランドと前記第2演算オペランドとが入力され、前記第3ステージにおいて、前記第1演算オペランドと前記第2演算オペランドに基づいて演算を行い、その演算結果を前記演算結果オペランドとして出力する演算装置と、
前記第4ステージに到達した第1演算結果オペランドと、前記第5ステージに到達した第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する1の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記他の演算命令に対する前記1のソースオペランドとのうちの1つを第3セレクト信号に基づいて選択して第1比較オペランドとして出力する、第3バイパスマルチプレクサと、
前記第4ステージに到達した第1演算結果オペランドと、前記第5ステージに到達した第2演算結果オペランドと、前記レジスタファイルから出力された前記ソースオペランドのうち他の前記演算命令に対する他の前記ソースオペランドが入力され、前記第3ステージにおいて、前記第1演算結果オペランドと前記第2演算結果オペランドと前記他の演算命令に対する前記他のソースオペランドとのうちの1つを第4セレクト信号に基づいて選択して第2比較オペランドとして出力する、第4バイパスマルチプレクサと、
前記第3ステージにおいて、前記第1比較オペランドと前記第2比較オペランドとが入力され、前記第1比較オペランドと前記第2比較オペランドとを比較して、前記分岐命令の条件が成立したか否かを判断するブランチユニットと、
前記第2ステージにおいて、少なくとも前記予測結果情報を用いて、前記第1乃至第4セレクト信号を生成するバイパスセレクトロジック回路と、
を備えることを特徴とするプロセッサ。 - 前記予測結果情報は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第3ステージに到達した前記予測結果情報を第1予測結果情報として格納する第1予測レジスタと、
前記第4ステージに到達した前記予測結果情報を第2予測結果情報として格納する第2予測レジスタと、
をさらに備えることを特徴とする請求項9に記載のプロセッサ。 - 前記命令フェッチユニットは、前記条件分岐命令の次の命令列に位置する演算命令の前記ソースオペランド番号を出力する際には、その演算命令が前記条件分岐命令の次の命令列に位置する演算命令であることを示すブランチディレイスロット情報も出力する、ことを特徴とする請求項10に記載のプロセッサ。
- 前記ブランチディレイスロット情報は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第3ステージに到達した前記ブランチディレイスロット情報を第1ブランチディレイスロット情報として格納する第1ブランチレジスタと、
前記第4ステージに到達した前記ブランチディレイスロット情報を第2ブランチディレイスロット情報として格納する第2ブランチレジスタと、
をさらに備えることを特徴とする請求項11に記載のプロセッサ。 - 前記ディスティネーションオペランド番号は、パイプライン処理の各ステージに同期して順次転送されるとともに、
前記第3ステージに到達した前記ディスティネーションオペランド番号を第1ディスティネーションオペランド番号として格納する第1ディスティネーションレジスタと、
前記第4ステージに到達した前記ディスティネーションオペランド番号を第2ディスティネーションオペランド番号として格納する第2ディスティネーションレジスタと、
をさらに備えることを特徴とする請求項12に記載のプロセッサ。 - 前記バイパスセレクトロジック回路は、
前記命令フェッチユニットが出力した前記ソースオペランド番号と、
前記第1予測レジスタから取り出した前記第1予測結果情報と、
前記第2予測レジスタから取り出した前記第2予測結果情報と、
前記第1ブランチレジスタから取り出した前記第1ブランチディレイスロット情報と、
前記第2ブランチレジスタから取り出した前記第2ブランチディレイスロット情報と、
前記第1ディスティネーションレジスタから取り出した前記第1ディスティネーションオペランド番号と、
前記第2ディスティネーションレジスタから取り出した前記第2ディスティネーションオペランド番号と、
を用いて前記第1乃至第4セレクト信号を生成する、ことを特徴とする請求項13に記載のプロセッサ。 - 前記バイパスセレクトロジック回路は、
前記第1セレクト信号を生成する第1セレクト信号生成回路と、
前記第2セレクト信号を生成する第2セレクト信号生成回路と、
前記第3セレクト信号を生成する第3セレクト信号生成回路と、
前記第4セレクト信号を生成する第4セレクト信号生成回路と、
を少なくとも備えており、
前記第1乃至第4セレクト信号生成回路のそれぞれは、
前記命令フェッチユニットが出力した1の前記ソースオペランド番号と、前記第1ディスティネーションオペランド番号とを比較する、第1比較ロジック回路と、
前記命令フェッチユニットが出力した前記1のソースオペランド番号と、前記第2ディスティネーションオペランド番号とを比較する、第2比較ロジック回路と、
少なくとも備えており、
前記第1比較ロジック回路が前記1のソースオペランド番号と前記第1ディスティネーションオペランド番号とが一致することを検出するとともに、前記第1ブランチディレイスロット情報が前記第3ステージに到達した命令が条件分岐命令の次の命令でないことを示している場合、又は、前記第1予測結果情報が条件成立を示している場合には、前記前記バイパスマルチプレクサが前記第1演算結果オペランドを選択する第1状態の前記第1乃至第4セレクト信号の1つを生成し、
前記第2比較ロジック回路が前記1のソースオペランド番号と前記第2ディスティネーションオペランド番号とが一致することを検出するとともに、前記第2ブランチディレイスロット情報が前記第4ステージに到達した命令が条件分岐命令の次の命令でないことを示している場合、又は、前記第2予測結果情報が条件成立を示している場合で、前記第1状態の前記第1乃至第4セレクト信号の1つを生成しない場合には、前記前記バイパスマルチプレクサが前記第2演算結果オペランドを選択する第2状態の前記第1乃至第4セレクト信号の1つを生成し、
前記第1状態及び前記第2状態の前記第1乃至第4セレクト信号の1つを生成しない場合には、前記前記バイパスマルチプレクサが前記ソースオペランドを選択する第3状態の前記第1乃至第4セレクト信号の1つを生成する、
ことを特徴とする請求項14に記載のプロセッサ。 - 前記セレクトバイパスロジック回路は、前記第1乃至第4セレクト信号を保持する第1乃至第4フリップフロップをさらに備えるとともに、
前記第2ステージで前記第1乃至第4セレクト信号を生成して前記第1乃至第4フリップフロップに格納し、前記第3ステージで前記第1乃至第4フリップフロップから前記第1乃至第4セレクト信号を出力する、
ことを特徴とする請求項15に記載のプロセッサ。 - 前記第4ステージに到達した前記演算結果オペランドを前記第1演算結果オペランドとして格納する第1結果レジスタと、
前記第5ステージに到達した前記演算結果オペランドを前記第2演算結果オペランドとして格納する第2結果レジスタと、
をさらに備えることを特徴とする請求項16に記載のプロセッサ。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/487,763 US6601162B1 (en) | 2000-01-19 | 2000-01-19 | Processor which executes pipeline processing having a plurality of stages and which has an operand bypass predicting function |
US09/487763 | 2000-01-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2001222428A JP2001222428A (ja) | 2001-08-17 |
JP3708022B2 true JP3708022B2 (ja) | 2005-10-19 |
Family
ID=23937018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2001006278A Expired - Fee Related JP3708022B2 (ja) | 2000-01-19 | 2001-01-15 | プロセッサ |
Country Status (2)
Country | Link |
---|---|
US (1) | US6601162B1 (ja) |
JP (1) | JP3708022B2 (ja) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040195512A1 (en) * | 2000-05-16 | 2004-10-07 | Crosetto Dario B. | Method and apparatus for anatomical and functional medical imaging |
JP3816844B2 (ja) | 2002-07-05 | 2006-08-30 | 富士通株式会社 | プロセッサ及び命令制御方法 |
US7366877B2 (en) * | 2003-09-17 | 2008-04-29 | International Business Machines Corporation | Speculative instruction issue in a simultaneously multithreaded processor |
JP2008527559A (ja) * | 2005-01-13 | 2008-07-24 | エヌエックスピー ビー ヴィ | プロセッサ及びその命令発行方法 |
US9274797B2 (en) * | 2012-12-19 | 2016-03-01 | International Business Machines Corporation | Computer processor with instruction for execution based on available instruction sets |
CN117331603B (zh) * | 2023-09-18 | 2024-04-09 | 中国人民解放军军事科学院国防科技创新研究院 | 基于优先级判定的深度流水线前向旁路 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
EP0547247B1 (en) * | 1991-07-08 | 2001-04-04 | Seiko Epson Corporation | Extensible risc microprocessor architecture |
US6441842B1 (en) * | 1992-02-19 | 2002-08-27 | 8×8, Inc. | Video compression/decompression processing and processors |
KR950701437A (ko) * | 1992-05-01 | 1995-03-23 | 요시오 야마자끼 | 슈퍼스칼라 마이크로프로세서에서의 명령어 회수를 위한 시스템 및 방법 |
JP3745450B2 (ja) | 1996-05-13 | 2006-02-15 | 株式会社ルネサステクノロジ | 並列処理プロセッサ |
US5778248A (en) | 1996-06-17 | 1998-07-07 | Sun Microsystems, Inc. | Fast microprocessor stage bypass logic enable |
US5872986A (en) | 1997-09-30 | 1999-02-16 | Intel Corporation | Pre-arbitrated bypassing in a speculative execution microprocessor |
US6134653A (en) * | 1998-04-22 | 2000-10-17 | Transwitch Corp. | RISC processor architecture with high performance context switching in which one context can be loaded by a co-processor while another context is being accessed by an arithmetic logic unit |
-
2000
- 2000-01-19 US US09/487,763 patent/US6601162B1/en not_active Expired - Fee Related
-
2001
- 2001-01-15 JP JP2001006278A patent/JP3708022B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
US6601162B1 (en) | 2003-07-29 |
JP2001222428A (ja) | 2001-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5287467A (en) | Pipeline for removing and concurrently executing two or more branch instructions in synchronization with other instructions executing in the execution unit | |
US6338136B1 (en) | Pairing of load-ALU-store with conditional branch | |
US5404552A (en) | Pipeline risc processing unit with improved efficiency when handling data dependency | |
US6510511B2 (en) | Methods and apparatus for branch prediction using hybrid history with index sharing | |
JP3599409B2 (ja) | 分岐予測装置 | |
US5442756A (en) | Branch prediction and resolution apparatus for a superscalar computer processor | |
US8990543B2 (en) | System and method for generating and using predicates within a single instruction packet | |
US6647489B1 (en) | Compare branch instruction pairing within a single integer pipeline | |
US5706459A (en) | Processor having a variable number of stages in a pipeline | |
US6981131B2 (en) | Early condition code evaluation at pipeline stages generating pass signals for controlling coprocessor pipeline executing same conditional instruction | |
US7647480B2 (en) | Handling of conditional instructions in a data processing apparatus | |
JP3449186B2 (ja) | パイプラインバイパス機能を有するデータ処理装置 | |
US8074056B1 (en) | Variable length pipeline processor architecture | |
US6851033B2 (en) | Memory access prediction in a data processing apparatus | |
JP3708022B2 (ja) | プロセッサ | |
JP3721002B2 (ja) | メモリ要求を形成するために並列に生成される複数の取出アドレスのうちの1つを選択する、プロセッサおよび命令取出方法 | |
JP2002024008A (ja) | データ処理装置およびプログラム変換装置 | |
US5729729A (en) | System for fast trap generation by creation of possible trap masks from early trap indicators and selecting one mask using late trap indicators | |
KR100515039B1 (ko) | 조건부 명령어를 고려한 파이프라인 상태 표시 회로 | |
JPH06131180A (ja) | 命令処理方式および命令処理装置 | |
JP2591325B2 (ja) | 分岐制御装置 | |
JP3493110B2 (ja) | 高速分岐処理装置 | |
EP1069499A2 (en) | Data processing apparatus and method for simultaneously executing plural instructions | |
JPH0774992B2 (ja) | データ処理装置 | |
US6983360B2 (en) | Program loading mechanism through a single input data path |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040830 |
|
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: 20050722 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050802 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090812 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20090812 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100812 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100812 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110812 Year of fee payment: 6 |
|
LAPS | Cancellation because of no payment of annual fees |