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.
Files changed (376) hide show
  1. mlonmcu/__init__.py +26 -0
  2. mlonmcu/artifact.py +172 -0
  3. mlonmcu/cli/__init__.py +19 -0
  4. mlonmcu/cli/build.py +119 -0
  5. mlonmcu/cli/cleanup.py +75 -0
  6. mlonmcu/cli/common.py +227 -0
  7. mlonmcu/cli/compile.py +87 -0
  8. mlonmcu/cli/env.py +68 -0
  9. mlonmcu/cli/export.py +93 -0
  10. mlonmcu/cli/flow.py +67 -0
  11. mlonmcu/cli/helper/__init__.py +18 -0
  12. mlonmcu/cli/helper/filter.py +25 -0
  13. mlonmcu/cli/helper/parse.py +159 -0
  14. mlonmcu/cli/init.py +130 -0
  15. mlonmcu/cli/load.py +87 -0
  16. mlonmcu/cli/main.py +116 -0
  17. mlonmcu/cli/models.py +48 -0
  18. mlonmcu/cli/run.py +56 -0
  19. mlonmcu/cli/setup.py +136 -0
  20. mlonmcu/cli/tune.py +48 -0
  21. mlonmcu/config.py +219 -0
  22. mlonmcu/context/__init__.py +22 -0
  23. mlonmcu/context/context.py +545 -0
  24. mlonmcu/context/read_write_filelock.py +327 -0
  25. mlonmcu/environment/__init__.py +18 -0
  26. mlonmcu/environment/config.py +214 -0
  27. mlonmcu/environment/environment.py +501 -0
  28. mlonmcu/environment/init.py +191 -0
  29. mlonmcu/environment/list.py +81 -0
  30. mlonmcu/environment/loader.py +250 -0
  31. mlonmcu/environment/templates.py +69 -0
  32. mlonmcu/environment/writer.py +117 -0
  33. mlonmcu/feature/__init__.py +18 -0
  34. mlonmcu/feature/feature.py +230 -0
  35. mlonmcu/feature/features.py +1537 -0
  36. mlonmcu/feature/type.py +33 -0
  37. mlonmcu/flow/__init__.py +61 -0
  38. mlonmcu/flow/backend.py +234 -0
  39. mlonmcu/flow/framework.py +69 -0
  40. mlonmcu/flow/tflm/__init__.py +23 -0
  41. mlonmcu/flow/tflm/backend/__init__.py +23 -0
  42. mlonmcu/flow/tflm/backend/backend.py +47 -0
  43. mlonmcu/flow/tflm/backend/tflmc.py +129 -0
  44. mlonmcu/flow/tflm/backend/tflmi.py +385 -0
  45. mlonmcu/flow/tflm/framework.py +81 -0
  46. mlonmcu/flow/tvm/__init__.py +23 -0
  47. mlonmcu/flow/tvm/backend/__init__.py +26 -0
  48. mlonmcu/flow/tvm/backend/backend.py +282 -0
  49. mlonmcu/flow/tvm/backend/model_info.py +307 -0
  50. mlonmcu/flow/tvm/backend/python_utils.py +36 -0
  51. mlonmcu/flow/tvm/backend/tuner.py +41 -0
  52. mlonmcu/flow/tvm/backend/tvmaot.py +162 -0
  53. mlonmcu/flow/tvm/backend/tvmaotplus.py +51 -0
  54. mlonmcu/flow/tvm/backend/tvmc_utils.py +172 -0
  55. mlonmcu/flow/tvm/backend/tvmcg.py +102 -0
  56. mlonmcu/flow/tvm/backend/tvmllvm.py +106 -0
  57. mlonmcu/flow/tvm/backend/tvmrt.py +151 -0
  58. mlonmcu/flow/tvm/backend/wrapper.py +645 -0
  59. mlonmcu/flow/tvm/framework.py +96 -0
  60. mlonmcu/logging.py +79 -0
  61. mlonmcu/mlonmcu.py +19 -0
  62. mlonmcu/models/__init__.py +31 -0
  63. mlonmcu/models/convert_data.py +107 -0
  64. mlonmcu/models/frontend.py +571 -0
  65. mlonmcu/models/group.py +29 -0
  66. mlonmcu/models/lookup.py +345 -0
  67. mlonmcu/models/metadata.py +133 -0
  68. mlonmcu/models/model.py +104 -0
  69. mlonmcu/models/options.py +64 -0
  70. mlonmcu/models/utils.py +136 -0
  71. mlonmcu/platform/__init__.py +27 -0
  72. mlonmcu/platform/_platform.py +46 -0
  73. mlonmcu/platform/espidf/__init__.py +25 -0
  74. mlonmcu/platform/espidf/espidf.py +489 -0
  75. mlonmcu/platform/espidf/espidf_target.py +257 -0
  76. mlonmcu/platform/lookup.py +126 -0
  77. mlonmcu/platform/microtvm/__init__.py +25 -0
  78. mlonmcu/platform/microtvm/microtvm.py +580 -0
  79. mlonmcu/platform/microtvm/microtvm_arduino_target.py +68 -0
  80. mlonmcu/platform/microtvm/microtvm_backend.py +64 -0
  81. mlonmcu/platform/microtvm/microtvm_espidf_target.py +94 -0
  82. mlonmcu/platform/microtvm/microtvm_etissvp_target.py +98 -0
  83. mlonmcu/platform/microtvm/microtvm_host_target.py +46 -0
  84. mlonmcu/platform/microtvm/microtvm_spike_target.py +230 -0
  85. mlonmcu/platform/microtvm/microtvm_target.py +189 -0
  86. mlonmcu/platform/microtvm/microtvm_template_target.py +55 -0
  87. mlonmcu/platform/microtvm/microtvm_zephyr_target.py +91 -0
  88. mlonmcu/platform/mlif/__init__.py +25 -0
  89. mlonmcu/platform/mlif/mlif.py +300 -0
  90. mlonmcu/platform/mlif/mlif_target.py +86 -0
  91. mlonmcu/platform/platform.py +244 -0
  92. mlonmcu/platform/tvm/__init__.py +25 -0
  93. mlonmcu/platform/tvm/tvm.py +429 -0
  94. mlonmcu/platform/tvm/tvm_backend.py +57 -0
  95. mlonmcu/platform/tvm/tvm_target.py +165 -0
  96. mlonmcu/platform/zephyr/__init__.py +25 -0
  97. mlonmcu/platform/zephyr/zephyr.py +450 -0
  98. mlonmcu/platform/zephyr/zephyr_target.py +110 -0
  99. mlonmcu/plugins.py +26 -0
  100. mlonmcu/report.py +99 -0
  101. mlonmcu/session/__init__.py +18 -0
  102. mlonmcu/session/postprocess/__init__.py +43 -0
  103. mlonmcu/session/postprocess/postprocess.py +62 -0
  104. mlonmcu/session/postprocess/postprocesses.py +487 -0
  105. mlonmcu/session/run.py +1008 -0
  106. mlonmcu/session/session.py +373 -0
  107. mlonmcu/setup/__init__.py +18 -0
  108. mlonmcu/setup/cache.py +147 -0
  109. mlonmcu/setup/gen_requirements.py +619 -0
  110. mlonmcu/setup/setup.py +285 -0
  111. mlonmcu/setup/task.py +380 -0
  112. mlonmcu/setup/tasks/__init__.py +40 -0
  113. mlonmcu/setup/tasks/arm_gcc.py +58 -0
  114. mlonmcu/setup/tasks/cmsisnn.py +151 -0
  115. mlonmcu/setup/tasks/common.py +36 -0
  116. mlonmcu/setup/tasks/corstone300.py +64 -0
  117. mlonmcu/setup/tasks/espidf.py +87 -0
  118. mlonmcu/setup/tasks/etiss.py +147 -0
  119. mlonmcu/setup/tasks/llvm.py +67 -0
  120. mlonmcu/setup/tasks/mlif.py +49 -0
  121. mlonmcu/setup/tasks/muriscvnn.py +166 -0
  122. mlonmcu/setup/tasks/pulp.py +192 -0
  123. mlonmcu/setup/tasks/riscv_gcc.py +146 -0
  124. mlonmcu/setup/tasks/spike.py +190 -0
  125. mlonmcu/setup/tasks/tf.py +92 -0
  126. mlonmcu/setup/tasks/tflite.py +59 -0
  127. mlonmcu/setup/tasks/tflmc.py +141 -0
  128. mlonmcu/setup/tasks/tvm.py +172 -0
  129. mlonmcu/setup/tasks/utvmcg.py +96 -0
  130. mlonmcu/setup/tasks/zephyr.py +119 -0
  131. mlonmcu/setup/utils.py +374 -0
  132. mlonmcu/target/__init__.py +37 -0
  133. mlonmcu/target/_target.py +41 -0
  134. mlonmcu/target/arm/__init__.py +3 -0
  135. mlonmcu/target/arm/corstone300.py +235 -0
  136. mlonmcu/target/arm/util.py +109 -0
  137. mlonmcu/target/common.py +194 -0
  138. mlonmcu/target/elf.py +256 -0
  139. mlonmcu/target/host_x86.py +84 -0
  140. mlonmcu/target/metrics.py +75 -0
  141. mlonmcu/target/riscv/__init__.py +7 -0
  142. mlonmcu/target/riscv/etiss_pulpino.py +462 -0
  143. mlonmcu/target/riscv/gvsoc_pulp.py +215 -0
  144. mlonmcu/target/riscv/ovpsim.py +301 -0
  145. mlonmcu/target/riscv/riscv.py +185 -0
  146. mlonmcu/target/riscv/riscv_qemu.py +166 -0
  147. mlonmcu/target/riscv/spike.py +243 -0
  148. mlonmcu/target/riscv/util.py +134 -0
  149. mlonmcu/target/target.py +200 -0
  150. mlonmcu/utils.py +49 -0
  151. mlonmcu/version.py +21 -0
  152. mlonmcu-0.3.0.dev0.dist-info/LICENSE +202 -0
  153. mlonmcu-0.3.0.dev0.dist-info/METADATA +343 -0
  154. mlonmcu-0.3.0.dev0.dist-info/NOTICE +8 -0
  155. mlonmcu-0.3.0.dev0.dist-info/RECORD +376 -0
  156. mlonmcu-0.3.0.dev0.dist-info/WHEEL +5 -0
  157. mlonmcu-0.3.0.dev0.dist-info/entry_points.txt +3 -0
  158. mlonmcu-0.3.0.dev0.dist-info/top_level.txt +1 -0
  159. resources/frameworks/tvm/crt_config/README.md +7 -0
  160. resources/frameworks/tvm/crt_config/crt_config.h +53 -0
  161. resources/frameworks/tvm/tuning_records/riscv_cpu_v0.01.log.best +46 -0
  162. resources/patches/fix_esp32c3_march.patch +20 -0
  163. resources/patches/pulp_freertos_support.patch +55 -0
  164. resources/platforms/espidf/micro_speech_esp32devboard/CMakeLists.txt +29 -0
  165. resources/platforms/espidf/micro_speech_esp32devboard/README.md +70 -0
  166. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/CMakeLists.txt +78 -0
  167. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/Kconfig +76 -0
  168. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_data.c +26 -0
  169. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_input.c +35 -0
  170. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/default_model_support/process_output.c +45 -0
  171. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/exit.h +26 -0
  172. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/ml_interface.h +70 -0
  173. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/include/printing.h +31 -0
  174. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface.c +74 -0
  175. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tflm.cc +64 -0
  176. resources/platforms/espidf/micro_speech_esp32devboard/components/mlif2/ml_interface_tvm.c +53 -0
  177. resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/CMakeLists.txt +140 -0
  178. resources/platforms/espidf/micro_speech_esp32devboard/components/tflite-lib/Kconfig +8 -0
  179. resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/CMakeLists.txt +66 -0
  180. resources/platforms/espidf/micro_speech_esp32devboard/components/tvm-lib/Kconfig +7 -0
  181. resources/platforms/espidf/micro_speech_esp32devboard/example_test.py +38 -0
  182. resources/platforms/espidf/micro_speech_esp32devboard/info.txt +9 -0
  183. resources/platforms/espidf/micro_speech_esp32devboard/main/CMakeLists.txt +58 -0
  184. resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.cc +193 -0
  185. resources/platforms/espidf/micro_speech_esp32devboard/main/audio_provider.h +49 -0
  186. resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.cc +53 -0
  187. resources/platforms/espidf/micro_speech_esp32devboard/main/command_responder.h +35 -0
  188. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc +132 -0
  189. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.cc.orig +145 -0
  190. resources/platforms/espidf/micro_speech_esp32devboard/main/feature_provider.h +55 -0
  191. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/COPYING +11 -0
  192. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/_kiss_fft_guts.h +168 -0
  193. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.c +408 -0
  194. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/kiss_fft.h +124 -0
  195. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.c +159 -0
  196. resources/platforms/espidf/micro_speech_esp32devboard/main/kissfft/tools/kiss_fftr.h +46 -0
  197. resources/platforms/espidf/micro_speech_esp32devboard/main/main.cc +63 -0
  198. resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.cc +204 -0
  199. resources/platforms/espidf/micro_speech_esp32devboard/main/main_functions.h +37 -0
  200. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.cc +121 -0
  201. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_features_generator.h +38 -0
  202. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.cc +23 -0
  203. resources/platforms/espidf/micro_speech_esp32devboard/main/micro_model_settings.h +43 -0
  204. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/bits.h +102 -0
  205. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.cc +52 -0
  206. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft.h +50 -0
  207. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.cc +69 -0
  208. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/fft_util.h +34 -0
  209. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.c +134 -0
  210. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank.h +63 -0
  211. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.c +220 -0
  212. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/filterbank_util.h +50 -0
  213. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.c +72 -0
  214. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend.h +64 -0
  215. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.c +85 -0
  216. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/frontend_util.h +52 -0
  217. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_common.h +48 -0
  218. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.cc +8 -0
  219. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/kiss_fft_int16.h +34 -0
  220. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.c +30 -0
  221. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_lut.h +40 -0
  222. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.c +83 -0
  223. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale.h +39 -0
  224. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.c +27 -0
  225. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/log_scale_util.h +45 -0
  226. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.c +51 -0
  227. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction.h +46 -0
  228. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.c +45 -0
  229. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/noise_reduction_util.h +50 -0
  230. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.c +56 -0
  231. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control.h +47 -0
  232. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.c +92 -0
  233. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/pcan_gain_control_util.h +57 -0
  234. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.c +70 -0
  235. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window.h +49 -0
  236. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.c +73 -0
  237. resources/platforms/espidf/micro_speech_esp32devboard/main/microfrontend/lib/window_util.h +45 -0
  238. resources/platforms/espidf/micro_speech_esp32devboard/main/pins.c +14 -0
  239. resources/platforms/espidf/micro_speech_esp32devboard/main/pins.h +30 -0
  240. resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.cc +150 -0
  241. resources/platforms/espidf/micro_speech_esp32devboard/main/recognize_commands.h +173 -0
  242. resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.c +333 -0
  243. resources/platforms/espidf/micro_speech_esp32devboard/main/ringbuf.h +74 -0
  244. resources/platforms/espidf/micro_speech_esp32devboard/sdkconfig.defaults +36 -0
  245. resources/platforms/espidf/project/CMakeLists.txt +29 -0
  246. resources/platforms/espidf/project/README.md +70 -0
  247. resources/platforms/espidf/project/components/mlif/CMakeLists.txt +77 -0
  248. resources/platforms/espidf/project/components/mlif/Kconfig +76 -0
  249. resources/platforms/espidf/project/components/mlif/default_data.c +26 -0
  250. resources/platforms/espidf/project/components/mlif/default_model_support/process_input.c +35 -0
  251. resources/platforms/espidf/project/components/mlif/default_model_support/process_output.c +45 -0
  252. resources/platforms/espidf/project/components/mlif/include/exit.h +26 -0
  253. resources/platforms/espidf/project/components/mlif/include/ml_interface.h +60 -0
  254. resources/platforms/espidf/project/components/mlif/include/printing.h +31 -0
  255. resources/platforms/espidf/project/components/mlif/ml_interface.c +54 -0
  256. resources/platforms/espidf/project/components/mlif/ml_interface_tflm.cc +40 -0
  257. resources/platforms/espidf/project/components/mlif/ml_interface_tvm.c +40 -0
  258. resources/platforms/espidf/project/components/tflite-lib/CMakeLists.txt +142 -0
  259. resources/platforms/espidf/project/components/tflite-lib/Kconfig +8 -0
  260. resources/platforms/espidf/project/components/tvm-lib/CMakeLists.txt +66 -0
  261. resources/platforms/espidf/project/components/tvm-lib/Kconfig +7 -0
  262. resources/platforms/espidf/project/example_test.py +38 -0
  263. resources/platforms/espidf/project/main/CMakeLists.txt +25 -0
  264. resources/platforms/espidf/project/main/main.c +57 -0
  265. resources/platforms/espidf/project/sdkconfig.defaults +26 -0
  266. resources/platforms/zephyr/project/CMakeLists.txt +22 -0
  267. resources/platforms/zephyr/project/Kconfig +101 -0
  268. resources/platforms/zephyr/project/README.rst +33 -0
  269. resources/platforms/zephyr/project/cmake/AddAllSubdirs.cmake +21 -0
  270. resources/platforms/zephyr/project/cmake/ChooseTarget.cmake +22 -0
  271. resources/platforms/zephyr/project/cmake/LinkTFLite.cmake +223 -0
  272. resources/platforms/zephyr/project/cmake/LinkTVM.cmake +68 -0
  273. resources/platforms/zephyr/project/cmake/LookupClang.cmake +41 -0
  274. resources/platforms/zephyr/project/cmake/backends/tflmc.cmake +5 -0
  275. resources/platforms/zephyr/project/cmake/backends/tflmi.cmake +5 -0
  276. resources/platforms/zephyr/project/cmake/backends/tvmaot.cmake +10 -0
  277. resources/platforms/zephyr/project/cmake/backends/tvmaotplus.cmake +10 -0
  278. resources/platforms/zephyr/project/cmake/backends/tvmcg.cmake +10 -0
  279. resources/platforms/zephyr/project/cmake/backends/tvmllvm.cmake +8 -0
  280. resources/platforms/zephyr/project/cmake/backends/tvmrt.cmake +8 -0
  281. resources/platforms/zephyr/project/cmake/extras.cmake +9 -0
  282. resources/platforms/zephyr/project/cmake/features/auto_vectorize_gcc.cmake +65 -0
  283. resources/platforms/zephyr/project/cmake/features/auto_vectorize_llvm.cmake +20 -0
  284. resources/platforms/zephyr/project/cmake/features/cmsisnn.cmake +86 -0
  285. resources/platforms/zephyr/project/cmake/features/muriscvnn.cmake +87 -0
  286. resources/platforms/zephyr/project/cmake/frameworks/tflm.cmake +1 -0
  287. resources/platforms/zephyr/project/cmake/frameworks/tflm_mlif.cmake +8 -0
  288. resources/platforms/zephyr/project/cmake/frameworks/tvm.cmake +1 -0
  289. resources/platforms/zephyr/project/cmake/frameworks/tvm_mlif.cmake +37 -0
  290. resources/platforms/zephyr/project/lib/CMakeLists.txt +13 -0
  291. resources/platforms/zephyr/project/lib/drivers/fake_input.c +10 -0
  292. resources/platforms/zephyr/project/lib/drivers/fake_input.h +8 -0
  293. resources/platforms/zephyr/project/lib/ml_interface/CMakeLists.txt +31 -0
  294. resources/platforms/zephyr/project/lib/ml_interface/default_data.c +8 -0
  295. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/CMakeLists.txt +2 -0
  296. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_input.c +17 -0
  297. resources/platforms/zephyr/project/lib/ml_interface/default_model_support/process_output.c +27 -0
  298. resources/platforms/zephyr/project/lib/ml_interface/ml_interface.c +36 -0
  299. resources/platforms/zephyr/project/lib/ml_interface/ml_interface.h +47 -0
  300. resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tflm.cc +22 -0
  301. resources/platforms/zephyr/project/lib/ml_interface/ml_interface_tvm.c +22 -0
  302. resources/platforms/zephyr/project/lib/support/CMakeLists.txt +2 -0
  303. resources/platforms/zephyr/project/lib/support/dummy.c +0 -0
  304. resources/platforms/zephyr/project/lib/support/exit.h +8 -0
  305. resources/platforms/zephyr/project/lib/support/printing.h +11 -0
  306. resources/platforms/zephyr/project/lib/support/quantize.h +23 -0
  307. resources/platforms/zephyr/project/lib/targets/corstone300.c +62 -0
  308. resources/platforms/zephyr/project/lib/targets/default.c +2 -0
  309. resources/platforms/zephyr/project/lib/targets/etiss_pulpino.c +112 -0
  310. resources/platforms/zephyr/project/lib/targets/generic_riscv.c +112 -0
  311. resources/platforms/zephyr/project/lib/targets/riscv_qemu.c +112 -0
  312. resources/platforms/zephyr/project/lib/targets/target.h +2 -0
  313. resources/platforms/zephyr/project/prj.conf +11 -0
  314. resources/platforms/zephyr/project/sample.yaml +19 -0
  315. resources/platforms/zephyr/project/src/main.c +71 -0
  316. resources/platforms/zephyr/project2/CMakeLists.txt +72 -0
  317. resources/platforms/zephyr/project2/Kconfig +101 -0
  318. resources/platforms/zephyr/project2/README.rst +33 -0
  319. resources/platforms/zephyr/project2/cmake/AddAllSubdirs.cmake +21 -0
  320. resources/platforms/zephyr/project2/cmake/ChooseTarget.cmake +22 -0
  321. resources/platforms/zephyr/project2/cmake/LinkTFLite.cmake +223 -0
  322. resources/platforms/zephyr/project2/cmake/LinkTVM.cmake +68 -0
  323. resources/platforms/zephyr/project2/cmake/LookupClang.cmake +41 -0
  324. resources/platforms/zephyr/project2/cmake/backends/tflmc.cmake +5 -0
  325. resources/platforms/zephyr/project2/cmake/backends/tflmi.cmake +5 -0
  326. resources/platforms/zephyr/project2/cmake/backends/tvmaot.cmake +10 -0
  327. resources/platforms/zephyr/project2/cmake/backends/tvmaotplus.cmake +10 -0
  328. resources/platforms/zephyr/project2/cmake/backends/tvmcg.cmake +10 -0
  329. resources/platforms/zephyr/project2/cmake/backends/tvmllvm.cmake +8 -0
  330. resources/platforms/zephyr/project2/cmake/backends/tvmrt.cmake +8 -0
  331. resources/platforms/zephyr/project2/cmake/extras.cmake +9 -0
  332. resources/platforms/zephyr/project2/cmake/features/auto_vectorize_gcc.cmake +65 -0
  333. resources/platforms/zephyr/project2/cmake/features/auto_vectorize_llvm.cmake +20 -0
  334. resources/platforms/zephyr/project2/cmake/features/cmsisnn.cmake +86 -0
  335. resources/platforms/zephyr/project2/cmake/features/muriscvnn.cmake +87 -0
  336. resources/platforms/zephyr/project2/cmake/frameworks/tflm.cmake +1 -0
  337. resources/platforms/zephyr/project2/cmake/frameworks/tflm_mlif.cmake +8 -0
  338. resources/platforms/zephyr/project2/cmake/frameworks/tvm.cmake +1 -0
  339. resources/platforms/zephyr/project2/cmake/frameworks/tvm_mlif.cmake +37 -0
  340. resources/platforms/zephyr/project2/default_data.c +8 -0
  341. resources/platforms/zephyr/project2/default_model_support/CMakeLists.txt +3 -0
  342. resources/platforms/zephyr/project2/default_model_support/process_input.c +17 -0
  343. resources/platforms/zephyr/project2/default_model_support/process_output.c +27 -0
  344. resources/platforms/zephyr/project2/lib/CMakeLists.txt +13 -0
  345. resources/platforms/zephyr/project2/lib/drivers/fake_input.c +10 -0
  346. resources/platforms/zephyr/project2/lib/drivers/fake_input.h +8 -0
  347. resources/platforms/zephyr/project2/lib/support/CMakeLists.txt +2 -0
  348. resources/platforms/zephyr/project2/lib/support/dummy.c +0 -0
  349. resources/platforms/zephyr/project2/lib/support/exit.h +8 -0
  350. resources/platforms/zephyr/project2/lib/support/printing.h +11 -0
  351. resources/platforms/zephyr/project2/lib/support/quantize.h +23 -0
  352. resources/platforms/zephyr/project2/lib/targets/corstone300.c +62 -0
  353. resources/platforms/zephyr/project2/lib/targets/default.c +2 -0
  354. resources/platforms/zephyr/project2/lib/targets/etiss_pulpino.c +112 -0
  355. resources/platforms/zephyr/project2/lib/targets/generic_riscv.c +112 -0
  356. resources/platforms/zephyr/project2/lib/targets/riscv_qemu.c +112 -0
  357. resources/platforms/zephyr/project2/lib/targets/target.h +2 -0
  358. resources/platforms/zephyr/project2/ml_interface.c +36 -0
  359. resources/platforms/zephyr/project2/ml_interface.h +47 -0
  360. resources/platforms/zephyr/project2/ml_interface_tflm.cc +22 -0
  361. resources/platforms/zephyr/project2/ml_interface_tvm.c +22 -0
  362. resources/platforms/zephyr/project2/prj.conf +13 -0
  363. resources/platforms/zephyr/project2/sample.yaml +19 -0
  364. resources/platforms/zephyr/project2/settings.json +6 -0
  365. resources/platforms/zephyr/project2/src/main.c +35 -0
  366. resources/pycharm/.run/README.md +73 -0
  367. resources/pycharm/.run/step1_ init env.run.xml +24 -0
  368. resources/pycharm/.run/step2_ setup.run.xml +25 -0
  369. resources/pycharm/.run/step3_ run resnet on pulpxpulpissimo.run.xml +25 -0
  370. resources/templates/default.yml.j2 +258 -0
  371. resources/templates/dev.yml.j2 +212 -0
  372. resources/templates/minimal.yml.j2 +234 -0
  373. resources/templates/phi.yml.j2 +282 -0
  374. resources/templates/pulp.yml.j2 +267 -0
  375. resources/templates/research.yml.j2 +237 -0
  376. 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,8 @@
1
+ menu "TFLite Micro Build Options"
2
+
3
+ config TF_DIR
4
+ string "Path to TFLite Micro"
5
+ default "$(TF_SRC)"
6
+ help
7
+ TFLite Micro directory path.
8
+ endmenu
@@ -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,7 @@
1
+ menu "TVM Build Options"
2
+ config TVM_DIR
3
+ string "Path to TVM"
4
+ default "$(TVM_SRC)"
5
+ help
6
+ TVM directory path.
7
+ endmenu
@@ -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; }