No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MemoireDonnees.vhd 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. ----------------------------------------------------------------------------------
  2. -- Company: INSA-Toulouse
  3. -- Engineer: Paul Faure
  4. --
  5. -- Create Date: 16.04.2021 14:35:04
  6. -- Module Name: MemoireDonnees - Behavioral
  7. -- Project Name: Processeur sécurisé
  8. -- Target Devices: Basys 3 ARTIX7
  9. -- Tool Versions: Vivado 2016.4
  10. -- Description: Memoire des donnees utilisateur
  11. --
  12. -- Dependencies: None
  13. ----------------------------------------------------------------------------------
  14. library IEEE;
  15. use IEEE.STD_LOGIC_1164.ALL;
  16. use IEEE.NUMERIC_STD.ALL;
  17. entity MemoireDonnees is
  18. Generic (Nb_bits : Natural; -- Taille d'un mot en mémoire
  19. Addr_size : Natural; -- Nombre de bits nécessaires a l'adressage de la mémoire
  20. Mem_size : Natural); -- Nombre de mot stockables
  21. Port ( Addr : in STD_LOGIC_VECTOR (Addr_size-1 downto 0); -- L'adresse a laquelle il faut agir
  22. RW : in STD_LOGIC; -- Ce qu'il faut faire ('1' -> Read, '0' -> Write)
  23. D_IN : in STD_LOGIC_VECTOR (Nb_bits-1 downto 0); -- Data a ecrire (si RW = 0)
  24. RST : in STD_LOGIC; -- Reset
  25. CLK : in STD_LOGIC; -- Clock
  26. D_OUT : out STD_LOGIC_VECTOR (Nb_bits-1 downto 0) := (others => '0')); -- Sortie de la mémoire
  27. end MemoireDonnees;
  28. architecture Behavioral of MemoireDonnees is
  29. signal MEMORY : STD_LOGIC_VECTOR ((Mem_Size * Nb_bits)-1 downto 0) := (others => '0'); -- Buffer pour la mémoire
  30. begin
  31. process
  32. begin
  33. wait until CLK'event and CLK = '1';
  34. if (RST = '0') then
  35. MEMORY <= (others => '0');
  36. else
  37. if (RW = '0') then
  38. MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits - 1) downto Nb_bits * to_integer(unsigned(Addr))) <= D_IN;
  39. end if;
  40. end if;
  41. end process;
  42. -- Lecture assynchrone et en permanence
  43. D_OUT <= MEMORY (((to_integer(unsigned(Addr)) + 1) * Nb_bits) - 1 downto Nb_bits * to_integer(unsigned(Addr)));
  44. end Behavioral;