打印
[应用相关]

STM32 Cordic 运算速度评估

[复制链接]
916|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 精度与执行周期
  


使用特权

评论回复
板凳
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.单次执行时间测试代码



图 3.单次执行时间汇编代码

图 4.单次指令执行周期观测

图 5.单次指令执行分析:

去除数据 load 设定时间以及 TIM3 执行停止指令时间,可以看到真正 Cordic 运算正弦运算的指
令执行周期为:
24cycle -(3+2+2+1+2+3+5+1+1) cycle = 4 cycle;
也就是在写入 WDATA 和读取 RDATA 之间的 CPU 占用时间为 4 个 CPU 时间。


使用特权

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


图 7. 多次执行汇编代码

图 8. 多次执行周期观测

图 9. 多次执行指令分析

循环体 for 执行周期为 2+1+2+3+2+1+1+1+1=14, TIM3 执行停止指令 8Cycle
这样单次的 Cordic 运算周期为:



使用特权

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

使用特权

评论回复
7
Uriah| | 2022-10-7 12:06 | 只看该作者

使用Optional简化if判空

使用特权

评论回复
8
Bblythe| | 2022-10-7 15:05 | 只看该作者

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

使用特权

评论回复
9
Pulitzer| | 2022-10-7 18:04 | 只看该作者

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

使用特权

评论回复
10
公羊子丹| | 2023-6-1 07:01 | 只看该作者

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

使用特权

评论回复
11
Wordsworth| | 2023-6-1 08:04 | 只看该作者

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

使用特权

评论回复
12
Clyde011| | 2023-6-1 09:07 | 只看该作者

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

使用特权

评论回复
13
万图| | 2023-6-1 11:03 | 只看该作者

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

使用特权

评论回复
14
Uriah| | 2023-6-1 12:06 | 只看该作者

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

使用特权

评论回复
15
帛灿灿| | 2023-6-1 14:02 | 只看该作者

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

使用特权

评论回复
16
Bblythe| | 2023-6-1 15:05 | 只看该作者

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

使用特权

评论回复
17
童雨竹| | 2023-6-1 17:01 | 只看该作者

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

使用特权

评论回复
18
Pulitzer| | 2023-6-1 18:04 | 只看该作者

定时器输出引脚的设定

使用特权

评论回复
19
公羊子丹| | 2023-6-1 19:07 | 只看该作者

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

使用特权

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

本版积分规则

92

主题

549

帖子

1

粉丝