Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / tlu / rtl / tlu_tsd_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: tlu_tsd_dp.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module tlu_tsd_dp (
36 l2clk,
37 scan_in,
38 tcu_pce_ov,
39 spc_aclk,
40 spc_bclk,
41 tcu_scan_en,
42 tcu_dectest,
43 tcu_muxtest,
44 tcu_scan_en_wmr,
45 spc_aclk_wmr,
46 wmr_scan_in,
47 trl_shscanid,
48 exu_ccr0,
49 exu_ccr1,
50 exu_ccr2,
51 exu_ccr3,
52 fls_cwp0,
53 fls_cwp1,
54 fls_cwp2,
55 fls_cwp3,
56 pct_tsa_pc,
57 pct_tsa_pc_oor_va,
58 pct_tsa_npc,
59 pct_tsa_npc_oor_va,
60 pct_tsa_npc_nonseq,
61 trl_tsa_gl,
62 trl_tsa_trap_type,
63 trl_asireg_sel,
64 trl_asireg_en,
65 trl_thread_sel,
66 trl_tba_sel,
67 trl_pstate_thread_sel,
68 trl_don_ret_pstate_sel,
69 trl_pstate_en,
70 trl_reset_trap,
71 trl_stay_in_priv,
72 trl_other_trap,
73 trl_tl_gt_0,
74 trl_tsd_tsa_en,
75 trl_tsd_tsa_wd_en,
76 trl_save_tsa,
77 trl_capture_ss,
78 trl_rmw_tsa,
79 tsa_tpc,
80 tsa_tpc_oor_va,
81 tsa_tnpc,
82 tsa_tnpc_oor_va,
83 tsa_tnpc_nonseq,
84 tsa_gl,
85 tsa_rd_data,
86 tsa_trap_type,
87 asi_wr_mondo_head,
88 asi_wr_mondo_tail,
89 asi_wr_device_head,
90 asi_wr_device_tail,
91 asi_wr_res_err_head,
92 asi_wr_res_err_tail,
93 asi_wr_nonres_err_head,
94 asi_wr_nonres_err_tail,
95 asi_rd_iqr_reg,
96 asi_rd_iqr,
97 asi_rd_tpc,
98 asi_wr_tpc,
99 asi_rd_tnpc,
100 asi_wr_tnpc,
101 asi_rd_tstate,
102 asi_wr_tstate,
103 asi_rd_tt,
104 asi_wr_tt,
105 asi_rd_htstate,
106 asi_wr_htstate,
107 asi_wr_tba,
108 asi_wr_pstate,
109 asi_wr_hpstate,
110 asi_wr_htba,
111 asi_rd_asireg,
112 asi_wr_asireg,
113 asi_rd_h_pstate_tba,
114 asi_rd_tba_htba,
115 asi_rd_pstate_hpstate,
116 asi_wr_data_47_14,
117 asi_wr_data_07_00,
118 asi_tsd_wr_data_12,
119 asi_tsd_wr_data_10_08,
120 asi_tsd_wr_data_05_00,
121 asi_tsa_wr_data,
122 asi_tsa_wr_data_npc_oor_va,
123 asi_tsa_wr_data_npc_nonseq,
124 asi_mbist_ecc_in,
125 asi_mbist_run,
126 asi_mbist_cmpsel,
127 tel_ecc,
128 scan_out,
129 wmr_scan_out,
130 tsd_tba,
131 tsd_wr_tpc,
132 tsd_wr_tpc_oor_va,
133 tsd_wr_tnpc,
134 tsd_wr_tnpc_oor_va,
135 tsd_wr_tnpc_nonseq,
136 tsd_wr_gl,
137 tsd_wr_data,
138 tsd_wr_trap_type,
139 tsd_tpc,
140 tsd_tpc_oor_va,
141 tsd_tnpc,
142 tsd_tnpc_oor_va,
143 tsd_tnpc_nonseq,
144 tsd_mrqr_exc_,
145 tsd_dqr_exc_,
146 tsd_asi_data_,
147 tsd_asi_data,
148 tsd_ted_mra_rd_data,
149 tsd_hpstate_ibe,
150 tsd_hpstate_red,
151 tsd_hpstate_hpriv,
152 tsd_hpstate_tlz,
153 tsd_pstate_tct,
154 tsd_pstate_priv,
155 tsd_pstate_ie,
156 tsd_pstate_am,
157 tsd_htstate_hpriv,
158 tsd_shadow_pstate,
159 tsd_shadow_tpc,
160 tsd_shadow_tt,
161 tsd_mbist_data,
162 tsd_itlb_bypass,
163 tlu_itlb_bypass,
164 tlu_lsu_hpstate_hpriv,
165 tlu_lsu_pstate_priv,
166 tlu_ifu_hpstate_hpriv,
167 tlu_ifu_pstate_priv,
168 tlu_pmu_hpstate_hpriv,
169 tlu_pmu_pstate_priv,
170 tlu_dec_hpstate_hpriv,
171 tlu_dec_pstate_priv,
172 tlu_dec_pstate_pef,
173 tlu_pstate_cle,
174 tlu_pstate_am,
175 tlu_ccr,
176 tlu_asi,
177 tlu_cwp);
178wire clk;
179wire stop;
180wire test;
181wire pce_ov;
182wire se;
183wire siclk;
184wire soclk;
185wire [47:0] wr_data;
186wire asireg_lat_wmr_scanin;
187wire asireg_lat_wmr_scanout;
188wire [7:0] asimux3;
189wire [7:0] asimux2;
190wire [7:0] asimux1;
191wire [7:0] asimux0;
192wire [7:0] asi3;
193wire [7:0] asi2;
194wire [7:0] asi1;
195wire [7:0] asi0;
196wire htba3_lat_wmr_scanin;
197wire htba3_lat_wmr_scanout;
198wire [47:14] htba3;
199wire htba2_lat_wmr_scanin;
200wire htba2_lat_wmr_scanout;
201wire [47:14] htba2;
202wire htba1_lat_wmr_scanin;
203wire htba1_lat_wmr_scanout;
204wire [47:14] htba1;
205wire htba0_lat_wmr_scanin;
206wire htba0_lat_wmr_scanout;
207wire [47:14] htba0;
208wire tba3_lat_wmr_scanin;
209wire tba3_lat_wmr_scanout;
210wire [47:15] tba3;
211wire tba2_lat_wmr_scanin;
212wire tba2_lat_wmr_scanout;
213wire [47:15] tba2;
214wire tba1_lat_wmr_scanin;
215wire tba1_lat_wmr_scanout;
216wire [47:15] tba1;
217wire tba0_lat_wmr_scanin;
218wire tba0_lat_wmr_scanout;
219wire [47:15] tba0;
220wire pstate_lat_scanin;
221wire pstate_lat_scanout;
222wire [10:0] wdr_pstate3;
223wire [10:0] wdr_pstate2;
224wire [10:0] wdr_pstate1;
225wire [10:0] new_pstate0;
226wire [10:0] new_pstate1;
227wire [10:0] wdr_pstate0;
228wire [10:0] new_pstate2;
229wire [10:0] new_pstate3;
230wire [10:0] pstate3_reg;
231wire [10:0] pstate2_reg;
232wire [10:0] pstate1_reg;
233wire [10:0] pstate0_reg;
234wire [10:0] shadow_pstate;
235wire [12:0] arch_pstate3;
236wire [12:0] arch_pstate2;
237wire [12:0] arch_pstate1;
238wire [12:0] arch_pstate0;
239wire [12:0] arch_hpstate3;
240wire [12:0] arch_hpstate2;
241wire [12:0] arch_hpstate1;
242wire [12:0] arch_hpstate0;
243wire [12:0] asi_tsd_wr_data_crit;
244wire [3:0] wr_pstate;
245wire [10:0] asi_pstate3;
246wire [10:0] asi_pstate2;
247wire [10:0] asi_pstate1;
248wire [10:0] asi_pstate0;
249wire [3:0] wr_hpstate;
250wire [10:0] asi_hpstate3;
251wire [10:0] asi_hpstate2;
252wire [10:0] asi_hpstate1;
253wire [10:0] asi_hpstate0;
254wire [10:0] don_ret_pstate;
255wire read_tpc_lat_scanin;
256wire read_tpc_lat_scanout;
257wire [47:2] tpc_mod_crit;
258wire tpc_oor_va_mod_crit;
259wire [47:2] tpc_mod;
260wire tpc_oor_va_mod;
261wire read_tnpc_lat_scanin;
262wire read_tnpc_lat_scanout;
263wire [47:2] tnpc_mod_crit;
264wire tnpc_oor_va_mod_crit;
265wire tnpc_nonseq_mod_crit;
266wire [47:2] tnpc_mod;
267wire tnpc_oor_va_mod;
268wire tnpc_nonseq_mod;
269wire read_tstate_lat_scanin;
270wire read_tstate_lat_scanout;
271wire [1:0] gl_mod_crit;
272wire [29:0] tstate_mod_crit;
273wire [8:0] trap_type_mod_crit;
274wire [1:0] gl_mod;
275wire [29:0] tstate_mod;
276wire [8:0] trap_type_mod;
277wire wr_tpc_lat_scanin;
278wire wr_tpc_lat_scanout;
279wire shadow_tpc_lat_scanin;
280wire shadow_tpc_lat_scanout;
281wire wr_tnpc_lat_scanin;
282wire wr_tnpc_lat_scanout;
283wire wr_tstate_lat_scanin;
284wire wr_tstate_lat_scanout;
285wire [29:0] tsa_wr_data;
286wire shadow_tt_lat_scanin;
287wire shadow_tt_lat_scanout;
288wire rd_ctl_lat_scanin;
289wire rd_ctl_lat_scanout;
290wire [2:0] rd_iqr;
291wire [2:0] rd_h_pstate_tba;
292wire [3:0] rd_asireg;
293wire rd_tba_htba;
294wire rd_pstate_hpstate;
295wire rd_tpc;
296wire rd_tnpc;
297wire rd_tstate;
298wire rd_tt;
299wire rd_htstate;
300wire rd_iqr_reg;
301wire [47:0] asi_h_pstate;
302wire [47:0] asi_h_tba;
303wire [47:0] asi_data;
304wire [17:6] iqr_ungated;
305wire [17:6] iqr_reg;
306wire [10:0] pstate_mod;
307wire [47:0] tsa_asi_data;
308wire [47:0] asi_data_;
309wire cmpsel_lat_scanin;
310wire cmpsel_lat_scanout;
311wire [3:0] cmpsel;
312wire tcu_muxtest_rep0;
313
314
315input l2clk;
316input scan_in;
317input tcu_pce_ov;
318input spc_aclk;
319input spc_bclk;
320input tcu_scan_en;
321input tcu_dectest;
322input tcu_muxtest;
323
324input tcu_scan_en_wmr;
325input spc_aclk_wmr; // Warm reset (non)scan
326input wmr_scan_in;
327
328input [1:0] trl_shscanid; // Select which thread to shadow
329
330input [7:0] exu_ccr0;
331input [7:0] exu_ccr1;
332input [7:0] exu_ccr2;
333input [7:0] exu_ccr3;
334
335input [2:0] fls_cwp0;
336input [2:0] fls_cwp1;
337input [2:0] fls_cwp2;
338input [2:0] fls_cwp3;
339
340input [47:2] pct_tsa_pc;
341input pct_tsa_pc_oor_va;
342input [47:2] pct_tsa_npc;
343input pct_tsa_npc_oor_va;
344input pct_tsa_npc_nonseq;
345
346input [1:0] trl_tsa_gl;
347input [8:0] trl_tsa_trap_type;
348input [4:0] trl_asireg_sel; // Which asireg to update?
349input trl_asireg_en; // Power management
350input [3:0] trl_thread_sel; // Which thread to redirect?
351input [2:0] trl_tba_sel; // Which thread & to HPRIV?
352input [4:0] trl_pstate_thread_sel; // Which thread to update pstate?
353input [3:0] trl_don_ret_pstate_sel; // Which thread takes done / retry?
354input trl_pstate_en; // Power management
355input trl_reset_trap;
356input trl_stay_in_priv;
357input trl_other_trap;
358input trl_tl_gt_0;
359input trl_tsd_tsa_en; // Power management
360input trl_tsd_tsa_wd_en; // Power management
361input trl_save_tsa;
362input trl_capture_ss; // Capture signal for TPC and TT
363input trl_rmw_tsa;
364
365input [47:2] tsa_tpc;
366input tsa_tpc_oor_va;
367input [47:2] tsa_tnpc;
368input tsa_tnpc_oor_va;
369input tsa_tnpc_nonseq;
370input [1:0] tsa_gl;
371input [29:0] tsa_rd_data;
372input [8:0] tsa_trap_type;
373
374input asi_wr_mondo_head;
375input asi_wr_mondo_tail;
376input asi_wr_device_head;
377input asi_wr_device_tail;
378input asi_wr_res_err_head;
379input asi_wr_res_err_tail;
380input asi_wr_nonres_err_head;
381input asi_wr_nonres_err_tail;
382input asi_rd_iqr_reg; // Read any interrupt queue reg
383input [2:0] asi_rd_iqr; // encoded TID for IQR read
384input asi_rd_tpc;
385input asi_wr_tpc;
386input asi_rd_tnpc;
387input asi_wr_tnpc;
388input asi_rd_tstate;
389input asi_wr_tstate;
390input asi_rd_tt;
391input asi_wr_tt;
392input asi_rd_htstate;
393input asi_wr_htstate;
394input [3:0] asi_wr_tba;
395input [3:0] asi_wr_pstate;
396input [3:0] asi_wr_hpstate;
397input [3:0] asi_wr_htba;
398input [3:0] asi_rd_asireg;
399input [3:0] asi_wr_asireg;
400input [2:0] asi_rd_h_pstate_tba;
401input asi_rd_tba_htba;
402input asi_rd_pstate_hpstate;
403input [47:14] asi_wr_data_47_14;
404input [7:0] asi_wr_data_07_00;
405input asi_tsd_wr_data_12;
406input [10:8] asi_tsd_wr_data_10_08;
407input [5:0] asi_tsd_wr_data_05_00;
408input [47:0] asi_tsa_wr_data;
409input asi_tsa_wr_data_npc_oor_va;
410input asi_tsa_wr_data_npc_nonseq;
411input [7:0] asi_mbist_ecc_in; // MBIST write data (not really ECC)
412input asi_mbist_run; // MBIST
413input [3:0] asi_mbist_cmpsel; // MBIST
414
415input [15:0] tel_ecc; // MBIST
416
417output scan_out;
418
419output wmr_scan_out; // Warm reset (non)scan
420
421output [47:14] tsd_tba; // Trap Base Address
422output [47:2] tsd_wr_tpc;
423output tsd_wr_tpc_oor_va;
424output [47:2] tsd_wr_tnpc;
425output tsd_wr_tnpc_oor_va;
426output tsd_wr_tnpc_nonseq;
427output [1:0] tsd_wr_gl;
428output [29:0] tsd_wr_data;
429output [8:0] tsd_wr_trap_type;
430
431output [47:2] tsd_tpc;
432output tsd_tpc_oor_va;
433output [47:2] tsd_tnpc;
434output tsd_tnpc_oor_va;
435output tsd_tnpc_nonseq;
436
437output tsd_mrqr_exc_; // Mondo or Res Err Queue Register exc
438output tsd_dqr_exc_; // Device Queue Register exception
439
440output [47:2] tsd_asi_data_;
441output [1:0] tsd_asi_data;
442
443output [135:0] tsd_ted_mra_rd_data;
444
445output [3:0] tsd_hpstate_ibe;
446output [3:0] tsd_hpstate_red;
447output [3:0] tsd_hpstate_hpriv;
448output [3:0] tsd_hpstate_tlz;
449output [3:0] tsd_pstate_tct;
450output [3:0] tsd_pstate_priv;
451output [3:0] tsd_pstate_ie;
452output [3:0] tsd_pstate_am;
453output tsd_htstate_hpriv; // For saturating GL restore
454
455output [10:0] tsd_shadow_pstate;
456output [47:2] tsd_shadow_tpc;
457output [8:0] tsd_shadow_tt;
458
459output [31:0] tsd_mbist_data; // MBIST
460
461output [3:0] tsd_itlb_bypass;
462
463output [3:0] tlu_itlb_bypass;
464
465output [3:0] tlu_lsu_hpstate_hpriv;
466output [3:0] tlu_lsu_pstate_priv;
467output [3:0] tlu_ifu_hpstate_hpriv;
468output [3:0] tlu_ifu_pstate_priv;
469output [3:0] tlu_pmu_hpstate_hpriv;
470output [3:0] tlu_pmu_pstate_priv;
471output [3:0] tlu_dec_hpstate_hpriv;
472output [3:0] tlu_dec_pstate_priv;
473output [3:0] tlu_dec_pstate_pef;
474output [3:0] tlu_pstate_cle;
475output [3:0] tlu_pstate_am;
476
477output [7:0] tlu_ccr;
478output [7:0] tlu_asi;
479output [2:0] tlu_cwp;
480
481
482
483
484
485////////////////////////////////////////////////////////////////////////////////
486
487assign clk = l2clk;
488assign stop = 1'b0;
489assign test = tcu_dectest;
490
491tlu_tsd_dp_buff_macro__width_4 clk_control_buf (
492 .din ({tcu_pce_ov ,
493 tcu_scan_en ,
494 spc_aclk ,
495 spc_bclk }),
496 .dout ({pce_ov ,
497 se ,
498 siclk ,
499 soclk })
500);
501
502
503
504
505////////////////////////////////////////////////////////////////////////////////
506// Buffer off noncritical writes
507//
508
509tlu_tsd_dp_buff_macro__width_34 wr_data_47_14_buf (
510 .din (asi_wr_data_47_14 [47:14] ),
511 .dout (wr_data [47:14] )
512);
513
514tlu_tsd_dp_buff_macro__width_8 wr_data_07_00_buf (
515 .din (asi_wr_data_07_00 [7:0] ),
516 .dout (wr_data [7:0] )
517);
518
519
520
521////////////////////////////////////////////////////////////////////////////////
522// Shadow copy of ASI registers
523//
524
525tlu_tsd_dp_msff_macro__mux_aope__ports_5__stack_48c__width_32 asireg_lat ( // FS:wmr_protect
526 .scan_in(asireg_lat_wmr_scanin),
527 .scan_out(asireg_lat_wmr_scanout),
528 .se (tcu_scan_en_wmr ),
529 .siclk (spc_aclk_wmr ),
530 .din4 ({asimux3 [7:0],
531 asimux2 [7:0],
532 asimux1 [7:0],
533 asimux0 [7:0]}),
534 .din3 ({wr_data [7:0],
535 asimux2 [7:0],
536 asimux1 [7:0],
537 asimux0 [7:0]}),
538 .din2 ({asimux3 [7:0],
539 wr_data [7:0],
540 asimux1 [7:0],
541 asimux0 [7:0]}),
542 .din1 ({asimux3 [7:0],
543 asimux2 [7:0],
544 wr_data [7:0],
545 asimux0 [7:0]}),
546 .din0 ({asimux3 [7:0],
547 asimux2 [7:0],
548 asimux1 [7:0],
549 wr_data [7:0]}),
550 .sel3 (asi_wr_asireg [3 ] ),
551 .sel2 (asi_wr_asireg [2 ] ),
552 .sel1 (asi_wr_asireg [1 ] ),
553 .sel0 (asi_wr_asireg [0 ] ),
554 .en (trl_asireg_en ),
555 .dout ({asi3 [7:0],
556 asi2 [7:0],
557 asi1 [7:0],
558 asi0 [7:0]}),
559 .clk(clk),
560 .soclk(soclk),
561 .pce_ov(pce_ov),
562 .stop(stop)
563);
564
565tlu_tsd_dp_mux_macro__mux_aonpe__ports_5__stack_48c__width_32 asireg_mux
566(
567 .din4 ({asi3 [7:0],
568 asi2 [7:0],
569 asi1 [7:0],
570 asi0 [7:0]}),
571 .din3 ({tlu_asi [7:0],
572 asi2 [7:0],
573 asi1 [7:0],
574 asi0 [7:0]}),
575 .din2 ({asi3 [7:0],
576 tlu_asi [7:0],
577 asi1 [7:0],
578 asi0 [7:0]}),
579 .din1 ({asi3 [7:0],
580 asi2 [7:0],
581 tlu_asi [7:0],
582 asi0 [7:0]}),
583 .din0 ({asi3 [7:0],
584 asi2 [7:0],
585 asi1 [7:0],
586 tlu_asi [7:0]}),
587 .sel4 (trl_asireg_sel [4 ] ),
588 .sel3 (trl_asireg_sel [3 ] ),
589 .sel2 (trl_asireg_sel [2 ] ),
590 .sel1 (trl_asireg_sel [1 ] ),
591 .sel0 (trl_asireg_sel [0 ] ),
592 .dout ({asimux3 [7:0],
593 asimux2 [7:0],
594 asimux1 [7:0],
595 asimux0 [7:0]})
596);
597
598
599////////////////////////////////////////////////////////////////////////////////
600// Trap Base Addresses and Hyperprivileged TBAs
601
602tlu_tsd_dp_msff_macro__left_14__stack_48c__width_34 htba3_lat ( // FS:wmr_protect
603 .scan_in(htba3_lat_wmr_scanin),
604 .scan_out(htba3_lat_wmr_scanout),
605 .se (tcu_scan_en_wmr ),
606 .siclk (spc_aclk_wmr ),
607 .en (asi_wr_htba [3] ),
608 .din (wr_data [47:14] ),
609 .dout (htba3 [47:14] ),
610 .clk(clk),
611 .soclk(soclk),
612 .pce_ov(pce_ov),
613 .stop(stop)
614);
615
616tlu_tsd_dp_msff_macro__left_14__stack_48c__width_34 htba2_lat ( // FS:wmr_protect
617 .scan_in(htba2_lat_wmr_scanin),
618 .scan_out(htba2_lat_wmr_scanout),
619 .se (tcu_scan_en_wmr ),
620 .siclk (spc_aclk_wmr ),
621 .en (asi_wr_htba [2] ),
622 .din (wr_data [47:14] ),
623 .dout (htba2 [47:14] ),
624 .clk(clk),
625 .soclk(soclk),
626 .pce_ov(pce_ov),
627 .stop(stop)
628);
629
630tlu_tsd_dp_msff_macro__left_14__stack_48c__width_34 htba1_lat ( // FS:wmr_protect
631 .scan_in(htba1_lat_wmr_scanin),
632 .scan_out(htba1_lat_wmr_scanout),
633 .se (tcu_scan_en_wmr ),
634 .siclk (spc_aclk_wmr ),
635 .en (asi_wr_htba [1] ),
636 .din (wr_data [47:14] ),
637 .dout (htba1 [47:14] ),
638 .clk(clk),
639 .soclk(soclk),
640 .pce_ov(pce_ov),
641 .stop(stop)
642);
643
644tlu_tsd_dp_msff_macro__left_14__stack_48c__width_34 htba0_lat ( // FS:wmr_protect
645 .scan_in(htba0_lat_wmr_scanin),
646 .scan_out(htba0_lat_wmr_scanout),
647 .se (tcu_scan_en_wmr ),
648 .siclk (spc_aclk_wmr ),
649 .en (asi_wr_htba [0] ),
650 .din (wr_data [47:14] ),
651 .dout (htba0 [47:14] ),
652 .clk(clk),
653 .soclk(soclk),
654 .pce_ov(pce_ov),
655 .stop(stop)
656);
657
658tlu_tsd_dp_msff_macro__left_15__stack_48c__width_33 tba3_lat ( // FS:wmr_protect
659 .scan_in(tba3_lat_wmr_scanin),
660 .scan_out(tba3_lat_wmr_scanout),
661 .se (tcu_scan_en_wmr ),
662 .siclk (spc_aclk_wmr ),
663 .en (asi_wr_tba [3] ),
664 .din (wr_data [47:15] ),
665 .dout (tba3 [47:15] ),
666 .clk(clk),
667 .soclk(soclk),
668 .pce_ov(pce_ov),
669 .stop(stop)
670);
671
672tlu_tsd_dp_msff_macro__left_15__stack_48c__width_33 tba2_lat ( // FS:wmr_protect
673 .scan_in(tba2_lat_wmr_scanin),
674 .scan_out(tba2_lat_wmr_scanout),
675 .se (tcu_scan_en_wmr ),
676 .siclk (spc_aclk_wmr ),
677 .en (asi_wr_tba [2] ),
678 .din (wr_data [47:15] ),
679 .dout (tba2 [47:15] ),
680 .clk(clk),
681 .soclk(soclk),
682 .pce_ov(pce_ov),
683 .stop(stop)
684);
685
686tlu_tsd_dp_msff_macro__left_15__stack_48c__width_33 tba1_lat ( // FS:wmr_protect
687 .scan_in(tba1_lat_wmr_scanin),
688 .scan_out(tba1_lat_wmr_scanout),
689 .se (tcu_scan_en_wmr ),
690 .siclk (spc_aclk_wmr ),
691 .en (asi_wr_tba [1] ),
692 .din (wr_data [47:15] ),
693 .dout (tba1 [47:15] ),
694 .clk(clk),
695 .soclk(soclk),
696 .pce_ov(pce_ov),
697 .stop(stop)
698);
699
700tlu_tsd_dp_msff_macro__left_15__stack_48c__width_33 tba0_lat ( // FS:wmr_protect
701 .scan_in(tba0_lat_wmr_scanin),
702 .scan_out(tba0_lat_wmr_scanout),
703 .se (tcu_scan_en_wmr ),
704 .siclk (spc_aclk_wmr ),
705 .en (asi_wr_tba [0] ),
706 .din (wr_data [47:15] ),
707 .dout (tba0 [47:15] ),
708 .clk(clk),
709 .soclk(soclk),
710 .pce_ov(pce_ov),
711 .stop(stop)
712);
713
714
715
716////////////////////////////////////////////////////////////////////////////////
717// Mux the TBAs
718
719tlu_tsd_dp_mux_macro__dmux_8x__left_14__mux_aodec__ports_8__stack_48c__width_34 tba_mux (
720 .din0 ({tba0 [47:15],
721 trl_tl_gt_0 }),
722 .din1 ({tba1 [47:15],
723 trl_tl_gt_0 }),
724 .din2 ({tba2 [47:15],
725 trl_tl_gt_0 }),
726 .din3 ({tba3 [47:15],
727 trl_tl_gt_0 }),
728 .din4 (htba0 [47:14] ),
729 .din5 (htba1 [47:14] ),
730 .din6 (htba2 [47:14] ),
731 .din7 (htba3 [47:14] ),
732 .sel (trl_tba_sel [2:0] ),
733 .dout (tsd_tba [47:14] )
734);
735
736
737
738////////////////////////////////////////////////////////////////////////////////
739// PSTATE & HPSTATE
740// Note that Niagara 1 did not implement MM (bits 7:6 of PSTATE)
741//
742// HP HP HP HP
743// Name IBE RED HPRIV TLZ TCT CLE TLE PEF AM PRIV IE
744// Architected Position 10 5 2 0 12 9 8 4 3 2 1
745// Physical Position 10 5 6 0 7 9 8 4 3 2 1
746
747tlu_tsd_dp_msff_macro__mux_aonpe__ports_5__stack_48c__width_44 pstate_lat (
748 .scan_in(pstate_lat_scanin),
749 .scan_out(pstate_lat_scanout),
750 .din0 ({wdr_pstate3 [10:0],
751 wdr_pstate2 [10:0],
752 wdr_pstate1 [10:0],
753 new_pstate0 [10:0]}),
754 .din1 ({wdr_pstate3 [10:0],
755 wdr_pstate2 [10:0],
756 new_pstate1 [10:0],
757 wdr_pstate0 [10:0]}),
758 .din2 ({wdr_pstate3 [10:0],
759 new_pstate2 [10:0],
760 wdr_pstate1 [10:0],
761 wdr_pstate0 [10:0]}),
762 .din3 ({new_pstate3 [10:0],
763 wdr_pstate2 [10:0],
764 wdr_pstate1 [10:0],
765 wdr_pstate0 [10:0]}),
766 .din4 ({wdr_pstate3 [10:0],
767 wdr_pstate2 [10:0],
768 wdr_pstate1 [10:0],
769 wdr_pstate0 [10:0]}),
770 .sel0 (trl_pstate_thread_sel [0 ] ),
771 .sel1 (trl_pstate_thread_sel [1 ] ),
772 .sel2 (trl_pstate_thread_sel [2 ] ),
773 .sel3 (trl_pstate_thread_sel [3 ] ),
774 .sel4 (trl_pstate_thread_sel [4 ] ),
775 .en (trl_pstate_en ),
776 .dout ({pstate3_reg [10:0],
777 pstate2_reg [10:0],
778 pstate1_reg [10:0],
779 pstate0_reg [10:0]}),
780 .clk(clk),
781 .se(se),
782 .siclk(siclk),
783 .soclk(soclk),
784 .pce_ov(pce_ov),
785 .stop(stop)
786);
787
788tlu_tsd_dp_mux_macro__mux_aodec__ports_4__stack_48c__width_11 shadow_pstate_mux (
789 .din0 (pstate0_reg [10:0] ),
790 .din1 (pstate1_reg [10:0] ),
791 .din2 (pstate2_reg [10:0] ),
792 .din3 (pstate3_reg [10:0] ),
793 .sel (trl_shscanid [1:0] ),
794 .dout (shadow_pstate [10:0] )
795);
796
797assign tsd_shadow_pstate[10:0] =
798 shadow_pstate[10:0];
799
800assign arch_pstate3[12:0] =
801 {pstate3_reg[7], 2'b00, pstate3_reg[9:8], 3'b000, pstate3_reg[4:1],
802 1'b0};
803assign arch_pstate2[12:0] =
804 {pstate2_reg[7], 2'b00, pstate2_reg[9:8], 3'b000, pstate2_reg[4:1],
805 1'b0};
806assign arch_pstate1[12:0] =
807 {pstate1_reg[7], 2'b00, pstate1_reg[9:8], 3'b000, pstate1_reg[4:1],
808 1'b0};
809assign arch_pstate0[12:0] =
810 {pstate0_reg[7], 2'b00, pstate0_reg[9:8], 3'b000, pstate0_reg[4:1],
811 1'b0};
812
813assign arch_hpstate3[12:0] =
814 {{2 {1'b0}}, pstate3_reg[10], {4 {1'b0}}, pstate3_reg[5],
815 {2 {1'b0}}, pstate3_reg[6], 1'b0, pstate3_reg[0]};
816assign arch_hpstate2[12:0] =
817 {{2 {1'b0}}, pstate2_reg[10], {4 {1'b0}}, pstate2_reg[5],
818 {2 {1'b0}}, pstate2_reg[6], 1'b0, pstate2_reg[0]};
819assign arch_hpstate1[12:0] =
820 {{2 {1'b0}}, pstate1_reg[10], {4 {1'b0}}, pstate1_reg[5],
821 {2 {1'b0}}, pstate1_reg[6], 1'b0, pstate1_reg[0]};
822assign arch_hpstate0[12:0] =
823 {{2 {1'b0}}, pstate0_reg[10], {4 {1'b0}}, pstate0_reg[5],
824 {2 {1'b0}}, pstate0_reg[6], 1'b0, pstate0_reg[0]};
825
826tlu_tsd_dp_buff_macro__rep_1__stack_48c__width_48 pmu_pstate_buf (
827 .din ({ pstate3_reg [9 ],
828 {5 {pstate3_reg [6 ]}},
829 pstate3_reg [4 ],
830 {5 {pstate3_reg [2 ]}},
831 pstate2_reg [9 ],
832 {5 {pstate2_reg [6 ]}},
833 pstate2_reg [4 ],
834 {5 {pstate2_reg [2 ]}},
835 pstate1_reg [9 ],
836 {5 {pstate1_reg [6 ]}},
837 pstate1_reg [4 ],
838 {5 {pstate1_reg [2 ]}},
839 pstate0_reg [9 ],
840 {5 {pstate0_reg [6 ]}},
841 pstate0_reg [4 ],
842 {5 {pstate0_reg [2 ]}}}),
843 .dout ({tlu_pstate_cle [3 ],
844 tlu_pmu_hpstate_hpriv [3 ],
845 tlu_lsu_hpstate_hpriv [3 ],
846 tlu_dec_hpstate_hpriv [3 ],
847 tlu_ifu_hpstate_hpriv [3 ],
848 tsd_hpstate_hpriv [3 ],
849 tlu_dec_pstate_pef [3 ],
850 tlu_pmu_pstate_priv [3 ],
851 tlu_lsu_pstate_priv [3 ],
852 tlu_dec_pstate_priv [3 ],
853 tlu_ifu_pstate_priv [3 ],
854 tsd_pstate_priv [3 ],
855 tlu_pstate_cle [2 ],
856 tlu_pmu_hpstate_hpriv [2 ],
857 tlu_lsu_hpstate_hpriv [2 ],
858 tlu_dec_hpstate_hpriv [2 ],
859 tlu_ifu_hpstate_hpriv [2 ],
860 tsd_hpstate_hpriv [2 ],
861 tlu_dec_pstate_pef [2 ],
862 tlu_pmu_pstate_priv [2 ],
863 tlu_lsu_pstate_priv [2 ],
864 tlu_dec_pstate_priv [2 ],
865 tlu_ifu_pstate_priv [2 ],
866 tsd_pstate_priv [2 ],
867 tlu_pstate_cle [1 ],
868 tlu_pmu_hpstate_hpriv [1 ],
869 tlu_lsu_hpstate_hpriv [1 ],
870 tlu_dec_hpstate_hpriv [1 ],
871 tlu_ifu_hpstate_hpriv [1 ],
872 tsd_hpstate_hpriv [1 ],
873 tlu_dec_pstate_pef [1 ],
874 tlu_pmu_pstate_priv [1 ],
875 tlu_lsu_pstate_priv [1 ],
876 tlu_dec_pstate_priv [1 ],
877 tlu_ifu_pstate_priv [1 ],
878 tsd_pstate_priv [1 ],
879 tlu_pstate_cle [0 ],
880 tlu_pmu_hpstate_hpriv [0 ],
881 tlu_lsu_hpstate_hpriv [0 ],
882 tlu_dec_hpstate_hpriv [0 ],
883 tlu_ifu_hpstate_hpriv [0 ],
884 tsd_hpstate_hpriv [0 ],
885 tlu_dec_pstate_pef [0 ],
886 tlu_pmu_pstate_priv [0 ],
887 tlu_lsu_pstate_priv [0 ],
888 tlu_dec_pstate_priv [0 ],
889 tlu_ifu_pstate_priv [0 ],
890 tsd_pstate_priv [0 ]})
891);
892
893assign tsd_pstate_tct[3:0] =
894 {pstate3_reg[7], pstate2_reg[7], pstate1_reg[7], pstate0_reg[7]};
895
896assign tlu_pstate_am[3:0] =
897 {pstate3_reg[3], pstate2_reg[3], pstate1_reg[3], pstate0_reg[3]};
898
899assign tsd_pstate_am[3:0] =
900 {pstate3_reg[3], pstate2_reg[3], pstate1_reg[3], pstate0_reg[3]};
901
902assign tsd_pstate_ie[3:0] =
903 {pstate3_reg[1], pstate2_reg[1], pstate1_reg[1], pstate0_reg[1]};
904
905assign tsd_hpstate_ibe[3:0] =
906 {pstate3_reg[10], pstate2_reg[10], pstate1_reg[10], pstate0_reg[10]};
907
908assign tsd_hpstate_red[3:0] =
909 {pstate3_reg[5], pstate2_reg[5], pstate1_reg[5], pstate0_reg[5]};
910
911assign tsd_hpstate_tlz[3:0] =
912 {pstate3_reg[0], pstate2_reg[0], pstate1_reg[0], pstate0_reg[0]};
913
914// Bypass ITLB if in RED state or in HPRIV
915tlu_tsd_dp_or_macro__ports_2__stack_4r__width_4 itlb_bypass_or (
916 .din0 ({pstate3_reg [5 ],
917 pstate2_reg [5 ],
918 pstate1_reg [5 ],
919 pstate0_reg [5 ]}),
920 .din1 ({pstate3_reg [6 ],
921 pstate2_reg [6 ],
922 pstate1_reg [6 ],
923 pstate0_reg [6 ]}),
924 .dout (tlu_itlb_bypass [3:0] )
925);
926
927tlu_tsd_dp_buff_macro__rep_1__stack_4r__width_4 itlb_bypass_buf (
928 .din (tlu_itlb_bypass [3:0] ),
929 .dout (tsd_itlb_bypass [3:0] )
930);
931
932assign asi_tsd_wr_data_crit[12] =
933 asi_tsd_wr_data_12;
934assign asi_tsd_wr_data_crit[10:8] =
935 asi_tsd_wr_data_10_08[10:8];
936assign asi_tsd_wr_data_crit[5:0] =
937 asi_tsd_wr_data_05_00[5:0];
938
939// Mux in ASI writes of PSTATE
940tlu_tsd_dp_mux_macro__mux_aope__ports_5__stack_48c__width_44 asi_pstate_mux (
941 .din4 ({pstate3_reg [10:0],
942 pstate2_reg [10:0],
943 pstate1_reg [10:0],
944 pstate0_reg [10:0]}),
945 .din3 ({pstate3_reg [10 ],
946 asi_tsd_wr_data_crit [9:8],
947 asi_tsd_wr_data_crit [12 ],
948 pstate3_reg [6:5],
949 asi_tsd_wr_data_crit [4:1],
950 pstate3_reg [0 ],
951 pstate2_reg [10:0],
952 pstate1_reg [10:0],
953 pstate0_reg [10:0]}),
954 .din2 ({pstate3_reg [10:0],
955 pstate2_reg [10 ],
956 asi_tsd_wr_data_crit [9:8],
957 asi_tsd_wr_data_crit [12 ],
958 pstate2_reg [6:5],
959 asi_tsd_wr_data_crit [4:1],
960 pstate2_reg [0 ],
961 pstate1_reg [10:0],
962 pstate0_reg [10:0]}),
963 .din1 ({pstate3_reg [10:0],
964 pstate2_reg [10:0],
965 pstate1_reg [10 ],
966 asi_tsd_wr_data_crit [9:8],
967 asi_tsd_wr_data_crit [12 ],
968 pstate1_reg [6:5],
969 asi_tsd_wr_data_crit [4:1],
970 pstate1_reg [0 ],
971 pstate0_reg [10:0]}),
972 .din0 ({pstate3_reg [10:0],
973 pstate2_reg [10:0],
974 pstate1_reg [10:0],
975 pstate0_reg [10 ],
976 asi_tsd_wr_data_crit [9:8],
977 asi_tsd_wr_data_crit [12 ],
978 pstate0_reg [6:5],
979 asi_tsd_wr_data_crit [4:1],
980 pstate0_reg [0 ]}),
981 .sel3 (wr_pstate [3 ] ),
982 .sel2 (wr_pstate [2 ] ),
983 .sel1 (wr_pstate [1 ] ),
984 .sel0 (wr_pstate [0 ] ),
985 .dout ({asi_pstate3 [10:0],
986 asi_pstate2 [10:0],
987 asi_pstate1 [10:0],
988 asi_pstate0 [10:0]})
989);
990
991// Mux in ASI writes of HPSTATE
992tlu_tsd_dp_mux_macro__mux_aope__ports_5__stack_48c__width_44 asi_hpstate_mux (
993 .din4 ({asi_pstate3 [10:0],
994 asi_pstate2 [10:0],
995 asi_pstate1 [10:0],
996 asi_pstate0 [10:0]}),
997 .din3 ({asi_tsd_wr_data_crit [10 ],
998 asi_pstate3 [9:7],
999 asi_tsd_wr_data_crit [2 ],
1000 asi_tsd_wr_data_crit [5 ],
1001 asi_pstate3 [4:1],
1002 asi_tsd_wr_data_crit [0 ],
1003 asi_pstate2 [10:0],
1004 asi_pstate1 [10:0],
1005 asi_pstate0 [10:0]}),
1006 .din2 ({asi_pstate3 [10:0],
1007 asi_tsd_wr_data_crit [10 ],
1008 asi_pstate2 [9:7],
1009 asi_tsd_wr_data_crit [2 ],
1010 asi_tsd_wr_data_crit [5 ],
1011 asi_pstate2 [4:1],
1012 asi_tsd_wr_data_crit [0 ],
1013 asi_pstate1 [10:0],
1014 asi_pstate0 [10:0]}),
1015 .din1 ({asi_pstate3 [10:0],
1016 asi_pstate2 [10:0],
1017 asi_tsd_wr_data_crit [10 ],
1018 asi_pstate1 [9:7],
1019 asi_tsd_wr_data_crit [2 ],
1020 asi_tsd_wr_data_crit [5 ],
1021 asi_pstate1 [4:1],
1022 asi_tsd_wr_data_crit [0 ],
1023 asi_pstate0 [10:0]}),
1024 .din0 ({asi_pstate3 [10:0],
1025 asi_pstate2 [10:0],
1026 asi_pstate1 [10:0],
1027 asi_tsd_wr_data_crit [10 ],
1028 asi_pstate0 [9:7],
1029 asi_tsd_wr_data_crit [2 ],
1030 asi_tsd_wr_data_crit [5 ],
1031 asi_pstate0 [4:1],
1032 asi_tsd_wr_data_crit [0 ]}),
1033 .sel3 (wr_hpstate [3 ] ),
1034 .sel2 (wr_hpstate [2 ] ),
1035 .sel1 (wr_hpstate [1 ] ),
1036 .sel0 (wr_hpstate [0 ] ),
1037 .dout ({asi_hpstate3 [10:0],
1038 asi_hpstate2 [10:0],
1039 asi_hpstate1 [10:0],
1040 asi_hpstate0 [10:0]})
1041);
1042
1043// Mux in done and retry H/PSTATE restores if ECC is good
1044tlu_tsd_dp_mux_macro__mux_aope__ports_5__stack_48c__width_44 don_ret_mux (
1045 .din4 ({asi_hpstate3 [10:0],
1046 asi_hpstate2 [10:0],
1047 asi_hpstate1 [10:0],
1048 asi_hpstate0 [10:0]}),
1049 .din3 ({don_ret_pstate [10:0],
1050 asi_hpstate2 [10:0],
1051 asi_hpstate1 [10:0],
1052 asi_hpstate0 [10:0]}),
1053 .din2 ({asi_hpstate3 [10:0],
1054 don_ret_pstate [10:0],
1055 asi_hpstate1 [10:0],
1056 asi_hpstate0 [10:0]}),
1057 .din1 ({asi_hpstate3 [10:0],
1058 asi_hpstate2 [10:0],
1059 don_ret_pstate [10:0],
1060 asi_hpstate0 [10:0]}),
1061 .din0 ({asi_hpstate3 [10:0],
1062 asi_hpstate2 [10:0],
1063 asi_hpstate1 [10:0],
1064 don_ret_pstate [10:0]}),
1065 .sel3 (trl_don_ret_pstate_sel [3 ] ),
1066 .sel2 (trl_don_ret_pstate_sel [2 ] ),
1067 .sel1 (trl_don_ret_pstate_sel [1 ] ),
1068 .sel0 (trl_don_ret_pstate_sel [0 ] ),
1069 .dout ({wdr_pstate3 [10:0],
1070 wdr_pstate2 [10:0],
1071 wdr_pstate1 [10:0],
1072 wdr_pstate0 [10:0]})
1073);
1074
1075tlu_tsd_dp_mux_macro__mux_aonpe__ports_3__stack_48c__width_44 trap_pstate_mux (
1076 // Normal trap to hypervisor
1077 // IBE to 0, HPRIV to 1, RED to 0, TCT to 0, CLE to 0, PEF to 0,
1078 // AM to 0, PRIV to 0, IE to 0
1079 .din2 ({2'b00 ,
1080 pstate3_reg [8 ],
1081 7'b0101000 ,
1082 pstate3_reg [0 ],
1083 2'b00 ,
1084 pstate2_reg [8 ],
1085 7'b0101000 ,
1086 pstate2_reg [0 ],
1087 2'b00 ,
1088 pstate1_reg [8 ],
1089 7'b0101000 ,
1090 pstate1_reg [0 ],
1091 2'b00 ,
1092 pstate0_reg [8 ],
1093 7'b0101000 ,
1094 pstate0_reg [0 ]}),
1095 // Normal trap not to hypervisor
1096 // HPRIV unchanged, RED to 0, TCT to 0, PEF to 1, AM to 0, PRIV to 1,
1097 // IE to 0, CLE set to TLE
1098 .din1 ({pstate3_reg [10 ],
1099 pstate3_reg [8 ],
1100 pstate3_reg [8 ],
1101 1'b0 ,
1102 pstate3_reg [6 ],
1103 5'b01010 ,
1104 pstate3_reg [0 ],
1105 pstate2_reg [10 ],
1106 pstate2_reg [8 ],
1107 pstate2_reg [8 ],
1108 1'b0 ,
1109 pstate2_reg [6 ],
1110 5'b01010 ,
1111 pstate2_reg [0 ],
1112 pstate1_reg [10 ],
1113 pstate1_reg [8 ],
1114 pstate1_reg [8 ],
1115 1'b0 ,
1116 pstate1_reg [6 ],
1117 5'b01010 ,
1118 pstate1_reg [0 ],
1119 pstate0_reg [10 ],
1120 pstate0_reg [8 ],
1121 pstate0_reg [8 ],
1122 1'b0 ,
1123 pstate0_reg [6 ],
1124 5'b01010 ,
1125 pstate0_reg [0 ]}),
1126 // Any reset trap
1127 .din0 ({11'b00001110100 ,
1128 11'b00001110100 ,
1129 11'b00001110100 ,
1130 11'b00001110100 }),
1131 .sel2 (trl_other_trap ),
1132 .sel1 (trl_stay_in_priv ),
1133 .sel0 (trl_reset_trap ),
1134 .dout ({new_pstate3 [10:0],
1135 new_pstate2 [10:0],
1136 new_pstate1 [10:0],
1137 new_pstate0 [10:0]})
1138);
1139
1140
1141
1142
1143////////////////////////////////////////////////////////////////////////////////
1144// Handle read-modify-write ASI accesses
1145//
1146
1147// First capture read
1148tlu_tsd_dp_msff_macro__left_1__minbuff_1__stack_48c__width_47 read_tpc_lat (
1149 .scan_in(read_tpc_lat_scanin),
1150 .scan_out(read_tpc_lat_scanout),
1151 .en (trl_tsd_tsa_en ),
1152 .din ({tsa_tpc [47:2],
1153 tsa_tpc_oor_va }),
1154 .dout ({tpc_mod_crit [47:2],
1155 tpc_oor_va_mod_crit }),
1156 .clk(clk),
1157 .se(se),
1158 .siclk(siclk),
1159 .soclk(soclk),
1160 .pce_ov(pce_ov),
1161 .stop(stop)
1162);
1163
1164tlu_tsd_dp_buff_macro__left_1__rep_1__stack_48c__width_47 read_tpc_buf (
1165 .din ({tpc_mod_crit [47:2],
1166 tpc_oor_va_mod_crit }),
1167 .dout ({tpc_mod [47:2],
1168 tpc_oor_va_mod })
1169);
1170
1171assign tsd_tpc[47:2] =
1172 tpc_mod[47:2];
1173assign tsd_tpc_oor_va =
1174 tpc_oor_va_mod;
1175
1176tlu_tsd_dp_msff_macro__minbuff_1__stack_48c__width_48 read_tnpc_lat (
1177 .scan_in(read_tnpc_lat_scanin),
1178 .scan_out(read_tnpc_lat_scanout),
1179 .en (trl_tsd_tsa_en ),
1180 .din ({tsa_tnpc [47:2],
1181 tsa_tnpc_oor_va ,
1182 tsa_tnpc_nonseq }),
1183 .dout ({tnpc_mod_crit [47:2],
1184 tnpc_oor_va_mod_crit ,
1185 tnpc_nonseq_mod_crit }),
1186 .clk(clk),
1187 .se(se),
1188 .siclk(siclk),
1189 .soclk(soclk),
1190 .pce_ov(pce_ov),
1191 .stop(stop)
1192);
1193
1194tlu_tsd_dp_buff_macro__rep_1__stack_48c__width_48 read_tnpc_buf (
1195 .din ({tnpc_mod_crit [47:2],
1196 tnpc_oor_va_mod_crit ,
1197 tnpc_nonseq_mod_crit }),
1198 .dout ({tnpc_mod [47:2],
1199 tnpc_oor_va_mod ,
1200 tnpc_nonseq_mod })
1201);
1202
1203assign tsd_tnpc[47:2] =
1204 tnpc_mod[47:2];
1205assign tsd_tnpc_oor_va =
1206 tnpc_oor_va_mod;
1207assign tsd_tnpc_nonseq =
1208 tnpc_nonseq_mod;
1209
1210tlu_tsd_dp_msff_macro__left_7__minbuff_1__stack_48c__width_41 read_tstate_lat (
1211 .scan_in(read_tstate_lat_scanin),
1212 .scan_out(read_tstate_lat_scanout),
1213 .en (trl_tsd_tsa_en ),
1214 .din ({tsa_gl [1:0],
1215 tsa_rd_data [29:0],
1216 tsa_trap_type [8:0]}),
1217 .dout ({gl_mod_crit [1:0],
1218 tstate_mod_crit [29:0],
1219 trap_type_mod_crit [8:0]}),
1220 .clk(clk),
1221 .se(se),
1222 .siclk(siclk),
1223 .soclk(soclk),
1224 .pce_ov(pce_ov),
1225 .stop(stop)
1226);
1227
1228tlu_tsd_dp_buff_macro__left_6__stack_48c__width_42 read_tstate_buf (
1229 .din ({gl_mod_crit [1:0],
1230 tstate_mod_crit [29:0],
1231 trap_type_mod_crit [8:0],
1232 tstate_mod_crit [9]}),
1233 .dout ({gl_mod [1:0],
1234 tstate_mod [29:0],
1235 trap_type_mod [8:0],
1236 tsd_htstate_hpriv })
1237);
1238
1239assign tsd_ted_mra_rd_data[135:0] =
1240 {tpc_oor_va_mod_crit ,
1241 tnpc_oor_va_mod_crit ,
1242 tnpc_nonseq_mod_crit ,
1243 gl_mod_crit [1:0],
1244 tstate_mod_crit [29:0],
1245 trap_type_mod_crit [8:0],
1246 tpc_mod_crit [47:2],
1247 tnpc_mod_crit [47:2]};
1248
1249
1250// Then modify data
1251tlu_tsd_dp_msff_macro__left_1__mux_aope__ports_8__stack_48c__width_47 wr_tpc_lat (
1252 .scan_in(wr_tpc_lat_scanin),
1253 .scan_out(wr_tpc_lat_scanout),
1254 .din0 ({asi_mbist_ecc_in [3:0],
1255 {5 {asi_mbist_ecc_in [7:0]}},
1256 asi_mbist_ecc_in [7:6],
1257 asi_mbist_ecc_in [1 ]}),
1258 .din1 ({asi_tsa_wr_data [47:2],
1259 1'b0 }),
1260 .din2 ({asi_tsa_wr_data [17:6], // Mondo or Res Head
1261 tpc_mod [35:2],
1262 tpc_oor_va_mod }),
1263 .din3 ({tpc_mod [47:36],
1264 asi_tsa_wr_data [17:6], // Device or Nonres Head
1265 tpc_mod [23:2],
1266 tpc_oor_va_mod }),
1267 .din4 ({asi_tsa_wr_data [17:6], // Mondo or Res Head
1268 tpc_mod [35:2],
1269 tpc_oor_va_mod }),
1270 .din5 ({tpc_mod [47:36],
1271 asi_tsa_wr_data [17:6], // Device or Nonres Head
1272 tpc_mod [23:2],
1273 tpc_oor_va_mod }),
1274 .din6 ({tpc_mod [47:2],
1275 tpc_oor_va_mod }),
1276 .din7 ({pct_tsa_pc [47:2],
1277 pct_tsa_pc_oor_va }),
1278 .sel0 (asi_mbist_run ),
1279 .sel1 (asi_wr_tpc ),
1280 .sel2 (asi_wr_mondo_head ),
1281 .sel3 (asi_wr_device_head ),
1282 .sel4 (asi_wr_res_err_head ),
1283 .sel5 (asi_wr_nonres_err_head ),
1284 .sel6 (trl_rmw_tsa ),
1285 .en (trl_tsd_tsa_wd_en ),
1286 .dout ({tsd_wr_tpc [47:2],
1287 tsd_wr_tpc_oor_va }),
1288 .clk(clk),
1289 .se(se),
1290 .siclk(siclk),
1291 .soclk(soclk),
1292 .pce_ov(pce_ov),
1293 .stop(stop)
1294);
1295
1296tlu_tsd_dp_msff_macro__left_2__minbuff_1__stack_48c__width_46 shadow_tpc_lat (
1297 .scan_in(shadow_tpc_lat_scanin),
1298 .scan_out(shadow_tpc_lat_scanout),
1299 .din (tsd_wr_tpc [47:2] ),
1300 .en (trl_capture_ss ),
1301 .dout (tsd_shadow_tpc [47:2] ),
1302 .clk(clk),
1303 .se(se),
1304 .siclk(siclk),
1305 .soclk(soclk),
1306 .pce_ov(pce_ov),
1307 .stop(stop)
1308);
1309
1310// Check Interrupt Queue Registers on write to any of them
1311// (qualification occurs in tlu_fls_ctl)
1312// Convert queue registers to 12 bit.
1313tlu_tsd_dp_cmp_macro__width_12 mondo_res_err_cmp (
1314 .din0 (tsd_wr_tpc [47:36] ),
1315 .din1 (tsd_wr_tnpc [47:36] ),
1316 .dout (tsd_mrqr_exc_ )
1317);
1318
1319tlu_tsd_dp_cmp_macro__width_12 device_cmp (
1320 .din0 (tsd_wr_tpc [35:24] ),
1321 .din1 (tsd_wr_tnpc [35:24] ),
1322 .dout (tsd_dqr_exc_ )
1323);
1324
1325// MBIST writes factored into asi_tsa_wr_data for TNPC
1326tlu_tsd_dp_msff_macro__mux_aope__ports_8__stack_48c__width_48 wr_tnpc_lat (
1327 .scan_in(wr_tnpc_lat_scanin),
1328 .scan_out(wr_tnpc_lat_scanout),
1329 .din0 ({asi_tsa_wr_data [47:2],
1330 asi_tsa_wr_data_npc_oor_va ,
1331 asi_tsa_wr_data_npc_nonseq }),
1332 .din1 ({tnpc_mod [47:2],
1333 tnpc_oor_va_mod ,
1334 1'b1 }),
1335 .din2 ({asi_tsa_wr_data [17:6], // Mondo or Res Tail
1336 tnpc_mod [35:2],
1337 tnpc_oor_va_mod ,
1338 tnpc_nonseq_mod }),
1339 .din3 ({tnpc_mod [47:36],
1340 asi_tsa_wr_data [17:6], // Device or Nonres Tail
1341 tnpc_mod [23:2],
1342 tnpc_oor_va_mod ,
1343 tnpc_nonseq_mod }),
1344 .din4 ({asi_tsa_wr_data [17:6], // Mondo or Res Tail
1345 tnpc_mod [35:2],
1346 tnpc_oor_va_mod ,
1347 tnpc_nonseq_mod }),
1348 .din5 ({tnpc_mod [47:36],
1349 asi_tsa_wr_data [17:6], // Device or Nonres Tail
1350 tnpc_mod [23:2],
1351 tnpc_oor_va_mod ,
1352 tnpc_nonseq_mod }),
1353 .din6 ({tnpc_mod [47:2],
1354 tnpc_oor_va_mod ,
1355 tnpc_nonseq_mod }),
1356 .din7 ({pct_tsa_npc [47:2],
1357 pct_tsa_npc_oor_va ,
1358 pct_tsa_npc_nonseq }),
1359 .sel0 (asi_wr_tnpc ),
1360 .sel1 (asi_wr_tpc ),
1361 .sel2 (asi_wr_mondo_tail ),
1362 .sel3 (asi_wr_device_tail ),
1363 .sel4 (asi_wr_res_err_tail ),
1364 .sel5 (asi_wr_nonres_err_tail ),
1365 .sel6 (trl_rmw_tsa ),
1366 .en (trl_tsd_tsa_wd_en ),
1367 .dout ({tsd_wr_tnpc [47:2],
1368 tsd_wr_tnpc_oor_va ,
1369 tsd_wr_tnpc_nonseq }),
1370 .clk(clk),
1371 .se(se),
1372 .siclk(siclk),
1373 .soclk(soclk),
1374 .pce_ov(pce_ov),
1375 .stop(stop)
1376);
1377
1378tlu_tsd_dp_msff_macro__mux_aope__ports_8__stack_48c__width_41 wr_tstate_lat (
1379 .scan_in(wr_tstate_lat_scanin),
1380 .scan_out(wr_tstate_lat_scanout),
1381 .din0 ({asi_mbist_ecc_in [4:0],
1382 {4 {asi_mbist_ecc_in [7:0]}},
1383 asi_mbist_ecc_in [7:4]}),
1384 .din1 ({gl_mod [1:0],
1385 tstate_mod [29:0],
1386 trap_type_mod [8:0]}),
1387 .din2 ({gl_mod [1:0],
1388 tstate_mod [29:0],
1389 trap_type_mod [8:0]}),
1390 .din3 ({asi_tsa_wr_data [41:40], // GL
1391 asi_tsa_wr_data [39:32], // CCR
1392 asi_tsa_wr_data [31:24], // ASI
1393 tstate_mod [13 ], // IBE
1394 asi_tsa_wr_data [17:16], // CLE, TLE
1395 asi_tsa_wr_data [20 ], // TCT
1396 tstate_mod [9 ], // HPRIV
1397 tstate_mod [8 ], // RED
1398 asi_tsa_wr_data [12:9], // PEF, AM, PRIV, IE
1399 tstate_mod [3 ], // TLZ
1400 asi_tsa_wr_data [2:0], // CWP
1401 trap_type_mod [8:0]}), // Trap Type
1402 .din4 ({gl_mod [1:0],
1403 tstate_mod [29:0], // Everything but Trap Type
1404 asi_tsa_wr_data [8:0]}), // Trap Type
1405 .din5 ({gl_mod [1:0], // GL
1406 tstate_mod [29:22], // CCR
1407 tstate_mod [21:14], // ASI
1408 asi_tsa_wr_data [10 ], // IBE
1409 tstate_mod [12:11], // CLE, TLE
1410 tstate_mod [10 ], // TCT
1411 asi_tsa_wr_data [2 ], // HPRIV
1412 asi_tsa_wr_data [5 ], // RED
1413 tstate_mod [7:4], // PEF, AM, PRIV, IE
1414 asi_tsa_wr_data [0 ], // TLZ
1415 tstate_mod [2:0], // CWP
1416 trap_type_mod [8:0]}), // Trap Type
1417 .din6 ({gl_mod [1:0],
1418 tstate_mod [29:0], // Everything but Trap Type
1419 trap_type_mod [8:0]}), // Trap Type
1420 .din7 ({trl_tsa_gl [1:0],
1421 tsa_wr_data [29:0],
1422 trl_tsa_trap_type [8:0]}),
1423 .sel0 (asi_mbist_run ),
1424 .sel1 (asi_wr_tpc ),
1425 .sel2 (asi_wr_tnpc ),
1426 .sel3 (asi_wr_tstate ),
1427 .sel4 (asi_wr_tt ),
1428 .sel5 (asi_wr_htstate ),
1429 .sel6 (trl_save_tsa ),
1430 .en (trl_tsd_tsa_wd_en ),
1431 .dout ({tsd_wr_gl [1:0],
1432 tsd_wr_data [29:0],
1433 tsd_wr_trap_type [8:0]}),
1434 .clk(clk),
1435 .se(se),
1436 .siclk(siclk),
1437 .soclk(soclk),
1438 .pce_ov(pce_ov),
1439 .stop(stop)
1440);
1441
1442tlu_tsd_dp_buff_macro__rep_1__stack_48c__width_30 ccr_cwp_asi_buf (
1443 .din (tsd_wr_data [29:0] ),
1444 .dout ({tlu_ccr [7:0],
1445 tlu_asi [7:0],
1446 don_ret_pstate [10:0],
1447 tlu_cwp [2:0]})
1448);
1449
1450tlu_tsd_dp_msff_macro__stack_48c__width_9 shadow_tt_lat (
1451 .scan_in(shadow_tt_lat_scanin),
1452 .scan_out(shadow_tt_lat_scanout),
1453 .din (tsd_wr_trap_type [8:0] ),
1454 .en (trl_capture_ss ),
1455 .dout (tsd_shadow_tt [8:0] ),
1456 .clk(clk),
1457 .se(se),
1458 .siclk(siclk),
1459 .soclk(soclk),
1460 .pce_ov(pce_ov),
1461 .stop(stop)
1462);
1463
1464
1465////////////////////////////////////////////////////////////////////////////////
1466// Build write vector for Trap Stack Array
1467// GL CCR ASI (H)PSTATE CWP TT PC nPC
1468// 41 40 39 32 31 24 19 8 4 0
1469//
1470// GL, TT, PC, nPC concatenated at the array instantiation
1471//
1472// Also implement HTSTATE
1473// IBE RED HPRIV TLZ
1474// 10 5 2 0
1475
1476tlu_tsd_dp_mux_macro__mux_aonpe__ports_4__stack_48c__width_30 tsa_write_lat (
1477 .din0 ({exu_ccr0 [7:0],
1478 asi0 [7:0],
1479 pstate0_reg [10:0],
1480 fls_cwp0 [2:0]}),
1481 .din1 ({exu_ccr1 [7:0],
1482 asi1 [7:0],
1483 pstate1_reg [10:0],
1484 fls_cwp1 [2:0]}),
1485 .din2 ({exu_ccr2 [7:0],
1486 asi2 [7:0],
1487 pstate2_reg [10:0],
1488 fls_cwp2 [2:0] }),
1489 .din3 ({exu_ccr3 [7:0],
1490 asi3 [7:0],
1491 pstate3_reg [10:0],
1492 fls_cwp3 [2:0] }),
1493 .sel0 (trl_thread_sel [0 ] ),
1494 .sel1 (trl_thread_sel [1 ] ),
1495 .sel2 (trl_thread_sel [2 ] ),
1496 .sel3 (trl_thread_sel [3 ] ),
1497 .dout (tsa_wr_data [29:0] )
1498);
1499
1500
1501
1502////////////////////////////////////////////////////////////////////////////////
1503// Mux ASI reads
1504//
1505
1506tlu_tsd_dp_msff_macro__left_11__stack_48c__width_26 rd_ctl_lat (
1507 .scan_in(rd_ctl_lat_scanin),
1508 .scan_out(rd_ctl_lat_scanout),
1509 .en (1'b1 ),
1510 .din ({asi_rd_iqr [2:0],
1511 asi_wr_pstate [3:0],
1512 asi_rd_h_pstate_tba [2:0],
1513 asi_rd_asireg [3:0],
1514 asi_rd_tba_htba ,
1515 asi_rd_pstate_hpstate ,
1516 asi_wr_hpstate [3:0],
1517 asi_rd_tpc ,
1518 asi_rd_tnpc ,
1519 asi_rd_tstate ,
1520 asi_rd_tt ,
1521 asi_rd_htstate ,
1522 asi_rd_iqr_reg }),
1523 .dout ({rd_iqr [2:0],
1524 wr_pstate [3:0],
1525 rd_h_pstate_tba [2:0],
1526 rd_asireg [3:0],
1527 rd_tba_htba ,
1528 rd_pstate_hpstate ,
1529 wr_hpstate [3:0],
1530 rd_tpc ,
1531 rd_tnpc ,
1532 rd_tstate ,
1533 rd_tt ,
1534 rd_htstate ,
1535 rd_iqr_reg }),
1536 .clk(clk),
1537 .se(se),
1538 .siclk(siclk),
1539 .soclk(soclk),
1540 .pce_ov(pce_ov),
1541 .stop(stop)
1542);
1543
1544tlu_tsd_dp_mux_macro__mux_aodec__ports_8__stack_48c__width_13 asi_php_mux (
1545 .din0 (arch_pstate0 [12:0] ),
1546 .din1 (arch_pstate1 [12:0] ),
1547 .din2 (arch_pstate2 [12:0] ),
1548 .din3 (arch_pstate3 [12:0] ),
1549 .din4 (arch_hpstate0 [12:0] ),
1550 .din5 (arch_hpstate1 [12:0] ),
1551 .din6 (arch_hpstate2 [12:0] ),
1552 .din7 (arch_hpstate3 [12:0] ),
1553 .sel (rd_h_pstate_tba[2:0] ),
1554 .dout (asi_h_pstate [12:0] )
1555);
1556
1557assign asi_h_pstate[47:13] =
1558 {35 {1'b0}};
1559
1560tlu_tsd_dp_mux_macro__left_14__mux_aodec__ports_8__stack_48c__width_34 asi_pstate_tba_mux (
1561 .din0 ({tba0 [47:15],
1562 1'b0 }),
1563 .din1 ({tba1 [47:15],
1564 1'b0 }),
1565 .din2 ({tba2 [47:15],
1566 1'b0 }),
1567 .din3 ({tba3 [47:15],
1568 1'b0 }),
1569 .din4 (htba0 [47:14] ),
1570 .din5 (htba1 [47:14] ),
1571 .din6 (htba2 [47:14] ),
1572 .din7 (htba3 [47:14] ),
1573 .sel (rd_h_pstate_tba[2:0] ),
1574 .dout (asi_h_tba [47:14] )
1575);
1576
1577assign asi_h_tba[13:0] =
1578 {14 {1'b0}};
1579
1580tlu_tsd_dp_mux_macro__dmux_8x__mux_aonpe__ports_6__stack_48c__width_48 asi_data_mux (
1581 .din0 ({40'h0000000000 ,
1582 asi0 [7:0]}),
1583 .din1 ({40'h0000000000 ,
1584 asi1 [7:0]}),
1585 .din2 ({40'h0000000000 ,
1586 asi2 [7:0]}),
1587 .din3 ({40'h0000000000 ,
1588 asi3 [7:0]}),
1589 .din4 (asi_h_tba [47:0] ),
1590 .din5 (asi_h_pstate [47:0] ),
1591 .sel0 (rd_asireg [0 ] ),
1592 .sel1 (rd_asireg [1 ] ),
1593 .sel2 (rd_asireg [2 ] ),
1594 .sel3 (rd_asireg [3 ] ),
1595 .sel4 (rd_tba_htba ),
1596 .sel5 (rd_pstate_hpstate ),
1597 .dout (asi_data [47:0] )
1598);
1599
1600tlu_tsd_dp_mux_macro__left_6__mux_aope__ports_4__stack_48c__width_12 iqr_mux (
1601 .din0 (tnpc_mod [35:24] ), // Device or Nonres Tail
1602 .din1 (tnpc_mod [47:36] ), // Mondo or Res Tail
1603 .din2 (tpc_mod [35:24] ), // Device or Nonres Head
1604 .din3 (tpc_mod [47:36] ), // Mondo or Res Head
1605 .sel0 (rd_iqr [0 ] ),
1606 .sel1 (rd_iqr [1 ] ),
1607 .sel2 (rd_iqr [2 ] ),
1608 .dout (iqr_ungated [17:6] )
1609);
1610
1611// Have to force this off since it's just ORed into downstream logic...
1612tlu_tsd_dp_and_macro__left_6__ports_2__stack_48c__width_12 iqr_and (
1613 .din0 (iqr_ungated [17:6] ),
1614 .din1 ({12 {rd_iqr_reg}} ),
1615 .dout (iqr_reg [17:6] )
1616);
1617
1618assign pstate_mod[10:0] =
1619 tstate_mod[13:3];
1620
1621tlu_tsd_dp_mux_macro__mux_aonpe__ports_5__stack_48c__width_48 tsa_asi_data_mux (
1622 .din0 ({tpc_mod [47:2],
1623 2'b00 }),
1624 .din1 ({tnpc_mod [47:2],
1625 2'b00 }),
1626 .din2 ({6'h00 ,
1627 gl_mod [1:0],
1628 tstate_mod [29:14], // CCR, ASI
1629 3'b000 ,
1630 pstate_mod [7 ], // TCT
1631 2'b00 ,
1632 pstate_mod [9:8], // CLE, TLE
1633 2'b00 , // MM
1634 1'b0 ,
1635 pstate_mod [4:1], // PEF, AM, PRIV, IE
1636 1'b0 ,
1637 5'h00 ,
1638 tstate_mod [2:0]}), // CWP
1639 .din3 ({39'h0000000000 ,
1640 trap_type_mod [8:0]}),
1641 .din4 ({37'h0000000000 ,
1642 pstate_mod [10 ], // IBE
1643 4'h0 ,
1644 pstate_mod [5 ], // RED
1645 2'b00 ,
1646 pstate_mod [6 ], // HPRIV
1647 1'b0 ,
1648 pstate_mod [0 ]}), // TLZ
1649 .sel0 (rd_tpc ),
1650 .sel1 (rd_tnpc ),
1651 .sel2 (rd_tstate ),
1652 .sel3 (rd_tt ),
1653 .sel4 (rd_htstate ),
1654 .dout (tsa_asi_data [47:0] )
1655);
1656
1657tlu_tsd_dp_nor_macro__ports_3__stack_48c__width_48 asi_data_nor (
1658 .din0 (asi_data [47:0] ),
1659 .din1 (tsa_asi_data [47:0] ),
1660 .din2 ({30'h000000000 ,
1661 iqr_reg [17:6],
1662 6'h00 }),
1663 .dout (asi_data_ [47:0] )
1664);
1665
1666tlu_tsd_dp_buff_macro__left_2__rep_1__stack_48c__width_46 asi_data_b_buf (
1667 .din (asi_data_ [47:2] ),
1668 .dout (tsd_asi_data_ [47:2] )
1669);
1670
1671tlu_tsd_dp_inv_macro__stack_48c__width_2 asi_data_inv (
1672 .din (asi_data_ [1:0] ),
1673 .dout (tsd_asi_data [1:0] )
1674);
1675
1676
1677
1678
1679////////////////////////////////////////////////////////////////////////////////
1680// MBIST muxing
1681//
1682
1683tlu_tsd_dp_msff_macro__width_4 cmpsel_lat (
1684 .scan_in(cmpsel_lat_scanin),
1685 .scan_out(cmpsel_lat_scanout),
1686 .en (asi_mbist_run ),
1687 .din (asi_mbist_cmpsel [3:0] ),
1688 .dout (cmpsel [3:0] ),
1689 .clk(clk),
1690 .se(se),
1691 .siclk(siclk),
1692 .soclk(soclk),
1693 .pce_ov(pce_ov),
1694 .stop(stop)
1695);
1696
1697tlu_tsd_dp_buff_macro__dbuff_32x__width_1 tst_mux_rep0 (
1698 .din (tcu_muxtest ),
1699 .dout (tcu_muxtest_rep0 )
1700);
1701
1702tlu_tsd_dp_mux_macro__mux_pgpe__ports_5__stack_48c__width_32 mbist_mux (
1703 .din4 ({tel_ecc [15:10],
1704 tpc_oor_va_mod ,
1705 tnpc_oor_va_mod ,
1706 tel_ecc [15:0],
1707 tel_ecc [7:6],
1708 tnpc_nonseq_mod ,
1709 gl_mod [1:0],
1710 tstate_mod [29:27]}),
1711 .din3 ({tstate_mod [26:0],
1712 trap_type_mod [8:4]}),
1713 .din2 ({trap_type_mod [3:0],
1714 tpc_mod [47:20]}),
1715 .din1 ({tpc_mod [19:2],
1716 tnpc_mod [47:34]}),
1717 .din0 (tnpc_mod [33:2] ),
1718 .sel3 (cmpsel [3 ] ),
1719 .sel2 (cmpsel [2 ] ),
1720 .sel1 (cmpsel [1 ] ),
1721 .sel0 (cmpsel [0 ] ),
1722 .muxtst (tcu_muxtest_rep0 ),
1723 .dout (tsd_mbist_data [31:0] ),
1724 .test(test)
1725);
1726
1727
1728
1729// fixscan start:
1730assign pstate_lat_scanin = scan_in ;
1731assign read_tpc_lat_scanin = pstate_lat_scanout ;
1732assign read_tnpc_lat_scanin = read_tpc_lat_scanout ;
1733assign read_tstate_lat_scanin = read_tnpc_lat_scanout ;
1734assign wr_tpc_lat_scanin = read_tstate_lat_scanout ;
1735assign shadow_tpc_lat_scanin = wr_tpc_lat_scanout ;
1736assign wr_tnpc_lat_scanin = shadow_tpc_lat_scanout ;
1737assign wr_tstate_lat_scanin = wr_tnpc_lat_scanout ;
1738assign shadow_tt_lat_scanin = wr_tstate_lat_scanout ;
1739assign rd_ctl_lat_scanin = shadow_tt_lat_scanout ;
1740assign cmpsel_lat_scanin = rd_ctl_lat_scanout ;
1741assign scan_out = cmpsel_lat_scanout ;
1742
1743assign asireg_lat_wmr_scanin = wmr_scan_in ;
1744assign htba3_lat_wmr_scanin = asireg_lat_wmr_scanout ;
1745assign htba2_lat_wmr_scanin = htba3_lat_wmr_scanout ;
1746assign htba1_lat_wmr_scanin = htba2_lat_wmr_scanout ;
1747assign htba0_lat_wmr_scanin = htba1_lat_wmr_scanout ;
1748assign tba3_lat_wmr_scanin = htba0_lat_wmr_scanout ;
1749assign tba2_lat_wmr_scanin = tba3_lat_wmr_scanout ;
1750assign tba1_lat_wmr_scanin = tba2_lat_wmr_scanout ;
1751assign tba0_lat_wmr_scanin = tba1_lat_wmr_scanout ;
1752assign wmr_scan_out = tba0_lat_wmr_scanout ;
1753// fixscan end:
1754endmodule
1755
1756
1757
1758//
1759// buff macro
1760//
1761//
1762
1763
1764
1765
1766
1767module tlu_tsd_dp_buff_macro__width_4 (
1768 din,
1769 dout);
1770 input [3:0] din;
1771 output [3:0] dout;
1772
1773
1774
1775
1776
1777
1778buff #(4) d0_0 (
1779.in(din[3:0]),
1780.out(dout[3:0])
1781);
1782
1783
1784
1785
1786
1787
1788
1789
1790endmodule
1791
1792
1793
1794
1795
1796//
1797// buff macro
1798//
1799//
1800
1801
1802
1803
1804
1805module tlu_tsd_dp_buff_macro__width_34 (
1806 din,
1807 dout);
1808 input [33:0] din;
1809 output [33:0] dout;
1810
1811
1812
1813
1814
1815
1816buff #(34) d0_0 (
1817.in(din[33:0]),
1818.out(dout[33:0])
1819);
1820
1821
1822
1823
1824
1825
1826
1827
1828endmodule
1829
1830
1831
1832
1833
1834//
1835// buff macro
1836//
1837//
1838
1839
1840
1841
1842
1843module tlu_tsd_dp_buff_macro__width_8 (
1844 din,
1845 dout);
1846 input [7:0] din;
1847 output [7:0] dout;
1848
1849
1850
1851
1852
1853
1854buff #(8) d0_0 (
1855.in(din[7:0]),
1856.out(dout[7:0])
1857);
1858
1859
1860
1861
1862
1863
1864
1865
1866endmodule
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876// any PARAMS parms go into naming of macro
1877
1878module tlu_tsd_dp_msff_macro__mux_aope__ports_5__stack_48c__width_32 (
1879 din0,
1880 din1,
1881 din2,
1882 din3,
1883 din4,
1884 sel0,
1885 sel1,
1886 sel2,
1887 sel3,
1888 clk,
1889 en,
1890 se,
1891 scan_in,
1892 siclk,
1893 soclk,
1894 pce_ov,
1895 stop,
1896 dout,
1897 scan_out);
1898wire psel0;
1899wire psel1;
1900wire psel2;
1901wire psel3;
1902wire psel4;
1903wire [31:0] muxout;
1904wire l1clk;
1905wire siclk_out;
1906wire soclk_out;
1907wire [30:0] so;
1908
1909 input [31:0] din0;
1910 input [31:0] din1;
1911 input [31:0] din2;
1912 input [31:0] din3;
1913 input [31:0] din4;
1914 input sel0;
1915 input sel1;
1916 input sel2;
1917 input sel3;
1918
1919
1920 input clk;
1921 input en;
1922 input se;
1923 input scan_in;
1924 input siclk;
1925 input soclk;
1926 input pce_ov;
1927 input stop;
1928
1929
1930
1931 output [31:0] dout;
1932
1933
1934 output scan_out;
1935
1936
1937
1938
1939cl_dp1_penc5_8x c1_0 (
1940 .test(1'b1),
1941 .sel0(sel0),
1942 .sel1(sel1),
1943 .sel2(sel2),
1944 .sel3(sel3),
1945 .psel0(psel0),
1946 .psel1(psel1),
1947 .psel2(psel2),
1948 .psel3(psel3),
1949 .psel4(psel4)
1950);
1951
1952mux5s #(32) d1_0 (
1953 .sel0(psel0),
1954 .sel1(psel1),
1955 .sel2(psel2),
1956 .sel3(psel3),
1957 .sel4(psel4),
1958 .in0(din0[31:0]),
1959 .in1(din1[31:0]),
1960 .in2(din2[31:0]),
1961 .in3(din3[31:0]),
1962 .in4(din4[31:0]),
1963.dout(muxout[31:0])
1964);
1965cl_dp1_l1hdr_8x c0_0 (
1966.l2clk(clk),
1967.pce(en),
1968.aclk(siclk),
1969.bclk(soclk),
1970.l1clk(l1clk),
1971 .se(se),
1972 .pce_ov(pce_ov),
1973 .stop(stop),
1974 .siclk_out(siclk_out),
1975 .soclk_out(soclk_out)
1976);
1977dff #(32) d0_0 (
1978.l1clk(l1clk),
1979.siclk(siclk_out),
1980.soclk(soclk_out),
1981.d(muxout[31:0]),
1982.si({scan_in,so[30:0]}),
1983.so({so[30:0],scan_out}),
1984.q(dout[31:0])
1985);
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006endmodule
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2017// also for pass-gate with decoder
2018
2019
2020
2021
2022
2023// any PARAMS parms go into naming of macro
2024
2025module tlu_tsd_dp_mux_macro__mux_aonpe__ports_5__stack_48c__width_32 (
2026 din0,
2027 sel0,
2028 din1,
2029 sel1,
2030 din2,
2031 sel2,
2032 din3,
2033 sel3,
2034 din4,
2035 sel4,
2036 dout);
2037wire buffout0;
2038wire buffout1;
2039wire buffout2;
2040wire buffout3;
2041wire buffout4;
2042
2043 input [31:0] din0;
2044 input sel0;
2045 input [31:0] din1;
2046 input sel1;
2047 input [31:0] din2;
2048 input sel2;
2049 input [31:0] din3;
2050 input sel3;
2051 input [31:0] din4;
2052 input sel4;
2053 output [31:0] dout;
2054
2055
2056
2057
2058
2059cl_dp1_muxbuff5_8x c0_0 (
2060 .in0(sel0),
2061 .in1(sel1),
2062 .in2(sel2),
2063 .in3(sel3),
2064 .in4(sel4),
2065 .out0(buffout0),
2066 .out1(buffout1),
2067 .out2(buffout2),
2068 .out3(buffout3),
2069 .out4(buffout4)
2070);
2071mux5s #(32) d0_0 (
2072 .sel0(buffout0),
2073 .sel1(buffout1),
2074 .sel2(buffout2),
2075 .sel3(buffout3),
2076 .sel4(buffout4),
2077 .in0(din0[31:0]),
2078 .in1(din1[31:0]),
2079 .in2(din2[31:0]),
2080 .in3(din3[31:0]),
2081 .in4(din4[31:0]),
2082.dout(dout[31:0])
2083);
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097endmodule
2098
2099
2100
2101
2102
2103
2104// any PARAMS parms go into naming of macro
2105
2106module tlu_tsd_dp_msff_macro__left_14__stack_48c__width_34 (
2107 din,
2108 clk,
2109 en,
2110 se,
2111 scan_in,
2112 siclk,
2113 soclk,
2114 pce_ov,
2115 stop,
2116 dout,
2117 scan_out);
2118wire l1clk;
2119wire siclk_out;
2120wire soclk_out;
2121wire [32:0] so;
2122
2123 input [33:0] din;
2124
2125
2126 input clk;
2127 input en;
2128 input se;
2129 input scan_in;
2130 input siclk;
2131 input soclk;
2132 input pce_ov;
2133 input stop;
2134
2135
2136
2137 output [33:0] dout;
2138
2139
2140 output scan_out;
2141
2142
2143
2144
2145cl_dp1_l1hdr_8x c0_0 (
2146.l2clk(clk),
2147.pce(en),
2148.aclk(siclk),
2149.bclk(soclk),
2150.l1clk(l1clk),
2151 .se(se),
2152 .pce_ov(pce_ov),
2153 .stop(stop),
2154 .siclk_out(siclk_out),
2155 .soclk_out(soclk_out)
2156);
2157dff #(34) d0_0 (
2158.l1clk(l1clk),
2159.siclk(siclk_out),
2160.soclk(soclk_out),
2161.d(din[33:0]),
2162.si({scan_in,so[32:0]}),
2163.so({so[32:0],scan_out}),
2164.q(dout[33:0])
2165);
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186endmodule
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200// any PARAMS parms go into naming of macro
2201
2202module tlu_tsd_dp_msff_macro__left_15__stack_48c__width_33 (
2203 din,
2204 clk,
2205 en,
2206 se,
2207 scan_in,
2208 siclk,
2209 soclk,
2210 pce_ov,
2211 stop,
2212 dout,
2213 scan_out);
2214wire l1clk;
2215wire siclk_out;
2216wire soclk_out;
2217wire [31:0] so;
2218
2219 input [32:0] din;
2220
2221
2222 input clk;
2223 input en;
2224 input se;
2225 input scan_in;
2226 input siclk;
2227 input soclk;
2228 input pce_ov;
2229 input stop;
2230
2231
2232
2233 output [32:0] dout;
2234
2235
2236 output scan_out;
2237
2238
2239
2240
2241cl_dp1_l1hdr_8x c0_0 (
2242.l2clk(clk),
2243.pce(en),
2244.aclk(siclk),
2245.bclk(soclk),
2246.l1clk(l1clk),
2247 .se(se),
2248 .pce_ov(pce_ov),
2249 .stop(stop),
2250 .siclk_out(siclk_out),
2251 .soclk_out(soclk_out)
2252);
2253dff #(33) d0_0 (
2254.l1clk(l1clk),
2255.siclk(siclk_out),
2256.soclk(soclk_out),
2257.d(din[32:0]),
2258.si({scan_in,so[31:0]}),
2259.so({so[31:0],scan_out}),
2260.q(dout[32:0])
2261);
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282endmodule
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2293// also for pass-gate with decoder
2294
2295
2296
2297
2298
2299// any PARAMS parms go into naming of macro
2300
2301module tlu_tsd_dp_mux_macro__dmux_8x__left_14__mux_aodec__ports_8__stack_48c__width_34 (
2302 din0,
2303 din1,
2304 din2,
2305 din3,
2306 din4,
2307 din5,
2308 din6,
2309 din7,
2310 sel,
2311 dout);
2312wire psel0;
2313wire psel1;
2314wire psel2;
2315wire psel3;
2316wire psel4;
2317wire psel5;
2318wire psel6;
2319wire psel7;
2320
2321 input [33:0] din0;
2322 input [33:0] din1;
2323 input [33:0] din2;
2324 input [33:0] din3;
2325 input [33:0] din4;
2326 input [33:0] din5;
2327 input [33:0] din6;
2328 input [33:0] din7;
2329 input [2:0] sel;
2330 output [33:0] dout;
2331
2332
2333
2334
2335
2336cl_dp1_pdec8_8x c0_0 (
2337 .test(1'b1),
2338 .sel0(sel[0]),
2339 .sel1(sel[1]),
2340 .sel2(sel[2]),
2341 .psel0(psel0),
2342 .psel1(psel1),
2343 .psel2(psel2),
2344 .psel3(psel3),
2345 .psel4(psel4),
2346 .psel5(psel5),
2347 .psel6(psel6),
2348 .psel7(psel7)
2349);
2350
2351mux8s #(34) d0_0 (
2352 .sel0(psel0),
2353 .sel1(psel1),
2354 .sel2(psel2),
2355 .sel3(psel3),
2356 .sel4(psel4),
2357 .sel5(psel5),
2358 .sel6(psel6),
2359 .sel7(psel7),
2360 .in0(din0[33:0]),
2361 .in1(din1[33:0]),
2362 .in2(din2[33:0]),
2363 .in3(din3[33:0]),
2364 .in4(din4[33:0]),
2365 .in5(din5[33:0]),
2366 .in6(din6[33:0]),
2367 .in7(din7[33:0]),
2368.dout(dout[33:0])
2369);
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383endmodule
2384
2385
2386
2387
2388
2389
2390// any PARAMS parms go into naming of macro
2391
2392module tlu_tsd_dp_msff_macro__mux_aonpe__ports_5__stack_48c__width_44 (
2393 din0,
2394 sel0,
2395 din1,
2396 sel1,
2397 din2,
2398 sel2,
2399 din3,
2400 sel3,
2401 din4,
2402 sel4,
2403 clk,
2404 en,
2405 se,
2406 scan_in,
2407 siclk,
2408 soclk,
2409 pce_ov,
2410 stop,
2411 dout,
2412 scan_out);
2413wire buffout0;
2414wire buffout1;
2415wire buffout2;
2416wire buffout3;
2417wire buffout4;
2418wire [43:0] muxout;
2419wire l1clk;
2420wire siclk_out;
2421wire soclk_out;
2422wire [42:0] so;
2423
2424 input [43:0] din0;
2425 input sel0;
2426 input [43:0] din1;
2427 input sel1;
2428 input [43:0] din2;
2429 input sel2;
2430 input [43:0] din3;
2431 input sel3;
2432 input [43:0] din4;
2433 input sel4;
2434
2435
2436 input clk;
2437 input en;
2438 input se;
2439 input scan_in;
2440 input siclk;
2441 input soclk;
2442 input pce_ov;
2443 input stop;
2444
2445
2446
2447 output [43:0] dout;
2448
2449
2450 output scan_out;
2451
2452
2453
2454
2455cl_dp1_muxbuff5_8x c1_0 (
2456 .in0(sel0),
2457 .in1(sel1),
2458 .in2(sel2),
2459 .in3(sel3),
2460 .in4(sel4),
2461 .out0(buffout0),
2462 .out1(buffout1),
2463 .out2(buffout2),
2464 .out3(buffout3),
2465 .out4(buffout4)
2466);
2467mux5s #(44) d1_0 (
2468 .sel0(buffout0),
2469 .sel1(buffout1),
2470 .sel2(buffout2),
2471 .sel3(buffout3),
2472 .sel4(buffout4),
2473 .in0(din0[43:0]),
2474 .in1(din1[43:0]),
2475 .in2(din2[43:0]),
2476 .in3(din3[43:0]),
2477 .in4(din4[43:0]),
2478.dout(muxout[43:0])
2479);
2480cl_dp1_l1hdr_8x c0_0 (
2481.l2clk(clk),
2482.pce(en),
2483.aclk(siclk),
2484.bclk(soclk),
2485.l1clk(l1clk),
2486 .se(se),
2487 .pce_ov(pce_ov),
2488 .stop(stop),
2489 .siclk_out(siclk_out),
2490 .soclk_out(soclk_out)
2491);
2492dff #(44) d0_0 (
2493.l1clk(l1clk),
2494.siclk(siclk_out),
2495.soclk(soclk_out),
2496.d(muxout[43:0]),
2497.si({scan_in,so[42:0]}),
2498.so({so[42:0],scan_out}),
2499.q(dout[43:0])
2500);
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521endmodule
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2532// also for pass-gate with decoder
2533
2534
2535
2536
2537
2538// any PARAMS parms go into naming of macro
2539
2540module tlu_tsd_dp_mux_macro__mux_aodec__ports_4__stack_48c__width_11 (
2541 din0,
2542 din1,
2543 din2,
2544 din3,
2545 sel,
2546 dout);
2547wire psel0;
2548wire psel1;
2549wire psel2;
2550wire psel3;
2551
2552 input [10:0] din0;
2553 input [10:0] din1;
2554 input [10:0] din2;
2555 input [10:0] din3;
2556 input [1:0] sel;
2557 output [10:0] dout;
2558
2559
2560
2561
2562
2563cl_dp1_pdec4_8x c0_0 (
2564 .test(1'b1),
2565 .sel0(sel[0]),
2566 .sel1(sel[1]),
2567 .psel0(psel0),
2568 .psel1(psel1),
2569 .psel2(psel2),
2570 .psel3(psel3)
2571);
2572
2573mux4s #(11) d0_0 (
2574 .sel0(psel0),
2575 .sel1(psel1),
2576 .sel2(psel2),
2577 .sel3(psel3),
2578 .in0(din0[10:0]),
2579 .in1(din1[10:0]),
2580 .in2(din2[10:0]),
2581 .in3(din3[10:0]),
2582.dout(dout[10:0])
2583);
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597endmodule
2598
2599
2600//
2601// buff macro
2602//
2603//
2604
2605
2606
2607
2608
2609module tlu_tsd_dp_buff_macro__rep_1__stack_48c__width_48 (
2610 din,
2611 dout);
2612 input [47:0] din;
2613 output [47:0] dout;
2614
2615
2616
2617
2618
2619
2620buff #(48) d0_0 (
2621.in(din[47:0]),
2622.out(dout[47:0])
2623);
2624
2625
2626
2627
2628
2629
2630
2631
2632endmodule
2633
2634
2635
2636
2637
2638//
2639// or macro for ports = 2,3
2640//
2641//
2642
2643
2644
2645
2646
2647module tlu_tsd_dp_or_macro__ports_2__stack_4r__width_4 (
2648 din0,
2649 din1,
2650 dout);
2651 input [3:0] din0;
2652 input [3:0] din1;
2653 output [3:0] dout;
2654
2655
2656
2657
2658
2659
2660or2 #(4) d0_0 (
2661.in0(din0[3:0]),
2662.in1(din1[3:0]),
2663.out(dout[3:0])
2664);
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674endmodule
2675
2676
2677
2678
2679
2680//
2681// buff macro
2682//
2683//
2684
2685
2686
2687
2688
2689module tlu_tsd_dp_buff_macro__rep_1__stack_4r__width_4 (
2690 din,
2691 dout);
2692 input [3:0] din;
2693 output [3:0] dout;
2694
2695
2696
2697
2698
2699
2700buff #(4) d0_0 (
2701.in(din[3:0]),
2702.out(dout[3:0])
2703);
2704
2705
2706
2707
2708
2709
2710
2711
2712endmodule
2713
2714
2715
2716
2717
2718// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2719// also for pass-gate with decoder
2720
2721
2722
2723
2724
2725// any PARAMS parms go into naming of macro
2726
2727module tlu_tsd_dp_mux_macro__mux_aope__ports_5__stack_48c__width_44 (
2728 din0,
2729 din1,
2730 din2,
2731 din3,
2732 din4,
2733 sel0,
2734 sel1,
2735 sel2,
2736 sel3,
2737 dout);
2738wire psel0;
2739wire psel1;
2740wire psel2;
2741wire psel3;
2742wire psel4;
2743
2744 input [43:0] din0;
2745 input [43:0] din1;
2746 input [43:0] din2;
2747 input [43:0] din3;
2748 input [43:0] din4;
2749 input sel0;
2750 input sel1;
2751 input sel2;
2752 input sel3;
2753 output [43:0] dout;
2754
2755
2756
2757
2758
2759cl_dp1_penc5_8x c0_0 (
2760 .test(1'b1),
2761 .sel0(sel0),
2762 .sel1(sel1),
2763 .sel2(sel2),
2764 .sel3(sel3),
2765 .psel0(psel0),
2766 .psel1(psel1),
2767 .psel2(psel2),
2768 .psel3(psel3),
2769 .psel4(psel4)
2770);
2771
2772mux5s #(44) d0_0 (
2773 .sel0(psel0),
2774 .sel1(psel1),
2775 .sel2(psel2),
2776 .sel3(psel3),
2777 .sel4(psel4),
2778 .in0(din0[43:0]),
2779 .in1(din1[43:0]),
2780 .in2(din2[43:0]),
2781 .in3(din3[43:0]),
2782 .in4(din4[43:0]),
2783.dout(dout[43:0])
2784);
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798endmodule
2799
2800
2801// general mux macro for pass-gate and and-or muxes with/wout priority encoders
2802// also for pass-gate with decoder
2803
2804
2805
2806
2807
2808// any PARAMS parms go into naming of macro
2809
2810module tlu_tsd_dp_mux_macro__mux_aonpe__ports_3__stack_48c__width_44 (
2811 din0,
2812 sel0,
2813 din1,
2814 sel1,
2815 din2,
2816 sel2,
2817 dout);
2818wire buffout0;
2819wire buffout1;
2820wire buffout2;
2821
2822 input [43:0] din0;
2823 input sel0;
2824 input [43:0] din1;
2825 input sel1;
2826 input [43:0] din2;
2827 input sel2;
2828 output [43:0] dout;
2829
2830
2831
2832
2833
2834cl_dp1_muxbuff3_8x c0_0 (
2835 .in0(sel0),
2836 .in1(sel1),
2837 .in2(sel2),
2838 .out0(buffout0),
2839 .out1(buffout1),
2840 .out2(buffout2)
2841);
2842mux3s #(44) d0_0 (
2843 .sel0(buffout0),
2844 .sel1(buffout1),
2845 .sel2(buffout2),
2846 .in0(din0[43:0]),
2847 .in1(din1[43:0]),
2848 .in2(din2[43:0]),
2849.dout(dout[43:0])
2850);
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864endmodule
2865
2866
2867
2868
2869
2870
2871// any PARAMS parms go into naming of macro
2872
2873module tlu_tsd_dp_msff_macro__left_1__minbuff_1__stack_48c__width_47 (
2874 din,
2875 clk,
2876 en,
2877 se,
2878 scan_in,
2879 siclk,
2880 soclk,
2881 pce_ov,
2882 stop,
2883 dout,
2884 scan_out);
2885wire l1clk;
2886wire siclk_out;
2887wire soclk_out;
2888wire [45:0] so;
2889
2890 input [46:0] din;
2891
2892
2893 input clk;
2894 input en;
2895 input se;
2896 input scan_in;
2897 input siclk;
2898 input soclk;
2899 input pce_ov;
2900 input stop;
2901
2902
2903
2904 output [46:0] dout;
2905
2906
2907 output scan_out;
2908
2909
2910
2911
2912cl_dp1_l1hdr_8x c0_0 (
2913.l2clk(clk),
2914.pce(en),
2915.aclk(siclk),
2916.bclk(soclk),
2917.l1clk(l1clk),
2918 .se(se),
2919 .pce_ov(pce_ov),
2920 .stop(stop),
2921 .siclk_out(siclk_out),
2922 .soclk_out(soclk_out)
2923);
2924dff #(47) d0_0 (
2925.l1clk(l1clk),
2926.siclk(siclk_out),
2927.soclk(soclk_out),
2928.d(din[46:0]),
2929.si({scan_in,so[45:0]}),
2930.so({so[45:0],scan_out}),
2931.q(dout[46:0])
2932);
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953endmodule
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963//
2964// buff macro
2965//
2966//
2967
2968
2969
2970
2971
2972module tlu_tsd_dp_buff_macro__left_1__rep_1__stack_48c__width_47 (
2973 din,
2974 dout);
2975 input [46:0] din;
2976 output [46:0] dout;
2977
2978
2979
2980
2981
2982
2983buff #(47) d0_0 (
2984.in(din[46:0]),
2985.out(dout[46:0])
2986);
2987
2988
2989
2990
2991
2992
2993
2994
2995endmodule
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005// any PARAMS parms go into naming of macro
3006
3007module tlu_tsd_dp_msff_macro__minbuff_1__stack_48c__width_48 (
3008 din,
3009 clk,
3010 en,
3011 se,
3012 scan_in,
3013 siclk,
3014 soclk,
3015 pce_ov,
3016 stop,
3017 dout,
3018 scan_out);
3019wire l1clk;
3020wire siclk_out;
3021wire soclk_out;
3022wire [46:0] so;
3023
3024 input [47:0] din;
3025
3026
3027 input clk;
3028 input en;
3029 input se;
3030 input scan_in;
3031 input siclk;
3032 input soclk;
3033 input pce_ov;
3034 input stop;
3035
3036
3037
3038 output [47:0] dout;
3039
3040
3041 output scan_out;
3042
3043
3044
3045
3046cl_dp1_l1hdr_8x c0_0 (
3047.l2clk(clk),
3048.pce(en),
3049.aclk(siclk),
3050.bclk(soclk),
3051.l1clk(l1clk),
3052 .se(se),
3053 .pce_ov(pce_ov),
3054 .stop(stop),
3055 .siclk_out(siclk_out),
3056 .soclk_out(soclk_out)
3057);
3058dff #(48) d0_0 (
3059.l1clk(l1clk),
3060.siclk(siclk_out),
3061.soclk(soclk_out),
3062.d(din[47:0]),
3063.si({scan_in,so[46:0]}),
3064.so({so[46:0],scan_out}),
3065.q(dout[47:0])
3066);
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087endmodule
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101// any PARAMS parms go into naming of macro
3102
3103module tlu_tsd_dp_msff_macro__left_7__minbuff_1__stack_48c__width_41 (
3104 din,
3105 clk,
3106 en,
3107 se,
3108 scan_in,
3109 siclk,
3110 soclk,
3111 pce_ov,
3112 stop,
3113 dout,
3114 scan_out);
3115wire l1clk;
3116wire siclk_out;
3117wire soclk_out;
3118wire [39:0] so;
3119
3120 input [40:0] din;
3121
3122
3123 input clk;
3124 input en;
3125 input se;
3126 input scan_in;
3127 input siclk;
3128 input soclk;
3129 input pce_ov;
3130 input stop;
3131
3132
3133
3134 output [40:0] dout;
3135
3136
3137 output scan_out;
3138
3139
3140
3141
3142cl_dp1_l1hdr_8x c0_0 (
3143.l2clk(clk),
3144.pce(en),
3145.aclk(siclk),
3146.bclk(soclk),
3147.l1clk(l1clk),
3148 .se(se),
3149 .pce_ov(pce_ov),
3150 .stop(stop),
3151 .siclk_out(siclk_out),
3152 .soclk_out(soclk_out)
3153);
3154dff #(41) d0_0 (
3155.l1clk(l1clk),
3156.siclk(siclk_out),
3157.soclk(soclk_out),
3158.d(din[40:0]),
3159.si({scan_in,so[39:0]}),
3160.so({so[39:0],scan_out}),
3161.q(dout[40:0])
3162);
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183endmodule
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193//
3194// buff macro
3195//
3196//
3197
3198
3199
3200
3201
3202module tlu_tsd_dp_buff_macro__left_6__stack_48c__width_42 (
3203 din,
3204 dout);
3205 input [41:0] din;
3206 output [41:0] dout;
3207
3208
3209
3210
3211
3212
3213buff #(42) d0_0 (
3214.in(din[41:0]),
3215.out(dout[41:0])
3216);
3217
3218
3219
3220
3221
3222
3223
3224
3225endmodule
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235// any PARAMS parms go into naming of macro
3236
3237module tlu_tsd_dp_msff_macro__left_1__mux_aope__ports_8__stack_48c__width_47 (
3238 din0,
3239 din1,
3240 din2,
3241 din3,
3242 din4,
3243 din5,
3244 din6,
3245 din7,
3246 sel0,
3247 sel1,
3248 sel2,
3249 sel3,
3250 sel4,
3251 sel5,
3252 sel6,
3253 clk,
3254 en,
3255 se,
3256 scan_in,
3257 siclk,
3258 soclk,
3259 pce_ov,
3260 stop,
3261 dout,
3262 scan_out);
3263wire psel0;
3264wire psel1;
3265wire psel2;
3266wire psel3;
3267wire psel4;
3268wire psel5;
3269wire psel6;
3270wire psel7;
3271wire [46:0] muxout;
3272wire l1clk;
3273wire siclk_out;
3274wire soclk_out;
3275wire [45:0] so;
3276
3277 input [46:0] din0;
3278 input [46:0] din1;
3279 input [46:0] din2;
3280 input [46:0] din3;
3281 input [46:0] din4;
3282 input [46:0] din5;
3283 input [46:0] din6;
3284 input [46:0] din7;
3285 input sel0;
3286 input sel1;
3287 input sel2;
3288 input sel3;
3289 input sel4;
3290 input sel5;
3291 input sel6;
3292
3293
3294 input clk;
3295 input en;
3296 input se;
3297 input scan_in;
3298 input siclk;
3299 input soclk;
3300 input pce_ov;
3301 input stop;
3302
3303
3304
3305 output [46:0] dout;
3306
3307
3308 output scan_out;
3309
3310
3311
3312
3313cl_dp1_penc8_8x c1_0 (
3314 .test(1'b1),
3315 .sel0(sel0),
3316 .sel1(sel1),
3317 .sel2(sel2),
3318 .sel3(sel3),
3319 .sel4(sel4),
3320 .sel5(sel5),
3321 .sel6(sel6),
3322 .psel0(psel0),
3323 .psel1(psel1),
3324 .psel2(psel2),
3325 .psel3(psel3),
3326 .psel4(psel4),
3327 .psel5(psel5),
3328 .psel6(psel6),
3329 .psel7(psel7)
3330);
3331
3332mux8s #(47) d1_0 (
3333 .sel0(psel0),
3334 .sel1(psel1),
3335 .sel2(psel2),
3336 .sel3(psel3),
3337 .sel4(psel4),
3338 .sel5(psel5),
3339 .sel6(psel6),
3340 .sel7(psel7),
3341 .in0(din0[46:0]),
3342 .in1(din1[46:0]),
3343 .in2(din2[46:0]),
3344 .in3(din3[46:0]),
3345 .in4(din4[46:0]),
3346 .in5(din5[46:0]),
3347 .in6(din6[46:0]),
3348 .in7(din7[46:0]),
3349.dout(muxout[46:0])
3350);
3351cl_dp1_l1hdr_8x c0_0 (
3352.l2clk(clk),
3353.pce(en),
3354.aclk(siclk),
3355.bclk(soclk),
3356.l1clk(l1clk),
3357 .se(se),
3358 .pce_ov(pce_ov),
3359 .stop(stop),
3360 .siclk_out(siclk_out),
3361 .soclk_out(soclk_out)
3362);
3363dff #(47) d0_0 (
3364.l1clk(l1clk),
3365.siclk(siclk_out),
3366.soclk(soclk_out),
3367.d(muxout[46:0]),
3368.si({scan_in,so[45:0]}),
3369.so({so[45:0],scan_out}),
3370.q(dout[46:0])
3371);
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392endmodule
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406// any PARAMS parms go into naming of macro
3407
3408module tlu_tsd_dp_msff_macro__left_2__minbuff_1__stack_48c__width_46 (
3409 din,
3410 clk,
3411 en,
3412 se,
3413 scan_in,
3414 siclk,
3415 soclk,
3416 pce_ov,
3417 stop,
3418 dout,
3419 scan_out);
3420wire l1clk;
3421wire siclk_out;
3422wire soclk_out;
3423wire [44:0] so;
3424
3425 input [45:0] din;
3426
3427
3428 input clk;
3429 input en;
3430 input se;
3431 input scan_in;
3432 input siclk;
3433 input soclk;
3434 input pce_ov;
3435 input stop;
3436
3437
3438
3439 output [45:0] dout;
3440
3441
3442 output scan_out;
3443
3444
3445
3446
3447cl_dp1_l1hdr_8x c0_0 (
3448.l2clk(clk),
3449.pce(en),
3450.aclk(siclk),
3451.bclk(soclk),
3452.l1clk(l1clk),
3453 .se(se),
3454 .pce_ov(pce_ov),
3455 .stop(stop),
3456 .siclk_out(siclk_out),
3457 .soclk_out(soclk_out)
3458);
3459dff #(46) d0_0 (
3460.l1clk(l1clk),
3461.siclk(siclk_out),
3462.soclk(soclk_out),
3463.d(din[45:0]),
3464.si({scan_in,so[44:0]}),
3465.so({so[44:0],scan_out}),
3466.q(dout[45:0])
3467);
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488endmodule
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498//
3499// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
3500//
3501//
3502
3503
3504
3505
3506
3507module tlu_tsd_dp_cmp_macro__width_12 (
3508 din0,
3509 din1,
3510 dout);
3511 input [11:0] din0;
3512 input [11:0] din1;
3513 output dout;
3514
3515
3516
3517
3518
3519
3520cmp #(12) m0_0 (
3521.in0(din0[11:0]),
3522.in1(din1[11:0]),
3523.out(dout)
3524);
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535endmodule
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545// any PARAMS parms go into naming of macro
3546
3547module tlu_tsd_dp_msff_macro__mux_aope__ports_8__stack_48c__width_48 (
3548 din0,
3549 din1,
3550 din2,
3551 din3,
3552 din4,
3553 din5,
3554 din6,
3555 din7,
3556 sel0,
3557 sel1,
3558 sel2,
3559 sel3,
3560 sel4,
3561 sel5,
3562 sel6,
3563 clk,
3564 en,
3565 se,
3566 scan_in,
3567 siclk,
3568 soclk,
3569 pce_ov,
3570 stop,
3571 dout,
3572 scan_out);
3573wire psel0;
3574wire psel1;
3575wire psel2;
3576wire psel3;
3577wire psel4;
3578wire psel5;
3579wire psel6;
3580wire psel7;
3581wire [47:0] muxout;
3582wire l1clk;
3583wire siclk_out;
3584wire soclk_out;
3585wire [46:0] so;
3586
3587 input [47:0] din0;
3588 input [47:0] din1;
3589 input [47:0] din2;
3590 input [47:0] din3;
3591 input [47:0] din4;
3592 input [47:0] din5;
3593 input [47:0] din6;
3594 input [47:0] din7;
3595 input sel0;
3596 input sel1;
3597 input sel2;
3598 input sel3;
3599 input sel4;
3600 input sel5;
3601 input sel6;
3602
3603
3604 input clk;
3605 input en;
3606 input se;
3607 input scan_in;
3608 input siclk;
3609 input soclk;
3610 input pce_ov;
3611 input stop;
3612
3613
3614
3615 output [47:0] dout;
3616
3617
3618 output scan_out;
3619
3620
3621
3622
3623cl_dp1_penc8_8x c1_0 (
3624 .test(1'b1),
3625 .sel0(sel0),
3626 .sel1(sel1),
3627 .sel2(sel2),
3628 .sel3(sel3),
3629 .sel4(sel4),
3630 .sel5(sel5),
3631 .sel6(sel6),
3632 .psel0(psel0),
3633 .psel1(psel1),
3634 .psel2(psel2),
3635 .psel3(psel3),
3636 .psel4(psel4),
3637 .psel5(psel5),
3638 .psel6(psel6),
3639 .psel7(psel7)
3640);
3641
3642mux8s #(48) d1_0 (
3643 .sel0(psel0),
3644 .sel1(psel1),
3645 .sel2(psel2),
3646 .sel3(psel3),
3647 .sel4(psel4),
3648 .sel5(psel5),
3649 .sel6(psel6),
3650 .sel7(psel7),
3651 .in0(din0[47:0]),
3652 .in1(din1[47:0]),
3653 .in2(din2[47:0]),
3654 .in3(din3[47:0]),
3655 .in4(din4[47:0]),
3656 .in5(din5[47:0]),
3657 .in6(din6[47:0]),
3658 .in7(din7[47:0]),
3659.dout(muxout[47:0])
3660);
3661cl_dp1_l1hdr_8x c0_0 (
3662.l2clk(clk),
3663.pce(en),
3664.aclk(siclk),
3665.bclk(soclk),
3666.l1clk(l1clk),
3667 .se(se),
3668 .pce_ov(pce_ov),
3669 .stop(stop),
3670 .siclk_out(siclk_out),
3671 .soclk_out(soclk_out)
3672);
3673dff #(48) d0_0 (
3674.l1clk(l1clk),
3675.siclk(siclk_out),
3676.soclk(soclk_out),
3677.d(muxout[47:0]),
3678.si({scan_in,so[46:0]}),
3679.so({so[46:0],scan_out}),
3680.q(dout[47:0])
3681);
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702endmodule
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716// any PARAMS parms go into naming of macro
3717
3718module tlu_tsd_dp_msff_macro__mux_aope__ports_8__stack_48c__width_41 (
3719 din0,
3720 din1,
3721 din2,
3722 din3,
3723 din4,
3724 din5,
3725 din6,
3726 din7,
3727 sel0,
3728 sel1,
3729 sel2,
3730 sel3,
3731 sel4,
3732 sel5,
3733 sel6,
3734 clk,
3735 en,
3736 se,
3737 scan_in,
3738 siclk,
3739 soclk,
3740 pce_ov,
3741 stop,
3742 dout,
3743 scan_out);
3744wire psel0;
3745wire psel1;
3746wire psel2;
3747wire psel3;
3748wire psel4;
3749wire psel5;
3750wire psel6;
3751wire psel7;
3752wire [40:0] muxout;
3753wire l1clk;
3754wire siclk_out;
3755wire soclk_out;
3756wire [39:0] so;
3757
3758 input [40:0] din0;
3759 input [40:0] din1;
3760 input [40:0] din2;
3761 input [40:0] din3;
3762 input [40:0] din4;
3763 input [40:0] din5;
3764 input [40:0] din6;
3765 input [40:0] din7;
3766 input sel0;
3767 input sel1;
3768 input sel2;
3769 input sel3;
3770 input sel4;
3771 input sel5;
3772 input sel6;
3773
3774
3775 input clk;
3776 input en;
3777 input se;
3778 input scan_in;
3779 input siclk;
3780 input soclk;
3781 input pce_ov;
3782 input stop;
3783
3784
3785
3786 output [40:0] dout;
3787
3788
3789 output scan_out;
3790
3791
3792
3793
3794cl_dp1_penc8_8x c1_0 (
3795 .test(1'b1),
3796 .sel0(sel0),
3797 .sel1(sel1),
3798 .sel2(sel2),
3799 .sel3(sel3),
3800 .sel4(sel4),
3801 .sel5(sel5),
3802 .sel6(sel6),
3803 .psel0(psel0),
3804 .psel1(psel1),
3805 .psel2(psel2),
3806 .psel3(psel3),
3807 .psel4(psel4),
3808 .psel5(psel5),
3809 .psel6(psel6),
3810 .psel7(psel7)
3811);
3812
3813mux8s #(41) d1_0 (
3814 .sel0(psel0),
3815 .sel1(psel1),
3816 .sel2(psel2),
3817 .sel3(psel3),
3818 .sel4(psel4),
3819 .sel5(psel5),
3820 .sel6(psel6),
3821 .sel7(psel7),
3822 .in0(din0[40:0]),
3823 .in1(din1[40:0]),
3824 .in2(din2[40:0]),
3825 .in3(din3[40:0]),
3826 .in4(din4[40:0]),
3827 .in5(din5[40:0]),
3828 .in6(din6[40:0]),
3829 .in7(din7[40:0]),
3830.dout(muxout[40:0])
3831);
3832cl_dp1_l1hdr_8x c0_0 (
3833.l2clk(clk),
3834.pce(en),
3835.aclk(siclk),
3836.bclk(soclk),
3837.l1clk(l1clk),
3838 .se(se),
3839 .pce_ov(pce_ov),
3840 .stop(stop),
3841 .siclk_out(siclk_out),
3842 .soclk_out(soclk_out)
3843);
3844dff #(41) d0_0 (
3845.l1clk(l1clk),
3846.siclk(siclk_out),
3847.soclk(soclk_out),
3848.d(muxout[40:0]),
3849.si({scan_in,so[39:0]}),
3850.so({so[39:0],scan_out}),
3851.q(dout[40:0])
3852);
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873endmodule
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883//
3884// buff macro
3885//
3886//
3887
3888
3889
3890
3891
3892module tlu_tsd_dp_buff_macro__rep_1__stack_48c__width_30 (
3893 din,
3894 dout);
3895 input [29:0] din;
3896 output [29:0] dout;
3897
3898
3899
3900
3901
3902
3903buff #(30) d0_0 (
3904.in(din[29:0]),
3905.out(dout[29:0])
3906);
3907
3908
3909
3910
3911
3912
3913
3914
3915endmodule
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925// any PARAMS parms go into naming of macro
3926
3927module tlu_tsd_dp_msff_macro__stack_48c__width_9 (
3928 din,
3929 clk,
3930 en,
3931 se,
3932 scan_in,
3933 siclk,
3934 soclk,
3935 pce_ov,
3936 stop,
3937 dout,
3938 scan_out);
3939wire l1clk;
3940wire siclk_out;
3941wire soclk_out;
3942wire [7:0] so;
3943
3944 input [8:0] din;
3945
3946
3947 input clk;
3948 input en;
3949 input se;
3950 input scan_in;
3951 input siclk;
3952 input soclk;
3953 input pce_ov;
3954 input stop;
3955
3956
3957
3958 output [8:0] dout;
3959
3960
3961 output scan_out;
3962
3963
3964
3965
3966cl_dp1_l1hdr_8x c0_0 (
3967.l2clk(clk),
3968.pce(en),
3969.aclk(siclk),
3970.bclk(soclk),
3971.l1clk(l1clk),
3972 .se(se),
3973 .pce_ov(pce_ov),
3974 .stop(stop),
3975 .siclk_out(siclk_out),
3976 .soclk_out(soclk_out)
3977);
3978dff #(9) d0_0 (
3979.l1clk(l1clk),
3980.siclk(siclk_out),
3981.soclk(soclk_out),
3982.d(din[8:0]),
3983.si({scan_in,so[7:0]}),
3984.so({so[7:0],scan_out}),
3985.q(dout[8:0])
3986);
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007endmodule
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4018// also for pass-gate with decoder
4019
4020
4021
4022
4023
4024// any PARAMS parms go into naming of macro
4025
4026module tlu_tsd_dp_mux_macro__mux_aonpe__ports_4__stack_48c__width_30 (
4027 din0,
4028 sel0,
4029 din1,
4030 sel1,
4031 din2,
4032 sel2,
4033 din3,
4034 sel3,
4035 dout);
4036wire buffout0;
4037wire buffout1;
4038wire buffout2;
4039wire buffout3;
4040
4041 input [29:0] din0;
4042 input sel0;
4043 input [29:0] din1;
4044 input sel1;
4045 input [29:0] din2;
4046 input sel2;
4047 input [29:0] din3;
4048 input sel3;
4049 output [29:0] dout;
4050
4051
4052
4053
4054
4055cl_dp1_muxbuff4_8x c0_0 (
4056 .in0(sel0),
4057 .in1(sel1),
4058 .in2(sel2),
4059 .in3(sel3),
4060 .out0(buffout0),
4061 .out1(buffout1),
4062 .out2(buffout2),
4063 .out3(buffout3)
4064);
4065mux4s #(30) d0_0 (
4066 .sel0(buffout0),
4067 .sel1(buffout1),
4068 .sel2(buffout2),
4069 .sel3(buffout3),
4070 .in0(din0[29:0]),
4071 .in1(din1[29:0]),
4072 .in2(din2[29:0]),
4073 .in3(din3[29:0]),
4074.dout(dout[29:0])
4075);
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089endmodule
4090
4091
4092
4093
4094
4095
4096// any PARAMS parms go into naming of macro
4097
4098module tlu_tsd_dp_msff_macro__left_11__stack_48c__width_26 (
4099 din,
4100 clk,
4101 en,
4102 se,
4103 scan_in,
4104 siclk,
4105 soclk,
4106 pce_ov,
4107 stop,
4108 dout,
4109 scan_out);
4110wire l1clk;
4111wire siclk_out;
4112wire soclk_out;
4113wire [24:0] so;
4114
4115 input [25:0] din;
4116
4117
4118 input clk;
4119 input en;
4120 input se;
4121 input scan_in;
4122 input siclk;
4123 input soclk;
4124 input pce_ov;
4125 input stop;
4126
4127
4128
4129 output [25:0] dout;
4130
4131
4132 output scan_out;
4133
4134
4135
4136
4137cl_dp1_l1hdr_8x c0_0 (
4138.l2clk(clk),
4139.pce(en),
4140.aclk(siclk),
4141.bclk(soclk),
4142.l1clk(l1clk),
4143 .se(se),
4144 .pce_ov(pce_ov),
4145 .stop(stop),
4146 .siclk_out(siclk_out),
4147 .soclk_out(soclk_out)
4148);
4149dff #(26) d0_0 (
4150.l1clk(l1clk),
4151.siclk(siclk_out),
4152.soclk(soclk_out),
4153.d(din[25:0]),
4154.si({scan_in,so[24:0]}),
4155.so({so[24:0],scan_out}),
4156.q(dout[25:0])
4157);
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178endmodule
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4189// also for pass-gate with decoder
4190
4191
4192
4193
4194
4195// any PARAMS parms go into naming of macro
4196
4197module tlu_tsd_dp_mux_macro__mux_aodec__ports_8__stack_48c__width_13 (
4198 din0,
4199 din1,
4200 din2,
4201 din3,
4202 din4,
4203 din5,
4204 din6,
4205 din7,
4206 sel,
4207 dout);
4208wire psel0;
4209wire psel1;
4210wire psel2;
4211wire psel3;
4212wire psel4;
4213wire psel5;
4214wire psel6;
4215wire psel7;
4216
4217 input [12:0] din0;
4218 input [12:0] din1;
4219 input [12:0] din2;
4220 input [12:0] din3;
4221 input [12:0] din4;
4222 input [12:0] din5;
4223 input [12:0] din6;
4224 input [12:0] din7;
4225 input [2:0] sel;
4226 output [12:0] dout;
4227
4228
4229
4230
4231
4232cl_dp1_pdec8_8x c0_0 (
4233 .test(1'b1),
4234 .sel0(sel[0]),
4235 .sel1(sel[1]),
4236 .sel2(sel[2]),
4237 .psel0(psel0),
4238 .psel1(psel1),
4239 .psel2(psel2),
4240 .psel3(psel3),
4241 .psel4(psel4),
4242 .psel5(psel5),
4243 .psel6(psel6),
4244 .psel7(psel7)
4245);
4246
4247mux8s #(13) d0_0 (
4248 .sel0(psel0),
4249 .sel1(psel1),
4250 .sel2(psel2),
4251 .sel3(psel3),
4252 .sel4(psel4),
4253 .sel5(psel5),
4254 .sel6(psel6),
4255 .sel7(psel7),
4256 .in0(din0[12:0]),
4257 .in1(din1[12:0]),
4258 .in2(din2[12:0]),
4259 .in3(din3[12:0]),
4260 .in4(din4[12:0]),
4261 .in5(din5[12:0]),
4262 .in6(din6[12:0]),
4263 .in7(din7[12:0]),
4264.dout(dout[12:0])
4265);
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279endmodule
4280
4281
4282// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4283// also for pass-gate with decoder
4284
4285
4286
4287
4288
4289// any PARAMS parms go into naming of macro
4290
4291module tlu_tsd_dp_mux_macro__left_14__mux_aodec__ports_8__stack_48c__width_34 (
4292 din0,
4293 din1,
4294 din2,
4295 din3,
4296 din4,
4297 din5,
4298 din6,
4299 din7,
4300 sel,
4301 dout);
4302wire psel0;
4303wire psel1;
4304wire psel2;
4305wire psel3;
4306wire psel4;
4307wire psel5;
4308wire psel6;
4309wire psel7;
4310
4311 input [33:0] din0;
4312 input [33:0] din1;
4313 input [33:0] din2;
4314 input [33:0] din3;
4315 input [33:0] din4;
4316 input [33:0] din5;
4317 input [33:0] din6;
4318 input [33:0] din7;
4319 input [2:0] sel;
4320 output [33:0] dout;
4321
4322
4323
4324
4325
4326cl_dp1_pdec8_8x c0_0 (
4327 .test(1'b1),
4328 .sel0(sel[0]),
4329 .sel1(sel[1]),
4330 .sel2(sel[2]),
4331 .psel0(psel0),
4332 .psel1(psel1),
4333 .psel2(psel2),
4334 .psel3(psel3),
4335 .psel4(psel4),
4336 .psel5(psel5),
4337 .psel6(psel6),
4338 .psel7(psel7)
4339);
4340
4341mux8s #(34) d0_0 (
4342 .sel0(psel0),
4343 .sel1(psel1),
4344 .sel2(psel2),
4345 .sel3(psel3),
4346 .sel4(psel4),
4347 .sel5(psel5),
4348 .sel6(psel6),
4349 .sel7(psel7),
4350 .in0(din0[33:0]),
4351 .in1(din1[33:0]),
4352 .in2(din2[33:0]),
4353 .in3(din3[33:0]),
4354 .in4(din4[33:0]),
4355 .in5(din5[33:0]),
4356 .in6(din6[33:0]),
4357 .in7(din7[33:0]),
4358.dout(dout[33:0])
4359);
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373endmodule
4374
4375
4376// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4377// also for pass-gate with decoder
4378
4379
4380
4381
4382
4383// any PARAMS parms go into naming of macro
4384
4385module tlu_tsd_dp_mux_macro__dmux_8x__mux_aonpe__ports_6__stack_48c__width_48 (
4386 din0,
4387 sel0,
4388 din1,
4389 sel1,
4390 din2,
4391 sel2,
4392 din3,
4393 sel3,
4394 din4,
4395 sel4,
4396 din5,
4397 sel5,
4398 dout);
4399wire buffout0;
4400wire buffout1;
4401wire buffout2;
4402wire buffout3;
4403wire buffout4;
4404wire buffout5;
4405
4406 input [47:0] din0;
4407 input sel0;
4408 input [47:0] din1;
4409 input sel1;
4410 input [47:0] din2;
4411 input sel2;
4412 input [47:0] din3;
4413 input sel3;
4414 input [47:0] din4;
4415 input sel4;
4416 input [47:0] din5;
4417 input sel5;
4418 output [47:0] dout;
4419
4420
4421
4422
4423
4424cl_dp1_muxbuff6_8x c0_0 (
4425 .in0(sel0),
4426 .in1(sel1),
4427 .in2(sel2),
4428 .in3(sel3),
4429 .in4(sel4),
4430 .in5(sel5),
4431 .out0(buffout0),
4432 .out1(buffout1),
4433 .out2(buffout2),
4434 .out3(buffout3),
4435 .out4(buffout4),
4436 .out5(buffout5)
4437);
4438mux6s #(48) d0_0 (
4439 .sel0(buffout0),
4440 .sel1(buffout1),
4441 .sel2(buffout2),
4442 .sel3(buffout3),
4443 .sel4(buffout4),
4444 .sel5(buffout5),
4445 .in0(din0[47:0]),
4446 .in1(din1[47:0]),
4447 .in2(din2[47:0]),
4448 .in3(din3[47:0]),
4449 .in4(din4[47:0]),
4450 .in5(din5[47:0]),
4451.dout(dout[47:0])
4452);
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466endmodule
4467
4468
4469// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4470// also for pass-gate with decoder
4471
4472
4473
4474
4475
4476// any PARAMS parms go into naming of macro
4477
4478module tlu_tsd_dp_mux_macro__left_6__mux_aope__ports_4__stack_48c__width_12 (
4479 din0,
4480 din1,
4481 din2,
4482 din3,
4483 sel0,
4484 sel1,
4485 sel2,
4486 dout);
4487wire psel0;
4488wire psel1;
4489wire psel2;
4490wire psel3;
4491
4492 input [11:0] din0;
4493 input [11:0] din1;
4494 input [11:0] din2;
4495 input [11:0] din3;
4496 input sel0;
4497 input sel1;
4498 input sel2;
4499 output [11:0] dout;
4500
4501
4502
4503
4504
4505cl_dp1_penc4_8x c0_0 (
4506 .test(1'b1),
4507 .sel0(sel0),
4508 .sel1(sel1),
4509 .sel2(sel2),
4510 .psel0(psel0),
4511 .psel1(psel1),
4512 .psel2(psel2),
4513 .psel3(psel3)
4514);
4515
4516mux4s #(12) d0_0 (
4517 .sel0(psel0),
4518 .sel1(psel1),
4519 .sel2(psel2),
4520 .sel3(psel3),
4521 .in0(din0[11:0]),
4522 .in1(din1[11:0]),
4523 .in2(din2[11:0]),
4524 .in3(din3[11:0]),
4525.dout(dout[11:0])
4526);
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540endmodule
4541
4542
4543//
4544// and macro for ports = 2,3,4
4545//
4546//
4547
4548
4549
4550
4551
4552module tlu_tsd_dp_and_macro__left_6__ports_2__stack_48c__width_12 (
4553 din0,
4554 din1,
4555 dout);
4556 input [11:0] din0;
4557 input [11:0] din1;
4558 output [11:0] dout;
4559
4560
4561
4562
4563
4564
4565and2 #(12) d0_0 (
4566.in0(din0[11:0]),
4567.in1(din1[11:0]),
4568.out(dout[11:0])
4569);
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579endmodule
4580
4581
4582
4583
4584
4585// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4586// also for pass-gate with decoder
4587
4588
4589
4590
4591
4592// any PARAMS parms go into naming of macro
4593
4594module tlu_tsd_dp_mux_macro__mux_aonpe__ports_5__stack_48c__width_48 (
4595 din0,
4596 sel0,
4597 din1,
4598 sel1,
4599 din2,
4600 sel2,
4601 din3,
4602 sel3,
4603 din4,
4604 sel4,
4605 dout);
4606wire buffout0;
4607wire buffout1;
4608wire buffout2;
4609wire buffout3;
4610wire buffout4;
4611
4612 input [47:0] din0;
4613 input sel0;
4614 input [47:0] din1;
4615 input sel1;
4616 input [47:0] din2;
4617 input sel2;
4618 input [47:0] din3;
4619 input sel3;
4620 input [47:0] din4;
4621 input sel4;
4622 output [47:0] dout;
4623
4624
4625
4626
4627
4628cl_dp1_muxbuff5_8x c0_0 (
4629 .in0(sel0),
4630 .in1(sel1),
4631 .in2(sel2),
4632 .in3(sel3),
4633 .in4(sel4),
4634 .out0(buffout0),
4635 .out1(buffout1),
4636 .out2(buffout2),
4637 .out3(buffout3),
4638 .out4(buffout4)
4639);
4640mux5s #(48) d0_0 (
4641 .sel0(buffout0),
4642 .sel1(buffout1),
4643 .sel2(buffout2),
4644 .sel3(buffout3),
4645 .sel4(buffout4),
4646 .in0(din0[47:0]),
4647 .in1(din1[47:0]),
4648 .in2(din2[47:0]),
4649 .in3(din3[47:0]),
4650 .in4(din4[47:0]),
4651.dout(dout[47:0])
4652);
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666endmodule
4667
4668
4669//
4670// nor macro for ports = 2,3
4671//
4672//
4673
4674
4675
4676
4677
4678module tlu_tsd_dp_nor_macro__ports_3__stack_48c__width_48 (
4679 din0,
4680 din1,
4681 din2,
4682 dout);
4683 input [47:0] din0;
4684 input [47:0] din1;
4685 input [47:0] din2;
4686 output [47:0] dout;
4687
4688
4689
4690
4691
4692
4693nor3 #(48) d0_0 (
4694.in0(din0[47:0]),
4695.in1(din1[47:0]),
4696.in2(din2[47:0]),
4697.out(dout[47:0])
4698);
4699
4700
4701
4702
4703
4704
4705
4706endmodule
4707
4708
4709
4710
4711
4712//
4713// buff macro
4714//
4715//
4716
4717
4718
4719
4720
4721module tlu_tsd_dp_buff_macro__left_2__rep_1__stack_48c__width_46 (
4722 din,
4723 dout);
4724 input [45:0] din;
4725 output [45:0] dout;
4726
4727
4728
4729
4730
4731
4732buff #(46) d0_0 (
4733.in(din[45:0]),
4734.out(dout[45:0])
4735);
4736
4737
4738
4739
4740
4741
4742
4743
4744endmodule
4745
4746
4747
4748
4749
4750//
4751// invert macro
4752//
4753//
4754
4755
4756
4757
4758
4759module tlu_tsd_dp_inv_macro__stack_48c__width_2 (
4760 din,
4761 dout);
4762 input [1:0] din;
4763 output [1:0] dout;
4764
4765
4766
4767
4768
4769
4770inv #(2) d0_0 (
4771.in(din[1:0]),
4772.out(dout[1:0])
4773);
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783endmodule
4784
4785
4786
4787
4788
4789
4790
4791
4792
4793// any PARAMS parms go into naming of macro
4794
4795module tlu_tsd_dp_msff_macro__width_4 (
4796 din,
4797 clk,
4798 en,
4799 se,
4800 scan_in,
4801 siclk,
4802 soclk,
4803 pce_ov,
4804 stop,
4805 dout,
4806 scan_out);
4807wire l1clk;
4808wire siclk_out;
4809wire soclk_out;
4810wire [2:0] so;
4811
4812 input [3:0] din;
4813
4814
4815 input clk;
4816 input en;
4817 input se;
4818 input scan_in;
4819 input siclk;
4820 input soclk;
4821 input pce_ov;
4822 input stop;
4823
4824
4825
4826 output [3:0] dout;
4827
4828
4829 output scan_out;
4830
4831
4832
4833
4834cl_dp1_l1hdr_8x c0_0 (
4835.l2clk(clk),
4836.pce(en),
4837.aclk(siclk),
4838.bclk(soclk),
4839.l1clk(l1clk),
4840 .se(se),
4841 .pce_ov(pce_ov),
4842 .stop(stop),
4843 .siclk_out(siclk_out),
4844 .soclk_out(soclk_out)
4845);
4846dff #(4) d0_0 (
4847.l1clk(l1clk),
4848.siclk(siclk_out),
4849.soclk(soclk_out),
4850.d(din[3:0]),
4851.si({scan_in,so[2:0]}),
4852.so({so[2:0],scan_out}),
4853.q(dout[3:0])
4854);
4855
4856
4857
4858
4859
4860
4861
4862
4863
4864
4865
4866
4867
4868
4869
4870
4871
4872
4873
4874
4875endmodule
4876
4877
4878
4879
4880
4881
4882
4883
4884
4885//
4886// buff macro
4887//
4888//
4889
4890
4891
4892
4893
4894module tlu_tsd_dp_buff_macro__dbuff_32x__width_1 (
4895 din,
4896 dout);
4897 input [0:0] din;
4898 output [0:0] dout;
4899
4900
4901
4902
4903
4904
4905buff #(1) d0_0 (
4906.in(din[0:0]),
4907.out(dout[0:0])
4908);
4909
4910
4911
4912
4913
4914
4915
4916
4917endmodule
4918
4919
4920
4921
4922
4923// general mux macro for pass-gate and and-or muxes with/wout priority encoders
4924// also for pass-gate with decoder
4925
4926
4927
4928
4929
4930// any PARAMS parms go into naming of macro
4931
4932module tlu_tsd_dp_mux_macro__mux_pgpe__ports_5__stack_48c__width_32 (
4933 din0,
4934 din1,
4935 din2,
4936 din3,
4937 din4,
4938 sel0,
4939 sel1,
4940 sel2,
4941 sel3,
4942 muxtst,
4943 test,
4944 dout);
4945wire psel0;
4946wire psel1;
4947wire psel2;
4948wire psel3;
4949wire psel4;
4950
4951 input [31:0] din0;
4952 input [31:0] din1;
4953 input [31:0] din2;
4954 input [31:0] din3;
4955 input [31:0] din4;
4956 input sel0;
4957 input sel1;
4958 input sel2;
4959 input sel3;
4960 input muxtst;
4961 input test;
4962 output [31:0] dout;
4963
4964
4965
4966
4967
4968cl_dp1_penc5_8x c0_0 (
4969 .sel0(sel0),
4970 .sel1(sel1),
4971 .sel2(sel2),
4972 .sel3(sel3),
4973 .psel0(psel0),
4974 .psel1(psel1),
4975 .psel2(psel2),
4976 .psel3(psel3),
4977 .psel4(psel4),
4978 .test(test)
4979);
4980
4981mux5 #(32) d0_0 (
4982 .sel0(psel0),
4983 .sel1(psel1),
4984 .sel2(psel2),
4985 .sel3(psel3),
4986 .sel4(psel4),
4987 .in0(din0[31:0]),
4988 .in1(din1[31:0]),
4989 .in2(din2[31:0]),
4990 .in3(din3[31:0]),
4991 .in4(din4[31:0]),
4992.dout(dout[31:0]),
4993 .muxtst(muxtst)
4994);
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008endmodule
5009