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