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推理性能。

Cortex-M55/M85 与 Ethos-U55/U65 协同架构 Cortex-M55/M85 域 CPU 核心 Helium MVE + FPU L1 缓存 I-Cache / D-Cache 私有外设 NVIC中断控制器 | ITM跟踪 DWT调试 | BPU断点 Ethos-U55/U65 域 NPU 核心 MAC阵列 + 激活 命令队列 DMA引擎 内部SRAM 权重缓冲 | 激活缓冲 | 输出缓冲 双缓冲机制支持流水线 系统存储层次 SRAM (TCM/紧耦合) AXI SRAM (共享) Flash (代码/常量) 外部存储器 (可选) 总线互连 AHB5 (CPU私有总线) AXI (NPU主总线) APB (外设总线) 命令/权重/输入数据 输出特征图/状态

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和系统允许的功耗预算来平衡。

架构协同的关键点:CPU与NPU通过共享内存实现数据交换,而非依赖寄存器传递。NPU通过命令队列(Command Queue)接收CPU下发的推理任务描述符,包括输入/输出张量的内存地址、权重地址、层参数等。这种设计使得CPU在提交任务后可以立即进入低功耗模式或处理其他事务,NPU完成后通过中断通知CPU。

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效率。

工程经验:在Keil MDK或IAR中开发时,可以通过分散加载文件(Scatter File)精确控制变量和缓冲区的物理位置。例如,将输入图像缓冲区放置在AXI SRAM的固定地址,并确保该地址32字节对齐,以满足NPU的DMA对齐要求。未对齐的地址会导致NPU内部进行额外的拷贝操作,降低推理速度。

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加载权重,每次加载期间计算单元空闲。

优化操作:

  1. 将输入图像缓冲区移至AXI SRAM,利用DMA从摄像头接口直接搬运数据,避免CPU介入拷贝。
  2. 将模型权重拆分为两部分:前3层权重(约180KB)常驻NPU内部SRAM,剩余权重按需加载。通过Vela编译器的--arena-cache-size参数调整SRAM分配策略。
  3. 启用NPU的weight streaming模式,使权重加载与计算重叠。
  4. 将CPU的优先级设置为低于NPU中断,减少调度延迟。

结果对比:优化后单帧推理耗时降至42ms,NPU利用率提升至82%,CPU占用率降至25%。功耗从85mW降至62mW(FPGA测量值)。

复盘经验:NPU性能瓶颈往往不在MAC阵列本身,而在于数据供给链路。内存布局、DMA配置和权重驻留策略是调优的三大杠杆。建议在项目初期就使用Vela编译器的--report选项生成内存使用报告,提前规划存储分配。

常见误区:不要将所有数据都放入TCM。TCM虽然访问快,但容量小且不能被NPU直接访问。将大块张量放入TCM会导致CPU与NPU之间的数据拷贝开销,反而降低整体性能。正确做法是:TCM仅存放CPU实时控制代码和关键栈,大块数据流通过AXI SRAM共享。

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应用。