// ========== Copyright Header Begin ==========================================
// OpenSPARC T2 Processor File: fgu_fpy_dp.v
// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; version 2 of the License.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// For the avoidance of doubt, and except that if any non-GPL license
// choice is available it will apply instead, Sun elects to use only
// the General Public License version 2 (GPLv2) at this time for any
// software where a choice of GPL license versions is made
// available with the language indicating that GPLv2 or any later version
// may be used, or where a choice of which version of the GPL is applied is
// otherwise unspecified.
// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
// CA 95054 USA or visit www.sun.com if you need additional information or
// ========== Copyright Header End ============================================
wire i_spu_rs1_ff_scanin;
wire i_spu_rs1_ff_scanout;
wire [63:0] spu_fgu_rs1_fx1;
wire i_spu_rs2_ff_scanin;
wire i_spu_rs2_ff_scanout;
wire [63:0] spu_fgu_rs2_fx1;
wire [63:15] rs2_fx1_ebf;
wire [1:0] xr_mode_fx1_bf;
wire [63:0] ma_result_ff;
wire [5:0] i_be32_unused;
wire [63:15] rs2_fx1_ebf3;
wire i_a3_rs2_ff_scanout;
wire [81:13] a3_csa1_3_c;
wire [82:10] a3_csa1_3_s;
wire i_a3_s_ff_a_scanout;
wire [82:0] a3_csa3_1_s_ff;
wire i_a3_s_ff_b_scanout;
wire i_a3_c_ff_a_scanout;
wire [82:2] a3_csa3_1_c_ff;
wire i_a3_c_ff_b_scanout;
wire [100:16] a2_csa2_3_s;
wire i_a32_x_ff_a_scanin;
wire i_a32_x_ff_a_scanout;
wire i_a32_x_ff_b_scanin;
wire i_a32_x_ff_b_scanout;
wire i_a2_be_ff_a_scanin;
wire i_a2_be_ff_a_scanout;
wire i_a2_be_ff_b_scanin;
wire i_a2_be_ff_b_scanout;
wire [63:31] rs2_fx1_ebf2;
wire i_a2_rs2_ff_scanout;
wire [87:19] a2_csa1_4_c;
wire [88:16] a2_csa1_4_s;
wire [93:25] a2_csa1_5_c;
wire [94:22] a2_csa1_5_s;
wire [99:31] a2_csa1_6_c;
wire [100:28] a2_csa1_6_s;
wire [95:23] a2_csa2_3_c;
wire [94:26] a2_csa2_4_c;
wire [99:19] a2_csa2_4_s;
wire [100:20] a2_csa3_2_c;
wire [100:16] a2_csa3_2_s;
wire i_a2_s_ff_a_scanout;
wire [100:16] a2_csa3_2_s_ff;
wire i_a2_s_ff_b_scanout;
wire i_a2_c_ff_a_scanout;
wire [100:20] a2_csa3_2_c_ff;
wire i_a2_c_ff_b_scanout;
wire [63:47] rs2_fx1_ebf1;
wire i_a1_rs2_ff_scanout;
wire [105:37] a1_csa1_7_c;
wire [106:34] a1_csa1_7_s;
wire [111:43] a1_csa1_8_c;
wire [112:40] a1_csa1_8_s;
wire [117:49] a1_csa1_9_c;
wire [118:46] a1_csa1_9_s;
wire [113:41] a1_csa2_5_c;
wire [118:34] a1_csa2_5_s;
wire [112:44] a1_csa2_6_c;
wire [117:37] a1_csa2_6_s;
wire [118:38] a1_csa3_3_c;
wire [118:34] a1_csa3_3_s;
wire i_a1_s_ff_a_scanout;
wire [118:34] a1_csa3_3_s_ff;
wire i_a1_s_ff_b_scanout;
wire i_a1_c_ff_a_scanout;
wire [118:38] a1_csa3_3_c_ff;
wire i_a1_c_ff_b_scanout;
wire i_a10_x_ff_a_scanin;
wire i_a10_x_ff_a_scanout;
wire i_a10_x_ff_b_scanin;
wire i_a10_x_ff_b_scanout;
wire [63:47] rs2_fx1_ebf0;
wire i_a0_rs2_ff_scanout;
wire [123:55] a0_csa2_7_c;
wire [124:52] a0_csa2_7_s;
wire [128:61] a0_csa2_8_c;
wire [135:58] a0_csa2_8_s;
wire [129:56] a0_csa3_4_c;
wire [135:52] a0_csa3_4_s;
wire i_a0_s_ff_a_scanout;
wire [135:52] a0_csa3_4_s_ff;
wire i_a0_s_ff_b_scanout;
wire i_a0_c_ff_a_scanout;
wire [129:56] a0_csa3_4_c_ff;
wire i_a0_c_ff_b_scanout;
wire [6:2] accum_sel_fx4;
wire a4_8x16csa4_1_unused;
wire [31:2] a4_8x16csa4_1_c;
wire [31:0] a4_8x16csa4_1_s;
wire a4_8x16csa4_2_unused;
wire [49:20] a4_8x16csa4_2_c;
wire [49:18] a4_8x16csa4_2_s;
wire a4_8x16csa4_3_unused;
wire [67:38] a4_8x16csa4_3_c;
wire [67:36] a4_8x16csa4_3_s;
wire a4_8x16csa4_4_unused;
wire [85:56] a4_8x16csa4_4_c;
wire [85:54] a4_8x16csa4_4_s;
wire [101:3] a4_csa4_1_c;
wire [100:0] a4_csa4_1_s;
wire [130:39] a4_csa4_2_c;
wire [135:34] a4_csa4_2_s;
wire [131:4] a4_csa5_1_c;
wire [135:0] a4_csa5_1_s;
wire i_a4_s_lo_ff_scanin;
wire i_a4_s_lo_ff_scanout;
wire [135:0] a4_csa5_1_s_ff;
wire i_a4_s_hi_ff_scanin;
wire i_a4_s_hi_ff_scanout;
wire i_a4_c_lo_ff_scanin;
wire i_a4_c_lo_ff_scanout;
wire [132:0] a4_csa5_1_c_ff;
wire i_a4_c_hi_ff_scanin;
wire i_a4_c_hi_ff_scanout;
wire i_accum_ff0_scanout;
wire [135:0] fya_add_result;
wire i_accum_ff1_scanout;
wire i_accum_sel_b1_ff_scanin;
wire i_accum_sel_b1_ff_scanout;
wire [3:0] accum_sel_fx4_b1;
wire i_ma_result_ff_scanin;
wire i_ma_result_ff_scanout;
input tcu_pce_ov; // scan signals
input mul_clken_rep0; // multiply clken
input mul_clken_rep01; // multiply clken
input [63:0] spu_fgu_rs1_e; // rs1 source from SPU
input [63:0] spu_fgu_rs2_e; // rs2 source from SPU
input [63:0] fad_rs1_fmt_fx1_rep0;
input [63:0] fad_rs2_fmt_fx1_rep0;
input [63:0] fad_rs2_fmt_fx1_rep1;
input fac_xr_mode_fx1; // 0 : Int or Float
input [4:0] fac_rs1_sel_fx1; // [0] : FMUL8SUx16 or FMULD8SUx16
// [1] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL
// [2] : FMUL8ULx16 or FMULD8ULx16
// [3] : MA Int / XOR forward of last MA result
// [4] : MA Int / XOR unforwarded
// Def : 64 * 64 Multiply
input [3:0] fac_rs2_sel_fx1; // [0] : FMUL8x16AU
// Def : 64 * 64 Multiply
input [1:0] fac_8x16_rnd_fx3; // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
input [3:0] fac_scff_sel_fx3; // [0] : Int, Float, MA Int
input [6:0] fac_accum_sel_fx3; // [0] : Write ACCUM with result
// [1] : Add ACCUM to Mult product
// [2] : XOR Mult w/ ACCUM
// [3] : XOR Mult w/ ACCUM >> 64
// [4] : XOR Mult w/o ACCUM
// [5] : XOR Mult w/o ACCUM >> 64
// [6] : Int Mult w/ or w/o ACCUM
// Def : Int Mult w/ or w/o ACCUM >> 64
input [5:0] fac_result_sel_fx4; // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
// [4] : XOR multiply w/ ACCUMUMATE
// Def : Integer, MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE
input fac_ma_result_en_fx4; // 1 : Save last MA result in shadow flop
output [63:0] fgu_mul_result_fx5;
output fpy_sticky_dp_fx5;
output fpy_sticky_sp_fx5;
output fpy_fp_result_fx4_b63;
output [1:0] fpy_xicc_z_fx5;
output fgu_accum_b0_fx5; // To SPU MA
assign test = tcu_dectest;
fgu_fpy_dp_buff_macro__dbuff_32x__rep_1__stack_88c__width_4 test_rep0 (
.din ({tcu_scan_en, tcu_pce_ov, spc_aclk, spc_bclk}),
.dout({se, pce_ov, siclk, soclk })
fgu_fpy_dp_msff_macro__minbuff_1__stack_88c__width_64 i_spu_rs1_ff (
.scan_in(i_spu_rs1_ff_scanin),
.scan_out(i_spu_rs1_ff_scanout),
.din ( spu_fgu_rs1_e[63:0] ),
.dout( spu_fgu_rs1_fx1[63:0] ),
fgu_fpy_dp_msff_macro__stack_88c__width_64 i_spu_rs2_ff (
.scan_in(i_spu_rs2_ff_scanin),
.scan_out(i_spu_rs2_ff_scanout),
.din ( spu_fgu_rs2_e[63:0] ),
.dout( spu_fgu_rs2_fx1[63:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_4 i_rs2_fx1_ebuf (
.din ({fad_rs2_fmt_fx1_rep0[63],fad_rs2_fmt_fx1_rep0[47],fad_rs2_fmt_fx1_rep0[31],fad_rs2_fmt_fx1_rep0[15]}),
.dout({ rs2_fx1_ebf[63] , rs2_fx1_ebf[47] , rs2_fx1_ebf[31] , rs2_fx1_ebf[15]} ));
// *** *** *** *** *** *** *** *** Start : RS1 Format *** *** *** *** *** *** *** ***
fgu_fpy_dp_inv_macro__stack_88c__width_1 i_xr_mode_fx1_inv (
.din ( fac_xr_mode_fx1 ),
fgu_fpy_dp_buff_macro__stack_88c__width_2 i_xr_mode_fx1_buf (
.din ({2{fac_xr_mode_fx1}} ),
.dout( xr_mode_fx1_bf[1:0] ));
fgu_fpy_dp_buff_macro__dbuff_48x__stack_88c__width_1 muxtest_a_rep0 (
.dout(tcu_muxtest_a_rep0)
fgu_fpy_dp_mux_macro__mux_pgpe__ports_6__stack_88c__width_69 i_rs1_fmt_mux (
.muxtst(tcu_muxtest_a_rep0),
.din0({{ 4{fad_rs1_fmt_fx1_rep0[63]}},fad_rs1_fmt_fx1_rep0[63:56],1'b0, // a0 12:0
{10{fad_rs1_fmt_fx1_rep0[47]}},fad_rs1_fmt_fx1_rep0[47:40],1'b0, // a1 18:0
{10{fad_rs1_fmt_fx1_rep0[31]}},fad_rs1_fmt_fx1_rep0[31:24],1'b0, // a2 18:0
{10{fad_rs1_fmt_fx1_rep0[15]}},fad_rs1_fmt_fx1_rep0[15:8] }), // a3 18:1
.din1({{ 4{ 1'b0 }},fad_rs1_fmt_fx1_rep0[63:56],1'b0, // a0 12:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[55:48],1'b0, // a1 18:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[47:40],1'b0, // a2 18:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[39:32] }), // a3 18:1
.din2({{ 4{ 1'b0 }},fad_rs1_fmt_fx1_rep0[55:48],1'b0, // a0 12:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[39:32],1'b0, // a1 18:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[23:16],1'b0, // a2 18:0
{10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[7:0] }), // a3 18:1
.din3({2'b00,ma_result_ff[63:53], // a0 12:0
ma_result_ff[53:35] , // a1 18:0
ma_result_ff[35:17] , // a2 18:0
ma_result_ff[17:0] } ), // a3 18:1
.din4({2'b00,spu_fgu_rs1_fx1[63:53], // a0 12:0
spu_fgu_rs1_fx1[53:35], // a1 18:0
spu_fgu_rs1_fx1[35:17], // a2 18:0
spu_fgu_rs1_fx1[17:0]} ), // a3 18:1
.din5({2'b00,fad_rs1_fmt_fx1_rep0[63:53], // a0 12:0
fad_rs1_fmt_fx1_rep0[53:35], // a1 18:0
fad_rs1_fmt_fx1_rep0[35:17], // a2 18:0
fad_rs1_fmt_fx1_rep0[17:0]} ), // a3 18:1
.sel0( fac_rs1_sel_fx1[0] ),
.sel1( fac_rs1_sel_fx1[1] ),
.sel2( fac_rs1_sel_fx1[2] ),
.sel3( fac_rs1_sel_fx1[3] ),
.sel4( fac_rs1_sel_fx1[4] ),
.dout({rs1_fmt_a0[12:0] ,
assign rs1_fmt_a3[0] = 1'b0; // 1st back bit is always '0'
fgu_fpy_dp_booth_encode_macro i_be00 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[2:0] ),
.dout ( be00[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[0] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be01 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[4:2] ),
.dout ( be01[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[1] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be02 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[6:4] ),
.dout ( be02[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[2] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be03 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[8:6] ),
.dout ( be03[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[3] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be04 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[10:8] ),
.dout ( be04[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[4] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be05 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[12:10] ),
.dout ( be05[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[5] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be06 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[14:12] ),
.dout ( be06[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[6] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be07 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[16:14] ),
.dout ( be07[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[7] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be08 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a3[18:16] ),
.dout ( be08[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[8] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be09 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[2:0] ),
.dout ( be09[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[9] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be10 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[4:2] ),
.dout ( be10[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[10] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be11 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[6:4] ),
.dout ( be11[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[11] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be12 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[8:6] ),
.dout ( be12[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[12] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be13 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[10:8] ),
.dout ( be13[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[13] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be14 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[12:10] ),
.dout ( be14[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[14] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be15 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[14:12] ),
.dout ( be15[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[15] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be16 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[16:14] ),
.dout ( be16[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[16] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be17 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a2[18:16] ),
.dout ( be17[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[17] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be18 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a1[2:0] ),
.dout ( be18[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[18] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be19 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a1[4:2] ),
.dout ( be19[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[19] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be20 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a1[6:4] ),
.dout ( be20[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[20] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be21 (
.xr_mode ( xr_mode_fx1_bf[0] ),
.din ( rs1_fmt_a1[8:6] ),
.dout ( be21[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[21] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be22 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a1[10:8] ),
.dout ( be22[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[22] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be23 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a1[12:10] ),
.dout ( be23[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[23] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be24 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a1[14:12] ),
.dout ( be24[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[24] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be25 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a1[16:14] ),
.dout ( be25[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[25] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be26 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a1[18:16] ),
.dout ( be26[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[26] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be27 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[2:0] ),
.dout ( be27[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[27] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be28 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[4:2] ),
.dout ( be28[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[28] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be29 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[6:4] ),
.dout ( be29[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[29] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be30 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[8:6] ),
.dout ( be30[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[30] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be31 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[10:8] ),
.dout ( be31[4:0] ), // +3,-1,-2,+2,+1
.pout ( be_pout[31] ), // P,H
fgu_fpy_dp_booth_encode_macro i_be32 (
.xr_mode ( xr_mode_fx1_bf[1] ),
.din ( rs1_fmt_a0[12:10] ),
.dout ({i_be32_unused[3:0],
be32_b0} ), // +3,-1,-2,+2,+1
.pout ( i_be32_unused[4] ), // P,H
.hout ( i_be32_unused[5] ));
// *** *** *** *** *** *** *** *** End : RS1 Format *** *** *** *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : XOR multiply specific *** *** *** *** ***
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 i_3x_xor (
.din0( spu_fgu_rs2_fx1[63:1] ), // XOR 1x
.din1( spu_fgu_rs2_fx1[62:0] ), // XOR 2x
.dout( rs2_3x_fx1[63:1] ));
assign rs2_3x_fx1[0] = spu_fgu_rs2_fx1[0];
assign rs2_3x_fx1[64] = spu_fgu_rs2_fx1[63];
fgu_fpy_dp_msff_macro__stack_88c__width_65 i_3x_ff (
.scan_in(i_3x_ff_scanin),
.scan_out(i_3x_ff_scanout),
.din ( rs2_3x_fx1[64:0] ),
.dout( rs2_3x_ff[64:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_65 i_3x_buf (
.din ( rs2_3x_ff[64:0] ),
// *** *** *** *** *** *** *** *** End : XOR multiply specific *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : "A3" 9:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_msff_macro__stack_88c__width_63 i_a3_be_ff (
.scan_in(i_a3_be_ff_scanin),
.scan_out(i_a3_be_ff_scanout),
fgu_fpy_dp_buff_macro__stack_88c__width_3 i_a3_rs2_fx1_ebuf (
.din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47] ,rs2_fx1_ebf[15]} ),
.dout({rs2_fx1_ebf3[63] ,rs2_fx1_ebf3[47] ,rs2_fx1_ebf3[15]} ));
fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a3_rs2_ff (
.scan_in(i_a3_rs2_ff_scanin),
.scan_out(i_a3_rs2_ff_scanout),
.din0({{32{1'b0}},{17{rs2_fx1_ebf3[63]}},fad_rs2_fmt_fx1_rep1[62:48]} ),
.din1({{32{1'b0}},{17{rs2_fx1_ebf3[47]}},fad_rs2_fmt_fx1_rep1[46:32]} ),
.din2({{32{1'b0}},{17{rs2_fx1_ebf3[15]}},fad_rs2_fmt_fx1_rep1[14:0]} ),
.din3( spu_fgu_rs2_fx1[63:0] ),
.din4( fad_rs2_fmt_fx1_rep1[63:0] ),
.sel0( fac_rs2_sel_fx1[0] ),
.sel1( fac_rs2_sel_fx1[1] ),
.sel2( fac_rs2_sel_fx1[2] ),
.sel3( fac_rs2_sel_fx1[3] ),
.dout( a3_rs2_ff[63:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a3_rs2_buf (
.din ( a3_rs2_ff[63:0] ),
fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a3_rs2_inv (
.din ( a3_rs2_ff[63:0] ),
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_00 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm00[67:65] = { be_pout_ff[0] , be_hout_ff[0] , be_hout_ff[0]}; // PNN
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_01 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm01[68:67] = { a3_xr_mode_fx2_ , be_pout_ff[1] }; // 1P
assign bm01[1:0] = { 1'b0 , be_hout_ff[0] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_02 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm02[70:69] = { a3_xr_mode_fx2_ , be_pout_ff[2] }; // 1P
assign bm02[3:2] = { 1'b0 , be_hout_ff[1] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_03 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm03[72:71] = { a3_xr_mode_fx2_ , be_pout_ff[3] }; // 1P
assign bm03[5:4] = { 1'b0 , be_hout_ff[2] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_04 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm04[74:73] = { a3_xr_mode_fx2_ , be_pout_ff[4] }; // 1P
assign bm04[7:6] = { 1'b0 , be_hout_ff[3] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_05 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm05[76:75] = { a3_xr_mode_fx2_ , be_pout_ff[5] }; // 1P
assign bm05[9:8] = { 1'b0 , be_hout_ff[4] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_06 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm06[78:77] = { a3_xr_mode_fx2_ , be_pout_ff[6] }; // 1P
assign bm06[11:10] = { 1'b0 , be_hout_ff[5] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_07 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm07[80:79] = { a3_xr_mode_fx2_ , be_pout_ff[7] }; // 1P
assign bm07[13:12] = { 1'b0 , be_hout_ff[6] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_08 (
.din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
.din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm08[82:81] = { a3_xr_mode_fx2_ , be_pout_ff[8] }; // 1P
assign bm08[15:14] = { 1'b0 , be_hout_ff[7] };
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_1 (
.i0 ({ { 1{1'b0}}, bm00[67:0] }),
.i2 ({ bm02[68:2] , { 2{1'b0}} }),
.carry( a3_csa1_1_c[69:1] ),
.sum ( a3_csa1_1_s[68:0] ));
assign a3_csa1_1_s[70:69] = bm02[70:69];
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_2 (
.i0 ({ { 2{1'b0}}, bm03[72:6] }),
.i2 ({ bm05[74:8] , { 2{1'b0}} }),
.carry( a3_csa1_2_c[75:7] ),
.sum ( a3_csa1_2_s[74:6] ));
assign a3_csa1_2_s[5:4] = bm03[5:4];
assign a3_csa1_2_s[76:75] = bm05[76:75];
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_3 (
.i0 ({ { 2{1'b0}}, bm06[78:12] }),
.i2 ({ bm08[80:14] , { 2{1'b0}} }),
.carry( a3_csa1_3_c[81:13] ),
.sum ( a3_csa1_3_s[80:12] ));
assign a3_csa1_3_s[11:10] = bm06[11:10];
assign a3_csa1_3_s[82:81] = bm08[82:81];
// *** 1st level to 2nd level ***
// csa1_1_s[70:00] csa1_1_c[69:01]
// csa1_2_s[76:04] csa1_2_c[75:07]
// csa1_3_s[82:10] csa1_3_c[81:13]
fgu_fpy_dp_csa32_macro__stack_88c__width_73 a3_csa2_1 (
.i0 ({ { 6{1'b0}}, a3_csa1_1_s[70:4] }),
.i1 ({ a3_csa1_2_s[76:4] }),
.i2 ({ a3_csa1_3_s[76:10], { 6{1'b0}} }),
.carry( a3_csa2_1_c[77:5] ),
.sum ( a3_csa2_1_s[76:4] ));
assign a3_csa2_1_s[3:0] = a3_csa1_1_s[3:0];
assign a3_csa2_1_s[82:77] = a3_csa1_3_s[82:77];
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa2_2 (
.i0 ({ { 6{1'b0}}, a3_csa1_1_c[69:7] }),
.i1 ({ a3_csa1_2_c[75:7] }),
.i2 ({ a3_csa1_3_c[75:13], { 6{1'b0}} }),
.carry( a3_csa2_2_c[76:8] ),
.sum ( a3_csa2_2_s[75:7] ));
assign a3_csa2_2_s[6:1] = a3_csa1_1_c[6:1];
assign a3_csa2_2_s[81:76] = a3_csa1_3_c[81:76];
// *** 2nd level to 3rd level ***
// csa2_1_s[82:00] csa2_1_c[77:05]
// csa2_2_s[81:01] csa2_2_c[76:08]
fgu_fpy_dp_csa42_macro__stack_88c__width_81 a3_csa3_1 (
.i0 ({ a3_csa2_1_s[81:1] }),
.i1 ({ { 4{1'b0}}, a3_csa2_1_c[77:5] , { 4{1'b0}} }),
.i2 ({ { 5{1'b0}}, a3_csa2_2_c[76:8] , { 7{1'b0}} }),
.i3 ({ a3_csa2_2_s[81:1] }),
.cout ( a3_csa3_1_unused ), // 1 bit
.carry( a3_csa3_1_c[82:2] ),
.sum ( a3_csa3_1_s[81:1] ));
assign a3_csa3_1_s[0] = a3_csa2_1_s[0];
assign a3_csa3_1_s[82] = a3_csa2_1_s[82];
fgu_fpy_dp_msff_macro__stack_88c__width_39 i_a3_s_ff_a (
.scan_in(i_a3_s_ff_a_scanin),
.scan_out(i_a3_s_ff_a_scanout),
.din ( a3_csa3_1_s[82:44] ), // [82] and [00] are early
.dout( a3_csa3_1_s_ff[82:44] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a3_s_ff_b (
.scan_in(i_a3_s_ff_b_scanin),
.scan_out(i_a3_s_ff_b_scanout),
.din ( a3_csa3_1_s[43:0] ), // [82] and [00] are early
.dout( a3_csa3_1_s_ff[43:0] ),
fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a3_c_ff_a (
.scan_in(i_a3_c_ff_a_scanin),
.scan_out(i_a3_c_ff_a_scanout),
.din ( a3_csa3_1_c[82:46] ),
.dout( a3_csa3_1_c_ff[82:46] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a3_c_ff_b (
.scan_in(i_a3_c_ff_b_scanin),
.scan_out(i_a3_c_ff_b_scanout),
.din ( a3_csa3_1_c[45:2] ),
.dout( a3_csa3_1_c_ff[45:2] ),
// *** *** *** *** *** *** *** *** End : "A3" 9:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a32_xor4_1 (
.din0( a3_csa2_1_s[80:18] ),
.din1( a2_csa2_3_s[80:18] ),
.dout( a32_xr4_1[80:18] ));
assign a32_xr4_1[17:0] = a3_csa2_1_s[17:0];
assign a32_xr4_1[98:81] = a2_csa2_3_s[98:81];
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a32_x_ff_a (
.scan_in(i_a32_x_ff_a_scanin),
.scan_out(i_a32_x_ff_a_scanout),
.din ( a32_xr4_1[87:44] ),
.dout( a32_xr_ff[87:44] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a32_x_ff_b (
.scan_in(i_a32_x_ff_b_scanin),
.scan_out(i_a32_x_ff_b_scanout),
.din ( a32_xr4_1[43:0] ),
.dout( a32_xr_ff[43:0] ),
// *** *** *** *** *** *** *** *** Start : "A2" 9:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_msff_macro__stack_88c__width_31 i_a2_be_ff_a (
.scan_in(i_a2_be_ff_a_scanin),
.scan_out(i_a2_be_ff_a_scanout),
.din ({a32_xr4_1[98:88] ,
.dout({a32_xr_ff[98:88] ,
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_be_ff_b (
.scan_in(i_a2_be_ff_b_scanin),
.scan_out(i_a2_be_ff_b_scanout),
fgu_fpy_dp_buff_macro__stack_88c__width_3 i_a2_rs2_fx1_ebuf (
.din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47] ,rs2_fx1_ebf[31]} ),
.dout({rs2_fx1_ebf2[63] ,rs2_fx1_ebf2[47] ,rs2_fx1_ebf2[31]} ));
fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a2_rs2_ff (
.scan_in(i_a2_rs2_ff_scanin),
.scan_out(i_a2_rs2_ff_scanout),
.din0({{32{1'b0}},{17{rs2_fx1_ebf2[63]}},fad_rs2_fmt_fx1_rep1[62:48]} ),
.din1({{32{1'b0}},{17{rs2_fx1_ebf2[47]}},fad_rs2_fmt_fx1_rep1[46:32]} ),
.din2({{32{1'b0}},{17{rs2_fx1_ebf2[31]}},fad_rs2_fmt_fx1_rep1[30:16]} ),
.din3( spu_fgu_rs2_fx1[63:0] ),
.din4( fad_rs2_fmt_fx1_rep1[63:0] ),
.sel0( fac_rs2_sel_fx1[0] ),
.sel1( fac_rs2_sel_fx1[1] ),
.sel2( fac_rs2_sel_fx1[2] ),
.sel3( fac_rs2_sel_fx1[3] ),
.dout( a2_rs2_ff[63:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a2_rs2_buf (
.din ( a2_rs2_ff[63:0] ),
fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a2_rs2_inv (
.din ( a2_rs2_ff[63:0] ),
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_09 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm09[84:83] = { a2_xr_mode_fx2_ , be_pout_ff[9] }; // 1P
assign bm09[17:16] = { 1'b0 , be_hout_ff[8] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_10 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm10[86:85] = { a2_xr_mode_fx2_ , be_pout_ff[10]}; // 1P
assign bm10[19:18] = { 1'b0 , be_hout_ff[9] };
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_11 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm11[88:87] = { a2_xr_mode_fx2_ , be_pout_ff[11]}; // 1P
assign bm11[21:20] = { 1'b0 , be_hout_ff[10]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_12 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm12[90:89] = { a2_xr_mode_fx2_ , be_pout_ff[12]}; // 1P
assign bm12[23:22] = { 1'b0 , be_hout_ff[11]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_13 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm13[92:91] = { a2_xr_mode_fx2_ , be_pout_ff[13]}; // 1P
assign bm13[25:24] = { 1'b0 , be_hout_ff[12]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_14 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm14[94:93] = { a2_xr_mode_fx2_ , be_pout_ff[14]}; // 1P
assign bm14[27:26] = { 1'b0 , be_hout_ff[13]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_15 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm15[96:95] = { a2_xr_mode_fx2_ , be_pout_ff[15]}; // 1P
assign bm15[29:28] = { 1'b0 , be_hout_ff[14]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_16 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm16[98:97] = { a2_xr_mode_fx2_ , be_pout_ff[16]}; // 1P
assign bm16[31:30] = { 1'b0 , be_hout_ff[15]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_17 (
.din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
.din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm17[100:99] = { a2_xr_mode_fx2_ , be_pout_ff[17]}; // 1P
assign bm17[33:32] = { 1'b0 , be_hout_ff[16]};
// bm09[84:16] bm10[86:18] bm11[88:20]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_4 (
.i0 ({ { 2{1'b0}}, bm09[84:18] }),
.i2 ({ bm11[86:20] , { 2{1'b0}} }),
.carry( a2_csa1_4_c[87:19] ),
.sum ( a2_csa1_4_s[86:18] ));
assign a2_csa1_4_s[17:16] = bm09[17:16];
assign a2_csa1_4_s[88:87] = bm11[88:87];
// bm12[90:22] bm13[92:24] bm14[94:26]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_5 (
.i0 ({ { 2{1'b0}}, bm12[90:24] }),
.i2 ({ bm14[92:26] , { 2{1'b0}} }),
.carry( a2_csa1_5_c[93:25] ),
.sum ( a2_csa1_5_s[92:24] ));
assign a2_csa1_5_s[23:22] = bm12[23:22];
assign a2_csa1_5_s[94:93] = bm14[94:93];
// bm15[96:28] bm16[98:30] bm17[100:32]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_6 (
.i0 ({ { 2{1'b0}}, bm15[96:30] }),
.i2 ({ bm17[98:32] , { 2{1'b0}} }),
.carry( a2_csa1_6_c[99:31] ),
.sum ( a2_csa1_6_s[98:30] ));
assign a2_csa1_6_s[29:28] = bm15[29:28];
assign a2_csa1_6_s[100:99] = bm17[100:99];
// *** 1st level to 2nd level ***
// csa1_4_s[88:16] csa1_4_c[87:19]
// csa1_5_s[94:22] csa1_5_c[93:25]
// csa1_6_s[100:28] csa1_6_c[99:31]
fgu_fpy_dp_csa32_macro__stack_88c__width_73 a2_csa2_3 (
.i0 ({ { 6{1'b0}}, a2_csa1_4_s[88:22] }),
.i1 ({ a2_csa1_5_s[94:22] }),
.i2 ({ a2_csa1_6_s[94:28], { 6{1'b0}} }),
.carry( a2_csa2_3_c[95:23] ),
.sum ( a2_csa2_3_s[94:22] ));
assign a2_csa2_3_s[21:16] = a2_csa1_4_s[21:16];
assign a2_csa2_3_s[100:95] = a2_csa1_6_s[100:95];
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa2_4 (
.i0 ({ { 6{1'b0}}, a2_csa1_4_c[87:25] }),
.i1 ({ a2_csa1_5_c[93:25] }),
.i2 ({ a2_csa1_6_c[93:31], { 6{1'b0}} }),
.carry( a2_csa2_4_c[94:26] ),
.sum ( a2_csa2_4_s[93:25] ));
assign a2_csa2_4_s[24:19] = a2_csa1_4_c[24:19];
assign a2_csa2_4_s[99:94] = a2_csa1_6_c[99:94];
// *** 2nd level to 3rd level ***
// csa2_3_s[100:16] csa2_3_c[95:23]
// csa2_4_s[99:19] csa2_4_c[94:26]
fgu_fpy_dp_csa42_macro__stack_88c__width_81 a2_csa3_2 (
.i0 ({ a2_csa2_3_s[99:19] }),
.i1 ({ { 4{1'b0}}, a2_csa2_3_c[95:23] , { 4{1'b0}} }),
.i2 ({ { 5{1'b0}}, a2_csa2_4_c[94:26] , { 7{1'b0}} }),
.i3 ({ a2_csa2_4_s[99:19] }),
.cout ( a2_csa3_2_unused ), // 1 bit
.carry( a2_csa3_2_c[100:20] ),
.sum ( a2_csa3_2_s[99:19] ));
assign a2_csa3_2_s[18:16] = a2_csa2_3_s[18:16];
assign a2_csa3_2_s[100] = a2_csa2_3_s[100];
fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a2_s_ff_a (
.scan_in(i_a2_s_ff_a_scanin),
.scan_out(i_a2_s_ff_a_scanout),
.din ( a2_csa3_2_s[100:60] ), // [100] and [18:16] are early
.dout( a2_csa3_2_s_ff[100:60] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_s_ff_b (
.scan_in(i_a2_s_ff_b_scanin),
.scan_out(i_a2_s_ff_b_scanout),
.din ( a2_csa3_2_s[59:16] ), // [100] and [18:16] are early
.dout( a2_csa3_2_s_ff[59:16] ),
fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a2_c_ff_a (
.scan_in(i_a2_c_ff_a_scanin),
.scan_out(i_a2_c_ff_a_scanout),
.din ( a2_csa3_2_c[100:64] ),
.dout( a2_csa3_2_c_ff[100:64] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_c_ff_b (
.scan_in(i_a2_c_ff_b_scanin),
.scan_out(i_a2_c_ff_b_scanout),
.din ( a2_csa3_2_c[63:20] ),
.dout( a2_csa3_2_c_ff[63:20] ),
// *** *** *** *** *** *** *** *** End : "A2" 9:2 CSA Tree *** *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : "A1" 9:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_msff_macro__stack_88c__width_64 i_a1_be_ff (
.scan_in(i_a1_be_ff_scanin),
.scan_out(i_a1_be_ff_scanout),
fgu_fpy_dp_buff_macro__stack_88c__width_2 i_a1_rs2_fx1_ebuf (
.din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47]} ),
.dout({rs2_fx1_ebf1[63] ,rs2_fx1_ebf1[47]} ));
fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 i_a1_rs2_ff (
.scan_in(i_a1_rs2_ff_scanin),
.scan_out(i_a1_rs2_ff_scanout),
.din0({{32{1'b0}},{17{rs2_fx1_ebf1[63]}},fad_rs2_fmt_fx1_rep0[62:48]} ),
.din1({{32{1'b0}},{17{rs2_fx1_ebf1[47]}},fad_rs2_fmt_fx1_rep0[46:32]} ),
.din2( spu_fgu_rs2_fx1[63:0] ),
.din3( fad_rs2_fmt_fx1_rep0[63:0] ),
.sel0( fac_rs2_sel_fx1[0] ),
.sel1( fac_rs2_sel_fx1[2] ),
.sel2( fac_rs2_sel_fx1[3] ),
.dout( a1_rs2_ff[63:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a1_rs2_buf (
.din ( a1_rs2_ff[63:0] ),
fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a1_rs2_inv (
.din ( a1_rs2_ff[63:0] ),
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_18 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm18[102:101] = { a1_xr_mode_fx2_ , be_pout_ff[18]}; // 1P
assign bm18[35:34] = { 1'b0 , be_hout_ff[17]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_19 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm19[104:103] = { a1_xr_mode_fx2_ , be_pout_ff[19]}; // 1P
assign bm19[37:36] = { 1'b0 , be_hout_ff[18]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_20 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm20[106:105] = { a1_xr_mode_fx2_ , be_pout_ff[20]}; // 1P
assign bm20[39:38] = { 1'b0 , be_hout_ff[19]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_21 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm21[108:107] = { a1_xr_mode_fx2_ , be_pout_ff[21]}; // 1P
assign bm21[41:40] = { 1'b0 , be_hout_ff[20]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_22 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm22[110:109] = { a1_xr_mode_fx2_ , be_pout_ff[22]}; // 1P
assign bm22[43:42] = { 1'b0 , be_hout_ff[21]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_23 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm23[112:111] = { a1_xr_mode_fx2_ , be_pout_ff[23]}; // 1P
assign bm23[45:44] = { 1'b0 , be_hout_ff[22]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_24 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm24[114:113] = { a1_xr_mode_fx2_ , be_pout_ff[24]}; // 1P
assign bm24[47:46] = { 1'b0 , be_hout_ff[23]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_25 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm25[116:115] = { a1_xr_mode_fx2_ , be_pout_ff[25]}; // 1P
assign bm25[49:48] = { 1'b0 , be_hout_ff[24]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_26 (
.din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
.din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm26[118:117] = { a1_xr_mode_fx2_ , be_pout_ff[26]}; // 1P
assign bm26[51:50] = { 1'b0 , be_hout_ff[25]};
// bm18[102:34] bm19[104:36] bm20[106:38]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_7 (
.i0 ({ { 2{1'b0}}, bm18[102:36] }),
.i2 ({ bm20[104:38] , { 2{1'b0}} }),
.carry( a1_csa1_7_c[105:37] ),
.sum ( a1_csa1_7_s[104:36] ));
assign a1_csa1_7_s[35:34] = bm18[35:34];
assign a1_csa1_7_s[106:105] = bm20[106:105];
// bm21[108:40] bm22[110:42] bm23[112:44]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_8 (
.i0 ({ { 2{1'b0}}, bm21[108:42] }),
.i2 ({ bm23[110:44] , { 2{1'b0}} }),
.carry( a1_csa1_8_c[111:43] ),
.sum ( a1_csa1_8_s[110:42] ));
assign a1_csa1_8_s[41:40] = bm21[41:40];
assign a1_csa1_8_s[112:111] = bm23[112:111];
// bm24[114:46] bm25[116:48] bm26[118:50]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_9 (
.i0 ({ { 2{1'b0}}, bm24[114:48] }),
.i2 ({ bm26[116:50] , { 2{1'b0}} }),
.carry( a1_csa1_9_c[117:49] ),
.sum ( a1_csa1_9_s[116:48] ));
assign a1_csa1_9_s[47:46] = bm24[47:46];
assign a1_csa1_9_s[118:117] = bm26[118:117];
// *** 1st level to 2nd level ***
// csa1_7_s[106:34] csa1_7_c[105:37]
// csa1_8_s[112:40] csa1_8_c[111:43]
// csa1_9_s[118:46] csa1_9_c[117:49]
fgu_fpy_dp_csa32_macro__stack_88c__width_73 a1_csa2_5 (
.i0 ({ { 6{1'b0}}, a1_csa1_7_s[106:40] }),
.i1 ({ a1_csa1_8_s[112:40] }),
.i2 ({ a1_csa1_9_s[112:46],{ 6{1'b0}} }),
.carry( a1_csa2_5_c[113:41] ),
.sum ( a1_csa2_5_s[112:40] ));
assign a1_csa2_5_s[39:34] = a1_csa1_7_s[39:34];
assign a1_csa2_5_s[118:113] = a1_csa1_9_s[118:113];
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa2_6 (
.i0 ({ { 6{1'b0}}, a1_csa1_7_c[105:43] }),
.i1 ({ a1_csa1_8_c[111:43] }),
.i2 ({ a1_csa1_9_c[111:49],{ 6{1'b0}} }),
.carry( a1_csa2_6_c[112:44] ),
.sum ( a1_csa2_6_s[111:43] ));
assign a1_csa2_6_s[42:37] = a1_csa1_7_c[42:37];
assign a1_csa2_6_s[117:112] = a1_csa1_9_c[117:112];
// *** 2nd level to 3rd level ***
// csa2_5_s[118:34] csa2_5_c[113:41]
// csa2_6_s[117:37] csa2_6_c[112:44]
fgu_fpy_dp_csa42_macro__stack_88c__width_81 a1_csa3_3 (
.i0 ({ a1_csa2_5_s[117:37] }),
.i1 ({ { 4{1'b0}}, a1_csa2_5_c[113:41], { 4{1'b0}} }),
.i2 ({ { 5{1'b0}}, a1_csa2_6_c[112:44], { 7{1'b0}} }),
.i3 ({ a1_csa2_6_s[117:37] }),
.cout ( a1_csa3_3_unused ), // 1 bit
.carry( a1_csa3_3_c[118:38] ),
.sum ( a1_csa3_3_s[117:37] ));
assign a1_csa3_3_s[36:34] = a1_csa2_5_s[36:34];
assign a1_csa3_3_s[118] = a1_csa2_5_s[118];
fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a1_s_ff_a (
.scan_in(i_a1_s_ff_a_scanin),
.scan_out(i_a1_s_ff_a_scanout),
.din ( a1_csa3_3_s[118:78] ), // [118] and [36:34] are early
.dout( a1_csa3_3_s_ff[118:78] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a1_s_ff_b (
.scan_in(i_a1_s_ff_b_scanin),
.scan_out(i_a1_s_ff_b_scanout),
.din ( a1_csa3_3_s[77:34] ), // [118] and [36:34] are early
.dout( a1_csa3_3_s_ff[77:34] ),
fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a1_c_ff_a (
.scan_in(i_a1_c_ff_a_scanin),
.scan_out(i_a1_c_ff_a_scanout),
.din ( a1_csa3_3_c[118:82] ),
.dout( a1_csa3_3_c_ff[118:82] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a1_c_ff_b (
.scan_in(i_a1_c_ff_b_scanin),
.scan_out(i_a1_c_ff_b_scanout),
.din ( a1_csa3_3_c[81:38] ),
.dout( a1_csa3_3_c_ff[81:38] ),
// *** *** *** *** *** *** *** *** End : "A1" 9:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a10_xor4_2 (
.din0( a1_csa2_5_s[116:54] ),
.din1( a0_xr_in[116:54] ),
.dout( a10_xr4_2[116:54] ));
assign a10_xr4_2[53:36] = a1_csa2_5_s[53:36];
assign a10_xr4_2[126:117] = a0_xr_in[126:117];
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a10_x_ff_a (
.scan_in(i_a10_x_ff_a_scanin),
.scan_out(i_a10_x_ff_a_scanout),
.din ( a10_xr4_2[123:80] ),
.dout( a10_xr_ff[123:80] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a10_x_ff_b (
.scan_in(i_a10_x_ff_b_scanin),
.scan_out(i_a10_x_ff_b_scanout),
.din ( a10_xr4_2[79:36] ),
.dout( a10_xr_ff[79:36] ),
// *** *** *** *** *** *** *** *** Start : "A0" 6:2 CSA Tree *** *** *** *** *** ***
fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a0_be_ff (
.scan_in(i_a0_be_ff_scanin),
.scan_out(i_a0_be_ff_scanout),
.din ({a10_xr4_2[126:124] ,
.dout({a10_xr_ff[126:124] ,
fgu_fpy_dp_buff_macro__stack_88c__width_2 i_a0_rs2_fx1_ebuf (
.din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47]} ),
.dout({rs2_fx1_ebf0[63] ,rs2_fx1_ebf0[47]} ));
fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 i_a0_rs2_ff (
.scan_in(i_a0_rs2_ff_scanin),
.scan_out(i_a0_rs2_ff_scanout),
.din0({{32{1'b0}},{17{rs2_fx1_ebf0[47]}},fad_rs2_fmt_fx1_rep0[46:32]} ),
.din1({{32{1'b0}},{17{rs2_fx1_ebf0[63]}},fad_rs2_fmt_fx1_rep0[62:48]} ),
.din2( spu_fgu_rs2_fx1[63:0] ),
.din3( fad_rs2_fmt_fx1_rep0[63:0] ),
.sel0( fac_rs2_sel_fx1[1] ),
.sel1( fac_rs2_sel_fx1[2] ),
.sel2( fac_rs2_sel_fx1[3] ),
.dout( a0_rs2_ff[63:0] ),
fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a0_rs2_buf (
.din ( a0_rs2_ff[63:0] ),
fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a0_rs2_inv (
.din ( a0_rs2_ff[63:0] ),
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_27 (
.din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
.din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm27[120:119] = { a0_xr_mode_fx2_ , be_pout_ff[27]}; // 1P
assign bm27[53:52] = { 1'b0 , be_hout_ff[26]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_28 (
.din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
.din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm28[122:121] = { a0_xr_mode_fx2_ , be_pout_ff[28]}; // 1P
assign bm28[55:54] = { 1'b0 , be_hout_ff[27]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_29 (
.din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
.din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm29[124:123] = { a0_xr_mode_fx2_ , be_pout_ff[29]}; // 1P
assign bm29[57:56] = { 1'b0 , be_hout_ff[28]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_30 (
.din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
.din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm30[126:125] = { a0_xr_mode_fx2_ , be_pout_ff[30]}; // 1P
assign bm30[59:58] = { 1'b0 , be_hout_ff[29]};
fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_31 (
.din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
.din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
.din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
.din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
.din4( rs2_3x[64:0] ), // +3 * rs2
assign bm31[127] = { be_pout_ff[31]}; // 1P
assign bm31[61:60] = { 1'b0 , be_hout_ff[30]};
fgu_fpy_dp_mux_macro__mux_aope__ports_2__stack_88c__width_64 i_a0_bm_32 (
.din0({ a0_rs2[63:0] }), // +1 * rs2
assign bm32[135:128] = {8{a0_xr_mode_fx2_} }; // Extend beyond ACCUM range
assign bm32[63:62] = { 1'b0 , be_hout_ff[31]};
// bm27[120:52] bm28[122:54] bm29[124:56]
fgu_fpy_dp_csa32_macro__stack_88c__width_69 a0_csa2_7 (
.i0 ({ { 2{1'b0}}, bm27[120:54] }),
.i2 ({ bm29[122:56] , { 2{1'b0}} }),
.carry( a0_csa2_7_c[123:55] ),
.sum ( a0_csa2_7_s[122:54] ));
assign a0_csa2_7_s[53:52] = bm27[53:52];
assign a0_csa2_7_s[124:123] = bm29[124:123];
// bm30[126:58] bm31[127:60] bm32[135:62]
fgu_fpy_dp_csa32_macro__stack_88c__width_68 a0_csa2_8 (
.i0 ({ { 1{1'b0}}, bm30[126:60] }),
.i2 ({ bm32[127:62] , { 2{1'b0}} }),
.carry( a0_csa2_8_c[128:61] ),
.sum ( a0_csa2_8_s[127:60] ));
assign a0_csa2_8_s[59:58] = bm30[59:58];
assign a0_csa2_8_s[135:128] = bm32[135:128];
// *** 2nd level to 3rd level ***
// csa2_7_s[124:52] csa2_7_c[123:55]
// csa2_8_s[135:58] csa2_8_c[128:61]
fgu_fpy_dp_csa42_macro__stack_88c__width_74 a0_csa3_4 (
.i0 ({ { 4{1'b0}}, a0_csa2_7_s[124:55] }),
.i1 ({ { 5{1'b0}}, a0_csa2_7_c[123:55] }),
.i2 ({ a0_csa2_8_c[128:61], { 6{1'b0}} }),
.i3 ({ a0_csa2_8_s[128:58], { 3{1'b0}} }),
.cout ( a0_csa3_4_unused ), // 1 bit
.carry( a0_csa3_4_c[129:56] ),
.sum ( a0_csa3_4_s[128:55] ));
assign a0_csa3_4_s[54:52] = a0_csa2_7_s[54:52];
assign a0_csa3_4_s[135:129] = a0_csa2_8_s[135:129];
// a0_csa2_7_s[122:54] a0_csa2_8_s[126:60]
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a0_xor3_0 (
.din0( a0_csa2_7_s[122:60] ),
.din1( a0_csa2_8_s[122:60] ),
.dout( a0_xr_in[122:60] ));
assign a0_xr_in[59:54] = a0_csa2_7_s[59:54];
assign a0_xr_in[126:123] = a0_csa2_8_s[126:123];
fgu_fpy_dp_msff_macro__stack_88c__width_40 i_a0_s_ff_a (
.scan_in(i_a0_s_ff_a_scanin),
.scan_out(i_a0_s_ff_a_scanout),
.din ( a0_csa3_4_s[135:96] ),
.dout( a0_csa3_4_s_ff[135:96] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a0_s_ff_b (
.scan_in(i_a0_s_ff_b_scanin),
.scan_out(i_a0_s_ff_b_scanout),
.din ( a0_csa3_4_s[95:52] ),
.dout( a0_csa3_4_s_ff[95:52] ),
fgu_fpy_dp_msff_macro__stack_88c__width_36 i_a0_c_ff_a (
.scan_in(i_a0_c_ff_a_scanin),
.scan_out(i_a0_c_ff_a_scanout),
.din (a0_csa3_4_c[129:94] ),
.dout(a0_csa3_4_c_ff[129:94] ),
fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a0_c_ff_b (
.scan_in(i_a0_c_ff_b_scanin),
.scan_out(i_a0_c_ff_b_scanout),
.din ({a0_csa3_4_c[93:87] , fac_accum_sel_fx3[6:2] , fac_accum_sel_fx3[0] , a0_csa3_4_c[86:56]} ),
.dout({a0_csa3_4_c_ff[93:87] , accum_sel_fx4[6:2] , accum_sel_fx4_b0 , a0_csa3_4_c_ff[86:56]} ),
// *** *** *** *** *** *** *** *** End : "A0" 6:2 CSA Tree *** *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : "A4" 8:2 CSA Tree *** *** *** *** *** ***
// *** 8x16 3rd level to 4th level ***
// Define Raw Result = {M3,M2,M1,M0}
// M0 = a3_csa3_1_s_ff[31:0] a3_csa3_1_c_ff[31:2]
// M1 = a2_csa3_2_s_ff[49:18] a2_csa3_2_c_ff[49:20]
// M2 = a1_csa3_3_s_ff[67:36] a1_csa3_3_c_ff[67:38]
// M3 = a0_csa3_4_s_ff[85:54] a0_csa3_4_c_ff[85:56]
fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_1 (
.i0 ({ a3_csa3_1_s_ff[31:7] }),
.i1 ({ a3_csa3_1_c_ff[31:7] }),
.i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
{ 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
.carry({ a4_8x16csa4_1_unused , a4_8x16csa4_1_c[31:8]}),
.sum ( a4_8x16csa4_1_s[31:7] ));
assign a4_8x16csa4_1_s[6:0] = a3_csa3_1_s_ff[6:0];
assign a4_8x16csa4_1_c[7] = 1'b0;
assign a4_8x16csa4_1_c[6:2] = a3_csa3_1_c_ff[6:2];
fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_2 (
.i0 ({ a2_csa3_2_s_ff[49:25] }),
.i1 ({ a2_csa3_2_c_ff[49:25] }),
.i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
{ 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
.carry({ a4_8x16csa4_2_unused , a4_8x16csa4_2_c[49:26]}),
.sum ( a4_8x16csa4_2_s[49:25] ));
assign a4_8x16csa4_2_s[24:18] = a2_csa3_2_s_ff[24:18];
assign a4_8x16csa4_2_c[25] = 1'b0;
assign a4_8x16csa4_2_c[24:20] = a2_csa3_2_c_ff[24:20];
fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_3 (
.i0 ({ a1_csa3_3_s_ff[67:43] }),
.i1 ({ a1_csa3_3_c_ff[67:43] }),
.i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
{ 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
.carry({ a4_8x16csa4_3_unused , a4_8x16csa4_3_c[67:44]}),
.sum ( a4_8x16csa4_3_s[67:43] ));
assign a4_8x16csa4_3_s[42:36] = a1_csa3_3_s_ff[42:36];
assign a4_8x16csa4_3_c[43] = 1'b0;
assign a4_8x16csa4_3_c[42:38] = a1_csa3_3_c_ff[42:38];
fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_4 (
.i0 ({ a0_csa3_4_s_ff[85:61] }),
.i1 ({ a0_csa3_4_c_ff[85:61] }),
.i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
{ 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
.carry({ a4_8x16csa4_4_unused , a4_8x16csa4_4_c[85:62]}),
.sum ( a4_8x16csa4_4_s[85:61] ));
assign a4_8x16csa4_4_s[60:54] = a0_csa3_4_s_ff[60:54];
assign a4_8x16csa4_4_c[61] = 1'b0;
assign a4_8x16csa4_4_c[60:56] = a0_csa3_4_c_ff[60:56];
// *** XOR 4th level to 5th level ***
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a4_xor5_1 (
.din0( a32_xr_ff[98:36] ),
.din1( a10_xr_ff[98:36] ),
.dout( a4_xr5_1[98:36] ));
assign a4_xr5_1[35:0] = a32_xr_ff[35:0];
assign a4_xr5_1[126:99] = a10_xr_ff[126:99];
// *** 4th level to 5th level ***
// a3_csa3_1_s_ff[82:0] a3_csa3_1_c_ff[82:2]
// a2_csa3_2_s_ff[100:16] a2_csa3_1_c_ff[100:20]
// a1_csa3_3_s_ff[118:34] a1_csa3_3_c_ff[118:38]
// a0_csa3_4_s_ff[135:52] a0_csa3_4_c_ff[129:56]
fgu_fpy_dp_csa42_macro__stack_88c__width_3 a4_csa4_1a (
.i2 ({ a2_csa3_2_c_ff[100:98] }),
.i3 ({ a2_csa3_2_s_ff[100:98] }),
.cin ( a4_csa4_1b_cout ), // 1 bit
.cout ( a4_csa4_1a_unused ), // 1 bit
.carry( a4_csa4_1_c[101:99] ),
.sum ( a4_csa4_1_s[100:98] ));
fgu_fpy_dp_csa42_macro__stack_96c__width_96 a4_csa4_1b (
.i0 ({ {15{1'b0}}, a3_csa3_1_s_ff[82:2] }),
.i1 ({ {15{1'b0}}, a3_csa3_1_c_ff[82:2] }),
.i2 ({ a2_csa3_2_c_ff[97:20] , {18{1'b0}} }),
.i3 ({ a2_csa3_2_s_ff[97:16] , {14{1'b0}} }),
.cout ( a4_csa4_1b_cout ), // 1 bit
.carry( a4_csa4_1_c[98:3] ),
.sum ( a4_csa4_1_s[97:2] ));
assign a4_csa4_1_s[1:0] = a3_csa3_1_s_ff[1:0];
fgu_fpy_dp_csa42_macro__stack_96c__width_92 a4_csa4_2 (
.i0 ({ {11{1'b0}}, a1_csa3_3_s_ff[118:38] }),
.i1 ({ {11{1'b0}}, a1_csa3_3_c_ff[118:38] }),
.i2 ({ a0_csa3_4_c_ff[129:56], {18{1'b0}} }),
.i3 ({ a0_csa3_4_s_ff[129:52], {14{1'b0}} }),
.cout ( a4_csa4_2_unused ), // 1 bit
.carry( a4_csa4_2_c[130:39] ),
.sum ( a4_csa4_2_s[129:38] ));
assign a4_csa4_2_s[37:34] = a1_csa3_3_s_ff[37:34];
assign a4_csa4_2_s[135:130] = a0_csa3_4_s_ff[135:130];
fgu_fpy_dp_csa42_macro__stack_88c__width_32 a4_csa5_1a (
.i0 ({ {30{1'b0}}, a4_csa4_1_s[100:99] }),
.i1 ({ {29{1'b0}}, a4_csa4_1_c[101:99] }),
.i2 ( a4_csa4_2_c[130:99] ),
.i3 ( a4_csa4_2_s[130:99] ),
.cin ( a4_csa5_1b_cout ), // 1 bit
.cout ( a4_csa5_1a_unused ), // 1 bit
.carry( a4_csa5_1_c[131:100] ),
.sum ( a4_csa5_1_s[130:99] ));
fgu_fpy_dp_csa42_macro__stack_96c__width_96 a4_csa5_1b (
.i0 ( a4_csa4_1_s[98:3] ),
.i1 ( a4_csa4_1_c[98:3] ),
.i2 ({ a4_csa4_2_c[98:39], {36{1'b0}} }),
.i3 ({ a4_csa4_2_s[98:34], {31{1'b0}} }),
.cout ( a4_csa5_1b_cout ), // 1 bit
.carry( a4_csa5_1_c[99:4] ),
.sum ( a4_csa5_1_s[98:3] ));
assign a4_csa5_1_s[2:0] = a4_csa4_1_s[2:0];
assign a4_csa5_1_s[135:131] = a4_csa4_2_s[135:131];
fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a4_s_lo_ff (
.scan_in(i_a4_s_lo_ff_scanin),
.scan_out(i_a4_s_lo_ff_scanout),
.din0( a4_csa5_1_s[63:0] ), // Integer, Float, MA Integer
.din1({a4_8x16csa4_2_s[48:18],
a4_8x16csa4_1_s[31:0]} ), // 8x16
.din2({a4_csa5_1_s[62:0] , 1'b0} ), // MA Integer * 2
.din3( a4_xr5_1[63:0] ), // XOR multiply
.din4({a4_xr5_1[62:0] , 1'b0} ), // XOR multiply * 2
.sel0( fac_scff_sel_fx3[0] ),
.sel1( fac_scff_sel_fx3[1] ),
.sel2( fac_scff_sel_fx3[2] ),
.sel3( fac_scff_sel_fx3[3] ),
.dout( a4_csa5_1_s_ff[63:0] ),
fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_72 i_a4_s_hi_ff (
.scan_in(i_a4_s_hi_ff_scanin),
.scan_out(i_a4_s_hi_ff_scanout),
.din0({a4_csa5_1_s[135:134],
a4_csa5_1_s[133:64]} ), // Integer, Float, MA Integer
a4_8x16csa4_2_s[49]} ), // 8x16
.din2({a4_csa5_1_s[134:133],
a4_csa5_1_s[132:63]} ), // MA Integer * 2
4'b0000,a4_xr5_1[126:64]} ), // XOR multiply
3'b000 ,a4_xr5_1[126:63]} ), // XOR multiply * 2
.sel0( fac_scff_sel_fx3[0] ),
.sel1( fac_scff_sel_fx3[1] ),
.sel2( fac_scff_sel_fx3[2] ),
.sel3( fac_scff_sel_fx3[3] ),
.dout( a4_csa5_1_s_ff[135:64] ),
fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_62 i_a4_c_lo_ff (
.scan_in(i_a4_c_lo_ff_scanin),
.scan_out(i_a4_c_lo_ff_scanout),
.din0({a4_csa5_1_c[63:4],2'b00} ), // Integer, Float, MA Integer
.din1({a4_8x16csa4_2_c[48:20],2'b00,
a4_8x16csa4_1_c[31:2]} ), // 8x16
.din2({a4_csa5_1_c[62:4],3'b000} ), // MA Integer * 2
.sel0( fac_scff_sel_fx3[0] ),
.sel1( fac_scff_sel_fx3[1] ),
.sel2( fac_scff_sel_fx3[2] ),
.dout( a4_csa5_1_c_ff[63:2] ),
assign a4_csa5_1_c_ff[1:0] = 2'b00;
fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_69 i_a4_c_hi_ff (
.scan_in(i_a4_c_hi_ff_scanin),
.scan_out(i_a4_c_hi_ff_scanout),
a4_csa5_1_c[131:64]} ), // Integer, Float, MA Integer
1'b0,a4_8x16csa4_4_c[85:56],2'b00,
a4_8x16csa4_3_c[67:38],3'b000,
a4_8x16csa4_2_c[49]} ), // 8x16
a4_csa5_1_c[130:63]} ), // MA Integer * 2
.sel0( fac_scff_sel_fx3[0] ),
.sel1( fac_scff_sel_fx3[1] ),
.sel2( fac_scff_sel_fx3[2] ),
.dout( a4_csa5_1_c_ff[132:64] ),
// *** *** *** *** *** *** *** *** End : "A4" 8:2 CSA Tree *** *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : Accumulator *** *** *** *** *** ***
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 i_fx4_xor0 (
.din0( a4_csa5_1_s_ff[126:64] ),
.din1( accum_ff[126:64] ),
.dout( xr_fx4[126:64] ));
fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_64 i_fx4_xor1 (
.din0( a4_csa5_1_s_ff[63:0] ),
fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_72 i_accum_ff0 (
.scan_in(i_accum_ff0_scanin),
.scan_out(i_accum_ff0_scanout),
.en ( accum_sel_fx4_b0 ),
.din0({{ 9{1'b0}},xr_fx4[126:64]} ), // XOR w/ ACCUM and >> 0
.din1( {72{1'b0}} ), // XOR w/ ACCUM and >> 64
.din2({{ 9{1'b0}},xr_fx4[126:64]} ), // XOR w/o ACCUM and >> 0
.din3( {72{1'b0}} ), // XOR w/o ACCUM and >> 64
.din4( fya_add_result[135:64] ), // Int w/ or w/o ACCUM and >> 0
.din5({{64{1'b0}},fya_add_result[135:128]} ), // Int w/ or w/o ACCUM and >> 64
.sel0( accum_sel_fx4[2] ),
.sel1( accum_sel_fx4[3] ),
.sel2( accum_sel_fx4[4] ),
.sel3( accum_sel_fx4[5] ),
.sel4( accum_sel_fx4[6] ),
.dout( accum_ff[135:64] ),
fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_64 i_accum_ff1 (
.scan_in(i_accum_ff1_scanin),
.scan_out(i_accum_ff1_scanout),
.en ( accum_sel_fx4_b0 ),
.din0( xr_fx4[63:0] ), // XOR w/ ACCUM and >> 0
.din1({1'b0,xr_fx4[126:64]} ), // XOR w/ ACCUM and >> 64
.din2( xr_fx4[63:0] ), // XOR w/o ACCUM and >> 0
.din3({1'b0,xr_fx4[126:64]} ), // XOR w/o ACCUM and >> 64
.din4( fya_add_result[63:0] ), // Int w/ or w/o ACCUM and >> 0
.din5( fya_add_result[127:64] ), // Int w/ or w/o ACCUM and >> 64
.sel0( accum_sel_fx4[2] ),
.sel1( accum_sel_fx4[3] ),
.sel2( accum_sel_fx4[4] ),
.sel3( accum_sel_fx4[5] ),
.sel4( accum_sel_fx4[6] ),
assign fgu_accum_b0_fx5 = accum_ff[0];
// *** *** *** *** *** *** *** *** End : Accumulator *** *** *** *** *** ***
fgu_fpy_dp_msff_macro__stack_88c__width_4 i_accum_sel_b1_ff (
.scan_in(i_accum_sel_b1_ff_scanin),
.scan_out(i_accum_sel_b1_ff_scanout),
.din ({4{fac_accum_sel_fx3[1]}} ),
.dout( accum_sel_fx4_b1[3:0]),
// *** *** *** *** *** *** *** *** Start : Custom add136 *** *** *** *** *** ***
.din0 ( a4_csa5_1_s_ff[135:0] ),
.din1 ( a4_csa5_1_c_ff[132:0] ),
.din2 ( accum_ff[135:0] ),
.sel_din2 ( accum_sel_fx4_b1[3:0] ),
.sum ( fya_add_result[135:0] ),
.fya_sticky_dp ( fya_sticky_dp ),
.fya_sticky_sp ( fya_sticky_sp ),
.fya_xicc_z ( fya_xicc_z[1:0] ));
// *** *** *** *** *** *** *** *** End : Custom add136 *** *** *** *** *** ***
// *** *** *** *** *** *** *** *** Start : Output Flop *** *** *** *** *** ***
fgu_fpy_dp_buff_macro__stack_88c__width_1 i_fpy_fp_result_fx4_b63_buf (
.din (fya_add_result[127] ),
.dout(fpy_fp_result_fx4_b63));
// 8x16 data is packed in FYA_ADD_RESULT as follows :
// 103:99 98 97:66 65 64:33 32 31:00
// ------ ----- ----- -----
fgu_fpy_dp_msff_macro__mux_aope__ports_7__stack_88c__width_68 i_fx5_ff (
.scan_in(i_fx5_ff_scanin),
.scan_out(i_fx5_ff_scanout),
fya_add_result[122:107] ,
fya_add_result[23:8] } ), // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
fya_add_result[130:115] ,
fya_add_result[31:16] } ), // [1] : FMUL8ULx16
fya_add_result[122:99],8'h00 ,
fya_add_result[89:66] ,8'h00 } ), // [2] : FMULD8SUx16
fya_add_result[97:66] } ), // [3] : FMULD8ULx16
xr_fx4[63:0] } ), // [4] : XOR multiply w/ ACCUMUMATE
{9{1'b0}} } ), // [5] : Float
fya_add_result[63:0] } ), // Def : Integer, MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE;
.sel0( fac_result_sel_fx4[0] ),
.sel1( fac_result_sel_fx4[1] ),
.sel2( fac_result_sel_fx4[2] ),
.sel3( fac_result_sel_fx4[3] ),
.sel4( fac_result_sel_fx4[4] ),
.sel5( fac_result_sel_fx4[5] ),
.dout({fpy_xicc_z_fx5[1:0] ,
fgu_mul_result_fx5[63:0] } ),
fgu_fpy_dp_msff_macro__mux_aope__ports_2__stack_88c__width_64 i_ma_result_ff (
.scan_in(i_ma_result_ff_scanin),
.scan_out(i_ma_result_ff_scanout),
.en ( fac_ma_result_en_fx4 ),
.din0( xr_fx4[63:0] ), // [4] : XOR multiply w/ ACCUMUMATE
.din1( fya_add_result[63:0] ), // Def : MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE;
.sel0( fac_result_sel_fx4[4] ),
.dout( ma_result_ff[63:0] ),
// *** *** *** *** *** *** *** *** End : Output Flop *** *** *** *** *** ***
assign i_spu_rs1_ff_scanin = scan_in ;
assign i_spu_rs2_ff_scanin = i_spu_rs1_ff_scanout ;
assign i_3x_ff_scanin = i_spu_rs2_ff_scanout ;
assign i_a3_be_ff_scanin = i_3x_ff_scanout ;
assign i_a3_rs2_ff_scanin = i_a3_be_ff_scanout ;
assign i_a3_s_ff_a_scanin = i_a3_rs2_ff_scanout ;
assign i_a3_s_ff_b_scanin = i_a3_s_ff_a_scanout ;
assign i_a3_c_ff_a_scanin = i_a3_s_ff_b_scanout ;
assign i_a3_c_ff_b_scanin = i_a3_c_ff_a_scanout ;
assign i_a32_x_ff_a_scanin = i_a3_c_ff_b_scanout ;
assign i_a32_x_ff_b_scanin = i_a32_x_ff_a_scanout ;
assign i_a2_be_ff_a_scanin = i_a32_x_ff_b_scanout ;
assign i_a2_be_ff_b_scanin = i_a2_be_ff_a_scanout ;
assign i_a2_rs2_ff_scanin = i_a2_be_ff_b_scanout ;
assign i_a2_s_ff_a_scanin = i_a2_rs2_ff_scanout ;
assign i_a2_s_ff_b_scanin = i_a2_s_ff_a_scanout ;
assign i_a2_c_ff_a_scanin = i_a2_s_ff_b_scanout ;
assign i_a2_c_ff_b_scanin = i_a2_c_ff_a_scanout ;
assign i_a1_be_ff_scanin = i_a2_c_ff_b_scanout ;
assign i_a1_rs2_ff_scanin = i_a1_be_ff_scanout ;
assign i_a1_s_ff_a_scanin = i_a1_rs2_ff_scanout ;
assign i_a1_s_ff_b_scanin = i_a1_s_ff_a_scanout ;
assign i_a1_c_ff_a_scanin = i_a1_s_ff_b_scanout ;
assign i_a1_c_ff_b_scanin = i_a1_c_ff_a_scanout ;
assign i_a10_x_ff_a_scanin = i_a1_c_ff_b_scanout ;
assign i_a10_x_ff_b_scanin = i_a10_x_ff_a_scanout ;
assign i_a0_be_ff_scanin = i_a10_x_ff_b_scanout ;
assign i_a0_rs2_ff_scanin = i_a0_be_ff_scanout ;
assign i_a0_s_ff_a_scanin = i_a0_rs2_ff_scanout ;
assign i_a0_s_ff_b_scanin = i_a0_s_ff_a_scanout ;
assign i_a0_c_ff_a_scanin = i_a0_s_ff_b_scanout ;
assign i_a0_c_ff_b_scanin = i_a0_c_ff_a_scanout ;
assign i_a4_s_lo_ff_scanin = i_a0_c_ff_b_scanout ;
assign i_a4_s_hi_ff_scanin = i_a4_s_lo_ff_scanout ;
assign i_a4_c_lo_ff_scanin = i_a4_s_hi_ff_scanout ;
assign i_a4_c_hi_ff_scanin = i_a4_c_lo_ff_scanout ;
assign i_accum_ff0_scanin = i_a4_c_hi_ff_scanout ;
assign i_accum_ff1_scanin = i_accum_ff0_scanout ;
assign i_accum_sel_b1_ff_scanin = i_accum_ff1_scanout ;
assign i_fx5_ff_scanin = i_accum_sel_b1_ff_scanout;
assign i_ma_result_ff_scanin = i_fx5_ff_scanout ;
assign scan_out = i_ma_result_ff_scanout ;
module fgu_fpy_dp_buff_macro__dbuff_32x__rep_1__stack_88c__width_4 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__minbuff_1__stack_88c__width_64 (
.so({so[62:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_64 (
.so({so[62:0],scan_out}),
module fgu_fpy_dp_buff_macro__stack_88c__width_4 (
module fgu_fpy_dp_inv_macro__stack_88c__width_1 (
module fgu_fpy_dp_buff_macro__stack_88c__width_2 (
module fgu_fpy_dp_buff_macro__dbuff_48x__stack_88c__width_1 (
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_mux_macro__mux_pgpe__ports_6__stack_88c__width_69 (
// Booth Encoder with XOR multiply control
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_booth_encode_macro (
cl_dp1_boothenc_4x m0_0 (
// xor macro for ports = 2,3
module fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_65 (
.so({so[63:0],scan_out}),
module fgu_fpy_dp_buff_macro__stack_88c__width_65 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_63 (
.so({so[61:0],scan_out}),
module fgu_fpy_dp_buff_macro__stack_88c__width_3 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 (
.so({so[62:0],scan_out}),
module fgu_fpy_dp_buff_macro__stack_88c__width_64 (
module fgu_fpy_dp_inv_macro__stack_88c__width_64 (
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 (
cl_dp1_muxbuff5_8x c0_0 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa32_macro__stack_88c__width_69 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa32_macro__stack_88c__width_73 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_88c__width_81 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_39 (
.so({so[37:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_44 (
.so({so[42:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_37 (
.so({so[35:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_31 (
.so({so[29:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_41 (
.so({so[39:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 (
.so({so[62:0],scan_out}),
// general mux macro for pass-gate and and-or muxes with/wout priority encoders
// also for pass-gate with decoder
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_mux_macro__mux_aope__ports_2__stack_88c__width_64 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa32_macro__stack_88c__width_68 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_88c__width_74 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_40 (
.so({so[38:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_36 (
.so({so[34:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa32_macro__stack_88c__width_25 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_88c__width_3 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_96c__width_96 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_96c__width_92 (
// i0 i1 i2 i3 | co | carry sum
// ------------|----|-----------
// 0 0 0 1 | 0 | cin ~cin
// 0 0 1 0 | 0 | cin ~cin
// 0 1 0 0 | 0 | cin ~cin
// 0 1 1 1 | 1 | cin ~cin
// 1 0 0 0 | 0 | cin ~cin
// 1 0 1 1 | 1 | cin ~cin
// 1 1 0 1 | 1 | cin ~cin
// 1 1 1 0 | 1 | cin ~cin
// This circuit looks like a compression of 5 terms down
// to 3 term on an individual bit basis. However, the fast
// output "co" from bit position "n" is actually the late input
// "cin" on bit position "n+1". Once a wrapper is written
// around multiple bits, this circuit will give the
// appearance of compressing 4 inputs down to 2 outputs.
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_csa42_macro__stack_88c__width_32 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_72 (
.so({so[70:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_62 (
cl_dp1_muxbuff3_8x c1_0 (
.so({so[60:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_69 (
cl_dp1_muxbuff3_8x c1_0 (
.so({so[67:0],scan_out}),
// xor macro for ports = 2,3
module fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_64 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_72 (
.so({so[70:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_64 (
.so({so[62:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__stack_88c__width_4 (
module fgu_fpy_dp_buff_macro__stack_88c__width_1 (
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_7__stack_88c__width_68 (
.so({so[66:0],scan_out}),
// any PARAMS parms go into naming of macro
module fgu_fpy_dp_msff_macro__mux_aope__ports_2__stack_88c__width_64 (
.so({so[62:0],scan_out}),