Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Board firmware and peer setups

Hardware bring-up trees for on-device netkit builds and peer A/B benches. Software targets without a board tree yet use the library API + docs/PLATFORMS.md and host smoke (make test-embedded-smoke-matrix).

Espressif note: C3 / C6 / P4 are RISC-V silicon but always use mcu_esp + ESP-NN (same as S3). mcu_risc is only for non-Espressif RISC-V + NMSIS-NN. Several Espressif boards can coexist — each boards/… tree pins its own NETKIT_ARCH. Details: PLATFORMS.md — Target ≠ CPU ISA.

Hardware Class netkit target Status
STM32 NUCLEO-F446RE Arm MCU mcu_arm + NETKIT_ARCH=CM4 Peer-benched (CMSIS-NN / reference vs TFLM / microTVM)
Seeed XIAO ESP32C3 Espressif MCU (RISC-V → still mcu_esp) mcu_esp + NETKIT_ARCH=ESP32C3 Peer-benched int8 CNN / DS-CNN vs TFLM (ESP-NN); MLP firmware too
Seeed XIAO ESP32-S3 Espressif MCU (Xtensa) mcu_esp + NETKIT_ARCH=ESP32S3 Peer-benched int8 + float32 CNN / DS-CNN vs TFLM (ESP-NN S3 asm)
ESP32-P4-Function-EV Espressif MCU (RISC-V → still mcu_esp) mcu_esp + NETKIT_ARCH=ESP32P4 Peer-benched int8 + float32 CNN / DS-CNN vs TFLM
Raspberry Pi Zero 2 W Arm MPU mpu_arm Peer-benched (XNNPACK ON/OFF vs TF Lite)
Other Espressif ESP32* MCU mcu_esp + matching NETKIT_ARCH Runtime + host smoke; add a boards/… tree per board — PLATFORMS.md
RISC-V MCU (Nuclei / RV32) MCU mcu_risc Runtime + host smoke; no boards/ tree yetPLATFORMS.md

Canonical latency tables: ../README.md, docs/STATUS.md. Open issues: docs/KNOWN_ISSUES.md.


STM32 NUCLEO-F446RE

Chip: STM32F446RET6 · Cortex-M4F · 180 MHz · 512 KiB flash / 128 KiB SRAM
Toolchain / flash: each board README covers make, OpenOCD / ST-Link, UART capture.

netkit firmware (production peers)

Board directory Model / dtype Setup & build
nucleo-f446re/ MNIST MLP float32 CMSIS-NN / reference, lowered AOT
nucleo-f446re-mlp-int8/ MNIST MLP int8 CMSIS-NN, interpreter embed
nucleo-f446re-cnn-int8/ MNIST CNN int8 CMSIS-NN / reference; lowered or NETKIT_EMBED=1
nucleo-f446re-cnn-dw-int8/ MNIST DS-CNN int8 Same pattern as CNN int8

Typical flow (see the board README for flags):

cd boards/nucleo-f446re-cnn-int8
make            # or: make deploy-lowered / NETKIT_EMBED=1
make flash      # ST-Link
# UART capture — details in that README

Repo-root helper for CNN int8: make flash-mnist-cnn-int8.

Peer baselines (same board / vectors)

Board directory Stack
nucleo-f446re-tflm/ TFLM MNIST MLP f32
nucleo-f446re-tflm-mlp-int8/ TFLM MNIST MLP int8
nucleo-f446re-tflm-cnn-int8/ TFLM MNIST CNN int8
nucleo-f446re-tflm-cnn-dw-int8/ TFLM MNIST DS-CNN int8
nucleo-f446re-tvm-cnn-int8/ microTVM AOT CNN int8
nucleo-f446re-tvm-cnn-dw-int8/ microTVM AOT DS-CNN int8

Logs: benchmark/mcu_ab_logs/.

Float32 MNIST CNN / DS-CNN exceed 512 KiB flash on this part — on-device digit peers for those models are int8 only (STATUS.md).


Seeed Studio XIAO ESP32C3

Chip: ESP32-C3 · RISC-V · 160 MHz · ~400 KB SRAM / 4 MB flash
netkit: NETKIT_TARGET=mcu_esp + NETKIT_ARCH=ESP32C3 + ESP-NN (not NMSIS-NN)
Toolchain / flash: PlatformIO ESP-IDF · onboard USB Serial/JTAG
Index: xiao-esp32c3/README.md

Board directory Runtime Model
xiao-esp32c3-mlp-int8/ netkit MNIST MLP int8
xiao-esp32c3-cnn-int8/ netkit MNIST CNN int8
xiao-esp32c3-cnn-dw-int8/ netkit MNIST DS-CNN int8
xiao-esp32c3-tflm-cnn-int8/ TFLM MNIST CNN int8
xiao-esp32c3-tflm-cnn-dw-int8/ TFLM MNIST DS-CNN int8

Methodology: 10×10, discard first invoke; order swaps nk→tflm / tflm→nk; netkit = interpreter embed.
Results: ESP-NN · reference · STATUS.
Runners: run_esp_int8_ab.sh / run_esp_int8_ref_ab.sh.

ImageNet / MobileNetV4: not on this part (weights exceed 1 MiB app partition). Int8 only (no FPU — float32 peer firmwares not used).

PORT=/dev/cu.usbmodem* ./boards/xiao-esp32c3/scripts/run_esp_int8_ab.sh
PORT=/dev/cu.usbmodem* ./boards/xiao-esp32c3/scripts/run_esp_int8_ref_ab.sh

ESP32-P4-Function-EV

Chip: ESP32-P4 · RISC-V · 360 MHz · FPU · companion ESP32-C6 on kit is WiFi-only
netkit: NETKIT_TARGET=mcu_esp + NETKIT_ARCH=ESP32P4 + ESP-NN (portable; PIE asm off under PIO gas)
Toolchain / flash: PlatformIO ESP-IDF · USB-UART (CH34x)
Index: esp32-p4-function-ev/README.md

Board directory Runtime Model
esp32-p4-function-ev-cnn-int8/ netkit MNIST CNN int8 (embed)
esp32-p4-function-ev-cnn-dw-int8/ netkit MNIST DS-CNN int8 (embed)
esp32-p4-function-ev-tflm-cnn-int8/ TFLM MNIST CNN int8
esp32-p4-function-ev-tflm-cnn-dw-int8/ TFLM MNIST DS-CNN int8
esp32-p4-function-ev-cnn/ netkit MNIST CNN float32 (lowered AOT)
esp32-p4-function-ev-cnn-dw/ netkit MNIST DS-CNN float32 (lowered AOT)
esp32-p4-function-ev-tflm-cnn/ TFLM MNIST CNN float32
esp32-p4-function-ev-tflm-cnn-dw/ TFLM MNIST DS-CNN float32

Methodology: 10×10, discard first invoke; order swaps. Results: all rounds · STATUS · float embed bug (P4 and S3): KNOWN_ISSUES KI-001.

PORT=/dev/cu.usbmodem* ./boards/esp32-p4-function-ev/scripts/run_esp_int8_ab.sh
PORT=/dev/cu.usbmodem* ./boards/esp32-p4-function-ev/scripts/run_esp_int8_ref_ab.sh
PORT=/dev/cu.usbmodem* ./boards/esp32-p4-function-ev/scripts/run_esp_float32_ab.sh

Seeed Studio XIAO ESP32S3

Chip: ESP32-S3 · Xtensa · 240 MHz · FPU · bring-up unit: 16 MB PSRAM / 32 MB OPI flash
netkit: NETKIT_TARGET=mcu_esp + NETKIT_ARCH=ESP32S3 + ESP-NN S3 asm
Toolchain / flash: PlatformIO ESP-IDF · USB Serial/JTAG — prefer OpenOCD (board/esp32s3-builtin.cfg)
Index: xiao-esp32s3/README.md

Board directory Runtime Model
xiao-esp32s3-cnn-int8/ netkit MNIST CNN int8 (embed)
xiao-esp32s3-cnn-dw-int8/ netkit MNIST DS-CNN int8 (embed)
xiao-esp32s3-tflm-cnn-int8/ TFLM MNIST CNN int8
xiao-esp32s3-tflm-cnn-dw-int8/ TFLM MNIST DS-CNN int8
xiao-esp32s3-cnn/ netkit MNIST CNN float32 (lowered AOT)
xiao-esp32s3-cnn-dw/ netkit MNIST DS-CNN float32 (lowered AOT)
xiao-esp32s3-tflm-cnn/ TFLM MNIST CNN float32
xiao-esp32s3-tflm-cnn-dw/ TFLM MNIST DS-CNN float32

Methodology: 10×10, discard first invoke. Results: all rounds · STATUS · float embed bug (S3 and P4): KNOWN_ISSUES KI-001.


Seeed Studio XIAO ESP32C6

Chip: ESP32-C6 · RISC-V · 160 MHz · no FPU (int8 peers only)
netkit: NETKIT_TARGET=mcu_esp + NETKIT_ARCH=ESP32C6 + ESP-NN
Status: Peer A/B not published yet. Same pattern as C3 when brought up. Published Espressif numbers: C3 / S3 / P4 above.


Raspberry Pi Zero 2 W

ISA: linux/aarch64 (Cortex-A53) · netkit: NETKIT_TARGET=mpu_arm + XNNPACK

No bare-metal firmware tree — cross-build on the host (Docker linux/arm64), deploy over SSH.

Setup / rebuild / run A/B: pi-zero-2w/README.md

Covers prerequisites, tools/build_mpu_pi_aarch64.sh, SSH helpers, and float32 + int8 suites vs TF Lite (XNNPACK ON/OFF).


Targets without a board tree yet

Target How to build / integrate
mcu_esp (ESP-NN) Board: xiao-esp32c3-mlp-int8 · PLATFORMS.md — Espressif · make esp-nn-init
mcu_risc (NMSIS-NN) PLATFORMS.md — RISC-V MCU · make nmsis-init · link into your RISC-V BSP
mpu_risc PLATFORMS.md — RISC-V MPU · XNNPACK like other MPUs
Host cpu Getting Started

Host lean-runtime smoke for MCU/MPU profiles (including CMSIS / ESP-NN / NMSIS-NN):

make cmsis-init esp-nn-init nmsis-init
make test-embedded-smoke-matrix

Related