// © 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 fu_sa3( vdd, gnd, clkoff_b, act_dis, flush, delay_lclkr, mpw1_b, mpw2_b, sg_1, thold_1, fpu_enable, nclk, f_sa3_si, f_sa3_so, ex2_act_b, f_mul_ex3_sum, f_mul_ex3_car, f_alg_ex3_res, f_sa3_ex4_s_lza, f_sa3_ex4_c_lza, f_sa3_ex4_s_add, f_sa3_ex4_c_add ); inout vdd; inout gnd; input clkoff_b; // tiup input act_dis; // ??tidn?? input flush; // ??tidn?? input [2:3] delay_lclkr; // tidn, input [2:3] mpw1_b; // tidn, input [0:0] mpw2_b; // tidn, input sg_1; input thold_1; input fpu_enable; //dc_act input [0:`NCLK_WIDTH-1] nclk; input f_sa3_si; //perv output f_sa3_so; //perv input ex2_act_b; //act input [54:161] f_mul_ex3_sum; input [54:161] f_mul_ex3_car; input [0:162] f_alg_ex3_res; output [0:162] f_sa3_ex4_s_lza; // data output [53:161] f_sa3_ex4_c_lza; // data output [0:162] f_sa3_ex4_s_add; // data output [53:161] f_sa3_ex4_c_add; // data // ENTITY parameter tiup = 1'b1; parameter tidn = 1'b0; ////################################# ////# sigdef : functional ////################################# wire thold_0_b; wire thold_0; wire force_t; wire sg_0; (* analysis_not_referenced="TRUE" *) wire [0:3] act_spare_unused; wire ex3_act; wire [0:4] act_so; wire [0:4] act_si; wire [0:162] ex4_sum; wire [53:161] ex4_car; wire ex2_act; wire [0:109] ex4_053_sum_si; wire [0:109] ex4_053_sum_so; wire [0:108] ex4_053_car_si; wire [0:108] ex4_053_car_so; wire [0:52] ex4_000_si; wire [0:52] ex4_000_so; wire [0:162] ex4_sum_lza_b; wire [0:162] ex4_sum_add_b; wire [53:161] ex4_car_lza_b; wire [53:161] ex4_car_add_b; wire sa3_ex4_d2clk; wire sa3_ex4_d1clk; wire [0:`NCLK_WIDTH-1] sa3_ex4_lclk; wire [0:52] ex3_alg_b; wire [53:162] ex3_sum_b; wire [53:161] ex3_car_b; wire [55:161] f_alg_ex3_res_b; wire [55:161] f_mul_ex3_sum_b; wire [55:161] f_mul_ex3_car_b; ////################################################################ ////# ex3 logic ////################################################################ // just a 3:2 compressor // // ex3_sum(54 to 159) <= f_mul_ex3_sum(54 to 159) xor f_mul_ex3_car(54 to 159) xor f_alg_ex3_res(54 to 159) ; // ex3_sum(160) <= f_mul_ex3_sum(160) xor f_alg_ex3_res(160) ; // // ex3_car(53 to 158) <= ( f_mul_ex3_sum(54 to 159) and f_mul_ex3_car(54 to 159) ) or // ( f_mul_ex3_sum(54 to 159) and f_alg_ex3_res(54 to 159) ) or // ( f_alg_ex3_res(54 to 159) and f_mul_ex3_car(54 to 159) ) ; // ex3_car(159) <= ( f_mul_ex3_sum(160) and f_alg_ex3_res(160) ) ; //--------------------------------------------------------------- // this model @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ // // aligner 000 001 002 ....... 052 053 054 055 056 .... 158 159 160 161 162 // mul sum xxx xxx xxx ....... xxx xxx 054* 055 056 .... 158 159 160 xxx xxx // mul car xxx xxx xxx ....... xxx xxx 054* 055 056 .... 158 159 xxx xxx xxx // rid PB "1" "1" "1" ....... "1" "1" "1" "0" "0" .... "0" "0" "0" "0" "0" // // 54* is the pseudo bit ... at most 1 is on assign ex3_sum_b[54] = (~((~(f_mul_ex3_sum[54] | f_mul_ex3_car[54])) ^ f_alg_ex3_res[54])); assign ex3_car_b[53] = (~((f_mul_ex3_sum[54] | f_mul_ex3_car[54]) | f_alg_ex3_res[54])); // rest of bits are normal as expected // with 3:2 is it equivalent to invert all the inputs, or invert all the outputs assign ex3_alg_b[0:52] = (~f_alg_ex3_res[0:52]); assign f_alg_ex3_res_b[55:161] = (~(f_alg_ex3_res[55:161])); assign f_mul_ex3_sum_b[55:161] = (~(f_mul_ex3_sum[55:161])); assign f_mul_ex3_car_b[55:161] = (~(f_mul_ex3_car[55:161])); //MLT32_X1_A12TH tri_csa32 res_csa_55( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[55]), //i-- .b(f_mul_ex3_sum_b[55]), //i-- .c(f_mul_ex3_car_b[55]), //i-- .sum(ex3_sum_b[55]), //o-- .car(ex3_car_b[54]) //o-- ); tri_csa32 res_csa_56( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[56]), //i-- .b(f_mul_ex3_sum_b[56]), //i-- .c(f_mul_ex3_car_b[56]), //i-- .sum(ex3_sum_b[56]), //o-- .car(ex3_car_b[55]) //o-- ); tri_csa32 res_csa_57( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[57]), //i-- .b(f_mul_ex3_sum_b[57]), //i-- .c(f_mul_ex3_car_b[57]), //i-- .sum(ex3_sum_b[57]), //o-- .car(ex3_car_b[56]) //o-- ); tri_csa32 res_csa_58( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[58]), //i-- .b(f_mul_ex3_sum_b[58]), //i-- .c(f_mul_ex3_car_b[58]), //i-- .sum(ex3_sum_b[58]), //o-- .car(ex3_car_b[57]) //o-- ); tri_csa32 res_csa_59( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[59]), //i-- .b(f_mul_ex3_sum_b[59]), //i-- .c(f_mul_ex3_car_b[59]), //i-- .sum(ex3_sum_b[59]), //o-- .car(ex3_car_b[58]) //o-- ); tri_csa32 res_csa_60( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[60]), //i-- .b(f_mul_ex3_sum_b[60]), //i-- .c(f_mul_ex3_car_b[60]), //i-- .sum(ex3_sum_b[60]), //o-- .car(ex3_car_b[59]) //o-- ); tri_csa32 res_csa_61( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[61]), //i-- .b(f_mul_ex3_sum_b[61]), //i-- .c(f_mul_ex3_car_b[61]), //i-- .sum(ex3_sum_b[61]), //o-- .car(ex3_car_b[60]) //o-- ); tri_csa32 res_csa_62( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[62]), //i-- .b(f_mul_ex3_sum_b[62]), //i-- .c(f_mul_ex3_car_b[62]), //i-- .sum(ex3_sum_b[62]), //o-- .car(ex3_car_b[61]) //o-- ); tri_csa32 res_csa_63( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[63]), //i-- .b(f_mul_ex3_sum_b[63]), //i-- .c(f_mul_ex3_car_b[63]), //i-- .sum(ex3_sum_b[63]), //o-- .car(ex3_car_b[62]) //o-- ); tri_csa32 res_csa_64( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[64]), //i-- .b(f_mul_ex3_sum_b[64]), //i-- .c(f_mul_ex3_car_b[64]), //i-- .sum(ex3_sum_b[64]), //o-- .car(ex3_car_b[63]) //o-- ); tri_csa32 res_csa_65( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[65]), //i-- .b(f_mul_ex3_sum_b[65]), //i-- .c(f_mul_ex3_car_b[65]), //i-- .sum(ex3_sum_b[65]), //o-- .car(ex3_car_b[64]) //o-- ); tri_csa32 res_csa_66( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[66]), //i-- .b(f_mul_ex3_sum_b[66]), //i-- .c(f_mul_ex3_car_b[66]), //i-- .sum(ex3_sum_b[66]), //o-- .car(ex3_car_b[65]) //o-- ); tri_csa32 res_csa_67( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[67]), //i-- .b(f_mul_ex3_sum_b[67]), //i-- .c(f_mul_ex3_car_b[67]), //i-- .sum(ex3_sum_b[67]), //o-- .car(ex3_car_b[66]) //o-- ); tri_csa32 res_csa_68( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[68]), //i-- .b(f_mul_ex3_sum_b[68]), //i-- .c(f_mul_ex3_car_b[68]), //i-- .sum(ex3_sum_b[68]), //o-- .car(ex3_car_b[67]) //o-- ); tri_csa32 res_csa_69( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[69]), //i-- .b(f_mul_ex3_sum_b[69]), //i-- .c(f_mul_ex3_car_b[69]), //i-- .sum(ex3_sum_b[69]), //o-- .car(ex3_car_b[68]) //o-- ); tri_csa32 res_csa_70( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[70]), //i-- .b(f_mul_ex3_sum_b[70]), //i-- .c(f_mul_ex3_car_b[70]), //i-- .sum(ex3_sum_b[70]), //o-- .car(ex3_car_b[69]) //o-- ); tri_csa32 res_csa_71( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[71]), //i-- .b(f_mul_ex3_sum_b[71]), //i-- .c(f_mul_ex3_car_b[71]), //i-- .sum(ex3_sum_b[71]), //o-- .car(ex3_car_b[70]) //o-- ); tri_csa32 res_csa_72( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[72]), //i-- .b(f_mul_ex3_sum_b[72]), //i-- .c(f_mul_ex3_car_b[72]), //i-- .sum(ex3_sum_b[72]), //o-- .car(ex3_car_b[71]) //o-- ); tri_csa32 res_csa_73( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[73]), //i-- .b(f_mul_ex3_sum_b[73]), //i-- .c(f_mul_ex3_car_b[73]), //i-- .sum(ex3_sum_b[73]), //o-- .car(ex3_car_b[72]) //o-- ); tri_csa32 res_csa_74( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[74]), //i-- .b(f_mul_ex3_sum_b[74]), //i-- .c(f_mul_ex3_car_b[74]), //i-- .sum(ex3_sum_b[74]), //o-- .car(ex3_car_b[73]) //o-- ); tri_csa32 res_csa_75( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[75]), //i-- .b(f_mul_ex3_sum_b[75]), //i-- .c(f_mul_ex3_car_b[75]), //i-- .sum(ex3_sum_b[75]), //o-- .car(ex3_car_b[74]) //o-- ); tri_csa32 res_csa_76( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[76]), //i-- .b(f_mul_ex3_sum_b[76]), //i-- .c(f_mul_ex3_car_b[76]), //i-- .sum(ex3_sum_b[76]), //o-- .car(ex3_car_b[75]) //o-- ); tri_csa32 res_csa_77( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[77]), //i-- .b(f_mul_ex3_sum_b[77]), //i-- .c(f_mul_ex3_car_b[77]), //i-- .sum(ex3_sum_b[77]), //o-- .car(ex3_car_b[76]) //o-- ); tri_csa32 res_csa_78( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[78]), //i-- .b(f_mul_ex3_sum_b[78]), //i-- .c(f_mul_ex3_car_b[78]), //i-- .sum(ex3_sum_b[78]), //o-- .car(ex3_car_b[77]) //o-- ); tri_csa32 res_csa_79( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[79]), //i-- .b(f_mul_ex3_sum_b[79]), //i-- .c(f_mul_ex3_car_b[79]), //i-- .sum(ex3_sum_b[79]), //o-- .car(ex3_car_b[78]) //o-- ); tri_csa32 res_csa_80( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[80]), //i-- .b(f_mul_ex3_sum_b[80]), //i-- .c(f_mul_ex3_car_b[80]), //i-- .sum(ex3_sum_b[80]), //o-- .car(ex3_car_b[79]) //o-- ); tri_csa32 res_csa_81( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[81]), //i-- .b(f_mul_ex3_sum_b[81]), //i-- .c(f_mul_ex3_car_b[81]), //i-- .sum(ex3_sum_b[81]), //o-- .car(ex3_car_b[80]) //o-- ); tri_csa32 res_csa_82( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[82]), //i-- .b(f_mul_ex3_sum_b[82]), //i-- .c(f_mul_ex3_car_b[82]), //i-- .sum(ex3_sum_b[82]), //o-- .car(ex3_car_b[81]) //o-- ); tri_csa32 res_csa_83( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[83]), //i-- .b(f_mul_ex3_sum_b[83]), //i-- .c(f_mul_ex3_car_b[83]), //i-- .sum(ex3_sum_b[83]), //o-- .car(ex3_car_b[82]) //o-- ); tri_csa32 res_csa_84( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[84]), //i-- .b(f_mul_ex3_sum_b[84]), //i-- .c(f_mul_ex3_car_b[84]), //i-- .sum(ex3_sum_b[84]), //o-- .car(ex3_car_b[83]) //o-- ); tri_csa32 res_csa_85( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[85]), //i-- .b(f_mul_ex3_sum_b[85]), //i-- .c(f_mul_ex3_car_b[85]), //i-- .sum(ex3_sum_b[85]), //o-- .car(ex3_car_b[84]) //o-- ); tri_csa32 res_csa_86( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[86]), //i-- .b(f_mul_ex3_sum_b[86]), //i-- .c(f_mul_ex3_car_b[86]), //i-- .sum(ex3_sum_b[86]), //o-- .car(ex3_car_b[85]) //o-- ); tri_csa32 res_csa_87( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[87]), //i-- .b(f_mul_ex3_sum_b[87]), //i-- .c(f_mul_ex3_car_b[87]), //i-- .sum(ex3_sum_b[87]), //o-- .car(ex3_car_b[86]) //o-- ); tri_csa32 res_csa_88( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[88]), //i-- .b(f_mul_ex3_sum_b[88]), //i-- .c(f_mul_ex3_car_b[88]), //i-- .sum(ex3_sum_b[88]), //o-- .car(ex3_car_b[87]) //o-- ); tri_csa32 res_csa_89( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[89]), //i-- .b(f_mul_ex3_sum_b[89]), //i-- .c(f_mul_ex3_car_b[89]), //i-- .sum(ex3_sum_b[89]), //o-- .car(ex3_car_b[88]) //o-- ); tri_csa32 res_csa_90( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[90]), //i-- .b(f_mul_ex3_sum_b[90]), //i-- .c(f_mul_ex3_car_b[90]), //i-- .sum(ex3_sum_b[90]), //o-- .car(ex3_car_b[89]) //o-- ); tri_csa32 res_csa_91( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[91]), //i-- .b(f_mul_ex3_sum_b[91]), //i-- .c(f_mul_ex3_car_b[91]), //i-- .sum(ex3_sum_b[91]), //o-- .car(ex3_car_b[90]) //o-- ); tri_csa32 res_csa_92( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[92]), //i-- .b(f_mul_ex3_sum_b[92]), //i-- .c(f_mul_ex3_car_b[92]), //i-- .sum(ex3_sum_b[92]), //o-- .car(ex3_car_b[91]) //o-- ); tri_csa32 res_csa_93( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[93]), //i-- .b(f_mul_ex3_sum_b[93]), //i-- .c(f_mul_ex3_car_b[93]), //i-- .sum(ex3_sum_b[93]), //o-- .car(ex3_car_b[92]) //o-- ); tri_csa32 res_csa_94( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[94]), //i-- .b(f_mul_ex3_sum_b[94]), //i-- .c(f_mul_ex3_car_b[94]), //i-- .sum(ex3_sum_b[94]), //o-- .car(ex3_car_b[93]) //o-- ); tri_csa32 res_csa_95( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[95]), //i-- .b(f_mul_ex3_sum_b[95]), //i-- .c(f_mul_ex3_car_b[95]), //i-- .sum(ex3_sum_b[95]), //o-- .car(ex3_car_b[94]) //o-- ); tri_csa32 res_csa_96( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[96]), //i-- .b(f_mul_ex3_sum_b[96]), //i-- .c(f_mul_ex3_car_b[96]), //i-- .sum(ex3_sum_b[96]), //o-- .car(ex3_car_b[95]) //o-- ); tri_csa32 res_csa_97( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[97]), //i-- .b(f_mul_ex3_sum_b[97]), //i-- .c(f_mul_ex3_car_b[97]), //i-- .sum(ex3_sum_b[97]), //o-- .car(ex3_car_b[96]) //o-- ); tri_csa32 res_csa_98( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[98]), //i-- .b(f_mul_ex3_sum_b[98]), //i-- .c(f_mul_ex3_car_b[98]), //i-- .sum(ex3_sum_b[98]), //o-- .car(ex3_car_b[97]) //o-- ); tri_csa32 res_csa_99( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[99]), //i-- .b(f_mul_ex3_sum_b[99]), //i-- .c(f_mul_ex3_car_b[99]), //i-- .sum(ex3_sum_b[99]), //o-- .car(ex3_car_b[98]) //o-- ); tri_csa32 res_csa_100( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[100]), //i-- .b(f_mul_ex3_sum_b[100]), //i-- .c(f_mul_ex3_car_b[100]), //i-- .sum(ex3_sum_b[100]), //o-- .car(ex3_car_b[99]) //o-- ); tri_csa32 res_csa_101( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[101]), //i-- .b(f_mul_ex3_sum_b[101]), //i-- .c(f_mul_ex3_car_b[101]), //i-- .sum(ex3_sum_b[101]), //o-- .car(ex3_car_b[100]) //o-- ); tri_csa32 res_csa_102( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[102]), //i-- .b(f_mul_ex3_sum_b[102]), //i-- .c(f_mul_ex3_car_b[102]), //i-- .sum(ex3_sum_b[102]), //o-- .car(ex3_car_b[101]) //o-- ); tri_csa32 res_csa_103( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[103]), //i-- .b(f_mul_ex3_sum_b[103]), //i-- .c(f_mul_ex3_car_b[103]), //i-- .sum(ex3_sum_b[103]), //o-- .car(ex3_car_b[102]) //o-- ); tri_csa32 res_csa_104( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[104]), //i-- .b(f_mul_ex3_sum_b[104]), //i-- .c(f_mul_ex3_car_b[104]), //i-- .sum(ex3_sum_b[104]), //o-- .car(ex3_car_b[103]) //o-- ); tri_csa32 res_csa_105( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[105]), //i-- .b(f_mul_ex3_sum_b[105]), //i-- .c(f_mul_ex3_car_b[105]), //i-- .sum(ex3_sum_b[105]), //o-- .car(ex3_car_b[104]) //o-- ); tri_csa32 res_csa_106( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[106]), //i-- .b(f_mul_ex3_sum_b[106]), //i-- .c(f_mul_ex3_car_b[106]), //i-- .sum(ex3_sum_b[106]), //o-- .car(ex3_car_b[105]) //o-- ); tri_csa32 res_csa_107( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[107]), //i-- .b(f_mul_ex3_sum_b[107]), //i-- .c(f_mul_ex3_car_b[107]), //i-- .sum(ex3_sum_b[107]), //o-- .car(ex3_car_b[106]) //o-- ); tri_csa32 res_csa_108( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[108]), //i-- .b(f_mul_ex3_sum_b[108]), //i-- .c(f_mul_ex3_car_b[108]), //i-- .sum(ex3_sum_b[108]), //o-- .car(ex3_car_b[107]) //o-- ); tri_csa32 res_csa_109( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[109]), //i-- .b(f_mul_ex3_sum_b[109]), //i-- .c(f_mul_ex3_car_b[109]), //i-- .sum(ex3_sum_b[109]), //o-- .car(ex3_car_b[108]) //o-- ); tri_csa32 res_csa_110( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[110]), //i-- .b(f_mul_ex3_sum_b[110]), //i-- .c(f_mul_ex3_car_b[110]), //i-- .sum(ex3_sum_b[110]), //o-- .car(ex3_car_b[109]) //o-- ); tri_csa32 res_csa_111( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[111]), //i-- .b(f_mul_ex3_sum_b[111]), //i-- .c(f_mul_ex3_car_b[111]), //i-- .sum(ex3_sum_b[111]), //o-- .car(ex3_car_b[110]) //o-- ); tri_csa32 res_csa_112( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[112]), //i-- .b(f_mul_ex3_sum_b[112]), //i-- .c(f_mul_ex3_car_b[112]), //i-- .sum(ex3_sum_b[112]), //o-- .car(ex3_car_b[111]) //o-- ); tri_csa32 res_csa_113( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[113]), //i-- .b(f_mul_ex3_sum_b[113]), //i-- .c(f_mul_ex3_car_b[113]), //i-- .sum(ex3_sum_b[113]), //o-- .car(ex3_car_b[112]) //o-- ); tri_csa32 res_csa_114( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[114]), //i-- .b(f_mul_ex3_sum_b[114]), //i-- .c(f_mul_ex3_car_b[114]), //i-- .sum(ex3_sum_b[114]), //o-- .car(ex3_car_b[113]) //o-- ); tri_csa32 res_csa_115( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[115]), //i-- .b(f_mul_ex3_sum_b[115]), //i-- .c(f_mul_ex3_car_b[115]), //i-- .sum(ex3_sum_b[115]), //o-- .car(ex3_car_b[114]) //o-- ); tri_csa32 res_csa_116( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[116]), //i-- .b(f_mul_ex3_sum_b[116]), //i-- .c(f_mul_ex3_car_b[116]), //i-- .sum(ex3_sum_b[116]), //o-- .car(ex3_car_b[115]) //o-- ); tri_csa32 res_csa_117( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[117]), //i-- .b(f_mul_ex3_sum_b[117]), //i-- .c(f_mul_ex3_car_b[117]), //i-- .sum(ex3_sum_b[117]), //o-- .car(ex3_car_b[116]) //o-- ); tri_csa32 res_csa_118( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[118]), //i-- .b(f_mul_ex3_sum_b[118]), //i-- .c(f_mul_ex3_car_b[118]), //i-- .sum(ex3_sum_b[118]), //o-- .car(ex3_car_b[117]) //o-- ); tri_csa32 res_csa_119( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[119]), //i-- .b(f_mul_ex3_sum_b[119]), //i-- .c(f_mul_ex3_car_b[119]), //i-- .sum(ex3_sum_b[119]), //o-- .car(ex3_car_b[118]) //o-- ); tri_csa32 res_csa_120( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[120]), //i-- .b(f_mul_ex3_sum_b[120]), //i-- .c(f_mul_ex3_car_b[120]), //i-- .sum(ex3_sum_b[120]), //o-- .car(ex3_car_b[119]) //o-- ); tri_csa32 res_csa_121( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[121]), //i-- .b(f_mul_ex3_sum_b[121]), //i-- .c(f_mul_ex3_car_b[121]), //i-- .sum(ex3_sum_b[121]), //o-- .car(ex3_car_b[120]) //o-- ); tri_csa32 res_csa_122( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[122]), //i-- .b(f_mul_ex3_sum_b[122]), //i-- .c(f_mul_ex3_car_b[122]), //i-- .sum(ex3_sum_b[122]), //o-- .car(ex3_car_b[121]) //o-- ); tri_csa32 res_csa_123( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[123]), //i-- .b(f_mul_ex3_sum_b[123]), //i-- .c(f_mul_ex3_car_b[123]), //i-- .sum(ex3_sum_b[123]), //o-- .car(ex3_car_b[122]) //o-- ); tri_csa32 res_csa_124( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[124]), //i-- .b(f_mul_ex3_sum_b[124]), //i-- .c(f_mul_ex3_car_b[124]), //i-- .sum(ex3_sum_b[124]), //o-- .car(ex3_car_b[123]) //o-- ); tri_csa32 res_csa_125( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[125]), //i-- .b(f_mul_ex3_sum_b[125]), //i-- .c(f_mul_ex3_car_b[125]), //i-- .sum(ex3_sum_b[125]), //o-- .car(ex3_car_b[124]) //o-- ); tri_csa32 res_csa_126( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[126]), //i-- .b(f_mul_ex3_sum_b[126]), //i-- .c(f_mul_ex3_car_b[126]), //i-- .sum(ex3_sum_b[126]), //o-- .car(ex3_car_b[125]) //o-- ); tri_csa32 res_csa_127( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[127]), //i-- .b(f_mul_ex3_sum_b[127]), //i-- .c(f_mul_ex3_car_b[127]), //i-- .sum(ex3_sum_b[127]), //o-- .car(ex3_car_b[126]) //o-- ); tri_csa32 res_csa_128( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[128]), //i-- .b(f_mul_ex3_sum_b[128]), //i-- .c(f_mul_ex3_car_b[128]), //i-- .sum(ex3_sum_b[128]), //o-- .car(ex3_car_b[127]) //o-- ); tri_csa32 res_csa_129( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[129]), //i-- .b(f_mul_ex3_sum_b[129]), //i-- .c(f_mul_ex3_car_b[129]), //i-- .sum(ex3_sum_b[129]), //o-- .car(ex3_car_b[128]) //o-- ); tri_csa32 res_csa_130( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[130]), //i-- .b(f_mul_ex3_sum_b[130]), //i-- .c(f_mul_ex3_car_b[130]), //i-- .sum(ex3_sum_b[130]), //o-- .car(ex3_car_b[129]) //o-- ); tri_csa32 res_csa_131( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[131]), //i-- .b(f_mul_ex3_sum_b[131]), //i-- .c(f_mul_ex3_car_b[131]), //i-- .sum(ex3_sum_b[131]), //o-- .car(ex3_car_b[130]) //o-- ); tri_csa32 res_csa_132( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[132]), //i-- .b(f_mul_ex3_sum_b[132]), //i-- .c(f_mul_ex3_car_b[132]), //i-- .sum(ex3_sum_b[132]), //o-- .car(ex3_car_b[131]) //o-- ); tri_csa32 res_csa_133( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[133]), //i-- .b(f_mul_ex3_sum_b[133]), //i-- .c(f_mul_ex3_car_b[133]), //i-- .sum(ex3_sum_b[133]), //o-- .car(ex3_car_b[132]) //o-- ); tri_csa32 res_csa_134( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[134]), //i-- .b(f_mul_ex3_sum_b[134]), //i-- .c(f_mul_ex3_car_b[134]), //i-- .sum(ex3_sum_b[134]), //o-- .car(ex3_car_b[133]) //o-- ); tri_csa32 res_csa_135( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[135]), //i-- .b(f_mul_ex3_sum_b[135]), //i-- .c(f_mul_ex3_car_b[135]), //i-- .sum(ex3_sum_b[135]), //o-- .car(ex3_car_b[134]) //o-- ); tri_csa32 res_csa_136( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[136]), //i-- .b(f_mul_ex3_sum_b[136]), //i-- .c(f_mul_ex3_car_b[136]), //i-- .sum(ex3_sum_b[136]), //o-- .car(ex3_car_b[135]) //o-- ); tri_csa32 res_csa_137( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[137]), //i-- .b(f_mul_ex3_sum_b[137]), //i-- .c(f_mul_ex3_car_b[137]), //i-- .sum(ex3_sum_b[137]), //o-- .car(ex3_car_b[136]) //o-- ); tri_csa32 res_csa_138( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[138]), //i-- .b(f_mul_ex3_sum_b[138]), //i-- .c(f_mul_ex3_car_b[138]), //i-- .sum(ex3_sum_b[138]), //o-- .car(ex3_car_b[137]) //o-- ); tri_csa32 res_csa_139( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[139]), //i-- .b(f_mul_ex3_sum_b[139]), //i-- .c(f_mul_ex3_car_b[139]), //i-- .sum(ex3_sum_b[139]), //o-- .car(ex3_car_b[138]) //o-- ); tri_csa32 res_csa_140( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[140]), //i-- .b(f_mul_ex3_sum_b[140]), //i-- .c(f_mul_ex3_car_b[140]), //i-- .sum(ex3_sum_b[140]), //o-- .car(ex3_car_b[139]) //o-- ); tri_csa32 res_csa_141( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[141]), //i-- .b(f_mul_ex3_sum_b[141]), //i-- .c(f_mul_ex3_car_b[141]), //i-- .sum(ex3_sum_b[141]), //o-- .car(ex3_car_b[140]) //o-- ); tri_csa32 res_csa_142( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[142]), //i-- .b(f_mul_ex3_sum_b[142]), //i-- .c(f_mul_ex3_car_b[142]), //i-- .sum(ex3_sum_b[142]), //o-- .car(ex3_car_b[141]) //o-- ); tri_csa32 res_csa_143( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[143]), //i-- .b(f_mul_ex3_sum_b[143]), //i-- .c(f_mul_ex3_car_b[143]), //i-- .sum(ex3_sum_b[143]), //o-- .car(ex3_car_b[142]) //o-- ); tri_csa32 res_csa_144( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[144]), //i-- .b(f_mul_ex3_sum_b[144]), //i-- .c(f_mul_ex3_car_b[144]), //i-- .sum(ex3_sum_b[144]), //o-- .car(ex3_car_b[143]) //o-- ); tri_csa32 res_csa_145( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[145]), //i-- .b(f_mul_ex3_sum_b[145]), //i-- .c(f_mul_ex3_car_b[145]), //i-- .sum(ex3_sum_b[145]), //o-- .car(ex3_car_b[144]) //o-- ); tri_csa32 res_csa_146( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[146]), //i-- .b(f_mul_ex3_sum_b[146]), //i-- .c(f_mul_ex3_car_b[146]), //i-- .sum(ex3_sum_b[146]), //o-- .car(ex3_car_b[145]) //o-- ); tri_csa32 res_csa_147( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[147]), //i-- .b(f_mul_ex3_sum_b[147]), //i-- .c(f_mul_ex3_car_b[147]), //i-- .sum(ex3_sum_b[147]), //o-- .car(ex3_car_b[146]) //o-- ); tri_csa32 res_csa_148( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[148]), //i-- .b(f_mul_ex3_sum_b[148]), //i-- .c(f_mul_ex3_car_b[148]), //i-- .sum(ex3_sum_b[148]), //o-- .car(ex3_car_b[147]) //o-- ); tri_csa32 res_csa_149( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[149]), //i-- .b(f_mul_ex3_sum_b[149]), //i-- .c(f_mul_ex3_car_b[149]), //i-- .sum(ex3_sum_b[149]), //o-- .car(ex3_car_b[148]) //o-- ); tri_csa32 res_csa_150( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[150]), //i-- .b(f_mul_ex3_sum_b[150]), //i-- .c(f_mul_ex3_car_b[150]), //i-- .sum(ex3_sum_b[150]), //o-- .car(ex3_car_b[149]) //o-- ); tri_csa32 res_csa_151( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[151]), //i-- .b(f_mul_ex3_sum_b[151]), //i-- .c(f_mul_ex3_car_b[151]), //i-- .sum(ex3_sum_b[151]), //o-- .car(ex3_car_b[150]) //o-- ); tri_csa32 res_csa_152( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[152]), //i-- .b(f_mul_ex3_sum_b[152]), //i-- .c(f_mul_ex3_car_b[152]), //i-- .sum(ex3_sum_b[152]), //o-- .car(ex3_car_b[151]) //o-- ); tri_csa32 res_csa_153( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[153]), //i-- .b(f_mul_ex3_sum_b[153]), //i-- .c(f_mul_ex3_car_b[153]), //i-- .sum(ex3_sum_b[153]), //o-- .car(ex3_car_b[152]) //o-- ); tri_csa32 res_csa_154( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[154]), //i-- .b(f_mul_ex3_sum_b[154]), //i-- .c(f_mul_ex3_car_b[154]), //i-- .sum(ex3_sum_b[154]), //o-- .car(ex3_car_b[153]) //o-- ); tri_csa32 res_csa_155( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[155]), //i-- .b(f_mul_ex3_sum_b[155]), //i-- .c(f_mul_ex3_car_b[155]), //i-- .sum(ex3_sum_b[155]), //o-- .car(ex3_car_b[154]) //o-- ); tri_csa32 res_csa_156( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[156]), //i-- .b(f_mul_ex3_sum_b[156]), //i-- .c(f_mul_ex3_car_b[156]), //i-- .sum(ex3_sum_b[156]), //o-- .car(ex3_car_b[155]) //o-- ); tri_csa32 res_csa_157( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[157]), //i-- .b(f_mul_ex3_sum_b[157]), //i-- .c(f_mul_ex3_car_b[157]), //i-- .sum(ex3_sum_b[157]), //o-- .car(ex3_car_b[156]) //o-- ); tri_csa32 res_csa_158( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[158]), //i-- .b(f_mul_ex3_sum_b[158]), //i-- .c(f_mul_ex3_car_b[158]), //i-- .sum(ex3_sum_b[158]), //o-- .car(ex3_car_b[157]) //o-- ); tri_csa32 res_csa_159( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[159]), //i-- .b(f_mul_ex3_sum_b[159]), //i-- .c(f_mul_ex3_car_b[159]), //i-- .sum(ex3_sum_b[159]), //o-- .car(ex3_car_b[158]) //o-- ); tri_csa32 res_csa_160( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[160]), //i-- .b(f_mul_ex3_sum_b[160]), //i-- .c(f_mul_ex3_car_b[160]), //i-- .sum(ex3_sum_b[160]), //o-- .car(ex3_car_b[159]) //o-- ); tri_csa32 res_csa_161( .vd(vdd), .gd(gnd), .a(f_alg_ex3_res_b[161]), //i-- .b(f_mul_ex3_sum_b[161]), //i-- .c(f_mul_ex3_car_b[161]), //i-- .sum(ex3_sum_b[161]), //o-- .car(ex3_car_b[160]) //o-- ); assign ex3_sum_b[53] = (~f_alg_ex3_res[53]); assign ex3_sum_b[162] = (~f_alg_ex3_res[162]); assign ex3_car_b[161] = tiup; ////################################################################ ////# functional latches ////################################################################ // 053:068 : 16sum, 16 carry // 069:084 // 085:100 // 101:116 // 117:132 // 133:148 // 149:164 tri_inv_nlats #(.WIDTH(53), .NEEDS_SRESET(0)) ex4_000_lat( .vd(vdd), .gd(gnd), .lclk(sa3_ex4_lclk), //lclk.clk .d1clk(sa3_ex4_d1clk), .d2clk(sa3_ex4_d2clk), .scanin(ex4_000_si), .scanout(ex4_000_so), .d(ex3_alg_b[0:52]), .qb(ex4_sum[0:52]) ); tri_inv_nlats #(.WIDTH(110), .NEEDS_SRESET(0)) ex4_053_sum_lat( .vd(vdd), .gd(gnd), .lclk(sa3_ex4_lclk), //lclk.clk .d1clk(sa3_ex4_d1clk), .d2clk(sa3_ex4_d2clk), .scanin(ex4_053_sum_si), .scanout(ex4_053_sum_so), .d(ex3_sum_b[53:162]), .qb(ex4_sum[53:162]) ); tri_inv_nlats #(.WIDTH(109), .NEEDS_SRESET(0)) ex4_053_car_lat( .vd(vdd), .gd(gnd), .lclk(sa3_ex4_lclk), //lclk.clk .d1clk(sa3_ex4_d1clk), .d2clk(sa3_ex4_d2clk), .scanin(ex4_053_car_si), .scanout(ex4_053_car_so), .d(ex3_car_b[53:161]), .qb(ex4_car[53:161]) ); assign ex4_sum_lza_b[0:162] = (~ex4_sum[0:162]); assign ex4_car_lza_b[53:161] = (~ex4_car[53:161]); assign ex4_sum_add_b[0:162] = (~ex4_sum[0:162]); assign ex4_car_add_b[53:161] = (~ex4_car[53:161]); assign f_sa3_ex4_s_lza[0:162] = (~ex4_sum_lza_b[0:162]); assign f_sa3_ex4_c_lza[53:161] = (~ex4_car_lza_b[53:161]); assign f_sa3_ex4_s_add[0:162] = (~ex4_sum_add_b[0:162]); assign f_sa3_ex4_c_add[53:161] = (~ex4_car_add_b[53:161]); ////################################################################ ////# pervasive ////################################################################ tri_plat thold_reg_0( .vd(vdd), .gd(gnd), .nclk(nclk), .flush(flush), .din(thold_1), .q(thold_0) ); tri_plat sg_reg_0( .vd(vdd), .gd(gnd), .nclk(nclk), .flush(flush), .din(sg_1), .q(sg_0) ); tri_lcbor lcbor_0( .clkoff_b(clkoff_b), .thold(thold_0), .sg(sg_0), .act_dis(act_dis), .force_t(force_t), .thold_b(thold_0_b) ); ////################################################################ ////# act ////################################################################ assign ex2_act = (~ex2_act_b); tri_rlmreg_p #(.WIDTH(5), .NEEDS_SRESET(0)) act_lat( .force_t(force_t), // tidn, .d_mode(tiup), .delay_lclkr(delay_lclkr[2]), // tidn, .mpw1_b(mpw1_b[2]), // tidn, .mpw2_b(mpw2_b[0]), // tidn, .vd(vdd), .gd(gnd), .nclk(nclk), .act(fpu_enable), .thold_b(thold_0_b), .sg(sg_0), .scout(act_so), .scin(act_si), //----------------- .din({ act_spare_unused[0], act_spare_unused[1], ex2_act, act_spare_unused[2], act_spare_unused[3]}), //----------------- .dout({act_spare_unused[0], act_spare_unused[1], ex3_act, act_spare_unused[2], act_spare_unused[3]}) ); tri_lcbnd sa3_ex4_lcb( .delay_lclkr(delay_lclkr[3]), // tidn ,--in .mpw1_b(mpw1_b[3]), // tidn ,--in .mpw2_b(mpw2_b[0]), // tidn ,--in .force_t(force_t), // tidn ,--in .nclk(nclk), //in .vd(vdd), //inout .gd(gnd), //inout .act(ex3_act), //in .sg(sg_0), //in .thold_b(thold_0_b), //in .d1clk(sa3_ex4_d1clk), //out .d2clk(sa3_ex4_d2clk), //out .lclk(sa3_ex4_lclk) //out ); ////################################################################ ////# scan string ////################################################################ assign ex4_053_car_si[0:108] = {ex4_053_car_so[1:108], f_sa3_si}; assign ex4_053_sum_si[0:109] = {ex4_053_sum_so[1:109], ex4_053_car_so[0]}; assign ex4_000_si[0:52] = {ex4_000_so[1:52], ex4_053_sum_so[0]}; assign act_si[0:4] = {act_so[1:4], ex4_000_so[0]}; assign f_sa3_so = act_so[0]; endmodule