Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / lsu / rtl / lsu_lmd_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: lsu_lmd_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 lsu_lmd_dp (
36 lmc_lmq_enable_b,
37 lmc_lmq_bypass_en,
38 lmc_pcx_sel_p4,
39 lmc_byp_sel_e,
40 lmc_thrd_byp_sel_m,
41 lmc_lmq0_byp_sel,
42 lmc_lmq1_byp_sel,
43 lmc_lmq2_byp_sel,
44 lmc_lmq3_byp_sel,
45 lmc_lmq4_byp_sel,
46 lmc_lmq5_byp_sel,
47 lmc_lmq6_byp_sel,
48 lmc_lmq7_byp_sel,
49 lmc_bld_addr54,
50 lmc_bld_req,
51 lmc_bld_req_,
52 lmc_lmd_ncache_b,
53 lmc_rd_update,
54 lmc_ld_unfilled,
55 lmc_bist_or_diag_e,
56 lmc_byp_data_hi,
57 lmc_byp_data_enable,
58 dcc_ld_miss_ctl,
59 dcc_perr_enc_b,
60 dcc_l2fill_vld_m,
61 dcc_cache_diag_wr_b,
62 stb_ram_data,
63 ard_pid_data,
64 stb_st_addr_b,
65 sbd_st_addr_b,
66 sbd_st_data_b,
67 stb_ldxa_asi_data_w,
68 lsu_va_b,
69 lsu_va_w,
70 cid_fill_data_e,
71 cid_st_data_sel,
72 cid_tid,
73 lsu_cpx_cpkt,
74 dcs_ldxa_asi_data_w,
75 cic_diag_data_sel_e,
76 mbi_wdata,
77 lmc_mbi_run,
78 lmd_addrb2,
79 lmd_asi_ld,
80 lmd_asi_indet,
81 lmd_sec_cmp_b,
82 lmd_ld_addr_m,
83 lmd_fill_sz_b0_e,
84 lmd_bendian_m,
85 lmd_sxt_fsr_m,
86 lmd_fill_way_e,
87 lmd_fill_way_m,
88 lmd_sz_m,
89 lmd_fpld_m,
90 lmd_rd_e,
91 lmd_rd_m,
92 lmd_fpodd32b_m,
93 lmd_fp32b_m,
94 lmd_bypass_data_m,
95 lmd_fill_data_e,
96 lmd_fill_or_byp_data_m,
97 lmd_misc_msb_m,
98 lmd_fill_addr_e,
99 lmd_fill_addr_m,
100 lmd_wrtag_parity_e,
101 lmd_pcx_rqtyp,
102 lmd_pcx_nc,
103 lmd_pcx_pref,
104 lmd_pcx_rway,
105 lmd_pcx_addr,
106 lmd_asi_rngf,
107 lmd_asi_type,
108 lmd_asi_asi,
109 lmd_sz_b1,
110 lmd_sz_b0,
111 lmd_ldbl,
112 lmd_dc_err_e,
113 lsu_ifu_ld_index,
114 lsu_ext_int_type,
115 lsu_ext_int_vec,
116 lsu_ext_int_tid,
117 l2clk,
118 scan_in,
119 tcu_pce_ov,
120 tcu_scan_en,
121 spc_aclk,
122 spc_bclk,
123 scan_out);
124wire stop;
125wire se;
126wire pce_ov;
127wire siclk;
128wire soclk;
129wire [39:0] ld_addr_b;
130wire [12:11] lsu_va_b_unused;
131wire wrtag_parity_b;
132wire [63:0] ld_miss_pkt;
133wire ctl_unused;
134wire [63:0] lmq7_pkt;
135wire [63:0] lmq6_pkt;
136wire [63:0] lmq5_pkt;
137wire [63:0] lmq4_pkt;
138wire [63:0] lmq3_pkt;
139wire [63:0] lmq2_pkt;
140wire [63:0] lmq1_pkt;
141wire [63:0] lmq0_pkt;
142wire [2:0] rd7_plus1;
143wire [2:0] rd6_plus1;
144wire [2:0] rd5_plus1;
145wire [2:0] rd4_plus1;
146wire [2:0] rd3_plus1;
147wire [2:0] rd2_plus1;
148wire [2:0] rd1_plus1;
149wire [2:0] rd0_plus1;
150wire [63:0] rd_update_pkt0;
151wire [63:0] rd_update_pkt1;
152wire [63:0] rd_update_pkt2;
153wire [63:0] rd_update_pkt3;
154wire [63:0] rd_update_pkt4;
155wire [63:0] rd_update_pkt5;
156wire [63:0] rd_update_pkt6;
157wire [63:0] rd_update_pkt7;
158wire dff_lmq0_scanin;
159wire dff_lmq0_scanout;
160wire dff_lmq1_scanin;
161wire dff_lmq1_scanout;
162wire dff_lmq2_scanin;
163wire dff_lmq2_scanout;
164wire dff_lmq3_scanin;
165wire dff_lmq3_scanout;
166wire dff_lmq4_scanin;
167wire dff_lmq4_scanout;
168wire dff_lmq5_scanin;
169wire dff_lmq5_scanout;
170wire dff_lmq6_scanin;
171wire dff_lmq6_scanout;
172wire dff_lmq7_scanin;
173wire dff_lmq7_scanout;
174wire [10:5] ifu_ld_index;
175wire [39:4] cmp_addr;
176wire [7:0] sec_cmp_lo;
177wire [7:0] sec_cmp_hi;
178wire pcx_pkt_b55;
179wire [49:0] pcx_pkt;
180wire [5:4] pcx_addr;
181wire [49:0] lmd_pcx_pkt;
182wire lmd_fpodd32b_e;
183wire lmd_fp32b_e;
184wire lmd_fpld_e;
185wire lmd_sxt_fsr_e;
186wire lmd_bendian_e;
187wire [4:0] rd_e;
188wire [1:0] lmd_sz_e;
189wire [2:0] ld_addr_e;
190wire [44:0] lmq0_or_diag;
191wire [44:0] lmd_muxdata_e;
192wire [30:2] diag_data_w_buf;
193wire [39:11] diag_addr_e;
194wire wrtag_parity_w;
195wire dff_lmq_data_m_scanin;
196wire dff_lmq_data_m_scanout;
197wire [63:0] st_data_b;
198wire [63:0] stb_ram_data_buf;
199wire [63:0] stb_ldxa_asi_data_w_buf;
200wire [63:0] ard_pid_data_buf;
201wire [63:0] dcs_ldxa_asi_data_w_buf;
202wire dff_ldbyp0_scanin;
203wire dff_ldbyp0_scanout;
204wire [63:0] lmq0_bypass_data;
205wire dff_ldbyp1_scanin;
206wire dff_ldbyp1_scanout;
207wire [63:0] lmq1_bypass_data;
208wire dff_ldbyp2_scanin;
209wire dff_ldbyp2_scanout;
210wire [63:0] lmq2_bypass_data;
211wire dff_ldbyp3_scanin;
212wire dff_ldbyp3_scanout;
213wire [63:0] lmq3_bypass_data;
214wire dff_ldbyp4_scanin;
215wire dff_ldbyp4_scanout;
216wire [63:0] lmq4_bypass_data;
217wire dff_ldbyp5_scanin;
218wire dff_ldbyp5_scanout;
219wire [63:0] lmq5_bypass_data;
220wire dff_ldbyp6_scanin;
221wire dff_ldbyp6_scanout;
222wire [63:0] lmq6_bypass_data;
223wire dff_ldbyp7_scanin;
224wire dff_ldbyp7_scanout;
225wire [63:0] lmq7_bypass_data;
226wire [63:0] bypass_data_m;
227wire dff_st_data_w_scanin;
228wire dff_st_data_w_scanout;
229wire [63:0] diag_data_w;
230wire [127:0] fill_data_e;
231wire byp_half_sel_scanin;
232wire byp_half_sel_scanout;
233wire [63:0] fill_data_m;
234
235
236input [7:0] lmc_lmq_enable_b; // Load enables for LMQ flops (threaded)
237input [7:0] lmc_lmq_bypass_en; // Load enables for LMQ bypass registers
238input [7:0] lmc_pcx_sel_p4; // Mux the selected thread
239input [7:0] lmc_byp_sel_e; // Thread select for fill/bypass
240input [7:0] lmc_thrd_byp_sel_m; // Thread select for bypass register
241input [4:0] lmc_lmq0_byp_sel; // source selects for load bypass registers
242input [4:0] lmc_lmq1_byp_sel; // source selects for load bypass registers
243input [4:0] lmc_lmq2_byp_sel; // source selects for load bypass registers
244input [4:0] lmc_lmq3_byp_sel; // source selects for load bypass registers
245input [4:0] lmc_lmq4_byp_sel; // source selects for load bypass registers
246input [4:0] lmc_lmq5_byp_sel; // source selects for load bypass registers
247input [4:0] lmc_lmq6_byp_sel; // source selects for load bypass registers
248input [4:0] lmc_lmq7_byp_sel; // source selects for load bypass registers
249input [1:0] lmc_bld_addr54; // Block load address modifier
250input lmc_bld_req; // Current request is for block load
251input lmc_bld_req_;
252input lmc_lmd_ncache_b;
253input [7:0] lmc_rd_update;
254input [7:0] lmc_ld_unfilled;
255input lmc_bist_or_diag_e;
256input lmc_byp_data_hi;
257input lmc_byp_data_enable;
258
259input [60:40] dcc_ld_miss_ctl; // Load miss packet info
260input [1:0] dcc_perr_enc_b; // D$ parity error encoding
261input dcc_l2fill_vld_m;
262input dcc_cache_diag_wr_b;
263
264input [63:0] stb_ram_data; // stb data for RAW bypass
265input [63:0] ard_pid_data; // asi load data
266input [39:13] stb_st_addr_b; // should be equal to tlb_pgnum for normal loads
267input [12:11] sbd_st_addr_b;
268input [63:0] sbd_st_data_b; // for CAS
269input [63:0] stb_ldxa_asi_data_w;
270input [12:0] lsu_va_b;
271input [12:3] lsu_va_w;
272
273input [127:0] cid_fill_data_e; // cpx fill data
274input cid_st_data_sel;
275input [2:0] cid_tid;
276input [8:6] lsu_cpx_cpkt;
277
278input [63:0] dcs_ldxa_asi_data_w;
279
280input cic_diag_data_sel_e;
281
282input [7:0] mbi_wdata;
283input lmc_mbi_run;
284
285output lmd_addrb2;
286output [7:0] lmd_asi_ld; // ASI type flag for each thread
287output [7:0] lmd_asi_indet; // ASI type flag for each thread
288output [7:0] lmd_sec_cmp_b; // Secondary load indicators
289
290// Data for fills and bypass
291output [2:0] lmd_ld_addr_m;
292output lmd_fill_sz_b0_e;
293output lmd_bendian_m; // Endian bit for load misses
294output lmd_sxt_fsr_m; // Sign extend / LDFSR for load misses
295output [1:0] lmd_fill_way_e; // Replacement way for fill data write
296output [1:0] lmd_fill_way_m; // Replacement way for fill data write
297output [1:0] lmd_sz_m; // Size bits from LMQ
298output lmd_fpld_m; // Load was floating point
299output [2:1] lmd_rd_e; // Dest. register address
300output [4:0] lmd_rd_m; // Dest. register address
301output lmd_fpodd32b_m;
302output lmd_fp32b_m;
303output [63:0] lmd_bypass_data_m;
304output [127:0] lmd_fill_data_e;
305output [63:0] lmd_fill_or_byp_data_m;
306output [7:0] lmd_misc_msb_m;
307output [39:3] lmd_fill_addr_e;
308output [10:4] lmd_fill_addr_m;
309output lmd_wrtag_parity_e;
310
311output [2:0] lmd_pcx_rqtyp;
312output lmd_pcx_nc;
313output lmd_pcx_pref;
314output [1:0] lmd_pcx_rway;
315output [39:0] lmd_pcx_addr;
316output lmd_asi_rngf;
317output [1:0] lmd_asi_type;
318output [7:0] lmd_asi_asi;
319output lmd_sz_b1;
320output lmd_sz_b0;
321output lmd_ldbl;
322output [1:0] lmd_dc_err_e;
323
324output [10:5] lsu_ifu_ld_index;
325output [1:0] lsu_ext_int_type;
326output [5:0] lsu_ext_int_vec;
327output [2:0] lsu_ext_int_tid;
328
329// Globals
330input l2clk;
331input scan_in;
332input tcu_pce_ov; // scan signals
333input tcu_scan_en;
334input spc_aclk;
335input spc_bclk;
336output scan_out;
337
338// scan renames
339assign stop = 1'b0;
340// end scan
341
342lsu_lmd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 (
343 .din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
344 .dout({se,pce_ov,siclk,soclk})
345);
346
347`define LMQ_TPAR 61
348`define LMQ_ASI 60
349`define LMQ_FPODD32 59
350`define LMQ_FP32 58
351`define LMQ_FPLD 57
352`define LMQ_SIGNEXT 56
353`define LMQ_BIGEND 55
354`define LMQ_RD_HI 54
355`define LMQ_RD_LO 50
356`define LMQ_LDD 49
357`define LMQ_SZ_HI 48
358`define LMQ_SZ_LO 47
359`define LMQ_RQ_HI 46
360`define LMQ_RQ_LO 44
361`define LMQ_NC 43
362`define LMQ_PREF 42
363`define LMQ_WY_HI 41
364`define LMQ_WY_LO 40
365`define LMQ_AD_HI 39
366`define LMQ_AD_LO 0
367`define LMQ_ASI_IND 56
368`define LMQ_ASI_TYPE 48
369`define LMQ_ASI_HI 47
370`define LMQ_ASI_LO 40
371
372////////////////////////////////////////////////////////////////////////////////
373// Format of the load miss buffer
374//
375// MEM format
376//
377// 63:62 - parity error info
378// 61 - wrtag_parity
379// 60 - ASI - (==0 for memory access)
380// 59 - fpodd32 - 32 bit fp load to odd Rd
381// 58 - fp32 - 32 bit fp load
382// 57 - fp_ld - load is floating point
383// 56 - sign_ext/fsr - data requires sign extension or is LDFSR
384// 55 - bendian - big endian access
385// 54:50 - rd[4:0] - destination register
386// 49 - ldst_dbl - instruction is LDD (requires two returns)
387// 48:47 - sz[1:0] - size
388// 46:44 - rqtyp[2:0] - request type
389// 43 - nc - non-cacheable load
390// 42 - prefetch - prefetch instruction
391// 41:40 - way[1:0] - replacement way
392// 39:13 - pgnum[39:13] - translated addr.
393// 12:0 - va[12:0] -
394//
395// ASI format
396//
397// 63:62 - unused
398// 61 - unused
399// 60 - ASI - (==1 for ASI access)
400// 59:57 - unused
401// 56 - indeterminate flag
402// 55 - fast/local ring - 1=fast
403// 54:50 - rd[4:0]
404// 49:48 - ASI type (00-ASI,01-ASR,10-PR,11-HPR)
405// 47:40 - ASI
406// 39:0 - address
407
408lsu_lmd_dp_buff_macro__rep_1__stack_64c__width_40 ld_addr_buf (
409 .din ({stb_st_addr_b[39:13],sbd_st_addr_b[12:11],lsu_va_b[10:0]}),
410 .dout (ld_addr_b[39:0])
411);
412
413// Leave lsu_va_b[12:11] at this level because verfication bench needs it.
414assign lsu_va_b_unused[12:11] = lsu_va_b[12:11];
415
416////////////////////////////////////////////////////////////////////////////////
417// LMQ flops. One for each thread.
418////////////////////////////////////////////////////////////////////////////////
419
420// Miss packet construction
421
422lsu_lmd_dp_buff_macro__dbuff_32x__rep_1__stack_24c__width_24 miss_pkt_buf (
423 .din ({dcc_perr_enc_b[1:0],wrtag_parity_b,dcc_ld_miss_ctl[60:44],lmc_lmd_ncache_b,dcc_ld_miss_ctl[42:40]}),
424 .dout (ld_miss_pkt[63:40])
425);
426assign ctl_unused=dcc_ld_miss_ctl[43];
427
428assign ld_miss_pkt[39:0] = ld_addr_b[39:0];
429
430lsu_lmd_dp_prty_macro__width_32 wrtag_prty (
431 .din ({ld_miss_pkt[39:32],3'b000,ld_miss_pkt[31:11]}),
432 .dout (wrtag_parity_b)
433);
434
435// Library incrementer is too big and is more than I need. Build a simple one for each thread.
436
437lsu_lmd_dp_inv_macro__width_8 rd_incr0 (
438 .din ({lmq7_pkt[`LMQ_RD_LO],lmq6_pkt[`LMQ_RD_LO],lmq5_pkt[`LMQ_RD_LO],lmq4_pkt[`LMQ_RD_LO],
439 lmq3_pkt[`LMQ_RD_LO],lmq2_pkt[`LMQ_RD_LO],lmq1_pkt[`LMQ_RD_LO],lmq0_pkt[`LMQ_RD_LO]}),
440 .dout ({rd7_plus1[0],rd6_plus1[0],rd5_plus1[0],rd4_plus1[0],rd3_plus1[0],rd2_plus1[0],rd1_plus1[0],rd0_plus1[0]})
441);
442
443lsu_lmd_dp_xor_macro__ports_2__width_8 rd_incr1 (
444 .din0 ({lmq7_pkt[`LMQ_RD_LO],lmq6_pkt[`LMQ_RD_LO],lmq5_pkt[`LMQ_RD_LO],lmq4_pkt[`LMQ_RD_LO],
445 lmq3_pkt[`LMQ_RD_LO],lmq2_pkt[`LMQ_RD_LO],lmq1_pkt[`LMQ_RD_LO],lmq0_pkt[`LMQ_RD_LO]}),
446 .din1 ({lmq7_pkt[`LMQ_RD_LO + 1],lmq6_pkt[`LMQ_RD_LO + 1],lmq5_pkt[`LMQ_RD_LO + 1],lmq4_pkt[`LMQ_RD_LO + 1],
447 lmq3_pkt[`LMQ_RD_LO + 1],lmq2_pkt[`LMQ_RD_LO + 1],lmq1_pkt[`LMQ_RD_LO + 1],lmq0_pkt[`LMQ_RD_LO + 1]}),
448 .dout ({rd7_plus1[1],rd6_plus1[1],rd5_plus1[1],rd4_plus1[1],rd3_plus1[1],rd2_plus1[1],rd1_plus1[1],rd0_plus1[1]})
449);
450
451
452
453lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_0 (
454 .din0 (lmq0_pkt[`LMQ_RD_LO]),
455 .sel0 (lmq0_pkt[`LMQ_RD_LO + 1]),
456 .din1 (lmq0_pkt[`LMQ_RD_LO + 2]),
457 .sel1 (1'b1),
458 .dout (rd0_plus1[2])
459);
460
461lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_1 (
462 .din0 (lmq1_pkt[`LMQ_RD_LO]),
463 .sel0 (lmq1_pkt[`LMQ_RD_LO + 1]),
464 .din1 (lmq1_pkt[`LMQ_RD_LO + 2]),
465 .sel1 (1'b1),
466 .dout (rd1_plus1[2])
467);
468
469lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_2 (
470 .din0 (lmq2_pkt[`LMQ_RD_LO]),
471 .sel0 (lmq2_pkt[`LMQ_RD_LO + 1]),
472 .din1 (lmq2_pkt[`LMQ_RD_LO + 2]),
473 .sel1 (1'b1),
474 .dout (rd2_plus1[2])
475);
476
477lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_3 (
478 .din0 (lmq3_pkt[`LMQ_RD_LO]),
479 .sel0 (lmq3_pkt[`LMQ_RD_LO + 1]),
480 .din1 (lmq3_pkt[`LMQ_RD_LO + 2]),
481 .sel1 (1'b1),
482 .dout (rd3_plus1[2])
483);
484
485lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_4 (
486 .din0 (lmq4_pkt[`LMQ_RD_LO]),
487 .sel0 (lmq4_pkt[`LMQ_RD_LO + 1]),
488 .din1 (lmq4_pkt[`LMQ_RD_LO + 2]),
489 .sel1 (1'b1),
490 .dout (rd4_plus1[2])
491);
492
493lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_5 (
494 .din0 (lmq5_pkt[`LMQ_RD_LO]),
495 .sel0 (lmq5_pkt[`LMQ_RD_LO + 1]),
496 .din1 (lmq5_pkt[`LMQ_RD_LO + 2]),
497 .sel1 (1'b1),
498 .dout (rd5_plus1[2])
499);
500
501lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_6 (
502 .din0 (lmq6_pkt[`LMQ_RD_LO]),
503 .sel0 (lmq6_pkt[`LMQ_RD_LO + 1]),
504 .din1 (lmq6_pkt[`LMQ_RD_LO + 2]),
505 .sel1 (1'b1),
506 .dout (rd6_plus1[2])
507);
508
509lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 rd_incr2_7 (
510 .din0 (lmq7_pkt[`LMQ_RD_LO]),
511 .sel0 (lmq7_pkt[`LMQ_RD_LO + 1]),
512 .din1 (lmq7_pkt[`LMQ_RD_LO + 2]),
513 .sel1 (1'b1),
514 .dout (rd7_plus1[2])
515);
516
517
518
519assign rd_update_pkt0[63:0] = {lmq0_pkt[63:53],rd0_plus1[2:0],lmq0_pkt[49:0]};
520assign rd_update_pkt1[63:0] = {lmq1_pkt[63:53],rd1_plus1[2:0],lmq1_pkt[49:0]};
521assign rd_update_pkt2[63:0] = {lmq2_pkt[63:53],rd2_plus1[2:0],lmq2_pkt[49:0]};
522assign rd_update_pkt3[63:0] = {lmq3_pkt[63:53],rd3_plus1[2:0],lmq3_pkt[49:0]};
523assign rd_update_pkt4[63:0] = {lmq4_pkt[63:53],rd4_plus1[2:0],lmq4_pkt[49:0]};
524assign rd_update_pkt5[63:0] = {lmq5_pkt[63:53],rd5_plus1[2:0],lmq5_pkt[49:0]};
525assign rd_update_pkt6[63:0] = {lmq6_pkt[63:53],rd6_plus1[2:0],lmq6_pkt[49:0]};
526assign rd_update_pkt7[63:0] = {lmq7_pkt[63:53],rd7_plus1[2:0],lmq7_pkt[49:0]};
527
528lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq0 (
529 .scan_in(dff_lmq0_scanin),
530 .scan_out(dff_lmq0_scanout),
531 .din0 (rd_update_pkt0[63:0]),
532 .din1 (ld_miss_pkt[63:0]),
533 .sel0 (lmc_rd_update[0]),
534 .dout (lmq0_pkt[63:0]),
535 .clk (l2clk),
536 .en (lmc_lmq_enable_b[0]),
537 .se(se),
538 .siclk(siclk),
539 .soclk(soclk),
540 .pce_ov(pce_ov),
541 .stop(stop)
542);
543lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq1 (
544 .scan_in(dff_lmq1_scanin),
545 .scan_out(dff_lmq1_scanout),
546 .din0 (rd_update_pkt1[63:0]),
547 .din1 (ld_miss_pkt[63:0]),
548 .sel0 (lmc_rd_update[1]),
549 .dout (lmq1_pkt[63:0]),
550 .clk (l2clk),
551 .en (lmc_lmq_enable_b[1]),
552 .se(se),
553 .siclk(siclk),
554 .soclk(soclk),
555 .pce_ov(pce_ov),
556 .stop(stop)
557);
558lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq2 (
559 .scan_in(dff_lmq2_scanin),
560 .scan_out(dff_lmq2_scanout),
561 .din0 (rd_update_pkt2[63:0]),
562 .din1 (ld_miss_pkt[63:0]),
563 .sel0 (lmc_rd_update[2]),
564 .dout (lmq2_pkt[63:0]),
565 .clk (l2clk),
566 .en (lmc_lmq_enable_b[2]),
567 .se(se),
568 .siclk(siclk),
569 .soclk(soclk),
570 .pce_ov(pce_ov),
571 .stop(stop)
572);
573lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq3 (
574 .scan_in(dff_lmq3_scanin),
575 .scan_out(dff_lmq3_scanout),
576 .din0 (rd_update_pkt3[63:0]),
577 .din1 (ld_miss_pkt[63:0]),
578 .sel0 (lmc_rd_update[3]),
579 .dout (lmq3_pkt[63:0]),
580 .clk (l2clk),
581 .en (lmc_lmq_enable_b[3]),
582 .se(se),
583 .siclk(siclk),
584 .soclk(soclk),
585 .pce_ov(pce_ov),
586 .stop(stop)
587);
588lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq4 (
589 .scan_in(dff_lmq4_scanin),
590 .scan_out(dff_lmq4_scanout),
591 .din0 (rd_update_pkt4[63:0]),
592 .din1 (ld_miss_pkt[63:0]),
593 .sel0 (lmc_rd_update[4]),
594 .dout (lmq4_pkt[63:0]),
595 .clk (l2clk),
596 .en (lmc_lmq_enable_b[4]),
597 .se(se),
598 .siclk(siclk),
599 .soclk(soclk),
600 .pce_ov(pce_ov),
601 .stop(stop)
602);
603lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq5 (
604 .scan_in(dff_lmq5_scanin),
605 .scan_out(dff_lmq5_scanout),
606 .din0 (rd_update_pkt5[63:0]),
607 .din1 (ld_miss_pkt[63:0]),
608 .sel0 (lmc_rd_update[5]),
609 .dout (lmq5_pkt[63:0]),
610 .clk (l2clk),
611 .en (lmc_lmq_enable_b[5]),
612 .se(se),
613 .siclk(siclk),
614 .soclk(soclk),
615 .pce_ov(pce_ov),
616 .stop(stop)
617);
618lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq6 (
619 .scan_in(dff_lmq6_scanin),
620 .scan_out(dff_lmq6_scanout),
621 .din0 (rd_update_pkt6[63:0]),
622 .din1 (ld_miss_pkt[63:0]),
623 .sel0 (lmc_rd_update[6]),
624 .dout (lmq6_pkt[63:0]),
625 .clk (l2clk),
626 .en (lmc_lmq_enable_b[6]),
627 .se(se),
628 .siclk(siclk),
629 .soclk(soclk),
630 .pce_ov(pce_ov),
631 .stop(stop)
632);
633lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 dff_lmq7 (
634 .scan_in(dff_lmq7_scanin),
635 .scan_out(dff_lmq7_scanout),
636 .din0 (rd_update_pkt7[63:0]),
637 .din1 (ld_miss_pkt[63:0]),
638 .sel0 (lmc_rd_update[7]),
639 .dout (lmq7_pkt[63:0]),
640 .clk (l2clk),
641 .en (lmc_lmq_enable_b[7]),
642 .se(se),
643 .siclk(siclk),
644 .soclk(soclk),
645 .pce_ov(pce_ov),
646 .stop(stop)
647);
648
649// Export ASI flags to LMQ control
650lsu_lmd_dp_buff_macro__width_8 asi_ld_buf (
651 .din ({lmq7_pkt[`LMQ_ASI],lmq6_pkt[`LMQ_ASI],lmq5_pkt[`LMQ_ASI],lmq4_pkt[`LMQ_ASI],
652 lmq3_pkt[`LMQ_ASI],lmq2_pkt[`LMQ_ASI],lmq1_pkt[`LMQ_ASI],lmq0_pkt[`LMQ_ASI]}),
653 .dout (lmd_asi_ld[7:0])
654);
655
656// Export ASI indeterminate flags to LMQ control
657lsu_lmd_dp_buff_macro__width_8 asi_indet_buf (
658 .din ({lmq7_pkt[`LMQ_ASI_IND],lmq6_pkt[`LMQ_ASI_IND],lmq5_pkt[`LMQ_ASI_IND],lmq4_pkt[`LMQ_ASI_IND],
659 lmq3_pkt[`LMQ_ASI_IND],lmq2_pkt[`LMQ_ASI_IND],lmq1_pkt[`LMQ_ASI_IND],lmq0_pkt[`LMQ_ASI_IND]}),
660 .dout (lmd_asi_indet[7:0])
661);
662
663// Mux out the index of the load miss address for I$ to use for xinval
664lsu_lmd_dp_mux_macro__mux_aodec__ports_8__stack_6l__width_6 xinval_indx_mx (
665 .din0 (lmq0_pkt[10:5]),
666 .din1 (lmq1_pkt[10:5]),
667 .din2 (lmq2_pkt[10:5]),
668 .din3 (lmq3_pkt[10:5]),
669 .din4 (lmq4_pkt[10:5]),
670 .din5 (lmq5_pkt[10:5]),
671 .din6 (lmq6_pkt[10:5]),
672 .din7 (lmq7_pkt[10:5]),
673 .sel (lsu_cpx_cpkt[8:6]),
674 .dout (ifu_ld_index[10:5])
675);
676lsu_lmd_dp_buff_macro__stack_6l__width_6 xinval_indx_buf (
677 .din (ifu_ld_index[10:5]),
678 .dout (lsu_ifu_ld_index[10:5])
679);
680
681////////////////////////////////////////////////////////////////////////////////
682// Secondary miss comparators
683////////////////////////////////////////////////////////////////////////////////
684
685assign cmp_addr[39:4] = ld_addr_b[39:4];
686
687lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_0 (
688 .din0 ({4'b0000,cmp_addr[31:4]}),
689 .din1 ({4'b0000,lmq0_pkt[31:4]}),
690 .dout (sec_cmp_lo[0])
691);
692lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_0 (
693 .din0 (cmp_addr[39:32]),
694 .din1 (lmq0_pkt[39:32]),
695 .dout (sec_cmp_hi[0])
696);
697lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_0 (
698 .din0 (sec_cmp_lo[0]),
699 .din1 (sec_cmp_hi[0]),
700 .din2 (lmc_ld_unfilled[0]),
701 .dout (lmd_sec_cmp_b[0])
702);
703
704lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_1 (
705 .din0 ({4'b0000,cmp_addr[31:4]}),
706 .din1 ({4'b0000,lmq1_pkt[31:4]}),
707 .dout (sec_cmp_lo[1])
708);
709lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_1 (
710 .din0 (cmp_addr[39:32]),
711 .din1 (lmq1_pkt[39:32]),
712 .dout (sec_cmp_hi[1])
713);
714lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_1 (
715 .din0 (sec_cmp_lo[1]),
716 .din1 (sec_cmp_hi[1]),
717 .din2 (lmc_ld_unfilled[1]),
718 .dout (lmd_sec_cmp_b[1])
719);
720
721lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_2 (
722 .din0 ({4'b0000,cmp_addr[31:4]}),
723 .din1 ({4'b0000,lmq2_pkt[31:4]}),
724 .dout (sec_cmp_lo[2])
725);
726lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_2 (
727 .din0 (cmp_addr[39:32]),
728 .din1 (lmq2_pkt[39:32]),
729 .dout (sec_cmp_hi[2])
730);
731lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_2 (
732 .din0 (sec_cmp_lo[2]),
733 .din1 (sec_cmp_hi[2]),
734 .din2 (lmc_ld_unfilled[2]),
735 .dout (lmd_sec_cmp_b[2])
736);
737
738lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_3 (
739 .din0 ({4'b0000,cmp_addr[31:4]}),
740 .din1 ({4'b0000,lmq3_pkt[31:4]}),
741 .dout (sec_cmp_lo[3])
742);
743lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_3 (
744 .din0 (cmp_addr[39:32]),
745 .din1 (lmq3_pkt[39:32]),
746 .dout (sec_cmp_hi[3])
747);
748lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_3 (
749 .din0 (sec_cmp_lo[3]),
750 .din1 (sec_cmp_hi[3]),
751 .din2 (lmc_ld_unfilled[3]),
752 .dout (lmd_sec_cmp_b[3])
753);
754
755lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_4 (
756 .din0 ({4'b0000,cmp_addr[31:4]}),
757 .din1 ({4'b0000,lmq4_pkt[31:4]}),
758 .dout (sec_cmp_lo[4])
759);
760lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_4 (
761 .din0 (cmp_addr[39:32]),
762 .din1 (lmq4_pkt[39:32]),
763 .dout (sec_cmp_hi[4])
764);
765lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_4 (
766 .din0 (sec_cmp_lo[4]),
767 .din1 (sec_cmp_hi[4]),
768 .din2 (lmc_ld_unfilled[4]),
769 .dout (lmd_sec_cmp_b[4])
770);
771
772lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_5 (
773 .din0 ({4'b0000,cmp_addr[31:4]}),
774 .din1 ({4'b0000,lmq5_pkt[31:4]}),
775 .dout (sec_cmp_lo[5])
776);
777lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_5 (
778 .din0 (cmp_addr[39:32]),
779 .din1 (lmq5_pkt[39:32]),
780 .dout (sec_cmp_hi[5])
781);
782lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_5 (
783 .din0 (sec_cmp_lo[5]),
784 .din1 (sec_cmp_hi[5]),
785 .din2 (lmc_ld_unfilled[5]),
786 .dout (lmd_sec_cmp_b[5])
787);
788
789lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_6 (
790 .din0 ({4'b0000,cmp_addr[31:4]}),
791 .din1 ({4'b0000,lmq6_pkt[31:4]}),
792 .dout (sec_cmp_lo[6])
793);
794lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_6 (
795 .din0 (cmp_addr[39:32]),
796 .din1 (lmq6_pkt[39:32]),
797 .dout (sec_cmp_hi[6])
798);
799lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_6 (
800 .din0 (sec_cmp_lo[6]),
801 .din1 (sec_cmp_hi[6]),
802 .din2 (lmc_ld_unfilled[6]),
803 .dout (lmd_sec_cmp_b[6])
804);
805
806lsu_lmd_dp_cmp_macro__width_32 cmp_sec_lo_7 (
807 .din0 ({4'b0000,cmp_addr[31:4]}),
808 .din1 ({4'b0000,lmq7_pkt[31:4]}),
809 .dout (sec_cmp_lo[7])
810);
811lsu_lmd_dp_cmp_macro__width_8 cmp_sec_hi_7 (
812 .din0 (cmp_addr[39:32]),
813 .din1 (lmq7_pkt[39:32]),
814 .dout (sec_cmp_hi[7])
815);
816lsu_lmd_dp_and_macro__ports_3__width_1 cmp_sec_cmp_7 (
817 .din0 (sec_cmp_lo[7]),
818 .din1 (sec_cmp_hi[7]),
819 .din2 (lmc_ld_unfilled[7]),
820 .dout (lmd_sec_cmp_b[7])
821);
822
823////////////////////////////////////////////////////////////////////////////////
824// Select one thread to issue to the pcx or asi interface
825////////////////////////////////////////////////////////////////////////////////
826
827lsu_lmd_dp_mux_macro__mux_aonpe__ports_8__stack_64c__width_51 lmq_pcx_mux (
828 .din0 ({lmq0_pkt[55],lmq0_pkt[49:0]}),
829 .din1 ({lmq1_pkt[55],lmq1_pkt[49:0]}),
830 .din2 ({lmq2_pkt[55],lmq2_pkt[49:0]}),
831 .din3 ({lmq3_pkt[55],lmq3_pkt[49:0]}),
832 .din4 ({lmq4_pkt[55],lmq4_pkt[49:0]}),
833 .din5 ({lmq5_pkt[55],lmq5_pkt[49:0]}),
834 .din6 ({lmq6_pkt[55],lmq6_pkt[49:0]}),
835 .din7 ({lmq7_pkt[55],lmq7_pkt[49:0]}),
836 .sel0 (lmc_pcx_sel_p4[0]),
837 .sel1 (lmc_pcx_sel_p4[1]),
838 .sel2 (lmc_pcx_sel_p4[2]),
839 .sel3 (lmc_pcx_sel_p4[3]),
840 .sel4 (lmc_pcx_sel_p4[4]),
841 .sel5 (lmc_pcx_sel_p4[5]),
842 .sel6 (lmc_pcx_sel_p4[6]),
843 .sel7 (lmc_pcx_sel_p4[7]),
844 .dout ({pcx_pkt_b55,pcx_pkt[49:6],pcx_addr[5:4],pcx_pkt[3:0]})
845);
846
847lsu_lmd_dp_buff_macro__stack_64c__width_51 lmq_pcx_buf (
848 .din ({pcx_pkt_b55,pcx_pkt[49:0]}),
849 .dout ({lmd_asi_rngf,lmd_pcx_pkt[49:0]})
850);
851
852assign lmd_pcx_rqtyp[2:0] = lmd_pcx_pkt[`LMQ_RQ_HI:`LMQ_RQ_LO]; // 46:44
853assign lmd_pcx_nc = lmd_pcx_pkt[`LMQ_NC]; // 43
854assign lmd_pcx_pref = lmd_pcx_pkt[`LMQ_PREF]; // 42
855assign lmd_pcx_rway[1:0] = lmd_pcx_pkt[`LMQ_WY_HI:`LMQ_WY_LO]; // 41:40
856assign lmd_pcx_addr[39:0] = lmd_pcx_pkt[`LMQ_AD_HI:`LMQ_AD_LO]; // 39:0
857assign lmd_asi_type[1:0] = lmd_pcx_pkt[`LMQ_ASI_TYPE + 1:`LMQ_ASI_TYPE]; // 49:48
858assign lmd_ldbl = lmd_pcx_pkt[`LMQ_LDD]; // 49
859assign lmd_asi_asi[7:0] = lmd_pcx_pkt[`LMQ_ASI_HI:`LMQ_ASI_LO]; // 47:40
860assign lmd_sz_b1 = lmd_pcx_pkt[`LMQ_SZ_LO + 1]; // 48
861assign lmd_sz_b0 = lmd_pcx_pkt[`LMQ_SZ_LO]; // 47
862
863
864assign lmd_addrb2 = lmd_pcx_pkt[2];
865
866lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_64c__width_2 bld_addr_mux (
867 .din0 (lmc_bld_addr54[1:0]),
868 .din1 (pcx_addr[5:4]),
869 .sel0 (lmc_bld_req),
870 .sel1 (lmc_bld_req_),
871 .dout (pcx_pkt[5:4])
872);
873
874////////////////////////////////////////////////////////////////////////////////
875// Data for fills and bypass
876////////////////////////////////////////////////////////////////////////////////
877
878lsu_lmd_dp_mux_macro__dbuff_32x__dmux_4x__mux_aonpe__ports_8__stack_64c__width_15 lmq_data_mux_e (
879 .din0 ({lmq0_pkt[59:50],lmq0_pkt[48:47],lmq0_pkt[2:0]}),
880 .din1 ({lmq1_pkt[59:50],lmq1_pkt[48:47],lmq1_pkt[2:0]}),
881 .din2 ({lmq2_pkt[59:50],lmq2_pkt[48:47],lmq2_pkt[2:0]}),
882 .din3 ({lmq3_pkt[59:50],lmq3_pkt[48:47],lmq3_pkt[2:0]}),
883 .din4 ({lmq4_pkt[59:50],lmq4_pkt[48:47],lmq4_pkt[2:0]}),
884 .din5 ({lmq5_pkt[59:50],lmq5_pkt[48:47],lmq5_pkt[2:0]}),
885 .din6 ({lmq6_pkt[59:50],lmq6_pkt[48:47],lmq6_pkt[2:0]}),
886 .din7 ({lmq7_pkt[59:50],lmq7_pkt[48:47],lmq7_pkt[2:0]}),
887 .sel0 (lmc_byp_sel_e[0]),
888 .sel1 (lmc_byp_sel_e[1]),
889 .sel2 (lmc_byp_sel_e[2]),
890 .sel3 (lmc_byp_sel_e[3]),
891 .sel4 (lmc_byp_sel_e[4]),
892 .sel5 (lmc_byp_sel_e[5]),
893 .sel6 (lmc_byp_sel_e[6]),
894 .sel7 (lmc_byp_sel_e[7]),
895 .dout ({lmd_fpodd32b_e,lmd_fp32b_e,lmd_fpld_e,lmd_sxt_fsr_e,lmd_bendian_e,
896 rd_e[4:0],lmd_sz_e[1:0],ld_addr_e[2:0]})
897);
898
899lsu_lmd_dp_mux_macro__mux_aodec__ports_8__width_45 lmq_mux_e (
900 .din0 (lmq0_or_diag[44:0]),
901 .din1 ({lmq1_pkt[63:62],lmq1_pkt[`LMQ_TPAR],lmq1_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
902 lmq1_pkt[`LMQ_SZ_LO],lmq1_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq1_pkt[39:3]}),
903 .din2 ({lmq2_pkt[63:62],lmq2_pkt[`LMQ_TPAR],lmq2_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
904 lmq2_pkt[`LMQ_SZ_LO],lmq2_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq2_pkt[39:3]}),
905 .din3 ({lmq3_pkt[63:62],lmq3_pkt[`LMQ_TPAR],lmq3_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
906 lmq3_pkt[`LMQ_SZ_LO],lmq3_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq3_pkt[39:3]}),
907 .din4 ({lmq4_pkt[63:62],lmq4_pkt[`LMQ_TPAR],lmq4_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
908 lmq4_pkt[`LMQ_SZ_LO],lmq4_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq4_pkt[39:3]}),
909 .din5 ({lmq5_pkt[63:62],lmq5_pkt[`LMQ_TPAR],lmq5_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
910 lmq5_pkt[`LMQ_SZ_LO],lmq5_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq5_pkt[39:3]}),
911 .din6 ({lmq6_pkt[63:62],lmq6_pkt[`LMQ_TPAR],lmq6_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
912 lmq6_pkt[`LMQ_SZ_LO],lmq6_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq6_pkt[39:3]}),
913 .din7 ({lmq7_pkt[63:62],lmq7_pkt[`LMQ_TPAR],lmq7_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],
914 lmq7_pkt[`LMQ_SZ_LO],lmq7_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq7_pkt[39:3]}),
915 .sel (cid_tid[2:0]),
916 .dout (lmd_muxdata_e[44:0])
917);
918
919// Must mux in bist and diag write data for tag portion
920lsu_lmd_dp_mux_macro__left_11__mux_aope__ports_2__stack_64c__width_29 bist_mx (
921 .din0 ({mbi_wdata[4:0],{3{mbi_wdata[7:0]}}}),
922 .din1 (diag_data_w_buf[30:2]),
923 .sel0 (lmc_mbi_run),
924 .dout (diag_addr_e[39:11])
925);
926assign lmq0_or_diag[44:43] = lmq0_pkt[63:62];
927assign lmq0_or_diag[41:39] = {lmq0_pkt[`LMQ_RD_LO + 2:`LMQ_RD_LO + 1],lmq0_pkt[`LMQ_SZ_LO]};
928
929lsu_lmd_dp_mux_macro__left_3__mux_aope__ports_2__stack_64c__width_40 diag_mx (
930 .din0 ({wrtag_parity_w,lsu_va_w[12:11],diag_addr_e[39:11],lsu_va_w[10:3]}),
931 .din1 ({lmq0_pkt[`LMQ_TPAR],lmq0_pkt[`LMQ_WY_HI:`LMQ_WY_LO],lmq0_pkt[39:3]}),
932 .sel0 (lmc_bist_or_diag_e),
933 .dout ({lmq0_or_diag[42],lmq0_or_diag[38:0]})
934);
935
936lsu_lmd_dp_buff_macro__width_45 lmq_buf_e (
937 .din (lmd_muxdata_e[44:0]),
938 .dout ({lmd_dc_err_e[1:0],lmd_wrtag_parity_e,lmd_rd_e[2:1],lmd_fill_sz_b0_e,
939 lmd_fill_way_e[1:0], lmd_fill_addr_e[39:3]})
940);
941
942lsu_lmd_dp_msff_macro__stack_64c__width_25 dff_lmq_data_m (
943 .scan_in(dff_lmq_data_m_scanin),
944 .scan_out(dff_lmq_data_m_scanout),
945 .din ({wrtag_parity_b,
946 lmd_fpodd32b_e,lmd_fp32b_e,lmd_fpld_e,lmd_sxt_fsr_e,lmd_bendian_e,
947 rd_e[4:0],lmd_sz_e[1:0],lmd_fill_way_e[1:0],lmd_fill_addr_e[10:4],ld_addr_e[2:0]}),
948 .dout ({wrtag_parity_w,
949 lmd_fpodd32b_m,lmd_fp32b_m,lmd_fpld_m,lmd_sxt_fsr_m,lmd_bendian_m,
950 lmd_rd_m[4:0],lmd_sz_m[1:0],lmd_fill_way_m[1:0],lmd_fill_addr_m[10:4],lmd_ld_addr_m[2:0]}),
951 .clk (l2clk),
952 .en (1'b1),
953 .se(se),
954 .siclk(siclk),
955 .soclk(soclk),
956 .pce_ov(pce_ov),
957 .stop(stop)
958);
959
960////////////////////////////////////////////////////////////////////////////////
961// Load data bypassing
962// Bypass registers can hold the following data
963// 0 - swap data for CAS instructions
964// 1 - load data for ASI ring operations
965// 2 - RAW bypass data from STB
966// 3 - load data for LSU ASI registers (non-STB)
967// 4 - load data for LSU ASI registers (STB)
968// 5 - parity update for STB CAM read
969////////////////////////////////////////////////////////////////////////////////
970
971// These come from the other side of LSU so buffer off the load of the eight muxes
972lsu_lmd_dp_buff_macro__rep_1__width_64 st_data_buf (
973 .din (sbd_st_data_b[63:0]),
974 .dout (st_data_b[63:0])
975);
976lsu_lmd_dp_buff_macro__rep_1__width_64 buf_stb_ram_data (
977 .din (stb_ram_data[63:0]),
978 .dout (stb_ram_data_buf[63:0])
979);
980lsu_lmd_dp_buff_macro__rep_1__width_64 buf_stb_asi_data (
981 .din (stb_ldxa_asi_data_w[63:0]),
982 .dout (stb_ldxa_asi_data_w_buf[63:0])
983);
984lsu_lmd_dp_buff_macro__rep_1__width_64 buf_ard_pid_data (
985 .din (ard_pid_data[63:0]),
986 .dout (ard_pid_data_buf[63:0])
987);
988
989// Rebuffer for the load of the eight muxes
990lsu_lmd_dp_buff_macro__rep_1__width_64 buf_dcs_asi_data (
991 .din (dcs_ldxa_asi_data_w[63:0]),
992 .dout (dcs_ldxa_asi_data_w_buf[63:0])
993);
994
995lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp0 (
996 .scan_in(dff_ldbyp0_scanin),
997 .scan_out(dff_ldbyp0_scanout),
998 .din0 (st_data_b[63:0]),
999 .din1 (ard_pid_data_buf[63:0]),
1000 .din2 (stb_ram_data_buf[63:0]),
1001 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1002 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1003 .sel0 (lmc_lmq0_byp_sel[0]),
1004 .sel1 (lmc_lmq0_byp_sel[1]),
1005 .sel2 (lmc_lmq0_byp_sel[2]),
1006 .sel3 (lmc_lmq0_byp_sel[3]),
1007 .sel4 (lmc_lmq0_byp_sel[4]),
1008 .dout (lmq0_bypass_data[63:0]),
1009 .clk (l2clk),
1010 .en (lmc_lmq_bypass_en[0]),
1011 .se(se),
1012 .siclk(siclk),
1013 .soclk(soclk),
1014 .pce_ov(pce_ov),
1015 .stop(stop)
1016);
1017
1018lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp1 (
1019 .scan_in(dff_ldbyp1_scanin),
1020 .scan_out(dff_ldbyp1_scanout),
1021 .din0 (st_data_b[63:0]),
1022 .din1 (ard_pid_data_buf[63:0]),
1023 .din2 (stb_ram_data_buf[63:0]),
1024 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1025 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1026 .sel0 (lmc_lmq1_byp_sel[0]),
1027 .sel1 (lmc_lmq1_byp_sel[1]),
1028 .sel2 (lmc_lmq1_byp_sel[2]),
1029 .sel3 (lmc_lmq1_byp_sel[3]),
1030 .sel4 (lmc_lmq1_byp_sel[4]),
1031 .dout (lmq1_bypass_data[63:0]),
1032 .clk (l2clk),
1033 .en (lmc_lmq_bypass_en[1]),
1034 .se(se),
1035 .siclk(siclk),
1036 .soclk(soclk),
1037 .pce_ov(pce_ov),
1038 .stop(stop)
1039);
1040
1041lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp2 (
1042 .scan_in(dff_ldbyp2_scanin),
1043 .scan_out(dff_ldbyp2_scanout),
1044 .din0 (st_data_b[63:0]),
1045 .din1 (ard_pid_data_buf[63:0]),
1046 .din2 (stb_ram_data_buf[63:0]),
1047 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1048 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1049 .sel0 (lmc_lmq2_byp_sel[0]),
1050 .sel1 (lmc_lmq2_byp_sel[1]),
1051 .sel2 (lmc_lmq2_byp_sel[2]),
1052 .sel3 (lmc_lmq2_byp_sel[3]),
1053 .sel4 (lmc_lmq2_byp_sel[4]),
1054 .dout (lmq2_bypass_data[63:0]),
1055 .clk (l2clk),
1056 .en (lmc_lmq_bypass_en[2]),
1057 .se(se),
1058 .siclk(siclk),
1059 .soclk(soclk),
1060 .pce_ov(pce_ov),
1061 .stop(stop)
1062);
1063
1064lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp3 (
1065 .scan_in(dff_ldbyp3_scanin),
1066 .scan_out(dff_ldbyp3_scanout),
1067 .din0 (st_data_b[63:0]),
1068 .din1 (ard_pid_data_buf[63:0]),
1069 .din2 (stb_ram_data_buf[63:0]),
1070 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1071 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1072 .sel0 (lmc_lmq3_byp_sel[0]),
1073 .sel1 (lmc_lmq3_byp_sel[1]),
1074 .sel2 (lmc_lmq3_byp_sel[2]),
1075 .sel3 (lmc_lmq3_byp_sel[3]),
1076 .sel4 (lmc_lmq3_byp_sel[4]),
1077 .dout (lmq3_bypass_data[63:0]),
1078 .clk (l2clk),
1079 .en (lmc_lmq_bypass_en[3]),
1080 .se(se),
1081 .siclk(siclk),
1082 .soclk(soclk),
1083 .pce_ov(pce_ov),
1084 .stop(stop)
1085);
1086
1087lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp4 (
1088 .scan_in(dff_ldbyp4_scanin),
1089 .scan_out(dff_ldbyp4_scanout),
1090 .din0 (st_data_b[63:0]),
1091 .din1 (ard_pid_data_buf[63:0]),
1092 .din2 (stb_ram_data_buf[63:0]),
1093 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1094 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1095 .sel0 (lmc_lmq4_byp_sel[0]),
1096 .sel1 (lmc_lmq4_byp_sel[1]),
1097 .sel2 (lmc_lmq4_byp_sel[2]),
1098 .sel3 (lmc_lmq4_byp_sel[3]),
1099 .sel4 (lmc_lmq4_byp_sel[4]),
1100 .dout (lmq4_bypass_data[63:0]),
1101 .clk (l2clk),
1102 .en (lmc_lmq_bypass_en[4]),
1103 .se(se),
1104 .siclk(siclk),
1105 .soclk(soclk),
1106 .pce_ov(pce_ov),
1107 .stop(stop)
1108);
1109
1110lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp5 (
1111 .scan_in(dff_ldbyp5_scanin),
1112 .scan_out(dff_ldbyp5_scanout),
1113 .din0 (st_data_b[63:0]),
1114 .din1 (ard_pid_data_buf[63:0]),
1115 .din2 (stb_ram_data_buf[63:0]),
1116 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1117 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1118 .sel0 (lmc_lmq5_byp_sel[0]),
1119 .sel1 (lmc_lmq5_byp_sel[1]),
1120 .sel2 (lmc_lmq5_byp_sel[2]),
1121 .sel3 (lmc_lmq5_byp_sel[3]),
1122 .sel4 (lmc_lmq5_byp_sel[4]),
1123 .dout (lmq5_bypass_data[63:0]),
1124 .clk (l2clk),
1125 .en (lmc_lmq_bypass_en[5]),
1126 .se(se),
1127 .siclk(siclk),
1128 .soclk(soclk),
1129 .pce_ov(pce_ov),
1130 .stop(stop)
1131);
1132
1133lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp6 (
1134 .scan_in(dff_ldbyp6_scanin),
1135 .scan_out(dff_ldbyp6_scanout),
1136 .din0 (st_data_b[63:0]),
1137 .din1 (ard_pid_data_buf[63:0]),
1138 .din2 (stb_ram_data_buf[63:0]),
1139 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1140 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1141 .sel0 (lmc_lmq6_byp_sel[0]),
1142 .sel1 (lmc_lmq6_byp_sel[1]),
1143 .sel2 (lmc_lmq6_byp_sel[2]),
1144 .sel3 (lmc_lmq6_byp_sel[3]),
1145 .sel4 (lmc_lmq6_byp_sel[4]),
1146 .dout (lmq6_bypass_data[63:0]),
1147 .clk (l2clk),
1148 .en (lmc_lmq_bypass_en[6]),
1149 .se(se),
1150 .siclk(siclk),
1151 .soclk(soclk),
1152 .pce_ov(pce_ov),
1153 .stop(stop)
1154);
1155
1156lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 dff_ldbyp7 (
1157 .scan_in(dff_ldbyp7_scanin),
1158 .scan_out(dff_ldbyp7_scanout),
1159 .din0 (st_data_b[63:0]),
1160 .din1 (ard_pid_data_buf[63:0]),
1161 .din2 (stb_ram_data_buf[63:0]),
1162 .din3 (dcs_ldxa_asi_data_w_buf[63:0]),
1163 .din4 (stb_ldxa_asi_data_w_buf[63:0]),
1164 .sel0 (lmc_lmq7_byp_sel[0]),
1165 .sel1 (lmc_lmq7_byp_sel[1]),
1166 .sel2 (lmc_lmq7_byp_sel[2]),
1167 .sel3 (lmc_lmq7_byp_sel[3]),
1168 .sel4 (lmc_lmq7_byp_sel[4]),
1169 .dout (lmq7_bypass_data[63:0]),
1170 .clk (l2clk),
1171 .en (lmc_lmq_bypass_en[7]),
1172 .se(se),
1173 .siclk(siclk),
1174 .soclk(soclk),
1175 .pce_ov(pce_ov),
1176 .stop(stop)
1177);
1178
1179
1180// 0in bits_on -var lmc_thrd_byp_sel_m[7:0] -max 1
1181
1182lsu_lmd_dp_mux_macro__dmux_4x__mux_aonpe__ports_8__stack_64c__width_64 ldbyp_data_mux (
1183 .din0 (lmq0_bypass_data[63:0]),
1184 .din1 (lmq1_bypass_data[63:0]),
1185 .din2 (lmq2_bypass_data[63:0]),
1186 .din3 (lmq3_bypass_data[63:0]),
1187 .din4 (lmq4_bypass_data[63:0]),
1188 .din5 (lmq5_bypass_data[63:0]),
1189 .din6 (lmq6_bypass_data[63:0]),
1190 .din7 (lmq7_bypass_data[63:0]),
1191 .sel0 (lmc_thrd_byp_sel_m[0]),
1192 .sel1 (lmc_thrd_byp_sel_m[1]),
1193 .sel2 (lmc_thrd_byp_sel_m[2]),
1194 .sel3 (lmc_thrd_byp_sel_m[3]),
1195 .sel4 (lmc_thrd_byp_sel_m[4]),
1196 .sel5 (lmc_thrd_byp_sel_m[5]),
1197 .sel6 (lmc_thrd_byp_sel_m[6]),
1198 .sel7 (lmc_thrd_byp_sel_m[7]),
1199 .dout (bypass_data_m[63:0])
1200);
1201
1202lsu_lmd_dp_buff_macro__rep_1__stack_64c__width_64 ldbyp_data_buf (
1203 .din (bypass_data_m[63:0]),
1204 .dout (lmd_bypass_data_m[63:0])
1205);
1206
1207////////////////////////////////////////////////////////////////////////////////
1208// L2 Fill Data
1209// Normal fill data comes from cid. Diagnostic store data will come from the
1210// ASI ring.
1211////////////////////////////////////////////////////////////////////////////////
1212
1213lsu_lmd_dp_msff_macro__width_64 dff_st_data_w (
1214 .scan_in(dff_st_data_w_scanin),
1215 .scan_out(dff_st_data_w_scanout),
1216 .din (st_data_b[63:0]),
1217 .dout (diag_data_w[63:0]),
1218 .clk (l2clk),
1219 .en (dcc_cache_diag_wr_b),
1220 .se(se),
1221 .siclk(siclk),
1222 .soclk(soclk),
1223 .pce_ov(pce_ov),
1224 .stop(stop)
1225);
1226
1227lsu_lmd_dp_buff_macro__left_11__rep_1__stack_64c__width_29 diag_data_buf (
1228 .din (diag_data_w[30:2]),
1229 .dout (diag_data_w_buf[30:2])
1230);
1231
1232lsu_lmd_dp_mux_macro__mux_aope__ports_3__width_64 mx_fill_data_hi (
1233 .din0 (diag_data_w[63:0]),
1234 .din1 (cid_fill_data_e[63:0]),
1235 .din2 (cid_fill_data_e[127:64]),
1236 .sel0 (cic_diag_data_sel_e),
1237 .sel1 (cid_st_data_sel),
1238 .dout (fill_data_e[127:64])
1239);
1240lsu_lmd_dp_buff_macro__rep_1__width_64 buf_fill_data_hi (
1241 .din (fill_data_e[127:64]),
1242 .dout (lmd_fill_data_e[127:64])
1243);
1244
1245lsu_lmd_dp_mux_macro__mux_aope__ports_2__width_64 mx_fill_data_lo (
1246 .din0 (diag_data_w[63:0]),
1247 .din1 (cid_fill_data_e[63:0]),
1248 .sel0 (cic_diag_data_sel_e),
1249 .dout (fill_data_e[63:0])
1250);
1251lsu_lmd_dp_buff_macro__rep_1__width_64 buf_fill_data_lo (
1252 .din (fill_data_e[63:0]),
1253 .dout (lmd_fill_data_e[63:0])
1254);
1255
1256
1257////////////////////////////////////////////////////////////////////////////////
1258// Data bypassing
1259////////////////////////////////////////////////////////////////////////////////
1260
1261// Select the correct dword for bypassing
1262lsu_lmd_dp_msff_macro__mux_aope__ports_2__width_64 byp_half_sel (
1263 .scan_in(byp_half_sel_scanin),
1264 .scan_out(byp_half_sel_scanout),
1265 .din0 (cid_fill_data_e[127:64]),
1266 .din1 (cid_fill_data_e[63:0]),
1267 .sel0 (lmc_byp_data_hi),
1268 .dout (fill_data_m[63:0]),
1269 .clk (l2clk),
1270 .en (lmc_byp_data_enable),
1271 .se(se),
1272 .siclk(siclk),
1273 .soclk(soclk),
1274 .pce_ov(pce_ov),
1275 .stop(stop)
1276);
1277
1278lsu_lmd_dp_buff_macro__width_11 int_buf (
1279 .din ({fill_data_m[15:14],fill_data_m[10:8],fill_data_m[5:0]}),
1280 .dout ({lsu_ext_int_type[1:0],lsu_ext_int_tid[2:0],lsu_ext_int_vec[5:0]})
1281);
1282
1283lsu_lmd_dp_mux_macro__mux_pgpe__ports_2__width_64 stgb_l2fd (
1284 .din0 (fill_data_m[63:0]),
1285 .din1 (lmd_bypass_data_m[63:0]),
1286 .dout (lmd_fill_or_byp_data_m[63:0]),
1287 .sel0 (dcc_l2fill_vld_m)
1288);
1289
1290lsu_lmd_dp_buff_macro__width_8 msb_buf (
1291 .din ({lmd_fill_or_byp_data_m[63],lmd_fill_or_byp_data_m[55],
1292 lmd_fill_or_byp_data_m[47],lmd_fill_or_byp_data_m[39],
1293 lmd_fill_or_byp_data_m[31],lmd_fill_or_byp_data_m[23],
1294 lmd_fill_or_byp_data_m[15],lmd_fill_or_byp_data_m[7]}),
1295 .dout (lmd_misc_msb_m[7:0])
1296);
1297
1298// fixscan start:
1299assign dff_lmq0_scanin = scan_in ;
1300assign dff_lmq1_scanin = dff_lmq0_scanout ;
1301assign dff_lmq2_scanin = dff_lmq1_scanout ;
1302assign dff_lmq3_scanin = dff_lmq2_scanout ;
1303assign dff_lmq4_scanin = dff_lmq3_scanout ;
1304assign dff_lmq5_scanin = dff_lmq4_scanout ;
1305assign dff_lmq6_scanin = dff_lmq5_scanout ;
1306assign dff_lmq7_scanin = dff_lmq6_scanout ;
1307assign dff_lmq_data_m_scanin = dff_lmq7_scanout ;
1308assign dff_ldbyp0_scanin = dff_lmq_data_m_scanout ;
1309assign dff_ldbyp1_scanin = dff_ldbyp0_scanout ;
1310assign dff_ldbyp2_scanin = dff_ldbyp1_scanout ;
1311assign dff_ldbyp3_scanin = dff_ldbyp2_scanout ;
1312assign dff_ldbyp4_scanin = dff_ldbyp3_scanout ;
1313assign dff_ldbyp5_scanin = dff_ldbyp4_scanout ;
1314assign dff_ldbyp6_scanin = dff_ldbyp5_scanout ;
1315assign dff_ldbyp7_scanin = dff_ldbyp6_scanout ;
1316assign dff_st_data_w_scanin = dff_ldbyp7_scanout ;
1317assign byp_half_sel_scanin = dff_st_data_w_scanout ;
1318assign scan_out = byp_half_sel_scanout ;
1319// fixscan end:
1320endmodule
1321
1322
1323//
1324// buff macro
1325//
1326//
1327
1328
1329
1330
1331
1332module lsu_lmd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 (
1333 din,
1334 dout);
1335 input [3:0] din;
1336 output [3:0] dout;
1337
1338
1339
1340
1341
1342
1343buff #(4) d0_0 (
1344.in(din[3:0]),
1345.out(dout[3:0])
1346);
1347
1348
1349
1350
1351
1352
1353
1354
1355endmodule
1356
1357
1358
1359
1360
1361//
1362// buff macro
1363//
1364//
1365
1366
1367
1368
1369
1370module lsu_lmd_dp_buff_macro__rep_1__stack_64c__width_40 (
1371 din,
1372 dout);
1373 input [39:0] din;
1374 output [39:0] dout;
1375
1376
1377
1378
1379
1380
1381buff #(40) d0_0 (
1382.in(din[39:0]),
1383.out(dout[39:0])
1384);
1385
1386
1387
1388
1389
1390
1391
1392
1393endmodule
1394
1395
1396
1397
1398
1399//
1400// buff macro
1401//
1402//
1403
1404
1405
1406
1407
1408module lsu_lmd_dp_buff_macro__dbuff_32x__rep_1__stack_24c__width_24 (
1409 din,
1410 dout);
1411 input [23:0] din;
1412 output [23:0] dout;
1413
1414
1415
1416
1417
1418
1419buff #(24) d0_0 (
1420.in(din[23:0]),
1421.out(dout[23:0])
1422);
1423
1424
1425
1426
1427
1428
1429
1430
1431endmodule
1432
1433
1434
1435
1436
1437//
1438// parity macro (even parity)
1439//
1440//
1441
1442
1443
1444
1445
1446module lsu_lmd_dp_prty_macro__width_32 (
1447 din,
1448 dout);
1449 input [31:0] din;
1450 output dout;
1451
1452
1453
1454
1455
1456
1457
1458prty #(32) m0_0 (
1459.in(din[31:0]),
1460.out(dout)
1461);
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472endmodule
1473
1474
1475
1476
1477
1478//
1479// invert macro
1480//
1481//
1482
1483
1484
1485
1486
1487module lsu_lmd_dp_inv_macro__width_8 (
1488 din,
1489 dout);
1490 input [7:0] din;
1491 output [7:0] dout;
1492
1493
1494
1495
1496
1497
1498inv #(8) d0_0 (
1499.in(din[7:0]),
1500.out(dout[7:0])
1501);
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511endmodule
1512
1513
1514
1515
1516
1517//
1518// xor macro for ports = 2,3
1519//
1520//
1521
1522
1523
1524
1525
1526module lsu_lmd_dp_xor_macro__ports_2__width_8 (
1527 din0,
1528 din1,
1529 dout);
1530 input [7:0] din0;
1531 input [7:0] din1;
1532 output [7:0] dout;
1533
1534
1535
1536
1537
1538xor2 #(8) d0_0 (
1539.in0(din0[7:0]),
1540.in1(din1[7:0]),
1541.out(dout[7:0])
1542);
1543
1544
1545
1546
1547
1548
1549
1550
1551endmodule
1552
1553
1554
1555
1556
1557// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1558// also for pass-gate with decoder
1559
1560
1561
1562
1563
1564// any PARAMS parms go into naming of macro
1565
1566module lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__width_1 (
1567 din0,
1568 sel0,
1569 din1,
1570 sel1,
1571 dout);
1572 input [0:0] din0;
1573 input sel0;
1574 input [0:0] din1;
1575 input sel1;
1576 output [0:0] dout;
1577
1578
1579
1580
1581
1582mux2s #(1) d0_0 (
1583 .sel0(sel0),
1584 .sel1(sel1),
1585 .in0(din0[0:0]),
1586 .in1(din1[0:0]),
1587.dout(dout[0:0])
1588);
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602endmodule
1603
1604
1605
1606
1607
1608
1609// any PARAMS parms go into naming of macro
1610
1611module lsu_lmd_dp_msff_macro__mux_aope__ports_2__stack_64c__width_64 (
1612 din0,
1613 din1,
1614 sel0,
1615 clk,
1616 en,
1617 se,
1618 scan_in,
1619 siclk,
1620 soclk,
1621 pce_ov,
1622 stop,
1623 dout,
1624 scan_out);
1625wire psel0;
1626wire psel1;
1627wire [63:0] muxout;
1628wire l1clk;
1629wire siclk_out;
1630wire soclk_out;
1631wire [62:0] so;
1632
1633 input [63:0] din0;
1634 input [63:0] din1;
1635 input sel0;
1636
1637
1638 input clk;
1639 input en;
1640 input se;
1641 input scan_in;
1642 input siclk;
1643 input soclk;
1644 input pce_ov;
1645 input stop;
1646
1647
1648
1649 output [63:0] dout;
1650
1651
1652 output scan_out;
1653
1654
1655
1656
1657cl_dp1_penc2_8x c1_0 (
1658 .sel0(sel0),
1659 .psel0(psel0),
1660 .psel1(psel1)
1661);
1662
1663mux2s #(64) d1_0 (
1664 .sel0(psel0),
1665 .sel1(psel1),
1666 .in0(din0[63:0]),
1667 .in1(din1[63:0]),
1668.dout(muxout[63:0])
1669);
1670cl_dp1_l1hdr_8x c0_0 (
1671.l2clk(clk),
1672.pce(en),
1673.aclk(siclk),
1674.bclk(soclk),
1675.l1clk(l1clk),
1676 .se(se),
1677 .pce_ov(pce_ov),
1678 .stop(stop),
1679 .siclk_out(siclk_out),
1680 .soclk_out(soclk_out)
1681);
1682dff #(64) d0_0 (
1683.l1clk(l1clk),
1684.siclk(siclk_out),
1685.soclk(soclk_out),
1686.d(muxout[63:0]),
1687.si({scan_in,so[62:0]}),
1688.so({so[62:0],scan_out}),
1689.q(dout[63:0])
1690);
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711endmodule
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721//
1722// buff macro
1723//
1724//
1725
1726
1727
1728
1729
1730module lsu_lmd_dp_buff_macro__width_8 (
1731 din,
1732 dout);
1733 input [7:0] din;
1734 output [7:0] dout;
1735
1736
1737
1738
1739
1740
1741buff #(8) d0_0 (
1742.in(din[7:0]),
1743.out(dout[7:0])
1744);
1745
1746
1747
1748
1749
1750
1751
1752
1753endmodule
1754
1755
1756
1757
1758
1759// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1760// also for pass-gate with decoder
1761
1762
1763
1764
1765
1766// any PARAMS parms go into naming of macro
1767
1768module lsu_lmd_dp_mux_macro__mux_aodec__ports_8__stack_6l__width_6 (
1769 din0,
1770 din1,
1771 din2,
1772 din3,
1773 din4,
1774 din5,
1775 din6,
1776 din7,
1777 sel,
1778 dout);
1779wire psel0;
1780wire psel1;
1781wire psel2;
1782wire psel3;
1783wire psel4;
1784wire psel5;
1785wire psel6;
1786wire psel7;
1787
1788 input [5:0] din0;
1789 input [5:0] din1;
1790 input [5:0] din2;
1791 input [5:0] din3;
1792 input [5:0] din4;
1793 input [5:0] din5;
1794 input [5:0] din6;
1795 input [5:0] din7;
1796 input [2:0] sel;
1797 output [5:0] dout;
1798
1799
1800
1801
1802
1803cl_dp1_pdec8_8x c0_0 (
1804 .test(1'b1),
1805 .sel0(sel[0]),
1806 .sel1(sel[1]),
1807 .sel2(sel[2]),
1808 .psel0(psel0),
1809 .psel1(psel1),
1810 .psel2(psel2),
1811 .psel3(psel3),
1812 .psel4(psel4),
1813 .psel5(psel5),
1814 .psel6(psel6),
1815 .psel7(psel7)
1816);
1817
1818mux8s #(6) d0_0 (
1819 .sel0(psel0),
1820 .sel1(psel1),
1821 .sel2(psel2),
1822 .sel3(psel3),
1823 .sel4(psel4),
1824 .sel5(psel5),
1825 .sel6(psel6),
1826 .sel7(psel7),
1827 .in0(din0[5:0]),
1828 .in1(din1[5:0]),
1829 .in2(din2[5:0]),
1830 .in3(din3[5:0]),
1831 .in4(din4[5:0]),
1832 .in5(din5[5:0]),
1833 .in6(din6[5:0]),
1834 .in7(din7[5:0]),
1835.dout(dout[5:0])
1836);
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850endmodule
1851
1852
1853//
1854// buff macro
1855//
1856//
1857
1858
1859
1860
1861
1862module lsu_lmd_dp_buff_macro__stack_6l__width_6 (
1863 din,
1864 dout);
1865 input [5:0] din;
1866 output [5:0] dout;
1867
1868
1869
1870
1871
1872
1873buff #(6) d0_0 (
1874.in(din[5:0]),
1875.out(dout[5:0])
1876);
1877
1878
1879
1880
1881
1882
1883
1884
1885endmodule
1886
1887
1888
1889
1890
1891//
1892// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
1893//
1894//
1895
1896
1897
1898
1899
1900module lsu_lmd_dp_cmp_macro__width_32 (
1901 din0,
1902 din1,
1903 dout);
1904 input [31:0] din0;
1905 input [31:0] din1;
1906 output dout;
1907
1908
1909
1910
1911
1912
1913cmp #(32) m0_0 (
1914.in0(din0[31:0]),
1915.in1(din1[31:0]),
1916.out(dout)
1917);
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928endmodule
1929
1930
1931
1932
1933
1934//
1935// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
1936//
1937//
1938
1939
1940
1941
1942
1943module lsu_lmd_dp_cmp_macro__width_8 (
1944 din0,
1945 din1,
1946 dout);
1947 input [7:0] din0;
1948 input [7:0] din1;
1949 output dout;
1950
1951
1952
1953
1954
1955
1956cmp #(8) m0_0 (
1957.in0(din0[7:0]),
1958.in1(din1[7:0]),
1959.out(dout)
1960);
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971endmodule
1972
1973
1974
1975
1976
1977//
1978// and macro for ports = 2,3,4
1979//
1980//
1981
1982
1983
1984
1985
1986module lsu_lmd_dp_and_macro__ports_3__width_1 (
1987 din0,
1988 din1,
1989 din2,
1990 dout);
1991 input [0:0] din0;
1992 input [0:0] din1;
1993 input [0:0] din2;
1994 output [0:0] dout;
1995
1996
1997
1998
1999
2000
2001and3 #(1) d0_0 (
2002.in0(din0[0:0]),
2003.in1(din1[0:0]),
2004.in2(din2[0:0]),
2005.out(dout[0:0])
2006);
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016endmodule
2017
2018
2019
2020
2021
2022// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2023// also for pass-gate with decoder
2024
2025
2026
2027
2028
2029// any PARAMS parms go into naming of macro
2030
2031module lsu_lmd_dp_mux_macro__mux_aonpe__ports_8__stack_64c__width_51 (
2032 din0,
2033 sel0,
2034 din1,
2035 sel1,
2036 din2,
2037 sel2,
2038 din3,
2039 sel3,
2040 din4,
2041 sel4,
2042 din5,
2043 sel5,
2044 din6,
2045 sel6,
2046 din7,
2047 sel7,
2048 dout);
2049wire buffout0;
2050wire buffout1;
2051wire buffout2;
2052wire buffout3;
2053wire buffout4;
2054wire buffout5;
2055wire buffout6;
2056wire buffout7;
2057
2058 input [50:0] din0;
2059 input sel0;
2060 input [50:0] din1;
2061 input sel1;
2062 input [50:0] din2;
2063 input sel2;
2064 input [50:0] din3;
2065 input sel3;
2066 input [50:0] din4;
2067 input sel4;
2068 input [50:0] din5;
2069 input sel5;
2070 input [50:0] din6;
2071 input sel6;
2072 input [50:0] din7;
2073 input sel7;
2074 output [50:0] dout;
2075
2076
2077
2078
2079
2080cl_dp1_muxbuff8_8x c0_0 (
2081 .in0(sel0),
2082 .in1(sel1),
2083 .in2(sel2),
2084 .in3(sel3),
2085 .in4(sel4),
2086 .in5(sel5),
2087 .in6(sel6),
2088 .in7(sel7),
2089 .out0(buffout0),
2090 .out1(buffout1),
2091 .out2(buffout2),
2092 .out3(buffout3),
2093 .out4(buffout4),
2094 .out5(buffout5),
2095 .out6(buffout6),
2096 .out7(buffout7)
2097);
2098mux8s #(51) d0_0 (
2099 .sel0(buffout0),
2100 .sel1(buffout1),
2101 .sel2(buffout2),
2102 .sel3(buffout3),
2103 .sel4(buffout4),
2104 .sel5(buffout5),
2105 .sel6(buffout6),
2106 .sel7(buffout7),
2107 .in0(din0[50:0]),
2108 .in1(din1[50:0]),
2109 .in2(din2[50:0]),
2110 .in3(din3[50:0]),
2111 .in4(din4[50:0]),
2112 .in5(din5[50:0]),
2113 .in6(din6[50:0]),
2114 .in7(din7[50:0]),
2115.dout(dout[50:0])
2116);
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130endmodule
2131
2132
2133//
2134// buff macro
2135//
2136//
2137
2138
2139
2140
2141
2142module lsu_lmd_dp_buff_macro__stack_64c__width_51 (
2143 din,
2144 dout);
2145 input [50:0] din;
2146 output [50:0] dout;
2147
2148
2149
2150
2151
2152
2153buff #(51) d0_0 (
2154.in(din[50:0]),
2155.out(dout[50:0])
2156);
2157
2158
2159
2160
2161
2162
2163
2164
2165endmodule
2166
2167
2168
2169
2170
2171// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2172// also for pass-gate with decoder
2173
2174
2175
2176
2177
2178// any PARAMS parms go into naming of macro
2179
2180module lsu_lmd_dp_mux_macro__buffsel_none__mux_aonpe__ports_2__stack_64c__width_2 (
2181 din0,
2182 sel0,
2183 din1,
2184 sel1,
2185 dout);
2186 input [1:0] din0;
2187 input sel0;
2188 input [1:0] din1;
2189 input sel1;
2190 output [1:0] dout;
2191
2192
2193
2194
2195
2196mux2s #(2) d0_0 (
2197 .sel0(sel0),
2198 .sel1(sel1),
2199 .in0(din0[1:0]),
2200 .in1(din1[1:0]),
2201.dout(dout[1:0])
2202);
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216endmodule
2217
2218
2219// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2220// also for pass-gate with decoder
2221
2222
2223
2224
2225
2226// any PARAMS parms go into naming of macro
2227
2228module lsu_lmd_dp_mux_macro__dbuff_32x__dmux_4x__mux_aonpe__ports_8__stack_64c__width_15 (
2229 din0,
2230 sel0,
2231 din1,
2232 sel1,
2233 din2,
2234 sel2,
2235 din3,
2236 sel3,
2237 din4,
2238 sel4,
2239 din5,
2240 sel5,
2241 din6,
2242 sel6,
2243 din7,
2244 sel7,
2245 dout);
2246wire buffout0;
2247wire buffout1;
2248wire buffout2;
2249wire buffout3;
2250wire buffout4;
2251wire buffout5;
2252wire buffout6;
2253wire buffout7;
2254
2255 input [14:0] din0;
2256 input sel0;
2257 input [14:0] din1;
2258 input sel1;
2259 input [14:0] din2;
2260 input sel2;
2261 input [14:0] din3;
2262 input sel3;
2263 input [14:0] din4;
2264 input sel4;
2265 input [14:0] din5;
2266 input sel5;
2267 input [14:0] din6;
2268 input sel6;
2269 input [14:0] din7;
2270 input sel7;
2271 output [14:0] dout;
2272
2273
2274
2275
2276
2277cl_dp1_muxbuff8_32x c0_0 (
2278 .in0(sel0),
2279 .in1(sel1),
2280 .in2(sel2),
2281 .in3(sel3),
2282 .in4(sel4),
2283 .in5(sel5),
2284 .in6(sel6),
2285 .in7(sel7),
2286 .out0(buffout0),
2287 .out1(buffout1),
2288 .out2(buffout2),
2289 .out3(buffout3),
2290 .out4(buffout4),
2291 .out5(buffout5),
2292 .out6(buffout6),
2293 .out7(buffout7)
2294);
2295mux8s #(15) d0_0 (
2296 .sel0(buffout0),
2297 .sel1(buffout1),
2298 .sel2(buffout2),
2299 .sel3(buffout3),
2300 .sel4(buffout4),
2301 .sel5(buffout5),
2302 .sel6(buffout6),
2303 .sel7(buffout7),
2304 .in0(din0[14:0]),
2305 .in1(din1[14:0]),
2306 .in2(din2[14:0]),
2307 .in3(din3[14:0]),
2308 .in4(din4[14:0]),
2309 .in5(din5[14:0]),
2310 .in6(din6[14:0]),
2311 .in7(din7[14:0]),
2312.dout(dout[14:0])
2313);
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327endmodule
2328
2329
2330// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2331// also for pass-gate with decoder
2332
2333
2334
2335
2336
2337// any PARAMS parms go into naming of macro
2338
2339module lsu_lmd_dp_mux_macro__mux_aodec__ports_8__width_45 (
2340 din0,
2341 din1,
2342 din2,
2343 din3,
2344 din4,
2345 din5,
2346 din6,
2347 din7,
2348 sel,
2349 dout);
2350wire psel0;
2351wire psel1;
2352wire psel2;
2353wire psel3;
2354wire psel4;
2355wire psel5;
2356wire psel6;
2357wire psel7;
2358
2359 input [44:0] din0;
2360 input [44:0] din1;
2361 input [44:0] din2;
2362 input [44:0] din3;
2363 input [44:0] din4;
2364 input [44:0] din5;
2365 input [44:0] din6;
2366 input [44:0] din7;
2367 input [2:0] sel;
2368 output [44:0] dout;
2369
2370
2371
2372
2373
2374cl_dp1_pdec8_8x c0_0 (
2375 .test(1'b1),
2376 .sel0(sel[0]),
2377 .sel1(sel[1]),
2378 .sel2(sel[2]),
2379 .psel0(psel0),
2380 .psel1(psel1),
2381 .psel2(psel2),
2382 .psel3(psel3),
2383 .psel4(psel4),
2384 .psel5(psel5),
2385 .psel6(psel6),
2386 .psel7(psel7)
2387);
2388
2389mux8s #(45) d0_0 (
2390 .sel0(psel0),
2391 .sel1(psel1),
2392 .sel2(psel2),
2393 .sel3(psel3),
2394 .sel4(psel4),
2395 .sel5(psel5),
2396 .sel6(psel6),
2397 .sel7(psel7),
2398 .in0(din0[44:0]),
2399 .in1(din1[44:0]),
2400 .in2(din2[44:0]),
2401 .in3(din3[44:0]),
2402 .in4(din4[44:0]),
2403 .in5(din5[44:0]),
2404 .in6(din6[44:0]),
2405 .in7(din7[44:0]),
2406.dout(dout[44:0])
2407);
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421endmodule
2422
2423
2424// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2425// also for pass-gate with decoder
2426
2427
2428
2429
2430
2431// any PARAMS parms go into naming of macro
2432
2433module lsu_lmd_dp_mux_macro__left_11__mux_aope__ports_2__stack_64c__width_29 (
2434 din0,
2435 din1,
2436 sel0,
2437 dout);
2438wire psel0;
2439wire psel1;
2440
2441 input [28:0] din0;
2442 input [28:0] din1;
2443 input sel0;
2444 output [28:0] dout;
2445
2446
2447
2448
2449
2450cl_dp1_penc2_8x c0_0 (
2451 .sel0(sel0),
2452 .psel0(psel0),
2453 .psel1(psel1)
2454);
2455
2456mux2s #(29) d0_0 (
2457 .sel0(psel0),
2458 .sel1(psel1),
2459 .in0(din0[28:0]),
2460 .in1(din1[28:0]),
2461.dout(dout[28:0])
2462);
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476endmodule
2477
2478
2479// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2480// also for pass-gate with decoder
2481
2482
2483
2484
2485
2486// any PARAMS parms go into naming of macro
2487
2488module lsu_lmd_dp_mux_macro__left_3__mux_aope__ports_2__stack_64c__width_40 (
2489 din0,
2490 din1,
2491 sel0,
2492 dout);
2493wire psel0;
2494wire psel1;
2495
2496 input [39:0] din0;
2497 input [39:0] din1;
2498 input sel0;
2499 output [39:0] dout;
2500
2501
2502
2503
2504
2505cl_dp1_penc2_8x c0_0 (
2506 .sel0(sel0),
2507 .psel0(psel0),
2508 .psel1(psel1)
2509);
2510
2511mux2s #(40) d0_0 (
2512 .sel0(psel0),
2513 .sel1(psel1),
2514 .in0(din0[39:0]),
2515 .in1(din1[39:0]),
2516.dout(dout[39:0])
2517);
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531endmodule
2532
2533
2534//
2535// buff macro
2536//
2537//
2538
2539
2540
2541
2542
2543module lsu_lmd_dp_buff_macro__width_45 (
2544 din,
2545 dout);
2546 input [44:0] din;
2547 output [44:0] dout;
2548
2549
2550
2551
2552
2553
2554buff #(45) d0_0 (
2555.in(din[44:0]),
2556.out(dout[44:0])
2557);
2558
2559
2560
2561
2562
2563
2564
2565
2566endmodule
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576// any PARAMS parms go into naming of macro
2577
2578module lsu_lmd_dp_msff_macro__stack_64c__width_25 (
2579 din,
2580 clk,
2581 en,
2582 se,
2583 scan_in,
2584 siclk,
2585 soclk,
2586 pce_ov,
2587 stop,
2588 dout,
2589 scan_out);
2590wire l1clk;
2591wire siclk_out;
2592wire soclk_out;
2593wire [23:0] so;
2594
2595 input [24:0] din;
2596
2597
2598 input clk;
2599 input en;
2600 input se;
2601 input scan_in;
2602 input siclk;
2603 input soclk;
2604 input pce_ov;
2605 input stop;
2606
2607
2608
2609 output [24:0] dout;
2610
2611
2612 output scan_out;
2613
2614
2615
2616
2617cl_dp1_l1hdr_8x c0_0 (
2618.l2clk(clk),
2619.pce(en),
2620.aclk(siclk),
2621.bclk(soclk),
2622.l1clk(l1clk),
2623 .se(se),
2624 .pce_ov(pce_ov),
2625 .stop(stop),
2626 .siclk_out(siclk_out),
2627 .soclk_out(soclk_out)
2628);
2629dff #(25) d0_0 (
2630.l1clk(l1clk),
2631.siclk(siclk_out),
2632.soclk(soclk_out),
2633.d(din[24:0]),
2634.si({scan_in,so[23:0]}),
2635.so({so[23:0],scan_out}),
2636.q(dout[24:0])
2637);
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658endmodule
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668//
2669// buff macro
2670//
2671//
2672
2673
2674
2675
2676
2677module lsu_lmd_dp_buff_macro__rep_1__width_64 (
2678 din,
2679 dout);
2680 input [63:0] din;
2681 output [63:0] dout;
2682
2683
2684
2685
2686
2687
2688buff #(64) d0_0 (
2689.in(din[63:0]),
2690.out(dout[63:0])
2691);
2692
2693
2694
2695
2696
2697
2698
2699
2700endmodule
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710// any PARAMS parms go into naming of macro
2711
2712module lsu_lmd_dp_msff_macro__mux_aonpe__ports_5__stack_64c__width_64 (
2713 din0,
2714 sel0,
2715 din1,
2716 sel1,
2717 din2,
2718 sel2,
2719 din3,
2720 sel3,
2721 din4,
2722 sel4,
2723 clk,
2724 en,
2725 se,
2726 scan_in,
2727 siclk,
2728 soclk,
2729 pce_ov,
2730 stop,
2731 dout,
2732 scan_out);
2733wire buffout0;
2734wire buffout1;
2735wire buffout2;
2736wire buffout3;
2737wire buffout4;
2738wire [63:0] muxout;
2739wire l1clk;
2740wire siclk_out;
2741wire soclk_out;
2742wire [62:0] so;
2743
2744 input [63:0] din0;
2745 input sel0;
2746 input [63:0] din1;
2747 input sel1;
2748 input [63:0] din2;
2749 input sel2;
2750 input [63:0] din3;
2751 input sel3;
2752 input [63:0] din4;
2753 input sel4;
2754
2755
2756 input clk;
2757 input en;
2758 input se;
2759 input scan_in;
2760 input siclk;
2761 input soclk;
2762 input pce_ov;
2763 input stop;
2764
2765
2766
2767 output [63:0] dout;
2768
2769
2770 output scan_out;
2771
2772
2773
2774
2775cl_dp1_muxbuff5_8x c1_0 (
2776 .in0(sel0),
2777 .in1(sel1),
2778 .in2(sel2),
2779 .in3(sel3),
2780 .in4(sel4),
2781 .out0(buffout0),
2782 .out1(buffout1),
2783 .out2(buffout2),
2784 .out3(buffout3),
2785 .out4(buffout4)
2786);
2787mux5s #(64) d1_0 (
2788 .sel0(buffout0),
2789 .sel1(buffout1),
2790 .sel2(buffout2),
2791 .sel3(buffout3),
2792 .sel4(buffout4),
2793 .in0(din0[63:0]),
2794 .in1(din1[63:0]),
2795 .in2(din2[63:0]),
2796 .in3(din3[63:0]),
2797 .in4(din4[63:0]),
2798.dout(muxout[63:0])
2799);
2800cl_dp1_l1hdr_8x c0_0 (
2801.l2clk(clk),
2802.pce(en),
2803.aclk(siclk),
2804.bclk(soclk),
2805.l1clk(l1clk),
2806 .se(se),
2807 .pce_ov(pce_ov),
2808 .stop(stop),
2809 .siclk_out(siclk_out),
2810 .soclk_out(soclk_out)
2811);
2812dff #(64) d0_0 (
2813.l1clk(l1clk),
2814.siclk(siclk_out),
2815.soclk(soclk_out),
2816.d(muxout[63:0]),
2817.si({scan_in,so[62:0]}),
2818.so({so[62:0],scan_out}),
2819.q(dout[63:0])
2820);
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841endmodule
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2852// also for pass-gate with decoder
2853
2854
2855
2856
2857
2858// any PARAMS parms go into naming of macro
2859
2860module lsu_lmd_dp_mux_macro__dmux_4x__mux_aonpe__ports_8__stack_64c__width_64 (
2861 din0,
2862 sel0,
2863 din1,
2864 sel1,
2865 din2,
2866 sel2,
2867 din3,
2868 sel3,
2869 din4,
2870 sel4,
2871 din5,
2872 sel5,
2873 din6,
2874 sel6,
2875 din7,
2876 sel7,
2877 dout);
2878wire buffout0;
2879wire buffout1;
2880wire buffout2;
2881wire buffout3;
2882wire buffout4;
2883wire buffout5;
2884wire buffout6;
2885wire buffout7;
2886
2887 input [63:0] din0;
2888 input sel0;
2889 input [63:0] din1;
2890 input sel1;
2891 input [63:0] din2;
2892 input sel2;
2893 input [63:0] din3;
2894 input sel3;
2895 input [63:0] din4;
2896 input sel4;
2897 input [63:0] din5;
2898 input sel5;
2899 input [63:0] din6;
2900 input sel6;
2901 input [63:0] din7;
2902 input sel7;
2903 output [63:0] dout;
2904
2905
2906
2907
2908
2909cl_dp1_muxbuff8_8x c0_0 (
2910 .in0(sel0),
2911 .in1(sel1),
2912 .in2(sel2),
2913 .in3(sel3),
2914 .in4(sel4),
2915 .in5(sel5),
2916 .in6(sel6),
2917 .in7(sel7),
2918 .out0(buffout0),
2919 .out1(buffout1),
2920 .out2(buffout2),
2921 .out3(buffout3),
2922 .out4(buffout4),
2923 .out5(buffout5),
2924 .out6(buffout6),
2925 .out7(buffout7)
2926);
2927mux8s #(64) d0_0 (
2928 .sel0(buffout0),
2929 .sel1(buffout1),
2930 .sel2(buffout2),
2931 .sel3(buffout3),
2932 .sel4(buffout4),
2933 .sel5(buffout5),
2934 .sel6(buffout6),
2935 .sel7(buffout7),
2936 .in0(din0[63:0]),
2937 .in1(din1[63:0]),
2938 .in2(din2[63:0]),
2939 .in3(din3[63:0]),
2940 .in4(din4[63:0]),
2941 .in5(din5[63:0]),
2942 .in6(din6[63:0]),
2943 .in7(din7[63:0]),
2944.dout(dout[63:0])
2945);
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959endmodule
2960
2961
2962//
2963// buff macro
2964//
2965//
2966
2967
2968
2969
2970
2971module lsu_lmd_dp_buff_macro__rep_1__stack_64c__width_64 (
2972 din,
2973 dout);
2974 input [63:0] din;
2975 output [63:0] dout;
2976
2977
2978
2979
2980
2981
2982buff #(64) d0_0 (
2983.in(din[63:0]),
2984.out(dout[63:0])
2985);
2986
2987
2988
2989
2990
2991
2992
2993
2994endmodule
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004// any PARAMS parms go into naming of macro
3005
3006module lsu_lmd_dp_msff_macro__width_64 (
3007 din,
3008 clk,
3009 en,
3010 se,
3011 scan_in,
3012 siclk,
3013 soclk,
3014 pce_ov,
3015 stop,
3016 dout,
3017 scan_out);
3018wire l1clk;
3019wire siclk_out;
3020wire soclk_out;
3021wire [62:0] so;
3022
3023 input [63:0] din;
3024
3025
3026 input clk;
3027 input en;
3028 input se;
3029 input scan_in;
3030 input siclk;
3031 input soclk;
3032 input pce_ov;
3033 input stop;
3034
3035
3036
3037 output [63:0] dout;
3038
3039
3040 output scan_out;
3041
3042
3043
3044
3045cl_dp1_l1hdr_8x c0_0 (
3046.l2clk(clk),
3047.pce(en),
3048.aclk(siclk),
3049.bclk(soclk),
3050.l1clk(l1clk),
3051 .se(se),
3052 .pce_ov(pce_ov),
3053 .stop(stop),
3054 .siclk_out(siclk_out),
3055 .soclk_out(soclk_out)
3056);
3057dff #(64) d0_0 (
3058.l1clk(l1clk),
3059.siclk(siclk_out),
3060.soclk(soclk_out),
3061.d(din[63:0]),
3062.si({scan_in,so[62:0]}),
3063.so({so[62:0],scan_out}),
3064.q(dout[63:0])
3065);
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086endmodule
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096//
3097// buff macro
3098//
3099//
3100
3101
3102
3103
3104
3105module lsu_lmd_dp_buff_macro__left_11__rep_1__stack_64c__width_29 (
3106 din,
3107 dout);
3108 input [28:0] din;
3109 output [28:0] dout;
3110
3111
3112
3113
3114
3115
3116buff #(29) d0_0 (
3117.in(din[28:0]),
3118.out(dout[28:0])
3119);
3120
3121
3122
3123
3124
3125
3126
3127
3128endmodule
3129
3130
3131
3132
3133
3134// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3135// also for pass-gate with decoder
3136
3137
3138
3139
3140
3141// any PARAMS parms go into naming of macro
3142
3143module lsu_lmd_dp_mux_macro__mux_aope__ports_3__width_64 (
3144 din0,
3145 din1,
3146 din2,
3147 sel0,
3148 sel1,
3149 dout);
3150wire psel0;
3151wire psel1;
3152wire psel2;
3153
3154 input [63:0] din0;
3155 input [63:0] din1;
3156 input [63:0] din2;
3157 input sel0;
3158 input sel1;
3159 output [63:0] dout;
3160
3161
3162
3163
3164
3165cl_dp1_penc3_8x c0_0 (
3166 .test(1'b1),
3167 .sel0(sel0),
3168 .sel1(sel1),
3169 .psel0(psel0),
3170 .psel1(psel1),
3171 .psel2(psel2)
3172);
3173
3174mux3s #(64) d0_0 (
3175 .sel0(psel0),
3176 .sel1(psel1),
3177 .sel2(psel2),
3178 .in0(din0[63:0]),
3179 .in1(din1[63:0]),
3180 .in2(din2[63:0]),
3181.dout(dout[63:0])
3182);
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196endmodule
3197
3198
3199// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3200// also for pass-gate with decoder
3201
3202
3203
3204
3205
3206// any PARAMS parms go into naming of macro
3207
3208module lsu_lmd_dp_mux_macro__mux_aope__ports_2__width_64 (
3209 din0,
3210 din1,
3211 sel0,
3212 dout);
3213wire psel0;
3214wire psel1;
3215
3216 input [63:0] din0;
3217 input [63:0] din1;
3218 input sel0;
3219 output [63:0] dout;
3220
3221
3222
3223
3224
3225cl_dp1_penc2_8x c0_0 (
3226 .sel0(sel0),
3227 .psel0(psel0),
3228 .psel1(psel1)
3229);
3230
3231mux2s #(64) d0_0 (
3232 .sel0(psel0),
3233 .sel1(psel1),
3234 .in0(din0[63:0]),
3235 .in1(din1[63:0]),
3236.dout(dout[63:0])
3237);
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251endmodule
3252
3253
3254
3255
3256
3257
3258// any PARAMS parms go into naming of macro
3259
3260module lsu_lmd_dp_msff_macro__mux_aope__ports_2__width_64 (
3261 din0,
3262 din1,
3263 sel0,
3264 clk,
3265 en,
3266 se,
3267 scan_in,
3268 siclk,
3269 soclk,
3270 pce_ov,
3271 stop,
3272 dout,
3273 scan_out);
3274wire psel0;
3275wire psel1;
3276wire [63:0] muxout;
3277wire l1clk;
3278wire siclk_out;
3279wire soclk_out;
3280wire [62:0] so;
3281
3282 input [63:0] din0;
3283 input [63:0] din1;
3284 input sel0;
3285
3286
3287 input clk;
3288 input en;
3289 input se;
3290 input scan_in;
3291 input siclk;
3292 input soclk;
3293 input pce_ov;
3294 input stop;
3295
3296
3297
3298 output [63:0] dout;
3299
3300
3301 output scan_out;
3302
3303
3304
3305
3306cl_dp1_penc2_8x c1_0 (
3307 .sel0(sel0),
3308 .psel0(psel0),
3309 .psel1(psel1)
3310);
3311
3312mux2s #(64) d1_0 (
3313 .sel0(psel0),
3314 .sel1(psel1),
3315 .in0(din0[63:0]),
3316 .in1(din1[63:0]),
3317.dout(muxout[63:0])
3318);
3319cl_dp1_l1hdr_8x c0_0 (
3320.l2clk(clk),
3321.pce(en),
3322.aclk(siclk),
3323.bclk(soclk),
3324.l1clk(l1clk),
3325 .se(se),
3326 .pce_ov(pce_ov),
3327 .stop(stop),
3328 .siclk_out(siclk_out),
3329 .soclk_out(soclk_out)
3330);
3331dff #(64) d0_0 (
3332.l1clk(l1clk),
3333.siclk(siclk_out),
3334.soclk(soclk_out),
3335.d(muxout[63:0]),
3336.si({scan_in,so[62:0]}),
3337.so({so[62:0],scan_out}),
3338.q(dout[63:0])
3339);
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360endmodule
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370//
3371// buff macro
3372//
3373//
3374
3375
3376
3377
3378
3379module lsu_lmd_dp_buff_macro__width_11 (
3380 din,
3381 dout);
3382 input [10:0] din;
3383 output [10:0] dout;
3384
3385
3386
3387
3388
3389
3390buff #(11) d0_0 (
3391.in(din[10:0]),
3392.out(dout[10:0])
3393);
3394
3395
3396
3397
3398
3399
3400
3401
3402endmodule
3403
3404
3405
3406
3407
3408// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3409// also for pass-gate with decoder
3410
3411
3412
3413
3414
3415// any PARAMS parms go into naming of macro
3416
3417module lsu_lmd_dp_mux_macro__mux_pgpe__ports_2__width_64 (
3418 din0,
3419 din1,
3420 sel0,
3421 dout);
3422wire psel0_unused;
3423wire psel1;
3424
3425 input [63:0] din0;
3426 input [63:0] din1;
3427 input sel0;
3428 output [63:0] dout;
3429
3430
3431
3432
3433
3434cl_dp1_penc2_8x c0_0 (
3435 .sel0(sel0),
3436 .psel0(psel0_unused),
3437 .psel1(psel1)
3438);
3439
3440mux2e #(64) d0_0 (
3441 .sel(psel1),
3442 .in0(din0[63:0]),
3443 .in1(din1[63:0]),
3444.dout(dout[63:0])
3445);
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459endmodule
3460