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

Subversion Repositories lattice6502

[/] [lattice6502/] [ghdl/] [ghdl_ram.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 stanley82
------------------------------------------------------------------
2
--      6502 ghdl RAM module.
3
--
4
--      Copyright Ian Chapman October 28 2010
5
--
6
--      This file is part of the Lattice 6502 project
7
--      It is used to compile with Linux ghdl not ispLeaver.
8
--      The executable code is pasted into this module.
9
--
10
--      To do
11
--              Complete.
12
--
13
--      *************************************************************
14
--      Distributed under the GNU Lesser General Public License.    *
15
--      This can be obtained from “www.gnu.org”.                    *
16
--      *************************************************************
17
--      This program is free software: you can redistribute it and/or modify
18
--      it under the terms of the GNU General Public License as published by
19
--      the Free Software Foundation, either version 3 of the License, or
20
--      (at your option) any later version.
21
--
22
--      This program is distributed in the hope that it will be useful,
23
--      but WITHOUT ANY WARRANTY; without even the implied warranty of
24
--      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
25
--      GNU General Public License for more details.
26
--
27
--      You should have received a copy of the GNU General Public License
28
--      along with this program.  If not, see <http://www.gnu.org/licenses/>
29
--
30
--      ghdl_ram.vhd
31
--
32
--      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
33
--      RAM memory is mapped to x0000
34
--      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
35
 
36
library IEEE;           --Use standard IEEE libs as recommended by Tristan.
37
use IEEE.STD_LOGIC_1164.ALL;
38
use IEEE.numeric_std.all;
39
 
40
entity ghdl_ram is
41
 
42
Port (
43
        clk, wr, rst : in std_logic;
44
        data_wr: in unsigned(7 downto 0);
45
        ram_dat: out unsigned(7 downto 0);
46
        address: in unsigned(15 downto 0)
47
    );
48
end ghdl_ram;
49
 
50
architecture RTL of ghdl_ram is
51
--      type RamType is array (natural range <>) of std_logic_vector(7 downto 0);
52
--0 to integer'HIGH
53
type RamType is array (0 to 1023) of unsigned(7 downto 0);
54
 
55
signal add : unsigned(15 downto 0);
56
signal data_wr_reg : unsigned(7 downto 0);
57
signal wr_reg : std_logic;
58
 
59
signal RAM_zero : RamType := (
60
 
61
--signal RAM_zero : RamType(0 to 1023) := (
62
--      I needed something for data so this is old ROM stuff.
63
X"A9", --0
64
X"00",
65
X"8D",
66
X"12",
67
X"02",
68
X"A0",
69
X"43",
70
X"20",
71
X"BA",
72
X"FF",
73
X"A0",
74
X"4E",
75
X"20",
76
X"BA",
77
X"FF",
78
X"A0",
79
X"54",          --10
80
X"20",
81
X"BA",
82
X"FF",
83
X"AD",
84
X"12",
85
X"02",
86
X"AA",
87
X"BC",
88
X"C5",
89
X"FF",
90
X"20",
91
X"BA",
92
X"FF",
93
X"A0",
94
X"20",
95
X"72",  --20 r
96
X"66",  --f
97
X"63",  --c
98
X"30",  --0
99
X"35",  --0
100
X"0d",  --cr
101
X"18",
102
X"69",
103
X"78",
104
X"20",
105
X"D5",
106
X"FF",
107
X"A0",
108
X"5A",
109
X"20",
110
X"BA",
111
X"FF",
112
X"AD",
113
X"12",
114
X"02",
115
X"18",
116
X"69",
117
X"78",
118
X"F0",
119
X"08",
120
X"A0",
121
X"31",
122
X"20",
123
X"BA",
124
X"FF",
125
X"4C",
126
X"46",
127
X"FF",
128
X"A0",
129
X"30",
130
X"20",
131
X"BA",
132
X"FF",
133
X"A0",
134
X"20",
135
X"20",
136
X"BA",
137
X"FF",
138
X"A0",
139
X"43",
140
X"20",
141
X"BA",
142
X"FF",
143
X"AD",
144
X"12",
145
X"02",
146
X"18",
147
X"69",
148
X"78",
149
X"90",
150
X"08",
151
X"A0",
152
X"31",
153
X"20",
154
X"BA",
155
X"FF",
156
X"4C",
157
X"65",
158
X"FF",
159
X"A0",
160
X"30",
161
X"20",
162
X"BA",
163
X"FF",
164
X"A0",
165
X"20",
166
X"20",
167
X"BA",
168
X"FF",
169
X"A0",
170
X"4E",
171
X"20",
172
X"BA",
173
X"FF",
174
X"AD",
175
X"12",
176
X"02",
177
X"18",
178
X"69",
179
X"78",
180
X"10",
181
X"08",
182
X"A0",
183
X"31",
184
X"20",
185
X"BA",
186
X"FF",
187
X"4C",
188
X"84",
189
X"FF",
190
X"A0",
191
X"30",
192
X"20",
193
X"BA",
194
X"FF",
195
X"A0",
196
X"20",
197
X"20",
198
X"BA",
199
X"FF",
200
X"A0",
201
X"56",
202
X"20",
203
X"BA",
204
X"FF",
205
X"AD",
206
X"12",
207
X"02",
208
X"18",
209
X"69",
210
X"78",
211
X"50",
212
X"08",
213
X"A0",
214
X"31",
215
X"20",
216
X"BA",
217
X"FF",
218
X"4C",
219
X"A3",
220
X"FF",
221
X"A0",
222
X"30",
223
X"20",
224
X"BA",
225
X"FF",
226
X"A0",
227
X"20",
228
X"20",
229
X"BA",
230
X"FF",
231
X"AE",
232
X"12",
233
X"02",
234
X"E8",
235
X"8A",
236
X"29",
237
X"0F",
238
X"8D",
239
X"12",
240
X"02",
241
X"A0",
242
X"0A",
243
X"20",
244
X"BA",
245
X"FF",
246
X"4C",
247
X"05",
248
X"FF",
249
X"AD",
250
X"01",
251
X"40",
252
X"29",
253
X"80",
254
X"D0",
255
X"F9",
256
X"8C",
257
X"00",
258
X"40",
259
X"60",
260
X"30",
261
X"31",
262
X"32",
263
X"33",
264
X"34",
265
X"35",
266
X"36",
267
X"37",
268
X"38",
269
X"39",
270
X"41",
271
X"42",
272
X"43",
273
X"44",
274
X"45",
275
X"46",
276
X"8D",
277
X"14",
278
X"02",
279
X"98",
280
X"18",
281
X"6A",
282
X"6A",
283
X"6A",
284
X"6A",
285
X"29",
286
X"0F",
287
X"AA",
288
X"BC",
289
X"C5",
290
X"FF",
291
X"20",
292
X"BA",
293
X"FF",
294
X"AD",
295
X"14",
296
X"02",
297
X"29",
298
X"0F",
299
X"AA",
300
X"BC",
301
X"C5",
302
X"FF",
303
X"20",
304
X"BA",
305
X"FF",
306
X"60",
307
X"40",
308
X"40",
309
X"EA",
310
X"EA",
311
X"00",
312
X"FF",
313
X"F4",
314
X"FF",
315
X"00",
316
X"FF",
317
X"F5",
318
X"FF",
319
X"72",  --100 r
320
X"66",
321
X"30",
322
X"33",
323
X"0d",
324
X"A0",
325
X"43",
326
X"20",
327
X"BA",
328
X"FF",
329
X"A0",
330
X"4E",
331
X"20",
332
X"BA",
333
X"FF",
334
X"A0",
335
X"54",
336
X"20",
337
X"BA",
338
X"FF",
339
X"AD",
340
X"12",
341
X"02",
342
X"AA",
343
X"BC",
344
X"C5",
345
X"FF",
346
X"20",
347
X"BA",
348
X"FF",
349
X"A0",
350
X"20",
351
X"20",
352
X"BA",
353
X"FF",
354
X"AD",
355
X"12",
356
X"02",
357
X"18",
358
X"69",
359
X"78",
360
X"20",
361
X"D5",
362
X"FF",
363
X"A0",
364
X"5A",
365
X"20",
366
X"BA",
367
X"FF",
368
X"AD",
369
X"12",
370
X"02",
371
X"18",
372
X"69",
373
X"78",
374
X"F0",
375
X"08",
376
X"A0",
377
X"31",
378
X"20",
379
X"BA",
380
X"FF",
381
X"4C",
382
X"46",
383
X"FF",
384
X"A0",
385
X"30",
386
X"20",
387
X"BA",
388
X"FF",
389
X"A0",
390
X"20",
391
X"20",
392
X"BA",
393
X"FF",
394
X"A0",
395
X"43",
396
X"20",
397
X"BA",
398
X"FF",
399
X"AD",
400
X"12",
401
X"02",
402
X"18",
403
X"69",
404
X"78",
405
X"90",
406
X"08",
407
X"A0",
408
X"31",
409
X"20",
410
X"BA",
411
X"FF",
412
X"4C",
413
X"65",
414
X"FF",
415
X"A0",
416
X"30",
417
X"20",
418
X"BA",
419
X"FF",
420
X"A0",
421
X"20",
422
X"20",
423
X"BA",
424
X"FF",
425
X"A0",
426
X"4E",
427
X"20",
428
X"BA",
429
X"FF",
430
X"AD",
431
X"12",
432
X"02",
433
X"18",
434
X"69",
435
X"78",
436
X"10",
437
X"08",
438
X"A0",
439
X"31",
440
X"20",
441
X"BA",
442
X"FF",
443
X"4C",
444
X"84",
445
X"FF",
446
X"A0",
447
X"30",
448
X"20",
449
X"BA",
450
X"FF",
451
X"A0",
452
X"20",
453
X"20",
454
X"BA",
455
X"FF",
456
X"A0",
457
X"56",
458
X"20",
459
X"BA",
460
X"FF",
461
X"AD",
462
X"12",
463
X"02",
464
X"18",
465
X"69",
466
X"78",
467
X"50",
468
X"08",
469
X"A0",
470
X"31",
471
X"20",
472
X"BA",
473
X"FF",
474
X"4C",
475
X"A3",
476
X"FF",
477
X"A0",
478
X"30",
479
X"20",
480
X"BA",
481
X"FF",
482
X"A0",
483
X"20",
484
X"20",
485
X"BA",
486
X"FF",
487
X"AE",
488
X"12",
489
X"02",
490
X"E8",
491
X"8A",
492
X"29",
493
X"0F",
494
X"8D",
495
X"12",
496
X"02",
497
X"A0",
498
X"0A",
499
X"20",
500
X"BA",
501
X"FF",
502
X"4C",
503
X"05",
504
X"FF",
505
X"AD",
506
X"01",
507
X"40",
508
X"29",
509
X"80",
510
X"D0",
511
X"F9",
512
X"8C",
513
X"00",
514
X"40",
515
X"60",
516
X"30",
517
X"31",
518
X"32",
519
X"33",
520
X"34",
521
X"35",
522
X"EA",
523
X"36",
524
X"37",
525
X"38",
526
X"39",
527
X"41",
528
X"42",
529
X"43",
530
X"44",
531
X"45",
532
X"46",
533
X"8D",
534
X"14",
535
X"02",
536
X"98",
537
X"18",
538
X"6A",
539
X"6A",
540
X"6A",
541
X"6A",
542
X"29",
543
X"0F",
544
X"AA",
545
X"BC",
546
X"C5",
547
X"FF",
548
X"20",
549
X"BA",
550
X"FF",
551
X"AD",
552
X"14",
553
X"02",
554
X"29",
555
X"0F",
556
X"AA",
557
X"BC",
558
X"C5",
559
X"FF",
560
X"20",
561
X"BA",
562
X"FF",
563
X"60",
564
X"40",
565
X"40",
566
X"EA",
567
X"EA",
568
X"00",
569
X"FF",
570
X"F4",
571
X"FF",
572
X"00",
573
X"FF",
574
X"F5",
575
X"72",  --200 r
576
X"66",
577
X"63",
578
X"30",
579
X"34",
580
X"0d",
581
X"39",
582
X"39",
583
X"39",
584
X"39",
585
X"FF",
586
X"A0",
587
X"4E",
588
X"20",
589
X"BA",
590
X"FF",
591
X"A0",
592
X"54",
593
X"20",
594
X"BA",
595
X"FF",
596
X"AD",
597
X"12",
598
X"02",
599
X"AA",
600
X"BC",
601
X"C5",
602
X"FF",
603
X"20",
604
X"BA",
605
X"FF",
606
X"A0",
607
X"20",
608
X"20",
609
X"BA",
610
X"FF",
611
X"AD",
612
X"12",
613
X"02",
614
X"18",
615
X"69",
616
X"78",
617
X"20",
618
X"D5",
619
X"FF",
620
X"A0",
621
X"5A",
622
X"20",
623
X"BA",
624
X"FF",
625
X"AD",
626
X"12",
627
X"02",
628
X"18",
629
X"69",
630
X"78",
631
X"F0",
632
X"08",
633
X"A0",
634
X"31",
635
X"20",
636
X"BA",
637
X"FF",
638
X"4C",
639
X"72",  --240
640
X"66",
641
X"63",
642
X"30",
643
X"30",
644
X"0d",
645
X"00",
646
X"00",
647
X"20",
648
X"20",
649
X"BA",
650
X"FF",
651
X"A0",
652
X"43",
653
X"20",
654
X"BA",
655
X"FF",
656
X"AD",
657
X"12",
658
X"02",
659
X"18",
660
X"69",
661
X"78",
662
X"90",
663
X"08",
664
X"A0",
665
X"31",
666
X"20",
667
X"BA",
668
X"FF",
669
X"4C",
670
X"65",
671
X"FF",
672
X"A0",
673
X"30",
674
X"20",
675
X"BA",
676
X"FF",
677
X"A0",
678
X"20",
679
X"20",
680
X"BA",
681
X"FF",
682
X"A0",
683
X"4E",
684
X"20",
685
X"BA",
686
X"FF",
687
X"AD",
688
X"12",
689
X"02",
690
X"18",
691
X"69",
692
X"78",
693
X"10",
694
X"08",
695
X"A0",
696
X"31",
697
X"20",
698
X"BA",
699
X"FF",
700
X"4C",
701
X"84",
702
X"FF",
703
X"00",  --281
704
X"06",  --281
705
X"06",
706
X"BA",
707
X"FF",
708
X"A0",
709
X"20",
710
X"20",
711
X"BA",
712
X"FF",
713
X"A0",
714
X"56",
715
X"20",
716
X"BA",
717
X"FF",
718
X"AD",
719
X"12",
720
X"02",
721
X"18",
722
X"69",
723
X"78",
724
X"50",
725
X"08",
726
X"A0",
727
X"31",
728
X"20",
729
X"BA",
730
X"FF",
731
X"4C",
732
X"A3",
733
X"FF",
734
X"A0",
735
X"30",
736
X"20",
737
X"BA",
738
X"FF",
739
X"A0",
740
X"20",
741
X"20",
742
X"BA",
743
X"FF",
744
X"AE",
745
X"12",
746
X"02",
747
X"E8",
748
X"8A",
749
X"29",
750
X"0F",
751
X"8D",
752
X"12",
753
X"02",
754
X"A0",
755
X"0A",
756
X"20",
757
X"BA",
758
X"FF",
759
X"4C",
760
X"05",
761
X"FF",
762
X"AD",
763
X"01",
764
X"40",
765
X"29",
766
X"80",
767
X"D0",
768
X"F9",
769
X"8C",
770
X"00",
771
X"40",
772
X"60",
773
X"30",
774
X"31",
775
X"32",
776
X"33",
777
X"34",
778
X"35",
779
X"EA",
780
X"36",
781
X"37",
782
X"38",
783
X"39",
784
X"41",
785
X"42",
786
X"43",
787
X"44",
788
X"45",
789
X"46",
790
X"8D",
791
X"14",
792
X"02",
793
X"98",
794
X"18",
795
X"6A",
796
X"6A",
797
X"6A",
798
X"6A",
799
X"29",
800
X"0F",
801
X"AA",
802
X"BC",
803
X"C5",
804
X"FF",
805
X"20",
806
X"BA",
807
X"FF",
808
X"AD",
809
X"14",
810
X"02",
811
X"29",
812
X"0F",
813
X"AA",
814
X"BC",
815
X"C5",
816
X"FF",
817
X"20",
818
X"BA",
819
X"FF",
820
X"60",
821
X"40",
822
X"40",
823
X"EA",
824
X"EA",
825
X"00",
826
X"FF",
827
X"F4",
828
X"FF",
829
X"00",
830
X"FF",
831
X"F5",
832
X"FF",
833
X"A9",
834
X"00",
835
X"8D",
836
X"12",
837
X"02",
838
X"A0",
839
X"43",
840
X"20",
841
X"BA",
842
X"FF",
843
X"A0",
844
X"4E",
845
X"20",
846
X"BA",
847
X"FF",
848
X"A0",
849
X"54",
850
X"20",
851
X"BA",
852
X"FF",
853
X"AD",
854
X"12",
855
X"02",
856
X"AA",
857
X"BC",
858
X"C5",
859
X"FF",
860
X"20",
861
X"BA",
862
X"FF",
863
X"A0",
864
X"20",
865
 
866
X"20",
867
X"BA",
868
X"FF",
869
X"AD",
870
X"12",
871
X"02",
872
X"18",
873
X"69",
874
X"78",
875
X"20",
876
X"D5",
877
X"FF",
878
X"A0",
879
X"5A",
880
X"20",
881
X"BA",
882
X"FF",
883
X"AD",
884
X"12",
885
X"02",
886
X"18",
887
X"69",
888
X"78",
889
X"F0",
890
X"08",
891
X"A0",
892
X"31",
893
X"20",
894
X"BA",
895
X"FF",
896
X"4C",
897
X"46",
898
X"FF",
899
X"A0",
900
X"30",
901
X"20",
902
X"BA",
903
X"FF",
904
X"A0",
905
X"20",
906
X"20",
907
X"BA",
908
X"FF",
909
X"A0",
910
X"43",
911
X"20",
912
X"BA",
913
X"FF",
914
X"AD",
915
X"12",
916
X"02",
917
X"18",
918
X"69",
919
X"78",
920
X"90",
921
X"08",
922
X"A0",
923
X"31",
924
X"20",
925
X"BA",
926
X"FF",
927
X"4C",
928
X"65",
929
X"FF",
930
X"A0",
931
X"30",
932
X"20",
933
X"BA",
934
X"FF",
935
X"A0",
936
X"20",
937
X"20",
938
X"BA",
939
X"FF",
940
X"A0",
941
X"4E",
942
X"20",
943
X"BA",
944
X"FF",
945
X"AD",
946
X"12",
947
X"02",
948
X"18",
949
X"69",
950
X"78",
951
X"10",
952
X"08",
953
X"A0",
954
X"31",
955
X"20",
956
X"BA",
957
X"FF",
958
X"4C",
959
X"84",
960
X"FF",
961
X"A0",
962
X"30",
963
X"20",
964
X"BA",
965
X"FF",
966
X"A0",
967
X"20",
968
X"20",
969
X"BA",
970
X"FF",
971
X"A0",
972
X"56",
973
X"20",
974
X"BA",
975
X"FF",
976
X"AD",
977
X"12",
978
X"02",
979
X"18",
980
X"69",
981
X"78",
982
X"50",
983
X"08",
984
X"A0",
985
X"31",
986
X"20",
987
X"BA",
988
X"FF",
989
X"4C",
990
X"A3",
991
X"FF",
992
X"A0",
993
X"30",
994
X"20",
995
X"BA",
996
X"FF",
997
X"A0",
998
X"20",
999
X"20",
1000
X"BA",
1001
X"FF",
1002
X"AE",
1003
X"12",
1004
X"02",
1005
X"E8",
1006
X"8A",
1007
X"29",
1008
X"0F",
1009
X"8D",
1010
X"12",
1011
X"02",
1012
X"A0",
1013
X"0A",
1014
X"20",
1015
X"BA",
1016
X"FF",
1017
X"4C",
1018
X"05",
1019
X"FF",
1020
X"AD",
1021
X"01",
1022
X"40",
1023
X"29",
1024
X"80",
1025
X"D0",
1026
X"F9",
1027
X"8C",
1028
X"00",
1029
X"40",
1030
X"60",
1031
X"30",
1032
X"31",
1033
X"32",
1034
X"33",
1035
X"34",
1036
X"35",
1037
X"EA",
1038
X"36",
1039
X"37",
1040
X"38",
1041
X"39",
1042
X"41",
1043
X"42",
1044
X"43",
1045
X"44",
1046
X"45",
1047
X"46",
1048
X"8D",
1049
X"14",
1050
X"02",
1051
X"98",
1052
X"18",
1053
X"6A",
1054
X"6A",
1055
X"6A",
1056
X"6A",
1057
X"29",
1058
X"0F",
1059
X"AA",
1060
X"BC",
1061
X"C5",
1062
X"FF",
1063
X"20",
1064
X"BA",
1065
X"FF",
1066
X"AD",
1067
X"14",
1068
X"29",
1069
X"0F",
1070
X"AA",
1071
X"BC",
1072
X"C5",
1073
X"C5",
1074
X"FF",
1075
X"BA",
1076
X"40",
1077
X"40",
1078
X"00",
1079
X"FF",
1080
X"00",
1081
X"FF",
1082
X"F4",
1083
X"FF",
1084
X"00",
1085
X"FF",
1086
X"F5",
1087
X"FF" )  ;
1088
 
1089
 
1090
 
1091
 
1092
begin
1093
 
1094
addressing:process(clk, address, data_wr)
1095
begin
1096
if rst = '0' then
1097
        add <= (others => '0');
1098
        data_wr_reg <= (others => '0');
1099
        wr_reg <= '0';
1100
elsif rising_edge(clk) then
1101
        add <= address;
1102
        data_wr_reg <= data_wr;
1103
        wr_reg <= wr;
1104
end if;
1105
end process;
1106
 
1107
read_ram:process(wr, add)
1108
begin
1109
        if wr = '0' and add(15 downto 10) = "000000" then        --zero page
1110
                ram_dat <= (RAM_zero(to_integer(unsigned(add(9 downto 0)))));
1111
end if;
1112
end process;
1113
 
1114
write_ram:process(wr, data_wr_reg, add)
1115
begin
1116
if rising_edge(clk) then
1117
        elsif wr_reg = '1' and add(15 downto 10) = "0000000" then
1118
                RAM_zero(to_integer((add(9 downto 0)))) <= (data_wr_reg);
1119
        end if;
1120
end process;
1121
 
1122
end RTL ;
1123
 
1124
 

powered by: WebSVN 2.1.0

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