Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / mmu / rtl / mmu_asi_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: mmu_asi_ctl.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_asi_ctl (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 spc_aclk,
40 spc_bclk,
41 tcu_scan_en,
42 spc_aclk_wmr,
43 wmr_scan_in,
44 htc_itlb_clken,
45 htc_dtlb_clken,
46 lsu_asi_clken,
47 lsu_mmu_pmen,
48 tlu_tag_access_tid_0_b,
49 tlu_i_tag_access_0_b,
50 tlu_d_tag_access_0_b,
51 tlu_tag_access_tid_1_b,
52 tlu_i_tag_access_1_b,
53 tlu_d_tag_access_1_b,
54 mbi_mra0_write_en,
55 mbi_mra1_write_en,
56 mbi_scp0_write_en,
57 mbi_scp1_write_en,
58 mbi_addr,
59 mbi_run,
60 mbi_wdata,
61 mbi_mra0_read_en,
62 mbi_mra1_read_en,
63 mbi_scp0_read_en,
64 mbi_scp1_read_en,
65 mbi_mmu_cmpsel,
66 mbd_compare,
67 error_inject_enable,
68 error_inject_mrau,
69 error_inject_scau,
70 error_inject_mask,
71 lsu_rngf_cdbus,
72 tlu_iht_request,
73 tlu_dht_request,
74 tlu_release_tte,
75 tlu_ceter_pscce,
76 scp0_data,
77 scp1_data,
78 scp0_ecc,
79 scp1_ecc,
80 sel_scac,
81 sel_scau,
82 ase_mra_rd_data,
83 mel0_parity,
84 mel1_parity,
85 mel0_parity_err,
86 mel1_parity_err,
87 asd0_asi_rd_data,
88 asd1_asi_rd_data,
89 asd0_dtte_tag,
90 asd1_dtte_tag,
91 asd0_dtte_data,
92 asd1_dtte_data,
93 asd0_itte_index,
94 asd1_itte_index,
95 asd0_asi_zero_context,
96 asd1_asi_zero_context,
97 htd_tsbptr,
98 htc_mra_addr_in,
99 htc_mra_rd_en,
100 htc_wr_itlb_data_in,
101 htc_wr_dtlb_data_in,
102 mmu_i_unauth_access,
103 mmu_i_tsb_miss,
104 mmu_d_tsb_miss,
105 mmu_i_tte_outofrange,
106 mmu_d_tte_outofrange,
107 mmu_i_eccerr,
108 mmu_d_eccerr,
109 scan_out,
110 wmr_scan_out,
111 asi_error_scau,
112 asi_error_mrau,
113 asi_error_mask,
114 asi_scp_addr,
115 asi_scp_wr_en,
116 asi_scp_rd_en,
117 asi_rd_scp0,
118 asi_mra_rd_addr_0,
119 asi_mra_rd_addr_1,
120 asi_mra_rd_en,
121 asi_mra_wr_addr,
122 asi_mra_wr_en,
123 asi_mra_rd_en_last,
124 asi_rd_tsb_cfg_0_2,
125 asi_rd_tsb_cfg_1_3,
126 asi_rd_tsb_ptr_,
127 asi_rd_real_range,
128 asi_rd_physical_offset,
129 asi_sel_mra_0_in,
130 asi_mra_wr_en_next,
131 asi_rd_immu_tag_target,
132 asi_rd_immu_tag_access,
133 asi_rd_dmmu_tag_target,
134 asi_rd_dmmu_tag_access,
135 asi_rd_i_access_target,
136 asi_rd_d_access_target,
137 asi_rd_access_target,
138 asi_rd_itte_tag,
139 asi_rd_itte_data,
140 asi_rd_dtte,
141 asi_wr_immu_tag_access,
142 asi_wr_itlb_data_in,
143 asi_wr_itlb_data_access,
144 asi_wr_immu_demap,
145 asi_wr_immu_demap_p,
146 asi_wr_immu_demap_n,
147 asi_wr_dmmu_tag_access,
148 asi_wr_dtlb_data_in,
149 asi_wr_dtlb_data_access,
150 asi_wr_partition_id,
151 asi_wr_dmmu_demap,
152 asi_wr_dmmu_demap_p,
153 asi_wr_dmmu_demap_s_n,
154 asi_dmmu_demap_s,
155 asi_wr_p_context_0,
156 asi_p_context_0_en,
157 asi_tag_access_sel,
158 asi_tsb_ptr_req_valid,
159 asi_tsb_ptr_req,
160 asi_tsb_ptr_number,
161 asi_tsb_hwtw_enable_0,
162 asi_tsb_hwtw_enable_1,
163 asi_data_in_real,
164 asi_seg_wr_data,
165 asi_wr_data,
166 asi_mra_wr_data,
167 asi_mra_req_grant,
168 asi_demap_r_bit,
169 asi_rd_data,
170 asi_hwtw_config_0,
171 asi_hwtw_config_1,
172 asi_hwtw_config_2,
173 asi_hwtw_config_3,
174 asi_hwtw_config_4,
175 asi_hwtw_config_5,
176 asi_hwtw_config_6,
177 asi_hwtw_config_7,
178 asi_sel_en,
179 asi_i_tag_access_en,
180 asi_d_tag_access_en,
181 asi_i_data_in_en,
182 asi_d_data_in_en,
183 asi_mbist_wdata,
184 asi_ase_compare_data,
185 asi_compare_data,
186 asi_mbd_scp_data,
187 asi_mbd_sel_scp,
188 asi_mbist_ecc_in,
189 asi_mbist_ecc,
190 asi_mbist_run,
191 asi_ecc_cmpsel_in,
192 asi_ase_cmpsel_in,
193 mmu_asi_data,
194 mmu_asi_read,
195 mmu_write_itlb,
196 mmu_dtlb_reload_stall,
197 mmu_dtlb_reload,
198 mmu_hw_tw_enable,
199 mmu_asi_cecc,
200 mmu_asi_uecc,
201 mmu_asi_tid,
202 mmu_asi_index,
203 mmu_asi_mra_not_sca,
204 mmu_dae_req,
205 mmu_dae_tid,
206 mmu_reload_done,
207 mmu_index,
208 mmu_mbi_mra0_fail,
209 mmu_mbi_mra1_fail,
210 mmu_mbi_scp0_fail,
211 mmu_mbi_scp1_fail);
212wire pce_ov;
213wire stop;
214wire siclk;
215wire soclk;
216wire se;
217wire l1clk;
218wire stg1_en_in;
219wire stg1_en_lat_scanin;
220wire stg1_en_lat_scanout;
221wire stg1_en;
222wire stg2_en_in;
223wire stg2_en;
224wire mbist_run;
225wire stg2_en_lat_scanin;
226wire stg2_en_lat_scanout;
227wire pstg2_en;
228wire [7:0] prd_itte;
229wire [7:0] prd_dtte;
230wire [7:0] rd_dtte_hwtw;
231wire stg3_en_lat_scanin;
232wire stg3_en_lat_scanout;
233wire stg3_en;
234wire stg4_en_lat_scanin;
235wire stg4_en_lat_scanout;
236wire stg4_en;
237wire stg1_4_en;
238wire l1clk_pm1;
239wire pm2_en;
240wire l1clk_pm2;
241wire mbist_run_lat_scanin;
242wire mbist_run_lat_scanout;
243wire mra0_wr_en_lat_scanin;
244wire mra0_wr_en_lat_scanout;
245wire mbist_mra0_wr_en;
246wire mra1_wr_en_lat_scanin;
247wire mra1_wr_en_lat_scanout;
248wire mbist_mra1_wr_en;
249wire scp0_wr_en_lat_scanin;
250wire scp0_wr_en_lat_scanout;
251wire mbist_scp0_wr_en;
252wire scp1_wr_en_lat_scanin;
253wire scp1_wr_en_lat_scanout;
254wire mbist_scp1_wr_en;
255wire mbist_addr_lat_scanin;
256wire mbist_addr_lat_scanout;
257wire [4:0] mbist_addr;
258wire mbist_wdata_lat_scanin;
259wire mbist_wdata_lat_scanout;
260wire [7:0] mbist_wdata;
261wire mra0_rd_en_lat_scanin;
262wire mra0_rd_en_lat_scanout;
263wire mbist_mra0_rd_en;
264wire mra1_rd_en_lat_scanin;
265wire mra1_rd_en_lat_scanout;
266wire mbist_mra1_rd_en;
267wire scp0_rd_en_lat_scanin;
268wire scp0_rd_en_lat_scanout;
269wire mbist_scp0_rd_en;
270wire scp1_rd_en_lat_scanin;
271wire scp1_rd_en_lat_scanout;
272wire mbist_scp1_rd_en;
273wire mbist_cmpsel_lat_scanin;
274wire mbist_cmpsel_lat_scanout;
275wire [1:0] mbist_cmpsel;
276wire [63:0] mbist_wr_data;
277wire [7:0] mbist_wdata_2;
278wire mra0_wr_en_2_lat_scanin;
279wire mra0_wr_en_2_lat_scanout;
280wire mbist_mra0_wr_en_2;
281wire mra1_wr_en_2_lat_scanin;
282wire mra1_wr_en_2_lat_scanout;
283wire mbist_mra1_wr_en_2;
284wire mra0_rd_en_2_lat_scanin;
285wire mra0_rd_en_2_lat_scanout;
286wire mbist_mra0_rd_en_2;
287wire mra1_rd_en_2_lat_scanin;
288wire mra1_rd_en_2_lat_scanout;
289wire mbist_mra1_rd_en_2;
290wire scp0_rd_en_2_lat_scanin;
291wire scp0_rd_en_2_lat_scanout;
292wire mbist_scp0_rd_en_2;
293wire scp1_rd_en_2_lat_scanin;
294wire scp1_rd_en_2_lat_scanout;
295wire mbist_scp1_rd_en_2;
296wire mbist_addr_2_lat_scanin;
297wire mbist_addr_2_lat_scanout;
298wire [4:0] mbist_addr_2;
299wire mbist_cmpsel_2_lat_scanin;
300wire mbist_cmpsel_2_lat_scanout;
301wire [1:0] mbist_cmpsel_2;
302wire mbist_compare_data_lat_scanin;
303wire mbist_compare_data_lat_scanout;
304wire [7:0] compare_data_in;
305wire [7:0] mbist_wdata_3;
306wire [7:0] compare_data;
307wire mbist_mra_rd_en_3;
308wire mbist_mra0_rd_en_3;
309wire mbist_mra1_rd_en_3;
310wire mbist_scp0_0_rd_en;
311wire mbist_scp0_1_rd_en;
312wire mbist_scp0_2_rd_en;
313wire mbist_scp1_0_rd_en;
314wire mbist_scp1_1_rd_en;
315wire mbist_scp1_2_rd_en;
316wire mra0_rd_en_3_lat_scanin;
317wire mra0_rd_en_3_lat_scanout;
318wire mra1_rd_en_3_lat_scanin;
319wire mra1_rd_en_3_lat_scanout;
320wire scp0_rd_en_3_lat_scanin;
321wire scp0_rd_en_3_lat_scanout;
322wire mbist_scp0_rd_en_3;
323wire scp1_rd_en_3_lat_scanin;
324wire scp1_rd_en_3_lat_scanout;
325wire mbist_scp1_rd_en_3;
326wire mra0_rd_en_4_lat_scanin;
327wire mra0_rd_en_4_lat_scanout;
328wire mbist_mra0_rd_en_4;
329wire mra1_rd_en_4_lat_scanin;
330wire mra1_rd_en_4_lat_scanout;
331wire mbist_mra1_rd_en_4;
332wire mra0_fail_in;
333wire mra1_fail_in;
334wire scp0_fail_in;
335wire scp1_fail_in;
336wire mra0_fail_lat_scanin;
337wire mra0_fail_lat_scanout;
338wire mra0_fail;
339wire mra1_fail_lat_scanin;
340wire mra1_fail_lat_scanout;
341wire mra1_fail;
342wire scp0_fail_lat_scanin;
343wire scp0_fail_lat_scanout;
344wire scp0_fail;
345wire scp1_fail_lat_scanin;
346wire scp1_fail_lat_scanout;
347wire scp1_fail;
348wire [1:0] hwtw_config_0_in;
349wire [7:0] wr_hwtw_config_dec;
350wire [63:0] data_1;
351wire [1:0] hwtw_config_0;
352wire [1:0] hwtw_config_1_in;
353wire [1:0] hwtw_config_1;
354wire [1:0] hwtw_config_2_in;
355wire [1:0] hwtw_config_2;
356wire [1:0] hwtw_config_3_in;
357wire [1:0] hwtw_config_3;
358wire [1:0] hwtw_config_4_in;
359wire [1:0] hwtw_config_4;
360wire [1:0] hwtw_config_5_in;
361wire [1:0] hwtw_config_5;
362wire [1:0] hwtw_config_6_in;
363wire [1:0] hwtw_config_6;
364wire [1:0] hwtw_config_7_in;
365wire [1:0] hwtw_config_7;
366wire hwtw_config_0_lat_wmr_scanin;
367wire hwtw_config_0_lat_wmr_scanout;
368wire hwtw_config_1_lat_wmr_scanin;
369wire hwtw_config_1_lat_wmr_scanout;
370wire hwtw_config_2_lat_wmr_scanin;
371wire hwtw_config_2_lat_wmr_scanout;
372wire hwtw_config_3_lat_wmr_scanin;
373wire hwtw_config_3_lat_wmr_scanout;
374wire hwtw_config_4_lat_wmr_scanin;
375wire hwtw_config_4_lat_wmr_scanout;
376wire hwtw_config_5_lat_wmr_scanin;
377wire hwtw_config_5_lat_wmr_scanout;
378wire hwtw_config_6_lat_wmr_scanin;
379wire hwtw_config_6_lat_wmr_scanout;
380wire hwtw_config_7_lat_wmr_scanin;
381wire hwtw_config_7_lat_wmr_scanout;
382wire [63:0] hwtw_config_muxed;
383wire [7:0] rd_hwtw_config_dec;
384wire [63:0] data_1_in;
385wire rng_stg1_data_scanin;
386wire rng_stg1_data_scanout;
387wire ctl_1_lat_scanin;
388wire ctl_1_lat_scanout;
389wire ctl_1;
390wire asi;
391wire scratchpad;
392wire rd_scratchpad;
393wire wr_scratchpad;
394wire context;
395wire p_context_0;
396wire wr_p_context_0;
397wire asi_50;
398wire rd_asi_50;
399wire immu_tag_target;
400wire rd_immu_tag_target;
401wire immu_tag_access;
402wire rd_immu_tag_access;
403wire wr_immu_tag_access;
404wire range_offset;
405wire rd_range_offset;
406wire real_range_0;
407wire real_range_1;
408wire real_range_2;
409wire real_range_3;
410wire physical_offset_0;
411wire physical_offset_1;
412wire physical_offset_2;
413wire physical_offset_3;
414wire asi_54;
415wire rd_asi_54;
416wire itlb_data_in;
417wire wr_itlb_data_in;
418wire z_tsb_cfg_0;
419wire z_tsb_cfg_1;
420wire z_tsb_cfg_2;
421wire z_tsb_cfg_3;
422wire nz_tsb_cfg_0;
423wire nz_tsb_cfg_1;
424wire nz_tsb_cfg_2;
425wire nz_tsb_cfg_3;
426wire wr_z_tsb_cfg_0;
427wire wr_z_tsb_cfg_1;
428wire wr_z_tsb_cfg_2;
429wire wr_z_tsb_cfg_3;
430wire wr_nz_tsb_cfg_0;
431wire wr_nz_tsb_cfg_1;
432wire wr_nz_tsb_cfg_2;
433wire wr_nz_tsb_cfg_3;
434wire itsb_ptr_0;
435wire itsb_ptr_1;
436wire itsb_ptr_2;
437wire itsb_ptr_3;
438wire dtsb_ptr_0;
439wire dtsb_ptr_1;
440wire dtsb_ptr_2;
441wire dtsb_ptr_3;
442wire asi_2;
443wire ctl_2;
444wire [63:0] data_2;
445wire asi_54_2;
446wire t_p_c_2;
447wire t_p_s_2;
448wire rd_t_p_c_2;
449wire wr_t_p_c_2;
450wire rd_t_p_s_2;
451wire legal_data_in_page_size;
452wire wr_itlb_data_in_2;
453wire wr_dtlb_data_in_2;
454wire wr_itlb_data_access_2;
455wire wr_dtlb_data_access_2;
456wire [7:0] clear_data_in_write_;
457wire [7:0] wr_tid_dec;
458wire legal_tsb_cfg_page_size;
459wire fast_dtsb_ptr;
460wire itsb_ptr;
461wire dtsb_ptr;
462wire rd_tsb_ptr_1;
463wire mra_diag;
464wire rd_mra_parity;
465wire itlb_data_access;
466wire rd_itlb_data_access;
467wire wr_itlb_data_access;
468wire itlb_tag_read;
469wire rd_itlb_tag_read;
470wire immu_demap;
471wire legal_i_demap;
472wire wr_immu_demap;
473wire dmmu_demap;
474wire legal_d_demap;
475wire wr_dmmu_demap;
476wire asi_58;
477wire rd_asi_58;
478wire rd_asi_58_not_sfr;
479wire dmmu_tag_target;
480wire rd_dmmu_tag_target;
481wire dmmu_tag_access;
482wire rd_dmmu_tag_access;
483wire wr_dmmu_tag_access;
484wire hwtwconfig;
485wire partition_id;
486wire wr_partition_id;
487wire sca_diag;
488wire rd_sca_ecc;
489wire rd_sca_data;
490wire dtlb_data_in;
491wire wr_dtlb_data_in;
492wire dtlb_data_access;
493wire rd_dtlb_data_access;
494wire wr_dtlb_data_access;
495wire dtlb_tag_read;
496wire rd_dtlb_tag_read;
497wire mmu_asi_rd_1;
498wire [4:0] scp_addr;
499wire wr_scratchpad_2;
500wire [1:0] scp_rd_en_2;
501wire rd_scratchpad_2;
502wire [1:0] scp_wr_en;
503wire [1:0] rd_sca_data_en_2;
504wire rd_sca_data_2;
505wire [1:0] rd_sca_ecc_en_2;
506wire rd_sca_ecc_2;
507wire scp_ctl_lat_scanin;
508wire scp_ctl_lat_scanout;
509wire rd_scratchpad_3;
510wire rd_scratchpad_4_in;
511wire check_ecc;
512wire rd_scratchpad_4_lat_scanin;
513wire rd_scratchpad_4_lat_scanout;
514wire rd_scratchpad_4;
515wire [1:0] scp_rden;
516wire [1:0] mra_rd_en_1;
517wire [4:0] mra_rd_addr;
518wire [4:0] mra_rd_addr0;
519wire [4:0] mra_rd_addr1;
520wire [1:0] mra_addr_sel_rd;
521wire [1:0] mra_avail;
522wire [1:0] mra_addr_sel_hw_tw;
523wire req_grant_in;
524wire req_grant_lat_scanin;
525wire req_grant_lat_scanout;
526wire req_grant;
527wire [4:0] mra_rd_addr_1;
528wire [4:0] mra_rd_addr_0;
529wire zero_context;
530wire [1:1] tsb_ptr_addr;
531wire [4:0] mra_addr_1;
532wire mra_addr_lat_scanin;
533wire mra_addr_lat_scanout;
534wire [4:0] mra_addr_2;
535wire [4:0] mra_addr_3;
536wire [4:0] mra_addr_4;
537wire [1:0] mra_rd_en;
538wire [1:0] mra_to_r3_in_in;
539wire [1:0] mra_to_r3_in;
540wire [1:0] pmra_to_r3_in;
541wire mra_rd_en_lat_scanin;
542wire mra_rd_en_lat_scanout;
543wire [1:0] mra_rd_en_last;
544wire [1:0] pmra_to_r3;
545wire [1:0] mra_wr_en_1;
546wire [1:0] mra_wr_en_3_in;
547wire [1:0] mra_wr_en_2;
548wire mra_sel_tsb_cfg_2;
549wire mra_sel_tsb_cfg_0_2_2;
550wire mra_sel_tsb_cfg_1_3_2;
551wire mra_wr_en_lat_scanin;
552wire mra_wr_en_lat_scanout;
553wire [1:0] mra_wr_en_3;
554wire mra_wr_en_4_lat_scanin;
555wire mra_wr_en_4_lat_scanout;
556wire [1:0] mra_wr_en_4;
557wire [1:0] mra_wr_en_out;
558wire mra_uecc_4;
559wire mra_sel_tsb_cfg_0_2_1;
560wire mra_sel_tsb_cfg_1_3_1;
561wire mra_sel_real_range_1;
562wire mra_sel_physical_offset_1;
563wire mra_sel_lat_scanin;
564wire mra_sel_lat_scanout;
565wire mra_sel_real_range_2;
566wire mra_sel_physical_offset_2;
567wire mra_sel_tsb_cfg_0_2_3;
568wire mra_sel_tsb_cfg_1_3_3;
569wire mra_sel_real_range_3;
570wire mra_sel_physical_offset_3;
571wire rd_tsb_cfg_3;
572wire demap_context_2;
573wire [7:0] rd_tid_dec;
574wire [63:0] dtlb0_tte_tag;
575wire [63:0] dtlb1_tte_tag;
576wire [63:0] scp0_ecc_bus;
577wire [63:0] scp1_ecc_bus;
578wire [63:0] mbist_scp0_0;
579wire [63:0] mbist_scp0_1;
580wire [63:0] mbist_scp0_2;
581wire [63:0] mbist_scp1_0;
582wire [63:0] mbist_scp1_1;
583wire [63:0] mbist_scp1_2;
584wire sel_data_1;
585wire [1:0] use_dtlb_window;
586wire [1:0] asd_asi_sel;
587wire rd_hwtw_config_2;
588wire asd_asi_rd_2;
589wire asd_asi_rd_1;
590wire [63:0] data_2_in;
591wire [63:0] rd_t_p_c_data;
592wire [63:0] rd_t_p_s_data;
593wire stg2_data_lat_scanin;
594wire stg2_data_lat_scanout;
595wire stg2_ctl_lat_scanin;
596wire stg2_ctl_lat_scanout;
597wire mmu_asi_rd_2;
598wire rd_tsb_ptr_2;
599wire rd_mra_parity_2;
600wire wr_immu_tag_access_2;
601wire wr_immu_demap_2;
602wire wr_dmmu_tag_access_2;
603wire wr_dmmu_demap_2;
604wire wr_p_context_0_2;
605wire wr_partition_id_2;
606wire hwtwconfig_2;
607wire [7:0] a_wr_immu_tag_access;
608wire [7:0] a_wr_itlb_data_in;
609wire [7:0] a_wr_itlb_data_access;
610wire [7:0] a_wr_immu_demap;
611wire [7:0] a_wr_dmmu_tag_access;
612wire [7:0] a_wr_dtlb_data_in;
613wire [7:0] a_wr_dtlb_data_access;
614wire [7:0] a_wr_dmmu_demap;
615wire suppress_write_2;
616wire dae_req_lat_scanin;
617wire dae_req_lat_scanout;
618wire suppress_write_3;
619wire [64:0] data_3;
620wire check_ecc_in;
621wire check_ecc_lat_scanin;
622wire check_ecc_lat_scanout;
623wire [1:0] pmra_to_r4_in;
624wire pmra_to_r4_lat_scanin;
625wire pmra_to_r4_lat_scanout;
626wire [1:0] pmra_to_r4;
627wire cecc_4;
628wire uecc_4;
629wire tid_4_lat_scanin;
630wire tid_4_lat_scanout;
631wire [2:0] tid_4;
632wire sca_index_lat_scanin;
633wire sca_index_lat_scanout;
634wire [2:0] sca_index;
635wire [64:0] rngf_cdbus_2;
636wire [64:0] mra_data;
637wire [64:0] mra_tsb_cfg;
638wire tsb_hwtw_en_3;
639wire [64:0] mra_parity;
640wire [64:0] dtlb0_tte_data;
641wire [64:0] dtlb1_tte_data;
642wire [64:0] tsb_ptr_data;
643wire mra_to_r3;
644wire mra_not_tsb_cfg;
645wire rd_mra_parity_3;
646wire rd_tsb_ptr_3;
647wire mra_sel_tsb_cfg;
648wire sel_cdbus_2;
649wire [64:0] data_3_in;
650wire rng_stg3_scanin;
651wire rng_stg3_scanout;
652wire ctl_3;
653wire stg3_ctl_lat_scanin;
654wire stg3_ctl_lat_scanout;
655wire mmu_asi_rd_3;
656wire asi_read_lat_scanin;
657wire asi_read_lat_scanout;
658wire asi_read_in;
659wire asi_read;
660wire dtlb_window_used;
661wire dtlb_window_used_last;
662wire idata_in_data_access;
663wire ddata_in_data_access;
664wire [7:0] rd_itte_in;
665wire [7:0] rd_itte;
666wire [7:0] rd_dtte_in;
667wire [7:0] wrote_dtlb_in;
668wire sel_rd_dtte_hwtw_in;
669wire [7:0] rd_dtte_hwtw_in;
670wire rd_tte_lat_scanin;
671wire rd_tte_lat_scanout;
672wire sel_rd_dtte_hwtw;
673wire idata_in_data_access_2_lat_scanin;
674wire idata_in_data_access_2_lat_scanout;
675wire idata_in_data_access_2;
676wire [7:0] rd_dtte;
677wire [1:0] dtlb_window;
678wire [7:0] rd_itte_last_in;
679wire [7:0] rd_itte_last_last_in;
680wire [7:0] rd_itte_last;
681wire [7:0] rd_itte_data_in;
682wire [7:0] rd_itte_last_last;
683wire [7:0] rd_itte_tag_in;
684wire [7:0] rd_itte_data;
685wire rd_itte_lat_scanin;
686wire rd_itte_lat_scanout;
687wire [7:0] prd_itte_last;
688wire [7:0] rd_itte_tag;
689wire dtlb_window_used_last_lat_scanin;
690wire dtlb_window_used_last_lat_scanout;
691wire wrote_dtlb_tg1_lat_scanin;
692wire wrote_dtlb_tg1_lat_scanout;
693wire [7:0] wrote_dtlb;
694wire wrote_dtlb_tg0_lat_scanin;
695wire wrote_dtlb_tg0_lat_scanout;
696wire [7:0] reload_done_in;
697wire reload_done_tg1_lat_scanin;
698wire reload_done_tg1_lat_scanout;
699wire [7:0] reload_done;
700wire reload_done_tg0_lat_scanin;
701wire reload_done_tg0_lat_scanout;
702wire dtlb_reload_stall_in;
703wire dtlb_reload;
704wire dtlb_reload_stall_lat_scanin;
705wire dtlb_reload_stall_lat_scanout;
706wire dtlb_reload_stall;
707wire dtlb_reload_in;
708wire dtlb_reload_lat_scanin;
709wire dtlb_reload_lat_scanout;
710wire [3:0] wr_tsb_cfg_enc;
711wire wr_tsb_cfg_lat_scanin;
712wire wr_tsb_cfg_lat_scanout;
713wire [3:0] wr_tsb_cfg_enc_2;
714wire [3:0] wr_tsb_cfg_enc_3;
715wire [3:0] wr_tsb_cfg_enc_4;
716wire wr_z_tsb_cfg_3_4;
717wire wr_z_tsb_cfg_2_4;
718wire wr_z_tsb_cfg_1_4;
719wire wr_z_tsb_cfg_0_4;
720wire wr_nz_tsb_cfg_3_4;
721wire wr_nz_tsb_cfg_2_4;
722wire wr_nz_tsb_cfg_1_4;
723wire wr_nz_tsb_cfg_0_4;
724wire [7:0] tid_dec_4;
725wire [3:0] t7_e_z_in;
726wire [3:0] t7_e_z;
727wire [3:0] t7_e_nz_in;
728wire [3:0] t7_e_nz;
729wire [3:0] t6_e_z_in;
730wire [3:0] t6_e_z;
731wire [3:0] t6_e_nz_in;
732wire [3:0] t6_e_nz;
733wire [3:0] t5_e_z_in;
734wire [3:0] t5_e_z;
735wire [3:0] t5_e_nz_in;
736wire [3:0] t5_e_nz;
737wire [3:0] t4_e_z_in;
738wire [3:0] t4_e_z;
739wire [3:0] t4_e_nz_in;
740wire [3:0] t4_e_nz;
741wire [3:0] t3_e_z_in;
742wire [3:0] t3_e_z;
743wire [3:0] t3_e_nz_in;
744wire [3:0] t3_e_nz;
745wire [3:0] t2_e_z_in;
746wire [3:0] t2_e_z;
747wire [3:0] t2_e_nz_in;
748wire [3:0] t2_e_nz;
749wire [3:0] t1_e_z_in;
750wire [3:0] t1_e_z;
751wire [3:0] t1_e_nz_in;
752wire [3:0] t1_e_nz;
753wire [3:0] t0_e_z_in;
754wire [3:0] t0_e_z;
755wire [3:0] t0_e_nz_in;
756wire [3:0] t0_e_nz;
757wire hw_tw_e_lat_wmr_scanin;
758wire hw_tw_e_lat_wmr_scanout;
759wire [7:0] hwtw_enables;
760wire tsb_hwtw_en_1;
761wire tsb_hwtw_en_lat_scanin;
762wire tsb_hwtw_en_lat_scanout;
763wire tsb_hwtw_en_2;
764wire htc_mra_addr_lat_scanin;
765wire htc_mra_addr_lat_scanout;
766wire [4:0] htc_mra_addr;
767wire [3:0] htc_tid_dec;
768wire [7:0] htc_enables_1_2;
769wire [7:0] htc_enables_0_2;
770wire [3:0] htc_sel_tsb_cfg;
771wire [1:0] htc_hwtw_en_1_2;
772wire [1:0] htc_hwtw_en_0_2;
773wire [6:0] index_in;
774wire data_access_index_lat_scanin;
775wire data_access_index_lat_scanout;
776wire error_inject_lat_scanin;
777wire error_inject_lat_scanout;
778wire error_enable;
779wire error_scau;
780wire error_mrau;
781wire [7:0] error_mask;
782wire tag_access_tid_0_lat_scanin;
783wire tag_access_tid_0_lat_scanout;
784wire [1:0] tag_access_tid_0;
785wire i_tag_access_0_lat_scanin;
786wire i_tag_access_0_lat_scanout;
787wire i_tag_access_0;
788wire d_tag_access_0_lat_scanin;
789wire d_tag_access_0_lat_scanout;
790wire d_tag_access_0;
791wire tag_access_tid_1_lat_scanin;
792wire tag_access_tid_1_lat_scanout;
793wire [1:0] tag_access_tid_1;
794wire i_tag_access_1_lat_scanin;
795wire i_tag_access_1_lat_scanout;
796wire i_tag_access_1;
797wire d_tag_access_1_lat_scanin;
798wire d_tag_access_1_lat_scanout;
799wire d_tag_access_1;
800wire [7:0] i_tag_access_exc;
801wire [7:0] d_tag_access_exc;
802wire [7:0] write_stp;
803wire [7:0] stp_in;
804wire [7:0] stp;
805wire stp_lat_scanin;
806wire stp_lat_scanout;
807wire [7:0] set_htp;
808wire [7:0] clr_htp;
809wire [7:0] htp_in;
810wire [7:0] htp;
811wire htp_lat_scanin;
812wire htp_lat_scanout;
813wire spares_scanin;
814wire spares_scanout;
815
816
817
818
819input l2clk;
820input scan_in;
821input tcu_pce_ov;
822input spc_aclk;
823input spc_bclk;
824input tcu_scan_en;
825
826input spc_aclk_wmr; // Warm reset (non)scan
827input wmr_scan_in;
828
829// Power management
830input [7:0] htc_itlb_clken;
831input [7:0] htc_dtlb_clken;
832input lsu_asi_clken;
833input lsu_mmu_pmen;
834input [1:0] tlu_tag_access_tid_0_b; // Tag access power management
835input tlu_i_tag_access_0_b; // Tag access power management
836input tlu_d_tag_access_0_b; // Tag access power management
837input [1:0] tlu_tag_access_tid_1_b; // Tag access power management
838input tlu_i_tag_access_1_b; // Tag access power management
839input tlu_d_tag_access_1_b; // Tag access power management
840
841// MBIST
842input mbi_mra0_write_en; // MBIST write control
843input mbi_mra1_write_en; // MBIST write control
844input mbi_scp0_write_en; // MBIST write control
845input mbi_scp1_write_en; // MBIST write control
846input [4:0] mbi_addr; // 32 entry addressability for MBIST
847input mbi_run; // Select MBIST controls
848input [7:0] mbi_wdata; // MBIST write data
849input mbi_mra0_read_en; // MBIST read control
850input mbi_mra1_read_en; // MBIST read control
851input mbi_scp0_read_en; // MBIST read control
852input mbi_scp1_read_en; // MBIST read control
853input [1:0] mbi_mmu_cmpsel; // Mux (DEC) between 32 bit chunks
854input mbd_compare; // MBIST compare result
855
856input error_inject_enable;
857input error_inject_mrau;
858input error_inject_scau;
859input [7:0] error_inject_mask;
860
861input [64:0] lsu_rngf_cdbus; // control/data bus from lsu
862
863input [7:0] tlu_iht_request; // ITLB hardware tablewalk request
864input [7:0] tlu_dht_request; // DTLB hardware tablewalk request
865input [7:0] tlu_release_tte; // TTE write has been transmitted
866input [7:0] tlu_ceter_pscce;
867
868input [63:0] scp0_data;
869input [63:0] scp1_data;
870input [7:0] scp0_ecc;
871input [7:0] scp1_ecc;
872input sel_scac; // Correctable error on scratchpad
873input sel_scau; // Uncorrectable error on scratchpad
874
875input [63:0] ase_mra_rd_data;
876input [1:0] mel0_parity;
877input [1:0] mel1_parity;
878input mel0_parity_err;
879input mel1_parity_err;
880
881input [63:0] asd0_asi_rd_data;
882input [63:0] asd1_asi_rd_data;
883input [47:0] asd0_dtte_tag;
884input [47:0] asd1_dtte_tag;
885input [54:0] asd0_dtte_data;
886input [54:0] asd1_dtte_data;
887input [6:0] asd0_itte_index; // Flop and send to IFU
888input [6:0] asd1_itte_index; // Flop and send to IFU
889
890input asd0_asi_zero_context;
891input asd1_asi_zero_context;
892
893input [39:4] htd_tsbptr;
894
895input [4:0] htc_mra_addr_in;
896input [1:0] htc_mra_rd_en;
897
898input [7:0] htc_wr_itlb_data_in;
899input [7:0] htc_wr_dtlb_data_in;
900input [7:0] mmu_i_unauth_access;
901input [7:0] mmu_i_tsb_miss;
902input [7:0] mmu_d_tsb_miss;
903input [7:0] mmu_i_tte_outofrange;
904input [7:0] mmu_d_tte_outofrange;
905input [7:0] mmu_i_eccerr; // HW TW had MRA or L2 error on I rld
906input [7:0] mmu_d_eccerr; // HW TW had MRA or L2 error on D rld
907
908
909
910output scan_out;
911output wmr_scan_out;
912
913output asi_error_scau;
914output asi_error_mrau;
915output [7:0] asi_error_mask;
916
917output [4:0] asi_scp_addr;
918output [1:0] asi_scp_wr_en;
919output [1:0] asi_scp_rd_en;
920output asi_rd_scp0;
921
922output [4:0] asi_mra_rd_addr_0; // For reads (flops now in array)
923output [4:0] asi_mra_rd_addr_1; // For reads (flops now in array)
924output [1:0] asi_mra_rd_en; // (flops now in array)
925output [4:0] asi_mra_wr_addr;
926output [1:0] asi_mra_wr_en;
927output [1:0] asi_mra_rd_en_last; // to capture read data for rd-modify-wr
928output asi_rd_tsb_cfg_0_2;
929output asi_rd_tsb_cfg_1_3;
930output asi_rd_tsb_ptr_;
931output asi_rd_real_range;
932output asi_rd_physical_offset;
933output asi_sel_mra_0_in; // Active in cycle 2
934output asi_mra_wr_en_next; // Power management for rd-mod-wr flops
935
936output [7:0] asi_rd_immu_tag_target;
937output [7:0] asi_rd_immu_tag_access;
938output [7:0] asi_rd_dmmu_tag_target;
939output [7:0] asi_rd_dmmu_tag_access;
940output [1:0] asi_rd_i_access_target;
941output [1:0] asi_rd_d_access_target;
942output [1:0] asi_rd_access_target;
943output [7:0] asi_rd_itte_tag;
944output [7:0] asi_rd_itte_data;
945output [6:0] asi_rd_dtte;
946
947output [7:0] asi_wr_immu_tag_access;
948output [7:0] asi_wr_itlb_data_in;
949output [7:0] asi_wr_itlb_data_access;
950output [7:0] asi_wr_immu_demap;
951output [7:0] asi_wr_immu_demap_p;
952output [7:0] asi_wr_immu_demap_n;
953output [7:0] asi_wr_dmmu_tag_access;
954output [7:0] asi_wr_dtlb_data_in;
955output [7:0] asi_wr_dtlb_data_access;
956output [7:0] asi_wr_partition_id;
957output [7:0] asi_wr_dmmu_demap;
958output [7:0] asi_wr_dmmu_demap_p;
959output [7:0] asi_wr_dmmu_demap_s_n;
960output asi_dmmu_demap_s;
961output [7:0] asi_wr_p_context_0;
962output [1:0] asi_p_context_0_en;
963
964output [2:0] asi_tag_access_sel;
965output asi_tsb_ptr_req_valid;
966output [2:0] asi_tsb_ptr_req; // HW TW: which thread gets tag access
967output [1:0] asi_tsb_ptr_number; // HW TW: which config reg to use
968
969output [1:0] asi_tsb_hwtw_enable_0; // TSB_CFG[63]; same timing as MRA output
970output [1:0] asi_tsb_hwtw_enable_1; // TSB_CFG[63]; same timing as MRA output
971output asi_data_in_real;
972
973output [63:0] asi_seg_wr_data;
974output [63:0] asi_wr_data;
975output [63:0] asi_mra_wr_data;
976output asi_mra_req_grant; // Hardware tablewalk request granted
977
978output asi_demap_r_bit;
979
980output [63:0] asi_rd_data;
981
982output [1:0] asi_hwtw_config_0;
983output [1:0] asi_hwtw_config_1;
984output [1:0] asi_hwtw_config_2;
985output [1:0] asi_hwtw_config_3;
986output [1:0] asi_hwtw_config_4;
987output [1:0] asi_hwtw_config_5;
988output [1:0] asi_hwtw_config_6;
989output [1:0] asi_hwtw_config_7;
990
991output asi_sel_en; // Clock enable for scratchpad ECC check
992output [7:0] asi_i_tag_access_en;
993output [7:0] asi_d_tag_access_en;
994output [7:0] asi_i_data_in_en;
995output [7:0] asi_d_data_in_en;
996
997output [7:0] asi_mbist_wdata; // MBIST
998output [7:0] asi_ase_compare_data; // MBIST
999output [7:0] asi_compare_data; // MBIST
1000output [31:0] asi_mbd_scp_data; // MBIST
1001output asi_mbd_sel_scp; // MBIST
1002output [7:0] asi_mbist_ecc_in; // MBIST
1003output [3:2] asi_mbist_ecc; // MBIST
1004output asi_mbist_run; // MBIST
1005output asi_ecc_cmpsel_in; // MBIST
1006output [1:0] asi_ase_cmpsel_in; // MBIST
1007
1008output [64:0] mmu_asi_data; // ASI read data for fast bus (to TLU)
1009output mmu_asi_read; // Valid for MMU ASI read
1010
1011output [7:0] mmu_write_itlb;
1012
1013output mmu_dtlb_reload_stall;
1014output mmu_dtlb_reload;
1015
1016output [7:0] mmu_hw_tw_enable;
1017
1018output mmu_asi_cecc; // Correctable ECC error on ASI read
1019output mmu_asi_uecc; // Uncorrectable ECC error on ASI read
1020output [2:0] mmu_asi_tid; // Thread for reported error
1021output [2:0] mmu_asi_index; // Index of the failure (rest is TID)
1022output mmu_asi_mra_not_sca; // 1: MRA error 0: Scratchpad error
1023
1024output mmu_dae_req; // data_access_exception for bad pg size
1025output [2:0] mmu_dae_tid;
1026
1027output [7:0] mmu_reload_done;
1028
1029output [6:0] mmu_index; // Index and valid from idata_access
1030
1031output mmu_mbi_mra0_fail; // MBIST
1032output mmu_mbi_mra1_fail; // MBIST
1033output mmu_mbi_scp0_fail; // MBIST
1034output mmu_mbi_scp1_fail; // MBIST
1035
1036
1037
1038//////////////////////////////////////////////////////////////////////
1039
1040assign pce_ov = tcu_pce_ov;
1041assign stop = 1'b0;
1042assign siclk = spc_aclk;
1043assign soclk = spc_bclk;
1044assign se = tcu_scan_en;
1045
1046
1047mmu_asi_ctl_l1clkhdr_ctl_macro free_clken (
1048 .l2clk(l2clk),
1049 .l1en (1'b1 ),
1050 .l1clk(l1clk),
1051 .pce_ov(pce_ov),
1052 .stop(stop),
1053 .se(se)
1054);
1055
1056
1057
1058//////////////////////////////////////////////////////////////////////////////
1059// Power management
1060
1061assign stg1_en_in =
1062 lsu_asi_clken;
1063
1064mmu_asi_ctl_msff_ctl_macro__width_1 stg1_en_lat (
1065 .scan_in(stg1_en_lat_scanin),
1066 .scan_out(stg1_en_lat_scanout),
1067 .din (stg1_en_in ),
1068 .dout (stg1_en ),
1069 .l1clk(l1clk),
1070 .siclk(siclk),
1071 .soclk(soclk)
1072);
1073
1074assign stg2_en_in =
1075 (lsu_rngf_cdbus[64] & lsu_rngf_cdbus[63]) |
1076 (~lsu_rngf_cdbus[64] & stg2_en) |
1077 mbist_run |
1078 ~lsu_mmu_pmen;
1079
1080mmu_asi_ctl_msff_ctl_macro__width_1 stg2_en_lat (
1081 .scan_in(stg2_en_lat_scanin),
1082 .scan_out(stg2_en_lat_scanout),
1083 .din (stg2_en_in ),
1084 .dout (pstg2_en ),
1085 .l1clk(l1clk),
1086 .siclk(siclk),
1087 .soclk(soclk)
1088);
1089
1090assign stg2_en =
1091 | {pstg2_en, prd_itte[7:0], prd_dtte[7:0], rd_dtte_hwtw[7:0]};
1092
1093mmu_asi_ctl_msff_ctl_macro__width_1 stg3_en_lat (
1094 .scan_in(stg3_en_lat_scanin),
1095 .scan_out(stg3_en_lat_scanout),
1096 .din (stg2_en ),
1097 .dout (stg3_en ),
1098 .l1clk(l1clk),
1099 .siclk(siclk),
1100 .soclk(soclk)
1101);
1102
1103mmu_asi_ctl_msff_ctl_macro__width_1 stg4_en_lat (
1104 .scan_in(stg4_en_lat_scanin),
1105 .scan_out(stg4_en_lat_scanout),
1106 .din (stg3_en ),
1107 .dout (stg4_en ),
1108 .l1clk(l1clk),
1109 .siclk(siclk),
1110 .soclk(soclk)
1111);
1112
1113assign stg1_4_en =
1114 stg1_en | stg2_en | stg3_en | stg4_en;
1115
1116mmu_asi_ctl_l1clkhdr_ctl_macro stg1_4_clken (
1117 .l2clk (l2clk ),
1118 .l1en (stg1_4_en ),
1119 .l1clk (l1clk_pm1 ),
1120 .pce_ov(pce_ov),
1121 .stop(stop),
1122 .se(se)
1123);
1124
1125
1126assign pm2_en =
1127 mbist_run | ~lsu_mmu_pmen;
1128
1129mmu_asi_ctl_l1clkhdr_ctl_macro mbist_clken (
1130 .l2clk (l2clk ),
1131 .l1en (pm2_en ),
1132 .l1clk (l1clk_pm2 ),
1133 .pce_ov(pce_ov),
1134 .stop(stop),
1135 .se(se)
1136);
1137
1138
1139
1140//////////////////////////////////////////////////////////////////////////////
1141// MBIST
1142
1143// Note: mbist_run is used to control power management,
1144// so do not power manage this flop
1145mmu_asi_ctl_msff_ctl_macro__width_1 mbist_run_lat (
1146 .scan_in(mbist_run_lat_scanin),
1147 .scan_out(mbist_run_lat_scanout),
1148 .din (mbi_run ),
1149 .dout (mbist_run ),
1150 .l1clk(l1clk),
1151 .siclk(siclk),
1152 .soclk(soclk)
1153);
1154
1155mmu_asi_ctl_msff_ctl_macro__width_1 mra0_wr_en_lat (
1156 .scan_in(mra0_wr_en_lat_scanin),
1157 .scan_out(mra0_wr_en_lat_scanout),
1158 .l1clk (l1clk_pm2 ),
1159 .din (mbi_mra0_write_en ),
1160 .dout (mbist_mra0_wr_en ),
1161 .siclk(siclk),
1162 .soclk(soclk)
1163);
1164
1165mmu_asi_ctl_msff_ctl_macro__width_1 mra1_wr_en_lat (
1166 .scan_in(mra1_wr_en_lat_scanin),
1167 .scan_out(mra1_wr_en_lat_scanout),
1168 .l1clk (l1clk_pm2 ),
1169 .din (mbi_mra1_write_en ),
1170 .dout (mbist_mra1_wr_en ),
1171 .siclk(siclk),
1172 .soclk(soclk)
1173);
1174
1175mmu_asi_ctl_msff_ctl_macro__width_1 scp0_wr_en_lat (
1176 .scan_in(scp0_wr_en_lat_scanin),
1177 .scan_out(scp0_wr_en_lat_scanout),
1178 .l1clk (l1clk_pm2 ),
1179 .din (mbi_scp0_write_en ),
1180 .dout (mbist_scp0_wr_en ),
1181 .siclk(siclk),
1182 .soclk(soclk)
1183);
1184
1185mmu_asi_ctl_msff_ctl_macro__width_1 scp1_wr_en_lat (
1186 .scan_in(scp1_wr_en_lat_scanin),
1187 .scan_out(scp1_wr_en_lat_scanout),
1188 .l1clk (l1clk_pm2 ),
1189 .din (mbi_scp1_write_en ),
1190 .dout (mbist_scp1_wr_en ),
1191 .siclk(siclk),
1192 .soclk(soclk)
1193);
1194
1195mmu_asi_ctl_msff_ctl_macro__width_5 mbist_addr_lat (
1196 .scan_in(mbist_addr_lat_scanin),
1197 .scan_out(mbist_addr_lat_scanout),
1198 .l1clk (l1clk_pm2 ),
1199 .din (mbi_addr [4:0] ),
1200 .dout (mbist_addr [4:0] ),
1201 .siclk(siclk),
1202 .soclk(soclk)
1203);
1204
1205mmu_asi_ctl_msff_ctl_macro__width_8 mbist_wdata_lat (
1206 .scan_in(mbist_wdata_lat_scanin),
1207 .scan_out(mbist_wdata_lat_scanout),
1208 .l1clk (l1clk_pm2 ),
1209 .din (mbi_wdata [7:0] ),
1210 .dout (mbist_wdata [7:0] ),
1211 .siclk(siclk),
1212 .soclk(soclk)
1213);
1214
1215mmu_asi_ctl_msff_ctl_macro__width_1 mra0_rd_en_lat (
1216 .scan_in(mra0_rd_en_lat_scanin),
1217 .scan_out(mra0_rd_en_lat_scanout),
1218 .l1clk (l1clk_pm2 ),
1219 .din (mbi_mra0_read_en ),
1220 .dout (mbist_mra0_rd_en ),
1221 .siclk(siclk),
1222 .soclk(soclk)
1223);
1224
1225mmu_asi_ctl_msff_ctl_macro__width_1 mra1_rd_en_lat (
1226 .scan_in(mra1_rd_en_lat_scanin),
1227 .scan_out(mra1_rd_en_lat_scanout),
1228 .l1clk (l1clk_pm2 ),
1229 .din (mbi_mra1_read_en ),
1230 .dout (mbist_mra1_rd_en ),
1231 .siclk(siclk),
1232 .soclk(soclk)
1233);
1234
1235mmu_asi_ctl_msff_ctl_macro__width_1 scp0_rd_en_lat (
1236 .scan_in(scp0_rd_en_lat_scanin),
1237 .scan_out(scp0_rd_en_lat_scanout),
1238 .l1clk (l1clk_pm2 ),
1239 .din (mbi_scp0_read_en ),
1240 .dout (mbist_scp0_rd_en ),
1241 .siclk(siclk),
1242 .soclk(soclk)
1243);
1244
1245mmu_asi_ctl_msff_ctl_macro__width_1 scp1_rd_en_lat (
1246 .scan_in(scp1_rd_en_lat_scanin),
1247 .scan_out(scp1_rd_en_lat_scanout),
1248 .l1clk (l1clk_pm2 ),
1249 .din (mbi_scp1_read_en ),
1250 .dout (mbist_scp1_rd_en ),
1251 .siclk(siclk),
1252 .soclk(soclk)
1253);
1254
1255mmu_asi_ctl_msff_ctl_macro__width_2 mbist_cmpsel_lat (
1256 .scan_in(mbist_cmpsel_lat_scanin),
1257 .scan_out(mbist_cmpsel_lat_scanout),
1258 .l1clk (l1clk_pm2 ),
1259 .din (mbi_mmu_cmpsel [1:0] ),
1260 .dout (mbist_cmpsel [1:0] ),
1261 .siclk(siclk),
1262 .soclk(soclk)
1263);
1264
1265assign mbist_wr_data[63:0] =
1266 {8 {mbist_wdata[7:0]}};
1267
1268assign asi_mbist_wdata[7:0] =
1269 mbist_wdata[7:0];
1270
1271assign asi_mbist_ecc_in[7:0] =
1272 mbist_wdata[7:0] & {8 {mbist_run}};
1273
1274assign asi_mbist_ecc[3:2] =
1275 mbist_wdata_2[3:2] & {2 {mbist_run}};
1276
1277assign asi_mbist_run =
1278 mbist_run;
1279
1280
1281
1282mmu_asi_ctl_msff_ctl_macro__width_1 mra0_wr_en_2_lat (
1283 .scan_in(mra0_wr_en_2_lat_scanin),
1284 .scan_out(mra0_wr_en_2_lat_scanout),
1285 .l1clk (l1clk_pm2 ),
1286 .din (mbist_mra0_wr_en ),
1287 .dout (mbist_mra0_wr_en_2 ),
1288 .siclk(siclk),
1289 .soclk(soclk)
1290);
1291
1292mmu_asi_ctl_msff_ctl_macro__width_1 mra1_wr_en_2_lat (
1293 .scan_in(mra1_wr_en_2_lat_scanin),
1294 .scan_out(mra1_wr_en_2_lat_scanout),
1295 .l1clk (l1clk_pm2 ),
1296 .din (mbist_mra1_wr_en ),
1297 .dout (mbist_mra1_wr_en_2 ),
1298 .siclk(siclk),
1299 .soclk(soclk)
1300);
1301
1302mmu_asi_ctl_msff_ctl_macro__width_1 mra0_rd_en_2_lat (
1303 .scan_in(mra0_rd_en_2_lat_scanin),
1304 .scan_out(mra0_rd_en_2_lat_scanout),
1305 .l1clk (l1clk_pm2 ),
1306 .din (mbist_mra0_rd_en ),
1307 .dout (mbist_mra0_rd_en_2 ),
1308 .siclk(siclk),
1309 .soclk(soclk)
1310);
1311
1312mmu_asi_ctl_msff_ctl_macro__width_1 mra1_rd_en_2_lat (
1313 .scan_in(mra1_rd_en_2_lat_scanin),
1314 .scan_out(mra1_rd_en_2_lat_scanout),
1315 .l1clk (l1clk_pm2 ),
1316 .din (mbist_mra1_rd_en ),
1317 .dout (mbist_mra1_rd_en_2 ),
1318 .siclk(siclk),
1319 .soclk(soclk)
1320);
1321
1322mmu_asi_ctl_msff_ctl_macro__width_1 scp0_rd_en_2_lat (
1323 .scan_in(scp0_rd_en_2_lat_scanin),
1324 .scan_out(scp0_rd_en_2_lat_scanout),
1325 .l1clk (l1clk_pm2 ),
1326 .din (mbist_scp0_rd_en ),
1327 .dout (mbist_scp0_rd_en_2 ),
1328 .siclk(siclk),
1329 .soclk(soclk)
1330);
1331
1332mmu_asi_ctl_msff_ctl_macro__width_1 scp1_rd_en_2_lat (
1333 .scan_in(scp1_rd_en_2_lat_scanin),
1334 .scan_out(scp1_rd_en_2_lat_scanout),
1335 .l1clk (l1clk_pm2 ),
1336 .din (mbist_scp1_rd_en ),
1337 .dout (mbist_scp1_rd_en_2 ),
1338 .siclk(siclk),
1339 .soclk(soclk)
1340);
1341
1342mmu_asi_ctl_msff_ctl_macro__width_5 mbist_addr_2_lat (
1343 .scan_in(mbist_addr_2_lat_scanin),
1344 .scan_out(mbist_addr_2_lat_scanout),
1345 .l1clk (l1clk_pm2 ),
1346 .din (mbist_addr [4:0] ),
1347 .dout (mbist_addr_2 [4:0] ),
1348 .siclk(siclk),
1349 .soclk(soclk)
1350);
1351
1352mmu_asi_ctl_msff_ctl_macro__width_2 mbist_cmpsel_2_lat (
1353 .scan_in(mbist_cmpsel_2_lat_scanin),
1354 .scan_out(mbist_cmpsel_2_lat_scanout),
1355 .l1clk (l1clk_pm2 ),
1356 .din (mbist_cmpsel [1:0] ),
1357 .dout (mbist_cmpsel_2 [1:0] ),
1358 .siclk(siclk),
1359 .soclk(soclk)
1360);
1361
1362mmu_asi_ctl_msff_ctl_macro__width_24 mbist_compare_data_lat (
1363 .scan_in(mbist_compare_data_lat_scanin),
1364 .scan_out(mbist_compare_data_lat_scanout),
1365 .l1clk (l1clk_pm2 ),
1366 .din ({mbist_wdata [7:0],
1367 mbist_wdata_2 [7:0],
1368 compare_data_in [7:0]}),
1369 .dout ({mbist_wdata_2 [7:0],
1370 mbist_wdata_3 [7:0],
1371 compare_data [7:0]}),
1372 .siclk(siclk),
1373 .soclk(soclk)
1374);
1375
1376assign mbist_mra_rd_en_3 =
1377 mbist_mra0_rd_en_3 | mbist_mra1_rd_en_3;
1378
1379assign compare_data_in[7:0] =
1380 (mbist_wdata_2[7:0] & {8 {~mbist_mra_rd_en_3}}) |
1381 (mbist_wdata_3[7:0] & {8 { mbist_mra_rd_en_3}}) ;
1382
1383assign asi_ase_compare_data[7:0] =
1384 compare_data_in[7:0];
1385
1386assign asi_compare_data[7:0] =
1387 compare_data[7:0];
1388
1389assign mbist_scp0_0_rd_en =
1390 mbist_scp0_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b00);
1391assign mbist_scp0_1_rd_en =
1392 mbist_scp0_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b01);
1393assign mbist_scp0_2_rd_en =
1394 mbist_scp0_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b10);
1395assign mbist_scp1_0_rd_en =
1396 mbist_scp1_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b00);
1397assign mbist_scp1_1_rd_en =
1398 mbist_scp1_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b01);
1399assign mbist_scp1_2_rd_en =
1400 mbist_scp1_rd_en_2 & (mbist_cmpsel_2[1:0] == 2'b10);
1401
1402assign asi_ase_cmpsel_in[1:0] =
1403 mbist_cmpsel_2[1:0];
1404
1405
1406mmu_asi_ctl_msff_ctl_macro__width_1 mra0_rd_en_3_lat (
1407 .scan_in(mra0_rd_en_3_lat_scanin),
1408 .scan_out(mra0_rd_en_3_lat_scanout),
1409 .l1clk (l1clk_pm2 ),
1410 .din (mbist_mra0_rd_en_2 ),
1411 .dout (mbist_mra0_rd_en_3 ),
1412 .siclk(siclk),
1413 .soclk(soclk)
1414);
1415
1416mmu_asi_ctl_msff_ctl_macro__width_1 mra1_rd_en_3_lat (
1417 .scan_in(mra1_rd_en_3_lat_scanin),
1418 .scan_out(mra1_rd_en_3_lat_scanout),
1419 .l1clk (l1clk_pm2 ),
1420 .din (mbist_mra1_rd_en_2 ),
1421 .dout (mbist_mra1_rd_en_3 ),
1422 .siclk(siclk),
1423 .soclk(soclk)
1424);
1425
1426mmu_asi_ctl_msff_ctl_macro__width_1 scp0_rd_en_3_lat (
1427 .scan_in(scp0_rd_en_3_lat_scanin),
1428 .scan_out(scp0_rd_en_3_lat_scanout),
1429 .l1clk (l1clk_pm2 ),
1430 .din (mbist_scp0_rd_en_2 ),
1431 .dout (mbist_scp0_rd_en_3 ),
1432 .siclk(siclk),
1433 .soclk(soclk)
1434);
1435
1436mmu_asi_ctl_msff_ctl_macro__width_1 scp1_rd_en_3_lat (
1437 .scan_in(scp1_rd_en_3_lat_scanin),
1438 .scan_out(scp1_rd_en_3_lat_scanout),
1439 .l1clk (l1clk_pm2 ),
1440 .din (mbist_scp1_rd_en_2 ),
1441 .dout (mbist_scp1_rd_en_3 ),
1442 .siclk(siclk),
1443 .soclk(soclk)
1444);
1445
1446assign asi_mbd_sel_scp =
1447 mbist_scp0_rd_en_3 | mbist_scp1_rd_en_3;
1448
1449mmu_asi_ctl_msff_ctl_macro__width_1 mra0_rd_en_4_lat (
1450 .scan_in(mra0_rd_en_4_lat_scanin),
1451 .scan_out(mra0_rd_en_4_lat_scanout),
1452 .l1clk (l1clk_pm2 ),
1453 .din (mbist_mra0_rd_en_3 ),
1454 .dout (mbist_mra0_rd_en_4 ),
1455 .siclk(siclk),
1456 .soclk(soclk)
1457);
1458
1459mmu_asi_ctl_msff_ctl_macro__width_1 mra1_rd_en_4_lat (
1460 .scan_in(mra1_rd_en_4_lat_scanin),
1461 .scan_out(mra1_rd_en_4_lat_scanout),
1462 .l1clk (l1clk_pm2 ),
1463 .din (mbist_mra1_rd_en_3 ),
1464 .dout (mbist_mra1_rd_en_4 ),
1465 .siclk(siclk),
1466 .soclk(soclk)
1467);
1468
1469assign mra0_fail_in =
1470 ~mbd_compare & mbist_mra0_rd_en_4;
1471assign mra1_fail_in =
1472 ~mbd_compare & mbist_mra1_rd_en_4;
1473assign scp0_fail_in =
1474 ~mbd_compare & mbist_scp0_rd_en_3;
1475assign scp1_fail_in =
1476 ~mbd_compare & mbist_scp1_rd_en_3;
1477// Generate select for MRA ECC muxing for MBIST
1478assign asi_ecc_cmpsel_in =
1479 mbist_mra0_rd_en_3;
1480
1481mmu_asi_ctl_msff_ctl_macro__width_1 mra0_fail_lat (
1482 .scan_in(mra0_fail_lat_scanin),
1483 .scan_out(mra0_fail_lat_scanout),
1484 .l1clk (l1clk_pm2 ),
1485 .din (mra0_fail_in ),
1486 .dout (mra0_fail ),
1487 .siclk(siclk),
1488 .soclk(soclk)
1489);
1490
1491mmu_asi_ctl_msff_ctl_macro__width_1 mra1_fail_lat (
1492 .scan_in(mra1_fail_lat_scanin),
1493 .scan_out(mra1_fail_lat_scanout),
1494 .l1clk (l1clk_pm2 ),
1495 .din (mra1_fail_in ),
1496 .dout (mra1_fail ),
1497 .siclk(siclk),
1498 .soclk(soclk)
1499);
1500
1501mmu_asi_ctl_msff_ctl_macro__width_1 scp0_fail_lat (
1502 .scan_in(scp0_fail_lat_scanin),
1503 .scan_out(scp0_fail_lat_scanout),
1504 .l1clk (l1clk_pm2 ),
1505 .din (scp0_fail_in ),
1506 .dout (scp0_fail ),
1507 .siclk(siclk),
1508 .soclk(soclk)
1509);
1510
1511mmu_asi_ctl_msff_ctl_macro__width_1 scp1_fail_lat (
1512 .scan_in(scp1_fail_lat_scanin),
1513 .scan_out(scp1_fail_lat_scanout),
1514 .l1clk (l1clk_pm2 ),
1515 .din (scp1_fail_in ),
1516 .dout (scp1_fail ),
1517 .siclk(siclk),
1518 .soclk(soclk)
1519);
1520
1521
1522assign mmu_mbi_mra0_fail =
1523 mra0_fail;
1524assign mmu_mbi_mra1_fail =
1525 mra1_fail;
1526assign mmu_mbi_scp0_fail =
1527 scp0_fail;
1528assign mmu_mbi_scp1_fail =
1529 scp1_fail;
1530
1531
1532
1533//////////////////////////////////////////////////////////////////////////////
1534// HW TW config
1535
1536assign hwtw_config_0_in[1:0] =
1537 ({2 { wr_hwtw_config_dec[0]}} & data_1 [1:0]) |
1538 ({2 {~wr_hwtw_config_dec[0]}} & hwtw_config_0 [1:0]) ;
1539assign hwtw_config_1_in[1:0] =
1540 ({2 { wr_hwtw_config_dec[1]}} & data_1 [1:0]) |
1541 ({2 {~wr_hwtw_config_dec[1]}} & hwtw_config_1 [1:0]) ;
1542assign hwtw_config_2_in[1:0] =
1543 ({2 { wr_hwtw_config_dec[2]}} & data_1 [1:0]) |
1544 ({2 {~wr_hwtw_config_dec[2]}} & hwtw_config_2 [1:0]) ;
1545assign hwtw_config_3_in[1:0] =
1546 ({2 { wr_hwtw_config_dec[3]}} & data_1 [1:0]) |
1547 ({2 {~wr_hwtw_config_dec[3]}} & hwtw_config_3 [1:0]) ;
1548assign hwtw_config_4_in[1:0] =
1549 ({2 { wr_hwtw_config_dec[4]}} & data_1 [1:0]) |
1550 ({2 {~wr_hwtw_config_dec[4]}} & hwtw_config_4 [1:0]) ;
1551assign hwtw_config_5_in[1:0] =
1552 ({2 { wr_hwtw_config_dec[5]}} & data_1 [1:0]) |
1553 ({2 {~wr_hwtw_config_dec[5]}} & hwtw_config_5 [1:0]) ;
1554assign hwtw_config_6_in[1:0] =
1555 ({2 { wr_hwtw_config_dec[6]}} & data_1 [1:0]) |
1556 ({2 {~wr_hwtw_config_dec[6]}} & hwtw_config_6 [1:0]) ;
1557assign hwtw_config_7_in[1:0] =
1558 ({2 { wr_hwtw_config_dec[7]}} & data_1 [1:0]) |
1559 ({2 {~wr_hwtw_config_dec[7]}} & hwtw_config_7 [1:0]) ;
1560
1561mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_0_lat ( // FS:wmr_protect
1562 .scan_in(hwtw_config_0_lat_wmr_scanin),
1563 .scan_out(hwtw_config_0_lat_wmr_scanout),
1564 .siclk(spc_aclk_wmr),
1565 .din (hwtw_config_0_in [1:0] ),
1566 .dout (hwtw_config_0 [1:0] ),
1567 .l1clk(l1clk),
1568 .soclk(soclk)
1569);
1570mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_1_lat ( // FS:wmr_protect
1571 .scan_in(hwtw_config_1_lat_wmr_scanin),
1572 .scan_out(hwtw_config_1_lat_wmr_scanout),
1573 .siclk(spc_aclk_wmr),
1574 .din (hwtw_config_1_in [1:0] ),
1575 .dout (hwtw_config_1 [1:0] ),
1576 .l1clk(l1clk),
1577 .soclk(soclk)
1578);
1579mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_2_lat ( // FS:wmr_protect
1580 .scan_in(hwtw_config_2_lat_wmr_scanin),
1581 .scan_out(hwtw_config_2_lat_wmr_scanout),
1582 .siclk(spc_aclk_wmr),
1583 .din (hwtw_config_2_in [1:0] ),
1584 .dout (hwtw_config_2 [1:0] ),
1585 .l1clk(l1clk),
1586 .soclk(soclk)
1587);
1588mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_3_lat ( // FS:wmr_protect
1589 .scan_in(hwtw_config_3_lat_wmr_scanin),
1590 .scan_out(hwtw_config_3_lat_wmr_scanout),
1591 .siclk(spc_aclk_wmr),
1592 .din (hwtw_config_3_in [1:0] ),
1593 .dout (hwtw_config_3 [1:0] ),
1594 .l1clk(l1clk),
1595 .soclk(soclk)
1596);
1597mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_4_lat ( // FS:wmr_protect
1598 .scan_in(hwtw_config_4_lat_wmr_scanin),
1599 .scan_out(hwtw_config_4_lat_wmr_scanout),
1600 .siclk(spc_aclk_wmr),
1601 .din (hwtw_config_4_in [1:0] ),
1602 .dout (hwtw_config_4 [1:0] ),
1603 .l1clk(l1clk),
1604 .soclk(soclk)
1605);
1606mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_5_lat ( // FS:wmr_protect
1607 .scan_in(hwtw_config_5_lat_wmr_scanin),
1608 .scan_out(hwtw_config_5_lat_wmr_scanout),
1609 .siclk(spc_aclk_wmr),
1610 .din (hwtw_config_5_in [1:0] ),
1611 .dout (hwtw_config_5 [1:0] ),
1612 .l1clk(l1clk),
1613 .soclk(soclk)
1614);
1615mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_6_lat ( // FS:wmr_protect
1616 .scan_in(hwtw_config_6_lat_wmr_scanin),
1617 .scan_out(hwtw_config_6_lat_wmr_scanout),
1618 .siclk(spc_aclk_wmr),
1619 .din (hwtw_config_6_in [1:0] ),
1620 .dout (hwtw_config_6 [1:0] ),
1621 .l1clk(l1clk),
1622 .soclk(soclk)
1623);
1624mmu_asi_ctl_msff_ctl_macro__width_2 hwtw_config_7_lat ( // FS:wmr_protect
1625 .scan_in(hwtw_config_7_lat_wmr_scanin),
1626 .scan_out(hwtw_config_7_lat_wmr_scanout),
1627 .siclk(spc_aclk_wmr),
1628 .din (hwtw_config_7_in [1:0] ),
1629 .dout (hwtw_config_7 [1:0] ),
1630 .l1clk(l1clk),
1631 .soclk(soclk)
1632);
1633
1634assign asi_hwtw_config_0[1:0] =
1635 hwtw_config_0[1:0];
1636assign asi_hwtw_config_1[1:0] =
1637 hwtw_config_1[1:0];
1638assign asi_hwtw_config_2[1:0] =
1639 hwtw_config_2[1:0];
1640assign asi_hwtw_config_3[1:0] =
1641 hwtw_config_3[1:0];
1642assign asi_hwtw_config_4[1:0] =
1643 hwtw_config_4[1:0];
1644assign asi_hwtw_config_5[1:0] =
1645 hwtw_config_5[1:0];
1646assign asi_hwtw_config_6[1:0] =
1647 hwtw_config_6[1:0];
1648assign asi_hwtw_config_7[1:0] =
1649 hwtw_config_7[1:0];
1650
1651assign hwtw_config_muxed[63:2] =
1652 {62 {1'b0}};
1653assign hwtw_config_muxed[1:0] =
1654 ({2 {rd_hwtw_config_dec[0]}} & hwtw_config_0[1:0]) |
1655 ({2 {rd_hwtw_config_dec[1]}} & hwtw_config_1[1:0]) |
1656 ({2 {rd_hwtw_config_dec[2]}} & hwtw_config_2[1:0]) |
1657 ({2 {rd_hwtw_config_dec[3]}} & hwtw_config_3[1:0]) |
1658 ({2 {rd_hwtw_config_dec[4]}} & hwtw_config_4[1:0]) |
1659 ({2 {rd_hwtw_config_dec[5]}} & hwtw_config_5[1:0]) |
1660 ({2 {rd_hwtw_config_dec[6]}} & hwtw_config_6[1:0]) |
1661 ({2 {rd_hwtw_config_dec[7]}} & hwtw_config_7[1:0]) ;
1662
1663//////////////////////////////////////////////////////////////////////////////
1664//STAGE 0
1665
1666assign data_1_in[63:0] =
1667 lsu_rngf_cdbus[63:0];
1668
1669
1670
1671/////////////////////////////////////////////////////////////////////
1672//STAGE 1
1673/////////////////////////////////////////////////////////////////////
1674// Stage the packet coming on the ring
1675
1676mmu_asi_ctl_msff_ctl_macro__width_64 rng_stg1_data (
1677 .scan_in(rng_stg1_data_scanin),
1678 .scan_out(rng_stg1_data_scanout),
1679 .l1clk (l1clk_pm1 ),
1680 .din (data_1_in [63:0] ),
1681 .dout (data_1 [63:0] ),
1682 .siclk(siclk),
1683 .soclk(soclk)
1684);
1685
1686// register control bit, bit 64 indicates whether ctl packet or data packet
1687mmu_asi_ctl_msff_ctl_macro__width_1 ctl_1_lat (
1688 .scan_in(ctl_1_lat_scanin),
1689 .scan_out(ctl_1_lat_scanout),
1690 .l1clk (l1clk_pm1 ),
1691 .din (lsu_rngf_cdbus [64 ] ),
1692 .dout (ctl_1 ),
1693 .siclk(siclk),
1694 .soclk(soclk)
1695);
1696
1697// decode the packet
1698
1699assign asi =
1700 ctl_1 & data_1[63] & ~data_1[62] & (data_1[61:60] == 2'b00);
1701
1702
1703// Scratchpad address is data_1[05:03] for regs 0 to 7
1704assign scratchpad =
1705 asi & ((data_1[55:48] == 8'h20) | (data_1[55:48] == 8'h4F)) ;
1706assign rd_scratchpad =
1707 scratchpad & data_1[59];
1708assign wr_scratchpad =
1709 scratchpad & ~data_1[59];
1710
1711// Context registers at 0x08, 0x10, 0x108, 0x110
1712assign context =
1713 asi & (data_1[55:48] == 8'h21);
1714assign p_context_0 =
1715 context & ~data_1[8] & ~data_1[4] & data_1[3];
1716assign wr_p_context_0 =
1717 p_context_0 & ~data_1[59];
1718
1719// IMMU tag target at 0x00, IMMU SFSR at 0x18, IMMU tag access at 0x30
1720// Note that ISFSR is in TLU, not MMU
1721assign asi_50 =
1722 asi & (data_1[55:48] == 8'h50);
1723assign rd_asi_50 =
1724 asi_50 & data_1[59] & ~data_1[3];
1725assign immu_tag_target =
1726 asi_50 & (data_1[7:3] == 5'b00000);
1727assign rd_immu_tag_target =
1728 immu_tag_target & data_1[59];
1729assign immu_tag_access =
1730 asi_50 & (data_1[7:3] == 5'b00110);
1731assign rd_immu_tag_access =
1732 immu_tag_access & data_1[59];
1733assign wr_immu_tag_access =
1734 immu_tag_access & ~data_1[59];
1735
1736// Real range at 0x108, 110, 118, 120; physical offset at 0x208, 210, 218, 220
1737assign range_offset =
1738 asi & (data_1[55:48] == 8'h52);
1739assign rd_range_offset =
1740 range_offset & data_1[59];
1741assign real_range_0 =
1742 range_offset & (data_1[9:8] == 2'b01) & (data_1[5:3] == 3'b001);
1743assign real_range_1 =
1744 range_offset & (data_1[9:8] == 2'b01) & (data_1[5:3] == 3'b010);
1745assign real_range_2 =
1746 range_offset & (data_1[9:8] == 2'b01) & (data_1[5:3] == 3'b011);
1747assign real_range_3 =
1748 range_offset & (data_1[9:8] == 2'b01) & (data_1[5:3] == 3'b100);
1749assign physical_offset_0 =
1750 range_offset & (data_1[9:8] == 2'b10) & (data_1[5:3] == 3'b001);
1751assign physical_offset_1 =
1752 range_offset & (data_1[9:8] == 2'b10) & (data_1[5:3] == 3'b010);
1753assign physical_offset_2 =
1754 range_offset & (data_1[9:8] == 2'b10) & (data_1[5:3] == 3'b011);
1755assign physical_offset_3 =
1756 range_offset & (data_1[9:8] == 2'b10) & (data_1[5:3] == 3'b100);
1757
1758// ITLB data in reg at 0x00, TSB configurations at 0x[1-4][0,8],
1759// TSB pointers at 0x[5-8][0,8],
1760// tablewalk in progress registers at 0x90, 0x98
1761assign asi_54 =
1762 asi & (data_1[55:48] == 8'h54);
1763assign rd_asi_54 =
1764 asi_54 & data_1[59];
1765assign itlb_data_in =
1766 asi_54 & (data_1[7:3] == 5'b00000);
1767assign wr_itlb_data_in =
1768 itlb_data_in & ~data_1[59];
1769assign z_tsb_cfg_0 =
1770 asi_54 & (data_1[7:3] == 5'b00010);
1771assign z_tsb_cfg_1 =
1772 asi_54 & (data_1[7:3] == 5'b00011);
1773assign z_tsb_cfg_2 =
1774 asi_54 & (data_1[7:3] == 5'b00100);
1775assign z_tsb_cfg_3 =
1776 asi_54 & (data_1[7:3] == 5'b00101);
1777assign nz_tsb_cfg_0 =
1778 asi_54 & (data_1[7:3] == 5'b00110);
1779assign nz_tsb_cfg_1 =
1780 asi_54 & (data_1[7:3] == 5'b00111);
1781assign nz_tsb_cfg_2 =
1782 asi_54 & (data_1[7:3] == 5'b01000);
1783assign nz_tsb_cfg_3 =
1784 asi_54 & (data_1[7:3] == 5'b01001);
1785assign wr_z_tsb_cfg_0 =
1786 z_tsb_cfg_0 & ~data_1[59];
1787assign wr_z_tsb_cfg_1 =
1788 z_tsb_cfg_1 & ~data_1[59];
1789assign wr_z_tsb_cfg_2 =
1790 z_tsb_cfg_2 & ~data_1[59];
1791assign wr_z_tsb_cfg_3 =
1792 z_tsb_cfg_3 & ~data_1[59];
1793assign wr_nz_tsb_cfg_0 =
1794 nz_tsb_cfg_0 & ~data_1[59];
1795assign wr_nz_tsb_cfg_1 =
1796 nz_tsb_cfg_1 & ~data_1[59];
1797assign wr_nz_tsb_cfg_2 =
1798 nz_tsb_cfg_2 & ~data_1[59];
1799assign wr_nz_tsb_cfg_3 =
1800 nz_tsb_cfg_3 & ~data_1[59];
1801assign itsb_ptr_0 =
1802 asi_54 & (data_1[7:3] == 5'b01010);
1803assign itsb_ptr_1 =
1804 asi_54 & (data_1[7:3] == 5'b01011);
1805assign itsb_ptr_2 =
1806 asi_54 & (data_1[7:3] == 5'b01100);
1807assign itsb_ptr_3 =
1808 asi_54 & (data_1[7:3] == 5'b01101);
1809assign dtsb_ptr_0 =
1810 asi_54 & (data_1[7:3] == 5'b01110);
1811assign dtsb_ptr_1 =
1812 asi_54 & (data_1[7:3] == 5'b01111);
1813assign dtsb_ptr_2 =
1814 asi_54 & (data_1[7:3] == 5'b10000);
1815assign dtsb_ptr_3 =
1816 asi_54 & (data_1[7:3] == 5'b10001);
1817assign asi_2 =
1818 ctl_2 & data_2[63] & ~data_2[62] & (data_2[61:60] == 2'b00);
1819assign asi_54_2 =
1820 asi_2 & (data_2[55:48] == 8'h54);
1821assign t_p_c_2 = // tablewalk_pending_control
1822 asi_54_2 & (data_2[7:3] == 5'b10010);
1823assign t_p_s_2 = // tablewalk_pending_status
1824 asi_54_2 & (data_2[7:3] == 5'b10011);
1825assign rd_t_p_c_2 =
1826 t_p_c_2 & data_2[59] & ~mbist_run;
1827assign wr_t_p_c_2 =
1828 t_p_c_2 & ~data_2[59];
1829assign rd_t_p_s_2 =
1830 t_p_s_2 & data_2[59] & ~mbist_run;
1831
1832assign legal_data_in_page_size = // 0000, 0001, 0011, 0101
1833 ((~data_1[3] & ~data_1[2] & ~data_1[1]) | // 0000, 0001
1834 (~data_1[3] & ~data_1[2] & data_1[0]) | // 0001, 0011
1835 (~data_1[3] & ~data_1[1] & data_1[0]) ) | // 0001, 0101
1836 (~(wr_itlb_data_in_2 | wr_dtlb_data_in_2 |
1837 wr_itlb_data_access_2 | wr_dtlb_data_access_2));
1838
1839assign clear_data_in_write_[7:0] =
1840 ({8 {legal_data_in_page_size}} & wr_tid_dec[7:0]) |
1841 ~wr_tid_dec[7:0];
1842
1843assign legal_tsb_cfg_page_size = // 0000, 0001, 0011, 0101
1844 (~data_1[7] & ~data_1[6] & ~data_1[5]) | // 0000, 0001
1845 (~data_1[7] & ~data_1[6] & data_1[4]) | // 0001, 0011
1846 (~data_1[7] & ~data_1[5] & data_1[4]) | // 0001, 0101
1847 data_2[59]; // read -- don't check for legal size on read!
1848
1849// fast_dtsb_ptr distinguishes dtsb_ptr from itsb_ptr
1850assign fast_dtsb_ptr =
1851 (data_1[5] & data_1[4]) | data_1[7];
1852
1853assign asi_tag_access_sel[2:0] =
1854 {fast_dtsb_ptr, data_1[57:56]};
1855
1856assign asi_tsb_ptr_req_valid =
1857 itsb_ptr_0 | itsb_ptr_1 | itsb_ptr_2 | itsb_ptr_3 |
1858 dtsb_ptr_0 | dtsb_ptr_1 | dtsb_ptr_2 | dtsb_ptr_3 ;
1859
1860assign itsb_ptr =
1861 itsb_ptr_0 | itsb_ptr_1 | itsb_ptr_2 | itsb_ptr_3;
1862
1863assign dtsb_ptr =
1864 dtsb_ptr_0 | dtsb_ptr_1 | dtsb_ptr_2 | dtsb_ptr_3;
1865
1866assign asi_tsb_ptr_req[2:0] =
1867 {data_1[58:56]};
1868
1869assign asi_tsb_ptr_number[1:0] =
1870 {dtsb_ptr_3 | dtsb_ptr_2 | itsb_ptr_3 | itsb_ptr_2,
1871 dtsb_ptr_3 | dtsb_ptr_1 | itsb_ptr_3 | itsb_ptr_1};
1872
1873assign rd_tsb_ptr_1 =
1874 itsb_ptr | dtsb_ptr;
1875
1876assign asi_rd_tsb_ptr_ =
1877 ~(rd_tsb_ptr_1 & ~mbist_run);
1878
1879// MRA diagnostic access at ASI 0x51, addr 0x00 - 0x38
1880assign mra_diag =
1881 asi & (data_1[55:48] == 8'h51);
1882assign rd_mra_parity =
1883 mra_diag & data_1[59];
1884
1885// ITLB data access reg at 0x000 - 0x1F8
1886assign itlb_data_access =
1887 asi & (data_1[55:48] == 8'h55);
1888assign rd_itlb_data_access =
1889 itlb_data_access & data_1[59];
1890assign wr_itlb_data_access =
1891 itlb_data_access & ~data_1[59];
1892
1893// ITLB tag read reg at 0x000 - 0x1F8
1894assign itlb_tag_read =
1895 asi & (data_1[55:48] == 8'h56);
1896assign rd_itlb_tag_read =
1897 itlb_tag_read & data_1[59];
1898
1899// IMMU demap at address 0x0 (data holds command)
1900assign immu_demap =
1901 asi & (data_1[55:48] == 8'h57) & legal_i_demap;
1902assign wr_immu_demap =
1903 immu_demap & ~data_1[59];
1904assign legal_i_demap =
1905 data_1[7] | // all, real
1906 ~data_1[4]; // primary, nucleus
1907
1908// DMMU demap at address 0x0 (data holds command)
1909assign dmmu_demap =
1910 asi & (data_1[55:48] == 8'h5f) & legal_d_demap;
1911assign wr_dmmu_demap =
1912 dmmu_demap & ~data_1[59];
1913assign legal_d_demap =
1914 data_1[7] | // all, real
1915 ~data_1[5] | // primary, secondary
1916 ~data_1[4]; // primary, nucleus
1917
1918// DMMU tag target at 0x00, DMMU SFSR at 0x18, DMMU SFAR at 0x20,
1919// DMMU tag access at 0x30, hwtw_config at 0x40, partition ID at 0x80,
1920assign asi_58 =
1921 asi & (data_1[55:48] == 8'h58);
1922assign rd_asi_58 =
1923 asi_58 & data_1[59];
1924// MMU owns ASI 0x58 except sync fault registers (addr 0x18 & 0x20)
1925assign rd_asi_58_not_sfr =
1926 rd_asi_58 & ((data_1[5:4] == 2'b00) | (data_1[5:4] == 2'b11));
1927assign dmmu_tag_target =
1928 asi_58 & (data_1[7:3] == 5'b00000);
1929assign rd_dmmu_tag_target =
1930 dmmu_tag_target & data_1[59];
1931assign dmmu_tag_access =
1932 asi_58 & (data_1[7:3] == 5'b00110);
1933assign rd_dmmu_tag_access =
1934 dmmu_tag_access & data_1[59];
1935assign wr_dmmu_tag_access =
1936 dmmu_tag_access & ~data_1[59];
1937assign hwtwconfig =
1938 asi_58 & (data_1[7:3] == 5'b01000);
1939assign partition_id =
1940 asi_58 & (data_1[7:3] == 5'b10000);
1941assign wr_partition_id =
1942 partition_id & ~data_1[59];
1943
1944// Scratchpad diagnostic access at ASI 0x59, addr 0x00 - 0x78
1945assign sca_diag =
1946 asi & (data_1[55:48] == 8'h59);
1947assign rd_sca_ecc =
1948 sca_diag & ~data_1[6] & data_1[59];
1949assign rd_sca_data =
1950 sca_diag & data_1[6] & data_1[59];
1951
1952// DTLB data in reg at 0x00
1953assign dtlb_data_in =
1954 asi & (data_1[55:48] == 8'h5c);
1955assign wr_dtlb_data_in =
1956 dtlb_data_in & ~data_1[59];
1957
1958// DTLB data access reg at 0x000 - 0x1F8
1959assign dtlb_data_access =
1960 asi & (data_1[55:48] == 8'h5d);
1961assign rd_dtlb_data_access =
1962 dtlb_data_access & data_1[59];
1963assign wr_dtlb_data_access =
1964 dtlb_data_access & ~data_1[59];
1965
1966// DTLB tag read reg at 0x000 - 0x1F8
1967assign dtlb_tag_read =
1968 asi & (data_1[55:48] == 8'h5e);
1969assign rd_dtlb_tag_read =
1970 dtlb_tag_read & data_1[59];
1971
1972
1973assign mmu_asi_rd_1 =
1974 rd_scratchpad | rd_asi_50 | rd_range_offset | rd_asi_54 |
1975 rd_itlb_data_access | rd_itlb_tag_read | rd_asi_58_not_sfr |
1976 rd_dtlb_data_access | rd_dtlb_tag_read | rd_sca_ecc | rd_sca_data;
1977
1978
1979
1980// Three classes of register:
1981// 1. Scratchpad registers
1982// 2. Registers stored in MMU register array (MRA)
1983// 3. Individual registers present in MMU
1984// or
1985// calculations performed within MMU
1986//
1987
1988
1989//
1990// Scratchpad registers
1991// These are stored in SCP
1992//
1993assign scp_addr[4:0] =
1994 ({5 {rd_scratchpad & ~mbist_run}} & {data_1[57:56], data_1[5:3]}) |
1995 ({5 {wr_scratchpad_2 & ~mbist_run}} & {data_2[57:56], data_2[5:3]}) |
1996 ({5 {rd_sca_ecc & ~mbist_run}} & {data_1[57:56], data_1[5:3]}) |
1997 ({5 {rd_sca_data & ~mbist_run}} & {data_1[57:56], data_1[5:3]}) |
1998 ({5 { mbist_run}} & mbist_addr[4:0] ) ;
1999
2000assign scp_rd_en_2[1:0] =
2001 {2 {rd_scratchpad_2 & ~mbist_run}} & {data_2[58], ~data_2[58]};
2002assign scp_wr_en[1:0] =
2003 ({2 {wr_scratchpad_2 & ~mbist_run}} & {data_2[58], ~data_2[58]}) |
2004 ({2 {mbist_run}} & {mbist_scp1_wr_en, mbist_scp0_wr_en}) ;
2005
2006assign rd_sca_data_en_2[1:0] =
2007 {2 {rd_sca_data_2 & ~mbist_run}} & {data_2[58], ~data_2[58]};
2008assign rd_sca_ecc_en_2[1:0] =
2009 {2 {rd_sca_ecc_2 & ~mbist_run}} & {data_2[58], ~data_2[58]};
2010
2011mmu_asi_ctl_msff_ctl_macro__width_5 scp_ctl_lat (
2012 .scan_in(scp_ctl_lat_scanin),
2013 .scan_out(scp_ctl_lat_scanout),
2014 .l1clk (l1clk_pm1 ),
2015 .din ({rd_sca_ecc ,
2016 rd_sca_data ,
2017 rd_scratchpad ,
2018 rd_scratchpad_2 ,
2019 wr_scratchpad }),
2020 .dout ({rd_sca_ecc_2 ,
2021 rd_sca_data_2 ,
2022 rd_scratchpad_2 ,
2023 rd_scratchpad_3 ,
2024 wr_scratchpad_2 }),
2025 .siclk(siclk),
2026 .soclk(soclk)
2027);
2028
2029assign asi_sel_en =
2030 rd_scratchpad_2 | rd_scratchpad_3;
2031
2032assign rd_scratchpad_4_in =
2033 rd_scratchpad_3 & check_ecc;
2034
2035mmu_asi_ctl_msff_ctl_macro__width_1 rd_scratchpad_4_lat (
2036 .scan_in(rd_scratchpad_4_lat_scanin),
2037 .scan_out(rd_scratchpad_4_lat_scanout),
2038 .l1clk (l1clk_pm1 ),
2039 .din (rd_scratchpad_4_in ),
2040 .dout (rd_scratchpad_4 ),
2041 .siclk(siclk),
2042 .soclk(soclk)
2043);
2044
2045assign asi_scp_addr[4:0] =
2046 scp_addr[4:0];
2047
2048assign asi_scp_wr_en[1:0] =
2049 scp_wr_en[1:0];
2050
2051assign scp_rden[1:0] =
2052 ({2 {(rd_scratchpad | rd_sca_ecc | rd_sca_data) & ~mbist_run}} &
2053 {data_1[58], ~data_1[58]}) |
2054 ({2 {mbist_run}} & {mbist_scp1_rd_en, mbist_scp0_rd_en}) ;
2055
2056assign asi_scp_rd_en[1:0] =
2057 scp_rden[1:0];
2058
2059
2060
2061//
2062// MMU register array (MRA)
2063// z TSB cfg 0,1 address 0
2064// z TSB cfg 2,3 address 1
2065// nz TSB cfg 0,1 address 2
2066// nz TSB cfg 2,3 address 3
2067// Real range, physical offset pair 0 address 4
2068// Real range, physical offset pair 1 address 5
2069// Real range, physical offset pair 2 address 6
2070// Real range, physical offset pair 3 address 7
2071// Since registers must be reformatted, read takes two cycles
2072// (read of array and then format of data)
2073//
2074// Note that reads of the TSB pointers are calculations that depend on
2075// the TSB configuration registers (and therefore read them)
2076//
2077// All registers are written by
2078//
2079// Prioritizes between
2080// ASI access (highest)
2081// HW TW access (lowest)
2082
2083assign mra_rd_en_1[1:0] =
2084 {data_1[58], ~data_1[58]} &
2085 {2 {z_tsb_cfg_0 | z_tsb_cfg_1 |
2086 z_tsb_cfg_2 | z_tsb_cfg_3 |
2087 nz_tsb_cfg_0 | nz_tsb_cfg_1 |
2088 nz_tsb_cfg_2 | nz_tsb_cfg_3 |
2089 itsb_ptr_0 | itsb_ptr_1 |
2090 itsb_ptr_2 | itsb_ptr_3 |
2091 dtsb_ptr_0 | dtsb_ptr_1 |
2092 dtsb_ptr_2 | dtsb_ptr_3 |
2093 real_range_0 | real_range_1 |
2094 real_range_2 | real_range_3 |
2095 physical_offset_0 | physical_offset_1 |
2096 physical_offset_2 | physical_offset_3 |
2097 rd_mra_parity}};
2098
2099assign mra_rd_addr[4:3] =
2100 data_1[57:56];
2101
2102assign mra_rd_addr[2] = // 4, 5, 6, 7
2103 real_range_0 | real_range_1 |
2104 real_range_2 | real_range_3 |
2105 physical_offset_0 | physical_offset_1 |
2106 physical_offset_2 | physical_offset_3 |
2107 (rd_mra_parity & data_1[5]);
2108
2109assign mra_rd_addr0[1] = // 2, 3, 6, 7
2110 nz_tsb_cfg_0 | nz_tsb_cfg_1 |
2111 nz_tsb_cfg_2 | nz_tsb_cfg_3 |
2112 real_range_2 | real_range_3 |
2113 physical_offset_2 | physical_offset_3 |
2114 (rd_mra_parity & data_1[4]);
2115
2116assign mra_rd_addr1[1] = // 2, 3, 6, 7
2117 nz_tsb_cfg_0 | nz_tsb_cfg_1 |
2118 nz_tsb_cfg_2 | nz_tsb_cfg_3 |
2119 real_range_2 | real_range_3 |
2120 physical_offset_2 | physical_offset_3 |
2121 (rd_mra_parity & data_1[4]);
2122
2123assign mra_rd_addr[0] = // 1, 3, 5, 7
2124 z_tsb_cfg_2 | z_tsb_cfg_3 |
2125 nz_tsb_cfg_2 | nz_tsb_cfg_3 |
2126 itsb_ptr_2 | itsb_ptr_3 |
2127 dtsb_ptr_2 | dtsb_ptr_3 |
2128 real_range_1 | real_range_3 |
2129 physical_offset_1 | physical_offset_3 |
2130 (rd_mra_parity & data_1[3]);
2131
2132assign mra_rd_addr0[4:2] =
2133 mra_rd_addr[4:2];
2134assign mra_rd_addr1[4:2] =
2135 mra_rd_addr[4:2];
2136assign mra_rd_addr[1] =
2137 mra_rd_addr0[1] | mra_rd_addr1[1];
2138assign mra_rd_addr0[0] =
2139 mra_rd_addr[0];
2140assign mra_rd_addr1[0] =
2141 mra_rd_addr[0];
2142
2143
2144assign mra_addr_sel_rd[1:0] =
2145 mra_rd_en_1[1:0] & {2 {~mbist_run}};
2146assign mra_avail[1:0] =
2147 ~mra_rd_en_1[1:0] & {2 {~mbist_run}};
2148// Prevent any HW TW access to MRA when tsb ptr read occurs
2149assign mra_addr_sel_hw_tw[1:0] =
2150 htc_mra_rd_en[1:0] & mra_avail[1:0] & {2 {~rd_tsb_ptr_1}};
2151
2152assign req_grant_in =
2153 | mra_addr_sel_hw_tw[1:0];
2154
2155mmu_asi_ctl_msff_ctl_macro__width_1 req_grant_lat (
2156 .scan_in(req_grant_lat_scanin),
2157 .scan_out(req_grant_lat_scanout),
2158 .din (req_grant_in ),
2159 .dout (req_grant ),
2160 .l1clk(l1clk),
2161 .siclk(siclk),
2162 .soclk(soclk)
2163);
2164
2165assign asi_mra_req_grant = // To hardware tablewalk
2166 req_grant;
2167
2168// 0in bits_on -var {mra_addr_sel_rd[01], mra_addr_sel_hw_tw[01], mbist_run} -max 1
2169// 0in bits_on -var {mra_addr_sel_rd[00], mra_addr_sel_hw_tw[00], mbist_run} -max 1
2170assign mra_rd_addr_1[4:0] =
2171 ({5 {mra_addr_sel_rd [1]}} & mra_rd_addr1 [4:0]) |
2172 ({5 {mra_addr_sel_hw_tw[1]}} & htc_mra_addr_in [4:0]) |
2173 ({5 {mbist_run }} & mbist_addr_2 [4:0]) ;
2174
2175assign mra_rd_addr_0[4:0] =
2176 ({5 {mra_addr_sel_rd [0]}} & mra_rd_addr0 [4:0]) |
2177 ({5 {mra_addr_sel_hw_tw[0]}} & htc_mra_addr_in [4:0]) |
2178 ({5 {mbist_run }} & mbist_addr_2 [4:0]) ;
2179
2180assign asi_mra_rd_addr_1[4:0] =
2181 mra_rd_addr_1[4:0];
2182
2183assign asi_mra_rd_addr_0[4:0] =
2184 mra_rd_addr_0[4:0];
2185
2186// Account for logic in mmu_asd_dp
2187assign zero_context =
2188 (asd1_asi_zero_context & data_1[58]) |
2189 (asd0_asi_zero_context & ~data_1[58]) ;
2190assign tsb_ptr_addr[1] =
2191 ~zero_context & rd_tsb_ptr_1;
2192
2193assign mra_addr_1[4:2] =
2194 mra_rd_addr[4:2];
2195assign mra_addr_1[1] =
2196 mra_rd_addr[1] | tsb_ptr_addr[1];
2197assign mra_addr_1[0] =
2198 mra_rd_addr[0];
2199
2200mmu_asi_ctl_msff_ctl_macro__width_15 mra_addr_lat (
2201 .scan_in(mra_addr_lat_scanin),
2202 .scan_out(mra_addr_lat_scanout),
2203 .l1clk (l1clk_pm1 ),
2204 .din ({mra_addr_1 [4:0],
2205 mra_addr_2 [4:0],
2206 mra_addr_3 [4:0]}),
2207 .dout ({mra_addr_2 [4:0],
2208 mra_addr_3 [4:0],
2209 mra_addr_4 [4:0]}),
2210 .siclk(siclk),
2211 .soclk(soclk)
2212);
2213
2214assign asi_mra_wr_addr[4:0] =
2215 (mra_addr_4 [4:0] & {5 {~mbist_run}}) |
2216 (mbist_addr_2 [4:0] & {5 { mbist_run}}) ;
2217
2218assign mra_rd_en[1:0] =
2219 ( mra_rd_en_1[1:0] & {2 {~mbist_run}}) |
2220 (htc_mra_rd_en [1:0] & {2 {~mbist_run}}) |
2221 ({mbist_mra1_rd_en_2, mbist_mra0_rd_en_2} & {2 { mbist_run}}) ;
2222
2223assign asi_mra_rd_en[1:0] =
2224 mra_rd_en[1:0];
2225
2226assign mra_to_r3_in_in[1:0] =
2227 mra_addr_sel_rd[1:0];
2228
2229assign mra_to_r3_in[1:0] =
2230 {pmra_to_r3_in[1],
2231 (pmra_to_r3_in[0] & ~mbist_run) | (mbist_mra0_rd_en_3 & mbist_run)};
2232
2233mmu_asi_ctl_msff_ctl_macro__width_6 mra_rd_en_lat (
2234 .scan_in(mra_rd_en_lat_scanin),
2235 .scan_out(mra_rd_en_lat_scanout),
2236 .din ({mra_rd_en [1:0],
2237 mra_to_r3_in_in [1:0],
2238 mra_to_r3_in [1:0]}),
2239 .dout ({mra_rd_en_last [1:0],
2240 pmra_to_r3_in [1:0],
2241 pmra_to_r3 [1:0]}),
2242 .l1clk(l1clk),
2243 .siclk(siclk),
2244 .soclk(soclk)
2245);
2246
2247assign asi_sel_mra_0_in =
2248 mra_to_r3_in[0];
2249
2250assign asi_mra_rd_en_last[1:0] =
2251 mra_rd_en_last[1:0];
2252
2253assign mra_wr_en_1[1:0] =
2254 mra_addr_sel_rd[1:0] & {2 {~data_1[59]}};
2255
2256assign mra_wr_en_3_in[1:0] =
2257 mra_wr_en_2[1:0] &
2258 (~mra_to_r3_in[1:0] |
2259 (mra_to_r3_in[1:0] &
2260 {2 {((mra_sel_tsb_cfg_2 & legal_tsb_cfg_page_size) |
2261 ~mra_sel_tsb_cfg_2)}}));
2262
2263assign mra_sel_tsb_cfg_2 =
2264 mra_sel_tsb_cfg_0_2_2 | mra_sel_tsb_cfg_1_3_2;
2265
2266mmu_asi_ctl_msff_ctl_macro__width_4 mra_wr_en_lat (
2267 .scan_in(mra_wr_en_lat_scanin),
2268 .scan_out(mra_wr_en_lat_scanout),
2269 .l1clk (l1clk_pm1 ),
2270 .din ({mra_wr_en_1 [1:0],
2271 mra_wr_en_3_in [1:0]}),
2272 .dout ({mra_wr_en_2 [1:0],
2273 mra_wr_en_3 [1:0]}),
2274 .siclk(siclk),
2275 .soclk(soclk)
2276);
2277
2278mmu_asi_ctl_msff_ctl_macro__width_2 mra_wr_en_4_lat (
2279 .scan_in(mra_wr_en_4_lat_scanin),
2280 .scan_out(mra_wr_en_4_lat_scanout),
2281 .l1clk (l1clk_pm1 ),
2282 .din (mra_wr_en_3 [1:0] ),
2283 .dout (mra_wr_en_4 [1:0] ),
2284 .siclk(siclk),
2285 .soclk(soclk)
2286);
2287
2288assign asi_mra_wr_en_next =
2289 (| mra_wr_en_3[1:0]) | mbist_run;
2290
2291assign mra_wr_en_out[1:0] =
2292 (mra_wr_en_4[1:0] & {2 {~mra_uecc_4 & ~mbist_run}}) |
2293 ({mbist_mra1_wr_en_2, mbist_mra0_wr_en_2} & {2 { mbist_run}}) ;
2294
2295assign asi_mra_wr_en[1:0] =
2296 mra_wr_en_out[1:0];
2297
2298// Generate controls for readmux and modify cycles
2299assign mra_sel_tsb_cfg_0_2_1 =
2300 z_tsb_cfg_0 | z_tsb_cfg_2 |
2301 nz_tsb_cfg_0 | nz_tsb_cfg_2 ;
2302assign mra_sel_tsb_cfg_1_3_1 =
2303 z_tsb_cfg_1 | z_tsb_cfg_3 |
2304 nz_tsb_cfg_1 | nz_tsb_cfg_3 ;
2305assign mra_sel_real_range_1 =
2306 real_range_0 | real_range_1 | real_range_2 | real_range_3;
2307assign mra_sel_physical_offset_1 =
2308 physical_offset_0 | physical_offset_1 |
2309 physical_offset_2 | physical_offset_3;
2310
2311mmu_asi_ctl_msff_ctl_macro__width_8 mra_sel_lat (
2312 .scan_in(mra_sel_lat_scanin),
2313 .scan_out(mra_sel_lat_scanout),
2314 .l1clk (l1clk_pm1 ),
2315 .din ({mra_sel_tsb_cfg_0_2_1,
2316 mra_sel_tsb_cfg_1_3_1,
2317 mra_sel_real_range_1,
2318 mra_sel_physical_offset_1,
2319 mra_sel_tsb_cfg_0_2_2,
2320 mra_sel_tsb_cfg_1_3_2,
2321 mra_sel_real_range_2,
2322 mra_sel_physical_offset_2}),
2323 .dout ({mra_sel_tsb_cfg_0_2_2,
2324 mra_sel_tsb_cfg_1_3_2,
2325 mra_sel_real_range_2,
2326 mra_sel_physical_offset_2,
2327 mra_sel_tsb_cfg_0_2_3,
2328 mra_sel_tsb_cfg_1_3_3,
2329 mra_sel_real_range_3,
2330 mra_sel_physical_offset_3}),
2331 .siclk(siclk),
2332 .soclk(soclk)
2333);
2334
2335assign asi_rd_tsb_cfg_0_2 =
2336 mra_sel_tsb_cfg_0_2_3;
2337assign asi_rd_tsb_cfg_1_3 =
2338 mra_sel_tsb_cfg_1_3_3;
2339assign asi_rd_real_range =
2340 mra_sel_real_range_3;
2341assign asi_rd_physical_offset =
2342 mra_sel_physical_offset_3;
2343
2344assign rd_tsb_cfg_3 =
2345 mra_sel_tsb_cfg_0_2_3 | mra_sel_tsb_cfg_1_3_3;
2346
2347assign asi_mra_wr_data[63:0] =
2348 data_2[63:0];
2349
2350assign asi_demap_r_bit =
2351 data_2[10] & ~demap_context_2;
2352assign demap_context_2 =
2353 ~data_2[7] & data_2[6];
2354
2355
2356//
2357// Individual register reads (write controls from cycle 2)
2358//
2359assign rd_tid_dec [7:0] =
2360 { data_1[58] & data_1[57] & data_1[56],
2361 data_1[58] & data_1[57] & ~data_1[56],
2362 data_1[58] & ~data_1[57] & data_1[56],
2363 data_1[58] & ~data_1[57] & ~data_1[56],
2364 ~data_1[58] & data_1[57] & data_1[56],
2365 ~data_1[58] & data_1[57] & ~data_1[56],
2366 ~data_1[58] & ~data_1[57] & data_1[56],
2367 ~data_1[58] & ~data_1[57] & ~data_1[56]};
2368
2369assign asi_rd_immu_tag_target[7:0] =
2370 {8 {rd_immu_tag_target}} & rd_tid_dec[7:0];
2371assign asi_rd_immu_tag_access[7:0] =
2372 {8 {rd_immu_tag_access}} & rd_tid_dec[7:0];
2373assign asi_rd_i_access_target[1:0] =
2374 {2 {rd_immu_tag_target | rd_immu_tag_access}} &
2375 {data_1[58], ~data_1[58]};
2376assign asi_rd_dmmu_tag_target[7:0] =
2377 {8 {rd_dmmu_tag_target}} & rd_tid_dec[7:0];
2378assign asi_rd_dmmu_tag_access[7:0] =
2379 {8 {rd_dmmu_tag_access}} & rd_tid_dec[7:0];
2380assign asi_rd_d_access_target[1:0] =
2381 {2 {rd_dmmu_tag_target | rd_dmmu_tag_access}} &
2382 {data_1[58], ~data_1[58]};
2383assign asi_rd_access_target[1:0] =
2384 {2 {rd_immu_tag_target | rd_immu_tag_access |
2385 rd_dmmu_tag_target | rd_dmmu_tag_access }} &
2386 {data_1[58], ~data_1[58]};
2387
2388
2389assign dtlb0_tte_tag[63:0] =
2390 {{16 {1'b0}}, asd0_dtte_tag[47:0]};
2391assign dtlb1_tte_tag[63:0] =
2392 {{16 {1'b0}}, asd1_dtte_tag[47:0]};
2393assign scp0_ecc_bus[63:0] =
2394 {{56 {1'b0}}, scp0_ecc[7:0]};
2395assign scp1_ecc_bus[63:0] =
2396 {{56 {1'b0}}, scp1_ecc[7:0]};
2397assign mbist_scp0_0[63:0] =
2398 {{32 {1'b0}}, scp0_data[31:0]};
2399assign mbist_scp0_1[63:0] =
2400 {{32 {1'b0}}, scp0_data[63:32]};
2401assign mbist_scp0_2[63:0] =
2402 {{32 {1'b0}}, {4 {scp0_ecc[7:0]}}};
2403assign mbist_scp1_0[63:0] =
2404 {{32 {1'b0}}, scp1_data[31:0]};
2405assign mbist_scp1_1[63:0] =
2406 {{32 {1'b0}}, scp1_data[63:32]};
2407assign mbist_scp1_2[63:0] =
2408 {{32 {1'b0}}, {4 {scp1_ecc[7:0]}}};
2409
2410assign sel_data_1 =
2411 ~(| {use_dtlb_window[1:0], asd_asi_sel[1:0], scp_rd_en_2[1:0],
2412 rd_sca_ecc_en_2[1:0], rd_sca_data_en_2[1:0],
2413 mbist_scp0_rd_en_2, mbist_scp1_rd_en_2, rd_hwtw_config_2,
2414 rd_t_p_c_2, rd_t_p_s_2});
2415
2416assign asd_asi_sel[1:0] =
2417 {2 {asd_asi_rd_2 & ~mbist_run}} & {data_2[58], ~data_2[58]};
2418assign asd_asi_rd_1 =
2419 rd_immu_tag_target | rd_immu_tag_access |
2420 rd_dmmu_tag_target | rd_dmmu_tag_access;
2421
2422
2423// 0in bits_on -var {sel_data_1, use_dtlb_window[01:00], asd_asi_sel[01:00], scp_rd_en_2[01:00], rd_sca_ecc_en_2[01:00], rd_hwtw_config_2, rd_sca_data_en_2[01:00]} -max 1
2424assign data_2_in[63:0] =
2425 ({64 {sel_data_1 }} & data_1 [63:0]) |
2426 ({64 {use_dtlb_window[0] }} & dtlb0_tte_tag [63:0]) |
2427 ({64 {use_dtlb_window[1] }} & dtlb1_tte_tag [63:0]) |
2428 ({64 {asd_asi_sel[0] }} & asd0_asi_rd_data [63:0]) |
2429 ({64 {asd_asi_sel[1] }} & asd1_asi_rd_data [63:0]) |
2430 ({64 {scp_rd_en_2[0] }} & scp0_data [63:0]) |
2431 ({64 {scp_rd_en_2[1] }} & scp1_data [63:0]) |
2432 ({64 {rd_sca_data_en_2[0]}} & scp0_data [63:0]) |
2433 ({64 {rd_sca_data_en_2[1]}} & scp1_data [63:0]) |
2434 ({64 {rd_sca_ecc_en_2[0] }} & scp0_ecc_bus [63:0]) |
2435 ({64 {rd_sca_ecc_en_2[1] }} & scp1_ecc_bus [63:0]) |
2436 ({64 {rd_hwtw_config_2 }} & hwtw_config_muxed [63:0]) |
2437 ({64 {mbist_scp0_0_rd_en }} & mbist_scp0_0 [63:0]) |
2438 ({64 {mbist_scp0_1_rd_en }} & mbist_scp0_1 [63:0]) |
2439 ({64 {mbist_scp0_2_rd_en }} & mbist_scp0_2 [63:0]) |
2440 ({64 {mbist_scp1_0_rd_en }} & mbist_scp1_0 [63:0]) |
2441 ({64 {mbist_scp1_1_rd_en }} & mbist_scp1_1 [63:0]) |
2442 ({64 {mbist_scp1_2_rd_en }} & mbist_scp1_2 [63:0]) |
2443 ({64 {rd_t_p_c_2 }} & rd_t_p_c_data [63:0]) |
2444 ({64 {rd_t_p_s_2 }} & rd_t_p_s_data [63:0]) ;
2445
2446// For muxing of ECC bits in mmu_sel_dp
2447assign asi_rd_scp0 =
2448 scp_rd_en_2[0];
2449
2450
2451
2452/////////////////////////////////////////////////////////////////////
2453//STAGE 2
2454/////////////////////////////////////////////////////////////////////
2455// pipe the packets and decoded control information
2456mmu_asi_ctl_msff_ctl_macro__width_64 stg2_data_lat (
2457 .scan_in(stg2_data_lat_scanin),
2458 .scan_out(stg2_data_lat_scanout),
2459 .l1clk (l1clk_pm1 ),
2460 .din (data_2_in [63:0] ),
2461 .dout (data_2 [63:0] ),
2462 .siclk(siclk),
2463 .soclk(soclk)
2464);
2465
2466
2467assign asi_mbd_scp_data[31:0] =
2468 data_2[31:0];
2469
2470// register control bit
2471mmu_asi_ctl_msff_ctl_macro__width_16 stg2_ctl_lat (
2472 .scan_in(stg2_ctl_lat_scanin),
2473 .scan_out(stg2_ctl_lat_scanout),
2474 .l1clk (l1clk_pm1 ),
2475 .din ({ctl_1,
2476 mmu_asi_rd_1,
2477 asd_asi_rd_1,
2478 rd_tsb_ptr_1,
2479 rd_mra_parity,
2480 wr_immu_tag_access,
2481 wr_itlb_data_in,
2482 wr_itlb_data_access,
2483 wr_immu_demap,
2484 wr_dmmu_tag_access,
2485 wr_dmmu_demap,
2486 wr_dtlb_data_in,
2487 wr_dtlb_data_access,
2488 wr_p_context_0,
2489 wr_partition_id,
2490 hwtwconfig}),
2491 .dout ({ctl_2,
2492 mmu_asi_rd_2,
2493 asd_asi_rd_2,
2494 rd_tsb_ptr_2,
2495 rd_mra_parity_2,
2496 wr_immu_tag_access_2,
2497 wr_itlb_data_in_2,
2498 wr_itlb_data_access_2,
2499 wr_immu_demap_2,
2500 wr_dmmu_tag_access_2,
2501 wr_dmmu_demap_2,
2502 wr_dtlb_data_in_2,
2503 wr_dtlb_data_access_2,
2504 wr_p_context_0_2,
2505 wr_partition_id_2,
2506 hwtwconfig_2}),
2507 .siclk(siclk),
2508 .soclk(soclk)
2509);
2510
2511// send the store data out to the unit. Store data is in stage1 when control
2512// is in stage 2.
2513assign asi_seg_wr_data [63:0] =
2514 data_1 [63:0] ;
2515assign asi_wr_data [63:0] =
2516 (data_1 [63:0] & {64 {~mbist_run}}) |
2517 (mbist_wr_data [63:0] & {64 { mbist_run}}) ;
2518
2519assign wr_tid_dec [7:0] =
2520 { data_2[58] & data_2[57] & data_2[56],
2521 data_2[58] & data_2[57] & ~data_2[56],
2522 data_2[58] & ~data_2[57] & data_2[56],
2523 data_2[58] & ~data_2[57] & ~data_2[56],
2524 ~data_2[58] & data_2[57] & data_2[56],
2525 ~data_2[58] & data_2[57] & ~data_2[56],
2526 ~data_2[58] & ~data_2[57] & data_2[56],
2527 ~data_2[58] & ~data_2[57] & ~data_2[56]};
2528
2529assign a_wr_immu_tag_access[7:0] =
2530 {8 { wr_immu_tag_access_2}} & wr_tid_dec[7:0] ;
2531assign asi_wr_immu_tag_access[7:0] =
2532 a_wr_immu_tag_access[7:0];
2533assign a_wr_itlb_data_in[7:0] =
2534 {8 { wr_itlb_data_in_2 & legal_data_in_page_size}} & wr_tid_dec[7:0] ;
2535assign asi_wr_itlb_data_in[7:0] =
2536 a_wr_itlb_data_in[7:0];
2537assign a_wr_itlb_data_access[7:0] =
2538 {8 { wr_itlb_data_access_2 & legal_data_in_page_size}} &
2539 wr_tid_dec[7:0] ;
2540assign asi_wr_itlb_data_access[7:0] =
2541 a_wr_itlb_data_access[7:0];
2542assign a_wr_immu_demap[7:0] =
2543 {8 {wr_immu_demap_2}} & wr_tid_dec[7:0] ;
2544assign asi_wr_immu_demap[7:0] =
2545 a_wr_immu_demap[7:0];
2546// Demap uses address, not data, so use data_2 here
2547assign asi_wr_immu_demap_p[7:0] =
2548 {8 {wr_immu_demap_2 & ~data_2[5] & ~data_2[4] }} & wr_tid_dec[7:0] ;
2549assign asi_wr_immu_demap_n[7:0] =
2550 {8 {wr_immu_demap_2 & (data_2[5] | data_2[4])}} & wr_tid_dec[7:0] ;
2551assign a_wr_dmmu_tag_access[7:0] =
2552 {8 { wr_dmmu_tag_access_2}} & wr_tid_dec[7:0] ;
2553assign asi_wr_dmmu_tag_access[7:0] =
2554 a_wr_dmmu_tag_access[7:0];
2555assign a_wr_dtlb_data_in[7:0] =
2556 {8 { wr_dtlb_data_in_2 & legal_data_in_page_size}} & wr_tid_dec[7:0] ;
2557assign asi_wr_dtlb_data_in[7:0] =
2558 a_wr_dtlb_data_in[7:0];
2559assign a_wr_dtlb_data_access[7:0] =
2560 {8 { wr_dtlb_data_access_2 & legal_data_in_page_size}} &
2561 wr_tid_dec[7:0] ;
2562assign asi_wr_dtlb_data_access[7:0] =
2563 a_wr_dtlb_data_access[7:0];
2564assign asi_wr_partition_id[7:0] =
2565 {8 {wr_partition_id_2}} & wr_tid_dec[7:0] ;
2566assign a_wr_dmmu_demap[7:0] =
2567 {8 {wr_dmmu_demap_2}} & wr_tid_dec[7:0] ;
2568assign asi_wr_dmmu_demap[7:0] =
2569 a_wr_dmmu_demap[7:0];
2570// Demap uses address, not data, so use data_2 here
2571assign asi_wr_dmmu_demap_p[7:0] =
2572 {8 {wr_dmmu_demap_2 & ~data_2[5] & ~data_2[4] }} & wr_tid_dec[7:0] ;
2573assign asi_wr_dmmu_demap_s_n[7:0] =
2574 {8 {wr_dmmu_demap_2 & (data_2[5] | data_2[4])}} & wr_tid_dec[7:0] ;
2575assign asi_dmmu_demap_s =
2576 ~data_2[5] & data_2[4];
2577
2578// Write of p_context shadows for immu_tag_access reg
2579assign asi_wr_p_context_0[7:0] =
2580 {8 {wr_p_context_0_2}} & wr_tid_dec[7:0];
2581
2582assign asi_p_context_0_en[1:0] =
2583 {2 {wr_p_context_0_2}} & {data_2[58], ~data_2[58]};
2584
2585assign rd_hwtw_config_2 =
2586 hwtwconfig_2 & data_2[59] & ~mbist_run;
2587assign rd_hwtw_config_dec =
2588 {8 {hwtwconfig_2 & data_2[59]}} & wr_tid_dec[7:0];
2589assign wr_hwtw_config_dec =
2590 {8 {hwtwconfig_2 & ~data_2[59]}} & wr_tid_dec[7:0];
2591
2592assign suppress_write_2 =
2593 ((wr_itlb_data_in_2 | wr_dtlb_data_in_2 |
2594 wr_itlb_data_access_2 | wr_dtlb_data_access_2) &
2595 ~legal_data_in_page_size) |
2596 ((| mra_to_r3_in[1:0]) & mra_sel_tsb_cfg_2 & ~legal_tsb_cfg_page_size);
2597
2598mmu_asi_ctl_msff_ctl_macro__width_1 dae_req_lat (
2599 .scan_in(dae_req_lat_scanin),
2600 .scan_out(dae_req_lat_scanout),
2601 .l1clk (l1clk_pm1 ),
2602 .din (suppress_write_2 ),
2603 .dout (suppress_write_3 ),
2604 .siclk(siclk),
2605 .soclk(soclk)
2606
2607);
2608
2609assign mmu_dae_req =
2610 suppress_write_3;
2611assign mmu_dae_tid[2:0] =
2612 data_3[58:56];
2613
2614// Real bit for data_in and data_access is encoded in address bit 10
2615assign asi_data_in_real =
2616 data_2[10];
2617
2618
2619
2620// Set error bit for ECC problems
2621assign check_ecc_in =
2622 | (tlu_ceter_pscce[7:0] &
2623 { data_2[58] & data_2[57] & data_2[56],
2624 data_2[58] & data_2[57] & ~data_2[56],
2625 data_2[58] & ~data_2[57] & data_2[56],
2626 data_2[58] & ~data_2[57] & ~data_2[56],
2627 ~data_2[58] & data_2[57] & data_2[56],
2628 ~data_2[58] & data_2[57] & ~data_2[56],
2629 ~data_2[58] & ~data_2[57] & data_2[56],
2630 ~data_2[58] & ~data_2[57] & ~data_2[56]});
2631
2632mmu_asi_ctl_msff_ctl_macro__width_1 check_ecc_lat (
2633 .scan_in(check_ecc_lat_scanin),
2634 .scan_out(check_ecc_lat_scanout),
2635 .din (check_ecc_in ),
2636 .dout (check_ecc ),
2637 .l1clk(l1clk),
2638 .siclk(siclk),
2639 .soclk(soclk)
2640);
2641
2642assign pmra_to_r4_in[1:0] =
2643 pmra_to_r3[1:0] & {2 {check_ecc}};
2644
2645mmu_asi_ctl_msff_ctl_macro__width_2 pmra_to_r4_lat (
2646 .scan_in(pmra_to_r4_lat_scanin),
2647 .scan_out(pmra_to_r4_lat_scanout),
2648 .din (pmra_to_r4_in [1:0] ),
2649 .dout (pmra_to_r4 [1:0] ),
2650 .l1clk(l1clk),
2651 .siclk(siclk),
2652 .soclk(soclk)
2653);
2654
2655
2656assign cecc_4 =
2657 (sel_scac & rd_scratchpad_4) ;
2658
2659assign uecc_4 =
2660 (sel_scau & rd_scratchpad_4) |
2661 (mel0_parity_err & pmra_to_r4[0] ) |
2662 (mel1_parity_err & pmra_to_r4[1] ) ;
2663
2664assign mra_uecc_4 =
2665 (mel0_parity_err & pmra_to_r4[0] ) |
2666 (mel1_parity_err & pmra_to_r4[1] ) ;
2667
2668mmu_asi_ctl_msff_ctl_macro__width_3 tid_4_lat (
2669 .scan_in(tid_4_lat_scanin),
2670 .scan_out(tid_4_lat_scanout),
2671 .din (data_3 [58:56] ),
2672 .dout (tid_4 [2:0] ),
2673 .l1clk(l1clk),
2674 .siclk(siclk),
2675 .soclk(soclk)
2676);
2677
2678assign mmu_asi_cecc =
2679 cecc_4;
2680assign mmu_asi_uecc =
2681 uecc_4;
2682assign mmu_asi_tid[2:0] =
2683 tid_4[2:0];
2684
2685assign mmu_asi_mra_not_sca =
2686 ~rd_scratchpad_4;
2687
2688mmu_asi_ctl_msff_ctl_macro__width_3 sca_index_lat (
2689 .scan_in(sca_index_lat_scanin),
2690 .scan_out(sca_index_lat_scanout),
2691 .din (data_3 [5:3] ),
2692 .dout (sca_index [2:0] ),
2693 .l1clk(l1clk),
2694 .siclk(siclk),
2695 .soclk(soclk)
2696);
2697
2698assign mmu_asi_index[2:0] =
2699 ({3 {~rd_scratchpad_4}} & mra_addr_4[2:0]) |
2700 ({3 { rd_scratchpad_4}} & sca_index [2:0]) ;
2701
2702// Mux ctl and data
2703assign rngf_cdbus_2[64:0] =
2704 {ctl_2, data_2[63:0]};
2705assign mra_data[64:0] =
2706 {1'b0, ase_mra_rd_data[63:0]};
2707assign mra_tsb_cfg[64:0] =
2708 {1'b0, tsb_hwtw_en_3, ase_mra_rd_data[62:0]};
2709assign mra_parity[64:0] =
2710 {{63 {1'b0}},
2711 (mel0_parity[1:0] & {2 {~data_3[59]}}) |
2712 (mel1_parity[1:0] & {2 { data_3[59]}}) };
2713assign dtlb0_tte_data[64:0] =
2714 {1'b0, {8 {1'b0}}, 1'b0, asd0_dtte_data[54:0]};
2715assign dtlb1_tte_data[64:0] =
2716 {1'b0, {8 {1'b0}}, 1'b0, asd1_dtte_data[54:0]};
2717assign tsb_ptr_data[64:0] =
2718 {1'b0, {24 {1'b0}}, htd_tsbptr[39:4], {4 {1'b0}}};
2719assign mra_to_r3 =
2720 (| pmra_to_r3[1:0]) & data_3[59];
2721assign mra_not_tsb_cfg =
2722 mra_to_r3 & ~rd_tsb_cfg_3 & ~rd_mra_parity_3 & ~rd_tsb_ptr_3;
2723assign mra_sel_tsb_cfg =
2724 mra_to_r3 & rd_tsb_cfg_3 & ~rd_mra_parity_3 & ~rd_tsb_ptr_3;
2725
2726assign sel_cdbus_2 =
2727 ~(| ({use_dtlb_window[1:0], mra_not_tsb_cfg, mra_sel_tsb_cfg,
2728 rd_mra_parity_3, rd_tsb_ptr_3}));
2729
2730// 0in bits_on -var {use_dtlb_window[01:00], sel_cdbus_2, mra_not_tsb_cfg, mra_sel_tsb_cfg, rd_mra_parity_3, rd_tsb_ptr_3} -max 1
2731assign data_3_in[64:0] =
2732 ({65 {use_dtlb_window[0]}} & dtlb0_tte_data [64:0]) |
2733 ({65 {use_dtlb_window[1]}} & dtlb1_tte_data [64:0]) |
2734 ({65 {sel_cdbus_2 }} & rngf_cdbus_2 [64:0]) |
2735 ({65 {mra_not_tsb_cfg }} & mra_data [64:0]) |
2736 ({65 {mra_sel_tsb_cfg }} & mra_tsb_cfg [64:0]) |
2737 ({65 {rd_mra_parity_3 }} & mra_parity [64:0]) |
2738 ({65 {rd_tsb_ptr_3 }} & tsb_ptr_data [64:0]) ;
2739
2740
2741
2742
2743/////////////////////////////////////////////////////////////////////
2744//STAGE 3
2745/////////////////////////////////////////////////////////////////////
2746// Mux previous results with TSA reads
2747// Transmit to TLU
2748
2749mmu_asi_ctl_msff_ctl_macro__width_65 rng_stg3 (
2750 .scan_in(rng_stg3_scanin),
2751 .scan_out(rng_stg3_scanout),
2752 .l1clk (l1clk_pm1 ),
2753 .din (data_3_in [64:0] ),
2754 .dout (data_3 [64:0] ),
2755 .siclk(siclk),
2756 .soclk(soclk)
2757);
2758
2759assign ctl_3 =
2760 data_3[64];
2761
2762assign asi_rd_data[63:0] =
2763 data_2[63:0];
2764
2765mmu_asi_ctl_msff_ctl_macro__width_3 stg3_ctl_lat (
2766 .scan_in(stg3_ctl_lat_scanin),
2767 .scan_out(stg3_ctl_lat_scanout),
2768 .l1clk (l1clk_pm1 ),
2769 .din ({mmu_asi_rd_2,
2770 rd_tsb_ptr_2,
2771 rd_mra_parity_2}),
2772 .dout ({mmu_asi_rd_3,
2773 rd_tsb_ptr_3,
2774 rd_mra_parity_3}),
2775 .siclk(siclk),
2776 .soclk(soclk)
2777);
2778
2779mmu_asi_ctl_msff_ctl_macro__width_1 asi_read_lat (
2780 .scan_in(asi_read_lat_scanin),
2781 .scan_out(asi_read_lat_scanout),
2782 .din (asi_read_in ),
2783 .dout (asi_read ),
2784 .l1clk(l1clk),
2785 .siclk(siclk),
2786 .soclk(soclk)
2787);
2788
2789assign mmu_asi_data[64:0] =
2790 {data_3[64:63],
2791 data_3[62] | suppress_write_3,
2792 data_3[61:50],
2793 (data_3[49:48] & ~{2 {suppress_write_3}}) | {1'b0, suppress_write_3},
2794 data_3[47:0]};
2795assign asi_read_in =
2796 mmu_asi_rd_3 | dtlb_window_used | dtlb_window_used_last |
2797 suppress_write_2;
2798assign mmu_asi_read =
2799 asi_read;
2800
2801
2802
2803
2804//////////////////////////////////////////////////////////////////////
2805//
2806// TTE Management
2807//
2808// Once a data_in or data_access register write occurs, the tag and data
2809// must be transmitted to the TLB and written.
2810//
2811
2812assign idata_in_data_access =
2813 wr_itlb_data_in | wr_itlb_data_access | wr_immu_demap;
2814assign ddata_in_data_access =
2815 wr_dtlb_data_in | wr_dtlb_data_access | wr_dmmu_demap;
2816
2817assign rd_itte_in[7:0] =
2818 (rd_tid_dec[7:0] & {8 {idata_in_data_access}}) |
2819 (htc_wr_itlb_data_in[7:0]) |
2820 (rd_itte [7:0] & ~tlu_release_tte[7:0]);
2821
2822assign rd_dtte_in[7:0] =
2823 (rd_tid_dec[7:0] & {8 {ddata_in_data_access}}) |
2824 (prd_dtte [7:0] & clear_data_in_write_[7:0] & ~wrote_dtlb_in[7:0]);
2825
2826assign sel_rd_dtte_hwtw_in =
2827 ~(| rd_dtte_in[7:0]);
2828
2829assign rd_dtte_hwtw_in[7:0] =
2830 (htc_wr_dtlb_data_in[7:0]) |
2831 (rd_dtte_hwtw[7:0] & ~wrote_dtlb_in[7:0]) ;
2832
2833mmu_asi_ctl_msff_ctl_macro__width_25 rd_tte_lat (
2834 .scan_in(rd_tte_lat_scanin),
2835 .scan_out(rd_tte_lat_scanout),
2836 .din ({rd_itte_in [7:0],
2837 rd_dtte_in [7:0],
2838 sel_rd_dtte_hwtw_in ,
2839 rd_dtte_hwtw_in [7:0]}),
2840 .dout ({prd_itte [7:0],
2841 prd_dtte [7:0],
2842 sel_rd_dtte_hwtw ,
2843 rd_dtte_hwtw [7:0]}),
2844 .l1clk(l1clk),
2845 .siclk(siclk),
2846 .soclk(soclk)
2847);
2848
2849mmu_asi_ctl_msff_ctl_macro__width_1 idata_in_data_access_2_lat (
2850 .scan_in(idata_in_data_access_2_lat_scanin),
2851 .scan_out(idata_in_data_access_2_lat_scanout),
2852 .din (idata_in_data_access ),
2853 .dout (idata_in_data_access_2 ),
2854 .l1clk(l1clk),
2855 .siclk(siclk),
2856 .soclk(soclk)
2857);
2858
2859assign rd_itte[7:0] =
2860 prd_itte[7:0] & clear_data_in_write_[7:0];
2861
2862assign rd_dtte[7:0] =
2863 ({8 {~sel_rd_dtte_hwtw}} & prd_dtte[7:0] &
2864 clear_data_in_write_[7:0]) |
2865 ({8 { sel_rd_dtte_hwtw}} & rd_dtte_hwtw[7:0] &
2866 {{4 {dtlb_window[1]}}, {4 {dtlb_window[0]}}});
2867
2868assign rd_itte_last_in[7:0] =
2869 (rd_itte[7:0] & ~tlu_release_tte[7:0]) | htc_wr_itlb_data_in[7:0];
2870
2871// data must be read same cycle as tlu_release_tte, but no time to control
2872// directly
2873// tag must be read the cycle after tlu_release_tte
2874assign rd_itte_last_last_in[7:0] =
2875 {rd_itte_last[7] & ~(| rd_itte_last[6:0]),
2876 rd_itte_last[6] & ~(| rd_itte_last[5:0]),
2877 rd_itte_last[5] & ~(| rd_itte_last[4:0]),
2878 rd_itte_last[4] & ~(| rd_itte_last[3:0]),
2879 rd_itte_last[3] & ~(| rd_itte_last[2:0]),
2880 rd_itte_last[2] & ~(| rd_itte_last[1:0]),
2881 rd_itte_last[1] & ~( rd_itte_last[0 ]),
2882 rd_itte_last[0] };
2883
2884assign rd_itte_data_in[7:0] =
2885 rd_itte_last_last[7:0] & {8 {~(| tlu_release_tte[7:0])}};
2886
2887assign rd_itte_tag_in[7:0] =
2888 rd_itte_data[7:0] & tlu_release_tte[7:0];
2889
2890mmu_asi_ctl_msff_ctl_macro__width_32 rd_itte_lat (
2891 .scan_in(rd_itte_lat_scanin),
2892 .scan_out(rd_itte_lat_scanout),
2893 .din ({rd_itte_last_in [7:0],
2894 rd_itte_last_last_in [7:0],
2895 rd_itte_data_in [7:0],
2896 rd_itte_tag_in [7:0]}),
2897 .dout ({prd_itte_last [7:0],
2898 rd_itte_last_last [7:0],
2899 rd_itte_data [7:0],
2900 rd_itte_tag [7:0]}),
2901 .l1clk(l1clk),
2902 .siclk(siclk),
2903 .soclk(soclk)
2904);
2905
2906assign rd_itte_last[7:0] =
2907 prd_itte_last[7:0] & ~tlu_release_tte[7:0];
2908
2909assign asi_rd_itte_tag[7:0] =
2910 rd_itte_tag[7:0];
2911
2912assign asi_rd_itte_data[7:0] =
2913 rd_itte_data[7:0];
2914
2915assign asi_rd_dtte[6:0] =
2916 ({7 {~sel_rd_dtte_hwtw}} & prd_dtte [6:0]) |
2917 ({7 { sel_rd_dtte_hwtw}} & rd_dtte_hwtw[6:0]) ;
2918
2919// Send ITLB reload request to TLU; only assert for one cycle
2920// Sent in cycle 2 of access
2921assign mmu_write_itlb[7:0] =
2922 (wr_tid_dec[7:0] &
2923 {8 {idata_in_data_access_2 & legal_data_in_page_size}}) |
2924 htc_wr_itlb_data_in[7:0];
2925
2926// Detect hole sufficient for DTLB reload
2927// If three cycles occur without a control packet, then DTLB write can use the
2928// last two cycles; the last two cycles are the DTLB window
2929// The tag and data will be loaded into the stage 2 and 3 flops.
2930// Bus is idle on a given cycle if ctl and valid are not both 1
2931assign dtlb_window[1:0] =
2932 {2 {~(ctl_1 & data_1[63]) & ~(ctl_2 & data_2[63]) &
2933 ~(ctl_3 & data_3[63]) & ~dtlb_window_used_last}};
2934// 0in req_ack -req wr_dtlb_data_in -ack (| {use_dtlb_window[01:00], (wr_itlb_data_in_2 | wr_itlb_data_access_2 | wr_dtlb_data_in_2 | wr_dtlb_data_access_2) & ~legal_data_in_page_size}) -single_ack off -message "Multiple DTLB updates outstanding for ASI bus from MMU to LSU"
2935
2936assign use_dtlb_window[1:0] =
2937 dtlb_window[1:0] &
2938 {(| rd_dtte[7:4]) & ~(| rd_dtte[3:0]),
2939 (| rd_dtte[3:0])} & {2 {~mbist_run}};
2940
2941assign dtlb_window_used =
2942 | use_dtlb_window[1:0];
2943
2944mmu_asi_ctl_msff_ctl_macro__width_1 dtlb_window_used_last_lat (
2945 .scan_in(dtlb_window_used_last_lat_scanin),
2946 .scan_out(dtlb_window_used_last_lat_scanout),
2947 .din (dtlb_window_used ),
2948 .dout (dtlb_window_used_last ),
2949 .l1clk(l1clk),
2950 .siclk(siclk),
2951 .soclk(soclk)
2952);
2953
2954
2955assign wrote_dtlb_in[7] =
2956 use_dtlb_window[1] & rd_dtte[7] & ~(| rd_dtte[6:4]);
2957assign wrote_dtlb_in[6] =
2958 use_dtlb_window[1] & rd_dtte[6] & ~(| rd_dtte[5:4]);
2959assign wrote_dtlb_in[5] =
2960 use_dtlb_window[1] & rd_dtte[5] & ~ rd_dtte[4 ] ;
2961assign wrote_dtlb_in[4] =
2962 use_dtlb_window[1] & rd_dtte[4] ;
2963
2964assign wrote_dtlb_in[3] =
2965 use_dtlb_window[0] & rd_dtte[3] & ~(| rd_dtte[2:0]);
2966assign wrote_dtlb_in[2] =
2967 use_dtlb_window[0] & rd_dtte[2] & ~(| rd_dtte[1:0]);
2968assign wrote_dtlb_in[1] =
2969 use_dtlb_window[0] & rd_dtte[1] & ~ rd_dtte[0 ] ;
2970assign wrote_dtlb_in[0] =
2971 use_dtlb_window[0] & rd_dtte[0] ;
2972
2973// 0in assert_follower -leader ($0in_rising_edge(prd_dtte[07:00]&clear_data_in_write_[07:00])) -follower ($0in_rising_edge(wrote_dtlb_in[07:00])) -min 2 -max 2 -message "DTLB updates are being reordered!"
2974
2975mmu_asi_ctl_msff_ctl_macro__width_4 wrote_dtlb_tg1_lat (
2976 .scan_in(wrote_dtlb_tg1_lat_scanin),
2977 .scan_out(wrote_dtlb_tg1_lat_scanout),
2978 .din (wrote_dtlb_in [7:4] ),
2979 .dout (wrote_dtlb [7:4] ),
2980 .l1clk(l1clk),
2981 .siclk(siclk),
2982 .soclk(soclk)
2983);
2984
2985mmu_asi_ctl_msff_ctl_macro__width_4 wrote_dtlb_tg0_lat (
2986 .scan_in(wrote_dtlb_tg0_lat_scanin),
2987 .scan_out(wrote_dtlb_tg0_lat_scanout),
2988 .din (wrote_dtlb_in [3:0] ),
2989 .dout (wrote_dtlb [3:0] ),
2990 .l1clk(l1clk),
2991 .siclk(siclk),
2992 .soclk(soclk)
2993);
2994
2995assign reload_done_in[7:0] =
2996 htc_wr_itlb_data_in[7:0] |
2997 (rd_dtte_hwtw[7:0] & wrote_dtlb_in[7:0]) ;
2998
2999mmu_asi_ctl_msff_ctl_macro__width_4 reload_done_tg1_lat (
3000 .scan_in(reload_done_tg1_lat_scanin),
3001 .scan_out(reload_done_tg1_lat_scanout),
3002 .din (reload_done_in [7:4] ),
3003 .dout (reload_done [7:4] ),
3004 .l1clk(l1clk),
3005 .siclk(siclk),
3006 .soclk(soclk)
3007);
3008
3009mmu_asi_ctl_msff_ctl_macro__width_4 reload_done_tg0_lat (
3010 .scan_in(reload_done_tg0_lat_scanin),
3011 .scan_out(reload_done_tg0_lat_scanout),
3012 .din (reload_done_in [3:0] ),
3013 .dout (reload_done [3:0] ),
3014 .l1clk(l1clk),
3015 .siclk(siclk),
3016 .soclk(soclk)
3017);
3018
3019assign mmu_reload_done[7:0] =
3020 reload_done[7:0];
3021
3022
3023// Block dispatch for DTLB reload
3024//
3025// Cycle 0 1 2 3 4 5 6
3026//--------------------------------------------------------------------
3027// dtlb_window X
3028// mmu_asi_data X
3029// tlu_rngf_cdbus X X
3030// DTLB demap X
3031// DTLB write X
3032// hole_in_m X X
3033// hole_in_e X X
3034// hole_in_d X X
3035// mmu_dtlb_reload_stall X X
3036// mmu_dtlb_reload X
3037
3038assign dtlb_reload_stall_in =
3039 (| {wrote_dtlb[7:0], dtlb_reload});
3040
3041mmu_asi_ctl_msff_ctl_macro__width_1 dtlb_reload_stall_lat (
3042 .scan_in(dtlb_reload_stall_lat_scanin),
3043 .scan_out(dtlb_reload_stall_lat_scanout),
3044 .din (dtlb_reload_stall_in ),
3045 .dout (dtlb_reload_stall ),
3046 .l1clk(l1clk),
3047 .siclk(siclk),
3048 .soclk(soclk)
3049);
3050
3051assign mmu_dtlb_reload_stall =
3052 dtlb_reload_stall;
3053
3054assign dtlb_reload_in =
3055 (| wrote_dtlb[7:0]);
3056
3057mmu_asi_ctl_msff_ctl_macro__width_1 dtlb_reload_lat (
3058 .scan_in(dtlb_reload_lat_scanin),
3059 .scan_out(dtlb_reload_lat_scanout),
3060 .din (dtlb_reload_in ),
3061 .dout (dtlb_reload ),
3062 .l1clk(l1clk),
3063 .siclk(siclk),
3064 .soclk(soclk)
3065);
3066
3067assign mmu_dtlb_reload =
3068 dtlb_reload;
3069
3070
3071
3072//////////////////////////////////////////////////////////////////////
3073//
3074// Maintain hardware tablewalk enables
3075//
3076
3077// Pipe write signals to stage 4 to match write of MRA
3078
3079assign wr_tsb_cfg_enc[3:0] =
3080 {wr_z_tsb_cfg_0 | wr_z_tsb_cfg_1 | wr_z_tsb_cfg_2 | wr_z_tsb_cfg_3 |
3081 wr_nz_tsb_cfg_0 | wr_nz_tsb_cfg_1 | wr_nz_tsb_cfg_2 | wr_nz_tsb_cfg_3 ,
3082 wr_nz_tsb_cfg_0 | wr_nz_tsb_cfg_1 | wr_nz_tsb_cfg_2 | wr_nz_tsb_cfg_3 ,
3083 wr_z_tsb_cfg_2 | wr_z_tsb_cfg_3 | wr_nz_tsb_cfg_2 | wr_nz_tsb_cfg_3 ,
3084 wr_z_tsb_cfg_1 | wr_z_tsb_cfg_3 | wr_nz_tsb_cfg_1 | wr_nz_tsb_cfg_3
3085 };
3086
3087mmu_asi_ctl_msff_ctl_macro__width_12 wr_tsb_cfg_lat (
3088 .scan_in(wr_tsb_cfg_lat_scanin),
3089 .scan_out(wr_tsb_cfg_lat_scanout),
3090 .l1clk (l1clk_pm1 ),
3091 .din ({wr_tsb_cfg_enc [3:0],
3092 wr_tsb_cfg_enc_2 [3:0],
3093 wr_tsb_cfg_enc_3 [3:0]}),
3094 .dout ({wr_tsb_cfg_enc_2 [3:0],
3095 wr_tsb_cfg_enc_3 [3:0],
3096 wr_tsb_cfg_enc_4 [3:0]}),
3097 .siclk(siclk),
3098 .soclk(soclk)
3099);
3100
3101assign wr_z_tsb_cfg_3_4 =
3102 wr_tsb_cfg_enc_4[3] & ~wr_tsb_cfg_enc_4[2] &
3103 wr_tsb_cfg_enc_4[1] & wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3104
3105assign wr_z_tsb_cfg_2_4 =
3106 wr_tsb_cfg_enc_4[3] & ~wr_tsb_cfg_enc_4[2] &
3107 wr_tsb_cfg_enc_4[1] & ~wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3108
3109assign wr_z_tsb_cfg_1_4 =
3110 wr_tsb_cfg_enc_4[3] & ~wr_tsb_cfg_enc_4[2] &
3111 ~wr_tsb_cfg_enc_4[1] & wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3112
3113assign wr_z_tsb_cfg_0_4 =
3114 wr_tsb_cfg_enc_4[3] & ~wr_tsb_cfg_enc_4[2] &
3115 ~wr_tsb_cfg_enc_4[1] & ~wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3116
3117assign wr_nz_tsb_cfg_3_4 =
3118 wr_tsb_cfg_enc_4[3] & wr_tsb_cfg_enc_4[2] &
3119 wr_tsb_cfg_enc_4[1] & wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3120
3121assign wr_nz_tsb_cfg_2_4 =
3122 wr_tsb_cfg_enc_4[3] & wr_tsb_cfg_enc_4[2] &
3123 wr_tsb_cfg_enc_4[1] & ~wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3124
3125assign wr_nz_tsb_cfg_1_4 =
3126 wr_tsb_cfg_enc_4[3] & wr_tsb_cfg_enc_4[2] &
3127 ~wr_tsb_cfg_enc_4[1] & wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3128
3129assign wr_nz_tsb_cfg_0_4 =
3130 wr_tsb_cfg_enc_4[3] & wr_tsb_cfg_enc_4[2] &
3131 ~wr_tsb_cfg_enc_4[1] & ~wr_tsb_cfg_enc_4[0] & (| mra_wr_en_out[1:0]);
3132
3133assign tid_dec_4[7:0] =
3134 { tid_4[2] & tid_4[1] & tid_4[0],
3135 tid_4[2] & tid_4[1] & ~tid_4[0],
3136 tid_4[2] & ~tid_4[1] & tid_4[0],
3137 tid_4[2] & ~tid_4[1] & ~tid_4[0],
3138 ~tid_4[2] & tid_4[1] & tid_4[0],
3139 ~tid_4[2] & tid_4[1] & ~tid_4[0],
3140 ~tid_4[2] & ~tid_4[1] & tid_4[0],
3141 ~tid_4[2] & ~tid_4[1] & ~tid_4[0]};
3142
3143assign t7_e_z_in [3] =
3144 (t7_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[7])) |
3145 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[7])) ;
3146assign t7_e_z_in [2] =
3147 (t7_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[7])) |
3148 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[7])) ;
3149assign t7_e_z_in [1] =
3150 (t7_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[7])) |
3151 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[7])) ;
3152assign t7_e_z_in [0] =
3153 (t7_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[7])) |
3154 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[7])) ;
3155assign t7_e_nz_in[3] =
3156 (t7_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[7])) |
3157 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[7])) ;
3158assign t7_e_nz_in[2] =
3159 (t7_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[7])) |
3160 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[7])) ;
3161assign t7_e_nz_in[1] =
3162 (t7_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[7])) |
3163 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[7])) ;
3164assign t7_e_nz_in[0] =
3165 (t7_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[7])) |
3166 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[7])) ;
3167
3168assign t6_e_z_in [3] =
3169 (t6_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[6])) |
3170 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[6])) ;
3171assign t6_e_z_in [2] =
3172 (t6_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[6])) |
3173 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[6])) ;
3174assign t6_e_z_in [1] =
3175 (t6_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[6])) |
3176 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[6])) ;
3177assign t6_e_z_in [0] =
3178 (t6_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[6])) |
3179 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[6])) ;
3180assign t6_e_nz_in[3] =
3181 (t6_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[6])) |
3182 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[6])) ;
3183assign t6_e_nz_in[2] =
3184 (t6_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[6])) |
3185 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[6])) ;
3186assign t6_e_nz_in[1] =
3187 (t6_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[6])) |
3188 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[6])) ;
3189assign t6_e_nz_in[0] =
3190 (t6_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[6])) |
3191 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[6])) ;
3192
3193assign t5_e_z_in [3] =
3194 (t5_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[5])) |
3195 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[5])) ;
3196assign t5_e_z_in [2] =
3197 (t5_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[5])) |
3198 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[5])) ;
3199assign t5_e_z_in [1] =
3200 (t5_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[5])) |
3201 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[5])) ;
3202assign t5_e_z_in [0] =
3203 (t5_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[5])) |
3204 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[5])) ;
3205assign t5_e_nz_in[3] =
3206 (t5_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[5])) |
3207 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[5])) ;
3208assign t5_e_nz_in[2] =
3209 (t5_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[5])) |
3210 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[5])) ;
3211assign t5_e_nz_in[1] =
3212 (t5_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[5])) |
3213 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[5])) ;
3214assign t5_e_nz_in[0] =
3215 (t5_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[5])) |
3216 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[5])) ;
3217
3218assign t4_e_z_in [3] =
3219 (t4_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[4])) |
3220 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[4])) ;
3221assign t4_e_z_in [2] =
3222 (t4_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[4])) |
3223 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[4])) ;
3224assign t4_e_z_in [1] =
3225 (t4_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[4])) |
3226 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[4])) ;
3227assign t4_e_z_in [0] =
3228 (t4_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[4])) |
3229 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[4])) ;
3230assign t4_e_nz_in[3] =
3231 (t4_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[4])) |
3232 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[4])) ;
3233assign t4_e_nz_in[2] =
3234 (t4_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[4])) |
3235 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[4])) ;
3236assign t4_e_nz_in[1] =
3237 (t4_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[4])) |
3238 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[4])) ;
3239assign t4_e_nz_in[0] =
3240 (t4_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[4])) |
3241 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[4])) ;
3242
3243assign t3_e_z_in [3] =
3244 (t3_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[3])) |
3245 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[3])) ;
3246assign t3_e_z_in [2] =
3247 (t3_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[3])) |
3248 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[3])) ;
3249assign t3_e_z_in [1] =
3250 (t3_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[3])) |
3251 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[3])) ;
3252assign t3_e_z_in [0] =
3253 (t3_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[3])) |
3254 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[3])) ;
3255assign t3_e_nz_in[3] =
3256 (t3_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[3])) |
3257 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[3])) ;
3258assign t3_e_nz_in[2] =
3259 (t3_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[3])) |
3260 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[3])) ;
3261assign t3_e_nz_in[1] =
3262 (t3_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[3])) |
3263 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[3])) ;
3264assign t3_e_nz_in[0] =
3265 (t3_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[3])) |
3266 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[3])) ;
3267
3268assign t2_e_z_in [3] =
3269 (t2_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[2])) |
3270 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[2])) ;
3271assign t2_e_z_in [2] =
3272 (t2_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[2])) |
3273 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[2])) ;
3274assign t2_e_z_in [1] =
3275 (t2_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[2])) |
3276 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[2])) ;
3277assign t2_e_z_in [0] =
3278 (t2_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[2])) |
3279 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[2])) ;
3280assign t2_e_nz_in[3] =
3281 (t2_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[2])) |
3282 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[2])) ;
3283assign t2_e_nz_in[2] =
3284 (t2_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[2])) |
3285 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[2])) ;
3286assign t2_e_nz_in[1] =
3287 (t2_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[2])) |
3288 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[2])) ;
3289assign t2_e_nz_in[0] =
3290 (t2_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[2])) |
3291 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[2])) ;
3292
3293assign t1_e_z_in [3] =
3294 (t1_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[1])) |
3295 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[1])) ;
3296assign t1_e_z_in [2] =
3297 (t1_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[1])) |
3298 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[1])) ;
3299assign t1_e_z_in [1] =
3300 (t1_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[1])) |
3301 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[1])) ;
3302assign t1_e_z_in [0] =
3303 (t1_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[1])) |
3304 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[1])) ;
3305assign t1_e_nz_in[3] =
3306 (t1_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[1])) |
3307 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[1])) ;
3308assign t1_e_nz_in[2] =
3309 (t1_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[1])) |
3310 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[1])) ;
3311assign t1_e_nz_in[1] =
3312 (t1_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[1])) |
3313 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[1])) ;
3314assign t1_e_nz_in[0] =
3315 (t1_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[1])) |
3316 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[1])) ;
3317
3318assign t0_e_z_in [3] =
3319 (t0_e_z [3] & ~(wr_z_tsb_cfg_3_4 & tid_dec_4[0])) |
3320 (data_3 [63] & (wr_z_tsb_cfg_3_4 & tid_dec_4[0])) ;
3321assign t0_e_z_in [2] =
3322 (t0_e_z [2] & ~(wr_z_tsb_cfg_2_4 & tid_dec_4[0])) |
3323 (data_3 [63] & (wr_z_tsb_cfg_2_4 & tid_dec_4[0])) ;
3324assign t0_e_z_in [1] =
3325 (t0_e_z [1] & ~(wr_z_tsb_cfg_1_4 & tid_dec_4[0])) |
3326 (data_3 [63] & (wr_z_tsb_cfg_1_4 & tid_dec_4[0])) ;
3327assign t0_e_z_in [0] =
3328 (t0_e_z [0] & ~(wr_z_tsb_cfg_0_4 & tid_dec_4[0])) |
3329 (data_3 [63] & (wr_z_tsb_cfg_0_4 & tid_dec_4[0])) ;
3330assign t0_e_nz_in[3] =
3331 (t0_e_nz [3] & ~(wr_nz_tsb_cfg_3_4 & tid_dec_4[0])) |
3332 (data_3 [63] & (wr_nz_tsb_cfg_3_4 & tid_dec_4[0])) ;
3333assign t0_e_nz_in[2] =
3334 (t0_e_nz [2] & ~(wr_nz_tsb_cfg_2_4 & tid_dec_4[0])) |
3335 (data_3 [63] & (wr_nz_tsb_cfg_2_4 & tid_dec_4[0])) ;
3336assign t0_e_nz_in[1] =
3337 (t0_e_nz [1] & ~(wr_nz_tsb_cfg_1_4 & tid_dec_4[0])) |
3338 (data_3 [63] & (wr_nz_tsb_cfg_1_4 & tid_dec_4[0])) ;
3339assign t0_e_nz_in[0] =
3340 (t0_e_nz [0] & ~(wr_nz_tsb_cfg_0_4 & tid_dec_4[0])) |
3341 (data_3 [63] & (wr_nz_tsb_cfg_0_4 & tid_dec_4[0])) ;
3342
3343mmu_asi_ctl_msff_ctl_macro__width_64 hw_tw_e_lat ( // FS:wmr_protect
3344 .scan_in(hw_tw_e_lat_wmr_scanin),
3345 .scan_out(hw_tw_e_lat_wmr_scanout),
3346 .siclk(spc_aclk_wmr),
3347 .din ({t7_e_z_in [3:0],
3348 t7_e_nz_in [3:0],
3349 t6_e_z_in [3:0],
3350 t6_e_nz_in [3:0],
3351 t5_e_z_in [3:0],
3352 t5_e_nz_in [3:0],
3353 t4_e_z_in [3:0],
3354 t4_e_nz_in [3:0],
3355 t3_e_z_in [3:0],
3356 t3_e_nz_in [3:0],
3357 t2_e_z_in [3:0],
3358 t2_e_nz_in [3:0],
3359 t1_e_z_in [3:0],
3360 t1_e_nz_in [3:0],
3361 t0_e_z_in [3:0],
3362 t0_e_nz_in [3:0]}),
3363 .dout ({t7_e_z [3:0],
3364 t7_e_nz [3:0],
3365 t6_e_z [3:0],
3366 t6_e_nz [3:0],
3367 t5_e_z [3:0],
3368 t5_e_nz [3:0],
3369 t4_e_z [3:0],
3370 t4_e_nz [3:0],
3371 t3_e_z [3:0],
3372 t3_e_nz [3:0],
3373 t2_e_z [3:0],
3374 t2_e_nz [3:0],
3375 t1_e_z [3:0],
3376 t1_e_nz [3:0],
3377 t0_e_z [3:0],
3378 t0_e_nz [3:0]}),
3379 .l1clk(l1clk),
3380 .soclk(soclk)
3381);
3382
3383assign mmu_hw_tw_enable[7] =
3384 (| {t7_e_z[3:0], t7_e_nz[3:0]});
3385assign mmu_hw_tw_enable[6] =
3386 (| {t6_e_z[3:0], t6_e_nz[3:0]});
3387assign mmu_hw_tw_enable[5] =
3388 (| {t5_e_z[3:0], t5_e_nz[3:0]});
3389assign mmu_hw_tw_enable[4] =
3390 (| {t4_e_z[3:0], t4_e_nz[3:0]});
3391assign mmu_hw_tw_enable[3] =
3392 (| {t3_e_z[3:0], t3_e_nz[3:0]});
3393assign mmu_hw_tw_enable[2] =
3394 (| {t2_e_z[3:0], t2_e_nz[3:0]});
3395assign mmu_hw_tw_enable[1] =
3396 (| {t1_e_z[3:0], t1_e_nz[3:0]});
3397assign mmu_hw_tw_enable[0] =
3398 (| {t0_e_z[3:0], t0_e_nz[3:0]});
3399
3400// Mux the enables for ASI read
3401assign hwtw_enables[7:0] =
3402 ({t7_e_z[3:0], t7_e_nz[3:0]} & {8 {rd_tid_dec[7]}}) |
3403 ({t6_e_z[3:0], t6_e_nz[3:0]} & {8 {rd_tid_dec[6]}}) |
3404 ({t5_e_z[3:0], t5_e_nz[3:0]} & {8 {rd_tid_dec[5]}}) |
3405 ({t4_e_z[3:0], t4_e_nz[3:0]} & {8 {rd_tid_dec[4]}}) |
3406 ({t3_e_z[3:0], t3_e_nz[3:0]} & {8 {rd_tid_dec[3]}}) |
3407 ({t2_e_z[3:0], t2_e_nz[3:0]} & {8 {rd_tid_dec[2]}}) |
3408 ({t1_e_z[3:0], t1_e_nz[3:0]} & {8 {rd_tid_dec[1]}}) |
3409 ({t0_e_z[3:0], t0_e_nz[3:0]} & {8 {rd_tid_dec[0]}}) ;
3410
3411assign tsb_hwtw_en_1 =
3412 (hwtw_enables[7] & z_tsb_cfg_3) |
3413 (hwtw_enables[6] & z_tsb_cfg_2) |
3414 (hwtw_enables[5] & z_tsb_cfg_1) |
3415 (hwtw_enables[4] & z_tsb_cfg_0) |
3416 (hwtw_enables[3] & nz_tsb_cfg_3) |
3417 (hwtw_enables[2] & nz_tsb_cfg_2) |
3418 (hwtw_enables[1] & nz_tsb_cfg_1) |
3419 (hwtw_enables[0] & nz_tsb_cfg_0) ;
3420
3421mmu_asi_ctl_msff_ctl_macro__width_2 tsb_hwtw_en_lat (
3422 .scan_in(tsb_hwtw_en_lat_scanin),
3423 .scan_out(tsb_hwtw_en_lat_scanout),
3424 .l1clk (l1clk_pm1 ),
3425 .din ({tsb_hwtw_en_1 ,
3426 tsb_hwtw_en_2 }),
3427 .dout ({tsb_hwtw_en_2 ,
3428 tsb_hwtw_en_3 }),
3429 .siclk(siclk),
3430 .soclk(soclk)
3431);
3432
3433// Mux the enables for HW TW read
3434mmu_asi_ctl_msff_ctl_macro__width_4 htc_mra_addr_lat (
3435 .scan_in(htc_mra_addr_lat_scanin),
3436 .scan_out(htc_mra_addr_lat_scanout),
3437 .din ({htc_mra_addr_in [4:3],
3438 htc_mra_addr_in [1:0]}),
3439 .dout ({htc_mra_addr [4:3],
3440 htc_mra_addr [1:0]}),
3441 .l1clk(l1clk),
3442 .siclk(siclk),
3443 .soclk(soclk)
3444);
3445
3446assign htc_tid_dec[3:0] =
3447 { htc_mra_addr[4] & htc_mra_addr[3],
3448 htc_mra_addr[4] & ~htc_mra_addr[3],
3449 ~htc_mra_addr[4] & htc_mra_addr[3],
3450 ~htc_mra_addr[4] & ~htc_mra_addr[3]};
3451
3452assign htc_enables_1_2[7:0] =
3453 ({t7_e_z[3:0], t7_e_nz[3:0]} & {8 {htc_tid_dec[3]}}) |
3454 ({t6_e_z[3:0], t6_e_nz[3:0]} & {8 {htc_tid_dec[2]}}) |
3455 ({t5_e_z[3:0], t5_e_nz[3:0]} & {8 {htc_tid_dec[1]}}) |
3456 ({t4_e_z[3:0], t4_e_nz[3:0]} & {8 {htc_tid_dec[0]}}) ;
3457
3458assign htc_enables_0_2[7:0] =
3459 ({t3_e_z[3:0], t3_e_nz[3:0]} & {8 {htc_tid_dec[3]}}) |
3460 ({t2_e_z[3:0], t2_e_nz[3:0]} & {8 {htc_tid_dec[2]}}) |
3461 ({t1_e_z[3:0], t1_e_nz[3:0]} & {8 {htc_tid_dec[1]}}) |
3462 ({t0_e_z[3:0], t0_e_nz[3:0]} & {8 {htc_tid_dec[0]}}) ;
3463
3464assign htc_sel_tsb_cfg[3:0] =
3465 {~htc_mra_addr[1] & htc_mra_addr[0],
3466 ~htc_mra_addr[1] & ~htc_mra_addr[0],
3467 htc_mra_addr[1] & htc_mra_addr[0],
3468 htc_mra_addr[1] & ~htc_mra_addr[0]};
3469
3470assign htc_hwtw_en_1_2[1:0] =
3471 (htc_enables_1_2[7:6] & {2 {htc_sel_tsb_cfg[3]}}) |
3472 (htc_enables_1_2[5:4] & {2 {htc_sel_tsb_cfg[2]}}) |
3473 (htc_enables_1_2[3:2] & {2 {htc_sel_tsb_cfg[1]}}) |
3474 (htc_enables_1_2[1:0] & {2 {htc_sel_tsb_cfg[0]}}) ;
3475
3476assign htc_hwtw_en_0_2[1:0] =
3477 (htc_enables_0_2[7:6] & {2 {htc_sel_tsb_cfg[3]}}) |
3478 (htc_enables_0_2[5:4] & {2 {htc_sel_tsb_cfg[2]}}) |
3479 (htc_enables_0_2[3:2] & {2 {htc_sel_tsb_cfg[1]}}) |
3480 (htc_enables_0_2[1:0] & {2 {htc_sel_tsb_cfg[0]}}) ;
3481
3482assign asi_tsb_hwtw_enable_1[1:0] =
3483 htc_hwtw_en_1_2[1:0];
3484
3485assign asi_tsb_hwtw_enable_0[1:0] =
3486 htc_hwtw_en_0_2[1:0];
3487
3488
3489
3490//////////////////////////////////////////////////////////////////////////////
3491//
3492// Flop data_access index & valid and send to IFU
3493//
3494
3495assign index_in[6:0] =
3496 asd0_itte_index[6:0] | asd1_itte_index[6:0];
3497
3498mmu_asi_ctl_msff_ctl_macro__width_7 data_access_index_lat (
3499 .scan_in(data_access_index_lat_scanin),
3500 .scan_out(data_access_index_lat_scanout),
3501 .din (index_in [6:0] ),
3502 .dout (mmu_index [6:0] ),
3503 .l1clk(l1clk),
3504 .siclk(siclk),
3505 .soclk(soclk)
3506);
3507
3508
3509
3510//////////////////////////////////////////////////////////////////////////////
3511//
3512//
3513//
3514
3515mmu_asi_ctl_msff_ctl_macro__width_11 error_inject_lat (
3516 .scan_in(error_inject_lat_scanin),
3517 .scan_out(error_inject_lat_scanout),
3518 .din ({error_inject_enable,
3519 error_inject_scau,
3520 error_inject_mrau,
3521 error_inject_mask [7:0]}),
3522 .dout ({error_enable,
3523 error_scau,
3524 error_mrau,
3525 error_mask [7:0]}),
3526 .l1clk(l1clk),
3527 .siclk(siclk),
3528 .soclk(soclk)
3529);
3530
3531assign asi_error_scau =
3532 error_enable & error_scau;
3533assign asi_error_mrau =
3534 error_enable & error_mrau;
3535assign asi_error_mask[7:0] =
3536 error_mask[7:0];
3537
3538
3539
3540//////////////////////////////////////////////////////////////////////////////
3541//
3542// Tag access power management
3543//
3544
3545mmu_asi_ctl_msff_ctl_macro__width_2 tag_access_tid_0_lat (
3546 .scan_in(tag_access_tid_0_lat_scanin),
3547 .scan_out(tag_access_tid_0_lat_scanout),
3548 .din (tlu_tag_access_tid_0_b [1:0] ),
3549 .dout (tag_access_tid_0 [1:0] ),
3550 .l1clk(l1clk),
3551 .siclk(siclk),
3552 .soclk(soclk)
3553);
3554
3555mmu_asi_ctl_msff_ctl_macro__width_1 i_tag_access_0_lat (
3556 .scan_in(i_tag_access_0_lat_scanin),
3557 .scan_out(i_tag_access_0_lat_scanout),
3558 .din (tlu_i_tag_access_0_b ),
3559 .dout (i_tag_access_0 ),
3560 .l1clk(l1clk),
3561 .siclk(siclk),
3562 .soclk(soclk)
3563);
3564
3565mmu_asi_ctl_msff_ctl_macro__width_1 d_tag_access_0_lat (
3566 .scan_in(d_tag_access_0_lat_scanin),
3567 .scan_out(d_tag_access_0_lat_scanout),
3568 .din (tlu_d_tag_access_0_b ),
3569 .dout (d_tag_access_0 ),
3570 .l1clk(l1clk),
3571 .siclk(siclk),
3572 .soclk(soclk)
3573);
3574
3575mmu_asi_ctl_msff_ctl_macro__width_2 tag_access_tid_1_lat (
3576 .scan_in(tag_access_tid_1_lat_scanin),
3577 .scan_out(tag_access_tid_1_lat_scanout),
3578 .din (tlu_tag_access_tid_1_b [1:0] ),
3579 .dout (tag_access_tid_1 [1:0] ),
3580 .l1clk(l1clk),
3581 .siclk(siclk),
3582 .soclk(soclk)
3583);
3584
3585mmu_asi_ctl_msff_ctl_macro__width_1 i_tag_access_1_lat (
3586 .scan_in(i_tag_access_1_lat_scanin),
3587 .scan_out(i_tag_access_1_lat_scanout),
3588 .din (tlu_i_tag_access_1_b ),
3589 .dout (i_tag_access_1 ),
3590 .l1clk(l1clk),
3591 .siclk(siclk),
3592 .soclk(soclk)
3593);
3594
3595mmu_asi_ctl_msff_ctl_macro__width_1 d_tag_access_1_lat (
3596 .scan_in(d_tag_access_1_lat_scanin),
3597 .scan_out(d_tag_access_1_lat_scanout),
3598 .din (tlu_d_tag_access_1_b ),
3599 .dout (d_tag_access_1 ),
3600 .l1clk(l1clk),
3601 .siclk(siclk),
3602 .soclk(soclk)
3603);
3604
3605assign i_tag_access_exc[7:0] =
3606 {(tag_access_tid_1[1:0] == 2'b11) & i_tag_access_1,
3607 (tag_access_tid_1[1:0] == 2'b10) & i_tag_access_1,
3608 (tag_access_tid_1[1:0] == 2'b01) & i_tag_access_1,
3609 (tag_access_tid_1[1:0] == 2'b00) & i_tag_access_1,
3610 (tag_access_tid_0[1:0] == 2'b11) & i_tag_access_0,
3611 (tag_access_tid_0[1:0] == 2'b10) & i_tag_access_0,
3612 (tag_access_tid_0[1:0] == 2'b01) & i_tag_access_0,
3613 (tag_access_tid_0[1:0] == 2'b00) & i_tag_access_0};
3614
3615assign d_tag_access_exc[7:0] =
3616 {(tag_access_tid_1[1:0] == 2'b11) & d_tag_access_1,
3617 (tag_access_tid_1[1:0] == 2'b10) & d_tag_access_1,
3618 (tag_access_tid_1[1:0] == 2'b01) & d_tag_access_1,
3619 (tag_access_tid_1[1:0] == 2'b00) & d_tag_access_1,
3620 (tag_access_tid_0[1:0] == 2'b11) & d_tag_access_0,
3621 (tag_access_tid_0[1:0] == 2'b10) & d_tag_access_0,
3622 (tag_access_tid_0[1:0] == 2'b01) & d_tag_access_0,
3623 (tag_access_tid_0[1:0] == 2'b00) & d_tag_access_0};
3624
3625assign asi_i_tag_access_en[7:0] =
3626 i_tag_access_exc[7:0] |
3627 a_wr_immu_tag_access[7:0] |
3628 a_wr_immu_demap[7:0] |
3629 htc_itlb_clken[7:0];
3630
3631assign asi_d_tag_access_en[7:0] =
3632 d_tag_access_exc[7:0] |
3633 a_wr_dmmu_tag_access[7:0] |
3634 a_wr_dmmu_demap[7:0] |
3635 htc_dtlb_clken[7:0];
3636
3637
3638
3639//////////////////////////////////////////////////////////////////////////////
3640//
3641// Data in power management
3642//
3643
3644assign asi_i_data_in_en[7:0] =
3645 a_wr_itlb_data_in[7:0] |
3646 a_wr_itlb_data_access[7:0] |
3647 a_wr_immu_demap[7:0] |
3648 htc_itlb_clken[7:0];
3649
3650assign asi_d_data_in_en[7:0] =
3651 a_wr_dtlb_data_in[7:0] |
3652 a_wr_dtlb_data_access[7:0] |
3653 a_wr_dmmu_demap[7:0] |
3654 htc_dtlb_clken[7:0];
3655
3656
3657
3658//////////////////////////////////////////////////////////////////////////////
3659//
3660// Tablewalk in progress registers
3661//
3662
3663assign write_stp[7:0] =
3664 {8 {wr_t_p_c_2}} & wr_tid_dec[7:0];
3665
3666assign stp_in[7:0] =
3667 ( write_stp[7:0] & {8 {data_1[0]}}) |
3668 (~write_stp[7:0] & stp[7:0] ) ;
3669
3670mmu_asi_ctl_msff_ctl_macro__width_8 stp_lat (
3671 .scan_in(stp_lat_scanin),
3672 .scan_out(stp_lat_scanout),
3673 .l1clk (l1clk_pm1 ),
3674 .din (stp_in [7:0] ),
3675 .dout (stp [7:0] ),
3676 .siclk(siclk),
3677 .soclk(soclk)
3678);
3679
3680assign set_htp[7:0] =
3681 tlu_iht_request[7:0] | tlu_dht_request[7:0];
3682
3683// Can clear htp when hardware tablewalk fails
3684// but on successful hardware tablewalk, must wait until the write to the
3685// TLB is in progress and no longer pending
3686assign clr_htp[7:0] =
3687 tlu_release_tte[7:0] |
3688 (rd_dtte_hwtw[7:0] & wrote_dtlb_in[7:0]) |
3689 mmu_i_unauth_access[7:0] |
3690 mmu_i_tsb_miss[7:0] | mmu_d_tsb_miss[7:0] |
3691 mmu_i_tte_outofrange[7:0] | mmu_d_tte_outofrange[7:0] |
3692 mmu_i_eccerr[7:0] | mmu_d_eccerr[7:0];
3693
3694assign htp_in[7:0] =
3695 set_htp[7:0] | (htp[7:0] & ~clr_htp[7:0]);
3696
3697mmu_asi_ctl_msff_ctl_macro__width_8 htp_lat (
3698 .scan_in(htp_lat_scanin),
3699 .scan_out(htp_lat_scanout),
3700 .l1clk (l1clk_pm1 ),
3701 .din (htp_in [7:0] ),
3702 .dout (htp [7:0] ),
3703 .siclk(siclk),
3704 .soclk(soclk)
3705);
3706
3707assign rd_t_p_c_data[63:0] =
3708 {{63 {1'b0}}, | (stp[7:0] & wr_tid_dec[7:0])};
3709
3710assign rd_t_p_s_data[63:0] =
3711 {{24 {1'b0}}, htp[7:0], {24 {1'b0}}, stp[7:0]};
3712
3713
3714
3715//////////////////////////////////////////////////////////////////////////////
3716//
3717// Spares
3718//
3719
3720mmu_asi_ctl_spare_ctl_macro__num_12 spares (
3721 .scan_in(spares_scanin),
3722 .scan_out(spares_scanout),
3723 .l1clk (l1clk ),
3724 .siclk(siclk),
3725 .soclk(soclk)
3726);
3727
3728
3729
3730
3731
3732supply0 vss; // <- port for ground
3733supply1 vdd; // <- port for power
3734
3735// fixscan start:
3736assign stg1_en_lat_scanin = scan_in ;
3737assign stg2_en_lat_scanin = stg1_en_lat_scanout ;
3738assign stg3_en_lat_scanin = stg2_en_lat_scanout ;
3739assign stg4_en_lat_scanin = stg3_en_lat_scanout ;
3740assign mbist_run_lat_scanin = stg4_en_lat_scanout ;
3741assign mra0_wr_en_lat_scanin = mbist_run_lat_scanout ;
3742assign mra1_wr_en_lat_scanin = mra0_wr_en_lat_scanout ;
3743assign scp0_wr_en_lat_scanin = mra1_wr_en_lat_scanout ;
3744assign scp1_wr_en_lat_scanin = scp0_wr_en_lat_scanout ;
3745assign mbist_addr_lat_scanin = scp1_wr_en_lat_scanout ;
3746assign mbist_wdata_lat_scanin = mbist_addr_lat_scanout ;
3747assign mra0_rd_en_lat_scanin = mbist_wdata_lat_scanout ;
3748assign mra1_rd_en_lat_scanin = mra0_rd_en_lat_scanout ;
3749assign scp0_rd_en_lat_scanin = mra1_rd_en_lat_scanout ;
3750assign scp1_rd_en_lat_scanin = scp0_rd_en_lat_scanout ;
3751assign mbist_cmpsel_lat_scanin = scp1_rd_en_lat_scanout ;
3752assign mra0_wr_en_2_lat_scanin = mbist_cmpsel_lat_scanout ;
3753assign mra1_wr_en_2_lat_scanin = mra0_wr_en_2_lat_scanout ;
3754assign mra0_rd_en_2_lat_scanin = mra1_wr_en_2_lat_scanout ;
3755assign mra1_rd_en_2_lat_scanin = mra0_rd_en_2_lat_scanout ;
3756assign scp0_rd_en_2_lat_scanin = mra1_rd_en_2_lat_scanout ;
3757assign scp1_rd_en_2_lat_scanin = scp0_rd_en_2_lat_scanout ;
3758assign mbist_addr_2_lat_scanin = scp1_rd_en_2_lat_scanout ;
3759assign mbist_cmpsel_2_lat_scanin = mbist_addr_2_lat_scanout ;
3760assign mbist_compare_data_lat_scanin = mbist_cmpsel_2_lat_scanout;
3761assign mra0_rd_en_3_lat_scanin = mbist_compare_data_lat_scanout;
3762assign mra1_rd_en_3_lat_scanin = mra0_rd_en_3_lat_scanout ;
3763assign scp0_rd_en_3_lat_scanin = mra1_rd_en_3_lat_scanout ;
3764assign scp1_rd_en_3_lat_scanin = scp0_rd_en_3_lat_scanout ;
3765assign mra0_rd_en_4_lat_scanin = scp1_rd_en_3_lat_scanout ;
3766assign mra1_rd_en_4_lat_scanin = mra0_rd_en_4_lat_scanout ;
3767assign mra0_fail_lat_scanin = mra1_rd_en_4_lat_scanout ;
3768assign mra1_fail_lat_scanin = mra0_fail_lat_scanout ;
3769assign scp0_fail_lat_scanin = mra1_fail_lat_scanout ;
3770assign scp1_fail_lat_scanin = scp0_fail_lat_scanout ;
3771assign rng_stg1_data_scanin = scp1_fail_lat_scanout ;
3772assign ctl_1_lat_scanin = rng_stg1_data_scanout ;
3773assign scp_ctl_lat_scanin = ctl_1_lat_scanout ;
3774assign rd_scratchpad_4_lat_scanin = scp_ctl_lat_scanout ;
3775assign req_grant_lat_scanin = rd_scratchpad_4_lat_scanout;
3776assign mra_addr_lat_scanin = req_grant_lat_scanout ;
3777assign mra_rd_en_lat_scanin = mra_addr_lat_scanout ;
3778assign mra_wr_en_lat_scanin = mra_rd_en_lat_scanout ;
3779assign mra_wr_en_4_lat_scanin = mra_wr_en_lat_scanout ;
3780assign mra_sel_lat_scanin = mra_wr_en_4_lat_scanout ;
3781assign stg2_data_lat_scanin = mra_sel_lat_scanout ;
3782assign stg2_ctl_lat_scanin = stg2_data_lat_scanout ;
3783assign dae_req_lat_scanin = stg2_ctl_lat_scanout ;
3784assign check_ecc_lat_scanin = dae_req_lat_scanout ;
3785assign pmra_to_r4_lat_scanin = check_ecc_lat_scanout ;
3786assign tid_4_lat_scanin = pmra_to_r4_lat_scanout ;
3787assign sca_index_lat_scanin = tid_4_lat_scanout ;
3788assign rng_stg3_scanin = sca_index_lat_scanout ;
3789assign stg3_ctl_lat_scanin = rng_stg3_scanout ;
3790assign asi_read_lat_scanin = stg3_ctl_lat_scanout ;
3791assign rd_tte_lat_scanin = asi_read_lat_scanout ;
3792assign idata_in_data_access_2_lat_scanin = rd_tte_lat_scanout ;
3793assign rd_itte_lat_scanin = idata_in_data_access_2_lat_scanout;
3794assign dtlb_window_used_last_lat_scanin = rd_itte_lat_scanout ;
3795assign wrote_dtlb_tg1_lat_scanin = dtlb_window_used_last_lat_scanout;
3796assign wrote_dtlb_tg0_lat_scanin = wrote_dtlb_tg1_lat_scanout;
3797assign reload_done_tg1_lat_scanin = wrote_dtlb_tg0_lat_scanout;
3798assign reload_done_tg0_lat_scanin = reload_done_tg1_lat_scanout;
3799assign dtlb_reload_stall_lat_scanin = reload_done_tg0_lat_scanout;
3800assign dtlb_reload_lat_scanin = dtlb_reload_stall_lat_scanout;
3801assign wr_tsb_cfg_lat_scanin = dtlb_reload_lat_scanout ;
3802assign tsb_hwtw_en_lat_scanin = wr_tsb_cfg_lat_scanout ;
3803assign htc_mra_addr_lat_scanin = tsb_hwtw_en_lat_scanout ;
3804assign data_access_index_lat_scanin = htc_mra_addr_lat_scanout ;
3805assign error_inject_lat_scanin = data_access_index_lat_scanout;
3806assign tag_access_tid_0_lat_scanin = error_inject_lat_scanout ;
3807assign i_tag_access_0_lat_scanin = tag_access_tid_0_lat_scanout;
3808assign d_tag_access_0_lat_scanin = i_tag_access_0_lat_scanout;
3809assign tag_access_tid_1_lat_scanin = d_tag_access_0_lat_scanout;
3810assign i_tag_access_1_lat_scanin = tag_access_tid_1_lat_scanout;
3811assign d_tag_access_1_lat_scanin = i_tag_access_1_lat_scanout;
3812assign stp_lat_scanin = d_tag_access_1_lat_scanout;
3813assign htp_lat_scanin = stp_lat_scanout ;
3814assign spares_scanin = htp_lat_scanout ;
3815assign scan_out = spares_scanout ;
3816
3817assign hwtw_config_0_lat_wmr_scanin = wmr_scan_in ;
3818assign hwtw_config_1_lat_wmr_scanin = hwtw_config_0_lat_wmr_scanout;
3819assign hwtw_config_2_lat_wmr_scanin = hwtw_config_1_lat_wmr_scanout;
3820assign hwtw_config_3_lat_wmr_scanin = hwtw_config_2_lat_wmr_scanout;
3821assign hwtw_config_4_lat_wmr_scanin = hwtw_config_3_lat_wmr_scanout;
3822assign hwtw_config_5_lat_wmr_scanin = hwtw_config_4_lat_wmr_scanout;
3823assign hwtw_config_6_lat_wmr_scanin = hwtw_config_5_lat_wmr_scanout;
3824assign hwtw_config_7_lat_wmr_scanin = hwtw_config_6_lat_wmr_scanout;
3825assign hw_tw_e_lat_wmr_scanin = hwtw_config_7_lat_wmr_scanout;
3826assign wmr_scan_out = hw_tw_e_lat_wmr_scanout ;
3827// fixscan end:
3828endmodule
3829
3830
3831
3832
3833
3834
3835
3836// any PARAMS parms go into naming of macro
3837
3838module mmu_asi_ctl_l1clkhdr_ctl_macro (
3839 l2clk,
3840 l1en,
3841 pce_ov,
3842 stop,
3843 se,
3844 l1clk);
3845
3846
3847 input l2clk;
3848 input l1en;
3849 input pce_ov;
3850 input stop;
3851 input se;
3852 output l1clk;
3853
3854
3855
3856
3857
3858cl_sc1_l1hdr_8x c_0 (
3859
3860
3861 .l2clk(l2clk),
3862 .pce(l1en),
3863 .l1clk(l1clk),
3864 .se(se),
3865 .pce_ov(pce_ov),
3866 .stop(stop)
3867);
3868
3869
3870
3871endmodule
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885// any PARAMS parms go into naming of macro
3886
3887module mmu_asi_ctl_msff_ctl_macro__width_1 (
3888 din,
3889 l1clk,
3890 scan_in,
3891 siclk,
3892 soclk,
3893 dout,
3894 scan_out);
3895wire [0:0] fdin;
3896
3897 input [0:0] din;
3898 input l1clk;
3899 input scan_in;
3900
3901
3902 input siclk;
3903 input soclk;
3904
3905 output [0:0] dout;
3906 output scan_out;
3907assign fdin[0:0] = din[0:0];
3908
3909
3910
3911
3912
3913
3914dff #(1) d0_0 (
3915.l1clk(l1clk),
3916.siclk(siclk),
3917.soclk(soclk),
3918.d(fdin[0:0]),
3919.si(scan_in),
3920.so(scan_out),
3921.q(dout[0:0])
3922);
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935endmodule
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949// any PARAMS parms go into naming of macro
3950
3951module mmu_asi_ctl_msff_ctl_macro__width_5 (
3952 din,
3953 l1clk,
3954 scan_in,
3955 siclk,
3956 soclk,
3957 dout,
3958 scan_out);
3959wire [4:0] fdin;
3960wire [3:0] so;
3961
3962 input [4:0] din;
3963 input l1clk;
3964 input scan_in;
3965
3966
3967 input siclk;
3968 input soclk;
3969
3970 output [4:0] dout;
3971 output scan_out;
3972assign fdin[4:0] = din[4:0];
3973
3974
3975
3976
3977
3978
3979dff #(5) d0_0 (
3980.l1clk(l1clk),
3981.siclk(siclk),
3982.soclk(soclk),
3983.d(fdin[4:0]),
3984.si({scan_in,so[3:0]}),
3985.so({so[3:0],scan_out}),
3986.q(dout[4:0])
3987);
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000endmodule
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014// any PARAMS parms go into naming of macro
4015
4016module mmu_asi_ctl_msff_ctl_macro__width_8 (
4017 din,
4018 l1clk,
4019 scan_in,
4020 siclk,
4021 soclk,
4022 dout,
4023 scan_out);
4024wire [7:0] fdin;
4025wire [6:0] so;
4026
4027 input [7:0] din;
4028 input l1clk;
4029 input scan_in;
4030
4031
4032 input siclk;
4033 input soclk;
4034
4035 output [7:0] dout;
4036 output scan_out;
4037assign fdin[7:0] = din[7:0];
4038
4039
4040
4041
4042
4043
4044dff #(8) d0_0 (
4045.l1clk(l1clk),
4046.siclk(siclk),
4047.soclk(soclk),
4048.d(fdin[7:0]),
4049.si({scan_in,so[6:0]}),
4050.so({so[6:0],scan_out}),
4051.q(dout[7:0])
4052);
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065endmodule
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079// any PARAMS parms go into naming of macro
4080
4081module mmu_asi_ctl_msff_ctl_macro__width_2 (
4082 din,
4083 l1clk,
4084 scan_in,
4085 siclk,
4086 soclk,
4087 dout,
4088 scan_out);
4089wire [1:0] fdin;
4090wire [0:0] so;
4091
4092 input [1:0] din;
4093 input l1clk;
4094 input scan_in;
4095
4096
4097 input siclk;
4098 input soclk;
4099
4100 output [1:0] dout;
4101 output scan_out;
4102assign fdin[1:0] = din[1:0];
4103
4104
4105
4106
4107
4108
4109dff #(2) d0_0 (
4110.l1clk(l1clk),
4111.siclk(siclk),
4112.soclk(soclk),
4113.d(fdin[1:0]),
4114.si({scan_in,so[0:0]}),
4115.so({so[0:0],scan_out}),
4116.q(dout[1:0])
4117);
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130endmodule
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144// any PARAMS parms go into naming of macro
4145
4146module mmu_asi_ctl_msff_ctl_macro__width_24 (
4147 din,
4148 l1clk,
4149 scan_in,
4150 siclk,
4151 soclk,
4152 dout,
4153 scan_out);
4154wire [23:0] fdin;
4155wire [22:0] so;
4156
4157 input [23:0] din;
4158 input l1clk;
4159 input scan_in;
4160
4161
4162 input siclk;
4163 input soclk;
4164
4165 output [23:0] dout;
4166 output scan_out;
4167assign fdin[23:0] = din[23:0];
4168
4169
4170
4171
4172
4173
4174dff #(24) d0_0 (
4175.l1clk(l1clk),
4176.siclk(siclk),
4177.soclk(soclk),
4178.d(fdin[23:0]),
4179.si({scan_in,so[22:0]}),
4180.so({so[22:0],scan_out}),
4181.q(dout[23:0])
4182);
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195endmodule
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209// any PARAMS parms go into naming of macro
4210
4211module mmu_asi_ctl_msff_ctl_macro__width_64 (
4212 din,
4213 l1clk,
4214 scan_in,
4215 siclk,
4216 soclk,
4217 dout,
4218 scan_out);
4219wire [63:0] fdin;
4220wire [62:0] so;
4221
4222 input [63:0] din;
4223 input l1clk;
4224 input scan_in;
4225
4226
4227 input siclk;
4228 input soclk;
4229
4230 output [63:0] dout;
4231 output scan_out;
4232assign fdin[63:0] = din[63:0];
4233
4234
4235
4236
4237
4238
4239dff #(64) d0_0 (
4240.l1clk(l1clk),
4241.siclk(siclk),
4242.soclk(soclk),
4243.d(fdin[63:0]),
4244.si({scan_in,so[62:0]}),
4245.so({so[62:0],scan_out}),
4246.q(dout[63:0])
4247);
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260endmodule
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274// any PARAMS parms go into naming of macro
4275
4276module mmu_asi_ctl_msff_ctl_macro__width_15 (
4277 din,
4278 l1clk,
4279 scan_in,
4280 siclk,
4281 soclk,
4282 dout,
4283 scan_out);
4284wire [14:0] fdin;
4285wire [13:0] so;
4286
4287 input [14:0] din;
4288 input l1clk;
4289 input scan_in;
4290
4291
4292 input siclk;
4293 input soclk;
4294
4295 output [14:0] dout;
4296 output scan_out;
4297assign fdin[14:0] = din[14:0];
4298
4299
4300
4301
4302
4303
4304dff #(15) d0_0 (
4305.l1clk(l1clk),
4306.siclk(siclk),
4307.soclk(soclk),
4308.d(fdin[14:0]),
4309.si({scan_in,so[13:0]}),
4310.so({so[13:0],scan_out}),
4311.q(dout[14:0])
4312);
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325endmodule
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339// any PARAMS parms go into naming of macro
4340
4341module mmu_asi_ctl_msff_ctl_macro__width_6 (
4342 din,
4343 l1clk,
4344 scan_in,
4345 siclk,
4346 soclk,
4347 dout,
4348 scan_out);
4349wire [5:0] fdin;
4350wire [4:0] so;
4351
4352 input [5:0] din;
4353 input l1clk;
4354 input scan_in;
4355
4356
4357 input siclk;
4358 input soclk;
4359
4360 output [5:0] dout;
4361 output scan_out;
4362assign fdin[5:0] = din[5:0];
4363
4364
4365
4366
4367
4368
4369dff #(6) d0_0 (
4370.l1clk(l1clk),
4371.siclk(siclk),
4372.soclk(soclk),
4373.d(fdin[5:0]),
4374.si({scan_in,so[4:0]}),
4375.so({so[4:0],scan_out}),
4376.q(dout[5:0])
4377);
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390endmodule
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404// any PARAMS parms go into naming of macro
4405
4406module mmu_asi_ctl_msff_ctl_macro__width_4 (
4407 din,
4408 l1clk,
4409 scan_in,
4410 siclk,
4411 soclk,
4412 dout,
4413 scan_out);
4414wire [3:0] fdin;
4415wire [2:0] so;
4416
4417 input [3:0] din;
4418 input l1clk;
4419 input scan_in;
4420
4421
4422 input siclk;
4423 input soclk;
4424
4425 output [3:0] dout;
4426 output scan_out;
4427assign fdin[3:0] = din[3:0];
4428
4429
4430
4431
4432
4433
4434dff #(4) d0_0 (
4435.l1clk(l1clk),
4436.siclk(siclk),
4437.soclk(soclk),
4438.d(fdin[3:0]),
4439.si({scan_in,so[2:0]}),
4440.so({so[2:0],scan_out}),
4441.q(dout[3:0])
4442);
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455endmodule
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469// any PARAMS parms go into naming of macro
4470
4471module mmu_asi_ctl_msff_ctl_macro__width_16 (
4472 din,
4473 l1clk,
4474 scan_in,
4475 siclk,
4476 soclk,
4477 dout,
4478 scan_out);
4479wire [15:0] fdin;
4480wire [14:0] so;
4481
4482 input [15:0] din;
4483 input l1clk;
4484 input scan_in;
4485
4486
4487 input siclk;
4488 input soclk;
4489
4490 output [15:0] dout;
4491 output scan_out;
4492assign fdin[15:0] = din[15:0];
4493
4494
4495
4496
4497
4498
4499dff #(16) d0_0 (
4500.l1clk(l1clk),
4501.siclk(siclk),
4502.soclk(soclk),
4503.d(fdin[15:0]),
4504.si({scan_in,so[14:0]}),
4505.so({so[14:0],scan_out}),
4506.q(dout[15:0])
4507);
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520endmodule
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534// any PARAMS parms go into naming of macro
4535
4536module mmu_asi_ctl_msff_ctl_macro__width_3 (
4537 din,
4538 l1clk,
4539 scan_in,
4540 siclk,
4541 soclk,
4542 dout,
4543 scan_out);
4544wire [2:0] fdin;
4545wire [1:0] so;
4546
4547 input [2:0] din;
4548 input l1clk;
4549 input scan_in;
4550
4551
4552 input siclk;
4553 input soclk;
4554
4555 output [2:0] dout;
4556 output scan_out;
4557assign fdin[2:0] = din[2:0];
4558
4559
4560
4561
4562
4563
4564dff #(3) d0_0 (
4565.l1clk(l1clk),
4566.siclk(siclk),
4567.soclk(soclk),
4568.d(fdin[2:0]),
4569.si({scan_in,so[1:0]}),
4570.so({so[1:0],scan_out}),
4571.q(dout[2:0])
4572);
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585endmodule
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599// any PARAMS parms go into naming of macro
4600
4601module mmu_asi_ctl_msff_ctl_macro__width_65 (
4602 din,
4603 l1clk,
4604 scan_in,
4605 siclk,
4606 soclk,
4607 dout,
4608 scan_out);
4609wire [64:0] fdin;
4610wire [63:0] so;
4611
4612 input [64:0] din;
4613 input l1clk;
4614 input scan_in;
4615
4616
4617 input siclk;
4618 input soclk;
4619
4620 output [64:0] dout;
4621 output scan_out;
4622assign fdin[64:0] = din[64:0];
4623
4624
4625
4626
4627
4628
4629dff #(65) d0_0 (
4630.l1clk(l1clk),
4631.siclk(siclk),
4632.soclk(soclk),
4633.d(fdin[64:0]),
4634.si({scan_in,so[63:0]}),
4635.so({so[63:0],scan_out}),
4636.q(dout[64:0])
4637);
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650endmodule
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664// any PARAMS parms go into naming of macro
4665
4666module mmu_asi_ctl_msff_ctl_macro__width_25 (
4667 din,
4668 l1clk,
4669 scan_in,
4670 siclk,
4671 soclk,
4672 dout,
4673 scan_out);
4674wire [24:0] fdin;
4675wire [23:0] so;
4676
4677 input [24:0] din;
4678 input l1clk;
4679 input scan_in;
4680
4681
4682 input siclk;
4683 input soclk;
4684
4685 output [24:0] dout;
4686 output scan_out;
4687assign fdin[24:0] = din[24:0];
4688
4689
4690
4691
4692
4693
4694dff #(25) d0_0 (
4695.l1clk(l1clk),
4696.siclk(siclk),
4697.soclk(soclk),
4698.d(fdin[24:0]),
4699.si({scan_in,so[23:0]}),
4700.so({so[23:0],scan_out}),
4701.q(dout[24:0])
4702);
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715endmodule
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729// any PARAMS parms go into naming of macro
4730
4731module mmu_asi_ctl_msff_ctl_macro__width_32 (
4732 din,
4733 l1clk,
4734 scan_in,
4735 siclk,
4736 soclk,
4737 dout,
4738 scan_out);
4739wire [31:0] fdin;
4740wire [30:0] so;
4741
4742 input [31:0] din;
4743 input l1clk;
4744 input scan_in;
4745
4746
4747 input siclk;
4748 input soclk;
4749
4750 output [31:0] dout;
4751 output scan_out;
4752assign fdin[31:0] = din[31:0];
4753
4754
4755
4756
4757
4758
4759dff #(32) d0_0 (
4760.l1clk(l1clk),
4761.siclk(siclk),
4762.soclk(soclk),
4763.d(fdin[31:0]),
4764.si({scan_in,so[30:0]}),
4765.so({so[30:0],scan_out}),
4766.q(dout[31:0])
4767);
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780endmodule
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793
4794// any PARAMS parms go into naming of macro
4795
4796module mmu_asi_ctl_msff_ctl_macro__width_12 (
4797 din,
4798 l1clk,
4799 scan_in,
4800 siclk,
4801 soclk,
4802 dout,
4803 scan_out);
4804wire [11:0] fdin;
4805wire [10:0] so;
4806
4807 input [11:0] din;
4808 input l1clk;
4809 input scan_in;
4810
4811
4812 input siclk;
4813 input soclk;
4814
4815 output [11:0] dout;
4816 output scan_out;
4817assign fdin[11:0] = din[11:0];
4818
4819
4820
4821
4822
4823
4824dff #(12) d0_0 (
4825.l1clk(l1clk),
4826.siclk(siclk),
4827.soclk(soclk),
4828.d(fdin[11:0]),
4829.si({scan_in,so[10:0]}),
4830.so({so[10:0],scan_out}),
4831.q(dout[11:0])
4832);
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845endmodule
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855
4856
4857
4858
4859// any PARAMS parms go into naming of macro
4860
4861module mmu_asi_ctl_msff_ctl_macro__width_7 (
4862 din,
4863 l1clk,
4864 scan_in,
4865 siclk,
4866 soclk,
4867 dout,
4868 scan_out);
4869wire [6:0] fdin;
4870wire [5:0] so;
4871
4872 input [6:0] din;
4873 input l1clk;
4874 input scan_in;
4875
4876
4877 input siclk;
4878 input soclk;
4879
4880 output [6:0] dout;
4881 output scan_out;
4882assign fdin[6:0] = din[6:0];
4883
4884
4885
4886
4887
4888
4889dff #(7) d0_0 (
4890.l1clk(l1clk),
4891.siclk(siclk),
4892.soclk(soclk),
4893.d(fdin[6:0]),
4894.si({scan_in,so[5:0]}),
4895.so({so[5:0],scan_out}),
4896.q(dout[6:0])
4897);
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910endmodule
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920
4921
4922
4923
4924// any PARAMS parms go into naming of macro
4925
4926module mmu_asi_ctl_msff_ctl_macro__width_11 (
4927 din,
4928 l1clk,
4929 scan_in,
4930 siclk,
4931 soclk,
4932 dout,
4933 scan_out);
4934wire [10:0] fdin;
4935wire [9:0] so;
4936
4937 input [10:0] din;
4938 input l1clk;
4939 input scan_in;
4940
4941
4942 input siclk;
4943 input soclk;
4944
4945 output [10:0] dout;
4946 output scan_out;
4947assign fdin[10:0] = din[10:0];
4948
4949
4950
4951
4952
4953
4954dff #(11) d0_0 (
4955.l1clk(l1clk),
4956.siclk(siclk),
4957.soclk(soclk),
4958.d(fdin[10:0]),
4959.si({scan_in,so[9:0]}),
4960.so({so[9:0],scan_out}),
4961.q(dout[10:0])
4962);
4963
4964
4965
4966
4967
4968
4969
4970
4971
4972
4973
4974
4975endmodule
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985// Description: Spare gate macro for control blocks
4986//
4987// Param num controls the number of times the macro is added
4988// flops=0 can be used to use only combination spare logic
4989
4990
4991module mmu_asi_ctl_spare_ctl_macro__num_12 (
4992 l1clk,
4993 scan_in,
4994 siclk,
4995 soclk,
4996 scan_out);
4997wire si_0;
4998wire so_0;
4999wire spare0_flop_unused;
5000wire spare0_buf_32x_unused;
5001wire spare0_nand3_8x_unused;
5002wire spare0_inv_8x_unused;
5003wire spare0_aoi22_4x_unused;
5004wire spare0_buf_8x_unused;
5005wire spare0_oai22_4x_unused;
5006wire spare0_inv_16x_unused;
5007wire spare0_nand2_16x_unused;
5008wire spare0_nor3_4x_unused;
5009wire spare0_nand2_8x_unused;
5010wire spare0_buf_16x_unused;
5011wire spare0_nor2_16x_unused;
5012wire spare0_inv_32x_unused;
5013wire si_1;
5014wire so_1;
5015wire spare1_flop_unused;
5016wire spare1_buf_32x_unused;
5017wire spare1_nand3_8x_unused;
5018wire spare1_inv_8x_unused;
5019wire spare1_aoi22_4x_unused;
5020wire spare1_buf_8x_unused;
5021wire spare1_oai22_4x_unused;
5022wire spare1_inv_16x_unused;
5023wire spare1_nand2_16x_unused;
5024wire spare1_nor3_4x_unused;
5025wire spare1_nand2_8x_unused;
5026wire spare1_buf_16x_unused;
5027wire spare1_nor2_16x_unused;
5028wire spare1_inv_32x_unused;
5029wire si_2;
5030wire so_2;
5031wire spare2_flop_unused;
5032wire spare2_buf_32x_unused;
5033wire spare2_nand3_8x_unused;
5034wire spare2_inv_8x_unused;
5035wire spare2_aoi22_4x_unused;
5036wire spare2_buf_8x_unused;
5037wire spare2_oai22_4x_unused;
5038wire spare2_inv_16x_unused;
5039wire spare2_nand2_16x_unused;
5040wire spare2_nor3_4x_unused;
5041wire spare2_nand2_8x_unused;
5042wire spare2_buf_16x_unused;
5043wire spare2_nor2_16x_unused;
5044wire spare2_inv_32x_unused;
5045wire si_3;
5046wire so_3;
5047wire spare3_flop_unused;
5048wire spare3_buf_32x_unused;
5049wire spare3_nand3_8x_unused;
5050wire spare3_inv_8x_unused;
5051wire spare3_aoi22_4x_unused;
5052wire spare3_buf_8x_unused;
5053wire spare3_oai22_4x_unused;
5054wire spare3_inv_16x_unused;
5055wire spare3_nand2_16x_unused;
5056wire spare3_nor3_4x_unused;
5057wire spare3_nand2_8x_unused;
5058wire spare3_buf_16x_unused;
5059wire spare3_nor2_16x_unused;
5060wire spare3_inv_32x_unused;
5061wire si_4;
5062wire so_4;
5063wire spare4_flop_unused;
5064wire spare4_buf_32x_unused;
5065wire spare4_nand3_8x_unused;
5066wire spare4_inv_8x_unused;
5067wire spare4_aoi22_4x_unused;
5068wire spare4_buf_8x_unused;
5069wire spare4_oai22_4x_unused;
5070wire spare4_inv_16x_unused;
5071wire spare4_nand2_16x_unused;
5072wire spare4_nor3_4x_unused;
5073wire spare4_nand2_8x_unused;
5074wire spare4_buf_16x_unused;
5075wire spare4_nor2_16x_unused;
5076wire spare4_inv_32x_unused;
5077wire si_5;
5078wire so_5;
5079wire spare5_flop_unused;
5080wire spare5_buf_32x_unused;
5081wire spare5_nand3_8x_unused;
5082wire spare5_inv_8x_unused;
5083wire spare5_aoi22_4x_unused;
5084wire spare5_buf_8x_unused;
5085wire spare5_oai22_4x_unused;
5086wire spare5_inv_16x_unused;
5087wire spare5_nand2_16x_unused;
5088wire spare5_nor3_4x_unused;
5089wire spare5_nand2_8x_unused;
5090wire spare5_buf_16x_unused;
5091wire spare5_nor2_16x_unused;
5092wire spare5_inv_32x_unused;
5093wire si_6;
5094wire so_6;
5095wire spare6_flop_unused;
5096wire spare6_buf_32x_unused;
5097wire spare6_nand3_8x_unused;
5098wire spare6_inv_8x_unused;
5099wire spare6_aoi22_4x_unused;
5100wire spare6_buf_8x_unused;
5101wire spare6_oai22_4x_unused;
5102wire spare6_inv_16x_unused;
5103wire spare6_nand2_16x_unused;
5104wire spare6_nor3_4x_unused;
5105wire spare6_nand2_8x_unused;
5106wire spare6_buf_16x_unused;
5107wire spare6_nor2_16x_unused;
5108wire spare6_inv_32x_unused;
5109wire si_7;
5110wire so_7;
5111wire spare7_flop_unused;
5112wire spare7_buf_32x_unused;
5113wire spare7_nand3_8x_unused;
5114wire spare7_inv_8x_unused;
5115wire spare7_aoi22_4x_unused;
5116wire spare7_buf_8x_unused;
5117wire spare7_oai22_4x_unused;
5118wire spare7_inv_16x_unused;
5119wire spare7_nand2_16x_unused;
5120wire spare7_nor3_4x_unused;
5121wire spare7_nand2_8x_unused;
5122wire spare7_buf_16x_unused;
5123wire spare7_nor2_16x_unused;
5124wire spare7_inv_32x_unused;
5125wire si_8;
5126wire so_8;
5127wire spare8_flop_unused;
5128wire spare8_buf_32x_unused;
5129wire spare8_nand3_8x_unused;
5130wire spare8_inv_8x_unused;
5131wire spare8_aoi22_4x_unused;
5132wire spare8_buf_8x_unused;
5133wire spare8_oai22_4x_unused;
5134wire spare8_inv_16x_unused;
5135wire spare8_nand2_16x_unused;
5136wire spare8_nor3_4x_unused;
5137wire spare8_nand2_8x_unused;
5138wire spare8_buf_16x_unused;
5139wire spare8_nor2_16x_unused;
5140wire spare8_inv_32x_unused;
5141wire si_9;
5142wire so_9;
5143wire spare9_flop_unused;
5144wire spare9_buf_32x_unused;
5145wire spare9_nand3_8x_unused;
5146wire spare9_inv_8x_unused;
5147wire spare9_aoi22_4x_unused;
5148wire spare9_buf_8x_unused;
5149wire spare9_oai22_4x_unused;
5150wire spare9_inv_16x_unused;
5151wire spare9_nand2_16x_unused;
5152wire spare9_nor3_4x_unused;
5153wire spare9_nand2_8x_unused;
5154wire spare9_buf_16x_unused;
5155wire spare9_nor2_16x_unused;
5156wire spare9_inv_32x_unused;
5157wire si_10;
5158wire so_10;
5159wire spare10_flop_unused;
5160wire spare10_buf_32x_unused;
5161wire spare10_nand3_8x_unused;
5162wire spare10_inv_8x_unused;
5163wire spare10_aoi22_4x_unused;
5164wire spare10_buf_8x_unused;
5165wire spare10_oai22_4x_unused;
5166wire spare10_inv_16x_unused;
5167wire spare10_nand2_16x_unused;
5168wire spare10_nor3_4x_unused;
5169wire spare10_nand2_8x_unused;
5170wire spare10_buf_16x_unused;
5171wire spare10_nor2_16x_unused;
5172wire spare10_inv_32x_unused;
5173wire si_11;
5174wire so_11;
5175wire spare11_flop_unused;
5176wire spare11_buf_32x_unused;
5177wire spare11_nand3_8x_unused;
5178wire spare11_inv_8x_unused;
5179wire spare11_aoi22_4x_unused;
5180wire spare11_buf_8x_unused;
5181wire spare11_oai22_4x_unused;
5182wire spare11_inv_16x_unused;
5183wire spare11_nand2_16x_unused;
5184wire spare11_nor3_4x_unused;
5185wire spare11_nand2_8x_unused;
5186wire spare11_buf_16x_unused;
5187wire spare11_nor2_16x_unused;
5188wire spare11_inv_32x_unused;
5189
5190
5191input l1clk;
5192input scan_in;
5193input siclk;
5194input soclk;
5195output scan_out;
5196
5197cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
5198 .siclk(siclk),
5199 .soclk(soclk),
5200 .si(si_0),
5201 .so(so_0),
5202 .d(1'b0),
5203 .q(spare0_flop_unused));
5204assign si_0 = scan_in;
5205
5206cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
5207 .out(spare0_buf_32x_unused));
5208cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
5209 .in1(1'b1),
5210 .in2(1'b1),
5211 .out(spare0_nand3_8x_unused));
5212cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
5213 .out(spare0_inv_8x_unused));
5214cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
5215 .in01(1'b1),
5216 .in10(1'b1),
5217 .in11(1'b1),
5218 .out(spare0_aoi22_4x_unused));
5219cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
5220 .out(spare0_buf_8x_unused));
5221cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
5222 .in01(1'b1),
5223 .in10(1'b1),
5224 .in11(1'b1),
5225 .out(spare0_oai22_4x_unused));
5226cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
5227 .out(spare0_inv_16x_unused));
5228cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
5229 .in1(1'b1),
5230 .out(spare0_nand2_16x_unused));
5231cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
5232 .in1(1'b0),
5233 .in2(1'b0),
5234 .out(spare0_nor3_4x_unused));
5235cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
5236 .in1(1'b1),
5237 .out(spare0_nand2_8x_unused));
5238cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
5239 .out(spare0_buf_16x_unused));
5240cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
5241 .in1(1'b0),
5242 .out(spare0_nor2_16x_unused));
5243cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
5244 .out(spare0_inv_32x_unused));
5245
5246cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
5247 .siclk(siclk),
5248 .soclk(soclk),
5249 .si(si_1),
5250 .so(so_1),
5251 .d(1'b0),
5252 .q(spare1_flop_unused));
5253assign si_1 = so_0;
5254
5255cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
5256 .out(spare1_buf_32x_unused));
5257cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
5258 .in1(1'b1),
5259 .in2(1'b1),
5260 .out(spare1_nand3_8x_unused));
5261cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
5262 .out(spare1_inv_8x_unused));
5263cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
5264 .in01(1'b1),
5265 .in10(1'b1),
5266 .in11(1'b1),
5267 .out(spare1_aoi22_4x_unused));
5268cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
5269 .out(spare1_buf_8x_unused));
5270cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
5271 .in01(1'b1),
5272 .in10(1'b1),
5273 .in11(1'b1),
5274 .out(spare1_oai22_4x_unused));
5275cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
5276 .out(spare1_inv_16x_unused));
5277cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
5278 .in1(1'b1),
5279 .out(spare1_nand2_16x_unused));
5280cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
5281 .in1(1'b0),
5282 .in2(1'b0),
5283 .out(spare1_nor3_4x_unused));
5284cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
5285 .in1(1'b1),
5286 .out(spare1_nand2_8x_unused));
5287cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
5288 .out(spare1_buf_16x_unused));
5289cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
5290 .in1(1'b0),
5291 .out(spare1_nor2_16x_unused));
5292cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
5293 .out(spare1_inv_32x_unused));
5294
5295cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
5296 .siclk(siclk),
5297 .soclk(soclk),
5298 .si(si_2),
5299 .so(so_2),
5300 .d(1'b0),
5301 .q(spare2_flop_unused));
5302assign si_2 = so_1;
5303
5304cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
5305 .out(spare2_buf_32x_unused));
5306cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
5307 .in1(1'b1),
5308 .in2(1'b1),
5309 .out(spare2_nand3_8x_unused));
5310cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
5311 .out(spare2_inv_8x_unused));
5312cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
5313 .in01(1'b1),
5314 .in10(1'b1),
5315 .in11(1'b1),
5316 .out(spare2_aoi22_4x_unused));
5317cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
5318 .out(spare2_buf_8x_unused));
5319cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
5320 .in01(1'b1),
5321 .in10(1'b1),
5322 .in11(1'b1),
5323 .out(spare2_oai22_4x_unused));
5324cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
5325 .out(spare2_inv_16x_unused));
5326cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
5327 .in1(1'b1),
5328 .out(spare2_nand2_16x_unused));
5329cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
5330 .in1(1'b0),
5331 .in2(1'b0),
5332 .out(spare2_nor3_4x_unused));
5333cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
5334 .in1(1'b1),
5335 .out(spare2_nand2_8x_unused));
5336cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
5337 .out(spare2_buf_16x_unused));
5338cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
5339 .in1(1'b0),
5340 .out(spare2_nor2_16x_unused));
5341cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
5342 .out(spare2_inv_32x_unused));
5343
5344cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
5345 .siclk(siclk),
5346 .soclk(soclk),
5347 .si(si_3),
5348 .so(so_3),
5349 .d(1'b0),
5350 .q(spare3_flop_unused));
5351assign si_3 = so_2;
5352
5353cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
5354 .out(spare3_buf_32x_unused));
5355cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
5356 .in1(1'b1),
5357 .in2(1'b1),
5358 .out(spare3_nand3_8x_unused));
5359cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
5360 .out(spare3_inv_8x_unused));
5361cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
5362 .in01(1'b1),
5363 .in10(1'b1),
5364 .in11(1'b1),
5365 .out(spare3_aoi22_4x_unused));
5366cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
5367 .out(spare3_buf_8x_unused));
5368cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
5369 .in01(1'b1),
5370 .in10(1'b1),
5371 .in11(1'b1),
5372 .out(spare3_oai22_4x_unused));
5373cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
5374 .out(spare3_inv_16x_unused));
5375cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
5376 .in1(1'b1),
5377 .out(spare3_nand2_16x_unused));
5378cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
5379 .in1(1'b0),
5380 .in2(1'b0),
5381 .out(spare3_nor3_4x_unused));
5382cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
5383 .in1(1'b1),
5384 .out(spare3_nand2_8x_unused));
5385cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
5386 .out(spare3_buf_16x_unused));
5387cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
5388 .in1(1'b0),
5389 .out(spare3_nor2_16x_unused));
5390cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
5391 .out(spare3_inv_32x_unused));
5392
5393cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
5394 .siclk(siclk),
5395 .soclk(soclk),
5396 .si(si_4),
5397 .so(so_4),
5398 .d(1'b0),
5399 .q(spare4_flop_unused));
5400assign si_4 = so_3;
5401
5402cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
5403 .out(spare4_buf_32x_unused));
5404cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
5405 .in1(1'b1),
5406 .in2(1'b1),
5407 .out(spare4_nand3_8x_unused));
5408cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
5409 .out(spare4_inv_8x_unused));
5410cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
5411 .in01(1'b1),
5412 .in10(1'b1),
5413 .in11(1'b1),
5414 .out(spare4_aoi22_4x_unused));
5415cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
5416 .out(spare4_buf_8x_unused));
5417cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
5418 .in01(1'b1),
5419 .in10(1'b1),
5420 .in11(1'b1),
5421 .out(spare4_oai22_4x_unused));
5422cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
5423 .out(spare4_inv_16x_unused));
5424cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
5425 .in1(1'b1),
5426 .out(spare4_nand2_16x_unused));
5427cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
5428 .in1(1'b0),
5429 .in2(1'b0),
5430 .out(spare4_nor3_4x_unused));
5431cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
5432 .in1(1'b1),
5433 .out(spare4_nand2_8x_unused));
5434cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
5435 .out(spare4_buf_16x_unused));
5436cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
5437 .in1(1'b0),
5438 .out(spare4_nor2_16x_unused));
5439cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
5440 .out(spare4_inv_32x_unused));
5441
5442cl_sc1_msff_8x spare5_flop (.l1clk(l1clk),
5443 .siclk(siclk),
5444 .soclk(soclk),
5445 .si(si_5),
5446 .so(so_5),
5447 .d(1'b0),
5448 .q(spare5_flop_unused));
5449assign si_5 = so_4;
5450
5451cl_u1_buf_32x spare5_buf_32x (.in(1'b1),
5452 .out(spare5_buf_32x_unused));
5453cl_u1_nand3_8x spare5_nand3_8x (.in0(1'b1),
5454 .in1(1'b1),
5455 .in2(1'b1),
5456 .out(spare5_nand3_8x_unused));
5457cl_u1_inv_8x spare5_inv_8x (.in(1'b1),
5458 .out(spare5_inv_8x_unused));
5459cl_u1_aoi22_4x spare5_aoi22_4x (.in00(1'b1),
5460 .in01(1'b1),
5461 .in10(1'b1),
5462 .in11(1'b1),
5463 .out(spare5_aoi22_4x_unused));
5464cl_u1_buf_8x spare5_buf_8x (.in(1'b1),
5465 .out(spare5_buf_8x_unused));
5466cl_u1_oai22_4x spare5_oai22_4x (.in00(1'b1),
5467 .in01(1'b1),
5468 .in10(1'b1),
5469 .in11(1'b1),
5470 .out(spare5_oai22_4x_unused));
5471cl_u1_inv_16x spare5_inv_16x (.in(1'b1),
5472 .out(spare5_inv_16x_unused));
5473cl_u1_nand2_16x spare5_nand2_16x (.in0(1'b1),
5474 .in1(1'b1),
5475 .out(spare5_nand2_16x_unused));
5476cl_u1_nor3_4x spare5_nor3_4x (.in0(1'b0),
5477 .in1(1'b0),
5478 .in2(1'b0),
5479 .out(spare5_nor3_4x_unused));
5480cl_u1_nand2_8x spare5_nand2_8x (.in0(1'b1),
5481 .in1(1'b1),
5482 .out(spare5_nand2_8x_unused));
5483cl_u1_buf_16x spare5_buf_16x (.in(1'b1),
5484 .out(spare5_buf_16x_unused));
5485cl_u1_nor2_16x spare5_nor2_16x (.in0(1'b0),
5486 .in1(1'b0),
5487 .out(spare5_nor2_16x_unused));
5488cl_u1_inv_32x spare5_inv_32x (.in(1'b1),
5489 .out(spare5_inv_32x_unused));
5490
5491cl_sc1_msff_8x spare6_flop (.l1clk(l1clk),
5492 .siclk(siclk),
5493 .soclk(soclk),
5494 .si(si_6),
5495 .so(so_6),
5496 .d(1'b0),
5497 .q(spare6_flop_unused));
5498assign si_6 = so_5;
5499
5500cl_u1_buf_32x spare6_buf_32x (.in(1'b1),
5501 .out(spare6_buf_32x_unused));
5502cl_u1_nand3_8x spare6_nand3_8x (.in0(1'b1),
5503 .in1(1'b1),
5504 .in2(1'b1),
5505 .out(spare6_nand3_8x_unused));
5506cl_u1_inv_8x spare6_inv_8x (.in(1'b1),
5507 .out(spare6_inv_8x_unused));
5508cl_u1_aoi22_4x spare6_aoi22_4x (.in00(1'b1),
5509 .in01(1'b1),
5510 .in10(1'b1),
5511 .in11(1'b1),
5512 .out(spare6_aoi22_4x_unused));
5513cl_u1_buf_8x spare6_buf_8x (.in(1'b1),
5514 .out(spare6_buf_8x_unused));
5515cl_u1_oai22_4x spare6_oai22_4x (.in00(1'b1),
5516 .in01(1'b1),
5517 .in10(1'b1),
5518 .in11(1'b1),
5519 .out(spare6_oai22_4x_unused));
5520cl_u1_inv_16x spare6_inv_16x (.in(1'b1),
5521 .out(spare6_inv_16x_unused));
5522cl_u1_nand2_16x spare6_nand2_16x (.in0(1'b1),
5523 .in1(1'b1),
5524 .out(spare6_nand2_16x_unused));
5525cl_u1_nor3_4x spare6_nor3_4x (.in0(1'b0),
5526 .in1(1'b0),
5527 .in2(1'b0),
5528 .out(spare6_nor3_4x_unused));
5529cl_u1_nand2_8x spare6_nand2_8x (.in0(1'b1),
5530 .in1(1'b1),
5531 .out(spare6_nand2_8x_unused));
5532cl_u1_buf_16x spare6_buf_16x (.in(1'b1),
5533 .out(spare6_buf_16x_unused));
5534cl_u1_nor2_16x spare6_nor2_16x (.in0(1'b0),
5535 .in1(1'b0),
5536 .out(spare6_nor2_16x_unused));
5537cl_u1_inv_32x spare6_inv_32x (.in(1'b1),
5538 .out(spare6_inv_32x_unused));
5539
5540cl_sc1_msff_8x spare7_flop (.l1clk(l1clk),
5541 .siclk(siclk),
5542 .soclk(soclk),
5543 .si(si_7),
5544 .so(so_7),
5545 .d(1'b0),
5546 .q(spare7_flop_unused));
5547assign si_7 = so_6;
5548
5549cl_u1_buf_32x spare7_buf_32x (.in(1'b1),
5550 .out(spare7_buf_32x_unused));
5551cl_u1_nand3_8x spare7_nand3_8x (.in0(1'b1),
5552 .in1(1'b1),
5553 .in2(1'b1),
5554 .out(spare7_nand3_8x_unused));
5555cl_u1_inv_8x spare7_inv_8x (.in(1'b1),
5556 .out(spare7_inv_8x_unused));
5557cl_u1_aoi22_4x spare7_aoi22_4x (.in00(1'b1),
5558 .in01(1'b1),
5559 .in10(1'b1),
5560 .in11(1'b1),
5561 .out(spare7_aoi22_4x_unused));
5562cl_u1_buf_8x spare7_buf_8x (.in(1'b1),
5563 .out(spare7_buf_8x_unused));
5564cl_u1_oai22_4x spare7_oai22_4x (.in00(1'b1),
5565 .in01(1'b1),
5566 .in10(1'b1),
5567 .in11(1'b1),
5568 .out(spare7_oai22_4x_unused));
5569cl_u1_inv_16x spare7_inv_16x (.in(1'b1),
5570 .out(spare7_inv_16x_unused));
5571cl_u1_nand2_16x spare7_nand2_16x (.in0(1'b1),
5572 .in1(1'b1),
5573 .out(spare7_nand2_16x_unused));
5574cl_u1_nor3_4x spare7_nor3_4x (.in0(1'b0),
5575 .in1(1'b0),
5576 .in2(1'b0),
5577 .out(spare7_nor3_4x_unused));
5578cl_u1_nand2_8x spare7_nand2_8x (.in0(1'b1),
5579 .in1(1'b1),
5580 .out(spare7_nand2_8x_unused));
5581cl_u1_buf_16x spare7_buf_16x (.in(1'b1),
5582 .out(spare7_buf_16x_unused));
5583cl_u1_nor2_16x spare7_nor2_16x (.in0(1'b0),
5584 .in1(1'b0),
5585 .out(spare7_nor2_16x_unused));
5586cl_u1_inv_32x spare7_inv_32x (.in(1'b1),
5587 .out(spare7_inv_32x_unused));
5588
5589cl_sc1_msff_8x spare8_flop (.l1clk(l1clk),
5590 .siclk(siclk),
5591 .soclk(soclk),
5592 .si(si_8),
5593 .so(so_8),
5594 .d(1'b0),
5595 .q(spare8_flop_unused));
5596assign si_8 = so_7;
5597
5598cl_u1_buf_32x spare8_buf_32x (.in(1'b1),
5599 .out(spare8_buf_32x_unused));
5600cl_u1_nand3_8x spare8_nand3_8x (.in0(1'b1),
5601 .in1(1'b1),
5602 .in2(1'b1),
5603 .out(spare8_nand3_8x_unused));
5604cl_u1_inv_8x spare8_inv_8x (.in(1'b1),
5605 .out(spare8_inv_8x_unused));
5606cl_u1_aoi22_4x spare8_aoi22_4x (.in00(1'b1),
5607 .in01(1'b1),
5608 .in10(1'b1),
5609 .in11(1'b1),
5610 .out(spare8_aoi22_4x_unused));
5611cl_u1_buf_8x spare8_buf_8x (.in(1'b1),
5612 .out(spare8_buf_8x_unused));
5613cl_u1_oai22_4x spare8_oai22_4x (.in00(1'b1),
5614 .in01(1'b1),
5615 .in10(1'b1),
5616 .in11(1'b1),
5617 .out(spare8_oai22_4x_unused));
5618cl_u1_inv_16x spare8_inv_16x (.in(1'b1),
5619 .out(spare8_inv_16x_unused));
5620cl_u1_nand2_16x spare8_nand2_16x (.in0(1'b1),
5621 .in1(1'b1),
5622 .out(spare8_nand2_16x_unused));
5623cl_u1_nor3_4x spare8_nor3_4x (.in0(1'b0),
5624 .in1(1'b0),
5625 .in2(1'b0),
5626 .out(spare8_nor3_4x_unused));
5627cl_u1_nand2_8x spare8_nand2_8x (.in0(1'b1),
5628 .in1(1'b1),
5629 .out(spare8_nand2_8x_unused));
5630cl_u1_buf_16x spare8_buf_16x (.in(1'b1),
5631 .out(spare8_buf_16x_unused));
5632cl_u1_nor2_16x spare8_nor2_16x (.in0(1'b0),
5633 .in1(1'b0),
5634 .out(spare8_nor2_16x_unused));
5635cl_u1_inv_32x spare8_inv_32x (.in(1'b1),
5636 .out(spare8_inv_32x_unused));
5637
5638cl_sc1_msff_8x spare9_flop (.l1clk(l1clk),
5639 .siclk(siclk),
5640 .soclk(soclk),
5641 .si(si_9),
5642 .so(so_9),
5643 .d(1'b0),
5644 .q(spare9_flop_unused));
5645assign si_9 = so_8;
5646
5647cl_u1_buf_32x spare9_buf_32x (.in(1'b1),
5648 .out(spare9_buf_32x_unused));
5649cl_u1_nand3_8x spare9_nand3_8x (.in0(1'b1),
5650 .in1(1'b1),
5651 .in2(1'b1),
5652 .out(spare9_nand3_8x_unused));
5653cl_u1_inv_8x spare9_inv_8x (.in(1'b1),
5654 .out(spare9_inv_8x_unused));
5655cl_u1_aoi22_4x spare9_aoi22_4x (.in00(1'b1),
5656 .in01(1'b1),
5657 .in10(1'b1),
5658 .in11(1'b1),
5659 .out(spare9_aoi22_4x_unused));
5660cl_u1_buf_8x spare9_buf_8x (.in(1'b1),
5661 .out(spare9_buf_8x_unused));
5662cl_u1_oai22_4x spare9_oai22_4x (.in00(1'b1),
5663 .in01(1'b1),
5664 .in10(1'b1),
5665 .in11(1'b1),
5666 .out(spare9_oai22_4x_unused));
5667cl_u1_inv_16x spare9_inv_16x (.in(1'b1),
5668 .out(spare9_inv_16x_unused));
5669cl_u1_nand2_16x spare9_nand2_16x (.in0(1'b1),
5670 .in1(1'b1),
5671 .out(spare9_nand2_16x_unused));
5672cl_u1_nor3_4x spare9_nor3_4x (.in0(1'b0),
5673 .in1(1'b0),
5674 .in2(1'b0),
5675 .out(spare9_nor3_4x_unused));
5676cl_u1_nand2_8x spare9_nand2_8x (.in0(1'b1),
5677 .in1(1'b1),
5678 .out(spare9_nand2_8x_unused));
5679cl_u1_buf_16x spare9_buf_16x (.in(1'b1),
5680 .out(spare9_buf_16x_unused));
5681cl_u1_nor2_16x spare9_nor2_16x (.in0(1'b0),
5682 .in1(1'b0),
5683 .out(spare9_nor2_16x_unused));
5684cl_u1_inv_32x spare9_inv_32x (.in(1'b1),
5685 .out(spare9_inv_32x_unused));
5686
5687cl_sc1_msff_8x spare10_flop (.l1clk(l1clk),
5688 .siclk(siclk),
5689 .soclk(soclk),
5690 .si(si_10),
5691 .so(so_10),
5692 .d(1'b0),
5693 .q(spare10_flop_unused));
5694assign si_10 = so_9;
5695
5696cl_u1_buf_32x spare10_buf_32x (.in(1'b1),
5697 .out(spare10_buf_32x_unused));
5698cl_u1_nand3_8x spare10_nand3_8x (.in0(1'b1),
5699 .in1(1'b1),
5700 .in2(1'b1),
5701 .out(spare10_nand3_8x_unused));
5702cl_u1_inv_8x spare10_inv_8x (.in(1'b1),
5703 .out(spare10_inv_8x_unused));
5704cl_u1_aoi22_4x spare10_aoi22_4x (.in00(1'b1),
5705 .in01(1'b1),
5706 .in10(1'b1),
5707 .in11(1'b1),
5708 .out(spare10_aoi22_4x_unused));
5709cl_u1_buf_8x spare10_buf_8x (.in(1'b1),
5710 .out(spare10_buf_8x_unused));
5711cl_u1_oai22_4x spare10_oai22_4x (.in00(1'b1),
5712 .in01(1'b1),
5713 .in10(1'b1),
5714 .in11(1'b1),
5715 .out(spare10_oai22_4x_unused));
5716cl_u1_inv_16x spare10_inv_16x (.in(1'b1),
5717 .out(spare10_inv_16x_unused));
5718cl_u1_nand2_16x spare10_nand2_16x (.in0(1'b1),
5719 .in1(1'b1),
5720 .out(spare10_nand2_16x_unused));
5721cl_u1_nor3_4x spare10_nor3_4x (.in0(1'b0),
5722 .in1(1'b0),
5723 .in2(1'b0),
5724 .out(spare10_nor3_4x_unused));
5725cl_u1_nand2_8x spare10_nand2_8x (.in0(1'b1),
5726 .in1(1'b1),
5727 .out(spare10_nand2_8x_unused));
5728cl_u1_buf_16x spare10_buf_16x (.in(1'b1),
5729 .out(spare10_buf_16x_unused));
5730cl_u1_nor2_16x spare10_nor2_16x (.in0(1'b0),
5731 .in1(1'b0),
5732 .out(spare10_nor2_16x_unused));
5733cl_u1_inv_32x spare10_inv_32x (.in(1'b1),
5734 .out(spare10_inv_32x_unused));
5735
5736cl_sc1_msff_8x spare11_flop (.l1clk(l1clk),
5737 .siclk(siclk),
5738 .soclk(soclk),
5739 .si(si_11),
5740 .so(so_11),
5741 .d(1'b0),
5742 .q(spare11_flop_unused));
5743assign si_11 = so_10;
5744
5745cl_u1_buf_32x spare11_buf_32x (.in(1'b1),
5746 .out(spare11_buf_32x_unused));
5747cl_u1_nand3_8x spare11_nand3_8x (.in0(1'b1),
5748 .in1(1'b1),
5749 .in2(1'b1),
5750 .out(spare11_nand3_8x_unused));
5751cl_u1_inv_8x spare11_inv_8x (.in(1'b1),
5752 .out(spare11_inv_8x_unused));
5753cl_u1_aoi22_4x spare11_aoi22_4x (.in00(1'b1),
5754 .in01(1'b1),
5755 .in10(1'b1),
5756 .in11(1'b1),
5757 .out(spare11_aoi22_4x_unused));
5758cl_u1_buf_8x spare11_buf_8x (.in(1'b1),
5759 .out(spare11_buf_8x_unused));
5760cl_u1_oai22_4x spare11_oai22_4x (.in00(1'b1),
5761 .in01(1'b1),
5762 .in10(1'b1),
5763 .in11(1'b1),
5764 .out(spare11_oai22_4x_unused));
5765cl_u1_inv_16x spare11_inv_16x (.in(1'b1),
5766 .out(spare11_inv_16x_unused));
5767cl_u1_nand2_16x spare11_nand2_16x (.in0(1'b1),
5768 .in1(1'b1),
5769 .out(spare11_nand2_16x_unused));
5770cl_u1_nor3_4x spare11_nor3_4x (.in0(1'b0),
5771 .in1(1'b0),
5772 .in2(1'b0),
5773 .out(spare11_nor3_4x_unused));
5774cl_u1_nand2_8x spare11_nand2_8x (.in0(1'b1),
5775 .in1(1'b1),
5776 .out(spare11_nand2_8x_unused));
5777cl_u1_buf_16x spare11_buf_16x (.in(1'b1),
5778 .out(spare11_buf_16x_unused));
5779cl_u1_nor2_16x spare11_nor2_16x (.in0(1'b0),
5780 .in1(1'b0),
5781 .out(spare11_nor2_16x_unused));
5782cl_u1_inv_32x spare11_inv_32x (.in(1'b1),
5783 .out(spare11_inv_32x_unused));
5784assign scan_out = so_11;
5785
5786
5787
5788endmodule
5789