(57)【特許請求の範囲】
【請求項１】
命令デコーダと、この命令デコーダからのオペランドを実行する複数の実行ユニットと、前記命令デコーダからのオペランドを実行ユニットへ与えるオペランドバスと、を備え、前記命令デコーダからのオペランドをオペランドバス制御回路で調整してオペランドバスへ与えるスーパスカラ型プロセッサのオペランドバス調整方法であって、
前記命令デコーダは、命令コードを読み取り、各命令の要求するオペランドバスの数を、オペランドバス制御回路に伝達する手段を有し、オペランドバス制御回路は、命令１個の持つオペランドの最大数をｎとするとき、同時に発行されようとする命令群のうち最も先行するべき第１の命令については、ｎ本のオペランドバスを優先使用権を割り当て、第１の命令の直後の命令については、順次ｎ本のオペランドバスに順次優先使用権を割り当て、オペランドバスの優先使用権の割り当てのない命令については、既に他の命令のために割り当てられた全てのオペランドバスのうちオペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権をオペランドバスの割り当てのない命令に再配分することを特徴とするスーパースカラ型プロセッサのオペランドバス調整方法。
【請求項２】
命令デコーダと、この命令デコーダからのオペランドを実行する複数の実行ユニットと、前記命令デコーダからのオペランドを実行ユニットへ与えるオペランドバスと、を備えたスーパスカラ型プロセッサであって、
前記命令デコーダは、命令コードを読み取り、各命令のオペランドをオペランドバス制御回路に与えるとともに、各命令の要求するオペランドバスの数を算出し、オペランドバスコントロール信号をオペランドバス制御回路へ与え、
前記オペランドバス制御回路は、命令デコーダから与えられるオペランドバスコントロール信号に基づき、命令１個の持つオペランドの最大数をｎとするとき、同時に発行されようとする第１の命令については、ｎ本のオペランドバスを優先使用権を割り当て、第１の命令の直後の命令については、順次ｎ本のオペランドバスを優先使用権を割り当て、オペランドバスの優先使用権の割り当てのない命令については既に他の命令のために割り当てられた全てのオペランドバスのうちオペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権をオペランドバスの割り当てのない命令に再配分し、前記命令デコーダからのオペランドをオペランドバス制御回路で調整してオペランドバスに与えることを特徴とするスーパスカラ型プロセッサ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、スーパスカラ型プロセッサに関し、特に、スーパースカラ型プロセッサにおける複数命令を同時発行するためのオペランドバスの割り当てに関する。
【０００２】
【従来の技術】
マイクロプロセッサの設計は、常に処理性能と効率の向上を図る努力がなされてきた。スーパースカラ型プロセッサは、マイクロプロセッサの進化の１ステップとして実現化されている技術である。スーパースカラ型プロセッサは、命令の並列性に着目し処理効率を向上させる技術である。スーパースカラ型プロセッサでは、同時に複数個の命令の読み込み、デコード、発行、演算を行うことで、同じパイプラインステージでは同時に１個の命令しか処理できないスカラ型プロセッサより、高い処理能力を実現することができる。
【０００３】
ところで、スーパースカラ型プロセッサでは、パイプラインの各ステージで複数個の命令が同時に処理することができるよう、各処理ステージにおける装置が複数備えられ、またそれらにデータを転送するバスも複数個必要である。
【０００４】
また、命令を読み込み、実行ユニットに命令を与える命令デコーダにおいては、命令発行可能な命令数を検出する機能が備えられる。これは種々の制限により、常に最大個数の命令を発行できるとは限らないからである。命令発行数に制限を与える可能性としては、プロセッサの構成に依存する部分であるが、実行ユニットの不足、リオーダバッファの空きエントリの不足、ある種の分岐命令の実行などが考えられる。
【０００５】
ここでいう実行ユニットの不足とは、例えば加算命令を実行できる実行ユニットが１個しかないときには、同時には１個の加算命令しか処理できないので、２個以上の同時命令発行はできないということである。
【０００６】
この問題については、リザベーションステーションを設け、ここに発行した命令処理をスケジユーリングしておき、以降のサイクルで実行するという手段も実用化されているが、この場合は、リザベレションステーションに登録できる命令数が有限であることによる発行命令の制限となる。
【０００７】
また、リオーダバッファの空きエントリの不足とは、アウト・オブ・オーダーの技術を導入した際、バラバラの順序で実行された命令の結果をレジスタファイルに格納する時には、もとの命令の順序に並べ直さなければならないが、その機能を果たすリオーダバッファの登録し得る命令数が有限であることによる制限である。
【０００８】
また、ここでいうある種の分岐命令とは、たとえばレジスタ間接の分岐命令（レジスタにジャンプ先のプログラムアドレスが格納されている命令）では、分岐予測による実行ができないため、この命令によるプログラムのジャンプ先が決定するまで、以後の命令を発行できないという制限である。
【０００９】
このように、スーパースカラ型プロセッサでは命令の発行部分（命令デコーダが兼ねることが多い）は、同時発行できる命令数に影響を与える情報を収集し、命令発行数を決定しなければならない。
【００１０】
スーパースカラ型プロセッサでは同時に複数の命令を処理するため、同時に１個の命令しか処理できないスカラプロセッサより、回路規模が大規模にならざるを得ない。例えば、命令デコーダについては、スカラ型プロセッサでは１個ですむところでも、スーパースカラ型プロセッサでは、同時に発行する命令の個数だけ必要となる。４命令同時発行のスーパースカラ型プロセッサでは、同じデコーダが４個必要になる。
【００１１】
一般的にプロセッサの命令は、データを演算処理したり、データを基準に動作を決定するなどの機能を果たしている。データを必要とする命令は、オペランドというデータの所在を指定する機能を持っている。オペランドは、大きく分類すると３種類に別れる。「プロセッサ内部のレジスタ」、「即値」、「メモリ」である。「メモリ」上のデータは、命令を発行する段階では、プロセッサの内部にはなく、ほかの「プロセッサ内部のレジスタ」、「即値」と比べると特殊である。近年のＲＩＳＣ型のプロセッサでは「メモリ」に存在するデータは、一部の特殊な命令のみの取り扱いに限定しているほどである。残る「プロセッサ内部のレジスタ」、「即値」が一般的に命令のオペランドとして頻繁に登場すると考えても差し支えない。従って、この明細書においては、以降、オペランドとは、「プロセッサ内部のレジスタ」または「即値」によって示されるものとする。
【００１２】
オペランドとして「プロセッサ内部のレジスタ」が指定される場合、レジスタ番号なるコードで指定される。通常のプロセッサにおいては、レジスタは複数あり、それらをまとめてレジスタファイルという装置を形成する。レジスタファイルから、オペランドとなるデータを取り出すときは、レジスタファイルにレジスタ番号を指示することで、所望のデータを得る。
【００１３】
オペランドとして「即値」を用いる場合、「即値」とは命令コード中にデータが格納されており、命令コードの一部を抽出し、必要に応じて拡張などの処理を施して、演算用のデータとする。即値は命令コードから抽出されるので、命令デコードを行う装置（命令デコーダ）から出現する。
【００１４】
また、命令が最大いくつのオペランドを必要とするかは、ここでは重要な問題となる。例えば、１命令あたり最大２個のオペランドを必要とする場合、２個のオペランドが揃わない状態では命令の発行が不可能である。スーパースカラ型プロセッサの場合、同時に複数の命令を発行するので、オペランドについても同時に必要となる。すなわち、たとえば同時に４命令が発行可能なスーパースカラ型プロセッサで、各命令が最大２個のオペランドを必要とした場合、同時に合計で最大８個のオペランドを必要とする。
【００１５】
同時に発行される命令が多ければ命令デコーダだけでなく、データを転送するためのバスについても多く必要となる。例えば、ソースオペランドを２個指定することが可能な命令形式を有するプロセッサを考えた場合、これが同時に４命令発行されるときには、最大で８個のソースオペランドが必要になるため、８本のオペランドバスを用意しなければならない。
【００１６】
上記のようにソースオペランドを２個指定することが可能な命令形式を有し、同時に４命令発行する例に基づいたプロセッサの構成例を図３に示す。
【００１７】
命令デコーダ１は、この例では、４命令分の命令コードを受け取り、デコードを実行する。この命令レコーダ１にて４命令の命令ごとのオペランドを知ることができる。この例における同時にデコードされる４命令は、第１の命令を「命令０」、第２の命令を「命令１」、第３の命令を「命令２」、第４の命令を「命令３」と呼び、プログラムとしては、第１の命令から順に実行すべき順序としているものとする。また、この命令デコーダ１は、各命令のオペランド情報を後述するオペランドバス制御回路３へ与える。
【００１８】
そして、オペランドが即値の場合は、即値のデータが即値のデータバス１１を経由して、オペランドバス制御回路３へ導かれる。このバス１１は、４命令の２個のオペランドにすべて即値の可能性があるため、合計８本のバスとなる。プロセッサの命令の形態によっては即値のオペランドは、１個に限るかもしれないし、その場合はバスは４本となるが、ここはどちらでも特に問題ではない。
【００１９】
オペランドがレジスタであるときは、指定されるレジスタ番号が、レジスタ番号バス１３を経て、レジスタファイルおよびリオーダバッファ２へと伝えられる。そして、レジスタ番号によって指定されたレジスタからデータを読み出し、データ、またはリネーミングしたレジスタ名のバス１２を経てオペランドバス制御回路３へ導かれる。これらレジスタ番号バス１３とデータ、またはリネーミングしたレジスタ名のバス１２は、４命令の２個のオペランドにすべて即値の可能性があるため、合計８本のバスとなる。
【００２０】
この例において、レジスタファイルを、レジスタファイルおよびリオーダバッファ２としたのは、アウト・オブ・オーダーによる命令実行を可能とするスーパースカラ型プロセッサでは、リオーダバッファを備えており、この中にレジスタファイルへ格納する予定の結果データ、あるいはレジスタの内容が書きかえられることを示している場合があるからである。すなわち、レジスタファイルへ格納する予定の結果データがあるならば、レジスタファイルの内容より、リオーダバッファの中の結果データの方が正しいので、こちらをデータとして使用する必要があり、また、レジスタの内容が書きかえられることを示している場合、レジスタリネーミングという技術で最初のレジスタ名とは異なる仮のレジスタ名をリオーダバッファから伝えられるからである。この仮のレジスタ名は、そのまま実行部１０−１…へ伝えられ、実行部１０−１…で真のデータの到着を待つことになる。
【００２１】
レジスタファイルからデータを伝えられる場合にせよ、リオーダバッファからデータ、あるいは仮のレジスタ名が与えられる場合にせよ、オペランドバス制御回路３へは４命令分８本のバスが備わることになる。
【００２２】
オペランドバス制御回路３では、各命令のオペランド情報を命令デコーダ１から受け取る。これは各命令のオペランドが即値であるか、レジスタ名であるかを示す。オペランドバス制御回路３ではこの信号を基に、オペランドごとに即値かレジスタ名かを選択する。
【００２３】
オペランドバス制御回路３では、命令デコーダ１から与えられた「各命令のオペランド情報」に従って「即値」か「レジスタ中のデータまたはリネーミングされたレジスタ名」から正しいオペランドを選択し、オペランドバス１４に出力する。オペランドバス１４は、合計して８本である。
【００２４】
各実行ユニット１０−１…では、その装置で実行する命令に応じたオペランドとして、オペランドバスから「即値」か「レジスタ中のデータまたはリネーミングされたレジスタ名」を受け取る。そして、各実行ユニット１０−１…で命令が実行される。
【００２５】
図４に上記したオペランドバス制御回路の具体的構成例を示す。
図４に示す１０１Ａ、１０２Ａ、１１１Ａ、１１２Ａ、１２１Ａ、１２２Ａ、１３１Ａ、１３２Ａは、命令デコーダ１から伝送される即値のバスである。それぞれ命令０の第１オペランドとしての即値、命令０の第２オペランドとしての即値、命令１の第１オペランドとしての即値、命令１の第２オペランドとしての即値、命令２の第１オペランドとしての即値、命令２の第２オペランドとしての即値、命令３の第１オペランドとしての即値、命令３の第２オペランドとしての即値が伝送される。
【００２６】
図４に示す１０１Ｂ、１０２Ｂ、１１１Ｂ、１１２Ｂ、１２１Ｂ、１２２Ｂ、１３１Ｂ、１３２Ｂは、レジスタファイルおよびリオーダバッファ２から伝送される「レジスタ中のデータあるいはリネーミングされたレジスタ名」のバスである。それぞれ命令０の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令０の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令１の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令１の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令２の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令２の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令３の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令３の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名が伝送される。
【００２７】
図４に示す１０１Ｃ、１０２Ｃ、１１１Ｃ、１１２Ｃ、１２１Ｃ、１２２Ｃ、１３１Ｃ、１３２Ｃは、命令デコーダ１から伝送される各命令のオペランド情報である。このオペランド情報は命令デコーダ１から「即値」または「レジスタ名」に対応する情報である。そして、それぞれ第１の命令の第１オペランドとしての情報、命令０の第２オペランドとしての情報、命令１の第１オペランドとしての情報、命令１の第２オペランドとしての情報、命令２の第１オペランドとしての情報、命令２の第２オペランドとしての情報、命令３の第１オペランドとしての情報、命令３の第２オペランドとしての情報が伝送される。
【００２８】
図４に示す１０１、１０２、１１１、１１２、１２１、１２２、１３１、１３２は選択器であり、それぞれの受信する各命令のオペランド情報により選択先を切り替える。すなわち、オペランド情報が「即値」のときは「即値」を選択し、オペランド情報が「レジスタ」のときは「レジスタ中のデータまたはリネーミングされたレジスタ名」を選択する。
【００２９】
図４に示す２００、２０１、２０２、２０３、２０４、２０５、２０６、２０７は、前述した選択器１０１、１０２、１１１、１１２、１２１、１２２、１３１、１３２で選択された結果であり、オペランド情報により選択されこれをオペランドとしてオペランドバス１４から実行部の各ユニット１０−１〜１０−ｎに転送される。
【００３０】
【発明が解決しようとする課題】
上記のように、４命令のスーパースカラ型プロセッサは構成されるが、前述の理由によりなんらかの制限のため３命令しか発行できなかったとすると、その時必要なオペランドバスは、最大でも６本あれば足りることになる。
【００３１】
また、命令にはソースオペランドが０個あるいは１個ですむ命令が考えられるので、４命令同時に発行されても、８本という最大数のオペランドバスを必要としない可能性がある。
【００３２】
常に最大数を必要とするとは限らないオペランドバスを、最大数備えることによる回路規模の増大、コストアップという問題が考えられる。
【００３３】
そこで、オペランドバスの数を絞り込んでコストの上昇を抑えることが考えられる。上記例では本来８本必要なオペランドバスを、６本しか配備しない。実使用レベルにおいて、これが原因で下降する能力は無視できるほど小さいか、コストの上昇を抑えられた効果に比べ能力の下降が小さい場合が多いため、効果がある。
【００３４】
しかしながら、問題となるのは、本来８本あれば各命令に不足なくあてがわれるオペランドバスを、６本しか配備していないオペランドバスに対して、命令の内容に応じて、また命令の優先順位に応じて合理的に配分し、かつ動作速度の早い方法が必要とされることである。一般的に、優先順位を含んだ回路は、動作速度が遅くなる傾向がある。
【００３５】
この発明は、上記した問題に鑑みなされたものにして、オペランドバスの調整回路の単純化と回路規模の縮小が図れるスーパースカラ型プロセッサのオペランドバス調整方法を提供することを課題とする。
【００３６】
【課題を解決するための手段】
この発明は、命令デコーダと、この命令デコーダからのオペランドを実行する複数の実行ユニットと、前記命令デコーダからのオペランドを実行ユニットへ与えるオペランドバスと、を備え、前記命令デコーダからのオペランドをオペランドバス制御回路で調整してオペランドバスへ与えるスーパスカラ型プロセッサのオペランドバス調整方法であって、前記命令デコーダは、命令コードを読み取り、各命令の要求するオペランドバスの数を、オペランドバス制御回路に伝達する手段を有し、オペランドバス制御回路は、命令１個の持つオペランドの最大数をｎとするとき、同時に発行されようとする命令群のうち最も先行するべき第１の命令については、ｎ本のオペランドバスを優先使用権を割り当て、第１の命令の直後の命令については、順次ｎ本のオペランドバスに順次優先使用権を割り当て、オペランドバスの優先使用権の割り当てのない命令については、既に他の命令のために割り当てられた全てのオペランドバスのうちオペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権をオペランドバスの割り当てのない命令に再配分することを特徴とする。
【００３７】
また、この発明は、命令デコーダと、この命令デコーダからのオペランドを実行する複数の実行ユニットと、前記命令デコーダからのオペランドを実行ユニットへ与えるオペランドバスと、を備えたスーパスカラ型プロセッサであって、前記命令デコーダは、命令コードを読み取り、各命令のオペランドをオペランドバス制御回路に与えるとともに、各命令の要求するオペランドバスの数を算出し、オペランドバスコントロール信号をオペランドバス制御回路へ与え、前記オペランドバス制御回路は、命令デコーダから与えられるオペランドバスコントロール信号に基づき、命令１個の持つオペランドの最大数をｎとするとき、同時に発行されようとする第１の命令については、ｎ本のオペランドバスを優先使用権を割り当て、第１の命令の直後の命令については、順次ｎ本のオペランドバスを優先使用権を割り当て、オペランドバスの優先使用権の割り当てのない命令については既に他の命令のために割り当てられた全てのオペランドバスのうちオペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権をオペランドバスの割り当てのない命令に再配分し、前記命令デコーダからのオペランドをオペランドバス制御回路で調整してオペランドバスに与えることを特徴とする。
【００３８】
上記したように、この発明は、同時に発行される命令の数が、オペランドバスの数の制限によって減少させられるかどうかの判定と、どの命令がどのオペランドバスを使用するかの割り当てについて調整を行う。
【００３９】
そして、この発明においては、オペランドバスの優先使用権を割り当てられた命令については、たとえその中のいくつかの命令が命令の最大要求オペランド数未満のオペランド数しか要求しなかった場合であっても、最初に優先使用割り当てられたオペランドバスを変更せず、使用権の再配分を最初に優先使用権の割り当てがなかった命令にのみ行うことで、各オペランドバスに対する使用権の配分の可能性のある命令を絞り込む。この結果、この調整回路の単純化と回路規模の縮小化が実現ができる。
【００４０】
【発明の実施の形態】
以下、この発明の実施の形態につき図１及び図２を参照して説明する。なお、従来例と同一部分には同一符号を付す。上述した従来例と同様にこの実施の形態におけるプロセッサもソースオペランドを２個指定することが可能な命令形式を有し、同時に４命令発行するものを例として説明する。
【００４１】
図１は、上記例に基づくこの発明の実施の形態に係るプロセッサの構成を示すブロック図である。なお、図１は図３と対象になるように描かれており、特に説明のない部分については共通の部分としている。
【００４２】
図１が図３と大きく異なるのは、命令デコーダ１ａとオペランドバス制御回路３ａとの間に、１種類の信号が追加されたことと、オペランドバス制御回路３ａから実行ユニット１０−１…へ伸びているオペランドバス１４ａの数が少なくなったことである。
【００４３】
命令デコーダ１ａは、前述した従来例と同様に４命令分の命令コードを受け取り、デコードを実行する。この命令デコーダ１ａにて、４命令の命令ごとのオペランドを知ることができる。同時にデコードされる４命令は、第１の命令を「命令０」、第２の命令を「命令１」、第３の命令を「命令２」、第４の命令を「命令３」と呼び、プログラムとしては、第１の命令から順に実行すべき順序としているものとする。
【００４４】
この発明における命令デコーダ１ａは、命令コードを読み取り、各命令の要求するオペランドバスの数を、オペランドバス制御回路３ａに伝達するためのオペランドバスコントロール信号を出力する。このオペランドバスコントロール信号の生成については後述する。
【００４５】
そして、オペランドが「即値」の場合は、即値のデータが即値のデータバス１１を経由して、オペランドバス制御回路３ａへ導かれる。このバスは、４命令の２個のオペランドにすべて即値の可能性があるため、合計８本のバスとなる。プロセッサの命令の形態によっては即値のオペランドは、１個に限るかもしれないし、その場合はバスは４本となるが、ここはどちらでも特に問題ではない。
【００４６】
オペランドがレジスタであるときは、指定されるレジスタ番号が、レジスタ番号バス１３を経て、レジスタファイルおよびリオーダバッファ２へと伝えられ、レジスタ番号によって指定されたレジスタからデータを読み出し、データ、またはリネーミングしたレジスタ名のバス１２を経てオペランドバス制御回路３ａへ導かれる。これらレジスタ番号バスとデータ、またはリネーミングしたレジスタ名のバス１２は、４命令の２個のオペランドにすべて即値の可能性があるため、合計８本のバスとなる。
【００４７】
前述した従来例と同様にこの実施の形態においてもレジスタファイルを、レジスタファイルおよびリオーダバッファ２としている。これは、アウト・オブ・オーダーによる命令実行を可能とするスーパースカラ型プロセッサでは、リオーダバッファを備えており、この中にレジスタファイルへ格納する予定の結果データ、あるいはレジスタの内容が書きかえられることを示している場合があるからである。すなわち、レジスタファイルへ格納する予定の結果データがあるならば、レジスタファイルの内容より、リオーダバッファの中の結果データの方が正しいので、こちらをデータとして使用する必要があり、また、レジスタの内容が書きかえられることを示している場合、レジスタリネーミングという技術で最初のレジスタ名とは異なる仮のレジスタ名をリオーダバッファから伝えられる。この仮のレジスタ名は、そのまま実行部へ伝えられ、実行部で真のデータの到着を待つことになる。
【００４８】
レジスタファイルからデータを伝えられる場合にせよ、リオーダバッファからデータ、あるいは仮のレジスタ名が与えられる場合にせよ、オペランドバス制御回路３ａへは４命令分の８本のバスが備わることになる。
【００４９】
オペランドバス制御回路３ａでは、各命令のオペランド情報を命令デコーダ１ａから受け取る。これは各命令のオペランドが即値であるか、レジスタであるかを示す。オペランドバス制御回路３ａではこの信号を基に、オペランドごとに即値かレジスタかを選択する。
【００５０】
この発明におけるオペランドバス制御回路３ａは、命令デコーダ１からのオペランドバスコントロール信号に基づき、オペランドバスの優先使用権を割り当てる。即ち、命令１個の持つオペランドの最大数をｎとするとき、同時に発行されようとする命令群のうち最も先行するべき先頭の命令（以下、第１の命令）については、ｎ本のオペランドバス、すなわち第１、第２、‥・第ｎのオペランドバスを第１の命令に優先使用権を割り当て、第１の命令の直後の命令（以下、第２の命令）については、ｎ本のオペランドバス、すなわち第（ｎ＋１）、第（ｎ＋２）、‥・第（２ｎ）のオペランドバスを第２の命令に優先使用権を割り当て、第２の命令の直後の命令（以下、第３の命令）については、ｎ本のオペランドバス、すなわち第（２ｎ＋１）、第（２ｎ＋２）、‥・第（３ｎ）のオペランドバスを第３の命令に優先使用権を割り当て、以下同様に全てのオペランドバスの優先使用権を割り当てる。そして、オペランドバスの優先使用権の割り当てのない最後の命令（第ｍの命令）もしくは最後から数個の命令については、既に他の命令のために割り当てられた全てのオペランドバスのうち、オペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権を、オペランドバスの割り当てのない命令に再配分する。
【００５１】
オペランドバス制御回路３ａでは、命令デコーダ１から与えられた「各命令のオペランド情報」及びオペランドバスコントロール信号に従って「即値」か「レジスタ中のデータまたはリネーミングされたレジスタ名」から優先順位従いオペランドバスの使用権に基づき正しいオペランドを選択し、オペランドバスに出力する。この実施の形態におけるオペランドバス１４ａは、合計して６本である。
【００５２】
各実行ユニット１０−１〜１０−ｎでは、その装置で実行する命令に応じたオペランドとして、オペランドバス１４ａから「即値」か「レジスタ中のデータまたはリネーミングされたレジスタ名」を受け取る。
【００５３】
図２にこの発明におけるオペランドバス制御回路３ａの構成例を示す。
図２に示す１０１Ａ、１０２Ａ、１１１Ａ、１１２Ａ、１２１Ａ、１２２Ａ、１３１Ａ、１３２Ａは、命令デコーダから伝送される即値のバスである。それぞれ命令０の第１オペランドとしての即値、命令０の第２オペランドとしての即値、命令１の第１オペランドとしての即値、命令１の第２オペランドとしての即値、命令２の第１オペランドとしての即値、命令２の第２オペランドとしての即値、命令３の第１オペランドとしての即値、命令３の第２オペランドとしての即値である。
【００５４】
同じく図２に示す１０１Ｂ、１０２Ｂ、１１１Ｂ、１１２Ｂ、１２１Ｂ、１２２Ｂ、１３１Ｂ、１３２Ｂは、レジスタファイルおよびリオーダバッファから伝送される「レジスタ中のデータあるいはリネーミングされたレジスタ名」のバスである。それぞれ命令０の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令０の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令１の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令１の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令２の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令２の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令３の第１オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名、命令３の第２オペランドとしてのレジスタ中のデータまたはリネーミングされたレジスタ名である。
【００５５】
図２に示す１０１Ｃ、１０２Ｃ、１１１Ｃ、１１２Ｃ、１２１Ｃ、１２２Ｃ、１３１Ｃ、１３２Ｃは、命令デコーダから伝送される各命令のオペランド情報である。それぞれ第１の命令の第１オペランドとしての情報、命令０の第２オペランドとしての情報、命令１の第１オペランドとしての情報、命令１の第２オペランドとしての情報、命令２の第１オペランドとしての情報、命令２の第２オペランドとしての情報、命令３の第１オペランドとしての情報、命令３の第２オペランドとしての情報である。
【００５６】
図２に示す１０１、１０２、１１１、１１２、１２１、１２２、１３１、１３２は、選択器であり、それぞれの受信する各命令のオペランド情報により選択先を切り替える。すなわち、オペランド情報が「即値」のときは「即値」を選択し、オペランド情報が「レジスタ」のときは「レジスタ中のデータまたはリネーミングされたレジスタ名」を選択する。
【００５７】
図２に示す２００Ｅ、２０１Ｅ、２０２Ｅ、２０３Ｅ、２０４Ｅ、２０５Ｅ、２０６Ｅ、２０７Ｅは、前述の選択器１０１、１０２、１１１、１１２、１２１、１２２、１３１、１３２で選択された結果であり、これがオペランドバ出力選択器３０に転送される。
【００５８】
図２は、従来例を示す図４と基本的には同じである。同じである部分は、図の１０１、１０２、１１１、１１２、１２１、１２２、１３１、１３２の８個の選択器とそれらに入力される信号である。図４では、８個の選択器の出力は直接オペランドバスとなっていたが、図２では、８個の選択器の出力は、６個のオペランドバス出力選択器４００、４０１、４０２、４０３、４０４、４０５で構成されるオペランドバス出力選択器３０に入力されている点が大きく異なる。
【００５９】
６個のオペランドバス出力選択器４００、４０１、４０２、４０３、４０４、４０５は、それぞれオペランドバス２００、２０１、２０２、２０３、２０４、２０５へ出力する。
【００６０】
６個のオペランドバス出力選択器４００、４０１、４０２、４０３、４０４、４０５は、すべて同じ機能を有している。すなわち、３種類の入力バスから１種類を選択し、オペランドバスとして出力する。その選択は、オペランドバスコントロール信号３００、３０１、３０２、３０３、３０４、３０５に従う。オペランドバスコントロール信号３００、３０１、３０２、３０３、３０４、３０５は、命令デコーダ１ａから発信された信号である。
【００６１】
オペランドバス出力選択器４００は、選択器１０１と選択器１３１と選択器１３２のそれぞれの出力結果２００E、２０６E、２０７Eを入力としている。これらはそれぞれ命令０の第１オペランド、命令３の第１オペランド、命令３の第２オペランドであり、それらのうちひとつを選択して、オペランドバス２００への出力としている。これらの選択は、入力信号３００による。入力信号３００は、発信元が図１における命令デコーダ１ａであり、オペランドバス制御回路３ａへは、オペランドバスコントロール信号として伝達される信号のひとつである。
【００６２】
選択先として、命令０の第１オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令０の第１オペランド」の選択を指示する「ob0#i0#s1#use」、「命令３の第１オペランド」の選択を指示する「ob0#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob0#i3#s2#use」、としておく。
【００６３】
同様に、オペランドバス出力選択器４０１は選択先として、命令０の第２オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令０の第２オペランド」の選択を指示する「ob1#i0#s2#use」、「命令３の第１オペランド」の選択を指示する「ob1#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob1#i3#s2#use」を入力３０１として有し、オペランドバス２０１への出力選択とする。
【００６４】
同様に、オペランドバス出力選択器４０２は選択先として、命令１の第１オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令１の第１オペランド」の選択を指示する「ob2#i1#s1#use」、「命令３の第１オペランド」の選択を指示する「ob2#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob2#i3#s2#use」を入力３０２として有し、オペランドバス２０２への出力選択とする。
【００６５】
同様に、オペランドバス出力選択器４０３は選択先として、命令１の第２オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令１の第２オペランド」の選択を指示する「ob3#i1#s2#use」、「命令３の第１オペランド」の選択を指示する「ob3#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob3#i3#s2#use」を入力３０３として有し、オペランドバス２０３への出力選択とする。
【００６６】
同様に、オペランドバス出力選択器４０４は選択先として、命令２の第１オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令２の第１オペランド」の選択を指示する「ob4#i2#s1#use」、「命令３の第１オペランド」の選択を指示する「ob4#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob4#i2#s1#use」を入力３０４として有し、オペランドバス２０４への出力選択とする。
【００６７】
同様に、オペランドバス出力選択器４０５は選択先として、命令２の第２オペランド、命令３の第１オペランド、命令３の第２オペランドの指示を行う信号であり、ここでは「命令２の第２オペランド」の選択を指示する「ob5#i2#s2#use」、「命令３の第１オペランド」の選択を指示する「ob5#i3#s1#use」、「命令３の第２オペランド」の選択を指示する「ob5#i3#s2#use」を入力３０５として有し、オペランドバス２０５への出力選択とする。
【００６８】
次に、オペランドコントロール信号を命令デコーダ１ａで発生する方法について述べる。
【００６９】
命令デコーダ１ａでは、命令を解読することで、命令０、命令１、命令２、命令３の各命令がオペランドを必要としているか否かが判定できる。すなわち、命令０が第１のオペランドを要求する場合、「i0#s1#use」として取り出せ、命令０が第２のオペランドを要求する場合、「i0#s2#use」として取り出せ、命令１が第１のオペランドを要求する場合、「i1#s1#use」として取り出せ、命令１が第２のオペランドを要求する場合、「i1#s2#use」として取り出せ、命令２が第１のオペランドを要求する場合、「i2#s1#use」として取り出せ、命令２が第２のオペランドを要求する場合、「i2#s2#use」として取り出せ、命令３が第１のオペランドを要求する場合、「i3#s1#use」として取り出せ、命令３が第２のオペランドを要求する場合、「i3#s2#use」として取り出せる。
【００７０】
オペランドバスコントロール１ａは、下記の式に従って生成される。
【００７１】
なお、下記の式は次のルールに従って記述されている。
iX#SY#useは、命令Ｘ（Ｘ＝０，１，２，３）がソースオペランドＹ（Ｙ＝１，２）を要求しているときに“１”、要求していないときに“０”を示す。
ObZ#iX#SY#useは、オペランドバスＺ（Ｚ＝０，１，２，３，４，５）への指示信号で、“１”のときには命令Ｘ（Ｘ＝０，１，２，３）のソースオペランドＹ（Ｙ＝１，２）が、そのオペランドバスを使用することを示す。
【００７２】
以下の式においては、右辺の条件で左辺が決定することを示している。また、“＆”は論理積を示し、“｜”は論理和を示し、“！”は論理反転を示している。
【００７３】
・オペランドバス０に対するコントロール信号の生成
ob0#i0#s1#use＝i0#s1#use
ob0#i3#s1#use＝i3#s1#use＆！i0#s1#use
ob0#i3#s2#use＝i3#s2#use＆！i0#s1#use＆！i3#s1#use
【００７４】
・オペランドバス１に対するコントロール信号の生成
ob1#i0#s2#use＝i0#s2#use
ob1#i3#s1#use＝i3#s1#use＆！i0#s2#use＆i0#s1#use
ob1#i3#s2#use＝i3#s2#use＆！i0#s2#use＆（！i3#s1#use＝i0#s1#use）
【００７５】
・オペランドバス２に対するコントロール信号の生成
ob2#i1#s1#use＝i0#s1#use
ob2#i3#s1#use＝i3#s1#use＆！i1#s1#use＆i0#s1#use＆i0#s2#useob2#i3#s2#use＝i3#s2#use＆！i1#s1#use＆（！i3#s1#use｜！(i0#s1#use＆i0#s2#use））
【００７６】
・オペランドバス３に対するコントロール信号の生成
ob3#i1#s2#use＝i1#s2#use
ob3#i3#s1#use＝i3#s1#use＆！i1#s2#use＆i0#s1#use＆i0#s2#use＆i1#s1#useob3#i3#s2#use＝i3#s2#use＆！i1#s2#use＆（！i3#s1#use！（i0#s1#use＆i0#s2#use＆i1#s1#use））
【００７７】
オペランドバス４に対するコントロール信号の生成
ob4#i2#s1#use＝i2#s1#use
ob4#i3#s1#use＝i3#s1#use＆！i2#s1#use＆i0#s1#use＆i0#s2#use＆i1#s1#use＆i1#s2#use
ob4#i3#s2#use＝i3#s2#use＆！i2#s1#use＆（！i3#s1#use｜！（i0#s1#use＆i0#s2#use＆i1#s1#use＆i1#s2#use））
【００７８】
オペランドバス５に対するコントロール信号の生成
ob5#i2#s2#use＝i2#s2#use
ob5#i3#s1#use＝i3#s1#use＆！i2#s2#use＆i0#s1#use＆i0#s2#use＆i1#s1#use＆i1#s2#use＆i2#s1#use
ob5#i3#s2#use＝i3#s2#use＆！i2#s2#use＆（！i3#s1#use｜！（i0#s1#use＆i0#s2#use＆i1#s1#use＆i1#s2#use＆i2#s1#use））
【００７９】
この実施の形態においては、オペランドバス１４ａの数が６本であり、４個の命令におけるオペランドバスの必要本数が７本以上であるときは、命令３がオペランドバス数不足の理由において、発行できなくなる。この検出は、命令デコーダ１ａにおいて、下記の式に従って検出可能となる。
【００８０】
「i3#0op#ok」は、命令３がオペランドバスの使用数が０である命令での発行可能検出であり、「i3#0op#ok」は、命令３がオペランドバスの使用数が１である命令での発行可能検出であり、「i3#2op#ok」は、命令３がオペランドバスの使用数が２である命令での発行可能検出である。
【００８１】
「i3#Ok」は、最終的にオペランドバス数が足りて命令３が実行できるか否かを示す。
【００８２】
i3#0op#ok＝！（i3#s1#use＝i3#s2#use）
i3#1op#ok＝！（i3#s1#use＆i3#s2#use）＆！（i0#s1#use＆i0#s2#use＆i1#s1#use＆i1#s2#use＆i2#s1#use＆i2#s2#use）
i3#2op#ok＝！i0#s1#use＆！（i0#s2#use＆i1#s1#use＆i1#s2#use＆i2#s1#use＆i2#s2#use）｜
！i0#s2#use＆！（i0#s1#use＆i1#s2#use＆i2#s1#use＆i2#s2#use）｜
！i1#s1#use＆！（i1#s2#use＆i2#s1#use＆i2#s2#use）｜
！i1#s2#use＆！（i2#s1#use＆i2#s2#use）
i3#Ok＝i3#0op#ok｜i3#1op#ok｜i3#2op#ok
【００８３】
上記したように、オペランドバス制御回路３ａは、オペランドバスコントロール信号とオペランドバス出力選択器３０により、オペランドバスの優先使用権を割り当てる。即ち、上記した実施の形態においては、命令１個の持つオペランドの最大数は２である。同時に発行されようとする４つの命令群のうち最も先行するべき先頭の命令（以下、第１の命令）については、２本のオペランドバス、すなわち第０、第１オペランドバスを第１の命令に優先使用権を割り当て、第１の命令の直後の命令（以下、第２の命令）については、２本のオペランドバス、すなわち第２、第３のオペランドバスを第２の命令に優先使用権を割り当て、第２の命令の直後の命令（以下、第３の命令）については、２本のオペランドバス、すなわち第４、第５のオペランドバスを第３の命令に優先使用権を割り当てる。そして、この実施例においては、オペランドバス１４ａは６本で構成されているため、最後の命令（第４の命令）については、オペランドバスは割り当てられない。このため、オペランドバスの優先使用権の割り当てのない第４の命令については、既に他の命令のために割り当てられた全てのオペランドバスのうち、オペランドバスの使用が最大数未満の命令が使用しないオペランドバスの使用権を、オペランドバスの割り当てのない命令に再配分する。
【００８４】
【発明の効果】
以上説明したように、オペランドバスの数がオペランドが同時に要求される最大数より小さいが、実際には同時に発行されようとする命令のそれぞれの要求オペランド数が、命令の最大要求オペランド数未満である場合がある。このため、同時に発行される命令の数が、オペランドバスの数の制限によって減少させられるかどうかの判定と、どの命令がどのオペランドバスを使用するかの割り当てについて調整を行う必要がある。
【００８５】
そこで、この発明においては、オペランドバスの優先使用権を割り当てられた命令については、たとえその中のいくつかの命令が命令の最大要求オペランド数未満のオペランド数しか要求しなかった場合であっても、最初に優先使用割り当てられたオペランドバスを変更せず、使用権の再配分を最初に優先使用権の割り当てがなかった命令にのみ行うことで、各オペランドバスに対する使用権の配分の可能性のある命令を絞り込むことで、この調整回路の単純化と回路規模の縮小化が実現ができる。
【図面の簡単な説明】
【図１】この発明に係るスーパスカラ型プロセッサの構成を示すブロック図である。
【図２】この発明に係るスーパスカラ型プロセッサのオペランドバス制御回路の構成を示すブロック図である。
【図３】従来のスーパスカラ型プロセッサの構成を示すブロック図である。
【図４】従来のオペランドバス制御回路の構成を示すブロック図である。
【符号の説明】
１ａ  命令デコーダ
２    レジスタファイルおよびリオーダバッファ
３ａ  オペランドバス制御回路
１４ａ  オペランドバス
１０−１〜１０−ｎ  実行ユニット
【図１】
0003784206.tif 000002
【図２】
0003784206.tif 000003
【図３】
0003784206.tif 000004
【図４】
0003784206.tif 000005