JP2883035B2 - パイプライン・プロセッサ - Google Patents

パイプライン・プロセッサ

Info

Publication number
JP2883035B2
JP2883035B2 JP8086868A JP8686896A JP2883035B2 JP 2883035 B2 JP2883035 B2 JP 2883035B2 JP 8086868 A JP8086868 A JP 8086868A JP 8686896 A JP8686896 A JP 8686896A JP 2883035 B2 JP2883035 B2 JP 2883035B2
Authority
JP
Japan
Prior art keywords
instruction
branch
counter
address
notice
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
JP8086868A
Other languages
English (en)
Other versions
JPH08339299A (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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial 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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP8086868A priority Critical patent/JP2883035B2/ja
Publication of JPH08339299A publication Critical patent/JPH08339299A/ja
Application granted granted Critical
Publication of JP2883035B2 publication Critical patent/JP2883035B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、複数の命令をパイ
プライン処理可能なパイプライン・プロセッサに関す
る。
【0002】
【従来の技術】現在実用に供されているほとんどすべて
のプロセッサは複数の命令をパイプライン処理してい
る。パイプライン処理とは、命令の実行プロセスを複数
のステージに分割し、その複数のステージをオーバーラ
ップさせることにより、複数の命令を並列に処理するも
のである。これにより、プロセッサの性能が向上する。
このようなパイプライン処理を行うプロセッサは、パイ
プライン・プロセッサと呼ばれる。
【0003】分岐命令を実行するためには、パイプライ
ン・プロセッサは、命令をフェッチしデコードすること
によりその命令が分岐命令であることを認識し、分岐を
行うか否かの条件を判断し、分岐先のアドレスを計算し
た後に、次にフェッチすべき命令のアドレスを変更する
必要がある。しかし、分岐命令について次にフェッチす
べき命令のアドレスを変更する時点では、その分岐命令
に続く逐次命令が既にフェッチされてしまっており、誤
ってフェッチした命令を捨てて分岐先の命令をフェッチ
しなおさなければならない。誤ってフェッチした命令を
捨てて分岐先の命令をフェッチしなおすまでに費やされ
たサイクル数が分岐命令の実行によって生じる遅延であ
る。
【0004】制御の流れを変更する分岐命令は、パイプ
ライン・プロセッサの性能を著しく低下させる。分岐命
令は、パイプラインへのスムーズな命令供給を阻害し、
パイプラインの乱れを引き起こすからである。
【0005】一般のアプリケーション・プログラムで
は、全命令中に占める分岐命令の割合は20%〜30%
である。仮に1つの分岐命令を実行することによって3
サイクルのロスが生じるとすると、パイプライン・プロ
セッサのトータルな性能は、分岐命令の実行によって6
0%〜90%劣化することになる。分岐命令の実行によ
ってパイプラインの乱れが生じてしまうからである。
【0006】このように、分岐命令の実行に伴う遅れ
(ペナルティ)は、パイプライン・プロセッサの性能を
劣化させる大きな要因である。
【0007】パイプラインの乱れを防止するには、大別
して2つのアプローチがある。1つは、条件判断の遅れ
をなくすことにより、パイプラインの乱れを防止するア
プローチである。もう1つは、分岐先アドレスの計算の
遅れをなくすことにより、パイプラインの乱れを防止す
るアプローチである。
【0008】条件判断の遅れをなくす手法としては、種
々の分岐予測の手法が知られている。しかし、分岐先ア
ドレスの計算の遅れをなくす手法に関しては有力な手法
が少ない。
【0009】分岐先アドレスの計算の遅れをなくす手法
の1つとしては、ブランチ・ターゲット・バッファ(B
ranch Target Buffer;以下、BT
Bと略す)を用いる手法がある。この手法は、以前に計
算した分岐先アドレスをBTBに格納しておくことによ
り、その分岐先アドレスを再利用するものである。この
手法によれば、分岐命令をデコードするより前に分岐命
令の分岐先アドレスを取得することが可能となる。
【0010】図11は、BTBを用いた従来のプロセッ
サの構成を示す。図12に示されるように、BTB10
は、タグを格納する領域41と分岐先アドレスを格納す
る領域42と分岐履歴を格納する領域43とを有してい
る。分岐命令が実行されると、命令メモリ1におけるそ
の分岐命令のアドレスの上位ビットが領域41に格納さ
れ、その分岐命令の分岐先アドレスが領域42に格納さ
れ、その分岐命令の分岐履歴が領域43に格納される。
BTB10における領域41、42および43の行位置
は、その分岐命令の下位アドレスに従って決められる。
【0011】プログラムカウンタ2には、次にフェッチ
すべき命令のアドレス(以下、PCアドレスという)が
格納されている。PCアドレスの下位ビット(例えば、
8ビット)をインデックスとしてBTB10が参照さ
れ、PCアドレスの上位ビットとBTB10の領域41
に格納されるタグとが比較される。
【0012】PCアドレスの上位ビットとBTB10の
領域41に格納されるタグとが一致することは、PCア
ドレスに対応する分岐命令が以前に実行されたというこ
とを示す。その分岐命令の分岐先アドレスはBTB10
における対応する領域42に格納されている。従って、
PCアドレスの上位ビットとBTB10の領域41に格
納されるタグとが一致する場合には、PCアドレスの代
わりに、BTB10の領域42に格納されている分岐先
アドレスが命令メモリ1に出力される。なお、PCアド
レスの代わりにBTB10の領域42に格納されている
分岐先アドレスを命令メモリ1に出力するか否かの判定
には、BTB10の領域43に格納されている分岐履歴
を考慮してもよい。分岐履歴は、分岐が起こるか否かを
予測するために使用され得る。
【0013】PCアドレスの上位ビットとBTB10の
領域41に格納されるタグとが一致しない場合には、通
常の命令フェッチのサイクルと同様にして、PCアドレ
スが命令メモリ1に出力される。
【0014】このように、PCアドレスの上位ビットと
BTB10の領域41に格納されるタグとが一致した場
合には、命令フェッチのサイクルと同一のサイクルにお
いて分岐命令の分岐先アドレスを取得することができ
る。このことは、命令デコードのサイクルよりも前に分
岐先アドレスの計算が完了していることを意味する。
【0015】また、分岐先アドレスの計算の遅れをなく
す他の手法としては、アーキテクチャ的に遅延分岐(D
elayed branch)を定義する手法がある。
この手法は、実際に分岐が生じるか否かにかからわず分
岐命令に続く所定の数の命令を実行することにより、分
岐先アドレスの計算の遅れをなくすものである。
【0016】
【発明が解決しようとする課題】上述したBTBを用い
る手法では、BTBは多くのメモリを必要とする。実用
的な効果を発揮するためには、BTBは少なくとも10
24のエントリ数を必要とする。これは、6〜7キロバ
イトのメモリに相当し、チップ上では非常に大きな面積
を占める。また、パイプラインの乱れを防止するために
は、BTBへのアクセスを1サイクル以内に行う必要が
ある。このことは、プロセッサの動作速度を律速する大
きな要因となる。
【0017】また、上述した遅延分岐の手法では、遅延
分岐の性能は、コンパイラが遅延スロットをどれだけ有
効な命令で満たすことができるかにかかっている。遅延
スロットを満たす命令は、分岐の有無にかかわらず実行
される命令であるから、分岐条件に影響を与える命令で
あってはならない。一般に、コンパイラがそのような命
令を見つけだすことは容易ではない。命令を実際に実行
する前に、その命令が分岐条件に影響を与えるか否かを
判定することは困難だからである。
【0018】1つの命令をフェッチするのに必要なサイ
クル数が1である場合には、遅延スロットの90%程度
を有効な命令で満たすことが可能である。しかし、1つ
の命令をフェッチするのに必要なサイクル数が増大する
につれて、遅延スロットを有効な命令で満たすことは困
難になる。遅延スロットを満たすべき命令の数が増大す
るからである。従って、遅延分岐の手法を多段のパイプ
ラインプロセッサやスーパースカラマシンに適用するこ
とは困難である。
【0019】遅延スロットを有効な命令で満たすことが
不可能である場合には、コンパイラは遅延スロットをN
OP命令で満たす。このことはプログラムサイズを冗長
に増大させる。
【0020】本発明の目的は、大量のメモリや動作速度
に影響を与えることなく、分岐命令の実行により遅延を
生じないパイプライン・プロセッサを提供することにあ
る。本発明の他の目的は、1つの命令をフェッチするの
に必要なサイクル数が増大した場合でも、分岐命令の実
行により遅延を生じないパイプライン・プロセッサを提
供することにある。
【0021】
【課題を解決するための手段】本発明のパイプライン・
プロセッサは、制御の流れを変更するまでに予告分岐命
令の後に続いて実行されるべき少なくとも1つの命令の
数を定義する予告分岐命令を実行するパイプライン・プ
ロセッサであって、フェッチすべき命令のアドレスを保
持するプログラムカウンタと、該プログラムカウンタに
よって保持されるアドレスに対応する命令を出力する命
令メモリと、該命令メモリから出力された命令をフェッ
チし保持する命令レジスタと、該命令レジスタによって
保持された命令をデコードすることにより、該命令が該
予告分岐命令であるか否かを識別する命令デコード部
と、カウンタ値を保持し、該カウンタ値と所定のしきい
値とを比較するカウンタ部であって、該カウンタ値は該
予告分岐命令によって定義された命令数に初期化され、
該カウンタ値は該プログラムカウンタがインクリメント
されるのに同期してデクリメントされるカウンタ部と、
該プログラムカウンタによって保持されるアドレスをイ
ンクリメントし、該インクリメントされたアドレスを逐
次命令アドレスとして提供する加算器と、該予告分岐命
令の分岐先アドレスを提供する分岐先アドレスレジスタ
と、該カウンタ部の比較結果に応じて、該逐次命令アド
レスと該予告分岐命令の分岐先アドレスとのうちの一方
を選択するセレクタとを備えており、これにより上記目
的が達成される。
【0022】前記予告分岐命令は、前記命令の種類を識
別するオペコードを格納する領域と、前記分岐先アドレ
スを指定する領域と、前記制御の流れを変更するまでに
予告分岐命令の後に続いて実行されるべき少なくとも1
つの命令の数を格納する領域とを含んでいる。
【0023】前記所定のしきい値は、1つの命令をフェ
ッチするのに必要なサイクル数に等しい。
【0024】前記カウンタ部は、前記カウンタ値と前記
所定のしきい値とが一致する場合に、前記予告分岐命令
の分岐先アドレスを選択する選択信号を前記セレクタに
出力してもよい。
【0025】前記カウンタ部は、前記予告分岐命令によ
って定義された命令の数が前記所定のしきい値より小さ
い場合に、前記予告分岐命令の分岐先アドレスを選択す
る選択信号を前記セレクタに出力してもよい。
【0026】前記カウンタ部は、前記予告分岐命令によ
って定義された命令の数が前記所定のしきい値より小さ
い場合に、前記命令レジスタによって保持された命令を
キャンセルする信号を前記命令レジスタに出力してもよ
い。
【0027】前記パイプライン・プロセッサは、前記予
告分岐命令について前記制御の流れを変更するか否かを
判断する条件判断部をさらに備えており、前記カウンタ
部は、前記カウンタ値が所定の値に達した場合に、前記
予告分岐命令について前記制御の流れを変更するか否か
を判断するタイミングを規定する信号を該条件判断部に
出力してもよい。
【0028】前記条件判断部は、前記予告分岐命令につ
いて前記制御の流れを変更しないと判断した場合に、前
記命令レジスタによって保持された命令をキャンセルす
る信号を前記命令レジスタに出力し、前記命令デコード
部によってデコードされる命令をキャンセルする信号を
前記命令デコード部に出力してもよい。
【0029】以下、作用を説明する。
【0030】本発明のパイプライン・プロセッサによれ
ば、実際の制御の流れの変更は制御の流れの変更を指示
する命令をフェッチ、デコードした時点ではただちに起
こらず、制御の流れの変更を指示する命令にエンコード
された制御の流れの変更点までの命令数だけ後に起こ
る。一方、制御の変更先アドレスは制御の流れの変更を
指示する命令をデコードした時点で計算できており実際
の制御の変更時点では既に用意されている。従って、制
御の流れの変更(すなわち、フェッチ先の変更)を行う
時点ではすみやかにフェッチ先を変更することが可能と
なり、従来の分岐命令のように既に誤ってフェッチした
逐次命令を捨てて分岐先の命令をフェッチしなおす必要
がなくなる。
【0031】
【発明の実施の形態】以下、図面を参照して本発明の実
施の形態を説明する。
【0032】図1は、本発明によるパイプライン・プロ
セッサ100の構成を示す。
【0033】プログラムカウンタ2は、次にフェッチす
べき命令のアドレス101を保持する。プログラムカウ
ンタ2は、保持されたアドレス101を命令メモリ1に
出力する。命令メモリ1には複数の命令が格納されてい
る。命令メモリ1に格納されている複数の命令のうち、
プログラムカウンタ2から出力されたアドレス101に
よって指定される命令102が命令レジスタ8にフェッ
チされ、そこで保持される。
【0034】命令メモリ1には様々な種類の命令が格納
され得る。それらの命令は逐次命令と分岐命令に分類さ
れる。
【0035】本明細書では、「逐次命令」とは、制御の
流れを変更しない命令であると定義する。従って、逐次
命令の次にはその逐次命令が格納されている命令メモリ
1のアドレスの次のアドレスに対応する命令が実行され
る。「分岐命令」とは、制御の流れを変更する命令であ
ると定義する。従って、「分岐命令」は、条件分岐命
令、無条件ジャンプ命令、サブルーチン・コール命令、
リターン命令などを含む。
【0036】図2は、パイプライン・プロセッサ100
において使用される分岐命令のフォーマットを示す。本
明細書では、図2に示される分岐命令を「予告分岐命
令」という。「予告分岐命令」とは、その予告分岐命令
から所定の数の命令を実行した後に分岐先アドレスに分
岐する命令である。その所定の数は、予告分岐命令のオ
ペランドとして与えられる。
【0037】例えば、「2つの命令を実行した後に命令
Xに分岐する予告分岐命令」は、プログラムコードでは
「Branch after 2 to X」と表現さ
れる。命令Xのアドレスは、分岐命令の分岐先アドレス
としてパイプライン・プロセッサ100において計算さ
れる。
【0038】予告分岐命令は、オペコードを格納する領
域21と、分岐先アドレスを指定する領域22と、制御
の流れの変更点(分岐点)までに予告分岐命令に続いて
実行されるべき少なくとも1つの命令の数を格納する領
域23とを有している。
【0039】オペコードとは命令の種類を識別するため
のコードである。オペコードは、通常、複数のビットか
ら構成される。
【0040】分岐先アドレスは、直接アドレッシングモ
ードもしくは間接アドレシングモードにおいて指定され
る。
【0041】直接アドレッシングモードでは、分岐先ア
ドレスは絶対アドレスによって指定される。この場合、
領域22には、直接アドレッシングモードを示すコード
と、絶対アドレスとが格納される。
【0042】間接アドレッシングモードでは、分岐先ア
ドレスはベースアドレスに対する相対アドレスによって
指定される。この場合、領域22には、間接アドレッシ
ングモードを示すコードと、相対アドレス(予告分岐命
令から分岐点までのディスプレースメント)とが格納さ
れる。ベースアドレスとしては、典型的には、プログラ
ムカウンタ2に保持されるアドレスが使用される。しか
し、ベースアドレスとして他のレジスタに保持されるア
ドレスが使用されてもよい。
【0043】現実行命令から制御の流れの変更点(分岐
点)までの命令数は、0または正の整数によって指定さ
れる。0または正の整数は、予告分岐命令のオペランド
として与えられる。例えば、予告分岐命令がプログラム
コードで「Branch after 2 to X
」と表現されている場合には、領域23には2が格納
される。
【0044】図1を再び参照して、命令レジスタ8に保
持された命令102は、命令レジスタ8の出力103と
して命令デコード部3と分岐先アドレス計算部7とに供
給される。
【0045】命令デコード部3は、命令103をデコー
ドすることにより命令103の種類を識別する。命令1
03の種類の識別は、命令103の先頭領域に格納され
るオペコードを識別することによって達成される。
【0046】命令103が逐次命令であると命令デコー
ド部が識別した場合には、命令103の種類を示す情報
106が実行部11に供給され、命令103において指
定されるレジスタを示す情報107がレジスタファイル
12に供給される。情報107によって指定されたレジ
スタの値は、情報108として実行部11に供給され
る。例えば、命令103が「レジスタ1の値にレジスタ
2の値を加算して、その加算結果をレジスタ1に格納せ
よ」という命令である場合には、命令103の種類を示
す情報106として「加算命令」を示す情報が実行部1
1に供給され、命令103において指定されるレジスタ
を示す情報107として「レジスタ1、レジスタ2」を
示す情報がレジスタファイル12に供給される。
【0047】実行部11は、命令デコード部3からの情
報106とレジスタファイル12からの情報108とに
基づいて、命令を実行する。実行部11による実行結果
は、必要に応じて、出力109としてレジスタファイル
12に出力される。
【0048】命令103が予告分岐命令であると命令デ
コード部3が識別した場合には、命令デコード部3は、
初期値設定信号104をカウンタ部4に供給するととも
に、予告分岐命令の領域23に格納されている値をカウ
ンタ部4に初期値105として供給する。初期値設定信
号104は、カウンタ部4に初期値105を設定するサ
イクルにおいてハイレベルとなり、その他のときはロー
レベルとなる。
【0049】カウンタ部4は、カウント値を保持する。
カウント値は、予告分岐命令の分岐タイミングを規定す
るために使用される。カウント値は、例えば、整数であ
る。カウンタ部4に保持されたカウント値は、初期値設
定信号104に応答して初期値105に初期化される。
初期値105は、予告分岐命令の領域23に格納されて
いる値である。カウンタ部4に保持されたカウント値
は、プログラムカウンタ2からの信号110に応答して
1だけデクリメントされる。信号110は、プログラム
カウンタ2の値が1だけインクリメントされるのに同期
してカウンタ部4に出力される。
【0050】カウンタ部4は、カウンタ部4に保持され
るカウンタ値と所定のしきい値とを比較する。そのカウ
ンタ値と所定のしきい値とが一致する場合には、カウン
タ部4は、ハイレベルの選択信号111をセレクタ5に
出力し、ハイレベルのキャンセル信号116を命令レジ
スタ8に出力する。その他の場合には、カウンタ部4
は、ローレベルの選択信号111をセレクタ5に出力
し、ローレベルのキャンセル信号116を命令レジスタ
8に出力する。選択信号111は、次にフェッチすべき
命令のアドレスを分岐先のアドレスに変更するために使
用される。キャンセル信号116は、命令レジスタ8に
フェッチされた命令をキャンセルするために使用され
る。
【0051】セレクタ5は、選択信号111のレベルに
応じて、加算器9の出力112と分岐先アドレスレジス
タ6の出力113のうちの一方を選択する。選択信号1
11のレベルがハイレベルである場合には、セレクタ5
は分岐先アドレスレジスタ6の出力113を選択する。
選択信号111のレベルがローレベルである場合には、
セレクタ5は加算器9の出力112を選択する。セレク
タ5の出力115は、プログラムカウンタ2に供給され
る。
【0052】分岐先アドレスレジスタ6には、分岐先ア
ドレス計算部7による計算結果(すなわち、予告分岐命
令の分岐先アドレス)114が供給される。分岐先アド
レスレジスタ6は、計算結果114を出力113として
セレクタ5に供給する。分岐先アドレスレジスタ6は、
予告分岐命令の分岐先アドレスをセレクタ5を介してプ
ログラムカウンタ2に提供する。
【0053】加算器9は、プログラムカウンタ2の値を
1だけインクリメントし、そのインクリメントされた値
を出力112としてセレクタ5に供給する。加算器9
は、逐次命令に続く命令のアドレスを計算するために使
用される。
【0054】プログラムカウンタ2からアドレス101
が出力されてからそのアドレス101に対応する命令1
02が命令レジスタ8にフェッチされるまでの処理を
「命令フェッチ」という。
【0055】命令デコード部3によって実行される処理
を「命令デコード」という。分岐先アドレス計算部7に
よって分岐先アドレスの計算が開始されてからその計算
結果が分岐先アドレスレジスタ6に格納されるまでの処
理を「分岐先アドレスの計算」という。パイプライン・
プロセッサ100は、「命令デコード」と「分岐先アド
レスの計算」とを同一のサイクルにおいて実行する。
【0056】実行部11が情報106と情報108とに
基づいて命令を実行する処理を「命令実行」という。ま
た、実行部11がレジスタファイル12に情報109を
格納する処理を「ライトバック」という。
【0057】このように、パイプライン・プロセッサ1
00における処理は、「命令フェッチ」、「命令デコー
ド」、「命令実行」、「ライトバック」を繰り返すこと
によって実行される。
【0058】図3は、カウンタ部4の構成を示す。カウ
ンタ部4は、カウンタ値Zを保持するダウンカウンタ3
1を含んでいる。
【0059】ダウンカウンタ31には、初期値105と
初期値設定信号104とが入力される。ダウンカウンタ
31に保持されるカウンタ値Zは、初期値設定信号10
4のレベルがハイレベルである場合に初期値105に初
期化される。上述したように、初期値105は、予告分
岐命令の領域23に格納された予告分岐命令から分岐点
までの命令数に等しい。以下、初期値105は値Bに等
しいと仮定する。
【0060】ダウンカウンタ31には、信号110がさ
らに入力される。ダウンカウンタ31に保持されるカウ
ンタ値Zは、信号110に応答して1だけデクリメント
される。カウンタ値Zは、比較器33に出力される。
【0061】比較器33は、カウンタ値Zがしきい値A
に等しいか否かを判定する。しきい値Aは、しきい値設
定部32から供給される。しきい値Aは、1つの命令を
フェッチするのに必要とされるサイクル数(以下、命令
フェッチサイクル数という)に等しくなるように予めし
きい値設定部32に設定される。比較器33は、カウン
タ値Zがしきい値Aに等しい場合にはハイレベルの信号
をOR回路36の一方の入力に供給し、それ以外の場合
にはローレベルの信号をOR回路36の一方の入力に供
給する。OR回路36の他方の入力には、AND回路3
7の出力が供給される。
【0062】減算器34は、初期値Bからしきい値Aを
減算する。減算結果Yは、判定部35と制御信号生成部
38とに供給される。
【0063】判定部35は、演算結果Yが0より小さい
か否かを判定する。判定部35は、演算結果Yが0より
小さい場合にはハイレベルの信号をAND回路37の一
方の入力に供給し、それ以外の場合にはローレベルの信
号をAND回路37の一方の入力に供給する。AND回
路37の他方の入力には、初期値設定信号104が供給
される。
【0064】このようにして、(B<A)または(Z=
A)である場合にのみOR回路36の出力はハイレベル
となり、それ以外の場合にはOR回路36の出力はロー
レベルとなる。これにより、(B<A)または(Z=
A)である場合にのみセレクタ5から分岐先アドレスレ
ジスタ6の出力113が出力される。その以外の場合に
はセレクタ5から加算器9の出力112が出力される。
【0065】制御信号生成部38は、初期値設定信号1
04と減算結果Yとに応じて、キャンセル信号116を
生成する。
【0066】図4(a)は、命令フェッチサイクル数が
3である場合における制御信号生成部38の構成例を示
す。命令フェッチサイクル数が3以外である場合にも、
図4(a)に示される制御信号生成回路38と同様にし
て制御信号生成回路38を構成することができる。
【0067】制御信号生成部38は、カウンタ51〜5
3と、論理回路54と、セレクタ55とを含んでいる。
【0068】カウンタ51〜53は、初期値設定信号1
04に応答して信号を出力する。カウンタ51〜53の
出力は、論理回路54を介してセレクタ55の入力端子
1〜Y3にそれぞれ入力される。
【0069】セレクタ55は、減算器34から入力され
る減算結果Yの値に応じて、入力端子Y1〜Y3に入力さ
れる3つの信号のうちの1つを出力する。セレクタ55
は、Y=1である場合には入力端子Y1に入力される信
号を出力し、Y=2である場合には入力端子Y2に入力
される信号を出力し、Y=3である場合には入力端子Y
3に入力される信号を出力する。セレクタ55の出力
は、キャンセル信号116として命令レジスタ8に供給
される。
【0070】図4(b)は、カウンタ51〜53の出力
の波形と、セレクタ55の出力の波形とを示す。セレク
タ55の出力がハイレベルとなるサイクルにおいて、命
令レジスタ8に保持されている命令がキャンセルされ
る。
【0071】図5(a)は、予告分岐命令を含むプログ
ラムコード列の例を示す。図5(a)において、I1
2、I4、I5、I6は逐次命令を示し、I3は予告分岐
命令「Branch after 3 to X」を示
し、Xは予告分岐命令の分岐先の命令を示す。
【0072】図5(b)は、命令フェッチサイクル数が
2であり、かつ、現実行命令から分岐点までの命令数が
3である予告分岐命令I3を実行する場合におけるパイ
プライン・プロセッサ100の動作を示すタイムチャー
トである。この場合、A=2かつB=3である。
【0073】図5(b)において、IF1〜IF2は命令
フェッチのサイクルを示し、IDは命令デコードのサイ
クルを示し、EXは命令実行のサイクルを示し、WBは
ライトバックのサイクルを示す。
【0074】サイクルC3において予告分岐命令I3が命
令デコード部3によってデコードされる。その結果、予
告分岐命令I3の領域23に格納される値(B=3)が
初期値105としてダウンカウンタ31(図3)に入力
される。ダウンカウンタ31に保持されるカウンタ値Z
は、3に初期化される。ダウンカウンタ31に保持され
るカウンタ値Zは、各サイクルC4〜C6において1つず
つデクリメントされる。
【0075】サイクルC4においてダウンカウンタ31
に保持されるカウンタ値Zとしきい値設定部32(図
3)に設定されているしきい値(A=2)とが一致す
る。その結果、サイクルC4において選択信号111が
ハイレベルとなり、セレクタ5の出力が加算器9の出力
112から分岐先アドレスレジスタ6の出力113に切
り替わる。
【0076】図5(b)において、Sはセレクタ5の出
力115が出力112(逐次命令アドレス)であること
を示し、Bはセレクタ5の出力115が出力113(分
岐先アドレス)であることを示す。
【0077】図6は、命令フェッチサイクル数が3であ
り、かつ、現実行命令から分岐点までの命令数が3であ
る予告分岐命令I3を実行する場合におけるパイプライ
ン・プロセッサ100の動作を示すタイムチャートであ
る。この場合、A=3かつB=3である。
【0078】図6において、IF1〜IF3は命令フェッ
チのサイクルを示し、IDは命令デコードのサイクルを
示し、EXは命令実行のサイクルを示し、WBはライト
バックのサイクルを示す。
【0079】サイクルC3においてダウンカウンタ31
(図3)に保持されるカウンタ値Zは、3に初期化され
る。ダウンカウンタ31に保持されるカウンタ値Zは、
各サイクルC4〜C6において1つずつデクリメントされ
る。
【0080】サイクルC3においてダウンカウンタ31
に保持されるカウンタ値Zとしきい値設定部32(図
3)に設定されているしきい値(A=3)とが一致す
る。その結果、サイクルC3において選択信号111が
ハイレベルとなり、セレクタ5の出力が加算器9の出力
112から分岐先アドレスレジスタ6の出力113に切
り替わる。
【0081】図6において、Sはセレクタ5の出力11
5が出力112(逐次命令アドレス)であることを示
し、Bはセレクタ5の出力115が出力113(分岐先
アドレス)であることを示す。
【0082】このように、パイプライン・プロセッサ1
00によれば、A≦Bである場合には、分岐命令の実行
により遅延は発生しない。従って、パイプラインの乱れ
も生じない。
【0083】図7は、命令フェッチサイクル数が3であ
り、かつ、現実行命令から分岐点までの命令数が2であ
る予告分岐命令I3を実行する場合におけるパイプライ
ン・プロセッサ100の動作を示すタイムチャートであ
る。この場合、A=3かつB=2である。
【0084】図7において、IF1〜IF3は命令フェッ
チのサイクルを示し、IDは命令デコードのサイクルを
示し、EXは命令実行のサイクルを示し、WBはライト
バックのサイクルを示す。
【0085】サイクルC3において初期値115として
与えられる値(B=2)は、命令フェッチサイクル数
(A=3)より小さい。その結果、サイクルC3におい
て選択信号111がハイレベルとなり、セレクタ5の出
力が加算器9の出力112から分岐先アドレスレジスタ
6の出力113に切り替わる。
【0086】図7において、Sはセレクタ5の出力11
5が出力112(逐次命令アドレス)であることを示
し、Bはセレクタ5の出力115が出力113(分岐先
アドレス)であることを示す。
【0087】このように、パイプライン・プロセッサ1
00によれば、A>Bである場合には、予告分岐命令の
実行により遅延が発生する。しかし、図7に示す例で
は、遅延するサイクル数は1である。これに対して、A
=3の場合に従来の分岐命令の実行により遅延するサイ
クル数は3である(図8参照)。
【0088】このように、パイプライン・プロセッサ1
00によれば、予告分岐命令の実行により生じる遅延を
従来よりも小さくすることができる。このことは、パイ
プラインの乱れを最小化する。
【0089】次に、予告分岐命令の分岐条件を判断する
タイミングを説明する。図5(b)、図6、図7に示さ
れるように、予告分岐命令I3の命令実行(EX)のサ
イクルは、ダウンカウンタ31(図3)に保持されるカ
ウンタ値Zが0になるサイクルの次のサイクルである。
このことは、予告分岐命令I3の分岐条件を判断するタ
イミングが現実行命令から分岐点までの命令数(B)に
応じて延期されることを意味する。これにより、予告分
岐命令に続く逐次命令がその予告分岐命令の分岐条件を
判断するのに影響を与えるものであった場合であって
も、分岐条件を正確に判断することができる。
【0090】このような分岐条件を判断するタイミング
は、カウンタ部4において判定回路39(図3)を設け
ることによって規定することができる。
【0091】判定回路39は、ダウンカウンタ31に保
持されるカウンタ値Zが0に一致するか否かを判定す
る。判定回路39は、ダウンカウンタ31に保持される
カウンタ値Zが0に一致する場合にはハイレベルの信号
117を出力し、その他の場合にはローレベルの信号1
17を出力する。信号117は、条件判断部13に供給
される。
【0092】図9は、条件判断部13の構成を示す。条
件判断部13は、予告分岐命令について制御の流れを変
更するか否か(すなわち、分岐先アドレスに分岐するか
否か)を判断する。
【0093】条件判断部13は、コンディション・コー
ド61と、予告分岐命令の領域21に格納されるオペコ
ードによって規定される分岐条件に応じてコンディショ
ン・コード61の値を判断する分岐条件判断部62と、
AND回路63とを含んでいる。
【0094】実行部11は、実行結果109に応じてコ
ンディション・コード61の値を更新する。例えば、コ
ンディション・コード61は、Z(1ビット)、N(1
ビット)、V(1ビット)、C(1ビット)の計4ビッ
トから構成される。Zはゼロフラグを示し、Nはネガテ
ィブフラグを示し、Vはオーバーフローフラグを示し、
Cはキャリーフラグを示す。これらのフラグのそれぞれ
は、例えば、0または1の値を有する。これらのフラグ
の値が実行部11によって更新される。
【0095】分岐条件判断部62には、予告分岐命令の
領域21に格納されるオペコードが命令デコード部3か
ら入力される。
【0096】表1は、予告分岐命令の領域21に格納さ
れるオペコードの種類を示す。この例では、オペコード
は3ビットから構成される。もちろん、オペコードは3
ビット以外のビットから構成されてもよい。
【0097】
【表1】
【0098】例えば、オペコード「100」は、「Br
anch on not equal(コンディション
・コード61のゼロフラグZの値がゼロでないという条
件が満たされれば分岐アドレスに分岐せよ)」という命
令に対応する。分岐条件判断部62は、命令デコード部
3からオペコード「100」を受け取った場合には、コ
ンディション・コード61のゼロフラグZの値がゼロで
あるか否かを判断する。 ゼロフラグZの値がゼロでな
い場合(すなわち、オペコード「100」によって規定
される分岐条件が満たされる場合)には、分岐条件判断
部62は、ハイレベルの信号をAND回路63の反転入
力に供給する。ゼロフラグZの値がゼロである場合(す
なわち、オペコード「100」によって規定される分岐
条件が満たされない場合)には、分岐条件判断部62
は、ローレベルの信号をAND回路63の反転入力に供
給する。
【0099】分岐条件を判断するタイミングを規定する
信号117がカウンタ部4の判定回路39からAND回
路63の入力に供給される。
【0100】このようにして、AND回路63の出力
は、分岐条件を判断するタイミングであり、かつ、分岐
条件が満たされていない場合にハイレベルとなり、その
他の場合にはローレベルとなる。
【0101】AND回路63の出力は、パイプライン中
の命令をキャンセルする信号として命令レジスタ8と命
令デコード部3と実行部11とに供給される。AND回
路63の出力がハイレベルとなるサイクルにおいて、命
令レジスタ8と命令デコード部3と実行部11のそれぞ
れは、命令をキャンセルする。
【0102】なお、図9に示される例では、説明の簡単
のため、条件判断部13は、コンディション・コード6
1に基づいて分岐するか否かを判断する構成とした。他
の条件に基づいて分岐するか否かを判断するように条件
判断部13を構成することも可能である。例えば、条件
判断部13は、レジスタファイル12の特定のレジスタ
の値に基づいて分岐するか否かを判断してもよい。
【0103】以下、プログラムコードにおける予告分岐
命令の位置について説明する。
【0104】図10(a)は、従来の分岐命令を含むプ
ログラムコードの例である。図10(a)において、S
1〜S3、S4〜S7は逐次命令を示し、B1およびB2は分
岐命令を示す。
【0105】図10(b)は、予告分岐命令を含むプロ
グラムコードの例である。図10(b)において、S1
〜S3、S4〜S7は逐次命令を示し、B1は3つの命令を
実行後に分岐する予告分岐命令を示し、B2は4つの命
令を実行後に分岐する予告分岐命令を示す。図10
(b)に示されるプログラムコードにおいて命令が実行
される順序は、図10(a)に示されるプログラムコー
ドにおいて命令が実行される順序と同じである。
【0106】プログラムコードにおける予告分岐命令の
最適な配置は、直前の分岐点(実際に分岐が起こるべき
位置)の直後に予告分岐命令を配置することである(図
10(b)参照)。このような予告分岐命令の配置が、
その予告分岐命令の条件判断に悪影響を与えることはな
い。予告分岐命令の分岐条件を判断するタイミングは、
ダウンカウンタ31に保持されるカウンタ値Zに基づい
て適切に延期される。従って、予告分岐命令に続く逐次
命令が予告分岐命令の分岐条件を判断するのに影響を与
える場合でも、それらの影響の結果を踏まえて分岐条件
を判断することができる。
【0107】上述したパイプライン・プロセッサ100
は、ハードフェア的な利点に加えてソフトフェア的な利
点も併せ持っている。すなわち、パイプライン・プロセ
ッサ100は、プログラムコードの可搬性を向上させ
る。
【0108】例えば、パイプライン・プロセッサ100
は、従来の分岐命令を含むプログラムコードを実行する
ことも可能である。予告分岐命令「Branch af
ter 0 to X」(0個の命令を実行した後に命
令Xに分岐する予告分岐命令)は、従来の分岐命令と等
価だからである。このことは、過去に作成したプログラ
ムコードの継続的な使用を保証する。
【0109】また、パイプライン・プロセッサ100を
命令フェッチサイクル数の異なる2つのハードウェアで
実現した場合、同一のプログラムコードを両方のハード
ウェアで実行することが可能である。このことも、過去
に作成したプログラムコードの継続的な使用を保証す
る。遅延分岐の手法では、プログラムコードの継続的な
使用は保証されない。例えば、遅延スロット=2で生成
したプログラムコードを遅延スロット=3に対応するハ
ードウェアで実行することは不可能である(あるいは、
著しく性能が劣化する)。この点で、本発明の手法と遅
延分岐の手法とは、著しい対照をなす。
【0110】命令フェッチサイクル数は増加する傾向に
あり、それに応じてハードウェアは更新を余儀なくされ
る。しかし、ソフトウェアの更新はハードウェアの更新
に比較して膨大なコストを必要とする。それゆえ、過去
に作成したプログラムの継続的な使用を保証すること
は、重要な意義を有するのである。
【0111】
【発明の効果】本発明のパイプライン・プロセッサによ
れば、大量のメモリや動作速度に影響を与えることな
く、分岐命令の実行により遅延が生じることを防止する
ことができる。また、1つの命令をフェッチするのに必
要なサイクル数が増大した場合でも、分岐命令の実行に
より遅延が生じることを防止することができる。
【0112】さらに、本発明のパイプライン・プロセッ
サは、特別なハードウェアを必要としない。
【0113】本発明のパイプライン・プロセッサによれ
ば、分岐位置よりも以前に分岐先アドレスを計算できる
ので、逐次命令から分岐先命令へのフェッチの切り替え
動作に際して分岐先アドレスの計算終了を待つことがな
い。これにより、分岐命令の実行に伴って生じるパイプ
ラインの乱れをなくすことができる。
【図面の簡単な説明】
【図1】本発明によるパイプライン・プロセッサ100
の構成を示す図である。
【図2】パイプライン・プロセッサ100において使用
される分岐命令のフォーマットを示す図である。
【図3】カウンタ部4の構成を示す図である。
【図4】(a)は制御信号生成部38の構成を示す図、
(b)は制御信号生成部38における信号の波形を示す
図である。
【図5】(a)は予告分岐命令を含むプログラムコード
列の例を示す図、(b)はA=2かつB=3の場合にお
けるパイプライン・プロセッサ100の動作を示すタイ
ムチャートである。
【図6】A=3かつB=3の場合におけるパイプライン
・プロセッサ100の動作を示すタイムチャートであ
る。
【図7】A=3かつB=2の場合におけるパイプライン
・プロセッサ100の動作を示すタイムチャートであ
る。
【図8】A=3の場合における従来のパイプライン・プ
ロセッサ100の動作を示すタイムチャートである。
【図9】条件判断部13の構成を示す図である。
【図10】(a)は従来の分岐命令を含むプログラムコ
ードの例を示す図、(b)は予告分岐命令を含むプログ
ラムコードの例を示す図である。
【図11】BTBを用いた従来のプロセッサの構成を示
す。
【図12】BTBの構成例を示す。
【符号の説明】
1 命令メモリ 2 プログラムカウンタ 3 命令デコード部 4 カウンタ部 5 セレクタ 6 分岐先アドレスレジスタ 7 分岐先アドレス計算部 8 命令レジスタ 9 加算器 10 BTB 11 実行部 12 レジスタファイル 13 条件判断部 100 パイプライン・プロセッサ

Claims (8)

    (57)【特許請求の範囲】
  1. 【請求項1】 制御の流れを変更するまでに予告分岐命
    令の後に続いて実行されるべき少なくとも1つの命令の
    数を定義する予告分岐命令を実行するパイプライン・プ
    ロセッサであって、 フェッチすべき命令のアドレスを保持するプログラムカ
    ウンタと、 該プログラムカウンタによって保持されるアドレスに対
    応する命令を出力する命令メモリと、 該命令メモリから出力された命令をフェッチし保持する
    命令レジスタと、 該命令レジスタによって保持された命令をデコードする
    ことにより、該命令が該予告分岐命令であるか否かを識
    別する命令デコード部と、 カウンタ値を保持し、該カウンタ値と所定のしきい値と
    を比較するカウンタ部であって、該カウンタ値は該予告
    分岐命令によって定義された命令数に初期化され、該カ
    ウンタ値は該プログラムカウンタがインクリメントされ
    るのに同期してデクリメントされるカウンタ部と、 該プログラムカウンタによって保持されるアドレスをイ
    ンクリメントし、該インクリメントされたアドレスを逐
    次命令アドレスとして提供する加算器と、 該予告分岐命令の分岐先アドレスを提供する分岐先アド
    レスレジスタと、 該カウンタ部の比較結果に応じて、該逐次命令アドレス
    と該予告分岐命令の分岐先アドレスとのうちの一方を選
    択するセレクタとを備えたパイプライン・プロセッサ。
  2. 【請求項2】 前記予告分岐命令は、前記命令の種類を
    識別するオペコードを格納する領域と、前記分岐先アド
    レスを指定する領域と、前記制御の流れを変更するまで
    に予告分岐命令の後に続いて実行されるべき少なくとも
    1つの命令の数を格納する領域とを含んでいる、請求項
    1に記載のパイプライン・プロセッサ。
  3. 【請求項3】 前記所定のしきい値は、1つの命令をフ
    ェッチするのに必要なサイクル数に等しい、請求項1に
    記載のパイプライン・プロセッサ。
  4. 【請求項4】 前記カウンタ部は、前記カウンタ値と前
    記所定のしきい値とが一致する場合に、前記予告分岐命
    令の分岐先アドレスを選択する選択信号を前記セレクタ
    に出力する、請求項1に記載のパイプライン・プロセッ
    サ。
  5. 【請求項5】 前記カウンタ部は、前記予告分岐命令に
    よって定義された命令の数が前記所定のしきい値より小
    さい場合に、前記予告分岐命令の分岐先アドレスを選択
    する選択信号を前記セレクタに出力する、請求項1に記
    載のパイプライン・プロセッサ。
  6. 【請求項6】 前記カウンタ部は、前記予告分岐命令に
    よって定義された命令の数が前記所定のしきい値より小
    さい場合に、前記命令レジスタによって保持された命令
    をキャンセルする信号を前記命令レジスタに出力する、
    請求項1に記載のパイプライン・プロセッサ。
  7. 【請求項7】 前記パイプライン・プロセッサは、 前記予告分岐命令について前記制御の流れを変更するか
    否かを判断する条件判断部をさらに備えており、 前記カウンタ部は、前記カウンタ値が所定の値に達した
    場合に、前記予告分岐命令について前記制御の流れを変
    更するか否かを判断するタイミングを規定する信号を該
    条件判断部に出力する、請求項1に記載のパイプライン
    ・プロセッサ。
  8. 【請求項8】 前記条件判断部は、前記予告分岐命令に
    ついて前記制御の流れを変更しないと判断した場合に、
    前記命令レジスタによって保持された命令をキャンセル
    する信号を前記命令レジスタに出力し、前記命令デコー
    ド部によってデコードされる命令をキャンセルする信号
    を前記命令デコード部に出力する、請求項7に記載のパ
    イプライン・プロセッサ。
JP8086868A 1995-04-12 1996-04-09 パイプライン・プロセッサ Expired - Fee Related JP2883035B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP8086868A JP2883035B2 (ja) 1995-04-12 1996-04-09 パイプライン・プロセッサ

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP8684495 1995-04-12
JP7-86844 1995-04-12
JP8086868A JP2883035B2 (ja) 1995-04-12 1996-04-09 パイプライン・プロセッサ

Publications (2)

Publication Number Publication Date
JPH08339299A JPH08339299A (ja) 1996-12-24
JP2883035B2 true JP2883035B2 (ja) 1999-04-19

Family

ID=26427923

Family Applications (1)

Application Number Title Priority Date Filing Date
JP8086868A Expired - Fee Related JP2883035B2 (ja) 1995-04-12 1996-04-09 パイプライン・プロセッサ

Country Status (1)

Country Link
JP (1) JP2883035B2 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6076152A (en) * 1997-12-17 2000-06-13 Src Computers, Inc. Multiprocessor computer architecture incorporating a plurality of memory algorithm processors in the memory subsystem
JP2007287186A (ja) * 2007-08-09 2007-11-01 Denso Corp Risc型cpu,コンパイラ及びマイクロコンピュータ
GB2548604B (en) * 2016-03-23 2018-03-21 Advanced Risc Mach Ltd Branch instruction
JP6931252B1 (ja) * 2020-08-07 2021-09-01 LeapMind株式会社 ニューラルネットワーク回路およびニューラルネットワーク回路の制御方法

Also Published As

Publication number Publication date
JPH08339299A (ja) 1996-12-24

Similar Documents

Publication Publication Date Title
KR100233220B1 (ko) 파이프라인 처리기
US6338136B1 (en) Pairing of load-ALU-store with conditional branch
US5954815A (en) Invalidating instructions in fetched instruction blocks upon predicted two-step branch operations with second operation relative target address
US6189091B1 (en) Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection
US5949995A (en) Programmable branch prediction system and method for inserting prediction operation which is independent of execution of program code
JP2744890B2 (ja) ブランチ予測式データ処理装置および動作方法
JP2004533695A (ja) 分岐目標を予測する方法、プロセッサ、及びコンパイラ
EP0180725A2 (en) Instruction prefetch operation for branch instructions
JPH10133873A (ja) 複数の分岐予測方式のうちの選択された1つを使用して条件分岐命令を投機的に実行するためのプロセッサおよび方法
KR20070118135A (ko) 인덱스당 2개 이상의 분기 타겟 어드레스를 저장하는 분기타겟 어드레스 캐시
JP5209633B2 (ja) ワーキング・グローバル・ヒストリ・レジスタを備えるシステム及び方法
US20010020267A1 (en) Pipeline processing apparatus with improved efficiency of branch prediction, and method therefor
EP3166015A1 (en) Fetch ahead branch target buffer
US4541047A (en) Pipelined data processing system
US4739470A (en) Data processing system
EP0655679A2 (en) Method and apparatus for controlling instruction in pipeline processor
JP4412905B2 (ja) 低電力動作制御装置、およびプログラム最適化装置
US5146570A (en) System executing branch-with-execute instruction resulting in next successive instruction being execute while specified target instruction is prefetched for following execution
JPH08320788A (ja) パイプライン方式プロセッサ
US5926634A (en) Limited run branch prediction
JP2883035B2 (ja) パイプライン・プロセッサ
US7765387B2 (en) Program counter control method and processor thereof for controlling simultaneous execution of a plurality of instructions including branch instructions using a branch prediction mechanism and a delay instruction for branching
US7472264B2 (en) Predicting a jump target based on a program counter and state information for a process
US20040003213A1 (en) Method for reducing the latency of a branch target calculation by linking the branch target address cache with the call-return stack
JP2006053830A (ja) 分岐予測装置および分岐予測方法

Legal Events

Date Code Title Description
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 19990121

LAPS Cancellation because of no payment of annual fees