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