Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / niu / rtl / niu_mb5.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: niu_mb5.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 ============================================
35
36///////////////////////////////////////////////////////////////////////////////
37//
38//
39// Released: 12/06/02
40// Contacts: carlos.castil@sun.com/shahryar.aryani@sun.com
41// Description: Memory BIST Controller for Niagara2 NIU core
42// Block Type: Control Block
43// Chip Name:
44// Unit Name:
45// Module: mbist_engine
46// Where Instantiated:
47//
48//
49// (c) 2005 Sun Microsystems, Inc.
50// Sun Proprietary/Confidential
51// Internal use only.
52//
53// All rights reserved. No part of this design may be reproduced stored
54// in a retrieval system, or transmitted, in any form or by any means,
55// electronic, mechanical, photocopying, recording, or otherwise, without
56// prior written permission of Sun Microsystems, Inc.
57//
58///////////////////////////////////////////////////////////////////////////////
59
60
61module niu_mb5 (
62 niu_mb5_tcam_cntrl_rd_en,
63 niu_mb5_tcam_cntrl_wr_en,
64 niu_mb5_addr,
65 niu_mb5_run,
66 niu_tcu_mbist_fail_5,
67 niu_tcu_mbist_done_5,
68 mb5_scan_out,
69 niu_mb5_data_inp,
70 niu_mb5_pio_sel,
71 niu_mb5_cam_compare,
72 l1clk,
73 mb5_scan_in,
74 tcu_aclk,
75 tcu_bclk,
76 rst,
77 tcu_niu_mbist_start_5,
78 niu_mb5_msk_dat_out,
79 tcu_mbist_bisi_en,
80 tcu_mbist_user_mode,
81 niu_mb5_cam_haddr,
82 niu_mb5_cam_valid,
83 niu_mb5_rd_vld,
84 niu_mb5_cam_hit);
85wire siclk;
86wire soclk;
87wire reset;
88wire config_reg_scanin;
89wire config_reg_scanout;
90wire [7:0] config_in;
91wire [7:0] config_out;
92wire start_transition;
93wire reset_engine;
94wire mbist_user_loop_mode;
95wire mbist_done;
96wire run;
97wire bisi;
98wire user_mode;
99wire user_data_mode;
100wire user_addr_mode;
101wire user_loop_mode;
102wire ten_n_mode;
103wire mbist_user_data_mode;
104wire mbist_user_addr_mode;
105wire mbist_ten_n_mode;
106wire user_data_reg_scanin;
107wire user_data_reg_scanout;
108wire [7:0] user_data_in;
109wire [7:0] user_data_out;
110wire user_start_addr_reg_scanin;
111wire user_start_addr_reg_scanout;
112wire [7:0] user_start_addr_in;
113wire [7:0] user_start_addr;
114wire user_stop_addr_reg_scanin;
115wire user_stop_addr_reg_scanout;
116wire [7:0] user_stop_addr_in;
117wire [7:0] user_stop_addr;
118wire user_incr_addr_reg_scanin;
119wire user_incr_addr_reg_scanout;
120wire [7:0] user_incr_addr_in;
121wire [7:0] user_incr_addr;
122wire user_cam_mode_reg_scanin;
123wire user_cam_mode_reg_scanout;
124wire user_cam_mode_in;
125wire user_cam_mode;
126wire user_cam_test_select_reg_scanin;
127wire user_cam_test_select_reg_scanout;
128wire [3:0] user_cam_test_sel_in;
129wire [3:0] user_cam_test_sel;
130wire user_bisi_wr_reg_scanin;
131wire user_bisi_wr_reg_scanout;
132wire user_bisi_wr_mode_in;
133wire user_bisi_wr_mode;
134wire user_bisi_rd_reg_scanin;
135wire user_bisi_rd_reg_scanout;
136wire user_bisi_rd_mode_in;
137wire user_bisi_rd_mode;
138wire mbist_user_bisi_wr_mode;
139wire mbist_user_bisi_wr_rd_mode;
140wire start_transition_reg_scanin;
141wire start_transition_reg_scanout;
142wire start_transition_piped;
143wire run_reg_scanin;
144wire run_reg_scanout;
145wire run1_reg_scanin;
146wire run1_reg_scanout;
147wire run1_in;
148wire run1_out;
149wire run2_reg_scanin;
150wire run2_reg_scanout;
151wire run2_in;
152wire run2_out;
153wire run_piped3;
154wire msb;
155wire done_reg_scanin;
156wire done_reg_scanout;
157wire mbist_fail_reg_scanin;
158wire mbist_fail_reg_scanout;
159wire fail;
160wire walking0_8bit_reg_scanin;
161wire walking0_8bit_reg_scanout;
162wire [7:0] walking0_8bit_in;
163wire [7:0] walking0_8bit;
164wire ctest3;
165wire ctest4;
166wire cseq1;
167wire crw1;
168wire op_hold;
169wire [7:0] cam_addr;
170wire array_write;
171wire array_read;
172wire [7:0] mbist_wdata;
173wire ctest1;
174wire ctest7;
175wire cseq0;
176wire ctest8;
177wire ctest0;
178wire ctest2;
179wire ctest5;
180wire ctest6;
181wire crw0;
182wire crw3;
183wire crw2;
184wire op_hold_reg_scanin;
185wire op_hold_reg_scanout;
186wire op_hold_in;
187wire cambist;
188wire control_reg_scanin;
189wire control_reg_scanout;
190wire [19:0] control_in;
191wire [19:0] control_out;
192wire bisi_wr_rd;
193wire [1:0] data_control;
194wire address_mix;
195wire [3:0] march_element;
196wire [7:0] array_address;
197wire upaddress_march;
198wire [2:0] read_write_control;
199wire five_cycle_march;
200wire one_cycle_march;
201wire increment_addr;
202wire [7:0] start_addr;
203wire [7:0] next_array_address;
204wire next_upaddr_march;
205wire next_downaddr_march;
206wire [7:0] stop_addr;
207wire [8:0] overflow_addr;
208wire [7:0] incr_addr;
209wire overflow;
210wire [8:0] compare_addr;
211wire [7:0] add;
212wire [7:0] adj_address;
213wire [7:0] mbist_address;
214wire increment_march_elem;
215wire [1:0] next_data_control;
216wire next_address_mix;
217wire [3:0] next_march_element;
218wire true_data;
219wire [7:0] data_pattern;
220wire done_counter_reg_scanin;
221wire done_counter_reg_scanout;
222wire [2:0] done_counter_in;
223wire [2:0] done_counter_out;
224wire final_msb;
225wire cam_msb;
226wire cam_rd_en;
227wire cam_wr_en;
228wire cam_lkup_en;
229wire cseq;
230wire user_mode_mask_init_reg_scanin;
231wire user_mode_mask_init_reg_scanout;
232wire user_mode_mask_init_in;
233wire user_mode_mask_init;
234wire cam_cntl_reg_scanin;
235wire cam_cntl_reg_scanout;
236wire [15:0] cam_in;
237wire [15:0] cam_out;
238wire [3:0] ctest;
239wire [1:0] crw;
240wire [15:0] qual_cam;
241wire [3:0] next_ctest;
242wire next_cseq;
243wire [7:0] next_cam_addr;
244wire [1:0] next_crw;
245wire add_pipe_reg1_scanin;
246wire add_pipe_reg1_scanout;
247wire [6:0] add_pipe_reg1_in;
248wire [6:0] add_pipe_reg1_out;
249wire add_pipe_reg2_scanin;
250wire add_pipe_reg2_scanout;
251wire [6:0] add_pipe_reg2_in;
252wire [6:0] add_pipe_reg2_out;
253wire add_pipe_reg3_scanin;
254wire add_pipe_reg3_scanout;
255wire [6:0] add_pipe_reg3_in;
256wire [6:0] add_pipe_reg3_out;
257wire add_pipe_reg4_scanin;
258wire add_pipe_reg4_scanout;
259wire [6:0] add_pipe_reg4_in;
260wire [6:0] add_pipe_reg4_out;
261wire [6:0] mbist_piped_address;
262wire data_pipe_reg1_scanin;
263wire data_pipe_reg1_scanout;
264wire [7:0] data_pipe_reg1_in;
265wire [7:0] data_pipe_out1;
266wire data_pipe_reg2_scanin;
267wire data_pipe_reg2_scanout;
268wire [7:0] data_pipe_reg2_in;
269wire [7:0] data_pipe_out2;
270wire data_pipe_reg3_scanin;
271wire data_pipe_reg3_scanout;
272wire [7:0] data_pipe_reg3_in;
273wire [7:0] data_pipe_out3;
274wire [7:0] piped_wdata;
275wire ren_pipe_reg1_scanin;
276wire ren_pipe_reg1_scanout;
277wire ren_pipe_reg1_in;
278wire ren_pipe_out1;
279wire ren_pipe_reg2_scanin;
280wire ren_pipe_reg2_scanout;
281wire ren_pipe_reg2_in;
282wire ren_pipe_out2;
283wire ren_pipe_reg3_scanin;
284wire ren_pipe_reg3_scanout;
285wire ren_pipe_reg3_in;
286wire ren_pipe_out3;
287wire piped_ren;
288wire cam_ren_pipe_reg1_scanin;
289wire cam_ren_pipe_reg1_scanout;
290wire cam_ren_pipe_reg1_in;
291wire cam_ren_pipe_out1;
292wire cam_ren_pipe_reg2_scanin;
293wire cam_ren_pipe_reg2_scanout;
294wire cam_ren_pipe_reg2_in;
295wire cam_ren_pipe_out2;
296wire cam_ren_pipe_reg3_scanin;
297wire cam_ren_pipe_reg3_scanout;
298wire cam_ren_pipe_reg3_in;
299wire cam_ren_pipe_out3;
300wire piped_cam_ren;
301wire cam_lkup_en_pipe_reg1_scanin;
302wire cam_lkup_en_pipe_reg1_scanout;
303wire cam_lkup_en_pipe_reg1_in;
304wire cam_lkup_en_pipe_out1;
305wire cam_lkup_en_pipe_reg2_scanin;
306wire cam_lkup_en_pipe_reg2_scanout;
307wire cam_lkup_en_pipe_reg2_in;
308wire cam_lkup_en_pipe_out2;
309wire cam_lkup_en_pipe_reg3_scanin;
310wire cam_lkup_en_pipe_reg3_scanout;
311wire cam_lkup_en_pipe_reg3_in;
312wire cam_lkup_en_pipe_out3;
313wire cam_lkup_en_pipe_reg4_scanin;
314wire cam_lkup_en_pipe_reg4_scanout;
315wire cam_lkup_en_pipe_reg4_in;
316wire cam_lkup_en_pipe_out4;
317wire piped_cam_lkup_en;
318wire ctest_pipe_reg1_scanin;
319wire ctest_pipe_reg1_scanout;
320wire [2:0] ctest_pipe_reg1_in;
321wire [2:0] ctest_pipe_out1;
322wire ctest_pipe_reg2_scanin;
323wire ctest_pipe_reg2_scanout;
324wire [2:0] ctest_pipe_reg2_in;
325wire [2:0] ctest_pipe_out2;
326wire ctest_pipe_reg3_scanin;
327wire ctest_pipe_reg3_scanout;
328wire [2:0] ctest_pipe_reg3_in;
329wire [2:0] ctest_pipe_out3;
330wire ctest_pipe_reg4_scanin;
331wire ctest_pipe_reg4_scanout;
332wire [2:0] ctest_pipe_reg4_in;
333wire [2:0] ctest_pipe_out4;
334wire [2:0] ctest_piped4;
335wire fail_reg_scanin;
336wire fail_reg_scanout;
337wire fail_reg_in;
338wire fail_reg_out;
339wire qual_fail;
340wire fail_detect;
341wire cam_fail_reg_out;
342wire qual_cam_fail;
343wire cam_fail_reg_scanin;
344wire cam_fail_reg_scanout;
345wire cam_fail_reg_in;
346wire cam_fail_detect;
347
348
349
350
351// /////////////////////////////////////////////////////////////////////////////
352// Outputs
353// /////////////////////////////////////////////////////////////////////////////
354
355 output niu_mb5_tcam_cntrl_rd_en;
356 output niu_mb5_tcam_cntrl_wr_en;
357
358 output [6:0] niu_mb5_addr;
359// output [7:0] niu_mb5_wdata;
360 output niu_mb5_run;
361
362 output niu_tcu_mbist_fail_5;
363 output niu_tcu_mbist_done_5;
364
365 output mb5_scan_out;
366
367 output [199:0] niu_mb5_data_inp;
368 output niu_mb5_pio_sel;
369 output niu_mb5_cam_compare;
370
371
372// /////////////////////////////////////////////////////////////////////////////
373// Inputs
374// /////////////////////////////////////////////////////////////////////////////
375
376// input iol2clk;
377 input l1clk;
378// input tcu_scan_en;
379 input mb5_scan_in;
380// input tcu_pce_ov; // scan signals
381// input tcu_clk_stop;
382 input tcu_aclk;
383 input tcu_bclk;
384 input rst; // Active high reset!
385
386 input tcu_niu_mbist_start_5;
387
388 input [199:0] niu_mb5_msk_dat_out;
389
390 input tcu_mbist_bisi_en;
391 input tcu_mbist_user_mode;
392
393 input [6:0] niu_mb5_cam_haddr;
394 input niu_mb5_cam_valid;
395 input niu_mb5_rd_vld;
396 input niu_mb5_cam_hit;
397
398
399// /////////////////////////////////////////////////////////////////////////////
400// Scan Renames
401// /////////////////////////////////////////////////////////////////////////////
402
403// assign se = tcu_scan_en;
404// assign pce_ov = tcu_pce_ov;
405// assign stop = tcu_clk_stop;
406 assign siclk = tcu_aclk;
407 assign soclk = tcu_bclk;
408
409 assign reset = ~rst;
410
411
412////////////////////////////////////////////////////////////////////////////////
413// Clock header
414
415// l1clkhdr_ctl_macro clkgen (
416// .l2clk (iol2clk ),
417// .l1en (1'b1 ),
418// .l1clk (l1clk )
419// );
420//assign siclk = 1'b0;
421//assign soclk = 1'b0;
422
423
424// /////////////////////////////////////////////////////////////////////////////
425//
426// MBIST Config Register
427//
428// /////////////////////////////////////////////////////////////////////////////
429//
430// A low to high transition on mbist_start will reset and start the engine.
431// mbist_start must remain active high for the duration of MBIST.
432// If mbist_start deasserts the engine will stop but not reset.
433// Once MBIST has completed niu_tcu_mbist_done_5 will assert and the fail status
434// signals will be valid.
435// To run MBIST again the mbist_start signal must transition low then high.
436//
437// Loop on Address will disable the address mix function.
438//
439// /////////////////////////////////////////////////////////////////////////////
440
441 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 config_reg (
442 .scan_in(config_reg_scanin),
443 .scan_out(config_reg_scanout),
444 .din ( config_in[7:0] ),
445 .dout ( config_out[7:0] ),
446 .reset(reset),
447 .l1clk(l1clk),
448 .siclk(siclk),
449 .soclk(soclk));
450
451
452
453 assign config_in[0] = tcu_niu_mbist_start_5;
454 assign config_in[1] = config_out[0];
455 assign start_transition = config_out[0] & ~config_out[1];
456 assign reset_engine = start_transition | (mbist_user_loop_mode & mbist_done);
457// assign run = config_out[1] & (mbist_user_loop_mode | ~mbist_done);
458 assign run = config_out[0] & config_out[1]; // 9/19/05 run to follow start only!
459
460 assign config_in[2] = start_transition ? tcu_mbist_bisi_en : config_out[2];
461 assign bisi = config_out[2];
462
463 assign config_in[3] = start_transition ? tcu_mbist_user_mode: config_out[3];
464 assign user_mode = config_out[3];
465
466 assign config_in[4] = config_out[4];
467 assign user_data_mode = config_out[4];
468
469 assign config_in[5] = config_out[5];
470 assign user_addr_mode = config_out[5];
471
472 assign config_in[6] = config_out[6];
473 assign user_loop_mode = config_out[6];
474
475 assign config_in[7] = config_out[7];
476 assign ten_n_mode = config_out[7];
477
478
479 assign mbist_user_data_mode = user_mode & user_data_mode;
480 assign mbist_user_addr_mode = user_mode & user_addr_mode;
481 assign mbist_user_loop_mode = user_mode & user_loop_mode;
482 assign mbist_ten_n_mode = user_mode & ten_n_mode;
483
484
485 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 user_data_reg (
486 .scan_in(user_data_reg_scanin),
487 .scan_out(user_data_reg_scanout),
488 .din ( user_data_in[7:0] ),
489 .dout ( user_data_out[7:0] ),
490 .reset(reset),
491 .l1clk(l1clk),
492 .siclk(siclk),
493 .soclk(soclk));
494
495
496 assign user_data_in[7:0] = user_data_out[7:0];
497
498
499// Defining User start, stop, and increment addresses.
500
501 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 user_start_addr_reg (
502 .scan_in(user_start_addr_reg_scanin),
503 .scan_out(user_start_addr_reg_scanout),
504 .din ( user_start_addr_in[7:0] ),
505 .dout ( user_start_addr[7:0] ),
506 .reset(reset),
507 .l1clk(l1clk),
508 .siclk(siclk),
509 .soclk(soclk));
510
511 assign user_start_addr_in[7:0] = user_start_addr[7:0];
512
513 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 user_stop_addr_reg (
514 .scan_in(user_stop_addr_reg_scanin),
515 .scan_out(user_stop_addr_reg_scanout),
516 .din ( user_stop_addr_in[7:0] ),
517 .dout ( user_stop_addr[7:0] ),
518 .reset(reset),
519 .l1clk(l1clk),
520 .siclk(siclk),
521 .soclk(soclk));
522
523 assign user_stop_addr_in[7:0] = user_stop_addr[7:0];
524
525
526 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 user_incr_addr_reg (
527 .scan_in(user_incr_addr_reg_scanin),
528 .scan_out(user_incr_addr_reg_scanout),
529 .din ( user_incr_addr_in[7:0] ),
530 .dout ( user_incr_addr[7:0] ),
531 .reset(reset),
532 .l1clk(l1clk),
533 .siclk(siclk),
534 .soclk(soclk));
535
536 assign user_incr_addr_in[7:0] = user_incr_addr[7:0];
537
538
539// user_cam_mode Register
540// During user_mode, if user_cam_mode=0, then memBIST (R/W test);
541// if user_cam_mode=1, then camBIST.
542
543 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 user_cam_mode_reg (
544 .scan_in(user_cam_mode_reg_scanin),
545 .scan_out(user_cam_mode_reg_scanout),
546 .din ( user_cam_mode_in ),
547 .dout ( user_cam_mode ),
548 .reset(reset),
549 .l1clk(l1clk),
550 .siclk(siclk),
551 .soclk(soclk));
552
553 assign user_cam_mode_in = user_cam_mode;
554
555// cambist: user CAM select
556
557
558 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_4 user_cam_test_select_reg (
559 .scan_in(user_cam_test_select_reg_scanin),
560 .scan_out(user_cam_test_select_reg_scanout),
561 .din ( user_cam_test_sel_in[3:0] ),
562 .dout ( user_cam_test_sel[3:0] ),
563 .reset(reset),
564 .l1clk(l1clk),
565 .siclk(siclk),
566 .soclk(soclk));
567
568 assign user_cam_test_sel_in[3:0] = user_cam_test_sel[3:0];
569
570// Defining user_bisi write and read registers
571
572 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 user_bisi_wr_reg (
573 .scan_in(user_bisi_wr_reg_scanin),
574 .scan_out(user_bisi_wr_reg_scanout),
575 .din ( user_bisi_wr_mode_in ),
576 .dout ( user_bisi_wr_mode ),
577 .reset(reset),
578 .l1clk(l1clk),
579 .siclk(siclk),
580 .soclk(soclk));
581
582 assign user_bisi_wr_mode_in = user_bisi_wr_mode;
583
584 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 user_bisi_rd_reg (
585 .scan_in(user_bisi_rd_reg_scanin),
586 .scan_out(user_bisi_rd_reg_scanout),
587 .din ( user_bisi_rd_mode_in ),
588 .dout ( user_bisi_rd_mode ),
589 .reset(reset),
590 .l1clk(l1clk),
591 .siclk(siclk),
592 .soclk(soclk));
593
594 assign user_bisi_rd_mode_in = user_bisi_rd_mode;
595
596 assign mbist_user_bisi_wr_mode = user_mode & bisi & user_bisi_wr_mode & ~user_bisi_rd_mode;
597// assign mbist_user_bisi_rd_mode = user_mode & bisi & user_bisi_rd_mode & ~user_bisi_wr_mode;
598
599 assign mbist_user_bisi_wr_rd_mode = user_mode & bisi &
600 ((user_bisi_wr_mode & user_bisi_rd_mode) |
601 (~user_bisi_wr_mode & ~user_bisi_rd_mode));
602
603////////////////////////////////////////////////////////////////////////////////
604// Piping start_transition
605////////////////////////////////////////////////////////////////////////////////
606
607 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 start_transition_reg (
608 .scan_in(start_transition_reg_scanin),
609 .scan_out(start_transition_reg_scanout),
610 .din ( start_transition ),
611 .dout ( start_transition_piped ),
612 .reset(reset),
613 .l1clk(l1clk),
614 .siclk(siclk),
615 .soclk(soclk));
616
617////////////////////////////////////////////////////////////////////////////////
618// Staging run for 3 cycles
619////////////////////////////////////////////////////////////////////////////////
620
621 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 run_reg (
622 .scan_in(run_reg_scanin),
623 .scan_out(run_reg_scanout),
624 .din ( run ),
625 .dout ( niu_mb5_run ),
626 .reset(reset),
627 .l1clk(l1clk),
628 .siclk(siclk),
629 .soclk(soclk));
630
631//Adding 2 extra pipeline stages to run to delay the start of mbist for 3 cycles.
632 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 run1_reg (
633 .scan_in(run1_reg_scanin),
634 .scan_out(run1_reg_scanout),
635 .din ( run1_in ),
636 .dout ( run1_out ),
637 .reset(reset),
638 .l1clk(l1clk),
639 .siclk(siclk),
640 .soclk(soclk));
641
642 assign run1_in = reset_engine ? 1'b0: niu_mb5_run;
643
644 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 run2_reg (
645 .scan_in(run2_reg_scanin),
646 .scan_out(run2_reg_scanout),
647 .din ( run2_in ),
648 .dout ( run2_out ),
649 .reset(reset),
650 .l1clk(l1clk),
651 .siclk(siclk),
652 .soclk(soclk));
653
654 assign run2_in = reset_engine ? 1'b0: run1_out;
655 assign run_piped3 = config_out[0] & run2_out & ~msb;
656
657////////////////////////////////////////////////////////////////////////////////
658// Creating flop boundaries for the outputs of the mbist
659////////////////////////////////////////////////////////////////////////////////
660
661 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 done_reg (
662 .scan_in(done_reg_scanin),
663 .scan_out(done_reg_scanout),
664 .din ( mbist_done ),
665 .dout ( niu_tcu_mbist_done_5 ),
666 .reset(reset),
667 .l1clk(l1clk),
668 .siclk(siclk),
669 .soclk(soclk));
670
671
672 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 mbist_fail_reg (
673 .scan_in(mbist_fail_reg_scanin),
674 .scan_out(mbist_fail_reg_scanout),
675 .din ( fail ),
676 .dout ( niu_tcu_mbist_fail_5 ),
677 .reset(reset),
678 .l1clk(l1clk),
679 .siclk(siclk),
680 .soclk(soclk));
681
682////////////////////////////////////////////////////////////////////////////////
683// Creating niu_mb5_data_inp
684////////////////////////////////////////////////////////////////////////////////
685/* integer i;
686 reg [199:0] walk0_data, walk1_data;
687
688 always@(cam_addr[7:0])
689 begin
690 for(i=0;i<200;i=i+1)
691 begin
692 if(i==cam_addr[7:0])
693 begin
694 walk0_data[i] = 1'b0;
695 walk1_data[i] = 1'b1;
696 end
697 else begin
698 walk0_data[i] = 1'b1;
699 walk1_data[i] = 1'b0;
700 end
701 end
702 end
703*/
704 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 walking0_8bit_reg (
705 .scan_in(walking0_8bit_reg_scanin),
706 .scan_out(walking0_8bit_reg_scanout),
707 .din ( walking0_8bit_in[7:0] ),
708 .dout ( walking0_8bit[7:0] ),
709 .reset(reset),
710 .l1clk(l1clk),
711 .siclk(siclk),
712 .soclk(soclk));
713
714 assign walking0_8bit_in[7:0] = reset_engine ? 8'hFE :
715// (ctest3 | ctest4) & (cam_addr[2:0] == 3'b0) ? 8'hFE :
716 (ctest3 | ctest4) & cseq1 & crw1 & op_hold ? {walking0_8bit[6:0], walking0_8bit[7]}:
717 walking0_8bit[7:0];
718
719reg [199:0] walk0_data, walk1_data;
720
721 always@( cam_addr[7:3] or walking0_8bit[7:0] ) begin
722 case ( cam_addr[7:3] ) //synopsys parallel_case full_case
723
724 5'h00 : begin
725 walk0_data[199:0] = {{192{1'b1}}, walking0_8bit[7:0]};
726 walk1_data[199:0] = {{192{1'b0}}, ~walking0_8bit[7:0]};
727 end
728 5'h01 : begin
729 walk0_data[199:0] = {{184{1'b1}}, walking0_8bit[7:0], {8{1'b1}}};
730 walk1_data[199:0] = {{184{1'b0}}, ~walking0_8bit[7:0], {8{1'b0}}};
731 end
732 5'h02 : begin
733 walk0_data[199:0] = {{176{1'b1}}, walking0_8bit[7:0], {16{1'b1}}};
734 walk1_data[199:0] = {{176{1'b0}}, ~walking0_8bit[7:0], {16{1'b0}}};
735 end
736 5'h03 : begin
737 walk0_data[199:0] = {{168{1'b1}}, walking0_8bit[7:0], {24{1'b1}}};
738 walk1_data[199:0] = {{168{1'b0}}, ~walking0_8bit[7:0], {24{1'b0}}};
739 end
740 5'h04 : begin
741 walk0_data[199:0] = {{160{1'b1}}, walking0_8bit[7:0], {32{1'b1}}};
742 walk1_data[199:0] = {{160{1'b0}}, ~walking0_8bit[7:0], {32{1'b0}}};
743 end
744 5'h05 : begin
745 walk0_data[199:0] = {{152{1'b1}}, walking0_8bit[7:0], {40{1'b1}}};
746 walk1_data[199:0] = {{152{1'b0}}, ~walking0_8bit[7:0], {40{1'b0}}};
747 end
748 5'h06 : begin
749 walk0_data[199:0] = {{144{1'b1}}, walking0_8bit[7:0], {48{1'b1}}};
750 walk1_data[199:0] = {{144{1'b0}}, ~walking0_8bit[7:0], {48{1'b0}}};
751 end
752 5'h07 : begin
753 walk0_data[199:0] = {{136{1'b1}}, walking0_8bit[7:0], {56{1'b1}}};
754 walk1_data[199:0] = {{136{1'b0}}, ~walking0_8bit[7:0], {56{1'b0}}};
755 end
756 5'h08 : begin
757 walk0_data[199:0] = {{128{1'b1}}, walking0_8bit[7:0], {64{1'b1}}};
758 walk1_data[199:0] = {{128{1'b0}}, ~walking0_8bit[7:0], {64{1'b0}}};
759 end
760 5'h09 : begin
761 walk0_data[199:0] = {{120{1'b1}}, walking0_8bit[7:0], {72{1'b1}}};
762 walk1_data[199:0] = {{120{1'b0}}, ~walking0_8bit[7:0], {72{1'b0}}};
763 end
764 5'h0A : begin
765 walk0_data[199:0] = {{112{1'b1}}, walking0_8bit[7:0], {80{1'b1}}};
766 walk1_data[199:0] = {{112{1'b0}}, ~walking0_8bit[7:0], {80{1'b0}}};
767 end
768 5'h0B : begin
769 walk0_data[199:0] = {{104{1'b1}}, walking0_8bit[7:0], {88{1'b1}}};
770 walk1_data[199:0] = {{104{1'b0}}, ~walking0_8bit[7:0], {88{1'b0}}};
771 end
772 5'h0C : begin
773 walk0_data[199:0] = {{96{1'b1}}, walking0_8bit[7:0], {96{1'b1}}};
774 walk1_data[199:0] = {{96{1'b0}}, ~walking0_8bit[7:0], {96{1'b0}}};
775 end
776 5'h0D : begin
777 walk0_data[199:0] = {{88{1'b1}}, walking0_8bit[7:0], {104{1'b1}}};
778 walk1_data[199:0] = {{88{1'b0}}, ~walking0_8bit[7:0], {104{1'b0}}};
779 end
780 5'h0E : begin
781 walk0_data[199:0] = {{80{1'b1}}, walking0_8bit[7:0], {112{1'b1}}};
782 walk1_data[199:0] = {{80{1'b0}}, ~walking0_8bit[7:0], {112{1'b0}}};
783 end
784 5'h0F : begin
785 walk0_data[199:0] = {{72{1'b1}}, walking0_8bit[7:0], {120{1'b1}}};
786 walk1_data[199:0] = {{72{1'b0}}, ~walking0_8bit[7:0], {120{1'b0}}};
787 end
788 5'h10 : begin
789 walk0_data[199:0] = {{64{1'b1}}, walking0_8bit[7:0], {128{1'b1}}};
790 walk1_data[199:0] = {{64{1'b0}}, ~walking0_8bit[7:0], {128{1'b0}}};
791 end
792 5'h11 : begin
793 walk0_data[199:0] = {{56{1'b1}}, walking0_8bit[7:0], {136{1'b1}}};
794 walk1_data[199:0] = {{56{1'b0}}, ~walking0_8bit[7:0], {136{1'b0}}};
795 end
796 5'h12 : begin
797 walk0_data[199:0] = {{48{1'b1}}, walking0_8bit[7:0], {144{1'b1}}};
798 walk1_data[199:0] = {{48{1'b0}}, ~walking0_8bit[7:0], {144{1'b0}}};
799 end
800 5'h13 : begin
801 walk0_data[199:0] = {{40{1'b1}}, walking0_8bit[7:0], {152{1'b1}}};
802 walk1_data[199:0] = {{40{1'b0}}, ~walking0_8bit[7:0], {152{1'b0}}};
803 end
804 5'h14 : begin
805 walk0_data[199:0] = {{32{1'b1}}, walking0_8bit[7:0], {160{1'b1}}};
806 walk1_data[199:0] = {{32{1'b0}}, ~walking0_8bit[7:0], {160{1'b0}}};
807 end
808 5'h15 : begin
809 walk0_data[199:0] = {{24{1'b1}}, walking0_8bit[7:0], {168{1'b1}}};
810 walk1_data[199:0] = {{24{1'b0}}, ~walking0_8bit[7:0], {168{1'b0}}};
811 end
812 5'h16 : begin
813 walk0_data[199:0] = {{16{1'b1}}, walking0_8bit[7:0], {176{1'b1}}};
814 walk1_data[199:0] = {{16{1'b0}}, ~walking0_8bit[7:0], {176{1'b0}}};
815 end
816 5'h17 : begin
817 walk0_data[199:0] = {{8{1'b1}}, walking0_8bit[7:0], {184{1'b1}}};
818 walk1_data[199:0] = {{8{1'b0}}, ~walking0_8bit[7:0], {184{1'b0}}};
819 end
820 default : begin
821 walk0_data[199:0] = { walking0_8bit[7:0], {192{1'b1}}};
822 walk1_data[199:0] = {~walking0_8bit[7:0], {192{1'b0}}};
823 end
824 endcase
825 end
826
827
828
829 assign niu_mb5_data_inp[199:0] = array_write | array_read ? {25{mbist_wdata[7:0]}}:
830 ((ctest1 | ctest4 | ctest7) & cseq0) | ctest8 ? 200'b0 :
831 ctest0 | ((ctest2 | ctest3 | ctest5 | ctest6) & cseq0) ? {200{1'b1}} :
832 cseq1 & ( (ctest1 & (crw0|crw1)) | ((ctest2|ctest5) & crw3) | (ctest6 & crw0)) ? {200{1'b1}} :
833 cseq1 & ( (ctest1 & crw3) | ((ctest2|ctest5) & (crw0|crw1)) | (ctest6 & crw2) |
834 (ctest7 & crw0)) ? 200'b0 :
835// ctest3 & (cam_addr[7:0] == 8'b0) ? {{199{1'b1}},1'b0} : // Start walking0
836// ctest4 & (cam_addr[7:0] == 8'b0) ? {{199{1'b0}},1'b1} : // Start walking1
837 ctest3 & cseq1 & crw0 ? walk0_data[199:0] :
838 ctest4 & cseq1 & crw0 ? walk1_data[199:0] : 200'b0;
839
840
841// /////////////////////////////////////////////////////////////////////////////
842//
843// MBIST Control Register
844//
845// /////////////////////////////////////////////////////////////////////////////
846
847 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 op_hold_reg (
848 .scan_in(op_hold_reg_scanin),
849 .scan_out(op_hold_reg_scanout),
850 .din ( op_hold_in ),
851 .dout ( op_hold ),
852 .reset(reset),
853 .l1clk(l1clk),
854 .siclk(siclk),
855 .soclk(soclk));
856
857 assign op_hold_in = reset_engine ? 1'b1 :
858 ~run_piped3 & ~cambist ? op_hold :
859 ~op_hold;
860
861
862 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_20 control_reg (
863 .scan_in(control_reg_scanin),
864 .scan_out(control_reg_scanout),
865 .din ( control_in[19:0] ),
866 .dout ( control_out[19:0] ),
867 .reset(reset),
868 .l1clk(l1clk),
869 .siclk(siclk),
870 .soclk(soclk));
871
872 assign msb = ~bisi & user_mode & user_cam_mode ? 1'b1 : control_out[19];
873 assign bisi_wr_rd = (bisi & ~user_mode) | mbist_user_bisi_wr_rd_mode ? control_out[18] : 1'b1;
874 assign data_control[1:0] = control_out[17:16];
875 assign address_mix =(bisi | mbist_user_addr_mode) ? 1'b0: control_out[15];
876 assign march_element[3:0] = control_out[14:11];
877 assign array_address[7:0] = upaddress_march ? control_out[10:3] : ~control_out[10:3];
878 assign read_write_control[2:0] = ~five_cycle_march ? {2'b11, control_out[0]} :
879 control_out[2:0];
880
881
882 assign control_in[2:0] = reset_engine ? 3'b0:
883 ~run_piped3 | op_hold ? control_out[2:0]:
884 (five_cycle_march && (read_write_control[2:0] == 3'b100)) ? 3'b000:
885 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ? 3'b000:
886 control_out[2:0] + 3'b001;
887
888 assign increment_addr = ( (five_cycle_march && (read_write_control[2:0] == 3'b100)) ||
889 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ||
890 (read_write_control[2:0] == 3'b111) ) & ~op_hold;
891
892// start_transition_piped was added to have the correct start_addr at the start
893// of mbist during user_addr_mode
894 assign control_in[10:3] = start_transition_piped || reset_engine ? start_addr[7:0]:
895 ~run_piped3 || ~increment_addr ? control_out[10:3]:
896 next_array_address[7:0];
897
898 assign next_array_address[7:0] = next_upaddr_march ? start_addr[7:0]:
899 next_downaddr_march ? ~stop_addr[7:0]:
900 (overflow_addr[7:0]); // array_addr + incr_addr
901
902 assign start_addr[7:0] = mbist_user_addr_mode ? user_start_addr[7:0] : 8'h00;
903 assign stop_addr[7:0] = mbist_user_addr_mode ? user_stop_addr[7:0] : 8'hFF;
904 assign incr_addr[7:0] = mbist_user_addr_mode ? user_incr_addr[7:0] : 8'h01;
905
906 assign overflow_addr[8:0] = {1'b0,control_out[10:3]} + {1'b0,incr_addr[7:0]};
907 assign overflow = compare_addr[8:0] < overflow_addr[8:0];
908
909 assign compare_addr[8:0] = upaddress_march ? {1'b0, stop_addr[7:0]} :
910 {1'b0, ~start_addr[7:0]};
911
912 assign next_upaddr_march = ( (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
913 (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h5) ||
914 (march_element[3:0] == 4'h8) ) && overflow;
915
916 assign next_downaddr_march = ( (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h7) ||
917 (march_element[3:0] == 4'h3) || (march_element[3:0] == 4'h4) ) &&
918 overflow;
919
920
921
922 assign add[7:0] = five_cycle_march && ( (read_write_control[2:0] == 3'h1) ||
923 (read_write_control[2:0] == 3'h3)) ?
924 adj_address[7:0]: array_address[7:0];
925
926 assign adj_address[7:0] = { array_address[7:1], ~array_address[0] }; // Since all addresses are row addresses! Verify!!!!
927
928 assign mbist_address[7:0] = address_mix ? {add[7],add[0],add[6],add[5],add[4],add[3],add[2],add[1]}:
929 add[7:0];
930
931// Definition of the rest of the control register
932 assign increment_march_elem = increment_addr && overflow;
933
934 assign control_in[19:11] = reset_engine ? 9'b0:
935 ~run_piped3 ? control_out[19:11]:
936 {msb, bisi_wr_rd, next_data_control[1:0], next_address_mix, next_march_element[3:0]}
937 + {8'b0, increment_march_elem};
938
939 assign next_data_control[1:0] = (bisi || (mbist_user_data_mode && (data_control[1:0] == 2'b00))) ? 2'b11:
940 data_control[1:0];
941
942 assign next_address_mix = bisi | mbist_user_addr_mode ? 1'b1 : address_mix;
943
944// Modified next_march_element to remove a possible long path.
945// Incorporated ten_n_mode!
946 assign next_march_element[3:0] = ( bisi ||
947 (mbist_ten_n_mode && (march_element[3:0] == 4'b0101)) ||
948 ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100)) )
949 && overflow & ~op_hold ? 4'b1111: march_element[3:0];
950
951// assign next_march_element[3:0] = (bisi || ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100)) )
952// && overflow ? 4'b1111: march_element[3:0];
953
954
955 assign array_write = ~run_piped3 ? 1'b0:
956 five_cycle_march ? (read_write_control[2:0] == 3'h0) ||
957 (read_write_control[2:0] == 3'h1) ||
958 (read_write_control[2:0] == 3'h4):
959 (~five_cycle_march & ~one_cycle_march) ? read_write_control[0]:
960 ( ((march_element[3:0] == 4'h0) & (~bisi || ~bisi_wr_rd || mbist_user_bisi_wr_mode)) || (march_element[3:0] == 4'h7));
961
962 assign array_read = ~array_write && run_piped3; // && ~initialize;
963// assign mbist_done = msb;
964
965 assign mbist_wdata[7:0] = true_data ? data_pattern[7:0]: ~data_pattern[7:0];
966
967
968 assign five_cycle_march = (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h8);
969 assign one_cycle_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h5) ||
970 (march_element[3:0] == 4'h7);
971
972 assign upaddress_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
973 (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h6) ||
974 (march_element[3:0] == 4'h7);
975
976// assign true_data = read_write_control[1] ^ ~march_element[0];
977
978 assign true_data = (five_cycle_march && (march_element[3:0] == 4'h6)) ?
979 ((read_write_control[2:0] == 3'h0) || (read_write_control[2:0] == 3'h2)):
980 (five_cycle_march && (march_element[3:0] == 4'h8)) ?
981 ((read_write_control[2:0] == 3'h1) ||
982 (read_write_control[2:0] == 3'h3) || (read_write_control[2:0] == 3'h4)):
983 one_cycle_march ? (march_element[3:0] == 4'h7):
984 ~(read_write_control[0] ^ march_element[0]);
985
986
987 assign data_pattern[7:0] = (bisi & mbist_user_data_mode) ? ~user_data_out[7:0]:
988 mbist_user_data_mode ? user_data_out[7:0]:
989 bisi ? 8'hFF: // true_data function will invert to 8'h00
990 (data_control[1:0] == 2'h0) ? 8'hAA:
991 (data_control[1:0] == 2'h1) ? 8'h99:
992 (data_control[1:0] == 2'h2) ? 8'hCC:
993 8'h00;
994
995
996/////////////////////////////////////////////////////////////////////////
997// Creating the mbist_done signal
998/////////////////////////////////////////////////////////////////////////
999// Delaying mbist_done 8 clock signals after msb going high, to provide
1000// a generic solution for done going high after the last fail has come back!
1001
1002 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 done_counter_reg (
1003 .scan_in(done_counter_reg_scanin),
1004 .scan_out(done_counter_reg_scanout),
1005 .din ( done_counter_in[2:0] ),
1006 .dout ( done_counter_out[2:0] ),
1007 .reset(reset),
1008 .l1clk(l1clk),
1009 .siclk(siclk),
1010 .soclk(soclk));
1011
1012// config_out[1] is AND'ed to force mbist_done low 2 cycles after mbist_start
1013// goes low.
1014
1015 assign mbist_done = (&done_counter_out[2:0] == 1'b1) & config_out[1];
1016 assign done_counter_in[2:0] = reset_engine ? 3'b000:
1017 final_msb & ~mbist_done & config_out[1] ? done_counter_out[2:0] + 3'b001:
1018 done_counter_out[2:0];
1019
1020 assign final_msb = bisi ? msb : cam_msb;
1021
1022/////////////////////////////////////////////////////////////////////////
1023// Creating the select lines and enable signals.
1024/////////////////////////////////////////////////////////////////////////
1025
1026 assign niu_mb5_tcam_cntrl_rd_en = array_read | cam_rd_en;
1027 assign niu_mb5_tcam_cntrl_wr_en = array_write | cam_wr_en;
1028
1029 assign niu_mb5_cam_compare = cam_lkup_en;
1030
1031 assign niu_mb5_pio_sel = cambist & (ctest3 | ctest4) & cseq ? 1'b0 : // 9/19/05 Forcing pio_sel to 0 during walk0 or walk1.
1032 cambist ? cam_addr[7] : mbist_address[7];
1033 assign niu_mb5_addr[6:0] = cambist ? cam_addr[6:0] : mbist_address[6:0];
1034
1035// assign niu_mb5_wdata[7:0] = mbist_wdata[7:0]; // Keep it temporarily!
1036
1037
1038// /////////////////////////////////////////////////////////////////////////////
1039// CAM BIST:
1040// /////////////////////////////////////////////////////////////////////////////
1041
1042 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 user_mode_mask_init_reg (
1043 .scan_in(user_mode_mask_init_reg_scanin),
1044 .scan_out(user_mode_mask_init_reg_scanout),
1045 .din ( user_mode_mask_init_in ),
1046 .dout ( user_mode_mask_init ),
1047 .reset(reset),
1048 .l1clk(l1clk),
1049 .siclk(siclk),
1050 .soclk(soclk));
1051
1052 assign user_mode_mask_init_in = reset_engine ? 1'b0 :
1053 user_mode & ctest0 & (cam_addr[7:0] == 8'hFF) & ~op_hold ? 1'b1 :
1054 user_mode_mask_init ;
1055
1056 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_16 cam_cntl_reg (
1057 .scan_in(cam_cntl_reg_scanin),
1058 .scan_out(cam_cntl_reg_scanout),
1059 .din ( cam_in[15:0] ),
1060 .dout ( cam_out[15:0] ),
1061 .reset(reset),
1062 .l1clk(l1clk),
1063 .siclk(siclk),
1064 .soclk(soclk));
1065
1066 assign cam_msb = user_mode & ~user_cam_mode & msb ? 1'b1 : cam_out[15];
1067
1068
1069 assign ctest[3:0] = user_mode & (|user_cam_test_sel[2:0] != 1'b0) &
1070 ~user_mode_mask_init ? 4'b0000 :
1071 user_mode ? user_cam_test_sel[3:0] :
1072 cam_out[14:11];
1073
1074 assign cseq = cam_out[10];
1075
1076//msb address selects pio_sel
1077 assign cam_addr[7:0] = (ctest0 | ctest8) | ((ctest5 | ctest7) & cseq1) ?
1078 {1'b1, cam_out[8:2]} : cam_out[9:2];
1079
1080 assign crw[1:0] = cseq0 ? 2'b11:
1081 cam_out[1:0]; // read write control
1082
1083
1084 assign ctest0 = ~( ctest[3] | ctest[2] | ctest[1] | ctest[0]); // ^[W(m,1)]
1085 assign ctest1 = ~( ctest[3] | ctest[2] | ctest[1] | ~ctest[0]); // ^[W(d,0)]; ^[W(d,1),C1,NOOP,W(d,0)]
1086 assign ctest2 = ~( ctest[3] | ctest[2] | ~ctest[1] | ctest[0]); // ^[W(d,1)]; ^[W(d,0),C0,NOOP,W(d,1)]
1087 assign ctest3 = ~( ctest[3] | ctest[2] | ~ctest[1] | ~ctest[0]); // ^[W(d,1)]; >(C(wk0),NOOP)
1088 assign ctest4 = ~( ctest[3] | ~ctest[2] | ctest[1] | ctest[0]); // ^[W(d,0)]; >(C(wk1),NOOP)
1089 assign ctest5 = ~( ctest[3] | ~ctest[2] | ctest[1] | ~ctest[0]); // ^[W(d,1)]; ^[W(m,0),C0,NOOP,W(m,1)]
1090 // With mask,opposite data should still match!
1091 assign ctest6 = ~( ctest[3] | ~ctest[2] | ~ctest[1] | ctest[0]); // ^[W(d,1)]; ^[C1,NOOP,W(d,0)]
1092 // Testing priority encoder; hit_addr = current_addr
1093 assign ctest7 = ~( ctest[3] | ~ctest[2] | ~ctest[1] | ~ctest[0]); // ^[W(d,0)]; ^[{C0,R(m,1)},NOOP]
1094 // Testing compare & read collision; Read should happen! haddr=0!
1095 assign ctest8 = ~( ~ctest[3] | ctest[2] | ctest[1] | ctest[0]); // ^[W(m,0)]
1096
1097 assign cseq0 = ~cseq;
1098 assign cseq1 = cseq;
1099
1100 assign crw0 = ~( crw[1] | crw[0]);
1101 assign crw1 = ~( crw[1] | ~crw[0]);
1102 assign crw2 = ~(~crw[1] | crw[0]);
1103 assign crw3 = ~(~crw[1] | ~crw[0]);
1104
1105
1106 assign cam_wr_en = cambist ? cseq0 |
1107 (( (ctest1 | ctest2 | ctest5) & cseq1 ) & (crw0 | crw3)) |
1108 (( ctest6 & cseq1 ) & crw2 ) : 1'b0;
1109
1110 assign cam_lkup_en = cambist ? ( (ctest1 | ctest2 | ctest5) & cseq1 & crw1 ) |
1111 ( (ctest3 | ctest4 | ctest7) & cseq1 & crw0 ) |
1112 ( ctest6 & cseq1 & crw0 ) : 1'b0;
1113
1114 assign cam_rd_en = cambist ? ctest7 & cseq1 & crw0: 1'b0;
1115
1116
1117 assign qual_cam[15:0] = {cam_msb,
1118 next_ctest[3:0],
1119 next_cseq,
1120 next_cam_addr[7:0],
1121 next_crw[1:0]};
1122
1123 assign cam_in[15:0] = reset_engine ? 16'b0: // set zero
1124 cambist & ~op_hold ? qual_cam[15:0] + 16'h1: // increment
1125 qual_cam[15:0]; // save value
1126
1127
1128 assign next_ctest[3:0] = user_mode & (ctest[3:0] == user_cam_test_sel[3:0]) ? 4'b1111 :
1129 ctest8 & (cam_addr[7:0] == 8'hFF) & ~op_hold ? 4'b1111 :
1130 cam_out[14:11];
1131
1132 assign next_cseq = (ctest0 | ctest8) & (cam_addr[7:0] == 8'hFF) & ~op_hold ? 1'b1 : cseq;
1133
1134 assign next_cam_addr[7:0] = ( ((~ctest0 & ~ctest8) & cseq0) |
1135 ((((ctest1 | ctest2) & crw3) | (ctest6 & crw2)) & cseq1) ) &
1136 (cam_addr[7:0] == 8'h7F) & ~op_hold ? 8'hFF :
1137 (ctest3 | ctest4) & cseq1 & crw1 &
1138 (cam_addr[7:0] == 8'hC7) & ~op_hold ? 8'hFF : cam_addr[7:0];
1139
1140 assign next_crw[1:0] = ctest6 & cseq1 & crw2 & ~op_hold ? 2'b11 :
1141 (ctest3 | ctest4 | ctest7) & cseq1 & crw1 & ~op_hold ? 2'b11 : crw[1:0];
1142
1143// Defining cambist mode of operation!
1144
1145 assign cambist = ~bisi & run2_out & msb & ~cam_msb;
1146
1147
1148// /////////////////////////////////////////////////////////////////////////////
1149// Pipeline for Address, wdata, and Read_en
1150// /////////////////////////////////////////////////////////////////////////////
1151
1152// /////////////////////////////////////////////////////////////////////////////
1153// Pipeline for Address
1154// /////////////////////////////////////////////////////////////////////////////
1155
1156 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_7 add_pipe_reg1 (
1157 .scan_in(add_pipe_reg1_scanin),
1158 .scan_out(add_pipe_reg1_scanout),
1159 .din ( add_pipe_reg1_in[6:0] ),
1160 .dout ( add_pipe_reg1_out[6:0] ),
1161 .reset(reset),
1162 .l1clk(l1clk),
1163 .siclk(siclk),
1164 .soclk(soclk));
1165
1166 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_7 add_pipe_reg2 (
1167 .scan_in(add_pipe_reg2_scanin),
1168 .scan_out(add_pipe_reg2_scanout),
1169 .din ( add_pipe_reg2_in[6:0] ),
1170 .dout ( add_pipe_reg2_out[6:0] ),
1171 .reset(reset),
1172 .l1clk(l1clk),
1173 .siclk(siclk),
1174 .soclk(soclk));
1175
1176 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_7 add_pipe_reg3 (
1177 .scan_in(add_pipe_reg3_scanin),
1178 .scan_out(add_pipe_reg3_scanout),
1179 .din ( add_pipe_reg3_in[6:0] ),
1180 .dout ( add_pipe_reg3_out[6:0] ),
1181 .reset(reset),
1182 .l1clk(l1clk),
1183 .siclk(siclk),
1184 .soclk(soclk));
1185
1186 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_7 add_pipe_reg4 (
1187 .scan_in(add_pipe_reg4_scanin),
1188 .scan_out(add_pipe_reg4_scanout),
1189 .din ( add_pipe_reg4_in[6:0] ),
1190 .dout ( add_pipe_reg4_out[6:0] ),
1191 .reset(reset),
1192 .l1clk(l1clk),
1193 .siclk(siclk),
1194 .soclk(soclk));
1195
1196 assign add_pipe_reg1_in[6:0] = reset_engine ? 7'h00: cam_addr[6:0];
1197 assign add_pipe_reg2_in[6:0] = reset_engine ? 7'h00: add_pipe_reg1_out[6:0];
1198 assign add_pipe_reg3_in[6:0] = reset_engine ? 7'h00: add_pipe_reg2_out[6:0];
1199 assign add_pipe_reg4_in[6:0] = reset_engine ? 7'h00: add_pipe_reg3_out[6:0];
1200 assign mbist_piped_address[6:0] = add_pipe_reg4_out[6:0];
1201
1202
1203// /////////////////////////////////////////////////////////////////////////////
1204// Pipeline for wdata
1205// /////////////////////////////////////////////////////////////////////////////
1206
1207 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 data_pipe_reg1 (
1208 .scan_in(data_pipe_reg1_scanin),
1209 .scan_out(data_pipe_reg1_scanout),
1210 .din ( data_pipe_reg1_in[7:0] ),
1211 .dout ( data_pipe_out1[7:0] ),
1212 .reset(reset),
1213 .l1clk(l1clk),
1214 .siclk(siclk),
1215 .soclk(soclk));
1216
1217 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 data_pipe_reg2 (
1218 .scan_in(data_pipe_reg2_scanin),
1219 .scan_out(data_pipe_reg2_scanout),
1220 .din ( data_pipe_reg2_in[7:0] ),
1221 .dout ( data_pipe_out2[7:0] ),
1222 .reset(reset),
1223 .l1clk(l1clk),
1224 .siclk(siclk),
1225 .soclk(soclk));
1226
1227 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 data_pipe_reg3 (
1228 .scan_in(data_pipe_reg3_scanin),
1229 .scan_out(data_pipe_reg3_scanout),
1230 .din ( data_pipe_reg3_in[7:0] ),
1231 .dout ( data_pipe_out3[7:0] ),
1232 .reset(reset),
1233 .l1clk(l1clk),
1234 .siclk(siclk),
1235 .soclk(soclk));
1236
1237
1238 assign data_pipe_reg1_in[7:0] = reset_engine ? 8'h00: mbist_wdata[7:0];
1239 assign data_pipe_reg2_in[7:0] = reset_engine ? 8'h00: data_pipe_out1[7:0];
1240 assign data_pipe_reg3_in[7:0] = reset_engine ? 8'h00: data_pipe_out2[7:0];
1241 assign piped_wdata[7:0] = data_pipe_out3[7:0];
1242
1243// /////////////////////////////////////////////////////////////////////////////
1244// Pipeline for Read_en
1245// /////////////////////////////////////////////////////////////////////////////
1246
1247 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 ren_pipe_reg1 (
1248 .scan_in(ren_pipe_reg1_scanin),
1249 .scan_out(ren_pipe_reg1_scanout),
1250 .din ( ren_pipe_reg1_in ),
1251 .dout ( ren_pipe_out1 ),
1252 .reset(reset),
1253 .l1clk(l1clk),
1254 .siclk(siclk),
1255 .soclk(soclk));
1256
1257 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 ren_pipe_reg2 (
1258 .scan_in(ren_pipe_reg2_scanin),
1259 .scan_out(ren_pipe_reg2_scanout),
1260 .din ( ren_pipe_reg2_in ),
1261 .dout ( ren_pipe_out2 ),
1262 .reset(reset),
1263 .l1clk(l1clk),
1264 .siclk(siclk),
1265 .soclk(soclk));
1266
1267 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 ren_pipe_reg3 (
1268 .scan_in(ren_pipe_reg3_scanin),
1269 .scan_out(ren_pipe_reg3_scanout),
1270 .din ( ren_pipe_reg3_in ),
1271 .dout ( ren_pipe_out3 ),
1272 .reset(reset),
1273 .l1clk(l1clk),
1274 .siclk(siclk),
1275 .soclk(soclk));
1276
1277 assign ren_pipe_reg1_in = reset_engine ? 1'b0: array_read & op_hold;
1278 assign ren_pipe_reg2_in = reset_engine ? 1'b0: ren_pipe_out1;
1279 assign ren_pipe_reg3_in = reset_engine ? 1'b0: ren_pipe_out2;
1280 assign piped_ren = ren_pipe_out3;
1281
1282 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_ren_pipe_reg1 (
1283 .scan_in(cam_ren_pipe_reg1_scanin),
1284 .scan_out(cam_ren_pipe_reg1_scanout),
1285 .din ( cam_ren_pipe_reg1_in ),
1286 .dout ( cam_ren_pipe_out1 ),
1287 .reset(reset),
1288 .l1clk(l1clk),
1289 .siclk(siclk),
1290 .soclk(soclk));
1291
1292 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_ren_pipe_reg2 (
1293 .scan_in(cam_ren_pipe_reg2_scanin),
1294 .scan_out(cam_ren_pipe_reg2_scanout),
1295 .din ( cam_ren_pipe_reg2_in ),
1296 .dout ( cam_ren_pipe_out2 ),
1297 .reset(reset),
1298 .l1clk(l1clk),
1299 .siclk(siclk),
1300 .soclk(soclk));
1301
1302 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_ren_pipe_reg3 (
1303 .scan_in(cam_ren_pipe_reg3_scanin),
1304 .scan_out(cam_ren_pipe_reg3_scanout),
1305 .din ( cam_ren_pipe_reg3_in ),
1306 .dout ( cam_ren_pipe_out3 ),
1307 .reset(reset),
1308 .l1clk(l1clk),
1309 .siclk(siclk),
1310 .soclk(soclk));
1311
1312 assign cam_ren_pipe_reg1_in = reset_engine ? 1'b0: cam_rd_en & op_hold;
1313 assign cam_ren_pipe_reg2_in = reset_engine ? 1'b0: cam_ren_pipe_out1;
1314 assign cam_ren_pipe_reg3_in = reset_engine ? 1'b0: cam_ren_pipe_out2;
1315 assign piped_cam_ren = cam_ren_pipe_out3;
1316
1317 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_lkup_en_pipe_reg1 (
1318 .scan_in(cam_lkup_en_pipe_reg1_scanin),
1319 .scan_out(cam_lkup_en_pipe_reg1_scanout),
1320 .din ( cam_lkup_en_pipe_reg1_in ),
1321 .dout ( cam_lkup_en_pipe_out1 ),
1322 .reset(reset),
1323 .l1clk(l1clk),
1324 .siclk(siclk),
1325 .soclk(soclk));
1326
1327 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_lkup_en_pipe_reg2 (
1328 .scan_in(cam_lkup_en_pipe_reg2_scanin),
1329 .scan_out(cam_lkup_en_pipe_reg2_scanout),
1330 .din ( cam_lkup_en_pipe_reg2_in ),
1331 .dout ( cam_lkup_en_pipe_out2 ),
1332 .reset(reset),
1333 .l1clk(l1clk),
1334 .siclk(siclk),
1335 .soclk(soclk));
1336
1337 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_lkup_en_pipe_reg3 (
1338 .scan_in(cam_lkup_en_pipe_reg3_scanin),
1339 .scan_out(cam_lkup_en_pipe_reg3_scanout),
1340 .din ( cam_lkup_en_pipe_reg3_in ),
1341 .dout ( cam_lkup_en_pipe_out3 ),
1342 .reset(reset),
1343 .l1clk(l1clk),
1344 .siclk(siclk),
1345 .soclk(soclk));
1346
1347 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_lkup_en_pipe_reg4 (
1348 .scan_in(cam_lkup_en_pipe_reg4_scanin),
1349 .scan_out(cam_lkup_en_pipe_reg4_scanout),
1350 .din ( cam_lkup_en_pipe_reg4_in ),
1351 .dout ( cam_lkup_en_pipe_out4 ),
1352 .reset(reset),
1353 .l1clk(l1clk),
1354 .siclk(siclk),
1355 .soclk(soclk));
1356
1357 assign cam_lkup_en_pipe_reg1_in = reset_engine ? 1'b0: cam_lkup_en & op_hold;
1358 assign cam_lkup_en_pipe_reg2_in = reset_engine ? 1'b0: cam_lkup_en_pipe_out1;
1359 assign cam_lkup_en_pipe_reg3_in = reset_engine ? 1'b0: cam_lkup_en_pipe_out2;
1360 assign cam_lkup_en_pipe_reg4_in = reset_engine ? 1'b0: cam_lkup_en_pipe_out3;
1361 assign piped_cam_lkup_en = cam_lkup_en_pipe_out4;
1362
1363// ctest
1364 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 ctest_pipe_reg1 (
1365 .scan_in(ctest_pipe_reg1_scanin),
1366 .scan_out(ctest_pipe_reg1_scanout),
1367 .din ( ctest_pipe_reg1_in[2:0] ),
1368 .dout ( ctest_pipe_out1[2:0] ),
1369 .reset(reset),
1370 .l1clk(l1clk),
1371 .siclk(siclk),
1372 .soclk(soclk));
1373
1374 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 ctest_pipe_reg2 (
1375 .scan_in(ctest_pipe_reg2_scanin),
1376 .scan_out(ctest_pipe_reg2_scanout),
1377 .din ( ctest_pipe_reg2_in[2:0] ),
1378 .dout ( ctest_pipe_out2[2:0] ),
1379 .reset(reset),
1380 .l1clk(l1clk),
1381 .siclk(siclk),
1382 .soclk(soclk));
1383
1384 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 ctest_pipe_reg3 (
1385 .scan_in(ctest_pipe_reg3_scanin),
1386 .scan_out(ctest_pipe_reg3_scanout),
1387 .din ( ctest_pipe_reg3_in[2:0] ),
1388 .dout ( ctest_pipe_out3[2:0] ),
1389 .reset(reset),
1390 .l1clk(l1clk),
1391 .siclk(siclk),
1392 .soclk(soclk));
1393
1394 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 ctest_pipe_reg4 (
1395 .scan_in(ctest_pipe_reg4_scanin),
1396 .scan_out(ctest_pipe_reg4_scanout),
1397 .din ( ctest_pipe_reg4_in[2:0] ),
1398 .dout ( ctest_pipe_out4[2:0] ),
1399 .reset(reset),
1400 .l1clk(l1clk),
1401 .siclk(siclk),
1402 .soclk(soclk));
1403
1404 assign ctest_pipe_reg1_in[2:0] = reset_engine ? 3'b00: ctest[2:0];
1405 assign ctest_pipe_reg2_in[2:0] = reset_engine ? 3'b00: ctest_pipe_out1[2:0];
1406 assign ctest_pipe_reg3_in[2:0] = reset_engine ? 3'b00: ctest_pipe_out2[2:0];
1407 assign ctest_pipe_reg4_in[2:0] = reset_engine ? 3'b00: ctest_pipe_out3[2:0];
1408
1409 assign ctest_piped4[2:0] = ctest_pipe_out4[2:0];
1410
1411
1412// /////////////////////////////////////////////////////////////////////////////
1413// Fail Detection
1414// /////////////////////////////////////////////////////////////////////////////
1415
1416 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 fail_reg (
1417 .scan_in(fail_reg_scanin),
1418 .scan_out(fail_reg_scanout),
1419 .din ( fail_reg_in ),
1420 .dout ( fail_reg_out ),
1421 .reset(reset),
1422 .l1clk(l1clk),
1423 .siclk(siclk),
1424 .soclk(soclk));
1425
1426 assign fail_reg_in = reset_engine ? 1'b0 : qual_fail | fail_reg_out;
1427 assign qual_fail = fail_detect;
1428 assign fail_detect = (({25{piped_wdata[7:0]}} != niu_mb5_msk_dat_out[199:0]) | ~niu_mb5_rd_vld) && piped_ren;
1429
1430 assign fail = mbist_done ? (fail_reg_out | cam_fail_reg_out) :
1431 qual_fail | qual_cam_fail;
1432
1433// CAM Fail
1434
1435 niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 cam_fail_reg (
1436 .scan_in(cam_fail_reg_scanin),
1437 .scan_out(cam_fail_reg_scanout),
1438 .din ( cam_fail_reg_in ),
1439 .dout ( cam_fail_reg_out ),
1440 .reset(reset),
1441 .l1clk(l1clk),
1442 .siclk(siclk),
1443 .soclk(soclk));
1444
1445 assign cam_fail_reg_in = reset_engine ? 1'b0 : qual_cam_fail | cam_fail_reg_out;
1446
1447 assign qual_cam_fail = cam_fail_detect;
1448
1449 assign cam_fail_detect = (( ctest_piped4[2:0] == 3'b001 ) | ( ctest_piped4[2:0] == 3'b010 ) |
1450 ( ctest_piped4[2:0] == 3'b101 ) | ( ctest_piped4[2:0] == 3'b110 ) ) ?
1451 ( (mbist_piped_address[6:0] != niu_mb5_cam_haddr[6:0]) | ~niu_mb5_cam_valid |
1452 ~niu_mb5_cam_hit ) & piped_cam_lkup_en :
1453 ( ctest_piped4[2:0] == 3'b111 ) ?
1454 ( ((niu_mb5_cam_haddr[6:0] != 7'b0) | ~niu_mb5_cam_valid |
1455 ~niu_mb5_cam_hit) & piped_cam_lkup_en ) |
1456 ( ((niu_mb5_msk_dat_out[199:0] != {200{1'b1}}) | ~niu_mb5_rd_vld) & piped_cam_ren ) :
1457 ( (niu_mb5_cam_haddr[6:0] != 7'b0) | niu_mb5_cam_hit | ~niu_mb5_cam_valid ) & piped_cam_lkup_en;
1458
1459
1460supply0 vss; // <- port for ground
1461supply1 vdd; // <- port for power
1462// /////////////////////////////////////////////////////////////////////////////
1463// fixscan start:
1464assign config_reg_scanin = mb5_scan_in ;
1465assign user_data_reg_scanin = config_reg_scanout ;
1466assign user_start_addr_reg_scanin = user_data_reg_scanout ;
1467assign user_stop_addr_reg_scanin = user_start_addr_reg_scanout;
1468assign user_incr_addr_reg_scanin = user_stop_addr_reg_scanout;
1469assign user_cam_mode_reg_scanin = user_incr_addr_reg_scanout;
1470assign user_cam_test_select_reg_scanin = user_cam_mode_reg_scanout;
1471assign user_bisi_wr_reg_scanin = user_cam_test_select_reg_scanout;
1472assign user_bisi_rd_reg_scanin = user_bisi_wr_reg_scanout ;
1473assign start_transition_reg_scanin = user_bisi_rd_reg_scanout ;
1474assign run_reg_scanin = start_transition_reg_scanout;
1475assign run1_reg_scanin = run_reg_scanout ;
1476assign run2_reg_scanin = run1_reg_scanout ;
1477assign done_reg_scanin = run2_reg_scanout ;
1478assign mbist_fail_reg_scanin = done_reg_scanout ;
1479assign walking0_8bit_reg_scanin = mbist_fail_reg_scanout ;
1480assign op_hold_reg_scanin = walking0_8bit_reg_scanout;
1481assign control_reg_scanin = op_hold_reg_scanout ;
1482assign done_counter_reg_scanin = control_reg_scanout ;
1483assign user_mode_mask_init_reg_scanin = done_counter_reg_scanout ;
1484assign cam_cntl_reg_scanin = user_mode_mask_init_reg_scanout;
1485assign add_pipe_reg1_scanin = cam_cntl_reg_scanout ;
1486assign add_pipe_reg2_scanin = add_pipe_reg1_scanout ;
1487assign add_pipe_reg3_scanin = add_pipe_reg2_scanout ;
1488assign add_pipe_reg4_scanin = add_pipe_reg3_scanout ;
1489assign data_pipe_reg1_scanin = add_pipe_reg4_scanout ;
1490assign data_pipe_reg2_scanin = data_pipe_reg1_scanout ;
1491assign data_pipe_reg3_scanin = data_pipe_reg2_scanout ;
1492assign ren_pipe_reg1_scanin = data_pipe_reg3_scanout ;
1493assign ren_pipe_reg2_scanin = ren_pipe_reg1_scanout ;
1494assign ren_pipe_reg3_scanin = ren_pipe_reg2_scanout ;
1495assign cam_ren_pipe_reg1_scanin = ren_pipe_reg3_scanout ;
1496assign cam_ren_pipe_reg2_scanin = cam_ren_pipe_reg1_scanout;
1497assign cam_ren_pipe_reg3_scanin = cam_ren_pipe_reg2_scanout;
1498assign cam_lkup_en_pipe_reg1_scanin = cam_ren_pipe_reg3_scanout;
1499assign cam_lkup_en_pipe_reg2_scanin = cam_lkup_en_pipe_reg1_scanout;
1500assign cam_lkup_en_pipe_reg3_scanin = cam_lkup_en_pipe_reg2_scanout;
1501assign cam_lkup_en_pipe_reg4_scanin = cam_lkup_en_pipe_reg3_scanout;
1502assign ctest_pipe_reg1_scanin = cam_lkup_en_pipe_reg4_scanout;
1503assign ctest_pipe_reg2_scanin = ctest_pipe_reg1_scanout ;
1504assign ctest_pipe_reg3_scanin = ctest_pipe_reg2_scanout ;
1505assign ctest_pipe_reg4_scanin = ctest_pipe_reg3_scanout ;
1506assign fail_reg_scanin = ctest_pipe_reg4_scanout ;
1507assign cam_fail_reg_scanin = fail_reg_scanout ;
1508assign mb5_scan_out = cam_fail_reg_scanout ;
1509// fixscan end:
1510endmodule
1511// /////////////////////////////////////////////////////////////////////////////
1512
1513
1514
1515
1516
1517
1518// any PARAMS parms go into naming of macro
1519
1520module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_8 (
1521 din,
1522 reset,
1523 l1clk,
1524 scan_in,
1525 siclk,
1526 soclk,
1527 dout,
1528 scan_out);
1529wire [7:0] fdin;
1530wire [7:1] sout;
1531
1532 input [7:0] din;
1533 input reset;
1534 input l1clk;
1535 input scan_in;
1536
1537
1538 input siclk;
1539 input soclk;
1540
1541 output [7:0] dout;
1542 output scan_out;
1543assign fdin[7:0] = din[7:0] & {8 {reset}};
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561cl_a1_msff_syrst_4x d0_0 (
1562.l1clk(l1clk),
1563.siclk(siclk),
1564.soclk(soclk),
1565.d(fdin[0]),
1566.si(sout[1]),
1567.so(scan_out),
1568.reset(reset),
1569.q(dout[0])
1570);
1571cl_a1_msff_syrst_4x d0_1 (
1572.l1clk(l1clk),
1573.siclk(siclk),
1574.soclk(soclk),
1575.d(fdin[1]),
1576.si(sout[2]),
1577.so(sout[1]),
1578.reset(reset),
1579.q(dout[1])
1580);
1581cl_a1_msff_syrst_4x d0_2 (
1582.l1clk(l1clk),
1583.siclk(siclk),
1584.soclk(soclk),
1585.d(fdin[2]),
1586.si(sout[3]),
1587.so(sout[2]),
1588.reset(reset),
1589.q(dout[2])
1590);
1591cl_a1_msff_syrst_4x d0_3 (
1592.l1clk(l1clk),
1593.siclk(siclk),
1594.soclk(soclk),
1595.d(fdin[3]),
1596.si(sout[4]),
1597.so(sout[3]),
1598.reset(reset),
1599.q(dout[3])
1600);
1601cl_a1_msff_syrst_4x d0_4 (
1602.l1clk(l1clk),
1603.siclk(siclk),
1604.soclk(soclk),
1605.d(fdin[4]),
1606.si(sout[5]),
1607.so(sout[4]),
1608.reset(reset),
1609.q(dout[4])
1610);
1611cl_a1_msff_syrst_4x d0_5 (
1612.l1clk(l1clk),
1613.siclk(siclk),
1614.soclk(soclk),
1615.d(fdin[5]),
1616.si(sout[6]),
1617.so(sout[5]),
1618.reset(reset),
1619.q(dout[5])
1620);
1621cl_a1_msff_syrst_4x d0_6 (
1622.l1clk(l1clk),
1623.siclk(siclk),
1624.soclk(soclk),
1625.d(fdin[6]),
1626.si(sout[7]),
1627.so(sout[6]),
1628.reset(reset),
1629.q(dout[6])
1630);
1631cl_a1_msff_syrst_4x d0_7 (
1632.l1clk(l1clk),
1633.siclk(siclk),
1634.soclk(soclk),
1635.d(fdin[7]),
1636.si(scan_in),
1637.so(sout[7]),
1638.reset(reset),
1639.q(dout[7])
1640);
1641
1642
1643
1644
1645endmodule
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659// any PARAMS parms go into naming of macro
1660
1661module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_1 (
1662 din,
1663 reset,
1664 l1clk,
1665 scan_in,
1666 siclk,
1667 soclk,
1668 dout,
1669 scan_out);
1670wire [0:0] fdin;
1671
1672 input [0:0] din;
1673 input reset;
1674 input l1clk;
1675 input scan_in;
1676
1677
1678 input siclk;
1679 input soclk;
1680
1681 output [0:0] dout;
1682 output scan_out;
1683assign fdin[0:0] = din[0:0] & {1 {reset}};
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701cl_a1_msff_syrst_4x d0_0 (
1702.l1clk(l1clk),
1703.siclk(siclk),
1704.soclk(soclk),
1705.d(fdin[0]),
1706.si(scan_in),
1707.so(scan_out),
1708.reset(reset),
1709.q(dout[0])
1710);
1711
1712
1713
1714
1715endmodule
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729// any PARAMS parms go into naming of macro
1730
1731module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_4 (
1732 din,
1733 reset,
1734 l1clk,
1735 scan_in,
1736 siclk,
1737 soclk,
1738 dout,
1739 scan_out);
1740wire [3:0] fdin;
1741wire [3:1] sout;
1742
1743 input [3:0] din;
1744 input reset;
1745 input l1clk;
1746 input scan_in;
1747
1748
1749 input siclk;
1750 input soclk;
1751
1752 output [3:0] dout;
1753 output scan_out;
1754assign fdin[3:0] = din[3:0] & {4 {reset}};
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772cl_a1_msff_syrst_4x d0_0 (
1773.l1clk(l1clk),
1774.siclk(siclk),
1775.soclk(soclk),
1776.d(fdin[0]),
1777.si(sout[1]),
1778.so(scan_out),
1779.reset(reset),
1780.q(dout[0])
1781);
1782cl_a1_msff_syrst_4x d0_1 (
1783.l1clk(l1clk),
1784.siclk(siclk),
1785.soclk(soclk),
1786.d(fdin[1]),
1787.si(sout[2]),
1788.so(sout[1]),
1789.reset(reset),
1790.q(dout[1])
1791);
1792cl_a1_msff_syrst_4x d0_2 (
1793.l1clk(l1clk),
1794.siclk(siclk),
1795.soclk(soclk),
1796.d(fdin[2]),
1797.si(sout[3]),
1798.so(sout[2]),
1799.reset(reset),
1800.q(dout[2])
1801);
1802cl_a1_msff_syrst_4x d0_3 (
1803.l1clk(l1clk),
1804.siclk(siclk),
1805.soclk(soclk),
1806.d(fdin[3]),
1807.si(scan_in),
1808.so(sout[3]),
1809.reset(reset),
1810.q(dout[3])
1811);
1812
1813
1814
1815
1816endmodule
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830// any PARAMS parms go into naming of macro
1831
1832module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_20 (
1833 din,
1834 reset,
1835 l1clk,
1836 scan_in,
1837 siclk,
1838 soclk,
1839 dout,
1840 scan_out);
1841wire [19:0] fdin;
1842wire [19:1] sout;
1843
1844 input [19:0] din;
1845 input reset;
1846 input l1clk;
1847 input scan_in;
1848
1849
1850 input siclk;
1851 input soclk;
1852
1853 output [19:0] dout;
1854 output scan_out;
1855assign fdin[19:0] = din[19:0] & {20 {reset}};
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873cl_a1_msff_syrst_4x d0_0 (
1874.l1clk(l1clk),
1875.siclk(siclk),
1876.soclk(soclk),
1877.d(fdin[0]),
1878.si(sout[1]),
1879.so(scan_out),
1880.reset(reset),
1881.q(dout[0])
1882);
1883cl_a1_msff_syrst_4x d0_1 (
1884.l1clk(l1clk),
1885.siclk(siclk),
1886.soclk(soclk),
1887.d(fdin[1]),
1888.si(sout[2]),
1889.so(sout[1]),
1890.reset(reset),
1891.q(dout[1])
1892);
1893cl_a1_msff_syrst_4x d0_2 (
1894.l1clk(l1clk),
1895.siclk(siclk),
1896.soclk(soclk),
1897.d(fdin[2]),
1898.si(sout[3]),
1899.so(sout[2]),
1900.reset(reset),
1901.q(dout[2])
1902);
1903cl_a1_msff_syrst_4x d0_3 (
1904.l1clk(l1clk),
1905.siclk(siclk),
1906.soclk(soclk),
1907.d(fdin[3]),
1908.si(sout[4]),
1909.so(sout[3]),
1910.reset(reset),
1911.q(dout[3])
1912);
1913cl_a1_msff_syrst_4x d0_4 (
1914.l1clk(l1clk),
1915.siclk(siclk),
1916.soclk(soclk),
1917.d(fdin[4]),
1918.si(sout[5]),
1919.so(sout[4]),
1920.reset(reset),
1921.q(dout[4])
1922);
1923cl_a1_msff_syrst_4x d0_5 (
1924.l1clk(l1clk),
1925.siclk(siclk),
1926.soclk(soclk),
1927.d(fdin[5]),
1928.si(sout[6]),
1929.so(sout[5]),
1930.reset(reset),
1931.q(dout[5])
1932);
1933cl_a1_msff_syrst_4x d0_6 (
1934.l1clk(l1clk),
1935.siclk(siclk),
1936.soclk(soclk),
1937.d(fdin[6]),
1938.si(sout[7]),
1939.so(sout[6]),
1940.reset(reset),
1941.q(dout[6])
1942);
1943cl_a1_msff_syrst_4x d0_7 (
1944.l1clk(l1clk),
1945.siclk(siclk),
1946.soclk(soclk),
1947.d(fdin[7]),
1948.si(sout[8]),
1949.so(sout[7]),
1950.reset(reset),
1951.q(dout[7])
1952);
1953cl_a1_msff_syrst_4x d0_8 (
1954.l1clk(l1clk),
1955.siclk(siclk),
1956.soclk(soclk),
1957.d(fdin[8]),
1958.si(sout[9]),
1959.so(sout[8]),
1960.reset(reset),
1961.q(dout[8])
1962);
1963cl_a1_msff_syrst_4x d0_9 (
1964.l1clk(l1clk),
1965.siclk(siclk),
1966.soclk(soclk),
1967.d(fdin[9]),
1968.si(sout[10]),
1969.so(sout[9]),
1970.reset(reset),
1971.q(dout[9])
1972);
1973cl_a1_msff_syrst_4x d0_10 (
1974.l1clk(l1clk),
1975.siclk(siclk),
1976.soclk(soclk),
1977.d(fdin[10]),
1978.si(sout[11]),
1979.so(sout[10]),
1980.reset(reset),
1981.q(dout[10])
1982);
1983cl_a1_msff_syrst_4x d0_11 (
1984.l1clk(l1clk),
1985.siclk(siclk),
1986.soclk(soclk),
1987.d(fdin[11]),
1988.si(sout[12]),
1989.so(sout[11]),
1990.reset(reset),
1991.q(dout[11])
1992);
1993cl_a1_msff_syrst_4x d0_12 (
1994.l1clk(l1clk),
1995.siclk(siclk),
1996.soclk(soclk),
1997.d(fdin[12]),
1998.si(sout[13]),
1999.so(sout[12]),
2000.reset(reset),
2001.q(dout[12])
2002);
2003cl_a1_msff_syrst_4x d0_13 (
2004.l1clk(l1clk),
2005.siclk(siclk),
2006.soclk(soclk),
2007.d(fdin[13]),
2008.si(sout[14]),
2009.so(sout[13]),
2010.reset(reset),
2011.q(dout[13])
2012);
2013cl_a1_msff_syrst_4x d0_14 (
2014.l1clk(l1clk),
2015.siclk(siclk),
2016.soclk(soclk),
2017.d(fdin[14]),
2018.si(sout[15]),
2019.so(sout[14]),
2020.reset(reset),
2021.q(dout[14])
2022);
2023cl_a1_msff_syrst_4x d0_15 (
2024.l1clk(l1clk),
2025.siclk(siclk),
2026.soclk(soclk),
2027.d(fdin[15]),
2028.si(sout[16]),
2029.so(sout[15]),
2030.reset(reset),
2031.q(dout[15])
2032);
2033cl_a1_msff_syrst_4x d0_16 (
2034.l1clk(l1clk),
2035.siclk(siclk),
2036.soclk(soclk),
2037.d(fdin[16]),
2038.si(sout[17]),
2039.so(sout[16]),
2040.reset(reset),
2041.q(dout[16])
2042);
2043cl_a1_msff_syrst_4x d0_17 (
2044.l1clk(l1clk),
2045.siclk(siclk),
2046.soclk(soclk),
2047.d(fdin[17]),
2048.si(sout[18]),
2049.so(sout[17]),
2050.reset(reset),
2051.q(dout[17])
2052);
2053cl_a1_msff_syrst_4x d0_18 (
2054.l1clk(l1clk),
2055.siclk(siclk),
2056.soclk(soclk),
2057.d(fdin[18]),
2058.si(sout[19]),
2059.so(sout[18]),
2060.reset(reset),
2061.q(dout[18])
2062);
2063cl_a1_msff_syrst_4x d0_19 (
2064.l1clk(l1clk),
2065.siclk(siclk),
2066.soclk(soclk),
2067.d(fdin[19]),
2068.si(scan_in),
2069.so(sout[19]),
2070.reset(reset),
2071.q(dout[19])
2072);
2073
2074
2075
2076
2077endmodule
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091// any PARAMS parms go into naming of macro
2092
2093module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_3 (
2094 din,
2095 reset,
2096 l1clk,
2097 scan_in,
2098 siclk,
2099 soclk,
2100 dout,
2101 scan_out);
2102wire [2:0] fdin;
2103wire [2:1] sout;
2104
2105 input [2:0] din;
2106 input reset;
2107 input l1clk;
2108 input scan_in;
2109
2110
2111 input siclk;
2112 input soclk;
2113
2114 output [2:0] dout;
2115 output scan_out;
2116assign fdin[2:0] = din[2:0] & {3 {reset}};
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134cl_a1_msff_syrst_4x d0_0 (
2135.l1clk(l1clk),
2136.siclk(siclk),
2137.soclk(soclk),
2138.d(fdin[0]),
2139.si(sout[1]),
2140.so(scan_out),
2141.reset(reset),
2142.q(dout[0])
2143);
2144cl_a1_msff_syrst_4x d0_1 (
2145.l1clk(l1clk),
2146.siclk(siclk),
2147.soclk(soclk),
2148.d(fdin[1]),
2149.si(sout[2]),
2150.so(sout[1]),
2151.reset(reset),
2152.q(dout[1])
2153);
2154cl_a1_msff_syrst_4x d0_2 (
2155.l1clk(l1clk),
2156.siclk(siclk),
2157.soclk(soclk),
2158.d(fdin[2]),
2159.si(scan_in),
2160.so(sout[2]),
2161.reset(reset),
2162.q(dout[2])
2163);
2164
2165
2166
2167
2168endmodule
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182// any PARAMS parms go into naming of macro
2183
2184module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_16 (
2185 din,
2186 reset,
2187 l1clk,
2188 scan_in,
2189 siclk,
2190 soclk,
2191 dout,
2192 scan_out);
2193wire [15:0] fdin;
2194wire [15:1] sout;
2195
2196 input [15:0] din;
2197 input reset;
2198 input l1clk;
2199 input scan_in;
2200
2201
2202 input siclk;
2203 input soclk;
2204
2205 output [15:0] dout;
2206 output scan_out;
2207assign fdin[15:0] = din[15:0] & {16 {reset}};
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225cl_a1_msff_syrst_4x d0_0 (
2226.l1clk(l1clk),
2227.siclk(siclk),
2228.soclk(soclk),
2229.d(fdin[0]),
2230.si(sout[1]),
2231.so(scan_out),
2232.reset(reset),
2233.q(dout[0])
2234);
2235cl_a1_msff_syrst_4x d0_1 (
2236.l1clk(l1clk),
2237.siclk(siclk),
2238.soclk(soclk),
2239.d(fdin[1]),
2240.si(sout[2]),
2241.so(sout[1]),
2242.reset(reset),
2243.q(dout[1])
2244);
2245cl_a1_msff_syrst_4x d0_2 (
2246.l1clk(l1clk),
2247.siclk(siclk),
2248.soclk(soclk),
2249.d(fdin[2]),
2250.si(sout[3]),
2251.so(sout[2]),
2252.reset(reset),
2253.q(dout[2])
2254);
2255cl_a1_msff_syrst_4x d0_3 (
2256.l1clk(l1clk),
2257.siclk(siclk),
2258.soclk(soclk),
2259.d(fdin[3]),
2260.si(sout[4]),
2261.so(sout[3]),
2262.reset(reset),
2263.q(dout[3])
2264);
2265cl_a1_msff_syrst_4x d0_4 (
2266.l1clk(l1clk),
2267.siclk(siclk),
2268.soclk(soclk),
2269.d(fdin[4]),
2270.si(sout[5]),
2271.so(sout[4]),
2272.reset(reset),
2273.q(dout[4])
2274);
2275cl_a1_msff_syrst_4x d0_5 (
2276.l1clk(l1clk),
2277.siclk(siclk),
2278.soclk(soclk),
2279.d(fdin[5]),
2280.si(sout[6]),
2281.so(sout[5]),
2282.reset(reset),
2283.q(dout[5])
2284);
2285cl_a1_msff_syrst_4x d0_6 (
2286.l1clk(l1clk),
2287.siclk(siclk),
2288.soclk(soclk),
2289.d(fdin[6]),
2290.si(sout[7]),
2291.so(sout[6]),
2292.reset(reset),
2293.q(dout[6])
2294);
2295cl_a1_msff_syrst_4x d0_7 (
2296.l1clk(l1clk),
2297.siclk(siclk),
2298.soclk(soclk),
2299.d(fdin[7]),
2300.si(sout[8]),
2301.so(sout[7]),
2302.reset(reset),
2303.q(dout[7])
2304);
2305cl_a1_msff_syrst_4x d0_8 (
2306.l1clk(l1clk),
2307.siclk(siclk),
2308.soclk(soclk),
2309.d(fdin[8]),
2310.si(sout[9]),
2311.so(sout[8]),
2312.reset(reset),
2313.q(dout[8])
2314);
2315cl_a1_msff_syrst_4x d0_9 (
2316.l1clk(l1clk),
2317.siclk(siclk),
2318.soclk(soclk),
2319.d(fdin[9]),
2320.si(sout[10]),
2321.so(sout[9]),
2322.reset(reset),
2323.q(dout[9])
2324);
2325cl_a1_msff_syrst_4x d0_10 (
2326.l1clk(l1clk),
2327.siclk(siclk),
2328.soclk(soclk),
2329.d(fdin[10]),
2330.si(sout[11]),
2331.so(sout[10]),
2332.reset(reset),
2333.q(dout[10])
2334);
2335cl_a1_msff_syrst_4x d0_11 (
2336.l1clk(l1clk),
2337.siclk(siclk),
2338.soclk(soclk),
2339.d(fdin[11]),
2340.si(sout[12]),
2341.so(sout[11]),
2342.reset(reset),
2343.q(dout[11])
2344);
2345cl_a1_msff_syrst_4x d0_12 (
2346.l1clk(l1clk),
2347.siclk(siclk),
2348.soclk(soclk),
2349.d(fdin[12]),
2350.si(sout[13]),
2351.so(sout[12]),
2352.reset(reset),
2353.q(dout[12])
2354);
2355cl_a1_msff_syrst_4x d0_13 (
2356.l1clk(l1clk),
2357.siclk(siclk),
2358.soclk(soclk),
2359.d(fdin[13]),
2360.si(sout[14]),
2361.so(sout[13]),
2362.reset(reset),
2363.q(dout[13])
2364);
2365cl_a1_msff_syrst_4x d0_14 (
2366.l1clk(l1clk),
2367.siclk(siclk),
2368.soclk(soclk),
2369.d(fdin[14]),
2370.si(sout[15]),
2371.so(sout[14]),
2372.reset(reset),
2373.q(dout[14])
2374);
2375cl_a1_msff_syrst_4x d0_15 (
2376.l1clk(l1clk),
2377.siclk(siclk),
2378.soclk(soclk),
2379.d(fdin[15]),
2380.si(scan_in),
2381.so(sout[15]),
2382.reset(reset),
2383.q(dout[15])
2384);
2385
2386
2387
2388
2389endmodule
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403// any PARAMS parms go into naming of macro
2404
2405module niu_mb5_msff_ctl_macro__library_a1__reset_1__width_7 (
2406 din,
2407 reset,
2408 l1clk,
2409 scan_in,
2410 siclk,
2411 soclk,
2412 dout,
2413 scan_out);
2414wire [6:0] fdin;
2415wire [6:1] sout;
2416
2417 input [6:0] din;
2418 input reset;
2419 input l1clk;
2420 input scan_in;
2421
2422
2423 input siclk;
2424 input soclk;
2425
2426 output [6:0] dout;
2427 output scan_out;
2428assign fdin[6:0] = din[6:0] & {7 {reset}};
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446cl_a1_msff_syrst_4x d0_0 (
2447.l1clk(l1clk),
2448.siclk(siclk),
2449.soclk(soclk),
2450.d(fdin[0]),
2451.si(sout[1]),
2452.so(scan_out),
2453.reset(reset),
2454.q(dout[0])
2455);
2456cl_a1_msff_syrst_4x d0_1 (
2457.l1clk(l1clk),
2458.siclk(siclk),
2459.soclk(soclk),
2460.d(fdin[1]),
2461.si(sout[2]),
2462.so(sout[1]),
2463.reset(reset),
2464.q(dout[1])
2465);
2466cl_a1_msff_syrst_4x d0_2 (
2467.l1clk(l1clk),
2468.siclk(siclk),
2469.soclk(soclk),
2470.d(fdin[2]),
2471.si(sout[3]),
2472.so(sout[2]),
2473.reset(reset),
2474.q(dout[2])
2475);
2476cl_a1_msff_syrst_4x d0_3 (
2477.l1clk(l1clk),
2478.siclk(siclk),
2479.soclk(soclk),
2480.d(fdin[3]),
2481.si(sout[4]),
2482.so(sout[3]),
2483.reset(reset),
2484.q(dout[3])
2485);
2486cl_a1_msff_syrst_4x d0_4 (
2487.l1clk(l1clk),
2488.siclk(siclk),
2489.soclk(soclk),
2490.d(fdin[4]),
2491.si(sout[5]),
2492.so(sout[4]),
2493.reset(reset),
2494.q(dout[4])
2495);
2496cl_a1_msff_syrst_4x d0_5 (
2497.l1clk(l1clk),
2498.siclk(siclk),
2499.soclk(soclk),
2500.d(fdin[5]),
2501.si(sout[6]),
2502.so(sout[5]),
2503.reset(reset),
2504.q(dout[5])
2505);
2506cl_a1_msff_syrst_4x d0_6 (
2507.l1clk(l1clk),
2508.siclk(siclk),
2509.soclk(soclk),
2510.d(fdin[6]),
2511.si(scan_in),
2512.so(sout[6]),
2513.reset(reset),
2514.q(dout[6])
2515);
2516
2517
2518
2519
2520endmodule
2521
2522
2523
2524
2525
2526
2527
2528