diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-11-21 14:12:34 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-11-21 18:03:15 -0600 |
| commit | 09b1358028ba1d88f7bfd02389c9078eba7afe8b (patch) | |
| tree | 5d1def83e638d5b05a5cc7f8104b701c561577ef /rtl/gfx/gfx_sp_writeback.sv | |
| parent | a7d581b4910e4e23fa57f89c0a28669ce5a49d2a (diff) | |
rtl/gfx: implement SP writeback
Diffstat (limited to 'rtl/gfx/gfx_sp_writeback.sv')
| -rw-r--r-- | rtl/gfx/gfx_sp_writeback.sv | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/rtl/gfx/gfx_sp_writeback.sv b/rtl/gfx/gfx_sp_writeback.sv new file mode 100644 index 0000000..1195910 --- /dev/null +++ b/rtl/gfx/gfx_sp_writeback.sv @@ -0,0 +1,65 @@ +`include "gfx/gfx_defs.sv" + +module gfx_sp_writeback +( + input logic clk, + rst_n, + + input wb_op stream_wb, + input logic stream_wb_valid, + output logic stream_wb_ready, + + input wb_op combiner_wb, + input logic combiner_wb_valid, + output logic combiner_wb_ready, + + input wb_op shuffler_wb, + input logic shuffler_wb_valid, + output logic shuffler_wb_ready, + + output logic wr, + output vreg_num wr_reg, + output mat4 wr_data +); + + wb_op wb_in, wb_out; + + assign wr_reg = wb_out.dst; + assign wr_data = wb_out.data; + + gfx_pipeline_flow #(.STAGES(`GFX_SP_WB_STAGES)) flow + ( + .stall(), + .in_ready(), + .in_valid(stream_wb_valid || combiner_wb_valid || shuffler_wb_valid), + .out_ready(1), + .out_valid(wr), + .* + ); + + gfx_pipes #(.WIDTH($bits(wb_out)), .DEPTH(`GFX_SP_WB_STAGES)) pipes + ( + .in(wb_in), + .out(wb_out), + .stall(0), + .* + ); + + always_comb begin + stream_wb_ready = 0; + combiner_wb_ready = 0; + shuffler_wb_ready = 0; + + if (stream_wb_valid) begin + wb_in = stream_wb; + stream_wb_ready = 1; + end else if (shuffler_wb_valid) begin + wb_in = shuffler_wb; + shuffler_wb_ready = 1; + end else begin + wb_in = combiner_wb; + combiner_wb_ready = 1; + end + end + +endmodule |
