(57)【特許請求の範囲】
【請求項１】
命令オペランドを保持するｎビットレジスタ回路と、
命令ストリームからのプロセッサ命令を順にデコードする命令デコード回路と、
単一演算と複数の並列演算との一方を実行する演算論理回路と、を備え、
前記単一演算は、前記命令デコード回路によりデコードされた第１の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つのｍ（ｍ＜ｎ）ビットオペランドでの演算であり、
前記演算論理回路は、前記ｍビットよりビット数の多いオペランドに対しては、前記単一演算を行わず、
前記複数の並列演算は、前記命令デコード回路によりデコードされた第２の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給されたｎビットオペランド中の少なくとも２つのビット部分での演算であることを特徴とするプロセッサ。
【請求項２】
前記演算論理回路は、
前記単一演算を実行可能な第１のｍビット整数パイプ回路と、
前記第１のｍビット整数パイプ回路とともに、前記複数の並列演算を実行可能な第２のｊビット整数パイプ回路と、を有することを特徴とする請求項１に記載のプロセッサ。
【請求項３】
前記第２のｊビット整数パイプ回路は、前記ｎビットレジスタ回路から供給されたｊビットオペランドをもつ単一のプロセッサ命令を実行可能であることを特徴とする請求項２に記載のプロセッサ。
【請求項４】
前記演算論理回路は、
それぞれ複数ビットの演算を実行可能な複数の整数パイプ回路を備え、
複数の前記単一演算命令が同時に発行された場合には、前記複数の整数パイプ回路を用いて前記複数の単一演算命令を並列実行し、
前記単一演算命令と前記複数の並列演算命令とが同時に発行され、前記複数の並列演算命令が先の命令の場合には、前記複数の並列演算命令の実行が終了するまで、前記単一演算命令の実行を中断させ、
前記単一演算命令と前記複数の並列演算命令とが同時に発行され、前記単一演算命令が先の命令の場合には、前記単一演算命令の実行が終了するまで、前記複数の並列演算命令の実行を中断させることを特徴とする請求項１〜３のいずれかに記載のプロセッサ。
【請求項５】
命令オペランドを保持するｎビットレジスタ回路と、
命令ストリームからのプロセッサ命令をデコードする命令デコード回路と、
複数の演算論理ユニットALU1〜ALUkを含む演算論理(AL)回路と、を備え、
前記演算論理ユニットALUi（ｉ＝１〜ｋ）のそれぞれは、前記命令デコード回路によりデコードされた第１の個別のプロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つの対応するｍiビットオペランド（ｍi＜ｎ（ただし、ｉ＝１〜ｋ））での個別の単一演算を実行可能であり、
前記演算論理ユニットALUi（ただし、ｉ＝１〜ｋ）は、ｍiビットよりビット数の多いオペランドでの単一演算は実行せず、
前記演算論理ユニット用のすべてのｍi（ただし、ｉ＝１〜ｋ）の合計は、ｎ以下であり、
前記演算論理ユニットのそれぞれは、前記命令デコード回路によりデコードされた第２の単一命令に対応して、前記ｎビットレジスタ回路から供給された一つのｎビットオペランドの少なくとも二つのビット部分での複数の並列演算を実行可能であることを特徴とするプロセッサ。
【請求項６】
前記演算論理ユニットのそれぞれに、対応するオペランドを引き渡すことを特徴とする請求項５に記載のプロセッサ。
【請求項７】
前記演算論理ユニットのそれぞれは、
それぞれ複数ビットの演算を実行可能な整数パイプ回路を備え、
複数の前記単一演算命令が同時に発行された場合には、前記演算論理ユニットのそれぞれが有する前記整数パイプ回路を用いて前記複数の単一演算命令を並列実行し、
前記単一演算命令と前記複数の並列演算命令とが同時に発行され、前記複数の並列演算命令が先の命令の場合には、前記複数の並列演算命令の実行が終了するまで、前記単一演算命令の実行を中断させ、
前記単一演算命令と前記複数の並列演算命令とが同時に発行され、前記単一演算命令が先の命令の場合には、前記単一演算命令の実行が終了するまで、前記複数の並列演算命令の実行を中断させることを特徴とする請求項５または６に記載のプロセッサ。
【請求項８】
メモリと前記ｎビットレジスタ回路との間でオペランドを伝送するロード／ストア回路を備えることを特徴とする請求項１〜７のいずれかに記載のプロセッサ。
【請求項９】
命令オペランドを保持するｎビットレジスタ回路と、
命令ストリームからのプロセッサ命令を順にデコードする命令デコード回路と、
単一演算と複数の並列演算との一方を実行する演算論理回路と、を備えたプロセッサの命令処理方法であって、
前記単一演算は、前記命令デコード回路によりデコードされた第１の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つのｍ（ｍ＜ｎ）ビットオペランドでの演算であり、
前記演算論理回路は、前記ｍビットよりビット数の多いオペランドに対しては、前記単一演算を行わず、
前記複数の並列演算は、前記命令デコード回路によりデコードされた第２の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給されたｎビットオペランド中の少なくとも２つのビット部分での演算であることを特徴とするプロセッサの命令処理方法。
【請求項１０】
命令オペランドを保持するｎビットレジスタ回路と、
命令ストリームからのプロセッサ命令をデコードする命令デコード回路と、
複数の演算論理ユニットALU1〜ALUkを含む演算論理(AL)回路と、を備えたプロセッサの命令処理方法であって、
前記演算論理ユニットALUi（ｉ＝１〜ｋ）のそれぞれは、前記命令デコード回路によりデコードされた第１の個別のプロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つの対応するｍiビットオペランド（ｍi＜ｎ（ただし、ｉ＝１〜ｋ））での個別の単一演算を実行可能であり、
前記演算論理ユニットALUi（ただし、ｉ＝１〜ｋ）は、ｍiビットよりビット数の多いオペランドでの単一演算は実行せず、
前記演算論理ユニット用のすべてのｍi（ただし、ｉ＝１〜ｋ）の合計は、ｎ以下であり、
前記演算論理ユニットのそれぞれは、前記命令デコード回路によりデコードされた第２の単一命令に対応して、前記ｎビットレジスタ回路から供給された一つのｎビットオペランドの少なくとも二つのビット部分での複数の並列演算を実行可能であることを特徴とするプロセッサの命令処理方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、マイクロプロセッサに関する。特に、単一命令と複数データストリーム(SIMD)命令のためのエンハンスド・データパス以外に、単一命令ストリームと単一データストリーム(SISD)命令のための基準データパスを少なくとも一つ含むマイクロプロセッサに関する。
【０００２】
【従来の技術】
1972年に、フリン(Flynn)は、命令とデータフローに基づいてプロセッサを分類した（Flynn, M.J., "Some Computer Organizations and Their Effectiveness", IEEE Trans. Comput., C-21, 1972, 948-960頁を参照）。分類された４つのプロセッサは以下の通りである。
【０００３】
・単一命令および単一データ用のSISD
・単一命令および複数データ用のSIMD
・複数命令および複数データ用のMIMD
・複数命令および単一データ用のMISD
本発明は、SISDとSIMDに関する。手短に言うと、単一スカラー・マシンはSISD演算器である。すなわち、SISD演算器は、単一命令とデータストリームの両方を有する。SIMDは、単一のコマンド・デコーダ・ユニットでデコードされた単一の命令列を有する他に、複数のデータストリームも有する。
【０００４】
SIMDマイクロプロセッサの過去の例の一つに、Intelのi860 32ビットRISC(reduced instruction set computer)プロセッサがある。このプロセッサは、32ビットのジェネラル・レジスタを、それぞれが互いに関係のない個別の小ビット幅のデータ（例えば、４つの８ビットデータ）として扱う。
【０００５】
i860は、実際にはハイブリッドのSISD/SIMDマシンである。特に、i860は、単一命令（単一命令、単一データまたはSISD）に対応して、32ビットのデータ幅で動作可能である。
【０００６】
あるいは、i860は、単一の命令（単一命令、複数データまたはSIMD）に対応して、８ビットのデータを４つ並列に実行可能である。
【０００７】
i860の最大32ビットのSISDデータパスは、最大32ビットのSIMDデータパスと等しいサイズである。同様に、サンSPARC（カリフォルニア州、マウンテン・ビューのサン・マイクロシステムズ社）と同様の他のSISD/SIMDマシン、DECのAlpha（テキサス州、ダラスのコンパック・コンピュータ社）、HPのプレシジョン・アーキテクチャ（カリフォルニア州、パロアルトのヒューレット・パッカード社）もまた、SIMDデータパスがSISDデータパスの最大値と等しいサイズをもつように構成されている。
【０００８】
【発明が解決しようとする課題】
SIMDのデータパスをSISDデータパスと等しいサイズにするというアプローチの欠点は、SIMDデータパスの最大サイズがSISDデータパスのサイズにより制限されることである。この結果、単一の命令に対して実行可能な複数のデータ・アイテムの量が制限され、より正確には、複数のデータアイテムの総計サイズが制限される。すなわち、i860を例に取ると、SIMDデータパスの32ビットサイズは、非SIMDデータパスの32ビットサイズに制限される。
【０００９】
本発明は、このような点に鑑みてなされたものであり、その目的は、複数の並列演算時のデータパス・サイズが単一演算時のデータパス・サイズの制限を受けないプロセッサおよびその命令処理方法を提供することにある。
【００１０】
【課題を解決するための手段】
上述した課題を解決するために、請求項１の発明は、命令オペランドを保持するｎビットレジスタ回路と、命令ストリームからのプロセッサ命令を順にデコードする命令デコード回路と、単一演算と複数の並列演算との一方を実行する演算論理回路と、を備え、前記単一演算は、前記命令デコード回路によりデコードされた第１の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つのｍ（ｍ＜ｎ）ビットオペランドでの演算であり、前記演算論理回路は、前記ｍビットよりビット数の多いオペランドに対しては、前記単一演算を行わず、前記複数の並列演算は、前記命令デコード回路によりデコードされた第２の単一プロセッサ命令に対応して、前記ｎビットレジスタ回路から供給されたｎビットオペランド中の少なくとも２つのビット部分での演算である。
【００１１】
請求項１の発明では、単一演算と複数の並列演算の一方を実行可能な演算論理回路を設け、複数の並列演算を実行する際に、単一演算時のビット数に制限されないようにする。
【００１２】
請求項２の発明では、複数の整数パイプ回路を設けて演算を行うため、単一演算だけでなく、複数の並列演算も行うことができる。
【００１３】
請求項３の発明では、ｎビットを越えない範囲内で、任意のビット長のオペランドをもつプロセッサ命令を実行できる。
【００１４】
請求項４の発明では、単一演算命令と複数の並列演算命令とが同時に発行された場合には、両命令の順序に従って整数パイプ回路での演算を行うことができる。
【００１５】
請求項５の発明は、命令オペランドを保持するｎビットレジスタ回路と、命令ストリームからのプロセッサ命令をデコードする命令デコード回路と、複数の演算論理ユニットALU1〜ALUkを含む演算論理(AL)回路と、を備え、前記演算論理ユニットALUi（ｉ＝１〜ｋ）のそれぞれは、前記命令デコード回路によりデコードされた第１の個別のプロセッサ命令に対応して、前記ｎビットレジスタ回路から供給された少なくとも一つの対応するｍiビットオペランド（ｍi＜ｎ（ただし、ｉ＝１〜ｋ））での個別の単一演算を実行可能であり、前記演算論理ユニットALUi（ただし、ｉ＝１〜ｋ）は、ｍiビットよりビット数の多いオペランドでの単一演算は実行せず、前記演算論理ユニット用のすべてのｍi（ただし、ｉ＝１〜ｋ）の合計は、ｎ以下であり、前記演算論理ユニットのそれぞれは、前記命令デコード回路によりデコードされた第２の単一命令に対応して、前記ｎビットレジスタ回路から供給された一つのｎビットオペランドの少なくとも二つのビット部分での複数の並列演算を実行可能である。
【００１６】
請求項５の発明では、複数の演算論理ユニットを設けるため、単一演算と複数の並列演算のどちらでも、実行可能である。
【００１７】
請求項６の発明では、演算論理ユニットのそれぞれにオペランドを引き渡すため、各演算論理ユニットで並列に演算を行うことができる。
【００１８】
請求項７の発明では、単一演算命令と複数の並列演算命令とが同時に発行された場合には、両命令の順序に従って整数パイプ回路での演算を行うことができる。
【００１９】
請求項８の発明では、メモリとｎビットレジスタ回路との間にロード／ストア回路を設けるため、演算論理回路の演算処理とは別個に、命令やデータの伝送を行うことができる。
【００２０】
【発明の実施の形態】
以下、本発明に係るプロセッサについて、図面を参照しながら具体的に説明する。
【００２１】
本発明に係るプロセッサは、単一命令および単一データ(SISD)演算用の少なくとも一つの基準サイズ・データパスだけでなく、単一命令および複数データ(SIMD)演算用のエンハンスド・サイズ・データパスを有する。ここで、SIMD用のデータパスはSISD用のデータパスよりも大きい。以下、本実施形態の構成および動作を詳細に説明する。
【００２２】
本発明に係るプロセッサは、例えば最大64ビットの基準SISDデータパスと128ビットの拡張SIMDデータパスを有する。図１はこの種のプロセッサ１００の構成を示すブロック図である。
【００２３】
図１において、プロセッサ１００は、32×128ビットのレジスタファイル１０２を有する。すなわち、レジスタファイルは、32個の128ビットのジェネラル・パーパス・レジスタを有する。プロセッサ１００はまた、128ビットのデータパス１０４を有する。以下に詳細に説明するように、128ビットのデータパス１０４は、最大64ビットの整数パイプ106a,106bを有する。
【００２４】
図２は整数パイプ106a,106bの詳細構成を示す図である。特に、図２は、レジスタファイル１０２の特定レジスタ２０１（下位部201aと上位部201bを有する）が整数パイプ106a,106bとどのように連携するかを示している。
【００２５】
図２のレジスタ２０１は、図解のためにのみ設けられている。整数パイプ106a,106bはそれぞれ、ALU(arithmetic logic unit)201a,201bを有する。レジスタ部201a,201bからのオペランドデータは、マルチプレクサ回路２０４を介して、ALU202a,202bに供給される。すなわち、下位部201aは、４つのリード部205a〜205dを有し、上位部201bは、３つのリード部205e〜205gを有する。これらのリード部205a〜205gはそれぞれ、マルチプレクサ206a〜206gに接続されている。
【００２６】
このように接続することで、マルチプレクサ206a〜206gの演算のうち、下位部201aの内容は、（ALU202aを含む）整数パイプ106aと（ALU202bを含む）整数パイプ106bとのいずれかに供給される。
【００２７】
同様に、上位部201bの内容は、整数パイプ106aか整数パイプ106bのいずれかに供給される。
【００２８】
図２には、ここでは詳述しないが、プロセッサ１００の他の多くの特徴が開示されている。
【００２９】
最大64ビットサイズの整数パイプ106a,106bを備えることにより、プロセッサ１００により処理されうる最大整数SISD型の演算ビット数は64ビットである。それと対比して、整数パイプ106a,106bの両方を同時に動作させ、プロセッサ１００は、総計128ビットのSIMD演算を行うことができる。
【００３０】
一般的には、本発明に係るSISD/SIMDプロセッサは、SISDデータパスサイズがSIMDデータパスサイズよりも小さい。SISDデータパスは、SIMDデータパスの一部である。このため、たった一つのSISDデータパスのみが必要となる。SISDデータパスが最大64ビットに限定されることは、制限にはならない。128ビットのSISD整数動作を利用する例はほとんどないためであり、このような演算能力を設けても、チップ内の面積やサイクルタイムを有効活用できない。
【００３１】
これに対して、128ビットのエンハンスドSIMDデータパスにより恩恵を受けられる数多くの演算（特に、マルチメディア応用で共通して用いられるベクトル演算）がある。
【００３２】
本実施形態において、（レジスタファイル１０２内の）ジェネラル・パーパス・レジスタは、SIMDデータパス全体を利用する演算にオペランドを供給できる十分な幅を有する。すなわち、本実施形態において、ジェネラル・パーパス・レジスタ１０２は、整数SIMD演算用の128ビットのSIMDデータパス１０４の全体を利用するための整数オペランドを保持するのに十分なサイズである１２８ビットを有する。
【００３３】
本実施形態において、必ずしもジェネラル・パーパス・レジスタを使用する必要はない。しかしながら、SIMD演算を行うために、整数オペランドをSIMDデータパスに保持する目的でワイドな浮動小数点レジスタを設けることも可能であるし、また、SIMD演算用のSIMDデータパスに浮動小数点オペランドを保持するためにワイドなジェネラル・パーパス・レジスタを設けることも可能である。
【００３４】
次に、整数パイプ106a,106bについて詳述する。整数パイプ106a,106bの詳細構成は図２に示される。上述したように、整数パイプ106a,106bはそれぞれ、ALU202a,202bを有する。128ビットのSIMDデータパスが２つの整数パイプ106a,106bで構成されると述べたが、実際には、SISD演算を行うためには、一つの整数パイプのみが必要である。なお、３つ以上の整数パイプを設けてもよい。
【００３５】
以下に、いくつかのコード列を例に挙げて説明する。以下のコード列の一例は、pmulthとpaddhを除いて、標準的なMIPS ISAニーモニックからなる。
【００３６】
0003906003.tif 000002
上記のコード列中で、"<"と">"は、ビット・フィールド・セレクタを表している。例えば、rd<15..0>は、レジスタrdの下位側１６ビットを示す。
【００３７】
本実施形態のさらなる特徴として、整数パイプ106a,106bは、64ビットのSISD命令の単一発行や128ビットのSIMD命令の単一発行によってだけでなく、２つの64ビット命令の同時発行（例えば、SISD）によっても利用することができる。
【００３８】
64ビットSISD命令の単一発行により個別に利用可能か、あるいは、128ビットのSIMD命令の単一発行によりまとめて利用可能か、あるいは、複数の64ビットSISD命令の連続発行により個別に利用可能な３つ以上の整数パイプを設けることが、本発明のさらなる特徴である。
【００３９】
例えば、以下のような例である。
【００４０】
0003906003.tif 000003
さらに、プロセッサ１００は、第２の128ビット演算がSIMD演算とは独立にリソースを利用する限り、SIMDの（第１の）128ビット演算と同時に、第２の128ビット演算を行う。例えば、128ビットのロード／ストア演算は、128ビットのSIMD演算と並列に発行される。
【００４１】
lq $5, var             # 128-bit Pipe 1 flow
paddsw $1,  $2,  $3    # 128-bit Pipe 0 flow
次に、それぞれ８つの要素からなる２組同士で内積を演算する例に基づいて、本実施形態のアーキテクチャを説明する。この場合の16ビットのベクトル値は次の通りである。
【００４２】
ｓ0＝ｘ0ｃ0＋ｘ1ｃ1＋ｘ2ｃ2＋ｘ3ｃ3＋ｘ4ｃ4＋ｘ5ｃ5＋ｘ6ｃ6＋ｘ7ｃ7
（64ビットの限定されたALU幅を有する）従来のSISD/SIMDマシンを例に取る と、４つの16ビット・チャンクはそれぞれ次のように処理される。
【００４３】
0003906003.tif 000004
64ビットのSIMDに制限されるマシンを有する全８つのタームを処理するためには、コードは次のように拡張される。
【００４４】
0003906003.tif 000005
上述したコード・シーケンスは、１３個の命令と７個のジェネラルレジスタを使用する。
【００４５】
仮に、128ビットレジスタを用いて命令を実行する場合を仮定する。より幅広いレジスタを有する命令列は、以下の通りである。
【００４６】
0003906003.tif 000006
このコード・シーケンスでは、７個の命令と４つのレジスタを使用している。これに対して、64ビットのSIMDマシンは通常、13個の命令と７つのレジスタを使用する。
【００４７】
このように、128ビットSIMDマシンは、64ビットSIMDマシンに比べて、少ない命令で効率よく、この処理を行うことができる。
【００４８】
同様の課題に対する他の例として、拡張ALU SIMD演算がある。例えば、MPEGビデオデコーダの内部ループのコード・フラグメントは、以下に示すように、128ビット演算を行う場合に有利である。
【００４９】
ｓ0＝ｘ0ｃ0＋ｘ2ｃ2＋ｘ4ｃ4＋ｘ6ｃ6
ｓ7＝ｘ1ｃ1＋ｘ3ｃ3＋ｘ5ｃ5＋ｘ7ｃ7
ｙ0＝ｓ0＋ｓ7
ｙ7＝ｓ0−ｃ7
上記の例は、128ビット幅のSIMDに基づいていることに注目すべきである。レジスタセットの拡張（例えば、256ビットや512ビット以外の基本ALU幅の整数倍のビット幅をもつレジスタセットへの拡張）を行ってもよい。このような拡張は、本実施形態において有効である。
【００５０】
図３〜図５は、プロセッサの一実施形態において、特定のALU演算命令に対して、オペランドがどのように与えられるかを示す図である。図３において、プロセッサ３００は、通常ALU(arithmetic logic unit)演算命令と、拡張(wide)ALU演算命令とを有する。
【００５１】
図４は通常ALU演算命令と拡張ALU演算命令を模式的に示した図である。通常ALU演算命令の場合には、一つの命令は、例えば、64ビット同士の演算を行い、その結果、64ビットの演算結果が得られる。このため、通常ALU演算命令は、単一の演算ユニットを使用して演算される。
【００５２】
拡張ALU演算命令の場合には、一つの命令は、２つの演算を行う。各演算ではそれぞれ、64ビット同士を演算して64ビットの演算結果を得る。このため、拡張ALU演算命令は、２つの演算ユニットを利用して実行される。
【００５３】
例えば図３において、２つの命令は、命令フェッチ・ユニット３１０にて同時に発行される。このように、命令フェッチ・ユニット３１０は、複数の命令を同時に発行することができる。ただし、その場合でも、同時に発行された命令間の先後関係は規定されている。
【００５４】
具体的には、命令の発行に先立って、命令フェッチ・ユニット３１０は、フェッチされた命令を実行できるか否かをチェックする。すなわち、フェッチ・ユニット３１０は、浮動小数点ユニット３２２が実行できるか否かと、第１および第２の整数ユニット３２０，３２４が実行できるか否かと、ロード・ストア・ユニット３２６が実行できるか否かと、コプロセッサ・ユニット３２８が実行できるか否かをチェックする。
【００５５】
命令フェッチ・ユニット３１０は、適切なパイプラインに命令を送る。すなわち、仮に、命令が浮動小数点ユニット３２２により実行可能であれば、ユニット３１０は、第１のパイプライン３１４にその命令を引き渡す。仮に、命令がロード・ストア・ユニット３２６かコプロセッサ・ユニット３２８により実行可能であれば、ユニット３１０は、その命令を第２のパイプライン３１６に引き渡す。仮に、命令が第１の整数ユニット３２０か第２の整数ユニット３２４により実行可能であれば、ユニット３１０は、その命令を第１のパイプライン３１４か第２のパイプライン３１６に引き渡す。これにより、パイプラインの有効性とペアになった命令とを考慮に入れることができる。
【００５６】
しかしながら、本実施形態では、拡張ALU演算命令が第１のパイプライン３１４にのみ与えられ、第２のパイプライン３１６には与えられないように構成されている。これと比較して、通常ALU演算命令は、第１のパイプライン３１４と第２のパイプライン３１６のいずれかに対して発行される。
【００５７】
命令フェッチユニット３１０から発行される２つの命令を実行するのに必要なオペランドがレジスタファイル３１１から読み出される。これらの２つの命令は、第１のパイプライン３１４と第２のパイプライン３１６に送られる。対応する命令のオペランドは、第１および第２のパイプライン３１４，３１６に送られる。
【００５８】
より詳細には、レジスタファイル３１１から読み出されたオペランドは、オペランド・バイパス／セレクト・ロジック３１２を介して、第１および第２のソース・バスに送られ、その後、対応する演算ユニットに到達する。
【００５９】
対応する演算ユニットによる演算結果は、第１の演算結果バスと第２の演算結果バスにそれぞれ送られ、レジスタファイル３１１に書き込まれる。あるいは、オペランド・バイパスを介してオペランド・バイパス／セレクト論理部３１２に送られる。
【００６０】
要約すると、プロセッサ３００による演算命令の制御は、演算命令における命令システムの制御に関して分けられ、かつ、演算命令用のデータであるオペランド・システムの制御に関して分けられる。
【００６１】
図５は、オペランドがどうやって第１および第２の整数ユニット３２０，３２４に送られるかを示す図である。図５では、第１のパイプライン３１４内の浮動小数点ユニット３２２と、ロード・ストア・ユニット３２６と、第２のパイプライン３１６内のコプロセッサ・ユニット３２８とを省略している。その理由は、本実施形態における拡張ALU演算命令は、第１および第２の整数ユニット３２０，３２４を利用する命令であると仮定しているためである。
【００６２】
図３に示すように、レジスタファイル３１１は、第１および第２のレジスタファイル３１１ａ，３１１ｂを有する。第１のレジスタファイル３１１ａは、通常ALU演算命令に利用されるオペランドを保持する。第２のレジスタファイル３１１ｂは、拡張演算命令に利用されるオペランドの一部を保持する。
【００６３】
命令が命令フェッチ・ユニット３１０から第１および第２のパイプライン３１４，３１６に発行されるとき、これら命令は命令フェッチ・ユニット３１０からレジスタ・ファイル３１１に送られる。より詳細には、第１および第２のパイプライン用の命令は、命令フェッチ・ユニット３１０から第１のレジスタファイル３１１ａに送られる。そして、同時に、第１のパイプライン用の命令は、第２のレジスタファイル３１１ｂに送られる。
【００６４】
したがって、対応する命令用のオペランドは、第１および第２のレジスタファイル３１１ａ，３１１ｂから読み出される。
【００６５】
第１のレジスタファイル３１１ａと第１の整数ユニット３２０との間には、保持マルチプレクサ５３０、バイパス・マルチプレクサ５３２および第１のフリップフロップ５３４が介挿される。第１の整数ユニット３２０の出力経路には、第２のフリップフロップ５３８が設けられる。
【００６６】
第１および第２のレジスタファイル３１１ａ，３２４の間には、保持マルチプレクサ５４０、バイパス・マルチプレクサ５４２、第１のフリップフロップ５４４および拡張マルチプレクサ５４６が介挿される。第２の整数ユニット３２４の出力経路には、第２のフリップフロップ５４８が設けられる。
【００６７】
第２のレジスタファイル３１１ｂと拡張マルチプレクサ５４６の間には、保持マルチプレクサ５５０、バイパス・マルチプレクサ５５２およびフリップフロップ５５４が介挿される。
【００６８】
保持マルチプレクサ５３０，５４０，５５０は、パイプラインがストールしている間にオペランドを保持するために用いられる。保持マルチプレクサ５３０，５４０，５５０は、オペランドを保持するときに、出力用のフィードバック・ループを選択する。保持マルチプレクサ５３０，５４０，５５０がどのオペランドも保持しないとき、レジスタファイル３１１からの出力ルートを選択する。
【００６９】
バイパス・マルチプレクサ５３２，５４２，５５２は、オペランドをバイパスさせるために用いられる。すなわち、バイパス・マルチプレクサ５３２，５４２，５５２は、第１および第２の整数ユニット３２０，３２４による演算結果がレジスタファイル３１１に書き込まれないときでも、バイパスデータを使用できるようにするために設けられる。
【００７０】
これらの保持マルチプレクサ５３０，５４０，５５０と、バイパス・マルチプレクサ５３２，５４２，５５２と、第１のフリップフロップ５３４，５４４，５５４と、拡張マルチプレクサ５４６とは、オペランド・バイパス／セレクト論理部３１２を構成する。この論理部３１２は、本実施形態によるオペランド・システムを制御する制御回路である。
【００７１】
保持マルチプレクサ５３０、バイパス・マルチプレクサ５３２、および第１のフリップフロップ５３４は、保持出力回路５５９ａを構成する。この回路５５９ａは、第１のレジスタファイルから出力されたオペランドか、第１のレジスタファイル内に保持されたオペランドのいずれかを出力するか否かを切り替えることができる。保持マルチプレクサ５４０、バイパス・マルチプレクサ５４２、および第１のフリップフロップ５４４は、保持出力回路５５９ｂを構成する。この回路は、第１のレジスタファイルから出力されたオペランドか、第１のレジスタファイル内に保持されたオペランドが出力されるか否かを切り替えることができる。保持マルチプレクサ５５０、バイパス・マルチプレクサ５５２および第１のフリップフロップ５５４は、保持出力回路５５９ｃを構成する。この回路５５９ｃは、第２のレジスタファイルから出力されたオペランドか、第２のレジスタファイル内に保持されたオペランドを出力すべきか否かを切り替えることができる。
【００７２】
これらの保持出力回路５５９ａ〜５５９ｃはそれぞれ、２つのオペランドを保持または出力する。すなわち、図４に示した例において、保持出力回路５５９ａ〜５５９ｃはそれぞれ、64ビットの２つのオペランドを保持または出力する。
【００７３】
図５は、簡略化のために、単一ライン、単一マルチプレクサおよび単一フリップフロップによる２つのオペランドを示している。
【００７４】
次に、図５を参照しながら、以下の(1)〜(3)のケースについて、オペランドの流れを説明する。
【００７５】
(1) ２つの通常ALU演算命令が同時に発行される場合。
【００７６】
(2) 通常ALU演算命令と拡張ALU命令が同時に発行され、かつ、拡張ALU演算命令が先の命令である場合。
【００７７】
(3) 通常ALU演算命令と拡張ALU演算命令が同時に発行され、かつ拡張ALUが後の命令である場合。
【００７８】
以下の説明において、命令フェッチ・ユニット３１０から発行されるすべての命令は、第１および第２の整数ユニット３２０，３２４を利用することにより実行される命令であると仮定する。
【００７９】
(1) ２つの通常ALU演算命令が同時に発行される場合
第１および第２のパイプライン３１４，３１６に発行された命令に対して、対応する命令のオペランドが第１のレジスタファイル３１１ａから読み出される。これら２組のオペランド（計４個のオペランド）は、保持マルチプレクサ５３０，５４０とバイパス・マルチプレクサ５３２，５４２に送られ、第１のフリップフロップ５３４，５４４に保持される。
【００８０】
すなわち、保持マルチプレクサ５３０，５４０は第１のレジスタファイル３１１ａからのオペランドを選択および出力する。バイパス・マルチプレクサ５３２，５４２は、保持マルチプレクサ５３０，５４０から出力されたオペランドを保持する。
【００８１】
ここで保持される２組のオペランドは、後述する命令と同時に、第１および第２の整数ユニット３２０，３２４に送られる。すなわち、拡張マルチプレクサ５４６は、第１のフリップフロップ５４４から出力された一組のオペランドを選択する。このオペランドは、第１のレジスタファイル３１１ａのオペランドであり、第２の整数ユニット３２４に出力される。
【００８２】
(2) 通常ALU演算命令と拡張ALU演算命令が同時に発行され、拡張ALU演算命令が先の命令である場合
拡張ALU演算命令（第１の演算）の下位ビットの一組のオペランドが第１のレジスタファイル３１１ａから第１のパイプライン３１４に読み出される。さらに、通常ALU演算命令は、第１のレジスタファイル３１１ａから第２のパイプライン３１６に読み出される。さらに、拡張ALU演算命令（第２の演算）の上位ビットの演算用の一組のオペランドは、第２のレジスタファイル３１１ｂから第２のパイプライン３１６に読み出される。このため、全体で６つのオペランドがレジスタファイル３１１から読み出される。
【００８３】
上記の場合、拡張ALU演算命令は、第１のパイプライン３１４にのみ与えられる。このため、第２のレジスタファイル３１１ｂには、第１のパイプライン３１４に発行される命令のみが供給される。
【００８４】
このようにして、第１のレジスタファイル３１１ａから読み出された２つの命令用の２組のオペランドは、保持マルチプレクサ５３０，５４０とバイパス・マルチプレクサ５３２，５４２に送られ、第１のフリップフロップ５３４，５４４に保持される。
【００８５】
すなわち、保持マルチプレクサ５３０，５４０は、第１のレジスタファイル３１１ａからのオペランドを選択および出力し、その間に、バイパス・マルチプレクサ５３２，５４２は、保持マルチプレクサ５３０，５４０から出力されたオペランドを選択および出力する。
【００８６】
第２のレジスタファイル３１１ｂから読み出された一つの命令用のオペランドは、保持マルチプレクサ５５０とバイパス・マルチプレクサ５５２を介して送られ、第１のフリップフロップ５５４に保持される。すなわち、保持マルチプレクサ５５０は、第２のレジスタファイル３１１ｂからのオペランドを出力する。バイパス・マルチプレクサ５５２は、保持マルチプレクサ５５０からのオペランドを選択および出力する。
【００８７】
第１のパイプライン３１４に発行された命令は、拡張ALU演算命令であるため、拡張ALU演算命令用のオペランドは第１および第２の整数ユニット３２０，３２４にまず送られる。より詳細には、第１のフリップフロップ５３４からのオペランド列は第１の整数ユニット３２０に供給される。すなわち、第１の整数ユニット３２０には、第１のレジスタファイル３１１ａから読み出された一組のオペランドが供給される。第２の整数ユニット３２４には、第１のフリップフロップ５５４からの一組のオペランドが供給される。すなわち、第２の整数ユニット３２４には、第２のレジスタファイル３１１ｂから読み出された一組のオペランドが与えられる。このように、拡張マルチプレクサ５４６は、第１のフリップフロップ５５４から出力されたオペランドを選択し、このオペランドを第２の整数ユニット３２４に引き渡す。
【００８８】
このようにして、拡張ALU演算命令は、パイプライン・ストールを起こすことなく、第１および第２の整数ユニット３２０，３２４に送られる。しかしながら、通常ALU演算命令は、リソースを利用できないので、パイプライン・ストールを起こし、順番を待たなければならない。すなわち、通常ALU演算命令は、第２のパイプライン３１６に発行されるが、第２のパイプライン３１６内の第２の整数ユニット３２４は、拡張ALU演算命令を実行するために使用中であり、通常ALU演算命令は、第２の整数ユニットを使用できない。このため、通常ALU演算命令は、拡張ALU演算命令の実行が完了するまで、待機される。
【００８９】
パイプライン・ストールを起こした通常ALU演算命令用の一組のオペランドは、第１のフリップフロップ５４４から保持マルチプレクサ５４０にフィードバックされ、次のサイクルまで保持される。
【００９０】
保持マルチプレクサ５４０に保持された通常ALU演算命令用の一組のオペランドは、第２の整数ユニット３２４に供給されて、次のサイクルで実行される。すなわち、次のサイクルでは、保持マルチプレクサ５４０は、第１のフリップフロップ５４４から出力されたオペランドを選択し、このオペランドをバイパス・マルチプレクサ５４２に出力する。同時に、次の命令が第１のパイプライン３１４に発行され、もし可能であれば、第２のパイプライン３１６と並列に実行される。
【００９１】
(3) 通常ALU演算命令と拡張ALU演算命令が同時に実行され、拡張ALU演算命令が後の命令である場合
上述した（２）と同様に、拡張ALU演算命令（第１の演算）に続く演算の一つとして、第１のレジスタファイル３１１ａから読み出された一組のオペランド（２つのオペランド）は、保持マルチプレクサ５３０とバイパス・マルチプレクサ５３２を介して送信され、第１のフリップフロップ５３４に保持される。通常ALU演算命令用の第１のレジスタファイル３１１ａから読み出された一組のオペランド（２つのオペランド）は、保持マルチプレクサ５４０とバイパス・マルチプレクサ５４２を介して送信され、第１のフリップフロップ５４４に保持される。
【００９２】
拡張ALU演算命令（第２の演算）の演算用の第２のレジスタファイル３１１ｂから読み出された一組のオペランド（２つのオペランド）は、保持マルチプレクサ５５０とバイパス・マルチプレクサ５５２を介して送信され、第１のフリップフロップ５５４に保持される。
【００９３】
第１のパイプライン３１４に発行された命令は、拡張ALU演算命令であるが、その命令は後続する命令である。このため、第２の整数ユニット３２４には、通常ALU演算命令用のオペランドが最初に与えられる。すなわち、第２の整数ユニット３２４は、フリップフロップ３２４からの一組のオペランドを最初に受け取る。このオペランドは、第１のレジスタファイル３１１ａから読み出される。その結果、拡張マルチプレクサ５４６は、第１のフリップフロップ５４４から出力されたオペランドを選択し、これらオペランドを第２の整数ユニット３２４に出力する。
【００９４】
このようにして、通常ALU演算命令は、パイプライン・ストールを起こすことなく、第２の整数ユニット３２４に送られるが、拡張ALU演算命令は、リソースを使用できないので、パイプライン・ストールにより待機しなければならない。すなわち、拡張ALU演算命令は、第１のパイプライン３１４に発行されるが、第１および第２の整数ユニット３２０，３２４は、拡張ALU演算命令の実行に利用されなければならない。
【００９５】
しかしながら、第２の整数ユニット３２４は、以前に発行された通常ALU演算命令を実行するために使用中であるため、拡張ALU演算命令は、第２の整数ユニット３２４を使用できない。このため、拡張ALU演算命令は、通常ALU演算命令の実行が終了するまで、待機しなければならない。
【００９６】
パイプライン・ストールを引き起こした拡張ALU演算命令用の二組のオペランドは、次のサイクルまで保持される。すなわち、第１のレジスタファイル３１１ａから読み出された一組のオペランドは、第１のフリップフロップ５３４から保持マルチプレクサ５３０にフィードバックされ、次のサイクルまで保持される。また、第２のレジスタファイル３１１ｂから読み出された一組のオペランドは、第１のフリップフロップ５５４から保持マルチプレクサ５５０にフィードバックされ、かつ、次のサイクルまで保持される。
【００９７】
その後、保持マルチプレクサ５３０，５４０に保持された２組のオペランドは、第１の整数ユニット３２０と第２の整数ユニット３２４に与えられ、それぞれ次のサイクルで実行される。すなわち、次のサイクルでは、保持マルチプレクサ５３０は、第１のフリップフロップ５３４から出力されたオペランドを選択し、選択したオペランドをバイパス・マルチプレクサ５３２に出力する。また、保持マルチプレクサ５５０は、第１のフリップフロップ５５４から出力されたオペランドを選択し、選択したオペランドをバイパス・マルチプレクサ５５２に出力する。
【００９８】
【発明の効果】
以上詳細に説明したように、本発明によれば、単一演算と複数の並列演算の一方を実行可能な演算論理回路を設けるため、単一演算時のビット数に限定されることなく、複数の並列演算を行うことができ、演算効率の向上が図れる。
【００９９】
また、単一演算用のプロセッサ命令と複数の並列演算用のプロセッサ命令とが同時に発行された場合には、命令の順序に応じて整数パイプ回路を割り当てるため、整数パイプ回路を有効利用することができる。
【図面の簡単な説明】
【図１】本発明に係るプロセッサの一実施形態のブロック図。
【図２】整数パイプの詳細構成を示す図。
【図３】特定のALU演算命令に対してオペランドがどのように与えられるかを示す図。
【図４】通常ALU演算命令と拡張ALU演算命令を模式的に示した図。
【図５】オペランドがどうやって第１および第２の整数ユニットに送られるかを示す図。
【符号の説明】
１００  プロセッサ
１０２  レジスタファイル
１０６ａ，１０６ｂ  整数パイプ
２０１ａ，２０１ｂ  レジスタ部
２０２ａ，２０２ｂ  演算論理回路
２０６ａ〜２０６ｇ  マルチプレクサ
３１０  命令フェッチ・ユニット
３１４，３１６  第１および第２のパイプライン
３２２  フローティング・ユニット
３２８  コプロセッサ・ユニット
【図１】
0003906003.tif 000007
【図２】
0003906003.tif 000008
【図３】
0003906003.tif 000009
【図４】
0003906003.tif 000010
【図５】
0003906003.tif 000011