source: XOpenSparcT1/trunk/T1-CPU/mul/mul64.v @ 6

Revision 6, 105.2 KB checked in by pntsvt00, 13 years ago (diff)

versione iniziale opensparc

Line 
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T1 Processor File: mul64.v
4// Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
5// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
6//
7// The above named program is free software; you can redistribute it and/or
8// modify it under the terms of the GNU General Public
9// License version 2 as published by the Free Software Foundation.
10//
11// The above named program is distributed in the hope that it will be
12// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14// General Public License for more details.
15//
16// You should have received a copy of the GNU General Public
17// License along with this work; if not, write to the Free Software
18// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19//
20// ========== Copyright Header End ============================================
21/*//////////////////////////////////////////////////////////////////////
22//
23//  Module Name: mul64
24//  Description:        *This block implements the multiplier used in the modular multiplier
25//                       unit (MUL) and be shared by sparc EXU and the streaming unit (SPU).
26//                       It is also used as the 54x54 multiplier in the FPU.
27//                      *It takes two 64-bit unsign data and accumulated operand and do the
28//                       64x64 MAC operation at two cycle thruput and 5 cycle latency.
29//                      *The mul_valid signal indicate the beginning of a new operation.
30//                       It MUST be dis-asserted at the next cycle to have the proper 2-cycle
31//                       latency operation in the csa array. If there are two back-to-back
32//                       cycle operation, the first operation result will be incorrect.
33//                      *Results are avaliable on the 5th cycle of the mul_valid as shows
34//
35//                      *Following inputs should tie to "0" when used as a 64x64 multiplier
36//                       - areg
37//                       - accreg
38//                       - x2
39//
40//                         Cycle-0  | Cycle-1 | Cycle-2 | Cycle-3 | Cycle-4 | Cycle-5
41//                       1st        *         |         |         |         |
42//                       rs1, rs2   ^         |         |         |         | 1st results
43//                       valid=1    | valid=0 |         *         |         | avaliable
44//                                1st         | 2nd OP  ^         |         |
45//                                setup       | valid=1 |         |         |
46//                                            |        2nd        |         |
47//                                            |       setup       |         |
48//
49*/
50
51//FPGA_SYN enables all FPGA related modifications
52`ifdef FPGA_SYN
53`define FPGA_SYN_MUL
54`endif
55
56`ifdef FPGA_SYN_MUL
57module mul64(rs1_l, rs2, valid, areg, accreg, x2, out, rclk, si, so, se, 
58        mul_rst_l, mul_step);
59
60        input   [63:0]          rs1_l;
61        input   [63:0]          rs2;
62        input                   valid;
63        input   [96:0]          areg;
64        input   [135:129]       accreg;
65        input                   x2;
66        input                   rclk;
67        input                   si;
68        input                   se;
69        input                   mul_rst_l;
70        input                   mul_step;
71        output                  so;
72        output  [135:0]         out;
73
74reg [135:0] myout, myout_a1, myout_a2, myout_a3;
75
76reg [63:0] rs1_ff;
77reg [64:0] rs2_ff;
78
79reg [63:0] par1, par2;
80reg [64:0] par3, par4;
81
82reg [5:0] state;
83
84always @(posedge rclk)
85  state <= {valid,state[5:1]};
86
87
88always @(posedge rclk) begin
89  if(mul_step) begin
90    if(valid) begin
91      rs1_ff <= ~rs1_l;
92      rs2_ff <= x2 ? {rs2,1'b0} : {1'b0,rs2};
93    end else begin
94      rs1_ff <= {32'b0, rs1_ff[63:32]};
95    end
96    par1 <= (rs1_ff[31:0] * rs2_ff[31:0]);
97    par3 <= rs1_ff[31:0] * rs2_ff[64:32];
98    myout_a1 <= ({32'b0, myout_a1[135:32]} & {136{state[3]}}) + par1 + {par3, 32'b0} + areg;
99    myout <= {(myout_a1[103:97]+accreg),myout_a1[96:0],myout[63:32]};
100  end 
101end
102
103assign out = myout;
104assign so = 1'b0;
105
106endmodule
107
108`else
109
110
111module mul64 (rs1_l, rs2, valid, areg, accreg, x2, out, rclk, si, so, se, mul_rst_l, mul_step);
112
113input  [63:0]   rs1_l;                  // op1
114input  [63:0]   rs2;                    // op2
115input           valid;                  // begin of the MUL operation
116input  [96:0]   areg;                   // accumulated input for ACCUM
117input  [135:129] accreg;                // direct input from ACCUM [135:129]
118input           x2;                     // for op1*op2*2
119input           rclk, si, se, mul_rst_l, mul_step;
120output          so;
121output [135:0]  out;
122
123wire            cyc1, cyc2, cyc3;       // cycle stage of MUL
124wire [2:0]      b0, b1, b2,  b3,  b4,  b5,  b6,  b7;
125wire [2:0]      b8, b9, b10, b11, b12, b13, b14, b15;
126wire            b16;
127wire [63:0]     op1_l, op1;
128wire [81:0]     a0sum, a1sum, a0s, a1s; 
129wire [81:4]     a0cout, a1cout, a0c, a1c;
130wire            pcoutx2, psumx2;
131wire            x2_c1, x2_c2, x2_c3, x2_c2c3;
132
133wire [98:0]     psum, pcout;
134wire [98:30]    pcout_in, pc;
135wire [98:31]    psum_in, ps;
136wire [96:0]     ary2_cout, addin_cout;
137wire [97:0]     ary2_sum,  addin_sum ;
138wire            add_cin, addin_cin, add_co31, add_co96;
139wire [103:0]    addout;
140wire            clk_enb0, clk_enb1;
141wire            rst;
142wire            clk;
143wire            tm_l;
144
145  assign clk = rclk;
146  assign rst = ~mul_rst_l; 
147  assign tm_l = ~se;
148
149  clken_buf     ckbuf_0(.clk(clk_enb0), .rclk(clk), .enb_l(~mul_step), .tmb_l(tm_l));
150
151  /////////////////////////////////////////////////////////////////////
152  //    States count
153  /////////////////////////////////////////////////////////////////////
154  dffr_s  cyc1_dff(.din(valid), .clk(clk_enb0), .q(cyc1), .rst(rst), .se(se), .si(), .so());
155  dffr_s  cyc2_dff(.din(cyc1),  .clk(clk_enb0), .q(cyc2), .rst(rst), .se(se), .si(), .so());
156  dffr_s  cyc3_dff(.din(cyc2),  .clk(clk_enb0), .q(cyc3), .rst(rst), .se(se), .si(), .so());
157  dffr_s  x2c1_dff(.din(x2),    .clk(clk_enb0), .q(x2_c1), .rst(rst), .se(se), .si(), .so());
158  dffr_s  x2c2_dff(.din(x2_c1), .clk(clk_enb0), .q(x2_c2), .rst(rst), .se(se), .si(), .so());
159  dffr_s  x2c3_dff(.din(x2_c2), .clk(clk_enb0), .q(x2_c3), .rst(rst), .se(se), .si(), .so());
160
161  assign x2_c2c3 =  x2_c2 | x2_c3 ;
162       
163  /////////////////////////////////////////////////////////////////////
164  //    Enable flops for op1
165  /////////////////////////////////////////////////////////////////////
166  clken_buf     ckbuf_1(.clk(clk_enb1), .rclk(clk), .enb_l(~(valid & mul_step)), .tmb_l(tm_l));
167  dff_s #(64)   ffrs1  (.din(rs1_l[63:0]), .clk(clk_enb1), .q(op1_l[63:0]),
168                        .se(se), .si(), .so());
169
170
171
172
173  assign op1[63:0] = ~op1_l[63:0];
174
175  mul_booth      booth (.head (valid),
176                        .b_in (rs2),
177                        .b0   (b0),
178                        .b1   (b1),
179                        .b2   (b2),
180                        .b3   (b3),
181                        .b4   (b4),
182                        .b5   (b5),
183                        .b6   (b6),
184                        .b7   (b7),
185                        .b8   (b8),
186                        .b9   (b9),
187                        .b10  (b10),
188                        .b11  (b11),
189                        .b12  (b12),
190                        .b13  (b13),
191                        .b14  (b14),
192                        .b15  (b15),
193                        .b16  (b16),
194                        .clk  (clk), .se(se), .si(), .so(), .mul_step(mul_step), .tm_l(tm_l));
195                       
196  /////////////////////////////////////////////////////////////////////
197  //    Two Array1 inst ary1_a0 & ary1_a1 with the ouput flops
198  /////////////////////////////////////////////////////////////////////
199  mul_array1    ary1_a0(.cout (a0cout[81:4]),
200                        .sum  (a0sum[81:0]),
201                        .a    (op1),
202                        .b0   (b0),
203                        .b1   (b1),
204                        .b2   (b2),
205                        .b3   (b3),
206                        .b4   (b4),
207                        .b5   (b5),
208                        .b6   (b6),
209                        .b7   (b7),
210                        .b8   (3'b000),
211                        .head (cyc1),
212                        .bot  (1'b0)); //array a is never at the bottom of 33-pp rows
213 
214  dff_s #(78)  a0cot_dff (.din(a0cout[81:4]), .clk(clk_enb0), .q(a0c[81:4]),
215                        .se(se), .si(), .so());
216  dff_s #(82)  a0sum_dff (.din(a0sum[81:0]), .clk(clk_enb0), .q(a0s[81:0]),
217                        .se(se), .si(), .so());
218
219  mul_array1    ary1_a1(.cout (a1cout[81:4]),
220                        .sum  (a1sum[81:0]),
221                        .a    (op1),
222                        .b0   (b8),
223                        .b1   (b9),
224                        .b2   (b10),
225                        .b3   (b11),
226                        .b4   (b12),
227                        .b5   (b13),
228                        .b6   (b14),
229                        .b7   (b15),
230                        .b8   ({1'b0,b16,1'b0}),
231                        .head (1'b0),   //array b is never at the head of 33-pp rows
232                        .bot  (cyc2)); 
233
234  dff_s #(78)  a1cot_dff (.din(a1cout[81:4]), .clk(clk_enb0), .q(a1c[81:4]),
235                        .se(se), .si(), .so());
236  dff_s #(82)  a1sum_dff (.din(a1sum[81:0]), .clk(clk_enb0), .q(a1s[81:0]),
237                        .se(se), .si(), .so());
238
239  /////////////////////////////////////////////////////////////////////
240  //    Array2 with the reorder output mux-flops
241  /////////////////////////////////////////////////////////////////////
242  mul_array2     array2(.pcoutx2 (pcoutx2),
243                        .psumx2  (psumx2),
244                        .pcout   (pcout[98:0]),
245                        .psum    (psum[98:0]), 
246                        .a0c     (a0c[81:4]),
247                        .a0s     (a0s[81:0]),
248                        .a1c     (a1c[81:4]),
249                        .a1s     (a1s[81:0]),
250                        .pc      (pc[98:30]),
251                        .ps      (ps[98:31]),
252                        .areg    (areg[96:0]),
253                        .bot     (cyc3),
254                        .x2      (x2_c2c3));
255 
256  //// Outpput re-order muxes and flops ////
257  dp_mux2es #(97)  ary2_cmux (.dout(ary2_cout[96:0]),
258                              .in0(pcout[96:0]),
259                              .in1({pcout[95:0],pcoutx2}),
260                              .sel(x2_c2c3));
261  dff_s #(97)  a2cot_dff (.din(ary2_cout[96:0]), .clk(clk_enb0), .q(addin_cout[96:0]), 
262                        .se(se), .si(), .so());
263
264  dp_mux2es #(98) ary2_smux (.dout(ary2_sum[97:0]),
265                             .in0(psum[97:0]),
266                             .in1({psum[96:0],psumx2}),
267                             .sel(x2_c2c3));
268  dff_s #(98)  a2sum_dff (.din(ary2_sum[97:0]), .clk(clk_enb0), .q(addin_sum[97:0]), 
269                        .se(se), .si(), .so());
270
271  //// Pseudo sum & cout logic and flops ////
272  assign psum_in[98:32]  = psum[98:32] & {67{cyc2}} ;
273  assign psum_in[31]     = psum[31] & x2_c2 ;
274
275  assign pcout_in[98:31] = pcout[98:31] & {68{cyc2}} ;
276  assign pcout_in[30]    = pcout[30] & x2_c2 ;
277 
278  dff_s #(68)  psum_dff  (.din(psum_in[98:31]), .clk(clk_enb0), .q(ps[98:31]),
279                        .se(se), .si(), .so());
280  dff_s #(69)  pcout_dff (.din(pcout_in[98:30]), .clk(clk_enb0), .q(pc[98:30]),
281                        .se(se), .si(), .so());
282
283  /////////////////////////////////////////////////////////////////////
284  //    Adder (104-bit)
285  /////////////////////////////////////////////////////////////////////
286
287  assign        add_cin = add_co31 & cyc3 ;
288
289  assign {add_co31,addout[31:0]} =   {{1'b0},addin_sum[31:0]} 
290                                   + {{1'b0},addin_cout[30:0],addin_cin} ;
291
292
293  assign {add_co96,addout[96:32]} =  addin_sum[97:32]   
294                                  + addin_cout[96:31]
295                                  + {{65'b0},add_co31} ;
296
297  assign        addout[103:97] =  accreg[135:129] + {{6'b0},add_co96} ;
298
299  /////////////////////////////////////////////////////////////////////
300  //    Pipe adder outputs 
301  /////////////////////////////////////////////////////////////////////
302
303  dff_s               co31_dff (.din(add_cin), .clk(clk_enb0), .q(addin_cin),
304                        .se(se), .si(), .so());
305
306  dff_s #(104)   out_dff (.din(addout[103:0]), .clk(clk_enb0), .q(out[135:32]),
307                        .se(se), .si(), .so());
308
309  dff_s #(32)    pip_dff (.din(out[63:32]), .clk(clk_enb0), .q(out[31:0]),
310                        .se(se), .si(), .so());
311
312endmodule // mul64
313
314
315
316
317////////////////////////////////////////////////////////////////////////
318//      Sub-moudle for mul64
319////////////////////////////////////////////////////////////////////////
320
321module mul_array1 ( cout, sum, a, b0, b1, b2, b3, b4, b5, b6, b7, b8,
322     bot, head );
323
324input  bot, head;
325output [81:4]  cout;
326output [81:0]  sum;
327input [2:0]  b6;
328input [2:0]  b3;
329input [2:0]  b8;
330input [2:0]  b2;
331input [2:0]  b1;
332input [2:0]  b7;
333input [63:0]  a;
334input [2:0]  b0;
335input [2:0]  b4;
336input [2:0]  b5;
337
338// Buses in the design
339
340wire  [1:0]  b5n;
341wire  [1:0]  b2n;
342wire  [68:1]  c0;
343wire  [69:0]  s1;
344wire  [68:1]  c1;
345wire  [69:0]  s2;
346wire  [68:1]  c2;
347wire  [70:4]  s_1;
348wire  [69:2]  s0;
349wire  [76:10]  s_2;
350wire  [70:2]  c_1;
351wire  [76:10]  c_2;
352wire  [75:11]  co;
353
354mul_negen p1n ( .b(b5[2:0]), .n1(b5n[1]), .n0(b5n[0]));
355mul_negen p0n ( .b(b2[2:0]), .n1(b2n[1]), .n0(b2n[0]));
356mul_csa42  sc3_71_ ( .c(s_2[71]), .cin(co[70]), .a(c_1[70]),
357     .b(c_2[70]), .cout(co[71]), .sum(sum[71]), .d(s1[65]),
358     .carry(cout[71]));
359mul_csa42  sc3_75_ ( .c(s_2[75]), .cin(co[74]), .a(1'b0),
360     .b(c_2[74]), .cout(co[75]), .sum(sum[75]), .d(s1[69]),
361     .carry(cout[75]));
362mul_csa42  sc3_74_ ( .c(s_2[74]), .cin(co[73]), .a(1'b0),
363     .b(c_2[73]), .cout(co[74]), .sum(sum[74]), .d(s1[68]),
364     .carry(cout[74]));
365mul_csa42  sc3_73_ ( .c(s_2[73]), .cin(co[72]), .a(1'b0),
366     .b(c_2[72]), .cout(co[73]), .sum(sum[73]), .d(s1[67]),
367     .carry(cout[73]));
368mul_csa42  sc3_72_ ( .c(s_2[72]), .cin(co[71]), .a(1'b0),
369     .b(c_2[71]), .cout(co[72]), .sum(sum[72]), .d(s1[66]),
370     .carry(cout[72]));
371mul_csa42  sc3_76_ ( .c(s_2[76]), .cin(co[75]), .a(1'b0),
372     .b(c_2[75]), .cout(), .sum(sum[76]), .d(1'b0),
373     .carry(cout[76]));
374mul_csa42  sc3_70_ ( .c(s_2[70]), .cin(co[69]), .a(c_1[69]),
375     .b(c_2[69]), .cout(co[70]), .sum(sum[70]), .d(s_1[70]),
376     .carry(cout[70]));
377mul_csa42  sc3_69_ ( .c(s_2[69]), .cin(co[68]), .a(c_1[68]),
378     .b(c_2[68]), .cout(co[69]), .sum(sum[69]), .d(s_1[69]),
379     .carry(cout[69]));
380mul_csa42  sc3_68_ ( .c(s_2[68]), .cin(co[67]), .a(c_1[67]),
381     .b(c_2[67]), .cout(co[68]), .sum(sum[68]), .d(s_1[68]),
382     .carry(cout[68]));
383mul_csa42  sc3_67_ ( .c(s_2[67]), .cin(co[66]), .a(c_1[66]),
384     .b(c_2[66]), .cout(co[67]), .sum(sum[67]), .d(s_1[67]),
385     .carry(cout[67]));
386mul_csa42  sc3_66_ ( .c(s_2[66]), .cin(co[65]), .a(c_1[65]),
387     .b(c_2[65]), .cout(co[66]), .sum(sum[66]), .d(s_1[66]),
388     .carry(cout[66]));
389mul_csa42  sc3_65_ ( .c(s_2[65]), .cin(co[64]), .a(c_1[64]),
390     .b(c_2[64]), .cout(co[65]), .sum(sum[65]), .d(s_1[65]),
391     .carry(cout[65]));
392mul_csa42  sc3_64_ ( .c(s_2[64]), .cin(co[63]), .a(c_1[63]),
393     .b(c_2[63]), .cout(co[64]), .sum(sum[64]), .d(s_1[64]),
394     .carry(cout[64]));
395mul_csa42  sc3_63_ ( .c(s_2[63]), .cin(co[62]), .a(c_1[62]),
396     .b(c_2[62]), .cout(co[63]), .sum(sum[63]), .d(s_1[63]),
397     .carry(cout[63]));
398mul_csa42  sc3_62_ ( .c(s_2[62]), .cin(co[61]), .a(c_1[61]),
399     .b(c_2[61]), .cout(co[62]), .sum(sum[62]), .d(s_1[62]),
400     .carry(cout[62]));
401mul_csa42  sc3_61_ ( .c(s_2[61]), .cin(co[60]), .a(c_1[60]),
402     .b(c_2[60]), .cout(co[61]), .sum(sum[61]), .d(s_1[61]),
403     .carry(cout[61]));
404mul_csa42  sc3_60_ ( .c(s_2[60]), .cin(co[59]), .a(c_1[59]),
405     .b(c_2[59]), .cout(co[60]), .sum(sum[60]), .d(s_1[60]),
406     .carry(cout[60]));
407mul_csa42  sc3_59_ ( .c(s_2[59]), .cin(co[58]), .a(c_1[58]),
408     .b(c_2[58]), .cout(co[59]), .sum(sum[59]), .d(s_1[59]),
409     .carry(cout[59]));
410mul_csa42  sc3_58_ ( .c(s_2[58]), .cin(co[57]), .a(c_1[57]),
411     .b(c_2[57]), .cout(co[58]), .sum(sum[58]), .d(s_1[58]),
412     .carry(cout[58]));
413mul_csa42  sc3_57_ ( .c(s_2[57]), .cin(co[56]), .a(c_1[56]),
414     .b(c_2[56]), .cout(co[57]), .sum(sum[57]), .d(s_1[57]),
415     .carry(cout[57]));
416mul_csa42  sc3_56_ ( .c(s_2[56]), .cin(co[55]), .a(c_1[55]),
417     .b(c_2[55]), .cout(co[56]), .sum(sum[56]), .d(s_1[56]),
418     .carry(cout[56]));
419mul_csa42  sc3_55_ ( .c(s_2[55]), .cin(co[54]), .a(c_1[54]),
420     .b(c_2[54]), .cout(co[55]), .sum(sum[55]), .d(s_1[55]),
421     .carry(cout[55]));
422mul_csa42  sc3_54_ ( .c(s_2[54]), .cin(co[53]), .a(c_1[53]),
423     .b(c_2[53]), .cout(co[54]), .sum(sum[54]), .d(s_1[54]),
424     .carry(cout[54]));
425mul_csa42  sc3_53_ ( .c(s_2[53]), .cin(co[52]), .a(c_1[52]),
426     .b(c_2[52]), .cout(co[53]), .sum(sum[53]), .d(s_1[53]),
427     .carry(cout[53]));
428mul_csa42  sc3_52_ ( .c(s_2[52]), .cin(co[51]), .a(c_1[51]),
429     .b(c_2[51]), .cout(co[52]), .sum(sum[52]), .d(s_1[52]),
430     .carry(cout[52]));
431mul_csa42  sc3_51_ ( .c(s_2[51]), .cin(co[50]), .a(c_1[50]),
432     .b(c_2[50]), .cout(co[51]), .sum(sum[51]), .d(s_1[51]),
433     .carry(cout[51]));
434mul_csa42  sc3_50_ ( .c(s_2[50]), .cin(co[49]), .a(c_1[49]),
435     .b(c_2[49]), .cout(co[50]), .sum(sum[50]), .d(s_1[50]),
436     .carry(cout[50]));
437mul_csa42  sc3_49_ ( .c(s_2[49]), .cin(co[48]), .a(c_1[48]),
438     .b(c_2[48]), .cout(co[49]), .sum(sum[49]), .d(s_1[49]),
439     .carry(cout[49]));
440mul_csa42  sc3_48_ ( .c(s_2[48]), .cin(co[47]), .a(c_1[47]),
441     .b(c_2[47]), .cout(co[48]), .sum(sum[48]), .d(s_1[48]),
442     .carry(cout[48]));
443mul_csa42  sc3_47_ ( .c(s_2[47]), .cin(co[46]), .a(c_1[46]),
444     .b(c_2[46]), .cout(co[47]), .sum(sum[47]), .d(s_1[47]),
445     .carry(cout[47]));
446mul_csa42  sc3_46_ ( .c(s_2[46]), .cin(co[45]), .a(c_1[45]),
447     .b(c_2[45]), .cout(co[46]), .sum(sum[46]), .d(s_1[46]),
448     .carry(cout[46]));
449mul_csa42  sc3_45_ ( .c(s_2[45]), .cin(co[44]), .a(c_1[44]),
450     .b(c_2[44]), .cout(co[45]), .sum(sum[45]), .d(s_1[45]),
451     .carry(cout[45]));
452mul_csa42  sc3_44_ ( .c(s_2[44]), .cin(co[43]), .a(c_1[43]),
453     .b(c_2[43]), .cout(co[44]), .sum(sum[44]), .d(s_1[44]),
454     .carry(cout[44]));
455mul_csa42  sc3_43_ ( .c(s_2[43]), .cin(co[42]), .a(c_1[42]),
456     .b(c_2[42]), .cout(co[43]), .sum(sum[43]), .d(s_1[43]),
457     .carry(cout[43]));
458mul_csa42  sc3_42_ ( .c(s_2[42]), .cin(co[41]), .a(c_1[41]),
459     .b(c_2[41]), .cout(co[42]), .sum(sum[42]), .d(s_1[42]),
460     .carry(cout[42]));
461mul_csa42  sc3_41_ ( .c(s_2[41]), .cin(co[40]), .a(c_1[40]),
462     .b(c_2[40]), .cout(co[41]), .sum(sum[41]), .d(s_1[41]),
463     .carry(cout[41]));
464mul_csa42  sc3_40_ ( .c(s_2[40]), .cin(co[39]), .a(c_1[39]),
465     .b(c_2[39]), .cout(co[40]), .sum(sum[40]), .d(s_1[40]),
466     .carry(cout[40]));
467mul_csa42  sc3_39_ ( .c(s_2[39]), .cin(co[38]), .a(c_1[38]),
468     .b(c_2[38]), .cout(co[39]), .sum(sum[39]), .d(s_1[39]),
469     .carry(cout[39]));
470mul_csa42  sc3_38_ ( .c(s_2[38]), .cin(co[37]), .a(c_1[37]),
471     .b(c_2[37]), .cout(co[38]), .sum(sum[38]), .d(s_1[38]),
472     .carry(cout[38]));
473mul_csa42  sc3_37_ ( .c(s_2[37]), .cin(co[36]), .a(c_1[36]),
474     .b(c_2[36]), .cout(co[37]), .sum(sum[37]), .d(s_1[37]),
475     .carry(cout[37]));
476mul_csa42  sc3_36_ ( .c(s_2[36]), .cin(co[35]), .a(c_1[35]),
477     .b(c_2[35]), .cout(co[36]), .sum(sum[36]), .d(s_1[36]),
478     .carry(cout[36]));
479mul_csa42  sc3_35_ ( .c(s_2[35]), .cin(co[34]), .a(c_1[34]),
480     .b(c_2[34]), .cout(co[35]), .sum(sum[35]), .d(s_1[35]),
481     .carry(cout[35]));
482mul_csa42  sc3_34_ ( .c(s_2[34]), .cin(co[33]), .a(c_1[33]),
483     .b(c_2[33]), .cout(co[34]), .sum(sum[34]), .d(s_1[34]),
484     .carry(cout[34]));
485mul_csa42  sc3_33_ ( .c(s_2[33]), .cin(co[32]), .a(c_1[32]),
486     .b(c_2[32]), .cout(co[33]), .sum(sum[33]), .d(s_1[33]),
487     .carry(cout[33]));
488mul_csa42  sc3_32_ ( .c(s_2[32]), .cin(co[31]), .a(c_1[31]),
489     .b(c_2[31]), .cout(co[32]), .sum(sum[32]), .d(s_1[32]),
490     .carry(cout[32]));
491mul_csa42  sc3_31_ ( .c(s_2[31]), .cin(co[30]), .a(c_1[30]),
492     .b(c_2[30]), .cout(co[31]), .sum(sum[31]), .d(s_1[31]),
493     .carry(cout[31]));
494mul_csa42  sc3_30_ ( .c(s_2[30]), .cin(co[29]), .a(c_1[29]),
495     .b(c_2[29]), .cout(co[30]), .sum(sum[30]), .d(s_1[30]),
496     .carry(cout[30]));
497mul_csa42  sc3_29_ ( .c(s_2[29]), .cin(co[28]), .a(c_1[28]),
498     .b(c_2[28]), .cout(co[29]), .sum(sum[29]), .d(s_1[29]),
499     .carry(cout[29]));
500mul_csa42  sc3_28_ ( .c(s_2[28]), .cin(co[27]), .a(c_1[27]),
501     .b(c_2[27]), .cout(co[28]), .sum(sum[28]), .d(s_1[28]),
502     .carry(cout[28]));
503mul_csa42  sc3_27_ ( .c(s_2[27]), .cin(co[26]), .a(c_1[26]),
504     .b(c_2[26]), .cout(co[27]), .sum(sum[27]), .d(s_1[27]),
505     .carry(cout[27]));
506mul_csa42  sc3_26_ ( .c(s_2[26]), .cin(co[25]), .a(c_1[25]),
507     .b(c_2[25]), .cout(co[26]), .sum(sum[26]), .d(s_1[26]),
508     .carry(cout[26]));
509mul_csa42  sc3_25_ ( .c(s_2[25]), .cin(co[24]), .a(c_1[24]),
510     .b(c_2[24]), .cout(co[25]), .sum(sum[25]), .d(s_1[25]),
511     .carry(cout[25]));
512mul_csa42  sc3_24_ ( .c(s_2[24]), .cin(co[23]), .a(c_1[23]),
513     .b(c_2[23]), .cout(co[24]), .sum(sum[24]), .d(s_1[24]),
514     .carry(cout[24]));
515mul_csa42  sc3_23_ ( .c(s_2[23]), .cin(co[22]), .a(c_1[22]),
516     .b(c_2[22]), .cout(co[23]), .sum(sum[23]), .d(s_1[23]),
517     .carry(cout[23]));
518mul_csa42  sc3_22_ ( .c(s_2[22]), .cin(co[21]), .a(c_1[21]),
519     .b(c_2[21]), .cout(co[22]), .sum(sum[22]), .d(s_1[22]),
520     .carry(cout[22]));
521mul_csa42  sc3_21_ ( .c(s_2[21]), .cin(co[20]), .a(c_1[20]),
522     .b(c_2[20]), .cout(co[21]), .sum(sum[21]), .d(s_1[21]),
523     .carry(cout[21]));
524mul_csa42  sc3_20_ ( .c(s_2[20]), .cin(co[19]), .a(c_1[19]),
525     .b(c_2[19]), .cout(co[20]), .sum(sum[20]), .d(s_1[20]),
526     .carry(cout[20]));
527mul_csa42  sc3_19_ ( .c(s_2[19]), .cin(co[18]), .a(c_1[18]),
528     .b(c_2[18]), .cout(co[19]), .sum(sum[19]), .d(s_1[19]),
529     .carry(cout[19]));
530mul_csa42  sc3_18_ ( .c(s_2[18]), .cin(co[17]), .a(c_1[17]),
531     .b(c_2[17]), .cout(co[18]), .sum(sum[18]), .d(s_1[18]),
532     .carry(cout[18]));
533mul_csa42  sc3_17_ ( .c(s_2[17]), .cin(co[16]), .a(c_1[16]),
534     .b(c_2[16]), .cout(co[17]), .sum(sum[17]), .d(s_1[17]),
535     .carry(cout[17]));
536mul_csa42  sc3_16_ ( .c(s_2[16]), .cin(co[15]), .a(c_1[15]),
537     .b(c_2[15]), .cout(co[16]), .sum(sum[16]), .d(s_1[16]),
538     .carry(cout[16]));
539mul_csa42  sc3_15_ ( .c(s_2[15]), .cin(co[14]), .a(c_1[14]),
540     .b(c_2[14]), .cout(co[15]), .sum(sum[15]), .d(s_1[15]),
541     .carry(cout[15]));
542mul_csa42  sc3_14_ ( .c(s_2[14]), .cin(co[13]), .a(c_1[13]),
543     .b(c_2[13]), .cout(co[14]), .sum(sum[14]), .d(s_1[14]),
544     .carry(cout[14]));
545mul_csa42  sc3_13_ ( .c(s_2[13]), .cin(co[12]), .a(c_1[12]),
546     .b(c_2[12]), .cout(co[13]), .sum(sum[13]), .d(s_1[13]),
547     .carry(cout[13]));
548mul_csa42  sc3_12_ ( .c(s_2[12]), .cin(co[11]), .a(c_1[11]),
549     .b(c_2[11]), .cout(co[12]), .sum(sum[12]), .d(s_1[12]),
550     .carry(cout[12]));
551mul_csa42  sc3_11_ ( .c(s_2[11]), .cin(1'b0),
552     .a(c_1[10]), .b(c_2[10]), .cout(co[11]), .sum(sum[11]),
553     .d(s_1[11]), .carry(cout[11]));
554mul_csa32  sc2_2_70_ ( .c(c1[63]), .b(c2[57]), .a(s2[58]),
555     .cout(c_2[70]), .sum(s_2[70]));
556mul_csa32  sc2_2_69_ ( .c(c1[62]), .b(c2[56]), .a(s2[57]),
557     .cout(c_2[69]), .sum(s_2[69]));
558mul_csa32  sc2_2_68_ ( .c(c1[61]), .b(c2[55]), .a(s2[56]),
559     .cout(c_2[68]), .sum(s_2[68]));
560mul_csa32  sc2_2_67_ ( .c(c1[60]), .b(c2[54]), .a(s2[55]),
561     .cout(c_2[67]), .sum(s_2[67]));
562mul_csa32  sc2_2_66_ ( .c(c1[59]), .b(c2[53]), .a(s2[54]),
563     .cout(c_2[66]), .sum(s_2[66]));
564mul_csa32  sc2_2_65_ ( .c(c1[58]), .b(c2[52]), .a(s2[53]),
565     .cout(c_2[65]), .sum(s_2[65]));
566mul_csa32  sc2_2_64_ ( .c(c1[57]), .b(c2[51]), .a(s2[52]),
567     .cout(c_2[64]), .sum(s_2[64]));
568mul_csa32  sc2_2_63_ ( .c(c1[56]), .b(c2[50]), .a(s2[51]),
569     .cout(c_2[63]), .sum(s_2[63]));
570mul_csa32  sc2_2_62_ ( .c(c1[55]), .b(c2[49]), .a(s2[50]),
571     .cout(c_2[62]), .sum(s_2[62]));
572mul_csa32  sc2_2_61_ ( .c(c1[54]), .b(c2[48]), .a(s2[49]),
573     .cout(c_2[61]), .sum(s_2[61]));
574mul_csa32  sc2_2_60_ ( .c(c1[53]), .b(c2[47]), .a(s2[48]),
575     .cout(c_2[60]), .sum(s_2[60]));
576mul_csa32  sc2_2_59_ ( .c(c1[52]), .b(c2[46]), .a(s2[47]),
577     .cout(c_2[59]), .sum(s_2[59]));
578mul_csa32  sc2_2_58_ ( .c(c1[51]), .b(c2[45]), .a(s2[46]),
579     .cout(c_2[58]), .sum(s_2[58]));
580mul_csa32  sc2_2_57_ ( .c(c1[50]), .b(c2[44]), .a(s2[45]),
581     .cout(c_2[57]), .sum(s_2[57]));
582mul_csa32  sc2_2_56_ ( .c(c1[49]), .b(c2[43]), .a(s2[44]),
583     .cout(c_2[56]), .sum(s_2[56]));
584mul_csa32  sc2_2_55_ ( .c(c1[48]), .b(c2[42]), .a(s2[43]),
585     .cout(c_2[55]), .sum(s_2[55]));
586mul_csa32  sc2_2_54_ ( .c(c1[47]), .b(c2[41]), .a(s2[42]),
587     .cout(c_2[54]), .sum(s_2[54]));
588mul_csa32  sc2_2_53_ ( .c(c1[46]), .b(c2[40]), .a(s2[41]),
589     .cout(c_2[53]), .sum(s_2[53]));
590mul_csa32  sc2_2_52_ ( .c(c1[45]), .b(c2[39]), .a(s2[40]),
591     .cout(c_2[52]), .sum(s_2[52]));
592mul_csa32  sc2_2_51_ ( .c(c1[44]), .b(c2[38]), .a(s2[39]),
593     .cout(c_2[51]), .sum(s_2[51]));
594mul_csa32  sc2_2_50_ ( .c(c1[43]), .b(c2[37]), .a(s2[38]),
595     .cout(c_2[50]), .sum(s_2[50]));
596mul_csa32  sc2_2_49_ ( .c(c1[42]), .b(c2[36]), .a(s2[37]),
597     .cout(c_2[49]), .sum(s_2[49]));
598mul_csa32  sc2_2_48_ ( .c(c1[41]), .b(c2[35]), .a(s2[36]),
599     .cout(c_2[48]), .sum(s_2[48]));
600mul_csa32  sc2_2_47_ ( .c(c1[40]), .b(c2[34]), .a(s2[35]),
601     .cout(c_2[47]), .sum(s_2[47]));
602mul_csa32  sc2_2_46_ ( .c(c1[39]), .b(c2[33]), .a(s2[34]),
603     .cout(c_2[46]), .sum(s_2[46]));
604mul_csa32  sc2_2_45_ ( .c(c1[38]), .b(c2[32]), .a(s2[33]),
605     .cout(c_2[45]), .sum(s_2[45]));
606mul_csa32  sc2_2_44_ ( .c(c1[37]), .b(c2[31]), .a(s2[32]),
607     .cout(c_2[44]), .sum(s_2[44]));
608mul_csa32  sc2_2_43_ ( .c(c1[36]), .b(c2[30]), .a(s2[31]),
609     .cout(c_2[43]), .sum(s_2[43]));
610mul_csa32  sc2_2_42_ ( .c(c1[35]), .b(c2[29]), .a(s2[30]),
611     .cout(c_2[42]), .sum(s_2[42]));
612mul_csa32  sc2_2_41_ ( .c(c1[34]), .b(c2[28]), .a(s2[29]),
613     .cout(c_2[41]), .sum(s_2[41]));
614mul_csa32  sc2_2_40_ ( .c(c1[33]), .b(c2[27]), .a(s2[28]),
615     .cout(c_2[40]), .sum(s_2[40]));
616mul_csa32  sc2_2_39_ ( .c(c1[32]), .b(c2[26]), .a(s2[27]),
617     .cout(c_2[39]), .sum(s_2[39]));
618mul_csa32  sc2_2_38_ ( .c(c1[31]), .b(c2[25]), .a(s2[26]),
619     .cout(c_2[38]), .sum(s_2[38]));
620mul_csa32  sc2_2_37_ ( .c(c1[30]), .b(c2[24]), .a(s2[25]),
621     .cout(c_2[37]), .sum(s_2[37]));
622mul_csa32  sc2_2_36_ ( .c(c1[29]), .b(c2[23]), .a(s2[24]),
623     .cout(c_2[36]), .sum(s_2[36]));
624mul_csa32  sc2_2_35_ ( .c(c1[28]), .b(c2[22]), .a(s2[23]),
625     .cout(c_2[35]), .sum(s_2[35]));
626mul_csa32  sc2_2_34_ ( .c(c1[27]), .b(c2[21]), .a(s2[22]),
627     .cout(c_2[34]), .sum(s_2[34]));
628mul_csa32  sc2_2_33_ ( .c(c1[26]), .b(c2[20]), .a(s2[21]),
629     .cout(c_2[33]), .sum(s_2[33]));
630mul_csa32  sc2_2_32_ ( .c(c1[25]), .b(c2[19]), .a(s2[20]),
631     .cout(c_2[32]), .sum(s_2[32]));
632mul_csa32  sc2_2_31_ ( .c(c1[24]), .b(c2[18]), .a(s2[19]),
633     .cout(c_2[31]), .sum(s_2[31]));
634mul_csa32  sc2_2_30_ ( .c(c1[23]), .b(c2[17]), .a(s2[18]),
635     .cout(c_2[30]), .sum(s_2[30]));
636mul_csa32  sc2_2_29_ ( .c(c1[22]), .b(c2[16]), .a(s2[17]),
637     .cout(c_2[29]), .sum(s_2[29]));
638mul_csa32  sc2_2_28_ ( .c(c1[21]), .b(c2[15]), .a(s2[16]),
639     .cout(c_2[28]), .sum(s_2[28]));
640mul_csa32  sc2_2_27_ ( .c(c1[20]), .b(c2[14]), .a(s2[15]),
641     .cout(c_2[27]), .sum(s_2[27]));
642mul_csa32  sc2_2_26_ ( .c(c1[19]), .b(c2[13]), .a(s2[14]),
643     .cout(c_2[26]), .sum(s_2[26]));
644mul_csa32  sc2_2_25_ ( .c(c1[18]), .b(c2[12]), .a(s2[13]),
645     .cout(c_2[25]), .sum(s_2[25]));
646mul_csa32  sc2_2_24_ ( .c(c1[17]), .b(c2[11]), .a(s2[12]),
647     .cout(c_2[24]), .sum(s_2[24]));
648mul_csa32  sc2_2_23_ ( .c(c1[16]), .b(c2[10]), .a(s2[11]),
649     .cout(c_2[23]), .sum(s_2[23]));
650mul_csa32  sc2_2_22_ ( .c(c1[15]), .b(c2[9]), .a(s2[10]),
651     .cout(c_2[22]), .sum(s_2[22]));
652mul_csa32  sc2_2_21_ ( .c(c1[14]), .b(c2[8]), .a(s2[9]),
653     .cout(c_2[21]), .sum(s_2[21]));
654mul_csa32  sc2_2_20_ ( .c(c1[13]), .b(c2[7]), .a(s2[8]),
655     .cout(c_2[20]), .sum(s_2[20]));
656mul_csa32  sc2_2_19_ ( .c(c1[12]), .b(c2[6]), .a(s2[7]),
657     .cout(c_2[19]), .sum(s_2[19]));
658mul_csa32  sc2_2_18_ ( .c(c1[11]), .b(c2[5]), .a(s2[6]),
659     .cout(c_2[18]), .sum(s_2[18]));
660mul_csa32  sc2_2_17_ ( .c(c1[10]), .b(c2[4]), .a(s2[5]),
661     .cout(c_2[17]), .sum(s_2[17]));
662mul_csa32  sc2_2_16_ ( .c(c1[9]), .b(c2[3]), .a(s2[4]),
663     .cout(c_2[16]), .sum(s_2[16]));
664mul_csa32  sc2_2_15_ ( .c(c1[8]), .b(c2[2]), .a(s2[3]),
665     .cout(c_2[15]), .sum(s_2[15]));
666mul_csa32  sc2_2_14_ ( .c(c1[7]), .b(c2[1]), .a(s2[2]),
667     .cout(c_2[14]), .sum(s_2[14]));
668mul_csa32  sc2_2_13_ ( .c(c1[6]), .b(s1[7]), .a(s2[1]),
669     .cout(c_2[13]), .sum(s_2[13]));
670mul_csa32  sc2_2_12_ ( .c(c1[5]), .b(s1[6]), .a(s2[0]),
671     .cout(c_2[12]), .sum(s_2[12]));
672mul_csa32  sc2_2_11_ ( .c(c1[4]), .b(s1[5]), .a(b5n[1]),
673     .cout(c_2[11]), .sum(s_2[11]));
674mul_csa32  sc2_2_10_ ( .c(c1[3]), .b(s1[4]), .a(b5n[0]),
675     .cout(c_2[10]), .sum(s_2[10]));
676mul_csa32  sc2_2_76_ ( .c(1'b1), .b(c2[63]), .a(s2[64]),
677     .cout(c_2[76]), .sum(s_2[76]));
678mul_csa32  sc2_2_77_ ( .c(c_2[76]), .b(c2[64]), .a(s2[65]),
679     .cout(cout[77]), .sum(sum[77]));
680mul_csa32  sc2_1_9_ ( .c(s1[3]), .b(c0[8]), .a(s0[9]), .cout(c_1[9]),
681     .sum(s_1[9]));
682mul_csa32  sc2_1_8_ ( .c(s1[2]), .b(c0[7]), .a(s0[8]), .cout(c_1[8]),
683     .sum(s_1[8]));
684mul_csa32  sc2_1_3_ ( .c(c_1[2]), .b(c0[2]), .a(s0[3]),
685     .cout(c_1[3]), .sum(sum[3]));
686mul_csa32  sc3_10_ ( .c(s_2[10]), .b(s_1[10]), .a(c_1[9]),
687     .cout(cout[10]), .sum(sum[10]));
688mul_csa32  sc3_9_ ( .c(c1[2]), .sum(sum[9]), .cout(cout[9]),
689     .a(c_1[8]), .b(s_1[9]));
690mul_csa32  sc3_8_ ( .c(c1[1]), .sum(sum[8]), .cout(cout[8]),
691     .a(c_1[7]), .b(s_1[8]));
692mul_csa32  sc2_2_71_ ( .c(c1[64]), .b(c2[58]), .a(s2[59]),
693     .cout(c_2[71]), .sum(s_2[71]));
694mul_csa32  sc2_2_75_ ( .c(c1[68]), .b(c2[62]), .a(s2[63]),
695     .cout(c_2[75]), .sum(s_2[75]));
696mul_csa32  sc2_2_74_ ( .c(c1[67]), .b(c2[61]), .a(s2[62]),
697     .cout(c_2[74]), .sum(s_2[74]));
698mul_csa32  sc2_2_73_ ( .c(c1[66]), .b(c2[60]), .a(s2[61]),
699     .cout(c_2[73]), .sum(s_2[73]));
700mul_csa32  sc2_2_72_ ( .c(c1[65]), .b(c2[59]), .a(s2[60]),
701     .cout(c_2[72]), .sum(s_2[72]));
702mul_csa32  sc2_1_69_ ( .c(s1[63]), .sum(s_1[69]), .cout(c_1[69]),
703     .a(s0[69]), .b(c0[68]));
704mul_csa32  sc2_1_68_ ( .c(s1[62]), .sum(s_1[68]), .cout(c_1[68]),
705     .a(s0[68]), .b(c0[67]));
706mul_csa32  sc2_1_67_ ( .c(s1[61]), .sum(s_1[67]), .cout(c_1[67]),
707     .a(s0[67]), .b(c0[66]));
708mul_csa32  sc2_1_66_ ( .c(s1[60]), .sum(s_1[66]), .cout(c_1[66]),
709     .a(s0[66]), .b(c0[65]));
710mul_csa32  sc2_1_65_ ( .c(s1[59]), .sum(s_1[65]), .cout(c_1[65]),
711     .a(s0[65]), .b(c0[64]));
712mul_csa32  sc2_1_64_ ( .c(s1[58]), .sum(s_1[64]), .cout(c_1[64]),
713     .a(s0[64]), .b(c0[63]));
714mul_csa32  sc2_1_63_ ( .c(s1[57]), .sum(s_1[63]), .cout(c_1[63]),
715     .a(s0[63]), .b(c0[62]));
716mul_csa32  sc2_1_62_ ( .c(s1[56]), .sum(s_1[62]), .cout(c_1[62]),
717     .a(s0[62]), .b(c0[61]));
718mul_csa32  sc2_1_61_ ( .c(s1[55]), .sum(s_1[61]), .cout(c_1[61]),
719     .a(s0[61]), .b(c0[60]));
720mul_csa32  sc2_1_60_ ( .c(s1[54]), .sum(s_1[60]), .cout(c_1[60]),
721     .a(s0[60]), .b(c0[59]));
722mul_csa32  sc2_1_59_ ( .c(s1[53]), .sum(s_1[59]), .cout(c_1[59]),
723     .a(s0[59]), .b(c0[58]));
724mul_csa32  sc2_1_58_ ( .c(s1[52]), .sum(s_1[58]), .cout(c_1[58]),
725     .a(s0[58]), .b(c0[57]));
726mul_csa32  sc2_1_57_ ( .c(s1[51]), .sum(s_1[57]), .cout(c_1[57]),
727     .a(s0[57]), .b(c0[56]));
728mul_csa32  sc2_1_56_ ( .c(s1[50]), .sum(s_1[56]), .cout(c_1[56]),
729     .a(s0[56]), .b(c0[55]));
730mul_csa32  sc2_1_55_ ( .c(s1[49]), .sum(s_1[55]), .cout(c_1[55]),
731     .a(s0[55]), .b(c0[54]));
732mul_csa32  sc2_1_54_ ( .c(s1[48]), .sum(s_1[54]), .cout(c_1[54]),
733     .a(s0[54]), .b(c0[53]));
734mul_csa32  sc2_1_53_ ( .c(s1[47]), .sum(s_1[53]), .cout(c_1[53]),
735     .a(s0[53]), .b(c0[52]));
736mul_csa32  sc2_1_52_ ( .c(s1[46]), .sum(s_1[52]), .cout(c_1[52]),
737     .a(s0[52]), .b(c0[51]));
738mul_csa32  sc2_1_51_ ( .c(s1[45]), .sum(s_1[51]), .cout(c_1[51]),
739     .a(s0[51]), .b(c0[50]));
740mul_csa32  sc2_1_50_ ( .c(s1[44]), .sum(s_1[50]), .cout(c_1[50]),
741     .a(s0[50]), .b(c0[49]));
742mul_csa32  sc2_1_49_ ( .c(s1[43]), .sum(s_1[49]), .cout(c_1[49]),
743     .a(s0[49]), .b(c0[48]));
744mul_csa32  sc2_1_48_ ( .c(s1[42]), .sum(s_1[48]), .cout(c_1[48]),
745     .a(s0[48]), .b(c0[47]));
746mul_csa32  sc2_1_47_ ( .c(s1[41]), .sum(s_1[47]), .cout(c_1[47]),
747     .a(s0[47]), .b(c0[46]));
748mul_csa32  sc2_1_46_ ( .c(s1[40]), .sum(s_1[46]), .cout(c_1[46]),
749     .a(s0[46]), .b(c0[45]));
750mul_csa32  sc2_1_45_ ( .c(s1[39]), .sum(s_1[45]), .cout(c_1[45]),
751     .a(s0[45]), .b(c0[44]));
752mul_csa32  sc2_1_44_ ( .c(s1[38]), .sum(s_1[44]), .cout(c_1[44]),
753     .a(s0[44]), .b(c0[43]));
754mul_csa32  sc2_1_43_ ( .c(s1[37]), .sum(s_1[43]), .cout(c_1[43]),
755     .a(s0[43]), .b(c0[42]));
756mul_csa32  sc2_1_42_ ( .c(s1[36]), .sum(s_1[42]), .cout(c_1[42]),
757     .a(s0[42]), .b(c0[41]));
758mul_csa32  sc2_1_41_ ( .c(s1[35]), .sum(s_1[41]), .cout(c_1[41]),
759     .a(s0[41]), .b(c0[40]));
760mul_csa32  sc2_1_40_ ( .c(s1[34]), .sum(s_1[40]), .cout(c_1[40]),
761     .a(s0[40]), .b(c0[39]));
762mul_csa32  sc2_1_39_ ( .c(s1[33]), .sum(s_1[39]), .cout(c_1[39]),
763     .a(s0[39]), .b(c0[38]));
764mul_csa32  sc2_1_38_ ( .c(s1[32]), .sum(s_1[38]), .cout(c_1[38]),
765     .a(s0[38]), .b(c0[37]));
766mul_csa32  sc2_1_37_ ( .c(s1[31]), .sum(s_1[37]), .cout(c_1[37]),
767     .a(s0[37]), .b(c0[36]));
768mul_csa32  sc2_1_36_ ( .c(s1[30]), .sum(s_1[36]), .cout(c_1[36]),
769     .a(s0[36]), .b(c0[35]));
770mul_csa32  sc2_1_35_ ( .c(s1[29]), .sum(s_1[35]), .cout(c_1[35]),
771     .a(s0[35]), .b(c0[34]));
772mul_csa32  sc2_1_34_ ( .c(s1[28]), .sum(s_1[34]), .cout(c_1[34]),
773     .a(s0[34]), .b(c0[33]));
774mul_csa32  sc2_1_33_ ( .c(s1[27]), .sum(s_1[33]), .cout(c_1[33]),
775     .a(s0[33]), .b(c0[32]));
776mul_csa32  sc2_1_32_ ( .c(s1[26]), .sum(s_1[32]), .cout(c_1[32]),
777     .a(s0[32]), .b(c0[31]));
778mul_csa32  sc2_1_31_ ( .c(s1[25]), .sum(s_1[31]), .cout(c_1[31]),
779     .a(s0[31]), .b(c0[30]));
780mul_csa32  sc2_1_30_ ( .c(s1[24]), .sum(s_1[30]), .cout(c_1[30]),
781     .a(s0[30]), .b(c0[29]));
782mul_csa32  sc2_1_29_ ( .c(s1[23]), .sum(s_1[29]), .cout(c_1[29]),
783     .a(s0[29]), .b(c0[28]));
784mul_csa32  sc2_1_28_ ( .c(s1[22]), .sum(s_1[28]), .cout(c_1[28]),
785     .a(s0[28]), .b(c0[27]));
786mul_csa32  sc2_1_27_ ( .c(s1[21]), .sum(s_1[27]), .cout(c_1[27]),
787     .a(s0[27]), .b(c0[26]));
788mul_csa32  sc2_1_26_ ( .c(s1[20]), .sum(s_1[26]), .cout(c_1[26]),
789     .a(s0[26]), .b(c0[25]));
790mul_csa32  sc2_1_25_ ( .c(s1[19]), .sum(s_1[25]), .cout(c_1[25]),
791     .a(s0[25]), .b(c0[24]));
792mul_csa32  sc2_1_24_ ( .c(s1[18]), .sum(s_1[24]), .cout(c_1[24]),
793     .a(s0[24]), .b(c0[23]));
794mul_csa32  sc2_1_23_ ( .c(s1[17]), .sum(s_1[23]), .cout(c_1[23]),
795     .a(s0[23]), .b(c0[22]));
796mul_csa32  sc2_1_22_ ( .c(s1[16]), .sum(s_1[22]), .cout(c_1[22]),
797     .a(s0[22]), .b(c0[21]));
798mul_csa32  sc2_1_21_ ( .c(s1[15]), .sum(s_1[21]), .cout(c_1[21]),
799     .a(s0[21]), .b(c0[20]));
800mul_csa32  sc2_1_20_ ( .c(s1[14]), .sum(s_1[20]), .cout(c_1[20]),
801     .a(s0[20]), .b(c0[19]));
802mul_csa32  sc2_1_19_ ( .c(s1[13]), .sum(s_1[19]), .cout(c_1[19]),
803     .a(s0[19]), .b(c0[18]));
804mul_csa32  sc2_1_18_ ( .c(s1[12]), .sum(s_1[18]), .cout(c_1[18]),
805     .a(s0[18]), .b(c0[17]));
806mul_csa32  sc2_1_17_ ( .c(s1[11]), .sum(s_1[17]), .cout(c_1[17]),
807     .a(s0[17]), .b(c0[16]));
808mul_csa32  sc2_1_16_ ( .c(s1[10]), .sum(s_1[16]), .cout(c_1[16]),
809     .a(s0[16]), .b(c0[15]));
810mul_csa32  sc2_1_15_ ( .c(s1[9]), .sum(s_1[15]), .cout(c_1[15]),
811     .a(s0[15]), .b(c0[14]));
812mul_csa32  sc2_1_14_ ( .c(s1[8]), .sum(s_1[14]), .cout(c_1[14]),
813     .a(s0[14]), .b(c0[13]));
814mul_csa32  sc2_1_7_ ( .c(s1[1]), .b(c0[6]), .a(s0[7]), .cout(c_1[7]),
815     .sum(s_1[7]));
816mul_csa32  sc2_1_6_ ( .c(s1[0]), .b(c0[5]), .a(s0[6]), .cout(c_1[6]),
817     .sum(s_1[6]));
818mul_csa32  sc2_1_5_ ( .c(b2n[1]), .b(c0[4]), .a(s0[5]),
819     .cout(c_1[5]), .sum(s_1[5]));
820mul_csa32  sc2_1_4_ ( .c(b2n[0]), .b(c0[3]), .a(s0[4]),
821     .cout(c_1[4]), .sum(s_1[4]));
822mul_ha sc2_1_10_ ( .sum(s_1[10]), .cout(c_1[10]), .a(s0[10]),
823     .b(c0[9]));
824mul_ha sc3_7_ ( .sum(sum[7]), .cout(cout[7]), .a(c_1[6]),
825     .b(s_1[7]));
826mul_ha sc3_6_ ( .sum(sum[6]), .cout(cout[6]), .a(c_1[5]),
827     .b(s_1[6]));
828mul_ha sc3_5_ ( .sum(sum[5]), .cout(cout[5]), .a(c_1[4]),
829     .b(s_1[5]));
830mul_ha sc3_4_ ( .sum(sum[4]), .cout(cout[4]), .a(c_1[3]),
831     .b(s_1[4]));
832mul_ha sc2_2_81_ ( .sum(sum[81]), .cout(cout[81]), .a(s2[69]),
833     .b(c2[68]));
834mul_ha sc2_2_80_ ( .sum(sum[80]), .cout(cout[80]), .a(s2[68]),
835     .b(c2[67]));
836mul_ha sc2_2_79_ ( .sum(sum[79]), .cout(cout[79]), .a(s2[67]),
837     .b(c2[66]));
838mul_ha sc2_2_78_ ( .sum(sum[78]), .cout(cout[78]), .a(s2[66]),
839     .b(c2[65]));
840mul_ha sc2_1_70_ ( .sum(s_1[70]), .cout(c_1[70]),
841     .a(1'b1), .b(s1[64]));
842mul_ha sc2_1_2_ ( .sum(sum[2]), .cout(c_1[2]), .a(s0[2]), .b(c0[1]));
843mul_ha sc2_1_13_ ( .sum(s_1[13]), .cout(c_1[13]), .a(s0[13]),
844     .b(c0[12]));
845mul_ha sc2_1_12_ ( .sum(s_1[12]), .cout(c_1[12]), .a(s0[12]),
846     .b(c0[11]));
847mul_ha sc2_1_11_ ( .sum(s_1[11]), .cout(c_1[11]), .a(s0[11]),
848     .b(c0[10]));
849mul_ppgenrow3 I2 ( .head(1'b0), .bot(bot), .b2(b8[2:0]),
850     .b1(b7[2:0]), .b0(b6[2:0]), .a(a[63:0]), .sum(s2[69:0]),
851     .cout(c2[68:1]));
852mul_ppgenrow3 I1 ( .head(1'b0), .bot(1'b1),
853     .b2(b5[2:0]), .b1(b4[2:0]), .b0(b3[2:0]), .a(a[63:0]),
854     .sum(s1[69:0]), .cout(c1[68:1]));
855mul_ppgenrow3 I0 ( .head(head), .bot(1'b1), .b2(b2[2:0]),
856     .b1(b1[2:0]), .b0(b0[2:0]), .a(a[63:0]), .sum({s0[69:2],
857     sum[1:0]}), .cout(c0[68:1]));
858
859endmodule // mul_array1
860
861module mul_array2 ( pcout, pcoutx2, psum, psumx2, a0c, a0s, a1c, a1s,
862     areg, bot, pc, ps, x2 );
863
864output  pcoutx2, psumx2;
865input  bot, x2;
866output [98:0]  psum;
867output [98:0]  pcout;
868input [81:4]  a1c;
869input [98:30]  pc;
870input [98:31]  ps;
871input [81:0]  a0s;
872input [96:0]  areg;
873input [81:0]  a1s;
874input [81:4]  a0c;
875
876// Buses in the design
877wire  [81:15]  s3;
878wire  [81:15]  c3;
879wire  [96:0]  ain;
880wire  [67:20]  co;
881wire  [82:0]  s1;
882wire  [96:0]  c2;
883wire  [82:0]  c1;
884wire  [96:0]  s2;
885wire          ainx2, s1x2, c1x2;
886
887mul_mux2 sh_82_ ( .d1(areg[83]), .z(ain[82]), .d0(areg[82]), .s(x2));
888mul_mux2 sh_68_ ( .d1(areg[69]), .z(ain[68]), .d0(areg[68]), .s(x2));
889mul_mux2 sh_67_ ( .d1(areg[68]), .z(ain[67]), .d0(areg[67]), .s(x2));
890mul_mux2 sh_66_ ( .d1(areg[67]), .z(ain[66]), .d0(areg[66]), .s(x2));
891mul_mux2 sh_65_ ( .d1(areg[66]), .z(ain[65]), .d0(areg[65]), .s(x2));
892mul_mux2 sh_64_ ( .d1(areg[65]), .z(ain[64]), .d0(areg[64]), .s(x2));
893mul_mux2 sh_63_ ( .d1(areg[64]), .z(ain[63]), .d0(areg[63]), .s(x2));
894mul_mux2 sh_62_ ( .d1(areg[63]), .z(ain[62]), .d0(areg[62]), .s(x2));
895mul_mux2 sh_61_ ( .d1(areg[62]), .z(ain[61]), .d0(areg[61]), .s(x2));
896mul_mux2 sh_60_ ( .d1(areg[61]), .z(ain[60]), .d0(areg[60]), .s(x2));
897mul_mux2 sh_59_ ( .d1(areg[60]), .z(ain[59]), .d0(areg[59]), .s(x2));
898mul_mux2 sh_58_ ( .d1(areg[59]), .z(ain[58]), .d0(areg[58]), .s(x2));
899mul_mux2 sh_57_ ( .d1(areg[58]), .z(ain[57]), .d0(areg[57]), .s(x2));
900mul_mux2 sh_56_ ( .d1(areg[57]), .z(ain[56]), .d0(areg[56]), .s(x2));
901mul_mux2 sh_55_ ( .d1(areg[56]), .z(ain[55]), .d0(areg[55]), .s(x2));
902mul_mux2 sh_54_ ( .d1(areg[55]), .z(ain[54]), .d0(areg[54]), .s(x2));
903mul_mux2 sh_53_ ( .d1(areg[54]), .z(ain[53]), .d0(areg[53]), .s(x2));
904mul_mux2 sh_52_ ( .d1(areg[53]), .z(ain[52]), .d0(areg[52]), .s(x2));
905mul_mux2 sh_51_ ( .d1(areg[52]), .z(ain[51]), .d0(areg[51]), .s(x2));
906mul_mux2 sh_50_ ( .d1(areg[51]), .z(ain[50]), .d0(areg[50]), .s(x2));
907mul_mux2 sh_49_ ( .d1(areg[50]), .z(ain[49]), .d0(areg[49]), .s(x2));
908mul_mux2 sh_48_ ( .d1(areg[49]), .z(ain[48]), .d0(areg[48]), .s(x2));
909mul_mux2 sh_47_ ( .d1(areg[48]), .z(ain[47]), .d0(areg[47]), .s(x2));
910mul_mux2 sh_46_ ( .d1(areg[47]), .z(ain[46]), .d0(areg[46]), .s(x2));
911mul_mux2 sh_45_ ( .d1(areg[46]), .z(ain[45]), .d0(areg[45]), .s(x2));
912mul_mux2 sh_44_ ( .d1(areg[45]), .z(ain[44]), .d0(areg[44]), .s(x2));
913mul_mux2 sh_43_ ( .d1(areg[44]), .z(ain[43]), .d0(areg[43]), .s(x2));
914mul_mux2 sh_42_ ( .d1(areg[43]), .z(ain[42]), .d0(areg[42]), .s(x2));
915mul_mux2 sh_41_ ( .d1(areg[42]), .z(ain[41]), .d0(areg[41]), .s(x2));
916mul_mux2 sh_40_ ( .d1(areg[41]), .z(ain[40]), .d0(areg[40]), .s(x2));
917mul_mux2 sh_39_ ( .d1(areg[40]), .z(ain[39]), .d0(areg[39]), .s(x2));
918mul_mux2 sh_38_ ( .d1(areg[39]), .z(ain[38]), .d0(areg[38]), .s(x2));
919mul_mux2 sh_37_ ( .d1(areg[38]), .z(ain[37]), .d0(areg[37]), .s(x2));
920mul_mux2 sh_36_ ( .d1(areg[37]), .z(ain[36]), .d0(areg[36]), .s(x2));
921mul_mux2 sh_35_ ( .d1(areg[36]), .z(ain[35]), .d0(areg[35]), .s(x2));
922mul_mux2 sh_34_ ( .d1(areg[35]), .z(ain[34]), .d0(areg[34]), .s(x2));
923mul_mux2 sh_33_ ( .d1(areg[34]), .z(ain[33]), .d0(areg[33]), .s(x2));
924mul_mux2 sh_32_ ( .d1(areg[33]), .z(ain[32]), .d0(areg[32]), .s(x2));
925mul_mux2 sh_31_ ( .d1(areg[32]), .z(ain[31]), .d0(areg[31]), .s(x2));
926mul_mux2 sh_30_ ( .d1(areg[31]), .z(ain[30]), .d0(areg[30]), .s(x2));
927mul_mux2 sh_29_ ( .d1(areg[30]), .z(ain[29]), .d0(areg[29]), .s(x2));
928mul_mux2 sh_28_ ( .d1(areg[29]), .z(ain[28]), .d0(areg[28]), .s(x2));
929mul_mux2 sh_27_ ( .d1(areg[28]), .z(ain[27]), .d0(areg[27]), .s(x2));
930mul_mux2 sh_26_ ( .d1(areg[27]), .z(ain[26]), .d0(areg[26]), .s(x2));
931mul_mux2 sh_25_ ( .d1(areg[26]), .z(ain[25]), .d0(areg[25]), .s(x2));
932mul_mux2 sh_24_ ( .d1(areg[25]), .z(ain[24]), .d0(areg[24]), .s(x2));
933mul_mux2 sh_23_ ( .d1(areg[24]), .z(ain[23]), .d0(areg[23]), .s(x2));
934mul_mux2 sh_22_ ( .d1(areg[23]), .z(ain[22]), .d0(areg[22]), .s(x2));
935mul_mux2 sh_21_ ( .d1(areg[22]), .z(ain[21]), .d0(areg[21]), .s(x2));
936mul_mux2 sh_20_ ( .d1(areg[21]), .z(ain[20]), .d0(areg[20]), .s(x2));
937mul_mux2 sh_96_ ( .d1(1'b0), .z(ain[96]), .d0(areg[96]),
938     .s(x2));
939mul_mux2 sh_95_ ( .d1(areg[96]), .z(ain[95]), .d0(areg[95]), .s(x2));
940mul_mux2 sh_94_ ( .d1(areg[95]), .z(ain[94]), .d0(areg[94]), .s(x2));
941mul_mux2 sh_93_ ( .d1(areg[94]), .z(ain[93]), .d0(areg[93]), .s(x2));
942mul_mux2 sh_92_ ( .d1(areg[93]), .z(ain[92]), .d0(areg[92]), .s(x2));
943mul_mux2 sh_91_ ( .d1(areg[92]), .z(ain[91]), .d0(areg[91]), .s(x2));
944mul_mux2 sh_90_ ( .d1(areg[91]), .z(ain[90]), .d0(areg[90]), .s(x2));
945mul_mux2 sh_89_ ( .d1(areg[90]), .z(ain[89]), .d0(areg[89]), .s(x2));
946mul_mux2 sh_88_ ( .d1(areg[89]), .z(ain[88]), .d0(areg[88]), .s(x2));
947mul_mux2 sh_87_ ( .d1(areg[88]), .z(ain[87]), .d0(areg[87]), .s(x2));
948mul_mux2 sh_86_ ( .d1(areg[87]), .z(ain[86]), .d0(areg[86]), .s(x2));
949mul_mux2 sh_85_ ( .d1(areg[86]), .z(ain[85]), .d0(areg[85]), .s(x2));
950mul_mux2 sh_84_ ( .d1(areg[85]), .z(ain[84]), .d0(areg[84]), .s(x2));
951mul_mux2 sh_0_ ( .d1(areg[1]), .z(ain[0]), .d0(areg[0]), .s(x2));
952mul_mux2 sh_81_ ( .d1(areg[82]), .z(ain[81]), .d0(areg[81]), .s(x2));
953mul_mux2 sh_80_ ( .d1(areg[81]), .z(ain[80]), .d0(areg[80]), .s(x2));
954mul_mux2 sh_79_ ( .d1(areg[80]), .z(ain[79]), .d0(areg[79]), .s(x2));
955mul_mux2 sh_78_ ( .d1(areg[79]), .z(ain[78]), .d0(areg[78]), .s(x2));
956mul_mux2 sh_77_ ( .d1(areg[78]), .z(ain[77]), .d0(areg[77]), .s(x2));
957mul_mux2 sh_76_ ( .d1(areg[77]), .z(ain[76]), .d0(areg[76]), .s(x2));
958mul_mux2 sh_75_ ( .d1(areg[76]), .z(ain[75]), .d0(areg[75]), .s(x2));
959mul_mux2 sh_74_ ( .d1(areg[75]), .z(ain[74]), .d0(areg[74]), .s(x2));
960mul_mux2 sh_73_ ( .d1(areg[74]), .z(ain[73]), .d0(areg[73]), .s(x2));
961mul_mux2 sh_72_ ( .d1(areg[73]), .z(ain[72]), .d0(areg[72]), .s(x2));
962mul_mux2 sh_71_ ( .d1(areg[72]), .z(ain[71]), .d0(areg[71]), .s(x2));
963mul_mux2 sh_70_ ( .d1(areg[71]), .z(ain[70]), .d0(areg[70]), .s(x2));
964mul_mux2 sh_69_ ( .d1(areg[70]), .z(ain[69]), .d0(areg[69]), .s(x2));
965mul_mux2 sh_19_ ( .d1(areg[20]), .z(ain[19]), .d0(areg[19]), .s(x2));
966mul_mux2 sh_18_ ( .d1(areg[19]), .z(ain[18]), .d0(areg[18]), .s(x2));
967mul_mux2 sh_17_ ( .d1(areg[18]), .z(ain[17]), .d0(areg[17]), .s(x2));
968mul_mux2 sh_16_ ( .d1(areg[17]), .z(ain[16]), .d0(areg[16]), .s(x2));
969mul_mux2 sh_15_ ( .d1(areg[16]), .z(ain[15]), .d0(areg[15]), .s(x2));
970mul_mux2 sh_4_ ( .d1(areg[5]), .z(ain[4]), .d0(areg[4]), .s(x2));
971mul_mux2 sh_3_ ( .d1(areg[4]), .z(ain[3]), .d0(areg[3]), .s(x2));
972mul_mux2 sh_2_ ( .d1(areg[3]), .z(ain[2]), .d0(areg[2]), .s(x2));
973mul_mux2 sh_1_ ( .d1(areg[2]), .z(ain[1]), .d0(areg[1]), .s(x2));
974mul_mux2 shx2 ( .d1(areg[0]), .z(ainx2), .d0(1'b0),
975     .s(x2));
976mul_mux2 sh_83_ ( .d1(areg[84]), .z(ain[83]), .d0(areg[83]), .s(x2));
977mul_mux2 sh_14_ ( .d1(areg[15]), .z(ain[14]), .d0(areg[14]), .s(x2));
978mul_mux2 sh_13_ ( .d1(areg[14]), .z(ain[13]), .d0(areg[13]), .s(x2));
979mul_mux2 sh_12_ ( .d1(areg[13]), .z(ain[12]), .d0(areg[12]), .s(x2));
980mul_mux2 sh_11_ ( .d1(areg[12]), .z(ain[11]), .d0(areg[11]), .s(x2));
981mul_mux2 sh_10_ ( .d1(areg[11]), .z(ain[10]), .d0(areg[10]), .s(x2));
982mul_mux2 sh_9_ ( .d1(areg[10]), .z(ain[9]), .d0(areg[9]), .s(x2));
983mul_mux2 sh_8_ ( .d1(areg[9]), .z(ain[8]), .d0(areg[8]), .s(x2));
984mul_mux2 sh_7_ ( .d1(areg[8]), .z(ain[7]), .d0(areg[7]), .s(x2));
985mul_mux2 sh_6_ ( .d1(areg[7]), .z(ain[6]), .d0(areg[6]), .s(x2));
986mul_mux2 sh_5_ ( .d1(areg[6]), .z(ain[5]), .d0(areg[5]), .s(x2));
987mul_csa42  sc3_68_ ( .cin(co[67]), .d(1'b0),
988     .carry(c3[68]), .c(c2[67]), .b(s2[68]), .a(1'b0),
989     .cout(), .sum(s3[68]));
990mul_csa42  sc3_67_ ( .cin(co[66]), .d(1'b0),
991     .carry(c3[67]), .c(c2[66]), .b(s2[67]), .a(s1[67]), .cout(co[67]),
992     .sum(s3[67]));
993mul_csa42  sc3_66_ ( .cin(co[65]), .d(c1[65]), .carry(c3[66]),
994     .c(c2[65]), .b(s2[66]), .a(s1[66]), .cout(co[66]), .sum(s3[66]));
995mul_csa42  sc3_65_ ( .cin(co[64]), .d(c1[64]), .carry(c3[65]),
996     .c(c2[64]), .b(s2[65]), .a(s1[65]), .cout(co[65]), .sum(s3[65]));
997mul_csa42  sc3_64_ ( .cin(co[63]), .d(c1[63]), .carry(c3[64]),
998     .c(c2[63]), .b(s2[64]), .a(s1[64]), .cout(co[64]), .sum(s3[64]));
999mul_csa42  sc3_63_ ( .cin(co[62]), .d(c1[62]), .carry(c3[63]),
1000     .c(c2[62]), .b(s2[63]), .a(s1[63]), .cout(co[63]), .sum(s3[63]));
1001mul_csa42  sc3_62_ ( .cin(co[61]), .d(c1[61]), .carry(c3[62]),
1002     .c(c2[61]), .b(s2[62]), .a(s1[62]), .cout(co[62]), .sum(s3[62]));
1003mul_csa42  sc3_61_ ( .cin(co[60]), .d(c1[60]), .carry(c3[61]),
1004     .c(c2[60]), .b(s2[61]), .a(s1[61]), .cout(co[61]), .sum(s3[61]));
1005mul_csa42  sc3_60_ ( .cin(co[59]), .d(c1[59]), .carry(c3[60]),
1006     .c(c2[59]), .b(s2[60]), .a(s1[60]), .cout(co[60]), .sum(s3[60]));
1007mul_csa42  sc3_59_ ( .cin(co[58]), .d(c1[58]), .carry(c3[59]),
1008     .c(c2[58]), .b(s2[59]), .a(s1[59]), .cout(co[59]), .sum(s3[59]));
1009mul_csa42  sc3_58_ ( .cin(co[57]), .d(c1[57]), .carry(c3[58]),
1010     .c(c2[57]), .b(s2[58]), .a(s1[58]), .cout(co[58]), .sum(s3[58]));
1011mul_csa42  sc3_57_ ( .cin(co[56]), .d(c1[56]), .carry(c3[57]),
1012     .c(c2[56]), .b(s2[57]), .a(s1[57]), .cout(co[57]), .sum(s3[57]));
1013mul_csa42  sc3_56_ ( .cin(co[55]), .d(c1[55]), .carry(c3[56]),
1014     .c(c2[55]), .b(s2[56]), .a(s1[56]), .cout(co[56]), .sum(s3[56]));
1015mul_csa42  sc3_55_ ( .cin(co[54]), .d(c1[54]), .carry(c3[55]),
1016     .c(c2[54]), .b(s2[55]), .a(s1[55]), .cout(co[55]), .sum(s3[55]));
1017mul_csa42  sc3_54_ ( .cin(co[53]), .d(c1[53]), .carry(c3[54]),
1018     .c(c2[53]), .b(s2[54]), .a(s1[54]), .cout(co[54]), .sum(s3[54]));
1019mul_csa42  sc3_53_ ( .cin(co[52]), .d(c1[52]), .carry(c3[53]),
1020     .c(c2[52]), .b(s2[53]), .a(s1[53]), .cout(co[53]), .sum(s3[53]));
1021mul_csa42  sc3_52_ ( .cin(co[51]), .d(c1[51]), .carry(c3[52]),
1022     .c(c2[51]), .b(s2[52]), .a(s1[52]), .cout(co[52]), .sum(s3[52]));
1023mul_csa42  sc3_51_ ( .cin(co[50]), .d(c1[50]), .carry(c3[51]),
1024     .c(c2[50]), .b(s2[51]), .a(s1[51]), .cout(co[51]), .sum(s3[51]));
1025mul_csa42  sc3_50_ ( .cin(co[49]), .d(c1[49]), .carry(c3[50]),
1026     .c(c2[49]), .b(s2[50]), .a(s1[50]), .cout(co[50]), .sum(s3[50]));
1027mul_csa42  sc3_49_ ( .cin(co[48]), .d(c1[48]), .carry(c3[49]),
1028     .c(c2[48]), .b(s2[49]), .a(s1[49]), .cout(co[49]), .sum(s3[49]));
1029mul_csa42  sc3_48_ ( .cin(co[47]), .d(c1[47]), .carry(c3[48]),
1030     .c(c2[47]), .b(s2[48]), .a(s1[48]), .cout(co[48]), .sum(s3[48]));
1031mul_csa42  sc3_47_ ( .cin(co[46]), .d(c1[46]), .carry(c3[47]),
1032     .c(c2[46]), .b(s2[47]), .a(s1[47]), .cout(co[47]), .sum(s3[47]));
1033mul_csa42  sc3_46_ ( .cin(co[45]), .d(c1[45]), .carry(c3[46]),
1034     .c(c2[45]), .b(s2[46]), .a(s1[46]), .cout(co[46]), .sum(s3[46]));
1035mul_csa42  sc3_45_ ( .cin(co[44]), .d(c1[44]), .carry(c3[45]),
1036     .c(c2[44]), .b(s2[45]), .a(s1[45]), .cout(co[45]), .sum(s3[45]));
1037mul_csa42  sc3_44_ ( .cin(co[43]), .d(c1[43]), .carry(c3[44]),
1038     .c(c2[43]), .b(s2[44]), .a(s1[44]), .cout(co[44]), .sum(s3[44]));
1039mul_csa42  sc3_43_ ( .cin(co[42]), .d(c1[42]), .carry(c3[43]),
1040     .c(c2[42]), .b(s2[43]), .a(s1[43]), .cout(co[43]), .sum(s3[43]));
1041mul_csa42  sc3_42_ ( .cin(co[41]), .d(c1[41]), .carry(c3[42]),
1042     .c(c2[41]), .b(s2[42]), .a(s1[42]), .cout(co[42]), .sum(s3[42]));
1043mul_csa42  sc3_41_ ( .cin(co[40]), .d(c1[40]), .carry(c3[41]),
1044     .c(c2[40]), .b(s2[41]), .a(s1[41]), .cout(co[41]), .sum(s3[41]));
1045mul_csa42  sc3_40_ ( .cin(co[39]), .d(c1[39]), .carry(c3[40]),
1046     .c(c2[39]), .b(s2[40]), .a(s1[40]), .cout(co[40]), .sum(s3[40]));
1047mul_csa42  sc3_39_ ( .cin(co[38]), .d(c1[38]), .carry(c3[39]),
1048     .c(c2[38]), .b(s2[39]), .a(s1[39]), .cout(co[39]), .sum(s3[39]));
1049mul_csa42  sc3_38_ ( .cin(co[37]), .d(c1[37]), .carry(c3[38]),
1050     .c(c2[37]), .b(s2[38]), .a(s1[38]), .cout(co[38]), .sum(s3[38]));
1051mul_csa42  sc3_37_ ( .cin(co[36]), .d(c1[36]), .carry(c3[37]),
1052     .c(c2[36]), .b(s2[37]), .a(s1[37]), .cout(co[37]), .sum(s3[37]));
1053mul_csa42  sc3_36_ ( .cin(co[35]), .d(c1[35]), .carry(c3[36]),
1054     .c(c2[35]), .b(s2[36]), .a(s1[36]), .cout(co[36]), .sum(s3[36]));
1055mul_csa42  sc3_35_ ( .cin(co[34]), .d(c1[34]), .carry(c3[35]),
1056     .c(c2[34]), .b(s2[35]), .a(s1[35]), .cout(co[35]), .sum(s3[35]));
1057mul_csa42  sc3_34_ ( .cin(co[33]), .d(c1[33]), .carry(c3[34]),
1058     .c(c2[33]), .b(s2[34]), .a(s1[34]), .cout(co[34]), .sum(s3[34]));
1059mul_csa42  sc3_33_ ( .cin(co[32]), .d(c1[32]), .carry(c3[33]),
1060     .c(c2[32]), .b(s2[33]), .a(s1[33]), .cout(co[33]), .sum(s3[33]));
1061mul_csa42  sc3_32_ ( .cin(co[31]), .d(c1[31]), .carry(c3[32]),
1062     .c(c2[31]), .b(s2[32]), .a(s1[32]), .cout(co[32]), .sum(s3[32]));
1063mul_csa42  sc3_31_ ( .cin(co[30]), .d(c1[30]), .carry(c3[31]),
1064     .c(c2[30]), .b(s2[31]), .a(s1[31]), .cout(co[31]), .sum(s3[31]));
1065mul_csa42  sc3_30_ ( .cin(co[29]), .d(c1[29]), .carry(c3[30]),
1066     .c(c2[29]), .b(s2[30]), .a(s1[30]), .cout(co[30]), .sum(s3[30]));
1067mul_csa42  sc3_29_ ( .cin(co[28]), .d(c1[28]), .carry(c3[29]),
1068     .c(c2[28]), .b(s2[29]), .a(s1[29]), .cout(co[29]), .sum(s3[29]));
1069mul_csa42  sc3_28_ ( .cin(co[27]), .d(c1[27]), .carry(c3[28]),
1070     .c(c2[27]), .b(s2[28]), .a(s1[28]), .cout(co[28]), .sum(s3[28]));
1071mul_csa42  sc3_27_ ( .cin(co[26]), .d(c1[26]), .carry(c3[27]),
1072     .c(c2[26]), .b(s2[27]), .a(s1[27]), .cout(co[27]), .sum(s3[27]));
1073mul_csa42  sc3_26_ ( .cin(co[25]), .d(c1[25]), .carry(c3[26]),
1074     .c(c2[25]), .b(s2[26]), .a(s1[26]), .cout(co[26]), .sum(s3[26]));
1075mul_csa42  sc3_25_ ( .cin(co[24]), .d(c1[24]), .carry(c3[25]),
1076     .c(c2[24]), .b(s2[25]), .a(s1[25]), .cout(co[25]), .sum(s3[25]));
1077mul_csa42  sc3_24_ ( .cin(co[23]), .d(c1[23]), .carry(c3[24]),
1078     .c(c2[23]), .b(s2[24]), .a(s1[24]), .cout(co[24]), .sum(s3[24]));
1079mul_csa42  sc3_23_ ( .cin(co[22]), .d(c1[22]), .carry(c3[23]),
1080     .c(c2[22]), .b(s2[23]), .a(s1[23]), .cout(co[23]), .sum(s3[23]));
1081mul_csa42  sc3_22_ ( .cin(co[21]), .d(c1[21]), .carry(c3[22]),
1082     .c(c2[21]), .b(s2[22]), .a(s1[22]), .cout(co[22]), .sum(s3[22]));
1083mul_csa42  sc3_21_ ( .cin(co[20]), .d(c1[20]), .carry(c3[21]),
1084     .c(c2[20]), .b(s2[21]), .a(s1[21]), .cout(co[21]), .sum(s3[21]));
1085mul_csa42  sc3_20_ ( .cin(1'b0), .d(c1[19]),
1086     .carry(c3[20]), .c(c2[19]), .b(s2[20]), .a(s1[20]), .cout(co[20]),
1087     .sum(s3[20]));
1088mul_csa32  sc4_82_ ( .c(c3[81]), .b(s2[82]), .a(ain[82]),
1089     .cout(pcout[82]), .sum(psum[82]));
1090mul_csa32  sc4_68_ ( .c(c3[67]), .b(s3[68]), .a(ain[68]),
1091     .cout(pcout[68]), .sum(psum[68]));
1092mul_csa32  sc4_67_ ( .c(c3[66]), .b(s3[67]), .a(ain[67]),
1093     .cout(pcout[67]), .sum(psum[67]));
1094mul_csa32  sc4_66_ ( .c(c3[65]), .b(s3[66]), .a(ain[66]),
1095     .cout(pcout[66]), .sum(psum[66]));
1096mul_csa32  sc4_65_ ( .c(c3[64]), .b(s3[65]), .a(ain[65]),
1097     .cout(pcout[65]), .sum(psum[65]));
1098mul_csa32  sc4_64_ ( .c(c3[63]), .b(s3[64]), .a(ain[64]),
1099     .cout(pcout[64]), .sum(psum[64]));
1100mul_csa32  sc4_63_ ( .c(c3[62]), .b(s3[63]), .a(ain[63]),
1101     .cout(pcout[63]), .sum(psum[63]));
1102mul_csa32  sc4_62_ ( .c(c3[61]), .b(s3[62]), .a(ain[62]),
1103     .cout(pcout[62]), .sum(psum[62]));
1104mul_csa32  sc4_61_ ( .c(c3[60]), .b(s3[61]), .a(ain[61]),
1105     .cout(pcout[61]), .sum(psum[61]));
1106mul_csa32  sc4_60_ ( .c(c3[59]), .b(s3[60]), .a(ain[60]),
1107     .cout(pcout[60]), .sum(psum[60]));
1108mul_csa32  sc4_59_ ( .c(c3[58]), .b(s3[59]), .a(ain[59]),
1109     .cout(pcout[59]), .sum(psum[59]));
1110mul_csa32  sc4_58_ ( .c(c3[57]), .b(s3[58]), .a(ain[58]),
1111     .cout(pcout[58]), .sum(psum[58]));
1112mul_csa32  sc4_57_ ( .c(c3[56]), .b(s3[57]), .a(ain[57]),
1113     .cout(pcout[57]), .sum(psum[57]));
1114mul_csa32  sc4_56_ ( .c(c3[55]), .b(s3[56]), .a(ain[56]),
1115     .cout(pcout[56]), .sum(psum[56]));
1116mul_csa32  sc4_55_ ( .c(c3[54]), .b(s3[55]), .a(ain[55]),
1117     .cout(pcout[55]), .sum(psum[55]));
1118mul_csa32  sc4_54_ ( .c(c3[53]), .b(s3[54]), .a(ain[54]),
1119     .cout(pcout[54]), .sum(psum[54]));
1120mul_csa32  sc4_53_ ( .c(c3[52]), .b(s3[53]), .a(ain[53]),
1121     .cout(pcout[53]), .sum(psum[53]));
1122mul_csa32  sc4_52_ ( .c(c3[51]), .b(s3[52]), .a(ain[52]),
1123     .cout(pcout[52]), .sum(psum[52]));
1124mul_csa32  sc4_51_ ( .c(c3[50]), .b(s3[51]), .a(ain[51]),
1125     .cout(pcout[51]), .sum(psum[51]));
1126mul_csa32  sc4_50_ ( .c(c3[49]), .b(s3[50]), .a(ain[50]),
1127     .cout(pcout[50]), .sum(psum[50]));
1128mul_csa32  sc4_49_ ( .c(c3[48]), .b(s3[49]), .a(ain[49]),
1129     .cout(pcout[49]), .sum(psum[49]));
1130mul_csa32  sc4_48_ ( .c(c3[47]), .b(s3[48]), .a(ain[48]),
1131     .cout(pcout[48]), .sum(psum[48]));
1132mul_csa32  sc4_47_ ( .c(c3[46]), .b(s3[47]), .a(ain[47]),
1133     .cout(pcout[47]), .sum(psum[47]));
1134mul_csa32  sc4_46_ ( .c(c3[45]), .b(s3[46]), .a(ain[46]),
1135     .cout(pcout[46]), .sum(psum[46]));
1136mul_csa32  sc4_45_ ( .c(c3[44]), .b(s3[45]), .a(ain[45]),
1137     .cout(pcout[45]), .sum(psum[45]));
1138mul_csa32  sc4_44_ ( .c(c3[43]), .b(s3[44]), .a(ain[44]),
1139     .cout(pcout[44]), .sum(psum[44]));
1140mul_csa32  sc4_43_ ( .c(c3[42]), .b(s3[43]), .a(ain[43]),
1141     .cout(pcout[43]), .sum(psum[43]));
1142mul_csa32  sc4_42_ ( .c(c3[41]), .b(s3[42]), .a(ain[42]),
1143     .cout(pcout[42]), .sum(psum[42]));
1144mul_csa32  sc4_41_ ( .c(c3[40]), .b(s3[41]), .a(ain[41]),
1145     .cout(pcout[41]), .sum(psum[41]));
1146mul_csa32  sc4_40_ ( .c(c3[39]), .b(s3[40]), .a(ain[40]),
1147     .cout(pcout[40]), .sum(psum[40]));
1148mul_csa32  sc4_39_ ( .c(c3[38]), .b(s3[39]), .a(ain[39]),
1149     .cout(pcout[39]), .sum(psum[39]));
1150mul_csa32  sc4_38_ ( .c(c3[37]), .b(s3[38]), .a(ain[38]),
1151     .cout(pcout[38]), .sum(psum[38]));
1152mul_csa32  sc4_37_ ( .c(c3[36]), .b(s3[37]), .a(ain[37]),
1153     .cout(pcout[37]), .sum(psum[37]));
1154mul_csa32  sc4_36_ ( .c(c3[35]), .b(s3[36]), .a(ain[36]),
1155     .cout(pcout[36]), .sum(psum[36]));
1156mul_csa32  sc4_35_ ( .c(c3[34]), .b(s3[35]), .a(ain[35]),
1157     .cout(pcout[35]), .sum(psum[35]));
1158mul_csa32  sc4_34_ ( .c(c3[33]), .b(s3[34]), .a(ain[34]),
1159     .cout(pcout[34]), .sum(psum[34]));
1160mul_csa32  sc4_33_ ( .c(c3[32]), .b(s3[33]), .a(ain[33]),
1161     .cout(pcout[33]), .sum(psum[33]));
1162mul_csa32  sc4_32_ ( .c(c3[31]), .b(s3[32]), .a(ain[32]),
1163     .cout(pcout[32]), .sum(psum[32]));
1164mul_csa32  sc4_31_ ( .c(c3[30]), .b(s3[31]), .a(ain[31]),
1165     .cout(pcout[31]), .sum(psum[31]));
1166mul_csa32  sc4_30_ ( .c(c3[29]), .b(s3[30]), .a(ain[30]),
1167     .cout(pcout[30]), .sum(psum[30]));
1168mul_csa32  sc4_29_ ( .c(c3[28]), .b(s3[29]), .a(ain[29]),
1169     .cout(pcout[29]), .sum(psum[29]));
1170mul_csa32  sc4_28_ ( .c(c3[27]), .b(s3[28]), .a(ain[28]),
1171     .cout(pcout[28]), .sum(psum[28]));
1172mul_csa32  sc4_27_ ( .c(c3[26]), .b(s3[27]), .a(ain[27]),
1173     .cout(pcout[27]), .sum(psum[27]));
1174mul_csa32  sc4_26_ ( .c(c3[25]), .b(s3[26]), .a(ain[26]),
1175     .cout(pcout[26]), .sum(psum[26]));
1176mul_csa32  sc4_25_ ( .c(c3[24]), .b(s3[25]), .a(ain[25]),
1177     .cout(pcout[25]), .sum(psum[25]));
1178mul_csa32  sc4_24_ ( .c(c3[23]), .b(s3[24]), .a(ain[24]),
1179     .cout(pcout[24]), .sum(psum[24]));
1180mul_csa32  sc4_23_ ( .c(c3[22]), .b(s3[23]), .a(ain[23]),
1181     .cout(pcout[23]), .sum(psum[23]));
1182mul_csa32  sc4_22_ ( .c(c3[21]), .b(s3[22]), .a(ain[22]),
1183     .cout(pcout[22]), .sum(psum[22]));
1184mul_csa32  sc4_21_ ( .c(c3[20]), .b(s3[21]), .a(ain[21]),
1185     .cout(pcout[21]), .sum(psum[21]));
1186mul_csa32  sc4_20_ ( .c(c3[19]), .b(s3[20]), .a(ain[20]),
1187     .cout(pcout[20]), .sum(psum[20]));
1188mul_csa32  sc4_96_ ( .c(c2[95]), .b(s2[96]), .a(ain[96]),
1189     .cout(pcout[96]), .sum(psum[96]));
1190mul_csa32  sc4_95_ ( .c(c2[94]), .b(s2[95]), .a(ain[95]),
1191     .cout(pcout[95]), .sum(psum[95]));
1192mul_csa32  sc4_94_ ( .c(c2[93]), .b(s2[94]), .a(ain[94]),
1193     .cout(pcout[94]), .sum(psum[94]));
1194mul_csa32  sc4_93_ ( .c(c2[92]), .b(s2[93]), .a(ain[93]),
1195     .cout(pcout[93]), .sum(psum[93]));
1196mul_csa32  sc4_92_ ( .c(c2[91]), .b(s2[92]), .a(ain[92]),
1197     .cout(pcout[92]), .sum(psum[92]));
1198mul_csa32  sc4_91_ ( .c(c2[90]), .b(s2[91]), .a(ain[91]),
1199     .cout(pcout[91]), .sum(psum[91]));
1200mul_csa32  sc4_90_ ( .c(c2[89]), .b(s2[90]), .a(ain[90]),
1201     .cout(pcout[90]), .sum(psum[90]));
1202mul_csa32  sc4_89_ ( .c(c2[88]), .b(s2[89]), .a(ain[89]),
1203     .cout(pcout[89]), .sum(psum[89]));
1204mul_csa32  sc4_88_ ( .c(c2[87]), .b(s2[88]), .a(ain[88]),
1205     .cout(pcout[88]), .sum(psum[88]));
1206mul_csa32  sc4_87_ ( .c(c2[86]), .b(s2[87]), .a(ain[87]),
1207     .cout(pcout[87]), .sum(psum[87]));
1208mul_csa32  sc4_86_ ( .c(c2[85]), .b(s2[86]), .a(ain[86]),
1209     .cout(pcout[86]), .sum(psum[86]));
1210mul_csa32  sc4_85_ ( .c(c2[84]), .b(s2[85]), .a(ain[85]),
1211     .cout(pcout[85]), .sum(psum[85]));
1212mul_csa32  sc4_84_ ( .c(c2[83]), .b(s2[84]), .a(ain[84]),
1213     .cout(pcout[84]), .sum(psum[84]));
1214mul_csa32  sc4_81_ ( .c(c3[80]), .b(s3[81]), .a(ain[81]),
1215     .cout(pcout[81]), .sum(psum[81]));
1216mul_csa32  sc4_80_ ( .c(c3[79]), .b(s3[80]), .a(ain[80]),
1217     .cout(pcout[80]), .sum(psum[80]));
1218mul_csa32  sc4_79_ ( .c(c3[78]), .b(s3[79]), .a(ain[79]),
1219     .cout(pcout[79]), .sum(psum[79]));
1220mul_csa32  sc4_78_ ( .c(c3[77]), .b(s3[78]), .a(ain[78]),
1221     .cout(pcout[78]), .sum(psum[78]));
1222mul_csa32  sc4_77_ ( .c(c3[76]), .b(s3[77]), .a(ain[77]),
1223     .cout(pcout[77]), .sum(psum[77]));
1224mul_csa32  sc4_76_ ( .c(c3[75]), .b(s3[76]), .a(ain[76]),
1225     .cout(pcout[76]), .sum(psum[76]));
1226mul_csa32  sc4_75_ ( .c(c3[74]), .b(s3[75]), .a(ain[75]),
1227     .cout(pcout[75]), .sum(psum[75]));
1228mul_csa32  sc4_74_ ( .c(c3[73]), .b(s3[74]), .a(ain[74]),
1229     .cout(pcout[74]), .sum(psum[74]));
1230mul_csa32  sc4_73_ ( .c(c3[72]), .b(s3[73]), .a(ain[73]),
1231     .cout(pcout[73]), .sum(psum[73]));
1232mul_csa32  sc4_72_ ( .c(c3[71]), .b(s3[72]), .a(ain[72]),
1233     .cout(pcout[72]), .sum(psum[72]));
1234mul_csa32  sc4_71_ ( .c(c3[70]), .b(s3[71]), .a(ain[71]),
1235     .cout(pcout[71]), .sum(psum[71]));
1236mul_csa32  sc4_70_ ( .c(c3[69]), .b(s3[70]), .a(ain[70]),
1237     .cout(pcout[70]), .sum(psum[70]));
1238mul_csa32  sc4_69_ ( .c(c3[68]), .b(s3[69]), .a(ain[69]),
1239     .cout(pcout[69]), .sum(psum[69]));
1240mul_csa32  acc_4_ ( .c(c2[3]), .sum(psum[4]), .cout(pcout[4]),
1241     .a(ain[4]), .b(s2[4]));
1242mul_csa32  acc_3_ ( .c(c2[2]), .sum(psum[3]), .cout(pcout[3]),
1243     .a(ain[3]), .b(s2[3]));
1244mul_csa32  acc_2_ ( .c(c2[1]), .sum(psum[2]), .cout(pcout[2]),
1245     .a(ain[2]), .b(s2[2]));
1246mul_csa32  acc_1_ ( .c(c2[0]), .sum(psum[1]), .cout(pcout[1]),
1247     .a(ain[1]), .b(s2[1]));
1248mul_csa32  sc3_97_ ( .c(c2[96]), .sum(psum[97]), .cout(pcout[97]),
1249     .a(a1s[81]), .b(a1c[80]));
1250mul_csa32  sc1_19_ ( .c(a1s[3]), .b(pc[50]), .a(ps[51]),
1251     .cout(c1[19]), .sum(s1[19]));
1252mul_csa32  sc1_18_ ( .c(a1s[2]), .b(pc[49]), .a(ps[50]),
1253     .cout(c1[18]), .sum(s1[18]));
1254mul_csa32  sc1_17_ ( .c(a1s[1]), .b(pc[48]), .a(ps[49]),
1255     .cout(c1[17]), .sum(s1[17]));
1256mul_csa32  sc1_16_ ( .c(a1s[0]), .b(pc[47]), .a(ps[48]),
1257     .cout(c1[16]), .sum(s1[16]));
1258mul_csa32  sc1_15_ ( .c(1'b0), .b(pc[46]), .a(ps[47]),
1259     .cout(c1[15]), .sum(s1[15]));
1260mul_csa32  sc4_83_ ( .c(c2[82]), .b(s2[83]), .a(ain[83]),
1261     .cout(pcout[83]), .sum(psum[83]));
1262mul_csa32  sc2_83_ ( .c(c1[82]), .b(a1c[66]), .a(a1s[67]),
1263     .cout(c2[83]), .sum(s2[83]));
1264mul_csa32  sc2_19_ ( .c(a0c[18]), .b(a0s[19]), .a(s1[19]),
1265     .cout(c2[19]), .sum(s2[19]));
1266mul_csa32  sc2_18_ ( .c(a0c[17]), .b(a0s[18]), .a(s1[18]),
1267     .cout(c2[18]), .sum(s2[18]));
1268mul_csa32  sc2_17_ ( .c(a0c[16]), .b(a0s[17]), .a(s1[17]),
1269     .cout(c2[17]), .sum(s2[17]));
1270mul_csa32  sc2_16_ ( .c(a0c[15]), .b(a0s[16]), .a(s1[16]),
1271     .cout(c2[16]), .sum(s2[16]));
1272mul_csa32  sc2_15_ ( .c(a0c[14]), .b(a0s[15]), .a(s1[15]),
1273     .cout(c2[15]), .sum(s2[15]));
1274mul_csa32  sc1_81_ ( .c(a0s[81]), .b(a1c[64]), .a(a1s[65]),
1275     .cout(c1[81]), .sum(s1[81]));
1276mul_csa32  sc1_80_ ( .c(a0s[80]), .b(a1c[63]), .a(a1s[64]),
1277     .cout(c1[80]), .sum(s1[80]));
1278mul_csa32  sc1_79_ ( .c(a0s[79]), .b(a1c[62]), .a(a1s[63]),
1279     .cout(c1[79]), .sum(s1[79]));
1280mul_csa32  sc1_78_ ( .c(a0s[78]), .b(a1c[61]), .a(a1s[62]),
1281     .cout(c1[78]), .sum(s1[78]));
1282mul_csa32  sc1_77_ ( .c(a0s[77]), .b(a1c[60]), .a(a1s[61]),
1283     .cout(c1[77]), .sum(s1[77]));
1284mul_csa32  sc1_76_ ( .c(a0s[76]), .b(a1c[59]), .a(a1s[60]),
1285     .cout(c1[76]), .sum(s1[76]));
1286mul_csa32  sc1_75_ ( .c(a0s[75]), .b(a1c[58]), .a(a1s[59]),
1287     .cout(c1[75]), .sum(s1[75]));
1288mul_csa32  sc1_74_ ( .c(a0s[74]), .b(a1c[57]), .a(a1s[58]),
1289     .cout(c1[74]), .sum(s1[74]));
1290mul_csa32  sc1_73_ ( .c(a0s[73]), .b(a1c[56]), .a(a1s[57]),
1291     .cout(c1[73]), .sum(s1[73]));
1292mul_csa32  sc1_72_ ( .c(a0s[72]), .b(a1c[55]), .a(a1s[56]),
1293     .cout(c1[72]), .sum(s1[72]));
1294mul_csa32  sc1_71_ ( .c(a0s[71]), .b(a1c[54]), .a(a1s[55]),
1295     .cout(c1[71]), .sum(s1[71]));
1296mul_csa32  sc1_70_ ( .c(a0s[70]), .b(a1c[53]), .a(a1s[54]),
1297     .cout(c1[70]), .sum(s1[70]));
1298mul_csa32  sc1_69_ ( .c(a0s[69]), .b(a1c[52]), .a(a1s[53]),
1299     .cout(c1[69]), .sum(s1[69]));
1300mul_csa32  sc1_68_ ( .c(a0s[68]), .b(a1c[51]), .a(a1s[52]),
1301     .cout(c1[68]), .sum(s1[68]));
1302mul_csa32  sc3_19_ ( .c(c2[18]), .b(c1[18]), .a(s2[19]),
1303     .cout(c3[19]), .sum(s3[19]));
1304mul_csa32  sc3_18_ ( .c(c2[17]), .b(c1[17]), .a(s2[18]),
1305     .cout(c3[18]), .sum(s3[18]));
1306mul_csa32  sc3_17_ ( .c(c2[16]), .b(c1[16]), .a(s2[17]),
1307     .cout(c3[17]), .sum(s3[17]));
1308mul_csa32  sc3_16_ ( .c(c2[15]), .b(c1[15]), .a(s2[16]),
1309     .cout(c3[16]), .sum(s3[16]));
1310mul_csa32  sc3_15_ ( .c(c2[14]), .b(c1[14]), .a(s2[15]),
1311     .cout(c3[15]), .sum(s3[15]));
1312mul_csa32  sc1_82_ ( .c(a0c[81]), .b(a1c[65]), .a(a1s[66]),
1313     .cout(c1[82]), .sum(s1[82]));
1314mul_csa32  acc_14_ ( .c(c2[13]), .sum(psum[14]), .cout(pcout[14]),
1315     .a(ain[14]), .b(s2[14]));
1316mul_csa32  acc_13_ ( .c(c2[12]), .sum(psum[13]), .cout(pcout[13]),
1317     .a(ain[13]), .b(s2[13]));
1318mul_csa32  acc_12_ ( .c(c2[11]), .sum(psum[12]), .cout(pcout[12]),
1319     .a(ain[12]), .b(s2[12]));
1320mul_csa32  acc_11_ ( .c(c2[10]), .sum(psum[11]), .cout(pcout[11]),
1321     .a(ain[11]), .b(s2[11]));
1322mul_csa32  acc_10_ ( .c(c2[9]), .sum(psum[10]), .cout(pcout[10]),
1323     .a(ain[10]), .b(s2[10]));
1324mul_csa32  acc_9_ ( .c(c2[8]), .sum(psum[9]), .cout(pcout[9]),
1325     .a(ain[9]), .b(s2[9]));
1326mul_csa32  acc_8_ ( .c(c2[7]), .sum(psum[8]), .cout(pcout[8]),
1327     .a(ain[8]), .b(s2[8]));
1328mul_csa32  acc_7_ ( .c(c2[6]), .sum(psum[7]), .cout(pcout[7]),
1329     .a(ain[7]), .b(s2[7]));
1330mul_csa32  acc_6_ ( .c(c2[5]), .sum(psum[6]), .cout(pcout[6]),
1331     .a(ain[6]), .b(s2[6]));
1332mul_csa32  acc_5_ ( .c(c2[4]), .sum(psum[5]), .cout(pcout[5]),
1333     .a(ain[5]), .b(s2[5]));
1334mul_csa32  sc2_67_ ( .c(a0c[66]), .b(c1[66]), .a(a0s[67]),
1335     .cout(c2[67]), .sum(s2[67]));
1336mul_csa32  sc1_14_ ( .c(a0s[14]), .b(pc[45]), .a(ps[46]),
1337     .cout(c1[14]), .sum(s1[14]));
1338mul_csa32  sc1_13_ ( .c(a0s[13]), .b(pc[44]), .a(ps[45]),
1339     .cout(c1[13]), .sum(s1[13]));
1340mul_csa32  sc1_12_ ( .c(a0s[12]), .b(pc[43]), .a(ps[44]),
1341     .cout(c1[12]), .sum(s1[12]));
1342mul_csa32  sc1_11_ ( .c(a0s[11]), .b(pc[42]), .a(ps[43]),
1343     .cout(c1[11]), .sum(s1[11]));
1344mul_csa32  sc1_10_ ( .c(a0s[10]), .b(pc[41]), .a(ps[42]),
1345     .cout(c1[10]), .sum(s1[10]));
1346mul_csa32  sc1_9_ ( .c(a0s[9]), .b(pc[40]), .a(ps[41]), .cout(c1[9]),
1347     .sum(s1[9]));
1348mul_csa32  sc1_8_ ( .c(a0s[8]), .b(pc[39]), .a(ps[40]), .cout(c1[8]),
1349     .sum(s1[8]));
1350mul_csa32  sc1_7_ ( .c(a0s[7]), .b(pc[38]), .a(ps[39]), .cout(c1[7]),
1351     .sum(s1[7]));
1352mul_csa32  sc1_6_ ( .c(a0s[6]), .b(pc[37]), .a(ps[38]), .cout(c1[6]),
1353     .sum(s1[6]));
1354mul_csa32  sc1_5_ ( .c(a0s[5]), .b(pc[36]), .a(ps[37]), .cout(c1[5]),
1355     .sum(s1[5]));
1356mul_csa32  sc2_14_ ( .c(a0c[13]), .b(c1[13]), .a(s1[14]),
1357     .cout(c2[14]), .sum(s2[14]));
1358mul_csa32  sc2_13_ ( .c(a0c[12]), .b(c1[12]), .a(s1[13]),
1359     .cout(c2[13]), .sum(s2[13]));
1360mul_csa32  sc2_12_ ( .c(a0c[11]), .b(c1[11]), .a(s1[12]),
1361     .cout(c2[12]), .sum(s2[12]));
1362mul_csa32  sc2_11_ ( .c(a0c[10]), .b(c1[10]), .a(s1[11]),
1363     .cout(c2[11]), .sum(s2[11]));
1364mul_csa32  sc2_10_ ( .c(a0c[9]), .b(c1[9]), .a(s1[10]),
1365     .cout(c2[10]), .sum(s2[10]));
1366mul_csa32  sc2_9_ ( .c(a0c[8]), .b(c1[8]), .a(s1[9]), .cout(c2[9]),
1367     .sum(s2[9]));
1368mul_csa32  sc2_8_ ( .c(a0c[7]), .b(c1[7]), .a(s1[8]), .cout(c2[8]),
1369     .sum(s2[8]));
1370mul_csa32  sc2_7_ ( .c(a0c[6]), .b(c1[6]), .a(s1[7]), .cout(c2[7]),
1371     .sum(s2[7]));
1372mul_csa32  sc2_6_ ( .c(a0c[5]), .b(c1[5]), .a(s1[6]), .cout(c2[6]),
1373     .sum(s2[6]));
1374mul_csa32  sc2_5_ ( .c(a0c[4]), .b(c1[4]), .a(s1[5]), .cout(c2[5]),
1375     .sum(s2[5]));
1376mul_csa32  sc2_82_ ( .c(c2[81]), .b(c1[81]), .a(s1[82]),
1377     .cout(c2[82]), .sum(s2[82]));
1378mul_csa32  sc1_4_ ( .c(a0s[4]), .b(pc[35]), .a(ps[36]), .cout(c1[4]),
1379     .sum(s1[4]));
1380mul_csa32  sc1_3_ ( .c(a0s[3]), .b(pc[34]), .a(ps[35]), .cout(c1[3]),
1381     .sum(s1[3]));
1382mul_csa32  sc1_2_ ( .c(a0s[2]), .b(pc[33]), .a(ps[34]), .cout(c1[2]),
1383     .sum(s1[2]));
1384mul_csa32  sc1_1_ ( .c(a0s[1]), .b(pc[32]), .a(ps[33]), .cout(c1[1]),
1385     .sum(s1[1]));
1386mul_csa32  sc2_66_ ( .c(a0c[65]), .b(a0s[66]), .a(a1c[49]),
1387     .cout(c2[66]), .sum(s2[66]));
1388mul_csa32  sc2_65_ ( .c(a0c[64]), .b(a0s[65]), .a(a1c[48]),
1389     .cout(c2[65]), .sum(s2[65]));
1390mul_csa32  sc2_64_ ( .c(a0c[63]), .b(a0s[64]), .a(a1c[47]),
1391     .cout(c2[64]), .sum(s2[64]));
1392mul_csa32  sc2_63_ ( .c(a0c[62]), .b(a0s[63]), .a(a1c[46]),
1393     .cout(c2[63]), .sum(s2[63]));
1394mul_csa32  sc2_62_ ( .c(a0c[61]), .b(a0s[62]), .a(a1c[45]),
1395     .cout(c2[62]), .sum(s2[62]));
1396mul_csa32  sc2_61_ ( .c(a0c[60]), .b(a0s[61]), .a(a1c[44]),
1397     .cout(c2[61]), .sum(s2[61]));
1398mul_csa32  sc2_60_ ( .c(a0c[59]), .b(a0s[60]), .a(a1c[43]),
1399     .cout(c2[60]), .sum(s2[60]));
1400mul_csa32  sc2_59_ ( .c(a0c[58]), .b(a0s[59]), .a(a1c[42]),
1401     .cout(c2[59]), .sum(s2[59]));
1402mul_csa32  sc2_58_ ( .c(a0c[57]), .b(a0s[58]), .a(a1c[41]),
1403     .cout(c2[58]), .sum(s2[58]));
1404mul_csa32  sc2_57_ ( .c(a0c[56]), .b(a0s[57]), .a(a1c[40]),
1405     .cout(c2[57]), .sum(s2[57]));
1406mul_csa32  sc2_56_ ( .c(a0c[55]), .b(a0s[56]), .a(a1c[39]),
1407     .cout(c2[56]), .sum(s2[56]));
1408mul_csa32  sc2_55_ ( .c(a0c[54]), .b(a0s[55]), .a(a1c[38]),
1409     .cout(c2[55]), .sum(s2[55]));
1410mul_csa32  sc2_54_ ( .c(a0c[53]), .b(a0s[54]), .a(a1c[37]),
1411     .cout(c2[54]), .sum(s2[54]));
1412mul_csa32  sc2_53_ ( .c(a0c[52]), .b(a0s[53]), .a(a1c[36]),
1413     .cout(c2[53]), .sum(s2[53]));
1414mul_csa32  sc2_52_ ( .c(a0c[51]), .b(a0s[52]), .a(a1c[35]),
1415     .cout(c2[52]), .sum(s2[52]));
1416mul_csa32  sc2_51_ ( .c(a0c[50]), .b(a0s[51]), .a(a1c[34]),
1417     .cout(c2[51]), .sum(s2[51]));
1418mul_csa32  sc2_50_ ( .c(a0c[49]), .b(a0s[50]), .a(a1c[33]),
1419     .cout(c2[50]), .sum(s2[50]));
1420mul_csa32  sc2_49_ ( .c(a0c[48]), .b(a0s[49]), .a(a1c[32]),
1421     .cout(c2[49]), .sum(s2[49]));
1422mul_csa32  sc2_48_ ( .c(a0c[47]), .b(a0s[48]), .a(a1c[31]),
1423     .cout(c2[48]), .sum(s2[48]));
1424mul_csa32  sc2_47_ ( .c(a0c[46]), .b(a0s[47]), .a(a1c[30]),
1425     .cout(c2[47]), .sum(s2[47]));
1426mul_csa32  sc2_46_ ( .c(a0c[45]), .b(a0s[46]), .a(a1c[29]),
1427     .cout(c2[46]), .sum(s2[46]));
1428mul_csa32  sc2_45_ ( .c(a0c[44]), .b(a0s[45]), .a(a1c[28]),
1429     .cout(c2[45]), .sum(s2[45]));
1430mul_csa32  sc2_44_ ( .c(a0c[43]), .b(a0s[44]), .a(a1c[27]),
1431     .cout(c2[44]), .sum(s2[44]));
1432mul_csa32  sc2_43_ ( .c(a0c[42]), .b(a0s[43]), .a(a1c[26]),
1433     .cout(c2[43]), .sum(s2[43]));
1434mul_csa32  sc2_42_ ( .c(a0c[41]), .b(a0s[42]), .a(a1c[25]),
1435     .cout(c2[42]), .sum(s2[42]));
1436mul_csa32  sc2_41_ ( .c(a0c[40]), .b(a0s[41]), .a(a1c[24]),
1437     .cout(c2[41]), .sum(s2[41]));
1438mul_csa32  sc2_40_ ( .c(a0c[39]), .b(a0s[40]), .a(a1c[23]),
1439     .cout(c2[40]), .sum(s2[40]));
1440mul_csa32  sc2_39_ ( .c(a0c[38]), .b(a0s[39]), .a(a1c[22]),
1441     .cout(c2[39]), .sum(s2[39]));
1442mul_csa32  sc2_38_ ( .c(a0c[37]), .b(a0s[38]), .a(a1c[21]),
1443     .cout(c2[38]), .sum(s2[38]));
1444mul_csa32  sc2_37_ ( .c(a0c[36]), .b(a0s[37]), .a(a1c[20]),
1445     .cout(c2[37]), .sum(s2[37]));
1446mul_csa32  sc2_36_ ( .c(a0c[35]), .b(a0s[36]), .a(a1c[19]),
1447     .cout(c2[36]), .sum(s2[36]));
1448mul_csa32  sc2_35_ ( .c(a0c[34]), .b(a0s[35]), .a(a1c[18]),
1449     .cout(c2[35]), .sum(s2[35]));
1450mul_csa32  sc2_34_ ( .c(a0c[33]), .b(a0s[34]), .a(a1c[17]),
1451     .cout(c2[34]), .sum(s2[34]));
1452mul_csa32  sc2_33_ ( .c(a0c[32]), .b(a0s[33]), .a(a1c[16]),
1453     .cout(c2[33]), .sum(s2[33]));
1454mul_csa32  sc2_32_ ( .c(a0c[31]), .b(a0s[32]), .a(a1c[15]),
1455     .cout(c2[32]), .sum(s2[32]));
1456mul_csa32  sc2_31_ ( .c(a0c[30]), .b(a0s[31]), .a(a1c[14]),
1457     .cout(c2[31]), .sum(s2[31]));
1458mul_csa32  sc2_30_ ( .c(a0c[29]), .b(a0s[30]), .a(a1c[13]),
1459     .cout(c2[30]), .sum(s2[30]));
1460mul_csa32  sc2_29_ ( .c(a0c[28]), .b(a0s[29]), .a(a1c[12]),
1461     .cout(c2[29]), .sum(s2[29]));
1462mul_csa32  sc2_28_ ( .c(a0c[27]), .b(a0s[28]), .a(a1c[11]),
1463     .cout(c2[28]), .sum(s2[28]));
1464mul_csa32  sc2_27_ ( .c(a0c[26]), .b(a0s[27]), .a(a1c[10]),
1465     .cout(c2[27]), .sum(s2[27]));
1466mul_csa32  sc2_26_ ( .c(a0c[25]), .b(a0s[26]), .a(a1c[9]),
1467     .cout(c2[26]), .sum(s2[26]));
1468mul_csa32  sc2_25_ ( .c(a0c[24]), .b(a0s[25]), .a(a1c[8]),
1469     .cout(c2[25]), .sum(s2[25]));
1470mul_csa32  sc2_24_ ( .c(a0c[23]), .b(a0s[24]), .a(a1c[7]),
1471     .cout(c2[24]), .sum(s2[24]));
1472mul_csa32  sc2_23_ ( .c(a0c[22]), .b(a0s[23]), .a(a1c[6]),
1473     .cout(c2[23]), .sum(s2[23]));
1474mul_csa32  sc2_22_ ( .c(a0c[21]), .b(a0s[22]), .a(a1c[5]),
1475     .cout(c2[22]), .sum(s2[22]));
1476mul_csa32  sc2_21_ ( .c(a0c[20]), .b(a0s[21]), .a(a1c[4]),
1477     .cout(c2[21]), .sum(s2[21]));
1478mul_csa32  sc2_20_ ( .c(a0c[19]), .b(a0s[20]), .a(1'b0),
1479     .cout(c2[20]), .sum(s2[20]));
1480mul_csa32  sc1_66_ ( .c(a1s[50]), .b(pc[97]), .a(ps[98]),
1481     .cout(c1[66]), .sum(s1[66]));
1482mul_csa32  sc1_65_ ( .c(a1s[49]), .b(pc[96]), .a(ps[97]),
1483     .cout(c1[65]), .sum(s1[65]));
1484mul_csa32  sc1_64_ ( .c(a1s[48]), .b(pc[95]), .a(ps[96]),
1485     .cout(c1[64]), .sum(s1[64]));
1486mul_csa32  sc1_63_ ( .c(a1s[47]), .b(pc[94]), .a(ps[95]),
1487     .cout(c1[63]), .sum(s1[63]));
1488mul_csa32  sc1_62_ ( .c(a1s[46]), .b(pc[93]), .a(ps[94]),
1489     .cout(c1[62]), .sum(s1[62]));
1490mul_csa32  sc1_61_ ( .c(a1s[45]), .b(pc[92]), .a(ps[93]),
1491     .cout(c1[61]), .sum(s1[61]));
1492mul_csa32  sc1_60_ ( .c(a1s[44]), .b(pc[91]), .a(ps[92]),
1493     .cout(c1[60]), .sum(s1[60]));
1494mul_csa32  sc1_59_ ( .c(a1s[43]), .b(pc[90]), .a(ps[91]),
1495     .cout(c1[59]), .sum(s1[59]));
1496mul_csa32  sc1_58_ ( .c(a1s[42]), .b(pc[89]), .a(ps[90]),
1497     .cout(c1[58]), .sum(s1[58]));
1498mul_csa32  sc1_57_ ( .c(a1s[41]), .b(pc[88]), .a(ps[89]),
1499     .cout(c1[57]), .sum(s1[57]));
1500mul_csa32  sc1_56_ ( .c(a1s[40]), .b(pc[87]), .a(ps[88]),
1501     .cout(c1[56]), .sum(s1[56]));
1502mul_csa32  sc1_55_ ( .c(a1s[39]), .b(pc[86]), .a(ps[87]),
1503     .cout(c1[55]), .sum(s1[55]));
1504mul_csa32  sc1_54_ ( .c(a1s[38]), .b(pc[85]), .a(ps[86]),
1505     .cout(c1[54]), .sum(s1[54]));
1506mul_csa32  sc1_53_ ( .c(a1s[37]), .b(pc[84]), .a(ps[85]),
1507     .cout(c1[53]), .sum(s1[53]));
1508mul_csa32  sc1_52_ ( .c(a1s[36]), .b(pc[83]), .a(ps[84]),
1509     .cout(c1[52]), .sum(s1[52]));
1510mul_csa32  sc1_51_ ( .c(a1s[35]), .b(pc[82]), .a(ps[83]),
1511     .cout(c1[51]), .sum(s1[51]));
1512mul_csa32  sc1_50_ ( .c(a1s[34]), .b(pc[81]), .a(ps[82]),
1513     .cout(c1[50]), .sum(s1[50]));
1514mul_csa32  sc1_49_ ( .c(a1s[33]), .b(pc[80]), .a(ps[81]),
1515     .cout(c1[49]), .sum(s1[49]));
1516mul_csa32  sc1_48_ ( .c(a1s[32]), .b(pc[79]), .a(ps[80]),
1517     .cout(c1[48]), .sum(s1[48]));
1518mul_csa32  sc1_47_ ( .c(a1s[31]), .b(pc[78]), .a(ps[79]),
1519     .cout(c1[47]), .sum(s1[47]));
1520mul_csa32  sc1_46_ ( .c(a1s[30]), .b(pc[77]), .a(ps[78]),
1521     .cout(c1[46]), .sum(s1[46]));
1522mul_csa32  sc1_45_ ( .c(a1s[29]), .b(pc[76]), .a(ps[77]),
1523     .cout(c1[45]), .sum(s1[45]));
1524mul_csa32  sc1_44_ ( .c(a1s[28]), .b(pc[75]), .a(ps[76]),
1525     .cout(c1[44]), .sum(s1[44]));
1526mul_csa32  sc1_43_ ( .c(a1s[27]), .b(pc[74]), .a(ps[75]),
1527     .cout(c1[43]), .sum(s1[43]));
1528mul_csa32  sc1_42_ ( .c(a1s[26]), .b(pc[73]), .a(ps[74]),
1529     .cout(c1[42]), .sum(s1[42]));
1530mul_csa32  sc1_41_ ( .c(a1s[25]), .b(pc[72]), .a(ps[73]),
1531     .cout(c1[41]), .sum(s1[41]));
1532mul_csa32  sc1_40_ ( .c(a1s[24]), .b(pc[71]), .a(ps[72]),
1533     .cout(c1[40]), .sum(s1[40]));
1534mul_csa32  sc1_39_ ( .c(a1s[23]), .b(pc[70]), .a(ps[71]),
1535     .cout(c1[39]), .sum(s1[39]));
1536mul_csa32  sc1_38_ ( .c(a1s[22]), .b(pc[69]), .a(ps[70]),
1537     .cout(c1[38]), .sum(s1[38]));
1538mul_csa32  sc1_37_ ( .c(a1s[21]), .b(pc[68]), .a(ps[69]),
1539     .cout(c1[37]), .sum(s1[37]));
1540mul_csa32  sc1_36_ ( .c(a1s[20]), .b(pc[67]), .a(ps[68]),
1541     .cout(c1[36]), .sum(s1[36]));
1542mul_csa32  sc1_35_ ( .c(a1s[19]), .b(pc[66]), .a(ps[67]),
1543     .cout(c1[35]), .sum(s1[35]));
1544mul_csa32  sc1_34_ ( .c(a1s[18]), .b(pc[65]), .a(ps[66]),
1545     .cout(c1[34]), .sum(s1[34]));
1546mul_csa32  sc1_33_ ( .c(a1s[17]), .b(pc[64]), .a(ps[65]),
1547     .cout(c1[33]), .sum(s1[33]));
1548mul_csa32  sc1_32_ ( .c(a1s[16]), .b(pc[63]), .a(ps[64]),
1549     .cout(c1[32]), .sum(s1[32]));
1550mul_csa32  sc1_31_ ( .c(a1s[15]), .b(pc[62]), .a(ps[63]),
1551     .cout(c1[31]), .sum(s1[31]));
1552mul_csa32  sc1_30_ ( .c(a1s[14]), .b(pc[61]), .a(ps[62]),
1553     .cout(c1[30]), .sum(s1[30]));
1554mul_csa32  sc1_29_ ( .c(a1s[13]), .b(pc[60]), .a(ps[61]),
1555     .cout(c1[29]), .sum(s1[29]));
1556mul_csa32  sc1_28_ ( .c(a1s[12]), .b(pc[59]), .a(ps[60]),
1557     .cout(c1[28]), .sum(s1[28]));
1558mul_csa32  sc1_27_ ( .c(a1s[11]), .b(pc[58]), .a(ps[59]),
1559     .cout(c1[27]), .sum(s1[27]));
1560mul_csa32  sc1_26_ ( .c(a1s[10]), .b(pc[57]), .a(ps[58]),
1561     .cout(c1[26]), .sum(s1[26]));
1562mul_csa32  sc1_25_ ( .c(a1s[9]), .b(pc[56]), .a(ps[57]),
1563     .cout(c1[25]), .sum(s1[25]));
1564mul_csa32  sc1_24_ ( .c(a1s[8]), .b(pc[55]), .a(ps[56]),
1565     .cout(c1[24]), .sum(s1[24]));
1566mul_csa32  sc1_23_ ( .c(a1s[7]), .b(pc[54]), .a(ps[55]),
1567     .cout(c1[23]), .sum(s1[23]));
1568mul_csa32  sc1_22_ ( .c(a1s[6]), .b(pc[53]), .a(ps[54]),
1569     .cout(c1[22]), .sum(s1[22]));
1570mul_csa32  sc1_21_ ( .c(a1s[5]), .b(pc[52]), .a(ps[53]),
1571     .cout(c1[21]), .sum(s1[21]));
1572mul_csa32  sc1_20_ ( .c(a1s[4]), .b(pc[51]), .a(ps[52]),
1573     .cout(c1[20]), .sum(s1[20]));
1574mul_csa32  sc2_81_ ( .c(a0c[80]), .b(c1[80]), .a(s1[81]),
1575     .cout(c2[81]), .sum(s2[81]));
1576mul_csa32  sc2_80_ ( .c(a0c[79]), .b(c1[79]), .a(s1[80]),
1577     .cout(c2[80]), .sum(s2[80]));
1578mul_csa32  sc2_79_ ( .c(a0c[78]), .b(c1[78]), .a(s1[79]),
1579     .cout(c2[79]), .sum(s2[79]));
1580mul_csa32  sc2_78_ ( .c(a0c[77]), .b(c1[77]), .a(s1[78]),
1581     .cout(c2[78]), .sum(s2[78]));
1582mul_csa32  sc2_77_ ( .c(a0c[76]), .b(c1[76]), .a(s1[77]),
1583     .cout(c2[77]), .sum(s2[77]));
1584mul_csa32  sc2_76_ ( .c(a0c[75]), .b(c1[75]), .a(s1[76]),
1585     .cout(c2[76]), .sum(s2[76]));
1586mul_csa32  sc2_75_ ( .c(a0c[74]), .b(c1[74]), .a(s1[75]),
1587     .cout(c2[75]), .sum(s2[75]));
1588mul_csa32  sc2_74_ ( .c(a0c[73]), .b(c1[73]), .a(s1[74]),
1589     .cout(c2[74]), .sum(s2[74]));
1590mul_csa32  sc2_73_ ( .c(a0c[72]), .b(c1[72]), .a(s1[73]),
1591     .cout(c2[73]), .sum(s2[73]));
1592mul_csa32  sc2_72_ ( .c(a0c[71]), .b(c1[71]), .a(s1[72]),
1593     .cout(c2[72]), .sum(s2[72]));
1594mul_csa32  sc2_71_ ( .c(a0c[70]), .b(c1[70]), .a(s1[71]),
1595     .cout(c2[71]), .sum(s2[71]));
1596mul_csa32  sc2_70_ ( .c(a0c[69]), .b(c1[69]), .a(s1[70]),
1597     .cout(c2[70]), .sum(s2[70]));
1598mul_csa32  sc2_69_ ( .c(a0c[68]), .b(c1[68]), .a(s1[69]),
1599     .cout(c2[69]), .sum(s2[69]));
1600mul_csa32  sc2_68_ ( .c(a0c[67]), .b(c1[67]), .a(s1[68]),
1601     .cout(c2[68]), .sum(s2[68]));
1602mul_csa32  acc_19_ ( .c(c3[18]), .b(s3[19]), .a(ain[19]),
1603     .cout(pcout[19]), .sum(psum[19]));
1604mul_csa32  acc_18_ ( .c(c3[17]), .b(s3[18]), .a(ain[18]),
1605     .cout(pcout[18]), .sum(psum[18]));
1606mul_csa32  acc_17_ ( .c(c3[16]), .b(s3[17]), .a(ain[17]),
1607     .cout(pcout[17]), .sum(psum[17]));
1608mul_csa32  acc_16_ ( .c(c3[15]), .b(s3[16]), .a(ain[16]),
1609     .cout(pcout[16]), .sum(psum[16]));
1610mul_csa32  acc_15_ ( .c(1'b0), .b(s3[15]), .a(ain[15]),
1611     .cout(pcout[15]), .sum(psum[15]));
1612mul_csa32  sc1_0_ ( .c(a0s[0]), .sum(s1[0]), .cout(c1[0]),
1613     .a(ps[32]), .b(pc[31]));
1614mul_csa32  sc1_67_ ( .c(a1c[50]), .b(pc[98]), .a(a1s[51]),
1615     .cout(c1[67]), .sum(s1[67]));
1616mul_ha acc_0_ ( .sum(psum[0]), .cout(pcout[0]), .a(ain[0]),
1617     .b(s2[0]));
1618mul_ha sc3_98_ ( .sum(psum[98]), .cout(pcout[98]), .a(bot),
1619     .b(a1c[81]));
1620mul_ha sc2_96_ ( .b(a1c[79]), .a(a1s[80]), .cout(c2[96]),
1621     .sum(s2[96]));
1622mul_ha sc2_95_ ( .b(a1c[78]), .a(a1s[79]), .cout(c2[95]),
1623     .sum(s2[95]));
1624mul_ha sc2_94_ ( .b(a1c[77]), .a(a1s[78]), .cout(c2[94]),
1625     .sum(s2[94]));
1626mul_ha sc2_93_ ( .b(a1c[76]), .a(a1s[77]), .cout(c2[93]),
1627     .sum(s2[93]));
1628mul_ha sc2_92_ ( .b(a1c[75]), .a(a1s[76]), .cout(c2[92]),
1629     .sum(s2[92]));
1630mul_ha sc2_91_ ( .b(a1c[74]), .a(a1s[75]), .cout(c2[91]),
1631     .sum(s2[91]));
1632mul_ha sc2_90_ ( .b(a1c[73]), .a(a1s[74]), .cout(c2[90]),
1633     .sum(s2[90]));
1634mul_ha sc2_89_ ( .b(a1c[72]), .a(a1s[73]), .cout(c2[89]),
1635     .sum(s2[89]));
1636mul_ha sc2_88_ ( .b(a1c[71]), .a(a1s[72]), .cout(c2[88]),
1637     .sum(s2[88]));
1638mul_ha sc2_87_ ( .b(a1c[70]), .a(a1s[71]), .cout(c2[87]),
1639     .sum(s2[87]));
1640mul_ha sc2_86_ ( .b(a1c[69]), .a(a1s[70]), .cout(c2[86]),
1641     .sum(s2[86]));
1642mul_ha sc2_85_ ( .b(a1c[68]), .a(a1s[69]), .cout(c2[85]),
1643     .sum(s2[85]));
1644mul_ha sc2_84_ ( .b(a1c[67]), .a(a1s[68]), .cout(c2[84]),
1645     .sum(s2[84]));
1646mul_ha sc3_81_ ( .b(c2[80]), .a(s2[81]), .cout(c3[81]),
1647     .sum(s3[81]));
1648mul_ha sc3_80_ ( .b(c2[79]), .a(s2[80]), .cout(c3[80]),
1649     .sum(s3[80]));
1650mul_ha sc3_79_ ( .b(c2[78]), .a(s2[79]), .cout(c3[79]),
1651     .sum(s3[79]));
1652mul_ha sc3_78_ ( .b(c2[77]), .a(s2[78]), .cout(c3[78]),
1653     .sum(s3[78]));
1654mul_ha sc3_77_ ( .b(c2[76]), .a(s2[77]), .cout(c3[77]),
1655     .sum(s3[77]));
1656mul_ha sc3_76_ ( .b(c2[75]), .a(s2[76]), .cout(c3[76]),
1657     .sum(s3[76]));
1658mul_ha sc3_75_ ( .b(c2[74]), .a(s2[75]), .cout(c3[75]),
1659     .sum(s3[75]));
1660mul_ha sc3_74_ ( .b(c2[73]), .a(s2[74]), .cout(c3[74]),
1661     .sum(s3[74]));
1662mul_ha sc3_73_ ( .b(c2[72]), .a(s2[73]), .cout(c3[73]),
1663     .sum(s3[73]));
1664mul_ha sc3_72_ ( .b(c2[71]), .a(s2[72]), .cout(c3[72]),
1665     .sum(s3[72]));
1666mul_ha sc3_71_ ( .b(c2[70]), .a(s2[71]), .cout(c3[71]),
1667     .sum(s3[71]));
1668mul_ha sc3_70_ ( .b(c2[69]), .a(s2[70]), .cout(c3[70]),
1669     .sum(s3[70]));
1670mul_ha sc3_69_ ( .b(c2[68]), .a(s2[69]), .cout(c3[69]),
1671     .sum(s3[69]));
1672mul_ha accx2 ( .sum(psumx2), .cout(pcoutx2), .a(ainx2), .b(s1x2));
1673mul_ha sc2_4_ ( .sum(s2[4]), .cout(c2[4]), .a(s1[4]), .b(c1[3]));
1674mul_ha sc2_3_ ( .sum(s2[3]), .cout(c2[3]), .a(s1[3]), .b(c1[2]));
1675mul_ha sc2_2_ ( .sum(s2[2]), .cout(c2[2]), .a(s1[2]), .b(c1[1]));
1676mul_ha sc2_1_ ( .sum(s2[1]), .cout(c2[1]), .a(s1[1]), .b(c1[0]));
1677mul_ha sc2_0_ ( .sum(s2[0]), .cout(c2[0]), .a(s1[0]), .b(c1x2));
1678mul_ha sc1x2 ( .sum(s1x2), .cout(c1x2), .a(ps[31]), .b(pc[30]));
1679
1680endmodule //mul_array2
1681
1682module mul_csa32 (sum, cout, a, b, c);
1683
1684output sum, cout;
1685input a, b, c;
1686
1687wire x, y0, y1, y2;
1688
1689assign x = a ^ b;
1690assign sum = c ^ x;
1691
1692assign y0 = a & b ;
1693assign y1 = a & c ;
1694assign y2 = b & c ;
1695
1696assign cout = y0 | y1 | y2 ;
1697
1698endmodule //mul_csa32
1699
1700module mul_csa42 (sum, carry, cout, a, b, c, d, cin);
1701
1702output sum, carry, cout;
1703input a, b, c, d, cin;
1704
1705wire x, y, z;
1706
1707assign x = a ^ b;
1708assign y = c ^ d;
1709assign z = x ^ y;
1710
1711assign sum = z ^ cin ;
1712
1713assign carry = (b & ~z) | (cin & z);
1714
1715assign cout = (d & ~y) | (a & y);
1716
1717endmodule // mul_csa42
1718
1719module mul_ha ( cout, sum, a, b );
1720output  cout, sum;
1721input  a, b;
1722
1723assign sum = a ^ b;
1724assign cout = a & b ;
1725
1726endmodule //mul_ha
1727
1728module mul_negen ( n0, n1, b );
1729output  n0, n1;
1730input [2:0]  b;
1731
1732assign n0 = b[2] & b[1] & ~b[0] ;
1733assign n1 = b[2] & b[1] & b[0] ;
1734
1735endmodule //mul_negen
1736
1737module mul_ppgen3lsb4 (cout, p0_l, p1_l, sum, a, b0, b1 );
1738
1739output  p0_l, p1_l;
1740output [3:0]  sum;
1741output [3:1]  cout;
1742input [3:0]  a;
1743input [2:0]  b0;
1744input [2:0]  b1;
1745
1746wire b0n, b0n_0, b0n_1, b1n_0, b1n_1;
1747wire p0_0, p0_1, p0_2, p0_3, p1_2, p1_3;
1748wire p0_l_0, p0_l_1, p0_l_2, p1_l_2;
1749
1750assign b0n = b0n_1 | (b0n_0 & p0_0) ;
1751assign sum[0] = b0n_0 ^ p0_0 ;
1752
1753mul_negen p0n ( .b(b0[2:0]), .n1(b0n_1), .n0(b0n_0));
1754mul_negen p1n ( .b(b1[2:0]), .n1(b1n_1), .n0(b1n_0));
1755mul_csa32  sc1_2_ ( .c(b1n_0), .sum(sum[2]), .cout(cout[2]),
1756     .a(p0_2), .b(p1_2));
1757mul_csa32  sc1_3_ ( .c(b1n_1), .sum(sum[3]), .cout(cout[3]),
1758     .a(p0_3), .b(p1_3));
1759mul_ha sc1_1_ ( .sum(sum[1]), .cout(cout[1]), .a(p0_1),
1760     .b(b0n));
1761mul_ppgen p0_3_ ( .pm1_l(p0_l_2), .p_l(p0_l), .b(b0[2:0]), .a(a[3]),
1762     .z(p0_3));
1763mul_ppgen p1_3_ ( .pm1_l(p1_l_2), .p_l(p1_l), .b(b1[2:0]), .a(a[1]),
1764     .z(p1_3));
1765mul_ppgen p0_2_ ( .pm1_l(p0_l_1), .p_l(p0_l_2), .b(b0[2:0]),
1766     .a(a[2]), .z(p0_2));
1767mul_ppgen p0_1_ ( .pm1_l(p0_l_0), .p_l(p0_l_1), .b(b0[2:0]),
1768     .a(a[1]), .z(p0_1));
1769mul_ppgen p0_0_ ( .pm1_l(1'b1), .p_l(p0_l_0),
1770     .b(b0[2:0]), .a(a[0]), .z(p0_0));
1771mul_ppgen p1_2_ ( .pm1_l(1'b1), .p_l(p1_l_2),
1772     .b(b1[2:0]), .a(a[0]), .z(p1_2));
1773
1774endmodule // mul_ppgen3lsb4
1775
1776module mul_ppgen3sign ( cout, sum, am1, am2, am3, am4, b0, b1, b2,
1777     bot, head, p0m1_l, p1m1_l, p2m1_l );
1778input  am1, am2, am3, am4;
1779input  bot, head, p0m1_l, p1m1_l, p2m1_l;
1780output [5:0]  sum;
1781output [4:0]  cout;
1782input [2:0]  b0;
1783input [2:0]  b2;
1784input [2:0]  b1;
1785
1786wire net37, net42, net075, net088, net0117; 
1787wire net47, net073, net38, net0118, net078, net8, net15, net43, net48, net35;
1788wire p2_l_67, p2_l_66, p2_l_65, p2_l_64; 
1789wire p1_l_65, p1_l_64; 
1790
1791assign sum[5] = bot & net075 ;
1792assign net0117 = head & net088 ; 
1793assign net37 = ~net0117 ;
1794assign net42 = head ^ net088 ;
1795
1796mul_ppgensign p0_64_ ( .b(b0[2:0]), .z(net47), .p_l(net088),
1797     .pm1_l(p0m1_l));
1798mul_ppgensign p2_68_ ( .pm1_l(p2_l_67), .b(b2[2:0]), .z(net073),
1799     .p_l(net075));
1800mul_ppgensign p1_66_ ( .pm1_l(p1_l_65), .b(b1[2:0]), .z(net38),
1801     .p_l(net0118));
1802mul_ha sc1_68_ ( .b(net073), .a(1'b1), .cout(cout[4]),
1803     .sum(sum[4]));
1804mul_ppgen p2_67_ ( .pm1_l(p2_l_66), .b(b2[2:0]), .a(am1), .z(net078),
1805     .p_l(p2_l_67));
1806mul_ppgen p2_66_ ( .pm1_l(p2_l_65), .b(b2[2:0]), .a(am2), .z(net8),
1807     .p_l(p2_l_66));
1808mul_ppgen p2_65_ ( .pm1_l(p2_l_64), .p_l(p2_l_65), .b(b2[2:0]),
1809     .a(am3), .z(net15));
1810mul_ppgen p1_65_ ( .pm1_l(p1_l_64), .p_l(p1_l_65), .b(b1[2:0]),
1811     .a(am1), .z(net43));
1812mul_ppgen p1_64_ ( .pm1_l(p1m1_l), .p_l(p1_l_64), .b(b1[2:0]),
1813     .a(am2), .z(net48));
1814mul_ppgen p2_64_ ( .pm1_l(p2m1_l), .p_l(p2_l_64), .b(b2[2:0]),
1815     .a(am4), .z(net35));
1816mul_csa32  sc1_67_ ( .c(net078), .b(net0117), .a(net0118),
1817     .cout(cout[3]), .sum(sum[3]));
1818mul_csa32  sc1_66_ ( .c(net8), .b(net37), .a(net38), .cout(cout[2]),
1819     .sum(sum[2]));
1820mul_csa32  sc1_65_ ( .c(net15), .b(net42), .a(net43), .cout(cout[1]),
1821     .sum(sum[1]));
1822mul_csa32  sc1_64_ ( .c(net35), .b(net47), .a(net48), .cout(cout[0]),
1823     .sum(sum[0]));
1824
1825endmodule //mul_ppgen3sign
1826
1827module mul_ppgen3 ( cout, p0_l, p1_l, p2_l, sum, am2, am4,
1828     a, b0, b1, b2, p0m1_l, p1m1_l, p2m1_l );
1829output  cout, p0_l, p1_l, p2_l, sum;
1830input  am2, am4;
1831input  a, p0m1_l, p1m1_l, p2m1_l;
1832input [2:0]  b0;
1833input [2:0]  b2;
1834input [2:0]  b1;
1835
1836wire net046, net32, net043;
1837
1838mul_csa32  sc1 ( .a(net046), .b(net32), .cout(cout), .sum(sum),
1839     .c(net043));
1840mul_ppgen p2 ( .pm1_l(p2m1_l), .p_l(p2_l), .b(b2[2:0]), .a(am4),
1841     .z(net043));
1842mul_ppgen p1 ( .pm1_l(p1m1_l), .p_l(p1_l), .b(b1[2:0]), .a(am2),
1843     .z(net046));
1844mul_ppgen p0 ( .pm1_l(p0m1_l), .p_l(p0_l), .b(b0[2:0]), .a(a),
1845     .z(net32));
1846
1847endmodule // mul_ppgen3
1848
1849module mul_ppgenrow3 ( cout, sum, a, b0, b1, b2, bot, head );
1850
1851output [68:1]  cout;
1852output [69:0]  sum;
1853input [63:0]  a;
1854input [2:0]  b2;
1855input [2:0]  b0;
1856input [2:0]  b1;
1857input  bot, head;
1858
1859// Buses in the design
1860wire  [63:4]  p2_l;
1861wire  [63:3]  p1_l;
1862wire  [63:3]  p0_l;
1863
1864mul_ppgen3sign I2 ( .am4(a[60]), .am3(a[61]), .am2(a[62]),
1865     .am1(a[63]), .p2m1_l(p2_l[63]), .p1m1_l(p1_l[63]),
1866     .p0m1_l(p0_l[63]), .b2(b2[2:0]), .head(head), .bot(bot),
1867     .sum(sum[69:64]), .cout(cout[68:64]), .b1(b1[2:0]), .b0(b0[2:0]));
1868mul_ppgen3 I1_63_ ( .p2_l(p2_l[63]), .b2(b2[2:0]),
1869     .am2(a[61]), .a(a[63]), .p2m1_l(p2_l[62]),
1870     .p1m1_l(p1_l[62]), .p0m1_l(p0_l[62]), .am4(a[59]), .sum(sum[63]),
1871     .cout(cout[63]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[63]),
1872     .p0_l(p0_l[63]));
1873mul_ppgen3 I1_62_ ( .p2_l(p2_l[62]), .b2(b2[2:0]), 
1874     .am2(a[60]), .a(a[62]), .p2m1_l(p2_l[61]),
1875     .p1m1_l(p1_l[61]), .p0m1_l(p0_l[61]), .am4(a[58]), .sum(sum[62]),
1876     .cout(cout[62]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[62]),
1877     .p0_l(p0_l[62]));
1878mul_ppgen3 I1_61_ ( .p2_l(p2_l[61]), .b2(b2[2:0]), 
1879     .am2(a[59]), .a(a[61]), .p2m1_l(p2_l[60]),
1880     .p1m1_l(p1_l[60]), .p0m1_l(p0_l[60]), .am4(a[57]), .sum(sum[61]),
1881     .cout(cout[61]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[61]),
1882     .p0_l(p0_l[61]));
1883mul_ppgen3 I1_60_ ( .p2_l(p2_l[60]), .b2(b2[2:0]), 
1884     .am2(a[58]), .a(a[60]), .p2m1_l(p2_l[59]),
1885     .p1m1_l(p1_l[59]), .p0m1_l(p0_l[59]), .am4(a[56]), .sum(sum[60]),
1886     .cout(cout[60]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[60]),
1887     .p0_l(p0_l[60]));
1888mul_ppgen3 I1_59_ ( .p2_l(p2_l[59]), .b2(b2[2:0]), 
1889     .am2(a[57]), .a(a[59]), .p2m1_l(p2_l[58]),
1890     .p1m1_l(p1_l[58]), .p0m1_l(p0_l[58]), .am4(a[55]), .sum(sum[59]),
1891     .cout(cout[59]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[59]),
1892     .p0_l(p0_l[59]));
1893mul_ppgen3 I1_58_ ( .p2_l(p2_l[58]), .b2(b2[2:0]), 
1894     .am2(a[56]), .a(a[58]), .p2m1_l(p2_l[57]),
1895     .p1m1_l(p1_l[57]), .p0m1_l(p0_l[57]), .am4(a[54]), .sum(sum[58]),
1896     .cout(cout[58]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[58]),
1897     .p0_l(p0_l[58]));
1898mul_ppgen3 I1_57_ ( .p2_l(p2_l[57]), .b2(b2[2:0]), 
1899     .am2(a[55]), .a(a[57]), .p2m1_l(p2_l[56]),
1900     .p1m1_l(p1_l[56]), .p0m1_l(p0_l[56]), .am4(a[53]), .sum(sum[57]),
1901     .cout(cout[57]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[57]),
1902     .p0_l(p0_l[57]));
1903mul_ppgen3 I1_56_ ( .p2_l(p2_l[56]), .b2(b2[2:0]), 
1904     .am2(a[54]), .a(a[56]), .p2m1_l(p2_l[55]),
1905     .p1m1_l(p1_l[55]), .p0m1_l(p0_l[55]), .am4(a[52]), .sum(sum[56]),
1906     .cout(cout[56]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[56]),
1907     .p0_l(p0_l[56]));
1908mul_ppgen3 I1_55_ ( .p2_l(p2_l[55]), .b2(b2[2:0]), 
1909     .am2(a[53]), .a(a[55]), .p2m1_l(p2_l[54]),
1910     .p1m1_l(p1_l[54]), .p0m1_l(p0_l[54]), .am4(a[51]), .sum(sum[55]),
1911     .cout(cout[55]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[55]),
1912     .p0_l(p0_l[55]));
1913mul_ppgen3 I1_54_ ( .p2_l(p2_l[54]), .b2(b2[2:0]), 
1914     .am2(a[52]), .a(a[54]), .p2m1_l(p2_l[53]),
1915     .p1m1_l(p1_l[53]), .p0m1_l(p0_l[53]), .am4(a[50]), .sum(sum[54]),
1916     .cout(cout[54]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[54]),
1917     .p0_l(p0_l[54]));
1918mul_ppgen3 I1_53_ ( .p2_l(p2_l[53]), .b2(b2[2:0]), 
1919     .am2(a[51]), .a(a[53]), .p2m1_l(p2_l[52]),
1920     .p1m1_l(p1_l[52]), .p0m1_l(p0_l[52]), .am4(a[49]), .sum(sum[53]),
1921     .cout(cout[53]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[53]),
1922     .p0_l(p0_l[53]));
1923mul_ppgen3 I1_52_ ( .p2_l(p2_l[52]), .b2(b2[2:0]), 
1924     .am2(a[50]), .a(a[52]), .p2m1_l(p2_l[51]),
1925     .p1m1_l(p1_l[51]), .p0m1_l(p0_l[51]), .am4(a[48]), .sum(sum[52]),
1926     .cout(cout[52]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[52]),
1927     .p0_l(p0_l[52]));
1928mul_ppgen3 I1_51_ ( .p2_l(p2_l[51]), .b2(b2[2:0]), 
1929     .am2(a[49]), .a(a[51]), .p2m1_l(p2_l[50]),
1930     .p1m1_l(p1_l[50]), .p0m1_l(p0_l[50]), .am4(a[47]), .sum(sum[51]),
1931     .cout(cout[51]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[51]),
1932     .p0_l(p0_l[51]));
1933mul_ppgen3 I1_50_ ( .p2_l(p2_l[50]), .b2(b2[2:0]), 
1934     .am2(a[48]), .a(a[50]), .p2m1_l(p2_l[49]),
1935     .p1m1_l(p1_l[49]), .p0m1_l(p0_l[49]), .am4(a[46]), .sum(sum[50]),
1936     .cout(cout[50]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[50]),
1937     .p0_l(p0_l[50]));
1938mul_ppgen3 I1_49_ ( .p2_l(p2_l[49]), .b2(b2[2:0]), 
1939     .am2(a[47]), .a(a[49]), .p2m1_l(p2_l[48]),
1940     .p1m1_l(p1_l[48]), .p0m1_l(p0_l[48]), .am4(a[45]), .sum(sum[49]),
1941     .cout(cout[49]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[49]),
1942     .p0_l(p0_l[49]));
1943mul_ppgen3 I1_48_ ( .p2_l(p2_l[48]), .b2(b2[2:0]), 
1944     .am2(a[46]), .a(a[48]), .p2m1_l(p2_l[47]),
1945     .p1m1_l(p1_l[47]), .p0m1_l(p0_l[47]), .am4(a[44]), .sum(sum[48]),
1946     .cout(cout[48]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[48]),
1947     .p0_l(p0_l[48]));
1948mul_ppgen3 I1_47_ ( .p2_l(p2_l[47]), .b2(b2[2:0]), 
1949     .am2(a[45]), .a(a[47]), .p2m1_l(p2_l[46]),
1950     .p1m1_l(p1_l[46]), .p0m1_l(p0_l[46]), .am4(a[43]), .sum(sum[47]),
1951     .cout(cout[47]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[47]),
1952     .p0_l(p0_l[47]));
1953mul_ppgen3 I1_46_ ( .p2_l(p2_l[46]), .b2(b2[2:0]), 
1954     .am2(a[44]), .a(a[46]), .p2m1_l(p2_l[45]),
1955     .p1m1_l(p1_l[45]), .p0m1_l(p0_l[45]), .am4(a[42]), .sum(sum[46]),
1956     .cout(cout[46]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[46]),
1957     .p0_l(p0_l[46]));
1958mul_ppgen3 I1_45_ ( .p2_l(p2_l[45]), .b2(b2[2:0]), 
1959     .am2(a[43]), .a(a[45]), .p2m1_l(p2_l[44]),
1960     .p1m1_l(p1_l[44]), .p0m1_l(p0_l[44]), .am4(a[41]), .sum(sum[45]),
1961     .cout(cout[45]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[45]),
1962     .p0_l(p0_l[45]));
1963mul_ppgen3 I1_44_ ( .p2_l(p2_l[44]), .b2(b2[2:0]), 
1964     .am2(a[42]), .a(a[44]), .p2m1_l(p2_l[43]),
1965     .p1m1_l(p1_l[43]), .p0m1_l(p0_l[43]), .am4(a[40]), .sum(sum[44]),
1966     .cout(cout[44]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[44]),
1967     .p0_l(p0_l[44]));
1968mul_ppgen3 I1_43_ ( .p2_l(p2_l[43]), .b2(b2[2:0]), 
1969     .am2(a[41]), .a(a[43]), .p2m1_l(p2_l[42]),
1970     .p1m1_l(p1_l[42]), .p0m1_l(p0_l[42]), .am4(a[39]), .sum(sum[43]),
1971     .cout(cout[43]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[43]),
1972     .p0_l(p0_l[43]));
1973mul_ppgen3 I1_42_ ( .p2_l(p2_l[42]), .b2(b2[2:0]), 
1974     .am2(a[40]), .a(a[42]), .p2m1_l(p2_l[41]),
1975     .p1m1_l(p1_l[41]), .p0m1_l(p0_l[41]), .am4(a[38]), .sum(sum[42]),
1976     .cout(cout[42]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[42]),
1977     .p0_l(p0_l[42]));
1978mul_ppgen3 I1_41_ ( .p2_l(p2_l[41]), .b2(b2[2:0]), 
1979     .am2(a[39]), .a(a[41]), .p2m1_l(p2_l[40]),
1980     .p1m1_l(p1_l[40]), .p0m1_l(p0_l[40]), .am4(a[37]), .sum(sum[41]),
1981     .cout(cout[41]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[41]),
1982     .p0_l(p0_l[41]));
1983mul_ppgen3 I1_40_ ( .p2_l(p2_l[40]), .b2(b2[2:0]), 
1984     .am2(a[38]), .a(a[40]), .p2m1_l(p2_l[39]),
1985     .p1m1_l(p1_l[39]), .p0m1_l(p0_l[39]), .am4(a[36]), .sum(sum[40]),
1986     .cout(cout[40]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[40]),
1987     .p0_l(p0_l[40]));
1988mul_ppgen3 I1_39_ ( .p2_l(p2_l[39]), .b2(b2[2:0]), 
1989     .am2(a[37]), .a(a[39]), .p2m1_l(p2_l[38]),
1990     .p1m1_l(p1_l[38]), .p0m1_l(p0_l[38]), .am4(a[35]), .sum(sum[39]),
1991     .cout(cout[39]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[39]),
1992     .p0_l(p0_l[39]));
1993mul_ppgen3 I1_38_ ( .p2_l(p2_l[38]), .b2(b2[2:0]), 
1994     .am2(a[36]), .a(a[38]), .p2m1_l(p2_l[37]),
1995     .p1m1_l(p1_l[37]), .p0m1_l(p0_l[37]), .am4(a[34]), .sum(sum[38]),
1996     .cout(cout[38]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[38]),
1997     .p0_l(p0_l[38]));
1998mul_ppgen3 I1_37_ ( .p2_l(p2_l[37]), .b2(b2[2:0]), 
1999     .am2(a[35]), .a(a[37]), .p2m1_l(p2_l[36]),
2000     .p1m1_l(p1_l[36]), .p0m1_l(p0_l[36]), .am4(a[33]), .sum(sum[37]),
2001     .cout(cout[37]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[37]),
2002     .p0_l(p0_l[37]));
2003mul_ppgen3 I1_36_ ( .p2_l(p2_l[36]), .b2(b2[2:0]), 
2004     .am2(a[34]), .a(a[36]), .p2m1_l(p2_l[35]),
2005     .p1m1_l(p1_l[35]), .p0m1_l(p0_l[35]), .am4(a[32]), .sum(sum[36]),
2006     .cout(cout[36]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[36]),
2007     .p0_l(p0_l[36]));
2008mul_ppgen3 I1_35_ ( .p2_l(p2_l[35]), .b2(b2[2:0]), 
2009     .am2(a[33]), .a(a[35]), .p2m1_l(p2_l[34]),
2010     .p1m1_l(p1_l[34]), .p0m1_l(p0_l[34]), .am4(a[31]), .sum(sum[35]),
2011     .cout(cout[35]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[35]),
2012     .p0_l(p0_l[35]));
2013mul_ppgen3 I1_34_ ( .p2_l(p2_l[34]), .b2(b2[2:0]), 
2014     .am2(a[32]), .a(a[34]), .p2m1_l(p2_l[33]),
2015     .p1m1_l(p1_l[33]), .p0m1_l(p0_l[33]), .am4(a[30]), .sum(sum[34]),
2016     .cout(cout[34]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[34]),
2017     .p0_l(p0_l[34]));
2018mul_ppgen3 I1_33_ ( .p2_l(p2_l[33]), .b2(b2[2:0]), 
2019     .am2(a[31]), .a(a[33]), .p2m1_l(p2_l[32]),
2020     .p1m1_l(p1_l[32]), .p0m1_l(p0_l[32]), .am4(a[29]), .sum(sum[33]),
2021     .cout(cout[33]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[33]),
2022     .p0_l(p0_l[33]));
2023mul_ppgen3 I1_32_ ( .p2_l(p2_l[32]), .b2(b2[2:0]), 
2024     .am2(a[30]), .a(a[32]), .p2m1_l(p2_l[31]),
2025     .p1m1_l(p1_l[31]), .p0m1_l(p0_l[31]), .am4(a[28]), .sum(sum[32]),
2026     .cout(cout[32]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[32]),
2027     .p0_l(p0_l[32]));
2028mul_ppgen3 I1_31_ ( .p2_l(p2_l[31]), .b2(b2[2:0]), 
2029     .am2(a[29]), .a(a[31]), .p2m1_l(p2_l[30]),
2030     .p1m1_l(p1_l[30]), .p0m1_l(p0_l[30]), .am4(a[27]), .sum(sum[31]),
2031     .cout(cout[31]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[31]),
2032     .p0_l(p0_l[31]));
2033mul_ppgen3 I1_30_ ( .p2_l(p2_l[30]), .b2(b2[2:0]), 
2034     .am2(a[28]), .a(a[30]), .p2m1_l(p2_l[29]),
2035     .p1m1_l(p1_l[29]), .p0m1_l(p0_l[29]), .am4(a[26]), .sum(sum[30]),
2036     .cout(cout[30]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[30]),
2037     .p0_l(p0_l[30]));
2038mul_ppgen3 I1_29_ ( .p2_l(p2_l[29]), .b2(b2[2:0]), 
2039     .am2(a[27]), .a(a[29]), .p2m1_l(p2_l[28]),
2040     .p1m1_l(p1_l[28]), .p0m1_l(p0_l[28]), .am4(a[25]), .sum(sum[29]),
2041     .cout(cout[29]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[29]),
2042     .p0_l(p0_l[29]));
2043mul_ppgen3 I1_28_ ( .p2_l(p2_l[28]), .b2(b2[2:0]), 
2044     .am2(a[26]), .a(a[28]), .p2m1_l(p2_l[27]),
2045     .p1m1_l(p1_l[27]), .p0m1_l(p0_l[27]), .am4(a[24]), .sum(sum[28]),
2046     .cout(cout[28]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[28]),
2047     .p0_l(p0_l[28]));
2048mul_ppgen3 I1_27_ ( .p2_l(p2_l[27]), .b2(b2[2:0]), 
2049     .am2(a[25]), .a(a[27]), .p2m1_l(p2_l[26]),
2050     .p1m1_l(p1_l[26]), .p0m1_l(p0_l[26]), .am4(a[23]), .sum(sum[27]),
2051     .cout(cout[27]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[27]),
2052     .p0_l(p0_l[27]));
2053mul_ppgen3 I1_26_ ( .p2_l(p2_l[26]), .b2(b2[2:0]), 
2054     .am2(a[24]), .a(a[26]), .p2m1_l(p2_l[25]),
2055     .p1m1_l(p1_l[25]), .p0m1_l(p0_l[25]), .am4(a[22]), .sum(sum[26]),
2056     .cout(cout[26]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[26]),
2057     .p0_l(p0_l[26]));
2058mul_ppgen3 I1_25_ ( .p2_l(p2_l[25]), .b2(b2[2:0]), 
2059     .am2(a[23]), .a(a[25]), .p2m1_l(p2_l[24]),
2060     .p1m1_l(p1_l[24]), .p0m1_l(p0_l[24]), .am4(a[21]), .sum(sum[25]),
2061     .cout(cout[25]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[25]),
2062     .p0_l(p0_l[25]));
2063mul_ppgen3 I1_24_ ( .p2_l(p2_l[24]), .b2(b2[2:0]), 
2064     .am2(a[22]), .a(a[24]), .p2m1_l(p2_l[23]),
2065     .p1m1_l(p1_l[23]), .p0m1_l(p0_l[23]), .am4(a[20]), .sum(sum[24]),
2066     .cout(cout[24]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[24]),
2067     .p0_l(p0_l[24]));
2068mul_ppgen3 I1_23_ ( .p2_l(p2_l[23]), .b2(b2[2:0]), 
2069     .am2(a[21]), .a(a[23]), .p2m1_l(p2_l[22]),
2070     .p1m1_l(p1_l[22]), .p0m1_l(p0_l[22]), .am4(a[19]), .sum(sum[23]),
2071     .cout(cout[23]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[23]),
2072     .p0_l(p0_l[23]));
2073mul_ppgen3 I1_22_ ( .p2_l(p2_l[22]), .b2(b2[2:0]), 
2074     .am2(a[20]), .a(a[22]), .p2m1_l(p2_l[21]),
2075     .p1m1_l(p1_l[21]), .p0m1_l(p0_l[21]), .am4(a[18]), .sum(sum[22]),
2076     .cout(cout[22]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[22]),
2077     .p0_l(p0_l[22]));
2078mul_ppgen3 I1_21_ ( .p2_l(p2_l[21]), .b2(b2[2:0]), 
2079     .am2(a[19]), .a(a[21]), .p2m1_l(p2_l[20]),
2080     .p1m1_l(p1_l[20]), .p0m1_l(p0_l[20]), .am4(a[17]), .sum(sum[21]),
2081     .cout(cout[21]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[21]),
2082     .p0_l(p0_l[21]));
2083mul_ppgen3 I1_20_ ( .p2_l(p2_l[20]), .b2(b2[2:0]), 
2084     .am2(a[18]), .a(a[20]), .p2m1_l(p2_l[19]),
2085     .p1m1_l(p1_l[19]), .p0m1_l(p0_l[19]), .am4(a[16]), .sum(sum[20]),
2086     .cout(cout[20]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[20]),
2087     .p0_l(p0_l[20]));
2088mul_ppgen3 I1_19_ ( .p2_l(p2_l[19]), .b2(b2[2:0]), 
2089     .am2(a[17]), .a(a[19]), .p2m1_l(p2_l[18]),
2090     .p1m1_l(p1_l[18]), .p0m1_l(p0_l[18]), .am4(a[15]), .sum(sum[19]),
2091     .cout(cout[19]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[19]),
2092     .p0_l(p0_l[19]));
2093mul_ppgen3 I1_18_ ( .p2_l(p2_l[18]), .b2(b2[2:0]), 
2094     .am2(a[16]), .a(a[18]), .p2m1_l(p2_l[17]),
2095     .p1m1_l(p1_l[17]), .p0m1_l(p0_l[17]), .am4(a[14]), .sum(sum[18]),
2096     .cout(cout[18]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[18]),
2097     .p0_l(p0_l[18]));
2098mul_ppgen3 I1_17_ ( .p2_l(p2_l[17]), .b2(b2[2:0]), 
2099     .am2(a[15]), .a(a[17]), .p2m1_l(p2_l[16]),
2100     .p1m1_l(p1_l[16]), .p0m1_l(p0_l[16]), .am4(a[13]), .sum(sum[17]),
2101     .cout(cout[17]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[17]),
2102     .p0_l(p0_l[17]));
2103mul_ppgen3 I1_16_ ( .p2_l(p2_l[16]), .b2(b2[2:0]), 
2104     .am2(a[14]), .a(a[16]), .p2m1_l(p2_l[15]),
2105     .p1m1_l(p1_l[15]), .p0m1_l(p0_l[15]), .am4(a[12]), .sum(sum[16]),
2106     .cout(cout[16]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[16]),
2107     .p0_l(p0_l[16]));
2108mul_ppgen3 I1_15_ ( .p2_l(p2_l[15]), .b2(b2[2:0]), 
2109     .am2(a[13]), .a(a[15]), .p2m1_l(p2_l[14]),
2110     .p1m1_l(p1_l[14]), .p0m1_l(p0_l[14]), .am4(a[11]), .sum(sum[15]),
2111     .cout(cout[15]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[15]),
2112     .p0_l(p0_l[15]));
2113mul_ppgen3 I1_14_ ( .p2_l(p2_l[14]), .b2(b2[2:0]), 
2114     .am2(a[12]), .a(a[14]), .p2m1_l(p2_l[13]),
2115     .p1m1_l(p1_l[13]), .p0m1_l(p0_l[13]), .am4(a[10]), .sum(sum[14]),
2116     .cout(cout[14]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[14]),
2117     .p0_l(p0_l[14]));
2118mul_ppgen3 I1_13_ ( .p2_l(p2_l[13]), .b2(b2[2:0]), 
2119     .am2(a[11]), .a(a[13]), .p2m1_l(p2_l[12]),
2120     .p1m1_l(p1_l[12]), .p0m1_l(p0_l[12]), .am4(a[9]), .sum(sum[13]),
2121     .cout(cout[13]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[13]),
2122     .p0_l(p0_l[13]));
2123mul_ppgen3 I1_12_ ( .p2_l(p2_l[12]), .b2(b2[2:0]), 
2124     .am2(a[10]), .a(a[12]), .p2m1_l(p2_l[11]),
2125     .p1m1_l(p1_l[11]), .p0m1_l(p0_l[11]), .am4(a[8]), .sum(sum[12]),
2126     .cout(cout[12]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[12]),
2127     .p0_l(p0_l[12]));
2128mul_ppgen3 I1_11_ ( .p2_l(p2_l[11]), .b2(b2[2:0]), 
2129     .am2(a[9]), .a(a[11]), .p2m1_l(p2_l[10]),
2130     .p1m1_l(p1_l[10]), .p0m1_l(p0_l[10]), .am4(a[7]), .sum(sum[11]),
2131     .cout(cout[11]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[11]),
2132     .p0_l(p0_l[11]));
2133mul_ppgen3 I1_10_ ( .p2_l(p2_l[10]), .b2(b2[2:0]), 
2134     .am2(a[8]), .a(a[10]), .p2m1_l(p2_l[9]),
2135     .p1m1_l(p1_l[9]), .p0m1_l(p0_l[9]), .am4(a[6]), .sum(sum[10]),
2136     .cout(cout[10]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[10]),
2137     .p0_l(p0_l[10]));
2138mul_ppgen3 I1_9_ ( .p2_l(p2_l[9]), .b2(b2[2:0]), 
2139     .am2(a[7]), .a(a[9]), .p2m1_l(p2_l[8]),
2140     .p1m1_l(p1_l[8]), .p0m1_l(p0_l[8]), .am4(a[5]), .sum(sum[9]),
2141     .cout(cout[9]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[9]),
2142     .p0_l(p0_l[9]));
2143mul_ppgen3 I1_8_ ( .p2_l(p2_l[8]), .b2(b2[2:0]), 
2144     .am2(a[6]), .a(a[8]), .p2m1_l(p2_l[7]),
2145     .p1m1_l(p1_l[7]), .p0m1_l(p0_l[7]), .am4(a[4]), .sum(sum[8]),
2146     .cout(cout[8]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[8]),
2147     .p0_l(p0_l[8]));
2148mul_ppgen3 I1_7_ ( .p2_l(p2_l[7]), .b2(b2[2:0]), 
2149     .am2(a[5]), .a(a[7]), .p2m1_l(p2_l[6]),
2150     .p1m1_l(p1_l[6]), .p0m1_l(p0_l[6]), .am4(a[3]), .sum(sum[7]),
2151     .cout(cout[7]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[7]),
2152     .p0_l(p0_l[7]));
2153mul_ppgen3 I1_6_ ( .p2_l(p2_l[6]), .b2(b2[2:0]), 
2154     .am2(a[4]), .a(a[6]), .p2m1_l(p2_l[5]),
2155     .p1m1_l(p1_l[5]), .p0m1_l(p0_l[5]), .am4(a[2]), .sum(sum[6]),
2156     .cout(cout[6]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[6]),
2157     .p0_l(p0_l[6]));
2158mul_ppgen3 I1_5_ ( .p2_l(p2_l[5]), .b2(b2[2:0]), 
2159     .am2(a[3]), .a(a[5]), .p2m1_l(p2_l[4]),
2160     .p1m1_l(p1_l[4]), .p0m1_l(p0_l[4]), .am4(a[1]), .sum(sum[5]),
2161     .cout(cout[5]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[5]),
2162     .p0_l(p0_l[5]));
2163mul_ppgen3 I1_4_ ( .p2_l(p2_l[4]), .b2(b2[2:0]), 
2164     .am2(a[2]), .a(a[4]), .p2m1_l(1'b1),
2165     .p1m1_l(p1_l[3]), .p0m1_l(p0_l[3]), .am4(a[0]), .sum(sum[4]),
2166     .cout(cout[4]), .b1(b1[2:0]), .b0(b0[2:0]), .p1_l(p1_l[4]),
2167     .p0_l(p0_l[4]));
2168mul_ppgen3lsb4 I0 ( .cout(cout[3:1]), .a(a[3:0]), .sum(sum[3:0]),
2169     .p1_l(p1_l[3]), .p0_l(p0_l[3]), .b1(b1[2:0]), .b0(b0[2:0]));
2170
2171endmodule //mul_ppgenrow3
2172
2173module mul_ppgensign ( p_l, z, b, pm1_l );
2174output  p_l, z;
2175input  pm1_l;
2176input [2:0]  b;
2177
2178assign p_l = ~(b[1] & b[2]);
2179assign z = b[0] ? ~pm1_l : ~p_l ;
2180
2181endmodule //mul_ppgensign
2182
2183module mul_ppgen ( p_l, z, a, b, pm1_l );
2184output  p_l, z;
2185input  a, pm1_l;
2186input [2:0]  b;
2187
2188assign p_l = ~((a ^ b[2]) & b[1]) ;
2189assign z = b[0] ? ~pm1_l : ~p_l ;
2190
2191endmodule //mul_ppgen
2192
2193module mul_mux2 ( z, d0, d1, s );
2194output  z;
2195input  d0, d1, s;
2196
2197assign z = s ? d1 : d0 ;
2198
2199endmodule // mul_mux2
2200
2201module mul_booth(
2202        head,
2203        b_in,
2204        b0, b1, b2, b3, b4, b5, b6, b7,
2205        b8, b9, b10, b11, b12, b13, b14, b15, b16,
2206        clk, se, si, so, mul_step, tm_l
2207        );
2208input           head;           // begin of the MUL operation
2209input   [63:0]  b_in;
2210input           clk, se, si, mul_step, tm_l;
2211output  [2:0]   b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15;
2212output          b16;
2213output          so;
2214
2215wire  [63:31]   b;
2216wire [2:0]      b0_in0, b1_in0,  b2_in0,  b3_in0,  b4_in0,  b5_in0,  b6_in0,  b7_in0 ;
2217wire [2:0]      b8_in0, b9_in0, b10_in0, b11_in0, b12_in0, b13_in0, b14_in0, b15_in0 ;
2218wire [2:0]      b0_in1, b1_in1,  b2_in1,  b3_in1,  b4_in1,  b5_in1,  b6_in1,  b7_in1 ;
2219wire [2:0]      b8_in1, b9_in1, b10_in1, b11_in1, b12_in1, b13_in1, b14_in1, b15_in1 ;
2220wire            b16_in1;
2221
2222wire [2:0]      b0_outmx, b1_outmx, b2_outmx, b3_outmx, b4_outmx, b5_outmx, b6_outmx;
2223wire [2:0]      b7_outmx, b8_outmx, b9_outmx, b10_outmx, b11_outmx, b12_outmx, b13_outmx;
2224wire [2:0]      b14_outmx, b15_outmx;
2225wire            b16_outmx;
2226wire            clk_enb0, clk_enb1;
2227
2228
2229  mul_bodec             encode0_a(
2230                                .(1'b0),
2231                                .(b_in[15:0]),
2232                                .b0 (b0_in0),
2233                                .b1 (b1_in0),
2234                                .b2 (b2_in0),
2235                                .b3 (b3_in0),
2236                                .b4 (b4_in0),
2237                                .b5 (b5_in0),
2238                                .b6 (b6_in0),
2239                                .b7 (b7_in0)
2240                                );
2241                                //remove 16th row since it's never the last row
2242                                //b8_in0 = 3'b010;
2243  mul_bodec             encode0_b(
2244                                .(b_in[15]),
2245                                .(b_in[31:16]),
2246                                .b0 (b8_in0),
2247                                .b1 (b9_in0),
2248                                .b2 (b10_in0),
2249                                .b3 (b11_in0),
2250                                .b4 (b12_in0),
2251                                .b5 (b13_in0),
2252                                .b6 (b14_in0),
2253                                .b7 (b15_in0)
2254                                );
2255                                // remove 32th row since it's never the last row
2256                                // b16_in0 = 3'b010 ;
2257
2258  // Pipe picked address [63:31] and hold flop
2259
2260  clken_buf     ckbuf_0(.clk(clk_enb0), .rclk(clk), .enb_l(~mul_step), .tmb_l(tm_l));
2261  clken_buf     ckbuf_1(.clk(clk_enb1), .rclk(clk), .enb_l(~(head & mul_step)), .tmb_l(tm_l));
2262
2263  dff_s                         hld_dff0(.din(b_in[31]), .clk(clk_enb1), .q(b[31]),
2264                                .se(se), .si(), .so());
2265  dff_s #(32)           hld_dff(.din(b_in[63:32]), .clk(clk_enb1), .q(b[63:32]),
2266                                .se(se), .si(), .so());
2267
2268  mul_bodec             encode1_a(
2269                                .(b[31]),
2270                                .(b[47:32]),
2271                                .b0 (b0_in1),
2272                                .b1 (b1_in1),
2273                                .b2 (b2_in1),
2274                                .b3 (b3_in1),
2275                                .b4 (b4_in1),
2276                                .b5 (b5_in1),
2277                                .b6 (b6_in1),
2278                                .b7 (b7_in1)
2279                                );
2280                                //remove 16th row since it's never the last row
2281                                //b8_in1 = 3'b010;
2282  mul_bodec             encode1_b(
2283                                .(b[47]),
2284                                .(b[63:48]),
2285                                .b0 (b8_in1),
2286                                .b1 (b9_in1),
2287                                .b2 (b10_in1),
2288                                .b3 (b11_in1),
2289                                .b4 (b12_in1),
2290                                .b5 (b13_in1),
2291                                .b6 (b14_in1),
2292                                .b7 (b15_in1)
2293                                );
2294                                assign b16_in1 = b[63] ;
2295
2296// Select booth encoded b outputs and flop based on the cycle0 and cycle1
2297
2298  dp_mux2es #(3)    out_mux0(.dout(b0_outmx[2:0]),
2299                        .in0(b0_in0[2:0]),
2300                        .in1(b0_in1[2:0]),
2301                        .sel(~head));
2302  dp_mux2es #(3)    out_mux1(.dout(b1_outmx[2:0]),
2303                        .in0(b1_in0[2:0]),
2304                        .in1(b1_in1[2:0]),
2305                        .sel(~head));
2306  dp_mux2es #(3)    out_mux2(.dout(b2_outmx[2:0]),
2307                        .in0(b2_in0[2:0]),
2308                        .in1(b2_in1[2:0]),
2309                        .sel(~head));
2310  dp_mux2es #(3)    out_mux3(.dout(b3_outmx[2:0]),
2311                        .in0(b3_in0[2:0]),
2312                        .in1(b3_in1[2:0]),
2313                        .sel(~head));
2314  dp_mux2es #(3)    out_mux4(.dout(b4_outmx[2:0]),
2315                        .in0(b4_in0[2:0]),
2316                        .in1(b4_in1[2:0]),
2317                        .sel(~head));
2318  dp_mux2es #(3)    out_mux5(.dout(b5_outmx[2:0]),
2319                        .in0(b5_in0[2:0]),
2320                        .in1(b5_in1[2:0]),
2321                        .sel(~head));
2322  dp_mux2es #(3)    out_mux6(.dout(b6_outmx[2:0]),
2323                        .in0(b6_in0[2:0]),
2324                        .in1(b6_in1[2:0]),
2325                        .sel(~head));
2326  dp_mux2es #(3)    out_mux7(.dout(b7_outmx[2:0]),
2327                        .in0(b7_in0[2:0]),
2328                        .in1(b7_in1[2:0]),
2329                        .sel(~head));
2330  dp_mux2es #(3)    out_mux8(.dout(b8_outmx[2:0]),
2331                        .in0(b8_in0[2:0]),
2332                        .in1(b8_in1[2:0]),
2333                        .sel(~head));
2334  dp_mux2es #(3)    out_mux9(.dout(b9_outmx[2:0]),
2335                        .in0(b9_in0[2:0]),
2336                        .in1(b9_in1[2:0]),
2337                        .sel(~head));
2338  dp_mux2es #(3)    out_mux10(.dout(b10_outmx[2:0]),
2339                        .in0(b10_in0[2:0]),
2340                        .in1(b10_in1[2:0]),
2341                        .sel(~head));
2342  dp_mux2es #(3)    out_mux11(.dout(b11_outmx[2:0]),
2343                        .in0(b11_in0[2:0]),
2344                        .in1(b11_in1[2:0]),
2345                        .sel(~head));
2346  dp_mux2es #(3)    out_mux12(.dout(b12_outmx[2:0]),
2347                        .in0(b12_in0[2:0]),
2348                        .in1(b12_in1[2:0]),
2349                        .sel(~head));
2350  dp_mux2es #(3)    out_mux13(.dout(b13_outmx[2:0]),
2351                        .in0(b13_in0[2:0]),
2352                        .in1(b13_in1[2:0]),
2353                        .sel(~head));
2354  dp_mux2es #(3)    out_mux14(.dout(b14_outmx[2:0]),
2355                        .in0(b14_in0[2:0]),
2356                        .in1(b14_in1[2:0]),
2357                        .sel(~head));
2358  dp_mux2es #(3)    out_mux15(.dout(b15_outmx[2:0]),
2359                        .in0(b15_in0[2:0]),
2360                        .in1(b15_in1[2:0]),
2361                        .sel(~head));
2362  dp_mux2es         out_mux16(.dout(b16_outmx),
2363                        .in0(1'b0),
2364                        .in1(b16_in1),
2365                        .sel(~head));
2366
2367  dff_s #(3)    out_dff0 (.din(b0_outmx[2:0]), .clk(clk_enb0), .q(b0[2:0]),
2368                        .se(se), .si(), .so());
2369  dff_s #(3)    out_dff1 (.din(b1_outmx[2:0]), .clk(clk_enb0), .q(b1[2:0]),
2370                        .se(se), .si(), .so());
2371  dff_s #(3)    out_dff2 (.din(b2_outmx[2:0]), .clk(clk_enb0), .q(b2[2:0]),
2372                        .se(se), .si(), .so());
2373  dff_s #(3)    out_dff3 (.din(b3_outmx[2:0]), .clk(clk_enb0), .q(b3[2:0]),
2374                        .se(se), .si(), .so());
2375  dff_s #(3)    out_dff4 (.din(b4_outmx[2:0]), .clk(clk_enb0), .q(b4[2:0]),
2376                        .se(se), .si(), .so());
2377  dff_s #(3)    out_dff5 (.din(b5_outmx[2:0]), .clk(clk_enb0), .q(b5[2:0]),
2378                        .se(se), .si(), .so());
2379  dff_s #(3)    out_dff6 (.din(b6_outmx[2:0]), .clk(clk_enb0), .q(b6[2:0]),
2380                        .se(se), .si(), .so());
2381  dff_s #(3)    out_dff7 (.din(b7_outmx[2:0]), .clk(clk_enb0), .q(b7[2:0]),
2382                        .se(se), .si(), .so());
2383  dff_s #(3)    out_dff8 (.din(b8_outmx[2:0]), .clk(clk_enb0), .q(b8[2:0]),
2384                        .se(se), .si(), .so());
2385  dff_s #(3)    out_dff9 (.din(b9_outmx[2:0]), .clk(clk_enb0), .q(b9[2:0]),
2386                        .se(se), .si(), .so());
2387  dff_s #(3)    out_dff10 (.din(b10_outmx[2:0]), .clk(clk_enb0), .q(b10[2:0]),
2388                        .se(se), .si(), .so());
2389  dff_s #(3)    out_dff11 (.din(b11_outmx[2:0]), .clk(clk_enb0), .q(b11[2:0]),
2390                        .se(se), .si(), .so());
2391  dff_s #(3)    out_dff12 (.din(b12_outmx[2:0]), .clk(clk_enb0), .q(b12[2:0]),
2392                        .se(se), .si(), .so());
2393  dff_s #(3)    out_dff13 (.din(b13_outmx[2:0]), .clk(clk_enb0), .q(b13[2:0]),
2394                        .se(se), .si(), .so());
2395  dff_s #(3)    out_dff14 (.din(b14_outmx[2:0]), .clk(clk_enb0), .q(b14[2:0]),
2396                        .se(se), .si(), .so());
2397  dff_s #(3)    out_dff15 (.din(b15_outmx[2:0]), .clk(clk_enb0), .q(b15[2:0]),
2398                        .se(se), .si(), .so());
2399  dff_s               out_dff16 (.din(b16_outmx), .clk(clk_enb0), .q(b16),
2400                        .se(se), .si(), .so());
2401endmodule //mul_booth
2402
2403module mul_bodec (x, b, 
2404        b0, b1, b2, b3, b4, b5, b6, b7);
2405
2406input   x;
2407input   [15:0]  b;
2408output  [2:0]   b0, b1, b2, b3, b4, b5, b6, b7; 
2409
2410assign b0[2] = b[1];
2411assign b0[1] = ~((b[1] & b[0] & x) | (~b[1] & ~b[0] & ~x)) ;
2412assign b0[0] = (~b[1] & b[0] & x) | (b[1] & ~b[0] & ~x) ;
2413
2414assign b1[2] = b[3]; 
2415assign b1[1] = ~((b[3] & b[2] & b[1]) | (~b[3] & ~b[2] & ~b[1])) ;
2416assign b1[0] = (~b[3] & b[2] & b[1]) | (b[3] & ~b[2] & ~b[1]) ;
2417
2418assign b2[2] = b[5]; 
2419assign b2[1] = ~((b[5] & b[4] & b[3]) | (~b[5] & ~b[4] & ~b[3])) ;
2420assign b2[0] = (~b[5] & b[4] & b[3]) | (b[5] & ~b[4] & ~b[3]) ;
2421
2422assign b3[2] = b[7] ;
2423assign b3[1] = ~((b[7] & b[6] & b[5]) | (~b[7] & ~b[6] & ~b[5])) ;
2424assign b3[0] = (~b[7] & b[6] & b[5]) | (b[7] & ~b[6] & ~b[5]) ;
2425
2426assign b4[2] = b[9] ;
2427assign b4[1] = ~((b[9] & b[8] & b[7]) | (~b[9] & ~b[8] & ~b[7])) ;
2428assign b4[0] = (~b[9] & b[8] & b[7]) | (b[9] & ~b[8] & ~b[7]) ;
2429
2430assign b5[2] = b[11] ;
2431assign b5[1] = ~((b[11] & b[10] & b[9]) | (~b[11] & ~b[10] & ~b[9])) ;
2432assign b5[0] = (~b[11] & b[10] & b[9]) | (b[11] & ~b[10] & ~b[9]) ;
2433
2434assign b6[2] = b[13] ;
2435assign b6[1] = ~((b[13] & b[12] & b[11]) | (~b[13] & ~b[12] & ~b[11])) ;
2436assign b6[0] = (~b[13] & b[12] & b[11]) | (b[13] & ~b[12] & ~b[11]) ;
2437
2438assign b7[2] = b[15] ;
2439assign b7[1] = ~((b[15] & b[14] & b[13]) | (~b[15] & ~b[14] & ~b[13])) ;
2440assign b7[0] = (~b[15] & b[14] & b[13]) | (b[15] & ~b[14] & ~b[13]) ;
2441
2442endmodule // mul_bodec
2443`endif
Note: See TracBrowser for help on using the repository browser.