ASIC: Reduce multiplier from 4 to 2 cycles

Our sky130 gate level multiply/adder now makes timing with a single
register stage.

Signed-off-by: Anton Blanchard <anton@linux.ibm.com>
caravel-mpw6-20220530
Anton Blanchard 3 years ago committed by Anton Blanchard
parent 907c833521
commit ace41e5153

@ -12,13 +12,11 @@ module multiply_add_64x64
input [BITS*2-1:0] c, input [BITS*2-1:0] c,
output [BITS*2-1:0] o output [BITS*2-1:0] o
); );
reg [BITS*2-1:0] o_tmp[2:0]; reg [BITS*2-1:0] o_tmp;


always @(posedge clk) begin always @(posedge clk) begin
o_tmp[2] = o_tmp[1]; o_tmp = (a * b) + c;
o_tmp[1] = o_tmp[0];
o_tmp[0] = (a * b) + c;
end end


assign o = o_tmp[2]; assign o = o_tmp;
endmodule endmodule

@ -5,10 +5,9 @@ use ieee.numeric_std.all;
library work; library work;
use work.common.all; use work.common.all;


-- XXX We should be able to make timing with a 2 cycle multiplier
entity multiply is entity multiply is
generic ( generic (
PIPELINE_DEPTH : natural := 4 PIPELINE_DEPTH : natural := 2
); );
port ( port (
clk : in std_logic; clk : in std_logic;

Loading…
Cancel
Save