From 7f68d35369d8c02b37559205a4ead8ba6a4d3ca8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Lanzend=C3=B6rfer?= <leviathan@libresilicon.com>
Date: Sun, 30 Jun 2024 07:05:34 +0100
Subject: [PATCH] Add training for RNN during backprop

---
 src/rtl/neuron.v | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/rtl/neuron.v b/src/rtl/neuron.v
index 857c783..6895e96 100644
--- a/src/rtl/neuron.v
+++ b/src/rtl/neuron.v
@@ -101,7 +101,7 @@ module neuron #(
         else
         if(!backprop_done && backprop_running)
         begin
-
+            // Adjust normal weights
             if( regidx < NUMBER_SYNAPSES )
             begin
                 if(backprop_in_port_store[regidx] && neuron_output) begin
@@ -113,15 +113,26 @@ module neuron #(
                 end
                 regidx <= regidx+1;
             end
-
-            else if( regidx == NUMBER_SYNAPSES )
+            // Adjust RNN weights
+            else if( regidx < NUM_WEIGHTS )
+            begin
+                if(rnn_inputs[regidx] && neuron_output) begin
+                    RNNW[regidx-NUMBER_SYNAPSES] <= $signed(RNNW[regidx-NUMBER_SYNAPSES]) - $signed(dw);
+                end
+                else
+                if(rnn_inputs[regidx] && !neuron_output) begin
+                    RNNW[regidx-NUMBER_SYNAPSES] <= $signed(RNNW[regidx-NUMBER_SYNAPSES]) + $signed(dw);
+                end
+                regidx <= regidx+1;
+            end
+            // Reset the redister index counter
+            else if( regidx == NUM_WEIGHTS )
             begin
                 //$display("Backprop done");
                 backprop_done <= 1;
                 backprop_running <= 0;
                 regidx <= 0;
             end
-
         end
 
         else
-- 
GitLab