65. TFA

65.1. 概述

TFA 是一种硬件三角函数加速器,用于提升数学运算的性能。

65.2. 支持的函数

  • INV(x)

  • SQRT(x)

  • SIN(x)

  • COS(x)

  • POW(2,x)

  • LOG2(x)

  • ATAN(x)

  • INVSQRT(x)

  • ATAN2(y,x)

  • CORDIC(x,y)

Note

ATAN2和CORDIC函数仅在部分 SoC 上支持。 在其他 SoC 上,选择这些函数将打印”not supported”提示信息。

65.3. 硬件设置

无需特殊硬件设置。

65.4. 工具链要求

本示例需要支持DSP扩展的工具链:

  • IDE: Segger Embedded Studio(或其他支持DSP工具链的IDE)

  • GCC工具链: Andes RISC-V工具链(带DSP扩展)或 ZCC工具链(带DSP扩展)

Note

不支持DSP扩展的标准GCC工具链无法正确编译和运行本示例。

65.5. 运行程序

程序默认开启FPU以获得最佳性能,同时提供关闭FPU的编译选项。

运行示例(开启FPU):

*********************************************************************************
*                                                                               *
*                         TFA Example Menu                                      *
*                                                                               *
* 0 - INV TEST                                                                  *
* 1 - SQRT TEST                                                                 *
* 2 - SIN TEST                                                                  *
* 3 - COS TEST                                                                  *
* 4 - POW2 TEST                                                                 *
* 5 - LOG2 TEST                                                                 *
* 6 - ATAN TEST                                                                 *
* 7 - INVSQRT TEST                                                              *
* 8 - ANANPU2 TEST                                                              *
* 9 - CORDIC32 OPERATION                                                        *
* A - MIXED OPERATION                                                           *
*                                                                               *
*********************************************************************************

菜单 0~9 测试 TFA 的 10 种基本函数,与库函数对比结果误差和计算周期,结果如下:

0
tfa and math diff value:-0.000000, math calculation time:33 ticks, tfa calculation time:62 ticks.
1
tfa and math diff value:0.000000, math calculation time:363 ticks, tfa calculation time:63 ticks.
2
tfa and math diff value:0.000000, math calculation time:1755 ticks, tfa calculation time:63 ticks.
3
tfa and math diff value:0.000000, math calculation time:1826 ticks, tfa calculation time:63 ticks.
4
tfa and math diff value:0.000000, math calculation time:3031 ticks, tfa calculation time:63 ticks.
5
tfa and math diff value:-0.000000, math calculation time:2875 ticks, tfa calculation time:63 ticks.
6
tfa and math diff value:-0.000000, math calculation time:1959 ticks, tfa calculation time:180 ticks.
7
tfa and math diff value:-0.000000, math calculation time:552 ticks, tfa calculation time:63 ticks.
8
tfa and math diff value:0.000000, math calculation time:2108 ticks, tfa calculation time:150 ticks.
9
math angle value:6.981058, tfa angle value:6.980525, tfa and math angle diff value:-0.000533, math mode value:98.731964, tfa mode value:98.000000, tfa and math mode diff value:-0.731960, math calculation time:2901 ticks, tfa calculation time:93 ticks.

菜单 A 测试基于前 7 种运算的复杂计算,对比库函数的结果误差与周期,结果如下:

A
tfa and math diff value:-0.000000, math calculation time:9088 ticks, tfa calculation time:290 ticks.