(57)【特許請求の範囲】
【請求項１】
マイクロプロセッサ・アーキテクチャであって、
複数種類の機能ユニットを含む複数の機能ユニットで構成された機能ユニット並列アレイと、
前記複数の機能ユニットによって使用されるレジスタアレイと、
命令をデコードする命令デコーダと、
前記命令デコーダによるデコード結果に応じて前記命令を前記機能ユニット並列アレイ内のいずれかの機能ユニットに割り当てるとともに、前記命令が実行可能なときに前記機能ユニットに前記命令を発行して実行を開始させる命令発行ユニットと、
各命令の実行に使用するためのレジスタの割当を行うとともに、実行保留中の命令に関するレジスタ依存関係に基づいて前記実行保留中の命令が実行可能な状態にあるか否かを判断して前記命令発行ユニットに通知するレジスタ改名ユニットと、
前記機能ユニット並列アレイ内のいずれかの機能ユニットで実行されていた命令の実行完了後に、前記実行されていた命令の実行結果を前記レジスタ改名ユニットによって割り当てられていたレジスタに格納するリタイア制御ユニットと、
前記機能ユニット並列アレイ内のいずれかの機能ユニットにおける命令の実行が完了したときに、完了制御信号を前記レジスタ改名ユニットと前記命令発行ユニットと前記リタイア制御ユニットとに送信することによって命令の完了を通知する完了制御ユニットと、
を備え、
前記機能ユニット並列アレイに実装されている前記複数の機能ユニットは、前記命令発行ユニット及び前記完了制御ユニットに対してそれぞれ並列に接続されており、
前記命令発行ユニットには前記機能ユニット並列アレイに実装されている個々の機能ユニットと命令の種類との関係付けが設定されており、前記命令発行ユニットは、前記関係付けに応じて各命令を前記複数の機能ユニットのいずれかに割り当てる処理を実行し、
前記複数の機能ユニットのそれぞれは、各機能ユニットの機能を実行するために特定の制御フロー・オペレーションを実行し、
前記命令デコーダと前記レジスタ改名ユニットと前記リタイア制御ユニットと前記完了制御ユニットとは、前記機能ユニット並列アレイに実装されている機能ユニットの種類と数に依存せずに同一の制御を実行するように構成されている、
マイクロプロセッサ・アーキテクチャ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＩＳＣ型マイクロプロセッサ・アーキテクチャの設計に関し、特に、特定の計算機能に合わせてチューン（調整）したものを含めて、機能的な計算エレメントをアーキテクチャに追加することによって計算スループットを向上するために容易に拡張することのできるＲＩＳＣマイクロプロセッサ・アーキテクチャに関する。
【０００２】
以下に列挙した米国特許出願は本件特許出願と同時に米国特許出願され、係属中のものであるが、これらの米国特許出願に開示されており、かつそれぞれ対応して出願された日本での特許出願に開示されている事項は、その出願番号を本明細書で引用することにより本明細書の一部を構成するものとする。
（１）発明の名称「高性能RISCマイクロプロセッサ・アーキテクチャ」(High-Performance RISC  Microprocessor Architecture) SMOS 7984 MCF/GBR, 米国特許出願第07/727,006号、1991年７月８日出願、発明者Le T.Nguyen 他、及びこれに対応する特願平５ー５０２１５０号（特表平６ー５０１１２２号公報）。
（２）「アーキテクチャ上の依存関係を隔離したRISCマイクロプロセッサ・アーキテクチャ」（RISC  Microprocessor Architecture with Isolated Architectural Dependencies) SMOS 7987 MCF/GBR,  米国特許出願第07/726,744号、1991年７月８日出願、発明者Le T. Nguyen他、及びこれに対応する特願平５ー５０２１５２号（特表平６ー５０２０３４号公報）。
（３）発明の名称「複数型レジスタ・セットを採用したRISCマイクロプロセッサ・アーキテクチャ」（RISC  Microprocessor Architecture ImplementingMultiple Typed Register Sets) SMOS 7988 MCF/GBR/RCC,米国特許出願第07/726,773号、1991年７月８日出願、発明者Sanjiv Garg 他、及びこれに対応する特願平５ー５０２４０３号（特表平６ー５０１８０５号公報）。
（４）発明の名称「高速トラップと例外状態をインプリメントしたRISCマイクロプロセッサ・アーキテクチャ」（RISC  Microprocessor Architecture Implementing Fast Trap and Exception State) SMOS 7989 MCF/GBR/WSW,  米国特許出願第07/726,942号、1991年７月８日出願、発明者Le T.Nguyen 他、及びこれに対応する特願平５ー５０２１５４号（特表平６ー５０２０３５号公報）。
（５）発明の名称  「シングル・チップ・ページ・プ  リンタ・コントーラ」(Single Chip Page Printer Controller) SMOS 7991 MCF/GBR,米国特許出願第07/726,929号、1991年７月８日出願、発明者Derek J.Lentz 他、及びこれに対応する特願平５ー５０２１４９号（特表平６ー５０１５８６号公報）。
（６）発明の名称「複数の異種プロセッサをサポートすることのできるマイクロプロセッサ・アーキテク  チャ」(Microprocessor Architecture Capable of Supporting Multiple Heterogeneous Processors) SMOS 7992 MCF/WMB,米国特許出願第07/726,893号、1991年７月８日出願、発明者Derek J.Lentz 他、及びこれに対応する特願平５ー５０２１５１号（特表平６ー５０１１２３号公報）。
【０００３】
なお、本明細書の記述は本件出願の優先権の基礎たる米国特許出願07/727,058号の明細書の記載に基づくものであって、当該米国特許出願の番号を参照することによって当該米国特許出願の明細書の記載内容が本明細書の一部分を構成するものとする。
【背景技術】
【０００４】
最近は、マイクロプロセッサ・アーキテクチャの設計は、複合命令セット・コンピュータ(Complex  Instruction Set Computer -CISC) の使用からより単純化された縮小命令セット・コンピュータ（Reduced Instruction Set ComputerーRISC) アーキテクチャまでに成熟している。CISCアーキテクチャの特徴は、命令実行パイプラインを実現し、サポートが大部分ハードウェアで行われていることである。従来の代表的パイプライン構造は、命令フェッチ・ステージ、命令デコード・ステージ、データ・ロード・ステージ、命令実行ステージおよびデータ・ストア・ステージを一定の順序で含んでいる。命令セットの異なる部分をパイプラインのそれぞれのステージを通して同時並行に実行させると、パフォーマンスの向上が得られる。パイプラインが長くなると、利用できる実行ステージの数がそれだけ多くなり、かつ同時並行に実行できる命令数が多くなる。
【０００５】
CISCパイプライン・アーキテクチャの効率を制約する一般的問題として、２つある。最初の問題は、先行する条件コード設定命令がパイプラインを通して実質的に実行を完了するまで条件付きブランチ命令を評価できないことである。従って、条件付き命令の以後の実行が遅延または停止 (stall)されるので、いくつかのパイプライン・ステージは複数のプロセッサ・サイクルの間インアクティブのままになっている。代表例として、条件コードがプロセッサ・ステータス（状況）レジスタ(processor status registerー PSR) とも呼ばれる条件コード・レジスタに書かれるのは、実行ステージを通して命令の処理が完了したときだけである。そのため、ブランチ条件コードが判断されるまで、条件付きブランチ命令を複数のプロセッサ・サイクルの間デコード・ステージに残したままパイプラインを停止させなければならない。パイプラインが停止すると、スループットが大幅に損失することになる。さらに、コンピュータの平均的スループットは、条件付きブランチ命令がプログラム命令ストリームの中で条件コード設定命令のあとに接近して何回現れるかによって左右される。
【０００６】
もう１つの問題は、プログラム命令ストリームの中で近接して現れる命令がプロセッサ・レジスタ・ファイルの同じレジスタを参照する傾向にあるという事実から起こる。データ・レジスタは順次の命令のストア・ステージとロード・ステージでデータの宛先またはソースとしてよく使用される。一般的に、データをレジスタ・ファイルにストアする命令は、次の命令のロード・ステージ処理がレジスタ・ファイルをアクセスできるようにする前に、少なくとも実行ステージでの処理を完了していなければならない。多くの命令は、ストア・データを得るためにその実行に１つの実行ステージで複数のプロセッサ・サイクルを必要とするので、実行ステージのオペレーションが持続している間、パイプライン全体が停止されるのが代表的である。その結果、コンピュータの実行スループットは、実行される命令ストリームの内部順序に実質的に左右される。
【０００７】
第３の問題は命令自体の実行が原因で起こるのではなく、マイクロプロセッサ自体のハードウェアがサポートする命令実行環境、つまり、マシンの状態(state-of-the machine)の維持から起こる問題である。現在のCISCマイクロプロセッサ・ハードウェア・サブシステムは命令の実行中にトラップ条件が現れたことを検出することができる。トラップには、ハードウェア割込み、ソフトウェア・トラップおよび例外がある。各トラップが現れたときは、対応するトラップ処理ルーチンをプロセッサに実行させる必要がある。トラップが検出されたときは、トラップ処理ルーチンの即時実行を可能にするために実行パイプラインをクリアする必要がある。それと同時に、トラップが生起した正確な点で、つまり、そのとき実行中の最初の命令が割込みとトラップのために終了したときであり、かつ、例外が原因で失敗した命令の直前に生起した正確な点でその時点のマシンの状態を設定する必要がある。引続き、マシンの状態と、この場合も、トラップの内容に応じて、実行中の命令自体を処理ルーチンの完了時に復元する必要がある。その結果、各トラップまたは関連事象が発生すると、処理ルーチンの開始時と終了時、および正確なマシンの状態のストアと返却時の双方においてパイプラインをクリアすることにより待ち時間が生じ、プロセッサのスループットがそれに応じて減少するとになる。
【０００８】
これらの問題を解決するために、CISCアーキテクチャの滞在的スループットを向上するための種々の試みが行われている。条件付きブランチ命令が正しく実行されたことを想定すれば、ブランチ条件コードが最終的に判断される前にパイプライン実行を暫定的に進めることができる。また、レジスタが変更されるかどうかについても想定を行うことにより、そのあとに続く命令を暫定的に実行させることもできる。最後に、ハードウェアを実質的に追加すれば、処理ルーチンの実行を必要とする例外の発生を最小にすることができるので、プログラム命令ストリームの処理に割込みをかける（中断させる）例外の発生回数を少なくすることができる。
【０００９】
これらの解決方法は、ハードウェアをさらに実質的に複雑化することは明らかであるが、その解決方法自身にもそれぞれの問題がある。ブランチ条件またはレジスタ・ファイル・ストア・アクセスのいずれかが最終的に解決する前に命令の実行を継続させるためには、条件付きブランチのロケーションを含むプログラム命令ストリーム内の複数の点のいずれか、レジスタ・ファイルの各変更、および例外が何か発生した場合には、最後のいくつかの命令の実行が完全に終了する以前の点にマシンの状態を復元可能にする必要がある。その結果、これをサポートするためのハードウェアが別に必要になり、しかも、どのパイプライン・ステージのサイクル・タイムも、大幅に増加しないように特別に設計しなければならない。
【００１０】
RISCアーキテクチャでは、上述した問題の多くを回避するために、マイクロプロセッサ・アーキテクチャのハードウェアによる現実を大幅に簡略化することを試みている。極端な場合には、各RISC命令は、ロード・サイクル・実行サイクル、およびストア・サイクルを含む３つのパイプライン化プログラム・サイクルにおいてのみ実行される。公知のRISCアーキテクチャでは、ロードとストア・データをバイパスする手法を用いることによって、３ステージ・パイプラインでサイクルごとに１つの命令を実行することを可能にしている。
【００１１】
可能な限り、 RISC アーキテクチャにおけるハードウェア・サポートは、必要とする機能を実行するためのソフトウェア・ルーチンに有利になるように最小化されている。その結果、RISCアーキテクチャは、最適に適合されたパイプラインによって実行される単純なロード／ストア命令セットを使用することにより大幅な柔軟性と高速化が得られるという希望を与えている。しかも、実際には、RISCアーキテクチャは、高性能パイプラインを短くすることと、必要とするすべての機能を実現する命令数を実質的に増加して実行する必要性とをバランスよく調和させると、利点が得られることが判明している。
【００１２】
RISCアーキテクチャの設計は、一般的に、ブランチ、レジスタ参照および例外の面でCISCアーキテクチャに起こっている問題を回避し、あるいは最小化する。RISCアーキテクチャに関係するパイプラインは短く、スピードの面で最適化されている。パイプラインを短くすると、パイプライン停止(pipeline stall)またはクリアが起こったときの結果が最小になり、マシンの状態を以前の実行個所に復元する際の問題が最小になる。
【００１３】
しかし、一般的に認識されている現在のレベル以上にスループット・パフォーマンスを大幅に向上させることは、公知のRISCアーキテクチャでは容易に達成することができない。その結果、いわゆるスーパースカラー(super-scaler)と呼ばれる代替アーキテクチャが種々提案されている。これらのアーキテクチャは、一般的に、複数の命令を同時並行に実行することにより、プロセッサのスループットを比例的に増加させることを試みている。残念ながら、このようなアーキテクチャの場合も、CISCアーキテクチャに起こっている問題と同一ではないが、類似した条件ブランチ、レジスタ参照、および例外処理の問題が起こっている。
【００１４】
従来のスーパースカラー型アーキテクチャに特に起こっている問題は、一般的に、アーキテクチャ自体に複雑性が内在しているため、アーキテクチャの基礎面を大幅に設計し直さない限り、アーキテクチャの変更ができないことである。同時並行に実行される複数の命令の実行を処理する場合は、命令ストリームの実行の正確さを確実に保つために、アーキテクチャに実質的な制御上の制約がある。事実、ある種の命令は、プログラム命令ストリームの中で先に置かれている命令の実行前に、その実行が完了することがある場合がある。その結果、命令実行の基礎面を管理する制御ロジックさえも設計し直さなければ、特定の命令の実行フローに影響を与えるアーキテクチャ上の変更ができない場合がよくある。
【発明の開示】
【発明が解決しようとする課題】
【００１５】
従って、本発明の一般的目的は、計算を補強する機能ユニットを追加し、変更することによりアーキテクチャ機能の強化が容易なRISCベースの高性能スーパースカラー型プロセッサ・アーキテクチャを提供することである。
【課題を解決するための手段】
【００１６】
本発明によるマイクロプロセッサ・アーキテクチャは、
複数種類の機能ユニットを含む複数の機能ユニットで構成された機能ユニット並列アレイと、
前記複数の機能ユニットによって使用されるレジスタアレイと、
命令をデコードする命令デコーダと、
前記命令デコーダによるデコード結果に応じて前記命令を前記機能ユニット並列アレイ内のいずれかの機能ユニットに割り当てるとともに、前記命令が実行可能なときに前記機能ユニットに前記命令を発行して実行を開始させる命令発行ユニットと、
各命令の実行に使用するためのレジスタの割当を行うとともに、実行保留中の命令に関するレジスタ依存関係に基づいて前記実行保留中の命令が実行可能な状態にあるか否かを判断して前記命令発行ユニットに通知するレジスタ改名ユニットと、
前記機能ユニット並列アレイ内のいずれかの機能ユニットで実行されていた命令の実行完了後に、前記実行されていた命令の実行結果を前記レジスタ改名ユニットによって割り当てられていたレジスタに格納するリタイア制御ユニットと、
前記機能ユニット並列アレイ内のいずれかの機能ユニットにおける命令の実行が完了したときに、完了制御信号を前記レジスタ改名ユニットと前記命令発行ユニットと前記リタイア制御ユニットとに送信することによって命令の完了を通知する完了制御ユニットと、
を備え、
前記機能ユニット並列アレイに実装されている前記複数の機能ユニットは、前記命令発行ユニット及び前記完了制御ユニットに対してそれぞれ並列に接続されており、
前記命令発行ユニットには前記機能ユニット並列アレイに実装されている個々の機能ユニットと命令の種類との関係付けが設定されており、前記命令発行ユニットは、前記関係付けに応じて各命令を前記複数の機能ユニットのいずれかに割り当てる処理を実行し、
前記複数の機能ユニットのそれぞれは、各機能ユニットの機能を実行するために特定の制御フロー・オペレーションを実行し、
前記命令デコーダと前記レジスタ改名ユニットと前記リタイア制御ユニットと前記完了制御ユニットとは、前記機能ユニット並列アレイに実装されている機能ユニットの種類と数に依存せずに同一の制御を実行するように構成されている。
【００１７】
本発明のマイクロプロセッサ・アーキテクチャによれば、個々の命令の機能ユニットへの割り当ては命令発行ユニット内に設定されている関係付けに応じて命令発行ユニットが実行し、また、個々の命令の実行に必要な制御制御フロー・オペレーションは個々の機能ユニットによって実行される。さらに、他の回路（命令デコーダとレジスタ改名ユニットとリタイア制御ユニットと完了制御ユニット）は、機能ユニット並列アレイに実装されている機能ユニットの種類と数に依存せずに同一の制御を実行するように構成されている。従って、機能ユニット並列アレイに実装する機能ユニットの種類及び数を変更する際に、単に命令発行ユニット内における命令と機能ユニットとの関係付けを変更すれば良く、他の回路構成を変更する必要が無い。従って、実装する機能ユニットの追加・変更が容易なマイクロプロセッサ・アーキテクチャを提供することができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態について説明する。なお、以下の目次に従って順次説明する。
【００２１】
目次
Ｉ．    マイクロプロセッサ・アーキテクチャの概要
ＩＩ．  命令フェッチユニット
Ａ）ＩＦＵデータ経路
Ｂ）ＩＦＵ制御経路
Ｃ）ＩＦＵ／ＩＥＵ制御インタフェース
Ｄ）ＰＣロジック・ユニットの詳細
１）ＰＦおよびＥｘＰＣ制御／データ・ユニットの詳細
２）ＰＣ制御アルゴリズムの詳細
Ｅ）割込みおよび例外の処理
１）概要
２）非同期割込み
３）同期例外
４）ハンドラ・ディスパッチとリターン
５）ネスト
６）トラップ一覧表
ＩＩＩ．命令実行ユニット
Ａ）ＩＥＵデータ経路の詳細
１）レジスタ・ファイルの詳細
２）整数データ経路の詳細
３）浮動小数点データ経路の詳細
４）ブール・レジスタ・データ経路の詳細
Ｂ）ロード／ストア制御ユニット
Ｃ）ＩＥＵ制御経路の詳細
１）Ｅデコード・ユニットの詳細
２）キャリー・チェッカ・ユニットの詳細
３）データ依存関係チェッカ・ユニットの詳細
４）レジスタ改名ユニットの詳細
５）命令発行ユニットの詳細
６）完了制御ユニットの詳細
７）リタイア制御ユニットの詳細
８）制御フロー制御ユニットの詳細
９）バイパス制御ユニットの詳細
ＩＶ．仮想メモリ制御ユニット
Ｖ．キャッシュ制御ユニット
ＶＩ．要約及び結論
以下に目次に従って説明する。
Ｉ．マイクロプロセッサ・アーキテクチャの概要
図１は、本発明のアーキテクチャ 100の概要を示すものである。命令フェッチ・ユニット(IFU) 102 と命令実行ユニット(IEU) 104 は、アーキテクチャ 100の中心となる機能要素である。仮想メモリ・ユニット(VMU) 108 、キャッシュ制御ユニット(CUU) 106 、およびメモリ制御ユニット（MCU) 110は、IFU 102 とIEU 104 の機能を直接にサポートするためのものである。また、メモリ・アレイ・ユニット(MAU) 112 は基本的要素として、アーキテクチャ 100を動作させるためのものである。もっとも、MAU 112 はアーキテクチャ 100の１つの一体的なコンポーネントとして直接的に存在しない。つまり、本発明の好適実施例では、IFU 102 、IEU 104 、VMU 108 、CCU 106 、およびMCU 110 は従来の 0.8ミクロン設計ルールの低電力CMOSプロセスを利用してシングル・シリコン・チップ上に実装され、約1,200,000 個のトランジスタから構成されている。アーキテクチャ100 の標準プロセッサまたはシステムのクロック速度は 40 MHZ である。しかし、本発明の好適実施例によれば、プロセッサの内部クロック速度は160 MHZ である。
IFU 102 の基本的役割は命令をフェッチし、 IEU104 による実行が保留されている間命令をバッファに置いておき、一般的には、次の命令をフェッチするとき使用される次の仮想アドレスを計算することである。
【００２２】
本発明の好適実施例では、各命令は長さが32ビットに固定されている。命令セット、つまり、４個の命令からなる「バケット」(bucket)は、CCU 106 内の命令用キャッシュ132 から128 ビット幅の命令バス114 を経由してIFU 102 によって同時にフェッチされる。命令セットの転送は、制御ライン116 経由で送られてきた制御信号によって調整されて、IFU 102 と CCU 106間で行われる。フェッチされる命令セットの仮想アドレスは、IFU 仲裁、制御およびアドレスを兼ねたバス118 経由でIFU 102 から出力され、さらにIEU 104 とVMU 108 間を結合する仲裁、制御およびアドレス共用バス120 上に送出される。VMU 108 へのアクセスの仲裁(arbitration) は、IFU 102 と IEU 104の両方がVMU 108 を共通の共用資源として利用することから行われる。本発明の好適実施例では、仮想アドレスの物理ページ内のアドレスを定義する下位ビットは、IFU 102 から制御ライン116 を経由して直接にキャッシュ制御ユニット106 へ転送される。IFU 102 から与えられる仮想アドレスの仮想上位ビットはバス118 、120 のアドレス部分によってVMU 108 へ送られ、そこで対応する物理ページ・アドレスに変換される。IFU 102 では、この物理ページ・アドレスは、変換要求がVMU 108 に出されたあと内部プロセッサ・クロック・サイクルの1/2 の間に、VMU 108 からアドレス制御ライン122 経由で直接にキャッシュ制御ユニット106 へ転送される。
【００２３】
IFU 102 によってフェッチされた命令ストリームの方は命令ストリーム・バス124 経由で IEU 104に渡される。制御信号は、制御ライン126 を介してIFU 102 とIEU 104 間でやりとりされる。さらに、ある種の命令フェッチ・アドレス、例えば、IEU 104 内に存在するレジスタ・ファイルへのアクセスを必要とするアドレスは、制御ライン126 内のターゲット・アドレス・リターン・バスを経由して IFUへ送り返される。
【００２４】
IEU 104 は、CCU 106 内に設けられたデータ用キャッシュ134 との間で80ビット幅双方向データ・バス130 を通してデータをストアし、データを取り出す。IEU がデータ・アクセスするときの物理アドレス全体は制御バス128 のアドレス部分によってCCU 106 へ渡される。また、制御バス128 を通して、データ転送を管理するための制御信号をIEU 104 と CCU 106との間でやりとりすることもできる。 IEU 104は、仮想データ・アドレスを CCU 106へ渡すのに適した物理データ・アドレスに変更するための資源として VMU108 を使用する。データ・アドレスの仮想化部分は、仲裁、制御およびアドレス・バス120 を経由して VMU108 へ渡される。IFU 102 に対するオペレーションと異なり、 VMU 108は対応する物理アドレスをバス120 経由で IEU 140へ返却する。アーキテクチャ100 の好適実施例では、IEU 140 は物理アドレスを使用して、ロード／ストア・オペレーションが正しいプログラム・ストリーム順序で行われていることを確かめている。
【００２５】
CCU 106 は、物理アドレスで定義したデータ要求を命令用キャッシュ132 とデータ用キャッシュ134 のどちらか該当する方から満足できるかどうかを判断する従来のハイレベル機能を備えている。アクセス要求が命令用キャッシュ132 またはデータ用キャッシュ134 へアクセスすることで正しく満足できる場合は、CCU 106 はデータ・バス114 、128 を経由するデータ転送を調整して、その転送を行う。
【００２６】
データ・アクセス要求が命令用キャッシュ132 またはデータ用キャッシュ134 から満足できない場合は、CCU 106 は対応する物理アドレスをMCU 110 へ渡し、MAU 112 が要求しているのは読取りアクセスであるか書込みアクセスであるかを判別し、各要求ごとにCCU 106 のソースまたは宛先キャッシュ132 、134 を識別するのに十分な制御情報および要求オペレーションをIFU 102 またはIEU 104 から出された最終的データ要求と関係づけるための追加識別情報も一緒に渡される。
【００２７】
MCU 110 は、好ましくは、ポート・スイッチ・ユニット142 を備えており、このユニットは単方向データ・バス136 によって CCU 106の命令用キャッシュ132 に接続され、双方向データ・バス138 によってデータ用キャッシュ134 に接続されている。ポート・スイッチ142 は基本的には、大きなマルチプレクサであり、制御バス140 から得た物理アドレスを複数のポート PoPn 146o-nのいずれかへ送ることを可能にし、また、ポートからデータ・バス136 、138 へのデータの双方向転送を可能にする。MCU 110 によって処理される各メモリ・アクセス要求は、MAU 112 をアクセスするとき要求されるメイン・システム・メモリ・バス162 へのアクセスを仲裁する目的でポート146o-nの１つと関連づけられる。データ転送の接続が確立されると、MCU は制御情報を制御バス140 経由で CCU106 に渡して、ポート141 およびポート146o-nのうち対応する１つを経由して命令用キャッシュ132 またはデータ用キャッシュ134 とMAU 112 との間でデータを転送することを開始する。アーキテクチャ100 の好適実施例では、MCU 110 は、実際には、CCU 106 と MAU112 間を転送する途中にあるデータをストアまたはラッチしない。このようにしたのは、転送の待ち時間を最小にし、MCU 110 に１つだけ存在するデータを追跡または管理しないですむようにするためである。
ＩＩ．命令フェッチ・ユニット
命令フェッチ・ユニット102 の主要エレメントを図２に示す。これらのエレメントのオペレーションおよび相互関係を理解しやすくするために、以下では、これらのエレメントが IFUデータ経路と制御経路に関与する場合を考慮して説明する。
A)IFU データ経路
IFU データ経路は、命令セットを受け取ってプリフェッチ・バッファ260 に一時的にストアしておく命令バス114 から始まる。プリフェッチ・バッファ260 からの命令セットはＩデコード・ユニット262 を通ってIFIFO ユニット264 へ渡される。命令FIFO 264の最後の２ステージにストアされた命令セットは、データ・バス278 、280 を通してIEU 104 に連続的に取り出して利用することができる。
【００２８】
プリフェッチ・バッファ・ユニット260 は、一度に１つの命令セットを命令バス114 から受け取る。完全な128 ビット幅命令セットは、一般に、プリフェッチ・バッファ260 のメイン・バッファ(MBUF)188 部分の４つの128 ビット幅プリフェッチ・バッファ・ロケーションの１つに並列に書き込まれる。追加の命令セットは最高４つまで同じように、２つの128 ビット幅ターゲット・バッファ(TBUF)190 のプリフェッチ・バッファ・ロケーションにまたは２つの128 ビット幅プロシージャ・バッファ(EBUF)192 のプリフェッチ・バッファ・ロケーションに書き込むことが可能である。好適アーキテクチャ100 では、MBUF 188、TBUF 190またはEBUF 192内のプリフェッチ・バッファ・ロケーションのいずれかに置かれている命令セットは、プリフェッチ・バッファ出力バス196 へ転送することが可能である。さらに、直接フォールスルー(fall through)命令セット・バス194 は、命令バス114 をプリフェッチ・バッファ出力バス196 と直接に接続することによって、MBUF 188、TBUF 190およびEBUF 192をバイパスするためのものである。
【００２９】
好適アーキテクチャ100 では、MBUF 188は名目的またはメイン命令ストリーム中の命令セットをバッファするために利用される。TBUF 190は、試行的なターゲット・ブランチ命令ストリームからプリフェッチした命令セットをバッファするために利用される。その結果、プリフェッチ・バッファ・ユニット260 を通して、条件付きブランチ命令のあとに置かれている可能性のある方向の命令ストリームをプリフェッチすることができる。この機能により、MAU 112 の待ち時間は長くなるとしても、少なくともCCU 112 への以後のアクセス待ち時間がなくなるので、条件付きブランチ命令の解決時にどの命令ストリームが最終的に選択されるかに関係なく、条件付きブランチ命令のあとに置かれた正しい次の命令セットを得て、実行することができる。本発明の好適アーキテクチャ100 では、MBUF 188と MBUF 190 があるために、命令フェッチ・ユニット102 は、現れる可能性のある両方の命令ストリームをプリフェッチすることができ、命令実行ユニット104 に関連して以下に説明するように、正しいと想定された命令ストリームを引き続き実行することができる。条件付きブランチ命令が解決されたとき、正しい命令ストリームがプリフェッチされて、MBUF 188に入れられた場合は、TBUF 190に残っている命令セットは無効にされるだけである。他方、正しい命令ストリームの命令セットがTBUF 190に存在する場合は、命令プリフェッチ・バッファ・ユニット260 を通して、これらの命令セットがTBUF 190から直接に、並行にMBUF 188内のそれぞれのバッファ・ロケーションへ転送される。それ以前にMBUF 188にストアされた命令セットは、TBUF 190から転送された命令セットを重ね書きすることによって、事実上無効にされる。MBUFロケーションへ転送するTBUF命令セットがなければ、そのロケーションには無効の印が付けられるだけである。
【００３０】
同様に、EBUF 192は、プリフェッチ・バッファ260 を経由する別の代替プリフェッチ経路となるものである。EBUF 192は、好ましくは、MBUF 188命令ストリームに現れた単一の命令、つまり、「プロシージャ」命令で指定されたオペレーションを実現するために使用される代替命令ストリームをプリフェッチする際に利用される。このようにすると、複雑な命令や拡張された命令はソフトウェア・ルーチンまたはプロシージャを通して実現することができ、すでにプリフェッチされてMBUF 188に入れられた命令ストリームを乱すことなくプリフェッチ・バッファ・ユニット260 を通して処理することができる。一般的には、本発明によれば、最初にTBUF 190に現れたプロシージャ命令を処理することができるが、プロシージャ命令ストリームのプリフェッチは保留され、以前に現れた保留中の条件付きブランチ命令ストリームがすべて解決される。これにより、プロジージャ命令ストリームに現れた条件付きブランチ命令は、TBUF 190の使用を通して矛盾なく処理されることになる。従って、プロジーシャ・ストリームでブランチが行われる場合は、ターゲット命令セットはすでにプリフェッチされてTBUF 190に入れられているので、EBUF 192へ並列に転送することができる。
【００３１】
最後に、MBUF 188、TBUF 190およびEBUF 192の各々はプリフェッチ・バッファ出力バス196 に接続され、プリフェッチ・ユニットによってストアされた命令セットを出力バス196 上に送出するようになっている。さらに、バス194 を通過するフローは、命令セットを命令バス114 から直接に出力バス196 へ転送するためのものである。
好適アーキテクチャ100 では、MBUF 188、TBUF 190、EBUF 192内のプリフェッチ・バッファは直接的にはFIFO構造を構成していない。その代わりに、どのバッファ・ロケーションも出力バス196 に接続されているので、命令用キャッシュ132 から取り出された命令セットのプリフェッチ順序に大幅な自由度をもたせることができる。つまり、命令フェッチ・ユニット102 は命令ストリームに一定順序で並んだ命令順に命令セットを判断して、要求するのが一般的になっている。しかし、命令セットがIFU 102 へ返されるときの順序は、要求したある命令セットが使用可能で、CCU 106 だけからアクセス可能であり、他の命令セットはMAU 102のアクセスを必要とするような場合に合わせて、順序外に現れることも可能である。
【００３２】
命令セットは一定順序でプリフェッチ・バッファ・ユニット260 へ返されない場合があっても、出力バス196 上に出力される命令セットの列は、一般的に、IFU 102 から出された命令セット要求の順序に従っていなければならない。順序内 (in-order) の命令ストリーム列は、例えば、ターゲット・ブランチ・ストリームの試行的実行に影響されるためである。
【００３３】
Ｉデコード・ユニット262 は、IFIFO ユニット264 のスペースが許すかぎり、プリフェッチ・バッファ出力バス196 から命令セットを、普通は１サイクルに１つの割合で受け取る。１つの命令セットを構成する４個の命令からなる各セットはＩデコード・ユニット262 によって並列にデコードされる。関係の制御フロー情報がIFU 102 の制御経路部分のためにライン318 から抜き出されている間は、命令セットの内容はＩデコード・ユニット 262によって変更されない。
Ｉデコード・ユニット 162からの命令セットはIFIFO ユニット264 の128 ビット幅入力バス198 上に送出される。内部的には、IFIFO ユニット264 はマスタ／スレーブ・レジスタ200 、204 、208 、212 、216 、220 、224 の列から構成されている。各レジスタはその後続レジスタに接続され、マスタ・レジスタ200 、208 、216 の内容がFIFOオペレーションの内部プロセッサ・サイクルの前半時にスレーブ・レジスタ204 、212 、220 へ転送され、そのあとオペレーションの後半サイクル時に次の後続マスタ・レジスタ208 、216 、224 へ転送されるようになっている。入力バス198 はマスタ・レジスタ200 、208 、216 、224 の各々の入力に接続され、FIFOオペレーションの後半サイクル時に命令セットがＩデコード・ユニット262 からマスタ・レジスタに直接にロードされるよになっている。しかし、マスタ・レジスタを入力バス198 からロードすることは、IFIFO ユニット264 内でデータをFIFOシフトすることと同時に行う必要はない。その結果、命令FIFOユニット264 内にストアされた命令セットの現在の深さに関係なく、さらに、IFIFO ユニット264 内でデータをFIFOシフトすることから独立して、入力バス198 から連続的にIFIFO ユニット264 に入れていくことができる。
【００３４】
マスタ／スレーブ・レジスタ200 、204 、208 、212 、216 、224 の各々は、128 ビット幅命令セットの全ビットを並列にストアできるほかに、制御情報のいくつかのビットをそれぞれの制御レジスタ202 、206 、210 、214 、218 、222 、226 にストアすることもできる。好ましくは、制御ビットのセットは、例外不一致(exception miss)と例外修正(exception  modify)(VMU)、メモリなし(MCU) 、ブランチ・バイアス、ストリーム、およびオフセット(IFU) からなっている。この制御情報は、IFIFO マスタ・レジスタに入力バス198 から新しい命令セットをロードするのと同様に、IFU 102 の制御経路部分から発生する。そのあと、制御レジスタ情報は命令セットと並行してIFIFO ユニット263 内で並列にシフトされる。
【００３５】
最後に、好適アーキテクチャ100 では、IFIFO ユニット264 からの命令セットの出力は最後の２マスタ・レジスタ216 、224 から同時に得られて、I    Bucket    0とI    Bucket    1命令セット出力バス278 、280 上に送出される。さらに、対応する制御レジスタ情報がIBASV0とIVASV1制御フィールド・バス282 、284 上に送出される。これらの出力バス278 、282 、280 、284 はすべてIEU 104 へ通じる命令ストリーム・バス124 となるものである。
B)IFU 制御経路
IFU 102 制御経路は、プリフェッチ・バッファ・ユニット260 、Ｉデコード・ユニット262 およびIFIFO ユニット264 のオペレーションを直接にサポートする。プリフェッチ制御ロジック・ユニット266 は主にプリフェッチ・バッファ・ユニット260 のオペレーションを管理する。プリフェッチ制御ロジック・ユニット266 とIFU 102 は一般的には、クロック・ライン290 からシステム・クロック信号を受信して、IFU のオペレーションとIEU 104 、 CCU 106およびVMU 108 のオペレーションとの同期をとるようにしている。命令セットを選択して、MBUF 188、 TBUF 190 およびEBUF 192に書き込むための制御信号は制御ライン304 上に送出される。
【００３６】
多数の制御信号は、制御ライン316 上に送出されて、プリフェッチ制御ロジック・ユニット266 へ送られる。具体的には、フェッチ要求制御信号はプリフェッチ・オペレーションを開始するために送出される。制御ライン316 上に送出される他の制御信号は要求したプリフェッチ・オペレーションが目標とする宛先がMBUF 188であるか、TBUF 190であるか、EBUF 192であるかを指定している。プリフェッチ要求を受けて、プリフェッチ制御ロジック・ユニット266 はID値を生成しプリフェッチ要求をCCU 106 に通知できるかどうかを判断する。ID値の生成は、循環４ビット・カウンタを使用して行われる。
【００３７】
４ビット・カウンタの使用は、次の３つの点で重要である。第１は、最大９個までの命令セットをプリフェッチ・バッファ・ユニット260 で一度にアクティブにできることである。すなわち、MBUF 188での４命令セット、TBUF 190での２命令セット、EBUF 192での命令セット、およびフロー・スルー・バス194 経由で直接にＩデコード・ユニット262 に渡される１命令セットである。第２は、命令セットが各々４バイトの４個の命令からなることである。その結果、フェッチする命令を選択するどのアドレスも、その最下位４ビットは余分になっている。最後は、プリフェッチ要求アドレスの最下位４ビットとして挿入することで、プリフェッチ要求IDをプリフェッチ要求と容易に関連づけることができることである。これにより、CCU 106 とのインタフェースとなるために必要な総アドレス数が減少することになる。
【００３８】
IFU 102 から出されたプリフェッチ要求の順序に対して順序外で命令セットがCCU 106 から返却されるようにするために、アーキテクチャ100 では、CCU 106 からの命令セットの返却と一緒にID要求値が返されるようになっている。しかし、順序外の命令セット返却機能によると、16個の固有IDが使いつくされるおそれがある。条件付き命令の組合せが順序外で実行されると、要求されたが、まだ返却されていない追加のプリフェッチと命令セットがあるので、ID値を再使用することが可能になる。従って、４ビット・カウンタは保持しておくのが好ましく、それ以降の命令セットのプリフェッチ要求が出されないことになり、その場合には、次のID値は、未処理のまま残っているフェッチ要求やそのときプリフェッチ・バッファ260 に保留されている別の命令セットに関連づけられたものとなる。
【００３９】
プリフェッチ制御ロジック・ユニット266 はプリフェッチ状況配列（アレイ）268 を直接に管理し、この配列はMBUF 188、TBUF 190およびEBUF 192内の各命令セット・プリフェッチ・バッファ・ロケーションに論理的に対応する状況記憶ロケーションからなっている。プリフェッチ制御ロジック・ユニット266 は、選択およびデータ・ライン306 を通して、データをスキャンし、読み取って、状況レジスタ配列268 に書き込むことができる。配列268 内では、メイン・バッファ・レジスタ308 は、４個の４ビットID値(MB ID) 、４個の１ビット予約フラグ(MB RES)および４個の１ビット有効フラグ(MB VAL)をストアしておくためのものであり、これらの各々は論理ビット位置別にMBUF 180内のそれぞれの命令セット記憶ロケーションに対応づけられている。同様に、ターゲット・バッファ・レジスタ310 と拡張バッファ・レジスタ312 は、それぞれ２個の４ビットID値(TB ID、EB ID)、２個の１ビット予約フラグ(TB RES 、EB RES) および２個の１ビット有効フラグ(TB VAL 、EB VAL) をストアしておくためのものである。最後に、フロー・スルー状況レジスタ314 は１個の４ビットID値(FT TD) 、１個の予約フラグ・ビット(FT RES)および１個の有効フラグ・ビット(FT VAL)をストアしておくためのものである。
【００４０】
状況レジスタ配列268 が最初にスキャンされ、該当するときは、プリフェッチ要求がCCU 266 に出されるたびにプリフェッチ制御ロジック・ユニット266 によって更新され、そのあとは、命令セットが返されるたびにスキャンされ、更新される。具体的に説明すると、制御ライン316 からプリフェッチ要求信号を受け取ると、プリフェッチ制御ロジック・ユニット216 は現在の循環カウンタ生成ID値をインクリメントし、状況レジスタ配列268 をスキャンして、使用可能なID値があるかどうかプリフェッチ要求信号で指定されたタイプのプリフェッチ・バッファ・ロケーションが使用可能であるかどうかを判断し、CCU IBUSY 制御ライン300 の状態を調べてCCU 106 がプリフェッチ要求を受け付けることができるかどうかを判断し、受付け可能ならば、制御ライン298 上のCCU IREAD 制御信号を肯定し、インクリメントされたID値をCCU 106 と結ばれたCCU ID出力バス294 上に送出する。プリフェッチ記憶ロケーションは、対応する予約状況フラグと有効状況フラグが共に偽である場合に使用が可能である。
プリフェッチIDは、要求がCCU 106 に出されるのと並行して、MBUF 188、TBUF 190、またはEBUF 192内の目標とする記憶ロケーションに対応する、状況レジスタ配列268 内のID記憶ロケーションに書き込まれる。さらに、対応する予約状況フラグが真にセットされる。
【００４１】
CCU 106 が以前に要求された命令セットをIFU 102 へ返却できるときは、CCU IREADY信号が制御ライン302 上で肯定され、対応する命令セットIDがCCU ID制御ライン296 上に送出される。プリフェッチ制御ロジック・ユニット266 は状況レジスタ配列268 内のID値と予約フラグをスキャンして、プリフェッチ・バッファ・ユニット260 内の命令セットの目標とする宛先を判別する。一致するものは１つだけが可能である。判別されると、命令セットはバス114 を経由してプリフェッチ・バッファ・ユニット260 内の該当ロケーションに書き込まれ、フロー・スルー要求と判別されたときは、直接にＩデコード・ユニット262 に渡される。どちらの場合も、対応する状況レジスタ配列に入っている有効状況フラグは真にセットされる。
【００４２】
PCロジック・ユニット270 は、以下で詳しく説明するように、IFU 102 全体を調べて、MBUF 188、TBUF190 およびEBUF 192命令ストリームの仮想アドレスを探し出す。この機能を実行する際、PCロジック・ブロック270 はＩデコード・ユニット262 を制御すると同時に、そこから動作する。具体的には、Ｉデコード・ユニット262 によってデコードされ、プログラムの命令ストリームのフローの変化と係わりがある可能性のある命令部分はバス318 を経由して制御フロー検出ユニット274 へ送られると共に、直接にPCロジック・ブロック270 へ送られる。制御フロー検出ユニット274 は、条件付きブランチ命令と無条件ブランチ命令、コール型命令、ソフトウェア・トラップ・プロシージャ命令および種々のリターン命令を含む制御フロー命令を構成する各命令を、デコードされた命令セットの中から判別する。制御フロー検出ユニット274 は制御信号をライン322 を経由してPCロジック・ユニット270 へ送る。この制御信号は、Ｉデコード・ユニット262 に存在する命令セット内の制御フロー命令のロケーションと種類を示している。これを受けて、PCロジック・ユニット270 は、一般的には、命令に入れられて、ライン318 経由でPCロジック・ユニットへ転送されたデータから制御フロー命令のターゲット・アドレスを判断する。例えば、条件付きブランチ命令に対して先に実行するためにブランチ・ロジック・バイアスが選択された場合は、PCロジック・ユニット270 は条件付きブランチ命令ターゲット・アドレスから命令セットをプリフェッチすることを指示し、別々に追跡することを開始する。従って、制御ライン316 上のプリフェッチ要求を次に肯定すると、PCロジック・ユニット270 はさらにライン316 を経由する制御信号を肯定し、先行するプリフェッチ命令セットがMBUF 188またはEBUF 192へ送られたものと想定すると、プリフェッチの宛先をTBUF 190として選択する。プリフェッチ要求をCCU 106 へ渡すことができるとプリフェッチ制御ロジック・ユニット266 が判断すると、プリフェッチ制御ロジック・ユニット266 は、この場合もライン316 を経由してイネーブル（許可）信号をPCロジック・ユニット270 へ送って、ターゲット・アドレスのページ・オフセット部分(CCU PADDR[13:4]) をアドレス・ライン324 を経由して直接にCCU 106 へ渡すことを可能にする。これと同時に、PCロジック・ユニット270 は、新しい仮想ページから物理ページへの変換が必要な場合には、さらに、VMU 要求信号を制御ライン328 を経由して、ターゲット・アドレスの仮想化部分(VMU VADDR [13:14]) をアドレス・ライン326 を経由してVMU 108 へ渡して、物理アドレスに変換する。ページ変換が必要でない場合は、VMU 108 によるオペレーションは必要でない。その代わりに、以前の変換結果がバス122 に接続された出力ラッチに保存されるので、CCU 106 によって即時に使用される。
【００４３】
PCロジック・ユニット270 が要求した仮想から物理への変換時にVMU 108 にオペレーション・エラーが起こると、VMU 例外およびVMU 不一致制御(miss control)ライン332 、334 を通して報告される。VMU 不一致制御ライン334 は変換索引緩衝機構(translation lookaside buffer: TLB) の不一致を報告する。VMU 例外ライン332 上のVMU 例外制御信号は、他の例外が起こると発生する。いずれの場合も、PCロジック・ユニットは、命令ストリーム中の現在の実行個所をストアしておき、そのあと無条件ブランチが行われたのと同じように、それを受けて、エラー条件を診断し処理するための専用例外処理ルーチン命令ストリームをプリフェッチすることによって、エラー条件を処理する。VMU 例外および不一致制御信号は、発生した例外の種類を示しているので、PCロジック・ユニット270 は対応する例外処理ルーチンのプリフェッチ・アドレスを判別することができる。
【００４４】
IFIFO 制御ロジック・ユニット272 はIFIFO ユニット264 を直接にサポートするためのものである。具体的には、PCロジック・ユニット270 は制御ライン336 を経由して制御信号を出力し、命令セットがＩデコード・ユニット262 から入力バス198 経由で使用可能であることをIFIFO 制御ロジック・ユニット272 に通知する。IFIFO 制御ユニット272 は命令セットを受け取るために、最も奥の使用可能なマスタ・レジスタ200 、208 、216 、224 を選択する役割を持っている。マスタ・レジスタ202 、210 、218 、226 の各々の出力は制御バス338 を経由してIFIFO 制御ユニット272 へ渡される。各マスタ制御レジスタによってストアされる制御ビットは２ビット・バッファ・アドレス(IF    Bx   ADR)、単一ストリーム・インジケータ・ビット(IF    Bx   STRM) 、および単一有効ビット(IF   Bx   VLD) からなっている。２ビット・バッファ・アドレスは対応する命令セット内の最初の有効命令セットを指定している。つまり、CCU 106 から返された命令セットは、例えば、ブランチ・オペレーションのターゲット命令が命令セット内の最初の命令ロケーションに置かれるように境界合わせされていないことがある。従って、バッファ・アドレス値は、実行の対象として考慮される、命令セット内の最初の命令を一意的に示すために与えられる。
【００４５】
ストリーム・ビットは、条件付き制御フロー命令を含んでいる命令セットのロケーションを示し、IFIFO ユニット264 を通る命令のストリームに滞在的制御フローの変更を引き起こすマーカとして使用されることを基本としている。メイン命令ストリームは一般にストリーム・ビット値が０のときMBUF 188を通して処理される。例えば、相対条件付きブランチ命令が現れると、対応する命令セットはマークがつけられ、ストリーム・ビット値が１となる。条件付命令セットはＩデコード・ユニット262 によって検出される。条件付制御フロー命令は最高４つまで命令セットに存在することができる。そのあと、命令セットはIFIFO ユニット264 の最も奥の使用可能なマスタ・レジスタにストアされる。
【００４６】
条件付ブランチ命令のターゲット・アドレスを判断するために、現在のIEU 104 の実行点アドレス(DPC) 、ストリーム・ビットで指定された条件付命令が入っている命令セットの相対ロケーション、制御フロー検出ユニット274 から得られた命令セット内の条件付命令ロケーション・オフセットは、制御ライン318 を通して対応するブランチ命令フィールドから得た相対ブランチ・オフセット値と結合される。その結果はブランチ・ターゲットの仮想アドレスとなり、PCロジック・ユニット270 によってストアされる。ターゲット命令ストリームの最初の命令セットは、このアドレスを使用してプリフェッチしてTBUF 190に入れることができる。PCロジック・ユニット270 のために事前に選択されたブランチ・バイアスに応じて、IFIFO ユニット264 はMBUF 188またはTBUF 190からロードが続けられる。１つまたは２つ以上の条件付フロー命令を含んでいる２番目の命令セットが現れると、その命令セットはストリーム・ビット値に０のマークが付けられる。２番目のターゲット・ストリームはフェッチできないので、ターゲット・アドレスはPCロジック・ユニット270 によって計算されてストアされるが、プリフェッチは行われない。さらに、それ以降の命令セットはＩデコード・ユニット262 を通して処理することができない。少なくとも、条件付きフロー制御命令を含んでいることが分かった命令セットは１つも処理されない。
【００４７】
本発明の好適実施例では、PCロジック・ユニット270 は、最高２個までの命令セットに現れた条件付きフロー命令を最高８個まで管理することができる。ストリーム・ビットの変化でマークが付けられた２命令セットの各々のターゲット・アドレスは４つのアドレス・レジスタの配列にストアされ、ターゲット・アドレスは命令セット内の対応する条件付きフロー命令のロケーションに対して論理的位置に置かれる。
【００４８】
最初の順序内条件付きフロー命令のブランチ結果が解決されると、PCロジック・ユニット270 はブランチが行われる場合は、TBUF 190の内容をMBUF 188に転送し、TBUF 190の内容に無効のマークを付けるように、ライン316 上の制御信号によってプリフェッチ制御ユニット260 に指示する。正しくない命令ストリーム、つまり、ブランチが行われない場合はターゲット・ストリームからの、ブランチが行われる場合はメイン・ストリームからの命令セットがIFIFO ユニット264 にあると、IFIFO ユニット264 からクリアされる。２番目またはそれ以降の条件付きフロー制御命令が第１ストリーム・ビットのマークが付けられた命令セットに存在すると、その命令は統一された方法で処理される。すなわち、ターゲット・ストリームからの命令セットはプリフェッチされ、MBUF 188またはTBUF 190からの命令セットはブランチ・バイアスに応じてＩデコード・ユニット262 を通して処理され、条件付きフロー命令が最終的に解決されると、正しくないストリーム命令セットがIFIFO ユニット264 からクリアされる。
【００４９】
IFIFO ユニット264 から正しくないストリーム命令がクリアされたとき、2 番目の条件付きフロー命令がIFIFO ユニット264 に残っていて、最初の条件付きフロー命令セットにそれ以降の条件付きフロー命令が含まれていないと、第２ストリーム・ビットのマークが付いた命令セットのターゲット・アドレスはアドレス・レジスタの最初の配列にプロモートされる。いずれの場合も、条件付きフロー命令を含んでいる次の命令セットはＩデコード・ユニット262 を通して評価すつことが可能になる。従って、ストリーム・ビットをトグルとして使用すると、ブランチ・ターゲット・アドレスを計算する目的のために、また、ブランチ・バイアスが特定の条件付きフロー制御命令では正しくなかったとあとで判断された場合に、それより上をクリアすべき命令セット・ロケーションにマークを付ける目的のために、滞在的制御フローの変化にマークを付けておき、IFIFO ユニット264 を通して追跡することができる。
【００５０】
命令セットをマスタ・レジスタから実際にクリアするのではなく、IFIFO 制御ロジック・ユニット272 はIFIFO ユニット264 の対応するマスタ・レジスタの制御レジスタに入っている有効ビット・プラグをリセットするだけである。このクリア・オペレーションはライン336 に送出される制御信号でPCロジック・ユニット270 によって開始される。マスタ制御レジスタ202 、210 、218 、226 の各々の入力は状況バス230 を通してIFIFO 制御ロジック・ユニット272 が直接にアクセスすることができる。好適実施例のアーキテクチャ100 では、これらのマスタ制御レジスタ202 、210 、218 、2262内のビットは、IFIFO ユニット264 によるデータ・シフト・オペレーションと並行してまたは独立してIFIFO 制御ユニット272 によってセットすることが可能である。この機能により、IEU 104 のオペレーションと非同期に、命令セットをマスタ・レジスタ200 、208 、216 、224 のいずかに書き込み、対応する状況情報をマスタ制御レジスタ202 、210 、218 、226 に書き込むことができる。
【００５１】
最後に、制御および状況バス230 上の追加の制御ラインはIFIFO ユニット264 のIFIFO オペレーションを可能にし、指示する。IFIFO シフトは、制御ライン336 を通してPCロジック・ユニット270 から出力されたシフト要求制御信号を受けてIFIFO ユニット264 によって行われる。IFIFO 制御ユニット272 は、命令セットを受け入れるマスタ・レジスタ200 、208 、216 、224 が使用可能であると、制御信号をライン316 を経由してプリフェッチ制御ユニット266 に送って、プリフェッチ・バッファ260 から次の該当命令セットを転送することを要求する。命令セットが転送されると、配列266 内の対応する有効ビットがリセットされる。
C)IFU/IEU 制御インタフェース
IFU 102 とIEU 104 とを結ぶ制御インタフェースは制御バス126 によって提供される。この制御バス126 はPCロジック・ユニット270 に接続され、複数の制御、アドレスおよび特殊データ・ラインから構成されている。割込み要求と受信確認制御信号を制御ライン340 を経由して渡すことにより、IFU 102 は割込みオペレーションを通知し、IEU 104 との同期をとることができる。外部で発生した割込み信号はライン292 経由でロジック・ユニット270 へ送られる。これを受けて、割込み要求制御信号がライン340 上に送出されると、IEU 104 は試行的に実行された命令をキャンセルする。割込みの内容に関する情報は、割込み情報ライン341 を通してやりとりされる。IEU 104 がPCロジック・ユニット270 によって判断された割込みサービス・ルーチンのアドレスからプリフェッチされた命令の受信を開始する準備状態になると、IEU 104 はライン340 上の割込み受信確認制御信号を肯定する。IFU 102 によってプリフェッチされた割込みサービス・ルーチンがそのあと開始される。
【００５２】
IFIFO 読取り(IFIFO RD)制御信号はIEU 104 から出力され、最も奥のマスタ・レジスタ224 に存在する命令セットが実行を完了したことおよび次の命令セットが必要であることを通知する。この制御信号を受けると、PCロジック・ユニット270 はIFIFO ユニット264 でIFIFO シフト・オペレーションを実行するようにIFIFO 制御ロジック・ユニット272 に指示する。
【００５３】
PCインクリメント要求とサイズ値(PC INC/SIZE) は制御ライン344 上に送出されて、現在のプログラム・カウンタ値を命令の対応するサイズ数だけ更新するようにPCロジック・ユニット270 に指示する。これにより、PCロジック・ユニット270 は、現在のプログラム命令ストリーム中の最初の順序内実行命令のロケーションを正確に指した個所に実行プログラム・カウンタ(DPC) を維持することができる。
【００５４】
ターゲット・アドレス(TARGET ADDR) はアドレス・ライン346 を経由してPCロジック・ユニット270 に返される。このターゲット・アドレスは、IEU 104 のレジスタ・ファイルにストアされているデータによってきまるブランチ命令の仮想ターゲット・アドレスである。従って、ターゲット・アドレスを計算するためにIEU 104 のオペレーションが必要である。
制御フロー結果(CF RESULT) 制御信号は制御ライン348 を経由してPCロジック・ユニット270 へ送られて、現在保留されている条件付きブランチ命令が解決されたかどうか、その結果がブランチによるものなのか、ブランチによらないものなのかを示している。これらの制御信号に基づいて、PCロジック・ユニット270 は、条件付きフロー命令の実行の結果として、プリフェッチ・バッファ260 とIFIFO ユニット264 に置かれている命令セットのどれをキャンセルする必要があるかを判断することができる。
【００５５】
いくつかのIEU 命令リターン型制御信号(IEUリターン) が制御ライン350 上を送出されて、IEU 104 によってある命令が実行されたことをIEU 102 に通知する。これらの命令には、プロシージャ命令からのリターン、トラップからのリターンおよびサブルーチン・コールからのリターンがある。トラップからのリターン命令はハードウェア割込み処理ルーチンとソフトウェア・トラップ処理ルーチンで同じように使用される。サブルーチン・コールからのリターンもジャンプとリンク型コールと併用される。どの場合も、リターン制御信号は、以前に割込みがかけられた命令ストリームに対して命令フェッチ・オペレーションを再開するようにIFU 102 に通知するために送られる。これらの信号をIEU 104 から出すことにより、システム100 の正確なオペレーションを維持することができる。「割込みがかけられた」命令ストリームの再開はリターン命令の実行個所から行われる。
【００５６】
現命令実行PCアドレス（現IF  PC) はアドレス・バス352 を経由してIEU 104 へ送られる。このアドレス値(DPC) はIEU 104 によって実行される正確な命令を指定している。つまり、IEU 104 が現在のIF  PCアドレスを通過した命令を先に試行的に実行している間は、このアドレスは、割込み、例外、その他に正確なマシンの状態が分かっていることが必要な事象の発生に対してアーキテクチャ100 を正確に制御するために保持されていなければならない。現在実行中の命令ストリームの中の正確なマシンの状態を進めることが可能であるとIEU 104 が判断すると、PC Inc/Size 信号がIFU 102 に送られ、即時に現在のIF  PCアドレス値に反映される。
【００５７】
最後に、アドレスおよび双方向データ・バス354 は特殊レジスタのデータを転送するためのものである。このデータはIEU 104 によってIFU 102 内の特殊レジスタに入れられ、あるいはそこから読み取られるようにプログラムすることが可能である。特殊レジスタのデータは一般にIFU 102 が使用できるように、IEU 104 によってロードされ、あるいは計算される。
D)PCロジック・ユニットの詳細
PC制御ユニット362 、割込み制御ユニット363 、プリフェッチPC制御ユニット364 および実行PC制御ユニット366 を含むPCロジック・ユニット270 の詳細図は図３に示されている。
PC制御ユニット362 はインターフェース・バス126 を通してプリフェッチ制御ユニット266 、IFIFO 制御ロジック・ユニット272 、およびIEU 104 から制御信号を受けて、プリフェッチおよび実行PC制御ユニット364 、366 に対してタイミング制御を行う。割込み制御ユニット363 は、プリフェッチ・トラップ・アドレス・オフセットを判断してそれぞれのトラップ・タイプを処理する該当処理ルーチンを選択することを含めて、割込みと例外の正確な管理を担当する。プリフェッチPC制御ユニット364 は、特に、トラップ処理とプロシージャ・ルーチン命令のフローのためのリターン・アドレスをストアすることを含めて、プリフェッチ・バッファ188 、190 、192 をサポートするために必要なプログラム・カウンタの管理を担当する。このオペレーションをサポートするために、プリフェッチPC制御ユニット364 は、物理アドレス・バス・ライン324 上のCCU PADDERアドレスとアドレス・ライン326 上のVMU VMADDRアドレスを含むプリフェッチ仮想アドレスを生成することを担当する。その結果、プリフェッチPC制御ユニット364 は、現在のプリフェッチPC仮想アドレス値を保持することを担当する。
【００５８】
プリフェッチ・オペレーションは一般に制御ライン316 上を送出された制御信号を通してIFIFO 制御ロジック・ユニット272 によって開始される。これを受けて、PC制御ユニット362 はいくつかの制御信号を生成して制御ライン372 上に出力し、プリフェッチPC制御ユニットを動作させて、アドレス・ライン324 、326 上にPADDR アドレスと、必要に応じてVMADDRアドレスを生成する。値が０から４までのインクリメント信号も制御ライン374 上に送出される場合もあるが、これは、PC制御ユニット362 が現在のプリフェッチ・アドレスから命令セットのフェッチを再実行しているか、一連のプリフェッチ要求の中の２番目の要求に対して位置合わせを行っているか、プリフェッチのために次の全順次命令セットを選択しているか、によって決まる。最後に、現在のプリフェッチ・アドレスPF  PCがバス370 上に送出され、実行PC制御ユニット366 へ渡される。
【００５９】
新しいプリフェッチ・アドレスは、いくつかのソースから発生する。アドレスの主要なソースは、バス352 経由で実行PC制御ユニット366 から送出された現在のIF  PCアドレスである。原理的には、IF  PCアドレスからはリターン・アドレスが得られ、これは、初期コール、トラップまたはプロシージャ命令が現れたとき、プリフェッチPC制御ユニットによってあとで使用されるものである。ＩF   PCアドレスは、これらの命令が現れるたびに、プリフェッチPC制御ユニット364 内のレジスタにストアされる。このようにして、PC制御ユニット362 は制御ライン350 を通してIEU リターン信号を受けたとき、プリフェッチPC制御ユニット364 内のリターン・アドレス・レジスタを選択して新しいプリフェッチ仮想アドレスを取り出すだけでよく、これによって元のプログラム命令ストリームを再開する。
【００６０】
プリフェッチ・アドレスのもう１つのソースは、実行PC制御ユニット366 から相対ターゲット・アドレス・バス382 を経由して、あるいはIEU 104 から絶対ターゲット・アドレス・バス346 を経由して送出されたターゲット・アドレス値である。相対ターゲット・アドレスとは、実行PC制御ユニット366 によって直接に計算できるアドレスである。絶対ターゲット・アドレスは、これらのターゲット・アドレスが IEUレジスタ・ファイルに入っているデータに依存するので、IEU 104 に生成させる必要がある。ターゲット・アドレスはターゲット・アドレス・バス384 を通ってプリフェッチPC制御ユニット364 へ送られ、プリフェッチ仮想アドレスとして使用される。相対ターゲット・アドレスを計算する際、対応するブランチ命令のオぺランド部分もＩデコード・ユニット262 からバス318 のオペランド変位部分を経由して送られる。
【００６１】
プリフェッチ仮想アドレスのもう１つのソースは、実行PC制御ユニット366 である。リターン・アドレス・バス352'は、現在のIF  PC値(DPC) をプリフェッチPC制御ユニット364 へ転送するためのものである。このアドレスは、割込み、トラップ、その他にコールなどの制御フロー命令が命令ストリーム内に現れた個所でリターン・アドレスとして使用される。プリフェッチPC制御ユニット364 は、新しい命令ストリームをプリフェッチすために解放される。PC制御ユニット362 は、対応する割込みまたはトラップ処理ルーチンまたはサブルーチンが実行されると、IEU 104 からライン350 を経由してIEU リターン信号を受け取る。他方、PC制御ユニット362 はライン372 上のPFPC信号の１つを通して、およびライン350 経由で送られてきて実行されたリターン命令のIDに基づいて、現在のリターン仮想アドレスを収めているレジスタを選択する。そのあと、このアドレスが使用されて、PCロジック・ユニット270 によるプリフェッチ・オペレーションを続行する。
【００６２】
最後に、プリフェッチ仮想アドレスが取り出されるもう１つのソースは、特殊レジスタ・アドレスおよびデータ・バス354 である。IEU 104 によって計算またはロードされたアドレス値、またはすくなくともベース・アドレス値は、データとしてバス354 を経由してプリフェッチPC制御ユニット364 へ転送される。ベース・アドレスは、トラップ・アドレス・テーブル、高速トラップ・テーブル・およびベース・プロシージャ命令ディスパッチ・テーブルのアドレスを含んでいる。バス354 を通して、プロシージャおよびPC制御ユニット364 、366 内のレジスタの多くを読み取ることもできるので、マシンの状態の対応する側面をIEU 104 を通して処理することが可能である。
【００６３】
実行PC制御ユニット366 は、PC制御ユニット362 の制御を受けて、現在のIF  PCアドレス値を計算することを主な役割としている。この役割において、実行PC制御ユニット366 はPC制御ユニット362 からExPC制御ライン378 を経由して送られてきた制御信号と、制御ライン380 を経由して送られてきたインクリメント／サイズ制御信号を受けて、IF  PCアドレスを調整する。これらの制御信号は、主に、ライン342 経由で送られてきたIFIFO 読取り制御信号とIEU 104 から制御ライン344 経由で送られてきたPCインクリメント／サイズ値を受けると生成される。
1) PF およびExPC制御／データ・ユニットの詳細
図４は、プリフェッチおよび実行PC制御ユニット364 、366 の詳細ブロック図である。これらのユニットは主に、レジスタ、インクリメンタ（増分器）その他の類似部品、セレクタおよび加算器ブロックから構成されている。これらのブロック間のデータ転送を管理する制御は、PFPC制御ライン372 、ExPC制御ライン378 およびインクリメント制御ライン374 、380 を通してPC制御ユニット362 によって行われる。説明を分かりやすくするために、図４のブロック図には、これらの個々の制御ラインは示されていない。しかし、これらの制御信号が以下に説明するように、これらのブロックへ送られることは勿論である。
【００６４】
プリフェッチPC制御ユニット364 の中心となるものはプリフェッチ・セレクタ(PF   PC SEL) であり、これは現プリフェッチ仮想アドレスの中央セレクタとして動作する。この現プリフェッチ・アドレスはプリフェッチ・セレクタから出力バス392 を通ってインクリメンタ・ユニット394 へ送られて、次のプリフェッチ・アドレスを生成する。この次のプリフェッチ・アドレスはインクリメンタ出力バス396 を通ってレジスタMBUF PFnPC 398、TBUF PFnPC 400、およびEBUF PFn  PC402 の並列配列へ送られる。これらのレジスタ398 、400 、402 は実効的には次の命令プリフェッチ・アドレスをストアしているが、本発明の好適実施例によれば、別々のプリフェッチ・アドレスがMBUF 188、TBUF190 、およびEBUF 192に保持されている。MBUF、TBUFおよびEBUF PFnPCレジスタ398 、400 、402 にストアされたプリフェッチ・アドレスは、アドレス・バス404 、408 、410 からプリフェッチ・セレクタ390 へ渡される。従って、PC制御ユニット362 はプリフェッチ・レジスタ398 、400 、402 の別の１つをプリフェッチ・セレクタが選択することを指示することだけでプリフェッチ命令ストリームの即時切替えを指示することができる。ストリームの中の次の命令セットをプリフェッチするために、そのアドレス値はインクリメンタ394 によってインクリメントされると、その値がプリフェッチ・アドレス398 、400 、402 のうち該当するレジスタへ返却される。もう１つの並列レジスタ配列は簡略化のため単一の特殊レジスタ・ブロック412 として示されているが、この配列はいくつかの特殊アドレスをストアするためのものである。レジスタ・ブロック412 はトラップ・リターン・アドレス・レジスタ、プロシージャ命令リターン・アドレス・レジスタ、プロシージャ命令ディスパッチ・テーブル・ベース・アドレス・レジスタ、トラップ・ルーティン・ディスパッチ・テーブル・ベース・アドレス・レジスタ、および高速トラップ・ルーチン・ベース・アドレス・レジスタから構成されている。PC制御ユニット362 の制御を受けて、これらのリターン・アドレス・レジスタはバス35′を通して現IF  PC実行アドレスを受け入れることができる。レジスタ・ブロック412 内のリターンおよびベース・アドレス・レジスタにストアされたアドレス値はIEU 104 から独立して読み書きすることができる。レジスタが選択され、値が特殊レジスタ・アドレスおよびデータ・バス354 を経由して転送される。
【００６５】
特殊レジスタ・ブロック412 内のセレクタはPC制御ユニット362 によって制御され、レジスタ・ブロック412 のレジスタにストアされたアドレスを特殊レジスタ出力バス416 上に送出して、プリフェッチ・セレクタ390 へ渡すことができる。リターン・アドレスは直接にプリフェッチ・セレクタ390 へ渡される。ベース・アドレス値は割込み制御ユニット363 から割込みオフセット・バス373 経由で送られてきたオフセット値と結合される。ソースからバス373'経由でプリフェッチ・セレクタ390 へ渡された特殊アドレスは、新しいプリフェッチ命令ストリームの初期アドレスとして使用され、そのあとインクリメンタ394 とプリフェッチ・レジスタ398 、400 、402 の１つを通るアドレスのインクリメント・ループを続行することができる。
【００６６】
プリフェッチ・セレクタ390 へ送られるアドレスのもう１つのソースは、ターゲット・アドレス・レジスタ・ブロック414 内のレジスタ配列である。ブロック414 内のターゲット・レジスタには、好適実施例によれば、８つの滞在的ブランチ・ターゲット・アドレスがストアされる。これらの８つの記憶ロケーションはIFIFO ユニット264 の最下位の２マスタ・レジスタ216 、224 に保持されている８つの滞在的に実行可能な命令に論理的に対応している。これらの命令のどれでもが、および滞在的にはすべてが条件付きブランチ命令となり得るので、ターゲット・レジスタ・ブロック414 は、あらかじめ計算されたターゲット・アドレスをストアしておくので、TBUF 190を通してターゲット命令ストリームをプリフェッチするために使用するのを待たせることができる。特に、PC制御ユニット362 がターゲット命令ストリームのプリフェッチを即時に開始するように条件付きブランチ・バイアスがセットされると、ターゲット・アドレスはターゲット・レジスタ・ブロック414 からアドレス・バス418 を経由してプリフェッチ・セレクタ390 へ送られる。インクリメンタ394 によってインクリメントされたあと、アドレスはTBUF PFnPC 400へ戻されてストアされ、ターゲット命令ストリームをあとでプリフェッチするオペレーションで使用される。別のブランチ命令がターゲット命令ストリームに現れると、その２番目のブランチのターゲット・アドレスが計算され、最初の条件付きブランチ命令が解決されて使用されるまでの間、ターゲット・レジスタ配列414 にストアされている。
【００６７】
ターゲット・レジスタ・ブロック414 にストアされた、計算で求めたターゲット・アドレスは、実行PC制御ユニット366 内のターゲット・アドレス計算ユニットからアドレス・ライン382 を経由して、あるいはIEU 104 から絶対ターゲット・アドレス・バス346 を経由して転送される。
【００６８】
プリフェッチPF  PCセレクタ390 を通って転送されるアドレス値は、完全な32ビット仮想アドレス値である。ページ・サイズは本発明の好適実施例では、16Ｋバイトに固定されており、最大ページ・オフセット・アドレス値[13:0]に対応している。従って、現プリフェッチ仮想ページ・アドレス[27:14] に変化がなければ、VMU ページ変換は不要である。プリフェッチ・セレクタ390 内のコンパレータはそのことを検出する。VMU 変換要求信号(VMXLAT)は、インクリメントがページ境界をこえて行われたか、制御のフローが別のページ・アドレスへブランチしたために、仮想ページ・アドレスが変化したとき、ライン372'を経由してPC制御ユニット362 へ送られる。他方、PC制御ユニット362 はライン324 上のCCU PADDR のほかに、VM VADDRアドレスをバッファ・ユニット420 からライン326 上に送出し、該当の制御信号をVMU 制御ライン326 、328 、330 上に送出して、VMU 仮想ページから物理ページへの変換を得るように指示する。ページ変換が必要でない場合は、現物理ページ・アドレス[31:14] はバス122 上のVMU ユニット108 の出力側のラッチによって保持される。
【００６９】
バス370 上に送出された仮想アドレスはインクリメント制御ライン374 から送られてきた信号を受けて、インクリメンタ394 によってインクリメンとされる。インクリメンタ394 は、次の命令セットを選択するために、命令セットを表す値（４命令または16バイト）だけインクリメントする。CCU ユニット106 へ渡されるプリフェッチ・アドレスの下位４ビットはゼロになっている。従って、最初のブランチ・ターゲット命令セット内の実際のターゲット・アドレス命令は最初の命令ロケーションに置かれていない場合がある。しかし、アドレスの下位４ビットはPC制御ユニット362 へ送られるので、最初のブランチ命令のロケーションをIFU 102 が判別することができる。ターゲット・アドレスの下位ビット[3:2] を２ビット・バッファ・アドレスとして返して、位置合わせされていないターゲット命令セットから実行すべき正しい最初の命令を選択するための検出と処理は、新しい命令ストリーム、つまり、命令ストリームの中の最初の非順次命令セット・アドレスの最初のプリフェッチのときだけ行われる。命令セットの最初の命令のアドレスと命令セットをプリフェッチする際に使用されるプリフェッチ・アドレスとの間の非位置合わせの関係は、現順次命令ストリームが存続している間無視することができ、そのあとも無視される。
【００７０】
図４に示した機能ブランチの残り部分は実行PC制御ユニット366 を構成している。本発明の好適実施例によれば、実行PC制御ユニット366 は独立に機能するプログラム・カウンタ・インクリメンタを独自に備えている。この機能の中心となるのは実行セレクタ(DPC SEL)430である。実行セレクタ430 からアドレス・バス352'上に出力されるアドレスはアーキテクチャ100 の現在の実行アドレス(DPC) である。この実行アドレスは加算ユニット434 へ送られる。ライン380 上に送出されたインクリメント／サイズ制御信号は１から４までの命令インクリメント値を指定しており、この値は加算ユニット434 によってセレクタ430 から得たアドレスに加えられる。加算器432 が出力ラッチ機能を実行するたびに、インクリメントされた次の実行アドレスがアドレス・ライン436 を経て直接に実行セレクタ430 に返され、次の命令インクリメント・サイクルで使用される。
【００７１】
初期実行アドレスとその後のすべての新しいストリーム・アドレスは、アドレス・ライン440 を経由して新ストリーム・レジスタ・ユニット438 から得られる。新ストリーム・レジスタ・ユニット438 は、プリフェッチ・セレクタ390 からPFPCアドレス・バス370 を経由して送られてきた新しい現プリフェッチ・アドレスを直接にアドレス・バス440 に渡すことも、あとで使用するためにストアしておくこともできる。つまり、プリフェッチPC制御ユニット364 が新しい仮想アドレスからプリフェッチを開始することを判断した場合は、新しいストリーム・アドレスは新ストリーム・レジスタ・ユニット438 によって一時的にストアされる。PC制御ユニット363 は、プリフェッチと実行インクリメントの両サイクルに関与することによって、実行アドレスが新命令ストリームを開始した制御フロー命令に対応するプログラム実行個所までに達するまで新ストリーム・アドレスを新ストリーム・レジスタ438 においておく。新ストリーム・アドレスはそのあと新ストリーム・レジスタ・ユニット438 から出力されて実行セレクタ430 へ送られ、新命令ストリーム内の実行アドレスを独立して生成することを開始する。
【００７２】
本発明の好適実施例によれば、新ストリーム・レジスタ・ユニット438 は２つの制御フロー命令ターゲット・アドレスをバッファリングする機能を備えている。新ストリーム・アドレスを即時に取り出すことにより、殆ど待ち時間がなく実行PC制御ユニット366 を現実行アドレス列の生成から新実行ユニット・ストリーム列の生成に切り替えることができる。
【００７３】
最後に、IF  PCセレクタ(IF   PC SEL) は最終的に現IF  PCアドレスをアドレス・バス352 上に送出してIEU 104 へ送るためのものである。IF  PCセレクタ442 への入力は実行セレクタ430 または新ストリーム・レジスタ・ユニット438 から得た出力アドレスである。殆どの場合、IF  PCセレクタ442 はPC制御ユニット262 の指示を受けて、実行セレクタ430 から出力された実行アドレスを選択する。しかし、新命令ストリームの実行開始のために使用される新仮想アドレスへ切り替える際の待ち時間をさらに短縮するために、新ストリーム・レジスタ・ユニット438 からの選択したアドレスをバイパスして、バス440 経由で直接にIF  PCセレクタ442 へ送り、現IF  PC実行アドレスとして得ることができる。
【００７４】
実行PC制御ユニット366 は、すべての相対ブランチ・ターゲット・アドレスを計算する機能を備えている。現実行点アドレスと新ストリーム・レジスタ・ユニット438 から得たアドレスは、アドレス・バス352'、340 を経由して制御フロー・セレクタ(CF   PC)446に渡される。その結果、PC制御ユニット362 は大幅な柔軟性を持って、ターゲット・アドレス計算の基となる正確な初期アドレスを選択することができる。
この初期アドレス、つまり、ベース・アドレスはアドレス・バス454 を経由してターゲット・アドレスALU 450 へ送られる。ターゲットALU 450 への入力となるもう１つの値は、制御フロー変位計算ユニット452 からバス458 経由で送られてくる。相対ブランチ命令は、アーキテクチャ100 の好適実施例によれば、新相対ターゲット・アドレスを指定した即値モード定数の形態をした変位置を含んでいる。制御フロー変位計算ユニット452 はＩデコード・ユニットのオペランド出力バス318 から初めて得たオペランド変位置を受け取る。最後に、オフセット・レジスタ値はライン456 を経由してターゲット・アドレスALU450へ送られる。オフセット・レジスタ448 はPC制御ユニット362 から制御ライン378'を経由してオフセット値を受け取る。オフセット値の大きさはアドレス・ライン454 上を送られるベース・アドレスから相対ターゲット・アドレスを計算するときの現ブランチ命令のアドレスまでのアドレス・オフセットに基づいてPC制御ユニット362 によって判断される。つまり、PC制御ユニット362 は、IFIFO 制御ロジック・ユニット272 を制御することによって、現実行点アドレスに命令(CP   PCによって要求された) とＩデコード・ユニット262 によって現在処理中の、従ってPCロジック・ユニット270 によって処理中の命令を分離している命令の個数を追跡して、その命令のターゲット・アドレスを判断する。
【００７５】
相対ターゲット・アドレスがターゲット・アドレスALU 450 によって計算されると、そのターゲット・アドレスはアドレス・バス382 を通して対応するターゲット・レジスタ414 に書き込まれる。
２）ＰＣ制御アルゴリズムの詳細
１．メイン命令ストリームの処理：ＭＢＵＦ  ＰＦｎＰＣ
１．１  次のメイン・フロープリフェッチ命令のアドレスはＭＢＵＦ  ＰＦｎ
ＰＣにストアされる．
１．２  制御フロー命令がないときは、３２ビット・インクリメンタはＭＢＵ
Ｆ  ＰＦｎＰＣに入っているアドレス値を各プリフェッチ・サイクル
ごとに１６バイト（ｘ１６）だけ調整する．
１．３  無条件制御フロー命令がＩデコードされると、命令セットに続いてフ
ェッチされた全てのプリフェッチ・データはフラッシュされ、ＭＢＵ
Ｆ  ＰＦｎＰＣにはターゲット・レジスタ・ユニット、ＰＦ  ＰＣセ
レクタおよびインクリメンタを通して、新しいメイン命令ストリーム
・アドレスがロードされる。新しいアドレスは新ストリーム・レジス
タにもストアされる。
【００７６】
１．３．１  相対無条件制御フローのターゲット・アドレスはＩＦＵ
が保持しているレジスタ・データからと制御フロー命令
の後に置かれたオペランド・データからＩＦＵによって
計算される．
１．３．２  絶対無条件制御フローのターゲット・アドレスはレジス
タ基準値、ベース・レジスタ値、及びインデックス・レ
ジスタ値からＩＥＵによって最終的に計算される．
１．３．２．１  命令プリフェッチ・サイクルは絶対アドレス制御
フロー命令に対してターゲット・アドレスがＩＥ
Ｕから返されるまで停止する。命令実行サイクル
は続行される．
１．４  無条件制御フロー命令から得た次のメイン・フロー・プリフェッチ命
令のアドレスはバイパスされて、ターゲット・アドレス・レジスタ・
ユニット、ＰＦ＿ＰＣセレクタおよびインクリメンタを経由して送ら
れ、最終的にＭＢＵＦ  ＰＦｎＰＣにストアされ、プリフェッチは  
１．２から続けられる．
２．プロシージャ命令ストリームの処理：ＥＢＵＦ  ＰＦｎＰＣ
２．１  プロシージャ命令はメインまたはブランチ・ターゲット命令ストリー
ムの中でプリフェッチされる。ターゲット・ストリームの中でフェッ
チされた場合は条件付き制御フェッチ命令が解決され、プロシージャ
命令がＭＢＵＦへ転送されるまでプロシージャ・ストリームのプリフ
ェッチを停止する。これにより、プロシージャ命令ストリームに現れ
た条件付き制御フローを処理する際にＴＢＵＦを使用できる．
２．１．１  プロシージャ命令はプロシージャ命令ストリームの中に
おいてはならない。つまり、プロシージャ命令はネスト
してはならない。プロシージャ命令からリターンすると
、実行は主命令ストリームに戻る。ネストを可能にする
ためには、ネストしたプロシージャ命令から別の専用リ
ターンが必要である。アーキテクチャはこの種の命令を
容易にサポートできるが、プロシージャ命令をネストす
る機能があっても、アーキテクチャの性能が向上する見
込みはない．
２．１．２  メイン命令ストリームにおいては、第１及び第２条件付
き制御フロー命令を含む命令セットを含んでいるプロシ
ージャ命令ストリームは第１命令セットの中の条件付き
制御フロー命令が解決し、第２条件付き制御フロー命令
セットがＭＢＵＦへ転送されるまで第２条件付き制御フ
ロー命令セットに対してプリフェッチを停止する．
２．２  プロシージャ命令は、命令の即値モード・オペランド・フィールドと
して含まれている相対オフセットによって、プロシージャ・ルーチン
の開始アドレスを示している．
２．２．１  プロシージャ命令から得られたオフセット値はＩＦＵに
維持されているプロシージャ・ベース・アドレス（ＰＢ
Ｒ）レジスタに入っている値と結合される。このＰＢＲ
レジスタは、特殊レジスタの移動命令が実行されると、
特殊アドレスおよびデータバスを通して読み書き可能で
ある．
２．３  プロシージャ命令が現れると、次のメイン命令ストリームＩＦ  ＰＣ
アドレスはＤＰＣリターン・アドレス・レジスタにストアされ、プロ
セッサ・ステータス・レジスタ（ＰＳＲ）内のプロシージャ進行中ビ
ット（ｐｒｏｃｅｄｕｒｅ−ｉｎ−ｐｒｏｇｒｅｓｓ  ｂｉｔ）がセ
ットされる．
２．４  プロシージャ・ストリームの開始アドレスは、ＰＢＲレジスタ（プロ
シージャ命令オペランド・オフセット値を加えて）からＰＦ  ＰＣセ
レクタへ送られる．
２．５  プロシージャ・ストリームの開始アドレスは、新ストリーム・レジス
タ・ユニットとインクリメンタへ同時に送られ、（ｘ１６）だけイン
クリメントする。インクリメントされたアドレスはそのあとＥＢＵＦ
ＰＦｎＰＣにストアされる．
２．６  制御フロー命令がないと、３２ビット・インクリメンタは各プロシー
ジャ命令プリフェッチ・サイクルごとにＥＢＵＦ  ＰＦｎＰＣに入っ
ているアドレス値を、（ｘ１６）だけ調整する．
２．７  無条件制御フロー命令がＩデコードされると、ブランチ命令のあとに
フェッチされた全てのプリフェッチ・データはフラッシュされ、ＥＢ
ＵＦ  ＰＦｎＰＣには新しいプロシージャ命令ストリーム・アドレス
がロードされる．
２．７．１  相対無条件制御フロー命令のターゲット・アドレスはＩ
ＦＵに保持されているレジスタデータからと制御フロー
命令の即値モード・オペランド・フィールド内に入って
いるオペランド・データとからＩＦＵによって計算され
る．
２．７．２  絶対無条件ブランチのターゲット・アドレスはレジスタ
基準値、ベース・レジスタ値およびインデックス・レジ
スタ値からＩＥＵによって計算される．
２．７．２．１  命令プリフェッチ・サイクルは絶対アドレス・ブ
ランチに対してターゲット・アドレスがＩＥＵか
ら返されるまで停止する。実行サイクルは続行さ
れる．
２．８  次のプロシージャ・プリフェッチ命令セットのアドレスはＥＢＵＦ  
ＰＦｎＰＣにストアされプリフェッチは１．２から続けられる．
２．９  プロシージャ命令からのリターンがＩデコードされると、プリフェッ
チがｕＰＣレジスタにストアされているアドレスから続けられ、その
あと（ｘ１６）だけインクリメントされ、あとでプリフェッチするた
めにＭＢＵＦ  ＰＦｎＰＣレジスタに返される．
３  ブランチ命令ストリームの処理：ＴＢＵＦ  ＰＦｎＰＣ
３．１  ＭＢＵＦ命令ストリームの中の最初の命令セットに現れた条件つき制
御フロー命令がＩデコードされると、ターゲット・アドレスはそのタ
ーゲット・アドレスが現アドレスに対する相対アドレスならばＩＦＵ
によって絶対アドレスならばＩＥＵによって判断される．
３．２  「ブランチを行うバイアス」の場合：
３．２．１  ブランチが絶対アドレスに行われる場合はターゲット・
アドレスがＩＥＵから返されるまで命令プリフェッチ・
サイクルを停止する。実行サイクルは続行される．
３．２．２  ＰＦ＿ＰＣセレクタとインクリメンタを経由して転送す
ることによってブランチ・ターゲット・アドレスをＴ  
ＢＵＦ  ＰＦｎＰＣにロードする．
３．２．３  ターゲット命令ストリームがプリフェッチされてＴＢＵ
Ｆに入れられたあとで実行するためにＩＦＩＦＯに送ら
れる。ＩＦＩＦＯとＴＢＵＦが一杯になると、プリフェ
ッチを停止する．
３．２．４  ３２ビット・インクリメンタは各プリフェッチ・サイク
ルごとにＴＢＵＦ  ＰＦｎＰＣに入っているアドレス値
を（ｘ１６）だけ調整する．
３．２．５  ターゲット命令ストリーム内の２番目の命令セットに現
れた条件付き制御フロー命令がＩデコードされるとプリ
フェッチ・オペレーションを、第１の（主）セット内の
全ての条件付きブランチ命令が解決されるまで停止する
（しかし、先に進んで、相対ターゲット・アドレスを計
算しターゲット・レジスタにストアする）．
３．２．６  最初の命令セット内の条件付きブランチを「行う」と解
釈された場合：
３．２．６．１  ブランチのソースがプロシージャ進行中ビットか
ら判断されたＥＢＵＦ命令セットであったときは
ＭＢＵＦまたはＥＢＵＦに入っている最初の条件
付きフロー命令セットのあとに置かれた命令セッ
トをフラッシュする．
３．２．６．２  プロシージャ進行中ビットの状態に基づいて、Ｔ
ＢＵＦ  ＰＦｎＰＣ値をＭＢＵＦ  ＰＦｎＰＣま
たはＥＢＵＦへ転送する．
３．２．６．３  プロシージャ進行中ビットの状態に基づいて、プ
リフェッチしたＴＢＵＦ命令をＭＢＵＦまたはＥ
ＢＵＦへ転送する．
３．２．６．４  ２番目の条件付きブランチ命令セットがＩデコー
ドされていなければ、プロシージャ進行中ビット
の状態に基づいて、ＭＢＵＦまたはＥＢＵＦプリ
フェッチ・オペレーションを続行する．
３．２．６．５  ２番目の条件付きブランチ命令がＩデコードされ
ていれば、その命令の処理を開始する（ステップ
３．３．１へ進む）．
３．２．７  最初の条件付き命令セットの中の命令に対する条件付き
制御を「行わない」と解釈された場合：
３．２．７．１  ターゲット命令ストリームからの命令セットと命
令のＩＦＩＦＯとＩＥＵをフラッシュする．
３．２．７．２  ＭＢＵＦまたはＥＢＵＦプリフェッチ・オペレー
ションを続行する．
３．３  「ブランチが行われないバイアス」の場合：
３．３．１  命令をプリフェッチしてＭＢＵＦに入れることを停止す
る。実行サイクルを続ける．
３．３．１．１  最初の条件付き命令セットの中の条件付き制御フ
ロー命令が相対ならばターゲット・アドレスを計
算し、ターゲット・レジスタにストアする．
３．３．１．２  最初の条件付き命令セットの中の条件付き制御フ
ロー命令が絶対ならば、ＩＥＵがターゲット・ア
ドレスを計算して、そのアドレスをターゲット・
レジスタに返すまで待つ．
３．３．１．３  ２番目の命令セットの中の条件付き制御フロー命
令のＩデコードが行われると、最初の条件付き命
令セットの中の条件付き制御フロー命令が解決さ
れるまでプリフェッチ・オペレーションを停止す
る．
３．３．２  最初の条件付きブランチのターゲット・アドレスが計算
されると、ＴＢＵＦ  ＰＦｎＰＣにロードし、メイン命
令ストリームの実行と並行して命令をプリフェッチして
ＴＢＵＦに入れることを開始する。ターゲット命令セッ
トはロードされない（したがって、ブランチ・ターゲッ
ト命令は最初の命令セット中の各条件付き制御フロー命
令が解決されたとき用意されている）．
３．３．３  最初のセットの中の条件つき制御フロー命令が「行われ
る」と解釈された場合：
３．３．３．１  ブランチのソースがＥＢＵＦ命令ストリームであ
るとプロシージャ進行中ビットの状態から判断さ
れると、ＭＢＵＦまたはＥＢＵＦをフラッシュし
、最初の条件付きブランチ命令セットのあとに置
かれたメイン・ストリームからの命令のＩＦＩＦ
ＯとＩＥＵをフラッシュする．
３．３．３．２  プロシージャ進行中ビットの状態から判断した通
りに、ＴＢＵＦ  ＰＦｎＰＣ値をＭＢＵＦ  ＰＦ
ｎＰＣまたはＥＢＵＦへ転送する．
３．３．３．３  プロシージャ進行中ビットの状態から判断した通
りに、プリフェッチしたＴＢＵＦ命令をＭＢＵＦ
またはＥＢＵＦへ転送する．
３．３．３．４  プロシージャ進行中ビットの状態から判断した通
りに、ＭＢＵＦまたはＥＢＵＦプリフェッチ・オ
ペレーションを続行する．
３．３．４  最初のセット内の条件付き制御フロー命令が「行われな
い」と解析された場合：
３．３．４．１  ターゲット命令ストリームからの命令セットのＴ
ＢＵＦをフラッシュする．
３．３．４．２  ２番目の条件付きブランチ命令がＩデコードされ
なかった場合は、プロシージャ進行中ビットの状
態から判断した通りに、ＭＢＵＦまたはＥＢＵＦ
プリフェッチ・オペレーションを続ける．
３．３．４．３  ２番目の条件付きブランチ命令がＩデコードされ
た場合は、その命令の処理を開始する（ステップ
３．４．１へ進む）．
４  割り込み、例外およびトラップ命令
４．１  トラップは広義には次のものからなる。
【００７７】
４．１．１  ハードウェア割り込み
４．１．１．１  非同期（外部）発生事象、内部または外部．
４．１．１．２  いつでも発生し、持続する．
４．１．１．３  アトミック（通常）命令間で優先順にサービスを
受け、プロシージャ命令を一時中止する．
４．１．１．４  割り込みハンドラの開始アドレスはトラップ・ハ
ンドラ入り口点の事前定義テーブルまでのベクト
ル番号オフセットとして判断される．
４．１．２  ソフトウェア・トラップ命令
４．１．２．１  非同期（外部）発生命令．
４．１．２．２  例外として実行されるソフトウェア命令．
４．１．２．３  トラップ・ハンドラの開始アドレスは、ＴＢＲま
たはＦＴＢレジスタにストアされたベース・アド
レス値と結合されたトラップ番号オフセットから
判断される．
４．１．３  例外
４．１．３．１  命令と同期して発生する事象．
４．１．３．２  命令の実行時に処理される．
４．１．３．３  例外の結果により、期待された命令とすべての後
続実行命令はキャンセルされる．
４．１．３．４  例外ハンドラの開始アドレスは、トラップ・ハ  
ンドラ入り口点の事前定義テーブルまでのトラッ
プ番号オフセットから判断される．
４．２  トラップ命令ストリーム・オペレーションはそのとき実行中の命令ス
トリームとインラインで実行される．
４．３  トラップ処理ルーチンが次の割り込み可能トラップの前にｘＰＣアド
レスをセーブすることを条件に、トラップはネストが可能である。そ
うしないと、現トラップ・オペレーションの完了前にトラップが現れ
ると、マシンの状態が壊れることになる．
５  トラップ命令ストリームの処理：ｘＰＣ
５．１  トラップが現れた時：
５．１．１  非同期割り込みが起こると、そのとき実行中の命令は一
時中断される．
５．１．２  同期例外が起こると、例外を起こした命令が実行される
とトラップが処理される．
５．２  トラップが処理されたとき：
５．２．１  割り込みは禁止される．
５．２．２  現在のＩＦ  ＰＣアドレスはｘＰＣトラップ状態リター
ン・アドレス・レジスタにストアされる．
５．２．３  ＩＦ  ＰＣアドレスとそのあとのアドレスにあるＩＦＩ
ＦＯとＭＢＵＦプリフェッチ・バッファはフラッシュさ
れる．
５．２．４  アドレスＩＦ  ＰＣと、そのあとのアドレスの実行され
た命令と、その命令の結果はＩＥＵからフラッシュされ
る．
５．２．５  ＭＢＵＦ  ＰＦｎＰＣに、トラップ・ハンドラ・ルーチ
ンのアドレスがロードされる．
５．２．５．１  トラップのソースは特殊レジスタ群に入っている
トラップ番号によって判断されたトラップ・タイ
プに応じてＴＢＲまたはＦＴＢレジスタをアドレ
ス指定している．
５．２．６  命令がプリフェッチされ、通常通りに実行するためにＩ
ＦＩＦＯに入れられる．
５．２．７  トラップ・ルーチンの命令がそのあと実行される．
５．２．７．１  トラップ処理ルーチンはｘＰＣアドレスを所定の
ロケーションにセーブする機能を備え、割り込み
を再び可能にする。ｘＰＣレジスタは特殊レジス
タ移動命令で、および特殊レジスタ・アドレスと
データ・バスを通して読み書きされる．
５．２．８  トラップ命令からのリターンを実行することによってト
ラップ状態から抜け出る必要がある．
５．２．８．１  以前にセーブしていた時はｘＰＣアドレスをその
事前定義ロケーションから復元してからトラップ
命令からのリターンを実行する必要がある．
５．３  トラップ命令からのリターンが実行されたとき：
５．３．１  割り込みが可能にされる．
５．３．２  プロシージャ進行中ビットの状態から判断したとおりに
、ｘＰＣアドレスが現在の命令ストリーム・レジスタＭ
ＢＵＦまたはＥＢＵＦ  ＰＦｎＰＣに戻され、プリフェ
ッチがそのアドレスから続行される．
５．３．３  ｘＰＣアドレスが新ストリーム・レジスタを通してＩＦ
ＰＣレジスタに復元される．
E)割込みおよび例外の処理
1)概要
割込みと例外は、それらが可能にされている限り、プロセッサがメイン命令ストリームから実行されているか、プロシージャ命令ストリームから実行されているかに関係なく処理される。割込みと例外は優先順にサービスが受けられ、クリアされるまで持続してる。トラップ・ハンドラの開始アドレスは、下述するように、トラップ・ハンドラの事前定義テーブルまでのベクトル番号オフセットとして判断される。
【００７８】
割込みと例外は、本実施例では、基本的に２つのタイプがある。すなわち、命令ストリームの中の特定の命令と同期して引き起こされるものと、命令ストリームの中の特定の命令と非同期に引き起こされるものである。割込み、例外、トラップおよびフォールト(fault) の用語は、本明細書では相互に使い分けて用いられている。非登記割込みは、命令ストリームと同期して動作していない、オン・チップまたはオフ・チップのハードウェアによって引き起こされる。例えば、オン・チップ・タイマ／カウンタによって引き起こされる割込みは、オフ・チップから引き起こされるハードウェア割込みやマスク不能割込み（non-maskable interrupt)(NMI)と同じように、非同期である。非同期割込みが引き起こされると、プロセッサ・コンテキストが凍結され(frozen)、すべてのトラップが割込み禁止され、ある種のプロセッサ状況情報がストアされ、プロセッサは受け取った特定の割込みに対応する割込みハンドラにベクトルを向ける。割込みハンドラがその処理を完了すると、プログラム実行は割込み発生時に実行中であったストリームの中の最後に完了した命令のあとに置かれた命令から続けられる。
【００７９】
同期例外とは、命令ストリームの中の命令と同期して引き起こされる例外である。これらの例外は特定の命令に関連して引き起こされ、問題の命令が実行されるまで保留される。好適実施例では、同期例外はプリフェッチ時、命令デコード時、または命令実行時に引き起こされる。プリフェッチ例外には、例えば、TLB 不一致、その他のVMU 例外がある。デコード例外は、例えば、デコード中の命令が違法命令であるか、プロセッサの現特権レベル(privilege level) に一致していないと、引き起こされる。実行例外は、例えば、ゼロによる除算といった算術演算エラーが原因で引き起こされる。これらの例外が起こると、好適実施例では、例外を引き起こした特定命令と例外とを対応づけ、その命令がリタイア(retire)されるときまでその状態が維持される。その時点で、以前に完了した命令がすべてリタイアされ、例外を引き起こした命令からの試行的結果があれば、試行的に実行された後続の命令の試行的結果と同じように、フラッシュされる。そのあと、その命令で引き起こされた最高優先度例外に対応する例外ハンドラに制御が渡される。
【００８０】
ソフトウェア・トラップ命令はCF  DET 274(図２）によってＩデコード・テージで検出され、無条件コール命令その他の同期トラップと同じように処理される。つまり、ターゲット・アドレスが計算され、プリフェッチはそのときのプリフェッチ待ち行列（EBUFまたはMBUF) まで続けられる。これと同時に、その例外は命令と対応づけられて記録され、命令がリタイアされるとき処理される。他のタイプの同期例外はすべて、例外を引き起こした特定命令と対応付けられて記録され、累積されるだけで、実行時に処理される。
２）非同期割込み
非同期割込みは、割込みライン292 を通してPCロジック・ユニット270 に通知される。図３に示すように、これらのラインはPCロジック・ユニット270 内の割込みロジック・ユニット363 に通知するためのもので、NMI ライン、IRQ ラインおよび１組の割込みレベル・ライン(LVL) からなっている。NMI ラインはマスク不能割込みを通知し、外部ソースを起点としている。これは、ハードウェア・リセットを除き最高優先度割込みである。IRQ ラインも外部ソースを起点としており、外部デバイスがハードウェア割込みをいつ要求したかを通知する。好適実施例では、外部から起こされるハードウェア割込みは最高32までユーザが定義することができ、割込みを要求した特定外部デバイスは割込みレベル・ライン(LVL) 上に割込み番号(0ー31) を送出する。メモリ・エラー・ラインはMCU 110 によってアクティベート( 活動化) され、様々な種類のメモリ・エラーを通知する。その他の非同期割込みライン( 図示せず) も割込みロジック・ユニット363 に通知するために設けられている。これらには、タイマ／カウンタ割込み、メモリ入出力（I/O)エラー割込み、マシン・チェック割込み、およびパフォーマンス・モニタ割込みを要求するためのラインがある。
非同期割込みの各々は、下述する同期例外と同様に、対応する事前定義トラップ番号が関連づけられている。これらのトラップ番号は32個が32個のハードウェア割込みレベルと関連づけられている。これらのトラップ番号のテーブルは割込みロジック・ユニット363 に維持されている。一般に、トラップ番号が大きくなると、トラップの優先度が高くなる。
【００８１】
非同期割込みの１つが割込みロジック・ユニット363 に通知されると、割込み制御ユニット363 は割込み要求をINT REQ/ACK ライン340 を経由してIEU 104 へ送出する。また、割込み制御ユニット363 はプリフェッチ一時中止信号をライン343 を経由してPC制御ユニット262 へ送信し、PC制御ユニット262 に命令をプリフェッチすることを中止させる。IEU 104 はそのとき実行中の命令をすべてキャンセルし、すべての試行的結果を中止するか、一部またはすべての命令を完了させる。好適実施例では、そのとき実行中の命令をすべてキャンセルすることによって、非同期割込みに対する応答を高速化している。いずれの場合も、実行PC制御ユニット366 内にDPC は、IEU 104 は割込みの受信を確認する前に、最後に完了し、リタイアされた命令に対応するように更新される。プリフェッチされてMBUF、EBUF、TBUF、およびIFIFO 264 に置かれている他の命令もすべてキャンセルされる。
【００８２】
IEU 104 は、割込みハンドラから割込みを受け取る準備状態にあるときだけ、割込み受信確認信号をINT REQ/ACK ライン340 を経由して割込み制御ユニット363 へ送り返す。この信号を受け取ると、割込み制御ユニット363 は、以下で説明するように、該当するトラップ・ハンドラにディスパッチする。
3)同期例外
同期例外の場合は、割込み制御ユニット363 は各命令セットごとに４個が１組の内部例外ビット（図示せず）をもっており、各ビットはセット内の各命令に対応づけられている。割込み制御ユニット363 は各命令で見つかったとき、通知するトラップ番号も維持している。
【００８３】
特定の命令セットがプリフェッチれている途中で、VMU がTLB 不一致または別のVMU 例外を通知すると、この情報はPCロジック・ユニット270 へ、特に割込み制御ユニット334 へVMU 制御ライン332 、334 を経由して送られる。割込み制御ユニット363 は、この信号を受信すると、以後のプリフェッチを一時中止するようにライン343 を経由してPC制御ユニット362 に通知する。これと同時に、割込み制御ユニット363 は、命令セットが送られる先のプリフェッチ・バッファに関連するVM  MissまたはVM  Excpビットのどちらか該当する方をセットする。そのあと、割込み制御ユニット363 は、命令セットの中の命令のどれも有効でないので、その命令セットに対応する４個の内部例外標識ビット全部をセットし、問題を起こした命令セットの中の４命令の各々に対応して受信した特定の例外のトラップ番号をストアする。問題のある命令より前の命令のシフトと実行は、問題の命令セットがIFIFO 264 内で最低レベルに達するまで通常通りに続行される。
【００８４】
同様に、プリフェッチ・バッファ260 、Ｉデコード・ユニット262 またはIFIFO 264 を通して命令をシフトしている途中で他の同期例外が検出れると、この情報も割込み制御ユニット363 へ送られ、ユニット363 は、例外を引き起こした命令に対応する内部例外標識ビットをセットし、その例外に対応するトラップ番号をストアする。プリフェッチ同期例外の場合と同じように、問題を起こした命令より前の命令のシフトと実行は、問題の命令セットがIFIFO 264 内で最低レベルに達するまで、通常通りに続行される。
【００８５】
好適実施例では、プリフェッチ・バッファ260 、Ｉデコード・ユニット262 またはIFIFO 264 を通して命令をシフトしている途中で検出される例外は、ソフトウェア・トラップ命令の１タイプだけでる。ソフトウェア・トラップ命令は、CF  DET ユニット274 によってＩデコード・ステージで検出される。一部の実施例では、他の形態の同期例外がＩデコード・ステージで検出されるが、他の同期例外の検出は、命令が実行ユニット104 に到着するまで待つようにするのが好ましい。このようにすれは、特権命令を処理すると起こるようなある種の例外が、命令が実効的に順序内で実行される前に変化するおそれのあるプロセッサ状態に基づいて通知されるのが防止される。違法命令のように、プロセッサ状態に左右されない例外はＩデコード・ステージで検出可能であるが、すべての実行前同期例外(VMU例外は別として) を同じロジックで検出  するようにすれば、最低限のハードウェアですむことになる。また、そのような例外の処理は時間を重視することがめったにないので、命令が実行ユニット104 に届くまでの待ちによる時間浪費もない。
【００８６】
上述したように、ソフトウェア・トラップ命令は  CF  DET ユニット274 によってＩデコード・ステージで検出される。割込みロジック・ユニット363 内のその命令に対応する内部例外標識ビットはセットされ、０から127 までの番号で、ソフトウェア・トラップ命令の即値モード・フィールドに指定できるソフトウェア・トラップ番号はトラップ命令に対応づけられてストアされる。しかし、プリフェッチ同期例外と異なり、ソフトウェア・トラップは制御フロー命令だけでなく、同期例外としても扱われるので、割込み制御ユニット363 は、ソフトウェア・トラップ命令が検出されたときプリフェッチを一時中止するようにPC制御ユニット362 に通知しない。その代わりに、命令がIFIFO 264 を通知してシフトされるのと同時に、IFU 102 はトラップ・ハンドラをプリフェッチしてMBUF命令ストリーム・バッファに入れる。
【００８７】
命令セットがIFIFO 264 の最低レベルまで達すると、割込みロジック・ユニット363 はその命令セットの例外標識ビットを４ビット・ベクトルとしてSYNCH   INT   INFOライン341 経由でIEU 104 へ送り、命令セットの中で同期例外の発生源とすでに判断されていた命令があれば、どの命令であるかを通知する。IEU 104 は即時に応答しないで、命令セットの中のすべての命令が通常の方法でスケジュールされるようにする。整数算術演算例外といった別の例外は、実行時に引き起こされる場合がある。特権命令が実行されたために起こる例外のように、マシンの現在状態に左右される例外もこの時点で検出され、マシンの状態が命令ストリーム内の以前のすべての命令に対して最新となるようにするために、PSR に影響を与える可能性のあるすべての命令( 特殊な移動やトラップ命令からのリターンなど）は強制的に順序内で実行される。なんらかの同期命令の発生源となった命令がリタイアされる直前にあるときだけ、例外が起こったことが割込みロジック・ユニット363 に通知される。
【００８８】
IEU 104 は試行的に実行され、同期例外を引き起こした最初の命令に先行する命令ストリームに現れたすべての命令をリタイアし、試行的に実行され、命令ストリームにそのあとに現れた命令からの試行的結果をフラッシュする。例外を引き起こした特定の命令は、トラップから戻ると再実行されるのが普通であるので、この命令もフラッシュされる。そのあと、実行PC制御ユニット366 内のIF  PCは実際にリタイアされた最後の命令い対応するように更新され、例外が割込み制御ユニット363 に通知される。
【００８９】
例外の発生源である命令がリタイアされると、IEU 104 は、リタイアされる命令セット( レジスタ224)の中に同期例外を起こした命令があれば、どの命令であるかを示した新しい４ビット・ベクトルを、命令セット内の最初の例外の発生源を示した情報と一緒に、SYNCH   INT   INFOライン341 を経由して割込みロジック・ユニット363 に返却する。IEU 104 から返却される４ビット例外ベクトルに入っている情報は、割込みロジック・ユニット363 からIEU 104 に渡された４ビット例外ベクトルとIEU 104 で引き起こされた例外を累積したものである。プリフェッチまたはＩデコード時に検出された例外が原因で割込み制御ユニット363 にすでにストアされている情報があれば、その情報と一緒にIEU 104 から割込み制御ユニット363 に返却される情報の残余部分は、割込み制御ユニット363 が最高優先度同期例外の内容とそのトラップ番号を判断するのに十分である。
4)ハンドラ・ディスパッチとリターン：
割込み受信確認信号がライン340 経由でIEU から受信されるか、あるいはゼロ以外の例外ベクトルがライン341 経由で受信された後、現DPC がリターン・アドレスとして特殊レジスタ412 （図４）の１つであるxPC レジスタに一時的にストアされる。現プロセッサ状態レジスタ(PSR) は先のPSR(PPSR) レジスタにもストアされ、そして現状態比較レジスタ(CSR) が特殊レジスタ412 の中の旧状態比較レジスタ(PCSR)にセーブされる。
【００９０】
トラップ・ハンドラのアドレスはトラップ・ベース・レジスタ・アドレスにオフセットを加えたものとして計算される。PCロジック・ユニット270 はトラップ用に２つのベース・レジスタをもち、これらは共に特殊レジスタ412 （図４）の一部であり、以前に実行された特殊移動命令によって初期化される。大部分のトラップでは、ハンドラのアドレスを計算するために使用されるベース・レジスタはトラップ・ベース・レジスタTBR である。
【００９１】
割込み制御ユニット363 は現在保留中の最高優先度割込みまたは例外を判断し、索引(look-up) テーブルを通して、それに関連づけられたトラップ番号を判断する。これは、選択したベース・レジスタまでのオフセットとして、１組のINT  OFFSETライン373 を経由してプリフェッチPC制御ユニット364 へ渡される。ベクトル・アドレスは、オフセット・ビットを下位ビットとしてTBR レジスタから得た上位ビットに連結するだけで求められるという利点がある。このため、加算器の遅延が防止される。（本明細書では、2'ビットとはi'番目のビットのことである。) 例えば、トラップの番号が０から255 までで、これを８ビット値で表すと、ハンドラ・アドレスは８ビット・トラップ番号を22ビットのTBR ストア値の最後に連結すると求められる。トラップ番号に２桁に下位ビットを付加すると、トラップ・ハンドラ・アドレスは常にワード境界上に置かれることになる。このようにして作られた連結ハンドラ・アドレスは入力373 の１つとしてプリフェッチ・セレクタPF  PC Sel 390（図４）へ送られ、次のアドレスとして選択されて、そこから命令がプリフェッチされる。TBR レジスタを使用してトラップのベクトル・ハンドラ・アドレスはすべて１ワードだけ離れている。従って、トラップ・ハンドラ・アドレスにある命令は、長くなったトラップ処理ルーチンへの予備的ブランチ命令でなければならない。しかし、トラップには、システム・パフォーマンスの低下を防止するために、その扱いに注意が必要なものがいくつかある。例えば、TLB トラップは高速に実行させる必要がある。そのような理由から、好適実施例では、予備的ブランチの費用を払わないで、小型のトラップ・ハンドラを呼び出せるようにした高速トラップ・メカニズムが組み込まれている。さらに、高速トラップ・ハンドラはメモリにも、例えば、オン・チップROM にも独立に配置させることができるので、ROM の位置（ロケーション）に関連するメモリ・システム問題がなくなる。
【００９２】
好適実施例では、高速トラップとなるトラップは上述したVMU 例外だけである。高速トラップの番号は他のトラップと区別され、０〜７の範囲になっている。しかし、優先度はMMU 例外と同じである。割込み制御ユニット363 は、高速トラップがそのとき保留中の最高優先度であると認めると、特殊レジスタ(FTB) から高速トラップ・ベース・レジスタ(FTB) を選択し、トラップ・オフセットと結合するためにライン416 上に送出する。ライン373'経由でプリフェッチ・セレクタPF  PC Sel 390へ送られた結果のベクトル・アドレスは、FTB レジスタからの上位22ビットを連結したもので、そのあとに高速トラップ番号を表した３ビットが続き、そのあとに７個のゼロ・ビットが続いている。従って、各高速トラップ・アドレスは128 バイト・つまり、32ワードだけ離れている。呼び出されると、プロセッサは開始ワードへブランチし、ブロックまたはそこから出たブランチ内でプログラムを実行させる。
32個またはそれ以下の命令で実現できる標準的なTLB 処理ルーチンのような、小さなプログラムの実行は、実際の実行処理ルーチンへの予備的ブランチが回避されるので、通常のトラップよりも高速化される。
【００９３】
好適実施例では、すべての命令は同じ４バイト長になっているが（つまり、４つのアドレス・ロケーションを占有する）、注目すべきことは、命令が可変長になったマイクロプロセッサでも高速トラップ・メカニズムが利用できることである。この場合、高速トラップ・ベクトル・アドレス間には、マイクロプロセッサで使用できる最短長の命令を少なくとも２つ、好ましくは32個の平均サイズ命令を受け入れるだけの十分なスペース設けられることは勿論である。勿論、マイクロプロセッサがトラップからのリターン命令を備えている場合には、ベクトル・アドレス間には、ハンドラ内の少なくとも１つの他の命令をその命令に置けるだけの十分なスペースを設けておく必要がある。
【００９４】
また、トラップ・ハンドラへディスパッチすると、プロセッサはカーネル・モードと割込み状態に入る。これと並行して、状態比較レジスタ(CSR) のコピーが以前のキャリー状態レジスタ(PCSR)に置かれ、PSR のコピーが以前のPSR(PPSR)にストアされる。カーネルと割込み状態モードはプロセッサ状況レジスタ(PSR) 内のビットで表される。現PSR の割込み状態ビットがセットされると、シャドウ・レジスタまたはトラップ・レジスタRT[24]〜RT[31]が上述および図７（ｂ）に示すように、見えるようになる。割込みハンドラは新しいモードをPSR に書き込むだけだカーネル・モードから出ることができるが、割込み状態から出るためには、トラップからのリターン(RTT) 命令を実行する方法だけが唯一の方法である。
【００９５】
IEU 104 がRTT 命令を実行すると、PCSRはCSR レジスタに復元され、PPSRレジスタはPSR レジスタに復元されるので、PSR 内の割込み状態ビットは自動的にクリアされる。PF  PC SELセレクタ390 は特殊レジスタ・セット412 のなかの特殊レジスタxPC を次にそこからプリフェッチするアドレスとして選択する。xPC はインクリメンタ394 とバス396 を通して、MBUF PFnPCまたはEBUF  PFnPC のどちらか該当する方に復元される。xPC をEBUF PFnPCに復元すべきか、またはMBUF PFnPCに復元すべきかの判断は、復元されたあとのPSR の「プロシージャ進行中」ビットに従って行われる。
【００９６】
注目すべきことは、プロセッサはトラップとプロシージャ命令の両方のリターン・アドレスをストアするのに同じ特殊レジスタxPC を使用しないことである。トラップのリターン・アドレスは上述したように特殊レジスタxPC にストアされるが、プロシージャ命令のあとリターンする先のアドレスは別の特殊レジスタuPC にストアされる。従って、割込み状態は、プロセッサがプロシージャ命令で呼び出されたエミュレーション・ストリームを実行している間でも、使用可能のままになっている。他方、例外処理ルーチンはエミュレーション・ストリームが完了したあと例外ハンドラへ戻るためのアドレスをストアする特殊レジスタがないので、いずれのプロシージャ命令をも含んでいてはならない。
5)  ネスト：
ある種のプロセッサ状況情報は、トラップ・ハンドラ、特に、CSR 、PSR 、リタンPC、およびある意味では"A" レジスタ・セットre[24]〜re[31]へディスパッチするとき自動的にバックアップがとられるが、他のコンテキスト情報は保護されていない。例えば、浮動小数点状況レジスタ(FSR) の内容は自動的にバックアップがとられない。トラップ・ハンドラがこれらのレジスタを変更するためには、独自のバックアップを実行しなければならない。
【００９７】
トラップ・ハンドラへディスパッチするとき自動的に行われるバックアップが制限されているために、トラップのネストは自動的に行われない。トラップ・ハンドラは必要とするレジスタのバックアップをとり、割込み条件をクリアし、トラップ処理のために必要な情報をジステム・レジスタから読み取り、その情報を適当に処理する必要がある。割込みは、トラップ・ハンドラへディスパッチすると自動的に禁止される。処理を終えると、ハンドラはバックアップをとったレジスタを復元し、再び割込みを可能にし、RTT 命令を実行して割込みから戻ることができる。
【００９８】
ネストされたトラップを可能にするには、トラップ・ハンドラを第１部分と第２部分に分割する必要がある。第１部分では、割込みが禁止されている間に、特殊レジスタ移動命令を使用してxPC をコピーし、トラップ・ハンドラが維持しているスタック上にプッシュしておく必要がある。次に、特殊レジスタ移動命令を使用して、トラップ・ハンドラの第２部分の先頭のアドレスをxPC に移し、トラップからのリターン命令(RTT) を実行する必要がある。RTT は割込み状態を取り除き(PRSR をPSR に復元することによって) 、制御をxPC 内のアドレスを移す。xPC には、ハンドラの第２部分のアドレスが入っている。第２部分はこの時点で割込みを可能にして、割込み可能モードで例外の処理を続けることができる。注目すべきことは、シャドウ・レジスタRT[24]〜RT[31]はこのハンドラの第１部分でのみ見ることができ、第２部分では見えないことである。従って、第２部分では、ハンドラは、"A" レジスタ値がハンドラによって変更される可能性がある場合には、その値を予約しておく必要がある。トラップ処理ルーチンは終わったときは、バックアップにとったレジスタをすべて復元し、元のxPC をトラップ・ハンドラ・スタップからポップし、それを特殊レジスタ移動命令を使用してxPC 特殊レジスタに戻して、別のRTT を実行する必要がある。これにより、制御はメインまたはエミュレーション命令ストリームの中の該当命令に返される。
6)トラップ一覧表：
次の表Ｉは、好適実施例で認識されるトラップのトラップ番号、優先度および処理モードを示すものである。
【００９９】
表Ｉ
───────────────────────────────────
トラップ番号      処理モード      同期      トラップ名                
０−１２７        通常            同期      トラップ命令
１２８            通常            同期      ＦＰ例外
１２９            通常            同期      整数算術演算例外
１３０            通常            同期      ＭＭＵ（ＴＬＢ不一致または
修正を除く）
１３５            通常            同期      不整列メモリアドレス
１３６            通常            同期      違法命令
１３７            通常            同期      特権命令
１３８            通常            同期      デバッグ例外
１４４            通常            非同期    性能モニタ
１４５            通常            非同期    タイマ／カウンタ
１４６            通常            非同期    メモリＩ／Ｏエラー
１６０−１９１    通常            非同期    ハードウェア割込み
１９２−２５３    予約
２５４            通常            非同期    マシン・チェック
２５５            通常            非同期    ＮＭＩ
０                高速トラップ    同期      高速ＭＭＵ  ＴＬＢ不一致
１                高速トラップ    同期      高速ＭＭＵ  ＴＬＢ修正
２−３            高速トラップ    同期      高速（予約）
４−７            高速トラップ    同期      高速（予約）
ＩＩＩ．命令実行ユニット  
図５は、IEU 104 の制御経路部分とデータ経路部分を示したものである。主要データ経路は、IFU 102 からの命令／オペランド・データ・バスを始端としている。データ・バスとして、即値オペランドはオペランド位置合わせユニット470 へ送られ、レジスタ・ファイル(REG ARRAY)472に渡される。レジスタ・データはレジスタ・ファイル472 からバイパス・ユニット474 を通って、レジスタ・ファイル出力バス476 を経由し、分配バス480 を経由して機能計算エレメント(FUo-n) の並列配列へ送られる。機能ユニット478o-nによって生成されたデータは、出力バス482 を経由してバイパス・ユニット474 またはレジスタ配列472 または両方へ送り返される。
【０１００】
ロード／ストア・ユニット484 によってIEU 104 のデータ経路部分が完成される。ロード／ストア・ユニット484 はIEU 104 とCCU 106 間のデータ転送の管理を担当する。具体的には、CCU 106 のデータ用キャッシュ134 から取り出したロード・データはロード／ストア・ユニット484 によってロード・データ・バス486 を経由してレジスタ配列472 へ転送される。CCU 106 のデータ用キャッシュにストアされるデータは機能ユニットの分配バス480 から受信される。
IEU 104 の制御経路部分はIEU データ経路を通る情報の送出、管理、およびその処理を行うことを担当する本発明の好適実施例では、IEU 制御経路は複数の命令の並行実行を管理する機能を備え、IEU データ経路は、IEU 104 のほぼすべてのデータ経路エレメント間の複数のデータ転送を独立して行う機能を備えている。IEU 制御経路は命令／オペランド・バス124 を経由して命令を受信すると、それを応じて動作する。具体的には、命令セットはＥデコード・ユニット490 によって受信される。本発明の好適実施例では、Ｅデコード・ユニット490 はIFIFO マスタ・レジスタ216 、224 に保持されている両方の命令セットを受信して、デコードする。８命令すべてのデコードの結果は、キャリー・チェッカ(CRY CHKR)ユニット492 、依存性チェッカ(DEP CHKR)ユニット494 、レジスタ改名ユニット（REG RENAME)496、命令発行(ISSUEUR) ユニット498 およびリタイア制御ユニット(RETIRE CLT)500 へ送られる。
【０１０１】
キャリー・チェッカ・ユニット492 はＥデコード・ユニット490 から制御ライン502 を経由して、係続中の保留されている８命令に関するデコード化情報を受信する。キャリー・チェッカ492 の機能は、保留されている命令のうち、プロセッサ状況ワードのキャリー・ビットに影響を与える、あるいはキャリー・ビットの状態に左右される命令を識別することである。この制御情報は制御ライン504 を経由して命令発行ユニット498 へ送られる。
【０１０２】
保留状態の８命令によって使用されているレジスタ・ファイル472 のレジスタを示しているデコード化情報は、制御ライン506 を経由して直接にレジスタ改名ユニット496 へ送られる。この情報は、依存関係チェッカ・ユニット494 へも送られる。依存関係チェッカ・ユニット494 の機能は、保留状態の命令のどれがレジスタをデータの宛先として参照しているか、もしあれば、どの命令がこれらの宛先レジスタのいずれかに依存しているかを判断することである。レジスタに依存する命令は、制御ライン508 を経由してレジスタ改名ユニット496 へ送られる制御信号によって識別される。
【０１０３】
最後に、Ｅデコード・ユニット490 は保留状態の８命令の各々の特定の内容と機能を識別した制御情報を制御ライン510 を経由して命令発行ユニット498 へ送る。命令発行ユニット498 はデータ経路資源、特に、保留状態の命令の実行のためにどの機能ユニットが使用できるかを判断することを担当する。アーキテクチャ100 の好適実施例によれば、命令発行ユニット498 はデータ経路資源が使用可能であること、キャリーとレジスタ依存関係の制約を条件として、８個の保留状態命令のいずれかを順序外で実行できるようにする。レジスタ改名ユニット496 は、実行できるように適当に制約が解除された命令のビット・マップを制御ライン512 を経由して命令発行ユニット498 へ送る。すでに実行された（完了した）命令およびレジスタまたはキャリーに依存する命令は論理的にビット・マップから除かれる。
【０１０４】
必要とする機能ユニット478o-nが使用可能であるかどうかに応じて、命令発行ユニット498 は各システム・クロック・サイクルに複数の命令の実行を開始することができる。機能ユニット478o-nの状況は状況バス514 を経由して命令発行ユニット498 へ送られる。命令の実行を開始し、開始後の実行管理を行うための制御信号は命令発行ユニット498 から制御ライン516 を経由してレジスタ改名ユニット496 へ送られ、また選択的に機能ユニット478o-nへ送られる。制御信号を受けると、レジスタ改名ユニット496 はレジスタ選択信号をレジスタ・ファイル・アクセス制御バス518 上に送出する。バス518 上に送出された制御信号でどのレジスタが割込み可能にされたかは、実行中の命令を選択することによって、およびレジスタ改名ユニット496 がその特定命令によって参照されたレジスタを判断することによって判断される。
【０１０５】
バイパス制御ユニット(BYPASS CTL) 520は、一般的には、制御ライン524 上の制御信号を通してバイパス・データ・ルーチング・ユニット474 の動作を制御する。バイパス制御ユニット520 は機能ユニット478o-nの各々の状況をモニタし、制御ライン522 を経由してレジスタ改名ユニット496 から送られてきたレジスタ参照に関連して、データをレジスタ・ファイル472 から機能ユニット478o-nへ送るべきかどうか、あるいは機能ユニット478o-nから出力されるデータをバイパス・ユニット474 経由で機能ユニット宛先バス480 へ即時に送って、命令発行ユニット498 によって選択された新発行の命令の実行のために使用できるかどうかを判断する。どちらの場合も、命令発行ユニット498 は機能ユニット478o-nの各々への特殊レジスタ・データを選択的に使用可能にすることによって、宛先バス480 から機能ユニット478o-nへデータを送ることを直接に制御する。
【０１０６】
IEU 制御経路の残りのユニットには、リタイア制御ユニット500 、制御フロー制御(CF CTL)ユニット528 、および完了制御(DONE CTL)ユニット536 がある。リタイア制御ユニット500 は順序外で実行された命令の実行を無効または確認するように動作する。ある命令が順序外で実行されると、先行命令もすべてリタイアされたならば、その命令は、確認またはリタイアされることができる。現セット中の保留状態の８命令のどれが実行されたかの識別情報が制御ライン532 上に送出されると、その識別情報に基づいて、リタイア制御ユニット500 はバス518 に接続された制御ライン534 上に制御信号を送出して、レジスタ配列472 にストアされた結果データを順序外で実行された命令の先行実行の結果として実効的に確認する。
【０１０７】
リタイア制御ユニット500 は、各命令をリタイアするとき、PCインクリメント／サイズ制御信号を制御ライン344 を経由してIFU 102 へ送る。複数の命令を順序外で実行でき、従って、同時にリタイアする準備状態に置くことができるので、リタイア制御ユニット500 は同時にリタイアされた命令数に基づいてサイズ値を判断する。最後に、IFIFO マスタ・レジスタ224 のすべての命令が実行され、リタイアされた場合は、リタイア制御ユニット500 はIFIFO 読取り制御信号を制御ライン342 を経由してIFU 102 へ送って、IFIFO ユニット264 のシフト・オペレーションを開始することにより、Ｅデコード・ユニット490 に追加の４命令を実行保留命令として与える。
【０１０８】
制御フロー制御ユニット528 は各条件付きブランチ命令の論理的ブランチ結果を検出するという、特定化された機能を備えている。制御フロー制御ユニット528 は現在保留中の条件付きブランチ命令の８ビット・ベクトルIDをＥデコード・ユニット490 から制御ライン510 を経由して受信する。８ビット・ベクトル命令完了制御信号は、同じように完了制御ユニット540 から制御ライン538 を経由して受信される。この完了制御信号によって、制御フロー制御ユニット528 は、条件付きブランチ命令が、条件付き制御フロー状況を判断するのに十分な個所まで完了すると、それを判別することができる。保留中の条件付きブランチ命令の制御フロー状況結果は、その実行時に制御フロー制御ユニット528 によってストアされる。条件付き制御フロー命令の結果を判断するために必要なデータは、レジスタ配列472 内の一時状況レジスタから制御ライン520 を経由して得られる。各条件付き制御フロー命令が実行されると、制御フロー制御ユニットは新しい制御フロー結果信号を制御ライン348 を経由してIFU 102 へ送る。好適実施例では、この制御フロー結果信号は２個の８ビット・ベクトルを含んでおり、このベクトルは、保留されている可能性のある８個の制御フロー命令のそれぞれのビット位置別の状況結果が分かっているかどうか、また、ビット位置の対応づけによって得られる対応する状況結果状態を定義している。
【０１０９】
最後に、完了制御ユニット540 は機能ユニット478o-nの各々のオペレーションに関する実行状況をモニタするためのものである。機能ユニット478o-nのいずれかが命令実行オペレーションの完了を通知すると、完了制御ユニット540 は対応する完了制御信号を制御ライン542 上に送出して、レジスタ改名ユニット496 、命令発行ユニット498 、リタイア制御ユニット500 およびバイパス制御ユニット520 にアラート（警告）する。
【０１１０】
機能ユニット478o-nを並列配列構成にすることにより、IEU 104 の制御の一貫性を向上している。命令を正しく認識して、実行のためのスケジュールするためには、個々の機能ユニット478o-nの特性を命令発行ユニット498 に知らせる必要がある。機能ユニット478o-nは、必要とする機能を実行するために必要な特定制御フロー・オペレーションを判別し、実行することを担当する。従って、命令発行ユニット498 以外は、IEU 制御ユニットには、命令の制御フロー処理を独立して知らせる必要はない。命令発行ユニット498 と機能ユニット478o-nは共同して、残りの制御フロー管理ユニット496 、500 、520 、528 、540 に実行させる機能を必要な制御信号のプロンプトで知らせる。従って、機能ユニット478o-nの特定の制御フロー・オペレーションの変更は、IEU 104 の制御オペレーションに影響しない。さらに、既存の機能ユニット478o-nの機能を強化する場合や、拡張精度浮動小数点乗算ユニットや拡張精度浮動小数点ALU 、高速フーリエ計算機能ユニット、三角関数計算ユニットなどの、別の機能ユニット478o-nを１つまたは２つ以上を追加する場合でも、命令発行ユニット498 を若干変更するだけですむ。必要なる変更を行うには、Ｅデコード・ユニット490 によって隔離された対応する命令フィールドに基づいて、特定の命令を認識し、その命令と必要とする機能ユニット478o-nとを関係づける必要がある。レジスタ・データの選択の制御、データのルーチング、命令完了とリタイアは、機能ユニット478o-nの他の機能ユニットすべてに対して実行される他のすべての命令の処理と矛盾がないようになっている。
A)IEU データ経路の詳細
IEU データ経路の中心となるエレメントはレジスタ・ファイル472 である。しかし、本発明によれば、IEU データ経路内には、個々の機能用に最適化された並列データ経路がいくつか用意されている。主要データ経路は整数と浮動小数点の２つである。各並列データ経路内では、レジスタ・ファイル472 の一部そのデータ経路内で行われるデータ操作をサポートするようになっている。
1)レジスタ・ファイルの詳細
図６（ａ）は、データ経路レジスタ・ファイル550 の好適アーキテクチャの概要図である。データ経路レジスタ・ファイル550 は一時バッファ552 、レジスタ・ファイル配列564 、入力セレクタ559 、および出力セレクタ556 を含んでいる。最終的にレジスタ配列564 へ送られるデータは、統合データ入力バス558'を経由して一時バッファ552 によって最初に受信されるのが代表例である。つまり、データ経路レジスタ・ファイル550 へ送られるデータはすべて入力セレクタ559 によって多重化されて、複数の入力バス55（好ましくは２つの）から入力バス558'上に送出される。制御バス518 上に送出されたレジスタ選択およびイネーブル制御信号は一時バッファ552 内の受信データのレジスタ・ロケーションを選択する。一時バッファにストアされるデータを生成した命令がリタイアされると、再び制御バス518 上に送出された制御信号は一時バッファ552 からレジスタ・ファイル配列564 内の論理的に対応づけられたレジスタへデータ・バス560 を経由してデータを転送することを許可する。しかし、命令がリタイアされる前は、一時バッファ552 にストアされたデータは一時バッファにストアされたデータをデータ・バス560 のバイパス部分を経由して出力データ・セレクタ556 へ送ることにより、後続の命令の実行時に使用することが可能である。制御バス518 経由で送られる制御信号によって制御されるセレクタ556 は、一時バッファ552 のレジスタからのデータとレジスタ・ファイル配列564 のレジスタからのデータのどちらかを選択する。結果のデータはレジスタ・ファイル出力バス564 上に送出される。また、実行中の命令が完了と同時にリタイアされる場合は、つまり、その命令が順序内で実行された場合は、結果データをバイパス延長部分558"を経由して直接にレジスタ配列554 へ送るように指示することができる。
【０１１１】
本発明の好適実施例によれば、各データ経路レジスタ・ファイル550 は２つのレジスタ操作を同時に行えるようになっている。従って、入力バス558 を通して２つの全レジスタ幅データ値を一時バッファ552 に書き込むことができる。内部的には、一時バッファ552 はマルチプレクサ配列になっているので、入力データを一時バッファ552 内の任意の２レジスタへ同時に送ることができる。同様に、内部マルチプレクサにより一時バッファ552 の任意の５レジスタを選択して、データをバス560 上に出力することができる。レジスタ・ファイル配列564 は同じように入出力マルチプレクサを備えているので、２つのレジスタを選択して、それぞれのデータを同時にバス560 から受信することも、５つのレジスタを選択してバス562 経由で送ることもできる。最後に、レジスタ・ファイル出力セレクタ556 は、バス560 、562 から受信した10レジスタ・データ値のうち任意の５つがレジスタ・ファイル出力バス564 上に同時に出力されるように実現するのが好ましい。
【０１１２】
一時バッファ内のレジスタ・セットは図６（ｂ）にその概要が示されている。レジスタ・セット552'は８このシングル・ワード（32ビット) レジスタI0RD、I1RD...I7RD から構成されている。レジスタ・セット552'は４個のダブル・ワード・レジスタI0RD、I0RD+1(I0RD4) 、I1RD、I1RD+1(ISRD)...I3RD 、I3RD+1(I7RD)のセットとして使用することも可能である。
【０１１３】
本発明の好適実施例によれば、レジスタ・ファイル配列564 内の各レジスタを重複して設ける代わりに、一時バッファ・レジスタ・セット552 内のレジスタは２個のIFIFO マスタ・レジスタ216 、224 内のそれぞれの命令の相対ロケーションに基づいて、レジスタ改名ユニット496 によって参照される。本アーキテクチャ100 で実現される各命令は、最高２つまでのレジスタまたは１つのダブル・ワード・レジスタを出力として参照して、命令の実行によって生成されたデータの宛先とすることができる。代表例として、命令は１つの出力レジスタだけを参照する。従って、その位置を図６（ｃ）に示しているように、８個の保留中命令のうち１つの出力レジスタを参照する命令２（I2) の場合は、データ宛先レジスタI2RDが選択されて、命令の実行によって生成されたデータを受け入れる。命令I2によって生成されたデータが後続の命令、例えば、I5によって使用される場合は、I2RDレジスタにストアされたデータはバス560 を経由して転送され、結果のデータは一時バッファ552 に送り返されて、I5RDで示したレジスタにストアされる。特に、命令I5は命令I2によって決まるので、命令I5は、I2からの結果データが得られるまでは実行することができない。しかし、理解されるように、命令I5は、必要とする入力データを一時バッファ552'の命令I2のデータ・ロケーションから得れば、命令I2のリタイア前に実行することが可能である。
【０１１４】
最後に、命令I2がリタイアされると、レジスタI2RDからのデータは、リタイア個所の命令の論理位置から判断されて、レジスタ・ファイル配列564 ないのレジスタ・ロケーションに書かれる。すなわち、リタイア制御ユニット560 は、制御ライン510 経由でＥデコード・ユニット490 から与えれたレジスタ参照フィールド・データからレジスタ・ファイル配列内の宛先レジスタのアドレスを判断する。命令I0-3がリタイアされると、I4RD-I7RD に入っている値は、IFIFO ユニット264 のシフトと同時にシフトされて、I0RD-I3RD に移される。
【０１１５】
命令I2からダブル・ワード結果値が得られる場合は、さらに複雑になる。本発明の好適実施例によれば、ロケーションI2RDとI6RDの組合せが、命令I2がリタイアされるか、さもなければキャンセルまで、その命令から得た結果データをストアしておくために使用される。好適実施例では、命令Ｉ4+7 の実行は、命令I0-3のいずれかによるダブル・ワード出力の参照がレジスタ改名ユニット496 によって検出された場合には、保留される。これにより、一時バッファ552'全体をダブル・ワード・レジスタのシングル・ランクとして使用することが可能になる。命令I0-3がリタイアされると、一時バッファ552'はシングル・ワード・レジスタの２ランクとして再び使用することができる。さらに、いずれかの命令Ｉ4+7 の実行は、ダブル・ワード出力レジスタが必要な場合には、命令が対応するI0-3にシフトされるまで保留される。
【０１１６】
レジスタ・ファイル配列564 の論理的編成は図７（ａ）〜図７（ｂ）に示されている。本発明の好適実施例によれば、整数データ経路用のレジスタ・ファイル配列564 は40個の32ビット幅レジスタから構成されている。このレジスタ・セットはレジスタ・セット"A" を構成し、ベース・レジスタ・セットre[0..23]565、汎用レジスタre[24..31]566 からなるトップ・セット、および８個の汎用トラップ・レジスタre[24..31]からなるシャドウ・レジスタ・セットとして編成されている。通常のオペレーションでは、汎用レジスタre[0..31]565、566 は整数データ経路用のレジスタ・ファイル配列のアクティブ"A" レジスタ・セットを構成している。
【０１１７】
図７（ｂ）に示すように、トラップ・レジスタ re[24..31]567をスワップしたアクティブ・レジスタ・セット"A" に移しておけば、レジスタre[0..23] 565 のアクティブ・ベース・セットを一緒にアクセスすることが可能である。"A" レジスタ・セットのこの構成は、割込みの受信が確認されるか、例外トラップ処理ルーチンが実行されると、選択される。レジスタ・セット"A" のこの状態は、割込み許可命令の実行またはトラップからのリターン命令に実行によって図７（ａ）に示す状態に明示によって戻るまで維持される。
【０１１８】
アーキテクチャ100 によって実現された本発明の好適実施例では、浮動小数点データ経路は図８にその概要を示すように拡張精度レジスタ・ファイル配列572 を使用する。レジスタ・ファイル配列572 は、各々が64ビット幅の32個のレジスタrf[0..31]5から構成されている。浮動小数点レジスタ・ファイル572 は整数レジスタrb[0..31]5の"B" セットとして論理的に参照することの可能である。アーキテクチャ100 では、この"B" セットのレジスタは浮動小数点レジスタrf[0..31] の各々の下位32ビットに相当している。
【０１１９】
第３のデータ経路を表すものとして、ブール演算子レジスタ・セット574 が図９に示すように設けられている。これは、ブール演算の論理結果をストアする。この"C" レジスタ・セット574 は32個の１ビット・レジスタrc[0..31] から構成されている。ブール・レジスタ・セット574 のオペレーションは、ブール演算の結果をブール・レジスタ・セット574 の任意の命令選択レジスタへ送ることができる点でユニークである。これは、等しい、等しくない、より大、その他単純なブール状況値などの条件を表す１ビット・フラグをストアするシングル・プロセッサ状況ワード・レジスタを使用するのと対照的である。
【０１２０】
浮動小数点レジスタ・セット572 とブール・レジスタ・セット574 は、双方共、図６（ｂ）に示す整数一時バッファ552 と同じアーキテクチャの一時バッファによって補数がとられる。基本的違いは、一時バッファ・レジスタの幅が補数をとるレジスタ・ファイル配列572 、574 の幅と同じなるように定義されていることである。好適実施例では、幅はそれぞれ64ビットと１ビットになっている。
【０１２１】
多数の追加の特殊レジスタが、レジスタ配列472 に少なくとも論理的に存在している。図７（ｃ）に示すように、レジスタ配列472 に物理的に存在するレジスタはカーネル・スタック・ポインタ(Kernel stack pointer)568 、プロセッサ状態レジスタ(PSR)569、旧プロセッサ状態レジスタ（PPSR)570および８個の一時プロセッサ状態レジスタの配列(tPSR[0..7])571 からなっている。残りの特殊レジスタはアーキテクチャ100 の各所に分散している。特殊アドレスおよびデータ・バス354 はデータを選択して、特殊レジスタおよび"A" と"B" レジスタ・セット間で転送するためのものである。特殊レジスタ移動命令は"A" または"B" レジスタ・セットからレジスタを選択し、転送の方向を選択し、特殊レジスタのアドレスIDを指定するためのものである。
【０１２２】
カーネル・スタック・ポインタ・レジスタとプロセッサ状態レジスタは、他の特殊レジスタとは異なっている。カーネル・スタック・ポインタは、カーネル状態にあるとき、標準のレジスタ間移動命令を実行することによってアクセス可能である。一時プロセッサ状態レジスタは直接にアクセスすることはできない。その代わりに、そのレジスタ配列はプロセッサ状態レジスタの値を伝播して、順序外で実行される命令で使用できるようにする継承メカニズム(inheritance  mechanism)を現実するために使用される。初期伝播値はプロセッサ状態レジスタの値である。つまり、最後にリタイアされた命令から得た値である。この初期値は一時プロセッサ状態レジスタから全方向に伝播され、順序外で実行される命令が対応する位置にある一時プロセッサ状態レジスタ内の値をアクセスできるようにする。命令が依存し、変更できる条件コード・ビットは、その命令がもつ特性によって定義される。命令が依存関係、レジスタはたは条件コードによって制約されないことが、レジスタ依存関係チェッカ・ユニット494 とキャリー依存関係チェッカ492 によって判断された場合は、命令は順序外で実行することができる。
プロセッサ状態レジスタの条件コード・ビットの変更は論理的に対応する一時プロセッサ状態レジスタに指示される。具体的には、変更の可能性があるビットだけが一時プロセッサ状態レジスタに入っている値に適用され、上位のすべての一時プロセッサ状態レジスタに伝播される。その結果、順序外で実行されるすべての命令は介在するPSR 変更命令によって適切に変更されたプロセッサ状態レジスタ値から実行される。命令がリタイアされたときは、対応する一時プロセッサ状態レジスタ値だけがPSR レジスタ569 に転送される。
その他の特殊レジスタは表ＩＩに説明されている。
【０１２３】
表ＩＩ
───────────────────────────────────
特殊レジスタ
特殊移動
レジスタ      Ｒ／Ｗ        説明
ＰＣ          Ｒ            プログラム・カウンタ：一般的にはＰＣは現在実
行中のプログラム命令ストリームの次のアドレス
を格納している。
ＩＦ  ＰＣ    Ｒ／Ｗ        ＩＦＵプログラム・カウンタ：
ＩＦ  ＰＣは正確な次の実行アドレスを格納して
いる。
ＰＦｎＰＣ    Ｒ            プリフェッチ・プログラム・カウンタ：ＭＢＵＦ
、ＴＢＵＦおよびＥＢＵＦ  ＰＦｎＰＣはそれぞ
れのプリフェッチ命令ストリームの次のプリフェ
ッチ命令アドレスを格納している。
ｕＰＣ        Ｒ／Ｗ        マイクロ・プログラム・カウンタ：プロシージャ
命令のあとに続く命令のアドレスを格納している
。これはプロシージャ命令がリターンしたとき最
初に実行される命令のアドレスである。
ｘＰＣ        Ｒ／Ｗ        割り込み／例外プログラム・カウンタ：割り込み
または例外（または両方）のリターン・アドレス
を格納している。リターン・アドレスはトラップ
発生時のＩＦ  ＰＣアドレスである。
ＴＢＲ        Ｗ            トラップ・ベース・アドレス：トラップ処理ルー
チンへディスパッチするとき使用されるベクトル
・テーブルのベース・アドレス。各エントリは１
ワード長である。割り込みロジック・ユニット３
６３から与えられるトラップ番号は、このアドレ
スが指しているテーブルまでのインデックスとし
て使用される。
ＦＴＢ        Ｗ            高速トラップ・ベース・レジスタ：即時トラップ
処理ルーチン・テーブルのベース・レジスタ。各
テーブル・エントリは３２ワードであり、トラッ
プ処理ルーチンを直接に実行するために使用され
る。割り込みロジック・ユニット３６３から与え
られるトラップ番号を３２倍したものは、このア
ドレスが指しているテーブルまでのオフセットと
して使用される。
ＰＢＲ        Ｗ            プロシージャ・ベース・レジスタ：プロシージャ
・ルーチンへディスパッチするとき使用されるベ
クトル・テーブルのベース・アドレス。各エント
リは１ワード長であり、４ワード境界に位置合わ
せされている。プロシージャ命令フィールドとし
て与えられるプロシージャ番号はこのアドレスが
指しているテーブルまでのインデックスとして使
用される。
ＰＳＲ        Ｒ／Ｗ        プロセッサ状態レジスタ：プロセッサ状況ワード
を格納している。状況データ・ビットは、キャリ
ー、オーバーフロー、ゼロ、負、プロセッサ・モ
ード、現割り込みレベル、実行中のプロシージャ
・ルーチン、０による除算、オーバフロー例外、
ハードウェア機能割り込み可能、プロシージャ割
り込み可能、割り込み可能などのビットがある。
ＰＰＳＲ      Ｒ／Ｗ        旧プロセッサ状態レジスタ：命令が正しく完了す
るか、割り込みまたはトラップが引き起こされる
と、ＰＳＲからロードされる。
ＣＳＲ        Ｒ／Ｗ        状態比較（ブール）レジスタ：シングル・ワード
としてアクセス可能なブール・レジスタ・セット
。
ＰＣＳＲ      Ｒ／Ｗ        旧状態比較レジスタ：命令が正しく完了するか、
割り込みまたはトラップが引き起こされると、Ｃ
ＳＲからロードされる。
2)整数データ経路の詳細
本発明の好適実施例にしたがって構成されるIEU 104 の整数データ経路は図１０に示されている。説明の便宣上、整数データ経路580 と結ばれる多数の制御経路は図には示していない。これらの接続関係は図５を参照して説明したとおりである。
【０１２４】
データ経路580 の入力データは位置合わせユニット582 、584 および整数ロード／ストア・ユニット586 から得られる。整数即値(inteer immediate)データ値は、最初は命令埋込み(embedded)データ・フィールドとして与えられ、バス588 経由でオペランド・ユニット470 から得られる。位置合わせユニット582 は整数データ値を隔離し、その結果値を出力バス590 を経由してマルチプレクサ592 へ送られる。マルチプレクサ592 への別の入力は特殊レジスタ・アドレスとデータ・バス354 である。
【０１２５】
命令ストリームから得られる即値(immediate) オペランドも、データ・バス594 経由でオペランド・ユニット570 から得られる。これらの値は、出力バス596 上に送出される前に、位置合わせユニット584 によって再度右寄せされる。
【０１２６】
整数ロード／ストア・ユニット586 は外部データ・バス598 を通してCCU 106 と双方向でやりとりする。IEU 104 へのインバウンド・データは整数ロード／ストア・ユニット586 から入力データ・バス600 を経由して入力ラッチ602 へ転送される。マルチプレクサ592 とラッチ602 からの出力データは、マルチプレクサ608 のマルチプレクサ入力バス604 、606 上に送出される。機能ユニット出力バス482'からのデータもマルチプレクサ608 に送られる。このマルチプレクサ608 はアーキテクチャ100 の好適実施例では、データを同時に出力マルチプレクサ・バス610 へ送る２つの経路を備えている。されに、マルチプレクサ608 を通るデータ転送は、システム・クロックの各半サイクル以内に完了することができる。本アーキテクチャ100 で実現される大部分の命令は、１つの宛先レジスタを利用するので、最大４つまでの命令によって各システム・クロック・サイクルの間データを一時バッファ612 へ送ることができる。
【０１２７】
一時バッファ612 からのデータは一時レジスタ出力バス616 を経由して整数レジスタ・ファイル配列614 へ、あるいは代替一時バッファ・レジスタ・バス618 を経由して出力マルチプレクサ620 ヘ転送することができる。整数レジスタ配列出力バス622 は整数レジスタ・データをマルチプレクサ620 へ転送することができる。一時バッファ612 と整数レジスタ・ファイル配列614 に接続された出力バスは、それぞれ５個のレジスタ値を同時に出力することを可能にする。つまり、合計５個までのソース・レジスタを参照する２つの命令を同時に出すことができる。一時バッファ612 、レジスタ・ファイル配列614 およびマルチプレクサ620 は、アウトバウンド・レジスタ・データの転送を半システム・クロック・サイクルごとに行うことを可能にする。従って、最高４個までの整数および浮動少数点命令を各クロック・サイクルの間に出すことができる。
【０１２８】
マルチプレクサ620 はアウトバウンド・レジスタ・データ値をレジスタ・ファイル配列614 から、あるいは一時バッファ612 から直接に選択する働きをする。これにより、以前に順序外で実行された命令に依存する順序外実行命令をIEU 104 によって実行させることができる。これにより、保留状態の命令を順序外で実行することによってIEU 整数データ経路の実行スループット能力を最大化すると共に、順序外のデータ結果を、実行されリタイアされた命令から得たデータ結果から正確に分離するという２目標を容易に達成することができる。マシンの正確な状態を復元する必要のあるような割込みや他の例外条件が起こると、本発明によれば、一時バッファ612 に存在するデータ値を簡単にクリアすることができる。従って、レジスタ・ファイル配列614 は、割込みまたは他の例外条件が発生する以前に完了し、リタイアされた命令の実行によってのみ得られたデータ値を正確に収めたままになっている。
【０１２９】
マルチプレクサ620 の各半システム・サイクル・オペレーション時に選択されたレジスタ・データ値は最高５つまでがマルチプレクサ出力バス624 を経由して整数バイパス・ユニット626 へ送られる。このバイパス・ユニット626 は、基本的に、マルチプレクサが並列の配列からなり、その入力いずれかに現れたデータをその出力のいずれかへ送ることができる。バイパス・ユニット626 の入力は、マルチプレクサ592 から出力バス604 を経由する特殊レジスタ・アドレス指定データ値または即値の整数値、バス624 上に送出される最高５つまでのレジスタ・データ値、整数ロード／ストア・ユニット586 からダブル整数バス600 を経由するロード・オペランド・データ、その出力バス596 を経由して位置合わせユニット584 から得た即値オベランド値、最後に、機能ユニット出力バス482 からのバイパス・データ経路からなっている。このバイパス経路とデータ・バス482 はシステム・クロック・サイクルごとに４個のレジスタ値を同時に転送することができる。
【０１３０】
データはバイパス・ユニット626 から浮動小数点データ・バスに接続された整数バイパス・バス628 上に出力されて、最高５つまでのレジスタ・データ値を同時に転送する機能をもつ２つのオペランド・データ・バスと、整数ロード／ストア・ユニット586 へデータを送るために使用されるストア・データ・バス632 へ送られる。
【０１３１】
機能ユニット分配バス480 はルータ・ユニット634 のオペレーションを通して実現されている。また、ルータ・ユニット634 はその入力から受信された５個のレジスタ値を整数データ経路に設けられた機能ユニットへ送ることを可能にする並列のマルチプレクサ配列によって実現される。具体的には、ルータ・ユニット634 はバイパス・ユニット626 からバス630 を経由して送られてきた５個のレジスタ・データ値、アドレス・バス352 を経由して送られてきた現IF  PCアドレス値、PC制御ユニット362 によって判断され、ライン378'上に送出された制御フロー・オフセット値を受信する。ルータ・ユニット634 は、浮動小数点データ経路内に設けられたバイパス・ユニットからとり出されたオペランド・データ値をデータ・バス636 を経由して受信することもできる（オプション）。
【０１３２】
ルータ・ユニット634 によって受信されたレジスタ・データ値は、特殊レジスタ・アドレスおよびデータ・バス354 上を転送されて、機能ユニット640 、642 、644 へ送られる。具体的には、ルータ・ユニット634 は最高３つまでのレジスタ・オペランド値をルータ出力バス646 、648 、640 を経由して機能ユニット640 、642 、644 の各々へ送る機能を備えている。本アーキテクチャ100 の一般的アーキテクチャによれは、最高２つまでの命令を同時に機能ユニット640 、642 、644 に対して出すことが可能である。本発明の好適実施例によれば、３つの専用整数機能ユニットに、それぞれプログラマブル・シフト機能と２つの算術演算ロジック・ユニット機能をもたせることができる。
【０１３３】
ALU0機能ユニット644 、ALU1機能ユニット642 およびシフタ機能ユニット640 はそれぞれの出力レジスタ・出力を機能ユニット・バス482'上に送出する。ALU0とシフタ機能ユニット644 、640 から得た出力データも浮動小数点データ経路に接続された共用整数機能ユニット・バス650 上に送出される。類似の浮動小数点機能ユニット出力値データ・バス652 が浮動小数点データ経路から機能ユニット出力バス482'へ設けられている。
【０１３４】
ALU0機能ユニット644 はIFU 102 のプリフェッチ操作と整数ロード／ストア・ユニット586 のデータ操作の両方をサポートするために仮想アドレス値を生成する場合にも使用される。ALU0機能ユニット644 によって計算された仮想アドレス値はIFU 102 のターゲット・アドレス・バス346 とCCU 106 の両方に接続された出力バス654 上に送出され、実行ユニットの物理アドレス(EX PADDR)が得られる。ラッチ646 は、ALU0機能ユニット644 によって生成されたアドレスの仮想化部分をストアするためのものである。アドレスのこの仮想化部分は出力バス658 上に送出されて、VMU 108 へ送られる。
3)浮動小数点データ経路の詳細
次に、図１１は浮動小数点データ経路を示したものである。初期データは、この場合も、即値整数オペランド・バス588 、即値オペランド・バス594 および特殊レジスタ・アドレス・データ・バス354 を含む、複数のソースから受信される。外部データの最終的ソースは外部データ・バス598 を通してCCU 106 に接続された浮動小数点ロード／ストア・ユニット622 である。
【０１３５】
即値整数オペランドは、位置合わせ出力データ・バス668 を経由してマルチプレクサ666 に渡す前に整数データ・フィールドを右寄せする働きをする位置合わせユニット664 によって受信される。マルチプレクサ666 は特殊レジスタ・アドレス・データ・バス354 も受信する。即値オペランドは第２の位置合わせユニット670 へ送られ、右寄せされてから出力バス672 上に送出される。浮動小数点ロード／ストア・ユニット662 からのインバウンド・データ(inbound data)は、ロード・データ・バス676 からラッチ674 によって受信される。マルチプレクサ666 、ラッチ674 および機能ユニット・データ・リターン・バス482"からのデータはマルチプレクサ678 の入力から受信される。マルチプレクサ678 は選択可能なデータ経路を備え、２つのレジスタ・データ値がシステム・クロックの半サイクルごとに、マルチプレクサ出力バス682 を経由して一時バッファ680 に書き込まれることを可能にする。一時バッファ680 は図６（ｂ）に示す一時バッファ552'と論理的に同じレジスタ・セットを備えている。一時バッファ680 はさらに、最高５個までのレジスタ・データ値を一時バッファ680 から読み取って、データ・バス686 を経由して浮動小数点レジスタ・ファイル配列684 と、出力データ・バス690 を経由して出力マルチプレクサ688 へ送ることができる。マルチプレクサ688 は、データ・バス692 を経由して、浮動小数点ファイル配列684 から最高５個までのレジスタ・データ値も同時に受信する。マルチプレクサ688 は最高５個までのレジスタ・データ値を選択して、データ・バス696 を経由してバイパス・ユニット694 へ同時に転送する働きをする。バイパス・ユニット694 は、データ・バス672 、マルチプレクサ666 からの出力データ・バス698 、ロード・データ・バス676 および機能ユニット・データ・リターン・バス482"のバイパス延長部分を経由して、位置合わせユニット670 から与えられた即値オペランド値も受信する。バイパス・ユニット694 は最高５個までのレジスタ・オペランド・データ値を同時に選択して、バイパス・ユニット出力バス700 、浮動小数点ロード／ストア・ユニット662 に接続されたストア・データ・バス702 、および整数データ経路580 のルータ・ユニット634 に接続された浮動小数点バイパス・バス636 に出力するように動く。
【０１３６】
浮動小数点ルータ・ユニット704 は、バイパス・ユニット出力バス700 と整数データ経路バイパス・バス628 とそれぞれの機能ユニット712 、714 、716 に接続された機能ユニット入力バス706 、708 、710 との間で同時にデータ経路を選択できる機能を備えている。
アーキテクチャ100 の好適実施例による入力バス706 、708 、710 の各々は、最高３個までのレジスタ・オペランド・データ値を機能ユニット712 、714 、716 の各々へ同時に転送することが可能である。これらの機能ユニット712 、714 、716 の出力バスは機能ユニット・データ・リターン・バス482"に結合され、データをレジスタ・ファイル入力マルチプレクサ678 へ戻すようになっている。整数データ経路機能ユニット出力バス650 を、機能ユニット・データ・リターン・バス482"に接続するために設けることも可能である。本発明のアーキテクチャ100 によれば、マルチプレクサ機能ユニット712 とファイルALU 714 の機能ユニット出力バスを浮動小数点データ経路機能ユニット・バス652 を経由して整数データ経路500 の機能ユニット・データ・リターン・バス482'に接続することが可能である。
4)ブール・レジスタ・データ経路の詳細
ブール演算データ経路720 は図１２に示されている。このデータ経路720 は基本的に２種類の命令の実行をサポートするために利用される。最初のタイプは、オペランド比較命令であり、この命令では、整数レジスタ・セットと浮動小数点レジスタ・セットから選択された、あるいは即値オペランドとして与えられた２つのオペランドが、ALU 機能ユニットの１つで整数と浮動小数点データ経路を減算することによって比較される。この比較は、ALU 機能ユニット642 、644 、714 、716 のいずかによる減算によって行われ、その結果の符号とゼロ状況ビットは入力セレクタと比較演算子結合ユニット722 へ送られる。このユニット722 は、制御信号を指定した命令をＥデコード・ユニット490 から受け取ると、ALU 機能ユニット642 、644 、714 、716 の出力を選択し、符号およびゼロ・ビットを結合し、ブール比較結果値を抽出する。出力バス723 を通して比較演算の結果を入力マルチプレクサ726 とバイパス・ユニット742 へ同時に転送することができる。整数および浮動小数点データ経路と同じように、バイパス・ユニット742 は並列のマルチプレクサ配列として実現され、バイパス・ユニット742 の入力間で複数のデータ経路を選択して、複数の出力と結ぶことができる。バイパス・ユニット742 の他の入力はブール演算結果リターン・データ・バス724 とデータ・バス744 上の２つのブール・オペランドからなっている。バイパス・ユニット742 は、最高２つまでの同時に実行中のブール命令を表したブール・オペランドを、オペランド・バス748 を経由してブール演算機能ユニット746 へ転送することができる。また、バイパス・ユニット746 は最高２個までのシングル・ビット・ブール・オペランド・ビット(CF0、CF1)を制御フロー結果制御ライン750 、752 を経由して同時に転送することができる。
【０１３７】
ブール演算データ経路の残り部分は、比較結果バス723 とブール結果バス724 上に送出された比較およびブール演算結果値を、その入力として受信する入力マルチプレクサ726 を含んでいる。このバス724 は最高２個までのブール結果ビットを同時にマルチプレクサ726 へ転送することができる。さらに、最高２個までの比較結果ビットをバス724 を経由してマルチプレクサ726 へ転送することができる。マルチプレクサ726 はマルチプレクサの入力端に現れた任意の２個の信号ビットをマルチプレクサの出力端を経由して、システム・クロックの各半サイクル時にブール演算一時バッファ728 へ転送することができる。一時バッファ728 は、２つの重要な点が異なることを除けば、図６（ｂ）に示した一時バッファ752'と論理的に同じである。第１の相違点は、一時バッファ728 内の各レジスタ・エントリがシングル・ビットからなることである。第２の相違点は、８個の保留中命令スロットの各々に１つのレジスタだけが設けられていることである。これは、ブール演算の結果全部が定義によって１つの結果ビットによって定義されるためである。
【０１３８】
一時バッファ728 は最高４個までの出力オペランド値を同時に出力する。これにより、各々２つのソース・レジスタへのアクセスを必要とする２個のブール命令を同時に実行させることができる。４個のブール・レジスタ値はシステム・クロックの各半サイクルことにオペランド・バス736 上に送出し、マルチプレクサ738 へあるいはブール・オペランド・データ・バス734 を経由してブール・レジスタ・ファイル配列732 へ転送することができる。ブール・レジスタ・ファイル配列732 は、図９に論理的に示すように、１個の32ビット幅データ・レジスタであり、任意に組み合わせた最高４個までのシングル・ビット・ロケーションを、一時バッファ728 からのデータで修正し、システム・クロックの各半サイクルごとにブール・レジスタ・ファイル配列732 から読み取って出力バス740 上に送出することができる。マルチプレクサ738 はバス736 、740 経由でその出力端から受信したブール・オペランドの任意のペアを、オペランド出力バス744 上に送出してバイパス・ユニット742 へ転送する。
【０１３９】
ブール演算機能ユニット746 は２個のソース値についてブール演算を幅広く実行する機能を備えている。比較命令の場合には、ソース値は整数および浮動小数点レジスタ・セットのいずれかから得たペアのオペランドとIEU 104 へ送られる任意の即値オペランドであり、ブール命令の場合は、ブール・レジスタ・オペランドの任意の２つである。表III と表IVは、本発明のアーキテクチャ100 の好適実施例における論理比較演算を示すものである。表Ｖは本発明のアーキテクチャ100 の好適実施例における直接ブール演算を示すものである。表III-Ｖに示されている命令条件コードと機能コードは対応する命令のセグメントを表している。また、命令はペアのソース・オペランド・レジスタと、対応するブール演算結果をストアするための宛先ブール・レジスタを指定する。
【０１４０】
表ＩＩＩ                                    
───────────────────────────────────
整数の比較
命令
条件*                             記号      条件コード
ｒｓ１はｒｓ２より大              ＞          ００００
ｒｓ１はｒｓ２より大か等しい      ＞＝        ０００１
ｒｓ１はｒｓ２より小              ＜          ００１０
ｒｓ１はｒｓ２より小か等しい      ＜＝        ００１１
ｒｓ１はｒｓ２と等しくない        ≠          ０１００
ｒｓ１はｒｓ２と等しい            ＝＝        ０１０１
予備                                          ０１１０
無条件                                        １１１１
───────────────────────────────────
*ｒｓ＝レジスタ・ソース
表ＩＶ
───────────────────────────────────
浮動小数点の比較
命令
条件                                  記号      条件コード
ｒｓ１はｒｓ２より大                  ＞          ００００
ｒｓ１はｒｓ２より大か等しい          ＞＝        ０００１
ｒｓ１はｒｓ２より小                  ＜          ００１０
ｒｓ１はｒｓ２より小か等しい          ＜＝        ００１１
ｒｓ１はｒｓ２と等しくない            ≠          ０１００
ｒｓ１はｒｓ２と等しい                ＝＝        ０１０１
無順序                                ？          １０００
無順序またはｒｓ１はｒｓ２より大      ？＞        １００１
無順序、ｒｓ１はｒｓ２より大か等しい  ？＞＝      １０１０
無順序またはｒｓ１はｒｓ２より小      ？＜        １０１１
無順序、ｒｓ１はｒｓ２より小か等しい  ？＜＝      １１００
無順序またはｒｓ１はｒｓ２と等しい    ？＝        １１０１
予備                                        １１１０−１１１１
───────────────────────────────────
表Ｖ                              
───────────────────────────────────
ブール演算
命令
演算＊                        記号      機能コード
０                          Ｚｅｒｏ      ００００
ｂｓ１＆ｂｓ２              ＡＮＤ        ０００１
ｂｓ１＆−ｂｓ２            ＡＮＮ２      ００１０
ｂｓ１                      ｂｓ１        ００１１
−ｂｓ１＆ｂｓ２            ＡＮＮ１      ０１００
ｂｓ２                      ｂｓ２        ０１０１
ｂｓ１- ｂｓ２              ＸＯＲ        ０１１０
ｂｓ１    ｂｓ２            ＯＲ          ０１１１
−ｂｓ１＆−ｂｓ２          ＮＯＲ        １０００
−ｂｓ１- ｂｓ２            ＸＮＯＲ      １００１
−ｂｓ２                    ＮＯＴ２      １０１０
ｂｓ１  −ｂｓ２            ＯＲＮ２      １０１１
−ｂｓ１                    ＮＯＴ１      １１００
−ｂｓ１  ｂｓ２            ＯＲＮ１      １１０１
−ｂｓ１  −ｂｓ２          ＮＡＮＤ      １１１０
１                          ＯＮＥ        １１１１
───────────────────────────────────
＊ｂｓ＝ブール・ソース・レジスタ
B)  ロード／ストア・制御ユニット
図１３はロード／ストア・ユニット760 の例を示したものである。データ経路580 、660 に別々に示されているが、ロード／ストア・ユニット586 、662 は１つの共用ロード／ストア・ユニット760 として実現するのが好ましい。それぞれのデータ経路580 、660 からのインタフェースはアドレス・バス762 およびロードとストア・データ・バス764(600 、676)、766(632 、702)を経由している。
【０１４１】
ロード／ストア・ユニット760 によって使用されるアドレスは、IFU 102 およびIEU 104 の残り部分で使用される仮想アドレスとは対照的に、物理アドレスである。IFU 102 は仮想IFU 102 で動作し、CCU 106 とVMU 108 間の調整に依存して物理アドレスを生成するのに対し、IEU 104 ではロード／ストア・ユニット760 を物理アドレス・モードで直接に動作させる必要がある。この要件が必要になるのは、順序外で実行されるために、物理アドレス・データをストア・オペレーションがオーバラップするような命令が存在する場合、およびCCU 106 からロード／ストア・ユニット760 への順序外のデータ・リターンが存在する場合に、データ保全性を保つためである。データ保全性を保つために、ロード／ストア・ユニット760 はストア命令がIEU 104 によってリタイアされるまで、ストア命令から得たデータをバッファに置いておく。その結果、ロード／ストア・ユニット760 によってバッファに置かれたストア・データはロード／ストア・ユニット760 に１つだけ存在することができる。実行されたがリタイアされていないストア命令と同じ物理アドレスを参照するロード命令は、ストア命令が実際にリタイアされるまで実行が遅延される。その時点で、ストア・データをロード／ストア・ユニット760 からCCU 106 へ転送し、CCU データ・ロード・オペレーションの実行によって即時にロード・バックすることができる。
【０１４２】
具体的には、物理アドレス全体がUMU 108 からロード／ストア・アドレス・バス762 上に送出される。ロード・アドレスは、一般的には、ロード・アドレス・レジスタ7680-3にストアされる。ストア・アドレスはストア・アドレス・レジスタ7703-0にラッチされる。ロード／ストア制御ユニット774 は命令発行ユニット498 から受信した制御信号を受けて作動し、ロード・アドレスとストア・アドレスをレジスタ7683-0、7703-0にラッチすることを調整する。ロード／ストア制御ユニット774 はロード・アドレスをラッチするための制御信号を制御ライン778 上に送出し、ストア・アドレスをラッチするための制御信号を制御ライン780 上に送出する。ストア・データはストア・データ・レジスタ・セット7823-0の論理的に対応するスロットにストア・アドレスをラッチするのと同時にラッチされる。4x4x32ビット幅アドレス比較ユニット772 には、ロードおよびストア・アドレス・レジスタ7683-0、7703-0に入っているアドレスの各々が同時に力される。システム・クロックの各半サイクル時の完全マトリックス・アドレス比較の実行は、制御ライン776 を介してロード／ストア制御ユニット774 によって制御される。ストア・アドレスに一致するロード・アドレスの存在と論理ロケーションは、制御ライン776 を経由してロード／ストア制御ユニット774 へ送られる。
【０１４３】
ロード・アドレスがVMU 108 から与えられ、保留中のストアがない場合は、ロード・アドレスは、CCU ロード・オペレーションの開始と同時に、バス762 から直接にアドレス・セレクタ786 へバイパスされる。しかし、ストア・データが保留されている場合は、ロード・アドレスは使用可能なロード・アドレス・ラッチ7680-3にラッチされる。対応するストア・データ命令がリタイアされるとの制御信号をリタイア制御ユニット500 から受信すると、ロード／ストア制御ユニット774 はCCU データ転送操作を開始し、制御ライン784 を通してCCU 106 へのアクセスの仲裁を行う。CCU 106 がレディ(ready) を通知すると、ロード／ストア制御ユニット774 はCCU 物理アドレスをCCU PADDR アドレス・バス788 上に送出するようにセレクタ786 に指示する。このアドレスはアドレス・バス790 を経由して対応するストア・レジスタ7703-0から得られる。対応するストア・データ・レジスタ7823-0からのデータはCCU データ・バス792 上に送出される。
【０１４４】
ロード命令が命令発行ユニット498 から出されると、ロード／ストア制御ユニット774 はロード・アドレス・ラッチ7683-0の１つが要求されたロード・アドレスをラッチすることを許可する。選択された特定のラッチ7680-3は関係命令セット内のロード命令の位置に論理的に対応している。命令発行ユニット498 は保留中の可能性のある２命令セットのどちらかの中のロード命令を示している５ビット・ベクトルをロード／ストア制御ユニット774 へ渡す。コンパレータ772 が一致するストア・アドレスを示していない場合は、ロード・アドレスはアドレス・バス794 を経由してセレクタ786 へ送られ、CCU PADRアドレス・バス788 上に出力される。アドレスの提供は、ロード／ストア制御ユニット774 とCCU 106 間でやりとれされるCCU 要求とレディ制御信号に従って行われる。実行ID値(ExID 値) もロード／ストア制御ユニット774 によって準備されてCCU 106 に対して出され、CCU 106 がExID値を含む要求データをそのあとで返却するときロード要求を識別する。このID値は４ビット・ベクトルからなり、現ロード要求を出したそれぞれのロード・アドレス・ラッチ7680-3を固有ビットで指定している。５番目のビットはロード命令を収めている命令セットを識別するために使用される。このID値は、従って、命令発行ユニット498 からロード要求と一緒に送られるビット・ベクトルと同じである。
【０１４５】
先行する要求ロード・データが使用可能であることがCCU 106 からロード／ストア制御ユニット774 へ通知されると、ロード／ストア制御ユニット774 は、位置合わせユニットがデータ受信し、それをロード・データ・バス764 上に送出することを許可する。位置合わせユニット798 はロード・データを右寄せする働きをする。
【０１４６】
CCU 106 からデータが返却されると同時に、ロード／ストア制御ユニット774 はCCU 106 からExID値を受信する。他方、ロード／ストア制御ユニット774 はロード・データがロード・データ・バス764 上に送出されることを知らせる制御信号を命令発行ユニット498 へ送り、さらに、どのロード命令に対してロード・データが返却されるのかを示したビット・ベクトルを返却する。
C)IEU 制御経路の詳細
再び図５を参照して、IEU 制御経路のオペレーションを、図１４に示したタイミング図と関連づけて説明する。図１４に示した命令の実行タイミングは本発明のオペレーションを例示したもので、種々態様に変更可能であることは勿論である。
【０１４７】
図１４のタイミング図はプロセッサ・システム・クロック・サイクルP0-6のシーケンスを示している。各プロセッサ・サイクルは内部ＴサイクルT0から始まる。本発明の好適実施例によるアーキテクチャ100 では、各プロセッサ・サイクルは２つのＴサイクルからなっている。
【０１４８】
プロセッサ・サイクル０のときは、IFU 102 とVMU 108 は物理アドレスを生成するように動作する。この物理アドレスはCCU 106 へ送られ、命令用キャッシュ・アクセス・オペレーションが開始される。要求された命令セットが命令用キャッシュ132 にあると、命令セットはプロセッサ・サイクル１のほぼ中間でIFU 102 へ戻される。そのあと、IFU 102 はプリフェッチ・ユニット260 とIFIFO 264 を経由する命令セットの転送を管理し、転送された命令セットはまずIEU 104 へ実行のために渡される。
1)Ｅデコード・ユニットの詳細
Ｅデコード・ユニット490 は全命令セットを並列に受け取って、プロセッサ・サイクル１が完了する前にデコードする。Ｅデコード・ユニット490 は、好適アーキテクチャ100 では、バス124 を経由して受け取ったすべての有効命令を並列に直接デコードする機能を備えた順列組合せ理論に基づくロジック・ブロックとして実現されている。アーキテクチャ100 によって認識される命令は、各タイプ別に、命令、レジスタ要件および必要な資源の仕様と共に表VIに示されている。
【０１４９】
表ＶＩ
───────────────────────────────────
命令／仕様
命令                        制御とオペランド情報＊
レジスタ間移動              論理／算術演算機能コード：
加算、減算、乗算、シフトその他の指定
宛先レジスタ
ＰＳＲのみセット
ソース・レジスタ１
ソース・レジスタ２または即値定数値
レジスタセットＡ／Ｂ選択
即値からレジスタへ          宛先レジスタ
移動                        即値整数または浮動小数点定数値
レジスタ・セットＡ／Ｂ選択
ロード／ストア・レジスタ    オペレーション機能コード：
ロードまたはストアの指定、即値、ベースと
即値、またはベースとオフセットの使用
ソース／宛先レジスタ
ベース・レジスタ
インデックス・レジスタまたは即値定数値
レジスタ・セットＡ／Ｂ選択
即値コール                  符号付き即値変位
制御フロー                  オペレーション機能コード：
ブランチ・タイプとトリガ条件の指定
ベース・レジスタ
インデックス・レジスタ、即値定数変位値、また
はトラップ番号
レジスタ・セットＡ／Ｂ選択
特殊レジスタ移動            オペレーション機能コード：
特殊／整数レジスタとの間の移動の指定
特殊レジスタ・アドレス識別子ソース／宛先レジ
スタ
レジスタ・セットＡ／Ｂ選択
整数変換移動                オペレーション機能コード：
浮動小数点から整数への変換タイプの指定
ソース／宛先レジスタ
レジスタ・セットＡ／Ｂ選択
ブール関数                  ブール関数コード：ＡＮＤ、ＯＲなどの指定
宛先ブール・レジスタ
ソース・レジスタ１
ソース・レジスタ２
レジスタ・セットＡ／Ｂ選択
拡張プロシージャ            プロシージャ指定子：プロシージャ・ベース値か
らのアドレス・オフセットの指定
オペレーション：値をプロシージャ・ルーチンへ
渡す
アトミック・プロシージャ    プロシージャ指定子：アドレス値の指定
───────────────────────────────────
＊−命令は、デコードされて命令を識別するフィールドのほかにこれらのフィールドを含んでいる。
【０１５０】
Ｅデコード・ユニット490 は命令セットの各命令を並列にデコードする。その結果の命令の識別、命令機能、レジスタ参照および機能要件はＥデコード・ユニット490 の出力から得られる。この情報は再生成され、命令セット内のすべての命令がリタイアされるまで、プロセッサ・サイクルの各半サイクル期間、Ｅデコード・ユニット490 によってラッチされる。従って、保留状態の８命令すべてに関する情報が、Ｅデコード・ユニット490 の出力から絶えず得られるようになっている。この情報は、８エレメント・ビット・ベクトルの形式で表示され、各ベクトルのビットまたはサブフィールドは２つの保留中命令セット内の対応する命令の物理ロケーションに論理的に対応している。従って、８個のベクトルが制御ライン502 を経由してキャリー・チェッカ492 へ送られる。この場合、各ベクトルは、対応する命令がプロセッサ状況ワードのキャリー・ビットに作用を及ぼしているか、あるいはそれに依存しているかを指定している。８個のベクトルが各命令の特定の内容と機能ユニット要件を示すために制御ライン510 を経由して送られる。８個のベクトルが制御ライン506 を経由して送られ、８個の保留中命令の各々によって使用されたレジスタ参照を指定している。これらのベクトルはプロセッサ・サイクル１が終了する前に送られる。
2)キャリー・チェッカ・ユニットの詳細
キャリー・チェッカ・ユニット492 は図１４に示すオペレーションのデータ依存関係フェーズ期間の間に依存関係検査ユニット494 を並列に動作する。キャリー・チェッカ・ユニット492 は好適アーキテクチャ100 では順列組合せ論理に基づくロジックをして実現されている。従って、キャリー・チェッカ・ユニット492 によるオペレーションの各繰返し時に、命令がプロセッサ状態レジスタのキャリー・フラグを変更したかどうかについて８個の命令すべてが考慮される。これが必要とされるのは、その前の命令によって設定されたキャリー・ビットの状況に依存する命令を順序外で実行することを可能にするためである。制御ライン504 上に送出された制御信号により、キャリー・チェッカ・ユニット492 は、キャリー・フラグに対する先行命令の実行に依存する特定の命令を識別することができる。
【０１５１】
さらに、キャリー・チェッカ・ユニット492 は８個の保留中命令の各々についてキャリー・ビットの一時的コピーをもっている。キャリー・ビットを変更していない命令については、キャリー・チェッカ・ユニット492 はプログラム命令ストリームの順序でキャリー・ビットを次の命令に伝える。従って、順序外で実行され、キャリー・ビットを変更する命令を実行させることが可能であり、さらに、その順序外で実行される命令に依存する後続の命令も、キャリー・ビットを変更する命令のあとに置かれていても、実行することが可能である。さらに、キャリー・ビットがキャリー・チェッカ・ユニット492 によって維持されているので、これらの命令のリタイア以前に例外が起こったとき、キャリー・チェッカ・ユニットは内部一時キャリー・ビット・レジスタをクリアするだけでよいことから、順序外で実行することが容易になる。その結果、プロセッサ状況レジスタは、順序外で実行される命令の実行による影響を受けない。キャリー・チェッカ・ユニット492 が維持している一時キャリー・ビット・レジスタは、順序外で実行される各命令が完了すると更新される。順序外で実行される命令がリタイアされると、プログラム命令ストリームの中で最後にリタイアされた命令に対応するキャリー・ビットはプロセッサ状況レジスタのキャリー・ビット・ロケーションへ転送される。
3)データ依存関係チェッカ・ユニットの詳細
データ依存関係チェッカ・ユニット494 はＥデコード・ユニット490 から制御ライン506 を経由して８個のレジスタ参照識別ベクトルを受け取る。各レジスタの参照は32個のレジスタを一度に１つを識別するのに適した５ビット値と、"A" 、"B" またはブール・レジスタ・セット内に置かれているレジスタ・バンクを識別する２ビット値によって示されている。浮動小数点レジスタ・セットは"B" レジスタ・セットとも呼ばれる。各命令は最高３つまでのレジスタ参照フィールドをもつことができる。２つのソース・レジスタ・フィールドと１つの宛先レジスタ・フィールドである。ある種の命令、特にレジスタ間移動命令は、宛先レジスタを指定している場合があっても、Ｅデコード・ユニット490 によって認識される命令ビット・フィールドは、実際に作成される出力データがないことを意味している場合がある。むしろ、命令の実行は、プロセッサ状況レジスタの値の変更を判断することだけを目的としている。
【０１５２】
データ依存関係チェッカ494 も好適アーキテクチャ100 において純然たる組合せロジック(pure combinatorial logic)で実現されているが、これはプログラム命令ストリーム内に後に現れる命令のソース・レジスタ参照と相対的に前に置かれた命令の宛先レジスタ参照との間の依存関係を同時に判断するように動作する。ビット配列は、どの命令が他の命令に依存するかを識別するだけでなく、各依存関係がどのレジスタに基づいて生じたかを識別するデータ依存関係チェッカ494 によって作られる。キャリーとレジスタ・データの依存関係は、第２プロセッサ・サイクルの開始直後に判別される。
4)レジスタ改名ユニットの詳細
レジスタ改名ユニット496 は８個の保留中の命令すべてのレジスタ参照のIDを制御ライン506 を経由して、レジスタ依存関係を制御ライン508 を経由して受け取る。８個のエレメントからのマトリックスも制御ライン542 を経由して受け取る。これらのエレメントは、保留中命令の現セットの中でどの命令が実行されたか( 完了したか) を示している。この情報から、レジスタ改名ユニット496 は制御信号の８エレメント配列を制御ライン512 を経由して命令発行ユニット498 へ送る。このようにして送られた制御情報は、現セットのデータ依存関係が判別された場合に、まだ実行されていない現在保留中の命令のうちどの命令の実行が可能になったかについてレジスタ改名ユニット496 が行った判断を反映している。レジスタ改名ユニット496 は実行のために同時に出される最高６個までの命令を識別した選択制御信号をライン516 を経由して受信する。つまり、２個の整数命令、２個の浮動小数点命令および２個のブール命令である。
【０１５３】
レジスタ改名ユニット496 はバス418 を経由してレジスタ・ファイル配列472 へ送られた制御信号を通して、識別された命令を実行する際にアクセスするソース・レジスタを選択するという、もう１つの機能を備えている。順序外で実行される命令の宛先レジスタは対応するデータ経路の一時バッファ612 、680 、728 に置かれているものとして選択される。順序内で実行される命令は完了するとリタイアされ、その結果データはレジスタ・ファイル614 、684 、732 にストアされてく。ソース・レジスタの選択は、レジスタが以前に宛先として選択され、対応する以前の命令がまだリタイアされていないかどうかによって決まる。そのような場合には、ソース・レジスタは対応する一時バッファ612 、680 、728 から選択される。以前の命令がリタイアされていた場合は、対応するレジスタ・ファイル614 、684 、732 のレジスタが選択される。その結果、レジスタ改名ユニット496 は、順序外で実行される命令の場合には、レジスタ・ファイル・レジスタの参照を一時バッファ・レジスタの参照に実効的に置き換えるように動作する。
【０１５４】
アーキテクチャ100 によれは、一時バッファ612 、680 、728 は対応するレジスタ・ファイル配列のレジスタ構造と重複していない。むしろ、８個の保留命令の各々に対して１つの宛先レジスタ・スロットが用意されている。その結果、一時バッファ宛先レジスタ参照の置換は、保留レジスタ・セット内の対応する命令のロケーションによって判断される。そのあとのソース・レジスタ参照はソース依存関係が発生した命令に対してデータ依存関係チェッカ494 によって識別される。従って、一時バッファ・レジスタ内の宛先スロットはレジスタ改名ユニット496 によって容易に判断することが可能である。
5)命令発行ユニットの詳細
命令発行ユニット498 は発行できる命令のセットをレジスタ改名ユニット496 の出力をＥデコード・ユニット490 によって識別された命令の機能要件に基づいて判断する。命令発行ユニット498 は制御ライン514 を経由して報告された機能ユニット4780-nの各々の状況に基づいてこの判断を行う。従って、命令発行ユニット498 は発行すべき使用可能な命令セットをレジスタ改名ユニット496 から受信すると、オペレーションを開始する。各命令を実行するためにレジスタ・ファイルへのアクセスが必要であるとすると、命令発行ユニット498 は現在命令を実行中の機能ユニット4980-nが使用可能であることを予想する。レジスタ改名ユニット496 へ発行すべき命令を判断する際の遅延を最小にするために、命令発行ユニット498 は専用の組合せロジックで実現されている。
【０１５５】
発行すべき命令を判断すると、レジスタ改名ユニット496 はレジスタ・ファイルへのアクセスを開始し、このアクセスは第３プロセッサ・サイクルP2が終了するまで続けられる。プロセッサ・サイクルP3が開始すると、命令発行ユニット498 は、「Execute 0 」で示すように１つまたは２つ以上の機能ユニット4780-nによるオペレーションを開始し、レジスタ・ファイル配列472 から送られてきたソース・データを受信して処理する。
【０１５６】
代表例として、アーキテクチャ100 で処理される大部分の命令は１プロセッサ・サイクルで機能ユニットを通して実行される。しかし、一部の命令は、「Execute 1 」で示すように、同時に出された命令を完了するのに複数のプロセッサ・サイクルを必要とする。Execute 0 命令とExecute 1 命令は、例えば、それぞれALU と浮動小数点乗算機能ユニットに実行させることができる。ALU 機能ユニットは、図１４に示すように、１プロセッサ・サイクル内で出力データを発生し、この出力データはラッチしておくだけで、第５プロセッサ・サイクルP4時に別の命令を実行する際に使用することができる。浮動小数点乗算機能ユニットは内部パイプライン化機能ユニットにすることが好ましい。従って、次のプロセッサ・サイクルで別の浮動小数点命令を出すことができる。しかし、最初の命令の結果はデータに依存するプロセッサ・サイクル数の間使用することができない。図１４に示す命令は、機能ユニットでの処理を完了するためには、３プロセッサ・サイクルを必要とする。
【０１５７】
各プロセッサ・サイクルの間に、命令発行ユニット498 の機能は繰り返される。その結果、現在の保留中の命令セットの状況と機能ユニット4780-nの全セットの使用可能状況は各プロセッサ・サイクルの間に再評価される。従って、最適条件のとき、好適アーキテクチャ100 はプロセッサ・サイクルことに最高６個までの命令を実行することができる。しかし、代表的な命令ミックスから得られる総平均実行命令数は、１プロセッサ・サイクル当たり1.5 個ないし2.0 個である。
【０１５８】
命令発行ユニット498 の機能で最後に考慮すべきことは、このユニットがトラップ条件の処理と特定命令の実行に関与することである。トラップ条件を発生するためには、まだリタイアされていないすべての命令をIEU 104 からクリアする必要がある。このような事態は、算術演算エラーに応答して機能ユニット4780-nのいずれからか、あるいは例えば、違法命令をデコードしたときにＥデコード・ユニット490 から、外部割込みを受信し、それが割込み要求／受信確認制御ライン340 を経由してIEU 104 へ中継されたのに応答して、起こることがある。トラップ条件が発生したとき、命令発行ユニット498 は現在IEU 104 で保留されているすべての非リタイア命令を中止または無効にすることを受け持つ。同時にリタイアできない命令はすべて無効にされる。この結果は、プログラム命令ストリームを順序内で実行する従来の方式に対して割込みを正確に発生させるために不可欠である。IEU 104 がトラップ処理プログラム・ルーチンの実行を開始する準備状態になると、命令発行ユニット498 は制御ライン340 を経由するリターン制御信号によって割込みの受信を確認する。また、従来の純然たる順序内ルーチンにおいてある命令が実行される前に変更されたプログラム状態ビットに基づいて、その命令に対する例外条件が認識される可能性を防止するために、命令発行ユニット498 はPSR を変更する可能性のあるすべての命令（特殊移動やトラップからのリターンなど）が厳格に順序内で実行されるようにすることを受け持つ。
【０１５９】
プログラム制御の流れを変更するある種の命令は、Ｉデコード・ユニット262 によって判別されない。この種の命令には、サブルーチン・リターン・プロシージャ命令からのリターン、トラップからのリターンがある。命令発行ユニット498 は判別制御信号をIEU リターン制御ライン350 を経由してIFU 102 へ送る。特殊レジスタ412 のうち対応するものが選択されて、コール命令の時効時、トラップの発生時またはプロシージャ命令の出現時に存在していたIF  PC実行アドレスを出力する。
6)完了制御ユニットの詳細
完了制御ユニット540 は機能ユニット478o-nをモニタして、現在のオペレーションの完了状況を調べる。好適アーキテクチャ100 では、完了制御ユニット540 は各機能ユニットによるオペレーションの完了を予想して、現在保留中の命令セットの中の各命令の実行状況を示した完了ベクトルを、機能ユニット478o-nによる命令の実行完了よりも約半プロセッサ・サイクル前にレジスタ改名ユニット496 、バイパス制御ユニット520 およびリタイア制御ユニット500 へ送る。これにより、命令発行ユニット498 はレジスタ改名ユニット496 を通して、実行を完了する機能ユニットを次の命令発行サイクルに対して使用可能な資源として考慮することができる。バイパス制御ユニット520 は、機能ユニットから出力された出力をバイパス・ストリーム474 を通るようにバイパスする準備を行うことができる。最後に、リタイア制御ユニット500 は、機能ユニット478o-nからレジスタ・ファイル配列472 へデータを転送するのと同時に対応する命令をリタイアするように動作する。
7)リタイア制御ユニットの詳細
完了制御ユニット540 から送られた命令完了ベクトルのほかに、リタイア制御ユニット500 はＥデコード・ユニット490 から出力された最も古い命令セットをモニタする。命令ストリーム順序の中の各命令に完了制御ユニット540 によって完了の印（マーク）がつけられると、リタイア制御ユニット500 は、制御ライン534 上に送出された制御信号を通して、一時バッファ・スロットからレジスタ・ファイル配列472 内の対応する命令が指定したファイル・レジスタ・ロケーションへデータを転送することを指示する。１つまたは複数の命令が同時にリタイアされると、PC Inc/Size 制御信号が制御ライン344 上に送出される。各プロセッサ・サイクルごとに最高４個までの命令をリタイアすることが可能である。命令セット全体がリタイアされると、IFIFO 読取り制御信号が制御ライン342 上に送出されてIFIFO 264 を前進させる。
8)制御フロー制御ユニットの詳細
制御フロー制御ユニット528 は、現在の保留中命令セット内の制御フロー命令が解決されたかどうか、さらに、その結果ブランチが行われたかどうかを指定した情報をIFU 102 に絶えず与えるように動作する。制御フロー制御ユニット528 は、Ｅデコード・ユニット490 による制御フロー・ブランチ命令の識別情報を制御ライン510 を経由して取得する。現在のレジスタ依存関係のセットは、制御ライン536 を経由してデータ依存関係チェッカ・ユニット494 から制御フロー制御ユニット528 へ送られるので、制御フロー制御ユニット528 はブランチ命令の結果が依存関係に拘束されているかどうか、あるいは判明しているかどうかを判断することができる。レジスタ改名ユニット496 からバス518 を経由して送られたレジスタの参照は制御フロー制御ユニット528 によってモニタされ、ブランチ決定を定義するブール・レジスタが判別される。従って、ブランチ決定は、制御フロー命令の順序外の実行以前でも判断することが可能である。
【０１６０】
制御フロー命令の実行と同時に、バイパス・ユニット472 は、制御フロー１と制御フロー２の制御ライン750 、752 からなる制御ライン530 を経由して制御フローの結果を制御フロー制御ユニット538 へ送るように指示される。最後に、制御フロー制御ユニット528 は各々が８ビットの２個のベクトルを制御ライン348 を経由してIFU 102 へ連続して送る。これらのベクトルは、ベクトル内のビットに対応する論理ロケーションに置かれた命令が解決されたか否か、およびその結果ブランチが行われたか否かを定義している。好適アーキテクチャ100 では、制御フロー制御ユニット528 は制御ユニット528 への入力制御信号を受けて連続的に動作する組合せロジックとして実現されている。
9)バイパス制御ユニットの詳細
命令発行ユニット498 はバイパス制御ユニット520 と緊密に協働して、レジスタ・ファイル配列472 と機能ユニット478o-n間のデータのルーチング（経路指定）を制御する。バイパス制御ユニット520 は、図１４に示すオペレーションのレジスタ・ファイル・アクセス、出力およびストア・フェーズと関連して動作する。レジスタ・ファイル・アクセスの間には、バイパス制御ユニット520 は命令の実行の出力フェーズの間に書き込まれている途中にあるレジスタ・ファイル配列472 内の宛先レジスタのアクセスを、制御ライン522 を通して確認することができる。この場合、バイパス制御ユニット520 は、バイパスして機能ユニット配布バス480 に返すように、機能ユニット出力バス482 上に送出された出力を選択することを指示する。バイパス・ユニット520 に対する制御は、制御ライン542 を通して命令発行ユニット498 によって行われる。
IV. 仮想メモリ制御ユニット
VMU 108 のインタフェース定義は図１５に示されている。VMU 108 はおもにVMU 制御ロジック・ユニット800 と内容アドレス(content addressable) メモリ(CAM)802から構成されている。VMU 108 の一般的機能は図１６にブロック図で示してある。同図において、仮想アドレスの表示は、スペースID(sID[31:28])、仮想ページ番号(VADDR[27:14])、ページ・オフセット(PADDR[13:4]) 、および要求ID(rID[3:0])に分割されている。物理アドレスを生成するためのアルゴリズムでは、スペースIDを使用して、スペース・テーブル842 内の16個のレジスタから１つを選択するようになっている。選択したスペース・レジスタの内容と仮想ページ番号とを組み合わせて、テーブル索引バッファ(TLB)844をアクセスするときのアドレスとして使用される。34ビット・アドレスは内容アドレス・タグの働きをし、バッファ844 ないの対応するバッファ・レジスタを指定するために使用される。タグに一致するものが見つかると、18ビット幅レジスタ値が物理アドレス846 の上位18ビットとして得られる。ページ・オフセットと要求IDは物理アドレス846 の下位14ビットとして得られる。
【０１６１】
タグに一致するものがテーブル索引バッファ844 に見つからないとVMU 不一致が通知される。この場合は、MAU 112 に維持されている完全ページ・テーブル・データ構造をアクセスする従来のハッシュ・アルゴリズム848 を採用したVMU 高速トラップ処理ルーチンを実行させる必要がある。このページ・テーブル850 はアーキテクチャ100 によって現在使用中のすべてのメモリ・ページのエントリを含んでいる。ハッシュ・アルゴリズム848 は、現在の仮想ページ変換操作を満たすために必要なページ・テーブル・エントリを判別する。これらのページ・テーブル・エントリはMAU 112 からレジスタ・セット"A" のトラップ・レジスタへロードされ、そのあと特殊レジスタ移動命令によってテーブル索引バッファ844 へ転送される。例外処理ルーチンから戻ると、VMU 不一致例外を引き起こした命令はIEU 104 によって再実行される。仮想アドレスから物理アドレスへの変換操作は例外を引き起こさないで完了するはずである。
【０１６２】
VMU 制御ロジック800 はIFU 102 およびIEU 104 とのデュアル・インタフェースとなる。準備信号は制御ライン822 を経由してIEU 104 へ送られ、VMU 108 がアドレス変換のために使用可能であることを通知する。好適実施例では、VMU 108 は常にIFU 102 の変換要求を受け付ける準備状態にある。IFU 102 およびIEU 104 は共に、制御ライン328 および804 を経由して要求を提示することができる。好適アーキテクチャ100 では、IFU は優先してVMU 108 をアクセスすることができる。その結果、ビジー（使用中）制御ライン820 は１だけがIEU 104 に出力される。
【０１６３】
IFU 102 およびIEU 104 は共に、スペースIDと仮想ページ番号フィールドを、それぞれ、制御ライン326 および808 を経由してVMU 制御ロジック800 へ送る。さらに、IEU 104 は読み書き制御信号を制御信号806 で出力する。この制御信号は、参照された仮想メモリのメモリ・アクセス保護属性を変更するために、そのアドレスをロード・オペレーションに使用すべきか、ストア・オペレーションに使用すべきを必要に応じて定義している。仮想アドレスのスペースIDと仮想ページ・フィールドはCAM ユニット802 に渡されて、実際の変換操作が行われる。ページ・オフセットとExIDフィールドは最終的にIEU 104 から直接にCCU 106 へ送られる。物理ページと要求IDフィールドはアドレス・ライン836 を経由してCAM ユニット802 へ送られる。テーブル索引バッファに一致するものが見つかると、ヒット・ラインと制御出力ライン830 を経由してVMU 制御ロジック・ユニット800 に通知される。その結果の18ビット長の物理アドレスはアドレス出力ライン824 上に出力される。
【０１６４】
VMU 制御ロジック・ユニット800 は、ライン830 からヒットおよび制御出力制御信号を受けると、仮想メモリ不一致と仮想メモリ例外制御信号をライン334 、332 上に出力する。仮想メモリ変換不一致とは、テーブル索引バッファ844 内のページ・テーブルIDと一致しなかっとことを意味する。その他の変換エラーはすべて仮想メモリ例外として報告される。
【０１６５】
最後に、CAM ユニット802 内のデータ・テーブルは特殊レジスタ間移動命令をIEU 104 が実行することによって変更することができる。読み書き、レジスタ選択、リセット、ロードおよびクリア制御信号はIEU 104 から制御ライン810 、812 、814 、816 、818 を経由して出力される。CAM ユニット・レジスタに書くべき出力は特殊レジスタ・データ・バス354 に接続されたアドレス・バス808 を経由してIEU 104 からVMU 制御ロジック・ユニット800 によって受信される。このデータは初期設定、レジスタ選択、および読み書き制御信号を制御する制御信号と同時にバス836 を経由してCAM ユニット802 へ転送される。その結果、CAM ユニット802 内のデータ・レジスタは、より高レベルのオペレーティング・システムで定義されているコンテキスト・スイッチを処理するとき必要になるストアのための読出しを含めて、アーキテクチャ100 の動的オペレーションの間に必要に応じて即座に書き出すことができる。
Ｖ．キャッシュ制御ユニット
CCU 106 用のデータ・インタフェース上のコントロールを図１７に示す。この場合も、インタフェースはIFU 102 用とIEU 104 用に別個に設けている。さらに、論理的に別個になったインタフェースをCCU 106 に設けて、MCU 110 と命令とデータの転送が行われる。IFU インタフェースはアドレス・ライン324 上に送出される物理ページ・アドレスと、アドレス・ライン824 上に送出されるVMU 変換ページ・アドレスと、制御ライン294 、296 上を別個に転送される要求IDとからなっている。単方向データ転送バス114 は命令セット全体をIFU 102 と並列に転送するためのものである。最後に、読取り／使用中(read/busy) 制御信号と準備(ready) 制御信号は制御ライン298 、300 、302 を経由してCCU 106 へ送られる。
【０１６６】
同様に、完全な物理アドレスはIEU 102 から物理アドレス・バス788 を経由して送られる。要求ExIDはIEU 104 のロード／ストア・ユニットとの間で制御ライン796 を経由して別個に送受される。80ビット幅の単方向データ・バスをCCU 106 に設けて、IEU 104 と結んでいる。しかし、アーキテクチャ100 の好適実施例では、下位の64ビットだけがIEU 104 によって使用される。全80ビット・データ転送バスをCCU 106 内に用意し、サポートしたのは、浮動小数点データ経路660 を変更することにより、IEEE標準754 に準拠する浮動小数点オペレーションをサポートするアーキテクチャ100 の将来の実現をサポートするためである。
【０１６７】
IEU 制御インタフェースは、要求、使用中、準備、読み書きおよび制御信号784 を通して確立され、IFU 102 によって使用される対応する制御信号とほぼ同じである。ただし、ロード・オペレーション・ストア・オペレーションを区別するために読み書き制御信号が用意されている点が異なる。幅制御信号はIEU 104 がCCU 106 をアクセスする都度、その間に転送されるバイト数を指定している。これに対して、命令キャッシュ132 のアクセスは、いずれも、固定128 ビット幅データ・フェッチ・オペレーションである。
【０１６８】
CCU 106 は、命令用キャッシュ132 とデータ用キャッシュ134 に対してほぼ従来のキャッシュ制御機能を実装している。好適アーキテクチャ100 では、命令用キャッシュ132 は256 個の128 ビット幅命令セットをストアできる高速メモリになっている。データ用キャッシュ134 は1024個の32ビット幅データ・ワードをストアすることができる。命令用キャッシュ132 およびデータ用キャッシュ134 の内容から即時に満たすことができない命令とデータ要求はMCU 110 に引き渡される。命令用キャッシュが不一致（ミス）の場合は、28ビット幅の物理アドレスがMCU 110 へアドレス・バス860 を経由して送られる。要求IDおよびCCU 106 とMCU 100 のオペレーションを調整するための追加制御信号は制御ライン862 上に送出される。MCU 110 がMAU 112 の必要な読取りアクセスを調整すると、２つの連続する64ビット幅データ転送がMAU 112 から直接に命令用キャッシュ132 へ行われる。データ・バス136 が好適アーキテクチャ100 において64ビット幅であるとすると、２転送が必要である。要求したデータがMCU 110 を経由して返送されるとき、要求オペレーションが保留されていた期間に保持されていた要求IDも、制御ライン862 を経由してCCU 106 へ返送される。
【０１６９】
データ用キャッシュ134 とMCU 110 との間のデータ転送オペレーションは、命令用キャッシュの場合のオペレーションとほぼ同じである。データ・ロードとストア・オペレーションは単一バイトを参照できるので、全32ビット幅物理アドレスがアドレス・バス864 を経由してMCU 110 へ送られる。インタフェース制御信号と要求ExIDは制御ライン866 を経由して転送される。双方向64ビット幅データ転送はデータ用キャッシュ・バス138 を経由して行われる。
【０１７０】
高性能RISCをベースとしたマイクロプロセッサ・アーキテクチャは以上に説明したとおりである。本発明のアーキテクチャによれば、命令を順序外に実行することができ、メインとターゲット命令ストリームのプリフェッチ命令転送経路を別々に設け、およびプロシージャ命令確認と専用プリフェッチ経路を設けることができる。命令実行ユニットは最適化されているので、最適化された複数のデータ処理経路で整数、浮動小数点およびブール演算をサポートすることができ、またそれぞれの一時レジスタ・ファイルが設けられているので、容易に設定されるマシン状態の状況を正確に維持しながら、順序外の実行と命令取消しを容易に行うことができる。
【０１７１】
従って、上述した説明では、本発明の好適実施例を開示しているが、当業者にとって本発明の範囲内で種々変更および改良することが可能であることは勿論である。
【図面の簡単な説明】
【０１７２】
【図１】本発明のマイクロプロセッサ・ア−キテクチャを示す簡略ブロック図である。
【図２】本発明の命令フェッチ・ユニットを示す詳細ブロック図である。
【図３】本発明のプログラム・カウンタ・ロジック・ユニットを示すブロック図である。
【図４】プログラム・カウンタ・デ−タと制御経路ロジックを示す別の詳細ブロック図である。
【図５】本発明の命令実行ユニットを示す簡略ブロック図である。
【図６】レジスタ・ファイルと命令セットを説明する図である。
【図７】１次整数レジスタ・セットの再構成可能ステ−トを示す図である。
【図８】浮動小数点および２次整数レジスタ・セットを示す図である。
【図９】３次ブ−ル・レジスタ・セットを示す図である。
【図１０】命令実行ユニットの１次整数処理デ−タ経路部分を示す詳細ブロック図である。
【図１１】命令実行ユニットの１次浮動小数点デ−タ経路部分を示す詳細ブロック図である。
【図１２】命令実行ユニットのブ−ル演算デ−タ経路部分を示す詳細ブロック図である。
【図１３】ロ−ド／ストア・ユニットを示す詳細ブロック図である。
【図１４】複数の命令を実行する際のオペレ−ション・シ−ケンスを示すタイミング図である。
【図１５】仮想メモリ制御ユニットを示す簡略ブロック図である。
【図１６】仮想メモリ制御アルゴリズムを図形で示す図である。
【図１７】キャッシュ制御ユニットを示す簡略ブロック図である。
【符号の説明】
【０１７３】
１００...アーキテクチャの概要
１０２...命令フェッチ・ユニット（ＩＦＵ）
１０４...命令実行ユニット（ＩＥＵ）
１０６...キャッシュ制御ユニット（ＣＵＵ）
１０８...仮想メモリ・ユニット（ＶＭＵ）
１１０...メモリ制御ユニット（ＭＣＵ）
１１２...メモリ・アレイ・ユニット（ＭＡＵ）
【図１】
0003724505.tif 000002
【図２】
0003724505.tif 000003
【図３】
0003724505.tif 000004
【図４】
0003724505.tif 000005
【図５】
0003724505.tif 000006
【図６】
0003724505.tif 000007
【図７】
0003724505.tif 000008
【図８】
0003724505.tif 000009
【図９】
0003724505.tif 000010
【図１０】
0003724505.tif 000011
【図１１】
0003724505.tif 000012
【図１２】
0003724505.tif 000013
【図１３】
0003724505.tif 000014
【図１４】
0003724505.tif 000015
【図１５】
0003724505.tif 000016
【図１６】
0003724505.tif 000017
【図１７】
0003724505.tif 000018