mlonmcu 0.3.0.dev0__3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mlonmcu/__init__.py +26 -0
- mlonmcu/artifact.py +172 -0
- mlonmcu/cli/__init__.py +19 -0
- mlonmcu/cli/build.py +119 -0
- mlonmcu/cli/cleanup.py +75 -0
- mlonmcu/cli/common.py +227 -0
- mlonmcu/cli/compile.py +87 -0
- mlonmcu/cli/env.py +68 -0
- mlonmcu/cli/export.py +93 -0
- mlonmcu/cli/flow.py +67 -0
- mlonmcu/cli/helper/__init__.py +18 -0
- mlonmcu/cli/helper/filter.py +25 -0
- mlonmcu/cli/helper/parse.py +159 -0
- mlonmcu/cli/init.py +130 -0
- mlonmcu/cli/load.py +87 -0
- mlonmcu/cli/main.py +116 -0
- mlonmcu/cli/models.py +48 -0
- mlonmcu/cli/run.py +56 -0
- mlonmcu/cli/setup.py +136 -0
- mlonmcu/cli/tune.py +48 -0
- mlonmcu/config.py +219 -0
- mlonmcu/context/__init__.py +22 -0
- mlonmcu/context/context.py +545 -0
- mlonmcu/context/read_write_filelock.py +327 -0
- mlonmcu/environment/__init__.py +18 -0
- mlonmcu/environment/config.py +214 -0
- mlonmcu/environment/environment.py +501 -0
- mlonmcu/environment/init.py +191 -0
- mlonmcu/environment/list.py +81 -0
- mlonmcu/environment/loader.py +250 -0
- mlonmcu/environment/templates.py +69 -0
- mlonmcu/environment/writer.py +117 -0
- mlonmcu/feature/__init__.py +18 -0
- mlonmcu/feature/feature.py +230 -0
- mlonmcu/feature/features.py +1537 -0
- mlonmcu/feature/type.py +33 -0
- mlonmcu/flow/__init__.py +61 -0
- mlonmcu/flow/backend.py +234 -0
- mlonmcu/flow/framework.py +69 -0
- mlonmcu/flow/tflm/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/__init__.py +23 -0
- mlonmcu/flow/tflm/backend/backend.py +47 -0
- mlonmcu/flow/tflm/backend/tflmc.py +129 -0
- mlonmcu/flow/tflm/backend/tflmi.py +385 -0
- mlonmcu/flow/tflm/framework.py +81 -0
- mlonmcu/flow/tvm/__init__.py +23 -0
- mlonmcu/flow/tvm/backend/__init__.py +26 -0
- mlonmcu/flow/tvm/backend/backend.py +282 -0
- mlonmcu/flow/tvm/backend/model_info.py +307 -0
- mlonmcu/flow/tvm/backend/python_utils.py +36 -0
- mlonmcu/flow/tvm/backend/tuner.py +41 -0
- mlonmcu/flow/tvm/backend/tvmaot.py +162 -0
- mlonmcu/flow/tvm/backend/tvmaotplus.py +51 -0
- mlonmcu/flow/tvm/backend/tvmc_utils.py +172 -0
- mlonmcu/flow/tvm/backend/tvmcg.py +102 -0
- mlonmcu/flow/tvm/backend/tvmllvm.py +106 -0
- mlonmcu/flow/tvm/backend/tvmrt.py +151 -0
- mlonmcu/flow/tvm/backend/wrapper.py +645 -0
- mlonmcu/flow/tvm/framework.py +96 -0
- mlonmcu/logging.py +79 -0
- mlonmcu/mlonmcu.py +19 -0
- mlonmcu/models/__init__.py +31 -0
- mlonmcu/models/convert_data.py +107 -0
- mlonmcu/models/frontend.py +571 -0
- mlonmcu/models/group.py +29 -0
- mlonmcu/models/lookup.py +345 -0
- mlonmcu/models/metadata.py +133 -0
- mlonmcu/models/model.py +104 -0
- mlonmcu/models/options.py +64 -0
- mlonmcu/models/utils.py +136 -0
- mlonmcu/platform/__init__.py +27 -0
- mlonmcu/platform/_platform.py +46 -0
- mlonmcu/platform/espidf/__init__.py +25 -0
- mlonmcu/platform/espidf/espidf.py +489 -0
- mlonmcu/platform/espidf/espidf_target.py +257 -0
- mlonmcu/platform/lookup.py +126 -0
- mlonmcu/platform/microtvm/__init__.py +25 -0
- mlonmcu/platform/microtvm/microtvm.py +580 -0
- mlonmcu/platform/microtvm/microtvm_arduino_target.py +68 -0
- mlonmcu/platform/microtvm/microtvm_backend.py +64 -0
- mlonmcu/platform/microtvm/microtvm_espidf_target.py +94 -0
- mlonmcu/platform/microtvm/microtvm_etissvp_target.py +98 -0
- mlonmcu/platform/microtvm/microtvm_host_target.py +46 -0
- mlonmcu/platform/microtvm/microtvm_spike_target.py +230 -0
- mlonmcu/platform/microtvm/microtvm_target.py +189 -0
- mlonmcu/platform/microtvm/microtvm_template_target.py +55 -0
- mlonmcu/platform/microtvm/microtvm_zephyr_target.py +91 -0
- mlonmcu/platform/mlif/__init__.py +25 -0
- mlonmcu/platform/mlif/mlif.py +300 -0
- mlonmcu/platform/mlif/mlif_target.py +86 -0
- mlonmcu/platform/platform.py +244 -0
- mlonmcu/platform/tvm/__init__.py +25 -0
- mlonmcu/platform/tvm/tvm.py +429 -0
- mlonmcu/platform/tvm/tvm_backend.py +57 -0
- mlonmcu/platform/tvm/tvm_target.py +165 -0
- mlonmcu/platform/zephyr/__init__.py +25 -0
- mlonmcu/platform/zephyr/zephyr.py +450 -0
- mlonmcu/platform/zephyr/zephyr_target.py +110 -0
- mlonmcu/plugins.py +26 -0
- mlonmcu/report.py +99 -0
- mlonmcu/session/__init__.py +18 -0
- mlonmcu/session/postprocess/__init__.py +43 -0
- mlonmcu/session/postprocess/postprocess.py +62 -0
- mlonmcu/session/postprocess/postprocesses.py +487 -0
- mlonmcu/session/run.py +1008 -0
- mlonmcu/session/session.py +373 -0
- mlonmcu/setup/__init__.py +18 -0
- mlonmcu/setup/cache.py +147 -0
- mlonmcu/setup/gen_requirements.py +619 -0
- mlonmcu/setup/setup.py +285 -0
- mlonmcu/setup/task.py +380 -0
- mlonmcu/setup/tasks/__init__.py +40 -0
- mlonmcu/setup/tasks/arm_gcc.py +58 -0
- mlonmcu/setup/tasks/cmsisnn.py +151 -0
- mlonmcu/setup/tasks/common.py +36 -0
- mlonmcu/setup/tasks/corstone300.py +64 -0
- mlonmcu/setup/tasks/espidf.py +87 -0
- mlonmcu/setup/tasks/etiss.py +147 -0
- mlonmcu/setup/tasks/llvm.py +67 -0
- mlonmcu/setup/tasks/mlif.py +49 -0
- mlonmcu/setup/tasks/muriscvnn.py +166 -0
- mlonmcu/setup/tasks/pulp.py +192 -0
- mlonmcu/setup/tasks/riscv_gcc.py +146 -0
- mlonmcu/setup/tasks/spike.py +190 -0
- mlonmcu/setup/tasks/tf.py +92 -0
- mlonmcu/setup/tasks/tflite.py +59 -0
- mlonmcu/setup/tasks/tflmc.py +141 -0
- mlonmcu/setup/tasks/tvm.py +172 -0
- mlonmcu/setup/tasks/utvmcg.py +96 -0
- mlonmcu/setup/tasks/zephyr.py +119 -0
- mlonmcu/setup/utils.py +374 -0
- mlonmcu/target/__init__.py +37 -0
- mlonmcu/target/_target.py +41 -0
- mlonmcu/target/arm/__init__.py +3 -0
- mlonmcu/target/arm/corstone300.py +235 -0
- mlonmcu/target/arm/util.py +109 -0
- mlonmcu/target/common.py +194 -0
- mlonmcu/target/elf.py +256 -0
- mlonmcu/target/host_x86.py +84 -0
- mlonmcu/target/metrics.py +75 -0
- mlonmcu/target/riscv/__init__.py +7 -0
- mlonmcu/target/riscv/etiss_pulpino.py +462 -0
- mlonmcu/target/riscv/gvsoc_pulp.py +215 -0
- mlonmcu/target/riscv/ovpsim.py +301 -0
- mlonmcu/target/riscv/riscv.py +185 -0
- mlonmcu/target/riscv/riscv_qemu.py +166 -0
- mlonmcu/target/riscv/spike.py +243 -0
- mlonmcu/target/riscv/util.py +134 -0
- mlonmcu/target/target.py +200 -0
- mlonmcu/utils.py +49 -0
- mlonmcu/version.py +21 -0
- mlonmcu-0.3.0.dev0.dist-info/LICENSE +202 -0
- mlonmcu-0.3.0.dev0.dist-info/METADATA +343 -0
- mlonmcu-0.3.0.dev0.dist-info/NOTICE +8 -0
- mlonmcu-0.3.0.dev0.dist-info/RECORD +376 -0
- mlonmcu-0.3.0.dev0.dist-info/WHEEL +5 -0
- mlonmcu-0.3.0.dev0.dist-info/entry_points.txt +3 -0
- mlonmcu-0.3.0.dev0.dist-info/top_level.txt +1 -0
- resources/frameworks/tvm/crt_config/README.md +7 -0
- resources/frameworks/tvm/crt_config/crt_config.h +53 -0
- resources/frameworks/tvm/tuning_records/riscv_cpu_v0.01.log.best +46 -0
- resources/patches/fix_esp32c3_march.patch +20 -0
- resources/patches/pulp_freertos_support.patch +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/CMakeLists.txt +29 -0
- resources/platforms/espidf/micro_speech_esp32devboard/README.md +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/CMakeLists.txt +78 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/Kconfig +76 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_data.c +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/exit.h +26 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/ml_interface.h +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/printing.h +31 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface.c +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tflm.cc +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tvm.c +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/CMakeLists.txt +140 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/micro_speech_esp32devboard/example_test.py +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/info.txt +9 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/CMakeLists.txt +58 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.cc +193 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.cc +53 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.h +35 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc +132 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc.orig +145 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.h +55 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/COPYING +11 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/_kiss_fft_guts.h +168 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.c +408 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.h +124 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.c +159 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main.cc +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.cc +204 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.h +37 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.cc +121 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.h +38 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.cc +23 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.h +43 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/bits.h +102 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.cc +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.cc +69 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.c +134 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.h +63 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.c +220 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.c +72 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.h +64 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.c +85 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.h +52 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_common.h +48 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.cc +8 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.h +34 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.c +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.h +40 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.c +83 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.h +39 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.c +27 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c +51 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h +46 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h +50 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c +56 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h +47 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.c +92 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.h +57 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.c +70 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.h +49 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.c +73 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.h +45 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.c +14 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/pins.h +30 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.cc +150 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.h +173 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.c +333 -0
- resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.h +74 -0
- resources/platforms/espidf/micro_speech_esp32devboard/sdkconfig.defaults +36 -0
- resources/platforms/espidf/project/CMakeLists.txt +29 -0
- resources/platforms/espidf/project/README.md +70 -0
- resources/platforms/espidf/project/components/mlif/CMakeLists.txt +77 -0
- resources/platforms/espidf/project/components/mlif/Kconfig +76 -0
- resources/platforms/espidf/project/components/mlif/default_data.c +26 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_input.c +35 -0
- resources/platforms/espidf/project/components/mlif/default_model_support/process_output.c +45 -0
- resources/platforms/espidf/project/components/mlif/include/exit.h +26 -0
- resources/platforms/espidf/project/components/mlif/include/ml_interface.h +60 -0
- resources/platforms/espidf/project/components/mlif/include/printing.h +31 -0
- resources/platforms/espidf/project/components/mlif/ml_interface.c +54 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tflm.cc +40 -0
- resources/platforms/espidf/project/components/mlif/ml_interface_tvm.c +40 -0
- resources/platforms/espidf/project/components/tflite-lib/CMakeLists.txt +142 -0
- resources/platforms/espidf/project/components/tflite-lib/Kconfig +8 -0
- resources/platforms/espidf/project/components/tvm-lib/CMakeLists.txt +66 -0
- resources/platforms/espidf/project/components/tvm-lib/Kconfig +7 -0
- resources/platforms/espidf/project/example_test.py +38 -0
- resources/platforms/espidf/project/main/CMakeLists.txt +25 -0
- resources/platforms/espidf/project/main/main.c +57 -0
- resources/platforms/espidf/project/sdkconfig.defaults +26 -0
- resources/platforms/zephyr/project/CMakeLists.txt +22 -0
- resources/platforms/zephyr/project/Kconfig +101 -0
- resources/platforms/zephyr/project/README.rst +33 -0
- resources/platforms/zephyr/project/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/CMakeLists.txt +31 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_data.c +8 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.c +36 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface.h +47 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project/prj.conf +11 -0
- resources/platforms/zephyr/project/sample.yaml +19 -0
- resources/platforms/zephyr/project/src/main.c +71 -0
- resources/platforms/zephyr/project2/CMakeLists.txt +72 -0
- resources/platforms/zephyr/project2/Kconfig +101 -0
- resources/platforms/zephyr/project2/README.rst +33 -0
- resources/platforms/zephyr/project2/cmake/AddAllSubdirs.cmake +21 -0
- resources/platforms/zephyr/project2/cmake/ChooseTarget.cmake +22 -0
- resources/platforms/zephyr/project2/cmake/LinkTFLite.cmake +223 -0
- resources/platforms/zephyr/project2/cmake/LinkTVM.cmake +68 -0
- resources/platforms/zephyr/project2/cmake/LookupClang.cmake +41 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmc.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tflmi.cmake +5 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaot.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmaotplus.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmcg.cmake +10 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmllvm.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/backends/tvmrt.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/extras.cmake +9 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_gcc.cmake +65 -0
- resources/platforms/zephyr/project2/cmake/features/auto_vectorize_llvm.cmake +20 -0
- resources/platforms/zephyr/project2/cmake/features/cmsisnn.cmake +86 -0
- resources/platforms/zephyr/project2/cmake/features/muriscvnn.cmake +87 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tflm_mlif.cmake +8 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm.cmake +1 -0
- resources/platforms/zephyr/project2/cmake/frameworks/tvm_mlif.cmake +37 -0
- resources/platforms/zephyr/project2/default_data.c +8 -0
- resources/platforms/zephyr/project2/default_model_support/CMakeLists.txt +3 -0
- resources/platforms/zephyr/project2/default_model_support/process_input.c +17 -0
- resources/platforms/zephyr/project2/default_model_support/process_output.c +27 -0
- resources/platforms/zephyr/project2/lib/CMakeLists.txt +13 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.c +10 -0
- resources/platforms/zephyr/project2/lib/drivers/fake_input.h +8 -0
- resources/platforms/zephyr/project2/lib/support/CMakeLists.txt +2 -0
- resources/platforms/zephyr/project2/lib/support/dummy.c +0 -0
- resources/platforms/zephyr/project2/lib/support/exit.h +8 -0
- resources/platforms/zephyr/project2/lib/support/printing.h +11 -0
- resources/platforms/zephyr/project2/lib/support/quantize.h +23 -0
- resources/platforms/zephyr/project2/lib/targets/corstone300.c +62 -0
- resources/platforms/zephyr/project2/lib/targets/default.c +2 -0
- resources/platforms/zephyr/project2/lib/targets/etiss_pulpino.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/generic_riscv.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/riscv_qemu.c +112 -0
- resources/platforms/zephyr/project2/lib/targets/target.h +2 -0
- resources/platforms/zephyr/project2/ml_interface.c +36 -0
- resources/platforms/zephyr/project2/ml_interface.h +47 -0
- resources/platforms/zephyr/project2/ml_interface_tflm.cc +22 -0
- resources/platforms/zephyr/project2/ml_interface_tvm.c +22 -0
- resources/platforms/zephyr/project2/prj.conf +13 -0
- resources/platforms/zephyr/project2/sample.yaml +19 -0
- resources/platforms/zephyr/project2/settings.json +6 -0
- resources/platforms/zephyr/project2/src/main.c +35 -0
- resources/pycharm/.run/README.md +73 -0
- resources/pycharm/.run/step1_ init env.run.xml +24 -0
- resources/pycharm/.run/step2_ setup.run.xml +25 -0
- resources/pycharm/.run/step3_ run resnet on pulpxpulpissimo.run.xml +25 -0
- resources/templates/default.yml.j2 +258 -0
- resources/templates/dev.yml.j2 +212 -0
- resources/templates/minimal.yml.j2 +234 -0
- resources/templates/phi.yml.j2 +282 -0
- resources/templates/pulp.yml.j2 +267 -0
- resources/templates/research.yml.j2 +237 -0
- resources/templates/tumeda.yml.j2 +239 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of MLonMCU.
|
|
5
|
+
* See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
#include "ml_interface.h"
|
|
20
|
+
|
|
21
|
+
#include "model.cc.h"
|
|
22
|
+
|
|
23
|
+
// TODO: inline
|
|
24
|
+
// TODO: ideally we would just use #define aliases for those functions however tflm uses c++ linkage...
|
|
25
|
+
// #define mlif_input_ptr model_input_ptr
|
|
26
|
+
// #define mlif_input_size model_input_size
|
|
27
|
+
// #define mlif_inputs model_inputs
|
|
28
|
+
// #define mlif_invoke model_invoke
|
|
29
|
+
// #define mlif_output_ptr model_output_ptr
|
|
30
|
+
// #define mlif_output_size model_output_size
|
|
31
|
+
// #define mlif_outputs model_outputs
|
|
32
|
+
|
|
33
|
+
void mlif_init() {
|
|
34
|
+
model_init();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
void *mlif_input_ptr(int index) {
|
|
38
|
+
return model_input_ptr(index);
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
size_t mlif_input_size(int index) {
|
|
43
|
+
return model_input_size(index);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
size_t mlif_inputs() {
|
|
47
|
+
return model_inputs();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void mlif_invoke() {
|
|
51
|
+
model_invoke();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
void *mlif_output_ptr(int index) {
|
|
55
|
+
return model_output_ptr(index);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
size_t mlif_output_size(int index) {
|
|
59
|
+
return model_output_size(index);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
size_t mlif_outputs() {
|
|
63
|
+
return model_outputs();
|
|
64
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
*
|
|
4
|
+
* This file is part of MLonMCU.
|
|
5
|
+
* See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
*
|
|
7
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
* you may not use this file except in compliance with the License.
|
|
9
|
+
* You may obtain a copy of the License at
|
|
10
|
+
*
|
|
11
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
*
|
|
13
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
* See the License for the specific language governing permissions and
|
|
17
|
+
* limitations under the License.
|
|
18
|
+
*/
|
|
19
|
+
#include "ml_interface.h"
|
|
20
|
+
#include "tvm_wrapper.h"
|
|
21
|
+
|
|
22
|
+
void mlif_init() {
|
|
23
|
+
TVMWrap_Init();
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
void *mlif_input_ptr(int index) {
|
|
27
|
+
return TVMWrap_GetInputPtr(index);
|
|
28
|
+
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
size_t mlif_input_size(int index) {
|
|
32
|
+
return TVMWrap_GetInputSize(index);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
size_t mlif_inputs() {
|
|
36
|
+
return TVMWrap_GetNumInputs();
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void mlif_invoke() {
|
|
40
|
+
TVMWrap_Run();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
void *mlif_output_ptr(int index) {
|
|
44
|
+
return TVMWrap_GetOutputPtr(index);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
size_t mlif_output_size(int index) {
|
|
48
|
+
return TVMWrap_GetOutputSize(index);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
size_t mlif_outputs() {
|
|
52
|
+
return TVMWrap_GetNumOutputs();
|
|
53
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
#[[
|
|
2
|
+
Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
|
|
4
|
+
This file is part of MLonMCU.
|
|
5
|
+
See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
]]
|
|
19
|
+
cmake_minimum_required(VERSION 3.5)
|
|
20
|
+
|
|
21
|
+
# set(TF_SRC "${CONFIG_TF_DIR}" CACHE PATH "Tensorflow (Lite Micro) Source Directory")
|
|
22
|
+
set(TF_SRC "${CONFIG_TF_DIR}")
|
|
23
|
+
|
|
24
|
+
IF (NOT ${TF_SRC} STREQUAL "")
|
|
25
|
+
|
|
26
|
+
set(TFL_SRC "${TF_SRC}/tensorflow/lite/")
|
|
27
|
+
set(TFLM_SRC "${TFL_SRC}/micro")
|
|
28
|
+
set(TFLD_SRC "${TFLM_SRC}/tools/make/downloads")
|
|
29
|
+
|
|
30
|
+
set(srcs_micro
|
|
31
|
+
${TFLM_SRC}/micro_error_reporter.cc
|
|
32
|
+
${TFLM_SRC}/debug_log.cc
|
|
33
|
+
${TFLM_SRC}/micro_string.cc
|
|
34
|
+
${TF_SRC}/tensorflow/lite/core/api/error_reporter.cc
|
|
35
|
+
${TFLM_SRC}/kernels/kernel_util.cc
|
|
36
|
+
${TFLM_SRC}/all_ops_resolver.cc
|
|
37
|
+
${TFLM_SRC}/micro_utils.cc
|
|
38
|
+
${TFL_SRC}/kernels/internal/quantization_util.cc
|
|
39
|
+
${TFL_SRC}/kernels/kernel_util.cc
|
|
40
|
+
${TFL_SRC}/c/common.c
|
|
41
|
+
${TFLM_SRC}/micro_interpreter.cc
|
|
42
|
+
${TFLM_SRC}/micro_allocator.cc
|
|
43
|
+
${TFLM_SRC}/simple_memory_allocator.cc
|
|
44
|
+
${TFLM_SRC}/memory_helpers.cc
|
|
45
|
+
${TFLM_SRC}/memory_planner/greedy_memory_planner.cc
|
|
46
|
+
${TFL_SRC}/core/api/tensor_utils.cc
|
|
47
|
+
${TFL_SRC}/core/api/flatbuffer_conversions.cc
|
|
48
|
+
${TFL_SRC}/core/api/op_resolver.cc
|
|
49
|
+
${TFL_SRC}/schema/schema_utils.cc
|
|
50
|
+
${TFLM_SRC}/micro_context.cc
|
|
51
|
+
${TFLM_SRC}/micro_graph.cc
|
|
52
|
+
${TFLM_SRC}//flatbuffer_utils.cc
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
set(srcs_kernels
|
|
56
|
+
${TFLM_SRC}/kernels/softmax.cc
|
|
57
|
+
${TFLM_SRC}/kernels/fully_connected.cc
|
|
58
|
+
${TFLM_SRC}/kernels/pooling.cc
|
|
59
|
+
${TFLM_SRC}/kernels/add.cc
|
|
60
|
+
${TFLM_SRC}/kernels/mul.cc
|
|
61
|
+
${TFLM_SRC}/kernels/conv.cc
|
|
62
|
+
${TFLM_SRC}/kernels/depthwise_conv.cc
|
|
63
|
+
${TFLM_SRC}/kernels/softmax.cc
|
|
64
|
+
${TFLM_SRC}/kernels/fully_connected.cc
|
|
65
|
+
${TFLM_SRC}/kernels/pooling.cc
|
|
66
|
+
${TFLM_SRC}/kernels/add.cc
|
|
67
|
+
${TFLM_SRC}/kernels/mul.cc
|
|
68
|
+
${TFLM_SRC}/kernels/conv.cc
|
|
69
|
+
${TFLM_SRC}/kernels/depthwise_conv.cc
|
|
70
|
+
${TFLM_SRC}/kernels/logical.cc
|
|
71
|
+
${TFLM_SRC}/kernels/logistic.cc
|
|
72
|
+
${TFLM_SRC}/kernels/svdf.cc
|
|
73
|
+
${TFLM_SRC}/kernels/concatenation.cc
|
|
74
|
+
${TFLM_SRC}/kernels/ceil.cc
|
|
75
|
+
${TFLM_SRC}/kernels/floor.cc
|
|
76
|
+
${TFLM_SRC}/kernels/prelu.cc
|
|
77
|
+
${TFLM_SRC}/kernels/neg.cc
|
|
78
|
+
${TFLM_SRC}/kernels/elementwise.cc
|
|
79
|
+
${TFLM_SRC}/kernels/maximum_minimum.cc
|
|
80
|
+
${TFLM_SRC}/kernels/arg_min_max.cc
|
|
81
|
+
${TFLM_SRC}/kernels/reshape.cc
|
|
82
|
+
${TFLM_SRC}/kernels/comparisons.cc
|
|
83
|
+
${TFLM_SRC}/kernels/round.cc
|
|
84
|
+
${TFLM_SRC}/kernels/strided_slice.cc
|
|
85
|
+
${TFLM_SRC}/kernels/pack.cc
|
|
86
|
+
${TFLM_SRC}/kernels/pad.cc
|
|
87
|
+
${TFLM_SRC}/kernels/split.cc
|
|
88
|
+
${TFLM_SRC}/kernels/unpack.cc
|
|
89
|
+
${TFLM_SRC}/kernels/quantize.cc
|
|
90
|
+
${TFLM_SRC}/kernels/activations.cc
|
|
91
|
+
${TFLM_SRC}/kernels/dequantize.cc
|
|
92
|
+
${TFLM_SRC}/kernels/reduce.cc
|
|
93
|
+
${TFLM_SRC}/kernels/sub.cc
|
|
94
|
+
${TFLM_SRC}/kernels/resize_nearest_neighbor.cc
|
|
95
|
+
${TFLM_SRC}/kernels/l2norm.cc
|
|
96
|
+
${TFLM_SRC}/kernels/circular_buffer.cc
|
|
97
|
+
${TFLM_SRC}/kernels/ethosu.cc
|
|
98
|
+
${TFLM_SRC}/kernels/tanh.cc
|
|
99
|
+
${TFLM_SRC}/kernels/conv_common.cc
|
|
100
|
+
${TFLM_SRC}/kernels/depthwise_conv_common.cc
|
|
101
|
+
${TFLM_SRC}/kernels/fully_connected_common.cc
|
|
102
|
+
${TFLM_SRC}/kernels/quantize_common.cc
|
|
103
|
+
${TFLM_SRC}/kernels/dequantize_common.cc
|
|
104
|
+
${TFLM_SRC}/kernels/softmax_common.cc
|
|
105
|
+
${TFLM_SRC}/kernels/svdf_common.cc
|
|
106
|
+
${TFLM_SRC}/kernels/pooling_common.cc
|
|
107
|
+
${TFLM_SRC}/kernels/add_common.cc
|
|
108
|
+
${TFLM_SRC}/kernels/detection_postprocess.cc
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
set(LIB_SRCS
|
|
112
|
+
"${srcs_micro}"
|
|
113
|
+
"${srcs_kernels}"
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
idf_component_register(
|
|
118
|
+
SRCS "${LIB_SRCS}"
|
|
119
|
+
INCLUDE_DIRS "." "${TF_SRC}" "${TFLD_SRC}/gemmlowp"
|
|
120
|
+
"${TFLD_SRC}/flatbuffers/include"
|
|
121
|
+
"${TFLD_SRC}/ruy"
|
|
122
|
+
"${TFLD_SRC}/kissfft"
|
|
123
|
+
)
|
|
124
|
+
# REQUIRES "esp-nn")
|
|
125
|
+
|
|
126
|
+
# Reduce the level of paranoia to be able to compile TF sources
|
|
127
|
+
target_compile_options(${COMPONENT_LIB} PRIVATE
|
|
128
|
+
-Wno-maybe-uninitialized
|
|
129
|
+
-Wno-missing-field-initializers
|
|
130
|
+
-DESP_NN # enables ESP-NN optimizations by Espressif
|
|
131
|
+
-Wno-type-limits)
|
|
132
|
+
|
|
133
|
+
target_compile_options(${COMPONENT_LIB} PRIVATE -fno-unwind-tables -ffunction-sections -fdata-sections -fmessage-length=0 -DTF_LITE_STATIC_MEMORY -DTF_LITE_DISABLE_X86_NEON -O3 -Wsign-compare -Wdouble-promotion -Wshadow -Wunused-variable -Wmissing-field-initializers -Wunused-function -Wswitch -Wvla -Wall -Wextra -Wstrict-aliasing -Wno-unused-parameter -Wno-nonnull)
|
|
134
|
+
target_compile_options(${COMPONENT_LIB} PRIVATE $<$<COMPILE_LANGUAGE:CXX>: -std=c++11 -fno-rtti -fno-exceptions -fno-threadsafe-statics -fno-unwind-tables -ffunction-sections -fdata-sections -fmessage-length=0 -DTF_LITE_STATIC_MEMORY -DTF_LITE_DISABLE_X86_NEON -O3 -Werror -Wsign-compare -Wdouble-promotion -Wshadow -Wunused-variable -Wmissing-field-initializers -Wunused-function -Wswitch -Wvla -Wall -Wextra -Wstrict-aliasing -Wno-unused-parameter -Wno-return-type -Wno-strict-aliasing -std=gnu++14 >)
|
|
135
|
+
target_compile_options(${COMPONENT_LIB} INTERFACE $<$<IN_LIST:-DTF_LITE_STATIC_MEMORY,$<TARGET_PROPERTY:${COMPONENT_LIB},COMPILE_OPTIONS>>:-DTF_LITE_STATIC_MEMORY>)
|
|
136
|
+
target_link_libraries(${COMPONENT_LIB} PRIVATE -lm)
|
|
137
|
+
|
|
138
|
+
ELSE()
|
|
139
|
+
idf_component_register()
|
|
140
|
+
ENDIF()
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#[[
|
|
2
|
+
Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
|
|
4
|
+
This file is part of MLonMCU.
|
|
5
|
+
See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
]]
|
|
19
|
+
cmake_minimum_required(VERSION 3.5)
|
|
20
|
+
|
|
21
|
+
SET(TVM_SRC ${CONFIG_TVM_DIR})
|
|
22
|
+
|
|
23
|
+
IF (NOT ${TVM_SRC} STREQUAL "")
|
|
24
|
+
|
|
25
|
+
SET(TVM_ALIGNMENT_BYTES 4)
|
|
26
|
+
|
|
27
|
+
# cmake-format: off
|
|
28
|
+
SET(TVM_HEADERS
|
|
29
|
+
${TVM_SRC}/include
|
|
30
|
+
${TVM_SRC}/3rdparty/dlpack/include
|
|
31
|
+
${TVM_SRC}/apps/bundle_deploy
|
|
32
|
+
${TVM_SRC}/src/runtime/crt/include
|
|
33
|
+
)
|
|
34
|
+
# cmake-format: on
|
|
35
|
+
|
|
36
|
+
IF(TVM_CRT_CONFIG_DIR)
|
|
37
|
+
LIST(APPEND TVM_HEADERS ${TVM_CRT_CONFIG_DIR})
|
|
38
|
+
ELSE()
|
|
39
|
+
LIST(APPEND TVM_HEADERS ${TVM_SRC}/apps/bundle_deploy/crt_config)
|
|
40
|
+
ENDIF()
|
|
41
|
+
|
|
42
|
+
idf_component_register(
|
|
43
|
+
SRCS
|
|
44
|
+
${TVM_SRC}/src/runtime/crt/common/crt_backend_api.c
|
|
45
|
+
${TVM_SRC}/src/runtime/crt/memory/stack_allocator.c
|
|
46
|
+
${TVM_SRC}/src/runtime/crt/common/crt_runtime_api.c
|
|
47
|
+
${TVM_SRC}/src/runtime/crt/common/func_registry.c
|
|
48
|
+
${TVM_SRC}/src/runtime/crt/memory/page_allocator.c
|
|
49
|
+
${TVM_SRC}/src/runtime/crt/common/ndarray.c
|
|
50
|
+
${TVM_SRC}/src/runtime/crt/common/packed_func.c
|
|
51
|
+
${TVM_SRC}/src/runtime/crt/graph_executor/graph_executor.c
|
|
52
|
+
${TVM_SRC}/src/runtime/crt/graph_executor/load_json.c
|
|
53
|
+
INCLUDE_DIRS
|
|
54
|
+
${TVM_HEADERS}
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
component_compile_options(-Wno-error=unused-but-set-parameter)
|
|
59
|
+
|
|
60
|
+
TARGET_INCLUDE_DIRECTORIES(${COMPONENT_LIB} PUBLIC
|
|
61
|
+
-DTVM_RUNTIME_ALLOC_ALIGNMENT_BYTES=${TVM_ALIGNMENT_BYTES}
|
|
62
|
+
)
|
|
63
|
+
ELSE()
|
|
64
|
+
idf_component_register()
|
|
65
|
+
ENDIF()
|
|
66
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
4
|
+
#
|
|
5
|
+
# This file is part of MLonMCU.
|
|
6
|
+
# See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
7
|
+
#
|
|
8
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
17
|
+
# See the License for the specific language governing permissions and
|
|
18
|
+
# limitations under the License.
|
|
19
|
+
#
|
|
20
|
+
|
|
21
|
+
from __future__ import division, print_function, unicode_literals
|
|
22
|
+
|
|
23
|
+
import ttfw_idf
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
@ttfw_idf.idf_example_test(env_tag="Example_GENERIC", target=["esp32", "esp32s2", "esp32c3"], ci_target=["esp32"])
|
|
27
|
+
def test_examples_hello_world(env, extra_data):
|
|
28
|
+
app_name = "hello_world"
|
|
29
|
+
dut = env.get_dut(app_name, "examples/get-started/hello_world")
|
|
30
|
+
dut.start_app()
|
|
31
|
+
res = dut.expect(ttfw_idf.MINIMUM_FREE_HEAP_SIZE_RE)
|
|
32
|
+
if not res:
|
|
33
|
+
raise ValueError("Maximum heap size info not found")
|
|
34
|
+
ttfw_idf.print_heap_size(app_name, dut.app.config_name, dut.TARGET, res[0])
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
test_examples_hello_world()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
I have used this demo with the following command:
|
|
2
|
+
|
|
3
|
+
python -m mlonmcu.cli.main flow run micro_speech_custom_ud --backend tvmaot --target esp32c3 -c espidf.project_template=micro_speech_esp32devboard -c espidf.use_idf_monitor=0 -c esp32c3.port=/dev/ttyUSB0 -c espidf.print_outputs=1 -c esp32c3.print_outputs=1
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
ESP-IDF logging is optional
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
TODO: show results on leds, demo feature, print stats
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#[[
|
|
2
|
+
Copyright (c) 2022 TUM Department of Electrical and Computer Engineering.
|
|
3
|
+
|
|
4
|
+
This file is part of MLonMCU.
|
|
5
|
+
See https://github.com/tum-ei-eda/mlonmcu.git for further info.
|
|
6
|
+
|
|
7
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
8
|
+
you may not use this file except in compliance with the License.
|
|
9
|
+
You may obtain a copy of the License at
|
|
10
|
+
|
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
|
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
16
|
+
See the License for the specific language governing permissions and
|
|
17
|
+
limitations under the License.
|
|
18
|
+
]]
|
|
19
|
+
|
|
20
|
+
# SET(COMPONENTS TODO)
|
|
21
|
+
|
|
22
|
+
# TODO: make chip/pins variable
|
|
23
|
+
|
|
24
|
+
idf_component_register(
|
|
25
|
+
SRCS
|
|
26
|
+
main.cc
|
|
27
|
+
main_functions.cc
|
|
28
|
+
audio_provider.cc
|
|
29
|
+
feature_provider.cc
|
|
30
|
+
recognize_commands.cc
|
|
31
|
+
command_responder.cc
|
|
32
|
+
micro_features_generator.cc
|
|
33
|
+
micro_model_settings.cc
|
|
34
|
+
ringbuf.c
|
|
35
|
+
pins.c
|
|
36
|
+
# TODO: use components?
|
|
37
|
+
microfrontend/lib/fft.cc
|
|
38
|
+
microfrontend/lib/fft_util.cc
|
|
39
|
+
microfrontend/lib/filterbank.c
|
|
40
|
+
microfrontend/lib/filterbank_util.c
|
|
41
|
+
microfrontend/lib/frontend.c
|
|
42
|
+
microfrontend/lib/frontend_util.c
|
|
43
|
+
microfrontend/lib/kiss_fft_int16.cc
|
|
44
|
+
microfrontend/lib/log_lut.c
|
|
45
|
+
microfrontend/lib/log_scale.c
|
|
46
|
+
microfrontend/lib/log_scale_util.c
|
|
47
|
+
microfrontend/lib/noise_reduction.c
|
|
48
|
+
microfrontend/lib/noise_reduction_util.c
|
|
49
|
+
microfrontend/lib/pcan_gain_control_util.c
|
|
50
|
+
microfrontend/lib/pcan_gain_control.c
|
|
51
|
+
microfrontend/lib/window.c
|
|
52
|
+
microfrontend/lib/window_util.c
|
|
53
|
+
INCLUDE_DIRS
|
|
54
|
+
.
|
|
55
|
+
kissfft/
|
|
56
|
+
REQUIRES
|
|
57
|
+
mlif2
|
|
58
|
+
spi_flash)
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/* Copyright 2019 The TensorFlow Authors. All Rights Reserved.
|
|
2
|
+
|
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
you may not use this file except in compliance with the License.
|
|
5
|
+
You may obtain a copy of the License at
|
|
6
|
+
|
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
|
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
See the License for the specific language governing permissions and
|
|
13
|
+
limitations under the License.
|
|
14
|
+
==============================================================================*/
|
|
15
|
+
|
|
16
|
+
#include "audio_provider.h"
|
|
17
|
+
|
|
18
|
+
#include <cstdlib>
|
|
19
|
+
#include <cstring>
|
|
20
|
+
|
|
21
|
+
// FreeRTOS.h must be included before some of the following dependencies.
|
|
22
|
+
// Solves b/150260343.
|
|
23
|
+
// clang-format off
|
|
24
|
+
#include "freertos/FreeRTOS.h"
|
|
25
|
+
// clang-format on
|
|
26
|
+
|
|
27
|
+
#include "driver/i2s.h"
|
|
28
|
+
#include "esp_log.h"
|
|
29
|
+
#include "esp_spi_flash.h"
|
|
30
|
+
#include "esp_system.h"
|
|
31
|
+
#include "esp_timer.h"
|
|
32
|
+
#include "freertos/task.h"
|
|
33
|
+
#include "ringbuf.h"
|
|
34
|
+
#include "micro_model_settings.h"
|
|
35
|
+
|
|
36
|
+
using namespace std;
|
|
37
|
+
|
|
38
|
+
static const char* TAG = "TF_LITE_AUDIO_PROVIDER";
|
|
39
|
+
/* ringbuffer to hold the incoming audio data */
|
|
40
|
+
ringbuf_t* g_audio_capture_buffer;
|
|
41
|
+
volatile int32_t g_latest_audio_timestamp = 0;
|
|
42
|
+
/* model requires 20ms new data from g_audio_capture_buffer and 10ms old data
|
|
43
|
+
* each time , storing old data in the histrory buffer , {
|
|
44
|
+
* history_samples_to_keep = 10 * 16 } */
|
|
45
|
+
constexpr int32_t history_samples_to_keep =
|
|
46
|
+
((kFeatureSliceDurationMs - kFeatureSliceStrideMs) *
|
|
47
|
+
(kAudioSampleFrequency / 1000));
|
|
48
|
+
/* new samples to get each time from ringbuffer, { new_samples_to_get = 20 * 16
|
|
49
|
+
* } */
|
|
50
|
+
constexpr int32_t new_samples_to_get =
|
|
51
|
+
(kFeatureSliceStrideMs * (kAudioSampleFrequency / 1000));
|
|
52
|
+
|
|
53
|
+
namespace {
|
|
54
|
+
int16_t g_audio_output_buffer[kMaxAudioSampleSize];
|
|
55
|
+
bool g_is_audio_initialized = false;
|
|
56
|
+
int16_t g_history_buffer[history_samples_to_keep];
|
|
57
|
+
} // namespace
|
|
58
|
+
|
|
59
|
+
const int32_t kAudioCaptureBufferSize = 80000;
|
|
60
|
+
const int32_t i2s_bytes_to_read = 3200;
|
|
61
|
+
|
|
62
|
+
static void i2s_init(void) {
|
|
63
|
+
// Start listening for audio: MONO @ 16KHz
|
|
64
|
+
i2s_config_t i2s_config = {
|
|
65
|
+
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_TX),
|
|
66
|
+
.sample_rate = 16000,
|
|
67
|
+
.bits_per_sample = (i2s_bits_per_sample_t)16,
|
|
68
|
+
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
|
|
69
|
+
.communication_format = I2S_COMM_FORMAT_I2S,
|
|
70
|
+
.intr_alloc_flags = 0,
|
|
71
|
+
.dma_buf_count = 3,
|
|
72
|
+
.dma_buf_len = 300,
|
|
73
|
+
.use_apll = false,
|
|
74
|
+
.tx_desc_auto_clear = false,
|
|
75
|
+
.fixed_mclk = -1,
|
|
76
|
+
};
|
|
77
|
+
i2s_pin_config_t pin_config = {
|
|
78
|
+
// .bck_io_num = 32, // IIS_SCLK
|
|
79
|
+
// .ws_io_num = 25, // IIS_LCLK
|
|
80
|
+
// .data_out_num = -1, // IIS_DSIN
|
|
81
|
+
// .data_in_num = 33, // IIS_DOUT
|
|
82
|
+
.bck_io_num = 8,
|
|
83
|
+
.ws_io_num = 9,
|
|
84
|
+
.data_out_num = -1,
|
|
85
|
+
.data_in_num = 10
|
|
86
|
+
};
|
|
87
|
+
esp_err_t ret = 0;
|
|
88
|
+
ret = i2s_driver_install((i2s_port_t)0, &i2s_config, 0, NULL);
|
|
89
|
+
if (ret != ESP_OK) {
|
|
90
|
+
ESP_LOGE(TAG, "Error in i2s_driver_install");
|
|
91
|
+
}
|
|
92
|
+
ret = i2s_set_pin((i2s_port_t)0, &pin_config);
|
|
93
|
+
if (ret != ESP_OK) {
|
|
94
|
+
ESP_LOGE(TAG, "Error in i2s_set_pin");
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
ret = i2s_zero_dma_buffer((i2s_port_t)0);
|
|
98
|
+
if (ret != ESP_OK) {
|
|
99
|
+
ESP_LOGE(TAG, "Error in initializing dma buffer with 0");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
static void CaptureSamples(void* arg) {
|
|
104
|
+
size_t bytes_read = i2s_bytes_to_read;
|
|
105
|
+
uint8_t i2s_read_buffer[i2s_bytes_to_read] = {};
|
|
106
|
+
i2s_init();
|
|
107
|
+
while (1) {
|
|
108
|
+
/* read 100ms data at once from i2s */
|
|
109
|
+
i2s_read((i2s_port_t)0, (void*)i2s_read_buffer, i2s_bytes_to_read,
|
|
110
|
+
&bytes_read, 10);
|
|
111
|
+
if (bytes_read <= 0) {
|
|
112
|
+
ESP_LOGE(TAG, "Error in I2S read : %d", bytes_read);
|
|
113
|
+
} else {
|
|
114
|
+
if (bytes_read < i2s_bytes_to_read) {
|
|
115
|
+
ESP_LOGW(TAG, "Partial I2S read");
|
|
116
|
+
}
|
|
117
|
+
/* write bytes read by i2s into ring buffer */
|
|
118
|
+
int bytes_written = rb_write(g_audio_capture_buffer,
|
|
119
|
+
(uint8_t*)i2s_read_buffer, bytes_read, 10);
|
|
120
|
+
/* update the timestamp (in ms) to let the model know that new data has
|
|
121
|
+
* arrived */
|
|
122
|
+
g_latest_audio_timestamp +=
|
|
123
|
+
((1000 * (bytes_written / 2)) / kAudioSampleFrequency);
|
|
124
|
+
if (bytes_written <= 0) {
|
|
125
|
+
ESP_LOGE(TAG, "Could Not Write in Ring Buffer: %d ", bytes_written);
|
|
126
|
+
} else if (bytes_written < bytes_read) {
|
|
127
|
+
ESP_LOGW(TAG, "Partial Write");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
vTaskDelete(NULL);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// TfLiteStatus InitAudioRecording(tflite::ErrorReporter* error_reporter) {
|
|
135
|
+
// g_audio_capture_buffer = rb_init("tf_ringbuffer", kAudioCaptureBufferSize);
|
|
136
|
+
int InitAudioRecording() {
|
|
137
|
+
g_audio_capture_buffer = rb_init("tf_ringbuffer", kAudioCaptureBufferSize);
|
|
138
|
+
if (!g_audio_capture_buffer) {
|
|
139
|
+
ESP_LOGE(TAG, "Error creating ring buffer");
|
|
140
|
+
return -1;
|
|
141
|
+
}
|
|
142
|
+
/* create CaptureSamples Task which will get the i2s_data from mic and fill it
|
|
143
|
+
* in the ring buffer */
|
|
144
|
+
xTaskCreate(CaptureSamples, "CaptureSamples", 1024 * 32, NULL, 10, NULL);
|
|
145
|
+
while (!g_latest_audio_timestamp) {
|
|
146
|
+
}
|
|
147
|
+
ESP_LOGI(TAG, "Audio Recording started");
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// TfLiteStatus GetAudioSamples(tflite::ErrorReporter* error_reporter,
|
|
152
|
+
// int start_ms, int duration_ms,
|
|
153
|
+
// int* audio_samples_size, int16_t** audio_samples) {
|
|
154
|
+
int GetAudioSamples(int start_ms, int duration_ms,
|
|
155
|
+
int* audio_samples_size, int16_t** audio_samples) {
|
|
156
|
+
if (!g_is_audio_initialized) {
|
|
157
|
+
int init_status = InitAudioRecording();
|
|
158
|
+
if (init_status != 0) {
|
|
159
|
+
return init_status;
|
|
160
|
+
}
|
|
161
|
+
g_is_audio_initialized = true;
|
|
162
|
+
}
|
|
163
|
+
/* copy 160 samples (320 bytes) into output_buff from history */
|
|
164
|
+
memcpy((void*)(g_audio_output_buffer), (void*)(g_history_buffer),
|
|
165
|
+
history_samples_to_keep * sizeof(int16_t));
|
|
166
|
+
|
|
167
|
+
/* copy 320 samples (640 bytes) from rb at ( int16_t*(g_audio_output_buffer) +
|
|
168
|
+
* 160 ), first 160 samples (320 bytes) will be from history */
|
|
169
|
+
int32_t bytes_read =
|
|
170
|
+
rb_read(g_audio_capture_buffer,
|
|
171
|
+
((uint8_t*)(g_audio_output_buffer + history_samples_to_keep)),
|
|
172
|
+
new_samples_to_get * sizeof(int16_t), 10);
|
|
173
|
+
if (bytes_read < 0) {
|
|
174
|
+
ESP_LOGE(TAG, " Model Could not read data from Ring Buffer");
|
|
175
|
+
} else if (bytes_read < new_samples_to_get * sizeof(int16_t)) {
|
|
176
|
+
ESP_LOGD(TAG, "RB FILLED RIGHT NOW IS %d",
|
|
177
|
+
rb_filled(g_audio_capture_buffer));
|
|
178
|
+
ESP_LOGD(TAG, " Partial Read of Data by Model ");
|
|
179
|
+
ESP_LOGV(TAG, " Could only read %d bytes when required %d bytes ",
|
|
180
|
+
bytes_read, new_samples_to_get * sizeof(int16_t));
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/* copy 320 bytes from output_buff into history */
|
|
184
|
+
memcpy((void*)(g_history_buffer),
|
|
185
|
+
(void*)(g_audio_output_buffer + new_samples_to_get),
|
|
186
|
+
history_samples_to_keep * sizeof(int16_t));
|
|
187
|
+
|
|
188
|
+
*audio_samples_size = kMaxAudioSampleSize;
|
|
189
|
+
*audio_samples = g_audio_output_buffer;
|
|
190
|
+
return 0;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
int32_t LatestAudioTimestamp() { return g_latest_audio_timestamp; }
|