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とハードウェアの設計全般に非常に慣れていないので、愚かなことを言ったら申し訳ありません。アイデア?