--- rtl/baseline/int8_matvec_4x4.sv +++ rtl/optimized/int8_matvec_4x4.sv @@ -32,10 +32,11 @@ logic signed [15:0] p10, p11, p12, p13; logic signed [15:0] p20, p21, p22, p23; logic signed [15:0] p30, p31, p32, p33; - logic signed [31:0] e00, e01, e02, e03; - logic signed [31:0] e10, e11, e12, e13; - logic signed [31:0] e20, e21, e22, e23; - logic signed [31:0] e30, e31, e32, e33; + logic signed [16:0] s00, s01; + logic signed [16:0] s10, s11; + logic signed [16:0] s20, s21; + logic signed [16:0] s30, s31; + logic signed [17:0] d0, d1, d2, d3; always_comb begin p00 = w00 * x0; @@ -55,26 +56,23 @@ p32 = w32 * x2; p33 = w33 * x3; - e00 = {{16{p00[15]}}, p00}; - e01 = {{16{p01[15]}}, p01}; - e02 = {{16{p02[15]}}, p02}; - e03 = {{16{p03[15]}}, p03}; - e10 = {{16{p10[15]}}, p10}; - e11 = {{16{p11[15]}}, p11}; - e12 = {{16{p12[15]}}, p12}; - e13 = {{16{p13[15]}}, p13}; - e20 = {{16{p20[15]}}, p20}; - e21 = {{16{p21[15]}}, p21}; - e22 = {{16{p22[15]}}, p22}; - e23 = {{16{p23[15]}}, p23}; - e30 = {{16{p30[15]}}, p30}; - e31 = {{16{p31[15]}}, p31}; - e32 = {{16{p32[15]}}, p32}; - e33 = {{16{p33[15]}}, p33}; + s00 = {p00[15], p00} + {p01[15], p01}; + s01 = {p02[15], p02} + {p03[15], p03}; + s10 = {p10[15], p10} + {p11[15], p11}; + s11 = {p12[15], p12} + {p13[15], p13}; + s20 = {p20[15], p20} + {p21[15], p21}; + s21 = {p22[15], p22} + {p23[15], p23}; + s30 = {p30[15], p30} + {p31[15], p31}; + s31 = {p32[15], p32} + {p33[15], p33}; - y0 = e00 + e01 + e02 + e03; - y1 = e10 + e11 + e12 + e13; - y2 = e20 + e21 + e22 + e23; - y3 = e30 + e31 + e32 + e33; + d0 = {s00[16], s00} + {s01[16], s01}; + d1 = {s10[16], s10} + {s11[16], s11}; + d2 = {s20[16], s20} + {s21[16], s21}; + d3 = {s30[16], s30} + {s31[16], s31}; + + y0 = {{14{d0[17]}}, d0}; + y1 = {{14{d1[17]}}, d1}; + y2 = {{14{d2[17]}}, d2}; + y3 = {{14{d3[17]}}, d3}; end endmodule