3、ARM MCU与NPU架构概览:Cortex-M系列与Ethos-U55/U65的协同架构、存储层次、总线连接
在嵌入式AI应用开发中,理解MCU与NPU的协同工作方式是部署高效推理系统的前提。ARM的Cortex-M系列处理器与Ethos-U系列NPU并非简单的“主从”关系,而是通过精心设计的系统总线、存储层次和中断机制构成一个异构计算平台。本章将深入剖析Cortex-M55/M85与Ethos-U55/U65的架构耦合方式,重点讲解存储层次中的数据流路径、AHB/AXI总线连接策略,以及在实际工程中如何利用这些硬件特性优化AI推理性能。
3.1 核心原理:异构计算架构的分工与耦合
Ethos-U系列NPU的设计哲学是“协处理器加速”,而非独立计算单元。Cortex-M55/M85作为主处理器,负责运行RTOS、应用逻辑、神经网络模型的解析与调度;Ethos-U55/U65则专注于卷积神经网络(CNN)中的矩阵乘加运算、激活函数和池化等计算密集型操作。这种分工的核心在于:CPU擅长控制流和标量运算,而NPU擅长数据流和向量运算。
在指令集层面,Cortex-M55/M85引入了Armv8.1-M主线的Helium MVE(M-Profile Vector Extension)向量扩展,支持128位向量运算。当NPU处理大块卷积时,CPU可以同时利用Helium处理预处理任务(如图像归一化、数据格式转换)或后处理任务(如非极大值抑制)。这种并行机制要求开发者理解两个计算单元之间的依赖关系,避免不必要的同步等待。
Ethos-U55与U65的关键区别在于MAC阵列规模:U55提供32至256个MAC(乘加单元)配置,而U65支持最高512个MAC,且U65增加了对多NPU级联的支持。这意味着U65在相同频率下可提供约2倍于U55的峰值算力,但同时也对存储带宽提出了更高要求。实际选型时,需要根据目标模型的FLOPs和系统允许的功耗预算来平衡。
3.2 存储层次与数据路径设计
存储层次是影响NPU推理性能的首要因素。Ethos-U系列采用三级存储架构:NPU内部SRAM、系统级SRAM和外部存储器。NPU内部SRAM分为权重缓冲(Weight Buffer)、激活缓冲(Activation Buffer)和输出缓冲(Output Buffer),这些缓冲通过双缓冲机制实现数据预取与计算的重叠。
系统级SRAM通常通过AXI总线连接,是CPU与NPU共享的主存储区域。在实际工程中,推荐将输入特征图、中间激活值和输出特征图放置在系统SRAM中,而将模型权重放置在Flash或外部存储器中。NPU的DMA引擎可以在推理过程中按需从Flash加载权重到内部权重缓冲,但Flash的读取速度通常远低于SRAM,因此需要合理规划权重在Flash中的布局,避免频繁的随机访问。
对于Cortex-M55/M85而言,其内部TCM(Tightly Coupled Memory)具有零等待周期访问特性,适合存放实时性要求高的代码和关键数据。但TCM容量有限(通常128KB-512KB),且不能被NPU直接访问。因此,CPU与NPU之间的数据交换必须通过系统SRAM中转,这要求开发者在内存规划时预留足够的共享缓冲区。
| 存储层级 | 访问主体 | 典型容量 | 访问延迟 | 推荐用途 |
|---|---|---|---|---|
| CPU TCM | Cortex-M55/M85 | 128-512 KB | 0周期(紧耦合) | 实时控制代码、关键栈数据 |
| NPU内部SRAM | Ethos-U55/U65 | U55: 384KB-1MB U65: 1-2MB |
1-2周期 | 权重缓冲、激活缓冲、输出缓冲 |
| 系统AXI SRAM | CPU + NPU + DMA | 1-8 MB | 2-5周期 | 共享输入/输出张量、中间特征图 |
| Flash | CPU (XIP) / NPU (DMA) | 1-16 MB | 数十周期 | 模型权重、常量表、启动代码 |
| 外部存储器 | CPU / NPU (可选) | 16-256 MB | 数十至数百周期 | 大模型离线推理、日志存储 |
3.3 总线连接与系统互连策略
Ethos-U55/U65通过AXI主接口连接到系统总线矩阵,而Cortex-M55/M85则通过AHB5和AXI接口实现多主多从互连。典型的连接拓扑为:CPU的AXI主接口和NPU的AXI主接口均连接到AXI互连矩阵,该矩阵再分发到SRAM控制器、Flash控制器和外部存储器控制器。APB总线则用于配置NPU的控制寄存器、状态寄存器和中断控制。
在总线带宽规划中,需要重点考虑NPU的DMA传输带宽需求。以Ethos-U55 @ 400MHz、256 MAC配置为例,其峰值计算能力为0.2 TOPS。若每个MAC每次运算需要读取2字节权重和2字节激活数据,则理论带宽需求约为0.8 GB/s。实际系统SRAM通常支持32位或64位AXI接口,在400MHz下可提供1.6-3.2 GB/s带宽,因此单NPU场景下带宽充足。但若使用U65双核级联,则需确保AXI互连矩阵支持足够的并发带宽。
总线仲裁策略也值得关注。当CPU和NPU同时访问系统SRAM时,AXI互连矩阵采用基于优先级的仲裁机制。建议将NPU的AXI端口优先级设置为高于CPU,因为NPU的DMA传输通常是流式且对延迟敏感,而CPU访问SRAM时可以通过缓存命中率优化来容忍一定延迟。此外,合理使用AXI的Outstanding传输能力(允许未完成事务的数量)可以显著提升DMA效率。
3.4 案例拆解:基于Cortex-M55+Ethos-U55的人脸检测部署
以一个实际的人脸检测项目为例,目标平台为Arm Corstone-300 FPGA验证平台(集成Cortex-M55和Ethos-U55)。模型为MobileNet-SSD,输入尺寸96x96x3,权重约2.1MB,INT8量化后约530KB。
初始现象:在裸机环境下运行Vela编译器转换后的模型,单帧推理耗时约85ms,但CPU占用率高达70%,且NPU利用率仅45%。通过ARM Streamline性能分析器采集数据发现,CPU大部分时间在等待NPU中断,且存在频繁的缓冲区同步操作。
分析过程:检查内存布局发现,输入图像缓冲区位于外部存储器(通过SPI接口连接),每次推理前CPU需要从外部存储器拷贝图像到AXI SRAM,耗时约12ms。同时,NPU的权重缓冲仅256KB,而模型权重530KB,导致NPU需要分3次从Flash加载权重,每次加载期间计算单元空闲。
优化操作:
- 将输入图像缓冲区移至AXI SRAM,利用DMA从摄像头接口直接搬运数据,避免CPU介入拷贝。
- 将模型权重拆分为两部分:前3层权重(约180KB)常驻NPU内部SRAM,剩余权重按需加载。通过Vela编译器的
--arena-cache-size参数调整SRAM分配策略。 - 启用NPU的
weight streaming模式,使权重加载与计算重叠。 - 将CPU的优先级设置为低于NPU中断,减少调度延迟。
结果对比:优化后单帧推理耗时降至42ms,NPU利用率提升至82%,CPU占用率降至25%。功耗从85mW降至62mW(FPGA测量值)。
复盘经验:NPU性能瓶颈往往不在MAC阵列本身,而在于数据供给链路。内存布局、DMA配置和权重驻留策略是调优的三大杠杆。建议在项目初期就使用Vela编译器的--report选项生成内存使用报告,提前规划存储分配。
3.5 常见误区与设计复盘
在ARM MCU+NPU架构设计中,开发者常陷入以下误区:
- 误区一:认为NPU可以完全替代CPU。实际上,NPU只擅长卷积和全连接层,对于动态形状操作(如Reshape、Split)、控制流(如循环、条件分支)仍需CPU处理。合理的任务划分是:粗粒度计算(卷积)交给NPU,细粒度逻辑(后处理、调度)留给CPU。
- 误区二:忽略缓存一致性问题。Cortex-M55/M85的D-Cache与NPU的DMA访问之间不存在硬件一致性协议。当CPU写入数据后,需要执行
SCB_CleanDCache_by_Addr()将数据回写到SRAM,NPU才能看到最新数据;NPU输出后,CPU需要执行SCB_InvalidateDCache_by_Addr()使缓存失效。忘记这些操作会导致推理结果错误。 - 误区三:盲目追求高MAC配置。U65的512 MAC配置虽然算力翻倍,但功耗和面积也显著增加。对于电池供电的MCU设备,U55的256 MAC配置往往能效比更高。建议根据目标模型的FLOPs和帧率要求,选择“够用”而非“最强”的NPU配置。
总结而言,Cortex-M与Ethos-U的协同架构设计需要从系统视角出发,综合考虑计算分工、存储层次、总线带宽和缓存一致性。掌握这些底层原理,才能在Vela编译器、CMSIS-NN和RTOS之上构建出高性能、低功耗的端侧AI应用。