I have decided to go ahead with the project of building an electronic neuron using an FPGA.
Since I haven't the least clue how this can be done or even if it's possible at all I'm feeling my way into it. This is the way I work - Top Down. I think its pointless to attempt to plan a project that you don't know how to do.
This is the rough plan - I'll keep it up to date.
- FPGA - I have a Intel FPGA development board (DE10-Nano) with a System On Chip Cyclone V. Very steep learning curve on the Intel software that program these beasts. The prototype hardware is purchased and is up and running.
- MatLab - I installed the latest MatLab software since that seems to be the best way to start with an existing neuron simulation. I think I can work MatLab without too much trouble but we will see. I have the first basic model running MatLab Now.
- Books - I ordered several books on neurons that look promising. Finding an example to start with is more difficult than you would expect. The major problem is finding one with a level of abstraction that I can understand (simple) and still realistic enough to be convincing. I have selected 'Izhikevich 'Dynamical Systems in Neuroscience' as the basis for this project.
- Once the simulation is selected and moved to MatLab the next step will be to move the model to a compiled language. I have a set of models running now. I may move the model to Visual Studio (or not).
- Once the model is working correctly I will design the equivalent in hardware for the FPGA.
- Populating the FPGA with a set of neurons should be straight forward but interconnecting the dendrites and axons is unclear.
- How to make use of the Cyclone FPGAs System On Chip, which is an ARM computer with 1 GByte of working memory that will have access to the RJ45 port and what it will do is also unclear.
Are Brains Computers?
Brains and computers are very different sorts of things. You know what a computer is made of and probable have a pretty good idea how it works – I won't try to explain that. Your brain is made from approximately 100 billion neurons all interconnected with up to 10,000 connections per neuron. That is much more complex than the most complex computer on earth.
Your neurons come in a small number of varieties but each are more like tiny, very tiny, watch movements than computers. Neurons are expected to do one thing and one thing only. When they are stimulated the proper number of times at the proper rate by other neurons connected to them they generate an output to the neurons they are connected to. That's it.
You can simulate the action of a neuron on a small computer with rather a small count of instructions. Its complex but not overly so. Simulating the action of one computer on another would tax the best programs and would be very complex.
Disabuse your self of the idea that computers and the brain are analogous to each other – they are not.
I decided to follow Eugene Izhikevich's system of neuron modeling as described in his book 'Dynamical Systems in Neuroscience' which is available for various eye popping prices on the INTERNET.
This is a two-dimensional system with a voltage variable v and a recovery variable u.
The model, presented in MatLab, can be seen and downloaded here.
Model parameters and dimensions:
t time[ms] C membrane capacitance [pF = pA.ms.mV-1] v membrane potential [mV] dv/dt rate of change of membrane potential[mV.ms-1 = V.s-1] C dv/dt capacitor current[pA] vr resting membrane potential[mV] vt instantaneous threshold potential [mV] k constant (“1/R”) [pA.mV-1 (10-9 Ω-1)] u recovery variable [pA] S stimulus (synaptic: excitatory or inhibitory, external, noise)[pA] du/dt rate of change of recovery variable [pA.ms-1] a recovery time constant[ms-1] b constant (“1/R”)[pA.mV-1 (10-9 Ω-1) ] c potential reset value[mV] d outward minus inward currents activated during the spike and affecting the after-spike behavior[pA] vpeak spike cutoff value[mV]