Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP3473249B2 - 中央処理装置 - Google Patents
[go: Go Back, main page]

JP3473249B2 - 中央処理装置 - Google Patents

中央処理装置

Info

Publication number
JP3473249B2
JP3473249B2 JP05132296A JP5132296A JP3473249B2 JP 3473249 B2 JP3473249 B2 JP 3473249B2 JP 05132296 A JP05132296 A JP 05132296A JP 5132296 A JP5132296 A JP 5132296A JP 3473249 B2 JP3473249 B2 JP 3473249B2
Authority
JP
Japan
Prior art keywords
read
buffer
write
branch prediction
entry
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
Application number
JP05132296A
Other languages
English (en)
Other versions
JPH09244892A (ja
Inventor
英也 明石
啓明 藤井
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP05132296A priority Critical patent/JP3473249B2/ja
Publication of JPH09244892A publication Critical patent/JPH09244892A/ja
Application granted granted Critical
Publication of JP3473249B2 publication Critical patent/JP3473249B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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
    • G06F9/3844Speculative 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

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は計算機の中央処理装
置に関する。
【0002】
【従来の技術】近年、中央処理装置の高速化のためにパ
イプライン方式が不可欠な技術となっている。パイプラ
イン方式では、中央処理装置で処理する命令を、例え
ば、命令読みだし,命令解読,実行,結果のレジスタへ
の書き込みというようにステージに分割し、命令1の結
果のレジスタへの書き込み,命令2の実行,命令3の命
令解読,命令4の命令読みだしを並列に処理することで
命令当たりの処理速度を高速化する。
【0003】パイプライン方式では、このようにアドレ
スの連続する命令列の実行は並列に処理することができ
る。一方、命令列中に条件分岐命令が存在する場合およ
び分岐先アドレスの計算が必要な分岐命令が存在する場
合、分岐命令実行の結果次命令のアドレスが決定した
後、次命令の命令読みだしが行われる。このため、命令
列中にこれらの分岐命令が存在するとパイプラインの命
令解読,実行,結果の書き込みのステージに空きができ
るため、処理速度が低下する。
【0004】分岐命令の実行待ちによる処理速度の低下
を防ぐために、分岐予測が多く用いられる。分岐予測
は、分岐命令を読みだした時に次の命令のアドレスを予
測し、分岐命令の結果を待たずに予測したアドレスから
続けて命令をパイプラインに投入する。これを投機実行
と呼ぶ。処理が進んで分岐命令実行の結果、分岐命令の
次命令のアドレスが決定した時点で分岐予測が正しかっ
た場合、そのまま命令の実行を続ける。分岐予測が誤っ
ていた場合投機実行中の命令を全て破棄し、正しいアド
レスから分岐命令以降の読みだしを再開する。このた
め、分岐予測が正しい場合には、分岐命令の実行待ちに
より処理速度が低下することを回避できる。
【0005】従来の中央処理装置では、投機実行中の命
令列に読みだし命令または書き込み命令がある場合、こ
れらの命令の投機実行は行われていなかった。これに該
当する中央処理装置は、文献“PowerPC601 ユーザーズ
マニュアル”に示されるように、PowerPC601が挙げられ
る。
【0006】
【発明が解決しようとする課題】従来技術で、条件分岐
命令以降に読みだし命令または書き込み命令が実行され
る場合、条件分岐命令以降の読みだし命令または書き込
み命令は投機実行されず、処理速度が低下する。
【0007】本発明の目的は、投機実行した読みだし命
令の結果を破棄可能として読みだし命令を投機実行可能
とし、さらに分岐予測を誤って実行した読みだし命令の
結果を後続の同一アドレスへの読みだし命令で利用可能
とし、読みだし時間を短縮することで中央処理装置の処
理速度を向上することにある。
【0008】
【課題を解決するための手段】1以上の分岐ユニット
と、1以上の主記憶読みだし要求を格納する読みだしバ
ッファと1以上の主記憶書き込み要求を格納する書き込
みバッファを具備する1以上の主記憶アクセスユニット
と、分岐予測回路と、記憶制御回路を具備する中央処理
装置で、前記読みだしバッファには、各読みだしバッフ
ァエントリ毎にエントリ有効フラグと、1以上の分岐予
測の結果実行されると判断された場合に各分岐予測の方
向を特定するための分岐予測フィールドと、前記エント
リが分岐予測の誤りにより実行されないことを示す分岐
予測誤りフラグと、読みだしアドレスフィールドと、読
みだしデータフィールドと、読みだし完了フラグを設け
る。
【0009】これにより、分岐実行結果が得られた時に
全読みだしバッファの分岐予測フィールドと分岐実行結
果を比較して、分岐予測を誤った読みだしバッファエン
トリを特定することができ、読みだし命令の投機実行が
可能となる。
【0010】さらに、分岐予測を誤った場合にも、投機
実行中の読みだし命令は破棄するが、読みだしバッファ
エントリのエントリ有効フラグを有効のまま分岐予測誤
りフラグを誤りと設定することで、読みだし要求および
主記憶読みだしデータを読みだしバッファ内に保持す
る。
【0011】以後、正しいアドレスから実行が再開され
た後、読みだしバッファエントリと同一アドレスへの読
みだし命令が実行された場合、読みだしバッファエント
リに格納されている主記憶読みだしデータを使用して読
みだし時間を短縮し、中央処理装置の処理速度を向上す
る。
【0012】
【発明の実施の形態】
〈実施例1〉以下に本発明の第1の実施例について説明
する。図1は本発明の中央処理装置を示す。
【0013】図1で中央処理装置は、記憶制御回路10
0,分岐予測回路110,命令発行回路120,レジス
タファイル130,演算ユニット140,分岐ユニット
150,主記憶アクセスユニット160,書き込みバッフ
ァ170,読みだしバッファ180,リオーダバッファ
190からなる。
【0014】記憶制御回路100は、分岐予測回路11
0より指示される命令の読みだし、および書き込みバッ
ファ170内のデータの書き込み、読みだしバッファ1
80で指示されるデータの読みだしをバス102を通し
て中央処理装置外部に発行し、また、読みだし結果をバ
ス102を通して中央処理装置内部に受け取る。記憶制
御回路100にキャッシュメモリを持たせる方式も考え
られるが、本実施例ではキャッシュメモリは設けていな
い。しかし、本発明はキャッシュメモリの有無に関係な
く実施できる。
【0015】分岐予測回路110は、読みだした命令が
分岐命令である場合に次命令のアドレスを予測し、記憶
制御回路100に命令読みだしを要求する。読みだした
命令が分岐命令以外の場合、命令アドレスをインクリメ
ントし、記憶制御回路100に命令読みだしを要求す
る。分岐予測は、種々の方法が提案されているが、本発
明は分岐予測の方法に関らず実施できる。
【0016】命令発行回路120は、読みだした命令を
解読し、命令の種類に応じて演算ユニット140,分岐
ユニット150,主記憶アクセスユニット160のいず
れかに命令を発行する。この時、分岐予測により命令を
投機実行している場合、分岐予測の方向を示すデータを
付加する。本発明では一例として、分岐予測方向を2ビ
ットで表す。分岐予測データが“00”の場合、投機実
行中ではなく、当該命令は必ず実行されることを示す。
分岐予測データが“10”の場合、投機実行中であり、
分岐を行わないと予測したことを示す。分岐予測データ
が“11”の場合、投機実行中であり、分岐を行うと予
測したことを示す。
【0017】演算ユニット140は、命令発行回路12
0から受けた演算命令を実行し、演算結果をリオーダバ
ッファ190に格納する。
【0018】主記憶アクセスユニット160は、命令発
行回路120から受けた読みだし命令または書き込み命
令をそれぞれ読みだしバッファ180,書き込みバッフ
ァ170に登録し、読みだし結果をリオーダバッファ1
90に格納する。
【0019】リオーダバッファ190は、演算ユニット
140から受けた演算結果または主記憶アクセスユニッ
ト160から受けた読みだし結果を一旦格納し、レジス
タファイル130に送る。投機実行した命令について
は、分岐ユニット150から分岐実行結果を得て、分岐
予測が正しかった場合は投機実行した命令の結果をレジ
スタファイル130に送るが、分岐予測が誤っていた場
合は投機実行した命令の結果を破棄する。
【0020】分岐ユニット150は、命令発行回路12
0から受けた分岐命令を実行する。分岐命令が条件分岐
命令であった場合、分岐実行の結果をリオーダバッファ
190,書き込みバッファ170,読みだしバッファ18
0に送る。
【0021】書き込みバッファ170は、書き込み命令
のアドレス,データおよび分岐予測結果を保持し、記憶
制御回路100に書き込み命令を発行する。投機実行し
た命令の場合、分岐ユニット150から分岐実行結果を
得るまで待ち、分岐予測が正しかった場合に記憶制御回
路100に書き込み命令を発行する。一方、分岐予測が
誤っていた場合には書き込み命令を破棄する。
【0022】書き込みバッファ170は、エントリ毎に
書き込み要求の有効を示すエントリ有効フラグ170
a,書き込み命令の分岐予測データを格納する分岐予測
フィールド170b,書き込みアドレスフィールド17
0c,書き込みデータフィールド170dのフィールド
を持つ。
【0023】書き込みバッファ170に関する処理は、
以下に示す種類が存在する。
【0024】(書き込み発行処理)書き込みバッファ1
70は、主記憶アクセスユニット160から、書き込み
アドレス,分岐予測データおよび書き込みデータを受信
し、以下に示す書き込み命令の発行を行う。
【0025】(1)エントリ有効フラグ170aが
“0”の書き込みバッファエントリが存在する場合、書
き込みアドレスおよび書き込みデータを書き込みバッフ
ァエントリの書き込みアドレスフィールド170cおよ
び書き込みデータフィールド170dに書き込み、エントリ
有効フラグ170aを“1”とする。
【0026】(2)エントリ有効フラグ170aが
“0”の書き込みバッファエントリが存在しない場合、
(1)が実行できるまで新たな書き込み発行処理を受け
付けず待つ。
【0027】(主記憶アクセス発行処理)エントリ有効
フラグ170aが“1”かつ分岐予測フィールド170
bが“00”の書き込みバッファエントリについて、主
記憶制御回路に書き込みアドレスおよび書き込みデータ
を与え、主記憶書き込みを発行する。主記憶書き込み
は、書き込みバッファ170への登録順に従って行う。
この後、エントリ有効フラグ170aを“0”とする。
【0028】(分岐結果処理)分岐ユニット150から
分岐結果データを受けて、分岐結果を受信する。分岐結
果の受信時には、以下の処理を行う。
【0029】(1)エントリ有効フラグが“1”かつ、
分岐予測フィールド170bが“00”でなく、分岐予測
フィールド170bと分岐結果データが一致する全ての
書き込みバッファエントリで、分岐予測フィールド17
0bを“00”とする。
【0030】(2)エントリ有効フラグが“1”かつ、
分岐予測フィールド170bが“00”でなく、分岐予測
フィールド170bと分岐結果データが一致しない全て
の書き込みバッファエントリで、エントリ有効フラグ1
70aを“0”とする。
【0031】読みだしバッファ180は、エントリ毎に
読みだし要求の有効を示すエントリ有効フラグ180
a,読みだし命令の分岐予測データを格納する分岐予測
フィールド180b,読みだし命令に対応する分岐予測
の誤りを示す分岐予測誤りフラグ180c,読みだしア
ドレスフィールド180d,主記憶の読みだしが完了し
たことを示す読みだし完了フラグ180e,主記憶読み
だし結果を一旦保持する読みだしデータフィールド18
0f,主記憶読みだし結果を書き込むレジスタ番号を示
すレジスタフィールド180g,後続の読みだし命令が
当該エントリのデータを使うことを許可する読みだし許
可フラグ180hのフィールドを持つ。
【0032】読みだしバッファ180に関する処理は、
以下に示す種類が存在する。
【0033】(読みだし発行処理)読みだしバッファ1
80は、主記憶アクセスユニットから、読みだしアドレ
ス、分岐予測データおよび書き込みレジスタ番号を受信
し、以下に示す読みだし命令の発行処理を行う。
【0034】(1)エントリ有効フラグ180aおよび
読みだし許可フラグ180hが“1”、かつ、読みだし
アドレスと読みだしバッファエントリの読みだしアドレ
スフィールド180dが一致、かつ、分岐予測誤りフラ
グ180cと読みだし完了フラグ180eの少なくとも
片方が“1”の場合、(1a)〜(1c)のいずれかの
処理を行う。
【0035】(1a)分岐予測誤りフラグ180cおよ
び読みだし完了フラグ180eがともに“1”の場合、
当該エントリの読みだしデータフィールド180fを書
き込みデータ,主記憶アクセスユニット160から受け
た書き込みレジスタ番号を書き込みレジスタ番号とし
て、リオーダバッファ190に書き込みを発行する。
【0036】これにより、以前に投機実行し、分岐予測
を誤った読みだし命令と同一アドレスに対する後続の読
みだし命令は、以前の読みだし結果を使うことができ
る。
【0037】(1b)分岐予測誤りフラグ180cが
“0”,読みだし完了フラグ180eが“1”の場合、
当該エントリの読みだしデータフィールド180fを書
き込みデータ,レジスタフィールド180gを書き込み
レジスタ番号として、リオーダバッファ190に書き込
みを発行する。
【0038】これにより、以前に発行した読みだし命令
と同一アドレスに対する後続の読みだし命令は、以前の
読みだし結果を使うことができる。
【0039】(1c)分岐予測誤りフラグ180cが
“1”,読みだし完了フラグ180eが“0”の場合、
当該エントリの分岐予測フィールド180bを分岐予測
データ,レジスタフィールド180gを書き込みレジス
タ番号,分岐予測誤りフラグ180cを“0”に設定する。
【0040】これにより、以前に投機実行し、分岐予測
が誤った読みだし命令と同一アドレスに対する後続の読
みだし命令は、以前の読みだし結果が主記憶から戻るの
を待って使うことができる。
【0041】(2)(1)の条件に該当する読みだしバ
ッファエントリが存在せず、エントリ有効ビット180
aが“0”であるエントリが存在する場合、このエント
リの読みだしアドレスフィールド180d,分岐予測フ
ィールド180b,レジスタフィールド180gを読み
だし発行の読みだしアドレス,分岐予測データ,レジス
タ番号に設定し、エントリ有効ビット180aおよび読
みだし許可フラグ180hを“1”,分岐予測誤りフラ
グ180cおよび読みだし完了フラグ180eを“0”
に設定する。
【0042】この後、読みだしアドレスフィールド18
0dを読みだしアドレスとし、当該エントリのエントリ
番号を読みだしバッファ番号として、記憶制御回路10
0に主記憶アクセスを発行する。
【0043】(3)(1),(2)の条件に該当せず、エ
ントリ有効フラグ180aおよび読みだし完了フラグ1
80eが“1”、かつ、読みだし許可フラグ180hが
“0”かつ、読みだしアドレスと読みだしバッファエン
トリの読みだしアドレスフィールド180dが一致する
エントリが存在する場合、(2)と同一の動作を行う。
【0044】(4)(1),(2),(3)の条件に該当せ
ず、エントリ有効フラグ180a,読みだし許可フラグ
180hが全て“1”のエントリが存在する場合、
(2)と同一の動作を行う。
【0045】これにより、読みだしバッファエントリが
全て有効の場合に、データ到着処理を終えた読みだしバ
ッファエントリを使用することができる。
【0046】(5)(1)から(4)のいずれの条件に
も該当しない場合、読みだし命令を登録可能な読みだし
バッファエントリが存在しないため、(1)から(4)
のいずれかが実行できるまで新たな読みだし発行処理を
受け付けず待つ。
【0047】(主記憶アクセス発行処理)読みだしバッ
ファ180は、記憶制御回路100に読みだしアドレス
および読みだしバッファ番号を与え、主記憶読みだしを
発行する。
【0048】(データ到着処理)読みだしバッファ18
0は、記憶制御回路100から主記憶読みだし結果のデ
ータと読みだしバッファ番号を受信し、以下の処理を行
う。
【0049】(1)読みだしバッファ番号で指定される
読みだしバッファエントリの、読みだしデータフィール
ド180fに主記憶読みだし結果を書き込み、読みだし
完了フラグ180eを“1”とする。
【0050】(2)当該エントリの、読みだしデータフ
ィールド180fの値を書き込みデータ,レジスタフィ
ールド180gの値を書き込みレジスタ番号,分岐予測
フィールドを分岐予測データとして、レジスタ書き込み
をリオーダバッファ190に対して発行する。
【0051】(3)当該エントリの読みだし許可フラグ
180hが“0”の場合、エントリ有効フラグを“0”
とする。
【0052】(書き込み発行処理)読みだしバッファ1
80は、主記憶アクセスユニット160から書き込みア
ドレスを受けて、以下に示す書き込み発行処理を行う。
【0053】(1)エントリ有効フラグ180aが
“1”かつ書き込みアドレスと読みだしアドレスフィー
ルド180dが一致するエントリを検索する。
【0054】(2)(1)に示したエントリが存在する
場合、当該エントリの読みだし許可フラグ180hを
“0”とする。この時、読みだし完了フラグ180eが
“1”ならば、エントリ有効フラグ180aを“0”と
する。
【0055】(分岐結果処理)読みだしバッファ180
は、分岐ユニット150から分岐結果データを受けて、
以下に示す分岐結果処理を行う。
【0056】(1)エントリ有効フラグ180aが
“1”かつ、分岐予測フィールド180bが“10”ま
たは“11”かつ、分岐予測フィールド180bが分岐
結果データと一致する全てのエントリで、分岐予測フィ
ールド180bを“00”とする。
【0057】(2)エントリ有効フラグ180aが
“1”かつ、分岐予測フィールド180bが“10”ま
たは“11”かつ、分岐予測フィールド180bが分岐
結果データと一致しない全てのエントリで、分岐予測フ
ィールド180bを分岐結果データとし、分岐予測誤り
フラグ180cを“1”とする。
【0058】これにより、分岐予測を誤って実行した読
みだしバッファエントリについて、読みだしバッファエ
ントリを有効としたまま分岐予測の誤りを設定すること
ができる。
【0059】本実施例では、読みだしバッファ180の
各エントリに分岐予測フィールド180bおよび分岐予
測誤りフラグ180cを設けることに特徴がある。
【0060】本実施例で示した中央処理装置で、図2の
プログラムを実行した場合の動作を以下に示す。
【0061】図2のプログラムで、I1は条件分岐命令
であり、分岐予測回路110で分岐しないと予測する
が、実際には分岐を行う。
【0062】I2,I5,I8,I13は読みだし命令
であり、例えば“LD A,R1”は主記憶のアドレス
Aの値をレジスタR1に読み込むことを示す。
【0063】I9は書き込み命令であり、”ST R
3,A”はレジスタR3の値を主記憶のアドレスAに書
き込むことを示す。
【0064】I3,I4,I6,I7,I10,I1
1,I12はそれぞれR1,R2,R3,R4とは無関
係の演算命令である。
【0065】I14はレジスタR2を使用する演算命令
である。
【0066】本実施例では、読みだし命令は主記憶を読
みだす時間を含めると10サイクル、その他の命令は読
みだし中のデータを使用しない場合1サイクルの実行時
間がかかるとし、分岐予測の5サイクル後に分岐実行結
果がわかるものとする。
【0067】図2のプログラムの実行タイミングを図3
に示す。
【0068】(1)1サイクル目に分岐命令を読みだす
と、分岐予測回路110は分岐しないと予測し、分岐予
測データを“10”とする。この後、分岐実行結果が得
られるまでの5サイクルの間、I2,I3,I4,I
8,I9の投機実行を行う。この時、主記憶アクセスユ
ニット160は読みだしバッファ180に対して、2サ
イクル目にI2,5サイクル目にI8の読みだし発行処
理が発行され、読みだし発行処理(2)に従って読みだ
しバッファ180に格納される。また、6サイクル目に
I9の書き込み発行処理が発行され、書き込み発行処理
(2)が実行され、アドレスAのデータを保持する読み
だしバッファエントリの読みだし許可フラグ180hを
“0”とする。この時の読みだしバッファ180の状態
を図5に示す。
【0069】(2)6サイクル目の最後に分岐ユニット
150で分岐実行結果が得られると、読みだしバッファ
180に分岐結果処理が発行される。この時、分岐実行
結果は分岐を行うため、分岐結果データは“11”とな
る。読みだしバッファ180は、分岐結果処理(2)に
従いI2,I9に対応する読みだしバッファエントリの
分岐予測誤りフラグ180cを“1”とする。
【0070】(3)7サイクル目には投機実行中ではな
いため分岐予測データは“00”となり、正しい命令列
I5,I6,I7が実行され、I5が読みだしバッファ
180に読みだし発行処理(2)により登録される。
【0071】(4)10サイクル目には、I8が実行さ
れ、主記憶アクセスユニット160は読みだしバッファ
180に対し、読みだし発行処理を発行する。読みだし
バッファ180は、読みだし発行処理(1c)に従い5
サイクル目のI8で発行され、分岐予測を誤った読みだ
し命令の結果を使用できるようにする。
【0072】(5)2サイクル目に発行したI2の結果
は、12サイクル目にデータ到着処理により読みだしバ
ッファ180に戻される。この時、読みだしバッファ1
80は、I2に対応する読みだしバッファエントリの読
みだし許可フラグ180hが“0”であるため、今後こ
の読みだしバッファエントリの読みだしデータは再利用
されないことを知り、データ到着処理(3)に従いエント
リ有効フラグ180aを“0”とする。
【0073】(6)5サイクル目に発行したI8の結果
は、15サイクル目にデータ到着処理により読みだしバ
ッファ180に戻される。この時、データ到着処理によ
り、読みだし結果が読みだしバッファ180からリオー
ダバッファ190を通してレジスタファイル130に格
納される。この時の読みだしバッファ180の状態を図
6に示す。
【0074】(7)16サイクル目のI14実行時に
は、レジスタR2に既にアドレスCの読みだし結果が格
納されており、I14が実行できる。
【0075】以上により、図2に示す命令列は16サイ
クルで実行される。
【0076】これに対し、本発明を利用せず、分岐予測
を誤った場合に投機実行した全ての命令を破棄すること
を考える。この時、投機実行したI5は6サイクル目の
最後に破棄され、I14は10サイクル目に実行するI
8の結果を待たなければならない。このため、図4に示
すようにI14の実行は21サイクル目まで待たされ
る。よって、本発明を利用しない場合、図2に示す命令
列の実行には21サイクルかかる。
【0077】以上の実施例によれば、読みだしバッファ
180の各エントリに分岐予測フィールド180bおよ
び分岐予測誤りフラグ180cを設け、分岐予測を誤っ
た場合でも投機実行した読みだし命令の読みだし結果を
利用可能とすることで、読みだし結果の待ち時間を短縮
することができ、中央処理装置の性能を向上することが
できる。
【0078】〈実施例2〉本発明の実施例2を説明す
る。本実施例は実施例1の変形であるため、相違点につ
いてのみ説明する。本実施例は、主記憶アクセスユニッ
ト160,書き込みバッファ170,読みだしバッファ
180の構造を変更し、書き込みバッファ内に存在する
データの読みだし時には主記憶を読みださず、書き込み
バッファのデータを読みだしデータとして使用可能とす
る点が異なる。
【0079】図7は本実施例の中央処理装置を示す。
【0080】本実施例の中央処理装置では、主記憶アク
セスユニット260は命令発行回路220から受けた読
みだし命令および書き込み命令を、書き込みバッファ2
70に対して発行する。
【0081】書き込みバッファ270は、エントリ毎に
書き込み要求の有効を示すエントリ有効フラグ270
a,書き込み命令の分岐予測データを格納する分岐予測
フィールド270b,書き込みアドレスフィールド27
0c,書き込みデータフィールド270dのフィールド
を持つ。
【0082】書き込みバッファ270に関する処理は、
以下に示す種類が存在する。
【0083】(書き込み発行処理)書き込みバッファ2
70は、主記憶アクセスユニット260から、書き込み
アドレス,分岐予測データおよび書き込みデータを受信
し、書き込み命令の発行を行う。
【0084】(1)エントリ有効フラグ270aが
“0”の書き込みバッファエントリが存在する場合、書
き込みアドレスおよび書き込みデータを書き込みバッフ
ァエントリの書き込みアドレスフィールド270cおよ
び書き込みデータフィールド270dに書き込み、エントリ
有効フラグ270aを“1”とする。
【0085】(2)エントリ有効フラグ270aが
“0”の書き込みバッファエントリが存在しない場合、
(1)が実行できるまで新たな書き込み発行処理を受け
付けず待つ。
【0086】(3)(1)または(2)の後、読みだし
バッファ280に書き込みアドレスを与え、書き込み発
行処理を行う。
【0087】(主記憶アクセス発行処理)書き込みバッ
ファ270は、エントリ有効フラグ270aが“1”か
つ分岐予測フィールド270bが“00”の書き込みバ
ッファエントリについて、書き込みアドレスおよび書き
込みデータを与え、主記憶書き込みを発行する。主記憶
書き込みは、書き込みバッファ270への登録順に従っ
て行う。この後、エントリ有効フラグ270aを“0”
とする。
【0088】(分岐結果処理)書き込みバッファ270
は、分岐ユニット250から分岐結果データを受けて、
分岐結果を受信し、以下に示す分岐結果処理を行う。
【0089】(1)エントリ有効フラグ270aが
“1”かつ、分岐予測フィールド270bが“00”で
なく、分岐予測フィールド270bと分岐結果データが
一致する全ての書き込みバッファエントリで、分岐予測
フィールド270bを“00”とする。
【0090】(2)エントリ有効フラグが“1”かつ、
分岐予測フィールド270bが“00”でなく、分岐予測
フィールド270bと分岐結果データが一致しない全て
の書き込みバッファエントリで、エントリ有効フラグ2
70aを“0”とする。
【0091】(読みだし発行処理)書き込みバッファ2
70は、主記憶アクセスユニット260から読みだしア
ドレス,分岐予測データおよび書き込みレジスタ番号を
受信し、以下に示す読みだし発行処理を行う。
【0092】(1)エントリ有効フラグ270aが
“1”かつ、書き込みアドレスフィールド270cが読
みだしアドレスと一致するエントリが存在する場合、最
も後に登録された書き込みバッファエントリを検索す
る。この後、読みだしアドレス,分岐予測データ,書き
込みレジスタ番号,当該書き込みバッファエントリの分
岐予測フィールド270b,当該書き込みバッファエン
トリの書き込みデータ270dを読みだしバッファ28
0に与え、読みだしバッファ280の読みだし発行処理
を行う。
【0093】(2)(1)以外の場合、読みだしアドレ
ス,分岐予測データ,書き込みレジスタ番号を読みだし
バッファ280に与え、読みだしバッファ280の読み
だし発行処理を行う。
【0094】読みだしバッファ280は、実施例1の読
みだしバッファ180に加えて書き込みデータ分岐予測
フィールド280iを持つ。書き込みデータ分岐予測フ
ィールド280iは、書き込みバッファ270のデータ
を読みだし結果として使用した後、書き込み命令が分岐
予測誤りのために破棄された場合に、この書き込み結果
を使用する読みだしバッファエントリを破棄するために
設けてある。
【0095】本実施例では、実施例1の読みだし発行処
理,分岐結果処理を以下に示すように変更する。
【0096】(読みだし発行処理)読みだしバッファ2
80は、書き込みバッファ270から読みだしアドレ
ス,分岐予測データおよび書き込みレジスタ番号を受信
し、以下に示す読みだし発行処理を行う。
【0097】(1)エントリ有効フラグ280aおよび
読みだし許可フラグ280hが“1”、かつ、読みだし
アドレスと読みだしバッファエントリの読みだしアドレ
スフィールド280dが一致、かつ、分岐予測誤りフラ
グ280cと読みだし完了フラグ280eの少なくとも
片方が“1”の場合、(1a)〜(1c)のいずれかの処
理を行う。
【0098】(1a)分岐予測誤りフラグ280cおよび
読みだし完了フラグ280eが“1”の場合、当該エン
トリの読みだしデータフィールド280fを書き込みデ
ータ,主記憶アクセスユニット160から受けた書き込
みレジスタ番号を書き込みレジスタ番号として、リオー
ダバッファ290に書き込みを発行する。
【0099】これにより、以前に投機実行し、分岐予測
が誤った読みだし命令と同一アドレスに対する後続の読
みだし命令は、以前の読みだし結果を使うことができ
る。
【0100】(1b)分岐予測誤りフラグ280cが
“0”,読みだし完了フラグ280eが“1”の場合、
当該エントリの読みだしデータフィールド280fを書
き込みデータ,レジスタフィールド280gを書き込み
レジスタ番号として、リオーダバッファ290に書き込
みを発行する。
【0101】これにより、以前に発行した読みだし命令
と同一アドレスに対する後続の読みだし命令は、以前の
読みだし結果を使うことができる。
【0102】(1c)分岐予測誤りフラグ280cが
“1”,読みだし完了フラグ280eが“0”かつ読み
だし発行処理に書き込みデータフィールド270dおよ
び書き込みデータの分岐予測フィールド270bが伴っ
ていない場合、当該エントリの分岐予測フィールド28
0bを分岐予測データ,レジスタフィールド280gを
レジスタ番号に設定する。
【0103】これにより、以前に投機実行し、分岐予測
が誤った読みだし命令と同一アドレスに対する後続の読
みだし命令は、以前の読みだし結果が主記憶から戻るの
を待って使うことができる。
【0104】(2)(1)の条件に該当せず、エントリ
有効ビット280aが“0”であるエントリが存在する
場合、このエントリの読みだし発行の読みだしアドレ
ス,分岐予測データ,レジスタ番号を、読みだしアドレ
スフィールド280d,分岐予測フィールド280b,
レジスタフィールド280gに設定し、エントリ有効ビ
ット280aおよび読みだし許可フラグ280hを
“1”,分岐予測誤りフラグ280cおよび読みだし完
了フラグ280eを“0”に設定する。
【0105】この後、読みだし発行処理に書き込みデー
タフィールド270dおよび書き込みデータの分岐予測
フィールド270bが伴っている場合、これらを当該読
みだしバッファエントリの読みだしデータフィールド2
80f,書き込みデータ分岐予測フィールド280iに
書き込み、主記憶読みだし完了フラグ280cを“1”
として、(1a)の処理を行う。
【0106】読みだし発行処理に書き込みデータフィー
ルド270dおよび書き込みデータの分岐予測フィール
ド270bが伴っていない場合、書き込みデータ分岐予
測フィールド280iを“00”,読みだしアドレスフ
ィールド280dを読みだしアドレスとし、当該エント
リのエントリ番号を読みだしバッファ番号として、記憶
制御回路200に主記憶アクセスを発行する。
【0107】(3)(1),(2)の条件に該当せず、エ
ントリ有効フラグ280aおよび読みだし完了フラグ2
80eが“1”、かつ、読みだし許可フラグ280hが
“0”かつ、読みだしアドレスと読みだしバッファエン
トリの読みだしアドレスフィールド280dが一致する
エントリが存在する場合、(2)と同一の動作を行う。
【0108】(4)(1),(2),(3)の条件に該当せ
ず、エントリ有効ビット280a,読みだし許可フラグ
280hが全て“1”のエントリが存在する場合、
(2)と同一の動作を行う。
【0109】これにより、読みだしバッファエントリが
全て有効の場合に、分岐予測が誤った読みだしバッファ
エントリを消去して使用することができる。
【0110】(5)(1)から(4)のいずれの条件に
も該当しない場合、(1)から(4)のいずれかが実行
できるまで新たな読みだし発行処理を受け付けず待つ。
【0111】(分岐結果処理)読みだしバッファ280
は、分岐ユニット250から分岐結果データを受けて、
以下に示す分岐結果処理を行う。
【0112】(1)エントリ有効フラグ280aが
“1”かつ、分岐予測フィールド280bが“10”ま
たは“11”かつ、分岐予測フィールド280bが分岐
結果データと一致する全てのエントリで、(1a)書き
込みデータ命令予測フィールド280iが“00”または、
分岐結果データと一致する場合、分岐予測フィールド28
0bおよび書き込みデータ命令予測フィールド280iを
“00”とする。(1b)(1a)以外の場合、読みだ
し許可フラグ280hを“0”とする。
【0113】(2)エントリ有効フラグ280aが
“1”かつ、分岐予測フィールド280bが“10”ま
たは“11”かつ、分岐予測フィールド280bが分岐
結果データと一致しない全てのエントリで、(2a)書
き込みデータ命令予測フィールド280iが“00”ま
たは、分岐結果データと一致する場合、分岐予測フィー
ルド280bを分岐結果データとし、分岐予測誤りフラ
グ280cを“1”とする。
【0114】(2b)(2a)以外の場合、読みだし許
可フラグ280hを“0”とする。
【0115】これにより、読みだし命令発行時に、書き
込みバッファ270のデータを読みだし結果とし、書き
込みデータが分岐予測誤りのため実行されない場合に、
当該読みだしバッファエントリを読みだし不可とするこ
とができる。
【0116】本実施例では、実施例1に加えて読みだし
バッファエントリに書き込みデータ分岐予測フィールド
280iを設けることに特徴がある。
【0117】本実施例で示した中央処理装置で、図8の
プログラムを実行した場合の動作を以下に示す。
【0118】(1)1サイクル目にI1が実行される
と、R1の値が書き込みバッファ270に登録される。
I1の書き込み命令が記憶制御回路200に対して未発
行の場合、2サイクル目の読みだし命令I2は書き込み
バッファ270の読みだし発行処理(1)に従い、書き
込みデータを読みだし値として使用する。
【0119】これにより、以前に同一アドレスに書き込
みを発行した場合、読みだし命令は以前の書き込みデー
タを利用することができ、主記憶から読みだした場合と
比較して読みだしにかかる時間が短くなり、性能を向上
することができる。
【0120】(2)3サイクル目の条件分岐命令は、分
岐予測回路210では分岐しないと予測されるが、実際
には分岐を行う命令である。この時、分岐実行結果が得
られるまでの5サイクルの間、分岐予測データ“10”
としてI4,I5および後続命令の投機実行を行う。
【0121】(3)I4の実行時、書き込みバッファ2
70は書き込み発行処理(1)に従い、書き込みアドレ
スフィールド270cをアドレスA,書き込みデータフ
ィールド270dをR1の値,分岐予測フィールドを
“10”として書き込みバッファ270に格納される。
【0122】(4)I5の実行時、書き込みバッファ2
70は書き込みバッファ270の読みだし発行処理
(1)に従い、読みだしアドレス,分岐予測データ,書
き込みレジスタ番号,当該書き込みバッファエントリの
分岐予測フィールド270bを読みだしバッファ280
に与え、読みだしバッファ280の読みだし発行処理を
行う。
【0123】読みだしバッファ280は読みだしバッフ
ァ280の読みだし発行処理(2)に従い、このエントリ
の読みだしアドレスフィールド280d,分岐予測フィ
ールド280b,書き込みレジスタフィールド280g
を読みだし発行の読みだしアドレス,分岐予測データ,
レジスタ番号に設定し、エントリ有効ビット280aお
よび読みだし許可フラグ280hを“1”,分岐予測誤
りフラグ280cおよび読みだし完了フラグ280eを
“0”,読みだしデータフィールド280f,書き込み
データ分岐予測フィールド280iに書き込み、主記憶
読みだし完了フラグ280cを“1”する。この後、読
みだしデータフィールド280fを書き込みデータ,レ
ジスタフィールド280gを書き込みレジスタ番号とし
て、リオーダバッファ290に書き込みを発行する。こ
の時の読みだしバッファ280および書き込みバッファ
270の状態を図9に示す。
【0124】(5)分岐ユニット250で分岐実行結果
が得られると、書き込みバッファ270および読みだしバ
ッファ280に分岐結果処理が発行される。この時の分
岐実行結果は、分岐を行うため“11”となる。
【0125】この時、書き込みバッファ270は、書き
込みバッファ270の分岐結果処理(1)に従い、アド
レスAへのR2の値の書き込みの書き込みバッファエン
トリのエントリ有効フラグ270aを“0”とする。
【0126】読みだしバッファ280は、読みだしバッ
ファ280の分岐結果処理(2b)に従い、アドレスA
からの読みだしのエントリの読みだし許可フラグ280
hを“0”とする。
【0127】(6)(5)以降分岐予測データは“0
0”となり、I5以降の命令が正しい命令列として実行
され、I5の実行時には読みだしバッファ280の読み
だし発行処理(2)に従い記憶制御回路200に主記憶
の読みだしが発行される。よって、I5に対応する読み
だしバッファエントリの読みだしデータフィールド280f
を、誤って使用することはない。
【0128】読みだしバッファ280は、書き込み命令
の分岐予測データを保持するために書き込みデータ分岐
予測フィールド280iを設けることで、主記憶アクセ
スユニット260は、読みだし命令を書き込みバッファ
270に発行し、書き込みバッファ270は同一アドレ
スへの書き込みがあれば書き込み値を読みだしデータと
して読みだしバッファに与えることができる。これによ
り、書き込み命令の後に同一アドレスに読みだしを発行
する場合、読みだし結果の待ち時間を短縮することがで
き、中央処理装置の性能を向上することができる。
【0129】〈実施例3〉本発明の実施例3を説明す
る。本実施例は実施例1の変形であるため、相違点につ
いてのみ説明する。本実施例は、読みだし命令および書
き込み命令を共通のバッファに格納する点が異なる。
【0130】図10は本実施例の中央処理装置を示す。
【0131】本実施例の中央処理装置では、主記憶アク
セスユニット360は命令発行回路320から受けた読
みだし命令および書き込み命令を、アクセスバッファ3
85に対して発行する。
【0132】アクセスバッファ385はエントリ毎に読
みだしまたは書き込み要求の有効を示すエントリ有効フ
ラグ385a,アクセスバッファエントリが書き込み命
令を保持していることを示す書き込みフラグ385j,
読みだし命令または書き込み命令の分岐予測データを格
納する分岐予測フィールド385b,読みだし命令に対
応する分岐予測の誤りを示す分岐予測誤りフラグ385
c,アドレスフィールド385d,主記憶の読みだしが
完了したことを示す読みだし完了フラグ385e,主記憶読
みだし結果または書き込み値を一旦保持するデータフィ
ールド385f,主記憶読みだし結果を書き込むレジス
タ番号を示すレジスタフィールド385g,後続の読みだし
命令が当該エントリのデータを使うことを許可する読み
だし許可フラグ385hのフィールドを持つ。
【0133】本実施例では、アクセスバッファエントリ
を読みだし命令の場合には書き込みフラグ385jを
“0”として使用し、書き込み命令の場合には書き込み
フラグ385jを“1”として使用する。これにより、
アクセスバッファエントリが読みだしまたは書き込みの
いずれのエントリとして使用されているかを区別でき、
共通のアクセスバッファ385で読みだしバッファおよ
び書き込みバッファの両方の役割を持つことができる。
【0134】読みだしバッファおよび書き込みバッファ
双方の機能を共通のアクセスバッファ385に持たせる
ことで、読みだしバッファと書き込みバッファを別に設
ける必要がなくなり、ハードウェア量を減らすことがで
きる。
【0135】〈実施例4〉以下に本発明の実施例4を説
明する。本実施例は実施例2の変形であるため、相違点
についてのみ説明する。本実施例は、読みだしバッファ
に読みだしデータフィールドを設ける代わりに、リオー
ダバッファに格納したデータを読みだしデータとして利
用可能とする点が異なる。
【0136】図11は、本実施例の中央処理装置を示
す。
【0137】リオーダバッファ490は、エントリ毎に
リオーダバッファエントリの有効を示すエントリ有効フ
ラグ490a,レジスタ書き込み処理の分岐予測データ
を格納する分岐予測フィールド490b,レジスタ書き
込み処理に対応する分岐予測の誤りを示す分岐予測誤り
フラグ490c,レジスタへの書き込み値を保持するデ
ータフィールド490f,データフィールド490fの
値を書き込むレジスタ番号を保持する書き込みレジスタ
フィールド490g,読みだし命令フラグ490kのフィー
ルドを持つ。
【0138】リオーダバッファ490は、演算ユニット
440から受けた演算結果または主記憶アクセスユニッ
ト460から受けた読みだし結果を一旦格納し、レジス
タファイル430に書き込む。投機実行した命令につい
ては、分岐ユニット450から分岐実行結果を得て、分
岐予測が正しかった場合は投機実行した命令の結果をレ
ジスタファイル430に書き込むが、分岐予測が誤って
いた場合は投機実行した命令の結果をレジスタファイル
430に書き込まない。本実施例では、リオーダバッフ
ァ490は、従来のリオーダバッファの機能に加え、投
機実行し、分岐予測を誤った読みだし命令の読みだし結
果を保持する機能を持つ。
【0139】リオーダバッファ490に関する処理は、
リオーダバッファ書き込み処理,レジスタ書き込み処
理,分岐結果処理,リオーダバッファ解放処理,リオー
ダバッファ変更処理が存在する。以下に、リオーダバッ
ファ書き込み処理,分岐結果処理,レジスタ書き込み処
理,リオーダバッファ変更処理を説明する。
【0140】(リオーダバッファ書き込み処理)リオー
ダバッファ490は、演算ユニット440,分岐ユニッ
ト450,主記憶アクセスユニット460のいずれかか
ら分岐予測データ,書き込みレジスタ番号,書き込みデ
ータを伴ったリオーダバッファ書き込み処理の要求を受
け、以下に示すリオーダバッファ書き込み処理を行う。
【0141】(1)エントリ有効フラグ490aが
“0”のエントリが存在する場合、当該エントリのエン
トリ有効フラグ490aを“1”,分岐予測フィールド
490bを分岐予測データ,分岐予測誤りフラグ490
cを“0”,書き込みレジスタフィールド490gを書
き込みレジスタ番号,データフィールド490fを書き
込みデータ値とし、エントリを確保する。
【0142】発行する命令が読みだし命令の場合にのみ
読みだし命令フラグ490kを“1”とし、エントリ番
号を読みだしバッファ480に返す。
【0143】(2)エントリ有効フラグ490aが
“0”のエントリが存在せず、分岐予測誤りフラグが
“1”のエントリが存在する場合、当該エントリのエン
トリ有効フラグ490aを“1”,分岐予測フィールド
490bを分岐予測データ,分岐予測誤りフラグ490
cを“0”,データ有効フラグ490eを“0”,書き
込みレジスタフィールド490gを書き込みレジスタ番
号,書き込みデータをデータフィールド490fとし、
エントリを確保する。
【0144】発行する命令が読みだし命令の場合にのみ
読みだし命令フラグ490kを“1”とし、エントリ番
号を読みだしバッファ480に返す。
【0145】この後、読みだしバッファ480に対して
当該エントリのリオーダバッファ番号と共にリオーダバ
ッファ解放処理を発行する。
【0146】(3)(1)および(2)以外の場合、使
用可能なリオーダバッファエントリが存在しないため、
(1)または(2)のいずれかの条件を満たすまでエン
トリ確保処理を受け付けず待つ。
【0147】(レジスタ書き込み処理)リオーダバッフ
ァ490は、エントリ有効フラグ490aが“1”,分
岐予測フィールド490bが“00”のエントリが存在
する場合、以下の処理を行う。
【0148】(1)当該エントリの書き込みレジスタフ
ィールド490gを書き込みレジスタ番号,データフィ
ールド490fをレジスタ書き込み値としてレジスタ書
き込みを行う。この後、当該エントリのエントリ有効フ
ラグ490aを“0”とする。読みだし命令フラグ49
0kが“1”の場合には、読みだしバッファ480に対
して当該エントリのリオーダバッファ番号と共にリオー
ダバッファ解放処理を発行する。
【0149】(分岐結果処理)リオーダバッファ490
は、分岐ユニット450から分岐結果データを受けて、
以下に示す処理を行う。
【0150】(1)エントリ有効フラグ490aが
“1”かつ、分岐予測フィールド490bが“10”ま
たは“11”かつ、分岐予測フィールド490bが分岐
結果データと一致する全てのエントリで、分岐予測フィ
ールド490bを“00”とし、分岐予測誤りフラグ4
90cを“0”とする。
【0151】(2)エントリ有効フラグ490aが
“1”かつ、分岐予測フィールド490bが“10”ま
たは“11”かつ、分岐予測フィールド480bが分岐
結果データと一致しない全てのエントリで、分岐予測フ
ィールド480bを分岐結果データとし、分岐予測誤り
フラグ480cを“1”とする。
【0152】この後、当該エントリが読みだし命令フラ
グ490kが“0”の場合、エントリ有効フラグ390
aを“0”とし、リオーダバッファエントリを解放す
る。
【0153】これにより、分岐予測を誤って実行した読
みだし命令に対応するリオーダバッファエントリについ
て、エントリを有効としたまま分岐予測の誤りを設定す
ることができる。
【0154】(リオーダバッファ変更処理)リオーダバ
ッファ490は、主記憶アクセスユニット460からリ
オーダバッファ番号,分岐予測データ,書き込みレジス
タ番号,書き込みデータを受け、以下に示すリオーダバ
ッファ変更処理を行う。
【0155】(1)リオーダバッファ番号に対応するリ
オーダバッファエントリの、分岐予測データ,書き込み
データ,書き込みレジスタ番号をそれぞれ順に分岐予測
データフィールド490b,データフィールド490
f,レジスタ番号フィールド490gに格納する。
【0156】(2)分岐予測誤りビット490cを
“0”とし、読みだし命令フラグ490kを“1”とす
る。
【0157】読みだしバッファ480は、エントリ毎に
読みだし要求の有効を示すエントリ有効フラグ480
a,読みだし命令の分岐予測データを格納する分岐予測
フィールド480b,読みだし命令に対応する分岐予測
の誤りを示す分岐予測誤りフラグ480c,読みだしア
ドレスフィールド480d,主記憶の読みだしが完了し
たことを示す読みだし完了フラグ480e,主記憶読み
だし結果を格納するリオーダバッファ番号フィールド4
80f,主記憶読みだし結果を格納するリオーダバッフ
ァエントリが存在することを示すリオーダバッファ存在
フラグ480j,主記憶読みだし結果を書き込むレジス
タ番号を示すレジスタフィールド480g,後続の読み
だし命令が当該エントリのデータを使うことを許可する
読みだし許可フラグ480h,書き込みバッファ470
の書き込みデータを読みだしデータとして使用する場合
の分岐予測データを格納する書き込みデータ分岐予測フ
ィールド480iのフィールドを持つ。
【0158】本実施例では、実施例2の読みだし発行処
理,分岐結果処理,データ到着処理を以下に示すように
変更し、リオーダバッファ解放処理を追加する。
【0159】(読みだし発行処理)読みだしバッファ4
80は、書き込みバッファ470から読みだしアドレ
ス,リオーダバッファ番号,分岐予測データおよび書き
込みレジスタ番号を受信し、以下に示す読みだし発行処
理を行う。
【0160】(1)エントリ有効フラグ480aおよび
読みだし許可フラグ480hが“1”、かつ、読みだし
アドレスと読みだしバッファエントリの読みだしアドレ
スフィールド480dが一致した場合、以下の処理を行
う。
【0161】(1a)分岐予測誤りフラグ480cが
“1”かつ、リオーダバッファ存在フラグ480jが
“1”の場合、当該エントリの分岐予測フィールド48
0bを分岐予測データ,レジスタフィールド480gを
書き込みレジスタ番号,分岐予測誤りフラグ480cを
“0”に設定する。
【0162】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っている場合、当該読みだしバッファエ
ントリの書き込みデータ分岐予測フィールド480iに
書き込みデータの分岐予測フィールド470bの値を書
き込み、主記憶読みだし完了フラグ480eを“1”と
する。この後、主記憶アクセスユニット460を経由し
てリオーダバッファ490にリオーダバッファ番号48
0f,分岐予測データ,書き込みレジスタ番号,書き込
みデータを与え、リオーダバッファ変更処理を発行す
る。
【0163】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っていない場合、書き込みデータ分岐予
測フィールド480iを“00”,読みだしアドレスフ
ィールド480dを読みだしアドレスとし、当該エント
リのエントリ番号を読みだしバッファ番号として、記憶
制御回路400に主記憶アクセスを発行する。
【0164】(1b)分岐予測誤りフラグ480cが
“1”かつ、リオーダバッファ存在フラグ480jが
“0”の場合、このエントリの読みだしアドレスフィー
ルド480d,分岐予測フィールド480b,レジスタ
フィールド480gを読みだし発行の読みだしアドレ
ス,分岐予測データ,レジスタ番号に設定し、エントリ
有効ビット480aおよび読みだし許可フラグ480h
を“1”,分岐予測誤りフラグ480cおよび読みだし
完了フラグ480eを“0”に設定する。
【0165】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っている場合、当該読みだしバッファエ
ントリの書き込みデータ分岐予測フィールド480iに
書き込みデータの分岐予測フィールド470bの値を書
き込み、リオーダバッファ存在フラグ480jおよび主
記憶読みだし完了フラグ480eを“1”とする。この
後、主記憶アクセスユニット460を経由してリオーダ
バッファ490に分岐予測データ,書き込みレジスタ番
号,書き込みデータを与え、リオーダバッファ書き込み
処理を発行し、リオーダバッファ490からリオーダバ
ッファ番号を得て、リオーダバッファ番号フィールド4
80fに格納する。
【0166】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っていない場合、書き込みデータ分岐予
測フィールド480iを“00”,読みだしアドレスフ
ィールド480dを読みだしアドレスとし、当該エント
リのエントリ番号を読みだしバッファ番号として、記憶
制御回路400に主記憶アクセスを発行する。
【0167】(2)(1)の条件に該当せず、エントリ
有効フラグ480aが“0”であるエントリが存在する
場合、このエントリの読みだしアドレスフィールド48
0d,分岐予測フィールド480b,レジスタフィール
ド480gを読みだし発行の読みだしアドレス,分岐予
測データ,レジスタ番号に設定し、エントリ有効フラグ
480aおよび読みだし許可フラグ480hを“1”,
分岐予測誤りフラグ480cおよび読みだし完了フラグ
480eを“0”に設定する。
【0168】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っている場合、当該読みだしバッファエ
ントリの書き込みデータ分岐予測フィールド480iに
書き込みデータの分岐予測フィールド470bの値を書
き込み、リオーダバッファ存在フラグ480j,読みだ
し完了フラグ480eを“1”とする。この後、主記憶
アクセスユニット460を経由してリオーダバッファ49
0に分岐予測データ,書き込みレジスタ番号,書き込み
データを与え、リオーダバッファ書き込み処理を発行
し、リオーダバッファ490からリオーダバッファ番号
を得て、リオーダバッファ番号フィールド480fに格
納する。
【0169】読みだし発行処理に書き込みデータフィー
ルド470dおよび書き込みデータの分岐予測フィール
ド470bが伴っていない場合、書き込みデータ分岐予
測フィールド480iを“00”,読みだしアドレスフ
ィールド480dを読みだしアドレスとし、当該エント
リのエントリ番号を読みだしバッファ番号とし、リオー
ダバッファ存在フラグ480jを“0”として、記憶制
御回路400に主記憶アクセスを発行する。
【0170】(3)(1),(2)の条件に該当せず、エ
ントリ有効フラグ480aおよび読みだし完了フラグ4
80eが“1”かつ、読みだし許可フラグ480hが
“0”かつ、読みだしアドレスと読みだしバッファエン
トリの読みだしアドレスフィールド480dが一致する
エントリが存在する場合、(2)と同一の動作を行う。
【0171】(4)(1),(2),(3)の条件に該当
せず、エントリ有効フラグ480a,読みだし許可フラ
グ480hが全て“1”のエントリが存在する場合、
(2)と同一の動作を行う。
【0172】(5)(1)から(4)のいずれの条件に
も該当しない場合、(1)から(4)のいずれかが実行
できるまで新たな読みだし発行処理を受け付けず待つ。
【0173】以上により、読みだしバッファエントリが
全て有効の場合に、分岐予測が誤った読みだしバッファ
エントリを消去して使用することができる。
【0174】(分岐結果処理)読みだしバッファ480
は、分岐ユニット450から分岐結果データを受けて、
以下に示す分岐結果処理を行う。
【0175】(1)エントリ有効フラグ480aが
“1”かつ、分岐予測フィールド480bが“10”ま
たは“11”かつ、分岐予測フィールド480bが分岐
結果データと一致する全てのエントリで、(1a)書き
込みデータ命令予測フィールド480iが“00”また
は、分岐結果データと一致する場合、分岐予測フィール
ド480bおよび書き込みデータ命令予測フィールド48
0iを“00”とし、分岐予測誤りフラグ480cを
“0”とする。
【0176】(1b)(1a)以外の場合、読みだし許
可フラグ480hを“0”とする。
【0177】(2)エントリ有効フラグ480aが
“1”かつ、分岐予測フィールド480bが“10”ま
たは“11”かつ、分岐予測フィールド480bが分岐
結果データと一致しない全てのエントリで、(2a)書
き込みデータ命令予測フィールド480iが“00”ま
たは、分岐結果データと一致する場合、分岐予測フィー
ルド480bを分岐結果データとし、分岐予測誤りフラ
グ480cを“1”とする。
【0178】(2b)(2a)以外の場合、読みだし許
可フラグ480hを“0”とする。
【0179】これにより、読みだし命令発行時に、書き
込みバッファ470のデータを読みだし結果とし、書き
込みデータが分岐予測誤りのため実行されない場合に、
当該読みだしバッファエントリを使用不可とすることが
できる。
【0180】(データ到着処理)読みだしバッファ48
0は、記憶制御回路400から主記憶読みだし結果のデ
ータと読みだしバッファ番号を受信し、以下の処理を行
う。
【0181】(1)読みだしバッファ番号で指定される
読みだしバッファエントリの、読みだし完了フラグ48
0eを“1”とする。
【0182】(2)当該エントリのリオーダバッファ存
在フラグ480fが“1”の場合、主記憶アクセスユニ
ット460を経由してリオーダバッファ490に分岐予
測データ,書き込みレジスタ番号,書き込みデータを与
え、リオーダバッファ変更処理を発行する。
【0183】(3)(2)以外の場合、主記憶アクセス
ユニット460を経由してリオーダバッファ490に分
岐予測データ,書き込みレジスタ番号,書き込みデータ
を与え、リオーダバッファ書き込み処理を発行し、リオ
ーダバッファ490からリオーダバッファ番号を得て、
リオーダバッファ番号フィールド480fに格納する。
【0184】(リオーダバッファ解放処理)読みだしバ
ッファ490は、リオーダバッファ480からリオーダ
バッファ番号を受け、以下の処理を行う。
【0185】(1)リオーダバッファ番号フィールド4
80fがリオーダバッファ番号と一致する全ての読みだ
しバッファエントリのリオーダバッファ存在フラグ48
0jを“0”とする。
【0186】読みだしバッファ480に読みだしデータ
フィールドを設ける代わりに、リオーダバッファ番号フ
ィールド480fおよびリオーダバッファ存在フラグ48
0jを設けたことにより、分岐予測を誤った読みだし命令
の読みだし結果をリオーダバッファ490に格納し、後
続の同一アドレスへの読みだし命令で利用可能とするこ
とにより、実施例2と比較してハードウェア量を削減で
きる。
【0187】
【発明の効果】本発明によれば、分岐予測を誤った場合
でも投機実行した読みだし命令の読みだし結果が利用可
能となり、分岐予測が誤った読みだし命令と同一アドレ
スに読みだしを発行した場合の読みだし結果の待ち時間
を短縮することができ、中央処理装置の性能を向上する
ことができる。
【図面の簡単な説明】
【図1】本発明の実施例1の中央処理装置のブロック
図。
【図2】本発明の実施例1の動作例のプログラムのフロ
ーシート。
【図3】本発明の実施例1の動作例のプログラムの動作
を示す説明図。
【図4】本発明の実施例1の動作例のプログラムの動作
を示す説明図。
【図5】本発明の実施例1の動作の読みだしバッファの
内容を示す説明図。
【図6】本発明の実施例1の動作の読みだしバッファの
内容を示す説明図。
【図7】本発明の実施例2の中央処理装置のブロック
図。
【図8】本発明の実施例2の動作例のプログラムのフロ
ーチャート。
【図9】本発明の実施例2の動作の読みだしバッファお
よび書き込みバッファの内容を示す説明図。
【図10】本発明の実施例3の中央処理装置のブロック
図。
【図11】本発明の実施例4の中央処理装置のブロック
図。
【符号の説明】
100…記憶制御回路、102…バス、110…分岐予
測回路、120…命令発行回路、130…レジスタファ
イル、140…演算ユニット、150…分岐ユニット、
160…主記憶アクセスユニット、170…書き込みバ
ッファ、170a…エントリ有効フラグ、170b…分岐予
測フィールド、170c…書き込みアドレスフィール
ド、170d…書き込みデータフィールド、180…読
みだしバッファ、180a…エントリ有効フラグ、18
0b…分岐予測フィールド、180c…分岐予測誤りフラ
グ、180d…読みだしアドレスフィールド、180e
…読みだし完了フラグ、180f…読みだしデータフィ
ールド、180g…書き込みレジスタフィールド、18
0h…読みだし許可フラグ、190…リオーダバッフ
ァ。

Claims (12)

    (57)【特許請求の範囲】
  1. 【請求項1】1以上の分岐ユニットと、1以上の主記憶
    読みだし要求を格納する読みだしバッファと1以上の主
    記憶書き込み要求を格納する書き込みバッファを具備す
    る1以上の主記憶アクセスユニットと、分岐予測回路
    と、記憶制御回路とを具備する中央処理装置において、
    前記読みだしバッファは、各読みだしバッファエントリ
    毎にエントリ有効フラグと、1以上の分岐予測の結果実
    行されると判断された場合に各分岐予測の方向を特定す
    るための分岐予測フィールドと、前記エントリが分岐予
    測の誤りにより実行されないことを示す分岐予測誤りビ
    ットと、読みだしアドレスフィールドと、読みだしデー
    タフィールドと、主記憶読みだし完了フラグを具備し、
    分岐予測を誤った場合でも読みだし要求有効フラグが有
    効を示す前記読みだしバッファエントリ内の読みだしデ
    ータフィールドが利用可能であることを特徴とする中央
    処理装置。
  2. 【請求項2】前記分岐予測回路は、分岐予測の方向を特
    定するための分岐予測データを生成し、全ての命令に付
    加する請求項1に記載の中央処理装置。
  3. 【請求項3】前記主記憶アクセスユニットは、主記憶読
    みだし命令実行時に前記読みだしバッファに前記読みだ
    しバッファエントリを確保し、前記読みだしバッファエ
    ントリのエントリ有効フラグを有効とし、前記主記憶読
    みだし命令の分岐予測データを、前記読みだしバッファ
    エントリの分岐予測フィールドに記憶し、前記主記憶読
    みだし命令の対象アドレスを、前記読みだしバッファエ
    ントリの読みだしアドレスフィールドに記憶し、前記読
    みだしバッファエントリの分岐予測誤りフラグを誤り無
    しと設定し、前記読みだしバッファエントリの読みだし
    完了フラグを未完と設定し、読みだしアクセスを記憶制
    御回路に対して発行する請求項1または請求項2に記載
    の中央処理装置。
  4. 【請求項4】前記主記憶アクセスユニットは、前記記憶
    制御回路から記憶装置の読みだし結果が戻ると、読みだ
    し結果を対応する読みだしバッファエントリの読みだし
    データフィールドに格納し、前記読みだしバッファエン
    トリの読みだし完了フラグを完了と設定する請求項1,
    2または3に記載の中央処理装置。
  5. 【請求項5】前記分岐ユニットは、分岐の実行時に前記
    主記憶アクセスユニット内の全ての前記読みだしバッフ
    ァエントリの前記分岐予測フィールドと実際に分岐を実
    行してきた方向を比較し、分岐予測が誤っている全ての
    前記読みだしバッファエントリの分岐予測誤りフラグを
    誤りと設定する請求項1,2,3または4に記載の中央
    処理装置。
  6. 【請求項6】前記主記憶アクセスユニットは、前記主記
    憶書き込み命令の実行時に、分岐予測誤りフラグが誤り
    を示す全ての読みだしバッファエントリの読みだしアド
    レスフィールドと、書き込みアドレスの一部乃至全部の
    ビットを比較し、一致した全ての読みだしバッファエン
    トリのエントリ有効ビットを無効と設定する請求項1,
    2,3,4または5に記載の中央処理装置。
  7. 【請求項7】前記主記憶アクセスユニットは、前記主記
    憶読みだし命令の実行時にエントリ有効フラグが有効か
    つ分岐予測誤りフラグが誤りを示す全ての読みだしバッ
    ファエントリの読みだしアドレスフィールドと、主記憶
    読みだし命令の読みだしアドレスを比較し、一致した読
    みだしバッファエントリに対応する読みだしデータを、
    主記憶読みだし命令の読みだし結果として使用する請求
    項1,2,3,4,5または6に記載の中央処理装置。
  8. 【請求項8】前記書き込みバッファは、書き込み命令の
    アドレスおよびデータを一旦保持する1以上の書き込み
    バッファエントリからなり、前記主記憶アクセスユニッ
    トは、主記憶読みだし命令実行時に読みだしアドレスと
    書き込みバッファ内の全ての有効な書き込みバッファエ
    ントリの書き込みアドレスフィールドとを比較し、一致
    するエントリがある場合には前記書き込みバッファエン
    トリの書き込みデータフィールドを主記憶読みだし結果
    として使用する点が異なる請求項1,2,3,4,5,
    6または7に記載の中央処理装置。
  9. 【請求項9】前記分岐ユニットは、実行中の命令が当該
    命令以前の分岐命令で分岐または非分岐を選択してきた
    方を記録する分岐実行データを保持し、読みだしバッフ
    ァの各読みだしバッファエントリに分岐予測誤りフラグ
    を設ける代わりに、分岐実行データと各読みだしバッフ
    ァエントリの分岐予測フィールドを比較して予測と実行
    命令が一致した場合に分岐予測誤り無しと判断する点が
    異なる請求項1,2,3,4,5,6,7または8に記
    載の中央処理装置。
  10. 【請求項10】前記主記憶アクセスユニットは、主記憶
    読みだし命令の実行時に読みだしバッファの全ての読み
    だしバッファエントリのエントリ有効ビットが有効であ
    る場合、分岐予測誤りデータが誤りを示す読みだし要求
    を廃棄し、前記主記憶読みだし命令の読みだし要求を登
    録する点が異なる請求項1,2,3,4,5,6,7,
    8または9に記載の中央処理装置。
  11. 【請求項11】前記主記憶アクセスユニットに、読みだ
    しバッファと書き込みバッファを別個に設ける代わりに
    読みだし要求と書き込み要求の双方を登録することがで
    きるバッファを設ける点が異なる請求項1,2,3,
    4,5,6,7,8,9または10に記載の中央処理装
    置。
  12. 【請求項12】前記読みだしバッファに読みだしデータ
    フィールドを設ける代わりに、リオーダバッファ番号フ
    ィールドおよびリオーダバッファ存在フラグを設け、読
    みだしたデータをリオーダバッファに直接書き込む請求
    項1,2,3,4,5,6,7,8,9,10または1
    1に記載の中央処理装置。
JP05132296A 1996-03-08 1996-03-08 中央処理装置 Expired - Fee Related JP3473249B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP05132296A JP3473249B2 (ja) 1996-03-08 1996-03-08 中央処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP05132296A JP3473249B2 (ja) 1996-03-08 1996-03-08 中央処理装置

Publications (2)

Publication Number Publication Date
JPH09244892A JPH09244892A (ja) 1997-09-19
JP3473249B2 true JP3473249B2 (ja) 2003-12-02

Family

ID=12883688

Family Applications (1)

Application Number Title Priority Date Filing Date
JP05132296A Expired - Fee Related JP3473249B2 (ja) 1996-03-08 1996-03-08 中央処理装置

Country Status (1)

Country Link
JP (1) JP3473249B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3565314B2 (ja) 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
JP3518510B2 (ja) 2001-01-10 2004-04-12 日本電気株式会社 リオーダバッファの管理方法及びプロセッサ
US8006078B2 (en) 2007-04-13 2011-08-23 Samsung Electronics Co., Ltd. Central processing unit having branch instruction verification unit for secure program execution
JP5552042B2 (ja) 2010-12-27 2014-07-16 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラム解析の方法、システムおよびプログラム

Also Published As

Publication number Publication date
JPH09244892A (ja) 1997-09-19

Similar Documents

Publication Publication Date Title
JP3729087B2 (ja) マルチプロセッサシステム、データ依存投機実行制御装置およびその方法
US9471325B2 (en) Method and apparatus for selective renaming in a microprocessor
JPH0619707A (ja) 情報処理装置
JPH05204709A (ja) プロセッサ
CA2367324C (en) Re-order buffer managing method and processor
JP3473249B2 (ja) 中央処理装置
JP3727244B2 (ja) キャッシュシステムの制御回路
JP2001092657A (ja) 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体
JP6520416B2 (ja) 演算処理装置および演算処理装置の処理方法
JP3800533B2 (ja) プログラムカウンタ制御方法及びプロセッサ
EP0969358A2 (en) Information processing device and method for performing parallel processing
WO1999045463A1 (fr) Processeur de donnees
US6959377B2 (en) Method and system for managing registers
JPH11110214A (ja) 命令制御システム及びその方法
JP3497087B2 (ja) 命令制御装置及びその方法
US20050125634A1 (en) Processor and instruction control method
JP3854200B2 (ja) プロセッサ及び命令制御方法
JP2894438B2 (ja) パイプライン処理装置
CN121597288B (zh) 向量处理器的指令推测执行方法、装置及存储介质
US20250036409A1 (en) Processor
JP2953451B2 (ja) 割り込み処理方法
CN117453290A (zh) 一种基于riscv-v指令集在乱序核中的执行方法和装置
CN121597282A (zh) 加载存储单元、数据获取方法、芯片及计算机设备
WO2026042576A1 (ja) プロセッサ及びパイプライン処理方法
CN120085918A (zh) 一种指令处理方法、装置、处理器和计算机设备

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees