(57)【特許請求の範囲】
【請求項１】
複数個の発行位置を有するスーパスカラプロセッサの命令キューをスキャンするための装置であって、前記命令キューは、実行のため１以上の第２の命令に各々マッピングする命令を含み、前記命令は、それぞれの識別要素により識別される位置にｏｐコードを含み、前記装置は、
前記スーパスカラプロセッサの第１の発行位置のための第１のステージを含み、前記第１のステージは、識別要素に結合された入力を有するマスク論理の複数個のグループと、前記識別要素に結合された入力と前記第１のステージの前記マスク論理グループのうちの上位のものに結合された出力とを有するルックアヘッド発生器と、前記第１のステージの前記マスク論理グループの出力に結合されたマッピング命令情報発生器とを含み、前記装置はさらに
前記スーパスカラプロセッサの第２の発行位置のための第２のステージを含み、前記第２のステージは、前記第１のステージの対応するマスク論理グループの出力に結合された入力を有するマスク論理の複数個のグループと、前記マッピング命令情報発生器の出力および前記第１のステージの前記マスク論理グループの出力に結合された入力と前記第２のステージの前記マスク論理グループのうち上位のものに結合された出力とを有するルックアヘッド発生器とを含む、命令キュースキャン装置。
【請求項２】
前記第２のステージはさらに、前記第２のステージの前記マスク論理グループの出力に結合されたマッピング命令情報発生器を含み、前記装置はさらに、前記スーパスカラプロセッサの第３の発行位置のための第３のステージを含み、前記第３のステージは、前記第２のステージの対応するビットマスク論理グループの出力に結合された入力を有するマスク論理の複数個のグループと、前記マッピング命令情報発生器の出力および前記第２のステージの前記マスク論理グループの出力に結合された入力と前記第３のステージの前記マスク論理グループのうち上位のものに結合された出力とを有するルックアヘッド発生器とを含む、請求項１に記載の装置。
【請求項３】
前記命令キューの前記命令は、ｘ８６命令であり、前記第２の命令はＲＩＳＣ類似演算（「ＲＯＰ」）であり、前記マッピング命令情報は、発行されないまま残っている次のマッピングされたＲＯＰの番号を示す２進信号を含む、請求項１に記載の装置。
【請求項４】
前記ステージのＲＯＰが対応のｘ８６命令からマッピングされたＲＯＰシーケンスの最後のＲＯＰであるかどうかを示す信号をさらに含む、請求項３に記載の装置。
【請求項５】
複数個の発行位置を有するスーパスカラプロセッサの命令キューの１次命令をスキャンするための装置であって、各１次命令は、ｏｐコードと、前記命令キュー内の該ｏｐコードの位置を識別するｏｐコード識別子とを含み、各１次命令は、１つまたはそれ以上の数の２次命令にマッピングし、前記装置は、前記１次命令に割当てられた発行位置に対応する複数個のステージを有し、各ステージは、
ｏｐコード識別子を受けるための入力と第１の出力とを有するルックアヘッド信号発生論理と、
ｏｐコード識別子マスク回路の第１のグループとを含み、各々は、
ｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号、および１次命令がマッピングするＲＯＰの数を受けるための入力と、
マスクされた／マスクされないｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号のインクリメントされたもの、および１次命令がマッピングするＲＯＰの数を供給するための出力とを有し、各ステージは、
ｏｐコード識別子マスクおよびブロック回路の第２のグループをさらに含み、各々は、
ｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号、および１次命令がマッピングするＲＯＰの数を受けるための入力を有し、前記ルックアヘッド信号発生論理の第１の出力に結合された入力をさらに有し、
マスクされた／マスクされないｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号のインクリメントされたもの、および１次命令がマッピングするＲＯＰの数を供給するための出力を有する、装置。
【請求項６】
前記ルックアヘッド信号発生論理は、第２の出力を含み、前記装置はさらに、
ｏｐコード識別子マスクおよびブロック回路の第３のグループを含み、各々は、
ｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号、および１次命令がマッピングするＲＯＰの数を受けるための入力を有し、前記ルックアヘッド信号発生論理の第２の出力に結合された入力をさらに有し、
マスクされた／マスクされないｏｐコード識別子、発行位置を最も新しく割当てられたＲＯＰの番号のインクリメントされたもの、および１次命令がマッピングするＲＯＰの数を供給するための出力を有する、請求項５に記載の装置。
【請求項７】
複数個の発行位置を有するスーパスカラプロセッサの命令キューの命令をスキャンするための装置であって、各命令は、ｏｐコードと、前記命令キュー内の該ｏｐコードの位置を識別するｏｐコード識別子とを含み、各命令は、１つまたはそれ以上の数のＲＩＳＣ類似演算（「ＲＯＰ」）にマッピングし、前記装置は、
各命令がマッピングするＲＯＰの数、および利用可能な発行位置の数に依存して、前記発行位置を前記命令に割当てるための手段と、
前記発行位置にそれぞれ対応し、前記割当て手段において前記発行位置が割当てられる命令のための前記命令キュー内のｏｐコードの位置を識別してそれぞれの発行位置へ報告する複数個のステージとを含み、
各ステージは、ｏｐコード識別子の入力アレイとｏｐコード識別子の出力アレイとを有し、かつ
前記入力アレイの最初のｏｐコードの位置を識別するための手段と、
ｏｐコード識別子を前記入力アレイから前記出力アレイに伝搬するための手段とを含み、該伝搬しているアレイは、対応する発行位置が特定の命令に最後に割当てられた発行位置であるとマスクされる前記識別手段において識別される位置を有し、
前記ステージは、互いに直列に結合され、前記ステージのうち先頭のものは、その入力アレイが前記命令キューのｏｐコード識別子に結合され、他のステージの各々は、その入力アレイがすぐ前のステージの出力アレイに結合され、かつ
各ステージは、ｏｐコード識別子処理論理の複数個のグループに分けられ、前記ステージ内の伝搬遅延を少なくするために該ステージの上位グループへの入力を与えるルックアヘッド手段を含む、装置。
【請求項８】
前記割当て手段は、前記ステージにわたって分散される、請求項７に記載の装置。
【請求項９】
前記命令キューは、キューの先頭にある完全プリデコードｘ８６命令を含む、複数個の完全プリデコードｘ８６命令を保持する、請求項７に記載の装置。
【請求項１０】
各命令がマッピングするＲＯＰは、順序づけられたシーケンスにあり、前記順序づけられたシーケンスでそれぞれの番号を有し、前記ステージの各々はさらに、
発行位置を最も新しく割当てられたＲＯＰの番号に関する出力アレイと、
関連するｘ８６命令がマッピングするＲＯＰの数に関する出力アレイとを含み、前記ステージの各々はさらに、
すぐ前のステージのｏｐコード識別子の出力アレイに結合され、該ステージのグループに対しそれぞれ第１のｏｐコード識別信号およびルックアヘッド信号を発生する手段と、
発行位置を最も新しく割り当てられたＲＯＰの番号に関するすぐ前のステージの出力アレイに結合され、かつ関連するｘ８６命令がマッピングするＲＯＰの数に関するすぐ前のステージの出力アレイに結合され、発行位置を最も新しく割当てられたＲＯＰの番号と、関連するｘ８６命令がマッピングするＲＯＰの数とが同じであれば、すぐ前のステージのｏｐコード識別子の出力アレイをマスクする手段とを含む、請求項７に記載の装置。
【請求項１１】
前記ステージの各々はさらに、次の発行位置を割当てられるべきＲＯＰのＲＯＰ数を識別する第３の出力を含む、請求項１０に記載の装置。
【請求項１２】
複数個の発行位置を有するスーパスカラプロセッサの命令キューのプリデコードされたｘ８６命令をスキャンするための装置であって、各命令は、ｏｐコードと、前記命令キュー内のｏｐコードの位置を識別するｏｐコード識別子ビットとを含み、各命令は、１つまたはそれ以上の数のＲＩＳＣ類似演算（「ＲＯＰ」）にマッピングし、前記装置は、第１のステージと第２のステージとを含み、前記第１のステージは、
前記命令キューのｏｐコードビットおよびｏｐコード識別子ビットに結合される入力を有する第１の第１ｏｐコード識別信号発生論理と、
部分的発行信号を受けるための入力を有する部分的発行信号発生論理と、
前記命令キューのｏｐコードビットおよびｏｐコード識別子ビットに結合された入力を有する第１のルックアヘッド信号発生論理と、
前記第１の第１ｏｐコード識別信号発生論理の第１フィールド出力と前記部分的発行信号発生論理とに結合された入力を有し、かつ前記命令キューの前記第１フィールドの最も早く発生するｏｐコード識別子ビットの位置を識別するための出力を有するビットマスク論理の第１のグループと、
前記第１の第１ｏｐコード識別信号発生論理の第２フィールド出力と前記部分的発行信号発生論理の出力と前記第１のルックアヘッド信号発生論理の出力とに結合された入力を有し、かつ前記命令キューの前記第２フィールドの最も早く発生するｏｐコード識別子ビットの位置を識別するための出力を有するビットマスク論理の第２のグループとを含み、
前記第２のステージは、
ビットマスク論理の前記第１および第２のグループのｏｐコードビット出力およびｏｐコード識別子ビット出力に結合された入力を有する第２の第１ｏｐコード識別信号発生論理と、
前記命令キューのｏｐコードビットおよびｏｐコード識別子ビットに結合された入力を有する第２のルックアヘッド信号発生論理と、
前記第２の第１ｏｐコード識別信号発生論理の第１フィールド出力とビットマスク論理の前記第１のグループのｏｐコードビット出力およびｏｐコード識別子ビット出力とに結合される入力を有するビットマスク論理の第３のグループと、  前記第２の第１ｏｐコード識別信号発生論理の第２フィールド出力とビットマスク論理の前記第２のグループのｏｐコードビット出力およびｏｐコード識別子ビット出力とに結合された入力を有するビットマスク論理の第４のグループとを含む、装置。
【請求項１３】
スーパスカラプロセッサの１次命令のキューをスキャンするための方法であって、前記１次命令のキューは、第１の組のｏｐコード位置識別子（「ＯＬＩ」）により識別される前記キューのそれぞれの位置にある１つまたはそれ以上のｏｐコードを有し、各１次命令は、１つまたはそれ以上の数の２次命令のシーケンスにマッピングし、前記方法は、
前記第１の組のＯＬＩの第１および第２のサブセットを識別するステップと、  前記スーパスカラプロセッサの第１の発行位置に対し、そのいかなる最初にアサートされたＯＬＩも識別される第１および第２のサブセットを有する第２の組のＯＬＩを発生するステップとを含み、前記第２の組のＯＬＩの前記第１および第２のサブセットは、前記第１の組のＯＬＩの前記第１および第２のサブセットに対応し、さらに
前記第１の組のＯＬＩの前記第１のサブセットがいかなるアサートされたＯＬＩも含まなければ、前記第１の発行位置に対しルックアヘッド信号を発生するステップと、
前記第１の発行位置に関する前記ルックアヘッド信号を前記第２の組のＯＬＩの前記第２のサブセットに与え、前記第２の組のＯＬＩから前記第１の発行位置に対し、前記第１の組の最初にアサートされたＯＬＩを示しかつ前記第１の組のいかなる続いてアサートされたＯＬＩも示さない第３の組のＯＬＩを発生するステップと、
前記第１の組から第４の組のＯＬＩを導出するステップと、
前記スーパスカラプロセッサの第２の発行位置に対し、そのいかなる最初にアサートされたＯＬＩも識別される第１および第２のサブセットを有する第５の組のＯＬＩを発生するステップとを含み、前記第５の組のＯＬＩの前記第１および第２のサブセットは、前記第４の組のＯＬＩの前記第１および第２のサブセットに対応し、さらに
前記第４の組のＯＬＩの前記第１のサブセットがいかなるアサートされたＯＬＩも含まなければ、前記第２の発行位置に対しルックアヘッド信号を発生するステップと、
前記第２の発行位置に関するルックアヘッド信号を前記第５の組のＯＬＩの前記第２のサブセットに与え、前記第５の組のＯＬＩから前記第２の発行位置に対し、前記第４の組の最初にアサートされたＯＬＩを示しかつ前記第４の組のいかなる続いてアサートされたＯＬＩも示さない第６の組のＯＬＩを発生するステップとを含む、方法。
【請求項１４】
第４の組のＯＬＩを導出する前記ステップは、前記第１の発行位置が２次命令のシーケンスの最後の２次命令を含む場合には、前記第１の組のＯＬＩの最初にアサートされたＯＬＩを阻止し、そうでなければ、前記第１の組のＯＬＩの最初にアサートされたＯＬＩを伝搬するステップを含む、請求項１３に記載の方法。
【請求項１５】
スーパスカラプロセッサの１次命令のキューをスキャンするための方法であって、前記１次命令のキューは、第１のアレイのアサートされたビットによりそれぞれ識別される前記キューのそれぞれの位置にある１つまたはそれ以上のｏｐコードバイトを有し、各１次命令は、１つまたはそれ以上の数の２次命令のシーケンスにマッピングし、前記方法は、
前記第１のアレイのビットの第１および第２のサブセットを識別するステップと、
前記スーパスカラプロセッサの第１の発行位置に対し、前記第１のアレイのビットの第１および第２のサブセットそれぞれの最初にアサートされたビットを示すビットの第１および第２のサブセットを有する第２のアレイを発生するステップと、
前記第１のアレイのビットの第１のサブセットがアサートされたビットを含まなければ、前記第１の発行位置に対しルックアヘッド信号を発生するステップと、
前記第１の発行位置に関する前記ルックアヘッド信号を前記第２のアレイのビットの第２のサブセットに与え、前記第２のアレイから前記第１の発行位置に対し、前記第１のアレイの最初にアサートされたビットを示しかつ前記第１のアレイのいかなる続いてアサートされたビットも示さないビットの第３のアレイを発生するステップと、
前記第１のアレイから第４のアレイを導出するステップと、
前記第４のアレイのビットの第１および第２のサブセットを識別するステップと、
前記スーパスカラプロセッサの第２の発行位置に対し、前記第４のアレイのビットの第１および第２のサブセットそれぞれの最初にアサートされたビットを示すビットの第１および第２のサブセットを有する第５のアレイを発生するステップと、
前記第４のアレイのビットの前記第１のサブセットがアサートされたビットを含まなければ、前記第２の発行位置に対しルックアヘッド信号を発生するステップと、
前記第２の発行位置に関するルックアヘッド信号を前記第５のアレイのビットの前記第２のサブセットに与え、前記第５のアレイから前記第２の発行位置に対し、前記第４のアレイの最初にアサートされたビットを示しかつ前記第４のアレイのいかなる続いてアサートされたビットも示さないビットの第６のアレイを発生するステップとを含む、方法。
【請求項１６】
第４のアレイを導出する前記ステップは、前記第１のアレイをマスクし、前記第１の発行位置が２次命令のシーケンスの最後の２次命令を含む場合には、前記第１のアレイの最初にアサートされたビットを阻止し、それ以外の時前記第１のアレイの最初にアサートされたビットを伝搬するステップを含む、請求項１５に記載の方法。
【請求項１７】
第４のアレイを導出する前記ステップの前に、さらに、
前記第１の発行位置に対し、前記第１の発行位置の２次命令のシーケンス数を示す部分的発行値を発生するステップと、
前記部分的発行値と前記第１の発行位置に関する完全発行値とを比較するステップとを含み、前記第１の発行位置に関する前記完全発行値は、前記第１の発行位置の２次命令がマッピングされる１次命令からマッピングされる２次命令の数であり、
前記第１の発行位置に対する前記導出ステップはさらに、前記部分的発行値が前記第１の発行位置に関する前記完全発行値と同じである場合には、前記第１のアレイの最初にアサートされたビットをマスクし、それ以外の時前記第１のアレイの最初にアサートされたビットを伝搬するステップを含む、請求項１６に記載の方法。
【請求項１８】
前記第４のアレイから第７のアレイを導出するステップと、
前記第７のアレイのビットの第１および第２のサブセットを識別するステップと、
前記スーパスカラプロセッサの第３の発行位置に対し、前記第７のアレイのビットの第１および第２のサブセットそれぞれの最初にアサートされたビットを示すビットの第１および第２のサブセットを有する第８のアレイを発生するステップと、
前記第７のアレイのビットの第１のサブセットがアサートされたビットを含まなければ、前記第３の発行位置に対しルックアヘッド信号を発生するステップと、
前記第３の発行位置に関する前記ルックアヘッド信号を前記第８のアレイのビットの第２のサブセットに与え、前記第８のアレイから前記第３の位置に対し、前記第７のアレイの最初にアサートされたビットを示しかつ前記第７のアレイのいかなる続いてアサートされたビットも示さないビットの第９のアレイを発生するステップとをさらに含む、請求項１５に記載の方法。
【請求項１９】
前記第７のアレイを導出するステップは、前記第４のアレイをマスクし、前記第２の発行位置が２次命令のシーケンスの最後の２次命令を含む場合には、前記第４のアレイの最初にアサートされたビットを阻止し、それ以外の時には前記第４のアレイの最初にアサートされたビットを伝搬するステップを含む、請求項１８に記載の方法。
【請求項２０】
第７のアレイを導出する前記ステップの前に、さらに、
前記第２の発行位置に対し、部分的発行値から発行値を導出するステップを含み、該導出された発行値は、前記第２の発行位置の２次命令のシーケンス数が前記第２の発行位置に関する完全発行値より小さい場合には、前記部分的発行値のインクリメントされたものであり、前記第２の発行位置に関する前記完全発行値は、前記第２の発行位置の２次命令がマッピングされる１次命令からマッピングされる２次命令の数であり、前記導出された発行値は、それ以外の時デフォルト値であり、さらに
前記導出された発行値と前記第２の発行位置に関する前記完全発行値とを比較するステップを含み、
前記第２の発行位置に対する前記導出ステップはさらに、前記導出された発行値が前記第２の発行位置に関する前記完全発行値と同じである場合には、前記第４のアレイの最初にアサートされたビットをマスクし、それ以外の時前記第４のアレイの最初にアサートされたビットを伝搬するステップを含む、請求項１９に記載の方法。
【請求項２１】
前記第１のアレイのビットの前記第１および第２のサブセットを識別する前記ステップはさらに、前記第１のアレイのビットの第３のサブセットを識別するステップを含み、
第２のアレイを発生する前記ステップはさらに、前記第１のアレイのビットの前記第３のサブセットの最初にアサートされたビットを示すビットの第３のサブセットを前記第２のアレイに含ませるステップを備え、
前記第１の発行位置に対しルックアヘッド信号を発生する前記ステップはさらに、前記第１のアレイのビットの前記第１または前記第２のサブセットのいずれも最初にアサートされたビットを含まない場合には、前記第１の発行位置に対し付加的なルックアヘッド信号を発生するステップを含み、
前記第１の発行位置に関する前記ルックアヘッド信号を与える前記ステップはさらに、前記第１の発行位置に関する前記付加的なルックアヘッド信号を前記第２のアレイのビットの第３のサブセットに与えることにより、前記第３のアレイを発生するステップを含む、請求項１５に記載の方法。
【請求項２２】
前記１次命令はプリデコードされたｘ８６命令であり、前記２次命令はＲＩＳＣ類似演算である、請求項１５に記載の方法。
【請求項２３】
複数個の発行位置および複数個のそれぞれのスキャンステージを有するスーパスカラプロセッサの命令キューの命令をスキャンするための方法であって、各命令は、ｏｐコードと、前記命令キュー内のｏｐコードの位置を識別するｏｐコード識別子とを含み、各命令は、１つまたはそれ以上の数のＲＩＳＣ類似演算（「ＲＯＰ」）にマッピングし、前記方法は、
各命令がマッピングするＲＯＰの数および利用可能な発行位置の数に依存して、前記発行位置を前記命令に割当てるステップと、
前記発行位置が割当てられる命令に対する前記命令キューのｏｐコードの位置を識別するステップと、
前記識別ステップからのｏｐコード位置をそれぞれの発行位置に報告するステップとを含み、
各ステージが、ｏｐコード識別子の入力アレイとｏｐコード識別子の出力アレイとを有する、ステージ単位で、
前記入力アレイの第１のｏｐコードの位置を識別するステップと、
ｏｐコード識別子を前記入力アレイから前記出力アレイに伝搬するステップとを含み、該伝搬しているアレイは、対応する発行位置が特定の命令に最後に割当てられた発行位置であるときにマスクされる識別手段において識別される位置を有し、
前記ステージは、互いに直列に結合され、前記ステージのうち先頭のものは、その入力アレイが前記命令キューのｏｐコード識別子に結合され、他のステージの各々は、その入力アレイがすぐ前のステージの出力アレイに結合され、
各ステージは、ｏｐコード識別子処理論理の複数個のグループに分けられ、
前記ステージ内の伝搬遅延を少なくするために、ルックアヘッド信号をステージの上位グループに与えるステップをさらに含む、方法。
【請求項２４】
各命令がマッピングするＲＯＰは、順序づけられたシーケンスであり、かつ前記順序づけられたシーケンスでそれぞれの番号を有し、前記ステージの各々は、
発行位置を最も新しく割当てられたＲＯＰの番号に関する出力アレイと、
関連するｘ８６命令がマッピングするＲＯＰの数に関する出力アレイとを含み、前記方法はさらに
前記ステージのグループに対しそれぞれ第１のｏｐコード識別信号およびルックアヘッド信号を発生するステップと、
発行位置を最も新しく割当てられたＲＯＰの番号と、関連するｘ８６命令がマッピングするＲＯＰの数とが同じである場合には、すぐ前のステージのｏｐコード識別子の出力アレイをマスクするステップとを含む、請求項２３に記載の方法。
【発明の詳細な説明】
【０００１】
【関連出願の相互参照】
この出願は、１９９４年１０月２６日に共同発明者デイビッド・ビィ・ウィット（David B. Witt ）およびマイケル・ディ・ゴダード（Michael D. Goddard）の名前で出願されかつ「スーパスカラ命令デコード／発行装置（Superscalar Instruction Decoder ）」と題された特願平６−２６２４３７の一部継続出願であり、その全体を引用によりここに援用する。
【０００２】
【発明の分野】
この発明は、命令デコードに関し、より特定的には、命令要素を識別してデコードするための可変長命令のキューのスキャンに関する。
【０００３】
【関連技術の説明】
汎用プロセッサは、典型的にはスカラ命令セットに基づく。プロセッサアーキテクチャは、ＲＩＳＣ（縮小命令セットコンピュータ）（Reduced Instruction Set Computer）ベースであるか、またはＣＩＳＣ（複雑命令セットコンピュータ）（Complex Instruction Set Computer）ベースである。各アプローチとも、文献で広く議論されているように利点および欠点がある。
【０００４】
ＲＩＳＣアーキテクチャは、スーパスカラコンピュータデザインにおいて用いられている。「スーパスカラ」という用語は、スカラ命令の同時実行によって性能を改良するコンピュータ構造のことである。スーパスカラＲＩＳＣアーキテクチャの実現はかなり進歩してきている。スーパスカラＲＩＳＣアーキテクチャは、典型的にはパイプライン構造を考慮して規定されており、スーパスカラ構造を容易にする多くの特徴を含む。これらの特徴は、固定フォーマットおよび固定長命令、簡潔な命令オペランド、ならびにロード／ストアアーキテクチャを含む。スーパスカラＲＩＳＣアーキテクチャは、ここにその全体を引用によって援用する、１９９１年、ニュージャージー州、エングルウッドクリフス（Englewood Cliffs）の、プレンティスホール社（Prentice Hall ）出版、ジョンソン（Johnson ）著、「スーパスカラマイクロプロセッサデザイン」（Superscalar Microprocessor Design ）に説明される。
【０００５】
スーパスカラＣＩＳＣアーキテクチャを達成することが関心を呼んでいるが、スーパスカラ構造を考慮して規定されるＣＩＳＣアーキテクチャがほとんどないこともあって、進歩が遅れている。ＣＩＳＣアーキテクチャは、主要な実現技術が命令セットのマイクロコード変換であったときに規定されており、演算が重なるように設計することではなく、どの演算が命令に組合されるべきかということに重点がおかれていた。非常に用途が広い一方で、マイクロコード変換は、パイプラインアーキテクチャまたはスーパスカラアーキテクチャの開発を促進するものではない。命令フォーマットの複雑さを含め、従来のＣＩＳＣアーキテクチャの数々の局面から困難が生じている。命令フォーマットの複雑さの一面は、命令長の可変性である。
【０００６】
ＣＩＳＣ命令フォーマットの一例は、カリフォルニア州、サンタクララ（Santa Clara ）のインテル社（Intel Corporation ）から入手可能である、８０４８６型マイクロプロセッサおよびペンティアム（Pentium ）（登録商標）マイクロプロセッサの命令フォーマットである。より初期のインテル命令セットからの特性を受継ぎ、かつ一般にｘ８６フォーマットとして知られている、この命令フォーマットにおいて、命令は、１つまたは２つのｏｐコードバイトからなるオペレーションコード（「ｏｐコード」）、修飾レジスタまたはメモリ（「ｍｏｄ  ｒ／ｍ」）バイト、スケールインデックスベース（「ｓｉｂ」）バイト、変位バイト、および即値データバイトを有し得る。ｏｐコードはオペレーションコードを特定し、またレジスタ識別子を含み得る。ｍｏｄ  ｒ／ｍバイトは、オペランドがレジスタにあるか、またはメモリにあるかを特定する。オペランドがメモリにあれば、ｍｏｄ  ｒ／ｍバイトにおけるフィールドは使用されるべきアドレスモードを特定する。ｍｏｄ  ｒ／ｍバイトのあるコード化は、第２のバイトであるｓｉｂバイトが後に続いてアドレスモードを完全に特定することを示す。ｓｉｂバイトは、２ビットスケールフィールド、３ビットインデックスフィールド、および３ビットベースフィールドからなる。これらのフィールドは、アドレス計算がどのように行なわれるかを特定するために複雑メモリアドレスモードにおいて用いられる。変位バイトはアドレス計算の際に用いられる。即値データバイトは命令オペランドのために用いられる。プレフィックスバイトとして知られる１つまたはそれ以上の付加的なバイトが、ｏｐコードバイトの前に表われるかもしれない。プレフィックスバイトは、命令の解釈を変更し、さらに複雑にする。
【０００７】
上述の説明から明らかであるように、ｘ８６フォーマットの命令の長さは幅広く可変である。最小命令は１つのｏｐコードバイトからなり、８ビット長である。プレフィックスバイトを含む長い命令は１０４ビット長であり得る。２つ以上のプレフィックスバイトを含む、より長い命令もまた可能である。
【０００８】
ｘ８６命令フォーマットの可変命令長および他の複雑化は、複雑で比較的遅いデコード回路をもたらしている。遅いデコード回路は、複雑な命令を扱ういくつかのＣＩＳＣマイクロプロセッサおよび遅いマイクロプロセッサにおいて受入可能であるかもしれないが、各機能要素が速度に対して最適化されるアーキテクチャを有するマイクロプロセッサの性能に深刻な影響を及ぼす。
【０００９】
【発明の概要】
利点として、この発明は、１つまたはそれ以上の命令の方向を、スーパスカラプロセッサの発行位置に適切なように制御するためのスーパスカラプロセッサの命令のキューの高速スキャンを提供する。
【００１０】
このおよび他の利点は、第１および第２の発行位置それぞれに対する第１および第２のステージを含むスキャン装置において達成される。第１のステージは、ｏｐコード位置識別要素に結合された入力を有するマスク論理の複数個のグループと、識別要素に結合された入力と第１のステージのマスク論理グループの上位のものに結合された出力とを有するルックアヘッド発生器と、第１のステージのマスク論理グループの出力に結合されたマッピング命令情報発生器とを含む。第２のステージは、第１のステージの対応するマスク論理グループの出力に結合された入力を有するマスク論理の複数個のグループと、マッピング命令情報発生器の出力および第１のステージのマスク論理グループの出力に結合された入力と第２のステージのマスク論理グループの上位のものに結合された出力とを有するルックアヘッド発生器とを含む。
【００１１】
このおよび他の利点はまた、第１の組のｏｐコード位置識別子（「ＯＬＩ」）により識別されるキューのそれぞれの位置に１つまたはそれ以上のｏｐコードを有する１次命令のキューをスキャンするための方法において得られ、各１次命令は、多くの１つまたはそれ以上の２次命令のシーケンスにマッピングする。第１の組のＯＬＩの第１および第２のサブセットが識別され、第１の発行位置に対して、第１の組のＯＬＩの第１および第２のサブセットに対応する第１および第２のサブセットを有する第２の組のＯＬＩが発生されるが、そこではいかなる最初にアサートされたＯＬＩも識別される。第１の組のＯＬＩの第１のサブセットがいかなるアサートされたＯＬＩも含まなければ、第１の発行位置に対してルックアヘッド信号も発生される。ルックアヘッド信号は、第２の組のＯＬＩの第２のサブセットに与えられ、第２の組のＯＬＩから第１の発行位置に対して、第１の組の最初にアサートされたＯＬＩを示しかつ第１の組のいかなる続いてアサートされたＯＬＩも示さない第３の組のＯＬＩを発生する。第４の組のＯＬＩは第１の組から導出され、同様の一連のステップが第２の発行位置に対して与えられる。変更例において、第１の発行位置が２次命令のシーケンスの最後の２次命令を含むとき、第１の組のＯＬＩの最初にアサートされたＯＬＩを阻止することにより、第４の組のＯＬＩが導出され、それ以外のときは、第１の組のＯＬＩの最初にアサートされたＯＬＩが伝搬される。
【００１２】
【好ましい実施例の詳細な説明】
図面において、同じ参照符号が同じ部分を示す。
【００１３】
ＣＩＳＣ命令のスーパスカラ実行を実現するためのプロセッサ１００のアーキテクチャが図１に示される。プロセッサ１００は、スーパスカラＲＩＳＣ類似コア１１０に基づき、コア１１０で処理するための、ＣＩＳＣ命令をＲＩＳＣ類似演算またはＲＯＰに変換するさまざまな要素を含む。ＲＯＰは、「ソースＡ−演算−ソースＢ→デスティネーション」構造、ｏｐコードおよびソースオペランドの固定位置、ロード／ストアアーキテクチャ、およびロード／ストアアドレスモードの直接計算を含めて、多くの有用な特性を有する。コア１１０のためのＲＯＰは、３つのオペランド命令、すなわち２つのソースオペランドＡおよびＢ、ならびに１つのデスティネーションオペランドである。
【００１４】
プロセッサ１００の主な機能ブロック間、ならびに外部メモリへおよびそこからの、ＣＩＳＣアドレス、データおよび制御の転送は、内部アドレスおよびデータ（「ＩＡＤ」）バス１０２を介して伝達され、これは、物理タグ記憶装置１６２およびメモリ管理ユニット１６４と関連してバスインタフェースユニット（「ＢＩＵ」）１６０によって外部バス（図示せず）にインタフェースされる。ＩＡＤバス１０２は６４ビットバスである。転送先バスまたはＸＴＡＲＧＥＴバス１０３は、３２ビットバスであり、マイクロブランチ誤予測、例外、およびリセットの際の分岐セクションＢＲＮＳＥＣ１３５からのＩＤＥＣＯＤＥ１０８の更新、およびＩＤＥＣＯＤＥからのＢＲＮＳＥＣ１３５における分岐ＦＩＦＯの更新を含む、種々の優先順位をつけられた使用に供される。
【００１５】
ＣＩＳＣ命令をＲＯＰに変換するさまざまな要素は、命令キャッシュまたはＩＣＡＣＨＥ１０４と、バイトキューまたはＢＹＴＥＱ１０６と、命令デコーダまたはＩＤＥＣＯＤＥ１０８とを含む。ＣＩＳＣ命令、例としてｘ８６クラスマイクロプロセッサにより用いられる命令（これ以降ｘ８６命令）は、ＩＣＡＣＨＥ１０４において分解されかつプリデコードされる。ＩＣＡＣＨＥ１０４は、未処理のｘ８６命令開始および終了点を識別し、マークし、「プリデコード」情報をコード化する第１レベルの（１次）命令キャッシュである。プリデコードされたｘ８６命令は、概念的には「予測実行」状態にある０、１またはそれ以上のプリデコードされたｘ８６命令を表わす、最大１６エントリのキューであるＢＹＴＥＱ１０６にコピーされる。プリデコードされたｘ８６命令の各々は、命令開始で開始し、命令終了で終了し、１つまたはそれ以上の要素からなる。各要素は、有効ビット、ｘ８６命令バイト、予測実行状態のプリデコード情報、および分岐誤予測情報を含む。ｘ８６命令がＢＹＴＥＱ１０６から発行され、後続のｘ８６命令がキューの先頭に進められると、プリデコードされたｘ８６命令は利用可能なスペースがあればＢＹＴＥＱ１０６の位置にコピーされる。ＢＹＴＥＱ１０６からのプリデコードされたｘ８６命令は、命令デコーダ（「ＩＤＥＣＯＤＥ」）１０８においてＲＯＰのそれぞれのシーケンスにマッピングされる。ＩＤＥＣＯＤＥ１０８は、ＢＹＴＥＱ１０６内のプリデコードされたｘ８６命令に基づくすべてのＲＯＰについてのタイプ、ｏｐコード、およびポインタ値を発生し、ＢＹＴＥＱ１０６をシフトするために発行可能なｘ８６命令の数を決定する。ＩＤＥＣＯＤＥ１０８はまた、推論ＲＯＰのプログラムカウンタ値を維持し、推論浮動小数点実行のための浮動小数点ポインタの推論マッピングを維持する。どれだけのＲＯＰにｘ８６命令がマッピングするかに依存して、４つまでのｘ８６命令が同時に発行され得る。
【００１６】
ＢＹＴＥＱ１０６は、ＩＣＡＣＨＥ１０４とＩＤＥＣＯＤＥ１０８との間に示されるが、いずれかと一体化されても、両方にわたって分散されても、また別個のユニットとして実現されてもよい。
【００１７】
ＲＯＰ命令はさまざまなバスを介してコア１１０に発行される。コア１１０は、４つのＲＯＰ発行、５つのＲＯＰ結果、および１６までの推論実行ＲＯＰをサポートする。ＡおよびＢソースオペランドに対する４つまでの組のポインタが、ＩＤＥＣＯＤＥ１０８によってそれぞれのバスを介してコア１１０内のレジスタファイル（「ＲＥＧＦ」）１１２とリオーダバッファ（「ＲＯＢ」）１１４とに供給される。ＲＥＧＦ１１２は、整数および浮動小数点命令に関するマッピングされたｘ８６レジスタを含む物理レジスタファイルである。ＲＯＢ１１４は、推論実行ＲＯＰの相対的な順番を追跡するための先頭および末尾キューポインタを備えた環状ＦＩＦＯである。ストア位置は、命令結果にダイナミックに割当てられる。推論実行状態オペランドは、ライトバックバス１１３を介してＲＯＢ１１４からＲＥＧＦ１１２に放棄される。
【００１８】
ＲＥＧＦ１１２およびＲＯＢ１１４は、ＲＩＳＣオペランドＡおよびＢの適切な「実行された」および「予測実行された」ものをＡおよびＢソースオペランドバス１１６を介してコア１１０内のさまざまな機能ユニットに供給する。コア１１０内のさまざまな機能ユニットは、第１の算術演算論理装置（「ＡＬＵ０」）１３１、第２の算術演算論理およびシフトユニット（「ＡＬＵ１およびＳＨＦ」）１３２、特殊レジスタブロック（「ＳＲＢ」）１３３、ロード／ストアセクション（「ＬＳＳＥＣ」）１３４、分岐セクション（「ＢＲＮＳＥＣ」）１３５、および浮動小数点ユニット（「ＦＰＵ」）１３６である。機能ユニット１３１、１３２、１３３、１３４、１３５および１３６は、オペランドバス１１６およびＴＡＤバス１１８に接続される入力を有するそれぞれの待合せステーション１２１、１２２、１２４、１２５および１２６を含む。ＲＩＳＣｏｐコード情報は、タイプおよび発行情報（「ＴＡＤ」）バス１１８を介してＩＤＥＣＯＤＥ１０８から発行される。機能ユニット１３１−１３６の実行の完了から結果が得られると、結果およびそれらのそれぞれの結果タグが、４バス幅の結果タグおよび結果バス１４０を介してＲＯＢ１１４に、ならびに待合せステーション１２１−１２２および１２４−１２６に供給される。
【００１９】
ＤＣＡＣＨＥ１５０は、整数および浮動小数点ロードおよびストア演算の両方を扱うＬＳＳＥＣ１３４と密接して整列される。２つまでのロード動作が同時にＤＣＡＣＨＥ１５０にアクセスし、それらの動作を結果バス１４０に転送する。ＤＣＡＣＨＥ１５０内にストアされたデータに関するキャッシュヒット／ミスチェックもまたＬＳＳＥＣ１３４によって行なわれる。
【００２０】
プロセッサ１００はまた、物理タグ記憶装置１６２、メモリ管理ユニット１６４、および従来の外部メモリ１６６に結合される従来の外部バスとインタフェースするバスインタフェースユニット１６０を含む。物理タグ記憶装置１６２は、ＩＣＡＣＨＥ１０４およびＤＣＡＣＨＥ１５０の内容に関するタグを含む。メモリ管理ユニット１６４は、メモリアドレス変換を行なう。バスインタフェースユニット１６０は、物理タグ記憶装置１６２からの読出／書込サイクルに関するリクエストをとり、外部バスにおける読出／書込サイクルを見て、物理タグ記憶装置１６２、ＩＣＡＣＨＥ１０４、およびＤＣＡＣＨＥ１５０におけるキャッシュ一致性を確実にし、検出の際に適宜データを更新するか、無効にするか、または与える。
【００２１】
図１のプロセッサ１００は、フェッチステージ、２つのデコードステージＤＥＣＯＤＥ１およびＤＥＣＯＤＥ２、実行ステージ、結果ステージ、ならびに放棄ステージを有する５段のパイプラインとして動作する。
【００２２】
ＩＣＡＣＨＥ１０４は、１９９４年１０月２５日出願の特願平６−２６０７０１（デイビッド・ビィ・ウィットおよびマイケル・ディ・ゴダードの「可変バイト長命令フォーマットを有するタイプのプロセッサのための命令キャッシュ」（Pre-Decode Instruction Cache and Method Therefor Particularly Suitable for Variable Byte-Length Instructions））にさらに詳細に記載され、その全体を引用によりここに援用する。ＢＹＴＥＱ１０６は、１９９４年１０月２５日出願の特願平６−２６０７００（デイビッド・ビィ・ウィットの「可変バイト長命令フォーマットを有するタイプのプロセッサのための推論的命令キュー」（Speculative Instruction Queue and Method Therefor Particularly Suitable for Variable Byte-Length Instructions ））にさらに詳細に記載され、その全体を引用によりここに援用する。ＩＤＥＣＯＤＥ１０８は、１９９４年１０月２６日出願の特願平６−２６２４３７（デイビッド・ビィ・ウィットおよびマイケル・ディ・ゴダードの「スーパスカラ命令デコード／発行装置」（Superscalar Instruction Decoder ））にさらに詳細に記載され、その全体を引用によりここに援用する。コア１１０のための適切なユニットは、１９９４年１０月２７日出願の特願平６−２６３３１７（デイビッド・ビィ・ウィットおよびウィリアム・エム・ジョンソン（William M. Johnson）の「スーパースカラマイクロプロセッサ」（High Performance Superscalar Microprocessor ））に開示され、その全体を引用によりここに援用する。他の適切なスーパスカラＲＩＳＣコアおよび適切なＲＩＳＣ命令セットもこの技術分野においてよく知られている。ＤＣＡＣＨＥ１５０およびＬＳＳＥＣ１３４は、１９９４年１０月２４日出願の特願平６−２５７８２６（デイビッド・ビィ・ウィットの「プロセッサ、キャッシュ、およびエイリアシングが発生するのを防ぐための方法」（Linearly Addressed Microprocessor Cache ））にさらに記載され、その全体を引用によりここに援用する。物理タグ記憶装置１６２およびＬＳＳＥＣ１３４は、１９９４年１０月２５日出願の特願平６−２６０６９９（ウィリアム・エム・ジョンソン、デイビッド・ビィ・ウィットおよびミュラリ・チナコンダ（Murali Chinnakonda）の「マイクロプロセッサのロード／ストア機能ユニットおよび情報処理用装置」（High Performance Load/Store Functional Unit and Data Cache））にさらに記載され、その全体を引用によりここに援用する。
【００２３】
ＩＣＡＣＨＥ１０４におけるｘ８６命令の処理の結果として生じるプリデコードされたｘ８６命令の一般的な表現は、図２に示される。プリデコードされたｘ８６命令は６つまでの命令「要素」を有し得る。未処理のｘ８６命令において１つまたはそれ以上のプレフィックスが存在すれば、プリデコードされたｘ８６命令は１つまたはそれ以上のプレフィックス要素を含む。最後のプレフィックス要素は、ＩＤＥＣＯＤＥ１０８のための完全プレフィックス情報を含む統合プレフィックス要素であり、一方その他のプレフィックス要素は、部分的な情報を含む再コード化されたプレフィックス要素であり、ＩＤＥＣＯＤＥ１０８によって使用されない。図２は、再コード化されたプレフィックス要素２０２および統合プレフィックス要素２０４を示す。ｘ８６命令ｏｐコードバイトを含むＯＰＣＯＤＥ要素２１０がプレフィックス要素２０２および２０４に続く。未処理のｘ８６命令が特殊なメモリアドレスを実行する場合には、プリデコードされたｘ８６命令はｍｏｄ  ｒ／ｍ要素、たとえばｍｏｄ  ｒ／ｍ要素２１２を含む。未処理のｘ８６命令があるアドレスモードを必要とすれば、プリデコードされたｘ８６命令はｓｉｂ要素、たとえばｓｉｂ要素２１４を含む。未処理のｘ８６命令がアドレス計算に関する変位情報を必要とするか、または即値データを含む場合には、プリデコードされたｘ８６命令は変位／即値データ要素、たとえば変位／即値データ要素２１６を含む。
【００２４】
プリデコード情報は、コードｖ、ｓ、ｅ、ｒｏｐ、およびｏｐにより識別されるさまざまなビットにより伝えられる。ビット「ｖ」は、特定の要素が有効命令の一部分であるかどうかを示す有効ビットであり、ビット「ｓ」は、プリデコードされたｘ８６命令の最初の要素を識別する開始ビットであり、ビット「ｒｏｐ」は、ｘ８６命令に必要とされるＲＯＰの数を示し、ビット「ｏｐ」は、ｘ８６命令ｏｐコード要素を識別し、ビット「ｅ」は、プリデコードされたｘ８６命令の最後の要素を識別する終了ビットである。
【００２５】
図２は、アサートされたプリデコード情報ビットを示す。図２の、示されるプリデコードされたｘ８６命令におけるすべての要素は、アサートされた「ｖ」ビットにより示されるように、有効である。図２のプリデコードされたｘ８６命令の最初の要素である再コード化されたプレフィックス２０２は、アサートされた「ｓ」ビットによって識別される。再コード化動作が有効なｒｏｐ情報をもたらさないかもしれないので、ビット「ｒｏｐ」は、再コード化されたプレフィックス要素２０２にアサートされて示されてはいない。しかしながら、ｒｏｐビットが最後の再コード化動作において有効であると、プリデコードされたｘ８６命令の統合プレフィックス２０４および後続の要素すべてが使用可能なｒｏｐビットを含む。ビット「ｏｐ」は、ｘ８６命令ｏｐコード要素２１０を識別する。変位−即値要素２１６は、アサートされた「ｅ」ビットによって、プリデコードされたｘ８６命令の最後の要素としてマークされる。
【００２６】
ＢＹＴＥＱ１０６は、図３の代表的なバイトキュー要素「ｘ」に示されるような、いくつかのアレイで維持される。アレイＢＴＹＥＱは、再コード化されたプレフィックス情報、統合プレフィックス情報、ｏｐコード情報、ｍｏｄ  ｒ／ｍ情報、ｓｉｂ情報、または変位もしくは即値データ情報を含めて、未処理のｘ８６命令のバイトから選択されるかまたはそれらから導出されるバイトを含む。したがって、図３の代表的なバイトキュー要素「ｘ」は、ビットＢＹＴＥＱｘ［７：０］を含む。アレイＢＹＴＥＱＶは有効ビットを含む。したがって、図３の代表的なバイトキュー要素「ｘ」は、ｘ番目の要素が有効であるかどうかを示すビットＢＹＴＥＱＶ［ｘ］を含む。バイト誤予測情報は、ＢＹＴＥＱＮＳ［ｘ］、ＢＹＴＥＱＣＬＭ０［ｘ］およびＢＹＴＥＱＣＬＭ１［ｘ］を含む。
【００２７】
プリデコード情報ビットｓ、ｅ、ｏｐおよびｒｏｐは、ｓビットアレイＢＹＴＥＱＳ、ｅビットアレイＢＹＴＥＱＥ、ｏｐビットアレイＢＹＴＥＱＰ２、ならびにｒｏｐ情報の２ビットのためのｒｏｐビットアレイＢＹＴＥＱＰ１およびＢＹＴＥＱＰ０に含まれ、その各エントリはＢＹＴＥＱ１０６における位置に対応する。図３において、ｘ番目の要素についてのプリデコード情報は、論理１であるとき、付随する未処理のバイトがｏｐコードバイトであることを示すＢＹＴＥＱＰ２［ｘ］と、ｘ８６命令を実行するのに必要なＲＯＰの数を示すＢＹＴＥＱＰ１［ｘ］およびＢＹＴＥＱＰ０［ｘ］と、付随する未処理のバイトがｘ８６命令の最初のバイトであるかどうかを示すＢＹＴＥＱＳ［ｘ］と、付随する未処理のバイトがｘ８６命令の最後のバイトであるかどうかを示すＢＹＴＥＱＥ［ｘ］とを含む。
【００２８】
図４に、より詳細に示されるＩＤＥＣＯＤＥ１０８は、２段のパイプラインデコーダであり、ＢＹＴＥＱ１０６からプリデコードされたｘ８６命令バイトを受け、それらをＲＯＰのそれぞれのシーケンスに変換し、複数の発行位置からＲＯＰを迅速に発行する。複数命令投入の機会を最大にするために、ほとんどの単純な命令に関しては変換はハードワイヤの高速変換経路で扱われ、これは図４の実施例において３つ以下のＲＯＰにマッピングするｘ８６命令に適用される。３を越えるＲＯＰを必要とする命令および頻繁には用いられない命令は、マイクロコードＲＯＭに含まれるマイクロコードシーケンスによって扱われる。ｘ８６命令が複数ＲＯＰ命令にマッピングされても、マイクロコードＲＯＭにマッピングされても、プリデコードされたｘ８６命令情報は複数の発行位置で複写され、各発行位置が独立して、および他の発行位置と並列に作用することを可能にする。
【００２９】
ＩＤＥＣＯＤＥ１０８において、ＲＯＰマルチプレクサＲＯＰＭＵＸ４００は、ＢＹＴＥＱ１０６のエントリを４つの発行位置４１０、４２０、４３０および４４０に送る。各発行位置において、高速コンバータ（たとえばＦＡＳＴＣＯＮＶ０  ４１２、ＦＡＳＴＣＯＮＶ１  ４２２、ＦＡＳＴＣＯＮＶ２  ４３２、またはＦＡＳＴＣＯＮＶ３  ４４２）は、「単純な」ｘ８６命令（すなわち３つ以下のＲＯＰへのマッピングをする命令）の、ｘ８６命令のマッピング先のシーケンスのＲＯＰの１つへの高速変換を行なう。各発行位置はまた、マイクロコードＲＯＭ（たとえばＭＲＯＭ０  ４１６、ＭＲＯＭ１  ４２６、ＭＲＯＭ２  ４３６、またはＭＲＯＭ３  ４４６）を有し、マイクロコードＲＯＭを用いて、滅多に用いられないｘ８６命令および３を越えるＲＯＰのＲＯＰシーケンスを必要とするｘ８６命令を、ｘ８６命令がマッピングするシーケンスのＲＯＰの１つに変換する。共通ステージＩＣＯＭＭＯＮ０  ４１４、ＩＣＯＭＭＯＮ１  ４２４、ＩＣＯＭＭＯＮ２  ４３４、およびＩＣＯＭＭＯＮ３  ４４４は、命令が高速経路命令であるかまたはマイクロコードＲＯＭ命令であるかにかかわらず特定の態様で効果的に扱うことができる、ｘ８６命令変換動作の一部を処理しかつパイプライン化する。ＲＯＰＳＥＬＥＣＴ０  ４１８、ＲＯＰＳＥＬＥＣＴ１  ４２８、ＲＯＰＳＥＬＥＣＴ２  ４３８、およびＲＯＰＳＥＬＥＣＴ３  ４４８の各々は、その関連する高速コンバータおよび共通経路の出力、またはその関連するメモリＲＯＭおよび共通経路の出力のいずれかを選択し、発行情報を発生する。ＲＯＰＳＨＡＲＥＤ４９０は、ＲＯＰＳＥＬＥＣＴ０  ４１８、ＲＯＰＳＥＬＥＣＴ１  ４２８、ＲＯＰＳＥＬＥＣＴ２  ４３８、およびＲＯＰＳＥＬＥＣＴ３
４４８からの情報に応答して、すべての発行位置によって共有されている資源に関する発行情報を発生する。ＩＤＥＣＯＤＥ１０８はＩＤＥＣＣＮＴＬ４６０によって制御される。
【００３０】
ＲＯＰＭＵＸ４００は、ＢＹＴＥＱ１０６における完全なプリデコードｘ８６命令をＩＤＥＣＯＤＥ１０８内の発行位置４１０、４２０、４３０および４４０の１つまたはそれ以上に割当てる機能を果たす。１つまたはそれ以上のプリデコードされたｘ８６命令は、ＢＹＴＥＱ１０６の先頭にあるｘ８６命令から始まって、ＢＹＴＥＱ１０６から、発行位置４１０、４２０、４３０および４４０の利用可能なものに同時に送られる。たとえば、すべての発行位置が利用可能であると仮定して、ＢＹＴＥＱ１０６における最初の４つのプリデコードされたｘ８６命令の各々が１つのＲＯＰにマッピングするのであれば、ＢＹＴＥＱ１０６の先頭にある第１のプリデコードされたｘ８６命令は発行位置０にマルチプレクスされ、第２のプリデコードされたｘ８６命令は発行位置１にマルチプレクスされ、第３のプリデコードされたｘ８６命令は発行位置２にマルチプレクスされ、第４のプリデコードされたｘ８６命令は発行位置３にマルチプレクスされる。その代わりに、ＢＹＴＥＱ１０６の第２のプリデコードされたｘ８６命令が２つのＲＯＰにマッピングするのであれば、第１のプリデコードされたｘ８６命令は発行位置０にマルチプレクスされ、第２のプリデコードされたｘ８６命令は発行位置１および２にマルチプレクスされ、第３のプリデコードされたｘ８６命令は発行位置３にマルチプレクスされる。
【００３１】
マイクロコードＲＯＭにマッピングせず、発行ウィンドウに完全に収まらないプリデコードされたｘ８６命令は、第１の発行ウィンドウにおいて利用可能であるできるだけ多くの発行位置４１０、４２０、４３０、および４４０に割当てられる。ＩＤＥＣＣＮＴＬ４６０は信号ＰＡＲＴＩＡＬＤＩＳＰ［１：０］を用いて、次のサイクルのキューの先頭にあるプリデコードされたｘ８６命令のために発行されるべき次のＲＯＰの数を示し、既に発行されたＲＯＰには発行位置が割当てられないようにする。
【００３２】
ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は、ＩＤＥＣＣＮＴＬ４６０において信号ＲＯＰｘＤＩＦＦ［１：０］から得られ、発行位置「ｘ」（ｘ＝０、１、２、３）の各々に関して発行されないで残っている次のＲＯＰの番号を示す。シーケンスの第１のＲＯＰは０番と考えられ、第２は１番と考えられ、以下同様である。具体的に言えば、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は、現在の発行ウィンドウから発行されると予測されたＲＯＰの数に基づいて選択されるＲＯＰｘＤＩＦＦ信号の１つから次のサイクルの間ラッチされる。たとえば、キューの先頭にある命令および次の命令の両方が３つのＲＯＰにマッピングすれば、ＲＯＰ０ＤＩＦＦおよびＲＯＰ１ＤＩＦＦはキューの先頭にある命令に対応し、一方ＲＯＰ２ＤＩＦＦおよびＲＯＰ３ＤＩＦＦは次の命令に対応する。ＲＯＰ０ＤＩＦＦは１であり、ＲＯＰ１ＤＩＦＦは２であり、ＲＯＰ２ＤＩＦＦは０であり、ＲＯＰ３ＤＩＦＦは１である。ＩＤＥＣＣＮＴＬ４６０が発行ウィンドウ内の４つのＲＯＰすべてが発行されるべきであると判断すると仮定すれば、ＲＯＰ３ＤＩＦＦがＰＡＲＴＩＡＬＤＩＳＰとして選択され、ラッチされる。ＰＡＲＴＩＡＬＤＩＳＰの値は、次の発行ウィンドウではしたがって１である。
【００３３】
ＲＯＰＭＵＸ４００の動作は、ＢＹＴＥＱ１０６に関して行なわれるスキャン機能のフローチャートである図５ないし図７に示される。ＢＹＴＥＱ１０６がシフト動作の後で有効になると、ＲＯＰＭＵＸ４００はＢＹＴＥＱ１０６を迅速に「スキャン」して、完全なプリデコードｘ８６命令およびこれらがマッピングするＲＯＰの数を識別し、これについてのある情報を得る。高速スキャンは、変換処理に対しより多くの時間を与え、プロセッサ１００において迅速に完了する必要がある。不必要な遅延を避けるために、スキャンは、好ましくは図１４ないし図５７に示される回路および同様の他のものを用いて本質的に同時に行なわれるが、他の論理回路も図８ないし図１３のアーキテクチャに示される機能を行なうように用いられ得る。図５ないし図７のフローチャートは行なわれるさまざまなスキャン動作を示し、これらのさまざまな動作の逐次的順序を示すものとして解釈されるべきではない。
【００３４】
動作５０２において、バイトキュースキャン機能は、ＢＹＴＥＱ１０６の先頭から始まり、全体で４つのＲＯＰにマッピングするすべての有効かつ完全な命令を識別する。４つのＲＯＰが検出される前にキューの最後に出会えば、バイトキュースキャン機能はＢＹＴＥＱ１０６のすべての有効かつ完全な命令を識別する。命令は、アレイＢＹＴＥＱＳにおけるそのそれぞれの開始ビットならびにアレイＢＹＴＥＱＶにおける有効ビットを検出することによって識別される。完全な命令は、命令の開始ビットがアレイＢＹＴＥＱＥに対抗の終了ビットを有すると判定することによって識別される。
【００３５】
動作５０２において、ＲＯＰＭＵＸ４００はまた、発行位置「ｘ」に関してそれが発行されるべき現在のＲＯＰのメンバーであるＲＯＰシーケンスにおける番号ならびにそれが発行されるべき次のＲＯＰのメンバーであるＲＯＰシーケンスにおける番号をそれぞれ示す制御信号ＲＯＰｘＮＵＭ［１：０］およびＲＯＰｘＤＩＦＦ［１：０］を発生する。たとえば、キューの先頭にある命令および次の命令の両方が３つのＲＯＰにマッピングすると、ＲＯＰ０ＮＵＭは０であり、ＲＯＰ１ＮＵＭは１であり、ＲＯＰ２ＮＵＭは２であり、ＲＯＰ３ＮＵＭは０であり、一方ＲＯＰ０ＤＩＳＰは１であり、ＲＯＰ１ＤＩＳＰは２であり、ＲＯＰ２ＤＩＳＰは０であり、ＲＯＰ３ＤＩＳＰは１である。
【００３６】
ＲＯＰＭＵＸ４００はまた、発行位置「ｘ」のＲＯＰが、対応するｘ８６命令からマッピングされるＲＯＰシーケンスの最後のＲＯＰであるかどうかを示す制御信号ＰＧＮＸＴ［ｘ］を発生する。ＲＯＰｘＤＩＦＦが、次の発行位置が新しいｘ８６命令からマッピングされる最初のＲＯＰを発行すべきであることを示す００であると、ＰＧＮＸＴ［ｘ］は０であり、それ以外ではＰＧＮＸＴ［ｘ］は１である。ＰＧＮＸＴ［ｘ］は、そのような情報を必要とする他のバイトキュースキャン論理回路、たとえば図５８に示されるバイトキューＳＥスキャン論理５２１０に供給される。
【００３７】
動作５０４において、動作５０２において識別された命令の各々におけるｏｐコードの位置は、アレイＩＳＥＬ０、ＩＳＥＬ１、ＩＳＥＬ２およびＩＳＥＬ３において識別され、かつ報告される。
【００３８】
動作５０６において、ＢＹＴＥＱ１０６の先頭にあるプリデコードされたｘ８６命令が、ＢＹＴＥＱＰ１［ｘ］、ＢＹＴＥＱＰ０［ｘ］が１１であるときに示されるマイクロコードＲＯＭマッピング命令であるかどうかの判断が行なわれる。この判断はＲＯＰＭＵＸ４００において行なわれ、信号ＲＯＰＭＲＯＭとして報告される。ＢＹＴＥＱ１０６の先頭にあるプリデコードされたｘ８６命令がマイクロコードＲＯＭマッピング命令であれば、図６の動作が行なわれる。ＢＹＴＥＱ１０６の先頭にあるプリデコードされたｘ８６命令がマイクロコードＲＯＭマッピング命令でなければ、図７の動作が行なわれる。
【００３９】
ＢＹＴＥＱ１０６の先頭にあるプリデコードされたｘ８６命令がマイクロコードＲＯＭマッピング命令でなければ、発行位置４１０、４２０、４３０および４４０が、動作５３２（図７）で、各プリデコードされたｘ８６命令がマッピングするＲＯＰの数および利用可能である発行位置の数に依存して、プリデコードされたｘ８６命令に割当てられる。この態様で割当てられた発行位置に関するＲＯＰｘＮＵＭはそのそれぞれの値を割当てられ、制御信号ＲＯＰＭＲＯＭはアサートされず、各発行位置についてのＭＵＸＶＡＬ［ｘ］はアサートされる。
【００４０】
たとえば、キューの先頭にある命令Ｉ１に関するｏｐコードがＢＹＴＥＱ１０６の位置０にあると仮定する。命令Ｉ１に関するＢＹＴＥＱＰ１［０］およびＢＹＴＥＱＰ０［０］の値は、命令Ｉ１が３つのＲＯＰにマッピングすることを示す１０である。最初の３つの発行位置０、１および２が利用可能であり、命令Ｉ１に割当てられる。次の命令Ｉ２に関するｏｐコードがＢＹＴＥＱ１０６の位置５にあるとさらに仮定する。ＢＹＴＥＱＰ１［５］およびＢＹＴＥＱＰ０［５］の値もまた、命令Ｉ２が３つのＲＯＰにマッピングすることを示す１０である。発行位置は１つしか利用可能でないので、これは命令Ｉ２に割当てられる。発行位置資源は、現在のデコードステージでは命令Ｉ２に対して完全に割当てるには利用可能でないことに注目されたい。必要とされる残りの２つの発行位置は次のサイクルで命令Ｉ２に割当てられ、これは命令Ｉ２がＢＹＴＥＱ１０６の先頭に、発行されるべき次のＲＯＰの番号を示す１にセットされる制御信号ＰＡＲＴＩＡＬＤＩＳＰに従ってシフトされた後に行なわれる。現在の発行ウィンドウでは未使用でありＢＹＴＥＱ１０６の先頭にない何らかのｘ８６命令がマイクロコードＲＯＭにマッピングする場合には、発行位置がまだ割当てられる。しかしながら、このような態様で割当てられた発行位置に関するＲＯＰｘＮＵＭは「ドントケア」である、というのは制御信号ＲＯＰＭＲＯＭがアサートされず、マイクロコードＲＯＭにマッピングされるがキューの先頭にはないｘ８６命令に割当てられる発行位置から発行されるＲＯＰは有効とマークされないからである（発行位置ｘに関するＭＵＸＶＡＬ［ｘ］はアサートされない）。無効ＲＯＰはプロセッサ１００の後続のパイプラインステージで処理されない。
【００４１】
動作５３４において、各発行位置はＢＹＴＥＱ１０６にストアされたプリデコードｘ８６命令からの４つの要素を受ける。４つの要素とは、バイトキュー位置Ｙ−１にある統合プレフィックスデータ要素、バイトキュー位置Ｙにあるｏｐコード要素、バイトキュー位置Ｙ＋１にあるｍｏｄ  ｒ／ｍ要素、および位置Ｙ＋２にあるｓｉｂ要素であり、ここでＹは命令のｏｐコード要素のＢＹＴＥＱ１０６における位置である。
【００４２】
動作５３６において、キューの次の先頭は、発行される１、２、３および４のＲＯＰに関して定められる。この情報は、ＩＣＡＣＨＥ１０４に供給され、ＢＹＴＥＱ１０６をシフトするのに用いられる。
【００４３】
ＢＹＴＥＱ１０６の先頭にあるｘ８６命令がマイクロコードＲＯＭマッピング命令であれば、４つの発行位置のすべてがマイクロコードＲＯＭマッピング命令に割当てられる。マイクロコードＲＯＭマッピング命令に関しては、ＢＹＴＥＱＰ１およびＢＹＴＥＱＰ０の値は１１であり、命令がマイクロコードＲＯＭマッピングであることを示す。４つの発行位置資源の割当が、ｘ８６命令がマッピングするＲＯＰシーケンスの発行を完了させるのに十分でない場合には、４つの発行位置資源が、再び次のサイクルでマイクロコードマッピング命令に割当てられる。この態様で割当てられた発行位置に関するＲＯＰｘＮＵＭは使用されていないので「ドントケア」であり、発行位置は有効とマークされ（ＭＵＸＶＡＬ［３：０］ビットはアサートされる）、制御信号ＲＯＰＭＲＯＭは、マイクロコードマッピングｘ８６命令がキューの先頭にあるのでアサートされる。
【００４４】
動作５２２において、ＩＤＥＣＣＮＴＬ４６０はマイクロコードＲＯＭエントリポイントを形成し、ＭＲＯＭ０  ４１６、ＭＲＯＭ１  ４２６、ＭＲＯＭ２４３６、およびＭＲＯＭ３  ４４６に含まれるＲＯＰシーケンスにアクセスする。
【００４５】
動作５２４において、ＢＹＴＥＱ１０６の先頭にあるマイクロコードマッピングｘ８６命令からの統合プレフィックスデータ要素、ｏｐコード要素、ｍｏｄｒ／ｍ要素、およびｓｉｂ要素は、信号ＲＯＰｘＰＲＥ、ＲＯＰｘＯＰ、ＲＯＰｘＭＯＤＲＭ、およびＲＯＰｘＳＩＢ要素としてＩＣＯＭＭＯＮｘによって使用されるためにすべての発行位置に供給される。統合プレフィックスデータ要素はバイトキュー位置Ｙ−１にあり、ｏｐコード要素はバイトキュー位置Ｙにあり、ｍｏｄ  ｒ／ｍ要素はバイトキュー位置Ｙ＋１にあり、ｓｉｂ要素は位置Ｙ＋２にあり、ここでＹはキューの先頭にある命令のｏｐコード要素のＢＹＴＥＱ１０６における位置である。命令の開始および終了ビットから定められるとき、プリデコードされたｘ８６命令に要素がなければ、不在の要素に対応する発行位置で受けられる情報は「ドントケア」情報として扱われる。
【００４６】
動作５２６において、キューの次の先頭が、発行される１、２、３および４のＲＯＰに関して定められる。この情報は、マイクロコードマッピングｘ８６命令がすべて発行される場合にＢＹＴＥＱ１０６のシフトのために用いられる。
【００４７】
ｏｐコードならびにｒｏｐ数アレイＢＹＴＥＱＰ２、ＢＹＴＥＱＰ１およびＢＹＴＥＱＰ０を処理するためのＲＯＰＭＵＸ４００において用いられるのに適している高速バイトキュースキャン論理アーキテクチャ６９０が図８および図９に示される。スキャン論理アーキテクチャ６９０は、それぞれ発行位置０、１、２および３に対応する４つのステージ６００、６１０、６２０および６３０を含むが、より小さい数またはより大きい数のステージが所望されるように用いられてもよい。スキャン論理アーキテクチャ６９０への入力の１つは、アレイＢＹＴＥＱＰ２［１５：０］の出力であり、これは、ＢＹＴＥＱ１０６のｏｐコードバイトの位置を示す１６ビットバスである。スキャン論理アーキテクチャ６９０のステージ６００、６１０、６２０および６３０からの出力は、それぞれＩＳＥＬ０、ＩＳＥＬ１、ＩＳＥＬ２およびＩＳＥＬ３を含む。出力ビットＩＳＥＬ０［１５：０］は、第１の発行位置に関するｏｐコードバイトの位置を示す１６ビット出力バスを構成する。ビットＩＳＥＬ１［１５：０］は、第２の発行位置に関するｏｐコードバイトの位置を示す１６ビット出力バスを構成する。ビットＩＳＥＬ２［１５：０］は、第３の発行位置に関するｏｐコードバイトの位置を示す１６ビット出力バスを構成する。ビットＩＳＥＬ３［１５：０］は、第４のｏｐコード位置に関するｏｐコードバイトの位置を示す１６ビット出力バスを構成する。これらの出力は、ＲＯＰＭＵＸ４００の１６：１マルチプレクサ（図示せず）のような切換論理に与えられ、ＢＹＴＥＱ１０６から、それぞれの処理経路ＦＡＳＴＣＯＮＶ０  ４１２およびＩＣＯＭＭＯＮ０  ４１４、ＦＡＳＴＣＯＮＶ１４２２およびＩＣＯＭＭＯＮ１  ４２４、ＦＡＳＴＣＯＮＶ２  ４３２およびＩＣＯＭＭＯＮ２  ４３４、ならびにＦＡＳＴＣＯＮＶ３  ４４２およびＩＣＯＭＭＯＮ３  ４４４に命令ｏｐコードを送る。
【００４８】
次の例は、入力バスＢＹＴＥＱＰ２［１５：０］のビットと、出力バスＩＳＥＬ０［１５：０］、ＩＳＥＬ１［１５：０］、ＩＳＥＬ２［１５：０］およびＩＳＥＬ３［１５：０］のビットとの関係を示す。たとえば、信号ＢＹＴＥＱＰ２［１５：０］が、第１の命令の第１のｏｐコードバイトがバイトキュー位置０にあり、第２の命令の第１のｏｐコードバイトがバイトキュー位置３にあり、第３の命令の第１のｏｐコードバイトがバイトキュー位置１０にあり、第４の命令の第１のｏｐコードバイトがバイトキュー位置１３にあることを示す２進１０１０−０１００−００００−１００１であると仮定する。第１の例に関しては、キューの先頭にある命令およびすぐ後に続く命令の両方が３つのＲＯＰにマッピングすると仮定する。この場合、スキャン論理１７００の出力ＩＳＥＬ０［１５：０］、ＩＳＥＬ１［１５：０］、ＩＳＥＬ２［１５：０］およびＩＳＥＬ３［１５：０］は以下の表１に示される。
【００４９】
【表１】
0003714999.tif 000002
【００５０】
同じｏｐコードが最初の３つの発行位置に送られるので、ＩＳＥＬ０、ＩＳＥＬ１およびＩＳＥＬ２が同じであることに注目されたい。第２の例については、比較の目的のために、ＢＹＴＥＱ１０６の最初の４つの命令が各々、１つのＲＯＰにマッピングすると仮定する。この場合、スキャン論理１７００の出力ＩＳＥＬ０［１５：０］、ＩＳＥＬ１［１５：０］、ＩＳＥＬ２［１５：０］およびＩＳＥＬ３［１５：０］は、以下の表２に示される。
【００５１】
【表２】
0003714999.tif 000003
【００５２】
異なるｏｐコードが４つの発行位置に送られるので、ＩＳＥＬ０、ＩＳＥＬ１、ＩＳＥＬ２およびＩＳＥＬ３が異なっていることに注目されたい。
【００５３】
利点として、スキャン論理アーキテクチャ６９０は、高速スキャンを達成するようにルックアヘッド論理を用いる。４つのステージ６００、６１０、６２０および６３０の各々は、ルックアヘッドを容易にするようにビット処理論理の４つのグループを含むが、より小さい数またはより大きい数のグループが必要に応じて用いられてもよい。たとえば、発行位置０に関するステージ６００は、第１のグループＧＰ（０、０）と、グループＧＰ（１、０）、ＧＰ（２、０）およびＧＰ（３、０）に接続されるルックアヘッド信号発生論理ＬＡＧ（０）と、部分的発行信号発生論理ＰＤＧ（０）と、第１のｏｐコード識別信号発生論理ＦＯＧ（０）とを含み、発行位置１に関するステージ６１０は、第１のグループＧＰ（０、１）と、グループＧＰ（１、１）、ＧＰ（２、１）およびＧＰ（３、１）に接続されるルックアヘッド信号発生論理ＬＡＧ（１）と、第１のｏｐコード識別信号発生論理ＦＯＧ（１）とを含み、発行位置２に関するステージ６２０は、第１のグループＧＰ（０、２）と、グループＧＰ（１、２）、ＧＰ（２、２）およびＧＰ（３、２）に接続されるルックアヘッド信号発生論理ＬＡＧ（２）と、第１のｏｐコード識別信号発生論理ＦＯＧ（２）とを含み、発行位置３に関するステージ６３０は、第１のグループＧＰ（０、３）と、グループＧＰ（１、３）、ＧＰ（２、３）およびＧＰ（３、３）に接続されるルックアヘッド信号発生論理ＬＡＧ（３）と、第１のｏｐコード識別信号発生論理ＦＯＧ（３）とを含む。
【００５４】
各グループの出力は、３つの異なる行先に供給される。たとえば、グループＧＰ（０、０）の出力を考える。第１の組の出力６０２は、次の発行位置に割当てられるべきＲＯＰのＲＯＰ数に関し、ＲＯＰ数信号発生論理ＲＮＧ（０）に供給され、たとえば図１１のＸＤＳＰ０［ｘ］およびＸＤＳＰ０［ｘ＋１６］に示される。ＲＮＧ（０）は、第１のステージ６００のすべてのグループＧＰ（０、０）、ＧＰ（０、１）、ＧＰ（０、２）およびＧＰ（０、３）から入力を受け、ＲＯＰ数信号ＲＯＰ０ＤＩＦＦ［１：０］、ＲＯＰ１ＮＵＭ［１：０］およびＰＧＮＸＴ［０］を発生する。第２の組の出力６０４は、まだ完全に発行位置に割当てられていない命令のためのｏｐコード位置の識別に関し、第２のステージ６１０のＦＯＧ（１）およびＬＡＧ（１）に供給され、たとえば図１１のＸＮ１［ｘ］に示される。ＦＯＧ（１）およびＬＡＧ（１）は、第１のステージ６００のすべてのグループＧＰ（０、０）、ＧＰ（０、１）、ＧＰ（０、２）およびＧＰ（０、３）から入力を受け、それぞれ第２のステージ６１０のグループに対する第１のｏｐコード識別信号およびルックアヘッド信号を発生する。第３の組の出力６０６は、発行位置を最も新しく割当てられたＲＯＰの番号、および関連するｘ８６命令がマッピングするＲＯＰの数に関し、第２のステージ６１０のグループＧＰ（０、１）に供給され、たとえばＤ１Ｎ１［ｘ］、Ｄ０Ｎ１［ｘ］、ＮＢＱＰ１［ｘ］、ＮＢＱＰ０［ｘ］である（信号ＸＮ１［ｘ］がこの第３の組の一部でもあることに注目されたい）。
【００５５】
ステージ６００、６１０、６２０および６３０の間で、発行位置を最も新しく割当てられたＲＯＰの番号、および関連するｘ８６命令がマッピングするＲＯＰの数に関する信号は、以下の表３に示されるように伝搬し、処理され、たとえば、キューの先頭にある命令およびすぐに後に続く命令の両方が３つのＲＯＰにマッピングし、すべての後続のＲＯＰが１つのＲＯＰにマッピングし、最初にキューの先頭にある命令がマッピングするＲＯＰシーケンスは、部分的に発行されていない。
【００５６】
【表３】
0003714999.tif 000004
【００５７】
第１の発行ウィンドウにおいて、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は００である。第１のステージにおいて、第１のバイトキュー位置０がｏｐコードを含むので、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置０からとられ、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］から導出されるＲＯＰ数と比較される。一致しなければ、ＲＯＰ数は、１だけインクリメントされ、変更されない「ｏｐコード位置」アレイとともに第２のステージに供給される。第２のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置０からとられ、第１のステージにより供給されるＲＯＰ数と比較される。一致しなければ、ＲＯＰ数は、１だけインクリメントされ、変更されない「ｏｐコード位置」アレイとともに第３のステージに供給される。第３のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置０からとられ、第２のステージにより供給されるＲＯＰ数と比較される。一致すれば、ＲＯＰ数は、００にリセットされ、第４のステージに供給される。「ｏｐコード位置」アレイは、発行位置が完全に割当てられていないｏｐコードを識別するビットをマスクすることにより変更され、第４のステージに供給される。第４のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置３からとられ、第３のステージにより供給されるＲＯＰ数と比較される。一致がなければ、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は、０１にセットされ、キューの次の先頭であるべき命令からマッピングされる３つのＲＯＰのうちの１つが発行されていることを示す。
【００５８】
次の発行ウィンドウの準備をするために、第２の命令はキューの先頭にシフトされる。ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は現在０１である。第１のステージにおいて、第１のバイトキュー位置０がまた、偶然ｏｐコードを含むので、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置０からとられ、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］から導出されるＲＯＰ数と比較される。一致がなければ、ＲＯＰ数は、１だけインクリメントされ、変更されない「ｏｐコード位置」アレイとともに第２のステージに供給される。第２のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置０からとられ、第１のステージにより供給されるＲＯＰ数と比較される。一致すれば、ＲＯＰ数は、００にリセットされ、第３のステージに供給される。「ｏｐコード位置」アレイは、発行位置が完全に割当てられていないｏｐコードを識別するビットをマスクすることにより変更され、第３のステージに供給される。第３のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置７からとられ、第２のステージにより供給されるＲＯＰ数と比較される。一致すれば、ＲＯＰ数は、００にリセットされ、第４のステージに供給される。「ｏｐコード位置」アレイは、発行位置が完全に割当てられていないｏｐコードを識別するビットをマスクすることにより変更され、第４のステージに供給される。第４のステージにおいて、「ＲＯＰの数」データは、ＲＯＰの数アレイの位置１０からとられ、第３のステージにより供給されるＲＯＰ数と比較される。一致すれば、ＰＡＲＴＩＡＬＤＩＳＰ［１：０］は、００にセットされ、キューの次の先頭であるべき命令からマッピングされるＲＯＰのどれも発行されていないことを示す。
【００５９】
図１０−図１３は、他の発行位置の対応する要素の典型例であるが同一ではない、スキャン論理アーキテクチャ６９０のいくつかの要素をより詳細に示す。図１０ないし図１３に示される要素のいくつかが、はっきりとさせるために図８および図９から省かれていることに注目されたい。たとえば、図１０は、ＦＯＧ（１）、ＦＯＧ（２）およびＦＯＧ（３）に対応するＦＯＧ（０）と、ＬＡＧ（１）とＬＡＧ（２）およびＬＡＧ（３）に対応するＬＡＧ（０）とを示し、図１０はまたＰＤＧ（０）も示す。図１１は、グループＧＰ（０、１）、ＧＰ（０、２）およびＧＰ（０、３）の同様のビット処理論理回路に対応する４つのビット処理論理回路Ｆ７（０、０）、Ｆ７（１、０）、Ｆ７（２、０）およびＦ７（３、０）を示すＧＰ（０、０）の詳細である。図１１はまた、ＲＯＰ数信号発生回路Ｆ８（０、０）、Ｆ９（０、０）およびＦ１０（０、０）も示す。図１２は、グループＧＰ（１、１）、ＧＰ（１、２）、ＧＰ（１、３）、ＧＰ（２、０）、ＧＰ（２、１）、ＧＰ（２、２）、ＧＰ（２、３）、ＧＰ（３、０）、ＧＰ（３、１）、ＧＰ（３、２）およびＧＰ（３、３）の同様のビット処理論理回路に対応する４つのビット処理論理回路Ｆ１１（４、０）、Ｆ１１（５、０）、Ｆ１１（６、０）およびＦ１１（７、０）を示すＧＰ（１、０）の詳細である。図１２はまた、ＲＯＰ情報発生回路Ｆ１２（１、０）およびＦ１３（１、０）も示す。図１３は、グループＧＰ（１、１）の４つのビット処理論理回路Ｆ１４（４、１）、Ｆ１４（５、１）、Ｆ１４（６、１）およびＦ１４（７、１）を示す。図１３はまた、ＲＯＰ情報発生回路Ｆ１５（１、１）およびＦ１６（１、１）も示す。図１０ないし図１３のアーキテクチャにおいて、スキャン機能は、多くのサブ回路を４ビットのグループへグループ化し、ルックアヘッドサブ回路がその発行位置に関して、より上位のグループへの入力を与えることにより、各発行位置に関して、高速化される。
【００６０】
発行位置０に関するスキャン論理アーキテクチャ６９０の動作は、図１０、図１１、図１２および図１３に示される実施例に対しては以下のとおりである。図１０を参照する。ＰＤＧ（０）は、キューの先頭にあるプリデコードされたｘ８６命令のために発行されるべき次のＲＯＰの番号を示す２進量ＰＤＩＳＰ１、ＰＤＩＳＰ０を発生する要素Ｆ１およびＦ２を含む。図１４および図１５に示される要素Ｆ１およびＦ２の実施例において、量ＰＤＩＳＰ１、ＰＤＩＳＰ０は、インバータを介してＰＡＲＴＩＡＬＤＩＳＰ［１：０］から直接に得られる。量ＰＤＩＳＰ１、ＰＤＩＳＰ０は、第１のステージの４つのグループＧＰ（０、０）、ＧＰ（１、０）、ＧＰ（２、０）およびＧＰ（３、０）の各々に供給される。ＢＹＴＥＱＰ２アレイからの４ビットのグループの各々に関しては、ＦＯＧ（０）は、グループの最初にアサートされたビットを識別する。ＦＯＧ（０）は、要素Ｆ３およびＦ４を含み、その実施例は、それぞれ図１６ならびに図１７および図１８に示される。それぞれの識別指示は、ステージ０の４つのグループＧＰ（０、０）、ＧＰ（１、０）、ＧＰ（２、０）およびＧＰ（３、０）の各々に供給される。ＢＹＴＥＱＰ２アレイからの第１のグループ以外の４ビットのグループの各々に関しては、ＬＡＧ（０）は、最初にアサートされたビットが、該グループより先行しているグループのいずれかに現われるかどうかを指示する。ＬＡＧ（０）は、要素Ｆ５およびＦ６を含み、その実施例は、それぞれ図１９および図２０に示される。要素Ｆ６は、ＲＯＰＭＵＸ４００の別の回路、たとえばバイトキューＳＥスキャン論理５２１０（図５８）などから信号ＡＳＫＭＲＯＭ［０］を受ける。ＡＳＫＭＲＯＭ［０］は、メモリＲＯＭ命令がキューの先頭にあることを示す。最初にアサートされたビットがグループより先行しているグループのいずれかに現われるかどうかのそれぞれの指示は、ステージ０の３つのグループＧＰ（１、０）、ＧＰ（２、０）およびＧＰ（３、０）の各々に供給される。
【００６１】
図１１は、グループＧＰ（０、０）のためのビット処理論理回路Ｆ７（０、０）、Ｆ７（１、０）、Ｆ７（２、０）およびＦ７（３、０）を示す。要素Ｆ７は、出力ＩＳＥＬ０［ｘ］に加えて、出力ＸＮ１［ｘ］を有し、信号ＢＹＴＥＱＰ２［ｘ］は、反転状態で要素Ｆ７を通過されるか、またはマスクされる。要素Ｆ７はまた、そのＸＳＥＬ０［ｘ］入力が、アサートされて、ＢＹＴＥＱＰ２［ｘ］が該ビットグループの最初にアサートされたビットであることを示すのでなければ、量Ｄ１Ｎ１、Ｄ０Ｎ１に対して００などのデフォルト値を与える。この場合、２つの条件のうち１つが起こり得る。すなわち（ａ）発行位置を割当てられているＲＯＰがシーケンスの最後のＲＯＰでないか、または（ｂ）発行位置を割当てられているＲＯＰがシーケンスの最後のＲＯＰである。「（ａ）」の場合、要素Ｆ７は、そのＩＳＥＬ０［ｘ］出力をアサートし、量ＰＤＩＳＰ１［ｘ］、ＰＤＩＳＰ０［ｘ］を１だけインクリメントし、その結果を次のステージに量Ｄ１Ｎ１、Ｄ０Ｎ１として供給し、ビットＢＹＴＥＱＰ２［ｘ］を反転状態で通過させる。「（ｂ）」の場合、要素Ｆ７は、そのＩＳＥＬ０［ｘ］出力をアサートし、量ＰＤＩＳＰ１［ｘ］、ＰＤＩＳＰ０［ｘ］を０にリセットし、その結果を次のステージに量Ｄ１Ｎ１、Ｄ０Ｎ１として供給し、ビットＢＹＴＥＱＰ２［ｘ］を出力ＸＮ１［ｘ］でマスクする。
【００６２】
信号Ｄ１Ｎ１およびＤ０Ｎ１は、反転され、信号ＸＤＳＰ０［ｘ］およびＸＤＳＰ０［ｘ＋１６］として、それぞれ要素Ｆ８およびＦ９に供給される。要素Ｆ８およびＦ９は組合わされて、信号Ｐ１ＦＦ０［０］およびＰ０ＦＦ０［０］を発生し、これらは、アレイＢＹＴＥＱＰ２の最初にアサートされたビットがグループＧＰ（０、０）に発生せず、かつ発行位置のＲＯＰがＲＯＰシーケンスの最後のＲＯＰでない場合には、１だけインクリメントされる値ＰＡＲＴＩＡＬＤＩＳＰ［１：０］を事実上表わす。それ以外では、信号Ｐ１ＦＦ０［０］およびＰ０ＦＦ０［０］は、デフォルト値を有する。
【００６３】
ステージ０のすべてのグループからの信号Ｐ１ＦＦ０およびＰ０ＦＦ０は、要素Ｆ１０において組合わされる。これらの信号はすべて、アレイＢＹＴＥＱＰ２の最初にアサートされたビットがステージ０に発生する場合を除いて、デフォルト値を有する。この場合、１対の信号Ｐ１ＦＦ０およびＰ０ＦＦ０は、変更された値ＰＡＲＴＩＡＬＤＩＳＰ［１、０］を表わし、この値は、量ＲＯＰ０ＤＩＦＦ［１：０］およびＲＯＰ１ＮＵＭ［１：０］、ならびに信号ＰＧＮＸＴ［０］を導出するように用いられる。
【００６４】
図１２は、グループＧＰ（１、０）のためのビット処理論理回路Ｆ１１（４、０）、Ｆ１１（５、０）、Ｆ１１（６、０）およびＦ１１（７、０）を示す。要素Ｆ１１は、要素Ｆ７のＸＳＥＬ０［ｘ］入力に対応する、その入力ＳＥＬ０［ｘ］の影響を除いて、要素Ｆ７と同様である。ＳＥＬ０［ｘ］が、アサートされて、ＢＹＴＥＱＰ２［ｘ］が、ビットグループの最初にアサートされたビットであることを示す。しかしながら、Ｐ０［ｘ］がアサートされて、アレイＢＹＴＥＱＰ２の最初にアサートされたビットが、ステージ０の先行しているビットグループに存在しないことを示すのでなければ、入力Ｐ０［ｘ］は、ＳＥＬ０［ｘ］を阻止する。
【００６５】
信号Ｄ１Ｎ１およびＤ０Ｎ１は、反転され、信号ＸＤＳＰ０［ｘ］およびＸＤＳＰ０［ｘ＋１６］としてそれぞれ要素Ｆ１２およびＦ１３に供給される。組合わされて、要素Ｆ１２およびＦ１３は、信号Ｐ１ＦＦ０［１］およびＰ０ＦＦ０［１］を発生し、これらは、アレイＢＹＴＥＱＰ２の最初にアサートされたビットがグループＧＰ（１、０）に発生し、かつ発行位置のＲＯＰがＲＯＰシーケンスの最後のＲＯＰでない場合には、１だけインクリメントされた値ＰＡＲＴＩＡＬＤＩＳＰ［１、０］を事実上表わす。そうでなければ、信号Ｐ１ＦＦ０［１］およびＰ０ＦＦ０［１］は、デフォルト値を有する。要素Ｆ１２およびＦ１３からの信号Ｐ１ＦＦ０およびＰ０ＦＦ０は、要素Ｆ１０に送られる。
【００６６】
図１３は、グループＧＰ（１、１）のためのビット処理論理回路Ｆ１４（４、１）、Ｆ１４（５、１）、Ｆ１４（６、１）およびＦ１４（７、１）を示す。要素Ｆ１４は、本質的には要素Ｆ１１と同じであるが、入力および出力信号名が異なっている。
【００６７】
信号Ｄ１Ｎ２およびＤ０Ｎ２は、反転され、信号ＸＤＳＰ１［ｘ］およびＸＤＳＰ１［ｘ＋１６］としてそれぞれ要素Ｆ１５およびＦ１６に供給される。要素Ｆ１５およびＦ１６は要素Ｆ１２およびＦ１３と本質的には同じであるが、入力および出力信号名が異なっている。
【００６８】
スキャン論理アーキテクチャ６９０の要素の実施例が図１４−図５７に示される。図１４−図５７のゲートのいくつかは、高速トランジスタに接続されるべき入力を示すドットによりマークをつけられた１つの入力を有する。図１４−図５７のゲートの他のものは、パスゲートが論理機能を実現するように用いられることを示す「ＣＫ」によりマークをつけられた１つの入力を有する。第１の発行位置に関するステージ０は、図１４−図２７に示され、ここでＰＤＧが図１４（Ｆ１）および図１５（Ｆ２）に示され、ＦＯＧ（０）が図１６（Ｆ３）、図１７（Ｆ４Ａ）および図１８（Ｆ４Ｂ）に示され、ＬＡＧ（０）が図１９（Ｆ５）および図２０（Ｆ６）に示され、グループＧＰ（０、０）が図２１（Ｆ７）、図２２（Ｆ８）および図２３（Ｆ９）に示され、グループＧＰ（１、０）、ＧＰ（２、０）およびＧＰ（３、０）が図２５（Ｆ１１）、図２６（Ｆ１２）および図２７（Ｆ１３）に示され、ステージ０のＲＯＰ数信号発生論理ＲＮＧ（０）が図２４（Ｆ１０）に示される。第２の発行位置に関するステージ１は、図２８−図３７に示され、ここでＦＯＧ（１）が図２８および図２９に示され、ＬＡＧ（１）が図３０に示され、グループＧＰ（０、１）が図３１、図３２および図３３に示され、グループＧＰ（１、１）、ＧＰ（２、１）およびＧＰ（３、１）が図３５、図３６、および図３７に示され、ステージ１のＲＯＰ数信号発生論理ＲＮＧ（１）が図３４に示される。第３の発行位置に関するステージ２は、図３８−図４７に示され、ここでＦＯＧ（２）が図３８および図３９に示され、ＬＡＧ（２）が図４０に示され、グループＧＰ（０、２）が図４１、図４２および図４３に示され、グループＧＰ（１、２）、ＧＰ（２、２）およびＧＰ（３、２）が図４５、図４６および図４７に示され、ステージ２のＲＯＰ数信号発生論理ＲＮＧ（２）が図４４に示される。第４の発行位置に関するステージ３は、図４８−図５７に示され、ここでＦＯＧ（３）が図４８および図４９に示され、ＬＡＧ（３）が図５０に示され、グループＧＰ（０、３）が図５１、図５２および図５３に示され、グループＧＰ（１、３）、ＧＰ（２、３）およびＧＰ（３、３）が図５５、図５６および図５７に示され、ステージ３のＲＯＰ数信号発生論理ＲＮＧ（３）が図５４に示される。
【００６９】
図１４−図５７のゲートレベル回路の多くは、グループＧＰ（０、０）、ＧＰ（１、０）およびＧＰ（１、１）に含まれる他の回路と同様の回路構造を含むか、またはその単純にされた変更例である。したがって、次の回路動作の説明では、グループＧＰ（０、０）、ＧＰ（１、０）およびＧＰ（１、１）に含まれる回路に焦点を合わせ、不必要に長い明細書を避ける。図１４−図５７に示される他の回路の動作は、図面および次の説明から容易に明らかになる。
【００７０】
要素Ｆ１のための論理回路の実施例は、図１４に示される。信号ＰＡＲＴＩＡＬＤＩＳＰ［１］は、インバータ８０２および８０４によりバッファされ、ＰＤＩＳＰ１［０］を発生し、インバータ８０２および８０６によりバッファされＰＤＩＳＰ１［１］を発生し、インバータ８０２および８０８によりバッファされＰＤＩＳＰ１［２］を発生し、インバータ８０２および８１０によりバッファされＰＤＩＳＰ１［３］を発生し、インバータ８０２および８１２によりバッファされＲＯＰ０ＮＵＭ［１］を発生する。
【００７１】
要素Ｆ２のための論理回路の実施例は、図１５に示される。信号ＰＡＲＴＩＡＬＤＩＳＰ［０］は、インバータ９０２および９０４によりバッファされ、ＰＤＩＳＰ０［０］を発生し、インバータ９０２および９０６によりバッファされＰＤＩＳＰ０［１］を発生し、インバータ９０２および９０８によりバッファされＰＤＩＳＰ０［２］を発生し、インバータ９０２および９１０によりバッファされＰＤＩＳＰ０［３］を発生し、インバータ９０２および９１２によりバッファされＲＯＰ０ＮＵＭ［０］を発生する。
【００７２】
要素Ｆ３のための論理回路の実施例は、図１６に示される。アレイＢＹＴＥＱＰ２［１５：０］は、１組の１６のインバータによりビット単位で反転され、アレイＸＩＮ［１５：０］を発生する。
【００７３】
要素Ｆ４のための論理回路の実施例は、図１７および図１８に示される。図１７に示されるように、ビットＸＩＮ［０］が、２つの直列接続されたインバータを含むゲートグループ１１０２によりバッファされ、信号ＸＳＥＬ０［０］を発生する。ＸＳＥＬ０［０］は、本質的にはＢＹＴＥＱＰ２［０］の反転されたものである。ビットＸＩＮ［１：０］が、インバータを介してＸＩＮ［１］を受けかつＸＩＮ［０］を直接に受けるＮＡＮＤゲートを含むゲートグループ１１０４に与えられ、信号ＸＳＥＬ０［１］を発生する。信号ＸＳＥＬ０［１］は、ＸＩＮ［０］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［１］の反転されたものであり、それ以外では論理１である。ビットＸＩＮ［２：０］が、ＸＩＮ［２］をインバータを介して受けかつＸＩＮ［１：０］を直接に受けるＮＡＮＤゲートを含むゲートグループ１１０６に与えられ、信号ＸＳＥＬ０［２］を発生する。信号ＸＳＥＬ０［２］は、ＸＩＮ［１］およびＸＩＮ［０］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［２］の反転されたものであり、そうでなければ論理１である。ビットＸＩＮ［３：０］が、ＸＩＮ［３］をインバータを介して受けかつＸＩＮ［２：０］を直接に受けるＮＡＮＤゲートを含むゲートグループ１１０８に与えられ、信号ＸＳＥＬ０［３］を発生する。信号ＸＳＥＬ０［３］は、ＸＩＮ［２］、ＸＩＮ［１］およびＸＩＮ［０］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［３］の反転されたものであり、そうでなければ論理１である。
【００７４】
図１８は、ビットグループＸＩＮ［７：４］、ＸＩＮ［１１：８］およびＸＩＮ［１５：１２］のための機能Ｆ４を示す。たとえばビットグループＸＩＮ［７：４］に適用される機能Ｆ４を考える。ビットＸＩＮ［４］が、１つのインバータを含むゲートグループ１２０２によりバッファされ、信号ＳＥＬ０［４］を発生する。ＳＥＬ０［４］は本質的にはＢＹＴＥＱＰ２［４］である。ビットＸＩＮ［５：４］が、ＸＩＮ［５］をインバータを介して受けかつＸＩＮ［４］を直接に受けるＮＡＮＤゲートを含むゲートグループ１２０４に与えられ、次にインバータに与えられ、信号ＳＥＬ０［５］を発生する。信号ＳＥＬ０［５］は、ＸＩＮ［４］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［５］であり、そうでなければ論理０である。ビットＸＩＮ［６：４］が、ＸＩＮ［６］をインバータを介して受けかつＸＩＮ［５：４］を直接に受けるＮＡＮＤゲートを含むゲートグループ１２０６に与えられ、信号ＳＥＬ０［６］を発生する。信号ＸＳＥＬ０［６］は、ＸＩＮ［５］およびＸＩＮ［４］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［６］の反転されたものであり、そうでなければ論理０である。ビットＸＩＮ［７：４］が、ＸＩＮ［７］をインバータを介して受けかつＸＩＮ［６：４］を直接に受けるＮＡＮＤゲートを含むゲートグループ１２０８に与えられ、信号ＳＥＬ０［７］を発生する。信号ＳＥＬ０［７］は、ＸＩＮ［６］、ＸＩＮ［５］およびＸＩＮ［４］がアサートされなければ（論理１）、本質的にはＢＹＴＥＱＰ２［７］の反転されたものであり、そうでなければ論理０である。
【００７５】
要素Ｆ５のための論理回路の実施例は、図１９に示される。ビットＢＹＴＥＱＰ２［３：０］が、インバータ１３０３が後に続くＮＯＲゲート１３０２によりＯＲ処理され、ビットＢＹＴＥＱＰ２［７：４］が、インバータ１３０５が後に続くＮＯＲゲート１３０４によりＯＲ処理され、ビットＢＹＴＥＱＰ２［１１：８］が、インバータ１３０７が後に続くＮＯＲゲート１３０６によりＯＲ処理され、ビットＢＹＴＥＱＰ２［１５：１２］が、インバータ１３０９が後に続くＮＯＲゲート１３０８によりＯＲ処理される。
【００７６】
要素Ｆ６のための論理回路の実施例は、図２０に示される。グループＧＰ（１、０）に関するルックアヘッド信号Ｐ０［１］は、ゲートグループ１４０２で反転された信号ＢＱＰ２ＯＲ［０］である。グループＧＰ（２、０）に関するルックアヘッド信号Ｐ０［２］は、ゲートグループ１４０４でのＮＯＲ（ＢＱＰ２ＯＲ［１］、ＢＱＰ２ＯＲ［０］）である。グループＧＰ（３、０）に関するルックアヘッド信号Ｐ０［３］は、ゲートグループ１４０６でのＮＯＲ（ＢＱＰ２ＯＲ［２］、ＢＱＰ２ＯＲ［１］、ＢＱＰ２ＯＲ［０］）である。ルックアヘッド信号Ｐ０［４］は、ゲートグループ１４０８でのＩＮＶ（ＮＡＮＤ（ＩＮＶ（ＢＱＰ２ＯＲ［３］）、Ｐ０［３］））である。ＦＡＳＴＶＡＬ［０］は、ゲートグループ１４１０の２つのインバータによりバッファされるＮＯＲ（ＡＳＫＭＲＯＭ［０］、Ｐ０［４］）である。
【００７７】
要素Ｆ７およびＦ１１のための論理回路の実施例は、図２１および図２５にそれぞれ示される。Ｆ７のＩＳＥＬ０［Ｉ］は、ＸＳＥＬ０［Ｉ］からインバータ１５０６を介して直接に導出され、Ｆ１１のＩＳＥＬ０［４＊Ｊ＋Ｉ］は、ＳＥＬ０［４＊Ｊ＋Ｉ］およびＰ０［Ｊ］からＮＡＮＤゲート１９０４およびインバータ１９０６を介して導出される。ＢＹＴＥＱ１０６のアサートされたｏｐコードビットの最初の発生の位置は、ＩＳＥＬ０アレイの論理１の位置により示される。Ｆ７の信号ＸＳＥＬ０［Ｉ］およびＦ１１のＮＡＮＤゲート１９０４の出力はまた、ゲートグループ１５０２および１９０２、ゲートグループ１５１２および１９１２、ならびにゲートグループ１５１８および１９１８にそれぞれ与えられる。
【００７８】
ＯＲ−ＮＡＮＤゲート１５０２および１９０２にそれぞれ与えられるように、Ｆ７の信号ＸＳＥＬ０［Ｉ］およびＦ１１のＮＡＮＤゲート１９０４の出力は、ＢＹＴＥＱＰ１［ｘ］、ＢＹＴＥＱＰ０［ｘ］がＰＤＩＳＰ１［ｘ］、ＰＤＩＳＰ０［ｘ］と同じであれば、アレイＢＹＴＥＱＰ２をマスクするように用いられ、ビット位置ｘから、アサートされたｏｐコードビットの最初の発生をなくす。発行位置がシーケンスの最後のＲＯＰに割当てられるのを識別するこの条件は、ゲートグループ１５００および１９００により検出される。マスクされたアレイは、次のステージ６１０にｏｐコード位置アレイＸＮ１として与えられる。
【００７９】
ゲートグループ１５１２および１９１２にそれぞれ与えられるように、Ｆ７の信号ＸＳＥＬ０［Ｉ］およびＦ１１のＮＡＮＤゲート１９０４の出力が、ゲートグループ１５０８および１９０８の出力をイネーブルするように用いられ、これらから信号Ｄ０Ｎ１が導出され、次のステージに供給される。ゲートグループ１５１８および１９１８にそれぞれ与えられるように、Ｆ７の信号ＸＳＥＬ０［Ｉ］およびＦ１１のＮＡＮＤゲート１９０４の出力が、ゲートグループ１５１６および１９１６の出力をイネーブルするように用いられ、これらから信号Ｄ１Ｎ１が導出され、次のステージに供給される。事実上、Ｆ７のゲートグループ１５０８および１５１６、ならびにＦ１１のゲートグループ１９０８および１９１６は、ＢＹＴＥＱＰ１［ｘ］、ＢＹＴＥＱＰ０［ｘ］とＰＤＩＳＰ１［ｘ］、ＰＤＩＳＰ０［ｘ］とが同じでなければ、ＰＤＩＳＰ１［ｘ］、ＰＤＩＳＰ０［ｘ］を１だけインクリメントする。この場合、Ｄ１Ｎ１［ｘ］、Ｄ０Ｎ１［ｘ］が００に強制される。
【００８０】
要素Ｆ７およびＦ１１は、アレイＢＹＴＥＱＰ２を、マスクされるいずれのビットも除いてＸＮ１として送り、アレイＢＹＴＥＱＰ１およびＢＹＴＥＱＰ０をそれぞれＮＢＱＰ１およびＮＢＱＰ０として送る。
【００８１】
ステージ０に関するＲＯＰ数信号ＲＯＰ０ＤＩＦＦ［１：０］およびＰＧＮＸＴ［０］と、ステージ１に関するＲＯＰ数信号ＲＯＰ１ＮＵＭ［１：０］とは、図２２、図２３、図２４、図２６および図２７にそれぞれ示される、要素Ｆ８、Ｆ９、Ｆ１０、Ｆ１２およびＦ１３により得られる。要素Ｆ８、Ｆ９、Ｆ１２およびＦ１３は、インバータが後に続くＮＡＮＤゲートを用いる４ビットＡＮＤ演算である。要素Ｆ８はビットＸＤＳＰ０［３：０］の演算をする。要素Ｆ９はビットＸＤＳＰ０［１９：１６］の演算をする。要素Ｆ１２は、要素ＸＤＳＰ０［７：４］、ＸＤＳＰ０［１１：８］、およびＸＤＳＰ０［１５：１２］の演算をする。要素Ｆ１３は、要素ＸＤＳＰ０［２３：２０］、ＸＤＳＰ０［２７：２４］、およびＸＤＳＰ０［３１：２８］の演算をする。要素Ｆ８、Ｆ９、Ｆ１２およびＦ１３の出力Ｐ１ＦＦ０［３：０］およびＰ０ＦＦ０［３：０］は、要素Ｆ１０に与えられる。Ｐ１ＦＦ０［３：０］がＮＡＮＤゲート１８０２に与えられ、その出力は、インバータ１８０４および１８０６によりバッファされ、ビットＲＯＰ０ＤＩＦＦ［１］を発生し、インバータ１８０４および１８０８によりバッファされ、ビットＲＯＰ１ＮＵＭ［１］を発生する。Ｐ０ＦＦ０［３：０］がＮＡＮＤゲート１８１４に与えられ、その出力は、インバータ１８１６および１８１８によりバッファされ、ビットＲＯＰ０ＤＩＦＦ［０］を発生し、インバータ１８１６および１８２０によりバッファされ、ビットＲＯＰ１ＮＵＭ［０］を発生する。ＮＡＮＤゲート１８０２および１８１４の出力はまたＮＯＲゲート１８１０に与えられ、その出力は、インバータ１８１２により反転され、信号ＰＧＮＸＴ［０］として供給される。
【００８２】
高速バイトキュースキャン論理アーキテクチャ６９０のアーキテクチャは、他の高速スキャン適用例に適している。たとえば、図５８は、開始および終了ビットアレイＢＹＴＥＱＳおよびＢＹＴＥＱＥ、ならびにｏｐコードおよびＲＯＰ数アレイＢＹＴＥＱＰ２、ＢＹＴＥＱＰ１およびＢＹＴＥＱＰ０を処理するためにＲＯＰＭＵＸ４００において用いるのに適している高速バイトキュースキャナ５２００を示す。バイトキュースキャナ５２００において、スキャン論理６９０は、開始および終了ビットアレイＢＹＴＥＱＳおよびＢＹＴＥＱＥを処理する第２のスキャン論理５２１０と組合わされて、４つの要素出力アレイＥＳＥＬ０［１５：０］、ＥＳＥＬ１［１５：０］、ＥＳＥＬ２［１５：０］およびＥＳＥＬ３［１５：０］を生じ、その各要素は、対応する発行位置を割当てられたＲＯＰに関して、ＲＯＰがマッピングされるｘ８６命令の終了ビットの位置を識別する。この識別は、ＢＹＴＥＱ１０６の最初の４つの命令のための終了ビットの位置をそれぞれが識別する４つの要素の動作アレイを最初に発生させることにより行なわれる。誤り検査もまた行なわれ、たとえば、終了ビットが各開始ビット（アレイＢＹＴＥＱＳの最初のビットであると仮定される最初のものを除く）の直前にあるのを確実にするように検査が行なわれる。ここで、上で述べられたように、スキャン論理６９０からのものであり、かつ発行位置「ｘ」のＲＯＰが、対応するｘ８６命令からマッピングされるＲＯＰシーケンスの最後のＲＯＰであるかどうかを示す信号ＰＧＮＸＴ［３：０］が、マルチプレクサ制御信号として用いられ、動作アレイの最初の要素を、キューの先頭にある命令に割当てられた発行位置の数と同じ数の、出力アレイの要素に送り、動作アレイの次の要素を、ＢＹＴＥＱ１０６の次の命令に割当てられる発行位置の数と同じ数の、出力アレイの利用可能な要素に送り、以下同様である。
【００８３】
スキャン論理５２１０は、第２、第３および第４のステージにおいて図８および図９のアーキテクチャで用いられるものと同様のグループ化およびルックアヘッド技術を用いる。第１のステージは、開始ビットがキューの先頭のビット位置にあると仮定されるので、この態様で処理されなくてもよい。スキャナ５２１０の第２、第３および第４のステージについては、一般に第１のｏｐコード識別信号発生論理ＦＯＧと同様の論理が、アレイＢＹＴＥＱＥからの４ビットの各グループの最初に発生する終了ビットを識別するために用いられる。ルックアヘッド信号発生論理ＬＡＧと同様の論理は、ステージの先行するグループのいずれかが最初に発生する終了ビットを含むかどうかを判断するために用いられる。各ステージは、スキャン論理６９０におけるように、４つのグループを含む。
【００８４】
メモリＲＯＭ命令の存在は、ＢＹＴＥＱＰ１、ＢＹＴＥＱＰ０を監視することにより、第１のステージにおいて検出される。メモリＲＯＭ命令が検出されると、信号ＡＳＫＭＲＯＭ［０］がアサートされ、スキャン論理６９０に与えられる。
【００８５】
さまざまな実施例を参照してこの発明を説明したが、これらの実施例が例示的なものであり、かつこの発明の範囲がそれらに限定されないことが理解されるであろう。説明された実施例の変更例、変形例、追加および改善が可能である。ステージの数および各ステージ内のグループの数を変更してもよい。さらに、この発明は、ＢＹＴＥＱ１０６以外のスキャンキューに用いられてもよい。これらのおよび他の変更例、変形例、追加および改善は、前掲の特許請求の範囲に規定されるこの発明の範囲内である。
【図面の簡単な説明】
【図１】ＣＩＳＣ命令セットのスーパスカラ実行を達成するためのプロセッサのアーキテクチャレベルのブロック図である。
【図２】図１のプロセッサのバイトキューでのストアに適しているプリデコードされたｘ８６命令の図的表現を示す図である。
【図３】図２のプリデコードされたｘ８６命令の要素の図的表現を示す図である。
【図４】図１の命令デコーダのアーキテクチャレベルのブロック図である。
【図５】図４のＲＯＰマルチプレクサにより実現される方法を示すフローチャートの図である。
【図６】図４のＲＯＰマルチプレクサにより実現される方法を示すフローチャートの図である。
【図７】図４のＲＯＰマルチプレクサにより実現される方法を示すフローチャートの図である。
【図８】図４のＲＯＰマルチプレクサのバイトキューＲＯＰ選択スキャン論理のアーキテクチャレベルのブロック図の一部分である。
【図９】図４のＲＯＰマルチプレクサのバイトキューＲＯＰ選択スキャン論理のアーキテクチャレベルのブロック図の一部分である。
【図１０】図８および図９のバイトキューＲＯＰ選択スキャン論理のある要素をより詳細に示すブロック図の一部分である。
【図１１】図８および図９のバイトキューＲＯＰ選択スキャン論理のある要素をより詳細に示すブロック図の一部分である。
【図１２】図８および図９のバイトキューＲＯＰ選択スキャン論理のある要素をより詳細に示すブロック図の一部分である。
【図１３】図８および図９のバイトキューＲＯＰ選択スキャン論理のある要素をより詳細に示すブロック図の一部分である。
【図１４】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図１５】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図１６】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図１７】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図１８】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図１９】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２０】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２１】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２２】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２３】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２４】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２５】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２６】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２７】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２８】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図２９】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３０】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３１】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３２】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３３】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３４】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３５】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３６】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３７】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３８】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図３９】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４０】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４１】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４２】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４３】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４４】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４５】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４６】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４７】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４８】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図４９】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５０】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５１】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５２】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５３】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５４】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５５】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５６】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５７】図８および図９のバイトキューＲＯＰ選択スキャン論理の実施例のゲートレベルの概略図である。
【図５８】図４のＲＯＰマルチプレクサのバイトキューＲＯＰ選択スキャン論理とバイトキューＳＥスキャン論理との関係を示すブロック図である。
【符号の説明】
１００  スーパスカラプロセッサ
１１０  スーパスカラコア
１０４  命令キャッシュ
１０６  バイトキュー
１０８  命令デコーダ
４００  ＲＯＰマルチプレクサ
６００  第１のステージ
６１０  第２のステージ
６２０  第３のステージ
６３０  第４のステージ
６９０  高速バイトキュースキャン論理アーキテクチャ
【図１】
0003714999.tif 000005
【図２】
0003714999.tif 000006
【図３】
0003714999.tif 000007
【図４】
0003714999.tif 000008
【図５】
0003714999.tif 000009
【図６】
0003714999.tif 000010
【図７】
0003714999.tif 000011
【図８】
0003714999.tif 000012
【図９】
0003714999.tif 000013
【図１０】
0003714999.tif 000014
【図１１】
0003714999.tif 000015
【図１２】
0003714999.tif 000016
【図１３】
0003714999.tif 000017
【図１４】
0003714999.tif 000018
【図１５】
0003714999.tif 000019
【図１６】
0003714999.tif 000020
【図１７】
0003714999.tif 000021
【図１８】
0003714999.tif 000022
【図１９】
0003714999.tif 000023
【図２０】
0003714999.tif 000024
【図２１】
0003714999.tif 000025
【図２２】
0003714999.tif 000026
【図２３】
0003714999.tif 000027
【図２４】
0003714999.tif 000028
【図２５】
0003714999.tif 000029
【図２６】
0003714999.tif 000030
【図２７】
0003714999.tif 000031
【図２８】
0003714999.tif 000032
【図２９】
0003714999.tif 000033
【図３０】
0003714999.tif 000034
【図３１】
0003714999.tif 000035
【図３２】
0003714999.tif 000036
【図３３】
0003714999.tif 000037
【図３４】
0003714999.tif 000038
【図３５】
0003714999.tif 000039
【図３６】
0003714999.tif 000040
【図３７】
0003714999.tif 000041
【図３８】
0003714999.tif 000042
【図３９】
0003714999.tif 000043
【図４０】
0003714999.tif 000044
【図４１】
0003714999.tif 000045
【図４２】
0003714999.tif 000046
【図４３】
0003714999.tif 000047
【図４４】
0003714999.tif 000048
【図４５】
0003714999.tif 000049
【図４６】
0003714999.tif 000050
【図４７】
0003714999.tif 000051
【図４８】
0003714999.tif 000052
【図４９】
0003714999.tif 000053
【図５０】
0003714999.tif 000054
【図５１】
0003714999.tif 000055
【図５２】
0003714999.tif 000056
【図５３】
0003714999.tif 000057
【図５４】
0003714999.tif 000058
【図５５】
0003714999.tif 000059
【図５６】
0003714999.tif 000060
【図５７】
0003714999.tif 000061
【図５８】
0003714999.tif 000062