------------------------------------------------------------------------- -- 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 . -- -- 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;