summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_setup_edge.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-11-10 01:01:29 -0600
committerAlejandro Soto <alejandro@34project.org>2023-11-10 01:43:24 -0600
commit6765d18bb9d1d83367afe76694749893eb88fbbd (patch)
tree8cd335d281d0958fe9852caeeebf2228f24afd6c /rtl/gfx/gfx_setup_edge.sv
parent39294ed7dbf2331651cd8fcca887e088bdcd2cfc (diff)
rtl/gfx: implement triangle setup
Diffstat (limited to 'rtl/gfx/gfx_setup_edge.sv')
-rw-r--r--rtl/gfx/gfx_setup_edge.sv53
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