JP3983394B2 - 幾何学処理プロセッサ - Google Patents
幾何学処理プロセッサ Download PDFInfo
- Publication number
- JP3983394B2 JP3983394B2 JP31819098A JP31819098A JP3983394B2 JP 3983394 B2 JP3983394 B2 JP 3983394B2 JP 31819098 A JP31819098 A JP 31819098A JP 31819098 A JP31819098 A JP 31819098A JP 3983394 B2 JP3983394 B2 JP 3983394B2
- Authority
- JP
- Japan
- Prior art keywords
- data
- instruction
- geometric
- output
- unit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Description
【発明の属する技術分野】
この発明は、SIMD(Single Instruction stream and Multiple Data stream)型の3次元グラフィックス用幾何学処理プロセッサに関し、特に、幾何学演算自体を高速に実行できるとともに、周辺装置との間の入出力も高速に行なえる3次元グラフィックス用幾何学処理プロセッサに関する。
【0002】
【従来の技術】
最近の画像処理の対象の広がりに合わせて、3次元グラフィックス処理を必要とするシステムの範囲が広がっている。そうしたシステムではリアルタイムの処理が要求されることも多い。
【0003】
【発明が解決しようとする課題】
ところが、画像処理、特に3次元グラフィックス処理では、その特徴として以下があることが知られている。
【0004】
(1) 条件分岐が多発する。
(2) 逆数(1/x),平方根(√x)、平方根の逆数(1/√x),xのy乗(yは浮動小数点データ)の計算
(3) 積和演算(c=a×b+c)
こうした演算はいずれも計算量が多く、そのためこれら全ての演算を高速に処理可能なアーキテクチャの幾何学処理プロセッサは存在していない。したがって従来の画像処理を伴うシステムでは3Dグラフィックス処理の演算速度の遅さのために処理時間が長くなっていたという問題点がある。
【0005】
それゆえにこの発明の主たる目的は、幾何学演算を高速に処理できる幾何学処理プロセッサを提供することである。
【0006】
この発明の他の目的は、幾何学演算を高速に処理できる上に、周辺装置との間のデータの入出力を高速に行なうことができる幾何学処理プロセッサを提供することである。
【0007】
この発明のさらに他の目的は、幾何学演算を高速に処理できる様、幾何学演算に多数現れる演算を高速で処理可能な上に、周辺装置との間のデータの入出力を高速に行なうことができる幾何学処理プロセッサを提供することである。
【0008】
この発明の他の目的は、幾何学演算および周辺装置との間のデータの入出力をそれぞれ高速に行なうことができる上に、データの入出力と幾何学演算とを並列に実行可能な幾何学処理プロセッサを提供することである。
【0009】
【課題を解決するための手段】
請求項1に記載の発明にかかる幾何学処理プロセッサは、ホストプロセッサ、およびレンダリング用プロセッサにそれぞれ接続される互いに独立した第1および第2の外部インターフェースポートと、ホストプロセッサから第1の外部インターフェースを介して与えられる幾何学演算を処理するための幾何学演算コアとを含む。幾何学演算コアは、SIMD型の複数個の浮動小数点演算ユニットと、浮動小数点べき乗計算ユニットと、整数演算ユニットと、ホストプロセッサからの命令に応答して、これら複数個の浮動小数点演算ユニット、浮動小数点べき乗計算ユニット、および整数演算ユニットを制御してホストプロセッサからのデータを処理するための制御手段と、処理された後のデータをレンダリング用プロセッサに第2の外部インターフェースを介して出力するための出力制御部とを含む。
【0010】
この発明によれば、幾何学演算コアがSIMD型アークテクチャを採用した浮動小数点演算ユニットを備えており、また浮動小数点べき乗計算ユニットと整数演算ユニットとを採用しているため、特に3次元グラフィックスシステムにおける幾何学演算を高速に処理できる。また2つの外部インターフェースを持つことにより、演算後のデータ出力と幾何学演算コアの動作とを並列に実行することができる。
【0011】
請求項2に記載の発明にかかる幾何学処理プロセッサは、請求項1に記載の発明の構成に加えて、幾何学演算コアはさらに、第1および第2の外部インターフェースポート、複数個の浮動小数点演算ユニット、浮動小数点べき乗計算ユニット、整数演算ユニットおよび制御手段と通信可能な、第1のデータバスと、複数個の浮動小数点演算ユニットと浮動小数点べき乗計算ユニットとを接続する第2のデータバスと、複数個の浮動小数点演算ユニットおよび浮動小数点べき乗計算ユニットから受けるデータを第2の外部インターフェースポートに与えるための第3のデータバスと、第1の外部インターフェースポート、複数個の浮動小数点演算ユニット、幾何学処理プロセッサ、整数演算ユニットおよび制御手段と通信可能で、制御手段により生成された3つのアドレスを搬送するための第1、第2および第3のアドレスバスとを含む。第1のデータバスは、第1のデータバスに接続された構成要素間のデータのマルチキャストが可能である。
【0012】
この発明によれば、請求項1に記載の発明の作用効果に加えて、演算処理に必要なデータを1サイクルで全て準備することができ、さらに同時に演算処理の結果も行先に格納できる。そのためパイプライン処理を容易に実現でき、処理が高速化される。
【0013】
請求項3に記載の発明にかかる幾何学処理プロセッサは、請求項2に記載の発明の構成に加えて、第2のデータバスは、複数個の浮動小数点演算ユニットから、浮動小数点べき乗計算ユニットに処理すべき入力データを与えるための第1の単方向データバスと、幾何学処理プロセッサの出力を複数個の浮動小数点演算ユニットに与えるための第2の単方向データバスとを含む。
【0014】
幾何学演算コア内のデータの交換に二つのデータバスを用いることで、データバス獲得の待ち時間がなくなり、処理をより高速に行なえる。
【0015】
請求項4に記載の発明にかかる前記幾何学処理プロセッサは、請求項2または3に記載の発明の構成に加えて、第3のデータバスと第2の外部インターフェースとの間に設けられた出力FIFOをさらに含む。第3のデータバスは、3次元グラフィックス用幾何学処理プロセッサおよび幾何学処理プロセッサの出力であるパラレルデータをシリアルデータに変換して出力FIFOに与える機能を有する。
【0016】
出力FIFOへのシリアルデータ変換を伴ったデータ出力が、幾何学演算コアでの処理とは独立に、かつ並行に行なえる。したがって処理を多重化することができ高速化を図ることができる。
【0017】
請求項5に記載の発明にかかる幾何学処理プロセッサは、請求項2〜請求項4のいずれかに記載の発明の構成に加えて、制御手段は、第1の外部インターフェースポートを介して与えられるグラフィックス処理命令を格納する命令メモリと、命令メモリに格納された命令をデコードし、デコード結果にしたがって複数個の浮動小数点演算ユニット、浮動小数点べき乗計算ユニット、および整数演算ユニットの動作シーケンスを制御するためのシーケンサと、シーケンサの制御にしたがって、第1、第2および第3のアドレスバスに出力される3つのアドレスを生成するためのアドレス生成手段とを含む。
【0018】
ホストプロセッサとは別の制御手段によって演算のシーケンスが制御され、かつ演算の実行のための3つのアドレスが生成され3つのアドレスバスに出力されるので、演算の実行サイクルが短くて済み処理全体を高速化することができる。
【0029】
【発明の実施の形態】
以下、本願発明の実施の形態について説明する。なお、以下の実施の形態では、本願発明の3次元グラフィックス用幾何学処理プロセッサについて、PCIバスを有するコンピュータシステムに追加される基板(いわゆる「アドインボード」)形式で実現した場合を説明しているが、本願発明はこれのみに適用可能なわけではない。バス間接続によってホストCPUと接続されるものであればどのようなものでもよく、たとえば他の装置と同じ基板上に実装されたり、CPUと一体的にLSI化されてもよい。
【0030】
図1を参照して、本願発明の1実施の形態について説明する。例示のためのコンピュータシステム50は、ホストCPU52と、ホストブリッジ54を介してホストCPU52に接続された主記憶装置56とアドインカード58とを含む。アドインカード58が本願発明にかかるグラフック処理のためのカードである。
【0031】
アドインカード58は、セカンダリバス72と、ホストCPU52のPCIバスとの間でのブリッジ機能を実現するとともに本願発明にかかる3次元グラフィック処理を行なう幾何学演算エンジン(幾何学演算コア)を含む幾何学演算プロセッサ70と、セカンダリバス72に接続されたレンダラ74および複数個のエージェント76とを含む。
【0032】
幾何学演算プロセッサ70は、LSIであって、3次元グラフィックス処理システムにおける幾何学演算処理を行なうのに適したものである。幾何学演算処理は高い演算精度と大きな計算能力とを持つ必要がある。そのため、この幾何学演算プロセッサ70は、後述するようにSIMD型のアーキテクチャを採用して処理能力を高めている。
【0033】
図1を参照して、概略的にいうと幾何学演算プロセッサ70は、ホストブリッジ54との間のインターフェースをするためのAGPポート80と、セカンダリバス72との間のインターフェースをするためのRCポート86と、AGPポート80およびRCポート86の間でのPCIブリッジ機能を実現するためのPCIブリッジ82と、3次元幾何学演算処理を行なうための幾何学演算コア84とを含む。
【0034】
図2を参照して、より詳細に述べると、幾何学演算プロセッサ70のうち幾何学演算コア84は、AGPポート80に接続された入力FIFO98と、AGPポート80および入力FIFO98に接続されたG−Bus100と、AGPポート80およびG−Bus100に接続されたAD−Bus102と、AD−Bus102に接続されたILM104と、ILM104に接続されたIPU106と、IPU106の出力が接続されたO−Bus116とを含む。O−Bus116はさらに、RCポート86に接続されている。
【0035】
幾何学演算コア84は、G−Bus100およびAD−Bus102に接続された、上述したSIMDアークテクチャの浮動小数点演算処理を行なうためSIMDコア108と、SIMDコア108からの出力を受ける32ビットのD1−Bus110と、AD−Bus102およびD1−Bus110に接続されたFPOWER/FDIV部114と、FPOWER/FDIV部114の出力をSIMDコア108に与えるD2−Bus112とを含む。SIMDコア108の出力もまた、O−Bus116に接続されている。
【0036】
幾何学演算コア84はさらに、G−Bus100およびAD−Bus102に接続された命令メモリ92と、G−Bus100に接続され、命令メモリ92から読み出される命令のシーケンスを制御するためのシーケンサ94と、G−Bus100とAD−Bus102とAGU96とに接続されたAGU96と、これら各要素に所定のクロック信号を供給するためのPLL(Phase Locked Loop)90とを含む。
【0037】
図3に、これら要素の間の接続関係をより詳細に示す。図3を参照して、AD−Bus102はAD0−AD2の3本のアドレスバス(AD−Bus)を含む。SIMDコア108は、4つの浮動小数点演算装置を含んでおり、各浮動小数点演算装置は、浮動小数点演算ユニットFPU0(138)〜FPU3(144)と、ローカルメモリFLM0(130)〜FLM3(136)と、クリップテスト装置120とを含んでいる。幾何学演算プロセッサ70はさらに、FPOWER/FDIV部114内に設けられた二つの浮動小数点除算装置(FDIV0,FDIV1)と、浮動小数点FPOWER演算回路314と、整数演算を行なうためのIPU106(ALUおよびシフタ)およびそのためのローカルメモリであるILM104とを含む。この構成により、照明計算の処理能力が高められる。浮動小数点演算は全てIEEE−754単精度データフォーマットにしたがう。
【0038】
AGPポート80およびRCポート86の二つのAGPポートがそれぞれホストおよびレンダラとのインターフェースに用いられる。これらポートはいずれも66MHzクロックのダブルエッジで動作する32ビットのインターフェースである。システムデータフローを高め、かつ柔軟にするために、本システムはDMA機能を持つブリッジ機能が用意されている。このため、AGP−I/Fをサポートした、レンダラLSIを持つ3次元グラフィックスシステムを容易に構築できる。
【0039】
この3次元グラフィックス用幾何学処理プロセッサは、二つのプロセッサおよび二つのレンダラを持つシステム構成とすることができ、それによってシステム性能をより高めることが可能である。以下、本プロセッサシステムのアーキテクチャについて説明する。
【0040】
(1) アーキテクチャ
(1.1) PCI−I/Fユニット
3次元グラフィックス用幾何学処理プロセッサ内のPCIインターフェースは、二つの機能を行なう。第1番目はプライマリPCIコアと幾何学演算コアとの間のインターフェースである。2番目は、プライマリPCIバスとセカンダリPCIバスとの間のPCI−PCIブリッジ機能である。これはセカンダリバス上に存在する各デバイス(エージェント)をプライマリバスに接続するためである。
【0041】
こうした機能を実現するのはPCI_I_O_BRIDGEモジュールであって、このモジュールは8個のサブモジュールからなる。以下、それらサブモジュールについて説明する。
【0042】
(1.1.1) [PRIM_I_O]
このサブモジュールは、プライマリPCIバスとセカンダリPCIバスおよび幾何学演算コアとの間の非同期のデータ交換を処理するためのものである。このモジュールは二つの状態機械によって制御される。一つはマスター機能のためであり、他方はターゲット機能のためである。マスターとして動作する場合、DMA転送が行なわれる。ターゲットとして動作する場合、FSM(有限状態機械)がバッファを介してデータを通し、セカンダリPCIバスおよび幾何学演算コアの状態機械と協働して動作する。PRIM_I_Oはまた、コンピュータシステム50のコンフィギュレーション時に必要なコンフィギュレーション空間ならびにPCIレジスタおよびフラグを含んでいる。
【0043】
(1.1.2) [SEC_I_O]
SEC_I_Oサブモジュールは、セカンダリPCIバスとプライマリPCIバスおよび幾何学演算コアとの間の非同期なデータ交換を処理するためのものである。このサブモジュールは常にマスターとしてしか動作しないため、マスターのための一つの状態機械のみによって制御される。実際は、このSEC_I_Oは、セカンダリPCIバス上での割込を除くとプライマリPCIバスおよび幾何学演算コアとの二つのソースのみによってトリガーされるので、これらに対しては「スレーブ」として動作する。アクティブになると、SEC_I_Oサブモジュールは各バッファを介してデータを入出力する。またSEC_I_Oサブモジュールは、セカンダリPCIバスのためのアービタも含んでいる。
【0044】
(1.1.3) [GE_I_O]
GE_I_Oサブモジュールは、幾何学演算コアとプライマリPCIバスとの間の非同期なデータ交換を処理する。幾何学演算コアとの間でデータの入出力を行なう必要がある場合、GE_I_O内部の状態機械が幾何学演算コア内のシーケンサ94と協働して適切な制御信号およびアドレス信号を(PCIアドレスを幾何学演算コアの内部アドレスに変換しながら)生成する。
【0045】
(1.1.4) [FIFO_P2S, FIFO_P2C,FIFO_C2S]
FIFO_P2Sサブモジュールはデータについては16×36ビット、アドレスについては2×32ビットのレジスタ容量をもつポスト用バッファである。FIFO_P2Cサブモジュールは、データについて32×36ビットの容量を持つポスト用バッファである。FIFO_C2Sサブモジュールは、データについて32×36ビット、アドレスについて4×32ビットのレジスタ容量を持つポスト用バッファである。これらFIFOをエミュレートするために、デュアルポートRAMが用いられる。各FIFOは各インターフェースとの間で非同期のハンドシェークを行なうことができる。対応のフラグがセットされている場合には、どのバッファもバイパスすることができる。
【0046】
(1.1.5) [FIFO_S2P,FIFO_C2P]
これらサブモジュールはいずれも、データに対する8×32ビットの容量を持つプリフェッチ用バッファである。各FIFOは対応のインターフェースとの間で非同期ハンドシェークを行なうことが可能である。対応のフラグがセットされている場合には、どのバッファもバイパスすることができる。
【0047】
(1.2) 幾何学演算コア
図2を参照して、既に述べたように幾何学演算コア84は、SIMDコア108と、FPOWER/FDIV部114と、命令メモリ92と、シーケンサ94と、AGU96とを含む。図4を参照して幾何学演算コア84はさらに、クリップコード発生器318(CCG)とFMCPR340とを含む。FPOWER/FDIV部114は浮動小数点除算器(FDIV0(310)およびFDIV1(312))と浮動小数点べき乗演算器(FPOWER演算回路314)とを含む。FPOWER演算回路314は浮動小数点平方根演算器(FSQRT)および整数平方根演算器(FISQRT)としても機能し、ベクトル正規化に用いられる。
【0048】
(1.2.1) [バス構造]
幾何学演算コア内でのデータの移動は、二つのグローバルバスおよび二つのローカルバスを経由して行なわれる。これら二つのグローバルバスとは、図2〜図3に示すG−Bus100およびO−Bus116である。ローカルバスとは、図2〜図3に示すSIMDコア108内のD1−Bus110およびD2−Bus112である。これらバスはいずれも32ビット幅である。
【0049】
G−Bus100は、FIFO_P2GEまたは入力FIFO98とデータメモリ(FLM0(130)〜FLM3(136)およびILM104)との間、またはデータメモリ/制御レジスタとデータメモリ/制御レジスタとの間でデータ転送を行なうことができる。O−Bus116は、幾何学演算コアからレンダラLSIへのデータ転送をサポートする。幾何学演算コアからのデータは単方向データバスであるO−Bus116を介して出力FIFOに送信される。D1−Bus110およびD2−Bus112はそれぞれ、SIMDコア108内の各浮動小数点演算ユニットと、FPOWER/FDIV部114に含まれる二つの浮動小数点演算装置と浮動小数点べき乗計算器の間のデータの転送を行なうためのものであり、D1−Bus110は各浮動小数点演算ユニットからFPOWER/FDIV部114への、D2−Bus112はFPOWER/FDIV部114から各浮動小数点演算ユニットへの、それぞれ単方向バスである。このように2本のデータバスをローカルに用いることで、データバス獲得の待ち時間がなくなり処理のパイプライン化が容易になり、処理をより高速化できる。
【0050】
AD−Bus102の3本のソースアドレスバスAD0−2はいずれも単方向バスである。AD0は9ビットのソース0アドレスバスである。AD1は13ビットのソース1アドレスバスである。AD2は13ビットのソース2アドレスバスである。AD1はまた、内部のデータメモリおよび/または制御レジスタからのPCI「メモリ読出」にも使用される。AD2は、内部のデータメモリおよび/または制御レジスタへのPCI「メモリ書込」にも使用される。FLUT146は、PCI「メモリ読出/書込」のみによってAD1およびAD2を用いてアクセスできる。
【0051】
(1.2.2) [SIMD演算処理コア]
(1.2.2.1) 浮動小数点処理(FPU0(138)〜FPU3(144))
図4を参照して、SIMDコア108は4つの浮動小数点演算ユニット(FPU0(138)〜FPU3(144))を含んでいる。各ユニットは浮動小数点乗算器(FMPY330)と、浮動小数点ALU(FALU332)と、データメモリ(FLM0(130)〜FLM3(136)のどれか)と、F2Oバッファ338とを含んでいる。全てのユニットは2ステージのパイプライン処理で同時に同じ処理を行なう。
【0052】
浮動小数点ユニットの各部において必要とされるパイプラインステージの数を表1に示す。
【0053】
【表1】
【0054】
FPU内の主要なブロック間におけるアドレス・データタイミングの例を図5に示す。FDIV0およびFDIV1を動作させるfdiv0、fdiv1命令については図5には示していないが、その場合のタイミングはfpow命令の実行ステージがEXE9まである場合に相当する。図5で特に注意すべきことは、FDIV0、FDIV1、FPOWERはG−Bus100を介してFLMから演算器にデータ転送が必要であるため、D1−Bus転送ステージが1ステージ分必要である点である(図5においてはTSステージとして示してある)。
【0055】
FMPY330と、FALU332と、FDIV0(310)およびFDIV1(312)と、FPOWER演算回路314とはIEEE−745規格の単精度浮動小数点データフォーマットにしたがった処理を実行できる。図6にIEEE単精度データフォーマットを示す。また、表2にこの幾何学演算コアによってサポートされるデータフォーマットを示す。
【0056】
【表2】
【0057】
いずれの浮動小数点処理ユニットも、算術論理演算を「Round to Nearest」モードで行なう。他の丸めモードはこれらユニットではサポートされていない。なお各浮動小数点演算ユニットは、、FMPY330の出力に接続されたDRFM334と、FALU332の出力に接続されたDRFA0−3(336)と、F2Oバッファ338とをさらに含んでいる。DRFM334の出力は、データメモリ、例えばFLM0(130)と、FMPY330およびFALU332の入力と、F2Oバッファ338とに接続される。DRFA0−3(336)の出力は、FMPY330の入力と、FALU332の入力と、F2Oバッファ338と、データメモリ、例えばFLM0(130)とに接続されている。
【0058】
正規化されていない数については、内部計算では符号付ゼロに置換される。
以下、浮動小数点ユニットに含まれる各部について説明する。
【0059】
(1.2.2.1.1) データメモリ(FLM)
図7を参照してたとえばFLM0(130)は、512ワード×32ビット、2読出(DO0,DO1)/1書込(DI)の3ポートRAM350と、それぞれ一方の入力がDO0,DO1に接続された2入力のセレクタ352および354と、入力がG−Bus100、D2−Bus112およびライトバックデータ(WB)入力にそれぞれ接続され、出力がDIに接続された3入力セレクタ356と、クロック信号clk1およびclk2によって動作する複数のラッチ回路とを含む。セレクタ352および354は、二つのラッチ回路を介して自己の出力を入力に受けており、データの保持が可能となっている。
【0060】
読出データDO0,DO1はFMPYおよびFALUのソースデータ(S0、S1)となる。DO1出力は、D1−Bus110を介してのFDIV0、FDIV1、FPOWERのソースデータ、move命令によるG−Bus100を介してのメモリ−メモリ間、メモリ−レジスタ間データ転送のソースデータとなる。書込データ(DI入力)としては、FMPY(DRFM)、FALU出力(DRFA0−3)、D2−Bus112、G−Bus100のいずれかが選択される。
【0061】
この3ポートRAM350においては、同一番地に対して同一サイクル内で読出/書込を実行することはできない。
【0062】
マイクロ動作による読出データとしては、HOLDがイネーブルとなる直前のデータが、HOLD期間中およびHOLDがディセーブルとなった後にマイクロ動作によってメモリ読出動作を行なうまで保持される。HOLD期間中においても、チップ外部から直接メモリにアクセスすることが花押である。読出データはDO1からG−Bus100に出力される。
【0063】
(1.2.2.1.2) 浮動小数点乗算器(FMPY)
FMPYは、fmpyおよびfmac命令により、2つの32ビット浮動小数点データの乗算を2ステージで行なう。結果は出力レジスタDRFMに書込まれる。演算フラグはFMCPR経由でフラグレジスタに報告される。
【0064】
入力0としてはFLM読出データ(s0)、FALU出力レジスタ(DRFA0−3)、FMPY出力レジスタ(DRFM)を受ける。入力1としてはFLM読出データ(s1)、FMPY出力レジスタ(DRFM)を受ける(入力レジスタにFALU出力レジスタが接続されていないことに注意)。出力はFMPY出力レジスタ(DRFM)に接続されている。演算フラグとしてはNaN,Operand Error,Infinity,Underflow,Zero,Negativeがある。
【0065】
FMPYにおける入力データ、出力データおよび演算フラグの間の関係を表3に示す。表3においてDeNormは非正規化数を、Normは正規化数を、Infは無限大を、NaNはNot−a−Number(非数字)を、それぞれ表わす。
【0066】
【表3】
【0067】
(1.2.2.1.3) 浮動小数点算術論理演算器(FALU)
FALUは、32ビット浮動小数点データに対する算術論理演算を3ステージ(fthru,fabs命令は1ステージ)、32ビット固定小数点データの比較演算(ficmp命令)を1ステージでそれぞれ行なう。結果は出力レジスタ(DRFA0−3)に書込まれる。演算フラグはFMCPR経由でフラグレジスタに報告される。演算フラグのうちNaNフラグ、Zeroフラグ、Negativeフラグは、クリップコード生成器にも出力される。
【0068】
実行ステージ数が異なる演算命令による出力が競合した場合、出力レジスタへの書込、演算フラグの出力が競合することとなるが、先行する命令の結果の出力が保証され、後発の命令は無視される。例えば実行ステージ数3のfadd命令の2命令後に実行ステージ1のfthru命令が与えられた場合、先行のfadd命令の出力が保証され、後発のfthru命令は無視される。
【0069】
FALUの入力0としてはFLM読出データ(s0)、FALU出力レジスタ(DRFA0−3)、およびFMPY出力レジスタ(DRFM)がある。入力1としてはFLM読出データ(s1)、FALU出力レジスタ(DRFA0−3)、FMPY出力レジスタ(DRFM )がある。出力はFALU出力レジスタ(DRFA0−3)に接続されている。なおDRFA1/2/3は、fthru命令の行先に指定された場合およびfmac1/2/3命令が実行されたときにそれぞれ更新される。行先としては、FLMまたはDRFA0を指定しているfthru命令およびfmac1/2/3命令以外の命令ではDRFA0が更新される。
【0070】
演算フラグはNaN,Operand Error,Infinity,Underflow,Equal(ficmp命令)、Overflow(整数変換時)、ZeroおよびNegativeを含む。
【0071】
FALUにおいて2ソースの加算が行なわれるfadd,fmac1/2/3命令における入出力データ、演算フラグの関係を表4に示す。
【0072】
【表4】
【0073】
FALUにおいて2ソースの減算が行なわれるfsub命令における入出力データおよび演算フラグの関係を表5に示す。
【0074】
【表5】
【0075】
FALUにおいてソース0を0とソース1との間でクランプを行なうfclmp命令における入出力データおよび演算フラグの関係を表6に示す。
【0076】
【表6】
【0077】
FALUにおける1ソース命令(fthru,fabs,ftran,ftranu)における入出力データおよび演算フラグの関係を表7に示す。
【0078】
【表7】
【0079】
FALUにおいて2つの32ビット固定小数点データの一致比較を行なうficmp命令では、2つのデータが同じ場合にEqualフラグがセットされる。他の演算フラグについては前の状態が保持される。ficmp命令の実行ステージ数は1である。
【0080】
(1.2.2.1.4) F2Oバッファ部
F2Oバッファ部は、8ワード×32ビットのレジスタファイルからなり、FMPYまたはFALUの出力をO−Bus116を介してOFIFOに転送するまでの中間バッファとして機能する。FPU命令で行先をOFIFOに指定した場合、OFIFO出力モードの如何にかかわらず、4つのFPUで並列してFMPY出力またはFALU出力がレジスタに書込まれる。レジスタからデータを読出してO−Bus116経由でOFIFOにデータを転送する場合、OFIFO部がF2Oバッファ部に対して読出ポインタおよびイネーブルの制御を行なう。
【0081】
(1.2.3) [FPOWER/FDIV部114]
次に、図2および図3に示されるFPOWER/FDIV部114について説明する。FPOWER/FDIV部114は、図4に示されるようにFDIV0(310)、FDIV1(312)およびFPOWER演算回路314を含む。以下、各部について説明する。
【0082】
(1.2.3.1) 浮動小数点除算器(FDIV0、FDIV1)
浮動小数点除算器は、単精度浮動小数点の精度で、入力データの逆数の演算を行なう。この幾何学演算コアは、同じ構成の除算器を二つ(FDIV0、FDIV1)含む。fdiv0命令によってFDIV0、fdiv1命令によってFDIV1がそれぞれ演算を行なう。
【0083】
浮動小数点除算器には、FLM0−3のいずれか一つのデータがD1−Bus110を介して入力として与えられる。行先にFLMが指定された場合には、出力はD2−Bus112を介してFLMに転送される。浮動小数点除算器の演算実行ステージ数は9である。
【0084】
ローカルメモリ(FLM)/レジスタ(DRFA0−1、DRFP)からFDIV0−1への、D1−Bus110を介した転送には1ステージを要する。そのためfdiv0、fdiv1命令では、命令フェッチから結果の書込までは14ステージとなる。
【0085】
fdiv0,fdiv0,fpow,frcp,fsqrt,fnorm命令ではD2−Bus112を介したデータ転送が行なわれるが、D2−Bus112の転送で競合が発生した場合には、先行命令が優先される。後発命令については演算は実行され出力レジスタに結果の書込は行なわれるが、D2−Bus112転送を用いたFLMへの書込はキャンセルされる。fdiv0,fdiv1命令は実行ステージ数が最も多いFLM書込まで動作が保証される。
【0086】
浮動小数点除算器への入力はD1−Bus110経由でのFLMデータである。出力はDRFA0/DRFA1からD2−Bus112経由でFLM0−3に与えられる。この場合マルチキャスト可能である。演算フラグはDivideby Zero,NaN,Operand Error,Infinity,Underflow,ZeroおよびNegativeを含む。
【0087】
FDIV0、1における入出力データおよび演算フラグの間の関係を表8に示す。
【0088】
【表8】
【0089】
(1.2.3.2) 浮動小数点べき乗演算器(FPOWER)
図8を参照して、FPOWERは、テーブルルックアップによりべき乗(xのy乗)の計算を行なう。具体的には、FPOWERは、2を底とする対数および2のべき乗のテーブルを含むFLUT316と、二つの浮動小数点データx(底)およびy(指数)を受け、FLUT316を参照してxのy乗の計算を行なうためのFPOWER演算部470とを含む。
【0090】
入力のうち底xは、FLM0−3のいずれかから読み出されたデータであって、D1−Bus110またはD2−Bus112を介してFPOWERに与えられる。指数yは、move命令またはload(ldr)命令によって指数レジスタEXPRに設定しておかなければならない。FPOWERは演算コードをも受け、演算コードによって1/x、√x、1/√x、およびxのy乗の演算選択を行なう。
【0091】
FPOWER演算部470は、xおよびyを受け、xをアドレスとしてFLUT316をアクセスすることにより2を底とするxの対数をFLUT316から取出す処理を行なうための前処理部472と、FLUT316から出力されるxの対数と前処理部472を経由して与えられるyの値とを乗算するための乗算器474と、乗算器474の出力結果(仮にこれをωとする)をアドレスとしてFLUT316をアクセスすることによってFLUT316から2のω乗の値(すなわちxのy乗)を取出し出力するための後処理部476とを含む。これら処理は順次進行していく処理なので、パイプライン化することができ、それによってべき乗計算を高速に行なうことができる。
【0092】
なお、指数yについて、y=−1とすると逆数、y=0.5とすると平方根(sqrt)、y=−0.5とすることによって正規化(1/√x)の意味となる。FPOWERを用いてこれらの演算を行なうために用意された命令(frcp,fsqrt,fnorm)については、前処理部472は上述した処理でyの値を無視し、乗算器474に命令に応じた定数を与えて上述した処理を行なわせる。したがってEXPRレジスタに指数yを設定しておく必要はなく、実際にEXPRに上記した値以外の値が設定されていても無視されるので問題はない。またEXPRレジスタにそれぞれ−1/0.5/−0.5をそれぞれ設定することによって逆数/平方根/正規化を行なうことも可能である。こうした処理は実質的にfrcp,fsqrt,fnorm命令と同じ演算結果を与える。しかし実行ステージは1ステージ長い。したがって専用の命令を用意することにより処理が高速化される。
【0093】
EXPRレジスタに設定される指数yは、浮動小数点データでなければならない。ただし、EXPRレジスタにyを書込んだ後、2ステージかけてFPOWER部はyを浮動小数点から24ビットの固定小数点(2の補数の整数9ビット、小数15ビット)に変換する。したがってyはこの固定小数点データのとり得る範囲内になければならない。yがこの範囲外である場合にはFPOWERはOperand Errorフラグを出力し、強制的に固定小数点表現での上限または下限にyの値をクランプして演算を行なう。
【0094】
FPOWERを用いたfrcp命令ではDivide by Zeroフラグは出力されない。
【0095】
FPOWERでの各命令の実行ステージ数は、fpow命令が5、frcp命令が4、fsqrt命令が4、fnorm命令が4である。ただしFLM0−3からのD1−Bus110転送には1サイクルが別途必要である。
【0096】
D2−Bus112を用いるfdiv0、fdiv1 、fpow,frcp,fsqrt,fnorm命令間でD2−Bus112の転送が競合した場合、先行命令が優先される。後発命令については、演算自体は実行され結果が出力レジスタに書込まれるが、D2−Bus112転送によるFLM書込はキャンセルされる。
【0097】
fdiv0、fdiv1命令では、実行ステージ数が最も長いFLM書込まで動作は保証される。fpow命令とfrcp,fsqrt,fnorm命令の間では、fpow命令のFLM書込が保証され、後発のfrcp,fsqrt,fnorm命令の書込みはキャンセルされる。
【0098】
FPOWERの入力はD1−Bus110経由のFLM0−3である。出力はDRFPからD2−Bus112を経由してFLM0−3に与えられる。演算フラグはNaN,Oprand Error,Infinity,Underflow,Zero,Negativeを含む。
【0099】
FPOWERにおける入出力データと演算フラグとの間の関係を表9に示す。
【0100】
【表9】
【0101】
(1.2.4) [クリップコード発生器318]
図4を参照して、幾何学演算コア84はさらに、クリップコード発生器318を含む。クリップコード発生器318(CGU)は、クリップテストのフラグを取り扱う。より詳しくはクリップコード発生器318 は、fclipt命令によってFALUで行なわれる加減算によって生成されるフラグのうち、FPU0−2のNaNフラグ、Zeroフラグ、Negativeフラグを用いて、演算結果が0以上(!NaN&(!N+Z)),0以下(!NaN&(N+Z))を判定し、最大過去2回のflipt命令におけるフラグ状態との間でフラグの論理演算を行なう。その結果によってクリップコード発生器318はプリミティブ(点・線・三角形)とビューボリュームとの位置関係を判定する。判定した結果は、クリップコードレジスタCCRに書込まれる。
【0102】
プリミティブを識別するためのCCR<31:30>には、初期値を設定しておく必要がある。リセット状態ではCCR=0である。
【0103】
クリップコード発生器318は32ビットシフトレジスタ(CCR)を有しており、CCRは4つの部分に分けられている。より具体的には、図9を参照して、クリップコード発生器318 は6ビットシフトレジスタ360と6ビットシフトレジスタ362と6ビットシフトレジスタ364とクリップアウトフラグ発生論理366とを含む。6ビットシフトレジスタ360−364は対応する浮動小数点演算ユニット(FPUx)に近く設けられている。FPU0(138)〜FPU2(142)からの3つのフラグが同時にCCRの各部にシフトインされる。CCRは命令を用いて参照することができる。6ビットシフトレジスタ360−364の出力はクリップアウトフラグ発生論理366に与えられ、クリップアウトフラグ発生論理366がクリップコード等の制御信号を発生する。
【0104】
(1.2.5) [整数演算処理ユニット(IPU106)]
図10を参照して、IPU106は、32ビット整数算術論理演算ユニット(IALU370)と、32ビット整数バレルシフタ(ISFT374)と、O−Bus116に接続されたI2Oバッファ378と、IALU370の出力をラッチするためのレジスタDRIA372と、ISFT374の出力をラッチするためのレジスタDRIS376とを含む。
【0105】
IALU370の一方の32ビット入力には、ILMからのソース1とDRIS376の出力とDRIA372の出力とを受ける3入力セレクタ380の出力が接続されている。IALU370の他方の入力にはILMからのソース1とDRIA372の出力とDRIS376の出力とを受ける3入力セレクタ384の出力が接続されている。DRIA372およびDRIS376の出力はまたセレクタ386を介してI2Oバッファ378に接続される。
【0106】
IALU370とISFT374とはいずれも一つのマシンサイクル内に一つの論理演算を完了することができる。一方、他の種類の算術演算/シフト演算は2マシンサイクルで行なわれる。IALU370はビットセット/ビットリセット/ビットテスト演算を行なうことができる。IALU370とISFT374とによってデータパッキング演算処理をパイプライン形式で行なうこともできる。表10にIALU370とISFT374とのパイプラインステージ数を一覧表形式で示す。
【0107】
【表10】
【0108】
IPU106は二つのデータフォーマットの取扱が可能である。すなわち32ビットの2の補数整数フォーマットと32ビット符号なし整数フォーマットとである。これらのフォーマットを図11および図12にそれぞれ示す。
【0109】
行先(DST)=OFIFO0に指定された場合、IALU370/ISFT374の演算結果はI2Oバッファ378に書込まれる。同時にIPU106からOFIFO部に対して、OFIFO書込信号のみが送られ、OFIFO出力モード信号は送られない。IPU106からの書込リクエスト信号がアサートされた場合、OFIFO部は強制的にOFIFO(IPU)と設定する。
【0110】
整数演算命令に指定できるOFIFO書込モード信号はOFIFO(IPU)のみである。それ以外のOFIFO1−OFIFOf(いずれもFPU選択)が記述された場合、アセンブラ段階でエラーとなるようにしておく。
【0111】
I2Oバッファ378への書込イネーブル信号はIPU106自身が生成する。I2Oバッファ378の書込ポインタはOFIFO部が制御する。I2Oバッファ378の読出ポインタはOFIFO部が制御する。I2Oバッファ378からの読出データはO−Bus116に出力される。この出力3状態バッファのイネーブル信号はOFIFO部が制御する。
【0112】
IPU106でのライトバック(WB)ステージでの競合が発生した場合、先行命令が優先される。
【0113】
(1.2.6) [命令メモリ92]
命令メモリ92は、マイクロコードを格納するための、8kワード×32ビットの単一ポートメモリである。各マイクロコードのビット幅は、AGPシステムに適した32ビットである。図13に命令メモリ92のブロック図を示す。命令メモリ92は、単一ポートメモリ122と、プログラムカウンタの出力、AD1およびAD2に接続されそれらのいずれかを選択して単一ポートメモリ122のアドレスポートに与えるためのセレクタ148とを含む。単一ポートメモリ122のデータポートは、G−Bus100に接続されており、またデータポートの出力はシーケンサ94にも接続されている。
【0114】
命令メモリ92は、各マシンサイクルでプログラムカウンタによって指し示された命令コードをシーケンサ94に与えることができる。命令メモリ92は、ホストからはAGPポート80を介してアクセスすることができる。命令メモリ92は、ホストCPU52の主記憶装置56および幾何学演算コア内のメモリおよびレジスタにマッピングされている。したがってホストCPU52は、AGPポート80を介してAD2上に書込アドレスを与えてPCI「メモリ書込」コマンドを使用することによって命令メモリ92にマイクロコードを書込むことができる。PCI「メモリ読出」コマンドが発行された場合、命令メモリ92はAGPポート80を介してAD1バス上に出力される読出アドレスのデータをG−Bus100を介してAGPポート80に転送することができる。
【0115】
(1.2.7) [シーケンサ94]
シーケンサ94は各マシンサイクルで命令メモリ92から与えられるマイクロコードをデコードし、幾何学演算コアの各部に与えられる制御信号を生成するためのものである。
【0116】
図14を参照して、シーケンサ94は以下のユニットを含んでいる。
(1) 命令レジスタ230
(2) 命令デコーダ240
(3) プログラムカウンタ制御回路254
(4) 割込制御回路242
(5) リセット制御回路246
(6) ウェイト制御回路244
(7) 13ビットのシステムモードレジスタ(SMDR250)
(8) システムステータスレジスタ(SR232)
(9) グラフィックスコマンドレジスタ(GCR234)
(10) フラグレジスタ(FR248)
命令メモリ92から与えられた命令コードは命令レジスタ230内に格納され命令デコーダ240によってデコードされる。次のステップでは、割込制御回路242、リセット制御回路246およびウェイト制御回路244が命令デコーダ240の出力とSMDR250が示す現在のステータスとに応じて、各機能ユニットに対して必要な制御信号を生成する。
【0117】
プログラムカウンタ制御回路254は、PCにロードされるべきソースを選択し、さらに命令デコーダ240の出力に応じてPCの修飾を制御する。プログラムカウンタ制御回路254は以下に示すPC修飾モードをサポートしている。
【0118】
(1) PCインクリメント
(2) ジャンプ
(3) 条件ジャンプ
(4) サブルーチンコール
(5) 条件サブルーチンジャンプ
(6) サブルーチンからの復帰
条件ジャンプについては、FR248の内容に基づいて計算された現在のコンディションをオペランドによって特定されたコンディションと比較する。プログラムカウンタ制御回路254はまた、8レベルのPCスタックとループカウンタ(LC0,LC1)とを含む。このPCスタックによって4重のサブルーチンコールのネストが可能となる。二つのループカウンタによって2レベルのハードウェアによるループ演算がサポートされる。プログラムカウンタ制御回路254は活性化されたループカウンタに対応するゼロフラグを検出してPCの修飾を制御する。
【0119】
図15を参照して、プログラムカウンタ制御回路254は、メモリ間接分岐制御部260と、ループ制御部262と、ビットテスト部264と、コンディションコードテスト部266と、PCスタック制御部268と、PC選択制御部270とを含む。
【0120】
メモリ間接分岐制御部260は、G−Bus100に接続された32ビットの幾何学演算モードレジスタ(GMDR)と、G−Bus100に接続された各32ビットの32個の参照イネーブルフラグレジスタ(RENBR0〜RENBR31)と、32ビットのグラフィックスコマンドレジスタ(GCR)と、G−Bus100に接続にされた6ビットの特殊ケースコマンドレジスタ(SCCR)と、GMDRの内容とRENBRの内容とを比較する比較回路280と、GCR<31:26>とSCCRとの内容を比較するための比較回路282と、AD1,AD2,G−Bus100,比較回路280 の出力、およびGCR<31:26>を受ける、96ワード×16ビットのジャンプアドレステーブル(JAT284)(JATx:x=0〜95)とを含み、jrmd命令によるメモリ間接分岐の制御を行なう。
【0121】
ループ制御部262は、G−Bus100に接続されたループカウンタLC0およびループカウンタLC1と、ループ制御回路290とを含む。
【0122】
ビットテスト部264は、G−Bus100に接続されたビットテストターゲットレジスタ(BTR)と、ビットテスト回路292とを含む。
【0123】
コンディションコードテスト部266は、G−Bus100に接続されたフラグレジスタFR0〜FR2と、コンディションコードテスト回路294とを含む。
【0124】
PCスタック制御部268は、スタックポインタ制御回路296と、PCスタック298とを含む。
【0125】
PC選択制御部270は、PC304と、PC304の出力を受けるインクリメンタ300と、PC304の出力、インクリメンタ300の出力、PCスタック298の出力、GCRの出力、JAT284の出力、および命令メモリ92の出力を受けてそのうちの一つを選択してPC304に与えるためのセレクタ302とを含む。インクリメンタ300の出力はPCスタック298にも与えられる。
【0126】
(1.2.8) [アドレス生成装置(AGU96)]
AGU96は、シーケンサ94の制御にしたがって、二つのソースと一つの行先についてのアドレスデータとレジスタ識別コードとを生成する。これら2つのソースおよび1つの行先とは、内部データメモリおよび/または制御レジスタである。
【0127】
図16を参照して、AGU96は、3つの独立したアドレス生成サブユニット(AGU0(152)〜AGU2(156))と、演算コードを受けてこれらを制御する信号を出力するためのAGUコントローラ150とを含む。これらはいずれもG−Bus100に接続されている。
【0128】
AGUコントローラ150はモジュロモードレジスタ(MRx,4ビット)[x=0−7]を含む。これら3つのサブユニットは、それぞれ二つのソースと一つの行先とに対応するアドレスデータを生成する。各サブユニットは、各マシンサイクルにおいてアドレス(9ビット)またはレジスタ識別コード(8ビット)を生成することができる。各サブユニットは以下のハードウェアリソースを含んでいる。
【0129】
(1) アドレスレジスタ(ARnx,9ビット)[n=0,1,2][x=0−7]
(2) インデックスレジスタ(IXRnx,9ビット)[n=0,1,2],[x=0−7]
(3) 二つの全加算器(9ビット)
より詳細には、AGU0(152)は、IXR00−07(160)と、AR00−07(162)と、加算器170と、加算器172とを含む。IXR00−07(160)の入力はG−Bus100に接続される。IXR00−07(160)の出力はG−Bus100とセレクタ168の一つの入力とに接続される。AR00−07(162)の入力は、セレクタ164の出力に接続される。セレクタ164は3つの入力をもち、それらにはG−Bus100のデータと、モジュロアドレス[3:0]と、加算器172の出力とが与えられる。AR00−07(162)の出力はG−Bus100と、加算器170の入力と、セレクタ174の一つの入力とに接続されている。セレクタ168の他方の入力には0が与えられている。加算器172の他方の入力にはセレクタ166の出力が与えられる。セレクタ166は3入力であり、それらには変位(Displacement)と、1と、−1とが与えられる。セレクタ174の他方の入力には加算器172の出力が与えられる。加算器172の出力はAD0バスに接続されておりソース0のアドレスを与える。
【0130】
同様にAGU1(154)はIXR10−17(180)と、AR10−17(182 )と、セレクタ184と、セレクタ186と、セレクタ188と、加算器190と、加算器192と、セレクタ194とを含む。AGU1(154)の構造はほぼAGU0(152)と同様であるが、セレクタ194が3入力であり、ホストからの読出アドレス(13ビット)がそのうちの一つに与えられている点でAGU0(152)のセレクタ174と相違している。セレクタ194の出力はAD1バスに接続されており、計算されたデータすなわちホストからの読出アドレス(ソース1アドレス)を与える。
【0131】
AGU2(156)もほぼAGU1(154)と同様の構成を持っており、IXR20−27(200)と、AR20−27(202)と、セレクタ204と、セレクタ206と、セレクタ208と、加算器210と、加算器212と、セレクタ214とを含む。セレクタ214もセレクタ194と同様3入力であるが、ホストからの読出アドレスに変えて書込アドレスが与えられる点がセレクタ194と異なる。セレクタ214の出力はAD2バスに接続され、計算されたデータすなわちホストからの書込アドレス(行先アドレス)を与える。
【0132】
たとえばAGUコントローラ150について述べると、加算器170はIXR00−07(160)とAR00−07(162)との加算を行なう。他の加算器172は加算器170の出力と変位またはオフセットデータとの加算を行なう。IXR00−07(160)が命令によって指定されていないときは、加算器170の入力は常に0である。(ARnx、IXR、オフセット)モードが発行された場合、AGUはオフセット値のMSBをゼロと置き換えることにより符号なしの3ビット整数として取り扱う。
【0133】
(1.2.9) [データメモリ(FLM0−3,FLUT,ILM,IFIFO)]
データメモリは3つのカテゴリに分けられる。すなわちFLM0(130)〜FLM3(136)と、FLUT146と、ILM104とである。FLM0−3は512ワード×32ビットの3ポート(2R/1W)RAMであって、各浮動小数点演算ユニット内にデータバッファとして設けられる。FLUTはFPOWER/FDIV部114に含まれるFPOWER演算回路314のための、512ワード×32ビットの3ポート(2R/1W)のテーブルRAMである。ILM104もまた512ワード×32ビットの3ポート(2R/1W)の、IPU106のためのバッファRAMである。FLM0(130)〜FLM3(136)と、FLUT146と、ILM104とに対して、1マシンサイクルで二つの読出と一つの書込処理とが実行できる。
【0134】
入力FIFO98は、幾何学演算コアによって処理すべきグラフィックデータをラッチする。入力FIFO98はFIFO型のバッファであって、AGPポート80と幾何学演算コアとの間のデータ交換に利用される。入力FIFO98は256ワード×32ビットのFIFOからなる。入力FIFO98への書込動作はシーケンサ94によって制御される。
【0135】
FIFO_P2Cの「END」信号がアサートされると、それは入力FIFO98が空ということであって、FIFO_P2Cから入力FIFO98への転送が自動的に開始される。入力FIFO98が一杯であると、入力FIFO98が空になるまで転送は活性化されない。この書込動作は幾何学演算コアが待ち状態のときでも許される。IFIFO読出動作はそれぞれのmove命令(mv)を発行することにより開始される。その結果、入力FIFO98へのグラフィックデータの転送の前に、その次のグラフィックスコマンドが常に幾何学演算コアに転送されなければならない。
【0136】
読出/書込のためのアドレスデータは、入力FIFO98を除きアドレスバス(AD0,AD1およびAD2)を介して各データメモリに転送される。次の表11は、各データメモリに接続されている入出力バスをリストしたものである。
【0137】
【表11】
【0138】
命令セット
(1.3) 命令パイプライン
3次元グラフィックス用幾何学処理プロセッサは6ステージパイプラインによって命令を実行する。6ステージとは、命令フェッチ(IF),デコード(DEC),ソースデータ読出(RD),実行(EXE1およびEXE2)、およびライトバック(WB)である。各ステージは1マシンサイクルで実行される。整数演算が実行されたり、組合せの演算が実行されたり、ジャンプ動作が実行されたりする場合、パイプラインステージの数は異なってくる。図17に3次元グラフィックス用幾何学処理プロセッサでの命令パイプラインを模式的に示す。表12に各パイプラインステージにおける演算を一覧表形式で示す。
【0139】
【表12】
【0140】
さらに表13に、各ユニットにおけるステージ数を一覧表形式で示す。
【0141】
【表13】
【0142】
(1.4) 命令
命令セットは以下のグループに分類される。
【0143】
(1) プログラム制御(12命令)
(2) Move(2命令)
(3) 浮動小数点演算(16命令)
(4) 固定小数点演算(9命令)
以下、これらについて順に説明する。
【0144】
(1.4.1) [プログラム制御命令]
プログラム制御命令は、ジャンプ、条件ジャンプ、および他の、PCおよびアドレスレジスタの内容に影響を与える命令を含んでいる。これらプログラム制御命令について表14に示す。
【0145】
【表14】
【0146】
(1.4.2) [Move命令]
Move/Load命令はG−Bus100およびO−Bus116上でのデータの移動を行なう。これら命令について表15に一覧表を示す。
【0147】
【表15】
【0148】
(1.4.3) [浮動小数点演算命令]
正規化されていない数が検出されない場合、IEEEモードでは全浮動小数点演算命令を1命令サイクルで実行することができる。正規化されていない数が検出された場合、サイクル数は多少増加する。浮動小数点演算命令を表16に示す。
【0149】
【表16】
【0150】
(1.4.4) [固定小数点演算命令]
固定小数点演算命令を表17に示す。
【0151】
【表17】
【0152】
(1.5) 制御レジスタ
以下、命令制御に用いられる制御レジスタ名とその機能について説明する。
【0153】
(1.5.1) [プログラムカウンタ(PC)](図15)
PCは、命令メモリ92から次にフェッチされるべき命令のロケーションのプログラムアドレス(13ビット)を格納するレジスタである。幾何学処理プロセッサが初期化されるとPCは0に設定され、どのような命令によっても直接読出したり書込んだりすることはできない。PC内のプログラムアドレスは、ジャンプ命令の実行時およびサブルーチンからの復帰時を除き1ずつインクリメントされる。サブルーチンへのジャンプ処理を実行するときにはそのときのPCの値がPCスタックに積まれ、ジャンプアドレスがPCにロードされる。PCはリセットされると‘000H’となる。
【0154】
(1.5.2) [システムステータスレジスタ(SR232)]
SR232は、IPU106、FPU0(138)〜FPU3(144)/FDIV/FSQRT、幾何学処理プロセッサ、GCR,IFIFOおよび入力FIFO98のステータスフラグを格納する。表18にこれらSR232内の各ビットと各ステータスとの関係を示す。SR232はmove命令で読み出すことができ、行先オペランドとなることはできない。SR232はリセットされると‘0000H’となる
【0155】
【表18】
【0156】
(1.5.3) [システムモードレジスタ(SMDR250)](図14)
SMDR250はFPU/FDIV/FSQRTの例外モード(SMDR<3:0>)およびPCスタックオーバーフローのためのトラップイネーブルビット(SMDR<4>)を格納する。SMDR250はmove命令により読出/書込が可能である。SMDR250のビット割当てを表19に示す。
【0157】
【表19】
【0158】
もし例外モードが設定されており演算エラーが生ずると、幾何学処理プロセッサはINTA#信号をアサートして割込シーケンスを要求する。もしSMDR<4>がセットされているときにPCスタックのオーバーフローが起こると、幾何学処理プロセッサはこのときもINTA#信号をアサートして割込シーケンスを要求する。SMDR250はリセットシーケンスでは‘1fH’に設定される。
【0159】
(1.5.4) [幾何学演算モードレジスタ(GMDR)](図15)
GMDRは32ビットの現在の幾何学演算モードおよび/またはイネーブルフラグレジスタを含む。その値は参照イネーブルレジスタ(RENBRx:0≦x≦31)と比較され、それによって高速処理が可能な場合を検出する。このマイクロコードをプログラムするプログラマは、GMDRのビット割当てを定義し、GMDRの特定ビットを命令によってセットまたはクリアしなければならない。
【0160】
(1.5.5)
グラフィックスコマンドレジスタ(GCR )(図14)
GCRは32ビットの入力グラフィックスコマンドレジスタである。このレジスタはmove命令で読出すことができる。jrmd命令の発行前には、IFIFOの内容をGCRにロードしておかなければならない。ジャンプアドレステーブル(JAT)のアドレスを決定するためには演算コード(GCR<31:26>)を用いる。
【0161】
(1.5.6) [クリップコードレジスタ(CCR252)](図14)
CCRは32ビットのレジスタであって、現在の頂点のクリップコードと、直前の二つの頂点のクリップコードと、クリップフラグと、現在のプリミティブモードとを格納している。CCRはmove命令により読出/書込ができる。CCRのビット割当てを表20に示す。
【0162】
【表20】
【0163】
プリミティブモードはビット<31:30>に設定する。図4に示すクリップコード発生器318がプリミティブモードを参照してCCR<29:0>を管理する。ビューボリュームの6つの平面と各頂点との関係がCCR<17:0>に設定される。ビューボリュームと各頂点との関係がCCR<20:18>に設定される。ビューボリュームとオブジェクトとの関係がCCR <23:21>に設定される。ビューボリュームの6平面とオブジェクトとの関係がCCR<29:24>に設定される。fclipt命令が発行されるとvertex0およびvertex1クリップコードがそれぞれvertex1およびvertex2クリップコードにシフトされる。その後現在のクリップコードがCCR<5:0>に設定される。同時に、クリップフラグが調べられCCR内にセットされる。CCRはリセットされると‘00000000H’となる。
【0164】
(1.5.7) [ビットテストターゲットレジスタ(BTR)](図15)
BTR(32ビット)は、ターゲットデータを格納する。ターゲットデータはjabtまたはjsbt命令のために使用される。jabtまたはjsbt命令が実行されると、BTR[n],つまりビット位置nが命令オペランドによって指定され、命令によって特定されるテスト値(1または0)と比較される。BTRはmove命令によって読出および書込ができる。BTRは‘00000000H’にリセットされる。
【0165】
(1.5.8) [PCスタック298](図15)
プログラムカウンタスタック(PCS)は、LIFO(後入れ先出し)形式で読み書きされる、8レベルの13ビットレジスタからなる。PCSはどの命令からも直接読み書きはできない。サブルーチンジャンプ命令が実行されるときには、PCの現在の値が自動的にPCSに積まれ、サブルーチンからの復帰命令が実行されるときには、PCSの最上位レベルの値がPCにロードされる。
【0166】
(1.5.9) [ループカウンタ(LC0、LC1)](図15)
ループカウンタLC0とループカウンタLC1とは8ビットカウンタであって、ハードウェアプログラムループを実行すべき回数を特定する。これらカウンタはmove命令によって読み書きできる。dja命令を実行する時には、指定されたループカウンタが1ずつデクリメントされる。カウンタがゼロに等しくなるとPCが1インクリメントされループ処理は終了する。カウンタが0に等しくないときにはdja命令によって指定されたプログラムアドレスがPCにロードされる。ループカウンタLC0またはLC1がゼロに設定されると、ループオペレーションの数はゼロではなく255である。
【0167】
(1.5.10) [特殊ケースコマンドレジスタ(SCCR)](図15)
SCCR(6ビット)は特殊ケースコマンドコードを特定する。GCRが設定されているときにはGCR<31:26>がSCCRと比較される。両者が等しくかつGMDRがRENBRに対応していれば、jrmd命令によって決定されるPCがJAT(JAT64〜95)の中から選択される。SCCRはmove命令によって読み書きできる。
【0168】
(1.5.11) [フラグレジスタFR0、FR1、FR2](図15)
フラグレジスタは3つのレジスタFR0、FR1、FR2を含む。これらレジスタはmove命令で読み出すことができる。FR0(32ビット)はIPUおよび浮動小数点演算ユニットFPU0−3からの算術論理演算フラグを格納する。FR1(32ビット)は浮動小数点演算ユニットFPU0−3の全てからのIEEE例外フラグを格納する。FR2(32ビット)はFDIV0−1およびFPOWERからのIEEE例外フラグを格納する。SR内のIEEE例外ビットは FR1およびFR2の内容で計算される。FR0−2はリセットシーケンスにおいて‘00000000H’に初期化される。
【0169】
条件付演算のためのコンディションコードは、FR0、FR1、FR2によって計算される以下のコンディションの一つを定める。もしFR1が指定されていれば、以下の条件のテストにはFPU3の算術論理演算フラグが用いられ、FPU0、FPU1およびFPU2の算術論理演算フラグは無視される。なぜならFPU0〜3はSIMD形式で動作するからである。表21にコンディションコードの一覧を示す。
【0170】
【表21】
【0171】
(1.5.12) [入力FIFO(IFIFO)](図2、図3)
入力FIFOは32ビット×256ワードのFIFOからなる。このFIFOはmove命令およびjrmd命令で読むことができる。ドライバソフトウェアは、グラフィックコマンドを含む入力グラフィックデータをIFIFOにロードしなければならない。
【0172】
(1.5.13) [出力FIFO(OFIFO)]
出力FIFOは32ビット×256ワードのFIFOからなる。出力FIFOは浮動小数点演算および固定小数点演算の双方で書込することができる。アドレスインクリメンタの出力および処理ユニット(IPUおよびFPU)のパラレル−シリアル変換の出力の双方がハードウェアサポートによってOFIFOにロードされる。この処理は命令の実行と独立に、かつ並行して生じ得る。OFIFOはソースオペランドとして割り当てることはできない。
【0173】
出力モードコード(OFIFO0−F)はマイクロコードの行先として書く必要があるが、OFIFOにロードされるべきデータを指定する。このコードの各ビットはFPUの一つに対応する。もしコード<0>が1にセットされると、FPU0からの出力がOFIFOにO−Bus116を介して転送される。もしユーザがFPU0〜3の全てのデータを使用したい場合には、ユーザはコード<3:0>を1111(fh)とする必要がある。もしコード<3:0>が0000(0h)の場合、データソースとしてIPUが選択される。表22に出力モードコードと選択されるFPUとの関係を示す。
【0174】
【表22】
【0175】
(1.5.14) [プライマリPCIバスインターフェースレジスタ( PBIR) ]
プライマリPCIバスレジスタ<2:0>、<9:8>の内容は、PCIインターフェースユニット内のフラグ、GE_Reset,GE_Idle,GE_Idle_Ack,GE_Int_Req,およびGE_Int_Ackに対応する。
【0176】
PBIR<15:8>はIFIFOステータスフラグとOFIFOステータスフラグとからなる。このレジスタはmove命令によって読むことができる。
PBIRへの書込動作は PBIR<9>のみに影響を与える。PBIRはPCIインターフェースユニット内の制御レジスタに/からコピーされる。PBIRはリセットシーケンスではリセットされて‘1502H’となる。
【0177】
(1.5.15) [プライマリバス割込ベクタレジスタ(PIVR) ]
プライマリバス割込ベクタレジスタは、幾何学演算コアがホストに対して割込プロセスを要求する場合の、ホストのための割込ベクタを格納する。割込要求のための割込ベクタは、(bset等の)命令によって割込要求フラグが PBIRのGE_Int_Reqフラグに設定される前にmove命令によってPIVRに設定される。値のうち00HはIEEE例外のトラップのために予約されている。PIVRはPCIインターフェースユニット内の制御レジスタにコピーされる。PIVRは‘00H’に初期化される。
【0178】
(1.5.16) [出力ワードカウントレジスタ(WCR)]
WCR(8ビット)はセカンダリPCIバスに転送されるべき、PCIアドレスデータを含むデータ数を示す。WCRは命令が一つのバーストのスタートアドレスを転送する前に設定される必要がある。
【0179】
(1.5.17) [IPU(IALU)の出力データレジスタ(DRIA) ](図10)
DRIAは32ビットのIALU出力データレジスタである。add,sub,and,or,bsetまたはbrst命令の一つが実行されるとき、DRIAはいつもIALU出力データをその行先オペランドがDRIAでなくともセーブする。DRIAは整数算術論理命令で読み書きできる。
【0180】
(1.5.18) [IPU(シフタ)の出力データレジスタ(DRIS)](図10)
DRISは32ビットのISFT出力データレジスタである。asftまたはlsft命令が実行されるとDRISは常に行先オペランドがDRISでなくともISFTの出力をセーブする。DRISは整数算術論理命令で読み書きできる。
【0181】
(1.5.19) [指数値レジスタ(EXPR) ]
EXPRは、FPU内でfpow命令を実行するときに使用される指数値を含む32ビット浮動小数点データレジスタである。EXPRはmove命令によって読み書きできる。fpow命令以外ではEXPRの値は無視される。
【0182】
(1.5.20) [FALUの出力データレジスタ(DRFA0) ](図4)
DRFA0はFALUの32ビット出力データレジスタである。FALUの演算処理のうちの一つが実行されると、DRFA0は行先オペランドがDRFA0でない場合でもFALUの出力をセーブする。DRFA0はfdiv,fsqrt,fisqrt命令を除く浮動小数点算術論理演算によって読むことができる。
【0183】
(1.5.21) [浮動小数点累算レジスタ(DRFA1〜3)](図4)
DRFA1〜3はFALUの32ビット出力データレジスタである。FMAC1/FMAC2/FMAC3のうちの命令の一つが実行されると、DRFAの一つが、行先オペランドがDRFAでない場合であってもFALUの出力データをセーブする。DRFA1はFMAC1命令のための累算レジスタであり、DRFA2はFMAC2のためのものであり、DRFA3はFMAC3のためのものである。DRFA1〜3はfidv,fsqrtおよびfisqrt命令以外の浮動小数点算術論理演算によって読むことができる。
【0184】
(1.5.22) [FMPYのための出力データレジスタ(DRFM)](図4)
DRFMは32ビットのFMPYの出力データレジスタである。fmpy,fmacまたはfpow命令の一つが実行されると、DRFMは命令の行先オペランドがDRFMでなくても必ずFMPYの出力をセーブする。DRFMはfdiv,fsqrt,fisqrt命令以外の浮動小数点算術論理演算命令によって読み書き可能である。
【0185】
(1.5.23) [FPOWER演算回路314の出力データレジスタ(DRFP) ](図4)
DRFPは32ビットの、FPOWER演算回路314のための出力データレジスタである。fpow,fsqrt命令のいずれかが実行されると、DRFPは命令の行先オペランドがDRFPでなくてもFPOWER演算回路314の出力をセーブする。DRFPはどの浮動小数点命令によっても読むことはできない。
【0186】
FDIV0/FDIV1のための出力データレジスタ(DRFD0‐1)(図16)
DRFD0〜1は32ビットの、FDIVのための出力データレジスタである。fdiv0命令が実行されるとき、DRFD0は行先オペランドがDRFD0でなくても浮動小数点除算器(FDIV0)の出力をセーブする。DRFD1はFDIV1のためのものである。DRFD0/1はfdiv0/fdiv1命令によって読み書きできる。
【0187】
(1.5.24) [アドレスレジスタ0−7(AGU0)](図16,(AR00−07))
アドレスレジスタはメモリ(JAT、ILM 、FLM0〜FLM3)へのポインタとして使用される3つのアドレスレジスタファイルからなる。これら3つのアドレスレジスタファイルはソース0のオペランドに対する9ビットのアドレスレジスタAR0x(0≦x≦7)と、ソース1のオペランドに対する9ビットのアドレスレジスタAR1y(0≦y≦7)と、行先オペランドに対する9ビットのアドレスレジスタAR2z(0≦z≦7)とからなる。これらレジスタファイルはmove命令によって読み書きができる。オペランドの実効アドレスを計算するときには、選択されたアドレスレジスタ内のアドレスが使用され、多くの場合には修飾される(変位モードの場合を除く)。
【0188】
(1.5.25) [インデックスレジスタ(AGU0)](図16,(IXR00〜07))
インデックスレジスタは3つのアドレスレジスタファイルを含む。これら3つのアドレスレジスタファイルの各々は、アドレスオフセット値を保持する8つの9ビットレジスタからなる。これら3つのレジスタファイルはソース0オペランドのためのIXR0xレジスタ(0≦X≦7)と、ソース1オペランドのためのIXR1yレジスタ(0≦y≦7)と、行先オペランドのためのIXR2zレジスタ(0≦z≦7)とを含む。アドレスレジスタがインデックスモードで読み出されるとき、同じ番号のインデックスレジスタが自動的に読み出されアドレスレジスタに加算される。これらはmove命令によって読み書きできる。
【0189】
AGU1、2についても同様である。
(1.5.26) [モジュロモードレジスタ](図16,(MR0〜7))
MRレジスタ(MR0〜7)は、モジュロアドレシング時のサークルバッファサイズを指定するための4ビットレジスタである。MRx(0≦x≦7)により、AR0x、AR1x、AR2xの合計3個のアドレスレジスタに共通なサークルバッファサイズが指定される。MRxに0が設定された場合、非モジュロモードとなる。このレジスタは、move命令によって読み書き可能である。このレジスタはリセットシーケンスには0Hにリセットされる。
【0190】
(1.5.27) [参照イネーブルフラグレジスタ(RENBRx:0≦x≦31)]
各参照イネーブルフラグレジスタは高速処理するための幾何学演算モードおよび/またはイネーブルフラグを含む。これらレジスタはmove命令によって読み書き可能であり、ドライバソフトウェアによっても書込されるべきである。RENBRxはGMDRに格納されている現在の幾何学演算モードおよび/またはイネーブルフラグと比較され、それによってjrmd演算が実行されたときの高速処理可能なケースを検出できる。
【0191】
(1.5.28) [ジャンプアドレステーブル(JAT)](図15)
JATは16ビット×96ワードのジャンプアドレスルックアップテーブルRAMを含む。JATはmove命令によって読み書き可能でありドライバソフトウェアによっても書込みされる。jrmd命令が実行されるとき、PCはGCRと、GMDRとRENBRxとの比較結果との双方によって生成されるアドレスによってポイントされるJATの内容に設定される。
【0192】
( 2) ピン仕様
(2.1) ピンの概略
図18に、3次元グラフィックス用幾何学処理プロセッサのピンの割当てについて示す。また表23〜表30に各ピンの内容について示す。信号名の先頭に「P_」が付されたピンはプライマリPCIバスすなわちAGPバスに接続される。信号名の先頭に「S_」が付されたピンはセカンダリPCIバスに接続される。信号名の先頭に「T_」が付されたピンは他の3次元グラフィックス用幾何学処理プロセッサに接続される。信号名の最後に「_L」が付されているのは、信号が低レベル電圧であるときに活性となることを示す。なお、以下の記載では「I」は入力を、「O」は出力を、「IO」は入出力を、「tri−O」は三状態出力を、「od−O」はオープンドレイン出力を、それぞれ示している。
【0193】
(2.2) プライマリPCIバスピン
【0194】
【表23】
【0195】
【表24】
【0196】
【表25】
【0197】
(2.3) セカンダリPCIバスピン
【0198】
【表26】
【0199】
【表27】
【0200】
【表28】
【0201】
【表29】
【0202】
(2.4) 他のピン
【0203】
【表30】
【0204】
( 3) 幾何学演算プロセッサの動作
(3.1) アドレス機能
(3.1.1) [アドレシングモード]
図16を参照して、AGUは3つのオペランドアドレシングモードでアドレス計算を行なうことができる。モードは一つの命令によって指定される。
【0205】
(1) 処理前の変位DIS加算(ARxn+DIS)
オペランドのアドレスはアドレスレジスタARxn(x=0〜2、n=0〜7)内にある。オペランドアドレスを使用する前に、命令とともに与えられる4ビットの変位データ(DIS)の内容が加算される。DISの内容は符号なし整数(0≦DIS≦15)として取り扱われる。ARxnレジスタの内容は変化しない。このモードはモジュロモードには影響を受けない。
【0206】
(2) 処理後のインデックスIXRおよび即値オフセットの加算(ARxn+IXR)
オペランドアドレスの内容はアドレスレジスタARxn内にある。オペランドアドレスを使用した後、IXRxnレジスタの内容および即値データが加算され同じアドレスレジスタにストアされる。IXRxnの内容は9ビットの2の補数表示の整数(−256≦IXRxn≦255)として取り扱われる。IXRxnの内容は変化しない。このモードはモジュロモードの影響を受けない。
【0207】
(3) 処理前の1加算(+ARxn)
オペランドのアドレスはアドレスレジスタARxn(x=0〜2、n=0〜7)にある。オペランドアドレスを使用する前に1が加算される。ARxnの内容は変化する。このモードはモジュロモードによって影響を受ける。
【0208】
(4) 処理前の1デクリメント(−ARxn)
オペランドのアドレスはアドレスレジスタARxn(x=0〜2、n=0〜7)にある。オペランドアドレスを使用する前に1が減算される。ARxnの内容は変化する。このモードはモジュロモードの影響を受ける。
【0209】
(5) モジュロモード
モジュロモードは4ビットのMRレジスタMRn(n=0〜7)上に非ゼロの値を設定することにより活性化される。8つのMRレジスタによって8種類の異なったサイズのサークルバッファを使用することができる。MRレジスタはサークルバッファのサイズを指定する。MR=0101(5H)の場合、サークルバッファのサイズは5ワードである。バッファの先頭アドレスはAR<8:4>+0100(4H)に等しい。AR<8:4>はサークルバッファのベースアドレスを指定するのに用いられる。
【0210】
オペランドアドレスは、MRがゼロに等しくない場合でも上述したアドレシングモードのいずれかを用いて計算される。
【0211】
なお、IXR使用時には非モジュロモードのアドレシングを行なう。MRに設定された値は無効である。
【0212】
MRxに設定する値によって3系統のアドレシング制御を行なう。モジュロモードは、アドレスレジスタ更新モードでのみ有効となる。したがって変位加算(AR非加算)ではMRに設定された値は無効となる。
【0213】
デクリメント時にARnが0の場合にはARn=MR値−1に更新する。
ARが初期値のとき、またはIXR使用によってAR値がサークルバッファ間の領域になった場合には、非モジュロモードでアドレス更新を行なう。AR値がいずれかのサークルバッファ内のアドレスになった後には、通常のモジュロモードの制御にしたがう。ただし非モジュロモードアドレシングモード使用時を除く。
【0214】
(3.2) シーケンス制御
以下、図14に示されるシーケンサ94について主として図15を参照して説明する。
【0215】
(3.2.1) [条件付シーケンス制御]
3次元グラフィックス用幾何学処理プロセッサは3個の条件ジャンプ命令と5個の条件サブルーチンコールとを用意している。3個の条件ジャンプ命令とはjacc,jrmdおよびdja命令である。特にjrmd命令は、OpenGLにしたがった幾何学処理のための独自の、かつ効果的な命令である。以下、図15を参照して各部について説明する。
【0216】
(1) メモリ間接分岐制御部260
jrmd命令によってPCとして選択される値の生成は、GCR<13>の値によって2つに分けられる。
【0217】
・ GCR<13>=1
この場合、GCR<12:0>の値がそのまま分岐アドレスとなる。GMDR、RENBR0−31、GCR<31:26>、SCCRの内容は分岐先アドレスの決定には影響しない。
【0218】
・ GCR<13>=0
GMDRとRENBR0−31との比較結果、およびGCR<31:26>とSCCRとの比較結果に基づいて以下のようにして決定されるJATアドレスに納められている値を分岐アドレスとする。
【0219】
まず、「GCR<31:26>がSCCRと等しくない」、または「GCR<31:26>がSCCRと等しく、かつ、RENBR0−31にGMDRと同じものがない」場合には、JATの下位64ワードに対して{0、GCR<31:26>}をアドレスとしてJATの参照が行なわれる。「GCR<31:26>がSCCRと等しく、かつ、RENBR0−31にGMDRと同じものがある」場合には、JATの上位32ワードが参照される。JATの64番地から95番地は、RENBR0−31がGMDRと一致する場合の参照位置にそれぞれ相当する。例えば、RENBR0とGMDRとが等しい場合には、JATの64番地が参照される。もしRENBR0−31の中に互いに等しいものがあった場合には、番号の若いRENBRが優先される。
【0220】
図19を参照して、jrmd命令とGMDR、GCRおよびSCCRの書込タイミングの関係を示す。まず、GMDRとRENBR0−31との比較は、GMDRの書込(mv src1, GMDR )によって起動される。mv命令(またはldr命令)によるGMDRへの書込ステージの次のステージから、RENBR0−7、RENBR8−15、RENBR16−23、RENBR24−31の順で8項ずつ、合計4ステージ(CMP1−CMP4)をかけて行なわれる。比較の終了した次のステージ(図19において「adrJAT」)において、比較結果およびその前ステージで確定していたGCRとSCCRとの比較結果によってJATのアドレスが決定される。
【0221】
さらに次にステージ(図19中の「readJAT」)においてJATの参照を行ない、次ステージ(以後)でのjrmd命令のデコードステージでPC値としてJATの読出データが選択される。したがってJAT参照を行なう場合には、GMDRへの転送命令とjrmd命令との間は8ステージ以上、GCRおよびSCCRへの転送命令とjrmd命令との間は4ステージ以上、それぞれ間隔を空けなければならない。GCR<13>=1でJAT参照を行なわないことが保証されている場合には、GCRへの書込の次ステージでGCR<12:0>をPCとして選択することが可能である。したがってこの場合にはGCRへの転送命令とjrmd命令との間は2ステージ以上の間隔を空ける必要がある。
【0222】
(2) ループ制御部262
図15を参照して、ループ制御部262は、dja命令によるループカウンタを用いたデクリメントジャンプによるPC選択制御を行なう。ループカウンタは、ループカウンタLC0とループカウンタLC1(ともに8ビット)の2系統が存在する。ループ制御部262は、dja命令の第2ステージにおいて、命令で指定されたループカウンタの値を1減算し、0であればPCはインクリメントされ、0でなければ命令(IR<12:0>)で与えられる分岐先アドレスをPCとして選択する。
【0223】
(3) ビットテスト部264
ビットテスト部264は、jabt命令およびjsbt命令によって指定される32ビットのBTR(Bit test Target Register)中の任意の1ビットの状態を判定する。判定結果が指定された状態であれば命令で与えられる分岐先アドレスをPCとして選択し、指定された状態と異なればPCをインクリメントする。PCの更新は第2ステージで行なわれる。
【0224】
(4) コンディションコードテスト部266
コンディションコードテスト部266は、jacc命令およびjscc命令で与えられるコンディションコードにしたがってフラグレジスタのテストを行なう。コンディションコードテスト部266 は、条件が合えば命令で与えられる分岐先アドレスをPCとして選択し、合わなければPCをインクリメントする。
【0225】
(5) PCスタック制御部268
PCスタック制御部268 は、13ビット×8レベルのLIFO(LastIn First Out)形式のスタックによって構成される。PCスタック制御部268は、サブルーチン分岐命令(jsr,jscc,jsbt)によって分岐が発生する場合に、第2ステージでのPC値(分岐からの戻り番地)をスタックの最上位に退避し、スタックポインタを更新する。サブルーチン復帰命令(rts)の第2ステージにおいてPCスタック制御部268は、スタックポインタの値を1戻してスタックの最上位から退避させたPC値を取出して、PC選択制御部270に与える。PCスタック、スタックポインタはG−Bus100に接続されておらず、読み書きすることはできない。
【0226】
(6) PC選択制御部270
PC選択制御部270は、命令の第2ステージにおいて以下の表31に示すようにPCを決定する。
【0227】
【表31】
【0228】
(3.3) システムの状態制御
(3.3.1) [リセット処理]
この3次元グラフィックス用幾何学処理プロセッサは、システムリセットまたはリセット命令(ソフトウェアリセット)を用いることによりリセットできる。システムリセットでは、PCI部を含めて全チップが初期化される。ソフトウェアリセットでは幾何学演算コアのみが初期化される。リセット処理は6サイクルで実行される。
【0229】
(3.3.2) [ウェイト処理]
幾何学演算コアは以下の条件のうちの少なくとも1つが発生するとウェイト状態に入る。
【0230】
(1) リセット
(2) ホストからのHold命令
(3) ホストへの割込
(4) IFIFOが空
(5) OFIFOが一杯
リセットシーケンスが行なわれる場合、チップ内の全要素が予め定められた初期値に初期化される。このリセットシーケンスの後のチップの内部状態は「ウェイト」である。
【0231】
ホストCPU52は幾何学演算コアに対して、プライマリPCIバスを介してPBIR内のhold_Req.ビットをセットすることにより強制的にスタンバイモード(ウェイト)にすることが可能である。仮に幾何学演算コアが何等かの処理(OFIFOへのデータ転送(FIFO_C2S)およびホストCPU52からの割込要求に対する応答待ちを含む)を実行中であってもアイドル要求が検出され幾何学演算コアはウェイト状態に入る(PBIR内のhold_ackビットがセットされる)。幾何学演算コアのリスタートは、ホストインターフェースレジスタ内のhold_Req.ビットをリセットすることによりトリガーされる。チップ内のPCIインターフェースユニットはhold要求によっては影響されない。
【0232】
PBIR内の他のビットをセットすることによっても幾何学演算コアがウェイト状態になる。幾何学演算コアが割込を要求するとき、割込要求フラグとhold_ackビットとがセットされる。その後プライマリPCIポートのINTA_Lピンがアサートされ、幾何学演算コアはhold_Req.ビットがリセットされるまでウェイト状態に入る。割込要求フラグビットがセットされると、hold_Req.ビットがセットされる。hold_Req.ビットがセットされると常に、幾何学演算コアは中断された処理を再開する。
【0233】
また、IFIFOのコンディションによっても幾何学演算コアはウェイト状態に入る。もしIFIFOが空であれば、幾何学演算コアは次のデータを待つ。この場合IFIFOが次のデータを受取りIFIFOのエンプティフラグがリセットされると、幾何学演算コアは中断された処理を再開する。この場合、PBIR内のhold_ackビットはセットされる。
【0234】
さらに、セカンダリPCIバスによっても幾何学演算コアはウェイト状態となる。もし前の出力データがセカンダリPCIインターフェースのOFIFO(C2S−FIFO)内に残っており、幾何学演算コアがOFIFOにさらにデータを出力しようとする場合、幾何学演算コアはウェイト状態に入る(PBIR内のhold_ackビットは影響を受けない)。この場合には、FIFO内に格納されていた前のデータが完全に転送されると、幾何学演算コアは出力FIFOへのデータ転送を再開する。
【0235】
上記した(1)〜(4)によってウェイト状態になったときのみ、ホストCPU52はウェイト状態の幾何学演算コア内の内部メモリ/制御レジスタの読み書きを行なうことができる。上記した(5)によってウェイト状態となった場合、幾何学演算コアの内部データメモリおよび制御レジスタの読み書きは保証されない。なぜならこの場合、ホストによってhold_Req.ビットがセットされたとしても、PBIR内のhold_ackビットはセットされていないためである。
【0236】
(3.3.3) [割込]
ホストCPU52への割込要求をアサートできるのは以下の場合である。
【0237】
(1) IEEE754例外の発生
(2) PCスタックオーバーフローの発生
(3) デバッグモードからの割込の発生
(4) 命令による、PBIR内の割込要求ビットのセット
たとえばIEEE754の例外とか、PCスタックのオーバーフロー等が生じたりして、幾何学演算コアについて誤りを修正する必要がある場合にはホストCPU52に対する割込要求がアサートされる。処理ユニット内で計算誤りが生じた場合には、幾何学演算コアは割込を要求し、PBIR内の割込要求ビットがセットされ、幾何学演算コアは同時に動作を停止する。この場合、PIVRはゼロに設定される。この割込要求のアサートはSMDR<6:0>の内容によって影響される。たとえば、SMDR<5>がゼロであり、「DZ」フラグがセットされている場合、割込要求のアサートは禁止される。SMDR<5>が1であり「DZ」フラグがセットされていれば、割込要求のアサートが実行される。なお、SMDR<6:0>が‘0000000’(計算誤り無視モード)である場合には、いずれの計算も誤りを含んだ値で実行される。
【0238】
割込要求ビットの設定は、必要であればmove命令またはload命令を用いることによって行なうことができる。この場合、割込要求ビットをセットすることにより幾何学演算コアがウェイト状態に入ることになるので、割込要求ビットをセットする前にそれら命令によりPIVRをロードしておかなければならない。
【0239】
ホストCPU52は、どのエラーコンディションが発生したのかを特定するために、幾何学演算コア内のシステムステータスレジスタ(SR)を読むことができる。幾何学演算コアは、PBIR内のIdle_Req.ビットがリセットされるまでウェイト状態となっている。ウェイト状態の間でも、幾何学演算コアの内部メモリ/制御レジスタの読み書きは可能である。命令メモリがホストによって書換えされた場合、PCをリセットするためにホストは幾何学演算コアをリセットする必要がある。さもないと、PBIR内のIdle_Req.ビットがリセットされた後、幾何学演算コアは割込前の命令から処理を再開してしまう。
【0240】
幾何学演算コアがOFIFOにデータをポストするときに割込が生ずると、このデータのポストは完了しない。
【0241】
(3.3.4) [内部メモリ/制御レジスタへのダウンロード]
幾何学演算コアの内部メモリおよび/または制御レジスタへのデータダウンロードは、幾何学演算コアがウェイト状態にある間に行なわれる。幾何学演算コアがウェイト状態にある場合、ホストCPU52はプライマリPCIバスの「MEMORY WRITE」コマンド等の機能を用いて命令メモリへのダウンロードを制御する。内部メモリ/制御レジスタからのデータの読出が必要な場合には、ホストCPU52は「MEMORY READ」コマンドを発行すればよい。
【0242】
ホストCPU52は、幾何学演算コアへの「MEMORY WRITE」コマンドを発行する前に、hold_Reqフラグをセットしておかなければならない。
【0243】
ホストCPU52から内部メモリおよび制御レジスタへのアクセスシーケンスを、対象とアクセスモードとにより分類して図20〜図24に示す。
【0244】
なお図24において、ホストCPU52からの読出/書込を許すために、制御レジスタは幾何学演算コアがホールド状態でも動作する。このためセットアップサイクル内のWRITE動作は実行される。このWRITE動作は、HOLDからの復帰後の第1サイクルに再度実行される。
【0245】
(3.3.5) [リセットシーケンス]
3次元グラフィックス用幾何学処理プロセッサは二つのリセットモードを持つ。すなわちシステムリセットとコアリセットとである。システムリセットによって、チップ全体が初期化される。図25に示すように、システムリセットはPCIリセット(P_RST_Lピン)を用いてトリガーされる。
【0246】
コアリセットも同様にチップ全体を初期化する。3次元グラフィックス用幾何学処理プロセッサ内のPCIインターフェース部もこのコアリセットによりリセットされる。各リセットモードは6サイクルかけて3次元グラフィックス用幾何学処理プロセッサ内部を初期化した後、ホールド状態とする。
【0247】
コアリセットは二つの方法のいずれかを用いてトリガーすることができる。すなわちGE_reset_requestおよびリセット命令である。ホストCPU52はプライマリPCIバスを介してPBIR内のGE_reset_requestにアクセスすることができる。もしこのビットがホストCPU52によってセットされると、幾何学演算コア内のハードウェアリソースはプライマリPCI論理を除きデフォルト値にリセットされる。
【0248】
リセットシーケンスは内部パイプラインレジスタを初期化するのに6サイクルを要する。リセットシーケンスの後、幾何学演算コアは自動的にウェイト状態に入るが、PCIインターフェースユニットはその後も他のエージェントと通信可能である。
【0249】
ホストCPU52によるリセットは他のHoldよりも高い優先順位を有している。
【0250】
(3.4) OFIFO
図26を参照して、OFIFO392へのデータ転送を行なうOFIFO部390は、IPU106からの信号bIPUouse/bFPUouse(IPU/FPUからOFIFO392への出力命令であることを示す信号)に応答して書込ポインタを生成し各ブロックに出力するとともに、モード信号(FPU0−3のどのブロックのデータをOFIFO392に転送するかを示す)、IPU/FPU出力バッファ(I2S/F2S)のデータをO−Bus116に読み出すためのイネーブル信号、および読出ポインタとを生成するためのポインタ生成部402と、OFIFO392への転送データがバーストの何番目であるかをカウントするWCRを設定し、そのデータがアドレス信号であるか否かを示す信号(badxxxxs)とバーストの最後のデータであることを示す信号(bfinals)とを生成するためのWCR設定部400と、各ブロックよりO−Bus116に出力されたデータを、WCR設定部400の処理に基づきOFIFO392のアドレス部412およびOFIFO414に格納するためのO−Busデータ入力部404と、OFIFO_Fullフラグをチェックし、Holdか否かを決定するためのFULL_Flagチェック部406と、OFIFO392へのデータ転送に必要な信号(bADxxxxs,bWDxxxxs,badxxxxs,bfinals)を出力するためのOFIFOデータ出力部408とを含む。
【0251】
(3.4.1) [WCRの設定]
WCRはmove命令(mv)またはload命令(ldr)命令を用いてG−Bus100を通じて設定することができる。O−Bus116を介したOFIFOへのデータ転送が活性化されたとき、WCRの変更によって時に誤動作を起こすことがある。
【0252】
幾何学演算コアはバーストのサイズを知る必要がある。WCRはバーストサイズ、すなわちO−Bus116に転送されるべきデータの数を格納するレジスタである。仮にユーザがO−Bus116を介してPCI部に5データワード(DW)のバーストを転送しようとしたときには、WCRは5でなく6に設定されなければならない。バーストスタートアドレスもまたO−Bus116を介してPCI部に転送する必要があるからである。すなわち以下の式が成り立つ。
【0253】
【数1】
WCR=1(バースト開始アドレス)+N(バーストデータの数)
さらにまた、WCRの設定とOFIFOの書込とのタイミングの関係についても注意する必要がある。既に述べたように、幾何学演算コアはOFIFOへのデータの書込が完了すると、セカンダリPCI状態機械を開始させるためにWCRを参照する。したがって、WCRの変更が書込の完了前に行なわれてしまうと、幾何学演算コアの論理は現在のバースト転送を行なうことができない。マイクロコードを設計する場合には、このタイミングに注意しなければならない。このタイミングについての問題に関しては、マイクロコードのプログラマはソフトウェアシミュレータを使用してWCRの設定タイミングが適切か否かを調べる必要がある。図27にWCRの設定シーケンスを示す。
【0254】
(3.4.2) [O−Bus116のデータ転送(単独/複数)]
複数ソースコマンドに関する制限として、次開始アドレスを含まないこと、およびバンク境界をこえないこと、がある。複数ソースコマンドを用いる場合、複数データストリームのうちの2番目以降についてはパイプラインストールを引き起こさない。このため複数ソースコマンドは有利である。
【0255】
(3.4.3) [OFIFO_Fullフラグによるウェイト]
OFIFO_Fullフラグは以下のような場合にサンプリングされる。
【0256】
(1) 各バンクの15番目のデータがOFIFOに書込まれたとき。
(2) バーストの最後のデータであることを示すFinalフラグがアサートされたとき。
【0257】
SR内のOFIFO_Fullフラグ(SR[8])は、幾何学演算コアがウェイティング状態でない場合、各サイクルにおいてPCIインターフェースからFIFO_C2S_Fullフラグを受ける。ウェイティング状態であればSRにはFIFO_C2S_Fullフラグはロードされない。FIFO_C2S_Fullフラグは半サイクルの遅延の後、SR[8]にセットされる。
【0258】
OFIFO制御論理はOFIFOに対する上書きを禁止するため、FIFO_C2S_Fullフラグをチェックしている。この制御論理は二つの場合にFIFO_C2S_Fullフラグをサンプリングする。その1番目は、finalフラグがアサートされたとき、すなわちOFIFOへのバースト書込が完了したときである。内部のbfinalxs信号がバーストの終了を示す。このbfinalxsがアサートされた場合、PCI論理からのFIFO_C2S_Fullフラグが必ずサンプリングされる。2番目は、バーストにおいてマルチバンク処理を行なう必要がある場合である。WCRが10と等しい場合、一つのバンク全体(16ワード)に書込がされ、さらに他のバンクのもう1ワードにも書込が行なわれる。
【0259】
OFIFO_Full_フラグのサンプリングタイミングを図28および図29に示す。このように、OFIFO部390においてOFIFO392の上書きを防ぎながらデータ出力をホストプロセッサや幾何学演算プロセッサの演算部とは独立に行なうので、正常なデータ出力を行なうために他の処理に影響が出るような負荷がホストプロセッサや幾何学演算プロセッサの演算部に加えられることがない。
【0260】
(3.5) IFIFOからのデータ転送
ホストCPU52から幾何学演算コアへのデータは入力FIFO98にストアされる。入力FIFO98から内部メモリまたはレジスタへのデータの読出はmove命令を用いることによってのみ行なえる。入力FIFO98から他のレジスタまたは内部メモリへのmove命令が実行されると、入力FIFO98は他のレジスタやデータメモリが行なうのと同様、G−Bus100上に読出ポインタにより示されるデータを出力する。この場合、もしIFIFOが空であれば、シーケンスコントローラは読出データがIFIFOに揃うまでパイプラインをストールさせる。
【0261】
IFIFO_Emptyフラグは、幾何学演算コアがホールド状態となる理由の一つである。入力FIFO98からのmove命令が発行されたとき、もしSR内のIFIFO_Emptyフラグがセットされていると、幾何学演算コアはmove命令命令の第3ステージ以降アイドル状態となる。データがIFIFOに揃えば幾何学演算コアは再び動作を初め読出動作(move命令の第3ステージ)が実行される。
【0262】
図30にIFIFO_Emptyコンディションによって起こるHoldシーケンスを示す。
【0263】
( 4) デバッグモード
本実施の形態にかかる幾何学演算コアでは、プログラミングを容易にするために2種類のデバッグ機能が用意されている。第1はトレースモードであり、第2はブレークポイントモードである。
【0264】
(4.1) トレースモード
トレースモードでは、プログラムをステップごとにデバッグすることができる。トレースモードのために幾何学演算コアは2ビットの制御信号、すなわちtrace_enableとtrace_INT_enableとを用いる。これら信号はPCICRに割当てられる。
【0265】
trace_enableがセットされていると、幾何学演算コアはプログラムカウンタの現在の値(PC=nとする)によって示される命令を実行する。実行すべき命令が正常に終了すると幾何学演算コアはウェイト状態に入る。
【0266】
trace_enableビットとtrace_INT_enableとが双方ともセットされていると、自動的にホストCPU52への割込信号が生成され、幾何学演算コアはウェイト状態となる。その結果、幾何学演算コアは連続してウェイト状態にされることになる。
【0267】
ホストCPU52は幾何学演算コアからの割込要求に応答し、次ステップを実行するために PBIR内のIDLEフラグをローに設定しなければならない。それでもtrace_enableビットがセットされたままであれば、上述した動作が繰返される。トレースモードのタイミングの詳細を図31に示す。
【0268】
(4.2) ブレークポイントモード
プログラマは、ブレークポイントアドレスレジスタ(PCIAR)によって示されるプログラムアドレスでプログラム動作を停止させることができる。PCIARはPCIインターフェース内の制御レジスタの一つとして実装することができる。ブレークポイント機能を使用するためには、プログラマはPCICR内のbreak_enableとbreak_INT_enableとを初期化しなければならない。PCICRとPCIARとはともにPCIインターフェースを介して直接アクセスできる。幾何学演算コアを活性化するに先立ってかならずPCICRとPCIARとを初期化しておく必要がある。すなわち、これらレジスタは、リセット後のウェイト状態の間に初期化される必要がある。ホストCPU52によって初期化とIDLEフラグのリセットとが行なわれた後に幾何学演算コアはPC=0からプロセスを開始する。PCの内容がPCICRの内容と等しくなると、break_enableフラグがセットされていれば幾何学演算コアはウェイト状態となる。そのときPCにより示される命令が、通常は命令レジスタにフェッチされている。しかしこの命令に続いて通常実行されるパイプラインステージは実行されない(ウェイト状態)。break_INT_enableビットがセットされていると、ホストCPU52への割込が自動的に生成される。ホストCPU52がこの割込に応答しPBIR内のIDLEフラグをリセットした後、幾何学演算コアはPCIARの次のアドレスから実行を再開する。
【0269】
ブレークポイントモードのタイミングの詳細を図32に示す。
( 5) JTAGバウンダリスキャン
バウンダリスキャン技術はIEEE規格1149.1−1990「IEEE
Standard Test Access Port and Boundary−Scan Architecture」に規定されている。本実施の形態の幾何学演算コアはこのIEEE規格1149.1−1990にしたがったバウンダリスキャン機能を提供している。幾何学演算コアが実装しているバウンダリスキャン機能はEXTEST,BYPASSおよびSAMPLE/PRELOADであり、これらは上述した規格ではデフォルトの機能として規定されている。
【0270】
図33に、本実施の形態にかかる幾何学演算コアのバウンダリスキャン部のアーキテクチャを示す。このバウンダリスキャン回路430は、JTAGバウンダリスキャン機能を提供するものであって、バウンダリスキャン回路430の動作を特定する命令を格納するための4ビットレジスタからなる命令レジスタ(BIR440)と、バウンダリスキャンデータがシフト転送されるとともに、テスト入出力データを保持するためのバウンダリスキャンレジスタ(BSR442)と、必要に応じてバウンダリスキャンデータにBSR442をバイパスさせるためのバイパス経路を形成するバイパスレジスタ(BP444)と、BSR442の出力とBP444の出力との一方を選択して通すセレクタ446と、BIR440の出力とセレクタ446の出力との一方を選択して通すためのセレクタ448とを含む。BIR440、BSR442、およびBP444の入力はいずれもテストデータ入力(TDI)に接続されている。セレクタ448の出力はテストデータ出力(TDO)に接続されている。
【0271】
より詳細に、図34を参照して、BIR440は、TDIとTDOとの間に直列に接続された4個のシフトレジスタ450〜456を含む。シフトレジスタ450が最上位ビット(MSB)、シフトレジスタ456が最下位ビット(LSB)を格納するためのものである。なお本実施の形態では命令が4ビットであるため図34ではシフトレジスタの数は4個であるが、シフトレジスタの数が4に限定されるわけではない。命令のビット数に応じてシフトレジスタの数は変化し得る。これらシフトレジスタ450〜シフトレジスタ456のデータ出力DOは命令デコーダ460 に接続されている。
【0272】
図33および図34に示すバウンダリスキャン回路430では、最初にBIR440に命令を設定する。この場合、まずセレクタ448でBIR440の出力を選択し、TDIからTDOの方向に命令コードをシリアルに転送する。命令コードの各ビットがシフトレジスタ450〜456に格納されると各シフトレジスタ450〜シフトレジスタ456の出力は命令デコーダ460に与えられ、デコードされる。命令デコーダ460はデコード結果にしたがい、図34に示される論理によってBYPASS,EXTEST,SAMPLE/PRELOADなどの制御信号を発生する。BIR440に設定される命令コード(4ビット)とそれによって特定される機能との関係を表32に示す。
【0273】
【表32】
【0274】
テストデータをBSR442に設定するときには、セレクタ448でセレクタ446の出力を、セレクタ446でBSR442の出力を、それぞれ選択するようにする。そしてTDIからTDOに向けてテストデータをシリアルに転送し、所望のテストデータがBSR442内のシフトレジスタの各々に設定されたらテストを実行する。テスト結果のデータをBSR442からTDOに向けて出力する場合も同様である。
【0275】
セレクタ448でセレクタ446の出力を、セレクタ446でBP444の出力を、それぞれ選択するようにすると、テストデータはBSR442をバイパスし次の回路に出力される。これによってテストデータのシフト経路が短くなり、テスト時間を短縮化することができる。
【0276】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【0277】
【発明の効果】
以上のように本願発明によれば、幾何学演算コアがSIMD型アークテクチャを採用した浮動小数点演算ユニットを備えており、また浮動小数点べき乗計算ユニットと整数演算ユニットとを採用しているため、特に3次元グラフィックスシステムにおける幾何学演算を高速に処理できる。また二つの外部インターフェースを持つことにより、演算後のデータ出力と幾何学演算コアの動作とを並列に実行することができる。
【0278】
請求項2に記載の発明によれば、演算処理に必要なデータを1サイクルで全て準備することができ、さらに同時に演算処理の結果も行先に格納できる。そのためパイプライン処理を容易に実現でき、処理が高速化される。
【0279】
請求項3に記載の発明によれば、幾何学演算コア内のデータの交換に二つのデータバスを用いることで、データバス獲得の待ち時間がなくなり、処理をより高速に行なえる。
【0280】
請求項4に記載の発明によれば、出力FIFOへのシリアルデータ変換を伴ったデータ出力が、幾何学演算コアでの処理とは独立に、かつ並行に行なえる。したがって処理を多重化することができ高速化を図ることができる。
【0281】
請求項5に記載の発明によれば、ホストプロセッサとは別の制御手段によって演算のシーケンスが制御され、かつ演算の実行のための三つのアドレスが生成され3つのアドレスバスに出力されるので、演算の実行サイクルが短くて済み処理全体を高速化することができる。
【図面の簡単な説明】
【図1】 本願発明にかかる3次元グラフィックス用幾何学処理プロセッサを持つアドインカードを含むコンピュータシステムのブロック図である。
【図2】 本願発明にかかる3次元グラフィックス用幾何学処理プロセッサのブロック図である。
【図3】 本願発明にかかる3次元グラフィックス用幾何学処理プロセッサのより詳細なブロック図である。
【図4】 浮動小数点演算装置のブロック図である。
【図5】 浮動小数点演算装置の主要なブロック間におけるアドレス・データタイミングの例を示すタイミング図である。
【図6】 IEEEの規格による単精度データ浮動小数点データのフォーマットを示す図である。
【図7】 浮動小数点演算装置のデータメモリのブロック図である。
【図8】 浮動小数点べき乗計算ユニットのブロック図である。
【図9】 クリップコード生成回路のブロック図である。
【図10】 整数演算装置のブロック図である。
【図11】 符号付整数データのフォーマットを示す図である。
【図12】 符号なし整数データのフォーマットを示す図である。
【図13】 命令メモリ92のブロック図である。
【図14】 シーケンス制御装置のブロック図である。
【図15】 プログラムカウンタ制御装置のブロック図である。
【図16】 本願発明の1実施の形態にかかる3次元グラフィックス用幾何学処理プロセッサのアドレス生成装置のブロック図である。
【図17】 本願発明の1実施の形態にかかる3次元グラフィックス用幾何学処理プロセッサの演算コアにおける命令の実行パイプラインの形式を示す図である。
【図18】 本願発明の1実施の形態にかかる3次元グラフィックス用幾何学処理プロセッサLSIのピンアサインメントを示す図である。
【図19】 jrmd命令とGMDR, GCR, SCCR 書込のタイミングを示す図である。
【図20】 IMEMへのホストアクセスのタイミング図である。
【図21】 ILM/FLM0−3/FLUへのホストアクセスにおけるローカルメモリ読出のタイミング図である。
【図22】 ILM/FLM0−3/FLUへのホストアクセスにおけるローカルメモリ書込のタイミング図である。
【図23】 制御レジスタへのホストアクセスにおけるローカルメモリ読出のタイミング図である。
【図24】 制御レジスタへのホストアクセスにおけるローカルメモリ書込のタイミング図である。
【図25】 本願発明にかかる3次元グラフィックス用幾何学処理プロセッサのリセットシーケンスを示す図である。
【図26】 本願発明にかかる3次元グラフィックス用幾何学処理プロセッサのOFIFO部のブロック図である。
【図27】 WCR設定のシーケンスを示す図である。
【図28】 OFIFO_Fullフラグのサンプリングを示すタイミング図である。
【図29】 OFIFO_Fullフラグのサンプリングを示すタイミング図である。
【図30】 IFIFOの読出動作を示すタイミング図である。
【図31】 3次元グラフィックス用幾何学処理プロセッサのトレースモードのタイミング図である。
【図32】 3次元グラフィックス用幾何学処理プロセッサのブレークポイントモードのタイミング図である。
【図33】 3次元グラフィックス用幾何学処理プロセッサのバウンダリスキャンに関する部分のブロック図である。
【図34】 3次元グラフィックス用幾何学処理プロセッサのバウンダリスキャンのための命令レジスタのブロック図である。
【符号の説明】
50 コンピュータシステム、52 ホストCPU、54 ホストブリッジ、70 幾何学演算プロセッサ、82 PCIブリッジ、92 命令メモリ、94シーケンサ、96 アドレス生成装置、98 入力FIFO、100 Gバス、102 ADバス、106 整数演算処理ユニット、108 SIMDコア、110 D1バス、112 D2バス、114 浮動小数点べき乗および除算器、116 Oバス、130〜136 浮動小数点ユニットローカルメモリ、138〜144 浮動小数点ユニット、146 浮動小数点ルックアップテーブル、230 命令レジスタ、232 ステータスレジスタ、240 命令デコーダ、254 プログラムカウンタ制御回路、260 メモリ間接分岐制御部、262ループ制御部、266 コンディションコードテスト部、268 プログラムカウンタスタック制御部、270 プログラムカウンタ選択制御部、284 ジャンプアドレステーブル(JAT)、314 浮動小数点べき乗演算回路。
Claims (5)
- 幾何学処理プロセッサであって、
ホストプロセッサおよびレンダリング用プロセッサにそれぞれ接続される互いに独立した第1および第2の外部インターフェースポートと、
前記ホストプロセッサから前記第1の外部インターフェースを介して与えられる幾何学演算を処理するための幾何学演算コアとを含み、
前記幾何学演算コアは、
SIMD型の複数個の浮動小数点演算ユニットと、
浮動小数点べき乗計算ユニットと、
整数演算ユニットと、
前記ホストプロセッサからの命令に応答して、これら複数個の浮動小数点演算ユニット、浮動小数点べき乗計算ユニット、および整数演算ユニットを制御して前記ホストプロセッサからのデータを処理するための制御手段と、
処理された後のデータを前記レンダリング用プロセッサに前記第2の外部インターフェースを介して出力するための出力制御部とを含む、幾何学処理プロセッサ。 - 前記幾何学演算コアはさらに、
前記第1および第2の外部インターフェースポート、前記複数個の浮動小数点演算ユニット、前記浮動小数点べき乗計算ユニット、前記整数演算ユニットおよび前記制御手段と通信可能な、第1のデータバスと、
前記複数個の浮動小数点演算ユニットと前記浮動小数点べき乗計算ユニットとを接続する第2のデータバスと、
前記複数個の浮動小数点演算ユニットおよび前記浮動小数点べき乗計算ユニットから受けるデータを前記第2の外部インターフェースポートに与えるための第3のデータバスと、
前記第1の外部インターフェースポート、前記複数個の浮動小数点演算ユニット、前記幾何学処理プロセッサ、前記整数演算ユニットおよび前記制御手段と通信可能で、前記制御手段により生成された互いに独立に3つのアドレスを搬送するための第1、第2および第3のアドレスバスとを含み、
前記第1のデータバスは、前記第1のデータバスに接続された構成要素間のデータのマルチキャストが可能である、請求項1に記載の幾何学処理プロセッサ。 - 前記第2のデータバスは、
前記複数個の浮動小数点演算ユニットから、前記浮動小数点べき乗計算ユニットに処理すべき入力データを与えるための第1の単方向データバスと、
前記浮動小数点べき乗計算ユニットの出力を前記複数個の浮動小数点演算ユニットに与えるための第2の単方向データバスとを含む、請求項2に記載の幾何学処理プロセッサ。 - 前記幾何学処理プロセッサは、前記第3のデータバスと前記第2の外部インターフェースとの間に設けられた出力FIFOをさらに含み、
前記第3のデータバスは、3次元グラフィックス用幾何学処理プロセッサおよび幾何学処理プロセッサの出力であるパラレルデータをシリアルデータに変換して前記出力FIFOに与える機能を有する、請求項2または3に記載の幾何学処理プロセッサ。 - 前記制御手段は、
前記第1の外部インターフェースポートを介して与えられるグラフィックス処理命令を格納する命令メモリと、
前記命令メモリに格納された命令をデコードし、デコード結果にしたがって前記複数個の浮動小数点演算ユニット、浮動小数点べき乗計算ユニット、および前記整数演算ユニットの動作シーケンスを制御するためのシーケンサと、
前記シーケンサの制御にしたがって、前記第1、第2および第3のアドレスバスに出力される3つの独立したアドレスを生成するためのアドレス生成手段とを含む、請求項2〜請求項4のいずれかに記載の幾何学処理プロセッサ。
Priority Applications (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31819098A JP3983394B2 (ja) | 1998-11-09 | 1998-11-09 | 幾何学処理プロセッサ |
US09/294,002 US6603481B1 (en) | 1998-11-09 | 1999-04-19 | Geometry processor capable of executing input/output and high speed geometry calculation processing in parallel |
US10/293,684 US20030197705A1 (en) | 1998-11-09 | 2002-11-14 | Geometry processor capable of executing input/output and high speed geometry calculation processing in parallel |
US10/391,253 US20030206173A1 (en) | 1998-11-09 | 2003-03-19 | Geometry processor capable of executing input/output and high speed geometry calculation processing in parallel |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP31819098A JP3983394B2 (ja) | 1998-11-09 | 1998-11-09 | 幾何学処理プロセッサ |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007085261A Division JP2007183998A (ja) | 2007-03-28 | 2007-03-28 | 幾何学処理プロセッサ |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2000148695A JP2000148695A (ja) | 2000-05-30 |
JP3983394B2 true JP3983394B2 (ja) | 2007-09-26 |
Family
ID=18096457
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP31819098A Expired - Fee Related JP3983394B2 (ja) | 1998-11-09 | 1998-11-09 | 幾何学処理プロセッサ |
Country Status (2)
Country | Link |
---|---|
US (3) | US6603481B1 (ja) |
JP (1) | JP3983394B2 (ja) |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6718457B2 (en) * | 1998-12-03 | 2004-04-06 | Sun Microsystems, Inc. | Multiple-thread processor for threaded software applications |
DE10122309A1 (de) * | 2001-05-08 | 2002-11-21 | Systemonic Ag | Adressgeneriereinheit |
KR20040062604A (ko) * | 2001-10-31 | 2004-07-07 | 브이렉스, 인크. | 서로 다른 두 개의 물품 궤적을 갖는 3차원 입체영상 x선시스템 |
JP4329332B2 (ja) * | 2002-01-15 | 2009-09-09 | 株式会社デンソー | 電子制御装置及び制御プログラム |
JP4300001B2 (ja) * | 2002-07-31 | 2009-07-22 | ソニー株式会社 | クリッピング装置 |
JP2004126523A (ja) * | 2002-07-31 | 2004-04-22 | Seiko Epson Corp | 電子回路、電気光学装置及び電子機器 |
JP4326474B2 (ja) * | 2002-11-08 | 2009-09-09 | アッセンブレオン エヌ ヴィ | 位置決め装置の少なくとも2つの要素を動かす方法、及び、かかる位置決め装置 |
JP4328581B2 (ja) * | 2003-08-22 | 2009-09-09 | 富士通株式会社 | モジュール間データ転送確認機能を有する装置並びにストレージ制御装置および同装置用インターフェイスモジュール |
US8144156B1 (en) * | 2003-12-31 | 2012-03-27 | Zii Labs Inc. Ltd. | Sequencer with async SIMD array |
US8427490B1 (en) | 2004-05-14 | 2013-04-23 | Nvidia Corporation | Validating a graphics pipeline using pre-determined schedules |
JP4547198B2 (ja) * | 2004-06-30 | 2010-09-22 | 富士通株式会社 | 演算装置、演算装置の制御方法、プログラム及びコンピュータ読取り可能記録媒体 |
US8624906B2 (en) | 2004-09-29 | 2014-01-07 | Nvidia Corporation | Method and system for non stalling pipeline instruction fetching from memory |
EP1812928A4 (en) * | 2004-11-15 | 2010-03-31 | Nvidia Corp | VIDEO PROCESSING |
US8416251B2 (en) | 2004-11-15 | 2013-04-09 | Nvidia Corporation | Stream processing in a video processor |
JP4243271B2 (ja) * | 2005-09-30 | 2009-03-25 | 富士通マイクロエレクトロニクス株式会社 | データ処理装置およびデータ処理方法 |
US9092170B1 (en) | 2005-10-18 | 2015-07-28 | Nvidia Corporation | Method and system for implementing fragment operation processing across a graphics bus interconnect |
US8024551B2 (en) * | 2005-10-26 | 2011-09-20 | Analog Devices, Inc. | Pipelined digital signal processor |
JP4645519B2 (ja) * | 2006-04-27 | 2011-03-09 | 株式会社デンソー | 演算処理装置,制御装置およびプログラム |
JP4232838B2 (ja) | 2007-03-29 | 2009-03-04 | 日本電気株式会社 | 再構成可能なsimd型プロセッサ |
US8683126B2 (en) | 2007-07-30 | 2014-03-25 | Nvidia Corporation | Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory |
US8411096B1 (en) | 2007-08-15 | 2013-04-02 | Nvidia Corporation | Shader program instruction fetch |
US9035957B1 (en) * | 2007-08-15 | 2015-05-19 | Nvidia Corporation | Pipeline debug statistics system and method |
US8659601B1 (en) | 2007-08-15 | 2014-02-25 | Nvidia Corporation | Program sequencer for generating indeterminant length shader programs for a graphics processor |
US9024957B1 (en) | 2007-08-15 | 2015-05-05 | Nvidia Corporation | Address independent shader program loading |
US8698819B1 (en) | 2007-08-15 | 2014-04-15 | Nvidia Corporation | Software assisted shader merging |
US9064333B2 (en) | 2007-12-17 | 2015-06-23 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US8780123B2 (en) | 2007-12-17 | 2014-07-15 | Nvidia Corporation | Interrupt handling techniques in the rasterizer of a GPU |
US8681861B2 (en) | 2008-05-01 | 2014-03-25 | Nvidia Corporation | Multistandard hardware video encoder |
US8923385B2 (en) | 2008-05-01 | 2014-12-30 | Nvidia Corporation | Rewind-enabled hardware encoder |
US8489851B2 (en) | 2008-12-11 | 2013-07-16 | Nvidia Corporation | Processing of read requests in a memory controller using pre-fetch mechanism |
US8311591B2 (en) * | 2009-05-13 | 2012-11-13 | Alcatel Lucent | Closed-loop efficiency modulation for use in network powered applications |
US8977669B2 (en) * | 2010-01-08 | 2015-03-10 | International Business Machines Corporation | Multi-input and binary reproducible, high bandwidth floating point adder in a collective network |
US9691117B2 (en) * | 2011-11-30 | 2017-06-27 | Intel Corporation | External validation of graphics pipelines |
JP6694138B2 (ja) * | 2016-07-26 | 2020-05-13 | 富士通株式会社 | プログラマブルロジックデバイスの制御プログラム、制御方法及び情報処理装置 |
US11516152B2 (en) | 2019-09-28 | 2022-11-29 | Tencent America LLC | First-in first-out function for segmented data stream processing |
US20210096904A1 (en) * | 2019-09-28 | 2021-04-01 | Tencent America LLC | Method and apparatus for a step-enabled workflow |
US11789771B2 (en) | 2019-09-28 | 2023-10-17 | Tencent America LLC | Method and apparatus for a step-enabled workflow |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5230039A (en) * | 1991-02-19 | 1993-07-20 | Silicon Graphics, Inc. | Texture range controls for improved texture mapping |
US5357599A (en) * | 1992-07-30 | 1994-10-18 | International Business Machines Corporation | Method and apparatus for rendering polygons |
US5392393A (en) | 1993-06-04 | 1995-02-21 | Sun Microsystems, Inc. | Architecture for a high performance three dimensional graphics accelerator |
EP0631252B1 (en) | 1993-06-23 | 2002-06-26 | Sun Microsystems, Inc. | Draw processor for a high performance three dimensional graphics accelerator |
JP3268591B2 (ja) * | 1995-11-22 | 2002-03-25 | 株式会社日立製作所 | グラフィックスプロセッサでの並列処理方法 |
JP3519199B2 (ja) * | 1996-02-06 | 2004-04-12 | 株式会社ソニー・コンピュータエンタテインメント | 画像生成装置 |
US5874969A (en) * | 1996-07-01 | 1999-02-23 | Sun Microsystems, Inc. | Three-dimensional graphics accelerator which implements multiple logical buses using common data lines for improved bus communication |
US5944774A (en) * | 1997-09-26 | 1999-08-31 | Ericsson Inc. | Methods apparatus and computer program products for accumulating logarithmic values |
US6128638A (en) * | 1998-07-23 | 2000-10-03 | Silicon Graphics, Inc. | Method and apparatus for calculating X to the Exponent of Y |
JP4274633B2 (ja) * | 1999-06-23 | 2009-06-10 | 株式会社ルネサステクノロジ | 累乗演算装置 |
JP2001022689A (ja) * | 1999-07-06 | 2001-01-26 | Mitsubishi Electric Corp | 出力fifoデータ転送制御装置 |
-
1998
- 1998-11-09 JP JP31819098A patent/JP3983394B2/ja not_active Expired - Fee Related
-
1999
- 1999-04-19 US US09/294,002 patent/US6603481B1/en not_active Expired - Lifetime
-
2002
- 2002-11-14 US US10/293,684 patent/US20030197705A1/en not_active Abandoned
-
2003
- 2003-03-19 US US10/391,253 patent/US20030206173A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
US20030206173A1 (en) | 2003-11-06 |
JP2000148695A (ja) | 2000-05-30 |
US20030197705A1 (en) | 2003-10-23 |
US6603481B1 (en) | 2003-08-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3983394B2 (ja) | 幾何学処理プロセッサ | |
JP3983857B2 (ja) | ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 | |
EP0901071B1 (en) | Methods for interfacing a processor to a coprocessor | |
US5179530A (en) | Architecture for integrated concurrent vector signal processor | |
US5440747A (en) | Data processor with control logic for storing operation mode status and associated method | |
JPH10134036A (ja) | マルチメディア信号プロセッサの単一命令多重データ処理 | |
US20070174596A1 (en) | Data processor | |
GB2455401A (en) | Graphical rendering pipeline having double precision fused multiply-add functional unit(DFMA) | |
US6484253B1 (en) | Data processor | |
US5983338A (en) | Method and apparatus for interfacing a processor to a coprocessor for communicating register write information | |
EP0954791B1 (en) | Eight-bit microcontroller having a risc architecture | |
WO2000045253A9 (en) | Division unit in a processor using a piece-wise quadratic approximation technique | |
US5428811A (en) | Interface between a register file which arbitrates between a number of single cycle and multiple cycle functional units | |
JPH10143494A (ja) | スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理 | |
KR100267092B1 (ko) | 멀티미디어신호프로세서의단일명령다중데이터처리 | |
KR20000048531A (ko) | 데이터 처리장치에서의 입력 오퍼랜드 제어 | |
US7107302B1 (en) | Finite impulse response filter algorithm for implementation on digital signal processor having dual execution units | |
KR20000048529A (ko) | 데이터 처리장치의 레지스터 제어 | |
US6988121B1 (en) | Efficient implementation of multiprecision arithmetic | |
JPH09212362A (ja) | マイクロプロセッサ | |
JP2007183998A (ja) | 幾何学処理プロセッサ | |
US20060095723A1 (en) | Method and apparatus for interfacing a processor to a coprocessor | |
JP2006221664A (ja) | Riscマイクロプロセッサ優先ベクトル割り込みシステム | |
Sohie | The Motorola DSP96002 IEEE floating-point digital signal processor | |
Ash | Enhanced Performance Single-chip DSP Requires Minimal External Circuitry |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051019 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20070122 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070130 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070328 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070626 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070704 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100713 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110713 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110713 Year of fee payment: 4 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110713 Year of fee payment: 4 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120713 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120713 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130713 Year of fee payment: 6 |
|
S531 | Written request for registration of change of domicile |
Free format text: JAPANESE INTERMEDIATE CODE: R313531 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
LAPS | Cancellation because of no payment of annual fees |