你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32U3 HSP 硬件矩阵乘法加速实测

[复制链接]
短笛君 发布时间:2026-6-10 01:40

STM32U3 HSP 硬件矩阵乘法加速实测

前言

STM32U3 是 ST 新出的超低功耗 Cortex-M33,主频 96MHz。这颗片子有个比较有意思的外设叫 HSP(Hardware Signal Processing),官方定位是"可编程硬件加速器"——里面有 SPE 引擎、固件可编程、支持 FFT/FIR/矩阵/向量等各种 DSP 操作。上一个工程已经实测了FIR和RFFT的HSP加速,这个工程直接copy,进行矩阵乘法测试对比

硬件平台

项目 参数
MCU STM32U3C5ZITx
内核 Cortex-M33
主频 96MHz
SRAM 256KB (192KB IRAM1 + 64KB IRAM2)
Flash 2MB
板子 NUCLEO-U3C5

通过查阅资料 HSP 有两种使用方式:

  1. Direct Command(直令模式) — CPU 写命令 ID + 参数到寄存器,HSP 执行完返回结果。适合单次操作,简单直接。本次测试用的就是这个模式。
  2. Processing List(序列模式) — 预先把一串操作编排成序列(类似 DMA 链表),HSP 按序执行。适合信号处理流水线,比如 FIR → FFT → Magnitude

HSP 支持的运算有很多,例如FFT/RFFT/DCT、FIR/IIR/LMS 滤波、向量加减乘除/指数对数/三角函数、矩阵乘法/转置/求逆、复数运算等等,本次对比矩阵乘法。

对比方式

使用同一个矩阵乘法,CPU 和 HSP 各跑 5 次,取后 4 次平均。用 DWT 周期计数器计时。

CPU 实现是标准三重循环,稍微做了点优化——ikj 遍历顺序 + 稀疏跳过(零值不乘):

// CPU: triple-loop, ikj order
for (i = 0; i < M; i++)
    for (k = 0; k < K; k++) {
        float aik = A[i*K + k];
        if (aik == 0.0f) continue;   // 跳过0
        for (j = 0; j < N; j++)
            C[i*N + j] += aik * B[k*N + j];
    }

然后直接调用HSP的函数,球的结果


HSP_ACC_MatMult_f32(&hmw, A, B, C, M, K, K, N);

矩阵用伪随机数填充(-1.0 ~ 1.0),确保不全是零。最后用 4 个采样点比对 CPU 和 HSP 结果,验证正确性。

HSP 初始化

初始化也不复杂,直接使用ST给出的demo:

extern HSP_HandleTypeDef hhsp1;   // 在 hsp_if_conf.c 里定义
hsp_engine_context_t hmw;          // HSP 中间件上下文

hhsp1.Instance = HSP1;
HAL_HSP_Init(&hhsp1);              // 初始化 HSP 外设(时钟、引脚)
hmw.hdriver = &hhsp1;
HSP_CORE_Init(&hmw, hmw.hdriver);  // 加载固件、启动 HSP

拆解HSP_CORE_Init 主要做了几件事:

  1. 把 CROM/CRAM 固件加载到 HSP 内部 RAM
  2. 加载插件(如有)
  3. Boot HSP 引擎
  4. 状态机:RESET -> FW_LOADED -> READY -》 IDLE

启动完状态是 IDLE,这时候就能发 Direct Command 了。

测试结果

矩阵尺寸 MAC 操作数 CPU (cycles) HSP (cycles) 加速比 CPU 耗时 HSP 耗时
32×32 32,768 260,648 19,123 13.6x 2.7ms 0.2ms
64×64 262,144 1,908,165 141,585 13.5x 19.9ms 1.5ms
128×128 2,097,152 15,241,824 1,127,511 13.5x 158.8ms 11.7ms

测试数据见下图

32X32矩阵测试

image.png

64X64矩阵测试

image.png

128X128矩阵测试

image.png

速度分析

Cortex-M33 的单精度 FPU 做一次 MAC 大概 1-3 个周期,但矩阵乘法有大量循环开销、地址计算、缓存未命中等。实测 CPU 有效吞吐大约 0.13 MAC/cycle。

HSP 的 SPE 引擎是专用硬件路径,矩阵乘法在里面是硬件加速的——所有乘加操作在 HSP 内部流水线完成,没有取指/译码开销,数据走内部 SRAM(CRAM/DRAM/BRAM)而不是通过 AHB 总线反复读写。

内存布局

STM32U3 的 SRAM 总共 256KB,分为 IRAM1(192KB,地址 0x20000000)和 IRAM2(64KB,地址 0x20030000)。128×128 测试的三个矩阵各占 64KB,matrix_A 和 matrix_B 放在 IRAM1,matrix_C 跨 IRAM1/IRAM2 存放。剩下的 64KB 给栈(~8KB)、堆(~14KB)和全局变量(~10KB),刚好够用。

HSP 内部还有 48KB BRAM(地址 0x30098000,分 BRAMA/BRAMB/BRAMAB 三个 16KB Bank),通过散列文件的 RW_HSP_DATA_BRAM 区域映射。本次测试没用到 BRAM——主要 SRAM 已经够放了。如果想跑更大的矩阵或者放更多 buffer,可以把部分数据挪到 BRAM 里腾空间。

128×128 已经是极限了,想跑 256×256(需要 768KB)得上外扩 PSRAM

踩坑记录

散列文件加 BRAM 段

hsp_bram_if.c 引用了 Image$$RW_HSP_DATA_BRAM$$Base / Limit 这两个链接器符号来算 BRAM 静态分配大小。散列文件不加 RW_HSP_DATA_BRAM 区域的话链接报错。加了就行,里面可以不实际放东西。

HSP 不能写栈内存

HSP 是 AHB 总线主设备,按理说能访问全部地址空间。但实测 HSP_ACC_VectCopy_f32 写栈上的数组——全部零,写不进去。切到 static 或全局变量就正常。怀疑是 TrustZone 或者 MPU 做了什么限制,没深究。

HSP_CORE_Init 后的状态

HSP 初始化完成后状态是 HSP_CORE_STATE_IDLE(0x20000000),不是 HSP_CORE_STATE_READY(0x40000000)。READY 是固件加载完但还没 boot 的中间状态,boot 完就变成 IDLE 了。写状态检查的时候别搞反。

编译顺序

HSP 中间件的头文件互相引用比较乱,有些 #include "xxx.h" 用的是相对路径(引号),依赖 include path 的顺序。Keil 里把所有 HSP 目录都加到 include path 就没事了。

其他 HSP 操作速览

矩阵乘法只是冰山一角,HSP 还能做很多事情。在HSP的API中还有一些其他常用的操作:

有时间会一一进行测试

// 向量运算
HSP_ACC_VectDotProd_f32(&hmw, a, b, &result, n);   // 点积
HSP_ACC_VectAdd_f32(&hmw, a, b, c, n);              // 加法
HSP_ACC_VectScale_f32(&hmw, a, scale, b, n);        // 缩放

// 矩阵运算
HSP_ACC_MatTrans_f32(&hmw, in, out, rows, cols);     // 转置
HSP_ACC_MatInv_f32(&hmw, in, out, rows, cols);       // 求逆

// 变换
HSP_ACC_Rfft_f32(&hmw, buf, log2N, 0, 1, RFFT_1);  // 实数 FFT
HSP_ACC_Fft_f32(&hmw, buf, log2N, 0, 1);            // 复数 FFT

// 滤波
HSP_ACC_Filter_f32(&hmw, in, coeff, state, out, n);  // FIR 滤波

cmsis库中也有相关操作函数,后续可以对比二者差异

总结

STM32U3 这颗芯片的 HSP 硬件加速器对于一些数**算加速效果十分显著。矩阵乘法实测 13.5x 加速,和官方宣传的性能一致。

Cortex-M33 单核跑 128×128 矩阵乘法要 150ms,HSP 只要 11ms。对于需要在 MCU 上做实时信号处理、边缘 AI 推理的场景,HSP可以轻松实现一些复杂算法/模型的部署 并且凭借U3的极致功耗 带来很好的能效比

唯一的遗憾是 SRAM 只有 256KB,想要测试更大规模矩阵发现RAM被撑爆了。。。。期待后续的 STM32U3 型号或者下一代能给更大的 SRAM。


收藏 评论0 发布时间:2026-6-10 01:40

举报

0个回答

所属标签

相似分享

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版