diff --git a/inc/pulp_nnx_neureka.h b/inc/pulp_nnx_neureka.h index 25ef4a8..80096c8 100644 --- a/inc/pulp_nnx_neureka.h +++ b/inc/pulp_nnx_neureka.h @@ -19,13 +19,13 @@ */ #include "neureka.h" -#include "neureka_siracusa_bsp.h" +#include "neureka_bsp.h" #include "neureka_task.h" #include /* PULP-NNX interface */ -void neureka_nnx_init(neureka_dev_t *dev, neureka_siracusa_conf_t *conf); +void neureka_nnx_init(neureka_dev_t *dev, neureka_bsp_conf_t *conf); void neureka_nnx_term(neureka_dev_t *dev); /** neureka_nnx_dispatch_check diff --git a/neureka/bsp/neureka_bsp.h b/neureka/bsp/neureka_bsp.h new file mode 100644 index 0000000..41df5c7 --- /dev/null +++ b/neureka/bsp/neureka_bsp.h @@ -0,0 +1,13 @@ +#ifdef NNX_NEUREKA_TESTBENCH + #include "neureka_testbench_bsp.h" + #define neureka_bsp_conf_t neureka_testbench_conf_t + #define neureka_bsp_open neureka_testbench_open + #define neureka_bsp_close neureka_testbench_close + #define neureka_bsp_event_wait_and_clear neureka_testbench_event_wait_and_clear +#else + #include "neureka_siracusa_bsp.h" + #define neureka_bsp_conf_t neureka_siracusa_conf_t + #define neureka_bsp_open neureka_siracusa_open + #define neureka_bsp_close neureka_siracusa_close + #define neureka_bsp_event_wait_and_clear neureka_siracusa_event_wait_and_clear +#endif \ No newline at end of file diff --git a/neureka/bsp/neureka_siracusa_bsp.c b/neureka/bsp/siracusa/neureka_siracusa_bsp.c similarity index 100% rename from neureka/bsp/neureka_siracusa_bsp.c rename to neureka/bsp/siracusa/neureka_siracusa_bsp.c diff --git a/neureka/bsp/neureka_siracusa_bsp.h b/neureka/bsp/siracusa/neureka_siracusa_bsp.h similarity index 100% rename from neureka/bsp/neureka_siracusa_bsp.h rename to neureka/bsp/siracusa/neureka_siracusa_bsp.h diff --git a/neureka/bsp/testbench/neureka_testbench_bsp.c b/neureka/bsp/testbench/neureka_testbench_bsp.c new file mode 100644 index 0000000..ff90a63 --- /dev/null +++ b/neureka/bsp/testbench/neureka_testbench_bsp.c @@ -0,0 +1,50 @@ +/* + * Luka Macan + * Francesco Conti + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include "neureka_testbench_bsp.h" +#include + +#define NEUREKA_TESTBENCH_CLUSTER_CTRL_BASE_ADDR (0x00100000) +#define NEUREKA_TESTBENCH_BASE_ADDR (0x00100000) +// fixme +// #define NEUREKA_TESTBENCH_WEIGHT_MEM_BASE_ADDR (0x10400000) +// #define NEUREKA_TESTBENCH_WEIGHT_MEM_MRAM_OFFSET (0x00000000) +// #define NEUREKA_TESTBENCH_WEIGHT_MEM_SRAM_OFFSET (0x00400000) + +void neureka_testbench_open(neureka_testbench_conf_t *conf) { + return; +} + +void neureka_testbench_close() { + return; +} + +void neureka_testbench_event_wait_and_clear() { + asm volatile ("wfi" ::: "memory"); +} + +static const neureka_dev_t neureka_testbench_dev = { + .hwpe_dev = (struct hwpe_dev_t){ + .base_addr = (volatile uint32_t *)NEUREKA_TESTBENCH_BASE_ADDR}}; + +const neureka_dev_t *neureka_testbench_get_dev() { + return &neureka_testbench_dev; +} diff --git a/neureka/bsp/testbench/neureka_testbench_bsp.h b/neureka/bsp/testbench/neureka_testbench_bsp.h new file mode 100644 index 0000000..35428d1 --- /dev/null +++ b/neureka/bsp/testbench/neureka_testbench_bsp.h @@ -0,0 +1,36 @@ +/* + * Luka Macan + * + * Copyright 2023 ETH Zurich and University of Bologna + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __NEUREKA_TESTBENCH_BSP_H__ +#define __NEUREKA_TESTBENCH_BSP_H__ + +#include "neureka.h" +#include + +typedef struct neureka_testbench_conf_t { + int max_stall; +} neureka_testbench_conf_t; + +void neureka_testbench_open(neureka_testbench_conf_t *conf); +void neureka_testbench_close(); +void neureka_testbench_event_wait_and_clear(); +const neureka_dev_t *neureka_testbench_get_dev(); + +#endif // !__NEUREKA_TESTBENCH_BSP_H__ diff --git a/src/pulp_nnx_neureka.c b/src/pulp_nnx_neureka.c index 0abb845..b814f23 100644 --- a/src/pulp_nnx_neureka.c +++ b/src/pulp_nnx_neureka.c @@ -26,14 +26,14 @@ #include #include -void neureka_nnx_init(neureka_dev_t *dev, neureka_siracusa_conf_t *conf) { - neureka_siracusa_open(conf); +void neureka_nnx_init(neureka_dev_t *dev, neureka_bsp_conf_t *conf) { + neureka_bsp_open(conf); hwpe_soft_clear(&dev->hwpe_dev); } void neureka_nnx_term(neureka_dev_t *dev) { hwpe_soft_clear(&dev->hwpe_dev); - neureka_siracusa_close(); + neureka_bsp_close(); } int neureka_nnx_dispatch_check(neureka_dev_t *dev) { @@ -42,7 +42,7 @@ int neureka_nnx_dispatch_check(neureka_dev_t *dev) { void neureka_nnx_dispatch_wait(neureka_dev_t *dev) { while (!neureka_nnx_dispatch_check(dev)) { - neureka_siracusa_event_wait_and_clear(); + neureka_bsp_event_wait_and_clear(); } } @@ -71,6 +71,6 @@ int neureka_nnx_resolve_check(neureka_dev_t *dev, neureka_task_t *task) { void neureka_nnx_resolve_wait(neureka_dev_t *dev, neureka_task_t *task) { while (!neureka_nnx_resolve_check(dev, task)) { - neureka_siracusa_event_wait_and_clear(); + neureka_bsp_event_wait_and_clear(); } }