OpenCores
URL https://opencores.org/ocsvn/sparc64soc/sparc64soc/trunk

Subversion Repositories sparc64soc

[/] [sparc64soc/] [trunk/] [T1-CPU/] [mul/] [mul64.v] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dmitryr
// ========== 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
57
module 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
 
74
reg [135:0] myout, myout_a1, myout_a2, myout_a3;
75
 
76
reg [63:0] rs1_ff;
77
reg [64:0] rs2_ff;
78
 
79
reg [63:0] par1, par2;
80
reg [64:0] par3, par4;
81
 
82
reg [5:0] state;
83
 
84
always @(posedge rclk)
85
  state <= {valid,state[5:1]};
86
 
87
 
88
always @(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
101
end
102
 
103
assign out = myout;
104
assign so = 1'b0;
105
 
106
endmodule
107
 
108
`else
109
 
110
 
111
module mul64 (rs1_l, rs2, valid, areg, accreg, x2, out, rclk, si, so, se, mul_rst_l, mul_step);
112
 
113
input  [63:0]    rs1_l;                  // op1
114
input  [63:0]    rs2;                    // op2
115
input           valid;                  // begin of the MUL operation
116
input  [96:0]    areg;                   // accumulated input for ACCUM
117
input  [135:129] accreg;                // direct input from ACCUM [135:129]
118
input           x2;                     // for op1*op2*2
119
input           rclk, si, se, mul_rst_l, mul_step;
120
output          so;
121
output [135:0]   out;
122
 
123
wire            cyc1, cyc2, cyc3;       // cycle stage of MUL
124
wire [2:0]       b0, b1, b2,  b3,  b4,  b5,  b6,  b7;
125
wire [2:0]       b8, b9, b10, b11, b12, b13, b14, b15;
126
wire            b16;
127
wire [63:0]      op1_l, op1;
128
wire [81:0]      a0sum, a1sum, a0s, a1s;
129
wire [81:4]     a0cout, a1cout, a0c, a1c;
130
wire            pcoutx2, psumx2;
131
wire            x2_c1, x2_c2, x2_c3, x2_c2c3;
132
 
133
wire [98:0]      psum, pcout;
134
wire [98:30]    pcout_in, pc;
135
wire [98:31]    psum_in, ps;
136
wire [96:0]      ary2_cout, addin_cout;
137
wire [97:0]      ary2_sum,  addin_sum ;
138
wire            add_cin, addin_cin, add_co31, add_co96;
139
wire [103:0]     addout;
140
wire            clk_enb0, clk_enb1;
141
wire            rst;
142
wire            clk;
143
wire            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
 
312
endmodule // mul64
313
 
314
 
315
 
316
 
317
////////////////////////////////////////////////////////////////////////
318
//      Sub-moudle for mul64
319
////////////////////////////////////////////////////////////////////////
320
 
321
module mul_array1 ( cout, sum, a, b0, b1, b2, b3, b4, b5, b6, b7, b8,
322
     bot, head );
323
 
324
input  bot, head;
325
output [81:4]  cout;
326
output [81:0]  sum;
327
input [2:0]  b6;
328
input [2:0]  b3;
329
input [2:0]  b8;
330
input [2:0]  b2;
331
input [2:0]  b1;
332
input [2:0]  b7;
333
input [63:0]  a;
334
input [2:0]  b0;
335
input [2:0]  b4;
336
input [2:0]  b5;
337
 
338
// Buses in the design
339
 
340
wire  [1:0]  b5n;
341
wire  [1:0]  b2n;
342
wire  [68:1]  c0;
343
wire  [69:0]  s1;
344
wire  [68:1]  c1;
345
wire  [69:0]  s2;
346
wire  [68:1]  c2;
347
wire  [70:4]  s_1;
348
wire  [69:2]  s0;
349
wire  [76:10]  s_2;
350
wire  [70:2]  c_1;
351
wire  [76:10]  c_2;
352
wire  [75:11]  co;
353
 
354
mul_negen p1n ( .b(b5[2:0]), .n1(b5n[1]), .n0(b5n[0]));
355
mul_negen p0n ( .b(b2[2:0]), .n1(b2n[1]), .n0(b2n[0]));
356
mul_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]));
359
mul_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]));
362
mul_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]));
365
mul_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]));
368
mul_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]));
371
mul_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]));
374
mul_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]));
377
mul_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]));
380
mul_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]));
383
mul_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]));
386
mul_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]));
389
mul_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]));
392
mul_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]));
395
mul_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]));
398
mul_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]));
401
mul_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]));
404
mul_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]));
407
mul_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]));
410
mul_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]));
413
mul_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]));
416
mul_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]));
419
mul_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]));
422
mul_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]));
425
mul_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]));
428
mul_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]));
431
mul_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]));
434
mul_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]));
437
mul_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]));
440
mul_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]));
443
mul_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]));
446
mul_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]));
449
mul_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]));
452
mul_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]));
455
mul_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]));
458
mul_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]));
461
mul_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]));
464
mul_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]));
467
mul_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]));
470
mul_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]));
473
mul_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]));
476
mul_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]));
479
mul_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]));
482
mul_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]));
485
mul_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]));
488
mul_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]));
491
mul_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]));
494
mul_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]));
497
mul_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]));
500
mul_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]));
503
mul_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]));
506
mul_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]));
509
mul_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]));
512
mul_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]));
515
mul_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]));
518
mul_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]));
521
mul_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]));
524
mul_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]));
527
mul_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]));
530
mul_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]));
533
mul_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]));
536
mul_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]));
539
mul_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]));
542
mul_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]));
545
mul_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]));
548
mul_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]));
551
mul_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]));
554
mul_csa32  sc2_2_70_ ( .c(c1[63]), .b(c2[57]), .a(s2[58]),
555
     .cout(c_2[70]), .sum(s_2[70]));
556
mul_csa32  sc2_2_69_ ( .c(c1[62]), .b(c2[56]), .a(s2[57]),
557
     .cout(c_2[69]), .sum(s_2[69]));
558
mul_csa32  sc2_2_68_ ( .c(c1[61]), .b(c2[55]), .a(s2[56]),
559
     .cout(c_2[68]), .sum(s_2[68]));
560
mul_csa32  sc2_2_67_ ( .c(c1[60]), .b(c2[54]), .a(s2[55]),
561
     .cout(c_2[67]), .sum(s_2[67]));
562
mul_csa32  sc2_2_66_ ( .c(c1[59]), .b(c2[53]), .a(s2[54]),
563
     .cout(c_2[66]), .sum(s_2[66]));
564
mul_csa32  sc2_2_65_ ( .c(c1[58]), .b(c2[52]), .a(s2[53]),
565
     .cout(c_2[65]), .sum(s_2[65]));
566
mul_csa32  sc2_2_64_ ( .c(c1[57]), .b(c2[51]), .a(s2[52]),
567
     .cout(c_2[64]), .sum(s_2[64]));
568
mul_csa32  sc2_2_63_ ( .c(c1[56]), .b(c2[50]), .a(s2[51]),
569
     .cout(c_2[63]), .sum(s_2[63]));
570
mul_csa32  sc2_2_62_ ( .c(c1[55]), .b(c2[49]), .a(s2[50]),
571
     .cout(c_2[62]), .sum(s_2[62]));
572
mul_csa32  sc2_2_61_ ( .c(c1[54]), .b(c2[48]), .a(s2[49]),
573
     .cout(c_2[61]), .sum(s_2[61]));
574
mul_csa32  sc2_2_60_ ( .c(c1[53]), .b(c2[47]), .a(s2[48]),
575
     .cout(c_2[60]), .sum(s_2[60]));
576
mul_csa32  sc2_2_59_ ( .c(c1[52]), .b(c2[46]), .a(s2[47]),
577
     .cout(c_2[59]), .sum(s_2[59]));
578
mul_csa32  sc2_2_58_ ( .c(c1[51]), .b(c2[45]), .a(s2[46]),
579
     .cout(c_2[58]), .sum(s_2[58]));
580
mul_csa32  sc2_2_57_ ( .c(c1[50]), .b(c2[44]), .a(s2[45]),
581
     .cout(c_2[57]), .sum(s_2[57]));
582
mul_csa32  sc2_2_56_ ( .c(c1[49]), .b(c2[43]), .a(s2[44]),
583
     .cout(c_2[56]), .sum(s_2[56]));
584
mul_csa32  sc2_2_55_ ( .c(c1[48]), .b(c2[42]), .a(s2[43]),
585
     .cout(c_2[55]), .sum(s_2[55]));
586
mul_csa32  sc2_2_54_ ( .c(c1[47]), .b(c2[41]), .a(s2[42]),
587
     .cout(c_2[54]), .sum(s_2[54]));
588
mul_csa32  sc2_2_53_ ( .c(c1[46]), .b(c2[40]), .a(s2[41]),
589
     .cout(c_2[53]), .sum(s_2[53]));
590
mul_csa32  sc2_2_52_ ( .c(c1[45]), .b(c2[39]), .a(s2[40]),
591
     .cout(c_2[52]), .sum(s_2[52]));
592
mul_csa32  sc2_2_51_ ( .c(c1[44]), .b(c2[38]), .a(s2[39]),
593
     .cout(c_2[51]), .sum(s_2[51]));
594
mul_csa32  sc2_2_50_ ( .c(c1[43]), .b(c2[37]), .a(s2[38]),
595
     .cout(c_2[50]), .sum(s_2[50]));
596
mul_csa32  sc2_2_49_ ( .c(c1[42]), .b(c2[36]), .a(s2[37]),
597
     .cout(c_2[49]), .sum(s_2[49]));
598
mul_csa32  sc2_2_48_ ( .c(c1[41]), .b(c2[35]), .a(s2[36]),
599
     .cout(c_2[48]), .sum(s_2[48]));
600
mul_csa32  sc2_2_47_ ( .c(c1[40]), .b(c2[34]), .a(s2[35]),
601
     .cout(c_2[47]), .sum(s_2[47]));
602
mul_csa32  sc2_2_46_ ( .c(c1[39]), .b(c2[33]), .a(s2[34]),
603
     .cout(c_2[46]), .sum(s_2[46]));
604
mul_csa32  sc2_2_45_ ( .c(c1[38]), .b(c2[32]), .a(s2[33]),
605
     .cout(c_2[45]), .sum(s_2[45]));
606
mul_csa32  sc2_2_44_ ( .c(c1[37]), .b(c2[31]), .a(s2[32]),
607
     .cout(c_2[44]), .sum(s_2[44]));
608
mul_csa32  sc2_2_43_ ( .c(c1[36]), .b(c2[30]), .a(s2[31]),
609
     .cout(c_2[43]), .sum(s_2[43]));
610
mul_csa32  sc2_2_42_ ( .c(c1[35]), .b(c2[29]), .a(s2[30]),
611
     .cout(c_2[42]), .sum(s_2[42]));
612
mul_csa32  sc2_2_41_ ( .c(c1[34]), .b(c2[28]), .a(s2[29]),
613
     .cout(c_2[41]), .sum(s_2[41]));
614
mul_csa32  sc2_2_40_ ( .c(c1[33]), .b(c2[27]), .a(s2[28]),
615
     .cout(c_2[40]), .sum(s_2[40]));
616
mul_csa32  sc2_2_39_ ( .c(c1[32]), .b(c2[26]), .a(s2[27]),
617
     .cout(c_2[39]), .sum(s_2[39]));
618
mul_csa32  sc2_2_38_ ( .c(c1[31]), .b(c2[25]), .a(s2[26]),
619
     .cout(c_2[38]), .sum(s_2[38]));
620
mul_csa32  sc2_2_37_ ( .c(c1[30]), .b(c2[24]), .a(s2[25]),
621
     .cout(c_2[37]), .sum(s_2[37]));
622
mul_csa32  sc2_2_36_ ( .c(c1[29]), .b(c2[23]), .a(s2[24]),
623
     .cout(c_2[36]), .sum(s_2[36]));
624
mul_csa32  sc2_2_35_ ( .c(c1[28]), .b(c2[22]), .a(s2[23]),
625
     .cout(c_2[35]), .sum(s_2[35]));
626
mul_csa32  sc2_2_34_ ( .c(c1[27]), .b(c2[21]), .a(s2[22]),
627
     .cout(c_2[34]), .sum(s_2[34]));
628
mul_csa32  sc2_2_33_ ( .c(c1[26]), .b(c2[20]), .a(s2[21]),
629
     .cout(c_2[33]), .sum(s_2[33]));
630
mul_csa32  sc2_2_32_ ( .c(c1[25]), .b(c2[19]), .a(s2[20]),
631
     .cout(c_2[32]), .sum(s_2[32]));
632
mul_csa32  sc2_2_31_ ( .c(c1[24]), .b(c2[18]), .a(s2[19]),
633
     .cout(c_2[31]), .sum(s_2[31]));
634
mul_csa32  sc2_2_30_ ( .c(c1[23]), .b(c2[17]), .a(s2[18]),
635
     .cout(c_2[30]), .sum(s_2[30]));
636
mul_csa32  sc2_2_29_ ( .c(c1[22]), .b(c2[16]), .a(s2[17]),
637
     .cout(c_2[29]), .sum(s_2[29]));
638
mul_csa32  sc2_2_28_ ( .c(c1[21]), .b(c2[15]), .a(s2[16]),
639
     .cout(c_2[28]), .sum(s_2[28]));
640
mul_csa32  sc2_2_27_ ( .c(c1[20]), .b(c2[14]), .a(s2[15]),
641
     .cout(c_2[27]), .sum(s_2[27]));
642
mul_csa32  sc2_2_26_ ( .c(c1[19]), .b(c2[13]), .a(s2[14]),
643
     .cout(c_2[26]), .sum(s_2[26]));
644
mul_csa32  sc2_2_25_ ( .c(c1[18]), .b(c2[12]), .a(s2[13]),
645
     .cout(c_2[25]), .sum(s_2[25]));
646
mul_csa32  sc2_2_24_ ( .c(c1[17]), .b(c2[11]), .a(s2[12]),
647
     .cout(c_2[24]), .sum(s_2[24]));
648
mul_csa32  sc2_2_23_ ( .c(c1[16]), .b(c2[10]), .a(s2[11]),
649
     .cout(c_2[23]), .sum(s_2[23]));
650
mul_csa32  sc2_2_22_ ( .c(c1[15]), .b(c2[9]), .a(s2[10]),
651
     .cout(c_2[22]), .sum(s_2[22]));
652
mul_csa32  sc2_2_21_ ( .c(c1[14]), .b(c2[8]), .a(s2[9]),
653
     .cout(c_2[21]), .sum(s_2[21]));
654
mul_csa32  sc2_2_20_ ( .c(c1[13]), .b(c2[7]), .a(s2[8]),
655
     .cout(c_2[20]), .sum(s_2[20]));
656
mul_csa32  sc2_2_19_ ( .c(c1[12]), .b(c2[6]), .a(s2[7]),
657
     .cout(c_2[19]), .sum(s_2[19]));
658
mul_csa32  sc2_2_18_ ( .c(c1[11]), .b(c2[5]), .a(s2[6]),
659
     .cout(c_2[18]), .sum(s_2[18]));
660
mul_csa32  sc2_2_17_ ( .c(c1[10]), .b(c2[4]), .a(s2[5]),
661
     .cout(c_2[17]), .sum(s_2[17]));
662
mul_csa32  sc2_2_16_ ( .c(c1[9]), .b(c2[3]), .a(s2[4]),
663
     .cout(c_2[16]), .sum(s_2[16]));
664
mul_csa32  sc2_2_15_ ( .c(c1[8]), .b(c2[2]), .a(s2[3]),
665
     .cout(c_2[15]), .sum(s_2[15]));
666
mul_csa32  sc2_2_14_ ( .c(c1[7]), .b(c2[1]), .a(s2[2]),
667
     .cout(c_2[14]), .sum(s_2[14]));
668
mul_csa32  sc2_2_13_ ( .c(c1[6]), .b(s1[7]), .a(s2[1]),
669
     .cout(c_2[13]), .sum(s_2[13]));
670
mul_csa32  sc2_2_12_ ( .c(c1[5]), .b(s1[6]), .a(s2[0]),
671
     .cout(c_2[12]), .sum(s_2[12]));
672
mul_csa32  sc2_2_11_ ( .c(c1[4]), .b(s1[5]), .a(b5n[1]),
673
     .cout(c_2[11]), .sum(s_2[11]));
674
mul_csa32  sc2_2_10_ ( .c(c1[3]), .b(s1[4]), .a(b5n[0]),
675
     .cout(c_2[10]), .sum(s_2[10]));
676
mul_csa32  sc2_2_76_ ( .c(1'b1), .b(c2[63]), .a(s2[64]),
677
     .cout(c_2[76]), .sum(s_2[76]));
678
mul_csa32  sc2_2_77_ ( .c(c_2[76]), .b(c2[64]), .a(s2[65]),
679
     .cout(cout[77]), .sum(sum[77]));
680
mul_csa32  sc2_1_9_ ( .c(s1[3]), .b(c0[8]), .a(s0[9]), .cout(c_1[9]),
681
     .sum(s_1[9]));
682
mul_csa32  sc2_1_8_ ( .c(s1[2]), .b(c0[7]), .a(s0[8]), .cout(c_1[8]),
683
     .sum(s_1[8]));
684
mul_csa32  sc2_1_3_ ( .c(c_1[2]), .b(c0[2]), .a(s0[3]),
685
     .cout(c_1[3]), .sum(sum[3]));
686
mul_csa32  sc3_10_ ( .c(s_2[10]), .b(s_1[10]), .a(c_1[9]),
687
     .cout(cout[10]), .sum(sum[10]));
688
mul_csa32  sc3_9_ ( .c(c1[2]), .sum(sum[9]), .cout(cout[9]),
689
     .a(c_1[8]), .b(s_1[9]));
690
mul_csa32  sc3_8_ ( .c(c1[1]), .sum(sum[8]), .cout(cout[8]),
691
     .a(c_1[7]), .b(s_1[8]));
692
mul_csa32  sc2_2_71_ ( .c(c1[64]), .b(c2[58]), .a(s2[59]),
693
     .cout(c_2[71]), .sum(s_2[71]));
694
mul_csa32  sc2_2_75_ ( .c(c1[68]), .b(c2[62]), .a(s2[63]),
695
     .cout(c_2[75]), .sum(s_2[75]));
696
mul_csa32  sc2_2_74_ ( .c(c1[67]), .b(c2[61]), .a(s2[62]),
697
     .cout(c_2[74]), .sum(s_2[74]));
698
mul_csa32  sc2_2_73_ ( .c(c1[66]), .b(c2[60]), .a(s2[61]),
699
     .cout(c_2[73]), .sum(s_2[73]));
700
mul_csa32  sc2_2_72_ ( .c(c1[65]), .b(c2[59]), .a(s2[60]),
701
     .cout(c_2[72]), .sum(s_2[72]));
702
mul_csa32  sc2_1_69_ ( .c(s1[63]), .sum(s_1[69]), .cout(c_1[69]),
703
     .a(s0[69]), .b(c0[68]));
704
mul_csa32  sc2_1_68_ ( .c(s1[62]), .sum(s_1[68]), .cout(c_1[68]),
705
     .a(s0[68]), .b(c0[67]));
706
mul_csa32  sc2_1_67_ ( .c(s1[61]), .sum(s_1[67]), .cout(c_1[67]),
707
     .a(s0[67]), .b(c0[66]));
708
mul_csa32  sc2_1_66_ ( .c(s1[60]), .sum(s_1[66]), .cout(c_1[66]),
709
     .a(s0[66]), .b(c0[65]));
710
mul_csa32  sc2_1_65_ ( .c(s1[59]), .sum(s_1[65]), .cout(c_1[65]),
711
     .a(s0[65]), .b(c0[64]));
712
mul_csa32  sc2_1_64_ ( .c(s1[58]), .sum(s_1[64]), .cout(c_1[64]),
713
     .a(s0[64]), .b(c0[63]));
714
mul_csa32  sc2_1_63_ ( .c(s1[57]), .sum(s_1[63]), .cout(c_1[63]),
715
     .a(s0[63]), .b(c0[62]));
716
mul_csa32  sc2_1_62_ ( .c(s1[56]), .sum(s_1[62]), .cout(c_1[62]),
717
     .a(s0[62]), .b(c0[61]));
718
mul_csa32  sc2_1_61_ ( .c(s1[55]), .sum(s_1[61]), .cout(c_1[61]),
719
     .a(s0[61]), .b(c0[60]));
720
mul_csa32  sc2_1_60_ ( .c(s1[54]), .sum(s_1[60]), .cout(c_1[60]),
721
     .a(s0[60]), .b(c0[59]));
722
mul_csa32  sc2_1_59_ ( .c(s1[53]), .sum(s_1[59]), .cout(c_1[59]),
723
     .a(s0[59]), .b(c0[58]));
724
mul_csa32  sc2_1_58_ ( .c(s1[52]), .sum(s_1[58]), .cout(c_1[58]),
725
     .a(s0[58]), .b(c0[57]));
726
mul_csa32  sc2_1_57_ ( .c(s1[51]), .sum(s_1[57]), .cout(c_1[57]),
727
     .a(s0[57]), .b(c0[56]));
728
mul_csa32  sc2_1_56_ ( .c(s1[50]), .sum(s_1[56]), .cout(c_1[56]),
729
     .a(s0[56]), .b(c0[55]));
730
mul_csa32  sc2_1_55_ ( .c(s1[49]), .sum(s_1[55]), .cout(c_1[55]),
731
     .a(s0[55]), .b(c0[54]));
732
mul_csa32  sc2_1_54_ ( .c(s1[48]), .sum(s_1[54]), .cout(c_1[54]),
733
     .a(s0[54]), .b(c0[53]));
734
mul_csa32  sc2_1_53_ ( .c(s1[47]), .sum(s_1[53]), .cout(c_1[53]),
735
     .a(s0[53]), .b(c0[52]));
736
mul_csa32  sc2_1_52_ ( .c(s1[46]), .sum(s_1[52]), .cout(c_1[52]),
737
     .a(s0[52]), .b(c0[51]));
738
mul_csa32  sc2_1_51_ ( .c(s1[45]), .sum(s_1[51]), .cout(c_1[51]),
739
     .a(s0[51]), .b(c0[50]));
740
mul_csa32  sc2_1_50_ ( .c(s1[44]), .sum(s_1[50]), .cout(c_1[50]),
741
     .a(s0[50]), .b(c0[49]));
742
mul_csa32  sc2_1_49_ ( .c(s1[43]), .sum(s_1[49]), .cout(c_1[49]),
743
     .a(s0[49]), .b(c0[48]));
744
mul_csa32  sc2_1_48_ ( .c(s1[42]), .sum(s_1[48]), .cout(c_1[48]),
745
     .a(s0[48]), .b(c0[47]));
746
mul_csa32  sc2_1_47_ ( .c(s1[41]), .sum(s_1[47]), .cout(c_1[47]),
747
     .a(s0[47]), .b(c0[46]));
748
mul_csa32  sc2_1_46_ ( .c(s1[40]), .sum(s_1[46]), .cout(c_1[46]),
749
     .a(s0[46]), .b(c0[45]));
750
mul_csa32  sc2_1_45_ ( .c(s1[39]), .sum(s_1[45]), .cout(c_1[45]),
751
     .a(s0[45]), .b(c0[44]));
752
mul_csa32  sc2_1_44_ ( .c(s1[38]), .sum(s_1[44]), .cout(c_1[44]),
753
     .a(s0[44]), .b(c0[43]));
754
mul_csa32  sc2_1_43_ ( .c(s1[37]), .sum(s_1[43]), .cout(c_1[43]),
755
     .a(s0[43]), .b(c0[42]));
756
mul_csa32  sc2_1_42_ ( .c(s1[36]), .sum(s_1[42]), .cout(c_1[42]),
757
     .a(s0[42]), .b(c0[41]));
758
mul_csa32  sc2_1_41_ ( .c(s1[35]), .sum(s_1[41]), .cout(c_1[41]),
759
     .a(s0[41]), .b(c0[40]));
760
mul_csa32  sc2_1_40_ ( .c(s1[34]), .sum(s_1[40]), .cout(c_1[40]),
761
     .a(s0[40]), .b(c0[39]));
762
mul_csa32  sc2_1_39_ ( .c(s1[33]), .sum(s_1[39]), .cout(c_1[39]),
763
     .a(s0[39]), .b(c0[38]));
764
mul_csa32  sc2_1_38_ ( .c(s1[32]), .sum(s_1[38]), .cout(c_1[38]),
765
     .a(s0[38]), .b(c0[37]));
766
mul_csa32  sc2_1_37_ ( .c(s1[31]), .sum(s_1[37]), .cout(c_1[37]),
767
     .a(s0[37]), .b(c0[36]));
768
mul_csa32  sc2_1_36_ ( .c(s1[30]), .sum(s_1[36]), .cout(c_1[36]),
769
     .a(s0[36]), .b(c0[35]));
770
mul_csa32  sc2_1_35_ ( .c(s1[29]), .sum(s_1[35]), .cout(c_1[35]),
771
     .a(s0[35]), .b(c0[34]));
772
mul_csa32  sc2_1_34_ ( .c(s1[28]), .sum(s_1[34]), .cout(c_1[34]),
773
     .a(s0[34]), .b(c0[33]));
774
mul_csa32  sc2_1_33_ ( .c(s1[27]), .sum(s_1[33]), .cout(c_1[33]),
775
     .a(s0[33]), .b(c0[32]));
776
mul_csa32  sc2_1_32_ ( .c(s1[26]), .sum(s_1[32]), .cout(c_1[32]),
777
     .a(s0[32]), .b(c0[31]));
778
mul_csa32  sc2_1_31_ ( .c(s1[25]), .sum(s_1[31]), .cout(c_1[31]),
779
     .a(s0[31]), .b(c0[30]));
780
mul_csa32  sc2_1_30_ ( .c(s1[24]), .sum(s_1[30]), .cout(c_1[30]),
781
     .a(s0[30]), .b(c0[29]));
782
mul_csa32  sc2_1_29_ ( .c(s1[23]), .sum(s_1[29]), .cout(c_1[29]),
783
     .a(s0[29]), .b(c0[28]));
784
mul_csa32  sc2_1_28_ ( .c(s1[22]), .sum(s_1[28]), .cout(c_1[28]),
785
     .a(s0[28]), .b(c0[27]));
786
mul_csa32  sc2_1_27_ ( .c(s1[21]), .sum(s_1[27]), .cout(c_1[27]),
787
     .a(s0[27]), .b(c0[26]));
788
mul_csa32  sc2_1_26_ ( .c(s1[20]), .sum(s_1[26]), .cout(c_1[26]),
789
     .a(s0[26]), .b(c0[25]));
790
mul_csa32  sc2_1_25_ ( .c(s1[19]), .sum(s_1[25]), .cout(c_1[25]),
791
     .a(s0[25]), .b(c0[24]));
792
mul_csa32  sc2_1_24_ ( .c(s1[18]), .sum(s_1[24]), .cout(c_1[24]),
793
     .a(s0[24]), .b(c0[23]));
794
mul_csa32  sc2_1_23_ ( .c(s1[17]), .sum(s_1[23]), .cout(c_1[23]),
795
     .a(s0[23]), .b(c0[22]));
796
mul_csa32  sc2_1_22_ ( .c(s1[16]), .sum(s_1[22]), .cout(c_1[22]),
797
     .a(s0[22]), .b(c0[21]));
798
mul_csa32  sc2_1_21_ ( .c(s1[15]), .sum(s_1[21]), .cout(c_1[21]),
799
     .a(s0[21]), .b(c0[20]));
800
mul_csa32  sc2_1_20_ ( .c(s1[14]), .sum(s_1[20]), .cout(c_1[20]),
801
     .a(s0[20]), .b(c0[19]));
802
mul_csa32  sc2_1_19_ ( .c(s1[13]), .sum(s_1[19]), .cout(c_1[19]),
803
     .a(s0[19]), .b(c0[18]));
804
mul_csa32  sc2_1_18_ ( .c(s1[12]), .sum(s_1[18]), .cout(c_1[18]),
805
     .a(s0[18]), .b(c0[17]));
806
mul_csa32  sc2_1_17_ ( .c(s1[11]), .sum(s_1[17]), .cout(c_1[17]),
807
     .a(s0[17]), .b(c0[16]));
808
mul_csa32  sc2_1_16_ ( .c(s1[10]), .sum(s_1[16]), .cout(c_1[16]),
809
     .a(s0[16]), .b(c0[15]));
810
mul_csa32  sc2_1_15_ ( .c(s1[9]), .sum(s_1[15]), .cout(c_1[15]),
811
     .a(s0[15]), .b(c0[14]));
812
mul_csa32  sc2_1_14_ ( .c(s1[8]), .sum(s_1[14]), .cout(c_1[14]),
813
     .a(s0[14]), .b(c0[13]));
814
mul_csa32  sc2_1_7_ ( .c(s1[1]), .b(c0[6]), .a(s0[7]), .cout(c_1[7]),
815
     .sum(s_1[7]));
816
mul_csa32  sc2_1_6_ ( .c(s1[0]), .b(c0[5]), .a(s0[6]), .cout(c_1[6]),
817
     .sum(s_1[6]));
818
mul_csa32  sc2_1_5_ ( .c(b2n[1]), .b(c0[4]), .a(s0[5]),
819
     .cout(c_1[5]), .sum(s_1[5]));
820
mul_csa32  sc2_1_4_ ( .c(b2n[0]), .b(c0[3]), .a(s0[4]),
821
     .cout(c_1[4]), .sum(s_1[4]));
822
mul_ha sc2_1_10_ ( .sum(s_1[10]), .cout(c_1[10]), .a(s0[10]),
823
     .b(c0[9]));
824
mul_ha sc3_7_ ( .sum(sum[7]), .cout(cout[7]), .a(c_1[6]),
825
     .b(s_1[7]));
826
mul_ha sc3_6_ ( .sum(sum[6]), .cout(cout[6]), .a(c_1[5]),
827
     .b(s_1[6]));
828
mul_ha sc3_5_ ( .sum(sum[5]), .cout(cout[5]), .a(c_1[4]),
829
     .b(s_1[5]));
830
mul_ha sc3_4_ ( .sum(sum[4]), .cout(cout[4]), .a(c_1[3]),
831
     .b(s_1[4]));
832
mul_ha sc2_2_81_ ( .sum(sum[81]), .cout(cout[81]), .a(s2[69]),
833
     .b(c2[68]));
834
mul_ha sc2_2_80_ ( .sum(sum[80]), .cout(cout[80]), .a(s2[68]),
835
     .b(c2[67]));
836
mul_ha sc2_2_79_ ( .sum(sum[79]), .cout(cout[79]), .a(s2[67]),
837
     .b(c2[66]));
838
mul_ha sc2_2_78_ ( .sum(sum[78]), .cout(cout[78]), .a(s2[66]),
839
     .b(c2[65]));
840
mul_ha sc2_1_70_ ( .sum(s_1[70]), .cout(c_1[70]),
841
     .a(1'b1), .b(s1[64]));
842
mul_ha sc2_1_2_ ( .sum(sum[2]), .cout(c_1[2]), .a(s0[2]), .b(c0[1]));
843
mul_ha sc2_1_13_ ( .sum(s_1[13]), .cout(c_1[13]), .a(s0[13]),
844
     .b(c0[12]));
845
mul_ha sc2_1_12_ ( .sum(s_1[12]), .cout(c_1[12]), .a(s0[12]),
846
     .b(c0[11]));
847
mul_ha sc2_1_11_ ( .sum(s_1[11]), .cout(c_1[11]), .a(s0[11]),
848
     .b(c0[10]));
849
mul_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]));
852
mul_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]));
855
mul_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
 
859
endmodule // mul_array1
860
 
861
module mul_array2 ( pcout, pcoutx2, psum, psumx2, a0c, a0s, a1c, a1s,
862
     areg, bot, pc, ps, x2 );
863
 
864
output  pcoutx2, psumx2;
865
input  bot, x2;
866
output [98:0]  psum;
867
output [98:0]  pcout;
868
input [81:4]  a1c;
869
input [98:30]  pc;
870
input [98:31]  ps;
871
input [81:0]  a0s;
872
input [96:0]  areg;
873
input [81:0]  a1s;
874
input [81:4]  a0c;
875
 
876
// Buses in the design
877
wire  [81:15]  s3;
878
wire  [81:15]  c3;
879
wire  [96:0]  ain;
880
wire  [67:20]  co;
881
wire  [82:0]  s1;
882
wire  [96:0]  c2;
883
wire  [82:0]  c1;
884
wire  [96:0]  s2;
885
wire          ainx2, s1x2, c1x2;
886
 
887
mul_mux2 sh_82_ ( .d1(areg[83]), .z(ain[82]), .d0(areg[82]), .s(x2));
888
mul_mux2 sh_68_ ( .d1(areg[69]), .z(ain[68]), .d0(areg[68]), .s(x2));
889
mul_mux2 sh_67_ ( .d1(areg[68]), .z(ain[67]), .d0(areg[67]), .s(x2));
890
mul_mux2 sh_66_ ( .d1(areg[67]), .z(ain[66]), .d0(areg[66]), .s(x2));
891
mul_mux2 sh_65_ ( .d1(areg[66]), .z(ain[65]), .d0(areg[65]), .s(x2));
892
mul_mux2 sh_64_ ( .d1(areg[65]), .z(ain[64]), .d0(areg[64]), .s(x2));
893
mul_mux2 sh_63_ ( .d1(areg[64]), .z(ain[63]), .d0(areg[63]), .s(x2));
894
mul_mux2 sh_62_ ( .d1(areg[63]), .z(ain[62]), .d0(areg[62]), .s(x2));
895
mul_mux2 sh_61_ ( .d1(areg[62]), .z(ain[61]), .d0(areg[61]), .s(x2));
896
mul_mux2 sh_60_ ( .d1(areg[61]), .z(ain[60]), .d0(areg[60]), .s(x2));
897
mul_mux2 sh_59_ ( .d1(areg[60]), .z(ain[59]), .d0(areg[59]), .s(x2));
898
mul_mux2 sh_58_ ( .d1(areg[59]), .z(ain[58]), .d0(areg[58]), .s(x2));
899
mul_mux2 sh_57_ ( .d1(areg[58]), .z(ain[57]), .d0(areg[57]), .s(x2));
900
mul_mux2 sh_56_ ( .d1(areg[57]), .z(ain[56]), .d0(areg[56]), .s(x2));
901
mul_mux2 sh_55_ ( .d1(areg[56]), .z(ain[55]), .d0(areg[55]), .s(x2));
902
mul_mux2 sh_54_ ( .d1(areg[55]), .z(ain[54]), .d0(areg[54]), .s(x2));
903
mul_mux2 sh_53_ ( .d1(areg[54]), .z(ain[53]), .d0(areg[53]), .s(x2));
904
mul_mux2 sh_52_ ( .d1(areg[53]), .z(ain[52]), .d0(areg[52]), .s(x2));
905
mul_mux2 sh_51_ ( .d1(areg[52]), .z(ain[51]), .d0(areg[51]), .s(x2));
906
mul_mux2 sh_50_ ( .d1(areg[51]), .z(ain[50]), .d0(areg[50]), .s(x2));
907
mul_mux2 sh_49_ ( .d1(areg[50]), .z(ain[49]), .d0(areg[49]), .s(x2));
908
mul_mux2 sh_48_ ( .d1(areg[49]), .z(ain[48]), .d0(areg[48]), .s(x2));
909
mul_mux2 sh_47_ ( .d1(areg[48]), .z(ain[47]), .d0(areg[47]), .s(x2));
910
mul_mux2 sh_46_ ( .d1(areg[47]), .z(ain[46]), .d0(areg[46]), .s(x2));
911
mul_mux2 sh_45_ ( .d1(areg[46]), .z(ain[45]), .d0(areg[45]), .s(x2));
912
mul_mux2 sh_44_ ( .d1(areg[45]), .z(ain[44]), .d0(areg[44]), .s(x2));
913
mul_mux2 sh_43_ ( .d1(areg[44]), .z(ain[43]), .d0(areg[43]), .s(x2));
914
mul_mux2 sh_42_ ( .d1(areg[43]), .z(ain[42]), .d0(areg[42]), .s(x2));
915
mul_mux2 sh_41_ ( .d1(areg[42]), .z(ain[41]), .d0(areg[41]), .s(x2));
916
mul_mux2 sh_40_ ( .d1(areg[41]), .z(ain[40]), .d0(areg[40]), .s(x2));
917
mul_mux2 sh_39_ ( .d1(areg[40]), .z(ain[39]), .d0(areg[39]), .s(x2));
918
mul_mux2 sh_38_ ( .d1(areg[39]), .z(ain[38]), .d0(areg[38]), .s(x2));
919
mul_mux2 sh_37_ ( .d1(areg[38]), .z(ain[37]), .d0(areg[37]), .s(x2));
920
mul_mux2 sh_36_ ( .d1(areg[37]), .z(ain[36]), .d0(areg[36]), .s(x2));
921
mul_mux2 sh_35_ ( .d1(areg[36]), .z(ain[35]), .d0(areg[35]), .s(x2));
922
mul_mux2 sh_34_ ( .d1(areg[35]), .z(ain[34]), .d0(areg[34]), .s(x2));
923
mul_mux2 sh_33_ ( .d1(areg[34]), .z(ain[33]), .d0(areg[33]), .s(x2));
924
mul_mux2 sh_32_ ( .d1(areg[33]), .z(ain[32]), .d0(areg[32]), .s(x2));
925
mul_mux2 sh_31_ ( .d1(areg[32]), .z(ain[31]), .d0(areg[31]), .s(x2));
926
mul_mux2 sh_30_ ( .d1(areg[31]), .z(ain[30]), .d0(areg[30]), .s(x2));
927
mul_mux2 sh_29_ ( .d1(areg[30]), .z(ain[29]), .d0(areg[29]), .s(x2));
928
mul_mux2 sh_28_ ( .d1(areg[29]), .z(ain[28]), .d0(areg[28]), .s(x2));
929
mul_mux2 sh_27_ ( .d1(areg[28]), .z(ain[27]), .d0(areg[27]), .s(x2));
930
mul_mux2 sh_26_ ( .d1(areg[27]), .z(ain[26]), .d0(areg[26]), .s(x2));
931
mul_mux2 sh_25_ ( .d1(areg[26]), .z(ain[25]), .d0(areg[25]), .s(x2));
932
mul_mux2 sh_24_ ( .d1(areg[25]), .z(ain[24]), .d0(areg[24]), .s(x2));
933
mul_mux2 sh_23_ ( .d1(areg[24]), .z(ain[23]), .d0(areg[23]), .s(x2));
934
mul_mux2 sh_22_ ( .d1(areg[23]), .z(ain[22]), .d0(areg[22]), .s(x2));
935
mul_mux2 sh_21_ ( .d1(areg[22]), .z(ain[21]), .d0(areg[21]), .s(x2));
936
mul_mux2 sh_20_ ( .d1(areg[21]), .z(ain[20]), .d0(areg[20]), .s(x2));
937
mul_mux2 sh_96_ ( .d1(1'b0), .z(ain[96]), .d0(areg[96]),
938
     .s(x2));
939
mul_mux2 sh_95_ ( .d1(areg[96]), .z(ain[95]), .d0(areg[95]), .s(x2));
940
mul_mux2 sh_94_ ( .d1(areg[95]), .z(ain[94]), .d0(areg[94]), .s(x2));
941
mul_mux2 sh_93_ ( .d1(areg[94]), .z(ain[93]), .d0(areg[93]), .s(x2));
942
mul_mux2 sh_92_ ( .d1(areg[93]), .z(ain[92]), .d0(areg[92]), .s(x2));
943
mul_mux2 sh_91_ ( .d1(areg[92]), .z(ain[91]), .d0(areg[91]), .s(x2));
944
mul_mux2 sh_90_ ( .d1(areg[91]), .z(ain[90]), .d0(areg[90]), .s(x2));
945
mul_mux2 sh_89_ ( .d1(areg[90]), .z(ain[89]), .d0(areg[89]), .s(x2));
946
mul_mux2 sh_88_ ( .d1(areg[89]), .z(ain[88]), .d0(areg[88]), .s(x2));
947
mul_mux2 sh_87_ ( .d1(areg[88]), .z(ain[87]), .d0(areg[87]), .s(x2));
948
mul_mux2 sh_86_ ( .d1(areg[87]), .z(ain[86]), .d0(areg[86]), .s(x2));
949
mul_mux2 sh_85_ ( .d1(areg[86]), .z(ain[85]), .d0(areg[85]), .s(x2));
950
mul_mux2 sh_84_ ( .d1(areg[85]), .z(ain[84]), .d0(areg[84]), .s(x2));
951
mul_mux2 sh_0_ ( .d1(areg[1]), .z(ain[0]), .d0(areg[0]), .s(x2));
952
mul_mux2 sh_81_ ( .d1(areg[82]), .z(ain[81]), .d0(areg[81]), .s(x2));
953
mul_mux2 sh_80_ ( .d1(areg[81]), .z(ain[80]), .d0(areg[80]), .s(x2));
954
mul_mux2 sh_79_ ( .d1(areg[80]), .z(ain[79]), .d0(areg[79]), .s(x2));
955
mul_mux2 sh_78_ ( .d1(areg[79]), .z(ain[78]), .d0(areg[78]), .s(x2));
956
mul_mux2 sh_77_ ( .d1(areg[78]), .z(ain[77]), .d0(areg[77]), .s(x2));
957
mul_mux2 sh_76_ ( .d1(areg[77]), .z(ain[76]), .d0(areg[76]), .s(x2));
958
mul_mux2 sh_75_ ( .d1(areg[76]), .z(ain[75]), .d0(areg[75]), .s(x2));
959
mul_mux2 sh_74_ ( .d1(areg[75]), .z(ain[74]), .d0(areg[74]), .s(x2));
960
mul_mux2 sh_73_ ( .d1(areg[74]), .z(ain[73]), .d0(areg[73]), .s(x2));
961
mul_mux2 sh_72_ ( .d1(areg[73]), .z(ain[72]), .d0(areg[72]), .s(x2));
962
mul_mux2 sh_71_ ( .d1(areg[72]), .z(ain[71]), .d0(areg[71]), .s(x2));
963
mul_mux2 sh_70_ ( .d1(areg[71]), .z(ain[70]), .d0(areg[70]), .s(x2));
964
mul_mux2 sh_69_ ( .d1(areg[70]), .z(ain[69]), .d0(areg[69]), .s(x2));
965
mul_mux2 sh_19_ ( .d1(areg[20]), .z(ain[19]), .d0(areg[19]), .s(x2));
966
mul_mux2 sh_18_ ( .d1(areg[19]), .z(ain[18]), .d0(areg[18]), .s(x2));
967
mul_mux2 sh_17_ ( .d1(areg[18]), .z(ain[17]), .d0(areg[17]), .s(x2));
968
mul_mux2 sh_16_ ( .d1(areg[17]), .z(ain[16]), .d0(areg[16]), .s(x2));
969
mul_mux2 sh_15_ ( .d1(areg[16]), .z(ain[15]), .d0(areg[15]), .s(x2));
970
mul_mux2 sh_4_ ( .d1(areg[5]), .z(ain[4]), .d0(areg[4]), .s(x2));
971
mul_mux2 sh_3_ ( .d1(areg[4]), .z(ain[3]), .d0(areg[3]), .s(x2));
972
mul_mux2 sh_2_ ( .d1(areg[3]), .z(ain[2]), .d0(areg[2]), .s(x2));
973
mul_mux2 sh_1_ ( .d1(areg[2]), .z(ain[1]), .d0(areg[1]), .s(x2));
974
mul_mux2 shx2 ( .d1(areg[0]), .z(ainx2), .d0(1'b0),
975
     .s(x2));
976
mul_mux2 sh_83_ ( .d1(areg[84]), .z(ain[83]), .d0(areg[83]), .s(x2));
977
mul_mux2 sh_14_ ( .d1(areg[15]), .z(ain[14]), .d0(areg[14]), .s(x2));
978
mul_mux2 sh_13_ ( .d1(areg[14]), .z(ain[13]), .d0(areg[13]), .s(x2));
979
mul_mux2 sh_12_ ( .d1(areg[13]), .z(ain[12]), .d0(areg[12]), .s(x2));
980
mul_mux2 sh_11_ ( .d1(areg[12]), .z(ain[11]), .d0(areg[11]), .s(x2));
981
mul_mux2 sh_10_ ( .d1(areg[11]), .z(ain[10]), .d0(areg[10]), .s(x2));
982
mul_mux2 sh_9_ ( .d1(areg[10]), .z(ain[9]), .d0(areg[9]), .s(x2));
983
mul_mux2 sh_8_ ( .d1(areg[9]), .z(ain[8]), .d0(areg[8]), .s(x2));
984
mul_mux2 sh_7_ ( .d1(areg[8]), .z(ain[7]), .d0(areg[7]), .s(x2));
985
mul_mux2 sh_6_ ( .d1(areg[7]), .z(ain[6]), .d0(areg[6]), .s(x2));
986
mul_mux2 sh_5_ ( .d1(areg[6]), .z(ain[5]), .d0(areg[5]), .s(x2));
987
mul_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]));
990
mul_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]));
993
mul_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]));
995
mul_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]));
997
mul_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]));
999
mul_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]));
1001
mul_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]));
1003
mul_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]));
1005
mul_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]));
1007
mul_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]));
1009
mul_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]));
1011
mul_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]));
1013
mul_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]));
1015
mul_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]));
1017
mul_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]));
1019
mul_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]));
1021
mul_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]));
1023
mul_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]));
1025
mul_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]));
1027
mul_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]));
1029
mul_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]));
1031
mul_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]));
1033
mul_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]));
1035
mul_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]));
1037
mul_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]));
1039
mul_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]));
1041
mul_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]));
1043
mul_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]));
1045
mul_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]));
1047
mul_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]));
1049
mul_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]));
1051
mul_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]));
1053
mul_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]));
1055
mul_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]));
1057
mul_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]));
1059
mul_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]));
1061
mul_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]));
1063
mul_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]));
1065
mul_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]));
1067
mul_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]));
1069
mul_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]));
1071
mul_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]));
1073
mul_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]));
1075
mul_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]));
1077
mul_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]));
1079
mul_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]));
1081
mul_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]));
1083
mul_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]));
1085
mul_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]));
1088
mul_csa32  sc4_82_ ( .c(c3[81]), .b(s2[82]), .a(ain[82]),
1089
     .cout(pcout[82]), .sum(psum[82]));
1090
mul_csa32  sc4_68_ ( .c(c3[67]), .b(s3[68]), .a(ain[68]),
1091
     .cout(pcout[68]), .sum(psum[68]));
1092
mul_csa32  sc4_67_ ( .c(c3[66]), .b(s3[67]), .a(ain[67]),
1093
     .cout(pcout[67]), .sum(psum[67]));
1094
mul_csa32  sc4_66_ ( .c(c3[65]), .b(s3[66]), .a(ain[66]),
1095
     .cout(pcout[66]), .sum(psum[66]));
1096
mul_csa32  sc4_65_ ( .c(c3[64]), .b(s3[65]), .a(ain[65]),
1097
     .cout(pcout[65]), .sum(psum[65]));
1098
mul_csa32  sc4_64_ ( .c(c3[63]), .b(s3[64]), .a(ain[64]),
1099
     .cout(pcout[64]), .sum(psum[64]));
1100
mul_csa32  sc4_63_ ( .c(c3[62]), .b(s3[63]), .a(ain[63]),
1101
     .cout(pcout[63]), .sum(psum[63]));
1102
mul_csa32  sc4_62_ ( .c(c3[61]), .b(s3[62]), .a(ain[62]),
1103
     .cout(pcout[62]), .sum(psum[62]));
1104
mul_csa32  sc4_61_ ( .c(c3[60]), .b(s3[61]), .a(ain[61]),
1105
     .cout(pcout[61]), .sum(psum[61]));
1106
mul_csa32  sc4_60_ ( .c(c3[59]), .b(s3[60]), .a(ain[60]),
1107
     .cout(pcout[60]), .sum(psum[60]));
1108
mul_csa32  sc4_59_ ( .c(c3[58]), .b(s3[59]), .a(ain[59]),
1109
     .cout(pcout[59]), .sum(psum[59]));
1110
mul_csa32  sc4_58_ ( .c(c3[57]), .b(s3[58]), .a(ain[58]),
1111
     .cout(pcout[58]), .sum(psum[58]));
1112
mul_csa32  sc4_57_ ( .c(c3[56]), .b(s3[57]), .a(ain[57]),
1113
     .cout(pcout[57]), .sum(psum[57]));
1114
mul_csa32  sc4_56_ ( .c(c3[55]), .b(s3[56]), .a(ain[56]),
1115
     .cout(pcout[56]), .sum(psum[56]));
1116
mul_csa32  sc4_55_ ( .c(c3[54]), .b(s3[55]), .a(ain[55]),
1117
     .cout(pcout[55]), .sum(psum[55]));
1118
mul_csa32  sc4_54_ ( .c(c3[53]), .b(s3[54]), .a(ain[54]),
1119
     .cout(pcout[54]), .sum(psum[54]));
1120
mul_csa32  sc4_53_ ( .c(c3[52]), .b(s3[53]), .a(ain[53]),
1121
     .cout(pcout[53]), .sum(psum[53]));
1122
mul_csa32  sc4_52_ ( .c(c3[51]), .b(s3[52]), .a(ain[52]),
1123
     .cout(pcout[52]), .sum(psum[52]));
1124
mul_csa32  sc4_51_ ( .c(c3[50]), .b(s3[51]), .a(ain[51]),
1125
     .cout(pcout[51]), .sum(psum[51]));
1126
mul_csa32  sc4_50_ ( .c(c3[49]), .b(s3[50]), .a(ain[50]),
1127
     .cout(pcout[50]), .sum(psum[50]));
1128
mul_csa32  sc4_49_ ( .c(c3[48]), .b(s3[49]), .a(ain[49]),
1129
     .cout(pcout[49]), .sum(psum[49]));
1130
mul_csa32  sc4_48_ ( .c(c3[47]), .b(s3[48]), .a(ain[48]),
1131
     .cout(pcout[48]), .sum(psum[48]));
1132
mul_csa32  sc4_47_ ( .c(c3[46]), .b(s3[47]), .a(ain[47]),
1133
     .cout(pcout[47]), .sum(psum[47]));
1134
mul_csa32  sc4_46_ ( .c(c3[45]), .b(s3[46]), .a(ain[46]),
1135
     .cout(pcout[46]), .sum(psum[46]));
1136
mul_csa32  sc4_45_ ( .c(c3[44]), .b(s3[45]), .a(ain[45]),
1137
     .cout(pcout[45]), .sum(psum[45]));
1138
mul_csa32  sc4_44_ ( .c(c3[43]), .b(s3[44]), .a(ain[44]),
1139
     .cout(pcout[44]), .sum(psum[44]));
1140
mul_csa32  sc4_43_ ( .c(c3[42]), .b(s3[43]), .a(ain[43]),
1141
     .cout(pcout[43]), .sum(psum[43]));
1142
mul_csa32  sc4_42_ ( .c(c3[41]), .b(s3[42]), .a(ain[42]),
1143
     .cout(pcout[42]), .sum(psum[42]));
1144
mul_csa32  sc4_41_ ( .c(c3[40]), .b(s3[41]), .a(ain[41]),
1145
     .cout(pcout[41]), .sum(psum[41]));
1146
mul_csa32  sc4_40_ ( .c(c3[39]), .b(s3[40]), .a(ain[40]),
1147
     .cout(pcout[40]), .sum(psum[40]));
1148
mul_csa32  sc4_39_ ( .c(c3[38]), .b(s3[39]), .a(ain[39]),
1149
     .cout(pcout[39]), .sum(psum[39]));
1150
mul_csa32  sc4_38_ ( .c(c3[37]), .b(s3[38]), .a(ain[38]),
1151
     .cout(pcout[38]), .sum(psum[38]));
1152
mul_csa32  sc4_37_ ( .c(c3[36]), .b(s3[37]), .a(ain[37]),
1153
     .cout(pcout[37]), .sum(psum[37]));
1154
mul_csa32  sc4_36_ ( .c(c3[35]), .b(s3[36]), .a(ain[36]),
1155
     .cout(pcout[36]), .sum(psum[36]));
1156
mul_csa32  sc4_35_ ( .c(c3[34]), .b(s3[35]), .a(ain[35]),
1157
     .cout(pcout[35]), .sum(psum[35]));
1158
mul_csa32  sc4_34_ ( .c(c3[33]), .b(s3[34]), .a(ain[34]),
1159
     .cout(pcout[34]), .sum(psum[34]));
1160
mul_csa32  sc4_33_ ( .c(c3[32]), .b(s3[33]), .a(ain[33]),
1161
     .cout(pcout[33]), .sum(psum[33]));
1162
mul_csa32  sc4_32_ ( .c(c3[31]), .b(s3[32]), .a(ain[32]),
1163
     .cout(pcout[32]), .sum(psum[32]));
1164
mul_csa32  sc4_31_ ( .c(c3[30]), .b(s3[31]), .a(ain[31]),
1165
     .cout(pcout[31]), .sum(psum[31]));
1166
mul_csa32  sc4_30_ ( .c(c3[29]), .b(s3[30]), .a(ain[30]),
1167
     .cout(pcout[30]), .sum(psum[30]));
1168
mul_csa32  sc4_29_ ( .c(c3[28]), .b(s3[29]), .a(ain[29]),
1169
     .cout(pcout[29]), .sum(psum[29]));
1170
mul_csa32  sc4_28_ ( .c(c3[27]), .b(s3[28]), .a(ain[28]),
1171
     .cout(pcout[28]), .sum(psum[28]));
1172
mul_csa32  sc4_27_ ( .c(c3[26]), .b(s3[27]), .a(ain[27]),
1173
     .cout(pcout[27]), .sum(psum[27]));
1174
mul_csa32  sc4_26_ ( .c(c3[25]), .b(s3[26]), .a(ain[26]),
1175
     .cout(pcout[26]), .sum(psum[26]));
1176
mul_csa32  sc4_25_ ( .c(c3[24]), .b(s3[25]), .a(ain[25]),
1177
     .cout(pcout[25]), .sum(psum[25]));
1178
mul_csa32  sc4_24_ ( .c(c3[23]), .b(s3[24]), .a(ain[24]),
1179
     .cout(pcout[24]), .sum(psum[24]));
1180
mul_csa32  sc4_23_ ( .c(c3[22]), .b(s3[23]), .a(ain[23]),
1181
     .cout(pcout[23]), .sum(psum[23]));
1182
mul_csa32  sc4_22_ ( .c(c3[21]), .b(s3[22]), .a(ain[22]),
1183
     .cout(pcout[22]), .sum(psum[22]));
1184
mul_csa32  sc4_21_ ( .c(c3[20]), .b(s3[21]), .a(ain[21]),
1185
     .cout(pcout[21]), .sum(psum[21]));
1186
mul_csa32  sc4_20_ ( .c(c3[19]), .b(s3[20]), .a(ain[20]),
1187
     .cout(pcout[20]), .sum(psum[20]));
1188
mul_csa32  sc4_96_ ( .c(c2[95]), .b(s2[96]), .a(ain[96]),
1189
     .cout(pcout[96]), .sum(psum[96]));
1190
mul_csa32  sc4_95_ ( .c(c2[94]), .b(s2[95]), .a(ain[95]),
1191
     .cout(pcout[95]), .sum(psum[95]));
1192
mul_csa32  sc4_94_ ( .c(c2[93]), .b(s2[94]), .a(ain[94]),
1193
     .cout(pcout[94]), .sum(psum[94]));
1194
mul_csa32  sc4_93_ ( .c(c2[92]), .b(s2[93]), .a(ain[93]),
1195
     .cout(pcout[93]), .sum(psum[93]));
1196
mul_csa32  sc4_92_ ( .c(c2[91]), .b(s2[92]), .a(ain[92]),
1197
     .cout(pcout[92]), .sum(psum[92]));
1198
mul_csa32  sc4_91_ ( .c(c2[90]), .b(s2[91]), .a(ain[91]),
1199
     .cout(pcout[91]), .sum(psum[91]));
1200
mul_csa32  sc4_90_ ( .c(c2[89]), .b(s2[90]), .a(ain[90]),
1201
     .cout(pcout[90]), .sum(psum[90]));
1202
mul_csa32  sc4_89_ ( .c(c2[88]), .b(s2[89]), .a(ain[89]),
1203
     .cout(pcout[89]), .sum(psum[89]));
1204
mul_csa32  sc4_88_ ( .c(c2[87]), .b(s2[88]), .a(ain[88]),
1205
     .cout(pcout[88]), .sum(psum[88]));
1206
mul_csa32  sc4_87_ ( .c(c2[86]), .b(s2[87]), .a(ain[87]),
1207
     .cout(pcout[87]), .sum(psum[87]));
1208
mul_csa32  sc4_86_ ( .c(c2[85]), .b(s2[86]), .a(ain[86]),
1209
     .cout(pcout[86]), .sum(psum[86]));
1210
mul_csa32  sc4_85_ ( .c(c2[84]), .b(s2[85]), .a(ain[85]),
1211
     .cout(pcout[85]), .sum(psum[85]));
1212
mul_csa32  sc4_84_ ( .c(c2[83]), .b(s2[84]), .a(ain[84]),
1213
     .cout(pcout[84]), .sum(psum[84]));
1214
mul_csa32  sc4_81_ ( .c(c3[80]), .b(s3[81]), .a(ain[81]),
1215
     .cout(pcout[81]), .sum(psum[81]));
1216
mul_csa32  sc4_80_ ( .c(c3[79]), .b(s3[80]), .a(ain[80]),
1217
     .cout(pcout[80]), .sum(psum[80]));
1218
mul_csa32  sc4_79_ ( .c(c3[78]), .b(s3[79]), .a(ain[79]),
1219
     .cout(pcout[79]), .sum(psum[79]));
1220
mul_csa32  sc4_78_ ( .c(c3[77]), .b(s3[78]), .a(ain[78]),
1221
     .cout(pcout[78]), .sum(psum[78]));
1222
mul_csa32  sc4_77_ ( .c(c3[76]), .b(s3[77]), .a(ain[77]),
1223
     .cout(pcout[77]), .sum(psum[77]));
1224
mul_csa32  sc4_76_ ( .c(c3[75]), .b(s3[76]), .a(ain[76]),
1225
     .cout(pcout[76]), .sum(psum[76]));
1226
mul_csa32  sc4_75_ ( .c(c3[74]), .b(s3[75]), .a(ain[75]),
1227
     .cout(pcout[75]), .sum(psum[75]));
1228
mul_csa32  sc4_74_ ( .c(c3[73]), .b(s3[74]), .a(ain[74]),
1229
     .cout(pcout[74]), .sum(psum[74]));
1230
mul_csa32  sc4_73_ ( .c(c3[72]), .b(s3[73]), .a(ain[73]),
1231
     .cout(pcout[73]), .sum(psum[73]));
1232
mul_csa32  sc4_72_ ( .c(c3[71]), .b(s3[72]), .a(ain[72]),
1233
     .cout(pcout[72]), .sum(psum[72]));
1234
mul_csa32  sc4_71_ ( .c(c3[70]), .b(s3[71]), .a(ain[71]),
1235
     .cout(pcout[71]), .sum(psum[71]));
1236
mul_csa32  sc4_70_ ( .c(c3[69]), .b(s3[70]), .a(ain[70]),
1237
     .cout(pcout[70]), .sum(psum[70]));
1238
mul_csa32  sc4_69_ ( .c(c3[68]), .b(s3[69]), .a(ain[69]),
1239
     .cout(pcout[69]), .sum(psum[69]));
1240
mul_csa32  acc_4_ ( .c(c2[3]), .sum(psum[4]), .cout(pcout[4]),
1241
     .a(ain[4]), .b(s2[4]));
1242
mul_csa32  acc_3_ ( .c(c2[2]), .sum(psum[3]), .cout(pcout[3]),
1243
     .a(ain[3]), .b(s2[3]));
1244
mul_csa32  acc_2_ ( .c(c2[1]), .sum(psum[2]), .cout(pcout[2]),
1245
     .a(ain[2]), .b(s2[2]));
1246
mul_csa32  acc_1_ ( .c(c2[0]), .sum(psum[1]), .cout(pcout[1]),
1247
     .a(ain[1]), .b(s2[1]));
1248
mul_csa32  sc3_97_ ( .c(c2[96]), .sum(psum[97]), .cout(pcout[97]),
1249
     .a(a1s[81]), .b(a1c[80]));
1250
mul_csa32  sc1_19_ ( .c(a1s[3]), .b(pc[50]), .a(ps[51]),
1251
     .cout(c1[19]), .sum(s1[19]));
1252
mul_csa32  sc1_18_ ( .c(a1s[2]), .b(pc[49]), .a(ps[50]),
1253
     .cout(c1[18]), .sum(s1[18]));
1254
mul_csa32  sc1_17_ ( .c(a1s[1]), .b(pc[48]), .a(ps[49]),
1255
     .cout(c1[17]), .sum(s1[17]));
1256
mul_csa32  sc1_16_ ( .c(a1s[0]), .b(pc[47]), .a(ps[48]),
1257
     .cout(c1[16]), .sum(s1[16]));
1258
mul_csa32  sc1_15_ ( .c(1'b0), .b(pc[46]), .a(ps[47]),
1259
     .cout(c1[15]), .sum(s1[15]));
1260
mul_csa32  sc4_83_ ( .c(c2[82]), .b(s2[83]), .a(ain[83]),
1261
     .cout(pcout[83]), .sum(psum[83]));
1262
mul_csa32  sc2_83_ ( .c(c1[82]), .b(a1c[66]), .a(a1s[67]),
1263
     .cout(c2[83]), .sum(s2[83]));
1264
mul_csa32  sc2_19_ ( .c(a0c[18]), .b(a0s[19]), .a(s1[19]),
1265
     .cout(c2[19]), .sum(s2[19]));
1266
mul_csa32  sc2_18_ ( .c(a0c[17]), .b(a0s[18]), .a(s1[18]),
1267
     .cout(c2[18]), .sum(s2[18]));
1268
mul_csa32  sc2_17_ ( .c(a0c[16]), .b(a0s[17]), .a(s1[17]),
1269
     .cout(c2[17]), .sum(s2[17]));
1270
mul_csa32  sc2_16_ ( .c(a0c[15]), .b(a0s[16]), .a(s1[16]),
1271
     .cout(c2[16]), .sum(s2[16]));
1272
mul_csa32  sc2_15_ ( .c(a0c[14]), .b(a0s[15]), .a(s1[15]),
1273
     .cout(c2[15]), .sum(s2[15]));
1274
mul_csa32  sc1_81_ ( .c(a0s[81]), .b(a1c[64]), .a(a1s[65]),
1275
     .cout(c1[81]), .sum(s1[81]));
1276
mul_csa32  sc1_80_ ( .c(a0s[80]), .b(a1c[63]), .a(a1s[64]),
1277
     .cout(c1[80]), .sum(s1[80]));
1278
mul_csa32  sc1_79_ ( .c(a0s[79]), .b(a1c[62]), .a(a1s[63]),
1279
     .cout(c1[79]), .sum(s1[79]));
1280
mul_csa32  sc1_78_ ( .c(a0s[78]), .b(a1c[61]), .a(a1s[62]),
1281
     .cout(c1[78]), .sum(s1[78]));
1282
mul_csa32  sc1_77_ ( .c(a0s[77]), .b(a1c[60]), .a(a1s[61]),
1283
     .cout(c1[77]), .sum(s1[77]));
1284
mul_csa32  sc1_76_ ( .c(a0s[76]), .b(a1c[59]), .a(a1s[60]),
1285
     .cout(c1[76]), .sum(s1[76]));
1286
mul_csa32  sc1_75_ ( .c(a0s[75]), .b(a1c[58]), .a(a1s[59]),
1287
     .cout(c1[75]), .sum(s1[75]));
1288
mul_csa32  sc1_74_ ( .c(a0s[74]), .b(a1c[57]), .a(a1s[58]),
1289
     .cout(c1[74]), .sum(s1[74]));
1290
mul_csa32  sc1_73_ ( .c(a0s[73]), .b(a1c[56]), .a(a1s[57]),
1291
     .cout(c1[73]), .sum(s1[73]));
1292
mul_csa32  sc1_72_ ( .c(a0s[72]), .b(a1c[55]), .a(a1s[56]),
1293
     .cout(c1[72]), .sum(s1[72]));
1294
mul_csa32  sc1_71_ ( .c(a0s[71]), .b(a1c[54]), .a(a1s[55]),
1295
     .cout(c1[71]), .sum(s1[71]));
1296
mul_csa32  sc1_70_ ( .c(a0s[70]), .b(a1c[53]), .a(a1s[54]),
1297
     .cout(c1[70]), .sum(s1[70]));
1298
mul_csa32  sc1_69_ ( .c(a0s[69]), .b(a1c[52]), .a(a1s[53]),
1299
     .cout(c1[69]), .sum(s1[69]));
1300
mul_csa32  sc1_68_ ( .c(a0s[68]), .b(a1c[51]), .a(a1s[52]),
1301
     .cout(c1[68]), .sum(s1[68]));
1302
mul_csa32  sc3_19_ ( .c(c2[18]), .b(c1[18]), .a(s2[19]),
1303
     .cout(c3[19]), .sum(s3[19]));
1304
mul_csa32  sc3_18_ ( .c(c2[17]), .b(c1[17]), .a(s2[18]),
1305
     .cout(c3[18]), .sum(s3[18]));
1306
mul_csa32  sc3_17_ ( .c(c2[16]), .b(c1[16]), .a(s2[17]),
1307
     .cout(c3[17]), .sum(s3[17]));
1308
mul_csa32  sc3_16_ ( .c(c2[15]), .b(c1[15]), .a(s2[16]),
1309
     .cout(c3[16]), .sum(s3[16]));
1310
mul_csa32  sc3_15_ ( .c(c2[14]), .b(c1[14]), .a(s2[15]),
1311
     .cout(c3[15]), .sum(s3[15]));
1312
mul_csa32  sc1_82_ ( .c(a0c[81]), .b(a1c[65]), .a(a1s[66]),
1313
     .cout(c1[82]), .sum(s1[82]));
1314
mul_csa32  acc_14_ ( .c(c2[13]), .sum(psum[14]), .cout(pcout[14]),
1315
     .a(ain[14]), .b(s2[14]));
1316
mul_csa32  acc_13_ ( .c(c2[12]), .sum(psum[13]), .cout(pcout[13]),
1317
     .a(ain[13]), .b(s2[13]));
1318
mul_csa32  acc_12_ ( .c(c2[11]), .sum(psum[12]), .cout(pcout[12]),
1319
     .a(ain[12]), .b(s2[12]));
1320
mul_csa32  acc_11_ ( .c(c2[10]), .sum(psum[11]), .cout(pcout[11]),
1321
     .a(ain[11]), .b(s2[11]));
1322
mul_csa32  acc_10_ ( .c(c2[9]), .sum(psum[10]), .cout(pcout[10]),
1323
     .a(ain[10]), .b(s2[10]));
1324
mul_csa32  acc_9_ ( .c(c2[8]), .sum(psum[9]), .cout(pcout[9]),
1325
     .a(ain[9]), .b(s2[9]));
1326
mul_csa32  acc_8_ ( .c(c2[7]), .sum(psum[8]), .cout(pcout[8]),
1327
     .a(ain[8]), .b(s2[8]));
1328
mul_csa32  acc_7_ ( .c(c2[6]), .sum(psum[7]), .cout(pcout[7]),
1329
     .a(ain[7]), .b(s2[7]));
1330
mul_csa32  acc_6_ ( .c(c2[5]), .sum(psum[6]), .cout(pcout[6]),
1331
     .a(ain[6]), .b(s2[6]));
1332
mul_csa32  acc_5_ ( .c(c2[4]), .sum(psum[5]), .cout(pcout[5]),
1333
     .a(ain[5]), .b(s2[5]));
1334
mul_csa32  sc2_67_ ( .c(a0c[66]), .b(c1[66]), .a(a0s[67]),
1335
     .cout(c2[67]), .sum(s2[67]));
1336
mul_csa32  sc1_14_ ( .c(a0s[14]), .b(pc[45]), .a(ps[46]),
1337
     .cout(c1[14]), .sum(s1[14]));
1338
mul_csa32  sc1_13_ ( .c(a0s[13]), .b(pc[44]), .a(ps[45]),
1339
     .cout(c1[13]), .sum(s1[13]));
1340
mul_csa32  sc1_12_ ( .c(a0s[12]), .b(pc[43]), .a(ps[44]),
1341
     .cout(c1[12]), .sum(s1[12]));
1342
mul_csa32  sc1_11_ ( .c(a0s[11]), .b(pc[42]), .a(ps[43]),
1343
     .cout(c1[11]), .sum(s1[11]));
1344
mul_csa32  sc1_10_ ( .c(a0s[10]), .b(pc[41]), .a(ps[42]),
1345
     .cout(c1[10]), .sum(s1[10]));
1346
mul_csa32  sc1_9_ ( .c(a0s[9]), .b(pc[40]), .a(ps[41]), .cout(c1[9]),
1347
     .sum(s1[9]));
1348
mul_csa32  sc1_8_ ( .c(a0s[8]), .b(pc[39]), .a(ps[40]), .cout(c1[8]),
1349
     .sum(s1[8]));
1350
mul_csa32  sc1_7_ ( .c(a0s[7]), .b(pc[38]), .a(ps[39]), .cout(c1[7]),
1351
     .sum(s1[7]));
1352
mul_csa32  sc1_6_ ( .c(a0s[6]), .b(pc[37]), .a(ps[38]), .cout(c1[6]),
1353
     .sum(s1[6]));
1354
mul_csa32  sc1_5_ ( .c(a0s[5]), .b(pc[36]), .a(ps[37]), .cout(c1[5]),
1355
     .sum(s1[5]));
1356
mul_csa32  sc2_14_ ( .c(a0c[13]), .b(c1[13]), .a(s1[14]),
1357
     .cout(c2[14]), .sum(s2[14]));
1358
mul_csa32  sc2_13_ ( .c(a0c[12]), .b(c1[12]), .a(s1[13]),
1359
     .cout(c2[13]), .sum(s2[13]));
1360
mul_csa32  sc2_12_ ( .c(a0c[11]), .b(c1[11]), .a(s1[12]),
1361
     .cout(c2[12]), .sum(s2[12]));
1362
mul_csa32  sc2_11_ ( .c(a0c[10]), .b(c1[10]), .a(s1[11]),
1363
     .cout(c2[11]), .sum(s2[11]));
1364
mul_csa32  sc2_10_ ( .c(a0c[9]), .b(c1[9]), .a(s1[10]),
1365
     .cout(c2[10]), .sum(s2[10]));
1366
mul_csa32  sc2_9_ ( .c(a0c[8]), .b(c1[8]), .a(s1[9]), .cout(c2[9]),
1367
     .sum(s2[9]));
1368
mul_csa32  sc2_8_ ( .c(a0c[7]), .b(c1[7]), .a(s1[8]), .cout(c2[8]),
1369
     .sum(s2[8]));
1370
mul_csa32  sc2_7_ ( .c(a0c[6]), .b(c1[6]), .a(s1[7]), .cout(c2[7]),
1371
     .sum(s2[7]));
1372
mul_csa32  sc2_6_ ( .c(a0c[5]), .b(c1[5]), .a(s1[6]), .cout(c2[6]),
1373
     .sum(s2[6]));
1374
mul_csa32  sc2_5_ ( .c(a0c[4]), .b(c1[4]), .a(s1[5]), .cout(c2[5]),
1375
     .sum(s2[5]));
1376
mul_csa32  sc2_82_ ( .c(c2[81]), .b(c1[81]), .a(s1[82]),
1377
     .cout(c2[82]), .sum(s2[82]));
1378
mul_csa32  sc1_4_ ( .c(a0s[4]), .b(pc[35]), .a(ps[36]), .cout(c1[4]),
1379
     .sum(s1[4]));
1380
mul_csa32  sc1_3_ ( .c(a0s[3]), .b(pc[34]), .a(ps[35]), .cout(c1[3]),
1381
     .sum(s1[3]));
1382
mul_csa32  sc1_2_ ( .c(a0s[2]), .b(pc[33]), .a(ps[34]), .cout(c1[2]),
1383
     .sum(s1[2]));
1384
mul_csa32  sc1_1_ ( .c(a0s[1]), .b(pc[32]), .a(ps[33]), .cout(c1[1]),
1385
     .sum(s1[1]));
1386
mul_csa32  sc2_66_ ( .c(a0c[65]), .b(a0s[66]), .a(a1c[49]),
1387
     .cout(c2[66]), .sum(s2[66]));
1388
mul_csa32  sc2_65_ ( .c(a0c[64]), .b(a0s[65]), .a(a1c[48]),
1389
     .cout(c2[65]), .sum(s2[65]));
1390
mul_csa32  sc2_64_ ( .c(a0c[63]), .b(a0s[64]), .a(a1c[47]),
1391
     .cout(c2[64]), .sum(s2[64]));
1392
mul_csa32  sc2_63_ ( .c(a0c[62]), .b(a0s[63]), .a(a1c[46]),
1393
     .cout(c2[63]), .sum(s2[63]));
1394
mul_csa32  sc2_62_ ( .c(a0c[61]), .b(a0s[62]), .a(a1c[45]),
1395
     .cout(c2[62]), .sum(s2[62]));
1396
mul_csa32  sc2_61_ ( .c(a0c[60]), .b(a0s[61]), .a(a1c[44]),
1397
     .cout(c2[61]), .sum(s2[61]));
1398
mul_csa32  sc2_60_ ( .c(a0c[59]), .b(a0s[60]), .a(a1c[43]),
1399
     .cout(c2[60]), .sum(s2[60]));
1400
mul_csa32  sc2_59_ ( .c(a0c[58]), .b(a0s[59]), .a(a1c[42]),
1401
     .cout(c2[59]), .sum(s2[59]));
1402
mul_csa32  sc2_58_ ( .c(a0c[57]), .b(a0s[58]), .a(a1c[41]),
1403
     .cout(c2[58]), .sum(s2[58]));
1404
mul_csa32  sc2_57_ ( .c(a0c[56]), .b(a0s[57]), .a(a1c[40]),
1405
     .cout(c2[57]), .sum(s2[57]));
1406
mul_csa32  sc2_56_ ( .c(a0c[55]), .b(a0s[56]), .a(a1c[39]),
1407
     .cout(c2[56]), .sum(s2[56]));
1408
mul_csa32  sc2_55_ ( .c(a0c[54]), .b(a0s[55]), .a(a1c[38]),
1409
     .cout(c2[55]), .sum(s2[55]));
1410
mul_csa32  sc2_54_ ( .c(a0c[53]), .b(a0s[54]), .a(a1c[37]),
1411
     .cout(c2[54]), .sum(s2[54]));
1412
mul_csa32  sc2_53_ ( .c(a0c[52]), .b(a0s[53]), .a(a1c[36]),
1413
     .cout(c2[53]), .sum(s2[53]));
1414
mul_csa32  sc2_52_ ( .c(a0c[51]), .b(a0s[52]), .a(a1c[35]),
1415
     .cout(c2[52]), .sum(s2[52]));
1416
mul_csa32  sc2_51_ ( .c(a0c[50]), .b(a0s[51]), .a(a1c[34]),
1417
     .cout(c2[51]), .sum(s2[51]));
1418
mul_csa32  sc2_50_ ( .c(a0c[49]), .b(a0s[50]), .a(a1c[33]),
1419
     .cout(c2[50]), .sum(s2[50]));
1420
mul_csa32  sc2_49_ ( .c(a0c[48]), .b(a0s[49]), .a(a1c[32]),
1421
     .cout(c2[49]), .sum(s2[49]));
1422
mul_csa32  sc2_48_ ( .c(a0c[47]), .b(a0s[48]), .a(a1c[31]),
1423
     .cout(c2[48]), .sum(s2[48]));
1424
mul_csa32  sc2_47_ ( .c(a0c[46]), .b(a0s[47]), .a(a1c[30]),
1425
     .cout(c2[47]), .sum(s2[47]));
1426
mul_csa32  sc2_46_ ( .c(a0c[45]), .b(a0s[46]), .a(a1c[29]),
1427
     .cout(c2[46]), .sum(s2[46]));
1428
mul_csa32  sc2_45_ ( .c(a0c[44]), .b(a0s[45]), .a(a1c[28]),
1429
     .cout(c2[45]), .sum(s2[45]));
1430
mul_csa32  sc2_44_ ( .c(a0c[43]), .b(a0s[44]), .a(a1c[27]),
1431
     .cout(c2[44]), .sum(s2[44]));
1432
mul_csa32  sc2_43_ ( .c(a0c[42]), .b(a0s[43]), .a(a1c[26]),
1433
     .cout(c2[43]), .sum(s2[43]));
1434
mul_csa32  sc2_42_ ( .c(a0c[41]), .b(a0s[42]), .a(a1c[25]),
1435
     .cout(c2[42]), .sum(s2[42]));
1436
mul_csa32  sc2_41_ ( .c(a0c[40]), .b(a0s[41]), .a(a1c[24]),
1437
     .cout(c2[41]), .sum(s2[41]));
1438
mul_csa32  sc2_40_ ( .c(a0c[39]), .b(a0s[40]), .a(a1c[23]),
1439
     .cout(c2[40]), .sum(s2[40]));
1440
mul_csa32  sc2_39_ ( .c(a0c[38]), .b(a0s[39]), .a(a1c[22]),
1441
     .cout(c2[39]), .sum(s2[39]));
1442
mul_csa32  sc2_38_ ( .c(a0c[37]), .b(a0s[38]), .a(a1c[21]),
1443
     .cout(c2[38]), .sum(s2[38]));
1444
mul_csa32  sc2_37_ ( .c(a0c[36]), .b(a0s[37]), .a(a1c[20]),
1445
     .cout(c2[37]), .sum(s2[37]));
1446
mul_csa32  sc2_36_ ( .c(a0c[35]), .b(a0s[36]), .a(a1c[19]),
1447
     .cout(c2[36]), .sum(s2[36]));
1448
mul_csa32  sc2_35_ ( .c(a0c[34]), .b(a0s[35]), .a(a1c[18]),
1449
     .cout(c2[35]), .sum(s2[35]));
1450
mul_csa32  sc2_34_ ( .c(a0c[33]), .b(a0s[34]), .a(a1c[17]),
1451
     .cout(c2[34]), .sum(s2[34]));
1452
mul_csa32  sc2_33_ ( .c(a0c[32]), .b(a0s[33]), .a(a1c[16]),
1453
     .cout(c2[33]), .sum(s2[33]));
1454
mul_csa32  sc2_32_ ( .c(a0c[31]), .b(a0s[32]), .a(a1c[15]),
1455
     .cout(c2[32]), .sum(s2[32]));
1456
mul_csa32  sc2_31_ ( .c(a0c[30]), .b(a0s[31]), .a(a1c[14]),
1457
     .cout(c2[31]), .sum(s2[31]));
1458
mul_csa32  sc2_30_ ( .c(a0c[29]), .b(a0s[30]), .a(a1c[13]),
1459
     .cout(c2[30]), .sum(s2[30]));
1460
mul_csa32  sc2_29_ ( .c(a0c[28]), .b(a0s[29]), .a(a1c[12]),
1461
     .cout(c2[29]), .sum(s2[29]));
1462
mul_csa32  sc2_28_ ( .c(a0c[27]), .b(a0s[28]), .a(a1c[11]),
1463
     .cout(c2[28]), .sum(s2[28]));
1464
mul_csa32  sc2_27_ ( .c(a0c[26]), .b(a0s[27]), .a(a1c[10]),
1465
     .cout(c2[27]), .sum(s2[27]));
1466
mul_csa32  sc2_26_ ( .c(a0c[25]), .b(a0s[26]), .a(a1c[9]),
1467
     .cout(c2[26]), .sum(s2[26]));
1468
mul_csa32  sc2_25_ ( .c(a0c[24]), .b(a0s[25]), .a(a1c[8]),
1469
     .cout(c2[25]), .sum(s2[25]));
1470
mul_csa32  sc2_24_ ( .c(a0c[23]), .b(a0s[24]), .a(a1c[7]),
1471
     .cout(c2[24]), .sum(s2[24]));
1472
mul_csa32  sc2_23_ ( .c(a0c[22]), .b(a0s[23]), .a(a1c[6]),
1473
     .cout(c2[23]), .sum(s2[23]));
1474
mul_csa32  sc2_22_ ( .c(a0c[21]), .b(a0s[22]), .a(a1c[5]),
1475
     .cout(c2[22]), .sum(s2[22]));
1476
mul_csa32  sc2_21_ ( .c(a0c[20]), .b(a0s[21]), .a(a1c[4]),
1477
     .cout(c2[21]), .sum(s2[21]));
1478
mul_csa32  sc2_20_ ( .c(a0c[19]), .b(a0s[20]), .a(1'b0),
1479
     .cout(c2[20]), .sum(s2[20]));
1480
mul_csa32  sc1_66_ ( .c(a1s[50]), .b(pc[97]), .a(ps[98]),
1481
     .cout(c1[66]), .sum(s1[66]));
1482
mul_csa32  sc1_65_ ( .c(a1s[49]), .b(pc[96]), .a(ps[97]),
1483
     .cout(c1[65]), .sum(s1[65]));
1484
mul_csa32  sc1_64_ ( .c(a1s[48]), .b(pc[95]), .a(ps[96]),
1485
     .cout(c1[64]), .sum(s1[64]));
1486
mul_csa32  sc1_63_ ( .c(a1s[47]), .b(pc[94]), .a(ps[95]),
1487
     .cout(c1[63]), .sum(s1[63]));
1488
mul_csa32  sc1_62_ ( .c(a1s[46]), .b(pc[93]), .a(ps[94]),
1489
     .cout(c1[62]), .sum(s1[62]));
1490
mul_csa32  sc1_61_ ( .c(a1s[45]), .b(pc[92]), .a(ps[93]),
1491
     .cout(c1[61]), .sum(s1[61]));
1492
mul_csa32  sc1_60_ ( .c(a1s[44]), .b(pc[91]), .a(ps[92]),
1493
     .cout(c1[60]), .sum(s1[60]));
1494
mul_csa32  sc1_59_ ( .c(a1s[43]), .b(pc[90]), .a(ps[91]),
1495
     .cout(c1[59]), .sum(s1[59]));
1496
mul_csa32  sc1_58_ ( .c(a1s[42]), .b(pc[89]), .a(ps[90]),
1497
     .cout(c1[58]), .sum(s1[58]));
1498
mul_csa32  sc1_57_ ( .c(a1s[41]), .b(pc[88]), .a(ps[89]),
1499
     .cout(c1[57]), .sum(s1[57]));
1500
mul_csa32  sc1_56_ ( .c(a1s[40]), .b(pc[87]), .a(ps[88]),
1501
     .cout(c1[56]), .sum(s1[56]));
1502
mul_csa32  sc1_55_ ( .c(a1s[39]), .b(pc[86]), .a(ps[87]),
1503
     .cout(c1[55]), .sum(s1[55]));
1504
mul_csa32  sc1_54_ ( .c(a1s[38]), .b(pc[85]), .a(ps[86]),
1505
     .cout(c1[54]), .sum(s1[54]));
1506
mul_csa32  sc1_53_ ( .c(a1s[37]), .b(pc[84]), .a(ps[85]),
1507
     .cout(c1[53]), .sum(s1[53]));
1508
mul_csa32  sc1_52_ ( .c(a1s[36]), .b(pc[83]), .a(ps[84]),
1509
     .cout(c1[52]), .sum(s1[52]));
1510
mul_csa32  sc1_51_ ( .c(a1s[35]), .b(pc[82]), .a(ps[83]),
1511
     .cout(c1[51]), .sum(s1[51]));
1512
mul_csa32  sc1_50_ ( .c(a1s[34]), .b(pc[81]), .a(ps[82]),
1513
     .cout(c1[50]), .sum(s1[50]));
1514
mul_csa32  sc1_49_ ( .c(a1s[33]), .b(pc[80]), .a(ps[81]),
1515
     .cout(c1[49]), .sum(s1[49]));
1516
mul_csa32  sc1_48_ ( .c(a1s[32]), .b(pc[79]), .a(ps[80]),
1517
     .cout(c1[48]), .sum(s1[48]));
1518
mul_csa32  sc1_47_ ( .c(a1s[31]), .b(pc[78]), .a(ps[79]),
1519
     .cout(c1[47]), .sum(s1[47]));
1520
mul_csa32  sc1_46_ ( .c(a1s[30]), .b(pc[77]), .a(ps[78]),
1521
     .cout(c1[46]), .sum(s1[46]));
1522
mul_csa32  sc1_45_ ( .c(a1s[29]), .b(pc[76]), .a(ps[77]),
1523
     .cout(c1[45]), .sum(s1[45]));
1524
mul_csa32  sc1_44_ ( .c(a1s[28]), .b(pc[75]), .a(ps[76]),
1525
     .cout(c1[44]), .sum(s1[44]));
1526
mul_csa32  sc1_43_ ( .c(a1s[27]), .b(pc[74]), .a(ps[75]),
1527
     .cout(c1[43]), .sum(s1[43]));
1528
mul_csa32  sc1_42_ ( .c(a1s[26]), .b(pc[73]), .a(ps[74]),
1529
     .cout(c1[42]), .sum(s1[42]));
1530
mul_csa32  sc1_41_ ( .c(a1s[25]), .b(pc[72]), .a(ps[73]),
1531
     .cout(c1[41]), .sum(s1[41]));
1532
mul_csa32  sc1_40_ ( .c(a1s[24]), .b(pc[71]), .a(ps[72]),
1533
     .cout(c1[40]), .sum(s1[40]));
1534
mul_csa32  sc1_39_ ( .c(a1s[23]), .b(pc[70]), .a(ps[71]),
1535
     .cout(c1[39]), .sum(s1[39]));
1536
mul_csa32  sc1_38_ ( .c(a1s[22]), .b(pc[69]), .a(ps[70]),
1537
     .cout(c1[38]), .sum(s1[38]));
1538
mul_csa32  sc1_37_ ( .c(a1s[21]), .b(pc[68]), .a(ps[69]),
1539
     .cout(c1[37]), .sum(s1[37]));
1540
mul_csa32  sc1_36_ ( .c(a1s[20]), .b(pc[67]), .a(ps[68]),
1541
     .cout(c1[36]), .sum(s1[36]));
1542
mul_csa32  sc1_35_ ( .c(a1s[19]), .b(pc[66]), .a(ps[67]),
1543
     .cout(c1[35]), .sum(s1[35]));
1544
mul_csa32  sc1_34_ ( .c(a1s[18]), .b(pc[65]), .a(ps[66]),
1545
     .cout(c1[34]), .sum(s1[34]));
1546
mul_csa32  sc1_33_ ( .c(a1s[17]), .b(pc[64]), .a(ps[65]),
1547
     .cout(c1[33]), .sum(s1[33]));
1548
mul_csa32  sc1_32_ ( .c(a1s[16]), .b(pc[63]), .a(ps[64]),
1549
     .cout(c1[32]), .sum(s1[32]));
1550
mul_csa32  sc1_31_ ( .c(a1s[15]), .b(pc[62]), .a(ps[63]),
1551
     .cout(c1[31]), .sum(s1[31]));
1552
mul_csa32  sc1_30_ ( .c(a1s[14]), .b(pc[61]), .a(ps[62]),
1553
     .cout(c1[30]), .sum(s1[30]));
1554
mul_csa32  sc1_29_ ( .c(a1s[13]), .b(pc[60]), .a(ps[61]),
1555
     .cout(c1[29]), .sum(s1[29]));
1556
mul_csa32  sc1_28_ ( .c(a1s[12]), .b(pc[59]), .a(ps[60]),
1557
     .cout(c1[28]), .sum(s1[28]));
1558
mul_csa32  sc1_27_ ( .c(a1s[11]), .b(pc[58]), .a(ps[59]),
1559
     .cout(c1[27]), .sum(s1[27]));
1560
mul_csa32  sc1_26_ ( .c(a1s[10]), .b(pc[57]), .a(ps[58]),
1561
     .cout(c1[26]), .sum(s1[26]));
1562
mul_csa32  sc1_25_ ( .c(a1s[9]), .b(pc[56]), .a(ps[57]),
1563
     .cout(c1[25]), .sum(s1[25]));
1564
mul_csa32  sc1_24_ ( .c(a1s[8]), .b(pc[55]), .a(ps[56]),
1565
     .cout(c1[24]), .sum(s1[24]));
1566
mul_csa32  sc1_23_ ( .c(a1s[7]), .b(pc[54]), .a(ps[55]),
1567
     .cout(c1[23]), .sum(s1[23]));
1568
mul_csa32  sc1_22_ ( .c(a1s[6]), .b(pc[53]), .a(ps[54]),
1569
     .cout(c1[22]), .sum(s1[22]));
1570
mul_csa32  sc1_21_ ( .c(a1s[5]), .b(pc[52]), .a(ps[53]),
1571
     .cout(c1[21]), .sum(s1[21]));
1572
mul_csa32  sc1_20_ ( .c(a1s[4]), .b(pc[51]), .a(ps[52]),
1573
     .cout(c1[20]), .sum(s1[20]));
1574
mul_csa32  sc2_81_ ( .c(a0c[80]), .b(c1[80]), .a(s1[81]),
1575
     .cout(c2[81]), .sum(s2[81]));
1576
mul_csa32  sc2_80_ ( .c(a0c[79]), .b(c1[79]), .a(s1[80]),
1577
     .cout(c2[80]), .sum(s2[80]));
1578
mul_csa32  sc2_79_ ( .c(a0c[78]), .b(c1[78]), .a(s1[79]),
1579
     .cout(c2[79]), .sum(s2[79]));
1580
mul_csa32  sc2_78_ ( .c(a0c[77]), .b(c1[77]), .a(s1[78]),
1581
     .cout(c2[78]), .sum(s2[78]));
1582
mul_csa32  sc2_77_ ( .c(a0c[76]), .b(c1[76]), .a(s1[77]),
1583
     .cout(c2[77]), .sum(s2[77]));
1584
mul_csa32  sc2_76_ ( .c(a0c[75]), .b(c1[75]), .a(s1[76]),
1585
     .cout(c2[76]), .sum(s2[76]));
1586
mul_csa32  sc2_75_ ( .c(a0c[74]), .b(c1[74]), .a(s1[75]),
1587
     .cout(c2[75]), .sum(s2[75]));
1588
mul_csa32  sc2_74_ ( .c(a0c[73]), .b(c1[73]), .a(s1[74]),
1589
     .cout(c2[74]), .sum(s2[74]));
1590
mul_csa32  sc2_73_ ( .c(a0c[72]), .b(c1[72]), .a(s1[73]),
1591
     .cout(c2[73]), .sum(s2[73]));
1592
mul_csa32  sc2_72_ ( .c(a0c[71]), .b(c1[71]), .a(s1[72]),
1593
     .cout(c2[72]), .sum(s2[72]));
1594
mul_csa32  sc2_71_ ( .c(a0c[70]), .b(c1[70]), .a(s1[71]),
1595
     .cout(c2[71]), .sum(s2[71]));
1596
mul_csa32  sc2_70_ ( .c(a0c[69]), .b(c1[69]), .a(s1[70]),
1597
     .cout(c2[70]), .sum(s2[70]));
1598
mul_csa32  sc2_69_ ( .c(a0c[68]), .b(c1[68]), .a(s1[69]),
1599
     .cout(c2[69]), .sum(s2[69]));
1600
mul_csa32  sc2_68_ ( .c(a0c[67]), .b(c1[67]), .a(s1[68]),
1601
     .cout(c2[68]), .sum(s2[68]));
1602
mul_csa32  acc_19_ ( .c(c3[18]), .b(s3[19]), .a(ain[19]),
1603
     .cout(pcout[19]), .sum(psum[19]));
1604
mul_csa32  acc_18_ ( .c(c3[17]), .b(s3[18]), .a(ain[18]),
1605
     .cout(pcout[18]), .sum(psum[18]));
1606
mul_csa32  acc_17_ ( .c(c3[16]), .b(s3[17]), .a(ain[17]),
1607
     .cout(pcout[17]), .sum(psum[17]));
1608
mul_csa32  acc_16_ ( .c(c3[15]), .b(s3[16]), .a(ain[16]),
1609
     .cout(pcout[16]), .sum(psum[16]));
1610
mul_csa32  acc_15_ ( .c(1'b0), .b(s3[15]), .a(ain[15]),
1611
     .cout(pcout[15]), .sum(psum[15]));
1612
mul_csa32  sc1_0_ ( .c(a0s[0]), .sum(s1[0]), .cout(c1[0]),
1613
     .a(ps[32]), .b(pc[31]));
1614
mul_csa32  sc1_67_ ( .c(a1c[50]), .b(pc[98]), .a(a1s[51]),
1615
     .cout(c1[67]), .sum(s1[67]));
1616
mul_ha acc_0_ ( .sum(psum[0]), .cout(pcout[0]), .a(ain[0]),
1617
     .b(s2[0]));
1618
mul_ha sc3_98_ ( .sum(psum[98]), .cout(pcout[98]), .a(bot),
1619
     .b(a1c[81]));
1620
mul_ha sc2_96_ ( .b(a1c[79]), .a(a1s[80]), .cout(c2[96]),
1621
     .sum(s2[96]));
1622
mul_ha sc2_95_ ( .b(a1c[78]), .a(a1s[79]), .cout(c2[95]),
1623
     .sum(s2[95]));
1624
mul_ha sc2_94_ ( .b(a1c[77]), .a(a1s[78]), .cout(c2[94]),
1625
     .sum(s2[94]));
1626
mul_ha sc2_93_ ( .b(a1c[76]), .a(a1s[77]), .cout(c2[93]),
1627
     .sum(s2[93]));
1628
mul_ha sc2_92_ ( .b(a1c[75]), .a(a1s[76]), .cout(c2[92]),
1629
     .sum(s2[92]));
1630
mul_ha sc2_91_ ( .b(a1c[74]), .a(a1s[75]), .cout(c2[91]),
1631
     .sum(s2[91]));
1632
mul_ha sc2_90_ ( .b(a1c[73]), .a(a1s[74]), .cout(c2[90]),
1633
     .sum(s2[90]));
1634
mul_ha sc2_89_ ( .b(a1c[72]), .a(a1s[73]), .cout(c2[89]),
1635
     .sum(s2[89]));
1636
mul_ha sc2_88_ ( .b(a1c[71]), .a(a1s[72]), .cout(c2[88]),
1637
     .sum(s2[88]));
1638
mul_ha sc2_87_ ( .b(a1c[70]), .a(a1s[71]), .cout(c2[87]),
1639
     .sum(s2[87]));
1640
mul_ha sc2_86_ ( .b(a1c[69]), .a(a1s[70]), .cout(c2[86]),
1641
     .sum(s2[86]));
1642
mul_ha sc2_85_ ( .b(a1c[68]), .a(a1s[69]), .cout(c2[85]),
1643
     .sum(s2[85]));
1644
mul_ha sc2_84_ ( .b(a1c[67]), .a(a1s[68]), .cout(c2[84]),
1645
     .sum(s2[84]));
1646
mul_ha sc3_81_ ( .b(c2[80]), .a(s2[81]), .cout(c3[81]),
1647
     .sum(s3[81]));
1648
mul_ha sc3_80_ ( .b(c2[79]), .a(s2[80]), .cout(c3[80]),
1649
     .sum(s3[80]));
1650
mul_ha sc3_79_ ( .b(c2[78]), .a(s2[79]), .cout(c3[79]),
1651
     .sum(s3[79]));
1652
mul_ha sc3_78_ ( .b(c2[77]), .a(s2[78]), .cout(c3[78]),
1653
     .sum(s3[78]));
1654
mul_ha sc3_77_ ( .b(c2[76]), .a(s2[77]), .cout(c3[77]),
1655
     .sum(s3[77]));
1656
mul_ha sc3_76_ ( .b(c2[75]), .a(s2[76]), .cout(c3[76]),
1657
     .sum(s3[76]));
1658
mul_ha sc3_75_ ( .b(c2[74]), .a(s2[75]), .cout(c3[75]),
1659
     .sum(s3[75]));
1660
mul_ha sc3_74_ ( .b(c2[73]), .a(s2[74]), .cout(c3[74]),
1661
     .sum(s3[74]));
1662
mul_ha sc3_73_ ( .b(c2[72]), .a(s2[73]), .cout(c3[73]),
1663
     .sum(s3[73]));
1664
mul_ha sc3_72_ ( .b(c2[71]), .a(s2[72]), .cout(c3[72]),
1665
     .sum(s3[72]));
1666
mul_ha sc3_71_ ( .b(c2[70]), .a(s2[71]), .cout(c3[71]),
1667
     .sum(s3[71]));
1668
mul_ha sc3_70_ ( .b(c2[69]), .a(s2[70]), .cout(c3[70]),
1669
     .sum(s3[70]));
1670
mul_ha sc3_69_ ( .b(c2[68]), .a(s2[69]), .cout(c3[69]),
1671
     .sum(s3[69]));
1672
mul_ha accx2 ( .sum(psumx2), .cout(pcoutx2), .a(ainx2), .b(s1x2));
1673
mul_ha sc2_4_ ( .sum(s2[4]), .cout(c2[4]), .a(s1[4]), .b(c1[3]));
1674
mul_ha sc2_3_ ( .sum(s2[3]), .cout(c2[3]), .a(s1[3]), .b(c1[2]));
1675
mul_ha sc2_2_ ( .sum(s2[2]), .cout(c2[2]), .a(s1[2]), .b(c1[1]));
1676
mul_ha sc2_1_ ( .sum(s2[1]), .cout(c2[1]), .a(s1[1]), .b(c1[0]));
1677
mul_ha sc2_0_ ( .sum(s2[0]), .cout(c2[0]), .a(s1[0]), .b(c1x2));
1678
mul_ha sc1x2 ( .sum(s1x2), .cout(c1x2), .a(ps[31]), .b(pc[30]));
1679
 
1680
endmodule //mul_array2
1681
 
1682
module mul_csa32 (sum, cout, a, b, c);
1683
 
1684
output sum, cout;
1685
input a, b, c;
1686
 
1687
wire x, y0, y1, y2;
1688
 
1689
assign x = a ^ b;
1690
assign sum = c ^ x;
1691
 
1692
assign y0 = a & b ;
1693
assign y1 = a & c ;
1694
assign y2 = b & c ;
1695
 
1696
assign cout = y0 | y1 | y2 ;
1697
 
1698
endmodule //mul_csa32
1699
 
1700
module mul_csa42 (sum, carry, cout, a, b, c, d, cin);
1701
 
1702
output sum, carry, cout;
1703
input a, b, c, d, cin;
1704
 
1705
wire x, y, z;
1706
 
1707
assign x = a ^ b;
1708
assign y = c ^ d;
1709
assign z = x ^ y;
1710
 
1711
assign sum = z ^ cin ;
1712
 
1713
assign carry = (b & ~z) | (cin & z);
1714
 
1715
assign cout = (d & ~y) | (a & y);
1716
 
1717
endmodule // mul_csa42
1718
 
1719
module mul_ha ( cout, sum, a, b );
1720
output  cout, sum;
1721
input  a, b;
1722
 
1723
assign sum = a ^ b;
1724
assign cout = a & b ;
1725
 
1726
endmodule //mul_ha
1727
 
1728
module mul_negen ( n0, n1, b );
1729
output  n0, n1;
1730
input [2:0]  b;
1731
 
1732
assign n0 = b[2] & b[1] & ~b[0] ;
1733
assign n1 = b[2] & b[1] & b[0] ;
1734
 
1735
endmodule //mul_negen
1736
 
1737
module mul_ppgen3lsb4 (cout, p0_l, p1_l, sum, a, b0, b1 );
1738
 
1739
output  p0_l, p1_l;
1740
output [3:0]  sum;
1741
output [3:1]  cout;
1742
input [3:0]  a;
1743
input [2:0]  b0;
1744
input [2:0]  b1;
1745
 
1746
wire b0n, b0n_0, b0n_1, b1n_0, b1n_1;
1747
wire p0_0, p0_1, p0_2, p0_3, p1_2, p1_3;
1748
wire p0_l_0, p0_l_1, p0_l_2, p1_l_2;
1749
 
1750
assign b0n = b0n_1 | (b0n_0 & p0_0) ;
1751
assign sum[0] = b0n_0 ^ p0_0 ;
1752
 
1753
mul_negen p0n ( .b(b0[2:0]), .n1(b0n_1), .n0(b0n_0));
1754
mul_negen p1n ( .b(b1[2:0]), .n1(b1n_1), .n0(b1n_0));
1755
mul_csa32  sc1_2_ ( .c(b1n_0), .sum(sum[2]), .cout(cout[2]),
1756
     .a(p0_2), .b(p1_2));
1757
mul_csa32  sc1_3_ ( .c(b1n_1), .sum(sum[3]), .cout(cout[3]),
1758
     .a(p0_3), .b(p1_3));
1759
mul_ha sc1_1_ ( .sum(sum[1]), .cout(cout[1]), .a(p0_1),
1760
     .b(b0n));
1761
mul_ppgen p0_3_ ( .pm1_l(p0_l_2), .p_l(p0_l), .b(b0[2:0]), .a(a[3]),
1762
     .z(p0_3));
1763
mul_ppgen p1_3_ ( .pm1_l(p1_l_2), .p_l(p1_l), .b(b1[2:0]), .a(a[1]),
1764
     .z(p1_3));
1765
mul_ppgen p0_2_ ( .pm1_l(p0_l_1), .p_l(p0_l_2), .b(b0[2:0]),
1766
     .a(a[2]), .z(p0_2));
1767
mul_ppgen p0_1_ ( .pm1_l(p0_l_0), .p_l(p0_l_1), .b(b0[2:0]),
1768
     .a(a[1]), .z(p0_1));
1769
mul_ppgen p0_0_ ( .pm1_l(1'b1), .p_l(p0_l_0),
1770
     .b(b0[2:0]), .a(a[0]), .z(p0_0));
1771
mul_ppgen p1_2_ ( .pm1_l(1'b1), .p_l(p1_l_2),
1772
     .b(b1[2:0]), .a(a[0]), .z(p1_2));
1773
 
1774
endmodule // mul_ppgen3lsb4
1775
 
1776
module mul_ppgen3sign ( cout, sum, am1, am2, am3, am4, b0, b1, b2,
1777
     bot, head, p0m1_l, p1m1_l, p2m1_l );
1778
input  am1, am2, am3, am4;
1779
input  bot, head, p0m1_l, p1m1_l, p2m1_l;
1780
output [5:0]  sum;
1781
output [4:0]  cout;
1782
input [2:0]  b0;
1783
input [2:0]  b2;
1784
input [2:0]  b1;
1785
 
1786
wire net37, net42, net075, net088, net0117;
1787
wire net47, net073, net38, net0118, net078, net8, net15, net43, net48, net35;
1788
wire p2_l_67, p2_l_66, p2_l_65, p2_l_64;
1789
wire p1_l_65, p1_l_64;
1790
 
1791
assign sum[5] = bot & net075 ;
1792
assign net0117 = head & net088 ;
1793
assign net37 = ~net0117 ;
1794
assign net42 = head ^ net088 ;
1795
 
1796
mul_ppgensign p0_64_ ( .b(b0[2:0]), .z(net47), .p_l(net088),
1797
     .pm1_l(p0m1_l));
1798
mul_ppgensign p2_68_ ( .pm1_l(p2_l_67), .b(b2[2:0]), .z(net073),
1799
     .p_l(net075));
1800
mul_ppgensign p1_66_ ( .pm1_l(p1_l_65), .b(b1[2:0]), .z(net38),
1801
     .p_l(net0118));
1802
mul_ha sc1_68_ ( .b(net073), .a(1'b1), .cout(cout[4]),
1803
     .sum(sum[4]));
1804
mul_ppgen p2_67_ ( .pm1_l(p2_l_66), .b(b2[2:0]), .a(am1), .z(net078),
1805
     .p_l(p2_l_67));
1806
mul_ppgen p2_66_ ( .pm1_l(p2_l_65), .b(b2[2:0]), .a(am2), .z(net8),
1807
     .p_l(p2_l_66));
1808
mul_ppgen p2_65_ ( .pm1_l(p2_l_64), .p_l(p2_l_65), .b(b2[2:0]),
1809
     .a(am3), .z(net15));
1810
mul_ppgen p1_65_ ( .pm1_l(p1_l_64), .p_l(p1_l_65), .b(b1[2:0]),
1811
     .a(am1), .z(net43));
1812
mul_ppgen p1_64_ ( .pm1_l(p1m1_l), .p_l(p1_l_64), .b(b1[2:0]),
1813
     .a(am2), .z(net48));
1814
mul_ppgen p2_64_ ( .pm1_l(p2m1_l), .p_l(p2_l_64), .b(b2[2:0]),
1815
     .a(am4), .z(net35));
1816
mul_csa32  sc1_67_ ( .c(net078), .b(net0117), .a(net0118),
1817
     .cout(cout[3]), .sum(sum[3]));
1818
mul_csa32  sc1_66_ ( .c(net8), .b(net37), .a(net38), .cout(cout[2]),
1819
     .sum(sum[2]));
1820
mul_csa32  sc1_65_ ( .c(net15), .b(net42), .a(net43), .cout(cout[1]),
1821
     .sum(sum[1]));
1822
mul_csa32  sc1_64_ ( .c(net35), .b(net47), .a(net48), .cout(cout[0]),
1823
     .sum(sum[0]));
1824
 
1825
endmodule //mul_ppgen3sign
1826
 
1827
module mul_ppgen3 ( cout, p0_l, p1_l, p2_l, sum, am2, am4,
1828
     a, b0, b1, b2, p0m1_l, p1m1_l, p2m1_l );
1829
output  cout, p0_l, p1_l, p2_l, sum;
1830
input  am2, am4;
1831
input  a, p0m1_l, p1m1_l, p2m1_l;
1832
input [2:0]  b0;
1833
input [2:0]  b2;
1834
input [2:0]  b1;
1835
 
1836
wire net046, net32, net043;
1837
 
1838
mul_csa32  sc1 ( .a(net046), .b(net32), .cout(cout), .sum(sum),
1839
     .c(net043));
1840
mul_ppgen p2 ( .pm1_l(p2m1_l), .p_l(p2_l), .b(b2[2:0]), .a(am4),
1841
     .z(net043));
1842
mul_ppgen p1 ( .pm1_l(p1m1_l), .p_l(p1_l), .b(b1[2:0]), .a(am2),
1843
     .z(net046));
1844
mul_ppgen p0 ( .pm1_l(p0m1_l), .p_l(p0_l), .b(b0[2:0]), .a(a),
1845
     .z(net32));
1846
 
1847
endmodule // mul_ppgen3
1848
 
1849
module mul_ppgenrow3 ( cout, sum, a, b0, b1, b2, bot, head );
1850
 
1851
output [68:1]  cout;
1852
output [69:0]  sum;
1853
input [63:0]  a;
1854
input [2:0]  b2;
1855
input [2:0]  b0;
1856
input [2:0]  b1;
1857
input  bot, head;
1858
 
1859
// Buses in the design
1860
wire  [63:4]  p2_l;
1861
wire  [63:3]  p1_l;
1862
wire  [63:3]  p0_l;
1863
 
1864
mul_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]));
1868
mul_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]));
1873
mul_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]));
1878
mul_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]));
1883
mul_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]));
1888
mul_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]));
1893
mul_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]));
1898
mul_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]));
1903
mul_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]));
1908
mul_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]));
1913
mul_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]));
1918
mul_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]));
1923
mul_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]));
1928
mul_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]));
1933
mul_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]));
1938
mul_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]));
1943
mul_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]));
1948
mul_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]));
1953
mul_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]));
1958
mul_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]));
1963
mul_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]));
1968
mul_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]));
1973
mul_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]));
1978
mul_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]));
1983
mul_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]));
1988
mul_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]));
1993
mul_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]));
1998
mul_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]));
2003
mul_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]));
2008
mul_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]));
2013
mul_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]));
2018
mul_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]));
2023
mul_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]));
2028
mul_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]));
2033
mul_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]));
2038
mul_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]));
2043
mul_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]));
2048
mul_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]));
2053
mul_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]));
2058
mul_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]));
2063
mul_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]));
2068
mul_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]));
2073
mul_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]));
2078
mul_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]));
2083
mul_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]));
2088
mul_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]));
2093
mul_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]));
2098
mul_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]));
2103
mul_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]));
2108
mul_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]));
2113
mul_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]));
2118
mul_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]));
2123
mul_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]));
2128
mul_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]));
2133
mul_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]));
2138
mul_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]));
2143
mul_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]));
2148
mul_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]));
2153
mul_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]));
2158
mul_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]));
2163
mul_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]));
2168
mul_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
 
2171
endmodule //mul_ppgenrow3
2172
 
2173
module mul_ppgensign ( p_l, z, b, pm1_l );
2174
output  p_l, z;
2175
input  pm1_l;
2176
input [2:0]  b;
2177
 
2178
assign p_l = ~(b[1] & b[2]);
2179
assign z = b[0] ? ~pm1_l : ~p_l ;
2180
 
2181
endmodule //mul_ppgensign
2182
 
2183
module mul_ppgen ( p_l, z, a, b, pm1_l );
2184
output  p_l, z;
2185
input  a, pm1_l;
2186
input [2:0]  b;
2187
 
2188
assign p_l = ~((a ^ b[2]) & b[1]) ;
2189
assign z = b[0] ? ~pm1_l : ~p_l ;
2190
 
2191
endmodule //mul_ppgen
2192
 
2193
module mul_mux2 ( z, d0, d1, s );
2194
output  z;
2195
input  d0, d1, s;
2196
 
2197
assign z = s ? d1 : d0 ;
2198
 
2199
endmodule // mul_mux2 
2200
 
2201
module 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
        );
2208
input           head;           // begin of the MUL operation
2209
input   [63:0]   b_in;
2210
input           clk, se, si, mul_step, tm_l;
2211
output  [2:0]    b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15;
2212
output          b16;
2213
output          so;
2214
 
2215
wire  [63:31]   b;
2216
wire [2:0]       b0_in0, b1_in0,  b2_in0,  b3_in0,  b4_in0,  b5_in0,  b6_in0,  b7_in0 ;
2217
wire [2:0]       b8_in0, b9_in0, b10_in0, b11_in0, b12_in0, b13_in0, b14_in0, b15_in0 ;
2218
wire [2:0]       b0_in1, b1_in1,  b2_in1,  b3_in1,  b4_in1,  b5_in1,  b6_in1,  b7_in1 ;
2219
wire [2:0]       b8_in1, b9_in1, b10_in1, b11_in1, b12_in1, b13_in1, b14_in1, b15_in1 ;
2220
wire            b16_in1;
2221
 
2222
wire [2:0]       b0_outmx, b1_outmx, b2_outmx, b3_outmx, b4_outmx, b5_outmx, b6_outmx;
2223
wire [2:0]       b7_outmx, b8_outmx, b9_outmx, b10_outmx, b11_outmx, b12_outmx, b13_outmx;
2224
wire [2:0]       b14_outmx, b15_outmx;
2225
wire            b16_outmx;
2226
wire            clk_enb0, clk_enb1;
2227
 
2228
 
2229
  mul_bodec             encode0_a(
2230
                                .x  (1'b0),
2231
                                .b  (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
                                .x  (b_in[15]),
2245
                                .b  (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
                                .x  (b[31]),
2270
                                .b  (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
                                .x  (b[47]),
2284
                                .b  (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());
2401
endmodule //mul_booth
2402
 
2403
module mul_bodec (x, b,
2404
        b0, b1, b2, b3, b4, b5, b6, b7);
2405
 
2406
input   x;
2407
input   [15:0]   b;
2408
output  [2:0]    b0, b1, b2, b3, b4, b5, b6, b7;
2409
 
2410
assign b0[2] = b[1];
2411
assign b0[1] = ~((b[1] & b[0] & x) | (~b[1] & ~b[0] & ~x)) ;
2412
assign b0[0] = (~b[1] & b[0] & x) | (b[1] & ~b[0] & ~x) ;
2413
 
2414
assign b1[2] = b[3];
2415
assign b1[1] = ~((b[3] & b[2] & b[1]) | (~b[3] & ~b[2] & ~b[1])) ;
2416
assign b1[0] = (~b[3] & b[2] & b[1]) | (b[3] & ~b[2] & ~b[1]) ;
2417
 
2418
assign b2[2] = b[5];
2419
assign b2[1] = ~((b[5] & b[4] & b[3]) | (~b[5] & ~b[4] & ~b[3])) ;
2420
assign b2[0] = (~b[5] & b[4] & b[3]) | (b[5] & ~b[4] & ~b[3]) ;
2421
 
2422
assign b3[2] = b[7] ;
2423
assign b3[1] = ~((b[7] & b[6] & b[5]) | (~b[7] & ~b[6] & ~b[5])) ;
2424
assign b3[0] = (~b[7] & b[6] & b[5]) | (b[7] & ~b[6] & ~b[5]) ;
2425
 
2426
assign b4[2] = b[9] ;
2427
assign b4[1] = ~((b[9] & b[8] & b[7]) | (~b[9] & ~b[8] & ~b[7])) ;
2428
assign b4[0] = (~b[9] & b[8] & b[7]) | (b[9] & ~b[8] & ~b[7]) ;
2429
 
2430
assign b5[2] = b[11] ;
2431
assign b5[1] = ~((b[11] & b[10] & b[9]) | (~b[11] & ~b[10] & ~b[9])) ;
2432
assign b5[0] = (~b[11] & b[10] & b[9]) | (b[11] & ~b[10] & ~b[9]) ;
2433
 
2434
assign b6[2] = b[13] ;
2435
assign b6[1] = ~((b[13] & b[12] & b[11]) | (~b[13] & ~b[12] & ~b[11])) ;
2436
assign b6[0] = (~b[13] & b[12] & b[11]) | (b[13] & ~b[12] & ~b[11]) ;
2437
 
2438
assign b7[2] = b[15] ;
2439
assign b7[1] = ~((b[15] & b[14] & b[13]) | (~b[15] & ~b[14] & ~b[13])) ;
2440
assign b7[0] = (~b[15] & b[14] & b[13]) | (b[15] & ~b[14] & ~b[13]) ;
2441
 
2442
endmodule // mul_bodec
2443
`endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.