diff --git a/ModNEF_Sources/modules/uart/uart_xstep_timer.vhd b/ModNEF_Sources/modules/uart/uart_xstep_timer.vhd index e38d9b256bcfae0799a7d855243c3d98993b1489..53d5a403d800bb20f43c47fc359f7d19fc51dff2 100644 --- a/ModNEF_Sources/modules/uart/uart_xstep_timer.vhd +++ b/ModNEF_Sources/modules/uart/uart_xstep_timer.vhd @@ -220,7 +220,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 count_time <= '0'; if read_empty = '1' then -- no more data to process emu_state <= push_timer; diff --git a/modneflib/modnef/modnef_driver/drivers/xstep_timer_driver.py b/modneflib/modnef/modnef_driver/drivers/xstep_timer_driver.py index 58de027609fb796bc97afccf849716105446ae7e..ebb23577999a295b418abf784e71ce968055735e 100644 --- a/modneflib/modnef/modnef_driver/drivers/xstep_timer_driver.py +++ b/modneflib/modnef/modnef_driver/drivers/xstep_timer_driver.py @@ -144,7 +144,7 @@ class XStep_Timer_Driver(ModNEF_Driver): sample_aer = [transformation(input_sample[step]) for step in range(len(input_sample))] for es in range(extra_step): - sample_aer.append([]) + sample_aer.append([0, 1, 2, 3]) step_send = 0 res = [0 for _ in range(self.output_layer_size)] @@ -155,11 +155,11 @@ class XStep_Timer_Driver(ModNEF_Driver): for step in range(len(sample_aer)): next_data = [] + if(len(sample_aer[step])+len(next_data) > 256**self.queue_read_width): + print(f"warning, the read queue cannot encode the len of emulation step : acutal len {len(sample_aer[step])}, maximum len {256**self.qeue_read_width}") next_data.append(len(sample_aer[step])) next_data.extend(sample_aer[step]) - if(len(sample_aer[step]) > 256**self.queue_read_width): - print(f"warning, the read queue cannot encode the len of emulation step : acutal len {len(sample_aer[step])}, maximum len {256**self.qeue_read_width}") - if len(data) + len(next_data) > self.queue_read_depth or (step_send+1)*self.output_layer_size > self.queue_write_depth-2: + if len(data) + len(next_data) > self.queue_read_depth or step_send*self.output_layer_size > self.queue_write_depth-2: emulation_result = self.rust_driver.data_transmission(data, False) res_step = self._unpack_data(emulation_result) @@ -201,8 +201,10 @@ class XStep_Timer_Driver(ModNEF_Driver): #print((data[0]*256 + data[1])*self.clock_period) + self.sample_time += (data[0]*256 + data[1])*self.clock_period + while index < len(data): n_data = data[index] index += 1 diff --git a/modneflib/modnef/modnef_torch/modnef_neurons/srlif_model/shiftlif.py b/modneflib/modnef/modnef_torch/modnef_neurons/srlif_model/shiftlif.py index 1906fb5ceac64fc22f8b4adae6a25d14656ae814..395b4bca733e624df0dde898d22e44a6373fdcbd 100644 --- a/modneflib/modnef/modnef_torch/modnef_neurons/srlif_model/shiftlif.py +++ b/modneflib/modnef/modnef_torch/modnef_neurons/srlif_model/shiftlif.py @@ -257,6 +257,10 @@ class ShiftLIF(ModNEFNeuron): self.mem = self.mem+input_ + if self.hardware_estimation_flag: + self.val_min = torch.min(torch.min(input_.min(), self.mem.min()), self.val_min) + self.val_max = torch.max(torch.max(input_.max(), self.mem.max()), self.val_max) + if self.reset_mechanism == "subtract": self.mem = self.mem-self.__shift(self.mem)-self.reset*self.threshold elif self.reset_mechanism == "zero":