diff options
Diffstat (limited to 'rtl')
| -rw-r--r-- | rtl/gfx/gfx_defs.sv | 4 | ||||
| -rw-r--r-- | rtl/gfx/gfx_raster_fine.sv | 4 | ||||
| -rw-r--r-- | rtl/gfx/gfx_setup_bounds.sv | 16 |
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 |
