(57)【要約】【課題】  本発明は、テーブル参照により高速にべき乗計算を行うことができ、テーブルの容量を小さく抑えることのできる方式、及びその装置を提供することを目的とする。【解決手段】  光源計算を行う光源計算部と、その光源計算部で光源計算された結果に基づいて表示すべき図形データを画素情報に展開するレンダリング部とを有し、光源計算部は、ある入力値Ｘに対してＹ乗するべき乗演算部と、前記Ｙを保持する光源テーブルとを有し、べき乗演算部は、論理式に対応する回路によって構成されている。【選択図】図９
2004259290.tif 000002
【特許請求の範囲】
【請求項１】
光源計算を行う光源計算部と、
前記光源計算部で光源計算された結果に基づいて表示すべき図形データを画素情報に展開するレンダリング部とを有し、
前記光源計算部は、ある入力値Ｘに対してＹ乗するべき乗演算部と、前記Ｙを保持する光源テーブルとを有し、
前記べき乗演算部は、論理式に対応する回路によって構成されていることを特徴とするグラフィックスシステム。
【請求項２】
請求項１記載のグラフィックスシステムにおいて、
前記べき乗演算部は、対数テーブルと、指数テーブルを有することを特徴とするグラフィックスシステム。
【請求項３】
請求項１記載のグラフィックスシステムにおいて、
前記べき乗演算部は、値Ｘと値Ｙに依存することなく、一定時間内に実行できるべき乗演算の回数を一定とすることを特徴とするグラフィックスシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算中にべき乗が含まれる処理を実行する情報処理装置に関する。
【背景技術】
【０００２】
従来、２つのディジタル数値データＸ，Ｎに対してＸN を求めるべき乗計算については、非特許文献１に記されているように、対数関数及び、指数関数をべき級数展開もしくは、連分数展開することで、対数及び、指数をループ計算によって求める手法を用い、ソフトウェア的にＸの対数を計算し、その結果にＮを乗算し、最後にこの乗算結果の指数を計算するといった方法が取られていた。
【０００３】
また別の方法としては、前記２つのディジタル数値データＸ，Ｎから直接アドレスを生成してべき乗テーブル（ＲＯＭ，ＲＡＭ）を参照する方法が取られていた。
【０００４】
【非特許文献１】奥村晴彦著、技術評論社出版「Ｃ言語による最新アルゴリズム事典」のｐ１０５−１０６，ｐ１６２−１６３、及びｐ３０４、平成３年２月２５日発行
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記のように、従来例では、前者の場合、ループ計算が発生し処理の高速化が難しく、後者の場合、テーブルの入力がＸ及びＮの２つであるためテーブルの入力値の階調数はＸの階調数とＮの階調数の積となりテーブルの容量が大きくなるという問題があった。
【０００６】
本発明の目的は、ループ計算を用いず容量の小さいテーブルを参照して高速にべき乗計算を行い得るべき乗演算装置とそれを用いたグラフィックスシステムを提供することにある。
【課題を解決するための手段】
【０００７】
本発明の特徴は、入力値Ｘに対する対数値を対数テーブルを用いて出力する対数算出部と、対数算出部の出力とべき乗する値Ｎを乗算する乗算器と、この乗算器の出力に対する指数値を指数テーブルを用いて出力する指数算出部とからディジタルべき乗演算装置を構成し、前記対数算出部により算出される対数の底と、前記指数算出部により算出される指数の底を同一の値にしたことにある。
【０００８】
また、更にテーブルの容量を減らすために本発明では、前記対数算出部に、その入力値が前記対数テーブルの入力値域に含まれない場合に前記対数算出部の入力値に適当な整数Ｌに対し２L を乗算する対数シフト部と、前記乗算結果を前記対数テーブルの入力とし対数テーブル参照後、参照値にＬを加算して前記対数算出部の出力とする対数加算部を設けたものである。
【０００９】
また、前記指数算出部に、その入力値が前記指数テーブルの入力値域に含まれない場合に前記指数算出部の入力から適当な整数Ｍを減算する指数減算部と、該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に２-Mを乗算して前記指数算出部の出力とする指数シフト部を設けたものである。
【００１０】
但し、ここでいう対数，指数テーブルとは、ＲＡＭ，ＲＯＭだけに留まらず、入力値に対する対数関数，指数関数の値を一定時間内に算出する回路一般を指すものである。
【００１１】
本発明では、入力値Ｘ，Ｎに対してＸN のべき乗計算を行う際、対数テーブル参照によってａを底とする対数ｌｏｇａＸを求め、乗算器でｌｏｇａＸ×Ｎを計算し、指数テーブル参照によってａのｌｏｇａＸ×ＮべきａｌｏｇａＸ×Ｎ＝ＸN を算出する。本発明ではループ計算を行わないため、高速計算が可能である。また、対数テーブルと指数テーブルとの２つにテーブルを分割することで、各テーブルの入力を１つにできて、テーブルの容量を減らすことができる。
【００１２】
また、更にテーブルの容量を減らすために、前記対数算出部の入力値が前記対数テーブルの入力値域に含まれない場合に該入力値に適当な整数Ｌに対し２L を乗算し、該乗算結果を前記対数テーブルの入力とし対数テーブル参照後、該参照値にＬを加算して前記対数算出部の出力とし、前記指数算出部の入力値が前記指数テーブルの入力値域に含まれない場合に該入力値から適当な整数Ｍを減算し、該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に２-Mを乗算して前記指数算出部の出力とする。これによって、前記対数算出部，指数算出部の入力値が前記対数，指数テーブルの入力値域に含まれない場合もべき乗計算できる。従って、前記対数，指数テーブルの入力値域を制限することができ、テーブルの容量を減らすことができる。
【発明の効果】
【００１３】
以上、詳細に説明したように、本発明のディジタルべき乗演算装置はテーブル参照によって演算を行うため、ループ計算より高速に演算結果を得ることができる。
【００１４】
また、対数テーブルと指数テーブルとの２つにテーブルを分割することで、各テーブルの入力を１つにできて、テーブルの容量を減らすことができる。
【００１５】
また、前記対数算出部の入力値が前記対数テーブルの入力値域に含まれない場合に該入力値に適当な整数Ｌに対し２L を乗算し、該乗算結果を前記対数テーブルの入力とし対数テーブル参照後、該参照値にＬを加算することで更に対数テーブルの容量を減らすことができ、前記指数算出部の入力値が前記指数テーブルの入力値域に含まれない場合に該入力値から適当な整数Ｍを減算し、該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に２-Mを乗算することで指数テーブルの容量を減らすことができる。
【発明を実施するための最良の形態】
【００１６】
以下本発明の実施例を図１〜図９を用いて説明する。図８に本発明に基づくディジタルべき乗演算装置を用いた一実施例であるグラフィックス・システムの構成を示す。本システムはアプリケーションソフト等を実行するＣＰＵ(１０００)，主メモリＭＭ(３０００)等を制御するメモリ・コントローラＭＣ（２０００），システムバスを制御するシステムバス・コントローラ（４０００），システムバス・コントローラから受け取ったデータを、座標変換等を行うジオメトリプロセッサ（５０００）に送り、またジオメトリプロセッサから帰ってきたデータに対しＦＩ変換，パック，光源計算等の処理を施すＧＰＩＦ
（００００），ＧＰＩＦ（００００）から送られたデータを画素情報展開するレンダリングプロセッサ（６０００），レンダリングプロセッサ（６０００）が生成した画素情報を記憶するフレームメモリ（７０００）、及びフレームメモリ（７０００）の内容を表示するＣＲＴ（８０００）からなる。
【００１７】
次に、システム全体の動作について説明する。ＣＰＵ（１０００）はアップリケーションを実行し、グラフィックス・コマンドと描画する図形の頂点座標，法線ベクトル，テクスチャ・データ，材質の各反射係数，光源の各反射光用の色等のデータを発行し、ＭＣ
（２０００）とシステムバス・コントローラ（４０００）を介してＧＰＩＦ（００００）に出力する。ＧＰＩＦ（００００）はシステムバス・コントローラ（４０００）から送られた前記コマンドとデータをＧＰＩＦ入力手段（１００）に保持する。
【００１８】
ジオメトリプロセッサ（５０００）はＧＰＩＦ入力手段（１００）に保持しているコマンドとデータを読み、前記コマンドとデータに従い座標変換等の幾何計算を行い、頂点座標，法線ベクトル，テクスチャ・データ等を算出してＧＰＩＦ（００００）に送る。
【００１９】
ＧＰＩＦ（００００）はジオメトリプロセッサ（５０００）から送られたデータに対し、前記コマンドとデータに従い必要ならばＦＩ変換，パックを施し、頂点毎の色を計算する光源計算を行い、連続三角形描画コマンド，頂点座標，色，テクスチャ・データをレンダリングプロセッサ（６０００）に出力する。
【００２０】
レンダリングプロセッサ（６０００）は前記コマンドとデータから内挿補間により図形の内部の画素を生成し、ＣＲＴ（８０００）に表示する内容をビットマップ形式でフレームメモリ（７０００）に書き込み、画像をＣＲＴ(８０００)に表示する。
【００２１】
更に、ＧＰＩＦ（００００）の内部構成について詳細に説明する。
【００２２】
ＧＰＩＦ（００００）は前記システムバス・コントローラ（４０００）から送られたコマンドとデータを保持するバッファであるＧＰＩＦ入力手段（１００）と、前記コマンドとデータを読み幾何計算を行うジオメトリプロセッサ（５０００）から送られたデータを保持するバッファであるＬＢｕｆ(２００)と、前記コマンドとデータをＬＢｕｆ(２００)からコマンド解釈手段（６００）及びＦＩ変換手段（４００）に出力するためのレジスタであるＢｕｆＳＷ（３００）と、前記コマンドを解釈するコマンド解釈手段（６００）と、前記コマンドに従い必要ならデータのＦＩ変換を行うＦＩ変換手段（４００）と、前記コマンドに従い必要なら前記ＦＩ変換後のデータのパック処理を行うパック手段(５００)と、前記ＦＩ変換，パック処理後の光源計算に必要な光源データを保持する光源テーブル（７００）と、光源テーブル（７００）の保持する光源データを基に光源計算を行い色を算出する光源計算手段（０００）と、ジオメトリプロセッサ（５０００），パック手段
（５００）及び光源計算手段（０００）から送られたコマンドとデータの順序を制御する制御手段(８００)と、前記コマンドとデータを保持するバッファであるＣＢｕｆ(９００)と、前記コマンドとデータをレンダリングプロセッサ（６０００）に出力するためのレジスタであるＢｕｆＦＬ（９５０）から構成される。
【００２３】
前記光源テーブル（７００）及び光源計算手段（０００）の詳細を図９に示す。
【００２４】
光源テーブル（７００）には光源計算に必要なパラメータが固定小数点数で保持されている。このパラメータは光源に非依存なものと光源に依存して値の変化するものとがある。光源テーブル（７００）は光源に非依存なパラメータの値をそれぞれ１個ずつ、光源に依存して値の変化するパラメータの値をそれぞれ８個ずつ（８光源分）保持している。もし、光源数が９個以上ある場合は既に計算に使われた値から順に新たな光源の値に一つずつ更新される。
【００２５】
光源に非依存なパラメータに対して、このような書き込み制御を行うために、８個の値のうち、現在何番目の値を計算中であるかを示すリードポインタ，RPNTレジスタが用意されており、ＲＰＮＴ以降の値はロックされ、更新が延期される。
【００２６】
光源計算手段(０００)は法線ベクトルとハーフウェイベクトルの内積を計算するＨＮ内積算出部(０１０)と、該内積のＳＭ乗を計算するべき乗算出部（００）と、法線ベクトルと光源ベクトルの内積を計算するＬＮ内積算出部（０２０）と、べき乗算出部（００）とＬＮ内積算出部（０２０）の出力を用いて各頂点毎の色を算出する色算出部（０３０）から構成される。
【００２７】
ＨＮ内積算出部（０１０）は法線ベクトル（Ｎｘ，Ｎｙ，Ｎｚ）とハーフウェイベクトル（Ｈｘ，Ｈｙ，Ｈｚ）の内積を計算し結果１３bit をべき乗算出部（００）に出力する。
【００２８】
べき乗算出部（００）はＨＮ内積算出部（０１０）の出力を材質の鏡面指数ＳＭ（１から１２８までの整数）乗して結果８bit を色算出部（０３０）に出力する。
【００２９】
ＬＮ内積算出部（０２０）は法線ベクトル（Ｎｘ，Ｎｙ，Ｎｚ）と光源ベクトル（Ｌｘ，Ｌｙ，Ｌｚ）の内積を計算し結果を色算出部（０３０）に出力する。
【００３０】
色算出部(０３０)はＲＧＢの３色をそれぞれ独立に計算するため、同様のリソースを３セット有している。例えばＲについては、環境反射光のＲ成分ＬｃａＲ，拡散反射光のＲ成分ＬｃｄＲ，鏡面反射光のＲ成分ＬｃｓＲ，環境反射係数のＲ成分ＫａＲ，拡散反射係数のＲ成分ＫｄＲ，鏡面反射係数のＲ成分ＫｓＲ，放射反射光と全体の環境反射光のＲ成分の和ＫＲ，減衰係数とスポット光源効果の積ＡｔＳｐ，べき乗算出部（００）の出力、及びＬＮ内積算出部（０２０）の出力を入力とし、頂点の色のＲ成分８bit を出力する。
【００３１】
図１にべき乗算出部（００）の構成を示す。説明の都合上、入力はＸ、及びＮとし、出力はＸN とする。つまり、Ｘ、及びＮは上述の説明に於けるＨＮ内積算出部（０１０）の出力、及び材質の鏡面指数ＳＭに対応する。Ｘは１３bit の固定小数点数で範囲は０〜１、Ｎは８bit の固定小数点数で範囲は０〜１２８、ＸN は８bit の固定小数点数で範囲は０〜１である。
【００３２】
この回路は入力Ｘに対する対数関数の値を１５bit の固定小数点数で算出する対数算出部（１０），該対数算出部（１０）の出力とＮを乗算し、１０bit の固定小数点数を出力する乗算器（２０），該乗算器（２０）の出力に対する指数関数の値を８bit の固定小数点数で算出する指数算出部（３０）からなる。
【００３３】
ここで、対数算出部（１０）及び指数算出部（３０）をそのままテーブルにしてしまうと、対数テーブルは入力レンジが０〜１で１３bit 、出力レンジが０〜８（厳密には８は含まない）で１５bit 、指数テーブルは入力レンジが０〜８（厳密には８は含まない）で１０bit 、出力レンジが０〜１で８bit となり、メモリ容量換算でそれぞれ、122,880bit，８,１９２bit と膨大な容量になってしまう。
【００３４】
しかし、対数及び指数のテーブルを縮退、つまり入出力レンジを制限し、対数算出部
（１０）及び指数算出部（３０）を以下のように構成することにより、それぞれのテーブルの容量の大幅な低減（メモリ容量換算で２４,５７６bit，７６８bit ）と、縮退以前と同様の精度での計算が可能となる。
【００３５】
即ち、該対数算出部（１０）は入力値を縮退した対数テーブル（１２）の入力レンジに入るまでＫビット左シフト（２K を乗算）し、３bit のシフト量Ｋと１１bit のシフト結果を出力する対数シフト部（１１）と、該シフト結果に対する対数関数の値を１２bit の固定小数点数として出力する縮退した対数テーブル（１２）と、該対数テーブル（１２）の出力にＫを加算して、１５bit の固定小数点数を出力する対数加算部（１３）からなる。
【００３６】
また、指数算出部（３０）は、入力値から縮退した指数テーブル（３２）の入力レンジに入るまでＭを減じ、３bit の減算量と７bit の減算結果を出力する指数減算部（３１）と、該減算結果に対する指数関数の値を６bit の固定小数点数として出力する縮退した指数テーブル（３２）と、該指数テーブル(３２)の出力をＭビット右シフトする指数シフト部（３３）から構成される。
【００３７】
図２を使って前記対数算出部（１０）が入力Ｐｘに対して出力Ｐｙを算出する際（この操作を白貫矢印で表している）の動作を示す。図２のグラフは底を２-1＝０.５ とする定義域０〜１（厳密には０は含まない）、値域０〜８（厳密には８は含まない）の対数関数の一部を表わしたものである。ここで、定義域とは入力値ｘの変域を意味し、値域とはｘの変動に伴う出力値ｙの変域を意味する。
【００３８】
領域０は定義域０.５〜１（厳密には０.５は含まない）、値域０〜１（厳密には１は含まない）の部分である。対数テーブル（１２）はこの範囲の対数関数を保持している。つまり、グラフ全体の定義域が０〜１であるのに対して、対数テーブル（１２）が保持している範囲の定義域は０.５〜１ と１／２に、またグラフ全体の値域が０〜８であるのに対して、対数テーブル（１２）が保持している範囲の値域は０〜１と１／８に縮対している。
【００３９】
領域１は定義域０.２５〜０.５（厳密には０.２５ は含まない）、値域１〜２（厳密には２は含まない）の部分であり、対数関数の性質より領域１は領域０に対しｘを２-1倍し、ｙに１を加えたものである。一般的に領域Ｋ（Ｋは０から７までの整数）は定義域
２-K-1〜２-K（厳密には２-K-1は含まない）、値域Ｋ〜Ｋ＋１（厳密にはＫ＋１は含まない）の部分であり、対数関数の性質より領域Ｋは領域０に対しｘを２-K倍し、ｙにＫを加えたものである。対数シフト部（１１）はＰｘがどの領域Ｋの定義域に含まれているかによって、Ｐｘを２K 倍（Ｋ左シフト）し、領域０の定義域までシフトする。簡単のため
Ｐｘは領域１の定義域に含まれているものとし、Ｐｘを２1 倍（１シフト）した結果を
Ｑｘとする（この操作を矢印（１）で表している）。Ｑｘは対数テーブル（１２）の入力値域に含まれているので、対数テーブル（１２）を参照してＱｙを得る（この操作を矢印（２）で表している）。最後に対数加算部（１３）はＱｙにシフト量の１を足してＰｙを算出する（この操作を矢印（３）で表している）。
【００４０】
図３を使って対数シフト部（１１）の動作を示す。対数シフト部（１１）は領域Ｋの定義域内の入力値が領域０の定義域に入るまで左シフトさせ、そのときのシフト量とシフト結果を出力する。
【００４１】
例えば、領域２の定義域は２-3〜２-2で１３bit の固定小数点数で表わすと
0.001000000001〜0.010000000000であるが、この定義域にある値0.001010011101を領域０の定義域0.100000000001〜1.000000000000まで左シフトさせる場合のシフト量は、この値0.001010011101から0.000000000001を引いた0.001010011100の最上位にある１が上位から２桁目に来るまで左シフトさせた際のシフト量と一致する。この場合シフト量は２である。ここで、0.000000000001を引くのは0.010000000000のように領域内の最大値も例外なく扱うためである。このような場合は0.000000000001を引かずに最上位にある１が上位から２桁目に来るまでシフトさせると0.100000000000となり領域０の定義域に含まれなくなる。
【００４２】
また、領域０の定義域は０.５〜１（厳密には０.５は含まない）１３bit であるが、
０.５即ち１３bitの固定小数点数０.100000000001を引いて定義域を０〜０.５（厳密には０.５は含まない）としておくことで上位２bitは必ず００となる。このことを利用して、前記対数テーブル（１２）の入力を１３bit から、必ず００となる上位２bit を取り去り下位の１１bit とすることで、入力ビット数を２bit 節約できる。従って、シフト結果から１３bit の固定小数点数0.100000000001を引いて上位２bit を取り去った１１bit の値を対数テーブル（１２）への出力とする。
【００４３】
但し、シフト量は最大でも７とする。その理由は７bit 左シフトしても領域０の定義域に含まれない値は２-8より小さく、８bit 精度のべき乗結果には現われてこないためである。このような場合、１３bit の固定小数点数0.100000000001を引くと０未満になるため、０クランプして出力値は0.000000000000とする。
【００４４】
（ａ）の場合、入力値は0.001001110100で0.000000000001を引いた値は0.001001110011である。この値の最上位にある１は２bit 左シフトすれば上位から２桁目に来るので、シフト量は２である。従って、入力値0.001001110100を２bit 左シフトした0.100111010000がシフト結果となる。出力値はシフト結果0.100111010000から0.100000000001を引いた
0.000111001111である。
【００４５】
（ｂ）の場合、入力値は0.000000100000で0.000000000001を引いた値は0.000000011111である。この値の最上位にある１は７ビット左シフトすれば上位から２桁目に来るので、シフト量は７である。従って、入力値0.000000100000を７ビット左シフトした
1.000000000000がシフト結果となる。出力値はシフト結果1.000000000000から
0.100000000001を引いた0.011111111111である。
【００４６】
（ｃ）の場合、入力値は0.000000000101で0.000000000001を引いた値は0.000000000100である。この値の最上位にある１は７ビット左シフトしても上位から２桁目に来ることはないので、シフト量は最大の７である。従って、入力値0.000000000101を７ビット左シフトした0.001010000000がシフト結果となる。シフト結果1.000000000000から
0.100000000001を引くと０未満となるので０クランプして出力値は0.000000000000となる。
【００４７】
上述のように動作する対数シフト部（１１）の回路図を図４に示す。
【００４８】
対数シフト部(１１)は上述のように入力値から１３bit の固定小数点数0.000000000001を引いた値を用いてシフト量を決定するため入力直後にこの引き算を行う。図４の最上段には該引き算結果の上位８bit と入力値を並べている。
【００４９】
シフトに関する論理は大きく３段に分かれている。まず、１段目ではＮＯＲ１が該引き算結果の上位８bit のうち、上位５bit のＮＯＲをとりこの値の０，１に応じて該引き算結果の上位８bit 及び入力値を４bit 左シフトするか否かを決定する。
【００５０】
もしＮＯＲ１の出力が１であれば、該引き算結果の上位５bit が全て０であり、４bit 左シフトする余地があることを意味しているため、該引き算結果の上位８bit 及び入力値を４bit 左シフトする。また、シフト量の最上位を１とする。これは４bit 左シフトしたことを示す。
【００５１】
もし、ＮＯＲ１の出力が０であれば該引き算結果の上位５bit の中に１が含まれていて、４bit 左シフトはできないことを意味しているため、該引き算結果の上位８bit 及び入力値は左シフトしない。また、シフト量の最上位を０とする。これは４bit は左シフトできなかったことを示す。
【００５２】
次に、２段目ではＮＯＲ２が該引き算結果の１段目におけるシフト結果の上位３bit のＮＯＲをとり、この値の０，１に応じて該引き算結果及び入力値の１段目におけるシフト結果を更に２bit 左シフトするか否かを決定する。
【００５３】
もしＮＯＲ２の出力が１であれば、該引き算結果の１段目におけるシフト結果の上位３bit が全て０であり、２bit 左シフトする余地があることを意味しているため、該引き算結果及び入力値の１段目におけるシフト結果を２bit 左シフトする。また、シフト量の第２桁目を１とする。これは２bit 左シフトしたことを示す。
【００５４】
もしＮＯＲ２の出力が０であれば、該引き算結果の１段目におけるシフト結果の上位３bit の中に１が含まれていて、２bit 左シフトはできないことを意味しているため、該引き算結果及び入力値の１段目におけるシフト結果は左シフトしない。また、シフト量の第２桁目を０とする。これは２bit 左シフトできなかったことを示す。
【００５５】
次に、３段目ではＮＯＲ３が該引き算結果の２段目におけるシフト結果の上位２bit のＮＯＲをとり、この値の０，１に応じて該引き算結果及び入力値の２段目におけるシフト結果を更に１bit 左シフトするか否かを決定する。
【００５６】
もしＮＯＲ３の出力が１であれば、該引き算結果の２段目におけるシフト結果の上位２bit が全て０であり、１bit 左シフトする余地があることを意味しているため、該引き算結果及び入力値の２段目におけるシフト結果を１bit 左シフトする。また、シフト量の最下位を１とする。これは１bit 左シフトしたことを示す。
【００５７】
もしＮＯＲ３の出力が０であれば、該引き算結果の２段目におけるシフト結果の上位２bit の中に１が含まれていて、１bit 左シフトはできないことを意味しているため、該引き算結果及び入力値の２段目におけるシフト結果は左シフトしない。また、シフト量の最下位を０とする。これは１bit 左シフトできなかったことを示す。
【００５８】
この段階でシフト量３bit は決定されるが、対数テーブルへの出力値は入力値の３段目におけるシフト結果から１３bit の固定小数点数0.100000000001を引き算し更に０クランプした値となる。
【００５９】
次に対数テーブル（１２）について説明する。対数テーブル（１２）の入力は上述のように入力値域０〜０.５（厳密には０.５は含まない）の１１bit の固定小数点数である。また、対数テーブル（１２）の出力は入力値に１３bit の固定小数点数0.100000000001を足した値に於ける対数関数の値を１２bit の固定小数点数で表わしたものであり、出力値域は０〜１（厳密には１は含まない）である。
【００６０】
対数テーブル（１２）はＲＡＭやＲＯＭで作り、入力値をアドレスに変換して参照するように構成することもできるが、ここでは、出力論理値を入力論理値の論理式で表現して論理式に対応する回路で対数テーブル（１２）を構成する。
【００６１】
対数テーブル（１２）の入力の各bit をａ０，ａ１，…，ａ１０とし、対数テーブル
（１２）の出力の各bit をｂ０，ｂ１，…，ｂ１１とすると、各ｂ０，ｂ１，…，ｂ１１はａ０，ａ１，…，ａ１０の積和の論理式で表わすことができる。更に、この積和の各項を主項とする方法として、クイーンの方法や、コンセンサス法が著名である。クイーンの方法や、コンセンサス法については丸善株式会社が昭和５７年６月３０日に発行した後藤宗弘  著、電気・電子学生のための計算機工学ｐ４０〜４５に示されている。
【００６２】
このような方法で生成された論理式に対応する回路で対数テーブル（１２）を構成することができる。
【００６３】
実際に論理合成してみた結果、０.３５μｍ のＣＭＯＳで約４ｋゲートを要した。
【００６４】
最後に対数加算部（１３）について説明する。対数加算部（１３）の入力は対数シフト部（１１）で算出したシフト量と対数テーブル（１２）の出力である。対数加算部(１３)は対数テーブル（１２）の出力値に該シフト量を加算して出力する。
【００６５】
テーブルの出力値域は０〜１（厳密には１は含まない）であり、シフト量は整数であるから、対数加算部（１３）の出力はテーブルの出力値１２bit の上位にシフト量の３bit を付け足した１５bitの固定小数点数である。
【００６６】
次に前記乗算器（２０）について説明する。該乗算器（２０）の入力は前記対数算出部（１０）の出力と、Ｎである。
【００６７】
該乗算器（２０）は前記対数算出部（１０）の出力１５bitとＮ８bitを乗算して出力値域は０〜８（厳密には８は含まない）の１０bit の固定小数点数として出力する。
【００６８】
但し、乗算の結果が８以上になった場合は最大出力値にクランプする。その理由は、
２-1の８以上のべきは２-8より小さく、８bit 精度のべき乗結果には現われてこないためである。
【００６９】
図５を使って前記指数算出部（３０）が入力Ｐｘに対して出力Ｐｙを算出する際（この操作を白貫矢印で表している）の動作を示す。図５のグラフは底を２-1＝０.５ とする定義域０〜８（厳密には８は含まない）、値域０〜１（厳密には０は含まない）の指数関数の一部を表わしたものである。領域０は定義域０〜１（厳密には１は含まない）、値域
０.５〜１（厳密には０.５は含まない）の部分であり、指数テーブル（３２）はこの範囲の指数関数を保持している。つまり、グラフ全体の定義域が０〜８であるのに対して、指数テーブル（３２）が保持している範囲の定義域は０〜１と１／８に、またグラフ全体の値域が０〜１であるのに対して、指数テーブル(３２) が保持している範囲の値域は０.５〜１と１／２に縮退している。
【００７０】
領域１は定義域１〜２(厳密には２は含まない)、値域０.２５〜０.５(厳密には０.２５は含まない)の部分であり、指数関数の性質より領域１は領域０に対しｘに１を加え、ｙを２-1倍したものである。
【００７１】
一般的に領域Ｍ（Ｍは０から７までの整数）は定義域Ｍ〜Ｍ＋１（厳密にはＭ＋１は含まない）、値域２-M-1〜２-M（厳密には２-M-1は含まない）の部分であり、指数関数の性質より領域Ｍは領域０に対しｘにＭを加え、ｙを２-M倍したものである。
【００７２】
指数減算部（３１）はＰｘがどの領域Ｍの定義域に含まれているかによって、ＰｘからＭを減算し、領域０の定義域までスライドする。簡単のためＰｘは領域１の定義域に含まれているものとし、Ｐｘから１減算した結果をＱｘとする（この操作を矢印（１）で表している）。Ｑｘは指数テーブル（３２）の入力値域に含まれているので、指数テーブル
（３２）を参照してＱｙを得る（この操作を矢印（２）で表している）。最後に指数シフト部（３３）はＱｙに減算量の１だけ右シフト（２-1を乗算）してＰｙを算出する（この操作を矢印（３）で表している）。
【００７３】
指数減算部の説明をする。指数減算部（３１）の入力は入力値域０〜８（厳密には８は含まない）の１０bit の固定小数点数である。上述のように、指数減算部（３１）はその入力値がどの領域Ｍの定義域に含まれているかによって、ＰｘからＭを減算し、領域０の定義域までスライドするが、Ｍは入力値の上位３bit であり、入力値からＭを引いた値は入力値の下位７bit である。
【００７４】
次に指数テーブル（３２）について説明する。指数テーブル（３２）の入力は指数減算部（３１）の出力であり、入力値域０〜１（厳密には１は含まない）の７bit の固定小数点数である。また、領域０の値域は０.５〜１（厳密には０.５は含まない）であるが、ｙ方向に−０.５平行移動して値域０〜０.５（厳密には０.５ は含まない）とすることで、指数テーブル（３２）の出力の上位２bit が００となり、出力bit 数を２bit 減らすことが出来る。
【００７５】
従って、指数テーブル（３２）の出力は入力値に於ける指数関数の値を８bit の固定小数点数で表わしたものから０.５即ち８bitの固定小数点数0.1000001を引いた６bitの固定小数点数とし、このとき出力レンジは０〜０.５（厳密には０.５は含まない）である。
【００７６】
指数テーブル（３２）も前記対数テーブル（１２）と同様、ＲＡＭやＲＯＭで作り、入力値をアドレスに変換して参照するように構成することもできるが、ここでは、出力論理値を入力論理値の論理式で表現して論理式に対応する回路で指数テーブル（３２）を構成する。実際に論理合成してみた結果、０.３５μｍ のＣＭＯＳで約１ｋゲートを要した。
【００７７】
最後に図６を使って指数シフト部（３３）の動作を説明する。指数シフト部（３３）の入力は減算部の出力である減算数と指数テーブル（３２）の出力である。上述したように、指数テーブル（３２）の出力は入力値に於ける指数関数の値を８bit の固定小数点数で表わしたものから０.５即ち８bitの固定小数点数0.1000001を引いた６bitの固定小数点数であるから、指数シフト部（３３）は逆に指数テーブル（３２）の出力に０.５即ち８bitの固定小数点数0.1000001 を足して、値域を０.５〜１（厳密には０.５は含まない）に戻す必要がある。次にその値を減算量だけ右シフトして出力する。
【００７８】
（ａ）の場合、指数テーブル(３２) の出力0.01011 に８bit の固定小数点数0.1000001を足して、減算量２だけ右シフトすると、出力値0.0010011 を得る。但し、右シフトで上位bit が空いたところには０が入る。
【００７９】
（ｂ）の場合、指数テーブル（３２）の出力1.01101に８bit の固定小数点数0.1000001を足して、減算量５だけ右シフトすると、出力値0.0000011を得る。
【００８０】
上述のように動作する指数シフト部（３３）の回路図を図７に示す。指数シフト部の入力は指数減算部からの出力である減算量３bit と指数テーブル（３２）からの出力６bit である。指数テーブル（３２）からの出力に対しては入力直後に８bitの固定小数点数
0.1000001を足し算しておく。該足し算結果は８bit の固定小数点数である。
【００８１】
シフトに関する論理は大きく３段に分かれる。まず、１段目では減算数の最下位が１のとき、該足し算結果を１bit 右シフトし、減算数の最下位が０のとき、該足し算結果を右シフトしない。
【００８２】
次に、２段目では減算数の２桁目が１のとき、該足し算結果の１段目におけるシフト結果を２bit 右シフトし、減算数の２桁目が０のとき、該足し算結果の１段目におけるシフト結果を右シフトしない。
【００８３】
最後に、３段目では減算数の最上位が１のとき、該足し算結果の２段目におけるシフト結果を４bit 右シフトし、減算数の最上位が０のとき、該足し算結果の２段目におけるシフト結果を右シフトしない。
【００８４】
本実施例ではべき乗計算部全てを０.３５μｍのＣＭＯＳに実装した場合、約７.５ｋゲートを要し、約３５nsecで演算が完了する。これによって、光源計算をＧＰＩＦ(0000)チップの中に埋め込むことが可能となり、ボトルネックになっているジオメトリプロセッサ（５０００）の処理を軽減することができた結果、システムとして約２倍性能を向上することができた。
【図面の簡単な説明】
【００８５】
【図１】ディジタルべき乗演算装置の回路構成を示す図。
【図２】対数算出部の動作を示す図。
【図３】対数シフト部の動作を示す図。
【図４】対数シフト部の回路構成を示す図。
【図５】指数算出部の動作を示す図。
【図６】指数シフト部の動作を示す図。
【図７】指数シフト部の回路構成を示す図。
【図８】グラフィックス・システムの構成を示す図。
【図９】光源テーブル及び光源計算手段の構成を示す図。
【符号の説明】
【００８６】
００…べき乗算出部、１０…対数算出部、１１…対数シフト部、１２…対数テーブル、１３…対数加算部、２０…乗算器、３０…指数算出部、３１…指数減算部、３２…指数テーブル、３３…指数シフト部、０００…光源計算手段、０１０…ＨＮ内積算出部、０２０…ＬＮ内積算出部、０３０…色算出部、１００…ＧＰＩＦ入力手段、２００…ＬＢｕｆ、３００…ＢｕｆＳＷ、４００…ＦＩ変換手段、５００…パック手段、６００…コマンド解釈手段、７００…光源テーブル、８００…制御手段、９００…ＣＢｕｆ、９５０…BufFL、００００…ＧＰＩＦ、１０００…ＣＰＵ、２０００…ＭＣ、３０００…ＭＭ、４０００…システムバス・コントローラ、５０００…ジオメトリプロセッサ、６０００…レンダリングプロセッサ、７０００…フレームメモリ、８０００…ＣＲＴ。
【図１】
2004259290.tif 000003
【図２】
2004259290.tif 000004
【図３】
2004259290.tif 000005
【図４】
2004259290.tif 000006
【図５】
2004259290.tif 000007
【図６】
2004259290.tif 000008
【図７】
2004259290.tif 000009
【図８】
2004259290.tif 000010
【図９】
2004259290.tif 000011