You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1848 lines
47 KiB
Verilog

// © IBM Corp. 2020
// Licensed under the Apache License, Version 2.0 (the "License"), as modified by
// the terms below; you may not use the files in this repository except in
// compliance with the License as modified.
// You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
//
// Modified Terms:
//
// 1) For the purpose of the patent license granted to you in Section 3 of the
// License, the "Work" hereby includes implementations of the work of authorship
// in physical form.
//
// 2) Notwithstanding any terms to the contrary in the License, any licenses
// necessary for implementation of the Work that are available from OpenPOWER
// via the Power ISA End User License Agreement (EULA) are explicitly excluded
// hereunder, and may be obtained from OpenPOWER under the terms and conditions
// of the EULA.
//
// Unless required by applicable law or agreed to in writing, the reference design
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
// for the specific language governing permissions and limitations under the License.
//
// Additional rights, including the ability to physically implement a softcore that
// is compliant with the required sections of the Power ISA Specification, are
// available at no cost under the terms of the OpenPOWER Power ISA EULA, which can be
// obtained (along with the Power ISA) here: https://openpowerfoundation.org.
`timescale 1 ns / 1 ns
`include "tri_a2o.vh"
module tri_fu_tblmul(
vdd,
gnd,
x,
y,
z,
tbl_sum,
tbl_car
);
inout vdd;
inout gnd;
input [1:15] x; // rng from lookup (recode)
input [7:22] y; // b operand bits (shift)
input [0:20] z; // estimate from table
// multiplier output msb comes out at [6]
output [0:36] tbl_sum;
output [0:35] tbl_car;
// ENTITY
parameter tiup = 1'b1;
parameter tidn = 1'b0;
wire [1:7] sub_adj_lsb;
wire [1:7] sub_adj_lsb_b;
wire [1:7] sub_adj_msb_b;
wire sub_adj_msb_7x_b;
wire sub_adj_msb_7x;
wire sub_adj_msb_7y;
wire [0:7] s_x;
wire [0:7] s_x2;
wire [0:7] s_neg;
wire [6:24] pp0_0;
wire [6:26] pp0_1;
wire [8:28] pp0_2;
wire [10:30] pp0_3;
wire [12:32] pp0_4;
wire [14:34] pp0_5;
wire [16:36] pp0_6;
wire [17:36] pp0_7;
wire [0:26] pp1_0_sum;
wire [0:24] pp1_0_car;
wire [8:32] pp1_1_sum;
wire [9:30] pp1_1_car;
wire [14:36] pp1_2_sum;
wire [15:36] pp1_2_car;
wire pp1_0_car_unused;
wire [0:32] pp2_0_sum;
wire [0:26] pp2_0_car;
wire [9:36] pp2_1_sum;
wire [13:36] pp2_1_car;
wire pp2_0_car_unused;
wire [0:36] pp3_0_sum;
wire [8:25] pp3_0_ko;
wire [0:35] pp3_0_car;
wire pp3_0_car_unused;
wire [0:20] z_b;
(* analysis_not_referenced="TRUE" *)
wire unused;
assign unused = pp1_0_car_unused | pp2_0_car_unused | pp3_0_car_unused | pp0_0[23] | pp0_1[25] | pp0_2[27] | pp0_3[29] | pp0_4[31] | pp0_5[33] | pp0_6[35] | pp1_0_car[23] | pp1_0_sum[25] | pp1_1_car[28] | pp1_1_sum[31] | pp1_2_car[34] | pp2_0_car[24] | pp2_0_sum[31] | pp2_1_car[30] | pp2_1_car[34] | s_neg[0] | pp1_1_car[29] | pp1_2_car[35] | pp2_0_car[25] | pp2_1_car[35];
//=#################################################
//= Booth Decoders
//=#################################################
// 0 1 2 3 4 5 6 7
// (x,1) (2,3) (4,5) (6,7) (8,9) (10,11) (12,13) (14,15)
tri_fu_tblmul_bthdcd bd0(
.i0(tidn), //i--
.i1(x[1]), //i--
.i2(x[2]), //i--
.s_neg(s_neg[0]), //o--
.s_x(s_x[0]), //o--
.s_x2(s_x2[0]) //o--
);
tri_fu_tblmul_bthdcd bd1(
.i0(x[2]), //i--
.i1(x[3]), //i--
.i2(x[4]), //i--
.s_neg(s_neg[1]), //o--
.s_x(s_x[1]), //o--
.s_x2(s_x2[1]) //o--
);
tri_fu_tblmul_bthdcd bd2(
.i0(x[4]), //i--
.i1(x[5]), //i--
.i2(x[6]), //i--
.s_neg(s_neg[2]), //o--
.s_x(s_x[2]), //o--
.s_x2(s_x2[2]) //o--
);
tri_fu_tblmul_bthdcd bd3(
.i0(x[6]), //i--
.i1(x[7]), //i--
.i2(x[8]), //i--
.s_neg(s_neg[3]), //o--
.s_x(s_x[3]), //o--
.s_x2(s_x2[3]) //o--
);
tri_fu_tblmul_bthdcd bd4(
.i0(x[8]), //i--
.i1(x[9]), //i--
.i2(x[10]), //i--
.s_neg(s_neg[4]), //o--
.s_x(s_x[4]), //o--
.s_x2(s_x2[4]) //o--
);
tri_fu_tblmul_bthdcd bd5(
.i0(x[10]), //i--
.i1(x[11]), //i--
.i2(x[12]), //i--
.s_neg(s_neg[5]), //o--
.s_x(s_x[5]), //o--
.s_x2(s_x2[5]) //o--
);
tri_fu_tblmul_bthdcd bd6(
.i0(x[12]), //i--
.i1(x[13]), //i--
.i2(x[14]), //i--
.s_neg(s_neg[6]), //o--
.s_x(s_x[6]), //o--
.s_x2(s_x2[6]) //o--
);
tri_fu_tblmul_bthdcd bd7(
.i0(x[14]), //i--
.i1(x[15]), //i--
.i2(tidn), //i--
.s_neg(s_neg[7]), //o--
.s_x(s_x[7]), //o--
.s_x2(s_x2[7]) //o--
);
//=###############################################################
//= booth muxes
//=###############################################################
//= NUMBERING SYSTEM RELATIVE TO COMPRESSOR TREE
//=
//= 00000000000000000000000000000000000000
//= 00000000001111111111222222222233333333
//= 01234567890123456789012345678901234567
//= 0 .......DddddddddddddddddD0s................
//= 1 .......1aDddddddddddddddddD0s..............
//= 2 .........1aDddddddddddddddddD0s............
//= 3 ...........1aDddddddddddddddddD0s..........
//= 4 .............1aDddddddddddddddddD0s........
//= 5 ...............1aDddddddddddddddddD0s......
//= 6 .................1aDddddddddddddddddD0s....
//= 7 ..................assDddddddddddddddddD....
//= EST dddddddddddddddddddd (the ass from sgnXtd.7 is already added into the est.
//=
//=############################
//= want (est - mult )
//= will calc -(r - e) = -(r + !e + 1)
//= = -(r + !e) -1
//= = !(r + !e) + 1 - 1
//= = !(r + !e)
//= = !(R + ASS + !e) ... seperate out the overlapping SGNxtd piece
//= = !(R + (ASS + !e)) .... invert the final adder output
//=
//= table estimate will be : ADD !e + 100
//= SUB !e + 011
//=
//= more "0" in table if read out POS version of est, then invert
//=
//= !e + adj = -e -1 + adj
//= = -(e +1 -adj)
//= = -(e -adj) -1
//= = !(e -adj) +1 -1
//= = !(e -adj) ... invert the table input
assign sub_adj_lsb_b[1] = (~(s_neg[1] & (s_x[1] | s_x2[1])));
assign sub_adj_lsb_b[2] = (~(s_neg[2] & (s_x[2] | s_x2[2])));
assign sub_adj_lsb_b[3] = (~(s_neg[3] & (s_x[3] | s_x2[3])));
assign sub_adj_lsb_b[4] = (~(s_neg[4] & (s_x[4] | s_x2[4])));
assign sub_adj_lsb_b[5] = (~(s_neg[5] & (s_x[5] | s_x2[5])));
assign sub_adj_lsb_b[6] = (~(s_neg[6] & (s_x[6] | s_x2[6])));
assign sub_adj_lsb_b[7] = (~(s_neg[7] & (s_x[7] | s_x2[7])));
assign sub_adj_lsb[1] = (~sub_adj_lsb_b[1]);
assign sub_adj_lsb[2] = (~sub_adj_lsb_b[2]);
assign sub_adj_lsb[3] = (~sub_adj_lsb_b[3]);
assign sub_adj_lsb[4] = (~sub_adj_lsb_b[4]);
assign sub_adj_lsb[5] = (~sub_adj_lsb_b[5]);
assign sub_adj_lsb[6] = (~sub_adj_lsb_b[6]);
assign sub_adj_lsb[7] = (~sub_adj_lsb_b[7]);
assign sub_adj_msb_b[1] = (~(s_neg[1] & (s_x[1] | s_x2[1])));
assign sub_adj_msb_b[2] = (~(s_neg[2] & (s_x[2] | s_x2[2])));
assign sub_adj_msb_b[3] = (~(s_neg[3] & (s_x[3] | s_x2[3])));
assign sub_adj_msb_b[4] = (~(s_neg[4] & (s_x[4] | s_x2[4])));
assign sub_adj_msb_b[5] = (~(s_neg[5] & (s_x[5] | s_x2[5])));
assign sub_adj_msb_b[6] = (~(s_neg[6] & (s_x[6] | s_x2[6])));
assign sub_adj_msb_b[7] = (~(s_neg[7] & (s_x[7] | s_x2[7])));
assign sub_adj_msb_7x_b = (~(s_neg[7] & (s_x[7] | s_x2[7])));
assign sub_adj_msb_7x = (~sub_adj_msb_7x_b);
assign sub_adj_msb_7y = (~sub_adj_msb_7x_b);
tri_fu_tblmul_bthrow bm0(
.s_neg(tidn), //i-- (tidn) msb term is never sub
.s_x(s_x[0]), //i--
.s_x2(s_x2[0]), //i--
.x(y[7:22]), //i--
.q(pp0_0[6:22]) //o--
);
assign pp0_0[23] = tidn;
assign pp0_0[24] = sub_adj_lsb[1];
assign pp0_1[6] = tiup;
assign pp0_1[7] = sub_adj_msb_b[1];
tri_fu_tblmul_bthrow bm1(
.s_neg(s_neg[1]), //i--
.s_x(s_x[1]), //i--
.s_x2(s_x2[1]), //i--
.x(y[7:22]), //i--
.q(pp0_1[8:24]) //o--
);
assign pp0_1[25] = tidn;
assign pp0_1[26] = sub_adj_lsb[2];
assign pp0_2[8] = tiup;
assign pp0_2[9] = sub_adj_msb_b[2];
tri_fu_tblmul_bthrow bm2(
.s_neg(s_neg[2]), //i--
.s_x(s_x[2]), //i--
.s_x2(s_x2[2]), //i--
.x(y[7:22]), //i--
.q(pp0_2[10:26]) //o--
);
assign pp0_2[27] = tidn;
assign pp0_2[28] = sub_adj_lsb[3];
assign pp0_3[10] = tiup;
assign pp0_3[11] = sub_adj_msb_b[3];
tri_fu_tblmul_bthrow bm3(
.s_neg(s_neg[3]), //i--
.s_x(s_x[3]), //i--
.s_x2(s_x2[3]), //i--
.x(y[7:22]), //i--
.q(pp0_3[12:28]) //o--
);
assign pp0_3[29] = tidn;
assign pp0_3[30] = sub_adj_lsb[4];
assign pp0_4[12] = tiup;
assign pp0_4[13] = sub_adj_msb_b[4];
tri_fu_tblmul_bthrow bm4(
.s_neg(s_neg[4]), //i--
.s_x(s_x[4]), //i--
.s_x2(s_x2[4]), //i--
.x(y[7:22]), //i--
.q(pp0_4[14:30]) //o--
);
assign pp0_4[31] = tidn;
assign pp0_4[32] = sub_adj_lsb[5];
assign pp0_5[14] = tiup;
assign pp0_5[15] = sub_adj_msb_b[5];
tri_fu_tblmul_bthrow bm5(
.s_neg(s_neg[5]), //i--
.s_x(s_x[5]), //i--
.s_x2(s_x2[5]), //i--
.x(y[7:22]), //i--
.q(pp0_5[16:32]) //o--
);
assign pp0_5[33] = tidn;
assign pp0_5[34] = sub_adj_lsb[6];
assign pp0_6[16] = tiup;
assign pp0_6[17] = sub_adj_msb_b[6];
tri_fu_tblmul_bthrow bm6(
.s_neg(s_neg[6]), //i--
.s_x(s_x[6]), //i--
.s_x2(s_x2[6]), //i--
.x(y[7:22]), //i--
.q(pp0_6[18:34]) //o--
);
assign pp0_6[35] = tidn;
assign pp0_6[36] = sub_adj_lsb[7];
assign pp0_7[17] = sub_adj_msb_b[7];
assign pp0_7[18] = sub_adj_msb_7x;
assign pp0_7[19] = sub_adj_msb_7y;
tri_fu_tblmul_bthrow bm7(
.s_neg(s_neg[7]), //i--
.s_x(s_x[7]), //i--
.s_x2(s_x2[7]), //i--
.x(y[7:22]), //i--
.q(pp0_7[20:36]) //o--
);
//=####################################################################
//=# compressor tree level 1
//=####################################################################
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// ddddddddddddddddddddd________________
// 111111ddddddddddddddddd_S____________ bm0
// ______1addddddddddddddddd_S__________ bm1
// ________1addddddddddddddddd_S________ bm2
// __________1addddddddddddddddd_S______ bm3
// ____________1addddddddddddddddd_S____ bm4
// ______________1addddddddddddddddd_S__ bm5
// ________________1addddddddddddddddd_S bm6
// _________________assddddddddddddddddd bm7
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// ddddddddddddddddddddd________________
// 111111ddddddddddddddddd_S____________ bm0
// ______1addddddddddddddddd_S__________ bm1
// 111111333333333333333221201
// sssssssssssssssssssssssss_s pp1_0_sum
// ccccccccccccccccccccccc_c__ pp1_0_car
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// ________1addddddddddddddddd_S________ bm2
// __________1addddddddddddddddd_S______ bm3
// ____________1addddddddddddddddd_S____ bm4
// 1122333333333333333231201
// ________sssssssssssssssssssssss_s pp1_1_sum
// _ccccccccccccccccccc__c__ pp1_1_car
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// ______________1addddddddddddddddd_S__ bm5
// ________________1addddddddddddddddd_S bm6
// _________________assddddddddddddddddd bm7
// 11233333333333333332312
// sssssssssssssssssssssss pp1_2_sum
// _ccccccccccccccccccc__c pp1_2_car
assign z_b[0:20] = (~z[0:20]);
//======================================================
//== compressor level 1 , row 0
//======================================================
assign pp1_0_sum[26] = pp0_1[26];
assign pp1_0_sum[25] = tidn;
assign pp1_0_sum[24] = pp0_0[24];
assign pp1_0_car[24] = pp0_1[24];
assign pp1_0_sum[23] = pp0_1[23];
assign pp1_0_car[23] = tidn;
assign pp1_0_sum[22] = pp0_0[22];
assign pp1_0_car[22] = pp0_1[22];
assign pp1_0_sum[21] = pp0_0[21];
assign pp1_0_car[21] = pp0_1[21];
assign pp1_0_car[20] = tidn;
// MLT32_X1_A12TH
tri_csa32 pp1_0_csa_20(
.vd(vdd),
.gd(gnd),
.a(z_b[20]), //i--
.b(pp0_0[20]), //i--
.c(pp0_1[20]), //i--
.sum(pp1_0_sum[20]), //o--
.car(pp1_0_car[19]) //o--
);
tri_csa32 pp1_0_csa_19(
.vd(vdd),
.gd(gnd),
.a(z_b[19]), //i--
.b(pp0_0[19]), //i--
.c(pp0_1[19]), //i--
.sum(pp1_0_sum[19]), //o--
.car(pp1_0_car[18]) //o--
);
tri_csa32 pp1_0_csa_18(
.vd(vdd),
.gd(gnd),
.a(z_b[18]), //i--
.b(pp0_0[18]), //i--
.c(pp0_1[18]), //i--
.sum(pp1_0_sum[18]), //o--
.car(pp1_0_car[17]) //o--
);
tri_csa32 pp1_0_csa_17(
.vd(vdd),
.gd(gnd),
.a(z_b[17]), //i--
.b(pp0_0[17]), //i--
.c(pp0_1[17]), //i--
.sum(pp1_0_sum[17]), //o--
.car(pp1_0_car[16]) //o--
);
tri_csa32 pp1_0_csa_16(
.vd(vdd),
.gd(gnd),
.a(z_b[16]), //i--
.b(pp0_0[16]), //i--
.c(pp0_1[16]), //i--
.sum(pp1_0_sum[16]), //o--
.car(pp1_0_car[15]) //o--
);
tri_csa32 pp1_0_csa_15(
.vd(vdd),
.gd(gnd),
.a(z_b[15]), //i--
.b(pp0_0[15]), //i--
.c(pp0_1[15]), //i--
.sum(pp1_0_sum[15]), //o--
.car(pp1_0_car[14]) //o--
);
tri_csa32 pp1_0_csa_14(
.vd(vdd),
.gd(gnd),
.a(z_b[14]), //i--
.b(pp0_0[14]), //i--
.c(pp0_1[14]), //i--
.sum(pp1_0_sum[14]), //o--
.car(pp1_0_car[13]) //o--
);
tri_csa32 pp1_0_csa_13(
.vd(vdd),
.gd(gnd),
.a(z_b[13]), //i--
.b(pp0_0[13]), //i--
.c(pp0_1[13]), //i--
.sum(pp1_0_sum[13]), //o--
.car(pp1_0_car[12]) //o--
);
tri_csa32 pp1_0_csa_12(
.vd(vdd),
.gd(gnd),
.a(z_b[12]), //i--
.b(pp0_0[12]), //i--
.c(pp0_1[12]), //i--
.sum(pp1_0_sum[12]), //o--
.car(pp1_0_car[11]) //o--
);
tri_csa32 pp1_0_csa_11(
.vd(vdd),
.gd(gnd),
.a(z_b[11]), //i--
.b(pp0_0[11]), //i--
.c(pp0_1[11]), //i--
.sum(pp1_0_sum[11]), //o--
.car(pp1_0_car[10]) //o--
);
tri_csa32 pp1_0_csa_10(
.vd(vdd),
.gd(gnd),
.a(z_b[10]), //i--
.b(pp0_0[10]), //i--
.c(pp0_1[10]), //i--
.sum(pp1_0_sum[10]), //o--
.car(pp1_0_car[9]) //o--
);
tri_csa32 pp1_0_csa_9(
.vd(vdd),
.gd(gnd),
.a(z_b[9]), //i--
.b(pp0_0[9]), //i--
.c(pp0_1[9]), //i--
.sum(pp1_0_sum[9]), //o--
.car(pp1_0_car[8]) //o--
);
tri_csa32 pp1_0_csa_8(
.vd(vdd),
.gd(gnd),
.a(z_b[8]), //i--
.b(pp0_0[8]), //i--
.c(pp0_1[8]), //i--
.sum(pp1_0_sum[8]), //o--
.car(pp1_0_car[7]) //o--
);
tri_csa32 pp1_0_csa_7(
.vd(vdd),
.gd(gnd),
.a(z_b[7]), //i--
.b(pp0_0[7]), //i--
.c(pp0_1[7]), //i--
.sum(pp1_0_sum[7]), //o--
.car(pp1_0_car[6]) //o--
);
tri_csa32 pp1_0_csa_6(
.vd(vdd),
.gd(gnd),
.a(z_b[6]), //i--
.b(pp0_0[6]), //i--
.c(pp0_1[6]), //i--
.sum(pp1_0_sum[6]), //o--
.car(pp1_0_car[5]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_5(
.a(z_b[5]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[5]), //o--
.car(pp1_0_car[4]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_4(
.a(z_b[4]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[4]), //o--
.car(pp1_0_car[3]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_3(
.a(z_b[3]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[3]), //o--
.car(pp1_0_car[2]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_2(
.a(z_b[2]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[2]), //o--
.car(pp1_0_car[1]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_1(
.a(z_b[1]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[1]), //o--
.car(pp1_0_car[0]) //o--
);
tri_fu_csa22_h2 pp1_0_csa_0(
.a(z_b[0]), //i--
.b(tiup), //i--
.sum(pp1_0_sum[0]), //o--
.car(pp1_0_car_unused) //o--
);
//======================================================
//== compressor level 1 , row 1
//======================================================
assign pp1_1_sum[32] = pp0_4[32];
assign pp1_1_sum[31] = tidn;
assign pp1_1_sum[30] = pp0_3[30];
assign pp1_1_car[30] = pp0_4[30];
assign pp1_1_sum[29] = pp0_4[29];
assign pp1_1_car[29] = tidn;
assign pp1_1_car[28] = tidn;
tri_csa32 pp1_1_csa_28(
.vd(vdd),
.gd(gnd),
.a(pp0_2[28]), //i--
.b(pp0_3[28]), //i--
.c(pp0_4[28]), //i--
.sum(pp1_1_sum[28]), //o--
.car(pp1_1_car[27]) //o--
);
tri_fu_csa22_h2 pp1_1_csa_27(
.a(pp0_3[27]), //i--
.b(pp0_4[27]), //i--
.sum(pp1_1_sum[27]), //o--
.car(pp1_1_car[26]) //o--
);
tri_csa32 pp1_1_csa_26(
.vd(vdd),
.gd(gnd),
.a(pp0_2[26]), //i--
.b(pp0_3[26]), //i--
.c(pp0_4[26]), //i--
.sum(pp1_1_sum[26]), //o--
.car(pp1_1_car[25]) //o--
);
tri_csa32 pp1_1_csa_25(
.vd(vdd),
.gd(gnd),
.a(pp0_2[25]), //i--
.b(pp0_3[25]), //i--
.c(pp0_4[25]), //i--
.sum(pp1_1_sum[25]), //o--
.car(pp1_1_car[24]) //o--
);
tri_csa32 pp1_1_csa_24(
.vd(vdd),
.gd(gnd),
.a(pp0_2[24]), //i--
.b(pp0_3[24]), //i--
.c(pp0_4[24]), //i--
.sum(pp1_1_sum[24]), //o--
.car(pp1_1_car[23]) //o--
);
tri_csa32 pp1_1_csa_23(
.vd(vdd),
.gd(gnd),
.a(pp0_2[23]), //i--
.b(pp0_3[23]), //i--
.c(pp0_4[23]), //i--
.sum(pp1_1_sum[23]), //o--
.car(pp1_1_car[22]) //o--
);
tri_csa32 pp1_1_csa_22(
.vd(vdd),
.gd(gnd),
.a(pp0_2[22]), //i--
.b(pp0_3[22]), //i--
.c(pp0_4[22]), //i--
.sum(pp1_1_sum[22]), //o--
.car(pp1_1_car[21]) //o--
);
tri_csa32 pp1_1_csa_21(
.vd(vdd),
.gd(gnd),
.a(pp0_2[21]), //i--
.b(pp0_3[21]), //i--
.c(pp0_4[21]), //i--
.sum(pp1_1_sum[21]), //o--
.car(pp1_1_car[20]) //o--
);
tri_csa32 pp1_1_csa_20(
.vd(vdd),
.gd(gnd),
.a(pp0_2[20]), //i--
.b(pp0_3[20]), //i--
.c(pp0_4[20]), //i--
.sum(pp1_1_sum[20]), //o--
.car(pp1_1_car[19]) //o--
);
tri_csa32 pp1_1_csa_19(
.vd(vdd),
.gd(gnd),
.a(pp0_2[19]), //i--
.b(pp0_3[19]), //i--
.c(pp0_4[19]), //i--
.sum(pp1_1_sum[19]), //o--
.car(pp1_1_car[18]) //o--
);
tri_csa32 pp1_1_csa_18(
.vd(vdd),
.gd(gnd),
.a(pp0_2[18]), //i--
.b(pp0_3[18]), //i--
.c(pp0_4[18]), //i--
.sum(pp1_1_sum[18]), //o--
.car(pp1_1_car[17]) //o--
);
tri_csa32 pp1_1_csa_17(
.vd(vdd),
.gd(gnd),
.a(pp0_2[17]), //i--
.b(pp0_3[17]), //i--
.c(pp0_4[17]), //i--
.sum(pp1_1_sum[17]), //o--
.car(pp1_1_car[16]) //o--
);
tri_csa32 pp1_1_csa_16(
.vd(vdd),
.gd(gnd),
.a(pp0_2[16]), //i--
.b(pp0_3[16]), //i--
.c(pp0_4[16]), //i--
.sum(pp1_1_sum[16]), //o--
.car(pp1_1_car[15]) //o--
);
tri_csa32 pp1_1_csa_15(
.vd(vdd),
.gd(gnd),
.a(pp0_2[15]), //i--
.b(pp0_3[15]), //i--
.c(pp0_4[15]), //i--
.sum(pp1_1_sum[15]), //o--
.car(pp1_1_car[14]) //o--
);
tri_csa32 pp1_1_csa_14(
.vd(vdd),
.gd(gnd),
.a(pp0_2[14]), //i--
.b(pp0_3[14]), //i--
.c(pp0_4[14]), //i--
.sum(pp1_1_sum[14]), //o--
.car(pp1_1_car[13]) //o--
);
tri_csa32 pp1_1_csa_13(
.vd(vdd),
.gd(gnd),
.a(pp0_2[13]), //i--
.b(pp0_3[13]), //i--
.c(pp0_4[13]), //i--
.sum(pp1_1_sum[13]), //o--
.car(pp1_1_car[12]) //o--
);
tri_csa32 pp1_1_csa_12(
.vd(vdd),
.gd(gnd),
.a(pp0_2[12]), //i--
.b(pp0_3[12]), //i--
.c(pp0_4[12]), //i--
.sum(pp1_1_sum[12]), //o--
.car(pp1_1_car[11]) //o--
);
tri_fu_csa22_h2 pp1_1_csa_11(
.a(pp0_2[11]), //i--
.b(pp0_3[11]), //i--
.sum(pp1_1_sum[11]), //o--
.car(pp1_1_car[10]) //o--
);
tri_fu_csa22_h2 pp1_1_csa_10(
.a(pp0_2[10]), //i--
.b(pp0_3[10]), //i--
.sum(pp1_1_sum[10]), //o--
.car(pp1_1_car[9]) //o--
);
assign pp1_1_sum[9] = pp0_2[9];
assign pp1_1_sum[8] = pp0_2[8];
//======================================================
//== compressor level 1 , row 2
//======================================================
assign pp1_2_sum[36] = pp0_6[36];
assign pp1_2_car[36] = pp0_7[36];
assign pp1_2_sum[35] = pp0_7[35];
assign pp1_2_car[35] = tidn;
assign pp1_2_car[34] = tidn;
tri_csa32 pp1_2_csa_34(
.vd(vdd),
.gd(gnd),
.a(pp0_5[34]), //i--
.b(pp0_6[34]), //i--
.c(pp0_7[34]), //i--
.sum(pp1_2_sum[34]), //o--
.car(pp1_2_car[33]) //o--
);
tri_fu_csa22_h2 pp1_2_csa_33(
.a(pp0_6[33]), //i--
.b(pp0_7[33]), //i--
.sum(pp1_2_sum[33]), //o--
.car(pp1_2_car[32]) //o--
);
tri_csa32 pp1_2_csa_32(
.vd(vdd),
.gd(gnd),
.a(pp0_5[32]), //i--
.b(pp0_6[32]), //i--
.c(pp0_7[32]), //i--
.sum(pp1_2_sum[32]), //o--
.car(pp1_2_car[31]) //o--
);
tri_csa32 pp1_2_csa_31(
.vd(vdd),
.gd(gnd),
.a(pp0_5[31]), //i--
.b(pp0_6[31]), //i--
.c(pp0_7[31]), //i--
.sum(pp1_2_sum[31]), //o--
.car(pp1_2_car[30]) //o--
);
tri_csa32 pp1_2_csa_30(
.vd(vdd),
.gd(gnd),
.a(pp0_5[30]), //i--
.b(pp0_6[30]), //i--
.c(pp0_7[30]), //i--
.sum(pp1_2_sum[30]), //o--
.car(pp1_2_car[29]) //o--
);
tri_csa32 pp1_2_csa_29(
.vd(vdd),
.gd(gnd),
.a(pp0_5[29]), //i--
.b(pp0_6[29]), //i--
.c(pp0_7[29]), //i--
.sum(pp1_2_sum[29]), //o--
.car(pp1_2_car[28]) //o--
);
tri_csa32 pp1_2_csa_28(
.vd(vdd),
.gd(gnd),
.a(pp0_5[28]), //i--
.b(pp0_6[28]), //i--
.c(pp0_7[28]), //i--
.sum(pp1_2_sum[28]), //o--
.car(pp1_2_car[27]) //o--
);
tri_csa32 pp1_2_csa_27(
.vd(vdd),
.gd(gnd),
.a(pp0_5[27]), //i--
.b(pp0_6[27]), //i--
.c(pp0_7[27]), //i--
.sum(pp1_2_sum[27]), //o--
.car(pp1_2_car[26]) //o--
);
tri_csa32 pp1_2_csa_26(
.vd(vdd),
.gd(gnd),
.a(pp0_5[26]), //i--
.b(pp0_6[26]), //i--
.c(pp0_7[26]), //i--
.sum(pp1_2_sum[26]), //o--
.car(pp1_2_car[25]) //o--
);
tri_csa32 pp1_2_csa_25(
.vd(vdd),
.gd(gnd),
.a(pp0_5[25]), //i--
.b(pp0_6[25]), //i--
.c(pp0_7[25]), //i--
.sum(pp1_2_sum[25]), //o--
.car(pp1_2_car[24]) //o--
);
tri_csa32 pp1_2_csa_24(
.vd(vdd),
.gd(gnd),
.a(pp0_5[24]), //i--
.b(pp0_6[24]), //i--
.c(pp0_7[24]), //i--
.sum(pp1_2_sum[24]), //o--
.car(pp1_2_car[23]) //o--
);
tri_csa32 pp1_2_csa_23(
.vd(vdd),
.gd(gnd),
.a(pp0_5[23]), //i--
.b(pp0_6[23]), //i--
.c(pp0_7[23]), //i--
.sum(pp1_2_sum[23]), //o--
.car(pp1_2_car[22]) //o--
);
tri_csa32 pp1_2_csa_22(
.vd(vdd),
.gd(gnd),
.a(pp0_5[22]), //i--
.b(pp0_6[22]), //i--
.c(pp0_7[22]), //i--
.sum(pp1_2_sum[22]), //o--
.car(pp1_2_car[21]) //o--
);
tri_csa32 pp1_2_csa_21(
.vd(vdd),
.gd(gnd),
.a(pp0_5[21]), //i--
.b(pp0_6[21]), //i--
.c(pp0_7[21]), //i--
.sum(pp1_2_sum[21]), //o--
.car(pp1_2_car[20]) //o--
);
tri_csa32 pp1_2_csa_20(
.vd(vdd),
.gd(gnd),
.a(pp0_5[20]), //i--
.b(pp0_6[20]), //i--
.c(pp0_7[20]), //i--
.sum(pp1_2_sum[20]), //o--
.car(pp1_2_car[19]) //o--
);
tri_csa32 pp1_2_csa_19(
.vd(vdd),
.gd(gnd),
.a(pp0_5[19]), //i--
.b(pp0_6[19]), //i--
.c(pp0_7[19]), //i--
.sum(pp1_2_sum[19]), //o--
.car(pp1_2_car[18]) //o--
);
tri_csa32 pp1_2_csa_18(
.vd(vdd),
.gd(gnd),
.a(pp0_5[18]), //i--
.b(pp0_6[18]), //i--
.c(pp0_7[18]), //i--
.sum(pp1_2_sum[18]), //o--
.car(pp1_2_car[17]) //o--
);
tri_csa32 pp1_2_csa_17(
.vd(vdd),
.gd(gnd),
.a(pp0_5[17]), //i--
.b(pp0_6[17]), //i--
.c(pp0_7[17]), //i--
.sum(pp1_2_sum[17]), //o--
.car(pp1_2_car[16]) //o--
);
tri_fu_csa22_h2 pp1_2_csa_16(
.a(pp0_5[16]), //i--
.b(pp0_6[16]), //i--
.sum(pp1_2_sum[16]), //o--
.car(pp1_2_car[15]) //o--
);
assign pp1_2_sum[15] = pp0_5[15];
assign pp1_2_sum[14] = pp0_5[14];
//=####################################################################
//=# compressor tree level 2
//=####################################################################
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// sssssssssssssssssssssssss_s______ pp1_0_sum
// ccccccccccccccccccccccc_c________ pp1_0_car
// ________sssssssssssssssssssssss_s pp1_1_sum
// 222222223333333333333332312111101
// sssssssssssssssssssssssssssssss_s pp2_0_sum
// cccccccccccccccccccccccc__c pp2_0_car
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// _________ccccccccccccccccccc__c______ pp1_1_car
// ______________sssssssssssssssssssssss pp1_2_sum
// _______________ccccccccccccccccccc__c pp1_2_car
// 1111123333333333333223222112
// ssssssssssssssssssssssssssss pp2_1_sum
// ccccccccccccccccc_ccc__c pp2_1_car
//======================================================
//== compressor level 2 , row 0
//======================================================
assign pp2_0_sum[32] = pp1_1_sum[32];
assign pp2_0_sum[31] = tidn;
assign pp2_0_sum[30] = pp1_1_sum[30];
assign pp2_0_sum[29] = pp1_1_sum[29];
assign pp2_0_sum[28] = pp1_1_sum[28];
assign pp2_0_sum[27] = pp1_1_sum[27];
assign pp2_0_sum[26] = pp1_0_sum[26];
assign pp2_0_car[26] = pp1_1_sum[26];
assign pp2_0_sum[25] = pp1_1_sum[25];
assign pp2_0_car[25] = tidn;
assign pp2_0_car[24] = tidn;
tri_csa32 pp2_0_csa_24(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[24]), //i--
.b(pp1_0_car[24]), //i--
.c(pp1_1_sum[24]), //i--
.sum(pp2_0_sum[24]), //o--
.car(pp2_0_car[23]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_23(
.a(pp1_0_sum[23]), //i--
.b(pp1_1_sum[23]), //i--
.sum(pp2_0_sum[23]), //o--
.car(pp2_0_car[22]) //o--
);
tri_csa32 pp2_0_csa_22(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[22]), //i--
.b(pp1_0_car[22]), //i--
.c(pp1_1_sum[22]), //i--
.sum(pp2_0_sum[22]), //o--
.car(pp2_0_car[21]) //o--
);
tri_csa32 pp2_0_csa_21(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[21]), //i--
.b(pp1_0_car[21]), //i--
.c(pp1_1_sum[21]), //i--
.sum(pp2_0_sum[21]), //o--
.car(pp2_0_car[20]) //o--
);
tri_csa32 pp2_0_csa_20(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[20]), //i--
.b(pp1_0_car[20]), //i--
.c(pp1_1_sum[20]), //i--
.sum(pp2_0_sum[20]), //o--
.car(pp2_0_car[19]) //o--
);
tri_csa32 pp2_0_csa_19(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[19]), //i--
.b(pp1_0_car[19]), //i--
.c(pp1_1_sum[19]), //i--
.sum(pp2_0_sum[19]), //o--
.car(pp2_0_car[18]) //o--
);
tri_csa32 pp2_0_csa_18(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[18]), //i--
.b(pp1_0_car[18]), //i--
.c(pp1_1_sum[18]), //i--
.sum(pp2_0_sum[18]), //o--
.car(pp2_0_car[17]) //o--
);
tri_csa32 pp2_0_csa_17(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[17]), //i--
.b(pp1_0_car[17]), //i--
.c(pp1_1_sum[17]), //i--
.sum(pp2_0_sum[17]), //o--
.car(pp2_0_car[16]) //o--
);
tri_csa32 pp2_0_csa_16(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[16]), //i--
.b(pp1_0_car[16]), //i--
.c(pp1_1_sum[16]), //i--
.sum(pp2_0_sum[16]), //o--
.car(pp2_0_car[15]) //o--
);
tri_csa32 pp2_0_csa_15(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[15]), //i--
.b(pp1_0_car[15]), //i--
.c(pp1_1_sum[15]), //i--
.sum(pp2_0_sum[15]), //o--
.car(pp2_0_car[14]) //o--
);
tri_csa32 pp2_0_csa_14(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[14]), //i--
.b(pp1_0_car[14]), //i--
.c(pp1_1_sum[14]), //i--
.sum(pp2_0_sum[14]), //o--
.car(pp2_0_car[13]) //o--
);
tri_csa32 pp2_0_csa_13(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[13]), //i--
.b(pp1_0_car[13]), //i--
.c(pp1_1_sum[13]), //i--
.sum(pp2_0_sum[13]), //o--
.car(pp2_0_car[12]) //o--
);
tri_csa32 pp2_0_csa_12(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[12]), //i--
.b(pp1_0_car[12]), //i--
.c(pp1_1_sum[12]), //i--
.sum(pp2_0_sum[12]), //o--
.car(pp2_0_car[11]) //o--
);
tri_csa32 pp2_0_csa_11(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[11]), //i--
.b(pp1_0_car[11]), //i--
.c(pp1_1_sum[11]), //i--
.sum(pp2_0_sum[11]), //o--
.car(pp2_0_car[10]) //o--
);
tri_csa32 pp2_0_csa_10(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[10]), //i--
.b(pp1_0_car[10]), //i--
.c(pp1_1_sum[10]), //i--
.sum(pp2_0_sum[10]), //o--
.car(pp2_0_car[9]) //o--
);
tri_csa32 pp2_0_csa_9(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[9]), //i--
.b(pp1_0_car[9]), //i--
.c(pp1_1_sum[9]), //i--
.sum(pp2_0_sum[9]), //o--
.car(pp2_0_car[8]) //o--
);
tri_csa32 pp2_0_csa_8(
.vd(vdd),
.gd(gnd),
.a(pp1_0_sum[8]), //i--
.b(pp1_0_car[8]), //i--
.c(pp1_1_sum[8]), //i--
.sum(pp2_0_sum[8]), //o--
.car(pp2_0_car[7]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_7(
.a(pp1_0_sum[7]), //i--
.b(pp1_0_car[7]), //i--
.sum(pp2_0_sum[7]), //o--
.car(pp2_0_car[6]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_6(
.a(pp1_0_sum[6]), //i--
.b(pp1_0_car[6]), //i--
.sum(pp2_0_sum[6]), //o--
.car(pp2_0_car[5]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_5(
.a(pp1_0_sum[5]), //i--
.b(pp1_0_car[5]), //i--
.sum(pp2_0_sum[5]), //o--
.car(pp2_0_car[4]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_4(
.a(pp1_0_sum[4]), //i--
.b(pp1_0_car[4]), //i--
.sum(pp2_0_sum[4]), //o--
.car(pp2_0_car[3]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_3(
.a(pp1_0_sum[3]), //i--
.b(pp1_0_car[3]), //i--
.sum(pp2_0_sum[3]), //o--
.car(pp2_0_car[2]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_2(
.a(pp1_0_sum[2]), //i--
.b(pp1_0_car[2]), //i--
.sum(pp2_0_sum[2]), //o--
.car(pp2_0_car[1]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_1(
.a(pp1_0_sum[1]), //i--
.b(pp1_0_car[1]), //i--
.sum(pp2_0_sum[1]), //o--
.car(pp2_0_car[0]) //o--
);
tri_fu_csa22_h2 pp2_0_csa_0(
.a(pp1_0_sum[0]), //i--
.b(pp1_0_car[0]), //i--
.sum(pp2_0_sum[0]), //o--
.car(pp2_0_car_unused) //o--
);
//======================================================
//== compressor level 2 , row 1
//======================================================
//======================================================
//== compressor level 2 , row 1
//======================================================
assign pp2_1_sum[36] = pp1_2_sum[36];
assign pp2_1_car[36] = pp1_2_car[36];
assign pp2_1_sum[35] = pp1_2_sum[35];
assign pp2_1_car[35] = tidn;
assign pp2_1_sum[34] = pp1_2_sum[34];
assign pp2_1_car[34] = tidn;
assign pp2_1_sum[33] = pp1_2_sum[33];
assign pp2_1_car[33] = pp1_2_car[33];
assign pp2_1_sum[32] = pp1_2_sum[32];
assign pp2_1_car[32] = pp1_2_car[32];
assign pp2_1_sum[31] = pp1_2_sum[31];
assign pp2_1_car[31] = pp1_2_car[31];
assign pp2_1_car[30] = tidn;
tri_csa32 pp2_1_csa_30(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[30]), //i--
.b(pp1_2_sum[30]), //i--
.c(pp1_2_car[30]), //i--
.sum(pp2_1_sum[30]), //o--
.car(pp2_1_car[29]) //o--
);
tri_fu_csa22_h2 pp2_1_csa_29(
.a(pp1_2_sum[29]), //i--
.b(pp1_2_car[29]), //i--
.sum(pp2_1_sum[29]), //o--
.car(pp2_1_car[28]) //o--
);
tri_fu_csa22_h2 pp2_1_csa_28(
.a(pp1_2_sum[28]), //i--
.b(pp1_2_car[28]), //i--
.sum(pp2_1_sum[28]), //o--
.car(pp2_1_car[27]) //o--
);
tri_csa32 pp2_1_csa_27(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[27]), //i--
.b(pp1_2_sum[27]), //i--
.c(pp1_2_car[27]), //i--
.sum(pp2_1_sum[27]), //o--
.car(pp2_1_car[26]) //o--
);
tri_csa32 pp2_1_csa_26(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[26]), //i--
.b(pp1_2_sum[26]), //i--
.c(pp1_2_car[26]), //i--
.sum(pp2_1_sum[26]), //o--
.car(pp2_1_car[25]) //o--
);
tri_csa32 pp2_1_csa_25(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[25]), //i--
.b(pp1_2_sum[25]), //i--
.c(pp1_2_car[25]), //i--
.sum(pp2_1_sum[25]), //o--
.car(pp2_1_car[24]) //o--
);
tri_csa32 pp2_1_csa_24(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[24]), //i--
.b(pp1_2_sum[24]), //i--
.c(pp1_2_car[24]), //i--
.sum(pp2_1_sum[24]), //o--
.car(pp2_1_car[23]) //o--
);
tri_csa32 pp2_1_csa_23(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[23]), //i--
.b(pp1_2_sum[23]), //i--
.c(pp1_2_car[23]), //i--
.sum(pp2_1_sum[23]), //o--
.car(pp2_1_car[22]) //o--
);
tri_csa32 pp2_1_csa_22(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[22]), //i--
.b(pp1_2_sum[22]), //i--
.c(pp1_2_car[22]), //i--
.sum(pp2_1_sum[22]), //o--
.car(pp2_1_car[21]) //o--
);
tri_csa32 pp2_1_csa_21(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[21]), //i--
.b(pp1_2_sum[21]), //i--
.c(pp1_2_car[21]), //i--
.sum(pp2_1_sum[21]), //o--
.car(pp2_1_car[20]) //o--
);
tri_csa32 pp2_1_csa_20(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[20]), //i--
.b(pp1_2_sum[20]), //i--
.c(pp1_2_car[20]), //i--
.sum(pp2_1_sum[20]), //o--
.car(pp2_1_car[19]) //o--
);
tri_csa32 pp2_1_csa_19(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[19]), //i--
.b(pp1_2_sum[19]), //i--
.c(pp1_2_car[19]), //i--
.sum(pp2_1_sum[19]), //o--
.car(pp2_1_car[18]) //o--
);
tri_csa32 pp2_1_csa_18(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[18]), //i--
.b(pp1_2_sum[18]), //i--
.c(pp1_2_car[18]), //i--
.sum(pp2_1_sum[18]), //o--
.car(pp2_1_car[17]) //o--
);
tri_csa32 pp2_1_csa_17(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[17]), //i--
.b(pp1_2_sum[17]), //i--
.c(pp1_2_car[17]), //i--
.sum(pp2_1_sum[17]), //o--
.car(pp2_1_car[16]) //o--
);
tri_csa32 pp2_1_csa_16(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[16]), //i--
.b(pp1_2_sum[16]), //i--
.c(pp1_2_car[16]), //i--
.sum(pp2_1_sum[16]), //o--
.car(pp2_1_car[15]) //o--
);
tri_csa32 pp2_1_csa_15(
.vd(vdd),
.gd(gnd),
.a(pp1_1_car[15]), //i--
.b(pp1_2_sum[15]), //i--
.c(pp1_2_car[15]), //i--
.sum(pp2_1_sum[15]), //o--
.car(pp2_1_car[14]) //o--
);
tri_fu_csa22_h2 pp2_1_csa_14(
.a(pp1_1_car[14]), //i--
.b(pp1_2_sum[14]), //i--
.sum(pp2_1_sum[14]), //o--
.car(pp2_1_car[13]) //o--
);
assign pp2_1_sum[13] = pp1_1_car[13];
assign pp2_1_sum[12] = pp1_1_car[12];
assign pp2_1_sum[11] = pp1_1_car[11];
assign pp2_1_sum[10] = pp1_1_car[10];
assign pp2_1_sum[9] = pp1_1_car[9];
//=####################################################################
//=# compressor tree level 3
//=####################################################################
//= 0 1 2 3
//= 0123456789012345678901234567890123456
//==-------------------------------------
// sssssssssssssssssssssssssssssss_s pp2_0_sum
// cccccccccccccccccccccccc__c pp2_0_car
// ssssssssssssssssssssssssssss pp2_1_sum
// ccccccccccccccccc_ccc__c pp2_1_car
// 2222222223333444444444443343332232112
//======================================================
//== compressor level 3 , row 0
//======================================================
//off
//on
tri_fu_csa22_h2 pp3_0_csa_36(
.a(pp2_1_sum[36]), //i--
.b(pp2_1_car[36]), //i--
.sum(pp3_0_sum[36]), //o--
.car(pp3_0_car[35]) //o--
);
assign pp3_0_sum[35] = pp2_1_sum[35];
assign pp3_0_sum[34] = pp2_1_sum[34];
assign pp3_0_car[34] = tidn;
assign pp3_0_sum[33] = pp2_1_sum[33];
assign pp3_0_car[33] = pp2_1_car[33];
assign pp3_0_car[32] = tidn;
tri_csa32 pp3_0_csa_32(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[32]), //i--
.b(pp2_1_sum[32]), //i--
.c(pp2_1_car[32]), //i--
.sum(pp3_0_sum[32]), //o--
.car(pp3_0_car[31]) //o--
);
tri_fu_csa22_h2 pp3_0_csa_31(
.a(pp2_1_sum[31]), //i--
.b(pp2_1_car[31]), //i--
.sum(pp3_0_sum[31]), //o--
.car(pp3_0_car[30]) //o--
);
tri_fu_csa22_h2 pp3_0_csa_30(
.a(pp2_0_sum[30]), //i--
.b(pp2_1_sum[30]), //i--
.sum(pp3_0_sum[30]), //o--
.car(pp3_0_car[29]) //o--
);
tri_csa32 pp3_0_csa_29(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[29]), //i--
.b(pp2_1_sum[29]), //i--
.c(pp2_1_car[29]), //i--
.sum(pp3_0_sum[29]), //o--
.car(pp3_0_car[28]) //--o--
);
tri_csa32 pp3_0_csa_28(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[28]), //--i--
.b(pp2_1_sum[28]), //--i--
.c(pp2_1_car[28]), //--i--
.sum(pp3_0_sum[28]), //--o--
.car(pp3_0_car[27]) //--o--
);
tri_csa32 pp3_0_csa_27(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[27]), //--i--
.b(pp2_1_sum[27]), //--i--
.c(pp2_1_car[27]), //--i--
.sum(pp3_0_sum[27]), //--o--
.car(pp3_0_car[26]) //--o--
);
//-- MLT42_X1_A12TH
tri_csa42 pp3_0_csa_26(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[26]), //--i--
.b(pp2_0_car[26]), //--i--
.c(pp2_1_sum[26]), //--i--
.d(pp2_1_car[26]), //--i--
.ki(tidn), //--i--
.ko(pp3_0_ko[25]), //--i--
.sum(pp3_0_sum[26]), //--o--
.car(pp3_0_car[25]) //--o--
);
tri_csa42 pp3_0_csa_25(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[25]), //--i--
.b(tidn), //--i--
.c(pp2_1_sum[25]), //--i--
.d(pp2_1_car[25]), //--i--
.ki(pp3_0_ko[25]), //--i--
.ko(pp3_0_ko[24]), //--i--
.sum(pp3_0_sum[25]), //--o--
.car(pp3_0_car[24]) //--o--
);
tri_csa42 pp3_0_csa_24(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[24]), //--i--
.b(tidn), //--i--
.c(pp2_1_sum[24]), //--i--
.d(pp2_1_car[24]), //--i--
.ki(pp3_0_ko[24]), //--i--
.ko(pp3_0_ko[23]), //--i--
.sum(pp3_0_sum[24]), //--o--
.car(pp3_0_car[23]) //--o--
);
tri_csa42 pp3_0_csa_23(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[23]), //--i--
.b(pp2_0_car[23]), //--i--
.c(pp2_1_sum[23]), //--i--
.d(pp2_1_car[23]), //--i--
.ki(pp3_0_ko[23]), //--i--
.ko(pp3_0_ko[22]), //--i--
.sum(pp3_0_sum[23]), //--o--
.car(pp3_0_car[22]) //--o--
);
tri_csa42 pp3_0_csa_22(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[22]), //--i--
.b(pp2_0_car[22]), //--i--
.c(pp2_1_sum[22]), //--i--
.d(pp2_1_car[22]), //--i--
.ki(pp3_0_ko[22]), //--i--
.ko(pp3_0_ko[21]), //--i--
.sum(pp3_0_sum[22]), //--o--
.car(pp3_0_car[21]) //--o--
);
tri_csa42 pp3_0_csa_21(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[21]), //--i--
.b(pp2_0_car[21]), //--i--
.c(pp2_1_sum[21]), //--i--
.d(pp2_1_car[21]), //--i--
.ki(pp3_0_ko[21]), //--i--
.ko(pp3_0_ko[20]), //--i--
.sum(pp3_0_sum[21]), //--o--
.car(pp3_0_car[20]) //--o--
);
tri_csa42 pp3_0_csa_20(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[20]), //--i--
.b(pp2_0_car[20]), //--i--
.c(pp2_1_sum[20]), //--i--
.d(pp2_1_car[20]), //--i--
.ki(pp3_0_ko[20]), //--i--
.ko(pp3_0_ko[19]), //--i--
.sum(pp3_0_sum[20]), //--o--
.car(pp3_0_car[19]) //--o--
);
tri_csa42 pp3_0_csa_19(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[19]), //--i--
.b(pp2_0_car[19]), //--i--
.c(pp2_1_sum[19]), //--i--
.d(pp2_1_car[19]), //--i--
.ki(pp3_0_ko[19]), //--i--
.ko(pp3_0_ko[18]), //--i--
.sum(pp3_0_sum[19]), //--o--
.car(pp3_0_car[18]) //--o--
);
tri_csa42 pp3_0_csa_18(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[18]), //--i--
.b(pp2_0_car[18]), //--i--
.c(pp2_1_sum[18]), //--i--
.d(pp2_1_car[18]), //--i--
.ki(pp3_0_ko[18]), //--i--
.ko(pp3_0_ko[17]), //--i--
.sum(pp3_0_sum[18]), //--o--
.car(pp3_0_car[17]) //--o--
);
tri_csa42 pp3_0_csa_17(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[17]), //--i--
.b(pp2_0_car[17]), //--i--
.c(pp2_1_sum[17]), //--i--
.d(pp2_1_car[17]), //--i--
.ki(pp3_0_ko[17]), //--i--
.ko(pp3_0_ko[16]), //--i--
.sum(pp3_0_sum[17]), //--o--
.car(pp3_0_car[16]) //--o--
);
tri_csa42 pp3_0_csa_16(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[16]), //--i--
.b(pp2_0_car[16]), //--i--
.c(pp2_1_sum[16]), //--i--
.d(pp2_1_car[16]), //--i--
.ki(pp3_0_ko[16]), //--i--
.ko(pp3_0_ko[15]), //--i--
.sum(pp3_0_sum[16]), //--o--
.car(pp3_0_car[15]) //--o--
);
tri_csa42 pp3_0_csa_15(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[15]), //--i--
.b(pp2_0_car[15]), //--i--
.c(pp2_1_sum[15]), //--i--
.d(pp2_1_car[15]), //--i--
.ki(pp3_0_ko[15]), //--i--
.ko(pp3_0_ko[14]), //--i--
.sum(pp3_0_sum[15]), //--o--
.car(pp3_0_car[14]) //--o--
);
tri_csa42 pp3_0_csa_14(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[14]), //--i--
.b(pp2_0_car[14]), //--i--
.c(pp2_1_sum[14]), //--i--
.d(pp2_1_car[14]), //--i--
.ki(pp3_0_ko[14]), //--i--
.ko(pp3_0_ko[13]), //--i--
.sum(pp3_0_sum[14]), //--o--
.car(pp3_0_car[13]) //--o--
);
tri_csa42 pp3_0_csa_13(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[13]), //--i--
.b(pp2_0_car[13]), //--i--
.c(pp2_1_sum[13]), //--i--
.d(pp2_1_car[13]), //--i--
.ki(pp3_0_ko[13]), //--i--
.ko(pp3_0_ko[12]), //--i--
.sum(pp3_0_sum[13]), //--o--
.car(pp3_0_car[12]) //--o--
);
tri_csa42 pp3_0_csa_12(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[12]), //--i--
.b(pp2_0_car[12]), //--i--
.c(pp2_1_sum[12]), //--i--
.d(tidn), //--i--
.ki(pp3_0_ko[12]), //--i--
.ko(pp3_0_ko[11]), //--i--
.sum(pp3_0_sum[12]), //--o--
.car(pp3_0_car[11]) //--o--
);
tri_csa42 pp3_0_csa_11(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[11]), //--i--
.b(pp2_0_car[11]), //--i--
.c(pp2_1_sum[11]), //--i--
.d(tidn), //--i--
.ki(pp3_0_ko[11]), //--i--
.ko(pp3_0_ko[10]), //--i--
.sum(pp3_0_sum[11]), //--o--
.car(pp3_0_car[10]) //--o--
);
tri_csa42 pp3_0_csa_10(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[10]), //--i--
.b(pp2_0_car[10]), //--i--
.c(pp2_1_sum[10]), //--i--
.d(tidn), //--i--
.ki(pp3_0_ko[10]), //--i--
.ko(pp3_0_ko[9]), //--i--
.sum(pp3_0_sum[10]), //--o--
.car(pp3_0_car[9]) //--o--
);
tri_csa42 pp3_0_csa_9(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[9]), //--i--
.b(pp2_0_car[9]), //--i--
.c(pp2_1_sum[9]), //--i--
.d(tidn), //--i--
.ki(pp3_0_ko[9]), //--i--
.ko(pp3_0_ko[8]), //--i--
.sum(pp3_0_sum[9]), //--o--
.car(pp3_0_car[8]) //--o--
);
tri_csa32 pp3_0_csa_8(
.vd(vdd),
.gd(gnd),
.a(pp2_0_sum[8]), //--i--
.b(pp2_0_car[8]), //--i--
.c(pp3_0_ko[8]), //--i--
.sum(pp3_0_sum[8]), //--o--
.car(pp3_0_car[7]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_7(
.a(pp2_0_sum[7]), //--i--
.b(pp2_0_car[7]), //--i--
.sum(pp3_0_sum[7]), //--o--
.car(pp3_0_car[6]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_6(
.a(pp2_0_sum[6]), //--i--
.b(pp2_0_car[6]), //--i--
.sum(pp3_0_sum[6]), //--o--
.car(pp3_0_car[5]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_5(
.a(pp2_0_sum[5]), //--i--
.b(pp2_0_car[5]), //--i--
.sum(pp3_0_sum[5]), //--o--
.car(pp3_0_car[4]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_4(
.a(pp2_0_sum[4]), //--i--
.b(pp2_0_car[4]), //--i--
.sum(pp3_0_sum[4]), //--o--
.car(pp3_0_car[3]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_3(
.a(pp2_0_sum[3]), //--i--
.b(pp2_0_car[3]), //--i--
.sum(pp3_0_sum[3]), //--o--
.car(pp3_0_car[2]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_2(
.a(pp2_0_sum[2]), //--i--
.b(pp2_0_car[2]), //--i--
.sum(pp3_0_sum[2]), //--o--
.car(pp3_0_car[1]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_1(
.a(pp2_0_sum[1]), //--i--
.b(pp2_0_car[1]), //--i--
.sum(pp3_0_sum[1]), //--o--
.car(pp3_0_car[0]) //--o--
);
tri_fu_csa22_h2 pp3_0_csa_0(
.a(pp2_0_sum[0]), //--i--
.b(pp2_0_car[0]), //--i--
.sum(pp3_0_sum[0]), //--o--
.car(pp3_0_car_unused) //--o--
);
//=====================================================================
assign tbl_sum[0:36] = pp3_0_sum[0:36];
assign tbl_car[0:35] = pp3_0_car[0:35];
endmodule