Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / tlu / rtl / tlu_trl_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: tlu_trl_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_trl_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_tlu_pmen,
45 tcu_shscanid,
46 tcu_ss_mode,
47 tcu_do_mode,
48 thread_group,
49 mbi_run,
50 ftu_ifu_quiesce,
51 pku_quiesce,
52 exu_tlu_window_block,
53 lsu_stb_empty,
54 fgu_fpx_ieee_trap_fw,
55 fgu_fpd_ieee_trap_fw,
56 fgu_fpx_unfin_fw,
57 fgu_fpd_unfin_fw,
58 fgu_fpd_idiv0_trap_fw,
59 fgu_fpx_trap_tid_fw,
60 fgu_fpd_trap_tid_fw,
61 mmu_write_itlb,
62 mmu_reload_done,
63 mmu_i_unauth_access,
64 mmu_i_tsb_miss,
65 mmu_d_tsb_miss,
66 mmu_i_tte_outofrange,
67 mmu_d_tte_outofrange,
68 spu_pmu_ma_busy,
69 spu_tlu_cwq_busy,
70 spu_tlu_ma_int_req,
71 fls_wstate0,
72 fls_wstate1,
73 fls_wstate2,
74 fls_wstate3,
75 fls_tcc_number_0,
76 fls_tcc_number_1,
77 fls_tcc_number_2,
78 fls_tcc_number_3,
79 fls_tid_d,
80 fls_tid_dec_w_in,
81 fls_por_request,
82 fls_xir_request,
83 fls_ivt_request,
84 fls_sir_request,
85 fls_itm_request,
86 fls_iln_request,
87 fls_hst_request,
88 fls_tlz_request,
89 fls_sma_request,
90 fls_cwq_request,
91 fls_ade_request,
92 fls_iae_request,
93 fls_ipe_request,
94 fls_ipv_request,
95 fls_inp_request,
96 fls_iar_request,
97 fls_irr_request,
98 fls_mar_request,
99 fls_mrr_request,
100 fls_pro_request,
101 fls_ill_request,
102 fls_don_request,
103 fls_ret_request,
104 fls_fpd_request,
105 fls_snn_request,
106 fls_sno_request,
107 fls_fnn_request,
108 fls_fno_request,
109 fls_clw_request,
110 fls_dtm_request,
111 fls_ldf_request,
112 fls_stf_request,
113 fls_dap_request,
114 fls_vaw_request,
115 fls_iaw_request,
116 fls_paw_request,
117 fls_maa_request,
118 fls_fpe_request,
119 fls_fei_request,
120 fls_fof_request,
121 fls_pra_request,
122 fls_dia_request,
123 fls_ups_request,
124 fls_dpv_request,
125 fls_dnc_request,
126 fls_dnf_request,
127 fls_dso_request,
128 fls_tof_request,
129 fls_dbz_request,
130 fls_tcc_request,
131 fls_dae_request,
132 fls_lsr_request,
133 fls_irt_request,
134 fls_drt_request,
135 fls_pmu_request,
136 fls_mqr_request,
137 fls_dqr_request,
138 fls_rqr_request,
139 fls_idl_request,
140 fls_res_request,
141 fls_ssr_request,
142 fls_ssc_request,
143 fls_nns_request,
144 fls_ime_request,
145 fls_dme_request,
146 fls_eer_request,
147 fls_icp_request,
148 fls_ftt_request,
149 fls_ibp_request,
150 fls_tct_request,
151 fls_ref_request,
152 fls_pc_valid,
153 pmu_tlu_trap_m,
154 fls_trl_l1en,
155 fls_core_running,
156 tlu_flush_ifu,
157 pct_npc_is_nonseq,
158 trlx_itw_wait,
159 trlx_itw_last,
160 tsa_gl,
161 tsa_tnpc_nonseq,
162 tel_tsacu_exc,
163 tlu_ceter_de,
164 tlu_ceter_pscce,
165 tsd_hpstate_red,
166 tsd_hpstate_hpriv,
167 tsd_hpstate_tlz,
168 tsd_pstate_ie,
169 tsd_pstate_am,
170 tsd_htstate_hpriv,
171 tic_addr,
172 tic_not_valid,
173 tic_match,
174 cel_tccd,
175 cel_tcud,
176 asi_tsa_rd_addr,
177 asi_tsa_rd_iqr_ecc,
178 asi_tsa_tid,
179 asi_rd_tl,
180 asi_wr_tl,
181 asi_rd_pil,
182 asi_wr_pil,
183 asi_rd_gl,
184 asi_wr_gl,
185 asi_wr_set_softint,
186 asi_wr_clear_softint,
187 asi_rd_softint,
188 asi_wr_softint,
189 asi_rd_hintp,
190 asi_wr_hintp,
191 asi_wr_data,
192 asi_preempt_trap,
193 asi_preempt_done_retry,
194 asi_rmw_tsa,
195 asi_wr_asireg,
196 asi_trl_pstate_en,
197 asi_mbist_addr,
198 asi_mbist_tsa_rd_en,
199 asi_mbist_tsa_wr_en,
200 scan_out,
201 wmr_scan_out,
202 spc_core_running_status,
203 trl_core_running_status,
204 trl_pil_mask_15,
205 trl_iln_exc,
206 trl_hstick_match,
207 trl_unhalt_,
208 trl_tlz_exc,
209 trl_nns_exc,
210 trl_ssc_exc,
211 trl_take_sma,
212 trl_take_cwq,
213 trl_take_xir,
214 trl_take_ftt,
215 trl_pc_sel_trap_pc,
216 trl_npc_sel_trap_npc,
217 trl_npc_sel_tnpc,
218 trl_invalidate_pc,
219 trl_invalidate_npc,
220 trl_trap_type,
221 trl_tsa_trap_type,
222 trl_asireg_sel,
223 trl_asireg_en,
224 trl_thread_sel,
225 trl_tba_sel,
226 trl_pstate_thread_sel,
227 trl_don_ret_pstate_sel,
228 trl_pstate_en,
229 trl_pc_thread_sel,
230 trl_pc_pstate_am_,
231 trl_pc_sel_pc,
232 trl_pc_sel_npc,
233 trl_pc_sel_trap,
234 trl_pc_sel_reset,
235 trl_pc_done,
236 trl_pc_retry,
237 trl_pc_tte,
238 trl_pct_trap_pc_en,
239 trl_pct_tnpc_en,
240 trl_stay_in_priv,
241 trl_reset_trap,
242 trl_other_trap,
243 trl_tl_gt_0,
244 trl_tl_eq_0,
245 trl_tsa_wr_en,
246 trl_tsa_rd_en,
247 trl_tsa_wr_addr,
248 trl_tsa_rd_addr,
249 trl_save_tsa,
250 trl_tsd_tsa_en,
251 trl_tsd_tsa_wd_en,
252 trl_capture_ss,
253 trl_rmw_tsa,
254 trl_tsa_gl,
255 trl_asi_data,
256 trl_ss_complete,
257 trl_itw_wait,
258 trl_itw_last,
259 trl_shscanid,
260 trl_shscanid_2,
261 trl_shadow_tl,
262 trl_tl_for_tt,
263 trl_fls_npc_en,
264 trl_tel_en,
265 trl_trap_taken,
266 trl_gl0,
267 trl_gl1,
268 trl_gl2,
269 trl_gl3,
270 trl_tsacu_en_in,
271 tlu_tsa_index,
272 tlu_tccd,
273 tlu_tcud,
274 tlu_tca_index,
275 tlu_window_block,
276 tlu_trap_pc_valid,
277 tlu_retry,
278 tlu_ifu_invalidate,
279 tlu_trap_tid,
280 tlu_itlb_reload,
281 tlu_ccr_cwp_valid,
282 tlu_ccr_cwp_tid,
283 tlu_asi_valid,
284 tlu_asi_tid,
285 tlu_gl0,
286 tlu_gl1,
287 tlu_gl2,
288 tlu_gl3,
289 tlu_tl_gt_0,
290 tlu_mmu_tl_gt_0,
291 tlu_release_tte,
292 tlu_lsu_clear_ctl_reg_,
293 tlu_pmu_trap_taken,
294 tlu_pmu_trap_mask_e);
295wire pce_ov;
296wire stop;
297wire siclk;
298wire soclk;
299wire se;
300wire [2:0] maxtl;
301wire [2:0] maxptl;
302wire [2:0] maxtl_minus_one;
303wire [1:0] maxgl;
304wire l1clk;
305wire [3:0] thread_active;
306wire [3:0] core_running_status;
307wire [3:0] clear_l1en_per_thread_int;
308wire [3:0] trap_taken0;
309wire take_itw_last;
310wire suppress_don_ret_taken_;
311wire flush_ifu_last_lat_scanin;
312wire flush_ifu_last_lat_scanout;
313wire [3:0] flush_ifu_last;
314wire [3:0] l1en_per_thread_int_in;
315wire [3:0] l1en_per_thread_int;
316wire l1en_per_thread_int_lat_scanin;
317wire l1en_per_thread_int_lat_scanout;
318wire [3:0] l1en_don_ret_in;
319wire take_don_last;
320wire take_ret_last;
321wire l1en_don_ret_lat_scanin;
322wire l1en_don_ret_lat_scanout;
323wire [3:0] l1en_don_ret;
324wire [3:0] l1en_per_thread;
325wire l1clk_pm4;
326wire l1clk_pm3;
327wire l1clk_pm2;
328wire l1clk_pm1;
329wire tid_dec_w_lat_scanin;
330wire tid_dec_w_lat_scanout;
331wire [3:0] tid_dec_w;
332wire cwq_busy_in;
333wire cwq_busy_lat_scanin;
334wire cwq_busy_lat_scanout;
335wire cwq_busy;
336wire [3:0] cwq_interlock_;
337wire [3:0] quiesced_in;
338wire [3:0] stb_empty;
339wire [3:0] i_quiesce;
340wire [3:0] p_quiesce;
341wire [3:0] ma_idle;
342wire [3:0] pitw_req_in;
343wire quiesced_last_lat_scanin;
344wire quiesced_last_lat_scanout;
345wire [3:0] quiesced;
346wire [3:0] quiesced_last;
347wire [3:0] pidl_req_in;
348wire [3:0] idl_req;
349wire [3:0] idl_req_in;
350wire idl_req_lat_scanin;
351wire idl_req_lat_scanout;
352wire i_quiesce_lat_scanin;
353wire i_quiesce_lat_scanout;
354wire p_quiesce_lat_scanin;
355wire p_quiesce_lat_scanout;
356wire ma_busy_lat_scanin;
357wire ma_busy_lat_scanout;
358wire ma_busy;
359wire [2:0] ma_tid;
360wire [3:0] core_running_status_in;
361wire [3:0] trap_por_res_ssr;
362wire core_running_status_lat_scanin;
363wire core_running_status_lat_scanout;
364wire [3:0] ever_been_running_in;
365wire [3:0] ever_been_running;
366wire ever_been_running_lat_scanin;
367wire ever_been_running_lat_scanout;
368wire [3:0] pdisrupting_req;
369wire [3:0] disrupting_req;
370wire [3:0] por_req_in;
371wire [3:0] por_req;
372wire [3:0] por_req_in_ntt;
373wire por_req_lat_scanin;
374wire por_req_lat_scanout;
375wire [3:0] pxir_req_in;
376wire [3:0] xir_req;
377wire [3:0] xir_req_in;
378wire [3:0] pxir_req_in_ntt;
379wire xir_req_lat_scanin;
380wire xir_req_lat_scanout;
381wire [3:0] peer_req_in;
382wire [3:0] eer_req;
383wire [3:0] eer_req_in;
384wire [3:0] peer_req_in_ntt;
385wire eer_req_lat_scanin;
386wire eer_req_lat_scanout;
387wire [3:0] icp_req_in;
388wire [3:0] icp_req;
389wire [3:0] icp_req_in_ntt;
390wire icp_req_lat_scanin;
391wire icp_req_lat_scanout;
392wire [3:0] pftt_req_in;
393wire [3:0] ftt_req;
394wire [3:0] ftt_req_in;
395wire [3:0] pftt_req_in_ntt;
396wire ftt_req_lat_scanin;
397wire ftt_req_lat_scanout;
398wire [3:0] pivt_req_in;
399wire [3:0] ivt_req;
400wire [3:0] ivt_req_in;
401wire [3:0] stb_wait;
402wire [3:0] pivt_req_in_ntt;
403wire ivt_req_lat_scanin;
404wire ivt_req_lat_scanout;
405wire [3:0] pmqr_req_in;
406wire [3:0] mqr_req;
407wire [3:0] mqr_req_in;
408wire [3:0] pmqr_req_in_ntt;
409wire mqr_req_lat_scanin;
410wire mqr_req_lat_scanout;
411wire [3:0] pdqr_req_in;
412wire [3:0] dqr_req;
413wire [3:0] dqr_req_in;
414wire [3:0] pdqr_req_in_ntt;
415wire dqr_req_lat_scanin;
416wire dqr_req_lat_scanout;
417wire [3:0] prqr_req_in;
418wire [3:0] rqr_req;
419wire [3:0] rqr_req_in;
420wire [3:0] prqr_req_in_ntt;
421wire rqr_req_lat_scanin;
422wire rqr_req_lat_scanout;
423wire [3:0] pres_req_in;
424wire [3:0] res_req;
425wire [3:0] res_req_in;
426wire [3:0] pres_req_in_ntt;
427wire res_req_lat_scanin;
428wire res_req_lat_scanout;
429wire [3:0] pssr_req_in;
430wire [3:0] ssr_req;
431wire [3:0] ssr_req_in;
432wire [3:0] ssr_req_in_for_taken;
433wire [3:0] pssr_req_in_ntt;
434wire take_ssr_last;
435wire ssr_req_lat_scanin;
436wire ssr_req_lat_scanout;
437wire [3:0] ssc_req_in;
438wire [3:0] ssc_req;
439wire [3:0] fei_or_fof_incoming;
440wire ssc_req_lat_scanin;
441wire ssc_req_lat_scanout;
442wire [3:0] pnns_req_in;
443wire [3:0] nns_req;
444wire [3:0] nns_req_in;
445wire [3:0] pnns_req_in_ntt;
446wire nns_req_lat_scanin;
447wire nns_req_lat_scanout;
448wire [3:0] psir_req_in;
449wire [3:0] sir_req;
450wire [3:0] sir_req_in;
451wire [3:0] psir_req_in_ntt;
452wire sir_req_lat_scanin;
453wire sir_req_lat_scanout;
454wire [3:0] pitm_req_in;
455wire [3:0] itm_req;
456wire [3:0] itm_req_in;
457wire [3:0] irt_req_in;
458wire [3:0] tlz_req_in;
459wire [3:0] pmu_req_in;
460wire [3:0] pitm_req_in_ntt;
461wire itm_req_lat_scanin;
462wire itm_req_lat_scanout;
463wire i_tte_outofrange_lat_scanin;
464wire i_tte_outofrange_lat_scanout;
465wire [3:0] i_tte_outofrange;
466wire [3:0] piit_req_in;
467wire [3:0] iit_req;
468wire [3:0] iit_req_in;
469wire [3:0] piit_req_in_ntt;
470wire iit_req_lat_scanin;
471wire iit_req_lat_scanout;
472wire [3:0] piln_req_in;
473wire [3:0] iln_req;
474wire [3:0] iln_req_in;
475wire [3:0] piln_req_in_ntt;
476wire iln_req_lat_scanin;
477wire iln_req_lat_scanout;
478wire [3:0] phst_req_in;
479wire [3:0] hst_req;
480wire [3:0] hst_req_in;
481wire [3:0] phst_req_in_ntt;
482wire hst_req_lat_scanin;
483wire hst_req_lat_scanout;
484wire [3:0] ptlz_req_in;
485wire [3:0] tlz_req;
486wire [3:0] ptlz_req_in_ntt;
487wire tlz_req_lat_scanin;
488wire tlz_req_lat_scanout;
489wire [3:0] psma_req_in;
490wire [3:0] sma_req;
491wire [3:0] sma_req_in;
492wire [3:0] psma_req_in_ntt;
493wire [3:0] trap_taken1;
494wire sma_req_lat_scanin;
495wire sma_req_lat_scanout;
496wire [3:0] pcwq_req_in;
497wire [3:0] cwq_req;
498wire [3:0] cwq_req_in;
499wire [3:0] pcwq_req_in_ntt;
500wire cwq_req_lat_scanin;
501wire cwq_req_lat_scanout;
502wire [3:0] pade_req_in;
503wire [3:0] ade_req;
504wire [3:0] ade_req_in;
505wire [3:0] pade_req_in_ntt;
506wire ade_req_lat_scanin;
507wire ade_req_lat_scanout;
508wire [3:0] piae_req_in;
509wire [3:0] iae_req;
510wire [3:0] iae_req_in;
511wire [3:0] piae_req_in_ntt;
512wire iae_req_lat_scanin;
513wire iae_req_lat_scanout;
514wire [3:0] pipe_req_in;
515wire [3:0] ipe_req;
516wire [3:0] tpe_exc;
517wire [3:0] ipe_req_in;
518wire [3:0] pipe_req_in_ntt;
519wire take_lsr_last;
520wire ipe_req_lat_scanin;
521wire ipe_req_lat_scanout;
522wire [3:0] pipv_req_in;
523wire [3:0] ipv_req;
524wire [3:0] ipv_req_in;
525wire [3:0] pipv_req_in_ntt;
526wire ipv_req_lat_scanin;
527wire ipv_req_lat_scanout;
528wire i_unauth_access_lat_scanin;
529wire i_unauth_access_lat_scanout;
530wire [3:0] i_unauth_access;
531wire [3:0] piua_req_in;
532wire [3:0] iua_req;
533wire [3:0] iua_req_in;
534wire [3:0] piua_req_in_ntt;
535wire iua_req_lat_scanin;
536wire iua_req_lat_scanout;
537wire [3:0] pinp_req_in;
538wire [3:0] inp_req;
539wire [3:0] inp_req_in;
540wire [3:0] pinp_req_in_ntt;
541wire inp_req_lat_scanin;
542wire inp_req_lat_scanout;
543wire [3:0] piar_req_in;
544wire [3:0] iar_req;
545wire [3:0] iar_req_in;
546wire [3:0] piar_req_in_ntt;
547wire iar_req_lat_scanin;
548wire iar_req_lat_scanout;
549wire [3:0] pirr_req_in;
550wire [3:0] irr_req;
551wire [3:0] irr_req_in;
552wire [3:0] pirr_req_in_ntt;
553wire irr_req_lat_scanin;
554wire irr_req_lat_scanout;
555wire [3:0] pmar_req_in;
556wire [3:0] mar_req;
557wire [3:0] mar_req_in;
558wire [3:0] pmar_req_in_ntt;
559wire mar_req_lat_scanin;
560wire mar_req_lat_scanout;
561wire [3:0] pmrr_req_in;
562wire [3:0] mrr_req;
563wire [3:0] mrr_req_in;
564wire [3:0] pmrr_req_in_ntt;
565wire mrr_req_lat_scanin;
566wire mrr_req_lat_scanout;
567wire [3:0] ppro_req_in;
568wire [3:0] pro_req;
569wire [3:0] pro_req_in;
570wire [3:0] ppro_req_in_ntt;
571wire pro_req_lat_scanin;
572wire pro_req_lat_scanout;
573wire [3:0] pill_req_in;
574wire [3:0] ill_req;
575wire [3:0] ill_req_in;
576wire [3:0] pill_req_in_ntt;
577wire ill_req_lat_scanin;
578wire ill_req_lat_scanout;
579wire [3:0] pdon_req_in;
580wire [3:0] don_req;
581wire [3:0] don_req_in;
582wire stall_don_ret;
583wire [3:0] pdon_req_in_ntt;
584wire hole_in_p;
585wire don_req_lat_scanin;
586wire don_req_lat_scanout;
587wire [3:0] pret_req_in;
588wire [3:0] ret_req;
589wire [3:0] ret_req_in;
590wire [3:0] pret_req_in_ntt;
591wire ret_req_lat_scanin;
592wire ret_req_lat_scanout;
593wire [3:0] pfpd_req_in;
594wire [3:0] fpd_req;
595wire [3:0] fpd_req_in;
596wire [3:0] pfpd_req_in_ntt;
597wire fpd_req_lat_scanin;
598wire fpd_req_lat_scanout;
599wire [3:0] psnn_req_in;
600wire [3:0] snn_req;
601wire [3:0] snn_req_in;
602wire [3:0] psnn_req_in_ntt;
603wire snn_req_lat_scanin;
604wire snn_req_lat_scanout;
605wire [3:0] psno_req_in;
606wire [3:0] sno_req;
607wire [3:0] sno_req_in;
608wire [3:0] psno_req_in_ntt;
609wire sno_req_lat_scanin;
610wire sno_req_lat_scanout;
611wire [3:0] pfnn_req_in;
612wire [3:0] fnn_req;
613wire [3:0] fnn_req_in;
614wire [3:0] pfnn_req_in_ntt;
615wire fnn_req_lat_scanin;
616wire fnn_req_lat_scanout;
617wire [3:0] pfno_req_in;
618wire [3:0] fno_req;
619wire [3:0] fno_req_in;
620wire [3:0] pfno_req_in_ntt;
621wire fno_req_lat_scanin;
622wire fno_req_lat_scanout;
623wire [3:0] pclw_req_in;
624wire [3:0] clw_req;
625wire [3:0] clw_req_in;
626wire [3:0] pclw_req_in_ntt;
627wire clw_req_lat_scanin;
628wire clw_req_lat_scanout;
629wire [3:0] pdtm_req_in;
630wire [3:0] dtm_req;
631wire [3:0] dtm_req_in;
632wire [3:0] maa_req_in;
633wire [3:0] ldf_req_in;
634wire [3:0] stf_req_in;
635wire [3:0] pra_req_in;
636wire [3:0] pdtm_req_in_ntt;
637wire [3:0] trap_taken2;
638wire dtm_req_lat_scanin;
639wire dtm_req_lat_scanout;
640wire [3:0] pldf_req_in;
641wire [3:0] ldf_req;
642wire [3:0] pldf_req_in_ntt;
643wire ldf_req_lat_scanin;
644wire ldf_req_lat_scanout;
645wire [3:0] pstf_req_in;
646wire [3:0] stf_req;
647wire [3:0] pstf_req_in_ntt;
648wire stf_req_lat_scanin;
649wire stf_req_lat_scanout;
650wire [3:0] pdap_req_in;
651wire [3:0] dap_req;
652wire [3:0] dap_req_in;
653wire [3:0] pdap_req_in_ntt;
654wire dap_req_lat_scanin;
655wire dap_req_lat_scanout;
656wire [3:0] pvaw_req_in;
657wire [3:0] vaw_req;
658wire [3:0] vaw_req_in;
659wire [3:0] pvaw_req_in_ntt;
660wire vaw_req_lat_scanin;
661wire vaw_req_lat_scanout;
662wire [3:0] piaw_req_in;
663wire [3:0] iaw_req;
664wire [3:0] iaw_req_in;
665wire [3:0] piaw_req_in_ntt;
666wire iaw_req_lat_scanin;
667wire iaw_req_lat_scanout;
668wire [3:0] ppaw_req_in;
669wire [3:0] paw_req;
670wire [3:0] paw_req_in;
671wire [3:0] ppaw_req_in_ntt;
672wire paw_req_lat_scanin;
673wire paw_req_lat_scanout;
674wire [3:0] pmaa_req_in;
675wire [3:0] maa_req;
676wire [3:0] pmaa_req_in_ntt;
677wire maa_req_lat_scanin;
678wire maa_req_lat_scanout;
679wire [3:0] fpx_tid_dec_fw;
680wire [3:0] fpd_tid_dec_fw;
681wire [3:0] pfpe_req_in;
682wire [3:0] fpe_req;
683wire [3:0] fpe_req_in;
684wire [3:0] pfpe_req_in_ntt;
685wire fpe_req_lat_scanin;
686wire fpe_req_lat_scanout;
687wire [3:0] pfei_req_in;
688wire [3:0] fei_req;
689wire [3:0] fei_req_in;
690wire [3:0] pfei_req_in_ntt;
691wire take_fpe_last;
692wire take_lsr_nns_last;
693wire fei_req_lat_scanin;
694wire fei_req_lat_scanout;
695wire [3:0] pfof_req_in;
696wire [3:0] fof_req;
697wire [3:0] fof_req_in;
698wire [3:0] pfof_req_in_ntt;
699wire fof_req_lat_scanin;
700wire fof_req_lat_scanout;
701wire [3:0] ppra_req_in;
702wire [3:0] pra_req;
703wire [3:0] ppra_req_in_ntt;
704wire pra_req_lat_scanin;
705wire pra_req_lat_scanout;
706wire [3:0] pdia_req_in;
707wire [3:0] dia_req;
708wire [3:0] dia_req_in;
709wire [3:0] pdia_req_in_ntt;
710wire dia_req_lat_scanin;
711wire dia_req_lat_scanout;
712wire [3:0] pups_req_in;
713wire [3:0] ups_req;
714wire [3:0] ups_req_in;
715wire [3:0] pups_req_in_ntt;
716wire ups_req_lat_scanin;
717wire ups_req_lat_scanout;
718wire [3:0] pdpv_req_in;
719wire [3:0] dpv_req;
720wire [3:0] dpv_req_in;
721wire [3:0] pdpv_req_in_ntt;
722wire dpv_req_lat_scanin;
723wire dpv_req_lat_scanout;
724wire [3:0] pdnc_req_in;
725wire [3:0] dnc_req;
726wire [3:0] dnc_req_in;
727wire [3:0] pdnc_req_in_ntt;
728wire dnc_req_lat_scanin;
729wire dnc_req_lat_scanout;
730wire [3:0] pdnf_req_in;
731wire [3:0] dnf_req;
732wire [3:0] dnf_req_in;
733wire [3:0] pdnf_req_in_ntt;
734wire dnf_req_lat_scanin;
735wire dnf_req_lat_scanout;
736wire [3:0] pdso_req_in;
737wire [3:0] dso_req;
738wire [3:0] dso_req_in;
739wire [3:0] pdso_req_in_ntt;
740wire dso_req_lat_scanin;
741wire dso_req_lat_scanout;
742wire [3:0] ptof_req_in;
743wire [3:0] tof_req;
744wire [3:0] tof_req_in;
745wire [3:0] ptof_req_in_ntt;
746wire tof_req_lat_scanin;
747wire tof_req_lat_scanout;
748wire [3:0] pdbz_req_in;
749wire [3:0] dbz_req;
750wire [3:0] dbz_req_in;
751wire [3:0] pdbz_req_in_ntt;
752wire dbz_req_lat_scanin;
753wire dbz_req_lat_scanout;
754wire [3:0] tcc_h;
755wire [3:0] ptcc_req_in;
756wire [3:0] tcc_req;
757wire [3:0] tcc_req_in;
758wire [3:0] ptcc_req_in_ntt;
759wire [3:0] trap_taken3;
760wire tcc_req_lat_scanin;
761wire tcc_req_lat_scanout;
762wire [3:0] pdae_req_in;
763wire [3:0] dae_req;
764wire [3:0] dae_req_in;
765wire [3:0] pdae_req_in_ntt;
766wire dae_req_lat_scanin;
767wire dae_req_lat_scanout;
768wire [3:0] dbz_incoming;
769wire [3:0] plsr_req_in;
770wire [3:0] lsr_req;
771wire [3:0] real_trap_last;
772wire [3:0] lsr_req_in;
773wire [3:0] itw_req;
774wire lsr_req_lat_scanin;
775wire lsr_req_lat_scanout;
776wire [3:0] pirt_req_in;
777wire [3:0] irt_req;
778wire [3:0] pirt_req_in_ntt;
779wire irt_req_lat_scanin;
780wire irt_req_lat_scanout;
781wire [3:0] pdrt_req_in;
782wire [3:0] drt_req;
783wire [3:0] drt_req_in;
784wire [3:0] pdrt_req_in_ntt;
785wire drt_req_lat_scanin;
786wire drt_req_lat_scanout;
787wire d_tte_outofrange_lat_scanin;
788wire d_tte_outofrange_lat_scanout;
789wire [3:0] d_tte_outofrange;
790wire [3:0] pdit_req_in;
791wire [3:0] dit_req;
792wire [3:0] dit_req_in;
793wire [3:0] pdit_req_in_ntt;
794wire dit_req_lat_scanin;
795wire dit_req_lat_scanout;
796wire [3:0] ppmu_req_in;
797wire [3:0] pmu_req;
798wire [3:0] ppmu_req_in_ntt;
799wire pmu_req_lat_scanin;
800wire pmu_req_lat_scanout;
801wire [3:0] pime_req_in;
802wire [3:0] ime_req;
803wire [3:0] ime_req_in;
804wire [3:0] pime_req_in_ntt;
805wire ime_req_lat_scanin;
806wire ime_req_lat_scanout;
807wire [3:0] pdme_req_in;
808wire [3:0] dme_req;
809wire [3:0] dme_req_in;
810wire [3:0] pdme_req_in_ntt;
811wire dme_req_lat_scanin;
812wire dme_req_lat_scanout;
813wire write_itlb_lat_scanin;
814wire write_itlb_lat_scanout;
815wire [3:0] write_itlb;
816wire [3:0] itw_req_in;
817wire itw_req_lat_scanin;
818wire itw_req_lat_scanout;
819wire reload_done_lat_scanin;
820wire reload_done_lat_scanout;
821wire [3:0] reload_done;
822wire [3:0] phtd_req_in;
823wire [3:0] htd_req;
824wire take_htd_last;
825wire [3:0] htd_req_in;
826wire htd_req_lat_scanin;
827wire htd_req_lat_scanout;
828wire i_tsb_miss_lat_scanin;
829wire i_tsb_miss_lat_scanout;
830wire [3:0] i_tsb_miss;
831wire [3:0] phim_req_in;
832wire [3:0] him_req;
833wire [3:0] him_req_in;
834wire [3:0] phim_req_in_ntt;
835wire him_req_lat_scanin;
836wire him_req_lat_scanout;
837wire d_tsb_miss_lat_scanin;
838wire d_tsb_miss_lat_scanout;
839wire [3:0] d_tsb_miss;
840wire [3:0] phdm_req_in;
841wire [3:0] hdm_req;
842wire [3:0] hdm_req_in;
843wire [3:0] phdm_req_in_ntt;
844wire hdm_req_lat_scanin;
845wire hdm_req_lat_scanout;
846wire [3:0] pibp_req_in;
847wire [3:0] ibp_req;
848wire [3:0] ibp_req_in;
849wire [3:0] pibp_req_in_ntt;
850wire ibp_req_lat_scanin;
851wire ibp_req_lat_scanout;
852wire [3:0] ptct_req_in;
853wire [3:0] tct_req;
854wire [3:0] tct_req_in;
855wire [3:0] ptct_req_in_ntt;
856wire tct_req_lat_scanin;
857wire tct_req_lat_scanout;
858wire [3:0] reset_category;
859wire [3:0] trap_ndr;
860wire [3:0] trap_taken5;
861wire [3:0] disrupt_category;
862wire [3:0] divide_category;
863wire [3:0] long_category;
864wire [3:0] fgu_category;
865wire [3:0] don_ret_category;
866wire [3:0] trap;
867wire [3:0] notrap_category;
868wire [3:0] itw_category;
869wire [3:0] trap_itw;
870wire [3:0] trap_itw_taken;
871wire [3:0] other_category;
872wire [3:0] reset_pre_trap_in;
873wire [3:0] disrupt_pre_trap_in;
874wire [3:0] divide_pre_trap_in;
875wire [3:0] long_pre_trap_in;
876wire [3:0] fgu_pre_trap_in;
877wire [3:0] don_ret_pre_trap_in;
878wire [3:0] notrap_pre_trap_in;
879wire [3:0] itw_pre_trap_in;
880wire [3:0] other_pre_trap_in;
881wire reset_pre_trap_lat_scanin;
882wire reset_pre_trap_lat_scanout;
883wire [3:0] reset_pre_trap;
884wire disrupt_pre_trap_lat_scanin;
885wire disrupt_pre_trap_lat_scanout;
886wire [3:0] disrupt_pre_trap;
887wire divide_pre_trap_lat_scanin;
888wire divide_pre_trap_lat_scanout;
889wire [3:0] divide_pre_trap;
890wire long_pre_trap_lat_scanin;
891wire long_pre_trap_lat_scanout;
892wire [3:0] long_pre_trap;
893wire fgu_pre_trap_lat_scanin;
894wire fgu_pre_trap_lat_scanout;
895wire [3:0] fgu_pre_trap;
896wire don_ret_pre_trap_lat_scanin;
897wire don_ret_pre_trap_lat_scanout;
898wire [3:0] don_ret_pre_trap;
899wire notrap_pre_trap_lat_scanin;
900wire notrap_pre_trap_lat_scanout;
901wire [3:0] notrap_pre_trap;
902wire itw_pre_trap_lat_scanin;
903wire itw_pre_trap_lat_scanout;
904wire [3:0] itw_pre_trap;
905wire other_pre_trap_lat_scanin;
906wire other_pre_trap_lat_scanout;
907wire [3:0] other_pre_trap;
908wire pre_allow_trap_in;
909wire take_don;
910wire take_ret;
911wire take_itw;
912wire pre_allow_trap_lat_scanin;
913wire pre_allow_trap_lat_scanout;
914wire pre_allow_trap;
915wire allow_trap;
916wire pre_allow_don_ret_in;
917wire pre_allow_don_ret_lat_scanin;
918wire pre_allow_don_ret_lat_scanout;
919wire pre_allow_don_ret;
920wire allow_don_ret;
921wire take_reset_in;
922wire take_disrupt_in;
923wire take_div_in;
924wire take_long_in;
925wire take_fgu_in;
926wire take_other_in;
927wire take_don_ret_in;
928wire take_itw_g_in;
929wire take_notrap_in;
930wire take_otr_in;
931wire take_reset_lat_scanin;
932wire take_reset_lat_scanout;
933wire ptake_reset;
934wire take_reset;
935wire take_disrupt_lat_scanin;
936wire take_disrupt_lat_scanout;
937wire ptake_disrupt;
938wire take_disrupt;
939wire take_div_lat_scanin;
940wire take_div_lat_scanout;
941wire ptake_div;
942wire take_div;
943wire take_long_lat_scanin;
944wire take_long_lat_scanout;
945wire ptake_long;
946wire take_long;
947wire take_fgu_lat_scanin;
948wire take_fgu_lat_scanout;
949wire ptake_fgu;
950wire take_fgu;
951wire take_other_lat_scanin;
952wire take_other_lat_scanout;
953wire ptake_other;
954wire take_other;
955wire take_don_ret_lat_scanin;
956wire take_don_ret_lat_scanout;
957wire ptake_don_ret;
958wire take_don_ret;
959wire take_notrap_lat_scanin;
960wire take_notrap_lat_scanout;
961wire ptake_notrap;
962wire take_notrap;
963wire take_itw_lat_scanin;
964wire take_itw_lat_scanout;
965wire ptake_itw_g;
966wire take_itw_g;
967wire take_otr_lat_scanin;
968wire take_otr_lat_scanout;
969wire ptake_otr;
970wire take_otr;
971wire [3:0] take_any_dec;
972wire [3:0] real_trap;
973wire [3:0] take_any_dec_last;
974wire take_por;
975wire [3:0] take_por_dec;
976wire [3:0] take_por_dec_last;
977wire take_por_last;
978wire take_xir;
979wire take_sir;
980wire take_ade;
981wire take_iln;
982wire take_ivt;
983wire take_mqr;
984wire take_dqr;
985wire take_rqr;
986wire take_eer;
987wire take_ftt;
988wire take_hst;
989wire take_tlz;
990wire take_sma;
991wire take_cwq;
992wire take_dae;
993wire take_fei;
994wire take_fof;
995wire take_htd;
996wire take_fpe;
997wire take_lsr;
998wire take_res;
999wire take_ssr;
1000wire take_ssr_por;
1001wire take_nns;
1002wire take_icp;
1003wire take_ipe;
1004wire take_iae;
1005wire take_ipv;
1006wire take_inp;
1007wire take_iua;
1008wire take_iar;
1009wire take_irr;
1010wire take_mar;
1011wire take_mrr;
1012wire take_pro;
1013wire take_ill;
1014wire take_fpd;
1015wire take_snn;
1016wire take_sno;
1017wire take_fnn;
1018wire take_fno;
1019wire take_clw;
1020wire take_ldf;
1021wire take_stf;
1022wire take_dap;
1023wire take_pra;
1024wire take_vaw;
1025wire take_iaw;
1026wire take_paw;
1027wire take_maa;
1028wire take_dia;
1029wire take_ups;
1030wire take_dpv;
1031wire take_dnc;
1032wire take_dnf;
1033wire take_dso;
1034wire take_tof;
1035wire take_tcc;
1036wire take_itm;
1037wire take_dtm;
1038wire take_him;
1039wire take_hdm;
1040wire take_irt;
1041wire take_drt;
1042wire take_pmu;
1043wire take_ime;
1044wire take_dme;
1045wire take_ibp;
1046wire take_tct;
1047wire take_iit;
1048wire take_dit;
1049wire take_pmu_lat_scanin;
1050wire take_pmu_lat_scanout;
1051wire take_pmu_last;
1052wire take_ivt_lat_scanin;
1053wire take_ivt_lat_scanout;
1054wire take_sma_last;
1055wire take_cwq_last;
1056wire take_xir_last;
1057wire take_ftt_last;
1058wire take_rstnpor;
1059wire [3:0] trap_not_por;
1060wire [3:0] trap_taken_in;
1061wire trap_taken_lat_scanin;
1062wire trap_taken_lat_scanout;
1063wire [3:0] trap_taken;
1064wire trap_taken0_lat_scanin;
1065wire trap_taken0_lat_scanout;
1066wire trap_taken1_lat_scanin;
1067wire trap_taken1_lat_scanout;
1068wire trap_taken2_lat_scanin;
1069wire trap_taken2_lat_scanout;
1070wire trap_taken3_lat_scanin;
1071wire trap_taken3_lat_scanout;
1072wire trap_taken4_lat_scanin;
1073wire trap_taken4_lat_scanout;
1074wire [3:0] trap_taken4;
1075wire trap_taken5_lat_scanin;
1076wire trap_taken5_lat_scanout;
1077wire trap_itw_taken_lat_scanin;
1078wire trap_itw_taken_lat_scanout;
1079wire take_reset_last_lat_scanin;
1080wire take_reset_last_lat_scanout;
1081wire take_reset_last;
1082wire [8:0] trap_type_in;
1083wire [3:0] int_level_n;
1084wire [2:0] wstate;
1085wire [7:0] tcc_number;
1086wire no_special_trap;
1087wire next_trap_to_red;
1088wire next_trap_to_err;
1089wire priv_overflow_tl;
1090wire next_trap_to_hpriv;
1091wire sip;
1092wire [8:0] trap_type_for_pc_in;
1093wire trap_type_lat_scanin;
1094wire trap_type_lat_scanout;
1095wire [8:0] trap_type;
1096wire trap_type_for_pc_lat_scanin;
1097wire trap_type_for_pc_lat_scanout;
1098wire [8:0] trap_type_for_pc;
1099wire hpstate_hpriv_lat_scanin;
1100wire hpstate_hpriv_lat_scanout;
1101wire [3:0] hpstate_hpriv;
1102wire [3:0] h_wr_tl;
1103wire [3:0] n_wr_tl;
1104wire [2:0] tl_h_wr_data;
1105wire [2:0] tl_n_wr_data;
1106wire [3:0] hold_tl;
1107wire [3:0] npc_sel_tnpc;
1108wire [2:0] tl3_incr;
1109wire [2:0] tl3;
1110wire [2:0] tl3_decr;
1111wire [2:0] tl3_in;
1112wire [3:0] tlz_in;
1113wire [2:0] tl2_incr;
1114wire [2:0] tl2;
1115wire [2:0] tl2_decr;
1116wire [2:0] tl2_in;
1117wire [2:0] tl1_incr;
1118wire [2:0] tl1;
1119wire [2:0] tl1_decr;
1120wire [2:0] tl1_in;
1121wire [2:0] tl0_incr;
1122wire [2:0] tl0;
1123wire [2:0] tl0_decr;
1124wire [2:0] tl0_in;
1125wire tl_lat_scanin;
1126wire tl_lat_scanout;
1127wire tlz_lat_scanin;
1128wire tlz_lat_scanout;
1129wire [3:0] tlz;
1130wire [3:0] thread_sel;
1131wire [3:0] tl_gt_0_in;
1132wire [3:0] tl_gt_0;
1133wire tl_gt_0_last_lat_scanin;
1134wire tl_gt_0_last_lat_scanout;
1135wire [2:0] trap_tl;
1136wire [2:0] trap_tl_m1;
1137wire [2:0] rda_tl_m1;
1138wire [1:0] wr_gl_data_in_in;
1139wire [1:0] gl_data_in_in;
1140wire [3:0] update_gl_in_in;
1141wire wr_gl_lat_scanin;
1142wire wr_gl_lat_scanout;
1143wire [3:0] update_gl_in;
1144wire [1:0] gl_data_in;
1145wire [3:0] update_gl;
1146wire [1:0] gl_data;
1147wire [1:0] maxglc;
1148wire other_trap;
1149wire hpriv_last;
1150wire reset_trap;
1151wire [3:0] take_anr_dec_last;
1152wire [3:0] hold_gl;
1153wire saturate_restore;
1154wire [1:0] pgl_rest_in;
1155wire [1:0] gl_rest_in;
1156wire gl_rest_lat_scanin;
1157wire gl_rest_lat_scanout;
1158wire [1:0] gl_rest;
1159wire [1:0] gl3_incr;
1160wire [1:0] gl3;
1161wire [1:0] gl3_in;
1162wire [1:0] gl2_incr;
1163wire [1:0] gl2;
1164wire [1:0] gl2_in;
1165wire [1:0] gl1_incr;
1166wire [1:0] gl1;
1167wire [1:0] gl1_in;
1168wire [1:0] gl0_incr;
1169wire [1:0] gl0;
1170wire [1:0] gl0_in;
1171wire [1:0] trap_gl_in;
1172wire gl_lat_wmr_scanin;
1173wire gl_lat_wmr_scanout;
1174wire mbist_run_lat_scanin;
1175wire mbist_run_lat_scanout;
1176wire mbist_run;
1177wire [4:0] wr_addr_in_in;
1178wire [4:0] wr_addr_func_in;
1179wire rmw_tsa;
1180wire [4:0] wr_addr_in_p;
1181wire [4:0] rmw_addr;
1182wire [4:0] wr_addr_in;
1183wire tsa_wr_addr_lat_scanin;
1184wire tsa_wr_addr_lat_scanout;
1185wire [4:0] wr_addr;
1186wire [2:0] don_ret_tl_m1;
1187wire [4:0] rd_addr_in;
1188wire tsa_rd_addr_lat_scanin;
1189wire tsa_rd_addr_lat_scanout;
1190wire [4:0] rd_addr;
1191wire rmw_addr_lat_scanin;
1192wire rmw_addr_lat_scanout;
1193wire rmw_tsa_lat_scanin;
1194wire rmw_tsa_lat_scanout;
1195wire rmw_next;
1196wire [3:0] pil3_in;
1197wire [3:0] pil3;
1198wire [3:0] pil2_in;
1199wire [3:0] pil2;
1200wire [3:0] pil1_in;
1201wire [3:0] pil1;
1202wire [3:0] pil0_in;
1203wire [3:0] pil0;
1204wire pil3_lat_wmr_scanin;
1205wire pil3_lat_wmr_scanout;
1206wire pil2_lat_wmr_scanin;
1207wire pil2_lat_wmr_scanout;
1208wire pil1_lat_wmr_scanin;
1209wire pil1_lat_wmr_scanout;
1210wire pil0_lat_wmr_scanin;
1211wire pil0_lat_wmr_scanout;
1212wire [5:0] tic_compare_in;
1213wire tic_compare_lat_scanin;
1214wire tic_compare_lat_scanout;
1215wire [5:0] tic_compare;
1216wire [16:0] tick3_compare;
1217wire [16:0] softint3_mux;
1218wire [16:0] softint3;
1219wire [16:0] softint3_mask;
1220wire [16:0] softint3_in;
1221wire [16:0] tick2_compare;
1222wire [16:0] softint2_mux;
1223wire [16:0] softint2;
1224wire [16:0] softint2_mask;
1225wire [16:0] softint2_in;
1226wire [16:0] tick1_compare;
1227wire [16:0] softint1_mux;
1228wire [16:0] softint1;
1229wire [16:0] softint1_mask;
1230wire [16:0] softint1_in;
1231wire [16:0] tick0_compare;
1232wire [16:0] softint0_mux;
1233wire [16:0] softint0;
1234wire [16:0] softint0_mask;
1235wire [16:0] softint0_in;
1236wire softint3_lat_wmr_scanin;
1237wire softint3_lat_wmr_scanout;
1238wire softint2_lat_wmr_scanin;
1239wire softint2_lat_wmr_scanout;
1240wire softint1_lat_wmr_scanin;
1241wire softint1_lat_wmr_scanout;
1242wire softint0_lat_wmr_scanin;
1243wire softint0_lat_wmr_scanout;
1244wire pstate_ie_lat_scanin;
1245wire pstate_ie_lat_scanout;
1246wire [3:0] pstate_ie;
1247wire [16:0] pil3_mask;
1248wire [16:0] pil2_mask;
1249wire [16:0] pil1_mask;
1250wire [16:0] pil0_mask;
1251wire pmu_trap_mask_d;
1252wire pmu_trap_mask_lat_scanin;
1253wire pmu_trap_mask_lat_scanout;
1254wire pmu_trap_mask_e;
1255wire [15:1] sim3;
1256wire [15:1] sim2;
1257wire [15:1] sim1;
1258wire [15:1] sim0;
1259wire [3:0] int_level_n_3;
1260wire [3:0] int_level_n_2;
1261wire [3:0] int_level_n_1;
1262wire [3:0] int_level_n_0;
1263wire [3:0] int_level_n_3_last;
1264wire [3:0] int_level_n_2_last;
1265wire [3:0] int_level_n_1_last;
1266wire [3:0] int_level_n_0_last;
1267wire int_level_n_lat_scanin;
1268wire int_level_n_lat_scanout;
1269wire hstick3_compare;
1270wire hintp3_in;
1271wire hintp3;
1272wire hstick2_compare;
1273wire hintp2_in;
1274wire hintp2;
1275wire hstick1_compare;
1276wire hintp1_in;
1277wire hintp1;
1278wire hstick0_compare;
1279wire hintp0_in;
1280wire hintp0;
1281wire hintp_lat_wmr_scanin;
1282wire hintp_lat_wmr_scanout;
1283wire [3:0] tccd_in;
1284wire [3:0] tcud_in;
1285wire tccd_exc_lat_scanin;
1286wire tccd_exc_lat_scanout;
1287wire [3:0] tccd;
1288wire tcud_exc_lat_scanin;
1289wire tcud_exc_lat_scanout;
1290wire [3:0] tcud;
1291wire tic_index_lat_scanin;
1292wire tic_index_lat_scanout;
1293wire [4:3] tic_index;
1294wire [3:0] tsacu_en_in;
1295wire [3:0] tpe_exc_in;
1296wire tpe_exc_lat_scanin;
1297wire tpe_exc_lat_scanout;
1298wire tsa_index_lat_scanin;
1299wire tsa_index_lat_scanout;
1300wire [2:0] tsa_index;
1301wire p_trap_lat_scanin;
1302wire p_trap_lat_scanout;
1303wire [3:0] p_trap;
1304wire [16:0] rd_softint3;
1305wire [16:0] rd_softint2;
1306wire [16:0] rd_softint1;
1307wire [16:0] rd_softint0;
1308wire [16:0] asi_data_in;
1309wire asi_data_lat_scanin;
1310wire asi_data_lat_scanout;
1311wire [16:0] asi_data;
1312wire [3:0] enter_red_in;
1313wire enter_red_lat_scanin;
1314wire enter_red_lat_scanout;
1315wire [3:0] enter_red;
1316wire stb_empty_lat_scanin;
1317wire stb_empty_lat_scanout;
1318wire window_block_in;
1319wire ccr_cwp_valid;
1320wire window_block_lat_scanin;
1321wire window_block_lat_scanout;
1322wire don_ret_last_last;
1323wire take_lat_scanin;
1324wire take_lat_scanout;
1325wire ptake_don_last;
1326wire ptake_ret_last;
1327wire take_res_last;
1328wire take_ssr_por_last;
1329wire take_icp_last;
1330wire take_nns_last;
1331wire take_htd_icp_last;
1332wire take_last_lat_scanin;
1333wire take_last_lat_scanout;
1334wire don_ret_last;
1335wire take_don_last_last;
1336wire take_htd_icp_last_last;
1337wire take_don_last_last_last;
1338wire don_ret_last_last_last;
1339wire thread_sel_lat_scanin;
1340wire thread_sel_lat_scanout;
1341wire no_pstate_update;
1342wire pstate_am_lat_scanin;
1343wire pstate_am_lat_scanout;
1344wire [3:0] pstate_am;
1345wire take_ssr_pc_valid;
1346wire take_ssr_pc_invalid;
1347wire pc_sel_pc_in;
1348wire pc_sel_npc_in;
1349wire pc_sel_trap_in;
1350wire pc_sel_reset0_in;
1351wire pc_sel_reset1_in;
1352wire pc_done_in;
1353wire pc_retry_in;
1354wire pc_tte_in;
1355wire pc_npc_sel_lat_scanin;
1356wire pc_npc_sel_lat_scanout;
1357wire pc_sel_pc;
1358wire pc_sel_npc;
1359wire pc_sel_trap;
1360wire pc_sel_reset0;
1361wire pc_sel_reset1;
1362wire pc_done;
1363wire pc_retry;
1364wire pc_tte;
1365wire wr_en_in_in;
1366wire wr_en_func_in;
1367wire wr_en_in_p;
1368wire wr_en_in;
1369wire rd_en_in;
1370wire stack_lat_scanin;
1371wire stack_lat_scanout;
1372wire tsa_rd_en;
1373wire tsa_wr_en;
1374wire tsa_rd_en_last;
1375wire [3:0] check_tsa_ecc_in;
1376wire enable_tel_in;
1377wire check_tel_lat_scanin;
1378wire check_tel_lat_scanout;
1379wire enable_tel;
1380wire check_tel_in;
1381wire check_tel;
1382wire take_notrap_not_suppressed;
1383wire m107773_suppress_notrap_;
1384wire trap_pc_valid_in_in;
1385wire trap_pc_valid_in;
1386wire ptrap_pc_valid_in;
1387wire kill_fpe;
1388wire kill_lsr_nns;
1389wire m107773_suppress_pcvi;
1390wire real_trap_pc_valid_in;
1391wire npc_is_nonseq;
1392wire htd_res_icp_when_npc_nonseq;
1393wire htd_res_icp_when_npc_nonseq_last_lat_scanin;
1394wire htd_res_icp_when_npc_nonseq_last_lat_scanout;
1395wire htd_res_icp_when_npc_nonseq_last;
1396wire retry_in_in;
1397wire nns_exc;
1398wire retry_in;
1399wire pretry_in;
1400wire pc_valid_lat_scanin;
1401wire pc_valid_lat_scanout;
1402wire trap_pc_valid;
1403wire [1:0] trap_tid_in;
1404wire [1:0] ccr_cwp_asi_tid;
1405wire trap_tid_lat_scanin;
1406wire trap_tid_lat_scanout;
1407wire [1:0] trap_tid;
1408wire take_itw_last_lat_scanin;
1409wire take_itw_last_lat_scanout;
1410wire take_itw_last_last;
1411wire icache_perr_lat_scanin;
1412wire icache_perr_lat_scanout;
1413wire take_icp_last_last;
1414wire reset_trap_in;
1415wire in_red;
1416wire hpriv;
1417wire next_trap_in_hpriv;
1418wire take_tcc_nh;
1419wire stay_in_priv_in;
1420wire take_tcc_h;
1421wire pre_oti;
1422wire oti;
1423wire other_trap_in;
1424wire pstate_sel_lat_scanin;
1425wire pstate_sel_lat_scanout;
1426wire stay_in_priv;
1427wire [3:0] ccr_cwp_valid_per_thread;
1428wire [1:0] ccr_cwp_asi_tid_in_in;
1429wire ccr_cwp_asi_tid_lat_scanin;
1430wire ccr_cwp_asi_tid_lat_scanout;
1431wire [1:0] ccr_cwp_asi_tid_in;
1432wire [3:0] clear_ctl_reg_in;
1433wire clear_ctl_reg_lat_scanin;
1434wire clear_ctl_reg_lat_scanout;
1435wire [3:0] clear_ctl_reg;
1436wire [3:0] pnpc_nonseq_in;
1437wire [3:0] npc_nonseq_in;
1438wire nns_exc_in;
1439wire npc_nonseq_lat_scanin;
1440wire npc_nonseq_lat_scanout;
1441wire [3:0] npc_nonseq;
1442wire [3:0] trap_tid_in_dec;
1443wire [3:0] pc_sel_trap_pc_in;
1444wire pc_sel_trap_pc_lat_scanin;
1445wire pc_sel_trap_pc_lat_scanout;
1446wire [3:0] pc_sel_trap_pc;
1447wire [3:0] npc_sel_trap_npc_in;
1448wire npc_sel_trap_npc_lat_scanin;
1449wire npc_sel_trap_npc_lat_scanout;
1450wire [3:0] npc_sel_trap_npc;
1451wire [3:0] check_tsa_ecc_in_in;
1452wire [3:0] tsacu_en_in_in;
1453wire check_tsa_ecc_lat_scanin;
1454wire check_tsa_ecc_lat_scanout;
1455wire [3:0] check_tsa_ecc;
1456wire [3:0] trap_tid_dec;
1457wire [3:0] htd_icp_complete;
1458wire shscanid_lat_scanin;
1459wire shscanid_lat_scanout;
1460wire [2:0] shscanid;
1461wire [2:0] shadow_tl;
1462wire capture_ss_in;
1463wire capture_ss_lat_scanin;
1464wire capture_ss_lat_scanout;
1465wire capture_ss;
1466wire [2:0] tl_for_tt_in;
1467wire [2:0] tl_for_tt;
1468wire tl_for_tt_lat_scanin;
1469wire tl_for_tt_lat_scanout;
1470wire spares_scanin;
1471wire spares_scanout;
1472
1473
1474
1475
1476input l2clk;
1477input scan_in;
1478input tcu_pce_ov;
1479input spc_aclk;
1480input spc_bclk;
1481input tcu_scan_en;
1482
1483input spc_aclk_wmr; // Warm reset (non)scan
1484input wmr_scan_in;
1485
1486input lsu_tlu_pmen;
1487
1488input [2:0] tcu_shscanid; // Select which thread to shadow
1489input tcu_ss_mode;
1490input tcu_do_mode;
1491
1492input thread_group; // Which thread group?
1493
1494input mbi_run; // MBIST
1495
1496input [3:0] ftu_ifu_quiesce;
1497input [3:0] pku_quiesce;
1498
1499input exu_tlu_window_block; // EXU needs hole for CWP change
1500
1501input [3:0] lsu_stb_empty; // Store buffer empty (for entering RED)
1502
1503input fgu_fpx_ieee_trap_fw; // IEEE 754 trap exception
1504input fgu_fpd_ieee_trap_fw; // IEEE 754 trap exception
1505input fgu_fpx_unfin_fw; // Other FGU exception
1506input fgu_fpd_unfin_fw; // Other divide exception
1507input fgu_fpd_idiv0_trap_fw;
1508input [2:0] fgu_fpx_trap_tid_fw; // TID for FGU exceptions except divide
1509input [2:0] fgu_fpd_trap_tid_fw; // TID for divide exception
1510
1511input [3:0] mmu_write_itlb; // Write ITLB
1512input [3:0] mmu_reload_done; // Hardware tablewalk done
1513input [3:0] mmu_i_unauth_access; // Hardware tablewalk ITSB with EP=0
1514input [3:0] mmu_i_tsb_miss; // Hardware tablewalk missed
1515input [3:0] mmu_d_tsb_miss; // Hardware tablewalk missed
1516input [3:0] mmu_i_tte_outofrange; // RA out of range
1517input [3:0] mmu_d_tte_outofrange; // RA out of range
1518
1519input spu_pmu_ma_busy; // MA must be idle before parking
1520input spu_tlu_cwq_busy; // Must idle before soft stop parking
1521input [2:0] spu_tlu_ma_int_req; // Thread that MA is working on
1522
1523input [2:0] fls_wstate0; // WSTATE for thread 0
1524input [2:0] fls_wstate1; // WSTATE for thread 1
1525input [2:0] fls_wstate2; // WSTATE for thread 2
1526input [2:0] fls_wstate3; // WSTATE for thread 3
1527
1528input [7:0] fls_tcc_number_0; // Trap number for Tcc thread 0
1529input [7:0] fls_tcc_number_1; // Trap number for Tcc thread 1
1530input [7:0] fls_tcc_number_2; // Trap number for Tcc thread 2
1531input [7:0] fls_tcc_number_3; // Trap number for Tcc thread 3
1532
1533input [1:0] fls_tid_d; // TID for pic_overflow mask
1534input [3:0] fls_tid_dec_w_in; // Decoded TID for nonstranded requests
1535
1536input [3:0] fls_por_request; // POR trap request
1537input [3:0] fls_xir_request; // XIR trap request
1538input [3:0] fls_ivt_request; // Interrupt Vector Trap request
1539input [3:0] fls_sir_request; // SIR trap request
1540input [3:0] fls_itm_request; // ITLB miss trap request
1541input [3:0] fls_iln_request; // Interrupt level n request
1542input [3:0] fls_hst_request; // hstick_match request
1543input [3:0] fls_tlz_request; // TL equals zero request
1544input [3:0] fls_sma_request; // SPU Modular Arithmetic request
1545input [3:0] fls_cwq_request; // SPU Control Word Queue request
1546input [3:0] fls_ade_request; // Async data error trap request
1547 // (Disrupting error on store, HWTW
1548input [3:0] fls_iae_request; // Instruction access error trap request
1549input [3:0] fls_ipe_request; // Internal processor error trap request
1550 // (Error on array access, etc.)
1551input fls_ipv_request; // IAE_privilege_violation trap request
1552input fls_inp_request; // IAE_nfo_page trap request
1553input fls_iar_request; // instruction_address_range trap equest
1554input fls_irr_request; // instruction_real_range trap equest
1555input fls_mar_request; // mem_address_range trap request
1556input fls_mrr_request; // mem_real_range trap request
1557input fls_pro_request; // Privileged opcode trap request
1558input fls_ill_request; // Illegal instruction trap request
1559input fls_don_request; // Done instruction
1560input fls_ret_request; // Retry instruction
1561input fls_fpd_request; // FP disabled trap request
1562input fls_snn_request; // Spill normal trap request
1563input fls_sno_request; // Spill other trap request
1564input fls_fnn_request; // Fill normal trap request
1565input fls_fno_request; // Fill other trap request
1566input fls_clw_request; // Clean window trap request
1567input [3:0] fls_dtm_request; // DTLB miss trap request
1568input fls_ldf_request; // lddf alignment trap request
1569input fls_stf_request; // stdf alignment trap request
1570input fls_dap_request; // data_access_protection request
1571input fls_vaw_request; // VA watchpoint trap request
1572input fls_iaw_request; // Instruction VA watchpoint trap req
1573input fls_paw_request; // PA watchpoint trap request
1574input fls_maa_request; // Memory address alignment trap request
1575input fls_fpe_request; // FP predicted exception
1576input [3:0] fls_fei_request; // FP IEEE 754 trap request
1577input [3:0] fls_fof_request; // FP other trap request (unfinished)
1578input [3:0] fls_pra_request; // Privileged action trap request
1579input fls_dia_request; // DAE_invalid_asi trap request
1580input [3:0] fls_ups_request; // unsupported_page_size trap request
1581input fls_dpv_request; // DAE_privilege_violation trap request
1582input fls_dnc_request; // DAE_nc_page trap request
1583input fls_dnf_request; // DAE_nfo_page trap request
1584input fls_dso_request; // DAE_so_page trap request
1585input fls_tof_request; // Tag overflow trap request
1586input [3:0] fls_dbz_request; // Divide by zero trap request
1587input fls_tcc_request; // Trap instruction trap request
1588input [3:0] fls_dae_request; // LSU uncorrectable ECC on load miss
1589input [3:0] fls_lsr_request; // LSU sync redirect to NPC (postsync)
1590input fls_irt_request; // Instruction real translation miss
1591input fls_drt_request; // Data real translation miss
1592input [3:0] fls_pmu_request; // pic_overflow
1593input [3:0] fls_mqr_request; // CPU mondo trap request
1594input [3:0] fls_dqr_request; // Device mondo trap request
1595input [3:0] fls_rqr_request; // Resumable error trap request
1596input [3:0] fls_idl_request; // CMP idle request
1597input [3:0] fls_res_request; // CMP resume request
1598input [3:0] fls_ssr_request; // Single step request
1599input [3:0] fls_ssc_request; // Single step completion
1600input [3:0] fls_nns_request; // NPC nonsequential redirect request
1601input [3:0] fls_ime_request; // Instruction_access_MMU_error request
1602input [3:0] fls_dme_request; // Data_access_MMU_error request
1603input [3:0] fls_eer_request; // ECC_error request
1604input fls_icp_request; // Icache parity error (ivalidate)
1605input [3:0] fls_ftt_request; // Fatal_thread_trap request
1606input fls_ibp_request; // Instruction breakpoint request
1607input fls_tct_request; // Trap on control transfer request
1608input fls_ref_request; // Refetch inst
1609
1610input [3:0] fls_pc_valid;
1611
1612input [3:0] pmu_tlu_trap_m; // pic_overflow is pending
1613
1614input [3:0] fls_trl_l1en; // Power management for trl
1615input [3:0] fls_core_running; // Power management
1616input [3:0] tlu_flush_ifu; // Used for power management
1617
1618input [3:0] pct_npc_is_nonseq; // NPC nonsequential, per thread
1619
1620input trlx_itw_wait; // Other thread group forces ITLB write
1621 // in this group to wait
1622input trlx_itw_last;
1623
1624input [1:0] tsa_gl;
1625input tsa_tnpc_nonseq;
1626input [3:0] tel_tsacu_exc;
1627
1628input [3:0] tlu_ceter_de;
1629input [3:0] tlu_ceter_pscce;
1630
1631input [3:0] tsd_hpstate_red;
1632input [3:0] tsd_hpstate_hpriv;
1633input [3:0] tsd_hpstate_tlz;
1634input [3:0] tsd_pstate_ie;
1635input [3:0] tsd_pstate_am;
1636input tsd_htstate_hpriv; // For saturating GL restore
1637
1638input [4:0] tic_addr;
1639input tic_not_valid;
1640input tic_match;
1641input cel_tccd;
1642input cel_tcud;
1643
1644input [4:0] asi_tsa_rd_addr;
1645input asi_tsa_rd_iqr_ecc;
1646input [1:0] asi_tsa_tid;
1647input [3:0] asi_rd_tl;
1648input [3:0] asi_wr_tl;
1649input [3:0] asi_rd_pil;
1650input [3:0] asi_wr_pil;
1651input [3:0] asi_rd_gl;
1652input [3:0] asi_wr_gl;
1653input [3:0] asi_wr_set_softint;
1654input [3:0] asi_wr_clear_softint;
1655input [3:0] asi_rd_softint;
1656input [3:0] asi_wr_softint;
1657input [3:0] asi_rd_hintp;
1658input [3:0] asi_wr_hintp;
1659input [16:0] asi_wr_data;
1660input asi_preempt_trap;
1661input asi_preempt_done_retry;
1662input asi_rmw_tsa;
1663input [3:0] asi_wr_asireg; // Power management
1664input asi_trl_pstate_en; // Power management
1665input [4:0] asi_mbist_addr; // MBIST
1666input asi_mbist_tsa_rd_en; // MBIST
1667input asi_mbist_tsa_wr_en; // MBIST
1668
1669
1670output scan_out;
1671
1672output wmr_scan_out; // Warm reset (non)scan
1673
1674output [3:0] spc_core_running_status;
1675
1676output [3:0] trl_core_running_status;
1677
1678output [3:0] trl_pil_mask_15; // PIL_mask[15]
1679output [3:0] trl_iln_exc; // interrupt_level_n exception
1680output [3:0] trl_hstick_match; // HSTICK_CMPR matches TICK
1681output [3:0] trl_unhalt_; // Raw *TICK_CMPR matches
1682output [3:0] trl_tlz_exc; // TL equals zero exception
1683output [3:0] trl_nns_exc; // Retry with nonsequential NPC
1684output [3:0] trl_ssc_exc; // Single step complete exception
1685output trl_take_sma; // SPU Modular Arithmetic trap taken
1686output trl_take_cwq; // SPU Control Word Queue trap taken
1687output trl_take_xir; // Hold XIR request until trap is taken
1688output trl_take_ftt; // Hold store_error rq until trap taken
1689
1690output [3:0] trl_pc_sel_trap_pc; // Trap, retry, or done taken; update PC
1691output [3:0] trl_npc_sel_trap_npc; // Trap taken; update NPC
1692output [3:0] trl_npc_sel_tnpc; // Retry or done taken; update NPC
1693output [3:0] trl_invalidate_pc; // Trap, done, retry, or HW TW complete
1694output [3:0] trl_invalidate_npc; // Trap, retry, or HW TW complete
1695output [8:0] trl_trap_type; // Trap type generated from trap request
1696output [8:0] trl_tsa_trap_type; // Trap type generated from trap request
1697output [4:0] trl_asireg_sel; // Which asireg to update?
1698output trl_asireg_en; // Power management
1699output [3:0] trl_thread_sel; // Which thread to trap?
1700output [2:0] trl_tba_sel; // Which thread & to HPRIV?
1701output [4:0] trl_pstate_thread_sel; // Which pstate to update?
1702output [3:0] trl_don_ret_pstate_sel; // Which pstate to update?
1703output trl_pstate_en; // Power management
1704output [3:0] trl_pc_thread_sel; // Which PC, NPC to use?
1705output trl_pc_pstate_am_;
1706output trl_pc_sel_pc; // Retry the excepting instruction
1707output trl_pc_sel_npc; // Advance to the next instruction
1708output trl_pc_sel_trap; // Select the trap PC
1709output trl_pc_sel_reset; // Select the reset PC
1710output trl_pc_done; // Select the NPC from the stack
1711output trl_pc_retry; // Select the PC from the stack
1712output trl_pc_tte; // Select the TTE for ITLB write
1713output trl_pct_trap_pc_en; // Power management
1714output trl_pct_tnpc_en;
1715output trl_stay_in_priv; // Trap should be in priv, not hyperpriv
1716output trl_reset_trap;
1717output trl_other_trap;
1718output trl_tl_gt_0;
1719output [3:0] trl_tl_eq_0;
1720
1721
1722output trl_tsa_wr_en; // Store an entry on the trap stack
1723output trl_tsa_rd_en; // Retrieve an entry off the trap stack
1724output [4:0] trl_tsa_wr_addr;
1725output [4:0] trl_tsa_rd_addr;
1726output trl_save_tsa;
1727output trl_tsd_tsa_en; // Power management
1728output trl_tsd_tsa_wd_en; // Power management
1729output trl_capture_ss; // Capture signal for TPC and TT
1730output trl_rmw_tsa;
1731
1732output [1:0] trl_tsa_gl;
1733
1734output [16:0] trl_asi_data;
1735
1736output [3:0] trl_ss_complete;
1737
1738output trl_itw_wait;
1739output trl_itw_last;
1740
1741output [1:0] trl_shscanid;
1742output trl_shscanid_2;
1743output [2:0] trl_shadow_tl;
1744output [2:0] trl_tl_for_tt;
1745
1746output [3:0] trl_fls_npc_en; // Power management for NPC flops
1747output trl_tel_en; // Power management for tel
1748
1749output [3:0] trl_trap_taken; // To recycle disrupting requests
1750
1751output [1:0] trl_gl0;
1752output [1:0] trl_gl1;
1753output [1:0] trl_gl2;
1754output [1:0] trl_gl3;
1755
1756output [3:0] trl_tsacu_en_in;
1757output [2:0] tlu_tsa_index;
1758output [3:0] tlu_tccd;
1759output [3:0] tlu_tcud;
1760output [1:0] tlu_tca_index;
1761
1762
1763output tlu_window_block;
1764
1765output tlu_trap_pc_valid;
1766output tlu_retry;
1767output tlu_ifu_invalidate;
1768output [1:0] tlu_trap_tid;
1769output tlu_itlb_reload;
1770output tlu_ccr_cwp_valid;
1771output [1:0] tlu_ccr_cwp_tid;
1772output tlu_asi_valid;
1773output [1:0] tlu_asi_tid;
1774output [1:0] tlu_gl0;
1775output [1:0] tlu_gl1;
1776output [1:0] tlu_gl2;
1777output [1:0] tlu_gl3;
1778
1779output [3:0] tlu_tl_gt_0;
1780
1781output [3:0] tlu_mmu_tl_gt_0;
1782
1783output [3:0] tlu_release_tte;
1784
1785output [3:0] tlu_lsu_clear_ctl_reg_;
1786
1787output [3:0] tlu_pmu_trap_taken;
1788
1789output tlu_pmu_trap_mask_e;
1790
1791
1792
1793////////////////////////////////////////////////////////////////////////////////
1794
1795assign pce_ov = tcu_pce_ov;
1796assign stop = 1'b0;
1797assign siclk = spc_aclk;
1798assign soclk = spc_bclk;
1799assign se = tcu_scan_en;
1800
1801assign maxtl[2:0] = 3'b110;
1802assign maxptl[2:0] = 3'b010;
1803assign maxtl_minus_one[2:0] = maxtl[2:0] - 3'b001;
1804assign maxgl[1:0] = 2'b11;
1805
1806
1807
1808////////////////////////////////////////////////////////////////////////////////
1809// Clock header for freerunning flops
1810
1811tlu_trl_ctl_l1clkhdr_ctl_macro clkgen (
1812 .l2clk (l2clk ),
1813 .l1en (1'b1 ),
1814 .l1clk (l1clk ),
1815 .pce_ov(pce_ov),
1816 .stop(stop),
1817 .se(se)
1818);
1819
1820
1821
1822////////////////////////////////////////////////////////////////////////////////
1823// Power management
1824
1825assign thread_active[3:0] =
1826 fls_core_running[3:0] | core_running_status[3:0];
1827
1828assign clear_l1en_per_thread_int[3:0] =
1829 trap_taken0[3:0] & ~{4 {take_itw_last}} &
1830 {4 {suppress_don_ret_taken_}};
1831
1832tlu_trl_ctl_msff_ctl_macro__width_4 flush_ifu_last_lat (
1833 .scan_in(flush_ifu_last_lat_scanin),
1834 .scan_out(flush_ifu_last_lat_scanout),
1835 .din (tlu_flush_ifu [3:0] ),
1836 .dout (flush_ifu_last [3:0] ),
1837 .l1clk(l1clk),
1838 .siclk(siclk),
1839 .soclk(soclk)
1840);
1841
1842assign l1en_per_thread_int_in[3:0] =
1843 tlu_flush_ifu[3:0] |
1844 flush_ifu_last[3:0] |
1845 fls_res_request[3:0] | // No flush for resume
1846 fls_lsr_request[3:0] | // No flush for all LSR requests
1847 fls_nns_request[3:0] |
1848 fls_ssr_request[3:0] |
1849 mmu_write_itlb[3:0] |
1850 (l1en_per_thread_int[3:0] & ~clear_l1en_per_thread_int[3:0] &
1851 thread_active[3:0]) |
1852 {4 {~lsu_tlu_pmen}};
1853
1854tlu_trl_ctl_msff_ctl_macro__width_4 l1en_per_thread_int_lat (
1855 .scan_in(l1en_per_thread_int_lat_scanin),
1856 .scan_out(l1en_per_thread_int_lat_scanout),
1857 .din (l1en_per_thread_int_in [3:0] ),
1858 .dout (l1en_per_thread_int [3:0] ),
1859 .l1clk(l1clk),
1860 .siclk(siclk),
1861 .soclk(soclk)
1862);
1863
1864// Dones and retries need an extra cycle
1865
1866assign l1en_don_ret_in[3:0] =
1867 trap_taken0[3:0] & {4 {take_don_last | take_ret_last}};
1868
1869tlu_trl_ctl_msff_ctl_macro__width_4 l1en_don_ret_lat (
1870 .scan_in(l1en_don_ret_lat_scanin),
1871 .scan_out(l1en_don_ret_lat_scanout),
1872 .din (l1en_don_ret_in [3:0] ),
1873 .dout (l1en_don_ret [3:0] ),
1874 .l1clk(l1clk),
1875 .siclk(siclk),
1876 .soclk(soclk)
1877);
1878
1879assign l1en_per_thread[3:0] =
1880 fls_trl_l1en[3:0] | l1en_per_thread_int[3:0] | l1en_don_ret[3:0];
1881
1882tlu_trl_ctl_l1clkhdr_ctl_macro t3_clken (
1883 .l2clk (l2clk ),
1884 .l1en (l1en_per_thread [3 ] ),
1885 .l1clk (l1clk_pm4 ),
1886 .pce_ov(pce_ov),
1887 .stop(stop),
1888 .se(se)
1889);
1890
1891tlu_trl_ctl_l1clkhdr_ctl_macro t2_clken (
1892 .l2clk (l2clk ),
1893 .l1en (l1en_per_thread [2 ] ),
1894 .l1clk (l1clk_pm3 ),
1895 .pce_ov(pce_ov),
1896 .stop(stop),
1897 .se(se)
1898);
1899
1900tlu_trl_ctl_l1clkhdr_ctl_macro t1_clken (
1901 .l2clk (l2clk ),
1902 .l1en (l1en_per_thread [1 ] ),
1903 .l1clk (l1clk_pm2 ),
1904 .pce_ov(pce_ov),
1905 .stop(stop),
1906 .se(se)
1907);
1908
1909tlu_trl_ctl_l1clkhdr_ctl_macro t0_clken (
1910 .l2clk (l2clk ),
1911 .l1en (l1en_per_thread [0 ] ),
1912 .l1clk (l1clk_pm1 ),
1913 .pce_ov(pce_ov),
1914 .stop(stop),
1915 .se(se)
1916);
1917
1918
1919
1920////////////////////////////////////////////////////////////////////////////////
1921// Record trap requests
1922
1923tlu_trl_ctl_msff_ctl_macro__width_4 tid_dec_w_lat (
1924 .scan_in(tid_dec_w_lat_scanin),
1925 .scan_out(tid_dec_w_lat_scanout),
1926 .din (fls_tid_dec_w_in [3:0] ),
1927 .dout (tid_dec_w [3:0] ),
1928 .l1clk(l1clk),
1929 .siclk(siclk),
1930 .soclk(soclk)
1931);
1932
1933
1934// Must wait for CWQ to go idle if this is a soft stop parking request
1935assign cwq_busy_in =
1936 spu_tlu_cwq_busy;
1937
1938tlu_trl_ctl_msff_ctl_macro__width_1 cwq_busy_lat (
1939 .scan_in(cwq_busy_lat_scanin),
1940 .scan_out(cwq_busy_lat_scanout),
1941 .din (cwq_busy_in ),
1942 .dout (cwq_busy ),
1943 .l1clk(l1clk),
1944 .siclk(siclk),
1945 .soclk(soclk)
1946);
1947
1948assign cwq_interlock_[3:0] =
1949 ~{4 {cwq_busy}};
1950
1951// Don't quiesce until TLB updates are complete
1952// DTLB is covered by LSU which is covered by PKU, but
1953// ITLB is only known by TLU
1954assign quiesced_in[3:0] =
1955 stb_empty[3:0] & i_quiesce[3:0] &
1956 p_quiesce[3:0] & ma_idle[3:0] & cwq_interlock_[3:0] &
1957 ~pitw_req_in[3:0];
1958
1959tlu_trl_ctl_msff_ctl_macro__width_8 quiesced_lat (
1960 .scan_in(quiesced_last_lat_scanin),
1961 .scan_out(quiesced_last_lat_scanout),
1962 .din ({quiesced_in [3:0],
1963 quiesced [3:0]}),
1964 .dout ({quiesced [3:0],
1965 quiesced_last [3:0]}),
1966 .l1clk(l1clk),
1967 .siclk(siclk),
1968 .soclk(soclk)
1969);
1970
1971// Idle must suppress other pending (synchronous) traps
1972assign pidl_req_in[3:0] =
1973 (fls_idl_request[3:0] | idl_req[3:0]) &
1974 core_running_status[3:0];
1975
1976assign idl_req_in[3:0] =
1977 pidl_req_in[3:0] & quiesced[3:0];
1978
1979tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 idl_req_lat (
1980 .scan_in(idl_req_lat_scanin),
1981 .scan_out(idl_req_lat_scanout),
1982 .l1clk ({l1clk_pm4 ,
1983 l1clk_pm3 ,
1984 l1clk_pm2 ,
1985 l1clk_pm1 }),
1986 .din (pidl_req_in [3:0] ),
1987 .dout (idl_req [3:0] ),
1988 .siclk(siclk),
1989 .soclk(soclk)
1990);
1991
1992tlu_trl_ctl_msff_ctl_macro__width_4 i_quiesce_lat (
1993 .scan_in(i_quiesce_lat_scanin),
1994 .scan_out(i_quiesce_lat_scanout),
1995 .din (ftu_ifu_quiesce [3:0] ),
1996 .dout (i_quiesce [3:0] ),
1997 .l1clk(l1clk),
1998 .siclk(siclk),
1999 .soclk(soclk)
2000);
2001
2002tlu_trl_ctl_msff_ctl_macro__width_4 p_quiesce_lat (
2003 .scan_in(p_quiesce_lat_scanin),
2004 .scan_out(p_quiesce_lat_scanout),
2005 .din (pku_quiesce [3:0] ),
2006 .dout (p_quiesce [3:0] ),
2007 .l1clk(l1clk),
2008 .siclk(siclk),
2009 .soclk(soclk)
2010);
2011
2012tlu_trl_ctl_msff_ctl_macro__width_4 ma_busy_lat (
2013 .scan_in(ma_busy_lat_scanin),
2014 .scan_out(ma_busy_lat_scanout),
2015 .din ({spu_pmu_ma_busy ,
2016 spu_tlu_ma_int_req [2:0]}),
2017 .dout ({ma_busy ,
2018 ma_tid [2:0]}),
2019 .l1clk(l1clk),
2020 .siclk(siclk),
2021 .soclk(soclk)
2022);
2023
2024assign ma_idle[3:0] =
2025 ~({4 {ma_busy & (ma_tid[2] == thread_group)}} &
2026 {ma_tid[1:0] == 2'b11,
2027 ma_tid[1:0] == 2'b10,
2028 ma_tid[1:0] == 2'b01,
2029 ma_tid[1:0] == 2'b00});
2030
2031// Report status once thread is actually idle
2032assign core_running_status_in[3:0] =
2033 (core_running_status[3:0] | trap_por_res_ssr[3:0]) &
2034 ~idl_req_in[3:0];
2035
2036tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 core_running_status_lat (
2037 .scan_in(core_running_status_lat_scanin),
2038 .scan_out(core_running_status_lat_scanout),
2039 .l1clk ({l1clk_pm4 ,
2040 l1clk_pm3 ,
2041 l1clk_pm2 ,
2042 l1clk_pm1 }),
2043 .din (core_running_status_in [3:0] ),
2044 .dout (core_running_status [3:0] ),
2045 .siclk(siclk),
2046 .soclk(soclk)
2047);
2048
2049assign ever_been_running_in[3:0] =
2050 ever_been_running[3:0] | core_running_status[3:0];
2051
2052tlu_trl_ctl_msff_ctl_macro__width_4 ever_been_running_lat (
2053 .scan_in(ever_been_running_lat_scanin),
2054 .scan_out(ever_been_running_lat_scanout),
2055 .din (ever_been_running_in [3:0] ),
2056 .dout (ever_been_running [3:0] ),
2057 .l1clk(l1clk),
2058 .siclk(siclk),
2059 .soclk(soclk)
2060);
2061
2062assign spc_core_running_status[3:0] =
2063 core_running_status[3:0];
2064
2065assign trl_core_running_status[3:0] =
2066 core_running_status[3:0];
2067
2068
2069
2070assign pdisrupting_req[3:0] = 4'h0;
2071assign disrupting_req[3:0] = 4'h0;
2072
2073
2074assign por_req_in[3:0] =
2075 (fls_por_request[3:0] | por_req[3:0]);
2076assign por_req_in_ntt[3:0] =
2077 por_req_in[3:0] & ~trap_taken0[3:0];
2078
2079tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 por_req_lat (
2080 .scan_in(por_req_lat_scanin),
2081 .scan_out(por_req_lat_scanout),
2082 .l1clk ({l1clk_pm4 ,
2083 l1clk_pm3 ,
2084 l1clk_pm2 ,
2085 l1clk_pm1 }),
2086 .din (por_req_in_ntt [3:0] ),
2087 .dout (por_req [3:0] ),
2088 .siclk(siclk),
2089 .soclk(soclk)
2090);
2091
2092assign pxir_req_in[3:0] =
2093 (fls_xir_request[3:0] | xir_req[3:0]);
2094
2095assign xir_req_in[3:0] =
2096 pxir_req_in[3:0] & stb_empty[3:0];
2097
2098assign pxir_req_in_ntt[3:0] =
2099 pxir_req_in[3:0] & ~trap_taken0[3:0];
2100
2101tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 xir_req_lat (
2102 .scan_in(xir_req_lat_scanin),
2103 .scan_out(xir_req_lat_scanout),
2104 .l1clk ({l1clk_pm4 ,
2105 l1clk_pm3 ,
2106 l1clk_pm2 ,
2107 l1clk_pm1 }),
2108 .din (pxir_req_in_ntt [3:0] ),
2109 .dout (xir_req [3:0] ),
2110 .siclk(siclk),
2111 .soclk(soclk)
2112);
2113
2114assign peer_req_in[3:0] =
2115 fls_eer_request[3:0] | eer_req[3:0];
2116
2117assign eer_req_in[3:0] =
2118 peer_req_in[3:0] & stb_empty[3:0];
2119
2120assign peer_req_in_ntt[3:0] =
2121 peer_req_in[3:0] & ~trap_taken0[3:0];
2122
2123tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 eer_req_lat (
2124 .scan_in(eer_req_lat_scanin),
2125 .scan_out(eer_req_lat_scanout),
2126 .l1clk ({l1clk_pm4 ,
2127 l1clk_pm3 ,
2128 l1clk_pm2 ,
2129 l1clk_pm1 }),
2130 .din (peer_req_in_ntt [3:0] ),
2131 .dout (eer_req [3:0] ),
2132 .siclk(siclk),
2133 .soclk(soclk)
2134);
2135
2136// icp means icache error. TLU must redirect IFU to
2137// PC with an tlu_ifu_invalidate to force an invalidate and refetch
2138assign icp_req_in[3:0] =
2139 ({4 {fls_icp_request}} & tid_dec_w[3:0]) | icp_req[3:0];
2140
2141assign icp_req_in_ntt[3:0] =
2142 icp_req_in[3:0] & ~trap_taken0[3:0];
2143
2144tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 icp_req_lat (
2145 .scan_in(icp_req_lat_scanin),
2146 .scan_out(icp_req_lat_scanout),
2147 .l1clk ({l1clk_pm4 ,
2148 l1clk_pm3 ,
2149 l1clk_pm2 ,
2150 l1clk_pm1 }),
2151 .din (icp_req_in_ntt [3:0] ),
2152 .dout (icp_req [3:0] ),
2153 .siclk(siclk),
2154 .soclk(soclk)
2155);
2156
2157assign pftt_req_in[3:0] =
2158 fls_ftt_request[3:0] | ftt_req[3:0];
2159
2160assign ftt_req_in[3:0] =
2161 pftt_req_in[3:0] & stb_empty[3:0];
2162
2163assign pftt_req_in_ntt[3:0] =
2164 pftt_req_in[3:0] & ~trap_taken0[3:0];
2165
2166tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ftt_req_lat (
2167 .scan_in(ftt_req_lat_scanin),
2168 .scan_out(ftt_req_lat_scanout),
2169 .l1clk ({l1clk_pm4 ,
2170 l1clk_pm3 ,
2171 l1clk_pm2 ,
2172 l1clk_pm1 }),
2173 .din (pftt_req_in_ntt [3:0] ),
2174 .dout (ftt_req [3:0] ),
2175 .siclk(siclk),
2176 .soclk(soclk)
2177);
2178
2179assign pivt_req_in[3:0] =
2180 (fls_ivt_request[3:0] | ivt_req[3:0]);
2181
2182assign ivt_req_in[3:0] =
2183 pivt_req_in[3:0] & ~stb_wait[3:0];
2184
2185assign pivt_req_in_ntt[3:0] =
2186 pivt_req_in[3:0] & ~trap_taken0[3:0];
2187
2188tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ivt_req_lat (
2189 .scan_in(ivt_req_lat_scanin),
2190 .scan_out(ivt_req_lat_scanout),
2191 .l1clk ({l1clk_pm4 ,
2192 l1clk_pm3 ,
2193 l1clk_pm2 ,
2194 l1clk_pm1 }),
2195 .din (pivt_req_in_ntt [3:0] ),
2196 .dout (ivt_req [3:0] ),
2197 .siclk(siclk),
2198 .soclk(soclk)
2199);
2200
2201assign pmqr_req_in[3:0] =
2202 (fls_mqr_request[3:0] | mqr_req[3:0]);
2203
2204assign mqr_req_in[3:0] =
2205 pmqr_req_in[3:0] & ~stb_wait[3:0];
2206
2207assign pmqr_req_in_ntt[3:0] =
2208 pmqr_req_in[3:0] & ~trap_taken0[3:0];
2209
2210tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 mqr_req_lat (
2211 .scan_in(mqr_req_lat_scanin),
2212 .scan_out(mqr_req_lat_scanout),
2213 .l1clk ({l1clk_pm4 ,
2214 l1clk_pm3 ,
2215 l1clk_pm2 ,
2216 l1clk_pm1 }),
2217 .din (pmqr_req_in_ntt [3:0] ),
2218 .dout (mqr_req [3:0] ),
2219 .siclk(siclk),
2220 .soclk(soclk)
2221);
2222
2223assign pdqr_req_in[3:0] =
2224 (fls_dqr_request[3:0] | dqr_req[3:0]);
2225
2226assign dqr_req_in[3:0] =
2227 pdqr_req_in[3:0] & ~stb_wait[3:0];
2228
2229assign pdqr_req_in_ntt[3:0] =
2230 pdqr_req_in[3:0] & ~trap_taken0[3:0];
2231
2232tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dqr_req_lat (
2233 .scan_in(dqr_req_lat_scanin),
2234 .scan_out(dqr_req_lat_scanout),
2235 .l1clk ({l1clk_pm4 ,
2236 l1clk_pm3 ,
2237 l1clk_pm2 ,
2238 l1clk_pm1 }),
2239 .din (pdqr_req_in_ntt [3:0] ),
2240 .dout (dqr_req [3:0] ),
2241 .siclk(siclk),
2242 .soclk(soclk)
2243);
2244
2245assign prqr_req_in[3:0] =
2246 (fls_rqr_request[3:0] | rqr_req[3:0]);
2247
2248assign rqr_req_in[3:0] =
2249 prqr_req_in[3:0] & ~stb_wait[3:0];
2250
2251assign prqr_req_in_ntt[3:0] =
2252 prqr_req_in[3:0] & ~trap_taken0[3:0];
2253
2254tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 rqr_req_lat (
2255 .scan_in(rqr_req_lat_scanin),
2256 .scan_out(rqr_req_lat_scanout),
2257 .l1clk ({l1clk_pm4 ,
2258 l1clk_pm3 ,
2259 l1clk_pm2 ,
2260 l1clk_pm1 }),
2261 .din (prqr_req_in_ntt [3:0] ),
2262 .dout (rqr_req [3:0] ),
2263 .siclk(siclk),
2264 .soclk(soclk)
2265);
2266
2267assign pres_req_in[3:0] =
2268 (fls_res_request[3:0] | res_req[3:0]) & ever_been_running[3:0];
2269
2270// Do not need to wait for anything for resume to take effect
2271assign res_req_in[3:0] =
2272 pres_req_in[3:0];
2273
2274assign pres_req_in_ntt[3:0] =
2275 pres_req_in[3:0] & ~trap_taken0[3:0];
2276
2277tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 res_req_lat (
2278 .scan_in(res_req_lat_scanin),
2279 .scan_out(res_req_lat_scanout),
2280 .l1clk ({l1clk_pm4 ,
2281 l1clk_pm3 ,
2282 l1clk_pm2 ,
2283 l1clk_pm1 }),
2284 .din (pres_req_in_ntt [3:0] ),
2285 .dout (res_req [3:0] ),
2286 .siclk(siclk),
2287 .soclk(soclk)
2288);
2289
2290assign pssr_req_in[3:0] =
2291 (fls_ssr_request[3:0] | ssr_req[3:0]);
2292
2293// Need to wait for quiesce for single step to take effect
2294assign ssr_req_in[3:0] =
2295 pssr_req_in[3:0] & quiesced[3:0];
2296
2297assign ssr_req_in_for_taken[3:0] =
2298 pssr_req_in[3:0] & quiesced_last[3:0];
2299
2300// Have to hold ssr until it's taken (in case of HW TW)
2301assign pssr_req_in_ntt[3:0] =
2302 pssr_req_in[3:0] & ~tlu_flush_ifu[3:0] &
2303 ~(trap_taken0[3:0] & {4 {take_ssr_last}});
2304
2305tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ssr_req_lat (
2306 .scan_in(ssr_req_lat_scanin),
2307 .scan_out(ssr_req_lat_scanout),
2308 .l1clk ({l1clk_pm4 ,
2309 l1clk_pm3 ,
2310 l1clk_pm2 ,
2311 l1clk_pm1 }),
2312 .din (pssr_req_in_ntt [3:0] ),
2313 .dout (ssr_req [3:0] ),
2314 .siclk(siclk),
2315 .soclk(soclk)
2316);
2317
2318// Tracking when machine idles again
2319// Kill request if late exception occurs (based on flush_gfb_in in tlu_fls_ctl)
2320// But also need unsupported_page_size because that happens late with no
2321// flush in W (other MMU-related exceptions already caused flushes in W)
2322assign ssc_req_in[3:0] =
2323 (fls_ssc_request[3:0] | ssc_req[3:0]) &
2324 ~quiesced[3:0] &
2325 ~fei_or_fof_incoming[3:0] &
2326 ~fls_dae_request[3:0] &
2327 ~fls_pra_request[3:0] &
2328 ~fls_pmu_request[3:0] &
2329 ~fls_ipe_request[3:0] &
2330 ~fls_dbz_request[3:0] &
2331 ~fls_ups_request[3:0] ;
2332
2333tlu_trl_ctl_msff_ctl_macro__width_4 ssc_req_lat (
2334 .scan_in(ssc_req_lat_scanin),
2335 .scan_out(ssc_req_lat_scanout),
2336 .din (ssc_req_in [3:0] ),
2337 .dout (ssc_req [3:0] ),
2338 .l1clk(l1clk),
2339 .siclk(siclk),
2340 .soclk(soclk)
2341);
2342
2343assign trl_ss_complete[3:0] =
2344 ssc_req[3:0] & quiesced[3:0];
2345
2346assign pnns_req_in[3:0] =
2347 (fls_nns_request[3:0] | nns_req[3:0]);
2348
2349assign nns_req_in[3:0] =
2350 pnns_req_in[3:0];
2351
2352assign pnns_req_in_ntt[3:0] =
2353 pnns_req_in[3:0] & ~trap_taken0[3:0];
2354
2355tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 nns_req_lat (
2356 .scan_in(nns_req_lat_scanin),
2357 .scan_out(nns_req_lat_scanout),
2358 .l1clk ({l1clk_pm4 ,
2359 l1clk_pm3 ,
2360 l1clk_pm2 ,
2361 l1clk_pm1 }),
2362 .din (pnns_req_in_ntt [3:0] ),
2363 .dout (nns_req [3:0] ),
2364 .siclk(siclk),
2365 .soclk(soclk)
2366);
2367
2368assign psir_req_in[3:0] =
2369 (fls_sir_request[3:0] | sir_req[3:0]) & ~pdisrupting_req[3:0];
2370
2371assign sir_req_in[3:0] =
2372 psir_req_in[3:0] & stb_empty[3:0];
2373
2374assign psir_req_in_ntt[3:0] =
2375 psir_req_in[3:0] & ~trap_taken0[3:0];
2376
2377tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 sir_req_lat (
2378 .scan_in(sir_req_lat_scanin),
2379 .scan_out(sir_req_lat_scanout),
2380 .l1clk ({l1clk_pm4 ,
2381 l1clk_pm3 ,
2382 l1clk_pm2 ,
2383 l1clk_pm1 }),
2384 .din (psir_req_in_ntt [3:0] ),
2385 .dout (sir_req [3:0] ),
2386 .siclk(siclk),
2387 .soclk(soclk)
2388);
2389
2390assign pitm_req_in[3:0] =
2391 (fls_itm_request[3:0] | itm_req[3:0]) & ~disrupting_req[3:0];
2392
2393assign itm_req_in[3:0] =
2394 pitm_req_in[3:0] & ~stb_wait[3:0] &
2395 ~irt_req_in[3:0] & ~tlz_req_in[3:0] & ~pmu_req_in[3:0];
2396
2397assign pitm_req_in_ntt[3:0] =
2398 pitm_req_in[3:0] & ~trap_taken0[3:0];
2399
2400tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 itm_req_lat (
2401 .scan_in(itm_req_lat_scanin),
2402 .scan_out(itm_req_lat_scanout),
2403 .l1clk ({l1clk_pm4 ,
2404 l1clk_pm3 ,
2405 l1clk_pm2 ,
2406 l1clk_pm1 }),
2407 .din (pitm_req_in_ntt [3:0] ),
2408 .dout (itm_req [3:0] ),
2409 .siclk(siclk),
2410 .soclk(soclk)
2411);
2412
2413tlu_trl_ctl_msff_ctl_macro__width_4 i_tte_outofrange_lat (
2414 .scan_in(i_tte_outofrange_lat_scanin),
2415 .scan_out(i_tte_outofrange_lat_scanout),
2416 .din (mmu_i_tte_outofrange [3:0] ),
2417 .dout (i_tte_outofrange [3:0] ),
2418 .l1clk(l1clk),
2419 .siclk(siclk),
2420 .soclk(soclk)
2421);
2422
2423assign piit_req_in[3:0] =
2424 (i_tte_outofrange[3:0] | iit_req[3:0]) & ~disrupting_req[3:0];
2425
2426assign iit_req_in[3:0] =
2427 piit_req_in[3:0] & ~stb_wait[3:0];
2428
2429assign piit_req_in_ntt[3:0] =
2430 piit_req_in[3:0] & ~trap_taken0[3:0];
2431
2432tlu_trl_ctl_msff_ctl_macro__width_4 iit_req_lat (
2433 .scan_in(iit_req_lat_scanin),
2434 .scan_out(iit_req_lat_scanout),
2435 .din (piit_req_in_ntt [3:0] ),
2436 .dout (iit_req [3:0] ),
2437 .l1clk(l1clk),
2438 .siclk(siclk),
2439 .soclk(soclk)
2440);
2441
2442assign piln_req_in[3:0] =
2443 (fls_iln_request[3:0] | iln_req[3:0]) &
2444 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2445
2446assign iln_req_in[3:0] =
2447 piln_req_in[3:0] & ~stb_wait[3:0];
2448
2449assign piln_req_in_ntt[3:0] =
2450 piln_req_in[3:0] & ~trap_taken0[3:0];
2451
2452tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 iln_req_lat (
2453 .scan_in(iln_req_lat_scanin),
2454 .scan_out(iln_req_lat_scanout),
2455 .l1clk ({l1clk_pm4 ,
2456 l1clk_pm3 ,
2457 l1clk_pm2 ,
2458 l1clk_pm1 }),
2459 .din (piln_req_in_ntt [3:0] ),
2460 .dout (iln_req [3:0] ),
2461 .siclk(siclk),
2462 .soclk(soclk)
2463);
2464
2465assign phst_req_in[3:0] =
2466 (fls_hst_request[3:0] | hst_req[3:0]) &
2467 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2468
2469assign hst_req_in[3:0] =
2470 phst_req_in[3:0] & ~stb_wait[3:0];
2471
2472assign phst_req_in_ntt[3:0] =
2473 phst_req_in[3:0] & ~trap_taken0[3:0];
2474
2475tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 hst_req_lat (
2476 .scan_in(hst_req_lat_scanin),
2477 .scan_out(hst_req_lat_scanout),
2478 .l1clk ({l1clk_pm4 ,
2479 l1clk_pm3 ,
2480 l1clk_pm2 ,
2481 l1clk_pm1 }),
2482 .din (phst_req_in_ntt [3:0] ),
2483 .dout (hst_req [3:0] ),
2484 .siclk(siclk),
2485 .soclk(soclk)
2486);
2487
2488assign ptlz_req_in[3:0] =
2489 (fls_tlz_request[3:0] | tlz_req[3:0]) &
2490 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2491
2492assign tlz_req_in[3:0] =
2493 ptlz_req_in[3:0] & ~stb_wait[3:0];
2494
2495assign ptlz_req_in_ntt[3:0] =
2496 ptlz_req_in[3:0] & ~trap_taken0[3:0];
2497
2498tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 tlz_req_lat (
2499 .scan_in(tlz_req_lat_scanin),
2500 .scan_out(tlz_req_lat_scanout),
2501 .l1clk ({l1clk_pm4 ,
2502 l1clk_pm3 ,
2503 l1clk_pm2 ,
2504 l1clk_pm1 }),
2505 .din (ptlz_req_in_ntt [3:0] ),
2506 .dout (tlz_req [3:0] ),
2507 .siclk(siclk),
2508 .soclk(soclk)
2509);
2510
2511assign psma_req_in[3:0] =
2512 (fls_sma_request[3:0] | sma_req[3:0]) &
2513 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2514
2515assign sma_req_in[3:0] =
2516 psma_req_in[3:0] & ~stb_wait[3:0];
2517
2518assign psma_req_in_ntt[3:0] =
2519 psma_req_in[3:0] & ~trap_taken1[3:0];
2520
2521tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 sma_req_lat (
2522 .scan_in(sma_req_lat_scanin),
2523 .scan_out(sma_req_lat_scanout),
2524 .l1clk ({l1clk_pm4 ,
2525 l1clk_pm3 ,
2526 l1clk_pm2 ,
2527 l1clk_pm1 }),
2528 .din (psma_req_in_ntt [3:0] ),
2529 .dout (sma_req [3:0] ),
2530 .siclk(siclk),
2531 .soclk(soclk)
2532);
2533
2534assign pcwq_req_in[3:0] =
2535 (fls_cwq_request[3:0] | cwq_req[3:0]) &
2536 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2537
2538assign cwq_req_in[3:0] =
2539 pcwq_req_in[3:0] & ~stb_wait[3:0];
2540
2541assign pcwq_req_in_ntt[3:0] =
2542 pcwq_req_in[3:0] & ~trap_taken1[3:0];
2543
2544tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 cwq_req_lat (
2545 .scan_in(cwq_req_lat_scanin),
2546 .scan_out(cwq_req_lat_scanout),
2547 .l1clk ({l1clk_pm4 ,
2548 l1clk_pm3 ,
2549 l1clk_pm2 ,
2550 l1clk_pm1 }),
2551 .din (pcwq_req_in_ntt [3:0] ),
2552 .dout (cwq_req [3:0] ),
2553 .siclk(siclk),
2554 .soclk(soclk)
2555);
2556
2557assign pade_req_in[3:0] =
2558 (fls_ade_request[3:0] | ade_req[3:0]) &
2559 ~pdisrupting_req[3:0] & ~sir_req[3:0];
2560
2561assign ade_req_in[3:0] =
2562 pade_req_in[3:0] & stb_empty[3:0];
2563
2564assign pade_req_in_ntt[3:0] =
2565 pade_req_in[3:0] & ~trap_taken1[3:0];
2566
2567tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ade_req_lat (
2568 .scan_in(ade_req_lat_scanin),
2569 .scan_out(ade_req_lat_scanout),
2570 .l1clk ({l1clk_pm4 ,
2571 l1clk_pm3 ,
2572 l1clk_pm2 ,
2573 l1clk_pm1 }),
2574 .din (pade_req_in_ntt [3:0] ),
2575 .dout (ade_req [3:0] ),
2576 .siclk(siclk),
2577 .soclk(soclk)
2578);
2579
2580assign piae_req_in[3:0] =
2581 (fls_iae_request[3:0] | iae_req[3:0]) &
2582 ~disrupting_req[3:0];
2583
2584assign iae_req_in[3:0] =
2585 piae_req_in[3:0] & stb_empty[3:0];
2586
2587assign piae_req_in_ntt[3:0] =
2588 piae_req_in[3:0] & ~trap_taken1[3:0];
2589
2590tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 iae_req_lat (
2591 .scan_in(iae_req_lat_scanin),
2592 .scan_out(iae_req_lat_scanout),
2593 .l1clk ({l1clk_pm4 ,
2594 l1clk_pm3 ,
2595 l1clk_pm2 ,
2596 l1clk_pm1 }),
2597 .din (piae_req_in_ntt [3:0] ),
2598 .dout (iae_req [3:0] ),
2599 .siclk(siclk),
2600 .soclk(soclk)
2601);
2602
2603// Note that TSA precise exception on done/retry come straight here
2604// and do NOT go to tlu_fls_ctl
2605// Also note that IPE is NOT disrupting
2606assign pipe_req_in[3:0] =
2607 (fls_ipe_request[3:0] | ipe_req[3:0] | tpe_exc[3:0]) &
2608 ~disrupting_req[3:0];
2609
2610assign ipe_req_in[3:0] =
2611 pipe_req_in[3:0] & stb_empty[3:0];
2612
2613assign pipe_req_in_ntt[3:0] =
2614 pipe_req_in[3:0] & ~(trap_taken1[3:0] & ~{4 {take_lsr_last}});
2615
2616tlu_trl_ctl_msff_ctl_macro__width_4 ipe_req_lat (
2617 .scan_in(ipe_req_lat_scanin),
2618 .scan_out(ipe_req_lat_scanout),
2619 .din (pipe_req_in_ntt [3:0] ),
2620 .dout (ipe_req [3:0] ),
2621 .l1clk(l1clk),
2622 .siclk(siclk),
2623 .soclk(soclk)
2624);
2625
2626assign pipv_req_in[3:0] =
2627 (({4 {fls_ipv_request}} & tid_dec_w[3:0]) | ipv_req[3:0]) &
2628 ~disrupting_req[3:0];
2629
2630assign ipv_req_in[3:0] =
2631 pipv_req_in[3:0] & ~stb_wait[3:0];
2632
2633assign pipv_req_in_ntt[3:0] =
2634 pipv_req_in[3:0] & ~trap_taken1[3:0];
2635
2636tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ipv_req_lat (
2637 .scan_in(ipv_req_lat_scanin),
2638 .scan_out(ipv_req_lat_scanout),
2639 .l1clk ({l1clk_pm4 ,
2640 l1clk_pm3 ,
2641 l1clk_pm2 ,
2642 l1clk_pm1 }),
2643 .din (pipv_req_in_ntt [3:0] ),
2644 .dout (ipv_req [3:0] ),
2645 .siclk(siclk),
2646 .soclk(soclk)
2647);
2648
2649tlu_trl_ctl_msff_ctl_macro__width_4 i_unauth_access_lat (
2650 .scan_in(i_unauth_access_lat_scanin),
2651 .scan_out(i_unauth_access_lat_scanout),
2652 .din (mmu_i_unauth_access [3:0] ),
2653 .dout (i_unauth_access [3:0] ),
2654 .l1clk(l1clk),
2655 .siclk(siclk),
2656 .soclk(soclk)
2657);
2658
2659assign piua_req_in[3:0] =
2660 (i_unauth_access[3:0] | iua_req[3:0]) &
2661 ~disrupting_req[3:0];
2662
2663assign iua_req_in[3:0] =
2664 piua_req_in[3:0] & ~stb_wait[3:0];
2665
2666assign piua_req_in_ntt[3:0] =
2667 piua_req_in[3:0] & ~trap_taken1[3:0];
2668
2669tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 iua_req_lat (
2670 .scan_in(iua_req_lat_scanin),
2671 .scan_out(iua_req_lat_scanout),
2672 .l1clk ({l1clk_pm4 ,
2673 l1clk_pm3 ,
2674 l1clk_pm2 ,
2675 l1clk_pm1 }),
2676 .din (piua_req_in_ntt [3:0] ),
2677 .dout (iua_req [3:0] ),
2678 .siclk(siclk),
2679 .soclk(soclk)
2680);
2681
2682assign pinp_req_in[3:0] =
2683 (({4 {fls_inp_request}} & tid_dec_w[3:0]) | inp_req[3:0]) &
2684 ~disrupting_req[3:0];
2685
2686assign inp_req_in[3:0] =
2687 pinp_req_in[3:0] & ~stb_wait[3:0];
2688
2689assign pinp_req_in_ntt[3:0] =
2690 pinp_req_in[3:0] & ~trap_taken1[3:0];
2691
2692tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 inp_req_lat (
2693 .scan_in(inp_req_lat_scanin),
2694 .scan_out(inp_req_lat_scanout),
2695 .l1clk ({l1clk_pm4 ,
2696 l1clk_pm3 ,
2697 l1clk_pm2 ,
2698 l1clk_pm1 }),
2699 .din (pinp_req_in_ntt [3:0] ),
2700 .dout (inp_req [3:0] ),
2701 .siclk(siclk),
2702 .soclk(soclk)
2703);
2704
2705assign piar_req_in[3:0] =
2706 (({4 {fls_iar_request}} & tid_dec_w[3:0]) | iar_req[3:0]) &
2707 ~disrupting_req[3:0];
2708
2709assign iar_req_in[3:0] =
2710 piar_req_in[3:0] & ~stb_wait[3:0];
2711
2712assign piar_req_in_ntt[3:0] =
2713 piar_req_in[3:0] & ~trap_taken1[3:0];
2714
2715tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 iar_req_lat (
2716 .scan_in(iar_req_lat_scanin),
2717 .scan_out(iar_req_lat_scanout),
2718 .l1clk ({l1clk_pm4 ,
2719 l1clk_pm3 ,
2720 l1clk_pm2 ,
2721 l1clk_pm1 }),
2722 .din (piar_req_in_ntt [3:0] ),
2723 .dout (iar_req [3:0] ),
2724 .siclk(siclk),
2725 .soclk(soclk)
2726);
2727
2728assign pirr_req_in[3:0] =
2729 (({4 {fls_irr_request}} & tid_dec_w[3:0]) | irr_req[3:0]) &
2730 ~disrupting_req[3:0];
2731
2732assign irr_req_in[3:0] =
2733 pirr_req_in[3:0] & ~stb_wait[3:0];
2734
2735assign pirr_req_in_ntt[3:0] =
2736 pirr_req_in[3:0] & ~trap_taken1[3:0];
2737
2738tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 irr_req_lat (
2739 .scan_in(irr_req_lat_scanin),
2740 .scan_out(irr_req_lat_scanout),
2741 .l1clk ({l1clk_pm4 ,
2742 l1clk_pm3 ,
2743 l1clk_pm2 ,
2744 l1clk_pm1 }),
2745 .din (pirr_req_in_ntt [3:0] ),
2746 .dout (irr_req [3:0] ),
2747 .siclk(siclk),
2748 .soclk(soclk)
2749);
2750
2751assign pmar_req_in[3:0] =
2752 (({4 {fls_mar_request}} & tid_dec_w[3:0]) | mar_req[3:0]) &
2753 ~disrupting_req[3:0];
2754
2755assign mar_req_in[3:0] =
2756 pmar_req_in[3:0] & ~stb_wait[3:0];
2757
2758assign pmar_req_in_ntt[3:0] =
2759 pmar_req_in[3:0] & ~trap_taken1[3:0];
2760
2761tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 mar_req_lat (
2762 .scan_in(mar_req_lat_scanin),
2763 .scan_out(mar_req_lat_scanout),
2764 .l1clk ({l1clk_pm4 ,
2765 l1clk_pm3 ,
2766 l1clk_pm2 ,
2767 l1clk_pm1 }),
2768 .din (pmar_req_in_ntt [3:0] ),
2769 .dout (mar_req [3:0] ),
2770 .siclk(siclk),
2771 .soclk(soclk)
2772);
2773
2774assign pmrr_req_in[3:0] =
2775 (({4 {fls_mrr_request}} & tid_dec_w[3:0]) | mrr_req[3:0]) &
2776 ~disrupting_req[3:0];
2777
2778assign mrr_req_in[3:0] =
2779 pmrr_req_in[3:0] & ~stb_wait[3:0];
2780
2781assign pmrr_req_in_ntt[3:0] =
2782 pmrr_req_in[3:0] & ~trap_taken1[3:0];
2783
2784tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 mrr_req_lat (
2785 .scan_in(mrr_req_lat_scanin),
2786 .scan_out(mrr_req_lat_scanout),
2787 .l1clk ({l1clk_pm4 ,
2788 l1clk_pm3 ,
2789 l1clk_pm2 ,
2790 l1clk_pm1 }),
2791 .din (pmrr_req_in_ntt [3:0] ),
2792 .dout (mrr_req [3:0] ),
2793 .siclk(siclk),
2794 .soclk(soclk)
2795);
2796
2797assign ppro_req_in[3:0] =
2798 (({4 {fls_pro_request}} & tid_dec_w[3:0]) | pro_req[3:0]) &
2799 ~disrupting_req[3:0];
2800
2801assign pro_req_in[3:0] =
2802 ppro_req_in[3:0] & ~stb_wait[3:0];
2803
2804assign ppro_req_in_ntt[3:0] =
2805 ppro_req_in[3:0] & ~trap_taken1[3:0];
2806
2807tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 pro_req_lat (
2808 .scan_in(pro_req_lat_scanin),
2809 .scan_out(pro_req_lat_scanout),
2810 .l1clk ({l1clk_pm4 ,
2811 l1clk_pm3 ,
2812 l1clk_pm2 ,
2813 l1clk_pm1 }),
2814 .din (ppro_req_in_ntt [3:0] ),
2815 .dout (pro_req [3:0] ),
2816 .siclk(siclk),
2817 .soclk(soclk)
2818);
2819
2820assign pill_req_in[3:0] =
2821 (({4 {fls_ill_request}} & tid_dec_w[3:0]) | ill_req[3:0]) &
2822 ~disrupting_req[3:0];
2823
2824assign ill_req_in[3:0] =
2825 pill_req_in[3:0] & ~stb_wait[3:0];
2826
2827assign pill_req_in_ntt[3:0] =
2828 pill_req_in[3:0] & ~trap_taken1[3:0];
2829
2830tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ill_req_lat (
2831 .scan_in(ill_req_lat_scanin),
2832 .scan_out(ill_req_lat_scanout),
2833 .l1clk ({l1clk_pm4 ,
2834 l1clk_pm3 ,
2835 l1clk_pm2 ,
2836 l1clk_pm1 }),
2837 .din (pill_req_in_ntt [3:0] ),
2838 .dout (ill_req [3:0] ),
2839 .siclk(siclk),
2840 .soclk(soclk)
2841);
2842
2843assign pdon_req_in[3:0] =
2844 (({4 {fls_don_request}} & tid_dec_w[3:0]) | don_req[3:0]) &
2845 ~disrupting_req[3:0];
2846
2847assign don_req_in[3:0] =
2848 {4 {~stall_don_ret}} & pdon_req_in[3:0];
2849
2850assign pdon_req_in_ntt[3:0] =
2851 pdon_req_in[3:0] & (~trap_taken1[3:0] | {4 {hole_in_p}});
2852
2853tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 don_req_lat (
2854 .scan_in(don_req_lat_scanin),
2855 .scan_out(don_req_lat_scanout),
2856 .l1clk ({l1clk_pm4 ,
2857 l1clk_pm3 ,
2858 l1clk_pm2 ,
2859 l1clk_pm1 }),
2860 .din (pdon_req_in_ntt [3:0] ),
2861 .dout (don_req [3:0] ),
2862 .siclk(siclk),
2863 .soclk(soclk)
2864);
2865
2866assign pret_req_in[3:0] =
2867 (({4 {fls_ret_request}} & tid_dec_w[3:0]) | ret_req[3:0]) &
2868 ~disrupting_req[3:0];
2869
2870assign ret_req_in[3:0] =
2871 {4 {~stall_don_ret}} & pret_req_in[3:0];
2872
2873assign pret_req_in_ntt[3:0] =
2874 pret_req_in[3:0] & (~trap_taken1[3:0] | {4 {hole_in_p}});
2875
2876tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ret_req_lat (
2877 .scan_in(ret_req_lat_scanin),
2878 .scan_out(ret_req_lat_scanout),
2879 .l1clk ({l1clk_pm4 ,
2880 l1clk_pm3 ,
2881 l1clk_pm2 ,
2882 l1clk_pm1 }),
2883 .din (pret_req_in_ntt [3:0] ),
2884 .dout (ret_req [3:0] ),
2885 .siclk(siclk),
2886 .soclk(soclk)
2887);
2888
2889assign pfpd_req_in[3:0] =
2890 (({4 {fls_fpd_request}} & tid_dec_w[3:0]) | fpd_req[3:0]) &
2891 ~disrupting_req[3:0];
2892
2893assign fpd_req_in[3:0] =
2894 pfpd_req_in[3:0] & ~stb_wait[3:0];
2895
2896assign pfpd_req_in_ntt[3:0] =
2897 pfpd_req_in[3:0] & ~trap_taken1[3:0];
2898
2899tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fpd_req_lat (
2900 .scan_in(fpd_req_lat_scanin),
2901 .scan_out(fpd_req_lat_scanout),
2902 .l1clk ({l1clk_pm4 ,
2903 l1clk_pm3 ,
2904 l1clk_pm2 ,
2905 l1clk_pm1 }),
2906 .din (pfpd_req_in_ntt [3:0] ),
2907 .dout (fpd_req [3:0] ),
2908 .siclk(siclk),
2909 .soclk(soclk)
2910);
2911
2912assign psnn_req_in[3:0] =
2913 (({4 {fls_snn_request}} & tid_dec_w[3:0]) | snn_req[3:0]) &
2914 ~disrupting_req[3:0];
2915
2916assign snn_req_in[3:0] =
2917 psnn_req_in[3:0] & ~stb_wait[3:0];
2918
2919assign psnn_req_in_ntt[3:0] =
2920 psnn_req_in[3:0] & ~trap_taken1[3:0];
2921
2922tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 snn_req_lat (
2923 .scan_in(snn_req_lat_scanin),
2924 .scan_out(snn_req_lat_scanout),
2925 .l1clk ({l1clk_pm4 ,
2926 l1clk_pm3 ,
2927 l1clk_pm2 ,
2928 l1clk_pm1 }),
2929 .din (psnn_req_in_ntt [3:0] ),
2930 .dout (snn_req [3:0] ),
2931 .siclk(siclk),
2932 .soclk(soclk)
2933);
2934
2935assign psno_req_in[3:0] =
2936 (({4 {fls_sno_request}} & tid_dec_w[3:0]) | sno_req[3:0]) &
2937 ~disrupting_req[3:0];
2938
2939assign sno_req_in[3:0] =
2940 psno_req_in[3:0] & ~stb_wait[3:0];
2941
2942assign psno_req_in_ntt[3:0] =
2943 psno_req_in[3:0] & ~trap_taken1[3:0];
2944
2945tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 sno_req_lat (
2946 .scan_in(sno_req_lat_scanin),
2947 .scan_out(sno_req_lat_scanout),
2948 .l1clk ({l1clk_pm4 ,
2949 l1clk_pm3 ,
2950 l1clk_pm2 ,
2951 l1clk_pm1 }),
2952 .din (psno_req_in_ntt [3:0] ),
2953 .dout (sno_req [3:0] ),
2954 .siclk(siclk),
2955 .soclk(soclk)
2956);
2957
2958assign pfnn_req_in[3:0] =
2959 (({4 {fls_fnn_request}} & tid_dec_w[3:0]) | fnn_req[3:0]) &
2960 ~disrupting_req[3:0];
2961
2962assign fnn_req_in[3:0] =
2963 pfnn_req_in[3:0] & ~stb_wait[3:0];
2964
2965assign pfnn_req_in_ntt[3:0] =
2966 pfnn_req_in[3:0] & ~trap_taken1[3:0];
2967
2968tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fnn_req_lat (
2969 .scan_in(fnn_req_lat_scanin),
2970 .scan_out(fnn_req_lat_scanout),
2971 .l1clk ({l1clk_pm4 ,
2972 l1clk_pm3 ,
2973 l1clk_pm2 ,
2974 l1clk_pm1 }),
2975 .din (pfnn_req_in_ntt [3:0] ),
2976 .dout (fnn_req [3:0] ),
2977 .siclk(siclk),
2978 .soclk(soclk)
2979);
2980
2981assign pfno_req_in[3:0] =
2982 (({4 {fls_fno_request}} & tid_dec_w[3:0]) | fno_req[3:0]) &
2983 ~disrupting_req[3:0];
2984
2985assign fno_req_in[3:0] =
2986 pfno_req_in[3:0] & ~stb_wait[3:0];
2987
2988assign pfno_req_in_ntt[3:0] =
2989 pfno_req_in[3:0] & ~trap_taken1[3:0];
2990
2991tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fno_req_lat (
2992 .scan_in(fno_req_lat_scanin),
2993 .scan_out(fno_req_lat_scanout),
2994 .l1clk ({l1clk_pm4 ,
2995 l1clk_pm3 ,
2996 l1clk_pm2 ,
2997 l1clk_pm1 }),
2998 .din (pfno_req_in_ntt [3:0] ),
2999 .dout (fno_req [3:0] ),
3000 .siclk(siclk),
3001 .soclk(soclk)
3002);
3003
3004assign pclw_req_in[3:0] =
3005 (({4 {fls_clw_request}} & tid_dec_w[3:0]) | clw_req[3:0]) &
3006 ~disrupting_req[3:0];
3007
3008assign clw_req_in[3:0] =
3009 pclw_req_in[3:0] & ~stb_wait[3:0];
3010
3011assign pclw_req_in_ntt[3:0] =
3012 pclw_req_in[3:0] & ~trap_taken1[3:0];
3013
3014tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 clw_req_lat (
3015 .scan_in(clw_req_lat_scanin),
3016 .scan_out(clw_req_lat_scanout),
3017 .l1clk ({l1clk_pm4 ,
3018 l1clk_pm3 ,
3019 l1clk_pm2 ,
3020 l1clk_pm1 }),
3021 .din (pclw_req_in_ntt [3:0] ),
3022 .dout (clw_req [3:0] ),
3023 .siclk(siclk),
3024 .soclk(soclk)
3025);
3026
3027assign pdtm_req_in[3:0] =
3028 (fls_dtm_request[3:0] | dtm_req[3:0]) &
3029 ~disrupting_req[3:0];
3030
3031assign dtm_req_in[3:0] =
3032 pdtm_req_in[3:0] & ~stb_wait[3:0] &
3033 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3034 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3035
3036assign pdtm_req_in_ntt[3:0] =
3037 pdtm_req_in[3:0] & ~trap_taken2[3:0];
3038
3039tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dtm_req_lat (
3040 .scan_in(dtm_req_lat_scanin),
3041 .scan_out(dtm_req_lat_scanout),
3042 .l1clk ({l1clk_pm4 ,
3043 l1clk_pm3 ,
3044 l1clk_pm2 ,
3045 l1clk_pm1 }),
3046 .din (pdtm_req_in_ntt [3:0] ),
3047 .dout (dtm_req [3:0] ),
3048 .siclk(siclk),
3049 .soclk(soclk)
3050);
3051
3052assign pldf_req_in[3:0] =
3053 (({4 {fls_ldf_request}} & tid_dec_w[3:0]) | ldf_req[3:0]) &
3054 ~disrupting_req[3:0];
3055
3056assign ldf_req_in[3:0] =
3057 pldf_req_in[3:0] & ~stb_wait[3:0] &
3058 ~ill_req_in[3:0] & ~maa_req_in[3:0];
3059
3060assign pldf_req_in_ntt[3:0] =
3061 pldf_req_in[3:0] & ~trap_taken2[3:0];
3062
3063tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ldf_req_lat (
3064 .scan_in(ldf_req_lat_scanin),
3065 .scan_out(ldf_req_lat_scanout),
3066 .l1clk ({l1clk_pm4 ,
3067 l1clk_pm3 ,
3068 l1clk_pm2 ,
3069 l1clk_pm1 }),
3070 .din (pldf_req_in_ntt [3:0] ),
3071 .dout (ldf_req [3:0] ),
3072 .siclk(siclk),
3073 .soclk(soclk)
3074);
3075
3076assign pstf_req_in[3:0] =
3077 (({4 {fls_stf_request}} & tid_dec_w[3:0]) | stf_req[3:0]) &
3078 ~disrupting_req[3:0];
3079
3080assign stf_req_in[3:0] =
3081 pstf_req_in[3:0] & ~stb_wait[3:0] &
3082 ~ill_req_in[3:0] & ~maa_req_in[3:0];
3083
3084assign pstf_req_in_ntt[3:0] =
3085 pstf_req_in[3:0] & ~trap_taken2[3:0];
3086
3087tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 stf_req_lat (
3088 .scan_in(stf_req_lat_scanin),
3089 .scan_out(stf_req_lat_scanout),
3090 .l1clk ({l1clk_pm4 ,
3091 l1clk_pm3 ,
3092 l1clk_pm2 ,
3093 l1clk_pm1 }),
3094 .din (pstf_req_in_ntt [3:0] ),
3095 .dout (stf_req [3:0] ),
3096 .siclk(siclk),
3097 .soclk(soclk)
3098);
3099
3100assign pdap_req_in[3:0] =
3101 (({4 {fls_dap_request}} & tid_dec_w[3:0]) | dap_req[3:0]) &
3102 ~disrupting_req[3:0];
3103
3104assign dap_req_in[3:0] =
3105 pdap_req_in[3:0] & ~stb_wait[3:0] &
3106 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3107 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3108
3109assign pdap_req_in_ntt[3:0] =
3110 pdap_req_in[3:0] & ~trap_taken2[3:0];
3111
3112tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dap_req_lat (
3113 .scan_in(dap_req_lat_scanin),
3114 .scan_out(dap_req_lat_scanout),
3115 .l1clk ({l1clk_pm4 ,
3116 l1clk_pm3 ,
3117 l1clk_pm2 ,
3118 l1clk_pm1 }),
3119 .din (pdap_req_in_ntt [3:0] ),
3120 .dout (dap_req [3:0] ),
3121 .siclk(siclk),
3122 .soclk(soclk)
3123);
3124
3125assign pvaw_req_in[3:0] =
3126 (({4 {fls_vaw_request}} & tid_dec_w[3:0]) | vaw_req[3:0]) &
3127 ~disrupting_req[3:0];
3128
3129assign vaw_req_in[3:0] =
3130 pvaw_req_in[3:0] & ~stb_wait[3:0];
3131
3132assign pvaw_req_in_ntt[3:0] =
3133 pvaw_req_in[3:0] & ~trap_taken2[3:0];
3134
3135tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 vaw_req_lat (
3136 .scan_in(vaw_req_lat_scanin),
3137 .scan_out(vaw_req_lat_scanout),
3138 .l1clk ({l1clk_pm4 ,
3139 l1clk_pm3 ,
3140 l1clk_pm2 ,
3141 l1clk_pm1 }),
3142 .din (pvaw_req_in_ntt [3:0] ),
3143 .dout (vaw_req [3:0] ),
3144 .siclk(siclk),
3145 .soclk(soclk)
3146);
3147
3148assign piaw_req_in[3:0] =
3149 (({4 {fls_iaw_request}} & tid_dec_w[3:0]) | iaw_req[3:0]) &
3150 ~disrupting_req[3:0];
3151
3152assign iaw_req_in[3:0] =
3153 piaw_req_in[3:0] & ~stb_wait[3:0];
3154
3155assign piaw_req_in_ntt[3:0] =
3156 piaw_req_in[3:0] & ~trap_taken2[3:0];
3157
3158tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 iaw_req_lat (
3159 .scan_in(iaw_req_lat_scanin),
3160 .scan_out(iaw_req_lat_scanout),
3161 .l1clk ({l1clk_pm4 ,
3162 l1clk_pm3 ,
3163 l1clk_pm2 ,
3164 l1clk_pm1 }),
3165 .din (piaw_req_in_ntt [3:0] ),
3166 .dout (iaw_req [3:0] ),
3167 .siclk(siclk),
3168 .soclk(soclk)
3169);
3170
3171assign ppaw_req_in[3:0] =
3172 (({4 {fls_paw_request}} & tid_dec_w[3:0]) | paw_req[3:0]) &
3173 ~disrupting_req[3:0];
3174
3175assign paw_req_in[3:0] =
3176 ppaw_req_in[3:0] & ~stb_wait[3:0];
3177
3178assign ppaw_req_in_ntt[3:0] =
3179 ppaw_req_in[3:0] & ~trap_taken2[3:0];
3180
3181tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 paw_req_lat (
3182 .scan_in(paw_req_lat_scanin),
3183 .scan_out(paw_req_lat_scanout),
3184 .l1clk ({l1clk_pm4 ,
3185 l1clk_pm3 ,
3186 l1clk_pm2 ,
3187 l1clk_pm1 }),
3188 .din (ppaw_req_in_ntt [3:0] ),
3189 .dout (paw_req [3:0] ),
3190 .siclk(siclk),
3191 .soclk(soclk)
3192);
3193
3194assign pmaa_req_in[3:0] =
3195 (({4 {fls_maa_request}} & tid_dec_w[3:0]) | maa_req[3:0]) &
3196 ~disrupting_req[3:0];
3197
3198assign maa_req_in[3:0] =
3199 pmaa_req_in[3:0] & ~stb_wait[3:0] &
3200 ~ill_req_in[3:0];
3201assign pmaa_req_in_ntt[3:0] =
3202 pmaa_req_in[3:0] & ~trap_taken2[3:0];
3203
3204
3205tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 maa_req_lat (
3206 .scan_in(maa_req_lat_scanin),
3207 .scan_out(maa_req_lat_scanout),
3208 .l1clk ({l1clk_pm4 ,
3209 l1clk_pm3 ,
3210 l1clk_pm2 ,
3211 l1clk_pm1 }),
3212 .din (pmaa_req_in_ntt [3:0] ),
3213 .dout (maa_req [3:0] ),
3214 .siclk(siclk),
3215 .soclk(soclk)
3216);
3217
3218assign fpx_tid_dec_fw[3:0] =
3219 {4 {thread_group == fgu_fpx_trap_tid_fw[2]}} &
3220 { fgu_fpx_trap_tid_fw[1] & fgu_fpx_trap_tid_fw[0],
3221 fgu_fpx_trap_tid_fw[1] & ~fgu_fpx_trap_tid_fw[0],
3222 ~fgu_fpx_trap_tid_fw[1] & fgu_fpx_trap_tid_fw[0],
3223 ~fgu_fpx_trap_tid_fw[1] & ~fgu_fpx_trap_tid_fw[0]};
3224
3225assign fpd_tid_dec_fw[3:0] =
3226 {4 {thread_group == fgu_fpd_trap_tid_fw[2]}} &
3227 { fgu_fpd_trap_tid_fw[1] & fgu_fpd_trap_tid_fw[0],
3228 fgu_fpd_trap_tid_fw[1] & ~fgu_fpd_trap_tid_fw[0],
3229 ~fgu_fpd_trap_tid_fw[1] & fgu_fpd_trap_tid_fw[0],
3230 ~fgu_fpd_trap_tid_fw[1] & ~fgu_fpd_trap_tid_fw[0]};
3231
3232assign fei_or_fof_incoming[3:0] =
3233 ({4 {fgu_fpx_ieee_trap_fw | fgu_fpx_unfin_fw}} & fpx_tid_dec_fw[3:0]) |
3234 ({4 {fgu_fpd_ieee_trap_fw | fgu_fpd_unfin_fw}} & fpd_tid_dec_fw[3:0]) ;
3235
3236// Have to kill FP predicted exception redirect in the event the actual
3237// exception catches up with it
3238// dbz is not predicted
3239assign pfpe_req_in[3:0] =
3240 (({4 {fls_fpe_request}} & tid_dec_w[3:0]) | fpe_req[3:0]) &
3241 ~disrupting_req[3:0] &
3242 ~fei_or_fof_incoming[3:0];
3243
3244assign fpe_req_in[3:0] =
3245 pfpe_req_in[3:0];
3246
3247assign pfpe_req_in_ntt[3:0] =
3248 pfpe_req_in[3:0] & ~trap_taken2[3:0];
3249
3250tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fpe_req_lat (
3251 .scan_in(fpe_req_lat_scanin),
3252 .scan_out(fpe_req_lat_scanout),
3253 .l1clk ({l1clk_pm4 ,
3254 l1clk_pm3 ,
3255 l1clk_pm2 ,
3256 l1clk_pm1 }),
3257 .din (pfpe_req_in_ntt [3:0] ),
3258 .dout (fpe_req [3:0] ),
3259 .siclk(siclk),
3260 .soclk(soclk)
3261);
3262
3263assign pfei_req_in[3:0] =
3264 (fls_fei_request[3:0] | fei_req[3:0]) &
3265 ~disrupting_req[3:0];
3266
3267assign fei_req_in[3:0] =
3268 pfei_req_in[3:0] & ~stb_wait[3:0];
3269
3270assign pfei_req_in_ntt[3:0] =
3271 pfei_req_in[3:0] &
3272 (~trap_taken2[3:0] | {4 {take_fpe_last | take_lsr_nns_last}});
3273
3274tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fei_req_lat (
3275 .scan_in(fei_req_lat_scanin),
3276 .scan_out(fei_req_lat_scanout),
3277 .l1clk ({l1clk_pm4 ,
3278 l1clk_pm3 ,
3279 l1clk_pm2 ,
3280 l1clk_pm1 }),
3281 .din (pfei_req_in_ntt [3:0] ),
3282 .dout (fei_req [3:0] ),
3283 .siclk(siclk),
3284 .soclk(soclk)
3285);
3286
3287assign pfof_req_in[3:0] =
3288 (fls_fof_request[3:0] | fof_req[3:0]) &
3289 ~disrupting_req[3:0];
3290
3291assign fof_req_in[3:0] =
3292 pfof_req_in[3:0] & ~stb_wait[3:0];
3293
3294assign pfof_req_in_ntt[3:0] =
3295 pfof_req_in[3:0] &
3296 (~trap_taken2[3:0] | {4 {take_fpe_last | take_lsr_nns_last}});
3297
3298tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fof_req_lat (
3299 .scan_in(fof_req_lat_scanin),
3300 .scan_out(fof_req_lat_scanout),
3301 .l1clk ({l1clk_pm4 ,
3302 l1clk_pm3 ,
3303 l1clk_pm2 ,
3304 l1clk_pm1 }),
3305 .din (pfof_req_in_ntt [3:0] ),
3306 .dout (fof_req [3:0] ),
3307 .siclk(siclk),
3308 .soclk(soclk)
3309);
3310
3311assign ppra_req_in[3:0] =
3312 (fls_pra_request[3:0] | pra_req[3:0]) &
3313 ~disrupting_req[3:0];
3314
3315assign pra_req_in[3:0] =
3316 ppra_req_in[3:0] & ~stb_wait[3:0] &
3317 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3318 ~stf_req_in[3:0];
3319
3320assign ppra_req_in_ntt[3:0] =
3321 ppra_req_in[3:0] & ~(trap_taken1[3:0] & ~{4 {take_lsr_last}});
3322
3323tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 pra_req_lat (
3324 .scan_in(pra_req_lat_scanin),
3325 .scan_out(pra_req_lat_scanout),
3326 .l1clk ({l1clk_pm4 ,
3327 l1clk_pm3 ,
3328 l1clk_pm2 ,
3329 l1clk_pm1 }),
3330 .din (ppra_req_in_ntt [3:0] ),
3331 .dout (pra_req [3:0] ),
3332 .siclk(siclk),
3333 .soclk(soclk)
3334);
3335
3336assign pdia_req_in[3:0] =
3337 (({4 {fls_dia_request}} & tid_dec_w[3:0]) | dia_req[3:0]) &
3338 ~disrupting_req[3:0];
3339
3340assign dia_req_in[3:0] =
3341 pdia_req_in[3:0] & ~stb_wait[3:0] &
3342 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3343 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3344
3345assign pdia_req_in_ntt[3:0] =
3346 pdia_req_in[3:0] & ~trap_taken2[3:0];
3347
3348tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dia_req_lat (
3349 .scan_in(dia_req_lat_scanin),
3350 .scan_out(dia_req_lat_scanout),
3351 .l1clk ({l1clk_pm4 ,
3352 l1clk_pm3 ,
3353 l1clk_pm2 ,
3354 l1clk_pm1 }),
3355 .din (pdia_req_in_ntt [3:0] ),
3356 .dout (dia_req [3:0] ),
3357 .siclk(siclk),
3358 .soclk(soclk)
3359);
3360
3361assign pups_req_in[3:0] =
3362 (fls_ups_request[3:0] | ups_req[3:0]) &
3363 ~disrupting_req[3:0];
3364
3365assign ups_req_in[3:0] =
3366 pups_req_in[3:0] & ~stb_wait[3:0] &
3367 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3368 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3369
3370assign pups_req_in_ntt[3:0] =
3371 pups_req_in[3:0] & ~trap_taken2[3:0];
3372
3373tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ups_req_lat (
3374 .scan_in(ups_req_lat_scanin),
3375 .scan_out(ups_req_lat_scanout),
3376 .l1clk ({l1clk_pm4 ,
3377 l1clk_pm3 ,
3378 l1clk_pm2 ,
3379 l1clk_pm1 }),
3380 .din (pups_req_in_ntt [3:0] ),
3381 .dout (ups_req [3:0] ),
3382 .siclk(siclk),
3383 .soclk(soclk)
3384);
3385
3386assign pdpv_req_in[3:0] =
3387 (({4 {fls_dpv_request}} & tid_dec_w[3:0]) | dpv_req[3:0]) &
3388 ~disrupting_req[3:0];
3389
3390assign dpv_req_in[3:0] =
3391 pdpv_req_in[3:0] & ~stb_wait[3:0] &
3392 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3393 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3394
3395assign pdpv_req_in_ntt[3:0] =
3396 pdpv_req_in[3:0] & ~trap_taken2[3:0];
3397
3398tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dpv_req_lat (
3399 .scan_in(dpv_req_lat_scanin),
3400 .scan_out(dpv_req_lat_scanout),
3401 .l1clk ({l1clk_pm4 ,
3402 l1clk_pm3 ,
3403 l1clk_pm2 ,
3404 l1clk_pm1 }),
3405 .din (pdpv_req_in_ntt [3:0] ),
3406 .dout (dpv_req [3:0] ),
3407 .siclk(siclk),
3408 .soclk(soclk)
3409);
3410
3411assign pdnc_req_in[3:0] =
3412 (({4 {fls_dnc_request}} & tid_dec_w[3:0]) | dnc_req[3:0]) &
3413 ~disrupting_req[3:0];
3414
3415assign dnc_req_in[3:0] =
3416 pdnc_req_in[3:0] & ~stb_wait[3:0] &
3417 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3418 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3419
3420assign pdnc_req_in_ntt[3:0] =
3421 pdnc_req_in[3:0] & ~trap_taken2[3:0];
3422
3423tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dnc_req_lat (
3424 .scan_in(dnc_req_lat_scanin),
3425 .scan_out(dnc_req_lat_scanout),
3426 .l1clk ({l1clk_pm4 ,
3427 l1clk_pm3 ,
3428 l1clk_pm2 ,
3429 l1clk_pm1 }),
3430 .din (pdnc_req_in_ntt [3:0] ),
3431 .dout (dnc_req [3:0] ),
3432 .siclk(siclk),
3433 .soclk(soclk)
3434);
3435
3436assign pdnf_req_in[3:0] =
3437 (({4 {fls_dnf_request}} & tid_dec_w[3:0]) | dnf_req[3:0]) &
3438 ~disrupting_req[3:0];
3439
3440assign dnf_req_in[3:0] =
3441 pdnf_req_in[3:0] & ~stb_wait[3:0] &
3442 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3443 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3444
3445assign pdnf_req_in_ntt[3:0] =
3446 pdnf_req_in[3:0] & ~trap_taken2[3:0];
3447
3448tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dnf_req_lat (
3449 .scan_in(dnf_req_lat_scanin),
3450 .scan_out(dnf_req_lat_scanout),
3451 .l1clk ({l1clk_pm4 ,
3452 l1clk_pm3 ,
3453 l1clk_pm2 ,
3454 l1clk_pm1 }),
3455 .din (pdnf_req_in_ntt [3:0] ),
3456 .dout (dnf_req [3:0] ),
3457 .siclk(siclk),
3458 .soclk(soclk)
3459);
3460
3461assign pdso_req_in[3:0] =
3462 (({4 {fls_dso_request}} & tid_dec_w[3:0]) | dso_req[3:0]) &
3463 ~disrupting_req[3:0];
3464
3465assign dso_req_in[3:0] =
3466 pdso_req_in[3:0] & ~stb_wait[3:0] &
3467 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3468 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3469
3470assign pdso_req_in_ntt[3:0] =
3471 pdso_req_in[3:0] & ~trap_taken2[3:0];
3472
3473tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dso_req_lat (
3474 .scan_in(dso_req_lat_scanin),
3475 .scan_out(dso_req_lat_scanout),
3476 .l1clk ({l1clk_pm4 ,
3477 l1clk_pm3 ,
3478 l1clk_pm2 ,
3479 l1clk_pm1 }),
3480 .din (pdso_req_in_ntt [3:0] ),
3481 .dout (dso_req [3:0] ),
3482 .siclk(siclk),
3483 .soclk(soclk)
3484);
3485
3486assign ptof_req_in[3:0] =
3487 (({4 {fls_tof_request}} & tid_dec_w[3:0]) | tof_req[3:0]) &
3488 ~disrupting_req[3:0];
3489
3490assign tof_req_in[3:0] =
3491 ptof_req_in[3:0] & ~stb_wait[3:0];
3492
3493assign ptof_req_in_ntt[3:0] =
3494 ptof_req_in[3:0] & ~trap_taken2[3:0];
3495
3496tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 tof_req_lat (
3497 .scan_in(tof_req_lat_scanin),
3498 .scan_out(tof_req_lat_scanout),
3499 .l1clk ({l1clk_pm4 ,
3500 l1clk_pm3 ,
3501 l1clk_pm2 ,
3502 l1clk_pm1 }),
3503 .din (ptof_req_in_ntt [3:0] ),
3504 .dout (tof_req [3:0] ),
3505 .siclk(siclk),
3506 .soclk(soclk)
3507);
3508
3509assign pdbz_req_in[3:0] =
3510 (fls_dbz_request[3:0] | dbz_req[3:0]) &
3511 ~disrupting_req[3:0];
3512
3513assign dbz_req_in[3:0] =
3514 pdbz_req_in[3:0] & ~stb_wait[3:0];
3515
3516assign pdbz_req_in_ntt[3:0] =
3517 pdbz_req_in[3:0] &
3518 (~trap_taken2[3:0] | {4 {take_lsr_nns_last}});
3519
3520tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dbz_req_lat (
3521 .scan_in(dbz_req_lat_scanin),
3522 .scan_out(dbz_req_lat_scanout),
3523 .l1clk ({l1clk_pm4 ,
3524 l1clk_pm3 ,
3525 l1clk_pm2 ,
3526 l1clk_pm1 }),
3527 .din (pdbz_req_in_ntt [3:0] ),
3528 .dout (dbz_req [3:0] ),
3529 .siclk(siclk),
3530 .soclk(soclk)
3531);
3532
3533assign tcc_h[3:0] =
3534 {fls_tcc_number_3[7], fls_tcc_number_2[7],
3535 fls_tcc_number_1[7], fls_tcc_number_0[7]};
3536
3537assign ptcc_req_in[3:0] =
3538 (({4 {fls_tcc_request}} & tid_dec_w[3:0]) | tcc_req[3:0]) &
3539 ~disrupting_req[3:0];
3540
3541assign tcc_req_in[3:0] =
3542 ptcc_req_in[3:0] &
3543 ((~stb_wait[3:0] & tcc_h[3:0]) |
3544 (~stb_wait[3:0] & ~tcc_h[3:0]));
3545
3546assign ptcc_req_in_ntt[3:0] =
3547 ptcc_req_in[3:0] & ~trap_taken3[3:0];
3548
3549tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 tcc_req_lat (
3550 .scan_in(tcc_req_lat_scanin),
3551 .scan_out(tcc_req_lat_scanout),
3552 .l1clk ({l1clk_pm4 ,
3553 l1clk_pm3 ,
3554 l1clk_pm2 ,
3555 l1clk_pm1 }),
3556 .din (ptcc_req_in_ntt [3:0] ),
3557 .dout (tcc_req [3:0] ),
3558 .siclk(siclk),
3559 .soclk(soclk)
3560);
3561
3562assign pdae_req_in[3:0] =
3563 (fls_dae_request[3:0] | dae_req[3:0]) &
3564 ~disrupting_req[3:0];
3565
3566assign dae_req_in[3:0] =
3567 pdae_req_in[3:0] & stb_empty[3:0] &
3568 ~ill_req_in[3:0] & ~maa_req_in[3:0] & ~ldf_req_in[3:0] &
3569 ~stf_req_in[3:0] & ~pra_req_in[3:0] ;
3570
3571assign pdae_req_in_ntt[3:0] =
3572 pdae_req_in[3:0] & ~trap_taken3[3:0];
3573
3574tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dae_req_lat (
3575 .scan_in(dae_req_lat_scanin),
3576 .scan_out(dae_req_lat_scanout),
3577 .l1clk ({l1clk_pm4 ,
3578 l1clk_pm3 ,
3579 l1clk_pm2 ,
3580 l1clk_pm1 }),
3581 .din (pdae_req_in_ntt [3:0] ),
3582 .dout (dae_req [3:0] ),
3583 .siclk(siclk),
3584 .soclk(soclk)
3585);
3586
3587// Have to kill LSR exception redirect in the event an FPOP
3588// exception catches up with it
3589assign dbz_incoming[3:0] =
3590 {4 {fgu_fpd_idiv0_trap_fw}} & fpx_tid_dec_fw[3:0];
3591
3592assign plsr_req_in[3:0] =
3593 (fls_lsr_request[3:0] | lsr_req[3:0]) &
3594 ~((trap_taken3[3:0] & {4 {take_lsr_last | take_fpe_last}}) |
3595 real_trap_last[3:0] | fei_or_fof_incoming[3:0] |
3596 ({4 {fls_fpd_request}} & tid_dec_w[3:0]) | dbz_incoming[3:0]) &
3597 ~disrupting_req[3:0];
3598
3599assign lsr_req_in[3:0] =
3600 plsr_req_in[3:0] & ~itw_req[3:0];
3601
3602tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 lsr_req_lat (
3603 .scan_in(lsr_req_lat_scanin),
3604 .scan_out(lsr_req_lat_scanout),
3605 .l1clk ({l1clk_pm4 ,
3606 l1clk_pm3 ,
3607 l1clk_pm2 ,
3608 l1clk_pm1 }),
3609 .din (plsr_req_in [3:0] ),
3610 .dout (lsr_req [3:0] ),
3611 .siclk(siclk),
3612 .soclk(soclk)
3613);
3614
3615assign pirt_req_in[3:0] =
3616 (({4 {fls_irt_request}} & tid_dec_w[3:0]) | irt_req[3:0]) &
3617 ~disrupting_req[3:0];
3618
3619assign irt_req_in[3:0] =
3620 pirt_req_in[3:0] & ~stb_wait[3:0] &
3621 ~tlz_req_in[3:0] & ~pmu_req_in[3:0];
3622
3623assign pirt_req_in_ntt[3:0] =
3624 pirt_req_in[3:0] & ~trap_taken3[3:0];
3625
3626tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 irt_req_lat (
3627 .scan_in(irt_req_lat_scanin),
3628 .scan_out(irt_req_lat_scanout),
3629 .l1clk ({l1clk_pm4 ,
3630 l1clk_pm3 ,
3631 l1clk_pm2 ,
3632 l1clk_pm1 }),
3633 .din (pirt_req_in_ntt [3:0] ),
3634 .dout (irt_req [3:0] ),
3635 .siclk(siclk),
3636 .soclk(soclk)
3637);
3638
3639assign pdrt_req_in[3:0] =
3640 (({4 {fls_drt_request}} & tid_dec_w[3:0]) | drt_req[3:0]) &
3641 ~disrupting_req[3:0];
3642
3643assign drt_req_in[3:0] =
3644 pdrt_req_in[3:0] & ~stb_wait[3:0];
3645
3646assign pdrt_req_in_ntt[3:0] =
3647 pdrt_req_in[3:0] & ~trap_taken3[3:0];
3648
3649tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 drt_req_lat (
3650 .scan_in(drt_req_lat_scanin),
3651 .scan_out(drt_req_lat_scanout),
3652 .l1clk ({l1clk_pm4 ,
3653 l1clk_pm3 ,
3654 l1clk_pm2 ,
3655 l1clk_pm1 }),
3656 .din (pdrt_req_in_ntt [3:0] ),
3657 .dout (drt_req [3:0] ),
3658 .siclk(siclk),
3659 .soclk(soclk)
3660);
3661
3662tlu_trl_ctl_msff_ctl_macro__width_4 d_tte_outofrange_lat (
3663 .scan_in(d_tte_outofrange_lat_scanin),
3664 .scan_out(d_tte_outofrange_lat_scanout),
3665 .din (mmu_d_tte_outofrange [3:0] ),
3666 .dout (d_tte_outofrange [3:0] ),
3667 .l1clk(l1clk),
3668 .siclk(siclk),
3669 .soclk(soclk)
3670);
3671
3672assign pdit_req_in[3:0] =
3673 (d_tte_outofrange[3:0] | dit_req[3:0]) &
3674 ~disrupting_req[3:0];
3675
3676assign dit_req_in[3:0] =
3677 pdit_req_in[3:0] & ~stb_wait[3:0];
3678
3679assign pdit_req_in_ntt[3:0] =
3680 pdit_req_in[3:0] & ~trap_taken3[3:0];
3681
3682tlu_trl_ctl_msff_ctl_macro__width_4 dit_req_lat (
3683 .scan_in(dit_req_lat_scanin),
3684 .scan_out(dit_req_lat_scanout),
3685 .din (pdit_req_in_ntt [3:0] ),
3686 .dout (dit_req [3:0] ),
3687 .l1clk(l1clk),
3688 .siclk(siclk),
3689 .soclk(soclk)
3690);
3691
3692assign ppmu_req_in[3:0] =
3693 (fls_pmu_request[3:0] | pmu_req[3:0]) &
3694 ~disrupting_req[3:0];
3695
3696assign pmu_req_in[3:0] =
3697 ppmu_req_in[3:0] & ~stb_wait[3:0] &
3698 ~tlz_req_in[3:0];
3699
3700assign ppmu_req_in_ntt[3:0] =
3701 ppmu_req_in[3:0] & ~trap_taken3[3:0];
3702
3703tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 pmu_req_lat (
3704 .scan_in(pmu_req_lat_scanin),
3705 .scan_out(pmu_req_lat_scanout),
3706 .l1clk ({l1clk_pm4 ,
3707 l1clk_pm3 ,
3708 l1clk_pm2 ,
3709 l1clk_pm1 }),
3710 .din (ppmu_req_in_ntt [3:0] ),
3711 .dout (pmu_req [3:0] ),
3712 .siclk(siclk),
3713 .soclk(soclk)
3714);
3715
3716assign pime_req_in[3:0] =
3717 (fls_ime_request[3:0] | ime_req[3:0]) &
3718 ~disrupting_req[3:0];
3719
3720assign ime_req_in[3:0] =
3721 pime_req_in[3:0] & stb_empty[3:0];
3722
3723assign pime_req_in_ntt[3:0] =
3724 pime_req_in[3:0] & ~trap_taken3[3:0];
3725
3726tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ime_req_lat (
3727 .scan_in(ime_req_lat_scanin),
3728 .scan_out(ime_req_lat_scanout),
3729 .l1clk ({l1clk_pm4 ,
3730 l1clk_pm3 ,
3731 l1clk_pm2 ,
3732 l1clk_pm1 }),
3733 .din (pime_req_in_ntt [3:0] ),
3734 .dout (ime_req [3:0] ),
3735 .siclk(siclk),
3736 .soclk(soclk)
3737);
3738
3739
3740assign pdme_req_in[3:0] =
3741 (fls_dme_request[3:0] | dme_req[3:0]) &
3742 ~disrupting_req[3:0];
3743
3744assign dme_req_in[3:0] =
3745 pdme_req_in[3:0] & stb_empty[3:0];
3746
3747assign pdme_req_in_ntt[3:0] =
3748 pdme_req_in[3:0] & ~trap_taken3[3:0];
3749
3750tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 dme_req_lat (
3751 .scan_in(dme_req_lat_scanin),
3752 .scan_out(dme_req_lat_scanout),
3753 .l1clk ({l1clk_pm4 ,
3754 l1clk_pm3 ,
3755 l1clk_pm2 ,
3756 l1clk_pm1 }),
3757 .din (pdme_req_in_ntt [3:0] ),
3758 .dout (dme_req [3:0] ),
3759 .siclk(siclk),
3760 .soclk(soclk)
3761);
3762
3763tlu_trl_ctl_msff_ctl_macro__width_4 write_itlb_lat (
3764 .scan_in(write_itlb_lat_scanin),
3765 .scan_out(write_itlb_lat_scanout),
3766 .din (mmu_write_itlb [3:0] ),
3767 .dout (write_itlb [3:0] ),
3768 .l1clk(l1clk),
3769 .siclk(siclk),
3770 .soclk(soclk)
3771);
3772
3773assign pitw_req_in[3:0] =
3774 (write_itlb[3:0] | itw_req[3:0]) &
3775 ~({4 {take_itw_last}} & trap_taken3[3:0]) &
3776 ~disrupting_req[3:0];
3777
3778// Thread group 1 waits for thread group 0 to complete all writes to ITLB
3779// Must be two cycles between ITLB writes
3780assign itw_req_in[3:0] =
3781 pitw_req_in[3:0] &
3782 {4 {~trlx_itw_wait & ~trlx_itw_last}};
3783
3784tlu_trl_ctl_msff_ctl_macro__width_4 itw_req_lat (
3785 .scan_in(itw_req_lat_scanin),
3786 .scan_out(itw_req_lat_scanout),
3787 .din (pitw_req_in [3:0] ),
3788 .dout (itw_req [3:0] ),
3789 .l1clk(l1clk),
3790 .siclk(siclk),
3791 .soclk(soclk)
3792);
3793
3794assign trl_itw_wait =
3795 (| {itw_req[3:0], write_itlb[3:0]});
3796
3797assign trl_itw_last =
3798 take_itw_last;
3799
3800tlu_trl_ctl_msff_ctl_macro__width_4 reload_done_lat (
3801 .scan_in(reload_done_lat_scanin),
3802 .scan_out(reload_done_lat_scanout),
3803 .din (mmu_reload_done[3:0] ),
3804 .dout (reload_done [3:0] ),
3805 .l1clk(l1clk),
3806 .siclk(siclk),
3807 .soclk(soclk)
3808);
3809
3810assign phtd_req_in[3:0] =
3811 (((reload_done[3:0] | htd_req[3:0]) & ~pssr_req_in[3:0]) |
3812 ({4 {fls_ref_request}} & tid_dec_w[3:0])) &
3813 ~({4 {take_htd_last}} & trap_taken3[3:0]) & ~disrupting_req[3:0];
3814
3815assign htd_req_in[3:0] =
3816 phtd_req_in[3:0] & ~itw_req[3:0];
3817
3818tlu_trl_ctl_msff_ctl_macro__width_4 htd_req_lat (
3819 .scan_in(htd_req_lat_scanin),
3820 .scan_out(htd_req_lat_scanout),
3821 .din (phtd_req_in [3:0] ),
3822 .dout (htd_req [3:0] ),
3823 .l1clk(l1clk),
3824 .siclk(siclk),
3825 .soclk(soclk)
3826);
3827
3828tlu_trl_ctl_msff_ctl_macro__width_4 i_tsb_miss_lat (
3829 .scan_in(i_tsb_miss_lat_scanin),
3830 .scan_out(i_tsb_miss_lat_scanout),
3831 .din (mmu_i_tsb_miss [3:0] ),
3832 .dout (i_tsb_miss [3:0] ),
3833 .l1clk(l1clk),
3834 .siclk(siclk),
3835 .soclk(soclk)
3836);
3837
3838assign phim_req_in[3:0] =
3839 (i_tsb_miss[3:0] | him_req[3:0]) &
3840 ~disrupting_req[3:0];
3841
3842assign him_req_in[3:0] =
3843 phim_req_in[3:0] & ~stb_wait[3:0];
3844
3845assign phim_req_in_ntt[3:0] =
3846 phim_req_in[3:0] & ~trap_taken3[3:0];
3847
3848tlu_trl_ctl_msff_ctl_macro__width_4 him_req_lat (
3849 .scan_in(him_req_lat_scanin),
3850 .scan_out(him_req_lat_scanout),
3851 .din (phim_req_in_ntt [3:0] ),
3852 .dout (him_req [3:0] ),
3853 .l1clk(l1clk),
3854 .siclk(siclk),
3855 .soclk(soclk)
3856);
3857
3858
3859tlu_trl_ctl_msff_ctl_macro__width_4 d_tsb_miss_lat (
3860 .scan_in(d_tsb_miss_lat_scanin),
3861 .scan_out(d_tsb_miss_lat_scanout),
3862 .din (mmu_d_tsb_miss [3:0] ),
3863 .dout (d_tsb_miss [3:0] ),
3864 .l1clk(l1clk),
3865 .siclk(siclk),
3866 .soclk(soclk)
3867);
3868
3869assign phdm_req_in[3:0] =
3870 (d_tsb_miss[3:0] | hdm_req[3:0]) &
3871 ~disrupting_req[3:0];
3872
3873assign hdm_req_in[3:0] =
3874 phdm_req_in[3:0] & ~stb_wait[3:0];
3875
3876assign phdm_req_in_ntt[3:0] =
3877 phdm_req_in[3:0] & ~trap_taken3[3:0];
3878
3879tlu_trl_ctl_msff_ctl_macro__width_4 hdm_req_lat (
3880 .scan_in(hdm_req_lat_scanin),
3881 .scan_out(hdm_req_lat_scanout),
3882 .din (phdm_req_in_ntt [3:0] ),
3883 .dout (hdm_req [3:0] ),
3884 .l1clk(l1clk),
3885 .siclk(siclk),
3886 .soclk(soclk)
3887);
3888
3889assign pibp_req_in[3:0] =
3890 (({4 {fls_ibp_request}} & tid_dec_w[3:0]) | ibp_req[3:0]) &
3891 ~disrupting_req[3:0];
3892
3893assign ibp_req_in[3:0] =
3894 pibp_req_in[3:0] & ~stb_wait[3:0] &
3895 ~tlz_req_in[3:0];
3896
3897assign pibp_req_in_ntt[3:0] =
3898 pibp_req_in[3:0] & ~trap_taken3[3:0];
3899
3900tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 ibp_req_lat (
3901 .scan_in(ibp_req_lat_scanin),
3902 .scan_out(ibp_req_lat_scanout),
3903 .l1clk ({l1clk_pm4 ,
3904 l1clk_pm3 ,
3905 l1clk_pm2 ,
3906 l1clk_pm1 }),
3907 .din (pibp_req_in_ntt [3:0] ),
3908 .dout (ibp_req [3:0] ),
3909 .siclk(siclk),
3910 .soclk(soclk)
3911);
3912
3913assign ptct_req_in[3:0] =
3914 (({4 {fls_tct_request}} & tid_dec_w[3:0]) | tct_req[3:0]) &
3915 ~disrupting_req[3:0];
3916
3917assign tct_req_in[3:0] =
3918 ptct_req_in[3:0] & ~stb_wait[3:0] &
3919 ~tlz_req_in[3:0];
3920
3921assign ptct_req_in_ntt[3:0] =
3922 ptct_req_in[3:0] & ~trap_taken3[3:0];
3923
3924tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 tct_req_lat (
3925 .scan_in(tct_req_lat_scanin),
3926 .scan_out(tct_req_lat_scanout),
3927 .l1clk ({l1clk_pm4 ,
3928 l1clk_pm3 ,
3929 l1clk_pm2 ,
3930 l1clk_pm1 }),
3931 .din (ptct_req_in_ntt [3:0] ),
3932 .dout (tct_req [3:0] ),
3933 .siclk(siclk),
3934 .soclk(soclk)
3935);
3936
3937
3938
3939
3940////////////////////////////////////////////////////////////////////////////////
3941// Categorize requests
3942
3943assign reset_category[3:0] =
3944 (por_req_in[3:0] | xir_req_in[3:0] | sir_req_in[3:0] ) &
3945 ~trap_ndr[3:0] & ~trap_taken5[3:0];
3946
3947assign disrupt_category[3:0] =
3948 (ade_req_in[3:0] | iln_req_in[3:0] |
3949 hst_req_in[3:0] | tlz_req_in[3:0] | sma_req_in[3:0] |
3950 cwq_req_in[3:0] | ivt_req_in[3:0] | mqr_req_in[3:0] |
3951 dqr_req_in[3:0] | rqr_req_in[3:0] | eer_req_in[3:0] |
3952 ftt_req_in[3:0] ) &
3953 ~trap_ndr[3:0] & ~trap_taken5[3:0];
3954
3955assign divide_category[3:0] =
3956 (dbz_req_in[3:0]) &
3957 ~trap_ndr[3:0] & ~trap_taken5[3:0];
3958
3959assign long_category[3:0] =
3960 dae_req_in[3:0] & ~trap_ndr[3:0] & ~trap_taken5[3:0];
3961
3962assign fgu_category[3:0] =
3963 (fei_req_in[3:0] | fof_req_in[3:0]) &
3964 ~trap_ndr[3:0] & ~trap_taken5[3:0];
3965
3966assign don_ret_category[3:0] =
3967 (don_req_in[3:0] | ret_req_in[3:0]) &
3968 ~trap[3:0] & (~trap_taken5[3:0] | {4 {hole_in_p}});
3969
3970assign notrap_category[3:0] =
3971 (htd_req_in[3:0] | fpe_req_in[3:0] | lsr_req_in[3:0] |
3972 res_req_in[3:0] | ssr_req_in[3:0] |
3973 nns_req_in[3:0] | icp_req_in[3:0]) &
3974 ~trap_ndr[3:0] & ~trap_taken5[3:0];
3975
3976assign itw_category[3:0] =
3977 itw_req_in[3:0] & ~trap_itw[3:0] & ~trap_itw_taken[3:0];
3978
3979assign other_category[3:0] =
3980 (iae_req_in[3:0] | ipv_req_in[3:0] | inp_req_in[3:0] |
3981 iua_req_in[3:0] | ipe_req_in[3:0] |
3982 iar_req_in[3:0] | irr_req_in[3:0] |
3983 mar_req_in[3:0] | mrr_req_in[3:0] |
3984 pro_req_in[3:0] |
3985 ill_req_in[3:0] | fpd_req_in[3:0] | snn_req_in[3:0] |
3986 sno_req_in[3:0] | fnn_req_in[3:0] | fno_req_in[3:0] |
3987 clw_req_in[3:0] | ldf_req_in[3:0] | stf_req_in[3:0] |
3988 dap_req_in[3:0] |
3989 vaw_req_in[3:0] | iaw_req_in[3:0] | paw_req_in[3:0] |
3990 maa_req_in[3:0] |
3991 pra_req_in[3:0] | dia_req_in[3:0] |
3992 ups_req_in[3:0] | dpv_req_in[3:0] |
3993 dnc_req_in[3:0] | dnf_req_in[3:0] | dso_req_in[3:0] |
3994 tof_req_in[3:0] | tcc_req_in[3:0] |
3995 itm_req_in[3:0] | dtm_req_in[3:0] | him_req_in[3:0] |
3996 hdm_req_in[3:0] | irt_req_in[3:0] | drt_req_in[3:0] |
3997 pmu_req_in[3:0] | ime_req_in[3:0] | dme_req_in[3:0] |
3998 ibp_req_in[3:0] | tct_req_in[3:0] |
3999 iit_req_in[3:0] | dit_req_in[3:0] ) &
4000 ~trap_ndr[3:0] & ~trap_taken5[3:0];
4001
4002
4003
4004////////////////////////////////////////////////////////////////////////////////
4005// Select thread within each category using static priority
4006
4007// POR resets cannot wait for store buffer to empty
4008assign reset_pre_trap_in[3:0] =
4009 {reset_category[3] & ~(| reset_category[2:0]),
4010 reset_category[2] & ~(| reset_category[1:0]),
4011 reset_category[1] & ~( reset_category[ 0]),
4012 reset_category[0]} & (stb_empty[3:0] | por_req_in[3:0]);
4013
4014assign disrupt_pre_trap_in[3:0] =
4015 {disrupt_category[3] & ~(| disrupt_category[2:0]),
4016 disrupt_category[2] & ~(| disrupt_category[1:0]),
4017 disrupt_category[1] & ~( disrupt_category[ 0]),
4018 disrupt_category[0]};
4019
4020assign divide_pre_trap_in[3:0] =
4021 {divide_category[3] & ~(| divide_category[2:0]),
4022 divide_category[2] & ~(| divide_category[1:0]),
4023 divide_category[1] & ~( divide_category[ 0]),
4024 divide_category[0]};
4025
4026assign long_pre_trap_in[3:0] =
4027 {long_category[3] & ~(| long_category[2:0]),
4028 long_category[2] & ~(| long_category[1:0]),
4029 long_category[1] & ~( long_category[ 0]),
4030 long_category[0]};
4031
4032assign fgu_pre_trap_in[3:0] =
4033 {fgu_category[3] & ~(| fgu_category[2:0]),
4034 fgu_category[2] & ~(| fgu_category[1:0]),
4035 fgu_category[1] & ~( fgu_category[ 0]),
4036 fgu_category[0]};
4037
4038assign don_ret_pre_trap_in[3:0] =
4039 {don_ret_category[3] & ~(| don_ret_category[2:0]),
4040 don_ret_category[2] & ~(| don_ret_category[1:0]),
4041 don_ret_category[1] & ~( don_ret_category[ 0]),
4042 don_ret_category[0]};
4043
4044assign notrap_pre_trap_in[3:0] =
4045 {notrap_category[3] & ~(| notrap_category[2:0]),
4046 notrap_category[2] & ~(| notrap_category[1:0]),
4047 notrap_category[1] & ~( notrap_category[ 0]),
4048 notrap_category[0]};
4049
4050assign itw_pre_trap_in[3:0] =
4051 {itw_category[3] & ~(| itw_category[2:0]),
4052 itw_category[2] & ~(| itw_category[1:0]),
4053 itw_category[1] & ~( itw_category[ 0]),
4054 itw_category[0]};
4055
4056assign other_pre_trap_in[3:0] =
4057 {other_category[3] & ~(| other_category[2:0]),
4058 other_category[2] & ~(| other_category[1:0]),
4059 other_category[1] & ~( other_category[ 0]),
4060 other_category[0]};
4061
4062tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 reset_pre_trap_lat (
4063 .scan_in(reset_pre_trap_lat_scanin),
4064 .scan_out(reset_pre_trap_lat_scanout),
4065 .l1clk ({l1clk_pm4 ,
4066 l1clk_pm3 ,
4067 l1clk_pm2 ,
4068 l1clk_pm1 }),
4069 .din (reset_pre_trap_in [3:0] ),
4070 .dout (reset_pre_trap [3:0] ),
4071 .siclk(siclk),
4072 .soclk(soclk)
4073);
4074
4075tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 disrupt_pre_trap_lat (
4076 .scan_in(disrupt_pre_trap_lat_scanin),
4077 .scan_out(disrupt_pre_trap_lat_scanout),
4078 .l1clk ({l1clk_pm4 ,
4079 l1clk_pm3 ,
4080 l1clk_pm2 ,
4081 l1clk_pm1 }),
4082 .din (disrupt_pre_trap_in [3:0] ),
4083 .dout (disrupt_pre_trap [3:0] ),
4084 .siclk(siclk),
4085 .soclk(soclk)
4086);
4087
4088tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 divide_pre_trap_lat (
4089 .scan_in(divide_pre_trap_lat_scanin),
4090 .scan_out(divide_pre_trap_lat_scanout),
4091 .l1clk ({l1clk_pm4 ,
4092 l1clk_pm3 ,
4093 l1clk_pm2 ,
4094 l1clk_pm1 }),
4095 .din (divide_pre_trap_in [3:0] ),
4096 .dout (divide_pre_trap [3:0] ),
4097 .siclk(siclk),
4098 .soclk(soclk)
4099);
4100
4101tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 long_pre_trap_lat (
4102 .scan_in(long_pre_trap_lat_scanin),
4103 .scan_out(long_pre_trap_lat_scanout),
4104 .l1clk ({l1clk_pm4 ,
4105 l1clk_pm3 ,
4106 l1clk_pm2 ,
4107 l1clk_pm1 }),
4108 .din (long_pre_trap_in [3:0] ),
4109 .dout (long_pre_trap [3:0] ),
4110 .siclk(siclk),
4111 .soclk(soclk)
4112);
4113
4114tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 fgu_pre_trap_lat (
4115 .scan_in(fgu_pre_trap_lat_scanin),
4116 .scan_out(fgu_pre_trap_lat_scanout),
4117 .l1clk ({l1clk_pm4 ,
4118 l1clk_pm3 ,
4119 l1clk_pm2 ,
4120 l1clk_pm1 }),
4121 .din (fgu_pre_trap_in [3:0] ),
4122 .dout (fgu_pre_trap [3:0] ),
4123 .siclk(siclk),
4124 .soclk(soclk)
4125);
4126
4127tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 don_ret_pre_trap_lat (
4128 .scan_in(don_ret_pre_trap_lat_scanin),
4129 .scan_out(don_ret_pre_trap_lat_scanout),
4130 .l1clk ({l1clk_pm4 ,
4131 l1clk_pm3 ,
4132 l1clk_pm2 ,
4133 l1clk_pm1 }),
4134 .din (don_ret_pre_trap_in [3:0] ),
4135 .dout (don_ret_pre_trap [3:0] ),
4136 .siclk(siclk),
4137 .soclk(soclk)
4138);
4139
4140tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 notrap_pre_trap_lat (
4141 .scan_in(notrap_pre_trap_lat_scanin),
4142 .scan_out(notrap_pre_trap_lat_scanout),
4143 .l1clk ({l1clk_pm4 ,
4144 l1clk_pm3 ,
4145 l1clk_pm2 ,
4146 l1clk_pm1 }),
4147 .din (notrap_pre_trap_in [3:0] ),
4148 .dout (notrap_pre_trap [3:0] ),
4149 .siclk(siclk),
4150 .soclk(soclk)
4151);
4152
4153tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 itw_pre_trap_lat (
4154 .scan_in(itw_pre_trap_lat_scanin),
4155 .scan_out(itw_pre_trap_lat_scanout),
4156 .l1clk ({l1clk_pm4 ,
4157 l1clk_pm3 ,
4158 l1clk_pm2 ,
4159 l1clk_pm1 }),
4160 .din (itw_pre_trap_in [3:0] ),
4161 .dout (itw_pre_trap [3:0] ),
4162 .siclk(siclk),
4163 .soclk(soclk)
4164);
4165
4166tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 other_pre_trap_lat (
4167 .scan_in(other_pre_trap_lat_scanin),
4168 .scan_out(other_pre_trap_lat_scanout),
4169 .l1clk ({l1clk_pm4 ,
4170 l1clk_pm3 ,
4171 l1clk_pm2 ,
4172 l1clk_pm1 }),
4173 .din (other_pre_trap_in [3:0] ),
4174 .dout (other_pre_trap [3:0] ),
4175 .siclk(siclk),
4176 .soclk(soclk)
4177);
4178
4179
4180
4181////////////////////////////////////////////////////////////////////////////////
4182// Prioritize categories
4183
4184// ITLB writes take two cycles on bus to IFU so must
4185// hold off traps in second cycle
4186// Traps must write the TSA
4187
4188assign pre_allow_trap_in =
4189 ~asi_rmw_tsa & ~take_don & ~take_ret & ~take_don_last &
4190 ~take_ret_last & ~take_itw;
4191
4192tlu_trl_ctl_msff_ctl_macro__width_1 pre_allow_trap_lat (
4193 .scan_in(pre_allow_trap_lat_scanin),
4194 .scan_out(pre_allow_trap_lat_scanout),
4195 .din (pre_allow_trap_in ),
4196 .dout (pre_allow_trap ),
4197 .l1clk(l1clk),
4198 .siclk(siclk),
4199 .soclk(soclk)
4200);
4201
4202assign allow_trap =
4203 ~asi_preempt_trap & pre_allow_trap;
4204
4205assign pre_allow_don_ret_in =
4206 ~take_don & ~take_ret & ~take_itw;
4207
4208tlu_trl_ctl_msff_ctl_macro__width_1 pre_allow_don_ret_lat (
4209 .scan_in(pre_allow_don_ret_lat_scanin),
4210 .scan_out(pre_allow_don_ret_lat_scanout),
4211 .din (pre_allow_don_ret_in ),
4212 .dout (pre_allow_don_ret ),
4213 .l1clk(l1clk),
4214 .siclk(siclk),
4215 .soclk(soclk)
4216);
4217
4218assign allow_don_ret =
4219 ~asi_preempt_done_retry & pre_allow_don_ret;
4220
4221// POR resets cannot wait for store buffer to empty
4222assign take_reset_in =
4223 (| (reset_category[3:0] & (stb_empty[3:0] | por_req_in[3:0])));
4224
4225// Pending disrupting conditions prevent any other type of trap request
4226assign take_disrupt_in =
4227 (| disrupt_category[3:0]) & ~take_reset_in;
4228
4229assign take_div_in =
4230 (| divide_category[3:0]) & ~take_disrupt_in & ~take_reset_in;
4231
4232assign take_long_in =
4233 (| long_category[3:0]) & ~take_div_in & ~take_disrupt_in &
4234 ~take_reset_in;
4235
4236assign take_fgu_in =
4237 (| fgu_category[3:0]) & ~take_long_in & ~take_div_in &
4238 ~take_disrupt_in & ~take_reset_in;
4239
4240assign take_other_in =
4241 (| other_category[3:0]) & ~take_fgu_in & ~take_long_in &
4242 ~take_div_in & ~take_disrupt_in & ~take_reset_in;
4243
4244assign take_don_ret_in =
4245 (| don_ret_category[3:0]) & ~take_other_in & ~take_fgu_in &
4246 ~take_long_in & ~take_div_in & ~take_disrupt_in & ~take_disrupt_in &
4247 ~take_reset_in;
4248
4249// itw can occur at same time as disrupt or other categories
4250assign take_itw_g_in =
4251 (| itw_category[3:0]) & ~take_don_ret_in & ~take_other_in &
4252 ~take_fgu_in & ~take_long_in & ~take_div_in & ~take_disrupt_in &
4253 ~take_disrupt_in & ~take_reset_in;
4254
4255// notrap can occur at same time as disrupt or other categories
4256assign take_notrap_in =
4257 (| notrap_category[3:0]) & ~take_don_ret_in & ~take_other_in &
4258 ~take_fgu_in & ~take_long_in & ~take_div_in & ~take_disrupt_in &
4259 ~take_disrupt_in & ~take_reset_in & ~take_itw_g_in;
4260
4261assign take_otr_in = // take trap other than reset
4262 take_disrupt_in | take_div_in | take_long_in | take_fgu_in |
4263 take_other_in;
4264
4265tlu_trl_ctl_msff_ctl_macro__width_1 take_reset_lat (
4266 .scan_in(take_reset_lat_scanin),
4267 .scan_out(take_reset_lat_scanout),
4268 .din (take_reset_in ),
4269 .dout (ptake_reset ),
4270 .l1clk(l1clk),
4271 .siclk(siclk),
4272 .soclk(soclk)
4273);
4274
4275assign take_reset =
4276 ptake_reset & allow_trap;
4277
4278tlu_trl_ctl_msff_ctl_macro__width_1 take_disrupt_lat (
4279 .scan_in(take_disrupt_lat_scanin),
4280 .scan_out(take_disrupt_lat_scanout),
4281 .din (take_disrupt_in ),
4282 .dout (ptake_disrupt ),
4283 .l1clk(l1clk),
4284 .siclk(siclk),
4285 .soclk(soclk)
4286);
4287
4288assign take_disrupt =
4289 ptake_disrupt & allow_trap;
4290
4291tlu_trl_ctl_msff_ctl_macro__width_1 take_div_lat (
4292 .scan_in(take_div_lat_scanin),
4293 .scan_out(take_div_lat_scanout),
4294 .din (take_div_in ),
4295 .dout (ptake_div ),
4296 .l1clk(l1clk),
4297 .siclk(siclk),
4298 .soclk(soclk)
4299);
4300
4301assign take_div =
4302 ptake_div & allow_trap;
4303
4304tlu_trl_ctl_msff_ctl_macro__width_1 take_long_lat (
4305 .scan_in(take_long_lat_scanin),
4306 .scan_out(take_long_lat_scanout),
4307 .din (take_long_in ),
4308 .dout (ptake_long ),
4309 .l1clk(l1clk),
4310 .siclk(siclk),
4311 .soclk(soclk)
4312);
4313
4314assign take_long =
4315 ptake_long & allow_trap;
4316
4317tlu_trl_ctl_msff_ctl_macro__width_1 take_fgu_lat (
4318 .scan_in(take_fgu_lat_scanin),
4319 .scan_out(take_fgu_lat_scanout),
4320 .din (take_fgu_in ),
4321 .dout (ptake_fgu ),
4322 .l1clk(l1clk),
4323 .siclk(siclk),
4324 .soclk(soclk)
4325);
4326
4327assign take_fgu =
4328 ptake_fgu & allow_trap;
4329
4330tlu_trl_ctl_msff_ctl_macro__width_1 take_other_lat (
4331 .scan_in(take_other_lat_scanin),
4332 .scan_out(take_other_lat_scanout),
4333 .din (take_other_in ),
4334 .dout (ptake_other ),
4335 .l1clk(l1clk),
4336 .siclk(siclk),
4337 .soclk(soclk)
4338);
4339
4340assign take_other =
4341 ptake_other & allow_trap;
4342
4343tlu_trl_ctl_msff_ctl_macro__width_1 take_don_ret_lat (
4344 .scan_in(take_don_ret_lat_scanin),
4345 .scan_out(take_don_ret_lat_scanout),
4346 .din (take_don_ret_in ),
4347 .dout (ptake_don_ret ),
4348 .l1clk(l1clk),
4349 .siclk(siclk),
4350 .soclk(soclk)
4351);
4352
4353assign take_don_ret =
4354 ptake_don_ret & allow_don_ret;
4355
4356tlu_trl_ctl_msff_ctl_macro__width_1 take_notrap_lat (
4357 .scan_in(take_notrap_lat_scanin),
4358 .scan_out(take_notrap_lat_scanout),
4359 .din (take_notrap_in ),
4360 .dout (ptake_notrap ),
4361 .l1clk(l1clk),
4362 .siclk(siclk),
4363 .soclk(soclk)
4364);
4365
4366assign take_notrap =
4367 ptake_notrap & allow_trap;
4368
4369tlu_trl_ctl_msff_ctl_macro__width_1 take_itw_lat (
4370 .scan_in(take_itw_lat_scanin),
4371 .scan_out(take_itw_lat_scanout),
4372 .din (take_itw_g_in ),
4373 .dout (ptake_itw_g ),
4374 .l1clk(l1clk),
4375 .siclk(siclk),
4376 .soclk(soclk)
4377);
4378
4379assign take_itw_g =
4380 ptake_itw_g & allow_trap &
4381 ~trlx_itw_wait & ~trlx_itw_last;
4382
4383tlu_trl_ctl_msff_ctl_macro__width_1 take_otr_lat (
4384 .scan_in(take_otr_lat_scanin),
4385 .scan_out(take_otr_lat_scanout),
4386 .din (take_otr_in ),
4387 .dout (ptake_otr ),
4388 .l1clk(l1clk),
4389 .siclk(siclk),
4390 .soclk(soclk)
4391);
4392
4393assign take_otr =
4394 ptake_otr & allow_trap;
4395
4396assign take_any_dec[3:0] =
4397 real_trap[3:0];
4398
4399assign take_any_dec_last[3:0] =
4400 real_trap_last[3:0];
4401
4402
4403
4404
4405////////////////////////////////////////////////////////////////////////////////
4406// Figure out which trap in the group occurred
4407
4408assign take_por =
4409 (| ( por_req_in[3:0] & reset_pre_trap[3:0])) &
4410 take_reset;
4411
4412assign take_por_dec[3:0] =
4413 por_req_in[3:0] & reset_pre_trap[3:0] & {4 {take_reset}};
4414
4415assign take_por_dec_last[3:0] =
4416 {4 {take_por_last}} & trap_taken3[3:0];
4417
4418assign take_xir =
4419 (| ( xir_req_in[3:0] & reset_pre_trap[3:0] & ~por_req_in[3:0])) &
4420 take_reset;
4421
4422assign take_sir =
4423 (| ( sir_req_in[3:0] & reset_pre_trap[3:0] & ~por_req_in[3:0] &
4424 ~xir_req_in[3:0])) & take_reset;
4425
4426assign take_ade =
4427 (| (ade_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4428
4429assign take_iln =
4430 (| (iln_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4431
4432assign take_ivt =
4433 (| (ivt_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4434
4435assign take_mqr =
4436 (| (mqr_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4437
4438assign take_dqr =
4439 (| (dqr_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4440
4441assign take_rqr =
4442 (| (rqr_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4443
4444assign take_eer =
4445 (| (eer_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4446
4447assign take_ftt =
4448 (| (ftt_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4449
4450assign take_hst =
4451 (| (hst_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4452
4453assign take_tlz =
4454 (| (tlz_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4455
4456assign take_sma =
4457 (| (sma_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4458
4459assign take_cwq =
4460 (| (cwq_req_in[3:0] & disrupt_pre_trap[3:0])) & take_disrupt;
4461
4462assign take_dae =
4463 (| (dae_req_in[3:0] & long_pre_trap[3:0])) & take_long;
4464
4465assign take_fei =
4466 (| (fei_req_in[3:0] & fgu_pre_trap[3:0])) & take_fgu;
4467
4468assign take_fof =
4469 (| (fof_req_in[3:0] & fgu_pre_trap[3:0])) & take_fgu;
4470
4471assign take_don =
4472 (| (pdon_req_in[3:0] & don_ret_pre_trap[3:0])) & take_don_ret;
4473
4474assign take_ret =
4475 (| (pret_req_in[3:0] & don_ret_pre_trap[3:0])) & take_don_ret;
4476
4477assign take_htd =
4478 (| (htd_req_in[3:0] & notrap_pre_trap[3:0])) & take_notrap;
4479
4480// fpe_req because this is not a trap, but if a real FPU trap
4481// catches up, then fpe is killed.
4482// This led to a trap[03:00] without a take_fpe.
4483assign take_fpe =
4484 (| (fpe_req[3:0] & notrap_pre_trap[3:0])) & take_notrap;
4485
4486assign take_lsr =
4487 (| (lsr_req_in[3:0] & notrap_pre_trap[3:0])) & take_notrap &
4488 ~take_fpe;
4489
4490assign take_itw =
4491 ( | (itw_req_in[3:0] & itw_pre_trap[3:0])) & take_itw_g;
4492
4493assign take_res =
4494 (| (res_req_in[3:0] & notrap_pre_trap[3:0])) & take_notrap &
4495 ~take_fpe;
4496
4497assign take_ssr =
4498 (| (ssr_req_in_for_taken[3:0] & notrap_pre_trap[3:0])) &
4499 take_notrap &
4500 ~take_fpe;
4501assign take_ssr_por =
4502 take_por & (| (ssr_req_in_for_taken[3:0] & reset_pre_trap[3:0]));
4503
4504assign take_nns =
4505 (| (nns_req_in[3:0] & notrap_pre_trap[3:0])) & take_notrap &
4506 ~take_fpe;
4507
4508assign take_icp =
4509 (| (icp_req_in[3:0] & notrap_pre_trap[3:0])) & take_notrap;
4510
4511assign take_ipe =
4512 (| (ipe_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4513
4514assign take_iae =
4515 (| (iae_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4516
4517assign take_ipv =
4518 (| (ipv_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4519
4520assign take_inp =
4521 (| (inp_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4522
4523assign take_iua =
4524 (| (iua_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4525
4526assign take_iar =
4527 (| (iar_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4528
4529assign take_irr =
4530 (| (irr_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4531
4532assign take_mar =
4533 (| (mar_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4534
4535assign take_mrr =
4536 (| (mrr_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4537
4538assign take_pro =
4539 (| (pro_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4540
4541assign take_ill =
4542 (| (ill_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4543
4544assign take_fpd =
4545 (| (fpd_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4546
4547assign take_snn =
4548 (| (snn_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4549
4550assign take_sno =
4551 (| (sno_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4552
4553assign take_fnn =
4554 (| (fnn_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4555
4556assign take_fno =
4557 (| (fno_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4558
4559assign take_clw =
4560 (| (clw_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4561
4562assign take_ldf =
4563 (| (ldf_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4564
4565assign take_stf =
4566 (| (stf_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4567
4568assign take_dap =
4569 (| (dap_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4570 ~take_pra;
4571
4572assign take_vaw =
4573 (| (vaw_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4574
4575assign take_iaw =
4576 (| (iaw_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4577
4578assign take_paw =
4579 (| (paw_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4580
4581assign take_maa =
4582 (| (maa_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4583
4584assign take_pra =
4585 (| (pra_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4586
4587assign take_dia =
4588 (| (dia_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4589 ~take_pra;
4590
4591assign take_ups =
4592 (| (ups_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4593 ~take_pra;
4594
4595assign take_dpv =
4596 (| (dpv_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4597 ~take_pra;
4598
4599assign take_dnc =
4600 (| (dnc_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4601 ~take_pra;
4602
4603assign take_dnf =
4604 (| (dnf_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4605 ~take_pra;
4606
4607assign take_dso =
4608 (| (dso_req_in[3:0] & other_pre_trap[3:0])) & take_other &
4609 ~take_pra;
4610
4611assign take_tof =
4612 (| (tof_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4613
4614assign take_tcc =
4615 (| (tcc_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4616
4617assign take_itm =
4618 (| (itm_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4619
4620assign take_dtm =
4621 (| (dtm_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4622
4623assign take_him =
4624 (| (him_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4625
4626assign take_hdm =
4627 (| (hdm_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4628
4629assign take_irt =
4630 (| (irt_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4631
4632assign take_drt =
4633 (| (drt_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4634
4635assign take_pmu =
4636 (| (pmu_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4637
4638assign take_ime =
4639 (| (ime_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4640
4641assign take_dme =
4642 (| (dme_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4643
4644assign take_ibp =
4645 (| (ibp_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4646
4647assign take_tct =
4648 (| (tct_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4649
4650assign take_iit =
4651 (| (iit_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4652
4653assign take_dit =
4654 (| (dit_req_in[3:0] & other_pre_trap[3:0])) & take_other;
4655
4656tlu_trl_ctl_msff_ctl_macro__width_1 take_pmu_lat (
4657 .scan_in(take_pmu_lat_scanin),
4658 .scan_out(take_pmu_lat_scanout),
4659 .din (take_pmu ),
4660 .dout (take_pmu_last ),
4661 .l1clk(l1clk),
4662 .siclk(siclk),
4663 .soclk(soclk)
4664);
4665
4666assign tlu_pmu_trap_taken[3:0] =
4667 trap_taken3[3:0] & {4 {take_pmu_last}};
4668
4669tlu_trl_ctl_msff_ctl_macro__width_4 take_ivt_lat (
4670 .scan_in(take_ivt_lat_scanin),
4671 .scan_out(take_ivt_lat_scanout),
4672 .din ({take_sma,
4673 take_cwq,
4674 take_xir,
4675 take_ftt}),
4676 .dout ({take_sma_last,
4677 take_cwq_last,
4678 take_xir_last,
4679 take_ftt_last} ),
4680 .l1clk(l1clk),
4681 .siclk(siclk),
4682 .soclk(soclk)
4683);
4684
4685assign trl_take_sma =
4686 take_sma_last;
4687assign trl_take_cwq =
4688 take_cwq_last;
4689assign trl_take_xir =
4690 take_xir_last;
4691assign trl_take_ftt =
4692 take_ftt_last;
4693
4694
4695
4696
4697////////////////////////////////////////////////////////////////////////////////
4698// Determine which thread traps
4699
4700assign trap[3:0] =
4701 ({4 {take_reset }} & reset_pre_trap[3:0]) |
4702 ({4 {take_disrupt}} & disrupt_pre_trap[3:0]) |
4703 ({4 {take_div }} & divide_pre_trap[3:0]) |
4704 ({4 {take_long }} & long_pre_trap[3:0]) |
4705 ({4 {take_don_ret}} & don_ret_pre_trap[3:0]) |
4706 ({4 {take_notrap }} & notrap_pre_trap[3:0]) |
4707 ({4 {take_itw_g }} & itw_pre_trap[3:0]) |
4708 ({4 {take_fgu }} & fgu_pre_trap[3:0]) |
4709 ({4 {take_other }} & other_pre_trap[3:0]) ;
4710
4711// trap_not_por only used for TL, so must not have POR in it
4712assign take_rstnpor =
4713 take_reset & ~take_por;
4714assign trap_not_por[3:0] =
4715 ({4 {take_rstnpor}} & reset_pre_trap[3:0]) |
4716 ({4 {take_disrupt}} & disrupt_pre_trap[3:0]) |
4717 ({4 {take_div }} & divide_pre_trap[3:0]) |
4718 ({4 {take_long }} & long_pre_trap[3:0]) |
4719 ({4 {take_fgu }} & fgu_pre_trap[3:0]) |
4720 ({4 {take_other }} & other_pre_trap[3:0]) ;
4721
4722assign real_trap[3:0] =
4723 ({4 {take_reset }} & reset_pre_trap[3:0]) |
4724 ({4 {take_disrupt}} & disrupt_pre_trap[3:0]) |
4725 ({4 {take_div }} & divide_pre_trap[3:0]) |
4726 ({4 {take_long }} & long_pre_trap[3:0]) |
4727 ({4 {take_fgu }} & fgu_pre_trap[3:0]) |
4728 ({4 {take_other }} & other_pre_trap[3:0]) ;
4729
4730assign trap_ndr[3:0] =
4731 ({4 {take_reset }} & reset_pre_trap[3:0]) |
4732 ({4 {take_disrupt}} & disrupt_pre_trap[3:0]) |
4733 ({4 {take_div }} & divide_pre_trap[3:0]) |
4734 ({4 {take_long }} & long_pre_trap[3:0]) |
4735 ({4 {take_notrap }} & notrap_pre_trap[3:0]) |
4736 ({4 {take_itw_g }} & itw_pre_trap[3:0]) |
4737 ({4 {take_fgu }} & fgu_pre_trap[3:0]) |
4738 ({4 {take_other }} & other_pre_trap[3:0]) ;
4739
4740assign trap_itw[3:0] =
4741 ({4 {take_itw_g }} & itw_pre_trap[3:0]) ;
4742
4743assign trap_por_res_ssr[3:0] =
4744 ({4 {take_por }} & reset_pre_trap[3:0]) |
4745 ({4 {take_res }} & notrap_pre_trap[3:0]) |
4746 ({4 {take_ssr }} & notrap_pre_trap[3:0]) ;
4747
4748assign trap_taken_in[3:0] =
4749 trap[3:0] & ~(fei_or_fof_incoming[3:0] | dbz_incoming[3:0]);
4750
4751tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken_lat (
4752 .scan_in(trap_taken_lat_scanin),
4753 .scan_out(trap_taken_lat_scanout),
4754 .l1clk ({l1clk_pm4 ,
4755 l1clk_pm3 ,
4756 l1clk_pm2 ,
4757 l1clk_pm1 }),
4758 .din (trap_taken_in [3:0] ),
4759 .dout (trap_taken [3:0] ),
4760 .siclk(siclk),
4761 .soclk(soclk)
4762);
4763
4764tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken0_lat (
4765 .scan_in(trap_taken0_lat_scanin),
4766 .scan_out(trap_taken0_lat_scanout),
4767 .l1clk ({l1clk_pm4 ,
4768 l1clk_pm3 ,
4769 l1clk_pm2 ,
4770 l1clk_pm1 }),
4771 .din (trap_taken_in [3:0] ),
4772 .dout (trap_taken0 [3:0] ),
4773 .siclk(siclk),
4774 .soclk(soclk)
4775);
4776
4777tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken1_lat (
4778 .scan_in(trap_taken1_lat_scanin),
4779 .scan_out(trap_taken1_lat_scanout),
4780 .l1clk ({l1clk_pm4 ,
4781 l1clk_pm3 ,
4782 l1clk_pm2 ,
4783 l1clk_pm1 }),
4784 .din (trap_taken_in [3:0] ),
4785 .dout (trap_taken1 [3:0] ),
4786 .siclk(siclk),
4787 .soclk(soclk)
4788);
4789
4790tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken2_lat (
4791 .scan_in(trap_taken2_lat_scanin),
4792 .scan_out(trap_taken2_lat_scanout),
4793 .l1clk ({l1clk_pm4 ,
4794 l1clk_pm3 ,
4795 l1clk_pm2 ,
4796 l1clk_pm1 }),
4797 .din (trap_taken_in [3:0] ),
4798 .dout (trap_taken2 [3:0] ),
4799 .siclk(siclk),
4800 .soclk(soclk)
4801);
4802
4803tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken3_lat (
4804 .scan_in(trap_taken3_lat_scanin),
4805 .scan_out(trap_taken3_lat_scanout),
4806 .l1clk ({l1clk_pm4 ,
4807 l1clk_pm3 ,
4808 l1clk_pm2 ,
4809 l1clk_pm1 }),
4810 .din (trap_taken_in [3:0] ),
4811 .dout (trap_taken3 [3:0] ),
4812 .siclk(siclk),
4813 .soclk(soclk)
4814);
4815
4816tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken4_lat (
4817 .scan_in(trap_taken4_lat_scanin),
4818 .scan_out(trap_taken4_lat_scanout),
4819 .l1clk ({l1clk_pm4 ,
4820 l1clk_pm3 ,
4821 l1clk_pm2 ,
4822 l1clk_pm1 }),
4823 .din (trap_taken_in [3:0] ),
4824 .dout (trap_taken4 [3:0] ),
4825 .siclk(siclk),
4826 .soclk(soclk)
4827);
4828
4829tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_taken5_lat (
4830 .scan_in(trap_taken5_lat_scanin),
4831 .scan_out(trap_taken5_lat_scanout),
4832 .l1clk ({l1clk_pm4 ,
4833 l1clk_pm3 ,
4834 l1clk_pm2 ,
4835 l1clk_pm1 }),
4836 .din (trap_taken_in [3:0] ),
4837 .dout (trap_taken5 [3:0] ),
4838 .siclk(siclk),
4839 .soclk(soclk)
4840);
4841
4842tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 trap_itw_taken_lat (
4843 .scan_in(trap_itw_taken_lat_scanin),
4844 .scan_out(trap_itw_taken_lat_scanout),
4845 .l1clk ({l1clk_pm4 ,
4846 l1clk_pm3 ,
4847 l1clk_pm2 ,
4848 l1clk_pm1 }),
4849 .din (trap_itw [3:0] ),
4850 .dout (trap_itw_taken [3:0] ),
4851 .siclk(siclk),
4852 .soclk(soclk)
4853);
4854
4855assign trl_trap_taken[3:0] =
4856 trap_taken[3:0];
4857
4858tlu_trl_ctl_msff_ctl_macro__width_1 take_reset_last_lat (
4859 .scan_in(take_reset_last_lat_scanin),
4860 .scan_out(take_reset_last_lat_scanout),
4861 .din (take_reset ),
4862 .dout (take_reset_last ),
4863 .l1clk(l1clk),
4864 .siclk(siclk),
4865 .soclk(soclk)
4866);
4867
4868////////////////////////////////////////////////////////////////////////////////
4869// Generate trap type
4870//
4871// The trap address is
4872// TBA<63:15> TL>0 TT(TL) 00000
4873// 63 15 14 13 5 4 0
4874//
4875
4876assign trap_type_in[8:0] =
4877 ({9 {take_por}} & 9'h001) |
4878 ({9 {take_xir}} & 9'h003) |
4879 ({9 {take_sir}} & 9'h004) |
4880 ({9 {take_iln}} & {5'b00100, int_level_n[3:0]}) |
4881 ({9 {take_ivt}} & 9'h060) |
4882 ({9 {take_mqr}} & 9'h07c) |
4883 ({9 {take_dqr}} & 9'h07d) |
4884 ({9 {take_rqr}} & 9'h07e) |
4885 ({9 {take_eer}} & 9'h063) |
4886 ({9 {take_ftt}} & 9'h007) |
4887 ({9 {take_hst}} & 9'h05e) |
4888 ({9 {take_tlz}} & 9'h05f) |
4889 ({9 {take_cwq}} & 9'h03c) |
4890 ({9 {take_sma}} & 9'h03d) |
4891 ({9 {take_ade}} & 9'h040) |
4892 ({9 {take_ipe}} & 9'h029) |
4893 ({9 {take_dae}} & 9'h032) |
4894 ({9 {take_fei}} & 9'h021) |
4895 ({9 {take_fof}} & 9'h022) |
4896 ({9 {take_iae}} & 9'h00a) |
4897 ({9 {take_ipv}} & 9'h008) |
4898 ({9 {take_iua}} & 9'h00b) |
4899 ({9 {take_inp}} & 9'h00c) |
4900 ({9 {take_iar}} & 9'h00d) |
4901 ({9 {take_irr}} & 9'h00e) |
4902 ({9 {take_mar}} & 9'h02e) |
4903 ({9 {take_mrr}} & 9'h02d) |
4904 ({9 {take_pro}} & 9'h011) |
4905 ({9 {take_ill}} & 9'h010) |
4906 ({9 {take_fpd}} & 9'h020) |
4907 ({9 {take_snn}} & {4'b0100, wstate[2:0], 2'b00}) |
4908 ({9 {take_sno}} & {4'b0101, wstate[2:0], 2'b00}) |
4909 ({9 {take_fnn}} & {4'b0110, wstate[2:0], 2'b00}) |
4910 ({9 {take_fno}} & {4'b0111, wstate[2:0], 2'b00}) |
4911 ({9 {take_clw}} & 9'h024) |
4912 ({9 {take_ldf}} & 9'h035) |
4913 ({9 {take_stf}} & 9'h036) |
4914 ({9 {take_dap}} & 9'h06c) |
4915 ({9 {take_vaw}} & 9'h062) |
4916 ({9 {take_iaw}} & 9'h075) |
4917 ({9 {take_paw}} & 9'h061) |
4918 ({9 {take_maa}} & 9'h034) |
4919 ({9 {take_pra}} & 9'h037) |
4920 ({9 {take_dia}} & 9'h014) |
4921 ({9 {take_ups}} & 9'h03b) |
4922 ({9 {take_dpv}} & 9'h015) |
4923 ({9 {take_dnc}} & 9'h016) |
4924 ({9 {take_dnf}} & 9'h017) |
4925 ({9 {take_dso}} & 9'h030) |
4926 ({9 {take_tof}} & 9'h023) |
4927 ({9 {take_tcc}} & {1'b1, tcc_number[7:0]}) |
4928 ({9 {take_itm}} & 9'h064) |
4929 ({9 {take_dtm}} & 9'h068) |
4930 ({9 {take_him}} & 9'h009) |
4931 ({9 {take_hdm}} & 9'h031) |
4932 ({9 {take_irt}} & 9'h03e) |
4933 ({9 {take_drt}} & 9'h03f) |
4934 ({9 {take_pmu}} & 9'h04f) |
4935 ({9 {take_div}} & 9'h028) |
4936 ({9 {take_ime}} & 9'h071) |
4937 ({9 {take_dme}} & 9'h072) |
4938 ({9 {take_ibp}} & 9'h076) |
4939 ({9 {take_tct}} & 9'h074) |
4940 ({9 {take_iit}} & 9'h02a) |
4941 ({9 {take_dit}} & 9'h02b) ;
4942
4943assign no_special_trap =
4944 ~next_trap_to_red & ~next_trap_to_err & ~priv_overflow_tl;
4945
4946assign priv_overflow_tl =
4947 next_trap_to_hpriv & sip;
4948
4949// XIR and POR at TL==MAXTL do NOT take WDR
4950// SIR at TL==MAXTL DOES take WDR
4951// All other traps at TL== MAXTL take WDR
4952assign trap_type_for_pc_in[8:0] =
4953 ({9 {take_por }} & 9'h001) |
4954 ({9 {take_xir }} & 9'h003) |
4955 ({9 {take_sir & ~next_trap_to_err}} & 9'h004) |
4956 ({9 {take_sir & next_trap_to_err}} & 9'h002) |
4957 ({9 { no_special_trap }} & trap_type_in[8:0]) |
4958 ({9 {take_otr & next_trap_to_red}} & 9'h005) |
4959 ({9 {take_otr & next_trap_to_err}} & 9'h002) |
4960 ({9 {take_otr & priv_overflow_tl}} & 9'h002) ;
4961
4962assign wstate[2:0] =
4963 ({3 {real_trap[3]}} & fls_wstate3[2:0]) |
4964 ({3 {real_trap[2]}} & fls_wstate2[2:0]) |
4965 ({3 {real_trap[1]}} & fls_wstate1[2:0]) |
4966 ({3 {real_trap[0]}} & fls_wstate0[2:0]) ;
4967
4968assign tcc_number[7:0] =
4969 ({8 {real_trap[3]}} & fls_tcc_number_3[7:0]) |
4970 ({8 {real_trap[2]}} & fls_tcc_number_2[7:0]) |
4971 ({8 {real_trap[1]}} & fls_tcc_number_1[7:0]) |
4972 ({8 {real_trap[0]}} & fls_tcc_number_0[7:0]) ;
4973
4974tlu_trl_ctl_msff_ctl_macro__width_9 trap_type_lat (
4975 .scan_in(trap_type_lat_scanin),
4976 .scan_out(trap_type_lat_scanout),
4977 .din (trap_type_in [8:0] ),
4978 .dout (trap_type [8:0] ),
4979 .l1clk(l1clk),
4980 .siclk(siclk),
4981 .soclk(soclk)
4982);
4983
4984tlu_trl_ctl_msff_ctl_macro__width_9 trap_type_for_pc_lat (
4985 .scan_in(trap_type_for_pc_lat_scanin),
4986 .scan_out(trap_type_for_pc_lat_scanout),
4987 .din (trap_type_for_pc_in [8:0] ),
4988 .dout (trap_type_for_pc [8:0] ),
4989 .l1clk(l1clk),
4990 .siclk(siclk),
4991 .soclk(soclk)
4992);
4993
4994// trl_trap_type goes into muxflop, so can be late
4995assign trl_trap_type[8:0] =
4996 trap_type_for_pc[8:0];
4997
4998// trl_tsa_trap_type goes into muxflop, so can be late
4999assign trl_tsa_trap_type[8:0] =
5000 trap_type[8:0];
5001
5002
5003
5004////////////////////////////////////////////////////////////////////////////////
5005// Maintain trap level
5006
5007tlu_trl_ctl_msff_ctl_macro__width_4 hpstate_hpriv_lat (
5008 .scan_in(hpstate_hpriv_lat_scanin),
5009 .scan_out(hpstate_hpriv_lat_scanout),
5010 .din (tsd_hpstate_hpriv [3:0] ),
5011 .dout (hpstate_hpriv [3:0] ),
5012 .l1clk(l1clk),
5013 .siclk(siclk),
5014 .soclk(soclk)
5015);
5016
5017assign h_wr_tl[3:0] =
5018 asi_wr_tl[3:0] & hpstate_hpriv[3:0];
5019assign n_wr_tl[3:0] =
5020 asi_wr_tl[3:0] & ~hpstate_hpriv[3:0];
5021
5022// Writes to TL when not in hyperprivileged mode saturate at MAXPTL (3'b010);
5023// writes to TL when in hyperprivileged mode saturate at MAXTL (3'b110)
5024// Saturation looks at bits 2:0 only
5025assign tl_h_wr_data[2:0] =
5026 {asi_wr_data[2:1], asi_wr_data[0] & ~(& asi_wr_data[2:1])};
5027assign tl_n_wr_data[2:0] =
5028 {1'b0, (| asi_wr_data[2:1]), asi_wr_data[0] & ~(| asi_wr_data[2:1])};
5029
5030assign hold_tl[3:0] =
5031 ~(take_any_dec[3:0] | npc_sel_tnpc[3:0] | asi_wr_tl[3:0]);
5032
5033assign tl3_incr[2:0] =
5034 tl3[2:0] + {2'b00, tl3[2:0] != maxtl[2:0]};
5035assign tl3_decr[2:0] =
5036 tl3[2:0] - {2'b00, tl3[2:0] != 3'b000};
5037assign tl3_in[2:0] =
5038 ({3 {take_por_dec [3] }} & maxtl [2:0]) |
5039 ({3 {take_any_dec [3] & ~take_por_dec[3]}} & tl3_incr [2:0]) |
5040 ({3 {npc_sel_tnpc [3] }} & tl3_decr [2:0]) |
5041 ({3 {h_wr_tl [3] }} & tl_h_wr_data[2:0]) |
5042 ({3 {n_wr_tl [3] }} & tl_n_wr_data[2:0]) |
5043 ({3 {hold_tl [3] }} & tl3 [2:0]) ;
5044assign tlz_in[3] =
5045 (tl3[2:0] == 3'b000) & tsd_hpstate_tlz[3] & ~ptlz_req_in[3];
5046
5047assign tl2_incr[2:0] =
5048 tl2[2:0] + {2'b00, tl2[2:0] != maxtl[2:0]};
5049assign tl2_decr[2:0] =
5050 tl2[2:0] - {2'b00, tl2[2:0] != 3'b000};
5051assign tl2_in[2:0] =
5052 ({3 {take_por_dec [2] }} & maxtl [2:0]) |
5053 ({3 {take_any_dec [2] & ~take_por_dec[2]}} & tl2_incr [2:0]) |
5054 ({3 {npc_sel_tnpc [2] }} & tl2_decr [2:0]) |
5055 ({3 {h_wr_tl [2] }} & tl_h_wr_data[2:0]) |
5056 ({3 {n_wr_tl [2] }} & tl_n_wr_data[2:0]) |
5057 ({3 {hold_tl [2] }} & tl2 [2:0]) ;
5058assign tlz_in[2] =
5059 (tl2[2:0] == 3'b000) & tsd_hpstate_tlz[2] & ~ptlz_req_in[2];
5060
5061assign tl1_incr[2:0] =
5062 tl1[2:0] + {2'b00, tl1[2:0] != maxtl[2:0]};
5063assign tl1_decr[2:0] =
5064 tl1[2:0] - {2'b00, tl1[2:0] != 3'b000};
5065assign tl1_in[2:0] =
5066 ({3 {take_por_dec [1] }} & maxtl [2:0]) |
5067 ({3 {take_any_dec [1] & ~take_por_dec[1]}} & tl1_incr [2:0]) |
5068 ({3 {npc_sel_tnpc [1] }} & tl1_decr [2:0]) |
5069 ({3 {h_wr_tl [1] }} & tl_h_wr_data[2:0]) |
5070 ({3 {n_wr_tl [1] }} & tl_n_wr_data[2:0]) |
5071 ({3 {hold_tl [1] }} & tl1 [2:0]) ;
5072assign tlz_in[1] =
5073 (tl1[2:0] == 3'b000) & tsd_hpstate_tlz[1] & ~ptlz_req_in[1];
5074
5075assign tl0_incr[2:0] =
5076 tl0[2:0] + {2'b00, tl0[2:0] != maxtl[2:0]};
5077assign tl0_decr[2:0] =
5078 tl0[2:0] - {2'b00, tl0[2:0] != 3'b000};
5079assign tl0_in[2:0] =
5080 ({3 {take_por_dec [0] }} & maxtl [2:0]) |
5081 ({3 {take_any_dec [0] & ~take_por_dec[0]}} & tl0_incr [2:0]) |
5082 ({3 {npc_sel_tnpc [0] }} & tl0_decr [2:0]) |
5083 ({3 {h_wr_tl [0] }} & tl_h_wr_data[2:0]) |
5084 ({3 {n_wr_tl [0] }} & tl_n_wr_data[2:0]) |
5085 ({3 {hold_tl [0] }} & tl0 [2:0]) ;
5086assign tlz_in[0] =
5087 (tl0[2:0] == 3'b000) & tsd_hpstate_tlz[0] & ~ptlz_req_in[0];
5088
5089tlu_trl_ctl_msff_ctl_macro__width_12 tl_lat (
5090 .scan_in(tl_lat_scanin),
5091 .scan_out(tl_lat_scanout),
5092 .din ({tl3_in [2:0],
5093 tl2_in [2:0],
5094 tl1_in [2:0],
5095 tl0_in [2:0]}),
5096 .dout ({tl3 [2:0],
5097 tl2 [2:0],
5098 tl1 [2:0],
5099 tl0 [2:0]}),
5100 .l1clk(l1clk),
5101 .siclk(siclk),
5102 .soclk(soclk)
5103);
5104
5105
5106tlu_trl_ctl_msff_ctl_macro__width_4 tlz_lat (
5107 .scan_in(tlz_lat_scanin),
5108 .scan_out(tlz_lat_scanout),
5109 .din (tlz_in [3:0] ),
5110 .dout (tlz [3:0] ),
5111 .l1clk(l1clk),
5112 .siclk(siclk),
5113 .soclk(soclk)
5114);
5115
5116assign trl_tlz_exc[3:0] =
5117 tlz[3:0] & ~hpstate_hpriv[3:0];
5118
5119// Since tl has already changed, check for tl > 1 when not in hpriv mode
5120assign trl_tl_gt_0 =
5121 (thread_sel[3] & (| tl3[2:1]) & ~hpstate_hpriv[3]) |
5122 (thread_sel[2] & (| tl2[2:1]) & ~hpstate_hpriv[2]) |
5123 (thread_sel[1] & (| tl1[2:1]) & ~hpstate_hpriv[1]) |
5124 (thread_sel[0] & (| tl0[2:1]) & ~hpstate_hpriv[0]) ;
5125
5126assign tl_gt_0_in[3:0] =
5127 {(| tl3_in[2:0]), (| tl2_in[2:0]),
5128 (| tl1_in[2:0]), (| tl0_in[2:0])};
5129
5130assign trl_tl_eq_0[3:0] =
5131 ~tl_gt_0[3:0];
5132
5133tlu_trl_ctl_msff_ctl_macro__width_4 tl_gt_0_last_lat (
5134 .scan_in(tl_gt_0_last_lat_scanin),
5135 .scan_out(tl_gt_0_last_lat_scanout),
5136 .din (tl_gt_0_in [3:0] ),
5137 .dout (tl_gt_0 [3:0] ),
5138 .l1clk(l1clk),
5139 .siclk(siclk),
5140 .soclk(soclk)
5141);
5142
5143assign tlu_tl_gt_0[3:0] =
5144 tl_gt_0[3:0];
5145
5146assign tlu_mmu_tl_gt_0[3:0] =
5147 tl_gt_0[3:0];
5148
5149assign trap_tl[2:0] =
5150 ({3 {trap_not_por[3]}} & tl3 [2:0]) |
5151 ({3 {trap_not_por[2]}} & tl2 [2:0]) |
5152 ({3 {trap_not_por[1]}} & tl1 [2:0]) |
5153 ({3 {trap_not_por[0]}} & tl0 [2:0]) |
5154 ({3 {take_por }} & maxtl_minus_one [2:0]) ;
5155
5156assign trap_tl_m1[2:0] =
5157 ({3 {trap_ndr[3]}} & tl3_decr[2:0]) |
5158 ({3 {trap_ndr[2]}} & tl2_decr[2:0]) |
5159 ({3 {trap_ndr[1]}} & tl1_decr[2:0]) |
5160 ({3 {trap_ndr[0]}} & tl0_decr[2:0]) ;
5161
5162assign rda_tl_m1[2:0] =
5163 ({3 { asi_tsa_tid[1] & asi_tsa_tid[0]}} & tl3_decr[2:0]) |
5164 ({3 { asi_tsa_tid[1] & ~asi_tsa_tid[0]}} & tl2_decr[2:0]) |
5165 ({3 {~asi_tsa_tid[1] & asi_tsa_tid[0]}} & tl1_decr[2:0]) |
5166 ({3 {~asi_tsa_tid[1] & ~asi_tsa_tid[0]}} & tl0_decr[2:0]) ;
5167
5168
5169
5170////////////////////////////////////////////////////////////////////////////////
5171// Maintain GL (global level)
5172
5173// Writes to GL look at 4 bits
5174// Writes when HPSTATE.HPRIV == 1'b1 saturate at 2'b11
5175// Writes when HPSTATE.HPRIV == 1'b0 saturate at 2'b10
5176
5177// Need to delay GL write and trap update by two cycles to avoid
5178// simultaneous GL update by done or retry (for a different thread)
5179assign wr_gl_data_in_in[1] =
5180 (| asi_wr_data[3:1]);
5181assign wr_gl_data_in_in[0] =
5182 ((| {asi_wr_data[3:2], asi_wr_data[0]}) &
5183 (| (asi_wr_gl[3:0] & hpstate_hpriv[3:0]))) |
5184 (~asi_wr_data[3] & ~asi_wr_data[2] & ~asi_wr_data[1] &
5185 asi_wr_data[0] &
5186 (| (asi_wr_gl[3:0] & ~hpstate_hpriv[3:0])));
5187
5188assign gl_data_in_in[1:0] =
5189 ({2 {| asi_wr_gl [3:0]}} & wr_gl_data_in_in [1:0]) ;
5190
5191assign update_gl_in_in[3:0] =
5192 asi_wr_gl[3:0];
5193
5194tlu_trl_ctl_msff_ctl_macro__width_12 wr_gl_lat (
5195 .scan_in(wr_gl_lat_scanin),
5196 .scan_out(wr_gl_lat_scanout),
5197 .din ({update_gl_in_in [3:0],
5198 update_gl_in [3:0],
5199 gl_data_in_in [1:0],
5200 gl_data_in [1:0]}),
5201 .dout ({update_gl_in [3:0],
5202 update_gl [3:0],
5203 gl_data_in [1:0],
5204 gl_data [1:0]}),
5205 .l1clk(l1clk),
5206 .siclk(siclk),
5207 .soclk(soclk)
5208);
5209
5210// GL saturates at 2'b11 when in hypervisor mode, but at MAXPTL when not
5211assign maxglc[1:0] =
5212 {2 {other_trap | hpriv_last | take_reset_last | reset_trap}} |
5213 maxptl[1:0];
5214
5215assign take_anr_dec_last[3:0] =
5216 take_any_dec_last[3:0] & ~take_por_dec_last[3:0];
5217
5218assign hold_gl[3:0] =
5219 ~(take_any_dec_last[3:0] | npc_sel_tnpc[3:0] | update_gl[3:0]);
5220
5221// Hold GL for two cycles so ECC errors can prevent GL update
5222// Saturate when not returning to hyperprivileged mode
5223assign saturate_restore =
5224 (pgl_rest_in[1:0] > maxptl[1:0]) & ~tsd_htstate_hpriv;
5225assign gl_rest_in[1:0] =
5226 ({ 2 { saturate_restore}} & maxptl [1:0]) |
5227 ({ 2 {~saturate_restore}} & pgl_rest_in[1:0]) ;
5228tlu_trl_ctl_msff_ctl_macro__width_4 gl_rest_lat (
5229 .scan_in(gl_rest_lat_scanin),
5230 .scan_out(gl_rest_lat_scanout),
5231 .din ({tsa_gl [1:0],
5232 gl_rest_in [1:0]}),
5233 .dout ({pgl_rest_in [1:0],
5234 gl_rest [1:0]}),
5235 .l1clk(l1clk),
5236 .siclk(siclk),
5237 .soclk(soclk)
5238);
5239
5240assign gl3_incr[1:0] =
5241 (gl3[1:0] + {1'b0, gl3[1:0] < maxglc[1:0]}) &
5242 {1'b1, ~gl3[1] | maxglc[0]};
5243assign gl3_in[1:0] =
5244 ({2 {take_por_dec_last[3]}} & maxgl [1:0]) |
5245 ({2 {take_anr_dec_last[3]}} & gl3_incr [1:0]) |
5246 ({2 {npc_sel_tnpc [3]}} & gl_rest [1:0]) |
5247 ({2 {update_gl [3]}} & gl_data [1:0]) |
5248 ({2 {hold_gl [3]}} & gl3 [1:0]) ;
5249
5250assign gl2_incr[1:0] =
5251 (gl2[1:0] + {1'b0, gl2[1:0] < maxglc[1:0]}) &
5252 {1'b1, ~gl2[1] | maxglc[0]};
5253assign gl2_in[1:0] =
5254 ({2 {take_por_dec_last[2]}} & maxgl [1:0]) |
5255 ({2 {take_anr_dec_last[2]}} & gl2_incr [1:0]) |
5256 ({2 {npc_sel_tnpc [2]}} & gl_rest [1:0]) |
5257 ({2 {update_gl [2]}} & gl_data [1:0]) |
5258 ({2 {hold_gl [2]}} & gl2 [1:0]) ;
5259
5260assign gl1_incr[1:0] =
5261 (gl1[1:0] + {1'b0, gl1[1:0] < maxglc[1:0]}) &
5262 {1'b1, ~gl1[1] | maxglc[0]};
5263assign gl1_in[1:0] =
5264 ({2 {take_por_dec_last[1]}} & maxgl [1:0]) |
5265 ({2 {take_anr_dec_last[1]}} & gl1_incr [1:0]) |
5266 ({2 {npc_sel_tnpc [1]}} & gl_rest [1:0]) |
5267 ({2 {update_gl [1]}} & gl_data [1:0]) |
5268 ({2 {hold_gl [1]}} & gl1 [1:0]) ;
5269
5270assign gl0_incr[1:0] =
5271 (gl0[1:0] + {1'b0, gl0[1:0] < maxglc[1:0]}) &
5272 {1'b1, ~gl0[1] | maxglc[0]};
5273assign gl0_in[1:0] =
5274 ({2 {take_por_dec_last[0]}} & maxgl [1:0]) |
5275 ({2 {take_anr_dec_last[0]}} & gl0_incr [1:0]) |
5276 ({2 {npc_sel_tnpc [0]}} & gl_rest [1:0]) |
5277 ({2 {update_gl [0]}} & gl_data [1:0]) |
5278 ({2 {hold_gl [0]}} & gl0 [1:0]) ;
5279
5280assign trap_gl_in[1:0] =
5281 ({2 {real_trap[3]}} & gl3[1:0]) |
5282 ({2 {real_trap[2]}} & gl2[1:0]) |
5283 ({2 {real_trap[1]}} & gl1[1:0]) |
5284 ({2 {real_trap[0]}} & gl0[1:0]) ;
5285
5286tlu_trl_ctl_msff_ctl_macro__width_10 gl_lat (
5287 .scan_in(gl_lat_wmr_scanin),
5288 .scan_out(gl_lat_wmr_scanout),
5289 .siclk(spc_aclk_wmr),
5290 .din ({trap_gl_in [1:0],
5291 gl3_in [1:0],
5292 gl2_in [1:0],
5293 gl1_in [1:0],
5294 gl0_in [1:0]}),
5295 .dout ({trl_tsa_gl [1:0],
5296 gl3 [1:0],
5297 gl2 [1:0],
5298 gl1 [1:0],
5299 gl0 [1:0]}),
5300 .l1clk(l1clk),
5301 .soclk(soclk)
5302);
5303
5304assign trl_gl3[1:0] =
5305 gl3[1:0];
5306assign trl_gl2[1:0] =
5307 gl2[1:0];
5308assign trl_gl1[1:0] =
5309 gl1[1:0];
5310assign trl_gl0[1:0] =
5311 gl0[1:0];
5312
5313assign tlu_gl3[1:0] =
5314 gl3[1:0];
5315assign tlu_gl2[1:0] =
5316 gl2[1:0];
5317assign tlu_gl1[1:0] =
5318 gl1[1:0];
5319assign tlu_gl0[1:0] =
5320 gl0[1:0];
5321
5322
5323
5324////////////////////////////////////////////////////////////////////////////////
5325// Manage TSA read and write addresses
5326
5327tlu_trl_ctl_msff_ctl_macro__width_1 mbist_run_lat (
5328 .scan_in(mbist_run_lat_scanin),
5329 .scan_out(mbist_run_lat_scanout),
5330 .din (mbi_run ),
5331 .dout (mbist_run ),
5332 .l1clk(l1clk),
5333 .siclk(siclk),
5334 .soclk(soclk)
5335);
5336
5337
5338assign wr_addr_in_in[4:0] =
5339 {5 {| trap_ndr[3:0]}} &
5340 {trap_ndr[3] | trap_ndr[2], trap_ndr[3] | trap_ndr[1],
5341 ({3 {~next_trap_to_err}} & trap_tl [2:0]) |
5342 ({3 { next_trap_to_err}} & trap_tl_m1[2:0])};
5343assign wr_addr_func_in[4:0] =
5344 ({5 {~rmw_tsa}} & wr_addr_in_p [4:0]) |
5345 ({5 { rmw_tsa}} & rmw_addr [4:0]) ;
5346assign wr_addr_in[4:0] =
5347 (wr_addr_func_in [4:0] & {5 {~mbist_run}}) |
5348 (asi_mbist_addr [4:0] & {5 { mbist_run}}) ;
5349
5350tlu_trl_ctl_msff_ctl_macro__width_10 tsa_wr_addr_lat (
5351 .scan_in(tsa_wr_addr_lat_scanin),
5352 .scan_out(tsa_wr_addr_lat_scanout),
5353 .din ({wr_addr_in_in [4:0],
5354 wr_addr_in [4:0]}),
5355 .dout ({wr_addr_in_p [4:0],
5356 wr_addr [4:0]}),
5357 .l1clk(l1clk),
5358 .siclk(siclk),
5359 .soclk(soclk)
5360);
5361
5362assign trl_tsa_wr_addr[4:0] =
5363 wr_addr[4:0];
5364
5365
5366assign don_ret_tl_m1[2:0] =
5367 ({3 {don_ret_pre_trap[3]}} & tl3_decr[2:0]) |
5368 ({3 {don_ret_pre_trap[2]}} & tl2_decr[2:0]) |
5369 ({3 {don_ret_pre_trap[1]}} & tl1_decr[2:0]) |
5370 ({3 {don_ret_pre_trap[0]}} & tl0_decr[2:0]) ;
5371
5372assign rd_addr_in[4:0] =
5373 ({5 {~asi_preempt_done_retry}} &
5374 {don_ret_pre_trap[3] | don_ret_pre_trap[2],
5375 don_ret_pre_trap[3] | don_ret_pre_trap[1],
5376 don_ret_tl_m1[2:0]}) |
5377 ({5 { asi_preempt_done_retry}} &
5378 {asi_tsa_rd_addr[4:3],
5379 ({3 {~asi_tsa_rd_iqr_ecc}} & rda_tl_m1[2:0]) |
5380 ({3 { asi_tsa_rd_iqr_ecc}} & asi_tsa_rd_addr[2:0])}) ;
5381
5382tlu_trl_ctl_msff_ctl_macro__width_5 tsa_rd_addr_lat (
5383 .scan_in(tsa_rd_addr_lat_scanin),
5384 .scan_out(tsa_rd_addr_lat_scanout),
5385 .din (rd_addr_in [4:0] ),
5386 .dout (rd_addr [4:0] ),
5387 .l1clk(l1clk),
5388 .siclk(siclk),
5389 .soclk(soclk)
5390);
5391
5392assign trl_tsa_rd_addr[4:0] =
5393 rd_addr_in[4:0] ;
5394
5395
5396tlu_trl_ctl_msff_ctl_macro__width_5 rmw_addr_lat (
5397 .scan_in(rmw_addr_lat_scanin),
5398 .scan_out(rmw_addr_lat_scanout),
5399 .din (rd_addr [4:0]),
5400 .dout (rmw_addr [4:0]),
5401 .l1clk(l1clk),
5402 .siclk(siclk),
5403 .soclk(soclk)
5404);
5405
5406tlu_trl_ctl_msff_ctl_macro__width_2 rmw_tsa_lat (
5407 .scan_in(rmw_tsa_lat_scanin),
5408 .scan_out(rmw_tsa_lat_scanout),
5409 .din ({asi_rmw_tsa,
5410 rmw_next} ),
5411 .dout ({rmw_next,
5412 rmw_tsa} ),
5413 .l1clk(l1clk),
5414 .siclk(siclk),
5415 .soclk(soclk)
5416);
5417
5418assign trl_rmw_tsa =
5419 rmw_tsa;
5420
5421
5422////////////////////////////////////////////////////////////////////////////////
5423// Processor Interrupt Level register
5424
5425assign pil3_in[3:0] =
5426 ({4 { asi_wr_pil[3]}} & asi_wr_data [3:0]) |
5427 ({4 {~asi_wr_pil[3]}} & pil3 [3:0]) ;
5428
5429assign pil2_in[3:0] =
5430 ({4 { asi_wr_pil[2]}} & asi_wr_data [3:0]) |
5431 ({4 {~asi_wr_pil[2]}} & pil2 [3:0]) ;
5432
5433assign pil1_in[3:0] =
5434 ({4 { asi_wr_pil[1]}} & asi_wr_data [3:0]) |
5435 ({4 {~asi_wr_pil[1]}} & pil1 [3:0]) ;
5436
5437assign pil0_in[3:0] =
5438 ({4 { asi_wr_pil[0]}} & asi_wr_data [3:0]) |
5439 ({4 {~asi_wr_pil[0]}} & pil0 [3:0]) ;
5440
5441tlu_trl_ctl_msff_ctl_macro__width_4 pil3_lat (
5442 .scan_in(pil3_lat_wmr_scanin),
5443 .scan_out(pil3_lat_wmr_scanout),
5444 .siclk(spc_aclk_wmr),
5445 .din (pil3_in [3:0] ),
5446 .dout (pil3 [3:0] ),
5447 .l1clk(l1clk),
5448 .soclk(soclk)
5449);
5450
5451tlu_trl_ctl_msff_ctl_macro__width_4 pil2_lat (
5452 .scan_in(pil2_lat_wmr_scanin),
5453 .scan_out(pil2_lat_wmr_scanout),
5454 .siclk(spc_aclk_wmr),
5455 .din (pil2_in [3:0] ),
5456 .dout (pil2 [3:0] ),
5457 .l1clk(l1clk),
5458 .soclk(soclk)
5459);
5460
5461tlu_trl_ctl_msff_ctl_macro__width_4 pil1_lat (
5462 .scan_in(pil1_lat_wmr_scanin),
5463 .scan_out(pil1_lat_wmr_scanout),
5464 .siclk(spc_aclk_wmr),
5465 .din (pil1_in [3:0] ),
5466 .dout (pil1 [3:0] ),
5467 .l1clk(l1clk),
5468 .soclk(soclk)
5469);
5470
5471tlu_trl_ctl_msff_ctl_macro__width_4 pil0_lat (
5472 .scan_in(pil0_lat_wmr_scanin),
5473 .scan_out(pil0_lat_wmr_scanout),
5474 .siclk(spc_aclk_wmr),
5475 .din (pil0_in [3:0] ),
5476 .dout (pil0 [3:0] ),
5477 .l1clk(l1clk),
5478 .soclk(soclk)
5479);
5480
5481
5482
5483////////////////////////////////////////////////////////////////////////////////
5484// Softint register
5485
5486// Encode HSTICK/STICK/TICK data
5487// 05 = Valid for disrupt ECC exception
5488// 04:03 = HSTICK/STICK/TICK
5489// 02 = Valid for precise ECC exception
5490// 01:00 = TID
5491assign tic_compare_in[5:0] =
5492 {(tic_addr[2] == thread_group) & ~tic_not_valid,
5493 tic_addr[4:3],
5494 (tic_addr[2] == thread_group) & tic_match & ~tic_not_valid,
5495 tic_addr[1:0]};
5496
5497tlu_trl_ctl_msff_ctl_macro__width_6 tic_compare_lat (
5498 .scan_in(tic_compare_lat_scanin),
5499 .scan_out(tic_compare_lat_scanout),
5500 .din (tic_compare_in [5:0] ),
5501 .dout (tic_compare [5:0] ),
5502 .l1clk(l1clk),
5503 .siclk(siclk),
5504 .soclk(soclk)
5505);
5506
5507
5508// STICK_CMPR
5509assign tick3_compare[16] =
5510 (tic_compare[4:3] == 2'b01) & (tic_compare[2]) &
5511 (tic_compare[1:0] == 2'b11) &
5512 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[3]);
5513// TICK_CMPR
5514assign tick3_compare[0] =
5515 (tic_compare[4:3] == 2'b00) & (tic_compare[2]) &
5516 (tic_compare[1:0] == 2'b11) &
5517 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[3]);
5518assign tick3_compare[15:1] = 15'h0000;
5519assign softint3_mux[16:0] =
5520 ({17 { asi_wr_softint [3]}} & asi_wr_data [16:0] ) |
5521 ({17 { asi_wr_set_softint [3]}} & asi_wr_data [16:0] ) |
5522 ({17 {~asi_wr_softint [3]}} & softint3 [16:0] ) |
5523 ({1'b0, fls_pmu_request[3], {15 {1'b0}}} ) ;
5524assign softint3_mask[16:0] =
5525 ({17 {~asi_wr_clear_softint [3]}} ) |
5526 ({17 { asi_wr_clear_softint [3]}} & ~asi_wr_data [16:0] ) ;
5527assign softint3_in[16:0] =
5528 (softint3_mux[16:0] & softint3_mask[16:0]) | tick3_compare[16:0];
5529
5530// STICK_CMPR
5531assign tick2_compare[16] =
5532 (tic_compare[4:3] == 2'b01) & (tic_compare[2]) &
5533 (tic_compare[1:0] == 2'b10) &
5534 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[2]);
5535// TICK_CMPR
5536assign tick2_compare[0] =
5537 (tic_compare[4:3] == 2'b00) & (tic_compare[2]) &
5538 (tic_compare[1:0] == 2'b10) &
5539 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[2]);
5540assign tick2_compare[15:1] = 15'h0000;
5541assign softint2_mux[16:0] =
5542 ({17 { asi_wr_softint [2]}} & asi_wr_data [16:0] ) |
5543 ({17 { asi_wr_set_softint [2]}} & asi_wr_data [16:0] ) |
5544 ({17 {~asi_wr_softint [2]}} & softint2 [16:0] ) |
5545 ({1'b0, fls_pmu_request[2], {15 {1'b0}}} ) ;
5546assign softint2_mask[16:0] =
5547 ({17 {~asi_wr_clear_softint [2]}} ) |
5548 ({17 { asi_wr_clear_softint [2]}} & ~asi_wr_data [16:0] ) ;
5549assign softint2_in[16:0] =
5550 (softint2_mux[16:0] & softint2_mask[16:0]) | tick2_compare[16:0];
5551
5552// STICK_CMPR
5553assign tick1_compare[16] =
5554 (tic_compare[4:3] == 2'b01) & (tic_compare[2]) &
5555 (tic_compare[1:0] == 2'b01) &
5556 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[1]);
5557// TICK_CMPR
5558assign tick1_compare[0] =
5559 (tic_compare[4:3] == 2'b00) & (tic_compare[2]) &
5560 (tic_compare[1:0] == 2'b01) &
5561 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[1]);
5562assign tick1_compare[15:1] = 15'h0000;
5563assign softint1_mux[16:0] =
5564 ({17 { asi_wr_softint [1]}} & asi_wr_data [16:0] ) |
5565 ({17 { asi_wr_set_softint [1]}} & asi_wr_data [16:0] ) |
5566 ({17 {~asi_wr_softint [1]}} & softint1 [16:0] ) |
5567 ({1'b0, fls_pmu_request[1], {15 {1'b0}}} ) ;
5568assign softint1_mask[16:0] =
5569 ({17 {~asi_wr_clear_softint [1]}} ) |
5570 ({17 { asi_wr_clear_softint [1]}} & ~asi_wr_data [16:0] ) ;
5571assign softint1_in[16:0] =
5572 (softint1_mux[16:0] & softint1_mask[16:0]) | tick1_compare[16:0];
5573
5574// STICK_CMPR
5575assign tick0_compare[16] =
5576 (tic_compare[4:3] == 2'b01) & (tic_compare[2]) &
5577 (tic_compare[1:0] == 2'b00) &
5578 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[0]);
5579// TICK_CMPR
5580assign tick0_compare[0] =
5581 (tic_compare[4:3] == 2'b00) & (tic_compare[2]) &
5582 (tic_compare[1:0] == 2'b00) &
5583 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[0]);
5584assign tick0_compare[15:1] = 15'h0000;
5585assign softint0_mux[16:0] =
5586 ({17 { asi_wr_softint [0]}} & asi_wr_data [16:0] ) |
5587 ({17 { asi_wr_set_softint [0]}} & asi_wr_data [16:0] ) |
5588 ({17 {~asi_wr_softint [0]}} & softint0 [16:0] ) |
5589 ({1'b0, fls_pmu_request[0], {15 {1'b0}}} ) ;
5590assign softint0_mask[16:0] =
5591 ({17 {~asi_wr_clear_softint [0]}} ) |
5592 ({17 { asi_wr_clear_softint [0]}} & ~asi_wr_data [16:0] ) ;
5593assign softint0_in[16:0] =
5594 (softint0_mux[16:0] & softint0_mask[16:0]) | tick0_compare[16:0];
5595
5596tlu_trl_ctl_msff_ctl_macro__width_17 softint3_lat (
5597 .scan_in(softint3_lat_wmr_scanin),
5598 .scan_out(softint3_lat_wmr_scanout),
5599 .siclk(spc_aclk_wmr),
5600 .din (softint3_in [16:0] ),
5601 .dout (softint3 [16:0] ),
5602 .l1clk(l1clk),
5603 .soclk(soclk)
5604);
5605
5606tlu_trl_ctl_msff_ctl_macro__width_17 softint2_lat (
5607 .scan_in(softint2_lat_wmr_scanin),
5608 .scan_out(softint2_lat_wmr_scanout),
5609 .siclk(spc_aclk_wmr),
5610 .din (softint2_in [16:0] ),
5611 .dout (softint2 [16:0] ),
5612 .l1clk(l1clk),
5613 .soclk(soclk)
5614);
5615
5616tlu_trl_ctl_msff_ctl_macro__width_17 softint1_lat (
5617 .scan_in(softint1_lat_wmr_scanin),
5618 .scan_out(softint1_lat_wmr_scanout),
5619 .siclk(spc_aclk_wmr),
5620 .din (softint1_in [16:0] ),
5621 .dout (softint1 [16:0] ),
5622 .l1clk(l1clk),
5623 .soclk(soclk)
5624);
5625
5626tlu_trl_ctl_msff_ctl_macro__width_17 softint0_lat (
5627 .scan_in(softint0_lat_wmr_scanin),
5628 .scan_out(softint0_lat_wmr_scanout),
5629 .siclk(spc_aclk_wmr),
5630 .din (softint0_in [16:0] ),
5631 .dout (softint0 [16:0] ),
5632 .l1clk(l1clk),
5633 .soclk(soclk)
5634);
5635
5636
5637
5638////////////////////////////////////////////////////////////////////////////////
5639// interrupt_level_n
5640// Only take interrupts that are larger than the value in PIL
5641
5642tlu_trl_ctl_msff_ctl_macro__width_4 pstate_ie_lat (
5643 .scan_in(pstate_ie_lat_scanin),
5644 .scan_out(pstate_ie_lat_scanout),
5645 .din (tsd_pstate_ie [3:0] ),
5646 .dout (pstate_ie [3:0] ),
5647 .l1clk(l1clk),
5648 .siclk(siclk),
5649 .soclk(soclk)
5650);
5651
5652assign pil3_mask[15:1] =
5653 {15 {~hpstate_hpriv[3] & pstate_ie[3] & ~trap_taken3[3]}} &
5654 {~(( pil3[3] & pil3[2] & pil3[1] & pil3[0]) ), // 15
5655 ~(( pil3[3] & pil3[2] & pil3[1] ) ), // 15-14
5656 ~(( pil3[3] & pil3[2] & pil3[1] ) |
5657 ( pil3[3] & pil3[2] & pil3[0]) ), // 15-14,13
5658 ~(( pil3[3] & pil3[2] ) ), // 15-12
5659 ~(( pil3[3] & pil3[2] ) |
5660 ( pil3[3] & pil3[1] & pil3[0]) ), // 15-12,11
5661 ~(( pil3[3] & pil3[2] ) |
5662 ( pil3[3] & pil3[1] ) ), // 15-12,11-10
5663 ~(( pil3[3] & pil3[2] ) |
5664 ( pil3[3] & pil3[1] ) |
5665 ( pil3[3] & pil3[0]) ), // 15-12,11-10,9
5666 ~(( pil3[3] ) ), // 15-8
5667 ~(( pil3[3] ) |
5668 ( pil3[2] & pil3[1] & pil3[0]) ), // 15-8,7
5669 ~(( pil3[3] ) |
5670 ( pil3[2] & pil3[1] ) ), // 15-8,7-6
5671 ~(( pil3[3] ) |
5672 ( pil3[2] & pil3[1] ) |
5673 ( pil3[2] & pil3[0]) ), // 15-8,7-6,5
5674 ~(( pil3[3] ) |
5675 ( pil3[2] ) ), // 15-8,7-4
5676 ~(( pil3[3] ) |
5677 ( pil3[2] ) |
5678 ( pil3[1] & pil3[0]) ), // 15-8,7-4,3
5679 ~(( pil3[3] ) |
5680 ( pil3[2] ) |
5681 ( pil3[1] ) ), // 15-8,7-4,3-2
5682 ~(( pil3[3] ) |
5683 ( pil3[2] ) |
5684 ( pil3[1] ) |
5685 ( pil3[0]) )}; //15-8,7-4,3-2,1
5686
5687assign pil2_mask[15:1] =
5688 {15 {~hpstate_hpriv[2] & pstate_ie[2] & ~trap_taken3[2]}} &
5689 {~(( pil2[3] & pil2[2] & pil2[1] & pil2[0]) ), // 15
5690 ~(( pil2[3] & pil2[2] & pil2[1] ) ), // 15-14
5691 ~(( pil2[3] & pil2[2] & pil2[1] ) |
5692 ( pil2[3] & pil2[2] & pil2[0]) ), // 15-14,13
5693 ~(( pil2[3] & pil2[2] ) ), // 15-12
5694 ~(( pil2[3] & pil2[2] ) |
5695 ( pil2[3] & pil2[1] & pil2[0]) ), // 15-12,11
5696 ~(( pil2[3] & pil2[2] ) |
5697 ( pil2[3] & pil2[1] ) ), // 15-12,11-10
5698 ~(( pil2[3] & pil2[2] ) |
5699 ( pil2[3] & pil2[1] ) |
5700 ( pil2[3] & pil2[0]) ), // 15-12,11-10,9
5701 ~(( pil2[3] ) ), // 15-8
5702 ~(( pil2[3] ) |
5703 ( pil2[2] & pil2[1] & pil2[0]) ), // 15-8,7
5704 ~(( pil2[3] ) |
5705 ( pil2[2] & pil2[1] ) ), // 15-8,7-6
5706 ~(( pil2[3] ) |
5707 ( pil2[2] & pil2[1] ) |
5708 ( pil2[2] & pil2[0]) ), // 15-8,7-6,5
5709 ~(( pil2[3] ) |
5710 ( pil2[2] ) ), // 15-8,7-4
5711 ~(( pil2[3] ) |
5712 ( pil2[2] ) |
5713 ( pil2[1] & pil2[0]) ), // 15-8,7-4,3
5714 ~(( pil2[3] ) |
5715 ( pil2[2] ) |
5716 ( pil2[1] ) ), // 15-8,7-4,3-2
5717 ~(( pil2[3] ) |
5718 ( pil2[2] ) |
5719 ( pil2[1] ) |
5720 ( pil2[0]) )}; //15-8,7-4,3-2,1
5721
5722assign pil1_mask[15:1] =
5723 {15 {~hpstate_hpriv[1] & pstate_ie[1] & ~trap_taken3[1]}} &
5724 {~(( pil1[3] & pil1[2] & pil1[1] & pil1[0]) ), // 15
5725 ~(( pil1[3] & pil1[2] & pil1[1] ) ), // 15-14
5726 ~(( pil1[3] & pil1[2] & pil1[1] ) |
5727 ( pil1[3] & pil1[2] & pil1[0]) ), // 15-14,13
5728 ~(( pil1[3] & pil1[2] ) ), // 15-12
5729 ~(( pil1[3] & pil1[2] ) |
5730 ( pil1[3] & pil1[1] & pil1[0]) ), // 15-12,11
5731 ~(( pil1[3] & pil1[2] ) |
5732 ( pil1[3] & pil1[1] ) ), // 15-12,11-10
5733 ~(( pil1[3] & pil1[2] ) |
5734 ( pil1[3] & pil1[1] ) |
5735 ( pil1[3] & pil1[0]) ), // 15-12,11-10,9
5736 ~(( pil1[3] ) ), // 15-8
5737 ~(( pil1[3] ) |
5738 ( pil1[2] & pil1[1] & pil1[0]) ), // 15-8,7
5739 ~(( pil1[3] ) |
5740 ( pil1[2] & pil1[1] ) ), // 15-8,7-6
5741 ~(( pil1[3] ) |
5742 ( pil1[2] & pil1[1] ) |
5743 ( pil1[2] & pil1[0]) ), // 15-8,7-6,5
5744 ~(( pil1[3] ) |
5745 ( pil1[2] ) ), // 15-8,7-4
5746 ~(( pil1[3] ) |
5747 ( pil1[2] ) |
5748 ( pil1[1] & pil1[0]) ), // 15-8,7-4,3
5749 ~(( pil1[3] ) |
5750 ( pil1[2] ) |
5751 ( pil1[1] ) ), // 15-8,7-4,3-2
5752 ~(( pil1[3] ) |
5753 ( pil1[2] ) |
5754 ( pil1[1] ) |
5755 ( pil1[0]) )}; //15-8,7-4,3-2,1
5756
5757assign pil0_mask[15:1] =
5758 {15 {~hpstate_hpriv[0] & pstate_ie[0] & ~trap_taken3[0]}} &
5759 {~(( pil0[3] & pil0[2] & pil0[1] & pil0[0]) ), // 15
5760 ~(( pil0[3] & pil0[2] & pil0[1] ) ), // 15-14
5761 ~(( pil0[3] & pil0[2] & pil0[1] ) |
5762 ( pil0[3] & pil0[2] & pil0[0]) ), // 15-14,13
5763 ~(( pil0[3] & pil0[2] ) ), // 15-12
5764 ~(( pil0[3] & pil0[2] ) |
5765 ( pil0[3] & pil0[1] & pil0[0]) ), // 15-12,11
5766 ~(( pil0[3] & pil0[2] ) |
5767 ( pil0[3] & pil0[1] ) ), // 15-12,11-10
5768 ~(( pil0[3] & pil0[2] ) |
5769 ( pil0[3] & pil0[1] ) |
5770 ( pil0[3] & pil0[0]) ), // 15-12,11-10,9
5771 ~(( pil0[3] ) ), // 15-8
5772 ~(( pil0[3] ) |
5773 ( pil0[2] & pil0[1] & pil0[0]) ), // 15-8,7
5774 ~(( pil0[3] ) |
5775 ( pil0[2] & pil0[1] ) ), // 15-8,7-6
5776 ~(( pil0[3] ) |
5777 ( pil0[2] & pil0[1] ) |
5778 ( pil0[2] & pil0[0]) ), // 15-8,7-6,5
5779 ~(( pil0[3] ) |
5780 ( pil0[2] ) ), // 15-8,7-4
5781 ~(( pil0[3] ) |
5782 ( pil0[2] ) |
5783 ( pil0[1] & pil0[0]) ), // 15-8,7-4,3
5784 ~(( pil0[3] ) |
5785 ( pil0[2] ) |
5786 ( pil0[1] ) ), // 15-8,7-4,3-2
5787 ~(( pil0[3] ) |
5788 ( pil0[2] ) |
5789 ( pil0[1] ) |
5790 ( pil0[0]) )}; //15-8,7-4,3-2,1
5791
5792assign {pil3_mask[16], pil3_mask[0]} =
5793 {pil3_mask[14], pil3_mask[14]};
5794assign {pil2_mask[16], pil2_mask[0]} =
5795 {pil2_mask[14], pil2_mask[14]};
5796assign {pil1_mask[16], pil1_mask[0]} =
5797 {pil1_mask[14], pil1_mask[14]};
5798assign {pil0_mask[16], pil0_mask[0]} =
5799 {pil0_mask[14], pil0_mask[14]};
5800
5801assign trl_pil_mask_15[3:0] =
5802 {pil3_mask[15], pil2_mask[15], pil1_mask[15], pil0_mask[15]};
5803
5804assign pmu_trap_mask_d =
5805 (pil3_mask[15] & fls_tid_d[1] & fls_tid_d[0]) |
5806 (pil2_mask[15] & fls_tid_d[1] & ~fls_tid_d[0]) |
5807 (pil1_mask[15] & ~fls_tid_d[1] & fls_tid_d[0]) |
5808 (pil0_mask[15] & ~fls_tid_d[1] & ~fls_tid_d[0]) ;
5809
5810tlu_trl_ctl_msff_ctl_macro__width_1 pmu_trap_mask_lat (
5811 .scan_in(pmu_trap_mask_lat_scanin),
5812 .scan_out(pmu_trap_mask_lat_scanout),
5813 .din (pmu_trap_mask_d ),
5814 .dout (pmu_trap_mask_e ),
5815 .l1clk(l1clk),
5816 .siclk(siclk),
5817 .soclk(soclk)
5818);
5819
5820assign tlu_pmu_trap_mask_e =
5821 pmu_trap_mask_e;
5822
5823assign sim3[15] =
5824 softint3[15] & pil3_mask[15];
5825assign sim3[14] =
5826 (softint3[16] & pil3_mask[16]) |
5827 (softint3[14] & pil3_mask[14]) |
5828 (softint3[0] & pil3_mask[0]);
5829assign sim3[13:1] =
5830 softint3[13:1] & pil3_mask[13:1];
5831
5832assign sim2[15] =
5833 softint2[15] & pil2_mask[15];
5834assign sim2[14] =
5835 (softint2[16] & pil2_mask[16]) |
5836 (softint2[14] & pil2_mask[14]) |
5837 (softint2[0] & pil2_mask[0]);
5838assign sim2[13:1] =
5839 softint2[13:1] & pil2_mask[13:1];
5840
5841assign sim1[15] =
5842 softint1[15] & pil1_mask[15];
5843assign sim1[14] =
5844 (softint1[16] & pil1_mask[16]) |
5845 (softint1[14] & pil1_mask[14]) |
5846 (softint1[0] & pil1_mask[0]);
5847assign sim1[13:1] =
5848 softint1[13:1] & pil1_mask[13:1];
5849
5850assign sim0[15] =
5851 softint0[15] & pil0_mask[15];
5852assign sim0[14] =
5853 (softint0[16] & pil0_mask[16]) |
5854 (softint0[14] & pil0_mask[14]) |
5855 (softint0[0] & pil0_mask[0]);
5856assign sim0[13:1] =
5857 softint0[13:1] & pil0_mask[13:1];
5858
5859assign trl_iln_exc[3:0] =
5860 {(| sim3[15:1]), (| sim2[15:1]), (| sim1[15:1]), (| sim0[15:1])};
5861
5862// Encode int level (leading one's detector)
5863assign int_level_n_3[3] =
5864 (| sim3[15:8]);
5865
5866assign int_level_n_3[2] =
5867 (| sim3[15:12]) |
5868 ((| sim3[7:4]) & ~(| sim3[11:8]));
5869
5870assign int_level_n_3[1] =
5871 (| sim3[15:14]) |
5872 ((| sim3[11:10]) & ~(| sim3[13:12])) |
5873 ((| sim3[7:6]) & ~(| {sim3[13:12], sim3[9:8]})) |
5874 ((| sim3[3:2]) & ~(| {sim3[13:12], sim3[9:8], sim3[5:4]}));
5875
5876assign int_level_n_3[0] =
5877 sim3[15] |
5878 (sim3[13] & ~( {sim3[14]})) |
5879 (sim3[11] & ~(| {sim3[14], sim3[12]})) |
5880 (sim3[9] & ~(| {sim3[14], sim3[12], sim3[10]})) |
5881 (sim3[7] & ~(| {sim3[14], sim3[12], sim3[10], sim3[8]})) |
5882 (sim3[5] & ~(| {sim3[14], sim3[12], sim3[10], sim3[8], sim3[6]})) |
5883 (sim3[3] & ~(| {sim3[14], sim3[12], sim3[10], sim3[8], sim3[6],
5884 sim3[4]})) |
5885 (sim3[1] & ~(| {sim3[14], sim3[12], sim3[10], sim3[8], sim3[6],
5886 sim3[4], sim3[2]}));
5887
5888assign int_level_n_2[3] =
5889 (| sim2[15:8]);
5890
5891assign int_level_n_2[2] =
5892 (| sim2[15:12]) |
5893 ((| sim2[7:4]) & ~(| sim2[11:8]));
5894
5895assign int_level_n_2[1] =
5896 (| sim2[15:14]) |
5897 ((| sim2[11:10]) & ~(| sim2[13:12])) |
5898 ((| sim2[7:6]) & ~(| {sim2[13:12], sim2[9:8]})) |
5899 ((| sim2[3:2]) & ~(| {sim2[13:12], sim2[9:8], sim2[5:4]}));
5900
5901assign int_level_n_2[0] =
5902 sim2[15] |
5903 (sim2[13] & ~( {sim2[14]})) |
5904 (sim2[11] & ~(| {sim2[14], sim2[12]})) |
5905 (sim2[9] & ~(| {sim2[14], sim2[12], sim2[10]})) |
5906 (sim2[7] & ~(| {sim2[14], sim2[12], sim2[10], sim2[8]})) |
5907 (sim2[5] & ~(| {sim2[14], sim2[12], sim2[10], sim2[8], sim2[6]})) |
5908 (sim2[3] & ~(| {sim2[14], sim2[12], sim2[10], sim2[8], sim2[6],
5909 sim2[4]})) |
5910 (sim2[1] & ~(| {sim2[14], sim2[12], sim2[10], sim2[8], sim2[6],
5911 sim2[4], sim2[2]}));
5912
5913assign int_level_n_1[3] =
5914 (| sim1[15:8]);
5915
5916assign int_level_n_1[2] =
5917 (| sim1[15:12]) |
5918 ((| sim1[7:4]) & ~(| sim1[11:8]));
5919
5920assign int_level_n_1[1] =
5921 (| sim1[15:14]) |
5922 ((| sim1[11:10]) & ~(| sim1[13:12])) |
5923 ((| sim1[7:6]) & ~(| {sim1[13:12], sim1[9:8]})) |
5924 ((| sim1[3:2]) & ~(| {sim1[13:12], sim1[9:8], sim1[5:4]}));
5925
5926assign int_level_n_1[0] =
5927 sim1[15] |
5928 (sim1[13] & ~( {sim1[14]})) |
5929 (sim1[11] & ~(| {sim1[14], sim1[12]})) |
5930 (sim1[9] & ~(| {sim1[14], sim1[12], sim1[10]})) |
5931 (sim1[7] & ~(| {sim1[14], sim1[12], sim1[10], sim1[8]})) |
5932 (sim1[5] & ~(| {sim1[14], sim1[12], sim1[10], sim1[8], sim1[6]})) |
5933 (sim1[3] & ~(| {sim1[14], sim1[12], sim1[10], sim1[8], sim1[6],
5934 sim1[4]})) |
5935 (sim1[1] & ~(| {sim1[14], sim1[12], sim1[10], sim1[8], sim1[6],
5936 sim1[4], sim1[2]}));
5937
5938assign int_level_n_0[3] =
5939 (| sim0[15:8]);
5940
5941assign int_level_n_0[2] =
5942 (| sim0[15:12]) |
5943 ((| sim0[7:4]) & ~(| sim0[11:8]));
5944
5945assign int_level_n_0[1] =
5946 (| sim0[15:14]) |
5947 ((| sim0[11:10]) & ~(| sim0[13:12])) |
5948 ((| sim0[7:6]) & ~(| {sim0[13:12], sim0[9:8]})) |
5949 ((| sim0[3:2]) & ~(| {sim0[13:12], sim0[9:8], sim0[5:4]}));
5950
5951assign int_level_n_0[0] =
5952 sim0[15] |
5953 (sim0[13] & ~( {sim0[14]})) |
5954 (sim0[11] & ~(| {sim0[14], sim0[12]})) |
5955 (sim0[9] & ~(| {sim0[14], sim0[12], sim0[10]})) |
5956 (sim0[7] & ~(| {sim0[14], sim0[12], sim0[10], sim0[8]})) |
5957 (sim0[5] & ~(| {sim0[14], sim0[12], sim0[10], sim0[8], sim0[6]})) |
5958 (sim0[3] & ~(| {sim0[14], sim0[12], sim0[10], sim0[8], sim0[6],
5959 sim0[4]})) |
5960 (sim0[1] & ~(| {sim0[14], sim0[12], sim0[10], sim0[8], sim0[6],
5961 sim0[4], sim0[2]}));
5962
5963
5964
5965assign int_level_n[3:0] =
5966 ({4 {real_trap[3]}} & int_level_n_3_last[3:0]) |
5967 ({4 {real_trap[2]}} & int_level_n_2_last[3:0]) |
5968 ({4 {real_trap[1]}} & int_level_n_1_last[3:0]) |
5969 ({4 {real_trap[0]}} & int_level_n_0_last[3:0]) ;
5970
5971tlu_trl_ctl_msff_ctl_macro__width_16 int_level_n_lat (
5972 .scan_in(int_level_n_lat_scanin),
5973 .scan_out(int_level_n_lat_scanout),
5974 .din ({int_level_n_3 [3:0],
5975 int_level_n_2 [3:0],
5976 int_level_n_1 [3:0],
5977 int_level_n_0 [3:0]}),
5978 .dout ({int_level_n_3_last [3:0],
5979 int_level_n_2_last [3:0],
5980 int_level_n_1_last [3:0],
5981 int_level_n_0_last [3:0]}),
5982 .l1clk(l1clk),
5983 .siclk(siclk),
5984 .soclk(soclk)
5985);
5986
5987
5988
5989////////////////////////////////////////////////////////////////////////////////
5990// HINTP
5991
5992// HSTICK_CMPR
5993assign hstick3_compare =
5994 (tic_compare[4:3] == 2'b10) & (tic_compare[2]) &
5995 (tic_compare[1:0] == 2'b11) &
5996 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[3]);
5997assign hintp3_in =
5998 ( asi_wr_hintp[3] & asi_wr_data[0]) |
5999 (~asi_wr_hintp[3] & hintp3 ) |
6000 ( hstick3_compare) ;
6001
6002// HSTICK_CMPR
6003assign hstick2_compare =
6004 (tic_compare[4:3] == 2'b10) & (tic_compare[2]) &
6005 (tic_compare[1:0] == 2'b10) &
6006 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[2]);
6007assign hintp2_in =
6008 ( asi_wr_hintp[2] & asi_wr_data[0]) |
6009 (~asi_wr_hintp[2] & hintp2 ) |
6010 ( hstick2_compare) ;
6011
6012// HSTICK_CMPR
6013assign hstick1_compare =
6014 (tic_compare[4:3] == 2'b10) & (tic_compare[2]) &
6015 (tic_compare[1:0] == 2'b01) &
6016 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[1]);
6017assign hintp1_in =
6018 ( asi_wr_hintp[1] & asi_wr_data[0]) |
6019 (~asi_wr_hintp[1] & hintp1 ) |
6020 ( hstick1_compare) ;
6021
6022// HSTICK_CMPR
6023assign hstick0_compare =
6024 (tic_compare[4:3] == 2'b10) & (tic_compare[2]) &
6025 (tic_compare[1:0] == 2'b00) &
6026 ((~cel_tccd & ~cel_tcud) | ~tlu_ceter_de[0]);
6027assign hintp0_in =
6028 ( asi_wr_hintp[0] & asi_wr_data[0]) |
6029 (~asi_wr_hintp[0] & hintp0 ) |
6030 ( hstick0_compare) ;
6031
6032tlu_trl_ctl_msff_ctl_macro__width_4 hintp_lat (
6033 .scan_in(hintp_lat_wmr_scanin),
6034 .scan_out(hintp_lat_wmr_scanout),
6035 .siclk(spc_aclk_wmr),
6036 .din ({hintp3_in,
6037 hintp2_in,
6038 hintp1_in,
6039 hintp0_in }),
6040 .dout ({hintp3,
6041 hintp2,
6042 hintp1,
6043 hintp0 }),
6044 .l1clk(l1clk),
6045 .soclk(soclk)
6046);
6047
6048assign trl_hstick_match[3:0] =
6049 {hintp3, hintp2, hintp1, hintp0} &
6050 (~hpstate_hpriv[3:0] | pstate_ie[3:0]) &
6051 ~hst_req[3:0];
6052
6053assign trl_unhalt_[3:0] =
6054 ~({hintp3, hintp2, hintp1, hintp0} |
6055 {softint3[16], softint2[16], softint1[16], softint0[16]} |
6056 {softint3[0], softint2[0], softint1[0], softint0[0]} );
6057
6058
6059
6060////////////////////////////////////////////////////////////////////////////////
6061// TCA (Tick Compare register Array) ECC disrupting exception detection
6062
6063assign tccd_in[3] =
6064 (tic_compare[5]) &
6065 (tic_compare[1:0] == 2'b11) &
6066 cel_tccd;
6067assign tccd_in[2] =
6068 (tic_compare[5]) &
6069 (tic_compare[1:0] == 2'b10) &
6070 cel_tccd;
6071assign tccd_in[1] =
6072 (tic_compare[5]) &
6073 (tic_compare[1:0] == 2'b01) &
6074 cel_tccd;
6075assign tccd_in[0] =
6076 (tic_compare[5]) &
6077 (tic_compare[1:0] == 2'b00) &
6078 cel_tccd;
6079
6080assign tcud_in[3] =
6081 (tic_compare[5]) &
6082 (tic_compare[1:0] == 2'b11) &
6083 cel_tcud;
6084assign tcud_in[2] =
6085 (tic_compare[5]) &
6086 (tic_compare[1:0] == 2'b10) &
6087 cel_tcud;
6088assign tcud_in[1] =
6089 (tic_compare[5]) &
6090 (tic_compare[1:0] == 2'b01) &
6091 cel_tcud;
6092assign tcud_in[0] =
6093 (tic_compare[5]) &
6094 (tic_compare[1:0] == 2'b00) &
6095 cel_tcud;
6096
6097tlu_trl_ctl_msff_ctl_macro__width_4 tccd_exc_lat (
6098 .scan_in(tccd_exc_lat_scanin),
6099 .scan_out(tccd_exc_lat_scanout),
6100 .din (tccd_in [3:0] ),
6101 .dout (tccd [3:0] ),
6102 .l1clk(l1clk),
6103 .siclk(siclk),
6104 .soclk(soclk)
6105);
6106
6107tlu_trl_ctl_msff_ctl_macro__width_4 tcud_exc_lat (
6108 .scan_in(tcud_exc_lat_scanin),
6109 .scan_out(tcud_exc_lat_scanout),
6110 .din (tcud_in [3:0] ),
6111 .dout (tcud [3:0] ),
6112 .l1clk(l1clk),
6113 .siclk(siclk),
6114 .soclk(soclk)
6115);
6116
6117assign tlu_tccd[3:0] =
6118 tccd[3:0];
6119
6120assign tlu_tcud[3:0] =
6121 tcud[3:0];
6122
6123tlu_trl_ctl_msff_ctl_macro__width_2 tic_index_lat (
6124 .scan_in(tic_index_lat_scanin),
6125 .scan_out(tic_index_lat_scanout),
6126 .din (tic_compare [4:3] ),
6127 .dout (tic_index [4:3] ),
6128 .l1clk(l1clk),
6129 .siclk(siclk),
6130 .soclk(soclk)
6131);
6132
6133assign tlu_tca_index[1:0] =
6134 tic_index[4:3];
6135
6136
6137
6138////////////////////////////////////////////////////////////////////////////////
6139// TSA done/retry ECC precise exception detection
6140
6141assign trl_tsacu_en_in[3:0] =
6142 tsacu_en_in[3:0];
6143
6144assign tpe_exc_in[3:0] =
6145 tel_tsacu_exc[3:0];
6146
6147tlu_trl_ctl_msff_ctl_macro__width_4 tpe_exc_lat (
6148 .scan_in(tpe_exc_lat_scanin),
6149 .scan_out(tpe_exc_lat_scanout),
6150 .din (tpe_exc_in [3:0] ),
6151 .dout (tpe_exc [3:0] ),
6152 .l1clk(l1clk),
6153 .siclk(siclk),
6154 .soclk(soclk)
6155);
6156
6157tlu_trl_ctl_msff_ctl_macro__width_3 tsa_index_lat (
6158 .scan_in(tsa_index_lat_scanin),
6159 .scan_out(tsa_index_lat_scanout),
6160 .din (rmw_addr [2:0] ),
6161 .dout (tsa_index [2:0] ),
6162 .l1clk(l1clk),
6163 .siclk(siclk),
6164 .soclk(soclk)
6165);
6166
6167assign tlu_tsa_index[2:0] =
6168 tsa_index[2:0];
6169
6170
6171
6172////////////////////////////////////////////////////////////////////////////////
6173// ASI read and writes
6174
6175tlu_trl_ctl_msff_ctl_macro__width_4 p_trap_lat (
6176 .scan_in(p_trap_lat_scanin),
6177 .scan_out(p_trap_lat_scanout),
6178 .din (pmu_tlu_trap_m [3:0] ),
6179 .dout (p_trap [3:0] ),
6180 .l1clk(l1clk),
6181 .siclk(siclk),
6182 .soclk(soclk)
6183);
6184
6185assign rd_softint3[16:0] =
6186 softint3[16:0] | {1'b0, p_trap[3], {15 {1'b0}}};
6187assign rd_softint2[16:0] =
6188 softint2[16:0] | {1'b0, p_trap[2], {15 {1'b0}}};
6189assign rd_softint1[16:0] =
6190 softint1[16:0] | {1'b0, p_trap[1], {15 {1'b0}}};
6191assign rd_softint0[16:0] =
6192 softint0[16:0] | {1'b0, p_trap[0], {15 {1'b0}}};
6193
6194assign asi_data_in[16:0] =
6195 ({17 {asi_rd_tl [3]}} & {14'h0000, tl3 [2:0]}) |
6196 ({17 {asi_rd_tl [2]}} & {14'h0000, tl2 [2:0]}) |
6197 ({17 {asi_rd_tl [1]}} & {14'h0000, tl1 [2:0]}) |
6198 ({17 {asi_rd_tl [0]}} & {14'h0000, tl0 [2:0]}) |
6199 ({17 {asi_rd_pil [3]}} & {13'h0000, pil3 [3:0]}) |
6200 ({17 {asi_rd_pil [2]}} & {13'h0000, pil2 [3:0]}) |
6201 ({17 {asi_rd_pil [1]}} & {13'h0000, pil1 [3:0]}) |
6202 ({17 {asi_rd_pil [0]}} & {13'h0000, pil0 [3:0]}) |
6203 ({17 {asi_rd_gl [3]}} & {15'h0000, gl3 [1:0]}) |
6204 ({17 {asi_rd_gl [2]}} & {15'h0000, gl2 [1:0]}) |
6205 ({17 {asi_rd_gl [1]}} & {15'h0000, gl1 [1:0]}) |
6206 ({17 {asi_rd_gl [0]}} & {15'h0000, gl0 [1:0]}) |
6207 ({17 {asi_rd_softint [3]}} & {rd_softint3 [16:0]}) |
6208 ({17 {asi_rd_softint [2]}} & {rd_softint2 [16:0]}) |
6209 ({17 {asi_rd_softint [1]}} & {rd_softint1 [16:0]}) |
6210 ({17 {asi_rd_softint [0]}} & {rd_softint0 [16:0]}) |
6211 ({17 {asi_rd_hintp [3]}} & {16'h0000, hintp3 }) |
6212 ({17 {asi_rd_hintp [2]}} & {16'h0000, hintp2 }) |
6213 ({17 {asi_rd_hintp [1]}} & {16'h0000, hintp1 }) |
6214 ({17 {asi_rd_hintp [0]}} & {16'h0000, hintp0 }) ;
6215
6216tlu_trl_ctl_msff_ctl_macro__width_17 asi_data_lat (
6217 .scan_in(asi_data_lat_scanin),
6218 .scan_out(asi_data_lat_scanout),
6219 .din (asi_data_in [16:0] ),
6220 .dout (asi_data [16:0] ),
6221 .l1clk(l1clk),
6222 .siclk(siclk),
6223 .soclk(soclk)
6224);
6225
6226assign trl_asi_data[16:0] =
6227 asi_data[16:0];
6228
6229
6230
6231
6232////////////////////////////////////////////////////////////////////////////////
6233// Wait for store buffer empty if entering RED state
6234
6235assign enter_red_in[3:0] =
6236 {(tl3[2:0] == maxtl_minus_one[2:0]) & hpstate_hpriv[3],
6237 (tl2[2:0] == maxtl_minus_one[2:0]) & hpstate_hpriv[2],
6238 (tl1[2:0] == maxtl_minus_one[2:0]) & hpstate_hpriv[1],
6239 (tl0[2:0] == maxtl_minus_one[2:0]) & hpstate_hpriv[0]};
6240
6241tlu_trl_ctl_msff_ctl_macro__width_4 enter_red_lat (
6242 .scan_in(enter_red_lat_scanin),
6243 .scan_out(enter_red_lat_scanout),
6244 .din (enter_red_in [3:0] ),
6245 .dout (enter_red [3:0] ),
6246 .l1clk(l1clk),
6247 .siclk(siclk),
6248 .soclk(soclk)
6249);
6250
6251assign stb_wait[3:0] =
6252 enter_red[3:0] & ~stb_empty[3:0];
6253
6254tlu_trl_ctl_msff_ctl_macro__width_4 stb_empty_lat (
6255 .scan_in(stb_empty_lat_scanin),
6256 .scan_out(stb_empty_lat_scanout),
6257 .din (lsu_stb_empty [3:0] ),
6258 .dout (stb_empty [3:0] ),
6259 .l1clk(l1clk),
6260 .siclk(siclk),
6261 .soclk(soclk)
6262);
6263
6264
6265
6266////////////////////////////////////////////////////////////////////////////////
6267// Block dispatch for done and retry
6268// First, block from cycle of flush until done/retry wins arbitration
6269// Second, block on cycle of redirect
6270// IRF only does single pass for CWP change, so don't need
6271// second block
6272// Cycle diagram ( TR - trap redirect TF - trap flush CU - TLU-EXU CWP msg
6273// RM - RML decode RT - RML to IRF ID - IRF decode
6274// IS - IRF save IR - IRF restore EC - EXU CWP update
6275// WB - TLU window block
6276// EB - EXU window block
6277// t - trlX.trap[] signal r - read TSA c - check ECC
6278// p - generate redirect PC
6279// (Redirect takes at least two cycles because must arbitrate in first
6280// cycle and then read TSA in second cycle)
6281// (IRF requires 0 to NOT be a read or write for this thread)
6282// TR | t r c p X
6283// BF | N
6284// F | N
6285// C | N
6286// P | N
6287// D | D H H H N
6288// E | D H H H .
6289// M | D H H H .
6290// B | D H H H .
6291// TF | X | | .
6292// CU | t r c X | | .
6293// RT | X | | .
6294// ID | X X | .
6295// IS | X | .
6296// IR | X 0 .
6297// EC | X
6298// WB | X X X
6299//
6300// Instruction N reads operands from new window, so swap must be
6301// complete before it reaches D
6302
6303assign window_block_in =
6304 (| pdon_req_in[3:0]) | (| pret_req_in[3:0]) |
6305 ccr_cwp_valid;
6306
6307tlu_trl_ctl_msff_ctl_macro__width_1 window_block_lat (
6308 .scan_in(window_block_lat_scanin),
6309 .scan_out(window_block_lat_scanout),
6310 .din (window_block_in ),
6311 .dout (tlu_window_block ),
6312 .l1clk(l1clk),
6313 .siclk(siclk),
6314 .soclk(soclk)
6315);
6316
6317
6318
6319////////////////////////////////////////////////////////////////////////////////
6320// Block done and retry when EXU needs hole for CWP change or when earlier
6321// done or retry needs hole for CWP change
6322// EB | X
6323// P | H
6324// D | H
6325// E | H
6326// M | H
6327// B | H
6328// TF | |
6329// CU | t r c X |
6330// RT | X |
6331// ID | 0
6332//
6333// So window_block doesn't happen until the trap_taken cycle
6334
6335assign hole_in_p =
6336 exu_tlu_window_block;
6337
6338assign stall_don_ret = don_ret_last_last;
6339
6340
6341
6342////////////////////////////////////////////////////////////////////////////////
6343// Assign outputs
6344
6345tlu_trl_ctl_msff_ctl_macro__width_11 take_lat (
6346 .scan_in(take_lat_scanin),
6347 .scan_out(take_lat_scanout),
6348 .din ({take_por,
6349 take_htd,
6350 take_lsr,
6351 take_fpe,
6352 take_don,
6353 take_ret,
6354 take_res,
6355 take_ssr,
6356 take_ssr_por,
6357 take_icp,
6358 take_nns }),
6359 .dout ({take_por_last,
6360 take_htd_last,
6361 take_lsr_last,
6362 take_fpe_last,
6363 ptake_don_last,
6364 ptake_ret_last,
6365 take_res_last,
6366 take_ssr_last,
6367 take_ssr_por_last,
6368 take_icp_last,
6369 take_nns_last }),
6370 .l1clk(l1clk),
6371 .siclk(siclk),
6372 .soclk(soclk)
6373);
6374
6375assign take_don_last =
6376 ptake_don_last & ~hole_in_p;
6377
6378assign take_ret_last =
6379 ptake_ret_last & ~hole_in_p;
6380
6381assign take_htd_icp_last =
6382 take_htd_last | take_icp_last;
6383
6384tlu_trl_ctl_msff_ctl_macro__width_5 take_last_lat (
6385 .scan_in(take_last_lat_scanin),
6386 .scan_out(take_last_lat_scanout),
6387 .din ({take_htd_icp_last,
6388 take_don_last,
6389 don_ret_last,
6390 take_don_last_last,
6391 don_ret_last_last }),
6392 .dout ({take_htd_icp_last_last,
6393 take_don_last_last,
6394 don_ret_last_last,
6395 take_don_last_last_last,
6396 don_ret_last_last_last }),
6397 .l1clk(l1clk),
6398 .siclk(siclk),
6399 .soclk(soclk)
6400);
6401
6402assign take_lsr_nns_last =
6403 take_lsr_last | take_nns_last;
6404
6405tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 thread_sel_lat (
6406 .scan_in(thread_sel_lat_scanin),
6407 .scan_out(thread_sel_lat_scanout),
6408 .l1clk ({l1clk_pm4 ,
6409 l1clk_pm3 ,
6410 l1clk_pm2 ,
6411 l1clk_pm1 }),
6412 .din (real_trap [3:0] ),
6413 .dout (real_trap_last [3:0] ),
6414 .siclk(siclk),
6415 .soclk(soclk)
6416);
6417
6418assign thread_sel[3:0] =
6419 real_trap_last[3:0];
6420
6421assign trl_thread_sel[3:0] =
6422 thread_sel[3:0];
6423
6424assign suppress_don_ret_taken_ =
6425 ~hole_in_p | ~(ptake_don_last | ptake_ret_last);
6426
6427assign no_pstate_update =
6428 take_lsr_last | take_fpe_last |
6429 take_itw_last | take_htd_last | take_res_last |
6430 take_ssr_last | take_nns_last | take_icp_last |
6431 ptake_don_last | ptake_ret_last;
6432
6433assign trl_pstate_thread_sel[4:0] =
6434 {no_pstate_update | ~(| trap_taken3[3:0]),
6435 {4 {~no_pstate_update}} & trap_taken3[3:0]};
6436
6437// Create select for TBA / HTBA muxing
6438// Bits 1:0 are the TID
6439// Bit 2 is the HTBA select (indicates trap goes to or stays in HPRIV)
6440
6441assign trl_tba_sel[2] =
6442 (| (thread_sel[3:0] & hpstate_hpriv[3:0])) |
6443 other_trap | reset_trap;
6444
6445assign trl_tba_sel[1] =
6446 thread_sel[3] | thread_sel[2];
6447
6448assign trl_tba_sel[0] =
6449 thread_sel[3] | thread_sel[1];
6450
6451assign trl_pstate_en =
6452 ((| trap_taken3[3:0]) & suppress_don_ret_taken_ & ~no_pstate_update) |
6453 asi_trl_pstate_en |
6454 (| npc_sel_tnpc[3:0]);
6455
6456// PC and NPC are masked by PSTATE.am before going to TSA
6457tlu_trl_ctl_msff_ctl_macro__width_4 pstate_am_lat (
6458 .scan_in(pstate_am_lat_scanin),
6459 .scan_out(pstate_am_lat_scanout),
6460 .din (tsd_pstate_am [3:0] ),
6461 .dout (pstate_am [3:0] ),
6462 .l1clk(l1clk),
6463 .siclk(siclk),
6464 .soclk(soclk)
6465);
6466
6467
6468assign trl_pc_thread_sel[3:0] =
6469 trap_taken4[3:0];
6470
6471assign trl_pc_pstate_am_ =
6472 ~(| (trap_taken4[3:0] & pstate_am[3:0]));
6473
6474assign take_ssr_pc_valid =
6475 take_ssr & (| (trap[3:0] & fls_pc_valid[3:0]));
6476assign take_ssr_pc_invalid =
6477 take_ssr & (| (trap[3:0] & ~fls_pc_valid[3:0]));
6478
6479assign pc_sel_pc_in =
6480 take_htd | take_res | take_ssr_pc_invalid | take_nns | take_icp;
6481
6482assign pc_sel_npc_in =
6483 take_lsr | take_fpe | take_ssr_pc_valid;
6484
6485assign pc_sel_trap_in =
6486 ~take_htd & ~take_res & ~take_ssr & ~take_nns & ~take_icp &
6487 ~take_don_last &
6488 ~take_ret_last & ~take_reset & ~take_lsr & ~take_fpe & ~take_itw &
6489 (| (trap_ndr[3:0] & ~dbz_incoming[3:0] &
6490 ~fei_or_fof_incoming[3:0])) &
6491 ~take_don & ~take_ret &
6492 ~(next_trap_to_red | next_trap_to_err);
6493
6494assign pc_sel_reset0_in =
6495 ~take_htd & ~take_res & ~take_ssr & ~take_nns & ~take_icp &
6496 ~take_don_last & ~take_ret_last & take_reset;
6497assign pc_sel_reset1_in =
6498 next_trap_to_red | next_trap_to_err;
6499
6500assign pc_done_in =
6501 take_don_last;
6502
6503assign pc_retry_in =
6504 take_ret_last;
6505
6506assign pc_tte_in =
6507 take_itw | take_itw_last;
6508
6509tlu_trl_ctl_msff_ctl_macro__width_8 pc_npc_sel_lat (
6510 .scan_in(pc_npc_sel_lat_scanin),
6511 .scan_out(pc_npc_sel_lat_scanout),
6512 .din ({pc_sel_pc_in,
6513 pc_sel_npc_in,
6514 pc_sel_trap_in,
6515 pc_sel_reset0_in,
6516 pc_sel_reset1_in,
6517 pc_done_in,
6518 pc_retry_in,
6519 pc_tte_in }),
6520 .dout ({pc_sel_pc,
6521 pc_sel_npc,
6522 pc_sel_trap,
6523 pc_sel_reset0,
6524 pc_sel_reset1,
6525 pc_done,
6526 pc_retry,
6527 pc_tte }),
6528 .l1clk(l1clk),
6529 .siclk(siclk),
6530 .soclk(soclk)
6531);
6532
6533assign trl_pct_trap_pc_en =
6534 pc_sel_pc | pc_sel_npc | pc_sel_trap | pc_sel_reset0 | pc_sel_reset1 |
6535 pc_done | pc_retry | pc_tte;
6536
6537assign trl_pc_sel_pc =
6538 pc_sel_pc;
6539
6540assign trl_pc_sel_npc =
6541 pc_sel_npc;
6542
6543assign trl_pc_done =
6544 pc_done;
6545
6546assign trl_pc_retry =
6547 pc_retry;
6548
6549assign trl_pc_tte =
6550 pc_tte;
6551
6552assign trl_pc_sel_trap =
6553 pc_sel_trap & (| trap_taken4[3:0]);
6554
6555assign trl_pc_sel_reset =
6556 pc_sel_reset0 | (pc_sel_reset1 & (| trap_taken4[3:0]));
6557
6558assign wr_en_in_in =
6559 (take_reset | take_disrupt | take_div | take_long | take_fgu |
6560 take_other) & ~take_htd;
6561assign wr_en_func_in =
6562 wr_en_in_p | rmw_tsa;
6563assign wr_en_in =
6564 (wr_en_func_in & ~mbist_run) | asi_mbist_tsa_wr_en;
6565
6566assign rd_en_in =
6567 ((take_don_ret | asi_preempt_done_retry) & ~mbist_run) |
6568 asi_mbist_tsa_rd_en;
6569
6570tlu_trl_ctl_msff_ctl_macro__width_4 stack_lat (
6571 .scan_in(stack_lat_scanin),
6572 .scan_out(stack_lat_scanout),
6573 .din ({wr_en_in_in,
6574 wr_en_in,
6575 rd_en_in,
6576 tsa_rd_en }),
6577 .dout ({wr_en_in_p,
6578 tsa_wr_en,
6579 tsa_rd_en,
6580 tsa_rd_en_last }),
6581 .l1clk(l1clk),
6582 .siclk(siclk),
6583 .soclk(soclk)
6584);
6585
6586assign trl_tsa_wr_en =
6587 tsa_wr_en;
6588assign trl_tsa_rd_en =
6589 rd_en_in;
6590
6591assign trl_save_tsa =
6592 (| check_tsa_ecc_in[3:0]);
6593
6594assign trl_tsd_tsa_en =
6595 tsa_rd_en;
6596
6597assign trl_tsd_tsa_wd_en =
6598 tsa_rd_en_last | wr_en_in;
6599
6600assign don_ret_last =
6601 take_don_last | take_ret_last;
6602
6603assign enable_tel_in =
6604 (| (trap[3:0] & tlu_ceter_pscce[3:0])) | lsu_tlu_pmen;
6605
6606tlu_trl_ctl_msff_ctl_macro__width_3 check_tel_lat (
6607 .scan_in(check_tel_lat_scanin),
6608 .scan_out(check_tel_lat_scanout),
6609 .din ({enable_tel_in ,
6610 enable_tel ,
6611 check_tel_in }),
6612 .dout ({enable_tel ,
6613 check_tel_in ,
6614 check_tel }),
6615 .l1clk(l1clk),
6616 .siclk(siclk),
6617 .soclk(soclk)
6618);
6619
6620assign trl_tel_en =
6621 enable_tel | check_tel_in | check_tel;
6622
6623assign take_notrap_not_suppressed =
6624 take_notrap &
6625 ~(| (notrap_pre_trap[3:0] &
6626 (dbz_incoming[3:0] | fei_or_fof_incoming[3:0])));
6627
6628assign m107773_suppress_notrap_ =
6629 ~(take_notrap &
6630 (| (notrap_pre_trap[3:0] &
6631 (fls_ipe_request[3:0] | fls_pra_request[3:0]))));
6632
6633assign trap_pc_valid_in_in =
6634 (take_reset | take_disrupt | take_div | take_long | take_fgu |
6635 take_other | take_notrap_not_suppressed) & m107773_suppress_notrap_;
6636
6637assign trap_pc_valid_in =
6638 (ccr_cwp_valid | ptrap_pc_valid_in) & ~kill_fpe & ~kill_lsr_nns;
6639
6640// If floating point predicted exception is "just ahead of" actual exception,
6641// kill FPE redirect
6642assign kill_fpe =
6643 take_fpe_last &
6644 (| ((fls_fei_request[3:0] |
6645 fls_fof_request[3:0]) & trap_taken4[3:0]));
6646
6647// If LSR is "just ahead of" actual long-latency exception, kill LSR redirect
6648assign kill_lsr_nns =
6649 take_lsr_nns_last &
6650 (| ((fls_eer_request[3:0] |
6651 fls_ftt_request[3:0] | fls_ipe_request[3:0] |
6652 fls_fof_request[3:0] |
6653 fls_dbz_request[3:0] |
6654 fls_dae_request[3:0] |
6655 fls_ime_request[3:0] | fls_dme_request[3:0] ) &
6656 trap_taken4[3:0]));
6657
6658// Also need to suppress LSR "just ahead of" ipe or pra
6659assign m107773_suppress_pcvi =
6660 take_lsr_nns_last &
6661 (| (trap_taken4[3:0] &
6662 (fls_ipe_request[3:0] | fls_pra_request[3:0])));
6663
6664assign real_trap_pc_valid_in =
6665 trap_pc_valid_in & ~m107773_suppress_pcvi;
6666
6667assign npc_is_nonseq =
6668 | (trap_ndr[3:0] & pct_npc_is_nonseq[3:0]);
6669
6670assign htd_res_icp_when_npc_nonseq =
6671 (take_htd | take_res | take_icp) & npc_is_nonseq;
6672
6673tlu_trl_ctl_msff_ctl_macro__width_1 htd_res_icp_when_npc_nonseq_last_lat (
6674 .scan_in(htd_res_icp_when_npc_nonseq_last_lat_scanin),
6675 .scan_out(htd_res_icp_when_npc_nonseq_last_lat_scanout),
6676 .din (htd_res_icp_when_npc_nonseq ),
6677 .dout (htd_res_icp_when_npc_nonseq_last ),
6678 .l1clk(l1clk),
6679 .siclk(siclk),
6680 .soclk(soclk)
6681);
6682
6683
6684assign retry_in_in =
6685 nns_exc | take_nns | take_ssr | take_ssr_por |
6686 htd_res_icp_when_npc_nonseq;
6687
6688assign retry_in =
6689 (pretry_in & ~(| {tel_tsacu_exc[3:0]})) |
6690 (trap_pc_valid_in & (tcu_ss_mode | tcu_do_mode));
6691
6692// Create single step complete exception (similar to idle) on single step
6693assign trl_ssc_exc[3:0] =
6694 trap_taken4[3:0] & {4 {take_ssr_last | take_ssr_por_last}};
6695
6696tlu_trl_ctl_msff_ctl_macro__width_4 pc_valid_lat (
6697 .scan_in(pc_valid_lat_scanin),
6698 .scan_out(pc_valid_lat_scanout),
6699 .din ({trap_pc_valid_in_in ,
6700 real_trap_pc_valid_in ,
6701 retry_in_in ,
6702 retry_in }),
6703 .dout ({ptrap_pc_valid_in ,
6704 trap_pc_valid ,
6705 pretry_in ,
6706 tlu_retry }),
6707 .l1clk(l1clk),
6708 .siclk(siclk),
6709 .soclk(soclk)
6710);
6711
6712assign tlu_trap_pc_valid =
6713 trap_pc_valid;
6714
6715assign trap_tid_in[1:0] =
6716 ({2 { don_ret_last_last_last}} & ccr_cwp_asi_tid[1:0]) |
6717 ({2 {~don_ret_last_last_last}} & wr_addr_in [4:3]) ;
6718
6719tlu_trl_ctl_msff_ctl_macro__width_2 trap_tid_lat (
6720 .scan_in(trap_tid_lat_scanin),
6721 .scan_out(trap_tid_lat_scanout),
6722 .din (trap_tid_in [1:0] ),
6723 .dout (trap_tid [1:0] ),
6724 .l1clk(l1clk),
6725 .siclk(siclk),
6726 .soclk(soclk)
6727);
6728
6729assign tlu_trap_tid[1:0] =
6730 trap_tid[1:0];
6731
6732tlu_trl_ctl_msff_ctl_macro__width_2 take_itw_last_lat (
6733 .scan_in(take_itw_last_lat_scanin),
6734 .scan_out(take_itw_last_lat_scanout),
6735 .din ({take_itw ,
6736 take_itw_last }),
6737 .dout ({take_itw_last ,
6738 take_itw_last_last }),
6739 .l1clk(l1clk),
6740 .siclk(siclk),
6741 .soclk(soclk)
6742);
6743
6744assign tlu_itlb_reload =
6745 take_itw_last_last;
6746
6747tlu_trl_ctl_msff_ctl_macro__width_1 icache_perr_lat (
6748 .scan_in(icache_perr_lat_scanin),
6749 .scan_out(icache_perr_lat_scanout),
6750 .din (take_icp_last ),
6751 .dout (take_icp_last_last ),
6752 .l1clk(l1clk),
6753 .siclk(siclk),
6754 .soclk(soclk)
6755);
6756
6757assign tlu_ifu_invalidate =
6758 take_icp_last_last;
6759
6760assign reset_trap_in =
6761 next_trap_to_red | next_trap_to_err | take_por | take_xir | take_sir;
6762
6763assign in_red =
6764 | (tsd_hpstate_red[3:0] & real_trap[3:0]);
6765
6766assign next_trap_to_red =
6767 (((trap_tl[2:0] == maxtl_minus_one[2:0]) & (| real_trap[3:0])) |
6768 in_red) & ~take_por & ~next_trap_to_err;
6769
6770assign next_trap_to_err =
6771 (trap_tl[2:0] == maxtl[2:0]) &
6772 (| real_trap[3:0]) & ~take_por;
6773
6774assign next_trap_to_hpriv =
6775 (trap_tl[2:0] >= maxptl[2:0]) &
6776 (trap_tl[2:0] < maxtl_minus_one[2:0]) & // avoid red, err
6777 ~take_por & ~take_xir & ~take_sir & ~hpriv & ~in_red;
6778
6779assign hpriv =
6780 (| (real_trap[3:0] & hpstate_hpriv[3:0]));
6781
6782assign hpriv_last =
6783 (| (real_trap_last[3:0] & hpstate_hpriv[3:0]));
6784
6785assign next_trap_in_hpriv =
6786 hpriv;
6787
6788assign sip =
6789 take_fpd | take_fgu | take_tof | take_clw | take_div |
6790 take_snn | take_sno | take_fnn | take_fno | take_pro | take_iln |
6791 take_pmu | take_mqr | take_dqr | take_rqr |
6792 take_tcc_nh |
6793 take_tct ;
6794
6795assign stay_in_priv_in =
6796 sip & ~next_trap_to_red & ~next_trap_to_err & ~next_trap_to_hpriv &
6797 ~next_trap_in_hpriv;
6798
6799assign take_tcc_nh =
6800 take_tcc & ~tcc_number[7];
6801
6802assign take_tcc_h =
6803 take_tcc & tcc_number[7];
6804
6805assign pre_oti =
6806 take_itm | take_ipv | take_inp | take_iua | take_iar | take_irr |
6807 take_mar | take_mrr |
6808 take_ade | take_ivt | take_hst | take_sma |
6809 take_cwq | take_iae | take_ipe | take_ill | take_ldf | take_stf |
6810 take_dap | take_maa | take_pra | take_dia |
6811 take_ups | take_dpv | take_dnc |
6812 take_dnf | take_dso | take_paw |
6813 take_dae | take_dtm | take_irt | take_drt |
6814 take_tlz | take_him | take_hdm | take_tcc_h |
6815 take_ftt | take_eer | take_ime | take_dme |
6816 take_iit | take_dit | take_ibp |
6817 take_vaw | take_iaw ;
6818
6819assign oti =
6820 (pre_oti & ~next_trap_to_red & ~next_trap_to_err) |
6821 (next_trap_to_hpriv & ~next_trap_to_red & ~next_trap_to_err) |
6822 (sip & next_trap_in_hpriv & ~next_trap_to_red & ~next_trap_to_err);
6823
6824assign other_trap_in =
6825 oti;
6826
6827tlu_trl_ctl_msff_ctl_macro__width_3 pstate_sel_lat (
6828 .scan_in(pstate_sel_lat_scanin),
6829 .scan_out(pstate_sel_lat_scanout),
6830 .din ({reset_trap_in,
6831 stay_in_priv_in,
6832 other_trap_in }),
6833 .dout ({reset_trap,
6834 stay_in_priv,
6835 other_trap }),
6836 .l1clk(l1clk),
6837 .siclk(siclk),
6838 .soclk(soclk)
6839);
6840
6841assign trl_reset_trap =
6842 reset_trap;
6843
6844assign trl_stay_in_priv =
6845 stay_in_priv;
6846
6847assign trl_other_trap =
6848 other_trap;
6849
6850
6851assign ccr_cwp_valid =
6852 don_ret_last_last_last & (~(| tel_tsacu_exc[3:0]) | ~check_tel);
6853
6854assign ccr_cwp_valid_per_thread[3:0] =
6855 {4 {don_ret_last_last_last}} &
6856 (~tel_tsacu_exc[3:0] | {4 {~check_tel}});
6857
6858assign tlu_ccr_cwp_valid =
6859 ccr_cwp_valid;
6860assign tlu_asi_valid =
6861 ccr_cwp_valid;
6862
6863assign ccr_cwp_asi_tid_in_in[1:0] =
6864 {trap_taken[3] | trap_taken[2],
6865 trap_taken[3] | trap_taken[1]};
6866
6867tlu_trl_ctl_msff_ctl_macro__width_4 ccr_cwp_asi_tid_lat (
6868 .scan_in(ccr_cwp_asi_tid_lat_scanin),
6869 .scan_out(ccr_cwp_asi_tid_lat_scanout),
6870 .din ({ccr_cwp_asi_tid_in_in [1:0],
6871 ccr_cwp_asi_tid_in [1:0]}),
6872 .dout ({ccr_cwp_asi_tid_in [1:0],
6873 ccr_cwp_asi_tid [1:0]}),
6874 .l1clk(l1clk),
6875 .siclk(siclk),
6876 .soclk(soclk)
6877);
6878
6879assign tlu_ccr_cwp_tid =
6880 ccr_cwp_asi_tid[1:0];
6881assign tlu_asi_tid[1:0] =
6882 ccr_cwp_asi_tid[1:0];
6883
6884assign trl_asireg_sel[4:0] =
6885 {~ccr_cwp_valid,
6886 ccr_cwp_valid_per_thread[3:0] &
6887 { ccr_cwp_asi_tid[1] & ccr_cwp_asi_tid[0],
6888 ccr_cwp_asi_tid[1] & ~ccr_cwp_asi_tid[0],
6889 ~ccr_cwp_asi_tid[1] & ccr_cwp_asi_tid[0],
6890 ~ccr_cwp_asi_tid[1] & ~ccr_cwp_asi_tid[0]}};
6891
6892assign trl_asireg_en =
6893 (| asi_wr_asireg[3:0]) | ccr_cwp_valid;
6894
6895
6896
6897assign tlu_release_tte[3:0] =
6898 {4 {take_itw_last}} & trap_taken4[3:0];
6899
6900
6901
6902//////////////////////////////////////////////////////////////////////
6903//
6904// Have to clear lsu_control_reg on any trap that sets HPSTATE.red
6905//
6906
6907assign clear_ctl_reg_in[3:0] =
6908 {4 {reset_trap}} & trap_taken4[3:0];
6909
6910tlu_trl_ctl_msff_ctl_macro__width_4 clear_ctl_reg_lat (
6911 .scan_in(clear_ctl_reg_lat_scanin),
6912 .scan_out(clear_ctl_reg_lat_scanout),
6913 .din (clear_ctl_reg_in [3:0] ),
6914 .dout (clear_ctl_reg [3:0] ),
6915 .l1clk(l1clk),
6916 .siclk(siclk),
6917 .soclk(soclk)
6918);
6919
6920assign tlu_lsu_clear_ctl_reg_[3:0] =
6921 ~clear_ctl_reg[3:0];
6922
6923
6924//////////////////////////////////////////////////////////////////////
6925//
6926// Determine when retry PC, NPC are nonsequential
6927//
6928
6929
6930assign pnpc_nonseq_in[3:0] =
6931 {4 {tsa_tnpc_nonseq & take_ret_last & suppress_don_ret_taken_}} &
6932 trap_taken[3:0];
6933
6934assign npc_nonseq_in[3:0] =
6935 pnpc_nonseq_in[3:0] |
6936 ({4 {htd_res_icp_when_npc_nonseq_last}} & trap_taken[3:0]);
6937
6938assign nns_exc_in =
6939 | pnpc_nonseq_in[3:0];
6940
6941tlu_trl_ctl_msff_ctl_macro__width_5 npc_nonseq_lat (
6942 .scan_in(npc_nonseq_lat_scanin),
6943 .scan_out(npc_nonseq_lat_scanout),
6944 .din ({npc_nonseq_in [3:0],
6945 nns_exc_in }),
6946 .dout ({npc_nonseq [3:0],
6947 nns_exc }),
6948 .l1clk(l1clk),
6949 .siclk(siclk),
6950 .soclk(soclk)
6951);
6952
6953assign trl_nns_exc[3:0] =
6954 npc_nonseq[3:0];
6955
6956
6957
6958////////////////////////////////////////////////////////////////////////////////
6959//
6960// Control load of PC, NPC (on trap, retry, done)
6961//
6962
6963assign trap_tid_in_dec[3:0] =
6964 { trap_tid_in[1] & trap_tid_in[0],
6965 trap_tid_in[1] & ~trap_tid_in[0],
6966 ~trap_tid_in[1] & trap_tid_in[0],
6967 ~trap_tid_in[1] & ~trap_tid_in[0]};
6968
6969// On return from hardware tablewalk, PC and NPC are already correct,
6970// just need to invalidate them
6971assign pc_sel_trap_pc_in[3:0] =
6972 {4 {trap_pc_valid_in & ~take_lsr_last &
6973 ~take_htd_last & ~take_fpe_last & ~take_nns_last &
6974 ~take_icp_last}} &
6975 trap_tid_in_dec[3:0];
6976
6977tlu_trl_ctl_msff_ctl_macro__width_4 pc_sel_trap_pc_lat (
6978 .scan_in(pc_sel_trap_pc_lat_scanin),
6979 .scan_out(pc_sel_trap_pc_lat_scanout),
6980 .din (pc_sel_trap_pc_in [3:0] ),
6981 .dout (pc_sel_trap_pc [3:0] ),
6982 .l1clk(l1clk),
6983 .siclk(siclk),
6984 .soclk(soclk)
6985);
6986
6987assign trl_pc_sel_trap_pc[3:0] =
6988 pc_sel_trap_pc[3:0];
6989
6990assign npc_sel_trap_npc_in[3:0] =
6991 {4 {trap_pc_valid_in & ~don_ret_last_last_last & ~take_lsr_last &
6992 ~take_htd_last & ~take_fpe_last & ~take_res_last &
6993 ~take_ssr_last & ~take_nns_last & ~take_icp_last}} &
6994 trap_tid_in_dec[3:0];
6995
6996tlu_trl_ctl_msff_ctl_macro__width_4 npc_sel_trap_npc_lat (
6997 .scan_in(npc_sel_trap_npc_lat_scanin),
6998 .scan_out(npc_sel_trap_npc_lat_scanout),
6999 .din (npc_sel_trap_npc_in [3:0] ),
7000 .dout (npc_sel_trap_npc [3:0] ),
7001 .l1clk(l1clk),
7002 .siclk(siclk),
7003 .soclk(soclk)
7004);
7005
7006assign trl_npc_sel_trap_npc[3:0] =
7007 npc_sel_trap_npc[3:0];
7008
7009assign check_tsa_ecc_in_in[3:0] =
7010 {4 {don_ret_last & suppress_don_ret_taken_}} & trap_taken[3:0];
7011
7012assign tsacu_en_in_in[3:0] =
7013 check_tsa_ecc_in_in[3:0] & tlu_ceter_pscce[3:0] &
7014 {4 {enable_tel}};
7015
7016tlu_trl_ctl_msff_ctl_macro__width_12 check_tsa_ecc_lat (
7017 .scan_in(check_tsa_ecc_lat_scanin),
7018 .scan_out(check_tsa_ecc_lat_scanout),
7019 .din ({tsacu_en_in_in [3:0],
7020 check_tsa_ecc_in_in [3:0],
7021 check_tsa_ecc_in [3:0]}),
7022 .dout ({tsacu_en_in [3:0],
7023 check_tsa_ecc_in [3:0],
7024 check_tsa_ecc [3:0]}),
7025 .l1clk(l1clk),
7026 .siclk(siclk),
7027 .soclk(soclk)
7028);
7029
7030assign trl_pct_tnpc_en =
7031 | check_tsa_ecc_in[3:0];
7032
7033assign trl_fls_npc_en[3:0] =
7034 check_tsa_ecc[3:0] | npc_sel_trap_npc[3:0];
7035
7036assign npc_sel_tnpc[3:0] =
7037 check_tsa_ecc[3:0] & {4 {~(| tel_tsacu_exc[3:0]) | ~check_tel}};
7038
7039assign trl_don_ret_pstate_sel[3:0] =
7040 npc_sel_tnpc[3:0];
7041
7042assign trl_npc_sel_tnpc[3:0] =
7043 npc_sel_tnpc[3:0];
7044
7045assign trap_tid_dec[3:0] =
7046 { trap_tid[1] & trap_tid[0],
7047 trap_tid[1] & ~trap_tid[0],
7048 ~trap_tid[1] & trap_tid[0],
7049 ~trap_tid[1] & ~trap_tid[0]};
7050
7051assign htd_icp_complete[3:0] =
7052 {4 {trap_pc_valid & take_htd_icp_last_last}} & trap_tid_dec[3:0];
7053
7054assign trl_invalidate_pc[3:0] =
7055 pc_sel_trap_pc[3:0] | htd_icp_complete[3:0];
7056
7057assign trl_invalidate_npc[3:0] =
7058 ((npc_sel_tnpc[3:0] & ~{4 {take_don_last_last_last}}) |
7059 npc_sel_trap_npc[3:0]) |
7060 htd_icp_complete[3:0];
7061
7062
7063
7064//////////////////////////////////////////////////////////////////////////////
7065//
7066// Shadow scan
7067//
7068
7069tlu_trl_ctl_msff_ctl_macro__width_3 shscanid_lat (
7070 .scan_in(shscanid_lat_scanin),
7071 .scan_out(shscanid_lat_scanout),
7072 .din (tcu_shscanid [2:0] ),
7073 .dout (shscanid [2:0] ),
7074 .l1clk(l1clk),
7075 .siclk(siclk),
7076 .soclk(soclk)
7077);
7078
7079assign trl_shscanid[1:0] =
7080 shscanid[1:0];
7081
7082assign trl_shscanid_2 =
7083 shscanid[2];
7084
7085assign shadow_tl[2:0] =
7086 (tl0[2:0] & {3 {~shscanid[1] & ~shscanid[0]}}) |
7087 (tl1[2:0] & {3 {~shscanid[1] & shscanid[0]}}) |
7088 (tl2[2:0] & {3 { shscanid[1] & ~shscanid[0]}}) |
7089 (tl3[2:0] & {3 { shscanid[1] & shscanid[0]}}) ;
7090
7091assign trl_shadow_tl[2:0] =
7092 shadow_tl[2:0];
7093
7094// Need to signal when to capture TPC and TT
7095assign capture_ss_in =
7096 (real_trap_last[0] & ~shscanid[1] & ~shscanid[0]) |
7097 (real_trap_last[1] & ~shscanid[1] & shscanid[0]) |
7098 (real_trap_last[2] & shscanid[1] & ~shscanid[0]) |
7099 (real_trap_last[3] & shscanid[1] & shscanid[0]) ;
7100
7101tlu_trl_ctl_msff_ctl_macro__width_1 capture_ss_lat (
7102 .scan_in(capture_ss_lat_scanin),
7103 .scan_out(capture_ss_lat_scanout),
7104 .din (capture_ss_in ),
7105 .dout (capture_ss ),
7106 .l1clk(l1clk),
7107 .siclk(siclk),
7108 .soclk(soclk)
7109);
7110
7111assign trl_capture_ss =
7112 capture_ss;
7113
7114// Also have to capture (new) TL in sync with TPC and TT
7115
7116assign tl_for_tt_in[2:0] =
7117 (tl_for_tt[2:0] & {3 {~capture_ss}}) |
7118 (shadow_tl[2:0] & {3 { capture_ss}}) ;
7119
7120tlu_trl_ctl_msff_ctl_macro__width_3 tl_for_tt_lat (
7121 .scan_in(tl_for_tt_lat_scanin),
7122 .scan_out(tl_for_tt_lat_scanout),
7123 .din (tl_for_tt_in [2:0] ),
7124 .dout (tl_for_tt [2:0] ),
7125 .l1clk(l1clk),
7126 .siclk(siclk),
7127 .soclk(soclk)
7128);
7129
7130
7131assign trl_tl_for_tt[2:0] =
7132 tl_for_tt[2:0];
7133
7134
7135
7136//////////////////////////////////////////////////////////////////////////////
7137//
7138// Spares
7139//
7140
7141// Each pack has one flop
7142tlu_trl_ctl_spare_ctl_macro__num_16 spares (
7143 .scan_in(spares_scanin),
7144 .scan_out(spares_scanout),
7145 .l1clk (l1clk ),
7146 .siclk(siclk),
7147 .soclk(soclk)
7148);
7149
7150
7151supply0 vss; // <- port for ground
7152supply1 vdd; // <- port for power
7153// fixscan start:
7154assign flush_ifu_last_lat_scanin = scan_in ;
7155assign l1en_per_thread_int_lat_scanin = flush_ifu_last_lat_scanout;
7156assign l1en_don_ret_lat_scanin = l1en_per_thread_int_lat_scanout;
7157assign tid_dec_w_lat_scanin = l1en_don_ret_lat_scanout ;
7158assign cwq_busy_lat_scanin = tid_dec_w_lat_scanout ;
7159assign quiesced_last_lat_scanin = cwq_busy_lat_scanout ;
7160assign idl_req_lat_scanin = quiesced_last_lat_scanout;
7161assign i_quiesce_lat_scanin = idl_req_lat_scanout ;
7162assign p_quiesce_lat_scanin = i_quiesce_lat_scanout ;
7163assign ma_busy_lat_scanin = p_quiesce_lat_scanout ;
7164assign core_running_status_lat_scanin = ma_busy_lat_scanout ;
7165assign ever_been_running_lat_scanin = core_running_status_lat_scanout;
7166assign por_req_lat_scanin = ever_been_running_lat_scanout;
7167assign xir_req_lat_scanin = por_req_lat_scanout ;
7168assign eer_req_lat_scanin = xir_req_lat_scanout ;
7169assign icp_req_lat_scanin = eer_req_lat_scanout ;
7170assign ftt_req_lat_scanin = icp_req_lat_scanout ;
7171assign ivt_req_lat_scanin = ftt_req_lat_scanout ;
7172assign mqr_req_lat_scanin = ivt_req_lat_scanout ;
7173assign dqr_req_lat_scanin = mqr_req_lat_scanout ;
7174assign rqr_req_lat_scanin = dqr_req_lat_scanout ;
7175assign res_req_lat_scanin = rqr_req_lat_scanout ;
7176assign ssr_req_lat_scanin = res_req_lat_scanout ;
7177assign ssc_req_lat_scanin = ssr_req_lat_scanout ;
7178assign nns_req_lat_scanin = ssc_req_lat_scanout ;
7179assign sir_req_lat_scanin = nns_req_lat_scanout ;
7180assign itm_req_lat_scanin = sir_req_lat_scanout ;
7181assign i_tte_outofrange_lat_scanin = itm_req_lat_scanout ;
7182assign iit_req_lat_scanin = i_tte_outofrange_lat_scanout;
7183assign iln_req_lat_scanin = iit_req_lat_scanout ;
7184assign hst_req_lat_scanin = iln_req_lat_scanout ;
7185assign tlz_req_lat_scanin = hst_req_lat_scanout ;
7186assign sma_req_lat_scanin = tlz_req_lat_scanout ;
7187assign cwq_req_lat_scanin = sma_req_lat_scanout ;
7188assign ade_req_lat_scanin = cwq_req_lat_scanout ;
7189assign iae_req_lat_scanin = ade_req_lat_scanout ;
7190assign ipe_req_lat_scanin = iae_req_lat_scanout ;
7191assign ipv_req_lat_scanin = ipe_req_lat_scanout ;
7192assign i_unauth_access_lat_scanin = ipv_req_lat_scanout ;
7193assign iua_req_lat_scanin = i_unauth_access_lat_scanout;
7194assign inp_req_lat_scanin = iua_req_lat_scanout ;
7195assign iar_req_lat_scanin = inp_req_lat_scanout ;
7196assign irr_req_lat_scanin = iar_req_lat_scanout ;
7197assign mar_req_lat_scanin = irr_req_lat_scanout ;
7198assign mrr_req_lat_scanin = mar_req_lat_scanout ;
7199assign pro_req_lat_scanin = mrr_req_lat_scanout ;
7200assign ill_req_lat_scanin = pro_req_lat_scanout ;
7201assign don_req_lat_scanin = ill_req_lat_scanout ;
7202assign ret_req_lat_scanin = don_req_lat_scanout ;
7203assign fpd_req_lat_scanin = ret_req_lat_scanout ;
7204assign snn_req_lat_scanin = fpd_req_lat_scanout ;
7205assign sno_req_lat_scanin = snn_req_lat_scanout ;
7206assign fnn_req_lat_scanin = sno_req_lat_scanout ;
7207assign fno_req_lat_scanin = fnn_req_lat_scanout ;
7208assign clw_req_lat_scanin = fno_req_lat_scanout ;
7209assign dtm_req_lat_scanin = clw_req_lat_scanout ;
7210assign ldf_req_lat_scanin = dtm_req_lat_scanout ;
7211assign stf_req_lat_scanin = ldf_req_lat_scanout ;
7212assign dap_req_lat_scanin = stf_req_lat_scanout ;
7213assign vaw_req_lat_scanin = dap_req_lat_scanout ;
7214assign iaw_req_lat_scanin = vaw_req_lat_scanout ;
7215assign paw_req_lat_scanin = iaw_req_lat_scanout ;
7216assign maa_req_lat_scanin = paw_req_lat_scanout ;
7217assign fpe_req_lat_scanin = maa_req_lat_scanout ;
7218assign fei_req_lat_scanin = fpe_req_lat_scanout ;
7219assign fof_req_lat_scanin = fei_req_lat_scanout ;
7220assign pra_req_lat_scanin = fof_req_lat_scanout ;
7221assign dia_req_lat_scanin = pra_req_lat_scanout ;
7222assign ups_req_lat_scanin = dia_req_lat_scanout ;
7223assign dpv_req_lat_scanin = ups_req_lat_scanout ;
7224assign dnc_req_lat_scanin = dpv_req_lat_scanout ;
7225assign dnf_req_lat_scanin = dnc_req_lat_scanout ;
7226assign dso_req_lat_scanin = dnf_req_lat_scanout ;
7227assign tof_req_lat_scanin = dso_req_lat_scanout ;
7228assign dbz_req_lat_scanin = tof_req_lat_scanout ;
7229assign tcc_req_lat_scanin = dbz_req_lat_scanout ;
7230assign dae_req_lat_scanin = tcc_req_lat_scanout ;
7231assign lsr_req_lat_scanin = dae_req_lat_scanout ;
7232assign irt_req_lat_scanin = lsr_req_lat_scanout ;
7233assign drt_req_lat_scanin = irt_req_lat_scanout ;
7234assign d_tte_outofrange_lat_scanin = drt_req_lat_scanout ;
7235assign dit_req_lat_scanin = d_tte_outofrange_lat_scanout;
7236assign pmu_req_lat_scanin = dit_req_lat_scanout ;
7237assign ime_req_lat_scanin = pmu_req_lat_scanout ;
7238assign dme_req_lat_scanin = ime_req_lat_scanout ;
7239assign write_itlb_lat_scanin = dme_req_lat_scanout ;
7240assign itw_req_lat_scanin = write_itlb_lat_scanout ;
7241assign reload_done_lat_scanin = itw_req_lat_scanout ;
7242assign htd_req_lat_scanin = reload_done_lat_scanout ;
7243assign i_tsb_miss_lat_scanin = htd_req_lat_scanout ;
7244assign him_req_lat_scanin = i_tsb_miss_lat_scanout ;
7245assign d_tsb_miss_lat_scanin = him_req_lat_scanout ;
7246assign hdm_req_lat_scanin = d_tsb_miss_lat_scanout ;
7247assign ibp_req_lat_scanin = hdm_req_lat_scanout ;
7248assign tct_req_lat_scanin = ibp_req_lat_scanout ;
7249assign reset_pre_trap_lat_scanin = tct_req_lat_scanout ;
7250assign disrupt_pre_trap_lat_scanin = reset_pre_trap_lat_scanout;
7251assign divide_pre_trap_lat_scanin = disrupt_pre_trap_lat_scanout;
7252assign long_pre_trap_lat_scanin = divide_pre_trap_lat_scanout;
7253assign fgu_pre_trap_lat_scanin = long_pre_trap_lat_scanout;
7254assign don_ret_pre_trap_lat_scanin = fgu_pre_trap_lat_scanout ;
7255assign notrap_pre_trap_lat_scanin = don_ret_pre_trap_lat_scanout;
7256assign itw_pre_trap_lat_scanin = notrap_pre_trap_lat_scanout;
7257assign other_pre_trap_lat_scanin = itw_pre_trap_lat_scanout ;
7258assign pre_allow_trap_lat_scanin = other_pre_trap_lat_scanout;
7259assign pre_allow_don_ret_lat_scanin = pre_allow_trap_lat_scanout;
7260assign take_reset_lat_scanin = pre_allow_don_ret_lat_scanout;
7261assign take_disrupt_lat_scanin = take_reset_lat_scanout ;
7262assign take_div_lat_scanin = take_disrupt_lat_scanout ;
7263assign take_long_lat_scanin = take_div_lat_scanout ;
7264assign take_fgu_lat_scanin = take_long_lat_scanout ;
7265assign take_other_lat_scanin = take_fgu_lat_scanout ;
7266assign take_don_ret_lat_scanin = take_other_lat_scanout ;
7267assign take_notrap_lat_scanin = take_don_ret_lat_scanout ;
7268assign take_itw_lat_scanin = take_notrap_lat_scanout ;
7269assign take_otr_lat_scanin = take_itw_lat_scanout ;
7270assign take_pmu_lat_scanin = take_otr_lat_scanout ;
7271assign take_ivt_lat_scanin = take_pmu_lat_scanout ;
7272assign trap_taken_lat_scanin = take_ivt_lat_scanout ;
7273assign trap_taken0_lat_scanin = trap_taken_lat_scanout ;
7274assign trap_taken1_lat_scanin = trap_taken0_lat_scanout ;
7275assign trap_taken2_lat_scanin = trap_taken1_lat_scanout ;
7276assign trap_taken3_lat_scanin = trap_taken2_lat_scanout ;
7277assign trap_taken4_lat_scanin = trap_taken3_lat_scanout ;
7278assign trap_taken5_lat_scanin = trap_taken4_lat_scanout ;
7279assign trap_itw_taken_lat_scanin = trap_taken5_lat_scanout ;
7280assign take_reset_last_lat_scanin = trap_itw_taken_lat_scanout;
7281assign trap_type_lat_scanin = take_reset_last_lat_scanout;
7282assign trap_type_for_pc_lat_scanin = trap_type_lat_scanout ;
7283assign hpstate_hpriv_lat_scanin = trap_type_for_pc_lat_scanout;
7284assign tl_lat_scanin = hpstate_hpriv_lat_scanout;
7285assign tlz_lat_scanin = tl_lat_scanout ;
7286assign tl_gt_0_last_lat_scanin = tlz_lat_scanout ;
7287assign wr_gl_lat_scanin = tl_gt_0_last_lat_scanout ;
7288assign gl_rest_lat_scanin = wr_gl_lat_scanout ;
7289assign mbist_run_lat_scanin = gl_rest_lat_scanout ;
7290assign tsa_wr_addr_lat_scanin = mbist_run_lat_scanout ;
7291assign tsa_rd_addr_lat_scanin = tsa_wr_addr_lat_scanout ;
7292assign rmw_addr_lat_scanin = tsa_rd_addr_lat_scanout ;
7293assign rmw_tsa_lat_scanin = rmw_addr_lat_scanout ;
7294assign tic_compare_lat_scanin = rmw_tsa_lat_scanout ;
7295assign pstate_ie_lat_scanin = tic_compare_lat_scanout ;
7296assign pmu_trap_mask_lat_scanin = pstate_ie_lat_scanout ;
7297assign int_level_n_lat_scanin = pmu_trap_mask_lat_scanout;
7298assign tccd_exc_lat_scanin = int_level_n_lat_scanout ;
7299assign tcud_exc_lat_scanin = tccd_exc_lat_scanout ;
7300assign tic_index_lat_scanin = tcud_exc_lat_scanout ;
7301assign tpe_exc_lat_scanin = tic_index_lat_scanout ;
7302assign tsa_index_lat_scanin = tpe_exc_lat_scanout ;
7303assign p_trap_lat_scanin = tsa_index_lat_scanout ;
7304assign asi_data_lat_scanin = p_trap_lat_scanout ;
7305assign enter_red_lat_scanin = asi_data_lat_scanout ;
7306assign stb_empty_lat_scanin = enter_red_lat_scanout ;
7307assign window_block_lat_scanin = stb_empty_lat_scanout ;
7308assign take_lat_scanin = window_block_lat_scanout ;
7309assign take_last_lat_scanin = take_lat_scanout ;
7310assign thread_sel_lat_scanin = take_last_lat_scanout ;
7311assign pstate_am_lat_scanin = thread_sel_lat_scanout ;
7312assign pc_npc_sel_lat_scanin = pstate_am_lat_scanout ;
7313assign stack_lat_scanin = pc_npc_sel_lat_scanout ;
7314assign check_tel_lat_scanin = stack_lat_scanout ;
7315assign htd_res_icp_when_npc_nonseq_last_lat_scanin = check_tel_lat_scanout ;
7316assign pc_valid_lat_scanin = htd_res_icp_when_npc_nonseq_last_lat_scanout;
7317assign trap_tid_lat_scanin = pc_valid_lat_scanout ;
7318assign take_itw_last_lat_scanin = trap_tid_lat_scanout ;
7319assign icache_perr_lat_scanin = take_itw_last_lat_scanout;
7320assign pstate_sel_lat_scanin = icache_perr_lat_scanout ;
7321assign ccr_cwp_asi_tid_lat_scanin = pstate_sel_lat_scanout ;
7322assign clear_ctl_reg_lat_scanin = ccr_cwp_asi_tid_lat_scanout;
7323assign npc_nonseq_lat_scanin = clear_ctl_reg_lat_scanout;
7324assign pc_sel_trap_pc_lat_scanin = npc_nonseq_lat_scanout ;
7325assign npc_sel_trap_npc_lat_scanin = pc_sel_trap_pc_lat_scanout;
7326assign check_tsa_ecc_lat_scanin = npc_sel_trap_npc_lat_scanout;
7327assign shscanid_lat_scanin = check_tsa_ecc_lat_scanout;
7328assign capture_ss_lat_scanin = shscanid_lat_scanout ;
7329assign tl_for_tt_lat_scanin = capture_ss_lat_scanout ;
7330assign spares_scanin = tl_for_tt_lat_scanout ;
7331assign scan_out = spares_scanout ;
7332
7333assign gl_lat_wmr_scanin = wmr_scan_in ;
7334assign pil3_lat_wmr_scanin = gl_lat_wmr_scanout ;
7335assign pil2_lat_wmr_scanin = pil3_lat_wmr_scanout ;
7336assign pil1_lat_wmr_scanin = pil2_lat_wmr_scanout ;
7337assign pil0_lat_wmr_scanin = pil1_lat_wmr_scanout ;
7338assign softint3_lat_wmr_scanin = pil0_lat_wmr_scanout ;
7339assign softint2_lat_wmr_scanin = softint3_lat_wmr_scanout ;
7340assign softint1_lat_wmr_scanin = softint2_lat_wmr_scanout ;
7341assign softint0_lat_wmr_scanin = softint1_lat_wmr_scanout ;
7342assign hintp_lat_wmr_scanin = softint0_lat_wmr_scanout ;
7343assign wmr_scan_out = hintp_lat_wmr_scanout ;
7344// fixscan end:
7345endmodule
7346
7347
7348
7349
7350
7351
7352// any PARAMS parms go into naming of macro
7353
7354module tlu_trl_ctl_l1clkhdr_ctl_macro (
7355 l2clk,
7356 l1en,
7357 pce_ov,
7358 stop,
7359 se,
7360 l1clk);
7361
7362
7363 input l2clk;
7364 input l1en;
7365 input pce_ov;
7366 input stop;
7367 input se;
7368 output l1clk;
7369
7370
7371
7372
7373
7374cl_sc1_l1hdr_8x c_0 (
7375
7376
7377 .l2clk(l2clk),
7378 .pce(l1en),
7379 .l1clk(l1clk),
7380 .se(se),
7381 .pce_ov(pce_ov),
7382 .stop(stop)
7383);
7384
7385
7386
7387endmodule
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401// any PARAMS parms go into naming of macro
7402
7403module tlu_trl_ctl_msff_ctl_macro__width_4 (
7404 din,
7405 l1clk,
7406 scan_in,
7407 siclk,
7408 soclk,
7409 dout,
7410 scan_out);
7411wire [3:0] fdin;
7412wire [2:0] so;
7413
7414 input [3:0] din;
7415 input l1clk;
7416 input scan_in;
7417
7418
7419 input siclk;
7420 input soclk;
7421
7422 output [3:0] dout;
7423 output scan_out;
7424assign fdin[3:0] = din[3:0];
7425
7426
7427
7428
7429
7430
7431dff #(4) d0_0 (
7432.l1clk(l1clk),
7433.siclk(siclk),
7434.soclk(soclk),
7435.d(fdin[3:0]),
7436.si({scan_in,so[2:0]}),
7437.so({so[2:0],scan_out}),
7438.q(dout[3:0])
7439);
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452endmodule
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466// any PARAMS parms go into naming of macro
7467
7468module tlu_trl_ctl_msff_ctl_macro__width_1 (
7469 din,
7470 l1clk,
7471 scan_in,
7472 siclk,
7473 soclk,
7474 dout,
7475 scan_out);
7476wire [0:0] fdin;
7477
7478 input [0:0] din;
7479 input l1clk;
7480 input scan_in;
7481
7482
7483 input siclk;
7484 input soclk;
7485
7486 output [0:0] dout;
7487 output scan_out;
7488assign fdin[0:0] = din[0:0];
7489
7490
7491
7492
7493
7494
7495dff #(1) d0_0 (
7496.l1clk(l1clk),
7497.siclk(siclk),
7498.soclk(soclk),
7499.d(fdin[0:0]),
7500.si(scan_in),
7501.so(scan_out),
7502.q(dout[0:0])
7503);
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516endmodule
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530// any PARAMS parms go into naming of macro
7531
7532module tlu_trl_ctl_msff_ctl_macro__width_8 (
7533 din,
7534 l1clk,
7535 scan_in,
7536 siclk,
7537 soclk,
7538 dout,
7539 scan_out);
7540wire [7:0] fdin;
7541wire [6:0] so;
7542
7543 input [7:0] din;
7544 input l1clk;
7545 input scan_in;
7546
7547
7548 input siclk;
7549 input soclk;
7550
7551 output [7:0] dout;
7552 output scan_out;
7553assign fdin[7:0] = din[7:0];
7554
7555
7556
7557
7558
7559
7560dff #(8) d0_0 (
7561.l1clk(l1clk),
7562.siclk(siclk),
7563.soclk(soclk),
7564.d(fdin[7:0]),
7565.si({scan_in,so[6:0]}),
7566.so({so[6:0],scan_out}),
7567.q(dout[7:0])
7568);
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581endmodule
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595// any PARAMS parms go into naming of macro
7596
7597module tlu_trl_ctl_msff_ctl_macro__clockwidth_1__width_4 (
7598 din,
7599 l1clk,
7600 scan_in,
7601 siclk,
7602 soclk,
7603 dout,
7604 scan_out);
7605wire [3:0] fdin;
7606wire [3:1] sout;
7607
7608 input [3:0] din;
7609 input [3:0] l1clk;
7610 input scan_in;
7611
7612
7613 input siclk;
7614 input soclk;
7615
7616 output [3:0] dout;
7617 output scan_out;
7618assign fdin[3:0] = din[3:0];
7619
7620
7621
7622
7623
7624
7625cl_sc1_msff_4x d0_0 (
7626.l1clk(l1clk[0]),
7627.siclk(siclk),
7628.soclk(soclk),
7629.d(fdin[0]),
7630.si(sout[1]),
7631.so(scan_out),
7632.q(dout[0])
7633);
7634cl_sc1_msff_4x d0_1 (
7635.l1clk(l1clk[1]),
7636.siclk(siclk),
7637.soclk(soclk),
7638.d(fdin[1]),
7639.si(sout[2]),
7640.so(sout[1]),
7641.q(dout[1])
7642);
7643cl_sc1_msff_4x d0_2 (
7644.l1clk(l1clk[2]),
7645.siclk(siclk),
7646.soclk(soclk),
7647.d(fdin[2]),
7648.si(sout[3]),
7649.so(sout[2]),
7650.q(dout[2])
7651);
7652cl_sc1_msff_4x d0_3 (
7653.l1clk(l1clk[3]),
7654.siclk(siclk),
7655.soclk(soclk),
7656.d(fdin[3]),
7657.si(scan_in),
7658.so(sout[3]),
7659.q(dout[3])
7660);
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673endmodule
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687// any PARAMS parms go into naming of macro
7688
7689module tlu_trl_ctl_msff_ctl_macro__width_9 (
7690 din,
7691 l1clk,
7692 scan_in,
7693 siclk,
7694 soclk,
7695 dout,
7696 scan_out);
7697wire [8:0] fdin;
7698wire [7:0] so;
7699
7700 input [8:0] din;
7701 input l1clk;
7702 input scan_in;
7703
7704
7705 input siclk;
7706 input soclk;
7707
7708 output [8:0] dout;
7709 output scan_out;
7710assign fdin[8:0] = din[8:0];
7711
7712
7713
7714
7715
7716
7717dff #(9) d0_0 (
7718.l1clk(l1clk),
7719.siclk(siclk),
7720.soclk(soclk),
7721.d(fdin[8:0]),
7722.si({scan_in,so[7:0]}),
7723.so({so[7:0],scan_out}),
7724.q(dout[8:0])
7725);
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738endmodule
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752// any PARAMS parms go into naming of macro
7753
7754module tlu_trl_ctl_msff_ctl_macro__width_12 (
7755 din,
7756 l1clk,
7757 scan_in,
7758 siclk,
7759 soclk,
7760 dout,
7761 scan_out);
7762wire [11:0] fdin;
7763wire [10:0] so;
7764
7765 input [11:0] din;
7766 input l1clk;
7767 input scan_in;
7768
7769
7770 input siclk;
7771 input soclk;
7772
7773 output [11:0] dout;
7774 output scan_out;
7775assign fdin[11:0] = din[11:0];
7776
7777
7778
7779
7780
7781
7782dff #(12) d0_0 (
7783.l1clk(l1clk),
7784.siclk(siclk),
7785.soclk(soclk),
7786.d(fdin[11:0]),
7787.si({scan_in,so[10:0]}),
7788.so({so[10:0],scan_out}),
7789.q(dout[11:0])
7790);
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803endmodule
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817// any PARAMS parms go into naming of macro
7818
7819module tlu_trl_ctl_msff_ctl_macro__width_10 (
7820 din,
7821 l1clk,
7822 scan_in,
7823 siclk,
7824 soclk,
7825 dout,
7826 scan_out);
7827wire [9:0] fdin;
7828wire [8:0] so;
7829
7830 input [9:0] din;
7831 input l1clk;
7832 input scan_in;
7833
7834
7835 input siclk;
7836 input soclk;
7837
7838 output [9:0] dout;
7839 output scan_out;
7840assign fdin[9:0] = din[9:0];
7841
7842
7843
7844
7845
7846
7847dff #(10) d0_0 (
7848.l1clk(l1clk),
7849.siclk(siclk),
7850.soclk(soclk),
7851.d(fdin[9:0]),
7852.si({scan_in,so[8:0]}),
7853.so({so[8:0],scan_out}),
7854.q(dout[9:0])
7855);
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868endmodule
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882// any PARAMS parms go into naming of macro
7883
7884module tlu_trl_ctl_msff_ctl_macro__width_5 (
7885 din,
7886 l1clk,
7887 scan_in,
7888 siclk,
7889 soclk,
7890 dout,
7891 scan_out);
7892wire [4:0] fdin;
7893wire [3:0] so;
7894
7895 input [4:0] din;
7896 input l1clk;
7897 input scan_in;
7898
7899
7900 input siclk;
7901 input soclk;
7902
7903 output [4:0] dout;
7904 output scan_out;
7905assign fdin[4:0] = din[4:0];
7906
7907
7908
7909
7910
7911
7912dff #(5) d0_0 (
7913.l1clk(l1clk),
7914.siclk(siclk),
7915.soclk(soclk),
7916.d(fdin[4:0]),
7917.si({scan_in,so[3:0]}),
7918.so({so[3:0],scan_out}),
7919.q(dout[4:0])
7920);
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933endmodule
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947// any PARAMS parms go into naming of macro
7948
7949module tlu_trl_ctl_msff_ctl_macro__width_2 (
7950 din,
7951 l1clk,
7952 scan_in,
7953 siclk,
7954 soclk,
7955 dout,
7956 scan_out);
7957wire [1:0] fdin;
7958wire [0:0] so;
7959
7960 input [1:0] din;
7961 input l1clk;
7962 input scan_in;
7963
7964
7965 input siclk;
7966 input soclk;
7967
7968 output [1:0] dout;
7969 output scan_out;
7970assign fdin[1:0] = din[1:0];
7971
7972
7973
7974
7975
7976
7977dff #(2) d0_0 (
7978.l1clk(l1clk),
7979.siclk(siclk),
7980.soclk(soclk),
7981.d(fdin[1:0]),
7982.si({scan_in,so[0:0]}),
7983.so({so[0:0],scan_out}),
7984.q(dout[1:0])
7985);
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998endmodule
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012// any PARAMS parms go into naming of macro
8013
8014module tlu_trl_ctl_msff_ctl_macro__width_6 (
8015 din,
8016 l1clk,
8017 scan_in,
8018 siclk,
8019 soclk,
8020 dout,
8021 scan_out);
8022wire [5:0] fdin;
8023wire [4:0] so;
8024
8025 input [5:0] din;
8026 input l1clk;
8027 input scan_in;
8028
8029
8030 input siclk;
8031 input soclk;
8032
8033 output [5:0] dout;
8034 output scan_out;
8035assign fdin[5:0] = din[5:0];
8036
8037
8038
8039
8040
8041
8042dff #(6) d0_0 (
8043.l1clk(l1clk),
8044.siclk(siclk),
8045.soclk(soclk),
8046.d(fdin[5:0]),
8047.si({scan_in,so[4:0]}),
8048.so({so[4:0],scan_out}),
8049.q(dout[5:0])
8050);
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063endmodule
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077// any PARAMS parms go into naming of macro
8078
8079module tlu_trl_ctl_msff_ctl_macro__width_17 (
8080 din,
8081 l1clk,
8082 scan_in,
8083 siclk,
8084 soclk,
8085 dout,
8086 scan_out);
8087wire [16:0] fdin;
8088wire [15:0] so;
8089
8090 input [16:0] din;
8091 input l1clk;
8092 input scan_in;
8093
8094
8095 input siclk;
8096 input soclk;
8097
8098 output [16:0] dout;
8099 output scan_out;
8100assign fdin[16:0] = din[16:0];
8101
8102
8103
8104
8105
8106
8107dff #(17) d0_0 (
8108.l1clk(l1clk),
8109.siclk(siclk),
8110.soclk(soclk),
8111.d(fdin[16:0]),
8112.si({scan_in,so[15:0]}),
8113.so({so[15:0],scan_out}),
8114.q(dout[16:0])
8115);
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128endmodule
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142// any PARAMS parms go into naming of macro
8143
8144module tlu_trl_ctl_msff_ctl_macro__width_16 (
8145 din,
8146 l1clk,
8147 scan_in,
8148 siclk,
8149 soclk,
8150 dout,
8151 scan_out);
8152wire [15:0] fdin;
8153wire [14:0] so;
8154
8155 input [15:0] din;
8156 input l1clk;
8157 input scan_in;
8158
8159
8160 input siclk;
8161 input soclk;
8162
8163 output [15:0] dout;
8164 output scan_out;
8165assign fdin[15:0] = din[15:0];
8166
8167
8168
8169
8170
8171
8172dff #(16) d0_0 (
8173.l1clk(l1clk),
8174.siclk(siclk),
8175.soclk(soclk),
8176.d(fdin[15:0]),
8177.si({scan_in,so[14:0]}),
8178.so({so[14:0],scan_out}),
8179.q(dout[15:0])
8180);
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193endmodule
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207// any PARAMS parms go into naming of macro
8208
8209module tlu_trl_ctl_msff_ctl_macro__width_3 (
8210 din,
8211 l1clk,
8212 scan_in,
8213 siclk,
8214 soclk,
8215 dout,
8216 scan_out);
8217wire [2:0] fdin;
8218wire [1:0] so;
8219
8220 input [2:0] din;
8221 input l1clk;
8222 input scan_in;
8223
8224
8225 input siclk;
8226 input soclk;
8227
8228 output [2:0] dout;
8229 output scan_out;
8230assign fdin[2:0] = din[2:0];
8231
8232
8233
8234
8235
8236
8237dff #(3) d0_0 (
8238.l1clk(l1clk),
8239.siclk(siclk),
8240.soclk(soclk),
8241.d(fdin[2:0]),
8242.si({scan_in,so[1:0]}),
8243.so({so[1:0],scan_out}),
8244.q(dout[2:0])
8245);
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258endmodule
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272// any PARAMS parms go into naming of macro
8273
8274module tlu_trl_ctl_msff_ctl_macro__width_11 (
8275 din,
8276 l1clk,
8277 scan_in,
8278 siclk,
8279 soclk,
8280 dout,
8281 scan_out);
8282wire [10:0] fdin;
8283wire [9:0] so;
8284
8285 input [10:0] din;
8286 input l1clk;
8287 input scan_in;
8288
8289
8290 input siclk;
8291 input soclk;
8292
8293 output [10:0] dout;
8294 output scan_out;
8295assign fdin[10:0] = din[10:0];
8296
8297
8298
8299
8300
8301
8302dff #(11) d0_0 (
8303.l1clk(l1clk),
8304.siclk(siclk),
8305.soclk(soclk),
8306.d(fdin[10:0]),
8307.si({scan_in,so[9:0]}),
8308.so({so[9:0],scan_out}),
8309.q(dout[10:0])
8310);
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323endmodule
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333// Description: Spare gate macro for control blocks
8334//
8335// Param num controls the number of times the macro is added
8336// flops=0 can be used to use only combination spare logic
8337
8338
8339module tlu_trl_ctl_spare_ctl_macro__num_16 (
8340 l1clk,
8341 scan_in,
8342 siclk,
8343 soclk,
8344 scan_out);
8345wire si_0;
8346wire so_0;
8347wire spare0_flop_unused;
8348wire spare0_buf_32x_unused;
8349wire spare0_nand3_8x_unused;
8350wire spare0_inv_8x_unused;
8351wire spare0_aoi22_4x_unused;
8352wire spare0_buf_8x_unused;
8353wire spare0_oai22_4x_unused;
8354wire spare0_inv_16x_unused;
8355wire spare0_nand2_16x_unused;
8356wire spare0_nor3_4x_unused;
8357wire spare0_nand2_8x_unused;
8358wire spare0_buf_16x_unused;
8359wire spare0_nor2_16x_unused;
8360wire spare0_inv_32x_unused;
8361wire si_1;
8362wire so_1;
8363wire spare1_flop_unused;
8364wire spare1_buf_32x_unused;
8365wire spare1_nand3_8x_unused;
8366wire spare1_inv_8x_unused;
8367wire spare1_aoi22_4x_unused;
8368wire spare1_buf_8x_unused;
8369wire spare1_oai22_4x_unused;
8370wire spare1_inv_16x_unused;
8371wire spare1_nand2_16x_unused;
8372wire spare1_nor3_4x_unused;
8373wire spare1_nand2_8x_unused;
8374wire spare1_buf_16x_unused;
8375wire spare1_nor2_16x_unused;
8376wire spare1_inv_32x_unused;
8377wire si_2;
8378wire so_2;
8379wire spare2_flop_unused;
8380wire spare2_buf_32x_unused;
8381wire spare2_nand3_8x_unused;
8382wire spare2_inv_8x_unused;
8383wire spare2_aoi22_4x_unused;
8384wire spare2_buf_8x_unused;
8385wire spare2_oai22_4x_unused;
8386wire spare2_inv_16x_unused;
8387wire spare2_nand2_16x_unused;
8388wire spare2_nor3_4x_unused;
8389wire spare2_nand2_8x_unused;
8390wire spare2_buf_16x_unused;
8391wire spare2_nor2_16x_unused;
8392wire spare2_inv_32x_unused;
8393wire si_3;
8394wire so_3;
8395wire spare3_flop_unused;
8396wire spare3_buf_32x_unused;
8397wire spare3_nand3_8x_unused;
8398wire spare3_inv_8x_unused;
8399wire spare3_aoi22_4x_unused;
8400wire spare3_buf_8x_unused;
8401wire spare3_oai22_4x_unused;
8402wire spare3_inv_16x_unused;
8403wire spare3_nand2_16x_unused;
8404wire spare3_nor3_4x_unused;
8405wire spare3_nand2_8x_unused;
8406wire spare3_buf_16x_unused;
8407wire spare3_nor2_16x_unused;
8408wire spare3_inv_32x_unused;
8409wire si_4;
8410wire so_4;
8411wire spare4_flop_unused;
8412wire spare4_buf_32x_unused;
8413wire spare4_nand3_8x_unused;
8414wire spare4_inv_8x_unused;
8415wire spare4_aoi22_4x_unused;
8416wire spare4_buf_8x_unused;
8417wire spare4_oai22_4x_unused;
8418wire spare4_inv_16x_unused;
8419wire spare4_nand2_16x_unused;
8420wire spare4_nor3_4x_unused;
8421wire spare4_nand2_8x_unused;
8422wire spare4_buf_16x_unused;
8423wire spare4_nor2_16x_unused;
8424wire spare4_inv_32x_unused;
8425wire si_5;
8426wire so_5;
8427wire spare5_flop_unused;
8428wire spare5_buf_32x_unused;
8429wire spare5_nand3_8x_unused;
8430wire spare5_inv_8x_unused;
8431wire spare5_aoi22_4x_unused;
8432wire spare5_buf_8x_unused;
8433wire spare5_oai22_4x_unused;
8434wire spare5_inv_16x_unused;
8435wire spare5_nand2_16x_unused;
8436wire spare5_nor3_4x_unused;
8437wire spare5_nand2_8x_unused;
8438wire spare5_buf_16x_unused;
8439wire spare5_nor2_16x_unused;
8440wire spare5_inv_32x_unused;
8441wire si_6;
8442wire so_6;
8443wire spare6_flop_unused;
8444wire spare6_buf_32x_unused;
8445wire spare6_nand3_8x_unused;
8446wire spare6_inv_8x_unused;
8447wire spare6_aoi22_4x_unused;
8448wire spare6_buf_8x_unused;
8449wire spare6_oai22_4x_unused;
8450wire spare6_inv_16x_unused;
8451wire spare6_nand2_16x_unused;
8452wire spare6_nor3_4x_unused;
8453wire spare6_nand2_8x_unused;
8454wire spare6_buf_16x_unused;
8455wire spare6_nor2_16x_unused;
8456wire spare6_inv_32x_unused;
8457wire si_7;
8458wire so_7;
8459wire spare7_flop_unused;
8460wire spare7_buf_32x_unused;
8461wire spare7_nand3_8x_unused;
8462wire spare7_inv_8x_unused;
8463wire spare7_aoi22_4x_unused;
8464wire spare7_buf_8x_unused;
8465wire spare7_oai22_4x_unused;
8466wire spare7_inv_16x_unused;
8467wire spare7_nand2_16x_unused;
8468wire spare7_nor3_4x_unused;
8469wire spare7_nand2_8x_unused;
8470wire spare7_buf_16x_unused;
8471wire spare7_nor2_16x_unused;
8472wire spare7_inv_32x_unused;
8473wire si_8;
8474wire so_8;
8475wire spare8_flop_unused;
8476wire spare8_buf_32x_unused;
8477wire spare8_nand3_8x_unused;
8478wire spare8_inv_8x_unused;
8479wire spare8_aoi22_4x_unused;
8480wire spare8_buf_8x_unused;
8481wire spare8_oai22_4x_unused;
8482wire spare8_inv_16x_unused;
8483wire spare8_nand2_16x_unused;
8484wire spare8_nor3_4x_unused;
8485wire spare8_nand2_8x_unused;
8486wire spare8_buf_16x_unused;
8487wire spare8_nor2_16x_unused;
8488wire spare8_inv_32x_unused;
8489wire si_9;
8490wire so_9;
8491wire spare9_flop_unused;
8492wire spare9_buf_32x_unused;
8493wire spare9_nand3_8x_unused;
8494wire spare9_inv_8x_unused;
8495wire spare9_aoi22_4x_unused;
8496wire spare9_buf_8x_unused;
8497wire spare9_oai22_4x_unused;
8498wire spare9_inv_16x_unused;
8499wire spare9_nand2_16x_unused;
8500wire spare9_nor3_4x_unused;
8501wire spare9_nand2_8x_unused;
8502wire spare9_buf_16x_unused;
8503wire spare9_nor2_16x_unused;
8504wire spare9_inv_32x_unused;
8505wire si_10;
8506wire so_10;
8507wire spare10_flop_unused;
8508wire spare10_buf_32x_unused;
8509wire spare10_nand3_8x_unused;
8510wire spare10_inv_8x_unused;
8511wire spare10_aoi22_4x_unused;
8512wire spare10_buf_8x_unused;
8513wire spare10_oai22_4x_unused;
8514wire spare10_inv_16x_unused;
8515wire spare10_nand2_16x_unused;
8516wire spare10_nor3_4x_unused;
8517wire spare10_nand2_8x_unused;
8518wire spare10_buf_16x_unused;
8519wire spare10_nor2_16x_unused;
8520wire spare10_inv_32x_unused;
8521wire si_11;
8522wire so_11;
8523wire spare11_flop_unused;
8524wire spare11_buf_32x_unused;
8525wire spare11_nand3_8x_unused;
8526wire spare11_inv_8x_unused;
8527wire spare11_aoi22_4x_unused;
8528wire spare11_buf_8x_unused;
8529wire spare11_oai22_4x_unused;
8530wire spare11_inv_16x_unused;
8531wire spare11_nand2_16x_unused;
8532wire spare11_nor3_4x_unused;
8533wire spare11_nand2_8x_unused;
8534wire spare11_buf_16x_unused;
8535wire spare11_nor2_16x_unused;
8536wire spare11_inv_32x_unused;
8537wire si_12;
8538wire so_12;
8539wire spare12_flop_unused;
8540wire spare12_buf_32x_unused;
8541wire spare12_nand3_8x_unused;
8542wire spare12_inv_8x_unused;
8543wire spare12_aoi22_4x_unused;
8544wire spare12_buf_8x_unused;
8545wire spare12_oai22_4x_unused;
8546wire spare12_inv_16x_unused;
8547wire spare12_nand2_16x_unused;
8548wire spare12_nor3_4x_unused;
8549wire spare12_nand2_8x_unused;
8550wire spare12_buf_16x_unused;
8551wire spare12_nor2_16x_unused;
8552wire spare12_inv_32x_unused;
8553wire si_13;
8554wire so_13;
8555wire spare13_flop_unused;
8556wire spare13_buf_32x_unused;
8557wire spare13_nand3_8x_unused;
8558wire spare13_inv_8x_unused;
8559wire spare13_aoi22_4x_unused;
8560wire spare13_buf_8x_unused;
8561wire spare13_oai22_4x_unused;
8562wire spare13_inv_16x_unused;
8563wire spare13_nand2_16x_unused;
8564wire spare13_nor3_4x_unused;
8565wire spare13_nand2_8x_unused;
8566wire spare13_buf_16x_unused;
8567wire spare13_nor2_16x_unused;
8568wire spare13_inv_32x_unused;
8569wire si_14;
8570wire so_14;
8571wire spare14_flop_unused;
8572wire spare14_buf_32x_unused;
8573wire spare14_nand3_8x_unused;
8574wire spare14_inv_8x_unused;
8575wire spare14_aoi22_4x_unused;
8576wire spare14_buf_8x_unused;
8577wire spare14_oai22_4x_unused;
8578wire spare14_inv_16x_unused;
8579wire spare14_nand2_16x_unused;
8580wire spare14_nor3_4x_unused;
8581wire spare14_nand2_8x_unused;
8582wire spare14_buf_16x_unused;
8583wire spare14_nor2_16x_unused;
8584wire spare14_inv_32x_unused;
8585wire si_15;
8586wire so_15;
8587wire spare15_flop_unused;
8588wire spare15_buf_32x_unused;
8589wire spare15_nand3_8x_unused;
8590wire spare15_inv_8x_unused;
8591wire spare15_aoi22_4x_unused;
8592wire spare15_buf_8x_unused;
8593wire spare15_oai22_4x_unused;
8594wire spare15_inv_16x_unused;
8595wire spare15_nand2_16x_unused;
8596wire spare15_nor3_4x_unused;
8597wire spare15_nand2_8x_unused;
8598wire spare15_buf_16x_unused;
8599wire spare15_nor2_16x_unused;
8600wire spare15_inv_32x_unused;
8601
8602
8603input l1clk;
8604input scan_in;
8605input siclk;
8606input soclk;
8607output scan_out;
8608
8609cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
8610 .siclk(siclk),
8611 .soclk(soclk),
8612 .si(si_0),
8613 .so(so_0),
8614 .d(1'b0),
8615 .q(spare0_flop_unused));
8616assign si_0 = scan_in;
8617
8618cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
8619 .out(spare0_buf_32x_unused));
8620cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
8621 .in1(1'b1),
8622 .in2(1'b1),
8623 .out(spare0_nand3_8x_unused));
8624cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
8625 .out(spare0_inv_8x_unused));
8626cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
8627 .in01(1'b1),
8628 .in10(1'b1),
8629 .in11(1'b1),
8630 .out(spare0_aoi22_4x_unused));
8631cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
8632 .out(spare0_buf_8x_unused));
8633cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
8634 .in01(1'b1),
8635 .in10(1'b1),
8636 .in11(1'b1),
8637 .out(spare0_oai22_4x_unused));
8638cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
8639 .out(spare0_inv_16x_unused));
8640cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
8641 .in1(1'b1),
8642 .out(spare0_nand2_16x_unused));
8643cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
8644 .in1(1'b0),
8645 .in2(1'b0),
8646 .out(spare0_nor3_4x_unused));
8647cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
8648 .in1(1'b1),
8649 .out(spare0_nand2_8x_unused));
8650cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
8651 .out(spare0_buf_16x_unused));
8652cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
8653 .in1(1'b0),
8654 .out(spare0_nor2_16x_unused));
8655cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
8656 .out(spare0_inv_32x_unused));
8657
8658cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
8659 .siclk(siclk),
8660 .soclk(soclk),
8661 .si(si_1),
8662 .so(so_1),
8663 .d(1'b0),
8664 .q(spare1_flop_unused));
8665assign si_1 = so_0;
8666
8667cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
8668 .out(spare1_buf_32x_unused));
8669cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
8670 .in1(1'b1),
8671 .in2(1'b1),
8672 .out(spare1_nand3_8x_unused));
8673cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
8674 .out(spare1_inv_8x_unused));
8675cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
8676 .in01(1'b1),
8677 .in10(1'b1),
8678 .in11(1'b1),
8679 .out(spare1_aoi22_4x_unused));
8680cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
8681 .out(spare1_buf_8x_unused));
8682cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
8683 .in01(1'b1),
8684 .in10(1'b1),
8685 .in11(1'b1),
8686 .out(spare1_oai22_4x_unused));
8687cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
8688 .out(spare1_inv_16x_unused));
8689cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
8690 .in1(1'b1),
8691 .out(spare1_nand2_16x_unused));
8692cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
8693 .in1(1'b0),
8694 .in2(1'b0),
8695 .out(spare1_nor3_4x_unused));
8696cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
8697 .in1(1'b1),
8698 .out(spare1_nand2_8x_unused));
8699cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
8700 .out(spare1_buf_16x_unused));
8701cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
8702 .in1(1'b0),
8703 .out(spare1_nor2_16x_unused));
8704cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
8705 .out(spare1_inv_32x_unused));
8706
8707cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
8708 .siclk(siclk),
8709 .soclk(soclk),
8710 .si(si_2),
8711 .so(so_2),
8712 .d(1'b0),
8713 .q(spare2_flop_unused));
8714assign si_2 = so_1;
8715
8716cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
8717 .out(spare2_buf_32x_unused));
8718cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
8719 .in1(1'b1),
8720 .in2(1'b1),
8721 .out(spare2_nand3_8x_unused));
8722cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
8723 .out(spare2_inv_8x_unused));
8724cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
8725 .in01(1'b1),
8726 .in10(1'b1),
8727 .in11(1'b1),
8728 .out(spare2_aoi22_4x_unused));
8729cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
8730 .out(spare2_buf_8x_unused));
8731cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
8732 .in01(1'b1),
8733 .in10(1'b1),
8734 .in11(1'b1),
8735 .out(spare2_oai22_4x_unused));
8736cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
8737 .out(spare2_inv_16x_unused));
8738cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
8739 .in1(1'b1),
8740 .out(spare2_nand2_16x_unused));
8741cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
8742 .in1(1'b0),
8743 .in2(1'b0),
8744 .out(spare2_nor3_4x_unused));
8745cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
8746 .in1(1'b1),
8747 .out(spare2_nand2_8x_unused));
8748cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
8749 .out(spare2_buf_16x_unused));
8750cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
8751 .in1(1'b0),
8752 .out(spare2_nor2_16x_unused));
8753cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
8754 .out(spare2_inv_32x_unused));
8755
8756cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
8757 .siclk(siclk),
8758 .soclk(soclk),
8759 .si(si_3),
8760 .so(so_3),
8761 .d(1'b0),
8762 .q(spare3_flop_unused));
8763assign si_3 = so_2;
8764
8765cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
8766 .out(spare3_buf_32x_unused));
8767cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
8768 .in1(1'b1),
8769 .in2(1'b1),
8770 .out(spare3_nand3_8x_unused));
8771cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
8772 .out(spare3_inv_8x_unused));
8773cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
8774 .in01(1'b1),
8775 .in10(1'b1),
8776 .in11(1'b1),
8777 .out(spare3_aoi22_4x_unused));
8778cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
8779 .out(spare3_buf_8x_unused));
8780cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
8781 .in01(1'b1),
8782 .in10(1'b1),
8783 .in11(1'b1),
8784 .out(spare3_oai22_4x_unused));
8785cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
8786 .out(spare3_inv_16x_unused));
8787cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
8788 .in1(1'b1),
8789 .out(spare3_nand2_16x_unused));
8790cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
8791 .in1(1'b0),
8792 .in2(1'b0),
8793 .out(spare3_nor3_4x_unused));
8794cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
8795 .in1(1'b1),
8796 .out(spare3_nand2_8x_unused));
8797cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
8798 .out(spare3_buf_16x_unused));
8799cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
8800 .in1(1'b0),
8801 .out(spare3_nor2_16x_unused));
8802cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
8803 .out(spare3_inv_32x_unused));
8804
8805cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
8806 .siclk(siclk),
8807 .soclk(soclk),
8808 .si(si_4),
8809 .so(so_4),
8810 .d(1'b0),
8811 .q(spare4_flop_unused));
8812assign si_4 = so_3;
8813
8814cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
8815 .out(spare4_buf_32x_unused));
8816cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
8817 .in1(1'b1),
8818 .in2(1'b1),
8819 .out(spare4_nand3_8x_unused));
8820cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
8821 .out(spare4_inv_8x_unused));
8822cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
8823 .in01(1'b1),
8824 .in10(1'b1),
8825 .in11(1'b1),
8826 .out(spare4_aoi22_4x_unused));
8827cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
8828 .out(spare4_buf_8x_unused));
8829cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
8830 .in01(1'b1),
8831 .in10(1'b1),
8832 .in11(1'b1),
8833 .out(spare4_oai22_4x_unused));
8834cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
8835 .out(spare4_inv_16x_unused));
8836cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
8837 .in1(1'b1),
8838 .out(spare4_nand2_16x_unused));
8839cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
8840 .in1(1'b0),
8841 .in2(1'b0),
8842 .out(spare4_nor3_4x_unused));
8843cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
8844 .in1(1'b1),
8845 .out(spare4_nand2_8x_unused));
8846cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
8847 .out(spare4_buf_16x_unused));
8848cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
8849 .in1(1'b0),
8850 .out(spare4_nor2_16x_unused));
8851cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
8852 .out(spare4_inv_32x_unused));
8853
8854cl_sc1_msff_8x spare5_flop (.l1clk(l1clk),
8855 .siclk(siclk),
8856 .soclk(soclk),
8857 .si(si_5),
8858 .so(so_5),
8859 .d(1'b0),
8860 .q(spare5_flop_unused));
8861assign si_5 = so_4;
8862
8863cl_u1_buf_32x spare5_buf_32x (.in(1'b1),
8864 .out(spare5_buf_32x_unused));
8865cl_u1_nand3_8x spare5_nand3_8x (.in0(1'b1),
8866 .in1(1'b1),
8867 .in2(1'b1),
8868 .out(spare5_nand3_8x_unused));
8869cl_u1_inv_8x spare5_inv_8x (.in(1'b1),
8870 .out(spare5_inv_8x_unused));
8871cl_u1_aoi22_4x spare5_aoi22_4x (.in00(1'b1),
8872 .in01(1'b1),
8873 .in10(1'b1),
8874 .in11(1'b1),
8875 .out(spare5_aoi22_4x_unused));
8876cl_u1_buf_8x spare5_buf_8x (.in(1'b1),
8877 .out(spare5_buf_8x_unused));
8878cl_u1_oai22_4x spare5_oai22_4x (.in00(1'b1),
8879 .in01(1'b1),
8880 .in10(1'b1),
8881 .in11(1'b1),
8882 .out(spare5_oai22_4x_unused));
8883cl_u1_inv_16x spare5_inv_16x (.in(1'b1),
8884 .out(spare5_inv_16x_unused));
8885cl_u1_nand2_16x spare5_nand2_16x (.in0(1'b1),
8886 .in1(1'b1),
8887 .out(spare5_nand2_16x_unused));
8888cl_u1_nor3_4x spare5_nor3_4x (.in0(1'b0),
8889 .in1(1'b0),
8890 .in2(1'b0),
8891 .out(spare5_nor3_4x_unused));
8892cl_u1_nand2_8x spare5_nand2_8x (.in0(1'b1),
8893 .in1(1'b1),
8894 .out(spare5_nand2_8x_unused));
8895cl_u1_buf_16x spare5_buf_16x (.in(1'b1),
8896 .out(spare5_buf_16x_unused));
8897cl_u1_nor2_16x spare5_nor2_16x (.in0(1'b0),
8898 .in1(1'b0),
8899 .out(spare5_nor2_16x_unused));
8900cl_u1_inv_32x spare5_inv_32x (.in(1'b1),
8901 .out(spare5_inv_32x_unused));
8902
8903cl_sc1_msff_8x spare6_flop (.l1clk(l1clk),
8904 .siclk(siclk),
8905 .soclk(soclk),
8906 .si(si_6),
8907 .so(so_6),
8908 .d(1'b0),
8909 .q(spare6_flop_unused));
8910assign si_6 = so_5;
8911
8912cl_u1_buf_32x spare6_buf_32x (.in(1'b1),
8913 .out(spare6_buf_32x_unused));
8914cl_u1_nand3_8x spare6_nand3_8x (.in0(1'b1),
8915 .in1(1'b1),
8916 .in2(1'b1),
8917 .out(spare6_nand3_8x_unused));
8918cl_u1_inv_8x spare6_inv_8x (.in(1'b1),
8919 .out(spare6_inv_8x_unused));
8920cl_u1_aoi22_4x spare6_aoi22_4x (.in00(1'b1),
8921 .in01(1'b1),
8922 .in10(1'b1),
8923 .in11(1'b1),
8924 .out(spare6_aoi22_4x_unused));
8925cl_u1_buf_8x spare6_buf_8x (.in(1'b1),
8926 .out(spare6_buf_8x_unused));
8927cl_u1_oai22_4x spare6_oai22_4x (.in00(1'b1),
8928 .in01(1'b1),
8929 .in10(1'b1),
8930 .in11(1'b1),
8931 .out(spare6_oai22_4x_unused));
8932cl_u1_inv_16x spare6_inv_16x (.in(1'b1),
8933 .out(spare6_inv_16x_unused));
8934cl_u1_nand2_16x spare6_nand2_16x (.in0(1'b1),
8935 .in1(1'b1),
8936 .out(spare6_nand2_16x_unused));
8937cl_u1_nor3_4x spare6_nor3_4x (.in0(1'b0),
8938 .in1(1'b0),
8939 .in2(1'b0),
8940 .out(spare6_nor3_4x_unused));
8941cl_u1_nand2_8x spare6_nand2_8x (.in0(1'b1),
8942 .in1(1'b1),
8943 .out(spare6_nand2_8x_unused));
8944cl_u1_buf_16x spare6_buf_16x (.in(1'b1),
8945 .out(spare6_buf_16x_unused));
8946cl_u1_nor2_16x spare6_nor2_16x (.in0(1'b0),
8947 .in1(1'b0),
8948 .out(spare6_nor2_16x_unused));
8949cl_u1_inv_32x spare6_inv_32x (.in(1'b1),
8950 .out(spare6_inv_32x_unused));
8951
8952cl_sc1_msff_8x spare7_flop (.l1clk(l1clk),
8953 .siclk(siclk),
8954 .soclk(soclk),
8955 .si(si_7),
8956 .so(so_7),
8957 .d(1'b0),
8958 .q(spare7_flop_unused));
8959assign si_7 = so_6;
8960
8961cl_u1_buf_32x spare7_buf_32x (.in(1'b1),
8962 .out(spare7_buf_32x_unused));
8963cl_u1_nand3_8x spare7_nand3_8x (.in0(1'b1),
8964 .in1(1'b1),
8965 .in2(1'b1),
8966 .out(spare7_nand3_8x_unused));
8967cl_u1_inv_8x spare7_inv_8x (.in(1'b1),
8968 .out(spare7_inv_8x_unused));
8969cl_u1_aoi22_4x spare7_aoi22_4x (.in00(1'b1),
8970 .in01(1'b1),
8971 .in10(1'b1),
8972 .in11(1'b1),
8973 .out(spare7_aoi22_4x_unused));
8974cl_u1_buf_8x spare7_buf_8x (.in(1'b1),
8975 .out(spare7_buf_8x_unused));
8976cl_u1_oai22_4x spare7_oai22_4x (.in00(1'b1),
8977 .in01(1'b1),
8978 .in10(1'b1),
8979 .in11(1'b1),
8980 .out(spare7_oai22_4x_unused));
8981cl_u1_inv_16x spare7_inv_16x (.in(1'b1),
8982 .out(spare7_inv_16x_unused));
8983cl_u1_nand2_16x spare7_nand2_16x (.in0(1'b1),
8984 .in1(1'b1),
8985 .out(spare7_nand2_16x_unused));
8986cl_u1_nor3_4x spare7_nor3_4x (.in0(1'b0),
8987 .in1(1'b0),
8988 .in2(1'b0),
8989 .out(spare7_nor3_4x_unused));
8990cl_u1_nand2_8x spare7_nand2_8x (.in0(1'b1),
8991 .in1(1'b1),
8992 .out(spare7_nand2_8x_unused));
8993cl_u1_buf_16x spare7_buf_16x (.in(1'b1),
8994 .out(spare7_buf_16x_unused));
8995cl_u1_nor2_16x spare7_nor2_16x (.in0(1'b0),
8996 .in1(1'b0),
8997 .out(spare7_nor2_16x_unused));
8998cl_u1_inv_32x spare7_inv_32x (.in(1'b1),
8999 .out(spare7_inv_32x_unused));
9000
9001cl_sc1_msff_8x spare8_flop (.l1clk(l1clk),
9002 .siclk(siclk),
9003 .soclk(soclk),
9004 .si(si_8),
9005 .so(so_8),
9006 .d(1'b0),
9007 .q(spare8_flop_unused));
9008assign si_8 = so_7;
9009
9010cl_u1_buf_32x spare8_buf_32x (.in(1'b1),
9011 .out(spare8_buf_32x_unused));
9012cl_u1_nand3_8x spare8_nand3_8x (.in0(1'b1),
9013 .in1(1'b1),
9014 .in2(1'b1),
9015 .out(spare8_nand3_8x_unused));
9016cl_u1_inv_8x spare8_inv_8x (.in(1'b1),
9017 .out(spare8_inv_8x_unused));
9018cl_u1_aoi22_4x spare8_aoi22_4x (.in00(1'b1),
9019 .in01(1'b1),
9020 .in10(1'b1),
9021 .in11(1'b1),
9022 .out(spare8_aoi22_4x_unused));
9023cl_u1_buf_8x spare8_buf_8x (.in(1'b1),
9024 .out(spare8_buf_8x_unused));
9025cl_u1_oai22_4x spare8_oai22_4x (.in00(1'b1),
9026 .in01(1'b1),
9027 .in10(1'b1),
9028 .in11(1'b1),
9029 .out(spare8_oai22_4x_unused));
9030cl_u1_inv_16x spare8_inv_16x (.in(1'b1),
9031 .out(spare8_inv_16x_unused));
9032cl_u1_nand2_16x spare8_nand2_16x (.in0(1'b1),
9033 .in1(1'b1),
9034 .out(spare8_nand2_16x_unused));
9035cl_u1_nor3_4x spare8_nor3_4x (.in0(1'b0),
9036 .in1(1'b0),
9037 .in2(1'b0),
9038 .out(spare8_nor3_4x_unused));
9039cl_u1_nand2_8x spare8_nand2_8x (.in0(1'b1),
9040 .in1(1'b1),
9041 .out(spare8_nand2_8x_unused));
9042cl_u1_buf_16x spare8_buf_16x (.in(1'b1),
9043 .out(spare8_buf_16x_unused));
9044cl_u1_nor2_16x spare8_nor2_16x (.in0(1'b0),
9045 .in1(1'b0),
9046 .out(spare8_nor2_16x_unused));
9047cl_u1_inv_32x spare8_inv_32x (.in(1'b1),
9048 .out(spare8_inv_32x_unused));
9049
9050cl_sc1_msff_8x spare9_flop (.l1clk(l1clk),
9051 .siclk(siclk),
9052 .soclk(soclk),
9053 .si(si_9),
9054 .so(so_9),
9055 .d(1'b0),
9056 .q(spare9_flop_unused));
9057assign si_9 = so_8;
9058
9059cl_u1_buf_32x spare9_buf_32x (.in(1'b1),
9060 .out(spare9_buf_32x_unused));
9061cl_u1_nand3_8x spare9_nand3_8x (.in0(1'b1),
9062 .in1(1'b1),
9063 .in2(1'b1),
9064 .out(spare9_nand3_8x_unused));
9065cl_u1_inv_8x spare9_inv_8x (.in(1'b1),
9066 .out(spare9_inv_8x_unused));
9067cl_u1_aoi22_4x spare9_aoi22_4x (.in00(1'b1),
9068 .in01(1'b1),
9069 .in10(1'b1),
9070 .in11(1'b1),
9071 .out(spare9_aoi22_4x_unused));
9072cl_u1_buf_8x spare9_buf_8x (.in(1'b1),
9073 .out(spare9_buf_8x_unused));
9074cl_u1_oai22_4x spare9_oai22_4x (.in00(1'b1),
9075 .in01(1'b1),
9076 .in10(1'b1),
9077 .in11(1'b1),
9078 .out(spare9_oai22_4x_unused));
9079cl_u1_inv_16x spare9_inv_16x (.in(1'b1),
9080 .out(spare9_inv_16x_unused));
9081cl_u1_nand2_16x spare9_nand2_16x (.in0(1'b1),
9082 .in1(1'b1),
9083 .out(spare9_nand2_16x_unused));
9084cl_u1_nor3_4x spare9_nor3_4x (.in0(1'b0),
9085 .in1(1'b0),
9086 .in2(1'b0),
9087 .out(spare9_nor3_4x_unused));
9088cl_u1_nand2_8x spare9_nand2_8x (.in0(1'b1),
9089 .in1(1'b1),
9090 .out(spare9_nand2_8x_unused));
9091cl_u1_buf_16x spare9_buf_16x (.in(1'b1),
9092 .out(spare9_buf_16x_unused));
9093cl_u1_nor2_16x spare9_nor2_16x (.in0(1'b0),
9094 .in1(1'b0),
9095 .out(spare9_nor2_16x_unused));
9096cl_u1_inv_32x spare9_inv_32x (.in(1'b1),
9097 .out(spare9_inv_32x_unused));
9098
9099cl_sc1_msff_8x spare10_flop (.l1clk(l1clk),
9100 .siclk(siclk),
9101 .soclk(soclk),
9102 .si(si_10),
9103 .so(so_10),
9104 .d(1'b0),
9105 .q(spare10_flop_unused));
9106assign si_10 = so_9;
9107
9108cl_u1_buf_32x spare10_buf_32x (.in(1'b1),
9109 .out(spare10_buf_32x_unused));
9110cl_u1_nand3_8x spare10_nand3_8x (.in0(1'b1),
9111 .in1(1'b1),
9112 .in2(1'b1),
9113 .out(spare10_nand3_8x_unused));
9114cl_u1_inv_8x spare10_inv_8x (.in(1'b1),
9115 .out(spare10_inv_8x_unused));
9116cl_u1_aoi22_4x spare10_aoi22_4x (.in00(1'b1),
9117 .in01(1'b1),
9118 .in10(1'b1),
9119 .in11(1'b1),
9120 .out(spare10_aoi22_4x_unused));
9121cl_u1_buf_8x spare10_buf_8x (.in(1'b1),
9122 .out(spare10_buf_8x_unused));
9123cl_u1_oai22_4x spare10_oai22_4x (.in00(1'b1),
9124 .in01(1'b1),
9125 .in10(1'b1),
9126 .in11(1'b1),
9127 .out(spare10_oai22_4x_unused));
9128cl_u1_inv_16x spare10_inv_16x (.in(1'b1),
9129 .out(spare10_inv_16x_unused));
9130cl_u1_nand2_16x spare10_nand2_16x (.in0(1'b1),
9131 .in1(1'b1),
9132 .out(spare10_nand2_16x_unused));
9133cl_u1_nor3_4x spare10_nor3_4x (.in0(1'b0),
9134 .in1(1'b0),
9135 .in2(1'b0),
9136 .out(spare10_nor3_4x_unused));
9137cl_u1_nand2_8x spare10_nand2_8x (.in0(1'b1),
9138 .in1(1'b1),
9139 .out(spare10_nand2_8x_unused));
9140cl_u1_buf_16x spare10_buf_16x (.in(1'b1),
9141 .out(spare10_buf_16x_unused));
9142cl_u1_nor2_16x spare10_nor2_16x (.in0(1'b0),
9143 .in1(1'b0),
9144 .out(spare10_nor2_16x_unused));
9145cl_u1_inv_32x spare10_inv_32x (.in(1'b1),
9146 .out(spare10_inv_32x_unused));
9147
9148cl_sc1_msff_8x spare11_flop (.l1clk(l1clk),
9149 .siclk(siclk),
9150 .soclk(soclk),
9151 .si(si_11),
9152 .so(so_11),
9153 .d(1'b0),
9154 .q(spare11_flop_unused));
9155assign si_11 = so_10;
9156
9157cl_u1_buf_32x spare11_buf_32x (.in(1'b1),
9158 .out(spare11_buf_32x_unused));
9159cl_u1_nand3_8x spare11_nand3_8x (.in0(1'b1),
9160 .in1(1'b1),
9161 .in2(1'b1),
9162 .out(spare11_nand3_8x_unused));
9163cl_u1_inv_8x spare11_inv_8x (.in(1'b1),
9164 .out(spare11_inv_8x_unused));
9165cl_u1_aoi22_4x spare11_aoi22_4x (.in00(1'b1),
9166 .in01(1'b1),
9167 .in10(1'b1),
9168 .in11(1'b1),
9169 .out(spare11_aoi22_4x_unused));
9170cl_u1_buf_8x spare11_buf_8x (.in(1'b1),
9171 .out(spare11_buf_8x_unused));
9172cl_u1_oai22_4x spare11_oai22_4x (.in00(1'b1),
9173 .in01(1'b1),
9174 .in10(1'b1),
9175 .in11(1'b1),
9176 .out(spare11_oai22_4x_unused));
9177cl_u1_inv_16x spare11_inv_16x (.in(1'b1),
9178 .out(spare11_inv_16x_unused));
9179cl_u1_nand2_16x spare11_nand2_16x (.in0(1'b1),
9180 .in1(1'b1),
9181 .out(spare11_nand2_16x_unused));
9182cl_u1_nor3_4x spare11_nor3_4x (.in0(1'b0),
9183 .in1(1'b0),
9184 .in2(1'b0),
9185 .out(spare11_nor3_4x_unused));
9186cl_u1_nand2_8x spare11_nand2_8x (.in0(1'b1),
9187 .in1(1'b1),
9188 .out(spare11_nand2_8x_unused));
9189cl_u1_buf_16x spare11_buf_16x (.in(1'b1),
9190 .out(spare11_buf_16x_unused));
9191cl_u1_nor2_16x spare11_nor2_16x (.in0(1'b0),
9192 .in1(1'b0),
9193 .out(spare11_nor2_16x_unused));
9194cl_u1_inv_32x spare11_inv_32x (.in(1'b1),
9195 .out(spare11_inv_32x_unused));
9196
9197cl_sc1_msff_8x spare12_flop (.l1clk(l1clk),
9198 .siclk(siclk),
9199 .soclk(soclk),
9200 .si(si_12),
9201 .so(so_12),
9202 .d(1'b0),
9203 .q(spare12_flop_unused));
9204assign si_12 = so_11;
9205
9206cl_u1_buf_32x spare12_buf_32x (.in(1'b1),
9207 .out(spare12_buf_32x_unused));
9208cl_u1_nand3_8x spare12_nand3_8x (.in0(1'b1),
9209 .in1(1'b1),
9210 .in2(1'b1),
9211 .out(spare12_nand3_8x_unused));
9212cl_u1_inv_8x spare12_inv_8x (.in(1'b1),
9213 .out(spare12_inv_8x_unused));
9214cl_u1_aoi22_4x spare12_aoi22_4x (.in00(1'b1),
9215 .in01(1'b1),
9216 .in10(1'b1),
9217 .in11(1'b1),
9218 .out(spare12_aoi22_4x_unused));
9219cl_u1_buf_8x spare12_buf_8x (.in(1'b1),
9220 .out(spare12_buf_8x_unused));
9221cl_u1_oai22_4x spare12_oai22_4x (.in00(1'b1),
9222 .in01(1'b1),
9223 .in10(1'b1),
9224 .in11(1'b1),
9225 .out(spare12_oai22_4x_unused));
9226cl_u1_inv_16x spare12_inv_16x (.in(1'b1),
9227 .out(spare12_inv_16x_unused));
9228cl_u1_nand2_16x spare12_nand2_16x (.in0(1'b1),
9229 .in1(1'b1),
9230 .out(spare12_nand2_16x_unused));
9231cl_u1_nor3_4x spare12_nor3_4x (.in0(1'b0),
9232 .in1(1'b0),
9233 .in2(1'b0),
9234 .out(spare12_nor3_4x_unused));
9235cl_u1_nand2_8x spare12_nand2_8x (.in0(1'b1),
9236 .in1(1'b1),
9237 .out(spare12_nand2_8x_unused));
9238cl_u1_buf_16x spare12_buf_16x (.in(1'b1),
9239 .out(spare12_buf_16x_unused));
9240cl_u1_nor2_16x spare12_nor2_16x (.in0(1'b0),
9241 .in1(1'b0),
9242 .out(spare12_nor2_16x_unused));
9243cl_u1_inv_32x spare12_inv_32x (.in(1'b1),
9244 .out(spare12_inv_32x_unused));
9245
9246cl_sc1_msff_8x spare13_flop (.l1clk(l1clk),
9247 .siclk(siclk),
9248 .soclk(soclk),
9249 .si(si_13),
9250 .so(so_13),
9251 .d(1'b0),
9252 .q(spare13_flop_unused));
9253assign si_13 = so_12;
9254
9255cl_u1_buf_32x spare13_buf_32x (.in(1'b1),
9256 .out(spare13_buf_32x_unused));
9257cl_u1_nand3_8x spare13_nand3_8x (.in0(1'b1),
9258 .in1(1'b1),
9259 .in2(1'b1),
9260 .out(spare13_nand3_8x_unused));
9261cl_u1_inv_8x spare13_inv_8x (.in(1'b1),
9262 .out(spare13_inv_8x_unused));
9263cl_u1_aoi22_4x spare13_aoi22_4x (.in00(1'b1),
9264 .in01(1'b1),
9265 .in10(1'b1),
9266 .in11(1'b1),
9267 .out(spare13_aoi22_4x_unused));
9268cl_u1_buf_8x spare13_buf_8x (.in(1'b1),
9269 .out(spare13_buf_8x_unused));
9270cl_u1_oai22_4x spare13_oai22_4x (.in00(1'b1),
9271 .in01(1'b1),
9272 .in10(1'b1),
9273 .in11(1'b1),
9274 .out(spare13_oai22_4x_unused));
9275cl_u1_inv_16x spare13_inv_16x (.in(1'b1),
9276 .out(spare13_inv_16x_unused));
9277cl_u1_nand2_16x spare13_nand2_16x (.in0(1'b1),
9278 .in1(1'b1),
9279 .out(spare13_nand2_16x_unused));
9280cl_u1_nor3_4x spare13_nor3_4x (.in0(1'b0),
9281 .in1(1'b0),
9282 .in2(1'b0),
9283 .out(spare13_nor3_4x_unused));
9284cl_u1_nand2_8x spare13_nand2_8x (.in0(1'b1),
9285 .in1(1'b1),
9286 .out(spare13_nand2_8x_unused));
9287cl_u1_buf_16x spare13_buf_16x (.in(1'b1),
9288 .out(spare13_buf_16x_unused));
9289cl_u1_nor2_16x spare13_nor2_16x (.in0(1'b0),
9290 .in1(1'b0),
9291 .out(spare13_nor2_16x_unused));
9292cl_u1_inv_32x spare13_inv_32x (.in(1'b1),
9293 .out(spare13_inv_32x_unused));
9294
9295cl_sc1_msff_8x spare14_flop (.l1clk(l1clk),
9296 .siclk(siclk),
9297 .soclk(soclk),
9298 .si(si_14),
9299 .so(so_14),
9300 .d(1'b0),
9301 .q(spare14_flop_unused));
9302assign si_14 = so_13;
9303
9304cl_u1_buf_32x spare14_buf_32x (.in(1'b1),
9305 .out(spare14_buf_32x_unused));
9306cl_u1_nand3_8x spare14_nand3_8x (.in0(1'b1),
9307 .in1(1'b1),
9308 .in2(1'b1),
9309 .out(spare14_nand3_8x_unused));
9310cl_u1_inv_8x spare14_inv_8x (.in(1'b1),
9311 .out(spare14_inv_8x_unused));
9312cl_u1_aoi22_4x spare14_aoi22_4x (.in00(1'b1),
9313 .in01(1'b1),
9314 .in10(1'b1),
9315 .in11(1'b1),
9316 .out(spare14_aoi22_4x_unused));
9317cl_u1_buf_8x spare14_buf_8x (.in(1'b1),
9318 .out(spare14_buf_8x_unused));
9319cl_u1_oai22_4x spare14_oai22_4x (.in00(1'b1),
9320 .in01(1'b1),
9321 .in10(1'b1),
9322 .in11(1'b1),
9323 .out(spare14_oai22_4x_unused));
9324cl_u1_inv_16x spare14_inv_16x (.in(1'b1),
9325 .out(spare14_inv_16x_unused));
9326cl_u1_nand2_16x spare14_nand2_16x (.in0(1'b1),
9327 .in1(1'b1),
9328 .out(spare14_nand2_16x_unused));
9329cl_u1_nor3_4x spare14_nor3_4x (.in0(1'b0),
9330 .in1(1'b0),
9331 .in2(1'b0),
9332 .out(spare14_nor3_4x_unused));
9333cl_u1_nand2_8x spare14_nand2_8x (.in0(1'b1),
9334 .in1(1'b1),
9335 .out(spare14_nand2_8x_unused));
9336cl_u1_buf_16x spare14_buf_16x (.in(1'b1),
9337 .out(spare14_buf_16x_unused));
9338cl_u1_nor2_16x spare14_nor2_16x (.in0(1'b0),
9339 .in1(1'b0),
9340 .out(spare14_nor2_16x_unused));
9341cl_u1_inv_32x spare14_inv_32x (.in(1'b1),
9342 .out(spare14_inv_32x_unused));
9343
9344cl_sc1_msff_8x spare15_flop (.l1clk(l1clk),
9345 .siclk(siclk),
9346 .soclk(soclk),
9347 .si(si_15),
9348 .so(so_15),
9349 .d(1'b0),
9350 .q(spare15_flop_unused));
9351assign si_15 = so_14;
9352
9353cl_u1_buf_32x spare15_buf_32x (.in(1'b1),
9354 .out(spare15_buf_32x_unused));
9355cl_u1_nand3_8x spare15_nand3_8x (.in0(1'b1),
9356 .in1(1'b1),
9357 .in2(1'b1),
9358 .out(spare15_nand3_8x_unused));
9359cl_u1_inv_8x spare15_inv_8x (.in(1'b1),
9360 .out(spare15_inv_8x_unused));
9361cl_u1_aoi22_4x spare15_aoi22_4x (.in00(1'b1),
9362 .in01(1'b1),
9363 .in10(1'b1),
9364 .in11(1'b1),
9365 .out(spare15_aoi22_4x_unused));
9366cl_u1_buf_8x spare15_buf_8x (.in(1'b1),
9367 .out(spare15_buf_8x_unused));
9368cl_u1_oai22_4x spare15_oai22_4x (.in00(1'b1),
9369 .in01(1'b1),
9370 .in10(1'b1),
9371 .in11(1'b1),
9372 .out(spare15_oai22_4x_unused));
9373cl_u1_inv_16x spare15_inv_16x (.in(1'b1),
9374 .out(spare15_inv_16x_unused));
9375cl_u1_nand2_16x spare15_nand2_16x (.in0(1'b1),
9376 .in1(1'b1),
9377 .out(spare15_nand2_16x_unused));
9378cl_u1_nor3_4x spare15_nor3_4x (.in0(1'b0),
9379 .in1(1'b0),
9380 .in2(1'b0),
9381 .out(spare15_nor3_4x_unused));
9382cl_u1_nand2_8x spare15_nand2_8x (.in0(1'b1),
9383 .in1(1'b1),
9384 .out(spare15_nand2_8x_unused));
9385cl_u1_buf_16x spare15_buf_16x (.in(1'b1),
9386 .out(spare15_buf_16x_unused));
9387cl_u1_nor2_16x spare15_nor2_16x (.in0(1'b0),
9388 .in1(1'b0),
9389 .out(spare15_nor2_16x_unused));
9390cl_u1_inv_32x spare15_inv_32x (.in(1'b1),
9391 .out(spare15_inv_32x_unused));
9392assign scan_out = so_15;
9393
9394
9395
9396endmodule
9397