From 40b59e4cd26b7a3a6d0ff14d8480c172ce3fa845 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Fri, 10 Nov 2023 01:08:39 -0600 Subject: rtl/gfx: rename gfx_{coarse,fine} -> gfx_raster_{coarse,fine} --- rtl/gfx/gfx_coarse.sv | 122 ------------------------------------------- rtl/gfx/gfx_fine.sv | 47 ----------------- rtl/gfx/gfx_raster.sv | 4 +- rtl/gfx/gfx_raster_coarse.sv | 122 +++++++++++++++++++++++++++++++++++++++++++ rtl/gfx/gfx_raster_fine.sv | 47 +++++++++++++++++ 5 files changed, 171 insertions(+), 171 deletions(-) delete mode 100644 rtl/gfx/gfx_coarse.sv delete mode 100644 rtl/gfx/gfx_fine.sv create mode 100644 rtl/gfx/gfx_raster_coarse.sv create mode 100644 rtl/gfx/gfx_raster_fine.sv (limited to 'rtl/gfx') diff --git a/rtl/gfx/gfx_coarse.sv b/rtl/gfx/gfx_coarse.sv deleted file mode 100644 index 840c647..0000000 --- a/rtl/gfx/gfx_coarse.sv +++ /dev/null @@ -1,122 +0,0 @@ -`include "gfx/gfx_defs.sv" - -module gfx_coarse -( - input logic clk, - rst_n, - - input raster_xy pos_ref, - input coarse_dim span_x, - span_y, - 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 -); - - 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; - - struct packed - { - raster_xy pos; - fixed_tri corners; - } out, skid_out; - - assign pos = skid_out.pos; - assign corners = skid_out.corners; - - 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_valid(send), - .in_ready(skid_ready), - .* - ); - - always_comb - for (integer i = 0; i < 3; ++i) begin - edge_tests[i] = edge_fns[i] + coarse_test_offsets[i]; - edge_vert_next[i] = edge_vert[i] + 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; - - 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; - end - - for (integer i = 0; i < 3; ++i) begin - edge_fns[i] <= edge_fns[i] + 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 diff --git a/rtl/gfx/gfx_fine.sv b/rtl/gfx/gfx_fine.sv deleted file mode 100644 index 6238025..0000000 --- a/rtl/gfx/gfx_fine.sv +++ /dev/null @@ -1,47 +0,0 @@ -`include "gfx/gfx_defs.sv" - -module gfx_fine -#(parameter X=0, Y=0) -( - input logic clk, - - input raster_xy pos, - input fixed_tri corners, - input raster_offsets_tri offsets, - input logic stall, - - output frag_xy fragment, - output logic paint -); - - localparam INDEX = Y * `GFX_RASTER_SIZE + X; - - frag_xy fragment_hold; - fixed_tri edges, per_edge_offsets; - logic[2:0] signs; - raster_xy_prec prec; - logic[`GFX_RASTER_BITS - 1:0] fine_x, fine_y; - - assign prec = pos; - assign fine_x = X; - assign fine_y = Y; - - always_comb - for (integer i = 0; i < 3; ++i) begin - signs[i] = edges[i][$bits(edges[0]) - 1]; - per_edge_offsets[i] = offsets[i][INDEX]; - end - - always_ff @(posedge clk) - if (!stall) begin - paint <= signs == 0; - - fragment <= fragment_hold; - fragment_hold.x <= {prec.x.coarse, fine_x}; - fragment_hold.y <= {prec.y.coarse, fine_y}; - - for (integer i = 0; i < 3; ++i) - edges[i] <= corners[i] + per_edge_offsets[i]; - end - -endmodule diff --git a/rtl/gfx/gfx_raster.sv b/rtl/gfx/gfx_raster.sv index e30ad43..c61cbb5 100644 --- a/rtl/gfx/gfx_raster.sv +++ b/rtl/gfx/gfx_raster.sv @@ -41,7 +41,7 @@ module gfx_raster fixed_tri coarse_corners; raster_xy coarse_pos; - gfx_coarse coarse + gfx_raster_coarse coarse ( .in_valid(setup_valid), .in_ready(coarse_ready), @@ -83,7 +83,7 @@ module gfx_raster generate for (i = 0; i < `GFX_RASTER_SIZE; ++i) begin: fine_x for (j = 0; j < `GFX_RASTER_SIZE; ++j) begin: fine_y - gfx_fine #(.X(i), .Y(j)) fine + gfx_raster_fine #(.X(i), .Y(j)) fine ( .stall(fine_stall), diff --git a/rtl/gfx/gfx_raster_coarse.sv b/rtl/gfx/gfx_raster_coarse.sv new file mode 100644 index 0000000..7a047ee --- /dev/null +++ b/rtl/gfx/gfx_raster_coarse.sv @@ -0,0 +1,122 @@ +`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 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 +); + + 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; + + struct packed + { + raster_xy pos; + fixed_tri corners; + } out, skid_out; + + assign pos = skid_out.pos; + assign corners = skid_out.corners; + + 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_valid(send), + .in_ready(skid_ready), + .* + ); + + always_comb + for (integer i = 0; i < 3; ++i) begin + edge_tests[i] = edge_fns[i] + coarse_test_offsets[i]; + edge_vert_next[i] = edge_vert[i] + 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; + + 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; + end + + for (integer i = 0; i < 3; ++i) begin + edge_fns[i] <= edge_fns[i] + 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 diff --git a/rtl/gfx/gfx_raster_fine.sv b/rtl/gfx/gfx_raster_fine.sv new file mode 100644 index 0000000..2cb9c6a --- /dev/null +++ b/rtl/gfx/gfx_raster_fine.sv @@ -0,0 +1,47 @@ +`include "gfx/gfx_defs.sv" + +module gfx_raster_fine +#(parameter X=0, Y=0) +( + input logic clk, + + input raster_xy pos, + input fixed_tri corners, + input raster_offsets_tri offsets, + input logic stall, + + output frag_xy fragment, + output logic paint +); + + localparam INDEX = Y * `GFX_RASTER_SIZE + X; + + frag_xy fragment_hold; + fixed_tri edges, per_edge_offsets; + logic[2:0] signs; + raster_xy_prec prec; + logic[`GFX_RASTER_BITS - 1:0] fine_x, fine_y; + + assign prec = pos; + assign fine_x = X; + assign fine_y = Y; + + always_comb + for (integer i = 0; i < 3; ++i) begin + signs[i] = edges[i][$bits(edges[0]) - 1]; + per_edge_offsets[i] = offsets[i][INDEX]; + end + + always_ff @(posedge clk) + if (!stall) begin + paint <= signs == 0; + + fragment <= fragment_hold; + fragment_hold.x <= {prec.x.coarse, fine_x}; + fragment_hold.y <= {prec.y.coarse, fine_y}; + + for (integer i = 0; i < 3; ++i) + edges[i] <= corners[i] + per_edge_offsets[i]; + end + +endmodule -- cgit v1.2.3