(57)【要約】【課題】  実行処理時に複数サイクルが必要な所定の命令を含むプログラムを処理する場合に、そのプログラム中にＮＯＰ命令を配置しておかなくとも、フォワーディングが可能なパイプライン演算処理装置の提供。【解決手段】  制御部１１は、命令メモリ１から読み出された命令が、実行処理時に２サイクルを必要とするロード命令であるか否かを判定する。この結果、ロード命令と判定したときには、そのロード命令の２サイクルの期間において、第１サイクル目にプログラムカウンタ１０の動作を停止させて後続命令の処理の実行を停止させ、第２サイクル目にプログラムカウンタ１０を動作させて後続命令の処理を実行させるようにした。一方、ロード命令と判定しないときは、何ら処理を行わない。【選択図】  図１
2005134987.tif 000002
【特許請求の範囲】
【請求項１】
命令がパイプライン処理されるパイプライン演算処理装置において、
前記命令が実行処理時に複数サイクルを必要とする所定命令であるか否を判定する判定手段と、
この判定手段が、前記命令が所定命令であると判定したときには、その所定命令の実行処理が行われる複数サイクルの期間において、後続命令の処理の実行を停止させ、その停止の解除後に前記後続命令の処理を実行させる制御手段と、
を備えていることを特徴とするパイプライン演算処理装置。
【請求項２】
前記判定手段は、前記命令が実行処理時に２サイクルを必要とするロード命令であるか否かを判定するようになっており、
前記制御手段は、前記判定手段がロード命令であると判定したときには、そのロード命令の実行処理が行われる２サイクルの期間において、第１サイクル目にプログラムカウンタの動作を一時停止させて後続命令の処理の実行を停止させ、第２サイクル目に前記プログラムカウンタを動作させて前記後続命令の処理を実行させるようになっていることを特徴とする請求項１に記載のパイプライン演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令を細かい処理単位に分割し、それらをオーバラップさせて処理し、命令の処理の高速化を図るパイプライン演算処理装置に関する。
【背景技術】
【０００２】
この種のパイプライン演算処理装置としては、所定の段数の命令パイプライン処理向けに開発されたプログラムを、より段数の多い命令パイプライン処理で実行する場合にも、正確に動作するものが知られている（特許文献１参照）。
ところで、従来のパイプライン演算処理装置が行うパイプライン処理として、図３に示すように、例えば第１命令が分岐命令の場合には、以下のような処理がなされていた。
【０００３】
すなわち、この場合には、その分岐命令を命令解読ステージＲＤで解読して確定するまでは、後続の命令の読み出しアドレスが決定されない。このため、第２命令として、ＮＯＰ（No Operation：無操作）命令を置いていた。
ここで、図３において、「ＩＦ」は命令を取り込むための命令取り込みステージを表し、「ＲＤ」は命令をデコード（解読）する命令解読ステージを表し、「ＥＸＥ」は命令を実行する命令実行ステージを表し、これらの意味は本明細書においては、以下同様である。
【０００４】
また、従来のパイプライン演算処理装置が行うパイプライン処理として、図４に示すように、例えば第１命令および第２命令の双方が分岐命令というように、分岐命令が連続する場合には、プログラムが破綻するという不都合ある。
すなわち、分岐命令が連続する場合には、１番目の分岐先アドレスに遷移後、次のサイクルで本来分岐先アドレスをインクリメントしたアドレスにならなくてはいけないが、２番目の分岐先のアドレスに書き換わってしまい、このため１番目の分岐先で実行されるプログラムが実行されずに破綻してしまう。
【０００５】
このため、両分岐命令、すなわち第１命令および第２命令の後にそれぞれのＮＯＰ命令を置くことで、プログラムの破綻を防止していた。
さらに、従来のパイプライン演算処理装置では、ステージ「ＲＤ」でレジスタから値を実行部に読み込むために、直前の命令の演算結果を直後の命令で使えないという不都合があり、この不都合を解消するために、フォワーディング機構（チェイニング機構）を備えている。
【０００６】
このフォワーディング機構は、１つのレジスタに対して、データの書き込みと読み出しが同時に発生した場合に、書き込みデータを演算処理装置へ直接引き渡す仕組みである。これにより、各命令の見かけ上のディレイ・スロットを１つずつ少なくするという効果がある。
図５に、命令実行ステージＥＸＥ１、ＥＸＥ２が２サイクルである第１命令の演算結果が、フォワーディングによって第３命令で利用可能となる例を示す。
【０００７】
次に、図６では、次のようなプログラムからなる、加算命令ADD と分岐命令BEQ とをパイプライン処理する場合について検討する。
ADD ％SR0 ％SR1 ％SR2 （レジスタSR0 ＝レジスタSR1 ＋レジスタSR2 )
BEQ ％SR0 ％SR3 L abel1（レジスタSR0 ＝レジスタSR3 ならばLabel1へ分岐)
この場合において、フォワーディング機構があれば、加算命令ADD と分岐命令BEQ のパイプライン処理は、図６に示すようになりインタ−ロックさせる必要はない。
【特許文献１】特開平２０００−２９６９６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００８】
ところで、従来は、パイプライン処理において、上記のように分岐命令が複数連続する場合には、その各分岐命令の直後にＮＯＰ命令をそれぞれ置くようにしている。
この場合にはＮＯＰ命令を各分岐命令の直後にいちいち追加するため、プログラムコード量が増加するという不都合がある。
一方、上記のように、加算命令と分岐命令を行う場合には、フォワーディング機構を用いて、分岐命令の直前の命令の実行ステージで得られたデータを分岐命令の分岐条件として直接用いることは理論的に可能である。
【０００９】
しかし、加算命令における命令の実行時間と分岐命令のアドレス生成時間とを加えた時間は、演算回路の遅延が大きくなり動作周波数が低下する原因になる。
そこで、フォワーディングがかかる場合でもプログラムを変更せずに分岐処理に対処でき、フォワーディングの遅延による動作周波数の低下を抑えることができる、以下のようなパイプライン処理が考えられる。
【００１０】
このパイプライン処理の一例について、図７を参照して説明する。
図７は、次のようなプログラムからなる加算命令ＡＤＤと、分岐命令ＢＥＱとを実行する場合であって、分岐命令の分岐条件に使用されるレジスタＳＲ０が、直前の加算命令で更新される場合である。
サンプルコードＡ
ADD ％SR0 ％SR1 ％SR2 （レジスタSR0 ＝レジスタSR1 ＋レジスタSR2 )
BEQ ％SR0 ％S R3 Label1（レジスタSR0 ＝レジスタSR3 ならばLabel1へ分岐)
この場合には、最初のクロックサイクル「１」で、第１命令（加算命令）が命令メモリから命令レジスタに取り込まれる（ＩＦステージ）。
【００１１】
次のクロックサイクル「２」では、その命令レジスタに取り込まれた第１命令（加算命令）が解読され（ＲＤステージ）、これと同時に、第２命令（分岐命令）が命令メモリから命令レジスタに取り込まれる（ＩＦステージ）。
次のクロックサイクル「３」では、その解読された第１命令（加算命令）が実行され、その処理結果がレジスタに書き込まれる。
【００１２】
また、クロックサイクル「３」では、第２命令（分岐命令）を解読し、第１命令（加算命令）の加算結果を書き込むレジスタと、第２命令（分岐命令）で読み出すレジスタとが同一か否かを判定する。この判定の結果、両レジスタが同一の場合には、ハードウエアを用いてＮＯＰ命令に置き換えるようにし、レジスタから分岐命令を読み出すことはしない。さらに、クロックサイクル「３」では、第３命令が命令メモリから命令レジスタに取り込まれる。
【００１３】
次のクロックサイクル「４」では、第２命令に関して以下のように処理される。すなわち、第１命令（加算命令）で実行された加算結果を書き込んだレジスタを読み込み、分岐先のアドレスを生成する。
また、クロックサイクル「４」では、第３命令は以下のように処理される。すなわち、プログラムカウンタの動作（インクリメント）を停止させ、第３命令が再び命令メモリから命令レジスタに取り込まれる。
【００１４】
以上説明した処理は、以下のプログラムのように、加算命令ＡＤＤと、分岐命令ＢＥＱとの間に、ＮＯＰ命令（内部の状態を変化させない命令）が挿入された場合と同じ動作をする。
ADD ％SR0 ％SR1 ％SR2 （レジスタSR0 ＝レジスタSR1 ＋レジスタSR2 )
NOP
BEQ ％SR0 ％SR3 Label1（レジスタSR0 ＝レジスタSR3 ならばLabel1へ分岐)
このように、図７に示すような処理では、第１命令（加算命令）の加算結果を書き込むレジスタと、第２命令（分岐命令）で読み出すレジスタとが同一の場合に、ハードウエア的にＮＯＰ命令に置き換えることにより、プログラムからＮＯＰ命令を省略することができる。
【００１５】
しかし、ロード命令のように実行処理時に２サイクルからなる命令でフォワーディングを行う場合には、プログラムにおいて、ロード命令の後に必ずＮＯＰ命令を配置しておくが必要であるという制約があった。
そこで、本発明の目的は、実行処理時に複数サイクルが必要な所定の命令を含むプログラムを処理する場合に、そのプログラム中にＮＯＰ命令を配置しておかなくとも、フォワーディングが可能なパイプライン演算処理装置を提供することにある。
【課題を解決するための手段】
【００１６】
上記の課題を解決し本発明の目的を達成するために、各発明は、以下のように構成した。
即ち、第１の発明は、命令がパイプライン処理されるパイプライン演算処理装置において、前記命令が実行処理時に複数サイクルを必要とする所定命令であるか否を判定する判定手段と、この判定手段が、前記命令が所定命令であると判定したときには、その所定命令の実行処理が行われる複数サイクルの期間において、後続命令の処理の実行を停止させ、その停止の解除後に前記後続命令の処理を実行させる制御手段と、を備えている。
【００１７】
第２の発明は、第１の発明において、前記判定手段は、前記命令が実行処理時に２サイクルを必要とするロード命令であるか否かを判定するようになっており、前記制御手段は、前記判定手段がロード命令であると判定したときには、そのロード命令の実行処理が行われる２サイクルの期間において、第１サイクル目にプログラムカウンタの動作を一時停止させて後続命令の処理の実行を停止させ、第２サイクル目に前記プログラムカウンタを動作させて前記後続命令の処理を実行させるようになっている。
【００１８】
このような構成からなる本発明によれば、実行処理時に複数サイクルが必要な所定の命令を含むプログラムを処理する場合に、そのプログラム中にＮＯＰ命令を配置しておかなくとも、フォワーディングが可能なパイプライン演算処理装置を提供できる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を参照して説明する。
図１は、本発明のパイプライン演算処理装置の実施形態の構成を示すブロック図である。
この実施形態に係るパイプライン演算処理装置は、図１に示すように、命令メモリ１と、命令レジスタ２と、分岐先アドレス計算部３と、命令デコード部４と、実行部５と、レジスタファイル６と、加算器８と、マルチプレクサ９と、プログラムカウンタ１０と、制御部１１とを備えている。
【００２０】
命令メモリ１は、各種の命令（プログラム）を格納するメモリであり、所定のアドレスに所定の命令が格納されるようになっている。この命令メモリ１は、プログラムカウンタ１０が指定するアドレス（番地）の命令を読み出し、その読み出した命令を命令レジスタ２に出力するようになっている。
命令レジスタ２は、命令メモリ１から出力された命令を一時的に格納するレジスタである。この命令レジスタ２に格納される命令は、命令デコード部４に供給されるようになっている。
【００２１】
分岐先アドレス計算部３は、命令デコード部４からの命令に基づいて、その命令の分岐先のアドレスを計算する必要があるときには、その分岐先アドレスを求めるものである。この分岐先アドレス計算部３が求めたアドレスは、マルチプレクサ９の入力側に供給されるようになっている。
命令デコード部４は、命令レジスタ２からの命令をデコード（解釈）するものである。この命令デコード部４で解釈された命令は、実行部５に供給されるようになっている。
【００２２】
実行部５は、命令デコード部４でデコードされた命令を実行するものである。この実行部５で処理されたデータは、レジスタファイル６の所定のレジスタに格納されるようになっている。
レジスタファイル６は、複数のレジスタからなり、その各レジスタには実行部５で処理されたデータが格納されるようになっている。その各レジスタの内容は、命令デコード部４および実行部５にそれぞれ供給できるようになっている。
【００２３】
加算器８は、プログラムカウンタ１０からの指示に基づき、次の命令を読み出すための加算を行い、その加算結果を出力するものである。次の命令を読み出すための加算とは、命令長に依存し３２ビット固定長命令の場合は＋４になり、１６ビット固定長命令の場合は＋２になる。この加算器８の加算出力は、マルチプレクサ９の入力側に供給されるようになっている。
【００２４】
マルチプレクサ９は、制御部１１からの指示に基づいて分岐先アドレス計算部３または加算器８の出力を選択するものである。このマルチプレクサ９の出力は、プログラムカウンタ１０に供給されるようになっている。
プログラムカウンタ１０は、マルチプレクサ９からの出力に基づき、命令メモリ１の命令を読み出すアドレスを求めるカウンタである。このプログラムカウンタ１０の求めたアドレスは、命令メモリ１に供給されるようになっている。また、プログラムカウンタ１０は、後述のように制御部１１からの制御に基づき、その動作（インクリメント）が一時的に停止（ロック）されるように構成されている。
【００２５】
制御部１１は、命令レジスタ２から供給される命令が、その実行処理時に複数サイクル（例えば２サイクル）を必要とする所定の命令（この例ではロード命令）であるか否を判定するようになっている。
また、制御部１１は、その命令がロード命令であると判定した場合には、そのロード命令の実行処理が行われる２サイクルの期間において、第１サイクル目にプログラムカウンタ１０の動作を一時停止させて後続命令の処理の実行を停止させ、第２サイクル目にプログラムカウンタ１０を動作させて後続命令の処理を実行させるようになっている。
【００２６】
なお、制御部１１の上述のような制御の具体例は、後述のように図面を参照して説明する。
次に、このような構成からなる実施形態のパイプライン処理について、図２を参照して説明する。
この例では、第１命令が実行処理時に２サイクルを必要とするロード命令（ＬＷ）であり、第２命令が加算命令（ＡＤＤ）である場合について説明する。
【００２７】
すなわち、この例では、プログラムが以下のようなサンプルコードからなる場合について説明する。
LW  ％SR0 [ ％SR1 ] ％SR2 （( レジスタSR1 ＋レジスタSR2 ) のアドレスから読み出す)
ADD ％SR3 ％SR0 ％SR3 （レジスタSR3 ＝レジスタSR0 ＋レジスタSR3 )
この場合には、図２に示すように、最初のクロックサイクル「１」で、第１命令が命令メモリ１から命令レジスタ２に取り込まれる（ＩＦステージ）。このとき、制御部１１は、その命令レジスタ２に取り込まれた第１命令を受け取り、その受け取った第１命令が実行処理時に２サイクルを必要とするロード命令か否かを判定する。
【００２８】
ここで、第１命令は上記のようにロード命令であるので、制御部１１はその第１命令をロード命令であると判定する。
次のクロックサイクル「２」では、命令レジスタ２に取り込まれた第１命令が、命令デコード部４で解読される（ＲＤステージ）。このときには、次の第２命令が命令メモリ１から命令レジスタ２に取り込まれる（ＩＦステージ）。また、このときには、制御部１１は、その命令レジスタ２に取り込まれた第２命令がロード命令か否かを判定するが、ここではロード命令でないと判定する。
【００２９】
次のクロックサイクル「３」では、命令デコード部４で解読された第１命令が実行部５で実行され、この実行の結果、データメモリ（図示せず）の読み出しアドレスが生成される（ＥＸＥ１ステージ）。
ここで、制御部１１は、上記のように第１命令が、実行処理時に２サイクルを必要とするロード命令であると判定している。このため、クロックサイクル「３」では、制御部１１はプログラムカウンタ１０の動作を一時停止させる。この結果、命令レジスタ２に取り込まれている第２命令は、命令デコード部４で解読されず、第３命令が命令メモリ１から命令レジスタ２に取り込まれない。
【００３０】
次のクロックサイクル「４」では、第１命令に関して以下の処理が行われる。すなわち、上記のように生成されたデータメモリのアドレスからデータを読み出し、この読み出したデータをレジスタファイル６のレジスタに書き込む（ＥＸＥ２ステージ）。
また、クロックサイクル「４」では、第２命令に関して以下の処理が行われる。すなわち、命令レジスタ２に取り込まれている第２命令が、命令デコード部４で解読される（ＲＤステージ）。
【００３１】
また、このときには、制御部１１からの指示に基づき、実行部５は、上記のように第１命令でデータメモリから読み出したデータを、フォワーディングする。すなわち、実行部５は、第１命令でデータメモリから読み出したデータを、次のクロックサイクル「５」の演算で入力データとしてそのまま使用できるようにする。
さらに、クロックサイクル「４」では、第３命令が命令メモリ１から命令レジスタ２に取り込まれる（ＩＦステージ）。
【００３２】
次のクロックサイクル「５」では、第２命令に関して以下の処理が行われる。すなわち、実行部５は、上記のようにフォワーディングされたデータを用いて加算処理を行う（ＥＸＥステージ）。また、クロックサイクル「５」では、命令レジスタ２に取り込まれている第３命令が命令デコード部４で解読され（ＲＤステージ）、第４命令が命令メモリ１から命令レジスタ２に取り込まれる（ＩＦステージ）。
【００３３】
次のクロックサイクル「６」では、命令デコード部４で解読された第３命令の内容が、実行部５で実行され（ＥＸＥステージ）、命令レジスタ２に取り込まれている第４命令が命令デコード部４で解読される（ＲＤステージ）。
以上説明したように、この実施形態では、命令が実行処理時に２サイクルを必要とするロード命令であるか否かを判定するようにし、ロード命令であると判定したときには、そのロード命令の実行処理が行われる２サイクルの期間において、第１サイクル目にプログラムカウンタの動作を停止させて後続命令の処理の実行を停止させ、第２サイクル目にプログラムカウンタを動作させて後続命令の処理を実行させるようにした。
【００３４】
このため、この実施形態によれば、プログラムにロード命令のように実行処理に２サイクルを必要とする命令が含まれる場合に、プログラムのロード命令の後にＮＯＰ命令を配置する必要がなくなり、プログラムコード量を減少できる。
なお、上記の実施形態では、実行処理に２サイクルを必要とする命令の一例として、ロード命令の場合について説明した。
【００３５】
しかし、実行処理時に２サイクル、または２サイクル以上（複数サイクル）を必要とする命令には、上記のロード命令の他に、積和演算命令、ベクトル命令などをあげることができる。
このように、実行処理時に複数サイクルを必要とする特定の命令がプログラムに含まれる場合には、命令メモリ１から命令レジスタ２に命令が取り込まれたときに、制御部１１は、その命令が特定の命令であるか否かを判定する。そして、特定の命令であると判定した場合には、その特定命令の実行処理が行われる複数のサイクルの期間に、上記のようにロード命令であると判定された場合と同様の処理を行う。
【図面の簡単な説明】
【００３６】
【図１】本発明の実施形態の構成を示すブロック図である。
【図２】この実施形態において、実行処理時に２サイクルを必要とする命令を含む場合のパイプライン処理を説明する説明図である。
【図３】従来のパイプライン処理の一例を説明するための説明図である。
【図４】従来のパイプライン処理における分岐時の不都合を説明するための説明図である。
【図５】従来のパイプライン処理におけるフォワーディングを説明するための説明図である。
【図６】従来のパイプライン処理における他のフォワーディングを説明するための説明図である。
【図７】従来のパイプライン処理において、前後で同じレジスタを使用する場合の不都合を解消するために考えられるパイプライン処理を説明するための説明図である。
【符号の説明】
【００３７】
１は命令メモリ、２は命令レジスタ、３は分岐先アドレス計算部、４は命令デコード部、５は実行部、６はレジスタファイル、８は加算器、９はマルチプレクサ、１０はプログラムカウンタ、１１は制御部である。
【図１】
2005134987.tif 000003
【図２】
2005134987.tif 000004
【図３】
2005134987.tif 000005
【図４】
2005134987.tif 000006
【図５】
2005134987.tif 000007
【図６】
2005134987.tif 000008
【図７】
2005134987.tif 000009