Rapid progress of artificial neural network applications in recent years has led to the issue of an unprecedented energy consumption. It can be solved by the implementation of ener... Activation: spiking neural network, neuromorphic, memristor
Rapid progress of artificial neural network applications in recent years has led to the issue of an unprecedented energy consumption. It can be solved by the implementation of energy efficient hardware based on non-von-Neumann architectures, which requires the development of electronic components emulating the behavior of synapses and neurons. While research of synaptic elements is vast, the technology for fabrication of scalable and highly reproducible neuronal elements is far less developed. In this paper, we demonstrate an artificial neuron with multiple functionalities based on filamentary switching Ag/Hf${0.5}$Zr${0.5}$O$_2$ (HZO) memristors. To improve the parameters of memristors, we propose a two-step annealing method, which allows for better control of the crystallization of the
Rapid progress of artificial neural network applications in recent years has led to the issue of an unprecedented energy consumption.
It can be solved by the implementation of energy efficient hardware based on non-von-Neumann architectures, which requires the development of electronic components emulating the behavior of synapses and neurons.
While research of synaptic elements is vast, the technology for fabrication of scalable and highly reproducible neuronal elements is far less developed.
In this paper, we demonstrate an artificial neuron with multiple functionalities based on filamentary switching Ag/Hf${0.5}$Zr${0.5}$O$_2$ (HZO) memristors.
class MemristiveNeuron:
def __init__(self):
self.threshold = 1.0
self.refractory = 0
def encode_ttfs(self, current_input):
# Time-to-first-spike encoding
for t in range(1000):
if self._membrane_potential(current_input) > self.threshold:
return t * 0.001 # seconds
return None
def encode_spike_count(self, current_input, duration=1.0):
# Spike count encoding
count = 0
for t in range(int(duration / 0.001)):
if self._membrane_potential(current_input) > self.threshold:
count += 1
return count
def _membrane_potential(self, current_input):
return current_input * 0.1 # simplified