(57)【特許請求の範囲】
【請求項１】
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とするプロセッサ。
【請求項２】
前記制御回路は、前記第１演算命令又は前記第２演算命令を待たせた場合には、次のサイクルでこの待たせた前記第１演算命令又は第２演算命令を実行するように制御する、ことを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記制御回路は、前記第１演算命令及び前記第２演算命令に対するオペランドの制御をするオペランド系制御回路を、さらに備えることを特徴とする請求項１に記載のプロセッサ。
【請求項４】
前記インターロック信号発生回路は、
前記第１パイプラインに発行された命令が有効なものであることを示す第１有効信号が入力され、前記第１インターロック信号に応じて、前記第１有効信号を保持し、又は、出力する、第１有効信号保持出力回路と、
前記第１パイプラインに前記第２演算命令が発行されたことを示す第２演算命令発行信号が入力され、前記第１インターロック信号に応じて、前記第２演算命令発行信号を保持し、又は、出力する、第２演算命令発行信号保持出力回路と、前記第２パイプラインに発行された命令が有効なものであることを示す第２有効信号が入力され、前記第２インターロック信号に応じて、前記第２有効信号を保持し、又は、出力する、第２有効信号保持出力回路と、
前記第２パイプラインに前記第１演算命令が発行されたことを示す第１演算命令発行信号が入力され、前記第２インターロック信号に応じて、前記第１演算命令発行信号を保持し、又は、出力する、第１演算命令発行信号保持出力回路と、インターロック用ファースト信号を出力するステート回路であって、第１パイプラインに発行された命令が第２パイプラインに発行された命令よりも先の命令であるか、又は、その逆であるかを示すファースト信号が入力されるとともに、前のサイクルの前記第１インターロック信号と前記第２インターロック信号と前記第１有効信号と前記第２有効信号と前記インターロック用ファースト信号とが入力される、ステート回路と、
前記第１有効信号と前記第２有効信号と前記第１演算命令発行信号と前記第２演算命令発行信号と前記インターロック用ファースト信号とが入力され、前記第１インターロック信号と前記第２インターロック信号とを出力する、組合せ論理回路と、
を備えることを特徴とする請求項１に記載のプロセッサ。
【請求項５】
前記ステート回路は、
前のサイクルで前記第１有効信号と前記第２有効信号とが有効状態であり、かつ、
前のサイクルで前記第１インターロック信号と前記第２インターロック信号のうちの一方がインターロック状態であったときは、
次のサイクルで前のサイクルにおける前記インターロック用ファースト信号を反転して出力する、
ことを特徴とする請求項４に記載のプロセッサ。
【請求項６】
前記ステート回路は、
前のサイクルで前記第１有効信号と前記第２有効信号とが有効状態であり、かつ、
前のサイクルで前記第１インターロック信号と前記第２インターロック信号の双方が、インターロック状態でなかったときは、
次のサイクルで前のサイクルと同じ状態の前記インターロック用ファースト信号を出力する、
ことを特徴とする請求項４に記載のプロセッサ。
【請求項７】
前記オペランド系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令に対するオペランドを保持し、又は、前記第１演算ユニットへ出力する、第１オペランド保持出力回路と、
前記第２パイプラインに発行された前記第１演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第２オペランド保持回路と、
前記第１パイプラインに発行された命令が前記第２演算命令である場合に、前記第２演算ユニットで実行される前記第２演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第３オペランド保持出力回路と、
を備えることを特徴とする請求項３に記載のプロセッサ。
【請求項８】
前記第１オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第１オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第１パイプラインに発行された命令を待たす場合には前記第１オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第１パイプラインに発行された命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第１マルチプレクサと、
前記第１マルチプレクサから出力されたオペランドを保持して、前記第１演算ユニットへ出力する、第１フリップフロップと、
を備え、
前記第２オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第２オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第２パイプラインに発行された命令を待たす場合には前記第２オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第２パイプラインに発行された命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第２マルチプレクサと、
前記第２マルチプレクサから出力されたオペランドを保持して、出力する、第２フリップフロップと、
前記第２フリップフロップから出力されたオペランドと前記第３オペランド保持出力回路から出力されたオペランドとが入力され、前記第２演算命令を実行する場合には前記第３オペランド保持出力回路から出力されたオペランドを選択して前記第２演算ユニットへ出力し、前記第２パイプラインに発行された命令を実行する場合には前記第２フリップフロップから出力されたオペランドを選択して前記第２演算ユニットへ出力する、第３マルチプレクサと、
を備え、
前記第３オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第３オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第１パイプラインに発行された前記第２演算命令を待たす場合には前記第３オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第１パイプラインに発行された前記第２演算命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第４マルチプレクサと、
前記第４マルチプレクサから出力されたオペランドを保持して、前記第３マルチプレクサへ出力する、第３フリップフロップと、
を備える、
ことを特徴とする請求項７に記載のプロセッサ。
【請求項９】
前記第１演算ユニットと前記第２演算ユニットはインテジャーユニットであることを特徴とする請求項１に記載のプロセッサ。
【請求項１０】
前記第３演算ユニットはロードストアユニット又はコプロセッサユニット又はフローティングポイントユニットであることを特徴とする請求項１に記載のプロセッサ。
【請求項１１】
第１の演算を行う第１演算ユニットと、第２の演算を行う第２演算ユニットとを有する、第１パイプラインと、
第３の演算を行う第３演算ユニットと、第４の演算を行う第４演算ユニットととを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記各演算ユニットのうちの１つの演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つの演算ユニットとを用いて演算を行う第２演算命令とを、前記第１パイプライン及び前記第２パイプラインの一方へ発行するとともに、前記第１演算命令を前記第１パイプラインと前記第２パイプラインの他方へ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインと前記第２パイプラインの一方へ発行された第１演算命令が使用する演算ユニットと、前記第１パイプラインと前記第２パイプラインの他方へ発行された第２演算命令が使用する演算ユニットとが、重複する際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とするプロセッサ。
【請求項１２】
前記制御回路は、前記第１演算命令又は前記第２演算命令を待たせた場合には、次のサイクルでこの待たせた前記第１演算命令又は第２演算命令を実行するように制御する、ことを特徴とする請求項１１に記載のプロセッサ。
【請求項１３】
前記制御回路は、前記第１演算命令及び前記第２演算命令に対するオペランドの制御をするオペランド系制御回路を、さらに備えることを特徴とする請求項１１に記載のプロセッサ。
【請求項１４】
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、前記第１演算命令と前記第２演算命令のうちの一方の演算命令を待たして、他方の演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とするプロセッサ。
【請求項１５】
前記制御回路は、前記第１演算命令と前記第２演算命令のうちの一方の演算命令を待たせた場合には、次のサイクルでこの待たせた演算命令を実行するように制御する、ことを特徴とする請求項１４に記載のプロセッサ。
【請求項１６】
前記制御回路は、前記第１演算命令及び前記第２演算命令に対するオペランドの制御をするオペランド系制御回路を、さらに備えることを特徴とする請求項１４に記載のプロセッサ。
【請求項１７】
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令に対するオペランドの制御をするオペランド系制御回路を有する、制御回路と、
を備えるとともに、
前記オペランド系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令に対するオペランドを保持し、又は、前記第１演算ユニットへ出力する、第１オペランド保持出力回路と、
前記第２パイプラインに発行された前記第１演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第２オペランド保持回路と、
前記第１パイプラインに発行された命令が前記第２演算命令である場合に、前記第２演算ユニットで実行される前記第２演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第３オペランド保持出力回路と、
を備えることを特徴とするプロセッサ。
【請求項１８】
前記第１オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第１オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第１パイプラインに発行された命令を待たす場合には前記第１オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第１パイプラインに発行された命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第１マルチプレクサと、
前記第１マルチプレクサから出力されたオペランドを保持して、前記第１演算ユニットへ出力する、第１フリップフロップと、
を備え、
前記第２オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第２オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第２パイプラインに発行された命令を待たす場合には前記第２オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第２パイプラインに発行された命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第２マルチプレクサと、
前記第２マルチプレクサから出力されたオペランドを保持して、出力する、第２フリップフロップと、
前記第２フリップフロップから出力されたオペランドと前記第３オペランド保持出力回路から出力されたオペランドとが入力され、前記第２演算命令を実行する場合には前記第３オペランド保持出力回路から出力されたオペランドを選択して前記第２演算ユニットへ出力し、前記第２パイプラインに発行された命令を実行する場合には前記第２フリップフロップから出力されたオペランドを選択して前記第２演算ユニットへ出力する、第３マルチプレクサと、
を備え、
前記第３オペランド保持出力回路は、
レジスタファイルからのオペランドとこの第３オペランド保持出力回路の出力からフィードバックしたオペランドとが入力され、前記第１パイプラインに発行された前記第２演算命令を待たす場合には前記第３オペランド保持出力回路の出力からフィードバックしたオペランドを選択して出力し、前記第１パイプラインに発行された前記第２演算命令を実行する場合にはレジスタファイルからのオペランドを選択して出力する、第４マルチプレクサと、
前記第４マルチプレクサから出力されたオペランドを保持して、前記第３マルチプレクサへ出力する、第３フリップフロップと、
を備える、
ことを特徴とする請求項１７に記載のプロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はプロセッサに関するものであり、特に、スーパースケーラにおいて異なるパイプラインにある演算ユニットを同時に使用する演算命令を有するプロセッサに関するものである。
【０００２】
【従来の技術】
近年、マイクロプロセッサの高速化を図る技術として、様々な手法が開発されている。このような高速化を図る技術として、パイプラインという手法がある。このパイプラインとは、命令の実行内容を複数のステージに細分化し、この細分化された各ステージ毎に命令を順次実行していく手法である。
【０００３】
例えば、１つの命令を命令フェッチステージ、命令デコードステージ、実行ステージ、ライトバックステージという４つのステージに分解し、これら各ステージを１クロックサイクルで実行していく。この実行に際しては、各ステージをオーバーラップさせて実行する。すなわち、１つの命令の命令フェッチが完了し、その命令デコードを実行している間に次の命令の命令フェッチを実行することができる。このように命令をステージ毎に処理していくことにより、１クロックサイクル毎に命令を終了することが可能になる。
【０００４】
さらに、高速化を図る手法としてスーパースケーラという手法がある。このスーパースケーラとは、上述したパイプラインを複数本備えてハードウェアを構成し、複数の命令を並列に実行する手法である。パイプラインを２本備えている場合を２ウェイといい、パイプラインを４本備えている場合を４ウェイという。
【０００５】
このスーパースケーラでは、１つの命令で使用する演算ユニットは１つである。例えば、第１パイプラインに第１インテジャーユニットとフローティングユニットとが設けられ、第２パイプラインに第２インテジャーユニットとロードストアユニットとが設けられているプロセッサがあったとする。このプロセッサにおいて、命令フェッチユニットから第１パイプラインに第１インテジャーユニットを使用する命令が発行され、第２パイプラインに第２インテジャーユニットを使用する命令が発行されたとする。すると、当然、第１インテジャーユニットと第２インテジャーユニットとを使用して演算が実行される。
【０００６】
【発明が解決しようとする課題】
しかし、従来のプロセッサでは、これら第１インテジャーユニットと第２インテジャーユニットを使用している間は、第１パイプラインにあるフローティングポイントユニットや第２パイプラインにあるロードストアユニットは使うことはできない。このため、プロセッサに設けられている演算ユニットを有効的に使用しているとはいえない。したがって、プロセッサに設けられている各種の演算ユニットを有効的に使用できるようにすることが望まれるとともに、そのための制御方法の実現が望まれる。
【０００７】
そこで、本発明は上記課題に鑑みてなされたものであり、各パイプラインに設けられている各種の演算ユニットを有効的に活用できるプロセッサを提供することを目的とする。また、そのために必要となる具体的な制御回路を提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記課題を解決するため、本発明に係るプロセッサは、
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とする。
【０００９】
また、本発明に係るプロセッサは、
第１の演算を行う第１演算ユニットと、第２の演算を行う第２演算ユニットとを有する、第１パイプラインと、
第３の演算を行う第３演算ユニットと、第４の演算を行う第４演算ユニットととを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記各演算ユニットのうちの１つの演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つの演算ユニットとを用いて演算を行う第２演算命令とを、前記第１パイプライン及び前記第２パイプラインの一方へ発行するとともに、前記第１演算命令を前記第１パイプラインと前記第２パイプラインの他方へ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインと前記第２パイプラインの一方へ発行された第１演算命令が使用する演算ユニットと、前記第１パイプラインと前記第２パイプラインの他方へ発行された第２演算命令が使用する演算ユニットとが、重複する際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とする。
【００１０】
また、本発明に係るプロセッサは、
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、前記第１演算命令と前記第２演算命令のうちの一方の演算命令を待たして、他方の演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令の命令部分を制御をする命令系制御回路を有する、制御回路と、
を備えるとともに、
前記命令系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を待たす場合に第１インターロック信号を出力し、前記第２パイプラインに発行された前記第１演算命令を待たす場合に第２インターロック信号を出力する、インターロック信号発生回路と、
前記第１インターロック信号に応じて、前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令を保持し、又は、出力する、第１命令保持出力回路と、
前記第２インターロック信号に応じて、前記第２パイプラインに発行された前記第１演算命令を保持し、又は、出力する、第２命令保持回路と、
を備えることを特徴とする。
また、本発明に係るプロセッサは、
第１の演算を行う第１演算ユニットを有する、第１パイプラインと、
前記第１の演算と同様の演算を行う第２演算ユニットと、前記第１の演算とは異なる演算を行う第３演算ユニットとを有する、第２パイプラインと、
前記第１パイプライン及び前記第２パイプラインにある前記各演算ユニットのうちの１つを用いて演算を行う第１演算命令と、前記第１パイプラインにある前記第１演算ユニットと前記第２パイプラインにある前記各演算ユニットのうちの１つとを用いて演算を行う第２演算命令とを、前記第１パイプラインへ発行するとともに、前記第１演算命令を前記第２パイプラインへ発行する、命令フェッチユニットと、
前記命令フェッチユニットから前記第１パイプラインへ前記第１演算ユニットと前記第２演算ユニットとを用いて演算を行う第２演算命令が発行されると同時に、記第２パイプラインへ前記第２演算ユニットを用いて演算を行う第１演算命令が発行された際には、
前記第１演算命令が前記第２演算命令よりも先の命令である場合には、前記第２演算命令を待たして前記第１演算命令を優先して実行し、
前記第２演算命令が前記第１演算命令よりも先の命令である場合には、前記第１演算命令を待たして前記第２演算命令を優先して実行するように制御する、制御回路であって、前記第１演算命令及び前記第２演算命令に対するオペランドの制御をするオペランド系制御回路を有する、制御回路と、
を備えるとともに、
前記オペランド系制御回路は、
前記第１パイプラインに発行された前記第１演算命令又は前記第２演算命令に対するオペランドを保持し、又は、前記第１演算ユニットへ出力する、第１オペランド保持出力回路と、
前記第２パイプラインに発行された前記第１演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第２オペランド保持回路と、
前記第１パイプラインに発行された命令が前記第２演算命令である場合に、前記第２演算ユニットで実行される前記第２演算命令に対するオペランドを保持し、又は、前記第２演算ユニットへ出力する、第３オペランド保持出力回路と、
を備えることを特徴とする。
【００１１】
【発明の実施の形態】
本発明は、通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とを実行し得るプロセッサにおいて、これら通常のＡＬＵ演算命令が使用する演算ユニットとワイドＡＬＵ演算命令が使用する演算ユニットとが重複した場合の制御手法を提供するものである。以下、図面に基づいて本発明の一実施形態を説明する。
【００１２】
まず、図１及び図２に基づいて、本実施形態に係るプロセッサの全体構成を説明する。図１は本実施形態に係るプロセッサの全体ハードウェア構成を示す図であり、図２は通常のＡＬＵ演算命令とワイドＡＬＵ演算命令の内容を説明するための図である。
【００１３】
図１に示すように、本実施形態に係るプロセッサは、命令フェッチユニット１０と、レジスタファイル１１と、オペランドバイパス／セレクトロジック１２と、第１パイプライン１４と、第２パイプライン１６とを、備えて構成されている。つまり、本実施形態に係るプロセッサは、２ウェイのスーパースケーラである。
【００１４】
第１パイプライン１４は、演算ユニットとして、第１インテジャーユニット２０と、フローティングポイントユニット２２とを、備えて構成されている。第２パイプライン１６は、演算ユニットとして、第２インテジャーユニット２４と、ロードストアユニット２６と、コプロセッサユニット２８とを、備えて構成されている。
【００１５】
第１インテジャーユニット２０と第２インテジャーユニット２４は、整数演算を行う演算ユニットである。フローティングポイントユニット２２は、浮動小数点演算を行う演算ユニットである。ロードストアユニット２６は、データのロードやストアを行う演算ユニットである。コプロセッサユニット２８は、三角関数や指数関数等の数学的関数の演算を行う演算ユニットである。
【００１６】
このプロセッサは、通常のＡＬＵ（ALU：arithmetic logic unit）演算命令と、ワイドＡＬＵ演算命令とを、有している。図２に示すように、通常のＡＬＵ演算命令は１つの命令で、例えば、６４ビットと６４ビットの演算をし、６４ビットの演算結果が得られる命令である。したがって、通常のＡＬＵ演算命令は１つの演算ユニットを用いて演算をする。
【００１７】
ワイドＡＬＵ演算命令は１つの命令で、２つの命令分の演算を行う。すなわち、ワイドＡＬＵ演算命令は１つの命令で、６４ビットと６４ビットの演算をし、６４ビットの演算結果が得られる演算を２つ同時に実行する命令である。したがって、ワイドＡＬＵ演算命令は２つの演算ユニットを用いて演算をする。
【００１８】
図１に示すように、命令フェッチユニット１０からは２つの命令が同時に発行される。この命令フェッチユニット１０は命令を発行するにあたり、フェッチされた命令がどの演算ユニットで実行できるかを調べる。
【００１９】
すなわち、フローティングポイントユニット２２で実行できるのか、第１及び第２インテジャーユニット２０、２４で実行できるのか、ロードストアユニット２６で実行できるのか、コプロセッサユニット２８で実行できるのかを、調べる。そして、命令フェッチユニット１０は、適切なパイプラインに命令を送る。すなわち、フローティングポイントユニット２２で実行できる命令であれば第１パイプライン１４へ命令を送る。ロードストアユニット２６やコプロセッサユニット２８で実行できる命令であれば、第２パイプライン１６へ命令を送る。第１インテジャーユニット２０や第２インテジャーユニット２４で実行できる命令であれば、パイプラインの空き具合いや、ペアとなる他の命令の種類を考慮して、第１パイプライン１４又は第２パイプライン１６へ命令を送る。
【００２０】
但し、本実施形態においては、ワイドＡＬＵ演算命令は、第１パイプライン１４へのみ発行され、第２パイプライン１６へは発行されないようになっている。これに対して、通常のＡＬＵ演算命令は第１パイプライン１４と第２パイプライン１６のうちのいずれへも発行することができる。また、本実施形態に係るプロセッサは、命令の順番通りに命令を実行していくものとする。さらに、第１パイプライン１４と第２パイプライン１６とには、２つの命令が同時に発行されるが、元のプログラム（命令列）においては、１つ１つの命令が順番に並んでいる。
【００２１】
ここで本実施形態においては、通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とを組み合わせることにより、演算ユニットを有効に活用することが可能になる。例えば、図１において、命令フェッチユニット１０が、第１インテジャーユニット２０と第２インテジャーユニット２４とを使用するワイドＡＬＵ演算命令を第１パイプライン１４に発行し、ロードストアユニット２６を使用する通常のＡＬＵ演算命令を第２パイプライン１６に発行することにより、これら第１インテジャーユニット２０と第２インテジャーユニット２４とロードストアユニット２６とを同時に使用することができるようになる。つまり、２つのパイプラインしか有しないにも関わらず、３つの演算ユニットを同じサイクルで使用することができるようになる。
【００２２】
命令フェッチユニット１０から発行された２つの命令を参照して、レジスタファイル１１から命令の実行に必要なオペランドが読み出される。そして、２つの命令が第１パイプライン１４と第２パイプライン１６へ送られると同時に、これら２つの命令に対するそれぞれのオペランドが、第１パイプライン１４と第２パイプライン１６とへ送られる。
【００２３】
具体的には、レジスタファイル１１から読み出されたオペランドは、オペランドバイパス／セレクトロジック１２を通り、第１ソースバスと第２ソースバスへ送られて、各演算ユニットへ到達する。
【００２４】
各演算ユニットで演算された結果は、それぞれ、第１結果バスと第２結果バスへ乗せられて、レジスタファイル１１に書き込まれるか、あるいは、オペランドバイパスを経由して、オペランドバイパス／セレクトロジック１２へ送られる。
【００２５】
以上が本実施形態に係るプロセッサの全体的な構成とその動作である。ここで、プロセッサにおける演算命令の制御は、この演算命令における命令系の制御と、演算命令に対するデータであるオペランド系の制御とに、分けることができる。そこで、まず図３に基づいて、オペランド（データ系）の制御を詳細に説明する。
【００２６】
図３は、本実施形態に係る第１インテジャーユニット２０と第２インテジャーユニット２４にオペランドがどのように送られているかを説明するための図である。この図３においては、第１パイプライン１４におけるフローティングポイントユニット２２と、第２パイプライン１６におけるロードストアユニット２６とコプロセッサユニット２８とは、省略している。これは、本実施形態においては、ワイドＡＬＵ演算命令は、第１インテジャーユニット２０と第２インテジャーユニット２４を使用する命令であるとしているからである。
【００２７】
図３に示すように、上述したレジスタファイル１１は、第１レジスタファイル１１ａと、第２レジスタファイル１１ｂとを、備えて構成されている。第１レジスタファイル１１ａは、通常のＡＬＵ演算命令で使用されるオペランドを保持するレジスタファイルである。第２レジスタファイル１１ｂは、ワイドＡＬＵ演算命令で使用されるオペランドを特別に保持するレジスタファイルである。
【００２８】
命令フェッチユニット１０から第１パイプライン１４と第２パイプライン１６とに命令が発行されると、命令フェッチユニット１０からレジスタファイル１１にも命令が送られる。すなわち、命令フェッチユニット１０から第１レジスタファイル１１ａに第１パイプライン用と第２パイプライン用の命令が送られ、第２レジスタファイル１１ｂに第１パイプライン用の命令が送られる。これをもとに、第１レジスタファイル１１ａと第２レジスタファイル１１ｂに、それぞれの命令に対するオペランドが読み込まれる。
【００２９】
第１レジスタファイル１１ａと第１インテジャーユニット２０の間には、ホールドマルチプレクサ３０と、バイパスマルチプレクサ３２と、第１フリップフロップ３４とが、設けられている。第１インテジャーユニット２０の出力先には、第２フリップフロップ３８が設けられている。
【００３０】
第１レジスタファイル１１ａと第２インテジャーユニット２４の間には、ホールドマルチプレクサ４０と、バイパスマルチプレクサ４２と、第１フリップフロップ４４と、ワイドマルチプレクサ４６とが、設けられている。第２インテジャーユニット２４の出力先には、第２フリップフロップ４８が設けられている。
【００３１】
第２レジスタファイル１１ｂとワイドマルチプレクサ４６との間には、ホールドマルチプレクサ５０と、バイパスマルチプレクサ５２と、フリップフロップ５４とが、設けられている。
【００３２】
ホールドマルチプレクサ３０、４０、５０は、パイプラインストールしている場合に、オペランドを保持するために設けられている。オペランドを保持する場合にはフィードバックループ側を選択して出力し、オペランドを保持しない場合にはレジスタファイル１１側を選択して出力する。
【００３３】
バイパスマルチプレクサ３２、４２、５２は、オペランドバイパスを構成するために設けられている。すなわち、バイパスマルチプレクサ３２、４２、５２は、第１インテジャーユニット２０及び第２インテジャーユニット２４の演算結果が得られた直後に、レジスタファイル１１にこの演算結果が書き込まれなくとも、この演算結果のデータ（バイパスデータ）を使用できるようにするために設けられている。
【００３４】
これらホールドマルチプレクサ３０、４０、５０と、バイパスマルチプレクサ３２、４２、５２と、第１フリップフロップ３４、４４、５４と、ワイドマルチプレクサ４６とで、本実施形態におけるオペランド系の制御回路であるオペランドバイパス／セレクトロジック１２が構成されている。
【００３５】
また、ホールドマルチプレクサ３０とバイパスマルチプレクサ３２と第１フリップフロップ３４とで、第１レジスタファイルから出力されたオペランドを出力するか、又は、保持していたオペランドを出力するかを切り替えることができる保持出力回路５９ａが構成されている。ホールドマルチプレクサ４０とバイパスマルチプレクサ４２と第１フリップフロップ４４とで、第１レジスタファイルから出力されたオペランドを出力するか、又は、保持していたオペランドを出力するかを切り替えることができる保持出力回路５９ｂが構成されている。ホールドマルチプレクサ５０とバイパスマルチプレクサ５２と第１フリップフロップ５４とで、第２レジスタファイルから出力されたオペランドを出力するか、又は、保持していたオペランドを出力するかを切り替えることができる保持出力回路５９ｃが構成されている。
【００３６】
これら保持出力回路５９ａ〜５９ｃは、それぞれ、２つのオペランドを保持し、又は、出力する。すなわち、図２の例では、保持出力回路５９ａ〜５９ｃは、それぞれ、６４ビットのオペランドを２つ保持したり、出力したりする。図３では簡略化して、２つのオペランドを１つの線、１つのマルチプレクサ、１つのフリップフロップで、あらわしている。
【００３７】
次に、この図３に基づいて、オペランドの流れを、（１）通常のＡＬＵ演算命令が２つ同時に発行されたとき、（２）通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とが同時に発行され、ワイドＡＬＵ演算命令の方が先の命令であるとき、（３）通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とが同時に発行され、ワイドＡＬＵ演算命令の方が後の命令であるときに、分けて説明する。なお、この説明においては、命令フェッチユニット１０により発行された命令は、すべて第１インテジャーユニット２０又は第２インテジャーユニット２４を使用して実行される命令であると仮定する。
【００３８】
（１）通常のＡＬＵ演算命令が２つ同時に発行されたとき
第１パイプライン１４と第２パイプライン１６に発行される命令に対して、各命令に対するオペランドが第１レジスタファイル１１ａから読み出される。これら２組のオペランド（都合、４つのオペランド）は、ホールドマルチプレクサ３０、４０を通り、バイパスマルチプレクサ３２、４２を通って、第１フリップフロップ３４、４４に保持される。つまり、ホールドマルチプレクサ３０、４０は第１レジスタファイル１１ａからのオペランドを選択して出力し、バイパスマルチプレクサ３２、４２はホールドマルチプレクサ３０、４０から出力されたオペランドを選択して出力する。
【００３９】
これら保持された２組のオペランドは、それぞれ、後述する命令と同時に、第１インテジャーユニット２０と第２インテジャーユニット２４に送られ、演算がなされる。つまり、ワイドマルチプレクサ４６は第１レジスタファイル１１ａ側のオペランドである、第１フリップフロップ４４から出力された１組のオペランドを選択して、第２インテジャーユニットへ出力する。
【００４０】
（２）通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とが同時に発行され、ワイドＡＬＵ演算命令の方が先の命令であるとき
第１レジスタファイル１１ａから第１パイプライン１４に向けて、ワイドＡＬＵ演算命令のうちの一方の演算（第１演算）に対する１組のオペランドが読み出される。また、この第１レジスタファイル１１ａから第２パイプライン１６に向けて、通常のＡＬＵ演算命令に対する１組のオペランドが読み出される。さらに、第２レジスタファイル１１ｂから第２パイプライン１６に向けて、ワイドＡＬＵ演算命令のうちの他方の演算（第２演算）に対する１組のオペランドが読み出される。したがって、都合６個のオペランドがレジスタファイル１１から読み出される。
【００４１】
なお、本実施形態においては、ワイドＡＬＵ演算命令は、第１パイプライン１４に対してのみ発行される。このため、第２レジスタファイル１１ｂには、第１パイプラインに発行される命令のみが送られれば足りる。
【００４２】
このように第１レジスタファイル１１ａから読み出された２つの命令に対する２組のオペランドは、ホールドマルチプレクサ３０、４０と、バイパスマルチプレクサ３２、４２を通って、第１フリップフロップ３４、４４に保持される。つまり、ホールドマルチプレクサ３０、４０は第１レジスタからのオペランドを選択して出力し、バイパスマルチプレクサ３２、４２はホールドマルチプレクサから出力されたオペランドを選択して出力する。
【００４３】
また、第２レジスタファイル１１ｂから読み出された１つの命令に対する１組のオペランドは、ホールドマルチプレクサ５０とバイパスマルチプレクサ５２を通って、第１フリップフロップ５４に保持される。つまり、ホールドマルチプレクサ５０は第２レジスタファイル１１ｂからのオペランドを選択して出力し、バイパスマルチプレクサ５２はホールドマルチプレクサ５０から出力されたオペランドを選択して出力する。
【００４４】
第１パイプライン１４に発行された命令が、ワイドＡＬＵ演算命令であり、かつ先の命令であるので、まず、このワイドＡＬＵ演算命令に対するオペランドが第１インテジャーユニット２０と第２インテジャーユニット２４に与えられる。より詳しくは、第１インテジャーユニット２０には、第１フリップフロップ３４から１組のオペランドが与えられる。すなわち、第１インテジャーユニット２０には、第１レジスタファイル１１ａから読み出された１組のオペランドが与えられる。第２インテジャーユニット２４には、第１フリップフロップ５４から１組のオペランドが与えられる。すなわち、第２インテジャーユニット２４には、第２レジスタファイル１１ｂから読み出された１組のオペランドが与えられる。つまり、ワイドマルチプレクサ４６は、第１フリップフロップ５４から出力されたオペランドを選択して、第２インテジャーユニット２４へ出力する。
【００４５】
このようにワイドＡＬＵ演算命令はパイプラインストールせずに、第１インテジャーユニット２０と第２インテジャーユニット２４に送られるが、通常のＡＬＵ演算命令はリソースが使えないためパイプラインストールをおこし、待たされることになる。すなわち、通常のＡＬＵ演算命令は第２パイプライン１６へ発行されていることになるが、この第２パイプライン１６にある第２インテジャーユニット２４は、ワイドＡＬＵ演算命令の実行に使われているので、通常のＡＬＵ演算命令はこの第２インテジャーユニットを使用することができない。このため通常のＡＬＵ演算命令は、ワイドＡＬＵ演算命令の実行が完了するまで、待つ必要がある。
【００４６】
このようにパイプラインストールをおこした通常ＡＬＵ演算命令に対する１組のオペランドは、第１フリップフロップ４４からホールドマルチプレクサ４０にフィードバックされることにより、次のサイクルまで保持される。
【００４７】
このように保持された通常のＡＬＵ演算命令に対する１組のオペランドは、次のサイクルで第２インテジャーユニットに与えられて、実行される。すなわち、次のサイクルでは、ホールドマルチプレクサ４０は第１フリップフロップ４４から出力されたオペランドを選択して、バイパスマルチプレクサ４２へ出力する。また、第１パイプライン１４へも次の命令が発行され、可能であれば第２パイプライン１６と並列に実行される。
【００４８】
（３）通常のＡＬＵ演算命令とワイドＡＬＵ演算命令とが同時に発行され、ワイドＡＬＵ演算命令の方が後の命令であるとき
上述した（２）の場合と同様に、第１レジスタファイル１１ａから読み出されたワイドＡＬＵ演算命令のうちの一方の演算（第１演算）に対する１組のオペランド（２つのオペランド）は、ホールドマルチプレクサ３０とバイパスマルチプレクサ３２を通って、第１フリップフロップ３４に保持される。第１レジスタファイル１１ａから読み出された通常のＡＬＵ演算命令に対する１組のオペランド（２つのオペランド）は、ホールドマルチプレクサ４０とバイパスマルチプレクサ４２を通って、第１フリップフロップ４４に保持される。第２レジスタファイル１１ｂから読み出されたワイドＡＬＵ演算命令のうちの他方の演算（第２演算）に対する１組のオペランド（２つのオペランド）は、ホールドマルチプレクサ５０とバイパスマルチプレクサ５２を通って、第１フリップフロップ５４に保持される。
【００４９】
ここで、第１パイプライン１４に発行された命令が、ワイドＡＬＵ演算命令であるが、後の命令であるので、まず、通常のＡＬＵ演算命令に対するオペランドが第２インテジャーユニット２４に与えられる。すなわち、第２インテジャーユニット２４には、第１フリップフロップ４４から１組のオペランドが与えられる。すなわち、第２インテジャーユニット２４には、第１レジスタファイル１１ａから読み出されたオペランドが与えられる。このために、ワイドマルチプレクサ４６は、第１フリップフロップ４４から出力されたオペランドを選択して、第２インテジャーユニット４６へ出力する。
【００５０】
このように通常のＡＬＵ演算命令はパイプラインストールせずに、第２インテジャーユニット２４に送られるが、ワイドＡＬＵ演算命令はリソースが使えないためパイプラインストールをおこし、待たされることになる。すなわち、ワイドＡＬＵ演算命令は第１パイプライン１４へ発行されていることになるが、このワイドＡＬＵ演算命令を実行するには、第１インテジャーユニット２０と第２インテジャーユニット２４の双方が必要となる。しかし、第２インテジャーユニット２４は先に発行された通常のＡＬＵ演算命令で使用されているので、ワイドＡＬＵ演算命令はこの第２インテジャーユニット２４を使用することができない。このためワイドＡＬＵ演算命令は、通常のＡＬＵ演算命令の実行が完了するまで、待つ必要がある。
【００５１】
このようにパイプラインストールをおこしたワイドＡＬＵ演算命令に対する２組のオペランド（４つのオペランド）は、次のサイクルまで保持される。すなわち、第１レジスタファイル１１ａから読み出された１組のオペランドは、第１フリップフロップ３４からホールドマルチプレクサ３０にフィードバックされることにより、次のサイクルまで保持される。第２レジスタファイル１１ｂから読み出された１組のオペランドは、第１フリップフロップ５４からホールドマルチプレクサ５０にフィードバックされることにより、次のサイクルまで保持される。
【００５２】
そして、このように保持された２組のオペランドは、次のサイクルで第１インテジャーユニット２０と第２インテジャーユニット２４にそれぞれ与えられ、実行される。すなわち、次のサイクルでは、ホールドマルチプレクサ３０は第１フリップフロップ３４から出力されたオペランドを選択して、バイパスマルチプレクサ３２へ出力する。また、ホールドマルチプレクサ５０は第１フリップフロップ５４から出力されたオペランドを選択して、バイパスマルチプレクサ５２へ出力する。
【００５３】
次に、図４及び図５に基づいて、演算命令における命令系の制御について詳細に説明する。図４は本実施形態に係るプロセッサの命令系の制御を説明するための図である。この図４においても、図３と同様に、第１パイプライン１４におけるフローティングポイントユニット２２と、第２パイプライン１６におけるロードストアユニット２６とコプロセッサユニット２８とを、省略している。
【００５４】
図４に示すように、命令フェッチユニット１０からは、ワイドＡＬＵビットＷＡＢと、ＡＬＵビットＡＢと、第１有効ビットＶＢ１と、第２有効ビットＶＢ２と、ファーストビットＦＢと、第１命令信号ＩＮ１と、第２命令ＩＮ信号２とが、出力される。
【００５５】
ワイドＡＬＵビットＷＡＢは、命令フェッチユニット１０がフェッチした命令がワイドＡＬＵ演算命令である場合に１となり、それ以外の命令（通常のＡＬＵ演算命令を含む）である場合に０となるビットである。
【００５６】
ＡＬＵビットＡＢは、命令フェッチユニット１０がフェッチした命令が通常のＡＬＵ演算命令である場合に１となり、それ以外の命令（ワイドＡＬＵ演算命令を含む）である場合に０となるビットである。
【００５７】
第１有効ビットＶＢ１は、第１パイプライン１４へ発行した命令が有効な命令である場合に１となり、有効な命令でない場合に０となるビットである。第２有効ビットＶＢ２は、第２パイプライン１６へ発行した命令が有効な命令である場合に１となり、有効な命令でない場合に０となるビットである。
【００５８】
これらワイドＡＬＵビットＷＡＢとＡＬＵビットＡＢと第１有効ビットＶＢ１と第２有効ビットＶＢ２とは、命令フェッチユニット１０が命令をフェッチした段階で、プレデコードされて生成されるビット情報である。
【００５９】
ファーストビットＦＢは、命令フェッチユニット１０が発行した命令の順序を示すビットである。すなわち、第１パイプライン１４に発行された命令の方が第２パイプライン１６に発行された命令よりも先の命令である場合に１となり、その逆の場合は０となるビットである。
【００６０】
第１命令信号ＩＮ１は、命令フェッチユニット１０が第１パイプライン１４に発行する命令の信号である。第２命令信号ＩＮ２は、命令フェッチユニット１０が第２パイプライン１６に発行する命令の信号である。これら第１命令信号ＩＮ１と第２命令信号ＩＮ２とは、例えば、１６ビットや３２ビットのバスで伝達される。
【００６１】
なお、上述したようにワイドＡＬＵ演算命令は第１パイプライン１４に対してのみ発行される。また、ワイドＡＬＵ演算命令であっても、通常のＡＬＵ演算命令であっても、命令のビット長は同じである。
【００６２】
上述した第１命令信号ＩＮ１と第１有効ビットＶＢ１とワイドＡＬＵビットＷＡＢと第２有効ビットＶＢ２とＡＬＵビットＡＢと第２命令信号ＩＮ２とに対しては、それぞれに、ホールドマルチプレクサ６０、６４、６８、７２、７６、８０と、フリップフロップ６２、６６、７０、７４、７８、８２とが設けられており、それぞれ、フィードバックループが設けられている。これら一対のホールドマルチプレクサ６０、６４、６８、７２、７６、８０と、フリップフロップ６２、６６、７０、７４、７８、８２とで、各信号の保持出力回路８４ａ〜８４ｆが構成されている。
【００６３】
これら保持出力回路８４ａ〜８４ｆが、保持した信号を出力するか、新しい信号を出力するかは、第１インターロック信号ＩＬ１と第２インターロック信号ＩＬ２とで決定される。
【００６４】
すなわち、第１インターロック信号ＩＬ１が１の場合には第１パイプライン１４の命令がパイプラインストールし、ホールドマルチプレクサ６０、６４、６８は次のサイクルでフィードバックループ側の信号を選択して出力する。第２インターロック信号ＩＬ２が１の場合には第２パイプライン１６の命令がパイプラインストールし、ホールドマルチプレクサ７２、７６、８０は次のサイクルでフィードバックループ側の信号を選択して出力する。
【００６５】
これら第１インターロック信号ＩＬ１と第２インターロック信号ＩＬ２は、保持出力回路８４ａ〜８４ｆと、ＡＮＤ回路９０、９２、９４、９６、９８と、フリップフロップ１００、１０２と、ステートマシン１０６とで、生成される。つまり、これらで本実施形態に係るインターロック信号発生回路が形成されている。
【００６６】
第１インターロック信号ＩＬ１はＯＲ回路１０４を介して、ホールドマルチプレクサ６０、６４、６８と、ステートマシン１０６とに入力される。第２インターロック信号ＩＬ２はＯＲ回路１０８を介して、ホールドマルチプレクサ７２、７６、８０と、ステートマシン１０６とに、入力される。ＯＲ回路１０４は、第１インターロック信号ＩＬ１と、他の箇所で発生するインターロック条件との間で、ＯＲをとることにより最終的な第１インターロック信号ＩＬ１とする回路である。ＯＲ回路１０８は、第２インターロック信号ＩＬ２と、他の箇所で発生するインターロック条件との間で、ＯＲをとることにより最終的な第２インターロック信号ＩＬ２とする回路である。この他のインターロック条件には、例えば、データハザード等がある。
【００６７】
ステートマシン１０６は、ファーストビットＦＢからインターロック用ファーストビットＩＦＢを生成する回路である。このインターロック用ファーストビットＩＦＢは、フリップフロップ１０７へ入力される。ステートマシン１０６は、例えば、第１パイプライン１４がパイプラインストールしていても、第２パイプライン１６がパイプラインストールしていない場合は、インターロック用ファーストビットＩＦＢを反転させる。ステートマシン１０６の動作を表にまとめたものを図５に示す。
【００６８】
この図５において、第１インターロック信号ＩＬ１及び第２インターロック信号ＩＬ２における×印は、０でも１でも問わないことを意味している。ステートマシン１０６の出力が「新」の場合は、命令フェッチユニット１０から与えられたファーストビットＦＢの値を、そのまま、インターロック用ファーストビットＩＦＢとして出力することを意味している。ステートマシン１０６の出力が「旧」の場合は、前のサイクルのインターロック用ファーストビットＩＦＢの値を、次のサイクルのインターロック用ファーストビットＩＦＢとして出力することを意味している。ステートマシン１０６の出力が「反転」の場合は、前のサイクルのインターロック用ファーストビットＩＦＢを反転した値を、次のサイクルのインターロック用ファーストビットＩＦＢとして出力することを意味している。
【００６９】
命令フェッチユニット１０から２つの通常のＡＬＵ演算命令が発行された場合には、第１命令信号ＩＮ１は第１インテジャーユニット２０に与えられ、第２命令信号ＩＮ２は第２インテジャーユニット２４に与えられる。
【００７０】
命令フェッチユニット１０から第１パイプライン１４へワイドＡＬＵ演算命令が発行され、第２パイプライン１６へ通常のＡＬＵ演算命令が発行され、かつ、ワイドＡＬＵ演算命令が通常のＡＬＵ演算命令よりも先の命令である場合には、第１命令信号ＩＮ１は、第１インテジャーユニット２０と第２インテジャーユニット２４に与えられる。
【００７１】
命令フェッチユニット１０から第１パイプライン１４へワイドＡＬＵ演算命令が発行され、第２パイプライン１６へ通常のＡＬＵ演算命令が発行され、かつ、ワイドＡＬＵ演算命令が通常のＡＬＵ演算命令よりも後の命令である場合には、第２命令信号ＩＮ２は、第２インテジャーユニット２４に与えられる。
【００７２】
このような選択をするため、第２インテジャーユニット２４の入力側には、マルチプレクサ１１０が設けられている。すなわち、マルチプレクサ１１０は、ワイドＡＬＵ演算命令を優先して実行する場合には第１命令信号ＩＮ１を選択して第２インテジャーユニット２４へ出力し、通常のＡＬＵ演算命令を優先して実行する場合には第２命令信号ＩＮ２を選択して第２インテジャーユニット２４へ出力する。
【００７３】
このような構成においては、第１有効ビットＶＢ１が１であり、かつ、第２有効ビットＶＢ２が１であり、かつ、ワイドＡＬＵビットＷＡＢが１であり、かつ、ＡＬＵビットＡＢが１であり、かつ、インターロック用ファーストビットＩＦＢが０である場合に、第１インターロック信号ＩＬ１は１になる。すなわち、ワイドＡＬＵ演算命令が第１パイプライン１４にあり、通常のＡＬＵ演算命令が第２パイプライン１６にあり、通常のＡＬＵ演算命令が先の命令である場合には、第１インターロック信号ＩＬ１が１になり、第１パイプライン１４に発行されたワイドＡＬＵ演算命令はパイプラインストールする。したがって、通常のＡＬＵ演算命令が優先され、ワイドＡＬＵ演算命令は待たされる。
【００７４】
一方、第１有効ビットＶＢ１が１であり、かつ、第２有効ビットＶＢ２が１であり、かつ、ワイドＡＬＵビットＷＡＢが１であり、かつ、ＡＬＵビットＡＢが１であり、かつ、インターロック用ファーストビットＩＦＢが１である場合に、第２インターロック信号ＩＬ２は１になる。すなわち、ワイドＡＬＵ演算命令が第１パイプライン１４にあり、通常のＡＬＵ演算命令が第２パイプライン１６にあり、ワイドＡＬＵ演算命令が先の命令である場合には、第２インターロック信号ＩＬ２が１になり、第２パイプライン１６に発行された通常のＡＬＵ演算命令はパイプラインストールする。したがって、ワイドＡＬＵ演算命令が優先され、通常のＡＬＵ演算命令は待たされる。
【００７５】
次に、この図４に基づいて、命令がパイプラインストールした場合における次のサイクルの動作について説明する。ここでは、１番目の命令としてワイドＡＬＵ演算命令があり、２番目の命令として通常のＡＬＵ演算命令があり、３番目の命令としてワイドＡＬＵ演算命令があったとする。そして、同じサイクルで、１番目のワイドＡＬＵ演算命令と２番目の通常のＡＬＵ演算命令とが、それぞれ、第１パイプライン１４と第２パイプライン１６へ発行され、次のサイクルで３番目のワイドＡＬＵ演算命令が第１パイプライン１４へ発行されたものとする。そして、第２パイプライン１６に発行された通常のＡＬＵ演算命令がパイプラインストールをおこしたとして説明する。
【００７６】
この場合、第２パイプライン１６における各信号は保持される。すなわち、第２パイプライン１６における第２有効ビットＶＢ２とＡＬＵビットＡＢと第２命令信号ＩＮ２とは、ホールドマルチプレクサ７２、７６、８０とフリップフロップ７４、７８、８２からなる保持出力回路８４ｄ〜８４ｆによって保持される。また、このように保持された第２有効ビットＶＢ２とＡＬＵビットＡＢは、次のサイクルの第２インターロック信号ＩＬ２を生成するために使用される。
【００７７】
最初のサイクルでは、第１パイプライン１４に発行された１番目のワイドＡＬＵ演算命令は優先して実行されるのでパイプラインストールせず、第２パイプラインに発行された２番目の通常のＡＬＵ演算命令がパイプラインストールする。したがって、次のサイクルでは命令フェッチユニット１０から新しい命令が第１パイプライン１４へ供給される。すなわち、命令フェッチユニット１０から新しい、第１命令信号ＩＮ１と第１有効ビットＶＢ１とワイドＡＬＵビットＷＡＢとが、供給される。ここであげた例では、次のサイクルで３番目のワイドＡＬＵ演算命令が命令フェッチユニット１０から第１パイプライン１４に供給される。
【００７８】
インターロック用ファーストビットＩＦＢについては、第２パイプライン１６のみがパイプラインストールしているので、次のサイクルではこの第２パイプライン１６の命令が先の命令になる。このため、図５の真理値表に示したように、インターロック用ファーストビットＩＦＢは反転して、１から０に切り替わる。すなわち、第２パイプライン１６が先の命令であるようにインターロック用ファーストビットＩＦＢが変化する。
【００７９】
したがって、次のサイクルでは３番目の命令がワイドＡＬＵ演算命令であったとしても、第２パイプラインにある２番目の通常のＡＬＵ演算命令が優先して実行される。すなわち、次のサイクルでは、ホールドマルチプレクサ８０は、フィードバックループ側を選択して出力して、２番目の命令である通常のＡＬＵ演算命令をフリップフロップ８２へ供給する。マルチプレクサ１１０は、フリップフロップ８２側を選択して、この２番目の命令である通常ＡＬＵ演算命令を第２インテジャーユニット２４へ与える。これにより、次のサイクルで２番目の命令である通常のＡＬＵ演算命令が、３番目の命令であるワイドＡＬＵ演算命令よりも優先して実行される。
【００８０】
以上のように、本実施形態に係るプロセッサによれば、通常のＡＬＵ演算命令の他にワイドＡＬＵ演算命令を設けたので、演算ユニットを有効に活用して、処理の高速化を図ることができる。すなわち、図１に示すように、第１インテジャーユニット２０と第２インテジャーユニット２４とを使用するワイドＡＬＵ演算命令が発行された場合、次の命令がロードストアユニット２６やコプロセッサユニット２８を使用するような通常のＡＬＵ演算命令である場合には、この通常のＡＬＵ演算命令をも同じサイクルで実行することができる。
【００８１】
しかも、第１インテジャーユニット２０と第２インテジャーユニット２４との双方を使用するワイドＡＬＵ演算命令が第１パイプライン１４に発行され、第２インテジャーユニット２４を使用する通常のＡＬＵ演算命令が第２パイプライン１６に発行された場合には、先の命令を優先して実行するように制御したので、インオーダーに命令を処理することができる。
【００８２】
なお、本発明は上記実施形態に限定されず、種々に変形可能である。例えば、上記実施形態では、ワイドＡＬＵ演算命令は第１パイプライン１４にのみ発行されることとしたが、第１パイプライン１４と第２パイプライン１６の双方に発行され得るようにすることも可能である。
【００８３】
また、本実施形態では、ワイドＡＬＵ演算命令は、同じ種類の演算ユニットである第１インテジャーユニット２０と第２インテジャーユニット２４の双方を使用する命令であるとしたが、異なる種類の演算ユニットを２つ使用する命令にしてもよい。例えば、ワイドＡＬＵ演算命令は、第１パイプラインの第１インテジャーユニット２０と、第２パイプラインのコプロセッサユニット２８との双方を使用する命令であってもよい。
【００８４】
さらに、本実施形態では、図４に示すように、命令フェッチユニット１０が命令をフェッチした段階で、その命令をプリデコードして第１有効ビットＶＢ１と第２有効ビットＶＢ２とワイドＡＬＵビットＷＡＢとＡＬＵビットＡＢとを生成し、これを命令フェッチユニット１０から出力することとした。しかし、図６に示すように、命令フェッチユニット１０から出力された第１命令信号ＩＮ１と第２命令信号ＩＮ２とを、命令デコーダ２００、２０２が取り込んで、これをデコードして、ワイドＡＬＵビットＷＡＢとＡＬＵビットＡＢとを生成するようにしてもよい。但し、図４に示した本実施形態の方が、ワイドＡＬＵビットＷＡＢとＡＬＵビットＡＢとがプレデコードされいるので、第１インターロック信号ＩＬ１と第２インターロック信号ＩＬ２とが発生するタイミングを早くすることができる。
【００８５】
さらに、本実施形態では、演算命令を発行された順番通りに演算するインオーダーのプロセッサを用いて説明したが、演算命令を発行された順番によらないで演算するアウトオブオーダーのプロセッサに適用することもできる。すなわち、演算命令を発行した順番に関わらず、第１パイプライン１４と第２パイプライン１６のうちの空いている演算ユニットを用いて演算を実行してしまうプロセッサにも適用することができる。
【００８６】
【発明の効果】
以上説明したように、本発明によれば、通常のＡＬＵ演算命令の他にワイドＡＬＵ演算命令を設けたので、演算ユニットを有効に活用して、処理の高速化を図ることができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るプロセッサの全体構成をオペランド系を主体として概略的に示す図。
【図２】本実施形態におけるプロセッサで実行される通常のＡＬＵ演算命令とワイドＡＬＵ演算命令の内容を説明する図。
【図３】図１に示したプロセッサにおけるオペランド系の制御回路を説明するための図。
【図４】図１に示したプロセッサにおける命令系の制御回路を説明するための図。
【図５】図４に示したステートマシンの動作を真理値表にして示す図。
【図６】本発明における命令系の制御回路の変形例を示す図。
【符号の説明】
１０  命令フェッチユニット
１１  レジスタファイル
１２  オペランドバイパス／セレクトロジック
１４  第１パイプライン
１６  第２パイプライン
２０  第１インテジャーユニット
２２  フローティングポイントユニット
２４  第２インテジャーユニット
２６  ロードストアユニット
２８  コプロセッサユニット
【図１】
0003640855.tif 000002
【図２】
0003640855.tif 000003
【図３】
0003640855.tif 000004
【図４】
0003640855.tif 000005
【図５】
0003640855.tif 000006
【図６】
0003640855.tif 000007