--------------------------------------------------
-- Rom.vhd
-- Synchronous ROM
-- by Toshio Iwata at digitalfilter.com 2019/02/13

library IEEE;
  use IEEE.std_logic_1164.all;
  use IEEE.std_logic_arith.all;

entity Rom is
   generic (
        DIOB : integer := 16;
        ADDB : integer := 8 );
   Port (
          CLK : In std_logic;
          ADDR : In std_logic_vector(ADDB-1 downto 0);
          DATA : Out std_logic_vector(DIOB-1 downto 0) );
end Rom;

architecture RTL of Rom is

  subtype ROMWORD is std_logic_vector(DIOB-1 downto 0);
  type ROMARRAY is array (0 to 2**ADDB - 1) of ROMWORD;
  signal ROMDATA : ROMARRAY;
  signal addr_int : integer range 0 to 2**ADDB - 1;
  signal addr_sig : unsigned(ADDB-1 downto 0);

begin

-------------------------------------------------------------------
gen_addr_sig : process( ADDR )
begin 
  for i in ADDB-1 downto 0 loop
    addr_sig(i) <= ADDR(i);
  end loop;
end process gen_addr_sig;

--------------------------------------------------------------
  addr_int <= conv_integer(addr_sig);

--------------------------------------------------------------
rd_data : process(CLK) 
begin 
  if(CLK'event and CLK = '1') then
      DATA <= ROMDATA(addr_int);
  end if;
end process rd_data;

ROMDATA( 0 ) <= "1111111111100000";
ROMDATA( 1 ) <= "1111111111110100";
ROMDATA( 2 ) <= "0000000000000010";
ROMDATA( 3 ) <= "0000000000100001";
ROMDATA( 4 ) <= "0000000001001001";
ROMDATA( 5 ) <= "0000000001110000";
ROMDATA( 6 ) <= "0000000010001000";
ROMDATA( 7 ) <= "0000000010000101";
ROMDATA( 8 ) <= "0000000001100001";
ROMDATA( 9 ) <= "0000000000100001";
ROMDATA( 10 ) <= "1111111111011000";
ROMDATA( 11 ) <= "1111111110011101";
ROMDATA( 12 ) <= "1111111110000110";
ROMDATA( 13 ) <= "1111111110100000";
ROMDATA( 14 ) <= "1111111111100110";
ROMDATA( 15 ) <= "0000000001000001";
ROMDATA( 16 ) <= "0000000010010000";
ROMDATA( 17 ) <= "0000000010110000";
ROMDATA( 18 ) <= "0000000010001101";
ROMDATA( 19 ) <= "0000000000101100";
ROMDATA( 20 ) <= "1111111110101011";
ROMDATA( 21 ) <= "1111111100111001";
ROMDATA( 22 ) <= "1111111100001000";
ROMDATA( 23 ) <= "1111111100110101";
ROMDATA( 24 ) <= "1111111110111011";
ROMDATA( 25 ) <= "0000000001110000";
ROMDATA( 26 ) <= "0000000100010100";
ROMDATA( 27 ) <= "0000000101011110";
ROMDATA( 28 ) <= "0000000100100101";
ROMDATA( 29 ) <= "0000000001101010";
ROMDATA( 30 ) <= "1111111101101000";
ROMDATA( 31 ) <= "1111111001111011";
ROMDATA( 32 ) <= "1111111000001000";
ROMDATA( 33 ) <= "1111111001010010";
ROMDATA( 34 ) <= "1111111101011011";
ROMDATA( 35 ) <= "0000000011010111";
ROMDATA( 36 ) <= "0000001001000001";
ROMDATA( 37 ) <= "0000001011111111";
ROMDATA( 38 ) <= "0000001010100000";
ROMDATA( 39 ) <= "0000000100010000";
ROMDATA( 40 ) <= "1111111010101100";
ROMDATA( 41 ) <= "1111110000111011";
ROMDATA( 42 ) <= "1111101010111011";
ROMDATA( 43 ) <= "1111101100010101";
ROMDATA( 44 ) <= "1111110111010000";
ROMDATA( 45 ) <= "0000001011010100";
ROMDATA( 46 ) <= "0000100101100101";
ROMDATA( 47 ) <= "0001000000111110";
ROMDATA( 48 ) <= "0001010111101000";
ROMDATA( 49 ) <= "0001100100011101";
ROMDATA( 50 ) <= "0001100100011101";
ROMDATA( 51 ) <= "0001010111101000";
ROMDATA( 52 ) <= "0001000000111110";
ROMDATA( 53 ) <= "0000100101100101";
ROMDATA( 54 ) <= "0000001011010100";
ROMDATA( 55 ) <= "1111110111010000";
ROMDATA( 56 ) <= "1111101100010101";
ROMDATA( 57 ) <= "1111101010111011";
ROMDATA( 58 ) <= "1111110000111011";
ROMDATA( 59 ) <= "1111111010101100";
ROMDATA( 60 ) <= "0000000100010000";
ROMDATA( 61 ) <= "0000001010100000";
ROMDATA( 62 ) <= "0000001011111111";
ROMDATA( 63 ) <= "0000001001000001";
ROMDATA( 64 ) <= "0000000011010111";
ROMDATA( 65 ) <= "1111111101011011";
ROMDATA( 66 ) <= "1111111001010010";
ROMDATA( 67 ) <= "1111111000001000";
ROMDATA( 68 ) <= "1111111001111011";
ROMDATA( 69 ) <= "1111111101101000";
ROMDATA( 70 ) <= "0000000001101010";
ROMDATA( 71 ) <= "0000000100100101";
ROMDATA( 72 ) <= "0000000101011110";
ROMDATA( 73 ) <= "0000000100010100";
ROMDATA( 74 ) <= "0000000001110000";
ROMDATA( 75 ) <= "1111111110111011";
ROMDATA( 76 ) <= "1111111100110101";
ROMDATA( 77 ) <= "1111111100001000";
ROMDATA( 78 ) <= "1111111100111001";
ROMDATA( 79 ) <= "1111111110101011";
ROMDATA( 80 ) <= "0000000000101100";
ROMDATA( 81 ) <= "0000000010001101";
ROMDATA( 82 ) <= "0000000010110000";
ROMDATA( 83 ) <= "0000000010010000";
ROMDATA( 84 ) <= "0000000001000001";
ROMDATA( 85 ) <= "1111111111100110";
ROMDATA( 86 ) <= "1111111110100000";
ROMDATA( 87 ) <= "1111111110000110";
ROMDATA( 88 ) <= "1111111110011101";
ROMDATA( 89 ) <= "1111111111011000";
ROMDATA( 90 ) <= "0000000000100001";
ROMDATA( 91 ) <= "0000000001100001";
ROMDATA( 92 ) <= "0000000010000101";
ROMDATA( 93 ) <= "0000000010001000";
ROMDATA( 94 ) <= "0000000001110000";
ROMDATA( 95 ) <= "0000000001001001";
ROMDATA( 96 ) <= "0000000000100001";
ROMDATA( 97 ) <= "0000000000000010";
ROMDATA( 98 ) <= "1111111111110100";
ROMDATA( 99 ) <= "1111111111100000";
  ROMDATA(100) <= "0000000000000000";
  ROMDATA(101) <= "0000000000000000";
  ROMDATA(102) <= "0000000000000000";
  ROMDATA(103) <= "0000000000000000";
  ROMDATA(104) <= "0000000000000000";
  ROMDATA(105) <= "0000000000000000";
  ROMDATA(106) <= "0000000000000000";
  ROMDATA(107) <= "0000000000000000";
  ROMDATA(108) <= "0000000000000000";
  ROMDATA(109) <= "0000000000000000";
  ROMDATA(110) <= "0000000000000000";
  ROMDATA(111) <= "0000000000000000";
  ROMDATA(112) <= "0000000000000000";
  ROMDATA(113) <= "0000000000000000";
  ROMDATA(114) <= "0000000000000000";
  ROMDATA(115) <= "0000000000000000";
  ROMDATA(116) <= "0000000000000000";
  ROMDATA(117) <= "0000000000000000";
  ROMDATA(118) <= "0000000000000000";
  ROMDATA(119) <= "0000000000000000";
  ROMDATA(120) <= "0000000000000000";
  ROMDATA(121) <= "0000000000000000";
  ROMDATA(122) <= "0000000000000000";
  ROMDATA(123) <= "0000000000000000";
  ROMDATA(124) <= "0000000000000000";
  ROMDATA(125) <= "0000000000000000";
  ROMDATA(126) <= "0000000000000000";
  ROMDATA(127) <= "0000000000000000";
  ROMDATA(128) <= "0000000000000000";
  ROMDATA(129) <= "0000000000000000";
  ROMDATA(130) <= "0000000000000000";
  ROMDATA(131) <= "0000000000000000";
  ROMDATA(132) <= "0000000000000000";
  ROMDATA(133) <= "0000000000000000";
  ROMDATA(134) <= "0000000000000000";
  ROMDATA(135) <= "0000000000000000";
  ROMDATA(136) <= "0000000000000000";
  ROMDATA(137) <= "0000000000000000";
  ROMDATA(138) <= "0000000000000000";
  ROMDATA(139) <= "0000000000000000";
  ROMDATA(140) <= "0000000000000000";
  ROMDATA(141) <= "0000000000000000";
  ROMDATA(142) <= "0000000000000000";
  ROMDATA(143) <= "0000000000000000";
  ROMDATA(144) <= "0000000000000000";
  ROMDATA(145) <= "0000000000000000";
  ROMDATA(146) <= "0000000000000000";
  ROMDATA(147) <= "0000000000000000";
  ROMDATA(148) <= "0000000000000000";
  ROMDATA(149) <= "0000000000000000";
  ROMDATA(150) <= "0000000000000000";
  ROMDATA(151) <= "0000000000000000";
  ROMDATA(152) <= "0000000000000000";
  ROMDATA(153) <= "0000000000000000";
  ROMDATA(154) <= "0000000000000000";
  ROMDATA(155) <= "0000000000000000";
  ROMDATA(156) <= "0000000000000000";
  ROMDATA(157) <= "0000000000000000";
  ROMDATA(158) <= "0000000000000000";
  ROMDATA(159) <= "0000000000000000";
  ROMDATA(160) <= "0000000000000000";
  ROMDATA(161) <= "0000000000000000";
  ROMDATA(162) <= "0000000000000000";
  ROMDATA(163) <= "0000000000000000";
  ROMDATA(164) <= "0000000000000000";
  ROMDATA(165) <= "0000000000000000";
  ROMDATA(166) <= "0000000000000000";
  ROMDATA(167) <= "0000000000000000";
  ROMDATA(168) <= "0000000000000000";
  ROMDATA(169) <= "0000000000000000";
  ROMDATA(170) <= "0000000000000000";
  ROMDATA(171) <= "0000000000000000";
  ROMDATA(172) <= "0000000000000000";
  ROMDATA(173) <= "0000000000000000";
  ROMDATA(174) <= "0000000000000000";
  ROMDATA(175) <= "0000000000000000";
  ROMDATA(176) <= "0000000000000000";
  ROMDATA(177) <= "0000000000000000";
  ROMDATA(178) <= "0000000000000000";
  ROMDATA(179) <= "0000000000000000";
  ROMDATA(180) <= "0000000000000000";
  ROMDATA(181) <= "0000000000000000";
  ROMDATA(182) <= "0000000000000000";
  ROMDATA(183) <= "0000000000000000";
  ROMDATA(184) <= "0000000000000000";
  ROMDATA(185) <= "0000000000000000";
  ROMDATA(186) <= "0000000000000000";
  ROMDATA(187) <= "0000000000000000";
  ROMDATA(188) <= "0000000000000000";
  ROMDATA(189) <= "0000000000000000";
  ROMDATA(190) <= "0000000000000000";
  ROMDATA(191) <= "0000000000000000";
  ROMDATA(192) <= "0000000000000000";
  ROMDATA(193) <= "0000000000000000";
  ROMDATA(194) <= "0000000000000000";
  ROMDATA(195) <= "0000000000000000";
  ROMDATA(196) <= "0000000000000000";
  ROMDATA(197) <= "0000000000000000";
  ROMDATA(198) <= "0000000000000000";
  ROMDATA(199) <= "0000000000000000";
  ROMDATA(200) <= "0000000000000000";
  ROMDATA(201) <= "0000000000000000";
  ROMDATA(202) <= "0000000000000000";
  ROMDATA(203) <= "0000000000000000";
  ROMDATA(204) <= "0000000000000000";
  ROMDATA(205) <= "0000000000000000";
  ROMDATA(206) <= "0000000000000000";
  ROMDATA(207) <= "0000000000000000";
  ROMDATA(208) <= "0000000000000000";
  ROMDATA(209) <= "0000000000000000";
  ROMDATA(210) <= "0000000000000000";
  ROMDATA(211) <= "0000000000000000";
  ROMDATA(212) <= "0000000000000000";
  ROMDATA(213) <= "0000000000000000";
  ROMDATA(214) <= "0000000000000000";
  ROMDATA(215) <= "0000000000000000";
  ROMDATA(216) <= "0000000000000000";
  ROMDATA(217) <= "0000000000000000";
  ROMDATA(218) <= "0000000000000000";
  ROMDATA(219) <= "0000000000000000";
  ROMDATA(220) <= "0000000000000000";
  ROMDATA(221) <= "0000000000000000";
  ROMDATA(222) <= "0000000000000000";
  ROMDATA(223) <= "0000000000000000";
  ROMDATA(224) <= "0000000000000000";
  ROMDATA(225) <= "0000000000000000";
  ROMDATA(226) <= "0000000000000000";
  ROMDATA(227) <= "0000000000000000";
  ROMDATA(228) <= "0000000000000000";
  ROMDATA(229) <= "0000000000000000";
  ROMDATA(230) <= "0000000000000000";
  ROMDATA(231) <= "0000000000000000";
  ROMDATA(232) <= "0000000000000000";
  ROMDATA(233) <= "0000000000000000";
  ROMDATA(234) <= "0000000000000000";
  ROMDATA(235) <= "0000000000000000";
  ROMDATA(236) <= "0000000000000000";
  ROMDATA(237) <= "0000000000000000";
  ROMDATA(238) <= "0000000000000000";
  ROMDATA(239) <= "0000000000000000";
  ROMDATA(240) <= "0000000000000000";
  ROMDATA(241) <= "0000000000000000";
  ROMDATA(242) <= "0000000000000000";
  ROMDATA(243) <= "0000000000000000";
  ROMDATA(244) <= "0000000000000000";
  ROMDATA(245) <= "0000000000000000";
  ROMDATA(246) <= "0000000000000000";
  ROMDATA(247) <= "0000000000000000";
  ROMDATA(248) <= "0000000000000000";
  ROMDATA(249) <= "0000000000000000";
  ROMDATA(250) <= "0000000000000000";
  ROMDATA(251) <= "0000000000000000";
  ROMDATA(252) <= "0000000000000000";
  ROMDATA(253) <= "0000000000000000";
  ROMDATA(254) <= "0000000000000000";
  ROMDATA(255) <= "0000000000000000";

end;
