(57)【特許請求の範囲】
【請求項１】
複数のアドレス可能な記憶素子中に記憶された順次実行可能命令セットを有する並列処理マイクロプロセッサにおいて、前記命令の発行をコーディネートするための方法であって、
前記アドレス可能な記憶素子からある順序で複数の第１の実行可能命令を含む第１のセットの命令を同時にフェッチするステップであって、前記順序は第１の物理的メモリ順序として定義される、ステップと、
前記アドレス可能な記憶素子から受信した前記フェッチした第１のセットの命令を前記順序で並列に記憶するステップと、
前記記憶された第１のセットの命令を第１の発行順序に分類するステップと、
前記第１の発行順序に従った優先度を有して前記第１のセットの実行可能命令の少なくとも１個の実行可能命令を発行するステップと、
前記第１のセットの実行可能命令の残りの非発行の実行可能命令を前記物理的メモリ順序に再分類するステップと、
前記記憶素子から複数の第２の実行可能命令を含む第２のセットの実行可能命令を同時にフェッチするステップと、
前記第２のセットの実行可能命令を並列に物理的メモリ順序で記憶するステップと、
前記第１のセットの実行可能命令の前記再分類された非発行の実行可能命令を前記第２のセットの実行可能命令と合併させるステップと、
前記合併された実行可能命令を第２の物理的メモリ順序に再順序化するステップと、さらに
実行に先立って前記再順序化された実行可能命令を第２の発行順序に分類するステップ、を含む、命令の発行をコーディネートするための方法。
【請求項２】
前記フェッチング、記憶、および分類ステップは、単一のクロックサイクル内で完了される、第１項記載の方法。
【請求項３】
命令セットを有するアドレス可能な記憶装置を含む並列命令プロセッサ内に命令の発行をコーディネートするための装置であって、該装置は、
前記命令のフェッチされたサブセットを受信するために前記アドレス可能な記憶装置に結合されたプレ分類器のセットと、
前記プレ分類器に結合され、前記アドレス可能な記憶装置に関係する物理的メモリ順序で受信された前記命令の第１のサブセットを発行順序に分類する第１の分類器セットであって、前記発行順序は前記命令セットを実行するために予め決められた順序であり、さらに前記命令の第１のサブセットは発行順序命令として言及されるものと、
前記第１のセットの分類器に接続され、さらに選択された前記発行順序命令がデスパッチされるまで前記発行順序命令を保持する、ラッチのセットと、
前記ラッチを前記プレ分類器に接続し、前記ラッチから受信した非選択の命令を物理的メモリ順序に再分類するための第２のセットの分類器であって、物理的メモリ順序化の後、前記非選択の命令はアドレス順序非選択命令として言及され、前記第２のセットの分類器は前記アドレス順序非選択命令を前記プレ分類器に送り、ここにおいて前記アドレス順序非選択命令および前記フェッチされた命令は物理的メモリ順序にプレ分類され、前記プレ分類器は前記プレ分類されたアドレス順序命令を前記第１の分類器セットに送るものである、第２のセットの分類器と、および
前記第１のセットの分類器と前記第２のセットの分類器に結合され、先のクロックサイクルからの回転解除信号を記憶し、さらに前記命令を発行順序から物理的メモリ順序に回転させないために現在のクロックサイクルにおいて記憶された回転解除信号を生成するための、回転解除ユニット、
を備える、命令の発行をコーディネートするための装置。
【請求項４】
前記並列命令プロセッサは、前記装置に選択および回転信号を提供して前記プレ分類器および第１の分類器によってそれぞれ受信された命令の選択を指示し、前記アドレス可能な記憶装置はバンクセットに組織され、前記命令セットは前記バンクにわたって実行順序で順次記憶されるものであり、
前記装置は、
前記アドレス可能な記憶装置を前記プレ分類器に接続し、前記フェッチされた命令のサブセットを前記アドレス可能な記憶装置から受信し、かつ前記フェッチされた命令のサブセットを前記プレ分類器に配送する並列記憶素子セットであって、それぞれの並列記憶素子は前記バンクのそれぞれと前記プレ分類器のそれぞれに関連しているものと、および
前記第１の分類器によって前記命令の選択を逆にするために前記回転信号を受信して回転解除（unrotate）信号を生成し、かつ前記回転解除信号を前記第２の分類器に供給して前記第２の分類器によって受信された命令の選択を指示する、前記回転解除ユニットとを備え、
前記各分類器は関連する１個の前記記憶素子と前記第２の分類器の１個からから入力命令を受信し、前記選択信号は前記第１の分類器に出力された前記受信命令の１個の選択を指示し、
前記各第１の分類器は前記各プレ分類器から命令を受信し、前記回転信号は関連する１個のラッチに出力された前記受信命令の１個の選択を指示し、
前記各第２の分類器は前記各ラッチから命令を受信し、前記回転解除信号は前記プレ分類器の関連する１個に出力された前記受信命令の１個の選択を指示する、第３項記載の装置。
【請求項５】
アドレス可能なメモリ位置において予め決められた実行順序を有する命令セットを含むアドレス可能な記憶装置である外部メモリと、
前記外部メモリに接続され選択された命令を並列に処理するプロセッサと、および
前記プロセッサに接続され前記プロセッサから情報を受信しかつ前記プロセッサに情報を送信する入力／出力装置とを備える、並列命令処理システムにおいて、
前記プロセッサは、前記外部メモリに接続され前記命令の発行をコーディネートする発行ユニットを含み、
該発行ユニットは、
フェッチされた前記命令のサブセットを受信するために前記アドレス可能な記憶装置である外部メモリに結合されたプレ分類器セットと、
前記プレ分類器のセットに結合され物理的メモリ順序で受信された命令の第１のサブセットを発行順序に分類する第１の分類器セットであって、前記物理的メモリ順序は前記アドレス可能な記憶装置である外部メモリに関係し、前記発行順序は前記命令セットを実行するための予め決められた順序であり、順序化後、前記命令の第１のサブセットは発行順序命令として言及されるものと、
前記第１のセットの分類器に接続し、選択された発行順序命令がデスパッチされるまで前記発行順序命令を保持するラッチセットと、
前記ラッチを前記プレ分類器に接続し、前記ラッチから受信された非選択の命令を物理的メモリ順序に再分類するための第２のセットの分類器であって、物理的順序化された後、前記非選択の命令はアドレス順序非選択命令として言及され、前記第２のセットの分類器はアドレス順序の非選択命令を前記プレ分類器に送り、ここにおいて前記アドレス順序非選択命令および前記フェッチされた命令は物理的メモリ順序にプレ分類され、前記プレ分類器は前記プレ分類されたアドレス順序命令を前記第１の分類器セットに送るものである、第２のセットの分類器と、
前記第１のセットの分類帰途前記第２のセットの分類器に結合され、以前のクロックサイクルからの回転解除信号を記憶し、さらに前記命令を発行順序から物理的メモリ順序に回転させないために現在のクロックサイクルにおいて記憶された回転解除信号を生成するための、回転解除ユニット、
を備えるものである、並列命令処理システム。
【請求項６】
前記プロセッサは選択および回転信号を前記発行ユニットに提供して前記プレ分類器および第１の分類器によってそれぞれ受信された命令の選択を指示し、前記アドレス可能な記憶装置である外部メモリはバンクセットに組織され、前記命令セットは前記バンクにわたって実行順序で順次記憶され、
前記発行ユニットは、
前記アドレス可能な記憶装置である外部メモリを前記プレ分類器に接続し、前記アドレス可能な記憶装置である外部メモリから前記フェッチされた命令のサブセットを受信し、さらに前記フェッチされた命令のサブセットを前記プレ分類器に配送する、並列記憶素子セットであって、該各並列記憶素子は前記バンクのそれぞれの１個および前記プレ分類器のそれぞれの１個に関連するものと、および
前記回転信号を受信し、前記第１の分類器による命令の選択を反転するために前記回転信号を受信して回転解除信号を展開し、さらに前記回転解除信号を前記第２の分類器に供給して前記第２の分類器によって受信された命令の選択を指示する前記回転解除ユニットを備え、
前記各分類器は前記関連する１個の記憶素子および前記１個の第２の分類器から入力命令を受信し、前記選択信号は、前記第１の分類器に出力された前記受信命令の１個の選択を指示し、
前記各第１の分類器は前記各プレ分類器から命令を受信し、前記回転信号は前記ラッチの関連する１個に入力された前記受信信号の１個の選択を指示し、
前記各第２の分類器は前記各ラッチから命令を受信し、前記回転解除信号は前記プレ分類器の関連する１個に出力された前記受信命令の１個の選択を指示するものである、第５項記載のシステム。
【請求項７】
命令セットを有するアドレス可能な記憶装置を含んだ並列命令プロセッサ内に命令の発行をコーディネートするための装置であって、該装置は、
フェッチされた命令のサブセットを受信するために前記アドレス可能な記憶装置に結合されたプレ分類器セットと、
前記プレ分類器に結合され、前記アドレス可能な記憶装置に関係する物理的メモリ順序で受信された前記命令の第１のサブセットを発行順序に分類する第１の分類器セットであって、前記発行順序は前記命令セットを実行するための予め決められた順序であり、さらに前記命令の第１のサブセットは発行順序命令として言及されるものと、
前記第１の分類器セットに接続され、さらに前記発行順序の命令の選択されたものがデスパッチされるまで前記発行順序命令を保持するラッチセットと、
前記ラッチを前記プレ分類器に接続し、さらに前記ラッチから受信された非選択命令を物理的メモリ順序に再分類する第２の分類器セットであって、この時物理的メモリ順序化の後前記非選択命令はアドレス順序非選択命令として言及され、前記分類器の第２のセットは前記アドレス順序非選択命令を前記プレ分類器に送信し、この時前記アドレス順序非選択命令とフェッチされた命令は物理的メモリ順序にプレ分類され、前記プレ分類器は前記プレ分類されたアドレス順序命令を前記第１のセットの分類器に送信するものである、命令の発行をコーディネートするための装置。
【請求項８】
前記並列命令プロセッサは、選択および回転信号を前記装置に提供して前記プレ分類器および第１の分類器によってそれぞれ受信された命令の選択を指示し、前記アドレス可能な記憶装置はバンクセットに組織され、前記命令のセットは該バンクにわたって実行順序で順次記憶されるものであり、
前記装置は、
前記アドレス可能な記憶装置を前記プレ分類器に接続し、前記アドレス可能な記憶装置から前記フェッチされた命令のサブセットを受信し、さらに前記フェッチされた命令のサブセットを前記プレ分類器に配送する並列記憶素子セットであって、該各並列記憶素子は前記バンクのそれぞれの１個および前記プレ分類器のそれぞれの１個に関連したものと、および
前記回転信号を受信して前記第１の分類器によって前記選択された命令を逆転するために回転解除信号を展開し、さらに該回転解除信号を前記第２の分類器に供給して前記第２の分類器によって受信された命令の選択を指示する回転解除ユニットとを備え、
前記各分類器は前記記憶素子のそれぞれの１個および前記第２の分類器の１個から入力命令を受信し、前記選択信号は前記第１の分類器に出力された前記受信命令の１個の選択を指示し、
前記各第１の分類器は前記各プレ分類器から命令を受信し、前記回転信号は前記ラッチの関連する１個に出力された、前記受信命令の１個の選択を指示し、
前記各第２の分類器は前記各ラッチから命令を受信し、前記回転解除信号は前記関連する１個のプレ分類器に出力された前記受信命令の１個の選択を指示するものである、第７項記載の装置。
【請求項９】
アドレス可能なメモリ位置に予め決められた実行順序を有する命令のセットを含むアドレス可能な記憶装置である外部メモリと、
前記外部メモリに接続され、選択された命令を並列に処理するプロセッサと、および
前記プロセッサに接続し、さらに該プロセッサから情報を受信しかつ該プロセッサに情報を送信する入力／出力装置とを備え、
前記プロセッサは、前記外部メモリに接続し、前記命令の発行をコーディネートする発行ユニットを含み、
該発行ユニットは、
フェッチされた命令のサブセットを受信するための前記アドレス可能な記憶装置である外部メモリに結合されたプレ分類器セットと、
前記プレ分類器のセットに結合されさらに物理的メモリ順序で受信された命令の第１のサブセットを発行順序に分類する第１の分類器セットであって、前記物理的メモリ順序は前記アドレス可能な記憶装置である外部メモリに関係し、前記発行順序は前記命令セットを実行するための予め決められた順序であり、順序化の後、前記命令の第１のサブセットは発行順序命令として言及されるものと、
前記分類器の第１のセットに接続し、選択された発行順序の命令がデスパッチされるまで該発行順序の命令を保持するラッチのセットと、
前記ラッチを前記プレ分類器に接続し、さらに前記ラッチから受信された非選択命令を物理的メモリ順序に再分類する第２の分類器セットであり、この時物理的メモリ順序化の後前記非選択命令はアドレス順序の非選択命令として言及され、前記第２の分類器セットはアドレス順序の非選択命令を前記プレ分類器に送信しこの時前記アドレス順序の非選択命令および前記フェッチされた命令は物理的メモリ順序にプレ分類され、前記プレ分類器は前記プレ分類されたアドレス順序の命令を前記第１の分類器セットに送信するものとを含む、並列命令処理システム。
【請求項１０】
前記プロセッサは選択および回転信号を前記発行ユニットに提供して前記プレ分類器および第１の分類器によってそれぞれ受信された命令の選択を指示し、前記アドレス可能な記憶装置である外部メモリはバンクセットに組織され、前記命令セットは前記バンクにわたって実行順序で順次記憶され、
前記発行ユニットは、
前記アドレス可能な記憶装置である外部メモリを前記プレ分類器に接続し、フェッチされた命令のサブセットを前記アドレス可能な記憶装置である外部メモリから受信し、さらにフェッチされた前記命令のサブセットを前記プレ分類器に配送する並列記憶素子のセットであって、該各並列記憶素子は前記バンクのそれぞれの一個および前記プレ分類器のそれぞれの１個に関連したものと、および
前記回転信号を受信して前記第１の分類器によって命令の前記選択を反転するために回転解除信号を展開し、さらに前記回転解除信号を前記第２の分類器に供給して前記第２の分類器によって受信された命令の選択を指示する、回転解除ユニットとを含み、
前記各分類器は前記記憶素子の関連する１個と前記第２の分類器の１個から入力命令を受信し、前記選択信号は前記第１の分類器に出力された前記受信命令の１個の選択を指示し、
前記各第１の分類器は前記各プレ分類器から命令を受信し、前記回転信号は前記関連する１個のラッチに出力された受信命令の１個の選択を指示し、
前記各第２の分類器は前記各ラッチから命令を受信し、前記回転解除信号は前記関連する１個のプレ分類器に出力された受信命令の１個の選択を指示するものである、第９項記載のシステム。
【発明の詳細な説明】
関連出願の相互参照
本願発明の主題は、下記に掲げる出題の主題と関連している。
出願番号_____、「プログラマブル命令トラップシステムおよび方法」の名称で、Sunil Savkar、Gene W.Shen、Farnad SajjadianおよびMichael C.Shebanowによって1995年６月１日に出願、
出願番号08/388,602、「スーパースケーラ  マイクロプロセッサ用命令フロ制御回路」の名称で、Takeshi Kitaharaによって1995年２月14日に出願、
出願番号08/388,389、「格納命令に関して負荷命令を順不同に実行するアドレス方法」の名称で、Michael A.SimoneおよびMichael C.Shebanowによって1995年２月14日に出願、
出願番号08/388,606、「名前を付け替えられたレジスタに結果を効率的に書き込む方法および装置」の名称で、DeForest W.Tovey、Michael C.ShebanowおよびJohn Gmuenderによって1995年２月14日に出願、
出願番号08/388,364、「マイクロプロセッサにおける物理レジスタの利用を調整する方法および装置」の名称で、Deforest W.Tovey、Michael C.ShebanowおよびJohn Gmuenderによって1995年２月14日に出願、
出願番号_____、「精密な状態を保持するため命令状態をトラッキングするプロセッサ構造および方法」の名称で、Gene W.Shen、John Szeto、Niteen A.PatkarおよびMichael C.Shebanowによって1995年２月14日に出願、
出願番号_____、「アドレス変換の高速化のための並列アクセス  マイクロ−TLB」の名称で、Chih−Wei David Chang、Kioumars Dawallu、Joel F.Boney、Ming−Ying LiおよびJen−Hong Charles Chenによって1995年３月３日に出願、
出願番号_____、「コンピュータシステムにおけるアドレス変換用ルックサイドバッファ」の名称で、Leon Kuo−Liang Peng、Yolin LinおよびChih−Wei David Changによって1995年３月３日に出願、
出願番号08/397,893、「データプロセッサにおけるプロッセサ資源の再生利用」の名称で、Michael C.Shebanow、Gene W.Shen、Ravi Swami、Niteen A.Patkarによって1995年３月３日に出願、
出願番号08/397,891、「実行準備ができたものから命令を選択する方法および装置」の名称で、Michael C.Shebanow、John Gmuender、Michael A.Simone、John R.F.S.Szeto、Takumi MaruyamaおよびDeForest W.Toveyによって1995年３月３日に出願、
出願番号08/397,911、「不履行命令の高速ソフトウェア  エミュレーション用ハードウェアサポート」の名称で、Shalesh Thusoo、Farnad Sajjadian、Jaspal KohliおよびNiteen A.Patkarによって1995年３月３日に出願、
出願番号08/398,284、「制御転送リターンを加速する方法および装置」の名称で、Akiro Katsuno、Sunil SavkarおよびMichael C.Shebanowによって1995年３月３日に出願、
出願番号08/398,066、「フェッチプログラムカウンタの更新方法」の名称で、Akira Katsuno、Niteen A.Patkar、Sunil SavkarおよびMichael C.Shebanowによって1995年３月３日に出願、
出願番号08/397,910、「コンピュータシステムにおけるエラーの優先化および処理方法および装置」の名称で、Chih−Wei David Chang、Joel Fredrick BoneyおよびJaspal Kohliによって1995年３月３日に出願、
出願番号08/398,151、「制御転送命令の迅速な実行方法および装置」の名称で、Sunil W.Savkarによって1995年３月３日に出願、
出願番号08/397,800、「マイクロプロセッサにおけるゼロビット状態フラッグの生成方法および装置」の名称で、Michael Simoneによって1995年３月３日に出願、
出願番号08/397,912、「パイプライン化読取り−修正−書込みアクセスを備えたECC保護メモリ編成」の名称で、Chien ChenおよびYuzhi Luによって1995年３月３日に出願および、
出願番号08/398,299、「精密な状態を保持するため命令状態をトラッキングするプロセッサ構造および方法」の名称で、Chien Chen、John R.F.S.Szeto、Niteen A.Patkar、Michael C.Shebanow、Hideki Osone、Takumi MaruyamaおよびMichael A.Simoneによって1995年３月３日に出願、
参考として、上記の出願の全てを本願発明の全体に亘って取り入れている。
技術分野
本発明は一般的に多重命令を並列に発行し実行するデータプロセッサに関し、特に実行サイクル中にマイクロプロセッサ中において、待機しフェッチされた命令を並列処理のため発行順に回転させるための方法および装置に関する。
背景技術
典型的なスカラマイクロプロセッサでは、命令（instruction）は直列にあるいはスカラ的に発行されかつ実行される。すなわち、命令は、プログラムカウンタによってインデックスされた順序でマイクロプロセッサによって一回に一個発行され、実行される。この実行方法は効果的であるが、多くの場合最適ではない。これは、コンピュータプログラムにおける命令シーケンスの多くは他の命令シーケンスに対して独立しているからである。この様な場合、多くの命令シーケンスは、処理能力を最適化するために並列に処理することが可能である。命令の並列処理のための最近の技術は、レジスタの再命名、推論的実行および順序外実行を含む。
レジスタの再命名は、命令発行の機能停止を避けるためにプロセッサが同じアーキテクチャのレジスタを別の物理的レジスタに再マッピングするようなプロセッサによって使用される技術である。この技術は、アーキテクチャによって必要な物よりも遙に大きな数の物理的レジスタのメインテナンスを必要とする。従ってこのプロセッサは、所定の時間においてどれだけの物理的レジスタが使用されているか、マッピングされた種々の物理的レジスタはどのアーキテクチャのレジスタであるか、さらにどの物理的レジスタを使用することができるか、を含んで、物理的レジスタリソースの状態を連続してモニタする必要がある。この仕事を達成するために、プロセッサは、使用されていない物理的レジスタのリスト（フリーリスト）を保持している。一個の命令が発行された場合、プロセッサは、アーキテクチャ上の宛て先レジスタをフリーリスト上の１個のレジスタに再マッピングする。この選択された物理的レジスタは次にフリーリストから除去される。再命名された物理的レジスタが最早必要では無くなった場合は常に、これらの物理的レジスタは、フリーリストのプールに加えられることによって、フリーであるとの標識が付けられる。フリーリストから除かれた物理的レジスタリソースは、“使用中”であるか、あるいはプロセッサによって更にマッピングすることが不可能であると見なされる。１個の命令の合成レジスタが、後続順の命令に対する（アーキテクチャ的）ソースレジスタとして使用されるべき場合、このソースレジスタはフリーリストから再命名物理的レジスタにマッピングされる。このプロセッサが正しく関連した物理的レジスタを使用するために、プロセッサは再命名マップを常に保持し、どのアーキテクチャ的レジスタがどの物理的レジスタにマップされたかを識別する必要がある。先行する順序の命令のアーキテクチャ的レジスタを参照する、全ての後続順序の命令は、再命名された物理的レジスタを使用する必要がある。
アーキテクチャ的レジスタが再命名される場合、間違って予測された分岐命令に基づいてプロセッサがチェックポイントのバックアップをする時、または後続順序の命令が先行順序の命令に基づいて実行の例外を検出する前にアーキテクチャ的レジスタを変更する時、アーキテクチャ的レジスタの正しい状態を効率的に再記憶するために、準備が必要である。
推測的実行はプロセッサによって使用される技術であって、条件付き分岐命令の条件を評価するためにデータを使用することが出来ない場合、プロセッサは、次の命令のための次の分岐ターゲットアドレスを予測する。推測実行を使用することによって、条件を評価するために必要なデータを待つことによって生じる、プロセッサ遅延が回避される。予測間違いがあった場合は常に、プロセッサは分岐ステップの前に存在した状態に復帰し、さらに命令の正しい順序での実行を続行するために正しい分岐を同定しなければならない。予測間違いの後、プロセッサの状態を回復するための既に使用されている技術は、チェックポイントと呼ばれ、これによってマシンの状態を各推測命令の後で記憶（チェックポイント）する。
順序外実行は、多重実行ユニットを含むプロセッサによって使用される技術であり、命令をシーケンスに従って発行するがしかし命令の実行時間の変化に基づいて非シーケンス的に命令の実行を遂行するものである。これが、命令を並列に、順序外で発行し実行する概念であり、並列プロセッサに関連した効果と困難性の両者を強調するものである。
上記で議論したように、多重命令を発行するための種々の技術は、一度に発行すべき命令の正しい順序を決定しその後予測された位置からフェッチするために、予測（推測的実行、レジスタの再命名、または順序外実行）を使用している。もしこの予測が正しい場合、時間は節約され；もし正しくない場合、間違った命令がフェッチされこの命令は放棄される必要がある。
スーパースカラマシンにおいて、フェッチ、キューおよび発行命令は、フェッチされ発行された一個の命令よりも大きな発行ウインドの使用と、分岐命令を有するプログラムの処理によって、複雑化されている。命令の回転またはプログラム順序における発行の順序化を必要とする、命令の物理的順序でのフェッチングによって、処理はさらに複雑化する。同じサイクルにおいて発行すべき命令に替えて、キュー中に挿入すべき同じ数の多重命令を同じサイクルにおいてキューからはずれて発行することによって、さらに複雑化する。従って、並列プロセッサにおいて、予測間違いおよびそれに関連した時間およびリソースの損失を回避するために、命令の発行および実行を整合するための効果的な方法および装置の開発が必要である。さらに、マシン中への命令発行に遅れないようにする能力がマシンに欠如しているために、命令発行におけるバブルによってサイクルが最小化されるように、命令のキューを命令実行フローの前に維持するための最適解決方法の必要性が存在する。
発明の開示
本発明によって、命令のフェッチおよび発行をコーディネートしさらにスーパースカラを使用するデータプロセッサによって生じうる処理における遅延を避けるために、命令をメモリ指定物理的順序から発行順序に回転させることによって、複数のメモリを並列に発行するための装置および方法が提供される。
本発明を含むデータ処理システムは、データおよび命令キャッシュに要求を送りさらにこれから情報を受信する中央処理ユニットを含んでいる。命令管理ユニットは、外部永久記憶ユニットをデータおよび命令キャッシュに接続し、記憶ユニット中のアドレス可能な位置をアクセスするため中央処理ユニットから要求を受信し、記憶ユニット中の要求されたアドレスをアクセスし、さらに要求されたデータおよび命令を中央処理ユニット内のフェッチユニットに転送し、それによって命令およびデータを操作する。フェッチユニットは、選択された命令の発行およびデスパッチに先立って、フェッチされた命令を発行順序に回転させるための、回転およびデスパッチブロックを含んでいる。この回転およびデスパッチブロックは、新しくフェッチされた命令を、既にフェッチされ発行されていない物理的メモリ順序の命令とミックスするためのミキサと、このミックスされた命令を発行順序に回転するためのミックスおよび回転装置と、デスパッチに先立って発行順序の命令を保持するための命令ラッチと、および発行されていない命令を新しくフェッチされた命令とのミックスに先立って、発行順序から元のメモリ指定物理的順序に回転させるための回転解除（un−rotate）装置とを含んでいる。
スーパースカラ実行を実現するため、プロセッサは、最小のフェッチ、発行および実行ステージを含む多重命令を処理するためのパイプラインを実行する。フェッチサイクルにおいて、多重命令は、記憶装置から元のメモリ順序で同時にフェッチされ、発行順序に回転される。次のクロックサイクルにおいて、既にフェッチされ回転された命令の内の選択されたものが発行サイクルに入り、新しいセットの命令が物理的メモリ順序でフェッチされ、発行されていない既にフェッチされ回転された命令が物理的メモリ順序に再配置され、さらに新たにフェッチされた命令と物理的メモリ順序においてミックスされる。同時に、全ての命令がパイプラインを通過するまで、全てのフェッチされ発行されていない命令等が、次の発行サイクルに先立って発行順序に回転させられる。
【図面の簡単な説明】
図１は，データプロセッサのブロック図である。
図2Aは、図１のプロセッサによって実行された、固定小数点命令に対する、通常の４段階パイプライン処理を示す図である。
図2Bは、図１のプロセッサによって実行された、固定小数点命令およびロード命令のそれぞれに対する、修正７段階および９段階パイプライン処理を示す図である。
図３は、図１の中央処理装置（CPU）のブロック図である。
図４は、図１のキャッシュのブロック図である。
図５は、図１のメモリマネージメントユニット（MMU）のブロック図である。
図６は、図３の発行ユニットによって使用されるリソース機能停止ユニットのブロック図である。
図７は、図３のフェッチ、分岐および発行ユニットのブロック図である。
図８は、図３のデータフローおよび機能ユニットのブロック図である。
図９は、正確なアーキテクチャ的状態を維持するために、図３のCPUによって使用されるアクティブ命令の象徴的Ａ−リングを示す。
図10は、フェッチサイクルの間の命令処理を示すフェッチおよび発行ユニットの一部分のブロック図である。
図11は、フェッチされた命令を発行順序に回転させるための、図10のデコード／ディスパッチブロックによって使用される命令回転論理回路のブロック図である。
図12は、図10のデコード／ディスパッチブロック内に示される回転論理を伴った直列‘n'メモリ素子のブロック図である。
図13は、図10のデコード／ディスパッチブロック内のフェッチサイクルにおけるメモリのタイミング図である。
図14は、図11のディスパッチ回転論理回路の拡大ブロック図である。
図15Aは、図10のデコード／ディスパッチブロックの命令入力および出力を示す。
図15Bは、デコード／ディスパッチブロックのその他の実施例の命令入力および出力を示す。
図15Cは、デコード／ディスパッチブロックのその他の実施例の命令入力および出力を示す。
図16は、フェッチおよび発行サイクル間の命令のフローを示すメモリ記憶ユニットとラッチのブロック図である。
発明を実施するための最良の形態
図１を参照すると、プロセッサ101にマウントされた一般的なプロセッサシステム100が示されている。このプロセッサ101は、例えば本発明を実施するセラミックチップモジュール（MCM）上にマウントされたR1プロセッサである。プロセッサ101内において、スーパースカラCPUチップ103は、記憶するためのアクセス要求を128−ビットアドレスバス113、115、117、119に送出し、128−ビットデータバス上からデータを受信しかつこのバス上にデータを送出し、さらに128−ビット命令バス125、127上の命令を受信することによって、２個の64Kバイトデータキャッシュチップ105、107と２個の64Kバイト命令のキャッシュチップ109、111とをインターフェースする。プロセッサシステム100において、メモリマネージメントユニット（MMU）129は、市販されているような外部永久記憶ユニット131をデータおよび命令キャッシュ105、107、109、111に接続し、128ビットアドレスバス133、135、137を介して記憶ユニット131中のアドレス可能な位置にアクセスするためのリクエストを受信し、128−ビットバス139を介して記憶ユニット131中のリクエストされたアドレスをアクセスし、さらに128−ビットデータおよび命令バス141および143を介してリクエストされたデータおよび命令を転送する。MMU129はさらに、プロセッサ101と、例えば診断プロセッサ147および入力／出力（I/O）装置149のような外部装置間の通信を管理する。多重チップモジュールを使用することによって、CPU103は、合計で256ビットアドレスと256ビットのデータであるような、大きなキャッシュとバンド幅が大きいバスを使用することが可能である。クロックチップ145は、プロセッサ101内にクロック信号を提供することによって、プロセッサ101内および外部で各素子間の通信を制御し同期を取る。プロセッサ101は、SPARC▲Ｒ▼V9の64−ビット命令セットアーキテクチャによって実施することができ、さらにスーパースカラ命令発行、レジスタの再命名およびデータフロー実行テクニックを備える命令レベル並列化を利用することによって、１クロックサイクル当たり４命令の最高命令発行速度を達成する。
図2Aを参照すると、命令を処理するための一般的な４段階パイプライン201が、フェッチ、発行、実行および完了ステージ205、207、209、211を含む物として示されており、このパイプラインは固定小数点命令を処理するために使用することができる。スーパースカラのパイプラインを次元４のプロセッサ101にロードするために、第１のセットの４個の命令が命令ステージ213においてフェッチされ、命令サイクル213のフェッチステージ205が完了した後始まる命令ステージ215の期間中において第２のセットの４個の命令がフェッチされ、さらに同様にして、パイプラインが４個の命令セットによって完全にロードされあるいは実行すべき命令の残りが無くなるまで、次の命令セットがフェッチされる。図2Bに示す一般的な６ステージのパイプライン203は、各ロード命令を処理するために、フェッチ、発行、アドレス生成（ADDR  GEN）、キャッシュアクセス、データリターンおよび完了ステージ205、207、203、217、219、211を含んでいる。パイプライン203は、パイプライン201と同じ方法で充填され、全体で４セットの６個の命令がパイプライン中にある時、完全にロードされる。順序外実行に適応するため、プロセッサ101は修正パイプライン221、223を実行して、デアクティベート（deactivate）、コミット（commit）およびリタイア（retire）ステージ225、227、229を含む固定小数点およびロード命令をそれぞれ処理する。デアクティベートステージ225の期間中、命令は、エラーを生じることなく実行を完了した後、デアクティベートされる。コミットステージ227の期間中、命令は、それがすでにデアクティベートされており、以前の全ての命令がデアクティベートされている場合、コミットされる。リタイアステージ229の期間中、命令は、その命令によって消費された全てのマシンリソースが再クレームされた場合、リタイアされる。コミットおよびリタイアステージに先立って、実行エラーまたは分岐の予測誤りが検出された場合マシン状態を再記憶するためにプロセッサ101によって十分な情報が保持される。
図３を参照すると、フェッチユニット301を含むCPU103のブロック図が示されている。各サイクルの期間、フェッチユニット301によって、主キャッシュ109、111（図１）、２個の16命令ラインを保持する２個のプリフェッチバッファ305、または２次のプリコード命令キャッシュ307から、命令バス303上に４個の命令がフェッチされ、発行ユニット309に転送される。フェッチユニット301は、フェッチされた命令を発行ユニットに提供し、この発行ユニットはそれらをデータフローユニットにデスパッチする責任を有する。サイクル時間を改善するため、主キャッシュにおける命令は既に部分的にデコードされあるいは再コード化されている。ダイナミック分岐予測は、分岐の方向を予測するために使用される２ビット飽和カウンタを含む1024エントリーの分岐履歴テーブル311によって提供される。間接的な分岐ターゲットを含むサブルーチンリターンを加速するため、ジャンプおよびリンク命令のサブセットに対してリターンアドレスを予測するためにリターン予測テーブル313が使用される。テーブル311、313からの情報は、分岐ユニット315に提供され、このユニットは次に分岐およびリターンアドレス予測情報を発行ユニット309に提供する。使用可能なマシンリソースおよび発行制約条件は最終的に発行ユニット309によって決定される。マシンソースが使用可能な場合、命令はフェッチユニット301によってフェッチされた順序で発行ユニット309によって発行される。ある発行制約条件が、命令／サイクルの発行速度を減少させる。発行ユニット309は、命令に対するスタティックな制約と全てのダイナミックな制約条件を解決する。命令はその後デコードされ予約ステーション317、319、321、323にデスパッチされる。発行ステージの期間において、４個の命令が発行ユニット309から４個の予約ステーション、即ち固定小数点ユニット（FXU）、浮動小数点ユニット（FPU）、アドレス生成ユニット（AGEN）、およびロード記憶ユニット（LSU）の各予約ステーション317、319、321、323に推論的にデスパッチされる。一般に、４個の固定小数点、２個の浮動小数点、２個のロード記憶または一個の分岐命令の全ての組み合わせが、与えられたクロックサイクルにおいて発行される。レジスタファイル325、327、329は発行サイクルにおいてアクセスされ、最大の発行バンド幅を維持するために発行サイクルの期間において再命名される。整数レジスタファイルは４個のSPARCレジスタウインドをサポートする。浮動小数点、固定小数点、および条件コードレジスタ325、327、329は、データハザードを除去するために再命名される。トラップレベルを再命名することによって、発行ステージの期間中に検出されたトラップは、推論的にエンターされる。各デスパッチされた命令には、固有の６ビットタグが割り当てられ、最大64個の未実行の命令のタグ付けを可能とする。分岐の様な幾つかの命令は、アーキテクチャ的状態の“スナップショット”を取ることによって、チェックポイントすることができる。分岐の予測誤りによってまたは例外的な条件によって推論的命令のシーケンスが不正に発行されまたは実行されたことが発見された場合、プロセッサ101の状態は、選択されたチェックポイントに後で再記憶されることができる。プロセッサ101は、16個のレベルの予想分岐��令を可能とする、最大で16個の命令がチェックポイントされることを可能とする。
デスパッチステージの期間中、命令は、４タイプの予約ステーション、即ち固定小数点、浮動小数点、アドレス生成、ロード／記憶、の内の一個中に配置される。固定小数点命令を、アドレス生成予約ステーションに送信することも可能である。一旦デスパッチされると、命令は、４個の予約ステーションの一個において実行の選択を待つ。選択は、オペランドの稼働率（アベイラビリティ）のデータフロー原理のみに基づいている。一個の命令は、要求されたオペランドが使用可能な場合に実行され、その結果複数の命令は順序がずれて実行されかつ自己スケジューリング的である。全体で７個の命令が各サイクルおいて実行のために選択され得る。最初の固定小数点、アドレス生成およびロード記憶予約ステーションはそれぞれ２個の命令を実行のために初期化することが可能であり、一方浮動小数点予約ステーションは１個の命令を初期化することが可能である。浮動小数点実行ユニットは、４サイクルのパイプライン化された乗算−加算（FMA）ユニット331と60ナノ秒のセルフタイム浮動小数点除算（FDIV）ユニット333を備えている。整数実行ユニットは、64ビット乗算（IMUL）ユニット335と、64ビットの除算（IDIV）ユニット337と、４個の論理演算ユニット（ALU1、ALU3、ALU3、ALU4）339、341、343、345を含んでいる。パイプラインによる効果を含むことなく、最高で10個の命令が並列に実行され得る。ロード記憶ユニット（LSU）は、２個の並列な、ロード記憶パイプライン（LSPIPE1、LSPIPE2）ユニット347、349を含み、これらのユニットは推論的ロードを、ロード記憶バス351を介して記憶装置または初期のロードをバイパスすることが許されたロードと共に、キャッシュ105、109に送信する。LSUは２個の独立した64ビットロードまたは記憶装置を、それらが異なるキャッシュチップに向かうと仮定して、各サイクルの期間中に実行することができる。このキャッシュはブロック化されていない。即ちミスの後、このキャッシュは他のアドレスへのアクセスを処理することができる。
整数乗算および除算ユニット（MULDIV）335、337は、すべての整数乗算（整数乗算ステップ命令を除いて）および除算オペレーションを実行する。MULDIV335、337は内部でパイプライン化されておらず、さらに一回に一個の乗算または除算命令のみを実行することができる。MULDIV335、337は共通の64ビットけた上げ伝搬加算器と共に64ビット乗算器と64ビット除算器を備えている。
乗算ユニット335は、全ての、符号付きおよび符号付きでない32ビットと64ビットの乗算命令を実行する。32ビットの符号付きおよび符号付きでない乗算は３サイクルで完了し、64ビットの符号付きおよび符号付きでない乗算は５サイクルで完了する。乗算ユニット335は乗数ツリーを含んでおり、このツリーは64ビット×16ビットの乗算を単一のクロックサイクルにおいて、けた上げ保存の形式で計算することが可能である。32ビットの乗算のために、乗算ユニット335は、乗数ツリー中を２サイクルループしてけた上げ保存形式において２個の部分的な結果を減少させ、さらに最終結果を生成するために64ビットのけた上げ伝搬加算器のためのもう１個のサイクルを必要とする。
除算ユニット337は、基数4SRTアルゴリズムを実行し、さらに１から39サイクルにおいて平均の待ち時間17サイクルと共に64ビットの除算を完了する。
浮動小数点乗算−加算ユニット（FMA）331は、全ての単一および二重精度の浮動小数点オペレーション（浮動小数点除算を除いて）、浮動小数点移動オペレーション、および指定された除算／加算／減算オペレーションの実行に責任がある。FMA331は浮動小数点除算（FDIV）ユニット333と結果バス809を共有する。
FMA331は、融合された乗算−加算命令（例えば、Ａ＊Ｂ＋Ｃ）を実行することができる。‘融合された’乗算−加算オペレーションとは、結合されたオペレーションにおいて１個の丸めエラーしか招かない事を意味する。他の全ての浮動小数点演算は、融合乗算／加算の特殊なケースとして実行される。例えば、減算は、‘B'オペランドを強制的に１にし、さらに‘C'オペランドの符号をその補数にセットすることによる、融合乗算／加算として実行される。FMA331は、４ステージの完全なパイプラインユニットであり、サイクル毎に１個の浮動小数点命令を受け入れる事が可能である。
FMAパイプライン中の第１のステージは、入力オペランドをフォーマットし、けた上げ保存形式で乗算器の部分的結果の最初の半分を生成し、加算オペランドに対する整列シフトカウントを計算し、さらに乗算器の積に対して加算オペランドの最初の半分を完了する。FMAパイプライン中の第２のステージは、けた上げ保存形式で乗算器の結果を２個の部分的な積に減少させ、この部分的な積に‘C'オペランドを加算し、先行０計算の最初の半分を完了する。FMAパイプラインの第３ステージは、先行０計算を完了し、２個の部分積を合計し、さらにその結果を正規化する。FMAパイプラインの第４ステージは、例外と特別なケースを決定し、さらにその結果を要求される精度まで丸め、さらに出力をフォーマットする。
浮動小数点除算ユニット（FDIV）331は全浮動小数点除算命令を実行する。FDIV331は、セルフタイム的な機能ブロックであり、修正基数2SRTアルゴリズムを用いて直接的に商デジットを計算するために、高速プリチャージ技術を利用する。FDIV333は一度に一回の浮動小数点除算命令を実行する。FDIV333は、55ステージを実行し約６クロックサイクル後に結果を送り返す、組み合わせアレイであると見なされる。プリチャージされたブロックは、リング内にループされさらにセルフタイミングによって制御される。セルフタイムのリングは５ステージにおいて商仮数を計算する。５ステージは、リングの評価限界（および制御限界ではない）として選択されたものである。このリングはステージにおいて内部ラッチ無しに展開される。５ステージのそれぞれは、現在の剰余および商デジットを使用して次の剰余および商ビットを計算するのに使用される。幾つかの短いけた上げ伝搬加算器を複製することによって、隣接するステージの実行をオーバーラップすることが出来るので、実行時間を短縮することができる。各ステージは、隣接するステージの出力をモニタする完了検出器によって制御されるプリチャージされた論理ブロックを備えている。データがセルフタイムのリングにおいて複数のステージ間を流れる間、各ステージで計算された商ビットはシフトレジスタ中に蓄積される。最終的な丸めは、追加の１クロックサイクルにおいて実行され、一方全体のリングは次のオペレーションに対してプリチャージされる。
ロード記憶ユニット（LSUs）347、349は、２個の非ブロック化データキャッシュチップ105、107をインターフェースする。キャッシュバス351は64個の境界上のキャッシュチップ間でインターリーブ（交互配置）されている。LSUs347、349は、小エンディアン（little−endian）および大エンディアン（big−endian）の両者をサポートする。LSUs347、349は、サンマイクロシステムズ社からのSPARC−V9アーキテクチャマニュアルによって定義される、弛緩メモリモデル（relaxed  memory  model、RMO）および全記憶順序（total store ordering、TSO）モードの両者をサポートする。LSUs347、349は、固定小数点および浮動小数点ロード／記憶命令の両者のスケジュールに対して責任があり、さらにサイクル毎に２個の要求をキャッシュ105、107に取り入れる。命令順序は、個別状態を維持するために使用され、かつCPU103とキャッシュチップ105、107間のプロトコル信号セットによって管理される。LSUs347、349は、12個のエントリー予約ステーションを含んでいる。RMOモードでは、ロード命令は推測的バイパス記憶命令を許可する。３ステージパイプラインを、LSUs347、349とデータキャッシュ105、107間の分割処理（split  transaction）をサポートするために使用する。第１ステージの期間中、推測的実行に使用される命令、操作コード、連続番号、および制御ビットは、LSU347（349）によってデータキャッシュ105（107）に送信される。第２ステージの期間中、記憶命令からのデータは、LSU347（349）からデータキャッシュ105（107）に送信され、さらに次のサイクルにおいて完了する命令の連続番号および有効ビットはデータキャッシュ105（107）からLSU347（349）に送信される。第３ステージにおいて、データキャッシュ105（107）はそのステータスとロードデータを取り戻す。キャッシュミスの場合、データキャッシュ105（107）は、使用されていないパイプラインスロット期間中にデータを取り戻し、あるいはデータに対してパイプラインスロットを開く信号を送出する。
命令が実行を完了すると、結果は予約ステーションにブロードキャスト送信され、ステータス情報が個別状態ユニット（PSU）353に提供される。最大で９個の命令を１サイクル内で完了することができる。PSU353（および予約ステーション317、319、321、323）は、命令の追跡を維持するために各発行された命令のタグ番号を使用する。PSU353は同時に、アーキテクチャ的状態とCTI'sに影響を与える命令に対して形成されたチェックポイントを維持する。PSU353はエラーおよびステータスの完了を追跡し、さらに命令を順番にコミットしかつリタイアする。各サイクルにおいて、８個の命令がコミットされかつ４個の命令がリタイアされる。PSU353は同時に、外部割り込みと例外命令を順序化する。
図４を参照すると、キャッシュ105、107のブロック図が示されている。キャッシュ105、107は、２個のキャッシュチップとタグ記憶ユニット401を備えている。各キャッシュチップは、４セットのアドレス可能なレジスタを含む２個のデータバンクとして組織された、64Kバイトのデータ記憶装置を含んでいる。タグ記憶ユニット401は、CPU103によってアクセスされ、このCPU103はキャッシュ105、107中に記憶されかつここから転送されたデータを仮想的にインデックスしかつタグ付けする。データキャッシュ105、107（109、11）の両者に対して、128バイトのキャッシュラインが２個のキャッシュチップ間で分割され、各キャッシュチップは64バイトのデータまたは命令を受信する。各キャッシュチップは、CPU103からの２個の独立した要求にサービスする。CPUキャッシュインターフェースは非ブロッキングであり、そのためキャッシュラインが再充填されまたは充満される間に、CPU103はキャッシュ105、107をアクセスする。アドレス生成からデータ使用までの待ち時間は、３サイクルに渡る。バンク403、405およびMMU129は、再ロードおよび記憶スタックバッファ409、411を介して接続される。２個の未解決のミスは、第３のミスをブロックする各キャッシュチップによってサービスされることができる。同じキャッシュライン上への多重のミスは、合併され、単一のミスとしてカウントされる。
図５を参照すると、MMU129のブロック図が示されている。MMU129は、メモリ管理およびデータコヒーレンスに責任を有し、データバッファ501と入力／出力（I/0）制御ユニット503を介してメモリとI/0システムをインターフェースし、エラーハンドリングおよびロジングユニット505を介して、エラーハンドリングに責任を有する。MMU129は、３レベルのアドレス空間を有している。これらは、プロセッサのための仮想アドレス（VA）空間、I/O装置および診断プロセッサのための論理アドレス（LA）空間およびメモリのための物理的アドレス空間である。これらの階層的アドレス空間は、64ビットアドレス空間を管理するためのメカニズムを提供する。数個のルックアサイドバッファがMMU129内に存在し、これらの多重レベルアドレス変換にサービスする。ビュー（view）ルックアサイドバッファ（VLB）507はCAMベースの、完全連想の、128エントリーテーブルであり、これは仮想アドレスを論理アドレスへ変換するのに責任がある。変換ルックアサイドバッファ（TLB）509は、４ウエイのセットアソシアティブな1024エントリーテーブルであって、このテーブルは論理アドレスを実アドレス（LA）に変換するために使用される。キャッシュ実アドレステーブル（CRAT）511は、４ウエイセットアソシアティブテーブルであって、このテーブルは実アドレスタグを記憶する。CRAT511は、キャッシュ制御およびコマンドキューユニット513、515を介したキャッシュおよびメモリ間のデータコヒーレンスに責任がある。
図６を参照すると、リソース機能停止ブロック回路601を、発行されたメモリの臨界タイミングパスの遅延を短縮するために使用することができる。リソース機能停止ブロック601は、発行ユニット309を予約ステーション317、319、321、323に接続し、命令（INST0、INST1、INST2、INST3）が送信される経路を形成する。リソースの使用可能性および命令からデコードされた属性に基づいて、３レベルの伝送ゲート603、605、607は機能停止ベクトルを生成し、タイミングの合わない命令の発行を防止する。回路における遅延は、発行された命令の数に直線的に比例する。
図７を参照すると、フェッチ、分岐および発行ユニットが示されている。フェッチユニット301はチップ外命令キャッシュ109、111と分岐および発行ユニット315、309間をインターフェースする。フェッチユニット301は、カレントプログラムカウンタの前で２個の64バイトラインにプリフェッチし、命令を4Kバイトの直接マップ命令キャッシュ701中に記憶しかつ記憶し、さらにサイクル当たり４セットの命令よびタグを発行ユニット309に転送する。分岐履歴テーブル311は、ダイナミックな２ビットの予測アルゴリズムを用いて、命令キャッシュ701の1024位置の全てをマップする。
オンチップキャッシュ701からのフェッチは、アクセスがラインの終端に向かうものでない限り、例えば２個のキャッシュラインを同時にアクセスすることが出来ない（オンチップキャッシュミス）限り、常に４個の命令を発行ユニット309に返還する（オンチップキャッシュヒット）。データを記憶すること（または書き込むこと）は、キャッシュ701からの読みだしと並行して発生し、従って読みだしアクセスをブロックせずまたはミスを生成しない。ミスの場合、フェッチユニット301は、ミスしたアドレスに基づいてプリフェッチ制御論理インターフェース703を活性化する。プリフェッチインターフェース703は、分離トランザクションプロトコルを実行し、４語サポートを備える単一のオフチップキャッシュ、または例えば２個の命令語と別個のステータス情報を供給するキャッシュ109、111の様な２個のキャッシュへの接続をサポートする。リクエストは、部分アドレスによって固有に識別される。
例えばキャッシュ109、111のような外部キャッシュは、データの前の１サイクルで識別子を返還し、これらはプリフェッチキャッシュライン705に書き込みをセットアップするために使用される。オフチップフェッチされた命令は、制御転送および不法な命令を再コード化する再コード化ユニット707を通過する。再コード化ユニット707は分岐およびコール（call）のための部分的なターゲットアドレスを計算し、制御ビットをプリペンドし（pre−pends）さらに元の命令中に計算されたターゲットを記憶する。この技術は、結果として各命令に対して１個の余分なビットのみを必要とし、さらに分岐ターゲット計算を、プログラムカウンタ（図示せず）の上位ビットの一個の加数あるいは減数にまで、減少させる。
再コード化の後、次のサイクルにおいて命令はラッチされキャッシュ701中に書き込まれる。命令はまた、例えばプリフェッチバッファ305のようなシステムの他の成分に直接に転送される。
パリティエラー検出が実行され、その結果としてのエラーは各命令と共に送信される。このようにして、命令インターフェース上のパリティエラーは、間違ったデータを発行しようとした場合にのみ、発生する。
分岐履歴テーブル311は、命令あたり２ビットの、８ビットの分岐履歴情報を提供し、それらを分岐および発行ユニット315、309に転送する。分岐履歴テーブル311は、分岐が発行されるサイクル毎に１個の２ビット位置の更新を取り扱う。分岐履歴テーブル311への更新に伴ってリターン予測テーブル313は分岐予測ビットと発行された分岐のアドレスを記憶する。誤って予測された分岐に基づくバックアップに当たって、リターン予測テーブル313は、分岐履歴テーブル311中の元の２ビット値を修正し更新っするための更新メカニズムを提供する。
分岐ユニット315は全分岐とジャンプおよびリンク（JMPLS's）命令に対するターゲット計算に責任を有する。分岐ユニット315は、アーキテクチャプログラムカウンタ（APC）とフェッチプログラムカウンタ（FPC）を維持する。APCは発行されたプログラムの命令のアドレスを記憶する。EPCは、フェッチすべき次の命令に対する次の順次アドレスを記憶する。オンチップ命令キャッシュ701、プリフェッチバッファ305、分岐履歴テーブル311および、キャッシュ109、111のような外部キャッシュは、FPCを用いてアクセスされる。
プロセッサ103のような４発行推測プロセッサ内で、処理を追跡し続けるために、CPU103内に５個のカウンタ、即ちAPC、次のAPC（NAPC）、チェックポイントPC（CPC）、次のチェックポイントPC（CPC）および別の次のPC（ANPC）、が維持される。APCおよびANPCは、一般に発行ユニット309によって現在発行されている第１および次の命令のアドレスを示す。チェックポイントRAM（図示せず）中に記憶されたCPCおよびCNPCはPCおよびNPCのコピーであり、個別の状態を維持するために使用される。ANPCは、予想された分岐からの別の経路のために第１の命令のアドレスを記憶し、かつ予測誤りから回復するために使用される。APCはサイクル毎に発行された命令の数に基づいて更新される。APCは同様に制御転送命令（CTI's）、予想誤り、タップおよび例外に基づいて更新される。
発行ユニット309は、サイクル毎に、４エントリ命令バッファ（図示せず）から４個までの命令を発行するように試みる。命令は、サイクル毎にオンチップキャッシュ701からアクセスされ、CTI命令の存在を確めるためにデコードされる。CTI'sがバッファ中にあるいはキャッシュ701からアクセスした命令中に存在しない場合は、FPCがバッファの終わりを示すために更新される。CTIが発行ウインド内にあるいはキャッシュからアクセスされた命令中に存在する場合、分岐履歴テーブル311からの予測ビットがCTIの方向を決定するために使用される。次にFPCがバッファの終わりまであるいはCTIのターゲットまで更新される。実際の実行は、遅延スロットおよび分岐に関連したアニュアルビットの存在によって複雑となる。
リターン予測テーブル313は、サブルーチンリターン（JUMPR）に使用される選択されたクラスのJMPL'sの高速予測をサポートする。リターン予測テーブル313は、４個のアーキテクチャ的レジスタセットをコピーする、４個の64ビットレジスタのセットを含む。CALLまたはJMPL_CALL命令が発行される毎に、リターンアドレスはこの４個のコピーレジスタ中に保存される。リターン予測テーブル313はカレントウインドポインタ（CWP）によって制御される。JUMPRが現れると、RPTがCWPに基づいてアクセスされ、保存されたアドレスがリターン位置を予測するために使用される。
発行サイクルの期間中、ソースオペランドはレジスタファイルまたはデータ転送バスから読みだされ、関連する物理的レジスタアドレスと共に実行ユニットに送信される。固定小数点レジスタおよびファイルユニット（FXRF）327は10個の読みだしポートと４個の書き込みポートを有している。FXRF327内において、レジスタファイルは、固定小数点レジスタの再命名を可能とする再命名マップを記憶し、同じサイクルにおいて読みだす。浮動小数点レジスタおよびファイルユニット（FPRF）325はFXRFと似ているがしかし６個の読みだしポートと３個の書き込みポートを有している。
予約ステーションと実行制御論理との組み合わせは、データフローユニット（DEU）として言及され、予約ステーション317、319、321、323内にエントリーを割り当てさらに実行するために機能ユニットに命令をスケジュールすることに対して、責任を負う。各予約ステーションエントリーは、オペレーションコード情報、ソース／宛て先レジスタ番号、ソースデータ、連続番号およびチェックポイント番号フィールドを含む。DFUは、タグおよび結果データのためにデータ転送バスをモニタする。タグ一致の場合、要求されたデータは適切な予約ステーション内に記憶され、その予約ステーション中の関連する従属ビットが更新される。一旦全ての従属ビットがセットされると、命令はそのソースデータと共に適切な機能ユニット中に送信される。一般に、予約ステーション内の２個以上の命令が実行レディであると、もっも古い２個の命令が選択される。もし、予約ステーション内に命令がなくかつ発行された命令が要求された全てのデータを有していると、それらは機能ユニットに直接デスパッチされる。
DFUは、発行ユニット309が未解決の分岐を越えて命令を発行した場合の出現をモニタし、分岐命令の予測された経路に位置する与えられた予約ステーション中の命令を殺す（kill）。予約ステーション317、319、321、323はエントリ毎にチェックポイント番号の追跡を継続する。間違って予測された分岐の場合、PSU353は、DFUに殺されるべきチェックポイント番号を送信する。DFUは次にチェックポイント番号に一致した全ての命令を殺す。
図８を参照すると、予約ステーション317、319、321、323とCPU103の機能ユニット331〜337、801〜807、347、349を示すブロック図が示されている。FX予約ステーション（DFMFXU）は、２個の整数（FXU）ユニット801、803に対して固定小数点命令をスケジュールする。DXMFXU317は８エントリ予約ステーションを含んでいる。整数乗算および除算ユニット335、337が同様にDFMFXUに接続されている。命令を選択する基本的アルゴリズムは、“最も古いものがレディ”である。
FP予約ステーション（DFMFPU）319は、浮動小数点乗算−加算（FMA）および浮動小数点除算（FDIV）ユニット331、333を含む浮動小数点ユニットに対して１サイクル１個の命令をスケジュールする。FMAユニット331は、４サイクルの完全にパイプライン化された従順な‘融合’浮動小数点乗算および加算ユニットであり、これは電気および電子技術者学会（IEEE）754によってコンパイルされている。FDIVユニット333はセルフタイムの、IEEE754でコンパイルされた浮動小数点除算ユニットである。
AGEN予約ステーション（DFMAGEN）321は固定小数点およびロード／記憶命令アドレス生成を２個の整数（AGEN/FXU）ユニット805、807に対してスケジュールする。DFMAGENは、予約ステーション内にアクティブなより古い記憶が存在する場合、より新しいロードのアドレス生成の機能を停止する点を除いて、DFMFXUと類似である。
LS予約ステーション（DFMLSU）323は、外部データキャッシュ105、107へのロード、記憶およびアトム命令を含むメモリオペレーションを、ロードストア（LSPIPE1、LSPIPE2）ユニット347、349およびバス351を介してスケジュールする。
CPU103は、単一サイクルの固定小数点数値演算および論理とシフトオペレーションに対して、４個の専用機能ユニット（FX1−４）801、803、805、807を含んでいる。バスの数を最小とするために、FX1・801は整数乗算および除算ユニット335、337と、オペランドバスおよび結果バスを共有する。JMPL命令のための全てのターゲットは、FX2・803において計算される。FX2・803からの結果は同様にプロセッサ101の特権および状態レジスタからのリターンデータと共有される。FX3・805とFX4・807は主にロード記憶命令のためのアドレス計算に対して使用されるが、同様に固定小数点計算に対しても使用することができる。FX3およびFX4はシフトオペレーションをサポートしない。FXユニット801、803、805、807において使用されるアドレスは、64ビットの高速けた上げ伝搬アドレスである。固定小数点ユニット801、803、805、807は３個の別個のオペレーションユニットを含んでいる。加算−減算ユニットは、全ての整数加算および減算命令に加えて乗算ステップ命令を実行する。論理ユニットは、すべての論理的オペレーション、移動オペレーションおよびあるプロセッサレジスタ読みだしオペレーションを実行する。シフトユニットは、全てのシフトオペレーションの実行に責任がある。整数乗算および除算ユニット（MULDIV）335、337はオペランドバスと結果バス809をFX1・801と共有し、FX1を乗算または除算命令の開始および終了の１サイクルに対して使用する。
図９を参照すると、プロセッサ101内で処理されるアクティブ命令（Ａ−リング）901の記号リングが示されている。このＡ−リングは、処理期間中においてプロセッサ101によって維持される複数の命令間の関係を示している。Ａ−リングの大きさは、プロセッサ101内で一度にアクティブな最大64個の命令に対応して、64命令である。既に述べたように、発行された全ての命令のそれぞれに対して固有の連続番号が割り当てられる。命令が発行された場合、Ａ−リングの関連するエントリーがセットされる。命令が実行される場合、その命令がエラー無しで遂行されると、関連ビットはクリアされる。４個のポインタが命令の状態を追跡しつづけるために使用される。発行連続番号ポインタ（ISN）は最後に発行された命令の連続番号をポイントする。コミットされた連続番号ポインタ（CSN）は最後にコミットされた命令をポイントする。リソース再クレームポインタ（RRP）は最後にリタイアされた命令をポイントする。アクティブ命令は５個の状態、即ち発行（Ｉ）、待機（Ｗ）、実行（Ｅ）、完了（Ｃ）、コミット（CM）に分類される。非メモリコミット連続番号（NMCSN）が、ロード／記憶命令を積極的にスケジュールするために使用される。
個別の状態を維持するために、プロセッサ101はチェックポイントを使用する。チェックポイントは、分岐の予測誤りまたは例外の場合に再記憶されるマシン状態のコピーを作る。プロセッサ101は、16個の分岐にわたって推測的発行を許す16個のチェックポイントをサポートする。チェックポイントは、CTI命令に対してあるいは再命名されていないアーキテクチャ状態が修正された場合に形成される。チェックポイントは同様に、一旦分岐の予測誤りまたは例外がPSU353によって検出された場合に、実行ユニットにおいて殺すべき命令を識別する。
CPUチップ間ピンおよびオンチップ命令キャッシュ701は、パリティによって保護され、これによってシステムに高度な信頼性をもたらす。パリティエラーの場合、情報をPSU353に送って新たな命令の発行を停止し、関連するフォールト命令をポイントするためにプロセッサの状態を再記憶する。エラーを命令と関連付けることが出来ない場合、マシンは命令がコミットするのを待ち、その後キャッシュ701に３サイクルを与えて全ての完了していないトランザクションを完了させる。CPU103は次に、SPARC−V9ソフトウエアに定義されたように、リセット、エラー、デバッグモード（RED）に入り、マシン状態の回復を試みる。
CPU103を介してデスパッチされた命令は、以下に示すようにフォーマットされる。
0003597540.tif 000002
オペレーションコードフィールド（OPCODE）は、命令が条件付き分岐命令（V9またはV8Bcc、FBcc、またはBrval）である場合またはその命令がCALLである場合を除いて、Sparc−V9オペレーションコードと同じビット〔31:0〕を含む。これらの命令のフォーマットを以下に簡単に示す。制御フィールド（CNTL）はビット〔32〕を含み、条件付き分岐命令およびCALLと共に使用される。再コード化フィールド（R1、R2）は、ビット〔33:34〕を含み、以下のエンコードを有している。
0003597540.tif 000003
IMATRIXのみが２ビット再コード化フィールドに関係している。第１の再コード化値は、A9アーキテクチャにおいて特定されているようにイリーガル命令を表している。第２の再コード化値01は、リーガルでかつ有効な命令を表している。最後の２個のエンコードされた値は将来の使用のために保存される。IPCGを除いた全てのユニットに対して、上位ビットはインビジブル（invisible）であり、パリティのために使用される。
CALLおよび条件付き分岐命令に対して、分岐偏位は分岐ターゲットセグメントおよびCntlビット中に再コード化される。V9において分岐偏位には４個のフォーマット即ち16ビット、19ビット、22ビットおよび30ビットがある。16ビット形式はレジスタ値（Brvl）上の分岐に対して使用される。19ビット形式は、BccおよびFBcc（予測された形式）のV9バージョンに対して使用される。22ビット形式は、BccおよびFBccのV8バージョンに対して使用される。30ビット形式はCALLに対して使用される。全ての偏位は符号付きである（２の補数）。この偏位は２ビットだけ左にシフトされ、その後分岐命令のPCに加えられる前に64ビットに符号拡張される。
再コード化は、PCを偏位に事前加算し、次に最上位の符号無しビットの実行を再コード化することによって発生する。この‘符号無しビット’は、偏位の符号ビットのすぐ下のビットとして定義される。例えば、22ビット偏位に対して、V9命令のビット〔20:0〕は分岐のPCのビット〔22:2〕に加算され、合計〔20:0〕を形成する。このオペレーションの実行は、‘けた上げ’としてラベル付けされる。V9分岐のビット〔21〕は符号ビットである。例えばキャッシュ109、111のようなオフチップキャッシュからフェッチされた命令に対して、合計〔20:0〕は元のオペレーションコードフィールド〔20:0〕に置き変わる。即ちターゲットの実際の下位21ビットがオンチップ（入力／出力即ちI/0）キャッシュ701中に記憶される。ビット〔21〕およびCntlは下記の表に従って比較される。
0003597540.tif 000004
‘意味’と記されたコラムは、PC（PC〔63:23〕）の上位41ビット上への効果を表している。即ち、＋０は何も加算せず、“＋1"は１をPC〔63:23〕に加算し、“−1"はPC〔63:23〕から１を引く。その他の幅の偏位に対して、同様のプロセスが発生する。偏位再コード化は、R_PCおよびR_INにおいて分岐ターゲット計算のスピードアップのために使用される。分岐以外のその他のV9命令は再コード化されない。最終的に、４×42ビットよりも、４×35ビットの命令情報がFETCHサイクルの期間において分散される。命令の再コード化は約3nSで実行することができ、これはFETCHの前のパイプラインステージ期間において10nSサイクルタイムを許す。
図10を参照すると、CPU103のフェッチおよび発行ユニット301、309のブロック図が、フェッチサイクルと共に示されている。フェッチサイクルの命令アクセス部分の期間において、命令はI/O主キャッシュ701またはプリフェッチバッファ305からフェッチされ、マルチプレックスユニット1001に向けられる。フェッチサイクルの移送／分散部分の期間において、フェッチされた命令は、発行ユニット309内に位置するデコード／デスパッチブロック1003に分散される。フェッチサイクルの、デコート／回転部分の期間において、以下に詳細に示すように、命令はデコード／回転ブロック1003内でデコードされかつ回転される。フェッチサイクルのステップアップおよびスキュー部分の期間において、デコードされかつ回転された命令は、発行ユニット309内の命令ラッチブロック1005によってラッチされる。
CPU103の１実施例では、３個のデコードデスパッチブロック1003が実行される。
・IMX_DECODE               −IMATRIXとBRUにサービスする
・FX_DECODE_DISPATCH
−fx_need_decode        :2x−DFMFXUにサービスする
−fx_op_decode          :2x−DFMFXUにサービスする
−fxrf_type_decode      :4x−FXRFにサービスする
−fxrf_decode            :4x−FXRFにサービスする
−fx_slot_select_decode:1x−FX_DECODE_DISPATCHにサービスする
・FP_DECODE_DUSPATCH
−Isu_need_decode       :2x−DFMLSUにサービスする
−Isu_op_decode          :2x−DFMLSUにサービスする
−fxagen_need_decode    :2x−DFMFXAGENにサービスする
−fxagen_op_decode      :2x−DFMFXAGENにサービスする
−fp_need_decode        :2x−DFMFPUにサービスする
−fp_op_decode          :2x−DFMFPUにサービスする
−fprf_decode            :4x−FPRFにサービスする
−fp_slot_select_decode:1x−FP_DECODE_DISPATCHにサービスする
CPU103の他の実施例では、４個のデコードデスパッチブロック1003が実行される。
・IMX_DECODE               IMATRIXおよびR_INユニットにサービスする。
・BRU_DECODE           −R_PC中の分岐ユニットブロックにサービスする。
・FP_DECODE_DISPATCH  −FPRF、LSAGEN、DFMFPU、DFMLSUにサービスする。
・FX_DECODE_DISPATCH  −FXRFおよびDFMFXUにサービスする。
移送および分散時間は、命令ラッチと命令データの予定された宛て先に基づいて変化する。セットアップ時間は、クロックスキュー0.3nSの場合約−0.2nSであった。各デコード／回転ブロック1003は、全ての命令回転に対して−4nS以下を割り当てるべきであり、かつ10nSサイクル時間に適合するために所定のサイクル内でデコードする。
CPU103の１実施例において、以下の信号がチップ全体にわたって論理的に分散される。
0003597540.tif 000005
図11を参照すると、発行ユニット309内の命令回転論理回路1101のブロック図が示されており、この回路は、それぞれの宛て先デスパッチ／デコードユニットにおいて要求される順序で正しく発行された命令を使用する。４個の命令（INSTxx）信号が任意にデコーダ1103、1105、1107、1109によって同時にデコードされる。デコードオペレーションの後で、命令は、すでに受信された一番下の4:1マルチプレクサ1119、1121、1123、1125セットからの命令出力と共に、2:1マルチプレクサ（muxes）1111、1113、1115、1117（muxed）において多重化される。ISELECT〔3:0〕制御信号からの各ビットは2:1マルチプレクサ1111、1113、1115、1117の内の１個を制御するために使用される。例えばISELECT信号の最下位ビットはINST00ベースの命令の多重化を制御する。ISELECT〔nn〕の各ビットは次の様に定義される。即ち‘1'は各マルチプレクサ1111〜1117がINSTnnを選択することを信号で示し、さらに‘0'は最下部の4:1マルチプレクサ1119〜1125からの初期のINSTnn出力を選択することを意味する。この多重化は物理的メモリ順序の信号に対して実施される。
命令をPCの特定の発行順序で発行するために、命令は物理的メモリ順序から回転させられる。INSTxxバスとラベル付けされた命令バスは、各バスの物理的メモリ順序を識別する。IROTATEベクトル信号は、PC特定発行順序を展開するために、INSTXXバスを回転するためのアドレス番号を表示する。図５は、IROTATE信号に関して発行順序への命令の回転とそれぞれの命令スロットをリストするものである。
0003597540.tif 000006
発行順序への命令の回転は、表５に示すIROTATE制御信号に基づいて4:1マルチプレクサ1127、1129、1131、1133によって実行される。IROTATE信号は、アーキテクチャプログラムカウンタの第３および第４ビットから生成される。
一旦発行順序に配置されると、命令は、ラッチ（ラッチｘまたは発行スロットｘ）1135、1137、1139、1141中にラッチされる。これらのラッチの出力は、発行サイクルの期間において、それぞれの予約ステーション317〜323中の論理回路に向けられる。さらにラッチの出力は、逆回転（IROTATE）ラッチ1143およびマップ論理回路によってラッチされた以前のクロックサイクルからのIROTATE信号の組み合わせを用いて、命令を発行順序から物理的メモリ順序に回転解除する、4:1マルチプレクサに向けられる。IROTATE信号の値によって特定された各回転状態は、発行順序の命令を物理的メモリ順序の命令に回転させない別の回転状態に単独で対応している。マップ論理回路は、図６に示すように以前のフェッチサイクルのIROTATE信号に基づいてunROTATE信号を形成し、このunROTATE信号をIROTATEラッチ1143の出力から接続された経路を介して各マルチプレクサ1119〜1125に向ける。unROTATE信号は、マルチプレクサ1119〜1125からの出力が物理的メモリ順序となるように、マルチプレクサ1119〜1125に発行順序命令を回転するよう命令する。以下の表を参照する。
0003597540.tif 000007
どの様にして命令ラッチにおいて命令の回転が実行されるかを説明するために、表７に関して、以下のコードシーケンスを考える。
PC＝１  i0
PC＝１  i1
PC＝２  i2
等  ...
0003597540.tif 000008
サイクル６の期間中、表７は、キャッシュラインの終わりに達し、サイクル７において命令発行バブルに帰着することを示している。jnは以前のキャッシュラインに対応する命令ワードを示している。
表８から理解されるように、IROTATEはAPC〔3:2〕に等しい。
0003597540.tif 000009
ISELECT〔3:0〕信号の値は、表９に示すように、ISSUE_VALID〔3:0〕およびAPC〔3:2〕制御信号に依存している。真理値表を以下に示す。
0003597540.tif 000010
ISELECT信号の値に影響を与える別の信号として、キャッシュライン不連続およびマシン同期信号からの開始が含まれる。表９の実行は、キャッシュライン不連続を扱うために最適化され、さらにデッドロック状態を防止するためにマシン同期から抜け出る場合最適化される必要がある。
回転論理回路1101（SREGnx4Ds）は、図10にリストするようにインターフェース仕様を有している。
0003597540.tif 000011
図12を参照すると、回転回路1101中の各メモリ素子1201は回転論理と共に４個の独立したフリップフロップＡ、Ｂ、Ｃ、Ｄを有している。CPU103はサイクル当たり４個の命令を発行しデスパッチしようと試みるので、命令ラッチは、フェッチサイクルの終了の時点でデスパッチされた命令ワードによって更新される必要がある。回転回路1101は、命令ラッチが命令ビットを８個の可能なソース（４個の記憶ビットおよびデータ入力中の４個の新しいビット）の何れかから４個の命令スロットの何れかに移動することを許可する。‘n'の場合の結果として、各SREGnx4Dは最小でｎ×４個のフリップフロップを有する。制御信号をラッチするために、余分のフリップフロップが必要である。
図13を参照すると、回転回路1101のオペレーションのためのタイミング図1301が１個のクロックサイクル‘tcyc'1303の期間において示されている。クロック（CLK）信号1305が発行順序出力命令（Ｑ〔n:0〕〔A:D〕）信号1307、物理的メモリ順序入力命令（Ｄ〔n:0〕〔A:D〕）信号1309およびIROTATE/ISELECT信号1311と共に示されている。表11から、ｖ‘tcq'は、有効命令が出力される開始の時間を提供し、‘tsu'は有効命令を受け取る終わりの時間を提供し、さらに‘tcontrol'は有効制御信号の終了の時間を提供する。
0003597540.tif 000012
図14を参照すると、回転回路1101に接続された、発行ユニット309内の浮動小数点（FP）デコード／デスパッチブロック1401のブロック図が示されている。IMATRIX、BRU、固定小数点レジスタファイル（FXRF）および浮動小数点レジスタファイル（FPRF）デコード／デスパッチブロックと異なって、FPデコード／デスパッチブロック1401（および同様にFXデコード／デスパッチブロック）は、恐らく実行ユニットに関連するそれぞれの予約ステーションにデスパッチされた、命令ラッチによって維持される最初の２個の命令からの属性のみを必要とする。
属性はデコードされ、属性レジスタ1403中に記憶される。ISSUEサイクルの期間中、命令パケットがデスパッチされる前に、追加のマルチプレクサステージが、マルチプレクサ1405、1707によって実行される。デスパッチに先立って、スロット＿選択論理回路1409は、実行ユニットに関係した適切な予約ユニットへのデスパッチに対して正しいタイプの４個の命令発行ウインド中に保持された最初の２個の命令を識別する。命令ラッチからの属性およびタイプ（FPU_INST〔3:0〕）ビットは、前述の説明と同様にしてIROTATEおよびISELECT信号によって制御される。
図15A〜Ｃを参照すると、各種の回転／デコードシステム1501のブロック図が示されている。ある場合には、フェッチサイクルの期間中に分散されかつ回転回路（SREGnX4Ds）1101中にラッチされた命令は、ステール（stale）となる。例えば、サイクルｉ中にラッチされた命令は、サイクルｉ中の状態情報に基づいてデコードされる。命令はラッチ中に複数のサイクルにわたって存在するので、デコードされた命令属性はステールまたは矛盾したものとなる。ステール性のその他の例は、アーキテクチャからロジカル（A2L）へのレジスタタグ変換の期間中に発生することがある。サイクルｉの期間において、状態情報はCWP＝２を含む。変換は、サイクルｉにおけるINSTxxの値に基づいて実行され、さらに新しいレジスタタグが命令ラッチ中に書き込まれる。CWPが１に変化した場合、サイクルｉ＋１において２個の命令が発行される。命令は、その前のサイクルから命令ラッチ中に留まり、残りの（または使用されない）２個の命令はスロット０へ回転させられる。これらの命令は、CWPが１に変化したので、今ステールである。
ステール性の問題を避けるために、図15Bまたは15Cに示す実施例のいずれかが使用される。図Ｂのデコード／デスパッチシステム1501は、回転回路1101の命令ラッチに続く命令デコードブロック1503を示している。デコードは各サイクルにおいて実行されるので、矛盾またはステール属性を有する問題は存在しない。このシステムはISSUEサイクルにおいて命令属性の分散を遅延させることができる。図15Bの替わりのシステムは、命令デコードブロック1503に続く回転論理ブロック1505を示している。デコードは従って回転の後で生じ、各サイクルで命令属性の再評価を強制する。その上、このシステム1501は、デコードされていない命令値のラッチがSREGnX4Dレジスタにおいて起こるように、論理回路（SREGnX4D）1101の修正を企てる。
図16を参照すると、フェッチおよび発行サイクルにおけるプロセッサ103内の命令の移動のブロック図が示されている。多重命令発行マシンにおいて、PCアドレスの信号は発行された命令の数に依存する。例えば、４個の命令発行マシンにおいて、４個の命令ラッチまたはスロット（スロット０、スロット１、スロット２およびスロット３）1135、1137、1139、1141が存在する。これらの命令スロットは、一定の優先順位で発行される。すなわちスロット０は、スロット１、スロット２またはスロット３よりも高い優先度を有し、スロット１はスロット２またはスロット３よりも高い優先度を有し、さらにスロット２はスロット３よりも高い優先度を有している。しかしながら、キャッシュからフェッチされた命令は、上述したのと同じ優先度で、これらの命令スロットに向けられることはない。例えば、４個の命令発行マシンにおいて、４個のキャッシュバンク（バンク０、バンク１、バンク２、バンク３）1601、1603、1605、1607が存在する。PCアドレスが進行するに伴って、この進行は以下の可能性、すなわち＋０、＋１、＋２、＋３、＋４の内の１個を有しており、さらに所定のアドレスの選択に当たって、キャッシュバンクの内容は命令バス上に配置される。図16に示すように、もしPCアドレスが＋２だけ進行すると、アドレス02、03、04、05の内容は、命令バス上に配置される。アドレス02はキャッシュバンク２・1605内に見いだされるので、もし正しくない命令が命令スロット２中に配置されると、バンク０・1601中に見いだされる命令Ｅはより高い優先度を有するスロット０・1135中に配置される。この結果、発行サイクルにおいて正しくない命令の発行が行われる。従って発行サイクルに先立って、フェッチされた命令は、この命令が正しい命令スロット1135〜1141から発行されるように、物理的メモリ順序から発行順序への回転を要求する。表12を参照すると、フェッチ順序から発行順序へ命令を多重化する、簡単な方法が示されている。
0003597540.tif 000013
回転回路1101を有するプロセッサ103のフェッチおよび発行サイクルにおけるオペレーションの一例を、表13および14に示す。
0003597540.tif 000014
表13は、４個のバンク中に記憶されたキャッシュ701の内容を示す。
0003597540.tif 000015
図14を参照すると、PCが最初にアドレス00において選択され、そのためこのアドレスのキャッシュ内容は０、１、２、３である。これらの命令は次に、フェッチサイクルの間に命令スロット０、スロット１、スロット２、スロット３中にラッチされる。最初の２個の命令（０、１）の発行によって、PCは２だけあるいはアドレス10へ進められる。CPU103は、命令４、５、２、３をそれぞれ含む、キャッシュバンク０、バンク１、バンク２、バンク３から命令を読みだす。ISELECT信号に基づいて、命令４、５がマルチプレクサ1111、1113によって多重化され、さらに命令２、３か回転解除（unrotate）マルチプレクサ1123、1125から選択される。IROTATE信号は次に、発行順序すなわち２、３、４、５で命令を回転し、それによって命令をそれぞれ命令スロット０、スロット１、スロット２、スロット３中にラッチする。発行サイクルにおいて１個の命令（命令２）が発行される。これによって、PCは１だけ進む。このPCに基づいてCPU103は、命令４、５、６、３をそれぞれ含むキャッシュから命令を読みだす。ISELECT信号に基づいて、INSTR06がマルチプレクサ1115によって多重化され、INSTR04,INSTR05,INSTR03が回転解除マルチプレクサ1119、1121、1125から選択される。IROTATE信号は次に、命令を発行順序、すなわち３、４、５、６に回転する。このプロセスは、全ての命令がフェッチされ発行されるまで続けられる。
【図１】
0003597540.tif 000016
【図２Ａ】
0003597540.tif 000017
【図２Ｂ】
0003597540.tif 000018
【図３】
0003597540.tif 000019
【図４】
0003597540.tif 000020
【図５】
0003597540.tif 000021
【図６】
0003597540.tif 000022
【図７】
0003597540.tif 000023
【図８】
0003597540.tif 000024
【図９】
0003597540.tif 000025
【図１０】
0003597540.tif 000026
【図１１】
0003597540.tif 000027
【図１２】
0003597540.tif 000028
【図１３】
0003597540.tif 000029
【図１４】
0003597540.tif 000030
【図１５Ａ】
0003597540.tif 000031
【図１５Ｂ】
0003597540.tif 000032
【図１５Ｃ】
0003597540.tif 000033
【図１６】
0003597540.tif 000034