(57)【特許請求の範囲】
【請求項１】
命令パッケージがソースアドレス及びデスティネーションアドレスを含み、結果パッケージがデスティネーションアドレスを含む計算機システムにおける演算方法において、
命令パッケージを双方向パイプラインのステージを通して上向きに流すステップと、
結果パッケージを前記双方向パイプラインのステージを通して下向きに流すステップと、
シーケンスの命令パッケージを、前記パイプラインにおける相対位置を交換できないよう上向きの流れを維持するステップと、
同一のデスティネーションアドレスを含むシーケンスの結果パッケージを、前記パイプラインにおける相対位置を交換できないよう下向きの流れを維持するステップと、
前記双方向パイプラインを流れている間、各命令パッケージのソースアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較するステップと、
前記ソース／デスティネーションアドレスの比較に応じて前記結果パッケージから前記命令パッケージためのソース値をリトリーブするステップと、
前記双方向パイプラインを流れている間、各命令パッケージのデスティネーションアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較するステップと、
前記ソース／デスティネーションアドレスの比較に応じて、前記命令パッケージによって再計算されているか又は再計算されるだろう前記結果パッケージにおける結果値を無効にするステップと、
ソース値から結果値を計算するステップと、
計算された結果値を前記下向きの流れの結果パッケージに供給するステップとを含むことを特徴とする計算機システムの演算方法。
【請求項２】
ソース値及び命令パッケージにおける前記ソース値の妥当性を識別する情報を保持するステップと、
命令パッケージに計算された結果値を保持するステップと、
結果値及び結果パッケージにおける前記結果値の妥当性を識別する情報を保持するステップと、
前記パイプラインの下部に命令パッケージを注入するステップと、
前記パイプラインの上部又は前記パイプライン内の中間位置に結果パッケージを注入するステップとをさらに含むことを特徴とする請求項１に記載の計算機システムの演算方法。
【請求項３】
結果値の収集をレジスタセットに保持するステップと、
前記パイプライン内の命令パッケージに対して使用可能である前記収集における前記結果値の選択値を生じさせるステップと
をさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項４】
前記パイプラインの上部に前記レジスタセットを保持するステップと、
前記収集における前記結果値の選択値を前記パイプラインにおける結果パッケージの下向きの流れに注入するステップとをさらに含むことを特徴とする請求項３に記載の計算機システムの演算方法。
【請求項５】
前記パイプラインの上部又は前記パイプライン内の中間位置に前記レジスタセットを保持するステップと、
前記レジスタセットの前記結果値を前記パイプラインを下向きに流れる結果パッケージから抽出するステップと、
有効ソース値が前記レジスタセットにあるか又は前記パイプラインにおける後のステージに供給されるべきであるならば、命令パッケージを前記レジスタセットに渡すことを可能にするステップとをさらに含むことを特徴とする請求項３に記載の計算機システムの演算方法。
【請求項６】
少なくとも一つがしばしば使用される結果値を保持している複数のレジスタセットを前記パイプライン内に保持するステップをさらに含むことを特徴とする請求項３に記載の計算機システムの演算方法。
【請求項７】
前記パイプラインの種々の前記ステージで特定の処理関数を実行するステップをさらに含み、前記ステージのいくつかは、前記パイプラインに沿った異なる位置で同様な処理関数を実行することを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項８】
命令パッケージが全ての必要なソース値を検索した後、このような関数を実行することができるパイプラインにおける最も早いステージで処理関数を実行するステップと、
前記可能なステージがこのような処理関数を実行することができるパイプラインにおける最後のステージでなければ、命令パッケージが全ての必要なソース値を検索しなかったならば、このような処理関数を実行することができるステージを越えて進むステップとをさらに含むことを特徴とする請求項７に記載の計算機システムの演算方法。
【請求項９】
前記パイプラインの動作における通常の結果値としてコンディションコードを処理することによってコンディションコードをハンドリングするステップをさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１０】
結果ストリームに結果の削除を挿入することによってトラップ及び割り込みのような例外をハンドリングするステップをさらに含み、命令ストリームにおける下位の命令パッケージはトラップ結果に応じて命令パッケージの上向きの流れから取り除くことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１１】
異なる種類の命令パッケージの実行を容易にするために前記パイプラインにブランチを提供するステップをさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１２】
固定小数点算術演算、浮動小数点算術演算、及び／又はメモリ演算を容易にするために前記パイプラインにブランチを提供するステップをさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１３】
命令ストリームの推測実行を実行するステップと、
前記結果ストリームを下向きに流す条件付きブランチの結果に応じて命令パッケージの上向きの流れから不正確に選択された命令ストリームから命令パッケージを取り除くステップとを
さらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１４】
前記結果ストリームを下向きに流す結果パッケージにおけるコンディションコード及び／又はプログラム状態語情報を含めるステップをさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１５】
少なくとも２つの位置で接続するサイディングを前記パイプラインに提供するステップと、
前記パイプラインに沿った第１の位置にある情報を命令パッケージ又は結果パッケージからサイディングパッケージに供給するステップと、
前記サイディングパッケージを前記命令パッケージ又は結果パッケージに並列に前記サイディングに沿って流れるようにするステップと、
前記サイディングパッケージを前記パイプラインに沿った第２の位置にある前記命令パッケージ又は結果パッケージを再結合するステップとをさらに含むことを特徴とする請求項２に記載の計算機システムの演算方法。
【請求項１６】
算術演算、メモリ演算又はレジスタ演算あるいはキャッシュアクセス演算を実行するためにサイディングを使用するステップをさらに含むことを特徴とする請求項１５に記載の計算機システムの演算方法。
【請求項１７】
前記パイプラインに沿って命令パッケージの上向きの流れと通信するためにサイディングを接続するステップをさらに含むことを特徴とする請求項１５に記載の計算機システムの演算方法。
【請求項１８】
前記パイプラインに対する他のサイディングにサイディングを接続するステップをさらに含むことを特徴とする請求項１５に記載の計算機システムの演算方法。
【請求項１９】
双方向パイプラインのステージを通して上向きに流れるソースアドレス及びデスティネーションアドレスを含む命令パッケージと、
双方向パイプラインのステージを通して下向きに流れるデスティネーションアドレスを含む結果パッケージと、
命令パッケージを元来のシーケンスで前記上向きの流れに保持する回路と、
同一のデスティネーションアドレスを含む結果パッケージを前記下向きの流れにシーケンスで保持する回路と、
前記双方向パイプラインを流れている間、各命令パッケージのソースアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較する回路と、
前記ソース／デスティネーションアドレスの比較に応じて前記結果パッケージから前記命令パッケージためのソース値をリトリーブする回路と、
前記双方向パイプラインを流れている間、各命令パッケージのデスティネーションアドレスと、命令パッケージが出会う各結果パッケージのデスティネーションアドレスとを比較する回路と、
前記ソース／デスティネーションアドレスの比較に応じて前記命令パッケージによって再計算されているか又は再計算されるだろう前記結果パッケージにおける結果値を無効にする回路と、
ソース値から結果値を計算する回路と、
計算された結果値を前記下向きの流れの結果パッケージに供給する回路と
を備えたことを特徴とする計算機システム。
【請求項２０】
ソース値及び命令パッケージにおける前記ソース値の妥当性を識別する情報を保持する回路と、
命令パッケージに計算された結果値を保持する回路と、
結果値及び結果パッケージにおける前記結果値の妥当性を識別する情報を保持する回路と、
前記パイプラインの下部に命令パッケージを注入する回路と、
前記パイプラインの上部又は前記パイプライン内の中間位置に結果パッケージを注入する回路と
をさらに備えたことを特徴とする請求項１９に記載の計算機システム。
【請求項２１】
結果値の収集を保持するレジスタセットと、前記結果値の選択値を前記パイプラインの下向きの流れに注入する回路とをさらに備えたことを特徴とする請求項２０に記載の計算機システム。
【請求項２２】
前記パイプライン内にあり、少なくとも一つがしばしば使用される結果値を保持する複数のレジスタセットをさらに備えたことを特徴とする請求項２１に記載の計算機システム。
【請求項２３】
前記パイプラインの種々の前記ステージで特定の処理関数を実行する回路をさらに備え、前記ステージのいくつかは、前記パイプラインに沿った異なる位置で同様な処理関数を実行することを特徴とする請求項２０に記載の計算機システム。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、パイプラインプロセッサ、特にカウンタパイプラインプロセッサに関する。
【０００２】
【従来の技術】
パイプラインプロセッサーＲＩＳＣ
多くの最新のマイクロプロセッサは、縮小命令セットコンピュータ（ＲＩＳＣ）技術を使用して設計されている。このようなマシンは、比較的簡単な命令セットを使用するが、これらの命令を非常に高速に実行することに注力している。高速動作が、６前後の数のステージのパイプラインを使用することよって高められる。
【０００３】
各命令は順次パイプラインに入り、パイプラインにおける各ステージの種々の処理ステップを通過する。始めの部分のステージでは、例えば、命令が、そのための後のパイプラインステージの動作が識別できるようにデコードされる。他のステージでは、命令のために要求されるデータ値はレジスタファイルから検索される。後のステージでは、命令によって要求される算術演算又は論理演算が実行される。
【０００４】
パイプラインの初期部分のステージでレジスタファイルにアクセスすることはマイクロプロセッサでは一般的なことである。命令によって要求されるレジスタファイルからの値が命令実行の過程で初期にパイプラインに供給され得るようにこれが行われる。レジスタファイルへのアクセス速度は、しばしばマシン速度におけるペイシング（ｐａｃｉｎｇ）項目となる。パイプラインにおいて後で計算された結果は、レジスタファイルに戻され蓄積される。
【０００５】
バイパスパス
レジスタファイルを通して全てのデータを移動するプロセスは、マイクロプロセッサの性能におけるボトルネックであることが分かった。したがって、最新のマイクロプロセッサの設計は、一つの命令で計算された値をその後の命令に伝えるためにパイプラインのステージ間の複雑な“バイパス”パスのセットを使用する。したがって、例えば、もし一つの命令が、それの直後の命令への入力として必要とされる値を計算するならば、その値は、レジスタファイルを通して循環するよりもむしろパイプラインにおける一つのステージに戻して手渡される。同様に、もしその値が２つの命令が後続する命令によって要求されるならば、この値はパイプラインにおける２つのステージに戻して手渡される。データパスの複雑なネットワークが、最近計算された値のための命令の全ての可能な要求に適応させるために要求される。複雑なバイパスパスセットの設計及び管理は、マイクロプロセッサの設計では主要な仕事である。それらのバイパスパスは、パイプラインにおける幾つかのステージを通るため、通常隣接ステージを接続するワイヤよりも長いワイヤを必要とする。長いワイヤは、隣接ステージを接続する短いワイヤよりもより大きな遅延を有し、マシンの性能を低下させる。バイパスパスの特別なタイミングの制約に適応させるために、相当な努力が要求される。第二に、パイプラインにおけるバイパス通信は幾つかのステージを通過するため、バイパスパスによって接続されるステージのタイミングは、慎重に制御されなければならない。隣接ステージ間に小さいタイミングエラーがあるならば、タイミングエラーがバイパスが通過する幾つかのステージを通じて累積され、バイパス通信における困難の原因となる。第三に、万一パイプラインの一部が機能停止すると、すなわち、本質的データ項目何か受け取らずには続行できなけくなると、バイパスパスはデータ消失の危険にさらされるから、パイプラインの残りの全ての部分も機能停止をしなければならない。パイプラインの任意の部分における機能停止状態を検出し、かつ全ての部分の歩調を合わせるために全ての部分に機能停止状態を伝送する論理回路網は、コンピュータの性能をしばしば制限する。最後に、多数のバイパスパスを使用するマシンは、種々のバイパスデータをバイパスパスからプロセッサの適当な部分に種々のバイパスデータを伝達するためのスイッチを必要とする。これらのスイッチ自体が、プロセッサにおける遅延のみならず設計おける複雑性を持ち込む。
【０００６】
順序どおりでない実行
コンピュータにおける速度を高める一つの方法は、順序どおりでなく命令を実行することである。命令によってはその実行に十分なだけ知らされると、たとえ、“前”の命令がまだ実行されていないとしても、コンピュータはそれを実行できる。もっとも、このようなマシンでは、書かれた順序で命令の逐次実行によって得られる結果と同一の結果が生じなければならない。“順序どおりでない実行（ｏｕｔ  ｏｆ  ｏｒｄｅｒ  ｅｘｅｃｕｔｉｏｎ）”という用語は、プログラムによって示された順序とは異なる順序で命令を完了できる何らかのメカニズムを説明するために、使われる。順序どおりでない実行は、浮動小数点演算命令又は三角関数のような複雑で、したがって比較的遅い数値演算を含むいろいろなプログラムの実行速度を速めることができる。算術演算が進行中である間、コンピュータの他の部分は、別の状態に費やされた時間にできるだけ多くの作業を完了して、他の一般により簡単な命令を順序どおりでなく実行する。
【０００７】
複数命令効果点ないしスーパースカラ
性能を高めるための他の方法は、“スーパースカラ（ｓｕｐｅｒーｓｃａｌａｒ）”マシンに使用される“複数命令効果点（ｍｕｌｔｉｐｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｉｓｓｕｅ”と呼ばれる。スーパースカラマシンでは、命令は一つずつよりもむしろグループで処理される。より大きな速度は、単一の処理装置を逐次使用するよりも複数の処理装置を並列に使用することによって達成される。
【０００８】
グループにおける命令が相互作用するに違いないことが時々起こる。例えば、グループにおける第２の命令はグループにおける第１の命令によって計算された値を要求する。幾つかのコンピュータは、この種の要求に適応するために並列処理装置間に通信パスを設ける。他のコンピュータは、互いに相互作用がない命令だけをグループ内に配置するよう選択することによってこの要求を回避する。例えば、一方の命令が固定小数点演算のみを要求し、かつ他方の命令が浮動小数点演算のみを要求するならば、幾つかのこのようなコンピュータは一度に２つの命令を実行することができる。
【０００９】
推測実行
性能を増すための他の有用な機構は、推測実行である。コンピュータによって実行されるべき命令は通常、メモリの連続するセルに記憶されているが、“ブランチ（分岐）”と呼ばれる幾つかの命令は、コンピュータに全く異なる記憶位置から命令を取り出すように指令する。“条件付きブランチ”と呼ばれる幾つかの命令は、計算されるいくらかのデータ要素の値によって、命令を順次実行し続けるか又はいくらかの他のシーケンスから命令を取り出すかのいずれかをコンピュータに指令する。
【００１０】
高性能マシンでは、命令をメモリから取り出す機構は、命令が実際実行される十分前に、命令を取り出している。取り出されてまだ実行されていない命令は、命令取り出しユニットと命令が実際実行されている位置の間のパイプラインにある。命令取り出し機構（フェッチメカニズム）は、条件付きブランチに到達すると、２つの可能な次の命令のどれを取り出すかを確実には知らないことがある。どれが適当な次の命令であるかについては、条件付きブランチによってテストされるデータ要素が実際計算されるまで待って知ることになるかもしれない。しかしながら、この計算を待つのではなく、多くの最新マシンの命令取り出しユニットでは結果の推測に基づいて命令を取り出す。約８５％の成功率が従来公知である比較的簡単な予測値によって達成される。このような命令は、それらが全て実行されるとは限らないため、“推測（ｓｐｅｃｕｌａｔｉｖｅ）”と呼ばれる。ブランチ予測が間違っているならば、推測的に発行される命令は、除去されねばならず、その動作の全ての足跡は破棄されねばならない。
【００１１】
レジスタ・リネーミング
単純なコンピュータ設計では、計算値はレジスタファイルに記憶される。命令のための入力として要求される値は、レジスタファイルから取り出され、計算値はレジスタファイルに戻される。より複雑な設計では、中間値は、レジスタファイルに中間値を移動するか又はレジスタファイルから中間値を移動するために他の方法で使用されるだろう時間を節約するために一時保持記憶位置に時々記憶される。かかるコンピュータための制御システムは、一時保持記憶位置に記憶されるレジスタの値及び識別（アイデンティティ）の両方を記録する。実際には、各一時保持記憶位置は、レジスタファイルと異なるレジスタで時々識別される。この機構は一般に“レジスタリネーミング”として知られている。
【００１２】
レジスタリネーミングは通常、特別な設計上の考察を要求する。設計者は、どの一時保持レジスタがリネームされ得るかを決定しなければならないし、いかにその内容の識別が記録されるかを決定しなければならない。広範囲の種類の機構がこのために開発された。
【００１３】
多重メモリ効果点
最新のコンピュータの動作の高速化のために使用される他の方法は、多重メモリ効果点（ｍｕｌｔｉｐｌｅ  ｍｅｍｏｒｙ  ｉｓｓｕｅ）と呼ばれる。単純なメモリシステムでは、値は一度に一つメモリから取り出される。メモリへの各アクセスは、他のアクセスが開始可能となる以前に完了されていなければならない。このようなシステムでは、情報をメモリから取り出し得る速度は、メモリのアクセス時間によって制限される。
【００１４】
幾つかの最新のマシンは、一度に２以上のメモリリクエストに適応できる特別な回路を含むことによってメモリアクセスの速度を改善する。かかる回路では、各メモリリクエストのディテールをメモリシステムに導入し、メモリシステムを通して互いに干渉なしにディテールを渡すために、ディテール用の記憶回路並びに制御回路を含まれていなければならない。メモリ制御回路の簡単化のために、メモリからの応答を、それに対するリクエストと同一のシーケンスで戻すのが、メモリでは通例である。
【００１５】
より複雑なメモリシステムでは、メモリから順序どおりでない応答をなすことができる。高速キャッシュメモリへのアクセスによってメモリリクエストの幾つかは満足できるが、他のメモリリクエストはコンピュータの主メモリシステムへのアクセスが必要となる。メモリアクセス時間におけるこの差を、最も複雑なコンピュータは利用する。たとえメモリに対する前のリクエストがまだ完了していなくても、メモリから直ちに使用可能な答を得ることができる。これは、順序どおりでない実行と類似しているが、コンピュータの演算部及び論理部ではなく、メモリシステムに関するものである。
【００１６】
プログラマのモデルの保存
命令セットの正確な実行の確保のためには、複数の効果点、すなわち、順序どおりでない実行、推測実行、レジスタリネーミング、多重メモリアクセス又は順序どおりでないメモリアクセスの効果点が可能であるコンピュータの設計では、十分な注意が払われなければならない。現在、一般に使用されている命令セットは、命令の逐次実行を予想し、そして全ての計算値が、発生され、それらを発生する命令の順序で記録されていることを予想している。マシンのより高速化を可能ならしめるには、当初単純なマシンに用に向けられたプログラムとの互換性を保証するために、十分な注意を払う必要がある。
【００１７】
プログラマは、プログラムを自分が定義したシーケンスで実行されるべき一連の命令として考える。順序どおりでない実行を行うコンピュータは、（順序通りの）逐次動作で得られ結果と同一の結果を生じるように設計されなければならない。実際、順序どおりでなく実行される動作は、他の命令から独立したものでなければならないため、通常、これは容易である。しかしながら、順序どおりでなく実行される命令がある種の誤りを生じるとき、逐次動作との互換性を保持することは困難である。例えば、ブランチ決定命令が実行された場合に、シーケンス中でそれ以前の命令がメモリ障害を生じたとき、既に実行されたブランチ決定命令の結果は取り消されなければならない。同様に、浮動小数点除算が開始させられると仮定して、プログラムにおけるその後の命令は、除算が完了する前に実行される。除算命令の除数がゼロならば、順序どおりでなく実行される除算後のオーバーフローの結果及び命令は取り消されなければならない。順序どおりでなく実行できるコンピュータとシーケンス通り実行するコンピュータと間の互換性を保持することは、命令シーケンスの多くの特別な場合に対して複雑な回路が要求され困難であることが分かった。
【００１８】
【解決すべき課題】
本発明は、順序どおりでない実行、スーパースカラ演算、推測実行、レジスタリネーミング及び多重メモリ効果点の利点を提供し、プログラマモデルを保存する簡単で規則的な設計でトラップ、例外及び割り込みを解決する。
【００１９】
【課題を解決するための手段】
本出願と同日付けで同一出願人によって出願された他の特許出願「カウンタフローパイプライン」には、単一のパイプラインを通して双方向に情報を送信する機構が記載されている。一方の方向に流れる各データ要素は、他方に流れる各データ要素と出会い、かつ相互作用するかもしれない。
【００２０】
ここでは、カウンタフローパイプラインがマイクロコンピュータを形成するために使用される。パイプラインのための命令及びデータは上向きに流れ、前の命令の結果は下向きに流れる。命令は、予め計算された値の下向きの流れからの結果値をコピーすることによって前の命令からソース値を得る。必要ならば、レジスタファイルからの値は、別の方法では得られない結果値を提供するために下向きの流れの上部に挿入される。
【００２１】
各ステージはそれの２つの隣接ステージと主に通信する。したがって、現在のマイクロプロセッサで共通のバイパスパスを最少化する。１命令で計算され、２つの命令後ある命令によって要求される値は、下向きに流れ各ステージに到達する。ステージは幾つかの細部、例えばそこで実行される特定の演算機能又は論理機能で異なるかもしれないが、概要は類似し、同様な制御システム、同様な記憶レジスタセット及び配列等が使用される。
【００２２】
本発明の単純さは、設計及びデバッグの容易さ、費用及び速度において多くの利点を提供する。ステージ制御システムための１つの設計が、例えば、多くのステージで再使用でき、したがって設計努力は多重に報われる。これらのマシンを構成する集積回路技術は非常に急速に改良される。設計の完了に数年かかるならば、その設計で使用するに適当な集積回路技術を企画することは困難である。設計サイクルが短いと、使用する技術の目標を正確に設定でき、より高度な機能を設計に取り入れることが可能となる。さらに、従来の設計のチェックは、それを設計するのと同様か又はそれよりもより費用がかかる。本発明の単純さにより、以前よりもより迅速により正確な設計を達成する機会が提供される。
【００２３】
単純さはまた、本発明の潜在速度能力に貢献する。各ステージに必要とされる回路は非常に簡単であり、命令の迅速な実行及び高性能に導く。また、設計の規則性により、集積回路としての実現において幾何学的規則性を得られる。それにより、異なるステージの幾何学的幅を一致させることが可能であり、各ステージを列に配置できるので、ステージ間の通信パスを短く真っすぐにすることが可能となり、高速で低電力動作が提供される。
【００２４】
簡単でかつ規則的な設計にかかわらず、本発明は、最新の最も複雑な設計に見られる高度の機能の多くを提供する。これらには以下の事項が含まれる。
【００２５】
順序どおりでない実行
本発明は、必要とされる情報が使用可能となると直ちに命令を実行することによって、命令メモリから発生される順序以外の順序で命令を完了し得るようにして、プログラムの完了を速める。それにもかかわらず、本発明の簡単な規則的な構成は、命令が順序正しく実行されるコンピュータとの互換性を保持する。簡単な構成により、これを達成にこれまで使用された複雑な方法のホストが取り換えられる。
【００２６】
推測実行及びトラップ
本発明における簡単な機構は、計算するパイプラインからの望まれない命令をクリアすることができる。この機構により、選択された命令が実際に正しい命令となるであろうとの推測に基づく条件付きブランチの後で、コンピュータが命令を部分的に処理することを可能にする。推測実行ために選択された命令が実行されるべきでなかった場合、クリア機構が命令を取り除き、命令が発生した結果を取り除く。同様に、演算障害又はメモリ障害のような例外事象がトラップ状態を形成すると、トラップを引き起こした命令に続く命令の結果を容易にキャンセルできる。
【００２７】
レジスタリネーミング
本発明は、速度における犠牲を伴ってレジスタファイルを通して答を通す必要なしに、前の命令の結果を記憶する簡単で柔軟な方法を提供する。それは、共通のパイプラインを下る逆の流れを使用して新しい命令にこれらの結果を供給する。この簡単な機構は“処理している”幾つかの値のための一時記憶を提供するため、それは“レジスタリネーミング”として一般に知られている役割に役立つ。
【００２８】
多重メモリアクセス及び順序どおりでないメモリアクセス
カウンタフローパイプラインを分岐することによって、本発明は、多重メモリ効果点のみならずメモリからの順序どおりでない戻りに適応することができる。通常は複雑なこのタスクは、分岐されたパイプラインの柔軟な接続機構に結合された命令に本発明によって課された厳密な幾何学的配列によって非常に単純化される。
【００２９】
本発明は、命令パッケージがソースアドレス及びデスティネーションアドレスを含み、結果パッケージはデスティネーションアドレスを含む計算システムを動作させる装置及び方法を提供する。命令パッケージは双方向パイプラインのステージを通して上向きに流れ、結果パッケージは双方向パイプラインのステージを通して下向きに流れる。命令パッケージは、前記パイプラインにおける相対位置を交換することを防止する上向きの流れにシーケンスで保持され、同一のデスティネーションアドレスを含む結果パッケージは、前記パイプラインにおける相対位置を交換することを防止する下向きの流れにシーケンスで保持される。各命令パッケージのソースアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、命令パッケージのためのソース値は、前記ソース／デスティネーションアドレス比較に応じて結果パッケージからレトリーブされる。各命令パッケージのデスティネーションアドレスは、出会う各結果パッケージのデスティネーションアドレスと比較され、結果パッケージによって再計算されたか又は再計算されるだろう結果パッケージにおける何らかの結果値は、ソース／デスティネーションアドレス比較に応じて無効にされる。結果値は、ソース値から計算され、下向きの流れの結果パッケージに供給される。
【００３０】
【実施例】
概  観
“カウンタフローパイプライン（ｃｏｕｎｔｅｒｆｌｏｗ  ｐｉｐｅｌｉｎｅ）”と呼ばれる新しいパイプライン構成を用いて汎用コンピュータを構成する。汎用コンピュータの形成に役立てるてめ、カウンタフローパイプラインの構成には３つの主要な機能がある。第１に、カウンタフローパイプライン構成は、線形様式で互いに接続されている一連の非常に類似したステージからなる。もちろん、電子装置におけるその実際の位置はその動作に重要でないけれども、これらのステージは、一方を他方の上流に配置されるように概念的に記載されている。類似ステージの簡単な線形配置は、カウンタフローパイプラインの設計を容易にする。第二に、カウンタフローパイプラインにおける各ステージは隣接するステージと双方向に通信できる。もちろん、実際の方向は装置の物理的実施例における通信パスによって確立されるけれども、これらの通信を“上向き”及び“下向き”として概念的に表現する。双方向の通信により、命令が一方の方向にパイプラインを流れることが可能となり、かつ前の命令からの答えが他方の方向にパイプラインを流れることを可能となる。第三に、カウンタフローパイプラインは、一方の方向に流れる各値が、正確に一度だけ、他方の方向に流れるどの値とも出会い、相互に作用することを確実にする。この特性を、“カウンタ同期比較（ｃｏｕｎｔｅｒｓｙｎｃｈｒｏｎｉｚｅｄ  ｃｏｍｐａｒｉｓｏｎ）”と呼ばれる。カウンタフローパイプラインのカウンタ同期比較は、各命令が全ての前の命令の結果と出会い、もし必要ならば、それらからのデータのコピーを可能とする。
【００３１】
初期部分の命令からの結果は、後の命令がアクセスできるようにパイプラインを下向きに流れる。各ステージがその最も近い隣り合うステージとのみ通信することにより、ステージを接続するのに必要とされるワイヤの長さが制限できる。ローカル通信により、全てのステージは形において同一であり、それぞれはその２つの隣り合うステージと通信するのであるから、各ステージの設計が簡単化される。
【００３２】
順序通り上向きに流れる命令
パイプラインを上向きに流れる命令を考える。下部端として称されるパイプラインの端は、メモリから命令を取り出す機構を介しての命令を含むメモリに接続される。命令は、その下部端でパイプラインに入り、パイプラインを上向きに流れる。パイプラインを流れる間、厳密には、命令はシーケンスのままである。後の命令は、前の命令を通過させない。すなわち、後の命令は、前の命令との相対位置を変える。パイプラインにおける上向きに流れる命令を考えているので、後の命令は前の命令の下にある。パイプラインにおけるある時点での命令についてスナップ写真がとれるとすると、それはプログラマによる命令のリストのように見える。
【００３３】
命令パッケージの内容
パイプラインにおいて上向きに流れる各命令は、処理動作に有用であるデータを伴う。このような“命令パッケージ”は、以下のものを含む。
１．命令が何をなす予定かを知らせるオペレーションコード。加算、減算、シフト、メモリからのロード等のような種々の演算のために別々のオペレーションコードがある。オペレーションコードは、メモリに記憶されている命令についての情報の転写であるか又は同情報の変換形である。パイプラインにおける後のステージは、オペレーションを検査してその命令で如何なる作業が行われるかを決定する。例えば、加算のみができるステージは、加算演算を要求する命令時だけに作動し、他の演算を要求する命令を通過させる。
２．命令は、メモリから取り出されるとき、実行されるべき演算への入力として役立つ値の幾つかのソースレジスタを識別する。これらのソースレジスタは、“アドレス”又はレジスタの“名前”と呼ばれる独特なビットの組み合わせによってそれぞれ識別される。
ソースレジスタのアドレス又は名前の識別子は、命令パッケージの一部として送られる。命令を行う際に使用されるべき各ソースレジスタのための適切な値は、判明したときに、命令パッケージの一部を構成する。これらのソース値が命令パッケージにどのようにして入るかを後に述べる。アドレス及び値に加えて、命令パッケージは、各レジスタ値の妥当性を指示する幾つかのマーカビットを含む。これらのマーカビットは、値が既に検出されたか又はまだ未知のままであるかどうかを指示する。
３．命令のデスティネーションレジスタのアドレス又は名前の識別子も、命令パッケージで送られる。命令が実行されると、そのデスティネーション値は既知となり、命令パッケージの一部を形成する。命令によって識別される一つ又は複数のデスティネーションレジスタは、命令によって計算された一つの値又は複数の値の最大の貯蔵所である。各デスティネーションレジスタのためのアドレス及び値に加えて、各デスティネーションレジスタ値が計算済みであるか又は未知のままであるかを示す幾つかのマーカビットもある。
【００３４】
命令実行
パイプラインの異なるステージは、異なる命令を実行することができる。もちろん、パイプラインは、処理されるべき命令の各タイプを実行できる少なくとも一つのステージを有するが、幾つかの演算を行える１つ以上のステージを有するかもしれない。命令パッケージは、その命令を実行でき、自由に実行できる状態のステージに到達した時、命令パッケージが、必要なソース値のそれぞれの値を含んでいれば、そのステージによりその命令が実行される。ソース値が全て使用可能でない場合、後のステージで命令が実行され得るならば、命令パッケージはパイプラインを上向きに進行する。命令パッケージが命令を実行できる最後のステージに到達して、命令がまだ実行されてないならば、命令パッケージは、全てのソース値が満たされて命令が実行されるまで待つ。
【００３５】
命令が実行されるとき、それにより発生される計算値は２つの場所に入れられる。第一に、それらは命令パッケージ自体のデスティネーションレジスタ部に入る。命令パッケージの一部としてこれらはパイプラインを上向きに進行し、間もなく説明するように最後にはレジスタファイルに記録される。
【００３６】
第二に、計算値のコピーは、結果ストリームに配置される。これらの“答え値”は、コピーして結果パッケージに入れられるか又は新しい結果パッケージが、これらを保持するために形成される。いずれの場合も、これらは、パイプラインを下向きに流れる。パイプラインを下向きに流れる計算値のコピーは、出会った後の命令と相互作用する。結果パッケージ内の答え値のこの下向きの流れにより、後の命令が必要とするソース値を得る機構を提供する。
【００３７】
結果パッケージ内容
答え値は、“結果パッケージ”でパイプラインを下向きに流れる。このようなパッケージそれぞれは一つ以上の予め計算された値についての情報を含む。各々のこのような答え値に対して、結果パッケージは以下のものを含む。
１．この値が最後に入れられるデスティネーションレジスタのアドレス又は名前。もちろん、これは、レジスタファイルに到達すれる結果パッケージにおけるデスティネーション情報のコピーではなく、命令パッケージで伝えられるデスティネーション情報のコピーである。結果パッケージにおけるコピーは、その前の命令によって計算された値について後の命令に知らせるためのものである。
２．計算値。この答え値は計算された情報の全てを含む。幾つかの演算は、非常に小さい情報、例えば条件コードのみを計算する。他の演算はバイト又は文字値を計算する。多くの演算は、３２ビット，６４ビットまたはそれ以上のビットのフルコンピュータ“ワード”を計算する。
３．このレジスタ値が意味があるかどうかを識別する幾つかの予備ビット。予備ビットは、後述するある状況下では、結果パッケージの幾つかの部分を無効にするのに必要である。これらのマーカビットはそのために使用される。
【００３８】
部分的な順序づけで下向きに流れる答え
結果ストリームに流れ込む結果は、好ましくは部分的順序づけを保持する。同一のレジスタアドレスを有する任意の２つの結果は、順序づけが維持されるべきである。異なるレジスタアドレスを有する結果は、任意の順序でよい。設計によっては、重要な結果が他の結果よりもより迅速に移動できる特別のパスを備えることが望ましい。このような特別のパスは結果の順序を乱す。同一のデスティネーションレジスタの名前又はアドレスを結果が有する場合のみ、正しい演算を得るために、特定の結果の順序の維持が必要であろう。
【００３９】
本発明により形成されたパイプラインにおける命令の順序は、一般に、パイプラインの下部端で発生た順序に一致する。しかしながら、パイプラインを下向きに流れる結果における結果値は、部分的に順序づけられるだけである。同一のレジスタの名前又はアドレスを有する値は相対的な順序を維持するが、レジスタの名前又はアドレスが異なっている値は如何なる順序でも良い。
【００４０】
命令はパイプラインを厳格に順序づけられて上向きに流れることができ、同一のデスティネーションアドレスのための結果も厳格に順序づけられ得る。適用されるならば、これらの２つのルールにより、各命令は、シーケンスで先行する命令のみにより発生された結果に出会い、その結果からのソース値を得ることが保証される。間もなく説明するように、他の機構により、各命令が、ソース情報として要求する任意のレジスタ値のための適切な結果値のみに出会うことが確実にされる。
【００４１】
通過する全ての結果と比較される全ての命令
本発明により使用されるカウンタフローパイプラインの非常に有用な特徴は、“カウンタ同期比較（ｃｏｕｎｔｅｒｓｙｎｃｈｒｏｎｉｚｅｄ  ｃｏｍｐａｒｉｓｏｎ）”である。カウンタフローパイプラインのカウンタ同期比較のため、パイプラインを上向きに通過する命令パッケージは何れも、出合った、下向きに流れてくる結果パッケージと比較される。同時係属出願の「カウンタフローパイプライン」に記載されているように、パイプライン通信は、次のように構成される。すなわち、もし、命令が前の方のステージＥから後の方のステージＬに送られており、同時に結果がステージＬからステージＥに送られているならば、命令及び結果が、Ｌ及びＥを含むＬとＥの間のどれかのステージで正確に一度出会わなければならないよう、構成される。このカウンタ同期比較機能は、カウンタフローパイプラインに形成され、前述の出願に記載されている特別の回路によって成し遂げられる。
【００４２】
カウンタフローパイプラインのカウンタ同期比較は、以下のように命令と結果間の有用な相互作用を可能にする。
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージのソースアドレスと結果パッケージのレジスタアドレスとを比較する。そこでの一致は、命令がソース値として必要しているデータを、結果が伝えていることを示している。したがって、この比較における一致に応じて、ステージは、結果パッケージからの答え値をコピーして命令パッケージに入れる。この処理によって、命令パッケージは、結果ストリームから必要とする値を“蓄積する”ことができる。
【００４３】
命令及び結果がパイプラインの任意のステージで出会うと、そのステージは、命令パッケージにおけるデスティネーションアドレスの全てと結果パッケージにおけるデスティネーションアドレスの全てとを比較する。そこでの一致は、命令が、結果パッケージによって伝えられる答え値を有するか又は再計算するだろうことを示している。したがって、答え値は、本発明によって再計算されたか又は再計算されるだろうこのレジスタの前の値を表す。この結果によって伝えられる前の値は、したがって、古いものである。よって、ステージは、デスティネーションアドレスと結果アドレスとの一致を見い出すと、結果ストリームから結果パッケージを削除するか又は結果あるいはその答え値に廃棄とマークするかのいずれかによって結果を“没（ｋｉｌｌ）にする”。いずれの場合も、結果と命令とがさらに相互作用することを防止する。
【００４４】
結果を没にすることは、カウンタフローパイプライン・プロセッサの適正な動作を容易にする非常に有用な属性である。結果は、その値を再計算するか又は再計算するであろう命令に出会うならば、没にされる。結果を没にすることにより、特定の結果値が結果ストリームの非常に限られた部分だけに存在することになる。この結果値は、最初にその値を計算する命令によって発生される。それは、引き続く命令に、その値を有するか又は再計算するだろう最初の命令に至るまで、出会うことができる。結果値は、それを計算した命令からそれを有するか又は再計算する次の命令までの間に限り、ソース値として使用る。予め計算された結果は、その結果値を有するか又は再計算するだろう命令に続く命令においては、ソース値として使用できない。しかしながら、これらの後の命令は、結果の最初のバージョンを没にした命令によって既に計算されているか又は計算されるべきである新しいバージョンを受け取る。したがって、あらゆる命令は、ソース情報として使用するかもしれない各レジスタの最新値のみを受け取る。
【００４５】
没（削除）による、りレジスタリネーミング機構の提供
この非常に簡単で、かつ規則的な機構により、同一の名前又はレジスタアドレスで指定された幾つかの異なる値が結果ストリームにおいて共存することが可能となる。この機構により、このような値それぞれが、その値を適切に使用する命令だけに到達することを確実にする。このような値が、それが有効とされる領域の外でもって、命令と不適切に相互作用することを防止する。結果の名前又はアドレスと、命令におけるデスティネーションの名前又はアドレスとを比較することは、非常に簡単で、かつ規則的構成におけるレジスタリネーミングの効果を提供する。
【００４６】
終端におけるレジスタファイル
今日、使用されている他のプロセッサと同様にカウンタフローパイプラインプロセッサは、計算値を保持するためにレジスタファイルを含んでいる。このようなレジスタファイルは、データが迅速に入れられ、かつ取り出せるように高速回路で形成されている。このレジスタファイルは、全部で数十個のレジスタを含むだけあるから、高速に作動する。従来のマイクロプロセッサで使用されているパイプラインでは、これらのレジスタは、レジスタからの値ができるだけ早く各命令に使用可能にされ得るようにパイプラインの発端近くに置かれる。これい対して、カウンタフローパイプラインプロセッサでは、パイプラインの終端またはその近く、すなわちパイプラインの上部端に置かれる。
【００４７】
命令の完了後のみの値の記録
命令が完全に処理された後だけ到達するパイプラインの上部端にレジスタファイルを配置することによって、適切に計算された値だけレジスタファイルに記録される。命令は、計算された値をレジスタファイルまで伝えるだけでなく、計算された値を結果として結果ストリームに挿入し、この結果ストリームは、続く命令と相互作用し、それらの命令が必要とするソース値をそれらに与える。したがって、カウンタフロープロセッサは、従来のコンピュータがアクセスするよりも少ない頻度でそのレジスタファイルからの値をアクセスする。
パイプラインの上部端のレジスタファイルは、ファイルの側を通過する古い命令の結果の一覧として考えられ、その結果の答えをファイルに入れる。
【００４８】
レジスタファイルから結果を得る
実用的なステージ数を有するカウンタフローパイプラインプロセッサでは、レジスタファイルは必要である。多くの命令及びうまく設計されたシステムではたいていの命令は、レジスタファイルを参照しないで結果ストリームからのそのソース値を蓄積する。しかしながら、幾つかの命令はずっと前に計算されたソース値を使用する。このような命令によって要求される結果は、その命令がパイプラインに入るずっと以前に、結果ストリームを完全に通過し、結果ストリームを離れている。このような命令は、結果ストリームに残っている値から命令が必要とする値を蓄積できない。このような命令に対してソース値を提供するために、レジスタファイルは、その記録された値を結果ストリームを下向きに送らねばならない。
【００４９】
カウンタフローパイプラインプロセッサは、レジスタファイルが広範囲の再発行方式のどれかを使用する。幾つかの方式は、レジスタファイルにまだレジスタファイルに到達しないパイプラインにおける命令によって古いものとされた値を再発行させる。他の結果と同様にレジスタファイルによって再発行された結果は、それらが、それらの値を有するか又は再計算するだろう命令に到達するならば、没にされるだろう。したがって、レジスタファイルからのレジスタ値の再発行のための方式は、ファイルにおける値の古さに関与する必要はない。
【００５０】
一つの再発行方式は、それぞれのレジスタの値を周期的に再発行することである。最後には、全てのレジスタ値は再発行され、それで値を待っている任意の命令の要求は、結局満足されるだろう。
【００５１】
他の方式は、パイプラインに入る各命令によって要求される全ての値を再発行することである。この方式では、命令がデコードされるとすぐに、各命令のソースレジスタアドレスをレジスタファイルに送る必要がある。このための通信パスは、本発明の好ましい実施例に含まれている。
【００５２】
再発行のための他の方式は、どのレジスタ値が現在パイプラインで再計算されているかについてパイプラインにおいて初期に記録しておくことを必要とする。各命令がデコードされると、そのデスティネーションレジスタは注目され、その識別の記録が保持される。これらのレジスタの値は、最後には結果パスに戻る。値が戻るまで、値は、これを必要とする任意の後の命令に対してパイプライン内で使用可能である。この機構によってプロセッサは、命令によって要求され、かつ既にパイプライン内で使用可能でないと識別されたレジスタのレジスタ値のみの再発行を要求することができる。これは好ましい実施例の機構である。
【００５３】
特別のレジスタ
ほとんど全ての命令セット定義は、一定命令、例えば、コンディションコード（ＣＣ）及びプログラム状態語（ＰＳＷ）によって選択的にアクセスされ得る幾つかの特別のレジスタを有する。カウンタフローパイプラインプロセッサでは、これらのレジスタは、汎用レジスタと全く同様に扱われ得る。これらのレジスタからのデータを使用する命令は、あたかも命令がソースレジスタとして特別のレジスタを使用するかのように処理され得る。特別のレジスタを変更する命令は、あたかも特別のレジスタがデスティネーションであるかのように処理され得る。これらの特別のレジスタは、マシンにおける他のレジスタと一緒にレジスタファイルに記憶され、他のレジスタと同様に、必要とされるときアクセスされる。
【００５４】
コンディションコード
一つの共通の特別のレジスタは、コンディションコードと呼ばれる。これらは、最後の演算がゼロ（Ｚ）、負値（Ｎ）を発生したか、オーバーフロー（Ｏ）を生じたか、又はキャリー出力（Ｃ）を発生したかを一般に記録する。ＳＰＡＲＣ命令セットを含む多くの命令セットでは、ＺＮＯＣビットは４ビットレジスタとして扱われ得る。これを計算することによって、コンディションコードをセットする任意の算術演算は特別のデスティネーション、すなわちコンディションコードを有する。コンディションコードをテストする任意の演算は特別のソース、すなわちコンディションコードを有する。このコンディションコードの処理は、これらの値が他の計算された答え値と全く同様に結果パイプラインに流れることを可能にする。いつでも、命令のために計算された幾つかの異なる命令の出力に対応している、結果パイプラインにあるコンディションコードの幾つかの異なる値がある。
【００５５】
プログラム状態語
他の共通の特別のレジスタはプログラム状態語（ＰＳＷ）である。このレジスタはある特殊命令のみによって使用され、かつセットされる。にもかかわらず、他のレジスタと全く同様に扱われ得る。プログラム状態語は、一般にマシンの動作モードについての情報を含んでいる。例えば、マシンは今回割り込みに応動するか、特権命令を実行できるか等である。
【００５６】
プログラム状態語のコピーをパイプラインに沿ってに配置することは、カウンタフローパイプラインプロセッサでは十分に許容可能である。これらのコピーは、ＰＳＷ結果パッケージが到達すると、変更されるだろう。したがって、時宜を得た方法で最新のコピーを保持する。これらは、任意の命令が新しい値を再発行するかもしれないコピーを渡すときはいつでも、古いものとされるだろう。
【００５７】
トラップ及び例外
パイプラインの発端でなく終端にレジスタファイルを配置することの他の重要な利点は、規則的な命令の流れにおいてトラップ及び他の例外を処理するときに存在する。異常な状態がコンピュータのある部分で起こると、トラップ又は割り込みが発生する。例えば、無意味な答えが得られる０による割り算は、大抵のコンピュータではトラップを引き起こす。同様に、不適当なメモリアドレスを参照することもまたトラップ又は割り込みを引き起こす。プログラムは、トラップ又は割り込み以前の命令が、割り込みが作動される前に完了され、それに続く命令が、割り込みがサービスされるた後まで待つだろうことを期待する。
【００５８】
全ての種類のパイプラインプロセッサは、あたかもパイプラインが存在せず、各命令は次を開始する前に完了されたかのようにトラップ及び割り込みを処理しなければならない。コンピュータファミリの命令セットのために記載されたプログラミングモデルは、ここで記載されたものを含む多くのパイプラインでは、たとえ幾つかの命令が直ぐに実行されるか又は命令が順序が狂って実行されるとしても、一度に一つ命令の実行を考慮する。トラップ又は割り込み以前の命令が全て完了され、かつその後、それらは完了されなかったかのように作動するコンピュータを設計することは、命令が同時に実行されるか又は順序どおりでなく実行されるとき非常に難しい仕事である。
【００５９】
パイプラインの終端にレジスタファイルに配置することによって、本発明は、トラップ又は割り込みを処理するのに要求される演算を一般に簡単にする。完全に処理され、かつ首尾よく処理された命令だけがレジスタファイルに到達し、それに結果を記録する。レジスタファイルにまだ到達していない全ての命令は、いつでも放棄され、トラップ又は割り込みが処理された後、再始動される。
【００６０】
カウンタフローパイプラインプロセッサでは、特定命令がトラップを引き起こすならば、このような困難を発見したステージは、特別の種類の“トラップ”結果を結果ストリームに挿入する。トラップ結果は、それがパイプラインで全ての後の命令と出会うとき全ての後の命令にトラップの発生を知らせる。それが命令とどこで出会っても、出合われた命令は、無効とマークされるか又はパイプラインから削除されるかのいずれかが行われる。マーキング又は削除によって、このような命令は、レジスタファイルの内容を変更することを防止され、よってコンピュータの成功した動作の永久記録にいかなる影響も与えない。
【００６１】
同一のトラップ結果は、どの命令が障害及び故障の種類を引き起こすかについての情報をそれとともに伝える。最後には、トラップ結果は、障害を引き起こすもの次の任意の命令を全パイプラインから追い出した後、パイプラインの下部にある命令取り出し機構に到達するだろう。この命令取り出し機構は、すぐにトラップハンドラから命令を取り出し始めることができる。トラップハンドラが完了し後、トラップ結果が、プログラムが再開できる点を識別しているため、命令取り出し機構は、命令取り出しを再開し、障害を引き起こした命令から開始する。
【００６２】
詳  細
ステージの垂直配置
本発明による汎用コンピュータのための基本構成は、図１に示すようにカウンタフローパイプライン４０を形成する複数のステージ２０〜３２からなる。各ステージは、パイプラインにおいて上下のステージと双方向に通信する。図１は、情報がステージを通して上下に流れるように互いの上に連続するステージによって示されている。もちろん、実際のマシンでは、物理的通信パスの幾何学によってどんな方向にセットされても情報が流れ込むことが認識されねばならない。この図において、図１の垂直配置及びフローの方向“上”及び“下”の使用は、単なる説明の便宜のためである。
【００６３】
命令は上向きに流れ、結果は下向きに流れる
図１の矢印の方向で示すように、命令に関する情報は、パイプラインにおいて上向きに流れ、完了された命令の計算結果に関する情報は下向きに流れる。実際のマシンでは、フローの方向は重要でないけれども、パイプラインにおける命令のスナップ写真が撮影できたとすると、その写真はプログラマによって一般に使用されるような命令のリストに似ているから、命令が上向きに流れるものとして考えるのが、パイプラインの動作を理解するのに便利である。スナップ写真及びリストの両方とも、後の命令は、前の命令の下に現れる。命令は、パイプラインの下部端に入り、パイプラインを通して上向きに流れる、そして完全に処理されると、パイプラインの上部端に存在する。
【００６４】
図１に示されるようなパイプラインプロセッサでは、パイプラインの下部端にある命令取り出し機構３４は命令をパイプラインの下部に送り込むのに役立つ。この命令取り出し機構は、命令メモリローンチステージ２０、命令キャッシュメモリ３６及び命令メモリリターンステージ２２からなる。特に図示されていないプログラムカウンタは命令メモリローンチステージ２０の一部である。
【００６５】
種々の命令取り出し機構が、今日、コンピュータに使用されている。図１に示すために選ばれた形は、使用されたかもしれない種々の機構の１つである。その機能は命令をステージ２２にあるパイプラインに導入することである。
【００６６】
命令がパイプラインの上部端にあるレジスタファイル制御ステージ３２に到達するとき、命令が計算したか又はメモリから検索した値が、パイプラインの上部端に示されたレジスタファイル５０に記録される。完全に実行された命令だけがパイプラインの上部端に存在する。レジスタファイル５０は値を記憶し、要求のあり次第、パイプラインの結果側にその値を導入することができる。
【００６７】
通信パス５２は、デコードステージ２４とレジスタファイル５０との間に示されている。使用されるとき、このパス上の信号は、名前又はアドレスで、その値が下向きに流れる結果ストリームに再導入されるべきであるレジスタファイルにおけるレジスタを識別する。
【００６８】
メモリ及びデータキャッシュ
主メモリ６０及びデータキャッシュ６２が図１に示されている。これらの動作は、以下に詳述される。データメモリ・ローンチ・ステージ２６及びデータメモリリターンステージ３０に接続されているデータキャッシュが、図１に示されている。これらの構成要素の多くの配置が、当業者に明らかなように可能である。
【００６９】
図１に示されたデータキャッシュ及び主メモリの接続は次のように作動する。メモリからの情報を要求する命令がデータメモリローンチステージ２６に到達すると、その要求はパス６１を介してデータキャッシュ６２に信号が送られる。その間に、命令は、それが答えを待っているステージ３０にパイプラインを上流に自由にどんどん先に進む。答えが見つかると、データキャッシュは、パス６３を介してデータメモリリターンステージ３０に要求される情報を送る。このパス６３で情報は、それを要求した命令と再結合する。データがデータキャッシュで使用不可能ならば、データキャッシュは主メモリにおける情報を探す。万一情報がそこで使用不可能ならば、トラップリターンが、マシンのトラップ動作が後述されるように呼び出されるだろうところのステージ３０で待っている命令に与えれるだろう。
【００７０】
パイプラインは、部分的に処理された命令を各ステージに記憶することができるため、図１のデータキャッシュ６２、主メモリ６０、及びパイプラインステージ２６及び３０の構成は、一度に３つのしがかりのメモリ参照があることを可能にする点に注意されたい。３つのメモリ参照がしがかり中であるとき、関与している３つの命令はステージ２６、２８及び３０にあるだろう。命令がステージ３０の命令に答えを戻すまで、わずかに命令はデータキャッシュにアクセスできるにすぎない。図９に関連して、別の未完了のメモリ命令を可能にするメモリ部の他の構成を後述する。
【００７１】
パイプラインにおける通信
通信パス１００及び１０２は、図１の各ステージ対間に示されている。通信パス１００は、命令をパイプラインの上流に送るために使用され、通信パス１０２は、結果をパイプラインの下流に送るために使用される。これらの通信手段は、各ステージ対間にある通信制御装置３８によって制御される。通信は、前述の同時係属出願「カウンタフローパイプライン」に記載されている規則に従う。各ステージ対間の制御装置３８は、競合要求が、出願「カウンタフローパイプライン」に記載されているような“カウンタ同期比較”を提供するような方法で満たされることを確実にして、情報を順序正しく上下に進行させるために設けられている。
【００７２】
単一ステージのレジスタ構成
本発明により形成されたパイプラインでは、ステージは基本構成において互いに全く類似している。典型的な構成は、典型的なパイプラインステージ２８のより詳細図である図２に示されている。ステージは、主に隣接ステージと、図１で既に示され、図２に一部示されている通信パス１００及び１０２に沿って両方向に通信する。
【００７３】
通信パス１００を通して下から上に流れる命令は、レジスタ装置１０４で捕らえられる。典型的な命令の構成は、命令コードＯＰ及び３つの同様なレジスタ部からなる装置１０４に示されている。３つのレジスタのうちの２つはソースレジスタのためのもので、１つはデスティネーションレジスタのためのものである。多数のソースレジスタ及びデスティネーションレジスタを適用し得るが、説明のために３つだけが示されている。示されている３つのレジスタ部は、下記のようになる。ｒｄ＝デスティネーションレジスタ名又はアドレス及び付加妥当性ビット、ｒｄｄ＝デスティネーションレジスタ値（既知ならば）、ｒ１ｓ＝第１のソースレジスタ名又はアドレス及び付加妥当性ビット、ｒ１ｓｄ＝第１のソースレジスタ値（既知ならば）、ｒ２ｓ＝第２のソースレジスタ名又はアドレス及び付加妥当性ビット、ｒ２ｓｄ＝第１のソースレジスタ値（既知ならば）。
【００７４】
同様に、通信パス１０２を通して上から下に流れる命令は、レジスタ装置１０６で捕らえられる。典型的な結果パッケージの構成は、レジスタ装置を表すボックスの中に示されている。図示されるように結果パッケージは２つの結果値を含んでいる。多数の結果値は結果パッケージで使用される。説明のために２つだけが使用される。示されている結果パッケージは次のものを含む。ｒｒ１＝第１の結果レジスタ名又はアドレス（既知ならば）及び付加妥当性ビット、ｒｒ１ｄ＝第１の結果レジスタ値（既知ならば）、ｒｒ２＝第２の結果レジスタ名又はアドレス（既知ならば）及び付加妥当性ビット、ｒｒ２ｄ＝第２の結果レジスタ値（既知ならば）。
【００７５】
各ステージは命令セットのある一部を実行する
図２は、命令修正装置１０８、関数計算ボックス１１０、結果修正装置１３０及びこれらの間の通信パス１１２、１１４、１１６及び１２８を示している。種々の動作が起こるとき示される制御パスは、図示されていない。
【００７６】
本発明のパイプラインでは、パイプラインの異なるステージは、マシンに使用可能である全命令セットの異なる部分を実行することができる。図２に示されるように、適当な値を計算することができる回路は選択されたステージに含まれる。幾つかのステージは全く計算も行わない。幾つかの実施例では、単一のステージは計算の全てを行うが、しかし通常、異なる種類の計算動作は異なるステージで行われる。もちろん、あるステージは使用されるべきである各命令の種類を実行することができなければならないが、しかし一つのステージも命令の種類を実行する必要がない。その上、命令の種類のどれか一つ実行することができる複数のステージがある。例えば、幾つかのステージは加算ができることで有用であることが分かるかもしれない。ステージ間のこれらの差異の詳細は、ステージ間で非常に異なっている関数ボックス１１０の特別の細部に一般に依存する。レジスタ１０４及び１０６、及び修正ボックス１０８及び１３０は、ステージ間で類似している。
【００７７】
結果パッケージ修正
図３は、結果修正ボックス１３０の内容を示している。図２のレジスタの現在値を示す情報は、その構成部分にして示された通信パス１２８の上部からこの装置に入力する。図３の結果修正ボックス１３０の目的は、その情報の多く又は全てを要求されるような命令からの情報と置換することにある。
【００７８】
２つのマルチプレクサ１３２及び１３４は、その構成部分として示された出力パス１０２の下流のステージに送るためにその３つの入力のうちの一つを選択する。したがって、通信パス１０２を介して下流に送られる次のステージへの出力結果値は、このステージで保持されるｒｒ１ｄ及びｒｒ２ｄと呼ばれる入力、ｒｄｄと呼ばれてこのステージで計算され、かつ通信パス１１４で送られる予め保持されたデスティネーション値、ｒｉｄと呼ばれてこのステージで計算され、図２の関数ボックス１１０からの通信パス１１２で送られ、かつレジスタ手段１４２に保持される値のいずれかを入力する。
【００７９】
２つのアドレス又は名前比較ユニット１３６及び１３８は、現在の結果ｒｒ１ｄ及びｒｒ２ｄのアドレス又は名前と命令の現在の結果ｒｄ及びｒｉとを比較する。これらの比較の結果は、図示されているようにマルチプレクサ１３２及び１３４を制御する。比較ボックス１３６及び１３８は、マルチプレクサのために選択する選択の範囲と一致する出力通信パス１０２に、名前情報又はアドレス情報を送る。
【００８０】
命令パッケージ修正
図４は、図２に示された命令修正ボックス１０８の内容を示している。レジスタ１０４からのデータパス１１４は、構成部分として図４の下部に示されている。出力通信パス１００は図４の上部に示されている。関数ボックス１１０への通信パス１１６、１１８及び１２０は図４の右側に示されている。
【００８１】
マルチプレクサ１２３及び関連制御装置１２２は、図の上部でデスティネーション出力ｒｄｄを形成するのに役立つ。デスティネーション出力ｒｄｄは、前のステージから送られて図の下部に入力する情報、又は通信パス１１２を介して関数ボックスからの代替デスティネーション情報のいずれかを示す。いずれの場合も、デスティネーションアドレスｒｄは、多分妥当性ビットを修正する制御装置１２２によってコピーされる。
【００８２】
制御装置１２４は、現在の命令のソースレジスタ名又はアドレスｒ１ｓと結果パッケージのレジスタ名又はアドレスｒｒ１及びｒｒ２とを比較する。一致する場合、マルチプレクサ１２５は、結果パッケージｒｒ２ｄ又はｒｒ１ｄからの正しい新しい情報に代える。合致しない場合、前の値ｒ１ｓｄは上向きに送られる。制御装置１２６及びマルチプレクサ１２７は、第２のソース値のための同一関数に役立つ。
【００８３】
レジスタ・レジスタ命令
本発明を理解するために、最新のコンピュータに使用される命令の共通の形式を理解しなければならない。その内容が大抵の命令を実行するときに使用される数十のレジスタのファイルを含むことは、最新のコンピュータでは普通である。各命令は、実行されるべき演算を指定し、かつ命令が実行されるべきであるレジスタファイルから１つ以上のレジスタを識別する。指定されたレジスタの幾つかは、命令のためのソースデータを保持し、指定されたレジスタの幾つかは、演算の結果として計算された値のためのデスティネーションである。例えば、ＳＰＡＲＣアーキテクチャマニュアルで特定されている一つのフォーマットの命令は、その合計が所望されている２つの値を提供する２つのソースレジスタ及び加算の結果を入れる単一のデスティネーションレジスタを参照する。
【００８４】
最新のコンピュータファミリための命令セット、例えば、ＳＰＡＲＣ命令セットは、指定レジスタの内容で異なる算術演算及び論理演算を実行するために多数のこのような演算を含んでいる。例えば、固定小数点加算、乗算、除算、論理シフト及びマスク処理が含まれている。多くのマシンはまた、同様な方法で別々のレジスタセットを参照する浮動小数点算術演算を含んでいる。
【００８５】
ほとんど最新のマシンでは、主メモリを参照する命令は、レジスタファイルに記憶された値に関しても、そのようにする。例えば、ＳＰＡＲＣ命令セットでロードと呼ばれる命令は、一つのレジスタの内容を、そこから情報を取り出し、取り出した情報を他のレジスタに配置する主メモリにおけるアドレスとして使用する。したがって、メモリ演算の形式は、ソースレジスタ及びデスティネーションレジスタの両方をアクセスする算術演算の形式と同一である。新しいデータを見つけるために使用される機構のみが違っている。算術演算の場合、計算回路は新しい値を見つける。メモリ演算の場合、新しい値は大容量メモリにおけるルックアップによって見つけられる。
【００８６】
各命令は、その命令によって使用され又は影響されるだろうレジスタを指定する。指示は、レジスタセットから特定のレジスタを独特に記述する２進コードである。ＳＰＡＲＣ命令セットでは、例えば、各レジスタを指定する２進コードは、５ビット長である。
【００８７】
本発明の目的のため、レジスタ指示がいかに符号化されたかは重要でない。しかしながら、符号化されたその特定の指示を意味するレジスタの“名前”又はレジスタ“アドレス”をここで、参照する。レジスタの名前又はアドレスは、それを他の同様なレジスタと区別する単なる指示であることを思い出すことが重要である。
【００８８】
レジスタとしてのコンディションコード
大抵の最新のマシンは、コンディションコードと呼ばれる数ビットによってそれらが処理される数について少数の簡単な事実を報告する。４つのコンディションコードは、一般に、（１）結果がゼロ（Ｚ）であるかどうか、（２）結果が負（Ｎ）であるかどうか、（３）実行された算術演算又は論理演算がオーバーフロー（Ｏ）を生じたかどうか、及び（４）実行された算術演算がキャリー（Ｃ）を生じたかどうかを指示するために使用される。
【００８９】
本発明により形成されたパイプラインプロセッサでは、このようなコンディションコードは、便宜的にレジスタとして扱われる。コンディションコードを発生する命令は、あたかもコンディションレジスタが付加デスティネーションレジスタであるかのように扱われる。入力としてコンディションコードを使用する命令は、それをソースレジスタ値として扱う。コンディションコード自身は、他のレジスタのコンディションコードと同様な名前又はアドレスを与えられる。レジスタアドレス比較回路は、丁度他のレジスタ値のようなコンディションコードを扱う。コンピュータのレジスタセットにおける単なる他のレジスタのようなコンディションコードのこの見方は、普通でない。大抵のマシンにおけるコンディションコードは、特別の重要性を保有していると考えられているため、それらは、しばしば、他のレジスタとは別々に扱われる。したがって、ＳＰＡＲＣ命令セットは、命令が２つのソースレジスタの内容を結合して、単一のデスティネーションレジスタに入れる“３アドレス”命令セットとして一般に考えられている。しかしながら、いくつかの命令が、２つのソースレジスタ値及び古いコンディションコード値を結合して、新しい演算の答え及び新しいコンディションコードセットの両方を生じるので、ＳＰＡＲＣ命令セットは“５アドレス”命令セットである。本発明では、コンディション値は、構成において有益な単純化が行われるならば、他のレジスタと丁度同じように扱われる。
【００９０】
最少規則
カウンタ同期比較
本発明の非常に有用な特徴は、各ステージが、上向きに流れる命令パッケージにおけるレジスタ名と下向きに流れる結果パッケージにおけるレジスタ名とを比較する回路を有することである。レジスタ名が一致する場合、ステージは、下向きのデータから情報を上向きの流れにコピーするか、又は、一方もしくは他方の方向のデータを削除するかあるいは削除するためにマークする。結果として、本発明では、パイプラインの幾つかのステージのそれぞれにおいて別々に実施されている簡単なローカル演算は、最新のコンピュータの必要とされる複合動作を適切に実施できる。カウンタフローパイプライン制御システムは、“カウンタ同期比較”のために設けられているため、このような簡単なローカル機構は、予想どおり機能する。カウンタ同期比較は、上向きに流れる命令をすべて、下向きに流れる結果の全てと強制的に出会わせ、かつ相互作用させ得ることを確実にする。
【００９１】
データパス回路
同時出願に記載されている制御機構は、カウンタ同期比較が実行できることを確実にする。図５には、汎用コンピュータで典型的な比較を行うアドレス比較回路又は名前比較回路が示されている。好ましくは、パイプラインの各ステージには、適切な制御及びこの最少比較装置を含んでいるので、どの命令もみな適切に処理される。
【００９２】
比較回路は、ソース及びデスティネーションを比較する多数の比較回路（１５０、１５２及び１５４が図示されている）からなる。これらは、図２、図３及び図４に関して一部既に記載されているような命令保持レジスタ１０４と結果保持レジスタ１０６間に接続されている。ここで、図５には、その機能をよりはっきりと示すために比較回路を示している。
【００９３】
命令パッケージ１０４におけるアドレス部又は名前部のそれぞれは、結果パッケージにおけるアドレス部又は名前部のそれぞれと比較されなければならない。図５では、図２に示されている二重結果パッケージと対比すると、単一の結果レジスタを有する一つの結果パッケージが示されている。これらの比較回路１５１、１５３及び１５５の結果は、システムを通してデータの流れを制御する制御回路１５６に送られる。図３でこの例は、既に示されている。比較装置１５０は、図３に示された比較及び制御装置１３６の一部である。同様に、比較装置１５２は、図４における比較及び制御装置１２４の一部である。同様に、比較装置１５４は、図４における比較及び制御装置１２６の一部である。
動作では、比較回路は、制御回路１５６によって作動される幾つかの場合を示している。
【００９４】
不一致
比較は、結果のレジスタ名と命令を伝えるソース及びデスティネーション名前間の不一致を示すことがある。この場合、結果は、後の命令と比較されるように下向きに送られる。
【００９５】
ソース一致
比較は、結果のレジスタ名と命令を伝える１つ以上のソースオペランドレジスタ名間の一致を示すことがある。この場合、ステージは、結果によって伝えるデータをコピーしてソースオペランド値ために命令における予約場所に入れる。これは図４のマルチプレクサ１２５及び１２７によって行われる。この処理は、“蓄積”と呼ばれる。これを、命令が、結果ストリームから必要とする値を“蓄積”すると言う。
【００９６】
デスティネーション一致
比較により、結果パッケージにおけるレジスタ名と命令パッケージにおいて伝えられるデスティネーションレジスタ名間の一致が示される場合、命令は、デスティネーションレジスタのための新しい値を有するか又は計算するかのいずれかである。この命令に続く命令は新しい値だけに応ずる。したがって、古い値は結果ストリームから取り除かれるか又は無効とマークされるかしなければならない。どちらの場合も後の命令に影響を及ぼさない。
【００９７】
デスティネーションが一致する場合、このような一致を有する命令が既に完了しているならば、一致されたレジスタために計算されたより新しい値がその結果パイプラインを通して既に下向きに送られていることに注目すべきである。それによって新しい結果は、新しい値を続く命令に既に送っている。このような一致を有する命令が未だ実行されていないならば、それは、後ほどその出力を結果ストリームに送る、よって順次それに続く命令に送る。どちらの場合も、前の命令から生じるように一致された結果は、同一のデスティネーションレジスタための値を有するか計算するだろう命令の存在によって古いものとされる。
【００９８】
機能停止
本発明により形成されたコンピュータでは、命令は、それがパイプラインのステージを通過するときソースデータを蓄積する。命令は、行き合う反対方向に流れる結果からこのソースデータを収集する。最後に、各命令は、それを実行することができるパイプラインのステージに到達する。命令が既に必要とされるソースデータの全てを蓄積していたならば、それは直ちに実行される。しかし、必要とされるソースデータの幾つか又は全部は消失されているかもしれない。
【００９９】
必要とされるソースデータの幾つか又は全部が消失されているならば、２つのことのうちの一つが起こる。パイプラインの後のステージは必要とされる値を計算することできるならば、命令は、その別のステージで実行されるべきパイプラインを通して上向きに送られる。しかしながら、命令がそれを実行することができるパイプラインにおける最後のステージに既に到達していて、命令がなおソースデータの幾つか又は全部を消失しているならば、その命令は、ソースデータが結果パイプを介して到達するまでそこで待たなければならない。このような遅延は“機能停止”と呼ばれる。
【０１００】
このような機能停止は、本発明の場合では、それが純粋にローカル事象であり得ることを除けば、他のプロセッサにおける機能停止事象と同様である。パイプのどこかで１つのステージがただ機能停止しただけであるため、全パイプラインを機能停止する必要はない。その関数を実行するか又はデータを前に又は結果を後ろに送るために他のステージのためのパイプラインに十分な空のスペースがあるならば、他のステージは依然として自由にそのように行える。本発明のパイプラインの設計においては一般的なグローバル機能停止を必要とするものは何もない。従来のパイプラインにおいて機能停止状態を認識し、作動する回路は、このようなシステムの速度においてはしばしば制限要因であるため、これは相当な長所である。
【０１０１】
弾力的である、すなわち要求があり次第余分のデータを吸収又は送ることのできる空のスペースを有しているパイプラインプロセッサをいかに設計するかは、当業者に周知である。本発明のパイプラインにこのようなバッファを入れることによって、幾らかのローカル機能停止が発生したとしても、機能停止によって影響を受けない部分は作動し続ける。もちろん、機能停止が十分長く存続するならば、パイプラインにおけるどこかでの機能停止は、最後には全パイプラインを停止させるだろう。しかしこのような事象はまれである。
【０１０２】
レジスタファイル及びレジスタキャッシュ
ここで、開示したパイプラインプロセッサの簡単な形式は、過去の命令だけからの結果をパイプラインの上部にあるレジスタファイルに記憶する。ソース値を必要とする命令は結果ストリームからの命令を蓄積する。このような結果は、もしこれが別の方法で使用可能でないならば、レジスタファイルからの結果ストリームを入力しなければならない。おおくの命令は２つのソース値を必要とするため、これはレジスタファイルからの値に対して大きな要求を発生する。
【０１０３】
プログラムの統計的分析により、レジスタのサブセットはその他のものよりも非常にしばしば使用されることが示される。しばしば使用されるレジスタの値を早くパイプラインに記憶させることによって、より精巧な設計は、レジスタファイルからの情報に対する要求を減少させる。このような機構を“レジスタキャッシュ”と呼ぶ。このようなレジスタキャッシュを有するパイプラインは図６に示されている。
【０１０４】
図６では、レジスタキャッシュ１６０は、通信パス１６２によってレジスタキャッシュインターフェースステージ２５に接続されている。レジスタキャッシュインターフェースステージは、その動作を制御するために通信パス５２によってレジスタファイルに接続する。図６では、単一のレジスタキャッシュはデコードステージ２４の丁度上に示されている。これはレジスタキャッシュを配置する妥当な場所であるけれども、それは決して唯一の可能な場所ではない。パイプラインにおいて、レジスタキャッシュを配置するのに便利なところはどこでも１つ以上のレジスタキャッシュが配置される。いかなる方法でも、レジスタキャッシュを含ませることは、パイプライン動作の正確さを変えない。レジスタキャッシュは、随分前に計算された結果をレジスタファイルで探す必要がある機会を減少させることによってマシンの速度を速めることをただ助けるだけである。
【０１０５】
幾つかのレジスタキャッシュのそれぞれは、レジスタファイルにおけるレジスタのサブセットための値を記憶する。これらのサブセットは部分的に重なるかもしれないし又は重ならないかもしれない。その最新の既知値がキャッシュに記憶される特定のレジスタの名前又はアドレスは一定であるか又はキャッシュに記憶されているサブセットは動的に変化する。可能な構成数はエンドレスである。何か特定の応用のために最も費用がかかる有効な装置の選択は、各構成が提供する性能上の改良の詳細な統計的研究を必要とする。
【０１０６】
ソース一致
レジスタキャッシュは次のような２ステップで機能する。第一に、レジスタキャッシュにおける有効レジスタのレジスタ名又はレジスタアドレスは、ステージ２５で保持される命令におけるソースレジスタ名又はレジスタアドレスと比較される。一致がある所はどこででも命令は、それをコピーすることによってキャッシュからの値を蓄積する。
【０１０７】
デスティネーション一致
第二に、命令のデスティネーションレジスタ名は、レジスタキャッシュに保持される全てのレジスタ名と比較される。一致が見つかった任意のレジスタ名は、次のようなレジスタキャッシュの内容又は状態に変化を引き起こす。もし命令が既にそのデスティネーションレジスタのための値を計算したならば、その値はコピーされ、レジスタキャッシュに入れられ、かつ有効とマークされる。もし命令がそのデスティネーションレジスタのための値をまだ計算されていないならば、対応するレジスタキャッシュエントリは無効とマークされる。
【０１０８】
結果一致
結果がレジスタキャッシュに送られるとき、それはまたレジスタキャッシュの状態又は内容を変更する。もし一致が、結果の名前とレジスタキャッシュにおけるレジスタ名の間で見つかったならば、結果からの値は、コピーされレジスタキャッシュに入れられ、そのレジスタは有効とマークされる。
【０１０９】
命令削除
トラップ
トラップ及び割り込みは、最新のコンピュータの設計において連続する難事の原因である。本発明により形成されたパイプラインでは、トラップ及び割り込みは容易に処理される。トラップを生じる命令は、トラップそのものを、あたかもそれが特殊な種類の結果であったかのように扱い、それを結果ストリームに挿入する。トラップの結果がパイプラインを通過すると、それは、それが出会った命令を、命令パイプラインから命令を取り除くか又は命令に無効とマークするかのいずれかによって削除する。
【０１１０】
図７Ａ及び図７Ｂは、本発明のパイプラインにおけるトラップの動作を示すことを意図している。ステージ２７〜４１を有するパイプラインが示されている。各ステージの左部は、その命令内容を示し、各ステージの右部は、その結果内容を示している。図７Ａでは、命令Ｉ１〜Ｉ６は、選択されたステージにおいて、パイプラインが動作している場合を示している。ステージ２７及び３１は、たまたま命令を含んでいない。単一の普通の結果Ｒ１はステージ３１における一つの位置を占有する。
【０１１１】
図７Ａは、トラップ結果がその長さに沿って部分的な通路に送られた後の典型的なパイプラインの状態を示す。トラップを引き起こす命令Ｉ２はステージ３９に示されている。トラップ結果は、２つのステージを下向きに移動してステージ３５に到る。トラップＩ２を引き起こした命令及びトラップ結果によって送られた他の命令Ｉ３及びＩ４は、その名前に斜線を引くことによって図に示されるように無効とマークされる。それらは、その後、パイプから取り除かれる。
【０１１２】
図７Ｂは、トラップ結果がさらにパイプラインの下端の方へ移動した後の同一パイプラインの状態を示す。このトラップはステージ２９に到達した。その前方に下向きに移動する結果ＲＩは視界から見えなくなった。トラップが渡した命令は、主としてパイプラインを空のままにしておいて、全てパイプラインから取り除かれる。新しい命令Ｉ７は、丁度パイプラインに入るが、しかし、トラップが最初に移動するならば、ステージ２７で、又は命令が最初に移動するならばステージ２９でのいずれかで複数の命令が出会うやいなやトラップによって削除されるだろう。
【０１１３】
図７Ａと図７Ｂ間の時間分離は任意である。特定のパイプライン設計では、命令は結果よりも早く又は遅く移動する。したがって、ここで、図示されているのは動作を表しているだけである。当業者は、いかにトラップが特定の命令と相互作用するかの他の最もらしいシナリオをもたらすことが容易にできる。トラップの前方の命令は、パイプライン及び結果パスのこれらの部分の相対速度によりさらに進んで又はより少なく移動する。トラップは、トラップ及び命令の相対伝搬速度によりパイプラインにおいて早かれ遅かれ近づいてくる命令と出会う。
【０１１４】
トラップ結果が、パイプラインの下部にある図１の命令取り出しユニット３４に到達すると、命令取り出しユニットはトラップロケーション又は割り込みロケーションから命令を取り出し始める。したがって、トラップ後の全ての命令は取り除かれ、レジスタファイルの内容を変える。トラップ以前の全ての命令は、もちろん、通常の方法で完了し、その結果をレジスタファイルに正しく配置したままである。
【０１１５】
推測実行
本発明では、トラップによる不所望命令の削除を可能にする同一の機構は、推測実行ために不適当に発行された命令を削除するために使用され得る。図１の条件付きブランチ取り出しユニット３４は、可能な後続命令ストリームの一方又は他方から命令を取り出し、これらを推測的に発行してパイプラインに入れる。そのように発行された各命令は、条件付きブランチの２つの結果のどちらがそれを許容可能にするか、どちらがそれを古いものと認定するかを識別するためにマークされる。
【０１１６】
条件付きブランチ命令は通常のようにパイプラインを上流に進行する。条件付きブランチ命令は、その結果のどれが推測発行のために選択されるかを示す情報を伝える。条件付きブランチ命令は、そのソースデータとしてデータ要素の値又はそれがテストすることであるレジスタの値を必要とすることに注意されたい。最後には、条件付きブランチ命令は結果ストリームからのその値を蓄積する。そのようにするならば、条件付きブランチ命令は、実行する用意ができている。
【０１１７】
条件付きブランチの実行
条件付きブランチの実行は任意の他の命令の実行と非常に似ている。命令タイプ及びソースデータに基づいて、条件付きブランチを実行するステージはその結果を決定する。この結果は、前述のトラップ結果と非常に似ている特別の結果として結果パイプに挿入される。条件付きブランチの結果の結果は、推測で不適当に発行された全ての命令を選択的に削除するために下流のステージによって使用される情報をそれとともに伝える。条件付きブランチの結果の結果が命令取り出し機構に到達するとき、命令取り出し機構は、連続命令取り出しのための適当なアドレスを伝える。もちろん、推測が正しかったならば、このような特別な結果が省略される。
【０１１８】
本発明に使用されるカウンタフローパイプラインのカウンタ同期比較特性は、パイプラインを下流に移動するあらゆる結果が、上流に移動するあらゆる命令に出会うことを確実する。したがって、条件付きブランチ結果は、それが命令取り出し機構に到達するまでどの後の命令もみな相互作用する。したがって、命令が必要とされるならば、いかなる命令も削除を免れられない。
【０１１９】
サイディング
同時出願におけるカウンタフローパイプラインの記載は、分岐されたパイプラインの説明を含んでいる。この節では、本発明の特別な特徴を示すためにこれらのアイデアを幾分専門的な形で時々使用する。
【０１２０】
通常、任意の命令セットに含まれる幾つかのタイプの算術演算及び論理演算がある。本発明により形成されたパイプラインでは、各々のこのようなタイプの命令は別々のステージで実行される。例えば、単一ステージはシフト演算に当てられる。シフト演算は比較的まれであるため、このステージはパイプラインを通る情報の流れを滑らかにするために他の演算のためのバッファステージとして役立つ。
【０１２１】
乗算のようにより長くかかる非常に難しい算術演算に関しては、分岐するパイプラインが使用される。図８は、乗算及び加算を実行するために使用される２つの算術“サイディング（ｓｉｄｉｎｇ）”のブロック図である。４つのパイプラインステージ４７、４９、５１及び５３が含まれる。含まれる計算素子は、任意の所望の計算を実行できたけれども、説明に役立つために、乗算器１７０及び加算器１７６がまた示されている。乗算器１７０及び加算器１７６又は他の計算素子が含まれるものは何でも米国特許第５，１８７，８００号明細書等に記載されているようなパイプライン型装置である。乗算器及び加算器の唯一の重要な特徴は、その入力にオペランドを与えると、最後にはその出力に結果を生じることである。それらはそれ自身パイプライン型装置であるならば、それらは、それらの第１の出力セットを生じる以前に付加的入力セットを受け入れることができる。
【０１２２】
図８に示されるように、乗算器は、主パイプラインのステージ４７からステージ５１まで延び、加算器は、ステージ４９からステージ５７まで延びる。スパンの範囲、すなわち計算素子、この場合、加算器及び乗算器が延びるパイプラインのステージ数は、設計するのに便利であれば何でもよいことを理解しなければならない。この範囲は、含まれる関数の最も高速な実行又はより安価な実行のために選択されるだろう。
【０１２３】
単一のサイディングの動作
図８の構成は、次のように動作する。ステージ４７に到達する乗算命令は、それがそのソースデータ値の全てを蓄積してしまうまで待つ。乗算器の入力に接続されたステージ４７は、次に、データパス１７２上の乗算器にソース値を送ることによって乗算演算を開始する。これは、前述のカウンタフローパイプラインの同時継続出願に記載されている分岐されたパイプラインを修正して使用たものである。これを行った後、次に、ステージは乗算命令を放出して、ステージ４９を通って、主パイプラインを上流に進行してステージ５１に到る。ステージ５１では、乗算演算は積を戻すために乗算装置を待つ。もちろん、よく設計されたマシンでは、命令が２つのステージを前進するのに要する時間は、乗算演算を行うのに要する時間に一致し、計算された積が命令に再結合する前に何らかな待ちが必要であるならば、小さいものである。ステージ５１で積が受け取られるならば、乗算命令が実行される。次に、ステージ５１は、答えを命令のデスティネーション部及び結果のパイプラインの両方に配置する。
【０１２４】
インターロックされたサイディングの動作
乗算命令の後に、累積加算命令が続くことがしばしば起こる。このようなプログラムは、多くの数学演算で必要な“積の和”を計算するために一般に使用される。累積加算命令は、新しく形成された積に、レジスタ、例えばレジスタＸに記憶されたソース値を加算して、そのデスティネーションレジスタＸにその和を戻す。
【０１２５】
このような命令が与えられたとき、図８に示された演算素子のインターロック配置がいかに動作するかに注目されたい。乗算は前述のように実行される。ステージ５１は、乗算命令によって生じた積を、命令が下方に移動し、間もなく加算命令に遭遇する結果ストリームに挿入する。加算命令は、乗算命令の結果なしにその必要なソース値の全てを蓄積することができないため、パイプラインのステージ４９を越えて進むことはできない。乗算命令の結果がステージ４９おける加算命令に到達するとき、このステージは、加算演算をデータパス１７８を沿って加算器サイディング１７６で開始する。加算命令は、次に、ステージ５１〜５３を通って前進する。加算命令が完了すると、ステージ５３は加算命令のデスティネーション部に値を記録し、その上に結果ストリームにもそれを挿入する。それは、結果パイプを下って新しい値を蓄積する次の累積加算命令に進む。
【０１２６】
その間に、次の乗算命令はステージ４７に到達し、その乗算演算を開始している。したがって、計算ステージのインターロック配置は、前の累積加算が終了する前に次の乗算が開始することを可能にする。この演算の重なりは、パイプラインにおける非常に高速な計算を提供する。
【０１２７】
図８のインターリーブされた構成は、乗算演算及び累積加算演算のシーケンスを必要とする積の非常な高速形成を可能にすることに注目されたい。その上に、結局レジスタＸに記憶させる実行和の適性値が、レジスタファイルに参照しないで一つの累積加算演算から次の累積加算演算まで結果パイプラインを下がって送られるため、パイプラインの上部端にあるレジスタファイルへの参照は、完全に避けられることに注目されたい。
【０１２８】
本発明は、パイプラインの各ステージが特定の命令タイプにある特別の関係を有することを企図する。幾つかのステージは加算し、幾つかはメモリに参照し、幾つかは論理演算を行う。幾つかのステージは、いくつもの演算又は全ての演算さえ実行する結合ステージである。本発明は、ステージにおいて異なる演算の配列を有する多くのステージ配置があることを企図する。例えば、加算器ステージは、本発明の一つの実施例においてシフトステージより先にきて、他の実施例においてシフトステージの後にくる。ステージが演算を実行することができる特定の順序は、実行されるべき命令の細部によって決定されるべきである。多くの異なる配列は異なる目的のため有用であることが分かる。
【０１２９】
メモリ
図９は、本発明の主パイプラインと主メモリ６０の間の好ましい接続を示している。主メモリ６０は、一般的形で現在普通に使用されているものと同様で、当業者によく知られている。メモリシステムは、メモリシステム制御１９０、キャッシュメモリ６２及び主メモリ６０からなる。メモリシステムは、前述のように主パイプラインのデータメモリローンチステージ２６から入力される。
【０１３０】
メモリ参照命令が主パイプラインのステージ２６に到達すると、そのステージは、通信パス１９６及び制御パス１９７を介してメモリシステム制御１９０に命令からのソース情報を送り込む。他のこのような演算に関してのように、命令のためのソース情報が命令において全てまだ使用可能でないならば、そのソース情報が結果ストリームから蓄積されるまで、命令はステージ２６で待つ。ソース情報をメモリシステムに送ったならば、ステージ２６は、メモリ参照命令がパイプラインを上がって移動することを可能にする。メモリ参照命令は、メモリシステムからの応答をステージ１９２で待つ。
【０１３１】
アドレス変換
当業者は、メモリシステムの動作ステップを認識する。メモリシステムは、最初にソース情報をその内容が所望されるメモリアドレスに変換する。最新のコンピュータには使用されている多くの変換方式がある。本発明の設計者は、このシステムの要求に応じて一つの方式を選択する。それらの目的は、もちろん、プログラムに使用されているアドレス値をコンピュータのメモリシステムにおけるロケーションに変換することである。
【０１３２】
キャッシュルックアップ
次に、メモリシステムは、そのキャッシュメモリにおいてアドレスされたロケーションの値を探す。このような値が見つかるならば、“キャッシュヒット”が発生すると言われ、後述されるように必要なメモリ動作はほとんど終了される。このような値が見つからないならば、“キャッシュミス”が発生すると言われ、メモリシステムは主メモリにおいてこの値を探さなければならない。
【０１３３】
キャッシュヒット
従来の計算機システムでは、キャッシュミスは、通常コンピュータに報告されない。しかしながら、本発明の好ましい実施例では、メモリ動作を開始した命令は、主パイプラインのステージ１９２で待っている。もしキャッシュヒットが発生するならば、キャッシュからの取り出された値を示すデータは、パス１９８を介してステージ１９２に戻り、メモリ命令が実行される。ステージ１９２は、その情報を命令のデスティネーション部へコピーし、またそれを結果ストリームにそれを配置する。その結果、メモリ命令は完了し、それがそのデスティネーション値をパイプラインの上部端にあるレジスタファイルにコピーするまで更なる動作要求はない。
【０１３４】
キャッシュミス
キャッシュミスが発生するならば、メモリシステムは、パス１９８を介してステージ１９２にキャッシュミスがあったことを示すメッセージを送る。この場合ステージ１９２は、メモリ命令を出して、パイプを上向きに移動させるが、しかし命令はまだ完了していない。このようなメモリ命令は、それが、主メモリから戻るために情報を再び待つステージ１９４に移動する。主メモリへのアクセスが成功するならば、情報は、パス２００を介してメモリ動作を完了するステージ１９４に送られる。このステージ１９４は、命令のデスティネーション部に戻された値を配置し、それを結果ストリームに挿入する。
【０１３５】
メモリ障害
要求される情報が主メモリで使用可能でないことが起こる。これが検出されるやいなや、アドレス変換処理の一部として又は主メモリへのアクセス後のいずれかに、障害メッセージが、それぞれパス１９８を介してステージ１９２又はパス２００を介してステージ１９４のいずれかに戻される。この場合、トラップが指示されなければならない。前述の如く、ステージ１９２又はステージ１９４は、結果ストリームに特別のトラップ結果を配置することによって開始される。
【０１３６】
サイディング構成の利点
好ましい実施例の構成の一つの利点は、それが、幾つかのメモリ参照が直ぐにしがかり中（ｏｕｔｓｔａｎｄｉｎｇ）となることを可能にすることである。メモリ参照命令が主パイプラインのステージ２６を離れるやいなや、他の命令がその位置につく。メモリシステムは、幾つかの部分的に処理された参照を同時に含むパイプライン法でこれらの参照を処理することができる。キャッシュヒットを生じさせる参照は、実際ステージ１９２で完了する。キャッシュミス及び主メモリへのアクセスを必要とする参照は、時間が長くかかり、ステージ１９４に値を戻す。キャッシュヒットを生じさせる幾つかの命令は、主メモリへの１回以上の参照が進行中、完了することができる。主パイプラインの簡単な構成は、各命令のために取り出されたデータが、命令が正確な順序で実行されるならば、到達するであろうような他の命令だけに到達することを確実にする。
【０１３７】
浮動小数点
多くの命令セット、特にＳＰＡＲＣ命令セットでは、固定小数点演算と浮動小数点演算との区別がされる。別々のレジスタセットが使用され、別々のコンディションコードなどが使用される。
【０１３８】
固定小数点演算と浮動小数点演算とのこのような区別がされるコンピュータでは、図１０に示されるように分岐されたパイプラインが利点を得るために使用され得る。示されているパイプラインは３つの部分に分けられている。第１のセクション２０４は、固定小数点演算と浮動小数点演算の両方で共通に使用される。２つの上部セクションの一方、例えば、２０４は固定小数点演算のために使用され、他方２０８は浮動小数点演算のために使用される。分岐点にある制御機構２１０は適切な演算タイプを上向きにそれぞれのパイプラインセクションに送る。
【０１３９】
分岐点で、固定小数点演算が固定小数点パイプラインを上向きに送られ、浮動小数点演算は浮動小数点演算パイプラインを上向きに送られる。これは、前述のカウンタフローパイプラインに記載されているように分岐の種類に依存するデータである。２つの別々の上部パイプラインからの結果は、結合装置２１１によって多数の方法のどれかで下位結果ストリームに結合される。最初に来たものが最初にサービスされることが適当である。しかしながら、結果は異なるレジスタを参照し、したがって特定な方法で配列される必要がないため、特定な選択は重要でない。
【０１４０】
浮動小数点を実施するための他の構成が図１１に示されている。ここで、単一のパイプラインは２つのレジスタファイルにサービスする。一方のレジスタファイルは浮動小数点演算２１２のためのもので、他方のレジスタファイルは固定小数点演算２１４のためのものである。命令が第１のレジスタファイルに到達する時間までに任意の浮動小数点演算が完了する。固定小数点演算はそのソースオペランドの幾つかを蓄積したが、まだ実行されていない。ステージ２１２とステージ２１４間のパイプラインの上部は、固定小数点演算を行うことに必要である回路を含む。
【０１４１】
この分離は、ファミリの幾つかのメンバーは特定の種類の命令を実行でき、その他のメンバーは実行できないコンピュータファミリにおいて特に有用である。ファミリの単純なメンバーは、図１１の外部に対して形成され得る一方、より強力なメンバーは付加ステージを含んでいる。多くの種類の特別な演算が浮動小数点演算に加えて使用される。例えば、グラフィック演算、信号処理演算又は特別の論理関数が設けられている。
【０１４２】
本発明の好ましい実施例は図１０に示すような分岐されたカウンタフローパイプラインからなる。
【０１４３】
分岐されたカウンタフローパイプラインに接続されているのは、図８に示されるような演算のためのサイディングであり、図９に示されるようなメモリのためのサイディングである。固定小数点乗算及び浮動小数点乗算並びに加算のための演算サイディングが含まれる。
【０１４４】
本発明の好ましい実施例は、図１１に示されるような同時継続出願のカウンタフローパイプラインに概説されている通信プロトコルの非同期形式を使用する。
【０１４５】
非同期通信プロトコルは、それがパイプラインの弾力的な形式を簡単にし、よって要求されるときはいつでもどこでも結果を結果パイプラインに挿入されることを可能にするため、好ましい。通信されなければならないデータを考慮して、それは回路ができるだけ高速に実行することを可能にするために、好ましい。特に、パイプラインが空であるとき、最大データ転送速度を提供する。
【０１４６】
本発明の好ましい例では、各ステージは必要とされる処理の特殊部分を行う。加算は、他の演算よりも時間がかかるキャリー演算を必要とするため、別々のステージで論理演算と分離される。
【０１４７】
当業者は多くの他の方法及び本発明を使用する応用を理解するだろう。したがって、本発明の範囲は、前述の詳細な実施に限定されるものでない。
【図面の簡単な説明】
【図１】命令取り出し装置及びレジスタファイルを含む本発明により形成された一般的なパイプラインプロセッサのブロック図、
【図２】隣接ステージに通信パスを示す本発明により形成されたプロセッサの単一ステージのブロック図、
【図３】本発明により形成された単一ステージための結果修正回路のブロック図、
【図４】本発明により形成された単一ステージための命令修正回路のブロック図、
【図５】命令及び結果がいかに比較されるかを示す本発明の典型的実施例の単一ステージにおける命令ラッチ及びデータラッチ並びにアドレス比較回路のブロック図、
【図６】１以上のレジスタキャッシュがいかにパイプラインに配置されるかを示す図、
【図７】どの命令がなお有効であるかを指示するトラップが発生した直後に本発明により形成されたパイプラインの状態を示す図（Ａ）、および、トラップの結果パッケージが使用できない命令を一掃するパイプラインを通して移動した後のこのようなパイプラインの状態を示す図、
【図８】本発明により形成されたコンピュータは、いかに演算要素を組み込んだかを示す図、
【図９】本発明により形成されたコンピュータは、いかにメモリシステムを組み込んだかを示す図、
【図１０】浮動小数点演算及びレジスタファイルを固定小数点演算及びレジスタファイルから分離するブランチパイプラインを示す図、
【図１１】別々のレジスタファイル及び別々のステージが、浮動小数点演算を固定小数点演算から分離するために使用される単一のパイプラインを示す図である。
【符号の説明】
２０・・命令メモリランチステージ、２２・・命令メモリリターンステージ、
２４・・デコードステージ、２５・・レジスタキャッシュインターフェースステージ、２６・・データメモリランチステージ、２８・・ＡＬＵステージ、
３０・・データメモリリターンステージ、３２・・レジスタファイル制御ステージ、３４・・命令取り出しユニット、３６・・命令キャッシュ、
３８・・制御装置、４０・・カウンタフローパイプライン、
５０・・レジスタファイル、５２・・通信パス、６０・・主メモリ、
６１・・パス、６２・・データキャッシュ、６３・・パス、
１００，１０２・・通信パス。
【図１】
0003575632.tif 000002
【図２】
0003575632.tif 000003
【図３】
0003575632.tif 000004
【図４】
0003575632.tif 000005
【図５】
0003575632.tif 000006
【図６】
0003575632.tif 000007
【図７】
0003575632.tif 000008
【図８】
0003575632.tif 000009
【図９】
0003575632.tif 000010
【図１０】
0003575632.tif 000011
【図１１】
0003575632.tif 000012