Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / mmu / rtl / mmu_htd_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: mmu_htd_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 mmu_htd_dp (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 spc_aclk,
40 spc_bclk,
41 tcu_scan_en,
42 tcu_muxtest,
43 tcu_dectest,
44 scan_out,
45 htc_core_running,
46 htc_m1_clken,
47 htc_hw3_clken,
48 htc_hw4_clken,
49 asd0_tag_access,
50 asd1_tag_access,
51 htc_tsbrd_valid_m0,
52 asi_data_in_real,
53 ase_lsu_va_w,
54 lsu_context_b,
55 lsu_tlu_dsfsr_ct_b,
56 l15_spc_data1,
57 l15_mmu_cpkt,
58 l15_mmu_grant,
59 htc_zero_ctx_m2,
60 htc_ranotpa_hw4,
61 htc_pid0_m0,
62 htc_pid1_m0,
63 htc_thr_prevalid_hw3,
64 htc_va_rd_m2_in,
65 htc_l15_en,
66 htc_vld_tsbptr_m2,
67 trs_null_st,
68 htc_mra_sel_0,
69 htc_sel_mra_lo,
70 mra0_data,
71 mra1_data,
72 htc_conf_index_m2,
73 htc_upd_pred_idx_hw2,
74 htc_upd_grp,
75 htc_upd_grp_x,
76 htc_new_pred_bit,
77 htc_wrpred0_hw2,
78 htc_wrpred1_hw2,
79 htc_wrpred2_hw2,
80 htc_wrpred3_hw2,
81 htc_wr_q0new_nogrant,
82 htc_wr_q0new_grant,
83 htc_wr_q1new,
84 htc_shift_q1_grant,
85 htc_wr_m3new,
86 htc_wr_m3q0,
87 htc_rd_tteq,
88 tlu_iht_request,
89 tlu_dht_request,
90 tlu_mmu_tl_gt_0,
91 tlu_pc_0_w,
92 tlu_pc_1_w,
93 asd_i_p_ctx_0_0,
94 asd_i_p_ctx_0_1,
95 asd_i_p_ctx_0_2,
96 asd_i_p_ctx_0_3,
97 asd_i_p_ctx_0_4,
98 asd_i_p_ctx_0_5,
99 asd_i_p_ctx_0_6,
100 asd_i_p_ctx_0_7,
101 htd_range_en_hw4,
102 htd_zeroctx_hw1,
103 htd_usectx0_hw1,
104 htd_usectx1_hw1,
105 htd_ranotpa_hw1,
106 htd_ptr_hit0_hw1,
107 htd_ptr_hit1_hw1,
108 htd_ptr_hit2_hw1,
109 htd_ctx_hit_hw1,
110 htd_tte_ep_hw1,
111 htd_dmiss_hw1,
112 htd_ra2pa_lower_hit_hw4,
113 htd_ra2pa_upper_hit_hw4,
114 htd_razero_hw4,
115 htd_tagaccess_din,
116 htd_tlbdatain_din,
117 mmu_l15_addr,
118 htd_dmiss,
119 htd_sec_ctx,
120 htd_pred0_idx_m0,
121 htd_pred1_idx_m0,
122 htd_pred0_m0,
123 htd_pred1_m0,
124 htd_tsbptr,
125 htd_zeroctx_m0);
126wire stop;
127wire test;
128wire se;
129wire pce_ov;
130wire siclk;
131wire soclk;
132wire [7:0] tlu_mmu_tl_gt_0_;
133wire [7:0] tlb_miss_m;
134wire reg_tlbmiss_w30_scanin;
135wire reg_tlbmiss_w30_scanout;
136wire [7:0] va_rd_m2;
137wire [7:0] tlb_miss_m0;
138wire lsu_sec_ctx_w;
139wire [12:0] lsu_context_w;
140wire [12:0] i_context_0;
141wire [12:0] i_context_1;
142wire [12:0] i_context_2;
143wire [12:0] i_context_3;
144wire [12:0] i_context_4;
145wire [12:0] i_context_5;
146wire [12:0] i_context_6;
147wire [12:0] i_context_7;
148wire reg0_vactx_w50_scanin;
149wire reg0_vactx_w50_scanout;
150wire [47:13] thr0_va_ff;
151wire [12:0] htd_thr0_ctx_ff;
152wire reg1_vactx_w50_scanin;
153wire reg1_vactx_w50_scanout;
154wire [47:13] thr1_va_ff;
155wire [12:0] htd_thr1_ctx_ff;
156wire reg2_vactx_w50_scanin;
157wire reg2_vactx_w50_scanout;
158wire [47:13] thr2_va_ff;
159wire [12:0] htd_thr2_ctx_ff;
160wire reg3_vactx_w50_scanin;
161wire reg3_vactx_w50_scanout;
162wire [47:13] thr3_va_ff;
163wire [12:0] htd_thr3_ctx_ff;
164wire reg4_vactx_w50_scanin;
165wire reg4_vactx_w50_scanout;
166wire [47:13] thr4_va_ff;
167wire [12:0] htd_thr4_ctx_ff;
168wire reg5_vactx_w50_scanin;
169wire reg5_vactx_w50_scanout;
170wire [47:13] thr5_va_ff;
171wire [12:0] htd_thr5_ctx_ff;
172wire reg6_vactx_w50_scanin;
173wire reg6_vactx_w50_scanout;
174wire [47:13] thr6_va_ff;
175wire [12:0] htd_thr6_ctx_ff;
176wire reg7_vactx_w50_scanin;
177wire reg7_vactx_w50_scanout;
178wire [47:13] thr7_va_ff;
179wire [12:0] htd_thr7_ctx_ff;
180wire [7:0] htd_zeroctx_m0_prebuf;
181wire [47:28] va0_m0;
182wire [12:0] ctx0_m0;
183wire [47:28] va1_m0;
184wire [12:0] ctx1_m0;
185wire [2:0] pid0_m0;
186wire [2:0] pid1_m0;
187wire prty0_5_1;
188wire prty0_5_0;
189wire prty0_4_1;
190wire prty0_4_0;
191wire prty0_3_1;
192wire prty0_3_0;
193wire prty0_2_1;
194wire prty0_2_0;
195wire prty0_1_1;
196wire prty0_1_0;
197wire prty0_0_1;
198wire prty0_0_0;
199wire prty1_5_1;
200wire prty1_5_0;
201wire prty1_4_1;
202wire prty1_4_0;
203wire prty1_3_1;
204wire prty1_3_0;
205wire prty1_2_1;
206wire prty1_2_0;
207wire prty1_1_1;
208wire prty1_1_0;
209wire prty1_0_1;
210wire prty1_0_0;
211wire [81:0] mra_data;
212wire [63:0] tsb_conf;
213wire reg_tsbconf_m2_w39_scanin;
214wire reg_tsbconf_m2_w39_scanout;
215wire [63:0] tsb_conf_m2;
216wire sun4v_unused;
217wire hwtwen_unused;
218wire [6:0] cfg_ctlpkt_m2;
219wire [6:0] thrx_cfg3_ctlpkt;
220wire [6:0] thrx_cfg2_ctlpkt;
221wire [6:0] thrx_cfg1_ctlpkt;
222wire [6:0] thrx_cfg0_ctlpkt;
223wire [6:0] thrx_cfg3_ctlpkt_in;
224wire [6:0] thrx_cfg2_ctlpkt_in;
225wire [6:0] thrx_cfg1_ctlpkt_in;
226wire [6:0] thrx_cfg0_ctlpkt_in;
227wire reg0_tsbcfg_w28_scanin;
228wire reg0_tsbcfg_w28_scanout;
229wire [6:0] thr0_cfg3_ctlpkt;
230wire [6:0] thr0_cfg2_ctlpkt;
231wire [6:0] thr0_cfg1_ctlpkt;
232wire [6:0] thr0_cfg0_ctlpkt;
233wire reg1_tsbcfg_w28_scanin;
234wire reg1_tsbcfg_w28_scanout;
235wire [6:0] thr1_cfg3_ctlpkt;
236wire [6:0] thr1_cfg2_ctlpkt;
237wire [6:0] thr1_cfg1_ctlpkt;
238wire [6:0] thr1_cfg0_ctlpkt;
239wire reg2_tsbcfg_w28_scanin;
240wire reg2_tsbcfg_w28_scanout;
241wire [6:0] thr2_cfg3_ctlpkt;
242wire [6:0] thr2_cfg2_ctlpkt;
243wire [6:0] thr2_cfg1_ctlpkt;
244wire [6:0] thr2_cfg0_ctlpkt;
245wire reg3_tsbcfg_w28_scanin;
246wire reg3_tsbcfg_w28_scanout;
247wire [6:0] thr3_cfg3_ctlpkt;
248wire [6:0] thr3_cfg2_ctlpkt;
249wire [6:0] thr3_cfg1_ctlpkt;
250wire [6:0] thr3_cfg0_ctlpkt;
251wire reg4_tsbcfg_w28_scanin;
252wire reg4_tsbcfg_w28_scanout;
253wire [6:0] thr4_cfg3_ctlpkt;
254wire [6:0] thr4_cfg2_ctlpkt;
255wire [6:0] thr4_cfg1_ctlpkt;
256wire [6:0] thr4_cfg0_ctlpkt;
257wire reg5_tsbcfg_w28_scanin;
258wire reg5_tsbcfg_w28_scanout;
259wire [6:0] thr5_cfg3_ctlpkt;
260wire [6:0] thr5_cfg2_ctlpkt;
261wire [6:0] thr5_cfg1_ctlpkt;
262wire [6:0] thr5_cfg0_ctlpkt;
263wire reg6_tsbcfg_w28_scanin;
264wire reg6_tsbcfg_w28_scanout;
265wire [6:0] thr6_cfg3_ctlpkt;
266wire [6:0] thr6_cfg2_ctlpkt;
267wire [6:0] thr6_cfg1_ctlpkt;
268wire [6:0] thr6_cfg0_ctlpkt;
269wire reg7_tsbcfg_w28_scanin;
270wire reg7_tsbcfg_w28_scanout;
271wire [6:0] thr7_cfg3_ctlpkt;
272wire [6:0] thr7_cfg2_ctlpkt;
273wire [6:0] thr7_cfg1_ctlpkt;
274wire [6:0] thr7_cfg0_ctlpkt;
275wire [47:13] htd_va_prebuf;
276wire [47:13] htd_va;
277wire [39:13] htd_cfg_tsbbase;
278wire [6:4] htd_pgsz_m2;
279wire [3:0] htd_tsbsz_m2;
280wire [23:0] vpn_m2;
281wire [35:0] tsbptr0;
282wire [35:0] tsbptr1;
283wire [35:0] htd_tsbptr_m2;
284wire [39:4] l15_addr;
285wire reg_q1addr_w36_scanin;
286wire reg_q1addr_w36_scanout;
287wire [39:4] q1_addr;
288wire [39:4] q0_addr;
289wire [39:4] q0_addr_in_nogrant;
290wire reg_q0addr_ng_w36_scanin;
291wire reg_q0addr_ng_w36_scanout;
292wire [39:4] q0_addr_nogrant;
293wire [39:4] q0_addr_in_grant;
294wire reg_q0addr_g_w36_scanin;
295wire reg_q0addr_g_w36_scanout;
296wire l15_mmu_grant_lat;
297wire [39:4] q0_addr_grant;
298wire [39:4] mmu_l15_addr_in;
299wire reg_l15addr_w36_scanin;
300wire reg_l15addr_w36_scanout;
301wire tcu_muxtest_rep0;
302wire htd_dmiss_hw0;
303wire [47:22] va_hw0;
304wire [12:0] ctx_hw0;
305wire reg_vpn_w40_scanin;
306wire reg_vpn_w40_scanout;
307wire [47:22] va_hw1;
308wire [12:0] ctx_hw1;
309wire tcu_muxtest_rep1;
310wire [6:0] cfg3_ctlpkt_hw0;
311wire [6:0] cfg2_ctlpkt_hw0;
312wire [6:0] cfg1_ctlpkt_hw0;
313wire [6:0] cfg0_ctlpkt_hw0;
314wire reg_tsbcfg_hw1_w30_scanin;
315wire reg_tsbcfg_hw1_w30_scanout;
316wire [4:3] l15_mmu_cpkt_hw1;
317wire [6:0] cfg3_ctlpkt_hw1;
318wire [6:0] cfg2_ctlpkt_hw1;
319wire [6:0] cfg1_ctlpkt_hw1;
320wire [6:0] cfg0_ctlpkt_hw1;
321wire tcu_muxtest_rep2;
322wire [6:0] cfg_ctlpkt_hw1;
323wire reg_l15vahw1_w36_scanin;
324wire reg_l15vahw1_w36_scanout;
325wire [63:0] htd_tte_data_hw1;
326wire [63:22] htd_tte_tag_ptr_hw1;
327wire reg_l15ctx_w34_scanin;
328wire reg_l15ctx_w34_scanout;
329wire [2:0] htd_tte_rsvd0_hw1;
330wire [5:0] htd_tte_rsvd1_hw1;
331wire [60:48] htd_tte_tag_ctx_hw1;
332wire reg_l15data_w49_scanin;
333wire reg_l15data_w49_scanout;
334wire tte_data_valid;
335wire [3:0] tte_pgsz_hw1;
336wire [2:0] tsb_pgsz_hw1;
337wire [38:0] tte_data_hw1;
338wire [47:22] thrx_vpn_hw1;
339wire [63:22] tte_tag_hw1;
340wire [2:0] tte_rsvdx;
341wire tte_rsvd;
342wire [3:0] tte_pgsz_hw1_;
343wire [2:2] pgsize_illegal_;
344wire [2:0] pgsize_illegal;
345wire pg_illegal_1_0;
346wire pg_illegal_1_1;
347wire pg_illegal_1_2;
348wire pg_illegal_0_0;
349wire pg_illegal_0_1;
350wire htd_razero_hw1;
351wire [38:0] minbuf_tte_data_hw1;
352wire e0_tte_reg_w40_scanin;
353wire e0_tte_reg_w40_scanout;
354wire [39:0] thr0_tte_data_hw2;
355wire e1_tte_reg_w40_scanin;
356wire e1_tte_reg_w40_scanout;
357wire [39:0] thr1_tte_data_hw2;
358wire e2_tte_reg_w40_scanin;
359wire e2_tte_reg_w40_scanout;
360wire [39:0] thr2_tte_data_hw2;
361wire e3_tte_reg_w40_scanin;
362wire e3_tte_reg_w40_scanout;
363wire [39:0] thr3_tte_data_hw2;
364wire e4_tte_reg_w40_scanin;
365wire e4_tte_reg_w40_scanout;
366wire [39:0] thr4_tte_data_hw2;
367wire e5_tte_reg_w40_scanin;
368wire e5_tte_reg_w40_scanout;
369wire [39:0] thr5_tte_data_hw2;
370wire e6_tte_reg_w40_scanin;
371wire e6_tte_reg_w40_scanout;
372wire [39:0] thr6_tte_data_hw2;
373wire e7_tte_reg_w40_scanin;
374wire e7_tte_reg_w40_scanout;
375wire [39:0] thr7_tte_data_hw2;
376wire pred_row0_w32_scanin;
377wire pred_row0_w32_scanout;
378wire [31:0] htd_newpred_hw2;
379wire [31:0] pred_row0;
380wire pred_row1_w32_scanin;
381wire pred_row1_w32_scanout;
382wire [31:0] pred_row1;
383wire pred_row2_w32_scanin;
384wire pred_row2_w32_scanout;
385wire [31:0] pred_row2;
386wire pred_row3_w32_scanin;
387wire pred_row3_w32_scanout;
388wire [31:0] pred_row3;
389wire [15:0] htd_pred0_m0_prebuf;
390wire [15:0] htd_pred1_m0_prebuf;
391wire [31:0] htd_pred_hw2;
392wire [31:0] new_row;
393wire [31:0] old_row;
394wire [31:0] new_pred_row;
395wire [39:0] tte_data_hw3;
396wire [27:13] ra_mask_hw3;
397wire reg_ramaskhw4_w15_scanin;
398wire reg_ramaskhw4_w15_scanout;
399wire [27:13] htc_ra_mask_hw4;
400wire reg_ttedatahw4_w40_scanin;
401wire reg_ttedatahw4_w40_scanout;
402wire [39:0] tte_data_hw4;
403wire reg_offsethw4_w27_scanin;
404wire reg_offsethw4_w27_scanout;
405wire [39:13] offset0_hw4;
406wire reg_rangehw4_w55_scanin;
407wire reg_rangehw4_w55_scanout;
408wire [63:0] range0_hw4;
409wire [39:13] ra_mask_hw4;
410wire [39:13] ra_mask_hw4_;
411wire [39:13] tte_lo;
412wire [39:13] tte_hi;
413wire ra_to_pa_upper_hit_;
414wire [39:13] tte_lo_;
415wire ra_to_pa_lower_hit_;
416wire [39:13] rg0_hi_;
417wire [39:13] rg0_lo;
418wire [31:0] sum0_unused;
419wire [31:0] sum1_unused;
420wire cout0;
421wire [39:13] pa_0_din;
422wire carry0_unused;
423wire sum_unused;
424wire [34:8] htd_tlbdatain;
425wire [38:0] htd_tlbdatain_hw4;
426wire reg_tlbdatainhw5_w39_scanin;
427wire reg_tlbdatainhw5_w39_scanout;
428wire [38:0] htd_tlbdatain_hw5;
429wire [47:0] htd_tagaccess_din_prebuf;
430wire lsu_tlu_dsfsr_ct_b_1_unused;
431wire [25:0] l15_spc_data1_unused;
432wire l15_mmu_cpkt_unused;
433
434
435input l2clk;
436input scan_in;
437input tcu_pce_ov; // scan signals
438input spc_aclk;
439input spc_bclk;
440input tcu_scan_en;
441input tcu_muxtest;
442input tcu_dectest;
443
444output scan_out;
445
446input [7:0] htc_core_running;
447input htc_m1_clken;
448input htc_hw3_clken;
449input htc_hw4_clken;
450
451// tsbptr rd interface
452input [47:0] asd0_tag_access;
453input [47:0] asd1_tag_access;
454input [7:0] htc_tsbrd_valid_m0;
455
456
457input asi_data_in_real;
458input [47:13] ase_lsu_va_w;
459input [12:0] lsu_context_b;
460input [1:0] lsu_tlu_dsfsr_ct_b;
461
462
463input [127:0] l15_spc_data1; // 16 bytes of return data from L2
464input [8:3] l15_mmu_cpkt; // Control part of cpx packet
465input l15_mmu_grant;
466
467input htc_zero_ctx_m2;
468input htc_ranotpa_hw4;
469
470input [2:0] htc_pid0_m0;
471input [2:0] htc_pid1_m0;
472
473
474input [7:0] htc_thr_prevalid_hw3;
475input [7:0] htc_va_rd_m2_in;
476
477
478
479input htc_l15_en;
480input [7:0] htc_vld_tsbptr_m2;
481input [7:0] trs_null_st;
482input htc_mra_sel_0;
483input htc_sel_mra_lo;
484input [81:0] mra0_data;
485input [81:0] mra1_data;
486input [1:0] htc_conf_index_m2;
487
488input [5:3] htc_upd_pred_idx_hw2;
489input [7:0] htc_upd_grp;
490input [7:0] htc_upd_grp_x;
491input [1:0] htc_new_pred_bit;
492
493
494
495input htc_wrpred0_hw2;
496input htc_wrpred1_hw2;
497input htc_wrpred2_hw2;
498input htc_wrpred3_hw2;
499
500
501
502input htc_wr_q0new_nogrant;
503input htc_wr_q0new_grant;
504input htc_wr_q1new;
505input htc_shift_q1_grant;
506input htc_wr_m3new;
507input htc_wr_m3q0;
508
509
510input [7:0] htc_rd_tteq;
511
512input [7:0] tlu_iht_request;
513input [7:0] tlu_dht_request;
514input [7:0] tlu_mmu_tl_gt_0; // zero context, TL > 0
515input [47:13] tlu_pc_0_w; // PC for instruction in TG0
516input [47:13] tlu_pc_1_w; // PC for instruction in TG1
517
518input [12:0] asd_i_p_ctx_0_0; //Context register value per thread for Imiss
519input [12:0] asd_i_p_ctx_0_1;
520input [12:0] asd_i_p_ctx_0_2;
521input [12:0] asd_i_p_ctx_0_3;
522input [12:0] asd_i_p_ctx_0_4;
523input [12:0] asd_i_p_ctx_0_5;
524input [12:0] asd_i_p_ctx_0_6;
525input [12:0] asd_i_p_ctx_0_7;
526
527
528//input htc_thr0_tte_hw1;
529//input htc_thr1_tte_hw1;
530//input htc_thr2_tte_hw1;
531//input htc_thr3_tte_hw1;
532//input htc_thr4_tte_hw1;
533//input htc_thr5_tte_hw1;
534//input htc_thr6_tte_hw1;
535
536
537output htd_range_en_hw4;
538output htd_zeroctx_hw1;
539output htd_usectx0_hw1;
540output htd_usectx1_hw1;
541output htd_ranotpa_hw1;
542output htd_ptr_hit0_hw1;
543output htd_ptr_hit1_hw1;
544output htd_ptr_hit2_hw1;
545output htd_ctx_hit_hw1;
546output htd_tte_ep_hw1;
547output htd_dmiss_hw1;
548
549
550output htd_ra2pa_lower_hit_hw4;
551output htd_ra2pa_upper_hit_hw4;
552output htd_razero_hw4;
553output [47:0] htd_tagaccess_din;
554output [38:0] htd_tlbdatain_din;
555output [39:4] mmu_l15_addr;
556output [7:0] htd_dmiss;
557output [7:0] htd_sec_ctx;
558
559
560output [5:0] htd_pred0_idx_m0;
561output [5:0] htd_pred1_idx_m0;
562
563output [15:0] htd_pred0_m0; // read to predict
564output [15:0] htd_pred1_m0; // read to predict
565
566
567
568output [39:4] htd_tsbptr;
569output [7:0] htd_zeroctx_m0;
570
571
572
573//output htd_ra2pa_lower_hit_1;
574//output htd_ra2pa_upper_hit_1;
575//output [039:013] htd_pa_1;
576//Notes:
577//1). For a particular TSB_Size, with page size =5, setting tsb_size > 11
578// needs VA greater than 48 bits and is a programming error.
579//2). For page size 4, setting TSB_Size to 5 needs 49 bit VA which is an
580// error. Check whether page-size 4 is used or reserved.
581// Niagara PRM has only four page sizes (page-size = 2 and 4 are reserved)
582
583assign stop = 1'b0;
584// assign muxtst = tcu_muxtest;
585assign test = tcu_dectest ;
586
587mmu_htd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 test_rep0 (
588 .din ({tcu_scan_en,tcu_pce_ov,spc_aclk,spc_bclk}),
589 .dout({se,pce_ov,siclk,soclk})
590);
591
592
593/////////////////////////////////////////////////////////////////////
594// TTE Request Queue (W)/M
595// MUX the incoming TLB miss request and latch it in 8 entry queue
596// For each thread
597// i_context[12:0] = asd_i_p_ctx_0[12:0] & {13{~tlu_mmu_tl_gt_0}}
598/////////////////////////////////////////////////////////////////////
599mmu_htd_dp_inv_macro__width_8 inv_tgt_z_w8
600(
601 .din (tlu_mmu_tl_gt_0[7:0]),
602 .dout(tlu_mmu_tl_gt_0_[7:0])
603 );
604
605mmu_htd_dp_or_macro__ports_2__width_8 or1_w8 (
606 .din0({tlu_iht_request[7:0]}),
607 .din1({tlu_dht_request[7:0]}),
608 .dout({tlb_miss_m[7:0]})
609);
610
611/////////////////////////////////////////////////////////////////////
612// Flop inputs from LSU (B)
613// => lsu VA and CTX are in B cycle, while I see tlu_dht_request in W cycle.
614/////////////////////////////////////////////////////////////////////
615mmu_htd_dp_msff_macro__stack_50c__width_30 reg_tlbmiss_w30
616(
617 .scan_in(reg_tlbmiss_w30_scanin),
618 .scan_out(reg_tlbmiss_w30_scanout),
619 .clk (l2clk),
620 .en (1'b1),
621 .din ({htc_va_rd_m2_in[7:0], tlb_miss_m[7:0], lsu_tlu_dsfsr_ct_b[0], lsu_context_b[12:0]}),
622 .dout ({va_rd_m2[7:0], tlb_miss_m0[7:0], lsu_sec_ctx_w, lsu_context_w[12:0]}),
623 .se(se),
624 .siclk(siclk),
625 .soclk(soclk),
626 .pce_ov(pce_ov),
627 .stop(stop)
628 );
629
630
631mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx0_w13
632(.din0(asd_i_p_ctx_0_0[12:0]),
633 .din1({13{tlu_mmu_tl_gt_0_[0]}}),
634 .dout(i_context_0[12:0])
635 );
636
637mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx1_w13
638(.din0(asd_i_p_ctx_0_1[12:0]),
639 .din1({13{tlu_mmu_tl_gt_0_[1]}}),
640 .dout(i_context_1[12:0])
641 );
642
643mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx2_w13
644(.din0(asd_i_p_ctx_0_2[12:0]),
645 .din1({13{tlu_mmu_tl_gt_0_[2]}}),
646 .dout(i_context_2[12:0])
647 );
648
649mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx3_w13
650(.din0(asd_i_p_ctx_0_3[12:0]),
651 .din1({13{tlu_mmu_tl_gt_0_[3]}}),
652 .dout(i_context_3[12:0])
653 );
654
655mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx4_w13
656(.din0(asd_i_p_ctx_0_4[12:0]),
657 .din1({13{tlu_mmu_tl_gt_0_[4]}}),
658 .dout(i_context_4[12:0])
659 );
660
661mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx5_w13
662(.din0(asd_i_p_ctx_0_5[12:0]),
663 .din1({13{tlu_mmu_tl_gt_0_[5]}}),
664 .dout(i_context_5[12:0])
665 );
666
667mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx6_w13
668(.din0(asd_i_p_ctx_0_6[12:0]),
669 .din1({13{tlu_mmu_tl_gt_0_[6]}}),
670 .dout(i_context_6[12:0])
671 );
672
673mmu_htd_dp_and_macro__stack_50c__width_13 and_ictx7_w13
674(.din0(asd_i_p_ctx_0_7[12:0]),
675 .din1({13{tlu_mmu_tl_gt_0_[7]}}),
676 .dout(i_context_7[12:0])
677 );
678
679// Mux ITLB/DTLB/TSBPTR read requests
680
681mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg0_vactx_w50 (
682 .scan_in(reg0_vactx_w50_scanin),
683 .scan_out(reg0_vactx_w50_scanout),
684 .clk (l2clk),
685 .en (htc_core_running[0]),
686 .din0({1'b0, 1'b0, tlu_pc_0_w[47:13], i_context_0[12:0]}),
687 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
688 .din2({1'b0, 1'b0, asd0_tag_access[47:0]}),
689 .din3({htd_sec_ctx[0], htd_dmiss[0], thr0_va_ff[47:13], htd_thr0_ctx_ff[12:0]}),
690 .sel0({tlu_iht_request[0]}),
691 .sel1({tlu_dht_request[0]}),
692 .sel2({htc_tsbrd_valid_m0[0]}),
693 .dout({htd_sec_ctx[0], htd_dmiss[0], thr0_va_ff[47:13], htd_thr0_ctx_ff[12:0]}),
694 .se(se),
695 .siclk(siclk),
696 .soclk(soclk),
697 .pce_ov(pce_ov),
698 .stop(stop)
699);
700
701mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg1_vactx_w50 (
702 .scan_in(reg1_vactx_w50_scanin),
703 .scan_out(reg1_vactx_w50_scanout),
704 .clk (l2clk),
705 .en (htc_core_running[1]),
706 .din0({1'b0, 1'b0, tlu_pc_0_w[47:13], i_context_1[12:0]}),
707 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
708 .din2({1'b0, 1'b0, asd0_tag_access[47:0]}),
709 .din3({htd_sec_ctx[1], htd_dmiss[1], thr1_va_ff[47:13], htd_thr1_ctx_ff[12:0]}),
710 .sel0({tlu_iht_request[1]}),
711 .sel1({tlu_dht_request[1]}),
712 .sel2({htc_tsbrd_valid_m0[1]}),
713 .dout({htd_sec_ctx[1], htd_dmiss[1], thr1_va_ff[47:13], htd_thr1_ctx_ff[12:0]}),
714 .se(se),
715 .siclk(siclk),
716 .soclk(soclk),
717 .pce_ov(pce_ov),
718 .stop(stop)
719);
720
721mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg2_vactx_w50 (
722 .scan_in(reg2_vactx_w50_scanin),
723 .scan_out(reg2_vactx_w50_scanout),
724 .clk (l2clk),
725 .en (htc_core_running[2]),
726 .din0({1'b0, 1'b0, tlu_pc_0_w[47:13], i_context_2[12:0]}),
727 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
728 .din2({1'b0, 1'b0, asd0_tag_access[47:0]}),
729 .din3({htd_sec_ctx[2], htd_dmiss[2], thr2_va_ff[47:13], htd_thr2_ctx_ff[12:0]}),
730 .sel0({tlu_iht_request[2]}),
731 .sel1({tlu_dht_request[2]}),
732 .sel2({htc_tsbrd_valid_m0[2]}),
733 .dout({htd_sec_ctx[2], htd_dmiss[2], thr2_va_ff[47:13], htd_thr2_ctx_ff[12:0]}),
734 .se(se),
735 .siclk(siclk),
736 .soclk(soclk),
737 .pce_ov(pce_ov),
738 .stop(stop)
739);
740
741mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg3_vactx_w50 (
742 .scan_in(reg3_vactx_w50_scanin),
743 .scan_out(reg3_vactx_w50_scanout),
744 .clk (l2clk),
745 .en (htc_core_running[3]),
746 .din0({1'b0, 1'b0, tlu_pc_0_w[47:13], i_context_3[12:0]}),
747 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
748 .din2({1'b0, 1'b0, asd0_tag_access[47:0]}),
749 .din3({htd_sec_ctx[3], htd_dmiss[3], thr3_va_ff[47:13], htd_thr3_ctx_ff[12:0]}),
750 .sel0({tlu_iht_request[3]}),
751 .sel1({tlu_dht_request[3]}),
752 .sel2({htc_tsbrd_valid_m0[3]}),
753 .dout({htd_sec_ctx[3], htd_dmiss[3], thr3_va_ff[47:13], htd_thr3_ctx_ff[12:0]}),
754 .se(se),
755 .siclk(siclk),
756 .soclk(soclk),
757 .pce_ov(pce_ov),
758 .stop(stop)
759);
760
761mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg4_vactx_w50 (
762 .scan_in(reg4_vactx_w50_scanin),
763 .scan_out(reg4_vactx_w50_scanout),
764 .clk (l2clk),
765 .en (htc_core_running[4]),
766 .din0({1'b0, 1'b0, tlu_pc_1_w[47:13], i_context_4[12:0]}),
767 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
768 .din2({1'b0, 1'b0, asd1_tag_access[47:0]}),
769 .din3({htd_sec_ctx[4], htd_dmiss[4], thr4_va_ff[47:13], htd_thr4_ctx_ff[12:0]}),
770 .sel0({tlu_iht_request[4]}),
771 .sel1({tlu_dht_request[4]}),
772 .sel2({htc_tsbrd_valid_m0[4]}),
773 .dout({htd_sec_ctx[4], htd_dmiss[4], thr4_va_ff[47:13], htd_thr4_ctx_ff[12:0]}),
774 .se(se),
775 .siclk(siclk),
776 .soclk(soclk),
777 .pce_ov(pce_ov),
778 .stop(stop)
779);
780
781mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg5_vactx_w50 (
782 .scan_in(reg5_vactx_w50_scanin),
783 .scan_out(reg5_vactx_w50_scanout),
784 .clk (l2clk),
785 .en (htc_core_running[5]),
786 .din0({1'b0, 1'b0, tlu_pc_1_w[47:13], i_context_5[12:0]}),
787 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
788 .din2({1'b0, 1'b0, asd1_tag_access[47:0]}),
789 .din3({htd_sec_ctx[5], htd_dmiss[5], thr5_va_ff[47:13], htd_thr5_ctx_ff[12:0]}),
790 .sel0({tlu_iht_request[5]}),
791 .sel1({tlu_dht_request[5]}),
792 .sel2({htc_tsbrd_valid_m0[5]}),
793 .dout({htd_sec_ctx[5], htd_dmiss[5], thr5_va_ff[47:13], htd_thr5_ctx_ff[12:0]}),
794 .se(se),
795 .siclk(siclk),
796 .soclk(soclk),
797 .pce_ov(pce_ov),
798 .stop(stop)
799);
800
801mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg6_vactx_w50 (
802 .scan_in(reg6_vactx_w50_scanin),
803 .scan_out(reg6_vactx_w50_scanout),
804 .clk (l2clk),
805 .en (htc_core_running[6]),
806 .din0({1'b0, 1'b0, tlu_pc_1_w[47:13], i_context_6[12:0]}),
807 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
808 .din2({1'b0, 1'b0, asd1_tag_access[47:0]}),
809 .din3({htd_sec_ctx[6], htd_dmiss[6], thr6_va_ff[47:13], htd_thr6_ctx_ff[12:0]}),
810 .sel0({tlu_iht_request[6]}),
811 .sel1({tlu_dht_request[6]}),
812 .sel2({htc_tsbrd_valid_m0[6]}),
813 .dout({htd_sec_ctx[6], htd_dmiss[6], thr6_va_ff[47:13], htd_thr6_ctx_ff[12:0]}),
814 .se(se),
815 .siclk(siclk),
816 .soclk(soclk),
817 .pce_ov(pce_ov),
818 .stop(stop)
819);
820
821mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 reg7_vactx_w50 (
822 .scan_in(reg7_vactx_w50_scanin),
823 .scan_out(reg7_vactx_w50_scanout),
824 .clk (l2clk),
825 .en (htc_core_running[7]),
826 .din0({1'b0, 1'b0, tlu_pc_1_w[47:13], i_context_7[12:0]}),
827 .din1({lsu_sec_ctx_w, 1'b1, ase_lsu_va_w[47:13], lsu_context_w[12:0]}),
828 .din2({1'b0, 1'b0, asd1_tag_access[47:0]}),
829 .din3({htd_sec_ctx[7], htd_dmiss[7], thr7_va_ff[47:13], htd_thr7_ctx_ff[12:0]}),
830 .sel0({tlu_iht_request[7]}),
831 .sel1({tlu_dht_request[7]}),
832 .sel2({htc_tsbrd_valid_m0[7]}),
833 .dout({htd_sec_ctx[7], htd_dmiss[7], thr7_va_ff[47:13], htd_thr7_ctx_ff[12:0]}),
834 .se(se),
835 .siclk(siclk),
836 .soclk(soclk),
837 .pce_ov(pce_ov),
838 .stop(stop)
839);
840
841/////////////////////////////////////////////////////////////////////
842// zero detect the contexts and send them to htc in M0
843//
844
845mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx0_zd_cmp (
846 .din({3'b0,htd_thr0_ctx_ff[12:0]}),
847 .dout(htd_zeroctx_m0_prebuf[0])
848);
849
850mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx1_zd_cmp (
851 .din({3'b0,htd_thr1_ctx_ff[12:0]}),
852 .dout(htd_zeroctx_m0_prebuf[1])
853);
854
855mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx2_zd_cmp (
856 .din({3'b0,htd_thr2_ctx_ff[12:0]}),
857 .dout(htd_zeroctx_m0_prebuf[2])
858);
859
860mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx3_zd_cmp (
861 .din({3'b0,htd_thr3_ctx_ff[12:0]}),
862 .dout(htd_zeroctx_m0_prebuf[3])
863);
864
865mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx4_zd_cmp (
866 .din({3'b0,htd_thr4_ctx_ff[12:0]}),
867 .dout(htd_zeroctx_m0_prebuf[4])
868);
869
870mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx5_zd_cmp (
871 .din({3'b0,htd_thr5_ctx_ff[12:0]}),
872 .dout(htd_zeroctx_m0_prebuf[5])
873);
874
875mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx6_zd_cmp (
876 .din({3'b0,htd_thr6_ctx_ff[12:0]}),
877 .dout(htd_zeroctx_m0_prebuf[6])
878);
879
880mmu_htd_dp_zero_macro__dcmp_12x__width_16 ctx7_zd_cmp (
881 .din({3'b0,htd_thr7_ctx_ff[12:0]}),
882 .dout(htd_zeroctx_m0_prebuf[7])
883);
884
885mmu_htd_dp_buff_macro__stack_50c__width_8 buf_ctx0_w8 (
886.din({htd_zeroctx_m0_prebuf[7:0]}),
887.dout({htd_zeroctx_m0[7:0]})
888);
889
890/////////////////////////////////////////////////////////////////////
891// GET TSB CONFIG DATA (M0)
892// FORM HASHED ADDRESS to look up HWTWK PREDICTION REGISTERS
893// Addressing into the table is calculated through the following hash. The
894// column headers specify which bit of the address the column calculates. XOR
895// the contents of the columns to calculate the address bit.
896// cxt[12:0] = context of the request
897// pid[2:0] = partition ID of the request
898// va[47:28] = Virtual Address bits 47 to 28 of request
899// addr[5] addr[4] addr[3] addr[2] addr[1] addr[0]
900// ------- ------- ------- ------- ------- -------
901// cxt[5] cxt[4] cxt[3] cxt[2] cxt[1] cxt[0]
902// cxt[6] cxt[7] cxt[8] cxt[9] cxt[10] cxt[11]
903// va[29] va[28] pid[2] pid[1] pid[0] cxt[12]
904// va[30] va[31] va[32] va[33] va[34] va[35]
905// va[41] va[40] va[39] va[38] va[37] va[36]
906// va[42] va[43] va[44] va[45] va[46] va[47]
907
908/////////////////////////////////////////////////////////////////////
909// MUX out the VA and context in M0, to form the hashed index into
910// prediction array
911// There could be two tlb misses coming at same time for two thread groups
912
913
914mmu_htd_dp_mux_macro__dmux_8x__mux_aonpe__ports_4__stack_58c__width_33 mux_va_m00_w33 (
915 .din0({thr0_va_ff[47:28],htd_thr0_ctx_ff[12:0]}),
916 .din1({thr1_va_ff[47:28],htd_thr1_ctx_ff[12:0]}),
917 .din2({thr2_va_ff[47:28],htd_thr2_ctx_ff[12:0]}),
918 .din3({thr3_va_ff[47:28],htd_thr3_ctx_ff[12:0]}),
919 .sel0(tlb_miss_m0[0]),
920 .sel1(tlb_miss_m0[1]),
921 .sel2(tlb_miss_m0[2]),
922 .sel3(tlb_miss_m0[3]),
923 .dout({va0_m0[47:28], ctx0_m0[12:0]})
924);
925
926mmu_htd_dp_mux_macro__dmux_8x__mux_aonpe__ports_4__stack_58c__width_33 mux_va_m01_w33 (
927 .din0({thr4_va_ff[47:28],htd_thr4_ctx_ff[12:0]}),
928 .din1({thr5_va_ff[47:28],htd_thr5_ctx_ff[12:0]}),
929 .din2({thr6_va_ff[47:28],htd_thr6_ctx_ff[12:0]}),
930 .din3({thr7_va_ff[47:28],htd_thr7_ctx_ff[12:0]}),
931 .sel0(tlb_miss_m0[4]),
932 .sel1(tlb_miss_m0[5]),
933 .sel2(tlb_miss_m0[6]),
934 .sel3(tlb_miss_m0[7]),
935 .dout({va1_m0[47:28], ctx1_m0[12:0]})
936);
937
938
939assign pid0_m0[2:0] = htc_pid0_m0[2:0];
940assign pid1_m0[2:0] = htc_pid1_m0[2:0];
941
942
943//prty_macro prty0_0 (width=8) (
944// .din ({1'b0,va0_m0[47],va0_m0[36],va0_m0[35],1'b0,ctx0_m0[12],ctx0_m0[11],ctx0_m0[00]}),
945// .dout (htd_pred0_idx_m0[0]));
946
947//prty_macro prty0_1 (width=8) (
948// .din ({1'b0,va0_m0[46],va0_m0[37],va0_m0[34],1'b0,pid0_m0[00],ctx0_m0[10],ctx0_m0[01]}),
949// .dout (htd_pred0_idx_m0[1]));
950
951//prty_macro prty0_2 (width=8) (
952// .din ({1'b0,va0_m0[45],va0_m0[38],va0_m0[33],1'b0,pid0_m0[01],ctx0_m0[09],ctx0_m0[02]}),
953// .dout (htd_pred0_idx_m0[2]));
954
955//prty_macro prty0_3 (width=8) (
956// .din ({1'b0,va0_m0[44],va0_m0[39],va0_m0[32],1'b0,pid0_m0[02],ctx0_m0[08],ctx0_m0[03]}),
957// .dout (htd_pred0_idx_m0[3]));
958
959//prty_macro prty0_4 (width=8) (
960// .din ({1'b0,va0_m0[43],va0_m0[40],va0_m0[31],1'b0, va0_m0[28],ctx0_m0[07],ctx0_m0[04]}),
961// .dout (htd_pred0_idx_m0[4]));
962
963//prty_macro prty0_5 (width=8) (
964// .din ({1'b0,va0_m0[42],va0_m0[41],va0_m0[30],1'b0, va0_m0[29],ctx0_m0[06],ctx0_m0[05]}),
965// .dout (htd_pred0_idx_m0[5]));
966
967mmu_htd_dp_xor_macro__ports_3__stack_64c__width_12 xor0_0_w12 (
968.din0 ({va0_m0[30],ctx0_m0[5],va0_m0[31],ctx0_m0[4],va0_m0[32],ctx0_m0[3],va0_m0[33],ctx0_m0[2],va0_m0[34],ctx0_m0[1],va0_m0[35],ctx0_m0[0]}),
969.din1 ({va0_m0[41],ctx0_m0[6],va0_m0[40],ctx0_m0[7],va0_m0[39],ctx0_m0[8],va0_m0[38],ctx0_m0[9],va0_m0[37],ctx0_m0[10],va0_m0[36],ctx0_m0[11]}),
970.din2 ({va0_m0[42],va0_m0[29], va0_m0[43],va0_m0[28] ,va0_m0[44],pid0_m0[2],va0_m0[45],pid0_m0[1],va0_m0[46],pid0_m0[0],va0_m0[47],ctx0_m0[12]}),
971.dout ({prty0_5_1,prty0_5_0,prty0_4_1,prty0_4_0,prty0_3_1,prty0_3_0,prty0_2_1,prty0_2_0,prty0_1_1,prty0_1_0,prty0_0_1,prty0_0_0})
972);
973
974mmu_htd_dp_xor_macro__ports_2__stack_64c__width_6 xor0_1_w6 (
975.din0 ({prty0_5_0,prty0_4_0,prty0_3_0,prty0_2_0,prty0_1_0,prty0_0_0}),
976.din1 ({prty0_5_1,prty0_4_1,prty0_3_1,prty0_2_1,prty0_1_1,prty0_0_1}),
977.dout ({htd_pred0_idx_m0[5:0]})
978);
979
980//prty_macro prty1_0 (width=8) (
981// .din ({1'b0,va1_m0[47],va1_m0[36],va1_m0[35],1'b0,ctx1_m0[12],ctx1_m0[11],ctx1_m0[00]}),
982// .dout (htd_pred1_idx_m0[0]));
983
984//prty_macro prty1_1 (width=8) (
985// .din ({1'b0,va1_m0[46],va1_m0[37],va1_m0[34],1'b0,pid1_m0[00],ctx1_m0[10],ctx1_m0[01]}),
986// .dout (htd_pred1_idx_m0[1]));
987
988//prty_macro prty1_2 (width=8) (
989// .din ({1'b0,va1_m0[45],va1_m0[38],va1_m0[33],1'b0,pid1_m0[01],ctx1_m0[09],ctx1_m0[02]}),
990// .dout (htd_pred1_idx_m0[2]));
991
992//prty_macro prty1_3 (width=8) (
993// .din ({1'b0,va1_m0[44],va1_m0[39],va1_m0[32],1'b0,pid1_m0[02],ctx1_m0[08],ctx1_m0[03]}),
994// .dout (htd_pred1_idx_m0[3]));
995
996//prty_macro prty1_4 (width=8) (
997// .din ({1'b0,va1_m0[43],va1_m0[40],va1_m0[31],1'b0, va1_m0[28],ctx1_m0[07],ctx1_m0[04]}),
998// .dout (htd_pred1_idx_m0[4]));
999
1000//prty_macro prty1_5 (width=8) (
1001// .din ({1'b0,va1_m0[42],va1_m0[41],va1_m0[30],1'b0, va1_m0[29],ctx1_m0[06],ctx1_m0[05]}),
1002// .dout (htd_pred1_idx_m0[5]));
1003
1004mmu_htd_dp_xor_macro__ports_3__stack_64c__width_12 xor1_0_w12 (
1005.din0 ({va1_m0[30],ctx1_m0[5],va1_m0[31],ctx1_m0[4],va1_m0[32],ctx1_m0[3],va1_m0[33],ctx1_m0[2],va1_m0[34],ctx1_m0[1],va1_m0[35],ctx1_m0[0]}),
1006.din1 ({va1_m0[41],ctx1_m0[6],va1_m0[40],ctx1_m0[7],va1_m0[39],ctx1_m0[8],va1_m0[38],ctx1_m0[9],va1_m0[37],ctx1_m0[10],va1_m0[36],ctx1_m0[11]}),
1007.din2 ({va1_m0[42],va1_m0[29], va1_m0[43],va1_m0[28] ,va1_m0[44],pid1_m0[2],va1_m0[45],pid1_m0[1],va1_m0[46],pid1_m0[0],va1_m0[47],ctx1_m0[12]}),
1008.dout ({prty1_5_1,prty1_5_0,prty1_4_1,prty1_4_0,prty1_3_1,prty1_3_0,prty1_2_1,prty1_2_0,prty1_1_1,prty1_1_0,prty1_0_1,prty1_0_0})
1009);
1010
1011mmu_htd_dp_xor_macro__ports_2__stack_64c__width_6 xor1_1_w6 (
1012.din0 ({prty1_5_0,prty1_4_0,prty1_3_0,prty1_2_0,prty1_1_0,prty1_0_0}),
1013.din1 ({prty1_5_1,prty1_4_1,prty1_3_1,prty1_2_1,prty1_1_1,prty1_0_1}),
1014.dout ({htd_pred1_idx_m0[5:0]})
1015);
1016
1017
1018/////////////////////////////////////////////////////////////////////
1019// GET TSB CONFIG DATA (M1)
1020// MRA data is returned in M1 and HW2
1021/////////////////////////////////////////////////////////////////////
1022
1023// MUX out MRA data based on TG0/1, in M1/HW2
1024mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_40 mux0_mra_data_w40 (
1025 .din0({mra0_data[39:0]}),
1026 .din1({mra1_data[39:0]}),
1027 .sel0({htc_mra_sel_0}), //TG0
1028// .sel1({htc_mra_sel[1]}), //TG1
1029 .dout({mra_data[39:0]})
1030);
1031
1032// MUX out MRA data based on TG0/1 in M1/HW2
1033mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_42 mux1_mra_data_w42 (
1034 .din0({mra0_data[81:40]}),
1035 .din1({mra1_data[81:40]}),
1036 .sel0({htc_mra_sel_0}), //TG0
1037// .sel1({htc_mra_sel[1]}), //TG1
1038 .dout({mra_data[81:40]})
1039);
1040
1041
1042// MRA Layout
1043
1044// Bit 2 of tid[2:0] selects mra1/mra0
1045// Bit tid[1:0] form address[4:3] of MRA_ADDR
1046// MRA_ADDR[2:0] Data
1047//
1048// 000 unused[3:0],z_tsb_conf_0[77:39],z_tsb_conf_1[38:0]
1049// 001 unused[3:0],z_tsb_conf_2[77:39],z_tsb_conf_3[38:0]
1050// 010 unused[3:0],nz_tsb_conf_0[77:39],nz_tsb_conf_1[38:0]
1051// 011 unused[3:0],nz_tsb_conf_2[77:39],nz_tsb_conf_3[38:0]
1052// 100 RR0[81:27],PhyOff0[25:0]
1053// 101 RR1[81:27],PhyOff1[25:0]
1054// 110 RR2[81:27],PhyOff2[25:0]
1055// 111 RR3[81:27],PhyOff3[25:0]
1056
1057mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_39 mux3_mra_data_w39 (
1058 .din0({mra_data[38:0]}),
1059 .din1({mra_data[77:39]}),
1060 .sel0({htc_sel_mra_lo}),
1061// .sel1({htc_sel_mra_up}),
1062 .dout({tsb_conf[63:61], tsb_conf[39:13], tsb_conf[8:0]})
1063
1064);
1065
1066// Latch data coming from MRA due to a TSB config read in M1
1067// latch the data on TSB ptr gen or hwtwk tsb cfg rd.
1068
1069mmu_htd_dp_msff_macro__stack_58c__width_39 reg_tsbconf_m2_w39 (
1070 .scan_in(reg_tsbconf_m2_w39_scanin),
1071 .scan_out(reg_tsbconf_m2_w39_scanout),
1072 .clk (l2clk),
1073 .en (htc_m1_clken),
1074 .din ({tsb_conf[63:61], tsb_conf[39:13], tsb_conf[8:0]}),
1075 .dout ({tsb_conf_m2[63:61], tsb_conf_m2[39:13], tsb_conf_m2[8:0]}),
1076 .se(se),
1077 .siclk(siclk),
1078 .soclk(soclk),
1079 .pce_ov(pce_ov),
1080 .stop(stop)
1081);
1082
1083assign sun4v_unused = tsb_conf_m2[7];
1084assign hwtwen_unused = tsb_conf_m2[63];
1085
1086
1087/////////////////////////////////////////////////////////////////////
1088// TSB Pointer Generation (M2)
1089/////////////////////////////////////////////////////////////////////
1090//
1091// send these tsb config bits to htc
1092
1093// control bits from tsb config registers need to be saved.
1094// They will be used when tte data comes back.
1095// Each request can have upto 4 TSB config reads, and control bits from each have to be saved.
1096// control bits to be saved:
1097// cfg_ctlpkt_m2[8] = tsb_conf_m2[63] = hwtw_en
1098// cfg_ctlpkt_m2[7] = tsb_conf_m2[62] = use_context_0
1099// cfg_ctlpkt_m2[6] = tsb_conf_m2[61] = use_context_1
1100// cfg_ctlpkt_m2[5] = tsb_conf_m2[8] = ranotpa
1101// cfg_ctlpkt_m2[4] = tsb_conf_m2[7] = sun4v
1102// cfg_ctlpkt_m2[3:1] = tsb_conf_m2[6:4] = pgsize
1103// cfg_ctlpkt_m2[0] = htc_zero_ctx_m2
1104// cfg_ctlpkt[8:0] = { hwtw_en, use_context_0, use_context_1, ranotpa, sun4v, pgsize[6:4],zero_ctx}
1105// assign cfg_ctlpkt_m2[8:0] = {tsb_conf_m2[63:61], tsb_conf_m2[8:4], htc_zero_ctx_m2};
1106
1107
1108// 03/01/05 Only 7 bits need to be saved in cfg ctl packet.
1109// cfg_ctlpkt_m2[3] = tsb_conf_m2[62] = use_context_0
1110// cfg_ctlpkt_m2[2] = tsb_conf_m2[61] = use_context_1
1111// cfg_ctlpkt_m2[1] = tsb_conf_m2[8] = ranotpa
1112// cfg_ctlpkt_m2[3:1] = tsb_conf_m2[6:4] = pgsize
1113// cfg_ctlpkt_m2[0] = htc_zero_ctx_m2
1114// cfg_ctlpkt_m2[3:0] = { use_context_0, use_context_1, ranotpa, tsb_conf_m2[6:4], zero_ctx}
1115assign cfg_ctlpkt_m2[6:0] = {tsb_conf_m2[62:61], tsb_conf_m2[8], tsb_conf_m2[6:4], htc_zero_ctx_m2};
1116
1117
1118
1119// Each thread can read upto 4 tsb pointers. The control information from these registers
1120// are saved in a single flop.
1121mmu_htd_dp_mux_macro__mux_aodec__ports_4__stack_50c__width_28 mux_tsb_ctlpkt_w28 (
1122 .din0({thrx_cfg3_ctlpkt[6:0], thrx_cfg2_ctlpkt[6:0], thrx_cfg1_ctlpkt[6:0], cfg_ctlpkt_m2[6:0] }), //tsbptr = 0
1123 .din1({thrx_cfg3_ctlpkt[6:0], thrx_cfg2_ctlpkt[6:0], cfg_ctlpkt_m2[6:0], thrx_cfg0_ctlpkt[6:0]}), //tsbptr = 1
1124 .din2({thrx_cfg3_ctlpkt[6:0], cfg_ctlpkt_m2[6:0], thrx_cfg1_ctlpkt[6:0], thrx_cfg0_ctlpkt[6:0]}), //tsbptr = 2
1125 .din3({cfg_ctlpkt_m2[6:0], thrx_cfg2_ctlpkt[6:0], thrx_cfg1_ctlpkt[6:0], thrx_cfg0_ctlpkt[6:0]}), //tsbptr = 3
1126 .sel(htc_conf_index_m2[1:0]),
1127 .dout({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]})
1128);
1129
1130mmu_htd_dp_msff_macro__stack_50c__width_28 reg0_tsbcfg_w28 (
1131 .scan_in(reg0_tsbcfg_w28_scanin),
1132 .scan_out(reg0_tsbcfg_w28_scanout),
1133 .clk (l2clk),
1134 .en (htc_vld_tsbptr_m2[0]),
1135 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1136 .dout ({thr0_cfg3_ctlpkt[6:0], thr0_cfg2_ctlpkt[6:0], thr0_cfg1_ctlpkt[6:0], thr0_cfg0_ctlpkt[6:0] }),
1137 .se(se),
1138 .siclk(siclk),
1139 .soclk(soclk),
1140 .pce_ov(pce_ov),
1141 .stop(stop)
1142);
1143
1144mmu_htd_dp_msff_macro__stack_50c__width_28 reg1_tsbcfg_w28 (
1145 .scan_in(reg1_tsbcfg_w28_scanin),
1146 .scan_out(reg1_tsbcfg_w28_scanout),
1147 .clk (l2clk),
1148 .en (htc_vld_tsbptr_m2[1]),
1149 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1150 .dout ({thr1_cfg3_ctlpkt[6:0], thr1_cfg2_ctlpkt[6:0], thr1_cfg1_ctlpkt[6:0], thr1_cfg0_ctlpkt[6:0] }),
1151 .se(se),
1152 .siclk(siclk),
1153 .soclk(soclk),
1154 .pce_ov(pce_ov),
1155 .stop(stop)
1156);
1157
1158mmu_htd_dp_msff_macro__stack_50c__width_28 reg2_tsbcfg_w28 (
1159 .scan_in(reg2_tsbcfg_w28_scanin),
1160 .scan_out(reg2_tsbcfg_w28_scanout),
1161 .clk (l2clk),
1162 .en (htc_vld_tsbptr_m2[2]),
1163 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1164 .dout ({thr2_cfg3_ctlpkt[6:0], thr2_cfg2_ctlpkt[6:0], thr2_cfg1_ctlpkt[6:0], thr2_cfg0_ctlpkt[6:0] }),
1165 .se(se),
1166 .siclk(siclk),
1167 .soclk(soclk),
1168 .pce_ov(pce_ov),
1169 .stop(stop)
1170);
1171
1172mmu_htd_dp_msff_macro__stack_50c__width_28 reg3_tsbcfg_w28 (
1173 .scan_in(reg3_tsbcfg_w28_scanin),
1174 .scan_out(reg3_tsbcfg_w28_scanout),
1175 .clk (l2clk),
1176 .en (htc_vld_tsbptr_m2[3]),
1177 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1178 .dout ({thr3_cfg3_ctlpkt[6:0], thr3_cfg2_ctlpkt[6:0], thr3_cfg1_ctlpkt[6:0], thr3_cfg0_ctlpkt[6:0] }),
1179 .se(se),
1180 .siclk(siclk),
1181 .soclk(soclk),
1182 .pce_ov(pce_ov),
1183 .stop(stop)
1184);
1185
1186mmu_htd_dp_msff_macro__stack_50c__width_28 reg4_tsbcfg_w28 (
1187 .scan_in(reg4_tsbcfg_w28_scanin),
1188 .scan_out(reg4_tsbcfg_w28_scanout),
1189 .clk (l2clk),
1190 .en (htc_vld_tsbptr_m2[4]),
1191 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1192 .dout ({thr4_cfg3_ctlpkt[6:0], thr4_cfg2_ctlpkt[6:0], thr4_cfg1_ctlpkt[6:0], thr4_cfg0_ctlpkt[6:0] }),
1193 .se(se),
1194 .siclk(siclk),
1195 .soclk(soclk),
1196 .pce_ov(pce_ov),
1197 .stop(stop)
1198);
1199
1200mmu_htd_dp_msff_macro__stack_50c__width_28 reg5_tsbcfg_w28 (
1201 .scan_in(reg5_tsbcfg_w28_scanin),
1202 .scan_out(reg5_tsbcfg_w28_scanout),
1203 .clk (l2clk),
1204 .en (htc_vld_tsbptr_m2[5]),
1205 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1206 .dout ({thr5_cfg3_ctlpkt[6:0], thr5_cfg2_ctlpkt[6:0], thr5_cfg1_ctlpkt[6:0], thr5_cfg0_ctlpkt[6:0] }),
1207 .se(se),
1208 .siclk(siclk),
1209 .soclk(soclk),
1210 .pce_ov(pce_ov),
1211 .stop(stop)
1212);
1213
1214mmu_htd_dp_msff_macro__stack_50c__width_28 reg6_tsbcfg_w28 (
1215 .scan_in(reg6_tsbcfg_w28_scanin),
1216 .scan_out(reg6_tsbcfg_w28_scanout),
1217 .clk (l2clk),
1218 .en (htc_vld_tsbptr_m2[6]),
1219 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1220 .dout ({thr6_cfg3_ctlpkt[6:0], thr6_cfg2_ctlpkt[6:0], thr6_cfg1_ctlpkt[6:0], thr6_cfg0_ctlpkt[6:0] }),
1221 .se(se),
1222 .siclk(siclk),
1223 .soclk(soclk),
1224 .pce_ov(pce_ov),
1225 .stop(stop)
1226);
1227
1228mmu_htd_dp_msff_macro__stack_50c__width_28 reg7_tsbcfg_w28 (
1229 .scan_in(reg7_tsbcfg_w28_scanin),
1230 .scan_out(reg7_tsbcfg_w28_scanout),
1231 .clk (l2clk),
1232 .en (htc_vld_tsbptr_m2[7]),
1233 .din ({thrx_cfg3_ctlpkt_in[6:0],thrx_cfg2_ctlpkt_in[6:0],thrx_cfg1_ctlpkt_in[6:0],thrx_cfg0_ctlpkt_in[6:0]}),
1234 .dout ({thr7_cfg3_ctlpkt[6:0], thr7_cfg2_ctlpkt[6:0], thr7_cfg1_ctlpkt[6:0], thr7_cfg0_ctlpkt[6:0] }),
1235 .se(se),
1236 .siclk(siclk),
1237 .soclk(soclk),
1238 .pce_ov(pce_ov),
1239 .stop(stop)
1240);
1241
1242mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_28 mux_tsbcfg_m2_w28 (
1243 .din0({thr0_cfg3_ctlpkt[6:0],thr0_cfg2_ctlpkt[6:0],thr0_cfg1_ctlpkt[6:0],thr0_cfg0_ctlpkt[6:0]}),
1244 .din1({thr1_cfg3_ctlpkt[6:0],thr1_cfg2_ctlpkt[6:0],thr1_cfg1_ctlpkt[6:0],thr1_cfg0_ctlpkt[6:0]}),
1245 .din2({thr2_cfg3_ctlpkt[6:0],thr2_cfg2_ctlpkt[6:0],thr2_cfg1_ctlpkt[6:0],thr2_cfg0_ctlpkt[6:0]}),
1246 .din3({thr3_cfg3_ctlpkt[6:0],thr3_cfg2_ctlpkt[6:0],thr3_cfg1_ctlpkt[6:0],thr3_cfg0_ctlpkt[6:0]}),
1247 .din4({thr4_cfg3_ctlpkt[6:0],thr4_cfg2_ctlpkt[6:0],thr4_cfg1_ctlpkt[6:0],thr4_cfg0_ctlpkt[6:0]}),
1248 .din5({thr5_cfg3_ctlpkt[6:0],thr5_cfg2_ctlpkt[6:0],thr5_cfg1_ctlpkt[6:0],thr5_cfg0_ctlpkt[6:0]}),
1249 .din6({thr6_cfg3_ctlpkt[6:0],thr6_cfg2_ctlpkt[6:0],thr6_cfg1_ctlpkt[6:0],thr6_cfg0_ctlpkt[6:0]}),
1250 .din7({thr7_cfg3_ctlpkt[6:0],thr7_cfg2_ctlpkt[6:0],thr7_cfg1_ctlpkt[6:0],thr7_cfg0_ctlpkt[6:0]}),
1251 .sel0(htc_vld_tsbptr_m2[0]),
1252 .sel1(htc_vld_tsbptr_m2[1]),
1253 .sel2(htc_vld_tsbptr_m2[2]),
1254 .sel3(htc_vld_tsbptr_m2[3]),
1255 .sel4(htc_vld_tsbptr_m2[4]),
1256 .sel5(htc_vld_tsbptr_m2[5]),
1257 .sel6(htc_vld_tsbptr_m2[6]),
1258 .sel7(htc_vld_tsbptr_m2[7]),
1259 .dout({thrx_cfg3_ctlpkt[6:0],thrx_cfg2_ctlpkt[6:0],thrx_cfg1_ctlpkt[6:0],thrx_cfg0_ctlpkt[6:0]})
1260);
1261
1262
1263// MUX out the VA in M2
1264mmu_htd_dp_mux_macro__left_13__mux_aonpe__ports_8__stack_50c__width_35 mux_va_m2_w35 (
1265 .din0(thr0_va_ff[47:13]),
1266 .din1(thr1_va_ff[47:13]),
1267 .din2(thr2_va_ff[47:13]),
1268 .din3(thr3_va_ff[47:13]),
1269 .din4(thr4_va_ff[47:13]),
1270 .din5(thr5_va_ff[47:13]),
1271 .din6(thr6_va_ff[47:13]),
1272 .din7(thr7_va_ff[47:13]),
1273 .sel0(va_rd_m2[0]),
1274 .sel1(va_rd_m2[1]),
1275 .sel2(va_rd_m2[2]),
1276 .sel3(va_rd_m2[3]),
1277 .sel4(va_rd_m2[4]),
1278 .sel5(va_rd_m2[5]),
1279 .sel6(va_rd_m2[6]),
1280 .sel7(va_rd_m2[7]),
1281 .dout(htd_va_prebuf[47:13])
1282);
1283
1284mmu_htd_dp_buff_macro__left_13__stack_50c__width_35 buf_va_m2_w35 (
1285.din(htd_va_prebuf[47:13]),
1286.dout(htd_va[47:13])
1287);
1288
1289
1290////////////////////////////////////////////////////////////////////////////
1291// TSB POINTER GENERATION IN M2
1292////////////////////////////////////////////////////////////////////////////
1293// Old scheme:
1294//
1295// tsb0-7 tsb8-15
1296// | |
1297// | |
1298// ---------------------- ----------------------
1299// | | | | | | | |
1300// | | | | | | | |
1301// pg0mx pg1mx pg3mx pg5mx pg0mx pg1mx pg3mx pg5mx
1302// 8:1 8:1 8:1 8:1 8:1 8:1 8:1 8:1
1303// | | | | | | | |
1304// | | | | | | | |
1305// ---------------------- ----------------------
1306// | |
1307// | |
1308// ---------------------------------------
1309// |
1310// 2:1
1311// |
1312// |
1313// tsbptr
1314//
1315//
1316// New Scheme:
1317// va[36:13] va[39:16] va[45:22] va[47:28]
1318// | | | |
1319// | | | |
1320// -------------------------------
1321// |
1322// 4:1
1323// vpn[23:0]
1324// |
1325// |
1326// |
1327// ---------------------------------------
1328// | |
1329// | |
1330// | |
1331// pgmx pgmx
1332// 8:1 8:1
1333// | |
1334// | |
1335// ---------------------------------------
1336// |
1337// 2:1
1338// |
1339// |
1340// tsbptr
1341
1342// use these bits for tsb pointer generation
1343assign htd_cfg_tsbbase[39:13] = tsb_conf_m2[39:13];
1344assign htd_pgsz_m2[6:4] = tsb_conf_m2[6:4];
1345assign htd_tsbsz_m2[3:0] = tsb_conf_m2[3:0];
1346
1347
1348// form the virtual page number
1349mmu_htd_dp_mux_macro__mux_aope__ports_4__stack_50c__width_24 mux_vpn_w24 (
1350 .din0({4'b0000,htd_va[47:28]}), //pgsz5, 256M
1351 .din1({htd_va[45:22]}), //pgsz3, 4M
1352 .din2({htd_va[39:16]}), //pgsz1, 64kb
1353 .din3({htd_va[36:13]}), //pgsz0, 8kb
1354 .sel0(htd_pgsz_m2[6]),
1355 .sel1(htd_pgsz_m2[5]),
1356 .sel2(htd_pgsz_m2[4]),
1357 .dout({vpn_m2[23:0]})
1358);
1359
1360// Form TSB pointer for TSB size 0-7
1361mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_36 mux_tsb0_7_w36 (
1362 .din0({htd_cfg_tsbbase[39:13], vpn_m2[8:0]}), //tsb_size = 0
1363 .din1({htd_cfg_tsbbase[39:14], vpn_m2[9:0]}), //tsb_size = 1
1364 .din2({htd_cfg_tsbbase[39:15], vpn_m2[10:0]}), //tsb_size = 2
1365 .din3({htd_cfg_tsbbase[39:16], vpn_m2[11:0]}), //tsb_size = 3
1366 .din4({htd_cfg_tsbbase[39:17], vpn_m2[12:0]}), //tsb_size = 4
1367 .din5({htd_cfg_tsbbase[39:18], vpn_m2[13:0]}), //tsb_size = 5
1368 .din6({htd_cfg_tsbbase[39:19], vpn_m2[14:0]}), //tsb_size = 6
1369 .din7({htd_cfg_tsbbase[39:20], vpn_m2[15:0]}), //tsb_size = 7
1370 .sel(htd_tsbsz_m2[2:0]),
1371 .dout({tsbptr0[35:0]})
1372);
1373
1374// Form TSB pointer for TSB size 0-7
1375mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_36 mux_tsb8_15_w36 (
1376 .din0({htd_cfg_tsbbase[39:21], vpn_m2[16:0]}), //tsb_size = 8
1377 .din1({htd_cfg_tsbbase[39:22], vpn_m2[17:0]}), //tsb_size = 9
1378 .din2({htd_cfg_tsbbase[39:23], vpn_m2[18:0]}), //tsb_size = 10
1379 .din3({htd_cfg_tsbbase[39:24], vpn_m2[19:0]}), //tsb_size = 11
1380 .din4({htd_cfg_tsbbase[39:25], vpn_m2[20:0]}), //tsb_size = 12
1381 .din5({htd_cfg_tsbbase[39:26], vpn_m2[21:0]}), //tsb_size = 13
1382 .din6({htd_cfg_tsbbase[39:27], vpn_m2[22:0]}), //tsb_size = 14
1383 .din7({htd_cfg_tsbbase[39:28], vpn_m2[23:0]}), //tsb_size = 15
1384 .sel(htd_tsbsz_m2[2:0]),
1385 .dout({tsbptr1[35:0]})
1386);
1387
1388mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_50c__width_36 mux_tsb_w36 (
1389 .din0(tsbptr1[35:0]), //tsbsz = 8 - 15
1390 .din1(tsbptr0[35:0]), //tsbsz = 0 - 7
1391 .sel0(htd_tsbsz_m2[3]),
1392 .dout(htd_tsbptr_m2[35:0])
1393);
1394
1395assign l15_addr[39:4] = htd_tsbptr_m2[35:0];
1396assign htd_tsbptr[39:4] = htd_tsbptr_m2[35:0];
1397
1398// ********************************************************************************
1399// MMU-L15 Request Buffer (Size=2)
1400// ********************************************************************************
1401// ********************************************************************************
1402// q1
1403// ********************************************************************************
1404
1405mmu_htd_dp_msff_macro__stack_50c__width_36 reg_q1addr_w36 (
1406 .scan_in(reg_q1addr_w36_scanin),
1407 .scan_out(reg_q1addr_w36_scanout),
1408 .clk (l2clk),
1409 .en (htc_wr_q1new),
1410 .din (l15_addr[39:4]),
1411 .dout ({q1_addr[39:4]}),
1412 .se(se),
1413 .siclk(siclk),
1414 .soclk(soclk),
1415 .pce_ov(pce_ov),
1416 .stop(stop)
1417);
1418
1419// ********************************************************************************
1420// q0
1421// to optimize use of grant, create two versions, q0_grant and q0_nogrant.
1422// mux between these the next cycle using flopped version of grant
1423// ********************************************************************************
1424//mux_macro mux_q0addr_w36 (width=36, ports=3, mux=aope, stack=50c) (
1425// .din0(l15_addr[39:04]),
1426// .din1(q1_addr[39:04]),
1427// .din2(q0_addr[39:04]),
1428// .sel0(htc_wr_q0new),
1429// .sel1(htc_shift_q1),
1430// .dout(q0_addr_in[39:04])
1431//);
1432//
1433//msff_macro reg_q0addr_w36 (width=36, stack=50c) (
1434// .scan_in(reg_q0addr_w36_scanin),
1435// .scan_out(reg_q0addr_w36_scanout),
1436// .clk (l2clk),
1437// .en (htc_q0_clken),
1438// .din (q0_addr_in[39:04]),
1439// .dout ({q0_addr[39:04]}),
1440//);
1441
1442mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_36 mux_q0addr_ng_w36 (
1443 .din0(l15_addr[39:4]),
1444 .din1(q0_addr[39:4]),
1445 .sel0(htc_wr_q0new_nogrant),
1446 .dout(q0_addr_in_nogrant[39:4])
1447);
1448
1449mmu_htd_dp_msff_macro__stack_50c__width_36 reg_q0addr_ng_w36 (
1450 .scan_in(reg_q0addr_ng_w36_scanin),
1451 .scan_out(reg_q0addr_ng_w36_scanout),
1452 .clk (l2clk),
1453 .en (1'b1),
1454 .din (q0_addr_in_nogrant[39:4]),
1455 .dout ({q0_addr_nogrant[39:4]}),
1456 .se(se),
1457 .siclk(siclk),
1458 .soclk(soclk),
1459 .pce_ov(pce_ov),
1460 .stop(stop)
1461);
1462
1463mmu_htd_dp_mux_macro__mux_aope__ports_3__stack_50c__width_36 mux_q0addr_g_w36 (
1464 .din0(l15_addr[39:4]),
1465 .din1(q1_addr[39:4]),
1466 .din2(q0_addr[39:4]),
1467 .sel0(htc_wr_q0new_grant),
1468 .sel1(htc_shift_q1_grant),
1469 .dout(q0_addr_in_grant[39:4])
1470);
1471
1472mmu_htd_dp_msff_macro__stack_50c__width_37 reg_q0addr_g_w36 (
1473 .scan_in(reg_q0addr_g_w36_scanin),
1474 .scan_out(reg_q0addr_g_w36_scanout),
1475 .clk (l2clk),
1476 .en (1'b1),
1477 .din ({l15_mmu_grant,q0_addr_in_grant[39:4]}),
1478 .dout ({l15_mmu_grant_lat,q0_addr_grant[39:4]}),
1479 .se(se),
1480 .siclk(siclk),
1481 .soclk(soclk),
1482 .pce_ov(pce_ov),
1483 .stop(stop)
1484);
1485
1486mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_36 mux_q0addr_w36 (
1487 .din0(q0_addr_grant[39:4]),
1488 .din1(q0_addr_nogrant[39:4]),
1489 .sel0(l15_mmu_grant_lat),
1490 .dout(q0_addr[39:4])
1491);
1492
1493// ********************************************************************************
1494// output register M3
1495// ********************************************************************************
1496
1497mmu_htd_dp_mux_macro__mux_aonpe__ports_2__stack_50c__width_36 mux_l15addr_w36 (
1498 .din0(l15_addr[39:4]),
1499 .din1(q0_addr[39:4]),
1500 .sel0(htc_wr_m3new),
1501 .sel1(htc_wr_m3q0),
1502 .dout(mmu_l15_addr_in[39:4])
1503);
1504
1505
1506mmu_htd_dp_msff_macro__stack_50c__width_36 reg_l15addr_w36 (
1507 .scan_in(reg_l15addr_w36_scanin),
1508 .scan_out(reg_l15addr_w36_scanout),
1509 .clk (l2clk),
1510 .en (htc_l15_en),
1511 .din ({mmu_l15_addr_in[39:4]}),
1512 .dout ({mmu_l15_addr[39:4]}),
1513 .se(se),
1514 .siclk(siclk),
1515 .soclk(soclk),
1516 .pce_ov(pce_ov),
1517 .stop(stop)
1518);
1519
1520
1521
1522
1523
1524/////////////////////////////////////////////////////////////////////
1525/////////////////////////////////////////////////////////////////////
1526/////////////////////////////////////////////////////////////////////
1527
1528/////////////////////////////////////////////////////////////////////
1529/////////////////////////////////////////////////////////////////////
1530/////////////////////////////////////////////////////////////////////
1531// PROCESS RETURN DATA
1532// MUX out TSB and TTE REQUEST data (HW0)
1533/////////////////////////////////////////////////////////////////////
1534/////////////////////////////////////////////////////////////////////
1535/////////////////////////////////////////////////////////////////////
1536
1537mmu_htd_dp_buff_macro__dbuff_48x__rep_1__width_1 tst_mux_rep0 (
1538 .din ( tcu_muxtest ),
1539 .dout( tcu_muxtest_rep0 ));
1540
1541
1542mmu_htd_dp_mux_macro__mux_pgdec__ports_8__stack_50c__width_40 mux_vpn_hw0_w40 (
1543 .din0({htd_dmiss[0], thr0_va_ff[47:22], htd_thr0_ctx_ff[12:0]}),
1544 .din1({htd_dmiss[1], thr1_va_ff[47:22], htd_thr1_ctx_ff[12:0]}),
1545 .din2({htd_dmiss[2], thr2_va_ff[47:22], htd_thr2_ctx_ff[12:0]}),
1546 .din3({htd_dmiss[3], thr3_va_ff[47:22], htd_thr3_ctx_ff[12:0]}),
1547 .din4({htd_dmiss[4], thr4_va_ff[47:22], htd_thr4_ctx_ff[12:0]}),
1548 .din5({htd_dmiss[5], thr5_va_ff[47:22], htd_thr5_ctx_ff[12:0]}),
1549 .din6({htd_dmiss[6], thr6_va_ff[47:22], htd_thr6_ctx_ff[12:0]}),
1550 .din7({htd_dmiss[7], thr7_va_ff[47:22], htd_thr7_ctx_ff[12:0]}),
1551 .muxtst (tcu_muxtest_rep0),
1552 .sel({l15_mmu_cpkt[8:6]}),
1553 .dout({htd_dmiss_hw0, va_hw0[47:22], ctx_hw0[12:0]}),
1554 .test(test)
1555);
1556
1557
1558mmu_htd_dp_msff_macro__stack_50c__width_40 reg_vpn_w40
1559(
1560 .scan_in(reg_vpn_w40_scanin),
1561 .scan_out(reg_vpn_w40_scanout),
1562 .clk (l2clk),
1563 .en (1'b1),
1564 .din ({htd_dmiss_hw0, va_hw0[47:22], ctx_hw0[12:0]}),
1565 .dout ({htd_dmiss_hw1,va_hw1[47:22], ctx_hw1[12:0]}),
1566 .se(se),
1567 .siclk(siclk),
1568 .soclk(soclk),
1569 .pce_ov(pce_ov),
1570 .stop(stop)
1571 );
1572
1573
1574mmu_htd_dp_buff_macro__dbuff_32x__rep_1__width_1 tst_mux_rep1 (
1575 .din ( tcu_muxtest ),
1576 .dout( tcu_muxtest_rep1 ));
1577
1578mmu_htd_dp_mux_macro__mux_pgdec__ports_8__stack_50c__width_28 mux_tsbcfg_hw0_w28 (
1579 .din0({thr0_cfg3_ctlpkt[6:0],thr0_cfg2_ctlpkt[6:0],thr0_cfg1_ctlpkt[6:0],thr0_cfg0_ctlpkt[6:0]}),
1580 .din1({thr1_cfg3_ctlpkt[6:0],thr1_cfg2_ctlpkt[6:0],thr1_cfg1_ctlpkt[6:0],thr1_cfg0_ctlpkt[6:0]}),
1581 .din2({thr2_cfg3_ctlpkt[6:0],thr2_cfg2_ctlpkt[6:0],thr2_cfg1_ctlpkt[6:0],thr2_cfg0_ctlpkt[6:0]}),
1582 .din3({thr3_cfg3_ctlpkt[6:0],thr3_cfg2_ctlpkt[6:0],thr3_cfg1_ctlpkt[6:0],thr3_cfg0_ctlpkt[6:0]}),
1583 .din4({thr4_cfg3_ctlpkt[6:0],thr4_cfg2_ctlpkt[6:0],thr4_cfg1_ctlpkt[6:0],thr4_cfg0_ctlpkt[6:0]}),
1584 .din5({thr5_cfg3_ctlpkt[6:0],thr5_cfg2_ctlpkt[6:0],thr5_cfg1_ctlpkt[6:0],thr5_cfg0_ctlpkt[6:0]}),
1585 .din6({thr6_cfg3_ctlpkt[6:0],thr6_cfg2_ctlpkt[6:0],thr6_cfg1_ctlpkt[6:0],thr6_cfg0_ctlpkt[6:0]}),
1586 .din7({thr7_cfg3_ctlpkt[6:0],thr7_cfg2_ctlpkt[6:0],thr7_cfg1_ctlpkt[6:0],thr7_cfg0_ctlpkt[6:0]}),
1587 .muxtst (tcu_muxtest_rep1),
1588 .sel({l15_mmu_cpkt[8:6]}),
1589 .dout({cfg3_ctlpkt_hw0[6:0],cfg2_ctlpkt_hw0[6:0],cfg1_ctlpkt_hw0[6:0],cfg0_ctlpkt_hw0[6:0]}),
1590 .test(test)
1591);
1592
1593mmu_htd_dp_msff_macro__stack_50c__width_30 reg_tsbcfg_hw1_w30 (
1594 .scan_in(reg_tsbcfg_hw1_w30_scanin),
1595 .scan_out(reg_tsbcfg_hw1_w30_scanout),
1596 .clk (l2clk),
1597 .en (1'b1),
1598 .din ({l15_mmu_cpkt[4:3], cfg3_ctlpkt_hw0[6:0],cfg2_ctlpkt_hw0[6:0],cfg1_ctlpkt_hw0[6:0],cfg0_ctlpkt_hw0[6:0]}),
1599 .dout ({l15_mmu_cpkt_hw1[4:3],cfg3_ctlpkt_hw1[6:0],cfg2_ctlpkt_hw1[6:0],cfg1_ctlpkt_hw1[6:0],cfg0_ctlpkt_hw1[6:0]}),
1600 .se(se),
1601 .siclk(siclk),
1602 .soclk(soclk),
1603 .pce_ov(pce_ov),
1604 .stop(stop)
1605);
1606
1607
1608mmu_htd_dp_buff_macro__dbuff_32x__rep_1__width_1 tst_mux_rep2 (
1609 .din ( tcu_muxtest ),
1610 .dout( tcu_muxtest_rep2 ));
1611
1612// mux out the right tsb config data based on [4:3] of ret data. These bits serve as a tag.
1613mmu_htd_dp_mux_macro__mux_pgdec__ports_4__stack_50c__width_7 mux_tsbcfg_hw1_w7 (
1614 .din0({cfg0_ctlpkt_hw1[6:0]}),
1615 .din1({cfg1_ctlpkt_hw1[6:0]}),
1616 .din2({cfg2_ctlpkt_hw1[6:0]}),
1617 .din3({cfg3_ctlpkt_hw1[6:0]}),
1618 .muxtst (tcu_muxtest_rep2),
1619 .sel({l15_mmu_cpkt_hw1[4:3]}),
1620 .dout({cfg_ctlpkt_hw1[6:0]}),
1621 .test(test)
1622);
1623
1624
1625// cfg_ctlpkt[6:0] = { use_context_0, use_context_1, ranotpa, pgsize[6:4],zero_ctx}
1626
1627/////////////////////////////////////////////////////////////////////
1628// Staging Flops for data input from L15 (HW1) and for va
1629// L15 return data format
1630// l15_spc_data[63:0] = htd_tte_data_hw1[63:0]
1631// l15_spc_data[89:64] = htd_tte_tag_ptr_hw1[47:22] (VA[47:22])
1632// l15_spc_data[105:90] = htd_tte_tag_ptr_hw1[63:48] (VA[63:48])
1633// l15_spc_data[111:106] = htd_tte_rsvd1_hw1[5:0] (RSVD1[5:0])
1634// l15_spc_data[124:112] = htd_tte_tag_ctx_hw1[60:48] (CONTEXT)
1635// l15_spc_data[127:125] = htd_tte_rsvd0_hw1[2:0] (RSVD0[2:0])
1636/////////////////////////////////////////////////////////////////////
1637mmu_htd_dp_msff_macro__stack_50c__width_36 reg_l15vahw1_w36 (
1638 .scan_in(reg_l15vahw1_w36_scanin),
1639 .scan_out(reg_l15vahw1_w36_scanout),
1640 .clk (l2clk),
1641 .en (1'b1),
1642 .din ({l15_spc_data1[3:0], l15_spc_data1[105:90], l15_spc_data1[79:64]}),
1643 .dout({htd_tte_data_hw1[3:0], htd_tte_tag_ptr_hw1[63:48], htd_tte_tag_ptr_hw1[37:22]}),
1644 .se(se),
1645 .siclk(siclk),
1646 .soclk(soclk),
1647 .pce_ov(pce_ov),
1648 .stop(stop)
1649
1650);
1651
1652
1653mmu_htd_dp_msff_macro__stack_50c__width_34 reg_l15ctx_w34 (
1654 .scan_in(reg_l15ctx_w34_scanin),
1655 .scan_out(reg_l15ctx_w34_scanout),
1656 .clk (l2clk),
1657 .en (1'b1),
1658 .din ( {l15_spc_data1[127:125], l15_spc_data1[111:106], l15_spc_data1[63:62] , l15_spc_data1[124:112] , l15_spc_data1[89:80] }),
1659 .dout ({htd_tte_rsvd0_hw1[2:0], htd_tte_rsvd1_hw1[5:0], htd_tte_data_hw1[63:62], htd_tte_tag_ctx_hw1[60:48], htd_tte_tag_ptr_hw1[47:38]}),
1660 .se(se),
1661 .siclk(siclk),
1662 .soclk(soclk),
1663 .pce_ov(pce_ov),
1664 .stop(stop)
1665
1666);
1667
1668mmu_htd_dp_msff_macro__stack_50c__width_49 reg_l15data_w49 (
1669 .scan_in(reg_l15data_w49_scanin),
1670 .scan_out(reg_l15data_w49_scanout),
1671 .clk (l2clk),
1672 .en (1'b1),
1673 .din ({l15_spc_data1[12:10], l15_spc_data1[55:13], l15_spc_data1[8:6] }),
1674 .dout ({htd_tte_data_hw1[12:10], htd_tte_data_hw1[55:13], htd_tte_data_hw1[8:6] }),
1675 .se(se),
1676 .siclk(siclk),
1677 .soclk(soclk),
1678 .pce_ov(pce_ov),
1679 .stop(stop)
1680);
1681
1682
1683assign tte_data_valid = htd_tte_data_hw1[63];
1684assign tte_pgsz_hw1[3:0] = htd_tte_data_hw1[3:0];
1685assign htd_tte_ep_hw1 = htd_tte_data_hw1[7];
1686//assign sun4v_format_hw1 = cfg_ctlpkt_hw1[4];
1687assign htd_zeroctx_hw1 = cfg_ctlpkt_hw1[0];
1688assign tsb_pgsz_hw1[2:0] = cfg_ctlpkt_hw1[3:1];
1689assign htd_ranotpa_hw1 = cfg_ctlpkt_hw1[4];
1690assign htd_usectx1_hw1 = cfg_ctlpkt_hw1[5];
1691assign htd_usectx0_hw1 = cfg_ctlpkt_hw1[6];
1692
1693
1694// assign htd_hwtwen_hw1 = cfg_ctlpkt_hw1[8];
1695//assign htd_hwtwen_hw1_unused[1:0] = {cfg_ctlpkt_hw1[8],cfg_ctlpkt_hw1[4]};
1696
1697//****************************************************
1698// 101904:
1699// NIAGARA2 WILL NOT SUPPORT SUN4U FORMAT
1700// REMOVING THE TTE MUX
1701//****************************************************
1702
1703// MUX tte data based on sun4u/sun4v formats
1704//mux_macro mux_tte_hw1_w39 (width=39,ports=2,mux=aope,stack=58c) (
1705// //Sun4V Format
1706// .din0 ({htd_tte_data_hw1 [63 ], // V
1707// htd_tte_data_hw1 [62 ], // NFO
1708// asi_data_in_real , // Real
1709// htd_tte_data_hw1 [61 ], // Locked
1710// htd_tte_data_hw1 [39:13], // RA[39:13]
1711// htd_tte_data_hw1 [12 ], // IE
1712// htd_tte_data_hw1 [11 ], // Side effect
1713// htd_tte_data_hw1 [10 ], // CP
1714// htd_tte_data_hw1 [08 ], // P
1715// htd_tte_data_hw1 [06 ], // W
1716// htd_tte_data_hw1 [03:00 ]}), //Size[3:0]
1717// //Sun4u Format
1718// .din1 ({htd_tte_data_hw1 [63 ], // V
1719// htd_tte_data_hw1 [60 ], // NFO
1720// asi_data_in_real , // Real
1721// htd_tte_data_hw1 [06 ], // Locked
1722// htd_tte_data_hw1 [39:13], // PA[39:13]
1723// htd_tte_data_hw1 [59 ], // IE
1724// htd_tte_data_hw1 [03 ], // Side-effect
1725// htd_tte_data_hw1 [05 ], // CP
1726// htd_tte_data_hw1 [02 ], // P
1727// htd_tte_data_hw1 [01 ], // Writable
1728// htd_tte_data_hw1 [48 ], // Size[2]
1729// htd_tte_data_hw1 [62:61 ]}), // Size[1:0]
1730// .sel0 ({sun4v_format_hw1}),
1731// .dout ({tte_data_hw1 [38 ], // V
1732// tte_data_hw1 [37 ], // NFO
1733// tte_data_hw1 [36 ], // Real
1734// tte_data_hw1 [35 ], // Locked
1735// tte_data_hw1 [34:08], // RA/PA[39:13]
1736// tte_data_hw1 [07 ], // IE
1737// tte_data_hw1 [06 ], // Side Effect
1738// tte_data_hw1 [05 ], // CP
1739// tte_data_hw1 [04 ], // P
1740// tte_data_hw1 [03 ], // W
1741// tte_data_hw1 [02:00] // Size[2:0]
1742// })
1743//);
1744
1745assign tte_data_hw1[38:0] = (
1746 {htd_tte_data_hw1 [63 ], // [38] V
1747 htd_tte_data_hw1 [62 ], // [37] NFO
1748 asi_data_in_real , // [36] Real
1749 1'b0 , // [35] Locked
1750 htd_tte_data_hw1 [39:13], // [34:8] RA[39:13]
1751 htd_tte_data_hw1 [12 ], // [7] IE
1752 htd_tte_data_hw1 [11 ], // [6] Side effect
1753 htd_tte_data_hw1 [10 ], // [5] CP
1754 htd_tte_data_hw1 [8 ], // [4] P
1755 htd_tte_data_hw1 [6 ], // [3] W
1756 htd_tte_data_hw1 [2:0 ]} // [2:0] Size[2:0] // pass only 3 bits of page size
1757 // // bit 3 is always 0
1758 );
1759
1760
1761/////////////////////////////////////////////////////////////////////
1762// TSB hit/miss (HW1)
1763/////////////////////////////////////////////////////////////////////
1764// MUX out compare data from TTE Request and TTE Return queues
1765
1766// TAG compare
1767// Minimum tsb page size is 8k, so bits 12:0 are offset into page.
1768// Minimum tsb size is 512 bytes, so next 9 bits of va need not be compared.
1769// So bits 21:0 of VA need not be used for tag compare.
1770// Any bits above bit 21 which are part of page offset should not be used for tag compare.
1771
1772// For pgsz=8k, 12:0 page offset, use 63:22 for tag compare
1773// For pgsz=64k, 15:0 page offset, use 63:22 for tag compare
1774// For pgsz=4M, 21:0 page offset, use 63:22 for tag compare
1775// For pgsz=256M, 27:0 page offset, use 63:28 for tag compare
1776
1777
1778mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_32 mux1_vpn_hw1_w32 (
1779 .din0({va_hw1[37:28], 6'b000000 , htd_tte_tag_ptr_hw1[37:28], 6'b000000 }), //pgsz5, 256Mb
1780 .din1({va_hw1[37:22] , htd_tte_tag_ptr_hw1[37:22] }), //pgsz0-8kb, pgsz1-64k, pgsz3-4M
1781 .sel0(tte_data_hw1[2]),
1782 .dout({thrx_vpn_hw1[37:22], tte_tag_hw1[37:22]})
1783);
1784
1785
1786assign thrx_vpn_hw1[47:38] = va_hw1[47:38];
1787assign tte_tag_hw1[63:38] = htd_tte_tag_ptr_hw1[63:38];
1788
1789
1790mmu_htd_dp_cmp_macro__dcmp_8x__width_16 ptr_cmp0 (
1791 .din1({tte_tag_hw1[37:22]}),
1792 .din0({thrx_vpn_hw1[37:22]}),
1793 .dout(htd_ptr_hit0_hw1)
1794);
1795
1796// compare the context
1797mmu_htd_dp_cmp_macro__dcmp_8x__width_16 ctx_cmp (
1798 .din1({3'b0, htd_tte_tag_ctx_hw1[60:48]}),
1799 .din0({3'b0, ctx_hw1[12:0]}),
1800 .dout(htd_ctx_hit_hw1)
1801);
1802
1803// The reserved bits in tte tag should be all zero
1804// (|({htd_tte_rsvd0_hw1[2:0], htd_tte_rsvd1_hw1[5:0]})) = 0
1805
1806mmu_htd_dp_nor_macro__ports_3__width_3 rsvd_nor1 (
1807 .din0 (htd_tte_rsvd0_hw1[2:0]),
1808 .din1 (htd_tte_rsvd1_hw1[2:0]),
1809 .din2 (htd_tte_rsvd1_hw1[5:3]),
1810 .dout (tte_rsvdx[2:0])
1811);
1812
1813mmu_htd_dp_nand_macro__ports_3__width_1 rsvd_nand1 (
1814 .din0 (tte_rsvdx[0]),
1815 .din1 (tte_rsvdx[1]),
1816 .din2 (tte_rsvdx[2]),
1817 .dout (tte_rsvd)
1818);
1819
1820// tte pagesize should be legal (0000, 0001, 0011 or 0101)
1821// Also tsbsize should be less than the tte size
1822// If these two conditions are not satisfied, then we consider it to be a illegal page size and
1823// treat it as a TSB MISS.
1824//
1825
1826// Truth table for illegal page size
1827// #
1828// # to run /home/rg131678/bin/espresso -Dso -oeqntott legalpage.pla
1829// #
1830// .i 7
1831// .o 1
1832// .ilb tsb2 tsb1 tsb0 tte3 tte2 tte1 tte0
1833// .olb illglpgsz
1834// .p 0
1835// .type fd
1836//
1837// - - - 1 - - - 1
1838//
1839// - - - 0 0 1 0 1
1840// - - - 0 1 0 0 1
1841// - - - 0 1 1 0 1
1842// - - - 0 1 1 1 1
1843// 0 0 1 0 0 0 0 1
1844//
1845// 0 1 0 0 0 0 0 -
1846// 0 1 0 0 0 0 1 -
1847//
1848// 0 1 1 0 0 0 0 1
1849// 0 1 1 0 0 0 1 1
1850//
1851// 1 0 0 0 0 0 0 -
1852// 1 0 0 0 0 0 1 -
1853// 1 0 0 0 0 1 1 -
1854// 1 0 0 0 1 0 1 -
1855//
1856// 1 0 1 0 0 0 0 1
1857// 1 0 1 0 0 0 1 1
1858// 1 0 1 0 0 1 1 1
1859//
1860// 1 1 0 0 0 0 0 -
1861// 1 1 0 0 0 0 1 -
1862// 1 1 0 0 0 1 1 -
1863// 1 1 0 0 1 0 1 -
1864//
1865// 1 1 1 0 0 0 0 -
1866// 1 1 1 0 0 0 1 -
1867// 1 1 1 0 0 1 1 -
1868// 1 1 1 0 1 0 1 -
1869//
1870//
1871// .olb illglpgsz
1872// v7.0 = (tsb1&!tte2&!tte1) | (tsb2&!tte2) | (tsb0&!tte0) | (tte2&tte1) | (
1873// tte2&!tte0) | (tte1&!tte0) | (tte3);
1874//
1875//
1876// reduce this to 3 OR terms
1877// pgsize_illegal[2] = tsb1&!tte2&!tte1
1878// pgsize_illegal[1] = (tsb2&!tte2) | (tsb0&!tte0) | (tte2&tte1)
1879// pgsize_illegal[0] = (tte2&!tte0) | (tte1&!tte0) | (tte3)
1880
1881// illegal page size = pgsize_illegal[2] | pgsize_illegal[1] | pgsize_illegal[0]
1882
1883
1884mmu_htd_dp_inv_macro__width_4 pgsz_inv1 (
1885 .din ({tte_pgsz_hw1[3:0]}),
1886 .dout (tte_pgsz_hw1_[3:0])
1887);
1888
1889mmu_htd_dp_nand_macro__ports_3__width_1 pgsz_nand1 (
1890 .din0 (tte_pgsz_hw1_[2]),
1891 .din1 (tte_pgsz_hw1_[1]),
1892 .din2 (tsb_pgsz_hw1[1]),
1893 .dout (pgsize_illegal_[2])
1894);
1895
1896mmu_htd_dp_inv_macro__width_1 pgsz_inv2 (
1897 .din ({pgsize_illegal_[2]}),
1898 .dout (pgsize_illegal[2])
1899);
1900mmu_htd_dp_nand_macro__ports_2__width_5 pgsz_nand2 (
1901 .din0 ({tte_pgsz_hw1_[2], tte_pgsz_hw1_[0], tte_pgsz_hw1[2], tte_pgsz_hw1_[0], tte_pgsz_hw1_[0]}),
1902 .din1 ({tsb_pgsz_hw1[2], tsb_pgsz_hw1[0], tte_pgsz_hw1[1], tte_pgsz_hw1[2], tte_pgsz_hw1[1]}),
1903 .dout ({pg_illegal_1_0, pg_illegal_1_1, pg_illegal_1_2, pg_illegal_0_0, pg_illegal_0_1})
1904);
1905
1906mmu_htd_dp_nand_macro__ports_3__width_2 pgsz_nand3 (
1907 .din0 ({pg_illegal_1_0, pg_illegal_0_0}),
1908 .din1 ({pg_illegal_1_1, pg_illegal_0_1}),
1909 .din2 ({pg_illegal_1_2, tte_pgsz_hw1_[3]}),
1910 .dout ({pgsize_illegal[1], pgsize_illegal[0]})
1911);
1912
1913
1914//compare tag
1915// tte entry should be valid.
1916// pgsize should be legal
1917mmu_htd_dp_cmp_macro__dcmp_8x__width_16 ptr_cmp1 (
1918 .din1({pgsize_illegal[2:0], 1'b0, tte_rsvd, tte_data_valid, tte_tag_hw1[47:38] }),
1919 .din0({3'b000, 1'b0, 1'b0, 1'b1, thrx_vpn_hw1[47:38] }),
1920 .dout(htd_ptr_hit1_hw1)
1921);
1922
1923// On Niagara2, virtual address VA[63:0] is assumed to be sign extended VA[47:0]. So bit 47 of TTE tag needs to
1924// match 63:48 of VA.
1925mmu_htd_dp_cmp_macro__dcmp_8x__width_16 ptr_cmp2 (
1926 .din1({tte_tag_hw1[63:48] }),
1927 .din0({16{tte_tag_hw1[47]}}),
1928 .dout(htd_ptr_hit2_hw1)
1929);
1930
1931
1932// On Niagara2, bits 55:40 of RA should be 0 (when the tte entry holds RA and not PA).
1933// If the bits are not 0, then a the OutOfRange error will be signalled (again only for RA and not PA)
1934mmu_htd_dp_zero_macro__dcmp_12x__width_16 ra_zero (
1935 .din({htd_tte_data_hw1[55:40] }),
1936 .dout(htd_razero_hw1)
1937);
1938
1939
1940
1941/////////////////////////////////////////////////////////////////////
1942// TTE RETURN QUEUE (HW2)
1943// Queue it only if TSB hit
1944// Holding Registers for TTE Data per thread (HW2)
1945/////////////////////////////////////////////////////////////////////
1946// insert buffer for mintime fix on tte_data_hw1
1947mmu_htd_dp_buff_macro__minbuff_1__stack_50c__width_39 minbuf_tte_data_w39 (
1948.din (tte_data_hw1[38:0]),
1949.dout (minbuf_tte_data_hw1[38:0])
1950);
1951
1952
1953mmu_htd_dp_msff_macro__stack_50c__width_40 e0_tte_reg_w40 (
1954 .scan_in(e0_tte_reg_w40_scanin),
1955 .scan_out(e0_tte_reg_w40_scanout),
1956 .clk (l2clk),
1957 .en (trs_null_st[0]),
1958 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
1959 .dout ({thr0_tte_data_hw2[39:0]}),
1960 .se(se),
1961 .siclk(siclk),
1962 .soclk(soclk),
1963 .pce_ov(pce_ov),
1964 .stop(stop)
1965);
1966
1967mmu_htd_dp_msff_macro__stack_50c__width_40 e1_tte_reg_w40 (
1968 .scan_in(e1_tte_reg_w40_scanin),
1969 .scan_out(e1_tte_reg_w40_scanout),
1970 .clk (l2clk),
1971 .en (trs_null_st[1]),
1972 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
1973 .dout ({thr1_tte_data_hw2[39:0]}),
1974 .se(se),
1975 .siclk(siclk),
1976 .soclk(soclk),
1977 .pce_ov(pce_ov),
1978 .stop(stop)
1979);
1980
1981mmu_htd_dp_msff_macro__stack_50c__width_40 e2_tte_reg_w40 (
1982 .scan_in(e2_tte_reg_w40_scanin),
1983 .scan_out(e2_tte_reg_w40_scanout),
1984 .clk (l2clk),
1985 .en (trs_null_st[2]),
1986 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
1987 .dout ({thr2_tte_data_hw2[39:0]}),
1988 .se(se),
1989 .siclk(siclk),
1990 .soclk(soclk),
1991 .pce_ov(pce_ov),
1992 .stop(stop)
1993);
1994
1995mmu_htd_dp_msff_macro__stack_50c__width_40 e3_tte_reg_w40 (
1996 .scan_in(e3_tte_reg_w40_scanin),
1997 .scan_out(e3_tte_reg_w40_scanout),
1998 .clk (l2clk),
1999 .en (trs_null_st[3]),
2000 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
2001 .dout ({thr3_tte_data_hw2[39:0]}),
2002 .se(se),
2003 .siclk(siclk),
2004 .soclk(soclk),
2005 .pce_ov(pce_ov),
2006 .stop(stop)
2007);
2008
2009mmu_htd_dp_msff_macro__stack_50c__width_40 e4_tte_reg_w40 (
2010 .scan_in(e4_tte_reg_w40_scanin),
2011 .scan_out(e4_tte_reg_w40_scanout),
2012 .clk (l2clk),
2013 .en (trs_null_st[4]),
2014 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
2015 .dout ({thr4_tte_data_hw2[39:0]}),
2016 .se(se),
2017 .siclk(siclk),
2018 .soclk(soclk),
2019 .pce_ov(pce_ov),
2020 .stop(stop)
2021);
2022
2023mmu_htd_dp_msff_macro__stack_50c__width_40 e5_tte_reg_w40 (
2024 .scan_in(e5_tte_reg_w40_scanin),
2025 .scan_out(e5_tte_reg_w40_scanout),
2026 .clk (l2clk),
2027 .en (trs_null_st[5]),
2028 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
2029 .dout ({thr5_tte_data_hw2[39:0]}),
2030 .se(se),
2031 .siclk(siclk),
2032 .soclk(soclk),
2033 .pce_ov(pce_ov),
2034 .stop(stop)
2035);
2036
2037mmu_htd_dp_msff_macro__stack_50c__width_40 e6_tte_reg_w40 (
2038 .scan_in(e6_tte_reg_w40_scanin),
2039 .scan_out(e6_tte_reg_w40_scanout),
2040 .clk (l2clk),
2041 .en (trs_null_st[6]),
2042 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
2043 .dout ({thr6_tte_data_hw2[39:0]}),
2044 .se(se),
2045 .siclk(siclk),
2046 .soclk(soclk),
2047 .pce_ov(pce_ov),
2048 .stop(stop)
2049);
2050
2051mmu_htd_dp_msff_macro__stack_50c__width_40 e7_tte_reg_w40 (
2052 .scan_in(e7_tte_reg_w40_scanin),
2053 .scan_out(e7_tte_reg_w40_scanout),
2054 .clk (l2clk),
2055 .en (trs_null_st[7]),
2056 .din ({htd_razero_hw1,minbuf_tte_data_hw1[38:0]}),
2057 .dout ({thr7_tte_data_hw2[39:0]}),
2058 .se(se),
2059 .siclk(siclk),
2060 .soclk(soclk),
2061 .pce_ov(pce_ov),
2062 .stop(stop)
2063);
2064
2065// cfg_ctlpkt[8:0] = { hwtw_en, use_context_0, use_context_1, ranotpa, sun4v, pgsize[6:4],zero_ctx}
2066
2067//assign htd_ranotpa[7:0] = {thr7_cfg_pkt_hw2[5],thr6_cfg_pkt_hw2[5],thr5_cfg_pkt_hw2[5],thr4_cfg_pkt_hw2[5],
2068// thr3_cfg_pkt_hw2[5],thr2_cfg_pkt_hw2[5],thr1_cfg_pkt_hw2[5],thr0_cfg_pkt_hw2[5]};
2069//assign htd_zeroctx[7:0] = {thr7_cfg_pkt_hw2[0],thr6_cfg_pkt_hw2[0],thr5_cfg_pkt_hw2[0],thr4_cfg_pkt_hw2[0],
2070// thr3_cfg_pkt_hw2[0],thr2_cfg_pkt_hw2[0],thr1_cfg_pkt_hw2[0],thr0_cfg_pkt_hw2[0]};
2071//assign htd_usectx0[7:0] = {thr7_cfg_pkt_hw2[7],thr6_cfg_pkt_hw2[7],thr5_cfg_pkt_hw2[7],thr4_cfg_pkt_hw2[7],
2072// thr3_cfg_pkt_hw2[7],thr2_cfg_pkt_hw2[7],thr1_cfg_pkt_hw2[7],thr0_cfg_pkt_hw2[7]};
2073//assign htd_usectx1[7:0] = {thr7_cfg_pkt_hw2[6],thr6_cfg_pkt_hw2[6],thr5_cfg_pkt_hw2[6],thr4_cfg_pkt_hw2[6],
2074// thr3_cfg_pkt_hw2[6],thr2_cfg_pkt_hw2[6],thr1_cfg_pkt_hw2[6],thr0_cfg_pkt_hw2[6]};
2075
2076/////////////////////////////////////////////////////////////////////
2077// Update TSB prediction array on a tsb hit in hw2
2078// Prediction array consists of 64 entries of 2 bits each, accessed
2079// by 6 bit prediction index pred_idx[5:0].
2080// This array is organized as 4 registers, each of 32 bits.
2081// pred_idx[5:4] select one of the 4 registers, and pred_idx[3:0] select
2082// 2 bits out of the selected 32 bit.
2083// Prediction array is read and written in hw2 for updates.
2084// Prediction array is read in M1 to predict tsb access.
2085/////////////////////////////////////////////////////////////////////
2086mmu_htd_dp_msff_macro__stack_50c__width_32 pred_row0_w32
2087(
2088 .scan_in(pred_row0_w32_scanin),
2089 .scan_out(pred_row0_w32_scanout),
2090 .clk (l2clk),
2091 .en (htc_wrpred0_hw2),
2092 .din (htd_newpred_hw2[31:0]),
2093 .dout (pred_row0[31:0]),
2094 .se(se),
2095 .siclk(siclk),
2096 .soclk(soclk),
2097 .pce_ov(pce_ov),
2098 .stop(stop)
2099);
2100
2101mmu_htd_dp_msff_macro__stack_50c__width_32 pred_row1_w32
2102(
2103 .scan_in(pred_row1_w32_scanin),
2104 .scan_out(pred_row1_w32_scanout),
2105 .clk (l2clk),
2106 .en (htc_wrpred1_hw2),
2107 .din (htd_newpred_hw2[31:0]),
2108 .dout (pred_row1[31:0]),
2109 .se(se),
2110 .siclk(siclk),
2111 .soclk(soclk),
2112 .pce_ov(pce_ov),
2113 .stop(stop)
2114);
2115
2116mmu_htd_dp_msff_macro__stack_50c__width_32 pred_row2_w32
2117(
2118 .scan_in(pred_row2_w32_scanin),
2119 .scan_out(pred_row2_w32_scanout),
2120 .clk (l2clk),
2121 .en (htc_wrpred2_hw2),
2122 .din (htd_newpred_hw2[31:0]),
2123 .dout (pred_row2[31:0]),
2124 .se(se),
2125 .siclk(siclk),
2126 .soclk(soclk),
2127 .pce_ov(pce_ov),
2128 .stop(stop)
2129);
2130
2131mmu_htd_dp_msff_macro__stack_50c__width_32 pred_row3_w32
2132(
2133 .scan_in(pred_row3_w32_scanin),
2134 .scan_out(pred_row3_w32_scanout),
2135 .clk (l2clk),
2136 .en (htc_wrpred3_hw2),
2137 .din (htd_newpred_hw2[31:0]),
2138 .dout (pred_row3[31:0]),
2139 .se(se),
2140 .siclk(siclk),
2141 .soclk(soclk),
2142 .pce_ov(pce_ov),
2143 .stop(stop)
2144);
2145
2146mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_16 mux_pred0_m0_w16
2147(
2148 .din0(pred_row0[15:0]),
2149 .din1(pred_row0[31:16]),
2150 .din2(pred_row1[15:0]),
2151 .din3(pred_row1[31:16]),
2152 .din4(pred_row2[15:0]),
2153 .din5(pred_row2[31:16]),
2154 .din6(pred_row3[15:0]),
2155 .din7(pred_row3[31:16]),
2156 .sel(htd_pred0_idx_m0[5:3]),
2157 .dout(htd_pred0_m0_prebuf[15:0])
2158);
2159
2160mmu_htd_dp_buff_macro__stack_50c__width_16 buf_pred0_m0_w16
2161(
2162 .din(htd_pred0_m0_prebuf[15:0]),
2163 .dout(htd_pred0_m0[15:0])
2164 );
2165
2166
2167mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_16 mux_pred1_m0_w16
2168(
2169 .din0(pred_row0[15:0]),
2170 .din1(pred_row0[31:16]),
2171 .din2(pred_row1[15:0]),
2172 .din3(pred_row1[31:16]),
2173 .din4(pred_row2[15:0]),
2174 .din5(pred_row2[31:16]),
2175 .din6(pred_row3[15:0]),
2176 .din7(pred_row3[31:16]),
2177 .sel(htd_pred1_idx_m0[5:3]),
2178 .dout(htd_pred1_m0_prebuf[15:0])
2179);
2180
2181mmu_htd_dp_buff_macro__stack_50c__width_16 buf_pred1_m0_w16
2182(
2183 .din(htd_pred1_m0_prebuf[15:0]),
2184 .dout(htd_pred1_m0[15:0])
2185 );
2186
2187mmu_htd_dp_mux_macro__mux_aodec__ports_4__stack_50c__width_32 mux_predhw2_w32
2188(
2189 .din0(pred_row0[31:0]),
2190 .din1(pred_row1[31:0]),
2191 .din2(pred_row2[31:0]),
2192 .din3(pred_row3[31:0]),
2193 .sel(htc_upd_pred_idx_hw2[5:4]),
2194 .dout(htd_pred_hw2[31:0])
2195);
2196
2197//assign new_pred_rowlo[15:0] = {
2198// (({2{htc_upd_grp[7]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[7]}} & htd_pred_hw2[15:14])),
2199// (({2{htc_upd_grp[6]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[6]}} & htd_pred_hw2[13:12])),
2200// (({2{htc_upd_grp[5]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[5]}} & htd_pred_hw2[11:10])),
2201// (({2{htc_upd_grp[4]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[4]}} & htd_pred_hw2[9:8])),
2202// (({2{htc_upd_grp[3]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[3]}} & htd_pred_hw2[7:6])),
2203// (({2{htc_upd_grp[2]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[2]}} & htd_pred_hw2[5:4])),
2204// (({2{htc_upd_grp[1]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[1]}} & htd_pred_hw2[3:2])),
2205// (({2{htc_upd_grp[0]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[0]}} & htd_pred_hw2[1:0]))
2206// };
2207//
2208
2209
2210
2211//assign new_pred_rowhi[15:0] = {
2212// (({2{htc_upd_grp[7]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[7]}} & htd_pred_hw2[31:30])),
2213// (({2{htc_upd_grp[6]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[6]}} & htd_pred_hw2[29:28])),
2214// (({2{htc_upd_grp[5]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[5]}} & htd_pred_hw2[27:26])),
2215// (({2{htc_upd_grp[4]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[4]}} & htd_pred_hw2[25:24])),
2216// (({2{htc_upd_grp[3]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[3]}} & htd_pred_hw2[23:22])),
2217// (({2{htc_upd_grp[2]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[2]}} & htd_pred_hw2[21:20])),
2218// (({2{htc_upd_grp[1]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[1]}} & htd_pred_hw2[19:18])),
2219// (({2{htc_upd_grp[0]}} & new_pred_bit[1:0]) | ({2{~htc_upd_grp[0]}} & htd_pred_hw2[17:16]))
2220// };
2221//
2222//assign htc_newpred_hw2[31:0] = {
2223// (({16{upd_pred_idx[3]}} & new_pred_rowhi[15:0]) |
2224// ({16{~upd_pred_idx[3]}} & htd_pred_hw2[31:16])),
2225// (({16{~upd_pred_idx[3]}} & new_pred_rowlo[15:0]) |
2226// ({16{upd_pred_idx[3]}} & htd_pred_hw2[15:0]))
2227// };
2228
2229
2230mmu_htd_dp_nand_macro__ports_2__stack_50c__width_32 nand_newpredrow_w32 (
2231.din0 ({16{htc_new_pred_bit[1:0]}}),
2232.din1 ({{2{htc_upd_grp[7]}},{2{htc_upd_grp[6]}},{2{htc_upd_grp[5]}},{2{htc_upd_grp[4]}},
2233 {2{htc_upd_grp[3]}},{2{htc_upd_grp[2]}},{2{htc_upd_grp[1]}},{2{htc_upd_grp[0]}},
2234 {2{htc_upd_grp[7]}},{2{htc_upd_grp[6]}},{2{htc_upd_grp[5]}},{2{htc_upd_grp[4]}},
2235 {2{htc_upd_grp[3]}},{2{htc_upd_grp[2]}},{2{htc_upd_grp[1]}},{2{htc_upd_grp[0]}}}),
2236.dout (new_row[31:0])
2237);
2238
2239mmu_htd_dp_nand_macro__ports_2__stack_50c__width_32 nand_oldpredrow_w32 (
2240.din0 ({htd_pred_hw2[31:0]}),
2241.din1 ({{2{htc_upd_grp_x[7]}},{2{htc_upd_grp_x[6]}},{2{htc_upd_grp_x[5]}},{2{htc_upd_grp_x[4]}},
2242 {2{htc_upd_grp_x[3]}},{2{htc_upd_grp_x[2]}},{2{htc_upd_grp_x[1]}},{2{htc_upd_grp_x[0]}},
2243 {2{htc_upd_grp_x[7]}},{2{htc_upd_grp_x[6]}},{2{htc_upd_grp_x[5]}},{2{htc_upd_grp_x[4]}},
2244 {2{htc_upd_grp_x[3]}},{2{htc_upd_grp_x[2]}},{2{htc_upd_grp_x[1]}},{2{htc_upd_grp_x[0]}}}),
2245.dout (old_row[31:0])
2246);
2247
2248mmu_htd_dp_nand_macro__ports_2__stack_50c__width_32 nand_predrow_w32 (
2249.din0 (new_row[31:0]),
2250.din1 (old_row[31:0]),
2251.dout (new_pred_row[31:0])
2252);
2253
2254mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_32 mux_predrow_w32 (
2255 .din0 ({new_pred_row[31:16],htd_pred_hw2[15:0]}),
2256 .din1 ({htd_pred_hw2[31:16],new_pred_row[15:0]}),
2257 .sel0 ({htc_upd_pred_idx_hw2[3]}),
2258 .dout ({htd_newpred_hw2[31:0]})
2259);
2260
2261
2262
2263/////////////////////////////////////////////////////////////////////
2264// MRA Access Cycle
2265// => Conf. Register (M1)
2266// => Read Range/Offset (HW3)
2267// => Muxing TTE data for thread whose RR values are available
2268/////////////////////////////////////////////////////////////////////
2269// MUX out RA/PA of return tte queue, prepare for RR check and RA2PA
2270mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_40 mux_ttedata_hw3_w40 (
2271 .din0({thr0_tte_data_hw2[39:0]}),
2272 .din1({thr1_tte_data_hw2[39:0]}),
2273 .din2({thr2_tte_data_hw2[39:0]}),
2274 .din3({thr3_tte_data_hw2[39:0]}),
2275 .din4({thr4_tte_data_hw2[39:0]}),
2276 .din5({thr5_tte_data_hw2[39:0]}),
2277 .din6({thr6_tte_data_hw2[39:0]}),
2278 .din7({thr7_tte_data_hw2[39:0]}),
2279 .sel0(htc_thr_prevalid_hw3[0]),
2280 .sel1(htc_thr_prevalid_hw3[1]),
2281 .sel2(htc_thr_prevalid_hw3[2]),
2282 .sel3(htc_thr_prevalid_hw3[3]),
2283 .sel4(htc_thr_prevalid_hw3[4]),
2284 .sel5(htc_thr_prevalid_hw3[5]),
2285 .sel6(htc_thr_prevalid_hw3[6]),
2286 .sel7(htc_thr_prevalid_hw3[7]),
2287 .dout({tte_data_hw3[39:0]})
2288);
2289
2290
2291
2292
2293//assign htd_pgsz_hw3[2:0] = tte_data_hw3[2:0];
2294
2295
2296//generate the ramask
2297
2298//mux_macro mux_ramask_w18 (width=18, ports=8, mux=aodec, stack=36r) (
2299// .din0(18'b000000000000000),
2300// .din1(18'b000000000000111),
2301// .din2(18'b000000000111111),
2302// .din3(18'b000000111111111),
2303// .din4(18'b000111111111111),
2304// .din5(18'b111111111111111),
2305// .din6(18'b111111111111111),
2306// .din7(18'b111111111111111),
2307// .sel(tte_data_hw2[2:0]),
2308// .dout(ra_mask_hw3[30:13])
2309//);
2310
2311
2312// Use aope mux, because the selects are not one-hot
2313mmu_htd_dp_mux_macro__mux_aope__ports_4__stack_16r__width_15 mux_ramask_w15 (
2314 .din0({15'b111111111111111}), //pgsz5
2315 .din1({15'b000000111111111}), //pgsz3
2316 .din2({15'b000000000000111}), //pgsz1
2317 .din3({15'b000000000000000}), //pgsz0
2318 .sel0(tte_data_hw3[2]),
2319 .sel1(tte_data_hw3[1]),
2320 .sel2(tte_data_hw3[0]),
2321 .dout({ra_mask_hw3[27:13]})
2322);
2323
2324
2325mmu_htd_dp_msff_macro__stack_16r__width_15 reg_ramaskhw4_w15 (
2326 .scan_in(reg_ramaskhw4_w15_scanin),
2327 .scan_out(reg_ramaskhw4_w15_scanout),
2328 .clk (l2clk),
2329 .en (htc_hw3_clken),
2330 .din ({ra_mask_hw3[27:13]}),
2331 .dout ({htc_ra_mask_hw4[27:13]}),
2332 .se(se),
2333 .siclk(siclk),
2334 .soclk(soclk),
2335 .pce_ov(pce_ov),
2336 .stop(stop)
2337);
2338
2339
2340
2341mmu_htd_dp_msff_macro__stack_50c__width_40 reg_ttedatahw4_w40 (
2342 .scan_in(reg_ttedatahw4_w40_scanin),
2343 .scan_out(reg_ttedatahw4_w40_scanout),
2344 .clk (l2clk),
2345 .en (htc_hw3_clken),
2346 .din ({tte_data_hw3[39:0]}),
2347 .dout ({tte_data_hw4[39:0]}),
2348 .se(se),
2349 .siclk(siclk),
2350 .soclk(soclk),
2351 .pce_ov(pce_ov),
2352 .stop(stop)
2353);
2354
2355
2356// Range and offset are returned from mra in HW3
2357
2358mmu_htd_dp_msff_macro__stack_58c__width_27 reg_offsethw4_w27
2359(
2360 .scan_in(reg_offsethw4_w27_scanin),
2361 .scan_out(reg_offsethw4_w27_scanout),
2362 .clk (l2clk),
2363 .en (htc_hw3_clken),
2364 .din ({mra_data[26:0]}),
2365 .dout ({offset0_hw4[39:13]}),
2366 .se(se),
2367 .siclk(siclk),
2368 .soclk(soclk),
2369 .pce_ov(pce_ov),
2370 .stop(stop)
2371);
2372
2373mmu_htd_dp_msff_macro__stack_58c__width_55 reg_rangehw4_w55
2374(
2375 .scan_in(reg_rangehw4_w55_scanin),
2376 .scan_out(reg_rangehw4_w55_scanout),
2377 .clk (l2clk),
2378 .en (htc_hw3_clken),
2379 .din ({mra_data[81:27]}),
2380 .dout ({range0_hw4[63],range0_hw4[53:0]}),
2381 .se(se),
2382 .siclk(siclk),
2383 .soclk(soclk),
2384 .pce_ov(pce_ov),
2385 .stop(stop)
2386);
2387
2388/////////////////////////////////////////////////////////////////////
2389// Real Address to Physical Address (HW4)
2390/////////////////////////////////////////////////////////////////////
2391
2392
2393assign ra_mask_hw4[39:13] = {12'b0,htc_ra_mask_hw4[27:13]};
2394
2395
2396/////////////////////////////////////////////////////////////////////
2397// Range Window Checking
2398// Check whether TTE is within real range
2399// Cout = A + (~B) + (cin=1'b1);
2400// If Cout == 1, then A >=B
2401// If Cout == 0, then A < B
2402// Here A = TTE_DATA
2403// and B = Lower Range or Upper Range
2404
2405
2406// We need to check for A>B
2407// So modify the above check to not add cin=1
2408// In this case Cout is generated only if A>B
2409// Cout = A + (~B) + (cin=0)
2410// In other words, a cout from a subtractor can give us A>=B, but
2411// we need A>B information. A>B, implies A-1>=B, This is detected by doing (A-1) -B,
2412// which in 2's comp is (A-1) + (~B) + (cin=1) = A + (~B).
2413//
2414// For upper range check, A = TTE OR'd with MASK (upper address on page), B = range_hi,
2415// A>B indicates out of range
2416// For lower range check, A = range_lo, B = TTE And'd with ~MASK (lower address on page)
2417// A>B indicates in range.
2418/////////////////////////////////////////////////////////////////////
2419// range_en bit is physically located in bit 54.
2420// It is bit 63 in software visible real range register
2421assign htd_range_en_hw4 = range0_hw4[63];
2422
2423
2424
2425// Clear W bit in TTE if W_mask==1 in offset register
2426
2427mmu_htd_dp_inv_macro__stack_36r__width_27 inv1_w27 (
2428 .din({ra_mask_hw4[39:13]}),
2429 .dout({ra_mask_hw4_[39:13]})
2430);
2431
2432// generate the lower bound for the page pointed to by tte
2433mmu_htd_dp_and_macro__ports_2__stack_36r__width_27 and1_w27 (
2434 .din0({tte_data_hw4[34:8]}), //PA
2435 .din1({ra_mask_hw4_[39:13]}),
2436 .dout({tte_lo[39:13]})
2437);
2438
2439// generate the upper bound for the page pointed to by tte
2440mmu_htd_dp_or_macro__ports_2__stack_36r__width_27 or1_w27 (
2441 .din0({tte_data_hw4[34:8]}),
2442 .din1({ra_mask_hw4[39:13]}),
2443 .dout({tte_hi[39:13]})
2444);
2445
2446/////////////////////////////////////////////////////////////////////
2447//Real Range Checking (0)
2448// lower range : range0[26:0]
2449// upper range : range0[53:27]
2450
2451/////////////////////////////////////////////////////////////////////
2452mmu_htd_dp_inv_macro__stack_36r__width_28 inv2_w28 (
2453 .din({ra_to_pa_upper_hit_, tte_lo[39:13]}),
2454 .dout({htd_ra2pa_upper_hit_hw4, tte_lo_[39:13]})
2455);
2456
2457mmu_htd_dp_inv_macro__stack_36r__width_28 inv3_w28 (
2458 .din({ ra_to_pa_lower_hit_, range0_hw4[53:27]}),
2459 .dout({htd_ra2pa_lower_hit_hw4, rg0_hi_[39:13]})
2460);
2461
2462assign rg0_lo[39:13] = range0_hw4[26:0];
2463
2464assign htd_razero_hw4 = tte_data_hw4[39];
2465
2466// lower limit check,
2467// range_lo > tte_lo => ~ra2pa_lower_hit
2468mmu_htd_dp_cla_macro__width_32 gt_lb_cla_rg0 (
2469 .din0({rg0_lo[39:13], 5'b00000}),
2470 .din1({tte_lo_[39:13], 5'b11111}),
2471 .cin (1'b0),
2472 .cout(ra_to_pa_lower_hit_),
2473 .dout(sum0_unused[31:0])
2474);
2475
2476// uppe limit check
2477// tte_hi > range_hi => ~ra2pa_upper_hit
2478mmu_htd_dp_cla_macro__width_32 lt_ub_cla_rg0 (
2479 .din0({tte_hi[39:13], 5'b00000}),
2480 .din1({rg0_hi_[39:13], 5'b11111}),
2481 .cin (1'b0),
2482 .cout(ra_to_pa_upper_hit_),
2483 .dout(sum1_unused[31:0])
2484);
2485
2486// conver ra to pa, by adding offset to ra
2487mmu_htd_dp_cla_macro__width_12 cla0_ratopa (
2488 .din0(offset0_hw4[24:13]),
2489 .din1(tte_data_hw4[19:8]),
2490 .cin (1'b0),
2491 .cout(cout0),
2492 .dout(pa_0_din[24:13])
2493);
2494
2495mmu_htd_dp_cla_macro__width_16 cla1_ratopa (
2496 .din0({1'b0, offset0_hw4[39:25]}),
2497 .din1({1'b0, tte_data_hw4[34:20]}),
2498 .cin (cout0),
2499 .cout(carry0_unused),
2500 .dout({sum_unused, pa_0_din[39:25]})
2501);
2502//assign pa_0_din[39:30] = offset0[39:30];
2503
2504
2505// Prepare to write to I/D TLB registers
2506//
2507mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_36r__width_27 mux_tlbdatainhw4_w27 (
2508 .din0 ({pa_0_din[39:13]}), // RA
2509 .din1 (tte_data_hw4[34:8]), //PA
2510 .sel0 ({htc_ranotpa_hw4}),
2511 .dout ({htd_tlbdatain[34:8]})
2512);
2513
2514
2515assign htd_tlbdatain_hw4[38:0] = {tte_data_hw4[38:35], htd_tlbdatain[34:8], tte_data_hw4[7:0]};
2516
2517
2518mmu_htd_dp_msff_macro__stack_50c__width_39 reg_tlbdatainhw5_w39 (
2519 .scan_in(reg_tlbdatainhw5_w39_scanin),
2520 .scan_out(reg_tlbdatainhw5_w39_scanout),
2521 .clk (l2clk),
2522 .en (htc_hw4_clken),
2523 .din ({htd_tlbdatain_hw4[38:0]}),
2524 .dout ({htd_tlbdatain_hw5[38:0]}),
2525 .se(se),
2526 .siclk(siclk),
2527 .soclk(soclk),
2528 .pce_ov(pce_ov),
2529 .stop(stop)
2530);
2531
2532assign htd_tlbdatain_din[38:0] = htd_tlbdatain_hw5[38:0];
2533
2534
2535
2536// tag access mux
2537mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_48 mux_vactx_w48 (
2538 .din0({thr0_va_ff[47:13], htd_thr0_ctx_ff[12:0]}),
2539 .din1({thr1_va_ff[47:13], htd_thr1_ctx_ff[12:0]}),
2540 .din2({thr2_va_ff[47:13], htd_thr2_ctx_ff[12:0]}),
2541 .din3({thr3_va_ff[47:13], htd_thr3_ctx_ff[12:0]}),
2542 .din4({thr4_va_ff[47:13], htd_thr4_ctx_ff[12:0]}),
2543 .din5({thr5_va_ff[47:13], htd_thr5_ctx_ff[12:0]}),
2544 .din6({thr6_va_ff[47:13], htd_thr6_ctx_ff[12:0]}),
2545 .din7({thr7_va_ff[47:13], htd_thr7_ctx_ff[12:0]}),
2546 .sel0(htc_rd_tteq[0]),
2547 .sel1(htc_rd_tteq[1]),
2548 .sel2(htc_rd_tteq[2]),
2549 .sel3(htc_rd_tteq[3]),
2550 .sel4(htc_rd_tteq[4]),
2551 .sel5(htc_rd_tteq[5]),
2552 .sel6(htc_rd_tteq[6]),
2553 .sel7(htc_rd_tteq[7]),
2554 .dout({htd_tagaccess_din_prebuf[47:0]})
2555);
2556
2557mmu_htd_dp_buff_macro__stack_50c__width_48 buf_vactx_w48 (
2558.din({htd_tagaccess_din_prebuf[47:0]}),
2559.dout({htd_tagaccess_din[47:0]})
2560);
2561
2562assign lsu_tlu_dsfsr_ct_b_1_unused = lsu_tlu_dsfsr_ct_b[1];
2563assign l15_spc_data1_unused[25:0] = {l15_spc_data1[105:90],
2564 l15_spc_data1[61:56],l15_spc_data1[9],l15_spc_data1[5:3]};
2565assign l15_mmu_cpkt_unused = l15_mmu_cpkt[5];
2566
2567
2568
2569
2570// fixscan start:
2571assign reg_tlbmiss_w30_scanin = scan_in ;
2572assign reg0_vactx_w50_scanin = reg_tlbmiss_w30_scanout ;
2573assign reg1_vactx_w50_scanin = reg0_vactx_w50_scanout ;
2574assign reg2_vactx_w50_scanin = reg1_vactx_w50_scanout ;
2575assign reg3_vactx_w50_scanin = reg2_vactx_w50_scanout ;
2576assign reg4_vactx_w50_scanin = reg3_vactx_w50_scanout ;
2577assign reg5_vactx_w50_scanin = reg4_vactx_w50_scanout ;
2578assign reg6_vactx_w50_scanin = reg5_vactx_w50_scanout ;
2579assign reg7_vactx_w50_scanin = reg6_vactx_w50_scanout ;
2580assign reg_tsbconf_m2_w39_scanin = reg7_vactx_w50_scanout ;
2581assign reg0_tsbcfg_w28_scanin = reg_tsbconf_m2_w39_scanout;
2582assign reg1_tsbcfg_w28_scanin = reg0_tsbcfg_w28_scanout ;
2583assign reg2_tsbcfg_w28_scanin = reg1_tsbcfg_w28_scanout ;
2584assign reg3_tsbcfg_w28_scanin = reg2_tsbcfg_w28_scanout ;
2585assign reg4_tsbcfg_w28_scanin = reg3_tsbcfg_w28_scanout ;
2586assign reg5_tsbcfg_w28_scanin = reg4_tsbcfg_w28_scanout ;
2587assign reg6_tsbcfg_w28_scanin = reg5_tsbcfg_w28_scanout ;
2588assign reg7_tsbcfg_w28_scanin = reg6_tsbcfg_w28_scanout ;
2589assign reg_q1addr_w36_scanin = reg7_tsbcfg_w28_scanout ;
2590assign reg_q0addr_ng_w36_scanin = reg_q1addr_w36_scanout ;
2591assign reg_q0addr_g_w36_scanin = reg_q0addr_ng_w36_scanout;
2592assign reg_l15addr_w36_scanin = reg_q0addr_g_w36_scanout ;
2593assign reg_vpn_w40_scanin = reg_l15addr_w36_scanout ;
2594assign reg_tsbcfg_hw1_w30_scanin = reg_vpn_w40_scanout ;
2595assign reg_l15vahw1_w36_scanin = reg_tsbcfg_hw1_w30_scanout;
2596assign reg_l15ctx_w34_scanin = reg_l15vahw1_w36_scanout ;
2597assign reg_l15data_w49_scanin = reg_l15ctx_w34_scanout ;
2598assign e0_tte_reg_w40_scanin = reg_l15data_w49_scanout ;
2599assign e1_tte_reg_w40_scanin = e0_tte_reg_w40_scanout ;
2600assign e2_tte_reg_w40_scanin = e1_tte_reg_w40_scanout ;
2601assign e3_tte_reg_w40_scanin = e2_tte_reg_w40_scanout ;
2602assign e4_tte_reg_w40_scanin = e3_tte_reg_w40_scanout ;
2603assign e5_tte_reg_w40_scanin = e4_tte_reg_w40_scanout ;
2604assign e6_tte_reg_w40_scanin = e5_tte_reg_w40_scanout ;
2605assign e7_tte_reg_w40_scanin = e6_tte_reg_w40_scanout ;
2606assign pred_row0_w32_scanin = e7_tte_reg_w40_scanout ;
2607assign pred_row1_w32_scanin = pred_row0_w32_scanout ;
2608assign pred_row2_w32_scanin = pred_row1_w32_scanout ;
2609assign pred_row3_w32_scanin = pred_row2_w32_scanout ;
2610assign reg_ramaskhw4_w15_scanin = pred_row3_w32_scanout ;
2611assign reg_ttedatahw4_w40_scanin = reg_ramaskhw4_w15_scanout;
2612assign reg_offsethw4_w27_scanin = reg_ttedatahw4_w40_scanout;
2613assign reg_rangehw4_w55_scanin = reg_offsethw4_w27_scanout;
2614assign reg_tlbdatainhw5_w39_scanin = reg_rangehw4_w55_scanout ;
2615assign scan_out = reg_tlbdatainhw5_w39_scanout;
2616// fixscan end:
2617endmodule
2618
2619
2620//
2621// buff macro
2622//
2623//
2624
2625
2626
2627
2628
2629module mmu_htd_dp_buff_macro__dbuff_32x__rep_1__stack_none__width_4 (
2630 din,
2631 dout);
2632 input [3:0] din;
2633 output [3:0] dout;
2634
2635
2636
2637
2638
2639
2640buff #(4) d0_0 (
2641.in(din[3:0]),
2642.out(dout[3:0])
2643);
2644
2645
2646
2647
2648
2649
2650
2651
2652endmodule
2653
2654
2655
2656
2657
2658//
2659// invert macro
2660//
2661//
2662
2663
2664
2665
2666
2667module mmu_htd_dp_inv_macro__width_8 (
2668 din,
2669 dout);
2670 input [7:0] din;
2671 output [7:0] dout;
2672
2673
2674
2675
2676
2677
2678inv #(8) d0_0 (
2679.in(din[7:0]),
2680.out(dout[7:0])
2681);
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691endmodule
2692
2693
2694
2695
2696
2697//
2698// or macro for ports = 2,3
2699//
2700//
2701
2702
2703
2704
2705
2706module mmu_htd_dp_or_macro__ports_2__width_8 (
2707 din0,
2708 din1,
2709 dout);
2710 input [7:0] din0;
2711 input [7:0] din1;
2712 output [7:0] dout;
2713
2714
2715
2716
2717
2718
2719or2 #(8) d0_0 (
2720.in0(din0[7:0]),
2721.in1(din1[7:0]),
2722.out(dout[7:0])
2723);
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733endmodule
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743// any PARAMS parms go into naming of macro
2744
2745module mmu_htd_dp_msff_macro__stack_50c__width_30 (
2746 din,
2747 clk,
2748 en,
2749 se,
2750 scan_in,
2751 siclk,
2752 soclk,
2753 pce_ov,
2754 stop,
2755 dout,
2756 scan_out);
2757wire l1clk;
2758wire siclk_out;
2759wire soclk_out;
2760wire [28:0] so;
2761
2762 input [29:0] din;
2763
2764
2765 input clk;
2766 input en;
2767 input se;
2768 input scan_in;
2769 input siclk;
2770 input soclk;
2771 input pce_ov;
2772 input stop;
2773
2774
2775
2776 output [29:0] dout;
2777
2778
2779 output scan_out;
2780
2781
2782
2783
2784cl_dp1_l1hdr_8x c0_0 (
2785.l2clk(clk),
2786.pce(en),
2787.aclk(siclk),
2788.bclk(soclk),
2789.l1clk(l1clk),
2790 .se(se),
2791 .pce_ov(pce_ov),
2792 .stop(stop),
2793 .siclk_out(siclk_out),
2794 .soclk_out(soclk_out)
2795);
2796dff #(30) d0_0 (
2797.l1clk(l1clk),
2798.siclk(siclk_out),
2799.soclk(soclk_out),
2800.d(din[29:0]),
2801.si({scan_in,so[28:0]}),
2802.so({so[28:0],scan_out}),
2803.q(dout[29:0])
2804);
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825endmodule
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835//
2836// and macro for ports = 2,3,4
2837//
2838//
2839
2840
2841
2842
2843
2844module mmu_htd_dp_and_macro__stack_50c__width_13 (
2845 din0,
2846 din1,
2847 dout);
2848 input [12:0] din0;
2849 input [12:0] din1;
2850 output [12:0] dout;
2851
2852
2853
2854
2855
2856
2857and2 #(13) d0_0 (
2858.in0(din0[12:0]),
2859.in1(din1[12:0]),
2860.out(dout[12:0])
2861);
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871endmodule
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881// any PARAMS parms go into naming of macro
2882
2883module mmu_htd_dp_msff_macro__mux_aope__ports_4__stack_50c__width_50 (
2884 din0,
2885 din1,
2886 din2,
2887 din3,
2888 sel0,
2889 sel1,
2890 sel2,
2891 clk,
2892 en,
2893 se,
2894 scan_in,
2895 siclk,
2896 soclk,
2897 pce_ov,
2898 stop,
2899 dout,
2900 scan_out);
2901wire psel0;
2902wire psel1;
2903wire psel2;
2904wire psel3;
2905wire [49:0] muxout;
2906wire l1clk;
2907wire siclk_out;
2908wire soclk_out;
2909wire [48:0] so;
2910
2911 input [49:0] din0;
2912 input [49:0] din1;
2913 input [49:0] din2;
2914 input [49:0] din3;
2915 input sel0;
2916 input sel1;
2917 input sel2;
2918
2919
2920 input clk;
2921 input en;
2922 input se;
2923 input scan_in;
2924 input siclk;
2925 input soclk;
2926 input pce_ov;
2927 input stop;
2928
2929
2930
2931 output [49:0] dout;
2932
2933
2934 output scan_out;
2935
2936
2937
2938
2939cl_dp1_penc4_8x c1_0 (
2940 .test(1'b1),
2941 .sel0(sel0),
2942 .sel1(sel1),
2943 .sel2(sel2),
2944 .psel0(psel0),
2945 .psel1(psel1),
2946 .psel2(psel2),
2947 .psel3(psel3)
2948);
2949
2950mux4s #(50) d1_0 (
2951 .sel0(psel0),
2952 .sel1(psel1),
2953 .sel2(psel2),
2954 .sel3(psel3),
2955 .in0(din0[49:0]),
2956 .in1(din1[49:0]),
2957 .in2(din2[49:0]),
2958 .in3(din3[49:0]),
2959.dout(muxout[49:0])
2960);
2961cl_dp1_l1hdr_8x c0_0 (
2962.l2clk(clk),
2963.pce(en),
2964.aclk(siclk),
2965.bclk(soclk),
2966.l1clk(l1clk),
2967 .se(se),
2968 .pce_ov(pce_ov),
2969 .stop(stop),
2970 .siclk_out(siclk_out),
2971 .soclk_out(soclk_out)
2972);
2973dff #(50) d0_0 (
2974.l1clk(l1clk),
2975.siclk(siclk_out),
2976.soclk(soclk_out),
2977.d(muxout[49:0]),
2978.si({scan_in,so[48:0]}),
2979.so({so[48:0],scan_out}),
2980.q(dout[49:0])
2981);
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002endmodule
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012//
3013// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
3014//
3015//
3016
3017
3018
3019
3020
3021module mmu_htd_dp_zero_macro__dcmp_12x__width_16 (
3022 din,
3023 dout);
3024 input [15:0] din;
3025 output dout;
3026
3027
3028
3029
3030
3031
3032zero #(16) m0_0 (
3033.in(din[15:0]),
3034.out(dout)
3035);
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046endmodule
3047
3048
3049
3050
3051
3052//
3053// buff macro
3054//
3055//
3056
3057
3058
3059
3060
3061module mmu_htd_dp_buff_macro__stack_50c__width_8 (
3062 din,
3063 dout);
3064 input [7:0] din;
3065 output [7:0] dout;
3066
3067
3068
3069
3070
3071
3072buff #(8) d0_0 (
3073.in(din[7:0]),
3074.out(dout[7:0])
3075);
3076
3077
3078
3079
3080
3081
3082
3083
3084endmodule
3085
3086
3087
3088
3089
3090// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3091// also for pass-gate with decoder
3092
3093
3094
3095
3096
3097// any PARAMS parms go into naming of macro
3098
3099module mmu_htd_dp_mux_macro__dmux_8x__mux_aonpe__ports_4__stack_58c__width_33 (
3100 din0,
3101 sel0,
3102 din1,
3103 sel1,
3104 din2,
3105 sel2,
3106 din3,
3107 sel3,
3108 dout);
3109wire buffout0;
3110wire buffout1;
3111wire buffout2;
3112wire buffout3;
3113
3114 input [32:0] din0;
3115 input sel0;
3116 input [32:0] din1;
3117 input sel1;
3118 input [32:0] din2;
3119 input sel2;
3120 input [32:0] din3;
3121 input sel3;
3122 output [32:0] dout;
3123
3124
3125
3126
3127
3128cl_dp1_muxbuff4_8x c0_0 (
3129 .in0(sel0),
3130 .in1(sel1),
3131 .in2(sel2),
3132 .in3(sel3),
3133 .out0(buffout0),
3134 .out1(buffout1),
3135 .out2(buffout2),
3136 .out3(buffout3)
3137);
3138mux4s #(33) d0_0 (
3139 .sel0(buffout0),
3140 .sel1(buffout1),
3141 .sel2(buffout2),
3142 .sel3(buffout3),
3143 .in0(din0[32:0]),
3144 .in1(din1[32:0]),
3145 .in2(din2[32:0]),
3146 .in3(din3[32:0]),
3147.dout(dout[32:0])
3148);
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162endmodule
3163
3164
3165//
3166// xor macro for ports = 2,3
3167//
3168//
3169
3170
3171
3172
3173
3174module mmu_htd_dp_xor_macro__ports_3__stack_64c__width_12 (
3175 din0,
3176 din1,
3177 din2,
3178 dout);
3179 input [11:0] din0;
3180 input [11:0] din1;
3181 input [11:0] din2;
3182 output [11:0] dout;
3183
3184
3185
3186
3187
3188xor3 #(12) d0_0 (
3189.in0(din0[11:0]),
3190.in1(din1[11:0]),
3191.in2(din2[11:0]),
3192.out(dout[11:0])
3193);
3194
3195
3196
3197
3198
3199
3200
3201
3202endmodule
3203
3204
3205
3206
3207
3208//
3209// xor macro for ports = 2,3
3210//
3211//
3212
3213
3214
3215
3216
3217module mmu_htd_dp_xor_macro__ports_2__stack_64c__width_6 (
3218 din0,
3219 din1,
3220 dout);
3221 input [5:0] din0;
3222 input [5:0] din1;
3223 output [5:0] dout;
3224
3225
3226
3227
3228
3229xor2 #(6) d0_0 (
3230.in0(din0[5:0]),
3231.in1(din1[5:0]),
3232.out(dout[5:0])
3233);
3234
3235
3236
3237
3238
3239
3240
3241
3242endmodule
3243
3244
3245
3246
3247
3248// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3249// also for pass-gate with decoder
3250
3251
3252
3253
3254
3255// any PARAMS parms go into naming of macro
3256
3257module mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_40 (
3258 din0,
3259 din1,
3260 sel0,
3261 dout);
3262wire psel0_unused;
3263wire psel1;
3264
3265 input [39:0] din0;
3266 input [39:0] din1;
3267 input sel0;
3268 output [39:0] dout;
3269
3270
3271
3272
3273
3274cl_dp1_penc2_8x c0_0 (
3275 .sel0(sel0),
3276 .psel0(psel0_unused),
3277 .psel1(psel1)
3278);
3279
3280mux2e #(40) d0_0 (
3281 .sel(psel1),
3282 .in0(din0[39:0]),
3283 .in1(din1[39:0]),
3284.dout(dout[39:0])
3285);
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299endmodule
3300
3301
3302// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3303// also for pass-gate with decoder
3304
3305
3306
3307
3308
3309// any PARAMS parms go into naming of macro
3310
3311module mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_42 (
3312 din0,
3313 din1,
3314 sel0,
3315 dout);
3316wire psel0_unused;
3317wire psel1;
3318
3319 input [41:0] din0;
3320 input [41:0] din1;
3321 input sel0;
3322 output [41:0] dout;
3323
3324
3325
3326
3327
3328cl_dp1_penc2_8x c0_0 (
3329 .sel0(sel0),
3330 .psel0(psel0_unused),
3331 .psel1(psel1)
3332);
3333
3334mux2e #(42) d0_0 (
3335 .sel(psel1),
3336 .in0(din0[41:0]),
3337 .in1(din1[41:0]),
3338.dout(dout[41:0])
3339);
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353endmodule
3354
3355
3356// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3357// also for pass-gate with decoder
3358
3359
3360
3361
3362
3363// any PARAMS parms go into naming of macro
3364
3365module mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_58c__width_39 (
3366 din0,
3367 din1,
3368 sel0,
3369 dout);
3370wire psel0_unused;
3371wire psel1;
3372
3373 input [38:0] din0;
3374 input [38:0] din1;
3375 input sel0;
3376 output [38:0] dout;
3377
3378
3379
3380
3381
3382cl_dp1_penc2_8x c0_0 (
3383 .sel0(sel0),
3384 .psel0(psel0_unused),
3385 .psel1(psel1)
3386);
3387
3388mux2e #(39) d0_0 (
3389 .sel(psel1),
3390 .in0(din0[38:0]),
3391 .in1(din1[38:0]),
3392.dout(dout[38:0])
3393);
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407endmodule
3408
3409
3410
3411
3412
3413
3414// any PARAMS parms go into naming of macro
3415
3416module mmu_htd_dp_msff_macro__stack_58c__width_39 (
3417 din,
3418 clk,
3419 en,
3420 se,
3421 scan_in,
3422 siclk,
3423 soclk,
3424 pce_ov,
3425 stop,
3426 dout,
3427 scan_out);
3428wire l1clk;
3429wire siclk_out;
3430wire soclk_out;
3431wire [37:0] so;
3432
3433 input [38:0] din;
3434
3435
3436 input clk;
3437 input en;
3438 input se;
3439 input scan_in;
3440 input siclk;
3441 input soclk;
3442 input pce_ov;
3443 input stop;
3444
3445
3446
3447 output [38:0] dout;
3448
3449
3450 output scan_out;
3451
3452
3453
3454
3455cl_dp1_l1hdr_8x c0_0 (
3456.l2clk(clk),
3457.pce(en),
3458.aclk(siclk),
3459.bclk(soclk),
3460.l1clk(l1clk),
3461 .se(se),
3462 .pce_ov(pce_ov),
3463 .stop(stop),
3464 .siclk_out(siclk_out),
3465 .soclk_out(soclk_out)
3466);
3467dff #(39) d0_0 (
3468.l1clk(l1clk),
3469.siclk(siclk_out),
3470.soclk(soclk_out),
3471.d(din[38:0]),
3472.si({scan_in,so[37:0]}),
3473.so({so[37:0],scan_out}),
3474.q(dout[38:0])
3475);
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496endmodule
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3507// also for pass-gate with decoder
3508
3509
3510
3511
3512
3513// any PARAMS parms go into naming of macro
3514
3515module mmu_htd_dp_mux_macro__mux_aodec__ports_4__stack_50c__width_28 (
3516 din0,
3517 din1,
3518 din2,
3519 din3,
3520 sel,
3521 dout);
3522wire psel0;
3523wire psel1;
3524wire psel2;
3525wire psel3;
3526
3527 input [27:0] din0;
3528 input [27:0] din1;
3529 input [27:0] din2;
3530 input [27:0] din3;
3531 input [1:0] sel;
3532 output [27:0] dout;
3533
3534
3535
3536
3537
3538cl_dp1_pdec4_8x c0_0 (
3539 .test(1'b1),
3540 .sel0(sel[0]),
3541 .sel1(sel[1]),
3542 .psel0(psel0),
3543 .psel1(psel1),
3544 .psel2(psel2),
3545 .psel3(psel3)
3546);
3547
3548mux4s #(28) d0_0 (
3549 .sel0(psel0),
3550 .sel1(psel1),
3551 .sel2(psel2),
3552 .sel3(psel3),
3553 .in0(din0[27:0]),
3554 .in1(din1[27:0]),
3555 .in2(din2[27:0]),
3556 .in3(din3[27:0]),
3557.dout(dout[27:0])
3558);
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572endmodule
3573
3574
3575
3576
3577
3578
3579// any PARAMS parms go into naming of macro
3580
3581module mmu_htd_dp_msff_macro__stack_50c__width_28 (
3582 din,
3583 clk,
3584 en,
3585 se,
3586 scan_in,
3587 siclk,
3588 soclk,
3589 pce_ov,
3590 stop,
3591 dout,
3592 scan_out);
3593wire l1clk;
3594wire siclk_out;
3595wire soclk_out;
3596wire [26:0] so;
3597
3598 input [27:0] din;
3599
3600
3601 input clk;
3602 input en;
3603 input se;
3604 input scan_in;
3605 input siclk;
3606 input soclk;
3607 input pce_ov;
3608 input stop;
3609
3610
3611
3612 output [27:0] dout;
3613
3614
3615 output scan_out;
3616
3617
3618
3619
3620cl_dp1_l1hdr_8x c0_0 (
3621.l2clk(clk),
3622.pce(en),
3623.aclk(siclk),
3624.bclk(soclk),
3625.l1clk(l1clk),
3626 .se(se),
3627 .pce_ov(pce_ov),
3628 .stop(stop),
3629 .siclk_out(siclk_out),
3630 .soclk_out(soclk_out)
3631);
3632dff #(28) d0_0 (
3633.l1clk(l1clk),
3634.siclk(siclk_out),
3635.soclk(soclk_out),
3636.d(din[27:0]),
3637.si({scan_in,so[26:0]}),
3638.so({so[26:0],scan_out}),
3639.q(dout[27:0])
3640);
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661endmodule
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3672// also for pass-gate with decoder
3673
3674
3675
3676
3677
3678// any PARAMS parms go into naming of macro
3679
3680module mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_28 (
3681 din0,
3682 sel0,
3683 din1,
3684 sel1,
3685 din2,
3686 sel2,
3687 din3,
3688 sel3,
3689 din4,
3690 sel4,
3691 din5,
3692 sel5,
3693 din6,
3694 sel6,
3695 din7,
3696 sel7,
3697 dout);
3698wire buffout0;
3699wire buffout1;
3700wire buffout2;
3701wire buffout3;
3702wire buffout4;
3703wire buffout5;
3704wire buffout6;
3705wire buffout7;
3706
3707 input [27:0] din0;
3708 input sel0;
3709 input [27:0] din1;
3710 input sel1;
3711 input [27:0] din2;
3712 input sel2;
3713 input [27:0] din3;
3714 input sel3;
3715 input [27:0] din4;
3716 input sel4;
3717 input [27:0] din5;
3718 input sel5;
3719 input [27:0] din6;
3720 input sel6;
3721 input [27:0] din7;
3722 input sel7;
3723 output [27:0] dout;
3724
3725
3726
3727
3728
3729cl_dp1_muxbuff8_8x c0_0 (
3730 .in0(sel0),
3731 .in1(sel1),
3732 .in2(sel2),
3733 .in3(sel3),
3734 .in4(sel4),
3735 .in5(sel5),
3736 .in6(sel6),
3737 .in7(sel7),
3738 .out0(buffout0),
3739 .out1(buffout1),
3740 .out2(buffout2),
3741 .out3(buffout3),
3742 .out4(buffout4),
3743 .out5(buffout5),
3744 .out6(buffout6),
3745 .out7(buffout7)
3746);
3747mux8s #(28) d0_0 (
3748 .sel0(buffout0),
3749 .sel1(buffout1),
3750 .sel2(buffout2),
3751 .sel3(buffout3),
3752 .sel4(buffout4),
3753 .sel5(buffout5),
3754 .sel6(buffout6),
3755 .sel7(buffout7),
3756 .in0(din0[27:0]),
3757 .in1(din1[27:0]),
3758 .in2(din2[27:0]),
3759 .in3(din3[27:0]),
3760 .in4(din4[27:0]),
3761 .in5(din5[27:0]),
3762 .in6(din6[27:0]),
3763 .in7(din7[27:0]),
3764.dout(dout[27:0])
3765);
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779endmodule
3780
3781
3782// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3783// also for pass-gate with decoder
3784
3785
3786
3787
3788
3789// any PARAMS parms go into naming of macro
3790
3791module mmu_htd_dp_mux_macro__left_13__mux_aonpe__ports_8__stack_50c__width_35 (
3792 din0,
3793 sel0,
3794 din1,
3795 sel1,
3796 din2,
3797 sel2,
3798 din3,
3799 sel3,
3800 din4,
3801 sel4,
3802 din5,
3803 sel5,
3804 din6,
3805 sel6,
3806 din7,
3807 sel7,
3808 dout);
3809wire buffout0;
3810wire buffout1;
3811wire buffout2;
3812wire buffout3;
3813wire buffout4;
3814wire buffout5;
3815wire buffout6;
3816wire buffout7;
3817
3818 input [34:0] din0;
3819 input sel0;
3820 input [34:0] din1;
3821 input sel1;
3822 input [34:0] din2;
3823 input sel2;
3824 input [34:0] din3;
3825 input sel3;
3826 input [34:0] din4;
3827 input sel4;
3828 input [34:0] din5;
3829 input sel5;
3830 input [34:0] din6;
3831 input sel6;
3832 input [34:0] din7;
3833 input sel7;
3834 output [34:0] dout;
3835
3836
3837
3838
3839
3840cl_dp1_muxbuff8_8x c0_0 (
3841 .in0(sel0),
3842 .in1(sel1),
3843 .in2(sel2),
3844 .in3(sel3),
3845 .in4(sel4),
3846 .in5(sel5),
3847 .in6(sel6),
3848 .in7(sel7),
3849 .out0(buffout0),
3850 .out1(buffout1),
3851 .out2(buffout2),
3852 .out3(buffout3),
3853 .out4(buffout4),
3854 .out5(buffout5),
3855 .out6(buffout6),
3856 .out7(buffout7)
3857);
3858mux8s #(35) d0_0 (
3859 .sel0(buffout0),
3860 .sel1(buffout1),
3861 .sel2(buffout2),
3862 .sel3(buffout3),
3863 .sel4(buffout4),
3864 .sel5(buffout5),
3865 .sel6(buffout6),
3866 .sel7(buffout7),
3867 .in0(din0[34:0]),
3868 .in1(din1[34:0]),
3869 .in2(din2[34:0]),
3870 .in3(din3[34:0]),
3871 .in4(din4[34:0]),
3872 .in5(din5[34:0]),
3873 .in6(din6[34:0]),
3874 .in7(din7[34:0]),
3875.dout(dout[34:0])
3876);
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890endmodule
3891
3892
3893//
3894// buff macro
3895//
3896//
3897
3898
3899
3900
3901
3902module mmu_htd_dp_buff_macro__left_13__stack_50c__width_35 (
3903 din,
3904 dout);
3905 input [34:0] din;
3906 output [34:0] dout;
3907
3908
3909
3910
3911
3912
3913buff #(35) d0_0 (
3914.in(din[34:0]),
3915.out(dout[34:0])
3916);
3917
3918
3919
3920
3921
3922
3923
3924
3925endmodule
3926
3927
3928
3929
3930
3931// general mux macro for pass-gate and and-or muxes with/wout priority encoders
3932// also for pass-gate with decoder
3933
3934
3935
3936
3937
3938// any PARAMS parms go into naming of macro
3939
3940module mmu_htd_dp_mux_macro__mux_aope__ports_4__stack_50c__width_24 (
3941 din0,
3942 din1,
3943 din2,
3944 din3,
3945 sel0,
3946 sel1,
3947 sel2,
3948 dout);
3949wire psel0;
3950wire psel1;
3951wire psel2;
3952wire psel3;
3953
3954 input [23:0] din0;
3955 input [23:0] din1;
3956 input [23:0] din2;
3957 input [23:0] din3;
3958 input sel0;
3959 input sel1;
3960 input sel2;
3961 output [23:0] dout;
3962
3963
3964
3965
3966
3967cl_dp1_penc4_8x c0_0 (
3968 .test(1'b1),
3969 .sel0(sel0),
3970 .sel1(sel1),
3971 .sel2(sel2),
3972 .psel0(psel0),
3973 .psel1(psel1),
3974 .psel2(psel2),
3975 .psel3(psel3)
3976);
3977
3978mux4s #(24) d0_0 (
3979 .sel0(psel0),
3980 .sel1(psel1),
3981 .sel2(psel2),
3982 .sel3(psel3),
3983 .in0(din0[23:0]),
3984 .in1(din1[23:0]),
3985 .in2(din2[23:0]),
3986 .in3(din3[23:0]),
3987.dout(dout[23:0])
3988);
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002endmodule
4003
4004
4005// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4006// also for pass-gate with decoder
4007
4008
4009
4010
4011
4012// any PARAMS parms go into naming of macro
4013
4014module mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_36 (
4015 din0,
4016 din1,
4017 din2,
4018 din3,
4019 din4,
4020 din5,
4021 din6,
4022 din7,
4023 sel,
4024 dout);
4025wire psel0;
4026wire psel1;
4027wire psel2;
4028wire psel3;
4029wire psel4;
4030wire psel5;
4031wire psel6;
4032wire psel7;
4033
4034 input [35:0] din0;
4035 input [35:0] din1;
4036 input [35:0] din2;
4037 input [35:0] din3;
4038 input [35:0] din4;
4039 input [35:0] din5;
4040 input [35:0] din6;
4041 input [35:0] din7;
4042 input [2:0] sel;
4043 output [35:0] dout;
4044
4045
4046
4047
4048
4049cl_dp1_pdec8_8x c0_0 (
4050 .test(1'b1),
4051 .sel0(sel[0]),
4052 .sel1(sel[1]),
4053 .sel2(sel[2]),
4054 .psel0(psel0),
4055 .psel1(psel1),
4056 .psel2(psel2),
4057 .psel3(psel3),
4058 .psel4(psel4),
4059 .psel5(psel5),
4060 .psel6(psel6),
4061 .psel7(psel7)
4062);
4063
4064mux8s #(36) d0_0 (
4065 .sel0(psel0),
4066 .sel1(psel1),
4067 .sel2(psel2),
4068 .sel3(psel3),
4069 .sel4(psel4),
4070 .sel5(psel5),
4071 .sel6(psel6),
4072 .sel7(psel7),
4073 .in0(din0[35:0]),
4074 .in1(din1[35:0]),
4075 .in2(din2[35:0]),
4076 .in3(din3[35:0]),
4077 .in4(din4[35:0]),
4078 .in5(din5[35:0]),
4079 .in6(din6[35:0]),
4080 .in7(din7[35:0]),
4081.dout(dout[35:0])
4082);
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096endmodule
4097
4098
4099// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4100// also for pass-gate with decoder
4101
4102
4103
4104
4105
4106// any PARAMS parms go into naming of macro
4107
4108module mmu_htd_dp_mux_macro__mux_pgpe__ports_2__stack_50c__width_36 (
4109 din0,
4110 din1,
4111 sel0,
4112 dout);
4113wire psel0_unused;
4114wire psel1;
4115
4116 input [35:0] din0;
4117 input [35:0] din1;
4118 input sel0;
4119 output [35:0] dout;
4120
4121
4122
4123
4124
4125cl_dp1_penc2_8x c0_0 (
4126 .sel0(sel0),
4127 .psel0(psel0_unused),
4128 .psel1(psel1)
4129);
4130
4131mux2e #(36) d0_0 (
4132 .sel(psel1),
4133 .in0(din0[35:0]),
4134 .in1(din1[35:0]),
4135.dout(dout[35:0])
4136);
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150endmodule
4151
4152
4153
4154
4155
4156
4157// any PARAMS parms go into naming of macro
4158
4159module mmu_htd_dp_msff_macro__stack_50c__width_36 (
4160 din,
4161 clk,
4162 en,
4163 se,
4164 scan_in,
4165 siclk,
4166 soclk,
4167 pce_ov,
4168 stop,
4169 dout,
4170 scan_out);
4171wire l1clk;
4172wire siclk_out;
4173wire soclk_out;
4174wire [34:0] so;
4175
4176 input [35:0] din;
4177
4178
4179 input clk;
4180 input en;
4181 input se;
4182 input scan_in;
4183 input siclk;
4184 input soclk;
4185 input pce_ov;
4186 input stop;
4187
4188
4189
4190 output [35:0] dout;
4191
4192
4193 output scan_out;
4194
4195
4196
4197
4198cl_dp1_l1hdr_8x c0_0 (
4199.l2clk(clk),
4200.pce(en),
4201.aclk(siclk),
4202.bclk(soclk),
4203.l1clk(l1clk),
4204 .se(se),
4205 .pce_ov(pce_ov),
4206 .stop(stop),
4207 .siclk_out(siclk_out),
4208 .soclk_out(soclk_out)
4209);
4210dff #(36) d0_0 (
4211.l1clk(l1clk),
4212.siclk(siclk_out),
4213.soclk(soclk_out),
4214.d(din[35:0]),
4215.si({scan_in,so[34:0]}),
4216.so({so[34:0],scan_out}),
4217.q(dout[35:0])
4218);
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239endmodule
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4250// also for pass-gate with decoder
4251
4252
4253
4254
4255
4256// any PARAMS parms go into naming of macro
4257
4258module mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_36 (
4259 din0,
4260 din1,
4261 sel0,
4262 dout);
4263wire psel0;
4264wire psel1;
4265
4266 input [35:0] din0;
4267 input [35:0] din1;
4268 input sel0;
4269 output [35:0] dout;
4270
4271
4272
4273
4274
4275cl_dp1_penc2_8x c0_0 (
4276 .sel0(sel0),
4277 .psel0(psel0),
4278 .psel1(psel1)
4279);
4280
4281mux2s #(36) d0_0 (
4282 .sel0(psel0),
4283 .sel1(psel1),
4284 .in0(din0[35:0]),
4285 .in1(din1[35:0]),
4286.dout(dout[35:0])
4287);
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301endmodule
4302
4303
4304// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4305// also for pass-gate with decoder
4306
4307
4308
4309
4310
4311// any PARAMS parms go into naming of macro
4312
4313module mmu_htd_dp_mux_macro__mux_aope__ports_3__stack_50c__width_36 (
4314 din0,
4315 din1,
4316 din2,
4317 sel0,
4318 sel1,
4319 dout);
4320wire psel0;
4321wire psel1;
4322wire psel2;
4323
4324 input [35:0] din0;
4325 input [35:0] din1;
4326 input [35:0] din2;
4327 input sel0;
4328 input sel1;
4329 output [35:0] dout;
4330
4331
4332
4333
4334
4335cl_dp1_penc3_8x c0_0 (
4336 .test(1'b1),
4337 .sel0(sel0),
4338 .sel1(sel1),
4339 .psel0(psel0),
4340 .psel1(psel1),
4341 .psel2(psel2)
4342);
4343
4344mux3s #(36) d0_0 (
4345 .sel0(psel0),
4346 .sel1(psel1),
4347 .sel2(psel2),
4348 .in0(din0[35:0]),
4349 .in1(din1[35:0]),
4350 .in2(din2[35:0]),
4351.dout(dout[35:0])
4352);
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366endmodule
4367
4368
4369
4370
4371
4372
4373// any PARAMS parms go into naming of macro
4374
4375module mmu_htd_dp_msff_macro__stack_50c__width_37 (
4376 din,
4377 clk,
4378 en,
4379 se,
4380 scan_in,
4381 siclk,
4382 soclk,
4383 pce_ov,
4384 stop,
4385 dout,
4386 scan_out);
4387wire l1clk;
4388wire siclk_out;
4389wire soclk_out;
4390wire [35:0] so;
4391
4392 input [36:0] din;
4393
4394
4395 input clk;
4396 input en;
4397 input se;
4398 input scan_in;
4399 input siclk;
4400 input soclk;
4401 input pce_ov;
4402 input stop;
4403
4404
4405
4406 output [36:0] dout;
4407
4408
4409 output scan_out;
4410
4411
4412
4413
4414cl_dp1_l1hdr_8x c0_0 (
4415.l2clk(clk),
4416.pce(en),
4417.aclk(siclk),
4418.bclk(soclk),
4419.l1clk(l1clk),
4420 .se(se),
4421 .pce_ov(pce_ov),
4422 .stop(stop),
4423 .siclk_out(siclk_out),
4424 .soclk_out(soclk_out)
4425);
4426dff #(37) d0_0 (
4427.l1clk(l1clk),
4428.siclk(siclk_out),
4429.soclk(soclk_out),
4430.d(din[36:0]),
4431.si({scan_in,so[35:0]}),
4432.so({so[35:0],scan_out}),
4433.q(dout[36:0])
4434);
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455endmodule
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4466// also for pass-gate with decoder
4467
4468
4469
4470
4471
4472// any PARAMS parms go into naming of macro
4473
4474module mmu_htd_dp_mux_macro__mux_aonpe__ports_2__stack_50c__width_36 (
4475 din0,
4476 sel0,
4477 din1,
4478 sel1,
4479 dout);
4480wire buffout0;
4481wire buffout1;
4482
4483 input [35:0] din0;
4484 input sel0;
4485 input [35:0] din1;
4486 input sel1;
4487 output [35:0] dout;
4488
4489
4490
4491
4492
4493cl_dp1_muxbuff2_8x c0_0 (
4494 .in0(sel0),
4495 .in1(sel1),
4496 .out0(buffout0),
4497 .out1(buffout1)
4498);
4499mux2s #(36) d0_0 (
4500 .sel0(buffout0),
4501 .sel1(buffout1),
4502 .in0(din0[35:0]),
4503 .in1(din1[35:0]),
4504.dout(dout[35:0])
4505);
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519endmodule
4520
4521
4522//
4523// buff macro
4524//
4525//
4526
4527
4528
4529
4530
4531module mmu_htd_dp_buff_macro__dbuff_48x__rep_1__width_1 (
4532 din,
4533 dout);
4534 input [0:0] din;
4535 output [0:0] dout;
4536
4537
4538
4539
4540
4541
4542buff #(1) d0_0 (
4543.in(din[0:0]),
4544.out(dout[0:0])
4545);
4546
4547
4548
4549
4550
4551
4552
4553
4554endmodule
4555
4556
4557
4558
4559
4560// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4561// also for pass-gate with decoder
4562
4563
4564
4565
4566
4567// any PARAMS parms go into naming of macro
4568
4569module mmu_htd_dp_mux_macro__mux_pgdec__ports_8__stack_50c__width_40 (
4570 din0,
4571 din1,
4572 din2,
4573 din3,
4574 din4,
4575 din5,
4576 din6,
4577 din7,
4578 sel,
4579 muxtst,
4580 test,
4581 dout);
4582wire psel0;
4583wire psel1;
4584wire psel2;
4585wire psel3;
4586wire psel4;
4587wire psel5;
4588wire psel6;
4589wire psel7;
4590
4591 input [39:0] din0;
4592 input [39:0] din1;
4593 input [39:0] din2;
4594 input [39:0] din3;
4595 input [39:0] din4;
4596 input [39:0] din5;
4597 input [39:0] din6;
4598 input [39:0] din7;
4599 input [2:0] sel;
4600 input muxtst;
4601 input test;
4602 output [39:0] dout;
4603
4604
4605
4606
4607
4608cl_dp1_pdec8_8x c0_0 (
4609 .sel0(sel[0]),
4610 .sel1(sel[1]),
4611 .sel2(sel[2]),
4612 .psel0(psel0),
4613 .psel1(psel1),
4614 .psel2(psel2),
4615 .psel3(psel3),
4616 .psel4(psel4),
4617 .psel5(psel5),
4618 .psel6(psel6),
4619 .psel7(psel7),
4620 .test(test)
4621);
4622
4623mux8 #(40) d0_0 (
4624 .sel0(psel0),
4625 .sel1(psel1),
4626 .sel2(psel2),
4627 .sel3(psel3),
4628 .sel4(psel4),
4629 .sel5(psel5),
4630 .sel6(psel6),
4631 .sel7(psel7),
4632 .in0(din0[39:0]),
4633 .in1(din1[39:0]),
4634 .in2(din2[39:0]),
4635 .in3(din3[39:0]),
4636 .in4(din4[39:0]),
4637 .in5(din5[39:0]),
4638 .in6(din6[39:0]),
4639 .in7(din7[39:0]),
4640.dout(dout[39:0]),
4641 .muxtst(muxtst)
4642);
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656endmodule
4657
4658
4659
4660
4661
4662
4663// any PARAMS parms go into naming of macro
4664
4665module mmu_htd_dp_msff_macro__stack_50c__width_40 (
4666 din,
4667 clk,
4668 en,
4669 se,
4670 scan_in,
4671 siclk,
4672 soclk,
4673 pce_ov,
4674 stop,
4675 dout,
4676 scan_out);
4677wire l1clk;
4678wire siclk_out;
4679wire soclk_out;
4680wire [38:0] so;
4681
4682 input [39:0] din;
4683
4684
4685 input clk;
4686 input en;
4687 input se;
4688 input scan_in;
4689 input siclk;
4690 input soclk;
4691 input pce_ov;
4692 input stop;
4693
4694
4695
4696 output [39:0] dout;
4697
4698
4699 output scan_out;
4700
4701
4702
4703
4704cl_dp1_l1hdr_8x c0_0 (
4705.l2clk(clk),
4706.pce(en),
4707.aclk(siclk),
4708.bclk(soclk),
4709.l1clk(l1clk),
4710 .se(se),
4711 .pce_ov(pce_ov),
4712 .stop(stop),
4713 .siclk_out(siclk_out),
4714 .soclk_out(soclk_out)
4715);
4716dff #(40) d0_0 (
4717.l1clk(l1clk),
4718.siclk(siclk_out),
4719.soclk(soclk_out),
4720.d(din[39:0]),
4721.si({scan_in,so[38:0]}),
4722.so({so[38:0],scan_out}),
4723.q(dout[39:0])
4724);
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742
4743
4744
4745endmodule
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755//
4756// buff macro
4757//
4758//
4759
4760
4761
4762
4763
4764module mmu_htd_dp_buff_macro__dbuff_32x__rep_1__width_1 (
4765 din,
4766 dout);
4767 input [0:0] din;
4768 output [0:0] dout;
4769
4770
4771
4772
4773
4774
4775buff #(1) d0_0 (
4776.in(din[0:0]),
4777.out(dout[0:0])
4778);
4779
4780
4781
4782
4783
4784
4785
4786
4787endmodule
4788
4789
4790
4791
4792
4793// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4794// also for pass-gate with decoder
4795
4796
4797
4798
4799
4800// any PARAMS parms go into naming of macro
4801
4802module mmu_htd_dp_mux_macro__mux_pgdec__ports_8__stack_50c__width_28 (
4803 din0,
4804 din1,
4805 din2,
4806 din3,
4807 din4,
4808 din5,
4809 din6,
4810 din7,
4811 sel,
4812 muxtst,
4813 test,
4814 dout);
4815wire psel0;
4816wire psel1;
4817wire psel2;
4818wire psel3;
4819wire psel4;
4820wire psel5;
4821wire psel6;
4822wire psel7;
4823
4824 input [27:0] din0;
4825 input [27:0] din1;
4826 input [27:0] din2;
4827 input [27:0] din3;
4828 input [27:0] din4;
4829 input [27:0] din5;
4830 input [27:0] din6;
4831 input [27:0] din7;
4832 input [2:0] sel;
4833 input muxtst;
4834 input test;
4835 output [27:0] dout;
4836
4837
4838
4839
4840
4841cl_dp1_pdec8_8x c0_0 (
4842 .sel0(sel[0]),
4843 .sel1(sel[1]),
4844 .sel2(sel[2]),
4845 .psel0(psel0),
4846 .psel1(psel1),
4847 .psel2(psel2),
4848 .psel3(psel3),
4849 .psel4(psel4),
4850 .psel5(psel5),
4851 .psel6(psel6),
4852 .psel7(psel7),
4853 .test(test)
4854);
4855
4856mux8 #(28) d0_0 (
4857 .sel0(psel0),
4858 .sel1(psel1),
4859 .sel2(psel2),
4860 .sel3(psel3),
4861 .sel4(psel4),
4862 .sel5(psel5),
4863 .sel6(psel6),
4864 .sel7(psel7),
4865 .in0(din0[27:0]),
4866 .in1(din1[27:0]),
4867 .in2(din2[27:0]),
4868 .in3(din3[27:0]),
4869 .in4(din4[27:0]),
4870 .in5(din5[27:0]),
4871 .in6(din6[27:0]),
4872 .in7(din7[27:0]),
4873.dout(dout[27:0]),
4874 .muxtst(muxtst)
4875);
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885
4886
4887
4888
4889endmodule
4890
4891
4892// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4893// also for pass-gate with decoder
4894
4895
4896
4897
4898
4899// any PARAMS parms go into naming of macro
4900
4901module mmu_htd_dp_mux_macro__mux_pgdec__ports_4__stack_50c__width_7 (
4902 din0,
4903 din1,
4904 din2,
4905 din3,
4906 sel,
4907 muxtst,
4908 test,
4909 dout);
4910wire psel0;
4911wire psel1;
4912wire psel2;
4913wire psel3;
4914
4915 input [6:0] din0;
4916 input [6:0] din1;
4917 input [6:0] din2;
4918 input [6:0] din3;
4919 input [1:0] sel;
4920 input muxtst;
4921 input test;
4922 output [6:0] dout;
4923
4924
4925
4926
4927
4928cl_dp1_pdec4_8x c0_0 (
4929 .sel0(sel[0]),
4930 .sel1(sel[1]),
4931 .psel0(psel0),
4932 .psel1(psel1),
4933 .psel2(psel2),
4934 .psel3(psel3),
4935 .test(test)
4936);
4937
4938mux4 #(7) d0_0 (
4939 .sel0(psel0),
4940 .sel1(psel1),
4941 .sel2(psel2),
4942 .sel3(psel3),
4943 .in0(din0[6:0]),
4944 .in1(din1[6:0]),
4945 .in2(din2[6:0]),
4946 .in3(din3[6:0]),
4947.dout(dout[6:0]),
4948 .muxtst(muxtst)
4949);
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963endmodule
4964
4965
4966
4967
4968
4969
4970// any PARAMS parms go into naming of macro
4971
4972module mmu_htd_dp_msff_macro__stack_50c__width_34 (
4973 din,
4974 clk,
4975 en,
4976 se,
4977 scan_in,
4978 siclk,
4979 soclk,
4980 pce_ov,
4981 stop,
4982 dout,
4983 scan_out);
4984wire l1clk;
4985wire siclk_out;
4986wire soclk_out;
4987wire [32:0] so;
4988
4989 input [33:0] din;
4990
4991
4992 input clk;
4993 input en;
4994 input se;
4995 input scan_in;
4996 input siclk;
4997 input soclk;
4998 input pce_ov;
4999 input stop;
5000
5001
5002
5003 output [33:0] dout;
5004
5005
5006 output scan_out;
5007
5008
5009
5010
5011cl_dp1_l1hdr_8x c0_0 (
5012.l2clk(clk),
5013.pce(en),
5014.aclk(siclk),
5015.bclk(soclk),
5016.l1clk(l1clk),
5017 .se(se),
5018 .pce_ov(pce_ov),
5019 .stop(stop),
5020 .siclk_out(siclk_out),
5021 .soclk_out(soclk_out)
5022);
5023dff #(34) d0_0 (
5024.l1clk(l1clk),
5025.siclk(siclk_out),
5026.soclk(soclk_out),
5027.d(din[33:0]),
5028.si({scan_in,so[32:0]}),
5029.so({so[32:0],scan_out}),
5030.q(dout[33:0])
5031);
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052endmodule
5053
5054
5055
5056
5057
5058
5059
5060
5061
5062
5063
5064
5065
5066// any PARAMS parms go into naming of macro
5067
5068module mmu_htd_dp_msff_macro__stack_50c__width_49 (
5069 din,
5070 clk,
5071 en,
5072 se,
5073 scan_in,
5074 siclk,
5075 soclk,
5076 pce_ov,
5077 stop,
5078 dout,
5079 scan_out);
5080wire l1clk;
5081wire siclk_out;
5082wire soclk_out;
5083wire [47:0] so;
5084
5085 input [48:0] din;
5086
5087
5088 input clk;
5089 input en;
5090 input se;
5091 input scan_in;
5092 input siclk;
5093 input soclk;
5094 input pce_ov;
5095 input stop;
5096
5097
5098
5099 output [48:0] dout;
5100
5101
5102 output scan_out;
5103
5104
5105
5106
5107cl_dp1_l1hdr_8x c0_0 (
5108.l2clk(clk),
5109.pce(en),
5110.aclk(siclk),
5111.bclk(soclk),
5112.l1clk(l1clk),
5113 .se(se),
5114 .pce_ov(pce_ov),
5115 .stop(stop),
5116 .siclk_out(siclk_out),
5117 .soclk_out(soclk_out)
5118);
5119dff #(49) d0_0 (
5120.l1clk(l1clk),
5121.siclk(siclk_out),
5122.soclk(soclk_out),
5123.d(din[48:0]),
5124.si({scan_in,so[47:0]}),
5125.so({so[47:0],scan_out}),
5126.q(dout[48:0])
5127);
5128
5129
5130
5131
5132
5133
5134
5135
5136
5137
5138
5139
5140
5141
5142
5143
5144
5145
5146
5147
5148endmodule
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5159// also for pass-gate with decoder
5160
5161
5162
5163
5164
5165// any PARAMS parms go into naming of macro
5166
5167module mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_50c__width_32 (
5168 din0,
5169 din1,
5170 sel0,
5171 dout);
5172wire psel0;
5173wire psel1;
5174
5175 input [31:0] din0;
5176 input [31:0] din1;
5177 input sel0;
5178 output [31:0] dout;
5179
5180
5181
5182
5183
5184cl_dp1_penc2_8x c0_0 (
5185 .sel0(sel0),
5186 .psel0(psel0),
5187 .psel1(psel1)
5188);
5189
5190mux2s #(32) d0_0 (
5191 .sel0(psel0),
5192 .sel1(psel1),
5193 .in0(din0[31:0]),
5194 .in1(din1[31:0]),
5195.dout(dout[31:0])
5196);
5197
5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210endmodule
5211
5212
5213//
5214// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
5215//
5216//
5217
5218
5219
5220
5221
5222module mmu_htd_dp_cmp_macro__dcmp_8x__width_16 (
5223 din0,
5224 din1,
5225 dout);
5226 input [15:0] din0;
5227 input [15:0] din1;
5228 output dout;
5229
5230
5231
5232
5233
5234
5235cmp #(16) m0_0 (
5236.in0(din0[15:0]),
5237.in1(din1[15:0]),
5238.out(dout)
5239);
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250endmodule
5251
5252
5253
5254
5255
5256//
5257// nor macro for ports = 2,3
5258//
5259//
5260
5261
5262
5263
5264
5265module mmu_htd_dp_nor_macro__ports_3__width_3 (
5266 din0,
5267 din1,
5268 din2,
5269 dout);
5270 input [2:0] din0;
5271 input [2:0] din1;
5272 input [2:0] din2;
5273 output [2:0] dout;
5274
5275
5276
5277
5278
5279
5280nor3 #(3) d0_0 (
5281.in0(din0[2:0]),
5282.in1(din1[2:0]),
5283.in2(din2[2:0]),
5284.out(dout[2:0])
5285);
5286
5287
5288
5289
5290
5291
5292
5293endmodule
5294
5295
5296
5297
5298
5299//
5300// nand macro for ports = 2,3,4
5301//
5302//
5303
5304
5305
5306
5307
5308module mmu_htd_dp_nand_macro__ports_3__width_1 (
5309 din0,
5310 din1,
5311 din2,
5312 dout);
5313 input [0:0] din0;
5314 input [0:0] din1;
5315 input [0:0] din2;
5316 output [0:0] dout;
5317
5318
5319
5320
5321
5322
5323nand3 #(1) d0_0 (
5324.in0(din0[0:0]),
5325.in1(din1[0:0]),
5326.in2(din2[0:0]),
5327.out(dout[0:0])
5328);
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338endmodule
5339
5340
5341
5342
5343
5344//
5345// invert macro
5346//
5347//
5348
5349
5350
5351
5352
5353module mmu_htd_dp_inv_macro__width_4 (
5354 din,
5355 dout);
5356 input [3:0] din;
5357 output [3:0] dout;
5358
5359
5360
5361
5362
5363
5364inv #(4) d0_0 (
5365.in(din[3:0]),
5366.out(dout[3:0])
5367);
5368
5369
5370
5371
5372
5373
5374
5375
5376
5377endmodule
5378
5379
5380
5381
5382
5383//
5384// invert macro
5385//
5386//
5387
5388
5389
5390
5391
5392module mmu_htd_dp_inv_macro__width_1 (
5393 din,
5394 dout);
5395 input [0:0] din;
5396 output [0:0] dout;
5397
5398
5399
5400
5401
5402
5403inv #(1) d0_0 (
5404.in(din[0:0]),
5405.out(dout[0:0])
5406);
5407
5408
5409
5410
5411
5412
5413
5414
5415
5416endmodule
5417
5418
5419
5420
5421
5422//
5423// nand macro for ports = 2,3,4
5424//
5425//
5426
5427
5428
5429
5430
5431module mmu_htd_dp_nand_macro__ports_2__width_5 (
5432 din0,
5433 din1,
5434 dout);
5435 input [4:0] din0;
5436 input [4:0] din1;
5437 output [4:0] dout;
5438
5439
5440
5441
5442
5443
5444nand2 #(5) d0_0 (
5445.in0(din0[4:0]),
5446.in1(din1[4:0]),
5447.out(dout[4:0])
5448);
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458endmodule
5459
5460
5461
5462
5463
5464//
5465// nand macro for ports = 2,3,4
5466//
5467//
5468
5469
5470
5471
5472
5473module mmu_htd_dp_nand_macro__ports_3__width_2 (
5474 din0,
5475 din1,
5476 din2,
5477 dout);
5478 input [1:0] din0;
5479 input [1:0] din1;
5480 input [1:0] din2;
5481 output [1:0] dout;
5482
5483
5484
5485
5486
5487
5488nand3 #(2) d0_0 (
5489.in0(din0[1:0]),
5490.in1(din1[1:0]),
5491.in2(din2[1:0]),
5492.out(dout[1:0])
5493);
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503endmodule
5504
5505
5506
5507
5508
5509//
5510// buff macro
5511//
5512//
5513
5514
5515
5516
5517
5518module mmu_htd_dp_buff_macro__minbuff_1__stack_50c__width_39 (
5519 din,
5520 dout);
5521 input [38:0] din;
5522 output [38:0] dout;
5523
5524
5525
5526
5527
5528
5529buff #(39) d0_0 (
5530.in(din[38:0]),
5531.out(dout[38:0])
5532);
5533
5534
5535
5536
5537
5538
5539
5540
5541endmodule
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551// any PARAMS parms go into naming of macro
5552
5553module mmu_htd_dp_msff_macro__stack_50c__width_32 (
5554 din,
5555 clk,
5556 en,
5557 se,
5558 scan_in,
5559 siclk,
5560 soclk,
5561 pce_ov,
5562 stop,
5563 dout,
5564 scan_out);
5565wire l1clk;
5566wire siclk_out;
5567wire soclk_out;
5568wire [30:0] so;
5569
5570 input [31:0] din;
5571
5572
5573 input clk;
5574 input en;
5575 input se;
5576 input scan_in;
5577 input siclk;
5578 input soclk;
5579 input pce_ov;
5580 input stop;
5581
5582
5583
5584 output [31:0] dout;
5585
5586
5587 output scan_out;
5588
5589
5590
5591
5592cl_dp1_l1hdr_8x c0_0 (
5593.l2clk(clk),
5594.pce(en),
5595.aclk(siclk),
5596.bclk(soclk),
5597.l1clk(l1clk),
5598 .se(se),
5599 .pce_ov(pce_ov),
5600 .stop(stop),
5601 .siclk_out(siclk_out),
5602 .soclk_out(soclk_out)
5603);
5604dff #(32) d0_0 (
5605.l1clk(l1clk),
5606.siclk(siclk_out),
5607.soclk(soclk_out),
5608.d(din[31:0]),
5609.si({scan_in,so[30:0]}),
5610.so({so[30:0],scan_out}),
5611.q(dout[31:0])
5612);
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629
5630
5631
5632
5633endmodule
5634
5635
5636
5637
5638
5639
5640
5641
5642
5643// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5644// also for pass-gate with decoder
5645
5646
5647
5648
5649
5650// any PARAMS parms go into naming of macro
5651
5652module mmu_htd_dp_mux_macro__mux_aodec__ports_8__stack_50c__width_16 (
5653 din0,
5654 din1,
5655 din2,
5656 din3,
5657 din4,
5658 din5,
5659 din6,
5660 din7,
5661 sel,
5662 dout);
5663wire psel0;
5664wire psel1;
5665wire psel2;
5666wire psel3;
5667wire psel4;
5668wire psel5;
5669wire psel6;
5670wire psel7;
5671
5672 input [15:0] din0;
5673 input [15:0] din1;
5674 input [15:0] din2;
5675 input [15:0] din3;
5676 input [15:0] din4;
5677 input [15:0] din5;
5678 input [15:0] din6;
5679 input [15:0] din7;
5680 input [2:0] sel;
5681 output [15:0] dout;
5682
5683
5684
5685
5686
5687cl_dp1_pdec8_8x c0_0 (
5688 .test(1'b1),
5689 .sel0(sel[0]),
5690 .sel1(sel[1]),
5691 .sel2(sel[2]),
5692 .psel0(psel0),
5693 .psel1(psel1),
5694 .psel2(psel2),
5695 .psel3(psel3),
5696 .psel4(psel4),
5697 .psel5(psel5),
5698 .psel6(psel6),
5699 .psel7(psel7)
5700);
5701
5702mux8s #(16) d0_0 (
5703 .sel0(psel0),
5704 .sel1(psel1),
5705 .sel2(psel2),
5706 .sel3(psel3),
5707 .sel4(psel4),
5708 .sel5(psel5),
5709 .sel6(psel6),
5710 .sel7(psel7),
5711 .in0(din0[15:0]),
5712 .in1(din1[15:0]),
5713 .in2(din2[15:0]),
5714 .in3(din3[15:0]),
5715 .in4(din4[15:0]),
5716 .in5(din5[15:0]),
5717 .in6(din6[15:0]),
5718 .in7(din7[15:0]),
5719.dout(dout[15:0])
5720);
5721
5722
5723
5724
5725
5726
5727
5728
5729
5730
5731
5732
5733
5734endmodule
5735
5736
5737//
5738// buff macro
5739//
5740//
5741
5742
5743
5744
5745
5746module mmu_htd_dp_buff_macro__stack_50c__width_16 (
5747 din,
5748 dout);
5749 input [15:0] din;
5750 output [15:0] dout;
5751
5752
5753
5754
5755
5756
5757buff #(16) d0_0 (
5758.in(din[15:0]),
5759.out(dout[15:0])
5760);
5761
5762
5763
5764
5765
5766
5767
5768
5769endmodule
5770
5771
5772
5773
5774
5775// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5776// also for pass-gate with decoder
5777
5778
5779
5780
5781
5782// any PARAMS parms go into naming of macro
5783
5784module mmu_htd_dp_mux_macro__mux_aodec__ports_4__stack_50c__width_32 (
5785 din0,
5786 din1,
5787 din2,
5788 din3,
5789 sel,
5790 dout);
5791wire psel0;
5792wire psel1;
5793wire psel2;
5794wire psel3;
5795
5796 input [31:0] din0;
5797 input [31:0] din1;
5798 input [31:0] din2;
5799 input [31:0] din3;
5800 input [1:0] sel;
5801 output [31:0] dout;
5802
5803
5804
5805
5806
5807cl_dp1_pdec4_8x c0_0 (
5808 .test(1'b1),
5809 .sel0(sel[0]),
5810 .sel1(sel[1]),
5811 .psel0(psel0),
5812 .psel1(psel1),
5813 .psel2(psel2),
5814 .psel3(psel3)
5815);
5816
5817mux4s #(32) d0_0 (
5818 .sel0(psel0),
5819 .sel1(psel1),
5820 .sel2(psel2),
5821 .sel3(psel3),
5822 .in0(din0[31:0]),
5823 .in1(din1[31:0]),
5824 .in2(din2[31:0]),
5825 .in3(din3[31:0]),
5826.dout(dout[31:0])
5827);
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840
5841endmodule
5842
5843
5844//
5845// nand macro for ports = 2,3,4
5846//
5847//
5848
5849
5850
5851
5852
5853module mmu_htd_dp_nand_macro__ports_2__stack_50c__width_32 (
5854 din0,
5855 din1,
5856 dout);
5857 input [31:0] din0;
5858 input [31:0] din1;
5859 output [31:0] dout;
5860
5861
5862
5863
5864
5865
5866nand2 #(32) d0_0 (
5867.in0(din0[31:0]),
5868.in1(din1[31:0]),
5869.out(dout[31:0])
5870);
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880endmodule
5881
5882
5883
5884
5885
5886// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5887// also for pass-gate with decoder
5888
5889
5890
5891
5892
5893// any PARAMS parms go into naming of macro
5894
5895module mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_40 (
5896 din0,
5897 sel0,
5898 din1,
5899 sel1,
5900 din2,
5901 sel2,
5902 din3,
5903 sel3,
5904 din4,
5905 sel4,
5906 din5,
5907 sel5,
5908 din6,
5909 sel6,
5910 din7,
5911 sel7,
5912 dout);
5913wire buffout0;
5914wire buffout1;
5915wire buffout2;
5916wire buffout3;
5917wire buffout4;
5918wire buffout5;
5919wire buffout6;
5920wire buffout7;
5921
5922 input [39:0] din0;
5923 input sel0;
5924 input [39:0] din1;
5925 input sel1;
5926 input [39:0] din2;
5927 input sel2;
5928 input [39:0] din3;
5929 input sel3;
5930 input [39:0] din4;
5931 input sel4;
5932 input [39:0] din5;
5933 input sel5;
5934 input [39:0] din6;
5935 input sel6;
5936 input [39:0] din7;
5937 input sel7;
5938 output [39:0] dout;
5939
5940
5941
5942
5943
5944cl_dp1_muxbuff8_8x c0_0 (
5945 .in0(sel0),
5946 .in1(sel1),
5947 .in2(sel2),
5948 .in3(sel3),
5949 .in4(sel4),
5950 .in5(sel5),
5951 .in6(sel6),
5952 .in7(sel7),
5953 .out0(buffout0),
5954 .out1(buffout1),
5955 .out2(buffout2),
5956 .out3(buffout3),
5957 .out4(buffout4),
5958 .out5(buffout5),
5959 .out6(buffout6),
5960 .out7(buffout7)
5961);
5962mux8s #(40) d0_0 (
5963 .sel0(buffout0),
5964 .sel1(buffout1),
5965 .sel2(buffout2),
5966 .sel3(buffout3),
5967 .sel4(buffout4),
5968 .sel5(buffout5),
5969 .sel6(buffout6),
5970 .sel7(buffout7),
5971 .in0(din0[39:0]),
5972 .in1(din1[39:0]),
5973 .in2(din2[39:0]),
5974 .in3(din3[39:0]),
5975 .in4(din4[39:0]),
5976 .in5(din5[39:0]),
5977 .in6(din6[39:0]),
5978 .in7(din7[39:0]),
5979.dout(dout[39:0])
5980);
5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994endmodule
5995
5996
5997// general mux macro for pass-gate and and-or muxes with/wout priority encoders
5998// also for pass-gate with decoder
5999
6000
6001
6002
6003
6004// any PARAMS parms go into naming of macro
6005
6006module mmu_htd_dp_mux_macro__mux_aope__ports_4__stack_16r__width_15 (
6007 din0,
6008 din1,
6009 din2,
6010 din3,
6011 sel0,
6012 sel1,
6013 sel2,
6014 dout);
6015wire psel0;
6016wire psel1;
6017wire psel2;
6018wire psel3;
6019
6020 input [14:0] din0;
6021 input [14:0] din1;
6022 input [14:0] din2;
6023 input [14:0] din3;
6024 input sel0;
6025 input sel1;
6026 input sel2;
6027 output [14:0] dout;
6028
6029
6030
6031
6032
6033cl_dp1_penc4_8x c0_0 (
6034 .test(1'b1),
6035 .sel0(sel0),
6036 .sel1(sel1),
6037 .sel2(sel2),
6038 .psel0(psel0),
6039 .psel1(psel1),
6040 .psel2(psel2),
6041 .psel3(psel3)
6042);
6043
6044mux4s #(15) d0_0 (
6045 .sel0(psel0),
6046 .sel1(psel1),
6047 .sel2(psel2),
6048 .sel3(psel3),
6049 .in0(din0[14:0]),
6050 .in1(din1[14:0]),
6051 .in2(din2[14:0]),
6052 .in3(din3[14:0]),
6053.dout(dout[14:0])
6054);
6055
6056
6057
6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068endmodule
6069
6070
6071
6072
6073
6074
6075// any PARAMS parms go into naming of macro
6076
6077module mmu_htd_dp_msff_macro__stack_16r__width_15 (
6078 din,
6079 clk,
6080 en,
6081 se,
6082 scan_in,
6083 siclk,
6084 soclk,
6085 pce_ov,
6086 stop,
6087 dout,
6088 scan_out);
6089wire l1clk;
6090wire siclk_out;
6091wire soclk_out;
6092wire [13:0] so;
6093
6094 input [14:0] din;
6095
6096
6097 input clk;
6098 input en;
6099 input se;
6100 input scan_in;
6101 input siclk;
6102 input soclk;
6103 input pce_ov;
6104 input stop;
6105
6106
6107
6108 output [14:0] dout;
6109
6110
6111 output scan_out;
6112
6113
6114
6115
6116cl_dp1_l1hdr_8x c0_0 (
6117.l2clk(clk),
6118.pce(en),
6119.aclk(siclk),
6120.bclk(soclk),
6121.l1clk(l1clk),
6122 .se(se),
6123 .pce_ov(pce_ov),
6124 .stop(stop),
6125 .siclk_out(siclk_out),
6126 .soclk_out(soclk_out)
6127);
6128dff #(15) d0_0 (
6129.l1clk(l1clk),
6130.siclk(siclk_out),
6131.soclk(soclk_out),
6132.d(din[14:0]),
6133.si({scan_in,so[13:0]}),
6134.so({so[13:0],scan_out}),
6135.q(dout[14:0])
6136);
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151
6152
6153
6154
6155
6156
6157endmodule
6158
6159
6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171// any PARAMS parms go into naming of macro
6172
6173module mmu_htd_dp_msff_macro__stack_58c__width_27 (
6174 din,
6175 clk,
6176 en,
6177 se,
6178 scan_in,
6179 siclk,
6180 soclk,
6181 pce_ov,
6182 stop,
6183 dout,
6184 scan_out);
6185wire l1clk;
6186wire siclk_out;
6187wire soclk_out;
6188wire [25:0] so;
6189
6190 input [26:0] din;
6191
6192
6193 input clk;
6194 input en;
6195 input se;
6196 input scan_in;
6197 input siclk;
6198 input soclk;
6199 input pce_ov;
6200 input stop;
6201
6202
6203
6204 output [26:0] dout;
6205
6206
6207 output scan_out;
6208
6209
6210
6211
6212cl_dp1_l1hdr_8x c0_0 (
6213.l2clk(clk),
6214.pce(en),
6215.aclk(siclk),
6216.bclk(soclk),
6217.l1clk(l1clk),
6218 .se(se),
6219 .pce_ov(pce_ov),
6220 .stop(stop),
6221 .siclk_out(siclk_out),
6222 .soclk_out(soclk_out)
6223);
6224dff #(27) d0_0 (
6225.l1clk(l1clk),
6226.siclk(siclk_out),
6227.soclk(soclk_out),
6228.d(din[26:0]),
6229.si({scan_in,so[25:0]}),
6230.so({so[25:0],scan_out}),
6231.q(dout[26:0])
6232);
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248
6249
6250
6251
6252
6253endmodule
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267// any PARAMS parms go into naming of macro
6268
6269module mmu_htd_dp_msff_macro__stack_58c__width_55 (
6270 din,
6271 clk,
6272 en,
6273 se,
6274 scan_in,
6275 siclk,
6276 soclk,
6277 pce_ov,
6278 stop,
6279 dout,
6280 scan_out);
6281wire l1clk;
6282wire siclk_out;
6283wire soclk_out;
6284wire [53:0] so;
6285
6286 input [54:0] din;
6287
6288
6289 input clk;
6290 input en;
6291 input se;
6292 input scan_in;
6293 input siclk;
6294 input soclk;
6295 input pce_ov;
6296 input stop;
6297
6298
6299
6300 output [54:0] dout;
6301
6302
6303 output scan_out;
6304
6305
6306
6307
6308cl_dp1_l1hdr_8x c0_0 (
6309.l2clk(clk),
6310.pce(en),
6311.aclk(siclk),
6312.bclk(soclk),
6313.l1clk(l1clk),
6314 .se(se),
6315 .pce_ov(pce_ov),
6316 .stop(stop),
6317 .siclk_out(siclk_out),
6318 .soclk_out(soclk_out)
6319);
6320dff #(55) d0_0 (
6321.l1clk(l1clk),
6322.siclk(siclk_out),
6323.soclk(soclk_out),
6324.d(din[54:0]),
6325.si({scan_in,so[53:0]}),
6326.so({so[53:0],scan_out}),
6327.q(dout[54:0])
6328);
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345
6346
6347
6348
6349endmodule
6350
6351
6352
6353
6354
6355
6356
6357
6358
6359//
6360// invert macro
6361//
6362//
6363
6364
6365
6366
6367
6368module mmu_htd_dp_inv_macro__stack_36r__width_27 (
6369 din,
6370 dout);
6371 input [26:0] din;
6372 output [26:0] dout;
6373
6374
6375
6376
6377
6378
6379inv #(27) d0_0 (
6380.in(din[26:0]),
6381.out(dout[26:0])
6382);
6383
6384
6385
6386
6387
6388
6389
6390
6391
6392endmodule
6393
6394
6395
6396
6397
6398//
6399// and macro for ports = 2,3,4
6400//
6401//
6402
6403
6404
6405
6406
6407module mmu_htd_dp_and_macro__ports_2__stack_36r__width_27 (
6408 din0,
6409 din1,
6410 dout);
6411 input [26:0] din0;
6412 input [26:0] din1;
6413 output [26:0] dout;
6414
6415
6416
6417
6418
6419
6420and2 #(27) d0_0 (
6421.in0(din0[26:0]),
6422.in1(din1[26:0]),
6423.out(dout[26:0])
6424);
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434endmodule
6435
6436
6437
6438
6439
6440//
6441// or macro for ports = 2,3
6442//
6443//
6444
6445
6446
6447
6448
6449module mmu_htd_dp_or_macro__ports_2__stack_36r__width_27 (
6450 din0,
6451 din1,
6452 dout);
6453 input [26:0] din0;
6454 input [26:0] din1;
6455 output [26:0] dout;
6456
6457
6458
6459
6460
6461
6462or2 #(27) d0_0 (
6463.in0(din0[26:0]),
6464.in1(din1[26:0]),
6465.out(dout[26:0])
6466);
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476endmodule
6477
6478
6479
6480
6481
6482//
6483// invert macro
6484//
6485//
6486
6487
6488
6489
6490
6491module mmu_htd_dp_inv_macro__stack_36r__width_28 (
6492 din,
6493 dout);
6494 input [27:0] din;
6495 output [27:0] dout;
6496
6497
6498
6499
6500
6501
6502inv #(28) d0_0 (
6503.in(din[27:0]),
6504.out(dout[27:0])
6505);
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515endmodule
6516
6517
6518
6519
6520
6521//
6522// cla macro
6523//
6524//
6525
6526
6527
6528
6529
6530module mmu_htd_dp_cla_macro__width_32 (
6531 cin,
6532 din0,
6533 din1,
6534 dout,
6535 cout);
6536 input cin;
6537 input [31:0] din0;
6538 input [31:0] din1;
6539 output [31:0] dout;
6540 output cout;
6541
6542
6543
6544
6545
6546
6547
6548cla #(32) m0_0 (
6549.cin(cin),
6550.in0(din0[31:0]),
6551.in1(din1[31:0]),
6552.out(dout[31:0]),
6553.cout(cout)
6554);
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567endmodule
6568
6569
6570
6571
6572
6573//
6574// cla macro
6575//
6576//
6577
6578
6579
6580
6581
6582module mmu_htd_dp_cla_macro__width_12 (
6583 cin,
6584 din0,
6585 din1,
6586 dout,
6587 cout);
6588 input cin;
6589 input [11:0] din0;
6590 input [11:0] din1;
6591 output [11:0] dout;
6592 output cout;
6593
6594
6595
6596
6597
6598
6599
6600cla #(12) m0_0 (
6601.cin(cin),
6602.in0(din0[11:0]),
6603.in1(din1[11:0]),
6604.out(dout[11:0]),
6605.cout(cout)
6606);
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619endmodule
6620
6621
6622
6623
6624
6625//
6626// cla macro
6627//
6628//
6629
6630
6631
6632
6633
6634module mmu_htd_dp_cla_macro__width_16 (
6635 cin,
6636 din0,
6637 din1,
6638 dout,
6639 cout);
6640 input cin;
6641 input [15:0] din0;
6642 input [15:0] din1;
6643 output [15:0] dout;
6644 output cout;
6645
6646
6647
6648
6649
6650
6651
6652cla #(16) m0_0 (
6653.cin(cin),
6654.in0(din0[15:0]),
6655.in1(din1[15:0]),
6656.out(dout[15:0]),
6657.cout(cout)
6658);
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671endmodule
6672
6673
6674
6675
6676
6677// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6678// also for pass-gate with decoder
6679
6680
6681
6682
6683
6684// any PARAMS parms go into naming of macro
6685
6686module mmu_htd_dp_mux_macro__mux_aope__ports_2__stack_36r__width_27 (
6687 din0,
6688 din1,
6689 sel0,
6690 dout);
6691wire psel0;
6692wire psel1;
6693
6694 input [26:0] din0;
6695 input [26:0] din1;
6696 input sel0;
6697 output [26:0] dout;
6698
6699
6700
6701
6702
6703cl_dp1_penc2_8x c0_0 (
6704 .sel0(sel0),
6705 .psel0(psel0),
6706 .psel1(psel1)
6707);
6708
6709mux2s #(27) d0_0 (
6710 .sel0(psel0),
6711 .sel1(psel1),
6712 .in0(din0[26:0]),
6713 .in1(din1[26:0]),
6714.dout(dout[26:0])
6715);
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729endmodule
6730
6731
6732
6733
6734
6735
6736// any PARAMS parms go into naming of macro
6737
6738module mmu_htd_dp_msff_macro__stack_50c__width_39 (
6739 din,
6740 clk,
6741 en,
6742 se,
6743 scan_in,
6744 siclk,
6745 soclk,
6746 pce_ov,
6747 stop,
6748 dout,
6749 scan_out);
6750wire l1clk;
6751wire siclk_out;
6752wire soclk_out;
6753wire [37:0] so;
6754
6755 input [38:0] din;
6756
6757
6758 input clk;
6759 input en;
6760 input se;
6761 input scan_in;
6762 input siclk;
6763 input soclk;
6764 input pce_ov;
6765 input stop;
6766
6767
6768
6769 output [38:0] dout;
6770
6771
6772 output scan_out;
6773
6774
6775
6776
6777cl_dp1_l1hdr_8x c0_0 (
6778.l2clk(clk),
6779.pce(en),
6780.aclk(siclk),
6781.bclk(soclk),
6782.l1clk(l1clk),
6783 .se(se),
6784 .pce_ov(pce_ov),
6785 .stop(stop),
6786 .siclk_out(siclk_out),
6787 .soclk_out(soclk_out)
6788);
6789dff #(39) d0_0 (
6790.l1clk(l1clk),
6791.siclk(siclk_out),
6792.soclk(soclk_out),
6793.d(din[38:0]),
6794.si({scan_in,so[37:0]}),
6795.so({so[37:0],scan_out}),
6796.q(dout[38:0])
6797);
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818endmodule
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828// general mux macro for pass-gate and and-or muxes with/wout priority encoders
6829// also for pass-gate with decoder
6830
6831
6832
6833
6834
6835// any PARAMS parms go into naming of macro
6836
6837module mmu_htd_dp_mux_macro__mux_aonpe__ports_8__stack_50c__width_48 (
6838 din0,
6839 sel0,
6840 din1,
6841 sel1,
6842 din2,
6843 sel2,
6844 din3,
6845 sel3,
6846 din4,
6847 sel4,
6848 din5,
6849 sel5,
6850 din6,
6851 sel6,
6852 din7,
6853 sel7,
6854 dout);
6855wire buffout0;
6856wire buffout1;
6857wire buffout2;
6858wire buffout3;
6859wire buffout4;
6860wire buffout5;
6861wire buffout6;
6862wire buffout7;
6863
6864 input [47:0] din0;
6865 input sel0;
6866 input [47:0] din1;
6867 input sel1;
6868 input [47:0] din2;
6869 input sel2;
6870 input [47:0] din3;
6871 input sel3;
6872 input [47:0] din4;
6873 input sel4;
6874 input [47:0] din5;
6875 input sel5;
6876 input [47:0] din6;
6877 input sel6;
6878 input [47:0] din7;
6879 input sel7;
6880 output [47:0] dout;
6881
6882
6883
6884
6885
6886cl_dp1_muxbuff8_8x c0_0 (
6887 .in0(sel0),
6888 .in1(sel1),
6889 .in2(sel2),
6890 .in3(sel3),
6891 .in4(sel4),
6892 .in5(sel5),
6893 .in6(sel6),
6894 .in7(sel7),
6895 .out0(buffout0),
6896 .out1(buffout1),
6897 .out2(buffout2),
6898 .out3(buffout3),
6899 .out4(buffout4),
6900 .out5(buffout5),
6901 .out6(buffout6),
6902 .out7(buffout7)
6903);
6904mux8s #(48) d0_0 (
6905 .sel0(buffout0),
6906 .sel1(buffout1),
6907 .sel2(buffout2),
6908 .sel3(buffout3),
6909 .sel4(buffout4),
6910 .sel5(buffout5),
6911 .sel6(buffout6),
6912 .sel7(buffout7),
6913 .in0(din0[47:0]),
6914 .in1(din1[47:0]),
6915 .in2(din2[47:0]),
6916 .in3(din3[47:0]),
6917 .in4(din4[47:0]),
6918 .in5(din5[47:0]),
6919 .in6(din6[47:0]),
6920 .in7(din7[47:0]),
6921.dout(dout[47:0])
6922);
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936endmodule
6937
6938
6939//
6940// buff macro
6941//
6942//
6943
6944
6945
6946
6947
6948module mmu_htd_dp_buff_macro__stack_50c__width_48 (
6949 din,
6950 dout);
6951 input [47:0] din;
6952 output [47:0] dout;
6953
6954
6955
6956
6957
6958
6959buff #(48) d0_0 (
6960.in(din[47:0]),
6961.out(dout[47:0])
6962);
6963
6964
6965
6966
6967
6968
6969
6970
6971endmodule
6972
6973
6974
6975