JP3884809B2 - ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム - Google Patents
ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム Download PDFInfo
- Publication number
- JP3884809B2 JP3884809B2 JP00724097A JP724097A JP3884809B2 JP 3884809 B2 JP3884809 B2 JP 3884809B2 JP 00724097 A JP00724097 A JP 00724097A JP 724097 A JP724097 A JP 724097A JP 3884809 B2 JP3884809 B2 JP 3884809B2
- Authority
- JP
- Japan
- Prior art keywords
- exponent
- value
- calculation unit
- logarithmic
- output
- 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
Landscapes
- Image Generation (AREA)
Description
【発明の属する技術分野】
本発明は演算中にべき乗が含まれる処理を実行する情報処理装置に関する。
【0002】
【従来の技術】
従来、2つのディジタル数値データX,Nに対してXN を求めるべき乗計算については、技術評論社より平成3年2月25日に発行された奥村晴彦著、「C言語による最新アルゴリズム事典」のp105−106,p162−163、及びp304に記されているように、対数関数及び、指数関数をべき級数展開もしくは、連分数展開することで、対数及び、指数をループ計算によって求める手法を用い、ソフトウェア的にXの対数を計算し、その結果にNを乗算し、最後にこの乗算結果の指数を計算するといった方法が取られていた。
【0003】
また別の方法としては、前記2つのディジタル数値データX,Nから直接アドレスを生成してべき乗テーブル(ROM,RAM)を参照する方法が取られていた。
【0004】
【発明が解決しようとする課題】
上記のように、従来例では、前者の場合、ループ計算が発生し処理の高速化が難しく、後者の場合、テーブルの入力がX及びNの2つであるためテーブルの入力値の階調数はXの階調数とNの階調数の積となりテーブルの容量が大きくなるという問題があった。
【0005】
本発明の目的は、ループ計算を用いず容量の小さいテーブルを参照して高速にべき乗計算を行い得るべき乗演算装置とそれを用いたグラフィックスシステムを提供することにある。
【0006】
【課題を解決するための手段】
本発明の特徴は、入力値Xに対する対数値を対数テーブルを用いて出力する対数算出部と、対数算出部の出力とべき乗する値Nを乗算する乗算器と、この乗算器の出力に対する指数値を指数テーブルを用いて出力する指数算出部とからディジタルべき乗演算装置を構成し、前記対数算出部により算出される対数の底と、前記指数算出部により算出される指数の底を同一の値にしたことにある。
【0007】
また、更にテーブルの容量を減らすために本発明では、前記対数算出部に、その入力値が前記対数テーブルの入力値域に含まれない場合に前記対数算出部の入力値に適当な整数Lに対し2L を乗算する対数シフト部と、前記乗算結果を前記対数テーブルの入力とし対数テーブル参照後、参照値にLを加算して前記対数算出部の出力とする対数加算部を設けたものである。
【0008】
また、前記指数算出部に、その入力値が前記指数テーブルの入力値域に含まれない場合に前記指数算出部の入力から適当な整数Mを減算する指数減算部と、該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に2-Mを乗算して前記指数算出部の出力とする指数シフト部を設けたものである。
【0009】
但し、ここでいう対数,指数テーブルとは、RAM,ROMだけに留まらず、入力値に対する対数関数,指数関数の値を一定時間内に算出する回路一般を指すものである。
【0010】
本発明では、入力値X,Nに対してXN のべき乗計算を行う際、対数テーブル参照によってaを底とする対数logaXを求め、乗算器でlogaX×Nを計算し、指数テーブル参照によってaのlogaX×NべきalogaX×N=XN を算出する。本発明ではループ計算を行わないため、高速計算が可能である。また、対数テーブルと指数テーブルとの2つにテーブルを分割することで、各テーブルの入力を1つにできて、テーブルの容量を減らすことができる。
【0011】
また、更にテーブルの容量を減らすために、前記対数算出部の入力値が前記対数テーブルの入力値域に含まれない場合に該入力値に適当な整数Lに対し2L を乗算し、該乗算結果を前記対数テーブルの入力とし対数テーブル参照後、該参照値にLを加算して前記対数算出部の出力とし、前記指数算出部の入力値が前記指数テーブルの入力値域に含まれない場合に該入力値から適当な整数Mを減算し、
該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に2-Mを乗算して前記指数算出部の出力とする。これによって、前記対数算出部,指数算出部の入力値が前記対数,指数テーブルの入力値域に含まれない場合もべき乗計算できる。従って、前記対数,指数テーブルの入力値域を制限することができ、テーブルの容量を減らすことができる。
【0012】
【発明の実施の形態】
以下本発明の実施例を図1〜図9を用いて説明する。図8に本発明に基づくディジタルべき乗演算装置を用いた一実施例であるグラフィックス・システムの構成を示す。本システムはアプリケーションソフト等を実行するCPU(1000),主メモリMM(3000)等を制御するメモリ・コントローラMC(2000),システムバスを制御するシステムバス・コントローラ(4000),システムバス・コントローラから受け取ったデータを、座標変換等を行うジオメトリプロセッサ(5000)に送り、またジオメトリプロセッサから帰ってきたデータに対しFI変換,パック,光源計算等の処理を施すGPIF(0000),GPIF(0000)から送られたデータを画素情報展開するレンダリングプロセッサ(6000),レンダリングプロセッサ(6000)が生成した画素情報を記憶するフレームメモリ(7000)、及びフレームメモリ(7000)の内容を表示するCRT(8000)からなる。
【0013】
次に、システム全体の動作について説明する。CPU(1000)はアップリケーションを実行し、グラフィックス・コマンドと描画する図形の頂点座標,法線ベクトル,テクスチャ・データ,材質の各反射係数,光源の各反射光用の色等のデータを発行し、MC(2000)とシステムバス・コントローラ(4000)を介してGPIF(0000)に出力する。GPIF(0000)はシステムバス・コントローラ(4000)から送られた前記コマンドとデータをGPIF入力手段(100)に保持する。
【0014】
ジオメトリプロセッサ(5000)はGPIF入力手段(100)に保持しているコマンドとデータを読み、前記コマンドとデータに従い座標変換等の幾何計算を行い、頂点座標,法線ベクトル,テクスチャ・データ等を算出してGPIF(0000)に送る。
【0015】
GPIF(0000)はジオメトリプロセッサ(5000)から送られたデータに対し、前記コマンドとデータに従い必要ならばFI変換,パックを施し、頂点毎の色を計算する光源計算を行い、連続三角形描画コマンド,頂点座標,色,テクスチャ・データをレンダリングプロセッサ(6000)に出力する。
【0016】
レンダリングプロセッサ(6000)は前記コマンドとデータから内挿補間により図形の内部の画素を生成し、CRT(8000)に表示する内容をビットマップ形式でフレームメモリ(7000)に書き込み、画像をCRT(8000)に表示する。
【0017】
更に、GPIF(0000)の内部構成について詳細に説明する。
【0018】
GPIF(0000)は前記システムバス・コントローラ(4000)から送られたコマンドとデータを保持するバッファであるGPIF入力手段(100)と、前記コマンドとデータを読み幾何計算を行うジオメトリプロセッサ(5000)から送られたデータを保持するバッファであるLBuf(200)と、前記コマンドとデータをLBuf(200)からコマンド解釈手段(600)及びFI変換手段(400)に出力するためのレジスタであるBufSW(300)と、前記コマンドを解釈するコマンド解釈手段(600)と、前記コマンドに従い必要ならデータのFI変換を行うFI変換手段(400)と、前記コマンドに従い必要なら前記FI変換後のデータのパック処理を行うパック手段(500)と、前記FI変換,パック処理後の光源計算に必要な光源データを保持する光源テーブル(700)と、光源テーブル(700)の保持する光源データを基に光源計算を行い色を算出する光源計算手段(000)と、ジオメトリプロセッサ(5000),パック手段(500)及び光源計算手段(000)から送られたコマンドとデータの順序を制御する制御手段(800)と、前記コマンドとデータを保持するバッファであるCBuf(900)と、前記コマンドとデータをレンダリングプロセッサ(6000)に出力するためのレジスタであるBufFL(950)から構成される。
【0019】
前記光源テーブル(700)及び光源計算手段(000)の詳細を図9に示す。
【0020】
光源テーブル(700)には光源計算に必要なパラメータが固定小数点数で保持されている。このパラメータは光源に非依存なものと光源に依存して値の変化するものとがある。光源テーブル(700)は光源に非依存なパラメータの値をそれぞれ1個ずつ、光源に依存して値の変化するパラメータの値をそれぞれ8個ずつ(8光源分)保持している。もし、光源数が9個以上ある場合は既に計算に使われた値から順に新たな光源の値に一つずつ更新される。
【0021】
光源に非依存なパラメータに対して、このような書き込み制御を行うために、8個の値のうち、現在何番目の値を計算中であるかを示すリードポインタ,RPNTレジスタが用意されており、RPNT以降の値はロックされ、更新が延期される。
【0022】
光源計算手段(000)は法線ベクトルとハーフウェイベクトルの内積を計算するHN内積算出部(010)と、該内積のSM乗を計算するべき乗算出部(00)と、法線ベクトルと光源ベクトルの内積を計算するLN内積算出部(020)と、べき乗算出部(00)とLN内積算出部(020)の出力を用いて各頂点毎の色を算出する色算出部(030)から構成される。
【0023】
HN内積算出部(010)は法線ベクトル(Nx,Ny,Nz)とハーフウェイベクトル(Hx,Hy,Hz)の内積を計算し結果13bit をべき乗算出部(00)に出力する。
【0024】
べき乗算出部(00)はHN内積算出部(010)の出力を材質の鏡面指数SM(1から128までの整数)乗して結果8bit を色算出部(030)に出力する。
【0025】
LN内積算出部(020)は法線ベクトル(Nx,Ny,Nz)と光源ベクトル(Lx,Ly,Lz)の内積を計算し結果を色算出部(030)に出力する。色算出部(030)はRGBの3色をそれぞれ独立に計算するため、同様のリソースを3セット有している。例えばRについては、環境反射光のR成分LcaR,拡散反射光のR成分LcdR,鏡面反射光のR成分LcsR,環境反射係数のR成分KaR,拡散反射係数のR成分KdR,鏡面反射係数のR成分KsR,放射反射光と全体の環境反射光のR成分の和KR,減衰係数とスポット光源効果の積AtSp,べき乗算出部(00)の出力、及びLN内積算出部(020)の出力を入力とし、頂点の色のR成分8bit を出力する。
【0026】
図1にべき乗算出部(00)の構成を示す。説明の都合上、入力はX、及びNとし、出力はXN とする。つまり、X、及びNは上述の説明に於けるHN内積算出部(010)の出力、及び材質の鏡面指数SMに対応する。Xは13bit の固定小数点数で範囲は0〜1、Nは8bit の固定小数点数で範囲は0〜128、XN は8bit の固定小数点数で範囲は0〜1である。
【0027】
この回路は入力Xに対する対数関数の値を15bit の固定小数点数で算出する対数算出部(10),該対数算出部(10)の出力とNを乗算し、10bit の固定小数点数を出力する乗算器(20),該乗算器(20)の出力に対する指数関数の値を8bit の固定小数点数で算出する指数算出部(30)からなる。
【0028】
ここで、対数算出部(10)及び指数算出部(30)をそのままテーブルにしてしまうと、対数テーブルは入力レンジが0〜1で13bit 、出力レンジが0〜8(厳密には8は含まない)で15bit 、指数テーブルは入力レンジが0〜8(厳密には8は含まない)で10bit 、出力レンジが0〜1で8bit となり、メモリ容量換算でそれぞれ、122,880bit ,8,192bit と膨大な容量になってしまう。
【0029】
しかし、対数及び指数のテーブルを縮退、つまり入出力レンジを制限し、対数算出部(10)及び指数算出部(30)を以下のように構成することにより、それぞれのテーブルの容量の大幅な低減(メモリ容量換算で24,576bit,768 bit )と、縮退以前と同様の精度での計算が可能となる。
【0030】
即ち、該対数算出部(10)は入力値を縮退した対数テーブル(12)の入力レンジに入るまでKビット左シフト(2K を乗算)し、3bit のシフト量Kと11bit のシフト結果を出力する対数シフト部(11)と、該シフト結果に対する対数関数の値を12bit の固定小数点数として出力する縮退した対数テーブル(12)と、該対数テーブル(12)の出力にKを加算して、15bit の固定小数点数を出力する対数加算部(13)からなる。
【0031】
また、指数算出部(30)は、入力値から縮退した指数テーブル(32)の入力レンジに入るまでMを減じ、3bit の減算量と7bit の減算結果を出力する指数減算部(31)と、該減算結果に対する指数関数の値を6bit の固定小数点数として出力する縮退した指数テーブル(32)と、該指数テーブル(32)の出力をMビット右シフトする指数シフト部(33)から構成される。
【0032】
図2を使って前記対数算出部(10)が入力Pxに対して出力Pyを算出する際(この操作を白貫矢印で表している)の動作を示す。図2のグラフは底を2-1=0.5 とする定義域0〜1(厳密には0は含まない)、値域0〜8(厳密には8は含まない)の対数関数の一部を表わしたものである。ここで、定義域とは入力値xの変域を意味し、値域とはxの変動に伴う出力値yの変域を意味する。
【0033】
領域0は定義域0.5〜1(厳密には0.5は含まない)、値域0〜1(厳密には1は含まない)の部分である。対数テーブル(12)はこの範囲の対数関数を保持している。つまり、グラフ全体の定義域が0〜1であるのに対して、対数テーブル(12)が保持している範囲の定義域は0.5〜1 と1/2に、またグラフ全体の値域が0〜8であるのに対して、対数テーブル(12)が保持している範囲の値域は0〜1と1/8に縮対している。
【0034】
領域1は定義域0.25〜0.5(厳密には0.25 は含まない)、値域1〜2(厳密には2は含まない)の部分であり、対数関数の性質より領域1は領域0に対しxを2-1倍し、yに1を加えたものである。一般的に領域K(Kは0から7までの整数)は定義域2-K-1〜2-K(厳密には2-K-1は含まない)、値域K〜K+1(厳密にはK+1は含まない)の部分であり、対数関数の性質より領域Kは領域0に対しxを2-K倍し、yにKを加えたものである。対数シフト部(11)はPxがどの領域Kの定義域に含まれているかによって、Pxを2K 倍(K左シフト)し、領域0の定義域までシフトする。簡単のためPxは領域1の定義域に含まれているものとし、Pxを21 倍(1シフト)した結果をQxとする(この操作を矢印(1)で表している)。Qxは対数テーブル(12)の入力値域に含まれているので、対数テーブル(12)を参照してQyを得る(この操作を矢印(2)で表している)。最後に対数加算部(13)はQyにシフト量の1を足してPyを算出する(この操作を矢印(3)で表している)。
【0035】
図3を使って対数シフト部(11)の動作を示す。対数シフト部(11)は領域Kの定義域内の入力値が領域0の定義域に入るまで左シフトさせ、そのときのシフト量とシフト結果を出力する。
【0036】
例えば、領域2の定義域は2-3〜2-2で13bit の固定小数点数で表わすと0.001000000001〜0.010000000000であるが、この定義域にある値0.001010011101を領域0の定義域0.100000000001〜1.000000000000まで左シフトさせる場合のシフト量は、この値0.001010011101から0.000000000001を引いた0.001010011100の最上位にある1が上位から2桁目に来るまで左シフトさせた際のシフト量と一致する。この場合シフト量は2である。ここで、0.000000000001を引くのは 0.010000000000のように領域内の最大値も例外なく扱うためである。このような場合は0.000000000001を引かずに最上位にある1が上位から2桁目に来るまでシフトさせると0.100000000000となり領域0の定義域に含まれなくなる。
【0037】
また、領域0の定義域は0.5〜1(厳密には0.5は含まない)13bit であるが、0.5即ち13bit の固定小数点数0.100000000001を引いて定義域を0〜0.5(厳密には0.5は含まない)としておくことで上位2bit は必ず00となる。このことを利用して、前記対数テーブル(12)の入力を13bit から、必ず00となる上位2bit を取り去り下位の11bit とすることで、入力ビット数を2bit 節約できる。従って、シフト結果から13bit の固定小数点数 0.100000000001を引いて上位2bit を取り去った11bit の値を対数テーブル(12)への出力とする。
【0038】
但し、シフト量は最大でも7とする。その理由は7bit 左シフトしても領域0の定義域に含まれない値は2-8より小さく、8bit 精度のべき乗結果には現われてこないためである。このような場合、13bit の固定小数点数0.100000000001を引くと0未満になるため、0クランプして出力値は0.000000000000とする。
【0039】
(a)の場合、入力値は0.001001110100で0.000000000001を引いた値は 0.001001110011である。この値の最上位にある1は2bit 左シフトすれば上位から2桁目に来るので、シフト量は2である。従って、入力値0.001001110100を2bit 左シフトした0.100111010000がシフト結果となる。出力値はシフト結果 0.100111010000から0.100000000001を引いた0.000111001111である。
【0040】
(b)の場合、入力値は0.000000100000で0.000000000001を引いた値は 0.000000011111である。この値の最上位にある1は7ビット左シフトすれば上位から2桁目に来るので、シフト量は7である。従って、入力値0.000000100000を7ビット左シフトした1.000000000000がシフト結果となる。出力値はシフト結果1.000000000000から0.100000000001を引いた0.011111111111である。
【0041】
(c)の場合、入力値は0.000000000101で0.000000000001を引いた値は 0.000000000100である。この値の最上位にある1は7ビット左シフトしても上位から2桁目に来ることはないので、シフト量は最大の7である。従って、入力値0.000000000101を7ビット左シフトした0.001010000000がシフト結果となる。シフト結果1.000000000000から0.100000000001を引くと0未満となるので0クランプして出力値は0.000000000000となる。
【0042】
上述のように動作する対数シフト部(11)の回路図を図4に示す。
【0043】
対数シフト部(11)は上述のように入力値から13bit の固定小数点数 0.000000000001を引いた値を用いてシフト量を決定するため入力直後にこの引き算を行う。図4の最上段には該引き算結果の上位8bit と入力値を並べている。シフトに関する論理は大きく3段に分かれている。まず、1段目ではNOR1が該引き算結果の上位8bit のうち、上位5bit のNORをとりこの値の0,1に応じて該引き算結果の上位8bit 及び入力値を4bit 左シフトするか否かを決定する。
【0044】
もしNOR1の出力が1であれば、該引き算結果の上位5bit が全て0であり、4bit 左シフトする余地があることを意味しているため、該引き算結果の上位8bit 及び入力値を4bit 左シフトする。また、シフト量の最上位を1とする。これは4bit 左シフトしたことを示す。
【0045】
もし、NOR1の出力が0であれば該引き算結果の上位5bit の中に1が含まれていて、4bit 左シフトはできないことを意味しているため、該引き算結果の上位8bit 及び入力値は左シフトしない。また、シフト量の最上位を0とする。これは4bit は左シフトできなかったことを示す。
【0046】
次に、2段目ではNOR2が該引き算結果の1段目におけるシフト結果の上位3bit のNORをとり、この値の0,1に応じて該引き算結果及び入力値の1段目におけるシフト結果を更に2bit 左シフトするか否かを決定する。
【0047】
もしNOR2の出力が1であれば、該引き算結果の1段目におけるシフト結果の上位3bit が全て0であり、2bit 左シフトする余地があることを意味しているため、該引き算結果及び入力値の1段目におけるシフト結果を2bit 左シフトする。また、シフト量の第2桁目を1とする。これは2bit 左シフトしたことを示す。
【0048】
もしNOR2の出力が0であれば、該引き算結果の1段目におけるシフト結果の上位3bit の中に1が含まれていて、2bit 左シフトはできないことを意味しているため、該引き算結果及び入力値の1段目におけるシフト結果は左シフトしない。また、シフト量の第2桁目を0とする。これは2bit 左シフトできなかったことを示す。
【0049】
次に、3段目ではNOR3が該引き算結果の2段目におけるシフト結果の上位2bit のNORをとり、この値の0,1に応じて該引き算結果及び入力値の2段目におけるシフト結果を更に1bit 左シフトするか否かを決定する。
【0050】
もしNOR3の出力が1であれば、該引き算結果の2段目におけるシフト結果の上位2bit が全て0であり、1bit 左シフトする余地があることを意味しているため、該引き算結果及び入力値の2段目におけるシフト結果を1bit 左シフトする。また、シフト量の最下位を1とする。これは1bit 左シフトしたことを示す。
【0051】
もしNOR3の出力が0であれば、該引き算結果の2段目におけるシフト結果の上位2bit の中に1が含まれていて、1bit 左シフトはできないことを意味しているため、該引き算結果及び入力値の2段目におけるシフト結果は左シフトしない。また、シフト量の最下位を0とする。これは1bit 左シフトできなかったことを示す。
【0052】
この段階でシフト量3bit は決定されるが、対数テーブルへの出力値は入力値の3段目におけるシフト結果から13bit の固定小数点数0.100000000001を引き算し更に0クランプした値となる。
【0053】
次に対数テーブル(12)について説明する。対数テーブル(12)の入力は上述のように入力値域0〜0.5(厳密には0.5は含まない)の11bit の固定小数点数である。また、対数テーブル(12)の出力は入力値に13bit の固定小数点数0.100000000001を足した値に於ける対数関数の値を12bit の固定小数点数で表わしたものであり、出力値域は0〜1(厳密には1は含まない)である。
【0054】
対数テーブル(12)はRAMやROMで作り、入力値をアドレスに変換して参照するように構成することもできるが、ここでは、出力論理値を入力論理値の論理式で表現して論理式に対応する回路で対数テーブル(12)を構成する。
【0055】
対数テーブル(12)の入力の各bit をa0,a1,…,a10とし、対数テーブル(12)の出力の各bit をb0,b1,…,b11とすると、各b0,b1,…,b11はa0,a1,…,a10の積和の論理式で表わすことができる。更に、この積和の各項を主項とする方法として、クイーンの方法や、コンセンサス法が著名である。クイーンの方法や、コンセンサス法については丸善株式会社が昭和57年6月30日に発行した後藤 宗弘 著、電気・電子学生のための計算機工学p40〜45に示されている。
【0056】
このような方法で生成された論理式に対応する回路で対数テーブル(12)を構成することができる。
【0057】
実際に論理合成してみた結果、0.35μm のCMOSで約4kゲートを要した。
【0058】
最後に対数加算部(13)について説明する。対数加算部(13)の入力は対数シフト部(11)で算出したシフト量と対数テーブル(12)の出力である。対数加算部(13)は対数テーブル(12)の出力値に該シフト量を加算して出力する。
【0059】
テーブルの出力値域は0〜1(厳密には1は含まない)であり、シフト量は整数であるから、対数加算部(13)の出力はテーブルの出力値12bit の上位にシフト量の3bit を付け足した15bitの固定小数点数である。
【0060】
次に前記乗算器(20)について説明する。該乗算器(20)の入力は前記対数算出部(10)の出力と、Nである。
【0061】
該乗算器(20)は前記対数算出部(10)の出力15bitとN8bitを乗算して出力値域は0〜8(厳密には8は含まない)の10bit の固定小数点数として出力する。
【0062】
但し、乗算の結果が8以上になった場合は最大出力値にクランプする。その理由は、2-1の8以上のべきは2-8より小さく、8bit 精度のべき乗結果には現われてこないためである。
【0063】
図5を使って前記指数算出部(30)が入力Pxに対して出力Pyを算出する際(この操作を白貫矢印で表している)の動作を示す。図5のグラフは底を2-1=0.5 とする定義域0〜8(厳密には8は含まない)、値域0〜1(厳密には0は含まない)の指数関数の一部を表わしたものである。領域0は定義域0〜1(厳密には1は含まない)、値域0.5〜1(厳密には0.5は含まない)の部分であり、指数テーブル(32)はこの範囲の指数関数を保持している。つまり、グラフ全体の定義域が0〜8であるのに対して、指数テーブル(32)が保持している範囲の定義域は0〜1と1/8に、またグラフ全体の値域が0〜1であるのに対して、指数テーブル(32)が保持している範囲の値域は0.5〜1 と1/2に縮退している。
【0064】
領域1は定義域1〜2(厳密には2は含まない)、値域0.25〜0.5(厳密には0.25 は含まない)の部分であり、指数関数の性質より領域1は領域0に対しxに1を加え、yを2-1倍したものである。
【0065】
一般的に領域M(Mは0から7までの整数)は定義域M〜M+1(厳密にはM+1は含まない)、値域2-M-1〜2-M(厳密には2-M-1は含まない)の部分であり、指数関数の性質より領域Mは領域0に対しxにMを加え、yを2-M倍したものである。
【0066】
指数減算部(31)はPxがどの領域Mの定義域に含まれているかによって、PxからMを減算し、領域0の定義域までスライドする。簡単のためPxは領域1の定義域に含まれているものとし、Pxから1減算した結果をQxとする(この操作を矢印(1)で表している)。Qxは指数テーブル(32)の入力値域に含まれているので、指数テーブル(32)を参照してQyを得る(この操作を矢印(2)で表している)。最後に指数シフト部(33)はQyに減算量の1だけ右シフト(2-1を乗算)してPyを算出する(この操作を矢印(3)で表している)。
【0067】
指数減算部の説明をする。指数減算部(31)の入力は入力値域0〜8(厳密には8は含まない)の10bit の固定小数点数である。上述のように、指数減算部(31)はその入力値がどの領域Mの定義域に含まれているかによって、PxからMを減算し、領域0の定義域までスライドするが、Mは入力値の上位3bit であり、入力値からMを引いた値は入力値の下位7bit である。
【0068】
次に指数テーブル(32)について説明する。指数テーブル(32)の入力は指数減算部(31)の出力であり、入力値域0〜1(厳密には1は含まない)の7bit の固定小数点数である。また、領域0の値域は0.5〜1(厳密には0.5は含まない)であるが、y方向に−0.5平行移動して値域0〜0.5(厳密には0.5 は含まない)とすることで、指数テーブル(32)の出力の上位2bit が00となり、出力bit 数を2bit 減らすことが出来る。
【0069】
従って、指数テーブル(32)の出力は入力値に於ける指数関数の値を8bit の固定小数点数で表わしたものから0.5即ち8bitの固定小数点数0.1000001 を引いた6bitの固定小数点数とし、このとき出力レンジは0〜0.5(厳密には0.5は含まない)である。
【0070】
指数テーブル(32)も前記対数テーブル(12)と同様、RAMやROMで作り、入力値をアドレスに変換して参照するように構成することもできるが、ここでは、出力論理値を入力論理値の論理式で表現して論理式に対応する回路で指数テーブル(32)を構成する。実際に論理合成してみた結果、0.35μm のCMOSで約1kゲートを要した。
【0071】
最後に図6を使って指数シフト部(33)の動作を説明する。指数シフト部(33)の入力は減算部の出力である減算数と指数テーブル(32)の出力である。上述したように、指数テーブル(32)の出力は入力値に於ける指数関数の値を8bit の固定小数点数で表わしたものから0.5 即ち8bit の固定小数点数0.1000001を引いた6bitの固定小数点数であるから、指数シフト部(33)は逆に指数テーブル(32)の出力に0.5即ち8bitの固定小数点数0.1000001 を足して、値域を0.5〜1(厳密には0.5は含まない)に戻す必要がある。次にその値を減算量だけ右シフトして出力する。
【0072】
(a)の場合、指数テーブル(32)の出力0.01011 に8bit の固定小数点数0.1000001を足して、減算量2だけ右シフトすると、出力値0.0010011を得る。但し、右シフトで上位bit が空いたところには0が入る。
【0073】
(b)の場合、指数テーブル(32)の出力1.01101 に8bit の固定小数点数0.1000001を足して、減算量5だけ右シフトすると、出力値0.0000011を得る。
【0074】
上述のように動作する指数シフト部(33)の回路図を図7に示す。指数シフト部の入力は指数減算部からの出力である減算量3bit と指数テーブル(32)からの出力6bit である。指数テーブル(32)からの出力に対しては入力直後に8bitの固定小数点数0.1000001を足し算しておく。該足し算結果は8bit の固定小数点数である。
【0075】
シフトに関する論理は大きく3段に分かれる。まず、1段目では減算数の最下位が1のとき、該足し算結果を1bit 右シフトし、減算数の最下位が0のとき、該足し算結果を右シフトしない。
【0076】
次に、2段目では減算数の2桁目が1のとき、該足し算結果の1段目におけるシフト結果を2bit 右シフトし、減算数の2桁目が0のとき、該足し算結果の1段目におけるシフト結果を右シフトしない。
【0077】
最後に、3段目では減算数の最上位が1のとき、該足し算結果の2段目におけるシフト結果を4bit 右シフトし、減算数の最上位が0のとき、該足し算結果の2段目におけるシフト結果を右シフトしない。
【0078】
本実施例ではべき乗計算部全てを0.35μm のCMOSに実装した場合、約7.5k ゲートを要し、約35nsecで演算が完了する。これによって、光源計算をGPIF(0000)チップの中に埋め込むことが可能となり、ボトルネックになっているジオメトリプロセッサ(5000)の処理を軽減することができた結果、システムとして約2倍性能を向上することができた。
【0079】
【発明の効果】
以上、詳細に説明したように、本発明のディジタルべき乗演算装置はテーブル参照によって演算を行うため、ループ計算より高速に演算結果を得ることができる。
【0080】
また、対数テーブルと指数テーブルとの2つにテーブルを分割することで、各テーブルの入力を1つにできて、テーブルの容量を減らすことができる。
【0081】
また、前記対数算出部の入力値が前記対数テーブルの入力値域に含まれない場合に該入力値に適当な整数Lに対し2L を乗算し、該乗算結果を前記対数テーブルの入力とし対数テーブル参照後、該参照値にLを加算することで更に対数テーブルの容量を減らすことができ、
前記指数算出部の入力値が前記指数テーブルの入力値域に含まれない場合に該入力値から適当な整数Mを減算し、該減算結果を前記指数テーブルの入力とし指数テーブル参照後、該参照値に2-Mを乗算することで指数テーブルの容量を減らすことができる。
【図面の簡単な説明】
【図1】ディジタルべき乗演算装置の回路構成を示す図。
【図2】対数算出部の動作を示す図。
【図3】対数シフト部の動作を示す図。
【図4】対数シフト部の回路構成を示す図。
【図5】指数算出部の動作を示す図。
【図6】指数シフト部の動作を示す図。
【図7】指数シフト部の回路構成を示す図。
【図8】グラフィックス・システムの構成を示す図。
【図9】光源テーブル及び光源計算手段の構成を示す図。
【符号の説明】
00…べき乗算出部、10…対数算出部、11…対数シフト部、12…対数テーブル、13…対数加算部、20…乗算器、30…指数算出部、31…指数減算部、32…指数テーブル、33…指数シフト部、000…光源計算手段、010…HN内積算出部、020…LN内積算出部、030…色算出部、100…GPIF入力手段、200…LBuf、300…BufSW、400…FI変換手段、500…パック手段、600…コマンド解釈手段、700…光源テーブル、800…制御手段、900…CBuf、950…BufFL、0000…GPIF、1000…CPU、2000…MC、3000…MM、4000…システムバス・コントローラ、5000…ジオメトリプロセッサ、6000…レンダリングプロセッサ、7000…フレームメモリ、8000…CRT。
Claims (2)
- 鏡面指数値Nと各々の画素における法線ベクトルと光源ベクトルの内積である入力値Xを用いて、光源計算部においてX N を求める光源計算を行い、この計算結果に基づいて表示すべき図形データを画素情報に展開するレンダリングプロセッサであって、
前記光源計算部は、入力値Xに対する対数値を対数テーブルを用いて出力する対数算出部と、前記対数算出部の出力と前記光源テーブルからの値Nを乗算する乗算器と、前記乗算器の出力に対する指数値を指数テーブルを用いて出力する指数算出部とを有し、
前記対数算出部は、
入力値域を制限された定義域とする前記対数テーブルと、
前記対数算出部への入力値が前記対数テーブルの入力値域に入るよう、当該入力値に
2 L (Lは整数)を乗算して、前記対数テーブルに出力する対数シフト部と、
前記対数テーブルの出力にLを加算して前記対数算出部の出力とする対数加算部を有し、
前記指数算出部は、
入力値域を制限された定義域とする前記指数テーブルと、
前記乗算器からの出力値が前記指数テーブルの入力値域に入るよう、当該入力値からM(Mは整数)を減算し、前記指数テーブルに出力する指数減算部と、
前記指数テーブルの出力値に2 -M を乗算して前記指数算出部の出力とする指数シフト部を有することを特徴とするグラフィックスシステム。 - 請求項1において、前記対数算出部により算出される対数の底と、前記指数算出部により算出される指数の底は同一の値であることを特徴とするグラフィックスシステム。
Priority Applications (6)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP00724097A JP3884809B2 (ja) | 1997-01-20 | 1997-01-20 | ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム |
CA002418916A CA2418916C (en) | 1997-01-20 | 1998-01-20 | Graphics processing unit and graphics processing system |
US09/009,588 US6049343A (en) | 1997-01-20 | 1998-01-20 | Graphics processing unit and graphics processing system |
CA002227531A CA2227531C (en) | 1997-01-20 | 1998-01-20 | Graphics processing unit and graphics processing system |
US10/391,235 US20030163502A1 (en) | 1997-01-20 | 2003-03-19 | Graphics processing unit and graphics processing system |
US11/484,812 US20060250397A1 (en) | 1997-01-20 | 2006-07-12 | Graphics processing unit and graphics processing system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP00724097A JP3884809B2 (ja) | 1997-01-20 | 1997-01-20 | ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004094007A Division JP2004259290A (ja) | 2004-03-29 | 2004-03-29 | グラフィックスシステム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10207694A JPH10207694A (ja) | 1998-08-07 |
JP3884809B2 true JP3884809B2 (ja) | 2007-02-21 |
Family
ID=11660487
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP00724097A Expired - Fee Related JP3884809B2 (ja) | 1997-01-20 | 1997-01-20 | ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3884809B2 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB9904676D0 (en) * | 1999-03-01 | 1999-04-21 | Canon Kk | Apparatus and method for performing data computations |
JP4274633B2 (ja) | 1999-06-23 | 2009-06-10 | 株式会社ルネサステクノロジ | 累乗演算装置 |
US6996591B2 (en) * | 2000-12-27 | 2006-02-07 | Intel Corporation | System and method to efficiently approximate the term 2x |
DE10324049B4 (de) | 2003-05-27 | 2006-10-26 | Infineon Technologies Ag | Integrierte Schaltung und Verfahren zum Betreiben der integrierten Schaltung |
US7957589B2 (en) * | 2007-01-25 | 2011-06-07 | Qualcomm Mems Technologies, Inc. | Arbitrary power function using logarithm lookup table |
-
1997
- 1997-01-20 JP JP00724097A patent/JP3884809B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JPH10207694A (ja) | 1998-08-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20060250397A1 (en) | Graphics processing unit and graphics processing system | |
EP0580302B1 (en) | Method and apparatus for generating a color palette | |
JP3107452B2 (ja) | テクスチャマッピング方法およびその装置 | |
US7659893B1 (en) | Method and apparatus to ensure consistency of depth values computed in different sections of a graphics processor | |
US5734806A (en) | Method and apparatus for determining graphical object visibility | |
US6219062B1 (en) | Three-dimensional graphic display device | |
JP3058017B2 (ja) | グラフィックス画素データを変換するための装置および方法 | |
JP3884809B2 (ja) | ディジタルべき乗演算装置及びそれを用いたグラフィックスシステム | |
US6549209B1 (en) | Image processing device and image processing method | |
US8259122B1 (en) | System, method and article of manufacture for a programmable processing model with instruction set | |
US6088037A (en) | Rendering processor | |
US5179647A (en) | Method and apparatus for implementing adaptive forward differencing using integer arithmetic | |
CA2260345C (en) | Signal processing apparatus and image processing apparatus | |
JP2001101441A (ja) | レンダリング方法及び装置、ゲーム装置、並びに立体モデルをレンダリングするプログラムを格納するコンピュータ読み取り可能な記録媒体 | |
US20030169272A1 (en) | Image generation apparatus and method thereof | |
JP2004259290A (ja) | グラフィックスシステム | |
JPH03144782A (ja) | 三次元図形処理装置 | |
CA2418916C (en) | Graphics processing unit and graphics processing system | |
US9489344B2 (en) | Methods of and apparatus for approximating a function | |
EP0441499B1 (en) | Electronic brush generation | |
JPH11242585A (ja) | 除算回路およびグラフィック演算装置 | |
JPH11328438A (ja) | 高効率浮動小数点zバッファリングの方法および装置 | |
JPH10116358A (ja) | スペキュラ・ライティングを計算する装置と方法 | |
JPH0721155A (ja) | 中央演算処理装置 | |
JPH08212357A (ja) | 補間装置および補間方法、並びに画像生成装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20040127 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040329 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20040615 |
|
A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20041119 |
|
RD01 | Notification of change of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7421 Effective date: 20060427 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20061017 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061120 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101124 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101124 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111124 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111124 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121124 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121124 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131124 Year of fee payment: 7 |
|
LAPS | Cancellation because of no payment of annual fees |