---------------------------------------------------------------------------------- -- Company: ÉCOLE POLYTECHNIQUE DE LILLE -- Engineer: -- -- Create Date: 19.10.2023 15:35:32 -- Design Name: Random Access Memory Read Write. -- Module Name: RAM_ReadWrite - Behavioral -- Project Name: Random Access Memory Read Write. -- 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. use IEEE.STD_LOGIC_UNSIGNED.ALL; -- 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 RAM_ReadWrite is generic( Address_Bits : positive :=8; -- Declaration de nombre des Bits de l'adress mémoire 8Bits => 256 case mémoire. Data_Bits : positive :=8 -- Déclaration de nombre des Bits des données. ); Port ( clk_in, Read_en, Write_en : std_logic; -- Le signal d'horloge, Enable lecture mémoire et écriture mémoire signals Address : in std_logic_vector(Address_Bits-1 downto 0); -- L'address pour acceder au case mémoire. Data_in : in std_logic_vector(Data_Bits-1 downto 0); -- Les données a écrire dans le RAM. Data_out : out std_logic_vector(Data_Bits-1 downto 0) -- Les données a lire depuis la mémoire RAM. ); end RAM_ReadWrite; -- Définition de l'archéticture de l'entité RAM_ReadWrite. architecture Behavioral of RAM_ReadWrite is -- Déclaration de la mémoire comme un tableau de 2**Address_Bits = 256 cases mémoires. -- Chaque case est une vecteur de 8 Btis (Data_Bits-1 donwto 0) = 8 type RAM is array (0 to 2**Address_Bits-1) of std_logic_vector(Data_Bits-1 downto 0); -- Déclaration d'un signal mémoire pour la manipulation de lécture et écriture. signal memory : RAM := (others => (others => '0')); begin RAM_ReadWrite :process(clk_in) begin if(rising_edge(clk_in)) then if(Write_en = '1') then -- Si l'option écriture de mémoire est activé on écris dans le mémoire memory(to_integer(unsigned(Address))) <= Data_in; -- Affectation des données à la case avec (address) end if; if(Read_en = '1') then -- Si l'option lécture de mémoire est activé on lit dans le mémoire Data_out <= memory(to_integer(unsigned(Address))); -- Lécriture de la case en Data_out. end if; end if; end process; end Behavioral;