Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / spc / rtl / spc_mb0_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: spc_mb0_ctl.v
4// Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved
5// 4150 Network Circle, Santa Clara, California 95054, U.S.A.
6//
7// * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8//
9// This program is free software; you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation; version 2 of the License.
12//
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21//
22// For the avoidance of doubt, and except that if any non-GPL license
23// choice is available it will apply instead, Sun elects to use only
24// the General Public License version 2 (GPLv2) at this time for any
25// software where a choice of GPL license versions is made
26// available with the language indicating that GPLv2 or any later version
27// may be used, or where a choice of which version of the GPL is applied is
28// otherwise unspecified.
29//
30// Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
31// CA 95054 USA or visit www.sun.com if you need additional information or
32// have any questions.
33//
34// ========== Copyright Header End ============================================
35module spc_mb0_ctl (
36 scan_out,
37 mb0_done,
38 mb0_run,
39 mb0_addr,
40 mb0_cmpsel,
41 mb0_ict_read_en,
42 mb0_ict_write_en,
43 mb0_icd_read_en,
44 mb0_icd_write_en,
45 mb0_icv_read_en,
46 mb0_icv_write_en,
47 mb0_itb_read_en,
48 mb0_itb_write_en,
49 mb0_write_data,
50 mb0_dca_read_en,
51 mb0_dca_write_en,
52 mb0_dta_read_en,
53 mb0_dta_write_en,
54 mb0_dva_read_en,
55 mb0_dva_write_en,
56 mb0_lru_read_en,
57 mb0_lru_write_en,
58 mb0_dtb_read_en,
59 mb0_dtb_write_en,
60 mb0_stb_cam_read_en,
61 mb0_stb_cam_write_en,
62 mb0_stb_ram_read_en,
63 mb0_stb_ram_write_en,
64 mb0_cpq_read_en,
65 mb0_cpq_write_en,
66 mb0_mbist_fail,
67 mbi_cambist_run,
68 mbi_cambist_shift,
69 mbi_dis_clr_ubit,
70 mbi_init_to_zero,
71 mbi_dtb_cam_en_pre,
72 mbi_dtb_demap_en,
73 mbi_itb_cam_en_pre,
74 mbi_itb_demap_en,
75 mbi_repl_write,
76 mbi_demap_type,
77 mbi_ptag_data,
78 mbi_scm_cam_en_pre,
79 l2clk,
80 scan_in,
81 tcu_pce_ov,
82 tcu_clk_stop,
83 tcu_aclk,
84 tcu_bclk,
85 tcu_scan_en,
86 lsu_misc_pmen,
87 mbist_start,
88 mbist_bisi_mode,
89 mbist_user_mode,
90 lsu_mbi_dca_fail,
91 lsu_mbi_dta_fail,
92 lsu_mbi_dva_fail,
93 lsu_mbi_lru_fail,
94 lsu_mbi_dtb_fail,
95 lsu_mbi_stb_cam_fail,
96 lsu_mbi_stb_ram_fail,
97 lsu_mbi_cpq_fail,
98 ftu_mbi_ict_fail,
99 ftu_mbi_icd_fail,
100 ftu_mbi_itb_fail,
101 ftu_mbi_icv_fail,
102 lsu_mbi_tlb_data_cmp,
103 lsu_mbi_tlb_cam_hit,
104 lsu_mbi_tlb_cam_mhit,
105 lsu_mbi_tlb_ctxt0_hit,
106 lsu_mbi_tlb_valid,
107 lsu_mbi_tlb_used,
108 lsu_mbi_scm_hit,
109 lsu_mbi_scm_mhit,
110 lsu_mbi_scm_hit_ptr,
111 lsu_mbi_scm_praw,
112 ftu_mbi_tlb_data_cmp,
113 ftu_mbi_tlb_cam_hit,
114 ftu_mbi_tlb_cam_mhit,
115 ftu_mbi_tlb_ctxt0_hit,
116 ftu_mbi_tlb_valid,
117 ftu_mbi_tlb_used,
118 mb1_mb0_fail,
119 mb2_mb0_fail,
120 mb1_mb0_done,
121 mb2_mb0_done);
122wire pce_ov;
123wire stop;
124wire siclk;
125wire soclk;
126wire se;
127wire l1clk;
128wire pmen_scanin;
129wire pmen_scanout;
130wire start_in;
131wire misc_pmen_;
132wire pmem_unused;
133wire clock_enable;
134wire l1clk_pm1;
135wire array_usr_reg_scanin;
136wire array_usr_reg_scanout;
137wire [3:0] user_array_in;
138wire [3:0] user_array;
139wire user_addr_mode_reg_scanin;
140wire user_addr_mode_reg_scanout;
141wire user_addr_mode_in;
142wire user_addr_mode;
143wire user_start_addr_reg_scanin;
144wire user_start_addr_reg_scanout;
145wire [8:0] user_start_addr_in;
146wire [8:0] user_start_addr;
147wire user_stop_addr_reg_scanin;
148wire user_stop_addr_reg_scanout;
149wire [8:0] user_stop_addr_in;
150wire [8:0] user_stop_addr;
151wire user_incr_addr_reg_scanin;
152wire user_incr_addr_reg_scanout;
153wire [8:0] user_incr_addr_in;
154wire [8:0] user_incr_addr;
155wire user_data_mode_reg_scanin;
156wire user_data_mode_reg_scanout;
157wire user_data_mode_in;
158wire user_data_mode;
159wire user_data_reg_scanin;
160wire user_data_reg_scanout;
161wire [7:0] user_data_in;
162wire [7:0] user_data;
163wire user_cmpselinc_hold_reg_scanin;
164wire user_cmpselinc_hold_reg_scanout;
165wire user_cmpselinc_hold_in;
166wire user_cmpselinc_hold;
167wire user_cmpsel_reg_scanin;
168wire user_cmpsel_reg_scanout;
169wire [2:0] user_cmpsel_in;
170wire [2:0] user_cmpsel;
171wire user_loop_mode_reg_scanin;
172wire user_loop_mode_reg_scanout;
173wire user_loop_mode_in;
174wire user_loop_mode;
175wire ten_n_mode_reg_scanin;
176wire ten_n_mode_reg_scanout;
177wire ten_n_mode_in;
178wire ten_n_mode;
179wire user_cam_mode_reg_scanin;
180wire user_cam_mode_reg_scanout;
181wire user_cam_mode_in;
182wire user_cam_mode;
183wire user_cam_select_reg_scanin;
184wire user_cam_select_reg_scanout;
185wire [1:0] user_cam_sel_in;
186wire [1:0] user_cam_sel;
187wire user_cam_test_select_reg_scanin;
188wire user_cam_test_select_reg_scanout;
189wire [3:0] user_cam_test_sel_in;
190wire [3:0] user_cam_test_sel;
191wire user_bisi_wr_mode_reg_scanin;
192wire user_bisi_wr_mode_reg_scanout;
193wire user_bisi_wr_mode_in;
194wire user_bisi_wr_mode;
195wire user_bisi_rd_mode_reg_scanin;
196wire user_bisi_rd_mode_reg_scanout;
197wire user_bisi_rd_mode_in;
198wire user_bisi_rd_mode;
199wire mb_user_data_mode;
200wire user_mode;
201wire mb_user_addr_mode;
202wire mb_user_cmpselinc_hold;
203wire mb_ten_n_mode;
204wire mb_user_loop_mode;
205wire mb_user_cam_mode;
206wire mb_user_ram_mode;
207wire mb_user_bisi_wr_mode;
208wire bisi_mode;
209wire mb_user_bisi_rd_mode;
210wire mb_user_bisi_rw_mode;
211wire mb_default_bisi;
212wire input_signals_reg_scanin;
213wire input_signals_reg_scanout;
214wire mb_enable_reg_scanin;
215wire mb_enable_reg_scanout;
216wire mb_enable;
217wire mb_enable_out;
218wire start;
219wire config_reg_scanin;
220wire config_reg_scanout;
221wire [1:0] config_in;
222wire [1:0] config_out;
223wire start_transition;
224wire end_transition;
225wire reset_engine;
226wire loop_again;
227wire run;
228wire loop_again_reg_scanin;
229wire loop_again_reg_scanout;
230wire stop_engine_l;
231wire stop_engine_l_q;
232wire cam_array_0;
233wire [1:0] cam_sel;
234wire cambist_d4;
235wire run3;
236wire cam_array_1;
237wire cam_array_2;
238wire cam_clear;
239wire last_cam;
240wire cambist;
241wire cntl_msb;
242wire cambist_delay_reg_scanin;
243wire cambist_delay_reg_scanout;
244wire cambist_d1;
245wire cambist_d2;
246wire cambist_d3;
247wire cam_cntl_reg_scanin;
248wire cam_cntl_reg_scanout;
249wire [26:0] cam_in;
250wire [26:0] cam_out;
251wire cam_shift_reg_scanin;
252wire cam_shift_reg_scanout;
253wire cam_shift_val;
254wire cam_shift;
255wire cam_msb;
256wire [1:0] cam_array_sel;
257wire [3:0] cam_ctest;
258wire sel_ctest_pass;
259wire [2:0] cam_cseq;
260wire sel_cseq_pass;
261wire [14:0] cam_raw_addr;
262wire ctest13;
263wire cseq1;
264wire ctest06;
265wire cseq0;
266wire ctest08;
267wire ctest10;
268wire [6:0] tlb_mhit_addr1;
269wire [6:0] tlb_mhit_addr2;
270wire tlb_same_addr;
271wire mhit_begin;
272wire [2:0] stb_mhit_addr1;
273wire [2:0] stb_mhit_addr2;
274wire stb_same_addr;
275wire stb_cam_mhit_test;
276wire [6:0] cam_addr;
277wire crw0;
278wire [1:0] cam_crw;
279wire sel_crw_pass;
280wire [2:0] cseq;
281wire cseq2;
282wire cseq3;
283wire cseq4;
284wire [1:0] crw;
285wire crw1;
286wire crw2;
287wire crw3;
288wire [6:0] tlb_addr;
289wire [6:0] tlb_stb_addr;
290wire stb_cam_pwk1_test;
291wire cam_wr_en;
292wire tlb_cam_gen_test;
293wire tlb_cam_dmap_test;
294wire tlb_cam_dmap2_test;
295wire tlb_cam_walk1_test;
296wire tlb_cam_rpwr_test;
297wire tlb_cam_mhit_test;
298wire stb_cam_gen_test;
299wire ctest09;
300wire stb_cam_bwk1_test;
301wire stb_cam_bwk2_test;
302wire cam_en_pre;
303wire cam_zero;
304wire end_shift;
305wire dmap_en;
306wire cam_rd_en;
307wire tlb_rpwr_en;
308wire tlb_dis_clr_bit;
309wire mbist_dis_clr_ubit;
310wire array_04;
311wire array_08;
312wire cam_en_reg_scanin;
313wire cam_en_reg_scanout;
314wire cam_en;
315wire dmap_all;
316wire dmap_real;
317wire ctest07;
318wire dmap_cntx;
319wire dmap_page;
320wire dmap_on;
321wire [1:0] mbist_demap_type;
322wire mbist_dtb_demap_en;
323wire mbist_itb_demap_en;
324wire mbist_stb_cam_en_pre;
325wire mbist_dtb_cam_en_pre;
326wire mbist_itb_cam_en_pre;
327wire ctest00;
328wire [3:0] ctest;
329wire ctest01;
330wire ctest02;
331wire ctest03;
332wire ctest04;
333wire ctest05;
334wire ctest11;
335wire ctest12;
336wire tlb;
337wire stb;
338wire cam_walk1;
339wire mbist_ptag_data;
340wire ptag_data;
341wire [7:0] stb_data;
342wire [7:0] walk1data;
343wire [7:0] cam_data;
344wire [7:0] tlb_data;
345wire stb_cam_en;
346wire stb_hit_cmp;
347wire stb_hit_cmp_mhit_l;
348wire exp_stb_cam_hit;
349wire [2:0] exp_stb_hit_ptr;
350wire exp_stb_mhit;
351wire exp_stb_ld_partial_raw;
352wire stb_hit_cmp_delay_scanin;
353wire stb_hit_cmp_delay_scanout;
354wire stb_hit_cmp_d1;
355wire stb_hit_cmp_d2;
356wire stb_hit_cmp_d3;
357wire stb_hit_cmp_mhit_l_delay_scanin;
358wire stb_hit_cmp_mhit_l_delay_scanout;
359wire stb_hit_cmp_mhit_l_d1;
360wire stb_hit_cmp_mhit_l_d2;
361wire stb_hit_cmp_mhit_l_d3;
362wire exp_stb_cam_hit_delay_scanin;
363wire exp_stb_cam_hit_delay_scanout;
364wire exp_stb_cam_hit_d1;
365wire exp_stb_cam_hit_d2;
366wire exp_stb_cam_hit_d3;
367wire exp_stb_hit_ptr_delay_scanin;
368wire exp_stb_hit_ptr_delay_scanout;
369wire [2:0] exp_stb_hit_ptr_d1;
370wire [2:0] exp_stb_hit_ptr_d2;
371wire [2:0] exp_stb_hit_ptr_d3;
372wire exp_stb_mhit_delay_scanin;
373wire exp_stb_mhit_delay_scanout;
374wire exp_stb_mhit_d1;
375wire exp_stb_mhit_d2;
376wire exp_stb_mhit_d3;
377wire exp_stb_ld_partial_raw_delay_scanin;
378wire exp_stb_ld_partial_raw_delay_scanout;
379wire exp_stb_ld_partial_raw_d1;
380wire exp_stb_ld_partial_raw_d2;
381wire exp_stb_ld_partial_raw_d3;
382wire stb_cam_hit_pass;
383wire stb_hit_ptr_pass;
384wire stb_mhit_pass;
385wire stb_ld_partial_raw_pass;
386wire cbist_stb_cam_fail;
387wire cam_array_2_d3;
388wire tlb_cam_en;
389wire tlb_hit_cmp;
390wire cam_valid_cmp;
391wire cam_used_cmp;
392wire tlb_cntx0_cmp;
393wire exp_tlb_mhit;
394wire tlb_data_cmp;
395wire exp_cam_hit;
396wire exp_valid;
397wire exp_used;
398wire exp_data_cmp;
399wire exp_cntx0_hit;
400wire cam_array_0_delay_scanin;
401wire cam_array_0_delay_scanout;
402wire cam_array_0_d1;
403wire cam_array_0_d2;
404wire cam_array_0_d3;
405wire cam_array_0_d4;
406wire cam_array_1_delay_scanin;
407wire cam_array_1_delay_scanout;
408wire cam_array_1_d1;
409wire cam_array_1_d2;
410wire cam_array_1_d3;
411wire cam_array_1_d4;
412wire cam_array_1_d5;
413wire cam_array_2_delay_scanin;
414wire cam_array_2_delay_scanout;
415wire cam_array_2_d1;
416wire cam_array_2_d2;
417wire cam_hit_cmp_delay_scanin;
418wire cam_hit_cmp_delay_scanout;
419wire tlb_hit_cmp_d1;
420wire tlb_hit_cmp_d2;
421wire tlb_hit_cmp_d3;
422wire tlb_hit_cmp_d4;
423wire tlb_hit_cmp_d5;
424wire tlb_hit_cmp_d6;
425wire data_cmp_delay_scanin;
426wire data_cmp_delay_scanout;
427wire tlb_data_cmp_d1;
428wire tlb_data_cmp_d2;
429wire tlb_data_cmp_d3;
430wire tlb_data_cmp_d4;
431wire tlb_data_cmp_d5;
432wire cam_valid_cmp_delay_scanin;
433wire cam_valid_cmp_delay_scanout;
434wire cam_valid_cmp_d1;
435wire cam_valid_cmp_d2;
436wire cam_valid_cmp_d3;
437wire cam_valid_cmp_d4;
438wire cam_valid_cmp_d5;
439wire cam_used_cmp_delay_scanin;
440wire cam_used_cmp_delay_scanout;
441wire cam_used_cmp_d1;
442wire cam_used_cmp_d2;
443wire cam_used_cmp_d3;
444wire cam_used_cmp_d4;
445wire cam_used_cmp_d5;
446wire exp_data_cmp_delay_scanin;
447wire exp_data_cmp_delay_scanout;
448wire exp_data_cmp_d1;
449wire exp_data_cmp_d2;
450wire exp_data_cmp_d3;
451wire exp_data_cmp_d4;
452wire exp_data_cmp_d5;
453wire exp_valid_delay_scanin;
454wire exp_valid_delay_scanout;
455wire exp_valid_d1;
456wire exp_valid_d2;
457wire exp_valid_d3;
458wire exp_valid_d4;
459wire exp_valid_d5;
460wire exp_used_delay_scanin;
461wire exp_used_delay_scanout;
462wire exp_used_d1;
463wire exp_used_d2;
464wire exp_used_d3;
465wire exp_used_d4;
466wire exp_used_d5;
467wire tlb_cntx0_cmp_delay_scanin;
468wire tlb_cntx0_cmp_delay_scanout;
469wire tlb_cntx0_cmp_d1;
470wire tlb_cntx0_cmp_d2;
471wire tlb_cntx0_cmp_d3;
472wire tlb_cntx0_cmp_d4;
473wire tlb_cntx0_cmp_d5;
474wire tlb_cntx0_cmp_d6;
475wire exp_cam_hit_delay_scanin;
476wire exp_cam_hit_delay_scanout;
477wire exp_cam_hit_d1;
478wire exp_cam_hit_d2;
479wire exp_cam_hit_d3;
480wire exp_cam_hit_d4;
481wire exp_cam_hit_d5;
482wire exp_cam_hit_d6;
483wire exp_cntx0_hit_delay_scanin;
484wire exp_cntx0_hit_delay_scanout;
485wire exp_cntx0_hit_d1;
486wire exp_cntx0_hit_d2;
487wire exp_cntx0_hit_d3;
488wire exp_cntx0_hit_d4;
489wire exp_cntx0_hit_d5;
490wire exp_cntx0_hit_d6;
491wire exp_mhit_delay_scanin;
492wire exp_mhit_delay_scanout;
493wire exp_tlb_mhit_d1;
494wire exp_tlb_mhit_d2;
495wire exp_tlb_mhit_d3;
496wire exp_tlb_mhit_d4;
497wire exp_tlb_mhit_d5;
498wire exp_tlb_mhit_d6;
499wire dtlb_cam_hit_pass;
500wire dtlb_cntx0_hit_pass;
501wire dtlb_mhit_pass;
502wire dtlb_valid_pass;
503wire dtlb_used_pass;
504wire dtlb_data_cmp_pass;
505wire cbist_dtlb_cam_fail;
506wire itlb_cam_hit_pass;
507wire itlb_cntx0_hit_pass;
508wire itlb_mhit_pass;
509wire itlb_valid_pass;
510wire itlb_used_pass;
511wire itlb_data_cmp_pass;
512wire cbist_itlb_cam_fail;
513wire [26:0] qual_cam;
514wire tlb_cam_intf_out_scanin;
515wire tlb_cam_intf_out_scanout;
516wire mbist_cambist_run;
517wire mbist_cambist_shift;
518wire mbist_init_to_zero;
519wire mbist_repl_write;
520wire cntl_reg_scanin;
521wire cntl_reg_scanout;
522wire [34:0] cntl_in;
523wire [34:0] cntl_out;
524wire [15:0] cntl_algr;
525wire [15:0] next_algr;
526wire sel_nextaddr_reset;
527wire sel_nextaddr_restart;
528wire overflow;
529wire sel_nextaddr_incred;
530wire cout_rw;
531wire sel_nextaddr_same;
532wire [8:0] start_addr;
533wire [8:0] restart_addr;
534wire [8:0] incred_addr;
535wire [8:0] cntl_addr;
536wire [2:0] cntl_rw;
537wire [2:0] next_rw;
538wire cntl_bisi;
539wire [3:0] cntl_array_sel;
540wire last_array;
541wire [2:0] cntl_cmp_sel;
542wire sel_cmp_pass;
543wire [1:0] cntl_data_sel;
544wire cntl_addr_mix;
545wire addr_mix;
546wire [3:0] cntl_march_element;
547wire sel_march_1_pass;
548wire cout_addr;
549wire upaddr;
550wire march_0;
551wire march_1;
552wire march_2;
553wire march_6;
554wire march_7;
555wire [3:0] march_element_pre;
556wire march_pre_0;
557wire march_pre_1;
558wire march_pre_2;
559wire march_pre_6;
560wire march_pre_7;
561wire upaddr_pre;
562wire [8:0] incr_addr;
563wire [8:0] stop_addr;
564wire sel_rw_pass;
565wire one_cycle_march;
566wire march_5;
567wire five_cycle_march;
568wire march_8;
569wire two_cycle_march;
570wire mem_wr_pbi;
571wire march_3;
572wire march_4;
573wire rw_1;
574wire rw_0;
575wire rw_4;
576wire mem_wr;
577wire bisi_wr_mode;
578wire bisi_rd_mode;
579wire mem_rd_pbi;
580wire mem_rd;
581wire [8:0] adj_addr;
582wire rw_3;
583wire [8:0] mem_addr1;
584wire true_data_l;
585wire rw_2;
586wire true_data;
587wire [7:0] data_pat_sel;
588wire [7:0] mem_data;
589wire array_01;
590wire array_02;
591wire array_03;
592wire array_05;
593wire array_06;
594wire array_07;
595wire array_09;
596wire array_10;
597wire array_11;
598wire array_12;
599wire [8:0] mem_addr_mix0;
600wire [8:0] mem_addr_mix1;
601wire [8:0] mem_addr;
602wire [3:0] array_sel;
603wire cmp_0;
604wire [2:0] cmp_sel;
605wire cmp_1;
606wire cmp_2;
607wire cmp_3;
608wire cmp_7;
609wire [3:0] march_element;
610wire [2:0] rw;
611wire [1:0] cam_sel_cntl_out;
612wire [3:0] ctest_cntl_out;
613wire ctest_reg_scanin;
614wire ctest_reg_scanout;
615wire [3:0] ctest_out;
616wire [2:0] cseq_cntl_out;
617wire cseq_reg_scanin;
618wire cseq_reg_scanout;
619wire [2:0] cseq_out;
620wire [3:0] array_sel_cntl_out;
621wire array_sel_reg_scanin;
622wire array_sel_reg_scanout;
623wire [3:0] array_sel_out;
624wire [2:0] cmp_sel_cntl_out;
625wire cmp_sel_reg_scanin;
626wire cmp_sel_reg_scanout;
627wire [2:0] cmp_sel_out;
628wire [3:0] march_element_cntl_out;
629wire marche_element_reg_scanin;
630wire marche_element_reg_scanout;
631wire [3:0] march_element_out;
632wire sel_rw_1_pass;
633wire sel_rw_2_pass;
634wire sel_rw_5_pass;
635wire [2:0] mb_cmp_sel;
636wire [8:0] mb_addr;
637wire [7:0] mb_write_data;
638wire mb_array_01_rd;
639wire mb_array_02_rd;
640wire mb_array_03_rd;
641wire mb_array_04_rd;
642wire mb_array_05_rd;
643wire mb_array_06_rd;
644wire mb_array_07_rd;
645wire mb_array_08_rd;
646wire mb_array_09_rd;
647wire mb_array_10_rd;
648wire mb_array_11_rd;
649wire mb_array_12_rd;
650wire mb_array_01_wr;
651wire mb_array_02_wr;
652wire mb_array_03_wr;
653wire mb_array_04_wr;
654wire mb_array_05_wr;
655wire mb_array_06_wr;
656wire mb_array_07_wr;
657wire mb_array_08_wr;
658wire mb_array_09_wr;
659wire mb_array_10_wr;
660wire mb_array_11_wr;
661wire mb_array_12_wr;
662wire mb_run;
663wire msb_latch_scanin;
664wire msb_latch_scanout;
665wire msb_in;
666wire msb_out;
667wire mb_done;
668wire [4:0] done_delay;
669wire run3_transition_reg_scanin;
670wire run3_transition_reg_scanout;
671wire run3_out;
672wire run3_transition;
673wire done_delay_reg_scanin;
674wire done_delay_reg_scanout;
675wire [4:0] done_delay_in;
676wire dca_fail;
677wire lsu_mbi_dca_fail_sticky;
678wire dta_fail;
679wire lsu_mbi_dta_fail_sticky;
680wire dva_fail;
681wire lsu_mbi_dva_fail_sticky;
682wire lru_fail;
683wire lsu_mbi_lru_fail_sticky;
684wire dtb_fail;
685wire lsu_mbi_dtb_fail_sticky;
686wire stb_cam_fail;
687wire lsu_mbi_stb_cam_fail_sticky;
688wire stb_ram_fail;
689wire lsu_mbi_stb_ram_fail_sticky;
690wire cpq_fail;
691wire lsu_mbi_cpq_fail_sticky;
692wire ict_fail;
693wire ftu_mbi_ict_fail_sticky;
694wire icd_fail;
695wire ftu_mbi_icd_fail_sticky;
696wire itb_fail;
697wire ftu_mbi_itb_fail_sticky;
698wire icv_fail;
699wire ftu_mbi_icv_fail_sticky;
700wire cbist_itlb_fail;
701wire cbist_itlb_cam_fail_sticky;
702wire cbist_dtlb_fail;
703wire cbist_dtlb_cam_fail_sticky;
704wire cbist_stb_fail;
705wire cbist_stb_cam_fail_sticky;
706wire fail_reg_scanin;
707wire fail_reg_scanout;
708wire mbist_fail_array;
709wire mbist_fail_sticky;
710wire valid_fail;
711wire mb_fail;
712wire out_mb_tcu_done_reg_scanin;
713wire out_mb_tcu_done_reg_scanout;
714wire mb_done_out;
715wire out_mb_tcu_fail_reg_scanin;
716wire out_mb_tcu_fail_reg_scanout;
717wire mb_fail_out;
718wire out_cmp_sel_reg_scanin;
719wire out_cmp_sel_reg_scanout;
720wire [2:0] mb_cmpsel_out;
721wire out_run_mb_arrays_reg_scanin;
722wire out_run_mb_arrays_reg_scanout;
723wire mb_run_out;
724wire out_data_mb_arrays_reg_scanin;
725wire out_data_mb_arrays_reg_scanout;
726wire [7:0] mb_write_data_out;
727wire out_addr_mb_arrays_reg_scanin;
728wire out_addr_mb_arrays_reg_scanout;
729wire [8:0] mb_addr_out;
730wire out_wr_mb_arrays_reg_scanin;
731wire out_wr_mb_arrays_reg_scanout;
732wire mb_array_01_wr_out;
733wire mb_array_02_wr_out;
734wire mb_array_03_wr_out;
735wire mb_array_04_wr_out;
736wire mb_array_05_wr_out;
737wire mb_array_06_wr_out;
738wire mb_array_07_wr_out;
739wire mb_array_08_wr_out;
740wire mb_array_09_wr_out;
741wire mb_array_10_wr_out;
742wire mb_array_11_wr_out;
743wire mb_array_12_wr_out;
744wire out_rd_mb_arrays_reg_scanin;
745wire out_rd_mb_arrays_reg_scanout;
746wire mb_array_01_rd_out;
747wire mb_array_02_rd_out;
748wire mb_array_03_rd_out;
749wire mb_array_04_rd_out;
750wire mb_array_05_rd_out;
751wire mb_array_06_rd_out;
752wire mb_array_07_rd_out;
753wire mb_array_08_rd_out;
754wire mb_array_09_rd_out;
755wire mb_array_10_rd_out;
756wire mb_array_11_rd_out;
757wire mb_array_12_rd_out;
758wire merged_fail_scanin;
759wire merged_fail_scanout;
760wire mb_fail_merged;
761wire mb1_fail;
762wire mb2_fail;
763wire merged_done_scanin;
764wire merged_done_scanout;
765wire mb_done_merged;
766wire mb1_done;
767wire mb2_done;
768wire mb0_fail;
769wire spares_scanin;
770wire spares_scanout;
771
772
773
774
775
776// /////////////////////////////////////////////////////////////////////////////
777// Outputs
778// /////////////////////////////////////////////////////////////////////////////
779
780 output scan_out;
781
782 output mb0_done;
783
784
785 output mb0_run;
786 output [15:0] mb0_addr;
787 output [2:0] mb0_cmpsel;
788 output mb0_ict_read_en;
789 output mb0_ict_write_en;
790 output mb0_icd_read_en;
791 output mb0_icd_write_en;
792 output mb0_icv_read_en;
793 output mb0_icv_write_en;
794 output mb0_itb_read_en;
795 output mb0_itb_write_en;
796 output [7:0] mb0_write_data;
797
798 output mb0_dca_read_en;
799 output mb0_dca_write_en;
800 output mb0_dta_read_en;
801 output mb0_dta_write_en;
802 output mb0_dva_read_en;
803 output mb0_dva_write_en;
804 output mb0_lru_read_en;
805 output mb0_lru_write_en;
806 output mb0_dtb_read_en;
807 output mb0_dtb_write_en;
808 output mb0_stb_cam_read_en;
809 output mb0_stb_cam_write_en;
810 output mb0_stb_ram_read_en;
811 output mb0_stb_ram_write_en;
812 output mb0_cpq_read_en;
813 output mb0_cpq_write_en;
814
815 output mb0_mbist_fail;
816
817
818 output mbi_cambist_run;
819 output mbi_cambist_shift;
820 output mbi_dis_clr_ubit;
821 output mbi_init_to_zero;
822 output mbi_dtb_cam_en_pre;
823 output mbi_dtb_demap_en;
824 output mbi_itb_cam_en_pre;
825 output mbi_itb_demap_en;
826 output mbi_repl_write;
827
828 output [1:0] mbi_demap_type;
829
830// stb:
831 output mbi_ptag_data;
832 output mbi_scm_cam_en_pre;
833
834// /////////////////////////////////////////////////////////////////////////////
835// Inputs
836// /////////////////////////////////////////////////////////////////////////////
837
838 input l2clk;
839 input scan_in;
840 input tcu_pce_ov; // scan signals
841 input tcu_clk_stop;
842 input tcu_aclk;
843 input tcu_bclk;
844 input tcu_scan_en;
845 input lsu_misc_pmen; // Power management enable
846
847 input mbist_start;
848 input mbist_bisi_mode;
849 input mbist_user_mode;
850
851
852
853 input lsu_mbi_dca_fail;
854 input lsu_mbi_dta_fail;
855 input lsu_mbi_dva_fail;
856 input lsu_mbi_lru_fail;
857 input lsu_mbi_dtb_fail;
858 input lsu_mbi_stb_cam_fail;
859 input lsu_mbi_stb_ram_fail;
860 input lsu_mbi_cpq_fail;
861 input ftu_mbi_ict_fail;
862 input ftu_mbi_icd_fail;
863 input ftu_mbi_itb_fail;
864 input ftu_mbi_icv_fail;
865
866
867 input lsu_mbi_tlb_data_cmp;
868 input lsu_mbi_tlb_cam_hit;
869 input lsu_mbi_tlb_cam_mhit;
870 input lsu_mbi_tlb_ctxt0_hit;
871 input lsu_mbi_tlb_valid;
872 input lsu_mbi_tlb_used;
873
874 input lsu_mbi_scm_hit;
875 input lsu_mbi_scm_mhit;
876 input [2:0] lsu_mbi_scm_hit_ptr;
877 input lsu_mbi_scm_praw;
878
879
880 input ftu_mbi_tlb_data_cmp;
881 input ftu_mbi_tlb_cam_hit;
882 input ftu_mbi_tlb_cam_mhit;
883 input ftu_mbi_tlb_ctxt0_hit;
884 input ftu_mbi_tlb_valid;
885 input ftu_mbi_tlb_used;
886
887
888 input mb1_mb0_fail;
889 input mb2_mb0_fail;
890
891
892 input mb1_mb0_done;
893 input mb2_mb0_done;
894
895
896// /////////////////////////////////////////////////////////////////////////////
897// Scan Renames
898// /////////////////////////////////////////////////////////////////////////////
899
900assign pce_ov = tcu_pce_ov;
901assign stop = tcu_clk_stop;
902assign siclk = tcu_aclk;
903assign soclk = tcu_bclk;
904assign se = tcu_scan_en;
905
906
907
908////////////////////////////////////////////////////////////////////////////////
909// Clock header
910////////////////////////////////////////////////////////////////////////////////
911
912spc_mb0_ctll1clkhdr_ctl_macro clkgen (
913 .l2clk (l2clk ),
914 .l1en (1'b1 ),
915 .l1clk (l1clk ),
916 .pce_ov(pce_ov),
917 .stop(stop),
918 .se(se));
919
920spc_mb0_ctlmsff_ctl_macro__width_3 pmen (
921 .scan_in(pmen_scanin),
922 .scan_out(pmen_scanout),
923 .l1clk ( l1clk ), // Must be connected to a free running clock
924 .din ({mbist_start, ~lsu_misc_pmen , 1'b0} ),
925 .dout ({start_in , misc_pmen_ , pmem_unused} ),
926 .siclk(siclk),
927 .soclk(soclk));
928
929
930assign clock_enable = start_in | mb0_done | mb0_run | mb0_mbist_fail | misc_pmen_;
931
932spc_mb0_ctll1clkhdr_ctl_macro clkgen_pm1 (
933 .l2clk (l2clk ),
934 .l1en (clock_enable ),
935 .l1clk (l1clk_pm1 ),
936 .pce_ov(pce_ov),
937 .stop(stop),
938 .se(se));
939
940
941// /////////////////////////////////////////////////////////////////////////////
942//
943// user mode resgisters
944// MBIST PGM Control Register
945//
946// /////////////////////////////////////////////////////////////////////////////
947// /////////////////////////////////////////////////////////////////////////////
948
949
950////////////////////////////////////////////////////////////////////////////////
951// user control registers
952// size
953// - user_array 4
954// - user_addr_mode 1
955// - user_start_addr 15
956// - user_stop_addr 15
957// - user_inc_addr 15
958// - user_data_mode 1
959// - user_data 8
960// - user_cmpselinc_mode 1
961// - user_cmpselinc 3
962// - user_loop_mode 1
963// - user_cam_select 2
964// - user_cam_test_sel 4
965////////////////////////////////////////////////////////////////////////////////
966
967
968 spc_mb0_ctlmsff_ctl_macro__width_4 array_usr_reg (
969 .scan_in(array_usr_reg_scanin),
970 .scan_out(array_usr_reg_scanout),
971 .l1clk ( l1clk_pm1 ),
972 .din ( user_array_in[3:0] ),
973 .dout ( user_array[3:0] ),
974 .siclk(siclk),
975 .soclk(soclk));
976
977 assign user_array_in[3:0]=user_array[3:0];
978
979
980 // user address mode
981
982 spc_mb0_ctlmsff_ctl_macro__width_1 user_addr_mode_reg (
983 .scan_in(user_addr_mode_reg_scanin),
984 .scan_out(user_addr_mode_reg_scanout),
985 .l1clk ( l1clk_pm1 ),
986 .din ( user_addr_mode_in ),
987 .dout ( user_addr_mode ),
988 .siclk(siclk),
989 .soclk(soclk));
990
991 assign user_addr_mode_in=user_addr_mode;
992
993
994 // user start address
995
996 spc_mb0_ctlmsff_ctl_macro__width_9 user_start_addr_reg (
997 .scan_in(user_start_addr_reg_scanin),
998 .scan_out(user_start_addr_reg_scanout),
999 .l1clk ( l1clk_pm1 ),
1000 .din ( user_start_addr_in[8:0] ),
1001 .dout ( user_start_addr[8:0] ),
1002 .siclk(siclk),
1003 .soclk(soclk));
1004
1005
1006 assign user_start_addr_in[8:0]=user_start_addr[8:0];
1007
1008 // user stop address
1009
1010 spc_mb0_ctlmsff_ctl_macro__width_9 user_stop_addr_reg (
1011 .scan_in(user_stop_addr_reg_scanin),
1012 .scan_out(user_stop_addr_reg_scanout),
1013 .l1clk ( l1clk_pm1 ),
1014 .din ( user_stop_addr_in[8:0] ),
1015 .dout ( user_stop_addr[8:0] ),
1016 .siclk(siclk),
1017 .soclk(soclk));
1018
1019
1020 assign user_stop_addr_in[8:0]=user_stop_addr[8:0];
1021
1022
1023 // user increment address
1024
1025 spc_mb0_ctlmsff_ctl_macro__width_9 user_incr_addr_reg (
1026 .scan_in(user_incr_addr_reg_scanin),
1027 .scan_out(user_incr_addr_reg_scanout),
1028 .l1clk ( l1clk_pm1 ),
1029 .din ( user_incr_addr_in[8:0] ),
1030 .dout ( user_incr_addr[8:0] ),
1031 .siclk(siclk),
1032 .soclk(soclk));
1033
1034
1035 assign user_incr_addr_in[8:0]=user_incr_addr[8:0];
1036
1037 // user data mode
1038
1039 spc_mb0_ctlmsff_ctl_macro__width_1 user_data_mode_reg (
1040 .scan_in(user_data_mode_reg_scanin),
1041 .scan_out(user_data_mode_reg_scanout),
1042 .l1clk ( l1clk_pm1 ),
1043 .din ( user_data_mode_in ),
1044 .dout ( user_data_mode ),
1045 .siclk(siclk),
1046 .soclk(soclk));
1047
1048
1049 assign user_data_mode_in=user_data_mode;
1050
1051 // user data select
1052
1053 spc_mb0_ctlmsff_ctl_macro__width_8 user_data_reg (
1054 .scan_in(user_data_reg_scanin),
1055 .scan_out(user_data_reg_scanout),
1056 .l1clk ( l1clk_pm1 ),
1057 .din ( user_data_in[7:0] ),
1058 .dout ( user_data[7:0] ),
1059 .siclk(siclk),
1060 .soclk(soclk));
1061
1062
1063 assign user_data_in[7:0] = user_data[7:0];
1064
1065 // user cmp sel inc
1066 // if its one, user need to program the cmpselinc register
1067 // otherwise it will loop all cmpsel
1068
1069 spc_mb0_ctlmsff_ctl_macro__width_1 user_cmpselinc_hold_reg (
1070 .scan_in(user_cmpselinc_hold_reg_scanin),
1071 .scan_out(user_cmpselinc_hold_reg_scanout),
1072 .l1clk ( l1clk_pm1 ),
1073 .din ( user_cmpselinc_hold_in ),
1074 .dout ( user_cmpselinc_hold ),
1075 .siclk(siclk),
1076 .soclk(soclk));
1077
1078
1079 assign user_cmpselinc_hold_in=user_cmpselinc_hold;
1080
1081
1082
1083 // user cmp sel reg
1084
1085 spc_mb0_ctlmsff_ctl_macro__width_3 user_cmpsel_reg (
1086 .scan_in(user_cmpsel_reg_scanin),
1087 .scan_out(user_cmpsel_reg_scanout),
1088 .l1clk ( l1clk_pm1 ),
1089 .din ( user_cmpsel_in[2:0] ),
1090 .dout ( user_cmpsel[2:0] ),
1091 .siclk(siclk),
1092 .soclk(soclk));
1093
1094 assign user_cmpsel_in[2:0]=user_cmpsel[2:0];
1095
1096
1097 // user loop mode
1098
1099 spc_mb0_ctlmsff_ctl_macro__width_1 user_loop_mode_reg (
1100 .scan_in(user_loop_mode_reg_scanin),
1101 .scan_out(user_loop_mode_reg_scanout),
1102 .l1clk ( l1clk_pm1 ),
1103 .din ( user_loop_mode_in ),
1104 .dout ( user_loop_mode ),
1105 .siclk(siclk),
1106 .soclk(soclk));
1107
1108
1109 assign user_loop_mode_in=user_loop_mode;
1110
1111
1112 // 10N Algorithm for bit mapping
1113
1114 spc_mb0_ctlmsff_ctl_macro__width_1 ten_n_mode_reg (
1115 .scan_in(ten_n_mode_reg_scanin),
1116 .scan_out(ten_n_mode_reg_scanout),
1117 .l1clk ( l1clk_pm1 ),
1118 .din ( ten_n_mode_in ),
1119 .dout ( ten_n_mode ),
1120 .siclk(siclk),
1121 .soclk(soclk));
1122
1123
1124 assign ten_n_mode_in=ten_n_mode;
1125
1126
1127
1128
1129
1130 // cambist: user array select
1131
1132 spc_mb0_ctlmsff_ctl_macro__width_1 user_cam_mode_reg (
1133 .scan_in(user_cam_mode_reg_scanin),
1134 .scan_out(user_cam_mode_reg_scanout),
1135 .l1clk ( l1clk_pm1 ),
1136 .din ( user_cam_mode_in ),
1137 .dout ( user_cam_mode ),
1138 .siclk(siclk),
1139 .soclk(soclk));
1140
1141
1142 assign user_cam_mode_in=user_cam_mode;
1143
1144
1145 spc_mb0_ctlmsff_ctl_macro__width_2 user_cam_select_reg (
1146 .scan_in(user_cam_select_reg_scanin),
1147 .scan_out(user_cam_select_reg_scanout),
1148 .l1clk ( l1clk_pm1 ),
1149 .din ( user_cam_sel_in[1:0] ),
1150 .dout ( user_cam_sel[1:0] ),
1151 .siclk(siclk),
1152 .soclk(soclk));
1153
1154 assign user_cam_sel_in[1:0]=user_cam_sel[1:0];
1155
1156
1157 spc_mb0_ctlmsff_ctl_macro__width_4 user_cam_test_select_reg (
1158 .scan_in(user_cam_test_select_reg_scanin),
1159 .scan_out(user_cam_test_select_reg_scanout),
1160 .l1clk ( l1clk_pm1 ),
1161 .din ( user_cam_test_sel_in[3:0] ),
1162 .dout ( user_cam_test_sel[3:0] ),
1163 .siclk(siclk),
1164 .soclk(soclk));
1165
1166 assign user_cam_test_sel_in[3:0]=user_cam_test_sel[3:0];
1167
1168
1169 spc_mb0_ctlmsff_ctl_macro__width_1 user_bisi_wr_mode_reg (
1170 .scan_in(user_bisi_wr_mode_reg_scanin),
1171 .scan_out(user_bisi_wr_mode_reg_scanout),
1172 .l1clk ( l1clk_pm1 ),
1173 .din ( user_bisi_wr_mode_in ),
1174 .dout ( user_bisi_wr_mode ),
1175 .siclk(siclk),
1176 .soclk(soclk));
1177
1178 assign user_bisi_wr_mode_in=user_bisi_wr_mode;
1179
1180 spc_mb0_ctlmsff_ctl_macro__width_1 user_bisi_rd_mode_reg (
1181 .scan_in(user_bisi_rd_mode_reg_scanin),
1182 .scan_out(user_bisi_rd_mode_reg_scanout),
1183 .l1clk ( l1clk_pm1 ),
1184 .din ( user_bisi_rd_mode_in ),
1185 .dout ( user_bisi_rd_mode ),
1186 .siclk(siclk),
1187 .soclk(soclk));
1188
1189 assign user_bisi_rd_mode_in=user_bisi_rd_mode;
1190
1191
1192 assign mb_user_data_mode = user_mode & user_data_mode;
1193 assign mb_user_addr_mode = user_mode & user_addr_mode;
1194 assign mb_user_cmpselinc_hold = user_mode & user_cmpselinc_hold;
1195 assign mb_ten_n_mode = user_mode & ten_n_mode;
1196 assign mb_user_loop_mode = user_mode & user_loop_mode;
1197 assign mb_user_cam_mode = user_mode & user_cam_mode;
1198 assign mb_user_ram_mode = user_mode & ~user_cam_mode;
1199
1200
1201
1202 assign mb_user_bisi_wr_mode = user_mode & user_bisi_wr_mode & bisi_mode;
1203 assign mb_user_bisi_rd_mode = user_mode & user_bisi_rd_mode & bisi_mode;
1204
1205 assign mb_user_bisi_rw_mode = ((~user_bisi_wr_mode & ~user_bisi_rd_mode) | (user_bisi_wr_mode & user_bisi_rd_mode)) & bisi_mode;
1206
1207 assign mb_default_bisi = bisi_mode & ~user_mode;
1208
1209
1210// /////////////////////////////////////////////////////////////////////////////
1211//
1212// MBIST Config Register
1213//
1214// /////////////////////////////////////////////////////////////////////////////
1215//
1216// A low to high transition on mbist_start will reset and start the engine.
1217// mbist_start must remain active high for the duration of MBIST.
1218// If mbist_start deasserts the engine will stop but not reset.
1219// Once MBIST has completed mb0_done will assert and the fail status
1220// signals will be valid.
1221// To run MBIST again the mbist_start signal must transition low then high.
1222//
1223// Loop on Address will disable the address mix function.
1224//
1225// /////////////////////////////////////////////////////////////////////////////
1226
1227 // flop incoming signals:
1228
1229 spc_mb0_ctlmsff_ctl_macro__width_2 input_signals_reg (
1230 .scan_in(input_signals_reg_scanin),
1231 .scan_out(input_signals_reg_scanout),
1232 .l1clk ( l1clk ),
1233 .din ( {mbist_bisi_mode,mbist_user_mode} ),
1234 .dout ( {bisi_mode ,user_mode} ),
1235 .siclk(siclk),
1236 .soclk(soclk));
1237
1238
1239
1240 // default : mb_enable=0
1241 // bisi : mb_enable=0
1242 // user_mode : mb_enable=depend on programmed value
1243
1244 spc_mb0_ctlmsff_ctl_macro__width_1 mb_enable_reg (
1245 .scan_in(mb_enable_reg_scanin),
1246 .scan_out(mb_enable_reg_scanout),
1247 .l1clk ( l1clk_pm1 ),
1248 .din ( mb_enable ),
1249 .dout ( mb_enable_out ),
1250 .siclk(siclk),
1251 .soclk(soclk));
1252
1253//assign mb_enable = user_mode ? mb_enable_out : 1'b0;
1254 assign mb_enable = mb_enable_out;
1255
1256
1257 assign start = user_mode ? (mb_enable_out & start_in) :
1258 start_in;
1259
1260
1261
1262
1263 spc_mb0_ctlmsff_ctl_macro__width_2 config_reg (
1264 .scan_in(config_reg_scanin),
1265 .scan_out(config_reg_scanout),
1266 .l1clk ( l1clk_pm1 ),
1267 .din ( config_in[1:0] ),
1268 .dout ( config_out[1:0] ),
1269 .siclk(siclk),
1270 .soclk(soclk));
1271
1272
1273 assign config_in[0] = start;
1274 assign config_in[1] = config_out[0];
1275 assign start_transition = config_out[0] & ~config_out[1];
1276 assign end_transition = ~config_out[0] & config_out[1];
1277 assign reset_engine = start_transition | loop_again | end_transition;
1278 assign run = config_out[1] ;
1279
1280
1281
1282 spc_mb0_ctlmsff_ctl_macro__width_1 loop_again_reg (
1283 .scan_in(loop_again_reg_scanin),
1284 .scan_out(loop_again_reg_scanout),
1285 .l1clk ( l1clk_pm1 ),
1286 .din ( stop_engine_l ),
1287 .dout ( stop_engine_l_q ),
1288 .siclk(siclk),
1289 .soclk(soclk));
1290
1291
1292assign loop_again=mb_user_loop_mode ? stop_engine_l & ~stop_engine_l_q: 1'b0;
1293
1294
1295// config
1296
1297
1298
1299 // cam selection
1300
1301 assign cam_array_0 = (cam_sel[1:0]==2'b00) & (cambist_d4 & run3);
1302 assign cam_array_1 = (cam_sel[1:0]==2'b01) & (cambist_d4 & run3);
1303 assign cam_array_2 = (cam_sel[1:0]==2'b10) & (cambist_d4 & run3);
1304 assign cam_clear = (cam_sel[1:0]==2'b11) & (cambist_d4 & run3);
1305
1306 assign last_cam = cam_clear;
1307
1308 // default mode : cambist = cntl_msb
1309 // mb_user_cam_mode : cambist = 1
1310 // mbist_bisi_mode : cambist = 0
1311
1312
1313
1314 assign cambist=((mb_user_cam_mode | (cntl_msb & ~bisi_mode)) & run3 );
1315
1316
1317
1318
1319 spc_mb0_ctlmsff_ctl_macro__width_4 cambist_delay_reg (
1320 .scan_in(cambist_delay_reg_scanin),
1321 .scan_out(cambist_delay_reg_scanout),
1322 .l1clk ( l1clk_pm1 ),
1323 .din ( {cambist,cambist_d1,cambist_d2,cambist_d3} ),
1324 .dout ( {cambist_d1,cambist_d2,cambist_d3,cambist_d4} ),
1325 .siclk(siclk),
1326 .soclk(soclk));
1327
1328
1329
1330// /////////////////////////////////////////////////////////////////////////////
1331//
1332// CAM BIST:
1333//
1334// /////////////////////////////////////////////////////////////////////////////
1335
1336
1337
1338
1339 spc_mb0_ctlmsff_ctl_macro__width_27 cam_cntl_reg (
1340 .scan_in(cam_cntl_reg_scanin),
1341 .scan_out(cam_cntl_reg_scanout),
1342 .l1clk ( l1clk_pm1 ),
1343 .din ( cam_in[26:0] ),
1344 .dout ( cam_out[26:0] ),
1345 .siclk(siclk),
1346 .soclk(soclk));
1347
1348
1349 spc_mb0_ctlmsff_ctl_macro__width_1 cam_shift_reg (
1350 .scan_in(cam_shift_reg_scanin),
1351 .scan_out(cam_shift_reg_scanout),
1352 .l1clk ( l1clk_pm1 ),
1353 .din ( cam_shift_val ),
1354 .dout ( cam_shift ),
1355 .siclk(siclk),
1356 .soclk(soclk));
1357
1358
1359
1360
1361 // stbcam
1362
1363 //
1364
1365
1366 // tlb_op
1367 // 000 - tlb cam
1368 // 001 - demap page
1369 // 010 - demap real
1370 // 011 - demap context
1371 // 100 - demap all
1372 // 101 - replacement write
1373 // 110 - multiple hit
1374 // 111 - used bit
1375 //
1376
1377
1378 // clear 0 0 - clear
1379 // ^(W1CmRdW0) 1 - test
1380 // work
1381
1382
1383 // test0:
1384 //
1385 // ^(W0);
1386 // ^(W1C1RvW0);
1387 // seq0
1388 // crw0
1389 // seq1
1390 // crw0
1391 // crw1
1392 // crw2
1393 // crw2
1394
1395 assign cam_msb = ~start_in ? 1'b0 : cam_out[26]; //
1396
1397 assign cam_array_sel[1:0] = (user_mode | last_cam ) ? 2'b11:
1398 cam_out[25:24]; // 2 bits
1399
1400 assign cam_ctest[3:0] = sel_ctest_pass | user_mode? 4'b1111:
1401 cam_out[23:20]; //
1402
1403
1404
1405
1406 assign cam_cseq[2:0] = sel_cseq_pass ? 3'b111 : cam_out[19:17];
1407
1408
1409// assign stb_bwk2_cseq3 = cam_array_0 & stb_cam_bwk2_test & cseq3 ;
1410// assign stb_pwk1_cseq3 = cam_array_0 & (~stb_cam_pwk1_test & cseq3);
1411// assign stb_mhit_cseq3 = cam_array_0 & (stb_cam_mhit_test & cseq3);
1412// assign dtb_mhit_cseq3 = cam_array_0 & (tlb_cam_mhit_test & cseq3);
1413// assign itb_mhit_cseq3 = cam_array_2 & (tlb_cam_mhit_test & cseq3);
1414
1415 assign cam_raw_addr[14:0] = (cam_array_0 & ctest13 & cseq1) ? { 1'b1, cam_out[15:9],cam_out[8:2]}:
1416 (cam_array_1 & ctest13 & cseq1) ? { 2'b11,cam_out[14:9],1'b1,cam_out[7:2]}:
1417// (cam_array_2 & ctest10 & cseq1) ? { 2'b11,cam_out[14:9],1'b1,cam_out[7:2]}:
1418 cam_array_0 | cam_clear ? { 8'b1111_1111 ,cam_out[8:2]}:
1419 (cam_array_2 & ctest06 & ~cseq0) ? { 6'b1111_11, cam_out[10:2]}:
1420 (cam_array_2 & ctest08 & ~cseq0) ? { 6'b1111_11, cam_out[10:2]}:
1421 (cam_array_2 & ctest10 & ~cseq0) ? { 6'b1111_11, cam_out[10:2]}:
1422 (cam_array_1 | cam_array_2) ? { 9'b1111_1111_1 ,cam_out[7:2]}:
1423 cam_out[16:2];
1424
1425// assign cam_raw_addr[14:0] = stb_bwk2_cseq3 ? { 9'b1111_1111_1 ,cam_out[7:5],3'b111}:
1426// stb_mhit_cseq3 ? { 5'b1111_1 ,cam_out[11:2]}:
1427// stb_pwk1_cseq3 ? { 9'b1111_1111_1,cam_out[7:2]}:
1428// dtb_mhit_cseq3 ? cam_out[16:2]:
1429// itb_mhit_cseq3 ? {1'b1,cam_out[15:9],1'b1,cam_out[7:2]}:
1430// cam_array_1 ? { 9'b1111_1111_1,cam_out[7:2]}:
1431// cam_array_0 ? { 8'b1111_1111 ,cam_out[8:2]}:
1432
1433// cam_out[16:2];
1434
1435 // tlb mhit addressing
1436 assign tlb_mhit_addr1[6:0]=cam_raw_addr[13:7];
1437 assign tlb_mhit_addr2[6:0]=cam_raw_addr[6:0];
1438 assign tlb_same_addr=tlb_mhit_addr1[6:0]==tlb_mhit_addr2[6:0];
1439
1440 assign mhit_begin= (cseq1 & ctest13 & ((cam_array_0 & ~(|tlb_mhit_addr2[6:0]) | (cam_array_1 & ~(|tlb_mhit_addr2[5:0]))))) |
1441 (cseq1 & ctest10 & (cam_array_2 & ~(|tlb_mhit_addr2[2:0]))) ;
1442
1443 // stb mhit addressing
1444
1445 assign stb_mhit_addr1[2:0]=cam_raw_addr[5:3];
1446 assign stb_mhit_addr2[2:0]=cam_raw_addr[2:0];
1447// assign stb_mhit_clear=cam_raw_addr[3];
1448 assign stb_same_addr=(stb_mhit_addr1[2:0] == stb_mhit_addr2[2:0]) & stb_cam_mhit_test & cseq1;
1449
1450
1451 assign cam_addr[6:0] = (cam_array_2 & mhit_begin & crw0) ? {cam_raw_addr[6:3],stb_mhit_addr1[2:0]} :
1452 ((cam_array_1|cam_array_0) & mhit_begin & crw0) ? tlb_mhit_addr1[6:0] :
1453 (cam_array_2) ? {1'b0,cam_raw_addr[5:0]} :
1454 cam_raw_addr[6:0];
1455
1456
1457 // read write control:
1458
1459
1460 assign cam_crw[1:0] = sel_crw_pass ? 2'b11 : cam_out[1:0]; // read write control
1461
1462
1463 // decoding of control signals
1464
1465 assign cseq0 = cseq[2:0]==3'b000;
1466 assign cseq1 = cseq[2:0]==3'b001;
1467 assign cseq2 = cseq[2:0]==3'b010;
1468 assign cseq3 = cseq[2:0]==3'b011;
1469 assign cseq4 = cseq[2:0]==3'b100;
1470
1471
1472 assign crw0 = ~( crw[1] | crw[0]);
1473 assign crw1 = ~( crw[1] | ~crw[0]);
1474 assign crw2 = ~(~crw[1] | crw[0]);
1475 assign crw3 = ~(~crw[1] | ~crw[0]);
1476
1477
1478
1479
1480 assign tlb_addr[6:0]= stb_cam_mhit_test & cseq1 ? {1'b0,cam_raw_addr[8:6],cam_addr[2:0]} :
1481 cam_addr[6:0];
1482
1483 assign tlb_stb_addr[6:0]= (stb_cam_pwk1_test & cseq1) ? {1'b0,cam_raw_addr[8:6],3'b000} : tlb_addr[6:0];
1484
1485 assign cam_wr_en = (tlb_cam_gen_test & cseq0 & crw0) |
1486 (tlb_cam_gen_test & cseq1 & (crw0 | crw3)) |
1487 (tlb_cam_dmap_test & cseq0 & crw0 ) |
1488 (tlb_cam_dmap2_test & cseq0 & crw0 ) |
1489 (tlb_cam_walk1_test & cseq0 & crw0 ) |
1490 (tlb_cam_rpwr_test & cseq0 & crw0 ) |
1491 (tlb_cam_rpwr_test & cseq1 & crw0 ) |
1492 (tlb_cam_rpwr_test & cseq3 & crw0 ) |
1493 (tlb_cam_rpwr_test & cseq4 & (crw0 | crw2) ) |
1494 (tlb_cam_mhit_test & cseq0 & crw0 ) |
1495// (tlb_cam_mhit_test & cseq2 & crw0 ) |
1496 (tlb_cam_mhit_test & cseq1 & ((crw1 | crw3) & ~tlb_same_addr)) |
1497 (tlb_cam_mhit_test & cseq1 & (crw0 & mhit_begin)) |
1498
1499 (stb_cam_mhit_test & cseq0 & crw0 ) |
1500 (stb_cam_mhit_test & cseq1 & ((crw1 | crw3) & ~stb_same_addr)) |
1501 (stb_cam_mhit_test & cseq1 & (crw0 & mhit_begin)) |
1502 (stb_cam_gen_test & cseq0 & crw0) |
1503 (stb_cam_gen_test & ~ctest09 & cseq1 & (crw0 | crw2)) |
1504// (stb_cam_mhit_test & cseq2 & crw0) |
1505 (stb_cam_pwk1_test & cseq0 & crw0) |
1506 (stb_cam_bwk1_test & cseq0 & crw0) |
1507 (stb_cam_bwk2_test & cseq0 & crw0) |
1508 (stb_cam_bwk2_test & cseq1 & (crw0 | crw2)) |
1509 (cam_clear & cseq1) ;
1510
1511 assign cam_en_pre = (tlb_cam_gen_test & cseq1 & crw0) |
1512 (cam_array_0 & tlb_cam_walk1_test & cseq1 & (cam_zero | (cam_shift & ~(end_shift) ) | (cam_addr[6:0]==7'd0))) |
1513 (cam_array_1 & tlb_cam_walk1_test & cseq1 & (cam_zero | (cam_shift & ~(end_shift) ) | (cam_addr[5:0]==6'd0))) |
1514 (tlb_cam_mhit_test & cseq1 & crw1 & ~tlb_same_addr) |
1515 (stb_cam_mhit_test & cseq1 & crw1 & ~stb_same_addr) |
1516 (stb_cam_gen_test & cseq1 & crw0) |
1517 (stb_cam_pwk1_test & cseq1 & crw0 & (cam_zero | (cam_shift & ~(end_shift) ) | (cam_addr[5:0]==6'd0))) |
1518 (stb_cam_bwk2_test & cseq1 & crw0) |
1519 (stb_cam_bwk1_test & (((cam_addr[5:0]==6'd63) & cseq0) | (~(cam_addr[5:0]==6'd63) & cseq1))) ;
1520
1521 // can't have dmap and cam_en on at same time
1522
1523 assign dmap_en = (cam_array_0 & tlb_cam_dmap_test & cseq1 & crw0 & (~|cam_addr[6:0])) |
1524 (cam_array_0 & tlb_cam_dmap2_test & cseq1 & (~|cam_addr[6:0])) |
1525 (cam_array_1 & tlb_cam_dmap_test & cseq1 & (~|cam_addr[5:0])) |
1526 (cam_array_1 & tlb_cam_dmap2_test & cseq1 & ~|cam_addr[5:0]);
1527
1528
1529 assign cam_rd_en = (tlb_cam_gen_test & cseq1 & crw2) |
1530 (tlb_cam_dmap_test & cseq2 & crw0) |
1531 (tlb_cam_dmap2_test & cseq2 & crw0) |
1532 (tlb_cam_rpwr_test & cseq1 & crw1) |
1533 (tlb_cam_rpwr_test & cseq3 & crw1) |
1534 (tlb_cam_rpwr_test & cseq4 & crw3);
1535
1536 assign tlb_rpwr_en = (tlb_cam_rpwr_test & cseq1 & crw0) |
1537 (tlb_cam_rpwr_test & cseq3 & crw0) |
1538 (tlb_cam_rpwr_test & cseq4 & crw2) ;
1539
1540 assign tlb_dis_clr_bit = (tlb_cam_rpwr_test & (cseq0 | cseq3 | cseq4)) |
1541 tlb_cam_gen_test |
1542 tlb_cam_dmap_test |
1543 tlb_cam_dmap2_test |
1544 tlb_cam_walk1_test |
1545 tlb_cam_mhit_test ;
1546
1547 assign mbist_dis_clr_ubit=(tlb_dis_clr_bit | array_04 | array_08);
1548
1549
1550
1551
1552 spc_mb0_ctlmsff_ctl_macro__width_1 cam_en_reg (
1553 .scan_in(cam_en_reg_scanin),
1554 .scan_out(cam_en_reg_scanout),
1555 .l1clk ( l1clk_pm1 ),
1556 .din ( cam_en_pre ),
1557 .dout ( cam_en ),
1558 .siclk(siclk),
1559 .soclk(soclk));
1560
1561
1562
1563
1564 assign dmap_all = ((ctest09 | (ctest10 & crw0)) & dmap_en);
1565 assign dmap_real = ((ctest07 | (ctest10 & crw3)) & dmap_en);
1566 assign dmap_cntx = ((ctest08 | (ctest10 & crw1)) & dmap_en);
1567 assign dmap_page = ((ctest06 | (ctest10 & crw2)) & dmap_en);
1568
1569
1570
1571 assign dmap_on = dmap_page | dmap_real | dmap_cntx | dmap_all;
1572
1573
1574
1575 assign mbist_demap_type[1:0] = ({2{dmap_page}} & 2'b00) |
1576 ({2{dmap_real}} & 2'b01) |
1577 ({2{dmap_cntx}} & 2'b10) |
1578 ({2{dmap_all}} & 2'b11);
1579
1580
1581 assign mbist_dtb_demap_en = dmap_on & cam_array_0; // active only when dtlb is on
1582 assign mbist_itb_demap_en = dmap_on & cam_array_1; // active only when itlb is on
1583
1584 assign mbist_stb_cam_en_pre = cam_array_2 & cam_en_pre;
1585 assign mbist_dtb_cam_en_pre = cam_array_0 & cam_en_pre;
1586 assign mbist_itb_cam_en_pre = cam_array_1 & cam_en_pre;
1587
1588 // tcam
1589 assign ctest00 = ctest[3:0]==4'h0 & cambist;
1590 assign ctest01 = ctest[3:0]==4'h1;
1591 assign ctest02 = ctest[3:0]==4'h2;
1592 assign ctest03 = ctest[3:0]==4'h3;
1593 assign ctest04 = ctest[3:0]==4'h4;
1594 assign ctest05 = ctest[3:0]==4'h5;
1595
1596 // demap
1597 assign ctest06 = ctest[3:0]==4'h6;
1598 assign ctest07 = ctest[3:0]==4'h7;
1599 assign ctest08 = ctest[3:0]==4'h8;
1600 assign ctest09 = ctest[3:0]==4'h9;
1601 assign ctest10 = ctest[3:0]==4'hA;
1602
1603
1604 assign ctest11 = ctest[3:0]==4'hB;
1605 assign ctest12 = ctest[3:0]==4'hC;
1606 assign ctest13 = ctest[3:0]==4'hD;
1607// assign ctest14 = ctest[3:0]==4'hE;
1608// assign ctest15 = ~(~ctest[3] | ~ctest[2] | ~ctest[1] | ctest[0]);
1609// assign ctest16 = ~(~ctest[3] | ~ctest[2] | ~ctest[1] | ~ctest[0]);
1610
1611
1612
1613 assign tlb = cam_array_0 | cam_array_1;
1614 assign stb = cam_array_2;
1615
1616
1617 // stb generic cam test
1618 // ^(W);^(----);
1619 // seq2;seq3
1620 //
1621 assign stb_cam_gen_test = stb &
1622 (ctest00 |
1623 ctest01 |
1624 ctest02 |
1625 ctest03 |
1626 ctest04 |
1627 ctest05 |
1628 ctest09 );
1629
1630
1631 assign stb_cam_pwk1_test = stb & (ctest06);
1632
1633
1634 // stb walking 1 byte_match
1635 //
1636
1637
1638
1639 // stb walking 1 ptag
1640
1641 assign stb_cam_bwk1_test = stb & ctest07;
1642
1643
1644 assign stb_cam_bwk2_test = stb & ctest08;
1645
1646// assign stb_cam_misc_test = stb & ctest09;
1647
1648 assign stb_cam_mhit_test = stb & ctest10;
1649
1650 ////// TLB
1651
1652 assign tlb_cam_gen_test = tlb &
1653 (ctest00 |
1654 ctest01 |
1655 ctest02 |
1656 ctest03 |
1657 ctest04 |
1658 ctest05) ;
1659
1660
1661
1662 assign tlb_cam_dmap_test = tlb &
1663 (ctest06 |
1664 ctest07 |
1665 ctest08 |
1666 ctest09 );
1667
1668 assign tlb_cam_dmap2_test = tlb & (ctest10);
1669
1670
1671
1672 assign tlb_cam_walk1_test = tlb & ctest11;
1673
1674 assign tlb_cam_rpwr_test = tlb & ctest12;
1675
1676 assign tlb_cam_mhit_test = tlb & ctest13;
1677
1678
1679 assign cam_walk1 = (tlb_cam_walk1_test & cseq1) | (stb_cam_pwk1_test | stb_cam_bwk1_test | stb_cam_bwk2_test) ;
1680
1681
1682// assign end_shift_pre = ((cam_array_0 | cam_array_1) & tlb_cam_walk1_test) ? cam_walk1 & (tlb_addr[5:0]==6'd51) :
1683// cam_array_2 & stb_cam_pwk1_test ? cam_walk1 & (tlb_addr[5:0]==6'd36) :
1684// cam_walk1 & (tlb_addr[2:0]==3'd7) ;
1685
1686
1687 assign end_shift = cam_array_0 ? cam_walk1 & (tlb_addr[6:0]==7'd52) :
1688 cam_array_1 ? cam_walk1 & (tlb_addr[5:0]==6'd52) :
1689 cam_array_2 & stb_cam_pwk1_test ? cam_walk1 & (tlb_addr[5:0]==6'd37) :
1690 cam_walk1 & (tlb_addr[2:0]==3'd7) ;
1691
1692
1693
1694 assign cam_zero = (cam_array_0 & tlb_cam_walk1_test & cseq1 & (cam_addr[6:0]==7'b0000001)) |
1695 (cam_array_1 & tlb_cam_walk1_test & cseq1 & (cam_addr[5:0]==6'b000001)) |
1696 (cam_array_2 & stb_cam_pwk1_test & cseq1 & (cam_addr[5:0]==6'b000001)) |
1697 (cam_array_2 & stb_cam_bwk1_test & cseq1 & ~|cam_addr[2:0]) ;
1698
1699
1700
1701
1702 assign cam_shift_val = ~cambist | end_shift ? 1'b0 :
1703 cam_zero & (cseq1 | cseq3) ? 1'b1 :
1704 cam_shift;
1705
1706
1707
1708
1709
1710 // data assignments
1711
1712 assign mbist_ptag_data = ptag_data;
1713
1714 // cam data assignment
1715
1716 assign ptag_data = (ctest00 & cseq1 & (crw0 |crw1)) |
1717 (ctest01 & cseq0) |
1718 (ctest01 & cseq1 & crw2) |
1719 (ctest02 & cseq1 & (crw0 | crw1)) |
1720 (ctest03 & cseq1 & (crw0 | crw1)) |
1721 (ctest04 & cseq1 & (crw0 | crw1)) |
1722 (ctest05 & cseq1 & (crw0 | crw1)) |
1723 (ctest07 ) |
1724 (ctest09 ) |
1725 (ctest10 & cseq1 & (crw1 | crw2) ) |
1726 (ctest10 & cseq1 & crw0 & mhit_begin ) ;
1727
1728
1729 assign stb_data[7:0] = ({8{(ctest00 & cseq0) }} & 8'b00000000) |
1730 ({8{(ctest00 & cseq1 & crw0 )}} & 8'b11111111) |
1731 ({8{(ctest00 & cseq1 & crw1 )}} & 8'b11111111) |
1732 ({8{(ctest00 & cseq1 & crw3 )}} & 8'b00000000) |
1733 ({8{(ctest01 & cseq0) }} & 8'b00000000) |
1734 ({8{(ctest01 & cseq1 & crw0 )}} & 8'b11111111) |
1735 ({8{(ctest01 & cseq1 & crw1 )}} & 8'b11111111) |
1736 ({8{(ctest01 & cseq1 & crw3 )}} & 8'b00000000) |
1737 ({8{(ctest02 & cseq0) }} & 8'h00) |
1738 ({8{(ctest02 & cseq1 & crw0 )}} & 8'hAA) |
1739 ({8{(ctest02 & cseq1 & crw1 )}} & 8'hFF) |
1740 ({8{(ctest02 & cseq1 & crw3 )}} & 8'h00) |
1741 ({8{(ctest03 & cseq0) }} & 8'h00) |
1742 ({8{(ctest03 & cseq1 & crw0 )}} & 8'h55) |
1743 ({8{(ctest03 & cseq1 & crw1 )}} & 8'hFF) |
1744 ({8{(ctest03 & cseq1 & crw3 )}} & 8'h00) |
1745 ({8{(ctest04 & cseq0) }} & 8'h00) |
1746 ({8{(ctest04 & cseq1 & crw0 )}} & 8'h55) |
1747 ({8{(ctest04 & cseq1 & crw1 )}} & 8'h55) |
1748 ({8{(ctest04 & cseq1 & crw3 )}} & 8'h00) |
1749 ({8{(ctest05 & cseq0) }} & 8'h00) |
1750 ({8{(ctest05 & cseq1 & crw0 )}} & 8'hAA) |
1751 ({8{(ctest05 & cseq1 & crw1 )}} & 8'hAA) |
1752 ({8{(ctest05 & cseq1 & crw3 )}} & 8'h00) |
1753 ({8{(ctest06 & cseq0) }} & 8'hFF) |
1754 ({8{(ctest06 & cseq1 & crw0 )}} & 8'hFF) |
1755 ({8{(ctest07 & cseq0) }} & 8'h00) |
1756 ({8{(ctest07 & cam_zero )}} & 8'h01) |
1757 ({8{(ctest07 & cam_shift )}} & {mb0_write_data[6:0],1'b0}) |
1758 ({8{(ctest08 & cseq0 )}} & 8'h00) |
1759 ({8{(ctest08 & cseq1 & crw0 )}} & 8'hFF) |
1760 ({8{(ctest08 & cseq1 & crw1 )}} & walk1data[7:0]) |
1761 ({8{(ctest08 & cseq1 & crw2 )}} & 8'h00) |
1762 ({8{(ctest10 & cseq1 & crw1 )}} & 8'hFF) |
1763 ({8{(ctest10 & cseq1 & crw2 )}} & 8'hFF) |
1764 ({8{(ctest10 & cseq0 & crw0 )}} & 8'h00) |
1765 ({8{(ctest10 & cseq1 & mhit_begin & crw0 )}} & 8'hFF) ;
1766
1767 assign walk1data[7:0] = ({8{cam_raw_addr[8:6]==3'b000}} & 8'b0000_0001) |
1768 ({8{cam_raw_addr[8:6]==3'b001}} & 8'b0000_0010) |
1769 ({8{cam_raw_addr[8:6]==3'b010}} & 8'b0000_0100) |
1770 ({8{cam_raw_addr[8:6]==3'b011}} & 8'b0000_1000) |
1771 ({8{cam_raw_addr[8:6]==3'b100}} & 8'b0001_0000) |
1772 ({8{cam_raw_addr[8:6]==3'b101}} & 8'b0010_0000) |
1773 ({8{cam_raw_addr[8:6]==3'b110}} & 8'b0100_0000) |
1774 ({8{cam_raw_addr[8:6]==3'b111}} & 8'b1000_0000) ;
1775
1776 assign cam_data[7:0] = cam_clear ? 8'h00 :
1777 cam_array_2 ? stb_data[7:0] :
1778 tlb_data[7:0];
1779
1780
1781
1782 // 7 ( nothing)
1783 // 6 used
1784 // 5 real
1785 // 4 valid
1786 // 3 context0
1787 // 2 context1
1788 // 1 PID
1789 // 0 oter (va)
1790
1791
1792 assign tlb_data[7:0] = ({8{(ctest00 & cseq0) }} & 8'b10101111) | // ^(W0)
1793 ({8{(ctest00 & cseq1 & crw0 )}} & 8'b10111111) | // W1
1794 ({8{(ctest00 & cseq1 & crw1 )}} & 8'b10110011) | // C1
1795 ({8{(ctest00 & cseq1 & crw3 )}} & 8'b10101111) | // W0
1796
1797 ({8{(ctest01 & cseq0) }} & 8'b00100000) |
1798 ({8{(ctest01 & cseq1 & crw0 )}} & 8'b00110000) | // W1
1799 ({8{(ctest01 & cseq1 & crw1 )}} & 8'b00101100) | // C1
1800 ({8{(ctest01 & cseq1 & crw3 )}} & 8'b00100000) | // W0
1801
1802 ({8{(ctest02 & cseq0) }} & 8'b10001111) |
1803 ({8{(ctest02 & cseq1 & crw0 )}} & 8'b10011111) | // W1
1804 ({8{(ctest02 & cseq1 & crw1 )}} & 8'b10010111) | // C1
1805 ({8{(ctest02 & cseq1 & crw3 )}} & 8'b10001111) | // W0
1806
1807 ({8{(ctest03 & cseq0) }} & 8'b10001111) |
1808 ({8{(ctest03 & cseq1 & crw0 )}} & 8'b10011111) | // W1
1809 ({8{(ctest03 & cseq1 & crw1 )}} & 8'b10011011) | // C1
1810 ({8{(ctest03 & cseq1 & crw3 )}} & 8'b10001111) | // W0
1811
1812 ({8{(ctest04 & cseq0) }} & 8'b00000000) |
1813 ({8{(ctest04 & cseq1 & crw0 )}} & 8'b00010000) | // W1
1814 ({8{(ctest04 & cseq1 & crw1 )}} & 8'b00001000) | // C1
1815 ({8{(ctest04 & cseq1 & crw3 )}} & 8'b00000000) | // W0
1816
1817 ({8{(ctest05 & cseq0) }} & 8'b00000000) |
1818 ({8{(ctest05 & cseq1 & crw0 )}} & 8'b00010000) | // W1
1819 ({8{(ctest05 & cseq1 & crw1 )}} & 8'b00000100) | // C1
1820 ({8{(ctest05 & cseq1 & crw3 )}} & 8'b00000000) | // W0
1821
1822 ({8{(ctest06 & cseq0) }} & 8'b00010000) |
1823 ({8{(ctest06 & cseq1 )}} & 8'b00001000) |
1824
1825 ({8{(ctest07 & cseq0) }} & 8'b10111111) |
1826 ({8{(ctest07 & cseq1 )}} & 8'b00100010) |
1827
1828 ({8{(ctest08 & cseq0) }} & 8'b00010000) |
1829 ({8{(ctest08 & cseq1 )}} & 8'b10010101) |
1830
1831 ({8{(ctest09 & cseq0) }} & 8'b10111111) |
1832 ({8{(ctest09 & cseq1 )}} & 8'b00000010) |
1833
1834 ({8{(ctest10 & cseq0) }} & 8'b00010000) |
1835 ({8{(ctest10 & cseq1 & crw0 )}} & 8'b00000010) |
1836 ({8{(ctest10 & cseq1 & crw1 )}} & 8'b00001100) |
1837 ({8{(ctest10 & cseq1 & crw2 )}} & 8'b00001100) |
1838 ({8{(ctest10 & cseq1 & crw3 )}} & 8'b00100000) |
1839
1840 ({8{(ctest11 & cseq0 & crw0 )}} & 8'b00010000) |
1841
1842 ({8{(ctest12 & cseq0 & crw0 )}} & 8'b00000000) |
1843 ({8{(ctest12 & cseq1 & crw0 )}} & 8'b01010000) |
1844 ({8{(ctest12 & cseq3 & crw0 )}} & 8'b01010000) |
1845 ({8{(ctest12 & cseq4 & crw0 )}} & 8'b01000000) |
1846 ({8{(ctest12 & cseq4 & crw2 )}} & 8'b01010000) |
1847
1848 ({8{(ctest13 & cseq0 & crw0 )}} & 8'b00000000) |
1849 ({8{(ctest13 & cseq1 & crw0 )}} & 8'b10111111) |
1850 ({8{(ctest13 & cseq1 & crw1 )}} & 8'b10111111) |
1851 ({8{(ctest13 & cseq1 & crw2 )}} & 8'b10111111) |
1852 ({8{(ctest13 & cseq1 & crw3 )}} & 8'b00000000) ;
1853
1854
1855
1856
1857// assign tlb_sb_mhit =(tlb_cam_gen_test & cseq1 & crw1) |
1858// (tlb_cam_walk1_test & cseq1 & crw0) |
1859// (tlb_cam_mhit_test & cseq1 & crw1) ;
1860
1861// assign tlb_sb_camhit =(tlb_cam_gen_test & cseq1 & crw1) |
1862// (tlb_cam_walk1_test & cseq1 & crw0) |
1863// (tlb_cam_mhit_test & cseq1 & crw1) ;
1864
1865// assign tlb_sb_data_cmp =(tlb_cam_gen_test & cseq1 & crw1) |
1866// (tlb_cam_rpwr_test & cseq1 & crw1) |
1867// (tlb_cam_rpwr_test & cseq2 & crw1) |
1868// (tlb_cam_rpwr_test & cseq3 & crw2);
1869
1870// assign tlb_sb_cntx0_hit =(ctest02 & cseq1 & crw1) |
1871// (ctest03 & cseq1 & crw1) |
1872// (ctest04 & cseq1 & crw1) |
1873// (ctest05 & cseq1 & crw1) ;
1874
1875
1876
1877// assign tlb_sb_valid =(tlb_cam_gen_test & cseq1 & crw2) |
1878// (tlb_cam_dmap_test & cseq2 & crw0) |
1879// (tlb_cam_dmap2_test & cseq2 & crw0) ;
1880
1881// assign tlb_sb_ubit =(tlb_cam_gen_test & cseq1 & crw2) |
1882// (tlb_cam_walk1_test & cseq2 & crw0) ;
1883
1884 // stb
1885 assign stb_cam_en = cam_en & cam_array_2;
1886 assign stb_hit_cmp = stb_cam_en;
1887 assign stb_hit_cmp_mhit_l = stb_cam_en & ~ctest10;
1888 assign exp_stb_cam_hit = ~(ctest06 | ctest07 | ctest09);
1889 assign exp_stb_hit_ptr[2:0] = (ctest07 | ctest09) ? 3'b000: mb0_addr[2:0];
1890 assign exp_stb_mhit = ctest10;
1891 assign exp_stb_ld_partial_raw = (ctest02 | ctest03);
1892
1893
1894 spc_mb0_ctlmsff_ctl_macro__width_3 stb_hit_cmp_delay (
1895 .scan_in(stb_hit_cmp_delay_scanin),
1896 .scan_out(stb_hit_cmp_delay_scanout),
1897 .l1clk ( l1clk_pm1 ),
1898 .din ({stb_hit_cmp, stb_hit_cmp_d1, stb_hit_cmp_d2} ),
1899 .dout ({stb_hit_cmp_d1,stb_hit_cmp_d2, stb_hit_cmp_d3}),
1900 .siclk(siclk),
1901 .soclk(soclk));
1902
1903
1904
1905 spc_mb0_ctlmsff_ctl_macro__width_3 stb_hit_cmp_mhit_l_delay (
1906 .scan_in(stb_hit_cmp_mhit_l_delay_scanin),
1907 .scan_out(stb_hit_cmp_mhit_l_delay_scanout),
1908 .l1clk ( l1clk_pm1 ),
1909 .din ({stb_hit_cmp_mhit_l, stb_hit_cmp_mhit_l_d1, stb_hit_cmp_mhit_l_d2} ),
1910 .dout ({stb_hit_cmp_mhit_l_d1,stb_hit_cmp_mhit_l_d2, stb_hit_cmp_mhit_l_d3}),
1911 .siclk(siclk),
1912 .soclk(soclk));
1913
1914 spc_mb0_ctlmsff_ctl_macro__width_3 exp_stb_cam_hit_delay (
1915 .scan_in(exp_stb_cam_hit_delay_scanin),
1916 .scan_out(exp_stb_cam_hit_delay_scanout),
1917 .l1clk ( l1clk_pm1 ),
1918 .din ({exp_stb_cam_hit, exp_stb_cam_hit_d1, exp_stb_cam_hit_d2} ),
1919 .dout ({exp_stb_cam_hit_d1,exp_stb_cam_hit_d2, exp_stb_cam_hit_d3}),
1920 .siclk(siclk),
1921 .soclk(soclk));
1922
1923
1924 spc_mb0_ctlmsff_ctl_macro__width_9 exp_stb_hit_ptr_delay (
1925 .scan_in(exp_stb_hit_ptr_delay_scanin),
1926 .scan_out(exp_stb_hit_ptr_delay_scanout),
1927 .l1clk ( l1clk_pm1 ),
1928 .din ({exp_stb_hit_ptr[2:0], exp_stb_hit_ptr_d1[2:0], exp_stb_hit_ptr_d2[2:0]} ),
1929 .dout ({exp_stb_hit_ptr_d1[2:0],exp_stb_hit_ptr_d2[2:0], exp_stb_hit_ptr_d3[2:0]}),
1930 .siclk(siclk),
1931 .soclk(soclk));
1932
1933
1934 spc_mb0_ctlmsff_ctl_macro__width_3 exp_stb_mhit_delay (
1935 .scan_in(exp_stb_mhit_delay_scanin),
1936 .scan_out(exp_stb_mhit_delay_scanout),
1937 .l1clk ( l1clk_pm1 ),
1938 .din ({exp_stb_mhit, exp_stb_mhit_d1, exp_stb_mhit_d2} ),
1939 .dout ({exp_stb_mhit_d1,exp_stb_mhit_d2, exp_stb_mhit_d3}),
1940 .siclk(siclk),
1941 .soclk(soclk));
1942
1943
1944 spc_mb0_ctlmsff_ctl_macro__width_3 exp_stb_ld_partial_raw_delay (
1945 .scan_in(exp_stb_ld_partial_raw_delay_scanin),
1946 .scan_out(exp_stb_ld_partial_raw_delay_scanout),
1947 .l1clk ( l1clk_pm1 ),
1948 .din ({exp_stb_ld_partial_raw, exp_stb_ld_partial_raw_d1, exp_stb_ld_partial_raw_d2} ),
1949 .dout ({exp_stb_ld_partial_raw_d1,exp_stb_ld_partial_raw_d2, exp_stb_ld_partial_raw_d3}),
1950 .siclk(siclk),
1951 .soclk(soclk));
1952
1953
1954 assign stb_cam_hit_pass = (~stb_hit_cmp_d3) | (stb_hit_cmp_d3 & (exp_stb_cam_hit_d3 == lsu_mbi_scm_hit));
1955 assign stb_hit_ptr_pass = (~stb_hit_cmp_mhit_l_d3) | (stb_hit_cmp_mhit_l_d3 & (exp_stb_hit_ptr_d3[2:0] == lsu_mbi_scm_hit_ptr[2:0]));
1956 assign stb_mhit_pass = (~stb_hit_cmp_d3) | (stb_hit_cmp_d3 & (exp_stb_mhit_d3 == lsu_mbi_scm_mhit));
1957 assign stb_ld_partial_raw_pass = (~stb_hit_cmp_mhit_l_d3) | (stb_hit_cmp_mhit_l_d3 & (exp_stb_ld_partial_raw_d3 == lsu_mbi_scm_praw));
1958
1959 assign cbist_stb_cam_fail = ~(stb_cam_hit_pass &
1960 stb_hit_ptr_pass &
1961 stb_mhit_pass &
1962 stb_ld_partial_raw_pass ) & cam_array_2_d3;
1963
1964 // tlb
1965 assign tlb_cam_en = (cam_en & (cam_array_0 | cam_array_1));
1966 assign tlb_hit_cmp = tlb_cam_en;
1967// assign cam_rd_cmp = cam_rd_en;
1968 assign cam_valid_cmp = cam_rd_en;
1969 assign cam_used_cmp = cam_rd_en & (~cseq1 & tlb_cam_rpwr_test);
1970 assign tlb_cntx0_cmp = (ctest02 | ctest03 | ctest04 | ctest05 | ctest06 | ctest05) & (cam_array_0 | cam_array_1) & cam_en;
1971 assign exp_tlb_mhit = (tlb_cam_mhit_test);
1972 assign tlb_data_cmp = (~ctest13 | ~ctest12) ? 1'b0 : tlb_hit_cmp;
1973
1974 assign exp_cam_hit = (tlb_cam_gen_test | tlb_cam_mhit_test & cseq1);
1975 assign exp_valid = (tlb_cam_gen_test | tlb_cam_dmap2_test | tlb_cam_rpwr_test) ;
1976 assign exp_used = (tlb_cam_gen_test | tlb_cam_walk1_test | tlb_cam_rpwr_test);
1977 assign exp_data_cmp = (tlb_cam_gen_test);
1978
1979
1980 assign exp_cntx0_hit= (ctest03 | ctest05) & (cam_array_0 | cam_array_1);
1981
1982 spc_mb0_ctlmsff_ctl_macro__width_4 cam_array_0_delay (
1983 .scan_in(cam_array_0_delay_scanin),
1984 .scan_out(cam_array_0_delay_scanout),
1985 .l1clk ( l1clk_pm1 ),
1986 .din ({cam_array_0, cam_array_0_d1, cam_array_0_d2,cam_array_0_d3} ),
1987 .dout ({cam_array_0_d1,cam_array_0_d2, cam_array_0_d3,cam_array_0_d4}),
1988 .siclk(siclk),
1989 .soclk(soclk));
1990
1991 spc_mb0_ctlmsff_ctl_macro__width_5 cam_array_1_delay (
1992 .scan_in(cam_array_1_delay_scanin),
1993 .scan_out(cam_array_1_delay_scanout),
1994 .l1clk ( l1clk_pm1 ),
1995 .din ({cam_array_1, cam_array_1_d1, cam_array_1_d2, cam_array_1_d3,cam_array_1_d4} ),
1996 .dout ({cam_array_1_d1,cam_array_1_d2, cam_array_1_d3, cam_array_1_d4,cam_array_1_d5}),
1997 .siclk(siclk),
1998 .soclk(soclk));
1999
2000 spc_mb0_ctlmsff_ctl_macro__width_3 cam_array_2_delay (
2001 .scan_in(cam_array_2_delay_scanin),
2002 .scan_out(cam_array_2_delay_scanout),
2003 .l1clk ( l1clk_pm1 ),
2004 .din ({cam_array_2, cam_array_2_d1, cam_array_2_d2} ),
2005 .dout ({cam_array_2_d1,cam_array_2_d2, cam_array_2_d3}),
2006 .siclk(siclk),
2007 .soclk(soclk));
2008
2009
2010
2011 spc_mb0_ctlmsff_ctl_macro__width_6 cam_hit_cmp_delay (
2012 .scan_in(cam_hit_cmp_delay_scanin),
2013 .scan_out(cam_hit_cmp_delay_scanout),
2014 .l1clk ( l1clk_pm1 ),
2015 .din ({tlb_hit_cmp, tlb_hit_cmp_d1, tlb_hit_cmp_d2,tlb_hit_cmp_d3,tlb_hit_cmp_d4,tlb_hit_cmp_d5} ),
2016 .dout ({tlb_hit_cmp_d1,tlb_hit_cmp_d2, tlb_hit_cmp_d3,tlb_hit_cmp_d4,tlb_hit_cmp_d5,tlb_hit_cmp_d6}),
2017 .siclk(siclk),
2018 .soclk(soclk));
2019
2020
2021 spc_mb0_ctlmsff_ctl_macro__width_5 data_cmp_delay (
2022 .scan_in(data_cmp_delay_scanin),
2023 .scan_out(data_cmp_delay_scanout),
2024 .l1clk ( l1clk_pm1 ),
2025 .din ({tlb_data_cmp, tlb_data_cmp_d1, tlb_data_cmp_d2,tlb_data_cmp_d3,tlb_data_cmp_d4} ),
2026 .dout ({tlb_data_cmp_d1,tlb_data_cmp_d2, tlb_data_cmp_d3,tlb_data_cmp_d4,tlb_data_cmp_d5}),
2027 .siclk(siclk),
2028 .soclk(soclk));
2029
2030
2031// msff_ctl_macro cam_rd_cmp_delay (width=3) (
2032// .scan_in(cam_rd_cmp_delay_scanin),
2033// .scan_out(cam_rd_cmp_delay_scanout),
2034// .l1clk ( l1clk_pm1 ),
2035// .din ({cam_rd_cmp, cam_rd_cmp_d1, cam_rd_cmp_d2} ),
2036// .dout ({cam_rd_cmp_d1,cam_rd_cmp_d2, cam_rd_cmp_d3}));
2037
2038
2039
2040 spc_mb0_ctlmsff_ctl_macro__width_5 cam_valid_cmp_delay (
2041 .scan_in(cam_valid_cmp_delay_scanin),
2042 .scan_out(cam_valid_cmp_delay_scanout),
2043 .l1clk ( l1clk_pm1 ),
2044 .din ({cam_valid_cmp,
2045 cam_valid_cmp_d1,
2046 cam_valid_cmp_d2,
2047 cam_valid_cmp_d3,
2048 cam_valid_cmp_d4} ),
2049 .dout ({cam_valid_cmp_d1,
2050 cam_valid_cmp_d2,
2051 cam_valid_cmp_d3,
2052 cam_valid_cmp_d4,
2053 cam_valid_cmp_d5}),
2054 .siclk(siclk),
2055 .soclk(soclk));
2056
2057
2058 spc_mb0_ctlmsff_ctl_macro__width_5 cam_used_cmp_delay (
2059 .scan_in(cam_used_cmp_delay_scanin),
2060 .scan_out(cam_used_cmp_delay_scanout),
2061 .l1clk ( l1clk_pm1 ),
2062 .din ({cam_used_cmp,
2063 cam_used_cmp_d1,
2064 cam_used_cmp_d2,
2065 cam_used_cmp_d3,
2066 cam_used_cmp_d4} ),
2067 .dout ({cam_used_cmp_d1,
2068 cam_used_cmp_d2,
2069 cam_used_cmp_d3,
2070 cam_used_cmp_d4,
2071 cam_used_cmp_d5}),
2072 .siclk(siclk),
2073 .soclk(soclk));
2074
2075
2076
2077 spc_mb0_ctlmsff_ctl_macro__width_5 exp_data_cmp_delay (
2078 .scan_in(exp_data_cmp_delay_scanin),
2079 .scan_out(exp_data_cmp_delay_scanout),
2080 .l1clk ( l1clk_pm1 ),
2081 .din ({exp_data_cmp, exp_data_cmp_d1, exp_data_cmp_d2,exp_data_cmp_d3, exp_data_cmp_d4} ),
2082 .dout ({exp_data_cmp_d1,exp_data_cmp_d2, exp_data_cmp_d3,exp_data_cmp_d4, exp_data_cmp_d5}),
2083 .siclk(siclk),
2084 .soclk(soclk));
2085
2086 spc_mb0_ctlmsff_ctl_macro__width_5 exp_valid_delay (
2087 .scan_in(exp_valid_delay_scanin),
2088 .scan_out(exp_valid_delay_scanout),
2089 .l1clk ( l1clk_pm1 ),
2090 .din ({exp_valid, exp_valid_d1, exp_valid_d2,exp_valid_d3,exp_valid_d4} ),
2091 .dout ({exp_valid_d1,exp_valid_d2, exp_valid_d3,exp_valid_d4,exp_valid_d5}),
2092 .siclk(siclk),
2093 .soclk(soclk));
2094
2095
2096 spc_mb0_ctlmsff_ctl_macro__width_5 exp_used_delay (
2097 .scan_in(exp_used_delay_scanin),
2098 .scan_out(exp_used_delay_scanout),
2099 .l1clk ( l1clk_pm1 ),
2100 .din ({exp_used, exp_used_d1, exp_used_d2,exp_used_d3,exp_used_d4} ),
2101 .dout ({exp_used_d1,exp_used_d2, exp_used_d3,exp_used_d4,exp_used_d5}),
2102 .siclk(siclk),
2103 .soclk(soclk));
2104
2105
2106 spc_mb0_ctlmsff_ctl_macro__width_6 tlb_cntx0_cmp_delay (
2107 .scan_in(tlb_cntx0_cmp_delay_scanin),
2108 .scan_out(tlb_cntx0_cmp_delay_scanout),
2109 .l1clk ( l1clk_pm1 ),
2110 .din ({tlb_cntx0_cmp, tlb_cntx0_cmp_d1, tlb_cntx0_cmp_d2, tlb_cntx0_cmp_d3,tlb_cntx0_cmp_d4,tlb_cntx0_cmp_d5} ),
2111 .dout ({tlb_cntx0_cmp_d1,tlb_cntx0_cmp_d2, tlb_cntx0_cmp_d3, tlb_cntx0_cmp_d4,tlb_cntx0_cmp_d5,tlb_cntx0_cmp_d6}),
2112 .siclk(siclk),
2113 .soclk(soclk));
2114
2115
2116 spc_mb0_ctlmsff_ctl_macro__width_6 exp_cam_hit_delay (
2117 .scan_in(exp_cam_hit_delay_scanin),
2118 .scan_out(exp_cam_hit_delay_scanout),
2119 .l1clk ( l1clk_pm1 ),
2120 .din ({exp_cam_hit, exp_cam_hit_d1, exp_cam_hit_d2,exp_cam_hit_d3,exp_cam_hit_d4,exp_cam_hit_d5} ),
2121 .dout ({exp_cam_hit_d1,exp_cam_hit_d2, exp_cam_hit_d3,exp_cam_hit_d4,exp_cam_hit_d5,exp_cam_hit_d6}),
2122 .siclk(siclk),
2123 .soclk(soclk));
2124
2125 spc_mb0_ctlmsff_ctl_macro__width_6 exp_cntx0_hit_delay (
2126 .scan_in(exp_cntx0_hit_delay_scanin),
2127 .scan_out(exp_cntx0_hit_delay_scanout),
2128 .l1clk ( l1clk_pm1 ),
2129 .din ({exp_cntx0_hit, exp_cntx0_hit_d1, exp_cntx0_hit_d2, exp_cntx0_hit_d3,exp_cntx0_hit_d4,exp_cntx0_hit_d5} ),
2130 .dout ({exp_cntx0_hit_d1,exp_cntx0_hit_d2, exp_cntx0_hit_d3, exp_cntx0_hit_d4,exp_cntx0_hit_d5,exp_cntx0_hit_d6}),
2131 .siclk(siclk),
2132 .soclk(soclk));
2133
2134
2135 spc_mb0_ctlmsff_ctl_macro__width_6 exp_mhit_delay (
2136 .scan_in(exp_mhit_delay_scanin),
2137 .scan_out(exp_mhit_delay_scanout),
2138 .l1clk ( l1clk_pm1 ),
2139 .din ({exp_tlb_mhit, exp_tlb_mhit_d1, exp_tlb_mhit_d2, exp_tlb_mhit_d3,exp_tlb_mhit_d4,exp_tlb_mhit_d5} ),
2140 .dout ({exp_tlb_mhit_d1,exp_tlb_mhit_d2, exp_tlb_mhit_d3, exp_tlb_mhit_d4,exp_tlb_mhit_d5,exp_tlb_mhit_d6}),
2141 .siclk(siclk),
2142 .soclk(soclk));
2143
2144
2145 assign dtlb_cam_hit_pass = (~tlb_hit_cmp_d4) | (tlb_hit_cmp_d4 & (exp_cam_hit_d4 == lsu_mbi_tlb_cam_hit));
2146 assign dtlb_cntx0_hit_pass = (~tlb_cntx0_cmp_d4) | (tlb_cntx0_cmp_d4 & (exp_cntx0_hit_d4 == lsu_mbi_tlb_ctxt0_hit));
2147 assign dtlb_mhit_pass = (~tlb_hit_cmp_d4) | (tlb_hit_cmp_d4 & (exp_tlb_mhit_d4 == lsu_mbi_tlb_cam_mhit));
2148 assign dtlb_valid_pass = (~cam_valid_cmp_d4) | (cam_valid_cmp_d4 & (exp_valid_d4 == lsu_mbi_tlb_valid));
2149 assign dtlb_used_pass = (~cam_used_cmp_d4) | (cam_used_cmp_d4 & (exp_used_d4 == lsu_mbi_tlb_used));
2150 assign dtlb_data_cmp_pass = (~tlb_data_cmp_d4) | (tlb_data_cmp_d4 & (exp_data_cmp_d4 == lsu_mbi_tlb_data_cmp));
2151
2152 assign cbist_dtlb_cam_fail = ~(dtlb_cam_hit_pass &
2153 dtlb_cntx0_hit_pass &
2154 dtlb_mhit_pass &
2155 dtlb_valid_pass &
2156 dtlb_used_pass &
2157 dtlb_data_cmp_pass ) & cam_array_0_d4;
2158
2159
2160
2161
2162 assign itlb_cam_hit_pass = (~tlb_hit_cmp_d6) | (tlb_hit_cmp_d6 & (exp_cam_hit_d6 == ftu_mbi_tlb_cam_hit));
2163 assign itlb_cntx0_hit_pass = (~tlb_cntx0_cmp_d6) | (tlb_cntx0_cmp_d6 & (exp_cntx0_hit_d6 == ftu_mbi_tlb_ctxt0_hit));
2164 assign itlb_mhit_pass = (~tlb_hit_cmp_d6) | (tlb_hit_cmp_d6 & (exp_tlb_mhit_d6 == ftu_mbi_tlb_cam_mhit));
2165 assign itlb_valid_pass = (~cam_valid_cmp_d5) | (cam_valid_cmp_d5 & (exp_valid_d5 == ftu_mbi_tlb_valid));
2166 assign itlb_used_pass = (~cam_used_cmp_d5) | (cam_used_cmp_d5 & (exp_used_d5 == ftu_mbi_tlb_used));
2167 assign itlb_data_cmp_pass = (~tlb_data_cmp_d5) | (tlb_data_cmp_d5 & (exp_data_cmp_d5 == ftu_mbi_tlb_data_cmp));
2168
2169
2170 assign cbist_itlb_cam_fail = ~(itlb_cam_hit_pass &
2171 itlb_cntx0_hit_pass &
2172 itlb_mhit_pass &
2173 itlb_valid_pass &
2174 itlb_used_pass &
2175 itlb_data_cmp_pass ) & cam_array_1_d5;
2176
2177
2178
2179
2180 assign qual_cam[26:0]={cam_msb, // 1 27
2181 cam_array_sel[1:0], // 2 26
2182 cam_ctest[3:0], // 4 24
2183 cam_cseq[2:0], // 2 19
2184 cam_raw_addr[14:0], // 15 17
2185 cam_crw[1:0]}; // 2
2186
2187
2188
2189 assign cam_in[26:0]=((~cambist | ~cambist_d4) & run3) | reset_engine ? 27'b0:
2190 (cambist_d4 & run3) ? qual_cam[26:0]+27'h1:
2191 qual_cam[26:0];
2192
2193
2194
2195/////////////////////////////////////////////////////////////////////////////////
2196//
2197// Mbist fail signals
2198//
2199// /////////////////////////////////////////////////////////////////////////////
2200
2201//////////////////////////////////////////////////////////////////////////////
2202// Interface signal for cambist
2203//
2204//
2205//
2206//////////////////////////////////////////////////////////////////////////////
2207
2208
2209
2210spc_mb0_ctlmsff_ctl_macro__width_13 tlb_cam_intf_out (
2211 .scan_in(tlb_cam_intf_out_scanin),
2212 .scan_out(tlb_cam_intf_out_scanout),
2213 .l1clk( l1clk_pm1 ),
2214 .din ({ mbist_cambist_run ,
2215 mbist_cambist_shift ,
2216 mbist_dis_clr_ubit ,
2217 mbist_demap_type[1:0] ,
2218 mbist_init_to_zero ,
2219 mbist_stb_cam_en_pre ,
2220 mbist_ptag_data ,
2221 mbist_dtb_cam_en_pre ,
2222 mbist_dtb_demap_en ,
2223 mbist_itb_demap_en ,
2224 mbist_itb_cam_en_pre ,
2225 mbist_repl_write} ),
2226 .dout ({ mbi_cambist_run ,
2227 mbi_cambist_shift ,
2228 mbi_dis_clr_ubit ,
2229 mbi_demap_type[1:0] ,
2230 mbi_init_to_zero ,
2231 mbi_scm_cam_en_pre ,
2232 mbi_ptag_data ,
2233 mbi_dtb_cam_en_pre ,
2234 mbi_dtb_demap_en ,
2235 mbi_itb_demap_en ,
2236 mbi_itb_cam_en_pre ,
2237 mbi_repl_write} ),
2238 .siclk(siclk),
2239 .soclk(soclk));
2240
2241
2242
2243//////////////////////////////////////////////////////////////////////
2244/// cam comparator:
2245//////////////////////////////////////////////////////////////////////
2246
2247
2248
2249//assign cam_fail=~cam_pass;
2250
2251assign mbist_cambist_run=(cambist & ~cam_clear) | cam_msb;
2252assign mbist_cambist_shift=(stb_cam_bwk1_test | stb_cam_bwk2_test) ? 1'b0 : cam_shift;
2253assign mbist_init_to_zero=(stb_cam_bwk1_test | stb_cam_bwk2_test) ? 1'b0 : cam_zero;
2254assign mbist_repl_write=tlb_rpwr_en;
2255
2256
2257
2258// /////////////////////////////////////////////////////////////////////////////
2259//
2260// MBIST Control Register
2261//
2262// /////////////////////////////////////////////////////////////////////////////
2263// standard membist
2264// /////////////////////////////////////////////////////////////////////////////
2265// 0 1 2 3 4 5 6 7 8
2266// ^(W0);^(R0W1);^(R1W0);v(R0W1);v(R1W0);v(R0);^(W1W0*R1R0W0);v(W1);^(W0W1*R0R1W1);
2267//
2268// - there are 9 march elements in the engine
2269// march_0 - march_8 indicate which march element it's in
2270//
2271// - for each march element, there are write and read sequences and for some
2272// just write or just read
2273//
2274// - for each march element, it can move upaddr (0-max) or downaddr (max-0)
2275//
2276// march rw upaddr truedata
2277// --------------------------------------------------------------------------------
2278// - march_0 w 1 one_cycle_march rw_0 ^(W0)
2279// - march_1 rw 1 two_cycle_march rw_0 ^(R0W1)
2280// - march_2 rw 1 two_cycle_march rw_1 ^(R1W0)
2281// - march_3 rw 0 two_cycle_march rw_0 v(R0W1)
2282// - march_4 rw 0 two_cycle_march rw_1 v(R1W0)
2283// - march_5 r 0 one_cycle_march rw_0 v(R0)
2284// - march_6 wwrrw 1 five_cycle_march rw_1,3,4 ^(W1W0*R1R0W0)
2285// - march_7 w 0 one_cycle_march -- v(W1)
2286// - march_8 wwrrw 1 five_cycle_march rw_0,2 ^(W0W1*R0R1W1)
2287// mbist address:
2288// one_cycle_march : march_0 | march_5 | march_7
2289// five_cycle_march : march_6 | march_8
2290// two_cycle_march : ~(one_cycle_march | five_cycle_march)
2291
2292 ////////////////////////////////////////////////////////////////////////////////
2293 ////// user mode signals
2294
2295// the different between cntl_march and march is that march is before mux and
2296// and cntl_march is after mux
2297
2298// /////////////////////////////////////////////////////////////////////////////
2299//
2300// MBIST Control Register
2301//
2302// /////////////////////////////////////////////////////////////////////////////
2303// standard membist
2304// /////////////////////////////////////////////////////////////////////////////
2305// 0 1 2 3 4 5 6 7 8
2306// ^(W0);^(R0W1);^(R1W0);v(R0W1);v(R1W0);v(R0);^(W1W0*R1R0W0);v(W1);^(W0W1*R0R1W1);
2307//
2308// - there are 9 march elements in the engine
2309// march_0 - march_8 indicate which march element it's in
2310//
2311// - for each march element, there are write and read sequences and for some
2312// just write or just read
2313//
2314// - for each march element, it can move upaddr (0-max) or downaddr (max-0)
2315//
2316// march rw upaddr truedata
2317// --------------------------------------------------------------------------------
2318// - march_0 w 1 one_cycle_march rw_0 ^(W0)
2319// - march_1 rw 1 two_cycle_march rw_0 ^(R0W1)
2320// - march_2 rw 1 two_cycle_march rw_1 ^(R1W0)
2321// - march_3 rw 0 two_cycle_march rw_0 v(R0W1)
2322// - march_4 rw 0 two_cycle_march rw_1 v(R1W0)
2323// - march_5 r 0 one_cycle_march rw_0 v(R0)
2324// - march_6 wwrrw 1 five_cycle_march rw_1,3,4 ^(W1W0*R1R0W0)
2325// - march_7 w 0 one_cycle_march -- v(W1)
2326// - march_8 wwrrw 1 five_cycle_march rw_0,2 ^(W0W1*R0R1W1)
2327// mbist address:
2328// one_cycle_march : march_0 | march_5 | march_7
2329// five_cycle_march : march_6 | march_8
2330// two_cycle_march : ~(one_cycle_march | five_cycle_march)
2331
2332 ////////////////////////////////////////////////////////////////////////////////
2333 ////// user mode signals
2334
2335// the different between cntl_march and march is that march is before mux and
2336// and cntl_march is after mux
2337
2338//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2339//////////////////////////////////// ////////////////////////////////////
2340// CONTROL REG:
2341//////////////////////////////////// ////////////////////////////////////
2342
2343
2344 spc_mb0_ctlmsff_ctl_macro__width_28 cntl_reg (
2345 .scan_in(cntl_reg_scanin),
2346 .scan_out(cntl_reg_scanout),
2347 .l1clk ( l1clk_pm1 ),
2348 .din ({cntl_in[34:19] ,cntl_in[11:0]} ),
2349 .dout ({cntl_out[34:19],cntl_out[11:0]} ),
2350 .siclk(siclk),
2351 .soclk(soclk));
2352
2353
2354 assign cntl_in[34:19] = reset_engine ? {16'b00000_0000000000}:
2355 ~run3 | cambist ? cntl_algr[15:0]:
2356 next_algr[15:0];
2357
2358
2359 // reset_engine run3 overflow cout_rw output
2360 // ---------------------------------------------------------
2361 // 1 x x x start_addr
2362 // 0 0 x x cntl_addr
2363 // 0 1 1 x restart_addr
2364 // 0 1 0 1 incred_addr
2365 // 0 1 0 0 cntl_addr
2366
2367
2368 assign sel_nextaddr_reset = reset_engine;
2369 assign sel_nextaddr_restart = ~reset_engine & run3 & overflow;
2370 assign sel_nextaddr_incred = ~reset_engine & run3 & ~overflow & cout_rw & ~cambist;
2371 assign sel_nextaddr_same = ~(sel_nextaddr_reset | sel_nextaddr_restart | sel_nextaddr_incred) | cambist;
2372
2373 assign cntl_in[11:3] = ({9{sel_nextaddr_reset}} & start_addr[8:0]) |
2374 ({9{sel_nextaddr_restart}} & restart_addr[8:0]) |
2375 ({9{sel_nextaddr_incred}} & incred_addr[8:0]) |
2376 ({9{sel_nextaddr_same}} & cntl_addr[8:0]);
2377
2378
2379
2380 assign cntl_in[2:0] = reset_engine ? 3'b000 :
2381 (~run3 | cambist) ? cntl_rw[2:0]:
2382 next_rw[2:0];
2383
2384
2385
2386//////////////////////////////////// ////////////////////////////////////
2387// NEXT ALGR
2388//////////////////////////////////// ////////////////////////////////////
2389
2390 // msb
2391 assign cntl_msb = start_in & cntl_out[34]; // done selection
2392
2393
2394 assign cntl_bisi = mb_default_bisi | mb_user_bisi_rw_mode ? cntl_out[33] :
2395 1'b1;
2396
2397 // array
2398 assign cntl_array_sel[3:0] = (last_array | user_mode) ? 4'b1111:
2399 cntl_out[32:29]; // array selection
2400 // cmp
2401 assign cntl_cmp_sel[2:0] = sel_cmp_pass ? {3'b111} :
2402 cntl_out[28:26];
2403
2404 // data
2405 assign cntl_data_sel[1:0] = (bisi_mode | mb_user_data_mode) ? 2'b11 : cntl_out[25:24]; // data selection
2406
2407 // address mix
2408 assign cntl_addr_mix = (bisi_mode | mb_user_addr_mode) ? 1'b1 : cntl_out[23]; // address mix
2409 assign addr_mix = (bisi_mode | mb_user_addr_mode) ? 1'b0 : cntl_out[23];
2410
2411 assign cntl_march_element[3:0] = sel_march_1_pass ? 4'b1111:
2412 cntl_out[22:19]; // march element
2413
2414
2415 assign cntl_algr[15:0] = {cntl_msb,
2416 cntl_bisi,
2417 cntl_array_sel[3:0],
2418 cntl_cmp_sel[2:0],
2419 cntl_data_sel[1:0],
2420 cntl_addr_mix,
2421 cntl_march_element[3:0]};
2422
2423 assign next_algr[15:0] = cout_addr ? cntl_algr[15:0] + 16'h1 : cntl_algr[15:0]; // mbist control
2424
2425
2426
2427//////////////////////////////////// ////////////////////////////////////
2428// NEXT ADDR
2429//////////////////////////////////// ////////////////////////////////////
2430
2431
2432 /////////////////////////
2433 // address engine
2434 /////////////////////////
2435
2436
2437 assign upaddr = march_0 | march_1 | march_2 | march_6 | march_7 | bisi_mode ;
2438
2439
2440 assign march_element_pre[3:0]=next_algr[3:0];
2441
2442 assign march_pre_0 = march_element_pre[3:0]==4'h0;
2443 assign march_pre_1 = march_element_pre[3:0]==4'h1;
2444 assign march_pre_2 = march_element_pre[3:0]==4'h2;
2445 assign march_pre_6 = march_element_pre[3:0]==4'h6;
2446 assign march_pre_7 = march_element_pre[3:0]==4'h7;
2447
2448 assign upaddr_pre = march_pre_0 | march_pre_1 | march_pre_2 | march_pre_6 | march_pre_7;
2449
2450
2451 assign incr_addr[8:0] = mb_user_addr_mode ? user_incr_addr[8:0] : 9'b000000001;
2452
2453 assign start_addr[8:0] = mb_user_addr_mode ? user_start_addr[8:0] : 9'b000000000;
2454
2455
2456// assign next_addr_out[8:0] = cout_rw ? cntl_addr[8:0] + incr_addr[8:0] : cntl_addr[8:0]; // next address
2457
2458
2459 assign incred_addr[8:0] = cntl_addr[8:0] + incr_addr[8:0];
2460
2461
2462 assign overflow = upaddr ? ( cntl_addr[8:0] == stop_addr[8:0]) & (cntl_rw[2:0]==3'b111):
2463 (~cntl_addr[8:0] == start_addr[8:0]) & (cntl_rw[2:0]==3'b111);
2464
2465
2466// assign next_addr[8:0]= overflow ? restart_addr[8:0] : next_addr_out[8:0];
2467
2468 assign restart_addr[8:0] = upaddr_pre ? start_addr[8:0] : ~stop_addr[8:0];
2469
2470 assign cout_addr = overflow;
2471
2472
2473
2474//////////////////////////////////// ////////////////////////////////////
2475// NEXT RW
2476//////////////////////////////////// ////////////////////////////////////
2477
2478
2479 assign cntl_rw[2:0] = sel_rw_pass ? 3'b111:
2480 cntl_out[ 2: 0]; // read write control
2481
2482 assign next_rw[2:0] = cntl_rw[2:0]+3'b001 ;
2483
2484 assign cout_rw = &cntl_rw[2:0]; // carry over for rw
2485
2486
2487
2488//////////////////////////////////// ////////////////////////////////////
2489// MBIST CONTROL SIGNAL
2490// - mem_wr
2491//////////////////////////////////// ////////////////////////////////////
2492
2493
2494 assign one_cycle_march = march_0 | march_5 | march_7;
2495 assign five_cycle_march = march_6 | march_8;
2496 assign two_cycle_march = ~(one_cycle_march | five_cycle_march);
2497
2498
2499 /////////////////////////
2500 // membist write enable
2501 /////////////////////////
2502
2503
2504 assign mem_wr_pbi = run3 & (
2505 march_0 |
2506 ((march_1 | march_2 | march_3 | march_4 ) & rw_1) |
2507 (march_6 & (rw_0 | rw_1 | rw_4)) |
2508 march_7 |
2509 (march_8 & (rw_0 | rw_1 | rw_4))
2510 );
2511
2512 assign mem_wr = bisi_wr_mode ? 1'b1 :
2513 bisi_rd_mode ? 1'b0 :
2514 mem_wr_pbi;
2515 /////////////////////////
2516 // membist read enable
2517 /////////////////////////
2518
2519
2520
2521 assign mem_rd_pbi = run3 & ~mem_wr;
2522
2523 assign mem_rd= bisi_rd_mode ? 1'b1 : mem_rd_pbi;
2524 /////////////////////
2525 // membist address:
2526 ////////////////////
2527
2528 assign cntl_addr[8:0] = cntl_out[11:3];
2529
2530 assign adj_addr = (five_cycle_march & (rw_1 | rw_3)) ? {cntl_addr[8:1],~cntl_addr[0]}:
2531 cntl_addr[8:0] ;
2532
2533 assign mem_addr1[8:0] = upaddr ? adj_addr[8:0]: ~adj_addr[8:0];
2534
2535
2536
2537 /////////////////////
2538 // true data
2539 ////////////////////
2540
2541 assign true_data_l = bisi_mode |
2542 march_0 |
2543 (march_1 & rw_0) |
2544 (march_2 & rw_1) |
2545 (march_3 & rw_0) |
2546 (march_4 & rw_1) |
2547 (march_5) |
2548 (march_6 & (rw_1 | rw_3 | rw_4)) |
2549 (march_8 & (rw_0 | rw_2));
2550
2551 assign true_data=~true_data_l;
2552
2553 /////////////////////
2554 // membist data:
2555 ////////////////////
2556
2557 assign data_pat_sel[7:0] = (mb_user_data_mode & bisi_mode) ? ~user_data[7:0]:
2558 (mb_user_data_mode) ? user_data[7:0]:
2559 bisi_mode ? 8'hFF:
2560 (cntl_data_sel[1:0] == 2'h0) ? 8'hAA:
2561 (cntl_data_sel[1:0] == 2'h1) ? 8'h99:
2562 (cntl_data_sel[1:0] == 2'h2) ? 8'hCC:
2563 8'h00;
2564 assign mem_data[7:0] = true_data ? data_pat_sel[7:0] : ~data_pat_sel[7:0];
2565
2566
2567//////////////////////////////////// ////////////////////////////////////
2568// STOP ADDR
2569//////////////////////////////////// ////////////////////////////////////
2570
2571
2572 assign stop_addr[8:0] = mb_user_addr_mode ? user_stop_addr[8:0] :
2573 // 8_7654_3210
2574 array_01 ? 9'b1_1111_1111: // ict
2575 array_02 ? 9'b1_1111_1111: // icd
2576 array_03 ? 9'b0_0001_1111: // icv
2577 array_04 ? 9'b0_0011_1111: // itb
2578 array_05 ? 9'b1_1111_1111: // dca
2579 array_06 ? 9'b1_1111_1111: // dta
2580 array_07 ? 9'b0_0001_1111: // dva
2581 array_08 ? 9'b0_0111_1111: // dtlb
2582 array_09 ? 9'b0_0001_1111: // cpq
2583 array_10 ? 9'b0_0011_1111: // stbcam
2584 array_11 ? 9'b0_0011_1111: // stbram
2585 array_12 ? 9'b0_0111_1111: // lru
2586 9'b1_1111_1111;
2587
2588
2589//////////////////////////////////// ////////////////////////////////////
2590// ADDR MIX
2591//////////////////////////////////// ////////////////////////////////////
2592
2593
2594 assign mem_addr_mix0[8:0] = (array_06) ? { mem_addr1[8:7],mem_addr1[5:0],mem_addr1[6]} : // DTA fixed
2595 mem_addr1[8:0];
2596
2597
2598 assign mem_addr_mix1[8:0] = (array_01) ? { mem_addr1[2:0],mem_addr1[8:3]} : // ICT fixed circuit
2599 (array_02) ? { mem_addr1[2:0],mem_addr1[8:3]} : // ICD fixed circuit
2600 (array_03) ? { mem_addr1[8:5],mem_addr1[3:0],mem_addr1[4]} : // ICV
2601 (array_04) ? { mem_addr1[8:6],mem_addr1[4:0],mem_addr1[5]} : // ITLB
2602 (array_05) ? { mem_addr1[1:0],mem_addr1[8:2]} : // DCA fixed circuit
2603 (array_06) ? { mem_addr1[2:1],mem_addr1[8:3],mem_addr1[0]} : // DTA fixed circuit
2604 (array_07) ? { mem_addr1[8:5],mem_addr1[3:0],mem_addr1[4]} : // DVA
2605 (array_08) ? { mem_addr1[8:7],mem_addr1[5:0],mem_addr1[6]} : // DTLB
2606 (array_09) ? { mem_addr1[8:5],mem_addr1[0],mem_addr1[4:1]} : // CPQ
2607 (array_10) ? { mem_addr1[8:6],mem_addr1[2:0],mem_addr1[5:3]} : // STBCAM
2608 (array_11) ? { mem_addr1[8:6],mem_addr1[1:0],mem_addr1[5:2]} : // STBRAM
2609 (array_12) ? { mem_addr1[8:5],mem_addr1[0],mem_addr1[4:1]} : // LRU
2610 mem_addr1[8:0];
2611
2612
2613
2614 assign mem_addr[8:0] = addr_mix ? mem_addr_mix1[8:0] : mem_addr_mix0[8:0];
2615
2616//////////////////////////////////// ////////////////////////////////////
2617// SEQ selection
2618//////////////////////////////////// ////////////////////////////////////
2619
2620 // array
2621
2622 assign array_01 = array_sel[3:0]==4'h0 & (~cambist & run3);
2623 assign array_02 = array_sel[3:0]==4'h1 & (~cambist & run3);
2624 assign array_03 = array_sel[3:0]==4'h2 & (~cambist & run3);
2625 assign array_04 = array_sel[3:0]==4'h3 & (~cambist & run3);
2626 assign array_05 = array_sel[3:0]==4'h4 & (~cambist & run3);
2627 assign array_06 = array_sel[3:0]==4'h5 & (~cambist & run3);
2628 assign array_07 = array_sel[3:0]==4'h6 & (~cambist & run3);
2629 assign array_08 = array_sel[3:0]==4'h7 & (~cambist & run3);
2630 assign array_09 = array_sel[3:0]==4'h8 & (~cambist & run3);
2631 assign array_10 = array_sel[3:0]==4'h9 & (~cambist & run3);
2632 assign array_11 = array_sel[3:0]==4'hA & (~cambist & run3);
2633 assign array_12 = array_sel[3:0]==4'hB & (~cambist & run3);
2634
2635
2636 assign last_array= array_12;
2637
2638 // cmp
2639 assign cmp_0 = cmp_sel[2:0]==3'b000;
2640 assign cmp_1 = cmp_sel[2:0]==3'b001;
2641 assign cmp_2 = cmp_sel[2:0]==3'b010;
2642 assign cmp_3 = cmp_sel[2:0]==3'b011;
2643// assign cmp_4 = cmp_sel[2:0]==3'b100;
2644// assign cmp_5 = cmp_sel[2:0]==3'b101;
2645// assign cmp_6 = cmp_sel[2:0]==3'b110;
2646 assign cmp_7 = cmp_sel[2:0]==3'b111;
2647
2648 // march
2649
2650 assign march_0 = (march_element[3:0]==4'h0);
2651 assign march_1 = (march_element[3:0]==4'h1);
2652 assign march_2 = (march_element[3:0]==4'h2);
2653 assign march_3 = (march_element[3:0]==4'h3);
2654 assign march_4 = (march_element[3:0]==4'h4);
2655 assign march_5 = (march_element[3:0]==4'h5);
2656 assign march_6 = (march_element[3:0]==4'h6);
2657 assign march_7 = (march_element[3:0]==4'h7);
2658 assign march_8 = (march_element[3:0]==4'h8);
2659
2660 // rw
2661
2662 assign rw_0 = (rw[2:0]==3'b000);
2663 assign rw_1 = (rw[2:0]==3'b001);
2664 assign rw_2 = (rw[2:0]==3'b010);
2665 assign rw_3 = (rw[2:0]==3'b011);
2666 assign rw_4 = (rw[2:0]==3'b100);
2667// assign rw_5 = (rw[2:0]==3'b101);
2668// assign rw_6 = (rw[2:0]==3'b110);
2669// assign rw_7 = (rw[2:0]==3'b111);
2670
2671
2672//////////////////////////////////// ////////////////////////////////////
2673// SEQ logic
2674//////////////////////////////////// ////////////////////////////////////
2675
2676
2677 // cam sel logic
2678
2679 assign cam_sel_cntl_out[1:0]=cam_out[25:24];
2680
2681
2682 assign cam_sel[1:0]= mb_user_cam_mode ? user_cam_sel[1:0] :
2683 cam_sel_cntl_out[1:0];
2684
2685
2686 // ctest logic
2687
2688 assign ctest_cntl_out[3:0]=cam_out[23:20];
2689
2690
2691 spc_mb0_ctlmsff_ctl_macro__width_4 ctest_reg (
2692 .scan_in(ctest_reg_scanin),
2693 .scan_out(ctest_reg_scanout),
2694 .l1clk ( l1clk_pm1 ),
2695 .din ( ctest[3:0] ),
2696 .dout ( ctest_out[3:0] ),
2697 .siclk(siclk),
2698 .soclk(soclk));
2699
2700 assign ctest[3:0]=(&ctest_cntl_out[3:0]) ? ctest_out[3:0] :
2701 mb_user_cam_mode ? user_cam_test_sel[3:0] :
2702 ctest_cntl_out[3:0];
2703
2704
2705 // cseq
2706
2707
2708 assign cseq_cntl_out[2:0]=cam_out[19:17];
2709
2710
2711 spc_mb0_ctlmsff_ctl_macro__width_3 cseq_reg (
2712 .scan_in(cseq_reg_scanin),
2713 .scan_out(cseq_reg_scanout),
2714 .l1clk ( l1clk_pm1 ),
2715 .din ( cseq[2:0] ),
2716 .dout ( cseq_out[2:0] ),
2717 .siclk(siclk),
2718 .soclk(soclk));
2719
2720 assign cseq[2:0]=(&cseq_cntl_out[2:0]) ? cseq_out[2:0] :
2721 cseq_cntl_out[2:0];
2722
2723
2724
2725 assign crw[1:0]=cam_out[1:0];
2726
2727
2728 // array logic
2729
2730 assign array_sel_cntl_out[3:0]=cntl_out[32:29];
2731
2732
2733 spc_mb0_ctlmsff_ctl_macro__width_4 array_sel_reg (
2734 .scan_in(array_sel_reg_scanin),
2735 .scan_out(array_sel_reg_scanout),
2736 .l1clk ( l1clk_pm1 ),
2737 .din ( array_sel[3:0] ),
2738 .dout ( array_sel_out[3:0] ),
2739 .siclk(siclk),
2740 .soclk(soclk));
2741
2742 assign array_sel[3:0]=(&array_sel_cntl_out[3:0]) ? array_sel_out[3:0] :
2743 user_mode ? user_array[3:0] :
2744 array_sel_cntl_out[3:0];
2745
2746
2747
2748 // cmp logic
2749
2750 assign cmp_sel_cntl_out[2:0] = cntl_out[28:26];
2751
2752 spc_mb0_ctlmsff_ctl_macro__width_3 cmp_sel_reg (
2753 .scan_in(cmp_sel_reg_scanin),
2754 .scan_out(cmp_sel_reg_scanout),
2755 .l1clk ( l1clk_pm1 ),
2756 .din ( cmp_sel[2:0] ),
2757 .dout ( cmp_sel_out[2:0] ),
2758 .siclk(siclk),
2759 .soclk(soclk));
2760
2761 assign cmp_sel[2:0]= (&cmp_sel_cntl_out[2:0] & ~array_02) | bisi_wr_mode ? cmp_sel_out[2:0] :
2762 mb_user_cmpselinc_hold ? user_cmpsel[2:0] :
2763 cmp_sel_cntl_out[2:0];
2764
2765
2766 // march logic
2767
2768 assign march_element_cntl_out[3:0]=cntl_out[22:19];
2769
2770
2771 spc_mb0_ctlmsff_ctl_macro__width_4 marche_element_reg (
2772 .scan_in(marche_element_reg_scanin),
2773 .scan_out(marche_element_reg_scanout),
2774 .l1clk ( l1clk_pm1 ),
2775 .din ( march_element[3:0] ),
2776 .dout ( march_element_out ),
2777 .siclk(siclk),
2778 .soclk(soclk));
2779
2780 assign march_element[3:0]=(&march_element_cntl_out[3:0]) ? march_element_out[3:0] :
2781 march_element_cntl_out[3:0];
2782
2783
2784 // rw
2785 assign rw[2:0]=cntl_out[2:0];
2786
2787
2788
2789//////////////////////////////////////////////////////////////////
2790// SEL_PASS LOGIC
2791//////////////////////////////////////////////////////////////////
2792 // sel_ctest_pass
2793 assign sel_ctest_pass=(cam_array_0 & ctest13) |
2794 (cam_array_1 & ctest13) |
2795 (cam_array_2 & ctest10) |
2796 (cam_clear & ctest00) ;
2797
2798
2799 // sel_cseq_pass
2800
2801 assign sel_cseq_pass=(tlb_cam_gen_test & cseq1) | // cseq0, cseq1
2802 (tlb_cam_dmap_test & cseq2) | // cseq0, cseq1, cseq2
2803 (tlb_cam_dmap2_test & cseq2) | // cseq0, cseq1, cseq2
2804 (tlb_cam_walk1_test & cseq2) | // cseq0, cseq1, cseq2
2805 (tlb_cam_mhit_test & cseq1) | // cseq0, cseq1, cseq2
2806 (tlb_cam_rpwr_test & cseq4) | // cseq0, cseq1, cseq2
2807 (stb_cam_gen_test & cseq1) | // cseq0, cseq1, cseq2
2808 (stb_cam_pwk1_test & cseq1) | // cseq0, cseq1, cseq2
2809 (stb_cam_bwk1_test & cseq1) | // cseq0, cseq1, cseq2
2810 (stb_cam_bwk2_test & cseq1) | // cseq0, cseq1, cseq2
2811 (stb_cam_mhit_test & cseq1) | // cseq0, cseq1, cseq2
2812 (cam_clear & cseq1) ; // cseq0, cseq1, cseq2
2813
2814
2815 // sel_crw_pass
2816
2817 assign sel_crw_pass= (tlb_cam_gen_test & cseq0 & crw0) |
2818 (tlb_cam_dmap_test & (cseq0 | cseq1 | cseq2) & crw0) |
2819 (tlb_cam_dmap2_test & (cseq0 | cseq2 ) & crw0) |
2820 (tlb_cam_dmap2_test & (cseq1 ) & crw3) |
2821 (tlb_cam_walk1_test & crw0) |
2822 (tlb_cam_mhit_test & cseq0 & crw0) |
2823 (tlb_cam_mhit_test & cseq1 & crw3) |
2824// (tlb_cam_mhit_test & cseq2 & crw0) |
2825 (tlb_cam_rpwr_test & cseq0 & crw0) |
2826 (tlb_cam_rpwr_test & cseq1 & crw1) |
2827 (tlb_cam_rpwr_test & cseq2 & crw0) |
2828 (tlb_cam_rpwr_test & cseq3 & crw1) |
2829 (tlb_cam_rpwr_test & cseq4 & crw3) |
2830 (stb_cam_gen_test & cseq0 & crw0) |
2831 (stb_cam_gen_test & ~ctest09 & cseq1 & crw2) |
2832 (stb_cam_gen_test & ctest09 & cseq1 & crw1) |
2833 (stb_cam_pwk1_test & cseq0 & crw0) |
2834 (stb_cam_pwk1_test & cseq1 & crw0) |
2835 (stb_cam_bwk1_test & cseq0 & crw0) |
2836 (stb_cam_bwk1_test & cseq1 & crw0) |
2837 (stb_cam_bwk2_test & cseq0 & crw0) |
2838 (stb_cam_bwk2_test & cseq1 & crw2) |
2839 (stb_cam_mhit_test & cseq0) |
2840// (stb_cam_mhit_test & cseq2 & crw0) |
2841 (stb_cam_mhit_test & cseq1 & cseq3) |
2842 (cam_clear & (cseq0 | cseq1)) ;
2843
2844
2845
2846 // march
2847 assign sel_march_1_pass = bisi_mode | (mb_ten_n_mode & march_5) | march_8;
2848
2849 // cmp
2850
2851 assign bisi_wr_mode = mb_default_bisi | mb_user_bisi_rw_mode ? ~cntl_bisi & run3 :
2852 mb_user_bisi_wr_mode & run3;
2853
2854 assign bisi_rd_mode =mb_default_bisi | mb_user_bisi_rw_mode ? cntl_bisi & run3 :
2855 mb_user_bisi_rd_mode & run3;
2856
2857
2858 assign sel_cmp_pass= (mb_user_cmpselinc_hold | bisi_wr_mode) |
2859 (array_01 & cmp_0) | //
2860 (array_02 & cmp_7) | // icd 8
2861 (array_03 & cmp_0) | //
2862 (array_04 & cmp_3) | // itb 4
2863 (array_05 & cmp_1) | // dca 2
2864 (array_06 & cmp_0) | //
2865 (array_07 & cmp_0) | //
2866 (array_08 & cmp_1) | // dtb 2
2867 (array_09 & cmp_1) | // cpq 2
2868 (array_10 & cmp_0) | //
2869 (array_11 & cmp_2) | // stbram 3
2870 (array_12 & cmp_0) ;
2871
2872
2873
2874
2875 // rw
2876 assign sel_rw_1_pass = bisi_mode | one_cycle_march ;
2877
2878 assign sel_rw_2_pass = two_cycle_march;
2879 assign sel_rw_5_pass = five_cycle_march;
2880
2881 assign sel_rw_pass = (run3 & sel_rw_1_pass & rw_0) |
2882 (run3 & sel_rw_2_pass & rw_1) |
2883 (run3 & sel_rw_5_pass & rw_4) ;
2884
2885
2886
2887
2888
2889
2890//////////////////////////////////// ////////////////////////////////////
2891// membist control assignment
2892//////////////////////////////////// ////////////////////////////////////
2893
2894
2895 assign mb_cmp_sel[2:0] = cmp_sel[2:0];
2896
2897 assign mb_addr[8:0]=cambist ? {2'b00,tlb_stb_addr[6:0]}: mem_addr[8:0]; // ??
2898 assign mb_write_data[7:0]= cambist ? cam_data[7:0] : mem_data[7:0];
2899
2900
2901 // only one array read signal should be active
2902
2903 assign mb_array_01_rd = array_01 & mem_rd;
2904 assign mb_array_02_rd = array_02 & mem_rd;
2905 assign mb_array_03_rd = array_03 & mem_rd;
2906 assign mb_array_04_rd = (array_04 & mem_rd) | (cam_array_1 & cam_rd_en);
2907 assign mb_array_05_rd = array_05 & mem_rd;
2908 assign mb_array_06_rd = array_06 & mem_rd;
2909 assign mb_array_07_rd = array_07 & mem_rd;
2910 assign mb_array_08_rd = (array_08 & mem_rd) | (cam_array_0 & cam_rd_en);
2911 assign mb_array_09_rd = array_09 & mem_rd;
2912 assign mb_array_10_rd= array_10 & mem_rd;
2913 assign mb_array_11_rd= array_11 & mem_rd;
2914 assign mb_array_12_rd= array_12 & mem_rd;
2915
2916 // only one array write signal should be active
2917
2918 assign mb_array_01_wr = array_01 & mem_wr;
2919 assign mb_array_02_wr = array_02 & mem_wr;
2920 assign mb_array_03_wr = array_03 & mem_wr;
2921 assign mb_array_04_wr =(array_04 & mem_wr) | ((cam_array_1 | cam_clear) & cam_wr_en);
2922 assign mb_array_05_wr = array_05 & mem_wr;
2923 assign mb_array_06_wr = array_06 & mem_wr;
2924 assign mb_array_07_wr = array_07 & mem_wr;
2925 assign mb_array_08_wr =(array_08 & mem_wr) | ((cam_array_0 | cam_clear) & cam_wr_en);
2926 assign mb_array_09_wr = array_09 & mem_wr;
2927 assign mb_array_10_wr =(array_10 & mem_wr) | ((cam_array_2 | cam_clear) & cam_wr_en);
2928 assign mb_array_11_wr = array_11 & mem_wr;
2929 assign mb_array_12_wr = array_12 & mem_wr;
2930
2931
2932 assign mb_run = run;
2933
2934
2935
2936 //////////////////////////////////// ////////////////////////////////////
2937 // DONE LOGIC
2938 //////////////////////////////////// ////////////////////////////////////
2939
2940
2941
2942 spc_mb0_ctlmsff_ctl_macro__width_1 msb_latch (
2943 .scan_in(msb_latch_scanin),
2944 .scan_out(msb_latch_scanout),
2945 .l1clk ( l1clk_pm1 ),
2946 .din ( msb_in ),
2947 .dout ( msb_out ),
2948 .siclk(siclk),
2949 .soclk(soclk));
2950
2951 assign msb_in= (~start_in ) | (mb_user_loop_mode & mb_done) ? 1'b0 :
2952 (cntl_msb | cam_msb) ? 1'b1 :
2953 msb_out;
2954
2955 assign stop_engine_l = ~start_in ? 1'b0 :
2956 mb_user_cam_mode ? cam_msb :
2957 mb_user_loop_mode ? cntl_msb :
2958 (mb_user_ram_mode | bisi_mode) ? cntl_msb :
2959 cam_msb;
2960
2961 assign mb_done= ~start_in ? 1'b0 :
2962 bisi_mode | mb_user_loop_mode | mb_user_ram_mode ? msb_out & (done_delay[4:0]==5'b11110):
2963 cam_msb & (done_delay[4:0]==5'b11110) ;
2964
2965 assign run3 = &done_delay[4:1] & ~stop_engine_l & start_in;
2966
2967
2968 spc_mb0_ctlmsff_ctl_macro__width_1 run3_transition_reg (
2969 .scan_in(run3_transition_reg_scanin),
2970 .scan_out(run3_transition_reg_scanout),
2971 .l1clk ( l1clk_pm1 ),
2972 .din ( run3 ),
2973 .dout ( run3_out ),
2974 .siclk(siclk),
2975 .soclk(soclk));
2976
2977 assign run3_transition = run3 & ~run3_out;
2978
2979 spc_mb0_ctlmsff_ctl_macro__width_5 done_delay_reg (
2980 .scan_in(done_delay_reg_scanin),
2981 .scan_out(done_delay_reg_scanout),
2982 .l1clk ( l1clk_pm1 ),
2983 .din ( done_delay_in[4:0] ),
2984 .dout ( done_delay[4:0] ),
2985 .siclk(siclk),
2986 .soclk(soclk));
2987
2988
2989 assign done_delay_in[4:0] = ~start_in ? 5'b00000 :
2990 run3 ? 5'b11111 :
2991 mb_done ? 5'b11110 :
2992 (run & ~run3) ? done_delay[4:0] + 5'b00001 :
2993 5'b00000;
2994
2995
2996
2997
2998//////////////////////////////////// ////////////////////////////////////
2999// FAIL LOGIC
3000//////////////////////////////////// ////////////////////////////////////
3001
3002
3003
3004
3005assign dca_fail = run3_transition ? 1'b0 : (lsu_mbi_dca_fail | lsu_mbi_dca_fail_sticky);
3006assign dta_fail = run3_transition ? 1'b0 : (lsu_mbi_dta_fail | lsu_mbi_dta_fail_sticky);
3007assign dva_fail = run3_transition ? 1'b0 : (lsu_mbi_dva_fail | lsu_mbi_dva_fail_sticky);
3008assign lru_fail = run3_transition ? 1'b0 : (lsu_mbi_lru_fail | lsu_mbi_lru_fail_sticky);
3009assign dtb_fail = run3_transition ? 1'b0 : (lsu_mbi_dtb_fail | lsu_mbi_dtb_fail_sticky);
3010assign stb_cam_fail = run3_transition ? 1'b0 : (lsu_mbi_stb_cam_fail | lsu_mbi_stb_cam_fail_sticky);
3011assign stb_ram_fail = run3_transition ? 1'b0 : (lsu_mbi_stb_ram_fail | lsu_mbi_stb_ram_fail_sticky);
3012assign cpq_fail = run3_transition ? 1'b0 : (lsu_mbi_cpq_fail | lsu_mbi_cpq_fail_sticky);
3013assign ict_fail = run3_transition ? 1'b0 : (ftu_mbi_ict_fail | ftu_mbi_ict_fail_sticky);
3014assign icd_fail = run3_transition ? 1'b0 : (ftu_mbi_icd_fail | ftu_mbi_icd_fail_sticky);
3015assign itb_fail = run3_transition ? 1'b0 : (ftu_mbi_itb_fail | ftu_mbi_itb_fail_sticky);
3016assign icv_fail = run3_transition ? 1'b0 : (ftu_mbi_icv_fail | ftu_mbi_icv_fail_sticky);
3017
3018assign cbist_itlb_fail = run3_transition ? 1'b0 : (cbist_itlb_cam_fail | cbist_itlb_cam_fail_sticky);
3019assign cbist_dtlb_fail = run3_transition ? 1'b0 : (cbist_dtlb_cam_fail | cbist_dtlb_cam_fail_sticky);
3020assign cbist_stb_fail = run3_transition ? 1'b0 : (cbist_stb_cam_fail | cbist_stb_cam_fail_sticky);
3021
3022
3023
3024
3025spc_mb0_ctlmsff_ctl_macro__width_15 fail_reg (
3026 .scan_in(fail_reg_scanin),
3027 .scan_out(fail_reg_scanout),
3028 .l1clk( l1clk_pm1 ),
3029 .din ({dca_fail ,
3030 dta_fail ,
3031 dva_fail ,
3032 lru_fail ,
3033 dtb_fail ,
3034 stb_cam_fail ,
3035 stb_ram_fail ,
3036 cpq_fail ,
3037 ict_fail ,
3038 icd_fail ,
3039 itb_fail ,
3040 icv_fail,
3041 cbist_itlb_fail,
3042 cbist_dtlb_fail,
3043 cbist_stb_fail} ),
3044 .dout ({lsu_mbi_dca_fail_sticky ,
3045 lsu_mbi_dta_fail_sticky ,
3046 lsu_mbi_dva_fail_sticky ,
3047 lsu_mbi_lru_fail_sticky ,
3048 lsu_mbi_dtb_fail_sticky ,
3049 lsu_mbi_stb_cam_fail_sticky ,
3050 lsu_mbi_stb_ram_fail_sticky ,
3051 lsu_mbi_cpq_fail_sticky ,
3052 ftu_mbi_ict_fail_sticky ,
3053 ftu_mbi_icd_fail_sticky ,
3054 ftu_mbi_itb_fail_sticky ,
3055 ftu_mbi_icv_fail_sticky,
3056 cbist_itlb_cam_fail_sticky,
3057 cbist_dtlb_cam_fail_sticky,
3058 cbist_stb_cam_fail_sticky} ),
3059 .siclk(siclk),
3060 .soclk(soclk));
3061
3062
3063assign mbist_fail_array = lsu_mbi_dca_fail |
3064 lsu_mbi_dta_fail |
3065 lsu_mbi_dva_fail |
3066 lsu_mbi_lru_fail |
3067 lsu_mbi_dtb_fail |
3068 lsu_mbi_stb_cam_fail |
3069 lsu_mbi_stb_ram_fail |
3070 lsu_mbi_cpq_fail |
3071 ftu_mbi_ict_fail |
3072 ftu_mbi_icd_fail |
3073 ftu_mbi_itb_fail |
3074 ftu_mbi_icv_fail |
3075 cbist_itlb_cam_fail |
3076 cbist_dtlb_cam_fail |
3077 cbist_stb_cam_fail ;
3078
3079
3080assign mbist_fail_sticky = lsu_mbi_dca_fail_sticky |
3081 lsu_mbi_dta_fail_sticky |
3082 lsu_mbi_dva_fail_sticky |
3083 lsu_mbi_lru_fail_sticky |
3084 lsu_mbi_dtb_fail_sticky |
3085 lsu_mbi_stb_cam_fail_sticky |
3086 lsu_mbi_stb_ram_fail_sticky |
3087 lsu_mbi_cpq_fail_sticky |
3088 ftu_mbi_ict_fail_sticky |
3089 ftu_mbi_icd_fail_sticky |
3090 ftu_mbi_itb_fail_sticky |
3091 ftu_mbi_icv_fail_sticky |
3092 cbist_itlb_cam_fail_sticky |
3093 cbist_dtlb_cam_fail_sticky |
3094 cbist_stb_cam_fail_sticky ;
3095
3096
3097assign valid_fail=run3 | (stop_engine_l & ~mb_done);
3098assign mb_fail = mb_done ? (mbist_fail_sticky) : (mbist_fail_array & valid_fail);
3099
3100
3101//////////////////////////////////////////////////////////////////
3102// OUTPUT FLOP:
3103//////////////////////////////////////////////////////////////////
3104
3105// mb_done
3106
3107
3108spc_mb0_ctlmsff_ctl_macro__width_1 out_mb_tcu_done_reg (
3109 .scan_in(out_mb_tcu_done_reg_scanin),
3110 .scan_out(out_mb_tcu_done_reg_scanout),
3111 .l1clk ( l1clk_pm1 ),
3112 .din ( mb_done ),
3113 .dout ( mb_done_out ),
3114 .siclk(siclk),
3115 .soclk(soclk));
3116
3117
3118// mb_fail
3119
3120
3121spc_mb0_ctlmsff_ctl_macro__width_1 out_mb_tcu_fail_reg (
3122 .scan_in(out_mb_tcu_fail_reg_scanin),
3123 .scan_out(out_mb_tcu_fail_reg_scanout),
3124 .l1clk ( l1clk_pm1 ),
3125 .din ( mb_fail ),
3126 .dout ( mb_fail_out ),
3127 .siclk(siclk),
3128 .soclk(soclk));
3129
3130
3131
3132
3133// out cmpsel
3134
3135
3136spc_mb0_ctlmsff_ctl_macro__width_3 out_cmp_sel_reg (
3137 .scan_in(out_cmp_sel_reg_scanin),
3138 .scan_out(out_cmp_sel_reg_scanout),
3139 .l1clk( l1clk_pm1 ),
3140 .din ( mb_cmp_sel[2:0] ),
3141 .dout ( mb_cmpsel_out[2:0] ),
3142 .siclk(siclk),
3143 .soclk(soclk));
3144
3145
3146// thes are all the output flops to arrays
3147// for the following signals:
3148//
3149// - run
3150// - data
3151// - address
3152
3153
3154spc_mb0_ctlmsff_ctl_macro__width_1 out_run_mb_arrays_reg (
3155 .scan_in(out_run_mb_arrays_reg_scanin),
3156 .scan_out(out_run_mb_arrays_reg_scanout),
3157 .l1clk( l1clk_pm1 ),
3158 .din ( mb_run ),
3159 .dout ( mb_run_out ),
3160 .siclk(siclk),
3161 .soclk(soclk));
3162
3163// data 8 bits
3164
3165spc_mb0_ctlmsff_ctl_macro__width_8 out_data_mb_arrays_reg (
3166 .scan_in(out_data_mb_arrays_reg_scanin),
3167 .scan_out(out_data_mb_arrays_reg_scanout),
3168 .l1clk( l1clk_pm1 ),
3169 .din ( mb_write_data[7:0] ),
3170 .dout ( mb_write_data_out[7:0] ),
3171 .siclk(siclk),
3172 .soclk(soclk));
3173
3174
3175// address 16 bits
3176
3177
3178spc_mb0_ctlmsff_ctl_macro__width_9 out_addr_mb_arrays_reg (
3179 .scan_in(out_addr_mb_arrays_reg_scanin),
3180 .scan_out(out_addr_mb_arrays_reg_scanout),
3181 .l1clk( l1clk_pm1 ),
3182 .din ( mb_addr[8:0] ),
3183 .dout ( mb_addr_out[8:0] ),
3184 .siclk(siclk),
3185 .soclk(soclk));
3186
3187
3188
3189//
3190// write enable
3191
3192spc_mb0_ctlmsff_ctl_macro__width_12 out_wr_mb_arrays_reg (
3193 .scan_in(out_wr_mb_arrays_reg_scanin),
3194 .scan_out(out_wr_mb_arrays_reg_scanout),
3195 .l1clk( l1clk_pm1 ),
3196 .din ( {
3197 mb_array_01_wr,
3198 mb_array_02_wr,
3199 mb_array_03_wr,
3200 mb_array_04_wr,
3201 mb_array_05_wr,
3202 mb_array_06_wr,
3203 mb_array_07_wr,
3204 mb_array_08_wr,
3205 mb_array_09_wr,
3206 mb_array_10_wr,
3207 mb_array_11_wr,
3208 mb_array_12_wr
3209 } ),
3210 .dout ({
3211 mb_array_01_wr_out,
3212 mb_array_02_wr_out,
3213 mb_array_03_wr_out,
3214 mb_array_04_wr_out,
3215 mb_array_05_wr_out,
3216 mb_array_06_wr_out,
3217 mb_array_07_wr_out,
3218 mb_array_08_wr_out,
3219 mb_array_09_wr_out,
3220 mb_array_10_wr_out,
3221 mb_array_11_wr_out,
3222 mb_array_12_wr_out
3223 } ),
3224 .siclk(siclk),
3225 .soclk(soclk));
3226
3227
3228
3229// read enable
3230
3231spc_mb0_ctlmsff_ctl_macro__width_12 out_rd_mb_arrays_reg (
3232 .scan_in(out_rd_mb_arrays_reg_scanin),
3233 .scan_out(out_rd_mb_arrays_reg_scanout),
3234 .l1clk( l1clk_pm1 ),
3235 .din ( {
3236 mb_array_01_rd,
3237 mb_array_02_rd,
3238 mb_array_03_rd,
3239 mb_array_04_rd,
3240 mb_array_05_rd,
3241 mb_array_06_rd,
3242 mb_array_07_rd,
3243 mb_array_08_rd,
3244 mb_array_09_rd,
3245 mb_array_10_rd,
3246 mb_array_11_rd,
3247 mb_array_12_rd
3248 } ),
3249 .dout ({
3250 mb_array_01_rd_out,
3251 mb_array_02_rd_out,
3252 mb_array_03_rd_out,
3253 mb_array_04_rd_out,
3254 mb_array_05_rd_out,
3255 mb_array_06_rd_out,
3256 mb_array_07_rd_out,
3257 mb_array_08_rd_out,
3258 mb_array_09_rd_out,
3259 mb_array_10_rd_out,
3260 mb_array_11_rd_out,
3261 mb_array_12_rd_out
3262 } ),
3263 .siclk(siclk),
3264 .soclk(soclk));
3265
3266// merge fail and done signals:
3267
3268 spc_mb0_ctlmsff_ctl_macro__width_3 merged_fail (
3269 .scan_in(merged_fail_scanin),
3270 .scan_out(merged_fail_scanout),
3271 .l1clk ( l1clk_pm1 ),
3272 .din ( {mb1_mb0_fail,mb2_mb0_fail,mb_fail_merged} ),
3273 .dout ( {mb1_fail ,mb2_fail ,mb0_mbist_fail} ),
3274 .siclk(siclk),
3275 .soclk(soclk));
3276
3277 spc_mb0_ctlmsff_ctl_macro__width_3 merged_done (
3278 .scan_in(merged_done_scanin),
3279 .scan_out(merged_done_scanout),
3280 .l1clk ( l1clk_pm1 ),
3281 .din ( {mb1_mb0_done,mb2_mb0_done,mb_done_merged} ),
3282 .dout ( {mb1_done ,mb2_done ,mb0_done} ),
3283 .siclk(siclk),
3284 .soclk(soclk));
3285
3286
3287 assign mb_fail_merged=mb1_fail | mb2_fail | mb0_fail;
3288
3289 assign mb_done_merged= user_mode ? (mb1_done | mb2_done | mb_done_out) : (mb1_done & mb2_done & mb_done_out);
3290
3291
3292// port name re-assignment
3293
3294
3295 assign mb0_run =mb_run_out;
3296 assign mb0_write_data[7:0] =mb_write_data_out[7:0];
3297 assign mb0_addr[15:0] ={7'b0000000,mb_addr_out[8:0]};
3298 assign mb0_cmpsel[2:0] =mb_cmpsel_out[2:0];
3299 assign mb0_fail =mb_fail_out;
3300// assign mb0_done =mb_done_out;
3301
3302 assign mb0_ict_write_en =mb_array_01_wr_out;
3303 assign mb0_icd_write_en =mb_array_02_wr_out;
3304 assign mb0_icv_write_en =mb_array_03_wr_out;
3305 assign mb0_itb_write_en =mb_array_04_wr_out;
3306 assign mb0_dca_write_en =mb_array_05_wr_out;
3307 assign mb0_dta_write_en =mb_array_06_wr_out;
3308 assign mb0_dva_write_en =mb_array_07_wr_out;
3309 assign mb0_dtb_write_en =mb_array_08_wr_out;
3310 assign mb0_cpq_write_en =mb_array_09_wr_out;
3311 assign mb0_stb_cam_write_en=mb_array_10_wr_out;
3312 assign mb0_stb_ram_write_en=mb_array_11_wr_out;
3313 assign mb0_lru_write_en =mb_array_12_wr_out;
3314
3315 assign mb0_ict_read_en =mb_array_01_rd_out;
3316 assign mb0_icd_read_en =mb_array_02_rd_out;
3317 assign mb0_icv_read_en =mb_array_03_rd_out;
3318 assign mb0_itb_read_en =mb_array_04_rd_out;
3319 assign mb0_dca_read_en =mb_array_05_rd_out;
3320 assign mb0_dta_read_en =mb_array_06_rd_out;
3321 assign mb0_dva_read_en =mb_array_07_rd_out;
3322 assign mb0_dtb_read_en =mb_array_08_rd_out;
3323 assign mb0_cpq_read_en =mb_array_09_rd_out;
3324 assign mb0_stb_cam_read_en=mb_array_10_rd_out;
3325 assign mb0_stb_ram_read_en=mb_array_11_rd_out;
3326 assign mb0_lru_read_en =mb_array_12_rd_out;
3327
3328
3329
3330// spare gates:
3331
3332
3333spc_mb0_ctlspare_ctl_macro__num_6 spares (
3334 .scan_in(spares_scanin),
3335 .scan_out(spares_scanout),
3336 .l1clk (l1clk_pm1),
3337 .siclk(siclk),
3338 .soclk(soclk)
3339);
3340
3341
3342supply0 vss; // <- port for ground
3343supply1 vdd; // <- port for power
3344
3345
3346// /////////////////////////////////////////////////////////////////////////////
3347
3348// /////////////////////////////////////////////////////////////////////////////
3349
3350// fixscan start:
3351assign pmen_scanin = scan_in ;
3352assign array_usr_reg_scanin = pmen_scanout ;
3353assign user_addr_mode_reg_scanin = array_usr_reg_scanout ;
3354assign user_start_addr_reg_scanin = user_addr_mode_reg_scanout;
3355assign user_stop_addr_reg_scanin = user_start_addr_reg_scanout;
3356assign user_incr_addr_reg_scanin = user_stop_addr_reg_scanout;
3357assign user_data_mode_reg_scanin = user_incr_addr_reg_scanout;
3358assign user_data_reg_scanin = user_data_mode_reg_scanout;
3359assign user_cmpselinc_hold_reg_scanin = user_data_reg_scanout ;
3360assign user_cmpsel_reg_scanin = user_cmpselinc_hold_reg_scanout;
3361assign user_loop_mode_reg_scanin = user_cmpsel_reg_scanout ;
3362assign ten_n_mode_reg_scanin = user_loop_mode_reg_scanout;
3363assign user_cam_mode_reg_scanin = ten_n_mode_reg_scanout ;
3364assign user_cam_select_reg_scanin = user_cam_mode_reg_scanout;
3365assign user_cam_test_select_reg_scanin = user_cam_select_reg_scanout;
3366assign user_bisi_wr_mode_reg_scanin = user_cam_test_select_reg_scanout;
3367assign user_bisi_rd_mode_reg_scanin = user_bisi_wr_mode_reg_scanout;
3368assign input_signals_reg_scanin = user_bisi_rd_mode_reg_scanout;
3369assign mb_enable_reg_scanin = input_signals_reg_scanout;
3370assign config_reg_scanin = mb_enable_reg_scanout ;
3371assign loop_again_reg_scanin = config_reg_scanout ;
3372assign cambist_delay_reg_scanin = loop_again_reg_scanout ;
3373assign cam_cntl_reg_scanin = cambist_delay_reg_scanout;
3374assign cam_shift_reg_scanin = cam_cntl_reg_scanout ;
3375assign cam_en_reg_scanin = cam_shift_reg_scanout ;
3376assign stb_hit_cmp_delay_scanin = cam_en_reg_scanout ;
3377assign stb_hit_cmp_mhit_l_delay_scanin = stb_hit_cmp_delay_scanout;
3378assign exp_stb_cam_hit_delay_scanin = stb_hit_cmp_mhit_l_delay_scanout;
3379assign exp_stb_hit_ptr_delay_scanin = exp_stb_cam_hit_delay_scanout;
3380assign exp_stb_mhit_delay_scanin = exp_stb_hit_ptr_delay_scanout;
3381assign exp_stb_ld_partial_raw_delay_scanin = exp_stb_mhit_delay_scanout;
3382assign cam_array_0_delay_scanin = exp_stb_ld_partial_raw_delay_scanout;
3383assign cam_array_1_delay_scanin = cam_array_0_delay_scanout;
3384assign cam_array_2_delay_scanin = cam_array_1_delay_scanout;
3385assign cam_hit_cmp_delay_scanin = cam_array_2_delay_scanout;
3386assign data_cmp_delay_scanin = cam_hit_cmp_delay_scanout;
3387assign cam_valid_cmp_delay_scanin = data_cmp_delay_scanout ;
3388assign cam_used_cmp_delay_scanin = cam_valid_cmp_delay_scanout;
3389assign exp_data_cmp_delay_scanin = cam_used_cmp_delay_scanout;
3390assign exp_valid_delay_scanin = exp_data_cmp_delay_scanout;
3391assign exp_used_delay_scanin = exp_valid_delay_scanout ;
3392assign tlb_cntx0_cmp_delay_scanin = exp_used_delay_scanout ;
3393assign exp_cam_hit_delay_scanin = tlb_cntx0_cmp_delay_scanout;
3394assign exp_cntx0_hit_delay_scanin = exp_cam_hit_delay_scanout;
3395assign exp_mhit_delay_scanin = exp_cntx0_hit_delay_scanout;
3396assign tlb_cam_intf_out_scanin = exp_mhit_delay_scanout ;
3397assign cntl_reg_scanin = tlb_cam_intf_out_scanout ;
3398assign ctest_reg_scanin = cntl_reg_scanout ;
3399assign cseq_reg_scanin = ctest_reg_scanout ;
3400assign array_sel_reg_scanin = cseq_reg_scanout ;
3401assign cmp_sel_reg_scanin = array_sel_reg_scanout ;
3402assign marche_element_reg_scanin = cmp_sel_reg_scanout ;
3403assign msb_latch_scanin = marche_element_reg_scanout;
3404assign run3_transition_reg_scanin = msb_latch_scanout ;
3405assign done_delay_reg_scanin = run3_transition_reg_scanout;
3406assign fail_reg_scanin = done_delay_reg_scanout ;
3407assign out_mb_tcu_done_reg_scanin = fail_reg_scanout ;
3408assign out_mb_tcu_fail_reg_scanin = out_mb_tcu_done_reg_scanout;
3409assign out_cmp_sel_reg_scanin = out_mb_tcu_fail_reg_scanout;
3410assign out_run_mb_arrays_reg_scanin = out_cmp_sel_reg_scanout ;
3411assign out_data_mb_arrays_reg_scanin = out_run_mb_arrays_reg_scanout;
3412assign out_addr_mb_arrays_reg_scanin = out_data_mb_arrays_reg_scanout;
3413assign out_wr_mb_arrays_reg_scanin = out_addr_mb_arrays_reg_scanout;
3414assign out_rd_mb_arrays_reg_scanin = out_wr_mb_arrays_reg_scanout;
3415assign merged_fail_scanin = out_rd_mb_arrays_reg_scanout;
3416assign merged_done_scanin = merged_fail_scanout ;
3417assign spares_scanin = merged_done_scanout ;
3418assign scan_out = spares_scanout ;
3419// fixscan end:
3420endmodule
3421
3422
3423
3424
3425
3426
3427// any PARAMS parms go into naming of macro
3428
3429module spc_mb0_ctll1clkhdr_ctl_macro (
3430 l2clk,
3431 l1en,
3432 pce_ov,
3433 stop,
3434 se,
3435 l1clk);
3436
3437
3438 input l2clk;
3439 input l1en;
3440 input pce_ov;
3441 input stop;
3442 input se;
3443 output l1clk;
3444
3445
3446
3447
3448
3449cl_sc1_l1hdr_8x c_0 (
3450
3451
3452 .l2clk(l2clk),
3453 .pce(l1en),
3454 .l1clk(l1clk),
3455 .se(se),
3456 .pce_ov(pce_ov),
3457 .stop(stop)
3458);
3459
3460
3461
3462endmodule
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476// any PARAMS parms go into naming of macro
3477
3478module spc_mb0_ctlmsff_ctl_macro__width_3 (
3479 din,
3480 l1clk,
3481 scan_in,
3482 siclk,
3483 soclk,
3484 dout,
3485 scan_out);
3486wire [2:0] fdin;
3487wire [1:0] so;
3488
3489 input [2:0] din;
3490 input l1clk;
3491 input scan_in;
3492
3493
3494 input siclk;
3495 input soclk;
3496
3497 output [2:0] dout;
3498 output scan_out;
3499assign fdin[2:0] = din[2:0];
3500
3501
3502
3503
3504
3505
3506dff #(3) d0_0 (
3507.l1clk(l1clk),
3508.siclk(siclk),
3509.soclk(soclk),
3510.d(fdin[2:0]),
3511.si({scan_in,so[1:0]}),
3512.so({so[1:0],scan_out}),
3513.q(dout[2:0])
3514);
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527endmodule
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541// any PARAMS parms go into naming of macro
3542
3543module spc_mb0_ctlmsff_ctl_macro__width_4 (
3544 din,
3545 l1clk,
3546 scan_in,
3547 siclk,
3548 soclk,
3549 dout,
3550 scan_out);
3551wire [3:0] fdin;
3552wire [2:0] so;
3553
3554 input [3:0] din;
3555 input l1clk;
3556 input scan_in;
3557
3558
3559 input siclk;
3560 input soclk;
3561
3562 output [3:0] dout;
3563 output scan_out;
3564assign fdin[3:0] = din[3:0];
3565
3566
3567
3568
3569
3570
3571dff #(4) d0_0 (
3572.l1clk(l1clk),
3573.siclk(siclk),
3574.soclk(soclk),
3575.d(fdin[3:0]),
3576.si({scan_in,so[2:0]}),
3577.so({so[2:0],scan_out}),
3578.q(dout[3:0])
3579);
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592endmodule
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606// any PARAMS parms go into naming of macro
3607
3608module spc_mb0_ctlmsff_ctl_macro__width_1 (
3609 din,
3610 l1clk,
3611 scan_in,
3612 siclk,
3613 soclk,
3614 dout,
3615 scan_out);
3616wire [0:0] fdin;
3617
3618 input [0:0] din;
3619 input l1clk;
3620 input scan_in;
3621
3622
3623 input siclk;
3624 input soclk;
3625
3626 output [0:0] dout;
3627 output scan_out;
3628assign fdin[0:0] = din[0:0];
3629
3630
3631
3632
3633
3634
3635dff #(1) d0_0 (
3636.l1clk(l1clk),
3637.siclk(siclk),
3638.soclk(soclk),
3639.d(fdin[0:0]),
3640.si(scan_in),
3641.so(scan_out),
3642.q(dout[0:0])
3643);
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656endmodule
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670// any PARAMS parms go into naming of macro
3671
3672module spc_mb0_ctlmsff_ctl_macro__width_9 (
3673 din,
3674 l1clk,
3675 scan_in,
3676 siclk,
3677 soclk,
3678 dout,
3679 scan_out);
3680wire [8:0] fdin;
3681wire [7:0] so;
3682
3683 input [8:0] din;
3684 input l1clk;
3685 input scan_in;
3686
3687
3688 input siclk;
3689 input soclk;
3690
3691 output [8:0] dout;
3692 output scan_out;
3693assign fdin[8:0] = din[8:0];
3694
3695
3696
3697
3698
3699
3700dff #(9) d0_0 (
3701.l1clk(l1clk),
3702.siclk(siclk),
3703.soclk(soclk),
3704.d(fdin[8:0]),
3705.si({scan_in,so[7:0]}),
3706.so({so[7:0],scan_out}),
3707.q(dout[8:0])
3708);
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721endmodule
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735// any PARAMS parms go into naming of macro
3736
3737module spc_mb0_ctlmsff_ctl_macro__width_8 (
3738 din,
3739 l1clk,
3740 scan_in,
3741 siclk,
3742 soclk,
3743 dout,
3744 scan_out);
3745wire [7:0] fdin;
3746wire [6:0] so;
3747
3748 input [7:0] din;
3749 input l1clk;
3750 input scan_in;
3751
3752
3753 input siclk;
3754 input soclk;
3755
3756 output [7:0] dout;
3757 output scan_out;
3758assign fdin[7:0] = din[7:0];
3759
3760
3761
3762
3763
3764
3765dff #(8) d0_0 (
3766.l1clk(l1clk),
3767.siclk(siclk),
3768.soclk(soclk),
3769.d(fdin[7:0]),
3770.si({scan_in,so[6:0]}),
3771.so({so[6:0],scan_out}),
3772.q(dout[7:0])
3773);
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786endmodule
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800// any PARAMS parms go into naming of macro
3801
3802module spc_mb0_ctlmsff_ctl_macro__width_2 (
3803 din,
3804 l1clk,
3805 scan_in,
3806 siclk,
3807 soclk,
3808 dout,
3809 scan_out);
3810wire [1:0] fdin;
3811wire [0:0] so;
3812
3813 input [1:0] din;
3814 input l1clk;
3815 input scan_in;
3816
3817
3818 input siclk;
3819 input soclk;
3820
3821 output [1:0] dout;
3822 output scan_out;
3823assign fdin[1:0] = din[1:0];
3824
3825
3826
3827
3828
3829
3830dff #(2) d0_0 (
3831.l1clk(l1clk),
3832.siclk(siclk),
3833.soclk(soclk),
3834.d(fdin[1:0]),
3835.si({scan_in,so[0:0]}),
3836.so({so[0:0],scan_out}),
3837.q(dout[1:0])
3838);
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851endmodule
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865// any PARAMS parms go into naming of macro
3866
3867module spc_mb0_ctlmsff_ctl_macro__width_27 (
3868 din,
3869 l1clk,
3870 scan_in,
3871 siclk,
3872 soclk,
3873 dout,
3874 scan_out);
3875wire [26:0] fdin;
3876wire [25:0] so;
3877
3878 input [26:0] din;
3879 input l1clk;
3880 input scan_in;
3881
3882
3883 input siclk;
3884 input soclk;
3885
3886 output [26:0] dout;
3887 output scan_out;
3888assign fdin[26:0] = din[26:0];
3889
3890
3891
3892
3893
3894
3895dff #(27) d0_0 (
3896.l1clk(l1clk),
3897.siclk(siclk),
3898.soclk(soclk),
3899.d(fdin[26:0]),
3900.si({scan_in,so[25:0]}),
3901.so({so[25:0],scan_out}),
3902.q(dout[26:0])
3903);
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916endmodule
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930// any PARAMS parms go into naming of macro
3931
3932module spc_mb0_ctlmsff_ctl_macro__width_5 (
3933 din,
3934 l1clk,
3935 scan_in,
3936 siclk,
3937 soclk,
3938 dout,
3939 scan_out);
3940wire [4:0] fdin;
3941wire [3:0] so;
3942
3943 input [4:0] din;
3944 input l1clk;
3945 input scan_in;
3946
3947
3948 input siclk;
3949 input soclk;
3950
3951 output [4:0] dout;
3952 output scan_out;
3953assign fdin[4:0] = din[4:0];
3954
3955
3956
3957
3958
3959
3960dff #(5) d0_0 (
3961.l1clk(l1clk),
3962.siclk(siclk),
3963.soclk(soclk),
3964.d(fdin[4:0]),
3965.si({scan_in,so[3:0]}),
3966.so({so[3:0],scan_out}),
3967.q(dout[4:0])
3968);
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981endmodule
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995// any PARAMS parms go into naming of macro
3996
3997module spc_mb0_ctlmsff_ctl_macro__width_6 (
3998 din,
3999 l1clk,
4000 scan_in,
4001 siclk,
4002 soclk,
4003 dout,
4004 scan_out);
4005wire [5:0] fdin;
4006wire [4:0] so;
4007
4008 input [5:0] din;
4009 input l1clk;
4010 input scan_in;
4011
4012
4013 input siclk;
4014 input soclk;
4015
4016 output [5:0] dout;
4017 output scan_out;
4018assign fdin[5:0] = din[5:0];
4019
4020
4021
4022
4023
4024
4025dff #(6) d0_0 (
4026.l1clk(l1clk),
4027.siclk(siclk),
4028.soclk(soclk),
4029.d(fdin[5:0]),
4030.si({scan_in,so[4:0]}),
4031.so({so[4:0],scan_out}),
4032.q(dout[5:0])
4033);
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046endmodule
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060// any PARAMS parms go into naming of macro
4061
4062module spc_mb0_ctlmsff_ctl_macro__width_13 (
4063 din,
4064 l1clk,
4065 scan_in,
4066 siclk,
4067 soclk,
4068 dout,
4069 scan_out);
4070wire [12:0] fdin;
4071wire [11:0] so;
4072
4073 input [12:0] din;
4074 input l1clk;
4075 input scan_in;
4076
4077
4078 input siclk;
4079 input soclk;
4080
4081 output [12:0] dout;
4082 output scan_out;
4083assign fdin[12:0] = din[12:0];
4084
4085
4086
4087
4088
4089
4090dff #(13) d0_0 (
4091.l1clk(l1clk),
4092.siclk(siclk),
4093.soclk(soclk),
4094.d(fdin[12:0]),
4095.si({scan_in,so[11:0]}),
4096.so({so[11:0],scan_out}),
4097.q(dout[12:0])
4098);
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111endmodule
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125// any PARAMS parms go into naming of macro
4126
4127module spc_mb0_ctlmsff_ctl_macro__width_28 (
4128 din,
4129 l1clk,
4130 scan_in,
4131 siclk,
4132 soclk,
4133 dout,
4134 scan_out);
4135wire [27:0] fdin;
4136wire [26:0] so;
4137
4138 input [27:0] din;
4139 input l1clk;
4140 input scan_in;
4141
4142
4143 input siclk;
4144 input soclk;
4145
4146 output [27:0] dout;
4147 output scan_out;
4148assign fdin[27:0] = din[27:0];
4149
4150
4151
4152
4153
4154
4155dff #(28) d0_0 (
4156.l1clk(l1clk),
4157.siclk(siclk),
4158.soclk(soclk),
4159.d(fdin[27:0]),
4160.si({scan_in,so[26:0]}),
4161.so({so[26:0],scan_out}),
4162.q(dout[27:0])
4163);
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176endmodule
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190// any PARAMS parms go into naming of macro
4191
4192module spc_mb0_ctlmsff_ctl_macro__width_15 (
4193 din,
4194 l1clk,
4195 scan_in,
4196 siclk,
4197 soclk,
4198 dout,
4199 scan_out);
4200wire [14:0] fdin;
4201wire [13:0] so;
4202
4203 input [14:0] din;
4204 input l1clk;
4205 input scan_in;
4206
4207
4208 input siclk;
4209 input soclk;
4210
4211 output [14:0] dout;
4212 output scan_out;
4213assign fdin[14:0] = din[14:0];
4214
4215
4216
4217
4218
4219
4220dff #(15) d0_0 (
4221.l1clk(l1clk),
4222.siclk(siclk),
4223.soclk(soclk),
4224.d(fdin[14:0]),
4225.si({scan_in,so[13:0]}),
4226.so({so[13:0],scan_out}),
4227.q(dout[14:0])
4228);
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241endmodule
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255// any PARAMS parms go into naming of macro
4256
4257module spc_mb0_ctlmsff_ctl_macro__width_12 (
4258 din,
4259 l1clk,
4260 scan_in,
4261 siclk,
4262 soclk,
4263 dout,
4264 scan_out);
4265wire [11:0] fdin;
4266wire [10:0] so;
4267
4268 input [11:0] din;
4269 input l1clk;
4270 input scan_in;
4271
4272
4273 input siclk;
4274 input soclk;
4275
4276 output [11:0] dout;
4277 output scan_out;
4278assign fdin[11:0] = din[11:0];
4279
4280
4281
4282
4283
4284
4285dff #(12) d0_0 (
4286.l1clk(l1clk),
4287.siclk(siclk),
4288.soclk(soclk),
4289.d(fdin[11:0]),
4290.si({scan_in,so[10:0]}),
4291.so({so[10:0],scan_out}),
4292.q(dout[11:0])
4293);
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306endmodule
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316// Description: Spare gate macro for control blocks
4317//
4318// Param num controls the number of times the macro is added
4319// flops=0 can be used to use only combination spare logic
4320
4321
4322module spc_mb0_ctlspare_ctl_macro__num_6 (
4323 l1clk,
4324 scan_in,
4325 siclk,
4326 soclk,
4327 scan_out);
4328wire si_0;
4329wire so_0;
4330wire spare0_flop_unused;
4331wire spare0_buf_32x_unused;
4332wire spare0_nand3_8x_unused;
4333wire spare0_inv_8x_unused;
4334wire spare0_aoi22_4x_unused;
4335wire spare0_buf_8x_unused;
4336wire spare0_oai22_4x_unused;
4337wire spare0_inv_16x_unused;
4338wire spare0_nand2_16x_unused;
4339wire spare0_nor3_4x_unused;
4340wire spare0_nand2_8x_unused;
4341wire spare0_buf_16x_unused;
4342wire spare0_nor2_16x_unused;
4343wire spare0_inv_32x_unused;
4344wire si_1;
4345wire so_1;
4346wire spare1_flop_unused;
4347wire spare1_buf_32x_unused;
4348wire spare1_nand3_8x_unused;
4349wire spare1_inv_8x_unused;
4350wire spare1_aoi22_4x_unused;
4351wire spare1_buf_8x_unused;
4352wire spare1_oai22_4x_unused;
4353wire spare1_inv_16x_unused;
4354wire spare1_nand2_16x_unused;
4355wire spare1_nor3_4x_unused;
4356wire spare1_nand2_8x_unused;
4357wire spare1_buf_16x_unused;
4358wire spare1_nor2_16x_unused;
4359wire spare1_inv_32x_unused;
4360wire si_2;
4361wire so_2;
4362wire spare2_flop_unused;
4363wire spare2_buf_32x_unused;
4364wire spare2_nand3_8x_unused;
4365wire spare2_inv_8x_unused;
4366wire spare2_aoi22_4x_unused;
4367wire spare2_buf_8x_unused;
4368wire spare2_oai22_4x_unused;
4369wire spare2_inv_16x_unused;
4370wire spare2_nand2_16x_unused;
4371wire spare2_nor3_4x_unused;
4372wire spare2_nand2_8x_unused;
4373wire spare2_buf_16x_unused;
4374wire spare2_nor2_16x_unused;
4375wire spare2_inv_32x_unused;
4376wire si_3;
4377wire so_3;
4378wire spare3_flop_unused;
4379wire spare3_buf_32x_unused;
4380wire spare3_nand3_8x_unused;
4381wire spare3_inv_8x_unused;
4382wire spare3_aoi22_4x_unused;
4383wire spare3_buf_8x_unused;
4384wire spare3_oai22_4x_unused;
4385wire spare3_inv_16x_unused;
4386wire spare3_nand2_16x_unused;
4387wire spare3_nor3_4x_unused;
4388wire spare3_nand2_8x_unused;
4389wire spare3_buf_16x_unused;
4390wire spare3_nor2_16x_unused;
4391wire spare3_inv_32x_unused;
4392wire si_4;
4393wire so_4;
4394wire spare4_flop_unused;
4395wire spare4_buf_32x_unused;
4396wire spare4_nand3_8x_unused;
4397wire spare4_inv_8x_unused;
4398wire spare4_aoi22_4x_unused;
4399wire spare4_buf_8x_unused;
4400wire spare4_oai22_4x_unused;
4401wire spare4_inv_16x_unused;
4402wire spare4_nand2_16x_unused;
4403wire spare4_nor3_4x_unused;
4404wire spare4_nand2_8x_unused;
4405wire spare4_buf_16x_unused;
4406wire spare4_nor2_16x_unused;
4407wire spare4_inv_32x_unused;
4408wire si_5;
4409wire so_5;
4410wire spare5_flop_unused;
4411wire spare5_buf_32x_unused;
4412wire spare5_nand3_8x_unused;
4413wire spare5_inv_8x_unused;
4414wire spare5_aoi22_4x_unused;
4415wire spare5_buf_8x_unused;
4416wire spare5_oai22_4x_unused;
4417wire spare5_inv_16x_unused;
4418wire spare5_nand2_16x_unused;
4419wire spare5_nor3_4x_unused;
4420wire spare5_nand2_8x_unused;
4421wire spare5_buf_16x_unused;
4422wire spare5_nor2_16x_unused;
4423wire spare5_inv_32x_unused;
4424
4425
4426input l1clk;
4427input scan_in;
4428input siclk;
4429input soclk;
4430output scan_out;
4431
4432cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
4433 .siclk(siclk),
4434 .soclk(soclk),
4435 .si(si_0),
4436 .so(so_0),
4437 .d(1'b0),
4438 .q(spare0_flop_unused));
4439assign si_0 = scan_in;
4440
4441cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
4442 .out(spare0_buf_32x_unused));
4443cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
4444 .in1(1'b1),
4445 .in2(1'b1),
4446 .out(spare0_nand3_8x_unused));
4447cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
4448 .out(spare0_inv_8x_unused));
4449cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
4450 .in01(1'b1),
4451 .in10(1'b1),
4452 .in11(1'b1),
4453 .out(spare0_aoi22_4x_unused));
4454cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
4455 .out(spare0_buf_8x_unused));
4456cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
4457 .in01(1'b1),
4458 .in10(1'b1),
4459 .in11(1'b1),
4460 .out(spare0_oai22_4x_unused));
4461cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
4462 .out(spare0_inv_16x_unused));
4463cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
4464 .in1(1'b1),
4465 .out(spare0_nand2_16x_unused));
4466cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
4467 .in1(1'b0),
4468 .in2(1'b0),
4469 .out(spare0_nor3_4x_unused));
4470cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
4471 .in1(1'b1),
4472 .out(spare0_nand2_8x_unused));
4473cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
4474 .out(spare0_buf_16x_unused));
4475cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
4476 .in1(1'b0),
4477 .out(spare0_nor2_16x_unused));
4478cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
4479 .out(spare0_inv_32x_unused));
4480
4481cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
4482 .siclk(siclk),
4483 .soclk(soclk),
4484 .si(si_1),
4485 .so(so_1),
4486 .d(1'b0),
4487 .q(spare1_flop_unused));
4488assign si_1 = so_0;
4489
4490cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
4491 .out(spare1_buf_32x_unused));
4492cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
4493 .in1(1'b1),
4494 .in2(1'b1),
4495 .out(spare1_nand3_8x_unused));
4496cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
4497 .out(spare1_inv_8x_unused));
4498cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
4499 .in01(1'b1),
4500 .in10(1'b1),
4501 .in11(1'b1),
4502 .out(spare1_aoi22_4x_unused));
4503cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
4504 .out(spare1_buf_8x_unused));
4505cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
4506 .in01(1'b1),
4507 .in10(1'b1),
4508 .in11(1'b1),
4509 .out(spare1_oai22_4x_unused));
4510cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
4511 .out(spare1_inv_16x_unused));
4512cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
4513 .in1(1'b1),
4514 .out(spare1_nand2_16x_unused));
4515cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
4516 .in1(1'b0),
4517 .in2(1'b0),
4518 .out(spare1_nor3_4x_unused));
4519cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
4520 .in1(1'b1),
4521 .out(spare1_nand2_8x_unused));
4522cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
4523 .out(spare1_buf_16x_unused));
4524cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
4525 .in1(1'b0),
4526 .out(spare1_nor2_16x_unused));
4527cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
4528 .out(spare1_inv_32x_unused));
4529
4530cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
4531 .siclk(siclk),
4532 .soclk(soclk),
4533 .si(si_2),
4534 .so(so_2),
4535 .d(1'b0),
4536 .q(spare2_flop_unused));
4537assign si_2 = so_1;
4538
4539cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
4540 .out(spare2_buf_32x_unused));
4541cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
4542 .in1(1'b1),
4543 .in2(1'b1),
4544 .out(spare2_nand3_8x_unused));
4545cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
4546 .out(spare2_inv_8x_unused));
4547cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
4548 .in01(1'b1),
4549 .in10(1'b1),
4550 .in11(1'b1),
4551 .out(spare2_aoi22_4x_unused));
4552cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
4553 .out(spare2_buf_8x_unused));
4554cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
4555 .in01(1'b1),
4556 .in10(1'b1),
4557 .in11(1'b1),
4558 .out(spare2_oai22_4x_unused));
4559cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
4560 .out(spare2_inv_16x_unused));
4561cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
4562 .in1(1'b1),
4563 .out(spare2_nand2_16x_unused));
4564cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
4565 .in1(1'b0),
4566 .in2(1'b0),
4567 .out(spare2_nor3_4x_unused));
4568cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
4569 .in1(1'b1),
4570 .out(spare2_nand2_8x_unused));
4571cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
4572 .out(spare2_buf_16x_unused));
4573cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
4574 .in1(1'b0),
4575 .out(spare2_nor2_16x_unused));
4576cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
4577 .out(spare2_inv_32x_unused));
4578
4579cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
4580 .siclk(siclk),
4581 .soclk(soclk),
4582 .si(si_3),
4583 .so(so_3),
4584 .d(1'b0),
4585 .q(spare3_flop_unused));
4586assign si_3 = so_2;
4587
4588cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
4589 .out(spare3_buf_32x_unused));
4590cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
4591 .in1(1'b1),
4592 .in2(1'b1),
4593 .out(spare3_nand3_8x_unused));
4594cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
4595 .out(spare3_inv_8x_unused));
4596cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
4597 .in01(1'b1),
4598 .in10(1'b1),
4599 .in11(1'b1),
4600 .out(spare3_aoi22_4x_unused));
4601cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
4602 .out(spare3_buf_8x_unused));
4603cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
4604 .in01(1'b1),
4605 .in10(1'b1),
4606 .in11(1'b1),
4607 .out(spare3_oai22_4x_unused));
4608cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
4609 .out(spare3_inv_16x_unused));
4610cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
4611 .in1(1'b1),
4612 .out(spare3_nand2_16x_unused));
4613cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
4614 .in1(1'b0),
4615 .in2(1'b0),
4616 .out(spare3_nor3_4x_unused));
4617cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
4618 .in1(1'b1),
4619 .out(spare3_nand2_8x_unused));
4620cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
4621 .out(spare3_buf_16x_unused));
4622cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
4623 .in1(1'b0),
4624 .out(spare3_nor2_16x_unused));
4625cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
4626 .out(spare3_inv_32x_unused));
4627
4628cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
4629 .siclk(siclk),
4630 .soclk(soclk),
4631 .si(si_4),
4632 .so(so_4),
4633 .d(1'b0),
4634 .q(spare4_flop_unused));
4635assign si_4 = so_3;
4636
4637cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
4638 .out(spare4_buf_32x_unused));
4639cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
4640 .in1(1'b1),
4641 .in2(1'b1),
4642 .out(spare4_nand3_8x_unused));
4643cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
4644 .out(spare4_inv_8x_unused));
4645cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
4646 .in01(1'b1),
4647 .in10(1'b1),
4648 .in11(1'b1),
4649 .out(spare4_aoi22_4x_unused));
4650cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
4651 .out(spare4_buf_8x_unused));
4652cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
4653 .in01(1'b1),
4654 .in10(1'b1),
4655 .in11(1'b1),
4656 .out(spare4_oai22_4x_unused));
4657cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
4658 .out(spare4_inv_16x_unused));
4659cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
4660 .in1(1'b1),
4661 .out(spare4_nand2_16x_unused));
4662cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
4663 .in1(1'b0),
4664 .in2(1'b0),
4665 .out(spare4_nor3_4x_unused));
4666cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
4667 .in1(1'b1),
4668 .out(spare4_nand2_8x_unused));
4669cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
4670 .out(spare4_buf_16x_unused));
4671cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
4672 .in1(1'b0),
4673 .out(spare4_nor2_16x_unused));
4674cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
4675 .out(spare4_inv_32x_unused));
4676
4677cl_sc1_msff_8x spare5_flop (.l1clk(l1clk),
4678 .siclk(siclk),
4679 .soclk(soclk),
4680 .si(si_5),
4681 .so(so_5),
4682 .d(1'b0),
4683 .q(spare5_flop_unused));
4684assign si_5 = so_4;
4685
4686cl_u1_buf_32x spare5_buf_32x (.in(1'b1),
4687 .out(spare5_buf_32x_unused));
4688cl_u1_nand3_8x spare5_nand3_8x (.in0(1'b1),
4689 .in1(1'b1),
4690 .in2(1'b1),
4691 .out(spare5_nand3_8x_unused));
4692cl_u1_inv_8x spare5_inv_8x (.in(1'b1),
4693 .out(spare5_inv_8x_unused));
4694cl_u1_aoi22_4x spare5_aoi22_4x (.in00(1'b1),
4695 .in01(1'b1),
4696 .in10(1'b1),
4697 .in11(1'b1),
4698 .out(spare5_aoi22_4x_unused));
4699cl_u1_buf_8x spare5_buf_8x (.in(1'b1),
4700 .out(spare5_buf_8x_unused));
4701cl_u1_oai22_4x spare5_oai22_4x (.in00(1'b1),
4702 .in01(1'b1),
4703 .in10(1'b1),
4704 .in11(1'b1),
4705 .out(spare5_oai22_4x_unused));
4706cl_u1_inv_16x spare5_inv_16x (.in(1'b1),
4707 .out(spare5_inv_16x_unused));
4708cl_u1_nand2_16x spare5_nand2_16x (.in0(1'b1),
4709 .in1(1'b1),
4710 .out(spare5_nand2_16x_unused));
4711cl_u1_nor3_4x spare5_nor3_4x (.in0(1'b0),
4712 .in1(1'b0),
4713 .in2(1'b0),
4714 .out(spare5_nor3_4x_unused));
4715cl_u1_nand2_8x spare5_nand2_8x (.in0(1'b1),
4716 .in1(1'b1),
4717 .out(spare5_nand2_8x_unused));
4718cl_u1_buf_16x spare5_buf_16x (.in(1'b1),
4719 .out(spare5_buf_16x_unused));
4720cl_u1_nor2_16x spare5_nor2_16x (.in0(1'b0),
4721 .in1(1'b0),
4722 .out(spare5_nor2_16x_unused));
4723cl_u1_inv_32x spare5_inv_32x (.in(1'b1),
4724 .out(spare5_inv_32x_unused));
4725assign scan_out = so_5;
4726
4727
4728
4729endmodule
4730