Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / exu / rtl / exu_edp_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: exu_edp_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 exu_edp_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 in_rngl_cdbus,
45 tlu_pc_d,
46 dec_inst_d,
47 dec_thread_group,
48 dec_exu_clken,
49 fgu_exu_w_vld_fx5,
50 fgu_exu_result_fx5,
51 irf_rs1_data_d,
52 irf_rs2_data_d,
53 irf_rs3_data_d,
54 lsu_asi_clken,
55 lsu_exu_ld_data_b,
56 mbi_write_data_p1,
57 exu_y_data_e,
58 rml_rng_data_out,
59 rml_rng_rd_ctl,
60 rml_rng_ack_ctl,
61 rml_rng_ack_cwp_tid,
62 rml_rng_ack_ecc_tid,
63 rml_rng_ack_det_vld,
64 rml_rng_wt_imask_ctl,
65 rml_irf_ecc_data,
66 rml_rng_ack_sel_ctl,
67 rml_rng_y_data,
68 ect_rng_ccr_data,
69 ect_mbist_sel,
70 ecc_mbist_write_data_p4,
71 ect_rs1_early_sel_d,
72 ect_rs2_early_sel_d,
73 ect_rs3_early_sel_d,
74 ect_rs2_imm_sel_d,
75 ect_rs1_late_sel_d,
76 ect_rs2_late_sel_d,
77 ect_rs3_late_sel_d,
78 ect_logic_sel_d,
79 ect_shift_sel_d,
80 ect_br_taken_z0_e,
81 ect_br_taken_z1_e,
82 ect_alignaddress_little_e,
83 ect_as_clip_e_,
84 ect_as_cin_e,
85 ect_array_sel_e,
86 ect_edge_lmask_e,
87 ect_edge_lrmask_e,
88 ect_pstate_am_e,
89 ect_rm_early_sel_e,
90 ect_rm_late_sel_e,
91 ect_store_mux_sel_e,
92 ect_ex_emb_clken,
93 ect_tg_clken,
94 exu_rngl_cdbus,
95 exu_br_taken_e,
96 exu_br_taken_e1,
97 exu_address_e,
98 exu_gsr_data_m,
99 exu_store_data_e,
100 exu_ibp_m,
101 exu_trap_number_b,
102 exu_mbi_irf_fail_,
103 edp_rng_in_ff,
104 edp_br_flag_e,
105 exu_rs1_data_e,
106 edp_rcc_data_e,
107 exu_rs2_data_e,
108 edp_rs3_data_e,
109 edp_rcc_ecc_e,
110 edp_rs2_ecc_e,
111 edp_rs3_ecc_e,
112 edp_add_cout64_e,
113 edp_add_data_e_b63,
114 edp_add_zdetect_e_,
115 edp_sub_cout64_e,
116 edp_sub_data_e_b63,
117 edp_sub_data_e_b31,
118 edp_sub_zdetect_e_,
119 edp_logical_data_e_b63,
120 edp_logical_data_e_b31,
121 edp_lg_zdetect_e,
122 edp_address_m,
123 edp_rd_ff_m,
124 edp_rd_ff_w,
125 edp_rd_ff_w2,
126 scan_out);
127wire stop;
128wire test;
129wire se;
130wire pce_ov;
131wire siclk;
132wire soclk;
133wire [63:0] rd_ff_m;
134wire [63:0] rd_ff_b;
135wire [63:0] rd_ff_w_plus1;
136wire [63:0] rd_ff_w2_plus1;
137wire [63:0] early_rs1_data;
138wire i_bp_ff_rcc_scanin;
139wire i_bp_ff_rcc_scanout;
140wire [63:0] rd_data_e;
141wire [71:0] rcc_data_e;
142wire [4:0] rs1_psel;
143wire i_bp_ff_rs1_scanin;
144wire i_bp_ff_rs1_scanout;
145wire [63:0] rs1_data_e;
146wire br_flag_e0_;
147wire br_taken_nand0;
148wire br_taken_nand1;
149wire inst_d_09_buf;
150wire inst_d_10_buf;
151wire inst_d_12_buf;
152wire inst_d_18_buf;
153wire inst_d_21_buf0;
154wire inst_d_21_buf1;
155wire inst_d_29_buf;
156wire [63:0] imm_rs2_data;
157wire [63:0] early_byp_rs2_data;
158wire i_bp_ff_rs2_scanin;
159wire i_bp_ff_rs2_scanout;
160wire [71:0] rs2_data_e;
161wire [63:0] early_rs3_data;
162wire [4:0] rs3_psel;
163wire i_bp_ff_rs3_scanin;
164wire i_bp_ff_rs3_scanout;
165wire [71:0] rs3_data_e;
166wire [63:0] wrxx_xor;
167wire [63:0] store_data_e;
168wire [1:0] rs1_x_rs2_cmp_e;
169wire [1:0] rs1_x_rs2_cmp_e_;
170wire pstate_am_e_;
171wire [1:0] edge_lr_nand3_;
172wire edge_l_nand3_;
173wire edge_l_nand2_;
174wire edge_lr_sel_e;
175wire edge_l_sel_e;
176wire [1:0] cmp_mbi_irf_fail_;
177wire rs3_data_e_b47_buf;
178wire [63:0] logical_data_e;
179wire [32:0] array_res_e;
180wire [63:0] early_rd_data;
181wire [2:2] tcu_muxtest_rep0;
182wire [63:0] sub_data_e;
183wire [63:0] add_data_e;
184wire [2:0] add_clip;
185wire [63:0] shifter_data_e;
186wire i_rm_ff_m_scanin;
187wire i_rm_ff_m_scanout;
188wire [2:0] addsub_inc;
189wire [2:0] addsub_data_m;
190wire i_rm_ff_b_scanin;
191wire i_rm_ff_b_scanout;
192wire i_rm_ff_w_scanin;
193wire i_rm_ff_w_scanout;
194wire [63:0] rd_ff_w;
195wire i_rm_ff_w_plus1_scanin;
196wire i_rm_ff_w_plus1_scanout;
197wire i_rm_ff_w2_scanin;
198wire i_rm_ff_w2_scanout;
199wire ibe_trap_d;
200wire ibe_trap_e;
201wire ibp_m;
202wire [63:0] rd_ff_w2;
203wire i_rm_ff_w2_plus1_scanin;
204wire i_rm_ff_w2_plus1_scanout;
205wire [3:0] logic_sel_e;
206wire [3:0] logic_hsel_e;
207wire [3:0] logic_lsel_e;
208wire [63:0] rs1_data_e_;
209wire [63:0] log_rs2_data_e_;
210wire [63:0] logical_11_;
211wire [63:0] logical_10_;
212wire [63:0] logical_01_;
213wire [63:0] logical_00_;
214wire i_misc_ff_scanin;
215wire i_misc_ff_scanout;
216wire [6:0] shift_sel_e;
217wire sh_sel_rshift;
218wire sh_sel_lshift;
219wire sh_sel_rax;
220wire sh_sel_ra;
221wire sh_sel_rshiftx;
222wire sh_sel_llx;
223wire [63:0] sh_rs1_buf;
224wire sh_rs1_63_;
225wire sh_rs1_31_;
226wire sel_rshift00;
227wire sel_lshift00;
228wire sel_rshiftx00;
229wire sel_ra00;
230wire sel_rax00;
231wire sh_rs1_00_63;
232wire sh_rs1_00_31;
233wire [70:0] mask_mux00;
234wire sel_rshift08;
235wire sel_lshift08;
236wire sel_rshiftx08;
237wire sel_ra08;
238wire sel_rax08;
239wire sh_rs1_08_63;
240wire sh_rs1_08_31;
241wire [70:0] mask_mux08;
242wire sel_rshift16;
243wire sel_lshift16;
244wire sel_rshiftx16;
245wire sel_ra16;
246wire sel_rax16;
247wire sh_rs1_16_63;
248wire sh_rs1_16_31;
249wire [70:0] mask_mux16;
250wire sel_rshift24;
251wire sel_lshift24;
252wire sel_rshiftx24;
253wire sel_ra24;
254wire sel_rax24;
255wire sh_rs1_24_63;
256wire sh_rs1_24_31;
257wire [70:0] mask_mux24;
258wire sel_rshiftx32;
259wire sel_rax32;
260wire sel_llx32;
261wire sh_rs1_32_63;
262wire [70:0] mask_mux32;
263wire sel_rshiftx40;
264wire sel_rax40;
265wire sel_llx40;
266wire sh_rs1_40_63;
267wire [70:0] mask_mux40;
268wire sel_rshiftx48;
269wire sel_rax48;
270wire sel_llx48;
271wire sh_rs1_48_63;
272wire [70:0] mask_mux48;
273wire sel_rshiftx56;
274wire sel_rax56;
275wire sel_llx56;
276wire sh_rs1_56_63;
277wire [70:0] mask_mux56;
278wire rs2_5;
279wire [70:0] sht_by8;
280wire [70:0] sht_by8_buf;
281wire [2:0] rs2_;
282wire [2:0] rs2_mux;
283wire [63:0] rs2_data_e_;
284wire [2:0] addsub_xor;
285wire [1:0] i_as_cla_inc_unused;
286wire [63:0] cla_ea;
287wire i_asi0_ff_scanin;
288wire i_asi0_ff_scanout;
289wire [64:0] rng_ack_data;
290wire i_asi1_ff_scanin;
291wire i_asi1_ff_scanout;
292wire [38:0] asi_inst_mask_reg;
293wire [64:0] rng_out_ff;
294wire i_asi_imask_ff_scanin;
295wire i_asi_imask_ff_scanout;
296wire [6:0] inst_mask_sel_;
297wire [6:0] inst_mask_sel;
298wire [31:0] imask_cmp_data;
299wire ibe_cmp8_d_;
300wire ibe_cmp32_d;
301wire ibe_cmp8_d;
302wire [8:0] zint_e;
303wire [10:0] yint_e;
304wire [10:0] xint_e;
305wire [13:0] array_upper_data0;
306wire [13:0] array_upper_data1;
307wire [13:0] array_upper_data2;
308wire [13:0] array_upper_data3;
309wire [13:0] array_upper_data4;
310wire [13:0] array_upper_data5;
311wire [13:0] array_upper_e;
312wire [11:0] array_middle_e;
313wire [4:0] array_lower_e;
314wire [32:0] array08_data;
315wire [32:0] array16_data;
316wire [32:0] array32_data;
317
318
319// *** Global Inputs ***
320
321input l2clk;
322input scan_in;
323input tcu_pce_ov; // scan signals
324input spc_aclk;
325input spc_bclk;
326input tcu_scan_en;
327input tcu_dectest; // Passgate mux test control
328input tcu_muxtest; // Passgate mux test control
329
330input [64:0] in_rngl_cdbus; // ASI Ring
331
332input [47:2] tlu_pc_d;
333input [31:0] dec_inst_d;
334input dec_thread_group; // Static Signal : Tie UP or DOWN where cloning occurs
335input dec_exu_clken;
336
337input fgu_exu_w_vld_fx5;
338input [63:0] fgu_exu_result_fx5; // FGU Integer results
339
340input [71:0] irf_rs1_data_d;
341input [71:0] irf_rs2_data_d;
342input [71:0] irf_rs3_data_d;
343
344input lsu_asi_clken;
345input [63:0] lsu_exu_ld_data_b;
346
347input [7:0] mbi_write_data_p1; // MBIST
348
349
350// *** Local Inputs ***
351
352input [31:0] exu_y_data_e;
353
354input [5:0] rml_rng_data_out; // ASI Read data from RML
355input [4:0] rml_rng_rd_ctl; // ASI Read Select
356input [1:0] rml_rng_ack_ctl; // ASI Read Ack Select
357input [1:0] rml_rng_ack_cwp_tid; // ASI Write CWP tid
358input [1:0] rml_rng_ack_ecc_tid; // ASI Read ECC tid
359input rml_rng_ack_det_vld; // ASI Read Ack vld Select
360input rml_rng_wt_imask_ctl; // Enable for ASI write to Instruction mask reg
361input [7:0] rml_irf_ecc_data; // Saved irf ECC data for indet. ASI access
362input rml_rng_ack_sel_ctl; // Sel ack type onto ASI rng
363input [31:0] rml_rng_y_data;
364input [7:0] ect_rng_ccr_data;
365
366input ect_mbist_sel; // MBIST
367input [7:0] ecc_mbist_write_data_p4; // MBIST
368
369input [4:0] ect_rs1_early_sel_d;
370input [4:0] ect_rs2_early_sel_d;
371input [4:0] ect_rs3_early_sel_d;
372input [7:0] ect_rs2_imm_sel_d;
373input [3:0] ect_rs1_late_sel_d;
374input [3:0] ect_rs2_late_sel_d;
375input [3:0] ect_rs3_late_sel_d;
376input [3:0] ect_logic_sel_d;
377input [6:0] ect_shift_sel_d;
378
379input ect_br_taken_z0_e;
380input ect_br_taken_z1_e;
381input ect_alignaddress_little_e;
382input ect_as_clip_e_; // ALIGNADDRESS clipping of bit [2:0]
383input ect_as_cin_e;
384input [1:0] ect_array_sel_e;
385input [7:0] ect_edge_lmask_e;
386input [7:0] ect_edge_lrmask_e;
387input ect_pstate_am_e;
388input [5:0] ect_rm_early_sel_e;
389input [2:0] ect_rm_late_sel_e; // [0] : AddSub; [1] : Shift; [2] : Logicals; Def : Early Mux;
390input ect_store_mux_sel_e;
391
392input ect_ex_emb_clken; // Power Management
393input ect_tg_clken; // Power Management
394
395
396// *** Global Outputs ***
397
398output [64:0] exu_rngl_cdbus; // ASI Ring
399
400output exu_br_taken_e; // To IFU : branch is taken
401output exu_br_taken_e1; // To DEC_DEL and PKU : branch is taken
402output [47:0] exu_address_e; // To IFU and LSU
403output [31:0] exu_gsr_data_m; // To FGU
404output [63:0] exu_store_data_e; // To LSU
405
406output exu_ibp_m; // To TLU : Raw Intruction Breakpoint
407output [7:0] exu_trap_number_b; // To TLU
408
409output [1:0] exu_mbi_irf_fail_; // MBIST
410
411
412// *** Local Outputs ***
413
414output [64:0] edp_rng_in_ff; // ASI Ring : In data flopped
415
416output [1:0] edp_br_flag_e; // To IFU [1] : RS1 negative; [0] : RS1 zero;
417output [63:0] exu_rs1_data_e;
418output [63:0] edp_rcc_data_e; // To ECC: rs1 equivalent for ECC checks
419output [63:0] exu_rs2_data_e;
420output [63:0] edp_rs3_data_e;
421output [7:0] edp_rcc_ecc_e; // To ECC: rs1 equivalent for ECC checks
422output [7:0] edp_rs2_ecc_e;
423output [7:0] edp_rs3_ecc_e;
424
425output edp_add_cout64_e;
426output edp_add_data_e_b63;
427output [1:0] edp_add_zdetect_e_;
428
429output edp_sub_cout64_e;
430output edp_sub_data_e_b63;
431output edp_sub_data_e_b31;
432output [1:0] edp_sub_zdetect_e_;
433
434output edp_logical_data_e_b63;
435output edp_logical_data_e_b31;
436output [1:0] edp_lg_zdetect_e;
437
438output [63:47] edp_address_m; // Used for address_error checking
439output [63:47] edp_rd_ff_m;
440
441output [63:0] edp_rd_ff_w;
442output [63:0] edp_rd_ff_w2;
443
444output scan_out;
445
446
447// scan/test renames
448assign stop = 1'b0;
449assign test = tcu_dectest;
450// end scan/test renames
451
452
453exu_edp_dp_buff_macro__dbuff_32x__stack_none__width_4 scan_rep0 (
454 .din ({tcu_scan_en , tcu_pce_ov , spc_aclk , spc_bclk} ),
455 .dout({se , pce_ov , siclk , soclk} ));
456
457
458
459//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Bypass !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
460
461
462
463// *** RS1 ***
464
465exu_edp_dp_mux_macro__mux_aope__ports_6__stack_72c__width_64 i_bp_mux_rs1_early (
466 .din0 ( rd_ff_m[63:0] ), // M Stage
467 .din1 ( rd_ff_b[63:0] ), // B Stage
468 .din2 ( edp_rd_ff_w[63:0] ), // W Stage
469 .din3 ( edp_rd_ff_w2[63:0] ), // W2 Stage
470 .din4 ( rd_ff_w_plus1[63:0] ), // W_plus1 Stage
471 .din5 ( rd_ff_w2_plus1[63:0] ), // W2_plus2 Stage
472 .sel0 ( ect_rs1_early_sel_d[0] ),
473 .sel1 ( ect_rs1_early_sel_d[1] ),
474 .sel2 ( ect_rs1_early_sel_d[2] ),
475 .sel3 ( ect_rs1_early_sel_d[3] ),
476 .sel4 ( ect_rs1_early_sel_d[4] ),
477 .dout ( early_rs1_data[63:0] ));
478
479
480exu_edp_dp_msff_macro__mux_aope__ports_4__stack_72c__width_72 i_bp_ff_rcc (
481 .scan_in(i_bp_ff_rcc_scanin),
482 .scan_out(i_bp_ff_rcc_scanout),
483 .clk ( l2clk ),
484 .en ( dec_exu_clken ),
485 .din0 ({{8{1'b0}},rd_data_e[63:0]} ), // Execute Stage
486 .din1 ({{8{1'b0}},lsu_exu_ld_data_b[63:0]} ), // Load Data
487 .din2 ({{8{1'b0}},early_rs1_data[63:0]} ), // Early Mux
488 .din3 ( irf_rs1_data_d[71:0] ),
489 .sel0 ( ect_rs1_late_sel_d[1] ),
490 .sel1 ( ect_rs1_late_sel_d[2] ),
491 .sel2 ( ect_rs1_late_sel_d[3] ),
492 .dout ( rcc_data_e[71:0] ),
493 .se(se),
494 .siclk(siclk),
495 .soclk(soclk),
496 .pce_ov(pce_ov),
497 .stop(stop));
498
499
500
501cl_dp1_penc5_64x i_bp_ff_rs1_penc (
502 .sel0 ( ect_rs1_late_sel_d[0] ),
503 .sel1 ( ect_rs1_late_sel_d[1] ),
504 .sel2 ( ect_rs1_late_sel_d[2] ),
505 .sel3 ( ect_rs1_late_sel_d[3] ),
506 .psel0( rs1_psel[0] ),
507 .psel1( rs1_psel[1] ),
508 .psel2( rs1_psel[2] ),
509 .psel3( rs1_psel[3] ),
510 .psel4( rs1_psel[4] ),
511 .test(test));
512
513
514exu_edp_dp_msff_macro__buffsel_none__mux_aonpe__ports_5__stack_72c__width_64 i_bp_ff_rs1 (
515 .scan_in(i_bp_ff_rs1_scanin),
516 .scan_out(i_bp_ff_rs1_scanout),
517 .clk ( l2clk ),
518 .en ( dec_exu_clken ),
519 .din0 ( rd_data_e[63:0] ), // Execute Stage
520 .din1 ( lsu_exu_ld_data_b[63:0] ), // Load Data
521 .din2 ( early_rs1_data[63:0] ), // Early Mux
522 .din3 ( irf_rs1_data_d[63:0] ), // IRF
523 .din4 ( {{16{1'b0}}, tlu_pc_d[47:2], 2'b00} ), // PC
524 .sel0 ( rs1_psel[1] ),
525 .sel1 ( rs1_psel[2] ),
526 .sel2 ( rs1_psel[3] ),
527 .sel3 ( rs1_psel[4] ),
528 .sel4 ( rs1_psel[0] ),
529 .dout ( rs1_data_e[63:0] ),
530 .se(se),
531 .siclk(siclk),
532 .soclk(soclk),
533 .pce_ov(pce_ov),
534 .stop(stop));
535
536
537
538exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_64 i_bp_buf_rs1 (
539 .din ( rs1_data_e[63:0] ),
540 .dout ( exu_rs1_data_e[63:0] ));
541
542exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_72 i_bp_buf_rcc (
543 .din ({rcc_data_e[71:64] , rcc_data_e[63:0]} ),
544 .dout ({edp_rcc_ecc_e[7:0] , edp_rcc_data_e[63:0]} ));
545
546
547exu_edp_dp_zero_macro__width_64 i_bp_cmp_rcc (
548 .din ( rcc_data_e[63:0] ),
549 .dout( edp_br_flag_e[0] ));
550
551
552exu_edp_dp_inv_macro__dinv_12x__stack_72c__width_1 i_br_taken_inv (
553 .din ( edp_br_flag_e[0] ),
554 .dout( br_flag_e0_ ));
555
556//mux_macro i_br_taken_mux (width=1,ports=2,mux=aonpe,buffsel=none,left=1,stack=72c) (
557// .din0( ect_br_taken_z0_e ),
558// .din1( ect_br_taken_z1_e ),
559// .sel0( br_flag_e0_ ),
560// .sel1( edp_br_flag_e[0] ),
561// .dout( br_taken_mux_e ));
562
563exu_edp_dp_nand_macro__dnand_16x__left_1__ports_2__stack_72c__width_1 i_br_taken_nand0 (
564 .din0 ( br_flag_e0_ ),
565 .din1 ( ect_br_taken_z0_e ),
566 .dout ( br_taken_nand0 ));
567
568exu_edp_dp_nand_macro__ports_2__stack_72c__width_1 i_br_taken_nand1 (
569 .din0 ( edp_br_flag_e[0] ),
570 .din1 ( ect_br_taken_z1_e ),
571 .dout ( br_taken_nand1 ));
572
573exu_edp_dp_nand_macro__dnand_32x__left_1__ports_2__stack_72c__width_2 i_br_taken_nand23 (
574 .din0 ({ br_taken_nand0 , br_taken_nand0} ),
575 .din1 ({ br_taken_nand1 , br_taken_nand1} ),
576 .dout ({ exu_br_taken_e , exu_br_taken_e1} ));
577
578
579exu_edp_dp_buff_macro__stack_72c__width_1 i_bp_buf_flag (
580 .din ( rcc_data_e[63] ),
581 .dout ( edp_br_flag_e[1] ));
582
583
584
585
586// *** RS2 ***
587
588exu_edp_dp_buff_macro__stack_72c__width_7 i_bp_imm_buf (
589 .din ({ dec_inst_d[9] , dec_inst_d[10] , dec_inst_d[12] ,
590 dec_inst_d[18] , dec_inst_d[21] , dec_inst_d[21] , dec_inst_d[29]} ),
591 .dout({ inst_d_09_buf , inst_d_10_buf , inst_d_12_buf ,
592 inst_d_18_buf , inst_d_21_buf0 , inst_d_21_buf1 , inst_d_29_buf} ));
593
594
595exu_edp_dp_mux_macro__mux_aonpe__ports_8__stack_72c__width_64 i_bp_mux_rs2_imm (
596 .din0 ({{46{inst_d_21_buf0}}, dec_inst_d[21:20],dec_inst_d[13:0] ,2'b00 }), // BPr = 4 * sign_ext{d16hi,d16lo} = 4 * sign_ext{inst[21:20],inst[13:0]}
597 .din1 ({{40{inst_d_21_buf1}}, dec_inst_d[21:0] , 2'b00 }), // Bicc = 4 * sign_ext{disp22} = 4 * sign_ext{inst[21:0]}
598 .din2 ({{43{inst_d_18_buf }}, dec_inst_d[18:0] , 2'b00 }), // BPcc = 4 * sign_ext{disp19} = 4 * sign_ext{inst[18:0]}
599 .din3 ({{32{inst_d_29_buf }}, dec_inst_d[29:0] , 2'b00 }), // Call = 4 * sign_ext{disp30} = 4 * sign_ext{inst[29:0]}
600 .din4 ({{32{1'b0}} , dec_inst_d[21:0] , {10{1'b0}} }), // IMM22
601 .din5 ({{53{inst_d_10_buf }}, dec_inst_d[10:0] }), // SIMM11
602 .din6 ({{54{inst_d_09_buf }}, dec_inst_d[9:0] }), // SIMM10
603 .din7 ({{51{inst_d_12_buf }}, dec_inst_d[12:0] }), // SIMM13
604 .sel0 ( ect_rs2_imm_sel_d[0] ),
605 .sel1 ( ect_rs2_imm_sel_d[1] ),
606 .sel2 ( ect_rs2_imm_sel_d[2] ),
607 .sel3 ( ect_rs2_imm_sel_d[3] ),
608 .sel4 ( ect_rs2_imm_sel_d[4] ),
609 .sel5 ( ect_rs2_imm_sel_d[5] ),
610 .sel6 ( ect_rs2_imm_sel_d[6] ),
611 .sel7 ( ect_rs2_imm_sel_d[7] ),
612 .dout ( imm_rs2_data[63:0] ));
613
614
615exu_edp_dp_mux_macro__mux_aope__ports_6__stack_72c__width_64 i_bp_mux_rs2_early_byp (
616 .din0 ( rd_ff_m[63:0] ), // M Stage
617 .din1 ( rd_ff_b[63:0] ), // B Stage
618 .din2 ( edp_rd_ff_w[63:0] ), // W Stage
619 .din3 ( edp_rd_ff_w2[63:0] ), // W2 Stage
620 .din4 ( rd_ff_w_plus1[63:0] ), // W_plus1 Stage
621 .din5 ( rd_ff_w2_plus1[63:0] ), // W2_plus1 Stage
622 .sel0 ( ect_rs2_early_sel_d[0] ),
623 .sel1 ( ect_rs2_early_sel_d[1] ),
624 .sel2 ( ect_rs2_early_sel_d[2] ),
625 .sel3 ( ect_rs2_early_sel_d[3] ),
626 .sel4 ( ect_rs2_early_sel_d[4] ),
627 .dout ( early_byp_rs2_data[63:0] ));
628
629
630exu_edp_dp_msff_macro__mux_aope__ports_5__stack_72c__width_72 i_bp_ff_rs2 (
631 .scan_in(i_bp_ff_rs2_scanin),
632 .scan_out(i_bp_ff_rs2_scanout),
633 .clk ( l2clk ),
634 .en ( dec_exu_clken ),
635 .din0 ({{8{1'b0}} ,imm_rs2_data[63:0]} ), // Immediate Data
636 .din1 ({{8{1'b0}} ,rd_data_e[63:0]} ), // Execute Stage
637 .din2 ({{8{1'b0}} ,lsu_exu_ld_data_b[63:0]} ), // Load Data
638 .din3 ({{8{1'b0}} ,early_byp_rs2_data[63:0]} ), // Early Mux
639 .din4 ( irf_rs2_data_d[71:0] ),
640 .sel0 ( ect_rs2_late_sel_d[0] ),
641 .sel1 ( ect_rs2_late_sel_d[1] ),
642 .sel2 ( ect_rs2_late_sel_d[2] ),
643 .sel3 ( ect_rs2_late_sel_d[3] ),
644 .dout ( rs2_data_e[71:0] ),
645 .se(se),
646 .siclk(siclk),
647 .soclk(soclk),
648 .pce_ov(pce_ov),
649 .stop(stop));
650
651
652exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_72 i_bp_buf_rs2 (
653 .din ( rs2_data_e[71:0] ),
654 .dout({edp_rs2_ecc_e[7:0] , exu_rs2_data_e[63:0]} ));
655
656
657
658// *** RS3 ***
659
660exu_edp_dp_mux_macro__mux_aope__ports_6__stack_72c__width_64 i_bp_mux_rs3_early (
661 .din0 ( rd_ff_m[63:0] ), // M Stage
662 .din1 ( rd_ff_b[63:0] ), // B Stage
663 .din2 ( edp_rd_ff_w[63:0] ), // W Stage
664 .din3 ( edp_rd_ff_w2[63:0] ), // W2 Stage
665 .din4 ( rd_ff_w_plus1[63:0] ), // W_plus1 Stage
666 .din5 ( rd_ff_w2_plus1[63:0] ), // W2_plus1 Stage
667 .sel0 ( ect_rs3_early_sel_d[0] ),
668 .sel1 ( ect_rs3_early_sel_d[1] ),
669 .sel2 ( ect_rs3_early_sel_d[2] ),
670 .sel3 ( ect_rs3_early_sel_d[3] ),
671 .sel4 ( ect_rs3_early_sel_d[4] ),
672 .dout ( early_rs3_data[63:0] ));
673
674
675
676cl_dp1_penc5_64x i_bp_ff_rs3_penc (
677 .sel0 ( ect_rs3_late_sel_d[0] ),
678 .sel1 ( ect_rs3_late_sel_d[1] ),
679 .sel2 ( ect_rs3_late_sel_d[2] ),
680 .sel3 ( ect_rs3_late_sel_d[3] ),
681 .psel0( rs3_psel[0] ),
682 .psel1( rs3_psel[1] ),
683 .psel2( rs3_psel[2] ),
684 .psel3( rs3_psel[3] ),
685 .psel4( rs3_psel[4] ),
686 .test(test));
687
688
689exu_edp_dp_msff_macro__buffsel_none__mux_aonpe__ports_5__stack_72c__width_72 i_bp_ff_rs3 (
690 .scan_in(i_bp_ff_rs3_scanin),
691 .scan_out(i_bp_ff_rs3_scanout),
692 .clk ( l2clk ),
693 .en ( dec_exu_clken ),
694 .din0 ({{8{1'b0}},rd_data_e[63:0]} ), // Execute Stage
695 .din1 ({{8{1'b0}},lsu_exu_ld_data_b[63:0]} ), // Load Data
696 .din2 ({{8{1'b0}},early_rs3_data[63:0]} ), // Early Mux
697 .din3 ( irf_rs3_data_d[71:0] ), // IRF
698 .din4 ({{8{1'b0}},{16{1'b0}}, tlu_pc_d[47:2], 2'b00} ), // PC : CALL & JUMP
699 .sel0 ( rs3_psel[1] ),
700 .sel1 ( rs3_psel[2] ),
701 .sel2 ( rs3_psel[3] ),
702 .sel3 ( rs3_psel[4] ),
703 .sel4 ( rs3_psel[0] ),
704 .dout ( rs3_data_e[71:0] ),
705 .se(se),
706 .siclk(siclk),
707 .soclk(soclk),
708 .pce_ov(pce_ov),
709 .stop(stop));
710
711
712
713exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_72 i_bp_buf_rs3 (
714 .din ( rs3_data_e[71:0] ),
715 .dout({edp_rs3_ecc_e[7:0] , edp_rs3_data_e[63:0]} ));
716
717
718exu_edp_dp_xor_macro__ports_2__stack_72c__width_64 i_bp_xor_wrxx (
719 .din0( exu_rs1_data_e[63:0] ),
720 .din1( exu_rs2_data_e[63:0] ),
721 .dout( wrxx_xor[63:0] ));
722
723exu_edp_dp_mux_macro__mux_aope__ports_2__stack_72c__width_64 i_bp_mux_store (
724 .din0( wrxx_xor[63:0] ), // Write Privileded (239) and Write State (241)
725 .din1( edp_rs3_data_e[63:0] ),
726 .sel0( ect_store_mux_sel_e ),
727 .dout( store_data_e[63:0] ));
728
729exu_edp_dp_buff_macro__stack_72c__width_64 i_bp_buf_store (
730 .din ( store_data_e[63:0] ),
731 .dout( exu_store_data_e[63:0] ));
732
733
734exu_edp_dp_cmp_macro__width_32 i_bp_cmp1 (
735 .din0( rs1_data_e[63:32] ),
736 .din1( rs2_data_e[63:32] ),
737 .dout( rs1_x_rs2_cmp_e[1] ));
738
739exu_edp_dp_cmp_macro__width_32 i_bp_cmp0 (
740 .din0({rs1_data_e[31:3] , 3'b000} ),
741 .din1({rs2_data_e[31:3] , 3'b000} ),
742 .dout( rs1_x_rs2_cmp_e[0] ));
743
744
745exu_edp_dp_inv_macro__stack_72c__width_3 i_mask_inv (
746 .din ({rs1_x_rs2_cmp_e[1:0] , ect_pstate_am_e} ),
747 .dout({rs1_x_rs2_cmp_e_[1:0] , pstate_am_e_} ));
748
749exu_edp_dp_nand_macro__ports_3__stack_72c__width_3 i_mask_nand3 (
750 .din0({rs1_x_rs2_cmp_e[1] , ect_pstate_am_e , pstate_am_e_ } ),
751 .din1({rs1_x_rs2_cmp_e[0] , rs1_x_rs2_cmp_e[0] , rs1_x_rs2_cmp_e_[1] } ),
752 .din2({ect_rm_early_sel_e[5] , ect_rm_early_sel_e[5] , ect_rm_early_sel_e[5]} ),
753 .dout({edge_lr_nand3_[1] , edge_lr_nand3_[0] , edge_l_nand3_ } ));
754
755exu_edp_dp_nand_macro__ports_2__stack_72c__width_3 i_mask_nand2 (
756 .din0({edge_lr_nand3_[1] , rs1_x_rs2_cmp_e_[0] , edge_l_nand3_ } ),
757 .din1({edge_lr_nand3_[0] , ect_rm_early_sel_e[5] , edge_l_nand2_ } ),
758 .dout({edge_lr_sel_e , edge_l_nand2_ , edge_l_sel_e } ));
759
760
761
762exu_edp_dp_cmp_macro__width_64 i_mbist_cmp0 (
763 .din0 ({8{ecc_mbist_write_data_p4[7:0]}} ),
764 .din1 ( edp_rs3_data_e[63:0] ),
765 .dout ( cmp_mbi_irf_fail_[0] ));
766
767
768exu_edp_dp_cmp_macro__width_8 i_mbist_cmp1 (
769 .din0 ( ecc_mbist_write_data_p4[7:0] ),
770 .din1 ( edp_rs3_ecc_e[7:0] ),
771 .dout ( cmp_mbi_irf_fail_[1] ));
772
773
774exu_edp_dp_buff_macro__dbuff_32x__stack_72c__width_2 i_mbist_buf (
775 .din ( cmp_mbi_irf_fail_[1:0] ),
776 .dout ( exu_mbi_irf_fail_[1:0] ));
777
778
779//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Bypass !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
780
781
782
783
784//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Result Mux/FF *!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
785
786exu_edp_dp_buff_macro__dbuff_32x__stack_72c__width_1 i_rm_mux_buf (
787 .din ( edp_rs3_data_e[47] ),
788 .dout ( rs3_data_e_b47_buf ));
789
790exu_edp_dp_mux_macro__mux_aonpe__ports_7__stack_72c__width_64 i_rm_mux_early (
791 .din0 ( logical_data_e[63:0] ), // Logical
792 .din1 ({{31{1'b0}},array_res_e[32:0]} ),
793 .din2 ({exu_rs1_data_e[0],exu_y_data_e[31:1],{32{1'b0}}} ), // MULScc
794 .din3 ({{17{rs3_data_e_b47_buf}} , edp_rs3_data_e[46:0]} ), // CALL & JUMP - w/ pstate_am=0 + pc extension
795 .din4 ({{32{1'b0}} , edp_rs3_data_e[31:0]} ), // CALL & JUMP - w/ pstate_am=1
796 .din5 ({{56{1'b0}},ect_edge_lrmask_e[7:0]} ),
797 .din6 ({{56{1'b0}},ect_edge_lmask_e[7:0]} ),
798 .sel0 ( ect_rm_early_sel_e[0] ),
799 .sel1 ( ect_rm_early_sel_e[1] ),
800 .sel2 ( ect_rm_early_sel_e[2] ),
801 .sel3 ( ect_rm_early_sel_e[3] ),
802 .sel4 ( ect_rm_early_sel_e[4] ),
803 .sel5 ( edge_lr_sel_e ),
804 .sel6 ( edge_l_sel_e ),
805 .dout ( early_rd_data[63:0] ));
806
807
808exu_edp_dp_mux_macro__mux_pgpe__ports_4__stack_72c__width_64 i_rm_mux_late (
809 .muxtst (tcu_muxtest_rep0 ),
810 .din0 ( sub_data_e[63:0] ), // Sub
811 .din1 ({add_data_e[63:3],add_clip[2:0]} ), // Add
812 .din2 ( shifter_data_e[63:0] ), // Shift
813 .din3 ( early_rd_data[63:0] ), // Early Mux
814 .sel0 ( ect_rm_late_sel_e[0] ),
815 .sel1 ( ect_rm_late_sel_e[1] ),
816 .sel2 ( ect_rm_late_sel_e[2] ),
817 .dout ( rd_data_e[63:0] ),
818 .test(test));
819
820
821exu_edp_dp_msff_macro__stack_72c__width_67 i_rm_ff_m (
822 .scan_in(i_rm_ff_m_scanin),
823 .scan_out(i_rm_ff_m_scanout),
824 .clk ( l2clk ),
825 .en ( ect_ex_emb_clken ),
826 .din ({addsub_inc[2:0] , rd_data_e[63:0]} ),
827 .dout({addsub_data_m[2:0] , rd_ff_m[63:0]} ),
828 .se(se),
829 .siclk(siclk),
830 .soclk(soclk),
831 .pce_ov(pce_ov),
832 .stop(stop));
833
834 assign exu_gsr_data_m[31:0] = {rd_ff_m[31:3],addsub_data_m[2:0]};
835 assign edp_rd_ff_m[63:47] = rd_ff_m[63:47];
836
837
838exu_edp_dp_msff_macro__minbuff_1__stack_72c__width_64 i_rm_ff_b (
839 .scan_in(i_rm_ff_b_scanin),
840 .scan_out(i_rm_ff_b_scanout),
841 .clk ( l2clk ),
842 .en ( ect_ex_emb_clken ),
843 .din ( rd_ff_m[63:0] ),
844 .dout( rd_ff_b[63:0] ),
845 .se(se),
846 .siclk(siclk),
847 .soclk(soclk),
848 .pce_ov(pce_ov),
849 .stop(stop));
850
851 assign exu_trap_number_b[7:0] = rd_ff_b[7:0];
852
853
854exu_edp_dp_msff_macro__mux_aope__ports_3__stack_72c__width_64 i_rm_ff_w (
855 .scan_in(i_rm_ff_w_scanin),
856 .scan_out(i_rm_ff_w_scanout),
857 .clk ( l2clk ),
858 .en ( ect_tg_clken ),
859 .din0({8{mbi_write_data_p1[7:0]} } ), // MBIST
860 .din1( fgu_exu_result_fx5[63:0] ), // Float point integer result
861 .din2( rd_ff_b[63:0] ), // Normal EXU data
862 .sel0( ect_mbist_sel ),
863 .sel1( fgu_exu_w_vld_fx5 ),
864 .dout( rd_ff_w[63:0] ),
865 .se(se),
866 .siclk(siclk),
867 .soclk(soclk),
868 .pce_ov(pce_ov),
869 .stop(stop));
870
871exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_64 i_rm_buf_w (
872 .din ( rd_ff_w[63:0] ),
873 .dout( edp_rd_ff_w[63:0] ));
874
875
876exu_edp_dp_msff_macro__minbuff_1__stack_72c__width_64 i_rm_ff_w_plus1 (
877 .scan_in(i_rm_ff_w_plus1_scanin),
878 .scan_out(i_rm_ff_w_plus1_scanout),
879 .clk ( l2clk ),
880 .en ( ect_tg_clken ),
881 .din ( edp_rd_ff_w[63:0] ),
882 .dout( rd_ff_w_plus1[63:0] ),
883 .se(se),
884 .siclk(siclk),
885 .soclk(soclk),
886 .pce_ov(pce_ov),
887 .stop(stop));
888
889
890exu_edp_dp_msff_macro__stack_72c__width_66 i_rm_ff_w2 (
891 .scan_in(i_rm_ff_w2_scanin),
892 .scan_out(i_rm_ff_w2_scanout),
893 .clk ( l2clk ),
894 .en ( ect_tg_clken ),
895 .din ({ibe_trap_d , ibe_trap_e , lsu_exu_ld_data_b[63:0]} ), // Load Data
896 .dout({ibe_trap_e , ibp_m , rd_ff_w2[63:0]} ),
897 .se(se),
898 .siclk(siclk),
899 .soclk(soclk),
900 .pce_ov(pce_ov),
901 .stop(stop));
902
903exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_65 i_rm_buf_w2 (
904 .din ({ibp_m , rd_ff_w2[63:0]} ),
905 .dout({exu_ibp_m , edp_rd_ff_w2[63:0]} ));
906
907
908exu_edp_dp_msff_macro__minbuff_1__stack_72c__width_64 i_rm_ff_w2_plus1 (
909 .scan_in(i_rm_ff_w2_plus1_scanin),
910 .scan_out(i_rm_ff_w2_plus1_scanout),
911 .clk ( l2clk ),
912 .en ( ect_tg_clken ),
913 .din ( edp_rd_ff_w2[63:0] ), // Load Data Delayed
914 .dout( rd_ff_w2_plus1[63:0] ),
915 .se(se),
916 .siclk(siclk),
917 .soclk(soclk),
918 .pce_ov(pce_ov),
919 .stop(stop));
920
921
922//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Result Mux/FF *!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
923
924
925
926
927//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Logicals !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
928
929
930exu_edp_dp_buff_macro__stack_72c__width_8 i_lg_buf_sel (
931 .din ({2{logic_sel_e[3:0]} }),
932 .dout({logic_hsel_e[3:0],logic_lsel_e[3:0] }));
933
934
935exu_edp_dp_inv_macro__stack_72c__width_64 i_lg_inv_rs1 (
936 .din ( exu_rs1_data_e[63:0] ),
937 .dout( rs1_data_e_[63:0] ));
938
939exu_edp_dp_inv_macro__stack_72c__width_64 i_lg_inv_rs2 (
940 .din ( exu_rs2_data_e[63:0] ),
941 .dout( log_rs2_data_e_[63:0] ));
942
943
944exu_edp_dp_nand_macro__ports_3__stack_72c__width_64 i_lg_nand1_11 (
945 .din0( exu_rs1_data_e[63:0] ),
946 .din1( exu_rs2_data_e[63:0] ),
947 .din2({{32{logic_hsel_e[3]}}, {32{logic_lsel_e[3]}} }),
948 .dout( logical_11_[63:0] ));
949
950exu_edp_dp_nand_macro__ports_3__stack_72c__width_64 i_lg_nand1_10 (
951 .din0( exu_rs1_data_e[63:0] ),
952 .din1( log_rs2_data_e_[63:0] ),
953 .din2({{32{logic_hsel_e[2]}}, {32{logic_lsel_e[2]}} }),
954 .dout( logical_10_[63:0] ));
955
956exu_edp_dp_nand_macro__ports_3__stack_72c__width_64 i_lg_nand1_01 (
957 .din0( rs1_data_e_[63:0] ),
958 .din1( exu_rs2_data_e[63:0] ),
959 .din2({{32{logic_hsel_e[1]}}, {32{logic_lsel_e[1]}} }),
960 .dout( logical_01_[63:0] ));
961
962exu_edp_dp_nand_macro__ports_3__stack_72c__width_64 i_lg_nand1_00 (
963 .din0( rs1_data_e_[63:0] ),
964 .din1( log_rs2_data_e_[63:0] ),
965 .din2({{32{logic_hsel_e[0]}}, {32{logic_lsel_e[0]}} }),
966 .dout( logical_00_[63:0] ));
967
968
969exu_edp_dp_nand_macro__ports_4__stack_72c__width_64 i_lg_nand2 (
970 .din0( logical_00_[63:0] ),
971 .din1( logical_01_[63:0] ),
972 .din2( logical_10_[63:0] ),
973 .din3( logical_11_[63:0] ),
974 .dout( logical_data_e[63:0] ));
975
976
977exu_edp_dp_buff_macro__stack_72c__width_2 i_lg_buf_data (
978 .din ({logical_data_e[63],logical_data_e[31]} ),
979 .dout({edp_logical_data_e_b63,edp_logical_data_e_b31} ));
980
981
982exu_edp_dp_zero_macro__width_32 i_lg_cmp_upper (
983 .din ( logical_data_e[63:32] ),
984 .dout( edp_lg_zdetect_e[1] ));
985
986exu_edp_dp_zero_macro__width_32 i_lg_cmp_lower (
987 .din ( logical_data_e[31:0] ),
988 .dout( edp_lg_zdetect_e[0] ));
989
990
991//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Logicals !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
992
993
994
995
996//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Shift !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
997
998
999//
1000// Operation sel_rshift sel_lshift sel_rax sel_ra sel_rshiftx sel_llx sel_32shift
1001// -----------|------------|------------|---------|--------|-------------|---------|------------
1002// SLL | 0 | 1 | 0 | 0 | 0 | 0 | 1
1003// SLX | 0 | 1 | 0 | 0 | 0 | 1 | 0
1004// SRAX? | 1 | 0 | 1 | 0 | 1 | 0 | 0
1005// SRA | 1 | 0 | 0 | 1 | 0 | 0 | 1
1006// SRLX? | 1 | 0 | 0 | 0 | 1 | 0 | 0
1007// SRL | 1 | 0 | 0 | 0 | 0 | 0 | 1
1008// - | 1 | 1 | x | x | x | x | x
1009// 0 ** | 0 | 0 | x | x | x | x | x
1010//
1011// ** This will only hold for a dynamic implementation
1012
1013exu_edp_dp_msff_macro__left_32__stack_72c__width_28 i_misc_ff (
1014 .scan_in(i_misc_ff_scanin),
1015 .scan_out(i_misc_ff_scanout),
1016 .clk ( l2clk ),
1017 .en ( ect_tg_clken ),
1018 .din ({add_data_e[63:47] , ect_shift_sel_d[6:0] , ect_logic_sel_d[3:0]} ),
1019 .dout ({edp_address_m[63:47] , shift_sel_e[6:0] , logic_sel_e[3:0]} ),
1020 .se(se),
1021 .siclk(siclk),
1022 .soclk(soclk),
1023 .pce_ov(pce_ov),
1024 .stop(stop));
1025
1026
1027 assign sh_sel_rshift = shift_sel_e[5];
1028 assign sh_sel_lshift = shift_sel_e[4];
1029 assign sh_sel_rax = shift_sel_e[3];
1030 assign sh_sel_ra = shift_sel_e[2];
1031 assign sh_sel_rshiftx = shift_sel_e[1];
1032 assign sh_sel_llx = shift_sel_e[0];
1033
1034
1035exu_edp_dp_buff_macro__stack_72c__width_64 i_sh_buf_rs1 (
1036 .din ( rs1_data_e[63:0] ),
1037 .dout( sh_rs1_buf[63:0] ));
1038
1039exu_edp_dp_inv_macro__stack_72c__width_2 i_sh_inv_rs1 (
1040 .din ({rs1_data_e[63] , rs1_data_e[31]} ),
1041 .dout({sh_rs1_63_ , sh_rs1_31_ }));
1042
1043
1044
1045// *** MASK MUX ***
1046
1047
1048// The MASK MUXes are built using AO muxes with the highest number of ports being 3:1
1049
1050
1051// assign rs1z7[7:0] = {rs1[00],{7{1'b0}}};
1052//
1053// 70:64 63:56 55:48 47:40 39:32
1054// assign mask_mux00[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1055// ({39{sel_lshift }} & { rs1[63:57] , rs1[56:49] , rs1[48:41] , rs1[40:33] , rs1[32:25] }) |
1056// ({39{sel_rshiftx}} & { {7{1'b0}} , rs1[63:56] , rs1[55:48] , rs1[47:40] , rs1[39:32] }) |
1057// ({39{sel_ra }} & { {7{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}} }) |
1058// ({39{sel_rax }} & { {7{rs1[63]}}, {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1059// ({39{sel_llx }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1060
1061// 31:24 23:16 15:08 07:00
1062// assign mask_mux00[31:00] = ({32{sel_rshift }} & { rs1[31:24] , rs1[23:16] , rs1[15:08] , rs1[07:00] }) |
1063// ({32{sel_lshift }} & { rs1[24:17] , rs1[16:09] , rs1[08:01] , rs1z7[7:0] }) |
1064// ({32{sel_rshiftx}} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1065// ({32{sel_ra }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1066// ({32{sel_rax }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1067// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1068
1069
1070exu_edp_dp_buff_macro__width_5 i_sh_buf00 (
1071 .din ({sh_sel_rshift,
1072 sh_sel_lshift,
1073 sh_sel_rshiftx,
1074 sh_sel_ra,
1075 sh_sel_rax }),
1076 .dout({sel_rshift00,
1077 sel_lshift00,
1078 sel_rshiftx00,
1079 sel_ra00,
1080 sel_rax00 }));
1081
1082exu_edp_dp_inv_macro__stack_72c__width_2 i_sh_inv00 (
1083 .din ({sh_rs1_63_ ,sh_rs1_31_ }),
1084 .dout({sh_rs1_00_63 ,sh_rs1_00_31 }));
1085
1086
1087exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_7 i_sh_mux00_88 (
1088 .din0( sh_rs1_buf[63:57] ),
1089 .din1({ 7{sh_rs1_00_31} }),
1090 .din2({ 7{sh_rs1_00_63} }),
1091 .sel0( sel_lshift00 ),
1092 .sel1( sel_ra00 ),
1093 .sel2( sel_rax00 ),
1094 .dout( mask_mux00[70:64] ));
1095
1096exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_32 i_sh_mux00_74 (
1097 .din0( sh_rs1_buf[56:25] ),
1098 .din1( sh_rs1_buf[63:32] ),
1099 .din2({32{sh_rs1_00_31} }),
1100 .sel0( sel_lshift00 ),
1101 .sel1( sel_rshiftx00 ),
1102 .sel2( sel_ra00 ),
1103 .dout( mask_mux00[63:32] ));
1104
1105exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_32 i_sh_mux00_30 (
1106 .din0( sh_rs1_buf[31:0] ),
1107 .din1({sh_rs1_buf[24:0],{7{1'b0}} }),
1108 .sel0( sel_rshift00 ),
1109 .sel1( sel_lshift00 ),
1110 .dout( mask_mux00[31:0] ));
1111
1112
1113
1114// 70:64 63:56 55:48 47:40 39:32
1115// assign mask_mux08[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1116// ({39{sel_lshift }} & { rs1[55:49] , rs1[48:41] , rs1[40:33] , rs1[32:25] , rs1[24:17] }) |
1117// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , rs1[63:56] , rs1[55:48] , rs1[47:40] }) |
1118// ({39{sel_ra }} & { {7{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}} }) |
1119// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1120// ({39{sel_llx }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1121
1122// 31:24 23:16 15:08 07:00
1123// assign mask_mux08[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , rs1[31:24] , rs1[23:16] , rs1[15:08] }) |
1124// ({32{sel_lshift }} & { rs1[16:09] , rs1[08:01] , rs1z7[7:0] , {8{1'b0}} }) |
1125// ({32{sel_rshiftx}} & { rs1[39:32] , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1126// ({32{sel_ra }} & { {8{rs1[31]}}, {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1127// ({32{sel_rax }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1128// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1129
1130
1131exu_edp_dp_buff_macro__width_5 i_sh_buf08 (
1132 .din ({sh_sel_rshift,
1133 sh_sel_lshift,
1134 sh_sel_rshiftx,
1135 sh_sel_ra,
1136 sh_sel_rax }),
1137 .dout({sel_rshift08,
1138 sel_lshift08,
1139 sel_rshiftx08,
1140 sel_ra08,
1141 sel_rax08 }));
1142
1143exu_edp_dp_inv_macro__stack_72c__width_2 i_sh_inv08 (
1144 .din ({sh_rs1_63_ ,sh_rs1_31_ }),
1145 .dout({sh_rs1_08_63 ,sh_rs1_08_31 }));
1146
1147
1148exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_15 i_sh_mux08_87 (
1149 .din0( sh_rs1_buf[55:41] ),
1150 .din1({15{sh_rs1_08_31} }),
1151 .din2({15{sh_rs1_08_63} }),
1152 .sel0( sel_lshift08 ),
1153 .sel1( sel_ra08 ),
1154 .sel2( sel_rax08 ),
1155 .dout( mask_mux08[70:56] ));
1156
1157exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_32 i_sh_mux08_63 (
1158 .din0( sh_rs1_buf[40:9] ),
1159 .din1( sh_rs1_buf[63:32] ),
1160 .din2({32{sh_rs1_08_31} }),
1161 .sel0( sel_lshift08 ),
1162 .sel1( sel_rshiftx08 ),
1163 .sel2( sel_ra08 ),
1164 .dout( mask_mux08[55:24] ));
1165
1166exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 i_sh_mux08_21 (
1167 .din0( sh_rs1_buf[31:16] ),
1168 .din1({sh_rs1_buf[8:0],{7{1'b0}}}),
1169 .sel0( sel_rshift08 ),
1170 .sel1( sel_lshift08 ),
1171 .dout( mask_mux08[23:8] ));
1172
1173exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_8 i_sh_mux08_00 (
1174 .din0( sh_rs1_buf[15:8] ),
1175 .din1({8{1'b0} }),
1176 .sel0( sel_rshift08 ),
1177 .sel1( 1'b0 ),
1178 .dout( mask_mux08[7:0] ));
1179
1180
1181// 70:64 63:56 55:48 47:40 39:32
1182// assign mask_mux16[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1183// ({39{sel_lshift }} & { rs1[47:41] , rs1[40:33] , rs1[32:25] , rs1[24:17] , rs1[16:09] }) |
1184// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , rs1[63:56] , rs1[55:48] }) |
1185// ({39{sel_ra }} & { {7{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}} }) |
1186// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{1'b0}} , {8{1'b0}} }) |
1187// ({39{sel_llx }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1188
1189// 31:24 23:16 15:08 07:00
1190// assign mask_mux16[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , rs1[31:24] , rs1[23:16] }) |
1191// ({32{sel_lshift }} & { rs1[08:01] , rs1z7[7:0] , {8{1'b0}} , {8{1'b0}} }) |
1192// ({32{sel_rshiftx}} & { rs1[47:40] , rs1[39:32] , {8{1'b0}} , {8{1'b0}} }) |
1193// ({32{sel_ra }} & { {8{rs1[31]}}, {8{rs1[31]}}, {8{1'b0}} , {8{1'b0}} }) |
1194// ({32{sel_rax }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1195// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1196
1197
1198exu_edp_dp_buff_macro__width_5 i_sh_buf16 (
1199 .din ({sh_sel_rshift,
1200 sh_sel_lshift,
1201 sh_sel_rshiftx,
1202 sh_sel_ra,
1203 sh_sel_rax }),
1204 .dout({sel_rshift16,
1205 sel_lshift16,
1206 sel_rshiftx16,
1207 sel_ra16,
1208 sel_rax16 }));
1209
1210exu_edp_dp_inv_macro__stack_72c__width_2 i_sh_inv16 (
1211 .din ({sh_rs1_63_ ,sh_rs1_31_ }),
1212 .dout({sh_rs1_16_63 ,sh_rs1_16_31 }));
1213
1214
1215exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_23 i_sh_mux16_86 (
1216 .din0( sh_rs1_buf[47:25] ),
1217 .din1({23{sh_rs1_16_31} }),
1218 .din2({23{sh_rs1_16_63} }),
1219 .sel0( sel_lshift16 ),
1220 .sel1( sel_ra16 ),
1221 .sel2( sel_rax16 ),
1222 .dout( mask_mux16[70:48] ));
1223
1224exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_32 i_sh_mux16_52 (
1225 .din0({sh_rs1_buf[24:0],{7{1'b0}} }),
1226 .din1( sh_rs1_buf[63:32] ),
1227 .din2({32{sh_rs1_16_31} }),
1228 .sel0( sel_lshift16 ),
1229 .sel1( sel_rshiftx16 ),
1230 .sel2( sel_ra16 ),
1231 .dout( mask_mux16[47:16] ));
1232
1233exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 i_sh_mux16_00 (
1234 .din0( sh_rs1_buf[31:16] ),
1235 .din1({16{1'b0} }),
1236 .sel0( sel_rshift16 ),
1237 .sel1( 1'b0 ),
1238 .dout( mask_mux16[15:0] ));
1239
1240
1241// 70:64 63:56 55:48 47:40 39:32
1242// assign mask_mux24[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1243// ({39{sel_lshift }} & { rs1[39:33] , rs1[32:25] , rs1[24:17] , rs1[16:09] , rs1[08:01] }) |
1244// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , rs1[63:56] }) |
1245// ({39{sel_ra }} & { {7{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}} }) |
1246// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{1'b0}} }) |
1247// ({39{sel_llx }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1248
1249// 31:24 23:16 15:08 07:00
1250// assign mask_mux24[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , rs1[31:24] }) |
1251// ({32{sel_lshift }} & { rs1z7[7:0] , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1252// ({32{sel_rshiftx}} & { rs1[55:48] , rs1[47:40] , rs1[39:32] , {8{1'b0}} }) |
1253// ({32{sel_ra }} & { {8{rs1[31]}}, {8{rs1[31]}}, {8{rs1[31]}}, {8{1'b0}} }) |
1254// ({32{sel_rax }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1255// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1256
1257
1258exu_edp_dp_buff_macro__width_5 i_sh_buf24 (
1259 .din ({sh_sel_rshift,
1260 sh_sel_lshift,
1261 sh_sel_rshiftx,
1262 sh_sel_ra,
1263 sh_sel_rax }),
1264 .dout({sel_rshift24,
1265 sel_lshift24,
1266 sel_rshiftx24,
1267 sel_ra24,
1268 sel_rax24 }));
1269
1270exu_edp_dp_inv_macro__stack_72c__width_2 i_sh_inv24 (
1271 .din ({sh_rs1_63_ ,sh_rs1_31_ }),
1272 .dout({sh_rs1_24_63 ,sh_rs1_24_31 }));
1273
1274
1275exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_31 i_sh_mux24_85 (
1276 .din0( sh_rs1_buf[39:9] ),
1277 .din1({31{sh_rs1_24_31} }),
1278 .din2({31{sh_rs1_24_63} }),
1279 .sel0( sel_lshift24 ),
1280 .sel1( sel_ra24 ),
1281 .sel2( sel_rax24 ),
1282 .dout( mask_mux24[70:40] ));
1283
1284exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_16 i_sh_mux24_43 (
1285 .din0({sh_rs1_buf[8:0],{7{1'b0}}}),
1286 .din1( sh_rs1_buf[63:48] ),
1287 .din2({16{sh_rs1_24_31} }),
1288 .sel0( sel_lshift24 ),
1289 .sel1( sel_rshiftx24 ),
1290 .sel2( sel_ra24 ),
1291 .dout( mask_mux24[39:24] ));
1292
1293exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 i_sh_mux24_21 (
1294 .din0( sh_rs1_buf[47:32] ),
1295 .din1({16{sh_rs1_24_31} }),
1296 .sel0( sel_rshiftx24 ),
1297 .sel1( sel_ra24 ),
1298 .dout( mask_mux24[23:8] ));
1299
1300exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_8 i_sh_mux24_00 (
1301 .din0( sh_rs1_buf[31:24] ),
1302 .din1({8{1'b0} }),
1303 .sel0( sel_rshift24 ),
1304 .sel1( 1'b0 ),
1305 .dout( mask_mux24[7:0] ));
1306
1307
1308// 70:64 63:56 55:48 47:40 39:32
1309// assign mask_mux32[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1310// ({39{sel_lshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1311// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1312// ({39{sel_ra }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1313// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}} }) |
1314// ({39{sel_llx }} & { rs1[31:25] , rs1[24:17] , rs1[16:09] , rs1[08:01] , rs1z7[7:0] });
1315
1316// 31:24 23:16 15:08 07:00
1317// assign mask_mux32[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1318// ({32{sel_lshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1319// ({32{sel_rshiftx}} & { rs1[63:56] , rs1[55:48] , rs1[47:40] , rs1[39:32] }) |
1320// ({32{sel_ra }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1321// ({32{sel_rax }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1322// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1323
1324
1325exu_edp_dp_buff_macro__width_3 i_sh_buf32 (
1326 .din ({sh_sel_rshiftx,
1327 sh_sel_rax,
1328 sh_sel_llx }),
1329 .dout({sel_rshiftx32,
1330 sel_rax32,
1331 sel_llx32 }));
1332
1333exu_edp_dp_inv_macro__stack_72c__width_1 i_sh_inv32 (
1334 .din ( sh_rs1_63_ ),
1335 .dout( sh_rs1_32_63 ));
1336
1337
1338exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_39 i_sh_mux32_84 (
1339 .din0({39{sh_rs1_32_63} }),
1340 .din1({sh_rs1_buf[31:0],{7{1'b0}} }),
1341 .sel0( sel_rax32 ),
1342 .sel1( sel_llx32 ),
1343 .dout( mask_mux32[70:32] ));
1344
1345exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_32 i_sh_mux32_30 (
1346 .din0( sh_rs1_buf[63:32] ),
1347 .din1({32{1'b0} }),
1348 .sel0( sel_rshiftx32 ),
1349 .sel1( 1'b0 ),
1350 .dout( mask_mux32[31:0] ));
1351
1352
1353// 70:64 63:56 55:48 47:40 39:32
1354// assign mask_mux40[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1355// ({39{sel_lshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1356// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1357// ({39{sel_ra }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1358// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}} }) |
1359// ({39{sel_llx }} & { rs1[23:17] , rs1[16:09] , rs1[08:01] , rs1z7[7:0] , {8{1'b0}} });
1360
1361// 31:24 23:16 15:08 07:00
1362// assign mask_mux40[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1363// ({32{sel_lshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1364// ({32{sel_rshiftx}} & { {8{1'b0}} , rs1[63:56] , rs1[55:48] , rs1[47:40] }) |
1365// ({32{sel_ra }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1366// ({32{sel_rax }} & { {8{rs1[63]}}, {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1367// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1368
1369
1370exu_edp_dp_buff_macro__width_3 i_sh_buf40 (
1371 .din ({sh_sel_rshiftx,
1372 sh_sel_rax,
1373 sh_sel_llx }),
1374 .dout({sel_rshiftx40,
1375 sel_rax40,
1376 sel_llx40 }));
1377
1378exu_edp_dp_inv_macro__stack_72c__width_1 i_sh_inv40 (
1379 .din ( sh_rs1_63_ ),
1380 .dout( sh_rs1_40_63 ));
1381
1382
1383exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_31 i_sh_mux40_85 (
1384 .din0({31{sh_rs1_40_63} }),
1385 .din1({sh_rs1_buf[23:0],{7{1'b0}} }),
1386 .sel0( sel_rax40 ),
1387 .sel1( sel_llx40 ),
1388 .dout( mask_mux40[70:40] ));
1389
1390exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 i_sh_mux40_43 (
1391 .din0({16{sh_rs1_40_63} }),
1392 .din1({16{1'b0} }),
1393 .sel0( sel_rax40 ),
1394 .sel1( 1'b0 ),
1395 .dout( mask_mux40[39:24] ));
1396
1397exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_24 i_sh_mux40_20 (
1398 .din0( sh_rs1_buf[63:40] ),
1399 .din1({24{1'b0} }),
1400 .sel0( sel_rshiftx40 ),
1401 .sel1( 1'b0 ),
1402 .dout( mask_mux40[23:0] ));
1403
1404
1405// 70:64 63:56 55:48 47:40 39:32
1406// assign mask_mux48[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1407// ({39{sel_lshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1408// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1409// ({39{sel_ra }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1410// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}} }) |
1411// ({39{sel_llx }} & { rs1[15:09] , rs1[08:01] , rs1z7[7:0] , {8{1'b0}} , {8{1'b0}} });
1412
1413// 31:24 23:16 15:08 07:00
1414// assign mask_mux48[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1415// ({32{sel_lshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1416// ({32{sel_rshiftx}} & { {8{1'b0}} , {8{1'b0}} , rs1[63:56] , rs1[55:48] }) |
1417// ({32{sel_ra }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1418// ({32{sel_rax }} & { {8{rs1[63]}}, {8{rs1[63]}}, {8{1'b0}} , {8{1'b0}} }) |
1419// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1420
1421
1422exu_edp_dp_buff_macro__width_3 i_sh_buf48 (
1423 .din ({sh_sel_rshiftx,
1424 sh_sel_rax,
1425 sh_sel_llx }),
1426 .dout({sel_rshiftx48,
1427 sel_rax48,
1428 sel_llx48 }));
1429
1430exu_edp_dp_inv_macro__stack_72c__width_1 i_sh_inv48 (
1431 .din ( sh_rs1_63_ ),
1432 .dout( sh_rs1_48_63 ));
1433
1434
1435exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_23 i_sh_mux48_86 (
1436 .din0({23{sh_rs1_48_63} }),
1437 .din1({sh_rs1_buf[15:0],{7{1'b0}} }),
1438 .sel0( sel_rax48 ),
1439 .sel1( sel_llx48 ),
1440 .dout( mask_mux48[70:48] ));
1441
1442exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_32 i_sh_mux48_52 (
1443 .din0({32{sh_rs1_48_63} }),
1444 .din1({32{1'b0} }),
1445 .sel0( sel_rax48 ),
1446 .sel1( 1'b0 ),
1447 .dout( mask_mux48[47:16] ));
1448
1449exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 i_sh_mux48_10 (
1450 .din0( sh_rs1_buf[63:48] ),
1451 .din1({16{1'b0} }),
1452 .sel0( sel_rshiftx48 ),
1453 .sel1( 1'b0 ),
1454 .dout( mask_mux48[15:0] ));
1455
1456
1457// 70:64 63:56 55:48 47:40 39:32
1458// assign mask_mux56[70:32] = ({39{sel_rshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1459// ({39{sel_lshift }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1460// ({39{sel_rshiftx}} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1461// ({39{sel_ra }} & { {7{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1462// ({39{sel_rax }} & { {7{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}} }) |
1463// ({39{sel_llx }} & { rs1[07:01] , rs1z7[7:0] , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1464
1465// 31:24 23:16 15:08 07:00
1466// assign mask_mux56[31:00] = ({32{sel_rshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1467// ({32{sel_lshift }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1468// ({32{sel_rshiftx}} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , rs1[63:56] }) |
1469// ({32{sel_ra }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} }) |
1470// ({32{sel_rax }} & { {8{rs1[63]}}, {8{rs1[63]}}, {8{rs1[63]}}, {8{1'b0}} }) |
1471// ({32{sel_llx }} & { {8{1'b0}} , {8{1'b0}} , {8{1'b0}} , {8{1'b0}} });
1472
1473
1474exu_edp_dp_buff_macro__width_3 i_sh_buf56 (
1475 .din ({sh_sel_rshiftx,
1476 sh_sel_rax,
1477 sh_sel_llx }),
1478 .dout({sel_rshiftx56,
1479 sel_rax56,
1480 sel_llx56 }));
1481
1482exu_edp_dp_inv_macro__stack_72c__width_1 i_sh_inv56 (
1483 .din ( sh_rs1_63_ ),
1484 .dout( sh_rs1_56_63 ));
1485
1486
1487exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_15 i_sh_mux56_87 (
1488 .din0({15{sh_rs1_56_63} }),
1489 .din1({sh_rs1_buf[7:0],{7{1'b0}} }),
1490 .sel0( sel_rax56 ),
1491 .sel1( sel_llx56 ),
1492 .dout( mask_mux56[70:56] ));
1493
1494exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_48 i_sh_mux56_61 (
1495 .din0({48{sh_rs1_56_63} }),
1496 .din1({48{1'b0} }),
1497 .sel0( sel_rax56 ),
1498 .sel1( 1'b0 ),
1499 .dout( mask_mux56[55:8] ));
1500
1501exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_8 i_sh_mux56_10 (
1502 .din0( sh_rs1_buf[63:56] ),
1503 .din1({8{1'b0} }),
1504 .sel0( sel_rshiftx56 ),
1505 .sel1( 1'b0 ),
1506 .dout( mask_mux56[7:0] ));
1507
1508
1509
1510// *** 1st Level Shifter (right by 8) ***
1511
1512
1513// If timing requires, we could use a 64/32 pin to replace the 2-way OR
1514// assign rs2_5 = rs2[5] & (sel_rshiftx | sel_llx);
1515
1516exu_edp_dp_and_macro__dinv_16x__dnand_6x__ports_2__width_1 i_sh_sh8_mux5 (
1517 .din0( exu_rs2_data_e[5] ),
1518 .din1( shift_sel_e[6] ),
1519 .dout( rs2_5 ));
1520
1521
1522// assign sel1_sh00 = ~rs2_5 & ~rs2[4] & ~rs2[3];
1523// assign sel1_sh08 = ~rs2_5 & ~rs2[4] & rs2[3];
1524// assign sel1_sh16 = ~rs2_5 & rs2[4] & ~rs2[3];
1525// assign sel1_sh24 = ~rs2_5 & rs2[4] & rs2[3];
1526// assign sel1_sh32 = rs2_5 & ~rs2[4] & ~rs2[3];
1527// assign sel1_sh40 = rs2_5 & ~rs2[4] & rs2[3];
1528// assign sel1_sh48 = rs2_5 & rs2[4] & ~rs2[3];
1529// assign sel1_sh56 = rs2_5 & rs2[4] & rs2[3];
1530//
1531// assign sht_by8[70:00] = ({71{sel1_sh00}} & mask_mux00[70:00]) |
1532// ({71{sel1_sh08}} & mask_mux08[70:00]) |
1533// ({71{sel1_sh16}} & mask_mux16[70:00]) |
1534// ({71{sel1_sh24}} & mask_mux24[70:00]) |
1535// ({71{sel1_sh32}} & mask_mux32[70:00]) |
1536// ({71{sel1_sh40}} & mask_mux40[70:00]) |
1537// ({71{sel1_sh48}} & mask_mux48[70:00]) |
1538// ({71{sel1_sh56}} & mask_mux56[70:00]);
1539
1540exu_edp_dp_buff_macro__dbuff_48x__width_1 tst_mux_rep0 (
1541 .din ( tcu_muxtest ),
1542 .dout( tcu_muxtest_rep0 ));
1543
1544
1545exu_edp_dp_mux_macro__mux_aodec__ports_8__stack_72c__width_71 i_sh_sh8_mux (
1546 .din0 ( mask_mux00[70:0] ),
1547 .din1 ( mask_mux08[70:0] ),
1548 .din2 ( mask_mux16[70:0] ),
1549 .din3 ( mask_mux24[70:0] ),
1550 .din4 ( mask_mux32[70:0] ),
1551 .din5 ( mask_mux40[70:0] ),
1552 .din6 ( mask_mux48[70:0] ),
1553 .din7 ( mask_mux56[70:0] ),
1554 .sel ({rs2_5,exu_rs2_data_e[4:3] }),
1555 .dout ( sht_by8[70:0] ));
1556
1557exu_edp_dp_buff_macro__stack_72c__width_71 i_sh_sh8_buf (
1558 .din ( sht_by8[70:0] ),
1559 .dout ( sht_by8_buf[70:0] ));
1560
1561
1562// *** 2nd Level Shifter (by 1) ***
1563
1564// assign sel2_sh0 = ( sel_rshift & ~rs2[2] & ~rs2[1] & ~rs2[0]) |
1565// ( sel_lshift & rs2[2] & rs2[1] & rs2[0]);
1566//
1567// assign sel2_sh1 = ( sel_rshift & ~rs2[2] & ~rs2[1] & rs2[0]) |
1568// ( sel_lshift & rs2[2] & rs2[1] & ~rs2[0]);
1569//
1570// assign sel2_sh2 = ( sel_rshift & ~rs2[2] & rs2[1] & ~rs2[0]) |
1571// ( sel_lshift & rs2[2] & ~rs2[1] & rs2[0]);
1572//
1573// assign sel2_sh3 = ( sel_rshift & ~rs2[2] & rs2[1] & rs2[0]) |
1574// ( sel_lshift & rs2[2] & ~rs2[1] & ~rs2[0]);
1575//
1576// assign sel2_sh4 = ( sel_rshift & rs2[2] & ~rs2[1] & ~rs2[0]) |
1577// ( sel_lshift & ~rs2[2] & rs2[1] & rs2[0]);
1578//
1579// assign sel2_sh5 = ( sel_rshift & rs2[2] & ~rs2[1] & rs2[0]) |
1580// ( sel_lshift & ~rs2[2] & rs2[1] & ~rs2[0]);
1581//
1582// assign sel2_sh6 = ( sel_rshift & rs2[2] & rs2[1] & ~rs2[0]) |
1583// ( sel_lshift & ~rs2[2] & ~rs2[1] & rs2[0]);
1584//
1585// assign sel2_sh7 = ( sel_rshift & rs2[2] & rs2[1] & rs2[0]) |
1586// ( sel_lshift & ~rs2[2] & ~rs2[1] & ~rs2[0]);
1587//
1588//
1589// assign shifter_out_e0[63:0] = ({64{sel2_sh0}} & sht_by8[63:00]) |
1590// ({64{sel2_sh1}} & sht_by8[64:01]) |
1591// ({64{sel2_sh2}} & sht_by8[65:02]) |
1592// ({64{sel2_sh3}} & sht_by8[66:03]) |
1593// ({64{sel2_sh4}} & sht_by8[67:04]) |
1594// ({64{sel2_sh5}} & sht_by8[68:05]) |
1595// ({64{sel2_sh6}} & sht_by8[69:06]) |
1596// ({64{sel2_sh7}} & sht_by8[70:07]);
1597
1598exu_edp_dp_inv_macro__dinv_6x__width_3 i_sh_rs2_inv (
1599 .din ( exu_rs2_data_e[2:0] ),
1600 .dout( rs2_[2:0] ));
1601
1602exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_3 i_sh_rs2l_mux (
1603 .din0( exu_rs2_data_e[2:0] ),
1604 .din1( rs2_[2:0] ),
1605 .sel0( sh_sel_rshift ),
1606 .sel1( sh_sel_lshift ),
1607 .dout( rs2_mux[2:0] ));
1608
1609exu_edp_dp_mux_macro__mux_aodec__ports_8__stack_72c__width_64 i_sh_sh1_mux (
1610 .din0 ( sht_by8_buf[63:0] ),
1611 .din1 ( sht_by8_buf[64:1] ),
1612 .din2 ( sht_by8_buf[65:2] ),
1613 .din3 ( sht_by8_buf[66:3] ),
1614 .din4 ( sht_by8_buf[67:4] ),
1615 .din5 ( sht_by8_buf[68:5] ),
1616 .din6 ( sht_by8_buf[69:6] ),
1617 .din7 ( sht_by8_buf[70:7] ),
1618 .sel ( rs2_mux[2:0] ),
1619 .dout ( shifter_data_e[63:0] ));
1620
1621
1622//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Shift !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1623
1624
1625
1626//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Add/Sub !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1627
1628
1629exu_edp_dp_inv_macro__stack_72c__width_64 i_as_inv_rs2 (
1630 .din ( rs2_data_e[63:0] ),
1631 .dout( rs2_data_e_[63:0] ));
1632
1633
1634exu_edp_dp_cla_macro__width_64 i_as_cla (
1635 .din0( rs1_data_e[63:0] ),
1636 .din1( rs2_data_e_[63:0] ),
1637 .cin ( ect_as_cin_e ),
1638 .cout( edp_sub_cout64_e ),
1639 .dout( sub_data_e[63:0] ));
1640
1641
1642// NOTE : Since the 8 LSB's from the CLA are faster than the remaining bit,
1643// this ALIGNADDRESS clipping should not be in the critical path.
1644// If that is not the case, then add an additional port on to the
1645// late result mux with the low 3 bits tied down.
1646
1647exu_edp_dp_and_macro__ports_2__stack_72c__width_3 i_as_cla_clip (
1648 .din0( add_data_e[2:0] ),
1649 .din1({3{ect_as_clip_e_} }),
1650 .dout( add_clip[2:0] ));
1651
1652
1653exu_edp_dp_xor_macro__ports_2__stack_72c__width_3 i_as_cla_xor (
1654 .din0( exu_address_e[2:0] ),
1655 .din1({3{ect_alignaddress_little_e}} ),
1656 .dout( addsub_xor[2:0] ));
1657
1658exu_edp_dp_increment_macro__width_4 i_as_cla_inc (
1659 .din ({1'b0,addsub_xor[2:0]} ),
1660 .cin ( ect_alignaddress_little_e ),
1661 .cout( i_as_cla_inc_unused[0] ),
1662 .dout({i_as_cla_inc_unused[1],addsub_inc[2:0]} ));
1663
1664
1665exu_edp_dp_cla_macro__width_64 i_as_cla_ea (
1666 .din0( rs1_data_e[63:0] ),
1667 .din1( rs2_data_e[63:0] ),
1668 .cin ( ect_as_cin_e ),
1669 .cout( edp_add_cout64_e ),
1670 .dout( cla_ea[63:0] ));
1671
1672exu_edp_dp_buff_macro__stack_64c__width_64 i_as_buf_ea (
1673 .din ( cla_ea[63:0] ),
1674 .dout ( add_data_e[63:0] ));
1675
1676assign exu_address_e[47:0] = add_data_e[47:0];
1677
1678
1679
1680cl_dp1_zdt64_8x zdt_add (
1681 .din0( exu_rs1_data_e[63:0] ),
1682 .din1( exu_rs2_data_e[63:0] ),
1683 .cin ( ect_as_cin_e ),
1684 .zdt_z32_ ( edp_add_zdetect_e_[0] ),
1685 .zdt_z64_ ( edp_add_zdetect_e_[1] ));
1686
1687
1688cl_dp1_zdt64_8x zdt_sub (
1689 .din0( exu_rs1_data_e[63:0] ),
1690 .din1( rs2_data_e_[63:0] ),
1691 .cin ( ect_as_cin_e ),
1692 .zdt_z32_ ( edp_sub_zdetect_e_[0] ),
1693 .zdt_z64_ ( edp_sub_zdetect_e_[1] ));
1694
1695
1696// To compute COUT32 : use XOR 3-port
1697//
1698// rs1[32] rs2[32] result[32] | COUT32
1699// ------- ------- ---------- | ------
1700// 0 0 0 | 0
1701// 0 0 1 | 1
1702// 0 1 0 | 1
1703// 0 1 1 | 0
1704// 1 0 0 | 1
1705// 1 0 1 | 0
1706// 1 1 0 | 0
1707// 1 1 1 | 1
1708
1709
1710
1711//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Add/Sub !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1712
1713
1714
1715//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : ASI Ring !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1716
1717
1718exu_edp_dp_msff_macro__stack_72c__width_65 i_asi0_ff (
1719 .scan_in(i_asi0_ff_scanin),
1720 .scan_out(i_asi0_ff_scanout),
1721 .clk ( l2clk ),
1722 .en ( lsu_asi_clken ),
1723 .din ( in_rngl_cdbus[64:0] ),
1724 .dout( edp_rng_in_ff[64:0] ),
1725 .se(se),
1726 .siclk(siclk),
1727 .soclk(soclk),
1728 .pce_ov(pce_ov),
1729 .stop(stop));
1730
1731
1732
1733exu_edp_dp_mux_macro__mux_aope__ports_3__stack_72c__width_65 i_asi_ack_mux (
1734 .din0 ({edp_rng_in_ff[64],rml_rng_ack_det_vld,1'b1, // set ACK (bit 62)
1735 edp_rng_in_ff[61:56],8'h00,edp_rng_in_ff[47:0]}), // clear exceptions (bits 55:48)
1736 .din1({6'b111100, dec_thread_group, // ack for CWP write completion
1737 rml_rng_ack_cwp_tid[1:0],8'h00,edp_rng_in_ff[47:0]}), // clear exceptions (bits 55:48)
1738 .din2({6'b111001, dec_thread_group, // ack for IRF_ECC read completion
1739 rml_rng_ack_ecc_tid[1:0],56'h00000000000000} ), // clear exceptions (bits 55:48)
1740 .sel0( rml_rng_ack_ctl[0] ),
1741 .sel1( rml_rng_ack_ctl[1] ),
1742 .dout( rng_ack_data[64:0] ));
1743
1744
1745exu_edp_dp_msff_macro__mux_aope__ports_7__stack_72c__width_65 i_asi1_ff (
1746 .scan_in(i_asi1_ff_scanin),
1747 .scan_out(i_asi1_ff_scanout),
1748 .clk ( l2clk ),
1749 .en ( lsu_asi_clken ),
1750 .din0({{59{1'b0}} , rml_rng_data_out[5:0]} ),
1751 .din1({{57{1'b0}} , ect_rng_ccr_data[7:0]} ),
1752 .din2({{33{1'b0}} , rml_rng_y_data[31:0]} ),
1753 .din3({{26{1'b0}} , asi_inst_mask_reg[38:0]} ),
1754 .din4({{57{1'b0}} , rml_irf_ecc_data[7:0]} ),
1755 .din5( rng_ack_data[64:0] ),
1756 .din6( edp_rng_in_ff[64:0] ),
1757 .sel0( rml_rng_rd_ctl[0] ),
1758 .sel1( rml_rng_rd_ctl[1] ),
1759 .sel2( rml_rng_rd_ctl[2] ),
1760 .sel3( rml_rng_rd_ctl[3] ),
1761 .sel4( rml_rng_rd_ctl[4] ),
1762 .sel5( rml_rng_ack_sel_ctl ),
1763 .dout( rng_out_ff[64:0] ),
1764 .se(se),
1765 .siclk(siclk),
1766 .soclk(soclk),
1767 .pce_ov(pce_ov),
1768 .stop(stop));
1769
1770exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_65 i_asi1_buf (
1771 .din ( rng_out_ff[64:0] ),
1772 .dout( exu_rngl_cdbus[64:0] ));
1773
1774
1775// *** Start : Instruction Break Point logic ***
1776
1777
1778exu_edp_dp_msff_macro__stack_72c__width_39 i_asi_imask_ff (
1779 .scan_in(i_asi_imask_ff_scanin),
1780 .scan_out(i_asi_imask_ff_scanout),
1781 .clk ( l2clk ),
1782 .en ( rml_rng_wt_imask_ctl ),
1783 .din ( edp_rng_in_ff[38:0] ),
1784 .dout( asi_inst_mask_reg[38:0] ),
1785 .se(se),
1786 .siclk(siclk),
1787 .soclk(soclk),
1788 .pce_ov(pce_ov),
1789 .stop(stop));
1790
1791
1792exu_edp_dp_inv_macro__stack_72c__width_7 i_asi_imask_inv (
1793 .din ( asi_inst_mask_reg[38:32] ),
1794 .dout( inst_mask_sel_[6:0] ));
1795
1796
1797exu_edp_dp_buff_macro__stack_72c__width_7 i_asi_imask_buff (
1798 .din ( asi_inst_mask_reg[38:32] ),
1799 .dout( inst_mask_sel[6:0] ));
1800
1801
1802
1803exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_2 i_asi_imask_mux31_30 (
1804 .din0( dec_inst_d[31:30] ),
1805 .din1( asi_inst_mask_reg[31:30] ),
1806 .sel0( inst_mask_sel[6] ),
1807 .sel1( inst_mask_sel_[6] ),
1808 .dout( imask_cmp_data[31:30] ));
1809
1810
1811exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_5 i_asi_imask_mux29_25 (
1812 .din0( dec_inst_d[29:25] ),
1813 .din1( asi_inst_mask_reg[29:25] ),
1814 .sel0( inst_mask_sel[5] ),
1815 .sel1( inst_mask_sel_[5] ),
1816 .dout( imask_cmp_data[29:25] ));
1817
1818
1819exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_6 i_asi_imask_mux24_19 (
1820 .din0( dec_inst_d[24:19] ),
1821 .din1( asi_inst_mask_reg[24:19] ),
1822 .sel0( inst_mask_sel[4] ),
1823 .sel1( inst_mask_sel_[4] ),
1824 .dout( imask_cmp_data[24:19] ));
1825
1826
1827exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_5 i_asi_imask_mux18_14 (
1828 .din0( dec_inst_d[18:14] ),
1829 .din1( asi_inst_mask_reg[18:14] ),
1830 .sel0( inst_mask_sel[3] ),
1831 .sel1( inst_mask_sel_[3] ),
1832 .dout( imask_cmp_data[18:14] ));
1833
1834
1835exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_1 i_asi_imask_mux13 (
1836 .din0( dec_inst_d[13] ),
1837 .din1( asi_inst_mask_reg[13] ),
1838 .sel0( inst_mask_sel[2] ),
1839 .sel1( inst_mask_sel_[2] ),
1840 .dout( imask_cmp_data[13] ));
1841
1842
1843exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_8 i_asi_imask_mux12_5 (
1844 .din0( dec_inst_d[12:5] ),
1845 .din1( asi_inst_mask_reg[12:5] ),
1846 .sel0( inst_mask_sel[1] ),
1847 .sel1( inst_mask_sel_[1] ),
1848 .dout( imask_cmp_data[12:5] ));
1849
1850
1851exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_5 i_asi_imask_mux4_0 (
1852 .din0( dec_inst_d[4:0] ),
1853 .din1( asi_inst_mask_reg[4:0] ),
1854 .sel0( inst_mask_sel[0] ),
1855 .sel1( inst_mask_sel_[0] ),
1856 .dout( imask_cmp_data[4:0] ));
1857
1858
1859
1860exu_edp_dp_zero_macro__width_8 i_asi_ibe_cmp8 (
1861 .din ({1'b0 , inst_mask_sel[6:0]} ),
1862 .dout( ibe_cmp8_d_ ));
1863
1864exu_edp_dp_cmp_macro__width_32 i_asi_ibe_cmp32 (
1865 .din0( imask_cmp_data[31:0] ),
1866 .din1( asi_inst_mask_reg[31:0] ),
1867 .dout( ibe_cmp32_d ));
1868
1869exu_edp_dp_inv_macro__stack_72c__width_1 i_asi_ibe_inv (
1870 .din ( ibe_cmp8_d_ ),
1871 .dout( ibe_cmp8_d ));
1872
1873exu_edp_dp_and_macro__ports_2__stack_72c__width_1 i_asi_ibe_and (
1874 .din0( ibe_cmp32_d ),
1875 .din1( ibe_cmp8_d ),
1876 .dout( ibe_trap_d ));
1877
1878// *** End : Instruction Break Point logic ***
1879
1880
1881
1882//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : ASI Ring !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1883
1884
1885
1886
1887//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! Start : Array !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
1888
1889// Three-Dimensional Array Addressing Instructions
1890//
1891// 3D Array Fixed-Point Address Format
1892//
1893// 63:55 54:44 43:33 32:22 21:11 10:00
1894// ---------- ---------- ---------- ---------- ---------- ----------
1895// Z integer Z fraction Y integer Y fraction X integer X fraction
1896//
1897//
1898// rs2 |
1899// Size 'n' | Number of Elements
1900// -----------|---------------------
1901// 0 | 64
1902// 1 | 128
1903// 2 | 256
1904// 3 | 512
1905// 4 | 1024
1906// 5 | 2048
1907//
1908//
1909// Result Format
1910//
1911// Array8
1912//
1913// | upper | middle | lower |
1914// |---------------------------|--------------------|--------------------|
1915// | Z | Y | X | Z | Y | X | Z | Y | X |
1916// | 20 17 | 17 | 17 | 13 | 9 | 5 | 4 | 2 | 0 |
1917// |+2n +2n | + n | | | | | | | |
1918//
1919//
1920// Array16
1921//
1922// | upper | middle | lower | |
1923// |---------------------------|--------------------|--------------------|------|
1924// | Z | Y | X | Z | Y | X | Z | Y | X | "0" |
1925// | 21 18 | 18 | 18 | 14 | 10 | 6 | 5 | 3 | 1 | 0 |
1926// |+2n +2n | + n | | | | | | | | |
1927//
1928//
1929// Array32
1930//
1931// | upper | middle | lower | |
1932// |---------------------------|--------------------|--------------------|------|
1933// | Z | Y | X | Z | Y | X | Z | Y | X | "00" |
1934// | 22 19 | 19 | 19 | 15 | 11 | 7 | 6 | 4 | 2 | 0 |
1935// |+2n +2n | + n | | | | | | | | |
1936
1937
1938 // Split rs1 into fixed point address fields
1939 assign zint_e[8:0] = exu_rs1_data_e[63:55];
1940 assign yint_e[10:0] = exu_rs1_data_e[43:33];
1941 assign xint_e[10:0] = exu_rs1_data_e[21:11];
1942
1943
1944 // decode n from rs2
1945 // VIS 2.04: implementation dep: cases 6, 7 are illegal and result is undefined,
1946 // but in accordance with previous implementations, we implement 6, 7 as case 5.
1947
1948// assign array_upper_sel_e[0] = ~exu_rs2_data_e[2] & ~exu_rs2_data_e[1] & ~exu_rs2_data_e[0];
1949// assign array_upper_sel_e[1] = ~exu_rs2_data_e[2] & ~exu_rs2_data_e[1] & exu_rs2_data_e[0];
1950// assign array_upper_sel_e[2] = ~exu_rs2_data_e[2] & exu_rs2_data_e[1] & ~exu_rs2_data_e[0];
1951// assign array_upper_sel_e[3] = ~exu_rs2_data_e[2] & exu_rs2_data_e[1] & exu_rs2_data_e[0];
1952// assign array_upper_sel_e[4] = exu_rs2_data_e[2] & ~exu_rs2_data_e[1] & ~exu_rs2_data_e[0];
1953// assign array_upper_sel_e[5] = exu_rs2_data_e[2] & (exu_rs2_data_e[1] | exu_rs2_data_e[0]);
1954//
1955 assign array_upper_data0[13:0] = {10'b0000000000, zint_e[8:5] };
1956 assign array_upper_data1[13:0] = { 8'b00000000, zint_e[8:5], yint_e[6] , xint_e[6] };
1957 assign array_upper_data2[13:0] = { 6'b000000, zint_e[8:5], yint_e[7:6] , xint_e[7:6] };
1958 assign array_upper_data3[13:0] = { 4'b0000, zint_e[8:5], yint_e[8:6] , xint_e[8:6] };
1959 assign array_upper_data4[13:0] = { 2'b00, zint_e[8:5], yint_e[9:6] , xint_e[9:6] };
1960 assign array_upper_data5[13:0] = { zint_e[8:5], yint_e[10:6], xint_e[10:6]};
1961//
1962//
1963// // select upper, middle, and lower fields
1964// assign array_upper_e[13:0] = ({14{array_upper_sel_e[0]}} & array_upper_data0[13:0]) |
1965// ({14{array_upper_sel_e[1]}} & array_upper_data1[13:0]) |
1966// ({14{array_upper_sel_e[2]}} & array_upper_data2[13:0]) |
1967// ({14{array_upper_sel_e[3]}} & array_upper_data3[13:0]) |
1968// ({14{array_upper_sel_e[4]}} & array_upper_data4[13:0]) |
1969// ({14{array_upper_sel_e[5]}} & array_upper_data5[13:0]);
1970
1971
1972
1973exu_edp_dp_mux_macro__mux_pgdec__ports_8__stack_72c__width_14 i_array_mux1 (
1974 .muxtst (tcu_muxtest_rep0[2] ),
1975 .din0 ( array_upper_data0[13:0] ),
1976 .din1 ( array_upper_data1[13:0] ),
1977 .din2 ( array_upper_data2[13:0] ),
1978 .din3 ( array_upper_data3[13:0] ),
1979 .din4 ( array_upper_data4[13:0] ),
1980 .din5 ( array_upper_data5[13:0] ),
1981 .din6 ( array_upper_data5[13:0] ),
1982 .din7 ( array_upper_data5[13:0] ),
1983 .sel ( exu_rs2_data_e[2:0] ),
1984 .dout ( array_upper_e[13:0] ),
1985 .test(test));
1986
1987
1988
1989 assign array_middle_e[11:0] = {zint_e[4:1], yint_e[5:2], xint_e[5:2]};
1990
1991 assign array_lower_e[4:0] = {zint_e[0] , yint_e[1:0], xint_e[1:0]};
1992
1993
1994 // shift array result based on array instruction type
1995
1996 assign array08_data[32:0] = {2'b00, array_upper_e[13:0], array_middle_e[11:0], array_lower_e[4:0] };
1997 assign array16_data[32:0] = {1'b0 , array_upper_e[13:0], array_middle_e[11:0], array_lower_e[4:0], 1'b0 };
1998 assign array32_data[32:0] = { array_upper_e[13:0], array_middle_e[11:0], array_lower_e[4:0], 2'b00};
1999
2000// assign ect_array_res_e[32:0] = ({33{array08_e}} & array08_data[32:0]) |
2001// ({33{array16_e}} & array16_data[32:0]) |
2002// ({33{array32_e}} & array32_data[32:0]);
2003
2004
2005
2006exu_edp_dp_mux_macro__mux_aope__ports_3__stack_72c__width_33 i_array_mux2 (
2007 .din0 ( array08_data[32:0] ),
2008 .din1 ( array16_data[32:0] ),
2009 .din2 ( array32_data[32:0] ),
2010 .sel0 ( ect_array_sel_e[0] ),
2011 .sel1 ( ect_array_sel_e[1] ),
2012 .dout ( array_res_e[32:0] ));
2013
2014
2015
2016
2017//!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! End : Array !*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
2018
2019
2020
2021
2022// NOSINK rename section
2023
2024assign edp_add_data_e_b63 = add_data_e[63];
2025assign edp_sub_data_e_b63 = sub_data_e[63];
2026assign edp_sub_data_e_b31 = sub_data_e[31];
2027
2028
2029// fixscan start:
2030assign i_bp_ff_rcc_scanin = scan_in ;
2031assign i_bp_ff_rs1_scanin = i_bp_ff_rcc_scanout ;
2032assign i_bp_ff_rs2_scanin = i_bp_ff_rs1_scanout ;
2033assign i_bp_ff_rs3_scanin = i_bp_ff_rs2_scanout ;
2034assign i_rm_ff_m_scanin = i_bp_ff_rs3_scanout ;
2035assign i_rm_ff_b_scanin = i_rm_ff_m_scanout ;
2036assign i_rm_ff_w_scanin = i_rm_ff_b_scanout ;
2037assign i_rm_ff_w_plus1_scanin = i_rm_ff_w_scanout ;
2038assign i_rm_ff_w2_scanin = i_rm_ff_w_plus1_scanout ;
2039assign i_rm_ff_w2_plus1_scanin = i_rm_ff_w2_scanout ;
2040assign i_misc_ff_scanin = i_rm_ff_w2_plus1_scanout ;
2041assign i_asi0_ff_scanin = i_misc_ff_scanout ;
2042assign i_asi1_ff_scanin = i_asi0_ff_scanout ;
2043assign i_asi_imask_ff_scanin = i_asi1_ff_scanout ;
2044assign scan_out = i_asi_imask_ff_scanout ;
2045// fixscan end:
2046endmodule
2047
2048
2049//
2050// buff macro
2051//
2052//
2053
2054
2055
2056
2057
2058module exu_edp_dp_buff_macro__dbuff_32x__stack_none__width_4 (
2059 din,
2060 dout);
2061 input [3:0] din;
2062 output [3:0] dout;
2063
2064
2065
2066
2067
2068
2069buff #(4) d0_0 (
2070.in(din[3:0]),
2071.out(dout[3:0])
2072);
2073
2074
2075
2076
2077
2078
2079
2080
2081endmodule
2082
2083
2084
2085
2086
2087// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2088// also for pass-gate with decoder
2089
2090
2091
2092
2093
2094// any PARAMS parms go into naming of macro
2095
2096module exu_edp_dp_mux_macro__mux_aope__ports_6__stack_72c__width_64 (
2097 din0,
2098 din1,
2099 din2,
2100 din3,
2101 din4,
2102 din5,
2103 sel0,
2104 sel1,
2105 sel2,
2106 sel3,
2107 sel4,
2108 dout);
2109wire psel0;
2110wire psel1;
2111wire psel2;
2112wire psel3;
2113wire psel4;
2114wire psel5;
2115
2116 input [63:0] din0;
2117 input [63:0] din1;
2118 input [63:0] din2;
2119 input [63:0] din3;
2120 input [63:0] din4;
2121 input [63:0] din5;
2122 input sel0;
2123 input sel1;
2124 input sel2;
2125 input sel3;
2126 input sel4;
2127 output [63:0] dout;
2128
2129
2130
2131
2132
2133cl_dp1_penc6_8x c0_0 (
2134 .test(1'b1),
2135 .sel0(sel0),
2136 .sel1(sel1),
2137 .sel2(sel2),
2138 .sel3(sel3),
2139 .sel4(sel4),
2140 .psel0(psel0),
2141 .psel1(psel1),
2142 .psel2(psel2),
2143 .psel3(psel3),
2144 .psel4(psel4),
2145 .psel5(psel5)
2146);
2147
2148mux6s #(64) d0_0 (
2149 .sel0(psel0),
2150 .sel1(psel1),
2151 .sel2(psel2),
2152 .sel3(psel3),
2153 .sel4(psel4),
2154 .sel5(psel5),
2155 .in0(din0[63:0]),
2156 .in1(din1[63:0]),
2157 .in2(din2[63:0]),
2158 .in3(din3[63:0]),
2159 .in4(din4[63:0]),
2160 .in5(din5[63:0]),
2161.dout(dout[63:0])
2162);
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176endmodule
2177
2178
2179
2180
2181
2182
2183// any PARAMS parms go into naming of macro
2184
2185module exu_edp_dp_msff_macro__mux_aope__ports_4__stack_72c__width_72 (
2186 din0,
2187 din1,
2188 din2,
2189 din3,
2190 sel0,
2191 sel1,
2192 sel2,
2193 clk,
2194 en,
2195 se,
2196 scan_in,
2197 siclk,
2198 soclk,
2199 pce_ov,
2200 stop,
2201 dout,
2202 scan_out);
2203wire psel0;
2204wire psel1;
2205wire psel2;
2206wire psel3;
2207wire [71:0] muxout;
2208wire l1clk;
2209wire siclk_out;
2210wire soclk_out;
2211wire [70:0] so;
2212
2213 input [71:0] din0;
2214 input [71:0] din1;
2215 input [71:0] din2;
2216 input [71:0] din3;
2217 input sel0;
2218 input sel1;
2219 input sel2;
2220
2221
2222 input clk;
2223 input en;
2224 input se;
2225 input scan_in;
2226 input siclk;
2227 input soclk;
2228 input pce_ov;
2229 input stop;
2230
2231
2232
2233 output [71:0] dout;
2234
2235
2236 output scan_out;
2237
2238
2239
2240
2241cl_dp1_penc4_8x c1_0 (
2242 .test(1'b1),
2243 .sel0(sel0),
2244 .sel1(sel1),
2245 .sel2(sel2),
2246 .psel0(psel0),
2247 .psel1(psel1),
2248 .psel2(psel2),
2249 .psel3(psel3)
2250);
2251
2252mux4s #(72) d1_0 (
2253 .sel0(psel0),
2254 .sel1(psel1),
2255 .sel2(psel2),
2256 .sel3(psel3),
2257 .in0(din0[71:0]),
2258 .in1(din1[71:0]),
2259 .in2(din2[71:0]),
2260 .in3(din3[71:0]),
2261.dout(muxout[71:0])
2262);
2263cl_dp1_l1hdr_8x c0_0 (
2264.l2clk(clk),
2265.pce(en),
2266.aclk(siclk),
2267.bclk(soclk),
2268.l1clk(l1clk),
2269 .se(se),
2270 .pce_ov(pce_ov),
2271 .stop(stop),
2272 .siclk_out(siclk_out),
2273 .soclk_out(soclk_out)
2274);
2275dff #(72) d0_0 (
2276.l1clk(l1clk),
2277.siclk(siclk_out),
2278.soclk(soclk_out),
2279.d(muxout[71:0]),
2280.si({scan_in,so[70:0]}),
2281.so({so[70:0],scan_out}),
2282.q(dout[71:0])
2283);
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304endmodule
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318// any PARAMS parms go into naming of macro
2319
2320module exu_edp_dp_msff_macro__buffsel_none__mux_aonpe__ports_5__stack_72c__width_64 (
2321 din0,
2322 sel0,
2323 din1,
2324 sel1,
2325 din2,
2326 sel2,
2327 din3,
2328 sel3,
2329 din4,
2330 sel4,
2331 clk,
2332 en,
2333 se,
2334 scan_in,
2335 siclk,
2336 soclk,
2337 pce_ov,
2338 stop,
2339 dout,
2340 scan_out);
2341wire [63:0] muxout;
2342wire l1clk;
2343wire siclk_out;
2344wire soclk_out;
2345wire [62:0] so;
2346
2347 input [63:0] din0;
2348 input sel0;
2349 input [63:0] din1;
2350 input sel1;
2351 input [63:0] din2;
2352 input sel2;
2353 input [63:0] din3;
2354 input sel3;
2355 input [63:0] din4;
2356 input sel4;
2357
2358
2359 input clk;
2360 input en;
2361 input se;
2362 input scan_in;
2363 input siclk;
2364 input soclk;
2365 input pce_ov;
2366 input stop;
2367
2368
2369
2370 output [63:0] dout;
2371
2372
2373 output scan_out;
2374
2375
2376
2377
2378mux5s #(64) d1_0 (
2379 .sel0(sel0),
2380 .sel1(sel1),
2381 .sel2(sel2),
2382 .sel3(sel3),
2383 .sel4(sel4),
2384 .in0(din0[63:0]),
2385 .in1(din1[63:0]),
2386 .in2(din2[63:0]),
2387 .in3(din3[63:0]),
2388 .in4(din4[63:0]),
2389.dout(muxout[63:0])
2390);
2391cl_dp1_l1hdr_8x c0_0 (
2392.l2clk(clk),
2393.pce(en),
2394.aclk(siclk),
2395.bclk(soclk),
2396.l1clk(l1clk),
2397 .se(se),
2398 .pce_ov(pce_ov),
2399 .stop(stop),
2400 .siclk_out(siclk_out),
2401 .soclk_out(soclk_out)
2402);
2403dff #(64) d0_0 (
2404.l1clk(l1clk),
2405.siclk(siclk_out),
2406.soclk(soclk_out),
2407.d(muxout[63:0]),
2408.si({scan_in,so[62:0]}),
2409.so({so[62:0],scan_out}),
2410.q(dout[63:0])
2411);
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432endmodule
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442//
2443// buff macro
2444//
2445//
2446
2447
2448
2449
2450
2451module exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_64 (
2452 din,
2453 dout);
2454 input [63:0] din;
2455 output [63:0] dout;
2456
2457
2458
2459
2460
2461
2462buff #(64) d0_0 (
2463.in(din[63:0]),
2464.out(dout[63:0])
2465);
2466
2467
2468
2469
2470
2471
2472
2473
2474endmodule
2475
2476
2477
2478
2479
2480//
2481// buff macro
2482//
2483//
2484
2485
2486
2487
2488
2489module exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_72 (
2490 din,
2491 dout);
2492 input [71:0] din;
2493 output [71:0] dout;
2494
2495
2496
2497
2498
2499
2500buff #(72) d0_0 (
2501.in(din[71:0]),
2502.out(dout[71:0])
2503);
2504
2505
2506
2507
2508
2509
2510
2511
2512endmodule
2513
2514
2515
2516
2517
2518//
2519// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
2520//
2521//
2522
2523
2524
2525
2526
2527module exu_edp_dp_zero_macro__width_64 (
2528 din,
2529 dout);
2530 input [63:0] din;
2531 output dout;
2532
2533
2534
2535
2536
2537
2538zero #(64) m0_0 (
2539.in(din[63:0]),
2540.out(dout)
2541);
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552endmodule
2553
2554
2555
2556
2557
2558//
2559// invert macro
2560//
2561//
2562
2563
2564
2565
2566
2567module exu_edp_dp_inv_macro__dinv_12x__stack_72c__width_1 (
2568 din,
2569 dout);
2570 input [0:0] din;
2571 output [0:0] dout;
2572
2573
2574
2575
2576
2577
2578inv #(1) d0_0 (
2579.in(din[0:0]),
2580.out(dout[0:0])
2581);
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591endmodule
2592
2593
2594
2595
2596
2597//
2598// nand macro for ports = 2,3,4
2599//
2600//
2601
2602
2603
2604
2605
2606module exu_edp_dp_nand_macro__dnand_16x__left_1__ports_2__stack_72c__width_1 (
2607 din0,
2608 din1,
2609 dout);
2610 input [0:0] din0;
2611 input [0:0] din1;
2612 output [0:0] dout;
2613
2614
2615
2616
2617
2618
2619nand2 #(1) d0_0 (
2620.in0(din0[0:0]),
2621.in1(din1[0:0]),
2622.out(dout[0:0])
2623);
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633endmodule
2634
2635
2636
2637
2638
2639//
2640// nand macro for ports = 2,3,4
2641//
2642//
2643
2644
2645
2646
2647
2648module exu_edp_dp_nand_macro__ports_2__stack_72c__width_1 (
2649 din0,
2650 din1,
2651 dout);
2652 input [0:0] din0;
2653 input [0:0] din1;
2654 output [0:0] dout;
2655
2656
2657
2658
2659
2660
2661nand2 #(1) d0_0 (
2662.in0(din0[0:0]),
2663.in1(din1[0:0]),
2664.out(dout[0:0])
2665);
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675endmodule
2676
2677
2678
2679
2680
2681//
2682// nand macro for ports = 2,3,4
2683//
2684//
2685
2686
2687
2688
2689
2690module exu_edp_dp_nand_macro__dnand_32x__left_1__ports_2__stack_72c__width_2 (
2691 din0,
2692 din1,
2693 dout);
2694 input [1:0] din0;
2695 input [1:0] din1;
2696 output [1:0] dout;
2697
2698
2699
2700
2701
2702
2703nand2 #(2) d0_0 (
2704.in0(din0[1:0]),
2705.in1(din1[1:0]),
2706.out(dout[1:0])
2707);
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717endmodule
2718
2719
2720
2721
2722
2723//
2724// buff macro
2725//
2726//
2727
2728
2729
2730
2731
2732module exu_edp_dp_buff_macro__stack_72c__width_1 (
2733 din,
2734 dout);
2735 input [0:0] din;
2736 output [0:0] dout;
2737
2738
2739
2740
2741
2742
2743buff #(1) d0_0 (
2744.in(din[0:0]),
2745.out(dout[0:0])
2746);
2747
2748
2749
2750
2751
2752
2753
2754
2755endmodule
2756
2757
2758
2759
2760
2761//
2762// buff macro
2763//
2764//
2765
2766
2767
2768
2769
2770module exu_edp_dp_buff_macro__stack_72c__width_7 (
2771 din,
2772 dout);
2773 input [6:0] din;
2774 output [6:0] dout;
2775
2776
2777
2778
2779
2780
2781buff #(7) d0_0 (
2782.in(din[6:0]),
2783.out(dout[6:0])
2784);
2785
2786
2787
2788
2789
2790
2791
2792
2793endmodule
2794
2795
2796
2797
2798
2799// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2800// also for pass-gate with decoder
2801
2802
2803
2804
2805
2806// any PARAMS parms go into naming of macro
2807
2808module exu_edp_dp_mux_macro__mux_aonpe__ports_8__stack_72c__width_64 (
2809 din0,
2810 sel0,
2811 din1,
2812 sel1,
2813 din2,
2814 sel2,
2815 din3,
2816 sel3,
2817 din4,
2818 sel4,
2819 din5,
2820 sel5,
2821 din6,
2822 sel6,
2823 din7,
2824 sel7,
2825 dout);
2826wire buffout0;
2827wire buffout1;
2828wire buffout2;
2829wire buffout3;
2830wire buffout4;
2831wire buffout5;
2832wire buffout6;
2833wire buffout7;
2834
2835 input [63:0] din0;
2836 input sel0;
2837 input [63:0] din1;
2838 input sel1;
2839 input [63:0] din2;
2840 input sel2;
2841 input [63:0] din3;
2842 input sel3;
2843 input [63:0] din4;
2844 input sel4;
2845 input [63:0] din5;
2846 input sel5;
2847 input [63:0] din6;
2848 input sel6;
2849 input [63:0] din7;
2850 input sel7;
2851 output [63:0] dout;
2852
2853
2854
2855
2856
2857cl_dp1_muxbuff8_8x c0_0 (
2858 .in0(sel0),
2859 .in1(sel1),
2860 .in2(sel2),
2861 .in3(sel3),
2862 .in4(sel4),
2863 .in5(sel5),
2864 .in6(sel6),
2865 .in7(sel7),
2866 .out0(buffout0),
2867 .out1(buffout1),
2868 .out2(buffout2),
2869 .out3(buffout3),
2870 .out4(buffout4),
2871 .out5(buffout5),
2872 .out6(buffout6),
2873 .out7(buffout7)
2874);
2875mux8s #(64) d0_0 (
2876 .sel0(buffout0),
2877 .sel1(buffout1),
2878 .sel2(buffout2),
2879 .sel3(buffout3),
2880 .sel4(buffout4),
2881 .sel5(buffout5),
2882 .sel6(buffout6),
2883 .sel7(buffout7),
2884 .in0(din0[63:0]),
2885 .in1(din1[63:0]),
2886 .in2(din2[63:0]),
2887 .in3(din3[63:0]),
2888 .in4(din4[63:0]),
2889 .in5(din5[63:0]),
2890 .in6(din6[63:0]),
2891 .in7(din7[63:0]),
2892.dout(dout[63:0])
2893);
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907endmodule
2908
2909
2910
2911
2912
2913
2914// any PARAMS parms go into naming of macro
2915
2916module exu_edp_dp_msff_macro__mux_aope__ports_5__stack_72c__width_72 (
2917 din0,
2918 din1,
2919 din2,
2920 din3,
2921 din4,
2922 sel0,
2923 sel1,
2924 sel2,
2925 sel3,
2926 clk,
2927 en,
2928 se,
2929 scan_in,
2930 siclk,
2931 soclk,
2932 pce_ov,
2933 stop,
2934 dout,
2935 scan_out);
2936wire psel0;
2937wire psel1;
2938wire psel2;
2939wire psel3;
2940wire psel4;
2941wire [71:0] muxout;
2942wire l1clk;
2943wire siclk_out;
2944wire soclk_out;
2945wire [70:0] so;
2946
2947 input [71:0] din0;
2948 input [71:0] din1;
2949 input [71:0] din2;
2950 input [71:0] din3;
2951 input [71:0] din4;
2952 input sel0;
2953 input sel1;
2954 input sel2;
2955 input sel3;
2956
2957
2958 input clk;
2959 input en;
2960 input se;
2961 input scan_in;
2962 input siclk;
2963 input soclk;
2964 input pce_ov;
2965 input stop;
2966
2967
2968
2969 output [71:0] dout;
2970
2971
2972 output scan_out;
2973
2974
2975
2976
2977cl_dp1_penc5_8x c1_0 (
2978 .test(1'b1),
2979 .sel0(sel0),
2980 .sel1(sel1),
2981 .sel2(sel2),
2982 .sel3(sel3),
2983 .psel0(psel0),
2984 .psel1(psel1),
2985 .psel2(psel2),
2986 .psel3(psel3),
2987 .psel4(psel4)
2988);
2989
2990mux5s #(72) d1_0 (
2991 .sel0(psel0),
2992 .sel1(psel1),
2993 .sel2(psel2),
2994 .sel3(psel3),
2995 .sel4(psel4),
2996 .in0(din0[71:0]),
2997 .in1(din1[71:0]),
2998 .in2(din2[71:0]),
2999 .in3(din3[71:0]),
3000 .in4(din4[71:0]),
3001.dout(muxout[71:0])
3002);
3003cl_dp1_l1hdr_8x c0_0 (
3004.l2clk(clk),
3005.pce(en),
3006.aclk(siclk),
3007.bclk(soclk),
3008.l1clk(l1clk),
3009 .se(se),
3010 .pce_ov(pce_ov),
3011 .stop(stop),
3012 .siclk_out(siclk_out),
3013 .soclk_out(soclk_out)
3014);
3015dff #(72) d0_0 (
3016.l1clk(l1clk),
3017.siclk(siclk_out),
3018.soclk(soclk_out),
3019.d(muxout[71:0]),
3020.si({scan_in,so[70:0]}),
3021.so({so[70:0],scan_out}),
3022.q(dout[71:0])
3023);
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044endmodule
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058// any PARAMS parms go into naming of macro
3059
3060module exu_edp_dp_msff_macro__buffsel_none__mux_aonpe__ports_5__stack_72c__width_72 (
3061 din0,
3062 sel0,
3063 din1,
3064 sel1,
3065 din2,
3066 sel2,
3067 din3,
3068 sel3,
3069 din4,
3070 sel4,
3071 clk,
3072 en,
3073 se,
3074 scan_in,
3075 siclk,
3076 soclk,
3077 pce_ov,
3078 stop,
3079 dout,
3080 scan_out);
3081wire [71:0] muxout;
3082wire l1clk;
3083wire siclk_out;
3084wire soclk_out;
3085wire [70:0] so;
3086
3087 input [71:0] din0;
3088 input sel0;
3089 input [71:0] din1;
3090 input sel1;
3091 input [71:0] din2;
3092 input sel2;
3093 input [71:0] din3;
3094 input sel3;
3095 input [71:0] din4;
3096 input sel4;
3097
3098
3099 input clk;
3100 input en;
3101 input se;
3102 input scan_in;
3103 input siclk;
3104 input soclk;
3105 input pce_ov;
3106 input stop;
3107
3108
3109
3110 output [71:0] dout;
3111
3112
3113 output scan_out;
3114
3115
3116
3117
3118mux5s #(72) d1_0 (
3119 .sel0(sel0),
3120 .sel1(sel1),
3121 .sel2(sel2),
3122 .sel3(sel3),
3123 .sel4(sel4),
3124 .in0(din0[71:0]),
3125 .in1(din1[71:0]),
3126 .in2(din2[71:0]),
3127 .in3(din3[71:0]),
3128 .in4(din4[71:0]),
3129.dout(muxout[71:0])
3130);
3131cl_dp1_l1hdr_8x c0_0 (
3132.l2clk(clk),
3133.pce(en),
3134.aclk(siclk),
3135.bclk(soclk),
3136.l1clk(l1clk),
3137 .se(se),
3138 .pce_ov(pce_ov),
3139 .stop(stop),
3140 .siclk_out(siclk_out),
3141 .soclk_out(soclk_out)
3142);
3143dff #(72) d0_0 (
3144.l1clk(l1clk),
3145.siclk(siclk_out),
3146.soclk(soclk_out),
3147.d(muxout[71:0]),
3148.si({scan_in,so[70:0]}),
3149.so({so[70:0],scan_out}),
3150.q(dout[71:0])
3151);
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172endmodule
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182//
3183// xor macro for ports = 2,3
3184//
3185//
3186
3187
3188
3189
3190
3191module exu_edp_dp_xor_macro__ports_2__stack_72c__width_64 (
3192 din0,
3193 din1,
3194 dout);
3195 input [63:0] din0;
3196 input [63:0] din1;
3197 output [63:0] dout;
3198
3199
3200
3201
3202
3203xor2 #(64) d0_0 (
3204.in0(din0[63:0]),
3205.in1(din1[63:0]),
3206.out(dout[63:0])
3207);
3208
3209
3210
3211
3212
3213
3214
3215
3216endmodule
3217
3218
3219
3220
3221
3222// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3223// also for pass-gate with decoder
3224
3225
3226
3227
3228
3229// any PARAMS parms go into naming of macro
3230
3231module exu_edp_dp_mux_macro__mux_aope__ports_2__stack_72c__width_64 (
3232 din0,
3233 din1,
3234 sel0,
3235 dout);
3236wire psel0;
3237wire psel1;
3238
3239 input [63:0] din0;
3240 input [63:0] din1;
3241 input sel0;
3242 output [63:0] dout;
3243
3244
3245
3246
3247
3248cl_dp1_penc2_8x c0_0 (
3249 .sel0(sel0),
3250 .psel0(psel0),
3251 .psel1(psel1)
3252);
3253
3254mux2s #(64) d0_0 (
3255 .sel0(psel0),
3256 .sel1(psel1),
3257 .in0(din0[63:0]),
3258 .in1(din1[63:0]),
3259.dout(dout[63:0])
3260);
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274endmodule
3275
3276
3277//
3278// buff macro
3279//
3280//
3281
3282
3283
3284
3285
3286module exu_edp_dp_buff_macro__stack_72c__width_64 (
3287 din,
3288 dout);
3289 input [63:0] din;
3290 output [63:0] dout;
3291
3292
3293
3294
3295
3296
3297buff #(64) d0_0 (
3298.in(din[63:0]),
3299.out(dout[63:0])
3300);
3301
3302
3303
3304
3305
3306
3307
3308
3309endmodule
3310
3311
3312
3313
3314
3315//
3316// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
3317//
3318//
3319
3320
3321
3322
3323
3324module exu_edp_dp_cmp_macro__width_32 (
3325 din0,
3326 din1,
3327 dout);
3328 input [31:0] din0;
3329 input [31:0] din1;
3330 output dout;
3331
3332
3333
3334
3335
3336
3337cmp #(32) m0_0 (
3338.in0(din0[31:0]),
3339.in1(din1[31:0]),
3340.out(dout)
3341);
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352endmodule
3353
3354
3355
3356
3357
3358//
3359// invert macro
3360//
3361//
3362
3363
3364
3365
3366
3367module exu_edp_dp_inv_macro__stack_72c__width_3 (
3368 din,
3369 dout);
3370 input [2:0] din;
3371 output [2:0] dout;
3372
3373
3374
3375
3376
3377
3378inv #(3) d0_0 (
3379.in(din[2:0]),
3380.out(dout[2:0])
3381);
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391endmodule
3392
3393
3394
3395
3396
3397//
3398// nand macro for ports = 2,3,4
3399//
3400//
3401
3402
3403
3404
3405
3406module exu_edp_dp_nand_macro__ports_3__stack_72c__width_3 (
3407 din0,
3408 din1,
3409 din2,
3410 dout);
3411 input [2:0] din0;
3412 input [2:0] din1;
3413 input [2:0] din2;
3414 output [2:0] dout;
3415
3416
3417
3418
3419
3420
3421nand3 #(3) d0_0 (
3422.in0(din0[2:0]),
3423.in1(din1[2:0]),
3424.in2(din2[2:0]),
3425.out(dout[2:0])
3426);
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436endmodule
3437
3438
3439
3440
3441
3442//
3443// nand macro for ports = 2,3,4
3444//
3445//
3446
3447
3448
3449
3450
3451module exu_edp_dp_nand_macro__ports_2__stack_72c__width_3 (
3452 din0,
3453 din1,
3454 dout);
3455 input [2:0] din0;
3456 input [2:0] din1;
3457 output [2:0] dout;
3458
3459
3460
3461
3462
3463
3464nand2 #(3) d0_0 (
3465.in0(din0[2:0]),
3466.in1(din1[2:0]),
3467.out(dout[2:0])
3468);
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478endmodule
3479
3480
3481
3482
3483
3484//
3485// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
3486//
3487//
3488
3489
3490
3491
3492
3493module exu_edp_dp_cmp_macro__width_64 (
3494 din0,
3495 din1,
3496 dout);
3497 input [63:0] din0;
3498 input [63:0] din1;
3499 output dout;
3500
3501
3502
3503
3504
3505
3506cmp #(64) m0_0 (
3507.in0(din0[63:0]),
3508.in1(din1[63:0]),
3509.out(dout)
3510);
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521endmodule
3522
3523
3524
3525
3526
3527//
3528// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
3529//
3530//
3531
3532
3533
3534
3535
3536module exu_edp_dp_cmp_macro__width_8 (
3537 din0,
3538 din1,
3539 dout);
3540 input [7:0] din0;
3541 input [7:0] din1;
3542 output dout;
3543
3544
3545
3546
3547
3548
3549cmp #(8) m0_0 (
3550.in0(din0[7:0]),
3551.in1(din1[7:0]),
3552.out(dout)
3553);
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564endmodule
3565
3566
3567
3568
3569
3570//
3571// buff macro
3572//
3573//
3574
3575
3576
3577
3578
3579module exu_edp_dp_buff_macro__dbuff_32x__stack_72c__width_2 (
3580 din,
3581 dout);
3582 input [1:0] din;
3583 output [1:0] dout;
3584
3585
3586
3587
3588
3589
3590buff #(2) d0_0 (
3591.in(din[1:0]),
3592.out(dout[1:0])
3593);
3594
3595
3596
3597
3598
3599
3600
3601
3602endmodule
3603
3604
3605
3606
3607
3608//
3609// buff macro
3610//
3611//
3612
3613
3614
3615
3616
3617module exu_edp_dp_buff_macro__dbuff_32x__stack_72c__width_1 (
3618 din,
3619 dout);
3620 input [0:0] din;
3621 output [0:0] dout;
3622
3623
3624
3625
3626
3627
3628buff #(1) d0_0 (
3629.in(din[0:0]),
3630.out(dout[0:0])
3631);
3632
3633
3634
3635
3636
3637
3638
3639
3640endmodule
3641
3642
3643
3644
3645
3646// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3647// also for pass-gate with decoder
3648
3649
3650
3651
3652
3653// any PARAMS parms go into naming of macro
3654
3655module exu_edp_dp_mux_macro__mux_aonpe__ports_7__stack_72c__width_64 (
3656 din0,
3657 sel0,
3658 din1,
3659 sel1,
3660 din2,
3661 sel2,
3662 din3,
3663 sel3,
3664 din4,
3665 sel4,
3666 din5,
3667 sel5,
3668 din6,
3669 sel6,
3670 dout);
3671wire buffout0;
3672wire buffout1;
3673wire buffout2;
3674wire buffout3;
3675wire buffout4;
3676wire buffout5;
3677wire buffout6;
3678
3679 input [63:0] din0;
3680 input sel0;
3681 input [63:0] din1;
3682 input sel1;
3683 input [63:0] din2;
3684 input sel2;
3685 input [63:0] din3;
3686 input sel3;
3687 input [63:0] din4;
3688 input sel4;
3689 input [63:0] din5;
3690 input sel5;
3691 input [63:0] din6;
3692 input sel6;
3693 output [63:0] dout;
3694
3695
3696
3697
3698
3699cl_dp1_muxbuff7_8x c0_0 (
3700 .in0(sel0),
3701 .in1(sel1),
3702 .in2(sel2),
3703 .in3(sel3),
3704 .in4(sel4),
3705 .in5(sel5),
3706 .in6(sel6),
3707 .out0(buffout0),
3708 .out1(buffout1),
3709 .out2(buffout2),
3710 .out3(buffout3),
3711 .out4(buffout4),
3712 .out5(buffout5),
3713 .out6(buffout6)
3714);
3715mux7s #(64) d0_0 (
3716 .sel0(buffout0),
3717 .sel1(buffout1),
3718 .sel2(buffout2),
3719 .sel3(buffout3),
3720 .sel4(buffout4),
3721 .sel5(buffout5),
3722 .sel6(buffout6),
3723 .in0(din0[63:0]),
3724 .in1(din1[63:0]),
3725 .in2(din2[63:0]),
3726 .in3(din3[63:0]),
3727 .in4(din4[63:0]),
3728 .in5(din5[63:0]),
3729 .in6(din6[63:0]),
3730.dout(dout[63:0])
3731);
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745endmodule
3746
3747
3748// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3749// also for pass-gate with decoder
3750
3751
3752
3753
3754
3755// any PARAMS parms go into naming of macro
3756
3757module exu_edp_dp_mux_macro__mux_pgpe__ports_4__stack_72c__width_64 (
3758 din0,
3759 din1,
3760 din2,
3761 din3,
3762 sel0,
3763 sel1,
3764 sel2,
3765 muxtst,
3766 test,
3767 dout);
3768wire psel0;
3769wire psel1;
3770wire psel2;
3771wire psel3;
3772
3773 input [63:0] din0;
3774 input [63:0] din1;
3775 input [63:0] din2;
3776 input [63:0] din3;
3777 input sel0;
3778 input sel1;
3779 input sel2;
3780 input muxtst;
3781 input test;
3782 output [63:0] dout;
3783
3784
3785
3786
3787
3788cl_dp1_penc4_8x c0_0 (
3789 .sel0(sel0),
3790 .sel1(sel1),
3791 .sel2(sel2),
3792 .psel0(psel0),
3793 .psel1(psel1),
3794 .psel2(psel2),
3795 .psel3(psel3),
3796 .test(test)
3797);
3798
3799mux4 #(64) d0_0 (
3800 .sel0(psel0),
3801 .sel1(psel1),
3802 .sel2(psel2),
3803 .sel3(psel3),
3804 .in0(din0[63:0]),
3805 .in1(din1[63:0]),
3806 .in2(din2[63:0]),
3807 .in3(din3[63:0]),
3808.dout(dout[63:0]),
3809 .muxtst(muxtst)
3810);
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824endmodule
3825
3826
3827
3828
3829
3830
3831// any PARAMS parms go into naming of macro
3832
3833module exu_edp_dp_msff_macro__stack_72c__width_67 (
3834 din,
3835 clk,
3836 en,
3837 se,
3838 scan_in,
3839 siclk,
3840 soclk,
3841 pce_ov,
3842 stop,
3843 dout,
3844 scan_out);
3845wire l1clk;
3846wire siclk_out;
3847wire soclk_out;
3848wire [65:0] so;
3849
3850 input [66:0] din;
3851
3852
3853 input clk;
3854 input en;
3855 input se;
3856 input scan_in;
3857 input siclk;
3858 input soclk;
3859 input pce_ov;
3860 input stop;
3861
3862
3863
3864 output [66:0] dout;
3865
3866
3867 output scan_out;
3868
3869
3870
3871
3872cl_dp1_l1hdr_8x c0_0 (
3873.l2clk(clk),
3874.pce(en),
3875.aclk(siclk),
3876.bclk(soclk),
3877.l1clk(l1clk),
3878 .se(se),
3879 .pce_ov(pce_ov),
3880 .stop(stop),
3881 .siclk_out(siclk_out),
3882 .soclk_out(soclk_out)
3883);
3884dff #(67) d0_0 (
3885.l1clk(l1clk),
3886.siclk(siclk_out),
3887.soclk(soclk_out),
3888.d(din[66:0]),
3889.si({scan_in,so[65:0]}),
3890.so({so[65:0],scan_out}),
3891.q(dout[66:0])
3892);
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913endmodule
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927// any PARAMS parms go into naming of macro
3928
3929module exu_edp_dp_msff_macro__minbuff_1__stack_72c__width_64 (
3930 din,
3931 clk,
3932 en,
3933 se,
3934 scan_in,
3935 siclk,
3936 soclk,
3937 pce_ov,
3938 stop,
3939 dout,
3940 scan_out);
3941wire l1clk;
3942wire siclk_out;
3943wire soclk_out;
3944wire [62:0] so;
3945
3946 input [63:0] din;
3947
3948
3949 input clk;
3950 input en;
3951 input se;
3952 input scan_in;
3953 input siclk;
3954 input soclk;
3955 input pce_ov;
3956 input stop;
3957
3958
3959
3960 output [63:0] dout;
3961
3962
3963 output scan_out;
3964
3965
3966
3967
3968cl_dp1_l1hdr_8x c0_0 (
3969.l2clk(clk),
3970.pce(en),
3971.aclk(siclk),
3972.bclk(soclk),
3973.l1clk(l1clk),
3974 .se(se),
3975 .pce_ov(pce_ov),
3976 .stop(stop),
3977 .siclk_out(siclk_out),
3978 .soclk_out(soclk_out)
3979);
3980dff #(64) d0_0 (
3981.l1clk(l1clk),
3982.siclk(siclk_out),
3983.soclk(soclk_out),
3984.d(din[63:0]),
3985.si({scan_in,so[62:0]}),
3986.so({so[62:0],scan_out}),
3987.q(dout[63:0])
3988);
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009endmodule
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023// any PARAMS parms go into naming of macro
4024
4025module exu_edp_dp_msff_macro__mux_aope__ports_3__stack_72c__width_64 (
4026 din0,
4027 din1,
4028 din2,
4029 sel0,
4030 sel1,
4031 clk,
4032 en,
4033 se,
4034 scan_in,
4035 siclk,
4036 soclk,
4037 pce_ov,
4038 stop,
4039 dout,
4040 scan_out);
4041wire psel0;
4042wire psel1;
4043wire psel2;
4044wire [63:0] muxout;
4045wire l1clk;
4046wire siclk_out;
4047wire soclk_out;
4048wire [62:0] so;
4049
4050 input [63:0] din0;
4051 input [63:0] din1;
4052 input [63:0] din2;
4053 input sel0;
4054 input sel1;
4055
4056
4057 input clk;
4058 input en;
4059 input se;
4060 input scan_in;
4061 input siclk;
4062 input soclk;
4063 input pce_ov;
4064 input stop;
4065
4066
4067
4068 output [63:0] dout;
4069
4070
4071 output scan_out;
4072
4073
4074
4075
4076cl_dp1_penc3_8x c1_0 (
4077 .test(1'b1),
4078 .sel0(sel0),
4079 .sel1(sel1),
4080 .psel0(psel0),
4081 .psel1(psel1),
4082 .psel2(psel2)
4083);
4084
4085mux3s #(64) d1_0 (
4086 .sel0(psel0),
4087 .sel1(psel1),
4088 .sel2(psel2),
4089 .in0(din0[63:0]),
4090 .in1(din1[63:0]),
4091 .in2(din2[63:0]),
4092.dout(muxout[63:0])
4093);
4094cl_dp1_l1hdr_8x c0_0 (
4095.l2clk(clk),
4096.pce(en),
4097.aclk(siclk),
4098.bclk(soclk),
4099.l1clk(l1clk),
4100 .se(se),
4101 .pce_ov(pce_ov),
4102 .stop(stop),
4103 .siclk_out(siclk_out),
4104 .soclk_out(soclk_out)
4105);
4106dff #(64) d0_0 (
4107.l1clk(l1clk),
4108.siclk(siclk_out),
4109.soclk(soclk_out),
4110.d(muxout[63:0]),
4111.si({scan_in,so[62:0]}),
4112.so({so[62:0],scan_out}),
4113.q(dout[63:0])
4114);
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135endmodule
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149// any PARAMS parms go into naming of macro
4150
4151module exu_edp_dp_msff_macro__stack_72c__width_66 (
4152 din,
4153 clk,
4154 en,
4155 se,
4156 scan_in,
4157 siclk,
4158 soclk,
4159 pce_ov,
4160 stop,
4161 dout,
4162 scan_out);
4163wire l1clk;
4164wire siclk_out;
4165wire soclk_out;
4166wire [64:0] so;
4167
4168 input [65:0] din;
4169
4170
4171 input clk;
4172 input en;
4173 input se;
4174 input scan_in;
4175 input siclk;
4176 input soclk;
4177 input pce_ov;
4178 input stop;
4179
4180
4181
4182 output [65:0] dout;
4183
4184
4185 output scan_out;
4186
4187
4188
4189
4190cl_dp1_l1hdr_8x c0_0 (
4191.l2clk(clk),
4192.pce(en),
4193.aclk(siclk),
4194.bclk(soclk),
4195.l1clk(l1clk),
4196 .se(se),
4197 .pce_ov(pce_ov),
4198 .stop(stop),
4199 .siclk_out(siclk_out),
4200 .soclk_out(soclk_out)
4201);
4202dff #(66) d0_0 (
4203.l1clk(l1clk),
4204.siclk(siclk_out),
4205.soclk(soclk_out),
4206.d(din[65:0]),
4207.si({scan_in,so[64:0]}),
4208.so({so[64:0],scan_out}),
4209.q(dout[65:0])
4210);
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231endmodule
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241//
4242// buff macro
4243//
4244//
4245
4246
4247
4248
4249
4250module exu_edp_dp_buff_macro__dbuff_24x__stack_72c__width_65 (
4251 din,
4252 dout);
4253 input [64:0] din;
4254 output [64:0] dout;
4255
4256
4257
4258
4259
4260
4261buff #(65) d0_0 (
4262.in(din[64:0]),
4263.out(dout[64:0])
4264);
4265
4266
4267
4268
4269
4270
4271
4272
4273endmodule
4274
4275
4276
4277
4278
4279//
4280// buff macro
4281//
4282//
4283
4284
4285
4286
4287
4288module exu_edp_dp_buff_macro__stack_72c__width_8 (
4289 din,
4290 dout);
4291 input [7:0] din;
4292 output [7:0] dout;
4293
4294
4295
4296
4297
4298
4299buff #(8) d0_0 (
4300.in(din[7:0]),
4301.out(dout[7:0])
4302);
4303
4304
4305
4306
4307
4308
4309
4310
4311endmodule
4312
4313
4314
4315
4316
4317//
4318// invert macro
4319//
4320//
4321
4322
4323
4324
4325
4326module exu_edp_dp_inv_macro__stack_72c__width_64 (
4327 din,
4328 dout);
4329 input [63:0] din;
4330 output [63:0] dout;
4331
4332
4333
4334
4335
4336
4337inv #(64) d0_0 (
4338.in(din[63:0]),
4339.out(dout[63:0])
4340);
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350endmodule
4351
4352
4353
4354
4355
4356//
4357// nand macro for ports = 2,3,4
4358//
4359//
4360
4361
4362
4363
4364
4365module exu_edp_dp_nand_macro__ports_3__stack_72c__width_64 (
4366 din0,
4367 din1,
4368 din2,
4369 dout);
4370 input [63:0] din0;
4371 input [63:0] din1;
4372 input [63:0] din2;
4373 output [63:0] dout;
4374
4375
4376
4377
4378
4379
4380nand3 #(64) d0_0 (
4381.in0(din0[63:0]),
4382.in1(din1[63:0]),
4383.in2(din2[63:0]),
4384.out(dout[63:0])
4385);
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395endmodule
4396
4397
4398
4399
4400
4401//
4402// nand macro for ports = 2,3,4
4403//
4404//
4405
4406
4407
4408
4409
4410module exu_edp_dp_nand_macro__ports_4__stack_72c__width_64 (
4411 din0,
4412 din1,
4413 din2,
4414 din3,
4415 dout);
4416 input [63:0] din0;
4417 input [63:0] din1;
4418 input [63:0] din2;
4419 input [63:0] din3;
4420 output [63:0] dout;
4421
4422
4423
4424
4425
4426
4427nand4 #(64) d0_0 (
4428.in0(din0[63:0]),
4429.in1(din1[63:0]),
4430.in2(din2[63:0]),
4431.in3(din3[63:0]),
4432.out(dout[63:0])
4433);
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443endmodule
4444
4445
4446
4447
4448
4449//
4450// buff macro
4451//
4452//
4453
4454
4455
4456
4457
4458module exu_edp_dp_buff_macro__stack_72c__width_2 (
4459 din,
4460 dout);
4461 input [1:0] din;
4462 output [1:0] dout;
4463
4464
4465
4466
4467
4468
4469buff #(2) d0_0 (
4470.in(din[1:0]),
4471.out(dout[1:0])
4472);
4473
4474
4475
4476
4477
4478
4479
4480
4481endmodule
4482
4483
4484
4485
4486
4487//
4488// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
4489//
4490//
4491
4492
4493
4494
4495
4496module exu_edp_dp_zero_macro__width_32 (
4497 din,
4498 dout);
4499 input [31:0] din;
4500 output dout;
4501
4502
4503
4504
4505
4506
4507zero #(32) m0_0 (
4508.in(din[31:0]),
4509.out(dout)
4510);
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521endmodule
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531// any PARAMS parms go into naming of macro
4532
4533module exu_edp_dp_msff_macro__left_32__stack_72c__width_28 (
4534 din,
4535 clk,
4536 en,
4537 se,
4538 scan_in,
4539 siclk,
4540 soclk,
4541 pce_ov,
4542 stop,
4543 dout,
4544 scan_out);
4545wire l1clk;
4546wire siclk_out;
4547wire soclk_out;
4548wire [26:0] so;
4549
4550 input [27:0] din;
4551
4552
4553 input clk;
4554 input en;
4555 input se;
4556 input scan_in;
4557 input siclk;
4558 input soclk;
4559 input pce_ov;
4560 input stop;
4561
4562
4563
4564 output [27:0] dout;
4565
4566
4567 output scan_out;
4568
4569
4570
4571
4572cl_dp1_l1hdr_8x c0_0 (
4573.l2clk(clk),
4574.pce(en),
4575.aclk(siclk),
4576.bclk(soclk),
4577.l1clk(l1clk),
4578 .se(se),
4579 .pce_ov(pce_ov),
4580 .stop(stop),
4581 .siclk_out(siclk_out),
4582 .soclk_out(soclk_out)
4583);
4584dff #(28) d0_0 (
4585.l1clk(l1clk),
4586.siclk(siclk_out),
4587.soclk(soclk_out),
4588.d(din[27:0]),
4589.si({scan_in,so[26:0]}),
4590.so({so[26:0],scan_out}),
4591.q(dout[27:0])
4592);
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613endmodule
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623//
4624// invert macro
4625//
4626//
4627
4628
4629
4630
4631
4632module exu_edp_dp_inv_macro__stack_72c__width_2 (
4633 din,
4634 dout);
4635 input [1:0] din;
4636 output [1:0] dout;
4637
4638
4639
4640
4641
4642
4643inv #(2) d0_0 (
4644.in(din[1:0]),
4645.out(dout[1:0])
4646);
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656endmodule
4657
4658
4659
4660
4661
4662//
4663// buff macro
4664//
4665//
4666
4667
4668
4669
4670
4671module exu_edp_dp_buff_macro__width_5 (
4672 din,
4673 dout);
4674 input [4:0] din;
4675 output [4:0] dout;
4676
4677
4678
4679
4680
4681
4682buff #(5) d0_0 (
4683.in(din[4:0]),
4684.out(dout[4:0])
4685);
4686
4687
4688
4689
4690
4691
4692
4693
4694endmodule
4695
4696
4697
4698
4699
4700// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4701// also for pass-gate with decoder
4702
4703
4704
4705
4706
4707// any PARAMS parms go into naming of macro
4708
4709module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_7 (
4710 din0,
4711 sel0,
4712 din1,
4713 sel1,
4714 din2,
4715 sel2,
4716 dout);
4717 input [6:0] din0;
4718 input sel0;
4719 input [6:0] din1;
4720 input sel1;
4721 input [6:0] din2;
4722 input sel2;
4723 output [6:0] dout;
4724
4725
4726
4727
4728
4729mux3s #(7) d0_0 (
4730 .sel0(sel0),
4731 .sel1(sel1),
4732 .sel2(sel2),
4733 .in0(din0[6:0]),
4734 .in1(din1[6:0]),
4735 .in2(din2[6:0]),
4736.dout(dout[6:0])
4737);
4738
4739
4740
4741
4742
4743
4744
4745
4746
4747
4748
4749
4750
4751endmodule
4752
4753
4754// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4755// also for pass-gate with decoder
4756
4757
4758
4759
4760
4761// any PARAMS parms go into naming of macro
4762
4763module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_32 (
4764 din0,
4765 sel0,
4766 din1,
4767 sel1,
4768 din2,
4769 sel2,
4770 dout);
4771 input [31:0] din0;
4772 input sel0;
4773 input [31:0] din1;
4774 input sel1;
4775 input [31:0] din2;
4776 input sel2;
4777 output [31:0] dout;
4778
4779
4780
4781
4782
4783mux3s #(32) d0_0 (
4784 .sel0(sel0),
4785 .sel1(sel1),
4786 .sel2(sel2),
4787 .in0(din0[31:0]),
4788 .in1(din1[31:0]),
4789 .in2(din2[31:0]),
4790.dout(dout[31:0])
4791);
4792
4793
4794
4795
4796
4797
4798
4799
4800
4801
4802
4803
4804
4805endmodule
4806
4807
4808// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4809// also for pass-gate with decoder
4810
4811
4812
4813
4814
4815// any PARAMS parms go into naming of macro
4816
4817module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_32 (
4818 din0,
4819 sel0,
4820 din1,
4821 sel1,
4822 dout);
4823 input [31:0] din0;
4824 input sel0;
4825 input [31:0] din1;
4826 input sel1;
4827 output [31:0] dout;
4828
4829
4830
4831
4832
4833mux2s #(32) d0_0 (
4834 .sel0(sel0),
4835 .sel1(sel1),
4836 .in0(din0[31:0]),
4837 .in1(din1[31:0]),
4838.dout(dout[31:0])
4839);
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853endmodule
4854
4855
4856// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4857// also for pass-gate with decoder
4858
4859
4860
4861
4862
4863// any PARAMS parms go into naming of macro
4864
4865module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_15 (
4866 din0,
4867 sel0,
4868 din1,
4869 sel1,
4870 din2,
4871 sel2,
4872 dout);
4873 input [14:0] din0;
4874 input sel0;
4875 input [14:0] din1;
4876 input sel1;
4877 input [14:0] din2;
4878 input sel2;
4879 output [14:0] dout;
4880
4881
4882
4883
4884
4885mux3s #(15) d0_0 (
4886 .sel0(sel0),
4887 .sel1(sel1),
4888 .sel2(sel2),
4889 .in0(din0[14:0]),
4890 .in1(din1[14:0]),
4891 .in2(din2[14:0]),
4892.dout(dout[14:0])
4893);
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907endmodule
4908
4909
4910// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4911// also for pass-gate with decoder
4912
4913
4914
4915
4916
4917// any PARAMS parms go into naming of macro
4918
4919module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_16 (
4920 din0,
4921 sel0,
4922 din1,
4923 sel1,
4924 dout);
4925 input [15:0] din0;
4926 input sel0;
4927 input [15:0] din1;
4928 input sel1;
4929 output [15:0] dout;
4930
4931
4932
4933
4934
4935mux2s #(16) d0_0 (
4936 .sel0(sel0),
4937 .sel1(sel1),
4938 .in0(din0[15:0]),
4939 .in1(din1[15:0]),
4940.dout(dout[15:0])
4941);
4942
4943
4944
4945
4946
4947
4948
4949
4950
4951
4952
4953
4954
4955endmodule
4956
4957
4958// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4959// also for pass-gate with decoder
4960
4961
4962
4963
4964
4965// any PARAMS parms go into naming of macro
4966
4967module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_8 (
4968 din0,
4969 sel0,
4970 din1,
4971 sel1,
4972 dout);
4973 input [7:0] din0;
4974 input sel0;
4975 input [7:0] din1;
4976 input sel1;
4977 output [7:0] dout;
4978
4979
4980
4981
4982
4983mux2s #(8) d0_0 (
4984 .sel0(sel0),
4985 .sel1(sel1),
4986 .in0(din0[7:0]),
4987 .in1(din1[7:0]),
4988.dout(dout[7:0])
4989);
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000
5001
5002
5003endmodule
5004
5005
5006// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5007// also for pass-gate with decoder
5008
5009
5010
5011
5012
5013// any PARAMS parms go into naming of macro
5014
5015module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_23 (
5016 din0,
5017 sel0,
5018 din1,
5019 sel1,
5020 din2,
5021 sel2,
5022 dout);
5023 input [22:0] din0;
5024 input sel0;
5025 input [22:0] din1;
5026 input sel1;
5027 input [22:0] din2;
5028 input sel2;
5029 output [22:0] dout;
5030
5031
5032
5033
5034
5035mux3s #(23) d0_0 (
5036 .sel0(sel0),
5037 .sel1(sel1),
5038 .sel2(sel2),
5039 .in0(din0[22:0]),
5040 .in1(din1[22:0]),
5041 .in2(din2[22:0]),
5042.dout(dout[22:0])
5043);
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057endmodule
5058
5059
5060// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5061// also for pass-gate with decoder
5062
5063
5064
5065
5066
5067// any PARAMS parms go into naming of macro
5068
5069module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_31 (
5070 din0,
5071 sel0,
5072 din1,
5073 sel1,
5074 din2,
5075 sel2,
5076 dout);
5077 input [30:0] din0;
5078 input sel0;
5079 input [30:0] din1;
5080 input sel1;
5081 input [30:0] din2;
5082 input sel2;
5083 output [30:0] dout;
5084
5085
5086
5087
5088
5089mux3s #(31) d0_0 (
5090 .sel0(sel0),
5091 .sel1(sel1),
5092 .sel2(sel2),
5093 .in0(din0[30:0]),
5094 .in1(din1[30:0]),
5095 .in2(din2[30:0]),
5096.dout(dout[30:0])
5097);
5098
5099
5100
5101
5102
5103
5104
5105
5106
5107
5108
5109
5110
5111endmodule
5112
5113
5114// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5115// also for pass-gate with decoder
5116
5117
5118
5119
5120
5121// any PARAMS parms go into naming of macro
5122
5123module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_3__width_16 (
5124 din0,
5125 sel0,
5126 din1,
5127 sel1,
5128 din2,
5129 sel2,
5130 dout);
5131 input [15:0] din0;
5132 input sel0;
5133 input [15:0] din1;
5134 input sel1;
5135 input [15:0] din2;
5136 input sel2;
5137 output [15:0] dout;
5138
5139
5140
5141
5142
5143mux3s #(16) d0_0 (
5144 .sel0(sel0),
5145 .sel1(sel1),
5146 .sel2(sel2),
5147 .in0(din0[15:0]),
5148 .in1(din1[15:0]),
5149 .in2(din2[15:0]),
5150.dout(dout[15:0])
5151);
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165endmodule
5166
5167
5168//
5169// buff macro
5170//
5171//
5172
5173
5174
5175
5176
5177module exu_edp_dp_buff_macro__width_3 (
5178 din,
5179 dout);
5180 input [2:0] din;
5181 output [2:0] dout;
5182
5183
5184
5185
5186
5187
5188buff #(3) d0_0 (
5189.in(din[2:0]),
5190.out(dout[2:0])
5191);
5192
5193
5194
5195
5196
5197
5198
5199
5200endmodule
5201
5202
5203
5204
5205
5206//
5207// invert macro
5208//
5209//
5210
5211
5212
5213
5214
5215module exu_edp_dp_inv_macro__stack_72c__width_1 (
5216 din,
5217 dout);
5218 input [0:0] din;
5219 output [0:0] dout;
5220
5221
5222
5223
5224
5225
5226inv #(1) d0_0 (
5227.in(din[0:0]),
5228.out(dout[0:0])
5229);
5230
5231
5232
5233
5234
5235
5236
5237
5238
5239endmodule
5240
5241
5242
5243
5244
5245// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5246// also for pass-gate with decoder
5247
5248
5249
5250
5251
5252// any PARAMS parms go into naming of macro
5253
5254module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_39 (
5255 din0,
5256 sel0,
5257 din1,
5258 sel1,
5259 dout);
5260 input [38:0] din0;
5261 input sel0;
5262 input [38:0] din1;
5263 input sel1;
5264 output [38:0] dout;
5265
5266
5267
5268
5269
5270mux2s #(39) d0_0 (
5271 .sel0(sel0),
5272 .sel1(sel1),
5273 .in0(din0[38:0]),
5274 .in1(din1[38:0]),
5275.dout(dout[38:0])
5276);
5277
5278
5279
5280
5281
5282
5283
5284
5285
5286
5287
5288
5289
5290endmodule
5291
5292
5293// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5294// also for pass-gate with decoder
5295
5296
5297
5298
5299
5300// any PARAMS parms go into naming of macro
5301
5302module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_31 (
5303 din0,
5304 sel0,
5305 din1,
5306 sel1,
5307 dout);
5308 input [30:0] din0;
5309 input sel0;
5310 input [30:0] din1;
5311 input sel1;
5312 output [30:0] dout;
5313
5314
5315
5316
5317
5318mux2s #(31) d0_0 (
5319 .sel0(sel0),
5320 .sel1(sel1),
5321 .in0(din0[30:0]),
5322 .in1(din1[30:0]),
5323.dout(dout[30:0])
5324);
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338endmodule
5339
5340
5341// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5342// also for pass-gate with decoder
5343
5344
5345
5346
5347
5348// any PARAMS parms go into naming of macro
5349
5350module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_24 (
5351 din0,
5352 sel0,
5353 din1,
5354 sel1,
5355 dout);
5356 input [23:0] din0;
5357 input sel0;
5358 input [23:0] din1;
5359 input sel1;
5360 output [23:0] dout;
5361
5362
5363
5364
5365
5366mux2s #(24) d0_0 (
5367 .sel0(sel0),
5368 .sel1(sel1),
5369 .in0(din0[23:0]),
5370 .in1(din1[23:0]),
5371.dout(dout[23:0])
5372);
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386endmodule
5387
5388
5389// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5390// also for pass-gate with decoder
5391
5392
5393
5394
5395
5396// any PARAMS parms go into naming of macro
5397
5398module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_23 (
5399 din0,
5400 sel0,
5401 din1,
5402 sel1,
5403 dout);
5404 input [22:0] din0;
5405 input sel0;
5406 input [22:0] din1;
5407 input sel1;
5408 output [22:0] dout;
5409
5410
5411
5412
5413
5414mux2s #(23) d0_0 (
5415 .sel0(sel0),
5416 .sel1(sel1),
5417 .in0(din0[22:0]),
5418 .in1(din1[22:0]),
5419.dout(dout[22:0])
5420);
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433
5434endmodule
5435
5436
5437// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5438// also for pass-gate with decoder
5439
5440
5441
5442
5443
5444// any PARAMS parms go into naming of macro
5445
5446module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_15 (
5447 din0,
5448 sel0,
5449 din1,
5450 sel1,
5451 dout);
5452 input [14:0] din0;
5453 input sel0;
5454 input [14:0] din1;
5455 input sel1;
5456 output [14:0] dout;
5457
5458
5459
5460
5461
5462mux2s #(15) d0_0 (
5463 .sel0(sel0),
5464 .sel1(sel1),
5465 .in0(din0[14:0]),
5466 .in1(din1[14:0]),
5467.dout(dout[14:0])
5468);
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482endmodule
5483
5484
5485// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5486// also for pass-gate with decoder
5487
5488
5489
5490
5491
5492// any PARAMS parms go into naming of macro
5493
5494module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_48 (
5495 din0,
5496 sel0,
5497 din1,
5498 sel1,
5499 dout);
5500 input [47:0] din0;
5501 input sel0;
5502 input [47:0] din1;
5503 input sel1;
5504 output [47:0] dout;
5505
5506
5507
5508
5509
5510mux2s #(48) d0_0 (
5511 .sel0(sel0),
5512 .sel1(sel1),
5513 .in0(din0[47:0]),
5514 .in1(din1[47:0]),
5515.dout(dout[47:0])
5516);
5517
5518
5519
5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530endmodule
5531
5532
5533//
5534// and macro for ports = 2,3,4
5535//
5536//
5537
5538
5539
5540
5541
5542module exu_edp_dp_and_macro__dinv_16x__dnand_6x__ports_2__width_1 (
5543 din0,
5544 din1,
5545 dout);
5546 input [0:0] din0;
5547 input [0:0] din1;
5548 output [0:0] dout;
5549
5550
5551
5552
5553
5554
5555and2 #(1) d0_0 (
5556.in0(din0[0:0]),
5557.in1(din1[0:0]),
5558.out(dout[0:0])
5559);
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569endmodule
5570
5571
5572
5573
5574
5575//
5576// buff macro
5577//
5578//
5579
5580
5581
5582
5583
5584module exu_edp_dp_buff_macro__dbuff_48x__width_1 (
5585 din,
5586 dout);
5587 input [0:0] din;
5588 output [0:0] dout;
5589
5590
5591
5592
5593
5594
5595buff #(1) d0_0 (
5596.in(din[0:0]),
5597.out(dout[0:0])
5598);
5599
5600
5601
5602
5603
5604
5605
5606
5607endmodule
5608
5609
5610
5611
5612
5613// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5614// also for pass-gate with decoder
5615
5616
5617
5618
5619
5620// any PARAMS parms go into naming of macro
5621
5622module exu_edp_dp_mux_macro__mux_aodec__ports_8__stack_72c__width_71 (
5623 din0,
5624 din1,
5625 din2,
5626 din3,
5627 din4,
5628 din5,
5629 din6,
5630 din7,
5631 sel,
5632 dout);
5633wire psel0;
5634wire psel1;
5635wire psel2;
5636wire psel3;
5637wire psel4;
5638wire psel5;
5639wire psel6;
5640wire psel7;
5641
5642 input [70:0] din0;
5643 input [70:0] din1;
5644 input [70:0] din2;
5645 input [70:0] din3;
5646 input [70:0] din4;
5647 input [70:0] din5;
5648 input [70:0] din6;
5649 input [70:0] din7;
5650 input [2:0] sel;
5651 output [70:0] dout;
5652
5653
5654
5655
5656
5657cl_dp1_pdec8_8x c0_0 (
5658 .test(1'b1),
5659 .sel0(sel[0]),
5660 .sel1(sel[1]),
5661 .sel2(sel[2]),
5662 .psel0(psel0),
5663 .psel1(psel1),
5664 .psel2(psel2),
5665 .psel3(psel3),
5666 .psel4(psel4),
5667 .psel5(psel5),
5668 .psel6(psel6),
5669 .psel7(psel7)
5670);
5671
5672mux8s #(71) d0_0 (
5673 .sel0(psel0),
5674 .sel1(psel1),
5675 .sel2(psel2),
5676 .sel3(psel3),
5677 .sel4(psel4),
5678 .sel5(psel5),
5679 .sel6(psel6),
5680 .sel7(psel7),
5681 .in0(din0[70:0]),
5682 .in1(din1[70:0]),
5683 .in2(din2[70:0]),
5684 .in3(din3[70:0]),
5685 .in4(din4[70:0]),
5686 .in5(din5[70:0]),
5687 .in6(din6[70:0]),
5688 .in7(din7[70:0]),
5689.dout(dout[70:0])
5690);
5691
5692
5693
5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704endmodule
5705
5706
5707//
5708// buff macro
5709//
5710//
5711
5712
5713
5714
5715
5716module exu_edp_dp_buff_macro__stack_72c__width_71 (
5717 din,
5718 dout);
5719 input [70:0] din;
5720 output [70:0] dout;
5721
5722
5723
5724
5725
5726
5727buff #(71) d0_0 (
5728.in(din[70:0]),
5729.out(dout[70:0])
5730);
5731
5732
5733
5734
5735
5736
5737
5738
5739endmodule
5740
5741
5742
5743
5744
5745//
5746// invert macro
5747//
5748//
5749
5750
5751
5752
5753
5754module exu_edp_dp_inv_macro__dinv_6x__width_3 (
5755 din,
5756 dout);
5757 input [2:0] din;
5758 output [2:0] dout;
5759
5760
5761
5762
5763
5764
5765inv #(3) d0_0 (
5766.in(din[2:0]),
5767.out(dout[2:0])
5768);
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778endmodule
5779
5780
5781
5782
5783
5784// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5785// also for pass-gate with decoder
5786
5787
5788
5789
5790
5791// any PARAMS parms go into naming of macro
5792
5793module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_3 (
5794 din0,
5795 sel0,
5796 din1,
5797 sel1,
5798 dout);
5799 input [2:0] din0;
5800 input sel0;
5801 input [2:0] din1;
5802 input sel1;
5803 output [2:0] dout;
5804
5805
5806
5807
5808
5809mux2s #(3) d0_0 (
5810 .sel0(sel0),
5811 .sel1(sel1),
5812 .in0(din0[2:0]),
5813 .in1(din1[2:0]),
5814.dout(dout[2:0])
5815);
5816
5817
5818
5819
5820
5821
5822
5823
5824
5825
5826
5827
5828
5829endmodule
5830
5831
5832// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5833// also for pass-gate with decoder
5834
5835
5836
5837
5838
5839// any PARAMS parms go into naming of macro
5840
5841module exu_edp_dp_mux_macro__mux_aodec__ports_8__stack_72c__width_64 (
5842 din0,
5843 din1,
5844 din2,
5845 din3,
5846 din4,
5847 din5,
5848 din6,
5849 din7,
5850 sel,
5851 dout);
5852wire psel0;
5853wire psel1;
5854wire psel2;
5855wire psel3;
5856wire psel4;
5857wire psel5;
5858wire psel6;
5859wire psel7;
5860
5861 input [63:0] din0;
5862 input [63:0] din1;
5863 input [63:0] din2;
5864 input [63:0] din3;
5865 input [63:0] din4;
5866 input [63:0] din5;
5867 input [63:0] din6;
5868 input [63:0] din7;
5869 input [2:0] sel;
5870 output [63:0] dout;
5871
5872
5873
5874
5875
5876cl_dp1_pdec8_8x c0_0 (
5877 .test(1'b1),
5878 .sel0(sel[0]),
5879 .sel1(sel[1]),
5880 .sel2(sel[2]),
5881 .psel0(psel0),
5882 .psel1(psel1),
5883 .psel2(psel2),
5884 .psel3(psel3),
5885 .psel4(psel4),
5886 .psel5(psel5),
5887 .psel6(psel6),
5888 .psel7(psel7)
5889);
5890
5891mux8s #(64) d0_0 (
5892 .sel0(psel0),
5893 .sel1(psel1),
5894 .sel2(psel2),
5895 .sel3(psel3),
5896 .sel4(psel4),
5897 .sel5(psel5),
5898 .sel6(psel6),
5899 .sel7(psel7),
5900 .in0(din0[63:0]),
5901 .in1(din1[63:0]),
5902 .in2(din2[63:0]),
5903 .in3(din3[63:0]),
5904 .in4(din4[63:0]),
5905 .in5(din5[63:0]),
5906 .in6(din6[63:0]),
5907 .in7(din7[63:0]),
5908.dout(dout[63:0])
5909);
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919
5920
5921
5922
5923endmodule
5924
5925
5926//
5927// cla macro
5928//
5929//
5930
5931
5932
5933
5934
5935module exu_edp_dp_cla_macro__width_64 (
5936 cin,
5937 din0,
5938 din1,
5939 dout,
5940 cout);
5941 input cin;
5942 input [63:0] din0;
5943 input [63:0] din1;
5944 output [63:0] dout;
5945 output cout;
5946
5947
5948
5949
5950
5951
5952
5953cla #(64) m0_0 (
5954.cin(cin),
5955.in0(din0[63:0]),
5956.in1(din1[63:0]),
5957.out(dout[63:0]),
5958.cout(cout)
5959);
5960
5961
5962
5963
5964
5965
5966
5967
5968
5969
5970
5971
5972endmodule
5973
5974
5975
5976
5977
5978//
5979// and macro for ports = 2,3,4
5980//
5981//
5982
5983
5984
5985
5986
5987module exu_edp_dp_and_macro__ports_2__stack_72c__width_3 (
5988 din0,
5989 din1,
5990 dout);
5991 input [2:0] din0;
5992 input [2:0] din1;
5993 output [2:0] dout;
5994
5995
5996
5997
5998
5999
6000and2 #(3) d0_0 (
6001.in0(din0[2:0]),
6002.in1(din1[2:0]),
6003.out(dout[2:0])
6004);
6005
6006
6007
6008
6009
6010
6011
6012
6013
6014endmodule
6015
6016
6017
6018
6019
6020//
6021// xor macro for ports = 2,3
6022//
6023//
6024
6025
6026
6027
6028
6029module exu_edp_dp_xor_macro__ports_2__stack_72c__width_3 (
6030 din0,
6031 din1,
6032 dout);
6033 input [2:0] din0;
6034 input [2:0] din1;
6035 output [2:0] dout;
6036
6037
6038
6039
6040
6041xor2 #(3) d0_0 (
6042.in0(din0[2:0]),
6043.in1(din1[2:0]),
6044.out(dout[2:0])
6045);
6046
6047
6048
6049
6050
6051
6052
6053
6054endmodule
6055
6056
6057
6058
6059
6060//
6061// increment macro
6062//
6063//
6064
6065
6066
6067
6068
6069module exu_edp_dp_increment_macro__width_4 (
6070 din,
6071 cin,
6072 dout,
6073 cout);
6074 input [3:0] din;
6075 input cin;
6076 output [3:0] dout;
6077 output cout;
6078
6079
6080
6081
6082
6083
6084incr #(4) m0_0 (
6085.cin(cin),
6086.in(din[3:0]),
6087.out(dout[3:0]),
6088.cout(cout)
6089);
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101endmodule
6102
6103
6104
6105
6106
6107//
6108// buff macro
6109//
6110//
6111
6112
6113
6114
6115
6116module exu_edp_dp_buff_macro__stack_64c__width_64 (
6117 din,
6118 dout);
6119 input [63:0] din;
6120 output [63:0] dout;
6121
6122
6123
6124
6125
6126
6127buff #(64) d0_0 (
6128.in(din[63:0]),
6129.out(dout[63:0])
6130);
6131
6132
6133
6134
6135
6136
6137
6138
6139endmodule
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149// any PARAMS parms go into naming of macro
6150
6151module exu_edp_dp_msff_macro__stack_72c__width_65 (
6152 din,
6153 clk,
6154 en,
6155 se,
6156 scan_in,
6157 siclk,
6158 soclk,
6159 pce_ov,
6160 stop,
6161 dout,
6162 scan_out);
6163wire l1clk;
6164wire siclk_out;
6165wire soclk_out;
6166wire [63:0] so;
6167
6168 input [64:0] din;
6169
6170
6171 input clk;
6172 input en;
6173 input se;
6174 input scan_in;
6175 input siclk;
6176 input soclk;
6177 input pce_ov;
6178 input stop;
6179
6180
6181
6182 output [64:0] dout;
6183
6184
6185 output scan_out;
6186
6187
6188
6189
6190cl_dp1_l1hdr_8x c0_0 (
6191.l2clk(clk),
6192.pce(en),
6193.aclk(siclk),
6194.bclk(soclk),
6195.l1clk(l1clk),
6196 .se(se),
6197 .pce_ov(pce_ov),
6198 .stop(stop),
6199 .siclk_out(siclk_out),
6200 .soclk_out(soclk_out)
6201);
6202dff #(65) d0_0 (
6203.l1clk(l1clk),
6204.siclk(siclk_out),
6205.soclk(soclk_out),
6206.d(din[64:0]),
6207.si({scan_in,so[63:0]}),
6208.so({so[63:0],scan_out}),
6209.q(dout[64:0])
6210);
6211
6212
6213
6214
6215
6216
6217
6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231endmodule
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6242// also for pass-gate with decoder
6243
6244
6245
6246
6247
6248// any PARAMS parms go into naming of macro
6249
6250module exu_edp_dp_mux_macro__mux_aope__ports_3__stack_72c__width_65 (
6251 din0,
6252 din1,
6253 din2,
6254 sel0,
6255 sel1,
6256 dout);
6257wire psel0;
6258wire psel1;
6259wire psel2;
6260
6261 input [64:0] din0;
6262 input [64:0] din1;
6263 input [64:0] din2;
6264 input sel0;
6265 input sel1;
6266 output [64:0] dout;
6267
6268
6269
6270
6271
6272cl_dp1_penc3_8x c0_0 (
6273 .test(1'b1),
6274 .sel0(sel0),
6275 .sel1(sel1),
6276 .psel0(psel0),
6277 .psel1(psel1),
6278 .psel2(psel2)
6279);
6280
6281mux3s #(65) d0_0 (
6282 .sel0(psel0),
6283 .sel1(psel1),
6284 .sel2(psel2),
6285 .in0(din0[64:0]),
6286 .in1(din1[64:0]),
6287 .in2(din2[64:0]),
6288.dout(dout[64:0])
6289);
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303endmodule
6304
6305
6306
6307
6308
6309
6310// any PARAMS parms go into naming of macro
6311
6312module exu_edp_dp_msff_macro__mux_aope__ports_7__stack_72c__width_65 (
6313 din0,
6314 din1,
6315 din2,
6316 din3,
6317 din4,
6318 din5,
6319 din6,
6320 sel0,
6321 sel1,
6322 sel2,
6323 sel3,
6324 sel4,
6325 sel5,
6326 clk,
6327 en,
6328 se,
6329 scan_in,
6330 siclk,
6331 soclk,
6332 pce_ov,
6333 stop,
6334 dout,
6335 scan_out);
6336wire psel0;
6337wire psel1;
6338wire psel2;
6339wire psel3;
6340wire psel4;
6341wire psel5;
6342wire psel6;
6343wire [64:0] muxout;
6344wire l1clk;
6345wire siclk_out;
6346wire soclk_out;
6347wire [63:0] so;
6348
6349 input [64:0] din0;
6350 input [64:0] din1;
6351 input [64:0] din2;
6352 input [64:0] din3;
6353 input [64:0] din4;
6354 input [64:0] din5;
6355 input [64:0] din6;
6356 input sel0;
6357 input sel1;
6358 input sel2;
6359 input sel3;
6360 input sel4;
6361 input sel5;
6362
6363
6364 input clk;
6365 input en;
6366 input se;
6367 input scan_in;
6368 input siclk;
6369 input soclk;
6370 input pce_ov;
6371 input stop;
6372
6373
6374
6375 output [64:0] dout;
6376
6377
6378 output scan_out;
6379
6380
6381
6382
6383cl_dp1_penc7_8x c1_0 (
6384 .test(1'b1),
6385 .sel0(sel0),
6386 .sel1(sel1),
6387 .sel2(sel2),
6388 .sel3(sel3),
6389 .sel4(sel4),
6390 .sel5(sel5),
6391 .psel0(psel0),
6392 .psel1(psel1),
6393 .psel2(psel2),
6394 .psel3(psel3),
6395 .psel4(psel4),
6396 .psel5(psel5),
6397 .psel6(psel6)
6398);
6399
6400mux7s #(65) d1_0 (
6401 .sel0(psel0),
6402 .sel1(psel1),
6403 .sel2(psel2),
6404 .sel3(psel3),
6405 .sel4(psel4),
6406 .sel5(psel5),
6407 .sel6(psel6),
6408 .in0(din0[64:0]),
6409 .in1(din1[64:0]),
6410 .in2(din2[64:0]),
6411 .in3(din3[64:0]),
6412 .in4(din4[64:0]),
6413 .in5(din5[64:0]),
6414 .in6(din6[64:0]),
6415.dout(muxout[64:0])
6416);
6417cl_dp1_l1hdr_8x c0_0 (
6418.l2clk(clk),
6419.pce(en),
6420.aclk(siclk),
6421.bclk(soclk),
6422.l1clk(l1clk),
6423 .se(se),
6424 .pce_ov(pce_ov),
6425 .stop(stop),
6426 .siclk_out(siclk_out),
6427 .soclk_out(soclk_out)
6428);
6429dff #(65) d0_0 (
6430.l1clk(l1clk),
6431.siclk(siclk_out),
6432.soclk(soclk_out),
6433.d(muxout[64:0]),
6434.si({scan_in,so[63:0]}),
6435.so({so[63:0],scan_out}),
6436.q(dout[64:0])
6437);
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458endmodule
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472// any PARAMS parms go into naming of macro
6473
6474module exu_edp_dp_msff_macro__stack_72c__width_39 (
6475 din,
6476 clk,
6477 en,
6478 se,
6479 scan_in,
6480 siclk,
6481 soclk,
6482 pce_ov,
6483 stop,
6484 dout,
6485 scan_out);
6486wire l1clk;
6487wire siclk_out;
6488wire soclk_out;
6489wire [37:0] so;
6490
6491 input [38:0] din;
6492
6493
6494 input clk;
6495 input en;
6496 input se;
6497 input scan_in;
6498 input siclk;
6499 input soclk;
6500 input pce_ov;
6501 input stop;
6502
6503
6504
6505 output [38:0] dout;
6506
6507
6508 output scan_out;
6509
6510
6511
6512
6513cl_dp1_l1hdr_8x c0_0 (
6514.l2clk(clk),
6515.pce(en),
6516.aclk(siclk),
6517.bclk(soclk),
6518.l1clk(l1clk),
6519 .se(se),
6520 .pce_ov(pce_ov),
6521 .stop(stop),
6522 .siclk_out(siclk_out),
6523 .soclk_out(soclk_out)
6524);
6525dff #(39) d0_0 (
6526.l1clk(l1clk),
6527.siclk(siclk_out),
6528.soclk(soclk_out),
6529.d(din[38:0]),
6530.si({scan_in,so[37:0]}),
6531.so({so[37:0],scan_out}),
6532.q(dout[38:0])
6533);
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554endmodule
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564//
6565// invert macro
6566//
6567//
6568
6569
6570
6571
6572
6573module exu_edp_dp_inv_macro__stack_72c__width_7 (
6574 din,
6575 dout);
6576 input [6:0] din;
6577 output [6:0] dout;
6578
6579
6580
6581
6582
6583
6584inv #(7) d0_0 (
6585.in(din[6:0]),
6586.out(dout[6:0])
6587);
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597endmodule
6598
6599
6600
6601
6602
6603// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6604// also for pass-gate with decoder
6605
6606
6607
6608
6609
6610// any PARAMS parms go into naming of macro
6611
6612module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_2 (
6613 din0,
6614 sel0,
6615 din1,
6616 sel1,
6617 dout);
6618 input [1:0] din0;
6619 input sel0;
6620 input [1:0] din1;
6621 input sel1;
6622 output [1:0] dout;
6623
6624
6625
6626
6627
6628mux2s #(2) d0_0 (
6629 .sel0(sel0),
6630 .sel1(sel1),
6631 .in0(din0[1:0]),
6632 .in1(din1[1:0]),
6633.dout(dout[1:0])
6634);
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648endmodule
6649
6650
6651// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6652// also for pass-gate with decoder
6653
6654
6655
6656
6657
6658// any PARAMS parms go into naming of macro
6659
6660module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_5 (
6661 din0,
6662 sel0,
6663 din1,
6664 sel1,
6665 dout);
6666 input [4:0] din0;
6667 input sel0;
6668 input [4:0] din1;
6669 input sel1;
6670 output [4:0] dout;
6671
6672
6673
6674
6675
6676mux2s #(5) d0_0 (
6677 .sel0(sel0),
6678 .sel1(sel1),
6679 .in0(din0[4:0]),
6680 .in1(din1[4:0]),
6681.dout(dout[4:0])
6682);
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696endmodule
6697
6698
6699// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6700// also for pass-gate with decoder
6701
6702
6703
6704
6705
6706// any PARAMS parms go into naming of macro
6707
6708module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_6 (
6709 din0,
6710 sel0,
6711 din1,
6712 sel1,
6713 dout);
6714 input [5:0] din0;
6715 input sel0;
6716 input [5:0] din1;
6717 input sel1;
6718 output [5:0] dout;
6719
6720
6721
6722
6723
6724mux2s #(6) d0_0 (
6725 .sel0(sel0),
6726 .sel1(sel1),
6727 .in0(din0[5:0]),
6728 .in1(din1[5:0]),
6729.dout(dout[5:0])
6730);
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744endmodule
6745
6746
6747// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6748// also for pass-gate with decoder
6749
6750
6751
6752
6753
6754// any PARAMS parms go into naming of macro
6755
6756module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_1 (
6757 din0,
6758 sel0,
6759 din1,
6760 sel1,
6761 dout);
6762 input [0:0] din0;
6763 input sel0;
6764 input [0:0] din1;
6765 input sel1;
6766 output [0:0] dout;
6767
6768
6769
6770
6771
6772mux2s #(1) d0_0 (
6773 .sel0(sel0),
6774 .sel1(sel1),
6775 .in0(din0[0:0]),
6776 .in1(din1[0:0]),
6777.dout(dout[0:0])
6778);
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792endmodule
6793
6794
6795// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6796// also for pass-gate with decoder
6797
6798
6799
6800
6801
6802// any PARAMS parms go into naming of macro
6803
6804module exu_edp_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_72c__width_8 (
6805 din0,
6806 sel0,
6807 din1,
6808 sel1,
6809 dout);
6810 input [7:0] din0;
6811 input sel0;
6812 input [7:0] din1;
6813 input sel1;
6814 output [7:0] dout;
6815
6816
6817
6818
6819
6820mux2s #(8) d0_0 (
6821 .sel0(sel0),
6822 .sel1(sel1),
6823 .in0(din0[7:0]),
6824 .in1(din1[7:0]),
6825.dout(dout[7:0])
6826);
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840endmodule
6841
6842
6843//
6844// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
6845//
6846//
6847
6848
6849
6850
6851
6852module exu_edp_dp_zero_macro__width_8 (
6853 din,
6854 dout);
6855 input [7:0] din;
6856 output dout;
6857
6858
6859
6860
6861
6862
6863zero #(8) m0_0 (
6864.in(din[7:0]),
6865.out(dout)
6866);
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877endmodule
6878
6879
6880
6881
6882
6883//
6884// and macro for ports = 2,3,4
6885//
6886//
6887
6888
6889
6890
6891
6892module exu_edp_dp_and_macro__ports_2__stack_72c__width_1 (
6893 din0,
6894 din1,
6895 dout);
6896 input [0:0] din0;
6897 input [0:0] din1;
6898 output [0:0] dout;
6899
6900
6901
6902
6903
6904
6905and2 #(1) d0_0 (
6906.in0(din0[0:0]),
6907.in1(din1[0:0]),
6908.out(dout[0:0])
6909);
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919endmodule
6920
6921
6922
6923
6924
6925// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6926// also for pass-gate with decoder
6927
6928
6929
6930
6931
6932// any PARAMS parms go into naming of macro
6933
6934module exu_edp_dp_mux_macro__mux_pgdec__ports_8__stack_72c__width_14 (
6935 din0,
6936 din1,
6937 din2,
6938 din3,
6939 din4,
6940 din5,
6941 din6,
6942 din7,
6943 sel,
6944 muxtst,
6945 test,
6946 dout);
6947wire psel0;
6948wire psel1;
6949wire psel2;
6950wire psel3;
6951wire psel4;
6952wire psel5;
6953wire psel6;
6954wire psel7;
6955
6956 input [13:0] din0;
6957 input [13:0] din1;
6958 input [13:0] din2;
6959 input [13:0] din3;
6960 input [13:0] din4;
6961 input [13:0] din5;
6962 input [13:0] din6;
6963 input [13:0] din7;
6964 input [2:0] sel;
6965 input muxtst;
6966 input test;
6967 output [13:0] dout;
6968
6969
6970
6971
6972
6973cl_dp1_pdec8_8x c0_0 (
6974 .sel0(sel[0]),
6975 .sel1(sel[1]),
6976 .sel2(sel[2]),
6977 .psel0(psel0),
6978 .psel1(psel1),
6979 .psel2(psel2),
6980 .psel3(psel3),
6981 .psel4(psel4),
6982 .psel5(psel5),
6983 .psel6(psel6),
6984 .psel7(psel7),
6985 .test(test)
6986);
6987
6988mux8 #(14) d0_0 (
6989 .sel0(psel0),
6990 .sel1(psel1),
6991 .sel2(psel2),
6992 .sel3(psel3),
6993 .sel4(psel4),
6994 .sel5(psel5),
6995 .sel6(psel6),
6996 .sel7(psel7),
6997 .in0(din0[13:0]),
6998 .in1(din1[13:0]),
6999 .in2(din2[13:0]),
7000 .in3(din3[13:0]),
7001 .in4(din4[13:0]),
7002 .in5(din5[13:0]),
7003 .in6(din6[13:0]),
7004 .in7(din7[13:0]),
7005.dout(dout[13:0]),
7006 .muxtst(muxtst)
7007);
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021endmodule
7022
7023
7024// general mux macro for pass-gate and and-or muxes with/wout priority encoders
7025// also for pass-gate with decoder
7026
7027
7028
7029
7030
7031// any PARAMS parms go into naming of macro
7032
7033module exu_edp_dp_mux_macro__mux_aope__ports_3__stack_72c__width_33 (
7034 din0,
7035 din1,
7036 din2,
7037 sel0,
7038 sel1,
7039 dout);
7040wire psel0;
7041wire psel1;
7042wire psel2;
7043
7044 input [32:0] din0;
7045 input [32:0] din1;
7046 input [32:0] din2;
7047 input sel0;
7048 input sel1;
7049 output [32:0] dout;
7050
7051
7052
7053
7054
7055cl_dp1_penc3_8x c0_0 (
7056 .test(1'b1),
7057 .sel0(sel0),
7058 .sel1(sel1),
7059 .psel0(psel0),
7060 .psel1(psel1),
7061 .psel2(psel2)
7062);
7063
7064mux3s #(33) d0_0 (
7065 .sel0(psel0),
7066 .sel1(psel1),
7067 .sel2(psel2),
7068 .in0(din0[32:0]),
7069 .in1(din1[32:0]),
7070 .in2(din2[32:0]),
7071.dout(dout[32:0])
7072);
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086endmodule
7087