blob: f3645a5dfa1231c5eaa204ccb2c7cb49f321ae84 [file] [log] [blame]
module wallace (
Pp_index_DI,
Pp_sum_DO,
Pp_carry_DO,
MSB_cor_DO
);
parameter C_RM = 2;
parameter C_RM_NEAREST = 2'h0;
parameter C_RM_TRUNC = 2'h1;
parameter C_RM_PLUSINF = 2'h2;
parameter C_RM_MINUSINF = 2'h3;
parameter C_PC = 5;
parameter C_OP = 32;
parameter C_MANT = 23;
parameter C_EXP = 8;
parameter C_BIAS = 127;
parameter C_HALF_BIAS = 63;
parameter C_LEADONE_WIDTH = 7;
parameter C_MANT_PRENORM = C_MANT+1;
parameter C_EXP_ZERO = 8'h00;
parameter C_EXP_ONE = 8'h01;
parameter C_EXP_INF = 8'hff;
parameter C_MANT_ZERO = 23'h0;
parameter C_MANT_NAN = 23'h400000;
input wire [(((2 * C_MANT) + 2) >= 0 ? (13 * ((2 * C_MANT) + 3)) - 1 : (13 * (1 - ((2 * C_MANT) + 2))) + ((2 * C_MANT) + 1)):(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2)] Pp_index_DI;
output wire [(2 * C_MANT) + 2:0] Pp_sum_DO;
output wire [(2 * C_MANT) + 2:0] Pp_carry_DO;
output wire MSB_cor_DO;
wire [(2 * C_MANT) + 2:0] CSA_u0_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u0_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u1_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u1_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u2_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u2_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u3_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u3_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u4_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u4_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u5_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u5_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u6_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u6_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u7_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u7_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u8_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u8_Carry_DI;
wire [(2 * C_MANT) + 2:0] CSA_u9_Sum_DI;
wire [(2 * C_MANT) + 2:0] CSA_u9_Carry_DI;
CSA #((2 * C_MANT) + 3) CSA_U0(
.A_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2)+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.B_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.C_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (2 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.Sum_DO(CSA_u0_Sum_DI),
.Carry_DO(CSA_u0_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U1(
.A_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (3 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.B_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (4 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.C_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (5 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.Sum_DO(CSA_u1_Sum_DI),
.Carry_DO(CSA_u1_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U2(
.A_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (6 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.B_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (7 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.C_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (8 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.Sum_DO(CSA_u2_Sum_DI),
.Carry_DO(CSA_u2_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U3(
.A_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (9 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.B_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (10 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.C_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (11 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.Sum_DO(CSA_u3_Sum_DI),
.Carry_DO(CSA_u3_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U4(
.A_DI(CSA_u0_Sum_DI),
.B_DI({CSA_u0_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u1_Sum_DI),
.Sum_DO(CSA_u4_Sum_DI),
.Carry_DO(CSA_u4_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U5(
.A_DI({CSA_u1_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.B_DI({CSA_u2_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u2_Sum_DI),
.Sum_DO(CSA_u5_Sum_DI),
.Carry_DO(CSA_u5_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U6(
.A_DI(CSA_u3_Sum_DI),
.B_DI({CSA_u3_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u4_Sum_DI),
.Sum_DO(CSA_u6_Sum_DI),
.Carry_DO(CSA_u6_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U7(
.A_DI({CSA_u4_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.B_DI({CSA_u5_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u5_Sum_DI),
.Sum_DO(CSA_u7_Sum_DI),
.Carry_DO(CSA_u7_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U8(
.A_DI(CSA_u6_Sum_DI),
.B_DI({CSA_u6_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u7_Sum_DI),
.Sum_DO(CSA_u8_Sum_DI),
.Carry_DO(CSA_u8_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U9(
.A_DI({CSA_u7_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.B_DI({CSA_u8_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(CSA_u8_Sum_DI),
.Sum_DO(CSA_u9_Sum_DI),
.Carry_DO(CSA_u9_Carry_DI)
);
CSA #((2 * C_MANT) + 3) CSA_U10(
.A_DI(CSA_u9_Sum_DI),
.B_DI({CSA_u9_Carry_DI[(2 * C_MANT) + 1:0], 1'b0}),
.C_DI(Pp_index_DI[(((2 * C_MANT) + 2) >= 0 ? 0 : (2 * C_MANT) + 2) + (12 * (((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2)))+:(((2 * C_MANT) + 2) >= 0 ? (2 * C_MANT) + 3 : 1 - ((2 * C_MANT) + 2))]),
.Sum_DO(Pp_sum_DO),
.Carry_DO(Pp_carry_DO)
);
assign MSB_cor_DO = (((((CSA_u9_Carry_DI[(2 * C_MANT) + 2] | CSA_u8_Carry_DI[(2 * C_MANT) + 2]) | CSA_u7_Carry_DI[(2 * C_MANT) + 2]) | CSA_u6_Carry_DI[(2 * C_MANT) + 2]) | CSA_u5_Carry_DI[(2 * C_MANT) + 2]) | CSA_u4_Carry_DI[(2 * C_MANT) + 2]) | CSA_u3_Carry_DI[(2 * C_MANT) + 2];
endmodule