OpenCores
URL https://opencores.org/ocsvn/neural_net_perceptron/neural_net_perceptron/trunk

Subversion Repositories neural_net_perceptron

[/] [neural_net_perceptron/] [trunk/] [rtl/] [vhdl/] [memory_vhd_v03_pkg.vhd] - Blame information for rev 5

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 5 fpga_is_fu
-- COPYRIGHT (C) 2022 by Jens Gutschmidt / VIVARE GmbH Switzerland
2
-- (email: opencores@vivare-services.com)
3
-- 
4
-- This program is free software: you can redistribute it and/or modify it
5
-- under the terms of the GNU General Public License as published by
6
-- the Free Software Foundation, either version 3 of the License, or any
7
-- later version.
8
-- 
9
-- This program is distributed in the hope that it will be useful, but
10
-- WITHOUT ANY WARRANTY; without even the implied warranty of
11
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
-- See the GNU General Public License for more details.
13
-- 
14
-- You should have received a copy of the GNU General Public License
15
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
-- 
17
-- Created: 24-02-2022 13:24:00
18
--
19
-----------------------------------------------------------------------------------
20
 
21
LIBRARY ieee;
22
USE ieee.std_logic_1164.all;
23
 
24
LIBRARY work;
25
 
26
PACKAGE memory_vhd_v03_pkg IS
27
 
28
  -- /////////////////\\\\\\\\\\\\\\\\\\\
29
  -- ************************************
30
  -- ***         User Settings        ***
31
  -- ************************************
32
 
33
   -- Wishbone Bus
34
   CONSTANT WB_DATA_WIDTH                : integer := 32; -- Wishbone Data Bus width
35
   CONSTANT WB_ADDR_WIDTH                : integer := 5; -- Wishbone Address Bus width
36
 
37
   CONSTANT VENDOR      : string         :=   "generic"; -- (generic, altera, xilinx)
38
                                                         --  NOT IMPLEMENTED YET
39
 
40
  -- Bus width (DATA_T) of all memories (all are equal)
41
  -- Chose a value high enough to hold all possible values cumulated in
42
  -- y_inj_reg, 
43
  -- Memory t,
44
  -- Memory bias,
45
  -- Memory w
46
   CONSTANT DATA_WIDTH                   : integer := 8;
47
 
48
  -- Address width of s input vector memory (maximum number of components/inputs = 2**MEM_S_ADDR_WIDTH)
49
   CONSTANT MEM_S_ADDR_WIDTH             : integer := 3;  -- = 8
50
 
51
  -- Address width of t output vector memory (maximum number of neurons/outputs = 2**MEM_T_ADDR_WIDTH)
52
   CONSTANT MEM_T_ADDR_WIDTH             : integer := 2;  -- = 4
53
  -- /////////////////\\\\\\\\\\\\\\\\\\\
54
  -- /////////////////\\\\\\\\\\\\\\\\\\\
55
 
56
 
57
 
58
  -- ************************************
59
  -- ***       System Constants       ***
60
  -- ***        DO NOT CHANGE         ***
61
  -- ************************************
62
  -- Number of maximum usable components/inputs - 1
63
   CONSTANT I_MAX                        : integer := ( 2 ** MEM_S_ADDR_WIDTH ) - 1;
64
  -- Number of maximum usable neurons/outputs - 1
65
   CONSTANT J_MAX                        : integer := ( 2 ** MEM_T_ADDR_WIDTH ) - 1;
66
 
67
  -- Width of Memory Latency counter (mem_rd_lat_reg)
68
   CONSTANT MEM_LAT_CNT_WIDTH            : integer := 7; -- At least 3 bits width -> latency 0...2
69
  -- Value to reach for leaving counting loops
70
   CONSTANT MEM_LAT_CNT_TRANSITION       : integer := ( 2 ** MEM_LAT_CNT_WIDTH ) - 1;
71
 
72
  -- Number of memory write lines (to build up the RD/WR vector
73
   CONSTANT MEM_WR_LINES                 : integer := 5;
74
   CONSTANT MEM_S_BITPOS                 : integer := MEM_WR_LINES - 5;
75
   CONSTANT MEM_T_BITPOS                 : integer := MEM_WR_LINES - 4;
76
   CONSTANT MEM_W_BITPOS                 : integer := MEM_WR_LINES - 3;
77
   CONSTANT MEM_Y_BITPOS                 : integer := MEM_WR_LINES - 2;
78
   CONSTANT MEM_BIAS_BITPOS              : integer := MEM_WR_LINES - 1;
79
 
80
  -- Status READY FOR COMMANDS bit position
81
   CONSTANT STAT_RDY                     : integer := 0;
82
  -- Status Latency Messurement in progress
83
   CONSTANT STAT_LAT_RUN                 : integer := 1;
84
  -- Status Controller is NOT ready -> RESET (while start of function TRAIN)
85
   CONSTANT STAT_NOT_RDY                 : integer := 2;
86
  -- Status Interrupt Enable
87
   CONSTANT STAT_INT_EN                  : integer := 3;
88
  -- Status Memory Error
89
   CONSTANT STAT_MEMERR                  : integer := 4;
90
  -- Status DATA OUTPUT READY bit position
91
   CONSTANT STAT_RD_WR_COMPLETE          : integer := 5;
92
  -- Status Interrupt TEST pending
93
   CONSTANT STAT_INT_TEST                : integer := 6;
94
  -- Status Interrupt TRAIN pending
95
   CONSTANT STAT_INT_TRAIN               : integer := 7;
96
 
97
 
98
  -- Calculate all memory address widths and other dependencies
99
  -- s input memory depth
100
   CONSTANT MEM_S_DEPTH                  : integer := ( 2**MEM_S_ADDR_WIDTH ) - 1;
101
  -- t output memory depth
102
   CONSTANT MEM_T_DEPTH                  : integer := ( 2**MEM_T_ADDR_WIDTH ) - 1;
103
  -- w (weights) memory address width calculation
104
   CONSTANT MEM_W_ADDR_WIDTH             : integer := MEM_S_ADDR_WIDTH + MEM_T_ADDR_WIDTH;
105
  -- w (weights) memory depths calculation
106
   CONSTANT MEM_W_DEPTH                  : integer := ( 2**MEM_W_ADDR_WIDTH ) - 1;
107
 
108
  -- ************************************
109
  -- Wishbone Address Map
110
   CONSTANT WB_STAT_A                    : integer :=  0; -- 
111
   CONSTANT WB_THRES                     : integer :=  1; -- 
112
   CONSTANT WB_BIAS                      : integer :=  2; -- 
113
   CONSTANT WB_OFFSET                    : integer :=  3; -- 
114
   CONSTANT WB_MAXEPOCH                  : integer :=  4; -- 
115
   CONSTANT WB_UNUSED_X05                : integer :=  5; -- DO NOT USE, for feature use
116
   CONSTANT WB_UNUSED_X06                : integer :=  6; -- DO NOT USE, for feature use
117
   CONSTANT WB_STARTI                    : integer :=  7; -- 
118
   CONSTANT WB_STOPI                     : integer :=  8; -- 
119
   CONSTANT WB_STARTJ                    : integer :=  9; -- 
120
 
121
   CONSTANT WB_STOPJ                     : integer := 10; -- 
122
   CONSTANT WB_EPOCH                     : integer := 11; -- 
123
   CONSTANT WB_WRLAT                     : integer := 12; -- 
124
   CONSTANT WB_RDLAT                     : integer := 13; -- 
125
   CONSTANT WB_ALLLAT                    : integer := 14; -- 
126
   CONSTANT WB_START3                    : integer := 15; -- 
127
   CONSTANT WB_START4                    : integer := 16; -- 
128
   CONSTANT WB_START5_S                  : integer := 17; -- 
129
   CONSTANT WB_START5_T                  : integer := 18; -- 
130
   CONSTANT WB_START5_W                  : integer := 19; -- 
131
 
132
   CONSTANT WB_START5_Y                  : integer := 20; -- 
133
   CONSTANT WB_START5_BIAS               : integer := 21; -- 
134
   CONSTANT WB_START6                    : integer := 22; -- 
135
   CONSTANT WB_IMAX                      : integer := 23; -- 
136
   CONSTANT WB_JMAX                      : integer := 24; -- 
137
   CONSTANT WB_MEMDATA_WIDTH             : integer := 25; -- 
138
  -- ************************************
139
 
140
  -- ************************************
141
  -- ***       Type Definitions       ***
142
  -- ************************************
143
  -- Wishbone data and address types
144
   SUBTYPE  WB_DATA_WIDTH_T              IS std_logic_vector ( WB_DATA_WIDTH-1 downto 0 );
145
   SUBTYPE  WB_ADDR_WIDTH_T              IS std_logic_vector ( WB_ADDR_WIDTH-1 downto 0 );
146
 
147
  -- Data bus type for all memories
148
   SUBTYPE DATA_T                        IS std_logic_vector ( DATA_WIDTH-1 downto 0 );
149
   SUBTYPE DATA_N                        IS integer range DATA_WIDTH-1 downto 0;
150
 
151
  -- Memory Latency counter type
152
   SUBTYPE MEM_LAT_CNT_WIDTH_T           IS std_logic_vector ( MEM_LAT_CNT_WIDTH-1 downto 0 );
153
  -- Vector bus to select memory RD or WR
154
   SUBTYPE MEM_WR_LINES_T                IS std_logic_vector ( MEM_WR_LINES-1 downto 0 );
155
 
156
  -- Declare the types for all memory address busses
157
  -- s input memory
158
   SUBTYPE ADDRESS_S_T                   IS std_logic_vector ( MEM_S_ADDR_WIDTH-1 downto 0 );
159
   SUBTYPE ADDRESS_S_N                   IS integer range MEM_S_ADDR_WIDTH-1 downto 0;
160
   SUBTYPE ADDRESS_S_ZERO_T              IS std_logic_vector ( MEM_S_ADDR_WIDTH-1 downto 1 );
161
  -- t input/output memory
162
   SUBTYPE ADDRESS_T_T                   IS std_logic_vector ( MEM_T_ADDR_WIDTH-1 downto 0 );
163
   SUBTYPE ADDRESS_T_N                   IS integer range MEM_T_ADDR_WIDTH-1 downto 0;
164
   SUBTYPE ADDRESS_T_ZERO_T              IS std_logic_vector ( MEM_T_ADDR_WIDTH-1 downto 1 );
165
  -- w (weigths) memory
166
   SUBTYPE ADDRESS_W_T                   IS std_logic_vector ( MEM_W_ADDR_WIDTH-1 downto 0 );
167
 
168
  -- Declare the types for all memory arrays
169
  -- s input memory
170
   TYPE S_RAM_T                          IS ARRAY ( MEM_S_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 );
171
  -- t output memory
172
   TYPE T_RAM_T                          IS ARRAY ( MEM_T_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 );
173
  -- w (weights) memory
174
   TYPE W_RAM_T                          IS ARRAY ( MEM_W_DEPTH DOWNTO 0 ) OF std_logic_vector( DATA_WIDTH-1 DOWNTO 0 );
175
  -- ************************************
176
 
177
   SUBTYPE SIM_STATE_T IS integer;
178
 
179
   CONSTANT ST0         : SIM_STATE_T := 0;
180
   CONSTANT INIT        : SIM_STATE_T := 1;
181
   CONSTANT WR1         : SIM_STATE_T := 2;
182
   CONSTANT WR_13_BURST : SIM_STATE_T := 3;
183
   CONSTANT WR_13_END   : SIM_STATE_T := 4;
184
   CONSTANT WR_7_SINGLE : SIM_STATE_T := 5;
185
   CONSTANT WR_7_END    : SIM_STATE_T := 6;
186
   CONSTANT ST7         : SIM_STATE_T := 7;
187
 
188
END memory_vhd_v03_pkg;
189
 
190
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.