STM32N6--NPU简单介绍

关键词:STM32N6、生物神经元、神经网络处理单元(NPU)、数据流处理

参考链接:

  1. RM0486 Reference manual STM32N647/657xx Arm®-based 32-bit MCUs
  2. ST_中文论坛【资料合集】STM32N6超全资料合集(定期更新)
  3. B站_卷积神经网络(CNN)到底卷了啥?8分钟带你快速了解!

文章目录

  • 前言
  • 名词解释
  • 一、从神经网络到数据流处理
    • [1.0 从神经元到神经网络](#1.0 从神经元到神经网络)
    • [1.1 卷积神经网络(CNN)](#1.1 卷积神经网络(CNN))
    • [1.2 ST流处理技术](#1.2 ST流处理技术)
  • 二、NPU功能描述
    • [2.0 NPU内部结构图](#2.0 NPU内部结构图)
    • [2.1 时钟/复位管理器](#2.1 时钟/复位管理器)
    • [2.2 流链路(Stream link)](#2.2 流链路(Stream link))
    • [2.3 流交换机(Stream switch)](#2.3 流交换机(Stream switch))
    • [2.4 流引擎(Stream engines)](#2.4 流引擎(Stream engines))
    • [2.5 加密 / 解密单元(Encryption/Decryption unit)](#2.5 加密 / 解密单元(Encryption/Decryption unit))
    • [2.6 解压缩单元(Decompression unit)](#2.6 解压缩单元(Decompression unit))
    • [2.7 卷积加速器(Convolutional accelerator,CA)](#2.7 卷积加速器(Convolutional accelerator,CA))
    • [2.8 池化单元 (Pooling unit)](#2.8 池化单元 (Pooling unit))
    • [2.9 激活单元 (Activation unit)](#2.9 激活单元 (Activation unit))
    • [2.10 算术运算单元 (Arithmetic unit)](#2.10 算术运算单元 (Arithmetic unit))
    • [2.11 可重构缓冲区(Reconfigurable buffer)](#2.11 可重构缓冲区(Reconfigurable buffer))
    • [2.12 执行周期控制器 (Epoch controller)](#2.12 执行周期控制器 (Epoch controller))
    • [2.13 中断控制器(Interrupt controller)](#2.13 中断控制器(Interrupt controller))
  • 三、NPU流处理示例
    • [3.1 直接内存访问(DMA)传输](#3.1 直接内存访问(DMA)传输)
    • [3.2 简单处理](#3.2 简单处理)
    • [3.3 多重处理架构](#3.3 多重处理架构)
    • [3.4 卷积 - 池化 - ReLU 虚拟链](#3.4 卷积 - 池化 - ReLU 虚拟链)
  • 总结

前言

先来简单介绍一下STM32N6 NPU相关性能。

STM32N6基于运行频率达800 MHz的Arm® Cortex®-M55处理器,是首款引入Arm Helium向量处理技术的CPU,为标准CPU增添DSP处理能力。

STM32N6是首款内嵌意法半导体自主研发的神经处理单元 (NPU)------ST Neural-ART accelerator™的STM32 MCU,专为节能型边缘AI应用而设计。其时钟频率高达1 GHz,计算性能可达600 GOPS,可为计算机视觉和音频应用提供实时神经网络推理能力 。

配备MIPI CSI-2接口和图像信号处理 (ISP) 的专用计算机视觉处理管线,确保兼容多种类型的摄像头。STM32N6还具有H264硬件编码器和NeoChrom™图形加速器,适用于功能丰富的产品开发。

它提供4.2 MB的连续嵌入式RAM,是神经网络或图形应用的理想选择,并辅以高速外部存储器接口(hexa-SPI、OCTOSPI、FMC)。


名词解释

对STM32N6 NPU IP使用到的功能单元名词定义 做一下简单解释记录

1) STRSWITCH (Central data stream switch) :中央数据流开关,可配置数据流架构(流交换机)

2) DECUN (Decompression unit) :压缩单元

3) CONVACC (Convolutional accelerator) :卷积加速器

4) POOL :池化单元

5) ACTIV (Arithmetic unit) :激活单元

6) ARITH :用于算术运算的可重构缓冲区

7) RECUBF (Reconfigurable buffer) :可重构缓冲区

8) STRENG (Stream engines) :嵌入式加密引擎

9) BUSIF :64位AXI接口

10)EPOCH (Epoch controller) : 轮次周期。CNN 模型执行由称为 "epochs(轮次)" 的不可分割处理序列组成。当整个卷积神经网络(CNN)无法完全适配现有的 NPU 硬件资源时,需将其分割成基本子集,即 "epoch"(轮次 ),以便最大程度利用 NPU 资源。这类似于把大任务拆分成小任务,使 NPU 能更好处理。一个卷积神经网络被映射为一组轮次,并按顺序执行。
硬件轮次 :从主机 CPU 配置 NPU 开始,到向 CPU 发回中断结束

11)Processing unit(PU): 处理单元

一、从神经网络到数据流处理

1.0 从神经元到神经网络

我们先来看一下生物神经元,生物神经元有三个主要的组成部分:

  • 树突 -- "输入" ,从其他的神经元获取电脉冲输入
  • 细胞核 --"处理器",做出推断并决定要采取的行动
  • 突触--"输出",将输出以电脉冲的形式发送给其他神经元

    由生物神经元,从而引申到人工神经元。人工神经元由输入、权重、求和、激活函数(引入非线性)、输出部分组成。
    由多个神经元组成神经网络,神经网络主要包括:
  • 输入层,从其他的神经元或特征输入
  • 隐藏层(一个或多个),进行中间的处理
  • 输出层,给出我们预想的结果

1.1 卷积神经网络(CNN)

下面我们来看一个简单的神经网络应用。

假设是对图片数字7进行识别,分为以下几个步骤:

1)选取垂直特征与水平特征卷积核,原始数据与卷积核做卷积

2)特征图提取到水平特征与垂直特征

3)最大池化--- 将特征图中的数据进一步压缩,仅仅反应特征图中最突出的特点

4)扁平化后的数据,经过全连接隐藏层,产生数字属于0-9的概率

引申到硬件NPU数据流处理

NPU(神经网络处理单元)是专门为加速神经网络计算而设计的硬件模块。它能够高效地处理卷积、矩阵乘法等在人工智能 / 机器学习算法中常见的计算密集型操作。与通用处理器相比,NPU 在处理这些特定任务时具有更高的性能和更低的功耗,大大提高了人工智能 / 机器学习应用程序的运行效率

1.2 ST流处理技术

ST流处理引擎(架构)如下图所示:

ST 流处理技术支持创建按需定制的性能与面积优化实例,以适配从低端到高端的各类人工智能(AI)应用。

ST的流处理(Stream processing)技术,其核心是一个可配置的数据流架构(也称为流交换机),该架构可通过在运行时编程构建任意处理单元(PU)的虚拟链,实现所需的操作序列。在硬件资源充足的情况下,支持多个虚拟链同时运行。

二、NPU功能描述

2.0 NPU内部结构图

NPU内部结构图如下所示。

  • 可重构缓冲区:接收并缓存输入数据,然后将其提供给后续的神经网络单元。比如扁平化后的数据,先放在这,然后等待进入神经网络的输入层。
  • 流链路:数据来了,经过流交换机的配置,分成不同的路径去处理。比如从流交换机到卷积加速器,需要有条路过去,这条路可以称为流链路。
  • 流交换机:决定数据流的传输路径。来了数据之后,如何进行处理呢?此时,流交换机去决定数据传输路径。
  • 解压缩单元:解压缩单元是 NPU 中负责高效恢复量化 / 压缩模型数据的专用模块,其核心作用是在不显著损失精度的前提下,大幅降低模型存储和计算开销。之前经过量化的模型部署到我的NPU端,利用解压缩单元,可以恢复出完整的数据。

    当NPU配置并启动后,NPU加速器会自动从外部内存中获取数据以供内部动态互联的处理单元使用。同样,操作序列的结果也会被刷新到外部内存。

NPU通过以下方式连接到系统:

  • 一个AHB端口,用于配置和控制AI模型的执行
  • 两个完全对称的AXI接口,用于获取数据和权重,并刷新输出。

2.1 时钟/复位管理器

该单元的功能分为两个部分:

  • 时钟控制(Clock control)。
    CLK CTRL,NPU 使用由 RCC(复位与时钟控制器)提供的单个功能时钟。该输入时钟被送入时钟控制单元,经门控处理后分发给 IP 内核的不同单元。时钟控制则是对对 RCC 输入的时钟进行门控管理,通过配置寄存器和编译器生成的代码,动态控制各单元的时钟启用 / 关闭。
  • 复位控制。
    同步 RCC 提供的复位信号,支持通过寄存器操作触发 NPU 全局复位。该单元通过标准化接口(RCC)实现对 NPU 内部时钟和复位信号的集中调度与配置。

2.2 流链路(Stream link)

流链路是一种单向互联通道,用于在加速器单元、流引擎、接口与流交换机之间实现数据流的传输。

通过流链路,NPU数据在不同功能模块之间的高效搬运,同时通过信令适配机制,让硬件能自动灵活的处理多种类型的数据,这是NPU支持复杂神经网络的底层基础。

流内容包含数据、消息 / 命令,以及附加的信令信息。

  • 灵活的传输车道。数据传输通过 3 条 8 位宽的数据通道实现,这些通道可独立工作,也可组合为 1 条 24 位的传输通道。
  • 数据流支持多种格式:光栅扫描格式可自动识别特征张量的几何参数(宽 / 高),原始数据格式则需通过编程配置解析参数。
  • 信令信息用于标识数据流的有效性,包括数据类型、格式定义,以及首尾帧标记。
    • 数据类型标记:指示传输的是图像数据、文本数据还是其他类型
    • 格式标记:说明数据是 "光栅扫描格式" 还是 "原始格式"
    • 边界标记:类似快递包裹上的 "起点" 和 "终点" 标签,指示数据流的开始(如第一帧图像)和结束(如最后一个像素)。

举例:卷积神经网络的特征图传输

假设我们有一个 CNN 模型,输入是一张 28×28 像素的灰度图像(单通道),经过卷积层处理后输出特征图。

  1. 光栅扫描格式:自动识别的 "标准化快递"
    • 数据格式:
      图像数据按行优先顺序排列(如第一行像素 1→2→3...,第二行像素 29→30→31...),类似扫描打印纸的顺序。
    • 流链路传输过程:
      • 输入图像从"接口" 通过流链路传输到"流交换机",再转发给"卷积加速器"
      • 流链路上的信令信息自动标记:"这次传输为光栅扫描格式的图像数据,宽 = 28, 高=28" 。
      • 卷积加速器无需额外的参数,根据信令信息解析数据吃吃,开始卷积运算
        -优势:适用于规则的张量数据(如图像、视频),无需人工编程解析参数,类似标准化的集装箱,开箱即可用。
  2. 原始数据格式:自定义解析的"特殊包裹"
  • 数据格式:
    数据以非规则形式存储(如压缩后的权重、稀疏矩阵),例如只存储非零值的位置和数值。
  • 流链路传输过程:
    • 压缩后的模型权重从 "流引擎" 通过流链路传输到 "解压缩单元"
    • 流链路的信令信息标记:"这是原始格式的数据,需要用特定码本解析"。
    • 解压缩单元必须通过编程提前配置码本参数(如量化方式、稀疏索引规则),才能正确解压数据

2.3 流交换机(Stream switch)

数据路由的"智能交通枢纽" (决定数据流的传输路径)

流交换机可根据配置寄存器中的参数设置,动态建立输出与输入流链路端口之间的连接。

任意输入端口均可同时向单个或多个输出端口转发数据流(支持多播模式),实现数据流的复制传输。

当两个流链路接入同一输出端口时,系统通过时分上下文切换机制对输出数据进行调度管理。

举例:图像卷积处理

假设我们有一个 NPU 正在处理一张 28×28 的图像,使用 3 个并行的卷积加速器(加速器 A、B、C):

  1. 输入数据路由:(对输入的数据进行转发)
  • 图像数据通过 "输入流链路 0" 进入流交换机
  • 配置寄存器设置: "输入流链路 0 的数据同时转发到加速器 A、B、C 的输入流链路"(多播模式)
  • 效果:同一图像数据被复制 3 份,并行进入 3 个加速器,同时进行卷积计算,加速处理速度。
  1. 输出数据复用
  • 加速器 A 和 B 的输出需要通过 "输出流链路 X" 传输到池化单元,但输出流链路 X 同一时间只能接收一路数据
  • 配置寄存器设置: "加速器 A 的数据在第 1 个时钟周期传输,加速器 B 的数据在第 2 个时钟周期传输"(时分上下文切换)
  • 效果:两个加速器的输出按时间顺序轮流使用同一输出链路,避免数据碰撞,同时充分利用带宽

通过流交换机,NPU 可以根据神经网络模型的需求(如并行层、分支结构)动态调整数据流动路径,就像灵活的交通调度系统,让数据在正确的时间流向正确的处理单元,从而高效完成复杂的 AI 计算任务。

2.4 流引擎(Stream engines)

流引擎负责系统与处理单元之间的双向数据交互,每个引擎通过一进一出两条流链路与流交换机相连。

  • 支持 2D/3D 数据结构表示
  • 具备间隔管理能力(支持交错数据访问)
  • 数据格式可高度定制(包括数据尺寸、舍入规则、采样策略、带符号扩展的高低位对齐方式等)同时,流引擎还提供链表操作支持。

2.5 加密 / 解密单元(Encryption/Decryption unit)

总线接口内嵌了基于 Keccak-p [200] SHA-3 算法的轻量级加解密引擎,具备低延迟特性,支持轮数可编程配置,并可被多个流引擎共享使用。该单元同时支持模型权重和激活值的端到端加解密处理。

该单元通过硬件级集成,为 AI 计算系统提供了轻量级的端到端数据安全保障,尤其适用于对延迟敏感的边缘计算场景。

2.6 解压缩单元(Decompression unit)

该单元支持对内核权重的标量量化数据 (支持任意量化函数)和向量量化 权重组进行实时解码。

采用有损压缩策略,将 n 维空间划分为多个子体积,每个子体积通过质心进行描述,划分过程旨在最小化预定义失真函数。通过仅存储质心值,可显著降低信号空间的存储开销。

量化函数和向量量化码本(CB)由 NPU 编译器工具链的离线组件生成。编码器将输入值域映射到有限的有理数值集合(即码本),码本中的每个元素称为代码向量,每个代码向量包含最多 8 个码字。单个码本最大容量为 256 个代码向量(CV)。

解压缩单元通过双输入单输出的流链路结构与流交换机连接:

  • iSL0:输入 8 位索引值,用于寻址待解压数据
    -iSL1:输入原始数据,用于动态更新码本内容

2.7 卷积加速器(Convolutional accelerator,CA)

作为 NPU 的运算核心,卷积加速器集成了多组乘积累加(MAC)引擎,专为神经网络中常见的 3×3 卷积运算提供定点加速支持。支持 8/16 位动态精度配置,可根据模型需求灵活调整算力与精度的平衡点。

卷积加速器通过三条输入流链路和一条输出流链路与流交换机连接:

  • iSL0:接收 8 位或 16 位的光栅扫描格式或原始格式特征数据。数据先通过比特率适配流缓冲区,再经特征数据预处理单元处理后存入特征行缓冲区。
  • iSL1:接收 8 位或 16 位的光栅扫描格式或原始格式内核数据。
  • oSL:输出 8 位或 16 位的光栅扫描格式或原始格式卷积结果流,支持最高 24 位有符号数据值。
  • iSL2:可接收 24 位有符号中间累加值,用于与卷积结果累加。
    核心算力
    -采用 18 核 MAC 阵列设计(6 组 ×3 核 / 组)
  • 单周期算力:
  • 16×16 定点:18 次运算
  • 16×8 定点:36 次运算
  • 8×8 定点:72 次运算
  • 支持有符号 / 无符号混合运算模式
    预处理流水线:
  1. 智能格式解析:自动识别光栅扫描 / 原始数据格式
  2. 数值规范化:包含移位、舍入和饱和处理单元
  3. ROI 提取:支持水平 / 垂直方向特征裁剪
  4. 张量扩展:动态生成零填充帧,优化边缘计算
  5. 大卷积核处理:通过分块迭代策略支持超过 3×3 的卷积运算

2.8 池化单元 (Pooling unit)

该单元支持局部二维窗口(MxN)的最小值、最大值、平均值池化操作,以及全局最大值、最小值或平均值池化。

支持的特性包括:

  • 最大 3×3 尺寸的池化窗口
  • 水平和垂直步长范围为 1 至 15
  • 批处理大小范围为 1 至 8
  • 左、右、上边缘填充范围为 0 至 7
  • 下边缘填充根据窗口高度动态调整
    池化单元通过一个输入流和一个输出流连接到流交换机:
  • iSL:接收激活输入值作为扫描行或原始数据。输入值饱和到 16 位
  • oSL:生成原始数据形式的池化输出

2.9 激活单元 (Activation unit)

主要实现与卷积神经网络相关的激活函数。它提供了一条专用路径来计算类似于普通、参数化和阈值 ReLU 的激活。

该单元通过一个输入流链接和一个输出流链接连接到流开关。

  • iSL:接收激活输入值作为扫描行或原始数据。输入值饱和到 16 位。
  • oSL:以原始数据形式产生结果输出。

2.10 算术运算单元 (Arithmetic unit)

该单元可直接处理来自卷积加速器的输出数据,其核心功能是实现 线性组合运算 aX + bY + c,其中:

  • X、Y 为通过两条输入流链路接口提供的输入数据流
  • a、b、c 为预加载到内部存储器的常量(通过配置接口写入),支持标量或向量两种形式
    该单元凭借两条输入流链路及一条输出流链路与流交换机实现连接。
  • iSL0 和 iSL1:接收按光栅扫描格式或原始数据格式呈现的输入值,分别标记为 X 和 Y。对输入值进行饱和处理,将其转化为 16 位数据。
  • oSL:以原始数据的形式输出经运算得到的结果

2.11 可重构缓冲区(Reconfigurable buffer)

在神经网络的运算中,一般会采用按通道的数据分割策略,对需要处理的数据量进行划分。随后,沿着三个空间维度,将数据以执行周期和通道数据块的形式进行组织。在构建数据块时,会综合考虑通道的数量以及输入数据的规模。从不同数据块输出的部分数据,必须经过重新编排,才能在后续的神经网络层或模块中被使用。

可重构缓冲区负责接收并缓存输入数据,然后将其提供给后续的神经网络单元。这一机制在避免数据处理过程中出现死锁现象方面发挥着重要作用,保障了神经网络运算的流畅性。

以图像数据在神经网络中的处理场景为例进行说明:假设我们正在处理一个图像分类任务,使用的神经网络结构包含卷积层、池化层等。输入的图像数据尺寸为 3 x 28 x 28,即有 3 个通道(如 RGB 通道),图像尺寸为 28 x 28像素。
数据分割:

采用按通道的数据分割策略。将输入图像数据按通道分割,即把 RGB 三个通道的数据分开处理。这样,每个通道的数据可以独立进行后续操作。
数据组织:

沿着三个空间维度(这里是通道维度、高度维度、宽度维度),以执行周期和通道数据块的形式组织数据。例如,我们可以将每个通道的数据进一步划分为大小为 4 x 4 的数据块(当然,实际应用中数据块大小会根据具体情况调整)。
可重构缓冲区的作用:

当这些数据块从输入层进入神经网络时,可重构缓冲区会接收并存储这些数据。

2.12 执行周期控制器 (Epoch controller)

执行周期控制器赋予了 NPU(神经网络处理单元)独立于主机 CPU 的运行能力。主机 CPU 仅需提供一个指向 64 位对齐的 "二进制数据块" 的指针,该数据块存储于可通过 AXI 接口(高级可扩展接口)访问的内存区域,并且此二进制数据块支持加密保护。

执行周期控制器的核心组件是有限状态机(FSM),它对控制微指令进行解析,凭借对 NPU 内部配置总线的直接访问,精准配置参与模型运算的所有处理单元,确保神经网络模型的高效执行。

NPU 的同步机制基于中断原理。其支持的分步操作模式,允许逐次执行单条微指令。执行操作由向中断请求(IRQ)寄存器中的特定位写入数据来激活。

该控制器释放了高级高性能总线(AHB)的控制总线资源,以供其他模块使用,并通过优化 NPU 的编程流程,显著提升了系统性能。二进制数据块经由 AXI 接口获取,AXI 接口具备比 AHB 更高的带宽,保障了数据的高效传输。对内部配置总线的直接访问,使得数据传输绕开了所有外部总线结构,避免了主机处理器事务在外部总线结构中的繁琐传输过程。

2.13 中断控制器(Interrupt controller)

功能单元能够生成电平敏感的高电平有效中断。这些中断由中断控制器收集,被路由到四条主中断线路,并转发给主机 CPU。

当主中断触发时,主机 CPU 必须读取中断寄存器(INTREG)以识别当前中断信号的来源。中断向四条主中断线路的路由以及选择性使能由中断或屏蔽寄存器(INTORMSK)和中断与屏蔽寄存器(INTANDMSK)控制,这两个寄存器的位数与中断源的数量相同。

  • 中断或屏蔽寄存器(INTORMSK):如果有任何未被屏蔽的中断处于激活状态,中断就会被转发。
  • 中断与屏蔽寄存器(INTANDMSK):只有当所有未被屏蔽的中断都处于激活状态时,中断才会被转发。

中断控制器在神经网络系统中扮演着关键角色,主要负责以下几个方面:

  • 中断信号处理:收集功能单元产生的电平敏感高电平有效中断,并将其路由到主中断线路,转发给主机 CPU。
  • 中断源识别:在主中断触发时,主机 CPU 通过读取 INTREG 寄存器来确定中断信号的来源,以便进行后续处理。
  • 中断路由与控制:INTORMSK 寄存器和 INTANDMSK 寄存器对中断的路由和选择性使能进行控制。INTORMSK 寄存器在有未屏蔽中断激活时转发中断;INTANDMSK 寄存器则要求所有未屏蔽中断都激活时才转发中断,从而实现对中断的精细管理,确保神经网络系统的稳定运行。

三、NPU流处理示例

接下来介绍一些流处理的简单示例。

3.1 直接内存访问(DMA)传输

最简单的处理链包含一个输入流处理器和一个输出流处理器,二者首尾相连。这种配置方式(尽管并非其主要设计用途)可将 NPU(神经网络处理单元)转变为一个高带宽的直接内存访问(DMA)控制器。

可以放在以下得到几种应用场景中:

  • 数据预处理:在模型推理前,快速将批量图像 / 文本从内存加载到 NPU 缓存。
  • 结果回写:将计算结果高速写回系统内存,减少 CPU 干预。
  • 数据搬运加速:替代传统 CPU 主导的 DMA,适用于高吞吐量需求的边缘计算场景。

举个简单的例子:部署在摄像头的NPU需要实时处理1080p视频流

流程:

  1. 先将 NPU 配置为 DMA 模式,以 较大 带宽将视频帧从摄像头缓存搬运至 NPU 内部 SRAM。
  2. 切换回计算模式,执行目标检测模型推理。
  3. 再次切换为 DMA 模式,将检测结果(边界框坐标)高速写回内存供显示系统使用。

通过这种灵活配置,NPU可以在数据搬运与计算直接快速切换,最大化端到端处理效率。

3.2 简单处理

最简单的处理链包含一个输入流处理器、一个处理单元和一个输出流处理器,三者依次连接构成数据处理链路。

简单处理链路由三大要素组成:

  • 输出流处理器:负责从内存或外设读取原始数据(如特征图、权重),并按流格式(光栅扫描 / 原始数据)预处理。
  • 处理单元:执行具体计算任务,如卷积、池化、算术运算等神经网络基础操作。
  • 输出流处理器:将处理结果写入目标存储区域,或转发至下一级处理单元。

数据按照"输入->处理->输出" 单向流动,形成最小的计算单元。类似于神经网络中"层"的概念。

3.3 多重处理架构

该架构实现了多个独立的简单处理链 (如图 125 所示)。独立处理链的数量受限于可用硬件资源,其上限为流引擎总数的一半。例如,在 Neural-ART 14 处理器中,最多可同时运行 5 对流引擎,即支持 5 条并行处理链。

3.4 卷积 - 池化 - ReLU 虚拟链

图 127 展示了实现经典卷积 - 池化 - ReLU(Conv-Pool-ReLU)处理流程的虚拟链架构。


总结

通过对ST NPU的简单介绍,让大家对STM32N6 NPU框架有一个简单的认识。