diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-11-10 01:01:29 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-11-10 01:43:24 -0600 |
| commit | 6765d18bb9d1d83367afe76694749893eb88fbbd (patch) | |
| tree | 8cd335d281d0958fe9852caeeebf2228f24afd6c /rtl/gfx/gfx_setup_edge.sv | |
| parent | 39294ed7dbf2331651cd8fcca887e088bdcd2cfc (diff) | |
rtl/gfx: implement triangle setup
Diffstat (limited to '')
| -rw-r--r-- | rtl/gfx/gfx_setup_edge.sv | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/rtl/gfx/gfx_setup_edge.sv b/rtl/gfx/gfx_setup_edge.sv new file mode 100644 index 0000000..5d69a88 --- /dev/null +++ b/rtl/gfx/gfx_setup_edge.sv @@ -0,0 +1,53 @@ +`include "gfx/gfx_defs.sv" + +module gfx_setup_edge +( + input logic clk, + + input raster_xy p, + q, + origin, + input logic stall, + + output fixed base, + inc_x, + inc_y +); + + fixed delta_x, delta_y, hold_inc_x, hold_inc_y; + + gfx_pipes #(.WIDTH($bits(inc_x)), .DEPTH(`FIXED_FMA_DOT_STAGES)) inc_x_pipes + ( + .in(hold_inc_x), + .out(inc_x), + .* + ); + + gfx_pipes #(.WIDTH($bits(inc_y)), .DEPTH(`FIXED_FMA_DOT_STAGES)) inc_y_pipes + ( + .in(hold_inc_y), + .out(inc_y), + .* + ); + + gfx_fixed_fma_dot edge_base + ( + .c(0), + .q(base), + .a0(delta_x), + .b0(hold_inc_x), + .a1(delta_y), + .b1(hold_inc_y), + .* + ); + + always_ff @(posedge clk) + if (!stall) begin + delta_x <= origin.x - q.x; + delta_y <= origin.y - q.y; + + hold_inc_x <= p.y - q.y; + hold_inc_y <= q.x - p.x; + end + +endmodule |
