---------------------------------------------------------------------------------- -- Company: -- Engineer: -- -- Create Date: 19.10.2023 16:14:20 -- Design Name: -- Module Name: ROM_Infering - Behavioral -- Project Name: -- Target Devices: -- Tool Versions: -- Description: -- -- Dependencies: -- -- Revision: -- Revision 0.01 - File Created -- Additional Comments: -- ---------------------------------------------------------------------------------- library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; -- Utilisation de NUMERIC_STD pour faire la conversion std_logic_vector to integer. -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx leaf cells in this code. --library UNISIM; --use UNISIM.VComponents.all; entity ROM_Infering is generic( Address_Bits : Integer := 5; -- Les adress mémoires sot sur 5 bits donc 32 Case mémoire. (Juste pour simplifier loading aprés). Data_Bits : Integer := 8 -- Déclaration de nombre des Bits des données. ); Port ( Read_en, clk_in : in std_logic; -- Le signal d'horloge, address: in std_logic_vector(Address_Bits-1 downto 0); -- L'address pour acceder au case mémoire. Data_out : out std_logic_vector(Data_Bits-1 downto 0) -- Les données a lire depuis la mémoire RAM. ); end ROM_Infering; architecture Behavioral of ROM_Infering is -- Déclaration de la mémoire comme un tableau de 2**Address_Bits = 32 cases mémoires. -- Chaque case est une vecteur de 8 Btis (Data_Bits-1 donwto 0) = 8 type ROM is array (0 to 2**Address_Bits-1) of std_logic_vector(Data_Bits-1 downto 0); -- Affectation manuelle des 32 cases mémoire avec des valeurs en Hexadécimal X"AA" ou en binaire par "00001101" example. signal ROM_memory : ROM := (X"00",X"01",X"10",X"11",X"20",X"21",X"22",X"30", X"31",X"32",X"33",X"40",X"41",X"42",X"43",X"44", X"50",X"51",X"52",X"53", X"54",X"55",X"60",X"61", X"62",X"63",X"64",X"65", X"66",X"67",X"68",X"69"); begin ROM_Read : process(clk_in) begin if(rising_edge(clk_in)) then if Read_en = '1' then -- Si le signal d'entrées Read_enable est activé en lit a partir du mémoire. Data_out <= ROM_memory(to_integer(unsigned(address))); end if; end if; end process; end Behavioral;