Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / ncu / rtl / ncu_fcd_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: ncu_fcd_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 ncu_fcd_ctl (
36 cpubuf_din,
37 cpubuf_tail_f,
38 cpubuf_tail_ptr,
39 cpubuf_wr,
40 intbuf_din,
41 intbuf_head_ptr,
42 intbuf_tail_ptr,
43 intbuf_wr,
44 intbuf_rden,
45 iobuf_head_f,
46 iobuf_head_ptr,
47 iobuf_rden,
48 mondo_busy_vec_f,
49 mondo_data0_din,
50 mondo_data0_wr,
51 mondo_data1_din,
52 mondo_data1_wr,
53 mondo_data_addr_p0,
54 mondo_data_addr_p1,
55 mondo_rd_en,
56 ncu_cpx_data_ca,
57 ncu_cpx_req_cq,
58 ncu_pcx_stall_pq,
59 tap_mondo_acc_addr_invld_d2_f,
60 tap_mondo_acc_seq_d2_f,
61 tap_mondo_dout_d2_f,
62 scan_out,
63 mb0_wdata,
64 mb0_run,
65 mb0_addr,
66 mb0_iobuf_wr_en,
67 mb1_run,
68 mb1_wdata,
69 mb1_cpubuf_wr_en,
70 mb1_addr,
71 tcu_mbist_user_mode,
72 tcu_mbist_bisi_en,
73 cmp_io_sync_en,
74 cpubuf_head_s,
75 cpx_ncu_grant_cx,
76 intbuf_dout,
77 iobuf_dout,
78 iobuf_tail_s,
79 io_cmp_sync_en,
80 io_mondo_data0_din_s,
81 io_mondo_data1_din_s,
82 io_mondo_data_wr_addr_s,
83 io_mondo_data_wr_s,
84 l2clk,
85 mondo_data0_dout,
86 mondo_data1_dout,
87 pcx_ncu_data_px2,
88 pcx_ncu_data_rdy_px1,
89 scan_in,
90 tap_mondo_acc_addr_s,
91 tap_mondo_acc_seq_s,
92 tap_mondo_din_s,
93 tap_mondo_wr_s,
94 tcu_aclk,
95 tcu_bclk,
96 tcu_clk_stop,
97 tcu_pce_ov,
98 tcu_scan_en,
99 cpubuf_mb0_data,
100 mb0_scanout,
101 mb0_done,
102 mb0_fail,
103 mb0_start,
104 mb0_scanin,
105 iobuf_ue_f,
106 iobuf_uei,
107 intbuf_ue_f,
108 intbuf_uei,
109 mondotbl_pe_f,
110 mondotbl_pei,
111 array_wr_inhibit_io,
112 array_wr_inhibit_cmp,
113 array_wr_inhibit_gate) ;
114wire intbuf_wr2i2c;
115wire cmp_io_sync_en_dout;
116wire intbuf_hit_hwm;
117wire io_cmp_sync_en_dout;
118wire ncu_c2ifcd_ctl_scanin;
119wire ncu_c2ifcd_ctl_scanout;
120wire mb0_mondo_wr_en;
121wire mb0_mondo_rd_en;
122wire mb0_intbuf_wr_en;
123wire ncu_i2cfcd_ctl_scanin;
124wire ncu_i2cfcd_ctl_scanout;
125wire mb0_intbuf_rd_en;
126wire mb0_iobuf_rd_en;
127wire l1clk;
128wire siclk;
129wire soclk;
130wire se;
131wire pce_ov;
132wire stop;
133wire cmp_io_sync_en_ff_scanin;
134wire cmp_io_sync_en_ff_scanout;
135wire io_cmp_sync_en_ff_scanin;
136wire io_cmp_sync_en_ff_scanout;
137
138
139output [143:0] cpubuf_din; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
140output [5:0] cpubuf_tail_f; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
141output [4:0] cpubuf_tail_ptr; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
142output cpubuf_wr; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
143output [143:0] intbuf_din; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
144output [4:0] intbuf_head_ptr; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
145output [4:0] intbuf_tail_ptr; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
146output intbuf_wr; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
147output intbuf_rden; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
148output [5:0] iobuf_head_f; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
149output [4:0] iobuf_head_ptr; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
150output iobuf_rden; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
151output [63:0] mondo_busy_vec_f; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
152output [71:0] mondo_data0_din; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
153output mondo_data0_wr; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
154output [71:0] mondo_data1_din; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
155output mondo_data1_wr; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
156output [5:0] mondo_data_addr_p0; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
157output [5:0] mondo_data_addr_p1; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
158output mondo_rd_en;
159output [145:0] ncu_cpx_data_ca; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
160output [7:0] ncu_cpx_req_cq; // From ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
161output ncu_pcx_stall_pq; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
162output tap_mondo_acc_addr_invld_d2_f;// From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
163output tap_mondo_acc_seq_d2_f; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
164output [63:0] tap_mondo_dout_d2_f; // From ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
165output scan_out;
166
167// mb0 interface
168output [7:0] mb0_wdata;
169output mb0_run;
170output [5:0] mb0_addr;
171output mb0_iobuf_wr_en;
172input mb1_run;
173input[7:0] mb1_wdata;
174input mb1_cpubuf_wr_en;
175input[5:0] mb1_addr;
176input tcu_mbist_user_mode;
177input tcu_mbist_bisi_en;
178
179input cmp_io_sync_en; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
180input [5:0] cpubuf_head_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
181input [7:0] cpx_ncu_grant_cx; // To ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
182input [143:0] intbuf_dout; // To ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
183input [175:0] iobuf_dout; // To ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
184input [5:0] iobuf_tail_s; // To ncu_i2cfcd_ctl of ncu_i2cfcd_ctl.v
185input io_cmp_sync_en; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
186input [63:0] io_mondo_data0_din_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
187input [63:0] io_mondo_data1_din_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
188input [5:0] io_mondo_data_wr_addr_s;// To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
189input io_mondo_data_wr_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
190input l2clk; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
191input [71:0] mondo_data0_dout; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
192input [71:0] mondo_data1_dout; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
193input [129:0] pcx_ncu_data_px2; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
194input pcx_ncu_data_rdy_px1; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
195input scan_in; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
196input [21:0] tap_mondo_acc_addr_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
197input tap_mondo_acc_seq_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
198input [63:0] tap_mondo_din_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
199input tap_mondo_wr_s; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v
200input tcu_aclk; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
201input tcu_bclk; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
202input tcu_clk_stop; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
203input tcu_pce_ov; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
204input tcu_scan_en; // To ncu_c2ifcd_ctl of ncu_c2ifcd_ctl.v, ...
205input [7:0] cpubuf_mb0_data ;
206
207//mb0 connection from tcu//
208output mb0_scanout;
209output mb0_done;
210output mb0_fail;
211input mb0_start;
212input mb0_scanin;
213
214// err ecc //
215output iobuf_ue_f;
216input iobuf_uei;
217output intbuf_ue_f;
218input intbuf_uei;
219output mondotbl_pe_f;
220input mondotbl_pei;
221
222// wr_inhibit
223input array_wr_inhibit_io;
224input array_wr_inhibit_cmp;
225output array_wr_inhibit_gate;
226
227
228
229/*AUTOWIRE*/
230// Beginning of automatic wires (for undeclared instantiated-module outputs)
231// End of automatics
232
233
234assign array_wr_inhibit_gate = array_wr_inhibit_io & array_wr_inhibit_cmp;
235
236///* ncu_c2ifcd_ctl auto_template (
237// .scan_out () ); */
238ncu_c2ifcd_ctl ncu_c2ifcd_ctl ( /*AUTOINST*/
239 // Outputs
240 .cpubuf_din(cpubuf_din[143:0]),
241 .cpubuf_tail_f(cpubuf_tail_f[5:0]),
242 .cpubuf_tail_ptr(cpubuf_tail_ptr[4:0]),
243 .cpubuf_wr(cpubuf_wr),
244 .intbuf_wr(intbuf_wr),
245 .intbuf_din(intbuf_din[143:0]),
246 .mondo_busy_vec_f(mondo_busy_vec_f[63:0]),
247 .mondo_data0_din(mondo_data0_din[71:0]),
248 .mondo_data0_wr(mondo_data0_wr),
249 .mondo_data1_din(mondo_data1_din[71:0]),
250 .mondo_data1_wr(mondo_data1_wr),
251 .mondo_data_addr_p0(mondo_data_addr_p0[5:0]),
252 .mondo_data_addr_p1(mondo_data_addr_p1[5:0]),
253 .mondo_rd_en(mondo_rd_en),
254 .ncu_pcx_stall_pq(ncu_pcx_stall_pq),
255 .tap_mondo_acc_addr_invld_d2_f(tap_mondo_acc_addr_invld_d2_f),
256 .tap_mondo_acc_seq_d2_f(tap_mondo_acc_seq_d2_f),
257 .tap_mondo_dout_d2_f(tap_mondo_dout_d2_f[63:0]),
258 .intbuf_wr2i2c(intbuf_wr2i2c),
259 .mondotbl_pe_f(mondotbl_pe_f),
260 // Inputs
261 .cmp_io_sync_en(cmp_io_sync_en_dout),
262 .cpubuf_head_s(cpubuf_head_s[5:0]),
263 .intbuf_hit_hwm(intbuf_hit_hwm),
264 .io_cmp_sync_en(io_cmp_sync_en_dout),
265 .io_mondo_data0_din_s(io_mondo_data0_din_s[63:0]),
266 .io_mondo_data1_din_s(io_mondo_data1_din_s[63:0]),
267 .io_mondo_data_wr_addr_s(io_mondo_data_wr_addr_s[5:0]),
268 .io_mondo_data_wr_s(io_mondo_data_wr_s),
269 .scan_in(ncu_c2ifcd_ctl_scanin),
270 .scan_out(ncu_c2ifcd_ctl_scanout),
271 .l2clk (l2clk),
272 .mondo_data0_dout(mondo_data0_dout[71:0]),
273 .mondo_data1_dout(mondo_data1_dout[71:0]),
274 .pcx_ncu_data_px2(pcx_ncu_data_px2[129:0]),
275 .pcx_ncu_data_rdy_px1(pcx_ncu_data_rdy_px1),
276 .tcu_scan_en(tcu_scan_en),
277 .tap_mondo_acc_addr_s(tap_mondo_acc_addr_s[21:0]),
278 .tap_mondo_acc_seq_s(tap_mondo_acc_seq_s),
279 .tap_mondo_din_s(tap_mondo_din_s[63:0]),
280 .tap_mondo_wr_s(tap_mondo_wr_s),
281 .tcu_clk_stop(tcu_clk_stop),
282 .tcu_pce_ov(tcu_pce_ov),
283 .tcu_aclk(tcu_aclk),
284 .tcu_bclk(tcu_bclk),
285 .mb1_run(mb1_run),
286 .mb1_wdata(mb1_wdata[7:0]),
287 .mb1_addr(mb1_addr[5:0]),
288 .mb1_cpubuf_wr_en(mb1_cpubuf_wr_en),
289 //.mb0_mondo_sel(mb0_mondo_wr_en),
290 .mb0_mondo_wr_en(mb0_mondo_wr_en),
291 .mb0_mondo_rd_en(mb0_mondo_rd_en),
292 //.mb0_cpubuf_sel(mb0_cpubuf_sel),
293 //.mb0_intbuf_sel(mb0_intbuf_wr_en),
294 .mb0_intbuf_wr_en(mb0_intbuf_wr_en),
295 .mb0_run(mb0_run),
296 .mb0_waddr(mb0_addr[5:0]),
297 .mb0_raddr(mb0_addr[5:0]),
298 .mb0_wdata(mb0_wdata[7:0]),
299 .mondotbl_pei(mondotbl_pei));
300
301
302
303///* ncu_i2cfcd_ctl auto_template (
304// .scan_out() ); */
305ncu_i2cfcd_ctl ncu_i2cfcd_ctl ( /*AUTOINST*/
306 // Outputs
307 .intbuf_head_ptr(intbuf_head_ptr[4:0]),
308 .intbuf_hit_hwm(intbuf_hit_hwm),
309 .intbuf_tail_ptr(intbuf_tail_ptr[4:0]),
310 .intbuf_rden(intbuf_rden),
311 .iobuf_head_f(iobuf_head_f[5:0]),
312 .iobuf_head_ptr(iobuf_head_ptr[4:0]),
313 .iobuf_rden(iobuf_rden),
314 .ncu_cpx_data_ca(ncu_cpx_data_ca[145:0]),
315 .ncu_cpx_req_cq(ncu_cpx_req_cq[7:0]),
316 .iobuf_ue_f(iobuf_ue_f),
317 .intbuf_ue_f(intbuf_ue_f),
318 // Inputs
319 .cmp_io_sync_en(cmp_io_sync_en_dout),
320 .cpx_ncu_grant_cx(cpx_ncu_grant_cx[7:0]),
321 .intbuf_dout(intbuf_dout[143:0]),
322 .iobuf_dout(iobuf_dout[175:0]),
323 .iobuf_tail_s(iobuf_tail_s[5:0]),
324 .io_cmp_sync_en(io_cmp_sync_en_dout),
325 .scan_in(ncu_i2cfcd_ctl_scanin),
326 .scan_out(ncu_i2cfcd_ctl_scanout),
327 .l2clk (l2clk),
328 .tcu_clk_stop(tcu_clk_stop),
329 .tcu_pce_ov(tcu_pce_ov),
330 .tcu_scan_en(tcu_scan_en),
331 .tcu_aclk(tcu_aclk),
332 .tcu_bclk(tcu_bclk),
333 .mb0_raddr(mb0_addr[4:0]),
334 .mb0_waddr(mb0_addr[4:0]),
335 .mb0_run(mb0_run),
336 .mb0_intbuf_wr_en(mb0_intbuf_wr_en),
337 .mb0_intbuf_rd_en(mb0_intbuf_rd_en),
338 .mb0_iobuf_rd_en(mb0_iobuf_rd_en),
339 .intbuf_wr2i2c(intbuf_wr2i2c),
340 .iobuf_uei(iobuf_uei),
341 .intbuf_uei(intbuf_uei));
342
343
344
345
346
347
348
349ncu_mb0_ctl ncu_mb0_ctl(
350 // outputs
351 .mb0_run(mb0_run),
352 .mb0_addr(mb0_addr[5:0]),
353 .mb0_wdata(mb0_wdata[7:0]),
354 .mb0_intbuf_wr_en(mb0_intbuf_wr_en),
355 .mb0_intbuf_rd_en(mb0_intbuf_rd_en),
356 .mb0_mondo_wr_en(mb0_mondo_wr_en),
357 .mb0_mondo_rd_en(mb0_mondo_rd_en),
358 .mb0_iobuf_wr_en(mb0_iobuf_wr_en),
359 .mb0_iobuf_rd_en(mb0_iobuf_rd_en),
360 .mb0_done(mb0_done),
361 .mb0_fail(mb0_fail),
362 .scan_out(mb0_scanout),
363 // inputs
364 .l2clk(l2clk), // mb0 tests l2clk domin
365 .scan_in(mb0_scanin),
366 .tcu_pce_ov(tcu_pce_ov),
367 .tcu_clk_stop(tcu_clk_stop),
368 .tcu_aclk(tcu_aclk),
369 .tcu_bclk(tcu_bclk),
370 .tcu_scan_en(tcu_scan_en),
371 .mb0_start(mb0_start),
372 //.mb0_userdata_mode(1'b0),
373 .mb0_bisi_mode(tcu_mbist_bisi_en),
374 //.mb0_loop_mode(1'b0),
375 //.mb0_loop_on_address(1'b0),
376 //.mb0_stop_on_fail(1'b0),
377 //.mb0_stop_on_next_fail(1'b0),
378 .mb0_user_mode(tcu_mbist_user_mode),
379 .intbuf_dout(intbuf_dout[143:0]),
380 .iobuf_dout(iobuf_dout[175:0]),
381 .mondo_data0_dout(mondo_data0_dout[71:0]),
382 .mondo_data1_dout(mondo_data1_dout[71:0]));
383
384/* spare gate, 12398 cells/450 = 28 spare gate */
385
386/*
387spare_ctl_macro spares (num=28) (
388 .scan_in(spares_scanin),
389 .scan_out(spares_scanout),
390 .l1clk (l1clk)
391 );
392*/
393
394ncu_fcd_ctl_l1clkhdr_ctl_macro clkgen (
395 .l2clk (l2clk),
396 .l1en (1'b1),
397 .l1clk (l1clk),
398 .pce_ov(pce_ov),
399 .stop(stop),
400 .se(se)
401 );
402
403assign siclk = tcu_aclk;
404assign soclk = tcu_bclk;
405assign se = tcu_scan_en;
406assign pce_ov = tcu_pce_ov;
407assign stop = tcu_clk_stop;
408
409ncu_fcd_ctl_msff_ctl_macro__width_1 cmp_io_sync_en_ff
410 (
411 .scan_in(cmp_io_sync_en_ff_scanin),
412 .scan_out(cmp_io_sync_en_ff_scanout),
413 .dout (cmp_io_sync_en_dout),
414 .l1clk (l1clk),
415 .din (cmp_io_sync_en),
416 .siclk(siclk),
417 .soclk(soclk)
418 );
419
420ncu_fcd_ctl_msff_ctl_macro__width_1 io_cmp_sync_en_ff
421 (
422 .scan_in(io_cmp_sync_en_ff_scanin),
423 .scan_out(io_cmp_sync_en_ff_scanout),
424 .dout (io_cmp_sync_en_dout),
425 .l1clk (l1clk),
426 .din (io_cmp_sync_en),
427 .siclk(siclk),
428 .soclk(soclk)
429 );
430
431
432
433// fixscan start:
434assign ncu_c2ifcd_ctl_scanin = scan_in ;
435assign ncu_i2cfcd_ctl_scanin = ncu_c2ifcd_ctl_scanout ;
436assign cmp_io_sync_en_ff_scanin = ncu_i2cfcd_ctl_scanout;
437assign io_cmp_sync_en_ff_scanin = cmp_io_sync_en_ff_scanout ;
438assign scan_out = io_cmp_sync_en_ff_scanout;
439// fixscan end:
440endmodule //ncu_fcd_ctl
441
442
443
444// any PARAMS parms go into naming of macro
445
446module ncu_fcd_ctl_msff_ctl_macro__width_1 (
447 din,
448 l1clk,
449 scan_in,
450 siclk,
451 soclk,
452 dout,
453 scan_out);
454wire [0:0] fdin;
455
456 input [0:0] din;
457 input l1clk;
458 input scan_in;
459
460
461 input siclk;
462 input soclk;
463
464 output [0:0] dout;
465 output scan_out;
466assign fdin[0:0] = din[0:0];
467
468
469
470
471
472
473dff #(1) d0_0 (
474.l1clk(l1clk),
475.siclk(siclk),
476.soclk(soclk),
477.d(fdin[0:0]),
478.si(scan_in),
479.so(scan_out),
480.q(dout[0:0])
481);
482
483
484
485
486
487
488
489
490
491
492
493
494endmodule
495
496
497
498
499
500
501
502
503
504
505
506
507
508// any PARAMS parms go into naming of macro
509
510module ncu_fcd_ctl_msff_ctl_macro__en_1__width_1 (
511 din,
512 en,
513 l1clk,
514 scan_in,
515 siclk,
516 soclk,
517 dout,
518 scan_out);
519wire [0:0] fdin;
520
521 input [0:0] din;
522 input en;
523 input l1clk;
524 input scan_in;
525
526
527 input siclk;
528 input soclk;
529
530 output [0:0] dout;
531 output scan_out;
532assign fdin[0:0] = (din[0:0] & {1{en}}) | (dout[0:0] & ~{1{en}});
533
534
535
536
537
538
539dff #(1) d0_0 (
540.l1clk(l1clk),
541.siclk(siclk),
542.soclk(soclk),
543.d(fdin[0:0]),
544.si(scan_in),
545.so(scan_out),
546.q(dout[0:0])
547);
548
549
550
551
552
553
554
555
556
557
558
559
560endmodule
561
562
563
564
565
566
567
568
569
570
571
572
573
574// any PARAMS parms go into naming of macro
575
576module ncu_fcd_ctl_msff_ctl_macro__en_1__width_6 (
577 din,
578 en,
579 l1clk,
580 scan_in,
581 siclk,
582 soclk,
583 dout,
584 scan_out);
585wire [5:0] fdin;
586wire [4:0] so;
587
588 input [5:0] din;
589 input en;
590 input l1clk;
591 input scan_in;
592
593
594 input siclk;
595 input soclk;
596
597 output [5:0] dout;
598 output scan_out;
599assign fdin[5:0] = (din[5:0] & {6{en}}) | (dout[5:0] & ~{6{en}});
600
601
602
603
604
605
606dff #(6) d0_0 (
607.l1clk(l1clk),
608.siclk(siclk),
609.soclk(soclk),
610.d(fdin[5:0]),
611.si({scan_in,so[4:0]}),
612.so({so[4:0],scan_out}),
613.q(dout[5:0])
614);
615
616
617
618
619
620
621
622
623
624
625
626
627endmodule
628
629
630
631
632
633
634
635
636
637
638
639
640
641// any PARAMS parms go into naming of macro
642
643module ncu_fcd_ctl_msff_ctl_macro__en_1__width_22 (
644 din,
645 en,
646 l1clk,
647 scan_in,
648 siclk,
649 soclk,
650 dout,
651 scan_out);
652wire [21:0] fdin;
653wire [20:0] so;
654
655 input [21:0] din;
656 input en;
657 input l1clk;
658 input scan_in;
659
660
661 input siclk;
662 input soclk;
663
664 output [21:0] dout;
665 output scan_out;
666assign fdin[21:0] = (din[21:0] & {22{en}}) | (dout[21:0] & ~{22{en}});
667
668
669
670
671
672
673dff #(22) d0_0 (
674.l1clk(l1clk),
675.siclk(siclk),
676.soclk(soclk),
677.d(fdin[21:0]),
678.si({scan_in,so[20:0]}),
679.so({so[20:0],scan_out}),
680.q(dout[21:0])
681);
682
683
684
685
686
687
688
689
690
691
692
693
694endmodule
695
696
697
698
699
700
701
702
703
704
705
706
707
708// any PARAMS parms go into naming of macro
709
710module ncu_fcd_ctl_msff_ctl_macro__width_6 (
711 din,
712 l1clk,
713 scan_in,
714 siclk,
715 soclk,
716 dout,
717 scan_out);
718wire [5:0] fdin;
719wire [4:0] so;
720
721 input [5:0] din;
722 input l1clk;
723 input scan_in;
724
725
726 input siclk;
727 input soclk;
728
729 output [5:0] dout;
730 output scan_out;
731assign fdin[5:0] = din[5:0];
732
733
734
735
736
737
738dff #(6) d0_0 (
739.l1clk(l1clk),
740.siclk(siclk),
741.soclk(soclk),
742.d(fdin[5:0]),
743.si({scan_in,so[4:0]}),
744.so({so[4:0],scan_out}),
745.q(dout[5:0])
746);
747
748
749
750
751
752
753
754
755
756
757
758
759endmodule
760
761
762
763
764
765
766
767
768
769
770
771
772
773// any PARAMS parms go into naming of macro
774
775module ncu_fcd_ctl_l1clkhdr_ctl_macro (
776 l2clk,
777 l1en,
778 pce_ov,
779 stop,
780 se,
781 l1clk);
782
783
784 input l2clk;
785 input l1en;
786 input pce_ov;
787 input stop;
788 input se;
789 output l1clk;
790
791
792
793
794
795cl_sc1_l1hdr_8x c_0 (
796
797
798 .l2clk(l2clk),
799 .pce(l1en),
800 .l1clk(l1clk),
801 .se(se),
802 .pce_ov(pce_ov),
803 .stop(stop)
804);
805
806
807
808endmodule
809
810
811
812
813
814// Local Variables:
815// verilog-auto-sense-defines-constant:t
816// End:
817
818
819
820
821
822
823// any PARAMS parms go into naming of macro
824
825module ncu_fcd_ctl_msff_ctl_macro__width_129 (
826 din,
827 l1clk,
828 scan_in,
829 siclk,
830 soclk,
831 dout,
832 scan_out);
833wire [128:0] fdin;
834wire [127:0] so;
835
836 input [128:0] din;
837 input l1clk;
838 input scan_in;
839
840
841 input siclk;
842 input soclk;
843
844 output [128:0] dout;
845 output scan_out;
846assign fdin[128:0] = din[128:0];
847
848
849
850
851
852
853dff #(129) d0_0 (
854.l1clk(l1clk),
855.siclk(siclk),
856.soclk(soclk),
857.d(fdin[128:0]),
858.si({scan_in,so[127:0]}),
859.so({so[127:0],scan_out}),
860.q(dout[128:0])
861);
862
863
864
865
866
867
868
869
870
871
872
873
874endmodule
875
876
877
878
879
880
881
882
883
884
885// any PARAMS parms go into naming of macro
886
887module ncu_fcd_ctl_msff_ctl_macro__en_1__width_64 (
888 din,
889 en,
890 l1clk,
891 scan_in,
892 siclk,
893 soclk,
894 dout,
895 scan_out);
896wire [63:0] fdin;
897wire [62:0] so;
898
899 input [63:0] din;
900 input en;
901 input l1clk;
902 input scan_in;
903
904
905 input siclk;
906 input soclk;
907
908 output [63:0] dout;
909 output scan_out;
910assign fdin[63:0] = (din[63:0] & {64{en}}) | (dout[63:0] & ~{64{en}});
911
912
913
914
915
916
917dff #(64) d0_0 (
918.l1clk(l1clk),
919.siclk(siclk),
920.soclk(soclk),
921.d(fdin[63:0]),
922.si({scan_in,so[62:0]}),
923.so({so[62:0],scan_out}),
924.q(dout[63:0])
925);
926
927
928
929
930
931
932
933
934
935
936
937
938endmodule
939
940
941
942
943
944
945
946
947
948
949
950
951
952// any PARAMS parms go into naming of macro
953
954module ncu_fcd_ctl_msff_ctl_macro__width_72 (
955 din,
956 l1clk,
957 scan_in,
958 siclk,
959 soclk,
960 dout,
961 scan_out);
962wire [71:0] fdin;
963wire [70:0] so;
964
965 input [71:0] din;
966 input l1clk;
967 input scan_in;
968
969
970 input siclk;
971 input soclk;
972
973 output [71:0] dout;
974 output scan_out;
975assign fdin[71:0] = din[71:0];
976
977
978
979
980
981
982dff #(72) d0_0 (
983.l1clk(l1clk),
984.siclk(siclk),
985.soclk(soclk),
986.d(fdin[71:0]),
987.si({scan_in,so[70:0]}),
988.so({so[70:0],scan_out}),
989.q(dout[71:0])
990);
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003endmodule
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017// any PARAMS parms go into naming of macro
1018
1019module ncu_fcd_ctl_msff_ctl_macro__width_3 (
1020 din,
1021 l1clk,
1022 scan_in,
1023 siclk,
1024 soclk,
1025 dout,
1026 scan_out);
1027wire [2:0] fdin;
1028wire [1:0] so;
1029
1030 input [2:0] din;
1031 input l1clk;
1032 input scan_in;
1033
1034
1035 input siclk;
1036 input soclk;
1037
1038 output [2:0] dout;
1039 output scan_out;
1040assign fdin[2:0] = din[2:0];
1041
1042
1043
1044
1045
1046
1047dff #(3) d0_0 (
1048.l1clk(l1clk),
1049.siclk(siclk),
1050.soclk(soclk),
1051.d(fdin[2:0]),
1052.si({scan_in,so[1:0]}),
1053.so({so[1:0],scan_out}),
1054.q(dout[2:0])
1055);
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068endmodule
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082// any PARAMS parms go into naming of macro
1083
1084module ncu_fcd_ctl_msff_ctl_macro__width_8 (
1085 din,
1086 l1clk,
1087 scan_in,
1088 siclk,
1089 soclk,
1090 dout,
1091 scan_out);
1092wire [7:0] fdin;
1093wire [6:0] so;
1094
1095 input [7:0] din;
1096 input l1clk;
1097 input scan_in;
1098
1099
1100 input siclk;
1101 input soclk;
1102
1103 output [7:0] dout;
1104 output scan_out;
1105assign fdin[7:0] = din[7:0];
1106
1107
1108
1109
1110
1111
1112dff #(8) d0_0 (
1113.l1clk(l1clk),
1114.siclk(siclk),
1115.soclk(soclk),
1116.d(fdin[7:0]),
1117.si({scan_in,so[6:0]}),
1118.so({so[6:0],scan_out}),
1119.q(dout[7:0])
1120);
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133endmodule
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147// any PARAMS parms go into naming of macro
1148
1149module ncu_fcd_ctl_msff_ctl_macro__width_64 (
1150 din,
1151 l1clk,
1152 scan_in,
1153 siclk,
1154 soclk,
1155 dout,
1156 scan_out);
1157wire [63:0] fdin;
1158wire [62:0] so;
1159
1160 input [63:0] din;
1161 input l1clk;
1162 input scan_in;
1163
1164
1165 input siclk;
1166 input soclk;
1167
1168 output [63:0] dout;
1169 output scan_out;
1170assign fdin[63:0] = din[63:0];
1171
1172
1173
1174
1175
1176
1177dff #(64) d0_0 (
1178.l1clk(l1clk),
1179.siclk(siclk),
1180.soclk(soclk),
1181.d(fdin[63:0]),
1182.si({scan_in,so[62:0]}),
1183.so({so[62:0],scan_out}),
1184.q(dout[63:0])
1185);
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198endmodule
1199
1200
1201
1202
1203
1204// any PARAMS parms go into naming of macro
1205
1206module ncu_fcd_ctl_msff_ctl_macro__width_122 (
1207 din,
1208 l1clk,
1209 scan_in,
1210 siclk,
1211 soclk,
1212 dout,
1213 scan_out);
1214wire [121:0] fdin;
1215wire [120:0] so;
1216
1217 input [121:0] din;
1218 input l1clk;
1219 input scan_in;
1220
1221
1222 input siclk;
1223 input soclk;
1224
1225 output [121:0] dout;
1226 output scan_out;
1227assign fdin[121:0] = din[121:0];
1228
1229
1230
1231
1232
1233
1234dff #(122) d0_0 (
1235.l1clk(l1clk),
1236.siclk(siclk),
1237.soclk(soclk),
1238.d(fdin[121:0]),
1239.si({scan_in,so[120:0]}),
1240.so({so[120:0],scan_out}),
1241.q(dout[121:0])
1242);
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255endmodule
1256
1257
1258
1259// any PARAMS parms go into naming of macro
1260
1261module ncu_fcd_ctl_msff_ctl_macro__width_2 (
1262 din,
1263 l1clk,
1264 scan_in,
1265 siclk,
1266 soclk,
1267 dout,
1268 scan_out);
1269wire [1:0] fdin;
1270wire [0:0] so;
1271
1272 input [1:0] din;
1273 input l1clk;
1274 input scan_in;
1275
1276
1277 input siclk;
1278 input soclk;
1279
1280 output [1:0] dout;
1281 output scan_out;
1282assign fdin[1:0] = din[1:0];
1283
1284
1285
1286
1287
1288
1289dff #(2) d0_0 (
1290.l1clk(l1clk),
1291.siclk(siclk),
1292.soclk(soclk),
1293.d(fdin[1:0]),
1294.si({scan_in,so[0:0]}),
1295.so({so[0:0],scan_out}),
1296.q(dout[1:0])
1297);
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310endmodule
1311
1312
1313
1314
1315// any PARAMS parms go into naming of macro
1316
1317module ncu_fcd_ctl_msff_ctl_macro__width_146 (
1318 din,
1319 l1clk,
1320 scan_in,
1321 siclk,
1322 soclk,
1323 dout,
1324 scan_out);
1325wire [145:0] fdin;
1326wire [144:0] so;
1327
1328 input [145:0] din;
1329 input l1clk;
1330 input scan_in;
1331
1332
1333 input siclk;
1334 input soclk;
1335
1336 output [145:0] dout;
1337 output scan_out;
1338assign fdin[145:0] = din[145:0];
1339
1340
1341
1342
1343
1344
1345dff #(146) d0_0 (
1346.l1clk(l1clk),
1347.siclk(siclk),
1348.soclk(soclk),
1349.d(fdin[145:0]),
1350.si({scan_in,so[144:0]}),
1351.so({so[144:0],scan_out}),
1352.q(dout[145:0])
1353);
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366endmodule
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380// any PARAMS parms go into naming of macro
1381
1382module ncu_fcd_ctl_msff_ctl_macro__en_1__width_144 (
1383 din,
1384 en,
1385 l1clk,
1386 scan_in,
1387 siclk,
1388 soclk,
1389 dout,
1390 scan_out);
1391wire [143:0] fdin;
1392wire [142:0] so;
1393
1394 input [143:0] din;
1395 input en;
1396 input l1clk;
1397 input scan_in;
1398
1399
1400 input siclk;
1401 input soclk;
1402
1403 output [143:0] dout;
1404 output scan_out;
1405assign fdin[143:0] = (din[143:0] & {144{en}}) | (dout[143:0] & ~{144{en}});
1406
1407
1408
1409
1410
1411
1412dff #(144) d0_0 (
1413.l1clk(l1clk),
1414.siclk(siclk),
1415.soclk(soclk),
1416.d(fdin[143:0]),
1417.si({scan_in,so[142:0]}),
1418.so({so[142:0],scan_out}),
1419.q(dout[143:0])
1420);
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433endmodule
1434
1435
1436
1437
1438
1439
1440// any PARAMS parms go into naming of macro
1441
1442module ncu_fcd_ctl_msff_ctl_macro__en_1__width_154 (
1443 din,
1444 en,
1445 l1clk,
1446 scan_in,
1447 siclk,
1448 soclk,
1449 dout,
1450 scan_out);
1451wire [153:0] fdin;
1452wire [152:0] so;
1453
1454 input [153:0] din;
1455 input en;
1456 input l1clk;
1457 input scan_in;
1458
1459
1460 input siclk;
1461 input soclk;
1462
1463 output [153:0] dout;
1464 output scan_out;
1465assign fdin[153:0] = (din[153:0] & {154{en}}) | (dout[153:0] & ~{154{en}});
1466
1467
1468
1469
1470
1471
1472dff #(154) d0_0 (
1473.l1clk(l1clk),
1474.siclk(siclk),
1475.soclk(soclk),
1476.d(fdin[153:0]),
1477.si({scan_in,so[152:0]}),
1478.so({so[152:0],scan_out}),
1479.q(dout[153:0])
1480);
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493endmodule
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507// any PARAMS parms go into naming of macro
1508
1509module ncu_fcd_ctl_msff_ctl_macro__en_1__width_176 (
1510 din,
1511 en,
1512 l1clk,
1513 scan_in,
1514 siclk,
1515 soclk,
1516 dout,
1517 scan_out);
1518wire [175:0] fdin;
1519wire [174:0] so;
1520
1521 input [175:0] din;
1522 input en;
1523 input l1clk;
1524 input scan_in;
1525
1526
1527 input siclk;
1528 input soclk;
1529
1530 output [175:0] dout;
1531 output scan_out;
1532assign fdin[175:0] = (din[175:0] & {176{en}}) | (dout[175:0] & ~{176{en}});
1533
1534
1535
1536
1537
1538
1539dff #(176) d0_0 (
1540.l1clk(l1clk),
1541.siclk(siclk),
1542.soclk(soclk),
1543.d(fdin[175:0]),
1544.si({scan_in,so[174:0]}),
1545.so({so[174:0],scan_out}),
1546.q(dout[175:0])
1547);
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560endmodule
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570// Description: Spare gate macro for control blocks
1571//
1572// Param num controls the number of times the macro is added
1573// flops=0 can be used to use only combination spare logic
1574
1575
1576module ncu_fcd_ctl_spare_ctl_macro__num_11 (
1577 l1clk,
1578 scan_in,
1579 siclk,
1580 soclk,
1581 scan_out);
1582wire si_0;
1583wire so_0;
1584wire spare0_flop_unused;
1585wire spare0_buf_32x_unused;
1586wire spare0_nand3_8x_unused;
1587wire spare0_inv_8x_unused;
1588wire spare0_aoi22_4x_unused;
1589wire spare0_buf_8x_unused;
1590wire spare0_oai22_4x_unused;
1591wire spare0_inv_16x_unused;
1592wire spare0_nand2_16x_unused;
1593wire spare0_nor3_4x_unused;
1594wire spare0_nand2_8x_unused;
1595wire spare0_buf_16x_unused;
1596wire spare0_nor2_16x_unused;
1597wire spare0_inv_32x_unused;
1598wire si_1;
1599wire so_1;
1600wire spare1_flop_unused;
1601wire spare1_buf_32x_unused;
1602wire spare1_nand3_8x_unused;
1603wire spare1_inv_8x_unused;
1604wire spare1_aoi22_4x_unused;
1605wire spare1_buf_8x_unused;
1606wire spare1_oai22_4x_unused;
1607wire spare1_inv_16x_unused;
1608wire spare1_nand2_16x_unused;
1609wire spare1_nor3_4x_unused;
1610wire spare1_nand2_8x_unused;
1611wire spare1_buf_16x_unused;
1612wire spare1_nor2_16x_unused;
1613wire spare1_inv_32x_unused;
1614wire si_2;
1615wire so_2;
1616wire spare2_flop_unused;
1617wire spare2_buf_32x_unused;
1618wire spare2_nand3_8x_unused;
1619wire spare2_inv_8x_unused;
1620wire spare2_aoi22_4x_unused;
1621wire spare2_buf_8x_unused;
1622wire spare2_oai22_4x_unused;
1623wire spare2_inv_16x_unused;
1624wire spare2_nand2_16x_unused;
1625wire spare2_nor3_4x_unused;
1626wire spare2_nand2_8x_unused;
1627wire spare2_buf_16x_unused;
1628wire spare2_nor2_16x_unused;
1629wire spare2_inv_32x_unused;
1630wire si_3;
1631wire so_3;
1632wire spare3_flop_unused;
1633wire spare3_buf_32x_unused;
1634wire spare3_nand3_8x_unused;
1635wire spare3_inv_8x_unused;
1636wire spare3_aoi22_4x_unused;
1637wire spare3_buf_8x_unused;
1638wire spare3_oai22_4x_unused;
1639wire spare3_inv_16x_unused;
1640wire spare3_nand2_16x_unused;
1641wire spare3_nor3_4x_unused;
1642wire spare3_nand2_8x_unused;
1643wire spare3_buf_16x_unused;
1644wire spare3_nor2_16x_unused;
1645wire spare3_inv_32x_unused;
1646wire si_4;
1647wire so_4;
1648wire spare4_flop_unused;
1649wire spare4_buf_32x_unused;
1650wire spare4_nand3_8x_unused;
1651wire spare4_inv_8x_unused;
1652wire spare4_aoi22_4x_unused;
1653wire spare4_buf_8x_unused;
1654wire spare4_oai22_4x_unused;
1655wire spare4_inv_16x_unused;
1656wire spare4_nand2_16x_unused;
1657wire spare4_nor3_4x_unused;
1658wire spare4_nand2_8x_unused;
1659wire spare4_buf_16x_unused;
1660wire spare4_nor2_16x_unused;
1661wire spare4_inv_32x_unused;
1662wire si_5;
1663wire so_5;
1664wire spare5_flop_unused;
1665wire spare5_buf_32x_unused;
1666wire spare5_nand3_8x_unused;
1667wire spare5_inv_8x_unused;
1668wire spare5_aoi22_4x_unused;
1669wire spare5_buf_8x_unused;
1670wire spare5_oai22_4x_unused;
1671wire spare5_inv_16x_unused;
1672wire spare5_nand2_16x_unused;
1673wire spare5_nor3_4x_unused;
1674wire spare5_nand2_8x_unused;
1675wire spare5_buf_16x_unused;
1676wire spare5_nor2_16x_unused;
1677wire spare5_inv_32x_unused;
1678wire si_6;
1679wire so_6;
1680wire spare6_flop_unused;
1681wire spare6_buf_32x_unused;
1682wire spare6_nand3_8x_unused;
1683wire spare6_inv_8x_unused;
1684wire spare6_aoi22_4x_unused;
1685wire spare6_buf_8x_unused;
1686wire spare6_oai22_4x_unused;
1687wire spare6_inv_16x_unused;
1688wire spare6_nand2_16x_unused;
1689wire spare6_nor3_4x_unused;
1690wire spare6_nand2_8x_unused;
1691wire spare6_buf_16x_unused;
1692wire spare6_nor2_16x_unused;
1693wire spare6_inv_32x_unused;
1694wire si_7;
1695wire so_7;
1696wire spare7_flop_unused;
1697wire spare7_buf_32x_unused;
1698wire spare7_nand3_8x_unused;
1699wire spare7_inv_8x_unused;
1700wire spare7_aoi22_4x_unused;
1701wire spare7_buf_8x_unused;
1702wire spare7_oai22_4x_unused;
1703wire spare7_inv_16x_unused;
1704wire spare7_nand2_16x_unused;
1705wire spare7_nor3_4x_unused;
1706wire spare7_nand2_8x_unused;
1707wire spare7_buf_16x_unused;
1708wire spare7_nor2_16x_unused;
1709wire spare7_inv_32x_unused;
1710wire si_8;
1711wire so_8;
1712wire spare8_flop_unused;
1713wire spare8_buf_32x_unused;
1714wire spare8_nand3_8x_unused;
1715wire spare8_inv_8x_unused;
1716wire spare8_aoi22_4x_unused;
1717wire spare8_buf_8x_unused;
1718wire spare8_oai22_4x_unused;
1719wire spare8_inv_16x_unused;
1720wire spare8_nand2_16x_unused;
1721wire spare8_nor3_4x_unused;
1722wire spare8_nand2_8x_unused;
1723wire spare8_buf_16x_unused;
1724wire spare8_nor2_16x_unused;
1725wire spare8_inv_32x_unused;
1726wire si_9;
1727wire so_9;
1728wire spare9_flop_unused;
1729wire spare9_buf_32x_unused;
1730wire spare9_nand3_8x_unused;
1731wire spare9_inv_8x_unused;
1732wire spare9_aoi22_4x_unused;
1733wire spare9_buf_8x_unused;
1734wire spare9_oai22_4x_unused;
1735wire spare9_inv_16x_unused;
1736wire spare9_nand2_16x_unused;
1737wire spare9_nor3_4x_unused;
1738wire spare9_nand2_8x_unused;
1739wire spare9_buf_16x_unused;
1740wire spare9_nor2_16x_unused;
1741wire spare9_inv_32x_unused;
1742wire si_10;
1743wire so_10;
1744wire spare10_flop_unused;
1745wire spare10_buf_32x_unused;
1746wire spare10_nand3_8x_unused;
1747wire spare10_inv_8x_unused;
1748wire spare10_aoi22_4x_unused;
1749wire spare10_buf_8x_unused;
1750wire spare10_oai22_4x_unused;
1751wire spare10_inv_16x_unused;
1752wire spare10_nand2_16x_unused;
1753wire spare10_nor3_4x_unused;
1754wire spare10_nand2_8x_unused;
1755wire spare10_buf_16x_unused;
1756wire spare10_nor2_16x_unused;
1757wire spare10_inv_32x_unused;
1758
1759
1760input l1clk;
1761input scan_in;
1762input siclk;
1763input soclk;
1764output scan_out;
1765
1766cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
1767 .siclk(siclk),
1768 .soclk(soclk),
1769 .si(si_0),
1770 .so(so_0),
1771 .d(1'b0),
1772 .q(spare0_flop_unused));
1773assign si_0 = scan_in;
1774
1775cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
1776 .out(spare0_buf_32x_unused));
1777cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
1778 .in1(1'b1),
1779 .in2(1'b1),
1780 .out(spare0_nand3_8x_unused));
1781cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
1782 .out(spare0_inv_8x_unused));
1783cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
1784 .in01(1'b1),
1785 .in10(1'b1),
1786 .in11(1'b1),
1787 .out(spare0_aoi22_4x_unused));
1788cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
1789 .out(spare0_buf_8x_unused));
1790cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
1791 .in01(1'b1),
1792 .in10(1'b1),
1793 .in11(1'b1),
1794 .out(spare0_oai22_4x_unused));
1795cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
1796 .out(spare0_inv_16x_unused));
1797cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
1798 .in1(1'b1),
1799 .out(spare0_nand2_16x_unused));
1800cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
1801 .in1(1'b0),
1802 .in2(1'b0),
1803 .out(spare0_nor3_4x_unused));
1804cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
1805 .in1(1'b1),
1806 .out(spare0_nand2_8x_unused));
1807cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
1808 .out(spare0_buf_16x_unused));
1809cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
1810 .in1(1'b0),
1811 .out(spare0_nor2_16x_unused));
1812cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
1813 .out(spare0_inv_32x_unused));
1814
1815cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
1816 .siclk(siclk),
1817 .soclk(soclk),
1818 .si(si_1),
1819 .so(so_1),
1820 .d(1'b0),
1821 .q(spare1_flop_unused));
1822assign si_1 = so_0;
1823
1824cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
1825 .out(spare1_buf_32x_unused));
1826cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
1827 .in1(1'b1),
1828 .in2(1'b1),
1829 .out(spare1_nand3_8x_unused));
1830cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
1831 .out(spare1_inv_8x_unused));
1832cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
1833 .in01(1'b1),
1834 .in10(1'b1),
1835 .in11(1'b1),
1836 .out(spare1_aoi22_4x_unused));
1837cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
1838 .out(spare1_buf_8x_unused));
1839cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
1840 .in01(1'b1),
1841 .in10(1'b1),
1842 .in11(1'b1),
1843 .out(spare1_oai22_4x_unused));
1844cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
1845 .out(spare1_inv_16x_unused));
1846cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
1847 .in1(1'b1),
1848 .out(spare1_nand2_16x_unused));
1849cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
1850 .in1(1'b0),
1851 .in2(1'b0),
1852 .out(spare1_nor3_4x_unused));
1853cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
1854 .in1(1'b1),
1855 .out(spare1_nand2_8x_unused));
1856cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
1857 .out(spare1_buf_16x_unused));
1858cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
1859 .in1(1'b0),
1860 .out(spare1_nor2_16x_unused));
1861cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
1862 .out(spare1_inv_32x_unused));
1863
1864cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
1865 .siclk(siclk),
1866 .soclk(soclk),
1867 .si(si_2),
1868 .so(so_2),
1869 .d(1'b0),
1870 .q(spare2_flop_unused));
1871assign si_2 = so_1;
1872
1873cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
1874 .out(spare2_buf_32x_unused));
1875cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
1876 .in1(1'b1),
1877 .in2(1'b1),
1878 .out(spare2_nand3_8x_unused));
1879cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
1880 .out(spare2_inv_8x_unused));
1881cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
1882 .in01(1'b1),
1883 .in10(1'b1),
1884 .in11(1'b1),
1885 .out(spare2_aoi22_4x_unused));
1886cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
1887 .out(spare2_buf_8x_unused));
1888cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
1889 .in01(1'b1),
1890 .in10(1'b1),
1891 .in11(1'b1),
1892 .out(spare2_oai22_4x_unused));
1893cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
1894 .out(spare2_inv_16x_unused));
1895cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
1896 .in1(1'b1),
1897 .out(spare2_nand2_16x_unused));
1898cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
1899 .in1(1'b0),
1900 .in2(1'b0),
1901 .out(spare2_nor3_4x_unused));
1902cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
1903 .in1(1'b1),
1904 .out(spare2_nand2_8x_unused));
1905cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
1906 .out(spare2_buf_16x_unused));
1907cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
1908 .in1(1'b0),
1909 .out(spare2_nor2_16x_unused));
1910cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
1911 .out(spare2_inv_32x_unused));
1912
1913cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
1914 .siclk(siclk),
1915 .soclk(soclk),
1916 .si(si_3),
1917 .so(so_3),
1918 .d(1'b0),
1919 .q(spare3_flop_unused));
1920assign si_3 = so_2;
1921
1922cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
1923 .out(spare3_buf_32x_unused));
1924cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
1925 .in1(1'b1),
1926 .in2(1'b1),
1927 .out(spare3_nand3_8x_unused));
1928cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
1929 .out(spare3_inv_8x_unused));
1930cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
1931 .in01(1'b1),
1932 .in10(1'b1),
1933 .in11(1'b1),
1934 .out(spare3_aoi22_4x_unused));
1935cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
1936 .out(spare3_buf_8x_unused));
1937cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
1938 .in01(1'b1),
1939 .in10(1'b1),
1940 .in11(1'b1),
1941 .out(spare3_oai22_4x_unused));
1942cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
1943 .out(spare3_inv_16x_unused));
1944cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
1945 .in1(1'b1),
1946 .out(spare3_nand2_16x_unused));
1947cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
1948 .in1(1'b0),
1949 .in2(1'b0),
1950 .out(spare3_nor3_4x_unused));
1951cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
1952 .in1(1'b1),
1953 .out(spare3_nand2_8x_unused));
1954cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
1955 .out(spare3_buf_16x_unused));
1956cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
1957 .in1(1'b0),
1958 .out(spare3_nor2_16x_unused));
1959cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
1960 .out(spare3_inv_32x_unused));
1961
1962cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
1963 .siclk(siclk),
1964 .soclk(soclk),
1965 .si(si_4),
1966 .so(so_4),
1967 .d(1'b0),
1968 .q(spare4_flop_unused));
1969assign si_4 = so_3;
1970
1971cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
1972 .out(spare4_buf_32x_unused));
1973cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
1974 .in1(1'b1),
1975 .in2(1'b1),
1976 .out(spare4_nand3_8x_unused));
1977cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
1978 .out(spare4_inv_8x_unused));
1979cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
1980 .in01(1'b1),
1981 .in10(1'b1),
1982 .in11(1'b1),
1983 .out(spare4_aoi22_4x_unused));
1984cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
1985 .out(spare4_buf_8x_unused));
1986cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
1987 .in01(1'b1),
1988 .in10(1'b1),
1989 .in11(1'b1),
1990 .out(spare4_oai22_4x_unused));
1991cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
1992 .out(spare4_inv_16x_unused));
1993cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
1994 .in1(1'b1),
1995 .out(spare4_nand2_16x_unused));
1996cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
1997 .in1(1'b0),
1998 .in2(1'b0),
1999 .out(spare4_nor3_4x_unused));
2000cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
2001 .in1(1'b1),
2002 .out(spare4_nand2_8x_unused));
2003cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
2004 .out(spare4_buf_16x_unused));
2005cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
2006 .in1(1'b0),
2007 .out(spare4_nor2_16x_unused));
2008cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
2009 .out(spare4_inv_32x_unused));
2010
2011cl_sc1_msff_8x spare5_flop (.l1clk(l1clk),
2012 .siclk(siclk),
2013 .soclk(soclk),
2014 .si(si_5),
2015 .so(so_5),
2016 .d(1'b0),
2017 .q(spare5_flop_unused));
2018assign si_5 = so_4;
2019
2020cl_u1_buf_32x spare5_buf_32x (.in(1'b1),
2021 .out(spare5_buf_32x_unused));
2022cl_u1_nand3_8x spare5_nand3_8x (.in0(1'b1),
2023 .in1(1'b1),
2024 .in2(1'b1),
2025 .out(spare5_nand3_8x_unused));
2026cl_u1_inv_8x spare5_inv_8x (.in(1'b1),
2027 .out(spare5_inv_8x_unused));
2028cl_u1_aoi22_4x spare5_aoi22_4x (.in00(1'b1),
2029 .in01(1'b1),
2030 .in10(1'b1),
2031 .in11(1'b1),
2032 .out(spare5_aoi22_4x_unused));
2033cl_u1_buf_8x spare5_buf_8x (.in(1'b1),
2034 .out(spare5_buf_8x_unused));
2035cl_u1_oai22_4x spare5_oai22_4x (.in00(1'b1),
2036 .in01(1'b1),
2037 .in10(1'b1),
2038 .in11(1'b1),
2039 .out(spare5_oai22_4x_unused));
2040cl_u1_inv_16x spare5_inv_16x (.in(1'b1),
2041 .out(spare5_inv_16x_unused));
2042cl_u1_nand2_16x spare5_nand2_16x (.in0(1'b1),
2043 .in1(1'b1),
2044 .out(spare5_nand2_16x_unused));
2045cl_u1_nor3_4x spare5_nor3_4x (.in0(1'b0),
2046 .in1(1'b0),
2047 .in2(1'b0),
2048 .out(spare5_nor3_4x_unused));
2049cl_u1_nand2_8x spare5_nand2_8x (.in0(1'b1),
2050 .in1(1'b1),
2051 .out(spare5_nand2_8x_unused));
2052cl_u1_buf_16x spare5_buf_16x (.in(1'b1),
2053 .out(spare5_buf_16x_unused));
2054cl_u1_nor2_16x spare5_nor2_16x (.in0(1'b0),
2055 .in1(1'b0),
2056 .out(spare5_nor2_16x_unused));
2057cl_u1_inv_32x spare5_inv_32x (.in(1'b1),
2058 .out(spare5_inv_32x_unused));
2059
2060cl_sc1_msff_8x spare6_flop (.l1clk(l1clk),
2061 .siclk(siclk),
2062 .soclk(soclk),
2063 .si(si_6),
2064 .so(so_6),
2065 .d(1'b0),
2066 .q(spare6_flop_unused));
2067assign si_6 = so_5;
2068
2069cl_u1_buf_32x spare6_buf_32x (.in(1'b1),
2070 .out(spare6_buf_32x_unused));
2071cl_u1_nand3_8x spare6_nand3_8x (.in0(1'b1),
2072 .in1(1'b1),
2073 .in2(1'b1),
2074 .out(spare6_nand3_8x_unused));
2075cl_u1_inv_8x spare6_inv_8x (.in(1'b1),
2076 .out(spare6_inv_8x_unused));
2077cl_u1_aoi22_4x spare6_aoi22_4x (.in00(1'b1),
2078 .in01(1'b1),
2079 .in10(1'b1),
2080 .in11(1'b1),
2081 .out(spare6_aoi22_4x_unused));
2082cl_u1_buf_8x spare6_buf_8x (.in(1'b1),
2083 .out(spare6_buf_8x_unused));
2084cl_u1_oai22_4x spare6_oai22_4x (.in00(1'b1),
2085 .in01(1'b1),
2086 .in10(1'b1),
2087 .in11(1'b1),
2088 .out(spare6_oai22_4x_unused));
2089cl_u1_inv_16x spare6_inv_16x (.in(1'b1),
2090 .out(spare6_inv_16x_unused));
2091cl_u1_nand2_16x spare6_nand2_16x (.in0(1'b1),
2092 .in1(1'b1),
2093 .out(spare6_nand2_16x_unused));
2094cl_u1_nor3_4x spare6_nor3_4x (.in0(1'b0),
2095 .in1(1'b0),
2096 .in2(1'b0),
2097 .out(spare6_nor3_4x_unused));
2098cl_u1_nand2_8x spare6_nand2_8x (.in0(1'b1),
2099 .in1(1'b1),
2100 .out(spare6_nand2_8x_unused));
2101cl_u1_buf_16x spare6_buf_16x (.in(1'b1),
2102 .out(spare6_buf_16x_unused));
2103cl_u1_nor2_16x spare6_nor2_16x (.in0(1'b0),
2104 .in1(1'b0),
2105 .out(spare6_nor2_16x_unused));
2106cl_u1_inv_32x spare6_inv_32x (.in(1'b1),
2107 .out(spare6_inv_32x_unused));
2108
2109cl_sc1_msff_8x spare7_flop (.l1clk(l1clk),
2110 .siclk(siclk),
2111 .soclk(soclk),
2112 .si(si_7),
2113 .so(so_7),
2114 .d(1'b0),
2115 .q(spare7_flop_unused));
2116assign si_7 = so_6;
2117
2118cl_u1_buf_32x spare7_buf_32x (.in(1'b1),
2119 .out(spare7_buf_32x_unused));
2120cl_u1_nand3_8x spare7_nand3_8x (.in0(1'b1),
2121 .in1(1'b1),
2122 .in2(1'b1),
2123 .out(spare7_nand3_8x_unused));
2124cl_u1_inv_8x spare7_inv_8x (.in(1'b1),
2125 .out(spare7_inv_8x_unused));
2126cl_u1_aoi22_4x spare7_aoi22_4x (.in00(1'b1),
2127 .in01(1'b1),
2128 .in10(1'b1),
2129 .in11(1'b1),
2130 .out(spare7_aoi22_4x_unused));
2131cl_u1_buf_8x spare7_buf_8x (.in(1'b1),
2132 .out(spare7_buf_8x_unused));
2133cl_u1_oai22_4x spare7_oai22_4x (.in00(1'b1),
2134 .in01(1'b1),
2135 .in10(1'b1),
2136 .in11(1'b1),
2137 .out(spare7_oai22_4x_unused));
2138cl_u1_inv_16x spare7_inv_16x (.in(1'b1),
2139 .out(spare7_inv_16x_unused));
2140cl_u1_nand2_16x spare7_nand2_16x (.in0(1'b1),
2141 .in1(1'b1),
2142 .out(spare7_nand2_16x_unused));
2143cl_u1_nor3_4x spare7_nor3_4x (.in0(1'b0),
2144 .in1(1'b0),
2145 .in2(1'b0),
2146 .out(spare7_nor3_4x_unused));
2147cl_u1_nand2_8x spare7_nand2_8x (.in0(1'b1),
2148 .in1(1'b1),
2149 .out(spare7_nand2_8x_unused));
2150cl_u1_buf_16x spare7_buf_16x (.in(1'b1),
2151 .out(spare7_buf_16x_unused));
2152cl_u1_nor2_16x spare7_nor2_16x (.in0(1'b0),
2153 .in1(1'b0),
2154 .out(spare7_nor2_16x_unused));
2155cl_u1_inv_32x spare7_inv_32x (.in(1'b1),
2156 .out(spare7_inv_32x_unused));
2157
2158cl_sc1_msff_8x spare8_flop (.l1clk(l1clk),
2159 .siclk(siclk),
2160 .soclk(soclk),
2161 .si(si_8),
2162 .so(so_8),
2163 .d(1'b0),
2164 .q(spare8_flop_unused));
2165assign si_8 = so_7;
2166
2167cl_u1_buf_32x spare8_buf_32x (.in(1'b1),
2168 .out(spare8_buf_32x_unused));
2169cl_u1_nand3_8x spare8_nand3_8x (.in0(1'b1),
2170 .in1(1'b1),
2171 .in2(1'b1),
2172 .out(spare8_nand3_8x_unused));
2173cl_u1_inv_8x spare8_inv_8x (.in(1'b1),
2174 .out(spare8_inv_8x_unused));
2175cl_u1_aoi22_4x spare8_aoi22_4x (.in00(1'b1),
2176 .in01(1'b1),
2177 .in10(1'b1),
2178 .in11(1'b1),
2179 .out(spare8_aoi22_4x_unused));
2180cl_u1_buf_8x spare8_buf_8x (.in(1'b1),
2181 .out(spare8_buf_8x_unused));
2182cl_u1_oai22_4x spare8_oai22_4x (.in00(1'b1),
2183 .in01(1'b1),
2184 .in10(1'b1),
2185 .in11(1'b1),
2186 .out(spare8_oai22_4x_unused));
2187cl_u1_inv_16x spare8_inv_16x (.in(1'b1),
2188 .out(spare8_inv_16x_unused));
2189cl_u1_nand2_16x spare8_nand2_16x (.in0(1'b1),
2190 .in1(1'b1),
2191 .out(spare8_nand2_16x_unused));
2192cl_u1_nor3_4x spare8_nor3_4x (.in0(1'b0),
2193 .in1(1'b0),
2194 .in2(1'b0),
2195 .out(spare8_nor3_4x_unused));
2196cl_u1_nand2_8x spare8_nand2_8x (.in0(1'b1),
2197 .in1(1'b1),
2198 .out(spare8_nand2_8x_unused));
2199cl_u1_buf_16x spare8_buf_16x (.in(1'b1),
2200 .out(spare8_buf_16x_unused));
2201cl_u1_nor2_16x spare8_nor2_16x (.in0(1'b0),
2202 .in1(1'b0),
2203 .out(spare8_nor2_16x_unused));
2204cl_u1_inv_32x spare8_inv_32x (.in(1'b1),
2205 .out(spare8_inv_32x_unused));
2206
2207cl_sc1_msff_8x spare9_flop (.l1clk(l1clk),
2208 .siclk(siclk),
2209 .soclk(soclk),
2210 .si(si_9),
2211 .so(so_9),
2212 .d(1'b0),
2213 .q(spare9_flop_unused));
2214assign si_9 = so_8;
2215
2216cl_u1_buf_32x spare9_buf_32x (.in(1'b1),
2217 .out(spare9_buf_32x_unused));
2218cl_u1_nand3_8x spare9_nand3_8x (.in0(1'b1),
2219 .in1(1'b1),
2220 .in2(1'b1),
2221 .out(spare9_nand3_8x_unused));
2222cl_u1_inv_8x spare9_inv_8x (.in(1'b1),
2223 .out(spare9_inv_8x_unused));
2224cl_u1_aoi22_4x spare9_aoi22_4x (.in00(1'b1),
2225 .in01(1'b1),
2226 .in10(1'b1),
2227 .in11(1'b1),
2228 .out(spare9_aoi22_4x_unused));
2229cl_u1_buf_8x spare9_buf_8x (.in(1'b1),
2230 .out(spare9_buf_8x_unused));
2231cl_u1_oai22_4x spare9_oai22_4x (.in00(1'b1),
2232 .in01(1'b1),
2233 .in10(1'b1),
2234 .in11(1'b1),
2235 .out(spare9_oai22_4x_unused));
2236cl_u1_inv_16x spare9_inv_16x (.in(1'b1),
2237 .out(spare9_inv_16x_unused));
2238cl_u1_nand2_16x spare9_nand2_16x (.in0(1'b1),
2239 .in1(1'b1),
2240 .out(spare9_nand2_16x_unused));
2241cl_u1_nor3_4x spare9_nor3_4x (.in0(1'b0),
2242 .in1(1'b0),
2243 .in2(1'b0),
2244 .out(spare9_nor3_4x_unused));
2245cl_u1_nand2_8x spare9_nand2_8x (.in0(1'b1),
2246 .in1(1'b1),
2247 .out(spare9_nand2_8x_unused));
2248cl_u1_buf_16x spare9_buf_16x (.in(1'b1),
2249 .out(spare9_buf_16x_unused));
2250cl_u1_nor2_16x spare9_nor2_16x (.in0(1'b0),
2251 .in1(1'b0),
2252 .out(spare9_nor2_16x_unused));
2253cl_u1_inv_32x spare9_inv_32x (.in(1'b1),
2254 .out(spare9_inv_32x_unused));
2255
2256cl_sc1_msff_8x spare10_flop (.l1clk(l1clk),
2257 .siclk(siclk),
2258 .soclk(soclk),
2259 .si(si_10),
2260 .so(so_10),
2261 .d(1'b0),
2262 .q(spare10_flop_unused));
2263assign si_10 = so_9;
2264
2265cl_u1_buf_32x spare10_buf_32x (.in(1'b1),
2266 .out(spare10_buf_32x_unused));
2267cl_u1_nand3_8x spare10_nand3_8x (.in0(1'b1),
2268 .in1(1'b1),
2269 .in2(1'b1),
2270 .out(spare10_nand3_8x_unused));
2271cl_u1_inv_8x spare10_inv_8x (.in(1'b1),
2272 .out(spare10_inv_8x_unused));
2273cl_u1_aoi22_4x spare10_aoi22_4x (.in00(1'b1),
2274 .in01(1'b1),
2275 .in10(1'b1),
2276 .in11(1'b1),
2277 .out(spare10_aoi22_4x_unused));
2278cl_u1_buf_8x spare10_buf_8x (.in(1'b1),
2279 .out(spare10_buf_8x_unused));
2280cl_u1_oai22_4x spare10_oai22_4x (.in00(1'b1),
2281 .in01(1'b1),
2282 .in10(1'b1),
2283 .in11(1'b1),
2284 .out(spare10_oai22_4x_unused));
2285cl_u1_inv_16x spare10_inv_16x (.in(1'b1),
2286 .out(spare10_inv_16x_unused));
2287cl_u1_nand2_16x spare10_nand2_16x (.in0(1'b1),
2288 .in1(1'b1),
2289 .out(spare10_nand2_16x_unused));
2290cl_u1_nor3_4x spare10_nor3_4x (.in0(1'b0),
2291 .in1(1'b0),
2292 .in2(1'b0),
2293 .out(spare10_nor3_4x_unused));
2294cl_u1_nand2_8x spare10_nand2_8x (.in0(1'b1),
2295 .in1(1'b1),
2296 .out(spare10_nand2_8x_unused));
2297cl_u1_buf_16x spare10_buf_16x (.in(1'b1),
2298 .out(spare10_buf_16x_unused));
2299cl_u1_nor2_16x spare10_nor2_16x (.in0(1'b0),
2300 .in1(1'b0),
2301 .out(spare10_nor2_16x_unused));
2302cl_u1_inv_32x spare10_inv_32x (.in(1'b1),
2303 .out(spare10_inv_32x_unused));
2304assign scan_out = so_10;
2305
2306
2307
2308endmodule
2309
2310
2311
2312module ncu_mb0_ctl (
2313 mb0_run,
2314 mb0_addr,
2315 mb0_wdata,
2316 mb0_intbuf_wr_en,
2317 mb0_intbuf_rd_en,
2318 mb0_mondo_wr_en,
2319 mb0_mondo_rd_en,
2320 mb0_iobuf_wr_en,
2321 mb0_iobuf_rd_en,
2322 mb0_done,
2323 mb0_fail,
2324 scan_out,
2325 l2clk,
2326 scan_in,
2327 tcu_pce_ov,
2328 tcu_clk_stop,
2329 tcu_aclk,
2330 tcu_bclk,
2331 tcu_scan_en,
2332 mb0_start,
2333 mb0_bisi_mode,
2334 mb0_user_mode,
2335 intbuf_dout,
2336 iobuf_dout,
2337 mondo_data0_dout,
2338 mondo_data1_dout);
2339wire pce_ov;
2340wire stop;
2341wire siclk;
2342wire soclk;
2343wire se;
2344wire l1clk;
2345wire config_reg_scanin;
2346wire config_reg_scanout;
2347wire [8:0] config_in;
2348wire [8:0] config_out;
2349wire start_transition;
2350wire reset_engine;
2351wire mbist_user_loop_mode;
2352wire mbist_done;
2353wire run;
2354wire bisi;
2355wire user_mode;
2356wire user_data_mode;
2357wire user_addr_mode;
2358wire user_loop_mode;
2359wire user_cmpsel_hold;
2360wire ten_n_mode;
2361wire mbist_user_data_mode;
2362wire mbist_user_addr_mode;
2363wire mbist_user_cmpsel_hold;
2364wire mbist_ten_n_mode;
2365wire user_data_reg_scanin;
2366wire user_data_reg_scanout;
2367wire [7:0] user_data_in;
2368wire [7:0] user_data_out;
2369wire user_start_addr_reg_scanin;
2370wire user_start_addr_reg_scanout;
2371wire [5:0] user_start_addr_in;
2372wire [5:0] user_start_addr;
2373wire user_stop_addr_reg_scanin;
2374wire user_stop_addr_reg_scanout;
2375wire [5:0] user_stop_addr_in;
2376wire [5:0] user_stop_addr;
2377wire user_incr_addr_reg_scanin;
2378wire user_incr_addr_reg_scanout;
2379wire [5:0] user_incr_addr_in;
2380wire [5:0] user_incr_addr;
2381wire user_array_sel_reg_scanin;
2382wire user_array_sel_reg_scanout;
2383wire [1:0] user_array_sel_in;
2384wire [1:0] user_array_sel;
2385wire user_cmpsel_reg_scanin;
2386wire user_cmpsel_reg_scanout;
2387wire [1:0] user_cmpsel_in;
2388wire [1:0] user_cmpsel;
2389wire user_bisi_wr_reg_scanin;
2390wire user_bisi_wr_reg_scanout;
2391wire user_bisi_wr_mode_in;
2392wire user_bisi_wr_mode;
2393wire user_bisi_rd_reg_scanin;
2394wire user_bisi_rd_reg_scanout;
2395wire user_bisi_rd_mode_in;
2396wire user_bisi_rd_mode;
2397wire mbist_user_bisi_wr_mode;
2398wire mbist_user_bisi_wr_rd_mode;
2399wire start_transition_reg_scanin;
2400wire start_transition_reg_scanout;
2401wire start_transition_piped;
2402wire run_reg_scanin;
2403wire run_reg_scanout;
2404wire counter_reg_scanin;
2405wire counter_reg_scanout;
2406wire [3:0] counter_in;
2407wire [3:0] counter_out;
2408wire cycle16;
2409wire run_piped16;
2410wire msb;
2411wire intbuf_rd_wr_en_reg_scanin;
2412wire intbuf_rd_wr_en_reg_scanout;
2413wire mbist_intbuf_read;
2414wire mbist_intbuf_write;
2415wire mondo_rd_wr_en_reg_scanin;
2416wire mondo_rd_wr_en_reg_scanout;
2417wire mbist_mondo_read;
2418wire mbist_mondo_write;
2419wire iobuf_rd_wr_en_reg_scanin;
2420wire iobuf_rd_wr_en_reg_scanout;
2421wire mbist_iobuf_read;
2422wire mbist_iobuf_write;
2423wire mb0_addr_reg_scanin;
2424wire mb0_addr_reg_scanout;
2425wire [5:0] mbist_address;
2426wire mb0_wdata_reg_scanin;
2427wire mb0_wdata_reg_scanout;
2428wire [7:0] mbist_wdata;
2429wire done_fail_reg_scanin;
2430wire done_fail_reg_scanout;
2431wire fail;
2432wire intbuf_rd_en_piped2;
2433wire mondo_rd_en_piped2;
2434wire iobuf_rd_en_piped2;
2435wire [1:0] cmpsel_piped3;
2436wire res_read_data_reg_scanin;
2437wire res_read_data_reg_scanout;
2438wire [47:0] res_read_data_piped;
2439wire control_reg_scanin;
2440wire control_reg_scanout;
2441wire [21:0] control_in;
2442wire [21:0] control_out;
2443wire bisi_wr_rd;
2444wire [1:0] array_sel;
2445wire [1:0] cmpsel;
2446wire [1:0] data_control;
2447wire address_mix;
2448wire [3:0] march_element;
2449wire [5:0] array_address;
2450wire upaddress_march;
2451wire [2:0] read_write_control;
2452wire five_cycle_march;
2453wire one_cycle_march;
2454wire increment_addr;
2455wire [5:0] start_addr;
2456wire [5:0] next_array_address;
2457wire next_upaddr_march;
2458wire next_downaddr_march;
2459wire [5:0] stop_addr;
2460wire [6:0] overflow_addr;
2461wire intbuf_sel;
2462wire iobuf_sel;
2463wire [5:0] incr_addr;
2464wire overflow;
2465wire [6:0] compare_addr;
2466wire [5:0] add;
2467wire [5:0] adj_address;
2468wire mondo_sel;
2469wire increment_march_elem;
2470wire [1:0] next_array_sel;
2471wire [1:0] next_cmpsel;
2472wire [1:0] next_data_control;
2473wire next_address_mix;
2474wire [3:0] next_march_element;
2475wire array_write;
2476wire array_read;
2477wire true_data;
2478wire [7:0] data_pattern;
2479wire done_counter_reg_scanin;
2480wire done_counter_reg_scanout;
2481wire [2:0] done_counter_in;
2482wire [2:0] done_counter_out;
2483wire data_pipe_reg1_scanin;
2484wire data_pipe_reg1_scanout;
2485wire [7:0] date_pipe_reg1_in;
2486wire [7:0] data_pipe_out1;
2487wire data_pipe_reg2_scanin;
2488wire data_pipe_reg2_scanout;
2489wire [7:0] date_pipe_reg2_in;
2490wire [7:0] data_pipe_out2;
2491wire data_pipe_reg3_scanin;
2492wire data_pipe_reg3_scanout;
2493wire [7:0] date_pipe_reg3_in;
2494wire [7:0] data_pipe_out3;
2495wire [7:0] ncu_mb0_piped_wdata;
2496wire ren_pipe_reg1_scanin;
2497wire ren_pipe_reg1_scanout;
2498wire [2:0] ren_pipe_reg1_in;
2499wire [2:0] rd_en_piped;
2500wire ren_pipe_reg2_scanin;
2501wire ren_pipe_reg2_scanout;
2502wire [2:0] ren_pipe_reg2_in;
2503wire [2:0] rd_en_piped2;
2504wire ren_pipe_reg3_scanin;
2505wire ren_pipe_reg3_scanout;
2506wire [2:0] ren_pipe_reg3_in;
2507wire [2:0] rd_en_piped3;
2508wire intbuf_rd_en_piped3;
2509wire mondo_rd_en_piped3;
2510wire iobuf_rd_en_piped3;
2511wire cmpsel_pipe_reg1_scanin;
2512wire cmpsel_pipe_reg1_scanout;
2513wire [1:0] cmpsel_pipe_reg1_in;
2514wire [1:0] cmpsel_pipe_out1;
2515wire cmpsel_pipe_reg2_scanin;
2516wire cmpsel_pipe_reg2_scanout;
2517wire [1:0] cmpsel_pipe_reg2_in;
2518wire [1:0] cmpsel_pipe_out2;
2519wire cmpsel_pipe_reg3_scanin;
2520wire cmpsel_pipe_reg3_scanout;
2521wire [1:0] cmpsel_pipe_reg3_in;
2522wire [1:0] cmpsel_pipe_out3;
2523wire cmpsel_pipe_reg4_scanin;
2524wire cmpsel_pipe_reg4_scanout;
2525wire [1:0] cmpsel_pipe_reg4_in;
2526wire [1:0] cmpsel_pipe_out4;
2527wire [1:0] cmpsel_piped4;
2528wire fail_reg_scanin;
2529wire fail_reg_scanout;
2530wire [2:0] fail_reg_in;
2531wire [2:0] fail_reg_out;
2532wire qual_iobuf_fail;
2533wire qual_mondo_fail;
2534wire qual_intbuf_fail;
2535wire fail_detect;
2536
2537
2538
2539
2540
2541// /////////////////////////////////////////////////////////////////////////////
2542// Outputs
2543// /////////////////////////////////////////////////////////////////////////////
2544
2545 output mb0_run;
2546
2547 output [5:0] mb0_addr;
2548 output [7:0] mb0_wdata;
2549
2550 output mb0_intbuf_wr_en;
2551 output mb0_intbuf_rd_en;
2552
2553 output mb0_mondo_wr_en;
2554 output mb0_mondo_rd_en;
2555
2556 output mb0_iobuf_wr_en;
2557 output mb0_iobuf_rd_en;
2558
2559 output mb0_done;
2560 output mb0_fail;
2561
2562 output scan_out;
2563
2564
2565
2566// /////////////////////////////////////////////////////////////////////////////
2567// Inputs
2568// /////////////////////////////////////////////////////////////////////////////
2569
2570 input l2clk;
2571 input scan_in;
2572 input tcu_pce_ov; // scan signals
2573 input tcu_clk_stop;
2574 input tcu_aclk;
2575 input tcu_bclk;
2576 input tcu_scan_en;
2577
2578
2579 input mb0_start;
2580 input mb0_bisi_mode;
2581 input mb0_user_mode;
2582
2583 input [143:0] intbuf_dout;
2584
2585 input [175:0] iobuf_dout;
2586
2587 input [71:0] mondo_data0_dout;
2588 input [71:0] mondo_data1_dout;
2589
2590
2591// /////////////////////////////////////////////////////////////////////////////
2592// Scan Renames
2593// /////////////////////////////////////////////////////////////////////////////
2594reg [47:0] res_read_data;
2595
2596assign pce_ov = tcu_pce_ov;
2597assign stop = tcu_clk_stop;
2598assign siclk = tcu_aclk;
2599assign soclk = tcu_bclk;
2600assign se = tcu_scan_en;
2601
2602
2603
2604////////////////////////////////////////////////////////////////////////////////
2605// Clock header
2606
2607ncu_fcd_ctl_l1clkhdr_ctl_macro clkgen (
2608 .l2clk (l2clk ),
2609 .l1en (1'b1 ),
2610 .l1clk (l1clk ),
2611 .pce_ov(pce_ov),
2612 .stop(stop),
2613 .se(se)
2614);
2615
2616
2617// /////////////////////////////////////////////////////////////////////////////
2618//
2619// MBIST Config Register
2620//
2621// /////////////////////////////////////////////////////////////////////////////
2622//
2623// A low to high transition on mb0_start will reset and start the engine.
2624// mb0_start must remain active high for the duration of MBIST.
2625// If mb0_start deasserts the engine will stop but not reset.
2626// Once MBIST has completed mbist_done will assert and the fail status
2627// signals will be valid.
2628// To run MBIST again the mb0_start signal must transition low then high.
2629//
2630// Loop on Address will disable the address mix function.
2631//
2632// /////////////////////////////////////////////////////////////////////////////
2633
2634 ncu_fcd_ctl_msff_ctl_macro__width_9 config_reg (
2635 .scan_in(config_reg_scanin),
2636 .scan_out(config_reg_scanout),
2637 .din ( config_in[8:0] ),
2638 .dout ( config_out[8:0] ),
2639 .l1clk(l1clk),
2640 .siclk(siclk),
2641 .soclk(soclk));
2642
2643
2644 assign config_in[0] = mb0_start;
2645 assign config_in[1] = config_out[0];
2646 assign start_transition = config_out[0] & ~config_out[1];
2647 assign reset_engine = start_transition | (mbist_user_loop_mode & mbist_done);
2648// assign run = config_out[1] & (mbist_user_loop_mode | ~mbist_done);
2649 assign run = config_out[0] & config_out[1]; // 9/19/05 run to follow start only!
2650
2651 assign config_in[2] = start_transition ? mb0_bisi_mode: config_out[2];
2652 assign bisi = config_out[2];
2653
2654 assign config_in[3] = start_transition ? mb0_user_mode: config_out[3];
2655 assign user_mode = config_out[3];
2656
2657 assign config_in[4] = config_out[4];
2658 assign user_data_mode = config_out[4];
2659
2660 assign config_in[5] = config_out[5];
2661 assign user_addr_mode = config_out[5];
2662
2663 assign config_in[6] = config_out[6];
2664 assign user_loop_mode = config_out[6];
2665
2666 assign config_in[7] = config_out[7];
2667 assign user_cmpsel_hold = config_out[7]; //cmpsel_hold = 0 : Default, All cominations
2668 // = 1 : User-specified cmpsel
2669 assign config_in[8] = config_out[8];
2670 assign ten_n_mode = config_out[8];
2671
2672
2673 assign mbist_user_data_mode = user_mode & user_data_mode;
2674 assign mbist_user_addr_mode = user_mode & user_addr_mode;
2675 assign mbist_user_loop_mode = user_mode & user_loop_mode;
2676 assign mbist_user_cmpsel_hold = user_mode & user_cmpsel_hold;
2677 assign mbist_ten_n_mode = user_mode & ten_n_mode;
2678
2679
2680 ncu_fcd_ctl_msff_ctl_macro__width_8 user_data_reg (
2681 .scan_in(user_data_reg_scanin),
2682 .scan_out(user_data_reg_scanout),
2683 .din ( user_data_in[7:0] ),
2684 .dout ( user_data_out[7:0] ),
2685 .l1clk(l1clk),
2686 .siclk(siclk),
2687 .soclk(soclk));
2688
2689
2690 assign user_data_in[7:0] = user_data_out[7:0];
2691
2692
2693// Defining User start, stop, and increment addresses.
2694
2695 ncu_fcd_ctl_msff_ctl_macro__width_6 user_start_addr_reg (
2696 .scan_in(user_start_addr_reg_scanin),
2697 .scan_out(user_start_addr_reg_scanout),
2698 .din ( user_start_addr_in[5:0] ),
2699 .dout ( user_start_addr[5:0] ),
2700 .l1clk(l1clk),
2701 .siclk(siclk),
2702 .soclk(soclk));
2703
2704 assign user_start_addr_in[5:0] = user_start_addr[5:0];
2705
2706 ncu_fcd_ctl_msff_ctl_macro__width_6 user_stop_addr_reg (
2707 .scan_in(user_stop_addr_reg_scanin),
2708 .scan_out(user_stop_addr_reg_scanout),
2709 .din ( user_stop_addr_in[5:0] ),
2710 .dout ( user_stop_addr[5:0] ),
2711 .l1clk(l1clk),
2712 .siclk(siclk),
2713 .soclk(soclk));
2714
2715 assign user_stop_addr_in[5:0] = user_stop_addr[5:0];
2716
2717
2718 ncu_fcd_ctl_msff_ctl_macro__width_6 user_incr_addr_reg (
2719 .scan_in(user_incr_addr_reg_scanin),
2720 .scan_out(user_incr_addr_reg_scanout),
2721 .din ( user_incr_addr_in[5:0] ),
2722 .dout ( user_incr_addr[5:0] ),
2723 .l1clk(l1clk),
2724 .siclk(siclk),
2725 .soclk(soclk));
2726
2727 assign user_incr_addr_in[5:0] = user_incr_addr[5:0];
2728
2729// Defining User array_sel.
2730
2731 ncu_fcd_ctl_msff_ctl_macro__width_2 user_array_sel_reg (
2732 .scan_in(user_array_sel_reg_scanin),
2733 .scan_out(user_array_sel_reg_scanout),
2734 .din ( user_array_sel_in[1:0] ),
2735 .dout ( user_array_sel[1:0] ),
2736 .l1clk(l1clk),
2737 .siclk(siclk),
2738 .soclk(soclk));
2739
2740 assign user_array_sel_in[1:0] = user_array_sel[1:0];
2741
2742// Defining User cmpsel.
2743
2744 ncu_fcd_ctl_msff_ctl_macro__width_2 user_cmpsel_reg (
2745 .scan_in(user_cmpsel_reg_scanin),
2746 .scan_out(user_cmpsel_reg_scanout),
2747 .din ( user_cmpsel_in[1:0] ),
2748 .dout ( user_cmpsel[1:0] ),
2749 .l1clk(l1clk),
2750 .siclk(siclk),
2751 .soclk(soclk));
2752
2753 assign user_cmpsel_in[1:0] = user_cmpsel[1:0];
2754
2755// Defining user_bisi write and read registers
2756
2757 ncu_fcd_ctl_msff_ctl_macro__width_1 user_bisi_wr_reg (
2758 .scan_in(user_bisi_wr_reg_scanin),
2759 .scan_out(user_bisi_wr_reg_scanout),
2760 .din ( user_bisi_wr_mode_in ),
2761 .dout ( user_bisi_wr_mode ),
2762 .l1clk(l1clk),
2763 .siclk(siclk),
2764 .soclk(soclk));
2765
2766 assign user_bisi_wr_mode_in = user_bisi_wr_mode;
2767
2768 ncu_fcd_ctl_msff_ctl_macro__width_1 user_bisi_rd_reg (
2769 .scan_in(user_bisi_rd_reg_scanin),
2770 .scan_out(user_bisi_rd_reg_scanout),
2771 .din ( user_bisi_rd_mode_in ),
2772 .dout ( user_bisi_rd_mode ),
2773 .l1clk(l1clk),
2774 .siclk(siclk),
2775 .soclk(soclk));
2776
2777 assign user_bisi_rd_mode_in = user_bisi_rd_mode;
2778
2779 assign mbist_user_bisi_wr_mode = user_mode & bisi & user_bisi_wr_mode & ~user_bisi_rd_mode;
2780// assign mbist_user_bisi_rd_mode = user_mode & bisi & user_bisi_rd_mode & ~user_bisi_wr_mode;
2781
2782 assign mbist_user_bisi_wr_rd_mode = user_mode & bisi &
2783 ((user_bisi_wr_mode & user_bisi_rd_mode) |
2784 (~user_bisi_wr_mode & ~user_bisi_rd_mode));
2785
2786////////////////////////////////////////////////////////////////////////////////
2787// Piping start_transition
2788////////////////////////////////////////////////////////////////////////////////
2789
2790 ncu_fcd_ctl_msff_ctl_macro__width_1 start_transition_reg (
2791 .scan_in(start_transition_reg_scanin),
2792 .scan_out(start_transition_reg_scanout),
2793 .din ( start_transition ),
2794 .dout ( start_transition_piped ),
2795 .l1clk(l1clk),
2796 .siclk(siclk),
2797 .soclk(soclk));
2798
2799////////////////////////////////////////////////////////////////////////////////
2800// Staging run for 16 cycles for mbist engines supporting async FIFO's
2801////////////////////////////////////////////////////////////////////////////////
2802
2803 ncu_fcd_ctl_msff_ctl_macro__width_1 run_reg (
2804 .scan_in(run_reg_scanin),
2805 .scan_out(run_reg_scanout),
2806 .din ( run ),
2807 .dout ( mb0_run ),
2808 .l1clk(l1clk),
2809 .siclk(siclk),
2810 .soclk(soclk));
2811
2812 ncu_fcd_ctl_msff_ctl_macro__width_4 counter_reg (
2813 .scan_in(counter_reg_scanin),
2814 .scan_out(counter_reg_scanout),
2815 .din ( counter_in[3:0] ),
2816 .dout ( counter_out[3:0] ),
2817 .l1clk(l1clk),
2818 .siclk(siclk),
2819 .soclk(soclk));
2820
2821 assign cycle16 = (&counter_out[3:0] == 1'b1);
2822 assign counter_in[3:0] = reset_engine ? 4'b0:
2823 run & ~cycle16 ? counter_out[3:0] + 4'b0001:
2824 counter_out[3:0];
2825
2826 assign run_piped16 = config_out[0] & cycle16 & ~msb; // One cycle after start going low, mbist operation is done!
2827// /////////////////////////////////////////////////////////////////////////////
2828// Adding Flop Boundaries for mbist
2829// /////////////////////////////////////////////////////////////////////////////
2830
2831ncu_fcd_ctl_msff_ctl_macro__width_2 intbuf_rd_wr_en_reg (
2832 .scan_in(intbuf_rd_wr_en_reg_scanin),
2833 .scan_out(intbuf_rd_wr_en_reg_scanout),
2834 .din ( {mbist_intbuf_read, mbist_intbuf_write} ),
2835 .dout ( {mb0_intbuf_rd_en, mb0_intbuf_wr_en} ),
2836 .l1clk(l1clk),
2837 .siclk(siclk),
2838 .soclk(soclk));
2839
2840ncu_fcd_ctl_msff_ctl_macro__width_2 mondo_rd_wr_en_reg (
2841 .scan_in(mondo_rd_wr_en_reg_scanin),
2842 .scan_out(mondo_rd_wr_en_reg_scanout),
2843 .din ( {mbist_mondo_read, mbist_mondo_write} ),
2844 .dout ( {mb0_mondo_rd_en, mb0_mondo_wr_en} ),
2845 .l1clk(l1clk),
2846 .siclk(siclk),
2847 .soclk(soclk));
2848
2849ncu_fcd_ctl_msff_ctl_macro__width_2 iobuf_rd_wr_en_reg (
2850 .scan_in(iobuf_rd_wr_en_reg_scanin),
2851 .scan_out(iobuf_rd_wr_en_reg_scanout),
2852 .din ( {mbist_iobuf_read, mbist_iobuf_write} ),
2853 .dout ( {mb0_iobuf_rd_en, mb0_iobuf_wr_en} ),
2854 .l1clk(l1clk),
2855 .siclk(siclk),
2856 .soclk(soclk));
2857
2858ncu_fcd_ctl_msff_ctl_macro__width_6 mb0_addr_reg (
2859 .scan_in(mb0_addr_reg_scanin),
2860 .scan_out(mb0_addr_reg_scanout),
2861 .din ( mbist_address[5:0] ),
2862 .dout ( mb0_addr[5:0] ),
2863 .l1clk(l1clk),
2864 .siclk(siclk),
2865 .soclk(soclk));
2866
2867ncu_fcd_ctl_msff_ctl_macro__width_8 mb0_wdata_reg (
2868 .scan_in(mb0_wdata_reg_scanin),
2869 .scan_out(mb0_wdata_reg_scanout),
2870 .din ( mbist_wdata[7:0] ),
2871 .dout ( mb0_wdata[7:0] ),
2872 .l1clk(l1clk),
2873 .siclk(siclk),
2874 .soclk(soclk));
2875
2876ncu_fcd_ctl_msff_ctl_macro__width_2 done_fail_reg (
2877 .scan_in(done_fail_reg_scanin),
2878 .scan_out(done_fail_reg_scanout),
2879 .din ( {mbist_done, fail} ),
2880 .dout ( {mb0_done, mb0_fail} ),
2881 .l1clk(l1clk),
2882 .siclk(siclk),
2883 .soclk(soclk));
2884
2885
2886// Creating 48 bit result read_data to be compared
2887
2888always@( intbuf_rd_en_piped2 or mondo_rd_en_piped2 or iobuf_rd_en_piped2 or cmpsel_piped3 or intbuf_dout or mondo_data0_dout or mondo_data1_dout or iobuf_dout ) begin
2889 case( {intbuf_rd_en_piped2,mondo_rd_en_piped2,iobuf_rd_en_piped2,cmpsel_piped3[1:0]} ) //synopsys parallel_case full_case
2890 5'b10000 : res_read_data[47:0] = intbuf_dout[47:0];
2891 5'b10001 : res_read_data[47:0] = intbuf_dout[95:48];
2892 5'b10010 : res_read_data[47:0] = intbuf_dout[143:96];
2893 5'b01000 : res_read_data[47:0] = mondo_data0_dout[47:0];
2894 5'b01001 : res_read_data[47:0] = {mondo_data1_dout[23:0],mondo_data0_dout[71:48]};
2895 5'b01010 : res_read_data[47:0] = mondo_data1_dout[71:24];
2896 5'b00100 : res_read_data[47:0] = iobuf_dout[47:0];
2897 5'b00101 : res_read_data[47:0] = iobuf_dout[95:48];
2898 5'b00110 : res_read_data[47:0] = iobuf_dout[143:96];
2899 5'b00111 : res_read_data[47:0] = {16'd0,iobuf_dout[175:144]};
2900 default : res_read_data[47:0] = intbuf_dout[47:0];
2901 endcase
2902 end
2903
2904 ncu_fcd_ctl_msff_ctl_macro__width_48 res_read_data_reg (
2905 .scan_in(res_read_data_reg_scanin),
2906 .scan_out(res_read_data_reg_scanout),
2907 .din ( res_read_data[47:0] ),
2908 .dout ( res_read_data_piped[47:0] ),
2909 .l1clk(l1clk),
2910 .siclk(siclk),
2911 .soclk(soclk));
2912
2913
2914// /////////////////////////////////////////////////////////////////////////////
2915//
2916// MBIST Control Register
2917//
2918// /////////////////////////////////////////////////////////////////////////////
2919// Remove Address mix disable before delivery
2920// /////////////////////////////////////////////////////////////////////////////
2921
2922 ncu_fcd_ctl_msff_ctl_macro__width_22 control_reg (
2923 .scan_in(control_reg_scanin),
2924 .scan_out(control_reg_scanout),
2925 .din ( control_in[21:0] ),
2926 .dout ( control_out[21:0] ),
2927 .l1clk(l1clk),
2928 .siclk(siclk),
2929 .soclk(soclk));
2930
2931 assign msb = control_out[21];
2932 assign bisi_wr_rd = (bisi & ~user_mode) | mbist_user_bisi_wr_rd_mode ? control_out[20] : 1'b1;
2933 assign array_sel[1:0] = user_mode ? user_array_sel[1:0] : control_out[19:18];
2934 assign cmpsel[1:0] = mbist_user_cmpsel_hold ? user_cmpsel : control_out[17:16];
2935 assign data_control[1:0] = control_out[15:14];
2936 assign address_mix = (bisi | mbist_user_addr_mode) ? 1'b0: control_out[13];
2937 assign march_element[3:0] = control_out[12:9];
2938 assign array_address[5:0] = upaddress_march ? control_out[8:3] : ~control_out[8:3];
2939
2940 assign read_write_control[2:0] = ~five_cycle_march ? {2'b11, control_out[0]} :
2941 control_out[2:0];
2942
2943
2944 assign control_in[2:0] = reset_engine ? 3'b0:
2945 ~run_piped16 ? control_out[2:0]:
2946 (five_cycle_march && (read_write_control[2:0] == 3'b100)) ? 3'b000:
2947 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ? 3'b000:
2948 control_out[2:0] + 3'b001;
2949
2950 assign increment_addr = (five_cycle_march && (read_write_control[2:0] == 3'b100)) ||
2951 (one_cycle_march && (read_write_control[2:0] == 3'b110)) ||
2952 (read_write_control[2:0] == 3'b111);
2953
2954 assign control_in[8:3] = start_transition_piped || reset_engine ? start_addr[5:0]:
2955 ~run_piped16 || ~increment_addr ? control_out[8:3]:
2956 next_array_address[5:0];
2957
2958 assign next_array_address[5:0] = next_upaddr_march ? start_addr[5:0]:
2959 next_downaddr_march ? ~stop_addr[5:0]:
2960 (overflow_addr[5:0]); // array_addr + incr_addr
2961
2962 assign start_addr[5:0] = mbist_user_addr_mode ? user_start_addr[5:0] : 6'b000000;
2963 assign stop_addr[5:0] = mbist_user_addr_mode ? user_stop_addr[5:0] :
2964 intbuf_sel || iobuf_sel ? 6'b011111 : 6'b111111;
2965 assign incr_addr[5:0] = mbist_user_addr_mode ? user_incr_addr[5:0] : 6'b000001;
2966
2967 assign overflow_addr[6:0] = {1'b0,control_out[8:3]} + {1'b0,incr_addr[5:0]};
2968 assign overflow = compare_addr[6:0] < overflow_addr[6:0];
2969
2970 assign compare_addr[6:0] = upaddress_march ? {1'b0, stop_addr[5:0]} :
2971 {1'b0, ~start_addr[5:0]};
2972
2973 assign next_upaddr_march = ( (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
2974 (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h5) ||
2975 (march_element[3:0] == 4'h8) ) && overflow;
2976
2977 assign next_downaddr_march = ( (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h7) ||
2978 (march_element[3:0] == 4'h3) || (march_element[3:0] == 4'h4) ) &&
2979 overflow;
2980
2981
2982 assign add[5:0] = five_cycle_march && ( (read_write_control[2:0] == 3'h1) ||
2983 (read_write_control[2:0] == 3'h3)) ?
2984 adj_address[5:0]: array_address[5:0];
2985
2986 assign adj_address[5:0] = { array_address[5:3], ~array_address[2], array_address[1:0] }; // 16 Row addresses per Bitline
2987
2988 assign mbist_address[5:0] = address_mix & mondo_sel ? {add[1:0],add[5:2]}: //4 blks (banks) of 16 rows
2989 address_mix ? {add[5],add[0],add[4],add[3],add[2],add[1]}: //2 blks of 16 rows
2990 add[5:0];
2991
2992// Definition of the rest of the control register
2993 assign increment_march_elem = increment_addr && overflow;
2994
2995 assign control_in[21:9] = reset_engine ? 13'b0:
2996 ~run_piped16 ? control_out[21:9]:
2997 {msb, bisi_wr_rd, next_array_sel[1:0], next_cmpsel[1:0], next_data_control[1:0], next_address_mix, next_march_element[3:0]} +
2998 {12'b0, increment_march_elem};
2999
3000
3001 assign next_array_sel[1:0] = user_mode ? 2'b11:
3002 bisi & (array_sel[1:0] == 2'b10) &
3003 (cmpsel[1:0] == 2'b11) & (array_address == stop_addr) ? 2'b11:
3004 (array_sel[1:0] == 2'b10) & (cmpsel[1:0] == 2'b11) & (data_control[1:0] == 2'b11) &
3005 (next_address_mix == 1'b1) & (march_element[3:0] == 4'b1000) &
3006 (array_address == 6'b0) & (read_write_control[2:0] == 3'h4) ? 2'b11 : control_out[19:18];
3007
3008 assign next_cmpsel[1:0] = (mbist_user_cmpsel_hold || ~bisi_wr_rd || mbist_user_bisi_wr_mode) ? 2'b11 :
3009 bisi & (intbuf_sel || mondo_sel) & (cmpsel[1:0] == 2'b10) &
3010 (array_address == stop_addr) ? 2'b11 :
3011 (intbuf_sel || mondo_sel) & (cmpsel[1:0] == 2'b10) & (data_control[1:0] == 2'b11) &
3012 (next_address_mix == 1'b1) & ((march_element[3:0] == 4'b1000) | (mbist_ten_n_mode && (march_element[3:0] == 4'b0101)) ) &
3013 (array_address == start_addr) & ((read_write_control[2:0] == 3'h4) |
3014 (mbist_ten_n_mode && (read_write_control[2:0] == 3'b110)) ) ? 2'b11 : control_out[17:16];
3015
3016
3017 assign next_data_control[1:0] = (bisi || (mbist_user_data_mode && (data_control[1:0] == 2'b00))) ? 2'b11:
3018 data_control[1:0];
3019
3020 assign next_address_mix = bisi | mbist_user_addr_mode ? 1'b1 : address_mix;
3021
3022// Incorporated ten_n_mode!
3023 assign next_march_element[3:0] = ( bisi ||
3024 (mbist_ten_n_mode && (march_element[3:0] == 4'b0101)) ||
3025 ((march_element[3:0] == 4'b1000) && (read_write_control[2:0] == 3'b100)) )
3026 && overflow ? 4'b1111: march_element[3:0];
3027
3028
3029 assign array_write = ~run_piped16 ? 1'b0:
3030 five_cycle_march ? (read_write_control[2:0] == 3'h0) ||
3031 (read_write_control[2:0] == 3'h1) ||
3032 (read_write_control[2:0] == 3'h4):
3033 (~five_cycle_march & ~one_cycle_march) ? read_write_control[0]:
3034 ( ((march_element[3:0] == 4'h0) & (~bisi || ~bisi_wr_rd || mbist_user_bisi_wr_mode)) || (march_element[3:0] == 4'h7));
3035
3036 assign array_read = ~array_write && run_piped16; // && ~initialize;
3037// assign mbist_done = msb;
3038
3039 assign mbist_wdata[7:0] = true_data ? data_pattern[7:0]: ~data_pattern[7:0];
3040
3041
3042 assign five_cycle_march = (march_element[3:0] == 4'h6) || (march_element[3:0] == 4'h8);
3043 assign one_cycle_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h5) ||
3044 (march_element[3:0] == 4'h7);
3045
3046 assign upaddress_march = (march_element[3:0] == 4'h0) || (march_element[3:0] == 4'h1) ||
3047 (march_element[3:0] == 4'h2) || (march_element[3:0] == 4'h6) ||
3048 (march_element[3:0] == 4'h7);
3049
3050// assign true_data = read_write_control[1] ^ ~march_element[0];
3051
3052 assign true_data = (five_cycle_march && (march_element[3:0] == 4'h6)) ?
3053 ((read_write_control[2:0] == 3'h0) || (read_write_control[2:0] == 3'h2)):
3054 (five_cycle_march && (march_element[3:0] == 4'h8)) ?
3055 ((read_write_control[2:0] == 3'h1) ||
3056 (read_write_control[2:0] == 3'h3) || (read_write_control[2:0] == 3'h4)):
3057 one_cycle_march ? (march_element[3:0] == 4'h7):
3058 ~(read_write_control[0] ^ march_element[0]);
3059
3060
3061 assign data_pattern[7:0] = (bisi & mbist_user_data_mode) ? ~user_data_out[7:0]:
3062 mbist_user_data_mode ? user_data_out[7:0]:
3063 bisi ? 8'hFF: // true_data function will invert to 8'h00
3064 (data_control[1:0] == 2'h0) ? 8'hAA:
3065 (data_control[1:0] == 2'h1) ? 8'h99:
3066 (data_control[1:0] == 2'h2) ? 8'hCC:
3067 8'h00;
3068
3069/////////////////////////////////////////////////////////////////////////
3070// Creating the mbist_done signal
3071/////////////////////////////////////////////////////////////////////////
3072// Delaying mbist_done 8 clock signals after msb going high, to provide
3073// a generic solution for done going high after the last fail has come back!
3074
3075 ncu_fcd_ctl_msff_ctl_macro__width_3 done_counter_reg (
3076 .scan_in(done_counter_reg_scanin),
3077 .scan_out(done_counter_reg_scanout),
3078 .din ( done_counter_in[2:0] ),
3079 .dout ( done_counter_out[2:0] ),
3080 .l1clk(l1clk),
3081 .siclk(siclk),
3082 .soclk(soclk));
3083
3084// config_out[1] is AND'ed to force mbist_done low 2 cycles after mbist_start
3085// goes low.
3086
3087 assign mbist_done = (&done_counter_out[2:0] == 1'b1) & config_out[1];
3088 assign done_counter_in[2:0] = reset_engine ? 3'b000:
3089 msb & ~mbist_done & config_out[1] ? done_counter_out[2:0] + 3'b001:
3090 done_counter_out[2:0];
3091
3092
3093// /////////////////////////////////////////////////////////////////////////////
3094// Array Selects and read and write_en
3095// /////////////////////////////////////////////////////////////////////////////
3096
3097 assign intbuf_sel = ~array_sel[1] & ~array_sel[0];
3098 assign mondo_sel = ~array_sel[1] & array_sel[0];
3099 assign iobuf_sel = array_sel[1] & ~array_sel[0];
3100
3101 assign mbist_intbuf_read = intbuf_sel && array_read;
3102 assign mbist_intbuf_write = intbuf_sel && array_write;
3103
3104 assign mbist_mondo_read = mondo_sel && array_read;
3105 assign mbist_mondo_write = mondo_sel && array_write;
3106
3107 assign mbist_iobuf_read = iobuf_sel && array_read;
3108 assign mbist_iobuf_write = iobuf_sel && array_write;
3109
3110
3111// /////////////////////////////////////////////////////////////////////////////
3112// Pipeline for wdata, enables, and cmpsel
3113// /////////////////////////////////////////////////////////////////////////////
3114
3115// Pipeline for wdata
3116
3117 ncu_fcd_ctl_msff_ctl_macro__width_8 data_pipe_reg1 (
3118 .scan_in(data_pipe_reg1_scanin),
3119 .scan_out(data_pipe_reg1_scanout),
3120 .din ( date_pipe_reg1_in[7:0] ),
3121 .dout ( data_pipe_out1[7:0] ),
3122 .l1clk(l1clk),
3123 .siclk(siclk),
3124 .soclk(soclk));
3125
3126 ncu_fcd_ctl_msff_ctl_macro__width_8 data_pipe_reg2 (
3127 .scan_in(data_pipe_reg2_scanin),
3128 .scan_out(data_pipe_reg2_scanout),
3129 .din ( date_pipe_reg2_in[7:0] ),
3130 .dout ( data_pipe_out2[7:0] ),
3131 .l1clk(l1clk),
3132 .siclk(siclk),
3133 .soclk(soclk));
3134
3135 ncu_fcd_ctl_msff_ctl_macro__width_8 data_pipe_reg3 (
3136 .scan_in(data_pipe_reg3_scanin),
3137 .scan_out(data_pipe_reg3_scanout),
3138 .din ( date_pipe_reg3_in[7:0] ),
3139 .dout ( data_pipe_out3[7:0] ),
3140 .l1clk(l1clk),
3141 .siclk(siclk),
3142 .soclk(soclk));
3143
3144
3145 assign date_pipe_reg1_in[7:0] = reset_engine ? 8'h00: mb0_wdata[7:0];
3146 assign date_pipe_reg2_in[7:0] = reset_engine ? 8'h00: data_pipe_out1[7:0];
3147 assign date_pipe_reg3_in[7:0] = reset_engine ? 8'h00: data_pipe_out2[7:0];
3148
3149 assign ncu_mb0_piped_wdata[7:0] = data_pipe_out3[7:0];
3150
3151// Pipeline for Read Enable
3152 ncu_fcd_ctl_msff_ctl_macro__width_3 ren_pipe_reg1 (
3153 .scan_in(ren_pipe_reg1_scanin),
3154 .scan_out(ren_pipe_reg1_scanout),
3155 .din ( ren_pipe_reg1_in[2:0] ),
3156 .dout ( rd_en_piped[2:0] ),
3157 .l1clk(l1clk),
3158 .siclk(siclk),
3159 .soclk(soclk));
3160
3161 ncu_fcd_ctl_msff_ctl_macro__width_3 ren_pipe_reg2 (
3162 .scan_in(ren_pipe_reg2_scanin),
3163 .scan_out(ren_pipe_reg2_scanout),
3164 .din ( ren_pipe_reg2_in[2:0] ),
3165 .dout ( rd_en_piped2[2:0] ),
3166 .l1clk(l1clk),
3167 .siclk(siclk),
3168 .soclk(soclk));
3169
3170 ncu_fcd_ctl_msff_ctl_macro__width_3 ren_pipe_reg3 (
3171 .scan_in(ren_pipe_reg3_scanin),
3172 .scan_out(ren_pipe_reg3_scanout),
3173 .din ( ren_pipe_reg3_in[2:0] ),
3174 .dout ( rd_en_piped3[2:0] ),
3175 .l1clk(l1clk),
3176 .siclk(siclk),
3177 .soclk(soclk));
3178
3179 assign ren_pipe_reg1_in[2:0] = reset_engine ? 3'b0: {mb0_iobuf_rd_en, mb0_mondo_rd_en, mb0_intbuf_rd_en} ;
3180 assign ren_pipe_reg2_in[2:0] = reset_engine ? 3'b0: rd_en_piped[2:0];
3181 assign ren_pipe_reg3_in[2:0] = reset_engine ? 3'b0: rd_en_piped2[2:0];
3182
3183 assign intbuf_rd_en_piped2 = rd_en_piped2[0];
3184 assign mondo_rd_en_piped2 = rd_en_piped2[1];
3185 assign iobuf_rd_en_piped2 = rd_en_piped2[2];
3186
3187 assign intbuf_rd_en_piped3 = rd_en_piped3[0];
3188 assign mondo_rd_en_piped3 = rd_en_piped3[1];
3189 assign iobuf_rd_en_piped3 = rd_en_piped3[2];
3190
3191// Pipelining cmpsel
3192
3193 ncu_fcd_ctl_msff_ctl_macro__width_2 cmpsel_pipe_reg1 (
3194 .scan_in(cmpsel_pipe_reg1_scanin),
3195 .scan_out(cmpsel_pipe_reg1_scanout),
3196 .din ( cmpsel_pipe_reg1_in[1:0] ),
3197 .dout ( cmpsel_pipe_out1[1:0] ),
3198 .l1clk(l1clk),
3199 .siclk(siclk),
3200 .soclk(soclk));
3201
3202 ncu_fcd_ctl_msff_ctl_macro__width_2 cmpsel_pipe_reg2 (
3203 .scan_in(cmpsel_pipe_reg2_scanin),
3204 .scan_out(cmpsel_pipe_reg2_scanout),
3205 .din ( cmpsel_pipe_reg2_in[1:0] ),
3206 .dout ( cmpsel_pipe_out2[1:0] ),
3207 .l1clk(l1clk),
3208 .siclk(siclk),
3209 .soclk(soclk));
3210
3211 ncu_fcd_ctl_msff_ctl_macro__width_2 cmpsel_pipe_reg3 (
3212 .scan_in(cmpsel_pipe_reg3_scanin),
3213 .scan_out(cmpsel_pipe_reg3_scanout),
3214 .din ( cmpsel_pipe_reg3_in[1:0] ),
3215 .dout ( cmpsel_pipe_out3[1:0] ),
3216 .l1clk(l1clk),
3217 .siclk(siclk),
3218 .soclk(soclk));
3219
3220 ncu_fcd_ctl_msff_ctl_macro__width_2 cmpsel_pipe_reg4 (
3221 .scan_in(cmpsel_pipe_reg4_scanin),
3222 .scan_out(cmpsel_pipe_reg4_scanout),
3223 .din ( cmpsel_pipe_reg4_in[1:0] ),
3224 .dout ( cmpsel_pipe_out4[1:0] ),
3225 .l1clk(l1clk),
3226 .siclk(siclk),
3227 .soclk(soclk));
3228
3229 assign cmpsel_pipe_reg1_in[1:0] = reset_engine ? 2'b0: cmpsel[1:0];
3230 assign cmpsel_pipe_reg2_in[1:0] = reset_engine ? 2'b0: cmpsel_pipe_out1[1:0];
3231 assign cmpsel_pipe_reg3_in[1:0] = reset_engine ? 2'b0: cmpsel_pipe_out2[1:0];
3232 assign cmpsel_pipe_reg4_in[1:0] = reset_engine ? 2'b0: cmpsel_pipe_out3[1:0];
3233 assign cmpsel_piped3[1:0] = cmpsel_pipe_out3[1:0];
3234 assign cmpsel_piped4[1:0] = cmpsel_pipe_out4[1:0];
3235
3236
3237// /////////////////////////////////////////////////////////////////////////////
3238// Shared Fail Detection
3239// /////////////////////////////////////////////////////////////////////////////
3240// Updated to meet these new features:
3241// 1.When mbist_done signal is asserted when it completes all the
3242// tests, it also need to assert static membist fail signal if
3243// there were any failures during the tests.
3244// 2.The mbist_fail signal won't be sticky bit from membist
3245// engine. The TCU will make it sticky fail bit as needed.
3246
3247
3248 ncu_fcd_ctl_msff_ctl_macro__width_3 fail_reg (
3249 .scan_in(fail_reg_scanin),
3250 .scan_out(fail_reg_scanout),
3251 .din ( fail_reg_in[2:0] ),
3252 .dout ( fail_reg_out[2:0] ),
3253 .l1clk(l1clk),
3254 .siclk(siclk),
3255 .soclk(soclk));
3256
3257
3258 assign fail_reg_in[2:0] = reset_engine ? 3'b0:
3259 {qual_iobuf_fail,qual_mondo_fail,qual_intbuf_fail} | fail_reg_out[2:0];
3260
3261
3262 assign qual_intbuf_fail = fail_detect && intbuf_rd_en_piped3;
3263 assign qual_mondo_fail = fail_detect && mondo_rd_en_piped3;
3264 assign qual_iobuf_fail = fail_detect && iobuf_rd_en_piped3;
3265
3266 assign fail = mbist_done ? |fail_reg_out[2:0]:
3267 qual_intbuf_fail | qual_mondo_fail | qual_iobuf_fail;
3268
3269
3270 assign fail_detect = iobuf_rd_en_piped3 & (cmpsel_piped4[1:0] == 2'b11) ?
3271 ({4{ncu_mb0_piped_wdata[7:0]}} != res_read_data_piped[31:0]):
3272 ({6{ncu_mb0_piped_wdata[7:0]}} != res_read_data_piped[47:0]);
3273
3274
3275
3276supply0 vss; // <- port for ground
3277supply1 vdd; // <- port for power
3278// /////////////////////////////////////////////////////////////////////////////
3279// fixscan start:
3280assign config_reg_scanin = scan_in ;
3281assign user_data_reg_scanin = config_reg_scanout ;
3282assign user_start_addr_reg_scanin = user_data_reg_scanout ;
3283assign user_stop_addr_reg_scanin = user_start_addr_reg_scanout;
3284assign user_incr_addr_reg_scanin = user_stop_addr_reg_scanout;
3285assign user_array_sel_reg_scanin = user_incr_addr_reg_scanout;
3286assign user_cmpsel_reg_scanin = user_array_sel_reg_scanout;
3287assign user_bisi_wr_reg_scanin = user_cmpsel_reg_scanout ;
3288assign user_bisi_rd_reg_scanin = user_bisi_wr_reg_scanout ;
3289assign start_transition_reg_scanin = user_bisi_rd_reg_scanout ;
3290assign run_reg_scanin = start_transition_reg_scanout;
3291assign counter_reg_scanin = run_reg_scanout ;
3292assign intbuf_rd_wr_en_reg_scanin = counter_reg_scanout ;
3293assign mondo_rd_wr_en_reg_scanin = intbuf_rd_wr_en_reg_scanout;
3294assign iobuf_rd_wr_en_reg_scanin = mondo_rd_wr_en_reg_scanout;
3295assign mb0_addr_reg_scanin = iobuf_rd_wr_en_reg_scanout;
3296assign mb0_wdata_reg_scanin = mb0_addr_reg_scanout ;
3297assign done_fail_reg_scanin = mb0_wdata_reg_scanout ;
3298assign res_read_data_reg_scanin = done_fail_reg_scanout ;
3299assign control_reg_scanin = res_read_data_reg_scanout;
3300assign done_counter_reg_scanin = control_reg_scanout ;
3301assign data_pipe_reg1_scanin = done_counter_reg_scanout ;
3302assign data_pipe_reg2_scanin = data_pipe_reg1_scanout ;
3303assign data_pipe_reg3_scanin = data_pipe_reg2_scanout ;
3304assign ren_pipe_reg1_scanin = data_pipe_reg3_scanout ;
3305assign ren_pipe_reg2_scanin = ren_pipe_reg1_scanout ;
3306assign ren_pipe_reg3_scanin = ren_pipe_reg2_scanout ;
3307assign cmpsel_pipe_reg1_scanin = ren_pipe_reg3_scanout ;
3308assign cmpsel_pipe_reg2_scanin = cmpsel_pipe_reg1_scanout ;
3309assign cmpsel_pipe_reg3_scanin = cmpsel_pipe_reg2_scanout ;
3310assign cmpsel_pipe_reg4_scanin = cmpsel_pipe_reg3_scanout ;
3311assign fail_reg_scanin = cmpsel_pipe_reg4_scanout ;
3312assign scan_out = fail_reg_scanout ;
3313// fixscan end:
3314endmodule
3315// /////////////////////////////////////////////////////////////////////////////
3316
3317
3318
3319
3320
3321
3322// any PARAMS parms go into naming of macro
3323
3324module ncu_fcd_ctl_msff_ctl_macro__width_9 (
3325 din,
3326 l1clk,
3327 scan_in,
3328 siclk,
3329 soclk,
3330 dout,
3331 scan_out);
3332wire [8:0] fdin;
3333wire [7:0] so;
3334
3335 input [8:0] din;
3336 input l1clk;
3337 input scan_in;
3338
3339
3340 input siclk;
3341 input soclk;
3342
3343 output [8:0] dout;
3344 output scan_out;
3345assign fdin[8:0] = din[8:0];
3346
3347
3348
3349
3350
3351
3352dff #(9) d0_0 (
3353.l1clk(l1clk),
3354.siclk(siclk),
3355.soclk(soclk),
3356.d(fdin[8:0]),
3357.si({scan_in,so[7:0]}),
3358.so({so[7:0],scan_out}),
3359.q(dout[8:0])
3360);
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373endmodule
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387// any PARAMS parms go into naming of macro
3388
3389module ncu_fcd_ctl_msff_ctl_macro__width_4 (
3390 din,
3391 l1clk,
3392 scan_in,
3393 siclk,
3394 soclk,
3395 dout,
3396 scan_out);
3397wire [3:0] fdin;
3398wire [2:0] so;
3399
3400 input [3:0] din;
3401 input l1clk;
3402 input scan_in;
3403
3404
3405 input siclk;
3406 input soclk;
3407
3408 output [3:0] dout;
3409 output scan_out;
3410assign fdin[3:0] = din[3:0];
3411
3412
3413
3414
3415
3416
3417dff #(4) d0_0 (
3418.l1clk(l1clk),
3419.siclk(siclk),
3420.soclk(soclk),
3421.d(fdin[3:0]),
3422.si({scan_in,so[2:0]}),
3423.so({so[2:0],scan_out}),
3424.q(dout[3:0])
3425);
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438endmodule
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452// any PARAMS parms go into naming of macro
3453
3454module ncu_fcd_ctl_msff_ctl_macro__width_48 (
3455 din,
3456 l1clk,
3457 scan_in,
3458 siclk,
3459 soclk,
3460 dout,
3461 scan_out);
3462wire [47:0] fdin;
3463wire [46:0] so;
3464
3465 input [47:0] din;
3466 input l1clk;
3467 input scan_in;
3468
3469
3470 input siclk;
3471 input soclk;
3472
3473 output [47:0] dout;
3474 output scan_out;
3475assign fdin[47:0] = din[47:0];
3476
3477
3478
3479
3480
3481
3482dff #(48) d0_0 (
3483.l1clk(l1clk),
3484.siclk(siclk),
3485.soclk(soclk),
3486.d(fdin[47:0]),
3487.si({scan_in,so[46:0]}),
3488.so({so[46:0],scan_out}),
3489.q(dout[47:0])
3490);
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503endmodule
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517// any PARAMS parms go into naming of macro
3518
3519module ncu_fcd_ctl_msff_ctl_macro__width_22 (
3520 din,
3521 l1clk,
3522 scan_in,
3523 siclk,
3524 soclk,
3525 dout,
3526 scan_out);
3527wire [21:0] fdin;
3528wire [20:0] so;
3529
3530 input [21:0] din;
3531 input l1clk;
3532 input scan_in;
3533
3534
3535 input siclk;
3536 input soclk;
3537
3538 output [21:0] dout;
3539 output scan_out;
3540assign fdin[21:0] = din[21:0];
3541
3542
3543
3544
3545
3546
3547dff #(22) d0_0 (
3548.l1clk(l1clk),
3549.siclk(siclk),
3550.soclk(soclk),
3551.d(fdin[21:0]),
3552.si({scan_in,so[20:0]}),
3553.so({so[20:0],scan_out}),
3554.q(dout[21:0])
3555);
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568endmodule
3569
3570
3571
3572
3573
3574
3575
3576