Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / fgu / rtl / fgu_fpy_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: fgu_fpy_dp.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module fgu_fpy_dp (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 spc_aclk,
40 spc_bclk,
41 tcu_scan_en,
42 tcu_dectest,
43 tcu_muxtest,
44 scan_out,
45 mul_clken_rep0,
46 mul_clken_rep01,
47 spu_fgu_rs1_e,
48 spu_fgu_rs2_e,
49 fad_rs1_fmt_fx1_rep0,
50 fad_rs2_fmt_fx1_rep0,
51 fad_rs2_fmt_fx1_rep1,
52 fac_xr_mode_fx1,
53 fac_rs1_sel_fx1,
54 fac_rs2_sel_fx1,
55 fac_8x16_rnd_fx3,
56 fac_scff_sel_fx3,
57 fac_accum_sel_fx3,
58 fac_result_sel_fx4,
59 fac_ma_result_en_fx4,
60 fgu_mul_result_fx5,
61 fpy_sticky_dp_fx5,
62 fpy_sticky_sp_fx5,
63 fpy_fp_result_fx4_b63,
64 fpy_xicc_z_fx5,
65 fgu_accum_b0_fx5);
66wire stop;
67wire test;
68wire se;
69wire pce_ov;
70wire siclk;
71wire soclk;
72wire i_spu_rs1_ff_scanin;
73wire i_spu_rs1_ff_scanout;
74wire [63:0] spu_fgu_rs1_fx1;
75wire i_spu_rs2_ff_scanin;
76wire i_spu_rs2_ff_scanout;
77wire [63:0] spu_fgu_rs2_fx1;
78wire [63:15] rs2_fx1_ebf;
79wire xr_mode_fx1_;
80wire [1:0] xr_mode_fx1_bf;
81wire tcu_muxtest_a_rep0;
82wire [63:0] ma_result_ff;
83wire [12:0] rs1_fmt_a0;
84wire [18:0] rs1_fmt_a1;
85wire [18:0] rs1_fmt_a2;
86wire [18:0] rs1_fmt_a3;
87wire [4:0] be00;
88wire [31:0] be_pout;
89wire [31:0] be_hout;
90wire [4:0] be01;
91wire [4:0] be02;
92wire [4:0] be03;
93wire [4:0] be04;
94wire [4:0] be05;
95wire [4:0] be06;
96wire [4:0] be07;
97wire [4:0] be08;
98wire [4:0] be09;
99wire [4:0] be10;
100wire [4:0] be11;
101wire [4:0] be12;
102wire [4:0] be13;
103wire [4:0] be14;
104wire [4:0] be15;
105wire [4:0] be16;
106wire [4:0] be17;
107wire [4:0] be18;
108wire [4:0] be19;
109wire [4:0] be20;
110wire [4:0] be21;
111wire [4:0] be22;
112wire [4:0] be23;
113wire [4:0] be24;
114wire [4:0] be25;
115wire [4:0] be26;
116wire [4:0] be27;
117wire [4:0] be28;
118wire [4:0] be29;
119wire [4:0] be30;
120wire [4:0] be31;
121wire [5:0] i_be32_unused;
122wire be32_b0;
123wire [64:0] rs2_3x_fx1;
124wire i_3x_ff_scanin;
125wire i_3x_ff_scanout;
126wire [64:0] rs2_3x_ff;
127wire [64:0] rs2_3x;
128wire i_a3_be_ff_scanin;
129wire i_a3_be_ff_scanout;
130wire a3_xr_mode_fx2_;
131wire [31:0] be_pout_ff;
132wire [4:0] be_ff08;
133wire [4:0] be_ff07;
134wire [4:0] be_ff06;
135wire [4:0] be_ff05;
136wire [4:0] be_ff04;
137wire [4:0] be_ff03;
138wire [4:0] be_ff02;
139wire [4:0] be_ff01;
140wire [4:0] be_ff00;
141wire [31:0] be_hout_ff;
142wire [63:15] rs2_fx1_ebf3;
143wire i_a3_rs2_ff_scanin;
144wire i_a3_rs2_ff_scanout;
145wire [63:0] a3_rs2_ff;
146wire [63:0] a3_rs2;
147wire [63:0] a3_rs2_;
148wire [67:0] bm00;
149wire [68:0] bm01;
150wire [70:2] bm02;
151wire [72:4] bm03;
152wire [74:6] bm04;
153wire [76:8] bm05;
154wire [78:10] bm06;
155wire [80:12] bm07;
156wire [82:14] bm08;
157wire [69:1] a3_csa1_1_c;
158wire [70:0] a3_csa1_1_s;
159wire [75:7] a3_csa1_2_c;
160wire [76:4] a3_csa1_2_s;
161wire [81:13] a3_csa1_3_c;
162wire [82:10] a3_csa1_3_s;
163wire [77:5] a3_csa2_1_c;
164wire [82:0] a3_csa2_1_s;
165wire [76:8] a3_csa2_2_c;
166wire [81:1] a3_csa2_2_s;
167wire a3_csa3_1_unused;
168wire [82:2] a3_csa3_1_c;
169wire [82:0] a3_csa3_1_s;
170wire i_a3_s_ff_a_scanin;
171wire i_a3_s_ff_a_scanout;
172wire [82:0] a3_csa3_1_s_ff;
173wire i_a3_s_ff_b_scanin;
174wire i_a3_s_ff_b_scanout;
175wire i_a3_c_ff_a_scanin;
176wire i_a3_c_ff_a_scanout;
177wire [82:2] a3_csa3_1_c_ff;
178wire i_a3_c_ff_b_scanin;
179wire i_a3_c_ff_b_scanout;
180wire [100:16] a2_csa2_3_s;
181wire [98:0] a32_xr4_1;
182wire i_a32_x_ff_a_scanin;
183wire i_a32_x_ff_a_scanout;
184wire [98:0] a32_xr_ff;
185wire i_a32_x_ff_b_scanin;
186wire i_a32_x_ff_b_scanout;
187wire i_a2_be_ff_a_scanin;
188wire i_a2_be_ff_a_scanout;
189wire a2_xr_mode_fx2_;
190wire [4:0] be_ff17;
191wire [4:0] be_ff16;
192wire i_a2_be_ff_b_scanin;
193wire i_a2_be_ff_b_scanout;
194wire [4:0] be_ff15;
195wire [4:0] be_ff14;
196wire [4:0] be_ff13;
197wire [4:0] be_ff12;
198wire [4:0] be_ff11;
199wire [4:0] be_ff10;
200wire [4:0] be_ff09;
201wire [63:31] rs2_fx1_ebf2;
202wire i_a2_rs2_ff_scanin;
203wire i_a2_rs2_ff_scanout;
204wire [63:0] a2_rs2_ff;
205wire [63:0] a2_rs2;
206wire [63:0] a2_rs2_;
207wire [84:16] bm09;
208wire [86:18] bm10;
209wire [88:20] bm11;
210wire [90:22] bm12;
211wire [92:24] bm13;
212wire [94:26] bm14;
213wire [96:28] bm15;
214wire [98:30] bm16;
215wire [100:32] bm17;
216wire [87:19] a2_csa1_4_c;
217wire [88:16] a2_csa1_4_s;
218wire [93:25] a2_csa1_5_c;
219wire [94:22] a2_csa1_5_s;
220wire [99:31] a2_csa1_6_c;
221wire [100:28] a2_csa1_6_s;
222wire [95:23] a2_csa2_3_c;
223wire [94:26] a2_csa2_4_c;
224wire [99:19] a2_csa2_4_s;
225wire a2_csa3_2_unused;
226wire [100:20] a2_csa3_2_c;
227wire [100:16] a2_csa3_2_s;
228wire i_a2_s_ff_a_scanin;
229wire i_a2_s_ff_a_scanout;
230wire [100:16] a2_csa3_2_s_ff;
231wire i_a2_s_ff_b_scanin;
232wire i_a2_s_ff_b_scanout;
233wire i_a2_c_ff_a_scanin;
234wire i_a2_c_ff_a_scanout;
235wire [100:20] a2_csa3_2_c_ff;
236wire i_a2_c_ff_b_scanin;
237wire i_a2_c_ff_b_scanout;
238wire i_a1_be_ff_scanin;
239wire i_a1_be_ff_scanout;
240wire a1_xr_mode_fx2_;
241wire [4:0] be_ff26;
242wire [4:0] be_ff25;
243wire [4:0] be_ff24;
244wire [4:0] be_ff23;
245wire [4:0] be_ff22;
246wire [4:0] be_ff21;
247wire [4:0] be_ff20;
248wire [4:0] be_ff19;
249wire [4:0] be_ff18;
250wire [63:47] rs2_fx1_ebf1;
251wire i_a1_rs2_ff_scanin;
252wire i_a1_rs2_ff_scanout;
253wire [63:0] a1_rs2_ff;
254wire [63:0] a1_rs2;
255wire [63:0] a1_rs2_;
256wire [102:34] bm18;
257wire [104:36] bm19;
258wire [106:38] bm20;
259wire [108:40] bm21;
260wire [110:42] bm22;
261wire [112:44] bm23;
262wire [114:46] bm24;
263wire [116:48] bm25;
264wire [118:50] bm26;
265wire [105:37] a1_csa1_7_c;
266wire [106:34] a1_csa1_7_s;
267wire [111:43] a1_csa1_8_c;
268wire [112:40] a1_csa1_8_s;
269wire [117:49] a1_csa1_9_c;
270wire [118:46] a1_csa1_9_s;
271wire [113:41] a1_csa2_5_c;
272wire [118:34] a1_csa2_5_s;
273wire [112:44] a1_csa2_6_c;
274wire [117:37] a1_csa2_6_s;
275wire a1_csa3_3_unused;
276wire [118:38] a1_csa3_3_c;
277wire [118:34] a1_csa3_3_s;
278wire i_a1_s_ff_a_scanin;
279wire i_a1_s_ff_a_scanout;
280wire [118:34] a1_csa3_3_s_ff;
281wire i_a1_s_ff_b_scanin;
282wire i_a1_s_ff_b_scanout;
283wire i_a1_c_ff_a_scanin;
284wire i_a1_c_ff_a_scanout;
285wire [118:38] a1_csa3_3_c_ff;
286wire i_a1_c_ff_b_scanin;
287wire i_a1_c_ff_b_scanout;
288wire [126:54] a0_xr_in;
289wire [126:36] a10_xr4_2;
290wire i_a10_x_ff_a_scanin;
291wire i_a10_x_ff_a_scanout;
292wire [126:36] a10_xr_ff;
293wire i_a10_x_ff_b_scanin;
294wire i_a10_x_ff_b_scanout;
295wire i_a0_be_ff_scanin;
296wire i_a0_be_ff_scanout;
297wire a0_xr_mode_fx2_;
298wire be_ff32_b0;
299wire [4:0] be_ff31;
300wire [4:0] be_ff30;
301wire [4:0] be_ff29;
302wire [4:0] be_ff28;
303wire [4:0] be_ff27;
304wire [63:47] rs2_fx1_ebf0;
305wire i_a0_rs2_ff_scanin;
306wire i_a0_rs2_ff_scanout;
307wire [63:0] a0_rs2_ff;
308wire [63:0] a0_rs2;
309wire [63:0] a0_rs2_;
310wire [120:52] bm27;
311wire [122:54] bm28;
312wire [124:56] bm29;
313wire [126:58] bm30;
314wire [127:60] bm31;
315wire [135:62] bm32;
316wire [123:55] a0_csa2_7_c;
317wire [124:52] a0_csa2_7_s;
318wire [128:61] a0_csa2_8_c;
319wire [135:58] a0_csa2_8_s;
320wire a0_csa3_4_unused;
321wire [129:56] a0_csa3_4_c;
322wire [135:52] a0_csa3_4_s;
323wire i_a0_s_ff_a_scanin;
324wire i_a0_s_ff_a_scanout;
325wire [135:52] a0_csa3_4_s_ff;
326wire i_a0_s_ff_b_scanin;
327wire i_a0_s_ff_b_scanout;
328wire i_a0_c_ff_a_scanin;
329wire i_a0_c_ff_a_scanout;
330wire [129:56] a0_csa3_4_c_ff;
331wire i_a0_c_ff_b_scanin;
332wire i_a0_c_ff_b_scanout;
333wire [6:2] accum_sel_fx4;
334wire accum_sel_fx4_b0;
335wire a4_8x16csa4_1_unused;
336wire [31:2] a4_8x16csa4_1_c;
337wire [31:0] a4_8x16csa4_1_s;
338wire a4_8x16csa4_2_unused;
339wire [49:20] a4_8x16csa4_2_c;
340wire [49:18] a4_8x16csa4_2_s;
341wire a4_8x16csa4_3_unused;
342wire [67:38] a4_8x16csa4_3_c;
343wire [67:36] a4_8x16csa4_3_s;
344wire a4_8x16csa4_4_unused;
345wire [85:56] a4_8x16csa4_4_c;
346wire [85:54] a4_8x16csa4_4_s;
347wire [126:0] a4_xr5_1;
348wire a4_csa4_1b_cout;
349wire a4_csa4_1a_unused;
350wire [101:3] a4_csa4_1_c;
351wire [100:0] a4_csa4_1_s;
352wire a4_csa4_2_unused;
353wire [130:39] a4_csa4_2_c;
354wire [135:34] a4_csa4_2_s;
355wire a4_csa5_1b_cout;
356wire a4_csa5_1a_unused;
357wire [131:4] a4_csa5_1_c;
358wire [135:0] a4_csa5_1_s;
359wire i_a4_s_lo_ff_scanin;
360wire i_a4_s_lo_ff_scanout;
361wire [135:0] a4_csa5_1_s_ff;
362wire i_a4_s_hi_ff_scanin;
363wire i_a4_s_hi_ff_scanout;
364wire i_a4_c_lo_ff_scanin;
365wire i_a4_c_lo_ff_scanout;
366wire [132:0] a4_csa5_1_c_ff;
367wire i_a4_c_hi_ff_scanin;
368wire i_a4_c_hi_ff_scanout;
369wire [135:0] accum_ff;
370wire [126:0] xr_fx4;
371wire i_accum_ff0_scanin;
372wire i_accum_ff0_scanout;
373wire [135:0] fya_add_result;
374wire i_accum_ff1_scanin;
375wire i_accum_ff1_scanout;
376wire i_accum_sel_b1_ff_scanin;
377wire i_accum_sel_b1_ff_scanout;
378wire [3:0] accum_sel_fx4_b1;
379wire fya_sticky_dp;
380wire fya_sticky_sp;
381wire [1:0] fya_xicc_z;
382wire i_fx5_ff_scanin;
383wire i_fx5_ff_scanout;
384wire i_ma_result_ff_scanin;
385wire i_ma_result_ff_scanout;
386
387
388input l2clk;
389input scan_in;
390input tcu_pce_ov; // scan signals
391input spc_aclk;
392input spc_bclk;
393input tcu_scan_en;
394input tcu_dectest;
395input tcu_muxtest;
396output scan_out;
397
398input mul_clken_rep0; // multiply clken
399input mul_clken_rep01; // multiply clken
400
401input [63:0] spu_fgu_rs1_e; // rs1 source from SPU
402input [63:0] spu_fgu_rs2_e; // rs2 source from SPU
403
404input [63:0] fad_rs1_fmt_fx1_rep0;
405input [63:0] fad_rs2_fmt_fx1_rep0;
406input [63:0] fad_rs2_fmt_fx1_rep1;
407
408input fac_xr_mode_fx1; // 0 : Int or Float
409 // 1 : XOR mult
410
411input [4:0] fac_rs1_sel_fx1; // [0] : FMUL8SUx16 or FMULD8SUx16
412 // [1] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL
413 // [2] : FMUL8ULx16 or FMULD8ULx16
414 // [3] : MA Int / XOR forward of last MA result
415 // [4] : MA Int / XOR unforwarded
416 // Def : 64 * 64 Multiply
417
418input [3:0] fac_rs2_sel_fx1; // [0] : FMUL8x16AU
419 // [1] : FMUL8x16AL
420 // [2] : all 8x16
421 // [3] : MA Int / XOR
422 // Def : 64 * 64 Multiply
423
424input [1:0] fac_8x16_rnd_fx3; // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
425 // [1] : FMUL8ULx16
426
427input [3:0] fac_scff_sel_fx3; // [0] : Int, Float, MA Int
428 // [1] : all 8x16
429 // [2] : MA Int * 2
430 // [3] : XOR mult
431 // Def : XOR mult * 2
432
433input [6:0] fac_accum_sel_fx3; // [0] : Write ACCUM with result
434 // [1] : Add ACCUM to Mult product
435 // [2] : XOR Mult w/ ACCUM
436 // [3] : XOR Mult w/ ACCUM >> 64
437 // [4] : XOR Mult w/o ACCUM
438 // [5] : XOR Mult w/o ACCUM >> 64
439 // [6] : Int Mult w/ or w/o ACCUM
440 // Def : Int Mult w/ or w/o ACCUM >> 64
441
442input [5:0] fac_result_sel_fx4; // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
443 // [1] : FMUL8ULx16
444 // [2] : FMULD8SUx16
445 // [3] : FMULD8ULx16
446 // [4] : XOR multiply w/ ACCUMUMATE
447 // [5] : Float
448 // Def : Integer, MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE
449
450input fac_ma_result_en_fx4; // 1 : Save last MA result in shadow flop
451
452output [63:0] fgu_mul_result_fx5;
453output fpy_sticky_dp_fx5;
454output fpy_sticky_sp_fx5;
455output fpy_fp_result_fx4_b63;
456output [1:0] fpy_xicc_z_fx5;
457
458output fgu_accum_b0_fx5; // To SPU MA
459
460
461
462// scan renames
463assign stop = 1'b0;
464assign test = tcu_dectest;
465// end scan
466
467fgu_fpy_dp_buff_macro__dbuff_32x__rep_1__stack_88c__width_4 test_rep0 (
468 .din ({tcu_scan_en, tcu_pce_ov, spc_aclk, spc_bclk}),
469 .dout({se, pce_ov, siclk, soclk })
470 );
471
472
473fgu_fpy_dp_msff_macro__minbuff_1__stack_88c__width_64 i_spu_rs1_ff (
474 .scan_in(i_spu_rs1_ff_scanin),
475 .scan_out(i_spu_rs1_ff_scanout),
476 .clk ( l2clk ),
477 .en ( mul_clken_rep0 ),
478 .din ( spu_fgu_rs1_e[63:0] ),
479 .dout( spu_fgu_rs1_fx1[63:0] ),
480 .se(se),
481 .siclk(siclk),
482 .soclk(soclk),
483 .pce_ov(pce_ov),
484 .stop(stop));
485
486
487fgu_fpy_dp_msff_macro__stack_88c__width_64 i_spu_rs2_ff (
488 .scan_in(i_spu_rs2_ff_scanin),
489 .scan_out(i_spu_rs2_ff_scanout),
490 .clk ( l2clk ),
491 .en ( mul_clken_rep0 ),
492 .din ( spu_fgu_rs2_e[63:0] ),
493 .dout( spu_fgu_rs2_fx1[63:0] ),
494 .se(se),
495 .siclk(siclk),
496 .soclk(soclk),
497 .pce_ov(pce_ov),
498 .stop(stop));
499
500
501
502
503
504fgu_fpy_dp_buff_macro__stack_88c__width_4 i_rs2_fx1_ebuf (
505 .din ({fad_rs2_fmt_fx1_rep0[63],fad_rs2_fmt_fx1_rep0[47],fad_rs2_fmt_fx1_rep0[31],fad_rs2_fmt_fx1_rep0[15]}),
506 .dout({ rs2_fx1_ebf[63] , rs2_fx1_ebf[47] , rs2_fx1_ebf[31] , rs2_fx1_ebf[15]} ));
507
508
509
510
511// *** *** *** *** *** *** *** *** Start : RS1 Format *** *** *** *** *** *** *** ***
512
513
514fgu_fpy_dp_inv_macro__stack_88c__width_1 i_xr_mode_fx1_inv (
515 .din ( fac_xr_mode_fx1 ),
516 .dout( xr_mode_fx1_ ));
517
518fgu_fpy_dp_buff_macro__stack_88c__width_2 i_xr_mode_fx1_buf (
519 .din ({2{fac_xr_mode_fx1}} ),
520 .dout( xr_mode_fx1_bf[1:0] ));
521
522fgu_fpy_dp_buff_macro__dbuff_48x__stack_88c__width_1 muxtest_a_rep0 (
523 .din (tcu_muxtest ),
524 .dout(tcu_muxtest_a_rep0)
525 );
526
527fgu_fpy_dp_mux_macro__mux_pgpe__ports_6__stack_88c__width_69 i_rs1_fmt_mux (
528 .muxtst(tcu_muxtest_a_rep0),
529 .din0({{ 4{fad_rs1_fmt_fx1_rep0[63]}},fad_rs1_fmt_fx1_rep0[63:56],1'b0, // a0 12:0
530 {10{fad_rs1_fmt_fx1_rep0[47]}},fad_rs1_fmt_fx1_rep0[47:40],1'b0, // a1 18:0
531 {10{fad_rs1_fmt_fx1_rep0[31]}},fad_rs1_fmt_fx1_rep0[31:24],1'b0, // a2 18:0
532 {10{fad_rs1_fmt_fx1_rep0[15]}},fad_rs1_fmt_fx1_rep0[15:8] }), // a3 18:1
533
534 .din1({{ 4{ 1'b0 }},fad_rs1_fmt_fx1_rep0[63:56],1'b0, // a0 12:0
535 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[55:48],1'b0, // a1 18:0
536 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[47:40],1'b0, // a2 18:0
537 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[39:32] }), // a3 18:1
538
539 .din2({{ 4{ 1'b0 }},fad_rs1_fmt_fx1_rep0[55:48],1'b0, // a0 12:0
540 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[39:32],1'b0, // a1 18:0
541 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[23:16],1'b0, // a2 18:0
542 {10{ 1'b0 }},fad_rs1_fmt_fx1_rep0[7:0] }), // a3 18:1
543
544 .din3({2'b00,ma_result_ff[63:53], // a0 12:0
545 ma_result_ff[53:35] , // a1 18:0
546 ma_result_ff[35:17] , // a2 18:0
547 ma_result_ff[17:0] } ), // a3 18:1
548
549 .din4({2'b00,spu_fgu_rs1_fx1[63:53], // a0 12:0
550 spu_fgu_rs1_fx1[53:35], // a1 18:0
551 spu_fgu_rs1_fx1[35:17], // a2 18:0
552 spu_fgu_rs1_fx1[17:0]} ), // a3 18:1
553
554 .din5({2'b00,fad_rs1_fmt_fx1_rep0[63:53], // a0 12:0
555 fad_rs1_fmt_fx1_rep0[53:35], // a1 18:0
556 fad_rs1_fmt_fx1_rep0[35:17], // a2 18:0
557 fad_rs1_fmt_fx1_rep0[17:0]} ), // a3 18:1
558
559 .sel0( fac_rs1_sel_fx1[0] ),
560 .sel1( fac_rs1_sel_fx1[1] ),
561 .sel2( fac_rs1_sel_fx1[2] ),
562 .sel3( fac_rs1_sel_fx1[3] ),
563 .sel4( fac_rs1_sel_fx1[4] ),
564 .dout({rs1_fmt_a0[12:0] ,
565 rs1_fmt_a1[18:0] ,
566 rs1_fmt_a2[18:0] ,
567 rs1_fmt_a3[18:1] } ),
568 .test(test));
569
570
571 assign rs1_fmt_a3[0] = 1'b0; // 1st back bit is always '0'
572
573
574fgu_fpy_dp_booth_encode_macro i_be00 (
575 .xr_mode ( xr_mode_fx1_bf[0] ),
576 .din ( rs1_fmt_a3[2:0] ),
577 .dout ( be00[4:0] ), // +3,-1,-2,+2,+1
578 .pout ( be_pout[0] ), // P,H
579 .hout ( be_hout[0] ));
580
581
582fgu_fpy_dp_booth_encode_macro i_be01 (
583 .xr_mode ( xr_mode_fx1_bf[0] ),
584 .din ( rs1_fmt_a3[4:2] ),
585 .dout ( be01[4:0] ), // +3,-1,-2,+2,+1
586 .pout ( be_pout[1] ), // P,H
587 .hout ( be_hout[1] ));
588
589
590fgu_fpy_dp_booth_encode_macro i_be02 (
591 .xr_mode ( xr_mode_fx1_bf[0] ),
592 .din ( rs1_fmt_a3[6:4] ),
593 .dout ( be02[4:0] ), // +3,-1,-2,+2,+1
594 .pout ( be_pout[2] ), // P,H
595 .hout ( be_hout[2] ));
596
597
598fgu_fpy_dp_booth_encode_macro i_be03 (
599 .xr_mode ( xr_mode_fx1_bf[0] ),
600 .din ( rs1_fmt_a3[8:6] ),
601 .dout ( be03[4:0] ), // +3,-1,-2,+2,+1
602 .pout ( be_pout[3] ), // P,H
603 .hout ( be_hout[3] ));
604
605
606fgu_fpy_dp_booth_encode_macro i_be04 (
607 .xr_mode ( xr_mode_fx1_bf[0] ),
608 .din ( rs1_fmt_a3[10:8] ),
609 .dout ( be04[4:0] ), // +3,-1,-2,+2,+1
610 .pout ( be_pout[4] ), // P,H
611 .hout ( be_hout[4] ));
612
613
614fgu_fpy_dp_booth_encode_macro i_be05 (
615 .xr_mode ( xr_mode_fx1_bf[0] ),
616 .din ( rs1_fmt_a3[12:10] ),
617 .dout ( be05[4:0] ), // +3,-1,-2,+2,+1
618 .pout ( be_pout[5] ), // P,H
619 .hout ( be_hout[5] ));
620
621
622fgu_fpy_dp_booth_encode_macro i_be06 (
623 .xr_mode ( xr_mode_fx1_bf[0] ),
624 .din ( rs1_fmt_a3[14:12] ),
625 .dout ( be06[4:0] ), // +3,-1,-2,+2,+1
626 .pout ( be_pout[6] ), // P,H
627 .hout ( be_hout[6] ));
628
629
630fgu_fpy_dp_booth_encode_macro i_be07 (
631 .xr_mode ( xr_mode_fx1_bf[0] ),
632 .din ( rs1_fmt_a3[16:14] ),
633 .dout ( be07[4:0] ), // +3,-1,-2,+2,+1
634 .pout ( be_pout[7] ), // P,H
635 .hout ( be_hout[7] ));
636
637
638fgu_fpy_dp_booth_encode_macro i_be08 (
639 .xr_mode ( xr_mode_fx1_bf[0] ),
640 .din ( rs1_fmt_a3[18:16] ),
641 .dout ( be08[4:0] ), // +3,-1,-2,+2,+1
642 .pout ( be_pout[8] ), // P,H
643 .hout ( be_hout[8] ));
644
645
646
647
648fgu_fpy_dp_booth_encode_macro i_be09 (
649 .xr_mode ( xr_mode_fx1_bf[0] ),
650 .din ( rs1_fmt_a2[2:0] ),
651 .dout ( be09[4:0] ), // +3,-1,-2,+2,+1
652 .pout ( be_pout[9] ), // P,H
653 .hout ( be_hout[9] ));
654
655
656fgu_fpy_dp_booth_encode_macro i_be10 (
657 .xr_mode ( xr_mode_fx1_bf[0] ),
658 .din ( rs1_fmt_a2[4:2] ),
659 .dout ( be10[4:0] ), // +3,-1,-2,+2,+1
660 .pout ( be_pout[10] ), // P,H
661 .hout ( be_hout[10] ));
662
663
664fgu_fpy_dp_booth_encode_macro i_be11 (
665 .xr_mode ( xr_mode_fx1_bf[0] ),
666 .din ( rs1_fmt_a2[6:4] ),
667 .dout ( be11[4:0] ), // +3,-1,-2,+2,+1
668 .pout ( be_pout[11] ), // P,H
669 .hout ( be_hout[11] ));
670
671
672fgu_fpy_dp_booth_encode_macro i_be12 (
673 .xr_mode ( xr_mode_fx1_bf[0] ),
674 .din ( rs1_fmt_a2[8:6] ),
675 .dout ( be12[4:0] ), // +3,-1,-2,+2,+1
676 .pout ( be_pout[12] ), // P,H
677 .hout ( be_hout[12] ));
678
679
680fgu_fpy_dp_booth_encode_macro i_be13 (
681 .xr_mode ( xr_mode_fx1_bf[0] ),
682 .din ( rs1_fmt_a2[10:8] ),
683 .dout ( be13[4:0] ), // +3,-1,-2,+2,+1
684 .pout ( be_pout[13] ), // P,H
685 .hout ( be_hout[13] ));
686
687
688fgu_fpy_dp_booth_encode_macro i_be14 (
689 .xr_mode ( xr_mode_fx1_bf[0] ),
690 .din ( rs1_fmt_a2[12:10] ),
691 .dout ( be14[4:0] ), // +3,-1,-2,+2,+1
692 .pout ( be_pout[14] ), // P,H
693 .hout ( be_hout[14] ));
694
695
696fgu_fpy_dp_booth_encode_macro i_be15 (
697 .xr_mode ( xr_mode_fx1_bf[0] ),
698 .din ( rs1_fmt_a2[14:12] ),
699 .dout ( be15[4:0] ), // +3,-1,-2,+2,+1
700 .pout ( be_pout[15] ), // P,H
701 .hout ( be_hout[15] ));
702
703
704fgu_fpy_dp_booth_encode_macro i_be16 (
705 .xr_mode ( xr_mode_fx1_bf[0] ),
706 .din ( rs1_fmt_a2[16:14] ),
707 .dout ( be16[4:0] ), // +3,-1,-2,+2,+1
708 .pout ( be_pout[16] ), // P,H
709 .hout ( be_hout[16] ));
710
711
712fgu_fpy_dp_booth_encode_macro i_be17 (
713 .xr_mode ( xr_mode_fx1_bf[0] ),
714 .din ( rs1_fmt_a2[18:16] ),
715 .dout ( be17[4:0] ), // +3,-1,-2,+2,+1
716 .pout ( be_pout[17] ), // P,H
717 .hout ( be_hout[17] ));
718
719
720
721
722
723fgu_fpy_dp_booth_encode_macro i_be18 (
724 .xr_mode ( xr_mode_fx1_bf[0] ),
725 .din ( rs1_fmt_a1[2:0] ),
726 .dout ( be18[4:0] ), // +3,-1,-2,+2,+1
727 .pout ( be_pout[18] ), // P,H
728 .hout ( be_hout[18] ));
729
730
731fgu_fpy_dp_booth_encode_macro i_be19 (
732 .xr_mode ( xr_mode_fx1_bf[0] ),
733 .din ( rs1_fmt_a1[4:2] ),
734 .dout ( be19[4:0] ), // +3,-1,-2,+2,+1
735 .pout ( be_pout[19] ), // P,H
736 .hout ( be_hout[19] ));
737
738
739fgu_fpy_dp_booth_encode_macro i_be20 (
740 .xr_mode ( xr_mode_fx1_bf[0] ),
741 .din ( rs1_fmt_a1[6:4] ),
742 .dout ( be20[4:0] ), // +3,-1,-2,+2,+1
743 .pout ( be_pout[20] ), // P,H
744 .hout ( be_hout[20] ));
745
746
747fgu_fpy_dp_booth_encode_macro i_be21 (
748 .xr_mode ( xr_mode_fx1_bf[0] ),
749 .din ( rs1_fmt_a1[8:6] ),
750 .dout ( be21[4:0] ), // +3,-1,-2,+2,+1
751 .pout ( be_pout[21] ), // P,H
752 .hout ( be_hout[21] ));
753
754
755fgu_fpy_dp_booth_encode_macro i_be22 (
756 .xr_mode ( xr_mode_fx1_bf[1] ),
757 .din ( rs1_fmt_a1[10:8] ),
758 .dout ( be22[4:0] ), // +3,-1,-2,+2,+1
759 .pout ( be_pout[22] ), // P,H
760 .hout ( be_hout[22] ));
761
762
763fgu_fpy_dp_booth_encode_macro i_be23 (
764 .xr_mode ( xr_mode_fx1_bf[1] ),
765 .din ( rs1_fmt_a1[12:10] ),
766 .dout ( be23[4:0] ), // +3,-1,-2,+2,+1
767 .pout ( be_pout[23] ), // P,H
768 .hout ( be_hout[23] ));
769
770
771fgu_fpy_dp_booth_encode_macro i_be24 (
772 .xr_mode ( xr_mode_fx1_bf[1] ),
773 .din ( rs1_fmt_a1[14:12] ),
774 .dout ( be24[4:0] ), // +3,-1,-2,+2,+1
775 .pout ( be_pout[24] ), // P,H
776 .hout ( be_hout[24] ));
777
778
779fgu_fpy_dp_booth_encode_macro i_be25 (
780 .xr_mode ( xr_mode_fx1_bf[1] ),
781 .din ( rs1_fmt_a1[16:14] ),
782 .dout ( be25[4:0] ), // +3,-1,-2,+2,+1
783 .pout ( be_pout[25] ), // P,H
784 .hout ( be_hout[25] ));
785
786
787fgu_fpy_dp_booth_encode_macro i_be26 (
788 .xr_mode ( xr_mode_fx1_bf[1] ),
789 .din ( rs1_fmt_a1[18:16] ),
790 .dout ( be26[4:0] ), // +3,-1,-2,+2,+1
791 .pout ( be_pout[26] ), // P,H
792 .hout ( be_hout[26] ));
793
794
795
796
797
798fgu_fpy_dp_booth_encode_macro i_be27 (
799 .xr_mode ( xr_mode_fx1_bf[1] ),
800 .din ( rs1_fmt_a0[2:0] ),
801 .dout ( be27[4:0] ), // +3,-1,-2,+2,+1
802 .pout ( be_pout[27] ), // P,H
803 .hout ( be_hout[27] ));
804
805
806fgu_fpy_dp_booth_encode_macro i_be28 (
807 .xr_mode ( xr_mode_fx1_bf[1] ),
808 .din ( rs1_fmt_a0[4:2] ),
809 .dout ( be28[4:0] ), // +3,-1,-2,+2,+1
810 .pout ( be_pout[28] ), // P,H
811 .hout ( be_hout[28] ));
812
813
814fgu_fpy_dp_booth_encode_macro i_be29 (
815 .xr_mode ( xr_mode_fx1_bf[1] ),
816 .din ( rs1_fmt_a0[6:4] ),
817 .dout ( be29[4:0] ), // +3,-1,-2,+2,+1
818 .pout ( be_pout[29] ), // P,H
819 .hout ( be_hout[29] ));
820
821
822fgu_fpy_dp_booth_encode_macro i_be30 (
823 .xr_mode ( xr_mode_fx1_bf[1] ),
824 .din ( rs1_fmt_a0[8:6] ),
825 .dout ( be30[4:0] ), // +3,-1,-2,+2,+1
826 .pout ( be_pout[30] ), // P,H
827 .hout ( be_hout[30] ));
828
829
830fgu_fpy_dp_booth_encode_macro i_be31 (
831 .xr_mode ( xr_mode_fx1_bf[1] ),
832 .din ( rs1_fmt_a0[10:8] ),
833 .dout ( be31[4:0] ), // +3,-1,-2,+2,+1
834 .pout ( be_pout[31] ), // P,H
835 .hout ( be_hout[31] ));
836
837
838fgu_fpy_dp_booth_encode_macro i_be32 (
839 .xr_mode ( xr_mode_fx1_bf[1] ),
840 .din ( rs1_fmt_a0[12:10] ),
841 .dout ({i_be32_unused[3:0],
842 be32_b0} ), // +3,-1,-2,+2,+1
843 .pout ( i_be32_unused[4] ), // P,H
844 .hout ( i_be32_unused[5] ));
845
846
847
848// *** *** *** *** *** *** *** *** End : RS1 Format *** *** *** *** *** *** *** ***
849
850
851
852// *** *** *** *** *** *** *** *** Start : XOR multiply specific *** *** *** *** ***
853
854
855
856fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 i_3x_xor (
857 .din0( spu_fgu_rs2_fx1[63:1] ), // XOR 1x
858 .din1( spu_fgu_rs2_fx1[62:0] ), // XOR 2x
859 .dout( rs2_3x_fx1[63:1] ));
860
861 assign rs2_3x_fx1[0] = spu_fgu_rs2_fx1[0];
862 assign rs2_3x_fx1[64] = spu_fgu_rs2_fx1[63];
863
864
865fgu_fpy_dp_msff_macro__stack_88c__width_65 i_3x_ff (
866 .scan_in(i_3x_ff_scanin),
867 .scan_out(i_3x_ff_scanout),
868 .clk ( l2clk ),
869 .en ( mul_clken_rep0 ),
870 .din ( rs2_3x_fx1[64:0] ),
871 .dout( rs2_3x_ff[64:0] ),
872 .se(se),
873 .siclk(siclk),
874 .soclk(soclk),
875 .pce_ov(pce_ov),
876 .stop(stop));
877
878
879fgu_fpy_dp_buff_macro__stack_88c__width_65 i_3x_buf (
880 .din ( rs2_3x_ff[64:0] ),
881 .dout( rs2_3x[64:0] ));
882
883
884// *** *** *** *** *** *** *** *** End : XOR multiply specific *** *** *** *** ***
885
886
887
888// *** *** *** *** *** *** *** *** Start : "A3" 9:2 CSA Tree *** *** *** *** *** ***
889
890fgu_fpy_dp_msff_macro__stack_88c__width_63 i_a3_be_ff (
891 .scan_in(i_a3_be_ff_scanin),
892 .scan_out(i_a3_be_ff_scanout),
893 .clk ( l2clk ),
894 .en ( mul_clken_rep0 ),
895 .din ({xr_mode_fx1_ ,
896 be_pout[8:0] ,
897 be08[4:0] ,
898 be07[4:0] ,
899 be06[4:0] ,
900 be05[4:0] ,
901 be04[4:0] ,
902 be03[4:0] ,
903 be02[4:0] ,
904 be01[4:0] ,
905 be00[4:0] ,
906 be_hout[7:0]} ),
907 .dout({a3_xr_mode_fx2_ ,
908 be_pout_ff[8:0] ,
909 be_ff08[4:0] ,
910 be_ff07[4:0] ,
911 be_ff06[4:0] ,
912 be_ff05[4:0] ,
913 be_ff04[4:0] ,
914 be_ff03[4:0] ,
915 be_ff02[4:0] ,
916 be_ff01[4:0] ,
917 be_ff00[4:0] ,
918 be_hout_ff[7:0]} ),
919 .se(se),
920 .siclk(siclk),
921 .soclk(soclk),
922 .pce_ov(pce_ov),
923 .stop(stop));
924
925
926fgu_fpy_dp_buff_macro__stack_88c__width_3 i_a3_rs2_fx1_ebuf (
927 .din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47] ,rs2_fx1_ebf[15]} ),
928 .dout({rs2_fx1_ebf3[63] ,rs2_fx1_ebf3[47] ,rs2_fx1_ebf3[15]} ));
929
930
931fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a3_rs2_ff (
932 .scan_in(i_a3_rs2_ff_scanin),
933 .scan_out(i_a3_rs2_ff_scanout),
934 .clk ( l2clk ),
935 .en ( mul_clken_rep0 ),
936 .din0({{32{1'b0}},{17{rs2_fx1_ebf3[63]}},fad_rs2_fmt_fx1_rep1[62:48]} ),
937 .din1({{32{1'b0}},{17{rs2_fx1_ebf3[47]}},fad_rs2_fmt_fx1_rep1[46:32]} ),
938 .din2({{32{1'b0}},{17{rs2_fx1_ebf3[15]}},fad_rs2_fmt_fx1_rep1[14:0]} ),
939 .din3( spu_fgu_rs2_fx1[63:0] ),
940 .din4( fad_rs2_fmt_fx1_rep1[63:0] ),
941 .sel0( fac_rs2_sel_fx1[0] ),
942 .sel1( fac_rs2_sel_fx1[1] ),
943 .sel2( fac_rs2_sel_fx1[2] ),
944 .sel3( fac_rs2_sel_fx1[3] ),
945 .dout( a3_rs2_ff[63:0] ),
946 .se(se),
947 .siclk(siclk),
948 .soclk(soclk),
949 .pce_ov(pce_ov),
950 .stop(stop));
951
952
953fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a3_rs2_buf (
954 .din ( a3_rs2_ff[63:0] ),
955 .dout( a3_rs2[63:0] ));
956
957fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a3_rs2_inv (
958 .din ( a3_rs2_ff[63:0] ),
959 .dout( a3_rs2_[63:0] ));
960
961
962
963
964fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_00 (
965 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
966 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
967 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
968 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
969 .din4( rs2_3x[64:0] ), // +3 * rs2
970 .sel0( be_ff00[0] ),
971 .sel1( be_ff00[1] ),
972 .sel2( be_ff00[2] ),
973 .sel3( be_ff00[3] ),
974 .sel4( be_ff00[4] ),
975 .dout( bm00[64:0] ));
976
977 assign bm00[67:65] = { be_pout_ff[0] , be_hout_ff[0] , be_hout_ff[0]}; // PNN
978
979
980
981fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_01 (
982 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
983 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
984 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
985 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
986 .din4( rs2_3x[64:0] ), // +3 * rs2
987 .sel0( be_ff01[0] ),
988 .sel1( be_ff01[1] ),
989 .sel2( be_ff01[2] ),
990 .sel3( be_ff01[3] ),
991 .sel4( be_ff01[4] ),
992 .dout( bm01[66:2] ));
993
994 assign bm01[68:67] = { a3_xr_mode_fx2_ , be_pout_ff[1] }; // 1P
995 assign bm01[1:0] = { 1'b0 , be_hout_ff[0] };
996
997
998
999fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_02 (
1000 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1001 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1002 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1003 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1004 .din4( rs2_3x[64:0] ), // +3 * rs2
1005 .sel0( be_ff02[0] ),
1006 .sel1( be_ff02[1] ),
1007 .sel2( be_ff02[2] ),
1008 .sel3( be_ff02[3] ),
1009 .sel4( be_ff02[4] ),
1010 .dout( bm02[68:4] ));
1011
1012 assign bm02[70:69] = { a3_xr_mode_fx2_ , be_pout_ff[2] }; // 1P
1013 assign bm02[3:2] = { 1'b0 , be_hout_ff[1] };
1014
1015
1016
1017fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_03 (
1018 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1019 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1020 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1021 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1022 .din4( rs2_3x[64:0] ), // +3 * rs2
1023 .sel0( be_ff03[0] ),
1024 .sel1( be_ff03[1] ),
1025 .sel2( be_ff03[2] ),
1026 .sel3( be_ff03[3] ),
1027 .sel4( be_ff03[4] ),
1028 .dout( bm03[70:6] ));
1029
1030 assign bm03[72:71] = { a3_xr_mode_fx2_ , be_pout_ff[3] }; // 1P
1031 assign bm03[5:4] = { 1'b0 , be_hout_ff[2] };
1032
1033
1034
1035fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_04 (
1036 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1037 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1038 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1039 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1040 .din4( rs2_3x[64:0] ), // +3 * rs2
1041 .sel0( be_ff04[0] ),
1042 .sel1( be_ff04[1] ),
1043 .sel2( be_ff04[2] ),
1044 .sel3( be_ff04[3] ),
1045 .sel4( be_ff04[4] ),
1046 .dout( bm04[72:8] ));
1047
1048 assign bm04[74:73] = { a3_xr_mode_fx2_ , be_pout_ff[4] }; // 1P
1049 assign bm04[7:6] = { 1'b0 , be_hout_ff[3] };
1050
1051
1052
1053fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_05 (
1054 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1055 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1056 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1057 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1058 .din4( rs2_3x[64:0] ), // +3 * rs2
1059 .sel0( be_ff05[0] ),
1060 .sel1( be_ff05[1] ),
1061 .sel2( be_ff05[2] ),
1062 .sel3( be_ff05[3] ),
1063 .sel4( be_ff05[4] ),
1064 .dout( bm05[74:10] ));
1065
1066 assign bm05[76:75] = { a3_xr_mode_fx2_ , be_pout_ff[5] }; // 1P
1067 assign bm05[9:8] = { 1'b0 , be_hout_ff[4] };
1068
1069
1070
1071fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_06 (
1072 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1073 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1074 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1075 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1076 .din4( rs2_3x[64:0] ), // +3 * rs2
1077 .sel0( be_ff06[0] ),
1078 .sel1( be_ff06[1] ),
1079 .sel2( be_ff06[2] ),
1080 .sel3( be_ff06[3] ),
1081 .sel4( be_ff06[4] ),
1082 .dout( bm06[76:12] ));
1083
1084 assign bm06[78:77] = { a3_xr_mode_fx2_ , be_pout_ff[6] }; // 1P
1085 assign bm06[11:10] = { 1'b0 , be_hout_ff[5] };
1086
1087
1088
1089fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_07 (
1090 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1091 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1092 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1093 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1094 .din4( rs2_3x[64:0] ), // +3 * rs2
1095 .sel0( be_ff07[0] ),
1096 .sel1( be_ff07[1] ),
1097 .sel2( be_ff07[2] ),
1098 .sel3( be_ff07[3] ),
1099 .sel4( be_ff07[4] ),
1100 .dout( bm07[78:14] ));
1101
1102 assign bm07[80:79] = { a3_xr_mode_fx2_ , be_pout_ff[7] }; // 1P
1103 assign bm07[13:12] = { 1'b0 , be_hout_ff[6] };
1104
1105
1106
1107fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a3_bm_08 (
1108 .din0({1'b0 , a3_rs2[63:0] }), // +1 * rs2
1109 .din1({ a3_rs2[63:0] , 1'b0 }), // +2 * rs2
1110 .din2({ a3_rs2_[63:0] , 1'b1 }), // -2 * rs2
1111 .din3({1'b1 , a3_rs2_[63:0] }), // -1 * rs2
1112 .din4( rs2_3x[64:0] ), // +3 * rs2
1113 .sel0( be_ff08[0] ),
1114 .sel1( be_ff08[1] ),
1115 .sel2( be_ff08[2] ),
1116 .sel3( be_ff08[3] ),
1117 .sel4( be_ff08[4] ),
1118 .dout( bm08[80:16] ));
1119
1120 assign bm08[82:81] = { a3_xr_mode_fx2_ , be_pout_ff[8] }; // 1P
1121 assign bm08[15:14] = { 1'b0 , be_hout_ff[7] };
1122
1123
1124
1125
1126fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_1 (
1127 .i0 ({ { 1{1'b0}}, bm00[67:0] }),
1128 .i1 ({ bm01[68:0] }),
1129 .i2 ({ bm02[68:2] , { 2{1'b0}} }),
1130 .carry( a3_csa1_1_c[69:1] ),
1131 .sum ( a3_csa1_1_s[68:0] ));
1132
1133 assign a3_csa1_1_s[70:69] = bm02[70:69];
1134
1135
1136
1137fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_2 (
1138 .i0 ({ { 2{1'b0}}, bm03[72:6] }),
1139 .i1 ({ bm04[74:6] }),
1140 .i2 ({ bm05[74:8] , { 2{1'b0}} }),
1141 .carry( a3_csa1_2_c[75:7] ),
1142 .sum ( a3_csa1_2_s[74:6] ));
1143
1144 assign a3_csa1_2_s[5:4] = bm03[5:4];
1145 assign a3_csa1_2_s[76:75] = bm05[76:75];
1146
1147
1148
1149fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa1_3 (
1150 .i0 ({ { 2{1'b0}}, bm06[78:12] }),
1151 .i1 ({ bm07[80:12] }),
1152 .i2 ({ bm08[80:14] , { 2{1'b0}} }),
1153 .carry( a3_csa1_3_c[81:13] ),
1154 .sum ( a3_csa1_3_s[80:12] ));
1155
1156 assign a3_csa1_3_s[11:10] = bm06[11:10];
1157 assign a3_csa1_3_s[82:81] = bm08[82:81];
1158
1159
1160
1161// *** 1st level to 2nd level ***
1162//
1163// csa1_1_s[70:00] csa1_1_c[69:01]
1164// csa1_2_s[76:04] csa1_2_c[75:07]
1165// csa1_3_s[82:10] csa1_3_c[81:13]
1166
1167
1168fgu_fpy_dp_csa32_macro__stack_88c__width_73 a3_csa2_1 (
1169 .i0 ({ { 6{1'b0}}, a3_csa1_1_s[70:4] }),
1170 .i1 ({ a3_csa1_2_s[76:4] }),
1171 .i2 ({ a3_csa1_3_s[76:10], { 6{1'b0}} }),
1172 .carry( a3_csa2_1_c[77:5] ),
1173 .sum ( a3_csa2_1_s[76:4] ));
1174
1175 assign a3_csa2_1_s[3:0] = a3_csa1_1_s[3:0];
1176 assign a3_csa2_1_s[82:77] = a3_csa1_3_s[82:77];
1177
1178
1179
1180fgu_fpy_dp_csa32_macro__stack_88c__width_69 a3_csa2_2 (
1181 .i0 ({ { 6{1'b0}}, a3_csa1_1_c[69:7] }),
1182 .i1 ({ a3_csa1_2_c[75:7] }),
1183 .i2 ({ a3_csa1_3_c[75:13], { 6{1'b0}} }),
1184 .carry( a3_csa2_2_c[76:8] ),
1185 .sum ( a3_csa2_2_s[75:7] ));
1186
1187 assign a3_csa2_2_s[6:1] = a3_csa1_1_c[6:1];
1188 assign a3_csa2_2_s[81:76] = a3_csa1_3_c[81:76];
1189
1190
1191
1192
1193// *** 2nd level to 3rd level ***
1194//
1195// csa2_1_s[82:00] csa2_1_c[77:05]
1196// csa2_2_s[81:01] csa2_2_c[76:08]
1197
1198
1199fgu_fpy_dp_csa42_macro__stack_88c__width_81 a3_csa3_1 (
1200 .i0 ({ a3_csa2_1_s[81:1] }),
1201 .i1 ({ { 4{1'b0}}, a3_csa2_1_c[77:5] , { 4{1'b0}} }),
1202 .i2 ({ { 5{1'b0}}, a3_csa2_2_c[76:8] , { 7{1'b0}} }),
1203 .i3 ({ a3_csa2_2_s[81:1] }),
1204 .cin ( 1'b0 ), // 1 bit
1205 .cout ( a3_csa3_1_unused ), // 1 bit
1206 .carry( a3_csa3_1_c[82:2] ),
1207 .sum ( a3_csa3_1_s[81:1] ));
1208
1209 assign a3_csa3_1_s[0] = a3_csa2_1_s[0];
1210 assign a3_csa3_1_s[82] = a3_csa2_1_s[82];
1211
1212
1213
1214fgu_fpy_dp_msff_macro__stack_88c__width_39 i_a3_s_ff_a (
1215 .scan_in(i_a3_s_ff_a_scanin),
1216 .scan_out(i_a3_s_ff_a_scanout),
1217 .clk ( l2clk ),
1218 .en ( mul_clken_rep01 ),
1219 .din ( a3_csa3_1_s[82:44] ), // [82] and [00] are early
1220 .dout( a3_csa3_1_s_ff[82:44] ),
1221 .se(se),
1222 .siclk(siclk),
1223 .soclk(soclk),
1224 .pce_ov(pce_ov),
1225 .stop(stop));
1226
1227fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a3_s_ff_b (
1228 .scan_in(i_a3_s_ff_b_scanin),
1229 .scan_out(i_a3_s_ff_b_scanout),
1230 .clk ( l2clk ),
1231 .en ( mul_clken_rep0 ),
1232 .din ( a3_csa3_1_s[43:0] ), // [82] and [00] are early
1233 .dout( a3_csa3_1_s_ff[43:0] ),
1234 .se(se),
1235 .siclk(siclk),
1236 .soclk(soclk),
1237 .pce_ov(pce_ov),
1238 .stop(stop));
1239
1240
1241fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a3_c_ff_a (
1242 .scan_in(i_a3_c_ff_a_scanin),
1243 .scan_out(i_a3_c_ff_a_scanout),
1244 .clk ( l2clk ),
1245 .en ( mul_clken_rep01 ),
1246 .din ( a3_csa3_1_c[82:46] ),
1247 .dout( a3_csa3_1_c_ff[82:46] ),
1248 .se(se),
1249 .siclk(siclk),
1250 .soclk(soclk),
1251 .pce_ov(pce_ov),
1252 .stop(stop));
1253
1254fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a3_c_ff_b (
1255 .scan_in(i_a3_c_ff_b_scanin),
1256 .scan_out(i_a3_c_ff_b_scanout),
1257 .clk ( l2clk ),
1258 .en ( mul_clken_rep0 ),
1259 .din ( a3_csa3_1_c[45:2] ),
1260 .dout( a3_csa3_1_c_ff[45:2] ),
1261 .se(se),
1262 .siclk(siclk),
1263 .soclk(soclk),
1264 .pce_ov(pce_ov),
1265 .stop(stop));
1266
1267
1268// *** *** *** *** *** *** *** *** End : "A3" 9:2 CSA Tree *** *** *** *** *** ***
1269
1270
1271
1272
1273
1274fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a32_xor4_1 (
1275 .din0( a3_csa2_1_s[80:18] ),
1276 .din1( a2_csa2_3_s[80:18] ),
1277 .dout( a32_xr4_1[80:18] ));
1278
1279 assign a32_xr4_1[17:0] = a3_csa2_1_s[17:0];
1280 assign a32_xr4_1[98:81] = a2_csa2_3_s[98:81];
1281
1282
1283fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a32_x_ff_a (
1284 .scan_in(i_a32_x_ff_a_scanin),
1285 .scan_out(i_a32_x_ff_a_scanout),
1286 .clk ( l2clk ),
1287 .en ( mul_clken_rep01 ),
1288 .din ( a32_xr4_1[87:44] ),
1289 .dout( a32_xr_ff[87:44] ),
1290 .se(se),
1291 .siclk(siclk),
1292 .soclk(soclk),
1293 .pce_ov(pce_ov),
1294 .stop(stop));
1295
1296fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a32_x_ff_b (
1297 .scan_in(i_a32_x_ff_b_scanin),
1298 .scan_out(i_a32_x_ff_b_scanout),
1299 .clk ( l2clk ),
1300 .en ( mul_clken_rep0 ),
1301 .din ( a32_xr4_1[43:0] ),
1302 .dout( a32_xr_ff[43:0] ),
1303 .se(se),
1304 .siclk(siclk),
1305 .soclk(soclk),
1306 .pce_ov(pce_ov),
1307 .stop(stop));
1308
1309
1310
1311
1312
1313
1314// *** *** *** *** *** *** *** *** Start : "A2" 9:2 CSA Tree *** *** *** *** *** ***
1315
1316fgu_fpy_dp_msff_macro__stack_88c__width_31 i_a2_be_ff_a (
1317 .scan_in(i_a2_be_ff_a_scanin),
1318 .scan_out(i_a2_be_ff_a_scanout),
1319 .clk ( l2clk ),
1320 .en ( mul_clken_rep01 ),
1321 .din ({a32_xr4_1[98:88] ,
1322 xr_mode_fx1_ ,
1323 be_pout[17:9] ,
1324 be17[4:0] ,
1325 be16[4:0]} ),
1326 .dout({a32_xr_ff[98:88] ,
1327 a2_xr_mode_fx2_ ,
1328 be_pout_ff[17:9] ,
1329 be_ff17[4:0] ,
1330 be_ff16[4:0]} ),
1331 .se(se),
1332 .siclk(siclk),
1333 .soclk(soclk),
1334 .pce_ov(pce_ov),
1335 .stop(stop));
1336
1337fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_be_ff_b (
1338 .scan_in(i_a2_be_ff_b_scanin),
1339 .scan_out(i_a2_be_ff_b_scanout),
1340 .clk ( l2clk ),
1341 .en ( mul_clken_rep0 ),
1342 .din ({be15[4:0] ,
1343 be14[4:0] ,
1344 be13[4:0] ,
1345 be12[4:0] ,
1346 be11[4:0] ,
1347 be10[4:0] ,
1348 be09[4:0] ,
1349 be_hout[16:8]} ),
1350 .dout({be_ff15[4:0] ,
1351 be_ff14[4:0] ,
1352 be_ff13[4:0] ,
1353 be_ff12[4:0] ,
1354 be_ff11[4:0] ,
1355 be_ff10[4:0] ,
1356 be_ff09[4:0] ,
1357 be_hout_ff[16:8]} ),
1358 .se(se),
1359 .siclk(siclk),
1360 .soclk(soclk),
1361 .pce_ov(pce_ov),
1362 .stop(stop));
1363
1364
1365fgu_fpy_dp_buff_macro__stack_88c__width_3 i_a2_rs2_fx1_ebuf (
1366 .din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47] ,rs2_fx1_ebf[31]} ),
1367 .dout({rs2_fx1_ebf2[63] ,rs2_fx1_ebf2[47] ,rs2_fx1_ebf2[31]} ));
1368
1369
1370fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a2_rs2_ff (
1371 .scan_in(i_a2_rs2_ff_scanin),
1372 .scan_out(i_a2_rs2_ff_scanout),
1373 .clk ( l2clk ),
1374 .en ( mul_clken_rep0 ),
1375 .din0({{32{1'b0}},{17{rs2_fx1_ebf2[63]}},fad_rs2_fmt_fx1_rep1[62:48]} ),
1376 .din1({{32{1'b0}},{17{rs2_fx1_ebf2[47]}},fad_rs2_fmt_fx1_rep1[46:32]} ),
1377 .din2({{32{1'b0}},{17{rs2_fx1_ebf2[31]}},fad_rs2_fmt_fx1_rep1[30:16]} ),
1378 .din3( spu_fgu_rs2_fx1[63:0] ),
1379 .din4( fad_rs2_fmt_fx1_rep1[63:0] ),
1380 .sel0( fac_rs2_sel_fx1[0] ),
1381 .sel1( fac_rs2_sel_fx1[1] ),
1382 .sel2( fac_rs2_sel_fx1[2] ),
1383 .sel3( fac_rs2_sel_fx1[3] ),
1384 .dout( a2_rs2_ff[63:0] ),
1385 .se(se),
1386 .siclk(siclk),
1387 .soclk(soclk),
1388 .pce_ov(pce_ov),
1389 .stop(stop));
1390
1391
1392fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a2_rs2_buf (
1393 .din ( a2_rs2_ff[63:0] ),
1394 .dout( a2_rs2[63:0] ));
1395
1396fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a2_rs2_inv (
1397 .din ( a2_rs2_ff[63:0] ),
1398 .dout( a2_rs2_[63:0] ));
1399
1400
1401
1402
1403fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_09 (
1404 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1405 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1406 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1407 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1408 .din4( rs2_3x[64:0] ), // +3 * rs2
1409 .sel0( be_ff09[0] ),
1410 .sel1( be_ff09[1] ),
1411 .sel2( be_ff09[2] ),
1412 .sel3( be_ff09[3] ),
1413 .sel4( be_ff09[4] ),
1414 .dout( bm09[82:18] ));
1415
1416 assign bm09[84:83] = { a2_xr_mode_fx2_ , be_pout_ff[9] }; // 1P
1417 assign bm09[17:16] = { 1'b0 , be_hout_ff[8] };
1418
1419
1420
1421fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_10 (
1422 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1423 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1424 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1425 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1426 .din4( rs2_3x[64:0] ), // +3 * rs2
1427 .sel0( be_ff10[0] ),
1428 .sel1( be_ff10[1] ),
1429 .sel2( be_ff10[2] ),
1430 .sel3( be_ff10[3] ),
1431 .sel4( be_ff10[4] ),
1432 .dout( bm10[84:20] ));
1433
1434 assign bm10[86:85] = { a2_xr_mode_fx2_ , be_pout_ff[10]}; // 1P
1435 assign bm10[19:18] = { 1'b0 , be_hout_ff[9] };
1436
1437
1438
1439fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_11 (
1440 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1441 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1442 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1443 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1444 .din4( rs2_3x[64:0] ), // +3 * rs2
1445 .sel0( be_ff11[0] ),
1446 .sel1( be_ff11[1] ),
1447 .sel2( be_ff11[2] ),
1448 .sel3( be_ff11[3] ),
1449 .sel4( be_ff11[4] ),
1450 .dout( bm11[86:22] ));
1451
1452 assign bm11[88:87] = { a2_xr_mode_fx2_ , be_pout_ff[11]}; // 1P
1453 assign bm11[21:20] = { 1'b0 , be_hout_ff[10]};
1454
1455
1456
1457fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_12 (
1458 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1459 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1460 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1461 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1462 .din4( rs2_3x[64:0] ), // +3 * rs2
1463 .sel0( be_ff12[0] ),
1464 .sel1( be_ff12[1] ),
1465 .sel2( be_ff12[2] ),
1466 .sel3( be_ff12[3] ),
1467 .sel4( be_ff12[4] ),
1468 .dout( bm12[88:24] ));
1469
1470 assign bm12[90:89] = { a2_xr_mode_fx2_ , be_pout_ff[12]}; // 1P
1471 assign bm12[23:22] = { 1'b0 , be_hout_ff[11]};
1472
1473
1474
1475fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_13 (
1476 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1477 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1478 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1479 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1480 .din4( rs2_3x[64:0] ), // +3 * rs2
1481 .sel0( be_ff13[0] ),
1482 .sel1( be_ff13[1] ),
1483 .sel2( be_ff13[2] ),
1484 .sel3( be_ff13[3] ),
1485 .sel4( be_ff13[4] ),
1486 .dout( bm13[90:26] ));
1487
1488 assign bm13[92:91] = { a2_xr_mode_fx2_ , be_pout_ff[13]}; // 1P
1489 assign bm13[25:24] = { 1'b0 , be_hout_ff[12]};
1490
1491
1492
1493fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_14 (
1494 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1495 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1496 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1497 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1498 .din4( rs2_3x[64:0] ), // +3 * rs2
1499 .sel0( be_ff14[0] ),
1500 .sel1( be_ff14[1] ),
1501 .sel2( be_ff14[2] ),
1502 .sel3( be_ff14[3] ),
1503 .sel4( be_ff14[4] ),
1504 .dout( bm14[92:28] ));
1505
1506 assign bm14[94:93] = { a2_xr_mode_fx2_ , be_pout_ff[14]}; // 1P
1507 assign bm14[27:26] = { 1'b0 , be_hout_ff[13]};
1508
1509
1510
1511fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_15 (
1512 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1513 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1514 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1515 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1516 .din4( rs2_3x[64:0] ), // +3 * rs2
1517 .sel0( be_ff15[0] ),
1518 .sel1( be_ff15[1] ),
1519 .sel2( be_ff15[2] ),
1520 .sel3( be_ff15[3] ),
1521 .sel4( be_ff15[4] ),
1522 .dout( bm15[94:30] ));
1523
1524 assign bm15[96:95] = { a2_xr_mode_fx2_ , be_pout_ff[15]}; // 1P
1525 assign bm15[29:28] = { 1'b0 , be_hout_ff[14]};
1526
1527
1528
1529fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_16 (
1530 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1531 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1532 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1533 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1534 .din4( rs2_3x[64:0] ), // +3 * rs2
1535 .sel0( be_ff16[0] ),
1536 .sel1( be_ff16[1] ),
1537 .sel2( be_ff16[2] ),
1538 .sel3( be_ff16[3] ),
1539 .sel4( be_ff16[4] ),
1540 .dout( bm16[96:32] ));
1541
1542 assign bm16[98:97] = { a2_xr_mode_fx2_ , be_pout_ff[16]}; // 1P
1543 assign bm16[31:30] = { 1'b0 , be_hout_ff[15]};
1544
1545
1546
1547fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a2_bm_17 (
1548 .din0({1'b0 , a2_rs2[63:0] }), // +1 * rs2
1549 .din1({ a2_rs2[63:0] , 1'b0 }), // +2 * rs2
1550 .din2({ a2_rs2_[63:0] , 1'b1 }), // -2 * rs2
1551 .din3({1'b1 , a2_rs2_[63:0] }), // -1 * rs2
1552 .din4( rs2_3x[64:0] ), // +3 * rs2
1553 .sel0( be_ff17[0] ),
1554 .sel1( be_ff17[1] ),
1555 .sel2( be_ff17[2] ),
1556 .sel3( be_ff17[3] ),
1557 .sel4( be_ff17[4] ),
1558 .dout( bm17[98:34] ));
1559
1560 assign bm17[100:99] = { a2_xr_mode_fx2_ , be_pout_ff[17]}; // 1P
1561 assign bm17[33:32] = { 1'b0 , be_hout_ff[16]};
1562
1563
1564// bm09[84:16] bm10[86:18] bm11[88:20]
1565
1566fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_4 (
1567 .i0 ({ { 2{1'b0}}, bm09[84:18] }),
1568 .i1 ({ bm10[86:18] }),
1569 .i2 ({ bm11[86:20] , { 2{1'b0}} }),
1570 .carry( a2_csa1_4_c[87:19] ),
1571 .sum ( a2_csa1_4_s[86:18] ));
1572
1573 assign a2_csa1_4_s[17:16] = bm09[17:16];
1574 assign a2_csa1_4_s[88:87] = bm11[88:87];
1575
1576
1577
1578// bm12[90:22] bm13[92:24] bm14[94:26]
1579
1580fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_5 (
1581 .i0 ({ { 2{1'b0}}, bm12[90:24] }),
1582 .i1 ({ bm13[92:24] }),
1583 .i2 ({ bm14[92:26] , { 2{1'b0}} }),
1584 .carry( a2_csa1_5_c[93:25] ),
1585 .sum ( a2_csa1_5_s[92:24] ));
1586
1587 assign a2_csa1_5_s[23:22] = bm12[23:22];
1588 assign a2_csa1_5_s[94:93] = bm14[94:93];
1589
1590
1591
1592// bm15[96:28] bm16[98:30] bm17[100:32]
1593
1594fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa1_6 (
1595 .i0 ({ { 2{1'b0}}, bm15[96:30] }),
1596 .i1 ({ bm16[98:30] }),
1597 .i2 ({ bm17[98:32] , { 2{1'b0}} }),
1598 .carry( a2_csa1_6_c[99:31] ),
1599 .sum ( a2_csa1_6_s[98:30] ));
1600
1601 assign a2_csa1_6_s[29:28] = bm15[29:28];
1602 assign a2_csa1_6_s[100:99] = bm17[100:99];
1603
1604
1605
1606
1607// *** 1st level to 2nd level ***
1608//
1609// csa1_4_s[88:16] csa1_4_c[87:19]
1610// csa1_5_s[94:22] csa1_5_c[93:25]
1611// csa1_6_s[100:28] csa1_6_c[99:31]
1612
1613
1614fgu_fpy_dp_csa32_macro__stack_88c__width_73 a2_csa2_3 (
1615 .i0 ({ { 6{1'b0}}, a2_csa1_4_s[88:22] }),
1616 .i1 ({ a2_csa1_5_s[94:22] }),
1617 .i2 ({ a2_csa1_6_s[94:28], { 6{1'b0}} }),
1618 .carry( a2_csa2_3_c[95:23] ),
1619 .sum ( a2_csa2_3_s[94:22] ));
1620
1621 assign a2_csa2_3_s[21:16] = a2_csa1_4_s[21:16];
1622 assign a2_csa2_3_s[100:95] = a2_csa1_6_s[100:95];
1623
1624
1625
1626fgu_fpy_dp_csa32_macro__stack_88c__width_69 a2_csa2_4 (
1627 .i0 ({ { 6{1'b0}}, a2_csa1_4_c[87:25] }),
1628 .i1 ({ a2_csa1_5_c[93:25] }),
1629 .i2 ({ a2_csa1_6_c[93:31], { 6{1'b0}} }),
1630 .carry( a2_csa2_4_c[94:26] ),
1631 .sum ( a2_csa2_4_s[93:25] ));
1632
1633 assign a2_csa2_4_s[24:19] = a2_csa1_4_c[24:19];
1634 assign a2_csa2_4_s[99:94] = a2_csa1_6_c[99:94];
1635
1636
1637
1638
1639// *** 2nd level to 3rd level ***
1640//
1641// csa2_3_s[100:16] csa2_3_c[95:23]
1642// csa2_4_s[99:19] csa2_4_c[94:26]
1643
1644
1645fgu_fpy_dp_csa42_macro__stack_88c__width_81 a2_csa3_2 (
1646 .i0 ({ a2_csa2_3_s[99:19] }),
1647 .i1 ({ { 4{1'b0}}, a2_csa2_3_c[95:23] , { 4{1'b0}} }),
1648 .i2 ({ { 5{1'b0}}, a2_csa2_4_c[94:26] , { 7{1'b0}} }),
1649 .i3 ({ a2_csa2_4_s[99:19] }),
1650 .cin ( 1'b0 ), // 1 bit
1651 .cout ( a2_csa3_2_unused ), // 1 bit
1652 .carry( a2_csa3_2_c[100:20] ),
1653 .sum ( a2_csa3_2_s[99:19] ));
1654
1655 assign a2_csa3_2_s[18:16] = a2_csa2_3_s[18:16];
1656 assign a2_csa3_2_s[100] = a2_csa2_3_s[100];
1657
1658
1659
1660fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a2_s_ff_a (
1661 .scan_in(i_a2_s_ff_a_scanin),
1662 .scan_out(i_a2_s_ff_a_scanout),
1663 .clk ( l2clk ),
1664 .en ( mul_clken_rep01 ),
1665 .din ( a2_csa3_2_s[100:60] ), // [100] and [18:16] are early
1666 .dout( a2_csa3_2_s_ff[100:60] ),
1667 .se(se),
1668 .siclk(siclk),
1669 .soclk(soclk),
1670 .pce_ov(pce_ov),
1671 .stop(stop));
1672
1673fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_s_ff_b (
1674 .scan_in(i_a2_s_ff_b_scanin),
1675 .scan_out(i_a2_s_ff_b_scanout),
1676 .clk ( l2clk ),
1677 .en ( mul_clken_rep0 ),
1678 .din ( a2_csa3_2_s[59:16] ), // [100] and [18:16] are early
1679 .dout( a2_csa3_2_s_ff[59:16] ),
1680 .se(se),
1681 .siclk(siclk),
1682 .soclk(soclk),
1683 .pce_ov(pce_ov),
1684 .stop(stop));
1685
1686
1687fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a2_c_ff_a (
1688 .scan_in(i_a2_c_ff_a_scanin),
1689 .scan_out(i_a2_c_ff_a_scanout),
1690 .clk ( l2clk ),
1691 .en ( mul_clken_rep01 ),
1692 .din ( a2_csa3_2_c[100:64] ),
1693 .dout( a2_csa3_2_c_ff[100:64] ),
1694 .se(se),
1695 .siclk(siclk),
1696 .soclk(soclk),
1697 .pce_ov(pce_ov),
1698 .stop(stop));
1699
1700fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a2_c_ff_b (
1701 .scan_in(i_a2_c_ff_b_scanin),
1702 .scan_out(i_a2_c_ff_b_scanout),
1703 .clk ( l2clk ),
1704 .en ( mul_clken_rep0 ),
1705 .din ( a2_csa3_2_c[63:20] ),
1706 .dout( a2_csa3_2_c_ff[63:20] ),
1707 .se(se),
1708 .siclk(siclk),
1709 .soclk(soclk),
1710 .pce_ov(pce_ov),
1711 .stop(stop));
1712
1713
1714
1715
1716// *** *** *** *** *** *** *** *** End : "A2" 9:2 CSA Tree *** *** *** *** *** ***
1717
1718
1719
1720
1721// *** *** *** *** *** *** *** *** Start : "A1" 9:2 CSA Tree *** *** *** *** *** ***
1722
1723fgu_fpy_dp_msff_macro__stack_88c__width_64 i_a1_be_ff (
1724 .scan_in(i_a1_be_ff_scanin),
1725 .scan_out(i_a1_be_ff_scanout),
1726 .clk ( l2clk ),
1727 .en ( mul_clken_rep0 ),
1728 .din ({xr_mode_fx1_ ,
1729 be_pout[26:18] ,
1730 be26[4:0] ,
1731 be25[4:0] ,
1732 be24[4:0] ,
1733 be23[4:0] ,
1734 be22[4:0] ,
1735 be21[4:0] ,
1736 be20[4:0] ,
1737 be19[4:0] ,
1738 be18[4:0] ,
1739 be_hout[25:17]} ),
1740 .dout({a1_xr_mode_fx2_ ,
1741 be_pout_ff[26:18] ,
1742 be_ff26[4:0] ,
1743 be_ff25[4:0] ,
1744 be_ff24[4:0] ,
1745 be_ff23[4:0] ,
1746 be_ff22[4:0] ,
1747 be_ff21[4:0] ,
1748 be_ff20[4:0] ,
1749 be_ff19[4:0] ,
1750 be_ff18[4:0] ,
1751 be_hout_ff[25:17]} ),
1752 .se(se),
1753 .siclk(siclk),
1754 .soclk(soclk),
1755 .pce_ov(pce_ov),
1756 .stop(stop));
1757
1758
1759fgu_fpy_dp_buff_macro__stack_88c__width_2 i_a1_rs2_fx1_ebuf (
1760 .din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47]} ),
1761 .dout({rs2_fx1_ebf1[63] ,rs2_fx1_ebf1[47]} ));
1762
1763
1764
1765fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 i_a1_rs2_ff (
1766 .scan_in(i_a1_rs2_ff_scanin),
1767 .scan_out(i_a1_rs2_ff_scanout),
1768 .clk ( l2clk ),
1769 .en ( mul_clken_rep0 ),
1770 .din0({{32{1'b0}},{17{rs2_fx1_ebf1[63]}},fad_rs2_fmt_fx1_rep0[62:48]} ),
1771 .din1({{32{1'b0}},{17{rs2_fx1_ebf1[47]}},fad_rs2_fmt_fx1_rep0[46:32]} ),
1772 .din2( spu_fgu_rs2_fx1[63:0] ),
1773 .din3( fad_rs2_fmt_fx1_rep0[63:0] ),
1774 .sel0( fac_rs2_sel_fx1[0] ),
1775 .sel1( fac_rs2_sel_fx1[2] ),
1776 .sel2( fac_rs2_sel_fx1[3] ),
1777 .dout( a1_rs2_ff[63:0] ),
1778 .se(se),
1779 .siclk(siclk),
1780 .soclk(soclk),
1781 .pce_ov(pce_ov),
1782 .stop(stop));
1783
1784
1785fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a1_rs2_buf (
1786 .din ( a1_rs2_ff[63:0] ),
1787 .dout( a1_rs2[63:0] ));
1788
1789fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a1_rs2_inv (
1790 .din ( a1_rs2_ff[63:0] ),
1791 .dout( a1_rs2_[63:0] ));
1792
1793
1794
1795
1796fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_18 (
1797 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1798 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1799 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1800 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1801 .din4( rs2_3x[64:0] ), // +3 * rs2
1802 .sel0( be_ff18[0] ),
1803 .sel1( be_ff18[1] ),
1804 .sel2( be_ff18[2] ),
1805 .sel3( be_ff18[3] ),
1806 .sel4( be_ff18[4] ),
1807 .dout( bm18[100:36] ));
1808
1809 assign bm18[102:101] = { a1_xr_mode_fx2_ , be_pout_ff[18]}; // 1P
1810 assign bm18[35:34] = { 1'b0 , be_hout_ff[17]};
1811
1812
1813
1814fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_19 (
1815 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1816 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1817 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1818 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1819 .din4( rs2_3x[64:0] ), // +3 * rs2
1820 .sel0( be_ff19[0] ),
1821 .sel1( be_ff19[1] ),
1822 .sel2( be_ff19[2] ),
1823 .sel3( be_ff19[3] ),
1824 .sel4( be_ff19[4] ),
1825 .dout( bm19[102:38] ));
1826
1827 assign bm19[104:103] = { a1_xr_mode_fx2_ , be_pout_ff[19]}; // 1P
1828 assign bm19[37:36] = { 1'b0 , be_hout_ff[18]};
1829
1830
1831
1832fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_20 (
1833 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1834 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1835 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1836 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1837 .din4( rs2_3x[64:0] ), // +3 * rs2
1838 .sel0( be_ff20[0] ),
1839 .sel1( be_ff20[1] ),
1840 .sel2( be_ff20[2] ),
1841 .sel3( be_ff20[3] ),
1842 .sel4( be_ff20[4] ),
1843 .dout( bm20[104:40] ));
1844
1845 assign bm20[106:105] = { a1_xr_mode_fx2_ , be_pout_ff[20]}; // 1P
1846 assign bm20[39:38] = { 1'b0 , be_hout_ff[19]};
1847
1848
1849
1850fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_21 (
1851 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1852 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1853 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1854 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1855 .din4( rs2_3x[64:0] ), // +3 * rs2
1856 .sel0( be_ff21[0] ),
1857 .sel1( be_ff21[1] ),
1858 .sel2( be_ff21[2] ),
1859 .sel3( be_ff21[3] ),
1860 .sel4( be_ff21[4] ),
1861 .dout( bm21[106:42] ));
1862
1863 assign bm21[108:107] = { a1_xr_mode_fx2_ , be_pout_ff[21]}; // 1P
1864 assign bm21[41:40] = { 1'b0 , be_hout_ff[20]};
1865
1866
1867
1868fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_22 (
1869 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1870 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1871 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1872 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1873 .din4( rs2_3x[64:0] ), // +3 * rs2
1874 .sel0( be_ff22[0] ),
1875 .sel1( be_ff22[1] ),
1876 .sel2( be_ff22[2] ),
1877 .sel3( be_ff22[3] ),
1878 .sel4( be_ff22[4] ),
1879 .dout( bm22[108:44] ));
1880
1881 assign bm22[110:109] = { a1_xr_mode_fx2_ , be_pout_ff[22]}; // 1P
1882 assign bm22[43:42] = { 1'b0 , be_hout_ff[21]};
1883
1884
1885
1886fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_23 (
1887 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1888 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1889 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1890 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1891 .din4( rs2_3x[64:0] ), // +3 * rs2
1892 .sel0( be_ff23[0] ),
1893 .sel1( be_ff23[1] ),
1894 .sel2( be_ff23[2] ),
1895 .sel3( be_ff23[3] ),
1896 .sel4( be_ff23[4] ),
1897 .dout( bm23[110:46] ));
1898
1899 assign bm23[112:111] = { a1_xr_mode_fx2_ , be_pout_ff[23]}; // 1P
1900 assign bm23[45:44] = { 1'b0 , be_hout_ff[22]};
1901
1902
1903
1904fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_24 (
1905 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1906 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1907 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1908 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1909 .din4( rs2_3x[64:0] ), // +3 * rs2
1910 .sel0( be_ff24[0] ),
1911 .sel1( be_ff24[1] ),
1912 .sel2( be_ff24[2] ),
1913 .sel3( be_ff24[3] ),
1914 .sel4( be_ff24[4] ),
1915 .dout( bm24[112:48] ));
1916
1917 assign bm24[114:113] = { a1_xr_mode_fx2_ , be_pout_ff[24]}; // 1P
1918 assign bm24[47:46] = { 1'b0 , be_hout_ff[23]};
1919
1920
1921
1922fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_25 (
1923 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1924 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1925 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1926 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1927 .din4( rs2_3x[64:0] ), // +3 * rs2
1928 .sel0( be_ff25[0] ),
1929 .sel1( be_ff25[1] ),
1930 .sel2( be_ff25[2] ),
1931 .sel3( be_ff25[3] ),
1932 .sel4( be_ff25[4] ),
1933 .dout( bm25[114:50] ));
1934
1935 assign bm25[116:115] = { a1_xr_mode_fx2_ , be_pout_ff[25]}; // 1P
1936 assign bm25[49:48] = { 1'b0 , be_hout_ff[24]};
1937
1938
1939
1940fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a1_bm_26 (
1941 .din0({1'b0 , a1_rs2[63:0] }), // +1 * rs2
1942 .din1({ a1_rs2[63:0] , 1'b0 }), // +2 * rs2
1943 .din2({ a1_rs2_[63:0] , 1'b1 }), // -2 * rs2
1944 .din3({1'b1 , a1_rs2_[63:0] }), // -1 * rs2
1945 .din4( rs2_3x[64:0] ), // +3 * rs2
1946 .sel0( be_ff26[0] ),
1947 .sel1( be_ff26[1] ),
1948 .sel2( be_ff26[2] ),
1949 .sel3( be_ff26[3] ),
1950 .sel4( be_ff26[4] ),
1951 .dout( bm26[116:52] ));
1952
1953 assign bm26[118:117] = { a1_xr_mode_fx2_ , be_pout_ff[26]}; // 1P
1954 assign bm26[51:50] = { 1'b0 , be_hout_ff[25]};
1955
1956
1957
1958// bm18[102:34] bm19[104:36] bm20[106:38]
1959
1960fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_7 (
1961 .i0 ({ { 2{1'b0}}, bm18[102:36] }),
1962 .i1 ({ bm19[104:36] }),
1963 .i2 ({ bm20[104:38] , { 2{1'b0}} }),
1964 .carry( a1_csa1_7_c[105:37] ),
1965 .sum ( a1_csa1_7_s[104:36] ));
1966
1967 assign a1_csa1_7_s[35:34] = bm18[35:34];
1968 assign a1_csa1_7_s[106:105] = bm20[106:105];
1969
1970
1971
1972// bm21[108:40] bm22[110:42] bm23[112:44]
1973
1974fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_8 (
1975 .i0 ({ { 2{1'b0}}, bm21[108:42] }),
1976 .i1 ({ bm22[110:42] }),
1977 .i2 ({ bm23[110:44] , { 2{1'b0}} }),
1978 .carry( a1_csa1_8_c[111:43] ),
1979 .sum ( a1_csa1_8_s[110:42] ));
1980
1981 assign a1_csa1_8_s[41:40] = bm21[41:40];
1982 assign a1_csa1_8_s[112:111] = bm23[112:111];
1983
1984
1985
1986// bm24[114:46] bm25[116:48] bm26[118:50]
1987
1988fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa1_9 (
1989 .i0 ({ { 2{1'b0}}, bm24[114:48] }),
1990 .i1 ({ bm25[116:48] }),
1991 .i2 ({ bm26[116:50] , { 2{1'b0}} }),
1992 .carry( a1_csa1_9_c[117:49] ),
1993 .sum ( a1_csa1_9_s[116:48] ));
1994
1995 assign a1_csa1_9_s[47:46] = bm24[47:46];
1996 assign a1_csa1_9_s[118:117] = bm26[118:117];
1997
1998
1999
2000// *** 1st level to 2nd level ***
2001//
2002// csa1_7_s[106:34] csa1_7_c[105:37]
2003// csa1_8_s[112:40] csa1_8_c[111:43]
2004// csa1_9_s[118:46] csa1_9_c[117:49]
2005
2006
2007fgu_fpy_dp_csa32_macro__stack_88c__width_73 a1_csa2_5 (
2008 .i0 ({ { 6{1'b0}}, a1_csa1_7_s[106:40] }),
2009 .i1 ({ a1_csa1_8_s[112:40] }),
2010 .i2 ({ a1_csa1_9_s[112:46],{ 6{1'b0}} }),
2011 .carry( a1_csa2_5_c[113:41] ),
2012 .sum ( a1_csa2_5_s[112:40] ));
2013
2014 assign a1_csa2_5_s[39:34] = a1_csa1_7_s[39:34];
2015 assign a1_csa2_5_s[118:113] = a1_csa1_9_s[118:113];
2016
2017
2018
2019fgu_fpy_dp_csa32_macro__stack_88c__width_69 a1_csa2_6 (
2020 .i0 ({ { 6{1'b0}}, a1_csa1_7_c[105:43] }),
2021 .i1 ({ a1_csa1_8_c[111:43] }),
2022 .i2 ({ a1_csa1_9_c[111:49],{ 6{1'b0}} }),
2023 .carry( a1_csa2_6_c[112:44] ),
2024 .sum ( a1_csa2_6_s[111:43] ));
2025
2026 assign a1_csa2_6_s[42:37] = a1_csa1_7_c[42:37];
2027 assign a1_csa2_6_s[117:112] = a1_csa1_9_c[117:112];
2028
2029
2030
2031// *** 2nd level to 3rd level ***
2032//
2033// csa2_5_s[118:34] csa2_5_c[113:41]
2034// csa2_6_s[117:37] csa2_6_c[112:44]
2035
2036
2037fgu_fpy_dp_csa42_macro__stack_88c__width_81 a1_csa3_3 (
2038 .i0 ({ a1_csa2_5_s[117:37] }),
2039 .i1 ({ { 4{1'b0}}, a1_csa2_5_c[113:41], { 4{1'b0}} }),
2040 .i2 ({ { 5{1'b0}}, a1_csa2_6_c[112:44], { 7{1'b0}} }),
2041 .i3 ({ a1_csa2_6_s[117:37] }),
2042 .cin ( 1'b0 ), // 1 bit
2043 .cout ( a1_csa3_3_unused ), // 1 bit
2044 .carry( a1_csa3_3_c[118:38] ),
2045 .sum ( a1_csa3_3_s[117:37] ));
2046
2047 assign a1_csa3_3_s[36:34] = a1_csa2_5_s[36:34];
2048 assign a1_csa3_3_s[118] = a1_csa2_5_s[118];
2049
2050
2051
2052fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a1_s_ff_a (
2053 .scan_in(i_a1_s_ff_a_scanin),
2054 .scan_out(i_a1_s_ff_a_scanout),
2055 .clk ( l2clk ),
2056 .en ( mul_clken_rep01 ),
2057 .din ( a1_csa3_3_s[118:78] ), // [118] and [36:34] are early
2058 .dout( a1_csa3_3_s_ff[118:78] ),
2059 .se(se),
2060 .siclk(siclk),
2061 .soclk(soclk),
2062 .pce_ov(pce_ov),
2063 .stop(stop));
2064
2065fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a1_s_ff_b (
2066 .scan_in(i_a1_s_ff_b_scanin),
2067 .scan_out(i_a1_s_ff_b_scanout),
2068 .clk ( l2clk ),
2069 .en ( mul_clken_rep0 ),
2070 .din ( a1_csa3_3_s[77:34] ), // [118] and [36:34] are early
2071 .dout( a1_csa3_3_s_ff[77:34] ),
2072 .se(se),
2073 .siclk(siclk),
2074 .soclk(soclk),
2075 .pce_ov(pce_ov),
2076 .stop(stop));
2077
2078
2079fgu_fpy_dp_msff_macro__stack_88c__width_37 i_a1_c_ff_a (
2080 .scan_in(i_a1_c_ff_a_scanin),
2081 .scan_out(i_a1_c_ff_a_scanout),
2082 .clk ( l2clk ),
2083 .en ( mul_clken_rep01 ),
2084 .din ( a1_csa3_3_c[118:82] ),
2085 .dout( a1_csa3_3_c_ff[118:82] ),
2086 .se(se),
2087 .siclk(siclk),
2088 .soclk(soclk),
2089 .pce_ov(pce_ov),
2090 .stop(stop));
2091
2092fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a1_c_ff_b (
2093 .scan_in(i_a1_c_ff_b_scanin),
2094 .scan_out(i_a1_c_ff_b_scanout),
2095 .clk ( l2clk ),
2096 .en ( mul_clken_rep0 ),
2097 .din ( a1_csa3_3_c[81:38] ),
2098 .dout( a1_csa3_3_c_ff[81:38] ),
2099 .se(se),
2100 .siclk(siclk),
2101 .soclk(soclk),
2102 .pce_ov(pce_ov),
2103 .stop(stop));
2104
2105
2106
2107// *** *** *** *** *** *** *** *** End : "A1" 9:2 CSA Tree *** *** *** *** *** ***
2108
2109
2110fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a10_xor4_2 (
2111 .din0( a1_csa2_5_s[116:54] ),
2112 .din1( a0_xr_in[116:54] ),
2113 .dout( a10_xr4_2[116:54] ));
2114
2115 assign a10_xr4_2[53:36] = a1_csa2_5_s[53:36];
2116 assign a10_xr4_2[126:117] = a0_xr_in[126:117];
2117
2118
2119fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a10_x_ff_a (
2120 .scan_in(i_a10_x_ff_a_scanin),
2121 .scan_out(i_a10_x_ff_a_scanout),
2122 .clk ( l2clk ),
2123 .en ( mul_clken_rep01 ),
2124 .din ( a10_xr4_2[123:80] ),
2125 .dout( a10_xr_ff[123:80] ),
2126 .se(se),
2127 .siclk(siclk),
2128 .soclk(soclk),
2129 .pce_ov(pce_ov),
2130 .stop(stop));
2131
2132fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a10_x_ff_b (
2133 .scan_in(i_a10_x_ff_b_scanin),
2134 .scan_out(i_a10_x_ff_b_scanout),
2135 .clk ( l2clk ),
2136 .en ( mul_clken_rep0 ),
2137 .din ( a10_xr4_2[79:36] ),
2138 .dout( a10_xr_ff[79:36] ),
2139 .se(se),
2140 .siclk(siclk),
2141 .soclk(soclk),
2142 .pce_ov(pce_ov),
2143 .stop(stop));
2144
2145
2146
2147// *** *** *** *** *** *** *** *** Start : "A0" 6:2 CSA Tree *** *** *** *** *** ***
2148
2149fgu_fpy_dp_msff_macro__stack_88c__width_41 i_a0_be_ff (
2150 .scan_in(i_a0_be_ff_scanin),
2151 .scan_out(i_a0_be_ff_scanout),
2152 .clk ( l2clk ),
2153 .en ( mul_clken_rep0 ),
2154 .din ({a10_xr4_2[126:124] ,
2155 xr_mode_fx1_ ,
2156 be_pout[31:27] ,
2157 be32_b0 ,
2158 be31[4:0] ,
2159 be30[4:0] ,
2160 be29[4:0] ,
2161 be28[4:0] ,
2162 be27[4:0] ,
2163 be_hout[31:26]} ),
2164 .dout({a10_xr_ff[126:124] ,
2165 a0_xr_mode_fx2_ ,
2166 be_pout_ff[31:27] ,
2167 be_ff32_b0 ,
2168 be_ff31[4:0] ,
2169 be_ff30[4:0] ,
2170 be_ff29[4:0] ,
2171 be_ff28[4:0] ,
2172 be_ff27[4:0] ,
2173 be_hout_ff[31:26]} ),
2174 .se(se),
2175 .siclk(siclk),
2176 .soclk(soclk),
2177 .pce_ov(pce_ov),
2178 .stop(stop));
2179
2180
2181fgu_fpy_dp_buff_macro__stack_88c__width_2 i_a0_rs2_fx1_ebuf (
2182 .din ({rs2_fx1_ebf[63] ,rs2_fx1_ebf[47]} ),
2183 .dout({rs2_fx1_ebf0[63] ,rs2_fx1_ebf0[47]} ));
2184
2185
2186
2187fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 i_a0_rs2_ff (
2188 .scan_in(i_a0_rs2_ff_scanin),
2189 .scan_out(i_a0_rs2_ff_scanout),
2190 .clk ( l2clk ),
2191 .en ( mul_clken_rep0 ),
2192 .din0({{32{1'b0}},{17{rs2_fx1_ebf0[47]}},fad_rs2_fmt_fx1_rep0[46:32]} ),
2193 .din1({{32{1'b0}},{17{rs2_fx1_ebf0[63]}},fad_rs2_fmt_fx1_rep0[62:48]} ),
2194 .din2( spu_fgu_rs2_fx1[63:0] ),
2195 .din3( fad_rs2_fmt_fx1_rep0[63:0] ),
2196 .sel0( fac_rs2_sel_fx1[1] ),
2197 .sel1( fac_rs2_sel_fx1[2] ),
2198 .sel2( fac_rs2_sel_fx1[3] ),
2199 .dout( a0_rs2_ff[63:0] ),
2200 .se(se),
2201 .siclk(siclk),
2202 .soclk(soclk),
2203 .pce_ov(pce_ov),
2204 .stop(stop));
2205
2206
2207fgu_fpy_dp_buff_macro__stack_88c__width_64 i_a0_rs2_buf (
2208 .din ( a0_rs2_ff[63:0] ),
2209 .dout( a0_rs2[63:0] ));
2210
2211fgu_fpy_dp_inv_macro__stack_88c__width_64 i_a0_rs2_inv (
2212 .din ( a0_rs2_ff[63:0] ),
2213 .dout( a0_rs2_[63:0] ));
2214
2215
2216
2217
2218fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_27 (
2219 .din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
2220 .din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
2221 .din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
2222 .din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
2223 .din4( rs2_3x[64:0] ), // +3 * rs2
2224 .sel0( be_ff27[0] ),
2225 .sel1( be_ff27[1] ),
2226 .sel2( be_ff27[2] ),
2227 .sel3( be_ff27[3] ),
2228 .sel4( be_ff27[4] ),
2229 .dout( bm27[118:54] ));
2230
2231 assign bm27[120:119] = { a0_xr_mode_fx2_ , be_pout_ff[27]}; // 1P
2232 assign bm27[53:52] = { 1'b0 , be_hout_ff[26]};
2233
2234
2235
2236fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_28 (
2237 .din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
2238 .din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
2239 .din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
2240 .din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
2241 .din4( rs2_3x[64:0] ), // +3 * rs2
2242 .sel0( be_ff28[0] ),
2243 .sel1( be_ff28[1] ),
2244 .sel2( be_ff28[2] ),
2245 .sel3( be_ff28[3] ),
2246 .sel4( be_ff28[4] ),
2247 .dout( bm28[120:56] ));
2248
2249 assign bm28[122:121] = { a0_xr_mode_fx2_ , be_pout_ff[28]}; // 1P
2250 assign bm28[55:54] = { 1'b0 , be_hout_ff[27]};
2251
2252
2253
2254fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_29 (
2255 .din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
2256 .din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
2257 .din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
2258 .din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
2259 .din4( rs2_3x[64:0] ), // +3 * rs2
2260 .sel0( be_ff29[0] ),
2261 .sel1( be_ff29[1] ),
2262 .sel2( be_ff29[2] ),
2263 .sel3( be_ff29[3] ),
2264 .sel4( be_ff29[4] ),
2265 .dout( bm29[122:58] ));
2266
2267 assign bm29[124:123] = { a0_xr_mode_fx2_ , be_pout_ff[29]}; // 1P
2268 assign bm29[57:56] = { 1'b0 , be_hout_ff[28]};
2269
2270
2271
2272fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_30 (
2273 .din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
2274 .din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
2275 .din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
2276 .din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
2277 .din4( rs2_3x[64:0] ), // +3 * rs2
2278 .sel0( be_ff30[0] ),
2279 .sel1( be_ff30[1] ),
2280 .sel2( be_ff30[2] ),
2281 .sel3( be_ff30[3] ),
2282 .sel4( be_ff30[4] ),
2283 .dout( bm30[124:60] ));
2284
2285 assign bm30[126:125] = { a0_xr_mode_fx2_ , be_pout_ff[30]}; // 1P
2286 assign bm30[59:58] = { 1'b0 , be_hout_ff[29]};
2287
2288
2289
2290fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 i_a0_bm_31 (
2291 .din0({1'b0 , a0_rs2[63:0] }), // +1 * rs2
2292 .din1({ a0_rs2[63:0] , 1'b0 }), // +2 * rs2
2293 .din2({ a0_rs2_[63:0] , 1'b1 }), // -2 * rs2
2294 .din3({1'b1 , a0_rs2_[63:0] }), // -1 * rs2
2295 .din4( rs2_3x[64:0] ), // +3 * rs2
2296 .sel0( be_ff31[0] ),
2297 .sel1( be_ff31[1] ),
2298 .sel2( be_ff31[2] ),
2299 .sel3( be_ff31[3] ),
2300 .sel4( be_ff31[4] ),
2301 .dout( bm31[126:62] ));
2302
2303 assign bm31[127] = { be_pout_ff[31]}; // 1P
2304 assign bm31[61:60] = { 1'b0 , be_hout_ff[30]};
2305
2306
2307fgu_fpy_dp_mux_macro__mux_aope__ports_2__stack_88c__width_64 i_a0_bm_32 (
2308 .din0({ a0_rs2[63:0] }), // +1 * rs2
2309 .din1( {64{1'b0}} ),
2310 .sel0( be_ff32_b0 ),
2311 .dout( bm32[127:64] ));
2312
2313 assign bm32[135:128] = {8{a0_xr_mode_fx2_} }; // Extend beyond ACCUM range
2314 assign bm32[63:62] = { 1'b0 , be_hout_ff[31]};
2315
2316
2317
2318// bm27[120:52] bm28[122:54] bm29[124:56]
2319
2320fgu_fpy_dp_csa32_macro__stack_88c__width_69 a0_csa2_7 (
2321 .i0 ({ { 2{1'b0}}, bm27[120:54] }),
2322 .i1 ({ bm28[122:54] }),
2323 .i2 ({ bm29[122:56] , { 2{1'b0}} }),
2324 .carry( a0_csa2_7_c[123:55] ),
2325 .sum ( a0_csa2_7_s[122:54] ));
2326
2327 assign a0_csa2_7_s[53:52] = bm27[53:52];
2328 assign a0_csa2_7_s[124:123] = bm29[124:123];
2329
2330
2331
2332// bm30[126:58] bm31[127:60] bm32[135:62]
2333
2334fgu_fpy_dp_csa32_macro__stack_88c__width_68 a0_csa2_8 (
2335 .i0 ({ { 1{1'b0}}, bm30[126:60] }),
2336 .i1 ({ bm31[127:60] }),
2337 .i2 ({ bm32[127:62] , { 2{1'b0}} }),
2338 .carry( a0_csa2_8_c[128:61] ),
2339 .sum ( a0_csa2_8_s[127:60] ));
2340
2341 assign a0_csa2_8_s[59:58] = bm30[59:58];
2342 assign a0_csa2_8_s[135:128] = bm32[135:128];
2343
2344
2345// *** 2nd level to 3rd level ***
2346//
2347// csa2_7_s[124:52] csa2_7_c[123:55]
2348// csa2_8_s[135:58] csa2_8_c[128:61]
2349
2350
2351fgu_fpy_dp_csa42_macro__stack_88c__width_74 a0_csa3_4 (
2352 .i0 ({ { 4{1'b0}}, a0_csa2_7_s[124:55] }),
2353 .i1 ({ { 5{1'b0}}, a0_csa2_7_c[123:55] }),
2354 .i2 ({ a0_csa2_8_c[128:61], { 6{1'b0}} }),
2355 .i3 ({ a0_csa2_8_s[128:58], { 3{1'b0}} }),
2356 .cin ( 1'b0 ), // 1 bit
2357 .cout ( a0_csa3_4_unused ), // 1 bit
2358 .carry( a0_csa3_4_c[129:56] ),
2359 .sum ( a0_csa3_4_s[128:55] ));
2360
2361 assign a0_csa3_4_s[54:52] = a0_csa2_7_s[54:52];
2362 assign a0_csa3_4_s[135:129] = a0_csa2_8_s[135:129];
2363
2364
2365
2366// a0_csa2_7_s[122:54] a0_csa2_8_s[126:60]
2367
2368fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a0_xor3_0 (
2369 .din0( a0_csa2_7_s[122:60] ),
2370 .din1( a0_csa2_8_s[122:60] ),
2371 .dout( a0_xr_in[122:60] ));
2372
2373 assign a0_xr_in[59:54] = a0_csa2_7_s[59:54];
2374 assign a0_xr_in[126:123] = a0_csa2_8_s[126:123];
2375
2376
2377
2378fgu_fpy_dp_msff_macro__stack_88c__width_40 i_a0_s_ff_a (
2379 .scan_in(i_a0_s_ff_a_scanin),
2380 .scan_out(i_a0_s_ff_a_scanout),
2381 .clk ( l2clk ),
2382 .en ( mul_clken_rep01 ),
2383 .din ( a0_csa3_4_s[135:96] ),
2384 .dout( a0_csa3_4_s_ff[135:96] ),
2385 .se(se),
2386 .siclk(siclk),
2387 .soclk(soclk),
2388 .pce_ov(pce_ov),
2389 .stop(stop));
2390
2391fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a0_s_ff_b (
2392 .scan_in(i_a0_s_ff_b_scanin),
2393 .scan_out(i_a0_s_ff_b_scanout),
2394 .clk ( l2clk ),
2395 .en ( mul_clken_rep0 ),
2396 .din ( a0_csa3_4_s[95:52] ),
2397 .dout( a0_csa3_4_s_ff[95:52] ),
2398 .se(se),
2399 .siclk(siclk),
2400 .soclk(soclk),
2401 .pce_ov(pce_ov),
2402 .stop(stop));
2403
2404
2405fgu_fpy_dp_msff_macro__stack_88c__width_36 i_a0_c_ff_a (
2406 .scan_in(i_a0_c_ff_a_scanin),
2407 .scan_out(i_a0_c_ff_a_scanout),
2408 .clk ( l2clk ),
2409 .en ( mul_clken_rep01 ),
2410 .din (a0_csa3_4_c[129:94] ),
2411 .dout(a0_csa3_4_c_ff[129:94] ),
2412 .se(se),
2413 .siclk(siclk),
2414 .soclk(soclk),
2415 .pce_ov(pce_ov),
2416 .stop(stop));
2417
2418fgu_fpy_dp_msff_macro__stack_88c__width_44 i_a0_c_ff_b (
2419 .scan_in(i_a0_c_ff_b_scanin),
2420 .scan_out(i_a0_c_ff_b_scanout),
2421 .clk ( l2clk ),
2422 .en ( mul_clken_rep0 ),
2423 .din ({a0_csa3_4_c[93:87] , fac_accum_sel_fx3[6:2] , fac_accum_sel_fx3[0] , a0_csa3_4_c[86:56]} ),
2424 .dout({a0_csa3_4_c_ff[93:87] , accum_sel_fx4[6:2] , accum_sel_fx4_b0 , a0_csa3_4_c_ff[86:56]} ),
2425 .se(se),
2426 .siclk(siclk),
2427 .soclk(soclk),
2428 .pce_ov(pce_ov),
2429 .stop(stop));
2430
2431
2432// *** *** *** *** *** *** *** *** End : "A0" 6:2 CSA Tree *** *** *** *** *** ***
2433
2434
2435
2436
2437// *** *** *** *** *** *** *** *** Start : "A4" 8:2 CSA Tree *** *** *** *** *** ***
2438
2439
2440
2441// *** 8x16 3rd level to 4th level ***
2442//
2443// Define Raw Result = {M3,M2,M1,M0}
2444//
2445// M0 = a3_csa3_1_s_ff[31:0] a3_csa3_1_c_ff[31:2]
2446// M1 = a2_csa3_2_s_ff[49:18] a2_csa3_2_c_ff[49:20]
2447// M2 = a1_csa3_3_s_ff[67:36] a1_csa3_3_c_ff[67:38]
2448// M3 = a0_csa3_4_s_ff[85:54] a0_csa3_4_c_ff[85:56]
2449
2450
2451
2452fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_1 (
2453 .i0 ({ a3_csa3_1_s_ff[31:7] }),
2454 .i1 ({ a3_csa3_1_c_ff[31:7] }),
2455 .i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
2456 { 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
2457 .carry({ a4_8x16csa4_1_unused , a4_8x16csa4_1_c[31:8]}),
2458 .sum ( a4_8x16csa4_1_s[31:7] ));
2459
2460 assign a4_8x16csa4_1_s[6:0] = a3_csa3_1_s_ff[6:0];
2461 assign a4_8x16csa4_1_c[7] = 1'b0;
2462 assign a4_8x16csa4_1_c[6:2] = a3_csa3_1_c_ff[6:2];
2463
2464
2465
2466fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_2 (
2467 .i0 ({ a2_csa3_2_s_ff[49:25] }),
2468 .i1 ({ a2_csa3_2_c_ff[49:25] }),
2469 .i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
2470 { 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
2471 .carry({ a4_8x16csa4_2_unused , a4_8x16csa4_2_c[49:26]}),
2472 .sum ( a4_8x16csa4_2_s[49:25] ));
2473
2474 assign a4_8x16csa4_2_s[24:18] = a2_csa3_2_s_ff[24:18];
2475 assign a4_8x16csa4_2_c[25] = 1'b0;
2476 assign a4_8x16csa4_2_c[24:20] = a2_csa3_2_c_ff[24:20];
2477
2478
2479
2480fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_3 (
2481 .i0 ({ a1_csa3_3_s_ff[67:43] }),
2482 .i1 ({ a1_csa3_3_c_ff[67:43] }),
2483 .i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
2484 { 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
2485 .carry({ a4_8x16csa4_3_unused , a4_8x16csa4_3_c[67:44]}),
2486 .sum ( a4_8x16csa4_3_s[67:43] ));
2487
2488 assign a4_8x16csa4_3_s[42:36] = a1_csa3_3_s_ff[42:36];
2489 assign a4_8x16csa4_3_c[43] = 1'b0;
2490 assign a4_8x16csa4_3_c[42:38] = a1_csa3_3_c_ff[42:38];
2491
2492
2493
2494fgu_fpy_dp_csa32_macro__stack_88c__width_25 a4_8x16csa4_4 (
2495 .i0 ({ a0_csa3_4_s_ff[85:61] }),
2496 .i1 ({ a0_csa3_4_c_ff[85:61] }),
2497 .i2 ({ {16{1'b0}}, fac_8x16_rnd_fx3[1],
2498 { 7{1'b0}}, fac_8x16_rnd_fx3[0] }),
2499 .carry({ a4_8x16csa4_4_unused , a4_8x16csa4_4_c[85:62]}),
2500 .sum ( a4_8x16csa4_4_s[85:61] ));
2501
2502 assign a4_8x16csa4_4_s[60:54] = a0_csa3_4_s_ff[60:54];
2503 assign a4_8x16csa4_4_c[61] = 1'b0;
2504 assign a4_8x16csa4_4_c[60:56] = a0_csa3_4_c_ff[60:56];
2505
2506
2507
2508
2509
2510
2511
2512// *** XOR 4th level to 5th level ***
2513//
2514
2515
2516fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 a4_xor5_1 (
2517 .din0( a32_xr_ff[98:36] ),
2518 .din1( a10_xr_ff[98:36] ),
2519 .dout( a4_xr5_1[98:36] ));
2520
2521 assign a4_xr5_1[35:0] = a32_xr_ff[35:0];
2522 assign a4_xr5_1[126:99] = a10_xr_ff[126:99];
2523
2524
2525
2526
2527// *** 4th level to 5th level ***
2528//
2529// a3_csa3_1_s_ff[82:0] a3_csa3_1_c_ff[82:2]
2530// a2_csa3_2_s_ff[100:16] a2_csa3_1_c_ff[100:20]
2531//
2532// a1_csa3_3_s_ff[118:34] a1_csa3_3_c_ff[118:38]
2533// a0_csa3_4_s_ff[135:52] a0_csa3_4_c_ff[129:56]
2534
2535
2536
2537fgu_fpy_dp_csa42_macro__stack_88c__width_3 a4_csa4_1a (
2538 .i0 ({ { 3{1'b0}} }),
2539 .i1 ({ { 3{1'b0}} }),
2540 .i2 ({ a2_csa3_2_c_ff[100:98] }),
2541 .i3 ({ a2_csa3_2_s_ff[100:98] }),
2542 .cin ( a4_csa4_1b_cout ), // 1 bit
2543 .cout ( a4_csa4_1a_unused ), // 1 bit
2544 .carry( a4_csa4_1_c[101:99] ),
2545 .sum ( a4_csa4_1_s[100:98] ));
2546
2547
2548fgu_fpy_dp_csa42_macro__stack_96c__width_96 a4_csa4_1b (
2549 .i0 ({ {15{1'b0}}, a3_csa3_1_s_ff[82:2] }),
2550 .i1 ({ {15{1'b0}}, a3_csa3_1_c_ff[82:2] }),
2551 .i2 ({ a2_csa3_2_c_ff[97:20] , {18{1'b0}} }),
2552 .i3 ({ a2_csa3_2_s_ff[97:16] , {14{1'b0}} }),
2553 .cin ( 1'b0 ), // 1 bit
2554 .cout ( a4_csa4_1b_cout ), // 1 bit
2555 .carry( a4_csa4_1_c[98:3] ),
2556 .sum ( a4_csa4_1_s[97:2] ));
2557
2558 assign a4_csa4_1_s[1:0] = a3_csa3_1_s_ff[1:0];
2559
2560
2561
2562fgu_fpy_dp_csa42_macro__stack_96c__width_92 a4_csa4_2 (
2563 .i0 ({ {11{1'b0}}, a1_csa3_3_s_ff[118:38] }),
2564 .i1 ({ {11{1'b0}}, a1_csa3_3_c_ff[118:38] }),
2565 .i2 ({ a0_csa3_4_c_ff[129:56], {18{1'b0}} }),
2566 .i3 ({ a0_csa3_4_s_ff[129:52], {14{1'b0}} }),
2567 .cin ( 1'b0 ), // 1 bit
2568 .cout ( a4_csa4_2_unused ), // 1 bit
2569 .carry( a4_csa4_2_c[130:39] ),
2570 .sum ( a4_csa4_2_s[129:38] ));
2571
2572 assign a4_csa4_2_s[37:34] = a1_csa3_3_s_ff[37:34];
2573 assign a4_csa4_2_s[135:130] = a0_csa3_4_s_ff[135:130];
2574
2575
2576
2577
2578fgu_fpy_dp_csa42_macro__stack_88c__width_32 a4_csa5_1a (
2579 .i0 ({ {30{1'b0}}, a4_csa4_1_s[100:99] }),
2580 .i1 ({ {29{1'b0}}, a4_csa4_1_c[101:99] }),
2581 .i2 ( a4_csa4_2_c[130:99] ),
2582 .i3 ( a4_csa4_2_s[130:99] ),
2583 .cin ( a4_csa5_1b_cout ), // 1 bit
2584 .cout ( a4_csa5_1a_unused ), // 1 bit
2585 .carry( a4_csa5_1_c[131:100] ),
2586 .sum ( a4_csa5_1_s[130:99] ));
2587
2588
2589fgu_fpy_dp_csa42_macro__stack_96c__width_96 a4_csa5_1b (
2590 .i0 ( a4_csa4_1_s[98:3] ),
2591 .i1 ( a4_csa4_1_c[98:3] ),
2592 .i2 ({ a4_csa4_2_c[98:39], {36{1'b0}} }),
2593 .i3 ({ a4_csa4_2_s[98:34], {31{1'b0}} }),
2594 .cin ( 1'b0 ), // 1 bit
2595 .cout ( a4_csa5_1b_cout ), // 1 bit
2596 .carry( a4_csa5_1_c[99:4] ),
2597 .sum ( a4_csa5_1_s[98:3] ));
2598
2599 assign a4_csa5_1_s[2:0] = a4_csa4_1_s[2:0];
2600 assign a4_csa5_1_s[135:131] = a4_csa4_2_s[135:131];
2601
2602
2603fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 i_a4_s_lo_ff (
2604 .scan_in(i_a4_s_lo_ff_scanin),
2605 .scan_out(i_a4_s_lo_ff_scanout),
2606 .clk ( l2clk ),
2607 .en ( mul_clken_rep0 ),
2608 .din0( a4_csa5_1_s[63:0] ), // Integer, Float, MA Integer
2609 .din1({a4_8x16csa4_2_s[48:18],
2610 1'b0,
2611 a4_8x16csa4_1_s[31:0]} ), // 8x16
2612 .din2({a4_csa5_1_s[62:0] , 1'b0} ), // MA Integer * 2
2613 .din3( a4_xr5_1[63:0] ), // XOR multiply
2614 .din4({a4_xr5_1[62:0] , 1'b0} ), // XOR multiply * 2
2615 .sel0( fac_scff_sel_fx3[0] ),
2616 .sel1( fac_scff_sel_fx3[1] ),
2617 .sel2( fac_scff_sel_fx3[2] ),
2618 .sel3( fac_scff_sel_fx3[3] ),
2619 .dout( a4_csa5_1_s_ff[63:0] ),
2620 .se(se),
2621 .siclk(siclk),
2622 .soclk(soclk),
2623 .pce_ov(pce_ov),
2624 .stop(stop));
2625
2626
2627fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_72 i_a4_s_hi_ff (
2628 .scan_in(i_a4_s_hi_ff_scanin),
2629 .scan_out(i_a4_s_hi_ff_scanout),
2630 .clk ( l2clk ),
2631 .en ( mul_clken_rep0 ),
2632 .din0({a4_csa5_1_s[135:134],
2633 a4_csa5_1_s[133:64]} ), // Integer, Float, MA Integer
2634 .din1({2'b00,
2635 3'b000,
2636 a4_8x16csa4_4_s[85:54],
2637 1'b0,
2638 a4_8x16csa4_3_s[67:36],
2639 1'b0,
2640 a4_8x16csa4_2_s[49]} ), // 8x16
2641 .din2({a4_csa5_1_s[134:133],
2642 a4_csa5_1_s[132:63]} ), // MA Integer * 2
2643 .din3({2'b00,
2644 3'b000,
2645 4'b0000,a4_xr5_1[126:64]} ), // XOR multiply
2646 .din4({2'b00,
2647 3'b000,
2648 3'b000 ,a4_xr5_1[126:63]} ), // XOR multiply * 2
2649 .sel0( fac_scff_sel_fx3[0] ),
2650 .sel1( fac_scff_sel_fx3[1] ),
2651 .sel2( fac_scff_sel_fx3[2] ),
2652 .sel3( fac_scff_sel_fx3[3] ),
2653 .dout( a4_csa5_1_s_ff[135:64] ),
2654 .se(se),
2655 .siclk(siclk),
2656 .soclk(soclk),
2657 .pce_ov(pce_ov),
2658 .stop(stop));
2659
2660
2661fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_62 i_a4_c_lo_ff (
2662 .scan_in(i_a4_c_lo_ff_scanin),
2663 .scan_out(i_a4_c_lo_ff_scanout),
2664 .clk ( l2clk ),
2665 .en ( mul_clken_rep0 ),
2666 .din0({a4_csa5_1_c[63:4],2'b00} ), // Integer, Float, MA Integer
2667 .din1({a4_8x16csa4_2_c[48:20],2'b00,
2668 1'b0,
2669 a4_8x16csa4_1_c[31:2]} ), // 8x16
2670 .din2({a4_csa5_1_c[62:4],3'b000} ), // MA Integer * 2
2671 .sel0( fac_scff_sel_fx3[0] ),
2672 .sel1( fac_scff_sel_fx3[1] ),
2673 .sel2( fac_scff_sel_fx3[2] ),
2674 .dout( a4_csa5_1_c_ff[63:2] ),
2675 .se(se),
2676 .siclk(siclk),
2677 .soclk(soclk),
2678 .pce_ov(pce_ov),
2679 .stop(stop));
2680
2681 assign a4_csa5_1_c_ff[1:0] = 2'b00;
2682
2683
2684fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_69 i_a4_c_hi_ff (
2685 .scan_in(i_a4_c_hi_ff_scanin),
2686 .scan_out(i_a4_c_hi_ff_scanout),
2687 .clk ( l2clk ),
2688 .en ( mul_clken_rep0 ),
2689 .din0({1'b0,
2690 a4_csa5_1_c[131:64]} ), // Integer, Float, MA Integer
2691 .din1({1'b0,
2692 1'b0,a4_8x16csa4_4_c[85:56],2'b00,
2693 1'b0,
2694 a4_8x16csa4_3_c[67:38],3'b000,
2695 a4_8x16csa4_2_c[49]} ), // 8x16
2696 .din2({a4_csa5_1_c[131],
2697 a4_csa5_1_c[130:63]} ), // MA Integer * 2
2698 .sel0( fac_scff_sel_fx3[0] ),
2699 .sel1( fac_scff_sel_fx3[1] ),
2700 .sel2( fac_scff_sel_fx3[2] ),
2701 .dout( a4_csa5_1_c_ff[132:64] ),
2702 .se(se),
2703 .siclk(siclk),
2704 .soclk(soclk),
2705 .pce_ov(pce_ov),
2706 .stop(stop));
2707
2708
2709// *** *** *** *** *** *** *** *** End : "A4" 8:2 CSA Tree *** *** *** *** *** ***
2710
2711
2712
2713
2714// *** *** *** *** *** *** *** *** Start : Accumulator *** *** *** *** *** ***
2715
2716
2717fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 i_fx4_xor0 (
2718 .din0( a4_csa5_1_s_ff[126:64] ),
2719 .din1( accum_ff[126:64] ),
2720 .dout( xr_fx4[126:64] ));
2721
2722
2723fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_64 i_fx4_xor1 (
2724 .din0( a4_csa5_1_s_ff[63:0] ),
2725 .din1( accum_ff[63:0] ),
2726 .dout( xr_fx4[63:0] ));
2727
2728
2729fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_72 i_accum_ff0 (
2730 .scan_in(i_accum_ff0_scanin),
2731 .scan_out(i_accum_ff0_scanout),
2732 .clk ( l2clk ),
2733 .en ( accum_sel_fx4_b0 ),
2734 .din0({{ 9{1'b0}},xr_fx4[126:64]} ), // XOR w/ ACCUM and >> 0
2735 .din1( {72{1'b0}} ), // XOR w/ ACCUM and >> 64
2736 .din2({{ 9{1'b0}},xr_fx4[126:64]} ), // XOR w/o ACCUM and >> 0
2737 .din3( {72{1'b0}} ), // XOR w/o ACCUM and >> 64
2738 .din4( fya_add_result[135:64] ), // Int w/ or w/o ACCUM and >> 0
2739 .din5({{64{1'b0}},fya_add_result[135:128]} ), // Int w/ or w/o ACCUM and >> 64
2740 .sel0( accum_sel_fx4[2] ),
2741 .sel1( accum_sel_fx4[3] ),
2742 .sel2( accum_sel_fx4[4] ),
2743 .sel3( accum_sel_fx4[5] ),
2744 .sel4( accum_sel_fx4[6] ),
2745 .dout( accum_ff[135:64] ),
2746 .se(se),
2747 .siclk(siclk),
2748 .soclk(soclk),
2749 .pce_ov(pce_ov),
2750 .stop(stop));
2751
2752
2753fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_64 i_accum_ff1 (
2754 .scan_in(i_accum_ff1_scanin),
2755 .scan_out(i_accum_ff1_scanout),
2756 .clk ( l2clk ),
2757 .en ( accum_sel_fx4_b0 ),
2758 .din0( xr_fx4[63:0] ), // XOR w/ ACCUM and >> 0
2759 .din1({1'b0,xr_fx4[126:64]} ), // XOR w/ ACCUM and >> 64
2760 .din2( xr_fx4[63:0] ), // XOR w/o ACCUM and >> 0
2761 .din3({1'b0,xr_fx4[126:64]} ), // XOR w/o ACCUM and >> 64
2762 .din4( fya_add_result[63:0] ), // Int w/ or w/o ACCUM and >> 0
2763 .din5( fya_add_result[127:64] ), // Int w/ or w/o ACCUM and >> 64
2764 .sel0( accum_sel_fx4[2] ),
2765 .sel1( accum_sel_fx4[3] ),
2766 .sel2( accum_sel_fx4[4] ),
2767 .sel3( accum_sel_fx4[5] ),
2768 .sel4( accum_sel_fx4[6] ),
2769 .dout( accum_ff[63:0] ),
2770 .se(se),
2771 .siclk(siclk),
2772 .soclk(soclk),
2773 .pce_ov(pce_ov),
2774 .stop(stop));
2775
2776
2777assign fgu_accum_b0_fx5 = accum_ff[0];
2778
2779// *** *** *** *** *** *** *** *** End : Accumulator *** *** *** *** *** ***
2780
2781
2782fgu_fpy_dp_msff_macro__stack_88c__width_4 i_accum_sel_b1_ff (
2783 .scan_in(i_accum_sel_b1_ff_scanin),
2784 .scan_out(i_accum_sel_b1_ff_scanout),
2785 .clk ( l2clk ),
2786 .en ( mul_clken_rep0 ),
2787 .din ({4{fac_accum_sel_fx3[1]}} ),
2788 .dout( accum_sel_fx4_b1[3:0]),
2789 .se(se),
2790 .siclk(siclk),
2791 .soclk(soclk),
2792 .pce_ov(pce_ov),
2793 .stop(stop));
2794
2795
2796
2797
2798// *** *** *** *** *** *** *** *** Start : Custom add136 *** *** *** *** *** ***
2799
2800
2801cl_dp1_add136_8x fya (
2802 .din0 ( a4_csa5_1_s_ff[135:0] ),
2803 .din1 ( a4_csa5_1_c_ff[132:0] ),
2804 .din2 ( accum_ff[135:0] ),
2805 .sel_din2 ( accum_sel_fx4_b1[3:0] ),
2806 .sum ( fya_add_result[135:0] ),
2807 .fya_sticky_dp ( fya_sticky_dp ),
2808 .fya_sticky_sp ( fya_sticky_sp ),
2809 .fya_xicc_z ( fya_xicc_z[1:0] ));
2810
2811
2812
2813// *** *** *** *** *** *** *** *** End : Custom add136 *** *** *** *** *** ***
2814
2815
2816
2817
2818// *** *** *** *** *** *** *** *** Start : Output Flop *** *** *** *** *** ***
2819
2820
2821fgu_fpy_dp_buff_macro__stack_88c__width_1 i_fpy_fp_result_fx4_b63_buf (
2822 .din (fya_add_result[127] ),
2823 .dout(fpy_fp_result_fx4_b63));
2824
2825// 8x16 data is packed in FYA_ADD_RESULT as follows :
2826//
2827// 103:99 98 97:66 65 64:33 32 31:00
2828// ------ ----- ----- -----
2829// M3 M2 M1 M0
2830
2831
2832fgu_fpy_dp_msff_macro__mux_aope__ports_7__stack_88c__width_68 i_fx5_ff (
2833 .scan_in(i_fx5_ff_scanin),
2834 .scan_out(i_fx5_ff_scanout),
2835 .clk ( l2clk ),
2836 .en ( mul_clken_rep0 ),
2837 .din0({ 2'b00 ,
2838 1'b0 ,
2839 1'b0 ,
2840 fya_add_result[122:107] ,
2841 fya_add_result[89:74] ,
2842 fya_add_result[56:41] ,
2843 fya_add_result[23:8] } ), // [0] : FMUL8x16 or FMUL8x16AU or FMUL8x16AL or FMUL8SUx16
2844 .din1({ 2'b00 ,
2845 1'b0 ,
2846 1'b0 ,
2847 fya_add_result[130:115] ,
2848 fya_add_result[97:82] ,
2849 fya_add_result[64:49] ,
2850 fya_add_result[31:16] } ), // [1] : FMUL8ULx16
2851 .din2({ 2'b00 ,
2852 1'b0 ,
2853 1'b0 ,
2854 fya_add_result[122:99],8'h00 ,
2855 fya_add_result[89:66] ,8'h00 } ), // [2] : FMULD8SUx16
2856 .din3({ 2'b00 ,
2857 1'b0 ,
2858 1'b0 ,
2859 fya_add_result[130:99] ,
2860 fya_add_result[97:66] } ), // [3] : FMULD8ULx16
2861 .din4({ 2'b00 ,
2862 1'b0 ,
2863 1'b0 ,
2864 xr_fx4[63:0] } ), // [4] : XOR multiply w/ ACCUMUMATE
2865 .din5({ 2'b00 ,
2866 fya_sticky_sp ,
2867 fya_sticky_dp ,
2868 fya_add_result[127:73] ,
2869 {9{1'b0}} } ), // [5] : Float
2870 .din6({fya_xicc_z[1:0] ,
2871 1'b0 ,
2872 1'b0 ,
2873 fya_add_result[63:0] } ), // Def : Integer, MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE;
2874 .sel0( fac_result_sel_fx4[0] ),
2875 .sel1( fac_result_sel_fx4[1] ),
2876 .sel2( fac_result_sel_fx4[2] ),
2877 .sel3( fac_result_sel_fx4[3] ),
2878 .sel4( fac_result_sel_fx4[4] ),
2879 .sel5( fac_result_sel_fx4[5] ),
2880 .dout({fpy_xicc_z_fx5[1:0] ,
2881 fpy_sticky_sp_fx5 ,
2882 fpy_sticky_dp_fx5 ,
2883 fgu_mul_result_fx5[63:0] } ),
2884 .se(se),
2885 .siclk(siclk),
2886 .soclk(soclk),
2887 .pce_ov(pce_ov),
2888 .stop(stop));
2889
2890
2891
2892
2893fgu_fpy_dp_msff_macro__mux_aope__ports_2__stack_88c__width_64 i_ma_result_ff (
2894 .scan_in(i_ma_result_ff_scanin),
2895 .scan_out(i_ma_result_ff_scanout),
2896 .clk ( l2clk ),
2897 .en ( fac_ma_result_en_fx4 ),
2898 .din0( xr_fx4[63:0] ), // [4] : XOR multiply w/ ACCUMUMATE
2899 .din1( fya_add_result[63:0] ), // Def : MA Integer w/ and w/o ACCUMULATE, XOR w/o ACCUMULATE;
2900 .sel0( fac_result_sel_fx4[4] ),
2901 .dout( ma_result_ff[63:0] ),
2902 .se(se),
2903 .siclk(siclk),
2904 .soclk(soclk),
2905 .pce_ov(pce_ov),
2906 .stop(stop));
2907
2908
2909
2910
2911// *** *** *** *** *** *** *** *** End : Output Flop *** *** *** *** *** ***
2912
2913
2914// fixscan start:
2915assign i_spu_rs1_ff_scanin = scan_in ;
2916assign i_spu_rs2_ff_scanin = i_spu_rs1_ff_scanout ;
2917assign i_3x_ff_scanin = i_spu_rs2_ff_scanout ;
2918assign i_a3_be_ff_scanin = i_3x_ff_scanout ;
2919assign i_a3_rs2_ff_scanin = i_a3_be_ff_scanout ;
2920assign i_a3_s_ff_a_scanin = i_a3_rs2_ff_scanout ;
2921assign i_a3_s_ff_b_scanin = i_a3_s_ff_a_scanout ;
2922assign i_a3_c_ff_a_scanin = i_a3_s_ff_b_scanout ;
2923assign i_a3_c_ff_b_scanin = i_a3_c_ff_a_scanout ;
2924assign i_a32_x_ff_a_scanin = i_a3_c_ff_b_scanout ;
2925assign i_a32_x_ff_b_scanin = i_a32_x_ff_a_scanout ;
2926assign i_a2_be_ff_a_scanin = i_a32_x_ff_b_scanout ;
2927assign i_a2_be_ff_b_scanin = i_a2_be_ff_a_scanout ;
2928assign i_a2_rs2_ff_scanin = i_a2_be_ff_b_scanout ;
2929assign i_a2_s_ff_a_scanin = i_a2_rs2_ff_scanout ;
2930assign i_a2_s_ff_b_scanin = i_a2_s_ff_a_scanout ;
2931assign i_a2_c_ff_a_scanin = i_a2_s_ff_b_scanout ;
2932assign i_a2_c_ff_b_scanin = i_a2_c_ff_a_scanout ;
2933assign i_a1_be_ff_scanin = i_a2_c_ff_b_scanout ;
2934assign i_a1_rs2_ff_scanin = i_a1_be_ff_scanout ;
2935assign i_a1_s_ff_a_scanin = i_a1_rs2_ff_scanout ;
2936assign i_a1_s_ff_b_scanin = i_a1_s_ff_a_scanout ;
2937assign i_a1_c_ff_a_scanin = i_a1_s_ff_b_scanout ;
2938assign i_a1_c_ff_b_scanin = i_a1_c_ff_a_scanout ;
2939assign i_a10_x_ff_a_scanin = i_a1_c_ff_b_scanout ;
2940assign i_a10_x_ff_b_scanin = i_a10_x_ff_a_scanout ;
2941assign i_a0_be_ff_scanin = i_a10_x_ff_b_scanout ;
2942assign i_a0_rs2_ff_scanin = i_a0_be_ff_scanout ;
2943assign i_a0_s_ff_a_scanin = i_a0_rs2_ff_scanout ;
2944assign i_a0_s_ff_b_scanin = i_a0_s_ff_a_scanout ;
2945assign i_a0_c_ff_a_scanin = i_a0_s_ff_b_scanout ;
2946assign i_a0_c_ff_b_scanin = i_a0_c_ff_a_scanout ;
2947assign i_a4_s_lo_ff_scanin = i_a0_c_ff_b_scanout ;
2948assign i_a4_s_hi_ff_scanin = i_a4_s_lo_ff_scanout ;
2949assign i_a4_c_lo_ff_scanin = i_a4_s_hi_ff_scanout ;
2950assign i_a4_c_hi_ff_scanin = i_a4_c_lo_ff_scanout ;
2951assign i_accum_ff0_scanin = i_a4_c_hi_ff_scanout ;
2952assign i_accum_ff1_scanin = i_accum_ff0_scanout ;
2953assign i_accum_sel_b1_ff_scanin = i_accum_ff1_scanout ;
2954assign i_fx5_ff_scanin = i_accum_sel_b1_ff_scanout;
2955assign i_ma_result_ff_scanin = i_fx5_ff_scanout ;
2956assign scan_out = i_ma_result_ff_scanout ;
2957// fixscan end:
2958endmodule // fgu_fpy_dp
2959
2960
2961//
2962// buff macro
2963//
2964//
2965
2966
2967
2968
2969
2970module fgu_fpy_dp_buff_macro__dbuff_32x__rep_1__stack_88c__width_4 (
2971 din,
2972 dout);
2973 input [3:0] din;
2974 output [3:0] dout;
2975
2976
2977
2978
2979
2980
2981buff #(4) d0_0 (
2982.in(din[3:0]),
2983.out(dout[3:0])
2984);
2985
2986
2987
2988
2989
2990
2991
2992
2993endmodule
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003// any PARAMS parms go into naming of macro
3004
3005module fgu_fpy_dp_msff_macro__minbuff_1__stack_88c__width_64 (
3006 din,
3007 clk,
3008 en,
3009 se,
3010 scan_in,
3011 siclk,
3012 soclk,
3013 pce_ov,
3014 stop,
3015 dout,
3016 scan_out);
3017wire l1clk;
3018wire siclk_out;
3019wire soclk_out;
3020wire [62:0] so;
3021
3022 input [63:0] din;
3023
3024
3025 input clk;
3026 input en;
3027 input se;
3028 input scan_in;
3029 input siclk;
3030 input soclk;
3031 input pce_ov;
3032 input stop;
3033
3034
3035
3036 output [63:0] dout;
3037
3038
3039 output scan_out;
3040
3041
3042
3043
3044cl_dp1_l1hdr_8x c0_0 (
3045.l2clk(clk),
3046.pce(en),
3047.aclk(siclk),
3048.bclk(soclk),
3049.l1clk(l1clk),
3050 .se(se),
3051 .pce_ov(pce_ov),
3052 .stop(stop),
3053 .siclk_out(siclk_out),
3054 .soclk_out(soclk_out)
3055);
3056dff #(64) d0_0 (
3057.l1clk(l1clk),
3058.siclk(siclk_out),
3059.soclk(soclk_out),
3060.d(din[63:0]),
3061.si({scan_in,so[62:0]}),
3062.so({so[62:0],scan_out}),
3063.q(dout[63:0])
3064);
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085endmodule
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099// any PARAMS parms go into naming of macro
3100
3101module fgu_fpy_dp_msff_macro__stack_88c__width_64 (
3102 din,
3103 clk,
3104 en,
3105 se,
3106 scan_in,
3107 siclk,
3108 soclk,
3109 pce_ov,
3110 stop,
3111 dout,
3112 scan_out);
3113wire l1clk;
3114wire siclk_out;
3115wire soclk_out;
3116wire [62:0] so;
3117
3118 input [63:0] din;
3119
3120
3121 input clk;
3122 input en;
3123 input se;
3124 input scan_in;
3125 input siclk;
3126 input soclk;
3127 input pce_ov;
3128 input stop;
3129
3130
3131
3132 output [63:0] dout;
3133
3134
3135 output scan_out;
3136
3137
3138
3139
3140cl_dp1_l1hdr_8x c0_0 (
3141.l2clk(clk),
3142.pce(en),
3143.aclk(siclk),
3144.bclk(soclk),
3145.l1clk(l1clk),
3146 .se(se),
3147 .pce_ov(pce_ov),
3148 .stop(stop),
3149 .siclk_out(siclk_out),
3150 .soclk_out(soclk_out)
3151);
3152dff #(64) d0_0 (
3153.l1clk(l1clk),
3154.siclk(siclk_out),
3155.soclk(soclk_out),
3156.d(din[63:0]),
3157.si({scan_in,so[62:0]}),
3158.so({so[62:0],scan_out}),
3159.q(dout[63:0])
3160);
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181endmodule
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191//
3192// buff macro
3193//
3194//
3195
3196
3197
3198
3199
3200module fgu_fpy_dp_buff_macro__stack_88c__width_4 (
3201 din,
3202 dout);
3203 input [3:0] din;
3204 output [3:0] dout;
3205
3206
3207
3208
3209
3210
3211buff #(4) d0_0 (
3212.in(din[3:0]),
3213.out(dout[3:0])
3214);
3215
3216
3217
3218
3219
3220
3221
3222
3223endmodule
3224
3225
3226
3227
3228
3229//
3230// invert macro
3231//
3232//
3233
3234
3235
3236
3237
3238module fgu_fpy_dp_inv_macro__stack_88c__width_1 (
3239 din,
3240 dout);
3241 input [0:0] din;
3242 output [0:0] dout;
3243
3244
3245
3246
3247
3248
3249inv #(1) d0_0 (
3250.in(din[0:0]),
3251.out(dout[0:0])
3252);
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262endmodule
3263
3264
3265
3266
3267
3268//
3269// buff macro
3270//
3271//
3272
3273
3274
3275
3276
3277module fgu_fpy_dp_buff_macro__stack_88c__width_2 (
3278 din,
3279 dout);
3280 input [1:0] din;
3281 output [1:0] dout;
3282
3283
3284
3285
3286
3287
3288buff #(2) d0_0 (
3289.in(din[1:0]),
3290.out(dout[1:0])
3291);
3292
3293
3294
3295
3296
3297
3298
3299
3300endmodule
3301
3302
3303
3304
3305
3306//
3307// buff macro
3308//
3309//
3310
3311
3312
3313
3314
3315module fgu_fpy_dp_buff_macro__dbuff_48x__stack_88c__width_1 (
3316 din,
3317 dout);
3318 input [0:0] din;
3319 output [0:0] dout;
3320
3321
3322
3323
3324
3325
3326buff #(1) d0_0 (
3327.in(din[0:0]),
3328.out(dout[0:0])
3329);
3330
3331
3332
3333
3334
3335
3336
3337
3338endmodule
3339
3340
3341
3342
3343
3344// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3345// also for pass-gate with decoder
3346
3347
3348
3349
3350
3351// any PARAMS parms go into naming of macro
3352
3353module fgu_fpy_dp_mux_macro__mux_pgpe__ports_6__stack_88c__width_69 (
3354 din0,
3355 din1,
3356 din2,
3357 din3,
3358 din4,
3359 din5,
3360 sel0,
3361 sel1,
3362 sel2,
3363 sel3,
3364 sel4,
3365 muxtst,
3366 test,
3367 dout);
3368wire psel0;
3369wire psel1;
3370wire psel2;
3371wire psel3;
3372wire psel4;
3373wire psel5;
3374
3375 input [68:0] din0;
3376 input [68:0] din1;
3377 input [68:0] din2;
3378 input [68:0] din3;
3379 input [68:0] din4;
3380 input [68:0] din5;
3381 input sel0;
3382 input sel1;
3383 input sel2;
3384 input sel3;
3385 input sel4;
3386 input muxtst;
3387 input test;
3388 output [68:0] dout;
3389
3390
3391
3392
3393
3394cl_dp1_penc6_8x c0_0 (
3395 .sel0(sel0),
3396 .sel1(sel1),
3397 .sel2(sel2),
3398 .sel3(sel3),
3399 .sel4(sel4),
3400 .psel0(psel0),
3401 .psel1(psel1),
3402 .psel2(psel2),
3403 .psel3(psel3),
3404 .psel4(psel4),
3405 .psel5(psel5),
3406 .test(test)
3407);
3408
3409mux6 #(69) d0_0 (
3410 .sel0(psel0),
3411 .sel1(psel1),
3412 .sel2(psel2),
3413 .sel3(psel3),
3414 .sel4(psel4),
3415 .sel5(psel5),
3416 .in0(din0[68:0]),
3417 .in1(din1[68:0]),
3418 .in2(din2[68:0]),
3419 .in3(din3[68:0]),
3420 .in4(din4[68:0]),
3421 .in5(din5[68:0]),
3422.dout(dout[68:0]),
3423 .muxtst(muxtst)
3424);
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438endmodule
3439
3440
3441//
3442// Booth Encoder with XOR multiply control
3443//
3444//
3445
3446
3447
3448
3449
3450// any PARAMS parms go into naming of macro
3451
3452
3453module fgu_fpy_dp_booth_encode_macro (
3454 din,
3455 xr_mode,
3456 dout,
3457 pout,
3458 hout);
3459 input [2:0] din;
3460 input xr_mode;
3461 output [4:0] dout;
3462 output pout;
3463 output hout;
3464
3465
3466
3467
3468
3469
3470 cl_dp1_boothenc_4x m0_0 (
3471 .din(din),
3472 .xr_mode(xr_mode),
3473 .dout(dout),
3474 .pout(pout),
3475 .hout(hout)
3476);
3477
3478
3479
3480
3481
3482
3483endmodule
3484
3485
3486//
3487// xor macro for ports = 2,3
3488//
3489//
3490
3491
3492
3493
3494
3495module fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_63 (
3496 din0,
3497 din1,
3498 dout);
3499 input [62:0] din0;
3500 input [62:0] din1;
3501 output [62:0] dout;
3502
3503
3504
3505
3506
3507xor2 #(63) d0_0 (
3508.in0(din0[62:0]),
3509.in1(din1[62:0]),
3510.out(dout[62:0])
3511);
3512
3513
3514
3515
3516
3517
3518
3519
3520endmodule
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530// any PARAMS parms go into naming of macro
3531
3532module fgu_fpy_dp_msff_macro__stack_88c__width_65 (
3533 din,
3534 clk,
3535 en,
3536 se,
3537 scan_in,
3538 siclk,
3539 soclk,
3540 pce_ov,
3541 stop,
3542 dout,
3543 scan_out);
3544wire l1clk;
3545wire siclk_out;
3546wire soclk_out;
3547wire [63:0] so;
3548
3549 input [64:0] din;
3550
3551
3552 input clk;
3553 input en;
3554 input se;
3555 input scan_in;
3556 input siclk;
3557 input soclk;
3558 input pce_ov;
3559 input stop;
3560
3561
3562
3563 output [64:0] dout;
3564
3565
3566 output scan_out;
3567
3568
3569
3570
3571cl_dp1_l1hdr_8x c0_0 (
3572.l2clk(clk),
3573.pce(en),
3574.aclk(siclk),
3575.bclk(soclk),
3576.l1clk(l1clk),
3577 .se(se),
3578 .pce_ov(pce_ov),
3579 .stop(stop),
3580 .siclk_out(siclk_out),
3581 .soclk_out(soclk_out)
3582);
3583dff #(65) d0_0 (
3584.l1clk(l1clk),
3585.siclk(siclk_out),
3586.soclk(soclk_out),
3587.d(din[64:0]),
3588.si({scan_in,so[63:0]}),
3589.so({so[63:0],scan_out}),
3590.q(dout[64:0])
3591);
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612endmodule
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622//
3623// buff macro
3624//
3625//
3626
3627
3628
3629
3630
3631module fgu_fpy_dp_buff_macro__stack_88c__width_65 (
3632 din,
3633 dout);
3634 input [64:0] din;
3635 output [64:0] dout;
3636
3637
3638
3639
3640
3641
3642buff #(65) d0_0 (
3643.in(din[64:0]),
3644.out(dout[64:0])
3645);
3646
3647
3648
3649
3650
3651
3652
3653
3654endmodule
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664// any PARAMS parms go into naming of macro
3665
3666module fgu_fpy_dp_msff_macro__stack_88c__width_63 (
3667 din,
3668 clk,
3669 en,
3670 se,
3671 scan_in,
3672 siclk,
3673 soclk,
3674 pce_ov,
3675 stop,
3676 dout,
3677 scan_out);
3678wire l1clk;
3679wire siclk_out;
3680wire soclk_out;
3681wire [61:0] so;
3682
3683 input [62:0] din;
3684
3685
3686 input clk;
3687 input en;
3688 input se;
3689 input scan_in;
3690 input siclk;
3691 input soclk;
3692 input pce_ov;
3693 input stop;
3694
3695
3696
3697 output [62:0] dout;
3698
3699
3700 output scan_out;
3701
3702
3703
3704
3705cl_dp1_l1hdr_8x c0_0 (
3706.l2clk(clk),
3707.pce(en),
3708.aclk(siclk),
3709.bclk(soclk),
3710.l1clk(l1clk),
3711 .se(se),
3712 .pce_ov(pce_ov),
3713 .stop(stop),
3714 .siclk_out(siclk_out),
3715 .soclk_out(soclk_out)
3716);
3717dff #(63) d0_0 (
3718.l1clk(l1clk),
3719.siclk(siclk_out),
3720.soclk(soclk_out),
3721.d(din[62:0]),
3722.si({scan_in,so[61:0]}),
3723.so({so[61:0],scan_out}),
3724.q(dout[62:0])
3725);
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746endmodule
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756//
3757// buff macro
3758//
3759//
3760
3761
3762
3763
3764
3765module fgu_fpy_dp_buff_macro__stack_88c__width_3 (
3766 din,
3767 dout);
3768 input [2:0] din;
3769 output [2:0] dout;
3770
3771
3772
3773
3774
3775
3776buff #(3) d0_0 (
3777.in(din[2:0]),
3778.out(dout[2:0])
3779);
3780
3781
3782
3783
3784
3785
3786
3787
3788endmodule
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798// any PARAMS parms go into naming of macro
3799
3800module fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_64 (
3801 din0,
3802 din1,
3803 din2,
3804 din3,
3805 din4,
3806 sel0,
3807 sel1,
3808 sel2,
3809 sel3,
3810 clk,
3811 en,
3812 se,
3813 scan_in,
3814 siclk,
3815 soclk,
3816 pce_ov,
3817 stop,
3818 dout,
3819 scan_out);
3820wire psel0;
3821wire psel1;
3822wire psel2;
3823wire psel3;
3824wire psel4;
3825wire [63:0] muxout;
3826wire l1clk;
3827wire siclk_out;
3828wire soclk_out;
3829wire [62:0] so;
3830
3831 input [63:0] din0;
3832 input [63:0] din1;
3833 input [63:0] din2;
3834 input [63:0] din3;
3835 input [63:0] din4;
3836 input sel0;
3837 input sel1;
3838 input sel2;
3839 input sel3;
3840
3841
3842 input clk;
3843 input en;
3844 input se;
3845 input scan_in;
3846 input siclk;
3847 input soclk;
3848 input pce_ov;
3849 input stop;
3850
3851
3852
3853 output [63:0] dout;
3854
3855
3856 output scan_out;
3857
3858
3859
3860
3861cl_dp1_penc5_8x c1_0 (
3862 .test(1'b1),
3863 .sel0(sel0),
3864 .sel1(sel1),
3865 .sel2(sel2),
3866 .sel3(sel3),
3867 .psel0(psel0),
3868 .psel1(psel1),
3869 .psel2(psel2),
3870 .psel3(psel3),
3871 .psel4(psel4)
3872);
3873
3874mux5s #(64) d1_0 (
3875 .sel0(psel0),
3876 .sel1(psel1),
3877 .sel2(psel2),
3878 .sel3(psel3),
3879 .sel4(psel4),
3880 .in0(din0[63:0]),
3881 .in1(din1[63:0]),
3882 .in2(din2[63:0]),
3883 .in3(din3[63:0]),
3884 .in4(din4[63:0]),
3885.dout(muxout[63:0])
3886);
3887cl_dp1_l1hdr_8x c0_0 (
3888.l2clk(clk),
3889.pce(en),
3890.aclk(siclk),
3891.bclk(soclk),
3892.l1clk(l1clk),
3893 .se(se),
3894 .pce_ov(pce_ov),
3895 .stop(stop),
3896 .siclk_out(siclk_out),
3897 .soclk_out(soclk_out)
3898);
3899dff #(64) d0_0 (
3900.l1clk(l1clk),
3901.siclk(siclk_out),
3902.soclk(soclk_out),
3903.d(muxout[63:0]),
3904.si({scan_in,so[62:0]}),
3905.so({so[62:0],scan_out}),
3906.q(dout[63:0])
3907);
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928endmodule
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938//
3939// buff macro
3940//
3941//
3942
3943
3944
3945
3946
3947module fgu_fpy_dp_buff_macro__stack_88c__width_64 (
3948 din,
3949 dout);
3950 input [63:0] din;
3951 output [63:0] dout;
3952
3953
3954
3955
3956
3957
3958buff #(64) d0_0 (
3959.in(din[63:0]),
3960.out(dout[63:0])
3961);
3962
3963
3964
3965
3966
3967
3968
3969
3970endmodule
3971
3972
3973
3974
3975
3976//
3977// invert macro
3978//
3979//
3980
3981
3982
3983
3984
3985module fgu_fpy_dp_inv_macro__stack_88c__width_64 (
3986 din,
3987 dout);
3988 input [63:0] din;
3989 output [63:0] dout;
3990
3991
3992
3993
3994
3995
3996inv #(64) d0_0 (
3997.in(din[63:0]),
3998.out(dout[63:0])
3999);
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009endmodule
4010
4011
4012
4013
4014
4015// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4016// also for pass-gate with decoder
4017
4018
4019
4020
4021
4022// any PARAMS parms go into naming of macro
4023
4024module fgu_fpy_dp_mux_macro__mux_aonpe__ports_5__stack_88c__width_65 (
4025 din0,
4026 sel0,
4027 din1,
4028 sel1,
4029 din2,
4030 sel2,
4031 din3,
4032 sel3,
4033 din4,
4034 sel4,
4035 dout);
4036wire buffout0;
4037wire buffout1;
4038wire buffout2;
4039wire buffout3;
4040wire buffout4;
4041
4042 input [64:0] din0;
4043 input sel0;
4044 input [64:0] din1;
4045 input sel1;
4046 input [64:0] din2;
4047 input sel2;
4048 input [64:0] din3;
4049 input sel3;
4050 input [64:0] din4;
4051 input sel4;
4052 output [64:0] dout;
4053
4054
4055
4056
4057
4058cl_dp1_muxbuff5_8x c0_0 (
4059 .in0(sel0),
4060 .in1(sel1),
4061 .in2(sel2),
4062 .in3(sel3),
4063 .in4(sel4),
4064 .out0(buffout0),
4065 .out1(buffout1),
4066 .out2(buffout2),
4067 .out3(buffout3),
4068 .out4(buffout4)
4069);
4070mux5s #(65) d0_0 (
4071 .sel0(buffout0),
4072 .sel1(buffout1),
4073 .sel2(buffout2),
4074 .sel3(buffout3),
4075 .sel4(buffout4),
4076 .in0(din0[64:0]),
4077 .in1(din1[64:0]),
4078 .in2(din2[64:0]),
4079 .in3(din3[64:0]),
4080 .in4(din4[64:0]),
4081.dout(dout[64:0])
4082);
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096endmodule
4097
4098
4099//
4100// 3:2 Carry Save Adder
4101//
4102//
4103
4104
4105
4106
4107// any PARAMS parms go into naming of macro
4108
4109
4110module fgu_fpy_dp_csa32_macro__stack_88c__width_69 (
4111 i0,
4112 i1,
4113 i2,
4114 carry,
4115 sum);
4116 input [68:0] i0;
4117 input [68:0] i1;
4118 input [68:0] i2;
4119 output [68:0] carry;
4120 output [68:0] sum;
4121
4122
4123
4124
4125
4126
4127csa32 #(69) d0_0 (
4128.in0(i0[68:0]),
4129.in1(i1[68:0]),
4130.in2(i2[68:0]),
4131.carry(carry[68:0]),
4132.sum(sum[68:0])
4133);
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143endmodule
4144
4145
4146//
4147// 3:2 Carry Save Adder
4148//
4149//
4150
4151
4152
4153
4154// any PARAMS parms go into naming of macro
4155
4156
4157module fgu_fpy_dp_csa32_macro__stack_88c__width_73 (
4158 i0,
4159 i1,
4160 i2,
4161 carry,
4162 sum);
4163 input [72:0] i0;
4164 input [72:0] i1;
4165 input [72:0] i2;
4166 output [72:0] carry;
4167 output [72:0] sum;
4168
4169
4170
4171
4172
4173
4174csa32 #(73) d0_0 (
4175.in0(i0[72:0]),
4176.in1(i1[72:0]),
4177.in2(i2[72:0]),
4178.carry(carry[72:0]),
4179.sum(sum[72:0])
4180);
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190endmodule
4191
4192
4193//
4194// 4:2 Carry Save Adder
4195//
4196//
4197// i0 i1 i2 i3 | co | carry sum
4198// ------------|----|-----------
4199// 0 0 0 0 | 0 | 0 cin
4200// 0 0 0 1 | 0 | cin ~cin
4201// 0 0 1 0 | 0 | cin ~cin
4202// 0 0 1 1 | 0 | 1 cin
4203//
4204// 0 1 0 0 | 0 | cin ~cin
4205// 0 1 0 1 | 0 | 1 cin
4206// 0 1 1 0 | 1 | 0 cin
4207// 0 1 1 1 | 1 | cin ~cin
4208//
4209// 1 0 0 0 | 0 | cin ~cin
4210// 1 0 0 1 | 0 | 1 cin
4211// 1 0 1 0 | 1 | 0 cin
4212// 1 0 1 1 | 1 | cin ~cin
4213//
4214// 1 1 0 0 | 1 | 0 cin
4215// 1 1 0 1 | 1 | cin ~cin
4216// 1 1 1 0 | 1 | cin ~cin
4217// 1 1 1 1 | 1 | 1 cin
4218
4219
4220// This circuit looks like a compression of 5 terms down
4221// to 3 term on an individual bit basis. However, the fast
4222// output "co" from bit position "n" is actually the late input
4223// "cin" on bit position "n+1". Once a wrapper is written
4224// around multiple bits, this circuit will give the
4225// appearance of compressing 4 inputs down to 2 outputs.
4226
4227
4228
4229
4230
4231// any PARAMS parms go into naming of macro
4232
4233
4234module fgu_fpy_dp_csa42_macro__stack_88c__width_81 (
4235 i0,
4236 i1,
4237 i2,
4238 i3,
4239 cin,
4240 cout,
4241 carry,
4242 sum);
4243 input [80:0] i0;
4244 input [80:0] i1;
4245 input [80:0] i2;
4246 input [80:0] i3;
4247 input cin;
4248 output cout;
4249 output [80:0] carry;
4250 output [80:0] sum;
4251
4252
4253
4254
4255
4256
4257csa42 #(81) d0_0 (
4258.cin(cin),
4259.in0(i0[80:0]),
4260.in1(i1[80:0]),
4261.in2(i2[80:0]),
4262.in3(i3[80:0]),
4263.cout(cout),
4264.carry(carry[80:0]),
4265.sum(sum[80:0])
4266);
4267
4268
4269
4270
4271
4272
4273
4274
4275endmodule
4276
4277
4278
4279
4280
4281
4282
4283
4284// any PARAMS parms go into naming of macro
4285
4286module fgu_fpy_dp_msff_macro__stack_88c__width_39 (
4287 din,
4288 clk,
4289 en,
4290 se,
4291 scan_in,
4292 siclk,
4293 soclk,
4294 pce_ov,
4295 stop,
4296 dout,
4297 scan_out);
4298wire l1clk;
4299wire siclk_out;
4300wire soclk_out;
4301wire [37:0] so;
4302
4303 input [38:0] din;
4304
4305
4306 input clk;
4307 input en;
4308 input se;
4309 input scan_in;
4310 input siclk;
4311 input soclk;
4312 input pce_ov;
4313 input stop;
4314
4315
4316
4317 output [38:0] dout;
4318
4319
4320 output scan_out;
4321
4322
4323
4324
4325cl_dp1_l1hdr_8x c0_0 (
4326.l2clk(clk),
4327.pce(en),
4328.aclk(siclk),
4329.bclk(soclk),
4330.l1clk(l1clk),
4331 .se(se),
4332 .pce_ov(pce_ov),
4333 .stop(stop),
4334 .siclk_out(siclk_out),
4335 .soclk_out(soclk_out)
4336);
4337dff #(39) d0_0 (
4338.l1clk(l1clk),
4339.siclk(siclk_out),
4340.soclk(soclk_out),
4341.d(din[38:0]),
4342.si({scan_in,so[37:0]}),
4343.so({so[37:0],scan_out}),
4344.q(dout[38:0])
4345);
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366endmodule
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380// any PARAMS parms go into naming of macro
4381
4382module fgu_fpy_dp_msff_macro__stack_88c__width_44 (
4383 din,
4384 clk,
4385 en,
4386 se,
4387 scan_in,
4388 siclk,
4389 soclk,
4390 pce_ov,
4391 stop,
4392 dout,
4393 scan_out);
4394wire l1clk;
4395wire siclk_out;
4396wire soclk_out;
4397wire [42:0] so;
4398
4399 input [43:0] din;
4400
4401
4402 input clk;
4403 input en;
4404 input se;
4405 input scan_in;
4406 input siclk;
4407 input soclk;
4408 input pce_ov;
4409 input stop;
4410
4411
4412
4413 output [43:0] dout;
4414
4415
4416 output scan_out;
4417
4418
4419
4420
4421cl_dp1_l1hdr_8x c0_0 (
4422.l2clk(clk),
4423.pce(en),
4424.aclk(siclk),
4425.bclk(soclk),
4426.l1clk(l1clk),
4427 .se(se),
4428 .pce_ov(pce_ov),
4429 .stop(stop),
4430 .siclk_out(siclk_out),
4431 .soclk_out(soclk_out)
4432);
4433dff #(44) d0_0 (
4434.l1clk(l1clk),
4435.siclk(siclk_out),
4436.soclk(soclk_out),
4437.d(din[43:0]),
4438.si({scan_in,so[42:0]}),
4439.so({so[42:0],scan_out}),
4440.q(dout[43:0])
4441);
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462endmodule
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476// any PARAMS parms go into naming of macro
4477
4478module fgu_fpy_dp_msff_macro__stack_88c__width_37 (
4479 din,
4480 clk,
4481 en,
4482 se,
4483 scan_in,
4484 siclk,
4485 soclk,
4486 pce_ov,
4487 stop,
4488 dout,
4489 scan_out);
4490wire l1clk;
4491wire siclk_out;
4492wire soclk_out;
4493wire [35:0] so;
4494
4495 input [36:0] din;
4496
4497
4498 input clk;
4499 input en;
4500 input se;
4501 input scan_in;
4502 input siclk;
4503 input soclk;
4504 input pce_ov;
4505 input stop;
4506
4507
4508
4509 output [36:0] dout;
4510
4511
4512 output scan_out;
4513
4514
4515
4516
4517cl_dp1_l1hdr_8x c0_0 (
4518.l2clk(clk),
4519.pce(en),
4520.aclk(siclk),
4521.bclk(soclk),
4522.l1clk(l1clk),
4523 .se(se),
4524 .pce_ov(pce_ov),
4525 .stop(stop),
4526 .siclk_out(siclk_out),
4527 .soclk_out(soclk_out)
4528);
4529dff #(37) d0_0 (
4530.l1clk(l1clk),
4531.siclk(siclk_out),
4532.soclk(soclk_out),
4533.d(din[36:0]),
4534.si({scan_in,so[35:0]}),
4535.so({so[35:0],scan_out}),
4536.q(dout[36:0])
4537);
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558endmodule
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572// any PARAMS parms go into naming of macro
4573
4574module fgu_fpy_dp_msff_macro__stack_88c__width_31 (
4575 din,
4576 clk,
4577 en,
4578 se,
4579 scan_in,
4580 siclk,
4581 soclk,
4582 pce_ov,
4583 stop,
4584 dout,
4585 scan_out);
4586wire l1clk;
4587wire siclk_out;
4588wire soclk_out;
4589wire [29:0] so;
4590
4591 input [30:0] din;
4592
4593
4594 input clk;
4595 input en;
4596 input se;
4597 input scan_in;
4598 input siclk;
4599 input soclk;
4600 input pce_ov;
4601 input stop;
4602
4603
4604
4605 output [30:0] dout;
4606
4607
4608 output scan_out;
4609
4610
4611
4612
4613cl_dp1_l1hdr_8x c0_0 (
4614.l2clk(clk),
4615.pce(en),
4616.aclk(siclk),
4617.bclk(soclk),
4618.l1clk(l1clk),
4619 .se(se),
4620 .pce_ov(pce_ov),
4621 .stop(stop),
4622 .siclk_out(siclk_out),
4623 .soclk_out(soclk_out)
4624);
4625dff #(31) d0_0 (
4626.l1clk(l1clk),
4627.siclk(siclk_out),
4628.soclk(soclk_out),
4629.d(din[30:0]),
4630.si({scan_in,so[29:0]}),
4631.so({so[29:0],scan_out}),
4632.q(dout[30:0])
4633);
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654endmodule
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667
4668// any PARAMS parms go into naming of macro
4669
4670module fgu_fpy_dp_msff_macro__stack_88c__width_41 (
4671 din,
4672 clk,
4673 en,
4674 se,
4675 scan_in,
4676 siclk,
4677 soclk,
4678 pce_ov,
4679 stop,
4680 dout,
4681 scan_out);
4682wire l1clk;
4683wire siclk_out;
4684wire soclk_out;
4685wire [39:0] so;
4686
4687 input [40:0] din;
4688
4689
4690 input clk;
4691 input en;
4692 input se;
4693 input scan_in;
4694 input siclk;
4695 input soclk;
4696 input pce_ov;
4697 input stop;
4698
4699
4700
4701 output [40:0] dout;
4702
4703
4704 output scan_out;
4705
4706
4707
4708
4709cl_dp1_l1hdr_8x c0_0 (
4710.l2clk(clk),
4711.pce(en),
4712.aclk(siclk),
4713.bclk(soclk),
4714.l1clk(l1clk),
4715 .se(se),
4716 .pce_ov(pce_ov),
4717 .stop(stop),
4718 .siclk_out(siclk_out),
4719 .soclk_out(soclk_out)
4720);
4721dff #(41) d0_0 (
4722.l1clk(l1clk),
4723.siclk(siclk_out),
4724.soclk(soclk_out),
4725.d(din[40:0]),
4726.si({scan_in,so[39:0]}),
4727.so({so[39:0],scan_out}),
4728.q(dout[40:0])
4729);
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750endmodule
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764// any PARAMS parms go into naming of macro
4765
4766module fgu_fpy_dp_msff_macro__mux_aope__ports_4__stack_88c__width_64 (
4767 din0,
4768 din1,
4769 din2,
4770 din3,
4771 sel0,
4772 sel1,
4773 sel2,
4774 clk,
4775 en,
4776 se,
4777 scan_in,
4778 siclk,
4779 soclk,
4780 pce_ov,
4781 stop,
4782 dout,
4783 scan_out);
4784wire psel0;
4785wire psel1;
4786wire psel2;
4787wire psel3;
4788wire [63:0] muxout;
4789wire l1clk;
4790wire siclk_out;
4791wire soclk_out;
4792wire [62:0] so;
4793
4794 input [63:0] din0;
4795 input [63:0] din1;
4796 input [63:0] din2;
4797 input [63:0] din3;
4798 input sel0;
4799 input sel1;
4800 input sel2;
4801
4802
4803 input clk;
4804 input en;
4805 input se;
4806 input scan_in;
4807 input siclk;
4808 input soclk;
4809 input pce_ov;
4810 input stop;
4811
4812
4813
4814 output [63:0] dout;
4815
4816
4817 output scan_out;
4818
4819
4820
4821
4822cl_dp1_penc4_8x c1_0 (
4823 .test(1'b1),
4824 .sel0(sel0),
4825 .sel1(sel1),
4826 .sel2(sel2),
4827 .psel0(psel0),
4828 .psel1(psel1),
4829 .psel2(psel2),
4830 .psel3(psel3)
4831);
4832
4833mux4s #(64) d1_0 (
4834 .sel0(psel0),
4835 .sel1(psel1),
4836 .sel2(psel2),
4837 .sel3(psel3),
4838 .in0(din0[63:0]),
4839 .in1(din1[63:0]),
4840 .in2(din2[63:0]),
4841 .in3(din3[63:0]),
4842.dout(muxout[63:0])
4843);
4844cl_dp1_l1hdr_8x c0_0 (
4845.l2clk(clk),
4846.pce(en),
4847.aclk(siclk),
4848.bclk(soclk),
4849.l1clk(l1clk),
4850 .se(se),
4851 .pce_ov(pce_ov),
4852 .stop(stop),
4853 .siclk_out(siclk_out),
4854 .soclk_out(soclk_out)
4855);
4856dff #(64) d0_0 (
4857.l1clk(l1clk),
4858.siclk(siclk_out),
4859.soclk(soclk_out),
4860.d(muxout[63:0]),
4861.si({scan_in,so[62:0]}),
4862.so({so[62:0],scan_out}),
4863.q(dout[63:0])
4864);
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885endmodule
4886
4887
4888
4889
4890
4891
4892
4893
4894
4895// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4896// also for pass-gate with decoder
4897
4898
4899
4900
4901
4902// any PARAMS parms go into naming of macro
4903
4904module fgu_fpy_dp_mux_macro__mux_aope__ports_2__stack_88c__width_64 (
4905 din0,
4906 din1,
4907 sel0,
4908 dout);
4909wire psel0;
4910wire psel1;
4911
4912 input [63:0] din0;
4913 input [63:0] din1;
4914 input sel0;
4915 output [63:0] dout;
4916
4917
4918
4919
4920
4921cl_dp1_penc2_8x c0_0 (
4922 .sel0(sel0),
4923 .psel0(psel0),
4924 .psel1(psel1)
4925);
4926
4927mux2s #(64) d0_0 (
4928 .sel0(psel0),
4929 .sel1(psel1),
4930 .in0(din0[63:0]),
4931 .in1(din1[63:0]),
4932.dout(dout[63:0])
4933);
4934
4935
4936
4937
4938
4939
4940
4941
4942
4943
4944
4945
4946
4947endmodule
4948
4949
4950//
4951// 3:2 Carry Save Adder
4952//
4953//
4954
4955
4956
4957
4958// any PARAMS parms go into naming of macro
4959
4960
4961module fgu_fpy_dp_csa32_macro__stack_88c__width_68 (
4962 i0,
4963 i1,
4964 i2,
4965 carry,
4966 sum);
4967 input [67:0] i0;
4968 input [67:0] i1;
4969 input [67:0] i2;
4970 output [67:0] carry;
4971 output [67:0] sum;
4972
4973
4974
4975
4976
4977
4978csa32 #(68) d0_0 (
4979.in0(i0[67:0]),
4980.in1(i1[67:0]),
4981.in2(i2[67:0]),
4982.carry(carry[67:0]),
4983.sum(sum[67:0])
4984);
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994endmodule
4995
4996
4997//
4998// 4:2 Carry Save Adder
4999//
5000//
5001// i0 i1 i2 i3 | co | carry sum
5002// ------------|----|-----------
5003// 0 0 0 0 | 0 | 0 cin
5004// 0 0 0 1 | 0 | cin ~cin
5005// 0 0 1 0 | 0 | cin ~cin
5006// 0 0 1 1 | 0 | 1 cin
5007//
5008// 0 1 0 0 | 0 | cin ~cin
5009// 0 1 0 1 | 0 | 1 cin
5010// 0 1 1 0 | 1 | 0 cin
5011// 0 1 1 1 | 1 | cin ~cin
5012//
5013// 1 0 0 0 | 0 | cin ~cin
5014// 1 0 0 1 | 0 | 1 cin
5015// 1 0 1 0 | 1 | 0 cin
5016// 1 0 1 1 | 1 | cin ~cin
5017//
5018// 1 1 0 0 | 1 | 0 cin
5019// 1 1 0 1 | 1 | cin ~cin
5020// 1 1 1 0 | 1 | cin ~cin
5021// 1 1 1 1 | 1 | 1 cin
5022
5023
5024// This circuit looks like a compression of 5 terms down
5025// to 3 term on an individual bit basis. However, the fast
5026// output "co" from bit position "n" is actually the late input
5027// "cin" on bit position "n+1". Once a wrapper is written
5028// around multiple bits, this circuit will give the
5029// appearance of compressing 4 inputs down to 2 outputs.
5030
5031
5032
5033
5034
5035// any PARAMS parms go into naming of macro
5036
5037
5038module fgu_fpy_dp_csa42_macro__stack_88c__width_74 (
5039 i0,
5040 i1,
5041 i2,
5042 i3,
5043 cin,
5044 cout,
5045 carry,
5046 sum);
5047 input [73:0] i0;
5048 input [73:0] i1;
5049 input [73:0] i2;
5050 input [73:0] i3;
5051 input cin;
5052 output cout;
5053 output [73:0] carry;
5054 output [73:0] sum;
5055
5056
5057
5058
5059
5060
5061csa42 #(74) d0_0 (
5062.cin(cin),
5063.in0(i0[73:0]),
5064.in1(i1[73:0]),
5065.in2(i2[73:0]),
5066.in3(i3[73:0]),
5067.cout(cout),
5068.carry(carry[73:0]),
5069.sum(sum[73:0])
5070);
5071
5072
5073
5074
5075
5076
5077
5078
5079endmodule
5080
5081
5082
5083
5084
5085
5086
5087
5088// any PARAMS parms go into naming of macro
5089
5090module fgu_fpy_dp_msff_macro__stack_88c__width_40 (
5091 din,
5092 clk,
5093 en,
5094 se,
5095 scan_in,
5096 siclk,
5097 soclk,
5098 pce_ov,
5099 stop,
5100 dout,
5101 scan_out);
5102wire l1clk;
5103wire siclk_out;
5104wire soclk_out;
5105wire [38:0] so;
5106
5107 input [39:0] din;
5108
5109
5110 input clk;
5111 input en;
5112 input se;
5113 input scan_in;
5114 input siclk;
5115 input soclk;
5116 input pce_ov;
5117 input stop;
5118
5119
5120
5121 output [39:0] dout;
5122
5123
5124 output scan_out;
5125
5126
5127
5128
5129cl_dp1_l1hdr_8x c0_0 (
5130.l2clk(clk),
5131.pce(en),
5132.aclk(siclk),
5133.bclk(soclk),
5134.l1clk(l1clk),
5135 .se(se),
5136 .pce_ov(pce_ov),
5137 .stop(stop),
5138 .siclk_out(siclk_out),
5139 .soclk_out(soclk_out)
5140);
5141dff #(40) d0_0 (
5142.l1clk(l1clk),
5143.siclk(siclk_out),
5144.soclk(soclk_out),
5145.d(din[39:0]),
5146.si({scan_in,so[38:0]}),
5147.so({so[38:0],scan_out}),
5148.q(dout[39:0])
5149);
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169
5170endmodule
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184// any PARAMS parms go into naming of macro
5185
5186module fgu_fpy_dp_msff_macro__stack_88c__width_36 (
5187 din,
5188 clk,
5189 en,
5190 se,
5191 scan_in,
5192 siclk,
5193 soclk,
5194 pce_ov,
5195 stop,
5196 dout,
5197 scan_out);
5198wire l1clk;
5199wire siclk_out;
5200wire soclk_out;
5201wire [34:0] so;
5202
5203 input [35:0] din;
5204
5205
5206 input clk;
5207 input en;
5208 input se;
5209 input scan_in;
5210 input siclk;
5211 input soclk;
5212 input pce_ov;
5213 input stop;
5214
5215
5216
5217 output [35:0] dout;
5218
5219
5220 output scan_out;
5221
5222
5223
5224
5225cl_dp1_l1hdr_8x c0_0 (
5226.l2clk(clk),
5227.pce(en),
5228.aclk(siclk),
5229.bclk(soclk),
5230.l1clk(l1clk),
5231 .se(se),
5232 .pce_ov(pce_ov),
5233 .stop(stop),
5234 .siclk_out(siclk_out),
5235 .soclk_out(soclk_out)
5236);
5237dff #(36) d0_0 (
5238.l1clk(l1clk),
5239.siclk(siclk_out),
5240.soclk(soclk_out),
5241.d(din[35:0]),
5242.si({scan_in,so[34:0]}),
5243.so({so[34:0],scan_out}),
5244.q(dout[35:0])
5245);
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260
5261
5262
5263
5264
5265
5266endmodule
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276//
5277// 3:2 Carry Save Adder
5278//
5279//
5280
5281
5282
5283
5284// any PARAMS parms go into naming of macro
5285
5286
5287module fgu_fpy_dp_csa32_macro__stack_88c__width_25 (
5288 i0,
5289 i1,
5290 i2,
5291 carry,
5292 sum);
5293 input [24:0] i0;
5294 input [24:0] i1;
5295 input [24:0] i2;
5296 output [24:0] carry;
5297 output [24:0] sum;
5298
5299
5300
5301
5302
5303
5304csa32 #(25) d0_0 (
5305.in0(i0[24:0]),
5306.in1(i1[24:0]),
5307.in2(i2[24:0]),
5308.carry(carry[24:0]),
5309.sum(sum[24:0])
5310);
5311
5312
5313
5314
5315
5316
5317
5318
5319
5320endmodule
5321
5322
5323//
5324// 4:2 Carry Save Adder
5325//
5326//
5327// i0 i1 i2 i3 | co | carry sum
5328// ------------|----|-----------
5329// 0 0 0 0 | 0 | 0 cin
5330// 0 0 0 1 | 0 | cin ~cin
5331// 0 0 1 0 | 0 | cin ~cin
5332// 0 0 1 1 | 0 | 1 cin
5333//
5334// 0 1 0 0 | 0 | cin ~cin
5335// 0 1 0 1 | 0 | 1 cin
5336// 0 1 1 0 | 1 | 0 cin
5337// 0 1 1 1 | 1 | cin ~cin
5338//
5339// 1 0 0 0 | 0 | cin ~cin
5340// 1 0 0 1 | 0 | 1 cin
5341// 1 0 1 0 | 1 | 0 cin
5342// 1 0 1 1 | 1 | cin ~cin
5343//
5344// 1 1 0 0 | 1 | 0 cin
5345// 1 1 0 1 | 1 | cin ~cin
5346// 1 1 1 0 | 1 | cin ~cin
5347// 1 1 1 1 | 1 | 1 cin
5348
5349
5350// This circuit looks like a compression of 5 terms down
5351// to 3 term on an individual bit basis. However, the fast
5352// output "co" from bit position "n" is actually the late input
5353// "cin" on bit position "n+1". Once a wrapper is written
5354// around multiple bits, this circuit will give the
5355// appearance of compressing 4 inputs down to 2 outputs.
5356
5357
5358
5359
5360
5361// any PARAMS parms go into naming of macro
5362
5363
5364module fgu_fpy_dp_csa42_macro__stack_88c__width_3 (
5365 i0,
5366 i1,
5367 i2,
5368 i3,
5369 cin,
5370 cout,
5371 carry,
5372 sum);
5373 input [2:0] i0;
5374 input [2:0] i1;
5375 input [2:0] i2;
5376 input [2:0] i3;
5377 input cin;
5378 output cout;
5379 output [2:0] carry;
5380 output [2:0] sum;
5381
5382
5383
5384
5385
5386
5387csa42 #(3) d0_0 (
5388.cin(cin),
5389.in0(i0[2:0]),
5390.in1(i1[2:0]),
5391.in2(i2[2:0]),
5392.in3(i3[2:0]),
5393.cout(cout),
5394.carry(carry[2:0]),
5395.sum(sum[2:0])
5396);
5397
5398
5399
5400
5401
5402
5403
5404
5405endmodule
5406
5407
5408
5409
5410//
5411// 4:2 Carry Save Adder
5412//
5413//
5414// i0 i1 i2 i3 | co | carry sum
5415// ------------|----|-----------
5416// 0 0 0 0 | 0 | 0 cin
5417// 0 0 0 1 | 0 | cin ~cin
5418// 0 0 1 0 | 0 | cin ~cin
5419// 0 0 1 1 | 0 | 1 cin
5420//
5421// 0 1 0 0 | 0 | cin ~cin
5422// 0 1 0 1 | 0 | 1 cin
5423// 0 1 1 0 | 1 | 0 cin
5424// 0 1 1 1 | 1 | cin ~cin
5425//
5426// 1 0 0 0 | 0 | cin ~cin
5427// 1 0 0 1 | 0 | 1 cin
5428// 1 0 1 0 | 1 | 0 cin
5429// 1 0 1 1 | 1 | cin ~cin
5430//
5431// 1 1 0 0 | 1 | 0 cin
5432// 1 1 0 1 | 1 | cin ~cin
5433// 1 1 1 0 | 1 | cin ~cin
5434// 1 1 1 1 | 1 | 1 cin
5435
5436
5437// This circuit looks like a compression of 5 terms down
5438// to 3 term on an individual bit basis. However, the fast
5439// output "co" from bit position "n" is actually the late input
5440// "cin" on bit position "n+1". Once a wrapper is written
5441// around multiple bits, this circuit will give the
5442// appearance of compressing 4 inputs down to 2 outputs.
5443
5444
5445
5446
5447
5448// any PARAMS parms go into naming of macro
5449
5450
5451module fgu_fpy_dp_csa42_macro__stack_96c__width_96 (
5452 i0,
5453 i1,
5454 i2,
5455 i3,
5456 cin,
5457 cout,
5458 carry,
5459 sum);
5460 input [95:0] i0;
5461 input [95:0] i1;
5462 input [95:0] i2;
5463 input [95:0] i3;
5464 input cin;
5465 output cout;
5466 output [95:0] carry;
5467 output [95:0] sum;
5468
5469
5470
5471
5472
5473
5474csa42 #(96) d0_0 (
5475.cin(cin),
5476.in0(i0[95:0]),
5477.in1(i1[95:0]),
5478.in2(i2[95:0]),
5479.in3(i3[95:0]),
5480.cout(cout),
5481.carry(carry[95:0]),
5482.sum(sum[95:0])
5483);
5484
5485
5486
5487
5488
5489
5490
5491
5492endmodule
5493
5494
5495
5496
5497//
5498// 4:2 Carry Save Adder
5499//
5500//
5501// i0 i1 i2 i3 | co | carry sum
5502// ------------|----|-----------
5503// 0 0 0 0 | 0 | 0 cin
5504// 0 0 0 1 | 0 | cin ~cin
5505// 0 0 1 0 | 0 | cin ~cin
5506// 0 0 1 1 | 0 | 1 cin
5507//
5508// 0 1 0 0 | 0 | cin ~cin
5509// 0 1 0 1 | 0 | 1 cin
5510// 0 1 1 0 | 1 | 0 cin
5511// 0 1 1 1 | 1 | cin ~cin
5512//
5513// 1 0 0 0 | 0 | cin ~cin
5514// 1 0 0 1 | 0 | 1 cin
5515// 1 0 1 0 | 1 | 0 cin
5516// 1 0 1 1 | 1 | cin ~cin
5517//
5518// 1 1 0 0 | 1 | 0 cin
5519// 1 1 0 1 | 1 | cin ~cin
5520// 1 1 1 0 | 1 | cin ~cin
5521// 1 1 1 1 | 1 | 1 cin
5522
5523
5524// This circuit looks like a compression of 5 terms down
5525// to 3 term on an individual bit basis. However, the fast
5526// output "co" from bit position "n" is actually the late input
5527// "cin" on bit position "n+1". Once a wrapper is written
5528// around multiple bits, this circuit will give the
5529// appearance of compressing 4 inputs down to 2 outputs.
5530
5531
5532
5533
5534
5535// any PARAMS parms go into naming of macro
5536
5537
5538module fgu_fpy_dp_csa42_macro__stack_96c__width_92 (
5539 i0,
5540 i1,
5541 i2,
5542 i3,
5543 cin,
5544 cout,
5545 carry,
5546 sum);
5547 input [91:0] i0;
5548 input [91:0] i1;
5549 input [91:0] i2;
5550 input [91:0] i3;
5551 input cin;
5552 output cout;
5553 output [91:0] carry;
5554 output [91:0] sum;
5555
5556
5557
5558
5559
5560
5561csa42 #(92) d0_0 (
5562.cin(cin),
5563.in0(i0[91:0]),
5564.in1(i1[91:0]),
5565.in2(i2[91:0]),
5566.in3(i3[91:0]),
5567.cout(cout),
5568.carry(carry[91:0]),
5569.sum(sum[91:0])
5570);
5571
5572
5573
5574
5575
5576
5577
5578
5579endmodule
5580
5581
5582
5583
5584//
5585// 4:2 Carry Save Adder
5586//
5587//
5588// i0 i1 i2 i3 | co | carry sum
5589// ------------|----|-----------
5590// 0 0 0 0 | 0 | 0 cin
5591// 0 0 0 1 | 0 | cin ~cin
5592// 0 0 1 0 | 0 | cin ~cin
5593// 0 0 1 1 | 0 | 1 cin
5594//
5595// 0 1 0 0 | 0 | cin ~cin
5596// 0 1 0 1 | 0 | 1 cin
5597// 0 1 1 0 | 1 | 0 cin
5598// 0 1 1 1 | 1 | cin ~cin
5599//
5600// 1 0 0 0 | 0 | cin ~cin
5601// 1 0 0 1 | 0 | 1 cin
5602// 1 0 1 0 | 1 | 0 cin
5603// 1 0 1 1 | 1 | cin ~cin
5604//
5605// 1 1 0 0 | 1 | 0 cin
5606// 1 1 0 1 | 1 | cin ~cin
5607// 1 1 1 0 | 1 | cin ~cin
5608// 1 1 1 1 | 1 | 1 cin
5609
5610
5611// This circuit looks like a compression of 5 terms down
5612// to 3 term on an individual bit basis. However, the fast
5613// output "co" from bit position "n" is actually the late input
5614// "cin" on bit position "n+1". Once a wrapper is written
5615// around multiple bits, this circuit will give the
5616// appearance of compressing 4 inputs down to 2 outputs.
5617
5618
5619
5620
5621
5622// any PARAMS parms go into naming of macro
5623
5624
5625module fgu_fpy_dp_csa42_macro__stack_88c__width_32 (
5626 i0,
5627 i1,
5628 i2,
5629 i3,
5630 cin,
5631 cout,
5632 carry,
5633 sum);
5634 input [31:0] i0;
5635 input [31:0] i1;
5636 input [31:0] i2;
5637 input [31:0] i3;
5638 input cin;
5639 output cout;
5640 output [31:0] carry;
5641 output [31:0] sum;
5642
5643
5644
5645
5646
5647
5648csa42 #(32) d0_0 (
5649.cin(cin),
5650.in0(i0[31:0]),
5651.in1(i1[31:0]),
5652.in2(i2[31:0]),
5653.in3(i3[31:0]),
5654.cout(cout),
5655.carry(carry[31:0]),
5656.sum(sum[31:0])
5657);
5658
5659
5660
5661
5662
5663
5664
5665
5666endmodule
5667
5668
5669
5670
5671
5672
5673
5674
5675// any PARAMS parms go into naming of macro
5676
5677module fgu_fpy_dp_msff_macro__mux_aope__ports_5__stack_88c__width_72 (
5678 din0,
5679 din1,
5680 din2,
5681 din3,
5682 din4,
5683 sel0,
5684 sel1,
5685 sel2,
5686 sel3,
5687 clk,
5688 en,
5689 se,
5690 scan_in,
5691 siclk,
5692 soclk,
5693 pce_ov,
5694 stop,
5695 dout,
5696 scan_out);
5697wire psel0;
5698wire psel1;
5699wire psel2;
5700wire psel3;
5701wire psel4;
5702wire [71:0] muxout;
5703wire l1clk;
5704wire siclk_out;
5705wire soclk_out;
5706wire [70:0] so;
5707
5708 input [71:0] din0;
5709 input [71:0] din1;
5710 input [71:0] din2;
5711 input [71:0] din3;
5712 input [71:0] din4;
5713 input sel0;
5714 input sel1;
5715 input sel2;
5716 input sel3;
5717
5718
5719 input clk;
5720 input en;
5721 input se;
5722 input scan_in;
5723 input siclk;
5724 input soclk;
5725 input pce_ov;
5726 input stop;
5727
5728
5729
5730 output [71:0] dout;
5731
5732
5733 output scan_out;
5734
5735
5736
5737
5738cl_dp1_penc5_8x c1_0 (
5739 .test(1'b1),
5740 .sel0(sel0),
5741 .sel1(sel1),
5742 .sel2(sel2),
5743 .sel3(sel3),
5744 .psel0(psel0),
5745 .psel1(psel1),
5746 .psel2(psel2),
5747 .psel3(psel3),
5748 .psel4(psel4)
5749);
5750
5751mux5s #(72) d1_0 (
5752 .sel0(psel0),
5753 .sel1(psel1),
5754 .sel2(psel2),
5755 .sel3(psel3),
5756 .sel4(psel4),
5757 .in0(din0[71:0]),
5758 .in1(din1[71:0]),
5759 .in2(din2[71:0]),
5760 .in3(din3[71:0]),
5761 .in4(din4[71:0]),
5762.dout(muxout[71:0])
5763);
5764cl_dp1_l1hdr_8x c0_0 (
5765.l2clk(clk),
5766.pce(en),
5767.aclk(siclk),
5768.bclk(soclk),
5769.l1clk(l1clk),
5770 .se(se),
5771 .pce_ov(pce_ov),
5772 .stop(stop),
5773 .siclk_out(siclk_out),
5774 .soclk_out(soclk_out)
5775);
5776dff #(72) d0_0 (
5777.l1clk(l1clk),
5778.siclk(siclk_out),
5779.soclk(soclk_out),
5780.d(muxout[71:0]),
5781.si({scan_in,so[70:0]}),
5782.so({so[70:0],scan_out}),
5783.q(dout[71:0])
5784);
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797
5798
5799
5800
5801
5802
5803
5804
5805endmodule
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819// any PARAMS parms go into naming of macro
5820
5821module fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_62 (
5822 din0,
5823 sel0,
5824 din1,
5825 sel1,
5826 din2,
5827 sel2,
5828 clk,
5829 en,
5830 se,
5831 scan_in,
5832 siclk,
5833 soclk,
5834 pce_ov,
5835 stop,
5836 dout,
5837 scan_out);
5838wire buffout0;
5839wire buffout1;
5840wire buffout2;
5841wire [61:0] muxout;
5842wire l1clk;
5843wire siclk_out;
5844wire soclk_out;
5845wire [60:0] so;
5846
5847 input [61:0] din0;
5848 input sel0;
5849 input [61:0] din1;
5850 input sel1;
5851 input [61:0] din2;
5852 input sel2;
5853
5854
5855 input clk;
5856 input en;
5857 input se;
5858 input scan_in;
5859 input siclk;
5860 input soclk;
5861 input pce_ov;
5862 input stop;
5863
5864
5865
5866 output [61:0] dout;
5867
5868
5869 output scan_out;
5870
5871
5872
5873
5874cl_dp1_muxbuff3_8x c1_0 (
5875 .in0(sel0),
5876 .in1(sel1),
5877 .in2(sel2),
5878 .out0(buffout0),
5879 .out1(buffout1),
5880 .out2(buffout2)
5881);
5882mux3s #(62) d1_0 (
5883 .sel0(buffout0),
5884 .sel1(buffout1),
5885 .sel2(buffout2),
5886 .in0(din0[61:0]),
5887 .in1(din1[61:0]),
5888 .in2(din2[61:0]),
5889.dout(muxout[61:0])
5890);
5891cl_dp1_l1hdr_8x c0_0 (
5892.l2clk(clk),
5893.pce(en),
5894.aclk(siclk),
5895.bclk(soclk),
5896.l1clk(l1clk),
5897 .se(se),
5898 .pce_ov(pce_ov),
5899 .stop(stop),
5900 .siclk_out(siclk_out),
5901 .soclk_out(soclk_out)
5902);
5903dff #(62) d0_0 (
5904.l1clk(l1clk),
5905.siclk(siclk_out),
5906.soclk(soclk_out),
5907.d(muxout[61:0]),
5908.si({scan_in,so[60:0]}),
5909.so({so[60:0],scan_out}),
5910.q(dout[61:0])
5911);
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931
5932endmodule
5933
5934
5935
5936
5937
5938
5939
5940
5941
5942
5943
5944
5945
5946// any PARAMS parms go into naming of macro
5947
5948module fgu_fpy_dp_msff_macro__mux_aonpe__ports_3__stack_88c__width_69 (
5949 din0,
5950 sel0,
5951 din1,
5952 sel1,
5953 din2,
5954 sel2,
5955 clk,
5956 en,
5957 se,
5958 scan_in,
5959 siclk,
5960 soclk,
5961 pce_ov,
5962 stop,
5963 dout,
5964 scan_out);
5965wire buffout0;
5966wire buffout1;
5967wire buffout2;
5968wire [68:0] muxout;
5969wire l1clk;
5970wire siclk_out;
5971wire soclk_out;
5972wire [67:0] so;
5973
5974 input [68:0] din0;
5975 input sel0;
5976 input [68:0] din1;
5977 input sel1;
5978 input [68:0] din2;
5979 input sel2;
5980
5981
5982 input clk;
5983 input en;
5984 input se;
5985 input scan_in;
5986 input siclk;
5987 input soclk;
5988 input pce_ov;
5989 input stop;
5990
5991
5992
5993 output [68:0] dout;
5994
5995
5996 output scan_out;
5997
5998
5999
6000
6001cl_dp1_muxbuff3_8x c1_0 (
6002 .in0(sel0),
6003 .in1(sel1),
6004 .in2(sel2),
6005 .out0(buffout0),
6006 .out1(buffout1),
6007 .out2(buffout2)
6008);
6009mux3s #(69) d1_0 (
6010 .sel0(buffout0),
6011 .sel1(buffout1),
6012 .sel2(buffout2),
6013 .in0(din0[68:0]),
6014 .in1(din1[68:0]),
6015 .in2(din2[68:0]),
6016.dout(muxout[68:0])
6017);
6018cl_dp1_l1hdr_8x c0_0 (
6019.l2clk(clk),
6020.pce(en),
6021.aclk(siclk),
6022.bclk(soclk),
6023.l1clk(l1clk),
6024 .se(se),
6025 .pce_ov(pce_ov),
6026 .stop(stop),
6027 .siclk_out(siclk_out),
6028 .soclk_out(soclk_out)
6029);
6030dff #(69) d0_0 (
6031.l1clk(l1clk),
6032.siclk(siclk_out),
6033.soclk(soclk_out),
6034.d(muxout[68:0]),
6035.si({scan_in,so[67:0]}),
6036.so({so[67:0],scan_out}),
6037.q(dout[68:0])
6038);
6039
6040
6041
6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054
6055
6056
6057
6058
6059endmodule
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069//
6070// xor macro for ports = 2,3
6071//
6072//
6073
6074
6075
6076
6077
6078module fgu_fpy_dp_xor_macro__ports_2__stack_88c__width_64 (
6079 din0,
6080 din1,
6081 dout);
6082 input [63:0] din0;
6083 input [63:0] din1;
6084 output [63:0] dout;
6085
6086
6087
6088
6089
6090xor2 #(64) d0_0 (
6091.in0(din0[63:0]),
6092.in1(din1[63:0]),
6093.out(dout[63:0])
6094);
6095
6096
6097
6098
6099
6100
6101
6102
6103endmodule
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113// any PARAMS parms go into naming of macro
6114
6115module fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_72 (
6116 din0,
6117 din1,
6118 din2,
6119 din3,
6120 din4,
6121 din5,
6122 sel0,
6123 sel1,
6124 sel2,
6125 sel3,
6126 sel4,
6127 clk,
6128 en,
6129 se,
6130 scan_in,
6131 siclk,
6132 soclk,
6133 pce_ov,
6134 stop,
6135 dout,
6136 scan_out);
6137wire psel0;
6138wire psel1;
6139wire psel2;
6140wire psel3;
6141wire psel4;
6142wire psel5;
6143wire [71:0] muxout;
6144wire l1clk;
6145wire siclk_out;
6146wire soclk_out;
6147wire [70:0] so;
6148
6149 input [71:0] din0;
6150 input [71:0] din1;
6151 input [71:0] din2;
6152 input [71:0] din3;
6153 input [71:0] din4;
6154 input [71:0] din5;
6155 input sel0;
6156 input sel1;
6157 input sel2;
6158 input sel3;
6159 input sel4;
6160
6161
6162 input clk;
6163 input en;
6164 input se;
6165 input scan_in;
6166 input siclk;
6167 input soclk;
6168 input pce_ov;
6169 input stop;
6170
6171
6172
6173 output [71:0] dout;
6174
6175
6176 output scan_out;
6177
6178
6179
6180
6181cl_dp1_penc6_8x c1_0 (
6182 .test(1'b1),
6183 .sel0(sel0),
6184 .sel1(sel1),
6185 .sel2(sel2),
6186 .sel3(sel3),
6187 .sel4(sel4),
6188 .psel0(psel0),
6189 .psel1(psel1),
6190 .psel2(psel2),
6191 .psel3(psel3),
6192 .psel4(psel4),
6193 .psel5(psel5)
6194);
6195
6196mux6s #(72) d1_0 (
6197 .sel0(psel0),
6198 .sel1(psel1),
6199 .sel2(psel2),
6200 .sel3(psel3),
6201 .sel4(psel4),
6202 .sel5(psel5),
6203 .in0(din0[71:0]),
6204 .in1(din1[71:0]),
6205 .in2(din2[71:0]),
6206 .in3(din3[71:0]),
6207 .in4(din4[71:0]),
6208 .in5(din5[71:0]),
6209.dout(muxout[71:0])
6210);
6211cl_dp1_l1hdr_8x c0_0 (
6212.l2clk(clk),
6213.pce(en),
6214.aclk(siclk),
6215.bclk(soclk),
6216.l1clk(l1clk),
6217 .se(se),
6218 .pce_ov(pce_ov),
6219 .stop(stop),
6220 .siclk_out(siclk_out),
6221 .soclk_out(soclk_out)
6222);
6223dff #(72) d0_0 (
6224.l1clk(l1clk),
6225.siclk(siclk_out),
6226.soclk(soclk_out),
6227.d(muxout[71:0]),
6228.si({scan_in,so[70:0]}),
6229.so({so[70:0],scan_out}),
6230.q(dout[71:0])
6231);
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252endmodule
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266// any PARAMS parms go into naming of macro
6267
6268module fgu_fpy_dp_msff_macro__mux_aope__ports_6__stack_88c__width_64 (
6269 din0,
6270 din1,
6271 din2,
6272 din3,
6273 din4,
6274 din5,
6275 sel0,
6276 sel1,
6277 sel2,
6278 sel3,
6279 sel4,
6280 clk,
6281 en,
6282 se,
6283 scan_in,
6284 siclk,
6285 soclk,
6286 pce_ov,
6287 stop,
6288 dout,
6289 scan_out);
6290wire psel0;
6291wire psel1;
6292wire psel2;
6293wire psel3;
6294wire psel4;
6295wire psel5;
6296wire [63:0] muxout;
6297wire l1clk;
6298wire siclk_out;
6299wire soclk_out;
6300wire [62:0] so;
6301
6302 input [63:0] din0;
6303 input [63:0] din1;
6304 input [63:0] din2;
6305 input [63:0] din3;
6306 input [63:0] din4;
6307 input [63:0] din5;
6308 input sel0;
6309 input sel1;
6310 input sel2;
6311 input sel3;
6312 input sel4;
6313
6314
6315 input clk;
6316 input en;
6317 input se;
6318 input scan_in;
6319 input siclk;
6320 input soclk;
6321 input pce_ov;
6322 input stop;
6323
6324
6325
6326 output [63:0] dout;
6327
6328
6329 output scan_out;
6330
6331
6332
6333
6334cl_dp1_penc6_8x c1_0 (
6335 .test(1'b1),
6336 .sel0(sel0),
6337 .sel1(sel1),
6338 .sel2(sel2),
6339 .sel3(sel3),
6340 .sel4(sel4),
6341 .psel0(psel0),
6342 .psel1(psel1),
6343 .psel2(psel2),
6344 .psel3(psel3),
6345 .psel4(psel4),
6346 .psel5(psel5)
6347);
6348
6349mux6s #(64) d1_0 (
6350 .sel0(psel0),
6351 .sel1(psel1),
6352 .sel2(psel2),
6353 .sel3(psel3),
6354 .sel4(psel4),
6355 .sel5(psel5),
6356 .in0(din0[63:0]),
6357 .in1(din1[63:0]),
6358 .in2(din2[63:0]),
6359 .in3(din3[63:0]),
6360 .in4(din4[63:0]),
6361 .in5(din5[63:0]),
6362.dout(muxout[63:0])
6363);
6364cl_dp1_l1hdr_8x c0_0 (
6365.l2clk(clk),
6366.pce(en),
6367.aclk(siclk),
6368.bclk(soclk),
6369.l1clk(l1clk),
6370 .se(se),
6371 .pce_ov(pce_ov),
6372 .stop(stop),
6373 .siclk_out(siclk_out),
6374 .soclk_out(soclk_out)
6375);
6376dff #(64) d0_0 (
6377.l1clk(l1clk),
6378.siclk(siclk_out),
6379.soclk(soclk_out),
6380.d(muxout[63:0]),
6381.si({scan_in,so[62:0]}),
6382.so({so[62:0],scan_out}),
6383.q(dout[63:0])
6384);
6385
6386
6387
6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402
6403
6404
6405endmodule
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419// any PARAMS parms go into naming of macro
6420
6421module fgu_fpy_dp_msff_macro__stack_88c__width_4 (
6422 din,
6423 clk,
6424 en,
6425 se,
6426 scan_in,
6427 siclk,
6428 soclk,
6429 pce_ov,
6430 stop,
6431 dout,
6432 scan_out);
6433wire l1clk;
6434wire siclk_out;
6435wire soclk_out;
6436wire [2:0] so;
6437
6438 input [3:0] din;
6439
6440
6441 input clk;
6442 input en;
6443 input se;
6444 input scan_in;
6445 input siclk;
6446 input soclk;
6447 input pce_ov;
6448 input stop;
6449
6450
6451
6452 output [3:0] dout;
6453
6454
6455 output scan_out;
6456
6457
6458
6459
6460cl_dp1_l1hdr_8x c0_0 (
6461.l2clk(clk),
6462.pce(en),
6463.aclk(siclk),
6464.bclk(soclk),
6465.l1clk(l1clk),
6466 .se(se),
6467 .pce_ov(pce_ov),
6468 .stop(stop),
6469 .siclk_out(siclk_out),
6470 .soclk_out(soclk_out)
6471);
6472dff #(4) d0_0 (
6473.l1clk(l1clk),
6474.siclk(siclk_out),
6475.soclk(soclk_out),
6476.d(din[3:0]),
6477.si({scan_in,so[2:0]}),
6478.so({so[2:0],scan_out}),
6479.q(dout[3:0])
6480);
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501endmodule
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511//
6512// buff macro
6513//
6514//
6515
6516
6517
6518
6519
6520module fgu_fpy_dp_buff_macro__stack_88c__width_1 (
6521 din,
6522 dout);
6523 input [0:0] din;
6524 output [0:0] dout;
6525
6526
6527
6528
6529
6530
6531buff #(1) d0_0 (
6532.in(din[0:0]),
6533.out(dout[0:0])
6534);
6535
6536
6537
6538
6539
6540
6541
6542
6543endmodule
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553// any PARAMS parms go into naming of macro
6554
6555module fgu_fpy_dp_msff_macro__mux_aope__ports_7__stack_88c__width_68 (
6556 din0,
6557 din1,
6558 din2,
6559 din3,
6560 din4,
6561 din5,
6562 din6,
6563 sel0,
6564 sel1,
6565 sel2,
6566 sel3,
6567 sel4,
6568 sel5,
6569 clk,
6570 en,
6571 se,
6572 scan_in,
6573 siclk,
6574 soclk,
6575 pce_ov,
6576 stop,
6577 dout,
6578 scan_out);
6579wire psel0;
6580wire psel1;
6581wire psel2;
6582wire psel3;
6583wire psel4;
6584wire psel5;
6585wire psel6;
6586wire [67:0] muxout;
6587wire l1clk;
6588wire siclk_out;
6589wire soclk_out;
6590wire [66:0] so;
6591
6592 input [67:0] din0;
6593 input [67:0] din1;
6594 input [67:0] din2;
6595 input [67:0] din3;
6596 input [67:0] din4;
6597 input [67:0] din5;
6598 input [67:0] din6;
6599 input sel0;
6600 input sel1;
6601 input sel2;
6602 input sel3;
6603 input sel4;
6604 input sel5;
6605
6606
6607 input clk;
6608 input en;
6609 input se;
6610 input scan_in;
6611 input siclk;
6612 input soclk;
6613 input pce_ov;
6614 input stop;
6615
6616
6617
6618 output [67:0] dout;
6619
6620
6621 output scan_out;
6622
6623
6624
6625
6626cl_dp1_penc7_8x c1_0 (
6627 .test(1'b1),
6628 .sel0(sel0),
6629 .sel1(sel1),
6630 .sel2(sel2),
6631 .sel3(sel3),
6632 .sel4(sel4),
6633 .sel5(sel5),
6634 .psel0(psel0),
6635 .psel1(psel1),
6636 .psel2(psel2),
6637 .psel3(psel3),
6638 .psel4(psel4),
6639 .psel5(psel5),
6640 .psel6(psel6)
6641);
6642
6643mux7s #(68) d1_0 (
6644 .sel0(psel0),
6645 .sel1(psel1),
6646 .sel2(psel2),
6647 .sel3(psel3),
6648 .sel4(psel4),
6649 .sel5(psel5),
6650 .sel6(psel6),
6651 .in0(din0[67:0]),
6652 .in1(din1[67:0]),
6653 .in2(din2[67:0]),
6654 .in3(din3[67:0]),
6655 .in4(din4[67:0]),
6656 .in5(din5[67:0]),
6657 .in6(din6[67:0]),
6658.dout(muxout[67:0])
6659);
6660cl_dp1_l1hdr_8x c0_0 (
6661.l2clk(clk),
6662.pce(en),
6663.aclk(siclk),
6664.bclk(soclk),
6665.l1clk(l1clk),
6666 .se(se),
6667 .pce_ov(pce_ov),
6668 .stop(stop),
6669 .siclk_out(siclk_out),
6670 .soclk_out(soclk_out)
6671);
6672dff #(68) d0_0 (
6673.l1clk(l1clk),
6674.siclk(siclk_out),
6675.soclk(soclk_out),
6676.d(muxout[67:0]),
6677.si({scan_in,so[66:0]}),
6678.so({so[66:0],scan_out}),
6679.q(dout[67:0])
6680);
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701endmodule
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715// any PARAMS parms go into naming of macro
6716
6717module fgu_fpy_dp_msff_macro__mux_aope__ports_2__stack_88c__width_64 (
6718 din0,
6719 din1,
6720 sel0,
6721 clk,
6722 en,
6723 se,
6724 scan_in,
6725 siclk,
6726 soclk,
6727 pce_ov,
6728 stop,
6729 dout,
6730 scan_out);
6731wire psel0;
6732wire psel1;
6733wire [63:0] muxout;
6734wire l1clk;
6735wire siclk_out;
6736wire soclk_out;
6737wire [62:0] so;
6738
6739 input [63:0] din0;
6740 input [63:0] din1;
6741 input sel0;
6742
6743
6744 input clk;
6745 input en;
6746 input se;
6747 input scan_in;
6748 input siclk;
6749 input soclk;
6750 input pce_ov;
6751 input stop;
6752
6753
6754
6755 output [63:0] dout;
6756
6757
6758 output scan_out;
6759
6760
6761
6762
6763cl_dp1_penc2_8x c1_0 (
6764 .sel0(sel0),
6765 .psel0(psel0),
6766 .psel1(psel1)
6767);
6768
6769mux2s #(64) d1_0 (
6770 .sel0(psel0),
6771 .sel1(psel1),
6772 .in0(din0[63:0]),
6773 .in1(din1[63:0]),
6774.dout(muxout[63:0])
6775);
6776cl_dp1_l1hdr_8x c0_0 (
6777.l2clk(clk),
6778.pce(en),
6779.aclk(siclk),
6780.bclk(soclk),
6781.l1clk(l1clk),
6782 .se(se),
6783 .pce_ov(pce_ov),
6784 .stop(stop),
6785 .siclk_out(siclk_out),
6786 .soclk_out(soclk_out)
6787);
6788dff #(64) d0_0 (
6789.l1clk(l1clk),
6790.siclk(siclk_out),
6791.soclk(soclk_out),
6792.d(muxout[63:0]),
6793.si({scan_in,so[62:0]}),
6794.so({so[62:0],scan_out}),
6795.q(dout[63:0])
6796);
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817endmodule
6818
6819
6820
6821
6822
6823
6824
6825