1 |
2 |
tarookumic |
-------------------------------------------------------------------------------
|
2 |
|
|
--
|
3 |
|
|
-- ROM core VHDL template. See the macro description included
|
4 |
|
|
-- behind this frame.
|
5 |
|
|
--
|
6 |
|
|
-- Copyright (C) 2000 Rudolf Matousek <matousek@utia.cas.cz>
|
7 |
|
|
--
|
8 |
|
|
-- Modified by Jiri Gaisler <jgais@ws.estec.esa.nl> for LEON boot prom.
|
9 |
|
|
--
|
10 |
|
|
-- This code may be used under the terms of Version 2 of the GPL,
|
11 |
|
|
-- read the file COPYING for details.
|
12 |
|
|
--
|
13 |
|
|
--
|
14 |
|
|
-------------------------------------------------------------------------------
|
15 |
|
|
|
16 |
|
|
library ieee;
|
17 |
|
|
use ieee.std_logic_1164.all;
|
18 |
|
|
use ieee.std_logic_arith.all;
|
19 |
|
|
|
20 |
|
|
entity gen_bprom is
|
21 |
|
|
port(
|
22 |
|
|
clk : in std_logic;
|
23 |
|
|
csn : in std_logic;
|
24 |
|
|
addr : in std_logic_vector (29 downto 0);
|
25 |
|
|
data : out std_logic_vector (31 downto 0)
|
26 |
|
|
);
|
27 |
|
|
end;
|
28 |
|
|
|
29 |
|
|
architecture rtl of gen_bprom is
|
30 |
|
|
signal raddr : std_logic_vector(9 downto 0);
|
31 |
|
|
signal d : std_logic_vector(31 downto 0);
|
32 |
|
|
attribute syn_romstyle : string;
|
33 |
|
|
attribute syn_romstyle of d : signal is "select_rom";
|
34 |
|
|
|
35 |
|
|
begin
|
36 |
|
|
|
37 |
|
|
p : process(raddr)
|
38 |
|
|
begin
|
39 |
|
|
case raddr is
|
40 |
|
|
when "0000000000" => d <= "10000001100010000010000011100000";
|
41 |
|
|
when "0000000001" => d <= "10000001100100000010000000000010";
|
42 |
|
|
when "0000000010" => d <= "10000001110110000010000000000000";
|
43 |
|
|
when "0000000011" => d <= "00000011000000000000000001000000";
|
44 |
|
|
when "0000000100" => d <= "10000010000100000110000000001111";
|
45 |
|
|
when "0000000101" => d <= "00010001001000000000000000000000";
|
46 |
|
|
when "0000000110" => d <= "10001000001000100010000000010000";
|
47 |
|
|
when "0000000111" => d <= "11000010001000100010000000010100";
|
48 |
|
|
when "0000001000" => d <= "11010010000000100010000000100100";
|
49 |
|
|
when "0000001001" => d <= "10010010000010100110000000010000";
|
50 |
|
|
when "0000001010" => d <= "10010011001010100110000000001000";
|
51 |
|
|
when "0000001011" => d <= "10000001100010100110000011100000";
|
52 |
|
|
when "0000001100" => d <= "00010011000000000000000000101010";
|
53 |
|
|
when "0000001101" => d <= "10010010000100100110001000000000";
|
54 |
|
|
when "0000001110" => d <= "11010010001000100010000010100100";
|
55 |
|
|
when "0000001111" => d <= "11000000001000100010000001110100";
|
56 |
|
|
when "0000010000" => d <= "11000000001000100010000010000100";
|
57 |
|
|
when "0000010001" => d <= "10010010000100000010000000000011";
|
58 |
|
|
when "0000010010" => d <= "11010010001000100010000001111000";
|
59 |
|
|
when "0000010011" => d <= "11010010001000100010000010001000";
|
60 |
|
|
when "0000010100" => d <= "10010010000100000011111111111111";
|
61 |
|
|
when "0000010101" => d <= "11010010001000100010000001000100";
|
62 |
|
|
when "0000010110" => d <= "10010010000100000010000000000111";
|
63 |
|
|
when "0000010111" => d <= "11010010001000100010000001001000";
|
64 |
|
|
when "0000011000" => d <= "00010011000100000000000000000000";
|
65 |
|
|
when "0000011001" => d <= "11010100000000100010000000000100";
|
66 |
|
|
when "0000011010" => d <= "10010100000010101010000000001111";
|
67 |
|
|
when "0000011011" => d <= "00010111000000000000000000000111";
|
68 |
|
|
when "0000011100" => d <= "10010110000100101110001000100000";
|
69 |
|
|
when "0000011101" => d <= "10010100000100101100000000001010";
|
70 |
|
|
when "0000011110" => d <= "11010100001000100010000000000100";
|
71 |
|
|
when "0000011111" => d <= "00010111000000000100100011010001";
|
72 |
|
|
when "0000100000" => d <= "10010110000100101110000101100111";
|
73 |
|
|
when "0000100001" => d <= "11010110001000100100000000000000";
|
74 |
|
|
when "0000100010" => d <= "11000000001000100110000000000100";
|
75 |
|
|
when "0000100011" => d <= "11011000100000100100000000000000";
|
76 |
|
|
when "0000100100" => d <= "10000000101000101100000000001100";
|
77 |
|
|
when "0000100101" => d <= "00000010100000000000000000001101";
|
78 |
|
|
when "0000100110" => d <= "11000000001000100100000000000000";
|
79 |
|
|
when "0000100111" => d <= "10010100001000101010000000010000";
|
80 |
|
|
when "0000101000" => d <= "11010100001000100010000000000100";
|
81 |
|
|
when "0000101001" => d <= "11010110001000100100000000000000";
|
82 |
|
|
when "0000101010" => d <= "11000000001000100110000000000100";
|
83 |
|
|
when "0000101011" => d <= "11011000100000100100000000000000";
|
84 |
|
|
when "0000101100" => d <= "10000000101000101100000000001100";
|
85 |
|
|
when "0000101101" => d <= "00000010100000000000000000000101";
|
86 |
|
|
when "0000101110" => d <= "00000001000000000000000000000000";
|
87 |
|
|
when "0000101111" => d <= "10010100001000101010000000010000";
|
88 |
|
|
when "0000110000" => d <= "00010000100000000000000000001010";
|
89 |
|
|
when "0000110001" => d <= "11010100001000100010000000000100";
|
90 |
|
|
when "0000110010" => d <= "11010110001000100100000000000000";
|
91 |
|
|
when "0000110011" => d <= "11000000001010100110000000000011";
|
92 |
|
|
when "0000110100" => d <= "11011000100000100100000000000000";
|
93 |
|
|
when "0000110101" => d <= "10000000101000101100000000001100";
|
94 |
|
|
when "0000110110" => d <= "00010010100000000000000000000100";
|
95 |
|
|
when "0000110111" => d <= "00000001000000000000000000000000";
|
96 |
|
|
when "0000111000" => d <= "10010100000100101010000001000000";
|
97 |
|
|
when "0000111001" => d <= "11010100001000100010000000000100";
|
98 |
|
|
when "0000111010" => d <= "00000101000001000000000000000000";
|
99 |
|
|
when "0000111011" => d <= "11010110001000010000000000000000";
|
100 |
|
|
when "0000111100" => d <= "11000000001000010011111111111100";
|
101 |
|
|
when "0000111101" => d <= "11011010100000010000000000000000";
|
102 |
|
|
when "0000111110" => d <= "10000000101000110100000000001011";
|
103 |
|
|
when "0000111111" => d <= "00110010101111111111111111111100";
|
104 |
|
|
when "0001000000" => d <= "10001000101000010000000000000010";
|
105 |
|
|
when "0001000001" => d <= "10001011001100010010000000011100";
|
106 |
|
|
when "0001000010" => d <= "10001010001000010110000000000100";
|
107 |
|
|
when "0001000011" => d <= "10010010000000001000000000001001";
|
108 |
|
|
when "0001000100" => d <= "10010010001000100110000000010000";
|
109 |
|
|
when "0001000101" => d <= "11010110001000100100000000000000";
|
110 |
|
|
when "0001000110" => d <= "10000101001100001010000000000001";
|
111 |
|
|
when "0001000111" => d <= "10010100001000101010001000000000";
|
112 |
|
|
when "0001001000" => d <= "11010100001000100010000000000100";
|
113 |
|
|
when "0001001001" => d <= "10010010001000100100000000000010";
|
114 |
|
|
when "0001001010" => d <= "11011010100000100100000000000000";
|
115 |
|
|
when "0001001011" => d <= "10000000101000110100000000001011";
|
116 |
|
|
when "0001001100" => d <= "00000010101111111111111111111010";
|
117 |
|
|
when "0001001101" => d <= "00000001000000000000000000000000";
|
118 |
|
|
when "0001001110" => d <= "10010100000000101010001000000000";
|
119 |
|
|
when "0001001111" => d <= "11010100001000100010000000000100";
|
120 |
|
|
when "0001010000" => d <= "00001001000100000000000000000000";
|
121 |
|
|
when "0001010001" => d <= "10010010000000100100000000000010";
|
122 |
|
|
when "0001010010" => d <= "10010010001010100100000000000100";
|
123 |
|
|
when "0001010011" => d <= "10010011001010100100000000000101";
|
124 |
|
|
when "0001010100" => d <= "10011100000100100100000000000100";
|
125 |
|
|
when "0001010101" => d <= "10010111001010010110000000000001";
|
126 |
|
|
when "0001010110" => d <= "01000000000000000000000000011011";
|
127 |
|
|
when "0001010111" => d <= "10010000000100000010001101110100";
|
128 |
|
|
when "0001011000" => d <= "10010010000100000010001101101100";
|
129 |
|
|
when "0001011001" => d <= "01000000000000000000000000011000";
|
130 |
|
|
when "0001011010" => d <= "10010000000000101100000000001001";
|
131 |
|
|
when "0001011011" => d <= "10010010000100000010001100111100";
|
132 |
|
|
when "0001011100" => d <= "10001011001100101010000000000110";
|
133 |
|
|
when "0001011101" => d <= "10001010001000010110000000100000";
|
134 |
|
|
when "0001011110" => d <= "10001010001010010110000000000001";
|
135 |
|
|
when "0001011111" => d <= "01000000000000000000000000010010";
|
136 |
|
|
when "0001100000" => d <= "10010000000000100100000000000101";
|
137 |
|
|
when "0001100001" => d <= "10010010000100000010001100110000";
|
138 |
|
|
when "0001100010" => d <= "10001011001100101010000000000010";
|
139 |
|
|
when "0001100011" => d <= "10001010000010010110000000001100";
|
140 |
|
|
when "0001100100" => d <= "01000000000000000000000000001101";
|
141 |
|
|
when "0001100101" => d <= "10010000000000100100000000000101";
|
142 |
|
|
when "0001100110" => d <= "01000000000000000000000000001011";
|
143 |
|
|
when "0001100111" => d <= "10010000000100000010001101111101";
|
144 |
|
|
when "0001101000" => d <= "10000000100010101010000001000000";
|
145 |
|
|
when "0001101001" => d <= "00000010100000000000000000000100";
|
146 |
|
|
when "0001101010" => d <= "00000001000000000000000000000000";
|
147 |
|
|
when "0001101011" => d <= "01000000000000000000000000000110";
|
148 |
|
|
when "0001101100" => d <= "10010000000100000010001110001000";
|
149 |
|
|
when "0001101101" => d <= "01000000000000000000000000000100";
|
150 |
|
|
when "0001101110" => d <= "10010000000100000010001110001110";
|
151 |
|
|
when "0001101111" => d <= "01000000000000000000000000100101";
|
152 |
|
|
when "0001110000" => d <= "00000001000000000000000000000000";
|
153 |
|
|
when "0001110001" => d <= "11000100000010100000000000000000";
|
154 |
|
|
when "0001110010" => d <= "10000000101000001010000000000000";
|
155 |
|
|
when "0001110011" => d <= "00000010100000000000000000001101";
|
156 |
|
|
when "0001110100" => d <= "00010011001000000000000000000000";
|
157 |
|
|
when "0001110101" => d <= "11000110000010100000000000000000";
|
158 |
|
|
when "0001110110" => d <= "10010000000000100010000000000001";
|
159 |
|
|
when "0001110111" => d <= "11000100000000100110000001110100";
|
160 |
|
|
when "0001111000" => d <= "10000000100010001010000000000100";
|
161 |
|
|
when "0001111001" => d <= "00000010101111111111111111111110";
|
162 |
|
|
when "0001111010" => d <= "10000100000010001110000011111111";
|
163 |
|
|
when "0001111011" => d <= "11000100001000100110000001110000";
|
164 |
|
|
when "0001111100" => d <= "11000100000010100000000000000000";
|
165 |
|
|
when "0001111101" => d <= "10000000101000001010000000000000";
|
166 |
|
|
when "0001111110" => d <= "00110010101111111111111111111000";
|
167 |
|
|
when "0001111111" => d <= "11000110000010100000000000000000";
|
168 |
|
|
when "0010000000" => d <= "10000001110000111110000000001000";
|
169 |
|
|
when "0010000001" => d <= "00000001000000000000000000000000";
|
170 |
|
|
when "0010000010" => d <= "10010110000100000000000000001000";
|
171 |
|
|
when "0010000011" => d <= "10010000000100000010000000000000";
|
172 |
|
|
when "0010000100" => d <= "10000000101000100000000000001011";
|
173 |
|
|
when "0010000101" => d <= "00011010100000000000000000001101";
|
174 |
|
|
when "0010000110" => d <= "10010100000100000010000000000000";
|
175 |
|
|
when "0010000111" => d <= "11000100000010100100000000001010";
|
176 |
|
|
when "0010001000" => d <= "10000000101000001010000001000000";
|
177 |
|
|
when "0010001001" => d <= "00101000100000000000000000000011";
|
178 |
|
|
when "0010001010" => d <= "10000100000000001011111111010000";
|
179 |
|
|
when "0010001011" => d <= "10000100000000001011111111001001";
|
180 |
|
|
when "0010001100" => d <= "10000111001010100010000000000100";
|
181 |
|
|
when "0010001101" => d <= "10000100000010001010000011111111";
|
182 |
|
|
when "0010001110" => d <= "10010100000000101010000000000001";
|
183 |
|
|
when "0010001111" => d <= "10000000101000101000000000001011";
|
184 |
|
|
when "0010010000" => d <= "00001010101111111111111111110111";
|
185 |
|
|
when "0010010001" => d <= "10010000000100001100000000000010";
|
186 |
|
|
when "0010010010" => d <= "10000001110000111110000000001000";
|
187 |
|
|
when "0010010011" => d <= "00000001000000000000000000000000";
|
188 |
|
|
when "0010010100" => d <= "10011101111000111011111010011000";
|
189 |
|
|
when "0010010101" => d <= "00101001001000000000000000000000";
|
190 |
|
|
when "0010010110" => d <= "10101100000001111011111011111100";
|
191 |
|
|
when "0010010111" => d <= "10101010000001111011111100000100";
|
192 |
|
|
when "0010011000" => d <= "10010100000001111011111011111000";
|
193 |
|
|
when "0010011001" => d <= "11010000000001010010000001110100";
|
194 |
|
|
when "0010011010" => d <= "10000000100010100010000000000001";
|
195 |
|
|
when "0010011011" => d <= "00000010101111111111111111111110";
|
196 |
|
|
when "0010011100" => d <= "00000001000000000000000000000000";
|
197 |
|
|
when "0010011101" => d <= "11010000000001010010000001110000";
|
198 |
|
|
when "0010011110" => d <= "10010010000010100010000011111111";
|
199 |
|
|
when "0010011111" => d <= "10000000101000100110000000001101";
|
200 |
|
|
when "0010100000" => d <= "00000010100000000000000000000101";
|
201 |
|
|
when "0010100001" => d <= "11010000001010101000000000000000";
|
202 |
|
|
when "0010100010" => d <= "10000000101000100110000000001010";
|
203 |
|
|
when "0010100011" => d <= "00010010101111111111111111110110";
|
204 |
|
|
when "0010100100" => d <= "10010100000000101010000000000001";
|
205 |
|
|
when "0010100101" => d <= "11010000000011111011111011111000";
|
206 |
|
|
when "0010100110" => d <= "10000000101000100010000001010011";
|
207 |
|
|
when "0010100111" => d <= "00010010101111111111111111110010";
|
208 |
|
|
when "0010101000" => d <= "10010100000001111011111011111000";
|
209 |
|
|
when "0010101001" => d <= "10010000000100000010000000001000";
|
210 |
|
|
when "0010101010" => d <= "01111111111111111111111111011000";
|
211 |
|
|
when "0010101011" => d <= "10010010000100000000000000010110";
|
212 |
|
|
when "0010101100" => d <= "10100110000100000000000000001000";
|
213 |
|
|
when "0010101101" => d <= "11010000000011111011111011111001";
|
214 |
|
|
when "0010101110" => d <= "10000000101000100010000000110011";
|
215 |
|
|
when "0010101111" => d <= "00010010100000000000000000010111";
|
216 |
|
|
when "0010110000" => d <= "10000000101000100010000000110111";
|
217 |
|
|
when "0010110001" => d <= "10010000000100000010000000000010";
|
218 |
|
|
when "0010110010" => d <= "01111111111111111111111111010000";
|
219 |
|
|
when "0010110011" => d <= "10010010000001111011111011111010";
|
220 |
|
|
when "0010110100" => d <= "10010001001010100010000000000001";
|
221 |
|
|
when "0010110101" => d <= "10010000000000100011111111110110";
|
222 |
|
|
when "0010110110" => d <= "10100101001100100010000000000001";
|
223 |
|
|
when "0010110111" => d <= "10100010000100000010000000000000";
|
224 |
|
|
when "0010111000" => d <= "10000000101001000100000000010010";
|
225 |
|
|
when "0010111001" => d <= "00010110101111111111111111100000";
|
226 |
|
|
when "0010111010" => d <= "10010100000001111011111011111000";
|
227 |
|
|
when "0010111011" => d <= "10100000000100000000000000010101";
|
228 |
|
|
when "0010111100" => d <= "10010010000100000000000000010000";
|
229 |
|
|
when "0010111101" => d <= "01111111111111111111111111000101";
|
230 |
|
|
when "0010111110" => d <= "10010000000100000010000000000010";
|
231 |
|
|
when "0010111111" => d <= "11010000001011001100000000010001";
|
232 |
|
|
when "0011000000" => d <= "10100010000001000110000000000001";
|
233 |
|
|
when "0011000001" => d <= "10000000101001000100000000010010";
|
234 |
|
|
when "0011000010" => d <= "00000110101111111111111111111010";
|
235 |
|
|
when "0011000011" => d <= "10100000000001000010000000000010";
|
236 |
|
|
when "0011000100" => d <= "00010000101111111111111111010101";
|
237 |
|
|
when "0011000101" => d <= "10010100000001111011111011111000";
|
238 |
|
|
when "0011000110" => d <= "00010010101111111111111111010011";
|
239 |
|
|
when "0011000111" => d <= "10010100000001111011111011111000";
|
240 |
|
|
when "0011001000" => d <= "10011111110001001100000000000000";
|
241 |
|
|
when "0011001001" => d <= "00000001000000000000000000000000";
|
242 |
|
|
when "0011001010" => d <= "00010000101111111111111111001111";
|
243 |
|
|
when "0011001011" => d <= "10010100000001111011111011111000";
|
244 |
|
|
when "0011001100" => d <= "00100000001110000010110100000000";
|
245 |
|
|
when "0011001101" => d <= "00110001001101100010110100000000";
|
246 |
|
|
when "0011001110" => d <= "00110011001100100010110100000000";
|
247 |
|
|
when "0011001111" => d <= "00101010001100010011001000111000";
|
248 |
|
|
when "0011010000" => d <= "01001011001000000000000000000000";
|
249 |
|
|
when "0011010001" => d <= "00101010001100100011010100110110";
|
250 |
|
|
when "0011010010" => d <= "01001011001000000000000000000000";
|
251 |
|
|
when "0011010011" => d <= "00101010001101010011000100110010";
|
252 |
|
|
when "0011010100" => d <= "01001011001000000000000000000000";
|
253 |
|
|
when "0011010101" => d <= "00101010001100010011000000110010";
|
254 |
|
|
when "0011010110" => d <= "00110100010010110010000000000000";
|
255 |
|
|
when "0011010111" => d <= "00101010001100100011000000110100";
|
256 |
|
|
when "0011011000" => d <= "00111000010010110010000000000000";
|
257 |
|
|
when "0011011001" => d <= "00101010001101000011000000111001";
|
258 |
|
|
when "0011011010" => d <= "00110110010010110010000000000000";
|
259 |
|
|
when "0011011011" => d <= "00110001000000000011001000000000";
|
260 |
|
|
when "0011011100" => d <= "00110011000000000011010000000000";
|
261 |
|
|
when "0011011101" => d <= "01001100010001010100111101001110";
|
262 |
|
|
when "0011011110" => d <= "00101101001100010011101000100000";
|
263 |
|
|
when "0011011111" => d <= "00000000011000100110100101110100";
|
264 |
|
|
when "0011100000" => d <= "00100000011011010110010101101101";
|
265 |
|
|
when "0011100001" => d <= "01101111011100100111100100000000";
|
266 |
|
|
when "0011100010" => d <= "00101100001000000111001001101101";
|
267 |
|
|
when "0011100011" => d <= "01110111000000000000101000001010";
|
268 |
|
|
when "0011100100" => d <= "00001101001111100010000000000000";
|
269 |
|
|
when "0011100101" => d <= "00000000000000000000000000000000";
|
270 |
|
|
|
271 |
|
|
when others => d <= (others => '-');
|
272 |
|
|
end case;
|
273 |
|
|
end process;
|
274 |
|
|
|
275 |
|
|
r : process (clk)
|
276 |
|
|
begin
|
277 |
|
|
if rising_edge(clk) then
|
278 |
|
|
if csn = '0' then raddr <= addr(9 downto 0); end if;
|
279 |
|
|
end if;
|
280 |
|
|
end process;
|
281 |
|
|
|
282 |
|
|
data <= d;
|
283 |
|
|
end rtl;
|