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,87 @@
|
|
|
1
|
+
IF(NOT MURISCVNN_DIR)
|
|
2
|
+
MESSAGE(FATAL_ERROR "Missing value: MURISCVNN_DIR")
|
|
3
|
+
ENDIF()
|
|
4
|
+
|
|
5
|
+
IF(NOT RISCV_VEXT)
|
|
6
|
+
SET(USE_VEXT OFF)
|
|
7
|
+
ELSE()
|
|
8
|
+
SET(USE_VEXT ON)
|
|
9
|
+
ENDIF()
|
|
10
|
+
|
|
11
|
+
IF(NOT RISCV_PEXT)
|
|
12
|
+
SET(USE_PEXT OFF)
|
|
13
|
+
ELSE()
|
|
14
|
+
SET(USE_PEXT ON)
|
|
15
|
+
ENDIF()
|
|
16
|
+
|
|
17
|
+
IF(NOT MURISCVNN_TOOLCHAIN)
|
|
18
|
+
SET(MURISCVVN_TOOLCHAIN GCC)
|
|
19
|
+
# SET(MURISCVVN_TOOLCHAIN NONE)
|
|
20
|
+
ENDIF()
|
|
21
|
+
|
|
22
|
+
SET(MURISCVNN_INCLUDE_DIRS ${MURISCVNN_DIR}/Include ${MURISCVNN_DIR}/Include/CMSIS/NN/Include)
|
|
23
|
+
|
|
24
|
+
# TODO: propagarting all toolchain specific vars does not scale well
|
|
25
|
+
|
|
26
|
+
INCLUDE(ExternalProject)
|
|
27
|
+
EXTERNALPROJECT_ADD(
|
|
28
|
+
muriscvnn
|
|
29
|
+
PREFIX muriscvnn
|
|
30
|
+
SOURCE_DIR ${MURISCVNN_DIR}
|
|
31
|
+
CMAKE_ARGS -DCMAKE_BUILD_TYPE:STRING=${CMAKE_BUILD_TYPE}
|
|
32
|
+
-DUSE_VEXT=${USE_VEXT}
|
|
33
|
+
-DUSE_PEXT=${USE_PEXT}
|
|
34
|
+
-DTOOLCHAIN=${MURISCVNN_TOOLCHAIN}
|
|
35
|
+
-DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE}
|
|
36
|
+
-DENABLE_TESTS=OFF
|
|
37
|
+
-DTC_PREFIX=${TC_PREFIX}
|
|
38
|
+
-DEXE_EXT=${EXE_EXT}
|
|
39
|
+
-DRISCV_ARCH=${RISCV_ARCH}
|
|
40
|
+
-DRISCV_ABI=${RISCV_ABI}
|
|
41
|
+
-DARM_CPU=${ARM_CPU}
|
|
42
|
+
-DARM_FLOAT_ABI=${ARM_FLOAT_ABI}
|
|
43
|
+
-DARM_FPU=${ARM_FPU}
|
|
44
|
+
BUILD_COMMAND "${CMAKE_COMMAND}" --build .
|
|
45
|
+
INSTALL_COMMAND ""
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
EXTERNALPROJECT_GET_PROPERTY(muriscvnn BINARY_DIR)
|
|
49
|
+
SET(MURISCVNN_LIB ${BINARY_DIR}/Source/libmuriscv_nn.a)
|
|
50
|
+
|
|
51
|
+
# TFLite integration
|
|
52
|
+
IF(TFLM_OPTIMIZED_KERNEL_LIB)
|
|
53
|
+
LIST(APPEND TFLM_OPTIMIZED_KERNEL_LIB ${MURISCVNN_LIB})
|
|
54
|
+
ELSE()
|
|
55
|
+
SET(TFLM_OPTIMIZED_KERNEL_LIB ${MURISCVNN_LIB})
|
|
56
|
+
ENDIF()
|
|
57
|
+
|
|
58
|
+
IF(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR)
|
|
59
|
+
LIST(APPEND TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${MURISCVNN_INCLUDE_DIRS})
|
|
60
|
+
ELSE()
|
|
61
|
+
SET(TFLM_OPTIMIZED_KERNEL_INCLUDE_DIR ${MURISCVNN_INCLUDE_DIRS})
|
|
62
|
+
ENDIF()
|
|
63
|
+
|
|
64
|
+
IF(TFLM_OPTIMIZED_KERNEL_DEPS)
|
|
65
|
+
LIST(APPEND TFLM_OPTIMIZED_KERNEL_DEPS muriscvnn)
|
|
66
|
+
ELSE()
|
|
67
|
+
SET(TFLM_OPTIMIZED_KERNEL_DEPS muriscvnn)
|
|
68
|
+
ENDIF()
|
|
69
|
+
|
|
70
|
+
# TVM integration
|
|
71
|
+
IF(TVM_EXTRA_LIBS)
|
|
72
|
+
LIST(APPEND TVM_EXTRA_LIBS ${MURISCVNN_LIB})
|
|
73
|
+
ELSE()
|
|
74
|
+
SET(TVM_EXTRA_LIBS ${MURISCVNN_LIB})
|
|
75
|
+
ENDIF()
|
|
76
|
+
|
|
77
|
+
IF(TVM_EXTRA_INCS)
|
|
78
|
+
LIST(APPEND TVM_EXTRA_INCS ${MURISCVNN_INCLUDE_DIRS})
|
|
79
|
+
ELSE()
|
|
80
|
+
SET(TVM_EXTRA_INCS ${MURISCVNN_INCLUDE_DIRS})
|
|
81
|
+
ENDIF()
|
|
82
|
+
|
|
83
|
+
IF(TVM_EXTRA_DEPS)
|
|
84
|
+
LIST(APPEND TVM_EXTRA_DEPS muriscvnn)
|
|
85
|
+
ELSE()
|
|
86
|
+
SET(TVM_EXTRA_DEPS muriscvnn)
|
|
87
|
+
ENDIF()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
SET(TF_OUT_DIR ${CONFIG_MLONMCU_CODEGEN_DIR}/)
|
|
2
|
+
SET(GEN_SRC ${TF_OUT_DIR}/model.cc)
|
|
3
|
+
GET_FILENAME_COMPONENT(GEN_SRC ${GEN_SRC} REALPATH)
|
|
4
|
+
GET_FILENAME_COMPONENT(EXTRA_INC ${GEN_SRC} DIRECTORY)
|
|
5
|
+
SET(EXTRA_SRC ml_interface_tflm.cc ${GEN_SRC})
|
|
6
|
+
SET(EXTRA_LIBS tflm)
|
|
7
|
+
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DTFLMC_DEBUG_ALLOCATIONS")
|
|
8
|
+
LIST(APPEND EXTRA_LIBS ${CUSTOM_OPS_LIBS})
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
SET(TVM_OUT_DIR ${CONFIG_MLONMCU_CODEGEN_DIR}/codegen/host/)
|
|
2
|
+
SET(EXTRA_SRC ml_interface_tvm.c)
|
|
3
|
+
|
|
4
|
+
FILE(GLOB TVM_SRCS ${TVM_OUT_DIR}/src/*_lib*.c ${TVM_OUT_DIR}/src/*_lib*.cc)
|
|
5
|
+
|
|
6
|
+
# IF(NOT TVM_SRCS)
|
|
7
|
+
# MESSAGE(STATUS "NO SOURCES")
|
|
8
|
+
# FILE(GLOB TVM_OBJS ${TVM_OUT_DIR}/lib/*_lib*.o)
|
|
9
|
+
# MESSAGE(STATUS "TVM_OBJS=${TVM_OBJS}")
|
|
10
|
+
# # ADD_LIBRARY(tvm_extension OBJECT IMPORTED)
|
|
11
|
+
#
|
|
12
|
+
# # SET_PROPERTY(TARGET tvm_extension PROPERTY
|
|
13
|
+
# # IMPORTED_OBJECTS ${TVM_OBJS}
|
|
14
|
+
# # )
|
|
15
|
+
# ELSE()
|
|
16
|
+
# # Need this in extra target to avoid circular dependency .
|
|
17
|
+
# # ADD_LIBRARY(tvm_extension STATIC ${TVM_SRCS})
|
|
18
|
+
# TARGET_INCLUDE_DIRECTORIES(tvm_extension PUBLIC ${TVM_HEADERS} ${TVM_OUT_DIR}/include ${CONFIG_MLONMCU_CODEGEN_DIR})
|
|
19
|
+
# TARGET_LINK_LIBRARIES(tvm_extension PUBLIC m)
|
|
20
|
+
# TARGET_LINK_LIBRARIES(tvm_extension PUBLIC ${TVM_LIB})
|
|
21
|
+
# ENDIF()
|
|
22
|
+
#
|
|
23
|
+
# SET(EXTRA_SRC ${EXTRA_SRC} ${CONFIG_MLONMCU_CODEGEN_DIR}/${TVM_WRAPPER_FILENAME})
|
|
24
|
+
# TARGET_LINK_LIBRARIES(${TVM_LIB} PUBLIC tvm_extension)
|
|
25
|
+
# SET(EXTRA_INC ${TVM_OUT_DIR}/include ${CONFIG_MLONMCU_CODEGEN_DIR})
|
|
26
|
+
#
|
|
27
|
+
# SET(EXTRA_LIBS tvm_extension ${TVM_LIB})
|
|
28
|
+
#
|
|
29
|
+
# FOREACH(ENTRY ${CONFIG_TVM_EXTRA_LIBS})
|
|
30
|
+
# TARGET_LINK_LIBRARIES(tvm_extension PUBLIC ${ENTRY})
|
|
31
|
+
# ENDFOREACH()
|
|
32
|
+
# FOREACH(ENTRY ${CONFIG_TVM_EXTRA_INCS})
|
|
33
|
+
# TARGET_INCLUDE_DIRECTORIES(tvm_extension PUBLIC ${ENTRY})
|
|
34
|
+
# ENDFOREACH()
|
|
35
|
+
# FOREACH(ENTRY ${CONFIG_TVM_EXTRA_DEPS})
|
|
36
|
+
# ADD_DEPENDENCIES(tvm_extension ${ENTRY})
|
|
37
|
+
# ENDFOREACH()
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
#include "ml_interface.h"
|
|
2
|
+
#include <stddef.h>
|
|
3
|
+
const int num_data_buffers_in = 0;
|
|
4
|
+
const int num_data_buffers_out = 0;
|
|
5
|
+
const unsigned char *const data_buffers_in[] = {};
|
|
6
|
+
const unsigned char *const data_buffers_out[] = {};
|
|
7
|
+
const size_t data_size_in[] = {};
|
|
8
|
+
const size_t data_size_out[] = {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#include <stdlib.h>
|
|
2
|
+
#include <memory.h>
|
|
3
|
+
|
|
4
|
+
#include "printing.h"
|
|
5
|
+
#include "exit.h"
|
|
6
|
+
|
|
7
|
+
void mlif_process_input(const void *in_data, size_t in_size, void *model_input_ptr, size_t model_input_sz) {
|
|
8
|
+
if (in_size != 0) {
|
|
9
|
+
if (in_size != model_input_sz) {
|
|
10
|
+
DBGPRINTF("MLIF: Given input size (%lu) does not match model input buffer size (%lu)!\n", in_size,
|
|
11
|
+
model_input_sz);
|
|
12
|
+
exit(EXIT_MLIF_INVALID_SIZE);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
memcpy(model_input_ptr, in_data, in_size);
|
|
17
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#include <stdlib.h>
|
|
2
|
+
#include <memory.h>
|
|
3
|
+
|
|
4
|
+
#include "printing.h"
|
|
5
|
+
#include "exit.h"
|
|
6
|
+
|
|
7
|
+
void mlif_process_output(void *model_output_ptr, size_t model_output_sz, const void *expected_out_data,
|
|
8
|
+
size_t expected_out_size) {
|
|
9
|
+
#ifdef _DEBUG
|
|
10
|
+
if (model_output_sz >= 4) {
|
|
11
|
+
DBGPRINTF("MLIF: First float of output: %f\n", *(float *)model_output_ptr);
|
|
12
|
+
}
|
|
13
|
+
DBGPRINTF("MLIF: Model output data: ");
|
|
14
|
+
for (size_t i = 0; i < model_output_sz; i++) {
|
|
15
|
+
DBGPRINTF("\\x%02X", ((unsigned char *)model_output_ptr)[i]);
|
|
16
|
+
fflush(0);
|
|
17
|
+
}
|
|
18
|
+
DBGPRINTF("\n");
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
if (model_output_sz == expected_out_size && memcmp(model_output_ptr, expected_out_data, model_output_sz) == 0) {
|
|
22
|
+
DBGPRINTF("MLIF: Output data matches expected data\n");
|
|
23
|
+
} else {
|
|
24
|
+
DBGPRINTF("MLIF: Wrong output data!\n");
|
|
25
|
+
exit(EXIT_MLIF_MISSMATCH);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
PROJECT(target_sw_lib)
|
|
2
|
+
|
|
3
|
+
ADD_SUBDIRECTORY(support)
|
|
4
|
+
# ADD_SUBDIRECTORY(ml_interface)
|
|
5
|
+
|
|
6
|
+
SET(TARGET_LIB_SOURCE targets/${TARGET_SYSTEM}.c)
|
|
7
|
+
IF(NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${TARGET_LIB_SOURCE})
|
|
8
|
+
SET(TARGET_LIB_SOURCE targets/default.c)
|
|
9
|
+
ENDIF()
|
|
10
|
+
|
|
11
|
+
ADD_LIBRARY(${PROJECT_NAME} STATIC drivers/fake_input.c ${TARGET_LIB_SOURCE})
|
|
12
|
+
TARGET_INCLUDE_DIRECTORIES(${PROJECT_NAME} PUBLIC lib/drivers lib/targets)
|
|
13
|
+
# TARGET_LINK_LIBRARIES(${PROJECT_NAME} PUBLIC support ml_interface)
|
|
File without changes
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#ifndef SUPPORT_QUANTIZE_H
|
|
2
|
+
#define SUPPORT_QUANTIZE_H
|
|
3
|
+
|
|
4
|
+
#include <stdint.h>
|
|
5
|
+
#include <limits.h>
|
|
6
|
+
#include <math.h>
|
|
7
|
+
|
|
8
|
+
inline float DequantizeInt8ToFloat(int8_t value, float scale, int zero_point) {
|
|
9
|
+
return static_cast<float>(value - zero_point) * scale;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
inline int8_t QuantizeFloatToInt8(float value, float scale, int zero_point) {
|
|
13
|
+
int32_t result = round(value / scale) + zero_point;
|
|
14
|
+
if (result < INT8_MIN) {
|
|
15
|
+
result = INT8_MIN;
|
|
16
|
+
}
|
|
17
|
+
if (result > INT8_MAX) {
|
|
18
|
+
result = INT8_MAX;
|
|
19
|
+
}
|
|
20
|
+
return static_cast<int8_t>(result);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
#endif
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
|
|
3
|
+
// DWT (Data Watchpoint and Trace) registers, only exists on ARM Cortex with a
|
|
4
|
+
// DWT unit.
|
|
5
|
+
#define KIN1_DWT_CONTROL (*((volatile uint32_t*)0xE0001000))
|
|
6
|
+
|
|
7
|
+
// DWT Control register.
|
|
8
|
+
#define KIN1_DWT_CYCCNTENA_BIT (1UL << 0)
|
|
9
|
+
|
|
10
|
+
// CYCCNTENA bit in DWT_CONTROL register.
|
|
11
|
+
#define KIN1_DWT_CYCCNT (*((volatile uint32_t*)0xE0001004))
|
|
12
|
+
|
|
13
|
+
// DWT Cycle Counter register.
|
|
14
|
+
#define KIN1_DEMCR (*((volatile uint32_t*)0xE000EDFC))
|
|
15
|
+
|
|
16
|
+
// DEMCR: Debug Exception and Monitor Control Register.
|
|
17
|
+
#define KIN1_TRCENA_BIT (1UL << 24)
|
|
18
|
+
|
|
19
|
+
// Trace enable bit in DEMCR register.
|
|
20
|
+
#define KIN1_LAR (*((volatile uint32_t*)0xE0001FB0))
|
|
21
|
+
|
|
22
|
+
// Unlock access to DWT (ITM, etc.)registers.
|
|
23
|
+
#define KIN1_UnlockAccessToDWT() KIN1_LAR = 0xC5ACCE55;
|
|
24
|
+
|
|
25
|
+
// TRCENA: Enable trace and debug block DEMCR (Debug Exception and Monitor
|
|
26
|
+
// Control Register.
|
|
27
|
+
#define KIN1_InitCycleCounter() KIN1_DEMCR |= KIN1_TRCENA_BIT
|
|
28
|
+
|
|
29
|
+
#define KIN1_ResetCycleCounter() KIN1_DWT_CYCCNT = 0
|
|
30
|
+
#define KIN1_EnableCycleCounter() KIN1_DWT_CONTROL |= KIN1_DWT_CYCCNTENA_BIT
|
|
31
|
+
#define KIN1_DisableCycleCounter() KIN1_DWT_CONTROL &= ~KIN1_DWT_CYCCNTENA_BIT
|
|
32
|
+
#define KIN1_GetCycleCounter() KIN1_DWT_CYCCNT
|
|
33
|
+
|
|
34
|
+
int32_t ticks_per_second() { return 25e6; }
|
|
35
|
+
|
|
36
|
+
int32_t GetCurrentTimeTicks() { return KIN1_GetCycleCounter(); }
|
|
37
|
+
|
|
38
|
+
extern void uart_init(void);
|
|
39
|
+
|
|
40
|
+
static int32_t start_cycles = 0;
|
|
41
|
+
|
|
42
|
+
void init_target() {
|
|
43
|
+
uart_init();
|
|
44
|
+
KIN1_UnlockAccessToDWT();
|
|
45
|
+
KIN1_InitCycleCounter();
|
|
46
|
+
KIN1_ResetCycleCounter();
|
|
47
|
+
KIN1_EnableCycleCounter();
|
|
48
|
+
int32_t ticks = GetCurrentTimeTicks();
|
|
49
|
+
start_cycles = ticks;
|
|
50
|
+
printf("GetCurrentTimeTicks=%ld\n", ticks);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void deinit_target() {
|
|
54
|
+
int32_t stop_cycles = GetCurrentTimeTicks();
|
|
55
|
+
int32_t diff_cycles = stop_cycles - start_cycles;
|
|
56
|
+
// int32_t diff_ms = diff_cycles / (ticks_per_second() / 1000);
|
|
57
|
+
// printf("Total Time: %ld ms\n", diff_ms);
|
|
58
|
+
printf("Total Cycles: %ld\n", diff_cycles);
|
|
59
|
+
printf("EXITTHESIM\n");
|
|
60
|
+
while (1)
|
|
61
|
+
;
|
|
62
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
|
|
3
|
+
/* How many cycles (rdcycle) per second (OVPsim and Spike). */
|
|
4
|
+
#define RDCYCLE_PER_SECOND 100000000UL
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @brief Returns the number of clock cycles executed by the processor.
|
|
8
|
+
* Overflows after 42.9 seconds on a 100 MIPS and with CPI = 1 (OVPsim).
|
|
9
|
+
*/
|
|
10
|
+
static inline uint32_t rdcycle(void) {
|
|
11
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
12
|
+
uint32_t cycles;
|
|
13
|
+
__asm__ volatile("rdcycle %0" : "=r"(cycles));
|
|
14
|
+
return cycles;
|
|
15
|
+
#else
|
|
16
|
+
return 0;
|
|
17
|
+
#endif
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @brief Returns the full 64bit register cycle register, which holds the
|
|
22
|
+
* number of clock cycles executed by the processor.
|
|
23
|
+
*/
|
|
24
|
+
static inline uint64_t rdcycle64() {
|
|
25
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
26
|
+
uint32_t cycles;
|
|
27
|
+
uint32_t cyclesh1;
|
|
28
|
+
uint32_t cyclesh2;
|
|
29
|
+
|
|
30
|
+
/* Reads are not atomic. So ensure, that we are never reading inconsistent
|
|
31
|
+
* values from the 64bit hardware register. */
|
|
32
|
+
do {
|
|
33
|
+
__asm__ volatile("rdcycleh %0" : "=r"(cyclesh1));
|
|
34
|
+
__asm__ volatile("rdcycle %0" : "=r"(cycles));
|
|
35
|
+
__asm__ volatile("rdcycleh %0" : "=r"(cyclesh2));
|
|
36
|
+
} while (cyclesh1 != cyclesh2);
|
|
37
|
+
|
|
38
|
+
return (((uint64_t)cyclesh1) << 32) | cycles;
|
|
39
|
+
#else
|
|
40
|
+
return 0;
|
|
41
|
+
#endif
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* How many time cycles (rdtime) per second (OVPsim and Spike). */
|
|
45
|
+
#define RDTIME_PER_SECOND 1000000UL
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @brief Returns wall-clock real time that has passed from an arbitrary start time in the past.
|
|
49
|
+
*/
|
|
50
|
+
static inline uint32_t rdtime(void) {
|
|
51
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
52
|
+
uint32_t time;
|
|
53
|
+
__asm__ volatile("rdtime %0" : "=r"(time));
|
|
54
|
+
return time;
|
|
55
|
+
#else
|
|
56
|
+
return 0;
|
|
57
|
+
#endif
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @brief Returns the number of instructions retired by the processor.
|
|
62
|
+
*/
|
|
63
|
+
static inline uint32_t rdinstret(void) {
|
|
64
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
65
|
+
uint32_t instret;
|
|
66
|
+
__asm__ volatile("rdinstret %0" : "=r"(instret));
|
|
67
|
+
return instret;
|
|
68
|
+
#else
|
|
69
|
+
return 0;
|
|
70
|
+
#endif
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @brief Enables the vector extension (as well as the floating point extension).
|
|
75
|
+
*/
|
|
76
|
+
static inline void enable_fext(void)
|
|
77
|
+
{
|
|
78
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
79
|
+
__asm__ volatile("li t0, 1<<13 \n"
|
|
80
|
+
"csrs mstatus, t0 \n" ::
|
|
81
|
+
: "t0");
|
|
82
|
+
#endif
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @brief Enables the vector extension (as well as the floating point extension).
|
|
87
|
+
*/
|
|
88
|
+
static inline void enable_vext(void)
|
|
89
|
+
{
|
|
90
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
91
|
+
__asm__ volatile("li t0, 1<<9+1<<13 \n"
|
|
92
|
+
"csrs mstatus, t0 \n" ::
|
|
93
|
+
: "t0");
|
|
94
|
+
#endif
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static uint64_t start_cycles = 0;
|
|
98
|
+
|
|
99
|
+
void init_target() {
|
|
100
|
+
// enable_fext();
|
|
101
|
+
#ifdef USE_VEXT
|
|
102
|
+
// enable_vext();
|
|
103
|
+
#endif
|
|
104
|
+
start_cycles = rdcycle64();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void deinit_target() {
|
|
108
|
+
uint64_t stop_cycles = rdcycle64();
|
|
109
|
+
uint64_t diff_cycles = stop_cycles - start_cycles;
|
|
110
|
+
float diff_ms = 0; // unimplemented (see RDCYCLE_PER_SECOND)
|
|
111
|
+
printf("Total Cycles: %lld\n", stop_cycles - start_cycles);
|
|
112
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#include <stdio.h>
|
|
2
|
+
|
|
3
|
+
/* How many cycles (rdcycle) per second (OVPsim and Spike). */
|
|
4
|
+
#define RDCYCLE_PER_SECOND 100000000UL
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* @brief Returns the number of clock cycles executed by the processor.
|
|
8
|
+
* Overflows after 42.9 seconds on a 100 MIPS and with CPI = 1 (OVPsim).
|
|
9
|
+
*/
|
|
10
|
+
static inline uint32_t rdcycle(void) {
|
|
11
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
12
|
+
uint32_t cycles;
|
|
13
|
+
__asm__ volatile("rdcycle %0" : "=r"(cycles));
|
|
14
|
+
return cycles;
|
|
15
|
+
#else
|
|
16
|
+
return 0;
|
|
17
|
+
#endif
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @brief Returns the full 64bit register cycle register, which holds the
|
|
22
|
+
* number of clock cycles executed by the processor.
|
|
23
|
+
*/
|
|
24
|
+
static inline uint64_t rdcycle64() {
|
|
25
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
26
|
+
uint32_t cycles;
|
|
27
|
+
uint32_t cyclesh1;
|
|
28
|
+
uint32_t cyclesh2;
|
|
29
|
+
|
|
30
|
+
/* Reads are not atomic. So ensure, that we are never reading inconsistent
|
|
31
|
+
* values from the 64bit hardware register. */
|
|
32
|
+
do {
|
|
33
|
+
__asm__ volatile("rdcycleh %0" : "=r"(cyclesh1));
|
|
34
|
+
__asm__ volatile("rdcycle %0" : "=r"(cycles));
|
|
35
|
+
__asm__ volatile("rdcycleh %0" : "=r"(cyclesh2));
|
|
36
|
+
} while (cyclesh1 != cyclesh2);
|
|
37
|
+
|
|
38
|
+
return (((uint64_t)cyclesh1) << 32) | cycles;
|
|
39
|
+
#else
|
|
40
|
+
return 0;
|
|
41
|
+
#endif
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* How many time cycles (rdtime) per second (OVPsim and Spike). */
|
|
45
|
+
#define RDTIME_PER_SECOND 1000000UL
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @brief Returns wall-clock real time that has passed from an arbitrary start time in the past.
|
|
49
|
+
*/
|
|
50
|
+
static inline uint32_t rdtime(void) {
|
|
51
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
52
|
+
uint32_t time;
|
|
53
|
+
__asm__ volatile("rdtime %0" : "=r"(time));
|
|
54
|
+
return time;
|
|
55
|
+
#else
|
|
56
|
+
return 0;
|
|
57
|
+
#endif
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @brief Returns the number of instructions retired by the processor.
|
|
62
|
+
*/
|
|
63
|
+
static inline uint32_t rdinstret(void) {
|
|
64
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
65
|
+
uint32_t instret;
|
|
66
|
+
__asm__ volatile("rdinstret %0" : "=r"(instret));
|
|
67
|
+
return instret;
|
|
68
|
+
#else
|
|
69
|
+
return 0;
|
|
70
|
+
#endif
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @brief Enables the vector extension (as well as the floating point extension).
|
|
75
|
+
*/
|
|
76
|
+
static inline void enable_fext(void)
|
|
77
|
+
{
|
|
78
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
79
|
+
__asm__ volatile("li t0, 1<<13 \n"
|
|
80
|
+
"csrs mstatus, t0 \n" ::
|
|
81
|
+
: "t0");
|
|
82
|
+
#endif
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @brief Enables the vector extension (as well as the floating point extension).
|
|
87
|
+
*/
|
|
88
|
+
static inline void enable_vext(void)
|
|
89
|
+
{
|
|
90
|
+
#if defined(__riscv) || defined(__riscv__)
|
|
91
|
+
__asm__ volatile("li t0, 1<<9+1<<13 \n"
|
|
92
|
+
"csrs mstatus, t0 \n" ::
|
|
93
|
+
: "t0");
|
|
94
|
+
#endif
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
static uint64_t start_cycles = 0;
|
|
98
|
+
|
|
99
|
+
void init_target() {
|
|
100
|
+
// enable_fext();
|
|
101
|
+
#ifdef USE_VEXT
|
|
102
|
+
// enable_vext();
|
|
103
|
+
#endif
|
|
104
|
+
start_cycles = rdcycle64();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void deinit_target() {
|
|
108
|
+
uint64_t stop_cycles = rdcycle64();
|
|
109
|
+
uint64_t diff_cycles = stop_cycles - start_cycles;
|
|
110
|
+
float diff_ms = 0; // unimplemented (see RDCYCLE_PER_SECOND)
|
|
111
|
+
printf("Total Cycles: %lld\n", stop_cycles - start_cycles);
|
|
112
|
+
}
|