summaryrefslogtreecommitdiff
path: root/rtl
diff options
context:
space:
mode:
Diffstat (limited to 'rtl')
-rw-r--r--rtl/gfx/gfx_defs.sv4
-rw-r--r--rtl/gfx/gfx_raster_fine.sv4
-rw-r--r--rtl/gfx/gfx_setup_bounds.sv16
3 files changed, 12 insertions, 12 deletions
diff --git a/rtl/gfx/gfx_defs.sv b/rtl/gfx/gfx_defs.sv
index ec1ea8d..d95414a 100644
--- a/rtl/gfx/gfx_defs.sv
+++ b/rtl/gfx/gfx_defs.sv
@@ -107,7 +107,7 @@ typedef logic[8:0] coarse_dim;
`define GFX_RASTER_BITS 1 // SolĂ­a ser 2, pero la FPGA no da para tanto
`define GFX_RASTER_SUB_BITS 4
-`define GFX_RASTER_PAD_BITS ($bits(fixed) - $bits(coarse_dim) - `FIXED_FRAC - `GFX_RASTER_BITS - 1)
+`define GFX_RASTER_PAD_BITS ($bits(fixed) - $bits(coarse_dim) - `FIXED_FRAC - `GFX_RASTER_BITS)
`define GFX_RASTER_SIZE (1 << `GFX_RASTER_BITS)
`define GFX_RASTER_OFFSETS (1 << (2 * `GFX_RASTER_BITS))
@@ -121,7 +121,7 @@ typedef struct packed
{
logic sign;
logic[`GFX_RASTER_PAD_BITS - 1:0] padding;
- coarse_dim coarse;
+ logic[$bits(coarse_dim) - 2:0] coarse;
logic[`GFX_RASTER_BITS - 1:0] fine;
raster_sub sub;
} raster_prec;
diff --git a/rtl/gfx/gfx_raster_fine.sv b/rtl/gfx/gfx_raster_fine.sv
index 05d3b0d..da11b6f 100644
--- a/rtl/gfx/gfx_raster_fine.sv
+++ b/rtl/gfx/gfx_raster_fine.sv
@@ -39,8 +39,8 @@ module gfx_raster_fine
paint <= signs == 0;
fragment <= fragment_hold;
- fragment_hold.x <= {prec.x.coarse, fine_x};
- fragment_hold.y <= {prec.y.coarse, fine_y};
+ fragment_hold.x <= {prec.x.sign, prec.x.coarse, fine_x};
+ fragment_hold.y <= {prec.y.sign, prec.y.coarse, fine_y};
for (integer i = 0; i < 3; ++i)
edges[i] <= corners[i] + per_edge_offsets[i];
diff --git a/rtl/gfx/gfx_setup_bounds.sv b/rtl/gfx/gfx_setup_bounds.sv
index 6a93db2..b110438 100644
--- a/rtl/gfx/gfx_setup_bounds.sv
+++ b/rtl/gfx/gfx_setup_bounds.sv
@@ -25,13 +25,13 @@ module gfx_setup_bounds
assign ref_prec.x.sub = 0;
assign ref_prec.x.fine = 0;
- assign ref_prec.x.coarse = ref_x;
- assign ref_prec.x.padding = 0;
+ assign ref_prec.x.padding = {`GFX_RASTER_PAD_BITS{ref_x[$bits(ref_x) - 1]}};
+ assign {ref_prec.x.sign, ref_prec.x.coarse} = ref_x;
assign ref_prec.y.sub = 0;
assign ref_prec.y.fine = 0;
- assign ref_prec.y.coarse = ref_y;
- assign ref_prec.y.padding = 0;
+ assign ref_prec.y.padding = {`GFX_RASTER_PAD_BITS{ref_y[$bits(ref_y) - 1]}};
+ assign {ref_prec.y.sign, ref_prec.y.coarse} = ref_y;
always_ff @(posedge clk)
if (!stall) begin
@@ -63,11 +63,11 @@ module gfx_setup_bounds
max.y <= y_a_lt_c ? hold_c.y : hold_a.y;
end
- ref_x <= min_prec.x.coarse;
- ref_y <= min_prec.y.coarse;
+ ref_x <= {min_prec.x.sign, min_prec.x.coarse};
+ ref_y <= {min_prec.y.sign, min_prec.y.coarse};
- span_x <= max_prec.x.coarse - min_prec.x.coarse;
- span_y <= max_prec.y.coarse - min_prec.y.coarse;
+ span_x <= {max_prec.x.sign, max_prec.x.coarse} - {min_prec.x.sign, min_prec.x.coarse};
+ span_y <= {max_prec.y.sign, max_prec.y.coarse} - {min_prec.y.sign, min_prec.y.coarse};
end
endmodule