summaryrefslogtreecommitdiff
path: root/rtl/legacy_gfx/gfx_setup_offsets.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2024-05-05 17:34:22 -0600
committerAlejandro Soto <alejandro@34project.org>2024-05-05 17:38:27 -0600
commit081a8a3ba8bfe036f31da53f9c041a2caa30fce2 (patch)
tree7d712b67d3dc1ad3d37041562774ba3c4e5a7f49 /rtl/legacy_gfx/gfx_setup_offsets.sv
parente5b64ea353678baabd16d245fcfaa3384e1acf8f (diff)
rtl/legacy_gfx: rename gfx -> legacy_gfx
Diffstat (limited to 'rtl/legacy_gfx/gfx_setup_offsets.sv')
-rw-r--r--rtl/legacy_gfx/gfx_setup_offsets.sv44
1 files changed, 44 insertions, 0 deletions
diff --git a/rtl/legacy_gfx/gfx_setup_offsets.sv b/rtl/legacy_gfx/gfx_setup_offsets.sv
new file mode 100644
index 0000000..aabd322
--- /dev/null
+++ b/rtl/legacy_gfx/gfx_setup_offsets.sv
@@ -0,0 +1,44 @@
+`include "gfx/gfx_defs.sv"
+
+module gfx_setup_offsets
+(
+ input logic clk,
+
+ input fixed inc_x,
+ inc_y,
+ input logic stall,
+
+ output raster_offsets offsets
+);
+
+ fixed x_hold[`GFX_RASTER_SIZE], y_hold[`GFX_RASTER_SIZE],
+ x_multiples[`GFX_RASTER_SIZE], y_multiples[`GFX_RASTER_SIZE];
+
+ // Asume GFX_RASTER_BITS == 2. Los ceros deberían optimizarse trivialmente
+ assign x_multiples[0] = 0;
+ assign y_multiples[0] = 0;
+ assign x_multiples[1] = inc_x;
+ assign y_multiples[1] = inc_y;
+ //assign x_multiples[2] = inc_x << 1;
+ //assign y_multiples[2] = inc_y << 1;
+ //assign x_multiples[3] = (inc_x << 1) + inc_x;
+ //assign y_multiples[3] = (inc_y << 1) + inc_y;
+
+ genvar i;
+ generate
+ for (i = 0; i < `GFX_RASTER_SIZE; ++i) begin: multiples
+ always_ff @(posedge clk)
+ if (!stall) begin
+ x_hold[i] <= x_multiples[i];
+ y_hold[i] <= y_multiples[i];
+ end
+ end
+
+ for (i = 0; i < `GFX_RASTER_OFFSETS; ++i) begin: permutations
+ always_ff @(posedge clk)
+ if (!stall)
+ offsets[i] <= x_hold[i % `GFX_RASTER_SIZE] + y_hold[i / `GFX_RASTER_SIZE];
+ end
+ endgenerate
+
+endmodule