2. STM32N6硬件架构与AI加速资源
STM32N6是ST首款集成自研神经网络加速器(NPU)的通用MCU,其定位不是“更快的M7”,而是把边缘AI推理从“CPU硬扛”转变为“专用单元承担”。理解它的硬件架构,核心是回答三个问题:算力由谁提供、数据在哪些存储层级之间流动、外设如何把真实世界的数据送进推理链路。这三者共同决定了模型能不能跑、跑多快、功耗多少,以及选型时该看哪些参数。
一、三核异构:M55、NPU与M4的职责边界
STM32N6内部包含三个处理单元:Cortex-M55、Neural-ART NPU和Cortex-M4。它们不是简单的“主核+协处理器”,而是按任务性质分工。
Cortex-M55是主应用核,运行最高800MHz,带Helium(M-Profile Vector Extension)向量扩展和Armv8.1-M的DSP指令。Helium对int8/int16的SIMD操作有直接支持,适合处理推理前后的信号预处理(滤波、FFT、归一化)以及轻量模型。它同时负责系统启动、外设管理、通信协议栈和任务调度。
Neural-ART NPU是AI加速核心,提供约600 GOPS的int8算力。它支持卷积、深度可分离卷积、全连接、池化、激活等常见算子,并支持int8与int4量化权重。NPU通过专用总线访问AXI SRAM和外部存储,不占用M55的指令周期。关键点在于:NPU是“算子级加速器”,不是通用处理器,模型必须经过ST Edge AI Core工具链编译成NPU可执行的二进制序列。
Cortex-M4通常作为低功耗协处理器或实时控制核,可独立运行传感器采集、电机控制等实时任务,让M55和NPU专注于AI负载。在典型部署中,M4负责“永远在线”的低速感知,M55+NPU负责“事件触发”的高算力推理。
二、内存层次:决定推理吞吐的隐形瓶颈
NPU算力再高,如果数据供不上,实际帧率仍会被内存带宽限制。STM32N6的内存层次需要按“谁访问、访问什么、带宽多少”来理解。
最靠近NPU的是AXI SRAM,总容量4.2MB,分为多个bank,NPU和M55均可高速访问。推理时,输入张量、权重和中间激活值应尽量放在AXI SRAM中,避免频繁访问外部存储。权重若超出片上容量,可存放在外部Octo-SPI Flash或HyperRAM中,但NPU访问外部存储的延迟显著高于片上SRAM,会直接拉低有效算力。
Cache与TCM方面,M55带有指令Cache、数据Cache和TCM。对于M55上运行的预处理代码,将热点函数放入TCM可减少取指抖动;对于NPU,则更依赖DMA和SRAM bank的合理分配,而不是Cache。
外部存储接口包括Octo-SPI(支持Xccela/HyperFlash/HyperRAM)和FMC。HyperRAM适合作为大模型的权重仓库,但带宽通常在几百MB/s量级,与AXI SRAM的GB/s级带宽差距明显。一个实用的经验是:把每层权重控制在片上可容纳的范围内,或采用分块加载策略,让NPU在计算当前块时预取下一块。
典型内存分配示例(假设模型int8量化):
AXI SRAM bank1: 输入张量 + 输出张量 (约 512KB)
AXI SRAM bank2: 当前层权重 + 中间激活 (约 1.5MB)
HyperRAM: 剩余权重 + 模型参数 (约 2MB)
TCM: M55预处理代码 + 小缓冲区 (约 128KB)
这个分配不是固定模板,而是说明一个原则:带宽敏感的数据放片上,容量敏感的数据放片外,实时性敏感的代码放TCM。
三、外设接口:从传感器到推理的完整信号链
边缘AI的输入往往来自摄像头、麦克风、IMU或雷达。STM32N6的外设接口决定了数据能否低延迟、低CPU占用地进入内存。
DCMI/CSI用于摄像头接口,支持并行和MIPI CSI-2。图像数据可通过DMA直接写入AXI SRAM,M55只需配置DMA描述符,无需逐像素搬运。对于640×480灰度图,一帧约300KB,DMA搬运时间远小于CPU轮询。
I2S/SAI/PDM用于音频输入。PDM麦克风通过DFSDM或SAI接口转换为PCM,再送入M55做MFCC或直接送入NPU做音频分类。关键参数是采样率和帧长:16kHz、20ms帧长对应320个采样点,适合关键词唤醒类模型。
SPI/I2C/UART用于连接IMU、温度、压力等低速传感器。这类数据量小,通常由M4或M55的DMA通道采集,再拼装成特征向量。
以太网/USB/SPI从机用于模型更新和结果上报。部署时需要考虑:模型文件通过什么接口写入外部Flash,推理结果通过什么协议上传,以及是否需要在运行时切换模型。
四、选型依据:从模型反推硬件配置
面对具体项目,选型不应从“STM32N6有什么”出发,而应从“模型需要什么”反推。以下是一组可操作的判断维度。
| 判断维度 | 关键问题 | 对STM32N6的对应资源 |
|---|---|---|
| 算力需求 | 模型单次推理的MACs是多少?目标帧率多少? | NPU约600 GOPS int8;M55 Helium约数十GOPS |
| 模型容量 | int8量化后权重+激活值多大? | AXI SRAM 4.2MB;超出部分需HyperRAM/Flash |
| 输入带宽 | 摄像头分辨率、帧率、音频采样率 | DCMI/CSI + DMA;SAI/DFSDM |
| 实时性 | 端到端延迟要求?是否有硬实时控制? | M4独立实时核;M55中断响应 |
| 功耗预算 | 是否电池供电?是否有常开感知需求? | 多功耗模式;M4低功耗运行 |
| 工具链兼容 | 模型框架是否被ST Edge AI Core支持? | TensorFlow Lite / ONNX / Keras转换 |
一个常见的误区是只看NPU的GOPS数字。实际上,如果模型权重超过4.2MB且必须频繁从HyperRAM读取,有效算力可能下降30%~50%。因此,模型量化后的体积与片上SRAM的匹配度,往往比峰值算力更能决定实际帧率。
五、部署前的资源核对清单
在正式移植模型前,建议按以下顺序核对资源,避免后期返工:
- 量化模型体积:用工具链导出int8模型,记录权重、激活值、输入输出张量的字节数。
- 核对SRAM分配:确认权重+激活值是否能放入AXI SRAM;若不能,规划HyperRAM分区和预取策略。
- 确认外设通道:摄像头/麦克风使用的DMA通道是否与其它外设冲突;DMA描述符数量是否足够双缓冲。
- 评估CPU负载:预处理和后处理在M55上的执行时间,是否与NPU推理时间重叠;M4是否承担了足够的实时任务。
- 验证工具链输出:用ST Edge AI Core生成NPU二进制,检查算子覆盖率报告,确认回退到M55的层是否可接受。
完成这五步后,再进入具体的工程配置和代码实现,才能把“硬件资源”真正转化为“可交付的推理性能”。