G32R501 作为面向伺服控制、变频器、机器人、高精度电源的双核 Cortex‑M52 芯片,自带一套名为Zidian(紫电) 的专用数学加速指令集,可大幅提升浮点 / 整数运算速度。AN1132 详细讲解 Zidian 指令集架构、ICAU/FCAU 加速单元、编译器开启方法、调用方式与工程示例,本文用最直白的工程语言帮你快速开启性能加速。
资料获取:AN1132_G32R501 zidian应用笔记
1. Zidian 是什么?
Zidian 是极海专为 G32R5xx 系列设计的硬件数学加速扩展指令集,分为两类加速单元:
1.1 ICAU(整数计算加速单元)
- 加速:整数运算、SIMD、FFT、复数运算、CRC
- 指令:CX2、CX2A、CX2DA、CX3、CX3D、CX3DA
2. FCAU(浮点计算加速单元)
- 加速:sin、cos、atan、atan2、sqrt、除法
- 指令:VCX2、VCX3
- 对 FOC、伺服、电机算法直接提速
一句话总结:标准库函数→硬件指令,耗时从几十周期降到几周期。
2. Zidian 能加速哪些函数?
AN1132 通过 zidian_math.h 提供封装好的函数,直接调用即可加速:
| 函数 | 功能 |
|---|---|
| __sinpuf32 / __sin | 正弦计算 |
| __cospuf32 / __cos | 余弦计算 |
| __atanpuf32 / __atan | 反正切 |
| __atan2puf32 / __atan2 | 坐标角度计算 |
| __sqrtf32 | 平方根 |
| __divf32 | 浮点除法 |
| __mpy2pif32 | 2π 乘法 |
| __div2pif32 | 2π 除法 |
3. MDK-AC6 开启 Zidian 步骤(最常用)
- 打开工程选项 → C/C++(AC6)
- 在 Misc Controls 添加:
-mcpu=cortex-m52+cdecp0
- 预定义中添加:
__ZIDIAN_FCAU__
- 代码中包含头文件:
#include "zidian_math.h"
- 直接调用
sinf、cosf、sqrtf、atan2f即可自动加速
4. IAR 开启 Zidian 步骤
- 进入 C/C++ Compiler → Extra Options
- 勾选
Use command line options - 添加:
--cdecp=0
- 预定义添加:
__ZIDIAN_FCAU__
- 包含
zidian_math.h后直接使用数学函数
5. 加速效果(官方实测)
6. 最简示例代码
#include "zidian_math.h"
void test_zidian(void)
{
float x = 3.14159f / 4.0f;
float y;
// 硬件加速正弦
y = __sin(x);
// 硬件加速余弦
y = __cos(x);
// 硬件加速atan2
y = __atan2(1.0f, 1.0f);
// 硬件加速平方根
y = __sqrtf32(0.81f);
}
7. 常见问题
- 加速不生效?
- 未加编译参数:
-mcpu=cortex-m52+cdecp0 - 未定义宏:
__ZIDIAN_FCAU__ - 未包含:
zidian_math.h
- 未加编译参数:
- 哪些场景最适合开?
- 电机 FOC(Park/Clarke、观测器、锁相环)
- 高频滤波算法
- 三角函数、平方根、除法密集型代码
AN1132 是 G32R501Zidian 硬件数学加速的官方应用手册,核心价值:
- 无需改算法,直接替换标准数学函数
- 三角函数 / 除法 / 平方根硬件级加速
- 伺服、变频器、机器人项目算力直接解放
- 配置简单:1 行编译参数 + 1 个头文件
开启 Zidian 后,系统可跑更高控制频率、更复杂算法,实时性大幅提升。
阅读全文
1360