From 174f46dac8b55e9f94feeb7b1d618b93ce1bf609 Mon Sep 17 00:00:00 2001 From: ccaccavella Date: Tue, 30 Jul 2024 15:44:00 +0200 Subject: [PATCH 1/2] add sdnfixed udated with correct sdn implementation --- src/lava/proc/sdn/models.py | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/lava/proc/sdn/models.py b/src/lava/proc/sdn/models.py index 5ce8f53dc..958ff6ad0 100644 --- a/src/lava/proc/sdn/models.py +++ b/src/lava/proc/sdn/models.py @@ -282,3 +282,36 @@ def run_spk(self) -> None: s_out_scaled = self.dynamics(a_in_data) s_out = np.right_shift(s_out_scaled, self.state_exp) self.s_out.send(s_out) + + +@implements(proc=SigmaDelta, protocol=LoihiProtocol) +@requires(CPU) +@tag('fixed_pt') +class PySigmaDeltaModelFixedCorrected(AbstractSigmaDeltaModel): + """Fixed point implementation of Sigma Delta neuron.""" + a_in = LavaPyType(PyInPort.VEC_DENSE, np.int32, precision=24) + s_out = LavaPyType(PyOutPort.VEC_DENSE, np.int32, precision=24) + + vth: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=24) + sigma: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=24) + act: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=24) + residue: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=24) + error: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=24) + bias: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=16) + + spike_exp: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=3) + state_exp: np.ndarray = LavaPyType(np.ndarray, np.int32, precision=3) + cum_error: np.ndarray = LavaPyType(np.ndarray, bool, precision=1) + + def run_spk(self) -> None: + # Receive synaptic input + a_in_data = self.a_in.recv() + self.sigma = self.sigma_dynamics(a_in_data) + act = self.activation_dynamics(self.sigma) + delta = act - self.act + abs_delta = np.abs(delta) + s_out_scaled = np.where(abs_delta >= self.vth, delta, 0) + s_out = np.right_shift(s_out_scaled, self.state_exp) + delta = np.left_shift(s_out, self.state_exp) + self.act += delta + self.s_out.send(s_out) From 90a6afd92cbdb8da05f66444a572f00edda31ee4 Mon Sep 17 00:00:00 2001 From: ccaccavella Date: Wed, 31 Jul 2024 10:32:42 +0200 Subject: [PATCH 2/2] cleaning --- src/lava/proc/sdn/models.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/lava/proc/sdn/models.py b/src/lava/proc/sdn/models.py index 958ff6ad0..c2181a714 100644 --- a/src/lava/proc/sdn/models.py +++ b/src/lava/proc/sdn/models.py @@ -309,8 +309,7 @@ def run_spk(self) -> None: self.sigma = self.sigma_dynamics(a_in_data) act = self.activation_dynamics(self.sigma) delta = act - self.act - abs_delta = np.abs(delta) - s_out_scaled = np.where(abs_delta >= self.vth, delta, 0) + s_out_scaled = np.where(np.abs(delta) >= self.vth, delta, 0) s_out = np.right_shift(s_out_scaled, self.state_exp) delta = np.left_shift(s_out, self.state_exp) self.act += delta