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

Subversion Repositories ion

[/] [ion/] [trunk/] [vhdl/] [SoC/] [mips_soc.vhdl] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 ja_rd
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_arith.all;
4
use ieee.std_logic_unsigned.all;
5
use work.mips_pkg.all;
6
 
7
entity mips_mpu is
8
    generic(
9
        mult_type       : string  := "NONE"; -- {NONE|SEQUENTIAL}
10
        ld_interlock    : boolean := FALSE
11
    );
12
    port(
13
        clk             : in std_logic;
14
        reset           : in std_logic;
15
        interrupt       : in std_logic;
16
 
17
        rd_addr         : out std_logic_vector(31 downto 0);
18
        data_r          : in std_logic_vector(31 downto 0);
19
        vma_data        : out std_logic;
20
 
21
        wr_addr         : out std_logic_vector(31 downto 2);
22
        byte_we         : out std_logic_vector(3 downto 0);
23
        data_w          : out std_logic_vector(31 downto 0);
24
 
25
        uart_rxd        : in std_logic;
26
        uart_txd        : out std_logic;
27
 
28
        mem_wait        : in std_logic
29
    );
30
end; --entity mips_mpu
31
 
32
architecture rtl of mips_mpu is
33
 
34
-- Data RAM table and interface signals ----------------------------------------
35
constant DATA_RAM_SIZE : integer := 256;
36
constant DATA_ADDR_SIZE : integer := 8;
37
subtype t_data_address is std_logic_vector(DATA_ADDR_SIZE-1 downto 0);
38
-- (this table holds one byte-slice; the RAM will have 4 of these)
39
type t_data_ram is array(0 to DATA_RAM_SIZE-1) of std_logic_vector(7 downto 0);
40
 
41
signal data_addr_rd :       t_data_address;
42
signal data_addr_wr :       t_data_address;
43
 
44
-- ram0 is LSB, ram3 is MSB
45
signal ram3 : t_data_ram := (    X"63",X"69",X"74",X"3A",X"6E",X"20",X"31",X"20",
46
    X"33",X"35",X"67",X"76",X"69",X"20",X"34",X"00",
47
    X"0A",X"6C",X"57",X"64",X"0A",X"00",X"00",X"00",
48
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
49
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
50
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
51
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
52
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
53
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
54
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
55
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
56
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
57
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
58
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
59
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
60
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
61
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
62
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
63
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
64
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
65
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
66
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
67
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
68
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
69
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
70
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
71
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
72
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
73
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
74
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
75
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
76
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
77
    );
78
signal ram2 : t_data_ram := (    X"6F",X"6C",X"69",X"20",X"20",X"32",X"20",X"30",
79
    X"32",X"0A",X"63",X"65",X"6F",X"20",X"2E",X"00",
80
    X"0A",X"6C",X"6F",X"21",X"00",X"00",X"00",X"00",
81
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
82
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
83
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
84
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
85
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
86
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
87
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
88
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
89
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
90
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
91
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
92
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
93
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
94
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
95
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
96
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
97
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
98
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
99
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
100
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
101
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
102
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
103
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
104
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
105
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
106
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
107
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
108
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
109
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
110
    );
111
signal ram1 : t_data_ram := (    X"6D",X"65",X"6D",X"4A",X"32",X"30",X"2D",X"39",
112
    X"3A",X"00",X"63",X"72",X"6E",X"34",X"31",X"00",
113
    X"48",X"6F",X"72",X"0A",X"00",X"00",X"00",X"00",
114
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
115
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
116
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
117
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
118
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
119
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
120
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
121
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
122
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
123
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
124
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
125
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
126
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
127
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
128
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
129
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
130
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
131
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
132
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
133
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
134
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
135
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
136
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
137
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
138
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
139
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
140
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
141
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
142
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
143
    );
144
signal ram0 : t_data_ram := (    X"70",X"20",X"65",X"61",X"38",X"31",X"2D",X"3A",
145
    X"32",X"00",X"20",X"73",X"3A",X"2E",X"0A",X"00",
146
    X"65",X"20",X"6C",X"0A",X"00",X"00",X"00",X"00",
147
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
148
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
149
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
150
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
151
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
152
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
153
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
154
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
155
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
156
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
157
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
158
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
159
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
160
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
161
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
162
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
163
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
164
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
165
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
166
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
167
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
168
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
169
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
170
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
171
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
172
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
173
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
174
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
175
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
176
    );
177
 
178
 
179
-- Code RAM table and interface signals ----------------------------------------
180
constant CODE_RAM_SIZE : integer := 1024;
181
constant CODE_ADDR_SIZE : integer := 10;
182
subtype t_code_address is std_logic_vector(CODE_ADDR_SIZE-1 downto 0);
183
-- (this table holds one byte-slice; the RAM will have 4 of these)
184
type t_code_ram is array(0 to CODE_RAM_SIZE-1) of std_logic_vector(7 downto 0);
185
 
186
signal code_addr_rd :        t_code_address;
187
 
188
-- ram0 is LSB, ram3 is MSB
189
signal rom3 : t_code_ram := (    X"3C",X"27",X"3C",X"24",X"3C",X"24",X"3C",X"27",
190
    X"AC",X"00",X"14",X"24",X"0C",X"00",X"08",X"23",
191
    X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",
192
    X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",
193
    X"AF",X"AF",X"40",X"23",X"AF",X"00",X"AF",X"00",
194
    X"AF",X"3C",X"8C",X"00",X"8C",X"00",X"00",X"0C",
195
    X"23",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",
196
    X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",
197
    X"8F",X"8F",X"8F",X"8F",X"8F",X"00",X"03",X"8F",
198
    X"00",X"03",X"23",X"34",X"03",X"40",X"40",X"03",
199
    X"40",X"00",X"00",X"3C",X"24",X"8C",X"00",X"AC",
200
    X"8C",X"00",X"AC",X"8C",X"00",X"AC",X"8C",X"00",
201
    X"03",X"AC",X"3C",X"37",X"03",X"00",X"AC",X"AC",
202
    X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",
203
    X"AC",X"AC",X"03",X"34",X"8C",X"8C",X"8C",X"8C",
204
    X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",
205
    X"00",X"03",X"34",X"00",X"00",X"00",X"03",X"AC",
206
    X"00",X"03",X"00",X"3C",X"27",X"AF",X"0C",X"24",
207
    X"3C",X"0C",X"24",X"3C",X"8F",X"24",X"08",X"27",
208
    X"3C",X"8C",X"00",X"30",X"10",X"3C",X"AC",X"03",
209
    X"00",X"90",X"00",X"10",X"24",X"3C",X"3C",X"24",
210
    X"10",X"00",X"24",X"8C",X"00",X"30",X"10",X"00",
211
    X"AC",X"90",X"00",X"14",X"00",X"03",X"00",X"8C",
212
    X"00",X"30",X"10",X"00",X"AC",X"08",X"24",X"24",
213
    X"3C",X"3C",X"24",X"00",X"30",X"2C",X"10",X"00",
214
    X"8C",X"00",X"30",X"10",X"00",X"24",X"24",X"AD",
215
    X"14",X"00",X"03",X"00",X"8C",X"00",X"30",X"10",
216
    X"00",X"24",X"24",X"AD",X"14",X"00",X"03",X"00",
217
    X"3C",X"8C",X"00",X"30",X"10",X"3C",X"24",X"AC",
218
    X"03",X"00",X"3C",X"8C",X"03",X"30",X"3C",X"8C",
219
    X"00",X"30",X"10",X"3C",X"8C",X"03",X"00",X"00",
220
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
221
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
222
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
223
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
224
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
225
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
226
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
227
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
228
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
229
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
230
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
231
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
232
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
233
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
234
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
235
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
236
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
237
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
238
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
239
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
240
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
241
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
242
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
243
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
244
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
245
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
246
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
247
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
248
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
249
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
250
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
251
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
252
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
253
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
254
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
255
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
256
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
257
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
258
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
259
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
260
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
261
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
262
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
263
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
264
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
265
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
266
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
267
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
268
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
269
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
270
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
271
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
272
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
273
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
274
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
275
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
276
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
277
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
278
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
279
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
280
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
281
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
282
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
283
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
284
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
285
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
286
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
287
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
288
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
289
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
290
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
291
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
292
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
293
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
294
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
295
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
296
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
297
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
298
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
299
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
300
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
301
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
302
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
303
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
304
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
305
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
306
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
307
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
308
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
309
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
310
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
311
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
312
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
313
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
314
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
315
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
316
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
317
    );
318
signal rom2 : t_code_ram := (    X"1C",X"9C",X"05",X"A5",X"04",X"84",X"1D",X"BD",
319
    X"A0",X"A4",X"60",X"A5",X"00",X"00",X"00",X"BD",
320
    X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",X"A8",
321
    X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",X"B8",
322
    X"B9",X"BF",X"1A",X"5A",X"BA",X"00",X"BB",X"00",
323
    X"BB",X"06",X"C4",X"00",X"C6",X"00",X"86",X"00",
324
    X"A5",X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",
325
    X"A8",X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",
326
    X"B8",X"B9",X"BF",X"BA",X"BB",X"00",X"60",X"BB",
327
    X"00",X"60",X"BD",X"1B",X"40",X"9B",X"02",X"E0",
328
    X"84",X"00",X"00",X"05",X"A5",X"A6",X"00",X"06",
329
    X"A6",X"00",X"06",X"A6",X"00",X"06",X"A6",X"00",
330
    X"E0",X"06",X"1A",X"5A",X"40",X"00",X"90",X"91",
331
    X"92",X"93",X"94",X"95",X"96",X"97",X"9E",X"9C",
332
    X"9D",X"9F",X"E0",X"02",X"90",X"91",X"92",X"93",
333
    X"94",X"95",X"96",X"97",X"9E",X"9C",X"9D",X"9F",
334
    X"00",X"E0",X"A2",X"85",X"00",X"00",X"E0",X"C4",
335
    X"00",X"E0",X"00",X"04",X"BD",X"BF",X"00",X"84",
336
    X"04",X"00",X"84",X"04",X"BF",X"84",X"00",X"BD",
337
    X"03",X"62",X"00",X"42",X"40",X"02",X"44",X"E0",
338
    X"00",X"85",X"00",X"A0",X"07",X"03",X"06",X"08",
339
    X"A7",X"00",X"84",X"62",X"00",X"42",X"40",X"00",
340
    X"C5",X"85",X"00",X"A0",X"00",X"E0",X"00",X"62",
341
    X"00",X"42",X"40",X"00",X"C8",X"00",X"84",X"05",
342
    X"02",X"08",X"07",X"A4",X"C6",X"C3",X"60",X"00",
343
    X"43",X"00",X"63",X"60",X"00",X"C6",X"A5",X"06",
344
    X"A7",X"A4",X"E0",X"00",X"43",X"00",X"63",X"60",
345
    X"00",X"C6",X"A5",X"06",X"A7",X"A4",X"E0",X"00",
346
    X"03",X"62",X"00",X"42",X"40",X"02",X"03",X"43",
347
    X"E0",X"00",X"02",X"42",X"E0",X"42",X"03",X"62",
348
    X"00",X"42",X"40",X"02",X"42",X"E0",X"00",X"00",
349
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
350
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
351
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
352
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
353
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
354
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
355
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
356
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
357
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
358
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
359
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
360
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
361
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
362
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
363
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
364
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
365
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
366
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
367
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
368
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
369
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
370
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
371
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
372
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
373
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
374
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
375
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
376
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
377
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
378
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
379
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
380
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
381
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
382
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
383
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
384
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
385
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
386
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
387
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
388
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
389
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
390
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
391
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
392
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
393
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
394
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
395
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
396
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
397
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
398
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
399
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
400
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
401
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
402
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
403
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
404
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
405
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
406
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
407
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
408
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
409
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
410
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
411
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
412
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
413
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
414
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
415
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
416
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
417
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
418
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
419
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
420
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
421
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
422
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
423
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
424
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
425
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
426
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
427
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
428
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
429
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
430
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
431
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
432
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
433
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
434
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
435
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
436
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
437
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
438
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
439
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
440
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
441
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
442
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
443
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
444
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
445
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
446
    );
447
signal rom1 : t_code_ram := (    X"00",X"7F",X"00",X"00",X"00",X"02",X"00",X"02",
448
    X"00",X"18",X"FF",X"00",X"00",X"00",X"00",X"FF",
449
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
450
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
451
    X"00",X"00",X"70",X"FF",X"00",X"D8",X"00",X"D8",
452
    X"00",X"20",X"00",X"00",X"00",X"00",X"20",X"00",
453
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
454
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
455
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
456
    X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",
457
    X"60",X"00",X"00",X"00",X"01",X"00",X"00",X"00",
458
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
459
    X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",
460
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
461
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
462
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
463
    X"00",X"00",X"00",X"00",X"10",X"20",X"00",X"00",
464
    X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"00",
465
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
466
    X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
467
    X"10",X"00",X"00",X"00",X"00",X"20",X"20",X"00",
468
    X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",
469
    X"00",X"00",X"00",X"FF",X"00",X"00",X"10",X"00",
470
    X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",
471
    X"20",X"20",X"FF",X"30",X"00",X"00",X"00",X"00",
472
    X"00",X"00",X"00",X"FF",X"00",X"00",X"FF",X"00",
473
    X"FF",X"30",X"00",X"00",X"00",X"00",X"00",X"FF",
474
    X"00",X"00",X"FF",X"00",X"FF",X"30",X"00",X"00",
475
    X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
476
    X"00",X"00",X"20",X"00",X"00",X"00",X"20",X"00",
477
    X"00",X"00",X"FF",X"20",X"00",X"00",X"00",X"00",
478
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
479
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
480
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
481
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
482
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
483
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
484
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
485
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
486
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
487
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
488
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
489
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
490
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
491
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
492
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
493
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
494
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
495
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
496
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
497
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
498
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
499
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
500
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
501
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
502
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
503
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
504
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
505
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
506
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
507
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
508
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
509
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
510
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
511
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
512
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
513
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
514
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
515
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
516
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
517
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
518
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
519
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
520
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
521
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
522
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
523
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
524
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
525
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
526
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
527
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
528
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
529
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
530
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
531
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
532
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
533
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
534
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
535
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
536
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
537
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
538
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
539
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
540
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
541
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
542
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
543
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
544
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
545
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
546
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
547
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
548
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
549
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
550
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
551
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
552
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
553
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
554
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
555
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
556
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
557
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
558
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
559
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
560
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
561
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
562
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
563
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
564
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
565
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
566
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
567
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
568
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
569
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
570
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
571
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
572
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
573
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
574
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
575
    );
576
signal rom0 : t_code_ram := (    X"01",X"F0",X"01",X"58",X"01",X"60",X"01",X"48",
577
    X"00",X"2A",X"FD",X"04",X"8B",X"00",X"0E",X"98",
578
    X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
579
    X"30",X"34",X"38",X"3C",X"40",X"44",X"48",X"4C",
580
    X"50",X"54",X"00",X"FC",X"58",X"10",X"5C",X"12",
581
    X"60",X"00",X"20",X"00",X"10",X"00",X"24",X"E0",
582
    X"00",X"10",X"14",X"18",X"1C",X"20",X"24",X"28",
583
    X"2C",X"30",X"34",X"38",X"3C",X"40",X"44",X"48",
584
    X"4C",X"50",X"54",X"58",X"5C",X"00",X"11",X"60",
585
    X"00",X"13",X"68",X"01",X"08",X"00",X"00",X"08",
586
    X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"3C",
587
    X"04",X"00",X"40",X"08",X"00",X"44",X"0C",X"00",
588
    X"08",X"48",X"00",X"3C",X"08",X"00",X"00",X"04",
589
    X"08",X"0C",X"10",X"14",X"18",X"1C",X"20",X"24",
590
    X"28",X"2C",X"08",X"00",X"00",X"04",X"08",X"0C",
591
    X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
592
    X"00",X"08",X"00",X"19",X"12",X"10",X"08",X"00",
593
    X"0C",X"08",X"00",X"01",X"E8",X"14",X"A1",X"00",
594
    X"01",X"A1",X"28",X"01",X"14",X"40",X"A1",X"18",
595
    X"00",X"20",X"00",X"02",X"FC",X"00",X"00",X"08",
596
    X"21",X"00",X"00",X"11",X"0A",X"00",X"00",X"0D",
597
    X"0E",X"00",X"01",X"20",X"00",X"02",X"FC",X"00",
598
    X"00",X"00",X"00",X"F4",X"00",X"08",X"21",X"20",
599
    X"00",X"02",X"FC",X"00",X"00",X"AB",X"01",X"1C",
600
    X"00",X"00",X"FC",X"06",X"0F",X"0A",X"0D",X"00",
601
    X"20",X"00",X"02",X"FC",X"00",X"30",X"FC",X"00",
602
    X"F3",X"06",X"08",X"00",X"20",X"00",X"02",X"FC",
603
    X"00",X"57",X"FC",X"00",X"E7",X"06",X"08",X"00",
604
    X"00",X"20",X"00",X"02",X"FC",X"00",X"49",X"00",
605
    X"08",X"00",X"00",X"20",X"08",X"01",X"00",X"20",
606
    X"00",X"01",X"FC",X"00",X"00",X"08",X"00",X"00",
607
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
608
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
609
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
610
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
611
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
612
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
613
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
614
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
615
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
616
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
617
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
618
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
619
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
620
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
621
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
622
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
623
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
624
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
625
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
626
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
627
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
628
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
629
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
630
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
631
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
632
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
633
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
634
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
635
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
636
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
637
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
638
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
639
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
640
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
641
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
642
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
643
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
644
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
645
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
646
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
647
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
648
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
649
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
650
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
651
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
652
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
653
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
654
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
655
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
656
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
657
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
658
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
659
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
660
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
661
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
662
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
663
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
664
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
665
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
666
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
667
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
668
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
669
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
670
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
671
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
672
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
673
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
674
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
675
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
676
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
677
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
678
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
679
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
680
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
681
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
682
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
683
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
684
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
685
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
686
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
687
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
688
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
689
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
690
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
691
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
692
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
693
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
694
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
695
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
696
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
697
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
698
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
699
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
700
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
701
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
702
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
703
    X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
704
    );
705
 
706
--------------------------------------------------------------------------------
707
 
708
signal reset_sync :         std_logic_vector(2 downto 0);
709
signal cpu_rd_addr :        std_logic_vector(31 downto 0);
710
signal prev_rd_addr :       std_logic_vector(31 downto 28);
711
signal cpu_vma_data :       std_logic;
712
signal cpu_vma_code :       std_logic;
713
signal cpu_wr_addr :        std_logic_vector(31 downto 2);
714
signal cpu_byte_we :        std_logic_vector(3 downto 0);
715
signal cpu_data_r :         std_logic_vector(31 downto 0);
716
signal data_ram :           std_logic_vector(31 downto 0);
717
signal data_uart :          std_logic_vector(31 downto 0);
718
signal data_uart_status :   std_logic_vector(31 downto 0);
719
signal uart_tx_rdy :        std_logic;
720
signal uart_rx_rdy :        std_logic;
721
signal uart_write_tx :      std_logic;
722
signal uart_read_rx :       std_logic;
723
signal cpu_data_w :         std_logic_vector(31 downto 0);
724
signal cpu_code_addr :      std_logic_vector(31 downto 2);
725
signal cpu_code_r :         std_logic_vector(31 downto 0);
726
 
727
 
728
begin
729
 
730
    cpu: entity work.mips_cpu
731
    port map (
732
        interrupt   => '0',
733
 
734
        data_rd_addr=> cpu_rd_addr,
735
        data_rd_vma => cpu_vma_data,
736
        data_rd     => cpu_data_r,
737
 
738
        code_rd_addr=> cpu_code_addr,
739
        code_rd     => cpu_code_r,
740
        code_rd_vma => cpu_vma_code,
741
 
742
        data_wr_addr=> cpu_wr_addr,
743
        data_wr     => cpu_data_w,
744
        byte_we     => cpu_byte_we,
745
 
746
        mem_wait    => '0',
747
 
748
        clk         => clk,
749
        reset       => reset_sync(0)
750
    );
751
 
752
 
753
    -- RAM vs. IO data read mux
754
    cpu_data_r <= data_ram when prev_rd_addr/=X"2" else data_uart;
755
 
756
 
757
    -- Take the slices of the addr buses that will reach the ram blocks
758
    data_addr_rd <= cpu_rd_addr(DATA_ADDR_SIZE-1+2 downto 2);
759
    data_addr_wr <= cpu_wr_addr(DATA_ADDR_SIZE-1+2 downto 2);
760
    code_addr_rd <= cpu_code_addr(CODE_ADDR_SIZE-1+2 downto 2);
761
 
762
 
763
    data_ram_block:
764
    process(clk)
765
    begin
766
        if clk'event and clk='1' then
767
            prev_rd_addr <= cpu_rd_addr(31 downto 28);
768
 
769
            data_ram <=
770
                ram3(conv_integer(unsigned(data_addr_rd))) &
771
                ram2(conv_integer(unsigned(data_addr_rd))) &
772
                ram1(conv_integer(unsigned(data_addr_rd))) &
773
                ram0(conv_integer(unsigned(data_addr_rd)));
774
 
775
            if cpu_byte_we/="0000" and cpu_wr_addr(31 downto 28)/=X"2" then
776
                -- Write to RAM
777
                if cpu_byte_we(3)='1' then
778
                    ram3(conv_integer(unsigned(data_addr_wr))) <= cpu_data_w(31 downto 24);
779
                end if;
780
                if cpu_byte_we(2)='1' then
781
                    ram2(conv_integer(unsigned(data_addr_wr))) <= cpu_data_w(23 downto 16);
782
                end if;
783
                if cpu_byte_we(1)='1' then
784
                    ram1(conv_integer(unsigned(data_addr_wr))) <= cpu_data_w(15 downto  8);
785
                end if;
786
                if cpu_byte_we(0)='1' then
787
                    ram0(conv_integer(unsigned(data_addr_wr))) <= cpu_data_w( 7 downto  0);
788
                end if;
789
            end if;
790
        end if;
791
    end process data_ram_block;
792
 
793
    code_ram_block:
794
    process(clk)
795
    begin
796
        if clk'event and clk='1' then
797
            cpu_code_r <=
798
                rom3(conv_integer(unsigned(code_addr_rd))) &
799
                rom2(conv_integer(unsigned(code_addr_rd))) &
800
                rom1(conv_integer(unsigned(code_addr_rd))) &
801
                rom0(conv_integer(unsigned(code_addr_rd)));
802
        end if;
803
    end process code_ram_block;
804
 
805
    reset_synchronization:
806
    process(clk)
807
    begin
808
        if clk'event and clk='1' then
809
            reset_sync(2) <= reset;
810
            reset_sync(1) <= reset_sync(2);
811
            reset_sync(0) <= reset_sync(1);
812
        end if;
813
    end process reset_synchronization;
814
 
815
--------------------------------------------------------------------------------
816
 
817
data_w <= cpu_data_w;
818
wr_addr <= cpu_wr_addr;
819
vma_data <= cpu_vma_data;
820
 
821
--------------------------------------------------------------------------------
822
 
823
serial_rx : entity work.rs232_rx port map(
824
    rxd =>      uart_rxd,
825
    data_rx =>  OPEN, --rs232_data_rx,
826
    rx_rdy =>   uart_rx_rdy,
827
    read_rx =>  '1', --read_rx,
828
    clk =>      clk,
829
    reset =>    reset_sync(0)
830
);
831
 
832
 
833
uart_write_tx <= '1' when cpu_byte_we/="0000" and cpu_wr_addr(31 downto 28)=X"2"
834
                 else '0';
835
 
836
serial_tx : entity work.rs232_tx port map(
837
    clk =>      clk,
838
    reset =>    reset_sync(0),
839
    rdy =>      uart_tx_rdy,
840
    load =>     uart_write_tx,
841
    data_i =>   cpu_data_w(7 downto 0),
842
    txd =>      uart_txd
843
);
844
 
845
-- UART read registers; only status, and hardwired, for the time being
846
data_uart <= data_uart_status; -- FIXEM no data rx yet
847
data_uart_status <= X"0000000" & "00" & uart_tx_rdy & uart_rx_rdy;
848
 
849
 
850
end architecture rtl;

powered by: WebSVN 2.1.0

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