3

Verilog/SystemVerilogで合成可能な3Dラスタライザーを作成しようとしています。現在のラスターライザーは、実際には3Dラスターライザーではありません。頂点位置(vertA_pos_x、vertA_pos_y、vertB_pos_x、vertB_pos_y、vertC_pos_x、vertC_pos_y)用に6つの32ビットフロートと、頂点カラーリング用に9つの8ビット整数(vertA_color_r、vertA_ 、vertB_color_r、vertB_color_g、vertB_color_b、vertC_color_r、vertC_color_g、vertC_color_b)。

位置の範囲は0.0f〜1.0fで、0.0fは画面の上部/左側、0.5fは画面の中央、1.0fは下部/右側を表します。

ラスター作業は、最初に、必要なラスター線の数を数えることです。フレームバッファの高さが240ピクセルであるとすると、頂点Aは上部の頂点、Bは左下の頂点、Cは右下の頂点、Xは最下部の頂点です(BまたはCのいずれか。これは計算する必要があります)。ラスターラインの数はで与えられ(vertX_pos_y - vertA_pos_y) / 240ます。

ラスタライズプロセスのこの部分は、私の疑問を明らかにするほど複雑なので、ここでどのように進めるかについては説明しません。

ここで私が知りたいのは、Verilogでこのような「複雑な」ロジックを実装する方法です(これはシーケンシャルであり、1クロックサイクル以上かかるため「複雑」です。これは、ハードウェアで設計するのに最も快適な種類ではありません。説明言語)。

私はアルテラのQuartusを使用しているので、主にアルテラのソリューションに興味があります。

Quartusに付属する浮動小数点演算メガファンクションはすべて、完了するまでに1クロックサイクル以上を必要とするため、のような「単純な」計算を実装する(vertX_pos_y - vertA_pos_y) / 240には、かなり退屈でエラーが発生しやすいステートマシンが必要だと思います。私の最大の期待は、誰かが私にそれは必要ないと言うことですが、そうでない場合でも、人々が一般的にこのようなものをどのように設計するかを知りたいです。

また、私はVerilogとハードウェアの設計全般に非常に慣れていないので、愚かなことを言ったら申し訳ありません。アイデア?

4

1 に答える 1

4

パイプラインについて聞いたことがありますか?これは、データパスが頻繁に構築される方法です。

例を挙げると、あなたがやりたいとしましょう(a*b) + c。ここでは、 x*y3クロックサイクルx+yかかり、1クロックサイクルかかります。パイプライン化とは、遅延を整列させるためにレジスタのバンクを挿入することを意味します。cこの例では、乗算のレイテンシーと一致するように入力が遅延されます。したがって、全体として、操作のレイテンシーは3 + 1=4クロックサイクルになります。

これで、多くの計算を行う必要がある場合、パイプライン遅延を一緒に「レゴ」できるため、数学演算をスケジュールするためにステートマシンロジックは必要ありません。これは、答え(つまりレイテンシー)を取得するために数サイクル待つ必要があることを意味します。これは、同期設計では実際には避けられません。

于 2010-07-06T09:43:24.683 に答える