[应用相关]

STM32 Cordic 运算速度评估

[复制链接]
1780|13
手机看帖
扫描二维码
随时随地手机跟帖
micoccd|  楼主 | 2022-4-30 21:12 | 显示全部楼层 |阅读模式
1. 引言
客户在使用 Cordic 进行运算时候,对 Cordic 打断 CPU 的时间存有疑问,认为时间不是按
照芯片手册中所描述的时钟周期,本文针对
Cordic 时间测试用于澄清计算周期,同时可作为客
户评估使用,本文以
STM32G431 作为示例。  

使用特权

评论回复
micoccd|  楼主 | 2022-4-30 21:12 | 显示全部楼层
2. 执行周期
STM32G431 参考手册中有关于 Cordic 的精度及迭代次数描述,另外还有执行周期的对
应值,从图上我们了解到设定精度数据等同于指令执行时间,因为
Cordic 执行时会自动耗损
CPU 执行周期,因此我们可以了解执行速度等同于精度数据设定。
1. Cordic 精度与执行周期
45677626d35c2317bd.png   


使用特权

评论回复
micoccd|  楼主 | 2022-4-30 21:19 | 显示全部楼层
3. 测试方法
我们分两种写法:
1.单次执行测试
2.多次测试取平均值
测试代码中
hcordic.Instance->也可以写为 CORDIC->;读取 TIM3 的寄存器数据就可以知
道这段代码执行的时间,其中
TIM3 配置时钟为 170MHz 等同于 CPU 执行时间; TIM3 CNT
数据即指令执行周期。  

使用特权

评论回复
micoccd|  楼主 | 2022-4-30 21:56 | 显示全部楼层
3.1. 单次执行测试
当使用单次测试时,我们使用 16 次迭代测试,精度配置字为 4
2.单次执行时间测试代码
15574626d3fbb4e468.png


图 3.单次执行时间汇编代码
8808626d3fcd35378.png
图 4.单次指令执行周期观测
98030626d3fda9377f.png
图 5.单次指令执行分析:
7864626d3fe7757ea.png
去除数据 load 设定时间以及 TIM3 执行停止指令时间,可以看到真正 Cordic 运算正弦运算的指
令执行周期为:
24cycle -(3+2+2+1+2+3+5+1+1) cycle = 4 cycle;
也就是在写入 WDATA 和读取 RDATA 之间的 CPU 占用时间为 4 个 CPU 时间。


使用特权

评论回复
micoccd|  楼主 | 2022-4-30 21:58 | 显示全部楼层
3.2. 多次执行测试
我们使用 24 次迭代测试,精度配置字为 6;循环计算 100 次,计算平均值:
6. 多次执行测试 C 代码  

37440626d4009bf540.png
图 7. 多次执行汇编代码
81225626d401b17c69.png
图 8. 多次执行周期观测
59325626d402fc5780.png
图 9. 多次执行指令分析
54198626d405030505.png
循环体 for 执行周期为 2+1+2+3+2+1+1+1+1=14, TIM3 执行停止指令 8Cycle
这样单次的 Cordic 运算周期为:
28299626d406e609d7.png


使用特权

评论回复
micoccd|  楼主 | 2022-4-30 21:58 | 显示全部楼层
4. 结论
从上面的测试可很清楚看到 Cordic 指令执行时间严格遵循精度设定,执行时间可以说非常的
短。当客户使用
Cordic 时候往往需要考虑的是数据的 load 以及 set 时间,以及 C 语言的写法问
题,这边还是推荐直接操作寄存器的方式时间最短。
  

使用特权

评论回复
Uriah| | 2022-10-7 12:06 | 显示全部楼层

使用Optional简化if判空

使用特权

评论回复
Bblythe| | 2022-10-7 15:05 | 显示全部楼层

通过对判断条件取反,代码在逻辑表达上会更加清晰

使用特权

评论回复
Pulitzer| | 2022-10-7 18:04 | 显示全部楼层

对于优秀程序员来说,这不是好代码

使用特权

评论回复
公羊子丹| | 2023-6-1 07:01 | 显示全部楼层

中断产生于单片机内部和外部的各种设备

使用特权

评论回复
Wordsworth| | 2023-6-1 08:04 | 显示全部楼层

这样的设定只需在setup()中定义一次便能在整个程序中有效

使用特权

评论回复
Clyde011| | 2023-6-1 09:07 | 显示全部楼层

在掌握对象的变化频度时是有效的

使用特权

评论回复
万图| | 2023-6-1 11:03 | 显示全部楼层

在GR-SAKURA中,从IO30引脚到IO35引脚接收来自外部的中断信号

使用特权

评论回复
Uriah| | 2023-6-1 12:06 | 显示全部楼层

一种了解状态变化的简单方法

使用特权

评论回复
帛灿灿| | 2023-6-1 14:02 | 显示全部楼层

中断信号直接从各外部设备通知中断控制器

使用特权

评论回复
Bblythe| | 2023-6-1 15:05 | 显示全部楼层

待向GPIO(通用I/O端口)的输入从0变为1时,程序可以一定的间隔来检查GPIO的状态

使用特权

评论回复
童雨竹| | 2023-6-1 17:01 | 显示全部楼层

来自单 片机内部的定时器和GPIO、串行通信设备UART等外设机器的中断被称为外部设备中断

使用特权

评论回复
Pulitzer| | 2023-6-1 18:04 | 显示全部楼层

定时器输出引脚的设定

使用特权

评论回复
公羊子丹| | 2023-6-1 19:07 | 显示全部楼层

多次检查也会给单片机带来负荷,对功耗不利

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

109

主题

727

帖子

1

粉丝