summaryrefslogtreecommitdiff
path: root/rtl/legacy_gfx/gfx_masks.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_masks.sv
parente5b64ea353678baabd16d245fcfaa3384e1acf8f (diff)
rtl/legacy_gfx: rename gfx -> legacy_gfx
Diffstat (limited to 'rtl/legacy_gfx/gfx_masks.sv')
-rw-r--r--rtl/legacy_gfx/gfx_masks.sv68
1 files changed, 68 insertions, 0 deletions
diff --git a/rtl/legacy_gfx/gfx_masks.sv b/rtl/legacy_gfx/gfx_masks.sv
new file mode 100644
index 0000000..5182bd4
--- /dev/null
+++ b/rtl/legacy_gfx/gfx_masks.sv
@@ -0,0 +1,68 @@
+`include "gfx/gfx_defs.sv"
+
+module gfx_masks
+(
+ input logic clk,
+ rst_n,
+
+ input logic swap_buffers,
+ input cmd_word fb_base_a,
+ fb_base_b,
+
+ input linear_coord scan_mask_addr,
+ output logic scan_mask,
+
+ input logic frag_mask_write,
+ frag_mask_set,
+ input linear_coord frag_mask_read_addr,
+ frag_mask_write_addr,
+ output logic frag_mask,
+
+ output vram_addr frag_base,
+ scan_base
+);
+
+ logic mask_a, mask_b, frag_write_hold, frag_set_hold;
+ linear_coord scan_addr_hold, frag_write_addr_hold, frag_read_addr_hold;
+
+ gfx_mask_sram sram_a
+ (
+ .set(frag_set_hold),
+ .mask(mask_a),
+ .write(swap_buffers && frag_write_hold),
+ .read_addr(swap_buffers ? frag_read_addr_hold : scan_addr_hold),
+ .write_addr(frag_write_addr_hold),
+ .*
+ );
+
+ gfx_mask_sram sram_b
+ (
+ .set(frag_set_hold),
+ .mask(mask_b),
+ .write(!swap_buffers && frag_write_hold),
+ .read_addr(swap_buffers ? scan_addr_hold : frag_read_addr_hold),
+ .write_addr(frag_write_addr_hold),
+ .*
+ );
+
+ always_ff @(posedge clk or negedge rst_n)
+ if (!rst_n) begin
+ frag_base <= 0;
+ scan_base <= 0;
+ end else begin
+ frag_base <= swap_buffers ? fb_base_a[$bits(vram_addr):1] : fb_base_b[$bits(vram_addr):1];
+ scan_base <= swap_buffers ? fb_base_b[$bits(vram_addr):1] : fb_base_a[$bits(vram_addr):1];
+ end
+
+ always_ff @(posedge clk) begin
+ scan_mask <= swap_buffers ? mask_b : mask_a;
+ scan_addr_hold <= scan_mask_addr;
+
+ frag_mask <= swap_buffers ? mask_a : mask_b;
+ frag_set_hold <= frag_mask_set;
+ frag_write_hold <= frag_mask_write;
+ frag_read_addr_hold <= frag_mask_read_addr;
+ frag_write_addr_hold <= frag_mask_write_addr;
+ end
+
+endmodule