JP3558481B2 - データ処理装置 - Google Patents

データ処理装置 Download PDF

Info

Publication number
JP3558481B2
JP3558481B2 JP09254297A JP9254297A JP3558481B2 JP 3558481 B2 JP3558481 B2 JP 3558481B2 JP 09254297 A JP09254297 A JP 09254297A JP 9254297 A JP9254297 A JP 9254297A JP 3558481 B2 JP3558481 B2 JP 3558481B2
Authority
JP
Japan
Prior art keywords
instruction
branch
stream
prediction
cycle
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
JP09254297A
Other languages
English (en)
Other versions
JPH10283184A (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
Hitachi Solutions Technology Ltd
Original Assignee
Hitachi Ltd
Hitachi ULSI Systems Co 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, Hitachi ULSI Systems Co Ltd filed Critical Hitachi Ltd
Priority to JP09254297A priority Critical patent/JP3558481B2/ja
Publication of JPH10283184A publication Critical patent/JPH10283184A/ja
Application granted granted Critical
Publication of JP3558481B2 publication Critical patent/JP3558481B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、パイプライン方式のデータ処理装置に係り、特に、分岐命令(以下の説明では、「条件分岐命令」ということもあるが同義である)を効率的に実行することを可能にしたデータ処理装置に関する。
【0002】
【従来の技術】
図5は従来技術によるパイプライン方式のデータ処理装置の構成例を示すブロック図、図6は条件分岐命令を含む命令群の流れの一例を示す図、図7は図6に示す命令列において分岐命令の予測に成功した場合の動作を説明するタイミングチャート、図8は図6に示す命令列において分岐命令の予測に失敗した場合の動作を説明するタイミングチャートである。以下、図5〜図8を参照して従来技術によるデータ処理装置について説明する。
【0003】
図6に示す命令列において、分岐命令03は条件分岐命令を表わし、命令01、命令02、命令04、命令05、命令06、命令11、命令12、命令13は分岐命令以外の命令を表わす。図6に示す命令列は、命令01、命令02、分岐命令03の順で順次処理され、命令02により設定されるコンディションコード(以下、CCという)と分岐命令03の分岐条件との比較を行うことにより分岐命令03の分岐が成立するか否かの分岐判定を行い、分岐成立(以下、takenという)の判定が行われた場合、分岐命令03の分岐先命令列である命令11、命令12、命令13が順次処理され、分岐不成立(以下、not−takenという)の判定が行われた場合、分岐命令03の後続命令列である命令04、命令05、命令06が順次処理される。
【0004】
このとき、命令01〜命令06の一連の流れをストリームと呼ぶ。また、分岐命令03から派生した新たな命令列、命令11〜命令13は、命令01〜命令06とは別のストリームである。このように、命令列の処理は、分岐命令が発生する毎に新たなストリームを確保し、分岐命令の分岐判定が決定する毎に実行されない側の命令列を含むストリームを開放することにより行われる。
【0005】
また、パイプライン方式のデータ処理装置は、条件分岐命令の処理方法として、前述の分岐判定が決定されるまでに何らかの予測手法により分岐方向、すなわち、分岐成立(taken)か、分岐不成立(not−taken)かを予測し、その予測に従って条件分岐命令の分岐先命令列あるいは後続命令列の処理を開始するのが一般的である。
【0006】
まず、条件分岐命令に対する分岐予測がtakenで、分岐結果がtakenである場合、すなわち、分岐予測が成功(true)した場合の基本的な動作を図5〜図7を参照して説明する。図5に示す従来技術によるデータ処理装置は、図示するような多数の機能回路により構成されているが、それらの機能等については、命令列の処理動作の説明と共に説明する。
【0007】
図5において、100は命令バッファ(IBR)、110は前記IBR100に格納されている命令で次に処理される命令の格納場所を示すポインタ(IBROP)、120はIBROP110により指定される命令をIBR100から選択するアライナである。前記IBR100、前記IBROP110、前記アライナ120はストリーム0番に対応している。同様にストリーム1番に対応し、IBR200、IBROP210、アライナ220が設けられている。さらに、同様にストリーム2番に対応し、IBR300、IBROP310、アライナ320が設けられている。
【0008】
330はストリーム選択回路、340はストリーム選択回路330から出力される命令と命令用キャッシュ920からの出力とを選択するバイパス選択回路、350はストリーム制御回路、360は命令レジスタ(IR)、370は命令デコーダ、371は条件分岐命令の分岐条件信号、380は例えば16本のレジスタ群で構成される汎用レジスタ(IGR)であり、後述するGGR480のコピーでもよいし、あるいは、GGR480そのものでも論理動作上問題はない。400は命令の実行に必要なメモリオペランドを求めるための指標アドレスレジスタ、410は命令の実行に必要なメモリオペランドを求めるための基底アドレスレジスタ、420は命令の実行に必要なメモリオペランドを求めるための変位アドレスレジスタ、430はオペランド用アドレス加算器、440は分岐先命令を求めるための変位アドレスレジスタ、450は分岐先命令を求めるための指標アドレスレジスタ、460は分岐先命令を求めるための基底アドレスレジスタ、470は命令用アドレス加算器、480は例えば16本のレジスタ群で構成される汎用レジスタ(GGR)、490はオペランド用キャッシュ、500は演算器、501はCC、600は分岐命令の分岐成立(taken)判定と分岐不成立(not−taken)判定と分岐予測成功(true)判定と分岐予測失敗(fail)判定との判定を行う分岐判定回路、700は現在デコード中の命令の命令アドレスを保持するプログラムカウンタ、800はIBR100に格納する命令の命令アドレスを保持する命令フェッチアドレスレジスタ(IF)、810はIF800に格納されている命令アドレスに命令フェッチ長を加算するインクリメンタ、820は前記インクリメンタ810の出力と前記命令用アドレス加算器470の出力と分岐予測ユニット900とにより求めた命令アドレスを選択する選択回路である。
【0009】
前記IF800、前記インクリメンタ810、前記選択回路820はストリーム0番に対応している。同様に、ストリーム1番に対応するIF830、インクリメンタ840、選択回路850が設けられている。さらに、同様に、ストリーム2番に対応するIF860、インクリメンタ870、選択回路880が設けられている。890はストリーム選択回路、900は分岐予測ユニット、901は条件分岐命令のtaken予測信号、902は条件分岐命令のnot−taken予測信号、910は命令用キャッシュ920を検索するアドレスを選択する選択回路、920は命令用キャッシュである。
【0010】
図7に示すタイミングチャートは、図6の命令列において、分岐命令03の分岐予測成功(以下、true)の場合、すなわち、分岐予測がtakenの予測でありかつ分岐命令がtakenした場合のデータ処理装置の動作を説明するパイプライン制御フローのタイミングチャートである。図7において、上部の横軸はパイプラインの実行サイクルを示しており、その番号1〜14は、順次のサイクルを参照可能にするため便宜上番号付けしたサイクル番号である。
【0011】
各命令は、図7のタイミングチャートに示すようにD、A、T、B、L、E、Pの7つのステージに分けて処理される。Dステージは命令のデコードを行い、Aステージはメモリオペランドを求めるためのアドレス計算を行い、Tステージ及びBステージはメモリオペランドを検索し、Lステージはメモリオペランド及びレジスタオペランドの演算器へのロードを行い、Eステージは命令の実行を行い、Pステージは演算結果の格納を行う。
【0012】
分岐命令の読み出しは、Di、Ai、Ti、Bi、Liの5つのステージに分けて処理される。Diステージは分岐先命令列のストリーム確保を行い、Aiステージは分岐先命令のアドレス計算を行い、Tiステージ及びBiステージは命令用キャッシュの検索を行い、Liステージは命令用キャッシュから命令バッファ及びIR360へ命令をロードする。
【0013】
いま、図6に示す命令列の命令01〜命令06はストリーム0番に割り当てられているものとする。従って、命令01は、IF800の命令アドレスにより予め命令用キャッシュ920から読み出されてIBR100に格納されている。命令01は、サイクル2でIBR100からIBROP110に従いアライナ120により選択され、ストリーム選択回路330により選択され、さらに、バイパス選択回路340により選択されてIR360にセットされる。
【0014】
命令01は、サイクル3で命令デコーダ370によりデコードされ、デコード結果である指標レジスタ番号及び基底レジスタ番号によりIGR380が検索されて、当該レジスタ番号に対応するIGR380の内容がそれぞれ指標アドレスレジスタ400、基底アドレスレジスタ410にセットされる。また、他のデコード結果である変位アドレスが変位アドレスレジスタ420にセットされる。
【0015】
また、命令01は、サイクル4で前記指標アドレスレジスタ400、基底アドレスレジスタ410、変位アドレスレジスタ420の加算をアドレス加算器430で行い、サイクル5及びサイクル6でオペランド用キャッシュ490を検索し、サイクル7で前記オペランド用キャッシュ490の検索結果、すなわち、命令01のメモリオペランドを演算器500に転送し、また、サイクル7では同時にGGR480からレジスタオペランドを読み出し演算器500に転送する。
【0016】
そして、命令01は、サイクル8で演算を実行し、その演算結果がサイクル9でオペランド用キャッシュ490またはGGR480に格納される。また、命令01の演算結果によりサイクル9でCCが決定される。
【0017】
前述の命令01と同様に、命令02は、サイクル4でデコードされ、サイクル9で演算を実行し、サイクル10でCC501が決定される。
【0018】
次の分岐命令03は、サイクル5でデコードされる。このとき、命令デコーダ370は、条件分岐命令が解読されるとそのデコード結果をストリーム制御回路350に伝達する。ストリーム制御回路350は、分岐予測ユニット900からのtaken予測信号901、not−taken予測信号902と命令デコーダ370からの条件分岐命令デコード信号とにより、次にIR360にセットする命令をどのストリームの命令バッファから持ってくるかを決定する。すなわち、条件分岐命令がデコードされ、かつ、taken と予測されていた場合、分岐命令03の分岐先命令が格納されているストリームの命令バッファから命令が取り出され、条件分岐命令がデコードされ、かつ、not−taken と予測されていた場合、分岐命令03の後続命令が格納されているストリームの命令バッファから命令が取り出される。また、命令デコーダ370は、条件分岐命令の分岐条件を解読し分岐条件信号371を分岐判定回路600に伝達する。分岐命令03は、サイクル10で決定されたCC501と前記分岐条件信号371との比較を分岐判定回路600で行い、サイクル11に分岐命令03のtaken判定、not−taken判定及びtrue判定、fail判定が決定される。
【0019】
一方、分岐命令03を含むストリームの後続命令列の逐次命令の読み出しが行われるとき、その命令の読み出しアドレスは、IF800からストリーム選択回路890、選択回路910を経由し、命令キャッシュ920に伝達されると共に分岐予測ユニット900にも伝達される。分岐予測ユニット900は、前記命令読み出しアドレスをキーとして分岐履歴を参照し、当該命令により読み出される命令列の中にtaken する分岐命令が存在するか否かを予測する。なお、分岐予測は、公知の方法で行われればよく、また、本発明の範囲外であるため、ここではその説明を省略する。
【0020】
分岐予測ユニット900が分岐命令03のtakenを予測した場合、taken予測信号901がストリーム制御回路350に伝達され、サイクル1で未使用のストリームがあることを検出し、サイクル2で新たにストリーム1番が確保される。分岐予測ユニット900は、分岐履歴情報から予測分岐先アドレスを求め、サイクル2で当該予測分岐先アドレスを選択回路910を経由して命令用キャッシュ920に伝達し、サイクル3及びサイクル4で命令11を含む命令列の読み出しを行う。また、前記予測分岐先アドレスは、選択回路850を経由してIF830にもセットされ、命令11以降のストリーム1番の逐次命令の読み出しに利用される。前述のように、分岐予測ユニット900における分岐予測により命令11はサイクル5で命令用キャッシュ920からロードされ、IBR200に格納される。ストリーム制御回路350は、前記条件分岐命令のデコード信号と前記taken 予測信号901とから分岐命令03の次には分岐先命令列であるストリーム1番の命令を選択するようにストリーム選択回路330に指示を行う。
【0021】
しかし、命令11が命令用キャッシュ920からロードされるのはサイクル5であるため、サイクル5の時点ではまだ命令11はIBR200にセットされていない。そこで、ストリーム制御回路350は、サイクル5でストリーム選択回路330により選択されている命令バッファ、すなわち、IBR200が空である場合、バイパス選択回路340がバイパス側を選択するように指示する。これにより、命令11は、サイクル5でロードされ、IBR200をバイパスしIR360にセットされる。以降、命令11〜命令13は順次処理される。
【0022】
サイクル11において、命令02のCC501と分岐命令03の分岐条件信号371とにより分岐判定回路600が分岐判定を行い、taken の判定信号601を発生する。また、サイクル11において、分岐判定回路600は、分岐命令03がtaken の予測であったため分岐予測成功を意味するtrueの判定信号603を発生する。前記taken の判定信号601により、ストリーム0番はサイクル12で開放される。また、前記trueの判定信号603が決定されると、予測により投機的に実行していた命令11の演算結果の書き込みを許可し、サイクル12において命令11の演算結果が格納される。
【0023】
次に、条件分岐命令の分岐予測失敗の場合の基本動作を図5、図6、図8により説明する。
【0024】
図8に示すタイミングチャートは、図6の命令列において、分岐命令03の分岐予測失敗(以下、fail)の場合、すなわち、分岐予測がnot−taken の予測であるが実際にはtakenした場合のデータ処理装置の動作を説明するパイプライン制御フローのタイミングチャートである。図8において、上部の横軸はパイプラインの実行サイクルを示しており、その番号1〜20は、順次のサイクルを参照可能にするため便宜上番号付けしたサイクル番号である。
【0025】
前述した場合と同様に、命令01はサイクル3でデコードされ、サイクル8で演算を実行し、サイクル9でCC501が決定される。同様に、命令02はサイクル4でデコードされ、サイクル9で演算を実行し、サイクル10でCC501が決定される。また、分岐命令03はサイクル5でデコードされる。このとき、命令デコーダ370は、条件分岐命令が解読されるとそのデコード結果をストリーム制御回路350に伝達する。ストリーム制御回路350は、前記デコード結果によりサイクル5で未使用のストリームがあることを検出し、サイクル6で新たにストリーム1番を確保する。
【0026】
ストリーム制御回路350は、分岐予測ユニット900からのtaken の予測信号901、not−taken の予測信号902と命令デコーダ370からの条件分岐命令デコード信号とにより、次にIR360にセットする命令をどのストリームの命令バッファから持ってくるかを決定する。すなわち、条件分岐命令がデコードされ、かつ、taken と予測されていた場合、分岐命令03の分岐先命令が格納されているストリームの命令バッファから命令が取り出され、条件分岐命令がデコードされ、かつ、not−taken と予測されていた場合、分岐命令03の後続命令が格納されているストリームの命令バッファから命令が取り出される。また、命令デコーダ370は、条件分岐命令の分岐条件を解読し分岐条件信号371を分岐判定回路600に伝達する。分岐命令03は、サイクル10で決定されたCC501と前記分岐条件信号371との比較を分岐判定回路600で行い、サイクル11で分岐命令03のtaken 判定、not−taken 判定及びtrue判定、fail判定が決定される。
【0027】
一方、分岐命令03を含むストリームの後続命令列の逐次命令の読み出しが行われるとき、その命令の読み出しアドレスは、IF800からストリーム選択回路890、選択回路910を経由し、命令キャッシュ920に伝達されると共に分岐予測ユニット900にも伝達される。図8に示すタイミングチャートでは、分岐予測ユニット900が、分岐命令03のnot−taken を予測したため、サイクル2での分岐予測によるストリーム1番の確保は行われない。
【0028】
分岐命令03は、サイクル5で命令デコーダ370でデコードされ、デコード結果である指標レジスタ番号及び基底レジスタ番号によりIGR380を検索し、当該レジスタ番号に対応するIGR380の内容をそれぞれ指標アドレスレジスタ450、基底アドレスレジスタ460にセットし、また、他のデコード結果である変位アドレスを変位アドレスレジスタ440にセットする。分岐命令03は、サイクル6で、前記指標アドレスレジスタ450、基底アドレスレジスタ460、変位アドレスレジスタ440の加算をアドレス加算器470で行い分岐命令03の分岐先命令の命令アドレスを求める。前記分岐先命令の命令アドレスは、選択回路910を経由し命令用キャッシュ920に送られる。
【0029】
分岐命令03は、サイクル7及びサイクル8で命令用キャッシュ920を検索し、サイクル9で前記命令用キャッシュ920の検索結果、すなわち、命令11を含むストリーム1番の命令列をロードしてIBR200にセットする。ストリーム制御回路350は、前記条件分岐命令のデコード信号と分岐予測ユニット900からの not−taken予測信号901とから分岐命令03の次に、後続の命令列であるストリーム0番の命令を選択するようにストリーム選択回路330に指示する。以後、命令04、命令05、命令06が順次デコードされる。
【0030】
サイクル11では、命令02のCC501と分岐命令03の分岐条件信号371から分岐判定回路600で分岐判定が行われ、taken の判定信号601が発生する。また、サイクル11で、分岐判定回路600は、分岐命令03がnot−taken と予測されていたため分岐予測失敗を意味するfail判定信号604を発生する。このfail判定信号604の発生により、それ以降の命令04、命令05、命令06の処理は抑止される。ストリーム制御回路350は、分岐判定回路600からfail判定信号604を受け取るとストリーム1番の命令を選択するようストリーム選択回路330に指示する。これにより命令11がサイクル12でデコードされ、以降、命令12、命令13が順次処理される。
【0031】
前述したように、従来技術によるデータ処理装置は、条件分岐命令の分岐判定が決定されるまで非予測側のストリームの開放を行わずに、非予測側のストリームの命令列を分岐判定決定まで命令バッファに残しておくため、fail判定の次のサイクルには正しいストリームの命令の処理を開始することができる。
【0032】
図9は複数の条件分岐命令を含む命令列群の流れの一例を示す図、図10は従来技術によるデータ処理装置において、図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、その命令がtakenであった場合、すなわち、予測成功trueであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、条件分岐命令が連続する場合の動作を図5、図9、図10を参照して説明する。
【0033】
図10に示すタイミングチャートは、図9に示す命令列において、分岐命令02、分岐命令12、分岐命令22、分岐命令32、分岐命令42の全てがtakenと予測され、かつ、その命令がtakenであった場合、すなわち、予測成功trueであった場合の動作を示している。
【0034】
命令01はサイクル4でデコードされ、分岐命令02はサイクル5でデコードされる。分岐予測ユニット900は、分岐命令02を含む命令列の読み出しをキーとして分岐命令02の分岐予測を行う。ストリーム制御回路350は、分岐予測ユニット900からのtaken の予測信号901を受け、サイクル1から命令11を含む命令列の読み出しを開始し、サイクル1で未使用ストリームがあることを検出し、サイクル2で命令11を含む命令列のためにストリーム1番を確保する。分岐命令ユニット900は、サイクル2で命令11の命令アドレスを予測し、そのアドレスを選択回路910を経由して命令用キャッシュ920に伝達する。サイクル3及びサイクル4で命令用キャッシュ920が検索され、命令11はサイクル5で命令用キャッシュ920からロードされてIR360にセットされる。この結果、命令11はサイクル6でデコードされ、分岐命令12はサイクル7でデコードされる。
【0035】
分岐命令12を含む命令列の読み出し、すなわち、サイクル1からの命令読み出しをキーとして分岐命令12の分岐予測が行われ、サイクル3から命令21を含む命令列の読み出しが開始される。また、サイクル3で未使用のストリームがあることを検出し、サイクル4で命令21を含む命令列のためにストリーム2番が確保される。分岐命令ユニット900は、サイクル4で命令21の命令アドレスを予測し、選択回路910を経由して命令アドレスを命令用キャッシュ920に伝達する。サイクル5及びサイクル6で命令用キャッシュ920が検索され、命令21はサイクル7で命令用キャッシュ920からロードされ、IR360にセットされる。これにより、命令21はサイクル8でデコードされる。
【0036】
その後、分岐命令22を含む命令列の読み出しをキーとして分岐予測が行われ、命令31を含む命令列の読み出しのためにストリームを確保しようとするが、サイクル5の時点ではストリーム0番、1番、2番とも使用中であるため、命令31を含む命令列の読み出しのためにストリームを確保することができない。すなわち、IBR100には命令03を含む命令列が格納されており、IBR200には命令13を含む命令列が格納されており、IBR300には命令23を含む命令列が格納されているため、新たに命令31を含む命令列を格納するべき命令バッファが空いていないので、命令31を含む命令列の命令読み出しを抑止する必要がある。
【0037】
もし、サイクル6で分岐命令02の分岐判定が決定する前にストリーム0番を上書き確保し、命令31を含む命令列の命令読み出しを開始すると、命令31は、サイクル9に命令用キャッシュ920からロードされ、IR360及びIBR100にセットできることになる。このとき、サイクル11で決定される分岐命令02の分岐判定がfail判定の場合、fail判定の次のサイクルに正しいストリームの命令である命令03の処理を開始しなければならないが、前記命令31を含む命令列がすでにIBR100にセットされており、命令03はIBR100には残っていない。従って、この方法では命令03以降の処理が実行できないことになる。
【0038】
同様に、ストリーム1番を上書き確保し、命令31を含む命令列の読み出しを開始すると、分岐命令12の分岐判定がfail判定の場合、命令13以降の処理が実行できないことになる。また、同様にストリーム2番を上書き確保し、命令31を含む命令列の読み出しを開始すると、分岐命令22の分岐判定がfail判定の場合、命令23以降の処理が実行できないことになる。このようにストリームが全て使用済状態で、さらに分岐命令が発生すると、いづれかのストリームが開放されるまで当該分岐命令の分岐先命令列の命令読み出しを抑止しなければならない。
【0039】
分岐命令31の分岐先命令列の命令読み出しを抑止ししている間のサイクル10で命令01のCC501が確定し、サイクル11で分岐命令02のtaken 判定信号601が決定する。この分岐命令02のtaken の判定信号601により命令03以降の命令列が不要となり、サイクル12でストリーム0番が開放される。ストリーム制御回路350は、これにより、サイクル12で未使用のストリームがあることを検出し、サイクル13で命令31を含む命令列の読み出しのためにストリーム0番を確保して命令読み出しを開始する。サイクル14及びサイクル15で命令用キャッシュ920が検索され、命令31は、サイクル16で命令用キャッシュ920からロードされIR360にセットされ、サイクル17でデコードされる。以降、命令32、命令41、命令42が順次処理される。
【0040】
【発明が解決しようとする課題】
前述した従来技術によるデータ処理装置は、条件分岐命令の分岐判定が決定されるまで非予測側のストリーム、すなわち、分岐命令の分岐予測がtaken の場合、その分岐命令の次の命令を含む命令列を保持しているストリーム、分岐命令の分岐予測がnot−taken の場合、その分岐命令の分岐先命令からの命令を含む命令列を保持しているストリームの開放を行わずに、非予測側のストリームの命令列を当該条件分岐命令の分岐判定決定まで命令バッファ内に残しておくため、分岐判定でfailの判定があっても、次のサイクルには正しいストリームの命令の処理を開始することができる。
【0041】
しかし、従来技術によるデータ処理装置は、ストリームが全て使用済状態で、さらに条件分岐命令が発生すると、いづれかのストリームが開放されるまで当該条件分岐命令の分岐先命令列の命令読み出しを抑止しなければならないという問題点を有している。
【0042】
すなわち、一般に、分岐予測を行う機能を有するデータ処理装置は、ほとんどの場合に分岐予測が成功する。分岐予測が成功する場合においては、非予測側の命令列の保存は必要ないが、前述の従来技術は、分岐予測失敗時の処理のために、非予測側の命令列の保存しており、このため、本来必要な後続の分岐命令の分岐先命令列の命令読み出しを遅らせ、命令のデコード及び演算の実行が遅れることになるという問題点を生じさせている。
【0043】
本発明の目的は、前述した従来技術の問題点を解決し、条件分岐命令が連続する場合にも、後続の条件分岐命令の分岐先命令の読み出し処理を進めることを可能にし、命令のデコード及び演算の実行が遅れることを防止することのできるデータ処理装置を提供することにある。
【0044】
【課題を解決するための手段】
本発明によれば前記目的は、条件分岐命令のデコード時に非予測側の命令の命令アドレスを退避し、ストリームが全て使用状態で条件分岐命令をデコードした場合、当該条件分岐命令がtaken の予測であればnot−taken 側のストリームを開放し、当該条件分岐命令がnot−taken の予測であればtaken 側のストリームを開放し、開放したストリームを後続の条件分岐命令の分岐先命令読み出しのためのストリームとして確保し、前記後続の条件分岐命令の分岐先命令の読み出し処理を進め、命令のデコード及び演算の実行を進めるようにすることにより達成される。
【0045】
また、前記目的は、前記ストリームの開放を行った後に当該条件分岐命令のfail判定が決定された場合、すなわち、fail判定後に処理するべき正しいストリームの命令が命令バッファに存在しない場合、前記failの判定により開放されたストリームを前記fail判定となった条件分岐命令の次に処理するべき命令の命令読み出しのためのストリームとして確保し、前記退避済の当該条件分岐命令の非予測側の命令の命令アドレスを使用して命令の読み出しを行うことにより正しいストリームの命令の処理を続行するようにすることにより達成される。
【0046】
具体的には、前記目的は、複数の命令ストリームに対応してメモリより先読みした命令を格納する複数の命令バッファと、分岐命令の処理に関する予測を行う分岐予測ユニットと、前記分岐予測ユニットにより分岐命令が予測される毎にその分岐命令の分岐先命令の命令読み出しのためにストリームを確保し、ストリームに対応した命令バッファを割り当てて分岐命令の分岐先命令の命令読み出しを制御するストリーム制御回路と、前記分岐予測ユニットの予測結果と分岐命令の処理結果とにより前記分岐命令の分岐成立、分岐不成立及び分岐予測成功、分岐予測失敗を判定する分岐判定回路とを備えて構成されるパイプライン方式のデータ処理装置において、前記分岐予測ユニットによる予測結果に従って非予測側ストリームの命令アドレスを格納する前記複数の分岐命令に対応するデータ格納手段を備え、前記ストリーム制御回路は、分岐命令のデコード時、分岐予測がはずれた場合の命令の再読み出しのために当該分岐命令の非予測ストリームの命令アドレスを前記データ格納手段に退避し、当該分岐命令の非予測側ストリームを含むストリームが全て使用中ならば、当該分岐命令の非予測側ストリームを開放することにより、分岐予測ユニットが予測している更に後続の分岐命令の分岐先命令読み出しのためのストリームを確保することにより達成される。
【0047】
また、前記目的は、前記ストリーム制御回路が、分岐命令のデコード時に未使用のストリームがある場合、前記分岐予測ユニットにより分岐命令の次に実行されると予測される命令の存在する予測側ストリームと実行されないと予測される非予測側ストリームとのいづれのストリームも開放せずに次の命令の処理を開始させることにより達成される。
【0048】
さらに、前記目的は、前記複数の分岐命令に対応するデータ格納手段に格納される非予測側ストリームの命令アドレスが、前記分岐予測ユニットによる予測結果が分岐成立の場合、該分岐命令の後続命令の命令アドレスであり、予測結果が分岐不成立の場合、該分岐命令の分岐先命令の命令アドレスであり、前記ストリーム制御回路が、分岐判定回路により分岐予測失敗が通知されたとき、次に処理するべき正しいストリームの命令が前記命令バッファに存在しない場合、前記複数の分岐命令に対応したデータ格納手段に格納されている命令アドレスにより次に処理すべき正しいストリームの命令を前記メモリから読み出して正しいストリームの命令の処理を続行させることにより達成される。
【0049】
すなわち、本発明によるデータ処理装置は、現在デコード中の命令の命令アドレスを保持するプログラムカウンタと、前記プログラムカウンタの内容に現在デコード中の命令の命令長(ILC)を加算し後続命令の命令アドレスを求めるインクリメンタと、前記インクリメンタで求めた後続命令の命令アドレスと分岐命令の分岐先命令の命令アドレスのいづれかを選択する選択手段と、前記選択手段で選択された命令アドレスを退避する複数の命令アドレス退避手段とを備え、条件分岐命令のデコード時に当該条件分岐命令自身の命令アドレスをプログラムカウンタから読み出し、前記条件分岐命令自身の命令アドレスに前記条件分岐命令自身の命令長を加算し前記条件分岐命令の後続命令の命令アドレスを求め、前記条件分岐命令がtaken 予測の場合、前記条件分岐命令の後続命令の命令アドレスを選択し、前記条件分岐命令がnot−taken 予測の場合、前記条件分岐命令の分岐先命令の命令アドレスを選択し、前記選択された命令アドレスを前記命令アドレス退避手段に退避し、前記条件分岐命令のデコード時にストリームが全て使用状態であるとき、前記条件分岐命令がtaken 予測ならばnot−taken 側のストリームを開放し、前記条件分岐命令がnot−taken 予測ならばtaken 側のストリームを開放し、前記開放したストリームを後続の条件分岐命令の分岐先命令読み出しのためのストリームとして確保し、前記後続の条件分岐命令の分岐先命令の読み出し処理を進めることを特徴とする。
【0050】
また、本発明によるデータ処理装置は、前記複数の命令アドレス退避手段の内のいづれかを選択する第1の選択手段と、前記第1選択手段で選択された命令アドレスを含むいくつかの命令アドレスの中から命令用キャッシュを検索するための命令アドレスを選択する第2選択手段とを備え、前記ストリームの開放を行った後にfail判定が決定しされ、fail判定後に処理するべき正しいストリームの命令が命令バッファに存在しないとき、前記fail判定により開放されたストリームを前記fail判定となった条件分岐命令の次に処理するべき命令の命令読み出しのためのストリームとして確保し、前記複数の命令アドレス退避手段の中から次に処理するべき命令の命令アドレス、すなわち、前記fail判定となった条件分岐命令の非予測側の命令の命令アドレスを前記第1の選択手段で選択し、前記第2の選択手段で第1の選択手段からの出力を選択し、前記第2の選択手段からの出力、すなわち、次に処理するべき命令の命令アドレスにより命令用キャッシュを検索し、前記命令用キャッシュから読み出した次に処理するべき命令の処理を続行することを特徴とする。
【0051】
【発明の実施の形態】
以下、本発明によるデータ処理装置の一実施形態を図面により詳細に説明する。 図1は本発明の一実施形態によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【0052】
図1において、710はプログラムカウンタ700に保持されている現在デコード中の命令の命令アドレスと現在デコード中の命令の命令長(ILC)とを加算して後続命令の命令アドレスを求めるインクリメンタ、930は前記インクリメンタ710の出力とアドレス加算器470の出力とのいづれかを選択する選択回路、940は前記選択回路930で選択された条件分岐命令の非予測側の命令の命令アドレスを退避する第1の非予測側命令アドレス退避レジスタ、同様に950は第2の非予測側命令アドレス退避レジスタ、960は第3の非予測側命令アドレス退避レジスタ、970は第4の非予測側命令アドレス退避レジスタ、980は前記非予測側命令アドレス退避レジスタ940〜970の内のいづれかを選択する選択回路、990は前記非予測側命令アドレス退避レジスタ940〜970及び前記選択回路980を制御する非予測側命令アドレス退避レジスタ制御回路である。そして、図1におけるその他の構成は図5の場合と同様である。
【0053】
次に、前述のように構成される本発明の一実施形態によるデータ処理装置の条件分岐命令の処理動作を説明する。処理する複数の命令列群の例は、図9によりすでに従来技術で説明したものと同一のものとする。
【0054】
図2は本発明の一実施形態によるデータ処理装置において、図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、その命令がtakenであった場合、すなわち、予測成功trueであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、条件分岐命令が連続する場合の動作を図1、図9、図2を参照して説明する。
【0055】
図2に示すタイミングチャートは、図9に示す命令列において、分岐命令02、分岐命令12、分岐命令22、分岐命令32、分岐命令42の全てがtakenと予測され、かつ、その命令がtakenであった場合、すなわち、予測成功trueであった場合の動作を示している。
【0056】
命令01は、サイクル4でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル10でCC501を確定させる。分岐命令02は、サイクル5でデコードされる。このサイクル5では、全てのストリームが使用中、すなわち、図2におけるstream#0 valid、stream#1 valid、stream#2 validの全てがON状態である。
【0057】
分岐命令02のデコード時にストリームが全て使用中(stream busy)であるので、この場合ストリーム制御回路350は、分岐命令02の非予測側ストリームを開放するように制御する。分岐命令02は、taken と予測されているため、この場合、分岐命令02のnot−taken 側ストリームであるストリーム0番がサイクル6で開放される。また、サイクル5では、分岐命令02の命令アドレスがプログラムカウンタ700から読み出され、分岐命令02自身の命令長との加算がインクリメンタ710により行われ、分岐命令02の次の命令である命令03の命令アドレスが求められる。
【0058】
サイクル6では、前記命令03の命令アドレス、アドレス加算器470で求めた分岐命令02の分岐先命令である命令11の命令アドレスの一方が選択回路930で選択される。選択回路930は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令02はtaken と予測されているため、選択回路930はインクリメンタ710からの出力である命令03の命令アドレスを選択する。この命令03の命令アドレスは、サイクル7で第1の非予測側命令アドレス退避レジスタ940にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令03の命令アドレスを第1の非予測側命令アドレス退避レジスタ940にセットすると、次の条件分岐命令に備えて入力ポインタを第2の非予測命令アドレス退避レジスタ950に向ける。
【0059】
また、分岐命令02の分岐予測の結果がtaken であるため、命令11を含む命令列の読み出しはサイクル1から開始される。ストリーム制御回路350は、サイクル1で未使用のストリームがあることを検出し、サイクル2で命令11を含む命令列のためにストリーム1番を確保する。分岐予測ユニット900は、サイクル2で命令11の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令11は、サイクル3及びサイクル4で命令用キャッシュ920から検索され、サイクル5で命令用キャッシュ920からロードされてIR360にセットされる。そして、命令11は、サイクル6でデコードされ、サイクル12でCC501を確定させる。
【0060】
分岐命令12はサイクル7でデコードされる。このサイクル7では、全てのストリームが使用中、すなわち、図2におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令12のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令12の非予測側ストリームを開放するように制御を行う。分岐命令12はtaken と予測されているため、この場合、分岐命令12のnot−taken 側のストリームであるストリーム1番がサイクル8で開放される。
【0061】
また、サイクル7で分岐命令12の命令アドレスがプログラムカウンタ700から読み出され分岐命令12自身の命令長との加算がインクリメンタ710で行われ、分岐命令12の次の命令である命令13の命令アドレスが求められる。サイクル8で、前記命令13の命令アドレス、アドレス加算器470で求めた分岐命令12の分岐先命令である命令21の命令アドレスの一方が選択回路930で選択される。選択回路930は非予測側の命令の命令アドレスを選択する。この場合、分岐命令12は、taken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令13の命令アドレスを選択する。
【0062】
前記命令13の命令アドレスは、サイクル9に第2の非予測側命令アドレス退避レジスタ950にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令13の命令アドレスを第2の非予測側命令アドレス退避レジスタ950にセットすると、次の条件分岐命令に備えて入力ポインタを第3の非予測命令アドレス退避レジスタ960に向ける。
【0063】
また、分岐命令12の分岐予測の結果がtaken であるため、命令21を含む命令列の読み出しはサイクル3から開始される。ストリーム制御回路350は、サイクル3で未使用のストリームがあることを検出し、サイクル4で命令21を含む命令列のためにストリーム2番を確保する。分岐予測ユニット900は、サイクル4で命令21の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令21は、サイクル5及びサイクル6で命令用キャッシュ920から検索され、サイクル7で命令用キャッシュ920からロードされてIR360にセットされる。命令21は、サイクル8でデコードされ、サイクル14でCC501を確定させる。
【0064】
分岐命令22は、サイクル9でデコードされる。このときサイクル9では全てのストリームが使用中、すなわち、図2におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令22のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令22の非予測側ストリームを開放するように制御を行う。分岐命令22は、taken と予測されているため、この場合、分岐命令22のnot−taken 側ストリームであるストリーム2番がサイクル10で開放される。
【0065】
また、サイクル9で分岐命令22の命令アドレスがプログラムカウンタ700から読み出され分岐命令22自身の命令長との加算がインクリメンタ710により行われ、分岐命令22の次の命令である命令23の命令アドレスが求められる。サイクル10で、前記命令23の命令アドレス、アドレス加算器470で求めた分岐命令22の分岐先命令である命令31の命令アドレスの一方が選択回路930で選択される。選択回路930は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令22がtaken の予測であるため、選択回路930は、インクリメンタ710からの出力である命令23の命令アドレスを選択する。前記命令23の命令アドレスは、サイクル11で第3の非予測側命令アドレス退避レジスタ960にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令23の命令アドレスを第3の非予測側命令アドレス退避レジスタ960にセットすると次の条件分岐命令に備えて入力ポインタを第4の非予測命令アドレス退避レジスタ970に向ける。
【0066】
また、分岐命令22の分岐予測の結果はtaken の予測であるため、命令31を含む命令列の読み出しはサイクル5から開始される。ストリーム制御回路350は、サイクル5で未使用のストリームがあるか否かを検出する。サイクル5ではstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態であるため、命令31を含む命令列のためにストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路350は、サイクル6で再び未使用のストリームがあるか否かを検出する。サイクル6では、ストリーム0番が未使用状態となるため、ストリーム制御回路350は、サイクル7で命令31を含む命令列のためにストリーム0番を確保する。分岐予測ユニット900は、サイクル7で命令31の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令31は、サイクル8及びサイクル9で命令用キャッシュ920から検索され、サイクル10で命令用キャッシュ920からロードされてIR360にセットされる。命令31はサイクル11でデコードされ、サイクル17でCC501を確定させる。分岐命令32はサイクル12でデコードされる。以下、同様の処理を繰り返すことにより、命令32、命令41、命令42が順次処理される。
【0067】
図3は本発明の一実施形態によるデータ処理装置において、図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、2番目の分岐命令がnot−taken、すなわち、予測失敗failであり、他の分岐命令がtaken 、すなわち、予測成功trueであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、この場合の動作を図1、図9、図3を参照して説明する。
【0068】
図3に示すフローは、図9の命令列における分岐命令02、分岐命令12、分岐命令22、分岐命令32、分岐命令42の全てがtaken と予測され、かつ、分岐命令02がtaken 、すなわち、予測成功true、分岐命令12がnot−taken、すなわち、予測失敗failした場合の情報処理装置の動作を説明するパイプライン制御フローである。
【0069】
命令01はサイクル4でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル10でCC501を確定させる。分岐命令02はサイクル5でデコードされる。このとき、サイクル5では、全てのストリームが使用中、すなわち、図3におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令02のデコード時、ストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令02の非予測側ストリームを開放するように制御を行う。
【0070】
分岐命令02はtaken と予測されているため、この場合、分岐命令02のnot−taken 側ストリームであるストリーム0番がサイクル6で開放される。また、サイクル5で分岐命令02の命令アドレスがプログラムカウンタ700から読み出され、分岐命令02自身の命令長との加算がインクリメンタ710により行われ、分岐命令02の次の命令である命令03の命令アドレスが求められる。
【0071】
サイクル6では、前記命令03の命令アドレス、アドレス加算器470で求めた分岐命令02の分岐先命令である命令11の命令アドレスの一方が選択回路930で選択される。選択回路930は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令02はtaken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令03の命令アドレスを選択する。前記命令03の命令アドレスは、サイクル7で第1の非予測側命令アドレス退避レジスタ940にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令03の命令アドレスを第1の非予測側命令アドレス退避レジスタ940にセットすると、次の条件分岐命令に備えて入力ポインタを第2の非予測命令アドレス退避レジスタ950に向ける。
【0072】
また、分岐命令02の分岐予測の結果はtaken であるため、命令11を含む命令列の読み出しはサイクル1から開始される。ストリーム制御回路350は、サイクル1で未使用のストリームがあることを検出し、サイクル2で命令11を含む命令列のためにストリーム1番を確保する。分岐予測ユニット900は、サイクル2で命令11の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令11は、サイクル3及びサイクル4で命令用キャッシュ920から検索され、サイクル5で命令用キャッシュ920からロードされてIR360にセットされる。命令11はサイクル6でデコードされ、サイクル12でCC501を確定させる。
【0073】
分岐命令12はサイクル7でデコードされる。このとき、サイクル7では、全てのストリームが使用中、すなわち、図3におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令12のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令12の非予測側ストリームを開放するように制御を行う。分岐命令12はtaken と予測されているため、この場合、分岐命令12のnot−taken 側ストリームであるストリーム1番がサイクル8で開放される。
【0074】
また、サイクル7で分岐命令12の命令アドレスがプログラムカウンタ700から読み出され分岐命令12自身の命令長との加算がインクリメンタ710で行われ、分岐命令12の次の命令である命令13の命令アドレスが求められる。サイクル8で、前記命令13の命令アドレス、アドレス加算器470で求めた分岐命令12の分岐先命令である命令21の命令アドレスの一方が選択回路930で選択される。選択回路930は非予測側の命令の命令アドレスを選択する。この場合、分岐命令12はtaken と予測されているため、選択回路930はインクリメンタ710からの出力である命令13の命令アドレスを選択する。
【0075】
前記命令13の命令アドレスは、サイクル9で第2の非予測側命令アドレス退避レジスタ950にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令13の命令アドレスを第2の非予測側命令アドレス退避レジスタ950にセットすると、次の条件分岐命令に備えて入力ポインタを第3の非予測命令アドレス退避レジスタ960に向ける。
【0076】
また、分岐命令12の分岐予測の結果はtaken の予測であるため、命令21を含む命令列の読み出しはサイクル3から開始される。ストリーム制御回路350は、サイクル3で未使用のストリームがあることを検出し、サイクル4で命令21を含む命令列のためにストリーム2番を確保する。分岐予測ユニット900は、サイクル4で命令21の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令21は、サイクル5及びサイクル6で命令用キャッシュ920から検索され、サイクル7で命令用キャッシュ920からロードされてIR360にセットされる。命令21はサイクル8でデコードされる。
【0077】
分岐命令22はサイクル9でデコードされる。このサイクル9では、全てのストリームが使用中、すなわち、図3におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令22のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令22の非予測側ストリームを開放するように制御を行う。分岐命令22はtaken と予測されているため、この場合、分岐命令22のnot−taken 側ストリームであるストリーム2番がサイクル10で開放される。
【0078】
また、サイクル9で分岐命令22の命令アドレスがプログラムカウンタ700から読み出され、分岐命令22自身の命令長との加算がインクリメンタ710により行われ、分岐命令22の次の命令である命令23の命令アドレスが求められる。サイクル10で、前記命令23の命令アドレス、アドレス加算器470で求めた分岐命令22の分岐先命令である命令31の命令アドレスの一方が選択回路930により選択される。選択回路930は非予測側の命令の命令アドレスを選択する。この場合、分岐命令22はtaken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令23の命令アドレスを選択する。前記命令23の命令アドレスはサイクル11で第3の非予測側命令アドレス退避レジスタ960にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令23の命令アドレスを第3の非予測側命令アドレス退避レジスタ960にセットすると、次の条件分岐命令に備えて入力ポインタを第4の非予測命令アドレス退避レジスタ970に向ける。
【0079】
また、分岐命令22の分岐予測の結果はtaken であるため、命令31を含む命令列の読み出しはサイクル5から開始される。ストリーム制御回路350は、サイクル5で未使用のストリームがあるか否かを検出する。サイクル5ではstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態であるため、命令31を含む命令列のためのストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路350は、サイクル6で再び未使用のストリームがあるか否かを検出する。サイクル6では、ストリーム0番が未使用状態となるため、ストリーム制御回路350は、サイクル7で命令31を含む命令列のためにストリーム0番を確保する。分岐予測ユニット900は、サイクル7で命令31の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令31は、サイクル8及びサイクル9で命令用キャッシュ920から検索され、サイクル10で命令用キャッシュ920からロードされてIR360にセットされる。命令31はサイクル11でデコードされる。分岐命令32はサイクル12でデコードされる。以下、同様に、命令32、命令41、命令42が順次処理される。
【0080】
ところが、図3に示す例では、サイクル12で確定した命令11のCC501と分岐命令12の分岐条件信号371とを分岐判定回路600が条件比較した結果、サイクル13で分岐命令12のnot−taken 判定信号602及びfail判定信号604が決定される。この命令12のfail判定信号604により、現在処理中の命令の実行を中止し正しいストリームの命令の処理を始めなければならない。
【0081】
分岐命令12がnot−taken であるため、次に処理しなければならない命令は命令13である。命令13を含む命令列はサイクル2でストリーム1番が割り当てられたが、このストリーム1番はサイクル8で開放され、サイクル9で命令41を含む命令列に割り当てられている。従って、IBR200に命令13は残っていない。一方、分岐命令12の非予測側命令、すなわち、命令13の命令アドレスはサイクル9で第2の非予測側命令アドレス退避レジスタ950に保持されている。
【0082】
ストリーム制御回路350は、条件分岐命令の非予測側命令列が命令バッファに存在するか否かを表わすレジスタを条件分岐命令毎に持っており、条件分岐命令の分岐判定が決定するまで保持している。条件分岐命令のfail判定が決定すると、ストリーム制御回路350は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照する。ストリーム制御回路350は、非予測側命令列が命令バッファに存在する場合、当該命令バッファから次に処理すべき命令を即座に読み出し、IR360にセットしてその後の処理を続行させる。また、ストリーム制御回路350は、非予測側命令列が命令バッファに存在しない場合、新たにストリームを確保し、非予測側命令アドレス退避レジスタに保持されている次に処理すべき命令の命令アドレスにより命令の再読み出しを行わせ、命令用キャッシュ920を検索してIR360にセットし、その後の処理を続行させる。
【0083】
この場合、命令13は、IBR200に残っていないため、第2の非予測側命令アドレス退避レジスタ950に保持されている命令13の命令アドレスを使用して再読み出しが行われる。すなわち、サイクル13のfail判定信号604により、ストリーム制御回路350は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照し、非予測側命令列が命令バッファに存在しないためサイクル14から命令13の再読み出しを開始し、サイクル15でストリーム1番を確保し、さらに、サイクル15で第2の非予測側命令アドレス退避レジスタ950に保持されている命令13の命令アドレスを選択回路980により選択させる。この命令13の命令アドレスは、選択回路910を経由して命令用キャッシュ920に伝達され、サイクル16及びサイクル17で命令用キャッシュ920を参照し、サイクル18で命令用キャッシュ920から命令13をロードしてIR360にセットする。命令13はサイクル19でデコードされ、サイクル25でCC501を確定させる。以下、命令14、命令15が順次処理される。
【0084】
図4は本発明の一実施形態によるデータ処理装置において、図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、5番目の分岐命令がnot−taken、すなわち、予測失敗failであり、他の分岐命令がtaken 、すなわち、予測成功trueであった場合の動作を説明するパイプライン制御フローのタイミングチャートであり、次に、この場合の動作を図1、図9、図4を参照して説明する。
【0085】
図4に示すタイミングチャートは、図9の命令列における分岐命令02、分岐命令12、分岐命令22、分岐命令32、分岐命令42の全てがtaken と予測され、かつ、分岐命令02、分岐命令12、分岐命令22、分岐命令32がtaken 、すなわち、予測成功true、分岐命令42がnot−taken の場合、すなわち、予測失敗failの場合の動作を示しいる。
【0086】
命令01はサイクル4でデコードされ、パイプラインの各ステージでの処理が順次実行されてサイクル10でCC501を確定させる。分岐命令02は、サイクル5でデコードされる。このサイクル5では全てのストリームが使用中、すなわち、図4におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令02のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令02の非予測側ストリームを開放するように制御を行う。
【0087】
分岐命令02はtaken と予測されているため、この場合、分岐命令02のnot−taken 側ストリームであるストリーム0番がサイクル6で開放される。また、サイクル5では、分岐命令02の命令アドレスがプログラムカウンタ700から読み出され、分岐命令02自身の命令長との加算がインクリメンタ710により行われ、分岐命令02の次の命令である命令03の命令アドレスが求められる。
【0088】
サイクル6では、前記命令03の命令アドレス、アドレス加算器470で求めた分岐命令02の分岐先命令である命令11の命令アドレスの一方が選択回路930で選択される。選択回路930は、非予測側の命令の命令アドレスを選択する。この場合、分岐命令02はtaken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令03の命令アドレスを選択する。前記命令03の命令アドレスは、サイクル7で第1の非予測側命令アドレス退避レジスタ940にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令03の命令アドレスを第1の非予測側命令アドレス退避レジスタ940にセットすると、次の条件分岐命令に備えて入力ポインタを第2の非予測命令アドレス退避レジスタ950に向ける。
【0089】
また、分岐命令02の分岐予測の結果がtaken であるため、命令11を含む命令列の読み出しはサイクル1から開始される。ストリーム制御回路350は、サイクル1で未使用のストリームがあることを検出し、サイクル2で命令11を含む命令列のためにストリーム1番を確保する。分岐予測ユニット900は、サイクル2で命令11の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令11は、サイクル3及びサイクル4で命令用キャッシュ920から検索され、サイクル5で命令用キャッシュ920からロードされてIR360にセットされる。そして、命令11はサイクル6でデコードされ、サイクル12でCC501を確定させる。
【0090】
分岐命令12はサイクル7でデコードされる。このサイクル7では、全てのストリームが使用中、すなわち、図4におけるstream#0 valid、stream#1 valid及びstream#2 validの全てがON状態である。分岐命令12のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令12の非予測側ストリームを開放するように制御を行う。分岐命令12はtaken と予測されているため、この場合、分岐命令12のnot−taken 側ストリームであるストリーム1番がサイクル8で開放される。
【0091】
また、サイクル7で分岐命令12の命令アドレスがプログラムカウンタ700から読み出され分岐命令12自身の命令長との加算がインクリメンタ710で行われ、分岐命令12の次の命令である命令13の命令アドレスが求められる。サイクル8で、前記命令13の命令アドレス、アドレス加算器470で求めた分岐命令12の分岐先命令である命令21の命令アドレスの一方が選択回路930で選択される。選択回路930は非予測側の命令の命令アドレスを選択する。この場合、分岐命令12はtaken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令13の命令アドレスを選択する。
【0092】
前記命令13の命令アドレスは、サイクル9で第2の非予測側命令アドレス退避レジスタ950にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令13の命令アドレスを第2の非予測側命令アドレス退避レジスタ950にセットすると、次の条件分岐命令に備えて入力ポインタを第3の非予測命令アドレス退避レジスタ960に向ける。
【0093】
また、分岐命令12の分岐予測の結果はtaken の予測であるため、命令21を含む命令列の読み出しはサイクル3から開始される。ストリーム制御回路350は、サイクル3で未使用のストリームがあることを検出し、サイクル4で命令21を含む命令列のためにストリーム2番を確保する。分岐予測ユニット900は、サイクル4で命令21の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令21は、サイクル5及びサイクル6で命令用キャッシュ920から検索され、サイクル7で命令用キャッシュ920からロードされてIR360にセットされる。命令21はサイクル8でデコードされ、サイクル14でCC501を確定させる。
【0094】
分岐命令22はサイクル9でデコードされる。このサイクル9では、全てのストリームが使用中、すなわち、図4におけるstream#0 valid及びstream#1 valid及びstream#2 validの全てがON状態である。分岐命令22のデコード時にストリームが全て使用中(stream busy)であるため、ストリーム制御回路350は、分岐命令22の非予測側ストリームを開放するように制御を行う。分岐命令22はtaken と予測されているため、この場合、分岐命令22のnot−taken 側ストリームであるストリーム2番がサイクル10で開放される。
【0095】
また、サイクル9で分岐命令22の命令アドレスがプログラムカウンタ700から読み出され、分岐命令22自身の命令長との加算をインクリメンタ710により行われ、分岐命令22の次の命令である命令23の命令アドレスが求められる。サイクル10で、前記命令23の命令アドレス、アドレス加算器470で求めた分岐命令22の分岐先命令である命令31の命令アドレスの一方が選択回路930により選択される。選択回路930は非予測側の命令の命令アドレスを選択する。この場合、分岐命令22はtaken と予測されているため、選択回路930は、インクリメンタ710からの出力である命令23の命令アドレスを選択する。前記命令23の命令アドレスはサイクル11で第3の非予測側命令アドレス退避レジスタ960にセットされる。非予測側命令アドレス退避レジスタ制御回路990は、前記命令23の命令アドレスを第3の非予測側命令アドレス退避レジスタ960にセットすると、次の条件分岐命令に備えて入力ポインタを第4の非予測命令アドレス退避レジスタ970に向ける。
【0096】
また、分岐命令22の分岐予測の結果はtaken であるため、命令31を含む命令列の読み出しはサイクル5から開始される。ストリーム制御回路350は、サイクル5で未使用のストリームがあるか否かを検出する。サイクル5ではstream#0 valid及びstream#1 valid及びstream#2 validの全てがON状態であるため、命令31を含む命令列のためにストリームを確保することができず命令読み出し処理が待たされる。ストリーム制御回路350は、サイクル6で再び未使用のストリームがあるか否かを検出する。サイクル6では、ストリーム0番が未使用状態となるため、ストリーム制御回路350は、サイクル7で命令31を含む命令列のためにストリーム0番を確保する。分岐予測ユニット900は、サイクル7で命令31の命令アドレスを予測し選択回路910を経由し命令用キャッシュ920に伝達する。命令31は、サイクル8及びサイクル9で命令用キャッシュ920から検索され、サイクル10で命令用キャッシュ920からロードされてIR360にセットされる。命令31はサイクル11でデコードされ、サイクル17でCC501を確定させる。分岐命令32はサイクル12でデコードされる。以下、同様に、命令32、命令41、命令42と順次処理される。
【0097】
ところが、図4に示す例では、サイクル19で確定した命令41のCC501と分岐命令42の分岐条件信号371とを分岐判定回路600が条件比較した結果、サイクル20で分岐命令42のnot−taken 判定信号602及びfail判定信号604が決定される。この命令42のfail判定信号604により、現在処理中の命令の実行を中止し正しいストリームの命令の処理を始めなければならない。
【0098】
分岐命令42がnot−taken であるため、次に処理しなければならない命令は命令43である。命令43を含む命令列はサイクル9でストリーム1番が割り当てられたが、このストリーム1番はサイクル9以降も開放されていないため、IBR200には命令43が残っている。
【0099】
ストリーム制御回路350は、条件分岐命令の非予測側命令列が命令バッファに存在するか否かを表わすレジスタを条件分岐命令毎に持っており、条件分岐命令の分岐判定が決定するまで保持している。条件分岐命令のfail判定が決定すると、ストリーム制御回路350は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照する。ストリーム制御回路350は、非予測側命令列が命令バッファに存在する場合、当該命令バッファから次に処理すべき命令を即座に読み出し、IR360にセットしてその後の処理を続行させる。また、ストリーム制御回路350は、非予測側命令列が命令バッファに存在しない場合、新たにストリームを確保し、非予測側命令アドレス退避レジスタに保持されている次に処理すべき命令の命令アドレスにより命令の再読み出しを行わせ、命令用キャッシュ920を検索してIR360にセットし、その後の処理を続行させる。
【0100】
この場合、命令43は、IBR200に残っているため、IBR200から次に処理すべき命令をIR360にセットしてその後の処理を続行する。すなわち、サイクル20のfail判定信号604により、ストリーム制御回路350は、前記非予測側命令列が命令バッファに存在するか否かを表わすレジスタを参照し、非予測側命令列が命令バッファに存在することを知る。これにより、命令43は、サイクル21でデコードされ、サイクル27でCC501を確定させる。以下、命令44、命令45と順次処理される。
【0101】
前述したように、本発明の一実施形態によれば、ストリームが全て使用済状態である場合に、さらに条件分岐命令が発生したときでも、分岐予測に従ってストリームの確保、開放を繰り返しながら条件分岐命令の投機実行を行って命令の処理を進めることができるため、命令のデコード及び演算の実行が遅れることを防止することができる。また、分岐予測がはずれた場合にも、非予測側命令が命令バッファに存在すれば、即座に正しいストリームの命令の処理を開始することができ、非予測側命令が命令バッファに存在しない場合、予め退避しておいた非予測側命令の命令アドレスにより命令の再読み出しを実行した後、正しいストリームの命令の処理を開始することができる。
【0102】
以上、本発明を実施形態に基づいて説明したが、本発明は、前述した実施形態に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【0103】
【発明の効果】
以上説明したように本発明によれば、複数の条件分岐命令がパイプラインに投入された場合にも、分岐予測に従ってストリームの確保、開放を繰り返しながら条件分岐命令の投機実行を行って命令の処理を進めることができるため、命令のデコード及び演算の実行が遅れることを防止して、命令列の効率的な処理を行うことができる。
【0104】
また、本発明によれば、分岐予測がはずれた場合も、非予測側命令が命令バッファに存在すれば即座に正しいストリームの命令の処理を開始することができ、非予測側命令が命令バッファに存在しない場合にも、予め退避しておいた非予測側命令の命令アドレスにより命令の再読み出しを実行した後、正しいストリームの命令の処理を開始することができる。
【図面の簡単な説明】
【図1】本発明の一実施形態によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【図2】図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、その命令がtakenであった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図3】図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、2番目の分岐命令がnot−taken、他の分岐命令がtaken であった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図4】図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、5番目の分岐命令がnot−taken、他の分岐命令がtakeneであった場合の本発明の一実施形態の動作を説明するパイプライン制御フローのタイミングチャートである。
【図5】従来技術によるパイプライン方式のデータ処理装置の構成例を示すブロック図である。
【図6】条件分岐命令を含む命令群の流れの一例を示す図である。
【図7】図6に示す命令列において分岐命令の予測に成功した場合の従来技術の動作を説明するタイミングチャートである。
【図8】図6に示す命令列において分岐命令の予測に失敗した場合の従来技術の動作を説明するタイミングチャートである。
【図9】複数の条件分岐命令を含む命令列群の流れの一例を示す図である。
【図10】図9に示す命令列に含まれる全ての分岐命令がtakenと予測され、かつ、その命令がtakenであった場合の従来技術の動作を説明するパイプライン制御フローのタイミングチャートである。
【符号の説明】
100、200、300 命令バッファ(IBR)
110、210、310 IBRポインタ(IBROP)
120、220、320 アライナ
330、890 ストリーム選択回路
340 バイパス選択回路
350 ストリーム制御回路
360 命令レジスタ(IR)
370 命令デコーダ
380 汎用レジスタ(IGR)
400、450 指標アドレスレジスタ
410、460 基底アドレスレジスタ
420、440 変位アドレスレジスタ
430、470 アドレス加算器
480 汎用レジスタ(GGR)
490 オペランド用キャッシュ
500 演算器
600 分岐判定回路
700 プログラムカウンタ
710、810、840、870 インクリメンタ
800、830、860 命令アドレスフェッチレジスタ(IF)
810 インクリメンタ
820、850、880、910、930、980 選択回路
900 分岐予測ユニット
920 命令用キャッシュ
940 第1の非予測側命令アドレス退避レジスタ
950 第2の非予測側命令アドレス退避レジスタ
960 第3の非予測側命令アドレス退避レジスタ
970 第4の非予測側命令アドレス退避レジスタ
990 非予測側命令アドレス退避レジスタ制御回路

Claims (3)

  1. 複数の命令ストリームに対応してメモリより先読みした命令を格納する複数の命令バッファと、分岐命令の処理に関する予測を行う分岐予測ユニットと、前記分岐予測ユニットにより分岐命令が予測される毎にその分岐命令の分岐先命令の命令読み出しのためにストリームを確保し、ストリームに対応した命令バッファを割り当てて分岐命令の分岐先命令の命令読み出しを制御するストリーム制御回路と、前記分岐予測ユニットの予測結果と分岐命令の処理結果とにより前記分岐命令の分岐成立、分岐不成立及び分岐予測成功、分岐予測失敗を判定する分岐判定回路とを備えて構成されるパイプライン方式のデータ処理装置において、前記分岐予測ユニットによる予測結果に従って非予測側ストリームの命令アドレスを格納する前記複数の分岐命令に対応するデータ格納手段を備え、前記ストリーム制御回路は、分岐命令のデコード時、分岐予測がはずれた場合の命令の再読み出しのために当該分岐命令の非予測ストリームの命令アドレスを前記データ格納手段に退避し、当該分岐命令の非予測側ストリームを含むストリームが全て使用中ならば、当該分岐命令の非予測側ストリームを開放することにより、分岐予測ユニットが予測している更に後続の分岐命令の分岐先命令読み出しのためのストリームを確保することを特徴とするデータ処理装置。
  2. 前記ストリーム制御回路は、分岐命令のデコード時に未使用のストリームがある場合、前記分岐予測ユニットにより分岐命令の次に実行されると予測される命令の存在する予測側ストリームと実行されないと予測される非予測側ストリームとのいづれのストリームも開放せずに次の命令の処理を開始させることを特徴とする請求項1記載のデータ処理装置。
  3. 前記複数の分岐命令に対応するデータ格納手段に格納される非予測側ストリームの命令アドレスは、前記分岐予測ユニットによる予測結果が分岐成立の場合、該分岐命令の後続命令の命令アドレスであり、予測結果が分岐不成立の場合、該分岐命令の分岐先命令の命令アドレスであり、前記ストリーム制御回路は、分岐判定回路により分岐予測失敗が通知されたとき、次に処理するべき正しいストリームの命令が前記命令バッファに存在しない場合、前記複数の分岐命令に対応したデータ格納手段に格納されている命令アドレスにより次に処理すべき正しいストリームの命令を前記メモリから読み出して正しいストリームの命令の処理を続行させることを特徴とする請求項1または2記載のデータ処理装置。
JP09254297A 1997-04-10 1997-04-10 データ処理装置 Expired - Fee Related JP3558481B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP09254297A JP3558481B2 (ja) 1997-04-10 1997-04-10 データ処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP09254297A JP3558481B2 (ja) 1997-04-10 1997-04-10 データ処理装置

Publications (2)

Publication Number Publication Date
JPH10283184A JPH10283184A (ja) 1998-10-23
JP3558481B2 true JP3558481B2 (ja) 2004-08-25

Family

ID=14057276

Family Applications (1)

Application Number Title Priority Date Filing Date
JP09254297A Expired - Fee Related JP3558481B2 (ja) 1997-04-10 1997-04-10 データ処理装置

Country Status (1)

Country Link
JP (1) JP3558481B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3845043B2 (ja) 2002-06-28 2006-11-15 富士通株式会社 命令フェッチ制御装置

Also Published As

Publication number Publication date
JPH10283184A (ja) 1998-10-23

Similar Documents

Publication Publication Date Title
US5404552A (en) Pipeline risc processing unit with improved efficiency when handling data dependency
JP3542020B2 (ja) 複数予測分岐命令にわたる命令フェッチの位置合わせ命令キャッシュ処理を実行するプロセッサ装置およびプロセッサ制御方法
US5276882A (en) Subroutine return through branch history table
US4827402A (en) Branch advanced control apparatus for advanced control of a branch instruction in a data processing system
JP3599409B2 (ja) 分岐予測装置
JP3502592B2 (ja) 分岐予測装置
US5706459A (en) Processor having a variable number of stages in a pipeline
JPS63175934A (ja) デ−タ処理装置
JP5209633B2 (ja) ワーキング・グローバル・ヒストリ・レジスタを備えるシステム及び方法
EP0357188B1 (en) Pipelined processor
JPH03116235A (ja) 分岐処理方法及び分岐処理装置
JP2006228241A (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US6912650B2 (en) Pre-prefetching target of following branch instruction based on past history
JP2004518183A (ja) マルチスレッド・システムにおける命令のフェッチとディスパッチ
JPH08320788A (ja) パイプライン方式プロセッサ
JP2006517322A (ja) パイプライン化ディジタルプロセッサにおけるハザード検出および管理のための方法および装置
US20070174592A1 (en) Early conditional selection of an operand
JP3725547B2 (ja) 限定ラン分岐予測
US5850542A (en) Microprocessor instruction hedge-fetching in a multiprediction branch environment
JP3802038B2 (ja) 情報処理装置
JPH06266556A (ja) データ処理装置
JP2001060152A (ja) 分岐予測を抑止する情報処理装置および方法
JP3558481B2 (ja) データ処理装置
JP2723238B2 (ja) 情報処理装置
JPS6329292B2 (ja)

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040203

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040405

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040518

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees