Opcode_memory.vhd


1
----------------------------------------------------------------------------------
2
-- Company: www.Circuit-Break.de
3
-- Engineer: Jens Weiss
4
-- 
5
-- Create Date:    10:14:32 02/23/2024 
6
-- Design Name: 
7
-- Module Name:    Opcode_memory - Behavioral 
8
-- Project Name: 
9
-- Target Devices: 
10
-- Tool versions: 
11
-- Description: 
12
--
13
-- Dependencies: 
14
--
15
-- Revision: 
16
-- Revision 0.01 - File Created
17
-- Additional Comments: 
18
--
19
----------------------------------------------------------------------------------
20
library IEEE;
21
use IEEE.STD_LOGIC_1164.ALL;
22
use IEEE.NUMERIC_STD.ALL;
23
24
25
entity Opcode_memory is
26
  Generic(ADRESSWIDTH : natural := 5;  --memory depth = 2^ADDRESSWIDTH
27
          DATAWIDTH : natural := 8);
28
          
29
  Port  (  clk  : in std_logic;
30
        A    : in std_logic_vector(ADRESSWIDTH-1 downto 0);
31
        Dout  : out std_logic_vector(DATAWIDTH-1 downto 0)
32
      );
33
end Opcode_memory;
34
35
architecture Behavioral of Opcode_memory is
36
37
  signal RomAddr  : integer range 0 to (2**ADRESSWIDTH)-1;  
38
  type Rom is array (0 to (2**ADRESSWIDTH)-1) of STD_LOGIC_VECTOR(DATAWIDTH-1 downto 0); 
39
  constant Parameter_Rom : Rom := (
40
-- Integrator LT1
41
    "00101000",  -- Ocode: "00101 000"    Parameter: b1 | Dataselect: 000 (data_in)
42
   "00000001",  -- Ocode: "00000 001"    Parameter: a1 | Dataselect: 001 (int_data_out)
43
   "10100011",  -- Ocode: "10100 011"    Parameter:e21 | Dataselect: 011 (LT2_out)
44
   "10101100",  -- Ocode: "10101 100"    Parameter:e31 | Dataselect: 100 (LT3_out)
45
   "10111101",  -- Ocode: "10111 101"    Parameter:e41 | Dataselect: 101 (LT4_out)
46
-- Integrator LT2
47
   "00110000",  -- Ocode: "00110 000"    Parameter: b2 | Dataselect: 000 (data_in)
48
   "00001001",  -- Ocode: "00001 001"    Parameter: a2 | Dataselect: 001 (int_data_out)
49
   "01010010",  -- Ocode: "01010 010"    Parameter: c1 | Dataselect: 010 (LT1_out)
50
   "10110100",  -- Ocode: "10110 100"    Parameter:e32 | Dataselect: 100 (LT3_out)
51
   "11000101",  -- Ocode: "11000 101"    Parameter:e42 | Dataselect: 101 (LT4_out)
52
-- Integrator LT3
53
   "00111000",  -- Ocode: "00111 000"    Parameter: b3 | Dataselect: 000 (data_in)
54
   "00010001",  -- Ocode: "00010 001"    Parameter: a3 | Dataselect: 001 (int_data_out)
55
   "01110010",  -- Ocode: "01110 010"    Parameter:d13 | Dataselect: 010 (LT1_out)
56
   "01011011",  -- Ocode: "01011 011"    Parameter: c2 | Dataselect: 011 (LT2_out)
57
   "11001101",  -- Ocode: "11001 101"    Parameter:e43 | Dataselect: 101 (LT4_out)
58
-- Integrator LT4
59
   "01000000",  -- Ocode: "01000 000"    Parameter: b4 | Dataselect: 000 (data_in)
60
   "00011001",  -- Ocode: "00011 001"    Parameter: a4 | Dataselect: 001 (int_data_out)
61
   "01111010",  -- Ocode: "01111 010"    Parameter:d14 | Dataselect: 010 (LT1_out)
62
   "10001011",  -- Ocode: "10001 011"    Parameter:d24 | Dataselect: 011 (LT2_out)
63
   "01100100",  -- Ocode: "01100 100"    Parameter: c3 | Dataselect: 100 (LT3_out)   
64
-- Output/to Quantizer
65
   "01001000",  -- Ocode: "01001 000"    Parameter: b5 | Dataselect: 000 (data_in)
66
   "00100001",  -- Ocode: "00100 001"    Parameter: a5 | Dataselect: 001 (int_data_out)
67
   "10000010",  -- Ocode: "10000 010"    Parameter:d15 | Dataselect: 010 (LT1_out)
68
   "10010011",  -- Ocode: "10010 011"    Parameter:d25 | Dataselect: 011 (LT2_out)
69
   "10011100",  -- Ocode: "10011 100"    Parameter:d35 | Dataselect: 100 (LT3_out)
70
   "01101101",  -- Ocode: "01101 101"    Parameter: c4 | Dataselect: 101 (LT4_out)
71
   others => "00000000"
72
   );   
73
74
begin
75
  --BROM      
76
   process begin
77
     wait until rising_edge(clk);
78
     RomAddr <= to_integer(unsigned(A)); -- clocked address --> BRAM
79
   end process;
80
   --Dout <= Parameter_Rom(to_integer(unsigned(A)));
81
  Dout <= std_logic_vector(Parameter_Rom(RomAddr));
82
83
end Behavioral;