2022-07-27 15:07:16 +08:00
|
|
|
`include "defines.svh"
|
|
|
|
|
|
|
|
module mul_signed(
|
|
|
|
input logic CLK,
|
|
|
|
input logic [31:0] A,
|
|
|
|
input logic [31:0] B,
|
|
|
|
output logic [63:0] P
|
|
|
|
);
|
|
|
|
|
2022-07-29 18:48:58 +08:00
|
|
|
logic [31:0] rA;
|
|
|
|
logic [31:0] rB;
|
2022-08-04 19:54:40 +08:00
|
|
|
logic [63:0] M[`MUL_PIPE_STAGES-2:0];
|
2022-07-27 15:07:16 +08:00
|
|
|
|
2022-07-29 18:48:58 +08:00
|
|
|
always_ff @(posedge CLK) begin
|
|
|
|
rA <= A;
|
|
|
|
rB <= B;
|
|
|
|
M[0] <= $signed(rA) * $signed(rB);
|
2022-08-04 19:54:40 +08:00
|
|
|
for (integer i = 0; i < `MUL_PIPE_STAGES-2; i = i + 1)
|
2022-07-29 18:48:58 +08:00
|
|
|
M[i+1] <= M[i];
|
|
|
|
end
|
|
|
|
|
2022-08-04 19:54:40 +08:00
|
|
|
assign P = M[`MUL_PIPE_STAGES-2];
|
2022-07-27 15:07:16 +08:00
|
|
|
|
|
|
|
endmodule
|