summaryrefslogtreecommitdiff
path: root/rtl/gfx/mat_vec_mul.sv
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2023-10-22 00:16:40 -0600
committerAlejandro Soto <alejandro@34project.org>2023-10-22 00:16:50 -0600
commitc1c1f1e823099c82d02e94827a64d7a0b223048e (patch)
treecc6466fad9a943bbde314feb151bbacadf5b338a /rtl/gfx/mat_vec_mul.sv
parenta14fc04f3b9f5bcef941ea79c794532d7ca0e7fc (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.sv29
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