From dcd96623965c1a4ffe3152769c4873a8355f6fdc Mon Sep 17 00:00:00 2001
From: ahoni <aurelie.saulq@proton.me>
Date: Fri, 4 Apr 2025 08:34:39 +0200
Subject: [PATCH] add qat test
---
ModNEF_Sources/modules/neurons/BLIF/beta_lif.vhd | 4 +++-
ModNEF_Sources/modules/uart/uart_xstep.vhd | 2 +-
modneflib/modnef/arch_builder/modules/BLIF/blif.py | 3 ---
.../modnef/modnef_torch/modnef_neurons/blif_model/blif.py | 8 ++++++--
.../modnef_torch/modnef_neurons/modnef_torch_neuron.py | 1 +
5 files changed, 11 insertions(+), 7 deletions(-)
diff --git a/ModNEF_Sources/modules/neurons/BLIF/beta_lif.vhd b/ModNEF_Sources/modules/neurons/BLIF/beta_lif.vhd
index 83722e0..468271e 100644
--- a/ModNEF_Sources/modules/neurons/BLIF/beta_lif.vhd
+++ b/ModNEF_Sources/modules/neurons/BLIF/beta_lif.vhd
@@ -121,7 +121,9 @@ begin
case state is
when multiplication =>
V_mult := std_logic_vector(signed(V) * signed(beta));
- V_buff := V_mult(fixed_point + variable_size-1 downto fixed_point);
+ V_mult := std_logic_vector(shift_right(signed(V_mult), fixed_point));
+ V_buff := V_mult(variable_size-1 downto 0);
+ --V_buff := V_mult(fixed_point + variable_size-1 downto fixed_point);
if signed(V_buff) >= signed(v_threshold) then
spike <= '1';
diff --git a/ModNEF_Sources/modules/uart/uart_xstep.vhd b/ModNEF_Sources/modules/uart/uart_xstep.vhd
index efa6275..43ade23 100644
--- a/ModNEF_Sources/modules/uart/uart_xstep.vhd
+++ b/ModNEF_Sources/modules/uart/uart_xstep.vhd
@@ -196,7 +196,7 @@ begin
end if;
when wait_out_aer =>
- if i_emu_ready = '1' then
+ if i_emu_ready = '1' and network_to_uart_busy='0' then
if read_empty = '1' then -- no more data to process
start_uart_transmission <= '1';
emu_state <= send_aer;
diff --git a/modneflib/modnef/arch_builder/modules/BLIF/blif.py b/modneflib/modnef/arch_builder/modules/BLIF/blif.py
index b6a0663..9dc9af6 100644
--- a/modneflib/modnef/arch_builder/modules/BLIF/blif.py
+++ b/modneflib/modnef/arch_builder/modules/BLIF/blif.py
@@ -193,8 +193,6 @@ class BLif(ModNEFArchMod):
bw = self.quantizer.bitwidth
mem_file = open(f"{output_path}/{self.mem_init_file}", 'w')
-
- truc = open(f"temp_{self.mem_init_file}", 'w')
if self.quantizer.signed:
for i in range(self.input_neuron):
@@ -202,7 +200,6 @@ class BLif(ModNEFArchMod):
for j in range(self.output_neuron-1, -1, -1):
w_line = (w_line<<bw) + two_comp(self.quantizer(weights[i][j]), bw)
- truc.write(f"{i} {j} {two_comp(self.quantizer(weights[i][j]), bw)}\n")
mem_file.write(f"@{to_hex(i)} {to_hex(w_line)}\n")
diff --git a/modneflib/modnef/modnef_torch/modnef_neurons/blif_model/blif.py b/modneflib/modnef/modnef_torch/modnef_neurons/blif_model/blif.py
index c435ed1..08f17e7 100644
--- a/modneflib/modnef/modnef_torch/modnef_neurons/blif_model/blif.py
+++ b/modneflib/modnef/modnef_torch/modnef_neurons/blif_model/blif.py
@@ -228,14 +228,17 @@ class BLIF(ModNEFNeuron):
if not self.mem.shape == forward_current.shape:
self.mem = torch.zeros_like(forward_current, device=self.mem.device)
- self.mem = self.mem + forward_current
+ self.reset = self.mem_reset(self.mem)
+
+ self.mem = self.mem + forward_current - self.reset*self.threshold
if self.hardware_estimation_flag:
self.val_min = torch.min(self.mem.min(), self.val_min)
self.val_max = torch.max(self.mem.max(), self.val_max)
+
if self.reset_mechanism == "subtract":
- self.mem = self.mem*self.beta#-self.reset*self.threshold
+ self.mem = self.mem*self.beta
elif self.reset_mechanism == "zero":
self.mem = self.mem*self.beta-self.reset*self.mem
else:
@@ -268,6 +271,7 @@ class BLIF(ModNEFNeuron):
if self.hardware_estimation_flag:
val_max = max(abs(self.val_max), abs(self.val_min))
val_max = self.quantizer(val_max)
+ print(val_max)
self.hardware_description["variable_size"] = ceil(log(val_max)/log(256))*8
else:
self.hardware_description["variable_size"]=16
diff --git a/modneflib/modnef/modnef_torch/modnef_neurons/modnef_torch_neuron.py b/modneflib/modnef/modnef_torch/modnef_neurons/modnef_torch_neuron.py
index 49b31e5..9a48b0c 100644
--- a/modneflib/modnef/modnef_torch/modnef_neurons/modnef_torch_neuron.py
+++ b/modneflib/modnef/modnef_torch/modnef_neurons/modnef_torch_neuron.py
@@ -60,6 +60,7 @@ class ModNEFNeuron(SpikingNeuron):
)
self.fc = QuantLinear(in_features=in_features, out_features=out_features)
+ #self.fc = nn.Linear(in_features=in_features, out_features=out_features, bias=False)
self.hardware_estimation_flag = False
--
GitLab