diff options
Diffstat (limited to 'rtl/legacy_gfx/gfx_sp_combiner.sv')
| -rw-r--r-- | rtl/legacy_gfx/gfx_sp_combiner.sv | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/rtl/legacy_gfx/gfx_sp_combiner.sv b/rtl/legacy_gfx/gfx_sp_combiner.sv new file mode 100644 index 0000000..900af00 --- /dev/null +++ b/rtl/legacy_gfx/gfx_sp_combiner.sv @@ -0,0 +1,63 @@ +`include "gfx/gfx_defs.sv" + +module gfx_sp_combiner +( + input logic clk, + rst_n, + + input mat4 a, + b, + input insn_deco deco, + input logic in_valid, + output logic in_ready, + + input logic wb_ready, + output logic wb_valid, + output wb_op wb +); + + wb_op wb_out; + logic mul_ready, mul_valid, fifo_ready, fifo_valid, skid_ready, out_stall; + + assign in_ready = mul_ready && fifo_ready; + + gfx_mat_mat mul + ( + .q(wb_out.data), + .in_ready(mul_ready), + .in_valid(in_valid && fifo_ready), + .out_ready(skid_ready && fifo_valid), + .out_valid(mul_valid), + .* + ); + + gfx_fifo #(.WIDTH($bits(vreg_num)), .DEPTH(`GFX_SP_COMBINER_FIFO_DEPTH)) depth + ( + .in(deco.dst), + .out(wb_out.dst), + .in_ready(fifo_ready), + .in_valid(in_valid && mul_ready), + .out_ready(skid_ready && mul_valid), + .out_valid(fifo_valid), + .* + ); + + gfx_skid_flow out_flow + ( + .stall(out_stall), + .in_ready(skid_ready), + .in_valid(fifo_valid && mul_valid), + .out_ready(wb_ready), + .out_valid(wb_valid), + .* + ); + + gfx_skid_buf #(.WIDTH($bits(wb))) out_skid + ( + .in(wb_out), + .out(wb), + .stall(out_stall), + .* + ); + +endmodule |
