321 lines
8.4 KiB
VHDL
321 lines
8.4 KiB
VHDL
-------------------------------------------------------------------------
|
|
-- Project: JIPS, a portable 32-bit RISC CPU written in VHDL
|
|
-- This file: The ROM file for use in your VHDL design
|
|
--
|
|
-- Copyright (C) 2008 J. Ahrensfeld
|
|
--
|
|
-- This program is free software: you can redistribute it and/or modify
|
|
-- it under the terms of the GNU General Public License as published by
|
|
-- the Free Software Foundation, either version 3 of the License, or
|
|
-- (at your option) any later version.
|
|
--
|
|
-- This program is distributed in the hope that it will be useful,
|
|
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
-- GNU General Public License for more details.
|
|
--
|
|
-- You should have received a copy of the GNU General Public License
|
|
-- along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
--
|
|
-- For questions and ideas, please contact the author at jens@jayfield.org
|
|
--
|
|
--------------------------------------------------------------------------
|
|
|
|
LIBRARY ieee;
|
|
use IEEE.STD_LOGIC_1164.ALL;
|
|
USE ieee.numeric_std.ALL;
|
|
|
|
|
|
ENTITY rom IS
|
|
Generic
|
|
(
|
|
addr_width : integer := 2;
|
|
data_width : integer := 32
|
|
);
|
|
Port
|
|
(
|
|
clk : in STD_LOGIC;
|
|
addr : in unsigned(addr_width-1 downto 0);
|
|
dout : out unsigned(data_width-1 downto 0)
|
|
);
|
|
END rom;
|
|
|
|
ARCHITECTURE itest OF rom IS
|
|
|
|
subtype word_t is unsigned(data_width-1 downto 0);
|
|
type word_array_t is array (0 to 2**addr_width-1) of word_t;
|
|
|
|
-- Assembled from itest.jsm
|
|
constant word_array : word_array_t :=
|
|
(
|
|
X"3C1D7FFF", -- 00000000
|
|
X"0C100014", -- 00000004
|
|
X"37BDEFFC", -- 00000008
|
|
X"24080002", -- 0000000C
|
|
X"0107102A", -- 00000010
|
|
X"ACC40000", -- 00000014
|
|
X"1040000B", -- 00000018
|
|
X"ACC50004", -- 0000001C
|
|
X"24C60008", -- 00000020
|
|
X"24E8FFFE", -- 00000024
|
|
X"8CC2FFF8", -- 00000028
|
|
X"8CC3FFFC", -- 0000002C
|
|
X"2508FFFF", -- 00000030
|
|
X"00431021", -- 00000034
|
|
X"ACC20000", -- 00000038
|
|
X"1500FFFA", -- 0000003C
|
|
X"24C60004", -- 00000040
|
|
X"00E04021", -- 00000044
|
|
X"03E00008", -- 00000048
|
|
X"01001021", -- 0000004C
|
|
X"27BDFF78", -- 00000050
|
|
X"3C021003", -- 00000054
|
|
X"3C030001", -- 00000058
|
|
X"AFB60078", -- 0000005C
|
|
X"3456FFFC", -- 00000060
|
|
X"3C02AAAA", -- 00000064
|
|
X"AFB7007C", -- 00000068
|
|
X"AFB50074", -- 0000006C
|
|
X"AFB40070", -- 00000070
|
|
X"AFB20068", -- 00000074
|
|
X"AFB00060", -- 00000078
|
|
X"AFBF0080", -- 0000007C
|
|
X"AFB3006C", -- 00000080
|
|
X"AFB10064", -- 00000084
|
|
X"AEC00000", -- 00000088
|
|
X"3450AAAA", -- 0000008C
|
|
X"347786A0", -- 00000090
|
|
X"27B20010", -- 00000094
|
|
X"24150014", -- 00000098
|
|
X"3474869F", -- 0000009C
|
|
X"00009821", -- 000000A0
|
|
X"00002021", -- 000000A4
|
|
X"02401021", -- 000000A8
|
|
X"24060013", -- 000000AC
|
|
X"24C6FFFF", -- 000000B0
|
|
X"AC500000", -- 000000B4
|
|
X"04C1FFFD", -- 000000B8
|
|
X"24420004", -- 000000BC
|
|
X"02041026", -- 000000C0
|
|
X"24910001", -- 000000C4
|
|
X"24420001", -- 000000C8
|
|
X"02202821", -- 000000CC
|
|
X"27A60010", -- 000000D0
|
|
X"24070014", -- 000000D4
|
|
X"0C100003", -- 000000D8
|
|
X"00028040", -- 000000DC
|
|
X"24070002", -- 000000E0
|
|
X"26450008", -- 000000E4
|
|
X"0810003E", -- 000000E8
|
|
X"24060011", -- 000000EC
|
|
X"04C0000A", -- 000000F0
|
|
X"00000000", -- 000000F4
|
|
X"8CA20000", -- 000000F8
|
|
X"8CA3FFFC", -- 000000FC
|
|
X"8CA4FFF8", -- 00000100
|
|
X"00431023", -- 00000104
|
|
X"24C6FFFF", -- 00000108
|
|
X"1482FFF8", -- 0000010C
|
|
X"24A50004", -- 00000110
|
|
X"04C1FFF8", -- 00000114
|
|
X"24E70001", -- 00000118
|
|
X"10F5000C", -- 0000011C
|
|
X"00000000", -- 00000120
|
|
X"0291102A", -- 00000124
|
|
X"1040FFDF", -- 00000128
|
|
X"02202021", -- 0000012C
|
|
X"1677FFDB", -- 00000130
|
|
X"00009821", -- 00000134
|
|
X"8EC20000", -- 00000138
|
|
X"00000000", -- 0000013C
|
|
X"24420001", -- 00000140
|
|
X"AEC20000", -- 00000144
|
|
X"0810002A", -- 00000148
|
|
X"00002021", -- 0000014C
|
|
X"08100049", -- 00000150
|
|
X"26730001", -- 00000154
|
|
X"00000000", -- 00000158
|
|
X"00000000", -- 0000015C
|
|
X"00000000", -- 00000160
|
|
X"00000000", -- 00000164
|
|
X"00000000", -- 00000168
|
|
X"00000000", -- 0000016C
|
|
X"00000000", -- 00000170
|
|
X"00000000", -- 00000174
|
|
X"00000000", -- 00000178
|
|
X"00000000", -- 0000017C
|
|
X"00000000", -- 00000180
|
|
X"00000000", -- 00000184
|
|
X"00000000", -- 00000188
|
|
X"00000000", -- 0000018C
|
|
X"00000000", -- 00000190
|
|
X"00000000", -- 00000194
|
|
X"00000000", -- 00000198
|
|
X"00000000", -- 0000019C
|
|
X"00000000", -- 000001A0
|
|
X"00000000", -- 000001A4
|
|
X"00000000", -- 000001A8
|
|
X"00000000", -- 000001AC
|
|
X"00000000", -- 000001B0
|
|
X"00000000", -- 000001B4
|
|
X"00000000", -- 000001B8
|
|
X"00000000", -- 000001BC
|
|
X"00000000", -- 000001C0
|
|
X"00000000", -- 000001C4
|
|
X"00000000", -- 000001C8
|
|
X"00000000", -- 000001CC
|
|
X"00000000", -- 000001D0
|
|
X"00000000", -- 000001D4
|
|
X"00000000", -- 000001D8
|
|
X"00000000", -- 000001DC
|
|
X"00000000", -- 000001E0
|
|
X"00000000", -- 000001E4
|
|
X"00000000", -- 000001E8
|
|
X"00000000", -- 000001EC
|
|
X"00000000", -- 000001F0
|
|
X"00000000", -- 000001F4
|
|
X"00000000", -- 000001F8
|
|
X"00000000", -- 000001FC
|
|
X"00000000", -- 00000200
|
|
X"00000000", -- 00000204
|
|
X"00000000", -- 00000208
|
|
X"00000000", -- 0000020C
|
|
X"00000000", -- 00000210
|
|
X"00000000", -- 00000214
|
|
X"00000000", -- 00000218
|
|
X"00000000", -- 0000021C
|
|
X"00000000", -- 00000220
|
|
X"00000000", -- 00000224
|
|
X"00000000", -- 00000228
|
|
X"00000000", -- 0000022C
|
|
X"00000000", -- 00000230
|
|
X"00000000", -- 00000234
|
|
X"00000000", -- 00000238
|
|
X"00000000", -- 0000023C
|
|
X"00000000", -- 00000240
|
|
X"00000000", -- 00000244
|
|
X"00000000", -- 00000248
|
|
X"00000000", -- 0000024C
|
|
X"00000000", -- 00000250
|
|
X"00000000", -- 00000254
|
|
X"00000000", -- 00000258
|
|
X"00000000", -- 0000025C
|
|
X"00000000", -- 00000260
|
|
X"00000000", -- 00000264
|
|
X"00000000", -- 00000268
|
|
X"00000000", -- 0000026C
|
|
X"00000000", -- 00000270
|
|
X"00000000", -- 00000274
|
|
X"00000000", -- 00000278
|
|
X"00000000", -- 0000027C
|
|
X"00000000", -- 00000280
|
|
X"00000000", -- 00000284
|
|
X"00000000", -- 00000288
|
|
X"00000000", -- 0000028C
|
|
X"00000000", -- 00000290
|
|
X"00000000", -- 00000294
|
|
X"00000000", -- 00000298
|
|
X"00000000", -- 0000029C
|
|
X"00000000", -- 000002A0
|
|
X"00000000", -- 000002A4
|
|
X"00000000", -- 000002A8
|
|
X"00000000", -- 000002AC
|
|
X"00000000", -- 000002B0
|
|
X"00000000", -- 000002B4
|
|
X"00000000", -- 000002B8
|
|
X"00000000", -- 000002BC
|
|
X"00000000", -- 000002C0
|
|
X"00000000", -- 000002C4
|
|
X"00000000", -- 000002C8
|
|
X"00000000", -- 000002CC
|
|
X"00000000", -- 000002D0
|
|
X"00000000", -- 000002D4
|
|
X"00000000", -- 000002D8
|
|
X"00000000", -- 000002DC
|
|
X"00000000", -- 000002E0
|
|
X"00000000", -- 000002E4
|
|
X"00000000", -- 000002E8
|
|
X"00000000", -- 000002EC
|
|
X"00000000", -- 000002F0
|
|
X"00000000", -- 000002F4
|
|
X"00000000", -- 000002F8
|
|
X"00000000", -- 000002FC
|
|
X"00000000", -- 00000300
|
|
X"00000000", -- 00000304
|
|
X"00000000", -- 00000308
|
|
X"00000000", -- 0000030C
|
|
X"00000000", -- 00000310
|
|
X"00000000", -- 00000314
|
|
X"00000000", -- 00000318
|
|
X"00000000", -- 0000031C
|
|
X"00000000", -- 00000320
|
|
X"00000000", -- 00000324
|
|
X"00000000", -- 00000328
|
|
X"00000000", -- 0000032C
|
|
X"00000000", -- 00000330
|
|
X"00000000", -- 00000334
|
|
X"00000000", -- 00000338
|
|
X"00000000", -- 0000033C
|
|
X"00000000", -- 00000340
|
|
X"00000000", -- 00000344
|
|
X"00000000", -- 00000348
|
|
X"00000000", -- 0000034C
|
|
X"00000000", -- 00000350
|
|
X"00000000", -- 00000354
|
|
X"00000000", -- 00000358
|
|
X"00000000", -- 0000035C
|
|
X"00000000", -- 00000360
|
|
X"00000000", -- 00000364
|
|
X"00000000", -- 00000368
|
|
X"00000000", -- 0000036C
|
|
X"00000000", -- 00000370
|
|
X"00000000", -- 00000374
|
|
X"00000000", -- 00000378
|
|
X"00000000", -- 0000037C
|
|
X"00000000", -- 00000380
|
|
X"00000000", -- 00000384
|
|
X"00000000", -- 00000388
|
|
X"00000000", -- 0000038C
|
|
X"00000000", -- 00000390
|
|
X"00000000", -- 00000394
|
|
X"00000000", -- 00000398
|
|
X"00000000", -- 0000039C
|
|
X"00000000", -- 000003A0
|
|
X"00000000", -- 000003A4
|
|
X"00000000", -- 000003A8
|
|
X"00000000", -- 000003AC
|
|
X"00000000", -- 000003B0
|
|
X"00000000", -- 000003B4
|
|
X"00000000", -- 000003B8
|
|
X"00000000", -- 000003BC
|
|
X"00000000", -- 000003C0
|
|
X"00000000", -- 000003C4
|
|
X"00000000", -- 000003C8
|
|
X"00000000", -- 000003CC
|
|
X"00000000", -- 000003D0
|
|
X"00000000", -- 000003D4
|
|
X"00000000", -- 000003D8
|
|
X"00000000", -- 000003DC
|
|
X"00000000", -- 000003E0
|
|
X"00000000", -- 000003E4
|
|
X"00000000", -- 000003E8
|
|
X"00000000", -- 000003EC
|
|
X"00000000", -- 000003F0
|
|
X"00000000", -- 000003F4
|
|
X"00000000", -- 000003F8
|
|
X"00000000" -- 000003FC
|
|
);
|
|
|
|
begin
|
|
|
|
PROM_READ:
|
|
process(clk)
|
|
begin
|
|
if rising_edge(clk) then
|
|
dout <= word_array(to_integer(addr));
|
|
end if;
|
|
end process;
|
|
|
|
|
|
end itest;
|