Blame view

Exercice_2/ROM_Infering.vhd 2.53 KB
71388fd5   bilalelhasnaoui   seance 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  ----------------------------------------------------------------------------------
  -- 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;