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