← Retour← Back
CV

Réseau de neurones LIF neuromorphiqueNeuromorphic LIF neural network

Calcul neuromorphiqueNeuromorphic computingNeuromorphique / NeuromorphicngspiceKiCad 8PythonÉté / Summer 2026

Une petite bibliothèque de primitives neuromorphiques : un neurone LIF, deux synapses et une interface neurone → synapse, assemblés en réseaux pour réaliser trois fonctions de calcul, en étudiant au passage leurs comportements non idéaux (seuil dynamique, mismatch, charge par spike).A small library of neuromorphic primitives: a LIF neuron, two synapses and a neuron → synapse interface, assembled into networks that perform three computations, studying along the way their non-ideal behaviour (dynamic threshold, mismatch, charge per spike).

Résultats clésKey results
100 pFCapacité de membraneMembrane capacitance
20 msConstante de tempsTime constant
9–10 nARhéobase simulée (théorie : 7,5 nA)Simulated rheobase (theory: 7.5 nA)
14 / 30Tirages Monte-Carlo silencieux à 10 nASilent Monte-Carlo draws at 10 nA
~92 pCCharge par spike après mise en formeCharge per spike after shaping
~10 %Diaphonie du multiplexeurMUX crosstalk
QuoiWhat
Un modèle de neurone LIF électronique au niveau transistor, ses synapses, et trois démos de calcul neuromorphique simulées (additionneur en rate coding, WTA doux, multiplexeur).An electronic LIF neuron model at transistor level, its synapses, and three simulated neuromorphic computation demos (rate-coding adder, soft WTA, multiplexer).
PourquoiWhy
Explorer le calcul neuromorphique au niveau transistor : un MOS sous le seuil a une dépendance exponentielle analogue à celle de certains mécanismes de transport ionique.To explore neuromorphic computing at transistor level: a sub-threshold MOSFET has an exponential dependence analogous to that of some ion transport mechanisms.
CommentHow
Modèles MOS sub-threshold idéalisés et BS170 réel pour le reset, simulations ngspice pilotées en Python, Monte-Carlo sur les paramètres du modèle.Idealized sub-threshold MOS models and a real BS170 for the reset, ngspice simulations driven from Python, Monte-Carlo on the model parameters.
RésultatsResults
Résultats simulés (SPICE), pas encore mesurés : courbe f-I de la forme attendue, trois démos qui fonctionnent dans les conditions simulées (diaphonie du MUX ~10 %), et un Monte-Carlo qui montre que le mismatch peut réduire un tirage au silence.Simulated (SPICE) results, not yet measured: f-I curve of the expected shape, three demos that work under the simulated conditions (MUX crosstalk ~10 %), and a Monte-Carlo showing that mismatch can silence a draw.

Projet perso de l'été 2026 : une petite bibliothèque de primitives neuromorphiques (modèle de neurone LIF électronique, deux synapses, trois démos de calcul) prévue pour des MOS discrets BS170 / BS250 polarisés sous le seuil.

État du projet : les résultats viennent pour l'instant de simulations SPICE (ngspice, scripts Python) ; la suite, c'est la validation sur PCB. Les transistors sub-threshold sont des modèles idéalisés : seul le reset utilise le modèle d'un BS170 réel.

L'idée

Neurone biologiqueBiological neuronCircuit discretDiscrete circuitMembrane (condensateur)Membrane (capacitor)Condensateur C_mem = 100 pFC_mem = 100 pF capacitorFuite ioniqueIonic leakRésistance R_leak = 200 MΩR_leak = 200 MΩ resistorCanal ionique voltage-dépendantVoltage-gated ion channelMOS sous le seuil (exponentielle en V_GS)Sub-threshold MOSFET (exponential in V_GS)Potentiel d'actionAction potentialCascade de deux inverseursTwo-inverter cascadeRetour au reposReturn to restTransistor de reset BS170BS170 reset transistor
L'analogie de Mead : chaque élément du neurone a son équivalent dans le circuit.Mead's analogy: each element of the neuron has a counterpart in the circuit.
I_injMembrane RCτ_m = R_m · C_mRC membraneτ_m = R_m · C_mComparateurV ≥ V_thComparatorV ≥ V_thSpikereset : V ← V_resetreset: V ← V_resetτ_m · dV/dt = −V + R_m · I_inj
Le modèle LIF (Lapicque) : un circuit RC qui intègre le courant, un seuil, un reset. Trois paramètres : τ_m, V_th, V_reset.The LIF model (Lapicque): an RC circuit integrating the current, a threshold, a reset. Three parameters: τ_m, V_th, V_reset.

Carver Mead a observé qu'un MOS polarisé sous son seuil a un courant exponentiel en VGS, comme certains mécanismes de transport ionique. Plutôt que de simuler un neurone sur un microcontrôleur, je voulais un circuit analogique qui se comporte comme le modèle LIF (pour l'instant, en simulation) : le condensateur joue le rôle de la membrane, la fuite celui de la fuite ionique.

Méthode

NetlistsKiCad / ngspiceNetlistsKiCad / ngspicengspice.tran, .dcngspice.tran, .dcScripts Pythonf-I, Monte-CarloPython scriptsf-I, Monte-CarloCSV + figuresCSV + plotsNengo / NEF(prévu)Nengo / NEF(planned)référence algorithmiquealgorithmic reference
La chaîne de simulation : tout est scripté, donc chaque courbe du projet se régénère.The simulation chain: everything is scripted, so every curve in the project can be regenerated.

Le modèle de neurone

I_injMembraneC_mem ∥ R_leakV_mInverseur 1Inverter 1Inverseur 2Inverter 2V_spikeResetBS170Dès que V_spike monte, le BS170 vide la membraneAs soon as V_spike rises, the BS170 drains the membrane
Modèle de neurone LIF de type axon-hillock de Mead : intégration sur C_mem, deux inverseurs sub-threshold pour la bascule, reset par BS170.Mead axon-hillock LIF neuron model: integration on C_mem, two sub-threshold inverters for the switching, BS170 reset.
V_DDGNDV_mI_injC_memR_leakMp1Mn1Mp2Mn2v_inv1C_v1C_vsV_spikeX_rstBS170
Neurone axon-hillock au niveau transistor. Mp/Mn : MOS sub-threshold (SUBTH_PMOS / SUBTH_NMOS), reset par BS170 (rouge).Axon-hillock neuron at transistor level. Mp/Mn: sub-threshold MOSFETs (SUBTH_PMOS / SUBTH_NMOS), reset by the BS170 (red).

Un axon-hillock de Mead : Cmem = 100 pF en parallèle d'une fuite de 200 MΩ (τ = 20 ms), deux inverseurs CMOS sub-threshold en cascade, et un BS170 qui remet la membrane à zéro. Il a fallu corriger 4 bugs avant d'obtenir des spikes en simulation, dont une résistance parasite de 100 MΩ cachée dans le modèle SPICE du BS170 utilisé, qui empêchait Vm d'atteindre le seuil.

La courbe f-I simulée a la forme attendue (rhéobase simulé de 9 à 10 nA contre 7,5 nA en théorie). L'écart vient de l'hypothèse Vth = VDD/2 : le seuil dynamique relevé en simulation est de 2,08 V, bien au-dessus du seuil statique simulé (1,01 V). Je soupçonne un kickback capacitif du transistor de reset, sans l'avoir vérifié. Avec ce seuil, l'écart avec la théorie passe de −21/−35 % à +10/+18 %.

Courbe f-I simulée (ngspice, points bleus) contre la théorie LIF idéale (pointillés, V_th = 1,5 V). Rhéobase théorique : 7,5 nA ; premier spike simulé à 10 nA.Simulated f-I curve (ngspice, blue dots) against ideal LIF theory (dashed, V_th = 1.5 V). Theoretical rheobase: 7.5 nA; first simulated spike at 10 nA.
I_inj (nA)f_sim (Hz)f théorie, V_th = 1,5 Vf theory, V_th = 1.5 VÉcartGapf théorie, V_th = 2,075 Vf theory, V_th = 2.075 VÉcartGap
108,4736,07−76,5 %——
1546,7372,13−35,2 %42,50+10,0 %
2080,86106,38−24,0 %68,36+18,3 %
25107,39140,18−23,4 %93,26+15,2 %
30137,19173,80−21,1 %117,82+16,4 %

Démarche : le cas du seuil dynamique

ProblèmeProblemHypothèseHypothesisConceptionDesignSimulationSimulationMesure(PCB)Measurement(PCB)AnalyseAnalysisCritiqueCritique
La démarche appliquée au seuil dynamique du neurone : vert = fait en simulation, rouge = à faire sur PCB.The approach applied to the neuron's dynamic threshold: green = done in simulation, red = still to do on a PCB.
ÉtapeStepCas du seuil dynamiqueDynamic-threshold case
ProblèmeProblemLa courbe f-I simulée s'écarte de la théorie (−76 % à 10 nA).The simulated f-I curve departs from theory (−76 % at 10 nA).
HypothèseHypothesisLe seuil de bascule n'est pas V_DD/2 = 1,5 V.The switching threshold is not V_DD/2 = 1.5 V.
ConceptionDesignSimulation transitoire dédiée (pas de 1 µs) : on relève V_m quand V_spike franchit 1,5 V.Dedicated transient simulation (1 µs step): V_m is read when V_spike crosses 1.5 V.
SimulationSimulationSeuil dynamique ≈ 2,08 V, constant (2,075 ± 0,006 V sur 10 à 30 nA, 5 points) ; seuil statique 1,01 V.Dynamic threshold ≈ 2.08 V, constant (2.075 ± 0.006 V over 10 to 30 nA, 5 points); static threshold 1.01 V.
MesureMeasurementÀ faire sur PCB.To do on a PCB.
AnalyseAnalysisAvec V_th = 2,075 V : écart de +10 à +18 % au lieu de −21 à −35 %.With V_th = 2.075 V: gap of +10 to +18 % instead of −21 to −35 %.
CritiqueCritiqueÀ 10 nA l'asymptote RC (2,000 V) est sous le seuil relevé : un kickback capacitif du reset est plausible, non vérifié. La bascule n'est pas instantanée, ce qui explique l'écart résiduel.At 10 nA the RC asymptote (2.000 V) is below the dynamic threshold extracted from simulation: capacitive kickback from the reset is plausible, unverified. The switching is not instantaneous, which accounts for the residual gap.
Trajectoire simulée de V_m à 10 nA : la bascule a lieu à V_m ≈ 2,08 V (seuil dynamique), bien au-dessus du seuil statique (1,01 V) et de l'hypothèse V_DD/2 (1,5 V).Simulated V_m trajectory at 10 nA: switching happens at V_m ≈ 2.08 V (dynamic threshold), well above the static threshold (1.01 V) and the V_DD/2 assumption (1.5 V).

Mismatch (Monte-Carlo sur les paramètres du modèle)

Les tirages portent sur les paramètres du modèle SPICE. Je n'ai rien mesuré sur de vrais composants, donc les écarts-types sont des hypothèses.

  • Avec σ(VT0) = 150 mV (hypothèse pour des MOS discrets) sur 30 tirages : dispersion simulée de f de 14 à 19 %, et à 10 nA, 14 tirages sur 30 ne spikent plus.
  • En faisant aussi varier I0, κ et le paramètre VTO du modèle du transistor de reset (un seuil dont la dispersion réelle est forte, de l'ordre de 0,8 à 3 V d'après la fiche technique) : 2 tirages sur 30 restent silencieux sur toute la gamme simulée. Ce sont ceux dont le VTO de reset est le plus bas (< 1,5 V dans ce modèle). Mon hypothèse : le reset conduit trop tôt et vide la membrane. À vérifier expérimentalement ; si c'est confirmé, il faudra trier les BS170 réels.
Monte-Carlo sur les paramètres du modèle (σ(V_T0) = 150 mV, 30 tirages) : faisceau de courbes f-I, moyenne ±1σ et nominal. À 10 nA, 14 tirages sur 30 sont silencieux.Monte-Carlo on the model parameters (σ(V_T0) = 150 mV, 30 draws): f-I curve bundle, mean ±1σ and nominal. At 10 nA, 14 draws out of 30 are silent.
Monte-Carlo étendu : nuage f-I (gauche), coefficient de variation de f par courant (centre), et statut de chaque tirage selon son V_TO de reset (droite). Les deux tirages silencieux partout ont le V_TO de reset le plus bas : hypothèse non vérifiée (« mort » sur le graphe = silencieux en simulation).Extended Monte-Carlo: f-I cloud (left), coefficient of variation of f per current (middle), and status of each draw by its reset V_TO (right). The two draws silent everywhere have the lowest reset V_TO: unverified hypothesis ('mort' on the plot = silent in simulation).
I_injNœud V_mdoit atteindre ≈ 2,08 VNode V_mmust reach ≈ 2.08 VX_rst, V_TO < 1,5 Vconduit dès v_spike ≈ 0X_rst, V_TO < 1.5 Vconducts as soon as v_spike ≈ 0Pas de spiketirage « silencieux »No spike"silent" drawHypothèse : I_reset > I_inj sur toute la gamme 10 à 30 nA (à vérifier)Hypothesis: I_reset > I_inj over the whole 10 to 30 nA range (to be checked)
Hypothèse (à vérifier) pour les 2 tirages silencieux du Monte-Carlo étendu : un reset au V_TO trop bas viderait la membrane en continu.Hypothesis (to be checked) for the 2 silent draws of the extended Monte-Carlo: a reset with too low a V_TO would drain the membrane continuously.

Synapses et interface

Synapse excitatrice (1 PMOS)Excitatory synapse (1 PMOS)Synapse inhibitrice shunt (1 NMOS)Shunting inhibitory synapse (1 NMOS)V_DDv_prevers V_m,postto V_m,postV_m,postv_inhGNDI_syn = I₀ · exp((V_DD − v_pre) / U_T)~15 pC par spikeI_syn = I₀ · exp((V_DD − v_pre) / U_T)~15 pC per spikeTire V_m vers GND~65× plus vite que la fuitePulls V_m to GND~65× faster than the leak
Les deux synapses : un seul transistor chacune. L'excitatrice injecte du courant, l'inhibitrice court-circuite la membrane.The two synapses: a single transistor each. The excitatory one injects current, the inhibitory one shorts the membrane.
Réponse simulée de la synapse inhibitrice : V_m, pré-chargé à 1,5 V, est tiré à ~7 mV en 1 ms par un spike inhibiteur (V_inh = 0,75 V), puis se recharge.Simulated response of the inhibitory synapse: V_m, pre-charged to 1.5 V, is pulled down to ~7 mV in 1 ms by an inhibitory spike (V_inh = 0.75 V), then recharges.
v_spikeD1GNDC_holdR_holdv_holdShaper(comportemental)Shaper(behavioral)v_pre = V_DD − 0,4 · v_holdv_gate = 0,5 · v_holdτ = R_hold · C_hold = 1 ms
Le monostable peak-and-hold : la diode charge C_hold au passage du spike, R_hold le décharge lentement. Le shaper convertit v_hold en v_pre (PMOS) ou v_gate (NMOS).The peak-and-hold monostable: the diode charges C_hold when the spike passes, R_hold discharges it slowly. The shaper converts v_hold into v_pre (PMOS) or v_gate (NMOS).
Monostable peak-and-hold simulé : le v_spike brut (0,17 µs) est quasi invisible à cette échelle, v_hold (pic 1,5 V) décroît avec τ ≈ 1 ms.Simulated peak-and-hold monostable: the raw v_spike (0.17 µs) is almost invisible at this scale, v_hold (1.5 V peak) decays with τ ≈ 1 ms.
Neuronepré-synaptiquePre-synapticneuronMonostablepeak-and-hold, τ ≈ 1 msShapercomportementalBehavioralshaperSynapsePMOS (exc.) ouNMOS shunt (inh.)SynapsePMOS (exc.) orNMOS shunt (inh.)Neuronepost-synaptiquePost-synapticneuron0,17 µs0.17 µsv_holdv_preLe vrai spike (0,17 µs, 2,03 V) est trop court : le monostable le prolonge à ~1 ms.The real spike (0.17 µs, 2.03 V) is too short: the monostable stretches it to ~1 ms.
Interface neurone → synapse : sans monostable, la charge injectée par spike est ~7000× trop faible.Neuron → synapse interface: without the monostable, the charge injected per spike is ~7000× too small.
  • Excitatrice (PMOS) : ~15 pC par spike dans le modèle, courant moyen linéaire avec la fréquence (R² = 1,0 en simulation).
  • Inhibitrice par shunt (NMOS) : elle tire la membrane vers la masse. Au-dessus de ~70 Hz d'inhibition, le modèle de neurone est réduit au silence dans cette simulation : c'est le mécanisme utilisé pour le WTA doux.
  • Le problème d'interface : le spike simulé dure 0,17 µs et monte à 2,03 V, trop court pour une synapse (~2 fC par spike au lieu de ~15 pC). Pas question de tricher avec un I0 énorme : j'ai ajouté un monostable à maintien de charge (diode + condensateur + résistance, τ ≈ 1 ms), et la charge par spike passe à ~92 pC.

Les trois démos (simulées)

  • Additionneur en rate coding : les taux de décharge de deux neurones s'additionnent sur un troisième, en simulation. f3 = 0,62·(f1+f2) − 23, R² = 0,98 sur le balayage simulé. Le modèle de neurone de sortie spike plus que ne le prédit son courant moyen : je pense que c'est une excitabilité tirée par les fluctuations, mais je ne l'ai pas testé hors simulation.
  • Mécanisme de compétition de type soft Winner-Take-All (WTA doux) : à I1 = I2, rapport f1/f2 = 1,000. Il monte de façon continue de 0,18 à 2,5 avec ΔI : ce n'est pas une bascule dure (rien dans le montage ne prévoyait mieux).
  • Multiplexeur 2:1 par shunting : ça fonctionne en simulation comme preuve de concept, sans aller jusqu'à une implémentation neuromorphique complète d'un multiplexeur. Sorties simulées à 56,6 Hz (canal A) et 19,4 Hz (canal B), diaphonie résiduelle ~10 %, bascule en ~72 ms. Il a fallu un shunt 50× plus fort, et la simulation a révélé un seuil de transmission synaptique (≳ 20 nA).
Neurone N1I₁ → f₁Neuron N1I₁ → f₁Neurone N2I₂ → f₂Neuron N2I₂ → f₂Synapsemonostable + PMOSSynapsemonostable + PMOSSynapsemonostable + PMOSSynapsemonostable + PMOSNeurone N3→ f₃Neuron N3→ f₃f₃ = 0,62·(f₁+f₂) − 23R² = 0,98
Démo 1 (simulée), additionneur en rate coding : deux modèles de neurone d'entrée excitent un troisième via deux synapses.Demo 1 (simulated), rate-coding adder: two input neuron models excite a third one through two synapses.
Démo 1 simulée : f₁, f₂, f₃ selon I₁ avec I₂ = 12 nA (gauche) ; f₃ simulé contre la prédiction par courant moyen équivalent (droite). Régression f₃ = 0,622·(f₁+f₂) − 23,1, R² = 0,977.Simulated demo 1: f₁, f₂, f₃ versus I₁ with I₂ = 12 nA (left); simulated f₃ against the equivalent-mean-current prediction (right). Regression f₃ = 0.622·(f₁+f₂) − 23.1, R² = 0.977.
Neurone N1I₁ → f₁Neuron N1I₁ → f₁Neurone N2I₂ → f₂Neuron N2I₂ → f₂Synapse exc.Synapse exc.Neurone N_inh→ f_inhNeuron N_inh→ f_inhShuntShunt
Démo 2 (simulée), compétition de type soft Winner-Take-All : N1 et N2 excitent N_inh, qui les inhibe en retour par un shunt partagé (rouge). Le rapport f₁/f₂ monte de 0,18 à 2,5 avec ΔI : un WTA « doux ».Demo 2 (simulated), soft Winner-Take-All competition: N1 and N2 excite N_inh, which inhibits them back through a shared shunt (red). The f₁/f₂ ratio goes from 0.18 to 2.5 with ΔI: a "soft" WTA.
Démo 2 simulée : f₁, f₂ et f_inh selon I₁ avec I₂ = 15 nA (gauche) ; rapport f₁/f₂ selon ΔI = I₁ − I₂, monotone et égal à 1 en ΔI = 0 (droite).Simulated demo 2: f₁, f₂ and f_inh versus I₁ with I₂ = 15 nA (left); ratio f₁/f₂ versus ΔI = I₁ − I₂, monotonic and equal to 1 at ΔI = 0 (right).
ASynapse A(gatée, v_holdA)Synapse A(gated, v_holdA)ShuntCShuntN_tonic(« not C »)N_tonic("not C")ShuntSynapse B(gatée, v_holdB)Synapse B(gated, v_holdB)BY
Démo 3 (simulée), preuve de concept de multiplexeur 2:1 : C ferme le canal A, et ferme N_tonic. N_tonic (« not C ») ferme le canal B tant que C est silencieux. Y ≈ A si C = 0, Y ≈ B si C = 1.Demo 3 (simulated), 2:1 multiplexer proof of concept: C closes channel A and silences N_tonic. N_tonic ("not C") closes channel B while C is silent. Y ≈ A if C = 0, Y ≈ B if C = 1.
Démo 3 simulée : fréquence de sortie f_Y dans les quatre conditions, avec une diaphonie de +8,9 % et +10,5 % (gauche) ; f_Y instantanée autour de la commutation de C à t = 1 s, du plafond A au plafond B en ≈ 72 ms (droite).Simulated demo 3: output frequency f_Y in the four conditions, with +8.9 % and +10.5 % crosstalk (left); instantaneous f_Y around the switch of C at t = 1 s, from the A ceiling to the B ceiling in ≈ 72 ms (right).
0Théorie0Theory1Neurone1Neuron2Synapses2Synapses3Démo 1additionneur3Demo 1adder4Démo 2WTA4Demo 2WTA5Démo 3MUX5Demo 3MUX6Cross-validation Nengo6Nengocross-check7Synthèse7Write-upvert = validé en simulation · gris = à venirgreen = validated in simulation · grey = to come
Les 8 phases du projet : les phases 0 à 5 sont faites en simulation, la validation Nengo et la synthèse restent à faire.The 8 project phases: phases 0 to 5 are done in simulation, the Nengo validation and the write-up are still to do.

Et ensuite

Tout ce qui précède vient de simulations SPICE. L'étape suivante est le PCB : caractériser des BS170 / BS250 réels (la seule étape qui ne se fait pas en simulation), vérifier l'hypothèse sur les tirages silencieux, valider les démos avec Nengo, puis faire le montage physique.

Sources

  • Lapicque, L. (1907). Recherches quantitatives sur l'excitation électrique des nerfs traitée comme une polarisation. J. Physiol. Pathol. Gén., 9, 620–635. — modèle LIF
  • Hodgkin, A. L. & Huxley, A. F. (1952). A quantitative description of membrane current and its application to conduction and excitation in nerve. J. Physiol., 117, 500–544. doi:10.1113/jphysiol.1952.sp004764 — modèle de référence du neurone biologique
  • Gerstner, W. & Kistler, W. M. (2002). Spiking Neuron Models. Cambridge University Press. — modèles à seuil et à fuite
  • Mead, C. (1989). Analog VLSI and Neural Systems. Addison-Wesley. — transistor sub-threshold et neurone axon-hillock
  • Mead, C. (1990). Neuromorphic electronic systems. Proc. IEEE, 78(10), 1629–1636. doi:10.1109/5.58356
  • Liu, S.-C. et al. (2002). Analog VLSI: Circuits and Principles. MIT Press. — équation du MOS sub-threshold
  • Indiveri, G. et al. (2011). Neuromorphic silicon neuron circuits. Front. Neurosci., 5, 73. frontiersin.org — revue des neurones en silicium
  • Lazzaro, J., Ryckebusch, S., Mahowald, M. A. & Mead, C. A. (1989). Winner-take-all networks of O(n) complexity. NIPS 1. neurips.cc — winner-take-all analogique de référence (le WTA doux s'en inspire sans le reproduire)
  • Holt, G. R. & Koch, C. (1997). Shunting inhibition does not have a divisive effect on firing rates. Neural Computation, 9(5). mlanthology.org — effet de l'inhibition par shunt sur la fréquence de décharge

Personal project, summer 2026: a small library of neuromorphic primitives (electronic LIF neuron model, two synapses, three computation demos) intended for discrete BS170 / BS250 MOSFETs biased below threshold.

Project status: for now the results come from SPICE simulations (ngspice, Python scripts); the next step is validating on a PCB. The sub-threshold transistors are idealized models: only the reset uses the model of a real BS170.

The idea

Neurone biologiqueBiological neuronCircuit discretDiscrete circuitMembrane (condensateur)Membrane (capacitor)Condensateur C_mem = 100 pFC_mem = 100 pF capacitorFuite ioniqueIonic leakRésistance R_leak = 200 MΩR_leak = 200 MΩ resistorCanal ionique voltage-dépendantVoltage-gated ion channelMOS sous le seuil (exponentielle en V_GS)Sub-threshold MOSFET (exponential in V_GS)Potentiel d'actionAction potentialCascade de deux inverseursTwo-inverter cascadeRetour au reposReturn to restTransistor de reset BS170BS170 reset transistor
L'analogie de Mead : chaque élément du neurone a son équivalent dans le circuit.Mead's analogy: each element of the neuron has a counterpart in the circuit.
I_injMembrane RCτ_m = R_m · C_mRC membraneτ_m = R_m · C_mComparateurV ≥ V_thComparatorV ≥ V_thSpikereset : V ← V_resetreset: V ← V_resetτ_m · dV/dt = −V + R_m · I_inj
Le modèle LIF (Lapicque) : un circuit RC qui intègre le courant, un seuil, un reset. Trois paramètres : τ_m, V_th, V_reset.The LIF model (Lapicque): an RC circuit integrating the current, a threshold, a reset. Three parameters: τ_m, V_th, V_reset.

Carver Mead observed that a MOSFET biased below its threshold has a current that is exponential in VGS, like some ion transport mechanisms. Rather than simulating a neuron on a microcontroller, I wanted an analog circuit that behaves like the LIF model (for now, in simulation): the capacitor plays the membrane, the leak plays the ionic leak.

Method

NetlistsKiCad / ngspiceNetlistsKiCad / ngspicengspice.tran, .dcngspice.tran, .dcScripts Pythonf-I, Monte-CarloPython scriptsf-I, Monte-CarloCSV + figuresCSV + plotsNengo / NEF(prévu)Nengo / NEF(planned)référence algorithmiquealgorithmic reference
La chaîne de simulation : tout est scripté, donc chaque courbe du projet se régénère.The simulation chain: everything is scripted, so every curve in the project can be regenerated.

The neuron model

I_injMembraneC_mem ∥ R_leakV_mInverseur 1Inverter 1Inverseur 2Inverter 2V_spikeResetBS170Dès que V_spike monte, le BS170 vide la membraneAs soon as V_spike rises, the BS170 drains the membrane
Modèle de neurone LIF de type axon-hillock de Mead : intégration sur C_mem, deux inverseurs sub-threshold pour la bascule, reset par BS170.Mead axon-hillock LIF neuron model: integration on C_mem, two sub-threshold inverters for the switching, BS170 reset.
V_DDGNDV_mI_injC_memR_leakMp1Mn1Mp2Mn2v_inv1C_v1C_vsV_spikeX_rstBS170
Neurone axon-hillock au niveau transistor. Mp/Mn : MOS sub-threshold (SUBTH_PMOS / SUBTH_NMOS), reset par BS170 (rouge).Axon-hillock neuron at transistor level. Mp/Mn: sub-threshold MOSFETs (SUBTH_PMOS / SUBTH_NMOS), reset by the BS170 (red).

A Mead axon-hillock: Cmem = 100 pF in parallel with a 200 MΩ leak (τ = 20 ms), two sub-threshold CMOS inverters in cascade, and a BS170 that resets the membrane. It took 4 bug fixes before getting spikes in simulation, including a 100 MΩ parasitic resistor hidden in the SPICE model of the BS170 used, which kept Vm from reaching threshold.

The simulated f-I curve has the expected shape (simulated rheobase of 9 to 10 nA vs 7.5 nA in theory). The gap comes from assuming Vth = VDD/2: the dynamic threshold extracted from simulation is 2.08 V, well above the simulated static threshold (1.01 V). I suspect capacitive kickback from the reset transistor, but I haven't checked. With this threshold the gap to theory goes from −21/−35 % to +10/+18 %.

Courbe f-I simulée (ngspice, points bleus) contre la théorie LIF idéale (pointillés, V_th = 1,5 V). Rhéobase théorique : 7,5 nA ; premier spike simulé à 10 nA.Simulated f-I curve (ngspice, blue dots) against ideal LIF theory (dashed, V_th = 1.5 V). Theoretical rheobase: 7.5 nA; first simulated spike at 10 nA.
I_inj (nA)f_sim (Hz)f théorie, V_th = 1,5 Vf theory, V_th = 1.5 VÉcartGapf théorie, V_th = 2,075 Vf theory, V_th = 2.075 VÉcartGap
108,4736,07−76,5 %——
1546,7372,13−35,2 %42,50+10,0 %
2080,86106,38−24,0 %68,36+18,3 %
25107,39140,18−23,4 %93,26+15,2 %
30137,19173,80−21,1 %117,82+16,4 %

Approach: the dynamic-threshold case

ProblèmeProblemHypothèseHypothesisConceptionDesignSimulationSimulationMesure(PCB)Measurement(PCB)AnalyseAnalysisCritiqueCritique
La démarche appliquée au seuil dynamique du neurone : vert = fait en simulation, rouge = à faire sur PCB.The approach applied to the neuron's dynamic threshold: green = done in simulation, red = still to do on a PCB.
ÉtapeStepCas du seuil dynamiqueDynamic-threshold case
ProblèmeProblemLa courbe f-I simulée s'écarte de la théorie (−76 % à 10 nA).The simulated f-I curve departs from theory (−76 % at 10 nA).
HypothèseHypothesisLe seuil de bascule n'est pas V_DD/2 = 1,5 V.The switching threshold is not V_DD/2 = 1.5 V.
ConceptionDesignSimulation transitoire dédiée (pas de 1 µs) : on relève V_m quand V_spike franchit 1,5 V.Dedicated transient simulation (1 µs step): V_m is read when V_spike crosses 1.5 V.
SimulationSimulationSeuil dynamique ≈ 2,08 V, constant (2,075 ± 0,006 V sur 10 à 30 nA, 5 points) ; seuil statique 1,01 V.Dynamic threshold ≈ 2.08 V, constant (2.075 ± 0.006 V over 10 to 30 nA, 5 points); static threshold 1.01 V.
MesureMeasurementÀ faire sur PCB.To do on a PCB.
AnalyseAnalysisAvec V_th = 2,075 V : écart de +10 à +18 % au lieu de −21 à −35 %.With V_th = 2.075 V: gap of +10 to +18 % instead of −21 to −35 %.
CritiqueCritiqueÀ 10 nA l'asymptote RC (2,000 V) est sous le seuil relevé : un kickback capacitif du reset est plausible, non vérifié. La bascule n'est pas instantanée, ce qui explique l'écart résiduel.At 10 nA the RC asymptote (2.000 V) is below the dynamic threshold extracted from simulation: capacitive kickback from the reset is plausible, unverified. The switching is not instantaneous, which accounts for the residual gap.
Trajectoire simulée de V_m à 10 nA : la bascule a lieu à V_m ≈ 2,08 V (seuil dynamique), bien au-dessus du seuil statique (1,01 V) et de l'hypothèse V_DD/2 (1,5 V).Simulated V_m trajectory at 10 nA: switching happens at V_m ≈ 2.08 V (dynamic threshold), well above the static threshold (1.01 V) and the V_DD/2 assumption (1.5 V).

Mismatch (Monte-Carlo on model parameters)

The draws are on the SPICE model parameters. I haven't measured anything on real components, so the standard deviations are assumptions.

  • With σ(VT0) = 150 mV (an assumption for discrete MOSFETs) over 30 draws: simulated spread of f of 14 to 19 %, and at 10 nA, 14 draws out of 30 stop spiking.
  • Also varying I0, κ and the VTO parameter of the reset transistor model (a threshold whose real spread is large, around 0.8 to 3 V according to the datasheet): 2 draws out of 30 stay silent over the whole simulated range. They are the ones with the lowest reset VTO (< 1.5 V in this model). My guess: the reset conducts too early and drains the membrane. To be verified experimentally; if confirmed, real BS170s will need sorting.
Monte-Carlo sur les paramètres du modèle (σ(V_T0) = 150 mV, 30 tirages) : faisceau de courbes f-I, moyenne ±1σ et nominal. À 10 nA, 14 tirages sur 30 sont silencieux.Monte-Carlo on the model parameters (σ(V_T0) = 150 mV, 30 draws): f-I curve bundle, mean ±1σ and nominal. At 10 nA, 14 draws out of 30 are silent.
Monte-Carlo étendu : nuage f-I (gauche), coefficient de variation de f par courant (centre), et statut de chaque tirage selon son V_TO de reset (droite). Les deux tirages silencieux partout ont le V_TO de reset le plus bas : hypothèse non vérifiée (« mort » sur le graphe = silencieux en simulation).Extended Monte-Carlo: f-I cloud (left), coefficient of variation of f per current (middle), and status of each draw by its reset V_TO (right). The two draws silent everywhere have the lowest reset V_TO: unverified hypothesis ('mort' on the plot = silent in simulation).
I_injNœud V_mdoit atteindre ≈ 2,08 VNode V_mmust reach ≈ 2.08 VX_rst, V_TO < 1,5 Vconduit dès v_spike ≈ 0X_rst, V_TO < 1.5 Vconducts as soon as v_spike ≈ 0Pas de spiketirage « silencieux »No spike"silent" drawHypothèse : I_reset > I_inj sur toute la gamme 10 à 30 nA (à vérifier)Hypothesis: I_reset > I_inj over the whole 10 to 30 nA range (to be checked)
Hypothèse (à vérifier) pour les 2 tirages silencieux du Monte-Carlo étendu : un reset au V_TO trop bas viderait la membrane en continu.Hypothesis (to be checked) for the 2 silent draws of the extended Monte-Carlo: a reset with too low a V_TO would drain the membrane continuously.

Synapses and interface

Synapse excitatrice (1 PMOS)Excitatory synapse (1 PMOS)Synapse inhibitrice shunt (1 NMOS)Shunting inhibitory synapse (1 NMOS)V_DDv_prevers V_m,postto V_m,postV_m,postv_inhGNDI_syn = I₀ · exp((V_DD − v_pre) / U_T)~15 pC par spikeI_syn = I₀ · exp((V_DD − v_pre) / U_T)~15 pC per spikeTire V_m vers GND~65× plus vite que la fuitePulls V_m to GND~65× faster than the leak
Les deux synapses : un seul transistor chacune. L'excitatrice injecte du courant, l'inhibitrice court-circuite la membrane.The two synapses: a single transistor each. The excitatory one injects current, the inhibitory one shorts the membrane.
Réponse simulée de la synapse inhibitrice : V_m, pré-chargé à 1,5 V, est tiré à ~7 mV en 1 ms par un spike inhibiteur (V_inh = 0,75 V), puis se recharge.Simulated response of the inhibitory synapse: V_m, pre-charged to 1.5 V, is pulled down to ~7 mV in 1 ms by an inhibitory spike (V_inh = 0.75 V), then recharges.
v_spikeD1GNDC_holdR_holdv_holdShaper(comportemental)Shaper(behavioral)v_pre = V_DD − 0,4 · v_holdv_gate = 0,5 · v_holdτ = R_hold · C_hold = 1 ms
Le monostable peak-and-hold : la diode charge C_hold au passage du spike, R_hold le décharge lentement. Le shaper convertit v_hold en v_pre (PMOS) ou v_gate (NMOS).The peak-and-hold monostable: the diode charges C_hold when the spike passes, R_hold discharges it slowly. The shaper converts v_hold into v_pre (PMOS) or v_gate (NMOS).
Monostable peak-and-hold simulé : le v_spike brut (0,17 µs) est quasi invisible à cette échelle, v_hold (pic 1,5 V) décroît avec τ ≈ 1 ms.Simulated peak-and-hold monostable: the raw v_spike (0.17 µs) is almost invisible at this scale, v_hold (1.5 V peak) decays with τ ≈ 1 ms.
Neuronepré-synaptiquePre-synapticneuronMonostablepeak-and-hold, τ ≈ 1 msShapercomportementalBehavioralshaperSynapsePMOS (exc.) ouNMOS shunt (inh.)SynapsePMOS (exc.) orNMOS shunt (inh.)Neuronepost-synaptiquePost-synapticneuron0,17 µs0.17 µsv_holdv_preLe vrai spike (0,17 µs, 2,03 V) est trop court : le monostable le prolonge à ~1 ms.The real spike (0.17 µs, 2.03 V) is too short: the monostable stretches it to ~1 ms.
Interface neurone → synapse : sans monostable, la charge injectée par spike est ~7000× trop faible.Neuron → synapse interface: without the monostable, the charge injected per spike is ~7000× too small.
  • Excitatory (PMOS): ~15 pC per spike in the model, mean current linear with frequency (R² = 1.0 in simulation).
  • Shunting inhibitory (NMOS): pulls the membrane to ground. Above ~70 Hz of inhibition the neuron model goes silent in this simulation: this is the mechanism used for the soft WTA.
  • The interface problem: the simulated spike lasts 0.17 µs and reaches 2.03 V, too short for a synapse (~2 fC per spike instead of ~15 pC). No cheating with a huge I0: I added a charge-holding monostable (diode + capacitor + resistor, τ ≈ 1 ms), and the charge per spike goes up to ~92 pC.

The three demos (simulated)

  • Rate-coding adder: the firing rates of two neurons add up on a third one, in simulation. f3 = 0.62·(f1+f2) − 23, R² = 0.98 on the simulated sweep. The output neuron model spikes more than its mean current predicts: I think it is fluctuation-driven excitability, but I haven't tested that outside simulation.
  • Soft Winner-Take-All (soft WTA) competition mechanism: at I1 = I2, f1/f2 = 1.000. It rises smoothly from 0.18 to 2.5 with ΔI: it is not a hard switch (nothing in the circuit would give better).
  • 2:1 multiplexer by shunting: it works in simulation as a proof of concept, without going as far as a complete neuromorphic implementation of a multiplexer. Simulated outputs at 56.6 Hz (channel A) and 19.4 Hz (channel B), ~10 % residual crosstalk, switches in ~72 ms. It needed a 50× stronger shunt, and the simulation revealed a synaptic transmission threshold (≳ 20 nA).
Neurone N1I₁ → f₁Neuron N1I₁ → f₁Neurone N2I₂ → f₂Neuron N2I₂ → f₂Synapsemonostable + PMOSSynapsemonostable + PMOSSynapsemonostable + PMOSSynapsemonostable + PMOSNeurone N3→ f₃Neuron N3→ f₃f₃ = 0,62·(f₁+f₂) − 23R² = 0,98
Démo 1 (simulée), additionneur en rate coding : deux modèles de neurone d'entrée excitent un troisième via deux synapses.Demo 1 (simulated), rate-coding adder: two input neuron models excite a third one through two synapses.
Démo 1 simulée : f₁, f₂, f₃ selon I₁ avec I₂ = 12 nA (gauche) ; f₃ simulé contre la prédiction par courant moyen équivalent (droite). Régression f₃ = 0,622·(f₁+f₂) − 23,1, R² = 0,977.Simulated demo 1: f₁, f₂, f₃ versus I₁ with I₂ = 12 nA (left); simulated f₃ against the equivalent-mean-current prediction (right). Regression f₃ = 0.622·(f₁+f₂) − 23.1, R² = 0.977.
Neurone N1I₁ → f₁Neuron N1I₁ → f₁Neurone N2I₂ → f₂Neuron N2I₂ → f₂Synapse exc.Synapse exc.Neurone N_inh→ f_inhNeuron N_inh→ f_inhShuntShunt
Démo 2 (simulée), compétition de type soft Winner-Take-All : N1 et N2 excitent N_inh, qui les inhibe en retour par un shunt partagé (rouge). Le rapport f₁/f₂ monte de 0,18 à 2,5 avec ΔI : un WTA « doux ».Demo 2 (simulated), soft Winner-Take-All competition: N1 and N2 excite N_inh, which inhibits them back through a shared shunt (red). The f₁/f₂ ratio goes from 0.18 to 2.5 with ΔI: a "soft" WTA.
Démo 2 simulée : f₁, f₂ et f_inh selon I₁ avec I₂ = 15 nA (gauche) ; rapport f₁/f₂ selon ΔI = I₁ − I₂, monotone et égal à 1 en ΔI = 0 (droite).Simulated demo 2: f₁, f₂ and f_inh versus I₁ with I₂ = 15 nA (left); ratio f₁/f₂ versus ΔI = I₁ − I₂, monotonic and equal to 1 at ΔI = 0 (right).
ASynapse A(gatée, v_holdA)Synapse A(gated, v_holdA)ShuntCShuntN_tonic(« not C »)N_tonic("not C")ShuntSynapse B(gatée, v_holdB)Synapse B(gated, v_holdB)BY
Démo 3 (simulée), preuve de concept de multiplexeur 2:1 : C ferme le canal A, et ferme N_tonic. N_tonic (« not C ») ferme le canal B tant que C est silencieux. Y ≈ A si C = 0, Y ≈ B si C = 1.Demo 3 (simulated), 2:1 multiplexer proof of concept: C closes channel A and silences N_tonic. N_tonic ("not C") closes channel B while C is silent. Y ≈ A if C = 0, Y ≈ B if C = 1.
Démo 3 simulée : fréquence de sortie f_Y dans les quatre conditions, avec une diaphonie de +8,9 % et +10,5 % (gauche) ; f_Y instantanée autour de la commutation de C à t = 1 s, du plafond A au plafond B en ≈ 72 ms (droite).Simulated demo 3: output frequency f_Y in the four conditions, with +8.9 % and +10.5 % crosstalk (left); instantaneous f_Y around the switch of C at t = 1 s, from the A ceiling to the B ceiling in ≈ 72 ms (right).
0Théorie0Theory1Neurone1Neuron2Synapses2Synapses3Démo 1additionneur3Demo 1adder4Démo 2WTA4Demo 2WTA5Démo 3MUX5Demo 3MUX6Cross-validation Nengo6Nengocross-check7Synthèse7Write-upvert = validé en simulation · gris = à venirgreen = validated in simulation · grey = to come
Les 8 phases du projet : les phases 0 à 5 sont faites en simulation, la validation Nengo et la synthèse restent à faire.The 8 project phases: phases 0 to 5 are done in simulation, the Nengo validation and the write-up are still to do.

Next

Everything above comes from SPICE simulations. The next step is the PCB: characterizing real BS170 / BS250 (the only step that can't be done in simulation), checking the hypothesis on the silent draws, validating the demos with Nengo, then building the physical circuit.

Sources

  • Lapicque, L. (1907). Recherches quantitatives sur l'excitation électrique des nerfs traitée comme une polarisation. J. Physiol. Pathol. Gén., 9, 620–635. — LIF model
  • Hodgkin, A. L. & Huxley, A. F. (1952). A quantitative description of membrane current and its application to conduction and excitation in nerve. J. Physiol., 117, 500–544. doi:10.1113/jphysiol.1952.sp004764 — reference model of the biological neuron
  • Gerstner, W. & Kistler, W. M. (2002). Spiking Neuron Models. Cambridge University Press. — leaky threshold models
  • Mead, C. (1989). Analog VLSI and Neural Systems. Addison-Wesley. — sub-threshold transistor and axon-hillock neuron
  • Mead, C. (1990). Neuromorphic electronic systems. Proc. IEEE, 78(10), 1629–1636. doi:10.1109/5.58356
  • Liu, S.-C. et al. (2002). Analog VLSI: Circuits and Principles. MIT Press. — sub-threshold MOSFET equation
  • Indiveri, G. et al. (2011). Neuromorphic silicon neuron circuits. Front. Neurosci., 5, 73. frontiersin.org — review of silicon neurons
  • Lazzaro, J., Ryckebusch, S., Mahowald, M. A. & Mead, C. A. (1989). Winner-take-all networks of O(n) complexity. NIPS 1. neurips.cc — reference analog winner-take-all (the soft WTA is inspired by it, not a reproduction)
  • Holt, G. R. & Koch, C. (1997). Shunting inhibition does not have a divisive effect on firing rates. Neural Computation, 9(5). mlanthology.org — effect of shunting inhibition on firing rate