Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / sii / rtl / sii_mb1_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: sii_mb1_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 sii_mb1_ctl (
36 sii_mb1_run,
37 sii_mb1_addr,
38 sii_mb1_wr_addr,
39 sii_mb1_1of4ipd_sel,
40 sii_mb1_ipd_data_or_hdr_sel,
41 sii_mb1_ipd_data_hibits_sel,
42 sii_mb1_wdata,
43 sii_mb1_ipdodq0_wr_en,
44 sii_mb1_ipdodq0_rd_en,
45 sii_mb1_ipdodq1_wr_en,
46 sii_mb1_ipdodq1_rd_en,
47 sii_mb1_ipdbdq0_wr_en,
48 sii_mb1_ipdbdq0_rd_en,
49 sii_mb1_ipdbdq1_wr_en,
50 sii_mb1_ipdbdq1_rd_en,
51 sii_mb1_ipdohq0_wr_en,
52 sii_mb1_ipdohq0_rd_en,
53 sii_mb1_ipdohq1_wr_en,
54 sii_mb1_ipdohq1_rd_en,
55 sii_mb1_ipdbhq0_wr_en,
56 sii_mb1_ipdbhq0_rd_en,
57 sii_mb1_ipdbhq1_wr_en,
58 sii_mb1_ipdbhq1_rd_en,
59 sii_mb1_done,
60 sii_mb1_fail,
61 scan_out,
62 l2clk,
63 tcu_scan_en,
64 scan_in,
65 tcu_aclk,
66 tcu_bclk,
67 tcu_pce_ov,
68 tcu_clk_stop,
69 tcu_sii_mb1_start,
70 sii_mb1_bisi_mode,
71 sii_mb1_user_mode,
72 sii_mb1_read_data);
73wire se;
74wire siclk;
75wire soclk;
76wire pce_ov;
77wire stop;
78wire l1clk;
79wire config_reg_scanin;
80wire config_reg_scanout;
81wire [8:0] config_in;
82wire [8:0] config_out;
83wire start_transition;
84wire reset_engine;
85wire mbist_user_loop_mode;
86wire mbist_done;
87wire run;
88wire bisi;
89wire user_mode;
90wire user_data_mode;
91wire user_addr_mode;
92wire user_loop_mode;
93wire user_cmpsel_hold;
94wire ten_n_mode;
95wire mbist_user_data_mode;
96wire mbist_user_addr_mode;
97wire mbist_user_cmpsel_hold;
98wire mbist_ten_n_mode;
99wire user_data_reg_scanin;
100wire user_data_reg_scanout;
101wire [7:0] user_data_in;
102wire [7:0] user_data_out;
103wire user_start_addr_reg_scanin;
104wire user_start_addr_reg_scanout;
105wire [5:0] user_start_addr_in;
106wire [5:0] user_start_addr;
107wire user_stop_addr_reg_scanin;
108wire user_stop_addr_reg_scanout;
109wire [5:0] user_stop_addr_in;
110wire [5:0] user_stop_addr;
111wire user_incr_addr_reg_scanin;
112wire user_incr_addr_reg_scanout;
113wire [5:0] user_incr_addr_in;
114wire [5:0] user_incr_addr;
115wire user_array_sel_reg_scanin;
116wire user_array_sel_reg_scanout;
117wire [2:0] user_array_sel_in;
118wire [2:0] user_array_sel;
119wire user_cmpsel_reg_scanin;
120wire user_cmpsel_reg_scanout;
121wire user_cmpsel_in;
122wire user_cmpsel;
123wire user_bisi_wr_reg_scanin;
124wire user_bisi_wr_reg_scanout;
125wire user_bisi_wr_mode_in;
126wire user_bisi_wr_mode;
127wire user_bisi_rd_reg_scanin;
128wire user_bisi_rd_reg_scanout;
129wire user_bisi_rd_mode_in;
130wire user_bisi_rd_mode;
131wire mbist_user_bisi_wr_mode;
132wire mbist_user_bisi_wr_rd_mode;
133wire start_transition_reg_scanin;
134wire start_transition_reg_scanout;
135wire start_transition_piped;
136wire run_reg_scanin;
137wire run_reg_scanout;
138wire counter_reg_scanin;
139wire counter_reg_scanout;
140wire [3:0] counter_in;
141wire [3:0] counter_out;
142wire cycle16;
143wire run_piped16;
144wire msb;
145wire read_data_reg_scanin;
146wire read_data_reg_scanout;
147wire [77:0] read_data;
148wire ipdodq0_wr_rd_en_reg_scanin;
149wire ipdodq0_wr_rd_en_reg_scanout;
150wire mbist_ipdodq0_wr_en;
151wire mbist_ipdodq0_rd_en;
152wire sii_mb1_ipdodq0_wr_en_int;
153wire ipdodq0_wr_en_reg_scanin;
154wire ipdodq0_wr_en_reg_scanout;
155wire ipdodq1_wr_rd_en_reg_scanin;
156wire ipdodq1_wr_rd_en_reg_scanout;
157wire mbist_ipdodq1_wr_en;
158wire mbist_ipdodq1_rd_en;
159wire sii_mb1_ipdodq1_wr_en_int;
160wire ipdodq1_wr_en_reg_scanin;
161wire ipdodq1_wr_en_reg_scanout;
162wire ipdbdq0_wr_rd_en_reg_scanin;
163wire ipdbdq0_wr_rd_en_reg_scanout;
164wire mbist_ipdbdq0_wr_en;
165wire mbist_ipdbdq0_rd_en;
166wire sii_mb1_ipdbdq0_wr_en_int;
167wire ipdbdq0_wr_en_reg_scanin;
168wire ipdbdq0_wr_en_reg_scanout;
169wire ipdbdq1_wr_rd_en_reg_scanin;
170wire ipdbdq1_wr_rd_en_reg_scanout;
171wire mbist_ipdbdq1_wr_en;
172wire mbist_ipdbdq1_rd_en;
173wire sii_mb1_ipdbdq1_wr_en_int;
174wire ipdbdq1_wr_en_reg_scanin;
175wire ipdbdq1_wr_en_reg_scanout;
176wire ipdohq0_wr_rd_en_reg_scanin;
177wire ipdohq0_wr_rd_en_reg_scanout;
178wire mbist_ipdohq0_wr_en;
179wire mbist_ipdohq0_rd_en;
180wire sii_mb1_ipdohq0_wr_en_int;
181wire ipdohq0_wr_en_reg_scanin;
182wire ipdohq0_wr_en_reg_scanout;
183wire ipdohq1_wr_rd_en_reg_scanin;
184wire ipdohq1_wr_rd_en_reg_scanout;
185wire mbist_ipdohq1_wr_en;
186wire mbist_ipdohq1_rd_en;
187wire sii_mb1_ipdohq1_wr_en_int;
188wire ipdohq1_wr_en_reg_scanin;
189wire ipdohq1_wr_en_reg_scanout;
190wire ipdbhq0_wr_rd_en_reg_scanin;
191wire ipdbhq0_wr_rd_en_reg_scanout;
192wire mbist_ipdbhq0_wr_en;
193wire mbist_ipdbhq0_rd_en;
194wire sii_mb1_ipdbhq0_wr_en_int;
195wire ipdbhq0_wr_en_reg_scanin;
196wire ipdbhq0_wr_en_reg_scanout;
197wire ipdbhq1_wr_rd_en_reg_scanin;
198wire ipdbhq1_wr_rd_en_reg_scanout;
199wire mbist_ipdbhq1_wr_en;
200wire mbist_ipdbhq1_rd_en;
201wire sii_mb1_ipdbhq1_wr_en_int;
202wire ipdbhq1_wr_en_reg_scanin;
203wire ipdbhq1_wr_en_reg_scanout;
204wire sel_reg_scanin;
205wire sel_reg_scanout;
206wire [3:0] mbist_1of4ipd_sel;
207wire mbist_ipd_data_or_hdr_sel;
208wire mbist_ipd_data_hibits_sel;
209wire addr_reg_scanin;
210wire addr_reg_scanout;
211wire [5:0] mbist_address;
212wire wr_addr_reg_scanin;
213wire wr_addr_reg_scanout;
214wire wdata_reg_scanin;
215wire wdata_reg_scanout;
216wire [7:0] mbist_wdata;
217wire [7:0] sii_mb1_wdata_int;
218wire wdata_reg2_scanin;
219wire wdata_reg2_scanout;
220wire done_reg_scanin;
221wire done_reg_scanout;
222wire mbist_fail_reg_scanin;
223wire mbist_fail_reg_scanout;
224wire fail;
225wire control_reg_scanin;
226wire control_reg_scanout;
227wire [21:0] control_in;
228wire [21:0] control_out;
229wire bisi_wr_rd;
230wire [2:0] array_sel;
231wire cmpsel;
232wire hdr_sel;
233wire [1:0] data_control;
234wire address_mix;
235wire [3:0] march_element;
236wire [5:0] array_address;
237wire upaddress_march;
238wire [2:0] read_write_control;
239wire five_cycle_march;
240wire one_cycle_march;
241wire increment_addr;
242wire [5:0] start_addr;
243wire [5:0] next_array_address;
244wire next_upaddr_march;
245wire next_downaddr_march;
246wire [5:0] stop_addr;
247wire [6:0] overflow_addr;
248wire [5:0] incr_addr;
249wire overflow;
250wire [6:0] compare_addr;
251wire [5:0] add;
252wire [5:0] adj_address;
253wire increment_march_elem;
254wire [2:0] next_array_sel;
255wire next_cmpsel;
256wire [1:0] next_data_control;
257wire next_address_mix;
258wire [3:0] next_march_element;
259wire array_write;
260wire array_read;
261wire true_data;
262wire [7:0] data_pattern;
263wire done_counter_reg_scanin;
264wire done_counter_reg_scanout;
265wire [2:0] done_counter_in;
266wire [2:0] done_counter_out;
267wire [1:0] encoded_1of4ipd_sel;
268wire ipd_data_hibits_sel;
269wire ipdbdq1_sel;
270wire ipdodq1_sel;
271wire ipdbdq0_sel;
272wire ipdodq0_sel;
273wire ipdbhq1_sel;
274wire ipdohq1_sel;
275wire ipdbhq0_sel;
276wire ipdohq0_sel;
277wire data_pipe_reg1_scanin;
278wire data_pipe_reg1_scanout;
279wire [7:0] data_pipe_reg1_in;
280wire [7:0] data_pipe_out1;
281wire data_pipe_reg2_scanin;
282wire data_pipe_reg2_scanout;
283wire [7:0] data_pipe_reg2_in;
284wire [7:0] data_pipe_out2;
285wire data_pipe_reg3_scanin;
286wire data_pipe_reg3_scanout;
287wire [7:0] data_pipe_reg3_in;
288wire [7:0] data_pipe_out3;
289wire data_pipe_reg4_scanin;
290wire data_pipe_reg4_scanout;
291wire [7:0] data_pipe_reg4_in;
292wire [7:0] data_pipe_out4;
293wire data_pipe_reg5_scanin;
294wire data_pipe_reg5_scanout;
295wire [7:0] data_pipe_reg5_in;
296wire [7:0] data_pipe_out5;
297wire [7:0] sii_ipd_piped_wdata;
298wire ren_pipe_reg1_scanin;
299wire ren_pipe_reg1_scanout;
300wire ren_pipe_reg1_in;
301wire ren_pipe_out1;
302wire ren_pipe_reg2_scanin;
303wire ren_pipe_reg2_scanout;
304wire ren_pipe_reg2_in;
305wire ren_pipe_out2;
306wire ren_pipe_reg3_scanin;
307wire ren_pipe_reg3_scanout;
308wire ren_pipe_reg3_in;
309wire ren_pipe_out3;
310wire ren_pipe_reg4_scanin;
311wire ren_pipe_reg4_scanout;
312wire ren_pipe_reg4_in;
313wire ren_pipe_out4;
314wire ren_pipe_reg5_scanin;
315wire ren_pipe_reg5_scanout;
316wire ren_pipe_reg5_in;
317wire ren_pipe_out5;
318wire ren_pipe_reg6_scanin;
319wire ren_pipe_reg6_scanout;
320wire ren_pipe_reg6_in;
321wire ren_pipe_out6;
322wire ren_pipe_reg7_scanin;
323wire ren_pipe_reg7_scanout;
324wire ren_pipe_reg7_in;
325wire ren_pipe_out7;
326wire sii_ipd_piped_ren;
327wire hdr_sel_reg_scanin;
328wire hdr_sel_reg_scanout;
329wire hdr_sel_reg_in;
330wire hdr_sel_out;
331wire hdr_sel_reg2_scanin;
332wire hdr_sel_reg2_scanout;
333wire hdr_sel_reg2_in;
334wire hdr_sel_out2;
335wire hdr_sel_reg3_scanin;
336wire hdr_sel_reg3_scanout;
337wire hdr_sel_reg3_in;
338wire hdr_sel_out3;
339wire hdr_sel_reg4_scanin;
340wire hdr_sel_reg4_scanout;
341wire hdr_sel_reg4_in;
342wire hdr_sel_out4;
343wire encoded_1of4ipd_sel_reg_scanin;
344wire encoded_1of4ipd_sel_reg_scanout;
345wire [1:0] encoded_1of4ipd_sel_reg_in;
346wire [1:0] encoded_1of4ipd_sel_out;
347wire encoded_1of4ipd_sel_reg2_scanin;
348wire encoded_1of4ipd_sel_reg2_scanout;
349wire [1:0] encoded_1of4ipd_sel_reg2_in;
350wire [1:0] encoded_1of4ipd_sel_out2;
351wire encoded_1of4ipd_sel_reg3_scanin;
352wire encoded_1of4ipd_sel_reg3_scanout;
353wire [1:0] encoded_1of4ipd_sel_reg3_in;
354wire [1:0] encoded_1of4ipd_sel_out3;
355wire [1:0] mbist_encoded_1of4ipd_sel;
356wire ipd_data_hibits_sel_reg_scanin;
357wire ipd_data_hibits_sel_reg_scanout;
358wire ipd_data_hibits_sel_reg_in;
359wire ipd_data_hibits_sel_out;
360wire ipd_data_hibits_sel_reg2_scanin;
361wire ipd_data_hibits_sel_reg2_scanout;
362wire ipd_data_hibits_sel_reg2_in;
363wire ipd_data_hibits_sel_out2;
364wire ipd_data_hibits_sel_reg3_scanin;
365wire ipd_data_hibits_sel_reg3_scanout;
366wire ipd_data_hibits_sel_reg3_in;
367wire ipd_data_hibits_sel_out3;
368wire sel_pipe_reg1_scanin;
369wire sel_pipe_reg1_scanout;
370wire [5:0] sel_pipe_reg1_in;
371wire [5:0] sel_pipe_out1;
372wire sel_pipe_reg2_scanin;
373wire sel_pipe_reg2_scanout;
374wire [5:0] sel_pipe_reg2_in;
375wire [5:0] sel_pipe_out2;
376wire [3:0] sii_mb1_1of4ipd_sel_piped;
377wire sii_mb1_ipd_data_or_hdr_sel_piped;
378wire sii_mb1_ipd_data_hibits_sel_piped2;
379wire sel_pipe_reg3_scanin;
380wire sel_pipe_reg3_scanout;
381wire sel_pipe_reg3_in;
382wire sel_pipe_out3;
383wire sii_mb1_ipd_data_hibits_sel_piped;
384wire spares_scanin;
385wire spares_scanout;
386wire fail_reg_scanin;
387wire fail_reg_scanout;
388wire [7:0] fail_reg_in;
389wire [7:0] fail_reg_out;
390wire qual_ipdbdq1_fail;
391wire qual_ipdodq1_fail;
392wire qual_ipdbdq0_fail;
393wire qual_ipdodq0_fail;
394wire qual_ipdbhq1_fail;
395wire qual_ipdohq1_fail;
396wire qual_ipdbhq0_fail;
397wire qual_ipdohq0_fail;
398wire fail_detect;
399
400
401
402 output sii_mb1_run;
403
404 output [5:0] sii_mb1_addr;
405 output [5:0] sii_mb1_wr_addr; // 9/2/05: added to compensate for
406 // one less flop in sii
407 output [3:0] sii_mb1_1of4ipd_sel; //Decoded
408 output sii_mb1_ipd_data_or_hdr_sel; // 1: hdr; 0: data
409 output sii_mb1_ipd_data_hibits_sel;
410 output [7:0] sii_mb1_wdata;
411
412 output sii_mb1_ipdodq0_wr_en;
413 output sii_mb1_ipdodq0_rd_en;
414
415 output sii_mb1_ipdodq1_wr_en;
416 output sii_mb1_ipdodq1_rd_en;
417
418 output sii_mb1_ipdbdq0_wr_en;
419 output sii_mb1_ipdbdq0_rd_en;
420
421 output sii_mb1_ipdbdq1_wr_en;
422 output sii_mb1_ipdbdq1_rd_en;
423
424 output sii_mb1_ipdohq0_wr_en;
425 output sii_mb1_ipdohq0_rd_en;
426
427 output sii_mb1_ipdohq1_wr_en;
428 output sii_mb1_ipdohq1_rd_en;
429
430 output sii_mb1_ipdbhq0_wr_en;
431 output sii_mb1_ipdbhq0_rd_en;
432
433 output sii_mb1_ipdbhq1_wr_en;
434 output sii_mb1_ipdbhq1_rd_en;
435
436// output sii_mb1_ind_wr_en;
437// output sii_mb1_ind_rd_en;
438
439 output sii_mb1_done;
440 output sii_mb1_fail;
441 output scan_out;
442
443 input l2clk;
444 input tcu_scan_en;
445 input scan_in;
446 input tcu_aclk;
447 input tcu_bclk;
448 input tcu_pce_ov;
449 input tcu_clk_stop;
450
451 input tcu_sii_mb1_start;
452 input sii_mb1_bisi_mode;
453 input sii_mb1_user_mode;
454
455 input [77:0] sii_mb1_read_data;
456
457
458 ///////////////////////////////////////
459 // Scan chain connections
460 ///////////////////////////////////////
461 // scan renames
462 assign se = tcu_scan_en;
463 assign siclk = tcu_aclk;
464 assign soclk = tcu_bclk;
465 assign pce_ov = tcu_pce_ov;
466 assign stop = tcu_clk_stop;
467
468 // end scan
469
470 sii_mb1_ctll1clkhdr_ctl_macro clkgen (
471 .l2clk (l2clk ),
472 .l1en (1'b1 ),
473 .l1clk (l1clk),
474 .pce_ov(pce_ov),
475 .stop(stop),
476 .se(se)
477 );
478
479
480
481// /////////////////////////////////////////////////////////////////////////////
482//
483// MBIST Config Register
484//
485// /////////////////////////////////////////////////////////////////////////////
486//
487// A low to high transition on mbist_start will reset and start the engine.
488// mbist_start must remain active high for the duration of MBIST.
489// If mbist_start deasserts the engine will stop but not reset.
490// Once MBIST has completed mbist_done will assert and the fail status
491// signals will be valid.
492// To run MBIST again the mbist_start signal must transition low then high.
493//
494// Loop on Address will disable the address mix function.
495//
496// /////////////////////////////////////////////////////////////////////////////
497
498
499 sii_mb1_ctlmsff_ctl_macro__width_9 config_reg (
500 .scan_in(config_reg_scanin),
501 .scan_out(config_reg_scanout),
502 .din ( config_in[8:0] ),
503 .dout ( config_out[8:0] ),
504 .l1clk(l1clk),
505 .siclk(siclk),
506 .soclk(soclk));
507
508
509
510 assign config_in[0] = tcu_sii_mb1_start;
511 assign config_in[1] = config_out[0];
512 assign start_transition = config_out[0] & ~config_out[1];
513 assign reset_engine = start_transition | (mbist_user_loop_mode & mbist_done);
514// assign run = config_out[1] & (mbist_user_loop_mode | ~mbist_done);
515 assign run = config_out[0] & config_out[1];
516
517 assign config_in[2] = start_transition ? sii_mb1_bisi_mode: config_out[2];
518 assign bisi = config_out[2];
519
520 assign config_in[3] = start_transition ? sii_mb1_user_mode: config_out[3];
521 assign user_mode = config_out[3];
522
523 assign config_in[4] = config_out[4];
524 assign user_data_mode = config_out[4];
525
526 assign config_in[5] = config_out[5];
527 assign user_addr_mode = config_out[5];
528
529 assign config_in[6] = config_out[6];
530 assign user_loop_mode = config_out[6];
531
532 assign config_in[7] = config_out[7];
533 assign user_cmpsel_hold = config_out[7]; //cmpsel_hold = 0 : Default, All cominations
534 // = 1 : User-specified cmpsel
535 assign config_in[8] = config_out[8];
536 assign ten_n_mode = config_out[8];
537
538
539 assign mbist_user_data_mode = user_mode & user_data_mode;
540 assign mbist_user_addr_mode = user_mode & user_addr_mode;
541 assign mbist_user_loop_mode = user_mode & user_loop_mode;
542 assign mbist_user_cmpsel_hold = user_mode & user_cmpsel_hold;
543 assign mbist_ten_n_mode = user_mode & ten_n_mode;
544
545
546 sii_mb1_ctlmsff_ctl_macro__width_8 user_data_reg (
547 .scan_in(user_data_reg_scanin),
548 .scan_out(user_data_reg_scanout),
549 .din ( user_data_in[7:0] ),
550 .dout ( user_data_out[7:0] ),
551 .l1clk(l1clk),
552 .siclk(siclk),
553 .soclk(soclk));
554
555
556 assign user_data_in[7:0] = user_data_out[7:0];
557
558
559// Defining User start, stop, and increment addresses.
560
561 sii_mb1_ctlmsff_ctl_macro__width_6 user_start_addr_reg (
562 .scan_in(user_start_addr_reg_scanin),
563 .scan_out(user_start_addr_reg_scanout),
564 .din ( user_start_addr_in[5:0] ),
565 .dout ( user_start_addr[5:0] ),
566 .l1clk(l1clk),
567 .siclk(siclk),
568 .soclk(soclk));
569
570 assign user_start_addr_in[5:0] = user_start_addr[5:0];
571
572 sii_mb1_ctlmsff_ctl_macro__width_6 user_stop_addr_reg (
573 .scan_in(user_stop_addr_reg_scanin),
574 .scan_out(user_stop_addr_reg_scanout),
575 .din ( user_stop_addr_in[5:0] ),
576 .dout ( user_stop_addr[5:0] ),
577 .l1clk(l1clk),
578 .siclk(siclk),
579 .soclk(soclk));
580
581 assign user_stop_addr_in[5:0] = user_stop_addr[5:0];
582
583
584 sii_mb1_ctlmsff_ctl_macro__width_6 user_incr_addr_reg (
585 .scan_in(user_incr_addr_reg_scanin),
586 .scan_out(user_incr_addr_reg_scanout),
587 .din ( user_incr_addr_in[5:0] ),
588 .dout ( user_incr_addr[5:0] ),
589 .l1clk(l1clk),
590 .siclk(siclk),
591 .soclk(soclk));
592
593 assign user_incr_addr_in[5:0] = user_incr_addr[5:0];
594
595// Defining User array_sel.
596
597 sii_mb1_ctlmsff_ctl_macro__width_3 user_array_sel_reg (
598 .scan_in(user_array_sel_reg_scanin),
599 .scan_out(user_array_sel_reg_scanout),
600 .din ( user_array_sel_in[2:0] ),
601 .dout ( user_array_sel[2:0] ),
602 .l1clk(l1clk),
603 .siclk(siclk),
604 .soclk(soclk));
605
606 assign user_array_sel_in[2:0] = user_array_sel[2:0];
607
608// Defining User cmpsel.
609
610 sii_mb1_ctlmsff_ctl_macro__width_1 user_cmpsel_reg (
611 .scan_in(user_cmpsel_reg_scanin),
612 .scan_out(user_cmpsel_reg_scanout),
613 .din ( user_cmpsel_in ),
614 .dout ( user_cmpsel ),
615 .l1clk(l1clk),
616 .siclk(siclk),
617 .soclk(soclk));
618
619 assign user_cmpsel_in = user_cmpsel;
620
621// Defining user_bisi write and read registers
622
623 sii_mb1_ctlmsff_ctl_macro__width_1 user_bisi_wr_reg (
624 .scan_in(user_bisi_wr_reg_scanin),
625 .scan_out(user_bisi_wr_reg_scanout),
626 .din ( user_bisi_wr_mode_in ),
627 .dout ( user_bisi_wr_mode ),
628 .l1clk(l1clk),
629 .siclk(siclk),
630 .soclk(soclk));
631
632 assign user_bisi_wr_mode_in = user_bisi_wr_mode;
633
634 sii_mb1_ctlmsff_ctl_macro__width_1 user_bisi_rd_reg (
635 .scan_in(user_bisi_rd_reg_scanin),
636 .scan_out(user_bisi_rd_reg_scanout),
637 .din ( user_bisi_rd_mode_in ),
638 .dout ( user_bisi_rd_mode ),
639 .l1clk(l1clk),
640 .siclk(siclk),
641 .soclk(soclk));
642
643 assign user_bisi_rd_mode_in = user_bisi_rd_mode;
644
645 assign mbist_user_bisi_wr_mode = user_mode & bisi & user_bisi_wr_mode & ~user_bisi_rd_mode;
646// assign mbist_user_bisi_rd_mode = user_mode & bisi & user_bisi_rd_mode & ~user_bisi_wr_mode;
647
648 assign mbist_user_bisi_wr_rd_mode = user_mode & bisi &
649 ((user_bisi_wr_mode & user_bisi_rd_mode) |
650 (~user_bisi_wr_mode & ~user_bisi_rd_mode));
651
652////////////////////////////////////////////////////////////////////////////////
653// Piping start_transition
654////////////////////////////////////////////////////////////////////////////////
655
656 sii_mb1_ctlmsff_ctl_macro__width_1 start_transition_reg (
657 .scan_in(start_transition_reg_scanin),
658 .scan_out(start_transition_reg_scanout),
659 .din ( start_transition ),
660 .dout ( start_transition_piped ),
661 .l1clk(l1clk),
662 .siclk(siclk),
663 .soclk(soclk));
664
665////////////////////////////////////////////////////////////////////////////////
666// Staging run for 16 cycles for mbist engines supporting async FIFO's
667////////////////////////////////////////////////////////////////////////////////
668
669 sii_mb1_ctlmsff_ctl_macro__width_1 run_reg (
670 .scan_in(run_reg_scanin),
671 .scan_out(run_reg_scanout),
672 .din ( run ),
673 .dout ( sii_mb1_run ),
674 .l1clk(l1clk),
675 .siclk(siclk),
676 .soclk(soclk));
677
678 sii_mb1_ctlmsff_ctl_macro__width_4 counter_reg (
679 .scan_in(counter_reg_scanin),
680 .scan_out(counter_reg_scanout),
681 .din ( counter_in[3:0] ),
682 .dout ( counter_out[3:0] ),
683 .l1clk(l1clk),
684 .siclk(siclk),
685 .soclk(soclk));
686
687 assign cycle16 = (&counter_out[3:0] == 1'b1);
688 assign counter_in[3:0] = reset_engine ? 4'b0:
689 run & ~cycle16 ? counter_out[3:0] + 4'b0001:
690 counter_out[3:0];
691
692// assign run_piped16 = cycle16 & run; // As soon as run goes low, mbist operation is done!
693 assign run_piped16 = config_out[0] & cycle16 & ~msb; // As soon as run goes low, mbist operation is done!
694
695
696// /////////////////////////////////////////////////////////////////////////////
697// Adding Flop Boundaries for mbist
698// /////////////////////////////////////////////////////////////////////////////
699
700 sii_mb1_ctlmsff_ctl_macro__width_78 read_data_reg (
701 .scan_in(read_data_reg_scanin),
702 .scan_out(read_data_reg_scanout),
703 .din ( sii_mb1_read_data[77:0] ),
704 .dout ( read_data[77:0] ),
705 .l1clk(l1clk),
706 .siclk(siclk),
707 .soclk(soclk));
708
709 sii_mb1_ctlmsff_ctl_macro__width_2 ipdodq0_wr_rd_en_reg (
710 .scan_in(ipdodq0_wr_rd_en_reg_scanin),
711 .scan_out(ipdodq0_wr_rd_en_reg_scanout),
712 .din ( {mbist_ipdodq0_wr_en, mbist_ipdodq0_rd_en} ),
713 .dout ( {sii_mb1_ipdodq0_wr_en_int, sii_mb1_ipdodq0_rd_en} ),
714 .l1clk(l1clk),
715 .siclk(siclk),
716 .soclk(soclk));
717
718 sii_mb1_ctlmsff_ctl_macro__width_1 ipdodq0_wr_en_reg ( // Part of 9/2/05 mods!
719 .scan_in(ipdodq0_wr_en_reg_scanin),
720 .scan_out(ipdodq0_wr_en_reg_scanout),
721 .din ( sii_mb1_ipdodq0_wr_en_int ),
722 .dout ( sii_mb1_ipdodq0_wr_en ),
723 .l1clk(l1clk),
724 .siclk(siclk),
725 .soclk(soclk));
726
727 sii_mb1_ctlmsff_ctl_macro__width_2 ipdodq1_wr_rd_en_reg (
728 .scan_in(ipdodq1_wr_rd_en_reg_scanin),
729 .scan_out(ipdodq1_wr_rd_en_reg_scanout),
730 .din ( {mbist_ipdodq1_wr_en, mbist_ipdodq1_rd_en} ),
731 .dout ( {sii_mb1_ipdodq1_wr_en_int, sii_mb1_ipdodq1_rd_en} ),
732 .l1clk(l1clk),
733 .siclk(siclk),
734 .soclk(soclk));
735
736 sii_mb1_ctlmsff_ctl_macro__width_1 ipdodq1_wr_en_reg ( // Part of 9/2/05 mods!
737 .scan_in(ipdodq1_wr_en_reg_scanin),
738 .scan_out(ipdodq1_wr_en_reg_scanout),
739 .din ( sii_mb1_ipdodq1_wr_en_int ),
740 .dout ( sii_mb1_ipdodq1_wr_en ),
741 .l1clk(l1clk),
742 .siclk(siclk),
743 .soclk(soclk));
744
745 sii_mb1_ctlmsff_ctl_macro__width_2 ipdbdq0_wr_rd_en_reg (
746 .scan_in(ipdbdq0_wr_rd_en_reg_scanin),
747 .scan_out(ipdbdq0_wr_rd_en_reg_scanout),
748 .din ( {mbist_ipdbdq0_wr_en, mbist_ipdbdq0_rd_en} ),
749 .dout ( {sii_mb1_ipdbdq0_wr_en_int, sii_mb1_ipdbdq0_rd_en} ),
750 .l1clk(l1clk),
751 .siclk(siclk),
752 .soclk(soclk));
753
754 sii_mb1_ctlmsff_ctl_macro__width_1 ipdbdq0_wr_en_reg ( // Part of 9/2/05 mods!
755 .scan_in(ipdbdq0_wr_en_reg_scanin),
756 .scan_out(ipdbdq0_wr_en_reg_scanout),
757 .din ( sii_mb1_ipdbdq0_wr_en_int ),
758 .dout ( sii_mb1_ipdbdq0_wr_en ),
759 .l1clk(l1clk),
760 .siclk(siclk),
761 .soclk(soclk));
762
763 sii_mb1_ctlmsff_ctl_macro__width_2 ipdbdq1_wr_rd_en_reg (
764 .scan_in(ipdbdq1_wr_rd_en_reg_scanin),
765 .scan_out(ipdbdq1_wr_rd_en_reg_scanout),
766 .din ( {mbist_ipdbdq1_wr_en, mbist_ipdbdq1_rd_en} ),
767 .dout ( {sii_mb1_ipdbdq1_wr_en_int, sii_mb1_ipdbdq1_rd_en} ),
768 .l1clk(l1clk),
769 .siclk(siclk),
770 .soclk(soclk));
771
772 sii_mb1_ctlmsff_ctl_macro__width_1 ipdbdq1_wr_en_reg ( // Part of 9/2/05 mods!
773 .scan_in(ipdbdq1_wr_en_reg_scanin),
774 .scan_out(ipdbdq1_wr_en_reg_scanout),
775 .din ( sii_mb1_ipdbdq1_wr_en_int ),
776 .dout ( sii_mb1_ipdbdq1_wr_en ),
777 .l1clk(l1clk),
778 .siclk(siclk),
779 .soclk(soclk));
780
781 sii_mb1_ctlmsff_ctl_macro__width_2 ipdohq0_wr_rd_en_reg (
782 .scan_in(ipdohq0_wr_rd_en_reg_scanin),
783 .scan_out(ipdohq0_wr_rd_en_reg_scanout),
784 .din ( {mbist_ipdohq0_wr_en, mbist_ipdohq0_rd_en} ),
785 .dout ( {sii_mb1_ipdohq0_wr_en_int, sii_mb1_ipdohq0_rd_en} ),
786 .l1clk(l1clk),
787 .siclk(siclk),
788 .soclk(soclk));
789
790 sii_mb1_ctlmsff_ctl_macro__width_1 ipdohq0_wr_en_reg ( // Part of 9/2/05 mods!
791 .scan_in(ipdohq0_wr_en_reg_scanin),
792 .scan_out(ipdohq0_wr_en_reg_scanout),
793 .din ( sii_mb1_ipdohq0_wr_en_int ),
794 .dout ( sii_mb1_ipdohq0_wr_en ),
795 .l1clk(l1clk),
796 .siclk(siclk),
797 .soclk(soclk));
798
799 sii_mb1_ctlmsff_ctl_macro__width_2 ipdohq1_wr_rd_en_reg (
800 .scan_in(ipdohq1_wr_rd_en_reg_scanin),
801 .scan_out(ipdohq1_wr_rd_en_reg_scanout),
802 .din ( {mbist_ipdohq1_wr_en, mbist_ipdohq1_rd_en} ),
803 .dout ( {sii_mb1_ipdohq1_wr_en_int, sii_mb1_ipdohq1_rd_en} ),
804 .l1clk(l1clk),
805 .siclk(siclk),
806 .soclk(soclk));
807
808 sii_mb1_ctlmsff_ctl_macro__width_1 ipdohq1_wr_en_reg ( // Part of 9/2/05 mods!
809 .scan_in(ipdohq1_wr_en_reg_scanin),
810 .scan_out(ipdohq1_wr_en_reg_scanout),
811 .din ( sii_mb1_ipdohq1_wr_en_int ),
812 .dout ( sii_mb1_ipdohq1_wr_en ),
813 .l1clk(l1clk),
814 .siclk(siclk),
815 .soclk(soclk));
816
817 sii_mb1_ctlmsff_ctl_macro__width_2 ipdbhq0_wr_rd_en_reg (
818 .scan_in(ipdbhq0_wr_rd_en_reg_scanin),
819 .scan_out(ipdbhq0_wr_rd_en_reg_scanout),
820 .din ( {mbist_ipdbhq0_wr_en, mbist_ipdbhq0_rd_en} ),
821 .dout ( {sii_mb1_ipdbhq0_wr_en_int, sii_mb1_ipdbhq0_rd_en} ),
822 .l1clk(l1clk),
823 .siclk(siclk),
824 .soclk(soclk));
825
826 sii_mb1_ctlmsff_ctl_macro__width_1 ipdbhq0_wr_en_reg ( // Part of 9/2/05 mods!
827 .scan_in(ipdbhq0_wr_en_reg_scanin),
828 .scan_out(ipdbhq0_wr_en_reg_scanout),
829 .din ( sii_mb1_ipdbhq0_wr_en_int ),
830 .dout ( sii_mb1_ipdbhq0_wr_en ),
831 .l1clk(l1clk),
832 .siclk(siclk),
833 .soclk(soclk));
834
835 sii_mb1_ctlmsff_ctl_macro__width_2 ipdbhq1_wr_rd_en_reg (
836 .scan_in(ipdbhq1_wr_rd_en_reg_scanin),
837 .scan_out(ipdbhq1_wr_rd_en_reg_scanout),
838 .din ( {mbist_ipdbhq1_wr_en, mbist_ipdbhq1_rd_en} ),
839 .dout ( {sii_mb1_ipdbhq1_wr_en_int, sii_mb1_ipdbhq1_rd_en} ),
840 .l1clk(l1clk),
841 .siclk(siclk),
842 .soclk(soclk));
843
844 sii_mb1_ctlmsff_ctl_macro__width_1 ipdbhq1_wr_en_reg ( // Part of 9/2/05 mods!
845 .scan_in(ipdbhq1_wr_en_reg_scanin),
846 .scan_out(ipdbhq1_wr_en_reg_scanout),
847 .din ( sii_mb1_ipdbhq1_wr_en_int ),
848 .dout ( sii_mb1_ipdbhq1_wr_en ),
849 .l1clk(l1clk),
850 .siclk(siclk),
851 .soclk(soclk));
852
853
854 sii_mb1_ctlmsff_ctl_macro__width_6 sel_reg (
855 .scan_in(sel_reg_scanin),
856 .scan_out(sel_reg_scanout),
857 .din ( {mbist_1of4ipd_sel[3:0], mbist_ipd_data_or_hdr_sel, mbist_ipd_data_hibits_sel} ),
858 .dout ( {sii_mb1_1of4ipd_sel[3:0], sii_mb1_ipd_data_or_hdr_sel, sii_mb1_ipd_data_hibits_sel} ),
859 .l1clk(l1clk),
860 .siclk(siclk),
861 .soclk(soclk));
862
863//
864 sii_mb1_ctlmsff_ctl_macro__width_6 addr_reg (
865 .scan_in(addr_reg_scanin),
866 .scan_out(addr_reg_scanout),
867 .din ( mbist_address[5:0] ),
868 .dout ( sii_mb1_addr[5:0] ),
869 .l1clk(l1clk),
870 .siclk(siclk),
871 .soclk(soclk));
872
873// 9/2/05: Added sii_mb1_wr_addr ports with an extra pipe stage over sii_mb1_addr to be
874// able to remove the pipe stage placed in ipcs in iol2clk!
875 sii_mb1_ctlmsff_ctl_macro__width_6 wr_addr_reg (
876 .scan_in(wr_addr_reg_scanin),
877 .scan_out(wr_addr_reg_scanout),
878 .din ( sii_mb1_addr[5:0] ),
879 .dout ( sii_mb1_wr_addr[5:0] ),
880 .l1clk(l1clk),
881 .siclk(siclk),
882 .soclk(soclk));
883
884// 9/2/05: Added one more pipe stage!!
885 sii_mb1_ctlmsff_ctl_macro__width_8 wdata_reg (
886 .scan_in(wdata_reg_scanin),
887 .scan_out(wdata_reg_scanout),
888 .din ( mbist_wdata[7:0] ),
889 .dout ( sii_mb1_wdata_int[7:0] ),
890 .l1clk(l1clk),
891 .siclk(siclk),
892 .soclk(soclk));
893
894 sii_mb1_ctlmsff_ctl_macro__width_8 wdata_reg2 (
895 .scan_in(wdata_reg2_scanin),
896 .scan_out(wdata_reg2_scanout),
897 .din ( sii_mb1_wdata_int[7:0] ),
898 .dout ( sii_mb1_wdata[7:0] ),
899 .l1clk(l1clk),
900 .siclk(siclk),
901 .soclk(soclk));
902
903 sii_mb1_ctlmsff_ctl_macro__width_1 done_reg (
904 .scan_in(done_reg_scanin),
905 .scan_out(done_reg_scanout),
906 .din ( mbist_done ),
907 .dout ( sii_mb1_done ),
908 .l1clk(l1clk),
909 .siclk(siclk),
910 .soclk(soclk));
911
912 sii_mb1_ctlmsff_ctl_macro__width_1 mbist_fail_reg (
913 .scan_in(mbist_fail_reg_scanin),
914 .scan_out(mbist_fail_reg_scanout),
915 .din ( fail ),
916 .dout ( sii_mb1_fail ),
917 .l1clk(l1clk),
918 .siclk(siclk),
919 .soclk(soclk));
920
921
922// End of flop boundary additions
923
924// /////////////////////////////////////////////////////////////////////////////
925//
926// MBIST Control Register
927//
928// /////////////////////////////////////////////////////////////////////////////
929// Remove Address mix disable before delivery
930// /////////////////////////////////////////////////////////////////////////////
931 sii_mb1_ctlmsff_ctl_macro__width_22 control_reg (
932 .scan_in(control_reg_scanin),
933 .scan_out(control_reg_scanout),
934 .din ( control_in[21:0] ),
935 .dout ( control_out[21:0] ),
936 .l1clk(l1clk),
937 .siclk(siclk),
938 .soclk(soclk));
939
940 assign msb = control_out[21];
941 assign bisi_wr_rd = (bisi & ~user_mode) | mbist_user_bisi_wr_rd_mode ? control_out[20] : 1'b1;
942 assign array_sel[2:0] = user_mode ? user_array_sel[2:0] : control_out[19:17];
943 assign cmpsel = hdr_sel ? 1'b1:
944 mbist_user_cmpsel_hold ? user_cmpsel : control_out[16];
945 assign data_control[1:0] = control_out[15:14];
946 assign address_mix = (bisi | mbist_user_addr_mode) ? 1'b0: control_out[13];
947 assign march_element[3:0] = control_out[12:9];
948// assign array_address[5:0] = control_out[8:3];
949 assign array_address[5:0] = upaddress_march ? control_out[8:3] : ~control_out[8:3];
950
951 assign read_write_control[2:0] = ~five_cycle_march ? {2'b11, control_out[0]} :
952 control_out[2:0];
953
954
955 assign control_in[2:0] = reset_engine ? 3'b0:
956 ~run_piped16 ? control_out[2:0]:
957 (five_cycle_march && (read_write_control[2:0] == 3'b100)) ? 3'b000:
958 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ? 3'b000:
959 control_out[2:0] + 3'b001;
960
961 assign increment_addr = (five_cycle_march && (read_write_control[2:0] == 3'b100)) ||
962 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ||
963 (read_write_control[2:0] == 3'b111);
964
965 assign control_in[8:3] = start_transition_piped || reset_engine ? start_addr[5:0]:
966 ~run_piped16 || ~increment_addr ? control_out[8:3]:
967 next_array_address[5:0];
968
969 assign next_array_address[5:0] = next_upaddr_march ? start_addr[5:0]:
970 next_downaddr_march ? ~stop_addr[5:0]:
971 (overflow_addr[5:0]); // array_addr + incr_addr
972
973 assign start_addr[5:0] = mbist_user_addr_mode ? user_start_addr[5:0] : 6'b000000;
974 assign stop_addr[5:0] = mbist_user_addr_mode ? user_stop_addr[5:0] :
975 hdr_sel ? 6'b001111 : 6'b111111;
976 assign incr_addr[5:0] = mbist_user_addr_mode ? user_incr_addr[5:0] : 6'b000001;
977
978 assign overflow_addr[6:0] = {1'b0,control_out[8:3]} + {1'b0,incr_addr[5:0]};
979 assign overflow = compare_addr[6:0] < overflow_addr[6:0];
980
981 assign compare_addr[6:0] = upaddress_march ? {1'b0, stop_addr[5:0]} :
982 {1'b0, ~start_addr[5:0]};
983
984// assign underflow_addr[6:0] = {1'b0,array_address[5:0]} - {1'b0,incr_addr[5:0]};
985// assign underflow = (start_addr[5:0] > underflow_addr[5:0]) || underflow_addr[6];
986
987// assign next_upaddr_march = (( (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
988// (march_element[3:0] == 4'h6) ) && overflow) ||
989// (( (march_element[3:0] == 4'h5) || (march_element[3:0] == 4'h8) ) && underflow);
990
991 assign next_upaddr_march = ( (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
992 (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h5) ||
993 (march_element[3:0] == 4'h8) ) && overflow;
994
995 assign next_downaddr_march = ( (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h7) ||
996 (march_element[3:0] == 4'h3) || (march_element[3:0] == 4'h4) ) &&
997 overflow;
998
999
1000 assign add[5:0] = five_cycle_march && ( (read_write_control[2:0] == 3'h1) ||
1001 (read_write_control[2:0] == 3'h3)) ?
1002 adj_address[5:0]: array_address[5:0];
1003
1004 assign adj_address[5:0] = { array_address[5:3], ~array_address[2], array_address[1:0] };
1005
1006// The order of add bits for address_mix may need to change!
1007 assign mbist_address[5:0] = address_mix & hdr_sel ? {add[5],add[4],add[0],add[3],add[2],add[1]}:
1008 address_mix ? {add[1:0],add[5:2]}:
1009 add[5:0];
1010
1011// Definition of the rest of the control register
1012// assign increment_march_elem = increment_addr && ((upaddress_march & overflow) || (~upaddress_march & underflow));
1013 assign increment_march_elem = increment_addr && overflow;
1014
1015 assign control_in[21:9] = reset_engine ? 13'b0:
1016 ~run_piped16 ? control_out[21:9]:
1017 {msb, bisi_wr_rd, next_array_sel[2:0], next_cmpsel, next_data_control[1:0], next_address_mix, next_march_element[3:0]} +
1018 {12'b0, increment_march_elem};
1019
1020
1021 assign next_array_sel[2:0] = user_mode ? 3'b111: control_out[19:17];
1022
1023 assign next_cmpsel = (hdr_sel || mbist_user_cmpsel_hold || ~bisi_wr_rd || mbist_user_bisi_wr_mode) ? 1'b1 : control_out[16];
1024
1025 assign next_data_control[1:0] = (bisi || (mbist_user_data_mode && (data_control[1:0] == 2'b00))) ? 2'b11:
1026 data_control[1:0];
1027
1028 assign next_address_mix = bisi | mbist_user_addr_mode ? 1'b1 : address_mix;
1029
1030
1031// If miss timing, can change increment_march_elem to the specific needed to
1032// qualify this march_element.
1033// assign next_march_element[3:0] = (bisi || (march_element[3:0] == 4'b1000)) && increment_march_elem ? 4'b1111:
1034// march_element[3:0];
1035// Modified version to improve timing paths
1036// assign next_march_element[3:0] = (bisi & overflow) ||
1037// ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100) && underflow) ? 4'b1111:
1038// march_element[3:0];
1039
1040// assign next_march_element[3:0] = (bisi || ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100)) )
1041// && overflow ? 4'b1111: march_element[3:0];
1042// Incorporated ten_n_mode!
1043 assign next_march_element[3:0] = ( bisi ||
1044 (mbist_ten_n_mode && (march_element[3:0] == 4'b0101)) ||
1045 ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100)) )
1046 && overflow ? 4'b1111: march_element[3:0];
1047
1048
1049
1050 assign array_write = ~run_piped16 ? 1'b0:
1051 five_cycle_march ? (read_write_control[2:0] == 3'h0) ||
1052 (read_write_control[2:0] == 3'h1) ||
1053 (read_write_control[2:0] == 3'h4):
1054 (~five_cycle_march & ~one_cycle_march) ? read_write_control[0]:
1055 ( ((march_element[3:0] == 4'h0) & (~bisi || ~bisi_wr_rd || mbist_user_bisi_wr_mode)) || (march_element[3:0] == 4'h7));
1056
1057 assign array_read = ~array_write && run_piped16; // && ~initialize;
1058// assign mbist_done = msb;
1059
1060 assign mbist_wdata[7:0] = true_data ? data_pattern[7:0]: ~data_pattern[7:0];
1061
1062
1063 assign five_cycle_march = (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h8);
1064 assign one_cycle_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h5) ||
1065 (march_element[3:0] == 4'h7);
1066
1067 assign upaddress_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
1068 (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h6) ||
1069 (march_element[3:0] == 4'h7);
1070
1071// assign true_data = read_write_control[1] ^ ~march_element[0];
1072
1073 assign true_data = (five_cycle_march && (march_element[3:0] == 4'h6)) ?
1074 ((read_write_control[2:0] == 3'h0) || (read_write_control[2:0] == 3'h2)):
1075 (five_cycle_march && (march_element[3:0] == 4'h8)) ?
1076 ((read_write_control[2:0] == 3'h1) ||
1077 (read_write_control[2:0] == 3'h3) || (read_write_control[2:0] == 3'h4)):
1078 one_cycle_march ? (march_element[3:0] == 4'h7):
1079 ~(read_write_control[0] ^ march_element[0]);
1080
1081
1082 assign data_pattern[7:0] = (bisi & mbist_user_data_mode) ? ~user_data_out[7:0]:
1083 mbist_user_data_mode ? user_data_out[7:0]:
1084 bisi ? 8'hFF: // true_data function will invert to 8'h00
1085 (data_control[1:0] == 2'h0) ? 8'hAA:
1086 (data_control[1:0] == 2'h1) ? 8'h99:
1087 (data_control[1:0] == 2'h2) ? 8'hCC:
1088 8'h00;
1089
1090/////////////////////////////////////////////////////////////////////////
1091// Creating the mbist_done signal
1092/////////////////////////////////////////////////////////////////////////
1093// Delaying mbist_done 8 clock signals after msb going high, to provide
1094// a generic solution for done going high after the last fail has come back!
1095
1096 sii_mb1_ctlmsff_ctl_macro__width_3 done_counter_reg (
1097 .scan_in(done_counter_reg_scanin),
1098 .scan_out(done_counter_reg_scanout),
1099 .din ( done_counter_in[2:0] ),
1100 .dout ( done_counter_out[2:0] ),
1101 .l1clk(l1clk),
1102 .siclk(siclk),
1103 .soclk(soclk));
1104
1105// config_out[1] is AND'ed to force mbist_done low 2 cycles after mbist_start
1106// goes low.
1107
1108 assign mbist_done = (&done_counter_out[2:0] == 1'b1) & config_out[1];
1109 assign done_counter_in[2:0] = reset_engine ? 3'b000:
1110 msb & ~mbist_done & config_out[1] ? done_counter_out[2:0] + 3'b001:
1111 done_counter_out[2:0];
1112
1113
1114/////////////////////////////////////////////////////////////////////////
1115// Creating the select lines.
1116/////////////////////////////////////////////////////////////////////////
1117
1118 assign hdr_sel = array_sel[2]; // Need proper level of staging.
1119 assign encoded_1of4ipd_sel[1:0] = array_sel[1:0];
1120 assign ipd_data_hibits_sel = cmpsel; // Need to stay 1 when hdr memories are selected.
1121
1122 assign ipdbdq1_sel = ~array_sel[2] & ~array_sel[1] & ~array_sel[0];
1123 assign ipdodq1_sel = ~array_sel[2] & ~array_sel[1] & array_sel[0];
1124
1125 assign ipdbdq0_sel = ~array_sel[2] & array_sel[1] & ~array_sel[0];
1126 assign ipdodq0_sel = ~array_sel[2] & array_sel[1] & array_sel[0];
1127
1128 assign ipdbhq1_sel = array_sel[2] & ~array_sel[1] & ~array_sel[0];
1129 assign ipdohq1_sel = array_sel[2] & ~array_sel[1] & array_sel[0];
1130
1131 assign ipdbhq0_sel = array_sel[2] & array_sel[1] & ~array_sel[0];
1132 assign ipdohq0_sel = array_sel[2] & array_sel[1] & array_sel[0];
1133
1134// rd_en and wr_en
1135
1136 assign mbist_ipdodq0_rd_en = ipdodq0_sel && array_read;
1137 assign mbist_ipdodq0_wr_en = ipdodq0_sel && array_write;
1138
1139 assign mbist_ipdodq1_rd_en = ipdodq1_sel && array_read;
1140 assign mbist_ipdodq1_wr_en = ipdodq1_sel && array_write;
1141
1142 assign mbist_ipdbdq0_rd_en = ipdbdq0_sel && array_read;
1143 assign mbist_ipdbdq0_wr_en = ipdbdq0_sel && array_write;
1144
1145 assign mbist_ipdbdq1_rd_en = ipdbdq1_sel && array_read;
1146 assign mbist_ipdbdq1_wr_en = ipdbdq1_sel && array_write;
1147
1148 assign mbist_ipdohq0_rd_en = ipdohq0_sel && array_read;
1149 assign mbist_ipdohq0_wr_en = ipdohq0_sel && array_write;
1150
1151 assign mbist_ipdohq1_rd_en = ipdohq1_sel && array_read;
1152 assign mbist_ipdohq1_wr_en = ipdohq1_sel && array_write;
1153
1154 assign mbist_ipdbhq0_rd_en = ipdbhq0_sel && array_read;
1155 assign mbist_ipdbhq0_wr_en = ipdbhq0_sel && array_write;
1156
1157 assign mbist_ipdbhq1_rd_en = ipdbhq1_sel && array_read;
1158 assign mbist_ipdbhq1_wr_en = ipdbhq1_sel && array_write;
1159
1160
1161// /////////////////////////////////////////////////////////////////////////////
1162// Pipeline for Address, wdata, and Read_en
1163// /////////////////////////////////////////////////////////////////////////////
1164
1165// Adding proper pipe stages for wdata
1166// 2 stages for the memory input and output flops, one stage for the flop after
1167// muxes in the logic and one staging at the mbist read_data input.
1168// 9/2/05: Removed one stage of flop for compare since added one more stage to
1169// create sii_mb1_wdata!
1170 sii_mb1_ctlmsff_ctl_macro__width_8 data_pipe_reg1 (
1171 .scan_in(data_pipe_reg1_scanin),
1172 .scan_out(data_pipe_reg1_scanout),
1173 .din ( data_pipe_reg1_in[7:0] ),
1174 .dout ( data_pipe_out1[7:0] ),
1175 .l1clk(l1clk),
1176 .siclk(siclk),
1177 .soclk(soclk));
1178
1179 sii_mb1_ctlmsff_ctl_macro__width_8 data_pipe_reg2 (
1180 .scan_in(data_pipe_reg2_scanin),
1181 .scan_out(data_pipe_reg2_scanout),
1182 .din ( data_pipe_reg2_in[7:0] ),
1183 .dout ( data_pipe_out2[7:0] ),
1184 .l1clk(l1clk),
1185 .siclk(siclk),
1186 .soclk(soclk));
1187
1188 sii_mb1_ctlmsff_ctl_macro__width_8 data_pipe_reg3 (
1189 .scan_in(data_pipe_reg3_scanin),
1190 .scan_out(data_pipe_reg3_scanout),
1191 .din ( data_pipe_reg3_in[7:0] ),
1192 .dout ( data_pipe_out3[7:0] ),
1193 .l1clk(l1clk),
1194 .siclk(siclk),
1195 .soclk(soclk));
1196
1197 sii_mb1_ctlmsff_ctl_macro__width_8 data_pipe_reg4 (
1198 .scan_in(data_pipe_reg4_scanin),
1199 .scan_out(data_pipe_reg4_scanout),
1200 .din ( data_pipe_reg4_in[7:0] ),
1201 .dout ( data_pipe_out4[7:0] ),
1202 .l1clk(l1clk),
1203 .siclk(siclk),
1204 .soclk(soclk));
1205
1206 sii_mb1_ctlmsff_ctl_macro__width_8 data_pipe_reg5 (
1207 .scan_in(data_pipe_reg5_scanin),
1208 .scan_out(data_pipe_reg5_scanout),
1209 .din ( data_pipe_reg5_in[7:0] ),
1210 .dout ( data_pipe_out5[7:0] ),
1211 .l1clk(l1clk),
1212 .siclk(siclk),
1213 .soclk(soclk));
1214
1215// msff_ctl_macro data_pipe_reg6 (width=8)(
1216// .scan_in(data_pipe_reg6_scanin),
1217// .scan_out(data_pipe_reg6_scanout),
1218// .din ( data_pipe_reg6_in[7:0] ),
1219// .dout ( data_pipe_out6[7:0] ));
1220
1221// sii_mb1_wdata was replaced by mbist_wdata! Need to verify!
1222 assign data_pipe_reg1_in[7:0] = reset_engine ? 8'h00: sii_mb1_wdata[7:0];
1223 assign data_pipe_reg2_in[7:0] = reset_engine ? 8'h00: data_pipe_out1[7:0];
1224 assign data_pipe_reg3_in[7:0] = reset_engine ? 8'h00: data_pipe_out2[7:0];
1225 assign data_pipe_reg4_in[7:0] = reset_engine ? 8'h00: data_pipe_out3[7:0];
1226 assign data_pipe_reg5_in[7:0] = reset_engine ? 8'h00: data_pipe_out4[7:0];
1227// assign data_pipe_reg6_in[7:0] = reset_engine ? 8'h00: data_pipe_out5[7:0];
1228 assign sii_ipd_piped_wdata[7:0] = data_pipe_out5[7:0];
1229
1230 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg1 (
1231 .scan_in(ren_pipe_reg1_scanin),
1232 .scan_out(ren_pipe_reg1_scanout),
1233 .din ( ren_pipe_reg1_in ),
1234 .dout ( ren_pipe_out1 ),
1235 .l1clk(l1clk),
1236 .siclk(siclk),
1237 .soclk(soclk));
1238
1239 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg2 (
1240 .scan_in(ren_pipe_reg2_scanin),
1241 .scan_out(ren_pipe_reg2_scanout),
1242 .din ( ren_pipe_reg2_in ),
1243 .dout ( ren_pipe_out2 ),
1244 .l1clk(l1clk),
1245 .siclk(siclk),
1246 .soclk(soclk));
1247
1248 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg3 (
1249 .scan_in(ren_pipe_reg3_scanin),
1250 .scan_out(ren_pipe_reg3_scanout),
1251 .din ( ren_pipe_reg3_in ),
1252 .dout ( ren_pipe_out3 ),
1253 .l1clk(l1clk),
1254 .siclk(siclk),
1255 .soclk(soclk));
1256
1257 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg4 (
1258 .scan_in(ren_pipe_reg4_scanin),
1259 .scan_out(ren_pipe_reg4_scanout),
1260 .din ( ren_pipe_reg4_in ),
1261 .dout ( ren_pipe_out4 ),
1262 .l1clk(l1clk),
1263 .siclk(siclk),
1264 .soclk(soclk));
1265
1266 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg5 (
1267 .scan_in(ren_pipe_reg5_scanin),
1268 .scan_out(ren_pipe_reg5_scanout),
1269 .din ( ren_pipe_reg5_in ),
1270 .dout ( ren_pipe_out5 ),
1271 .l1clk(l1clk),
1272 .siclk(siclk),
1273 .soclk(soclk));
1274
1275 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg6 (
1276 .scan_in(ren_pipe_reg6_scanin),
1277 .scan_out(ren_pipe_reg6_scanout),
1278 .din ( ren_pipe_reg6_in ),
1279 .dout ( ren_pipe_out6 ),
1280 .l1clk(l1clk),
1281 .siclk(siclk),
1282 .soclk(soclk));
1283
1284 sii_mb1_ctlmsff_ctl_macro__width_1 ren_pipe_reg7 (
1285 .scan_in(ren_pipe_reg7_scanin),
1286 .scan_out(ren_pipe_reg7_scanout),
1287 .din ( ren_pipe_reg7_in ),
1288 .dout ( ren_pipe_out7 ),
1289 .l1clk(l1clk),
1290 .siclk(siclk),
1291 .soclk(soclk));
1292
1293 assign ren_pipe_reg1_in = reset_engine ? 1'b0: array_read;
1294 assign ren_pipe_reg2_in = reset_engine ? 1'b0: ren_pipe_out1;
1295 assign ren_pipe_reg3_in = reset_engine ? 1'b0: ren_pipe_out2;
1296 assign ren_pipe_reg4_in = reset_engine ? 1'b0: ren_pipe_out3;
1297 assign ren_pipe_reg5_in = reset_engine ? 1'b0: ren_pipe_out4;
1298 assign ren_pipe_reg6_in = reset_engine ? 1'b0: ren_pipe_out5;
1299 assign ren_pipe_reg7_in = reset_engine ? 1'b0: ren_pipe_out6;
1300 assign sii_ipd_piped_ren = ren_pipe_out7;
1301
1302//array_sel
1303 sii_mb1_ctlmsff_ctl_macro__width_1 hdr_sel_reg (
1304 .scan_in(hdr_sel_reg_scanin),
1305 .scan_out(hdr_sel_reg_scanout),
1306 .din ( hdr_sel_reg_in ),
1307 .dout ( hdr_sel_out ),
1308 .l1clk(l1clk),
1309 .siclk(siclk),
1310 .soclk(soclk));
1311 sii_mb1_ctlmsff_ctl_macro__width_1 hdr_sel_reg2 (
1312 .scan_in(hdr_sel_reg2_scanin),
1313 .scan_out(hdr_sel_reg2_scanout),
1314 .din ( hdr_sel_reg2_in ),
1315 .dout ( hdr_sel_out2 ),
1316 .l1clk(l1clk),
1317 .siclk(siclk),
1318 .soclk(soclk));
1319
1320 sii_mb1_ctlmsff_ctl_macro__width_1 hdr_sel_reg3 (
1321 .scan_in(hdr_sel_reg3_scanin),
1322 .scan_out(hdr_sel_reg3_scanout),
1323 .din ( hdr_sel_reg3_in ),
1324 .dout ( hdr_sel_out3 ),
1325 .l1clk(l1clk),
1326 .siclk(siclk),
1327 .soclk(soclk));
1328
1329 sii_mb1_ctlmsff_ctl_macro__width_1 hdr_sel_reg4 (
1330 .scan_in(hdr_sel_reg4_scanin),
1331 .scan_out(hdr_sel_reg4_scanout),
1332 .din ( hdr_sel_reg4_in ),
1333 .dout ( hdr_sel_out4 ),
1334 .l1clk(l1clk),
1335 .siclk(siclk),
1336 .soclk(soclk));
1337
1338 assign hdr_sel_reg_in = reset_engine ? 1'b0: hdr_sel;
1339 assign hdr_sel_reg2_in = reset_engine ? 1'b0: hdr_sel_out;
1340 assign hdr_sel_reg3_in = reset_engine ? 1'b0: hdr_sel_out2;
1341 assign hdr_sel_reg4_in = reset_engine ? 1'b0: hdr_sel_out3;
1342 assign mbist_ipd_data_or_hdr_sel = hdr_sel_out4;
1343
1344 sii_mb1_ctlmsff_ctl_macro__width_2 encoded_1of4ipd_sel_reg (
1345 .scan_in(encoded_1of4ipd_sel_reg_scanin),
1346 .scan_out(encoded_1of4ipd_sel_reg_scanout),
1347 .din ( encoded_1of4ipd_sel_reg_in[1:0] ),
1348 .dout ( encoded_1of4ipd_sel_out[1:0] ),
1349 .l1clk(l1clk),
1350 .siclk(siclk),
1351 .soclk(soclk));
1352
1353 sii_mb1_ctlmsff_ctl_macro__width_2 encoded_1of4ipd_sel_reg2 (
1354 .scan_in(encoded_1of4ipd_sel_reg2_scanin),
1355 .scan_out(encoded_1of4ipd_sel_reg2_scanout),
1356 .din ( encoded_1of4ipd_sel_reg2_in[1:0] ),
1357 .dout ( encoded_1of4ipd_sel_out2[1:0] ),
1358 .l1clk(l1clk),
1359 .siclk(siclk),
1360 .soclk(soclk));
1361
1362 sii_mb1_ctlmsff_ctl_macro__width_2 encoded_1of4ipd_sel_reg3 (
1363 .scan_in(encoded_1of4ipd_sel_reg3_scanin),
1364 .scan_out(encoded_1of4ipd_sel_reg3_scanout),
1365 .din ( encoded_1of4ipd_sel_reg3_in[1:0] ),
1366 .dout ( encoded_1of4ipd_sel_out3[1:0] ),
1367 .l1clk(l1clk),
1368 .siclk(siclk),
1369 .soclk(soclk));
1370
1371 assign encoded_1of4ipd_sel_reg_in[1:0] = reset_engine ? 2'b0: encoded_1of4ipd_sel[1:0];
1372 assign encoded_1of4ipd_sel_reg2_in[1:0] = reset_engine ? 2'b0: encoded_1of4ipd_sel_out[1:0];
1373 assign encoded_1of4ipd_sel_reg3_in[1:0] = reset_engine ? 2'b0: encoded_1of4ipd_sel_out2[1:0];
1374 assign mbist_encoded_1of4ipd_sel[1:0] = encoded_1of4ipd_sel_out3[1:0];
1375
1376 assign mbist_1of4ipd_sel[3:0] = { mbist_encoded_1of4ipd_sel[1] && mbist_encoded_1of4ipd_sel[0], //ipdo0_sel
1377 mbist_encoded_1of4ipd_sel[1] && ~mbist_encoded_1of4ipd_sel[0], //ipdb0_sel
1378 ~mbist_encoded_1of4ipd_sel[1] && mbist_encoded_1of4ipd_sel[0], //ipdo1_sel
1379 ~mbist_encoded_1of4ipd_sel[1] && ~mbist_encoded_1of4ipd_sel[0] }; //ipdb1_sel
1380
1381 sii_mb1_ctlmsff_ctl_macro__width_1 ipd_data_hibits_sel_reg (
1382 .scan_in(ipd_data_hibits_sel_reg_scanin),
1383 .scan_out(ipd_data_hibits_sel_reg_scanout),
1384 .din ( ipd_data_hibits_sel_reg_in ),
1385 .dout ( ipd_data_hibits_sel_out ),
1386 .l1clk(l1clk),
1387 .siclk(siclk),
1388 .soclk(soclk));
1389
1390 sii_mb1_ctlmsff_ctl_macro__width_1 ipd_data_hibits_sel_reg2 (
1391 .scan_in(ipd_data_hibits_sel_reg2_scanin),
1392 .scan_out(ipd_data_hibits_sel_reg2_scanout),
1393 .din ( ipd_data_hibits_sel_reg2_in ),
1394 .dout ( ipd_data_hibits_sel_out2 ),
1395 .l1clk(l1clk),
1396 .siclk(siclk),
1397 .soclk(soclk));
1398
1399 sii_mb1_ctlmsff_ctl_macro__width_1 ipd_data_hibits_sel_reg3 (
1400 .scan_in(ipd_data_hibits_sel_reg3_scanin),
1401 .scan_out(ipd_data_hibits_sel_reg3_scanout),
1402 .din ( ipd_data_hibits_sel_reg3_in ),
1403 .dout ( ipd_data_hibits_sel_out3 ),
1404 .l1clk(l1clk),
1405 .siclk(siclk),
1406 .soclk(soclk));
1407
1408 assign ipd_data_hibits_sel_reg_in = reset_engine ? 1'b0: ipd_data_hibits_sel;
1409 assign ipd_data_hibits_sel_reg2_in = reset_engine ? 1'b0: ipd_data_hibits_sel_out;
1410 assign ipd_data_hibits_sel_reg3_in = reset_engine ? 1'b0: ipd_data_hibits_sel_out2;
1411 assign mbist_ipd_data_hibits_sel = ipd_data_hibits_sel_out3;
1412
1413 sii_mb1_ctlmsff_ctl_macro__width_6 sel_pipe_reg1 (
1414 .scan_in(sel_pipe_reg1_scanin),
1415 .scan_out(sel_pipe_reg1_scanout),
1416 .din ( sel_pipe_reg1_in[5:0] ),
1417 .dout ( sel_pipe_out1[5:0] ),
1418 .l1clk(l1clk),
1419 .siclk(siclk),
1420 .soclk(soclk));
1421
1422 sii_mb1_ctlmsff_ctl_macro__width_6 sel_pipe_reg2 (
1423 .scan_in(sel_pipe_reg2_scanin),
1424 .scan_out(sel_pipe_reg2_scanout),
1425 .din ( sel_pipe_reg2_in[5:0] ),
1426 .dout ( sel_pipe_out2[5:0] ),
1427 .l1clk(l1clk),
1428 .siclk(siclk),
1429 .soclk(soclk));
1430
1431 assign sel_pipe_reg1_in[5:0] = reset_engine ? 6'h0: {sii_mb1_1of4ipd_sel[3:0],
1432 sii_mb1_ipd_data_or_hdr_sel, sii_mb1_ipd_data_hibits_sel};
1433 assign sel_pipe_reg2_in[5:0] = reset_engine ? 6'h0: sel_pipe_out1[5:0];
1434 assign {sii_mb1_1of4ipd_sel_piped[3:0], sii_mb1_ipd_data_or_hdr_sel_piped, sii_mb1_ipd_data_hibits_sel_piped2}
1435 = sel_pipe_out2[5:0];
1436
1437 sii_mb1_ctlmsff_ctl_macro__width_1 sel_pipe_reg3 (
1438 .scan_in(sel_pipe_reg3_scanin),
1439 .scan_out(sel_pipe_reg3_scanout),
1440 .din ( sel_pipe_reg3_in ),
1441 .dout ( sel_pipe_out3 ),
1442 .l1clk(l1clk),
1443 .siclk(siclk),
1444 .soclk(soclk));
1445
1446 assign sel_pipe_reg3_in = reset_engine ? 1'b0: sii_mb1_ipd_data_hibits_sel_piped2;
1447 assign sii_mb1_ipd_data_hibits_sel_piped = sel_pipe_out3;
1448
1449// /////////////////////////////////////////////////////////////////////////////
1450// Spare gates
1451// /////////////////////////////////////////////////////////////////////////////
1452
1453 sii_mb1_ctlspare_ctl_macro__num_3 spares (
1454 .scan_in(spares_scanin),
1455 .scan_out(spares_scanout),
1456 .l1clk (l1clk),
1457 .siclk(siclk),
1458 .soclk(soclk)
1459 );
1460
1461// /////////////////////////////////////////////////////////////////////////////
1462// Shared Fail Detection
1463// /////////////////////////////////////////////////////////////////////////////
1464// Updated to meet these new features:
1465// 1.When mbist_done signal is asserted when it completes all the
1466// tests, it also need to assert static membist fail signal if
1467// there were any failures during the tests.
1468// 2.The mbist_fail signal won't be sticky bit from membist
1469// engine. The TCU will make it sticky fail bit as needed.
1470
1471
1472 sii_mb1_ctlmsff_ctl_macro__width_8 fail_reg (
1473 .scan_in(fail_reg_scanin),
1474 .scan_out(fail_reg_scanout),
1475 .din ( fail_reg_in[7:0] ),
1476 .dout ( fail_reg_out[7:0] ),
1477 .l1clk(l1clk),
1478 .siclk(siclk),
1479 .soclk(soclk));
1480
1481
1482 assign fail_reg_in[0] = reset_engine ? 1'b0: qual_ipdbdq1_fail | fail_reg_out[0];
1483 assign fail_reg_in[1] = reset_engine ? 1'b0: qual_ipdodq1_fail | fail_reg_out[1];
1484 assign fail_reg_in[2] = reset_engine ? 1'b0: qual_ipdbdq0_fail | fail_reg_out[2];
1485 assign fail_reg_in[3] = reset_engine ? 1'b0: qual_ipdodq0_fail | fail_reg_out[3];
1486 assign fail_reg_in[4] = reset_engine ? 1'b0: qual_ipdbhq1_fail | fail_reg_out[4];
1487 assign fail_reg_in[5] = reset_engine ? 1'b0: qual_ipdohq1_fail | fail_reg_out[5];
1488 assign fail_reg_in[6] = reset_engine ? 1'b0: qual_ipdbhq0_fail | fail_reg_out[6];
1489 assign fail_reg_in[7] = reset_engine ? 1'b0: qual_ipdohq0_fail | fail_reg_out[7];
1490
1491 assign qual_ipdbdq1_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[0] & ~sii_mb1_ipd_data_or_hdr_sel_piped;
1492 assign qual_ipdodq1_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[1] & ~sii_mb1_ipd_data_or_hdr_sel_piped;
1493 assign qual_ipdbdq0_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[2] & ~sii_mb1_ipd_data_or_hdr_sel_piped;
1494 assign qual_ipdodq0_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[3] & ~sii_mb1_ipd_data_or_hdr_sel_piped;
1495 assign qual_ipdbhq1_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[0] & sii_mb1_ipd_data_or_hdr_sel_piped;
1496 assign qual_ipdohq1_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[1] & sii_mb1_ipd_data_or_hdr_sel_piped;
1497 assign qual_ipdbhq0_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[2] & sii_mb1_ipd_data_or_hdr_sel_piped;
1498 assign qual_ipdohq0_fail = fail_detect & sii_mb1_1of4ipd_sel_piped[3] & sii_mb1_ipd_data_or_hdr_sel_piped;
1499
1500
1501 assign fail = mbist_done ? |fail_reg_out[7:0]:
1502 qual_ipdbdq1_fail | qual_ipdodq1_fail |
1503 qual_ipdbdq0_fail | qual_ipdodq0_fail |
1504 qual_ipdbhq1_fail | qual_ipdohq1_fail |
1505 qual_ipdbhq0_fail | qual_ipdohq0_fail;
1506
1507
1508 assign fail_detect = sii_mb1_ipd_data_or_hdr_sel_piped ?
1509 (({9{sii_ipd_piped_wdata[7:0]}} != read_data[71:0]) && sii_ipd_piped_ren) :
1510 sii_mb1_ipd_data_hibits_sel_piped ?
1511 (({ sii_ipd_piped_wdata[0], sii_ipd_piped_wdata[7:0], sii_ipd_piped_wdata[7:4], {8{sii_ipd_piped_wdata[7:0]}} } != read_data[76:0]) && sii_ipd_piped_ren) :
1512 (({ sii_ipd_piped_wdata[7:4], {2{sii_ipd_piped_wdata[3:0]}}, {8{sii_ipd_piped_wdata[7:0]}} } != read_data[75:0]) && sii_ipd_piped_ren) ;
1513// (({ sii_ipd_piped_wdata[0], sii_ipd_piped_wdata[7:4], {9{sii_ipd_piped_wdata[7:0]}} } != read_data[76:0]) && sii_ipd_piped_ren) :
1514// (({ sii_ipd_piped_wdata[3:0], {9{sii_ipd_piped_wdata[7:0]}} } != read_data[75:0]) && sii_ipd_piped_ren) ;
1515
1516
1517
1518
1519// fixscan start:
1520assign config_reg_scanin = scan_in ;
1521assign user_data_reg_scanin = config_reg_scanout ;
1522assign user_start_addr_reg_scanin = user_data_reg_scanout ;
1523assign user_stop_addr_reg_scanin = user_start_addr_reg_scanout;
1524assign user_incr_addr_reg_scanin = user_stop_addr_reg_scanout;
1525assign user_array_sel_reg_scanin = user_incr_addr_reg_scanout;
1526assign user_cmpsel_reg_scanin = user_array_sel_reg_scanout;
1527assign user_bisi_wr_reg_scanin = user_cmpsel_reg_scanout ;
1528assign user_bisi_rd_reg_scanin = user_bisi_wr_reg_scanout ;
1529assign start_transition_reg_scanin = user_bisi_rd_reg_scanout ;
1530assign run_reg_scanin = start_transition_reg_scanout;
1531assign counter_reg_scanin = run_reg_scanout ;
1532assign read_data_reg_scanin = counter_reg_scanout ;
1533assign ipdodq0_wr_rd_en_reg_scanin = read_data_reg_scanout ;
1534assign ipdodq0_wr_en_reg_scanin = ipdodq0_wr_rd_en_reg_scanout;
1535assign ipdodq1_wr_rd_en_reg_scanin = ipdodq0_wr_en_reg_scanout;
1536assign ipdodq1_wr_en_reg_scanin = ipdodq1_wr_rd_en_reg_scanout;
1537assign ipdbdq0_wr_rd_en_reg_scanin = ipdodq1_wr_en_reg_scanout;
1538assign ipdbdq0_wr_en_reg_scanin = ipdbdq0_wr_rd_en_reg_scanout;
1539assign ipdbdq1_wr_rd_en_reg_scanin = ipdbdq0_wr_en_reg_scanout;
1540assign ipdbdq1_wr_en_reg_scanin = ipdbdq1_wr_rd_en_reg_scanout;
1541assign ipdohq0_wr_rd_en_reg_scanin = ipdbdq1_wr_en_reg_scanout;
1542assign ipdohq0_wr_en_reg_scanin = ipdohq0_wr_rd_en_reg_scanout;
1543assign ipdohq1_wr_rd_en_reg_scanin = ipdohq0_wr_en_reg_scanout;
1544assign ipdohq1_wr_en_reg_scanin = ipdohq1_wr_rd_en_reg_scanout;
1545assign ipdbhq0_wr_rd_en_reg_scanin = ipdohq1_wr_en_reg_scanout;
1546assign ipdbhq0_wr_en_reg_scanin = ipdbhq0_wr_rd_en_reg_scanout;
1547assign ipdbhq1_wr_rd_en_reg_scanin = ipdbhq0_wr_en_reg_scanout;
1548assign ipdbhq1_wr_en_reg_scanin = ipdbhq1_wr_rd_en_reg_scanout;
1549assign sel_reg_scanin = ipdbhq1_wr_en_reg_scanout;
1550assign addr_reg_scanin = sel_reg_scanout ;
1551assign wr_addr_reg_scanin = addr_reg_scanout ;
1552assign wdata_reg_scanin = wr_addr_reg_scanout ;
1553assign wdata_reg2_scanin = wdata_reg_scanout ;
1554assign done_reg_scanin = wdata_reg2_scanout ;
1555assign mbist_fail_reg_scanin = done_reg_scanout ;
1556assign control_reg_scanin = mbist_fail_reg_scanout ;
1557assign done_counter_reg_scanin = control_reg_scanout ;
1558assign data_pipe_reg1_scanin = done_counter_reg_scanout ;
1559assign data_pipe_reg2_scanin = data_pipe_reg1_scanout ;
1560assign data_pipe_reg3_scanin = data_pipe_reg2_scanout ;
1561assign data_pipe_reg4_scanin = data_pipe_reg3_scanout ;
1562assign data_pipe_reg5_scanin = data_pipe_reg4_scanout ;
1563assign ren_pipe_reg1_scanin = data_pipe_reg5_scanout ;
1564assign ren_pipe_reg2_scanin = ren_pipe_reg1_scanout ;
1565assign ren_pipe_reg3_scanin = ren_pipe_reg2_scanout ;
1566assign ren_pipe_reg4_scanin = ren_pipe_reg3_scanout ;
1567assign ren_pipe_reg5_scanin = ren_pipe_reg4_scanout ;
1568assign ren_pipe_reg6_scanin = ren_pipe_reg5_scanout ;
1569assign ren_pipe_reg7_scanin = ren_pipe_reg6_scanout ;
1570assign hdr_sel_reg_scanin = ren_pipe_reg7_scanout ;
1571assign hdr_sel_reg2_scanin = hdr_sel_reg_scanout ;
1572assign hdr_sel_reg3_scanin = hdr_sel_reg2_scanout ;
1573assign hdr_sel_reg4_scanin = hdr_sel_reg3_scanout ;
1574assign encoded_1of4ipd_sel_reg_scanin = hdr_sel_reg4_scanout ;
1575assign encoded_1of4ipd_sel_reg2_scanin = encoded_1of4ipd_sel_reg_scanout;
1576assign encoded_1of4ipd_sel_reg3_scanin = encoded_1of4ipd_sel_reg2_scanout;
1577assign ipd_data_hibits_sel_reg_scanin = encoded_1of4ipd_sel_reg3_scanout;
1578assign ipd_data_hibits_sel_reg2_scanin = ipd_data_hibits_sel_reg_scanout;
1579assign ipd_data_hibits_sel_reg3_scanin = ipd_data_hibits_sel_reg2_scanout;
1580assign sel_pipe_reg1_scanin = ipd_data_hibits_sel_reg3_scanout;
1581assign sel_pipe_reg2_scanin = sel_pipe_reg1_scanout ;
1582assign sel_pipe_reg3_scanin = sel_pipe_reg2_scanout ;
1583assign spares_scanin = sel_pipe_reg3_scanout ;
1584assign fail_reg_scanin = spares_scanout ;
1585assign scan_out = fail_reg_scanout ;
1586// fixscan end:
1587endmodule // sii_mb1_ctl
1588
1589
1590
1591
1592
1593
1594// any PARAMS parms go into naming of macro
1595
1596module sii_mb1_ctll1clkhdr_ctl_macro (
1597 l2clk,
1598 l1en,
1599 pce_ov,
1600 stop,
1601 se,
1602 l1clk);
1603
1604
1605 input l2clk;
1606 input l1en;
1607 input pce_ov;
1608 input stop;
1609 input se;
1610 output l1clk;
1611
1612
1613
1614
1615
1616cl_sc1_l1hdr_8x c_0 (
1617
1618
1619 .l2clk(l2clk),
1620 .pce(l1en),
1621 .l1clk(l1clk),
1622 .se(se),
1623 .pce_ov(pce_ov),
1624 .stop(stop)
1625);
1626
1627
1628
1629endmodule
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643// any PARAMS parms go into naming of macro
1644
1645module sii_mb1_ctlmsff_ctl_macro__width_9 (
1646 din,
1647 l1clk,
1648 scan_in,
1649 siclk,
1650 soclk,
1651 dout,
1652 scan_out);
1653wire [8:0] fdin;
1654wire [7:0] so;
1655
1656 input [8:0] din;
1657 input l1clk;
1658 input scan_in;
1659
1660
1661 input siclk;
1662 input soclk;
1663
1664 output [8:0] dout;
1665 output scan_out;
1666assign fdin[8:0] = din[8:0];
1667
1668
1669
1670
1671
1672
1673dff #(9) d0_0 (
1674.l1clk(l1clk),
1675.siclk(siclk),
1676.soclk(soclk),
1677.d(fdin[8:0]),
1678.si({scan_in,so[7:0]}),
1679.so({so[7:0],scan_out}),
1680.q(dout[8:0])
1681);
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694endmodule
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708// any PARAMS parms go into naming of macro
1709
1710module sii_mb1_ctlmsff_ctl_macro__width_8 (
1711 din,
1712 l1clk,
1713 scan_in,
1714 siclk,
1715 soclk,
1716 dout,
1717 scan_out);
1718wire [7:0] fdin;
1719wire [6:0] so;
1720
1721 input [7:0] din;
1722 input l1clk;
1723 input scan_in;
1724
1725
1726 input siclk;
1727 input soclk;
1728
1729 output [7:0] dout;
1730 output scan_out;
1731assign fdin[7:0] = din[7:0];
1732
1733
1734
1735
1736
1737
1738dff #(8) d0_0 (
1739.l1clk(l1clk),
1740.siclk(siclk),
1741.soclk(soclk),
1742.d(fdin[7:0]),
1743.si({scan_in,so[6:0]}),
1744.so({so[6:0],scan_out}),
1745.q(dout[7:0])
1746);
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759endmodule
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773// any PARAMS parms go into naming of macro
1774
1775module sii_mb1_ctlmsff_ctl_macro__width_6 (
1776 din,
1777 l1clk,
1778 scan_in,
1779 siclk,
1780 soclk,
1781 dout,
1782 scan_out);
1783wire [5:0] fdin;
1784wire [4:0] so;
1785
1786 input [5:0] din;
1787 input l1clk;
1788 input scan_in;
1789
1790
1791 input siclk;
1792 input soclk;
1793
1794 output [5:0] dout;
1795 output scan_out;
1796assign fdin[5:0] = din[5:0];
1797
1798
1799
1800
1801
1802
1803dff #(6) d0_0 (
1804.l1clk(l1clk),
1805.siclk(siclk),
1806.soclk(soclk),
1807.d(fdin[5:0]),
1808.si({scan_in,so[4:0]}),
1809.so({so[4:0],scan_out}),
1810.q(dout[5:0])
1811);
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824endmodule
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838// any PARAMS parms go into naming of macro
1839
1840module sii_mb1_ctlmsff_ctl_macro__width_3 (
1841 din,
1842 l1clk,
1843 scan_in,
1844 siclk,
1845 soclk,
1846 dout,
1847 scan_out);
1848wire [2:0] fdin;
1849wire [1:0] so;
1850
1851 input [2:0] din;
1852 input l1clk;
1853 input scan_in;
1854
1855
1856 input siclk;
1857 input soclk;
1858
1859 output [2:0] dout;
1860 output scan_out;
1861assign fdin[2:0] = din[2:0];
1862
1863
1864
1865
1866
1867
1868dff #(3) d0_0 (
1869.l1clk(l1clk),
1870.siclk(siclk),
1871.soclk(soclk),
1872.d(fdin[2:0]),
1873.si({scan_in,so[1:0]}),
1874.so({so[1:0],scan_out}),
1875.q(dout[2:0])
1876);
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889endmodule
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903// any PARAMS parms go into naming of macro
1904
1905module sii_mb1_ctlmsff_ctl_macro__width_1 (
1906 din,
1907 l1clk,
1908 scan_in,
1909 siclk,
1910 soclk,
1911 dout,
1912 scan_out);
1913wire [0:0] fdin;
1914
1915 input [0:0] din;
1916 input l1clk;
1917 input scan_in;
1918
1919
1920 input siclk;
1921 input soclk;
1922
1923 output [0:0] dout;
1924 output scan_out;
1925assign fdin[0:0] = din[0:0];
1926
1927
1928
1929
1930
1931
1932dff #(1) d0_0 (
1933.l1clk(l1clk),
1934.siclk(siclk),
1935.soclk(soclk),
1936.d(fdin[0:0]),
1937.si(scan_in),
1938.so(scan_out),
1939.q(dout[0:0])
1940);
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953endmodule
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967// any PARAMS parms go into naming of macro
1968
1969module sii_mb1_ctlmsff_ctl_macro__width_4 (
1970 din,
1971 l1clk,
1972 scan_in,
1973 siclk,
1974 soclk,
1975 dout,
1976 scan_out);
1977wire [3:0] fdin;
1978wire [2:0] so;
1979
1980 input [3:0] din;
1981 input l1clk;
1982 input scan_in;
1983
1984
1985 input siclk;
1986 input soclk;
1987
1988 output [3:0] dout;
1989 output scan_out;
1990assign fdin[3:0] = din[3:0];
1991
1992
1993
1994
1995
1996
1997dff #(4) d0_0 (
1998.l1clk(l1clk),
1999.siclk(siclk),
2000.soclk(soclk),
2001.d(fdin[3:0]),
2002.si({scan_in,so[2:0]}),
2003.so({so[2:0],scan_out}),
2004.q(dout[3:0])
2005);
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018endmodule
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032// any PARAMS parms go into naming of macro
2033
2034module sii_mb1_ctlmsff_ctl_macro__width_78 (
2035 din,
2036 l1clk,
2037 scan_in,
2038 siclk,
2039 soclk,
2040 dout,
2041 scan_out);
2042wire [77:0] fdin;
2043wire [76:0] so;
2044
2045 input [77:0] din;
2046 input l1clk;
2047 input scan_in;
2048
2049
2050 input siclk;
2051 input soclk;
2052
2053 output [77:0] dout;
2054 output scan_out;
2055assign fdin[77:0] = din[77:0];
2056
2057
2058
2059
2060
2061
2062dff #(78) d0_0 (
2063.l1clk(l1clk),
2064.siclk(siclk),
2065.soclk(soclk),
2066.d(fdin[77:0]),
2067.si({scan_in,so[76:0]}),
2068.so({so[76:0],scan_out}),
2069.q(dout[77:0])
2070);
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083endmodule
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097// any PARAMS parms go into naming of macro
2098
2099module sii_mb1_ctlmsff_ctl_macro__width_2 (
2100 din,
2101 l1clk,
2102 scan_in,
2103 siclk,
2104 soclk,
2105 dout,
2106 scan_out);
2107wire [1:0] fdin;
2108wire [0:0] so;
2109
2110 input [1:0] din;
2111 input l1clk;
2112 input scan_in;
2113
2114
2115 input siclk;
2116 input soclk;
2117
2118 output [1:0] dout;
2119 output scan_out;
2120assign fdin[1:0] = din[1:0];
2121
2122
2123
2124
2125
2126
2127dff #(2) d0_0 (
2128.l1clk(l1clk),
2129.siclk(siclk),
2130.soclk(soclk),
2131.d(fdin[1:0]),
2132.si({scan_in,so[0:0]}),
2133.so({so[0:0],scan_out}),
2134.q(dout[1:0])
2135);
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148endmodule
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162// any PARAMS parms go into naming of macro
2163
2164module sii_mb1_ctlmsff_ctl_macro__width_22 (
2165 din,
2166 l1clk,
2167 scan_in,
2168 siclk,
2169 soclk,
2170 dout,
2171 scan_out);
2172wire [21:0] fdin;
2173wire [20:0] so;
2174
2175 input [21:0] din;
2176 input l1clk;
2177 input scan_in;
2178
2179
2180 input siclk;
2181 input soclk;
2182
2183 output [21:0] dout;
2184 output scan_out;
2185assign fdin[21:0] = din[21:0];
2186
2187
2188
2189
2190
2191
2192dff #(22) d0_0 (
2193.l1clk(l1clk),
2194.siclk(siclk),
2195.soclk(soclk),
2196.d(fdin[21:0]),
2197.si({scan_in,so[20:0]}),
2198.so({so[20:0],scan_out}),
2199.q(dout[21:0])
2200);
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213endmodule
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223// Description: Spare gate macro for control blocks
2224//
2225// Param num controls the number of times the macro is added
2226// flops=0 can be used to use only combination spare logic
2227
2228
2229module sii_mb1_ctlspare_ctl_macro__num_3 (
2230 l1clk,
2231 scan_in,
2232 siclk,
2233 soclk,
2234 scan_out);
2235wire si_0;
2236wire so_0;
2237wire spare0_flop_unused;
2238wire spare0_buf_32x_unused;
2239wire spare0_nand3_8x_unused;
2240wire spare0_inv_8x_unused;
2241wire spare0_aoi22_4x_unused;
2242wire spare0_buf_8x_unused;
2243wire spare0_oai22_4x_unused;
2244wire spare0_inv_16x_unused;
2245wire spare0_nand2_16x_unused;
2246wire spare0_nor3_4x_unused;
2247wire spare0_nand2_8x_unused;
2248wire spare0_buf_16x_unused;
2249wire spare0_nor2_16x_unused;
2250wire spare0_inv_32x_unused;
2251wire si_1;
2252wire so_1;
2253wire spare1_flop_unused;
2254wire spare1_buf_32x_unused;
2255wire spare1_nand3_8x_unused;
2256wire spare1_inv_8x_unused;
2257wire spare1_aoi22_4x_unused;
2258wire spare1_buf_8x_unused;
2259wire spare1_oai22_4x_unused;
2260wire spare1_inv_16x_unused;
2261wire spare1_nand2_16x_unused;
2262wire spare1_nor3_4x_unused;
2263wire spare1_nand2_8x_unused;
2264wire spare1_buf_16x_unused;
2265wire spare1_nor2_16x_unused;
2266wire spare1_inv_32x_unused;
2267wire si_2;
2268wire so_2;
2269wire spare2_flop_unused;
2270wire spare2_buf_32x_unused;
2271wire spare2_nand3_8x_unused;
2272wire spare2_inv_8x_unused;
2273wire spare2_aoi22_4x_unused;
2274wire spare2_buf_8x_unused;
2275wire spare2_oai22_4x_unused;
2276wire spare2_inv_16x_unused;
2277wire spare2_nand2_16x_unused;
2278wire spare2_nor3_4x_unused;
2279wire spare2_nand2_8x_unused;
2280wire spare2_buf_16x_unused;
2281wire spare2_nor2_16x_unused;
2282wire spare2_inv_32x_unused;
2283
2284
2285input l1clk;
2286input scan_in;
2287input siclk;
2288input soclk;
2289output scan_out;
2290
2291cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
2292 .siclk(siclk),
2293 .soclk(soclk),
2294 .si(si_0),
2295 .so(so_0),
2296 .d(1'b0),
2297 .q(spare0_flop_unused));
2298assign si_0 = scan_in;
2299
2300cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
2301 .out(spare0_buf_32x_unused));
2302cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
2303 .in1(1'b1),
2304 .in2(1'b1),
2305 .out(spare0_nand3_8x_unused));
2306cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
2307 .out(spare0_inv_8x_unused));
2308cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
2309 .in01(1'b1),
2310 .in10(1'b1),
2311 .in11(1'b1),
2312 .out(spare0_aoi22_4x_unused));
2313cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
2314 .out(spare0_buf_8x_unused));
2315cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
2316 .in01(1'b1),
2317 .in10(1'b1),
2318 .in11(1'b1),
2319 .out(spare0_oai22_4x_unused));
2320cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
2321 .out(spare0_inv_16x_unused));
2322cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
2323 .in1(1'b1),
2324 .out(spare0_nand2_16x_unused));
2325cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
2326 .in1(1'b0),
2327 .in2(1'b0),
2328 .out(spare0_nor3_4x_unused));
2329cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
2330 .in1(1'b1),
2331 .out(spare0_nand2_8x_unused));
2332cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
2333 .out(spare0_buf_16x_unused));
2334cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
2335 .in1(1'b0),
2336 .out(spare0_nor2_16x_unused));
2337cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
2338 .out(spare0_inv_32x_unused));
2339
2340cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
2341 .siclk(siclk),
2342 .soclk(soclk),
2343 .si(si_1),
2344 .so(so_1),
2345 .d(1'b0),
2346 .q(spare1_flop_unused));
2347assign si_1 = so_0;
2348
2349cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
2350 .out(spare1_buf_32x_unused));
2351cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
2352 .in1(1'b1),
2353 .in2(1'b1),
2354 .out(spare1_nand3_8x_unused));
2355cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
2356 .out(spare1_inv_8x_unused));
2357cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
2358 .in01(1'b1),
2359 .in10(1'b1),
2360 .in11(1'b1),
2361 .out(spare1_aoi22_4x_unused));
2362cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
2363 .out(spare1_buf_8x_unused));
2364cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
2365 .in01(1'b1),
2366 .in10(1'b1),
2367 .in11(1'b1),
2368 .out(spare1_oai22_4x_unused));
2369cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
2370 .out(spare1_inv_16x_unused));
2371cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
2372 .in1(1'b1),
2373 .out(spare1_nand2_16x_unused));
2374cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
2375 .in1(1'b0),
2376 .in2(1'b0),
2377 .out(spare1_nor3_4x_unused));
2378cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
2379 .in1(1'b1),
2380 .out(spare1_nand2_8x_unused));
2381cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
2382 .out(spare1_buf_16x_unused));
2383cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
2384 .in1(1'b0),
2385 .out(spare1_nor2_16x_unused));
2386cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
2387 .out(spare1_inv_32x_unused));
2388
2389cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
2390 .siclk(siclk),
2391 .soclk(soclk),
2392 .si(si_2),
2393 .so(so_2),
2394 .d(1'b0),
2395 .q(spare2_flop_unused));
2396assign si_2 = so_1;
2397
2398cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
2399 .out(spare2_buf_32x_unused));
2400cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
2401 .in1(1'b1),
2402 .in2(1'b1),
2403 .out(spare2_nand3_8x_unused));
2404cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
2405 .out(spare2_inv_8x_unused));
2406cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
2407 .in01(1'b1),
2408 .in10(1'b1),
2409 .in11(1'b1),
2410 .out(spare2_aoi22_4x_unused));
2411cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
2412 .out(spare2_buf_8x_unused));
2413cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
2414 .in01(1'b1),
2415 .in10(1'b1),
2416 .in11(1'b1),
2417 .out(spare2_oai22_4x_unused));
2418cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
2419 .out(spare2_inv_16x_unused));
2420cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
2421 .in1(1'b1),
2422 .out(spare2_nand2_16x_unused));
2423cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
2424 .in1(1'b0),
2425 .in2(1'b0),
2426 .out(spare2_nor3_4x_unused));
2427cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
2428 .in1(1'b1),
2429 .out(spare2_nand2_8x_unused));
2430cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
2431 .out(spare2_buf_16x_unused));
2432cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
2433 .in1(1'b0),
2434 .out(spare2_nor2_16x_unused));
2435cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
2436 .out(spare2_inv_32x_unused));
2437assign scan_out = so_2;
2438
2439
2440
2441endmodule
2442