3. NPU与微控制器系统基础
Arm Ethos-U55/U85 并不是一颗独立运行的处理器,它必须挂载在一个微控制器(MCU)系统或应用处理器子系统中,由 CPU 负责调度、由总线负责搬运、由内存负责存放张量、由中断与 DMA 负责完成异步协作。理解 NPU 的编程模型,前提是先理解它所处的“宿主系统”。本节从 MCU 架构出发,串联总线接口、内存层次、中断与 DMA 四条主线,为后续 Ethos-U 的寄存器配置、命令流下发与算子调度打下系统级基础。
一、MCU 架构:NPU 的宿主环境
典型 Cortex-M 系列 MCU 采用哈佛架构的变体:指令总线(I-Bus)与数据总线(D-Bus)分离,配合系统总线(System Bus)访问外设。核心部件包括内核(Cortex-M55/M85 等)、嵌套向量中断控制器(NVIC)、系统控制块(SCB)、总线矩阵与各类外设。当 Ethos-U 作为协处理器接入时,它通常通过 AXI 或 AHB 主接口访问系统内存,通过 APB 从接口接收 CPU 的寄存器配置。
关键点在于:NPU 是总线上的主设备(Master),而不是外设寄存器堆。它能主动发起对 SRAM、Flash、DTCM 的读写,因此 CPU 只需“下命令”,不必逐字节搬运数据。这正是 NPU 能效远高于纯 CPU 推理的根本原因。
1. 紧耦合协处理器:与 Cortex-M 共享 TCM,延迟最低;
2. 总线主设备:通过 AXI 访问共享 SRAM/DDR,适合较大模型;
3. 独立子系统:配合专用 SRAM 与 DMA,形成 NPU 加速域。
二、总线接口:数据如何流动
MCU 内部总线通常分为三层:高性能 AXI/AHB 用于 CPU、NPU、DMA 等主设备;APB 用于低速外设寄存器;专用 TCM 总线用于零等待访问。Ethos-U 的编程接口分为两类:控制路径(APB/AHB 从接口,读写寄存器、命令流基址、中断状态)与数据路径(AXI 主接口,读取权重、特征图,写回输出张量)。
总线仲裁决定了 NPU 与 CPU、DMA 争抢带宽时的优先级。若 NPU 长时间占用 AXI,CPU 取指会被阻塞,表现为系统“卡顿”。因此实际工程中常通过 QoS 配置、总线矩阵分层或独立 SRAM 分区来隔离流量。
典型地址映射(示例):
0x0000_0000 - 0x000F_FFFF Flash / 代码区
0x2000_0000 - 0x2003_FFFF SRAM(共享,NPU 数据区)
0x2004_0000 - 0x2004_FFFF Ethos-U 寄存器(APB 从接口)
0x2005_0000 - 0x2005_FFFF NPU 专用 SRAM / 命令流缓冲
0xE000_0000 - 0xE00F_FFFF Cortex-M 系统控制空间(NVIC/SCB)
三、内存层次:张量放在哪里
MCU 的内存层次通常为:寄存器 → TCM(DTCM/ITCM)→ SRAM → Flash/外部存储。Ethos-U 对内存的访问延迟极其敏感,因为卷积与矩阵乘需要反复读取权重和特征图。若权重放在 Flash 且未开启缓存,NPU 的 MAC 利用率会大幅下降。
因此,模型部署时通常将权重常驻 SRAM 或专用 NPU SRAM,特征图放在可被 AXI 高速访问的区域,命令流放在连续、对齐的缓冲区中。Ethos-U 要求命令流与部分数据结构满足对齐要求(如 16 字节对齐),否则会触发总线错误或性能下降。
| 存储层级 | 典型容量 | 访问延迟 | NPU 使用建议 |
|---|---|---|---|
| DTCM/ITCM | 64–512 KB | 1 周期 | 小模型权重、激活缓冲 |
| 片上 SRAM | 256 KB–4 MB | 数周期 | 主权重区、特征图 |
| Flash / XIP | MB 级 | 数十周期 | 仅存放只读模型,需预取 |
| 外部 DDR | GB 级 | 百周期 | 大模型,需 DMA 预取 |
四、中断与 DMA:异步协作机制
Ethos-U 完成一次推理后,会通过中断线通知 CPU。CPU 在 NVIC 中使能对应 IRQ,并在中断服务程序(ISR)中读取状态寄存器、清除中断标志、取出输出结果或启动下一段命令流。中断路径必须尽量短,避免在 ISR 中做大量数据搬运。
DMA 则承担“搬运工”角色:在 NPU 计算的同时,DMA 可以把下一层权重从 Flash 预取到 SRAM,或把上一层输出搬到 NPU 输入缓冲。这样 NPU 与 DMA 形成流水线,隐藏访存延迟。典型协作顺序为:CPU 配置 DMA → DMA 搬入权重 → CPU 触发 NPU → NPU 计算 → NPU 中断 → CPU 处理结果。
• 中断负责“事件通知”,不负责“大数据搬运”;
• DMA 负责“块数据搬运”,不负责“逻辑判断”;
• NPU 负责“张量计算”,不负责“控制流”。
五、案例场景:一次 NPU 推理的系统级时序
假设在 Cortex-M55 + Ethos-U55 系统上运行一个关键词识别模型。CPU 首先初始化 NPU 寄存器,将命令流写入 SRAM,配置 DMA 把音频特征搬入输入缓冲;随后写 NPU 启动寄存器。NPU 通过 AXI 读取权重与特征图,完成卷积与全连接,写回输出张量,并拉高中断线。CPU 进入 ISR,读取输出并清除中断。整个过程 CPU 占用率极低,大部分时间处于休眠或处理其他任务。
六、常见误区与复盘
- 误区一:把 NPU 当普通外设。NPU 是总线主设备,能主动访问内存,配置时需关注地址映射与对齐,而非仅写寄存器。
- 误区二:忽略总线带宽争抢。NPU 与 CPU、DMA 共享 AXI 时,若未做 QoS 或分区,CPU 实时性会下降。
- 误区三:在 ISR 中搬运大块数据。ISR 应只做状态读取与标志清除,数据搬运交给 DMA 或主循环。
- 误区四:权重放在 Flash 直接运行。未预取或未缓存时,NPU 会因访存瓶颈而利用率骤降。