From c1c1f1e823099c82d02e94827a64d7a0b223048e Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sun, 22 Oct 2023 00:16:40 -0600 Subject: rtl/gfx: reimplement multiplier as a much smaller mat-vec pipeline --- rtl/gfx/mat_vec_mul.sv | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'rtl/gfx/mat_vec_mul.sv') diff --git a/rtl/gfx/mat_vec_mul.sv b/rtl/gfx/mat_vec_mul.sv index 43860c9..9f5dcae 100644 --- a/rtl/gfx/mat_vec_mul.sv +++ b/rtl/gfx/mat_vec_mul.sv @@ -5,27 +5,42 @@ module mat_vec_mul input logic clk, rst_n, - input logic start, input mat4 a, input vec4 x, + input logic in_valid, + out_ready, - output logic done, - output vec4 q + output vec4 q, + output logic in_ready, + out_valid ); - logic dones[`FLOATS_PER_VEC]; + logic stall_mul, stall_fold, mul_ready, mul_valid, feedback, feedback_last; - assign done = dones[0]; + pipeline_flow #(.STAGES(`FP_MUL_STAGES)) mul + ( + .stall(stall_mul), + .out_ready(mul_ready), + .out_valid(mul_valid), + .* + ); + + fold_flow fold + ( + .stall(stall_fold), + .in_ready(mul_ready), + .in_valid(mul_valid), + .* + ); genvar i; generate - for (i = 0; i < `FLOATS_PER_VEC; ++i) begin: dots + for (i = 0; i < `VECS_PER_MAT; ++i) begin: dots vec_dot dot_i ( .a(a[i]), .b(x), .q(q[i]), - .done(dones[i]), .* ); end -- cgit v1.2.3