Presentation is loading. Please wait.

Presentation is loading. Please wait.

FPGAを用いた レイトレーシングの実装 福永研究室 西村建郎 中村真魚 工藤健史.

Similar presentations


Presentation on theme: "FPGAを用いた レイトレーシングの実装 福永研究室 西村建郎 中村真魚 工藤健史."— Presentation transcript:

1 FPGAを用いた レイトレーシングの実装 福永研究室 西村建郎 中村真魚 工藤健史

2 発表の流れ レイトレーシングの概要(西村) POCOの概要(中村) IEEE754(浮動小数点規格)について(中村)
レイトレーシングを行うための改良点(工藤) アセンブラの解説(中村) コンパイラの解説(西村) FPGAへの実装(工藤)

3 レイトレーシングの概要 レイトレーシングとは、3次元の物体の座標データや視点・光源の位置などのデータを計算して、画像を描画(レンダリング)する手法の一つである。 (例)球に左から照射した場合

4 レイトレーシングの概要 物体の表面の反射率や透明度・屈折率などを細かく反映させることが出来るのが特徴。 欠点としては、計算量が多い。

5 レイトレーシングの概要 視点からスクリーンの画素に向かう視線(Ray)を延長(追跡、trace)し、物体と交差すれば、物体の色や、光の反射等の計算をし、色を決定します。物体に当たらなければ、そこには何もないので、背景の色となる。 ・・・ ピクセル 視点 スクリーン 光源

6 レイトレーシングの概要 物体をどのように表すか。 また、どのように物体との交差を判定するか。

7 レイトレーシングの概要 球の場合 P:点(変数), Pc:球の中心, R:半径
Pv:視点, V:視線ベクトル, t>1:任意の実数 とおくと (視線ベクトルは、[スクリーンの各座標]-[視点]で求める) 球の方程式:(P-Pc)²=R² 視線:P=Pv+V×t ・・・ ピクセル 視点 スクリーン

8 レイトレーシングの概要 球の方程式:(P-Pc)²=R² 視線の方程式:P=Pv+V×t 視線の式を球の方程式に代入して、 tについて解く
実数解が存在する⇒球と交わる⇒色を計算 実数解が存在しない⇒交わらない⇒背景色 (判別式を用いる)

9 レイトレーシングの概要 球以外の形状の場合 処理が容易な三角形の集合としてモデリングする。 すべての三角形の各頂点を座標で与える。
(例)平面

10 レイトレーシングの概要 視線と三角形の交差判定 三角形を含む平面の方程式を求める 平面と視線の交点を求める
 三角形を含む平面の方程式を求める 平面と視線の交点を求める 交点が三角形の中にあるかを判定する

11 今回の研究では、球のみを扱うことにする。
レイトレーシングの概要 三角形モデリングの欠点  モデルが複雑になると、視線との交差判定を すべての三角形と行わなくてはならないため、 計算量が膨大になる。 今回の研究では、球のみを扱うことにする。

12 レイトレーシングの概要 今までの判定法だけを用いて球を描画すると まだ光についてなにも考慮されていない。

13 明るさを決める要素 ①環境光 面の傾きに関係なく明るさが決まる (光源からの光が直接当たっていなくても、真っ 暗にはならない)

14 明るさを決める要素 ②拡散反射 光源から入ってくる光がすべての方向に均一 に反射する。 反射する光の量は、入射する光の量に応じ、
 光源から入ってくる光がすべての方向に均一 に反射する。  反射する光の量は、入射する光の量に応じ、 入射する光の量は、光の当たる角度によるの で、物体に影がつく。 反射光の強さ=光源の明るさ×反射率×cosα 入射光と法線の成す角

15 明るさを決める要素 拡散反射のみの画像

16 明るさを決める要素 ③鏡面反射 鏡のように、一方向からの光が、入射した角度 のちょうど反対側に強く反射する。反射した光の先 に視点があるとき、一点周辺だけ極端に光って見 える。 反射光の強さ=光源の明るさ×反射率×cosⁿγ n:鏡面度(10~20) 反射光と視線の成す角

17 明るさの決め方 ・視線と物体が点Pで交差した場合 点Pでの拡散反射光と鏡面反射光の明るさを 計算し、環境光・拡散反射光・鏡面反射光のう ち最も明るいものを点Pの明るさとする。 点Pの明るさ = max {環境光, 拡散反射光, 鏡面反射光}

18 レイトレーシング結果 ・C言語で実行

19 POCOの概要 ゼミではコンピュータアーキテクチャの勉強を行った(4月~7月)。
教材:「作りながら学ぶコンピュータアーキテクチャ」天野英晴,西村克信 題材:ハードウェア記述言語「Verilog HDL」を使ったディジタル回路の設計 POCOとは 教本中で開発されたRISC (Reduced Instruction Set Computer)。 演算装置(ALU)、データメモリ、命令メモリ、レジスタ、 プログラムカウンタで構成され、 整数の加算および減算と、論理演算が可能。 使用したソフトウェア ISE Simulator( ISIM ) / Xilinx ゼミの前半(4月~7月)はコンピュータアーキテクチャの勉強を行いました。 教材は「作りながら学ぶコンピュータアーキテクチャ」を使って、週1回の輪講形式でゼミを進めていきました。 アーキテクチャというのは「構造」という意味で、この本はコンピュータの構成を知ることで 普段プログラミングをする上で気にしないハードウェアの詳細を学ぶことを目的としています。 具体的には、ハードウェア記述言語の「Verilog HDL」を使って、コンピュータのディジタル回路を設計するということを行いました。 教材の中ではPOCOと呼ばれるRISCという種類のコンピュータを設計しました。

20 コンピュータの基本形 制御装置 CPU(中央処理装置) 演算装置 レジスタ etc… モニタ マウス I/O キーボード etc…
では、そもそもコンピュータがどういった構造をしているかについてですが、 基本はこのような構成になっています。これはデスクトップPCでも、携帯電話等の組み込み用でも同様で、 CPU(中央処理装置)と命令やデータそのものを記憶するメモリ、外部とのやり取りを行う入出力(I/O)で成り立っています。 データは入力装置から取り込み、メモリにおいてCPUがそこで読み書きを行い処理を進め、結果をメモリから出力装置に出力して表示するという 流れがあります。 Memory

21 アキュムレータマシンの基本形 ALU ゼミではまずアキュムレータマシンと呼ばれるコンピュータから設計しました。
アキュムレータマシンの特徴はCPUの持つレジスタが1つだけという点です。 このレジスタを「アキュムレータ」と呼ぶので、アキュムレータマシンと呼びます。 まず演算装置であるALUについて説明すると

22 ALU Arithmetic Logic Unit の略 加算と減算、論理演算を行う回路。 論理演算の例 SL,SR AND,OR
accum ← X = 01010 SL … accm ← X<<1 = 10100 SR … accm ← X >>1 = 00101 AND … accum ← X AND {10101} = 00000 OR … accum ← X OR {10101} = 11111 ALUは加減と論理演算を行うことができる回路になっています。 SL、SRはシフト演算を意味しています。AND、ORは論理積と論理和を意味しています。 例としてはこのようになります。 レジスタがアキュムレータ1つだけという特徴から、命令の書式の中で「オペランド」と呼ばれる演算の対象を示す値が必要ない ので、SLやSRの命令のときは命令コード(オペコード)だけで済むようになっています。 この点はこの後に登場する汎用レジスタマシンではレジスタが増えるため、命令の中でオペランドが必要になるという違いが生じます。

23 アキュムレータマシンの基本形 プログラムカウンタ アキュムレータ 命令メモリ データメモリ ALU以外には
②次に実行する命令が入っているメモリのアドレスを保持するプログラムカウンタ ③実行する命令が入っている命令メモリ ④アキュムレータからデータを正式に残すデータメモリ で構成されます。 メモリは図のように箱型のように見立てられて、各マスに番地(アドレス)があるので、 番地を指定することで必要なデータを読み取ることができる。また指定の番地に書き込むことも可能。 命令メモリ データメモリ

24 アキュムレータマシンの動作 pc の指し示す命令を取ってくる(命令フェッチ)。同時にpcに1を加える。 命令を解読する(命令デコード)。
命令を実行する。その後1に戻る マシンの動作の流れはこのように3段階に分けられます。

25 POCOの概要 アキュムレータマシンの発展させたものが初めに紹介したPOCOになります。
RISCというのはオペランドにメモリを直接指定できないマシンのことで、 必ず計算するときはメモリのデータをレジスタに読み込んでから計算する構造になっています。

26 POCOの概要 主な変更点 命令デコード部分の複雑化 pcのためのジャンプ命令の追加 アキュムレータマシンから汎用レジスタマシンに
一時的なデータの格納場所が増え、用途に応じたレジスタの使い分けがし易くなった(データメモリのポインタの実現)。 命令デコード部分の複雑化 命令の種類として、 ALUを使う命令 レジスタが対象の命令 pcが対象の命令 に分類できる。 pcのためのジャンプ命令の追加 プログラム中に繰り返し使われる命令群(サブルーチン)を呼び出すことが可能になる。 主な変更点としては 1のレジスタが増えた点 2の命令が増えた点 3のpcの操作が行われる点 1~3の変更点で全体的に構造が複雑になったことは、図を比較しても分かると思います。

27 POCOで可能な命令 ビット幅 : 16bit 機械語命令長 : 16bit レジスタ : 8個
メモリ : 16bit×アドレス2^16 = アドレス空間64K

28 POCOの構造 テストベンチ POCO ALU と階層的になっており、 各々部品のように分かれている。 これをモジュールと呼ぶ。
クロック CPUの動作基準となる時間の単位。 動作周波数 1秒間に刻むクロックの数を表す。単位はHz(ヘルツ)。 1秒間に100回のクロックを刻むと100Hz。 POCOでは1クロック=10ns。 1秒間に 回クロックを刻むため、 動作周波数は100MHzとなる。 POCOの構造

29 IEEE754の概要 IEEE(Institute of Electrical and Electronics Engineers) 電子部品や通信方式の研究や標準化を行う機関。 「米国電気電子学会」とも呼ぶ。 IEEE754 IEEEが定めた浮動小数点数の演算の標準規格。 8月からのゼミでは、レイトレーシングのプログラムを動かせるコンピュータを作ろう ということで、浮動小数点数演算装置の設計を始めました。 浮動小数点数演算の国際規格としてIEEE754というものがあるので、これに従った 演算器の設計を目標としました。

30 基本形式 有限数は符号s,仮数f,指数eの三つの整数で表現でき (-1)^s × f × b^e と表せる(bは基数)。 例) = (-1)^1 × 325 × 10^(-2) (11.01)2 = (-1)^0 × (1101)2 × 2^(-2) コンピュータでは電圧の有無で0か1を認識します。 そのため二進数でデータの処理を行うのですが、IEEE754では二進数で浮動小数点数を どのように表現するかということが定められています。 まず浮動小数点数形式では有限数が符号、仮数、指数の3つの整数で表現できます。 例では10進数の-3.25が符号ー1、仮数325、指数-2で表せています。 また二進数の11.01が-1,1101,-2で表せています。 固定小数点数の二進数の場合、桁が上がると重みが2倍になるので、 11.01 = 3.25 と10進数に変換されます。 固定小数点数形式の二進数は桁が上がると重みが2倍になる = 3.25 2^ ^ ^ ^-2

31 基本形式 単精度(32bit) 倍精度(64bit) 8bit 23bit Sign bit … 1bit
Exponent bit … 11bit Fraction bit … 52bit Exponent bit Sign bit Fraction bit 8bit 23bit この形を32bitで表したのがIEEE754の単精度の基本形式です。 最初の1bitに符号、次の8bitで指数、残り23bitで仮数を表します。 倍精度では全長が64bitになり、それだけ表現できる桁や全体の範囲も広がります。 単精度では6ケタまで表せるとされています。

32 基本形式 例) (5.25)10 = (101.01)2 = (1.0101)2 × 2^2 符号 sign = 0 (正) 指数 exponent = (バイアス) = 129 仮数 fraction = … … 0000 10進数の5.25をIEEE754の基本形式に則って表現するとこのようになります。 符号bitは正なので0。 指数は、仮数部分が1.~の形になるようにするので、ここでは2になります。 仮数部は、どのような浮動小数も1.~の形にすることから、最初の1を省略して 小数点以下のみを仮数bitに右詰します。 また、指数部はバイアスと呼ばれる適当に定めた値を足すことで、表現できる範囲をずらすことができます。 これを「ゲタばき表現」と呼び、IEEE754では127をバイアスとして足すようになています。 バイアスを足すことで指数を -127 ~ 128 の範囲で表せる。(ゲタばき表現)

33 表現可能な数 例外処理 NaN … 無効な演算の結果。(0/0や∞-∞など)
指数部(ゲタばき) 仮数部 意味 ≠0 ±非正規化数 1 ~ 254 任意 浮動小数点数(正規化数) 255 ±無限大 Not a number(NaN) … 非数 例外処理 NaN …  無効な演算の結果。(0/0や∞-∞など) 無限大 … 0以外の数を0で割った演算の結果(0除算)。  また正規化数で表せないほど大きな値(オーバーフロー)。 非正規化数 … 0より大きく、正規化数より小さい値。 以上が基本形式になります。 この形式で表現可能な数にはいくつかの種類があります。 ①まずはこれまで例に挙げていたような浮動小数点数。 これは指数部が1~254であるときがそれにあたります。 ②次に0の値です。 これは指数と仮数がともに0の場合です。 ③次に例外処理として3つの場合があります。 非正規化数の範囲(絶対値) × 2^(-126) ~ × 2^(-126) 正規化数の範囲(絶対値) × 2^(-126) ~ × 2^(127)

34 丸め 最近接丸め(偶数) 最も近くの値に丸める。表現できる2つの値の中間の時(末尾より下位の桁が末尾×1/2と等しい)、末尾が0になる方に丸める 最近接丸め(0から遠い方) 最も近くの値に丸める。表現できる2つの値の中間の時(末尾より下位の桁が末尾×1/2と等しい)、正なら切り上げ、負なら切り下げ 切り捨て 0に近い側に丸める 切り上げ 正の無限大に近い方に丸める 切り下げ 負の無限大に近い方に丸める 次に丸めについてです。 IEEE754では4つの丸めモードが用意されています。 一般的な切り捨て切り上げ切り下げの他に、最近接丸めというものが用意されています。 偶数丸めの場合、表現できる2つの値の中間の時、末尾が0になる方に丸めるという ようになっています。

35 最近接丸め 1. 丸めのために仮数部の下位3bitを使用する ガードビット … 仮数部の最下位ビット(ulp)の1/2の重さを持つ
3 23 1. 仮数部の演算結果 Guard bit Round bit Round bit 具体的には、単精度では仮数部が23bitになるように丸めるため 計算途中で生じた24bit以降の数字をチェックして、 丸めを行います。 丸めのために仮数部の下位3bitを使用する ガードビット … 仮数部の最下位ビット(ulp)の1/2の重さを持つ ラウンドビット …仮数部の最下位ビット(ulp)の1/4の重さを持つ スティッキービット … 仮数部の下位3ビット目以降のORを取った値。

36 最近接丸め 1 仮数部の最下位ビット Guard ビット Round ビット Sticky ビット 丸めの結果 切り捨て
切り捨て 1 最近偶数への丸め (切り捨て) 切り上げ 最近偶数への丸め (切り上げ) この濃い青色の行が最近偶数へ丸めた場合です。 このようにGuardビットのみが1で、それ以下が0のとき、二進数では桁が下がると重みが1/2倍になるため、 表現できる値の中間になります。このとき末尾が0なら切り捨て、1なら切り上げすることで末尾が0になります。 このほかの場合は最も近い点に丸めるように場合分けが行われます。

37 計算機概要 変更点 レジスタの拡張 8 → 32×2 (16bit: 整数用 32bit:浮動小数点用)
Moduleの追加  「fpu」及び「frfile」の実装 Instructionの拡張 16bit→25bit      s-reg d-regに加えてもう一つ指定するregisterを追加   (計算結果を3番目に指定するレジスタに入れる)  命令の追加  浮動小数点での計算・分岐命令

38 F_ADD F_SUB 仮数同士を計算させる前に指数、符号を確認
指数によって小数点の位置がずれているので、指数が小さい(大きい)方を差分右(左)にシフトする (桁合わせ) 数の符号、大小によって計算する命令を変える    ( - 5 ) = 4 + 5 4 + ( - 6 ) = - (6 - 4) 計算  繰り上がりや繰り下がりの有無を確認し修正(正規化)

39 F_MUL 符号 指数 両数の指数を足して、バイアスを引く(筆算) 仮数の計算 boothアルゴリズム
指数 両数の指数を足して、バイアスを引く(筆算) 仮数の計算 boothアルゴリズム 一般に仮数の計算は筆算と同じ要領で行われる       乗数にある「1」 の分だけ計算が行われる(計算量が多い) 3 1 6 + 6 + 12 18 3*6=18

40 Boothアルゴリズム 被乗数を二桁ずつ見ていく手法 被乗数の先頭と最後に0を拡張 後ろから2bitずつ見ていく
3 1 7 被乗数を二桁ずつ見ていく手法 被乗数の先頭と最後に0を拡張 後ろから2bitずつ見ていく 「00」「11」なら、何も加算しない 「10」であれば乗数を「引く」 「01」であれば乗数を「足す」 考え方として、右の表のような計算で (3*4)+(3*2)+(3*1)=21でなく (3*8)-(3*1)=21といった計算方法をとる 0及び1が連続すれば計算を省略できるが、交互に出ると計算量は多くなる 3=11であるが と拡張する + 3 1 + 6 +12 21 - 3 1 +24 21

41 F_DIV 引き放し法 要領は筆算と同じ 被除数が大きければ1、小さければ0.商として書き込んだら被除数を左シフトする   を繰り返す

42 Newton-Raphson法 商を近似させていく方式 被除数をa、除数をbとすると a/b=a*(1/b)
下記の式はx=1/bとして、xを近似させていく F(x)=(1/x)-bとして、F(x)=0となったら近似完了

43 F_SQRT Newton-Raphson法による近似によって生成 最終的にx(i)がaの平方根の逆数となるように近似していく
x(0)を初期値として、ある程度aの値によって近似された初期値をテーブル化しておく 3回のループ

44 追加命令 その他 IECONV 浮動小数点レジスタにおける値を2進数の値に変換 ppmファイルに書き込む際に変換する必要がある
追加命令 その他 IECONV                         浮動小数点レジスタにおける値を2進数の値に変換                   ppmファイルに書き込む際に変換する必要がある 浮動小数点レジスタの値を参照する分岐命令の追加 F_LD命令                     参照するレジスタを整数用のものとした                → 整数用のレジスタをポインタとして使用 丸め                                      最近接偶数丸め (5以下切り捨て)         下3桁のみをチェック

45 レイトレーシングのアセンブリ レイトレーシング法とは Lambertの余弦法則とは
視点からスクリーンを1画素ずつ見て、そのときの視線ベクトルと球が交差するとき、光源からの光線の拡散反射による光の強度を計算する。 Lambertの余弦法則とは 物体の表面で反射する光の強度は、光線の入射ベクトルLと表面に対する法線ベクトルNとが成す角度の余弦に比例する。

46 レイトレーシングのアセンブリ 全体の流れ 交差判定 視線ベクトルPと球の方程式 P=Pv+vt (P-Pc)^2 = R^2 からtに関する二次方程式を作る。 実数解が存在するとき視線が球と交わる。 拡散反射の計算 光線ベクトルvLと交点の法線nが成す角αに対し、 反射光の強さは (Idcosα)×KD となり、 A・B = |A||B|cosα から cosα = ((-vL)・n) / (|vL||n|) = -vL・n / √(vL・vL)√(n・n) で求められる。 スクリーンの画素を1つ進めて、1に戻る

47 レイトレーシングのアセンブリ 交差判定 C言語 アセンブリ
A=InnerProduct(v,v); B2=InnerProduct(Pvc,v); C=InnerProduct(Pvc,Pvc)-R*R; D=B2*B2-A*C; //============== // A = v・v FMV 25 8 FMV 26 9 FMV FMV 28 8 FMV 29 9 FMV JAL InnerProduct FMV // B2 = Pvc・v FMV 25 5 FMV 26 6 FMV 27 7 FMV 12 25 //==================== //C = Pvc・Pvc - R*R FMV 25 5 FMV 26 6 FMV 27 7 FMV 28 5 FMV 29 6 FMV 30 7 JAL InnerProduct FMV 13 25 FLD 25 16 FMUL FSUB //=================== // D = B2*B2 - A*C FMUL FMUL FSUB

48 内積のサブルーチン C言語 アセンブリ double InnerProduct( double a[3], double b[3] ) { return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; } //###################### //# InnerProduct FMUL FMUL FMUL FADD FADD JR 31

49 レイトレーシングのアセンブリ 拡散反射 C言語 アセンブリ
t0 = (-B2-sqrt(D))/A; for(k=0;k<3;k++) { P[k] = Pv[k]+v[k]*t0; N[k] = P[k]-Pc[k]; vL[k] = P[k]-PL[k]; } cosA = -InnerProduct(vL,N); cosA /= sqrt(InnerProduct(vL,vL)*InnerProduct(N,N)); テキスト参照

50 計算結果 視点座標 (0.0,0.0,2000.0) 球の中心座標 (0.0,0.0,-6000.0) 球の半径 R = 200
球の色 r = 255, g = 0, b = 0 背景の色 r = 0, g = 0, b = 255 光源座標 ( , , ) スクリーンの大きさ 640 × 640

51 コンパイラの概要 コンパイラの役割 アセンブリ表記をPOCO用の機械語に変換する (人間の手で機械語に直すのは大変すぎる)
(例)LD 2 3 → ・ 使用したプログラム言語 Haskell(純粋関数型言語)

52 Haskellの特徴 Haskellでの関数とは、ある一つ以上の引数が与えられると、ある一つの結果を返す変換器である。
関数は同じ引数で実行されると、必ず同じ結果を返すことが保証されている。    ⇨ 変数が存在しない 関数を組み合わせて新しい関数を作ることが、Haskellのプログラミングである。

53 Haskellの特徴 リストを多用する(for文の代用) 記述が数学的 遅延評価 (例) sum [1..100] ⇨ 5050
[(x,y)|x<-[1..5], y<-[1..5], x+y==5] ⇨[(1,4),(2,3),(3,2),(4,1)] zip[1..] [“a”, “b”, “c”]               ⇨[(1,”a”),(2,”b”),(3,”c”)]

54 コンパイラの大まかな流れ ① コメントと空白行を消去 (プログラムから抜粋)
① コメントと空白行を消去 (プログラムから抜粋) comment::[String]->[String]  ⇐関数の型宣言 comment xs = filter comment2 xs comment2::String->Bool comment2 "" =False comment2 ('/':('/':_)) =False comment2 _ = True

55 コンパイラの大まかな流れ ②ラベルを数値に変換 First: LD 1 2 LD 1 2 ADD 3 4 ADD 3 4 ST 5 6 ST 5 6 JMP First JMP -4 各行に、行番号を与えることにより計算

56 コンパイラの大まかな流れ 各命令、数値をそれぞれ対応するバイナリー (2進数)へ変換する ADD →00110 LD →01001
 (2進数)へ変換する    ADD →00110    LD →01001 →00010 →00110

57 コンパイラの実行例

58 FPGAにおける実行 FPGAにUSBが付いていないので実行されたデータを読み込めない
320×320pixel一つ一つのデータを見るのは 厳しい(時間が掛かる)    Chipscopeによって、FPGAを流れる波形データの要点だけを確認

59 Hz ヘルツ PCの速度を表す単位 Hzは1秒あたりの電磁放射の振動の数を指す 1キロヘルツ kHz 103Hz 1 000Hz
1メガヘルツ MHz 106Hz Hz 1ギガヘルツ GHz 109Hz Hz 1テラヘルツ THz 1012Hz Hz 1ペタヘルツ PHz 1015Hz Hz 1エクサヘルツ EHz 1018Hz Hz

60 背景が青 球の色が赤となる実行結果を使用 赤となる値を書き込む時に「count」を1加算していく 0から1になった時のx,y座標の値 命令が終了した際の「count」の値を確認 fwrite_opの後にcount及びpcが遷移しているかの確認 この3つの整合性が取れれば、FPGAでもシュミレーションと同じ計算ができているはず

61

62 LEDランプ スイッチ 0 常に光っている クロックと同期して点灯 スタンバイ状態 STARTを押すと「3」が点灯する
0   常に光っている  クロックと同期して点灯  スタンバイ状態 STARTを押すと「3」が点灯する  稼働中                                 countが0から1になるとランプ「4」に移動  countがとりうる最大値になるとランプ「3」に移動 終了すると点灯 スイッチ 0 RESET 1 START

63 Isimにおける「count」が0から1への変化した X,Y座標
X:c0c00000 Y: 最終的な描画数 4077 fend_op 命令の時、pcが止まる(imem=5‘b11111)

64 CPI=4 4クロックで1つの命令 35MHzまでの動作を確認 FPGAにおける実行 CPI=8 5MHzで実行している
1クロックで除算や平方根の近似を行っている為と考えられる FPGAにおける実行 CPI=8 5MHzで実行している 35MHzだとランプの動作が確認できない為

65 課題 パイプライン化による計算の高速化 div,sqrtによる計算をクロックを跨いでの命令に変更
パイプライン化したmoduleを作成したが、NOPを2つ分岐命令毎に挿入する必要がある div,sqrtによる計算をクロックを跨いでの命令に変更 40MHz以上で実行できない理由は恐らくこの2つ もしくはアルゴリズム自体の変更


Download ppt "FPGAを用いた レイトレーシングの実装 福永研究室 西村建郎 中村真魚 工藤健史."

Similar presentations


Ads by Google