// ******************************************************************** // * Exor-And 16 x 16 bits binary multiplier * // * with a result truncated to 16 bits by design * // * exorand technology (registered trademark) * // * www.exorand.com * // * Copyright 2017 * // * * // ******************************************************************** // This Verilog module implements a 16 x 16 bits binary multiplication // providing a result on 16 bits // the truncation is realised by cutting the multiplication array along the diagonal carry // each multiplication line is expanded and unnecessary cells are put in comment // 72 cells are spared over 288 // Gain is (very) roughly 25% of the complexity of the multiplier // Error between 16 bits truncated result and full result over 32 bits // is (also very) roughly around +/- 1 lsb of the 16 bits truncated result // Warning: result can be negative (for example for 0 x 0) // Some work has still to be done to fully master such a design...have fun... module Mult_16x16_BSCB_trunc(x, y, Product); input [16:1] x, y; output [16:1] Product; wire NULL, VCC, rca_in, init_col1; wire [16:1] Product; wire [16:1] l_in_01, k_in_01, e_in_01, h_in_01, l_out_01, k_out_01; wire [16:1] l_in_02, k_in_02, e_in_02, h_in_02, l_out_02, k_out_02; wire [16:1] l_in_03, k_in_03, e_in_03, h_in_03, l_out_03, k_out_03; wire [16:1] l_in_04, k_in_04, e_in_04, h_in_04, l_out_04, k_out_04; wire [16:1] l_in_05, k_in_05, e_in_05, h_in_05, l_out_05, k_out_05; wire [16:1] l_in_06, k_in_06, e_in_06, h_in_06, l_out_06, k_out_06; wire [16:1] l_in_07, k_in_07, e_in_07, h_in_07, l_out_07, k_out_07; wire [16:1] l_in_08, k_in_08, e_in_08, h_in_08, l_out_08, k_out_08; wire [16:1] l_in_09, k_in_09, e_in_09, h_in_09, l_out_09, k_out_09; wire [16:1] l_in_10, k_in_10, e_in_10, h_in_10, l_out_10, k_out_10; wire [16:1] l_in_11, k_in_11, e_in_11, h_in_11, l_out_11, k_out_11; wire [16:1] l_in_12, k_in_12, e_in_12, h_in_12, l_out_12, k_out_12; wire [16:1] l_in_13, k_in_13, e_in_13, h_in_13, l_out_13, k_out_13; wire [16:1] l_in_14, k_in_14, e_in_14, h_in_14, l_out_14, k_out_14; wire [16:1] l_in_15, k_in_15, e_in_15, h_in_15, l_out_15, k_out_15; wire [16:1] l_in_16, k_in_16, e_in_16, h_in_16, l_out_16, k_out_16; wire [16:1] l_in_17, k_in_17, e_in_17, h_in_17, l_out_17, k_out_17; wire [16:1] l_in_18, k_in_18, e_in_18, h_in_18, l_out_18, k_out_18; wire [16:1] ec_in_18, hc_in_18, hb_in_01, enot_in_17, hnot_in_17; wire [32:1] u_BSCB, r_BSCB; assign NULL = 0; assign VCC = 1; // Computation of the multiplicator rows e and h // --------------------------------------------- Init Init_row_01(NULL, y[1], x, e_in_01, hb_in_01); // compute for first column, inversion h Mxor2 FirstCol(x[2], y[1], init_col1); Init Init_row_02(NULL, y[2], x, e_in_02, h_in_02); Init Init_row_03(y[1], y[3], x, e_in_03, h_in_03); Init Init_row_04(y[2], y[4], x, e_in_04, h_in_04); Init Init_row_05(y[3], y[5], x, e_in_05, h_in_05); Init Init_row_06(y[4], y[6], x, e_in_06, h_in_06); Init Init_row_07(y[5], y[7], x, e_in_07, h_in_07); Init Init_row_08(y[6], y[8], x, e_in_08, h_in_08); Init Init_row_09(y[7], y[9], x, e_in_09, h_in_09); Init Init_row_10(y[8], y[10], x, e_in_10, h_in_10); Init Init_row_11(y[9], y[11], x, e_in_11, h_in_11); Init Init_row_12(y[10], y[12], x, e_in_12, h_in_12); Init Init_row_13(y[11], y[13], x, e_in_13, h_in_13); Init Init_row_14(y[12], y[14], x, e_in_14, h_in_14); Init Init_row_15(y[13], y[15], x, e_in_15, h_in_15); Init Init_row_16(y[14], y[16], x, e_in_16, h_in_16); // assuming y[17]=0, y[18]=1 Init Init_row_17(y[15], NULL, x, e_in_17, h_in_17); Init Init_row_18(y[16], VCC, x, e_in_18, h_in_18); // Rows computation cells // ------- line 1 -------------------------------------------------------- // Initialization line 1 // --------------------- // Mxor2 Init_l_01(y[1], x[2], l_in_01[1]); // Mxor2 Init_l_02(y[2], x[3], l_in_01[2]); // Mxor2 Init_l_03(y[3], x[4], l_in_01[3]); // Mxor2 Init_l_04(y[4], x[5], l_in_01[4]); // Mxor2 Init_l_05(y[5], x[6], l_in_01[5]); // Mxor2 Init_l_06(y[6], x[7], l_in_01[6]); // Mxor2 Init_l_07(y[7], x[8], l_in_01[7]); // Mxor2 Init_l_08(y[8], x[9], l_in_01[8]); Mxor2 Init_l_09(y[9], x[10], l_in_01[9]); Mxor2 Init_l_10(y[10], x[11], l_in_01[10]); Mxor2 Init_l_11(y[11], x[12], l_in_01[11]); Mxor2 Init_l_12(y[12], x[13], l_in_01[12]); Mxor2 Init_l_13(y[13], x[14], l_in_01[13]); Mxor2 Init_l_14(y[14], x[15], l_in_01[14]); Mxor2 Init_l_15(y[15], x[16], l_in_01[15]); Mxor2 Init_l_16(y[16], VCC, l_in_01[16]); // initialisation de k, première ligne // MSB k value of first line is set to 1 assign k_in_01[16:1] = 16'b1000000000000000; assign h_in_01[16:1] = {hb_in_01[16:2], init_col1}; // MLine LINE01(l_in_01, k_in_01, e_in_01, h_in_01, l_out_01, k_out_01); // MCell M0101(l_in_01[1], k_in_01[1], e_in_01[1], h_in_01[1], l_out_01[1], k_out_01[1]); // MCell M0102(l_in_01[2], k_in_01[2], e_in_01[2], h_in_01[2], l_out_01[2], k_out_01[2]); // MCell M0103(l_in_01[3], k_in_01[3], e_in_01[3], h_in_01[3], l_out_01[3], k_out_01[3]); // MCell M0104(l_in_01[4], k_in_01[4], e_in_01[4], h_in_01[4], l_out_01[4], k_out_01[4]); // MCell M0105(l_in_01[5], k_in_01[5], e_in_01[5], h_in_01[5], l_out_01[5], k_out_01[5]); // MCell M0106(l_in_01[6], k_in_01[6], e_in_01[6], h_in_01[6], l_out_01[6], k_out_01[6]); // MCell M0107(l_in_01[7], k_in_01[7], e_in_01[7], h_in_01[7], l_out_01[7], k_out_01[7]); // MCell M0108(l_in_01[8], k_in_01[8], e_in_01[8], h_in_01[8], l_out_01[8], k_out_01[8]); MCell M0109(l_in_01[9], k_in_01[9], e_in_01[9], h_in_01[9], l_out_01[9], k_out_01[9]); MCell M0110(l_in_01[10], k_in_01[10], e_in_01[10], h_in_01[10], l_out_01[10], k_out_01[10]); MCell M0111(l_in_01[11], k_in_01[11], e_in_01[11], h_in_01[11], l_out_01[11], k_out_01[11]); MCell M0112(l_in_01[12], k_in_01[12], e_in_01[12], h_in_01[12], l_out_01[12], k_out_01[12]); MCell M0113(l_in_01[13], k_in_01[13], e_in_01[13], h_in_01[13], l_out_01[13], k_out_01[13]); MCell M0114(l_in_01[14], k_in_01[14], e_in_01[14], h_in_01[14], l_out_01[14], k_out_01[14]); MCell M0115(l_in_01[15], k_in_01[15], e_in_01[15], h_in_01[15], l_out_01[15], k_out_01[15]); MCell M0116(l_in_01[16], k_in_01[16], e_in_01[16], h_in_01[16], l_out_01[16], k_out_01[16]); // ------- line 2 -------------------------------------------------------- // initialisation de k, deuxième ligne // Mand2 Init_k2_01(y[1], ~x[2], k_in_02[1]); // Mand2 Init_k2_02(y[2], ~x[3], k_in_02[2]); // Mand2 Init_k2_03(y[3], ~x[4], k_in_02[3]); // Mand2 Init_k2_04(y[4], ~x[5], k_in_02[4]); // Mand2 Init_k2_05(y[5], ~x[6], k_in_02[5]); // Mand2 Init_k2_06(y[6], ~x[7], k_in_02[6]); // Mand2 Init_k2_07(y[7], ~x[8], k_in_02[7]); // Mand2 Init_k2_08(y[8], ~x[9], k_in_02[8]); Mand2 Init_k2_09(y[9], ~x[10], k_in_02[9]); Mand2 Init_k2_10(y[10], ~x[11], k_in_02[10]); Mand2 Init_k2_11(y[11], ~x[12], k_in_02[11]); Mand2 Init_k2_12(y[12], ~x[13], k_in_02[12]); Mand2 Init_k2_13(y[13], ~x[14], k_in_02[13]); Mand2 Init_k2_14(y[14], ~x[15], k_in_02[14]); Mand2 Init_k2_15(y[15], ~x[16], k_in_02[15]); // MSB k value of second line is set to 1 assign k_in_02[16] = VCC; assign l_in_02[16:1] = {~y[1], l_out_01[16:2]}; // MLine LINE02(l_in_02, k_in_02, e_in_02, h_in_02, l_out_02, k_out_02); // MCell M0201(l_in_02[1], k_in_02[1], e_in_02[1], h_in_02[1], l_out_02[1], k_out_02[1]); // MCell M0202(l_in_02[2], k_in_02[2], e_in_02[2], h_in_02[2], l_out_02[2], k_out_02[2]); // MCell M0203(l_in_02[3], k_in_02[3], e_in_02[3], h_in_02[3], l_out_02[3], k_out_02[3]); // MCell M0204(l_in_02[4], k_in_02[4], e_in_02[4], h_in_02[4], l_out_02[4], k_out_02[4]); // MCell M0205(l_in_02[5], k_in_02[5], e_in_02[5], h_in_02[5], l_out_02[5], k_out_02[5]); // MCell M0206(l_in_02[6], k_in_02[6], e_in_02[6], h_in_02[6], l_out_02[6], k_out_02[6]); // MCell M0207(l_in_02[7], k_in_02[7], e_in_02[7], h_in_02[7], l_out_02[7], k_out_02[7]); // MCell M0208(l_in_02[8], k_in_02[8], e_in_02[8], h_in_02[8], l_out_02[8], k_out_02[8]); MCell M0209(l_in_02[9], k_in_02[9], e_in_02[9], h_in_02[9], l_out_02[9], k_out_02[9]); MCell M0210(l_in_02[10], k_in_02[10], e_in_02[10], h_in_02[10], l_out_02[10], k_out_02[10]); MCell M0211(l_in_02[11], k_in_02[11], e_in_02[11], h_in_02[11], l_out_02[11], k_out_02[11]); MCell M0212(l_in_02[12], k_in_02[12], e_in_02[12], h_in_02[12], l_out_02[12], k_out_02[12]); MCell M0213(l_in_02[13], k_in_02[13], e_in_02[13], h_in_02[13], l_out_02[13], k_out_02[13]); MCell M0214(l_in_02[14], k_in_02[14], e_in_02[14], h_in_02[14], l_out_02[14], k_out_02[14]); MCell M0215(l_in_02[15], k_in_02[15], e_in_02[15], h_in_02[15], l_out_02[15], k_out_02[15]); MCell M0216(l_in_02[16], k_in_02[16], e_in_02[16], h_in_02[16], l_out_02[16], k_out_02[16]); // ------- line 3 -------------------------------------------------------- assign l_in_03[16:1] = {~y[2], l_out_02[16:2]}; assign k_in_03[16:1] = {1'b1, k_out_01[16:2]}; // MLine LINE03(l_in_03, k_in_03, e_in_03, h_in_03, l_out_03, k_out_03); // MCell M0301(l_in_03[1], k_in_03[1], e_in_03[1], h_in_03[1], l_out_03[1], k_out_03[1]); // MCell M0302(l_in_03[2], k_in_03[2], e_in_03[2], h_in_03[2], l_out_03[2], k_out_03[2]); // MCell M0303(l_in_03[3], k_in_03[3], e_in_03[3], h_in_03[3], l_out_03[3], k_out_03[3]); // MCell M0304(l_in_03[4], k_in_03[4], e_in_03[4], h_in_03[4], l_out_03[4], k_out_03[4]); // MCell M0305(l_in_03[5], k_in_03[5], e_in_03[5], h_in_03[5], l_out_03[5], k_out_03[5]); // MCell M0306(l_in_03[6], k_in_03[6], e_in_03[6], h_in_03[6], l_out_03[6], k_out_03[6]); // MCell M0307(l_in_03[7], k_in_03[7], e_in_03[7], h_in_03[7], l_out_03[7], k_out_03[7]); MCell M0308(l_in_03[8], k_in_03[8], e_in_03[8], h_in_03[8], l_out_03[8], k_out_03[8]); MCell M0309(l_in_03[9], k_in_03[9], e_in_03[9], h_in_03[9], l_out_03[9], k_out_03[9]); MCell M0310(l_in_03[10], k_in_03[10], e_in_03[10], h_in_03[10], l_out_03[10], k_out_03[10]); MCell M0311(l_in_03[11], k_in_03[11], e_in_03[11], h_in_03[11], l_out_03[11], k_out_03[11]); MCell M0312(l_in_03[12], k_in_03[12], e_in_03[12], h_in_03[12], l_out_03[12], k_out_03[12]); MCell M0313(l_in_03[13], k_in_03[13], e_in_03[13], h_in_03[13], l_out_03[13], k_out_03[13]); MCell M0314(l_in_03[14], k_in_03[14], e_in_03[14], h_in_03[14], l_out_03[14], k_out_03[14]); MCell M0315(l_in_03[15], k_in_03[15], e_in_03[15], h_in_03[15], l_out_03[15], k_out_03[15]); MCell M0316(l_in_03[16], k_in_03[16], e_in_03[16], h_in_03[16], l_out_03[16], k_out_03[16]); // ------- line 4 -------------------------------------------------------- assign l_in_04[16:1] = {~y[3], l_out_03[16:2]}; assign k_in_04[16:1] = {1'b1, k_out_02[16:2]}; // MLine LINE04(l_in_04, k_in_04, e_in_04, h_in_04, l_out_04, k_out_04); // MCell M0401(l_in_04[1], k_in_04[1], e_in_04[1], h_in_04[1], l_out_04[1], k_out_04[1]); // MCell M0402(l_in_04[2], k_in_04[2], e_in_04[2], h_in_04[2], l_out_04[2], k_out_04[2]); // MCell M0403(l_in_04[3], k_in_04[3], e_in_04[3], h_in_04[3], l_out_04[3], k_out_04[3]); // MCell M0404(l_in_04[4], k_in_04[4], e_in_04[4], h_in_04[4], l_out_04[4], k_out_04[4]); // MCell M0405(l_in_04[5], k_in_04[5], e_in_04[5], h_in_04[5], l_out_04[5], k_out_04[5]); // MCell M0406(l_in_04[6], k_in_04[6], e_in_04[6], h_in_04[6], l_out_04[6], k_out_04[6]); // MCell M0407(l_in_04[7], k_in_04[7], e_in_04[7], h_in_04[7], l_out_04[7], k_out_04[7]); MCell M0408(l_in_04[8], k_in_04[8], e_in_04[8], h_in_04[8], l_out_04[8], k_out_04[8]); MCell M0409(l_in_04[9], k_in_04[9], e_in_04[9], h_in_04[9], l_out_04[9], k_out_04[9]); MCell M0410(l_in_04[10], k_in_04[10], e_in_04[10], h_in_04[10], l_out_04[10], k_out_04[10]); MCell M0411(l_in_04[11], k_in_04[11], e_in_04[11], h_in_04[11], l_out_04[11], k_out_04[11]); MCell M0412(l_in_04[12], k_in_04[12], e_in_04[12], h_in_04[12], l_out_04[12], k_out_04[12]); MCell M0413(l_in_04[13], k_in_04[13], e_in_04[13], h_in_04[13], l_out_04[13], k_out_04[13]); MCell M0414(l_in_04[14], k_in_04[14], e_in_04[14], h_in_04[14], l_out_04[14], k_out_04[14]); MCell M0415(l_in_04[15], k_in_04[15], e_in_04[15], h_in_04[15], l_out_04[15], k_out_04[15]); MCell M0416(l_in_04[16], k_in_04[16], e_in_04[16], h_in_04[16], l_out_04[16], k_out_04[16]); // ------- line 5 -------------------------------------------------------- assign l_in_05[16:1] = {~y[4], l_out_04[16:2]}; assign k_in_05[16:1] = {1'b1, k_out_03[16:2]}; // MLine LINE05(l_in_05, k_in_05, e_in_05, h_in_05, l_out_05, k_out_05); // MCell M0501(l_in_05[1], k_in_05[1], e_in_05[1], h_in_05[1], l_out_05[1], k_out_05[1]); // MCell M0502(l_in_05[2], k_in_05[2], e_in_05[2], h_in_05[2], l_out_05[2], k_out_05[2]); // MCell M0503(l_in_05[3], k_in_05[3], e_in_05[3], h_in_05[3], l_out_05[3], k_out_05[3]); // MCell M0504(l_in_05[4], k_in_05[4], e_in_05[4], h_in_05[4], l_out_05[4], k_out_05[4]); // MCell M0505(l_in_05[5], k_in_05[5], e_in_05[5], h_in_05[5], l_out_05[5], k_out_05[5]); // MCell M0506(l_in_05[6], k_in_05[6], e_in_05[6], h_in_05[6], l_out_05[6], k_out_05[6]); MCell M0507(l_in_05[7], k_in_05[7], e_in_05[7], h_in_05[7], l_out_05[7], k_out_05[7]); MCell M0508(l_in_05[8], k_in_05[8], e_in_05[8], h_in_05[8], l_out_05[8], k_out_05[8]); MCell M0509(l_in_05[9], k_in_05[9], e_in_05[9], h_in_05[9], l_out_05[9], k_out_05[9]); MCell M0510(l_in_05[10], k_in_05[10], e_in_05[10], h_in_05[10], l_out_05[10], k_out_05[10]); MCell M0511(l_in_05[11], k_in_05[11], e_in_05[11], h_in_05[11], l_out_05[11], k_out_05[11]); MCell M0512(l_in_05[12], k_in_05[12], e_in_05[12], h_in_05[12], l_out_05[12], k_out_05[12]); MCell M0513(l_in_05[13], k_in_05[13], e_in_05[13], h_in_05[13], l_out_05[13], k_out_05[13]); MCell M0514(l_in_05[14], k_in_05[14], e_in_05[14], h_in_05[14], l_out_05[14], k_out_05[14]); MCell M0515(l_in_05[15], k_in_05[15], e_in_05[15], h_in_05[15], l_out_05[15], k_out_05[15]); MCell M0516(l_in_05[16], k_in_05[16], e_in_05[16], h_in_05[16], l_out_05[16], k_out_05[16]); // ------- line 6 -------------------------------------------------------- assign l_in_06[16:1] = {~y[5], l_out_05[16:2]}; assign k_in_06[16:1] = {1'b1, k_out_04[16:2]}; // MLine LINE06(l_in_06, k_in_06, e_in_06, h_in_06, l_out_06, k_out_06); // MCell M0601(l_in_06[1], k_in_06[1], e_in_06[1], h_in_06[1], l_out_06[1], k_out_06[1]); // MCell M0602(l_in_06[2], k_in_06[2], e_in_06[2], h_in_06[2], l_out_06[2], k_out_06[2]); // MCell M0603(l_in_06[3], k_in_06[3], e_in_06[3], h_in_06[3], l_out_06[3], k_out_06[3]); // MCell M0604(l_in_06[4], k_in_06[4], e_in_06[4], h_in_06[4], l_out_06[4], k_out_06[4]); // MCell M0605(l_in_06[5], k_in_06[5], e_in_06[5], h_in_06[5], l_out_06[5], k_out_06[5]); // MCell M0606(l_in_06[6], k_in_06[6], e_in_06[6], h_in_06[6], l_out_06[6], k_out_06[6]); MCell M0607(l_in_06[7], k_in_06[7], e_in_06[7], h_in_06[7], l_out_06[7], k_out_06[7]); MCell M0608(l_in_06[8], k_in_06[8], e_in_06[8], h_in_06[8], l_out_06[8], k_out_06[8]); MCell M0609(l_in_06[9], k_in_06[9], e_in_06[9], h_in_06[9], l_out_06[9], k_out_06[9]); MCell M0610(l_in_06[10], k_in_06[10], e_in_06[10], h_in_06[10], l_out_06[10], k_out_06[10]); MCell M0611(l_in_06[11], k_in_06[11], e_in_06[11], h_in_06[11], l_out_06[11], k_out_06[11]); MCell M0612(l_in_06[12], k_in_06[12], e_in_06[12], h_in_06[12], l_out_06[12], k_out_06[12]); MCell M0613(l_in_06[13], k_in_06[13], e_in_06[13], h_in_06[13], l_out_06[13], k_out_06[13]); MCell M0614(l_in_06[14], k_in_06[14], e_in_06[14], h_in_06[14], l_out_06[14], k_out_06[14]); MCell M0615(l_in_06[15], k_in_06[15], e_in_06[15], h_in_06[15], l_out_06[15], k_out_06[15]); MCell M0616(l_in_06[16], k_in_06[16], e_in_06[16], h_in_06[16], l_out_06[16], k_out_06[16]); // ------- line 7 -------------------------------------------------------- assign l_in_07[16:1] = {~y[6], l_out_06[16:2]}; assign k_in_07[16:1] = {1'b1, k_out_05[16:2]}; // MLine LINE07(l_in_07, k_in_07, e_in_07, h_in_07, l_out_07, k_out_07); // MCell M0701(l_in_07[1], k_in_07[1], e_in_07[1], h_in_07[1], l_out_07[1], k_out_07[1]); // MCell M0702(l_in_07[2], k_in_07[2], e_in_07[2], h_in_07[2], l_out_07[2], k_out_07[2]); // MCell M0703(l_in_07[3], k_in_07[3], e_in_07[3], h_in_07[3], l_out_07[3], k_out_07[3]); // MCell M0704(l_in_07[4], k_in_07[4], e_in_07[4], h_in_07[4], l_out_07[4], k_out_07[4]); // MCell M0705(l_in_07[5], k_in_07[5], e_in_07[5], h_in_07[5], l_out_07[5], k_out_07[5]); MCell M0706(l_in_07[6], k_in_07[6], e_in_07[6], h_in_07[6], l_out_07[6], k_out_07[6]); MCell M0707(l_in_07[7], k_in_07[7], e_in_07[7], h_in_07[7], l_out_07[7], k_out_07[7]); MCell M0708(l_in_07[8], k_in_07[8], e_in_07[8], h_in_07[8], l_out_07[8], k_out_07[8]); MCell M0709(l_in_07[9], k_in_07[9], e_in_07[9], h_in_07[9], l_out_07[9], k_out_07[9]); MCell M0710(l_in_07[10], k_in_07[10], e_in_07[10], h_in_07[10], l_out_07[10], k_out_07[10]); MCell M0711(l_in_07[11], k_in_07[11], e_in_07[11], h_in_07[11], l_out_07[11], k_out_07[11]); MCell M0712(l_in_07[12], k_in_07[12], e_in_07[12], h_in_07[12], l_out_07[12], k_out_07[12]); MCell M0713(l_in_07[13], k_in_07[13], e_in_07[13], h_in_07[13], l_out_07[13], k_out_07[13]); MCell M0714(l_in_07[14], k_in_07[14], e_in_07[14], h_in_07[14], l_out_07[14], k_out_07[14]); MCell M0715(l_in_07[15], k_in_07[15], e_in_07[15], h_in_07[15], l_out_07[15], k_out_07[15]); MCell M0716(l_in_07[16], k_in_07[16], e_in_07[16], h_in_07[16], l_out_07[16], k_out_07[16]); // ------- line 8 -------------------------------------------------------- assign l_in_08[16:1] = {~y[7], l_out_07[16:2]}; assign k_in_08[16:1] = {1'b1, k_out_06[16:2]}; // MLine LINE08(l_in_08, k_in_08, e_in_08, h_in_08, l_out_08, k_out_08); // MCell M0801(l_in_08[1], k_in_08[1], e_in_08[1], h_in_08[1], l_out_08[1], k_out_08[1]); // MCell M0802(l_in_08[2], k_in_08[2], e_in_08[2], h_in_08[2], l_out_08[2], k_out_08[2]); // MCell M0803(l_in_08[3], k_in_08[3], e_in_08[3], h_in_08[3], l_out_08[3], k_out_08[3]); // MCell M0804(l_in_08[4], k_in_08[4], e_in_08[4], h_in_08[4], l_out_08[4], k_out_08[4]); // MCell M0805(l_in_08[5], k_in_08[5], e_in_08[5], h_in_08[5], l_out_08[5], k_out_08[5]); MCell M0806(l_in_08[6], k_in_08[6], e_in_08[6], h_in_08[6], l_out_08[6], k_out_08[6]); MCell M0807(l_in_08[7], k_in_08[7], e_in_08[7], h_in_08[7], l_out_08[7], k_out_08[7]); MCell M0808(l_in_08[8], k_in_08[8], e_in_08[8], h_in_08[8], l_out_08[8], k_out_08[8]); MCell M0809(l_in_08[9], k_in_08[9], e_in_08[9], h_in_08[9], l_out_08[9], k_out_08[9]); MCell M0810(l_in_08[10], k_in_08[10], e_in_08[10], h_in_08[10], l_out_08[10], k_out_08[10]); MCell M0811(l_in_08[11], k_in_08[11], e_in_08[11], h_in_08[11], l_out_08[11], k_out_08[11]); MCell M0812(l_in_08[12], k_in_08[12], e_in_08[12], h_in_08[12], l_out_08[12], k_out_08[12]); MCell M0813(l_in_08[13], k_in_08[13], e_in_08[13], h_in_08[13], l_out_08[13], k_out_08[13]); MCell M0814(l_in_08[14], k_in_08[14], e_in_08[14], h_in_08[14], l_out_08[14], k_out_08[14]); MCell M0815(l_in_08[15], k_in_08[15], e_in_08[15], h_in_08[15], l_out_08[15], k_out_08[15]); MCell M0816(l_in_08[16], k_in_08[16], e_in_08[16], h_in_08[16], l_out_08[16], k_out_08[16]); // ------- line 9 -------------------------------------------------------- assign l_in_09[16:1] = {~y[8], l_out_08[16:2]}; assign k_in_09[16:1] = {1'b1, k_out_07[16:2]}; // MLine LINE09(l_in_09, k_in_09, e_in_09, h_in_09, l_out_09, k_out_09); // MCell M0901(l_in_09[1], k_in_09[1], e_in_09[1], h_in_09[1], l_out_09[1], k_out_09[1]); // MCell M0902(l_in_09[2], k_in_09[2], e_in_09[2], h_in_09[2], l_out_09[2], k_out_09[2]); // MCell M0903(l_in_09[3], k_in_09[3], e_in_09[3], h_in_09[3], l_out_09[3], k_out_09[3]); // MCell M0904(l_in_09[4], k_in_09[4], e_in_09[4], h_in_09[4], l_out_09[4], k_out_09[4]); MCell M0905(l_in_09[5], k_in_09[5], e_in_09[5], h_in_09[5], l_out_09[5], k_out_09[5]); MCell M0906(l_in_09[6], k_in_09[6], e_in_09[6], h_in_09[6], l_out_09[6], k_out_09[6]); MCell M0907(l_in_09[7], k_in_09[7], e_in_09[7], h_in_09[7], l_out_09[7], k_out_09[7]); MCell M0908(l_in_09[8], k_in_09[8], e_in_09[8], h_in_09[8], l_out_09[8], k_out_09[8]); MCell M0909(l_in_09[9], k_in_09[9], e_in_09[9], h_in_09[9], l_out_09[9], k_out_09[9]); MCell M0910(l_in_09[10], k_in_09[10], e_in_09[10], h_in_09[10], l_out_09[10], k_out_09[10]); MCell M0911(l_in_09[11], k_in_09[11], e_in_09[11], h_in_09[11], l_out_09[11], k_out_09[11]); MCell M0912(l_in_09[12], k_in_09[12], e_in_09[12], h_in_09[12], l_out_09[12], k_out_09[12]); MCell M0913(l_in_09[13], k_in_09[13], e_in_09[13], h_in_09[13], l_out_09[13], k_out_09[13]); MCell M0914(l_in_09[14], k_in_09[14], e_in_09[14], h_in_09[14], l_out_09[14], k_out_09[14]); MCell M0915(l_in_09[15], k_in_09[15], e_in_09[15], h_in_09[15], l_out_09[15], k_out_09[15]); MCell M0916(l_in_09[16], k_in_09[16], e_in_09[16], h_in_09[16], l_out_09[16], k_out_09[16]); // ------- line 10 -------------------------------------------------------- assign l_in_10[16:1] = {~y[9], l_out_09[16:2]}; assign k_in_10[16:1] = {1'b1, k_out_08[16:2]}; // MLine LINE10(l_in_10, k_in_10, e_in_10, h_in_10, l_out_10, k_out_10); // MCell M1001(l_in_10[1], k_in_10[1], e_in_10[1], h_in_10[1], l_out_10[1], k_out_10[1]); // MCell M1002(l_in_10[2], k_in_10[2], e_in_10[2], h_in_10[2], l_out_10[2], k_out_10[2]); // MCell M1003(l_in_10[3], k_in_10[3], e_in_10[3], h_in_10[3], l_out_10[3], k_out_10[3]); // MCell M1004(l_in_10[4], k_in_10[4], e_in_10[4], h_in_10[4], l_out_10[4], k_out_10[4]); MCell M1005(l_in_10[5], k_in_10[5], e_in_10[5], h_in_10[5], l_out_10[5], k_out_10[5]); MCell M1006(l_in_10[6], k_in_10[6], e_in_10[6], h_in_10[6], l_out_10[6], k_out_10[6]); MCell M1007(l_in_10[7], k_in_10[7], e_in_10[7], h_in_10[7], l_out_10[7], k_out_10[7]); MCell M1008(l_in_10[8], k_in_10[8], e_in_10[8], h_in_10[8], l_out_10[8], k_out_10[8]); MCell M1009(l_in_10[9], k_in_10[9], e_in_10[9], h_in_10[9], l_out_10[9], k_out_10[9]); MCell M1010(l_in_10[10], k_in_10[10], e_in_10[10], h_in_10[10], l_out_10[10], k_out_10[10]); MCell M1011(l_in_10[11], k_in_10[11], e_in_10[11], h_in_10[11], l_out_10[11], k_out_10[11]); MCell M1012(l_in_10[12], k_in_10[12], e_in_10[12], h_in_10[12], l_out_10[12], k_out_10[12]); MCell M1013(l_in_10[13], k_in_10[13], e_in_10[13], h_in_10[13], l_out_10[13], k_out_10[13]); MCell M1014(l_in_10[14], k_in_10[14], e_in_10[14], h_in_10[14], l_out_10[14], k_out_10[14]); MCell M1015(l_in_10[15], k_in_10[15], e_in_10[15], h_in_10[15], l_out_10[15], k_out_10[15]); MCell M1016(l_in_10[16], k_in_10[16], e_in_10[16], h_in_10[16], l_out_10[16], k_out_10[16]); // ------- line 11 -------------------------------------------------------- assign l_in_11[16:1] = {~y[10], l_out_10[16:2]}; assign k_in_11[16:1] = {1'b1, k_out_09[16:2]}; // MLine LINE11(l_in_11, k_in_11, e_in_11, h_in_11, l_out_11, k_out_11); // MCell M1101(l_in_11[1], k_in_11[1], e_in_11[1], h_in_11[1], l_out_11[1], k_out_11[1]); // MCell M1102(l_in_11[2], k_in_11[2], e_in_11[2], h_in_11[2], l_out_11[2], k_out_11[2]); // MCell M1103(l_in_11[3], k_in_11[3], e_in_11[3], h_in_11[3], l_out_11[3], k_out_11[3]); MCell M1104(l_in_11[4], k_in_11[4], e_in_11[4], h_in_11[4], l_out_11[4], k_out_11[4]); MCell M1105(l_in_11[5], k_in_11[5], e_in_11[5], h_in_11[5], l_out_11[5], k_out_11[5]); MCell M1106(l_in_11[6], k_in_11[6], e_in_11[6], h_in_11[6], l_out_11[6], k_out_11[6]); MCell M1107(l_in_11[7], k_in_11[7], e_in_11[7], h_in_11[7], l_out_11[7], k_out_11[7]); MCell M1108(l_in_11[8], k_in_11[8], e_in_11[8], h_in_11[8], l_out_11[8], k_out_11[8]); MCell M1109(l_in_11[9], k_in_11[9], e_in_11[9], h_in_11[9], l_out_11[9], k_out_11[9]); MCell M1110(l_in_11[10], k_in_11[10], e_in_11[10], h_in_11[10], l_out_11[10], k_out_11[10]); MCell M1111(l_in_11[11], k_in_11[11], e_in_11[11], h_in_11[11], l_out_11[11], k_out_11[11]); MCell M1112(l_in_11[12], k_in_11[12], e_in_11[12], h_in_11[12], l_out_11[12], k_out_11[12]); MCell M1113(l_in_11[13], k_in_11[13], e_in_11[13], h_in_11[13], l_out_11[13], k_out_11[13]); MCell M1114(l_in_11[14], k_in_11[14], e_in_11[14], h_in_11[14], l_out_11[14], k_out_11[14]); MCell M1115(l_in_11[15], k_in_11[15], e_in_11[15], h_in_11[15], l_out_11[15], k_out_11[15]); MCell M1116(l_in_11[16], k_in_11[16], e_in_11[16], h_in_11[16], l_out_11[16], k_out_11[16]); // ------- line 12 -------------------------------------------------------- assign l_in_12[16:1] = {~y[11], l_out_11[16:2]}; assign k_in_12[16:1] = {1'b1, k_out_10[16:2]}; // MLine LINE12(l_in_12, k_in_12, e_in_12, h_in_12, l_out_12, k_out_12); // MCell M1201(l_in_12[1], k_in_12[1], e_in_12[1], h_in_12[1], l_out_12[1], k_out_12[1]); // MCell M1202(l_in_12[2], k_in_12[2], e_in_12[2], h_in_12[2], l_out_12[2], k_out_12[2]); // MCell M1203(l_in_12[3], k_in_12[3], e_in_12[3], h_in_12[3], l_out_12[3], k_out_12[3]); MCell M1204(l_in_12[4], k_in_12[4], e_in_12[4], h_in_12[4], l_out_12[4], k_out_12[4]); MCell M1205(l_in_12[5], k_in_12[5], e_in_12[5], h_in_12[5], l_out_12[5], k_out_12[5]); MCell M1206(l_in_12[6], k_in_12[6], e_in_12[6], h_in_12[6], l_out_12[6], k_out_12[6]); MCell M1207(l_in_12[7], k_in_12[7], e_in_12[7], h_in_12[7], l_out_12[7], k_out_12[7]); MCell M1208(l_in_12[8], k_in_12[8], e_in_12[8], h_in_12[8], l_out_12[8], k_out_12[8]); MCell M1209(l_in_12[9], k_in_12[9], e_in_12[9], h_in_12[9], l_out_12[9], k_out_12[9]); MCell M1210(l_in_12[10], k_in_12[10], e_in_12[10], h_in_12[10], l_out_12[10], k_out_12[10]); MCell M1211(l_in_12[11], k_in_12[11], e_in_12[11], h_in_12[11], l_out_12[11], k_out_12[11]); MCell M1212(l_in_12[12], k_in_12[12], e_in_12[12], h_in_12[12], l_out_12[12], k_out_12[12]); MCell M1213(l_in_12[13], k_in_12[13], e_in_12[13], h_in_12[13], l_out_12[13], k_out_12[13]); MCell M1214(l_in_12[14], k_in_12[14], e_in_12[14], h_in_12[14], l_out_12[14], k_out_12[14]); MCell M1215(l_in_12[15], k_in_12[15], e_in_12[15], h_in_12[15], l_out_12[15], k_out_12[15]); MCell M1216(l_in_12[16], k_in_12[16], e_in_12[16], h_in_12[16], l_out_12[16], k_out_12[16]); // ------- line 13 -------------------------------------------------------- assign l_in_13[16:1] = {~y[12], l_out_12[16:2]}; assign k_in_13[16:1] = {1'b1, k_out_11[16:2]}; // MLine LINE13(l_in_13, k_in_13, e_in_13, h_in_13, l_out_13, k_out_13); // MCell M1301(l_in_13[1], k_in_13[1], e_in_13[1], h_in_13[1], l_out_13[1], k_out_13[1]); // MCell M1302(l_in_13[2], k_in_13[2], e_in_13[2], h_in_13[2], l_out_13[2], k_out_13[2]); MCell M1303(l_in_13[3], k_in_13[3], e_in_13[3], h_in_13[3], l_out_13[3], k_out_13[3]); MCell M1304(l_in_13[4], k_in_13[4], e_in_13[4], h_in_13[4], l_out_13[4], k_out_13[4]); MCell M1305(l_in_13[5], k_in_13[5], e_in_13[5], h_in_13[5], l_out_13[5], k_out_13[5]); MCell M1306(l_in_13[6], k_in_13[6], e_in_13[6], h_in_13[6], l_out_13[6], k_out_13[6]); MCell M1307(l_in_13[7], k_in_13[7], e_in_13[7], h_in_13[7], l_out_13[7], k_out_13[7]); MCell M1308(l_in_13[8], k_in_13[8], e_in_13[8], h_in_13[8], l_out_13[8], k_out_13[8]); MCell M1309(l_in_13[9], k_in_13[9], e_in_13[9], h_in_13[9], l_out_13[9], k_out_13[9]); MCell M1310(l_in_13[10], k_in_13[10], e_in_13[10], h_in_13[10], l_out_13[10], k_out_13[10]); MCell M1311(l_in_13[11], k_in_13[11], e_in_13[11], h_in_13[11], l_out_13[11], k_out_13[11]); MCell M1312(l_in_13[12], k_in_13[12], e_in_13[12], h_in_13[12], l_out_13[12], k_out_13[12]); MCell M1313(l_in_13[13], k_in_13[13], e_in_13[13], h_in_13[13], l_out_13[13], k_out_13[13]); MCell M1314(l_in_13[14], k_in_13[14], e_in_13[14], h_in_13[14], l_out_13[14], k_out_13[14]); MCell M1315(l_in_13[15], k_in_13[15], e_in_13[15], h_in_13[15], l_out_13[15], k_out_13[15]); MCell M1316(l_in_13[16], k_in_13[16], e_in_13[16], h_in_13[16], l_out_13[16], k_out_13[16]); // ------- line 14 -------------------------------------------------------- assign l_in_14[16:1] = {~y[13], l_out_13[16:2]}; assign k_in_14[16:1] = {1'b1, k_out_12[16:2]}; // MLine LINE14(l_in_14, k_in_14, e_in_14, h_in_14, l_out_14, k_out_14); // MCell M1401(l_in_14[1], k_in_14[1], e_in_14[1], h_in_14[1], l_out_14[1], k_out_14[1]); // MCell M1402(l_in_14[2], k_in_14[2], e_in_14[2], h_in_14[2], l_out_14[2], k_out_14[2]); MCell M1403(l_in_14[3], k_in_14[3], e_in_14[3], h_in_14[3], l_out_14[3], k_out_14[3]); MCell M1404(l_in_14[4], k_in_14[4], e_in_14[4], h_in_14[4], l_out_14[4], k_out_14[4]); MCell M1405(l_in_14[5], k_in_14[5], e_in_14[5], h_in_14[5], l_out_14[5], k_out_14[5]); MCell M1406(l_in_14[6], k_in_14[6], e_in_14[6], h_in_14[6], l_out_14[6], k_out_14[6]); MCell M1407(l_in_14[7], k_in_14[7], e_in_14[7], h_in_14[7], l_out_14[7], k_out_14[7]); MCell M1408(l_in_14[8], k_in_14[8], e_in_14[8], h_in_14[8], l_out_14[8], k_out_14[8]); MCell M1409(l_in_14[9], k_in_14[9], e_in_14[9], h_in_14[9], l_out_14[9], k_out_14[9]); MCell M1410(l_in_14[10], k_in_14[10], e_in_14[10], h_in_14[10], l_out_14[10], k_out_14[10]); MCell M1411(l_in_14[11], k_in_14[11], e_in_14[11], h_in_14[11], l_out_14[11], k_out_14[11]); MCell M1412(l_in_14[12], k_in_14[12], e_in_14[12], h_in_14[12], l_out_14[12], k_out_14[12]); MCell M1413(l_in_14[13], k_in_14[13], e_in_14[13], h_in_14[13], l_out_14[13], k_out_14[13]); MCell M1414(l_in_14[14], k_in_14[14], e_in_14[14], h_in_14[14], l_out_14[14], k_out_14[14]); MCell M1415(l_in_14[15], k_in_14[15], e_in_14[15], h_in_14[15], l_out_14[15], k_out_14[15]); MCell M1416(l_in_14[16], k_in_14[16], e_in_14[16], h_in_14[16], l_out_14[16], k_out_14[16]); // ------- line 15 -------------------------------------------------------- assign l_in_15[16:1] = {~y[14], l_out_14[16:2]}; assign k_in_15[16:1] = {1'b1, k_out_13[16:2]}; // MLine LINE15(l_in_15, k_in_15, e_in_15, h_in_15, l_out_15, k_out_15); // MCell M1501(l_in_15[1], k_in_15[1], e_in_15[1], h_in_15[1], l_out_15[1], k_out_15[1]); MCell M1502(l_in_15[2], k_in_15[2], e_in_15[2], h_in_15[2], l_out_15[2], k_out_15[2]); MCell M1503(l_in_15[3], k_in_15[3], e_in_15[3], h_in_15[3], l_out_15[3], k_out_15[3]); MCell M1504(l_in_15[4], k_in_15[4], e_in_15[4], h_in_15[4], l_out_15[4], k_out_15[4]); MCell M1505(l_in_15[5], k_in_15[5], e_in_15[5], h_in_15[5], l_out_15[5], k_out_15[5]); MCell M1506(l_in_15[6], k_in_15[6], e_in_15[6], h_in_15[6], l_out_15[6], k_out_15[6]); MCell M1507(l_in_15[7], k_in_15[7], e_in_15[7], h_in_15[7], l_out_15[7], k_out_15[7]); MCell M1508(l_in_15[8], k_in_15[8], e_in_15[8], h_in_15[8], l_out_15[8], k_out_15[8]); MCell M1509(l_in_15[9], k_in_15[9], e_in_15[9], h_in_15[9], l_out_15[9], k_out_15[9]); MCell M1510(l_in_15[10], k_in_15[10], e_in_15[10], h_in_15[10], l_out_15[10], k_out_15[10]); MCell M1511(l_in_15[11], k_in_15[11], e_in_15[11], h_in_15[11], l_out_15[11], k_out_15[11]); MCell M1512(l_in_15[12], k_in_15[12], e_in_15[12], h_in_15[12], l_out_15[12], k_out_15[12]); MCell M1513(l_in_15[13], k_in_15[13], e_in_15[13], h_in_15[13], l_out_15[13], k_out_15[13]); MCell M1514(l_in_15[14], k_in_15[14], e_in_15[14], h_in_15[14], l_out_15[14], k_out_15[14]); MCell M1515(l_in_15[15], k_in_15[15], e_in_15[15], h_in_15[15], l_out_15[15], k_out_15[15]); MCell M1516(l_in_15[16], k_in_15[16], e_in_15[16], h_in_15[16], l_out_15[16], k_out_15[16]); // ------- line 16 -------------------------------------------------------- assign l_in_16[16:1] = {~y[15], l_out_15[16:2]}; assign k_in_16[16:1] = {1'b1, k_out_14[16:2]}; // MLine LINE16(l_in_16, k_in_16, e_in_16, h_in_16, l_out_16, k_out_16); // MCell M1601(l_in_16[1], k_in_16[1], e_in_16[1], h_in_16[1], l_out_16[1], k_out_16[1]); MCell M1602(l_in_16[2], k_in_16[2], e_in_16[2], h_in_16[2], l_out_16[2], k_out_16[2]); MCell M1603(l_in_16[3], k_in_16[3], e_in_16[3], h_in_16[3], l_out_16[3], k_out_16[3]); MCell M1604(l_in_16[4], k_in_16[4], e_in_16[4], h_in_16[4], l_out_16[4], k_out_16[4]); MCell M1605(l_in_16[5], k_in_16[5], e_in_16[5], h_in_16[5], l_out_16[5], k_out_16[5]); MCell M1606(l_in_16[6], k_in_16[6], e_in_16[6], h_in_16[6], l_out_16[6], k_out_16[6]); MCell M1607(l_in_16[7], k_in_16[7], e_in_16[7], h_in_16[7], l_out_16[7], k_out_16[7]); MCell M1608(l_in_16[8], k_in_16[8], e_in_16[8], h_in_16[8], l_out_16[8], k_out_16[8]); MCell M1609(l_in_16[9], k_in_16[9], e_in_16[9], h_in_16[9], l_out_16[9], k_out_16[9]); MCell M1610(l_in_16[10], k_in_16[10], e_in_16[10], h_in_16[10], l_out_16[10], k_out_16[10]); MCell M1611(l_in_16[11], k_in_16[11], e_in_16[11], h_in_16[11], l_out_16[11], k_out_16[11]); MCell M1612(l_in_16[12], k_in_16[12], e_in_16[12], h_in_16[12], l_out_16[12], k_out_16[12]); MCell M1613(l_in_16[13], k_in_16[13], e_in_16[13], h_in_16[13], l_out_16[13], k_out_16[13]); MCell M1614(l_in_16[14], k_in_16[14], e_in_16[14], h_in_16[14], l_out_16[14], k_out_16[14]); MCell M1615(l_in_16[15], k_in_16[15], e_in_16[15], h_in_16[15], l_out_16[15], k_out_16[15]); MCell M1616(l_in_16[16], k_in_16[16], e_in_16[16], h_in_16[16], l_out_16[16], k_out_16[16]); // ------- line 17 -------------------------------------------------------- // avec inversion e et h sauf sur la dernière position car la dernière dia gl'est déja assign l_in_17[16:1] = {~y[16], l_out_16[16:2]}; assign k_in_17[16:1] = {1'b1, k_out_15[16:2]}; assign enot_in_17[16:1] = {~e_in_17[16:2], e_in_17[1]}; assign hnot_in_17[16:1] = {~h_in_17[16:2], h_in_17[1]}; // MLine LINE17(l_in_17, k_in_17, enot_in_17, hnot_in_17, l_out_17, k_out_17); MCell M1701(l_in_17[1], k_in_17[1], enot_in_17[1], hnot_in_17[1], l_out_17[1], k_out_17[1]); MCell M1702(l_in_17[2], k_in_17[2], enot_in_17[2], hnot_in_17[2], l_out_17[2], k_out_17[2]); MCell M1703(l_in_17[3], k_in_17[3], enot_in_17[3], hnot_in_17[3], l_out_17[3], k_out_17[3]); MCell M1704(l_in_17[4], k_in_17[4], enot_in_17[4], hnot_in_17[4], l_out_17[4], k_out_17[4]); MCell M1705(l_in_17[5], k_in_17[5], enot_in_17[5], hnot_in_17[5], l_out_17[5], k_out_17[5]); MCell M1706(l_in_17[6], k_in_17[6], enot_in_17[6], hnot_in_17[6], l_out_17[6], k_out_17[6]); MCell M1707(l_in_17[7], k_in_17[7], enot_in_17[7], hnot_in_17[7], l_out_17[7], k_out_17[7]); MCell M1708(l_in_17[8], k_in_17[8], enot_in_17[8], hnot_in_17[8], l_out_17[8], k_out_17[8]); MCell M1709(l_in_17[9], k_in_17[9], enot_in_17[9], hnot_in_17[9], l_out_17[9], k_out_17[9]); MCell M1710(l_in_17[10], k_in_17[10], enot_in_17[10], hnot_in_17[10], l_out_17[10], k_out_17[10]); MCell M1711(l_in_17[11], k_in_17[11], enot_in_17[11], hnot_in_17[11], l_out_17[11], k_out_17[11]); MCell M1712(l_in_17[12], k_in_17[12], enot_in_17[12], hnot_in_17[12], l_out_17[12], k_out_17[12]); MCell M1713(l_in_17[13], k_in_17[13], enot_in_17[13], hnot_in_17[13], l_out_17[13], k_out_17[13]); MCell M1714(l_in_17[14], k_in_17[14], enot_in_17[14], hnot_in_17[14], l_out_17[14], k_out_17[14]); MCell M1715(l_in_17[15], k_in_17[15], enot_in_17[15], hnot_in_17[15], l_out_17[15], k_out_17[15]); MCell M1716(l_in_17[16], k_in_17[16], enot_in_17[16], hnot_in_17[16], l_out_17[16], k_out_17[16]); // ------- line 18 -------------------------------------------------------- // assuming y[17]=0 assign l_in_18[16:1] = {NULL, l_out_17[16:2]}; assign k_in_18[16:1] = {1'b1, k_out_16[16:2]}; // computing e xor C (= k_out_17) // reset of the first value of C = k_out_17[1] // already taken into account in P[16] Mxnor2 Comp_ec_01(e_in_18[1], VCC, ec_in_18[1]); Mxnor2 Comp_ec_02(e_in_18[2], k_out_17[2], ec_in_18[2]); Mxnor2 Comp_ec_03(e_in_18[3], k_out_17[3], ec_in_18[3]); Mxnor2 Comp_ec_04(e_in_18[4], k_out_17[4], ec_in_18[4]); Mxnor2 Comp_ec_05(e_in_18[5], k_out_17[5], ec_in_18[5]); Mxnor2 Comp_ec_06(e_in_18[6], k_out_17[6], ec_in_18[6]); Mxnor2 Comp_ec_07(e_in_18[7], k_out_17[7], ec_in_18[7]); Mxnor2 Comp_ec_08(e_in_18[8], k_out_17[8], ec_in_18[8]); Mxnor2 Comp_ec_09(e_in_18[9], k_out_17[9], ec_in_18[9]); Mxnor2 Comp_ec_10(e_in_18[10], k_out_17[10], ec_in_18[10]); Mxnor2 Comp_ec_11(e_in_18[11], k_out_17[11], ec_in_18[11]); Mxnor2 Comp_ec_12(e_in_18[12], k_out_17[12], ec_in_18[12]); Mxnor2 Comp_ec_13(e_in_18[13], k_out_17[13], ec_in_18[13]); Mxnor2 Comp_ec_14(e_in_18[14], k_out_17[14], ec_in_18[14]); Mxnor2 Comp_ec_15(e_in_18[15], k_out_17[15], ec_in_18[15]); Mxnor2 Comp_ec_16(e_in_18[16], k_out_17[16], ec_in_18[16]); // computing h xor C (= k_out_16) // reset of the first value of C = k_out_17[1] Mxnor2 Comp_hc_01(h_in_18[1], VCC, hc_in_18[1]); Mxnor2 Comp_hc_02(h_in_18[2], k_out_17[2], hc_in_18[2]); Mxnor2 Comp_hc_03(h_in_18[3], k_out_17[3], hc_in_18[3]); Mxnor2 Comp_hc_04(h_in_18[4], k_out_17[4], hc_in_18[4]); Mxnor2 Comp_hc_05(h_in_18[5], k_out_17[5], hc_in_18[5]); Mxnor2 Comp_hc_06(h_in_18[6], k_out_17[6], hc_in_18[6]); Mxnor2 Comp_hc_07(h_in_18[7], k_out_17[7], hc_in_18[7]); Mxnor2 Comp_hc_08(h_in_18[8], k_out_17[8], hc_in_18[8]); Mxnor2 Comp_hc_09(h_in_18[9], k_out_17[9], hc_in_18[9]); Mxnor2 Comp_hc_10(h_in_18[10], k_out_17[10], hc_in_18[10]); Mxnor2 Comp_hc_11(h_in_18[11], k_out_17[11], hc_in_18[11]); Mxnor2 Comp_hc_12(h_in_18[12], k_out_17[12], hc_in_18[12]); Mxnor2 Comp_hc_13(h_in_18[13], k_out_17[13], hc_in_18[13]); Mxnor2 Comp_hc_14(h_in_18[14], k_out_17[14], hc_in_18[14]); Mxnor2 Comp_hc_15(h_in_18[15], k_out_17[15], hc_in_18[15]); Mxnor2 Comp_hc_16(h_in_18[16], k_out_17[16], hc_in_18[16]); // MLine LINE18(l_in_18, k_in_18, ec_in_18, hc_in_18, l_out_18, k_out_18); MCell M1801(l_in_18[1], k_in_18[1], ec_in_18[1], hc_in_18[1], l_out_18[1], k_out_18[1]); MCell M1802(l_in_18[2], k_in_18[2], ec_in_18[2], hc_in_18[2], l_out_18[2], k_out_18[2]); MCell M1803(l_in_18[3], k_in_18[3], ec_in_18[3], hc_in_18[3], l_out_18[3], k_out_18[3]); MCell M1804(l_in_18[4], k_in_18[4], ec_in_18[4], hc_in_18[4], l_out_18[4], k_out_18[4]); MCell M1805(l_in_18[5], k_in_18[5], ec_in_18[5], hc_in_18[5], l_out_18[5], k_out_18[5]); MCell M1806(l_in_18[6], k_in_18[6], ec_in_18[6], hc_in_18[6], l_out_18[6], k_out_18[6]); MCell M1807(l_in_18[7], k_in_18[7], ec_in_18[7], hc_in_18[7], l_out_18[7], k_out_18[7]); MCell M1808(l_in_18[8], k_in_18[8], ec_in_18[8], hc_in_18[8], l_out_18[8], k_out_18[8]); MCell M1809(l_in_18[9], k_in_18[9], ec_in_18[9], hc_in_18[9], l_out_18[9], k_out_18[9]); MCell M1810(l_in_18[10], k_in_18[10], ec_in_18[10], hc_in_18[10], l_out_18[10], k_out_18[10]); MCell M1811(l_in_18[11], k_in_18[11], ec_in_18[11], hc_in_18[11], l_out_18[11], k_out_18[11]); MCell M1812(l_in_18[12], k_in_18[12], ec_in_18[12], hc_in_18[12], l_out_18[12], k_out_18[12]); MCell M1813(l_in_18[13], k_in_18[13], ec_in_18[13], hc_in_18[13], l_out_18[13], k_out_18[13]); MCell M1814(l_in_18[14], k_in_18[14], ec_in_18[14], hc_in_18[14], l_out_18[14], k_out_18[14]); MCell M1815(l_in_18[15], k_in_18[15], ec_in_18[15], hc_in_18[15], l_out_18[15], k_out_18[15]); MCell M1816(l_in_18[16], k_in_18[16], ec_in_18[16], hc_in_18[16], l_out_18[16], k_out_18[16]); // Final ripple carry adder chain // --------------------------------- // assembling the final BSCB result // assign u_BSCB[4:1] = {l_out_05[1], l_out_04[1], l_out_03[1], l_out_02[1]}; // assign u_BSCB[8:5] = {l_out_09[1], l_out_08[1], l_out_07[1], l_out_06[1]}; // assign u_BSCB[12:9] = {l_out_13[1], l_out_12[1], l_out_11[1], l_out_10[1]}; // assign u_BSCB[16:13] = {l_out_17[1], l_out_16[1], l_out_15[1], l_out_14[1]}; assign u_BSCB[20:17] = {l_out_18[4], l_out_18[3], l_out_18[2], l_out_18[1]}; assign u_BSCB[24:21] = {l_out_18[8], l_out_18[7], l_out_18[6], l_out_18[5]}; assign u_BSCB[28:25] = {l_out_18[12], l_out_18[11], l_out_18[10], l_out_18[9]}; assign u_BSCB[32:29] = {l_out_18[16], l_out_18[15], l_out_18[14], l_out_18[13]}; // Mand2 Comp_Cy1(~x[1], ~x[2], rca_in); // Mxor2 rca_xor(k_out_01[1], rca_in, r_BSCB[1]); // assign r_BSCB[4:2] = {k_out_04[1], k_out_03[1], k_out_02[1]}; // assign r_BSCB[8:5] = {k_out_08[1], k_out_07[1], k_out_06[1], k_out_05[1]}; // assign r_BSCB[12:9] = {k_out_12[1], k_out_11[1], k_out_10[1], k_out_09[1]}; // assign r_BSCB[16:13] = {k_out_16[1], k_out_15[1], k_out_14[1], k_out_13[1]}; assign r_BSCB[20:17] = {k_out_18[3], k_out_18[2], k_out_18[1], k_out_17[1]}; assign r_BSCB[24:21] = {k_out_18[7], k_out_18[6], k_out_18[5], k_out_18[4]}; assign r_BSCB[28:25] = {k_out_18[11], k_out_18[10], k_out_18[9], k_out_18[8]}; assign r_BSCB[32:29] = {k_out_18[15], k_out_18[14], k_out_18[13], k_out_18[12]}; // BSCB result is converted to standard binary form // Addition Diagonal RippleCarryAdderLine RCALine1(l_out_17[1], u_BSCB[32:17], r_BSCB[32:17], Product); endmodule // -------------------------------------------------------------- // Functional Model of a line of 16 BSCB RCA adder INPUT:U,R // -------------------------------------------------------------- // use of gates without delay module RippleCarryAdderLine(sign, u_Line, r_Line, P_Line); input [16:1] u_Line, r_Line; input sign; output [16:1] P_Line; wire [16:1] rca_out; wire NULL1; assign NULL1 = 0; RippleCarryAdder RCA01(sign , NULL1, u_Line[1], r_Line[1], rca_out[1], P_Line[1]); RippleCarryAdder RCA02(u_Line[1], rca_out[1], u_Line[2], r_Line[2], rca_out[2], P_Line[2]); RippleCarryAdder RCA03(u_Line[2], rca_out[2], u_Line[3], r_Line[3], rca_out[3], P_Line[3]); RippleCarryAdder RCA04(u_Line[3], rca_out[3], u_Line[4], r_Line[4], rca_out[4], P_Line[4]); RippleCarryAdder RCA05(u_Line[4], rca_out[4], u_Line[5], r_Line[5], rca_out[5], P_Line[5]); RippleCarryAdder RCA06(u_Line[5], rca_out[5], u_Line[6], r_Line[6], rca_out[6], P_Line[6]); RippleCarryAdder RCA07(u_Line[6], rca_out[6], u_Line[7], r_Line[7], rca_out[7], P_Line[7]); RippleCarryAdder RCA08(u_Line[7], rca_out[7], u_Line[8], r_Line[8], rca_out[8], P_Line[8]); RippleCarryAdder RCA09(u_Line[8], rca_out[8], u_Line[9], r_Line[9], rca_out[9], P_Line[9]); RippleCarryAdder RCA10(u_Line[9], rca_out[9], u_Line[10], r_Line[10], rca_out[10], P_Line[10]); RippleCarryAdder RCA11(u_Line[10], rca_out[10], u_Line[11], r_Line[11], rca_out[11], P_Line[11]); RippleCarryAdder RCA12(u_Line[11], rca_out[11], u_Line[12], r_Line[12], rca_out[12], P_Line[12]); RippleCarryAdder RCA13(u_Line[12], rca_out[12], u_Line[13], r_Line[13], rca_out[13], P_Line[13]); RippleCarryAdder RCA14(u_Line[13], rca_out[13], u_Line[14], r_Line[14], rca_out[14], P_Line[14]); RippleCarryAdder RCA15(u_Line[14], rca_out[14], u_Line[15], r_Line[15], rca_out[15], P_Line[15]); RippleCarryAdder RCA16(u_Line[15], rca_out[15], u_Line[16], r_Line[16], rca_out[16], P_Line[16]); endmodule // -------------------------------------------------------------- // Functional Model of a RCA adder (Ripple Carry Adder) INPUT:U,R // -------------------------------------------------------------- // use of gates without delay module RippleCarryAdder(Uin, Rin, U, R, Rout, S); input Uin, Rin, U, R; output Rout,S; wire x00x01, x01x03, x02x03; Mxor2wd X00(R,U,x00x01); Mxnor2wd X01(Uin,x00x01,x01x03); Mxor2wd X02(R,Rin,x02x03); Mand2wd X03(x01x03,x02x03,Rout); Mxor2wd X04(x02x03,U,S); endmodule // ----------------------------------------------- // Functional Model of a MCell Multiplication Cell // ----------------------------------------------- module MCell(l_in, k_in, e_in, h_in, l_out, k_out); input l_in, k_in, e_in, h_in; output l_out, k_out; wire x01x04, x02x04; Mxor2 X01(e_in,l_in, x01x04); Mxor2 X02(k_in, h_in,x02x04); Mxor2 X03(l_in,x02x04,l_out); Mand2 X04(x01x04,x02x04,k_out); endmodule // ---------------------------------------------- // Functional Model of a Line Multiplication Cell // ---------------------------------------------- module MLine(lb_in, kb_in, eb_in, hb_in, lb_out, kb_out); input [16:1] lb_in, kb_in, eb_in, hb_in; output [16:1] lb_out, kb_out; MCell M01(lb_in[1], kb_in[1], eb_in[1], hb_in[1], lb_out[1], kb_out[1]); MCell M02(lb_in[2], kb_in[2], eb_in[2], hb_in[2], lb_out[2], kb_out[2]); MCell M03(lb_in[3], kb_in[3], eb_in[3], hb_in[3], lb_out[3], kb_out[3]); MCell M04(lb_in[4], kb_in[4], eb_in[4], hb_in[4], lb_out[4], kb_out[4]); MCell M05(lb_in[5], kb_in[5], eb_in[5], hb_in[5], lb_out[5], kb_out[5]); MCell M06(lb_in[6], kb_in[6], eb_in[6], hb_in[6], lb_out[6], kb_out[6]); MCell M07(lb_in[7], kb_in[7], eb_in[7], hb_in[7], lb_out[7], kb_out[7]); MCell M08(lb_in[8], kb_in[8], eb_in[8], hb_in[8], lb_out[8], kb_out[8]); MCell M09(lb_in[9], kb_in[9], eb_in[9], hb_in[9], lb_out[9], kb_out[9]); MCell M10(lb_in[10], kb_in[10], eb_in[10], hb_in[10], lb_out[10], kb_out[10]); MCell M11(lb_in[11], kb_in[11], eb_in[11], hb_in[11], lb_out[11], kb_out[11]); MCell M12(lb_in[12], kb_in[12], eb_in[12], hb_in[12], lb_out[12], kb_out[12]); MCell M13(lb_in[13], kb_in[13], eb_in[13], hb_in[13], lb_out[13], kb_out[13]); MCell M14(lb_in[14], kb_in[14], eb_in[14], hb_in[14], lb_out[14], kb_out[14]); MCell M15(lb_in[15], kb_in[15], eb_in[15], hb_in[15], lb_out[15], kb_out[15]); MCell M16(lb_in[16], kb_in[16], eb_in[16], hb_in[16], lb_out[16], kb_out[16]); endmodule // ---------------------------------------------- // Functional Model of a row initialization line // ---------------------------------------------- module Init(y_in_1, y_in_3, xe_in, er_out, hr_out); input [16:1] xe_in; input y_in_1, y_in_3; output [16:1] er_out, hr_out; // e at lsb is inverted Mxor2 Xor_row_01(y_in_3, xe_in[1], er_out[1]); Mxnor2 Xor_row_02(y_in_3, xe_in[2], er_out[2]); Mxnor2 Xor_row_03(y_in_3, xe_in[3], er_out[3]); Mxnor2 Xor_row_04(y_in_3, xe_in[4], er_out[4]); Mxnor2 Xor_row_05(y_in_3, xe_in[5], er_out[5]); Mxnor2 Xor_row_06(y_in_3, xe_in[6], er_out[6]); Mxnor2 Xor_row_07(y_in_3, xe_in[7], er_out[7]); Mxnor2 Xor_row_08(y_in_3, xe_in[8], er_out[8]); Mxnor2 Xor_row_09(y_in_3, xe_in[9], er_out[9]); Mxnor2 Xor_row_10(y_in_3, xe_in[10], er_out[10]); Mxnor2 Xor_row_11(y_in_3, xe_in[11], er_out[11]); Mxnor2 Xor_row_12(y_in_3, xe_in[12], er_out[12]); Mxnor2 Xor_row_13(y_in_3, xe_in[13], er_out[13]); Mxnor2 Xor_row_14(y_in_3, xe_in[14], er_out[14]); Mxnor2 Xor_row_15(y_in_3, xe_in[15], er_out[15]); Mxnor2 Xor_row_16(y_in_3, xe_in[16], er_out[16]); Mxor2 Xor_row_17(y_in_1, y_in_3, y_d); // h at lsb is inverted Mxnor3 Xor_h_01(y_d, xe_in[1], xe_in[2], hr_out[1]); Mxor3 Xor_h_02(y_d, xe_in[2], xe_in[3], hr_out[2]); Mxor3 Xor_h_03(y_d, xe_in[3], xe_in[4], hr_out[3]); Mxor3 Xor_h_04(y_d, xe_in[4], xe_in[5], hr_out[4]); Mxor3 Xor_h_05(y_d, xe_in[5], xe_in[6], hr_out[5]); Mxor3 Xor_h_06(y_d, xe_in[6], xe_in[7], hr_out[6]); Mxor3 Xor_h_07(y_d, xe_in[7], xe_in[8], hr_out[7]); Mxor3 Xor_h_08(y_d, xe_in[8], xe_in[9], hr_out[8]); Mxor3 Xor_h_09(y_d, xe_in[9], xe_in[10], hr_out[9]); Mxor3 Xor_h_10(y_d, xe_in[10], xe_in[11], hr_out[10]); Mxor3 Xor_h_11(y_d, xe_in[11], xe_in[12], hr_out[11]); Mxor3 Xor_h_12(y_d, xe_in[12], xe_in[13], hr_out[12]); Mxor3 Xor_h_13(y_d, xe_in[13], xe_in[14], hr_out[13]); Mxor3 Xor_h_14(y_d, xe_in[14], xe_in[15], hr_out[14]); Mxor3 Xor_h_15(y_d, xe_in[15], xe_in[16], hr_out[15]); Mxor2 Xor_h_16(y_d, xe_in[16], hr_out[16]); endmodule // Behavioral Model of a 2 inputs And gate module Mand2wd(in1, in2, out); input in1, in2; output out; assign out = (in1 & in2); endmodule // Behavioral Model of a 2 inputs Xor gate module Mxor2wd(in1, in2, out); input in1, in2; output out; assign out = in1 ^ in2; endmodule // Behavioral Model of a 2 inputs Xnor gate module Mxnor2wd(in1, in2, out); input in1, in2; output out; assign out = ~(in1 ^ in2); endmodule // Behavioral Model of a 2 inputs And gate module Mand2(in1, in2, out); input in1, in2; output out; // assign # (1) out = (in1 & in2); assign out = (in1 & in2); endmodule // Behavioral Model of a 2 inputs Xor gate module Mxor2(in1, in2, out); input in1, in2; output out; // assign # (20) out = in1 ^ in2; assign out = in1 ^ in2; endmodule // Behavioral Model of a 2 inputs Xnor gate module Mxnor2(in1, in2, out); input in1, in2; output out; // assign # (20) out = ~(in1 ^ in2); assign out = ~(in1 ^ in2); endmodule // Behavioral Model of a 3 inputs Xor gate module Mxor3(in1, in2, in3, out); input in1, in2, in3; output out; // assign # (20) out = in1 ^ in2 ^ in3; assign out = in1 ^ in2 ^ in3; endmodule // Behavioral Model of a 3 inputs 0r gate module Mor3(in1, in2, in3, out); input in1, in2, in3; output out; // assign # (20) out = in1 | in2 | in3; assign out = in1 | in2 | in3; endmodule // Behavioral Model of a 3 inputs Xor gate module Mxnor3(in1, in2, in3, out); input in1, in2, in3; output out; // assign # (20) out = ~(in1 ^ in2 ^ in3); assign out = ~(in1 ^ in2 ^ in3); endmodule // Behavioral Model of an inverter gate module Minv(in1, out); input in1; output out; // assign # (1) out = ~in1; assign out = ~in1; endmodule