diff options
| author | Alejandro Soto <alejandro@34project.org> | 2023-10-22 00:16:40 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2023-10-22 00:16:50 -0600 |
| commit | c1c1f1e823099c82d02e94827a64d7a0b223048e (patch) | |
| tree | cc6466fad9a943bbde314feb151bbacadf5b338a /rtl/gfx/mat_vec_mul.sv | |
| parent | a14fc04f3b9f5bcef941ea79c794532d7ca0e7fc (diff) | |
rtl/gfx: reimplement multiplier as a much smaller mat-vec pipeline
Diffstat (limited to 'rtl/gfx/mat_vec_mul.sv')
| -rw-r--r-- | rtl/gfx/mat_vec_mul.sv | 29 |
1 files changed, 22 insertions, 7 deletions
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 |
