ZYNQ移植ARM CMSIS_DSP库

移植方法

Vitis中新建一个Application Project,选择HelloWord模板。按下面步骤移植CMSIS_DSP:

  1. 下载CMSIS_DSP,拷贝如下文件夹到Vitis工程:
    • Source
    • Include
    • PrivateInclude
    • ComputeLibrary (only if you target Neon)
  2. 对Source路径下和文件夹同名的.c文件(如,BasicMathFunctions.c),设置为不编译(右键Properties,Exclude resource from build),当然直接删除亦可。
  3. 设置头文件目录:
    ZYNQ移植ARM CMSIS_DSP库_第1张图片
  4. 添加CMSIS头文件依赖。从CMSIS下载CMSIS_5/CMSIS/Core_A /Include/路径下的头文件,拷贝到Include目录。
  5. 链接math库:
    ZYNQ移植ARM CMSIS_DSP库_第2张图片
    6. 添加编译选项
    -mfpu=neon-vfpv4 -mcpu=cortex-a9 -mfloat-abi=hard 注意这里使用-mfpu=neon-vfpv4而不是-mfpu=neon,详见here和xapp1206文档。
    ZYNQ移植ARM CMSIS_DSP库_第3张图片 7. 设置编译宏,开启NEON加速 ZYNQ移植ARM CMSIS_DSP库_第4张图片
    8. 设置多线程编译
    DSP库还是比较大的,单核编译一次要挺久,可开启多线程编译。
    ZYNQ移植ARM CMSIS_DSP库_第5张图片

测试

测试用例
使用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添加头文件

你可能感兴趣的:(嵌入式,zynq,dsp,fpga,arm开发)