Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / tlu / rtl / tlu_asi_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: tlu_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 tlu_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 lsu_asi_clken,
45 lsu_tlu_pmen,
46 mbi_tsa0_write_en,
47 mbi_tsa1_write_en,
48 mbi_tca_write_en,
49 mbi_addr,
50 mbi_run,
51 mbi_wdata,
52 mbi_tsa0_read_en,
53 mbi_tsa1_read_en,
54 mbi_tca_read_en,
55 mbi_tlu_cmpsel,
56 mbd_compare,
57 error_inject_enable,
58 error_inject_tccu,
59 error_inject_tsau,
60 error_inject_mask,
61 lsu_rngf_cdbus,
62 pct0_asi_data,
63 pct1_asi_data,
64 trl0_asi_data,
65 trl1_asi_data,
66 tlu_ceter_pscce,
67 tsd_hpstate_hpriv,
68 tsd_pstate_priv,
69 tsd0_asi_data,
70 tsd1_asi_data,
71 tel0_ecc,
72 tel0_tsac,
73 tel0_tsau,
74 tel1_ecc,
75 tel1_tsac,
76 tel1_tsau,
77 tic_asi_data,
78 cel_ecc,
79 cer_asi_data,
80 cel_tccp,
81 cel_tcup,
82 mmu_asi_data,
83 mmu_asi_read,
84 mmu_asi_cecc,
85 mmu_asi_uecc,
86 dfd_desr_f,
87 dfd_fesr_f,
88 tlu_lsu_clear_ctl_reg_,
89 hver_mask_major_rev,
90 hver_mask_minor_rev,
91 wmr_scan_out,
92 scan_out,
93 asi_error_tccu,
94 asi_error_tsau,
95 asi_error_mask,
96 asi_tsa_rd_addr,
97 asi_tsa_rd_iqr_ecc,
98 asi_tsa_tid,
99 asi_rd_asireg,
100 asi_wr_asireg,
101 asi_rd_tick,
102 asi_wr_tick,
103 asi_rd_pc,
104 asi_wr_set_softint,
105 asi_wr_clear_softint,
106 asi_rd_softint,
107 asi_wr_softint,
108 asi_tca_addr,
109 asi_tca_addr_valid,
110 asi_tca_wr,
111 asi_wr_mondo_head,
112 asi_wr_mondo_tail,
113 asi_wr_device_head,
114 asi_wr_device_tail,
115 asi_wr_res_err_head,
116 asi_wr_res_err_tail,
117 asi_wr_nonres_err_head,
118 asi_wr_nonres_err_tail,
119 asi_rd_iqr_reg,
120 asi_rd_iqr,
121 asi_rd_tpc,
122 asi_wr_tpc,
123 asi_rd_tnpc,
124 asi_wr_tnpc,
125 asi_rd_tstate,
126 asi_wr_tstate,
127 asi_rd_tt,
128 asi_wr_tt,
129 asi_wr_tba,
130 asi_wr_pstate,
131 asi_rd_tl,
132 asi_wr_tl,
133 asi_rd_pil,
134 asi_wr_pil,
135 asi_rd_gl,
136 asi_wr_gl,
137 asi_wr_hpstate,
138 asi_rd_htstate,
139 asi_wr_htstate,
140 asi_rd_hintp,
141 asi_wr_hintp,
142 asi_wr_htba,
143 asi_rd_h_pstate_tba,
144 asi_rd_tba_htba,
145 asi_rd_pstate_hpstate,
146 asi_preempt_trap,
147 asi_preempt_done_retry,
148 asi_rmw_tsa,
149 asi_wr_int_rec,
150 asi_wr_any_int_rec,
151 asi_rd_inc_vec_2,
152 asi_int_rec_mux_sel_in,
153 asi_rd_int_rec,
154 asi_rd_inc_vec,
155 asi_check_qr_exc,
156 asi_tca_wr_data_63,
157 asi_wr_data_0,
158 asi_wr_data_1,
159 asi_tsd0_wr_data_12,
160 asi_tsd0_wr_data_10_08,
161 asi_tsd0_wr_data_05_00,
162 asi_tsd1_wr_data_12,
163 asi_tsd1_wr_data_10_08,
164 asi_tsd1_wr_data_05_00,
165 asi_tsa_wr_data,
166 asi_tsa_wr_data_npc_oor_va,
167 asi_tsa_wr_data_npc_nonseq,
168 asi_rd_cerer,
169 asi_rd_ceter,
170 asi_wr_cerer,
171 asi_ceter_tid,
172 asi_wr_ceter,
173 asi_rd_tid,
174 asi_rd_isfsr,
175 asi_rd_dsfsr,
176 asi_rd_dsfar,
177 asi_rd_desr,
178 asi_rd_fesr,
179 asi_wr_isfsr,
180 asi_wr_dsfsr,
181 asi_wr_dsfar,
182 asi_rd_iaw,
183 asi_wr_iaw,
184 asi_decr,
185 asi_ece_exc,
186 asi_eue_exc,
187 asi_ecc_tid,
188 asi_tsac,
189 asi_tsau,
190 asi_tsacu,
191 asi_tsacu_tid,
192 asi_irl_cleared,
193 asi_rd_stage_1,
194 asi_trl_pstate_en,
195 asi_stg1_en,
196 asi_mbist_ecc_in,
197 asi_mbist_tsa_ecc_in,
198 asi_mbist_run,
199 asi_mbist_cmpsel,
200 asi_mbd_compare_data,
201 asi_mbd_sel_tsd0,
202 asi_mbd_sel_tsd1,
203 asi_mbd_sel_tic,
204 asi_mbist_addr,
205 asi_mbist_tsa_rd_en,
206 asi_mbist_tsa_wr_en,
207 asi_mbist_tel_en,
208 asi_tccup_in,
209 asi_tccud_in,
210 asi_immu_enable,
211 asi_spec_enable,
212 asi_halt,
213 asi_clear_spu_trap_req,
214 tlu_spec_enable,
215 tlu_tca_tid,
216 tlu_tca_index,
217 tlu_mbi_tsa0_fail,
218 tlu_mbi_tsa1_fail,
219 tlu_mbi_tca_fail,
220 tlu_rngf_cdbus,
221 tlu_rngf_cdbus_error);
222wire pce_ov;
223wire stop;
224wire siclk;
225wire soclk;
226wire se;
227wire l1clk;
228wire pmen_lat_scanin;
229wire pmen_lat_scanout;
230wire pmen;
231wire stg1_en_in;
232wire stg1_en_lat_scanin;
233wire stg1_en_lat_scanout;
234wire stg1_en;
235wire stg2_en_in;
236wire stg2_en;
237wire stg2_en_lat_scanin;
238wire stg2_en_lat_scanout;
239wire stg3_en_lat_scanin;
240wire stg3_en_lat_scanout;
241wire stg3_en;
242wire stg4_en_lat_scanin;
243wire stg4_en_lat_scanout;
244wire pstg4_en;
245wire stg4_en;
246wire [64:0] data_4;
247wire pm1_en;
248wire mbist_run;
249wire l1clk_pm1;
250wire pm2_en;
251wire l1clk_pm2;
252wire mbist_run_lat_scanin;
253wire mbist_run_lat_scanout;
254wire mbist_tsa0_write_lat_scanin;
255wire mbist_tsa0_write_lat_scanout;
256wire mbist_tsa0_wr_en;
257wire mbist_tsa1_write_lat_scanin;
258wire mbist_tsa1_write_lat_scanout;
259wire mbist_tsa1_wr_en;
260wire mbist_tca_write_lat_scanin;
261wire mbist_tca_write_lat_scanout;
262wire mbist_tca_wr_en;
263wire mbist_addr_lat_scanin;
264wire mbist_addr_lat_scanout;
265wire [4:0] mbist_addr;
266wire [7:0] mbist_wdata;
267wire [63:0] data_1;
268wire mbist_tsa0_read_lat_scanin;
269wire mbist_tsa0_read_lat_scanout;
270wire mbist_tsa0_rd_en;
271wire mbist_tsa1_read_lat_scanin;
272wire mbist_tsa1_read_lat_scanout;
273wire mbist_tsa1_rd_en;
274wire mbist_tca_read_lat_scanin;
275wire mbist_tca_read_lat_scanout;
276wire mbist_tca_rd_en;
277wire mbist_cmpsel_lat_scanin;
278wire mbist_cmpsel_lat_scanout;
279wire [3:0] mbist_cmpsel;
280wire [7:0] mbist_wdata_2;
281wire mbist_tsa1_rd_en_2;
282wire mbist_tsa0_rd_en_2;
283wire mbist_addr_2_lat_scanin;
284wire mbist_addr_2_lat_scanout;
285wire [4:0] mbist_addr_2;
286wire mbist_tsa0_read_2_lat_scanin;
287wire mbist_tsa0_read_2_lat_scanout;
288wire mbist_tsa1_read_2_lat_scanin;
289wire mbist_tsa1_read_2_lat_scanout;
290wire mbist_tca_read_2_lat_scanin;
291wire mbist_tca_read_2_lat_scanout;
292wire mbist_tca_rd_en_2;
293wire mbist_cmpsel_2_lat_scanin;
294wire mbist_cmpsel_2_lat_scanout;
295wire [3:0] mbist_cmpsel_2;
296wire mbist_wdata_2_lat_scanin;
297wire mbist_wdata_2_lat_scanout;
298wire mbist_tsa0_read_3_lat_scanin;
299wire mbist_tsa0_read_3_lat_scanout;
300wire mbist_tsa0_rd_en_3;
301wire mbist_tsa1_read_3_lat_scanin;
302wire mbist_tsa1_read_3_lat_scanout;
303wire mbist_tsa1_rd_en_3;
304wire mbist_tca_read_3_lat_scanin;
305wire mbist_tca_read_3_lat_scanout;
306wire mbist_tca_rd_en_3;
307wire mbist_wdata_3_lat_scanin;
308wire mbist_wdata_3_lat_scanout;
309wire [7:0] mbist_wdata_3;
310wire rd_tsa_pc_2;
311wire rd_tsa_nopc_2;
312wire rd_tsa_ecc_2;
313wire rd_tsa_pc_3;
314wire rd_tsa_nopc_3;
315wire rd_tsa_ecc_3;
316wire wr_tsa_2;
317wire wr_tsa_3;
318wire mbist_tsa0_read_4_lat_scanin;
319wire mbist_tsa0_read_4_lat_scanout;
320wire mbist_tsa0_rd_en_4;
321wire mbist_tsa1_read_4_lat_scanin;
322wire mbist_tsa1_read_4_lat_scanout;
323wire mbist_tsa1_rd_en_4;
324wire [7:0] compare_data_in;
325wire mbist_tsa_3;
326wire compare_data_lat_scanin;
327wire compare_data_lat_scanout;
328wire [7:0] compare_data;
329wire tsa0_fail_in;
330wire tsa1_fail_in;
331wire tca_fail_in;
332wire tsa0_fail_lat_scanin;
333wire tsa0_fail_lat_scanout;
334wire tsa0_fail;
335wire tsa1_fail_lat_scanin;
336wire tsa1_fail_lat_scanout;
337wire tsa1_fail;
338wire tca_fail_lat_scanin;
339wire tca_fail_lat_scanout;
340wire tca_fail;
341wire compare_lat_scanin;
342wire compare_lat_scanout;
343wire compare;
344wire ctl_0;
345wire [63:48] data_0;
346wire data_0_59_unused;
347wire data_0_57_unused;
348wire data_0_56_unused;
349wire asi_0;
350wire pr_0;
351wire hpr_0;
352wire pr_tstack_0;
353wire wr_gl_0;
354wire htstate_0;
355wire asi_25_0;
356wire tsa_diag_0;
357wire [1:0] preempt_done_retry_in;
358wire [1:0] preempt_trap_in;
359wire wr_gl_2;
360wire [63:0] data_2;
361wire preempt_trap_lat_scanin;
362wire preempt_trap_lat_scanout;
363wire [1:0] preempt_trap;
364wire [1:0] preempt_done_retry;
365wire sel_lsu;
366wire rd_clesr;
367wire rd_clfesr;
368wire [63:0] clesr_data;
369wire [63:0] clfesr_in;
370wire [63:48] clfesr_data;
371wire clfesr_lat_wmr_scanin;
372wire clfesr_lat_wmr_scanout;
373wire [63:0] data_1_in;
374wire rng_stg1_data_scanin;
375wire rng_stg1_data_scanout;
376wire ctl_1_lat_scanin;
377wire ctl_1_lat_scanout;
378wire ctl_1;
379wire rd_stage_1;
380wire hpstatehpriv_lat_scanin;
381wire hpstatehpriv_lat_scanout;
382wire [7:0] hpstatehpriv;
383wire pstatepriv_lat_scanin;
384wire pstatepriv_lat_scanout;
385wire [7:0] pstatepriv;
386wire hpstate_hpriv;
387wire [7:0] rd_tid_dec;
388wire pstate_priv;
389wire asi;
390wire asr;
391wire pr;
392wire hpr;
393wire asi_2;
394wire ctl_2;
395wire asr_2;
396wire pr_2;
397wire hpr_2;
398wire fast_asi;
399wire superfast_hpr_2;
400wire mondo_head;
401wire rd_mondo_head;
402wire wr_mondo_head;
403wire mondo_tail;
404wire rd_mondo_tail;
405wire wr_mondo_tail;
406wire device_head;
407wire rd_device_head;
408wire wr_device_head;
409wire device_tail;
410wire rd_device_tail;
411wire wr_device_tail;
412wire res_err_head;
413wire rd_res_err_head;
414wire wr_res_err_head;
415wire res_err_tail;
416wire rd_res_err_tail;
417wire wr_res_err_tail;
418wire nonres_err_head;
419wire rd_nonres_err_head;
420wire wr_nonres_err_head;
421wire nonres_err_tail;
422wire rd_nonres_err_tail;
423wire wr_nonres_err_tail;
424wire lsu_ctl;
425wire wr_lsu_ctl;
426wire decr;
427wire rd_decr;
428wire wr_decr;
429wire esr;
430wire desr;
431wire rd_desr;
432wire fesr;
433wire rd_fesr;
434wire clesr;
435wire clfesr;
436wire cerer;
437wire rd_cerer;
438wire wr_cerer;
439wire ceter;
440wire rd_ceter;
441wire wr_ceter;
442wire isfsr;
443wire rd_isfsr;
444wire wr_isfsr;
445wire iaw_2;
446wire rd_iaw_2;
447wire wr_iaw_2;
448wire dsfsr;
449wire rd_dsfsr;
450wire wr_dsfsr;
451wire dsfar;
452wire rd_dsfar;
453wire wr_dsfar;
454wire tca_diag;
455wire rd_tca_ecc;
456wire rd_tca_data;
457wire tsa_diag;
458wire rd_tsa_ecc;
459wire int_rec;
460wire rd_int_rec;
461wire wr_int_rec;
462wire inc_vec;
463wire rd_inc_vec;
464wire asireg_2;
465wire rd_asireg_2;
466wire wr_asireg_2;
467wire tick;
468wire rd_tick;
469wire tick_npt_1_;
470wire priv_action;
471wire wr_tick;
472wire [7:0] tick_npt_;
473wire pc_2;
474wire rd_pc_2;
475wire set_softint;
476wire wr_set_softint;
477wire clear_softint;
478wire wr_clear_softint;
479wire softint;
480wire rd_softint;
481wire wr_softint;
482wire tick_cmpr;
483wire rd_tick_cmpr;
484wire wr_tick_cmpr;
485wire stick_cmpr;
486wire rd_stick_cmpr;
487wire wr_stick_cmpr;
488wire tpc;
489wire rd_tpc;
490wire wr_tpc;
491wire tnpc;
492wire rd_tnpc;
493wire wr_tnpc;
494wire tstate;
495wire rd_tstate;
496wire wr_tstate;
497wire tt;
498wire rd_tt;
499wire wr_tt;
500wire tba_2;
501wire rd_tba_2;
502wire wr_tba_2;
503wire pstate;
504wire wr_pstate;
505wire pstate_2;
506wire rd_pstate_2;
507wire tl;
508wire rd_tl;
509wire wr_tl;
510wire pil;
511wire rd_pil;
512wire wr_pil;
513wire gl;
514wire rd_gl;
515wire wr_gl;
516wire hpstate;
517wire wr_hpstate;
518wire hpstate_2;
519wire rd_hpstate_2;
520wire htstate;
521wire rd_htstate;
522wire wr_htstate;
523wire hintp;
524wire rd_hintp;
525wire wr_hintp;
526wire htba_2;
527wire rd_htba_2;
528wire wr_htba_2;
529wire hver;
530wire rd_hver;
531wire rd_halt;
532wire wr_halt;
533wire hstick_cmpr;
534wire rd_hstick_cmpr;
535wire wr_hstick_cmpr;
536wire fast_tsa_rd_iqr;
537wire fast_rd_tsa_ecc;
538wire fast_tsa_rd_iqr_res_nonres;
539wire rd_tca;
540wire wr_tca;
541wire [4:3] tca_rd_addr;
542wire [4:0] tca_addr;
543wire wr_hstick_cmpr_2;
544wire wr_stick_cmpr_2;
545wire wr_tca_2;
546wire rd_tsa_nopc;
547wire rd_tsa_pc;
548wire wr_tstate_2;
549wire wr_tt_2;
550wire wr_htstate_2;
551wire wr_mondo_head_2;
552wire wr_mondo_tail_2;
553wire wr_device_head_2;
554wire wr_device_tail_2;
555wire wr_res_err_head_2;
556wire wr_res_err_tail_2;
557wire wr_nonres_err_head_2;
558wire wr_nonres_err_tail_2;
559wire wr_tpc_2;
560wire wr_tnpc_2;
561wire wr_tstate_3;
562wire wr_tt_3;
563wire wr_htstate_3;
564wire wr_mondo_head_3;
565wire wr_mondo_tail_3;
566wire wr_device_head_3;
567wire wr_device_tail_3;
568wire wr_res_err_head_3;
569wire wr_res_err_tail_3;
570wire wr_nonres_err_head_3;
571wire wr_nonres_err_tail_3;
572wire wr_tpc_3;
573wire wr_tnpc_3;
574wire [2:0] rd_iqr_2;
575wire rd_device_head_2;
576wire rd_nonres_err_head_2;
577wire rd_mondo_tail_2;
578wire rd_res_err_tail_2;
579wire rd_device_tail_2;
580wire rd_nonres_err_tail_2;
581wire rd_iqr_reg_2;
582wire rd_res_err_head_2;
583wire rd_mondo_head_2;
584wire rd_tpc_2;
585wire rd_tnpc_2;
586wire rd_tstate_2;
587wire rd_tt_2;
588wire rd_htstate_2;
589wire rd_cerer_2;
590wire rd_ceter_2;
591wire rd_inc_vec_2;
592wire [7:0] wr_tid_dec;
593wire rd_tick_3;
594wire rd_cth;
595wire rd_trl;
596wire rd_tic;
597wire rd_tsd_2;
598wire rd_tba_htba_2;
599wire [1:0] rmw_tsa_in;
600wire [63:0] hver_value;
601wire [63:0] tic_ecc;
602wire [63:0] data_err_1;
603wire [63:0] decr_data;
604wire [63:46] decr_reg;
605wire [63:0] dsfar_data;
606wire [63:0] fesr_data;
607wire [63:0] desr_data;
608wire [63:0] isfsr_data;
609wire [63:0] dsfsr_data;
610wire sel_data1;
611wire rd_hver_2;
612wire rd_cth_2;
613wire rd_tca_ecc_2;
614wire rd_tca_data_2;
615wire rd_desr_2;
616wire rd_fesr_2;
617wire rd_dsfar_2;
618wire rd_isfsr_2;
619wire rd_dsfsr_2;
620wire rd_decr_2;
621wire [63:0] data_2_in;
622wire [64:0] tic_data;
623wire stg2_data_lat_scanin;
624wire stg2_data_lat_scanout;
625wire stg2_ctl_lat_scanin;
626wire stg2_ctl_lat_scanout;
627wire rd_tic_2;
628wire rd_tick_2;
629wire rd_softint_2;
630wire rd_tl_2;
631wire rd_gl_2;
632wire rd_pil_2;
633wire rd_hintp_2;
634wire rd_trl_2;
635wire wr_int_rec_2;
636wire wr_tick_2;
637wire wr_set_softint_2;
638wire wr_clear_softint_2;
639wire wr_softint_2;
640wire wr_pstate_2;
641wire wr_tl_2;
642wire wr_pil_2;
643wire wr_hpstate_2;
644wire wr_hintp_2;
645wire wr_cerer_2;
646wire wr_ceter_2;
647wire wr_isfsr_2;
648wire wr_dsfsr_2;
649wire wr_dsfar_2;
650wire wr_decr_2;
651wire wr_lsu_ctl_2;
652wire wr_tid_dec_lat_scanin;
653wire wr_tid_dec_lat_scanout;
654wire [47:0] mbist_tsa_wdata;
655wire irl_any_cleared_in;
656wire irl_any_cleared_lat_scanin;
657wire irl_any_cleared_lat_scanout;
658wire irl_any_cleared;
659wire [7:0] tid_dec_3;
660wire [64:0] data_3;
661wire [7:0] tick_npt_in_;
662wire tick_npt_inv_lat_scanin;
663wire tick_npt_inv_lat_scanout;
664wire tick_npt_2_;
665wire tick_npt_3_inv_lat_scanin;
666wire tick_npt_3_inv_lat_scanout;
667wire tick_npt_3_;
668wire [63:46] decr_reg_in;
669wire decr_lat_scanin;
670wire decr_lat_scanout;
671wire rd_pct_2;
672wire [64:0] trl_data;
673wire [64:0] tsd_data;
674wire [64:0] tba_htba_data;
675wire [64:0] tsa_nopc_data;
676wire [64:0] tsa_pc_data;
677wire [64:0] tsa_ecc_data;
678wire [64:0] tic_data_for_3;
679wire [64:0] tick_data;
680wire [64:0] pct_data;
681wire [64:0] rngf_cdbus_2;
682wire no_rd_3;
683wire rd_trl_3;
684wire rd_tsd_3;
685wire rd_tba_htba_3;
686wire rd_tic_3;
687wire rd_pct_3;
688wire [64:0] data_3_in;
689wire rd_tca_diag_2;
690wire rng_stg3_scanin;
691wire rng_stg3_scanout;
692wire tsa_wr_lat_scanin;
693wire tsa_wr_lat_scanout;
694wire rd_tca_diag_3;
695wire wr_iqr_3;
696wire check_ecc;
697wire tsacu_in;
698wire kill_write_if_error_in;
699wire ecc_lat_scanin;
700wire ecc_lat_scanout;
701wire ptsacu;
702wire kill_write_if_error;
703wire tsac;
704wire tsau;
705wire tca_rd_addr_2_lat_scanin;
706wire tca_rd_addr_2_lat_scanout;
707wire [4:3] tca_rd_addr_2;
708wire tca_rd_addr_3_lat_scanin;
709wire tca_rd_addr_3_lat_scanout;
710wire [4:3] tca_rd_addr_3;
711wire tca_rd_addr_4_lat_scanin;
712wire tca_rd_addr_4_lat_scanout;
713wire [4:3] tca_rd_addr_4;
714wire [64:0] rngf_cdbus_3;
715wire [64:0] data_4_in;
716wire error_4_in;
717wire rng_stg4_scanin;
718wire rng_stg4_scanout;
719wire error_4_lat_scanin;
720wire error_4_lat_scanout;
721wire error_4;
722wire [3:0] check_qr_exc_in;
723wire check_qr_exc_lat_scanin;
724wire check_qr_exc_lat_scanout;
725wire [3:0] check_qr_exc;
726wire error_inject_lat_scanin;
727wire error_inject_lat_scanout;
728wire error_enable;
729wire error_tccu;
730wire error_tsau;
731wire [7:0] error_mask;
732wire [7:0] write_lsu_ctl;
733wire [7:0] hold_lsu_ctl;
734wire [7:0] spec_enable_in;
735wire [7:0] spec_enable;
736wire spec_enable_lat_scanin;
737wire spec_enable_lat_scanout;
738wire [7:0] immu_enable_in;
739wire [7:0] immu_enable;
740wire immu_enable_lat_scanin;
741wire immu_enable_lat_scanout;
742wire spares_scanin;
743wire spares_scanout;
744wire rd_halt_2;
745wire wr_halt_2;
746wire [6:0] unused;
747
748
749
750
751input l2clk;
752input scan_in;
753input tcu_pce_ov;
754input spc_aclk;
755input spc_bclk;
756input tcu_scan_en;
757
758input spc_aclk_wmr; // Warm reset (non)scan
759input wmr_scan_in;
760
761input lsu_asi_clken; // Power management
762input lsu_tlu_pmen; // Power management
763
764// MBIST
765input mbi_tsa0_write_en; // MBIST write control
766input mbi_tsa1_write_en; // MBIST write control
767input mbi_tca_write_en; // MBIST write control
768input [4:0] mbi_addr; // 32 entry addressability for MBIST
769input mbi_run; // Select MBIST controls
770input [7:0] mbi_wdata; // MBIST write data
771input mbi_tsa0_read_en; // MBIST read control
772input mbi_tsa1_read_en; // MBIST read control
773input mbi_tca_read_en; // MBIST read control
774input [3:0] mbi_tlu_cmpsel; // Mux (NPE) between 32 bit chunks
775input mbd_compare;
776
777input error_inject_enable;
778input error_inject_tccu;
779input error_inject_tsau;
780input [7:0] error_inject_mask;
781
782input [64:0] lsu_rngf_cdbus; // control/data bus from lsu
783
784input [48:2] pct0_asi_data;
785input [48:2] pct1_asi_data;
786
787input [16:0] trl0_asi_data;
788input [16:0] trl1_asi_data;
789
790input [7:0] tlu_ceter_pscce;
791
792input [7:0] tsd_hpstate_hpriv;
793input [7:0] tsd_pstate_priv;
794input [1:0] tsd0_asi_data;
795input [1:0] tsd1_asi_data;
796input [15:0] tel0_ecc;
797input tel0_tsac;
798input tel0_tsau;
799input [15:0] tel1_ecc;
800input tel1_tsac;
801input tel1_tsau;
802
803input [63:0] tic_asi_data;
804input [7:0] cel_ecc;
805
806input [63:0] cer_asi_data;
807
808input cel_tccp;
809input cel_tcup;
810
811input [64:0] mmu_asi_data; // ASI read data for fast bus
812input mmu_asi_read; // Valid for MMU ASI read
813input mmu_asi_cecc; // Correctable ECC error (stg 4)
814input mmu_asi_uecc; // Uncorrectable ECC error (stg 4)
815
816input [7:0] dfd_desr_f;
817input [7:0] dfd_fesr_f;
818
819input [7:0] tlu_lsu_clear_ctl_reg_;
820
821input [3:0] hver_mask_major_rev; // An input to asi
822input [3:0] hver_mask_minor_rev; // An input to spc
823
824
825
826output wmr_scan_out;
827
828output scan_out;
829
830output asi_error_tccu;
831output asi_error_tsau;
832output [7:0] asi_error_mask;
833
834output [4:0] asi_tsa_rd_addr;
835output asi_tsa_rd_iqr_ecc;
836output [1:0] asi_tsa_tid;
837output [7:0] asi_rd_asireg;
838output [7:0] asi_wr_asireg;
839output asi_rd_tick;
840output asi_wr_tick;
841output [7:0] asi_rd_pc;
842output [7:0] asi_wr_set_softint;
843output [7:0] asi_wr_clear_softint;
844output [7:0] asi_rd_softint;
845output [7:0] asi_wr_softint;
846output [4:0] asi_tca_addr; // Used for [H][S]TICK_CMPR
847output asi_tca_addr_valid;
848output asi_tca_wr;
849output [1:0] asi_wr_mondo_head;
850output [1:0] asi_wr_mondo_tail;
851output [1:0] asi_wr_device_head;
852output [1:0] asi_wr_device_tail;
853output [1:0] asi_wr_res_err_head;
854output [1:0] asi_wr_res_err_tail;
855output [1:0] asi_wr_nonres_err_head;
856output [1:0] asi_wr_nonres_err_tail;
857output [1:0] asi_rd_iqr_reg;
858output [2:0] asi_rd_iqr; // Read any interrupt queue reg
859output [1:0] asi_rd_tpc; // encoded TID for IQR read
860output [1:0] asi_wr_tpc;
861output [1:0] asi_rd_tnpc;
862output [1:0] asi_wr_tnpc;
863output [1:0] asi_rd_tstate;
864output [1:0] asi_wr_tstate;
865output [1:0] asi_rd_tt;
866output [1:0] asi_wr_tt;
867output [7:0] asi_wr_tba;
868output [7:0] asi_wr_pstate;
869output [7:0] asi_rd_tl;
870output [7:0] asi_wr_tl;
871output [7:0] asi_rd_pil;
872output [7:0] asi_wr_pil;
873output [7:0] asi_rd_gl;
874output [7:0] asi_wr_gl;
875output [7:0] asi_wr_hpstate;
876output [1:0] asi_rd_htstate;
877output [1:0] asi_wr_htstate;
878output [7:0] asi_rd_hintp;
879output [7:0] asi_wr_hintp;
880output [7:0] asi_wr_htba;
881output [2:0] asi_rd_h_pstate_tba;
882output [1:0] asi_rd_tba_htba;
883output [1:0] asi_rd_pstate_hpstate;
884output [1:0] asi_preempt_trap;
885output [1:0] asi_preempt_done_retry;
886output [1:0] asi_rmw_tsa;
887
888output [7:0] asi_wr_int_rec; // Write Interrupt Receive Register
889output asi_wr_any_int_rec; // Write any Interrupt Receive Register
890output [7:0] asi_rd_inc_vec_2; // Update Interrupt Vector Register
891output [2:0] asi_int_rec_mux_sel_in;
892output asi_rd_int_rec; // Read for any thread
893output asi_rd_inc_vec; // Read for any thread
894
895output [7:0] asi_check_qr_exc; // Check for Interrupt Queue Register
896 // head vs. tail mismatch
897
898output asi_tca_wr_data_63; // stored negative active
899output [63:0] asi_wr_data_0; // data to write
900output [62:0] asi_wr_data_1; // data to write
901output asi_tsd0_wr_data_12;
902output [10:8] asi_tsd0_wr_data_10_08;
903output [5:0] asi_tsd0_wr_data_05_00;
904output asi_tsd1_wr_data_12;
905output [10:8] asi_tsd1_wr_data_10_08;
906output [5:0] asi_tsd1_wr_data_05_00;
907output [47:0] asi_tsa_wr_data;
908output asi_tsa_wr_data_npc_oor_va;
909output asi_tsa_wr_data_npc_nonseq;
910
911output asi_rd_cerer;
912output asi_rd_ceter;
913output asi_wr_cerer;
914output [2:0] asi_ceter_tid;
915output asi_wr_ceter;
916
917output [2:0] asi_rd_tid;
918output asi_rd_isfsr;
919output asi_rd_dsfsr;
920output asi_rd_dsfar;
921output asi_rd_desr;
922output asi_rd_fesr;
923output [7:0] asi_wr_isfsr;
924output [7:0] asi_wr_dsfsr;
925output [7:0] asi_wr_dsfar;
926
927output asi_rd_iaw;
928output [1:0] asi_wr_iaw;
929
930output [63:46] asi_decr;
931
932output asi_ece_exc; // Correctable ECC error on ASI rd/wr
933output asi_eue_exc; // Uncorrectable ECC error on ASI rd/wr
934output [2:0] asi_ecc_tid; // TID for ECC error
935
936output asi_tsac; // For DSFSR
937output asi_tsau;
938output [1:0] asi_tsacu; // For killing TSA writes
939output [2:0] asi_tsacu_tid;
940
941output [7:0] asi_irl_cleared; // Int_Received Reg had bits cleared
942
943output asi_rd_stage_1; // Power management: read in stage 1
944output [1:0] asi_trl_pstate_en; // Power management: h/pstate flop
945output asi_stg1_en; // Power management: TCA wr data flop
946
947output [7:0] asi_mbist_ecc_in; // MBIST
948output [7:0] asi_mbist_tsa_ecc_in; // MBIST
949output asi_mbist_run; // MBIST
950output [3:0] asi_mbist_cmpsel; // MBIST
951output [7:0] asi_mbd_compare_data; // MBIST
952output asi_mbd_sel_tsd0; // MBIST
953output asi_mbd_sel_tsd1; // MBIST
954output asi_mbd_sel_tic; // MBIST
955output [4:0] asi_mbist_addr; // MBIST
956output [1:0] asi_mbist_tsa_rd_en; // MBIST
957output [1:0] asi_mbist_tsa_wr_en; // MBIST
958output [1:0] asi_mbist_tel_en; // MBIST
959
960output asi_tccup_in;
961output asi_tccud_in;
962
963output [7:0] asi_immu_enable;
964output [7:0] asi_spec_enable;
965
966output [7:0] asi_halt;
967output [7:0] asi_clear_spu_trap_req;
968
969output [7:0] tlu_spec_enable;
970
971output [2:0] tlu_tca_tid;
972output [1:0] tlu_tca_index; // Index for precise TCA errors
973
974output tlu_mbi_tsa0_fail; // MBIST
975output tlu_mbi_tsa1_fail; // MBIST
976output tlu_mbi_tca_fail; // MBIST
977
978output [64:0] tlu_rngf_cdbus; // 65 bit control/data bus
979 // 64 - ctl/data
980 // 63 - valid/hole
981 // 62 - ack
982 // 61:60 - 00-ASI, 01-ASR, 10-PR,11-HPR
983 // 59 - rd/wrx
984 // 58:56 - Thread ID
985 // 55:48 - ASI field
986 // 47:0 - Virtual Address
987output tlu_rngf_cdbus_error;
988
989
990
991//////////////////////////////////////////////////////////////////////
992
993assign pce_ov = tcu_pce_ov;
994assign stop = 1'b0;
995assign siclk = spc_aclk;
996assign soclk = spc_bclk;
997assign se = tcu_scan_en;
998
999
1000tlu_asi_ctl_l1clkhdr_ctl_macro free_clken (
1001 .l2clk (l2clk),
1002 .l1en (1'b1 ),
1003 .l1clk (l1clk),
1004 .pce_ov(pce_ov),
1005 .stop(stop),
1006 .se(se)
1007);
1008
1009
1010
1011//////////////////////////////////////////////////////////////////////////////
1012//
1013// Power management
1014//
1015
1016tlu_asi_ctl_msff_ctl_macro__width_1 pmen_lat (
1017 .scan_in(pmen_lat_scanin),
1018 .scan_out(pmen_lat_scanout),
1019 .din (lsu_tlu_pmen ),
1020 .dout (pmen ),
1021 .l1clk(l1clk),
1022 .siclk(siclk),
1023 .soclk(soclk)
1024);
1025
1026assign stg1_en_in =
1027 lsu_asi_clken;
1028
1029tlu_asi_ctl_msff_ctl_macro__width_1 stg1_en_lat (
1030 .scan_in(stg1_en_lat_scanin),
1031 .scan_out(stg1_en_lat_scanout),
1032 .din (stg1_en_in ),
1033 .dout (stg1_en ),
1034 .l1clk(l1clk),
1035 .siclk(siclk),
1036 .soclk(soclk)
1037);
1038
1039assign asi_stg1_en =
1040 stg1_en;
1041
1042assign stg2_en_in =
1043 (lsu_rngf_cdbus[64] & lsu_rngf_cdbus[63]) |
1044 (~lsu_rngf_cdbus[64] & stg2_en) |
1045 ~pmen;
1046
1047tlu_asi_ctl_msff_ctl_macro__width_1 stg2_en_lat (
1048 .scan_in(stg2_en_lat_scanin),
1049 .scan_out(stg2_en_lat_scanout),
1050 .din (stg2_en_in ),
1051 .dout (stg2_en ),
1052 .l1clk(l1clk),
1053 .siclk(siclk),
1054 .soclk(soclk)
1055);
1056
1057tlu_asi_ctl_msff_ctl_macro__width_1 stg3_en_lat (
1058 .scan_in(stg3_en_lat_scanin),
1059 .scan_out(stg3_en_lat_scanout),
1060 .din (stg2_en ),
1061 .dout (stg3_en ),
1062 .l1clk(l1clk),
1063 .siclk(siclk),
1064 .soclk(soclk)
1065);
1066
1067tlu_asi_ctl_msff_ctl_macro__width_1 stg4_en_lat (
1068 .scan_in(stg4_en_lat_scanin),
1069 .scan_out(stg4_en_lat_scanout),
1070 .din (stg3_en ),
1071 .dout (pstg4_en ),
1072 .l1clk(l1clk),
1073 .siclk(siclk),
1074 .soclk(soclk)
1075);
1076
1077// data_4[64] added to prevent stopping on control packet on MMU ITLB reload
1078assign stg4_en =
1079 pstg4_en | mmu_asi_read | data_4[64];
1080
1081// Have to enable during mbist because the write data goes through
1082// the functional path
1083assign pm1_en =
1084 stg1_en | stg2_en | stg3_en | stg4_en | mbist_run;
1085
1086tlu_asi_ctl_l1clkhdr_ctl_macro stg4_clken (
1087 .l2clk (l2clk ),
1088 .l1en (pm1_en ),
1089 .l1clk (l1clk_pm1 ),
1090 .pce_ov(pce_ov),
1091 .stop(stop),
1092 .se(se)
1093);
1094
1095
1096assign pm2_en =
1097 mbist_run | ~pmen;
1098
1099tlu_asi_ctl_l1clkhdr_ctl_macro mbist_clken (
1100 .l2clk (l2clk ),
1101 .l1en (pm2_en ),
1102 .l1clk (l1clk_pm2 ),
1103 .pce_ov(pce_ov),
1104 .stop(stop),
1105 .se(se)
1106);
1107
1108
1109
1110//////////////////////////////////////////////////////////////////////////////
1111//
1112// MBIST
1113//
1114
1115tlu_asi_ctl_msff_ctl_macro__width_1 mbist_run_lat (
1116 .scan_in(mbist_run_lat_scanin),
1117 .scan_out(mbist_run_lat_scanout),
1118 .din (mbi_run ),
1119 .dout (mbist_run ),
1120 .l1clk(l1clk),
1121 .siclk(siclk),
1122 .soclk(soclk)
1123);
1124
1125assign asi_mbist_run =
1126 mbist_run;
1127
1128tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa0_write_lat (
1129 .scan_in(mbist_tsa0_write_lat_scanin),
1130 .scan_out(mbist_tsa0_write_lat_scanout),
1131 .l1clk (l1clk_pm2 ),
1132 .din (mbi_tsa0_write_en ),
1133 .dout (mbist_tsa0_wr_en ),
1134 .siclk(siclk),
1135 .soclk(soclk)
1136);
1137
1138tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa1_write_lat (
1139 .scan_in(mbist_tsa1_write_lat_scanin),
1140 .scan_out(mbist_tsa1_write_lat_scanout),
1141 .l1clk (l1clk_pm2 ),
1142 .din (mbi_tsa1_write_en ),
1143 .dout (mbist_tsa1_wr_en ),
1144 .siclk(siclk),
1145 .soclk(soclk)
1146);
1147
1148tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tca_write_lat (
1149 .scan_in(mbist_tca_write_lat_scanin),
1150 .scan_out(mbist_tca_write_lat_scanout),
1151 .l1clk (l1clk_pm2 ),
1152 .din (mbi_tca_write_en ),
1153 .dout (mbist_tca_wr_en ),
1154 .siclk(siclk),
1155 .soclk(soclk)
1156);
1157
1158tlu_asi_ctl_msff_ctl_macro__width_5 mbist_addr_lat (
1159 .scan_in(mbist_addr_lat_scanin),
1160 .scan_out(mbist_addr_lat_scanout),
1161 .l1clk (l1clk_pm2 ),
1162 .din (mbi_addr [4:0] ),
1163 .dout (mbist_addr [4:0] ),
1164 .siclk(siclk),
1165 .soclk(soclk)
1166);
1167
1168assign mbist_wdata[7:0] =
1169 data_1[7:0];
1170
1171tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa0_read_lat (
1172 .scan_in(mbist_tsa0_read_lat_scanin),
1173 .scan_out(mbist_tsa0_read_lat_scanout),
1174 .l1clk (l1clk_pm2 ),
1175 .din (mbi_tsa0_read_en ),
1176 .dout (mbist_tsa0_rd_en ),
1177 .siclk(siclk),
1178 .soclk(soclk)
1179);
1180
1181tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa1_read_lat (
1182 .scan_in(mbist_tsa1_read_lat_scanin),
1183 .scan_out(mbist_tsa1_read_lat_scanout),
1184 .l1clk (l1clk_pm2 ),
1185 .din (mbi_tsa1_read_en ),
1186 .dout (mbist_tsa1_rd_en ),
1187 .siclk(siclk),
1188 .soclk(soclk)
1189);
1190
1191tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tca_read_lat (
1192 .scan_in(mbist_tca_read_lat_scanin),
1193 .scan_out(mbist_tca_read_lat_scanout),
1194 .l1clk (l1clk_pm2 ),
1195 .din (mbi_tca_read_en ),
1196 .dout (mbist_tca_rd_en ),
1197 .siclk(siclk),
1198 .soclk(soclk)
1199);
1200
1201tlu_asi_ctl_msff_ctl_macro__width_4 mbist_cmpsel_lat (
1202 .scan_in(mbist_cmpsel_lat_scanin),
1203 .scan_out(mbist_cmpsel_lat_scanout),
1204 .l1clk (l1clk_pm2 ),
1205 .din (mbi_tlu_cmpsel [3:0] ),
1206 .dout (mbist_cmpsel [3:0] ),
1207 .siclk(siclk),
1208 .soclk(soclk)
1209);
1210
1211assign asi_mbist_ecc_in[7:0] =
1212 mbist_wdata[7:0] & {8 {mbist_run}};
1213
1214assign asi_mbist_tsa_ecc_in[7:0] =
1215 mbist_wdata_2[7:0] & {8 {mbist_run}};
1216
1217assign asi_mbist_addr[4:0] =
1218 mbist_addr[4:0];
1219
1220assign asi_mbist_tsa_rd_en[1:0] =
1221 {2 {mbist_run}} & {mbist_tsa1_rd_en_2, mbist_tsa0_rd_en_2};
1222
1223assign asi_mbist_tsa_wr_en[1:0] =
1224 {2 {mbist_run}} & {mbist_tsa1_wr_en, mbist_tsa0_wr_en};
1225
1226
1227tlu_asi_ctl_msff_ctl_macro__width_5 mbist_addr_2_lat (
1228 .scan_in(mbist_addr_2_lat_scanin),
1229 .scan_out(mbist_addr_2_lat_scanout),
1230 .l1clk (l1clk_pm2 ),
1231 .din (mbist_addr [4:0] ),
1232 .dout (mbist_addr_2 [4:0] ),
1233 .siclk(siclk),
1234 .soclk(soclk)
1235);
1236
1237
1238tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa0_read_2_lat (
1239 .scan_in(mbist_tsa0_read_2_lat_scanin),
1240 .scan_out(mbist_tsa0_read_2_lat_scanout),
1241 .l1clk (l1clk_pm2 ),
1242 .din (mbist_tsa0_rd_en ),
1243 .dout (mbist_tsa0_rd_en_2 ),
1244 .siclk(siclk),
1245 .soclk(soclk)
1246);
1247
1248tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa1_read_2_lat (
1249 .scan_in(mbist_tsa1_read_2_lat_scanin),
1250 .scan_out(mbist_tsa1_read_2_lat_scanout),
1251 .l1clk (l1clk_pm2 ),
1252 .din (mbist_tsa1_rd_en ),
1253 .dout (mbist_tsa1_rd_en_2 ),
1254 .siclk(siclk),
1255 .soclk(soclk)
1256);
1257
1258tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tca_read_2_lat (
1259 .scan_in(mbist_tca_read_2_lat_scanin),
1260 .scan_out(mbist_tca_read_2_lat_scanout),
1261 .l1clk (l1clk_pm2 ),
1262 .din (mbist_tca_rd_en ),
1263 .dout (mbist_tca_rd_en_2 ),
1264 .siclk(siclk),
1265 .soclk(soclk)
1266);
1267
1268tlu_asi_ctl_msff_ctl_macro__width_4 mbist_cmpsel_2_lat (
1269 .scan_in(mbist_cmpsel_2_lat_scanin),
1270 .scan_out(mbist_cmpsel_2_lat_scanout),
1271 .l1clk (l1clk_pm2 ),
1272 .din (mbist_cmpsel [3:0] ),
1273 .dout (mbist_cmpsel_2 [3:0] ),
1274 .siclk(siclk),
1275 .soclk(soclk)
1276);
1277
1278tlu_asi_ctl_msff_ctl_macro__width_8 mbist_wdata_2_lat (
1279 .scan_in(mbist_wdata_2_lat_scanin),
1280 .scan_out(mbist_wdata_2_lat_scanout),
1281 .l1clk (l1clk_pm2 ),
1282 .din (mbist_wdata [7:0] ),
1283 .dout (mbist_wdata_2 [7:0] ),
1284 .siclk(siclk),
1285 .soclk(soclk)
1286);
1287
1288assign asi_mbist_cmpsel[3:0] =
1289 mbist_cmpsel_2[3:0];
1290
1291
1292tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa0_read_3_lat (
1293 .scan_in(mbist_tsa0_read_3_lat_scanin),
1294 .scan_out(mbist_tsa0_read_3_lat_scanout),
1295 .l1clk (l1clk_pm2 ),
1296 .din (mbist_tsa0_rd_en_2 ),
1297 .dout (mbist_tsa0_rd_en_3 ),
1298 .siclk(siclk),
1299 .soclk(soclk)
1300);
1301
1302tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa1_read_3_lat (
1303 .scan_in(mbist_tsa1_read_3_lat_scanin),
1304 .scan_out(mbist_tsa1_read_3_lat_scanout),
1305 .l1clk (l1clk_pm2 ),
1306 .din (mbist_tsa1_rd_en_2 ),
1307 .dout (mbist_tsa1_rd_en_3 ),
1308 .siclk(siclk),
1309 .soclk(soclk)
1310);
1311
1312tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tca_read_3_lat (
1313 .scan_in(mbist_tca_read_3_lat_scanin),
1314 .scan_out(mbist_tca_read_3_lat_scanout),
1315 .l1clk (l1clk_pm2 ),
1316 .din (mbist_tca_rd_en_2 ),
1317 .dout (mbist_tca_rd_en_3 ),
1318 .siclk(siclk),
1319 .soclk(soclk)
1320);
1321
1322tlu_asi_ctl_msff_ctl_macro__width_8 mbist_wdata_3_lat (
1323 .scan_in(mbist_wdata_3_lat_scanin),
1324 .scan_out(mbist_wdata_3_lat_scanout),
1325 .l1clk (l1clk_pm2 ),
1326 .din (mbist_wdata_2 [7:0] ),
1327 .dout (mbist_wdata_3 [7:0] ),
1328 .siclk(siclk),
1329 .soclk(soclk)
1330);
1331
1332assign asi_mbist_tel_en[1:0] =
1333 {mbist_tsa1_rd_en_3, mbist_tsa0_rd_en_3} |
1334 {2 {rd_tsa_pc_2 | rd_tsa_nopc_2 | rd_tsa_ecc_2 |
1335 rd_tsa_pc_3 | rd_tsa_nopc_3 | rd_tsa_ecc_3 ||
1336 wr_tsa_2 | wr_tsa_3 | ~pmen}};
1337
1338tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa0_read_4_lat (
1339 .scan_in(mbist_tsa0_read_4_lat_scanin),
1340 .scan_out(mbist_tsa0_read_4_lat_scanout),
1341 .l1clk (l1clk_pm2 ),
1342 .din (mbist_tsa0_rd_en_3 ),
1343 .dout (mbist_tsa0_rd_en_4 ),
1344 .siclk(siclk),
1345 .soclk(soclk)
1346);
1347
1348tlu_asi_ctl_msff_ctl_macro__width_1 mbist_tsa1_read_4_lat (
1349 .scan_in(mbist_tsa1_read_4_lat_scanin),
1350 .scan_out(mbist_tsa1_read_4_lat_scanout),
1351 .l1clk (l1clk_pm2 ),
1352 .din (mbist_tsa1_rd_en_3 ),
1353 .dout (mbist_tsa1_rd_en_4 ),
1354 .siclk(siclk),
1355 .soclk(soclk)
1356);
1357
1358assign compare_data_in[7:0] =
1359 (mbist_wdata_2[7:0] & {8 {~mbist_tsa_3}}) |
1360 (mbist_wdata_3[7:0] & {8 { mbist_tsa_3}}) ;
1361
1362tlu_asi_ctl_msff_ctl_macro__width_8 compare_data_lat (
1363 .scan_in(compare_data_lat_scanin),
1364 .scan_out(compare_data_lat_scanout),
1365 .l1clk (l1clk_pm2 ),
1366 .din (compare_data_in [7:0] ),
1367 .dout (compare_data [7:0] ),
1368 .siclk(siclk),
1369 .soclk(soclk)
1370);
1371
1372assign asi_mbd_compare_data[7:0] =
1373 compare_data[7:0];
1374
1375assign mbist_tsa_3 =
1376 mbist_tsa0_rd_en_3 | mbist_tsa1_rd_en_3;
1377
1378assign asi_mbd_sel_tsd0 =
1379 mbist_tsa0_rd_en_4;
1380
1381assign asi_mbd_sel_tsd1 =
1382 mbist_tsa1_rd_en_4;
1383
1384assign asi_mbd_sel_tic =
1385 mbist_tca_rd_en_3;
1386
1387
1388assign tsa0_fail_in =
1389 mbist_tsa0_rd_en_4;
1390
1391assign tsa1_fail_in =
1392 mbist_tsa1_rd_en_4;
1393
1394assign tca_fail_in =
1395 mbist_tca_rd_en_3;
1396
1397tlu_asi_ctl_msff_ctl_macro__width_1 tsa0_fail_lat (
1398 .scan_in(tsa0_fail_lat_scanin),
1399 .scan_out(tsa0_fail_lat_scanout),
1400 .l1clk (l1clk_pm2 ),
1401 .din (tsa0_fail_in ),
1402 .dout (tsa0_fail ),
1403 .siclk(siclk),
1404 .soclk(soclk)
1405);
1406
1407tlu_asi_ctl_msff_ctl_macro__width_1 tsa1_fail_lat (
1408 .scan_in(tsa1_fail_lat_scanin),
1409 .scan_out(tsa1_fail_lat_scanout),
1410 .l1clk (l1clk_pm2 ),
1411 .din (tsa1_fail_in ),
1412 .dout (tsa1_fail ),
1413 .siclk(siclk),
1414 .soclk(soclk)
1415);
1416
1417tlu_asi_ctl_msff_ctl_macro__width_1 tca_fail_lat (
1418 .scan_in(tca_fail_lat_scanin),
1419 .scan_out(tca_fail_lat_scanout),
1420 .l1clk (l1clk_pm2 ),
1421 .din (tca_fail_in ),
1422 .dout (tca_fail ),
1423 .siclk(siclk),
1424 .soclk(soclk)
1425);
1426
1427tlu_asi_ctl_msff_ctl_macro__width_1 compare_lat (
1428 .scan_in(compare_lat_scanin),
1429 .scan_out(compare_lat_scanout),
1430 .l1clk (l1clk_pm2 ),
1431 .din (mbd_compare ),
1432 .dout (compare ),
1433 .siclk(siclk),
1434 .soclk(soclk)
1435);
1436
1437assign tlu_mbi_tsa0_fail =
1438 tsa0_fail & ~compare;
1439
1440assign tlu_mbi_tsa1_fail =
1441 tsa1_fail & ~compare;
1442
1443assign tlu_mbi_tca_fail =
1444 tca_fail & ~compare;
1445
1446
1447
1448//////////////////////////////////////////////////////////////////////////////
1449//STAGE 0
1450//////////////////////////////////////////////////////////////////////////////
1451// Decode preempt_trap/_done_retry so that read controls can go to TSA in
1452// cycle 1
1453// so read can occur in cycle 2
1454// so ECC error detect can occur in cycle 3
1455// so packet can transmit in cycle 4
1456
1457assign ctl_0 =
1458 lsu_rngf_cdbus[64];
1459
1460assign data_0[63:48] =
1461 lsu_rngf_cdbus[63:48];
1462assign data_0_59_unused =
1463 data_0[59];
1464assign data_0_57_unused =
1465 data_0[57];
1466assign data_0_56_unused =
1467 data_0[56];
1468
1469assign asi_0 =
1470 ctl_0 & data_0[63] & ~data_0[62] & (data_0[61:60] == 2'b00);
1471assign pr_0 =
1472 ctl_0 & data_0[63] & ~data_0[62] & data_0[61] & ~data_0[60];
1473assign hpr_0 =
1474 ctl_0 & data_0[63] & ~data_0[62] & (data_0[61:60] == 2'b11);
1475
1476// Any PR between 0 and 3 (field is 5 bits)
1477assign pr_tstack_0 =
1478 pr_0 & (data_0[52:50] == 3'b000);
1479
1480// Note that write to GL must preempt trap because EXU cannot handle
1481// multiple GL updates
1482assign wr_gl_0 =
1483 pr_0 & data_0[52] & ~data_0[59];
1484
1485// HPR is 1, not 0, 3, 5, 6, or 1F
1486assign htstate_0 =
1487 hpr_0 & ~data_0[50] & ~data_0[49] & data_0[48];
1488
1489// All queue registers are ASI 25
1490assign asi_25_0 =
1491 asi_0 & (data_0[55:48] == 8'h25);
1492
1493// TSA diagnostic ECC read at ASI 0x5B
1494assign tsa_diag_0 =
1495 asi_0 & (data_0[55:48] == 8'h5b);
1496
1497// The following require access to the trap stack array (TSA)
1498// Even writes require a read, so block done and retry for both
1499assign preempt_done_retry_in[1:0] =
1500 ({2 {pr_tstack_0 | wr_gl_0 | htstate_0 | asi_25_0 | tsa_diag_0}} &
1501 {data_0[58], ~data_0[58]}) |
1502 {2 {mbist_run}};
1503
1504// Need to preempt traps on writes to GL reg
1505// but these are held two cycles now so delay by two cycles
1506assign preempt_trap_in[1:0] =
1507 {2 {wr_gl_2}} & {data_2[58], ~data_2[58]};
1508
1509tlu_asi_ctl_msff_ctl_macro__width_4 preempt_trap_lat (
1510 .scan_in(preempt_trap_lat_scanin),
1511 .scan_out(preempt_trap_lat_scanout),
1512 .din ({preempt_trap_in [1:0],
1513 preempt_done_retry_in [1:0]}),
1514 .dout ({preempt_trap [1:0],
1515 preempt_done_retry [1:0]}),
1516 .l1clk(l1clk),
1517 .siclk(siclk),
1518 .soclk(soclk)
1519);
1520
1521assign asi_preempt_trap[1:0] =
1522 preempt_trap[1:0];
1523assign asi_preempt_done_retry[1:0] =
1524 preempt_done_retry[1:0];
1525
1526
1527//
1528// Handle fatal deferred and disrupting error registers
1529//
1530
1531assign sel_lsu =
1532 ~rd_clesr & ~rd_clfesr;
1533
1534assign clesr_data[63:0] =
1535 {dfd_desr_f[7], dfd_fesr_f[7],
1536 dfd_desr_f[6], dfd_fesr_f[6],
1537 dfd_desr_f[5], dfd_fesr_f[5],
1538 dfd_desr_f[4], dfd_fesr_f[4],
1539 dfd_desr_f[3], dfd_fesr_f[3],
1540 dfd_desr_f[2], dfd_fesr_f[2],
1541 dfd_desr_f[1], dfd_fesr_f[1],
1542 dfd_desr_f[0], dfd_fesr_f[0],
1543 {48 {1'b0}}};
1544
1545assign clfesr_in[63:48] =
1546 ({16 {~(| clfesr_data[63:48])}} & clesr_data [63:48]) |
1547 ({16 { (| clesr_data [63:48])}} & clfesr_data[63:48]) ;
1548assign clfesr_in[47:0] =
1549 {48 {1'b0}};
1550
1551tlu_asi_ctl_msff_ctl_macro__width_16 clfesr_lat ( // FS:wmr_protect
1552 .scan_in(clfesr_lat_wmr_scanin),
1553 .scan_out(clfesr_lat_wmr_scanout),
1554 .siclk(spc_aclk_wmr),
1555 .din (clfesr_in [63:48] ),
1556 .dout (clfesr_data [63:48] ),
1557 .l1clk(l1clk),
1558 .soclk(soclk)
1559);
1560
1561
1562assign data_1_in[63:0] =
1563 ({64 {mbist_run}} & {8 {mbi_wdata[7:0]}}) |
1564 ({64 {sel_lsu & ~mbist_run}} & lsu_rngf_cdbus [63:0]) |
1565 ({64 {rd_clesr & ~mbist_run}} & clesr_data [63:0]) |
1566 ({64 {rd_clfesr& ~mbist_run}} & clfesr_in [63:0]) ;
1567
1568
1569assign asi_int_rec_mux_sel_in[2:0] =
1570 data_1 [58:56];
1571
1572
1573
1574/////////////////////////////////////////////////////////////////////
1575//STAGE 1
1576/////////////////////////////////////////////////////////////////////
1577// Stage the packet coming on the ring
1578// First cycle of the packet holds control and address information
1579// Second cycle holds the store/load data
1580
1581tlu_asi_ctl_msff_ctl_macro__width_64 rng_stg1_data (
1582 .scan_in(rng_stg1_data_scanin),
1583 .scan_out(rng_stg1_data_scanout),
1584 .l1clk (l1clk_pm1 ),
1585 .din (data_1_in [63:0] ),
1586 .dout (data_1 [63:0] ),
1587 .siclk(siclk),
1588 .soclk(soclk)
1589);
1590
1591// register control bit, bit 64 indicates whether ctl packet or data packet
1592tlu_asi_ctl_msff_ctl_macro__width_1 ctl_1_lat (
1593 .scan_in(ctl_1_lat_scanin),
1594 .scan_out(ctl_1_lat_scanout),
1595 .l1clk (l1clk_pm1 ),
1596 .din (lsu_rngf_cdbus [64 ] ),
1597 .dout (ctl_1 ),
1598 .siclk(siclk),
1599 .soclk(soclk)
1600);
1601
1602assign rd_stage_1 =
1603 ctl_1 & data_1[59];
1604
1605assign asi_rd_stage_1 =
1606 rd_stage_1;
1607
1608
1609// decode the packet
1610
1611tlu_asi_ctl_msff_ctl_macro__width_8 hpstatehpriv_lat (
1612 .scan_in(hpstatehpriv_lat_scanin),
1613 .scan_out(hpstatehpriv_lat_scanout),
1614 .din (tsd_hpstate_hpriv [7:0] ),
1615 .dout (hpstatehpriv [7:0] ),
1616 .l1clk(l1clk),
1617 .siclk(siclk),
1618 .soclk(soclk)
1619);
1620
1621tlu_asi_ctl_msff_ctl_macro__width_8 pstatepriv_lat (
1622 .scan_in(pstatepriv_lat_scanin),
1623 .scan_out(pstatepriv_lat_scanout),
1624 .din (tsd_pstate_priv [7:0] ),
1625 .dout (pstatepriv [7:0] ),
1626 .l1clk(l1clk),
1627 .siclk(siclk),
1628 .soclk(soclk)
1629);
1630
1631assign hpstate_hpriv =
1632 (| (hpstatehpriv[7:0] & rd_tid_dec[7:0]));
1633
1634assign pstate_priv =
1635 (| (pstatepriv[7:0] & rd_tid_dec[7:0])) | hpstate_hpriv;
1636
1637assign asi =
1638 ctl_1 & data_1[63] & ~data_1[62] & (data_1[61:60] == 2'b00);
1639assign asr =
1640 ctl_1 & data_1[63] & ~data_1[62] & (data_1[61:60] == 2'b01);
1641assign pr =
1642 ctl_1 & data_1[63] & ~data_1[62] & (data_1[61:60] == 2'b10);
1643assign hpr =
1644 ctl_1 & data_1[63] & ~data_1[62] & (data_1[61:60] == 2'b11);
1645
1646assign asi_2 =
1647 ctl_2 & data_2[63] & ~data_2[62] & (data_2[61:60] == 2'b00);
1648assign asr_2 =
1649 ctl_2 & data_2[63] & ~data_2[62] & (data_2[61:60] == 2'b01);
1650assign pr_2 =
1651 ctl_2 & data_2[63] & ~data_2[62] & (data_2[61:60] == 2'b10);
1652assign hpr_2 =
1653 ctl_2 & data_2[63] & ~data_2[62] & (data_2[61:60] == 2'b11);
1654
1655assign fast_asi =
1656 ~data_1[61] & ~data_1[60];
1657
1658assign superfast_hpr_2 =
1659 data_2[60];
1660
1661assign mondo_head =
1662 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h0);
1663assign rd_mondo_head =
1664 mondo_head & data_1[59];
1665assign wr_mondo_head =
1666 mondo_head & ~data_1[59];
1667
1668assign mondo_tail =
1669 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h1);
1670assign rd_mondo_tail =
1671 mondo_tail & data_1[59];
1672assign wr_mondo_tail =
1673 mondo_tail & ~data_1[59];
1674
1675assign device_head =
1676 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h2);
1677assign rd_device_head =
1678 device_head & data_1[59];
1679assign wr_device_head =
1680 device_head & ~data_1[59];
1681
1682assign device_tail =
1683 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h3);
1684assign rd_device_tail =
1685 device_tail & data_1[59];
1686assign wr_device_tail =
1687 device_tail & ~data_1[59];
1688
1689assign res_err_head =
1690 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h4);
1691assign rd_res_err_head =
1692 res_err_head & data_1[59];
1693assign wr_res_err_head =
1694 res_err_head & ~data_1[59];
1695
1696assign res_err_tail =
1697 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h5);
1698assign rd_res_err_tail =
1699 res_err_tail & data_1[59];
1700assign wr_res_err_tail =
1701 res_err_tail & ~data_1[59];
1702
1703assign nonres_err_head =
1704 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h6);
1705assign rd_nonres_err_head =
1706 nonres_err_head & data_1[59];
1707assign wr_nonres_err_head =
1708 nonres_err_head & ~data_1[59];
1709
1710assign nonres_err_tail =
1711 asi & (data_1[55:48] == 8'h25) & (data_1[5:3] == 3'h7);
1712assign rd_nonres_err_tail =
1713 nonres_err_tail & data_1[59];
1714assign wr_nonres_err_tail =
1715 nonres_err_tail & ~data_1[59];
1716
1717// Shadow copy of spec enable and IMMU enable bits in LSU control reg
1718// Only support write; LSU handles read
1719assign lsu_ctl =
1720 asi & (data_1[55:48] == 8'h45) & ~data_1[4] & ~data_1[3];
1721assign wr_lsu_ctl =
1722 lsu_ctl & ~data_1[59];
1723
1724// DECR (only one per physical core)
1725assign decr =
1726 asi & (data_1[55:48] == 8'h45) & ~data_1[4] & data_1[3];
1727assign rd_decr =
1728 decr & data_1[59];
1729assign wr_decr =
1730 decr & ~data_1[59];
1731
1732// DESR, FESR
1733assign esr =
1734 asi & (data_1[55:48] == 8'h4c);
1735assign desr =
1736 esr & (data_1[5:3] == 3'b000);
1737assign rd_desr =
1738 desr & data_1[59];
1739assign fesr =
1740 esr & (data_1[5:3] == 3'b001);
1741assign rd_fesr =
1742 fesr & data_1[59];
1743assign clesr =
1744 esr & (data_1[5:3] == 3'b100);
1745assign rd_clesr =
1746 clesr & data_1[59];
1747assign clfesr =
1748 esr & (data_1[5:3] == 3'b101);
1749assign rd_clfesr =
1750 clfesr & data_1[59];
1751
1752assign cerer =
1753 esr & (data_1[5:3] == 3'b010);
1754assign rd_cerer =
1755 cerer & data_1[59];
1756assign wr_cerer =
1757 cerer & ~data_1[59];
1758
1759assign ceter =
1760 esr & (data_1[5:3] == 3'b011);
1761assign rd_ceter =
1762 ceter & data_1[59];
1763assign wr_ceter =
1764 ceter & ~data_1[59];
1765
1766// ISFSR at 0x50/0x18
1767// instruction_va_watchpoint at 0x50/0x38
1768assign isfsr =
1769 asi & (data_1[55:48] == 8'h50) & (data_1[5:3] == 3'b011);
1770assign rd_isfsr =
1771 isfsr & data_1[59];
1772assign wr_isfsr =
1773 isfsr & ~data_1[59];
1774
1775assign iaw_2 =
1776 asi_2 & (data_2[55:48] == 8'h50) & (data_2[5:3] == 3'b111);
1777assign rd_iaw_2 =
1778 iaw_2 & data_2[59];
1779assign wr_iaw_2 =
1780 iaw_2 & ~data_2[59];
1781
1782// DSFSR at 0x58/0x18, DSFAR at 0x20
1783assign dsfsr =
1784 asi & (data_1[55:48] == 8'h58) & (data_1[5:3] == 3'b011);
1785assign rd_dsfsr =
1786 dsfsr & data_1[59];
1787assign wr_dsfsr =
1788 dsfsr & ~data_1[59];
1789assign dsfar =
1790 asi & (data_1[55:48] == 8'h58) & (data_1[5:3] == 3'b100);
1791assign rd_dsfar =
1792 dsfar & data_1[59];
1793assign wr_dsfar =
1794 dsfar & ~data_1[59];
1795
1796// Tick compare array ECC / data access at 0x5A/0x00-0x38
1797assign tca_diag =
1798 asi & (data_1[55:48] == 8'h5a);
1799assign rd_tca_ecc =
1800 tca_diag & ~data_1[5] & data_1[59];
1801assign rd_tca_data =
1802 tca_diag & data_1[5] & data_1[59];
1803
1804// TSA ECC access at 0x5B/0x00-0x18
1805assign tsa_diag =
1806 asi & (data_1[55:48] == 8'h5b);
1807assign rd_tsa_ecc =
1808 tsa_diag & ~data_1[6] & data_1[59];
1809
1810assign int_rec =
1811 asi & (data_1[55:48] == 8'h72);
1812assign rd_int_rec =
1813 int_rec & data_1[59];
1814assign wr_int_rec =
1815 int_rec & ~data_1[59];
1816
1817assign inc_vec =
1818 asi & (data_1[55:48] == 8'h74);
1819assign rd_inc_vec =
1820 inc_vec & data_1[59];
1821
1822
1823assign asireg_2 =
1824 asr_2 & (data_2[55:48] == 8'h03);
1825assign rd_asireg_2 =
1826 asireg_2 & data_2[59];
1827assign wr_asireg_2 =
1828 asireg_2 & ~data_2[59];
1829
1830// Covers ASR tick, PR tick, and ASR stick
1831assign tick =
1832 ((asr | pr) & (data_1[55:48] == 8'h04)) |
1833 (asr & (data_1[55:48] == 8'h18));
1834assign rd_tick =
1835 tick & data_1[59] & (hpstate_hpriv | pstate_priv | tick_npt_1_);
1836assign priv_action =
1837 tick & data_1[59] & ~(hpstate_hpriv | pstate_priv | tick_npt_1_);
1838assign wr_tick =
1839 tick & ~data_1[59] & hpstate_hpriv;
1840assign tick_npt_1_ =
1841 | (tick_npt_[7:0] & rd_tid_dec[7:0]);
1842
1843assign pc_2 =
1844 asr_2 & (data_2[55:48] == 8'h05);
1845assign rd_pc_2 =
1846 pc_2 & data_2[59];
1847
1848assign set_softint =
1849 asr & (data_1[55:48] == 8'h14);
1850assign wr_set_softint =
1851 set_softint & ~data_1[59];
1852
1853assign clear_softint =
1854 asr & (data_1[55:48] == 8'h15);
1855assign wr_clear_softint =
1856 clear_softint & ~data_1[59];
1857
1858assign softint =
1859 asr & (data_1[55:48] == 8'h16);
1860assign rd_softint =
1861 softint & data_1[59];
1862assign wr_softint =
1863 softint & ~data_1[59];
1864
1865assign tick_cmpr =
1866 asr & (data_1[55:48] == 8'h17);
1867assign rd_tick_cmpr =
1868 tick_cmpr & data_1[59];
1869assign wr_tick_cmpr =
1870 tick_cmpr & ~data_1[59];
1871
1872// ASR stick covered by tick
1873
1874assign stick_cmpr =
1875 asr & (data_1[55:48] == 8'h19);
1876assign rd_stick_cmpr =
1877 stick_cmpr & data_1[59] & pstate_priv;
1878assign wr_stick_cmpr =
1879 stick_cmpr & ~data_1[59] & pstate_priv;
1880
1881assign tpc =
1882 pr & (data_1[55:48] == 8'h00);
1883assign rd_tpc =
1884 tpc & data_1[59];
1885assign wr_tpc =
1886 tpc & ~data_1[59];
1887
1888assign tnpc =
1889 pr & (data_1[55:48] == 8'h01);
1890assign rd_tnpc =
1891 tnpc & data_1[59];
1892assign wr_tnpc =
1893 tnpc & ~data_1[59];
1894
1895assign tstate =
1896 pr & (data_1[55:48] == 8'h02);
1897assign rd_tstate =
1898 tstate & data_1[59];
1899assign wr_tstate =
1900 tstate & ~data_1[59];
1901
1902assign tt =
1903 pr & (data_1[55:48] == 8'h03);
1904assign rd_tt =
1905 tt & data_1[59];
1906assign wr_tt =
1907 tt & ~data_1[59];
1908
1909// tick as PR 0x04 is covered in ASR section
1910
1911assign tba_2 =
1912 pr_2 & (data_2[55:48] == 8'h05);
1913assign rd_tba_2 =
1914 tba_2 & data_2[59];
1915assign wr_tba_2 =
1916 tba_2 & ~data_2[59];
1917
1918assign pstate =
1919 pr & (data_1[55:48] == 8'h06);
1920assign wr_pstate =
1921 pstate & ~data_1[59];
1922assign pstate_2 =
1923 pr_2 & (data_2[55:48] == 8'h06);
1924assign rd_pstate_2 =
1925 pstate_2 & data_2[59];
1926
1927assign tl =
1928 pr & (data_1[55:48] == 8'h07);
1929assign rd_tl =
1930 tl & data_1[59];
1931assign wr_tl =
1932 tl & ~data_1[59];
1933
1934assign pil =
1935 pr & (data_1[55:48] == 8'h08);
1936assign rd_pil =
1937 pil & data_1[59];
1938assign wr_pil =
1939 pil & ~data_1[59];
1940
1941assign gl =
1942 pr & (data_1[55:48] == 8'h10);
1943assign rd_gl =
1944 gl & data_1[59];
1945assign wr_gl =
1946 gl & ~data_1[59];
1947
1948assign hpstate =
1949 hpr & (data_1[55:48] == 8'h00);
1950assign wr_hpstate =
1951 hpstate & ~data_1[59];
1952assign hpstate_2 =
1953 hpr_2 & (data_2[55:48] == 8'h00);
1954assign rd_hpstate_2 =
1955 hpstate_2 & data_2[59];
1956
1957assign htstate =
1958 hpr & (data_1[55:48] == 8'h01);
1959assign rd_htstate =
1960 htstate & data_1[59];
1961assign wr_htstate =
1962 htstate & ~data_1[59];
1963
1964assign hintp =
1965 hpr & (data_1[55:48] == 8'h03);
1966assign rd_hintp =
1967 hintp & data_1[59];
1968assign wr_hintp =
1969 hintp & ~data_1[59];
1970
1971assign htba_2 =
1972 hpr_2 & (data_2[55:48] == 8'h05);
1973assign rd_htba_2 =
1974 htba_2 & data_2[59];
1975assign wr_htba_2 =
1976 htba_2 & ~data_2[59];
1977
1978assign hver =
1979 hpr & (data_1[55:48] == 8'h06);
1980assign rd_hver =
1981 hver & data_1[59];
1982
1983assign rd_halt =
1984 hpr & (data_1[55:48] == 8'h1e) & data_1[59];
1985assign wr_halt =
1986 hpr & (data_1[55:48] == 8'h1e) & ~data_1[59];
1987
1988assign hstick_cmpr =
1989 hpr & (data_1[55:48] == 8'h1f);
1990assign rd_hstick_cmpr =
1991 hstick_cmpr & data_1[59];
1992assign wr_hstick_cmpr =
1993 hstick_cmpr & ~data_1[59];
1994
1995
1996// address to send to TSA
1997assign fast_tsa_rd_iqr =
1998 fast_asi & data_1[48];
1999assign fast_rd_tsa_ecc =
2000 fast_asi & ~data_1[48];
2001
2002assign fast_tsa_rd_iqr_res_nonres =
2003 fast_tsa_rd_iqr & data_1[5];
2004
2005assign asi_tsa_rd_iqr_ecc =
2006 fast_asi | mbist_run;
2007
2008assign asi_tsa_tid[1:0] =
2009 data_1[57:56];
2010
2011assign asi_tsa_rd_addr[4:0] =
2012 ({5 {~mbist_run}} &
2013 {data_1[57:56],
2014 ({3 {fast_tsa_rd_iqr & ~fast_rd_tsa_ecc}} & 3'b110) |
2015 ({3 {fast_tsa_rd_iqr_res_nonres & ~fast_rd_tsa_ecc}} & 3'b111) |
2016 ({3 { fast_rd_tsa_ecc}} & data_1[5:3])}) |
2017 ({5 {mbist_run}} & mbist_addr_2[4:0]) ;
2018
2019
2020assign rd_tca =
2021 rd_tick_cmpr | rd_stick_cmpr | rd_hstick_cmpr | rd_tca_ecc | rd_tca_data;
2022assign wr_tca =
2023 wr_tick_cmpr | wr_stick_cmpr | wr_hstick_cmpr;
2024
2025// Hold TCA read address for RAS
2026assign tca_rd_addr[4] =
2027 rd_hstick_cmpr;
2028assign tca_rd_addr[3] =
2029 rd_stick_cmpr;
2030
2031assign tca_addr[4] =
2032 tca_rd_addr[4] | wr_hstick_cmpr_2 | (tca_diag & data_1[4]);
2033assign tca_addr[3] =
2034 tca_rd_addr[3] | wr_stick_cmpr_2 | (tca_diag & data_1[3]);
2035assign tca_addr[2:0] =
2036 (data_1[58:56] & {3 {rd_tca }}) |
2037 (data_2[58:56] & {3 {wr_tca_2}}) ;
2038
2039assign asi_tca_addr[4:0] =
2040 ({5 {~mbist_run}} & tca_addr[4:0]) |
2041 ({5 { mbist_run}} & mbist_addr[4:0]) ;
2042
2043assign asi_tca_addr_valid =
2044 rd_tca | wr_tca_2 | mbist_run;
2045assign asi_tca_wr =
2046 (wr_tca_2 & ~mbist_run) | (mbist_tca_wr_en & mbist_run);
2047
2048
2049assign rd_tid_dec [7:0] =
2050 { data_1[58] & data_1[57] & data_1[56],
2051 data_1[58] & data_1[57] & ~data_1[56],
2052 data_1[58] & ~data_1[57] & data_1[56],
2053 data_1[58] & ~data_1[57] & ~data_1[56],
2054 ~data_1[58] & data_1[57] & data_1[56],
2055 ~data_1[58] & data_1[57] & ~data_1[56],
2056 ~data_1[58] & ~data_1[57] & data_1[56],
2057 ~data_1[58] & ~data_1[57] & ~data_1[56]};
2058
2059// For tlu_ras_ctl and tlu_dfd_dp
2060assign asi_rd_tid[2:0] =
2061 data_1[58:56];
2062
2063// These are stored in the TSA
2064assign rd_tsa_nopc =
2065 rd_tstate | rd_tt | rd_htstate |
2066 rd_mondo_head | rd_mondo_tail |
2067 rd_device_head | rd_device_tail |
2068 rd_res_err_head | rd_res_err_tail |
2069 rd_nonres_err_head | rd_nonres_err_tail;
2070assign rd_tsa_pc =
2071 rd_tpc | rd_tnpc;
2072
2073assign wr_tsa_2 =
2074 wr_tstate_2 | wr_tt_2 | wr_htstate_2 |
2075 wr_mondo_head_2 | wr_mondo_tail_2 |
2076 wr_device_head_2 | wr_device_tail_2 |
2077 wr_res_err_head_2 | wr_res_err_tail_2 |
2078 wr_nonres_err_head_2 | wr_nonres_err_tail_2 |
2079 wr_tpc_2 | wr_tnpc_2;
2080
2081assign wr_tsa_3 =
2082 wr_tstate_3 | wr_tt_3 | wr_htstate_3 |
2083 wr_mondo_head_3 | wr_mondo_tail_3 |
2084 wr_device_head_3 | wr_device_tail_3 |
2085 wr_res_err_head_3 | wr_res_err_tail_3 |
2086 wr_nonres_err_head_3 | wr_nonres_err_tail_3 |
2087 wr_tpc_3 | wr_tnpc_3;
2088//
2089// no rd_iqr[2:0] for mondo/res head
2090// rd_iqr[2] for device/nonres head
2091// rd_iqr[1] for mondo/res tail
2092// rd_iqr[0] for device/nonres tail
2093assign rd_iqr_2[2] =
2094 rd_device_head_2 | rd_nonres_err_head_2 ;
2095assign rd_iqr_2[1] =
2096 rd_mondo_tail_2 | rd_res_err_tail_2 ;
2097assign rd_iqr_2[0] =
2098 rd_device_tail_2 | rd_nonres_err_tail_2 ;
2099
2100assign rd_iqr_reg_2 =
2101 rd_nonres_err_tail_2 | rd_nonres_err_head_2 |
2102 rd_res_err_tail_2 | rd_res_err_head_2 |
2103 rd_device_tail_2 | rd_device_head_2 |
2104 rd_mondo_tail_2 | rd_mondo_head_2 ;
2105// These are flopped in TSD before use
2106assign asi_rd_iqr [2:0] =
2107 rd_iqr_2 [2:0];
2108assign asi_rd_tpc [1:0] =
2109 {2 {rd_tpc_2}} & {data_2[58], ~data_2[58]};
2110assign asi_rd_tnpc [1:0] =
2111 {2 {rd_tnpc_2}} & {data_2[58], ~data_2[58]};
2112assign asi_rd_tstate [1:0] =
2113 {2 {rd_tstate_2}} & {data_2[58], ~data_2[58]};
2114assign asi_rd_tt [1:0] =
2115 {2 {rd_tt_2}} & {data_2[58], ~data_2[58]};
2116assign asi_rd_htstate [1:0] =
2117 {2 {rd_htstate_2}} & {data_2[58], ~data_2[58]};
2118assign asi_rd_iqr_reg [1:0] =
2119 {2 {rd_iqr_reg_2}} & {data_2[58], ~data_2[58]};
2120
2121assign asi_rd_cerer =
2122 rd_cerer_2;
2123assign asi_rd_ceter =
2124 rd_ceter_2;
2125assign asi_rd_int_rec =
2126 rd_int_rec;
2127assign asi_rd_inc_vec =
2128 rd_inc_vec;
2129assign asi_rd_inc_vec_2[7:0] =
2130 {8 {rd_inc_vec_2}} & wr_tid_dec[7:0];
2131assign asi_rd_asireg[7:0] =
2132 {8 {rd_asireg_2}} & wr_tid_dec[7:0];
2133assign asi_rd_tick =
2134 rd_tick_3 ;
2135assign asi_rd_pc[7:0] =
2136 {8 {rd_pc_2}} & wr_tid_dec[7:0];
2137assign asi_rd_iaw =
2138 rd_iaw_2;
2139assign asi_rd_isfsr =
2140 rd_isfsr;
2141assign asi_rd_dsfsr =
2142 rd_dsfsr;
2143
2144assign asi_rd_h_pstate_tba [2:0] =
2145 {superfast_hpr_2, data_2[57:56]};
2146assign asi_rd_tba_htba [1:0] =
2147 {2 {rd_tba_2 | rd_htba_2}} & {data_2[58], ~data_2[58]};
2148assign asi_rd_pstate_hpstate [1:0] =
2149 {2 {rd_pstate_2 | rd_hpstate_2}} & {data_2[58], ~data_2[58]};
2150
2151assign rd_cth =
2152 rd_int_rec | rd_inc_vec;
2153
2154assign rd_trl =
2155 rd_tl | rd_pil | rd_gl | rd_softint | rd_hintp;
2156
2157assign rd_tic =
2158 rd_tick_cmpr | rd_stick_cmpr | rd_hstick_cmpr;
2159
2160assign rd_tsd_2 =
2161 rd_asireg_2 | rd_pstate_2 | rd_hpstate_2;
2162
2163assign rd_tba_htba_2 =
2164 rd_tba_2 | rd_htba_2;
2165
2166assign rmw_tsa_in[1:0] =
2167 {2 {wr_tpc | wr_tnpc | wr_tstate | wr_tt | wr_htstate |
2168 wr_mondo_head | wr_mondo_tail | wr_device_head | wr_device_tail |
2169 wr_res_err_head | wr_res_err_tail |
2170 wr_nonres_err_head | wr_nonres_err_tail}} &
2171 {data_1[58], ~data_1[58]} & {2 {~data_1[59]}};
2172
2173assign asi_rmw_tsa[1:0] =
2174 rmw_tsa_in[1:0];
2175
2176
2177// HVER read
2178// Bits Field Contents
2179// 63:48 manuf 0x003E
2180// 47:32 impl 0x0024
2181// 31:24 mask 1
2182// 23:19 rsvd0 0
2183// 18:16 maxgl 0x3
2184// 15:8 maxtl 0x6
2185// 7:5 rsvd1 0
2186// 4:0 maxwin 0x7
2187assign hver_value[63:0] =
2188 {32'h003e0024, hver_mask_major_rev[3:0], hver_mask_minor_rev[3:0],
2189 24'h030607};
2190
2191
2192// Bit 63 is stored negative active
2193assign tic_ecc[63:0] =
2194 { {56 {1'b0}}, cel_ecc[7:0]};
2195assign data_err_1[63:0] =
2196 {data_1[63],
2197 data_1[62] | priv_action,
2198 data_1[61:56],
2199 (data_1[55:48] & ~{8 {priv_action}}) | {{6 {1'b0}}, priv_action, 1'b0},
2200 data_1[47:0]};
2201assign decr_data[63:0] =
2202 {decr_reg[63:46], {46 {1'b0}}};
2203
2204// Map of how the various registers get merged into the ASI bus in DFD,CTH,CER
2205// cer_asi_data 63:48 47:41 40:37 36:19 18:0
2206// cth_asi_data 63:48 47:41 40:37 36:19 18:0
2207// dfd_asi_data 63:48 47:41 40:37 36:19 18:0
2208// dsfar 63:48 47:41 40:37 36:19 18:0
2209// fesr 6:0
2210// desr 18:0
2211// dsfsr/{0,isfsr} 3:0
2212assign dsfar_data[63:0] =
2213 {{16 {1'b0}}, cer_asi_data[47:0]};
2214assign fesr_data[63:0] =
2215 {{2 {1'b0}}, cer_asi_data[47:41], {55 {1'b0}}};
2216assign desr_data[63:0] =
2217 {cer_asi_data[18:11], {45 {1'b0}}, cer_asi_data[10:0]};
2218assign isfsr_data[63:0] =
2219 { {61 {1'b0}}, cer_asi_data[39:37]};
2220assign dsfsr_data[63:0] =
2221 { {60 {1'b0}}, cer_asi_data[40:37]};
2222
2223
2224assign sel_data1 =
2225 ~priv_action & ~rd_hver_2 & ~rd_cth_2 &
2226 ~rd_cerer_2 &
2227 ~rd_tca_ecc_2 & ~rd_tca_data_2 & ~rd_ceter_2 &
2228 ~rd_desr_2 & ~rd_fesr_2 & ~rd_dsfar_2 &
2229 ~rd_isfsr_2 & ~rd_dsfsr_2 & ~rd_decr_2 ;
2230
2231assign data_2_in[63:0] =
2232 ({64 {sel_data1 }} & data_1 [63:0]) |
2233 ({64 {priv_action }} & data_err_1 [63:0]) |
2234 ({64 {rd_hver_2 }} & hver_value [63:0]) |
2235 ({64 {rd_cth_2 }} & cer_asi_data [63:0]) |
2236 ({64 {rd_cerer_2 }} & cer_asi_data [63:0]) |
2237 ({64 {rd_tca_ecc_2 }} & tic_ecc [63:0]) |
2238 ({64 {rd_tca_data_2}} & tic_data [63:0]) |
2239 ({64 {rd_ceter_2 }} & cer_asi_data [63:0]) |
2240 ({64 {rd_desr_2 }} & desr_data [63:0]) |
2241 ({64 {rd_fesr_2 }} & fesr_data [63:0]) |
2242 ({64 {rd_dsfar_2 }} & dsfar_data [63:0]) |
2243 ({64 {rd_isfsr_2 }} & isfsr_data [63:0]) |
2244 ({64 {rd_dsfsr_2 }} & dsfsr_data [63:0]) |
2245 ({64 {rd_decr_2 }} & decr_data [63:0]) ;
2246
2247
2248/////////////////////////////////////////////////////////////////////
2249//STAGE 2
2250/////////////////////////////////////////////////////////////////////
2251// pipe the packets and decoded control information
2252tlu_asi_ctl_msff_ctl_macro__width_64 stg2_data_lat (
2253 .scan_in(stg2_data_lat_scanin),
2254 .scan_out(stg2_data_lat_scanout),
2255 .l1clk (l1clk_pm1 ),
2256 .din (data_2_in [63:0] ),
2257 .dout (data_2 [63:0] ),
2258 .siclk(siclk),
2259 .soclk(soclk)
2260);
2261
2262// register control bit
2263tlu_asi_ctl_msff_ctl_macro__width_72 stg2_ctl_lat (
2264 .scan_in(stg2_ctl_lat_scanin),
2265 .scan_out(stg2_ctl_lat_scanout),
2266 .l1clk (l1clk_pm1 ),
2267 .din ({ctl_1,
2268 rd_cth,
2269 rd_tsa_pc,
2270 rd_tsa_ecc,
2271 rd_tsa_nopc,
2272 rd_hver,
2273 rd_tic,
2274 rd_tca_ecc,
2275 rd_tca_data,
2276 rd_tick,
2277 rd_mondo_head,
2278 rd_mondo_tail,
2279 rd_device_head,
2280 rd_device_tail,
2281 rd_res_err_head,
2282 rd_res_err_tail,
2283 rd_nonres_err_head,
2284 rd_nonres_err_tail,
2285 rd_tpc,
2286 rd_tnpc,
2287 rd_tstate,
2288 rd_tt,
2289 rd_htstate,
2290 rd_ceter,
2291 rd_inc_vec,
2292 rd_decr,
2293 rd_softint,
2294 rd_tl,
2295 rd_gl,
2296 rd_pil,
2297 rd_hintp,
2298 rd_trl,
2299 rd_cerer,
2300 rd_isfsr,
2301 rd_dsfsr,
2302 rd_dsfar,
2303 rd_desr,
2304 rd_fesr,
2305 wr_mondo_head,
2306 wr_mondo_tail,
2307 wr_device_head,
2308 wr_device_tail,
2309 wr_res_err_head,
2310 wr_res_err_tail,
2311 wr_nonres_err_head,
2312 wr_nonres_err_tail,
2313 wr_int_rec,
2314 wr_tick,
2315 wr_set_softint,
2316 wr_clear_softint,
2317 wr_softint,
2318 wr_tpc,
2319 wr_tnpc,
2320 wr_tstate,
2321 wr_tt,
2322 wr_pstate,
2323 wr_tl,
2324 wr_pil,
2325 wr_gl,
2326 wr_hpstate,
2327 wr_htstate,
2328 wr_hintp,
2329 wr_tca,
2330 wr_hstick_cmpr,
2331 wr_stick_cmpr,
2332 wr_cerer,
2333 wr_ceter,
2334 wr_isfsr,
2335 wr_dsfsr,
2336 wr_dsfar,
2337 wr_decr,
2338 wr_lsu_ctl}),
2339 .dout ({ctl_2,
2340 rd_cth_2,
2341 rd_tsa_pc_2,
2342 rd_tsa_ecc_2,
2343 rd_tsa_nopc_2,
2344 rd_hver_2,
2345 rd_tic_2,
2346 rd_tca_ecc_2,
2347 rd_tca_data_2,
2348 rd_tick_2,
2349 rd_mondo_head_2,
2350 rd_mondo_tail_2,
2351 rd_device_head_2,
2352 rd_device_tail_2,
2353 rd_res_err_head_2,
2354 rd_res_err_tail_2,
2355 rd_nonres_err_head_2,
2356 rd_nonres_err_tail_2,
2357 rd_tpc_2,
2358 rd_tnpc_2,
2359 rd_tstate_2,
2360 rd_tt_2,
2361 rd_htstate_2,
2362 rd_ceter_2,
2363 rd_inc_vec_2,
2364 rd_decr_2,
2365 rd_softint_2,
2366 rd_tl_2,
2367 rd_gl_2,
2368 rd_pil_2,
2369 rd_hintp_2,
2370 rd_trl_2,
2371 rd_cerer_2,
2372 rd_isfsr_2,
2373 rd_dsfsr_2,
2374 rd_dsfar_2,
2375 rd_desr_2,
2376 rd_fesr_2,
2377 wr_mondo_head_2,
2378 wr_mondo_tail_2,
2379 wr_device_head_2,
2380 wr_device_tail_2,
2381 wr_res_err_head_2,
2382 wr_res_err_tail_2,
2383 wr_nonres_err_head_2,
2384 wr_nonres_err_tail_2,
2385 wr_int_rec_2,
2386 wr_tick_2,
2387 wr_set_softint_2,
2388 wr_clear_softint_2,
2389 wr_softint_2,
2390 wr_tpc_2,
2391 wr_tnpc_2,
2392 wr_tstate_2,
2393 wr_tt_2,
2394 wr_pstate_2,
2395 wr_tl_2,
2396 wr_pil_2,
2397 wr_gl_2,
2398 wr_hpstate_2,
2399 wr_htstate_2,
2400 wr_hintp_2,
2401 wr_tca_2,
2402 wr_hstick_cmpr_2,
2403 wr_stick_cmpr_2,
2404 wr_cerer_2,
2405 wr_ceter_2,
2406 wr_isfsr_2,
2407 wr_dsfsr_2,
2408 wr_dsfar_2,
2409 wr_decr_2,
2410 wr_lsu_ctl_2}),
2411 .siclk(siclk),
2412 .soclk(soclk)
2413);
2414
2415tlu_asi_ctl_msff_ctl_macro__width_8 wr_tid_dec_lat (
2416 .scan_in(wr_tid_dec_lat_scanin),
2417 .scan_out(wr_tid_dec_lat_scanout),
2418 .l1clk (l1clk_pm1 ),
2419 .din (rd_tid_dec [7:0] ),
2420 .dout (wr_tid_dec [7:0] ),
2421 .siclk(siclk),
2422 .soclk(soclk)
2423);
2424
2425assign asi_rd_softint[7:0] =
2426 {8 {rd_softint_2}} & wr_tid_dec[7:0];
2427assign asi_rd_tl [7:0] =
2428 {8 {rd_tl_2}} & wr_tid_dec[7:0];
2429assign asi_rd_pil [7:0] =
2430 {8 {rd_pil_2}} & wr_tid_dec[7:0];
2431assign asi_rd_gl [7:0] =
2432 {8 {rd_gl_2}} & wr_tid_dec[7:0];
2433assign asi_rd_hintp [7:0] =
2434 {8 {rd_hintp_2}} & wr_tid_dec[7:0];
2435
2436
2437// send the store data out to the unit. Store data is in stage1 when control
2438// is in stage 2.
2439// The data is accompanied by write control signal.
2440assign asi_wr_data_0[63:0] =
2441 data_1[63:0];
2442assign asi_wr_data_1[62:0] =
2443 data_1[62:0];
2444assign asi_tsd0_wr_data_12 =
2445 data_1[12];
2446assign asi_tsd0_wr_data_10_08[10:8] =
2447 data_1[10:8];
2448assign asi_tsd0_wr_data_05_00[5:0] =
2449 data_1[5:0];
2450assign asi_tsd1_wr_data_12 =
2451 data_1[12];
2452assign asi_tsd1_wr_data_10_08[10:8] =
2453 data_1[10:8];
2454assign asi_tsd1_wr_data_05_00[5:0] =
2455 data_1[5:0];
2456
2457assign asi_tca_wr_data_63 =
2458 (~data_1[63] & ~mbist_run) | (mbist_wdata[7] & mbist_run);
2459// TSA written one cycles later
2460assign asi_tsa_wr_data [47:0] =
2461 (data_2 [47:0] & {48 {~mbist_run}}) |
2462 (mbist_tsa_wdata [47:0] & {48 { mbist_run}}) ;
2463// MBIST data shifted because only store NPC down to bit 2
2464assign mbist_tsa_wdata[47:0] =
2465 {mbist_wdata[5:0], {5 {mbist_wdata[7:0]}}, 2'b00};
2466
2467// Functionally this should be 0; during MBIST it should be wdata[0]
2468assign asi_tsa_wr_data_npc_oor_va =
2469 mbist_run & mbist_wdata[0];
2470// Functionally this should be 1; during MBIST it should be mbist_wdata[5]
2471assign asi_tsa_wr_data_npc_nonseq =
2472 ~mbist_run | mbist_wdata[5];
2473assign asi_wr_cerer =
2474 wr_cerer_2;
2475assign asi_wr_ceter =
2476 wr_ceter_2;
2477assign asi_ceter_tid[2:0] =
2478 data_2[58:56];
2479assign asi_wr_int_rec [7:0] =
2480 {8 {wr_int_rec_2}} & wr_tid_dec[7:0];
2481assign asi_wr_any_int_rec =
2482 wr_int_rec_2;
2483assign asi_wr_asireg [7:0] =
2484 {8 {wr_asireg_2}} & wr_tid_dec[7:0];
2485assign asi_wr_tick =
2486 wr_tick_2 ;
2487assign asi_wr_set_softint[7:0] =
2488 {8 {wr_set_softint_2}} & wr_tid_dec[7:0];
2489assign asi_wr_clear_softint[7:0] =
2490 {8 {wr_clear_softint_2}} & wr_tid_dec[7:0];
2491assign asi_wr_softint [7:0] =
2492 {8 {wr_softint_2}} & wr_tid_dec[7:0];
2493assign asi_wr_tba [7:0] =
2494 {8 {wr_tba_2}} & wr_tid_dec[7:0];
2495// Sent a cycle early and flopped locally to sink
2496assign asi_wr_pstate [7:0] =
2497 {8 {wr_pstate}} & rd_tid_dec[7:0];
2498assign asi_wr_tl [7:0] =
2499 {8 {wr_tl_2}} & wr_tid_dec[7:0];
2500assign asi_wr_pil [7:0] =
2501 {8 {wr_pil_2}} & wr_tid_dec[7:0];
2502assign asi_wr_gl [7:0] =
2503 {8 {wr_gl_2}} & wr_tid_dec[7:0];
2504// Sent a cycle early and flopped locally to sink
2505assign asi_wr_hpstate [7:0] =
2506 {8 {wr_hpstate}} & rd_tid_dec[7:0];
2507assign asi_wr_hintp [7:0] =
2508 {8 {wr_hintp_2}} & wr_tid_dec[7:0];
2509assign asi_wr_htba [7:0] =
2510 {8 {wr_htba_2}} & wr_tid_dec[7:0];
2511assign asi_rd_dsfar =
2512 rd_dsfar;
2513assign asi_rd_desr =
2514 rd_desr;
2515assign asi_rd_fesr =
2516 rd_fesr;
2517assign asi_wr_isfsr[7:0] =
2518 {8 {wr_isfsr_2}} & wr_tid_dec[7:0] ;
2519assign asi_wr_iaw[1:0] =
2520 {2 {wr_iaw_2}} & {data_2[58], ~data_2[58]};
2521assign asi_wr_dsfsr[7:0] =
2522 {8 {wr_dsfsr_2}} & wr_tid_dec[7:0] ;
2523assign asi_wr_dsfar[7:0] =
2524 {8 {wr_dsfar_2}} & wr_tid_dec[7:0] ;
2525
2526assign asi_trl_pstate_en[1:0] =
2527 {2 {wr_hpstate_2 | wr_pstate_2}} & {data_2[58], ~data_2[58]};
2528
2529// Pipe Interrupt Receive Register clear controls to check if the register
2530// is actually cleared out entirely
2531assign irl_any_cleared_in =
2532 rd_inc_vec_2 | wr_int_rec_2;
2533
2534tlu_asi_ctl_msff_ctl_macro__width_1 irl_any_cleared_lat (
2535 .scan_in(irl_any_cleared_lat_scanin),
2536 .scan_out(irl_any_cleared_lat_scanout),
2537 .l1clk (l1clk_pm1 ),
2538 .din (irl_any_cleared_in ),
2539 .dout (irl_any_cleared ),
2540 .siclk(siclk),
2541 .soclk(soclk)
2542);
2543
2544assign tid_dec_3[7:0] =
2545 { data_3[58] & data_3[57] & data_3[56],
2546 data_3[58] & data_3[57] & ~data_3[56],
2547 data_3[58] & ~data_3[57] & data_3[56],
2548 data_3[58] & ~data_3[57] & ~data_3[56],
2549 ~data_3[58] & data_3[57] & data_3[56],
2550 ~data_3[58] & data_3[57] & ~data_3[56],
2551 ~data_3[58] & ~data_3[57] & data_3[56],
2552 ~data_3[58] & ~data_3[57] & ~data_3[56]};
2553
2554assign asi_irl_cleared[7:0] =
2555 {8 {irl_any_cleared}} & tid_dec_3[7:0];
2556
2557// Maintain TICK.NPT per thread
2558// TICK.NPT PORs to a 1, so store negative active
2559assign tick_npt_in_[7:0] =
2560 ( (wr_tid_dec[7:0] & {8 {wr_tick_2}}) & {8 {~data_1[63]}}) |
2561 (~(wr_tid_dec[7:0] & {8 {wr_tick_2}}) & tick_npt_[7:0]) ;
2562
2563tlu_asi_ctl_msff_ctl_macro__width_8 tick_npt_inv_lat (
2564 .scan_in(tick_npt_inv_lat_scanin),
2565 .scan_out(tick_npt_inv_lat_scanout),
2566 .l1clk (l1clk_pm1 ),
2567 .din (tick_npt_in_ [7:0] ),
2568 .dout (tick_npt_ [7:0] ),
2569 .siclk(siclk),
2570 .soclk(soclk)
2571);
2572
2573assign tick_npt_2_ =
2574 | (tick_npt_[7:0] & wr_tid_dec[7:0]);
2575
2576tlu_asi_ctl_msff_ctl_macro__width_1 tick_npt_3_inv_lat (
2577 .scan_in(tick_npt_3_inv_lat_scanin),
2578 .scan_out(tick_npt_3_inv_lat_scanout),
2579 .l1clk (l1clk_pm1 ),
2580 .din (tick_npt_2_ ),
2581 .dout (tick_npt_3_ ),
2582 .siclk(siclk),
2583 .soclk(soclk)
2584);
2585
2586// Maintain decr
2587assign decr_reg_in[63:46] =
2588 ({18 {~wr_decr_2}} & decr_reg [63:46]) |
2589 ({18 { wr_decr_2}} & data_1 [63:46]) ;
2590
2591tlu_asi_ctl_msff_ctl_macro__width_18 decr_lat (
2592 .scan_in(decr_lat_scanin),
2593 .scan_out(decr_lat_scanout),
2594 .l1clk (l1clk_pm1 ),
2595 .din (decr_reg_in [63:46] ),
2596 .dout (decr_reg [63:46] ),
2597 .siclk(siclk),
2598 .soclk(soclk)
2599);
2600
2601assign asi_decr[63:46] =
2602 decr_reg[63:46];
2603
2604// Mux ctl and data
2605
2606assign rd_pct_2 =
2607 rd_pc_2 | rd_iaw_2;
2608
2609assign trl_data[64:0] =
2610 { {48 {1'b0}},
2611 (trl1_asi_data[16:0] & {17 { data_3[58]}}) |
2612 (trl0_asi_data[16:0] & {17 {~data_3[58]}}) };
2613
2614assign tsd_data[64:48] =
2615 {17 {1'b0}};
2616assign tsd_data[47:2] =
2617 (pct1_asi_data[47:2] & {46 { data_3[58]}}) |
2618 (pct0_asi_data[47:2] & {46 {~data_3[58]}}) ;
2619assign tsd_data[1:0] =
2620 (tsd1_asi_data[1:0] & { 2 { data_3[58]}}) |
2621 (tsd0_asi_data[1:0] & { 2 {~data_3[58]}}) ;
2622
2623assign tba_htba_data[64] =
2624 tsd_data[64];
2625assign tba_htba_data[63:48] =
2626 {16 {(pct1_asi_data[47] & data_3[58]) |
2627 (pct0_asi_data[47] & ~data_3[58])}} ;
2628assign tba_htba_data[47:0] =
2629 tsd_data[47:0];
2630
2631assign tsa_nopc_data[64:0] =
2632 tsd_data[64:0];
2633
2634assign tsa_pc_data[64] = 1'b0;
2635assign tsa_pc_data[63:48] =
2636 ({16 { data_3[58]}} & {16 {pct1_asi_data[47 ]}}) |
2637 ({16 {~data_3[58]}} & {16 {pct0_asi_data[47 ]}}) ;
2638assign tsa_pc_data[47:0] =
2639 tsd_data[47:0];
2640
2641assign tsa_ecc_data[64:0] =
2642 {{49 {1'b0}},
2643 ({16 { data_3[58]}} & tel1_ecc[15:0]) |
2644 ({16 {~data_3[58]}} & tel0_ecc[15:0]) };
2645
2646assign tic_data[64:0] =
2647 {1'b0, ~tic_asi_data[63], tic_asi_data[62:0]};
2648//
2649// Force bits 6:0 of %stick to 1s
2650// Synthesis combined the rd_tic_3 and rd_tick_3 paths for bits 6:0
2651// rd_tick_3 is required in the data bits
2652assign tic_data_for_3[64:0] =
2653 tic_data[64:0] |
2654 {{58 {1'b0}}, {7 {data_3[52] & rd_tick_3}}};
2655assign tick_data[64:0] =
2656 {1'b0, ~tick_npt_3_, tic_asi_data[62:0]} |
2657 {{58 {1'b0}}, {7 {data_3[52] & rd_tick_3}}};
2658
2659assign pct_data[64] =
2660 {1 {1'b0}};
2661assign pct_data[63:2] =
2662 ({{16 {pct1_asi_data[47]}}, pct1_asi_data[47:2]} & {62 { data_3[58]}}) |
2663 ({{16 {pct0_asi_data[47]}}, pct0_asi_data[47:2]} & {62 {~data_3[58]}}) ;
2664assign pct_data[1] =
2665 {1 {1'b0}};
2666assign pct_data[0] =
2667 (pct1_asi_data[48] & data_3[58]) |
2668 (pct0_asi_data[48] & ~data_3[58]) ;
2669
2670assign rngf_cdbus_2[64:0] =
2671 {ctl_2, data_2[63:0]};
2672
2673assign no_rd_3 = ~rd_trl_3 & ~rd_tsd_3 & ~rd_tba_htba_3 &
2674 ~rd_tsa_pc_3 & ~rd_tsa_ecc_3 & ~rd_tsa_nopc_3 &
2675 ~rd_tic_3 & ~rd_tick_3 & ~rd_pct_3;
2676
2677assign data_3_in[64:0] =
2678 ({65 {no_rd_3 }} & rngf_cdbus_2 [64:0]) |
2679 ({65 {rd_trl_3 }} & trl_data [64:0]) |
2680 ({65 {rd_tsd_3 }} & tsd_data [64:0]) |
2681 ({65 {rd_tba_htba_3}} & tba_htba_data [64:0]) |
2682 ({65 {rd_tsa_pc_3 }} & tsa_pc_data [64:0]) |
2683 ({65 {rd_tsa_ecc_3 }} & tsa_ecc_data [64:0]) |
2684 ({65 {rd_tsa_nopc_3}} & tsa_nopc_data [64:0]) |
2685 ({65 {rd_tic_3 }} & tic_data_for_3 [64:0]) |
2686 ({65 {rd_tick_3 }} & tick_data [64:0]) |
2687 ({65 {rd_pct_3 }} & pct_data [64:0]) ;
2688
2689assign rd_tca_diag_2 =
2690 rd_tca_ecc_2 | rd_tca_data_2;
2691
2692
2693
2694/////////////////////////////////////////////////////////////////////
2695//STAGE 3
2696/////////////////////////////////////////////////////////////////////
2697// Mux previous results with TSA reads
2698
2699tlu_asi_ctl_msff_ctl_macro__width_65 rng_stg3 (
2700 .scan_in(rng_stg3_scanin),
2701 .scan_out(rng_stg3_scanout),
2702 .l1clk (l1clk_pm1 ),
2703 .din (data_3_in [64:0] ),
2704 .dout (data_3 [64:0] ),
2705 .siclk(siclk),
2706 .soclk(soclk)
2707);
2708
2709
2710tlu_asi_ctl_msff_ctl_macro__width_23 tsa_wr_lat (
2711 .scan_in(tsa_wr_lat_scanin),
2712 .scan_out(tsa_wr_lat_scanout),
2713 .l1clk (l1clk_pm1 ),
2714 .din ({rd_tsa_nopc_2,
2715 rd_tsa_pc_2,
2716 rd_tsa_ecc_2,
2717 rd_tic_2,
2718 rd_tick_2,
2719 rd_trl_2,
2720 rd_pct_2,
2721 rd_tsd_2,
2722 rd_tba_htba_2,
2723 rd_tca_diag_2,
2724 wr_mondo_head_2,
2725 wr_mondo_tail_2,
2726 wr_device_head_2,
2727 wr_device_tail_2,
2728 wr_res_err_head_2,
2729 wr_res_err_tail_2,
2730 wr_nonres_err_head_2,
2731 wr_nonres_err_tail_2,
2732 wr_tpc_2,
2733 wr_tnpc_2,
2734 wr_tstate_2,
2735 wr_tt_2,
2736 wr_htstate_2 }),
2737 .dout ({rd_tsa_nopc_3,
2738 rd_tsa_pc_3,
2739 rd_tsa_ecc_3,
2740 rd_tic_3,
2741 rd_tick_3,
2742 rd_trl_3,
2743 rd_pct_3,
2744 rd_tsd_3,
2745 rd_tba_htba_3,
2746 rd_tca_diag_3,
2747 wr_mondo_head_3,
2748 wr_mondo_tail_3,
2749 wr_device_head_3,
2750 wr_device_tail_3,
2751 wr_res_err_head_3,
2752 wr_res_err_tail_3,
2753 wr_nonres_err_head_3,
2754 wr_nonres_err_tail_3,
2755 wr_tpc_3,
2756 wr_tnpc_3,
2757 wr_tstate_3,
2758 wr_tt_3,
2759 wr_htstate_3 }),
2760 .siclk(siclk),
2761 .soclk(soclk)
2762);
2763
2764
2765// Since these access the TSA, need to send control one cycles later than
2766// normal
2767assign asi_wr_mondo_head [1:0] =
2768 {2 {wr_mondo_head_3}} & {data_3[58], ~data_3[58]};
2769assign asi_wr_mondo_tail [1:0] =
2770 {2 {wr_mondo_tail_3}} & {data_3[58], ~data_3[58]};
2771assign asi_wr_device_head [1:0] =
2772 {2 {wr_device_head_3}} & {data_3[58], ~data_3[58]};
2773assign asi_wr_device_tail [1:0] =
2774 {2 {wr_device_tail_3}} & {data_3[58], ~data_3[58]};
2775assign asi_wr_res_err_head [1:0] =
2776 {2 {wr_res_err_head_3}} & {data_3[58], ~data_3[58]};
2777assign asi_wr_res_err_tail [1:0] =
2778 {2 {wr_res_err_tail_3}} & {data_3[58], ~data_3[58]};
2779assign asi_wr_nonres_err_head [1:0] =
2780 {2 {wr_nonres_err_head_3}} & {data_3[58], ~data_3[58]};
2781assign asi_wr_nonres_err_tail [1:0] =
2782 {2 {wr_nonres_err_tail_3}} & {data_3[58], ~data_3[58]};
2783assign asi_wr_tpc [1:0] =
2784 {2 {wr_tpc_3}} & {data_3[58], ~data_3[58]};
2785assign asi_wr_tnpc [1:0] =
2786 ({2 {wr_tnpc_3}} & {data_3[58], ~data_3[58]}) |
2787 {2 {mbist_run}};
2788assign asi_wr_tstate [1:0] =
2789 {2 {wr_tstate_3}} & {data_3[58], ~data_3[58]};
2790assign asi_wr_tt [1:0] =
2791 {2 {wr_tt_3}} & {data_3[58], ~data_3[58]};
2792assign asi_wr_htstate [1:0] =
2793 {2 {wr_htstate_3}} & {data_3[58], ~data_3[58]};
2794
2795
2796// Do not need to check for interrupt if nonres_err registers are written
2797assign wr_iqr_3 =
2798 wr_mondo_head_3 | wr_mondo_tail_3 | wr_device_head_3 | wr_device_tail_3 |
2799 wr_res_err_head_3 | wr_res_err_tail_3;
2800
2801// Check for ECC errors
2802assign check_ecc =
2803 | (tlu_ceter_pscce[7:0] &
2804 { data_3[58] & data_3[57] & data_3[56],
2805 data_3[58] & data_3[57] & ~data_3[56],
2806 data_3[58] & ~data_3[57] & data_3[56],
2807 data_3[58] & ~data_3[57] & ~data_3[56],
2808 ~data_3[58] & data_3[57] & data_3[56],
2809 ~data_3[58] & data_3[57] & ~data_3[56],
2810 ~data_3[58] & ~data_3[57] & data_3[56],
2811 ~data_3[58] & ~data_3[57] & ~data_3[56]});
2812
2813assign asi_tccup_in =
2814 rd_tic_3 & ~rd_tick_3 & check_ecc;
2815assign asi_tccud_in =
2816 ~(rd_tic_3 & ~rd_tick_3) & ~rd_tca_diag_3;
2817assign tsacu_in =
2818 (rd_tsa_pc_3 | rd_tsa_nopc_3 | wr_tsa_3) & check_ecc;
2819
2820assign kill_write_if_error_in =
2821 wr_tsa_3 & check_ecc;
2822
2823tlu_asi_ctl_msff_ctl_macro__width_2 ecc_lat (
2824 .scan_in(ecc_lat_scanin),
2825 .scan_out(ecc_lat_scanout),
2826 .l1clk (l1clk_pm1 ),
2827 .din ({tsacu_in ,
2828 kill_write_if_error_in }),
2829 .dout ({ptsacu ,
2830 kill_write_if_error }),
2831 .siclk(siclk),
2832 .soclk(soclk)
2833);
2834
2835assign tsac =
2836 ((tel0_tsac & ~data_4[58]) |
2837 (tel1_tsac & data_4[58]) ) & ptsacu;
2838
2839assign tsau =
2840 ((tel0_tsau & ~data_4[58]) |
2841 (tel1_tsau & data_4[58]) ) & ptsacu;
2842
2843// For killing trap stack write
2844assign asi_tsacu[1:0] =
2845 {(tel1_tsac | tel1_tsau) & data_4[58] & kill_write_if_error,
2846 (tel0_tsac | tel0_tsau) & ~data_4[58] & kill_write_if_error};
2847
2848tlu_asi_ctl_msff_ctl_macro__width_2 tca_rd_addr_2_lat (
2849 .scan_in(tca_rd_addr_2_lat_scanin),
2850 .scan_out(tca_rd_addr_2_lat_scanout),
2851 .l1clk (l1clk_pm1 ),
2852 .din (tca_rd_addr [4:3] ),
2853 .dout (tca_rd_addr_2 [4:3] ),
2854 .siclk(siclk),
2855 .soclk(soclk)
2856);
2857
2858tlu_asi_ctl_msff_ctl_macro__width_2 tca_rd_addr_3_lat (
2859 .scan_in(tca_rd_addr_3_lat_scanin),
2860 .scan_out(tca_rd_addr_3_lat_scanout),
2861 .l1clk (l1clk_pm1 ),
2862 .din (tca_rd_addr_2 [4:3] ),
2863 .dout (tca_rd_addr_3 [4:3] ),
2864 .siclk(siclk),
2865 .soclk(soclk)
2866);
2867
2868tlu_asi_ctl_msff_ctl_macro__width_2 tca_rd_addr_4_lat (
2869 .scan_in(tca_rd_addr_4_lat_scanin),
2870 .scan_out(tca_rd_addr_4_lat_scanout),
2871 .l1clk (l1clk_pm1 ),
2872 .din (tca_rd_addr_3 [4:3] ),
2873 .dout (tca_rd_addr_4 [4:3] ),
2874 .siclk(siclk),
2875 .soclk(soclk)
2876);
2877
2878
2879assign asi_ece_exc =
2880 tsac | cel_tccp;
2881assign asi_eue_exc =
2882 tsau | cel_tcup;
2883assign asi_ecc_tid[2:0] =
2884 data_4[58:56];
2885
2886// For DSFSR
2887assign asi_tsac =
2888 tsac;
2889assign asi_tsau =
2890 tsau;
2891assign asi_tsacu_tid[2:0] =
2892 data_4[58:56];
2893
2894assign tlu_tca_tid[2:0] =
2895 data_4[58:56];
2896assign tlu_tca_index[1:0] =
2897 tca_rd_addr_4[4:3];
2898
2899
2900assign rngf_cdbus_3[64:0] =
2901 data_3[64:0];
2902
2903assign data_4_in[64:0] =
2904 ({65 {~mmu_asi_read}} & rngf_cdbus_3 [64:0]) |
2905 ({65 { mmu_asi_read}} & mmu_asi_data [64:0]) ;
2906
2907assign error_4_in =
2908 mmu_asi_cecc | mmu_asi_uecc | cel_tccp | cel_tcup | tsac | tsau;
2909
2910
2911
2912/////////////////////////////////////////////////////////////////////
2913//STAGE 4
2914/////////////////////////////////////////////////////////////////////
2915// Output latch
2916
2917tlu_asi_ctl_msff_ctl_macro__width_65 rng_stg4 (
2918 .scan_in(rng_stg4_scanin),
2919 .scan_out(rng_stg4_scanout),
2920 .l1clk (l1clk_pm1 ),
2921 .din (data_4_in [64:0] ),
2922 .dout (data_4 [64:0] ),
2923 .siclk(siclk),
2924 .soclk(soclk)
2925);
2926
2927tlu_asi_ctl_msff_ctl_macro__width_1 error_4_lat (
2928 .scan_in(error_4_lat_scanin),
2929 .scan_out(error_4_lat_scanout),
2930 .din (error_4_in ),
2931 .dout (error_4 ),
2932 .l1clk(l1clk),
2933 .siclk(siclk),
2934 .soclk(soclk)
2935);
2936
2937assign tlu_rngf_cdbus[64:0] =
2938 data_4[64:0];
2939
2940assign tlu_rngf_cdbus_error =
2941 error_4;
2942
2943assign check_qr_exc_in[3:0] =
2944 {wr_iqr_3, data_3[58:56]};
2945
2946tlu_asi_ctl_msff_ctl_macro__width_4 check_qr_exc_lat (
2947 .scan_in(check_qr_exc_lat_scanin),
2948 .scan_out(check_qr_exc_lat_scanout),
2949 .l1clk (l1clk_pm1 ),
2950 .din (check_qr_exc_in [3:0] ),
2951 .dout (check_qr_exc [3:0] ),
2952 .siclk(siclk),
2953 .soclk(soclk)
2954);
2955
2956assign asi_check_qr_exc[7:0] =
2957 {8 {check_qr_exc[3]}} &
2958 { check_qr_exc[2] & check_qr_exc[1] & check_qr_exc[0],
2959 check_qr_exc[2] & check_qr_exc[1] & ~check_qr_exc[0],
2960 check_qr_exc[2] & ~check_qr_exc[1] & check_qr_exc[0],
2961 check_qr_exc[2] & ~check_qr_exc[1] & ~check_qr_exc[0],
2962 ~check_qr_exc[2] & check_qr_exc[1] & check_qr_exc[0],
2963 ~check_qr_exc[2] & check_qr_exc[1] & ~check_qr_exc[0],
2964 ~check_qr_exc[2] & ~check_qr_exc[1] & check_qr_exc[0],
2965 ~check_qr_exc[2] & ~check_qr_exc[1] & ~check_qr_exc[0]};
2966
2967
2968
2969//////////////////////////////////////////////////////////////////////////////
2970//
2971// Error inject staging
2972//
2973
2974tlu_asi_ctl_msff_ctl_macro__width_11 error_inject_lat (
2975 .scan_in(error_inject_lat_scanin),
2976 .scan_out(error_inject_lat_scanout),
2977 .din ({error_inject_enable,
2978 error_inject_tccu,
2979 error_inject_tsau,
2980 error_inject_mask [7:0]}),
2981 .dout ({error_enable,
2982 error_tccu,
2983 error_tsau,
2984 error_mask [7:0]}),
2985 .l1clk(l1clk),
2986 .siclk(siclk),
2987 .soclk(soclk)
2988);
2989
2990assign asi_error_tccu =
2991 error_enable & error_tccu;
2992assign asi_error_tsau =
2993 error_enable & error_tsau;
2994assign asi_error_mask[7:0] =
2995 error_mask[7:0];
2996
2997
2998
2999
3000
3001//////////////////////////////////////////////////////////////////////////////
3002//
3003// LSU control reg shadow copies
3004//
3005
3006assign write_lsu_ctl[7:0] =
3007 ({8 { wr_lsu_ctl_2}} & wr_tid_dec[7:0]) &
3008 tlu_lsu_clear_ctl_reg_[7:0];
3009
3010assign hold_lsu_ctl[7:0] =
3011 ({8 {~wr_lsu_ctl_2}} | ~wr_tid_dec[7:0]) &
3012 tlu_lsu_clear_ctl_reg_[7:0];
3013
3014assign spec_enable_in[7:0] =
3015 (write_lsu_ctl[7:0] & {8 {data_1[4]}}) |
3016 ( hold_lsu_ctl[7:0] & spec_enable[7:0]) ;
3017
3018tlu_asi_ctl_msff_ctl_macro__width_8 spec_enable_lat (
3019 .scan_in(spec_enable_lat_scanin),
3020 .scan_out(spec_enable_lat_scanout),
3021 .din (spec_enable_in [7:0] ),
3022 .dout (spec_enable [7:0] ),
3023 .l1clk(l1clk),
3024 .siclk(siclk),
3025 .soclk(soclk)
3026);
3027
3028assign asi_spec_enable[7:0] =
3029 spec_enable[7:0];
3030
3031assign tlu_spec_enable[7:0] =
3032 spec_enable[7:0];
3033
3034assign immu_enable_in[7:0] =
3035 (write_lsu_ctl[7:0] & {8 {data_1[2]}}) |
3036 ( hold_lsu_ctl[7:0] & immu_enable[7:0]) ;
3037
3038tlu_asi_ctl_msff_ctl_macro__width_8 immu_enable_lat (
3039 .scan_in(immu_enable_lat_scanin),
3040 .scan_out(immu_enable_lat_scanout),
3041 .din (immu_enable_in [7:0] ),
3042 .dout (immu_enable [7:0] ),
3043 .l1clk(l1clk),
3044 .siclk(siclk),
3045 .soclk(soclk)
3046);
3047
3048assign asi_immu_enable[7:0] =
3049 immu_enable[7:0];
3050
3051
3052
3053//////////////////////////////////////////////////////////////////////////////
3054//
3055// Spares
3056//
3057
3058// Use spare flop 7
3059tlu_asi_ctl_msff_ctl_macro__scanreverse_1__width_9 spare_8_0_lat (
3060 .scan_in(spares_scanin),
3061 .scan_out(spares_scanout),
3062 .din ({rd_halt ,
3063 wr_halt ,
3064 {7{1'b0}} }),
3065 .dout ({rd_halt_2 ,
3066 wr_halt_2 ,
3067 unused [6:0]}),
3068 .l1clk(l1clk),
3069 .siclk(siclk),
3070 .soclk(soclk)
3071);
3072
3073assign asi_halt[7:0] =
3074 {8 {wr_halt_2}} & wr_tid_dec[7:0];
3075
3076assign asi_clear_spu_trap_req[7:0] =
3077 {8 {rd_halt_2}} & wr_tid_dec[7:0];
3078
3079
3080
3081
3082supply0 vss; // <- port for ground
3083supply1 vdd; // <- port for power
3084// fixscan start:
3085assign pmen_lat_scanin = scan_in ;
3086assign stg1_en_lat_scanin = pmen_lat_scanout ;
3087assign stg2_en_lat_scanin = stg1_en_lat_scanout ;
3088assign stg3_en_lat_scanin = stg2_en_lat_scanout ;
3089assign stg4_en_lat_scanin = stg3_en_lat_scanout ;
3090assign mbist_run_lat_scanin = stg4_en_lat_scanout ;
3091assign mbist_tsa0_write_lat_scanin = mbist_run_lat_scanout ;
3092assign mbist_tsa1_write_lat_scanin = mbist_tsa0_write_lat_scanout;
3093assign mbist_tca_write_lat_scanin = mbist_tsa1_write_lat_scanout;
3094assign mbist_addr_lat_scanin = mbist_tca_write_lat_scanout;
3095assign mbist_tsa0_read_lat_scanin = mbist_addr_lat_scanout ;
3096assign mbist_tsa1_read_lat_scanin = mbist_tsa0_read_lat_scanout;
3097assign mbist_tca_read_lat_scanin = mbist_tsa1_read_lat_scanout;
3098assign mbist_cmpsel_lat_scanin = mbist_tca_read_lat_scanout;
3099assign mbist_addr_2_lat_scanin = mbist_cmpsel_lat_scanout ;
3100assign mbist_tsa0_read_2_lat_scanin = mbist_addr_2_lat_scanout ;
3101assign mbist_tsa1_read_2_lat_scanin = mbist_tsa0_read_2_lat_scanout;
3102assign mbist_tca_read_2_lat_scanin = mbist_tsa1_read_2_lat_scanout;
3103assign mbist_cmpsel_2_lat_scanin = mbist_tca_read_2_lat_scanout;
3104assign mbist_wdata_2_lat_scanin = mbist_cmpsel_2_lat_scanout;
3105assign mbist_tsa0_read_3_lat_scanin = mbist_wdata_2_lat_scanout;
3106assign mbist_tsa1_read_3_lat_scanin = mbist_tsa0_read_3_lat_scanout;
3107assign mbist_tca_read_3_lat_scanin = mbist_tsa1_read_3_lat_scanout;
3108assign mbist_wdata_3_lat_scanin = mbist_tca_read_3_lat_scanout;
3109assign mbist_tsa0_read_4_lat_scanin = mbist_wdata_3_lat_scanout;
3110assign mbist_tsa1_read_4_lat_scanin = mbist_tsa0_read_4_lat_scanout;
3111assign compare_data_lat_scanin = mbist_tsa1_read_4_lat_scanout;
3112assign tsa0_fail_lat_scanin = compare_data_lat_scanout ;
3113assign tsa1_fail_lat_scanin = tsa0_fail_lat_scanout ;
3114assign tca_fail_lat_scanin = tsa1_fail_lat_scanout ;
3115assign compare_lat_scanin = tca_fail_lat_scanout ;
3116assign preempt_trap_lat_scanin = compare_lat_scanout ;
3117assign rng_stg1_data_scanin = preempt_trap_lat_scanout ;
3118assign ctl_1_lat_scanin = rng_stg1_data_scanout ;
3119assign hpstatehpriv_lat_scanin = ctl_1_lat_scanout ;
3120assign pstatepriv_lat_scanin = hpstatehpriv_lat_scanout ;
3121assign stg2_data_lat_scanin = pstatepriv_lat_scanout ;
3122assign stg2_ctl_lat_scanin = stg2_data_lat_scanout ;
3123assign wr_tid_dec_lat_scanin = stg2_ctl_lat_scanout ;
3124assign irl_any_cleared_lat_scanin = wr_tid_dec_lat_scanout ;
3125assign tick_npt_inv_lat_scanin = irl_any_cleared_lat_scanout;
3126assign tick_npt_3_inv_lat_scanin = tick_npt_inv_lat_scanout ;
3127assign decr_lat_scanin = tick_npt_3_inv_lat_scanout;
3128assign rng_stg3_scanin = decr_lat_scanout ;
3129assign tsa_wr_lat_scanin = rng_stg3_scanout ;
3130assign ecc_lat_scanin = tsa_wr_lat_scanout ;
3131assign tca_rd_addr_2_lat_scanin = ecc_lat_scanout ;
3132assign tca_rd_addr_3_lat_scanin = tca_rd_addr_2_lat_scanout;
3133assign tca_rd_addr_4_lat_scanin = tca_rd_addr_3_lat_scanout;
3134assign rng_stg4_scanin = tca_rd_addr_4_lat_scanout;
3135assign error_4_lat_scanin = rng_stg4_scanout ;
3136assign check_qr_exc_lat_scanin = error_4_lat_scanout ;
3137assign error_inject_lat_scanin = check_qr_exc_lat_scanout ;
3138assign spec_enable_lat_scanin = error_inject_lat_scanout ;
3139assign immu_enable_lat_scanin = spec_enable_lat_scanout ;
3140assign spares_scanin = immu_enable_lat_scanout ;
3141assign scan_out = spares_scanout ;
3142
3143assign clfesr_lat_wmr_scanin = wmr_scan_in ;
3144assign wmr_scan_out = clfesr_lat_wmr_scanout ;
3145// fixscan end:
3146endmodule
3147
3148
3149
3150
3151
3152
3153
3154// any PARAMS parms go into naming of macro
3155
3156module tlu_asi_ctl_l1clkhdr_ctl_macro (
3157 l2clk,
3158 l1en,
3159 pce_ov,
3160 stop,
3161 se,
3162 l1clk);
3163
3164
3165 input l2clk;
3166 input l1en;
3167 input pce_ov;
3168 input stop;
3169 input se;
3170 output l1clk;
3171
3172
3173
3174
3175
3176cl_sc1_l1hdr_8x c_0 (
3177
3178
3179 .l2clk(l2clk),
3180 .pce(l1en),
3181 .l1clk(l1clk),
3182 .se(se),
3183 .pce_ov(pce_ov),
3184 .stop(stop)
3185);
3186
3187
3188
3189endmodule
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203// any PARAMS parms go into naming of macro
3204
3205module tlu_asi_ctl_msff_ctl_macro__width_1 (
3206 din,
3207 l1clk,
3208 scan_in,
3209 siclk,
3210 soclk,
3211 dout,
3212 scan_out);
3213wire [0:0] fdin;
3214
3215 input [0:0] din;
3216 input l1clk;
3217 input scan_in;
3218
3219
3220 input siclk;
3221 input soclk;
3222
3223 output [0:0] dout;
3224 output scan_out;
3225assign fdin[0:0] = din[0:0];
3226
3227
3228
3229
3230
3231
3232dff #(1) d0_0 (
3233.l1clk(l1clk),
3234.siclk(siclk),
3235.soclk(soclk),
3236.d(fdin[0:0]),
3237.si(scan_in),
3238.so(scan_out),
3239.q(dout[0:0])
3240);
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253endmodule
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267// any PARAMS parms go into naming of macro
3268
3269module tlu_asi_ctl_msff_ctl_macro__width_5 (
3270 din,
3271 l1clk,
3272 scan_in,
3273 siclk,
3274 soclk,
3275 dout,
3276 scan_out);
3277wire [4:0] fdin;
3278wire [3:0] so;
3279
3280 input [4:0] din;
3281 input l1clk;
3282 input scan_in;
3283
3284
3285 input siclk;
3286 input soclk;
3287
3288 output [4:0] dout;
3289 output scan_out;
3290assign fdin[4:0] = din[4:0];
3291
3292
3293
3294
3295
3296
3297dff #(5) d0_0 (
3298.l1clk(l1clk),
3299.siclk(siclk),
3300.soclk(soclk),
3301.d(fdin[4:0]),
3302.si({scan_in,so[3:0]}),
3303.so({so[3:0],scan_out}),
3304.q(dout[4:0])
3305);
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318endmodule
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332// any PARAMS parms go into naming of macro
3333
3334module tlu_asi_ctl_msff_ctl_macro__width_4 (
3335 din,
3336 l1clk,
3337 scan_in,
3338 siclk,
3339 soclk,
3340 dout,
3341 scan_out);
3342wire [3:0] fdin;
3343wire [2:0] so;
3344
3345 input [3:0] din;
3346 input l1clk;
3347 input scan_in;
3348
3349
3350 input siclk;
3351 input soclk;
3352
3353 output [3:0] dout;
3354 output scan_out;
3355assign fdin[3:0] = din[3:0];
3356
3357
3358
3359
3360
3361
3362dff #(4) d0_0 (
3363.l1clk(l1clk),
3364.siclk(siclk),
3365.soclk(soclk),
3366.d(fdin[3:0]),
3367.si({scan_in,so[2:0]}),
3368.so({so[2:0],scan_out}),
3369.q(dout[3:0])
3370);
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383endmodule
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397// any PARAMS parms go into naming of macro
3398
3399module tlu_asi_ctl_msff_ctl_macro__width_8 (
3400 din,
3401 l1clk,
3402 scan_in,
3403 siclk,
3404 soclk,
3405 dout,
3406 scan_out);
3407wire [7:0] fdin;
3408wire [6:0] so;
3409
3410 input [7:0] din;
3411 input l1clk;
3412 input scan_in;
3413
3414
3415 input siclk;
3416 input soclk;
3417
3418 output [7:0] dout;
3419 output scan_out;
3420assign fdin[7:0] = din[7:0];
3421
3422
3423
3424
3425
3426
3427dff #(8) d0_0 (
3428.l1clk(l1clk),
3429.siclk(siclk),
3430.soclk(soclk),
3431.d(fdin[7:0]),
3432.si({scan_in,so[6:0]}),
3433.so({so[6:0],scan_out}),
3434.q(dout[7:0])
3435);
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448endmodule
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462// any PARAMS parms go into naming of macro
3463
3464module tlu_asi_ctl_msff_ctl_macro__width_16 (
3465 din,
3466 l1clk,
3467 scan_in,
3468 siclk,
3469 soclk,
3470 dout,
3471 scan_out);
3472wire [15:0] fdin;
3473wire [14:0] so;
3474
3475 input [15:0] din;
3476 input l1clk;
3477 input scan_in;
3478
3479
3480 input siclk;
3481 input soclk;
3482
3483 output [15:0] dout;
3484 output scan_out;
3485assign fdin[15:0] = din[15:0];
3486
3487
3488
3489
3490
3491
3492dff #(16) d0_0 (
3493.l1clk(l1clk),
3494.siclk(siclk),
3495.soclk(soclk),
3496.d(fdin[15:0]),
3497.si({scan_in,so[14:0]}),
3498.so({so[14:0],scan_out}),
3499.q(dout[15:0])
3500);
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513endmodule
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527// any PARAMS parms go into naming of macro
3528
3529module tlu_asi_ctl_msff_ctl_macro__width_64 (
3530 din,
3531 l1clk,
3532 scan_in,
3533 siclk,
3534 soclk,
3535 dout,
3536 scan_out);
3537wire [63:0] fdin;
3538wire [62:0] so;
3539
3540 input [63:0] din;
3541 input l1clk;
3542 input scan_in;
3543
3544
3545 input siclk;
3546 input soclk;
3547
3548 output [63:0] dout;
3549 output scan_out;
3550assign fdin[63:0] = din[63:0];
3551
3552
3553
3554
3555
3556
3557dff #(64) d0_0 (
3558.l1clk(l1clk),
3559.siclk(siclk),
3560.soclk(soclk),
3561.d(fdin[63:0]),
3562.si({scan_in,so[62:0]}),
3563.so({so[62:0],scan_out}),
3564.q(dout[63:0])
3565);
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578endmodule
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592// any PARAMS parms go into naming of macro
3593
3594module tlu_asi_ctl_msff_ctl_macro__width_72 (
3595 din,
3596 l1clk,
3597 scan_in,
3598 siclk,
3599 soclk,
3600 dout,
3601 scan_out);
3602wire [71:0] fdin;
3603wire [70:0] so;
3604
3605 input [71:0] din;
3606 input l1clk;
3607 input scan_in;
3608
3609
3610 input siclk;
3611 input soclk;
3612
3613 output [71:0] dout;
3614 output scan_out;
3615assign fdin[71:0] = din[71:0];
3616
3617
3618
3619
3620
3621
3622dff #(72) d0_0 (
3623.l1clk(l1clk),
3624.siclk(siclk),
3625.soclk(soclk),
3626.d(fdin[71:0]),
3627.si({scan_in,so[70:0]}),
3628.so({so[70:0],scan_out}),
3629.q(dout[71:0])
3630);
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643endmodule
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657// any PARAMS parms go into naming of macro
3658
3659module tlu_asi_ctl_msff_ctl_macro__width_18 (
3660 din,
3661 l1clk,
3662 scan_in,
3663 siclk,
3664 soclk,
3665 dout,
3666 scan_out);
3667wire [17:0] fdin;
3668wire [16:0] so;
3669
3670 input [17:0] din;
3671 input l1clk;
3672 input scan_in;
3673
3674
3675 input siclk;
3676 input soclk;
3677
3678 output [17:0] dout;
3679 output scan_out;
3680assign fdin[17:0] = din[17:0];
3681
3682
3683
3684
3685
3686
3687dff #(18) d0_0 (
3688.l1clk(l1clk),
3689.siclk(siclk),
3690.soclk(soclk),
3691.d(fdin[17:0]),
3692.si({scan_in,so[16:0]}),
3693.so({so[16:0],scan_out}),
3694.q(dout[17:0])
3695);
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708endmodule
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722// any PARAMS parms go into naming of macro
3723
3724module tlu_asi_ctl_msff_ctl_macro__width_65 (
3725 din,
3726 l1clk,
3727 scan_in,
3728 siclk,
3729 soclk,
3730 dout,
3731 scan_out);
3732wire [64:0] fdin;
3733wire [63:0] so;
3734
3735 input [64:0] din;
3736 input l1clk;
3737 input scan_in;
3738
3739
3740 input siclk;
3741 input soclk;
3742
3743 output [64:0] dout;
3744 output scan_out;
3745assign fdin[64:0] = din[64:0];
3746
3747
3748
3749
3750
3751
3752dff #(65) d0_0 (
3753.l1clk(l1clk),
3754.siclk(siclk),
3755.soclk(soclk),
3756.d(fdin[64:0]),
3757.si({scan_in,so[63:0]}),
3758.so({so[63:0],scan_out}),
3759.q(dout[64:0])
3760);
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773endmodule
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787// any PARAMS parms go into naming of macro
3788
3789module tlu_asi_ctl_msff_ctl_macro__width_23 (
3790 din,
3791 l1clk,
3792 scan_in,
3793 siclk,
3794 soclk,
3795 dout,
3796 scan_out);
3797wire [22:0] fdin;
3798wire [21:0] so;
3799
3800 input [22:0] din;
3801 input l1clk;
3802 input scan_in;
3803
3804
3805 input siclk;
3806 input soclk;
3807
3808 output [22:0] dout;
3809 output scan_out;
3810assign fdin[22:0] = din[22:0];
3811
3812
3813
3814
3815
3816
3817dff #(23) d0_0 (
3818.l1clk(l1clk),
3819.siclk(siclk),
3820.soclk(soclk),
3821.d(fdin[22:0]),
3822.si({scan_in,so[21:0]}),
3823.so({so[21:0],scan_out}),
3824.q(dout[22:0])
3825);
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838endmodule
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852// any PARAMS parms go into naming of macro
3853
3854module tlu_asi_ctl_msff_ctl_macro__width_2 (
3855 din,
3856 l1clk,
3857 scan_in,
3858 siclk,
3859 soclk,
3860 dout,
3861 scan_out);
3862wire [1:0] fdin;
3863wire [0:0] so;
3864
3865 input [1:0] din;
3866 input l1clk;
3867 input scan_in;
3868
3869
3870 input siclk;
3871 input soclk;
3872
3873 output [1:0] dout;
3874 output scan_out;
3875assign fdin[1:0] = din[1:0];
3876
3877
3878
3879
3880
3881
3882dff #(2) d0_0 (
3883.l1clk(l1clk),
3884.siclk(siclk),
3885.soclk(soclk),
3886.d(fdin[1:0]),
3887.si({scan_in,so[0:0]}),
3888.so({so[0:0],scan_out}),
3889.q(dout[1:0])
3890);
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903endmodule
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917// any PARAMS parms go into naming of macro
3918
3919module tlu_asi_ctl_msff_ctl_macro__width_11 (
3920 din,
3921 l1clk,
3922 scan_in,
3923 siclk,
3924 soclk,
3925 dout,
3926 scan_out);
3927wire [10:0] fdin;
3928wire [9:0] so;
3929
3930 input [10:0] din;
3931 input l1clk;
3932 input scan_in;
3933
3934
3935 input siclk;
3936 input soclk;
3937
3938 output [10:0] dout;
3939 output scan_out;
3940assign fdin[10:0] = din[10:0];
3941
3942
3943
3944
3945
3946
3947dff #(11) d0_0 (
3948.l1clk(l1clk),
3949.siclk(siclk),
3950.soclk(soclk),
3951.d(fdin[10:0]),
3952.si({scan_in,so[9:0]}),
3953.so({so[9:0],scan_out}),
3954.q(dout[10:0])
3955);
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968endmodule
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982// any PARAMS parms go into naming of macro
3983
3984module tlu_asi_ctl_msff_ctl_macro__scanreverse_1__width_9 (
3985 din,
3986 l1clk,
3987 scan_in,
3988 siclk,
3989 soclk,
3990 dout,
3991 scan_out);
3992wire [8:0] fdin;
3993wire [0:7] so;
3994
3995 input [8:0] din;
3996 input l1clk;
3997 input scan_in;
3998
3999
4000 input siclk;
4001 input soclk;
4002
4003 output [8:0] dout;
4004 output scan_out;
4005assign fdin[8:0] = din[8:0];
4006
4007
4008
4009
4010
4011
4012dff #(9) d0_0 (
4013.l1clk(l1clk),
4014.siclk(siclk),
4015.soclk(soclk),
4016.d(fdin[8:0]),
4017.si({so[0:7],scan_in}),
4018.so({scan_out,so[0:7]}),
4019.q(dout[8:0])
4020);
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033endmodule
4034
4035
4036
4037
4038
4039
4040
4041