From cae5478e03365289f3222f4c0698e73c1c2569b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lie=20saulquin?= <aurelie.saulq@gmail.com> Date: Mon, 24 Mar 2025 15:33:18 +0100 Subject: [PATCH] change template --- .../neurons/ShiftLif/shiftlif_parallel.vhd | 15 ++++++++------ .../modnef_driver/drivers/xstep_driver.py | 3 ++- modneflib/modnef/templates/dataset.py | 20 +++++++++++++++++++ modneflib/modnef/templates/evaluation.py | 16 ++------------- modneflib/modnef/templates/train.py | 18 +---------------- modneflib/modnef/templates/vhdl_generation.py | 17 ++-------------- 6 files changed, 36 insertions(+), 53 deletions(-) create mode 100644 modneflib/modnef/templates/dataset.py diff --git a/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd b/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd index 6c6989f..32a3aca 100644 --- a/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd +++ b/ModNEF_Sources/modules/neurons/ShiftLif/shiftlif_parallel.vhd @@ -127,7 +127,7 @@ architecture Behavioral of ShiftLif_Parallel is end component; -- type definition - type transmission_state_t is (idle, voltage_update, check_arbitration, request, accept, wait_arbitration); + type transmission_state_t is (idle, voltage_update, check_arbitration, request, accept, wait_arbitration, arbitration_finish); type reception_state_t is (idle, request, get_data); -- ram signals @@ -249,9 +249,8 @@ begin when check_arbitration => if spikes = no_spike then - transmission_state <= idle; + transmission_state <= arbitration_finish; o_emu_busy <= '0'; - tr_fsm_en := '0'; else transmission_state <= request; arb_spikes <= spikes; @@ -278,12 +277,15 @@ begin when wait_arbitration => start_arb <= '0'; if arb_busy = '0' then - transmission_state <= idle; - o_emu_busy <= '0'; - tr_fsm_en := '0'; + transmission_state <= arbitration_finish; else transmission_state <= wait_arbitration; end if; + + when arbitration_finish => + transmission_state <= idle; + o_emu_busy <= '0'; + tr_fsm_en := '0'; end case; end if; end if; @@ -337,3 +339,4 @@ begin end generate neuron_generation; end Behavioral; + diff --git a/modneflib/modnef/modnef_driver/drivers/xstep_driver.py b/modneflib/modnef/modnef_driver/drivers/xstep_driver.py index 778b95b..6b5b216 100644 --- a/modneflib/modnef/modnef_driver/drivers/xstep_driver.py +++ b/modneflib/modnef/modnef_driver/drivers/xstep_driver.py @@ -160,8 +160,9 @@ class XStep_Driver(ModNEF_Driver): step_send += 1 if step == len(sample_aer)-1: + print(len(data)) emulation_result = self.rust_driver.data_transmission(data, reset_membrane) - + print("hi") res_step = self._unpack_data(emulation_result) for rs in res_step: for aer in rs: diff --git a/modneflib/modnef/templates/dataset.py b/modneflib/modnef/templates/dataset.py new file mode 100644 index 0000000..e0b86fc --- /dev/null +++ b/modneflib/modnef/templates/dataset.py @@ -0,0 +1,20 @@ +import os +import tonic +from torch.utils.data import DataLoader + +"""DataSet Definition""" +dataset_path = f"{os.environ['HOME']}/datasets" + +# data set definition, change to your dataset +sensor_size = tonic.datasets.NMNIST.sensor_size +frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=5) + +train_set = tonic.datasets.NMNIST(save_to=dataset_path, train=True, transform=frame_transform) +test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform) + +# batch loader +batch_size = 64 + +trainLoader = DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) +testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) +validationLoader = None \ No newline at end of file diff --git a/modneflib/modnef/templates/evaluation.py b/modneflib/modnef/templates/evaluation.py index ebcc8f8..91cba66 100644 --- a/modneflib/modnef/templates/evaluation.py +++ b/modneflib/modnef/templates/evaluation.py @@ -7,6 +7,7 @@ import torch from run_lib import * import sys from model import MyModel +from dataset import * if __name__ == "__main__": @@ -53,20 +54,7 @@ if __name__ == "__main__": conf_matrix_file = "confusion_matrix.png" conf_matrix_classes = [str(i) for i in range(10)] - """DataSet Definition""" - dataset_path = f"{os.environ['HOME']}/datasets" - - # data set definition, change to your dataset - sensor_size = tonic.datasets.NMNIST.sensor_size - frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=10) - - test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform) - - # batch loader - batch_size = 64 - testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) - if kind == "eval": acc, y_pred, y_true = evaluation( model=model, @@ -99,7 +87,7 @@ if __name__ == "__main__": exit(-1) if save_conf_matrix: - confusion_matrix( + conf_matrix( y_true=y_true, y_pred=y_pred, file_name=conf_matrix_file, diff --git a/modneflib/modnef/templates/train.py b/modneflib/modnef/templates/train.py index b67de45..0f48125 100644 --- a/modneflib/modnef/templates/train.py +++ b/modneflib/modnef/templates/train.py @@ -6,6 +6,7 @@ from snntorch.surrogate import fast_sigmoid from run_lib import * import torch from model import MyModel +from dataset import * if __name__ == "__main__": @@ -31,23 +32,6 @@ if __name__ == "__main__": save_plot = False save_history = False output_path = "." - - """DataSet Definition""" - dataset_path = f"{os.environ['HOME']}/datasets" - - # data set definition, change to your dataset - sensor_size = tonic.datasets.NMNIST.sensor_size - frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=5) - - train_set = tonic.datasets.NMNIST(save_to=dataset_path, train=True, transform=frame_transform) - test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform) - - # batch loader - batch_size = 64 - - trainLoader = DataLoader(train_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) - testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) - validationLoader = None train( model=model, diff --git a/modneflib/modnef/templates/vhdl_generation.py b/modneflib/modnef/templates/vhdl_generation.py index fcca214..563d1a1 100644 --- a/modneflib/modnef/templates/vhdl_generation.py +++ b/modneflib/modnef/templates/vhdl_generation.py @@ -6,6 +6,7 @@ from snntorch.surrogate import fast_sigmoid from run_lib import * import torch from model import MyModel +from dataset import * if __name__ == "__main__": @@ -33,21 +34,7 @@ if __name__ == "__main__": """VHDL file definition""" output_path = "." file_name = "template_vhdl_model.vhd" - driver_config_path = "driver_config" - - """DataSet Definition""" - dataset_path = f"{os.environ['HOME']}/datasets" - - # data set definition, change to your dataset - sensor_size = tonic.datasets.NMNIST.sensor_size - frame_transform = tonic.transforms.ToFrame(sensor_size=sensor_size, n_time_bins=10) - - test_set = tonic.datasets.NMNIST(save_to=dataset_path, train=False, transform=frame_transform) - - # batch loader - batch_size = 64 - - testLoader = DataLoader(test_set, batch_size=batch_size, shuffle=True, drop_last = True, collate_fn = tonic.collation.PadTensors(batch_first=True)) + driver_config_path = "driver_config.yml" acc, y_pred, y_true = hardware_estimation( model=model, -- GitLab