
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).
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 |