This project implements 9 programmable digital recurrent LIF neurons. The neurons are arranged in 3 layers (3 in each). Spikes_in directly maps to the inputs of the first layer neurons. When an input spike is received, it is first multiplied by an 8 bit weight, programmable from a custom interface, 1 per input neuron. This 8 bit value is then added to the membrane potential of the respective neuron. When the first layer neurons activate, its pulse is routed to each of the 3 neurons in the next layer. There are 9x3 programmable weights describing the connectivity between the input spikes and the first layer (9 weights=3x3), the first and second layers (9 weights=3x3), and second and third layers (9 weights=3x3). Output spikes from the 3nd layer drive spikes_out.
After reset, program the neuron threshold, leak rate, feedback_scale and refractory period. Additionally program the first, 2nd, 3rd layer weights. Once programmed activate spikes_in to represent input data, track spikes_out synchronously (1 clock cycle pulses).
List external hardware used in your project (e.g. PMOD, LED display, etc), if any
The memory block stores 39 words of 8 bits. The first 12 words represent Feedback scale, Refractory Period, Decay rate, Membrane Threshold of each layer ( 4 parameters x 3 layers ). The last 27 words represent the network weights ( 3 ins x 3 neurons x 3 layers ).
Address | Address | Data Index | Data Index | Data Description | Data Description |
---|---|---|---|---|---|
dec | hex | MSB | LSB | Description | LYR # |
0 | 0 | 7 | 0 | Feedback scale | 1 |
1 | 1 | 15 | 8 | Refractory Period | 1 |
2 | 2 | 23 | 16 | Decay rate | 1 |
3 | 3 | 31 | 24 | Membrane Threshold | 1 |
4 | 4 | 39 | 32 | Feedback scale | 2 |
5 | 5 | 47 | 40 | Refractory Period | 2 |
6 | 6 | 55 | 48 | Decay rate | 2 |
7 | 7 | 63 | 56 | Membrane Threshold | 2 |
8 | 8 | 71 | 64 | Feedback scale | 3 |
9 | 9 | 79 | 72 | Refractory Period | 3 |
10 | A | 87 | 80 | Decay rate | 3 |
11 | B | 95 | 88 | Membrane Threshold | 3 |
12 | C | 103 | 96 | weight1_0 | 3 |
13 | D | 111 | 104 | weight1_1 | 3 |
14 | E | 119 | 112 | weight1_2 | 3 |
15 | F | 127 | 120 | weight2_0 | 3 |
16 | 10 | 135 | 128 | weight2_1 | 3 |
17 | 11 | 143 | 136 | weight2_2 | 3 |
18 | 12 | 151 | 144 | weight3_0 | 3 |
19 | 13 | 159 | 152 | weight3_1 | 3 |
20 | 14 | 167 | 160 | weight3_2 | 3 |
21 | 15 | 175 | 168 | weight1_0 | 2 |
22 | 16 | 183 | 176 | weight1_1 | 2 |
23 | 17 | 191 | 184 | weight1_2 | 2 |
24 | 18 | 199 | 192 | weight2_0 | 2 |
25 | 19 | 207 | 200 | weight2_1 | 2 |
26 | 1A | 215 | 208 | weight2_2 | 2 |
27 | 1B | 223 | 216 | weight3_0 | 2 |
28 | 1C | 231 | 224 | weight3_1 | 2 |
29 | 1D | 239 | 232 | weight3_2 | 2 |
30 | 1E | 247 | 240 | weight1_0 | 1 |
31 | 1F | 255 | 248 | weight1_1 | 1 |
32 | 20 | 263 | 256 | weight1_2 | 1 |
33 | 21 | 271 | 264 | weight2_0 | 1 |
34 | 22 | 279 | 272 | weight2_1 | 1 |
35 | 23 | 287 | 280 | weight2_2 | 1 |
36 | 24 | 295 | 288 | weight3_0 | 1 |
37 | 25 | 303 | 296 | weight3_1 | 1 |
38 | 26 | 311 | 304 | weight3_2 | 1 |
# | Input | Output | Bidirectional |
---|---|---|---|
0 | Input Spike 0 | Output Spike 0 | out_test 0 |
1 | Input Spike 1 | Output Spike 1 | out_test 1 |
2 | Input Spike 2 | Output Spike 2 | out_test 2 |
3 | Spike Input Register Enable | End of Writing Parameters into Memory | out_test 3 |
4 | RSNN enable | Parameter Data Written | out_test 4 |
5 | Serial Data IN | out_test 5 | |
6 | Parameter Load | out_test 6 | |
7 | Test selection | out_test 7 |