OpenCores
URL https://opencores.org/ocsvn/s1_core/s1_core/trunk

Subversion Repositories s1_core

[/] [s1_core/] [trunk/] [hdl/] [rtl/] [sparc_core/] [lsu_stb_ctl.v] - Blame information for rev 105

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 95 fafa1971
// ========== Copyright Header Begin ==========================================
2
// 
3
// OpenSPARC T1 Processor File: lsu_stb_ctl.v
4
// Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
5
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
6
// 
7
// The above named program is free software; you can redistribute it and/or
8
// modify it under the terms of the GNU General Public
9
// License version 2 as published by the Free Software Foundation.
10
// 
11
// The above named program is distributed in the hope that it will be 
12
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
13
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14
// General Public License for more details.
15
// 
16
// You should have received a copy of the GNU General Public
17
// License along with this work; if not, write to the Free Software
18
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
19
// 
20
// ========== Copyright Header End ============================================
21
///////////////////////////////////////////////////////////////////////
22
/*
23
//      Description:    Control for STB of LSU
24
//                              - Contains control for a single STB currently.
25
*/
26
////////////////////////////////////////////////////////////////////////
27
// Global header file includes
28
////////////////////////////////////////////////////////////////////////
29
// system level definition file which contains the /*
30
/* ========== Copyright Header Begin ==========================================
31
*
32
* OpenSPARC T1 Processor File: sys.h
33
* Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
34
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
35
*
36
* The above named program is free software; you can redistribute it and/or
37
* modify it under the terms of the GNU General Public
38
* License version 2 as published by the Free Software Foundation.
39
*
40
* The above named program is distributed in the hope that it will be
41
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
42
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
43
* General Public License for more details.
44
*
45
* You should have received a copy of the GNU General Public
46
* License along with this work; if not, write to the Free Software
47
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
48
*
49
* ========== Copyright Header End ============================================
50
*/
51
// -*- verilog -*-
52
////////////////////////////////////////////////////////////////////////
53
/*
54
//
55
// Description:         Global header file that contain definitions that
56
//                      are common/shared at the systme level
57
*/
58
////////////////////////////////////////////////////////////////////////
59
//
60
// Setting the time scale
61
// If the timescale changes, JP_TIMESCALE may also have to change.
62
`timescale      1ps/1ps
63
 
64
//
65
// JBUS clock
66
// =========
67
//
68
 
69
 
70
 
71
// Afara Link Defines
72
// ==================
73
 
74
// Reliable Link
75
 
76
 
77
 
78
 
79
// Afara Link Objects
80
 
81
 
82
// Afara Link Object Format - Reliable Link
83
 
84
 
85
 
86
 
87
 
88
 
89
 
90
 
91
 
92
 
93
// Afara Link Object Format - Congestion
94
 
95
 
96
 
97
 
98
 
99
 
100
 
101
 
102
 
103
 
104
 
105
// Afara Link Object Format - Acknowledge
106
 
107
 
108
 
109
 
110
 
111
 
112
 
113
 
114
 
115
 
116
 
117
// Afara Link Object Format - Request
118
 
119
 
120
 
121
 
122
 
123
 
124
 
125
 
126
 
127
 
128
 
129
 
130
 
131
 
132
 
133
 
134
 
135
// Afara Link Object Format - Message
136
 
137
 
138
 
139
// Acknowledge Types
140
 
141
 
142
 
143
 
144
// Request Types
145
 
146
 
147
 
148
 
149
 
150
// Afara Link Frame
151
 
152
 
153
 
154
//
155
// UCB Packet Type
156
// ===============
157
//
158
 
159
 
160
 
161
 
162
 
163
 
164
 
165
 
166
 
167
 
168
 
169
 
170
 
171
 
172
 
173
 
174
 
175
//
176
// UCB Data Packet Format
177
// ======================
178
//
179
 
180
 
181
 
182
 
183
 
184
 
185
 
186
 
187
 
188
 
189
 
190
 
191
 
192
 
193
 
194
 
195
 
196
 
197
 
198
 
199
 
200
 
201
 
202
 
203
 
204
 
205
 
206
 
207
 
208
 
209
// Size encoding for the UCB_SIZE_HI/LO field
210
// 000 - byte
211
// 001 - half-word
212
// 010 - word
213
// 011 - double-word
214
// 111 - quad-word
215
 
216
 
217
 
218
 
219
 
220
 
221
 
222
//
223
// UCB Interrupt Packet Format
224
// ===========================
225
//
226
 
227
 
228
 
229
 
230
 
231
 
232
 
233
 
234
 
235
 
236
//`define UCB_THR_HI             9      // (6) cpu/thread ID shared with
237
//`define UCB_THR_LO             4             data packet format
238
//`define UCB_PKT_HI             3      // (4) packet type shared with
239
//`define UCB_PKT_LO             0      //     data packet format
240
 
241
 
242
 
243
 
244
 
245
 
246
 
247
//
248
// FCRAM Bus Widths
249
// ================
250
//
251
 
252
 
253
 
254
 
255
 
256
 
257
//
258
// ENET clock periods
259
// ==================
260
//
261
 
262
 
263
 
264
 
265
//
266
// JBus Bridge defines
267
// =================
268
//
269
 
270
 
271
 
272
 
273
 
274
 
275
 
276
 
277
 
278
 
279
 
280
//
281
// PCI Device Address Configuration
282
// ================================
283
//
284
 
285
 
286
 
287
 
288
 
289
 
290
 
291
 
292
 
293
 
294
 
295
 
296
 
297
 
298
 
299
 
300
 
301
 
302
 
303
 
304
 
305
 
306
 
307
                                        // time scale definition
308
 
309
/*
310
/* ========== Copyright Header Begin ==========================================
311
*
312
* OpenSPARC T1 Processor File: iop.h
313
* Copyright (c) 2006 Sun Microsystems, Inc.  All Rights Reserved.
314
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
315
*
316
* The above named program is free software; you can redistribute it and/or
317
* modify it under the terms of the GNU General Public
318
* License version 2 as published by the Free Software Foundation.
319
*
320
* The above named program is distributed in the hope that it will be
321
* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
322
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
323
* General Public License for more details.
324
*
325
* You should have received a copy of the GNU General Public
326
* License along with this work; if not, write to the Free Software
327
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
328
*
329
* ========== Copyright Header End ============================================
330
*/
331
//-*- verilog -*-
332
////////////////////////////////////////////////////////////////////////
333
/*
334
//
335
//  Description:        Global header file that contain definitions that
336
//                      are common/shared at the IOP chip level
337
*/
338
////////////////////////////////////////////////////////////////////////
339
 
340
 
341
// Address Map Defines
342
// ===================
343
 
344
 
345
 
346
 
347
// CMP space
348
 
349
 
350
 
351
// IOP space
352
 
353
 
354
 
355
 
356
                               //`define ENET_ING_CSR     8'h84
357
                               //`define ENET_EGR_CMD_CSR 8'h85
358
 
359
 
360
 
361
 
362
 
363
 
364
 
365
 
366
 
367
 
368
 
369
 
370
 
371
 
372
 
373
// L2 space
374
 
375
 
376
 
377
// More IOP space
378
 
379
 
380
 
381
 
382
 
383
//Cache Crossbar Width and Field Defines
384
//======================================
385
 
386
 
387
 
388
 
389
 
390
 
391
 
392
 
393
 
394
 
395
 
396
 
397
 
398
 
399
 
400
 
401
 
402
 
403
 
404
 
405
 
406
 
407
 
408
 
409
 
410
 
411
 
412
 
413
 
414
 
415
 
416
 
417
 
418
 
419
 
420
 
421
 
422
 
423
 
424
 
425
 
426
 
427
 
428
 
429
 
430
//bits 133:128 are shared by different fields
431
//for different packet types.
432
 
433
 
434
 
435
 
436
 
437
 
438
 
439
 
440
 
441
 
442
 
443
 
444
 
445
 
446
 
447
 
448
 
449
 
450
 
451
 
452
 
453
 
454
 
455
 
456
 
457
 
458
 
459
 
460
 
461
 
462
 
463
 
464
 
465
 
466
 
467
 
468
 
469
 
470
 
471
 
472
 
473
 
474
 
475
 
476
 
477
 
478
 
479
 
480
 
481
 
482
 
483
 
484
 
485
 
486
 
487
 
488
 
489
 
490
 
491
 
492
 
493
 
494
//End cache crossbar defines
495
 
496
 
497
// Number of COS supported by EECU 
498
 
499
 
500
 
501
// 
502
// BSC bus sizes
503
// =============
504
//
505
 
506
// General
507
 
508
 
509
 
510
 
511
// CTags
512
 
513
 
514
 
515
 
516
 
517
 
518
 
519
 
520
 
521
 
522
 
523
 
524
 
525
// reinstated temporarily
526
 
527
 
528
 
529
 
530
// CoS
531
 
532
 
533
 
534
 
535
 
536
 
537
// L2$ Bank
538
 
539
 
540
 
541
// L2$ Req
542
 
543
 
544
 
545
 
546
 
547
 
548
 
549
 
550
 
551
 
552
 
553
 
554
 
555
// L2$ Ack
556
 
557
 
558
 
559
 
560
 
561
 
562
 
563
 
564
// Enet Egress Command Unit
565
 
566
 
567
 
568
 
569
 
570
 
571
 
572
 
573
 
574
 
575
 
576
 
577
 
578
 
579
// Enet Egress Packet Unit
580
 
581
 
582
 
583
 
584
 
585
 
586
 
587
 
588
 
589
 
590
 
591
 
592
 
593
// This is cleaved in between Egress Datapath Ack's
594
 
595
 
596
 
597
 
598
 
599
 
600
 
601
 
602
// Enet Egress Datapath
603
 
604
 
605
 
606
 
607
 
608
 
609
 
610
 
611
 
612
 
613
 
614
 
615
 
616
 
617
 
618
 
619
// In-Order / Ordered Queue: EEPU
620
// Tag is: TLEN, SOF, EOF, QID = 15
621
 
622
 
623
 
624
 
625
 
626
 
627
// Nack + Tag Info + CTag
628
 
629
 
630
 
631
 
632
// ENET Ingress Queue Management Req
633
 
634
 
635
 
636
 
637
 
638
 
639
 
640
 
641
 
642
 
643
 
644
 
645
// ENET Ingress Queue Management Ack
646
 
647
 
648
 
649
 
650
 
651
 
652
 
653
 
654
// Enet Ingress Packet Unit
655
 
656
 
657
 
658
 
659
 
660
 
661
 
662
 
663
 
664
 
665
 
666
 
667
// ENET Ingress Packet Unit Ack
668
 
669
 
670
 
671
 
672
 
673
 
674
 
675
// In-Order / Ordered Queue: PCI
676
// Tag is: CTAG
677
 
678
 
679
 
680
 
681
 
682
// PCI-X Request
683
 
684
 
685
 
686
 
687
 
688
 
689
 
690
 
691
 
692
 
693
 
694
// PCI_X Acknowledge
695
 
696
 
697
 
698
 
699
 
700
 
701
 
702
 
703
 
704
 
705
 
706
//
707
// BSC array sizes
708
//================
709
//
710
 
711
 
712
 
713
 
714
 
715
 
716
 
717
 
718
 
719
 
720
 
721
 
722
// ECC syndrome bits per memory element
723
 
724
 
725
 
726
 
727
//
728
// BSC Port Definitions
729
// ====================
730
//
731
// Bits 7 to 4 of curr_port_id
732
 
733
 
734
 
735
 
736
 
737
 
738
 
739
 
740
// Number of ports of each type
741
 
742
 
743
// Bits needed to represent above
744
 
745
 
746
// How wide the linked list pointers are
747
// 60b for no payload (2CoS)
748
// 80b for payload (2CoS)
749
 
750
//`define BSC_OBJ_PTR   80
751
//`define BSC_HD1_HI    69
752
//`define BSC_HD1_LO    60
753
//`define BSC_TL1_HI    59
754
//`define BSC_TL1_LO    50
755
//`define BSC_CT1_HI    49
756
//`define BSC_CT1_LO    40
757
//`define BSC_HD0_HI    29
758
//`define BSC_HD0_LO    20
759
//`define BSC_TL0_HI    19
760
//`define BSC_TL0_LO    10
761
//`define BSC_CT0_HI     9
762
//`define BSC_CT0_LO     0
763
 
764
 
765
 
766
 
767
 
768
 
769
 
770
 
771
 
772
 
773
 
774
 
775
 
776
 
777
 
778
 
779
 
780
 
781
 
782
 
783
 
784
 
785
 
786
 
787
 
788
 
789
 
790
 
791
 
792
 
793
 
794
 
795
 
796
 
797
// I2C STATES in DRAMctl
798
 
799
 
800
 
801
 
802
 
803
 
804
 
805
//
806
// IOB defines
807
// ===========
808
//
809
 
810
 
811
 
812
 
813
 
814
 
815
 
816
 
817
 
818
 
819
 
820
 
821
 
822
 
823
 
824
 
825
 
826
 
827
 
828
//`define IOB_INT_STAT_WIDTH   32
829
//`define IOB_INT_STAT_HI      31
830
//`define IOB_INT_STAT_LO       0
831
 
832
 
833
 
834
 
835
 
836
 
837
 
838
 
839
 
840
 
841
 
842
 
843
 
844
 
845
 
846
 
847
 
848
 
849
 
850
 
851
 
852
 
853
 
854
 
855
 
856
 
857
 
858
 
859
 
860
 
861
 
862
 
863
 
864
 
865
 
866
 
867
 
868
 
869
 
870
 
871
 
872
 
873
 
874
 
875
 
876
 
877
 
878
 
879
 
880
// fixme - double check address mapping
881
// CREG in `IOB_INT_CSR space
882
 
883
 
884
 
885
 
886
 
887
 
888
 
889
 
890
 
891
 
892
// CREG in `IOB_MAN_CSR space
893
 
894
 
895
 
896
 
897
 
898
 
899
 
900
 
901
 
902
 
903
 
904
 
905
 
906
 
907
 
908
 
909
 
910
 
911
 
912
 
913
 
914
 
915
 
916
 
917
 
918
 
919
 
920
 
921
 
922
 
923
 
924
 
925
 
926
 
927
 
928
 
929
 
930
// Address map for TAP access of SPARC ASI
931
 
932
 
933
 
934
 
935
 
936
 
937
 
938
 
939
 
940
 
941
 
942
 
943
 
944
//
945
// CIOP UCB Bus Width
946
// ==================
947
//
948
//`define IOB_EECU_WIDTH       16  // ethernet egress command
949
//`define EECU_IOB_WIDTH       16
950
 
951
//`define IOB_NRAM_WIDTH       16  // NRAM (RLDRAM previously)
952
//`define NRAM_IOB_WIDTH        4
953
 
954
 
955
 
956
 
957
//`define IOB_ENET_ING_WIDTH   32  // ethernet ingress
958
//`define ENET_ING_IOB_WIDTH    8
959
 
960
//`define IOB_ENET_EGR_WIDTH    4  // ethernet egress
961
//`define ENET_EGR_IOB_WIDTH    4
962
 
963
//`define IOB_ENET_MAC_WIDTH    4  // ethernet MAC
964
//`define ENET_MAC_IOB_WIDTH    4
965
 
966
 
967
 
968
 
969
//`define IOB_BSC_WIDTH         4  // BSC
970
//`define BSC_IOB_WIDTH         4
971
 
972
 
973
 
974
 
975
 
976
 
977
 
978
//`define IOB_CLSP_WIDTH        4  // clk spine unit
979
//`define CLSP_IOB_WIDTH        4
980
 
981
 
982
 
983
 
984
 
985
//
986
// CIOP UCB Buf ID Type
987
// ====================
988
//
989
 
990
 
991
 
992
//
993
// Interrupt Device ID
994
// ===================
995
//
996
// Caution: DUMMY_DEV_ID has to be 9 bit wide
997
//          for fields to line up properly in the IOB.
998
 
999
 
1000
 
1001
//
1002
// Soft Error related definitions 
1003
// ==============================
1004
//
1005
 
1006
 
1007
 
1008
//
1009
// CMP clock
1010
// =========
1011
//
1012
 
1013
 
1014
 
1015
 
1016
//
1017
// NRAM/IO Interface
1018
// =================
1019
//
1020
 
1021
 
1022
 
1023
 
1024
 
1025
 
1026
 
1027
 
1028
 
1029
 
1030
//
1031
// NRAM/ENET Interface
1032
// ===================
1033
//
1034
 
1035
 
1036
 
1037
 
1038
 
1039
 
1040
 
1041
//
1042
// IO/FCRAM Interface
1043
// ==================
1044
//
1045
 
1046
 
1047
 
1048
 
1049
 
1050
 
1051
//
1052
// PCI Interface
1053
// ==================
1054
// Load/store size encodings
1055
// -------------------------
1056
// Size encoding
1057
// 000 - byte
1058
// 001 - half-word
1059
// 010 - word
1060
// 011 - double-word
1061
// 100 - quad
1062
 
1063
 
1064
 
1065
 
1066
 
1067
 
1068
//
1069
// JBI<->SCTAG Interface
1070
// =======================
1071
// Outbound Header Format
1072
 
1073
 
1074
 
1075
 
1076
 
1077
 
1078
 
1079
 
1080
 
1081
 
1082
 
1083
 
1084
 
1085
 
1086
 
1087
 
1088
 
1089
 
1090
 
1091
 
1092
 
1093
 
1094
 
1095
 
1096
 
1097
 
1098
 
1099
// Inbound Header Format
1100
 
1101
 
1102
 
1103
 
1104
 
1105
 
1106
 
1107
 
1108
 
1109
 
1110
 
1111
 
1112
 
1113
 
1114
 
1115
 
1116
 
1117
 
1118
 
1119
 
1120
//
1121
// JBI->IOB Mondo Header Format
1122
// ============================
1123
//
1124
 
1125
 
1126
 
1127
 
1128
 
1129
 
1130
 
1131
 
1132
 
1133
 
1134
 
1135
 
1136
 
1137
 
1138
// JBI->IOB Mondo Bus Width/Cycle
1139
// ==============================
1140
// Cycle  1 Header[15:8]
1141
// Cycle  2 Header[ 7:0]
1142
// Cycle  3 J_AD[127:120]
1143
// Cycle  4 J_AD[119:112]
1144
// .....
1145
// Cycle 18 J_AD[  7:  0]
1146
 
1147
 
1148
////////////////////////////////////////////////////////////////////////
1149
// Local header file includes / local defines
1150
////////////////////////////////////////////////////////////////////////
1151
 
1152
module lsu_stb_ctl (/*AUTOARG*/
1153
   // Outputs
1154
   so, stb_clk_en_l, stb_crnt_ack_id, lsu_stb_empty, stb_l2bnk_addr,
1155
   stb_atm_rq_type, stb_wrptr, stb_rd_for_pcx, stb_pcx_rptr,
1156
   stb_wrptr_prev, stb_state_ced_mod, stb_state_vld_out,
1157
   lsu_stbcnt, stb_rmo_st_issue, stb_full, st_pcx_rq_kill_w2,
1158
   // Inputs
1159
   rclk, grst_l, arst_l, si, se, thrd_en_g, cpx_st_ack_tid,
1160
   pcx_rq_for_stb, st_ack_dq_stb, stb_flush_st_g, stb_cam_wvld_m,
1161
   lsu_blk_st_m, tlb_pgnum_g, pcx_req_squash, flshinst_rst,
1162
   lsu_stbctl_flush_pipe_w, flsh_inst_m, stb_state_si_0,
1163
   stb_state_si_1, stb_state_si_2, stb_state_si_3, stb_state_si_4,
1164
   stb_state_si_5, stb_state_si_6, stb_state_si_7, stb_state_rtype_0,
1165
   stb_state_rtype_1, stb_state_rtype_2, stb_state_rtype_3,
1166
   stb_state_rtype_4, stb_state_rtype_5, stb_state_rtype_6,
1167
   stb_state_rtype_7, stb_state_rmo, stb_alt_sel, stb_alt_addr,
1168
   lsu_dtlb_bypass_e, tlb_cam_hit, lsu_outstanding_rmo_st_max,
1169
   st_dtlb_perr_g
1170
   ) ;
1171
 
1172
 
1173
   input rclk ;
1174
   input grst_l;
1175
   input arst_l;
1176
 
1177
   input si;
1178
   input se;
1179
   output so;
1180
 
1181
input           thrd_en_g ;
1182
input           cpx_st_ack_tid ;        // st ack for given thread
1183
input           pcx_rq_for_stb ;        // stb's st selected for read for pcx
1184
input           st_ack_dq_stb ;         // store dequeued from stb
1185
input           stb_flush_st_g ;        // flush stb write in cycle g
1186
input           stb_cam_wvld_m ;        // stb write in cycle m
1187
 
1188
input           lsu_blk_st_m ;          // blk st wr
1189
 
1190
//input  [7:6]    lsu_ldst_va_m ;         // staging purposes
1191
//input  [2:1]    lsu_st_rq_type_m ;    // st request type
1192
//input         lsu_st_rmo_m ;          // rmo store in m-stage
1193
 
1194
input  [39:37]  tlb_pgnum_g ;           // ldst access to io 
1195
input           pcx_req_squash ;        // pcx req is squashed
1196
 
1197
input           flshinst_rst ;          // reset by flush inst on return
1198
input           lsu_stbctl_flush_pipe_w ;
1199
 
1200
   input flsh_inst_m;
1201
 
1202
 
1203
//from stb_ctldp
1204
   input [3:2] stb_state_si_0;
1205
   input [3:2] stb_state_si_1;
1206
   input [3:2] stb_state_si_2;
1207
   input [3:2] stb_state_si_3;
1208
   input [3:2] stb_state_si_4;
1209
   input [3:2] stb_state_si_5;
1210
   input [3:2] stb_state_si_6;
1211
   input [3:2] stb_state_si_7;
1212
 
1213
   input [2:1] stb_state_rtype_0;
1214
   input [2:1] stb_state_rtype_1;
1215
   input [2:1] stb_state_rtype_2;
1216
   input [2:1] stb_state_rtype_3;
1217
   input [2:1] stb_state_rtype_4;
1218
   input [2:1] stb_state_rtype_5;
1219
   input [2:1] stb_state_rtype_6;
1220
   input [2:1] stb_state_rtype_7;
1221
 
1222
   //input [7:0] stb_state_io;
1223
   input [7:0] stb_state_rmo;
1224
 
1225
   input       stb_alt_sel ;
1226
   input [2:0] stb_alt_addr ;
1227
 
1228
input          lsu_dtlb_bypass_e;
1229
input          tlb_cam_hit;             // m-cycle
1230
 
1231
input           st_dtlb_perr_g ;        // enabled st dtlb parity err.
1232
 
1233
   //output      stb_non_l2bnk;
1234
   output [7:0] stb_clk_en_l;
1235
 
1236
output  [2:0]   stb_crnt_ack_id ;       // ackid for current outstanding st.
1237
 
1238
output          lsu_stb_empty ;         // stb is empty
1239
 
1240
output  [2:0]    stb_l2bnk_addr ;        // l2bank address.      
1241
output  [2:1]   stb_atm_rq_type ;       // identify atomic transaction
1242
 
1243
output  [2:0]    stb_wrptr ;             // write ptr - per thread
1244
//output        [2:0]   stb_dfq_rptr ;          // rptr for dfq - per thread
1245
output          stb_rd_for_pcx ;        // rd vld for pcx - per thread
1246
output  [2:0]    stb_pcx_rptr ;          // rptr for pcx - per thread
1247
output  [2:0]    stb_wrptr_prev ;
1248
output  [7:0]   stb_state_ced_mod ;
1249
output  [7:0]   stb_state_vld_out ;
1250
 
1251
output  [3:0]    lsu_stbcnt ;    // # of vld entries
1252
 
1253
output          stb_rmo_st_issue ;              // rmo store issued from thread's stb.
1254
 
1255
output          stb_full ;
1256
output          st_pcx_rq_kill_w2 ;
1257
 
1258
   input  lsu_outstanding_rmo_st_max;
1259
 
1260
   wire [7:0] stb_state_rst;
1261
 
1262
   wire [7:0] stb_state_vld;
1263
   wire [7:0] stb_state_vld_din;
1264
   wire [7:0] stb_state_vld_set;
1265
 
1266
   wire [7:0] stb_state_ced;
1267
   wire [7:0] stb_state_ced_din;
1268
   wire [7:0] stb_state_ced_set;
1269
 
1270
   wire [7:0] stb_state_ack;
1271
   wire [7:0] stb_state_ack_din;
1272
   wire [7:0] stb_state_ack_set;
1273
 
1274
   wire [3:2] stb_state_si_0;   // removed 8x4 bits
1275
   wire [3:2] stb_state_si_1;
1276
   wire [3:2] stb_state_si_2;
1277
   wire [3:2] stb_state_si_3;
1278
   wire [3:2] stb_state_si_4;
1279
   wire [3:2] stb_state_si_5;
1280
   wire [3:2] stb_state_si_6;
1281
   wire [3:2] stb_state_si_7;
1282
/*
1283
   wire [3:2] stb_state_si_0_din;
1284
   wire [3:2] stb_state_si_1_din;
1285
   wire [3:2] stb_state_si_2_din;
1286
   wire [3:2] stb_state_si_3_din;
1287
   wire [3:2] stb_state_si_4_din;
1288
   wire [3:2] stb_state_si_5_din;
1289
   wire [3:2] stb_state_si_6_din;
1290
   wire [3:2] stb_state_si_7_din;
1291
*/
1292
   wire [7:0] stb_state_io;
1293
   wire [7:0] stb_state_io_din;
1294
 
1295
   wire [7:0] stb_state_rmo;
1296
//   wire [7:0] stb_state_rmo_din;
1297
 
1298
   wire [2:1] stb_state_rtype_0; // rm 8x1 bits
1299
   wire [2:1] stb_state_rtype_1;
1300
   wire [2:1] stb_state_rtype_2;
1301
   wire [2:1] stb_state_rtype_3;
1302
   wire [2:1] stb_state_rtype_4;
1303
   wire [2:1] stb_state_rtype_5;
1304
   wire [2:1] stb_state_rtype_6;
1305
   wire [2:1] stb_state_rtype_7;
1306
/*
1307
   wire [2:1] stb_state_rtype_0_din;
1308
   wire [2:1] stb_state_rtype_1_din;
1309
   wire [2:1] stb_state_rtype_2_din;
1310
   wire [2:1] stb_state_rtype_3_din;
1311
   wire [2:1] stb_state_rtype_4_din;
1312
   wire [2:1] stb_state_rtype_5_din;
1313
   wire [2:1] stb_state_rtype_6_din;
1314
   wire [2:1] stb_state_rtype_7_din;
1315
*/
1316
   wire [2:0] stb_l2bnk_addr;
1317
   wire [2:1] stb_atm_rq_type;
1318
 
1319
/*AUTOWIRE*/
1320
// Beginning of automatic wires (for undeclared instantiated-module outputs)
1321
// End of automatics
1322
wire    [3:0]    stb_wptr_prev ;
1323
wire            stb_rptr_dfq_en ;
1324
wire            update_stb_wptr ;
1325
//wire  [1:0]   st_enc_set_way ;
1326
wire    [3:0]    stb_rptr_dfq_new, stb_rptr_dfq ;
1327
wire    valid_entry_for_pcx ;
1328
wire    [7:0]    dec_wptr_g, dec_rptr_dfq, dec_rptr_pcx, dec_ackptr ;
1329
wire    [7:0]    dec_wptr_m ;
1330
//wire          stb_wvld_g ;
1331
//wire  [5:0]   stb_inv_set0,stb_inv_set1;
1332
//wire  [5:0]   stb_inv_set2,stb_inv_set3;
1333
 
1334
wire            ack_vld ;
1335
wire    [3:0]    stb_wptr_new, stb_wptr ;
1336
wire            stb_cam_wvld_g ;
1337
wire    [7:0]    inflight_vld_g ;
1338
wire            dq_vld_d1,dq_vld_d2 ;
1339
wire    [7:0]    dqptr_d1,dqptr_d2;
1340
wire            pcx_rq_for_stb_d1 ;
1341
wire            pcx_rq_for_stb_d2,pcx_req_squash_d2 ;
1342
 
1343
   wire       clk;
1344
   assign     clk = rclk;
1345
 
1346
   wire       rst_l;
1347
   wire       stb_ctl_rst_l;
1348
 
1349
   dffrl_async rstff(.din (grst_l),
1350
                     .q   (stb_ctl_rst_l),
1351
                     .clk (clk), .se(se), .si(), .so(),
1352
                     .rst_l (arst_l));
1353
   assign     rst_l = stb_ctl_rst_l;
1354
 
1355
//=========================================================================================
1356
//      RESET
1357
//=========================================================================================
1358
 
1359
// A flush will reset the vld bit in the stb - it should be the only one as
1360
// the stb has drained.
1361
 
1362
   wire   reset;
1363
   //waiting int 3.0
1364
   //assign rst_l = stb_ctl_rst_l;
1365
 
1366
   assign reset = ~rst_l | flshinst_rst ;
1367
 
1368
//=========================================================================================
1369
//      STB READ FOR PCX
1370
//=========================================================================================
1371
 
1372
// Assumes that an entry can be sent to the pcx iff the next oldest
1373
// entry has received its ack. This pointer will not look for L2Bank
1374
// overlap as the ptr calculation is much more complicated.
1375
 
1376
// (1)--> Entry must be valid and not already sent to pcx.
1377
//              Includes squashing of speculative req
1378
// (2)--> Previous in linked list must be valid and acked (or invalid)
1379
// (3)--> This is to break the deadlock between oldest and youngest
1380
// entries when queue is full. Oldest entry can always exit to pcx.
1381
 
1382
// This vector is one-hot. Assumption is that stb is a circular queue.
1383
// deadlock has to be broken between oldest and youngest entry when the
1384
// queue is full. The dfq ptr is used to mark oldest
1385
 
1386
dff #(2)  rq_stgd1       (
1387
        .din    ({pcx_rq_for_stb_d1,pcx_req_squash}),
1388
        .q      ({pcx_rq_for_stb_d2,pcx_req_squash_d2}),
1389
        .clk    (clk),
1390
        .se     (se), .si     (), .so ()
1391
        );
1392
 
1393
wire    ffu_bst_wr_g ;
1394
dff #(1)  ff_bstg       (
1395
        .din    (lsu_blk_st_m),
1396
        .q      (ffu_bst_wr_g),
1397
        .clk    (clk),
1398
        .se     (se), .si     (), .so ()
1399
        );
1400
 
1401
wire    full_flush_st_g ;
1402
// flush_pipe does not apply to blk st wr.
1403
assign  full_flush_st_g = (stb_flush_st_g | (lsu_stbctl_flush_pipe_w & ~ffu_bst_wr_g)) & stb_cam_wvld_g ;
1404
 
1405
// timing fix: 5/6 -  begin
1406
// qual dec_rptr_pcx w/ tlb camhit and in qctl1 move kill qual after store pick
1407
wire      tlb_cam_hit_g, tlb_hit_g;
1408
wire      dtlb_bypass_m, dtlb_bypass_g ;
1409
 
1410
dff #(1)  ff_dtlb_bypass_m       (
1411
        .din    (lsu_dtlb_bypass_e),
1412
        .q      (dtlb_bypass_m),
1413
        .clk    (clk),
1414
        .se     (se), .si     (), .so ()
1415
        );
1416
 
1417
dff #(1)  ff_dtlb_bypass_g       (
1418
        .din    (dtlb_bypass_m),
1419
        .q      (dtlb_bypass_g),
1420
        .clk    (clk),
1421
        .se     (se), .si     (), .so ()
1422
        );
1423
 
1424
dff #(1)  ff_tlb_cam_hit_g       (
1425
        .din    (tlb_cam_hit),
1426
        .q      (tlb_cam_hit_g),
1427
        .clk    (clk),
1428
        .se     (se), .si     (), .so ()
1429
        );
1430
 
1431
assign  tlb_hit_g  =  tlb_cam_hit_g | dtlb_bypass_g | ffu_bst_wr_g; //bug6406/eco6610
1432
// timing fix: 5/6 -  end
1433
 
1434
// st rq can now speculate on flush
1435
assign  inflight_vld_g[7:0] =
1436
        dec_wptr_g[7:0] & {8{stb_cam_wvld_g & thrd_en_g}} ;
1437
        // the later term is for an inflight ld which gets squashed. It
1438
        // should not effect dec_rptr_pcx. This is related to a timing fix
1439
        // where the flush is taken out of inflight_vld_g.
1440
//assign        inflight_vld_g[7:0] = dec_wptr_g[7:0] & {8{stb_wvld_g & thrd_en_g}} ;
1441
 
1442
//timing fix: 5/6/03 - kill inflight vld if tlb_hit_g=0; dec_rptr_pcx will be 0 and hence kill_w2 will be 0
1443
// leave inflight_vld_g as is, since it is used to set squash - which eventually reset state_vld
1444
wire [7:0] inflight_issue_g_tmp ;
1445
 
1446
assign  inflight_issue_g_tmp[7:0]  =  inflight_vld_g[7:0] & {8{tlb_hit_g}};
1447
 
1448
wire [7:0] inflight_issue_g ;
1449
assign  inflight_issue_g[7:0] =
1450
        inflight_issue_g_tmp[7:0] & {8{~(|(stb_state_vld[7:0] & ~stb_state_ack[7:0]))}};
1451
        //inflight_vld_g[7:0] & {8{~(|(stb_state_vld[7:0] & ~stb_state_ack[7:0]))}};  // timing fix : 5/6
1452
 
1453
 
1454
// Modified state ced includes in-flight pcx sel which is not squashed.
1455
// Timing : pcx_req_squash delayed. A st that is squashed can then make a request 3-cycles
1456
// later.
1457
wire    skid_ced, st_vld_rq_d2 ;
1458
assign  st_vld_rq_d2 = pcx_rq_for_stb_d2 & ~pcx_req_squash_d2 ;
1459
assign  skid_ced = pcx_rq_for_stb_d1 | st_vld_rq_d2 ;
1460
// For squashing rawp.
1461
assign  stb_state_ced_mod[7:0] =
1462
        ((dec_ackptr[7:0] & {8{st_vld_rq_d2}}) | stb_state_ced[7:0]) ;
1463
 
1464
//RMO st counter satuated
1465
 
1466
wire  rmo_st_satuated;
1467
//dff #(1) rmo_st_satuated_ff  (
1468
//    .din (lsu_outstanding_rmo_st_max),
1469
//    .q   (rmo_st_satuated),
1470
//    .clk    (clk),
1471
//    .se     (se), .si     (), .so ()
1472
//);
1473
 
1474
   assign rmo_st_satuated  =  lsu_outstanding_rmo_st_max;
1475
 
1476
wire    [7:0]    stb_state_ced_spec ;
1477
assign  stb_state_ced_spec[7:0] =
1478
        ((dec_ackptr[7:0] & {8{skid_ced}}) | stb_state_ced[7:0]) |
1479
   (stb_state_rmo[7:0] & {8{rmo_st_satuated}});
1480
 
1481
assign  dec_rptr_pcx[7:0] =
1482
                 (inflight_issue_g[7:0] | stb_state_vld[7:0])
1483
                 //(inflight_vld_g[7:0] | stb_state_vld[7:0]) 
1484
                        & ~stb_state_ced_spec[7:0] &     // -->(1)
1485
                (({stb_state_vld[6:0],stb_state_vld[7]} &        // 
1486
                  {stb_state_ack[6:0],stb_state_ack[7]}) // 
1487
                | ~{stb_state_vld[6:0],stb_state_vld[7]} // -->(2)
1488
                | dec_rptr_dfq[7:0]) ;                           // -->(3)
1489
 
1490
 
1491
// There should be only one such entry i.e., the vector is 1-hot.
1492
// Incorporate st dtlb parity error. It should not propagate to memory.
1493
// Tracing full_flush_st_g, note that the pointers will not be restored
1494
// correctly for timing reasons - anyway, this is considered unrecoverable.
1495
// Monitor !
1496
assign valid_entry_for_pcx = |dec_rptr_pcx[7:0] ;
1497
 
1498
wire    any_inflight_iss_g,any_inflight_iss_w2 ;
1499
assign  any_inflight_iss_g = |inflight_vld_g[7:0] ;
1500
wire    pick_inflight_iss_g,pick_inflight_iss_w2 ;
1501
assign  pick_inflight_iss_g = |(dec_rptr_pcx[7:0] & inflight_issue_g[7:0]) ;
1502
 
1503
wire    st_pcx_rq_kill_g ;
1504
assign  st_pcx_rq_kill_g = pick_inflight_iss_g & full_flush_st_g ;
1505
//assign        st_pcx_rq_kill_g = (|(dec_rptr_pcx[7:0] & inflight_issue_g[7:0])) & full_flush_st_g ;
1506
 
1507
wire    st_vld_squash_g,st_vld_squash_w2 ;
1508
assign  st_vld_squash_g = any_inflight_iss_g & full_flush_st_g ;
1509
//assign        st_vld_squash_g = (|inflight_vld_g[7:0]) & full_flush_st_g ;
1510
 
1511
wire st_pcx_rq_kill_tmp,st_vld_squash_tmp ;
1512
wire st_dtlb_perr_w2 ;
1513
dff #(5)  stkill_stgd1       (
1514
        .din    ({st_pcx_rq_kill_g,st_vld_squash_g,
1515
                any_inflight_iss_g,pick_inflight_iss_g,st_dtlb_perr_g}),
1516
        .q      ({st_pcx_rq_kill_tmp,st_vld_squash_tmp,
1517
                any_inflight_iss_w2,pick_inflight_iss_w2,st_dtlb_perr_w2}),
1518
        .clk    (clk),
1519
        .se     (se), .si     (), .so ()
1520
        );
1521
 
1522
assign  st_pcx_rq_kill_w2 =
1523
                st_pcx_rq_kill_tmp |
1524
                (pick_inflight_iss_w2 & st_dtlb_perr_w2);
1525
 
1526
assign  st_vld_squash_w2  =
1527
                st_vld_squash_tmp  |
1528
                (any_inflight_iss_w2 & st_dtlb_perr_w2);
1529
 
1530
 
1531
// Encode pcx rptr
1532
// ** Timing : Could put flop in rwctl. 
1533
assign stb_pcx_rptr[0] = dec_rptr_pcx[1] | dec_rptr_pcx[3] | dec_rptr_pcx[5] | dec_rptr_pcx[7] ;
1534
assign stb_pcx_rptr[1] = dec_rptr_pcx[2] | dec_rptr_pcx[3] | dec_rptr_pcx[6] | dec_rptr_pcx[7] ;
1535
assign stb_pcx_rptr[2] = dec_rptr_pcx[4] | dec_rptr_pcx[5] | dec_rptr_pcx[6] | dec_rptr_pcx[7] ;
1536
 
1537
// This is used in qctl.
1538
// Timing : flopped in qctl before use.
1539
assign  stb_rd_for_pcx = valid_entry_for_pcx ;
1540
 
1541
//=========================================================================================
1542
//      STB READ FOR DFQ
1543
//=========================================================================================
1544
 
1545
 
1546
// Read Pointer to generate the next available entry for the dfq.
1547
// Timing : This should be fine as st_ack_dq_stb is decode out of dfq byp flop.
1548
wire    incr_dfq_ptr ;
1549
// stb_rmo_st_issue added for rmo st bug - if critical then add flop.
1550
 
1551
// bug2983: incr_dfq_ptr is set by both st_ack_dq_stb and stb_rmo_st_issue
1552
//          in the same cycle. this results in losing a dequeue.
1553
//
1554
//          fix is to detect rmo store after regular store. issue the rmo
1555
//          store and dont reset the rmo store vld until the dequeue of the older
1556
//          regular store.
1557
 
1558
wire    stb_dq_rmo ;
1559
 
1560
//assign        incr_dfq_ptr = st_ack_dq_stb | stb_rmo_st_issue ; //bug 2983
1561
assign  incr_dfq_ptr = st_ack_dq_stb | stb_dq_rmo ;
1562
 
1563
assign  stb_rptr_dfq_new[3:0]    =       stb_rptr_dfq[3:0]  + {3'b0, incr_dfq_ptr} ;
1564
//assign        stb_rptr_dfq_new[3:0]   =       stb_rptr_dfq[3:0]  + {3'b0, st_ack_dq_stb} ;
1565
 
1566
assign stb_rptr_dfq_en = st_ack_dq_stb | incr_dfq_ptr ;
1567
 
1568
dffre #(4)  rptr_d      (
1569
        .din            (stb_rptr_dfq_new[3:0]),.q       (stb_rptr_dfq[3:0]),
1570
        .en             (stb_rptr_dfq_en),      .rst    (reset),
1571
        .clk            (clk),
1572
        .se             (se),   .si     (), .so ()
1573
        );
1574
 
1575
//assign        stb_dfq_rptr[2:0] = stb_rptr_dfq_new[2:0] ;
1576
 
1577
// Decode Read Ptr
1578
// Generated cycle before actual read.
1579
assign  dec_rptr_dfq[0]  = ~stb_rptr_dfq[2] & ~stb_rptr_dfq[1] & ~stb_rptr_dfq[0] ;
1580
assign  dec_rptr_dfq[1] = ~stb_rptr_dfq[2] & ~stb_rptr_dfq[1] &  stb_rptr_dfq[0] ;
1581
assign  dec_rptr_dfq[2] = ~stb_rptr_dfq[2] &  stb_rptr_dfq[1] & ~stb_rptr_dfq[0] ;
1582
assign  dec_rptr_dfq[3] = ~stb_rptr_dfq[2] &  stb_rptr_dfq[1] &  stb_rptr_dfq[0] ;
1583
assign  dec_rptr_dfq[4] =  stb_rptr_dfq[2] & ~stb_rptr_dfq[1] & ~stb_rptr_dfq[0] ;
1584
assign  dec_rptr_dfq[5] =  stb_rptr_dfq[2] & ~stb_rptr_dfq[1] &  stb_rptr_dfq[0] ;
1585
assign  dec_rptr_dfq[6] =  stb_rptr_dfq[2] &  stb_rptr_dfq[1] & ~stb_rptr_dfq[0] ;
1586
assign  dec_rptr_dfq[7] =  stb_rptr_dfq[2] &  stb_rptr_dfq[1] &  stb_rptr_dfq[0] ;
1587
 
1588
// Stge dfq ptr and dq vld by 2-cycles to appropriate invalidation pt
1589
dff #(9)  dq_stgd1       (
1590
        .din    ({dec_rptr_dfq[7:0],st_ack_dq_stb}),
1591
        .q      ({dqptr_d1[7:0],dq_vld_d1}),
1592
        .clk    (clk),
1593
        .se     (se), .si     (), .so ()
1594
        );
1595
 
1596
dff #(9)  dq_stgd2       (
1597
        .din    ({dqptr_d1[7:0],dq_vld_d1}),
1598
        .q      ({dqptr_d2[7:0],dq_vld_d2}),
1599
        .clk    (clk),
1600
        .se     (se), .si     (), .so ()
1601
        );
1602
 
1603
//=========================================================================================
1604
//      WPTR FOR STB
1605
//=========================================================================================
1606
 
1607
// It is assumed that if there is a store in the pipe, there is a
1608
// free entry in the corresponding stb. Otherwise, the pipe would've
1609
// have stalled for the thread. This is maintained locally instead of in
1610
// stb rw ctl.
1611
 
1612
// 00(flush,wr) - no update,01 - +1,10 - d1,11 - no update 
1613
// cam or data wr ptr would do. 
1614
//assign  update_stb_wptr         =       stb_cam_wvld_m |  stb_flush_st_g ;
1615
assign  update_stb_wptr         =       stb_cam_wvld_m ^  (full_flush_st_g | st_dtlb_perr_g);
1616
 
1617
assign  stb_wptr_new[3:0]       =       (full_flush_st_g | st_dtlb_perr_g) ?
1618
                                                        stb_wptr_prev[3:0] :
1619
                                                        stb_wptr[3:0] + {3'b0, stb_cam_wvld_m} ;
1620
 
1621
dff  wvld_stgg       (
1622
        .din    (stb_cam_wvld_m), .q      (stb_cam_wvld_g),
1623
        .clk    (clk),
1624
        .se     (se), .si     (), .so ()
1625
        );
1626
 
1627
 
1628
//assign        stb_wvld_g = stb_cam_wvld_g & ~full_flush_st_g ;
1629
 
1630
dffre #(4)  wptr_new    (
1631
        .din            (stb_wptr_new[3:0]),    .q      (stb_wptr[3:0]),
1632
        .en             (update_stb_wptr),    .rst    (reset),
1633
        .clk            (clk),
1634
        .se             (se), .si     (), .so ()
1635
        );
1636
 
1637
assign  stb_wrptr[2:0]   = stb_wptr[2:0] ;
1638
 
1639
wire [2:0] stb_wptr_m ;
1640
// flush should not be required. If the previous st is flushed then
1641
// the current st should be invalid.
1642
assign  stb_wptr_m[2:0]       =      stb_wptr[2:0] ;
1643
/*assign  stb_wptr_m[3:0]       =       (full_flush_st_g) ?
1644
                                                        stb_wptr_prev[3:0] :
1645
                                                        stb_wptr[3:0] ;*/
1646
 
1647
// Decode wptr
1648
assign  dec_wptr_m[0] = ~stb_wptr_m[2] & ~stb_wptr_m[1] & ~stb_wptr_m[0] ;
1649
assign  dec_wptr_m[1] = ~stb_wptr_m[2] & ~stb_wptr_m[1] &  stb_wptr_m[0] ;
1650
assign  dec_wptr_m[2] = ~stb_wptr_m[2] &  stb_wptr_m[1] & ~stb_wptr_m[0] ;
1651
assign  dec_wptr_m[3] = ~stb_wptr_m[2] &  stb_wptr_m[1] &  stb_wptr_m[0] ;
1652
assign  dec_wptr_m[4] =  stb_wptr_m[2] & ~stb_wptr_m[1] & ~stb_wptr_m[0] ;
1653
assign  dec_wptr_m[5] =  stb_wptr_m[2] & ~stb_wptr_m[1] &  stb_wptr_m[0] ;
1654
assign  dec_wptr_m[6] =  stb_wptr_m[2] &  stb_wptr_m[1] & ~stb_wptr_m[0] ;
1655
assign  dec_wptr_m[7] =  stb_wptr_m[2] &  stb_wptr_m[1] &  stb_wptr_m[0] ;
1656
 
1657
dff #(8)  dwptr_stgg       (
1658
        .din    (dec_wptr_m[7:0]), .q      (dec_wptr_g[7:0]),
1659
        .clk    (clk),
1660
        .se     (se), .si     (), .so ()
1661
        );
1662
 
1663
// stb_wptr_prev represents the latest valid entry in stb
1664
/*dffre #(4)  wptr_prev   (
1665
        .din            (stb_wptr[3:0]),        .q      (stb_wptr_prev[3:0]),
1666
        .en             (update_stb_wptr),      .rst    (reset),
1667
        .clk            (clk),
1668
        .se             (se), .si     (), .so ()
1669
        );*/
1670
 
1671
assign  stb_wptr_prev[3:0] = stb_wptr[3:0] - {4'b0001} ;
1672
 
1673
// Bug 2419 - In case this is a critical path, a flop can be inserted.
1674
assign  stb_wrptr_prev[2:0]      = stb_wptr_prev[2:0] ;
1675
 
1676
//=========================================================================================
1677
//      # OF STORES IN STB
1678
//=========================================================================================
1679
 
1680
wire    [3:0]    stb_wptr_w2 ;
1681
 
1682
// Count should not include stores in pipe-stages 'g' or before.
1683
dff #(4)  wptr_stgw2       (
1684
        .din    (stb_wptr[3:0]), .q      (stb_wptr_w2[3:0]),
1685
        .clk    (clk),
1686
        .se     (se), .si     (), .so ()
1687
        );
1688
 
1689
assign  lsu_stbcnt[3:0] =  (stb_wptr_w2[3:0] - stb_rptr_dfq[3:0]) ;
1690
 
1691
// Performance Cntr Info
1692
wire    stb_full_w2 ;
1693
assign  stb_full_w2 = lsu_stbcnt[2] & lsu_stbcnt[1] & lsu_stbcnt[0] ;
1694
dff   sfull (
1695
        .din    (stb_full_w2), .q      (stb_full),
1696
        .clk    (clk),
1697
        .se     (se), .si     (), .so ()
1698
        );
1699
 
1700
//=========================================================================================
1701
//      CONTROL STATE
1702
//=========================================================================================
1703
 
1704
// (V)  -       Valid State. Initialized by write and cleared once entry
1705
//              has written DFQ and then written the cache. If the store
1706
//              will only bypass then it still needs to enter DFQ but 
1707
//              can be deallocated immediately on entry into DFQ. (1b)
1708
// (A)  -       (NA) Allocate. Determined on read of cache. May be modified by
1709
//              invalidate or st mv'ing to DFQ. The load woust have to
1710
//              have same set index and same replacement way to clear A bit. (1b)
1711
// (SI) -       cache set index for invalidate/load cam'ing. (6b)
1712
// (WY) -       (NA) Allocate way for store. (2b)
1713
// (CED) -      Committed to SKB. Entry written to SKB. (1b)
1714
// (ACK) -      Ack for store received from L2. (1b)
1715
// (UPD) -      (NA) Entry mv'ed to DFQ. (1b)
1716
// (W)   -      (NA) Wrap bit. (1b) <--- Not used
1717
// * All state needs to be reset when entry is freed.
1718
//
1719
// Total - 14b.
1720
 
1721
// ack_id is internally tracked. 
1722
// There can only be one outstanding
1723
dffre #(8)  ackptr_ff   (
1724
        .din            (dec_rptr_pcx[7:0]), .q  (dec_ackptr[7:0]),
1725
        .en             (pcx_rq_for_stb), .rst (reset),
1726
        .clk            (clk),
1727
        .se             (se),   .si     (), .so ()
1728
        );
1729
 
1730
 
1731
assign  ack_vld = cpx_st_ack_tid ;
1732
//assign        st_dc_hit_g = lsu_st_hit_g ;
1733
 
1734
assign  stb_crnt_ack_id[0] = dec_ackptr[1] | dec_ackptr[3] |
1735
                                dec_ackptr[5] | dec_ackptr[7] ;
1736
assign  stb_crnt_ack_id[1] = dec_ackptr[2] | dec_ackptr[3] |
1737
                                dec_ackptr[6] | dec_ackptr[7] ;
1738
assign  stb_crnt_ack_id[2] = dec_ackptr[4] | dec_ackptr[5] |
1739
                                dec_ackptr[6] | dec_ackptr[7] ;
1740
 
1741
// Decode valid dequeue ids arriving from dfq.
1742
 
1743
// pa[39:36] 
1744
// 0x00-0x7f  dram
1745
// 0xa0-0xbf  l2csr
1746
// others as non l2 accsess = b39 & ~(~b38 & b37)   
1747
// timing fix: stb_non_l2bnk is delayed 1 cycle - gen in w/g cycle
1748
//assign        stb_non_l2bnk = stb_alt_sel ?
1749
//      stb_alt_addr[2] & ~(~stb_alt_addr[1] & stb_alt_addr[0]) :
1750
//      tlb_pgnum_m[39]  & ~(~tlb_pgnum_m[38]  & tlb_pgnum_m[37])  & ~flsh_inst_m;
1751
 
1752
wire   [2:0]  stb_alt_addr_g;
1753
wire          stb_alt_sel_g;
1754
 
1755
dff #(4) ff_alt_addr_g       (
1756
        .din    ({stb_alt_sel,stb_alt_addr[2:0]}),
1757
        .q      ({stb_alt_sel_g,stb_alt_addr_g[2:0]}),
1758
        .clk    (clk),
1759
        .se     (se), .si     (), .so ()
1760
        );
1761
 
1762
wire  flsh_inst_g;
1763
dff #(1) ff_flsh_inst_g       (
1764
        .din    (flsh_inst_m),
1765
        .q      (flsh_inst_g),
1766
        .clk    (clk),
1767
        .se     (se), .si     (), .so ()
1768
        );
1769
 
1770
wire   stb_alt_io_g , tlb_pgnum_io_g ;
1771
 
1772
assign  stb_alt_io_g  =
1773
        stb_alt_addr_g[2] & ~(~stb_alt_addr_g[1] & stb_alt_addr_g[0]);
1774
assign  tlb_pgnum_io_g  =
1775
        tlb_pgnum_g[39]  & ~(~tlb_pgnum_g[38]  & tlb_pgnum_g[37])  & ~flsh_inst_g;
1776
 
1777
// used as input to state_io in stb_ctldp
1778
wire   stb_non_l2bnk_g;
1779
assign  stb_non_l2bnk_g  =
1780
        stb_alt_sel_g ? stb_alt_io_g :
1781
                        tlb_pgnum_io_g ;
1782
 
1783
// used as output to qctl1 - this has to be qual'ed w/dec_rptr_pcx so no x's propagate
1784
//alt_sel_g  state_vld  comment
1785
// 0         0          select tlb_pgnum_io_g(bypass)
1786
// 0         1          select stb_state_io
1787
// 1         0          select stb_alt_io_g
1788
// 1         1          select stb_alt_io_g
1789
 
1790
wire  [7:0]  stb_l2bnk_addr_b2;
1791
 
1792
//  inflight (stb_alt / tlb)
1793
//  stb
1794
//  bug3875       
1795
assign  stb_l2bnk_addr_b2[0]  =
1796
     stb_state_vld[0] ? stb_state_io[0] :
1797
        stb_alt_sel_g ? stb_alt_io_g :
1798
                        tlb_pgnum_io_g ;
1799
 
1800
assign  stb_l2bnk_addr_b2[1]  =
1801
     stb_state_vld[1] ? stb_state_io[1] :
1802
        stb_alt_sel_g ? stb_alt_io_g :
1803
                        tlb_pgnum_io_g ;
1804
 
1805
assign  stb_l2bnk_addr_b2[2]  =
1806
     stb_state_vld[2] ? stb_state_io[2] :
1807
        stb_alt_sel_g ? stb_alt_io_g :
1808
                        tlb_pgnum_io_g ;
1809
 
1810
assign  stb_l2bnk_addr_b2[3]  =
1811
     stb_state_vld[3] ? stb_state_io[3] :
1812
        stb_alt_sel_g ? stb_alt_io_g :
1813
                        tlb_pgnum_io_g ;
1814
 
1815
assign  stb_l2bnk_addr_b2[4]  =
1816
     stb_state_vld[4] ? stb_state_io[4] :
1817
        stb_alt_sel_g ? stb_alt_io_g :
1818
                        tlb_pgnum_io_g ;
1819
 
1820
assign  stb_l2bnk_addr_b2[5]  =
1821
     stb_state_vld[5] ? stb_state_io[5] :
1822
        stb_alt_sel_g ? stb_alt_io_g :
1823
                        tlb_pgnum_io_g ;
1824
 
1825
assign  stb_l2bnk_addr_b2[6]  =
1826
     stb_state_vld[6] ? stb_state_io[6] :
1827
        stb_alt_sel_g ? stb_alt_io_g :
1828
                        tlb_pgnum_io_g ;
1829
 
1830
assign  stb_l2bnk_addr_b2[7]  =
1831
     stb_state_vld[7] ? stb_state_io[7] :
1832
        stb_alt_sel_g ? stb_alt_io_g :
1833
                        tlb_pgnum_io_g ;
1834
 
1835
 
1836
dff  rqsel_stgg       (
1837
        .din    (pcx_rq_for_stb), .q      (pcx_rq_for_stb_d1),
1838
        .clk    (clk),
1839
        .se     (se), .si     (), .so ()
1840
        );
1841
 
1842
// Use of tlb_pgnum_m will be critical !!! 
1843
 
1844
//always @( posedge clk)
1845
//      begin
1846
//      for (i=0;i<8;i=i+1)     
1847
//              begin
1848
//                      if (reset                                                 // reset
1849
//                                | (dqptr_d2[i] & dq_vld_d2)                     // dequeue from stb
1850
//                                | (dec_ackptr[i] & pcx_rq_for_stb_d1 & 
1851
//                                              ~pcx_req_squash & stb_state_rmo[i])) 
1852
//                              // write will be visible in cache.
1853
//                              begin
1854
//                                      stb_state_vld[i] <= 1'b0 ;
1855
//                                      stb_state_ced[i] <= 1'b0 ;
1856
//                                      stb_state_ack[i] <= 1'b0 ;
1857
//                              end
1858
//                      if (dec_wptr_g[i] & stb_wvld_g & thrd_en_g )
1859
//                              begin
1860
//                                      stb_state_vld[i] <= 1'b1 ;
1861
//                                      stb_state_wy[i] <=  st_enc_set_way[1:0];
1862
//                              end
1863
//                      if (dec_wptr_m[i] & stb_cam_wvld_m)     // spec. write
1864
//                              begin
1865
//                                      stb_state_si[i] <=  lsu_ldst_va_m[9:4] ;
1866
//                                      stb_state_rtype[i] <= lsu_st_rq_type_m[2:0] ;
1867
//                                      stb_state_io[i] <=  non_l2bnk ;
1868
//                                      stb_state_rmo[i] <= lsu_st_rmo_m ;
1869
//                              end
1870
//                      // atomic will not write to cache even if it hits.
1871
//                      // rd_for_pcx needs to be gated for a cycle.
1872
//                      // This is delayed by a cycle to take into account
1873
//                      // squashing of speculative requests.
1874
//                      // rmo's will dequeue entry immediately.
1875
//                      if (dec_ackptr[i] & pcx_rq_for_stb_d1 & ~pcx_req_squash & ~stb_state_rmo[i]) 
1876
//                              stb_state_ced[i] = 1'b1 ;
1877
//                      if (dec_ackptr[i] & ack_vld)
1878
//                              stb_state_ack[i] = 1'b1 ;
1879
 
1880
//              end
1881
//      end
1882
 
1883
// UNIFY : mux select destination address of pcx pkt
1884
 
1885
// always->dff translation begin
1886
 
1887
   // =================================
1888
   // rst  set  din
1889
   // 0    0    q
1890
   // 1    0    0 (reset)
1891
   // x    1    1 (set)
1892
   // ==================================
1893
   // din = set | (~r & q)
1894
 
1895
   //vld 
1896
   wire [7:0]    stb_issue_rmo ;
1897
   wire [7:0]    flush_vld_w2 ;
1898
   // Timing 
1899
   assign       stb_issue_rmo[7:0] =
1900
        (dec_ackptr[7:0] & {8{st_vld_rq_d2}} & stb_state_rmo[7:0]) ;
1901
        // (dec_ackptr[7:0] & {8{pcx_rq_for_stb_d1}} & 
1902
        //      {8{~pcx_req_squash}} & stb_state_rmo[7:0]) ;
1903
   assign       stb_rmo_st_issue = |stb_issue_rmo[7:0] ;
1904
 
1905
   //bug2983 - begin
1906
   wire        rmo_pend,rmo_pend_d1;
1907
   wire [7:0]  rmo_pend_ackptr , stb_dq_rmo_dfq_ptr;
1908
   // this will set 1 cycle after pcx_rq_for_stb and before the corresponding ced is set(which is 2 cycles
1909
   // after pcx_rq_for_stb
1910
   //bug3249: dec_rptr_dfq catches up w/ dec_ackptr; i.e. dec_ackptr entry is the oldset. rmo_pend should not
1911
   //         be set in this case based on previuos entry (since it will be the youngest)
1912
   //         fix - kill pend if issue and dq ptr are same (~{8{|(dec_ackptr[7:0] & dec_rptr_dfq[7:0])}})
1913
   assign rmo_pend_ackptr[7:0]  =
1914
          // is the current req RMO store
1915
          //(dec_ackptr[7:0] & stb_state_rmo[7:0]) &  //bug3249
1916
          //(dec_ackptr[7:0] & stb_state_rmo[7:0] & ~dec_rptr_dfq[7:0]) &    //bug7100 new fix, bug7117
1917
          (dec_ackptr[7:0] & stb_state_rmo[7:0] & ~dqptr_d2[7:0]) &
1918
          // is the older store a regular store
1919
          ({stb_state_vld[6:0],stb_state_vld[7]} & ~{stb_state_rmo[6:0],stb_state_rmo[7]});
1920
 
1921
   assign rmo_pend = |rmo_pend_ackptr[7:0];
1922
 
1923
   wire   rmo_pend_rst;
1924
   assign rmo_pend_rst  =  reset | stb_dq_rmo;
1925
 
1926
   dffre #(1)  ff_rmo_pend      (
1927
         .din  (rmo_pend),
1928
         .q    (rmo_pend_d1),
1929
         .en   (st_vld_rq_d2),
1930
         .rst  (rmo_pend_rst),
1931
         .clk  (clk),
1932
         .se   (se), .si     (), .so ()
1933
         );
1934
 
1935
   // ok to use either dec_ackptr[7:0] OR dec_rptr_dfq[7:0] 'cos the stores younger to 1st RMO store
1936
   // are not issued ('cos vld of RMO store is not reset). Hence ackptr and rptr_dfq will be the same
1937
   // when rmo_pend=0.
1938
   //
1939
   // has to qual'ed w/ st_vld_rq_d2. otherwise can result in vld reset before ced is set. the next
1940
   // time the entry is used it will have ced=1 and not issue.
1941
   //
1942
   // cannot use rmo_pend_ackptr[7:0] instead of dec_ackptr[7:0] 'cos the former will be reset when
1943
   // rmo_pend=0 and will not dequeue the rmo stb entry. i.e if rmo_pend=1 when st_vld_rq_d2=1, use
1944
   // dec_ackptr[7:0]
1945
 
1946
   //------------------------------------------------------------------------------------------------
1947
   // Case 1: NO older regular store vld dequeue pending
1948
   //------------------------------------------------------------------------------------------------
1949
   // |        1           |    2    |    3    |    4     |     5    |          |          |
1950
   // stb_state_vld=8'h1------------------------------------->8'h0
1951
   // stb_state_rmo=8'h1
1952
   //
1953
   // pcx_rq_for_stb=1-------->0                     
1954
   //
1955
   // dec_ackptr=8'h0--------->8'h1
1956
   //
1957
   // st_vld_rq_d2=0--------------------->1           0
1958
   // stb_issue_rmo=8'h0-------------->8'h1        8'h0
1959
   // stb_dq_rmo_dfq_ptr=8'h0--------->8'h1       8'h0
1960
   //
1961
   // rmo_pend=0
1962
   // rmo_pend_d1=0
1963
   //
1964
   // dq_vld_d2=0
1965
   // dqptr_d2=8'h0
1966
   //------------------------------------------------------------------------------------------------
1967
   // Case 2: older regular store vld dequeue pending(entry0-older reg store; entry1-rmo younger store)
1968
   //------------------------------------------------------------------------------------------------
1969
   // |        1              |    2     |   3    |    4    |    5    |    6    |          | 
1970
   // stb_state_vld=8'h3-------------------------------------->8'h2      8'h0
1971
   // stb_state_rmo=8'h2
1972
   // stb_state_ack=8'h1-------------------------------------->8'h0
1973
   //
1974
   // pcx_rq_for_stb=1-------------->0                     
1975
   //
1976
   // dec_ackptr=8'h1------------>8'h2
1977
   //
1978
   // st_vld_rq_d2=0-------------------------->1        0
1979
   // stb_issue_rmo=8'h0------------------->8'h1     8'h0
1980
   // stb_dq_rmo_dfq_ptr=8'h0--------------------------------->8'h2      8'h0 (dequeue rmo store)
1981
   //
1982
   // rmo_pend=0-------------------->1                           0
1983
   // rmo_pend_d1=0--------------------------->1                            0
1984
   //
1985
   // dq_vld_d2=0-------------------------------------->1        0
1986
   // dqptr_d2=8'h0--------------------------------->8'h1     8'h0 (dequeue regular store)
1987
   //------------------------------------------------------------------------------------------------
1988
 
1989
   assign stb_dq_rmo_dfq_ptr[7:0] =
1990
          (stb_issue_rmo[7:0]   & ~rmo_pend_ackptr[7:0]) |         // if rmo_pend=0 when st_vld_rq_d2=1
1991
          (dec_ackptr[7:0]      & {8{rmo_pend_d1 & ~rmo_pend}});   // if rmo_pend=1 when st_vld_rq_d2=1
1992
 
1993
   assign stb_dq_rmo  =  |stb_dq_rmo_dfq_ptr[7:0];
1994
   //bug2983 - end
1995
 
1996
   assign stb_state_rst[7:0] =
1997
        {8{reset}} | (dqptr_d2[7:0] & {8{dq_vld_d2}})
1998
        // reset vld,ced,ack immed. on issue to pcx for rmo store.
1999
        | stb_dq_rmo_dfq_ptr[7:0] |  // fix for bug2983
2000
        // | stb_issue_rmo[7:0] |  // bug2983
2001
        flush_vld_w2[7:0] ;      // because of trap
2002
 
2003
   // vld is now speculatively written
2004
   assign stb_state_vld_set[7:0] = dec_wptr_g[7:0] & {8{stb_cam_wvld_g & thrd_en_g}} ;
2005
   //assign stb_state_vld_set[7:0] = dec_wptr_g[7:0] & {8{stb_wvld_g & thrd_en_g}} ;
2006
   assign stb_state_vld_din[7:0] = stb_state_vld_set[7:0] |
2007
                                  (~stb_state_rst[7:0] & stb_state_vld[7:0]);
2008
 
2009
   wire [7:0] stb_state_vld_tmp ;
2010
   dff #(8)  ff_stb_state_vld       (
2011
        .din    (stb_state_vld_din[7:0]),
2012
        .q      (stb_state_vld_tmp[7:0]    ),
2013
        .clk    (clk),
2014
        .se     (se), .si (), .so ()
2015
        );
2016
 
2017
   assign stb_state_vld[7:0] = stb_state_vld_tmp[7:0] & ~flush_vld_w2[7:0] ;
2018
 
2019
   wire [7:0] stb_state_vld_set_w2 ;
2020
   dff #(8)  ff_stb_state_vld_set       (
2021
        .din    (stb_state_vld_set[7:0]),
2022
        .q      (stb_state_vld_set_w2[7:0]    ),
2023
        .clk    (clk),
2024
        .se     (se), .si (), .so ()
2025
        );
2026
 
2027
   assign flush_vld_w2[7:0] = stb_state_vld_set_w2[7:0] & {8{st_vld_squash_w2}} ;
2028
 
2029
   // The stb valids for the scm need not include the intermediate flush condition
2030
   // (flush_vld_w2). It is assumed that the flush of the store will invalidate 
2031
   // a subsequent ld. (8 extra flops).
2032
   // Bug 3201 - rmo st are made invisible to loads.
2033
 
2034
   wire [7:0]  st_scm_vld ;
2035
   assign st_scm_vld[7:0] = stb_state_vld_din[7:0] & ~stb_state_rmo[7:0] ;
2036
 
2037
   dff #(8)  ff_st_scm_vld       (
2038
        .din    (st_scm_vld[7:0]),
2039
        .q      (stb_state_vld_out[7:0]    ),
2040
        .clk    (clk),
2041
        .se     (se), .si (), .so ()
2042
        );
2043
 
2044
   //ced
2045
   assign stb_state_ced_set[7:0] = dec_ackptr[7:0] & {8{st_vld_rq_d2}} ;
2046
   // Timing fix.
2047
   //assign stb_state_ced_set[7:0] = dec_ackptr[7:0] & {8{pcx_rq_for_stb_d1 & ~pcx_req_squash}};
2048
   // make reset dominant - specifically for coincident set and reset by rmo st.
2049
   assign stb_state_ced_din[7:0] = ~stb_state_rst[7:0] &
2050
                                        (stb_state_ced_set[7:0] | stb_state_ced[7:0]);
2051
   //assign stb_state_ced_din[7:0] = stb_state_ced_set[7:0] | 
2052
   //                               (~stb_state_rst[7:0] & stb_state_ced[7:0]);
2053
 
2054
   dff #(8)  ff_stb_state_ced       (
2055
        .din    (stb_state_ced_din[7:0]),
2056
        .q      (stb_state_ced[7:0]    ),
2057
        .clk    (clk),
2058
        .se     (se), .si (), .so ()
2059
        );
2060
 
2061
   //ack
2062
   assign stb_state_ack_set[7:0] = dec_ackptr[7:0] & {8{ack_vld}};
2063
   assign stb_state_ack_din[7:0] = stb_state_ack_set[7:0] |
2064
                                  (~stb_state_rst[7:0] & stb_state_ack[7:0]);
2065
 
2066
   dff #(8)  ff_stb_state_ack       (
2067
        .din    (stb_state_ack_din[7:0]),
2068
        .q      (stb_state_ack[7:0]    ),
2069
        .clk    (clk),
2070
        .se     (se), .si (), .so ()
2071
        );
2072
 
2073
   //spec. write
2074
   wire [7:0] spec_wrt;
2075
   assign     spec_wrt [7:0] = dec_wptr_m[7:0] & {8{stb_cam_wvld_m}};
2076
   assign     stb_clk_en_l [7:0] = ~spec_wrt[7:0];
2077
 
2078
  //spec write Ffs move to lsu_stb_ctldp to save area      
2079
 
2080
 
2081
  // moved state_io logic from ctldp 
2082
 
2083
  assign stb_state_io_din[7:0]  =  (stb_state_vld_set[7:0] & {8{stb_non_l2bnk_g}}) |
2084
                                   (~stb_state_rst[7:0] & stb_state_io[7:0]);
2085
 
2086
   dff #(8)  ff_stb_state_io       (
2087
        .din    (stb_state_io_din[7:0]),
2088
        .q      (stb_state_io[7:0]    ),
2089
        .clk    (clk),
2090
        .se     (se), .si (), .so ()
2091
        );
2092
 
2093
// always->dff translation end    
2094
// streaming unit does not have to care about outstanding rmo sparc-stores.
2095
// membar will take care of that. spu must insert appr. delay in sampling signal.
2096
assign  lsu_stb_empty = ~(|stb_state_vld[7:0]);
2097
 
2098
//=========================================================================================
2099
//      SELECT L2BANK ADDRESS
2100
//=========================================================================================
2101
 
2102
//reg [5:0] temp ;
2103
//reg [2:0] stb_l2bnk_addr ;
2104
 
2105
//// This is modelling a mux. 
2106
//always @(/*AUTOSENSE*/ /*memory or*/ dec_rptr_pcx)
2107
//      begin
2108
//              for (j=0;j<8;j=j+1)     
2109
//                      if (dec_rptr_pcx[j])    // 1-hot
2110
//                              begin
2111
//                              temp[5:0]               = stb_state_si[j] ;
2112
//                              stb_l2bnk_addr[2:0]     = {stb_state_io[j],temp[4:3]} ;
2113
//                              stb_atm_rq_type[2:0]    = stb_state_rtype[j] ;
2114
//                              end
2115
//      end
2116
 
2117
 
2118
//always->and-or translation begin
2119
   assign stb_l2bnk_addr[2:0] = {3{dec_rptr_pcx[0]}} & {stb_l2bnk_addr_b2[0], stb_state_si_0[3:2]} |
2120
                                {3{dec_rptr_pcx[1]}} & {stb_l2bnk_addr_b2[1], stb_state_si_1[3:2]} |
2121
                                {3{dec_rptr_pcx[2]}} & {stb_l2bnk_addr_b2[2], stb_state_si_2[3:2]} |
2122
                                {3{dec_rptr_pcx[3]}} & {stb_l2bnk_addr_b2[3], stb_state_si_3[3:2]} |
2123
                                {3{dec_rptr_pcx[4]}} & {stb_l2bnk_addr_b2[4], stb_state_si_4[3:2]} |
2124
                                {3{dec_rptr_pcx[5]}} & {stb_l2bnk_addr_b2[5], stb_state_si_5[3:2]} |
2125
                                {3{dec_rptr_pcx[6]}} & {stb_l2bnk_addr_b2[6], stb_state_si_6[3:2]} |
2126
                                {3{dec_rptr_pcx[7]}} & {stb_l2bnk_addr_b2[7], stb_state_si_7[3:2]} ;
2127
 
2128
   assign stb_atm_rq_type[2:1]= {2{dec_rptr_pcx[0]}} &  stb_state_rtype_0[2:1] |
2129
                                {2{dec_rptr_pcx[1]}} &  stb_state_rtype_1[2:1] |
2130
                                {2{dec_rptr_pcx[2]}} &  stb_state_rtype_2[2:1] |
2131
                                {2{dec_rptr_pcx[3]}} &  stb_state_rtype_3[2:1] |
2132
                                {2{dec_rptr_pcx[4]}} &  stb_state_rtype_4[2:1] |
2133
                                {2{dec_rptr_pcx[5]}} &  stb_state_rtype_5[2:1] |
2134
                                {2{dec_rptr_pcx[6]}} &  stb_state_rtype_6[2:1] |
2135
                                {2{dec_rptr_pcx[7]}} &  stb_state_rtype_7[2:1] ;
2136
 
2137
//always->and-or translation end
2138
 
2139
 
2140
endmodule
2141
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.