Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
2d1900e
Put the pool section attribute after the array declarator
MatthiasHertel80 Sep 10, 2026
7f67bfe
Make the CI FVP run and the flatbuffers check work on GitHub runners
MatthiasHertel80 Sep 10, 2026
2c51f02
Bring the documentation in line with the committed RTE and the FVP shim
MatthiasHertel80 Sep 10, 2026
6c1cc65
Correct the Corstone-320 layer comments and heap metadata
MatthiasHertel80 Sep 10, 2026
ac99905
Ship the BSD license of EmbeddedModule and tidy generator and runner …
MatthiasHertel80 Sep 10, 2026
d83e983
Tidy CI, .gitignore and the FVP shim header
MatthiasHertel80 Sep 10, 2026
fa6c272
Move to ExecuTorch 1.4.1
MatthiasHertel80 Sep 10, 2026
c1cf977
Build with AC6, GCC and CLANG in CI
MatthiasHertel80 Sep 10, 2026
ad410fd
Pin the LLVM embedded toolchain 22.1.0
MatthiasHertel80 Sep 10, 2026
7fd381d
Name the Cortex-M85 FPU explicitly for Clang
MatthiasHertel80 Sep 10, 2026
5a3d825
Act on the instruction audit: venv selection, Vela ini path, docs
MatthiasHertel80 Sep 11, 2026
4bde4e5
Track the generated RTE context folders as well
MatthiasHertel80 Sep 11, 2026
4dd4b91
Refuse Python 3.14 in the venv setup: tosa-tools 2026.5.0 has no 3.14…
MatthiasHertel80 Sep 11, 2026
e5ad3e3
Keep uv below Python 3.14 in setup_venv.bat and the task prompt
MatthiasHertel80 Sep 30, 2026
5445c14
Correct python path for create_ai command
christophe0606 Sep 11, 2026
568ac82
Pass every Vela option of the mlops: node to Vela
MatthiasHertel80 Sep 30, 2026
3b96502
Move to ExecuTorch 1.5.1
MatthiasHertel80 Sep 30, 2026
7c1d239
Take the model input as NHWC
MatthiasHertel80 Sep 30, 2026
649f2f4
Run the FVP directly on Windows and Linux, require CMSIS-Toolbox 2.15…
jkrech Oct 6, 2026
2e4ddc2
Use the implicit simulator target and model parameters in mlops: (#28)
MatthiasHertelArm Oct 6, 2026
2a25f70
Update README.md
jkrech Oct 6, 2026
2ac7d2f
Merge main into hackathon: CMSIS-Toolbox 2.15.0, ExecuTorch 1.5.1, NH…
MatthiasHertel80 Oct 6, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,13 @@ tmp/
fvp_stdout.log

# Editor config. The CMSIS Solution extension regenerates tasks.json,
# settings.json and cmsis.json; only the FVP run/debug wiring is kept: the
# model shim + its Dockerfile, and launch.json, whose Arm-FVP launch config is
# "manual" (see the comment in it). The leading negation overrides a global
# excludes file that ignores every .vscode directory.
# settings.json, cmsis.json and launch.json; only the macOS FVP wiring is kept:
# the model shim + its Dockerfile, and launch.json.mac, an Arm-FVP launch
# config that waits for the model in Docker (see the comment in it). The
# leading negation overrides a global excludes file that ignores every .vscode
# directory.
!.vscode/
.vscode/*
!.vscode/fvp.sh
!.vscode/fvp.Dockerfile
!.vscode/launch.json
!.vscode/launch.json.mac
6 changes: 3 additions & 3 deletions .vscode.d/tasks.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@
"label": "Create AI layer",
"detail": "Export model/model.py for the NPU in cmsis-executorch.cbuild-mlops.yml and write ai_layer/ (run a CMSIS build or 'cbuild setup' first)",
"type": "shell",
"command": "python3",
"command": "${workspaceFolder}/.venv/bin/python",
"args": ["create_ai_layer.py", "cmsis-executorch.cbuild-mlops.yml"],
"windows": {
"command": "python"
"command": "${workspaceFolder}\\.venv\\Scripts\\python.exe"
},
"options": {
"cwd": "${workspaceFolder}"
Expand Down Expand Up @@ -112,7 +112,7 @@
{
"id": "setupPythonVersion",
"type": "promptString",
"description": "Python version for uv (>=3.10,<3.15), e.g. 3.12 or 3.12.10",
"description": "Python version for uv (>=3.10,<3.14), e.g. 3.12 or 3.12.10",
"default": "3.12"
}
]
Expand Down
13 changes: 7 additions & 6 deletions .vscode/fvp.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
#!/usr/bin/env bash
# Stand-in for the FVP_Corstone_SSE-320 executable, referenced from the
# `debugger: model:` node of the SSE-320-U85 target-set. The CMSIS Solution
# extension runs it both as the "CMSIS Run" task and as the gdbtarget debug
# server, in the latter case with
# Stand-in for the FVP_Corstone_SSE-320 executable on macOS, where the
# `debugger: model:` node of the SSE-320-U85 target-set points at it (see the
# README). The CMSIS Solution extension runs it both as the "CMSIS Run" task
# and as the gdbtarget debug server (.vscode/launch.json.mac), in the latter
# case with
#
# -D --plugin $AVH_FVP_PLUGINS/GDBServer.so -C GDBServer.port=3333 \
# -f board/Corstone-320/fvp_config.txt --simlimit 60 -a <application>.hex
Expand All @@ -15,8 +16,8 @@
# * runs the model in Docker on macOS, where Arm publishes no FVP build, with
# the GDB port forwarded to the host so arm-none-eabi-gdb can reach it.
#
# On Linux it just execs the real model. On Windows, where the extension cannot
# run a bash script, point the csolution's `model:` at FVP_Corstone_SSE-320.exe.
# On Linux it just execs the real model. Windows and Linux need no shim: the
# csolution's `model:` names FVP_Corstone_SSE-320 directly.
set -euo pipefail

MODEL="${FVP_MODEL:-FVP_Corstone_SSE-320}"
Expand Down
4 changes: 4 additions & 0 deletions .vscode/launch.json → .vscode/launch.json.mac
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
"version": "0.2.0",
"configurations": [
{
// macOS only: copy this file to .vscode/launch.json after pointing
// the csolution's `debugger: model:` at .vscode/fvp.sh. On Windows
// and Linux the extension generates a working launch.json itself.
//
// Generated by the CMSIS Solution extension from its Arm-FVP adapter
// template, then switched to "manual" because two "target" fields
// differ from the generated ones and would be lost on regeneration:
Expand Down
26 changes: 14 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ itself is in [documentation/example.md](documentation/example.md).

1. Install [VS Code](https://code.visualstudio.com/).
2. Install the extensions **Keil Studio Pack** (`Arm.keil-studio-pack`, which
brings the CMSIS Solution extension 1.70.0 or newer that the project's
task drop-ins need) and **Python** (`ms-python.python`). Sign in with an
brings the CMSIS Solution extension 1.72.0 or newer with CMSIS-Toolbox
2.15) and **Python** (`ms-python.python`). Sign in with an
Arm account when Keil Studio asks; the free Keil MDK Community license is
enough.
3. Nothing else by hand: when you open the project, the Arm Tools Environment
Manager offers to install the tools pinned in `vcpkg-configuration.json`
(CMSIS-Toolbox, Arm Compiler 6, GCC, CMake, Ninja, and on Linux and
Windows the Corstone-320 FVP; macOS runs it in Docker, see step 8). Accept.
Windows the Corstone-320 FVP; macOS runs it in Docker, see step 6). Accept.
4. Optional: the **CMSIS Developer Assistant** extension lets an AI agent
(Claude Code or GitHub Copilot Chat) build, flash and debug the board
through an MCP server. Install it, install one of the agents, run
Expand Down Expand Up @@ -111,8 +111,8 @@ Repeat this after another project has reprogrammed the table.
Arch: v2.0.0
MACs/cc: 256
Cmd stream: v1
ExecuTorch Ethos-U85 example: 8896 byte model
Output: 10 element(s): 0.0079 0.0459 0.0475 -0.0475 0.0791 0.0411 -0.0285 -0.0744 -0.2246 -0.0016
ExecuTorch Ethos-U85 example: 8736 byte model
Output: 10 element(s): -0.0142 0.0206 0.0601 -0.0886 0.0791 0.0522 -0.0301 -0.0775 -0.2800 -0.0095
Test_result: PASS
```

Expand All @@ -122,10 +122,11 @@ Repeat this after another project has reprogrammed the table.
the output logits."

**FVP instead of the board:** choose the **SSE-320-U85** target-type and click
**Run** or **Debug**; the same output appears in the terminal. On macOS the
FVP runs in Docker (Docker Desktop must be running; the first run builds the
image, about 100 MB). On Windows set `model:` in the csolution's SSE-320-U85
target-set to `FVP_Corstone_SSE-320`.
**Run** or **Debug**; the same output appears in the terminal. On macOS,
where Arm ships no FVP build, the FVP runs in Docker: set `model:` in the
csolution's SSE-320-U85 target-set to `${workspaceFolder}/.vscode/fvp.sh`,
copy `.vscode/launch.json.mac` to `.vscode/launch.json`, and keep Docker
Desktop running (the first run builds the image, about 100 MB).

## 7. If something does not work

Expand All @@ -143,10 +144,11 @@ target-set to `FVP_Corstone_SSE-320`.
before the switch was moved. Set `UART4` and reopen the port.
- **`app-write-mram` gets no answer:** press reset while it waits, check SW4
is on `SEUART`, close any terminal holding the port.
- **"torch is not installed":** run the task **Setup Python virtual
- **"`.venv` does not exist":** run the task **Setup Python virtual
environment** first; it is only needed to regenerate the AI layer.
- After **Apply**, the extension adds a J-Link entry to `.vscode/launch.json`
next to the committed FVP entry. That is expected.
- `.vscode/launch.json` is generated by the extension for the target-types
and is not committed; after **Apply** it has a J-Link entry for the
DevKit-E8. That is expected.

## Read on

Expand Down
6 changes: 3 additions & 3 deletions RTE/_Debug_DevKit-E8/Pre_Include_Global.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* CSOLUTION generated file: DO NOT EDIT!
* Generated by: csolution version 2.14.1+p38-gf512b381
* Generated by: csolution version 2.15.1+p3-gf46d68bf
*
* Project: 'cmsis-executorch.Debug+DevKit-E8'
* Target: 'Debug+DevKit-E8'
Expand All @@ -12,10 +12,10 @@
/* ARM::Machine Learning:NPU Support:Ethos-U Driver&Generic U85@1.26.2 */
// enabling global pre includes
#define ETHOSU_ARCH u85
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define EXECUTORCH_BUILD_ARM_BAREMETAL 1
#define ET_USE_ETHOS_U_BACKEND 1
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
/* ExecuTorch global configuration */
#define C10_USING_CUSTOM_GENERATED_MACROS
#define FLATBUFFERS_MAX_ALIGNMENT 1024
Expand Down
14 changes: 7 additions & 7 deletions RTE/_Debug_DevKit-E8/RTE_Components.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* CSOLUTION generated file: DO NOT EDIT!
* Generated by: csolution version 2.14.1+p38-gf512b381
* Generated by: csolution version 2.15.1+p3-gf46d68bf
*
* Project: 'cmsis-executorch.Debug+DevKit-E8'
* Target: 'Debug+DevKit-E8'
Expand Down Expand Up @@ -30,17 +30,17 @@
#define RTE_Drivers_USART /* Driver UART */
/* AlifSemiconductor::Device:SOC Peripherals:PINCONF@2.2.0 */
#define RTE_Drivers_LL_PINCONF /* Driver PinPAD and PinMux */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_DEQUANTIZE /* ExecuTorch op_dequantize */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_QUANTIZE /* ExecuTorch op_quantize */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define RTE_ML_EXECUTORCH_BACKEND_ETHOS_U /* ExecuTorch Ethos-U Backend (Cortex-M host) */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_REGISTRATION /* ExecuTorch Kernel Registration */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_UTILS /* ExecuTorch Kernel Utils */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
#define RTE_ML_EXECUTORCH_RUNTIME /* ExecuTorch Runtime */


Expand Down
4 changes: 2 additions & 2 deletions RTE/_Debug_SSE-320-U85/Pre_Include_Global.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
/* ARM::Machine Learning:NPU Support:Ethos-U Driver&Generic U85@1.26.2 */
// enabling global pre includes
#define ETHOSU_ARCH u85
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define EXECUTORCH_BUILD_ARM_BAREMETAL 1
#define ET_USE_ETHOS_U_BACKEND 1
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
/* ExecuTorch global configuration */
#define C10_USING_CUSTOM_GENERATED_MACROS
#define FLATBUFFERS_MAX_ALIGNMENT 1024
Expand Down
12 changes: 6 additions & 6 deletions RTE/_Debug_SSE-320-U85/RTE_Components.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,17 @@
#define RTE_TIMEOUT 1
/* ARM::Machine Learning:NPU Support:Ethos-U Driver&Generic U85@1.26.2 */
#define RTE_ETHOS_U_CORE_DRIVER
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized dequantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_DEQUANTIZE /* ExecuTorch op_dequantize */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch Operators:Quantized quantize@1.5.1 */
#define RTE_ML_EXECUTORCH_OP_QUANTIZED_QUANTIZE /* ExecuTorch op_quantize */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Backend EthosU@1.5.1 */
#define RTE_ML_EXECUTORCH_BACKEND_ETHOS_U /* ExecuTorch Ethos-U Backend (Cortex-M host) */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Registration@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_REGISTRATION /* ExecuTorch Kernel Registration */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Kernel Utils@1.5.1 */
#define RTE_ML_EXECUTORCH_KERNEL_UTILS /* ExecuTorch Kernel Utils */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.4.1 */
/* PyTorch::Machine Learning:ExecuTorch:Runtime@1.5.1 */
#define RTE_ML_EXECUTORCH_RUNTIME /* ExecuTorch Runtime */


Expand Down
2 changes: 1 addition & 1 deletion ai_layer/ai_layer.clayer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ layer:
description: TinyCNN int8 image classifier for Ethos-U85

packs:
- pack: PyTorch::ExecuTorch@1.4.1
- pack: PyTorch::ExecuTorch@1.5.1

define:
- ET_LOG_ENABLED: 0
Expand Down
Loading
Loading