(57)【要約】【課題】幾何学演算を高速に処理できる幾何学処理プロセッサを提供する。【解決手段】幾何学処理プロセッサは、ホストプロセッサに接続されるＡＧＰポート８０と、ＡＧＰポート８０に接続される入力ＦＩＦＯ９８と、ホストプロセッサからＡＧＰポート、入力ＦＩＦＯ９８を介して与えられる命令を処理するための幾何学演算コア７０と、幾何学演算コア７０に含まれる演算ユニット１０６、１３８−１４４に接続される第２のローカルメモリ１０４、１３０−１３６とを含み、ホストプロセッサから与えられた入力ＦＩＦＯ９８の内容をローカルメモリ１０４、１３０−１３６に複写する。幾何学演算コア７０はローカルメモリ１０４、１３０−１３６の内容にしたがって動作し、ローカルメモリ１０４、１３０−１３６の内容にしたがった幾何学演算コア７０の動作と並行してホストプロセッサとＡＧＰポート８０との間の通信を行なう。【選択図】図３
2007183998.tif 000002
【特許請求の範囲】
【請求項１】
幾何学処理プロセッサであって、
ホストプロセッサに接続される外部インターフェースポートと、
前記外部インターフェースポートに接続される第１の記憶手段と、
前記ホストプロセッサから前記外部インターフェースポート、第１の記憶手段を介して与えられる命令を処理するための幾何学演算コアと、
前記幾何学演算コアに含まれる演算ユニットに接続される第２の記憶手段と、
前記ホストプロセッサから与えられた前記第１の記憶手段の内容を前記第２の記憶手段に複写するための手段とを含み、
前記幾何学演算コアは前記第２の記憶手段の内容にしたがって動作し、
前記第２の記憶手段の内容にしたがった前記幾何学演算コアの動作と並行して前記ホストプロセッサと前記外部インターフェースポートとの間の通信を行なうための手段をさらに含む、幾何学処理プロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  ｓｔｒｅａｍ  ａｎｄ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ  ｓｔｒｅａｍ）型の３次元グラフィックス用幾何学処理プロセッサに関し、特に、幾何学演算自体を高速に実行できるとともに、周辺装置との間の入出力も高速に行なえる３次元グラフィックス用幾何学処理プロセッサに関する。
【背景技術】
【０００２】
最近の画像処理の対象の広がりに合わせて、３次元グラフィックス処理を必要とするシステムの範囲が広がっている。そうしたシステムではリアルタイムの処理が要求されることも多い。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところが、画像処理、特に３次元グラフィックス処理では、その特徴として以下があることが知られている。
【０００４】
（１）  条件分岐が多発する。
（２）  逆数（１／ｘ），平方根（√ｘ）、平方根の逆数（１／√ｘ），ｘのｙ乗（ｙは浮動小数点データ）の計算
（３）  積和演算（ｃ＝ａ×ｂ＋ｃ）
こうした演算はいずれも計算量が多く、そのためこれら全ての演算を高速に処理可能なアーキテクチャの幾何学処理プロセッサは存在していない。したがって従来の画像処理を伴うシステムでは３Ｄグラフィックス処理の演算速度の遅さのために処理時間が長くなっていたという問題点がある。
【０００５】
それゆえにこの発明の主たる目的は、幾何学演算を高速に処理できる幾何学処理プロセッサを提供することである。
【０００６】
この発明の他の目的は、幾何学演算を高速に処理できる上に、周辺装置との間のデータの入出力を高速に行なうことができる幾何学処理プロセッサを提供することである。
【０００７】
この発明のさらに他の目的は、幾何学演算を高速に処理できる様、幾何学演算に多数現れる演算を高速で処理可能な上に、周辺装置との間のデータの入出力を高速に行なうことができる幾何学処理プロセッサを提供することである。
【０００８】
この発明の他の目的は、幾何学演算および周辺装置との間のデータの入出力をそれぞれ高速に行なうことができる上に、データの入出力と幾何学演算とを並列に実行可能な幾何学処理プロセッサを提供することである。
【課題を解決するための手段】
【０００９】
請求項１に記載の発明にかかる幾何学処理プロセッサは、ホストプロセッサに接続される外部インターフェースポートと、外部インターフェースポートに接続される第１の記憶手段と、ホストプロセッサから外部インターフェースポート、第１の記憶手段を介して与えられる命令を処理するための幾何学演算コアと、幾何学演算コアに含まれる演算ユニットに接続される第２の記憶手段と、ホストプロセッサから与えられた第１の記憶手段の内容を第２の記憶手段に複写するための手段とを含む。幾何学演算コアは第２の記憶手段の内容にしたがって動作する。幾何学処理プロセッサは、第２の記憶手段の内容にしたがった幾何学演算コアの動作と並行してホストプロセッサと外部インターフェースポートとの間の通信を行なうための手段をさらに含む。
【発明の効果】
【００１０】
第１の記憶手段の内容を第２の記憶手段に複写した後は、第２の記憶手段の内容による幾何学演算コアの動作と、次の命令を第１の記憶手段に記憶する処理とを並行して行なうことが可能になり、処理が多重化され高速化が可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本願発明の実施の形態について説明する。なお、以下の実施の形態では、本願発明の３次元グラフィックス用幾何学処理プロセッサについて、ＰＣＩバスを有するコンピュータシステムに追加される基板（いわゆる「アドインボード」）形式で実現した場合を説明しているが、本願発明はこれのみに適用可能なわけではない。バス間接続によってホストＣＰＵと接続されるものであればどのようなものでもよく、たとえば他の装置と同じ基板上に実装されたり、ＣＰＵと一体的にＬＳＩ化されてもよい。
【００１２】
図１を参照して、本願発明の１実施の形態について説明する。例示のためのコンピュータシステム５０は、ホストＣＰＵ５２と、ホストブリッジ５４を介してホストＣＰＵ５２に接続された主記憶装置５６とアドインカード５８とを含む。アドインカード５８が本願発明にかかるグラフック処理のためのカードである。
【００１３】
アドインカード５８は、セカンダリバス７２と、ホストＣＰＵ５２のＰＣＩバスとの間でのブリッジ機能を実現するとともに本願発明にかかる３次元グラフィック処理を行なう幾何学演算エンジン（幾何学演算コア）を含む幾何学演算プロセッサ７０と、セカンダリバス７２に接続されたレンダラ７４および複数個のエージェント７６とを含む。
【００１４】
幾何学演算プロセッサ７０は、ＬＳＩであって、３次元グラフィックス処理システムにおける幾何学演算処理を行なうのに適したものである。幾何学演算処理は高い演算精度と大きな計算能力とを持つ必要がある。そのため、この幾何学演算プロセッサ７０は、後述するようにＳＩＭＤ型のアーキテクチャを採用して処理能力を高めている。
【００１５】
図１を参照して、概略的にいうと幾何学演算プロセッサ７０は、ホストブリッジ５４との間のインターフェースをするためのＡＧＰポート８０と、セカンダリバス７２との間のインターフェースをするためのＲＣポート８６と、ＡＧＰポート８０およびＲＣポート８６の間でのＰＣＩブリッジ機能を実現するためのＰＣＩブリッジ８２と、３次元幾何学演算処理を行なうための幾何学演算コア８４とを含む。
【００１６】
図２を参照して、より詳細に述べると、幾何学演算プロセッサ７０のうち幾何学演算コア８４は、ＡＧＰポート８０に接続された入力ＦＩＦＯ９８と、ＡＧＰポート８０および入力ＦＩＦＯ９８に接続されたＧ−Ｂｕｓ１００と、ＡＧＰポート８０およびＧ−Ｂｕｓ１００に接続されたＡＤ−Ｂｕｓ１０２と、ＡＤ−Ｂｕｓ１０２に接続されたＩＬＭ１０４と、ＩＬＭ１０４に接続されたＩＰＵ１０６と、ＩＰＵ１０６の出力が接続されたＯ−Ｂｕｓ１１６とを含む。Ｏ−Ｂｕｓ１１６はさらに、ＲＣポート８６に接続されている。
【００１７】
幾何学演算コア８４は、Ｇ−Ｂｕｓ１００およびＡＤ−Ｂｕｓ１０２に接続された、上述したＳＩＭＤアークテクチャの浮動小数点演算処理を行なうためＳＩＭＤコア１０８と、ＳＩＭＤコア１０８からの出力を受ける３２ビットのＤ１−Ｂｕｓ１１０と、ＡＤ−Ｂｕｓ１０２およびＤ１−Ｂｕｓ１１０に接続されたＦＰＯＷＥＲ／ＦＤＩＶ部１１４と、ＦＰＯＷＥＲ／ＦＤＩＶ部１１４の出力をＳＩＭＤコア１０８に与えるＤ２−Ｂｕｓ１１２とを含む。ＳＩＭＤコア１０８の出力もまた、Ｏ−Ｂｕｓ１１６に接続されている。
【００１８】
幾何学演算コア８４はさらに、Ｇ−Ｂｕｓ１００およびＡＤ−Ｂｕｓ１０２に接続された命令メモリ９２と、Ｇ−Ｂｕｓ１００に接続され、命令メモリ９２から読み出される命令のシーケンスを制御するためのシーケンサ９４と、Ｇ−Ｂｕｓ１００とＡＤ−Ｂｕｓ１０２とＡＧＵ９６とに接続されたＡＧＵ９６と、これら各要素に所定のクロック信号を供給するためのＰＬＬ（Ｐｈａｓｅ  Ｌｏｃｋｅｄ  Ｌｏｏｐ）９０とを含む。
【００１９】
図３に、これら要素の間の接続関係をより詳細に示す。図３を参照して、ＡＤ−Ｂｕｓ１０２はＡＤ０−ＡＤ２の３本のアドレスバス（ＡＤ−Ｂｕｓ）を含む。ＳＩＭＤコア１０８は、４つの浮動小数点演算装置を含んでおり、各浮動小数点演算装置は、浮動小数点演算ユニットＦＰＵ０（１３８）〜ＦＰＵ３（１４４）と、ローカルメモリＦＬＭ０（１３０）〜ＦＬＭ３（１３６）と、クリップテスト装置１２０とを含んでいる。幾何学演算プロセッサ７０はさらに、ＦＰＯＷＥＲ／ＦＤＩＶ部１１４内に設けられた二つの浮動小数点除算装置（ＦＤＩＶ０，ＦＤＩＶ１）と、浮動小数点ＦＰＯＷＥＲ演算回路３１４と、整数演算を行なうためのＩＰＵ１０６（ＡＬＵおよびシフタ）およびそのためのローカルメモリであるＩＬＭ１０４とを含む。この構成により、照明計算の処理能力が高められる。浮動小数点演算は全てＩＥＥＥ−７５４単精度データフォーマットにしたがう。
【００２０】
ＡＧＰポート８０およびＲＣポート８６の二つのＡＧＰポートがそれぞれホストおよびレンダラとのインターフェースに用いられる。これらポートはいずれも６６ＭＨｚクロックのダブルエッジで動作する３２ビットのインターフェースである。システムデータフローを高め、かつ柔軟にするために、本システムはＤＭＡ機能を持つブリッジ機能が用意されている。このため、ＡＧＰ−Ｉ／Ｆをサポートした、レンダラＬＳＩを持つ３次元グラフィックスシステムを容易に構築できる。
【００２１】
この３次元グラフィックス用幾何学処理プロセッサは、二つのプロセッサおよび二つのレンダラを持つシステム構成とすることができ、それによってシステム性能をより高めることが可能である。以下、本プロセッサシステムのアーキテクチャについて説明する。
【００２２】
（１）  アーキテクチャ
(1.1)   ＰＣＩ−Ｉ／Ｆユニット
３次元グラフィックス用幾何学処理プロセッサ内のＰＣＩインターフェースは、二つの機能を行なう。第１番目はプライマリＰＣＩコアと幾何学演算コアとの間のインターフェースである。２番目は、プライマリＰＣＩバスとセカンダリＰＣＩバスとの間のＰＣＩ−ＰＣＩブリッジ機能である。これはセカンダリバス上に存在する各デバイス（エージェント）をプライマリバスに接続するためである。
【００２３】
こうした機能を実現するのはＰＣＩ＿Ｉ＿Ｏ＿ＢＲＩＤＧＥモジュールであって、このモジュールは８個のサブモジュールからなる。以下、それらサブモジュールについて説明する。
【００２４】
(1.1.1)   ［ＰＲＩＭ＿Ｉ＿Ｏ］
このサブモジュールは、プライマリＰＣＩバスとセカンダリＰＣＩバスおよび幾何学演算コアとの間の非同期のデータ交換を処理するためのものである。このモジュールは二つの状態機械によって制御される。一つはマスター機能のためであり、他方はターゲット機能のためである。マスターとして動作する場合、ＤＭＡ転送が行なわれる。ターゲットとして動作する場合、ＦＳＭ（有限状態機械）がバッファを介してデータを通し、セカンダリＰＣＩバスおよび幾何学演算コアの状態機械と協働して動作する。ＰＲＩＭ＿Ｉ＿Ｏはまた、コンピュータシステム５０のコンフィギュレーション時に必要なコンフィギュレーション空間ならびにＰＣＩレジスタおよびフラグを含んでいる。
【００２５】
(1.1.2)   ［ＳＥＣ＿Ｉ＿Ｏ］
ＳＥＣ＿Ｉ＿Ｏサブモジュールは、セカンダリＰＣＩバスとプライマリＰＣＩバスおよび幾何学演算コアとの間の非同期なデータ交換を処理するためのものである。このサブモジュールは常にマスターとしてしか動作しないため、マスターのための一つの状態機械のみによって制御される。実際は、このＳＥＣ＿Ｉ＿Ｏは、セカンダリＰＣＩバス上での割込を除くとプライマリＰＣＩバスおよび幾何学演算コアとの二つのソースのみによってトリガーされるので、これらに対しては「スレーブ」として動作する。アクティブになると、ＳＥＣ＿Ｉ＿Ｏサブモジュールは各バッファを介してデータを入出力する。またＳＥＣ＿Ｉ＿Ｏサブモジュールは、セカンダリＰＣＩバスのためのアービタも含んでいる。
【００２６】
(1.1.3)   ［ＧＥ＿Ｉ＿Ｏ］
ＧＥ＿Ｉ＿Ｏサブモジュールは、幾何学演算コアとプライマリＰＣＩバスとの間の非同期なデータ交換を処理する。幾何学演算コアとの間でデータの入出力を行なう必要がある場合、ＧＥ＿Ｉ＿Ｏ内部の状態機械が幾何学演算コア内のシーケンサ９４と協働して適切な制御信号およびアドレス信号を（ＰＣＩアドレスを幾何学演算コアの内部アドレスに変換しながら）生成する。
【００２７】
(1.1.4)   ［ＦＩＦＯ＿Ｐ２Ｓ，  ＦＩＦＯ＿Ｐ２Ｃ，ＦＩＦＯ＿Ｃ２Ｓ］
ＦＩＦＯ＿Ｐ２Ｓサブモジュールはデータについては１６×３６ビット、アドレスについては２×３２ビットのレジスタ容量をもつポスト用バッファである。ＦＩＦＯ＿Ｐ２Ｃサブモジュールは、データについて３２×３６ビットの容量を持つポスト用バッファである。ＦＩＦＯ＿Ｃ２Ｓサブモジュールは、データについて３２×３６ビット、アドレスについて４×３２ビットのレジスタ容量を持つポスト用バッファである。これらＦＩＦＯをエミュレートするために、デュアルポートＲＡＭが用いられる。各ＦＩＦＯは各インターフェースとの間で非同期のハンドシェークを行なうことができる。対応のフラグがセットされている場合には、どのバッファもバイパスすることができる。
【００２８】
(1.1.5)   ［ＦＩＦＯ＿Ｓ２Ｐ，ＦＩＦＯ＿Ｃ２Ｐ］
これらサブモジュールはいずれも、データに対する８×３２ビットの容量を持つプリフェッチ用バッファである。各ＦＩＦＯは対応のインターフェースとの間で非同期ハンドシェークを行なうことが可能である。対応のフラグがセットされている場合には、どのバッファもバイパスすることができる。
【００２９】
(1.2)   幾何学演算コア
図２を参照して、既に述べたように幾何学演算コア８４は、ＳＩＭＤコア１０８と、ＦＰＯＷＥＲ／ＦＤＩＶ部１１４と、命令メモリ９２と、シーケンサ９４ と、ＡＧＵ９６とを含む。図４を参照して幾何学演算コア８４はさらに、クリップコード発生器３１８（ＣＣＧ）とＦＭＣＰＲ３４０とを含む。ＦＰＯＷＥＲ／ＦＤＩＶ部１１４は浮動小数点除算器（ＦＤＩＶ０（３１０）およびＦＤＩＶ１（３１２））と浮動小数点べき乗演算器（ＦＰＯＷＥＲ演算回路３１４）とを含む。ＦＰＯＷＥＲ演算回路３１４は浮動小数点平方根演算器（ＦＳＱＲＴ）および整数平方根演算器（ＦＩＳＱＲＴ）としても機能し、ベクトル正規化に用いられる。
【００３０】
(1.2.1)   ［バス構造］
幾何学演算コア内でのデータの移動は、二つのグローバルバスおよび二つのローカルバスを経由して行なわれる。これら二つのグローバルバスとは、図２〜図３に示すＧ−Ｂｕｓ１００およびＯ−Ｂｕｓ１１６である。ローカルバスとは、図２〜図３に示すＳＩＭＤコア１０８内のＤ１−Ｂｕｓ１１０およびＤ２−Ｂｕｓ１１２である。これらバスはいずれも３２ビット幅である。
【００３１】
Ｇ−Ｂｕｓ１００は、ＦＩＦＯ＿Ｐ２ＧＥまたは入力ＦＩＦＯ９８とデータメモリ（ＦＬＭ０（１３０）〜ＦＬＭ３（１３６）およびＩＬＭ１０４）との間、またはデータメモリ／制御レジスタとデータメモリ／制御レジスタとの間でデータ転送を行なうことができる。Ｏ−Ｂｕｓ１１６は、幾何学演算コアからレンダラＬＳＩへのデータ転送をサポートする。幾何学演算コアからのデータは単方向データバスであるＯ−Ｂｕｓ１１６を介して出力ＦＩＦＯに送信される。Ｄ１−Ｂｕｓ１１０およびＤ２−Ｂｕｓ１１２はそれぞれ、ＳＩＭＤコア１０８内の各浮動小数点演算ユニットと、ＦＰＯＷＥＲ／ＦＤＩＶ部１１４に含まれる二つの浮動小数点演算装置と浮動小数点べき乗計算器の間のデータの転送を行なうためのものであり、Ｄ１−Ｂｕｓ１１０は各浮動小数点演算ユニットからＦＰＯＷＥＲ／ＦＤＩＶ部１１４への、Ｄ２−Ｂｕｓ１１２はＦＰＯＷＥＲ／ＦＤＩＶ部１１４から各浮動小数点演算ユニットへの、それぞれ単方向バスである。このように２本のデータバスをローカルに用いることで、データバス獲得の待ち時間がなくなり処理のパイプライン化が容易になり、処理をより高速化できる。
【００３２】
ＡＤ−Ｂｕｓ１０２の３本のソースアドレスバスＡＤ０−２はいずれも単方向バスである。ＡＤ０は９ビットのソース０アドレスバスである。ＡＤ１は１３ビットのソース１アドレスバスである。ＡＤ２は１３ビットのソース２アドレスバスである。ＡＤ１はまた、内部のデータメモリおよび／または制御レジスタからのＰＣＩ「メモリ読出」にも使用される。ＡＤ２は、内部のデータメモリおよび／または制御レジスタへのＰＣＩ「メモリ書込」にも使用される。ＦＬＵＴ１４６は、ＰＣＩ「メモリ読出／書込」のみによってＡＤ１およびＡＤ２を用いてアクセスできる。
【００３３】
(1.2.2)   ［ＳＩＭＤ演算処理コア］
(1.2.2.1)   浮動小数点処理（ＦＰＵ０（１３８）〜ＦＰＵ３（１４４））
図４を参照して、ＳＩＭＤコア１０８は４つの浮動小数点演算ユニット（ＦＰＵ０（１３８）〜ＦＰＵ３（１４４））を含んでいる。各ユニットは浮動小数点乗算器（ＦＭＰＹ３３０）と、浮動小数点ＡＬＵ（ＦＡＬＵ３３２）と、データメモリ（ＦＬＭ０（１３０）〜ＦＬＭ３（１３６）のどれか）と、Ｆ２Ｏバッファ３３８とを含んでいる。全てのユニットは２ステージのパイプライン処理で同時に同じ処理を行なう。
【００３４】
浮動小数点ユニットの各部において必要とされるパイプラインステージの数を表１に示す。
【００３５】
【表１】
2007183998.tif 000003
【００３６】
ＦＰＵ内の主要なブロック間におけるアドレス・データタイミングの例を図５に示す。ＦＤＩＶ０およびＦＤＩＶ１を動作させるｆｄｉｖ０、ｆｄｉｖ１命令については図５には示していないが、その場合のタイミングはｆｐｏｗ命令の実行ステージがＥＸＥ９まである場合に相当する。図５で特に注意すべきことは、ＦＤＩＶ０、ＦＤＩＶ１、ＦＰＯＷＥＲはＧ−Ｂｕｓ１００を介してＦＬＭから演算器にデータ転送が必要であるため、Ｄ１−Ｂｕｓ転送ステージが１ステージ分必要である点である（図５においてはＴＳステージとして示してある）。
【００３７】
ＦＭＰＹ３３０と、ＦＡＬＵ３３２と、ＦＤＩＶ０（３１０）およびＦＤＩＶ１（３１２）と、ＦＰＯＷＥＲ演算回路３１４とはＩＥＥＥ−７４５規格の単精度浮動小数点データフォーマットにしたがった処理を実行できる。図６にＩＥＥＥ単精度データフォーマットを示す。また、表２にこの幾何学演算コアによってサポートされるデータフォーマットを示す。
【００３８】
【表２】
2007183998.tif 000004
【００３９】
いずれの浮動小数点処理ユニットも、算術論理演算を「Ｒｏｕｎｄ  ｔｏ  Ｎｅａｒｅｓｔ」モードで行なう。他の丸めモードはこれらユニットではサポートされていない。なお各浮動小数点演算ユニットは、、ＦＭＰＹ３３０の出力に接続されたＤＲＦＭ３３４と、ＦＡＬＵ３３２の出力に接続されたＤＲＦＡ０−３（３３６）と、Ｆ２Ｏバッファ３３８とをさらに含んでいる。ＤＲＦＭ３３４の出力は、データメモリ、例えばＦＬＭ０（１３０）と、ＦＭＰＹ３３０およびＦＡＬＵ３３２の入力と、Ｆ２Ｏバッファ３３８とに接続される。ＤＲＦＡ０−３（３３６）の出力は、ＦＭＰＹ３３０の入力と、ＦＡＬＵ３３２の入力と、Ｆ２Ｏバッファ３３８と、データメモリ、例えばＦＬＭ０（１３０）とに接続されている。
【００４０】
正規化されていない数については、内部計算では符号付ゼロに置換される。
以下、浮動小数点ユニットに含まれる各部について説明する。
【００４１】
(1.2.2.1.1)   データメモリ（ＦＬＭ）
図７を参照してたとえばＦＬＭ０（１３０）は、５１２ワード×３２ビット、２読出（ＤＯ０，ＤＯ１）／１書込（ＤＩ）の３ポートＲＡＭ３５０と、それぞれ一方の入力がＤＯ０，ＤＯ１に接続された２入力のセレクタ３５２および３５４と、入力がＧ−Ｂｕｓ１００、Ｄ２−Ｂｕｓ１１２およびライトバックデータ（ＷＢ）入力にそれぞれ接続され、出力がＤＩに接続された３入力セレクタ３５６と、クロック信号ｃｌｋ１およびｃｌｋ２によって動作する複数のラッチ回路とを含む。セレクタ３５２および３５４は、二つのラッチ回路を介して自己の出力を入力に受けており、データの保持が可能となっている。
【００４２】
読出データＤＯ０，ＤＯ１はＦＭＰＹおよびＦＡＬＵのソースデータ（Ｓ０、Ｓ１）となる。ＤＯ１出力は、Ｄ１−Ｂｕｓ１１０を介してのＦＤＩＶ０、ＦＤＩＶ１、ＦＰＯＷＥＲのソースデータ、ｍｏｖｅ命令によるＧ−Ｂｕｓ１００を介してのメモリ−メモリ間、メモリ−レジスタ間データ転送のソースデータとなる。書込データ（ＤＩ入力）としては、ＦＭＰＹ（ＤＲＦＭ）、ＦＡＬＵ出力（ＤＲＦＡ０−３）、Ｄ２−Ｂｕｓ１１２、Ｇ−Ｂｕｓ１００のいずれかが選択される。
【００４３】
この３ポートＲＡＭ３５０においては、同一番地に対して同一サイクル内で読出／書込を実行することはできない。
【００４４】
マイクロ動作による読出データとしては、ＨＯＬＤがイネーブルとなる直前のデータが、ＨＯＬＤ期間中およびＨＯＬＤがディセーブルとなった後にマイクロ動作によってメモリ読出動作を行なうまで保持される。ＨＯＬＤ期間中においても、チップ外部から直接メモリにアクセスすることが可能である。読出データはＤＯ１からＧ−Ｂｕｓ１００に出力される。
【００４５】
(1.2.2.1.2)   浮動小数点乗算器（ＦＭＰＹ）
ＦＭＰＹは、ｆｍｐｙおよびｆｍａｃ命令により、２つの３２ビット浮動小数点データの乗算を２ステージで行なう。結果は出力レジスタＤＲＦＭに書込まれる。演算フラグはＦＭＣＰＲ経由でフラグレジスタに報告される。
【００４６】
入力０としてはＦＬＭ読出データ（ｓ０）、ＦＡＬＵ出力レジスタ（ＤＲＦＡ０−３）、ＦＭＰＹ出力レジスタ（ＤＲＦＭ）を受ける。入力１としてはＦＬＭ読出データ（ｓ１）、ＦＭＰＹ出力レジスタ（ＤＲＦＭ）を受ける（入力レジスタにＦＡＬＵ出力レジスタが接続されていないことに注意）。出力はＦＭＰＹ出力レジスタ（ＤＲＦＭ）に接続されている。演算フラグとしてはＮａＮ，Ｏｐｅｒａｎｄ  Ｅｒｒｏｒ，Ｉｎｆｉｎｉｔｙ，Ｕｎｄｅｒｆｌｏｗ，Ｚｅｒｏ，Ｎｅｇａｔｉｖｅがある。
【００４７】
ＦＭＰＹにおける入力データ、出力データおよび演算フラグの間の関係を表３に示す。表３においてＤｅＮｏｒｍは非正規化数を、Ｎｏｒｍは正規化数を、Ｉｎｆは無限大を、ＮａＮはＮｏｔ−ａ−Ｎｕｍｂｅｒ（非数字）を、それぞれ表わす。
【００４８】
【表３】
2007183998.tif 000005
【００４９】
(1.2.2.1.3)   浮動小数点算術論理演算器（ＦＡＬＵ）
ＦＡＬＵは、３２ビット浮動小数点データに対する算術論理演算を３ステージ（ｆｔｈｒｕ，ｆａｂｓ命令は１ステージ）、３２ビット固定小数点データの比較演算（ｆｉｃｍｐ命令）を１ステージでそれぞれ行なう。結果は出力レジスタ（ＤＲＦＡ０−３）に書込まれる。演算フラグはＦＭＣＰＲ経由でフラグレジスタに報告される。演算フラグのうちＮａＮフラグ、Ｚｅｒｏフラグ、Ｎｅｇａｔｉｖｅフラグは、クリップコード生成器にも出力される。
【００５０】
実行ステージ数が異なる演算命令による出力が競合した場合、出力レジスタへの書込、演算フラグの出力が競合することとなるが、先行する命令の結果の出力が保証され、後発の命令は無視される。例えば実行ステージ数３のｆａｄｄ命令の２命令後に実行ステージ１のｆｔｈｒｕ命令が与えられた場合、先行のｆａｄｄ命令の出力が保証され、後発のｆｔｈｒｕ命令は無視される。
【００５１】
ＦＡＬＵの入力０としてはＦＬＭ読出データ（ｓ０）、ＦＡＬＵ出力レジスタ（ＤＲＦＡ０−３）、およびＦＭＰＹ出力レジスタ（ＤＲＦＭ）がある。入力１としてはＦＬＭ読出データ（ｓ１）、ＦＡＬＵ出力レジスタ（ＤＲＦＡ０−３）、ＦＭＰＹ出力レジスタ（ＤＲＦＭ )がある。出力はＦＡＬＵ出力レジスタ（ＤＲＦＡ０−３）に接続されている。なおＤＲＦＡ１／２／３は、ｆｔｈｒｕ命令の行先に指定された場合およびｆｍａｃ１／２／３命令が実行されたときにそれぞれ更新される。行先としては、ＦＬＭまたはＤＲＦＡ０を指定しているｆｔｈｒｕ命令およびｆｍａｃ１／２／３命令以外の命令ではＤＲＦＡ０が更新される。
【００５２】
演算フラグはＮａＮ，Ｏｐｅｒａｎｄ  Ｅｒｒｏｒ，Ｉｎｆｉｎｉｔｙ，Ｕｎｄｅｒｆｌｏｗ，Ｅｑｕａｌ（ｆｉｃｍｐ命令）、Ｏｖｅｒｆｌｏｗ（整数変換時）、ＺｅｒｏおよびＮｅｇａｔｉｖｅを含む。
【００５３】
ＦＡＬＵにおいて２ソースの加算が行なわれるｆａｄｄ，ｆｍａｃ１／２／３命令における入出力データ、演算フラグの関係を表４に示す。
【００５４】
【表４】
2007183998.tif 000006
【００５５】
ＦＡＬＵにおいて２ソースの減算が行なわれるｆｓｕｂ命令における入出力データおよび演算フラグの関係を表５に示す。
【００５６】
【表５】
2007183998.tif 000007
【００５７】
ＦＡＬＵにおいてソース０を０とソース１との間でクランプを行なうｆｃｌｍｐ命令における入出力データおよび演算フラグの関係を表６に示す。
【００５８】
【表６】
2007183998.tif 000008
【００５９】
ＦＡＬＵにおける１ソース命令（ｆｔｈｒｕ，ｆａｂｓ，ｆｔｒａｎ，ｆｔｒａｎｕ）における入出力データおよび演算フラグの関係を表７に示す。
【００６０】
【表７】
2007183998.tif 000009
【００６１】
ＦＡＬＵにおいて２つの３２ビット固定小数点データの一致比較を行なうｆｉｃｍｐ命令では、２つのデータが同じ場合にＥｑｕａｌフラグがセットされる。他の演算フラグについては前の状態が保持される。ｆｉｃｍｐ命令の実行ステージ数は１である。
【００６２】
(1.2.2.1.4)   Ｆ２Ｏバッファ部
Ｆ２Ｏバッファ部は、８ワード×３２ビットのレジスタファイルからなり、ＦＭＰＹまたはＦＡＬＵの出力をＯ−Ｂｕｓ１１６を介してＯＦＩＦＯに転送するまでの中間バッファとして機能する。ＦＰＵ命令で行先をＯＦＩＦＯに指定した場合、ＯＦＩＦＯ出力モードの如何にかかわらず、４つのＦＰＵで並列してＦＭＰＹ出力またはＦＡＬＵ出力がレジスタに書込まれる。レジスタからデータを読出してＯ−Ｂｕｓ１１６経由でＯＦＩＦＯにデータを転送する場合、ＯＦＩＦＯ部がＦ２Ｏバッファ部に対して読出ポインタおよびイネーブルの制御を行なう。
【００６３】
(1.2.3)   ［ＦＰＯＷＥＲ／ＦＤＩＶ部１１４］
次に、図２および図３に示されるＦＰＯＷＥＲ／ＦＤＩＶ部１１４について説明する。ＦＰＯＷＥＲ／ＦＤＩＶ部１１４は、図４に示されるようにＦＤＩＶ０（３１０）、ＦＤＩＶ１（３１２）およびＦＰＯＷＥＲ演算回路３１４を含む。以下、各部について説明する。
【００６４】
(1.2.3.1)   浮動小数点除算器（ＦＤＩＶ０、ＦＤＩＶ１）
浮動小数点除算器は、単精度浮動小数点の精度で、入力データの逆数の演算を行なう。この幾何学演算コアは、同じ構成の除算器を二つ（ＦＤＩＶ０、ＦＤＩＶ１）含む。ｆｄｉｖ０命令によってＦＤＩＶ０、ｆｄｉｖ１命令によってＦＤＩＶ１がそれぞれ演算を行なう。
【００６５】
浮動小数点除算器には、ＦＬＭ０−３のいずれか一つのデータがＤ１−Ｂｕｓ１１０を介して入力として与えられる。行先にＦＬＭが指定された場合には、出力はＤ２−Ｂｕｓ１１２を介してＦＬＭに転送される。浮動小数点除算器の演算実行ステージ数は９である。
【００６６】
ローカルメモリ（ＦＬＭ）／レジスタ（ＤＲＦＡ０−１、ＤＲＦＰ）からＦＤＩＶ０−１への、Ｄ１−Ｂｕｓ１１０を介した転送には１ステージを要する。そのためｆｄｉｖ０、ｆｄｉｖ１命令では、命令フェッチから結果の書込までは１４ステージとなる。
【００６７】
ｆｄｉｖ０，ｆｄｉｖ０，ｆｐｏｗ，ｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ命令ではＤ２−Ｂｕｓ１１２を介したデータ転送が行なわれるが、Ｄ２−Ｂｕｓ１１２の転送で競合が発生した場合には、先行命令が優先される。後発命令については演算は実行され出力レジスタに結果の書込は行なわれるが、Ｄ２−Ｂｕｓ１１２転送を用いたＦＬＭへの書込はキャンセルされる。ｆｄｉｖ０，ｆｄｉｖ１命令は実行ステージ数が最も多いＦＬＭ書込まで動作が保証される。
【００６８】
浮動小数点除算器への入力はＤ１−Ｂｕｓ１１０経由でのＦＬＭデータである。出力はＤＲＦＡ０／ＤＲＦＡ１からＤ２−Ｂｕｓ１１２経由でＦＬＭ０−３に与えられる。この場合マルチキャスト可能である。演算フラグはＤｉｖｉｄｅ  ｂｙ  Ｚｅｒｏ，ＮａＮ，Ｏｐｅｒａｎｄ  Ｅｒｒｏｒ，Ｉｎｆｉｎｉｔｙ，Ｕｎｄｅｒｆｌｏｗ，ＺｅｒｏおよびＮｅｇａｔｉｖｅを含む。
【００６９】
ＦＤＩＶ０、１における入出力データおよび演算フラグの間の関係を表８に示す。
【００７０】
【表８】
2007183998.tif 000010
【００７１】
(1.2.3.2)   浮動小数点べき乗演算器（ＦＰＯＷＥＲ）
図８を参照して、ＦＰＯＷＥＲは、テーブルルックアップによりべき乗（ｘのｙ乗）の計算を行なう。具体的には、ＦＰＯＷＥＲは、２を底とする対数および２のべき乗のテーブルを含むＦＬＵＴ３１６と、二つの浮動小数点データｘ（底）およびｙ（指数）を受け、ＦＬＵＴ３１６を参照してｘのｙ乗の計算を行なうためのＦＰＯＷＥＲ演算部４７０とを含む。
【００７２】
入力のうち底ｘは、ＦＬＭ０−３のいずれかから読み出されたデータであって、Ｄ１−Ｂｕｓ１１０またはＤ２−Ｂｕｓ１１２を介してＦＰＯＷＥＲに与えられる。指数ｙは、ｍｏｖｅ命令またはｌｏａｄ（ｌｄｒ）命令によって指数レジスタＥＸＰＲに設定しておかなければならない。ＦＰＯＷＥＲは演算コードをも受け、演算コードによって１／ｘ、√ｘ、１／√ｘ、およびｘのｙ乗の演算選択を行なう。
【００７３】
ＦＰＯＷＥＲ演算部４７０は、ｘおよびｙを受け、ｘをアドレスとしてＦＬＵＴ３１６をアクセスすることにより２を底とするｘの対数をＦＬＵＴ３１６から取出す処理を行なうための前処理部４７２と、ＦＬＵＴ３１６から出力されるｘの対数と前処理部４７２を経由して与えられるｙの値とを乗算するための乗算器４７４と、乗算器４７４の出力結果（仮にこれをωとする）をアドレスとしてＦＬＵＴ３１６をアクセスすることによってＦＬＵＴ３１６から２のω乗の値（すなわちｘのｙ乗）を取出し出力するための後処理部４７６とを含む。これら処理は順次進行していく処理なので、パイプライン化することができ、それによってべき乗計算を高速に行なうことができる。
【００７４】
なお、指数ｙについて、ｙ＝−１とすると逆数、ｙ＝０．５とすると平方根（ｓｑｒｔ）、ｙ＝−０．５とすることによって正規化（１／√ｘ）の意味となる。ＦＰＯＷＥＲを用いてこれらの演算を行なうために用意された命令（ｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ）については、前処理部４７２は上述した処理でｙの値を無視し、乗算器４７４に命令に応じた定数を与えて上述した処理を行なわせる。したがってＥＸＰＲレジスタに指数ｙを設定しておく必要はなく、実際にＥＸＰＲに上記した値以外の値が設定されていても無視されるので問題はない。またＥＸＰＲレジスタにそれぞれ−１／０．５／−０．５をそれぞれ設定することによって逆数／平方根／正規化を行なうことも可能である。こうした処理は実質的にｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ命令と同じ演算結果を与える。しかし実行ステージは１ステージ長い。したがって専用の命令を用意することにより処理が高速化される。
【００７５】
ＥＸＰＲレジスタに設定される指数ｙは、浮動小数点データでなければならない。ただし、ＥＸＰＲレジスタにｙを書込んだ後、２ステージかけてＦＰＯＷＥＲ部はｙを浮動小数点から２４ビットの固定小数点（２の補数の整数９ビット、小数１５ビット）に変換する。したがってｙはこの固定小数点データのとり得る範囲内になければならない。ｙがこの範囲外である場合にはＦＰＯＷＥＲはＯｐｅｒａｎｄ  Ｅｒｒｏｒフラグを出力し、強制的に固定小数点表現での上限または下限にｙの値をクランプして演算を行なう。
【００７６】
ＦＰＯＷＥＲを用いたｆｒｃｐ命令ではＤｉｖｉｄｅ  ｂｙ  Ｚｅｒｏフラグは出力されない。
【００７７】
ＦＰＯＷＥＲでの各命令の実行ステージ数は、ｆｐｏｗ命令が５、ｆｒｃｐ命令が４、ｆｓｑｒｔ命令が４、ｆｎｏｒｍ命令が４である。ただしＦＬＭ０−３からのＤ１−Ｂｕｓ１１０転送には１サイクルが別途必要である。
【００７８】
Ｄ２−Ｂｕｓ１１２を用いるｆｄｉｖ０、ｆｄｉｖ１ 、ｆｐｏｗ，ｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ命令間でＤ２−Ｂｕｓ１１２の転送が競合した場合、先行命令が優先される。後発命令については、演算自体は実行され結果が出力レジスタに書込まれるが、Ｄ２−Ｂｕｓ１１２転送によるＦＬＭ書込はキャンセルされる。
【００７９】
ｆｄｉｖ０、ｆｄｉｖ１命令では、実行ステージ数が最も長いＦＬＭ書込まで動作は保証される。ｆｐｏｗ命令とｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ命令の間では、ｆｐｏｗ命令のＦＬＭ書込が保証され、後発のｆｒｃｐ，ｆｓｑｒｔ，ｆｎｏｒｍ命令の書込みはキャンセルされる。
【００８０】
ＦＰＯＷＥＲの入力はＤ１−Ｂｕｓ１１０経由のＦＬＭ０−３である。出力はＤＲＦＰからＤ２−Ｂｕｓ１１２を経由してＦＬＭ０−３に与えられる。演算フラグはＮａＮ，Ｏｐｒａｎｄ  Ｅｒｒｏｒ，Ｉｎｆｉｎｉｔｙ，Ｕｎｄｅｒｆｌｏｗ，Ｚｅｒｏ，Ｎｅｇａｔｉｖｅを含む。
【００８１】
ＦＰＯＷＥＲにおける入出力データと演算フラグとの間の関係を表９に示す。
【００８２】
【表９】
2007183998.tif 000011
【００８３】
(1.2.4)   ［クリップコード発生器３１８］
図４を参照して、幾何学演算コア８４はさらに、クリップコード発生器３１８を含む。クリップコード発生器３１８（ＣＧＵ）は、クリップテストのフラグを取り扱う。より詳しくはクリップコード発生器３１８ は、ｆｃｌｉｐｔ命令によってＦＡＬＵで行なわれる加減算によって生成されるフラグのうち、ＦＰＵ０ −２のＮａＮフラグ、Ｚｅｒｏフラグ、Ｎｅｇａｔｉｖｅフラグを用いて、演算結果が０以上（！ＮａＮ＆（！Ｎ＋Ｚ）），０以下（！ＮａＮ＆（Ｎ＋Ｚ））を判定し、最大過去２回のｆｌｉｐｔ命令におけるフラグ状態との間でフラグの論理演算を行なう。その結果によってクリップコード発生器３１８はプリミティブ（点・線・三角形）とビューボリュームとの位置関係を判定する。判定した結果は、クリップコードレジスタＣＣＲに書込まれる。
【００８４】
プリミティブを識別するためのＣＣＲ＜３１：３０＞には、初期値を設定しておく必要がある。リセット状態ではＣＣＲ＝０である。
【００８５】
クリップコード発生器３１８は３２ビットシフトレジスタ（ＣＣＲ）を有しており、ＣＣＲは４つの部分に分けられている。より具体的には、図９を参照して、クリップコード発生器３１８ は６ビットシフトレジスタ３６０と６ビットシフトレジスタ３６２と６ビットシフトレジスタ３６４とクリップアウトフラグ発生論理３６６とを含む。６ビットシフトレジスタ３６０−３６４は対応する浮動小数点演算ユニット（ＦＰＵｘ）に近く設けられている。ＦＰＵ０（１３８）〜ＦＰＵ２（１４２）からの３つのフラグが同時にＣＣＲの各部にシフトインされる。ＣＣＲは命令を用いて参照することができる。６ビットシフトレジスタ３６０−３６４の出力はクリップアウトフラグ発生論理３６６に与えられ、クリップアウトフラグ発生論理３６６がクリップコード等の制御信号を発生する。
【００８６】
(1.2.5)   ［整数演算処理ユニット（ＩＰＵ１０６）］
図１０を参照して、ＩＰＵ１０６は、３２ビット整数算術論理演算ユニット（ＩＡＬＵ３７０）と、３２ビット整数バレルシフタ（ＩＳＦＴ３７４）と、Ｏ−Ｂｕｓ１１６に接続されたＩ２Ｏバッファ３７８と、ＩＡＬＵ３７０の出力をラッチするためのレジスタＤＲＩＡ３７２と、ＩＳＦＴ３７４の出力をラッチするためのレジスタＤＲＩＳ３７６とを含む。
【００８７】
ＩＡＬＵ３７０の一方の３２ビット入力には、ＩＬＭからのソース１とＤＲＩＳ３７６の出力とＤＲＩＡ３７２の出力とを受ける３入力セレクタ３８０の出力が接続されている。ＩＡＬＵ３７０の他方の入力にはＩＬＭからのソース１とＤＲＩＡ３７２の出力とＤＲＩＳ３７６の出力とを受ける３入力セレクタ３８４の出力が接続されている。ＤＲＩＡ３７２およびＤＲＩＳ３７６の出力はまたセレクタ３８６を介してＩ２Ｏバッファ３７８に接続される。
【００８８】
ＩＡＬＵ３７０とＩＳＦＴ３７４とはいずれも一つのマシンサイクル内に一つの論理演算を完了することができる。一方、他の種類の算術演算／シフト演算は２マシンサイクルで行なわれる。ＩＡＬＵ３７０はビットセット／ビットリセット／ビットテスト演算を行なうことができる。ＩＡＬＵ３７０とＩＳＦＴ３７４とによってデータパッキング演算処理をパイプライン形式で行なうこともできる。表１０にＩＡＬＵ３７０とＩＳＦＴ３７４とのパイプラインステージ数を一覧表形式で示す。
【００８９】
【表１０】
2007183998.tif 000012
【００９０】
ＩＰＵ１０６は二つのデータフォーマットの取扱が可能である。すなわち３２ビットの２の補数整数フォーマットと３２ビット符号なし整数フォーマットとである。これらのフォーマットを図１１および図１２にそれぞれ示す。
【００９１】
行先（ＤＳＴ）＝ＯＦＩＦＯ０に指定された場合、ＩＡＬＵ３７０／ＩＳＦＴ３７４の演算結果はＩ２Ｏバッファ３７８に書込まれる。同時にＩＰＵ１０６からＯＦＩＦＯ部に対して、ＯＦＩＦＯ書込信号のみが送られ、ＯＦＩＦＯ出力モード信号は送られない。ＩＰＵ１０６からの書込リクエスト信号がアサートされた場合、ＯＦＩＦＯ部は強制的にＯＦＩＦＯ（ＩＰＵ）と設定する。
【００９２】
整数演算命令に指定できるＯＦＩＦＯ書込モード信号はＯＦＩＦＯ（ＩＰＵ）のみである。それ以外のＯＦＩＦＯ１−ＯＦＩＦＯｆ（いずれもＦＰＵ選択）が記述された場合、アセンブラ段階でエラーとなるようにしておく。
【００９３】
Ｉ２Ｏバッファ３７８への書込イネーブル信号はＩＰＵ１０６自身が生成する。Ｉ２Ｏバッファ３７８の書込ポインタはＯＦＩＦＯ部が制御する。Ｉ２Ｏバッファ３７８の読出ポインタはＯＦＩＦＯ部が制御する。Ｉ２Ｏバッファ３７８からの読出データはＯ−Ｂｕｓ１１６に出力される。この出力３状態バッファのイネーブル信号はＯＦＩＦＯ部が制御する。
【００９４】
ＩＰＵ１０６でのライトバック（ＷＢ）ステージでの競合が発生した場合、先行命令が優先される。
【００９５】
(1.2.6)   ［命令メモリ９２］
命令メモリ９２は、マイクロコードを格納するための、８ｋワード×３２ビットの単一ポートメモリである。各マイクロコードのビット幅は、ＡＧＰシステムに適した３２ビットである。図１３に命令メモリ９２のブロック図を示す。命令メモリ９２は、単一ポートメモリ１２２と、プログラムカウンタの出力、ＡＤ１およびＡＤ２に接続されそれらのいずれかを選択して単一ポートメモリ１２２のアドレスポートに与えるためのセレクタ１４８とを含む。単一ポートメモリ１２２のデータポートは、Ｇ−Ｂｕｓ１００に接続されており、またデータポートの出力はシーケンサ９４にも接続されている。
【００９６】
命令メモリ９２は、各マシンサイクルでプログラムカウンタによって指し示された命令コードをシーケンサ９４に与えることができる。命令メモリ９２は、ホストからはＡＧＰポート８０を介してアクセスすることができる。命令メモリ９２は、ホストＣＰＵ５２の主記憶装置５６および幾何学演算コア内のメモリおよびレジスタにマッピングされている。したがってホストＣＰＵ５２は、ＡＧＰポート８０を介してＡＤ２上に書込アドレスを与えてＰＣＩ「メモリ書込」コマンドを使用することによって命令メモリ９２にマイクロコードを書込むことができる。ＰＣＩ「メモリ読出」コマンドが発行された場合、命令メモリ９２はＡＧＰポート８０を介してＡＤ１バス上に出力される読出アドレスのデータをＧ−Ｂｕｓ１００を介してＡＧＰポート８０に転送することができる。
【００９７】
(1.2.7)   ［シーケンサ９４］
シーケンサ９４は各マシンサイクルで命令メモリ９２から与えられるマイクロコードをデコードし、幾何学演算コアの各部に与えられる制御信号を生成するためのものである。
【００９８】
図１４を参照して、シーケンサ９４は以下のユニットを含んでいる。
（１）  命令レジスタ２３０
（２）  命令デコーダ２４０
（３）  プログラムカウンタ制御回路２５４
（４）  割込制御回路２４２
（５）  リセット制御回路２４６
（６）  ウェイト制御回路２４４
（７）  １３ビットのシステムモードレジスタ（ＳＭＤＲ２５０）
（８）  システムステータスレジスタ（ＳＲ２３２）
（９）  グラフィックスコマンドレジスタ（ＧＣＲ２３４）
（１０）  フラグレジスタ（ＦＲ２４８）
命令メモリ９２から与えられた命令コードは命令レジスタ２３０内に格納され命令デコーダ２４０によってデコードされる。次のステップでは、割込制御回路２４２、リセット制御回路２４６およびウェイト制御回路２４４が命令デコーダ２４０の出力とＳＭＤＲ２５０が示す現在のステータスとに応じて、各機能ユニットに対して必要な制御信号を生成する。
【００９９】
プログラムカウンタ制御回路２５４は、ＰＣにロードされるべきソースを選択し、さらに命令デコーダ２４０の出力に応じてＰＣの修飾を制御する。プログラムカウンタ制御回路２５４は以下に示すＰＣ修飾モードをサポートしている。
【０１００】
（１）  ＰＣインクリメント
（２）  ジャンプ
（３）  条件ジャンプ
（４）  サブルーチンコール
（５）  条件サブルーチンジャンプ
（６）  サブルーチンからの復帰
条件ジャンプについては、ＦＲ２４８の内容に基づいて計算された現在のコンディションをオペランドによって特定されたコンディションと比較する。プログラムカウンタ制御回路２５４はまた、８レベルのＰＣスタックとループカウンタ（ＬＣ０，ＬＣ１）とを含む。このＰＣスタックによって４重のサブルーチンコールのネストが可能となる。二つのループカウンタによって２レベルのハードウェアによるループ演算がサポートされる。プログラムカウンタ制御回路２５４は活性化されたループカウンタに対応するゼロフラグを検出してＰＣの修飾を制御する。
【０１０１】
図１５を参照して、プログラムカウンタ制御回路２５４は、メモリ間接分岐制御部２６０と、ループ制御部２６２と、ビットテスト部２６４と、コンディションコードテスト部２６６と、ＰＣスタック制御部２６８と、ＰＣ選択制御部２７０とを含む。
【０１０２】
メモリ間接分岐制御部２６０は、Ｇ−Ｂｕｓ１００に接続された３２ビットの幾何学演算モードレジスタ（ＧＭＤＲ）と、Ｇ−Ｂｕｓ１００に接続された各３２ビットの３２個の参照イネーブルフラグレジスタ（ＲＥＮＢＲ０〜ＲＥＮＢＲ３１）と、３２ビットのグラフィックスコマンドレジスタ（ＧＣＲ）と、Ｇ−Ｂｕｓ１００に接続にされた６ビットの特殊ケースコマンドレジスタ（ＳＣＣＲ）と、ＧＭＤＲの内容とＲＥＮＢＲの内容とを比較する比較回路２８０と、ＧＣＲ＜３１：２６＞とＳＣＣＲとの内容を比較するための比較回路２８２と、ＡＤ１，ＡＤ２，Ｇ−Ｂｕｓ１００，比較回路２８０ の出力、およびＧＣＲ＜３１：２６＞を受ける、９６ワード×１６ビットのジャンプアドレステーブル（ＪＡＴ２８４）（ＪＡＴｘ：ｘ＝０〜９５）とを含み、ｊｒｍｄ命令によるメモリ間接分岐の制御を行なう。
【０１０３】
ループ制御部２６２は、Ｇ−Ｂｕｓ１００に接続されたループカウンタＬＣ０およびループカウンタＬＣ１と、ループ制御回路２９０とを含む。
【０１０４】
ビットテスト部２６４は、Ｇ−Ｂｕｓ１００に接続されたビットテストターゲットレジスタ（ＢＴＲ）と、ビットテスト回路２９２とを含む。
【０１０５】
コンディションコードテスト部２６６は、Ｇ−Ｂｕｓ１００に接続されたフラグレジスタＦＲ０〜ＦＲ２と、コンディションコードテスト回路２９４とを含む。
【０１０６】
ＰＣスタック制御部２６８は、スタックポインタ制御回路２９６と、ＰＣスタック２９８とを含む。
【０１０７】
ＰＣ選択制御部２７０は、ＰＣ３０４と、ＰＣ３０４の出力を受けるインクリメンタ３００と、ＰＣ３０４の出力、インクリメンタ３００の出力、ＰＣスタック２９８の出力、ＧＣＲの出力、ＪＡＴ２８４の出力、および命令メモリ９２の出力を受けてそのうちの一つを選択してＰＣ３０４に与えるためのセレクタ３０２とを含む。インクリメンタ３００の出力はＰＣスタック２９８にも与えられる。
【０１０８】
(1.2.8)   ［アドレス生成装置（ＡＧＵ９６）］
ＡＧＵ９６は、シーケンサ９４の制御にしたがって、二つのソースと一つの行先についてのアドレスデータとレジスタ識別コードとを生成する。これら２つのソースおよび１つの行先とは、内部データメモリおよび／または制御レジスタである。
【０１０９】
図１６を参照して、ＡＧＵ９６は、３つの独立したアドレス生成サブユニット（ＡＧＵ０（１５２）〜ＡＧＵ２（１５６））と、演算コードを受けてこれらを制御する信号を出力するためのＡＧＵコントローラ１５０とを含む。これらはいずれもＧ−Ｂｕｓ１００に接続されている。
【０１１０】
ＡＧＵコントローラ１５０はモジュロモードレジスタ（ＭＲｘ，４ビット）［ｘ＝０−７］を含む。これら３つのサブユニットは、それぞれ二つのソースと一つの行先とに対応するアドレスデータを生成する。各サブユニットは、各マシンサイクルにおいてアドレス（９ビット）またはレジスタ識別コード（８ビット）を生成することができる。各サブユニットは以下のハードウェアリソースを含んでいる。
【０１１１】
（１）  アドレスレジスタ（ＡＲｎｘ，９ビット）［ｎ＝０，１，２］［ｘ＝０−７］
（２）  インデックスレジスタ（ＩＸＲｎｘ，９ビット）［ｎ＝０，１，２］，［ｘ＝０−７］
（３）  二つの全加算器（９ビット）
より詳細には、ＡＧＵ０（１５２）は、ＩＸＲ００−０７（１６０）と、ＡＲ００−０７（１６２）と、加算器１７０と、加算器１７２とを含む。ＩＸＲ００−０７（１６０）の入力はＧ−Ｂｕｓ１００に接続される。ＩＸＲ００−０７（１６０）の出力はＧ−Ｂｕｓ１００とセレクタ１６８の一つの入力とに接続される。ＡＲ００−０７（１６２）の入力は、セレクタ１６４の出力に接続される。セレクタ１６４は３つの入力をもち、それらにはＧ−Ｂｕｓ１００のデータと、モジュロアドレス［３：０］と、加算器１７２の出力とが与えられる。ＡＲ００−０７（１６２）の出力はＧ−Ｂｕｓ１００と、加算器１７０の入力と、セレクタ１７４の一つの入力とに接続されている。セレクタ１６８の他方の入力には０が与えられている。加算器１７２の他方の入力にはセレクタ１６６の出力が与えられる。セレクタ１６６は３入力であり、それらには変位（Ｄｉｓｐｌａｃｅｍｅｎｔ）と、１と、−１とが与えられる。セレクタ１７４の他方の入力には加算器１７２の出力が与えられる。加算器１７２の出力はＡＤ０バスに接続されておりソース０のアドレスを与える。
【０１１２】
同様にＡＧＵ１（１５４）はＩＸＲ１０−１７（１８０）と、ＡＲ１０−１７（１８2 ）と、セレクタ１８４と、セレクタ１８６と、セレクタ１８８と、加算器１９０と、加算器１９２と、セレクタ１９４とを含む。ＡＧＵ１（１５４）の構造はほぼＡＧＵ０（１５２）と同様であるが、セレクタ１９４が３入力であり、ホストからの読出アドレス（１３ビット）がそのうちの一つに与えられている点でＡＧＵ０（１５２）のセレクタ１７４と相違している。セレクタ１９４の出力はＡＤ１バスに接続されており、計算されたデータすなわちホストからの読出アドレス（ソース１アドレス）を与える。
【０１１３】
ＡＧＵ２（１５６）もほぼＡＧＵ１（１５４）と同様の構成を持っており、ＩＸＲ２０−２７（２００）と、ＡＲ２０−２７（２０２）と、セレクタ２０４と、セレクタ２０６と、セレクタ２０８と、加算器２１０と、加算器２１２と、セレクタ２１４とを含む。セレクタ２１４もセレクタ１９４と同様３入力であるが、ホストからの読出アドレスに変えて書込アドレスが与えられる点がセレクタ１９４と異なる。セレクタ２１４の出力はＡＤ２バスに接続され、計算されたデータすなわちホストからの書込アドレス（行先アドレス）を与える。
【０１１４】
たとえばＡＧＵコントローラ１５０について述べると、加算器１７０はＩＸＲ００−０７（１６０）とＡＲ００−０７（１６２）との加算を行なう。他の加算器１７２は加算器１７０の出力と変位またはオフセットデータとの加算を行なう。ＩＸＲ００−０７（１６０）が命令によって指定されていないときは、加算器１７０の入力は常に０である。（ＡＲｎｘ、ＩＸＲ、オフセット）モードが発行された場合、ＡＧＵはオフセット値のＭＳＢをゼロと置き換えることにより符号なしの３ビット整数として取り扱う。
【０１１５】
(1.2.9)   ［データメモリ（ＦＬＭ０−３，ＦＬＵＴ，ＩＬＭ，ＩＦＩＦＯ）］
データメモリは３つのカテゴリに分けられる。すなわちＦＬＭ０（１３０）〜ＦＬＭ３（１３６）と、ＦＬＵＴ１４６と、ＩＬＭ１０４とである。ＦＬＭ０−３は５１２ワード×３２ビットの３ポート（２Ｒ／１Ｗ）ＲＡＭであって、各浮動小数点演算ユニット内にデータバッファとして設けられる。ＦＬＵＴはＦＰＯＷＥＲ／ＦＤＩＶ部１１４に含まれるＦＰＯＷＥＲ演算回路３１４のための、５１２ワード×３２ビットの３ポート（２Ｒ／１Ｗ）のテーブルＲＡＭである。ＩＬＭ１０４もまた５１２ワード×３２ビットの３ポート（２Ｒ／１Ｗ）の、ＩＰＵ１０６のためのバッファＲＡＭである。ＦＬＭ０（１３０）〜ＦＬＭ３（１３６）と、ＦＬＵＴ１４６と、ＩＬＭ１０４とに対して、１マシンサイクルで二つの読出と一つの書込処理とが実行できる。
【０１１６】
入力ＦＩＦＯ９８は、幾何学演算コアによって処理すべきグラフィックデータをラッチする。入力ＦＩＦＯ９８はＦＩＦＯ型のバッファであって、ＡＧＰポート８０と幾何学演算コアとの間のデータ交換に利用される。入力ＦＩＦＯ９８は２５６ワード×３２ビットのＦＩＦＯからなる。入力ＦＩＦＯ９８への書込動作はシーケンサ９４によって制御される。
【０１１７】
ＦＩＦＯ＿Ｐ２Ｃの「ＥＮＤ」信号がアサートされると、それは入力ＦＩＦＯ９８が空ということであって、ＦＩＦＯ＿Ｐ２Ｃから入力ＦＩＦＯ９８への転送が自動的に開始される。入力ＦＩＦＯ９８が一杯であると、入力ＦＩＦＯ９８が空になるまで転送は活性化されない。この書込動作は幾何学演算コアが待ち状態のときでも許される。ＩＦＩＦＯ読出動作はそれぞれのｍｏｖｅ命令（ｍｖ）を発行することにより開始される。その結果、入力ＦＩＦＯ９８へのグラフィックデータの転送の前に、その次のグラフィックスコマンドが常に幾何学演算コアに転送されなければならない。
【０１１８】
読出／書込のためのアドレスデータは、入力ＦＩＦＯ９８を除きアドレスバス（ＡＤ０，ＡＤ１およびＡＤ２）を介して各データメモリに転送される。次の表１１は、各データメモリに接続されている入出力バスをリストしたものである。
【０１１９】
【表１１】
2007183998.tif 000013
【０１２０】
命令セット
(1.3)   命令パイプライン
３次元グラフィックス用幾何学処理プロセッサは６ステージパイプラインによって命令を実行する。６ステージとは、命令フェッチ（ＩＦ），デコード（ＤＥＣ），ソースデータ読出（ＲＤ），実行（ＥＸＥ１およびＥＸＥ２）、およびライトバック（ＷＢ）である。各ステージは１マシンサイクルで実行される。整数演算が実行されたり、組合せの演算が実行されたり、ジャンプ動作が実行されたりする場合、パイプラインステージの数は異なってくる。図１７に３次元グラフィックス用幾何学処理プロセッサでの命令パイプラインを模式的に示す。表１２に各パイプラインステージにおける演算を一覧表形式で示す。
【０１２１】
【表１２】
2007183998.tif 000014
【０１２２】
さらに表１３に、各ユニットにおけるステージ数を一覧表形式で示す。
【０１２３】
【表１３】
2007183998.tif 000015
【０１２４】
(1.4)   命令
命令セットは以下のグループに分類される。
【０１２５】
（１）  プログラム制御（１２命令）
（２）  Ｍｏｖｅ（２命令）
（３）  浮動小数点演算（１６命令）
（４）  固定小数点演算（９命令）
以下、これらについて順に説明する。
【０１２６】
(1.4.1)   ［プログラム制御命令］
プログラム制御命令は、ジャンプ、条件ジャンプ、および他の、ＰＣおよびアドレスレジスタの内容に影響を与える命令を含んでいる。これらプログラム制御命令について表１４に示す。
【０１２７】
【表１４】
2007183998.tif 000016
【０１２８】
(1.4.2)   ［Ｍｏｖｅ命令］
Ｍｏｖｅ／Ｌｏａｄ命令はＧ−Ｂｕｓ１００およびＯ−Ｂｕｓ１１６上でのデータの移動を行なう。これら命令について表１５に一覧表を示す。
【０１２９】
【表１５】
2007183998.tif 000017
【０１３０】
(1.4.3)   ［浮動小数点演算命令］
正規化されていない数が検出されない場合、ＩＥＥＥモードでは全浮動小数点演算命令を１命令サイクルで実行することができる。正規化されていない数が検出された場合、サイクル数は多少増加する。浮動小数点演算命令を表１６に示す。
【０１３１】
【表１６】
2007183998.tif 000018
【０１３２】
(1.4.4)   ［固定小数点演算命令］
固定小数点演算命令を表１７に示す。
【０１３３】
【表１７】
2007183998.tif 000019
【０１３４】
(1.5)   制御レジスタ
以下、命令制御に用いられる制御レジスタ名とその機能について説明する。
【０１３５】
(1.5.1)   ［プログラムカウンタ（ＰＣ）］（図１５）
ＰＣは、命令メモリ９２から次にフェッチされるべき命令のロケーションのプログラムアドレス（１３ビット）を格納するレジスタである。幾何学処理プロセッサが初期化されるとＰＣは０に設定され、どのような命令によっても直接読出したり書込んだりすることはできない。ＰＣ内のプログラムアドレスは、ジャンプ命令の実行時およびサブルーチンからの復帰時を除き１ずつインクリメントされる。サブルーチンへのジャンプ処理を実行するときにはそのときのＰＣの値がＰＣスタックに積まれ、ジャンプアドレスがＰＣにロードされる。ＰＣはリセットされると‘０００Ｈ’となる。
【０１３６】
(1.5.2)   ［システムステータスレジスタ（ＳＲ２３２）］
ＳＲ２３２は、ＩＰＵ１０６、ＦＰＵ０（１３８）〜ＦＰＵ３（１４４）／ＦＤＩＶ／ＦＳＱＲＴ、幾何学処理プロセッサ、ＧＣＲ，ＩＦＩＦＯおよび入力ＦＩＦＯ９８のステータスフラグを格納する。表１８にこれらＳＲ２３２内の各ビットと各ステータスとの関係を示す。ＳＲ２３２はｍｏｖｅ命令で読み出すことができ、行先オペランドとなることはできない。ＳＲ２３２はリセットされると‘００００Ｈ’となる。
【０１３７】
【表１８】
2007183998.tif 000020
【０１３８】
(1.5.3)   ［システムモードレジスタ（ＳＭＤＲ２５０）］（図１４）
ＳＭＤＲ２５０はＦＰＵ／ＦＤＩＶ／ＦＳＱＲＴの例外モード（ＳＭＤＲ＜３：０＞）およびＰＣスタックオーバーフローのためのトラップイネーブルビット（ＳＭＤＲ＜４＞）を格納する。ＳＭＤＲ２５０はｍｏｖｅ命令により読出／書込が可能である。ＳＭＤＲ２５０のビット割当てを表１９に示す。
【０１３９】
【表１９】
2007183998.tif 000021
【０１４０】
もし例外モードが設定されており演算エラーが生ずると、幾何学処理プロセッサはＩＮＴＡ＃信号をアサートして割込シーケンスを要求する。もしＳＭＤＲ＜４＞がセットされているときにＰＣスタックのオーバーフローが起こると、幾何学処理プロセッサはこのときもＩＮＴＡ＃信号をアサートして割込シーケンスを要求する。ＳＭＤＲ２５０はリセットシーケンスでは‘１ｆＨ’に設定される。
【０１４１】
(1.5.4)   ［幾何学演算モードレジスタ（ＧＭＤＲ）］（図１５）
ＧＭＤＲは３２ビットの現在の幾何学演算モードおよび／またはイネーブルフラグレジスタを含む。その値は参照イネーブルレジスタ（ＲＥＮＢＲｘ：０≦ｘ≦３１）と比較され、それによって高速処理が可能な場合を検出する。このマイクロコードをプログラムするプログラマは、ＧＭＤＲのビット割当てを定義し、ＧＭＤＲの特定ビットを命令によってセットまたはクリアしなければならない。
【０１４２】
(1.5.5) 
グラフィックスコマンドレジスタ（ＧＣＲ ）（図１４）
ＧＣＲは３２ビットの入力グラフィックスコマンドレジスタである。このレジスタはｍｏｖｅ命令で読出すことができる。ｊｒｍｄ命令の発行前には、ＩＦＩＦＯの内容をＧＣＲにロードしておかなければならない。ジャンプアドレステーブル（ＪＡＴ）のアドレスを決定するためには演算コード（ＧＣＲ＜３１：２６＞）を用いる。
【０１４３】
(1.5.6)   ［クリップコードレジスタ（ＣＣＲ２５２）］（図１４）
ＣＣＲは３２ビットのレジスタであって、現在の頂点のクリップコードと、直前の二つの頂点のクリップコードと、クリップフラグと、現在のプリミティブモードとを格納している。ＣＣＲはｍｏｖｅ命令により読出／書込ができる。ＣＣＲのビット割当てを表２０に示す。
【０１４４】
【表２０】
2007183998.tif 000022
【０１４５】
プリミティブモードはビット＜３１：３０＞に設定する。図４に示すクリップコード発生器３１８がプリミティブモードを参照してＣＣＲ＜２９：０＞を管理する。ビューボリュームの６つの平面と各頂点との関係がＣＣＲ＜１７：０＞に設定される。ビューボリュームと各頂点との関係がＣＣＲ＜２０：１８＞に設定される。ビューボリュームとオブジェクトとの関係がＣＣＲ ＜２３：２１＞に設定される。ビューボリュームの６平面とオブジェクトとの関係がＣＣＲ＜２９：２４＞に設定される。ｆｃｌｉｐｔ命令が発行されるとｖｅｒｔｅｘ０およびｖｅｒｔｅｘ１クリップコードがそれぞれｖｅｒｔｅｘ１およびｖｅｒｔｅｘ２クリップコードにシフトされる。その後現在のクリップコードがＣＣＲ＜５：０＞に設定される。同時に、クリップフラグが調べられＣＣＲ内にセットされる。ＣＣＲはリセットされると‘００００００００Ｈ’となる。
【０１４６】
(1.5.7)   ［ビットテストターゲットレジスタ（ＢＴＲ）］（図１５）
ＢＴＲ（３２ビット）は、ターゲットデータを格納する。ターゲットデータはｊａｂｔまたはｊｓｂｔ命令のために使用される。ｊａｂｔまたはｊｓｂｔ命令が実行されると、ＢＴＲ［ｎ］，つまりビット位置ｎが命令オペランドによって指定され、命令によって特定されるテスト値（１または０）と比較される。ＢＴＲはｍｏｖｅ命令によって読出および書込ができる。ＢＴＲは‘００００００００Ｈ’にリセットされる。
【０１４７】
(1.5.8)   ［ＰＣスタック２９８］（図１５）
プログラムカウンタスタック（ＰＣＳ）は、ＬＩＦＯ（後入れ先出し）形式で読み書きされる、８レベルの１３ビットレジスタからなる。ＰＣＳはどの命令からも直接読み書きはできない。サブルーチンジャンプ命令が実行されるときには、ＰＣの現在の値が自動的にＰＣＳに積まれ、サブルーチンからの復帰命令が実行されるときには、ＰＣＳの最上位レベルの値がＰＣにロードされる。
【０１４８】
(1.5.9)   ［ループカウンタ（ＬＣ０、ＬＣ１）］（図１５）
ループカウンタＬＣ０とループカウンタＬＣ１とは８ビットカウンタであって、ハードウェアプログラムループを実行すべき回数を特定する。これらカウンタはｍｏｖｅ命令によって読み書きできる。ｄｊａ命令を実行する時には、指定されたループカウンタが１ずつデクリメントされる。カウンタがゼロに等しくなるとＰＣが１インクリメントされループ処理は終了する。カウンタが０に等しくないときにはｄｊａ命令によって指定されたプログラムアドレスがＰＣにロードされる。ループカウンタＬＣ０またはＬＣ１がゼロに設定されると、ループオペレーションの数はゼロではなく２５５である。
【０１４９】
(1.5.10) ［特殊ケースコマンドレジスタ（ＳＣＣＲ）］（図１５）
ＳＣＣＲ（６ビット）は特殊ケースコマンドコードを特定する。ＧＣＲが設定されているときにはＧＣＲ＜３１：２６＞がＳＣＣＲと比較される。両者が等しくかつＧＭＤＲがＲＥＮＢＲに対応していれば、ｊｒｍｄ命令によって決定されるＰＣがＪＡＴ（ＪＡＴ６４〜９５）の中から選択される。ＳＣＣＲはｍｏｖｅ命令によって読み書きできる。
【０１５０】
(1.5.11)  ［フラグレジスタＦＲ０、ＦＲ１、ＦＲ２］（図１５）
フラグレジスタは３つのレジスタＦＲ０、ＦＲ１、ＦＲ２を含む。これらレジスタはｍｏｖｅ命令で読み出すことができる。ＦＲ０（３２ビット）はＩＰＵおよび浮動小数点演算ユニットＦＰＵ０−３からの算術論理演算フラグを格納する。ＦＲ１（３２ビット）は浮動小数点演算ユニットＦＰＵ０−３の全てからのＩＥＥＥ例外フラグを格納する。ＦＲ２（３２ビット）はＦＤＩＶ０−１およびＦＰＯＷＥＲからのＩＥＥＥ例外フラグを格納する。ＳＲ内のＩＥＥＥ例外ビットは  ＦＲ１およびＦＲ２の内容で計算される。ＦＲ０−２はリセットシーケンスにおいて‘００００００００Ｈ’に初期化される。
【０１５１】
条件付演算のためのコンディションコードは、ＦＲ０、ＦＲ１、ＦＲ２によって計算される以下のコンディションの一つを定める。もしＦＲ１が指定されていれば、以下の条件のテストにはＦＰＵ３の算術論理演算フラグが用いられ、ＦＰＵ０、ＦＰＵ１およびＦＰＵ２の算術論理演算フラグは無視される。なぜならＦＰＵ０〜３はＳＩＭＤ形式で動作するからである。表２１にコンディションコードの一覧を示す。
【０１５２】
【表２１】
2007183998.tif 000023
【０１５３】
(1.5.12)  ［入力ＦＩＦＯ（ＩＦＩＦＯ）］（図２、図３）
入力ＦＩＦＯは３２ビット×２５６ワードのＦＩＦＯからなる。このＦＩＦＯはｍｏｖｅ命令およびｊｒｍｄ命令で読むことができる。ドライバソフトウェアは、グラフィックコマンドを含む入力グラフィックデータをＩＦＩＦＯにロードしなければならない。
【０１５４】
(1.5.13)  ［出力ＦＩＦＯ（ＯＦＩＦＯ）］
出力ＦＩＦＯは３２ビット×２５６ワードのＦＩＦＯからなる。出力ＦＩＦＯは浮動小数点演算および固定小数点演算の双方で書込することができる。アドレスインクリメンタの出力および処理ユニット（ＩＰＵおよびＦＰＵ）のパラレル−シリアル変換の出力の双方がハードウェアサポートによってＯＦＩＦＯにロードされる。この処理は命令の実行と独立に、かつ並行して生じ得る。ＯＦＩＦＯはソースオペランドとして割り当てることはできない。
【０１５５】
出力モードコード（ＯＦＩＦＯ０−Ｆ）はマイクロコードの行先として書く必要があるが、ＯＦＩＦＯにロードされるべきデータを指定する。このコードの各ビットはＦＰＵの一つに対応する。もしコード＜０＞が１にセットされると、ＦＰＵ０からの出力がＯＦＩＦＯにＯ−Ｂｕｓ１１６を介して転送される。もしユーザがＦＰＵ０〜３の全てのデータを使用したい場合には、ユーザはコード＜３：０＞を１１１１（ｆｈ）とする必要がある。もしコード＜３：０＞が００００（０ｈ）の場合、データソースとしてＩＰＵが選択される。表２２に出力モードコードと選択されるＦＰＵとの関係を示す。
【０１５６】
【表２２】
2007183998.tif 000024
【０１５７】
(1.5.14)  ［プライマリＰＣＩバスインターフェースレジスタ（ ＰＢＩＲ) ］
プライマリＰＣＩバスレジスタ＜２：０＞、＜９：８＞の内容は、ＰＣＩインターフェースユニット内のフラグ、ＧＥ＿Ｒｅｓｅｔ，ＧＥ＿Ｉｄｌｅ，ＧＥ＿Ｉｄｌｅ＿Ａｃｋ，ＧＥ＿Ｉｎｔ＿Ｒｅｑ，およびＧＥ＿Ｉｎｔ＿Ａｃｋに対応する。
【０１５８】
ＰＢＩＲ＜１５：８＞はＩＦＩＦＯステータスフラグとＯＦＩＦＯステータスフラグとからなる。このレジスタはｍｏｖｅ命令によって読むことができる。ＰＢＩＲへの書込動作は ＰＢＩＲ＜９＞のみに影響を与える。ＰＢＩＲはＰＣＩインターフェースユニット内の制御レジスタに／からコピーされる。ＰＢＩＲはリセットシーケンスではリセットされて‘１５０２Ｈ’となる。
【０１５９】
(1.5.15)  ［プライマリバス割込ベクタレジスタ（ＰＩＶＲ) ］
プライマリバス割込ベクタレジスタは、幾何学演算コアがホストに対して割込プロセスを要求する場合の、ホストのための割込ベクタを格納する。割込要求のための割込ベクタは、（ｂｓｅｔ等の）命令によって割込要求フラグが ＰＢＩＲのＧＥ＿Ｉｎｔ＿Ｒｅｑフラグに設定される前にｍｏｖｅ命令によってＰＩＶＲに設定される。値のうち００ＨはＩＥＥＥ例外のトラップのために予約されている。ＰＩＶＲはＰＣＩインターフェースユニット内の制御レジスタにコピーされる。ＰＩＶＲは‘００Ｈ’に初期化される。
【０１６０】
(1.5.16)  ［出力ワードカウントレジスタ（ＷＣＲ）］
ＷＣＲ（８ビット）はセカンダリＰＣＩバスに転送されるべき、ＰＣＩアドレスデータを含むデータ数を示す。ＷＣＲは命令が一つのバーストのスタートアドレスを転送する前に設定される必要がある。
【０１６１】
(1.5.17)  ［ＩＰＵ（ＩＡＬＵ）の出力データレジスタ（ＤＲＩＡ) ］（図１０）
ＤＲＩＡは３２ビットのＩＡＬＵ出力データレジスタである。ａｄｄ，ｓｕｂ，ａｎｄ，ｏｒ，ｂｓｅｔまたはｂｒｓｔ命令の一つが実行されるとき、ＤＲＩＡはいつもＩＡＬＵ出力データをその行先オペランドがＤＲＩＡでなくともセーブする。ＤＲＩＡは整数算術論理命令で読み書きできる。
【０１６２】
(1.5.18)  ［ＩＰＵ（シフタ）の出力データレジスタ（ＤＲＩＳ）］（図１０）
ＤＲＩＳは３２ビットのＩＳＦＴ出力データレジスタである。ａｓｆｔまたはｌｓｆｔ命令が実行されるとＤＲＩＳは常に行先オペランドがＤＲＩＳでなくともＩＳＦＴの出力をセーブする。ＤＲＩＳは整数算術論理命令で読み書きできる。
【０１６３】
(1.5.19)  ［指数値レジスタ（ＥＸＰＲ) ］
ＥＸＰＲは、ＦＰＵ内でｆｐｏｗ命令を実行するときに使用される指数値を含む３２ビット浮動小数点データレジスタである。ＥＸＰＲはｍｏｖｅ命令によって読み書きできる。ｆｐｏｗ命令以外ではＥＸＰＲの値は無視される。
【０１６４】
(1.5.20)  ［ＦＡＬＵの出力データレジスタ（ＤＲＦＡ０) ］（図４）
ＤＲＦＡ０はＦＡＬＵの３２ビット出力データレジスタである。ＦＡＬＵの演算処理のうちの一つが実行されると、ＤＲＦＡ０は行先オペランドがＤＲＦＡ０でない場合でもＦＡＬＵの出力をセーブする。ＤＲＦＡ０はｆｄｉｖ，ｆｓｑｒｔ，ｆｉｓｑｒｔ命令を除く浮動小数点算術論理演算によって読むことができる。
【０１６５】
(1.5.21)  ［浮動小数点累算レジスタ（ＤＲＦＡ１〜３）］（図４）
ＤＲＦＡ１〜３はＦＡＬＵの３２ビット出力データレジスタである。ＦＭＡＣ１／ＦＭＡＣ２／ＦＭＡＣ３のうちの命令の一つが実行されると、ＤＲＦＡの一つが、行先オペランドがＤＲＦＡでない場合であってもＦＡＬＵの出力データをセーブする。ＤＲＦＡ１はＦＭＡＣ１命令のための累算レジスタであり、ＤＲＦＡ２はＦＭＡＣ２のためのものであり、ＤＲＦＡ３はＦＭＡＣ３のためのものである。ＤＲＦＡ１〜３はｆｉｄｖ，ｆｓｑｒｔおよびｆｉｓｑｒｔ命令以外の浮動小数点算術論理演算によって読むことができる。
【０１６６】
(1.5.22)  ［ＦＭＰＹのための出力データレジスタ（ＤＲＦＭ）］（図４）
ＤＲＦＭは３２ビットのＦＭＰＹの出力データレジスタである。ｆｍｐｙ，ｆｍａｃまたはｆｐｏｗ命令の一つが実行されると、ＤＲＦＭは命令の行先オペランドがＤＲＦＭでなくても必ずＦＭＰＹの出力をセーブする。ＤＲＦＭはｆｄｉｖ，ｆｓｑｒｔ，ｆｉｓｑｒｔ命令以外の浮動小数点算術論理演算命令によって読み書き可能である。
【０１６７】
(1.5.23)  ［ＦＰＯＷＥＲ演算回路３１４の出力データレジスタ（ＤＲＦＰ) ］（図４）
ＤＲＦＰは３２ビットの、ＦＰＯＷＥＲ演算回路３１４のための出力データレジスタである。ｆｐｏｗ，ｆｓｑｒｔ命令のいずれかが実行されると、ＤＲＦＰは命令の行先オペランドがＤＲＦＰでなくてもＦＰＯＷＥＲ演算回路３１４の出力をセーブする。ＤＲＦＰはどの浮動小数点命令によっても読むことはできない。
【０１６８】
ＦＤＩＶ０／ＦＤＩＶ１のための出力データレジスタ（ＤＲＦＤ０‐１）（図１６）
ＤＲＦＤ０〜１は３２ビットの、ＦＤＩＶのための出力データレジスタである。ｆｄｉｖ０命令が実行されるとき、ＤＲＦＤ０は行先オペランドがＤＲＦＤ０でなくても浮動小数点除算器（ＦＤＩＶ０）の出力をセーブする。ＤＲＦＤ１はＦＤＩＶ１のためのものである。ＤＲＦＤ０／１はｆｄｉｖ０／ｆｄｉｖ１命令によって読み書きできる。
【０１６９】
(1.5.24)  ［アドレスレジスタ０−７（ＡＧＵ０）］（図１６，（ＡＲ００−０７））
アドレスレジスタはメモリ（ＪＡＴ、ＩＬＭ 、ＦＬＭ０〜ＦＬＭ３）へのポインタとして使用される３つのアドレスレジスタファイルからなる。これら３つのアドレスレジスタファイルはソース０のオペランドに対する９ビットのアドレスレジスタＡＲ０ｘ（０≦ｘ≦７）と、ソース１のオペランドに対する９ビットのアドレスレジスタＡＲ１ｙ（０≦ｙ≦７）と、行先オペランドに対する９ビットのアドレスレジスタＡＲ２ｚ（０≦ｚ≦７）とからなる。これらレジスタファイルはｍｏｖｅ命令によって読み書きができる。オペランドの実効アドレスを計算するときには、選択されたアドレスレジスタ内のアドレスが使用され、多くの場合には修飾される（変位モードの場合を除く）。
【０１７０】
(1.5.25)  ［インデックスレジスタ（ＡＧＵ０）］（図１６，（ＩＸＲ００〜０７））
インデックスレジスタは３つのアドレスレジスタファイルを含む。これら３つのアドレスレジスタファイルの各々は、アドレスオフセット値を保持する８つの９ビットレジスタからなる。これら３つのレジスタファイルはソース０オペランドのためのＩＸＲ０ｘレジスタ（０≦Ｘ≦７）と、ソース１オペランドのためのＩＸＲ１ｙレジスタ（０≦ｙ≦７）と、行先オペランドのためのＩＸＲ２ｚレジスタ（０≦ｚ≦７）とを含む。アドレスレジスタがインデックスモードで読み出されるとき、同じ番号のインデックスレジスタが自動的に読み出されアドレスレジスタに加算される。これらはｍｏｖｅ命令によって読み書きできる。
【０１７１】
ＡＧＵ１、２についても同様である。
(1.5.26)  ［モジュロモードレジスタ］（図１６，（ＭＲ０〜７））
ＭＲレジスタ（ＭＲ０〜７）は、モジュロアドレシング時のサークルバッファサイズを指定するための４ビットレジスタである。ＭＲｘ（０≦ｘ≦７）により、ＡＲ０ｘ、ＡＲ１ｘ、ＡＲ２ｘの合計３個のアドレスレジスタに共通なサークルバッファサイズが指定される。ＭＲｘに０が設定された場合、非モジュロモードとなる。このレジスタは、ｍｏｖｅ命令によって読み書き可能である。このレジスタはリセットシーケンスには０Ｈにリセットされる。
【０１７２】
(1.5.27)  ［参照イネーブルフラグレジスタ（ＲＥＮＢＲｘ：０≦ｘ≦３１）］
各参照イネーブルフラグレジスタは高速処理するための幾何学演算モードおよび／またはイネーブルフラグを含む。これらレジスタはｍｏｖｅ命令によって読み書き可能であり、ドライバソフトウェアによっても書込されるべきである。ＲＥＮＢＲｘはＧＭＤＲに格納されている現在の幾何学演算モードおよび／またはイネーブルフラグと比較され、それによってｊｒｍｄ演算が実行されたときの高速処理可能なケースを検出できる。
【０１７３】
(1.5.28)  ［ジャンプアドレステーブル（ＪＡＴ）］（図１５）
ＪＡＴは１６ビット×９６ワードのジャンプアドレスルックアップテーブルＲＡＭを含む。ＪＡＴはｍｏｖｅ命令によって読み書き可能でありドライバソフトウェアによっても書込みされる。ｊｒｍｄ命令が実行されるとき、ＰＣはＧＣＲと、ＧＭＤＲとＲＥＮＢＲｘとの比較結果との双方によって生成されるアドレスによってポイントされるＪＡＴの内容に設定される。
【０１７４】
( ２)   ピン仕様
(2.1)   ピンの概略
図１８に、３次元グラフィックス用幾何学処理プロセッサのピンの割当てについて示す。また表２３〜表３０に各ピンの内容について示す。信号名の先頭に「Ｐ＿」が付されたピンはプライマリＰＣＩバスすなわちＡＧＰバスに接続される。信号名の先頭に「Ｓ＿」が付されたピンはセカンダリＰＣＩバスに接続される。信号名の先頭に「Ｔ＿」が付されたピンは他の３次元グラフィックス用幾何学処理プロセッサに接続される。信号名の最後に「＿Ｌ」が付されているのは、信号が低レベル電圧であるときに活性となることを示す。なお、以下の記載では「Ｉ」は入力を、「Ｏ」は出力を、「ＩＯ」は入出力を、「ｔｒｉ−Ｏ」は三状態出力を、「ｏｄ−Ｏ」はオープンドレイン出力を、それぞれ示している。
【０１７５】
(2.2)   プライマリＰＣＩバスピン
【０１７６】
【表２３】
2007183998.tif 000025
【０１７７】
【表２４】
2007183998.tif 000026
【０１７８】
【表２５】
2007183998.tif 000027
【０１７９】
(2.3)   セカンダリＰＣＩバスピン
【０１８０】
【表２６】
2007183998.tif 000028
【０１８１】
【表２７】
2007183998.tif 000029
【０１８２】
【表２８】
2007183998.tif 000030
【０１８３】
【表２９】
2007183998.tif 000031
【０１８４】
(2.4)   他のピン
【０１８５】
【表３０】
2007183998.tif 000032
【０１８６】
( ３)   幾何学演算プロセッサの動作
(3.1)   アドレス機能
(3.1.1)   ［アドレシングモード］
図１６を参照して、ＡＧＵは３つのオペランドアドレシングモードでアドレス計算を行なうことができる。モードは一つの命令によって指定される。
【０１８７】
（１）  処理前の変位ＤＩＳ加算（ＡＲｘｎ＋ＤＩＳ）
オペランドのアドレスはアドレスレジスタＡＲｘｎ（ｘ＝０〜２、ｎ＝０〜７）内にある。オペランドアドレスを使用する前に、命令とともに与えられる４ビットの変位データ（ＤＩＳ）の内容が加算される。ＤＩＳの内容は符号なし整数（０≦ＤＩＳ≦１５）として取り扱われる。ＡＲｘｎレジスタの内容は変化しない。このモードはモジュロモードには影響を受けない。
【０１８８】
（２）  処理後のインデックスＩＸＲおよび即値オフセットの加算（ＡＲｘｎ＋ＩＸＲ）
オペランドアドレスの内容はアドレスレジスタＡＲｘｎ内にある。オペランドアドレスを使用した後、ＩＸＲｘｎレジスタの内容および即値データが加算され同じアドレスレジスタにストアされる。ＩＸＲｘｎの内容は９ビットの２の補数表示の整数（−２５６≦ＩＸＲｘｎ≦２５５）として取り扱われる。ＩＸＲｘｎの内容は変化しない。このモードはモジュロモードの影響を受けない。
【０１８９】
（３）  処理前の１加算（＋ＡＲｘｎ）
オペランドのアドレスはアドレスレジスタＡＲｘｎ（ｘ＝０〜２、ｎ＝０〜７）にある。オペランドアドレスを使用する前に１が加算される。ＡＲｘｎの内容は変化する。このモードはモジュロモードによって影響を受ける。
【０１９０】
（４）  処理前の１デクリメント（−ＡＲｘｎ）
オペランドのアドレスはアドレスレジスタＡＲｘｎ（ｘ＝０〜２、ｎ＝０〜７）にある。オペランドアドレスを使用する前に１が減算される。ＡＲｘｎの内容は変化する。このモードはモジュロモードの影響を受ける。
【０１９１】
（５）  モジュロモード
モジュロモードは４ビットのＭＲレジスタＭＲｎ（ｎ＝０〜７）上に非ゼロの値を設定することにより活性化される。８つのＭＲレジスタによって８種類の異なったサイズのサークルバッファを使用することができる。ＭＲレジスタはサークルバッファのサイズを指定する。ＭＲ＝０１０１（５Ｈ）の場合、サークルバッファのサイズは５ワードである。バッファの先頭アドレスはＡＲ＜８：４＞＋０１００（４Ｈ）に等しい。ＡＲ＜８：４＞はサークルバッファのベースアドレスを指定するのに用いられる。
【０１９２】
オペランドアドレスは、ＭＲがゼロに等しくない場合でも上述したアドレシングモードのいずれかを用いて計算される。
【０１９３】
なお、ＩＸＲ使用時には非モジュロモードのアドレシングを行なう。ＭＲに設定された値は無効である。
【０１９４】
ＭＲｘに設定する値によって３系統のアドレシング制御を行なう。モジュロモードは、アドレスレジスタ更新モードでのみ有効となる。したがって変位加算（ＡＲ非加算）ではＭＲに設定された値は無効となる。
【０１９５】
デクリメント時にＡＲｎが０の場合にはＡＲｎ＝ＭＲ値−１に更新する。
ＡＲが初期値のとき、またはＩＸＲ使用によってＡＲ値がサークルバッファ間の領域になった場合には、非モジュロモードでアドレス更新を行なう。ＡＲ値がいずれかのサークルバッファ内のアドレスになった後には、通常のモジュロモードの制御にしたがう。ただし非モジュロモードアドレシングモード使用時を除く。
【０１９６】
(3.2)   シーケンス制御
以下、図１４に示されるシーケンサ９４について主として図１５を参照して説明する。
【０１９７】
(3.2.1)   ［条件付シーケンス制御］
３次元グラフィックス用幾何学処理プロセッサは３個の条件ジャンプ命令と５個の条件サブルーチンコールとを用意している。３個の条件ジャンプ命令とはｊａｃｃ，ｊｒｍｄおよびｄｊａ命令である。特にｊｒｍｄ命令は、ＯｐｅｎＧＬにしたがった幾何学処理のための独自の、かつ効果的な命令である。以下、図１５を参照して各部について説明する。
【０１９８】
（１）  メモリ間接分岐制御部２６０
ｊｒｍｄ命令によってＰＣとして選択される値の生成は、ＧＣＲ＜１３＞の値によって２つに分けられる。
【０１９９】
・ ＧＣＲ＜１３＞＝１
この場合、ＧＣＲ＜１２：０＞の値がそのまま分岐アドレスとなる。ＧＭＤＲ、ＲＥＮＢＲ０−３１、ＧＣＲ＜３１：２６＞、ＳＣＣＲの内容は分岐先アドレスの決定には影響しない。
【０２００】
・ ＧＣＲ＜１３＞＝０
ＧＭＤＲとＲＥＮＢＲ０−３１との比較結果、およびＧＣＲ＜３１：２６＞とＳＣＣＲとの比較結果に基づいて以下のようにして決定されるＪＡＴアドレスに納められている値を分岐アドレスとする。
【０２０１】
まず、「ＧＣＲ＜３１：２６＞がＳＣＣＲと等しくない」、または「ＧＣＲ＜３１：２６＞がＳＣＣＲと等しく、かつ、ＲＥＮＢＲ０−３１にＧＭＤＲと同じものがない」場合には、ＪＡＴの下位６４ワードに対して｛０、ＧＣＲ＜３１：２６＞｝をアドレスとしてＪＡＴの参照が行なわれる。「ＧＣＲ＜３１：２６＞がＳＣＣＲと等しく、かつ、ＲＥＮＢＲ０−３１にＧＭＤＲと同じものがある」場合には、ＪＡＴの上位３２ワードが参照される。ＪＡＴの６４番地から９５番地は、ＲＥＮＢＲ０−３１がＧＭＤＲと一致する場合の参照位置にそれぞれ相当する。例えば、ＲＥＮＢＲ０とＧＭＤＲとが等しい場合には、ＪＡＴの６４番地が参照される。もしＲＥＮＢＲ０−３１の中に互いに等しいものがあった場合には、番号の若いＲＥＮＢＲが優先される。
【０２０２】
図１９を参照して、ｊｒｍｄ命令とＧＭＤＲ、ＧＣＲおよびＳＣＣＲの書込タイミングの関係を示す。まず、ＧＭＤＲとＲＥＮＢＲ０−３１との比較は、ＧＭＤＲの書込（mv src1, GMDR ）によって起動される。ｍｖ命令（またはｌｄｒ命令）によるＧＭＤＲへの書込ステージの次のステージから、ＲＥＮＢＲ０−７、ＲＥＮＢＲ８−１５、ＲＥＮＢＲ１６−２３、ＲＥＮＢＲ２４−３１の順で８項ずつ、合計４ステージ（ＣＭＰ１−ＣＭＰ４）をかけて行なわれる。比較の終了した次のステージ（図１９において「ａｄｒＪＡＴ」）において、比較結果およびその前ステージで確定していたＧＣＲとＳＣＣＲとの比較結果によってＪＡＴのアドレスが決定される。
【０２０３】
さらに次にステージ（図１９中の「ｒｅａｄＪＡＴ」）においてＪＡＴの参照を行ない、次ステージ（以後）でのｊｒｍｄ命令のデコードステージでＰＣ値としてＪＡＴの読出データが選択される。したがってＪＡＴ参照を行なう場合には、ＧＭＤＲへの転送命令とｊｒｍｄ命令との間は８ステージ以上、ＧＣＲおよびＳＣＣＲへの転送命令とｊｒｍｄ命令との間は４ステージ以上、それぞれ間隔を空けなければならない。ＧＣＲ＜１３＞＝１でＪＡＴ参照を行なわないことが保証されている場合には、ＧＣＲへの書込の次ステージでＧＣＲ＜１２：０＞をＰＣとして選択することが可能である。したがってこの場合にはＧＣＲへの転送命令とｊｒｍｄ命令との間は２ステージ以上の間隔を空ける必要がある。
【０２０４】
（２）  ループ制御部２６２
図１５を参照して、ループ制御部２６２は、ｄｊａ命令によるループカウンタを用いたデクリメントジャンプによるＰＣ選択制御を行なう。ループカウンタは、ループカウンタＬＣ０とループカウンタＬＣ１（ともに８ビット）の２系統が存在する。ループ制御部２６２は、ｄｊａ命令の第２ステージにおいて、命令で指定されたループカウンタの値を１減算し、０であればＰＣはインクリメントされ、０でなければ命令（ＩＲ＜１２：０＞）で与えられる分岐先アドレスをＰＣとして選択する。
【０２０５】
（３）  ビットテスト部２６４
ビットテスト部２６４は、ｊａｂｔ命令およびｊｓｂｔ命令によって指定される３２ビットのＢＴＲ（Ｂｉｔ  ｔｅｓｔ  Ｔａｒｇｅｔ  Ｒｅｇｉｓｔｅｒ）中の任意の１ビットの状態を判定する。判定結果が指定された状態であれば命令で与えられる分岐先アドレスをＰＣとして選択し、指定された状態と異なればＰＣをインクリメントする。ＰＣの更新は第２ステージで行なわれる。
【０２０６】
（４）  コンディションコードテスト部２６６
コンディションコードテスト部２６６は、ｊａｃｃ命令およびｊｓｃｃ命令で与えられるコンディションコードにしたがってフラグレジスタのテストを行なう。コンディションコードテスト部２６６ は、条件が合えば命令で与えられる分岐先アドレスをＰＣとして選択し、合わなければＰＣをインクリメントする。
【０２０７】
（５）  ＰＣスタック制御部２６８
ＰＣスタック制御部２６８ は、１３ビット×８レベルのＬＩＦＯ（Ｌａｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）形式のスタックによって構成される。ＰＣスタック制御部２６８は、サブルーチン分岐命令（ｊｓｒ，ｊｓｃｃ，ｊｓｂｔ）によって分岐が発生する場合に、第２ステージでのＰＣ値（分岐からの戻り番地）をスタックの最上位に退避し、スタックポインタを更新する。サブルーチン復帰命令（ｒｔｓ）の第２ステージにおいてＰＣスタック制御部２６８は、スタックポインタの値を１戻してスタックの最上位から退避させたＰＣ値を取出して、ＰＣ選択制御部２７０に与える。ＰＣスタック、スタックポインタはＧ−Ｂｕｓ１００に接続されておらず、読み書きすることはできない。
【０２０８】
（６）  ＰＣ選択制御部２７０
ＰＣ選択制御部２７０は、命令の第２ステージにおいて以下の表３１に示すようにＰＣを決定する。
【０２０９】
【表３１】
2007183998.tif 000033
【０２１０】
(3.3)   システムの状態制御
(3.3.1)   ［リセット処理］
この３次元グラフィックス用幾何学処理プロセッサは、システムリセットまたはリセット命令（ソフトウェアリセット）を用いることによりリセットできる。システムリセットでは、ＰＣＩ部を含めて全チップが初期化される。ソフトウェアリセットでは幾何学演算コアのみが初期化される。リセット処理は６サイクルで実行される。
【０２１１】
(3.3.2)   ［ウェイト処理］
幾何学演算コアは以下の条件のうちの少なくとも１つが発生するとウェイト状態に入る。
【０２１２】
（１）  リセット
（２）  ホストからのＨｏｌｄ命令
（３）  ホストへの割込
（４）  ＩＦＩＦＯが空
（５）  ＯＦＩＦＯが一杯
リセットシーケンスが行なわれる場合、チップ内の全要素が予め定められた初期値に初期化される。このリセットシーケンスの後のチップの内部状態は「ウェイト」である。
【０２１３】
ホストＣＰＵ５２は幾何学演算コアに対して、プライマリＰＣＩバスを介してＰＢＩＲ内のｈｏｌｄ＿Ｒｅｑ．ビットをセットすることにより強制的にスタンバイモード（ウェイト）にすることが可能である。仮に幾何学演算コアが何等かの処理（ＯＦＩＦＯへのデータ転送（ＦＩＦＯ＿Ｃ２Ｓ）およびホストＣＰＵ５２からの割込要求に対する応答待ちを含む）を実行中であってもアイドル要求が検出され幾何学演算コアはウェイト状態に入る（ＰＢＩＲ内のｈｏｌｄ＿ａｃｋビットがセットされる）。幾何学演算コアのリスタートは、ホストインターフェースレジスタ内のｈｏｌｄ＿Ｒｅｑ．ビットをリセットすることによりトリガーされる。チップ内のＰＣＩインターフェースユニットはｈｏｌｄ要求によっては影響されない。
【０２１４】
ＰＢＩＲ内の他のビットをセットすることによっても幾何学演算コアがウェイト状態になる。幾何学演算コアが割込を要求するとき、割込要求フラグとｈｏｌｄ＿ａｃｋビットとがセットされる。その後プライマリＰＣＩポートのＩＮＴＡ＿Ｌピンがアサートされ、幾何学演算コアはｈｏｌｄ＿Ｒｅｑ．ビットがリセットされるまでウェイト状態に入る。割込要求フラグビットがセットされると、ｈｏｌｄ＿Ｒｅｑ．ビットがセットされる。ｈｏｌｄ＿Ｒｅｑ．ビットがセットされると常に、幾何学演算コアは中断された処理を再開する。
【０２１５】
また、ＩＦＩＦＯのコンディションによっても幾何学演算コアはウェイト状態に入る。もしＩＦＩＦＯが空であれば、幾何学演算コアは次のデータを待つ。この場合ＩＦＩＦＯが次のデータを受取りＩＦＩＦＯのエンプティフラグがリセットされると、幾何学演算コアは中断された処理を再開する。この場合、ＰＢＩＲ内のｈｏｌｄ＿ａｃｋビットはセットされる。
【０２１６】
さらに、セカンダリＰＣＩバスによっても幾何学演算コアはウェイト状態となる。もし前の出力データがセカンダリＰＣＩインターフェースのＯＦＩＦＯ（Ｃ２Ｓ−ＦＩＦＯ）内に残っており、幾何学演算コアがＯＦＩＦＯにさらにデータを出力しようとする場合、幾何学演算コアはウェイト状態に入る（ＰＢＩＲ内のｈｏｌｄ＿ａｃｋビットは影響を受けない）。この場合には、ＦＩＦＯ内に格納されていた前のデータが完全に転送されると、幾何学演算コアは出力ＦＩＦＯへのデータ転送を再開する。
【０２１７】
上記した（１）〜（４）によってウェイト状態になったときのみ、ホストＣＰＵ５２はウェイト状態の幾何学演算コア内の内部メモリ／制御レジスタの読み書きを行なうことができる。上記した（５）によってウェイト状態となった場合、幾何学演算コアの内部データメモリおよび制御レジスタの読み書きは保証されない。なぜならこの場合、ホストによってｈｏｌｄ＿Ｒｅｑ．ビットがセットされたとしても、ＰＢＩＲ内のｈｏｌｄ＿ａｃｋビットはセットされていないためである。
【０２１８】
(3.3.3)   ［割込］
ホストＣＰＵ５２への割込要求をアサートできるのは以下の場合である。
【０２１９】
（１）  ＩＥＥＥ７５４例外の発生
（２）  ＰＣスタックオーバーフローの発生
（３）  デバッグモードからの割込の発生
（４）  命令による、ＰＢＩＲ内の割込要求ビットのセット
たとえばＩＥＥＥ７５４の例外とか、ＰＣスタックのオーバーフロー等が生じたりして、幾何学演算コアについて誤りを修正する必要がある場合にはホストＣＰＵ５２に対する割込要求がアサートされる。処理ユニット内で計算誤りが生じた場合には、幾何学演算コアは割込を要求し、ＰＢＩＲ内の割込要求ビットがセットされ、幾何学演算コアは同時に動作を停止する。この場合、ＰＩＶＲはゼロに設定される。この割込要求のアサートはＳＭＤＲ＜６：０＞の内容によって影響される。たとえば、ＳＭＤＲ＜５＞がゼロであり、「ＤＺ」フラグがセットされている場合、割込要求のアサートは禁止される。ＳＭＤＲ＜５＞が１であり「ＤＺ」フラグがセットされていれば、割込要求のアサートが実行される。なお、ＳＭＤＲ＜６：０＞が‘０００００００’（計算誤り無視モード）である場合には、いずれの計算も誤りを含んだ値で実行される。
【０２２０】
割込要求ビットの設定は、必要であればｍｏｖｅ命令またはｌｏａｄ命令を用いることによって行なうことができる。この場合、割込要求ビットをセットすることにより幾何学演算コアがウェイト状態に入ることになるので、割込要求ビットをセットする前にそれら命令によりＰＩＶＲをロードしておかなければならない。
【０２２１】
ホストＣＰＵ５２は、どのエラーコンディションが発生したのかを特定するために、幾何学演算コア内のシステムステータスレジスタ（ＳＲ）を読むことができる。幾何学演算コアは、ＰＢＩＲ内のＩｄｌｅ＿Ｒｅｑ．ビットがリセットされるまでウェイト状態となっている。ウェイト状態の間でも、幾何学演算コアの内部メモリ／制御レジスタの読み書きは可能である。命令メモリがホストによって書換えされた場合、ＰＣをリセットするためにホストは幾何学演算コアをリセットする必要がある。さもないと、ＰＢＩＲ内のＩｄｌｅ＿Ｒｅｑ．ビットがリセットされた後、幾何学演算コアは割込前の命令から処理を再開してしまう。
【０２２２】
幾何学演算コアがＯＦＩＦＯにデータをポストするときに割込が生ずると、このデータのポストは完了しない。
【０２２３】
(3.3.4)   ［内部メモリ／制御レジスタへのダウンロード］
幾何学演算コアの内部メモリおよび／または制御レジスタへのデータダウンロードは、幾何学演算コアがウェイト状態にある間に行なわれる。幾何学演算コアがウェイト状態にある場合、ホストＣＰＵ５２はプライマリＰＣＩバスの「ＭＥＭＯＲＹ  ＷＲＩＴＥ」コマンド等の機能を用いて命令メモリへのダウンロードを制御する。内部メモリ／制御レジスタからのデータの読出が必要な場合には、ホストＣＰＵ５２は「ＭＥＭＯＲＹ  ＲＥＡＤ」コマンドを発行すればよい。
【０２２４】
ホストＣＰＵ５２は、幾何学演算コアへの「ＭＥＭＯＲＹ  ＷＲＩＴＥ」コマンドを発行する前に、ｈｏｌｄ＿Ｒｅｑフラグをセットしておかなければならない。
【０２２５】
ホストＣＰＵ５２から内部メモリおよび制御レジスタへのアクセスシーケンスを、対象とアクセスモードとにより分類して図２０〜図２４に示す。
【０２２６】
なお図２４において、ホストＣＰＵ５２からの読出／書込を許すために、制御レジスタは幾何学演算コアがホールド状態でも動作する。このためセットアップサイクル内のＷＲＩＴＥ動作は実行される。このＷＲＩＴＥ動作は、ＨＯＬＤからの復帰後の第１サイクルに再度実行される。
【０２２７】
(3.3.5)   ［リセットシーケンス］
３次元グラフィックス用幾何学処理プロセッサは二つのリセットモードを持つ。すなわちシステムリセットとコアリセットとである。システムリセットによって、チップ全体が初期化される。図２５に示すように、システムリセットはＰＣＩリセット（Ｐ＿ＲＳＴ＿Ｌピン）を用いてトリガーされる。
【０２２８】
コアリセットも同様にチップ全体を初期化する。３次元グラフィックス用幾何学処理プロセッサ内のＰＣＩインターフェース部もこのコアリセットによりリセットされる。各リセットモードは６サイクルかけて３次元グラフィックス用幾何学処理プロセッサ内部を初期化した後、ホールド状態とする。
【０２２９】
コアリセットは二つの方法のいずれかを用いてトリガーすることができる。すなわちＧＥ＿ｒｅｓｅｔ＿ｒｅｑｕｅｓｔおよびリセット命令である。ホストＣＰＵ５２はプライマリＰＣＩバスを介してＰＢＩＲ内のＧＥ＿ｒｅｓｅｔ＿ｒｅｑｕｅｓｔにアクセスすることができる。もしこのビットがホストＣＰＵ５２によってセットされると、幾何学演算コア内のハードウェアリソースはプライマリＰＣＩ論理を除きデフォルト値にリセットされる。
【０２３０】
リセットシーケンスは内部パイプラインレジスタを初期化するのに６サイクルを要する。リセットシーケンスの後、幾何学演算コアは自動的にウェイト状態に入るが、ＰＣＩインターフェースユニットはその後も他のエージェントと通信可能である。
【０２３１】
ホストＣＰＵ５２によるリセットは他のＨｏｌｄよりも高い優先順位を有している。
(3.4)   ＯＦＩＦＯ
図２６を参照して、ＯＦＩＦＯ３９２へのデータ転送を行なうＯＦＩＦＯ部３９０は、ＩＰＵ１０６からの信号ｂＩＰＵｏｕｓｅ／ｂＦＰＵｏｕｓｅ（ＩＰＵ／ＦＰＵからＯＦＩＦＯ３９２への出力命令であることを示す信号）に応答して書込ポインタを生成し各ブロックに出力するとともに、モード信号（ＦＰＵ０−３のどのブロックのデータをＯＦＩＦＯ３９２に転送するかを示す）、ＩＰＵ／ＦＰＵ出力バッファ（Ｉ２Ｓ／Ｆ２Ｓ）のデータをＯ−Ｂｕｓ１１６に読み出すためのイネーブル信号、および読出ポインタとを生成するためのポインタ生成部４０２と、ＯＦＩＦＯ３９２への転送データがバーストの何番目であるかをカウントするＷＣＲを設定し、そのデータがアドレス信号であるか否かを示す信号（ｂａｄｘｘｘｘｓ）とバーストの最後のデータであることを示す信号（ｂｆｉｎａｌｓ）とを生成するためのＷＣＲ設定部４００と、各ブロックよりＯ−Ｂｕｓ１１６に出力されたデータを、ＷＣＲ設定部４００の処理に基づきＯＦＩＦＯ３９２のアドレス部４１２およびＯＦＩＦＯ４１４に格納するためのＯ−Ｂｕｓデータ入力部４０４と、ＯＦＩＦＯ＿Ｆｕｌｌフラグをチェックし、Ｈｏｌｄか否かを決定するためのＦＵＬＬ＿Ｆｌａｇチェック部４０６と、ＯＦＩＦＯ３９２へのデータ転送に必要な信号（ｂＡＤｘｘｘｘｓ，ｂＷＤｘｘｘｘｓ，ｂａｄｘｘｘｘｓ，ｂｆｉｎａｌｓ）を出力するためのＯＦＩＦＯデータ出力部４０８とを含む。
【０２３２】
(3.4.1)   ［ＷＣＲの設定］
ＷＣＲはｍｏｖｅ命令（ｍｖ）またはｌｏａｄ命令（ｌｄｒ）命令を用いてＧ−Ｂｕｓ１００を通じて設定することができる。Ｏ−Ｂｕｓ１１６を介したＯＦＩＦＯへのデータ転送が活性化されたとき、ＷＣＲの変更によって時に誤動作を起こすことがある。
【０２３３】
幾何学演算コアはバーストのサイズを知る必要がある。ＷＣＲはバーストサイズ、すなわちＯ−Ｂｕｓ１１６に転送されるべきデータの数を格納するレジスタである。仮にユーザがＯ−Ｂｕｓ１１６を介してＰＣＩ部に５データワード（ＤＷ）のバーストを転送しようとしたときには、ＷＣＲは５でなく６に設定されなければならない。バーストスタートアドレスもまたＯ−Ｂｕｓ１１６を介してＰＣＩ部に転送する必要があるからである。すなわち以下の式が成り立つ。
【０２３４】
WCR=1(バースト開始アドレス)+N(バーストデータの数）
さらにまた、ＷＣＲの設定とＯＦＩＦＯの書込とのタイミングの関係についても注意する必要がある。既に述べたように、幾何学演算コアはＯＦＩＦＯへのデータの書込が完了すると、セカンダリＰＣＩ状態機械を開始させるためにＷＣＲを参照する。したがって、ＷＣＲの変更が書込の完了前に行なわれてしまうと、幾何学演算コアの論理は現在のバースト転送を行なうことができない。マイクロコードを設計する場合には、このタイミングに注意しなければならない。このタイミングについての問題に関しては、マイクロコードのプログラマはソフトウェアシミュレータを使用してＷＣＲの設定タイミングが適切か否かを調べる必要がある。図２７にＷＣＲの設定シーケンスを示す。
【０２３５】
(3.4.2)   ［Ｏ−Ｂｕｓ１１６のデータ転送（単独／複数）］
複数ソースコマンドに関する制限として、次開始アドレスを含まないこと、およびバンク境界をこえないこと、がある。複数ソースコマンドを用いる場合、複数データストリームのうちの２番目以降についてはパイプラインストールを引き起こさない。このため複数ソースコマンドは有利である。
【０２３６】
(3.4.3)   ［ＯＦＩＦＯ＿Ｆｕｌｌフラグによるウェイト］
ＯＦＩＦＯ＿Ｆｕｌｌフラグは以下のような場合にサンプリングされる。
【０２３７】
（１）  各バンクの１５番目のデータがＯＦＩＦＯに書込まれたとき。
（２）  バーストの最後のデータであることを示すＦｉｎａｌフラグがアサートされたとき。
【０２３８】
ＳＲ内のＯＦＩＦＯ＿Ｆｕｌｌフラグ（ＳＲ［８］）は、幾何学演算コアがウェイティング状態でない場合、各サイクルにおいてＰＣＩインターフェースからＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグを受ける。ウェイティング状態であればＳＲにはＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグはロードされない。ＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグは半サイクルの遅延の後、ＳＲ［８］にセットされる。
【０２３９】
ＯＦＩＦＯ制御論理はＯＦＩＦＯに対する上書きを禁止するため、ＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグをチェックしている。この制御論理は二つの場合にＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグをサンプリングする。その１番目は、ｆｉｎａｌフラグがアサートされたとき、すなわちＯＦＩＦＯへのバースト書込が完了したときである。内部のｂｆｉｎａｌｘｓ信号がバーストの終了を示す。このｂｆｉｎａｌｘｓがアサートされた場合、ＰＣＩ論理からのＦＩＦＯ＿Ｃ２Ｓ＿Ｆｕｌｌフラグが必ずサンプリングされる。２番目は、バーストにおいてマルチバンク処理を行なう必要がある場合である。ＷＣＲが１０と等しい場合、一つのバンク全体（１６ワード）に書込がされ、さらに他のバンクのもう１ワードにも書込が行なわれる。
【０２４０】
ＯＦＩＦＯ＿Ｆｕｌｌ＿フラグのサンプリングタイミングを図２８および図２９に示す。このように、ＯＦＩＦＯ部３９０においてＯＦＩＦＯ３９２の上書きを防ぎながらデータ出力をホストプロセッサや幾何学演算プロセッサの演算部とは独立に行なうので、正常なデータ出力を行なうために他の処理に影響が出るような負荷がホストプロセッサや幾何学演算プロセッサの演算部に加えられることがない。
【０２４１】
(3.5)   ＩＦＩＦＯからのデータ転送
ホストＣＰＵ５２から幾何学演算コアへのデータは入力ＦＩＦＯ９８にストアされる。入力ＦＩＦＯ９８から内部メモリまたはレジスタへのデータの読出はｍｏｖｅ命令を用いることによってのみ行なえる。入力ＦＩＦＯ９８から他のレジスタまたは内部メモリへのｍｏｖｅ命令が実行されると、入力ＦＩＦＯ９８は他のレジスタやデータメモリが行なうのと同様、Ｇ−Ｂｕｓ１００上に読出ポインタにより示されるデータを出力する。この場合、もしＩＦＩＦＯが空であれば、シーケンスコントローラは読出データがＩＦＩＦＯに揃うまでパイプラインをストールさせる。
【０２４２】
ＩＦＩＦＯ＿Ｅｍｐｔｙフラグは、幾何学演算コアがホールド状態となる理由の一つである。入力ＦＩＦＯ９８からのｍｏｖｅ命令が発行されたとき、もしＳＲ内のＩＦＩＦＯ＿Ｅｍｐｔｙフラグがセットされていると、幾何学演算コアはｍｏｖｅ命令命令の第３ステージ以降アイドル状態となる。データがＩＦＩＦＯに揃えば幾何学演算コアは再び動作を初め読出動作（ｍｏｖｅ命令の第３ステージ）が実行される。
【０２４３】
図３０にＩＦＩＦＯ＿Ｅｍｐｔｙコンディションによって起こるＨｏｌｄシーケンスを示す。
【０２４４】
( ４)   デバッグモード
本実施の形態にかかる幾何学演算コアでは、プログラミングを容易にするために２種類のデバッグ機能が用意されている。第１はトレースモードであり、第２はブレークポイントモードである。
【０２４５】
(4.1)   トレースモード
トレースモードでは、プログラムをステップごとにデバッグすることができる。トレースモードのために幾何学演算コアは２ビットの制御信号、すなわちｔｒａｃｅ＿ｅｎａｂｌｅとｔｒａｃｅ＿ＩＮＴ＿ｅｎａｂｌｅとを用いる。これら信号はＰＣＩＣＲに割当てられる。
【０２４６】
ｔｒａｃｅ＿ｅｎａｂｌｅがセットされていると、幾何学演算コアはプログラムカウンタの現在の値（ＰＣ＝ｎとする）によって示される命令を実行する。実行すべき命令が正常に終了すると幾何学演算コアはウェイト状態に入る。
【０２４７】
ｔｒａｃｅ＿ｅｎａｂｌｅビットとｔｒａｃｅ＿ＩＮＴ＿ｅｎａｂｌｅとが双方ともセットされていると、自動的にホストＣＰＵ５２への割込信号が生成され、幾何学演算コアはウェイト状態となる。その結果、幾何学演算コアは連続してウェイト状態にされることになる。
【０２４８】
ホストＣＰＵ５２は幾何学演算コアからの割込要求に応答し、次ステップを実行するために ＰＢＩＲ内のＩＤＬＥフラグをローに設定しなければならない。それでもｔｒａｃｅ＿ｅｎａｂｌｅビットがセットされたままであれば、上述した動作が繰返される。トレースモードのタイミングの詳細を図３１に示す。
【０２４９】
(4.2)   ブレークポイントモード
プログラマは、ブレークポイントアドレスレジスタ（ＰＣＩＡＲ）によって示されるプログラムアドレスでプログラム動作を停止させることができる。ＰＣＩＡＲはＰＣＩインターフェース内の制御レジスタの一つとして実装することができる。ブレークポイント機能を使用するためには、プログラマはＰＣＩＣＲ内のｂｒｅａｋ＿ｅｎａｂｌｅとｂｒｅａｋ＿ＩＮＴ＿ｅｎａｂｌｅとを初期化しなければならない。ＰＣＩＣＲとＰＣＩＡＲとはともにＰＣＩインターフェースを介して直接アクセスできる。幾何学演算コアを活性化するに先立ってかならずＰＣＩＣＲとＰＣＩＡＲとを初期化しておく必要がある。すなわち、これらレジスタは、リセット後のウェイト状態の間に初期化される必要がある。ホストＣＰＵ５２によって初期化とＩＤＬＥフラグのリセットとが行なわれた後に幾何学演算コアはＰＣ＝０からプロセスを開始する。ＰＣの内容がＰＣＩＣＲの内容と等しくなると、ｂｒｅａｋ＿ｅｎａｂｌｅフラグがセットされていれば幾何学演算コアはウェイト状態となる。そのときＰＣにより示される命令が、通常は命令レジスタにフェッチされている。しかしこの命令に続いて通常実行されるパイプラインステージは実行されない（ウェイト状態）。ｂｒｅａｋ＿ＩＮＴ＿ｅｎａｂｌｅビットがセットされていると、ホストＣＰＵ５２への割込が自動的に生成される。ホストＣＰＵ５２がこの割込に応答しＰＢＩＲ内のＩＤＬＥフラグをリセットした後、幾何学演算コアはＰＣＩＡＲの次のアドレスから実行を再開する。
【０２５０】
ブレークポイントモードのタイミングの詳細を図３２に示す。
( ５)   ＪＴＡＧバウンダリスキャン
バウンダリスキャン技術はＩＥＥＥ規格１１４９．１−１９９０「ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ  ａｎｄ  Ｂｏｕｎｄａｒｙ−Ｓｃａｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ」に規定されている。本実施の形態の幾何学演算コアはこのＩＥＥＥ規格１１４９．１−１９９０にしたがったバウンダリスキャン機能を提供している。幾何学演算コアが実装しているバウンダリスキャン機能はＥＸＴＥＳＴ，ＢＹＰＡＳＳおよびＳＡＭＰＬＥ／ＰＲＥＬＯＡＤであり、これらは上述した規格ではデフォルトの機能として規定されている。
【０２５１】
図３３に、本実施の形態にかかる幾何学演算コアのバウンダリスキャン部のアーキテクチャを示す。このバウンダリスキャン回路４３０は、ＪＴＡＧバウンダリスキャン機能を提供するものであって、バウンダリスキャン回路４３０の動作を特定する命令を格納するための４ビットレジスタからなる命令レジスタ（ＢＩＲ４４０）と、バウンダリスキャンデータがシフト転送されるとともに、テスト入出力データを保持するためのバウンダリスキャンレジスタ（ＢＳＲ４４２）と、必要に応じてバウンダリスキャンデータにＢＳＲ４４２をバイパスさせるためのバイパス経路を形成するバイパスレジスタ（ＢＰ４４４）と、ＢＳＲ４４２の出力とＢＰ４４４の出力との一方を選択して通すセレクタ４４６と、ＢＩＲ４４０の出力とセレクタ４４６の出力との一方を選択して通すためのセレクタ４４８とを含む。ＢＩＲ４４０、ＢＳＲ４４２、およびＢＰ４４４の入力はいずれもテストデータ入力（ＴＤＩ）に接続されている。セレクタ４４８の出力はテストデータ出力（ＴＤＯ）に接続されている。
【０２５２】
より詳細に、図３４を参照して、ＢＩＲ４４０は、ＴＤＩとＴＤＯとの間に直列に接続された４個のシフトレジスタ４５０〜４５６を含む。シフトレジスタ４５０が最上位ビット（ＭＳＢ）、シフトレジスタ４５６が最下位ビット（ＬＳＢ）を格納するためのものである。なお本実施の形態では命令が４ビットであるため図３４ではシフトレジスタの数は４個であるが、シフトレジスタの数が４に限定されるわけではない。命令のビット数に応じてシフトレジスタの数は変化し得る。これらシフトレジスタ４５０〜シフトレジスタ４５６のデータ出力ＤＯは命令デコーダ４６０ に接続されている。
【０２５３】
図３３および図３４に示すバウンダリスキャン回路４３０では、最初にＢＩＲ４４０に命令を設定する。この場合、まずセレクタ４４８でＢＩＲ４４０の出力を選択し、ＴＤＩからＴＤＯの方向に命令コードをシリアルに転送する。命令コードの各ビットがシフトレジスタ４５０〜４５６に格納されると各シフトレジスタ４５０〜シフトレジスタ４５６の出力は命令デコーダ４６０に与えられ、デコードされる。命令デコーダ４６０はデコード結果にしたがい、図３４に示される論理によってＢＹＰＡＳＳ，ＥＸＴＥＳＴ，ＳＡＭＰＬＥ／ＰＲＥＬＯＡＤなどの制御信号を発生する。ＢＩＲ４４０に設定される命令コード（４ビット）とそれによって特定される機能との関係を表３２に示す。
【０２５４】
【表３２】
2007183998.tif 000034
【０２５５】
テストデータをＢＳＲ４４２に設定するときには、セレクタ４４８でセレクタ４４６の出力を、セレクタ４４６でＢＳＲ４４２の出力を、それぞれ選択するようにする。そしてＴＤＩからＴＤＯに向けてテストデータをシリアルに転送し、所望のテストデータがＢＳＲ４４２内のシフトレジスタの各々に設定されたらテストを実行する。テスト結果のデータをＢＳＲ４４２からＴＤＯに向けて出力する場合も同様である。
【０２５６】
セレクタ４４８でセレクタ４４６の出力を、セレクタ４４６でＢＰ４４４の出力を、それぞれ選択するようにすると、テストデータはＢＳＲ４４２をバイパスし次の回路に出力される。これによってテストデータのシフト経路が短くなり、テスト時間を短縮化することができる。
【０２５７】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０２５８】
【図１】本願発明にかかる３次元グラフィックス用幾何学処理プロセッサを持つアドインカードを含むコンピュータシステムのブロック図である。
【図２】本願発明にかかる３次元グラフィックス用幾何学処理プロセッサのブロック図である。
【図３】本願発明にかかる３次元グラフィックス用幾何学処理プロセッサのより詳細なブロック図である。
【図４】浮動小数点演算装置のブロック図である。
【図５】浮動小数点演算装置の主要なブロック間におけるアドレス・データタイミングの例を示すタイミング図である。
【図６】ＩＥＥＥの規格による単精度データ浮動小数点データのフォーマットを示す図である。
【図７】浮動小数点演算装置のデータメモリのブロック図である。
【図８】浮動小数点べき乗計算ユニットのブロック図である。
【図９】クリップコード生成回路のブロック図である。
【図１０】整数演算装置のブロック図である。
【図１１】符号付整数データのフォーマットを示す図である。
【図１２】符号なし整数データのフォーマットを示す図である。
【図１３】命令メモリ９２のブロック図である。
【図１４】シーケンス制御装置のブロック図である。
【図１５】プログラムカウンタ制御装置のブロック図である。
【図１６】本願発明の１実施の形態にかかる３次元グラフィックス用幾何学処理プロセッサのアドレス生成装置のブロック図である。
【図１７】本願発明の１実施の形態にかかる３次元グラフィックス用幾何学処理プロセッサの演算コアにおける命令の実行パイプラインの形式を示す図である。
【図１８】本願発明の１実施の形態にかかる３次元グラフィックス用幾何学処理プロセッサＬＳＩのピンアサインメントを示す図である。
【図１９】jrmd命令とGMDR, GCR, SCCR 書込のタイミングを示す図である。
【図２０】ＩＭＥＭへのホストアクセスのタイミング図である。
【図２１】ＩＬＭ／ＦＬＭ０−３／ＦＬＵへのホストアクセスにおけるローカルメモリ読出のタイミング図である。
【図２２】ＩＬＭ／ＦＬＭ０−３／ＦＬＵへのホストアクセスにおけるローカルメモリ書込のタイミング図である。
【図２３】制御レジスタへのホストアクセスにおけるローカルメモリ読出のタイミング図である。
【図２４】制御レジスタへのホストアクセスにおけるローカルメモリ書込のタイミング図である。
【図２５】本願発明にかかる３次元グラフィックス用幾何学処理プロセッサのリセットシーケンスを示す図である。
【図２６】本願発明にかかる３次元グラフィックス用幾何学処理プロセッサのＯＦＩＦＯ部のブロック図である。
【図２７】ＷＣＲ設定のシーケンスを示す図である。
【図２８】ＯＦＩＦＯ＿Ｆｕｌｌフラグのサンプリングを示すタイミング図である。
【図２９】ＯＦＩＦＯ＿Ｆｕｌｌフラグのサンプリングを示すタイミング図である。
【図３０】ＩＦＩＦＯの読出動作を示すタイミング図である。
【図３１】３次元グラフィックス用幾何学処理プロセッサのトレースモードのタイミング図である。
【図３２】３次元グラフィックス用幾何学処理プロセッサのブレークポイントモードのタイミング図である。
【図３３】３次元グラフィックス用幾何学処理プロセッサのバウンダリスキャンに関する部分のブロック図である。
【図３４】３次元グラフィックス用幾何学処理プロセッサのバウンダリスキャンのための命令レジスタのブロック図である。
【符号の説明】
【０２５９】
５０  コンピュータシステム、５２  ホストＣＰＵ、５４  ホストブリッジ、７０  幾何学演算プロセッサ、８２  ＰＣＩブリッジ、９２  命令メモリ、９４  シーケンサ、９６  アドレス生成装置、９８  入力ＦＩＦＯ、１００  Ｇバス、１０２  ＡＤバス、１０６  整数演算処理ユニット、１０８  ＳＩＭＤコア、１１０  Ｄ１バス、１１２  Ｄ２バス、１１４  浮動小数点べき乗および除算器、１１６  Ｏバス、１３０〜１３６  浮動小数点ユニットローカルメモリ、１３８〜１４４  浮動小数点ユニット、１４６  浮動小数点ルックアップテーブル、２３０  命令レジスタ、２３２  ステータスレジスタ、２４０  命令デコーダ、２５４  プログラムカウンタ制御回路、２６０  メモリ間接分岐制御部、２６２  ループ制御部、２６６  コンディションコードテスト部、２６８  プログラムカウンタスタック制御部、２７０  プログラムカウンタ選択制御部、２８４  ジャンプアドレステーブル（ＪＡＴ）、３１４  浮動小数点べき乗演算回路。
【図１】
2007183998.tif 000035
【図２】
2007183998.tif 000036
【図３】
2007183998.tif 000037
【図４】
2007183998.tif 000038
【図５】
2007183998.tif 000039
【図６】
2007183998.tif 000040
【図７】
2007183998.tif 000041
【図８】
2007183998.tif 000042
【図９】
2007183998.tif 000043
【図１０】
2007183998.tif 000044
【図１１】
2007183998.tif 000045
【図１２】
2007183998.tif 000046
【図１３】
2007183998.tif 000047
【図１４】
2007183998.tif 000048
【図１５】
2007183998.tif 000049
【図１６】
2007183998.tif 000050
【図１７】
2007183998.tif 000051
【図１８】
2007183998.tif 000052
【図１９】
2007183998.tif 000053
【図２０】
2007183998.tif 000054
【図２１】
2007183998.tif 000055
【図２２】
2007183998.tif 000056
【図２３】
2007183998.tif 000057
【図２４】
2007183998.tif 000058
【図２５】
2007183998.tif 000059
【図２６】
2007183998.tif 000060
【図２７】
2007183998.tif 000061
【図２８】
2007183998.tif 000062
【図２９】
2007183998.tif 000063
【図３０】
2007183998.tif 000064
【図３１】
2007183998.tif 000065
【図３２】
2007183998.tif 000066
【図３３】
2007183998.tif 000067
【図３４】
2007183998.tif 000068