--=====================================================
-- Проект 22. Постоянная память на таблице
-- Константный массив синтезируется в ПЗУ:
-- таблица знакогенератора или коэффициентов.
--=====================================================
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity rom_table is
    port (
        clk  : in  std_logic;
        addr : in  std_logic_vector(3 downto 0);
        data : out std_logic_vector(7 downto 0)
    );
end entity rom_table;

architecture rtl of rom_table is
    type rom_t is array (0 to 15) of std_logic_vector(7 downto 0);

    -- содержимое задаётся константой на этапе синтеза
    constant ROM : rom_t := (
        x"3F", x"06", x"5B", x"4F",                     -- 0 1 2 3
        x"66", x"6D", x"7D", x"07",                     -- 4 5 6 7
        x"7F", x"6F", x"77", x"7C",                     -- 8 9 A b
        x"39", x"5E", x"79", x"71"                      -- C d E F
    );
begin
    process (clk)
    begin
        if rising_edge(clk) then
            data <= ROM(to_integer(unsigned(addr)));    -- регистр на выходе
        end if;
    end process;
end architecture rtl;
