Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / db1 / rtl / db1_ucbflow_ctl.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: db1_ucbflow_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 db1_ucbflow_ctl (
36 iol2clk,
37 scan_in,
38 scan_out,
39 tcu_pce_ov,
40 tcu_clk_stop,
41 tcu_aclk,
42 tcu_bclk,
43 tcu_scan_en,
44 ncu_dbg1_vld,
45 ncu_dbg1_data,
46 dbg1_ncu_stall,
47 dbg1_ncu_vld,
48 dbg1_ncu_data,
49 ncu_dbg1_stall,
50 rd_req_vld,
51 wr_req_vld,
52 thr_id_in,
53 buf_id_in,
54 addr_in,
55 data_in,
56 req_acpted,
57 rd_ack_vld,
58 rd_nack_vld,
59 thr_id_out,
60 buf_id_out,
61 data_out,
62 ack_busy) ;
63wire indata_buf_vld;
64wire [127:0] indata_buf;
65wire dbg1_ucbbusin4_ctl_scanin;
66wire dbg1_ucbbusin4_ctl_scanout;
67wire dbg1_ncu_stall_a1;
68wire read_pending;
69wire write_pending;
70wire buf_full;
71wire rd_buf;
72wire [1:0] buf_head_next;
73wire [1:0] buf_head;
74wire buf_head_next0_;
75wire buf_head0_;
76wire buf_head_ff0_scanin;
77wire buf_head_ff0_scanout;
78wire l1clk;
79wire buf_head_ff1_scanin;
80wire buf_head_ff1_scanout;
81wire wr_buf;
82wire [1:0] buf_tail_next;
83wire [1:0] buf_tail;
84wire buf_tail_next0_;
85wire buf_tail0_;
86wire buf_tail_ff0_scanin;
87wire buf_tail_ff0_scanout;
88wire buf_tail_ff1_scanin;
89wire buf_tail_ff1_scanout;
90wire buf_full_next;
91wire buf_full_ff_scanin;
92wire buf_full_ff_scanout;
93wire buf_empty_next;
94wire buf_empty_next_;
95wire buf_empty;
96wire buf_empty_;
97wire buf_empty_ff_scanin;
98wire buf_empty_ff_scanout;
99wire [116:0] req_in;
100wire [8:0] unconnected_rsvd;
101wire buf0_en;
102wire buf0_ff_scanin;
103wire buf0_ff_scanout;
104wire [116:0] buf0;
105wire buf1_en;
106wire buf1_ff_scanin;
107wire buf1_ff_scanout;
108wire [116:0] buf1;
109wire [116:0] req_out;
110wire [2:0] unconnected_size_in;
111wire wr_req_vld_nq;
112wire rd_req_vld_nq;
113wire ack_buf_wr;
114wire ack_buf_vld_next;
115wire ack_buf_rd;
116wire ack_buf_vld;
117wire ack_buf_vld_ff_scanin;
118wire ack_buf_vld_ff_scanout;
119wire ack_buf_is_nack_ff_scanin;
120wire ack_buf_is_nack_ff_scanout;
121wire ack_buf_is_nack;
122wire [3:0] ack_typ_out;
123wire [75:0] ack_buf_in;
124wire ack_buf_ff_scanin;
125wire ack_buf_ff_scanout;
126wire [75:0] ack_buf;
127wire [31:0] ack_buf_vec;
128wire outdata_buf_busy;
129wire outdata_buf_wr;
130wire [127:0] outdata_buf_in;
131wire [31:0] outdata_vec_in;
132wire dbg1_ucbbusout4_ctl_scanin;
133wire dbg1_ucbbusout4_ctl_scanout;
134wire spares_scanin;
135wire spares_scanout;
136wire se;
137wire siclk;
138wire soclk;
139wire pce_ov;
140wire stop;
141
142
143
144// Globals
145input iol2clk;
146input scan_in;
147output scan_out;
148input tcu_pce_ov;
149input tcu_clk_stop;
150input tcu_aclk ;
151input tcu_bclk ;
152input tcu_scan_en ;
153
154// Downstream from NCU
155input ncu_dbg1_vld;
156input [3:0] ncu_dbg1_data;
157output dbg1_ncu_stall;
158
159// Upstream to NCU
160output dbg1_ncu_vld;
161output [3:0] dbg1_ncu_data;
162input ncu_dbg1_stall;
163
164// CMDs to local unit
165output rd_req_vld;
166output wr_req_vld;
167output [5:0] thr_id_in;
168output [1:0] buf_id_in;
169output [39:0] addr_in;
170output [63:0] data_in;
171input req_acpted;
172
173// Ack/Nack from local unit
174input rd_ack_vld;
175input rd_nack_vld;
176input [5:0] thr_id_out;
177input [1:0] buf_id_out;
178input [63:0] data_out;
179output ack_busy;
180
181
182
183
184// Local signals
185
186
187
188
189//wire int_buf_rd;
190//wire int_buf_wr;
191//wire int_buf_vld;
192//wire int_buf_vld_next;
193//wire [6:0] int_buf_in;
194//wire [6:0] int_buf;
195//wire [3:0] int_buf_vec;
196
197//wire int_last_rd;
198
199
200////////////////////////////////////////////////////////////////////////
201// Code starts here
202////////////////////////////////////////////////////////////////////////
203/************************************************************
204 * Inbound Data
205 ************************************************************/
206/*dbg1_ucbbusin4_ctl auto_template ( .scan_in(dbg1_ucbbusin4_ctl_scanin),
207 .vld(ncu_dbg1_vld),
208 .data(ncu_dbg1_data[3:0]),
209 .stall(dbg1_ncu_stall),
210 .stall_a1(dbg1_ncu_stall_a1) );
211*/
212db1_ucbbusin4_ctl dbg1_ucbbusin4_ctl (/*autoinst*/
213 // Outputs
214 .stall(dbg1_ncu_stall), // Templated
215 .indata_buf_vld(indata_buf_vld),
216 .indata_buf(indata_buf[127:0]),
217 // Inputs
218 .scan_in(dbg1_ucbbusin4_ctl_scanin),
219 .scan_out(dbg1_ucbbusin4_ctl_scanout),
220 .iol2clk(iol2clk),
221 .tcu_pce_ov(tcu_pce_ov),
222 .tcu_clk_stop(tcu_clk_stop),
223 .tcu_aclk (tcu_aclk ),
224 .tcu_bclk (tcu_bclk ),
225 .tcu_scan_en (tcu_scan_en ),
226 .vld(ncu_dbg1_vld), // Templated
227 .data(ncu_dbg1_data[3:0]), // Templated
228 .stall_a1(dbg1_ncu_stall_a1)); // Templated
229
230/************************************************************
231 * Decode inbound packet type
232 ************************************************************/
233assign read_pending = (indata_buf[3:0] == 4'b0100) & indata_buf_vld;
234
235assign write_pending = (indata_buf[3:0] == 4'b0101) & indata_buf_vld;
236
237assign dbg1_ncu_stall_a1 = (read_pending | write_pending) & buf_full;
238
239/************************************************************
240 * Inbound buffer
241 ************************************************************/
242// Head pointer
243assign rd_buf = req_acpted;
244assign buf_head_next[1:0] = rd_buf ? {buf_head[0],buf_head[1]} : buf_head[1:0];
245
246assign buf_head_next0_ = ~buf_head_next[0] ;
247assign buf_head[0] = ~buf_head0_ ;
248db1_ucbflow_ctl_msff_ctl_macro__width_1 buf_head_ff0
249 (
250 .scan_in(buf_head_ff0_scanin),
251 .scan_out(buf_head_ff0_scanout),
252 .dout (buf_head0_),
253 .l1clk (l1clk),
254 .din (buf_head_next0_),
255 .siclk(siclk),
256 .soclk(soclk)
257 );
258
259db1_ucbflow_ctl_msff_ctl_macro__width_1 buf_head_ff1
260 (
261 .scan_in(buf_head_ff1_scanin),
262 .scan_out(buf_head_ff1_scanout),
263 .dout (buf_head[1]),
264 .l1clk (l1clk),
265 .din (buf_head_next[1]),
266 .siclk(siclk),
267 .soclk(soclk)
268 );
269
270// Tail pointer
271assign wr_buf = (read_pending | write_pending) & ~buf_full;
272
273assign buf_tail_next[1:0] = wr_buf ? {buf_tail[0], buf_tail[1]} : buf_tail[1:0];
274
275assign buf_tail_next0_ = ~buf_tail_next[0];
276assign buf_tail[0] = ~buf_tail0_ ;
277db1_ucbflow_ctl_msff_ctl_macro__width_1 buf_tail_ff0
278 (
279 .scan_in(buf_tail_ff0_scanin),
280 .scan_out(buf_tail_ff0_scanout),
281 .dout (buf_tail0_),
282 .l1clk (l1clk),
283 .din (buf_tail_next0_),
284 .siclk(siclk),
285 .soclk(soclk)
286 );
287
288db1_ucbflow_ctl_msff_ctl_macro__width_1 buf_tail_ff1
289 (
290 .scan_in(buf_tail_ff1_scanin),
291 .scan_out(buf_tail_ff1_scanout),
292 .dout (buf_tail[1]),
293 .l1clk (l1clk),
294 .din (buf_tail_next[1]),
295 .siclk(siclk),
296 .soclk(soclk)
297 );
298
299// Buffer full
300assign buf_full_next = (buf_head_next[1:0] == buf_tail_next[1:0]) & wr_buf;
301db1_ucbflow_ctl_msff_ctl_macro__en_1__width_1 buf_full_ff
302 (
303 .scan_in(buf_full_ff_scanin),
304 .scan_out(buf_full_ff_scanout),
305 .dout (buf_full),
306 .l1clk (l1clk),
307 .en (rd_buf|wr_buf),
308 .din (buf_full_next),
309 .siclk(siclk),
310 .soclk(soclk)
311 );
312
313// Buffer empty
314assign buf_empty_next = ((buf_head_next[1:0] == buf_tail_next[1:0]) & rd_buf) ;
315assign buf_empty_next_ = ~buf_empty_next ;
316assign buf_empty = ~buf_empty_ ;
317db1_ucbflow_ctl_msff_ctl_macro__en_1__width_1 buf_empty_ff
318 (
319 .scan_in(buf_empty_ff_scanin),
320 .scan_out(buf_empty_ff_scanout),
321 .dout (buf_empty_),
322 .l1clk (l1clk),
323 .en (rd_buf|wr_buf),
324 .din (buf_empty_next_),
325 .siclk(siclk),
326 .soclk(soclk)
327 );
328
329assign { req_in[116:53],
330 unconnected_rsvd[8:0],
331 req_in[52:0] } = { indata_buf[127:64],
332 indata_buf[63:55],
333 indata_buf[54:15],
334 indata_buf[14:12],
335 indata_buf[11:10],
336 indata_buf[9:4],
337 write_pending,
338 read_pending };
339
340// Buffer 0
341assign buf0_en = buf_tail[0] & wr_buf;
342db1_ucbflow_ctl_msff_ctl_macro__en_1__width_117 buf0_ff
343 (
344 .scan_in(buf0_ff_scanin),
345 .scan_out(buf0_ff_scanout),
346 .dout (buf0[116:0]),
347 .l1clk (l1clk),
348 .en (buf0_en),
349 .din (req_in[116:0]),
350 .siclk(siclk),
351 .soclk(soclk)
352 );
353// Buffer 1
354assign buf1_en = buf_tail[1] & wr_buf;
355db1_ucbflow_ctl_msff_ctl_macro__en_1__width_117 buf1_ff
356 (
357 .scan_in(buf1_ff_scanin),
358 .scan_out(buf1_ff_scanout),
359 .dout (buf1[116:0]),
360 .l1clk (l1clk),
361 .en (buf1_en),
362 .din (req_in[116:0]),
363 .siclk(siclk),
364 .soclk(soclk)
365 );
366
367assign req_out[116:0] = buf_head[0] ? buf0[116:0] :
368 buf_head[1] ? buf1[116:0] : 117'b0;
369
370
371/************************************************************
372* Inbound interface to local unit
373************************************************************/
374assign {data_in[63:0],
375 addr_in[39:0],
376 unconnected_size_in[2:0],
377 buf_id_in[1:0],
378 thr_id_in[5:0],
379 wr_req_vld_nq,
380 rd_req_vld_nq} = req_out[116:0];
381
382assign rd_req_vld = rd_req_vld_nq & ~buf_empty;
383assign wr_req_vld = wr_req_vld_nq & ~buf_empty;
384
385
386/************************************************************
387 * Outbound Ack/Nack
388 ************************************************************/
389assign ack_buf_wr = rd_ack_vld | rd_nack_vld;
390
391assign ack_buf_vld_next = ack_buf_wr ? 1'b1 :
392 ack_buf_rd ? 1'b0 : ack_buf_vld;
393
394db1_ucbflow_ctl_msff_ctl_macro__width_1 ack_buf_vld_ff
395 (
396 .scan_in(ack_buf_vld_ff_scanin),
397 .scan_out(ack_buf_vld_ff_scanout),
398 .dout (ack_buf_vld),
399 .l1clk (l1clk),
400 .din (ack_buf_vld_next),
401 .siclk(siclk),
402 .soclk(soclk)
403 );
404
405db1_ucbflow_ctl_msff_ctl_macro__en_1__width_1 ack_buf_is_nack_ff
406 (
407 .scan_in(ack_buf_is_nack_ff_scanin),
408 .scan_out(ack_buf_is_nack_ff_scanout),
409 .dout (ack_buf_is_nack),
410 .l1clk (l1clk),
411 .en (ack_buf_wr),
412 .din (rd_nack_vld),
413 .siclk(siclk),
414 .soclk(soclk)
415 );
416
417assign ack_typ_out[3:0] = rd_ack_vld ? 4'b0001: //UCB_READ_ACK
418 4'b0000; //UCB_READ_NACK
419
420assign ack_buf_in[75:0] = { data_out[63:0],
421 buf_id_out[1:0],
422 thr_id_out[5:0],
423 ack_typ_out[3:0] };
424
425db1_ucbflow_ctl_msff_ctl_macro__en_1__width_76 ack_buf_ff
426 (
427 .scan_in(ack_buf_ff_scanin),
428 .scan_out(ack_buf_ff_scanout),
429 .dout (ack_buf[75:0]),
430 .l1clk (l1clk),
431 .en (ack_buf_wr),
432 .din (ack_buf_in[75:0]),
433 .siclk(siclk),
434 .soclk(soclk)
435 );
436
437assign ack_buf_vec[31:0] = ack_buf_is_nack ? {16'h0000,16'hffff} : {32'hffff_ffff} ;
438
439assign ack_busy = ack_buf_vld;
440
441assign ack_buf_rd = ~outdata_buf_busy & ack_buf_vld ;
442
443assign outdata_buf_wr = ack_buf_rd ;
444
445assign outdata_buf_in[127:0] = {ack_buf[75:12], //payload 64bit
446 9'b0, //reserved [63:55]
447 40'h00_0000_0000, //40bit addr [54:15]
448 3'b000, //size [14:12]
449 ack_buf[11:10], //buf_id 2bit
450 ack_buf[9:4], //thr_id 6bit
451 ack_buf[3:0]}; //type 4bit
452
453assign outdata_vec_in[31:0] = ack_buf_vec[31:0] ;
454
455
456/*dbg1_ucbbusout4_ctl auto_template (
457 .vld(dbg1_ncu_vld),
458 .data(dbg1_ncu_data[3:0]),
459 .stall(ncu_dbg1_stall),
460 .outdata_vec_in(outdata_vec_in[31:0]) );
461*/
462db1_ucbbusout4_ctl dbg1_ucbbusout4_ctl (/*autoinst*/
463 // Outputs
464 .vld(dbg1_ncu_vld), // Templated
465 .data(dbg1_ncu_data[3:0]), // Templated
466 .outdata_buf_busy(outdata_buf_busy),
467 // Inputs
468 .scan_in(dbg1_ucbbusout4_ctl_scanin),
469 .scan_out(dbg1_ucbbusout4_ctl_scanout),
470 .iol2clk(iol2clk),
471 .tcu_pce_ov(tcu_pce_ov),
472 .tcu_clk_stop(tcu_clk_stop),
473 .tcu_aclk (tcu_aclk ),
474 .tcu_bclk (tcu_bclk ),
475 .tcu_scan_en (tcu_scan_en ),
476 .stall(ncu_dbg1_stall), // Templated
477 .outdata_buf_in(outdata_buf_in[127:0]),
478 .outdata_vec_in(outdata_vec_in[31:0]), // Templated
479 .outdata_buf_wr(outdata_buf_wr));
480
481// Spare gates
482
483db1_ucbflow_ctl_spare_ctl_macro__num_5 spares (
484 .scan_in(spares_scanin),
485 .scan_out(spares_scanout),
486 .l1clk (l1clk),
487 .siclk(siclk),
488 .soclk(soclk)
489);
490
491
492// scan renames
493assign se = tcu_scan_en;
494// end scan
495
496/**** adding clock header ****/
497db1_ucbflow_ctl_l1clkhdr_ctl_macro clkgen (
498 .l2clk (iol2clk),
499 .l1en (1'b1),
500 .l1clk (l1clk),
501 .pce_ov(pce_ov),
502 .stop(stop),
503 .se(se)
504 );
505
506/*** building tcu port ***/
507assign siclk = tcu_aclk ;
508assign soclk = tcu_bclk ;
509assign pce_ov = tcu_pce_ov;
510assign stop = tcu_clk_stop;
511
512// fixscan start:
513assign dbg1_ucbbusin4_ctl_scanin = scan_in ;
514assign buf_head_ff0_scanin = dbg1_ucbbusin4_ctl_scanout;
515assign buf_head_ff1_scanin = buf_head_ff0_scanout ;
516assign buf_tail_ff0_scanin = buf_head_ff1_scanout ;
517assign buf_tail_ff1_scanin = buf_tail_ff0_scanout ;
518assign buf_full_ff_scanin = buf_tail_ff1_scanout ;
519assign buf_empty_ff_scanin = buf_full_ff_scanout ;
520assign buf0_ff_scanin = buf_empty_ff_scanout ;
521assign buf1_ff_scanin = buf0_ff_scanout ;
522assign ack_buf_vld_ff_scanin = buf1_ff_scanout ;
523assign ack_buf_is_nack_ff_scanin = ack_buf_vld_ff_scanout ;
524assign ack_buf_ff_scanin = ack_buf_is_nack_ff_scanout;
525assign dbg1_ucbbusout4_ctl_scanin = ack_buf_ff_scanout ;
526assign spares_scanin = dbg1_ucbbusout4_ctl_scanout;
527assign scan_out = spares_scanout ;
528// fixscan end:
529endmodule // ucb_flow_dbg1
530
531// verilog-library-directories:(".")
532
533
534
535
536
537// any PARAMS parms go into naming of macro
538
539module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_1 (
540 din,
541 en,
542 l1clk,
543 scan_in,
544 siclk,
545 soclk,
546 dout,
547 scan_out);
548wire [0:0] fdin;
549
550 input [0:0] din;
551 input en;
552 input l1clk;
553 input scan_in;
554
555
556 input siclk;
557 input soclk;
558
559 output [0:0] dout;
560 output scan_out;
561assign fdin[0:0] = (din[0:0] & {1{en}}) | (dout[0:0] & ~{1{en}});
562
563
564
565
566
567
568dff #(1) d0_0 (
569.l1clk(l1clk),
570.siclk(siclk),
571.soclk(soclk),
572.d(fdin[0:0]),
573.si(scan_in),
574.so(scan_out),
575.q(dout[0:0])
576);
577
578
579
580
581
582
583
584
585
586
587
588
589endmodule
590
591
592
593
594
595
596
597
598
599
600
601
602
603// any PARAMS parms go into naming of macro
604
605module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_4 (
606 din,
607 en,
608 l1clk,
609 scan_in,
610 siclk,
611 soclk,
612 dout,
613 scan_out);
614wire [3:0] fdin;
615wire [2:0] so;
616
617 input [3:0] din;
618 input en;
619 input l1clk;
620 input scan_in;
621
622
623 input siclk;
624 input soclk;
625
626 output [3:0] dout;
627 output scan_out;
628assign fdin[3:0] = (din[3:0] & {4{en}}) | (dout[3:0] & ~{4{en}});
629
630
631
632
633
634
635dff #(4) d0_0 (
636.l1clk(l1clk),
637.siclk(siclk),
638.soclk(soclk),
639.d(fdin[3:0]),
640.si({scan_in,so[2:0]}),
641.so({so[2:0],scan_out}),
642.q(dout[3:0])
643);
644
645
646
647
648
649
650
651
652
653
654
655
656endmodule
657
658
659
660
661
662
663
664
665
666
667
668
669
670// any PARAMS parms go into naming of macro
671
672module db1_ucbflow_ctl_msff_ctl_macro__width_1 (
673 din,
674 l1clk,
675 scan_in,
676 siclk,
677 soclk,
678 dout,
679 scan_out);
680wire [0:0] fdin;
681
682 input [0:0] din;
683 input l1clk;
684 input scan_in;
685
686
687 input siclk;
688 input soclk;
689
690 output [0:0] dout;
691 output scan_out;
692assign fdin[0:0] = din[0:0];
693
694
695
696
697
698
699dff #(1) d0_0 (
700.l1clk(l1clk),
701.siclk(siclk),
702.soclk(soclk),
703.d(fdin[0:0]),
704.si(scan_in),
705.so(scan_out),
706.q(dout[0:0])
707);
708
709
710
711
712
713
714
715
716
717
718
719
720endmodule
721
722
723
724
725
726
727
728
729
730
731
732
733
734// any PARAMS parms go into naming of macro
735
736module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_32 (
737 din,
738 en,
739 l1clk,
740 scan_in,
741 siclk,
742 soclk,
743 dout,
744 scan_out);
745wire [31:0] fdin;
746wire [30:0] so;
747
748 input [31:0] din;
749 input en;
750 input l1clk;
751 input scan_in;
752
753
754 input siclk;
755 input soclk;
756
757 output [31:0] dout;
758 output scan_out;
759assign fdin[31:0] = (din[31:0] & {32{en}}) | (dout[31:0] & ~{32{en}});
760
761
762
763
764
765
766dff #(32) d0_0 (
767.l1clk(l1clk),
768.siclk(siclk),
769.soclk(soclk),
770.d(fdin[31:0]),
771.si({scan_in,so[30:0]}),
772.so({so[30:0],scan_out}),
773.q(dout[31:0])
774);
775
776
777
778
779
780
781
782
783
784
785
786
787endmodule
788
789
790
791
792
793
794
795
796
797
798
799
800
801// any PARAMS parms go into naming of macro
802
803module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_128 (
804 din,
805 en,
806 l1clk,
807 scan_in,
808 siclk,
809 soclk,
810 dout,
811 scan_out);
812wire [127:0] fdin;
813wire [126:0] so;
814
815 input [127:0] din;
816 input en;
817 input l1clk;
818 input scan_in;
819
820
821 input siclk;
822 input soclk;
823
824 output [127:0] dout;
825 output scan_out;
826assign fdin[127:0] = (din[127:0] & {128{en}}) | (dout[127:0] & ~{128{en}});
827
828
829
830
831
832
833dff #(128) d0_0 (
834.l1clk(l1clk),
835.siclk(siclk),
836.soclk(soclk),
837.d(fdin[127:0]),
838.si({scan_in,so[126:0]}),
839.so({so[126:0],scan_out}),
840.q(dout[127:0])
841);
842
843
844
845
846
847
848
849
850
851
852
853
854endmodule
855
856
857
858
859
860
861
862
863
864
865
866
867
868// any PARAMS parms go into naming of macro
869
870module db1_ucbflow_ctl_l1clkhdr_ctl_macro (
871 l2clk,
872 l1en,
873 pce_ov,
874 stop,
875 se,
876 l1clk);
877
878
879 input l2clk;
880 input l1en;
881 input pce_ov;
882 input stop;
883 input se;
884 output l1clk;
885
886
887
888
889
890cl_sc1_l1hdr_8x c_0 (
891
892
893 .l2clk(l2clk),
894 .pce(l1en),
895 .l1clk(l1clk),
896 .se(se),
897 .pce_ov(pce_ov),
898 .stop(stop)
899);
900
901
902
903endmodule
904
905
906
907
908
909
910
911
912
913
914
915
916
917// any PARAMS parms go into naming of macro
918
919module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_117 (
920 din,
921 en,
922 l1clk,
923 scan_in,
924 siclk,
925 soclk,
926 dout,
927 scan_out);
928wire [116:0] fdin;
929wire [115:0] so;
930
931 input [116:0] din;
932 input en;
933 input l1clk;
934 input scan_in;
935
936
937 input siclk;
938 input soclk;
939
940 output [116:0] dout;
941 output scan_out;
942assign fdin[116:0] = (din[116:0] & {117{en}}) | (dout[116:0] & ~{117{en}});
943
944
945
946
947
948
949dff #(117) d0_0 (
950.l1clk(l1clk),
951.siclk(siclk),
952.soclk(soclk),
953.d(fdin[116:0]),
954.si({scan_in,so[115:0]}),
955.so({so[115:0],scan_out}),
956.q(dout[116:0])
957);
958
959
960
961
962
963
964
965
966
967
968
969
970endmodule
971
972
973
974
975
976
977
978
979
980
981
982
983
984// any PARAMS parms go into naming of macro
985
986module db1_ucbflow_ctl_msff_ctl_macro__en_1__width_76 (
987 din,
988 en,
989 l1clk,
990 scan_in,
991 siclk,
992 soclk,
993 dout,
994 scan_out);
995wire [75:0] fdin;
996wire [74:0] so;
997
998 input [75:0] din;
999 input en;
1000 input l1clk;
1001 input scan_in;
1002
1003
1004 input siclk;
1005 input soclk;
1006
1007 output [75:0] dout;
1008 output scan_out;
1009assign fdin[75:0] = (din[75:0] & {76{en}}) | (dout[75:0] & ~{76{en}});
1010
1011
1012
1013
1014
1015
1016dff #(76) d0_0 (
1017.l1clk(l1clk),
1018.siclk(siclk),
1019.soclk(soclk),
1020.d(fdin[75:0]),
1021.si({scan_in,so[74:0]}),
1022.so({so[74:0],scan_out}),
1023.q(dout[75:0])
1024);
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037endmodule
1038
1039
1040
1041
1042
1043
1044// any PARAMS parms go into naming of macro
1045
1046module db1_ucbflow_ctl_msff_ctl_macro__width_32 (
1047 din,
1048 l1clk,
1049 scan_in,
1050 siclk,
1051 soclk,
1052 dout,
1053 scan_out);
1054wire [31:0] fdin;
1055wire [30:0] so;
1056
1057 input [31:0] din;
1058 input l1clk;
1059 input scan_in;
1060
1061
1062 input siclk;
1063 input soclk;
1064
1065 output [31:0] dout;
1066 output scan_out;
1067assign fdin[31:0] = din[31:0];
1068
1069
1070
1071
1072
1073
1074dff #(32) d0_0 (
1075.l1clk(l1clk),
1076.siclk(siclk),
1077.soclk(soclk),
1078.d(fdin[31:0]),
1079.si({scan_in,so[30:0]}),
1080.so({so[30:0],scan_out}),
1081.q(dout[31:0])
1082);
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095endmodule
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109// any PARAMS parms go into naming of macro
1110
1111module db1_ucbflow_ctl_msff_ctl_macro__width_128 (
1112 din,
1113 l1clk,
1114 scan_in,
1115 siclk,
1116 soclk,
1117 dout,
1118 scan_out);
1119wire [127:0] fdin;
1120wire [126:0] so;
1121
1122 input [127:0] din;
1123 input l1clk;
1124 input scan_in;
1125
1126
1127 input siclk;
1128 input soclk;
1129
1130 output [127:0] dout;
1131 output scan_out;
1132assign fdin[127:0] = din[127:0];
1133
1134
1135
1136
1137
1138
1139dff #(128) d0_0 (
1140.l1clk(l1clk),
1141.siclk(siclk),
1142.soclk(soclk),
1143.d(fdin[127:0]),
1144.si({scan_in,so[126:0]}),
1145.so({so[126:0],scan_out}),
1146.q(dout[127:0])
1147);
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160endmodule
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170// Description: Spare gate macro for control blocks
1171//
1172// Param num controls the number of times the macro is added
1173// flops=0 can be used to use only combination spare logic
1174
1175
1176module db1_ucbflow_ctl_spare_ctl_macro__num_5 (
1177 l1clk,
1178 scan_in,
1179 siclk,
1180 soclk,
1181 scan_out);
1182wire si_0;
1183wire so_0;
1184wire spare0_flop_unused;
1185wire spare0_buf_32x_unused;
1186wire spare0_nand3_8x_unused;
1187wire spare0_inv_8x_unused;
1188wire spare0_aoi22_4x_unused;
1189wire spare0_buf_8x_unused;
1190wire spare0_oai22_4x_unused;
1191wire spare0_inv_16x_unused;
1192wire spare0_nand2_16x_unused;
1193wire spare0_nor3_4x_unused;
1194wire spare0_nand2_8x_unused;
1195wire spare0_buf_16x_unused;
1196wire spare0_nor2_16x_unused;
1197wire spare0_inv_32x_unused;
1198wire si_1;
1199wire so_1;
1200wire spare1_flop_unused;
1201wire spare1_buf_32x_unused;
1202wire spare1_nand3_8x_unused;
1203wire spare1_inv_8x_unused;
1204wire spare1_aoi22_4x_unused;
1205wire spare1_buf_8x_unused;
1206wire spare1_oai22_4x_unused;
1207wire spare1_inv_16x_unused;
1208wire spare1_nand2_16x_unused;
1209wire spare1_nor3_4x_unused;
1210wire spare1_nand2_8x_unused;
1211wire spare1_buf_16x_unused;
1212wire spare1_nor2_16x_unused;
1213wire spare1_inv_32x_unused;
1214wire si_2;
1215wire so_2;
1216wire spare2_flop_unused;
1217wire spare2_buf_32x_unused;
1218wire spare2_nand3_8x_unused;
1219wire spare2_inv_8x_unused;
1220wire spare2_aoi22_4x_unused;
1221wire spare2_buf_8x_unused;
1222wire spare2_oai22_4x_unused;
1223wire spare2_inv_16x_unused;
1224wire spare2_nand2_16x_unused;
1225wire spare2_nor3_4x_unused;
1226wire spare2_nand2_8x_unused;
1227wire spare2_buf_16x_unused;
1228wire spare2_nor2_16x_unused;
1229wire spare2_inv_32x_unused;
1230wire si_3;
1231wire so_3;
1232wire spare3_flop_unused;
1233wire spare3_buf_32x_unused;
1234wire spare3_nand3_8x_unused;
1235wire spare3_inv_8x_unused;
1236wire spare3_aoi22_4x_unused;
1237wire spare3_buf_8x_unused;
1238wire spare3_oai22_4x_unused;
1239wire spare3_inv_16x_unused;
1240wire spare3_nand2_16x_unused;
1241wire spare3_nor3_4x_unused;
1242wire spare3_nand2_8x_unused;
1243wire spare3_buf_16x_unused;
1244wire spare3_nor2_16x_unused;
1245wire spare3_inv_32x_unused;
1246wire si_4;
1247wire so_4;
1248wire spare4_flop_unused;
1249wire spare4_buf_32x_unused;
1250wire spare4_nand3_8x_unused;
1251wire spare4_inv_8x_unused;
1252wire spare4_aoi22_4x_unused;
1253wire spare4_buf_8x_unused;
1254wire spare4_oai22_4x_unused;
1255wire spare4_inv_16x_unused;
1256wire spare4_nand2_16x_unused;
1257wire spare4_nor3_4x_unused;
1258wire spare4_nand2_8x_unused;
1259wire spare4_buf_16x_unused;
1260wire spare4_nor2_16x_unused;
1261wire spare4_inv_32x_unused;
1262
1263
1264input l1clk;
1265input scan_in;
1266input siclk;
1267input soclk;
1268output scan_out;
1269
1270cl_sc1_msff_8x spare0_flop (.l1clk(l1clk),
1271 .siclk(siclk),
1272 .soclk(soclk),
1273 .si(si_0),
1274 .so(so_0),
1275 .d(1'b0),
1276 .q(spare0_flop_unused));
1277assign si_0 = scan_in;
1278
1279cl_u1_buf_32x spare0_buf_32x (.in(1'b1),
1280 .out(spare0_buf_32x_unused));
1281cl_u1_nand3_8x spare0_nand3_8x (.in0(1'b1),
1282 .in1(1'b1),
1283 .in2(1'b1),
1284 .out(spare0_nand3_8x_unused));
1285cl_u1_inv_8x spare0_inv_8x (.in(1'b1),
1286 .out(spare0_inv_8x_unused));
1287cl_u1_aoi22_4x spare0_aoi22_4x (.in00(1'b1),
1288 .in01(1'b1),
1289 .in10(1'b1),
1290 .in11(1'b1),
1291 .out(spare0_aoi22_4x_unused));
1292cl_u1_buf_8x spare0_buf_8x (.in(1'b1),
1293 .out(spare0_buf_8x_unused));
1294cl_u1_oai22_4x spare0_oai22_4x (.in00(1'b1),
1295 .in01(1'b1),
1296 .in10(1'b1),
1297 .in11(1'b1),
1298 .out(spare0_oai22_4x_unused));
1299cl_u1_inv_16x spare0_inv_16x (.in(1'b1),
1300 .out(spare0_inv_16x_unused));
1301cl_u1_nand2_16x spare0_nand2_16x (.in0(1'b1),
1302 .in1(1'b1),
1303 .out(spare0_nand2_16x_unused));
1304cl_u1_nor3_4x spare0_nor3_4x (.in0(1'b0),
1305 .in1(1'b0),
1306 .in2(1'b0),
1307 .out(spare0_nor3_4x_unused));
1308cl_u1_nand2_8x spare0_nand2_8x (.in0(1'b1),
1309 .in1(1'b1),
1310 .out(spare0_nand2_8x_unused));
1311cl_u1_buf_16x spare0_buf_16x (.in(1'b1),
1312 .out(spare0_buf_16x_unused));
1313cl_u1_nor2_16x spare0_nor2_16x (.in0(1'b0),
1314 .in1(1'b0),
1315 .out(spare0_nor2_16x_unused));
1316cl_u1_inv_32x spare0_inv_32x (.in(1'b1),
1317 .out(spare0_inv_32x_unused));
1318
1319cl_sc1_msff_8x spare1_flop (.l1clk(l1clk),
1320 .siclk(siclk),
1321 .soclk(soclk),
1322 .si(si_1),
1323 .so(so_1),
1324 .d(1'b0),
1325 .q(spare1_flop_unused));
1326assign si_1 = so_0;
1327
1328cl_u1_buf_32x spare1_buf_32x (.in(1'b1),
1329 .out(spare1_buf_32x_unused));
1330cl_u1_nand3_8x spare1_nand3_8x (.in0(1'b1),
1331 .in1(1'b1),
1332 .in2(1'b1),
1333 .out(spare1_nand3_8x_unused));
1334cl_u1_inv_8x spare1_inv_8x (.in(1'b1),
1335 .out(spare1_inv_8x_unused));
1336cl_u1_aoi22_4x spare1_aoi22_4x (.in00(1'b1),
1337 .in01(1'b1),
1338 .in10(1'b1),
1339 .in11(1'b1),
1340 .out(spare1_aoi22_4x_unused));
1341cl_u1_buf_8x spare1_buf_8x (.in(1'b1),
1342 .out(spare1_buf_8x_unused));
1343cl_u1_oai22_4x spare1_oai22_4x (.in00(1'b1),
1344 .in01(1'b1),
1345 .in10(1'b1),
1346 .in11(1'b1),
1347 .out(spare1_oai22_4x_unused));
1348cl_u1_inv_16x spare1_inv_16x (.in(1'b1),
1349 .out(spare1_inv_16x_unused));
1350cl_u1_nand2_16x spare1_nand2_16x (.in0(1'b1),
1351 .in1(1'b1),
1352 .out(spare1_nand2_16x_unused));
1353cl_u1_nor3_4x spare1_nor3_4x (.in0(1'b0),
1354 .in1(1'b0),
1355 .in2(1'b0),
1356 .out(spare1_nor3_4x_unused));
1357cl_u1_nand2_8x spare1_nand2_8x (.in0(1'b1),
1358 .in1(1'b1),
1359 .out(spare1_nand2_8x_unused));
1360cl_u1_buf_16x spare1_buf_16x (.in(1'b1),
1361 .out(spare1_buf_16x_unused));
1362cl_u1_nor2_16x spare1_nor2_16x (.in0(1'b0),
1363 .in1(1'b0),
1364 .out(spare1_nor2_16x_unused));
1365cl_u1_inv_32x spare1_inv_32x (.in(1'b1),
1366 .out(spare1_inv_32x_unused));
1367
1368cl_sc1_msff_8x spare2_flop (.l1clk(l1clk),
1369 .siclk(siclk),
1370 .soclk(soclk),
1371 .si(si_2),
1372 .so(so_2),
1373 .d(1'b0),
1374 .q(spare2_flop_unused));
1375assign si_2 = so_1;
1376
1377cl_u1_buf_32x spare2_buf_32x (.in(1'b1),
1378 .out(spare2_buf_32x_unused));
1379cl_u1_nand3_8x spare2_nand3_8x (.in0(1'b1),
1380 .in1(1'b1),
1381 .in2(1'b1),
1382 .out(spare2_nand3_8x_unused));
1383cl_u1_inv_8x spare2_inv_8x (.in(1'b1),
1384 .out(spare2_inv_8x_unused));
1385cl_u1_aoi22_4x spare2_aoi22_4x (.in00(1'b1),
1386 .in01(1'b1),
1387 .in10(1'b1),
1388 .in11(1'b1),
1389 .out(spare2_aoi22_4x_unused));
1390cl_u1_buf_8x spare2_buf_8x (.in(1'b1),
1391 .out(spare2_buf_8x_unused));
1392cl_u1_oai22_4x spare2_oai22_4x (.in00(1'b1),
1393 .in01(1'b1),
1394 .in10(1'b1),
1395 .in11(1'b1),
1396 .out(spare2_oai22_4x_unused));
1397cl_u1_inv_16x spare2_inv_16x (.in(1'b1),
1398 .out(spare2_inv_16x_unused));
1399cl_u1_nand2_16x spare2_nand2_16x (.in0(1'b1),
1400 .in1(1'b1),
1401 .out(spare2_nand2_16x_unused));
1402cl_u1_nor3_4x spare2_nor3_4x (.in0(1'b0),
1403 .in1(1'b0),
1404 .in2(1'b0),
1405 .out(spare2_nor3_4x_unused));
1406cl_u1_nand2_8x spare2_nand2_8x (.in0(1'b1),
1407 .in1(1'b1),
1408 .out(spare2_nand2_8x_unused));
1409cl_u1_buf_16x spare2_buf_16x (.in(1'b1),
1410 .out(spare2_buf_16x_unused));
1411cl_u1_nor2_16x spare2_nor2_16x (.in0(1'b0),
1412 .in1(1'b0),
1413 .out(spare2_nor2_16x_unused));
1414cl_u1_inv_32x spare2_inv_32x (.in(1'b1),
1415 .out(spare2_inv_32x_unused));
1416
1417cl_sc1_msff_8x spare3_flop (.l1clk(l1clk),
1418 .siclk(siclk),
1419 .soclk(soclk),
1420 .si(si_3),
1421 .so(so_3),
1422 .d(1'b0),
1423 .q(spare3_flop_unused));
1424assign si_3 = so_2;
1425
1426cl_u1_buf_32x spare3_buf_32x (.in(1'b1),
1427 .out(spare3_buf_32x_unused));
1428cl_u1_nand3_8x spare3_nand3_8x (.in0(1'b1),
1429 .in1(1'b1),
1430 .in2(1'b1),
1431 .out(spare3_nand3_8x_unused));
1432cl_u1_inv_8x spare3_inv_8x (.in(1'b1),
1433 .out(spare3_inv_8x_unused));
1434cl_u1_aoi22_4x spare3_aoi22_4x (.in00(1'b1),
1435 .in01(1'b1),
1436 .in10(1'b1),
1437 .in11(1'b1),
1438 .out(spare3_aoi22_4x_unused));
1439cl_u1_buf_8x spare3_buf_8x (.in(1'b1),
1440 .out(spare3_buf_8x_unused));
1441cl_u1_oai22_4x spare3_oai22_4x (.in00(1'b1),
1442 .in01(1'b1),
1443 .in10(1'b1),
1444 .in11(1'b1),
1445 .out(spare3_oai22_4x_unused));
1446cl_u1_inv_16x spare3_inv_16x (.in(1'b1),
1447 .out(spare3_inv_16x_unused));
1448cl_u1_nand2_16x spare3_nand2_16x (.in0(1'b1),
1449 .in1(1'b1),
1450 .out(spare3_nand2_16x_unused));
1451cl_u1_nor3_4x spare3_nor3_4x (.in0(1'b0),
1452 .in1(1'b0),
1453 .in2(1'b0),
1454 .out(spare3_nor3_4x_unused));
1455cl_u1_nand2_8x spare3_nand2_8x (.in0(1'b1),
1456 .in1(1'b1),
1457 .out(spare3_nand2_8x_unused));
1458cl_u1_buf_16x spare3_buf_16x (.in(1'b1),
1459 .out(spare3_buf_16x_unused));
1460cl_u1_nor2_16x spare3_nor2_16x (.in0(1'b0),
1461 .in1(1'b0),
1462 .out(spare3_nor2_16x_unused));
1463cl_u1_inv_32x spare3_inv_32x (.in(1'b1),
1464 .out(spare3_inv_32x_unused));
1465
1466cl_sc1_msff_8x spare4_flop (.l1clk(l1clk),
1467 .siclk(siclk),
1468 .soclk(soclk),
1469 .si(si_4),
1470 .so(so_4),
1471 .d(1'b0),
1472 .q(spare4_flop_unused));
1473assign si_4 = so_3;
1474
1475cl_u1_buf_32x spare4_buf_32x (.in(1'b1),
1476 .out(spare4_buf_32x_unused));
1477cl_u1_nand3_8x spare4_nand3_8x (.in0(1'b1),
1478 .in1(1'b1),
1479 .in2(1'b1),
1480 .out(spare4_nand3_8x_unused));
1481cl_u1_inv_8x spare4_inv_8x (.in(1'b1),
1482 .out(spare4_inv_8x_unused));
1483cl_u1_aoi22_4x spare4_aoi22_4x (.in00(1'b1),
1484 .in01(1'b1),
1485 .in10(1'b1),
1486 .in11(1'b1),
1487 .out(spare4_aoi22_4x_unused));
1488cl_u1_buf_8x spare4_buf_8x (.in(1'b1),
1489 .out(spare4_buf_8x_unused));
1490cl_u1_oai22_4x spare4_oai22_4x (.in00(1'b1),
1491 .in01(1'b1),
1492 .in10(1'b1),
1493 .in11(1'b1),
1494 .out(spare4_oai22_4x_unused));
1495cl_u1_inv_16x spare4_inv_16x (.in(1'b1),
1496 .out(spare4_inv_16x_unused));
1497cl_u1_nand2_16x spare4_nand2_16x (.in0(1'b1),
1498 .in1(1'b1),
1499 .out(spare4_nand2_16x_unused));
1500cl_u1_nor3_4x spare4_nor3_4x (.in0(1'b0),
1501 .in1(1'b0),
1502 .in2(1'b0),
1503 .out(spare4_nor3_4x_unused));
1504cl_u1_nand2_8x spare4_nand2_8x (.in0(1'b1),
1505 .in1(1'b1),
1506 .out(spare4_nand2_8x_unused));
1507cl_u1_buf_16x spare4_buf_16x (.in(1'b1),
1508 .out(spare4_buf_16x_unused));
1509cl_u1_nor2_16x spare4_nor2_16x (.in0(1'b0),
1510 .in1(1'b0),
1511 .out(spare4_nor2_16x_unused));
1512cl_u1_inv_32x spare4_inv_32x (.in(1'b1),
1513 .out(spare4_inv_32x_unused));
1514assign scan_out = so_4;
1515
1516
1517
1518endmodule
1519