RAM_ReadWrite.vhd 2.89 KB
----------------------------------------------------------------------------------
-- 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;