移植方法
Vitis中新建一个Application Project,选择HelloWord模板。按下面步骤移植CMSIS_DSP:
- 下载CMSIS_DSP,拷贝如下文件夹到Vitis工程:
- Source
- Include
- PrivateInclude
- ComputeLibrary (only if you target Neon)
- 对Source路径下和文件夹同名的.c文件(如,BasicMathFunctions.c),设置为不编译(右键Properties,Exclude resource from build),当然直接删除亦可。
- 设置头文件目录:
- 添加CMSIS头文件依赖。从CMSIS下载
CMSIS_5/CMSIS/Core_A /Include/
路径下的头文件,拷贝到Include目录。 - 链接math库:
6. 添加编译选项
-mfpu=neon-vfpv4 -mcpu=cortex-a9 -mfloat-abi=hard
注意这里使用-mfpu=neon-vfpv4
而不是-mfpu=neon
,详见here和xapp1206文档。
7. 设置编译宏,开启NEON加速
8. 设置多线程编译
DSP库还是比较大的,单核编译一次要挺久,可开启多线程编译。
测试
测试用例
使用DSP库例子中的FFT例程来测试库文件编译的正确性。将arm_fft_bin_data.c
拷贝到src路径,将arm_fft_bin_example_f32.c
的内容移植到helloworld.c中。若正确执行,将打印SUCCESS。
性能
不开启NEON时,这个1024点FFT计算耗时49us,开启NEON后,只需24us,快了近一倍。
参考文献
Maybe Error: Multiple definition in DSP package #696
Multiple Definitions Error When Using CMSIS DSP Library with SSP 2.0.0
MicroZed Chronicles: NEON & SIMD
xilinx sdk(2017.4版)如何编译neon的汇编指令,如vmul指令?谢谢!
Error Using Neon
vivado sdk添加头文件