Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / design / sys / iop / l2t / rtl / l2t_dirout_dp.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: l2t_dirout_dp.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 l2t_dirout_dp (
36 tcu_pce_ov,
37 tcu_aclk,
38 tcu_bclk,
39 tcu_scan_en,
40 tcu_clk_stop,
41 rddata_out_c52_top,
42 rddata_out_c52_bottom,
43 rd_data_sel_c52_top,
44 rd_data_sel_c52_bottom,
45 parity_vld_in,
46 dirout_parity_vld_out,
47 mbist_read_data_pick_top,
48 mbist_read_data_pick_bottom,
49 mbist_lkup_wrdata,
50 l2t_mb0_run,
51 mbist_dc_ic_read_en,
52 cam_read_fail,
53 scan_out,
54 l2clk,
55 scan_in,
56 dirout_parity_vld);
57wire stop;
58wire pce_ov;
59wire siclk;
60wire soclk;
61wire se;
62wire rd_data_sel_c52_top_final;
63wire rd_data_sel_c52_bottom_final;
64wire mbist_read_data_pick_top_r2;
65wire mbist_read_data_pick_bottom_r2;
66wire l2t_mb0_run_r1;
67wire l2t_mb0_run_r1_n;
68wire ff_rddata_out_c52_top_scanin;
69wire ff_rddata_out_c52_top_scanout;
70wire [15:0] rddata_out_c52_top_reg;
71wire ff_rddata_out_c52_bottom_scanin;
72wire ff_rddata_out_c52_bottom_scanout;
73wire mbist_read_data_pick_top_r1;
74wire [15:0] rddata_out_c52_bottom_reg;
75wire ff_mbist_dirin_rddata_out_c52_scanin;
76wire ff_mbist_dirin_rddata_out_c52_scanout;
77wire mbist_read_data_pick_bottom_r1;
78wire [15:0] dirin_rddata_out_c6;
79wire row_parity;
80wire rd_data_sel_top_or_bot;
81wire dir_rddata_and_rd_data_sel_top_or_bot;
82wire ff_parity_vld_scanin;
83wire ff_parity_vld_scanout;
84wire read_enable;
85wire ff_lookup_cmp_data_scanin;
86wire ff_lookup_cmp_data_scanout;
87wire mbist_dc_ic_read_en_r1;
88wire mbist_dc_ic_read_en_r2;
89wire cam_read_fail_unbuff_w;
90wire mbist_dc_ic_read_en_r3;
91wire [15:0] mbist_lkup_wrdata_r1;
92wire ff_mbist_wdata_r2_r3_split1_scanin;
93wire ff_mbist_wdata_r2_r3_split1_scanout;
94wire [15:0] mbist_lkup_wrdata_r2;
95wire ff_mbist_wdata_r2_r3_split2_scanin;
96wire ff_mbist_wdata_r2_r3_split2_scanout;
97wire [15:0] mbist_lkup_wrdata_r3;
98wire mbist_dc_ic_read_en_r3_n;
99wire cam_read_fail_unbuff;
100
101
102 input tcu_pce_ov;
103 input tcu_aclk;
104 input tcu_bclk;
105 input tcu_scan_en;
106 input tcu_clk_stop;
107
108
109input [15:0] rddata_out_c52_top; // Top , BS and SR 11/18/03 Reverse Directory change
110 // BS and SR 11/18/03 Reverse Directory change
111input [15:0] rddata_out_c52_bottom; // Bottom , BS and SR 11/18/03 Reverse Directory change
112 // BS and SR 11/18/03 Reverse Directory change
113
114input rd_data_sel_c52_top; // Top
115 // BS and SR 11/18/03 Reverse Directory change
116input rd_data_sel_c52_bottom; // Bottom
117 // BS and SR 11/18/03 Reverse Directory change
118input [2:0] parity_vld_in; // Right
119output [2:0] dirout_parity_vld_out; // Left
120
121input mbist_read_data_pick_top;
122input mbist_read_data_pick_bottom;
123input [15:0] mbist_lkup_wrdata;
124input l2t_mb0_run;
125
126input [1:0] mbist_dc_ic_read_en;
127
128
129
130output cam_read_fail;
131output scan_out;
132input l2clk;
133input scan_in;
134output dirout_parity_vld;
135
136assign stop = tcu_clk_stop;
137assign pce_ov = tcu_pce_ov;
138assign siclk = tcu_aclk;
139assign soclk = tcu_bclk;
140assign se = tcu_scan_en;
141
142
143//assign scan_out = 1'b0;
144
145
146
147wire [15:0] dirin_rddata_out_c52;
148wire row1_parity;
149wire row2_parity;
150wire parity;
151wire parity_vld_prev;
152wire rd_data_sel_c52_top_n;
153
154// This is a 16 wide dp
155// bits {0,1} {2,3} occupy the same bit pitches.
156
157l2t_dirout_dp_mux_macro__mux_aonpe__width_2 mux_rd_data_sel
158 (
159 .dout ({rd_data_sel_c52_top_final,rd_data_sel_c52_bottom_final}),
160 .din0 ({mbist_read_data_pick_top_r2,mbist_read_data_pick_bottom_r2}),
161 .din1 ({rd_data_sel_c52_top,rd_data_sel_c52_bottom}),
162 .sel0 (l2t_mb0_run_r1),
163 .sel1 (l2t_mb0_run_r1_n)
164 );
165l2t_dirout_dp_inv_macro__width_2 inv_added
166 (
167 .dout ({rd_data_sel_c52_top_n,l2t_mb0_run_r1_n}),
168 .din ({rd_data_sel_c52_top_final,l2t_mb0_run_r1})
169 );
170
171
172l2t_dirout_dp_msff_macro__stack_18c__width_17 ff_rddata_out_c52_top
173 (
174 .scan_in(ff_rddata_out_c52_top_scanin),
175 .scan_out(ff_rddata_out_c52_top_scanout),
176 .dout ({l2t_mb0_run_r1,rddata_out_c52_top_reg[15:0]}),
177 .din ({l2t_mb0_run,rddata_out_c52_top[15:0]}),
178 .clk (l2clk),
179 .en(1'b1),
180 .se(se),
181 .siclk(siclk),
182 .soclk(soclk),
183 .pce_ov(pce_ov),
184 .stop(stop)
185 );
186
187l2t_dirout_dp_msff_macro__stack_18c__width_18 ff_rddata_out_c52_bottom
188 (
189 .scan_in(ff_rddata_out_c52_bottom_scanin),
190 .scan_out(ff_rddata_out_c52_bottom_scanout),
191 .dout ({mbist_read_data_pick_top_r1,mbist_read_data_pick_top_r2,rddata_out_c52_bottom_reg[15:0]}),
192 .din ({mbist_read_data_pick_top,mbist_read_data_pick_top_r1,rddata_out_c52_bottom[15:0]}),
193 .clk (l2clk),
194 .en(1'b1),
195 .se(se),
196 .siclk(siclk),
197 .soclk(soclk),
198 .pce_ov(pce_ov),
199 .stop(stop)
200 );
201
202
203l2t_dirout_dp_msff_macro__stack_18c__width_18 ff_mbist_dirin_rddata_out_c52
204 (
205 .scan_in(ff_mbist_dirin_rddata_out_c52_scanin),
206 .scan_out(ff_mbist_dirin_rddata_out_c52_scanout),
207 .dout ({mbist_read_data_pick_bottom_r1,mbist_read_data_pick_bottom_r2,
208 dirin_rddata_out_c6[15:0]}),
209 .din ({mbist_read_data_pick_bottom,mbist_read_data_pick_bottom_r1,
210 dirin_rddata_out_c52[15:0]}),
211 .clk (l2clk),
212 .en (1'b1),
213 .se(se),
214 .siclk(siclk),
215 .soclk(soclk),
216 .pce_ov(pce_ov),
217 .stop(stop)
218 );
219
220
221
222l2t_dirout_dp_mux_macro__mux_aonpe__ports_2__stack_16c__width_16 mux_rddata_out_c52 // BS and SR 11/18/03 Reverse Directory change
223 (
224 .dout (dirin_rddata_out_c52[15:0]) ,
225 .din0 (rddata_out_c52_top_reg[15:0]),
226 .din1 (rddata_out_c52_bottom_reg[15:0]),
227 .sel0 (rd_data_sel_c52_top_final),
228 .sel1 (rd_data_sel_c52_top_n)
229 );
230
231//zzpar16 par_row1_parity ( .z(row1_parity),
232// .d({dirin_rddata_out_c52[30],dirin_rddata_out_c52[28],dirin_rddata_out_c52[26],
233// dirin_rddata_out_c52[24],dirin_rddata_out_c52[22],dirin_rddata_out_c52[20],
234// dirin_rddata_out_c52[18],dirin_rddata_out_c52[16],dirin_rddata_out_c52[14],
235// dirin_rddata_out_c52[12],dirin_rddata_out_c52[10],dirin_rddata_out_c52[8],
236// dirin_rddata_out_c52[6],dirin_rddata_out_c52[4],dirin_rddata_out_c52[2],
237// dirin_rddata_out_c52[0]}));
238//
239//zzpar16 par_row2_parity ( .z(row2_parity),
240// .d({ 1'b0,dirin_rddata_out_c52[29],dirin_rddata_out_c52[27],
241// dirin_rddata_out_c52[25],dirin_rddata_out_c52[23],dirin_rddata_out_c52[21],
242// dirin_rddata_out_c52[19],dirin_rddata_out_c52[17],dirin_rddata_out_c52[15],
243// dirin_rddata_out_c52[13],dirin_rddata_out_c52[11],dirin_rddata_out_c52[9],
244// dirin_rddata_out_c52[7],dirin_rddata_out_c52[5],dirin_rddata_out_c52[3],
245// dirin_rddata_out_c52[1]}));
246//assign parity_vld_prev = (row1_parity ^ row2_parity)
247// & dirin_rddata_out_c52[31] &
248// ( rd_data_sel_c52_top | rd_data_sel_c52_bottom);
249
250l2t_dirout_dp_prty_macro__width_16 par_row_parity // BS and SR 11/18/03 Reverse Directory change
251 (
252 .din ({1'b0,dirin_rddata_out_c52[14:0]}),
253 .dout (row_parity)
254 );
255
256l2t_dirout_dp_or_macro__width_1 or_sel_top_bot
257 (
258 .dout (rd_data_sel_top_or_bot),
259 .din0 (rd_data_sel_c52_top_final),
260 .din1 (rd_data_sel_c52_bottom_final)
261 );
262
263l2t_dirout_dp_and_macro__width_1 andor_sel_top_bot_dir_data (
264 .dout (dir_rddata_and_rd_data_sel_top_or_bot),
265 .din0 (rd_data_sel_top_or_bot),
266 .din1 (dirin_rddata_out_c52[15])
267 );
268
269l2t_dirout_dp_and_macro__width_1 and_xorprty_andor_sel_top_bot_dir ( // BS and SR 11/18/03 Reverse Directory change
270 .dout (parity_vld_prev),
271 .din0 (dir_rddata_and_rd_data_sel_top_or_bot),
272 .din1 (row_parity)
273 );
274
275l2t_dirout_dp_msff_macro__stack_1c__width_1 ff_parity_vld
276 (
277 .scan_in(ff_parity_vld_scanin),
278 .scan_out(ff_parity_vld_scanout),
279 .din (parity_vld_prev),
280 .clk (l2clk),
281 .dout (dirout_parity_vld),
282 .en (1'b1),
283 .se(se),
284 .siclk(siclk),
285 .soclk(soclk),
286 .pce_ov(pce_ov),
287 .stop(stop)
288 );
289
290
291l2t_dirout_dp_or_macro__width_1 or_read_enable
292 (
293 .dout (read_enable),
294 .din0 (mbist_dc_ic_read_en[1]),
295 .din1 (mbist_dc_ic_read_en[0])
296 );
297
298l2t_dirout_dp_msff_macro__stack_20c__width_20 ff_lookup_cmp_data
299 (
300 .scan_in(ff_lookup_cmp_data_scanin),
301 .scan_out(ff_lookup_cmp_data_scanout),
302 .din ({read_enable,mbist_dc_ic_read_en_r1,mbist_dc_ic_read_en_r2,
303 cam_read_fail_unbuff_w,mbist_lkup_wrdata[15:0]}),
304 .clk (l2clk),
305 .dout ({mbist_dc_ic_read_en_r1,mbist_dc_ic_read_en_r2,mbist_dc_ic_read_en_r3,
306 cam_read_fail,mbist_lkup_wrdata_r1[15:0]}),
307 .en (1'b1),
308 .se(se),
309 .siclk(siclk),
310 .soclk(soclk),
311 .pce_ov(pce_ov),
312 .stop(stop)
313 );
314
315
316
317l2t_dirout_dp_msff_macro__stack_16c__width_16 ff_mbist_wdata_r2_r3_split1
318 (
319 .scan_in(ff_mbist_wdata_r2_r3_split1_scanin),
320 .scan_out(ff_mbist_wdata_r2_r3_split1_scanout),
321 .dout (mbist_lkup_wrdata_r2[15:0]),
322 .din (mbist_lkup_wrdata_r1[15:0]),
323 .clk (l2clk),
324 .en(1'b1),
325 .se(se),
326 .siclk(siclk),
327 .soclk(soclk),
328 .pce_ov(pce_ov),
329 .stop(stop)
330 );
331
332l2t_dirout_dp_msff_macro__stack_16c__width_16 ff_mbist_wdata_r2_r3_split2
333 (
334 .scan_in(ff_mbist_wdata_r2_r3_split2_scanin),
335 .scan_out(ff_mbist_wdata_r2_r3_split2_scanout),
336 .dout (mbist_lkup_wrdata_r3[15:0]),
337 .din (mbist_lkup_wrdata_r2[15:0]),
338 .clk (l2clk),
339 .en(1'b1),
340 .se(se),
341 .siclk(siclk),
342 .soclk(soclk),
343 .pce_ov(pce_ov),
344 .stop(stop)
345 );
346
347
348l2t_dirout_dp_inv_macro__width_1 inv_mbist_dc_ic_read_en_r2
349 (
350 .dout (mbist_dc_ic_read_en_r3_n),
351 .din (mbist_dc_ic_read_en_r3)
352 );
353
354//assign mbist_dc_ic_read_en_r2_n = mbist_dc_ic_read_en_r2;
355
356l2t_dirout_dp_cmp_macro__width_16 cmp_mbist_data
357 (
358 .dout (cam_read_fail_unbuff),
359 .din0 (mbist_lkup_wrdata_r3[15:0]),
360 .din1 (dirin_rddata_out_c6[15:0])
361 );
362
363
364l2t_dirout_dp_mux_macro__mux_aonpe__ports_2__width_1 mux_cam_fail
365 (
366 .dout (cam_read_fail_unbuff_w),
367 .din0 (cam_read_fail_unbuff),
368 .din1 (1'b1),
369 .sel0 (mbist_dc_ic_read_en_r3),
370 .sel1 (mbist_dc_ic_read_en_r3_n)
371 );
372
373//assign dirout_parity_vld_out = parity_vld_in ; // use a 30X buffer.
374
375l2t_dirout_dp_buff_macro__width_3 buff_dirout_parity_vld_out
376 (
377 .dout (dirout_parity_vld_out[2:0]),
378 .din (parity_vld_in)
379 );
380
381
382// fixscan start:
383assign ff_rddata_out_c52_top_scanin = scan_in ;
384assign ff_rddata_out_c52_bottom_scanin = ff_rddata_out_c52_top_scanout;
385assign ff_mbist_dirin_rddata_out_c52_scanin = ff_rddata_out_c52_bottom_scanout;
386assign ff_parity_vld_scanin = ff_mbist_dirin_rddata_out_c52_scanout;
387assign ff_lookup_cmp_data_scanin = ff_parity_vld_scanout ;
388assign ff_mbist_wdata_r2_r3_split1_scanin = ff_lookup_cmp_data_scanout;
389assign ff_mbist_wdata_r2_r3_split2_scanin = ff_mbist_wdata_r2_r3_split1_scanout;
390assign scan_out = ff_mbist_wdata_r2_r3_split2_scanout;
391// fixscan end:
392endmodule
393
394
395
396// general mux macro for pass-gate and and-or muxes with/wout priority encoders
397// also for pass-gate with decoder
398
399
400
401
402
403// any PARAMS parms go into naming of macro
404
405module l2t_dirout_dp_mux_macro__mux_aonpe__width_2 (
406 din0,
407 sel0,
408 din1,
409 sel1,
410 dout);
411wire buffout0;
412wire buffout1;
413
414 input [1:0] din0;
415 input sel0;
416 input [1:0] din1;
417 input sel1;
418 output [1:0] dout;
419
420
421
422
423
424cl_dp1_muxbuff2_8x c0_0 (
425 .in0(sel0),
426 .in1(sel1),
427 .out0(buffout0),
428 .out1(buffout1)
429);
430mux2s #(2) d0_0 (
431 .sel0(buffout0),
432 .sel1(buffout1),
433 .in0(din0[1:0]),
434 .in1(din1[1:0]),
435.dout(dout[1:0])
436);
437
438
439
440
441
442
443
444
445
446
447
448
449
450endmodule
451
452
453//
454// invert macro
455//
456//
457
458
459
460
461
462module l2t_dirout_dp_inv_macro__width_2 (
463 din,
464 dout);
465 input [1:0] din;
466 output [1:0] dout;
467
468
469
470
471
472
473inv #(2) d0_0 (
474.in(din[1:0]),
475.out(dout[1:0])
476);
477
478
479
480
481
482
483
484
485
486endmodule
487
488
489
490
491
492
493
494
495
496// any PARAMS parms go into naming of macro
497
498module l2t_dirout_dp_msff_macro__stack_18c__width_17 (
499 din,
500 clk,
501 en,
502 se,
503 scan_in,
504 siclk,
505 soclk,
506 pce_ov,
507 stop,
508 dout,
509 scan_out);
510wire l1clk;
511wire siclk_out;
512wire soclk_out;
513wire [15:0] so;
514
515 input [16:0] din;
516
517
518 input clk;
519 input en;
520 input se;
521 input scan_in;
522 input siclk;
523 input soclk;
524 input pce_ov;
525 input stop;
526
527
528
529 output [16:0] dout;
530
531
532 output scan_out;
533
534
535
536
537cl_dp1_l1hdr_8x c0_0 (
538.l2clk(clk),
539.pce(en),
540.aclk(siclk),
541.bclk(soclk),
542.l1clk(l1clk),
543 .se(se),
544 .pce_ov(pce_ov),
545 .stop(stop),
546 .siclk_out(siclk_out),
547 .soclk_out(soclk_out)
548);
549dff #(17) d0_0 (
550.l1clk(l1clk),
551.siclk(siclk_out),
552.soclk(soclk_out),
553.d(din[16:0]),
554.si({scan_in,so[15:0]}),
555.so({so[15:0],scan_out}),
556.q(dout[16:0])
557);
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578endmodule
579
580
581
582
583
584
585
586
587
588
589
590
591
592// any PARAMS parms go into naming of macro
593
594module l2t_dirout_dp_msff_macro__stack_18c__width_18 (
595 din,
596 clk,
597 en,
598 se,
599 scan_in,
600 siclk,
601 soclk,
602 pce_ov,
603 stop,
604 dout,
605 scan_out);
606wire l1clk;
607wire siclk_out;
608wire soclk_out;
609wire [16:0] so;
610
611 input [17:0] din;
612
613
614 input clk;
615 input en;
616 input se;
617 input scan_in;
618 input siclk;
619 input soclk;
620 input pce_ov;
621 input stop;
622
623
624
625 output [17:0] dout;
626
627
628 output scan_out;
629
630
631
632
633cl_dp1_l1hdr_8x c0_0 (
634.l2clk(clk),
635.pce(en),
636.aclk(siclk),
637.bclk(soclk),
638.l1clk(l1clk),
639 .se(se),
640 .pce_ov(pce_ov),
641 .stop(stop),
642 .siclk_out(siclk_out),
643 .soclk_out(soclk_out)
644);
645dff #(18) d0_0 (
646.l1clk(l1clk),
647.siclk(siclk_out),
648.soclk(soclk_out),
649.d(din[17:0]),
650.si({scan_in,so[16:0]}),
651.so({so[16:0],scan_out}),
652.q(dout[17:0])
653);
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674endmodule
675
676
677
678
679
680
681
682
683
684// general mux macro for pass-gate and and-or muxes with/wout priority encoders
685// also for pass-gate with decoder
686
687
688
689
690
691// any PARAMS parms go into naming of macro
692
693module l2t_dirout_dp_mux_macro__mux_aonpe__ports_2__stack_16c__width_16 (
694 din0,
695 sel0,
696 din1,
697 sel1,
698 dout);
699wire buffout0;
700wire buffout1;
701
702 input [15:0] din0;
703 input sel0;
704 input [15:0] din1;
705 input sel1;
706 output [15:0] dout;
707
708
709
710
711
712cl_dp1_muxbuff2_8x c0_0 (
713 .in0(sel0),
714 .in1(sel1),
715 .out0(buffout0),
716 .out1(buffout1)
717);
718mux2s #(16) d0_0 (
719 .sel0(buffout0),
720 .sel1(buffout1),
721 .in0(din0[15:0]),
722 .in1(din1[15:0]),
723.dout(dout[15:0])
724);
725
726
727
728
729
730
731
732
733
734
735
736
737
738endmodule
739
740
741//
742// parity macro (even parity)
743//
744//
745
746
747
748
749
750module l2t_dirout_dp_prty_macro__width_16 (
751 din,
752 dout);
753 input [15:0] din;
754 output dout;
755
756
757
758
759
760
761
762prty #(16) m0_0 (
763.in(din[15:0]),
764.out(dout)
765);
766
767
768
769
770
771
772
773
774
775
776endmodule
777
778
779
780
781
782//
783// or macro for ports = 2,3
784//
785//
786
787
788
789
790
791module l2t_dirout_dp_or_macro__width_1 (
792 din0,
793 din1,
794 dout);
795 input [0:0] din0;
796 input [0:0] din1;
797 output [0:0] dout;
798
799
800
801
802
803
804or2 #(1) d0_0 (
805.in0(din0[0:0]),
806.in1(din1[0:0]),
807.out(dout[0:0])
808);
809
810
811
812
813
814
815
816
817
818endmodule
819
820
821
822
823
824//
825// and macro for ports = 2,3,4
826//
827//
828
829
830
831
832
833module l2t_dirout_dp_and_macro__width_1 (
834 din0,
835 din1,
836 dout);
837 input [0:0] din0;
838 input [0:0] din1;
839 output [0:0] dout;
840
841
842
843
844
845
846and2 #(1) d0_0 (
847.in0(din0[0:0]),
848.in1(din1[0:0]),
849.out(dout[0:0])
850);
851
852
853
854
855
856
857
858
859
860endmodule
861
862
863
864
865
866
867
868
869
870// any PARAMS parms go into naming of macro
871
872module l2t_dirout_dp_msff_macro__stack_1c__width_1 (
873 din,
874 clk,
875 en,
876 se,
877 scan_in,
878 siclk,
879 soclk,
880 pce_ov,
881 stop,
882 dout,
883 scan_out);
884wire l1clk;
885wire siclk_out;
886wire soclk_out;
887
888 input [0:0] din;
889
890
891 input clk;
892 input en;
893 input se;
894 input scan_in;
895 input siclk;
896 input soclk;
897 input pce_ov;
898 input stop;
899
900
901
902 output [0:0] dout;
903
904
905 output scan_out;
906
907
908
909
910cl_dp1_l1hdr_8x c0_0 (
911.l2clk(clk),
912.pce(en),
913.aclk(siclk),
914.bclk(soclk),
915.l1clk(l1clk),
916 .se(se),
917 .pce_ov(pce_ov),
918 .stop(stop),
919 .siclk_out(siclk_out),
920 .soclk_out(soclk_out)
921);
922dff #(1) d0_0 (
923.l1clk(l1clk),
924.siclk(siclk_out),
925.soclk(soclk_out),
926.d(din[0:0]),
927.si(scan_in),
928.so(scan_out),
929.q(dout[0:0])
930);
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951endmodule
952
953
954
955
956
957
958
959
960
961
962
963
964
965// any PARAMS parms go into naming of macro
966
967module l2t_dirout_dp_msff_macro__stack_20c__width_20 (
968 din,
969 clk,
970 en,
971 se,
972 scan_in,
973 siclk,
974 soclk,
975 pce_ov,
976 stop,
977 dout,
978 scan_out);
979wire l1clk;
980wire siclk_out;
981wire soclk_out;
982wire [18:0] so;
983
984 input [19:0] din;
985
986
987 input clk;
988 input en;
989 input se;
990 input scan_in;
991 input siclk;
992 input soclk;
993 input pce_ov;
994 input stop;
995
996
997
998 output [19:0] dout;
999
1000
1001 output scan_out;
1002
1003
1004
1005
1006cl_dp1_l1hdr_8x c0_0 (
1007.l2clk(clk),
1008.pce(en),
1009.aclk(siclk),
1010.bclk(soclk),
1011.l1clk(l1clk),
1012 .se(se),
1013 .pce_ov(pce_ov),
1014 .stop(stop),
1015 .siclk_out(siclk_out),
1016 .soclk_out(soclk_out)
1017);
1018dff #(20) d0_0 (
1019.l1clk(l1clk),
1020.siclk(siclk_out),
1021.soclk(soclk_out),
1022.d(din[19:0]),
1023.si({scan_in,so[18:0]}),
1024.so({so[18:0],scan_out}),
1025.q(dout[19:0])
1026);
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047endmodule
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061// any PARAMS parms go into naming of macro
1062
1063module l2t_dirout_dp_msff_macro__stack_16c__width_16 (
1064 din,
1065 clk,
1066 en,
1067 se,
1068 scan_in,
1069 siclk,
1070 soclk,
1071 pce_ov,
1072 stop,
1073 dout,
1074 scan_out);
1075wire l1clk;
1076wire siclk_out;
1077wire soclk_out;
1078wire [14:0] so;
1079
1080 input [15:0] din;
1081
1082
1083 input clk;
1084 input en;
1085 input se;
1086 input scan_in;
1087 input siclk;
1088 input soclk;
1089 input pce_ov;
1090 input stop;
1091
1092
1093
1094 output [15:0] dout;
1095
1096
1097 output scan_out;
1098
1099
1100
1101
1102cl_dp1_l1hdr_8x c0_0 (
1103.l2clk(clk),
1104.pce(en),
1105.aclk(siclk),
1106.bclk(soclk),
1107.l1clk(l1clk),
1108 .se(se),
1109 .pce_ov(pce_ov),
1110 .stop(stop),
1111 .siclk_out(siclk_out),
1112 .soclk_out(soclk_out)
1113);
1114dff #(16) d0_0 (
1115.l1clk(l1clk),
1116.siclk(siclk_out),
1117.soclk(soclk_out),
1118.d(din[15:0]),
1119.si({scan_in,so[14:0]}),
1120.so({so[14:0],scan_out}),
1121.q(dout[15:0])
1122);
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143endmodule
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153//
1154// invert macro
1155//
1156//
1157
1158
1159
1160
1161
1162module l2t_dirout_dp_inv_macro__width_1 (
1163 din,
1164 dout);
1165 input [0:0] din;
1166 output [0:0] dout;
1167
1168
1169
1170
1171
1172
1173inv #(1) d0_0 (
1174.in(din[0:0]),
1175.out(dout[0:0])
1176);
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186endmodule
1187
1188
1189
1190
1191
1192//
1193// comparator macro (output is 1 if both inputs are equal; 0 otherwise)
1194//
1195//
1196
1197
1198
1199
1200
1201module l2t_dirout_dp_cmp_macro__width_16 (
1202 din0,
1203 din1,
1204 dout);
1205 input [15:0] din0;
1206 input [15:0] din1;
1207 output dout;
1208
1209
1210
1211
1212
1213
1214cmp #(16) m0_0 (
1215.in0(din0[15:0]),
1216.in1(din1[15:0]),
1217.out(dout)
1218);
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229endmodule
1230
1231
1232
1233
1234
1235// general mux macro for pass-gate and and-or muxes with/wout priority encoders
1236// also for pass-gate with decoder
1237
1238
1239
1240
1241
1242// any PARAMS parms go into naming of macro
1243
1244module l2t_dirout_dp_mux_macro__mux_aonpe__ports_2__width_1 (
1245 din0,
1246 sel0,
1247 din1,
1248 sel1,
1249 dout);
1250wire buffout0;
1251wire buffout1;
1252
1253 input [0:0] din0;
1254 input sel0;
1255 input [0:0] din1;
1256 input sel1;
1257 output [0:0] dout;
1258
1259
1260
1261
1262
1263cl_dp1_muxbuff2_8x c0_0 (
1264 .in0(sel0),
1265 .in1(sel1),
1266 .out0(buffout0),
1267 .out1(buffout1)
1268);
1269mux2s #(1) d0_0 (
1270 .sel0(buffout0),
1271 .sel1(buffout1),
1272 .in0(din0[0:0]),
1273 .in1(din1[0:0]),
1274.dout(dout[0:0])
1275);
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289endmodule
1290
1291
1292//
1293// buff macro
1294//
1295//
1296
1297
1298
1299
1300
1301module l2t_dirout_dp_buff_macro__width_3 (
1302 din,
1303 dout);
1304 input [2:0] din;
1305 output [2:0] dout;
1306
1307
1308
1309
1310
1311
1312buff #(3) d0_0 (
1313.in(din[2:0]),
1314.out(dout[2:0])
1315);
1316
1317
1318
1319
1320
1321
1322
1323
1324endmodule
1325
1326
1327
1328