(57)【要約】【課題】同時にデコードされた依存関係をもつ先行するＣＣ更新命令と後続するＣＣ読出命令につき、同時のＣＣリネーミングを回避してプロセッサの動作周波数の向上を可能とする。【解決手段】先行するＣＣ更新命令４８と同時にデコードされる後続するＣＣ読出命令５０をマルチフロー展開し、最初のフローをノーオペレーションとして先行するＣＣ更新命令４８のデコードによるＣＣリネーミングマップ更新処理部５４によりＣＣリネーミング更新を行なわせ、ＣＣ読出命令５０はマルチフロー命令語レジスタに格納する。次のセカンドフローではマルチフロー命令語レジスタからＣＣ読出命令５０を発行し、同時に他の命令の発行のない状態で、ＣＣ読出命令５０のデコードでＣＣリネーミングマップ参照処理部５４によりＣＣリネーミングマップ参照を行う。【選択図】　　　　　図１
2004038753.tif 000002
【特許請求の範囲】
【請求項１】
フェッチしてデコードした命令をインオーダーでリザベーションステーションに発行する命令発行部と、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部とを備えたプロセッサに於いて、
先行命令となるコンデションコード更新命令と後続命令となるコンデションコード読出命令を含む複数命令を同時に前記命令発行部にフェッチする命令フェッチ部と、
前記先行命令のデコードステージで、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、前記リネーミングレジスタのレジスタ番号を含むコンディションコード情報をコンディションコード用リネーミングマップに登録するリネーミングマップ更新処理部と、
前記後続命令をマルチフロー展開し、前記先行命令と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次の前記後続命令のデコードステージで、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に、前記コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納するリネーミングマップ参照処理部と、
前記先行命令のプライオリティステージで、実行結果のリネーミングレジスタ番号と前記リザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に前記命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させるフォーワード制御判断部と、
前記先行命令の更新ステージで、先行命令の実行結果として得られたコンディションコードデータを、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に格納するコンディションデータ書込処理部と、
を備えたことを特徴とするプロセッサ。
【請求項２】
請求項１記載のプロセッサに於いて、前記リネーミングマップ更新処理部は、前記コンディションコード更新命令に割り当てたリネーミングレジスタのレジスタ番号と共に更新保留中ビットを前記コンディションコード用リネーミングマップに格納することを特徴とするプロセッサ。
【請求項３】
請求項２記載のプロセッサに於いて、前記リネーミングマップ参照処理部は、前記リザベーションステーションの先行命令割当エントリにおけるソースレジスタの更新保留ビットとリネーミングレジスタ番号の領域に、前記コンディションコード用リネーミングマップに登録している先行命令の更新保留中ビットとコンディションコード用リネーミングレジスタのレジスタ番号を格納することを特徴とするプロセッサ。
【請求項４】
請求項３記載のプロセッサに於いて、前記フォーワード制御判断部は、先行命令実行結果のリネーミングアドレス番号と前記ザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を前記更新保留中ビットが立っていることを条件に比較し、両者が一致した際に前記リザベーションステーションの先行命令割当エントリにおけるソースレジスタのバイパスレディ領域にコンディションコード用バイパスレディビットを立て、前記コンディションコード用バイパスレディビットに基づいて、前記命令実行部に後続命令のコンディションデータのフォーワード制御の準備が整ったことを通知することを特徴とするプロセッサ。
【請求項５】
請求項４記載のプロセッサに於いて、前記コンディションデータ書込処理部は、前記リザベーションステーションに格納した先行命令割当エントリの前記コンディションコード更新保留中ビット、コンディションコード用リネーミングレジスタのアドレス番号、及びコンディションコード用バイパスレディビットに続くソースレジスタ領域に、先行命令の演算結果として得られたコンディションデータを格納することを特徴とするプロセッサ。
【請求項６】
フェッチしてデコードした命令をインオーダーでリザベーションステーションに発行する命令発行部と、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部とを備えたプロセッサの命令制御方法に於いて、
命令フェッチ部により、先行命令となるコンデションコード更新命令と後続命令となるコンデションコード読出命令を含む複数命令を同時に前記命令発行部にフェッチする命令フェッチステップと、
リネーミングマップ更新処理部により、前記先行命令のデコードステージで、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、前記リネーミングレジスタのレジスタ番号を含むコンディションコード情報をコンディションコード用リネーミングマップに登録するリネーミングマップ更新ステップと、
リネーミングマップ参照処理部により、前記後続命令をマルチフロー展開し、前記先行命令と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次の前記後続命令のデコードステージで、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に、前記コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納するリネーミングマップ参照ステップと、
フォーワード制御判断部により、前記先行命令のプライオリティステージで、実行結果のリネーミングアドレス番号と前記リザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に前記命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させるフォーワード制御判断ステップと、
コンディションデータ書込処理部により、先行命令の更新ステージで、先行命令の実行結果として得られたコンディションコードデータを、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に格納するコンディションデータ書込ステップと、
を備えたことを特徴とする命令制御方法。
【請求項７】
請求項６記載の命令制御方法に於いて、前記リネーミングマップ更新ステップは、前記コンディションコード更新命令に割り当てたリネーミングレジスタのレジスタ番号と共に更新保留中ビットを前記コンディションコード用リネーミングマップに格納することを特徴とする命令制御方法。
【請求項８】
請求項７記載の命令制御方法に於いて、前記リネーミングマップ参照ステップは、前記リザベーションステーションの先行命令割当エントリにおけるソースレジスタの更新保留ビットとリネーミングレジスタ番号の領域に、前記コンディションコード用リネーミングマップに登録している先行命令の更新保留中ビットとコンディションコード用リネーミングレジスタのレジスタ番号を格納することを特徴とする命令制御方法。
【請求項９】
請求項８記載の命令制御方法に於いて、前記フォーワード制御判断ステップは、先行命令実行結果のリネーミングアドレス番号と前記リザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を前記更新保留中ビットが立っていることを条件に比較し、両者が一致した際に前記リザベーションステーションの先行命令割当エントリにおけるソースレジスタのバイパスレディ領域にコンディションコード用バイパスレディビットを立て、前記コンディションコード用バイパスレディビットに基づいて、前記命令実行部に後続命令のコンディションデータのフォーワード制御の準備が整ったことを通知することを特徴とする命令制御方法。
【請求項１０】
請求項９記載の命令制御方法に於いて、前記コンディションデータ書込ステップは、前記リザベーションステーションに格納した先行命令割当エントリの前記コンディションコード更新保留中ビット、コンディションコード用リネーミングレジスタのアドレス番号、及びコンディションコード用バイパスレディビットに続くソースレジスタ領域に、先行命令の演算結果として得られたコンディションデータを格納することを特徴とする命令制御方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、動的パイプラインスケジューリングにより命令を実行するプロセッサ及び命令制御方法に関し、特に、同時にデコードしたコンディションコードの更新命令と読出命令のリネーミングを効率良く行うプロセッサ及び命令制御方法に関する。
【０００２】
【従来の技術】
従来、動的パイプラインスケジュールを実行するプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの確定部（コミット）という３つに分かれて処理を実行する。
【０００３】
即ち、命令発行部は、インオーダーにより複数命令をフェッチしてデコードし、リザベーションステーションに命令操作（オペコード）とオペランドを保持させる。命令実行部は、リザベーションステーションに全てのオペランドが準備され、演算器が利用可能となり次第、アウトオブオーダーで投機的に命令を実行し、結果を得る。確定部は、分岐予測結果などに基づき命令の確定を判別してインオーダーで命令を完了させ、実行結果をレジスタファイルまたはメモリ（ストアの場合のみ）に入れる。
【０００４】
このような動的パイプラインスケジューリングを採用したプロセッサにあっては、レジスタ値のプログラム順序性を守るために、命令完了（コミット）までレジスタ更新データを保持するリネーミングレジスタとしてレジスタ更新バッファを用意している。
【０００５】
このように同時に複数命令のデコードを行うプロセッサでは、デコードサイクルでのリネーミングにおいて、前のサイクルまでのリネーミング履歴を登録してあるリネーミングマップを参照するだけでなく、同時にデコードされた命令のうち、自身より前の命令との依存関係をみてリネーミングする必要がある。
【０００６】
このレジスタリネーミングは、先行命令となるレジスタ更新命令のデコードステージにおけるリネーミングマップ更新処理、後続命令となるレジスタ読出命令のデコードステージにおけるリネーミングマップ参照処理、先行命令のプライオリティステージにおけるフォーワード制御判断及び先行命令の更新ステージにおけるレジスタ書込み処理に分かれる。
【０００７】
特に、同時にレジスタ更新命令とレジスタ読出命令がデコードされた場合には、レジスタ読出命令は自身より前のレジスタ更新命令との依存関係をみてリネーミングする必要がある。
【０００８】
具体的には、リネーミングレジスタが更新保留中で、演算器もしくはリネーミングレジスタからレジスタ読出命令により値を参照するときは、先行するレジスタ更新命令の演算結果を書き込むタイミングでリネーミングレジスタのアドレス番号と、リザベーションステーションに登録されたソースレジスタのアドレス番号とを比較することで、先行するレジスタ更新命令の実行結果を後続するレジスタ参照命令の実行ステージに投入して実行させるフォーワード制御を行う。
【０００９】
図９は、同時にデコードされた先行するレジスタ更新命令と後続するレジスタ読出命令について、先行するレジスタ更新命令のデコードステージでレジスタ更新バッファ上にレジスタ割当てを行った場合のリネーミングマップ更新処理の説明図である。
【００１０】
図９において、レジスタ更新命令及びレジスタ読出命令を含むデコードステージで、命令の実行結果がコミットするまでレジスタ更新データを保持する専用レジスタを図示しないレジスタ更新バッファ上に割り当てる。
【００１１】
即ち命令語レジスタ２１８−１〜２１８−４の４つの命令について、レジスタ更新バッファ上に４つのバッファを割り当て、この割当バッファに関する情報をリネーミングマップ２６２に保持する。ここで命令語レジスタ２１８−１にレジスタ更新命令がフェッチされ、命令語レジスタ２１８−２に次のレジスタ読出命令がフェッチされたとする。
【００１２】
リネーミングマップ２６２はペンディングビット２６４と割当アドレス２６６を持っており、４つの命令に対応して割り当てた各割当レジスタごとにペンディングビット２６４をセットし、且つ汎用レジスタＲＥＧと更新バッファにおける割当アドレスＵＢＡの関係を割当アドレス２６６として登録している。
【００１３】
命令語レジスタ２１８−１〜２１８−４における４命令のデコードと同時に、例えば命令語レジスタ２１８−１のレジスタ更新命令について示すように、リザベーションステーション２２６に命令に対応した割当エントリ２２６−１１が確保され、またコミットスタックエントリ２４２にも命令に対応した割当エントリ２４２−１１が確保される。
【００１４】
コミットスタックエントリ２４２の割当エントリ２４２−１１は、バリッドビット２９０、書込レジスタ割当ビット２９２、レジスタ更新バッファ割当ビット２９４、書込レジスタアドレス２９６、更新バッファ割当アドレス２９８、演算完了待ちビット３００、オペコードなどの命令操作３０２、コンディションコードレジスタ書込ビット３０４及びコンディションコードデータ３０６の領域で構成されている。
【００１５】
この割当エントリ２４２−１１の命令に対応した割当てと同時に、命令のデコードサイクルで書込レジスタ割込ビット２９２のビットセット、レジスタ更新バッファ割当ビット２９４のビットセット、及び更新バッファ割当アドレス２９８に対する割当アドレスの書込みが行われる。
【００１６】
一方、リザベーションステーション２２６に確保されたレジスタ更新命令に対応した割当エントリ２２６−１１は、第１ソースレジスタ領域２７５、第２ソースレジスタ領域２８５に続いて、ディストネーション更新バッファ割当アドレス２８６及びオペコードなどの命令操作２８８を格納している。
【００１７】
第１ソースレジスタ領域２７５には、第１ソースバリッドビット２７６、第１ソースレジスタアドレス２７８、第１ソースペンディングビット２８０、第１ソースレジスタ更新バッファ割当アドレス（以下「Ｒ１更新バッファ割当アドレス」という）２８２及びバイパスレディビット（フォーワードレディビット）２８４が設けられる。
【００１８】
第２ソースレジスタ領域２８５についても、第１ソースレジスタ領域２７５と同様な領域が設けられるが、図示を省略している。尚、以下の説明及び図面上では、第１ソースレジスタをＲ１、第２ソースレジスタをＲ２と省略して表現する。
【００１９】
図１０は、図９で更新されたリネーミングマップ２６２を、命令語レジスタ２１８−２にフェッチされて同時にデコードされた後続のレジスタ読出命令が参照する場合の説明図である。
【００２０】
図１０において、命令語レジスタ２１８−２の命令を後続のレジスタ読出命令とすると、後続命令は読出ソースとなるレジスタのアドレス例えばアドレス「ＲＥＧ０」によりリネーミングマップ２６２を参照し、そのペンディングビット２６４及び割当アドレス２６６によって、リザベーションステーション２２６の先行命令の割当エントリ２２６−１１におけるペンディングビット２７８及びＲ１更新バッファ割当アドレス２８２を参照する。この先行命令の実行結果の参照により、図１１のような後続命令に対するフォーワード制御を行うことができる。
【００２１】
図１１の後続命令に対するフォーワード制御は、先行するレジスタ更新命令の実行結果から得られたＲ１更新バッファ割当アドレス３１４と図１０の後続するレジスタ読出命令によるリネーミングマップ２６２の参照で得られた割当エントリ２２６−１１のＲ１更新バッファ割当アドレス２８２を、例えば先行命令のプライオリティステージにおいてマッチング処理部３１６で比較し、一致した場合には割当エントリ２２６−１１のバイパスレディビット２８４をセットする。
【００２２】
このようにして先行命令の実行結果から後続命令に対するバイパスレディ、即ちフォーワードレディが判定されると、処理３１８のように、バイパスレディビット２８４に基づき命令実行部に対し準備が整ったことを通知し、先行命令の実行結果をコミット前にフォーワードして後続命令が実行される。
【００２３】
またＳＰＡＲＣ命令アーキテクチャーを採用したプロセッサにあっては、コンディションコード（以下「ＣＣ」という）をソースデータとして更新命令により更新した後に読出命令により読出してフォーワード制御する場合がある。このコンディションコードＣＣには、ネガティブ、ゼロ、オーバーフロー、キャリーといった数値演算命令の実行結果の状態を示すコードが使用される。
【００２４】
このようにＣＣレジスタを更新して参照する命令に関しても、同時に複数命令のデコードを行うプロセッサでは、デコードサイクルでのＣＣリネーミングにおいて、前のサイクルまでのＣＣリネーミング履歴を登録してあるＣＣリネーミングマップを参照するだけでなく、同時にデコードされた命令のうち、自身より前の命令との依存関係をみてＣＣリネーミングする必要がある。
【００２５】
このＣＣレジスタを更新して参照する命令に関しても、アウトオブオーダー実行のためには、コミットまでＣＣレジスタの更新データを保持するリネーミングレジスタとしてＣＣレジスタ更新バッファを用意する。
【００２６】
図１２は、同時にデコードされた先行する命令語レジスタ２１８−１のＣＣレジスタ更新命令と後続する命令語レジスタ２１８−２のＣＣレジスタ読出命令について、ＣＣレジスタのリネーミングにおけるＣＣ更新命令のデコードステージの説明図であり、基本的には図９のレジスタ更新命令の場合と同じになる。
【００２７】
即ち命令語レジスタ２１８−１のＣＣ更新命令のデコードで、レジスタ更新バッファ上にバッファを割り当て、この割当バッファに関する情報をＣＣリネーミングマップ３２０に保持する。
【００２８】
ＣＣリネーミングマップ３２０はＣＣペンディングビット３２２と割当アドレス３２４を登録している。命令語レジスタ２１８におけるＣＣ更新命令のデコードと同時に、リザベーションステーション２２６に命令に対応した割当エントリ２２６−１１が確保され、またコミットスタックエントリ２４２にも命令に対応した割当エントリ２４２−１１が確保される。
【００２９】
リザベーションステーション２２６の割当エントリ２２６−１１は、第１ソースレジスタ領域２７５に続いてＣＣソースレジスタ領域３２４を追加している。図示しない第２ソースレジスタ領域についてもＣＣソースレジスタ領域を追加している。
【００３０】
ＣＣソースレジスタ領域３２４には、ＣＣペンディングビット３２６、ＣＣ更新バッファ割当アドレス３２８及びＣＣバイパスレディビット（フォーワードレディビット）３３０及びＣＣデータ領域３３２が設けられる。
【００３１】
続いて命令語レジスタ２１８−２のＣＣレジスタ読出命令により読出ソースとなるレジスタのアドレスによりＣＣリネーミングマップ３２０を参照し、そのペンディングビット３２２及び割当アドレス３２４によって、リザベーションステーション２２６の先行命令の割当エントリ２２６−１１におけるペンディングビット３２６及びＣＣ更新バッファ割当アドレス３２８を参照し、後続するＣＣレジスタ読出命令に対するフォーワード制御を行う。
【００３２】
このフォーワード制御は、先行するＣＣレジスタ更新命令の実行結果から得られた更新バッファ割当アドレスと後続するレジスタ読出命令によるＣＣリネーミングマップ３２０の参照で得られた割当エントリ２２６−１１のＣＣ更新バッファ割当アドレス３２８を、例えば先行命令のプライオリティステージにおいてマッチング処理で比較し、一致した場合には割当エントリ２２６−１１のＣＣバイパスレディビット３３０をセットする。
【００３３】
このようにして先行命令の実行結果から後続命令に対するＣＣバイパスレディ、即ちフォーワードレディが判定されると、ＣＣバイパスレディビット３３０に基づき命令実行部に対し準備が整ったことを通知し、先行命令の実行結果をコミット前にフォーワードして後続命令が実行される。
【００３４】
【課題を解決するための手段】
しかしながら、同時に複数命令のデコードを行うプロセッサにあっては、デコードサイクルでのリネーミングにおいて、前のサイクルまでのリネーミング履歴を登録してあるリネーミングマップを参照するだけでなく、同じにデコードされた命令のうち、自身より前の命令との依存関係をみてリネーミングする必要がある。
【００３５】
このためＣＣリネーミングでは、ＣＣを更新する命令、ＣＣ読出命令ともに複雑な命令デコードをしてからしか判断出来ず、同時に発行した命令間でのＣＣリネーミングを行うことは、高周波数で動作することを目標とするプロセッサにおいてはネックとなる。
【００３６】
またリザベーションステーションの割当エントリについて、命令の頻度が少ないコンディションコード専用にＣＣソース領域を設けることは、必要以上に資源を増やすという問題もある。
【００３７】
本発明は、同時にデコードされた依存関係をもつ先行するＣＣ更新命令と後続するＣＣ読出命令につき、同時のＣＣリネーミングを回避して動作周波数の向上を可能とするプロセッサ及び命令制御方法を提供することを目的とする。
【００３８】
【課題を解決するための手段】
図１は本発明の原理説明図である。
【００３９】
本発明は、フェッチしてデコードした命令をインオーダーに発行する命令発行部と、リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部とを備えたプロセッサを対象とする。
【００４０】
このようなプロセッサにつき本発明は、命令フェッチ部、ＣＣリネーミングマップ更新処理部５２、リネーミングマップ参照処理部５４及びコンディションデータ書込処理部６０を備える。
【００４１】
命令フェッチ部は、先行命令となるＣＣ更新命令４８と後続命令となるＣＣ読出命令５０を含む複数命令を同時に命令発行部にフェッチする。ＣＣリネーミングマップ更新処理部５２は、ＣＣ更新命令（先行命令）４８のデコードステージＤ１で、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、リネーミングレジスタのレジスタ番号を含むコンディションコード情報をＣＣリネーミングマップ７０に登録する。
【００４２】
リネーミングマップ参照処理部５４は、ＣＣ読出命令（後続出命令）５０をマルチフロー展開し、ＣＣ更新命令（先行命令）４８と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次のＣＣ更新命令（先行命令）４８のデコードステージＤ２で、リザベーションステーション２６に格納した先行命令割当エントリ２６−１１の第１ソースレジスタ領域７５に、ＣＣリネーミングマップ７０に登録しているＣＣ更新命令（先行命令）４８のコンディションコード情報を格納する。
【００４３】
バイパス制御判断部（フォーワード制御判断部）５６は、ＣＣ更新命令（先行命令）４８のプライオリティステージＰ１で、実行結果のリネーミングレジスタ番号とリザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させる。
【００４４】
コンディションデータ書込処理部６０は、先行命令の更新ステージＵ１で、ＣＣ更新命令（先行命令）４８の実行結果として得られたコンディションコードデータを、リザベーションステーション２６における先行命令割当エントリの第１ソースレジスタ領域７５に格納する。
【００４５】
このように本発明は、同時にデコードされたＣＣ更新命令とＣＣ読出命令のうち、自身より前の命令との依存関係をみてリネーミングする必要のあるＣＣ読出命令をマルチフロー展開し、先行するＣＣ更新命令と同時に発行され得る最初のフローはノーオペレーションとしてマルチフロー命令語レジスタに格納し、次の同時に他の命令の発行のないセカンドフローでマルチフロー命令語レジスタのＣＣ読出命令をデコードしてＣＣ読出しのためのリネーミングマップ参照を行う。
【００４６】
このため同時にフェッチされてデコードされるＣＣ更新命令とＣＣ読出命令について、ＣＣリネーミングを２つのデコードステージに分けて順番に行なうことで、同時のＣＣリネーミングを避けることができ、プロセッサの動作周波数の向上を可能とする。
【００４７】
また、コンディションコードの更新命令に対応してリザベーションステーションに割当てられたエントリに、コンディションコードのバイパス制御に必要な専用の領域を設けず、通常のレジスタオペランド領域を流用してコンディションコード情報を格納するため、新たに資源を増加させる必要がない。
【００４８】
ここで、リネーミングマップ更新処理部５２は、コンディションコード更新命令に割り当てたリネーミングレジスタのレジスタ番号と共に更新保留中ビットをコンディションコード用リネーミングマップ７０に格納する。
【００４９】
ＣＣリネーミングマップ参照処理部５４は、リザベーションステーション２６の先行命令割当エントリ２６−１１におけるソースレジスタの更新保留ビットとリネーミングレジスタ番号の領域に、ＣＣリネーミング７０に登録している先行命令のＣＣ更新保留中ビット７２とコンディションコード用リネーミングレジスタのＣＣバッファ割当アドレス（レジスタ番号）７４を格納する。
【００５０】
バイパス制御判断部（フォーワード制御判断部）５６は、先行命令実行結果のリネーミングアドレス番号とリザベーションステーション２６の先行命令割当エントリにおけるリネーミングレジスタ番号を更新保留中ビットが立っていることを条件に比較し、両者が一致した際にリザベーションステーション２６の先行命令割当エントリ２６−１１におけるソースレジスタのバイパスレディ領域にコンディションコード用バイパスレディビットを立て、コンディションコード用バイパスレディビットに基づいて、命令実行部に後続命令のコンディションデータのフォーワード制御の準備が整ったことを通知する。
【００５１】
コンディションデータ書込処理部６０は、リザベーションステーション２６に格納した先行命令割当エントリ２６−１１のコンディションコード更新保留中ビット、コンディションコード用リネーミングレジスタのアドレス番号、及びコンディションコード用バイパスレディビットに続くソースレジスタ領域に、先行命令の演算結果として得られたコンディションデータを格納する。
【００５２】
本発明は、フェッチしてデコードした命令をインオーダーでリザベーションステーションに発行する命令発行部と、リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部とを備えたプロセッサの命令制御方法を提供する。
【００５３】
この命令制御方法は、
命令フェッチ部により、先行命令となるＣＣ更新命令と後続命令となるＣＣ読出命令を含む複数命令を同時に命令発行部にフェッチする命令フェッチステップと、
ＣＣリネーミングマップ更新処理部５２により、先行命令となるコンディションコード更新命令のデコードステージで、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、リネーミングレジスタのレジスタ番号を含むコンディションコード情報をコンディションコード用リネーミングマップに登録するリネーミングマップ更新ステップと、
ＣＣリネーミングマップ参照処理部５４により、後続出命令をマルチフロー展開して先行命令と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次の後続命令のデコードステージで、リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に、コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納するリネーミングマップ参照ステップと、
バイパス制御判断部（フォーワード制御判断部）５６により、先行命令のプライオリティステージで、実行結果のリネーミングアドレス番号とザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させるフォーワード制御判断ステップと、
ＣＣデータ書込処理部６０により、先行命令の更新ステージで、先行命令の実行結果として得られたコンディションコードデータを、リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に格納するコンディションデータ書込ステップと、
を備えたことを特徴とする。尚、この命令制御方法の詳細は、プロセッサの場合と基本的に同じになる。
【００５４】
【発明の実施の形態】
図２は、動的パイプラインスケジューリングにより命令を実行し、ＣＣデータをリザベーションステーションに格納する本発明の命令制御を行うプロセッサのハードウェア構成のブロック図である。
【００５５】
図２において、プロセッサは、命令フェッチ部１０、分岐予測部１４、命令キャッシュ１２、命令発行部１６、リネーミング処理部２０、リザベーションステーション処理部２４、命令実行部２８、ストアバッファ３６、データキャッシュ３８、レジスタファイル４０及びリソースモニタ４５を備える。
【００５６】
命令発行部１６には４つの命令語レジスタ１８−１〜１８−４が設けられ、本発明が対象とするＣＣ更新命令とＣＣ読出命令を含む４命令が同時にフェッチされデコードされる。リザベーションステーション処理部２４には、リザベーションステーション２６−１〜２６−５が設けられる。命令実行部２８には、固定小数点演算部３０−１，３０−２、浮動小数点演算部３２−１，３２−２及びロード／ストア演算部３４が設けられる。
【００５７】
レジスタファイル４０には、コミットスタックエントリ４２、アーキテクチャーレジスタファイルとして知られた汎用レジスタファイル４４、及びリネーミング処理部２０のレジスタ割り当ての対象となるレジスタ更新バッファ４６を備えている。
【００５８】
リネーミング処理部２０には、本発明によるリザベーションステーションへのＣＣデータの格納制御を行うＣＣリネーミング処理部２２が設けられる。ＣＣリネーミング処理部２２は、先行命令となるＣＣ更新命令のデコードステージでＣＣリネーミングレジスタとしてレジスタ更新バッファ４６上に割当バッファを確保し、ＣＣリネーミングマップを作成する。
【００５９】
また後続命令となるＣＣ読出命令については、マルチフロー展開し、先行するＣＣ更新命令のデコードステージと同じ先行フローの命令操作では、ＮＯＰ（ノーオペレーション）としてマルチフロー命令語レジスタにＣＣ読出命令を格納し、次の後続フローの命令操作によるマルチフロー命令語レジスタからのＣＣ読出命令のデコードステージにおいて、ＣＣリネーミングマップのＣＣ情報を、リザベーションステーションの割当エントリのＲ１ソースレジスタ領域を流用して格納する。
【００６０】
更に、先行命令のプライオリティステージで実行結果のバッファ割当アドレスをリザベーションステーションに格納したＣＣ情報のバッファ割当アドレスと比較して、後続命令に対するフォーワード制御の準備完了を通知して実行させる。
【００６１】
最終的に先行命令の更新ステージで、リザベーションステーションに先行命令の実行結果として得られたＣＣデータを格納する。
【００６２】
また命令キャッシュ１２及びデータキャッシュ３８は、ＳＰＡＲＣポートアーキテクチャに対応した図示しないインタフェースからシステムコントローラを介してメモリに接続されている。
【００６３】
図２について、動的パイプラインスケジューリングを行う本発明のプロセッサの基本的な処理手順を説明すると次のようになる。命令フェッチ部１０は、命令キャッシュ１２側の待ち行列から例えば４命令をまとめて命令発行部１６内の４の命令語レジスタ１８−１〜１８−４にフェッチしてデコードする。デコードされた４つの命令はリザベーションステーション処理部２４に送られる。
【００６４】
リザベーションステーション処理部２４は、例えば５つのリザベーションステーション２６−１〜２６−４を備えており、予め定めた関係にある空きのあるリザベーションステーションに対し命令を格納する。
【００６５】
ここでリザベーションステーション２６−１〜２６−５は例えば８つのエントリを持ち、合計４０個の命令をリザーブすることができる。このリザベーションステーション処理部２４に対する命令の発行は、プログラムの順番に従ったインオーダーで行われている。
【００６６】
リザベーションステーション２６−１〜２６−５に命令を投入すると同時に、コミットスタックエントリ４２にも命令ごとにエントリが割り当てられ、命令のコミット（確定）による開放まで保持される。この実施形態でコミットスタックエントリ４２は６４エントリを有する。
【００６７】
このため命令発行部１６の命令語レジスタ１８−１〜１８−４からは、リザベーションステーション処理部２４の対応するリザベーションステーション２６−１〜２２−５とコミットスタックエントリ４２及びその命令実行に必要な資源（レジスタ更新バッファ，ストアバッファ等）に利用可能なエントリがないと命令は発行されず、デコードステージでストールすることになる。
【００６８】
命令実行部２８は、リザベーションステーション２６−１〜２６−５のいずれかに命令の全てのオペランドの準備が整い且つ対応する演算部が対応可能となると、直ちに命令操作が実行されて実行結果が得られる。命令実行部２８における命令の実行操作はプログラムの順序どおりとはならず、実行可能な命令から逐次投機的に実行するアウトオブオーダーで行う。
【００６９】
命令実行部２８の実行結果は、分岐の成立などの判定結果を受けて命令を確定し、ストアバッファ３６に格納した後、ストア命令であればデータキャッシュ３８に格納してインオーダーで命令を完了させ、それ以外の演算命令であれば、更に汎用レジスタファイル４４の対応レジスタに格納してインオーダーで命令を完了させる。このように命令が確定すると、コミットスタックエントリ４２の割当エントリは開放される。
【００７０】
また本発明のプロセッサは、命令実行部２８においてアウトオブオーダーで命令操作を実行しており、命令実行がプログラムの順序どおりでないために、命令ごとに情報を保持する専用レジスタを割り当てなければならない。
【００７１】
図２の命令発行部１６には例えば４つの命令語レジスタ１８−１〜１８−４を用意していることから、４つの専用レジスタを割り当てることができなければ、命令を同時にリザベーションステーション処理部２４に格納することができず、専用レジスタを割り当て尽くした時点のデコードステージでストールしなければならない。
【００７２】
この命令ごとに割り当てる専用レジスタとしてレジスタ更新バッファ４６が準備されている。この実施形態においてレジスタ更新バッファ４６は、例えば６４エントリを確保している。
【００７３】
命令ごとに専用レジスタを割り当て、レジスタ内容がプログラム順序で更新参照される方法として、レジスタリネーミングが知られている。このレジスタリネーミングを具体的に説明すると次のようになる。いま次のような命令１、命令２、命令３があったとする。
【００７４】
命令１　Ｒ１＋Ｒ２＝Ｒ３
命令２　Ｒ３＋Ｒ４＝Ｒ３
命令３　Ｒ３＋Ｒ８＝Ｒ９
この３つの命令１〜３において、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３は依存関係にある。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３も依存関係にある。
【００７５】
このような場合に、レジスタリネーミングにあっては、命令１のディストネーションレジスタＲ３と命令２の第１オペランドレジスタＲ３を例えばリネーミングレジスタＲ３ａとして専用レジスタを割り当てる。また命令２のディストネーションレジスタＲ３と命令３の第１オペランドレジスタＲ３にリネーミングレジスタＲ３ｂを割り当てる。
【００７６】
命令のデコードの際に割り当てられたリネーミングレジスタＲ３ａは、命令１がコミットするまで使用が確保される。またリネーミングレジスタＲ３ｂは命令２がコミットするまで使用が確保される。
【００７７】
通常のレジスタ更新命令に対するレジスタリネーミングは、図２のリネーミング処理部で行われ、その詳細は、図９〜図１１と同じになる。しかし、本発明にあっては、ＣＣリネーミング処理部２２によるＣＣ情報のリザベーションステーションへの格納につき、ソースレジスタ領域を流用することから、図１２のように追加したＣＣ専用のＣＣソースレジスタ領域３２４をリザベーションステーションに持たない。
【００７８】
図３は、本発明のリザベーションステーションに対するＣＣデータ格納処理が行われるパイプラインステージの説明図である。
【００７９】
図３において、本発明のリザベーションステーションに対するＣＣデータの格納制御は、命令発行部１６の命令語レジスタ１８−１〜１８−４に対し、命令フェッチ部１０がＣＣ更新命令４８とＣＣ読出命令５０を含む複数命令を同時にフェッチしてデコードした場合に行われる。
【００８０】
先行するＣＣ更新命令４８は、デコードステージＤ１、プライオリティステージＰ１、バッファストアサイクルとして知られたバッファステージＢ１、実行ステージＸ１、更新ステージＵ１、更に書込ステージＷ１の処理を順次行う。なお、デコードステージＤ１の内の後ろ２ステージは、リザベーションステーションでプライオリティがとれないサイクルを示す。
【００８１】
一方、後続するＣＣ読出命令５０は、マルチフロー展開により１ステージ遅れて、デコードステージＤ２、プライオリティステージＰ２、バッファステージＢ２、実行ステージＸ２、更新ステージＵ２、更に図示しない書込ステージＷ２の順に処理される。なお、デコードステージＤ２の内の後ろ２ステージは、リザベーションステーションでプライオリティがとれないサイクルを示す。
【００８２】
図４は後続するＣＣ読出命令５０のマルチフロー展開による命令操作の説明図である。いま図４（Ａ）のように、命令語レジスタ１８−１，１８−２に、先行するＣＣ更新命令４８と後続するＣＣ読出命令５０がフェッチされた場合、デコードステージＤ１では、先行するＣＣ更新命令４８がリザベーションステーション処理部２４に発行される。これに対し後続するＣＣ読出命令５０はマルチフロー展開され、最初のステージはＮＯＰ（ノーオペレーション）としてデコードによる命令発行は行わず、マルチフロー展開による先行フロー（ファーストフロー）の命令操作として、ＣＣ読出命令５０をマルチフロー命令語レジスタ５５に転送して格納する。このため最初のステージでは、先行するＣＣ読出命令４８のデコードによるＣＣリネーミングマップ更新処理のみが行われる。
【００８３】
次のステージでは図４（Ｂ）のように、マルチフロー展開した後続フロー（セカンドフロー）の命令操作により、マルチフロー命令語レジスタ５５に格納したＣＣ読出命令のデコードステージＤ２となってリザベーションステーション処理部２４に発行され、このとき他の命令の発行はない。このため先行するＣＣ読出命令４８のデコードから分離して後続するＣＣ読出命令５０によるＣＣリネーミングマップ読出処理のみが行われる。
【００８４】
再び図３を参照するに、先行するＣＣ更新命令４８のデコードステージＤ１においては、ＣＣリネーミングマップ更新処理部５２が命令確定までＣＣレジスタ更新データを保持するＣＣリネーミングレジスタを割り当てた際に、このＣＣリネーミングレジスタのバッファ割当アドレス（レジスタ番号）を含むコンディションコード情報をコンディションコード用リネーミングレジスタマップに登録する。
【００８５】
次のステージは、マルチフロー展開した後続するＣＣ読出命令５０のデコードステージＤ２となり、ＣＣリネーミングマップ参照処理部５４が先行するＣＣ更新命令４８のリザベーションステーションにおける割当エントリのソースレジスタ領域に、コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納する。
【００８６】
更に、先行するＣＣ更新命令４８のプライオリティステージＰ１において、バイパス制御判断部５６がＣＣ更新命令４８の実行結果として得られたリネーミングアドレス番号とリザベーションステーションの先行命令割当エントリに格納しているリネーミングレジスタ番号を比較し、両者が一致した際に、フォーワード制御の準備が整ったことを命令実行部に通知し、先行命令４８の実行ステージＸ１からの矢印５８のように、ＣＣ読出命令５０の実行ステージＸ２で演算を行う命令実行部の演算器に対し先行命令４８の演算結果を直接フォーワードさせる。
【００８７】
更に、先行するＣＣ更新命令４８の更新ステージＵ１において、後続するＣＣ読出し命令５０のフォーワード制御による実行ステージＸ２の演算と並行して、ＣＣデータ書込処理部６０が先行するＣＣ更新命令４８の実行結果として得られたコンディションコードデータを、リザベーションステーションにおける先行命令割当エントリのソースレジスタ領域に格納する。
【００８８】
図５は、図３のＣＣリネーミングマップ更新処理部５２の処理の詳細である。図５において、命令語レジスタ１８−１にフェッチしてデコードされたＣＣ更新命令に基づき、ＣＣ更新命令の実行結果を格納するディストネーションレジスタについてリネーミングレジスタとして、図２のレジスタ更新バッファ４６上の空きバッファが割当バッファとして確保される。
【００８９】
このリネーミングレジスタとして確保されたレジスタ更新割当バッファに対応してＣＣリネーミングマップ７０が作成され、ＣＣリネーミングマップ７０にＣＣ更新保留中ビット７２が立てられ、同時にディストネーションレジスタのリネーミングレジスタとして確保されたＣＣ更新バッファ割当アドレス７４が登録される。
【００９０】
同時にコミットスタックエントリ４２には割当エントリ４２−１１が確保され、更にリザベーションステーション２６に、命令語レジスタ１８にフェッチされてデコードされたＣＣ更新命令が発行されて割当エントリ２６−１１が確保される。
【００９１】
ここでリザベーションステーション２６における割当エントリ２６−１１は、第１ソースレジスタ領域７５、図示しない第２ソースレジスタ領域、ディストネーション更新バッファ割当アドレス８６、更にオペコードなどの命令操作８８を持っている。
【００９２】
また第１ソースレジスタ領域７５には、バリッドビット７６、Ｒ１更新バッファ割当アドレス７８、Ｒ１ペンディングビット８０、Ｒ１更新バッファ割当アドレス８２及びＲ１レディビット８４が設けられている。
【００９３】
一方、コミットスタックエントリ４２に確保された割当エントリ４２−１１は、バリッドビット９０、書込レジスタ割当ビット９２、レジスタ更新バッファ割当ビット９４、書込レジスタアドレス９６、更新バッファ割当アドレス９８、演算完了待ちビット１００、オペコードなどの命令操作１０２、ＣＣレジスタ書込ビット１０４及びＣＣデータ領域１０６を備えている。
【００９４】
このため、命令語レジスタ１８−１にフェッチしてデコードしたＣＣ更新命令によって、ＣＣリネーミングマップ７０を準備すると同時に、コミットスタックエントリ４２に確保した割当エントリ４２−１１の書込レジスタ割当ビット９２の立ち上げ、レジスタ更新バッファ割当ビット９４の立ち上げ、更新バッファ割当アドレス９８のセット、ＣＣレジスタ書込ビット１０４のセットが行われ、更にリザベーションステーション２６に確保した割当エントリ２６−１１に対しては、ディストネーション更新バッファ割当アドレス８６の格納を行う。
【００９５】
図６は、図３の後続するＣＣ読出命令５０のデコードステージＤ２で動作するＣＣリネーミングマップ参照処理部５４の詳細である。図６のＣＣリネーミングマップ７０の参照処理にあっては、命令語レジスタ１８−２にフェッチし、マルチフロー展開による後続フローの命令操作でデコードされたＣＣ読出命令５０によるＣＣリネーミングマップ７０の参照で、図５の更新処理で登録されているＣＣ更新保留中ビット７２とＣＣバッファ割当アドレス７４が読み出され、リザベーションステーション２６に確保されている先行命令の割当エントリ２６−１１における第１ソースレジスタ領域７５の中のＲ１ペンディングビット８０の領域と、Ｒ１更新バッファ割当アドレス８２の領域にそれぞれ格納される。
【００９６】
図７は、図３の先行するＣＣ更新命令４８のプライオリティステージＰ１におけるバイパス制御判断部５６の処理の詳細である。このバイパス制御判断部５６の処理にあっては、プライオリティステージＰ１においてＣＣ更新命令４８の演算結果となる更新バッファ割当アドレス１１４をマッチング処理部１１６に与え、このときのリザベーションステーション２６の割当エントリ２６−１１に参照処理で格納しているＣＣ更新バッファ割当アドレス１１０を読み出して比較する。
【００９７】
マッチング処理部１１６で両者のアドレス一致が判別されると、図５のリザベーションステーション２６に示すように、第１ソースレジスタ領域７５のＲ１レディビット８４として割り当てていた領域にＣＣレディビット１１２を立てる。
【００９８】
このようにリザベーションステーション２６の割当エントリ２６−１１にＣＣレディビット１１２が立てられると、これに基づいて、後続命令としてのＣＣ読出命令を実行しようとしている命令実行部に対し、先行命令の実行結果であるＣＣデータを用いた後続命令におけるフォーワード制御の準備が整ったことを、処理１１８に示すように命令実行部に対しバイパスレディを発行して通知して実行させる。
【００９９】
図８は、図３の先行するＣＣ更新命令４８の更新ステージＵ１におけるＣＣデータ書込処理部６０の処理の詳細である。この図８のＣＣデータ書込処理は、図６のフォーワード制御判断の場合と同様、先行命令の実行結果として得られた演算結果の更新バッファ割当アドレス１１４をマッチング処理部１２２に入力し、このときのリザベーションステーション２６の割当エントリ２６−１１のＣＣ更新バッファ割当アドレス１１０と比較し、両者が一致した場合には、データバスにより得られている演算結果のＣＣデータ１２６をリザベーションステーション２６の割当エントリ２６−１１に既に格納したＣＣレディビット１１２に続く第２ソースレジスタ領域の先頭部分の領域を利用して、ＣＣデータ１２４を格納する。
【０１００】
一方、リザベーションステーション２６における先行命令に割り当てられた割当エントリ２６−１１に格納されるＣＣデータ１２４は、図３のＣＣ更新命令５０の実行ステージＸ１で後続するＣＣ読出命令を実行する演算器に直接フォーワードされており、このＣＣデータを用いて、後続するＣＣ読出命令５０の演算を実行ステージＸ２で実行している。
【０１０１】
このようにＣＣリネーミングが重ならないように後続命令をマルチフロー展開して順次デコードすることでマルチフロー展開でステージ数が増加しても、ＣＣ更新命令４８とＣＣ読出命令５０の発生頻度は低いため、全体的にみたプロセッサ性能への影響は少ない。またＣＣリネーミング用に通常のレジスタのリネーミングに使用する図２のレジスタ更新バッファ４６を割り当ていても、バッファが不足してデコードステージでストールするような事態を招くこともない。
【０１０２】
むしろ通常のレジスタリネーミングの資源をＣＣレジスタのリネーミングに流用することで資源の増加を防ぎ、特に、ＣＣ更新命令とＣＣ読出命令の同時のＣＣリネーミングが回避できることで、プロセッサの動作周波数の向上を可能とする。
【０１０３】
なお、本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。また本発明は上記の実施形態に示した数値による限定は受けない。
【０１０４】
【発明の効果】
以上説明してきたように本発明によれば、同時に複数命令のデコードを行うプロセッサにおいて、同時にデコードされたＣＣ更新命令とＣＣ読出命令のうち、自身より前の命令との依存関係をみてリネーミングする必要のあるＣＣ読出命令をマルチフロー展開し、先行するＣＣ更新命令と同時に発行され得る最初のフローはノーオペレーションとしてマルチフロー命令語レジスタに格納し、次の同時に他の命令の発行のないセカンドフローでマルチフロー命令語レジスタのＣＣ読出命令をデコードしてＣＣ読出しのためのリネーミングマップ参照を行い、同時のＣＣリネーミングを避けることによって、プロセッサの動作周波数を向上させることができる。
【０１０５】
またマルチフロー展開でステージ数が増加するが、同時にデコードされるＣＣ更新命令とＣＣ読出命令の頻度は少ないため、プロセッサ全体としての影響は無視できる程度に少なく、むしろ、プロセッサの動作周波数を向上できる利点の方が勝る。
【０１０６】
またリザベーションステーションの割当エントリにＣＣ専用の領域を設けず、通常のレジスタオペランド領域を流用して、ここにＣＣ情報としてＣＣリネーミングレジスタの更新保留中ビット、バッファ割当アドレス、更にＣＣデータを格納することで、通常のレジスタ更新命令に対し頻度の少ないＣＣ更新命令に必要な資源を必要最小限に抑える。
【０１０７】
更にＣＣデータのフォーワード制御を判断するプライオリティステージについても、ＣＣデータ専用の条件を追加せずに通常のレジスタ更新の条件を流用することで、資源を節減できる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】ＣＣデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図３】本発明のＣＣデータ格納処理が行われるパイプラインステージの説明図
【図４】図３で１ステージ遅らせるための後続するＣＣ読出命令のマルチフロー展開による命令操作の説明図
【図５】本発明によるＣＣリネーミングマップの更新処理の説明図
【図６】本発明によるＣＣリネーミングマップの参照処理の説明図
【図７】本発明によるＣＣデータのフォーワード制御の判断処理の説明図
【図８】本発明によるＣＣデータのリザベーションステーションへの書込み処理の説明図
【図９】レジスタデータのリネーミングマップの更新処理の説明図
【図１０】レジスタデータのリネーミングマップの参照処理の説明図
【図１１】レジスタデータのフォーワード制御の判断処理の説明図
【図１２】従来のＣＣリネーミングマップの更新処理の説明図
【符号の説明】
１０：命令フェッチ部
１２：命令キャッシュ
１４：分岐予測部
１６：命令発行部
１８，１８−１〜１８−４：命令語レジスタ
２０：リネーミング処理部
２２：ＣＣリネーミング処理部
２４：リザベーションステーション処理部
２６−１〜２６−５：リザベーションステーション
２８：命令実行部
３０−１，３０−２：固定小数点演算部
３２−１，３２−２：浮動小数点演算部
３４：ロード／ストア演算部
３６：ストアバッファ
３８：データキャッシュ
４０：レジスタファイル
４２：コミットスタックエントリ
４４：汎用レジスタファイル
４５：リソースモニタ
４６：レジスタ更新バッファ（ＲＵＢ）
４８：ＣＣ更新命令
５０：ＣＣ読出命令
５２：ＣＣリネーミングマップ更新処理部
５４：ＣＣリネーミングマップ参照処理部
５５：マルチフロー命令語レジスタ
５６：バイパス制御判断部（フォーワード制御判断部）
５８：フォーワード制御準備完了通知
６０：ＣＣデータ書込み処理部
６２：ネーミングマップ
６４：更新保留中ビット
６６：バッファ割当アドレス
７０：ＣＣリネーミングマップ
７２：ＣＣ更新保留中ビット
７４：ＣＣバッファ割当アドレス
７５：第１ソースレジスタ領域
７６：バリッドビット
７８：Ｒ１更新バッファ割当アドレス
８０：Ｒ１ぺンディングビット
８２：Ｒ１更新バッファ割当アドレス
８４：Ｒ１レディビット
８６，１０２：命令操作
９０：バリッドビット
９２：書込レジスタ割当ビット
９４：レジスタ更新バッファ割当ビット
９６：書込レジスタアドレス
９８：更新バッファ割当アドレス
１００：演算完了待ちビット
１０４：ＣＣレジスタ書込ビット
１０６：ＣＣデータ
１０８：ＣＣ更新保留中ビット
１１０：ＣＣ更新バッファ割当アドレス
１１２：ＣＣレディビット
１１４：演算結果の更新バッファ割当アドレス
１１６、１２２：マッチング処理部
【図１】
2004038753.tif 000003
【図２】
2004038753.tif 000004
【図３】
2004038753.tif 000005
【図４】
2004038753.tif 000006
【図５】
2004038753.tif 000007
【図６】
2004038753.tif 000008
【図７】
2004038753.tif 000009
【図８】
2004038753.tif 000010
【図９】
2004038753.tif 000011
【図１０】
2004038753.tif 000012
【図１１】
2004038753.tif 000013
【図１２】
2004038753.tif 000014
【手続補正書】
【提出日】平成15年2月17日(2003.2.17)
【手続補正１】
【補正対象書類名】明細書
【補正対象項目名】請求項３
【補正方法】変更
【補正の内容】
【請求項３】
請求項２記載のプロセッサに於いて、前記リネーミングマップ参照処理部は、前記リザベーションステーションの先行命令割当エントリにおけるソースレジスタの更新保留中ビットとリネーミングレジスタ番号の領域に、前記コンディションコード用リネーミングマップに登録している先行命令の更新保留中ビットとコンディションコード用リネーミングレジスタのレジスタ番号を格納することを特徴とするプロセッサ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】請求項６
【補正方法】変更
【補正の内容】
【請求項６】
フェッチしてデコードした命令をインオーダーでリザベーションステーションに発行する命令発行部と、前記リザベーションステーションに保持された命令をアウトオブオーダーで実行する命令実行部と、前記命令実行部で実行した命令の確定を判別してインオーダーで完了させる確定部とを備えたプロセッサの命令制御方法に於いて、
命令フェッチ部により、先行命令となるコンデションコード更新命令と後続命令となるコンデションコード読出命令を含む複数命令を同時に命令発行部にフェッチする命令フェッチステップと、
リネーミングマップ更新処理部により、前記先行命令のデコードステージで、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、前記リネーミングレジスタのレジスタ番号を含むコンディションコード情報をコンディションコード用リネーミングマップに登録するリネーミングマップ更新ステップと、
リネーミングマップ参照処理部により、前記後続命令をマルチフロー展開し、前記先行命令と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次の前記後続命令のデコードステージで、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に、前記コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納するリネーミングマップ参照ステップと、
フォーワード制御判断部により、前記先行命令のプライオリティステージで、実行結果のリネーミングアドレス番号と前記リザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に前記命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させるフォーワード制御判断ステップと、
コンディションデータ書込処理部により、先行命令の更新ステージで、先行命令の実行結果として得られたコンディションコードデータを、前記リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に格納するコンディションデータ書込ステップと、
を備えたことを特徴とする命令制御方法。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００２
【補正方法】変更
【補正の内容】
【０００２】
【従来の技術】
従来、動的パイプラインスケジュールを実行するプロセッサにあっては、プログラム順序に依存したインオーダーの命令発行部、プログラムの順番に依存しないアウトオブオーダーの命令実行部、更に、プログラム順序に依存したインオーダーの確定部（コミット部）という３つに分かれて処理を実行する。


【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００２０
【補正方法】変更
【補正の内容】
【００２０】
図１０において、命令語レジスタ２１８−２の命令を後続のレジスタ読出命令とすると、後続命令は読出ソースとなるレジスタのアドレス例えばアドレス「ＲＥＧ０」によりリネーミングマップ２６２を参照し、そのペンディングビット２６４及び割当アドレス２６６によって、リザベーションステーション２２６の先行命令の割当エントリ２２６−１１における第１ソースレジスタアドレス２７８及びＲ１更新バッファ割当アドレス２８２を参照する。この先行命令の実行結果の参照により、図１１のような後続命令に対するフォーワード制御を行うことができる。


【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００２９
【補正方法】変更
【補正の内容】
【００２９】
リザベーションステーション２２６の割当エントリ２２６−１１は、第１ソースレジスタ領域２７５に続いてＣＣソースレジスタ領域３３４を追加している。図示しない第２ソースレジスタ領域についてもＣＣソースレジスタ領域を追加している。


【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】００３０
【補正方法】変更
【補正の内容】
【００３０】
ＣＣソースレジスタ領域３３４には、ＣＣペンディングビット３２６、ＣＣ更新バッファ割当アドレス３２８及びＣＣバイパスレディビット（フォーワードレディビット）３３０及びＣＣデータ領域３３２が設けられる。


【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】００３４
【補正方法】変更
【補正の内容】
【００３４】
【課題を解決するための手段】
しかしながら、同時に複数命令のデコードを行うプロセッサにあっては、デコードサイクルでのリネーミングにおいて、前のサイクルまでのリネーミング履歴を登録してあるリネーミングマップを参照するだけでなく、同時にデコードされた命令のうち、自身より前の命令との依存関係をみてリネーミングする必要がある。


【手続補正８】
【補正対象書類名】明細書
【補正対象項目名】００４０
【補正方法】変更
【補正の内容】
【００４０】
このようなプロセッサにつき本発明は、命令フェッチ部、ＣＣリネーミングマップ更新処理部５２、リネーミングマップ参照処理部５４及びコンディションコードデータ書込処理部６０を備える。


【手続補正９】
【補正対象書類名】明細書
【補正対象項目名】００４２
【補正方法】変更
【補正の内容】
【００４２】
リネーミングマップ参照処理部５４は、ＣＣ読出命令（後続命令）５０をマルチフロー展開し、ＣＣ更新命令（先行命令）４８と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次のＣＣ読出命令（後続命令）５０のデコードステージＤ２で、リザベーションステーション２６に格納した先行命令割当エントリ２６−１１の第１ソースレジスタ領域７５に、ＣＣリネーミングマップ７０に登録しているＣＣ更新命令（先行命令）４８のコンディションコード情報を格納する。


【手続補正１０】
【補正対象書類名】明細書
【補正対象項目名】００４８
【補正方法】変更
【補正の内容】
【００４８】
ここで、ＣＣリネーミングマップ更新処理部５２は、コンディションコード更新命令に割り当てたリネーミングレジスタのレジスタ番号と共に更新保留中ビットをコンディションコード用リネーミングマップ７０に格納する。


【手続補正１１】
【補正対象書類名】明細書
【補正対象項目名】００４９
【補正方法】変更
【補正の内容】
【００４９】
ＣＣリネーミングマップ参照処理部５４は、リザベーションステーション２６の先行命令割当エントリ２６−１１におけるソースレジスタの更新保留ビットとリネーミングレジスタ番号の領域に、ＣＣリネーミングマップ７０に登録している先行命令のＣＣ更新保留中ビット７２とコンディションコード用リネーミングレジスタのＣＣ更新バッファ割当アドレス（レジスタ番号）７４を格納する。


【手続補正１２】
【補正対象書類名】明細書
【補正対象項目名】００５０
【補正方法】変更
【補正の内容】
【００５０】
バイパス制御判断部（フォーワード制御判断部）５６は、先行命令実行結果のリネーミングアドレス番号とリザベーションステーション２６の先行命令割当エントリにおけるリネーミングレジスタ番号をＣＣ更新保留中ビットが立っていることを条件に比較し、両者が一致した際にリザベーションステーション２６の先行命令割当エントリ２６−１１におけるソースレジスタのバイパスレディ領域にコンディションコード用バイパスレディビットを立て、コンディションコード用バイパスレディビットに基づいて、命令実行部に後続命令のコンディションデータのフォーワード制御の準備が整ったことを通知する。


【手続補正１３】
【補正対象書類名】明細書
【補正対象項目名】００５３
【補正方法】変更
【補正の内容】
【００５３】
この命令制御方法は、
命令フェッチ部により、先行命令となるＣＣ更新命令と後続命令となるＣＣ読出命令を含む複数命令を同時に命令発行部にフェッチする命令フェッチステップと、
ＣＣリネーミングマップ更新処理部５２により、先行命令となるコンディションコード更新命令のデコードステージで、命令確定まで更新データを保持するリネーミングレジスタを割当てた際に、リネーミングレジスタのレジスタ番号を含むコンディションコード情報をコンディションコード用リネーミングマップに登録するリネーミングマップ更新ステップと、
ＣＣリネーミングマップ参照処理部５４により、後続命令をマルチフロー展開して先行命令と同じデコードステージをノーオペレーションとしてマルチフロー命令語レジスタに転送して保持し、次の後続命令のデコードステージで、リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に、コンディションコード用リネーミングマップに登録している先行命令のコンディションコード情報を格納するリネーミングマップ参照ステップと、
バイパス制御判断部（フォーワード制御判断部）５６により、先行命令のプライオリティステージで、実行結果のリネーミングアドレス番号とリザベーションステーションの先行命令割当エントリにおけるリネーミングレジスタ番号を比較し、両者が一致した際に命令実行部に後続命令に対するコンディションデータのフォーワード制御の準備が整ったことを通知して実行させるフォーワード制御判断ステップと、
ＣＣデータ書込処理部６０により、先行命令の更新ステージで、先行命令の実行結果として得られたコンディションコードデータを、リザベーションステーションに格納した先行命令割当エントリのソースレジスタ領域に格納するコンディションデータ書込ステップと、
を備えたことを特徴とする。尚、この命令制御方法の詳細は、プロセッサの場合と基本的に同じになる。


【手続補正１４】
【補正対象書類名】明細書
【補正対象項目名】００６２
【補正方法】変更
【補正の内容】
【００６２】
また命令キャッシュ１２及びデータキャッシュ３８は、ＳＰＡＲＣ命令アーキテクチャに対応した図示しないインタフェースからシステムコントローラを介してメモリに接続されている。


【手続補正１５】
【補正対象書類名】明細書
【補正対象項目名】００６４
【補正方法】変更
【補正の内容】
【００６４】
リザベーションステーション処理部２４は、例えば５つのリザベーションステーション２６−１〜２６−５を備えており、予め定めた関係にある空きのあるリザベーションステーションに対し命令を格納する。


【手続補正１６】
【補正対象書類名】明細書
【補正対象項目名】００７７
【補正方法】変更
【補正の内容】
【００７７】
通常のレジスタ更新命令に対するレジスタリネーミングは、図２のリネーミング処理部で行われ、その詳細は、図９〜図１１と同じになる。しかし、本発明にあっては、ＣＣリネーミング処理部２２によるＣＣ情報のリザベーションステーションへの格納につき、ソースレジスタ領域を流用することから、図１２のように追加したＣＣ専用のＣＣソースレジスタ領域３３４をリザベーションステーションに持たない。


【手続補正１７】
【補正対象書類名】明細書
【補正対象項目名】００８０
【補正方法】変更
【補正の内容】
【００８０】
先行するＣＣ更新命令４８は、デコードステージＤ１、プライオリティステージＰ１、バッファストアサイクルとして知られたバッファステージＢ１、実行ステージＸ１、更新ステージＵ１、更に書込ステージＷ１の処理を順次行う。なお、デコードステージＤ１の内の後ろの２ステージは、リザベーションステーションでプライオリティがとれないサイクルを示す。


【手続補正１８】
【補正対象書類名】明細書
【補正対象項目名】００８１
【補正方法】変更
【補正の内容】
【００８１】
一方、後続するＣＣ読出命令５０は、マルチフロー展開により１ステージ遅れて、デコードステージＤ２、プライオリティステージＰ２、バッファステージＢ２、実行ステージＸ２、更新ステージＵ２、更に図示しない書込ステージＷ２の順に処理される。なお、デコードステージＤ２の内の後ろの２ステージは、リザベーションステーションでプライオリティがとれないサイクルを示す。


【手続補正１９】
【補正対象書類名】明細書
【補正対象項目名】００８２
【補正方法】変更
【補正の内容】
【００８２】
図４は後続するＣＣ読出命令５０のマルチフロー展開による命令操作の説明図である。いま図４（Ａ）のように、命令語レジスタ１８−１，１８−２に、先行するＣＣ更新命令４８と後続するＣＣ読出命令５０がフェッチされた場合、デコードステージＤ１では、先行するＣＣ更新命令４８がリザベーションステーション処理部２４に発行される。これに対し後続するＣＣ読出命令５０はマルチフロー展開され、最初のステージはＮＯＰ（ノーオペレーション）としてデコードによる命令発行は行わず、マルチフロー展開による先行フロー（ファーストフロー）の命令操作として、ＣＣ読出命令５０をマルチフロー命令語レジスタ５５に転送して格納する。このため最初のステージでは、先行するＣＣ更新命令４８のデコードによるＣＣリネーミングマップ更新処理のみが行われる。


【手続補正２０】
【補正対象書類名】明細書
【補正対象項目名】００８３
【補正方法】変更
【補正の内容】
【００８３】
次のステージでは図４（Ｂ）のように、マルチフロー展開した後続フロー（セカンドフロー）の命令操作により、マルチフロー命令語レジスタ５５に格納したＣＣ読出命令のデコードステージＤ２となってリザベーションステーション処理部２４に発行され、このとき他の命令の発行はない。このため先行するＣＣ更新命令４８のデコードから分離して後続するＣＣ読出命令５０によるＣＣリネーミングマップ読出処理のみが行われる。


【手続補正２１】
【補正対象書類名】明細書
【補正対象項目名】００９０
【補正方法】変更
【補正の内容】
【００９０】
同時にコミットスタックエントリ４２には割当エントリ４２−１１が確保され、更にリザベーションステーション２６に、命令語レジスタ１８−１にフェッチされてデコードされたＣＣ更新命令が発行されて割当エントリ２６−１１が確保される。


【手続補正２２】
【補正対象書類名】明細書
【補正対象項目名】００９９
【補正方法】変更
【補正の内容】
【００９９】
図８は、図３の先行するＣＣ更新命令４８の更新ステージＵ１におけるＣＣデータ書込処理部６０の処理の詳細である。この図８のＣＣデータ書込処理は、図６のフォーワード制御判断の場合と同様、先行命令の実行結果として得られた演算結果の更新バッファ割当アドレス１１４をマッチング処理部１２２に入力し、このときのリザベーションステーション２６の割当エントリ２６−１１のＣＣ更新バッファ割当アドレス１１０と比較し、両者が一致した場合には、データバスにより得られている演算結果のＣＣデータ１２６をリザベーションステーション２６の割当エントリ２６−１１に既に格納したＣＣレディビット１１２に続く第２ソースレジスタ領域の先頭部分の領域を利用して、ＣＣデータ１２４に格納する。


【手続補正２３】
【補正対象書類名】明細書
【補正対象項目名】０１００
【補正方法】変更
【補正の内容】
【０１００】
一方、リザベーションステーション２６における先行命令に割り当てられた割当エントリ２６−１１に格納されるＣＣデータ１２４は、図３のＣＣ更新命令４８の実行ステージＸ１で後続するＣＣ読出命令を実行する演算器に直接フォーワードされており、このＣＣデータを用いて、後続するＣＣ読出命令５０の演算を実行ステージＸ２で実行している。


【手続補正２４】
【補正対象書類名】明細書
【補正対象項目名】図面の簡単な説明
【補正方法】変更
【補正の内容】
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】ＣＣデータのリザベーションステーションへの格納制御を行う本発明によるプロセッサのハードウェア構成のブロック図
【図３】本発明のＣＣデータ格納処理が行われるパイプラインステージの説明図
【図４】図３で１ステージ遅らせるための後続するＣＣ読出命令のマルチフロー展開による命令操作の説明図
【図５】本発明によるＣＣリネーミングマップの更新処理の説明図
【図６】本発明によるＣＣリネーミングマップの参照処理の説明図
【図７】本発明によるＣＣデータのフォーワード制御の判断処理の説明図
【図８】本発明によるＣＣデータのリザベーションステーションへの書込み処理の説明図
【図９】レジスタデータのリネーミングマップによる更新処理の説明図
【図１０】レジスタデータのリネーミングマップの参照処理の説明図
【図１１】レジスタデータのフォーワード制御の判断処理の説明図
【図１２】従来のＣＣリネーミングマップの更新処理の説明図