在zynq中利用neon做FFT运算

ZYNQ中的双核处理器Cortex-A9中使用的Neon协处理器,

先了解一下neon,引用ARM的原文,

The ARM® NEON™ general-purpose SIMD engine efficiently processes current and future multimedia formats, enhancing the user experience.

NEON technology can accelerate multimedia and signal processing algorithms such as video encode/decode, 2D/3D graphics, gaming, audio and speech processing, image processing, telephony, and sound synthesis by at least 3x the performance of ARMv5 and at least 2x the performance of ARMv6 SIMD.

http://www.arm.com/products/processors/technologies/neon.php

NEON利用SIMD(single Instruction,Multiple Data)结构,即单指令多数据的方式,看来就是将串行处理的方式改为并行处理,引用原图,

image

指令执行时,所以通道(Lane)同时进行运算(Operation),从而得到结果;

其中,Register可以为32个64位寄存器或是16*128bit的寄存器;

可接受的数据类型可以是有符号或无符号的8位,16位,32位,64位,单精度浮点数;

所以...既然ZYNQ内部有了,我们就可以利用NEON这个协处理器,

完成一些复杂的运算,比如FFT,

当然你可以用PL(FPGA fabric)部分去实现FFT,效率可能会高一些,

但开发难度大...而且不灵活;

那就尝试着用一下,网上有个开源项目,就是为NEON来写库函数的,叫用Ne10;

参考网址:http://projectne10.github.io/Ne10/

现在实现的函数有,

image

如下表.

image

image

 

那理论上,我们用xilinx的SDK编译了这个库,我们就可以使用Ne10的函数了;

我们的虚拟示波器中想加入频域的显示,所以我们测试一下FFT这个函数;

先去实践一下:)

2014.03.19

 

 

 

 

 

你可能感兴趣的:(运算)