summaryrefslogtreecommitdiff
path: root/rtl/gfx/gfx_raster_coarse.sv
diff options
context:
space:
mode:
Diffstat (limited to 'rtl/gfx/gfx_raster_coarse.sv')
-rw-r--r--rtl/gfx/gfx_raster_coarse.sv135
1 files changed, 0 insertions, 135 deletions
diff --git a/rtl/gfx/gfx_raster_coarse.sv b/rtl/gfx/gfx_raster_coarse.sv
deleted file mode 100644
index 8db3fe9..0000000
--- a/rtl/gfx/gfx_raster_coarse.sv
+++ /dev/null
@@ -1,135 +0,0 @@
-`include "gfx/gfx_defs.sv"
-
-module gfx_raster_coarse
-(
- input logic clk,
- rst_n,
-
- input raster_xy pos_ref,
- input coarse_dim span_x,
- span_y,
- input raster_offsets_tri offsets,
- input fixed_tri edge_refs,
- coarse_x_offsets,
- coarse_y_offsets,
- coarse_test_offsets,
-
- input logic in_valid,
- output logic in_ready,
-
- input logic out_ready,
- output logic out_valid,
-
- output raster_xy pos,
- output fixed_tri corners,
- output raster_offsets_tri fine_offsets
-);
-
- fixed reference_x;
- logic end_x, end_y, running, send, send_valid, skid_ready, stall;
- raster_xy next_pos;
- fixed_tri edge_fns, edge_tests, edge_vert, edge_vert_next;
- coarse_dim stride_x, stride_y, width;
- logic[2:0] edge_signs;
- raster_offsets_tri hold_offsets;
-
- fixed_tri hold_coarse_x_offsets, hold_coarse_y_offsets, hold_coarse_test_offsets;
-
- struct packed
- {
- raster_xy pos;
- fixed_tri corners;
- raster_offsets_tri fine_offsets;
- } out, skid_out;
-
- assign pos = skid_out.pos;
- assign corners = skid_out.corners;
- assign fine_offsets = skid_out.fine_offsets;
-
- assign end_x = stride_x == 0;
- assign end_y = stride_y == 0;
-
- assign send = &edge_signs && send_valid;
- assign in_ready = skid_ready && !running;
-
- gfx_skid_buf #(.WIDTH($bits(out))) skid_buf
- (
- .in(out),
- .out(skid_out),
- .*
- );
-
- gfx_skid_flow skid_flow
- (
- .in_ready(skid_ready),
- .in_valid(send),
- .*
- );
-
- always_comb
- for (integer i = 0; i < 3; ++i) begin
- edge_tests[i] = edge_fns[i] + hold_coarse_test_offsets[i];
- edge_vert_next[i] = edge_vert[i] + hold_coarse_y_offsets[i];
- end
-
- always_ff @(posedge clk or negedge rst_n)
- if (!rst_n) begin
- running <= 0;
- send_valid <= 0;
- end else if (!stall) begin
- if (running)
- running <= !end_x || !end_y;
- else
- running <= in_ready && in_valid;
-
- send_valid <= running;
- end
-
- always_ff @(posedge clk)
- if (!stall) begin
- out.pos <= next_pos;
- out.corners <= edge_fns;
- out.fine_offsets <= hold_offsets;
-
- stride_x <= stride_x - 1;
- next_pos.x <= next_pos.x + (1 << (`FIXED_FRAC + `GFX_RASTER_BITS));
-
- if (end_x) begin
- next_pos.x <= reference_x;
- next_pos.y <= next_pos.y + (1 << (`FIXED_FRAC + `GFX_RASTER_BITS));
-
- stride_x <= width;
- stride_y <= stride_y - 1;
- end
-
- if (in_ready && in_valid) begin
- next_pos <= pos_ref;
- reference_x <= pos_ref.x;
-
- width <= span_x;
- stride_x <= span_x;
- stride_y <= span_y;
-
- hold_offsets <= offsets;
- hold_coarse_x_offsets <= coarse_x_offsets;
- hold_coarse_y_offsets <= coarse_y_offsets;
- hold_coarse_test_offsets <= coarse_test_offsets;
- end
-
- for (integer i = 0; i < 3; ++i) begin
- edge_fns[i] <= edge_fns[i] + hold_coarse_x_offsets[i];
- if (end_x) begin
- edge_fns[i] <= edge_vert_next[i];
- edge_vert[i] <= edge_vert_next[i];
- end
-
- if (in_ready && in_valid) begin
- edge_fns[i] <= edge_refs[i];
- edge_vert[i] <= edge_refs[i];
- end
-
- edge_signs[i] <= !edge_tests[i][$bits(fixed) - 1];
- end
- end
-
-endmodule