projectne10向ZedBoard移植

来源:互联网 发布:爱信诺金税盘开票软件 编辑:程序博客网 时间:2024/05/20 23:38

目标:在ZedBoard的Linux上可以运行NE10的库

日期:2016/5/16

主机OS:Win7sp1-64bit

虚拟机OS:Ubuntu14.04.4-amd64

参考:$NE10PATH/doc/BuildingNe10.txt(我们这种应用属于CROSS-COMPILING)

$NE10PATH/GNUlinux_config.cmake

1. 下载projectne10源代码

官网:http://projectne10.github.io/Ne10/

下载zip压缩包,并解压给虚拟机共享文件夹

2. 编译projectne10库

首先确保Vivado2015.4已成功安装
1) 将共享文件夹的ne10源代码目录拷贝到~/下,并更名NE10
2) 在NE10/下创建config.cmake,并包含以下内容
set(GNULINUX_PLATFORM ON)set(NE10_LINUX_TARGET_ARCH "armv7")set( CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc )  set( CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++ ) set( CMAKE_ASM_COMPILER arm-xilinx-linux-gnueabi-as )  find_program(CMAKE_AR NAMES "arm-xilinx-linux-gnueabi-ar")  mark_as_advanced(CMAKE_AR)   find_program(CMAKE_RANLIB NAMES "arm-xilinx-linux-gnueabi-ranlib")mark_as_advanced(CMAKE_RANLIB)
3) 执行编译
$mkdir build & cd build
$cmake -DCMAKE_TOOLCHAIN_FILE=../config.cmake ..
$make
4. 我们可以得到./modules/libNE10.a(库文件)、./samples/NE10_test_static(测试程序)、./test/N个测试文件
/* TODO: 这里我还没有上Zed测试,等之后有时间再说 */

3. 关于projectne10库

1) 首先能确定的是,ne10库想移植到standalone较困难,比如说modules/NE10_init.c文件为各模块初始化文件,里面涉及到了
infofile = fopen ("/proc/cpuinfo", "r");
也就是说需要至少linux系统的支持
2) 所有modules下的函数实现,.asm的实现基本没有任何用处,可以看看诸如NE10_init_math.c文件中各函数指针初始化过程,即可了解其实_asm的实现根本没有调用到
3) 一些文档中表示,模块函数可以间接调用,也可以直接调用,间接调用使用的是函数指针,比如
ne10_vdiv_vec2f,会根据系统带不带neon模块来决定是使用ne10_vdiv_vec2f_c还是ne10_vdiv_vec2f_neon函数
而直接调用则可直接指定ne10_vdiv_vec2f_neon函数

4. ne10代码理解

1) FFT

ne10的FFT构建包含两类,一类为c2c(complex to complex),一类为r2c(real to complex)。

在项目中比较常用的是r2c,以ne10_fft_r2c_1d_float32_neon (ne10_fft_cpx_float32_t *fout, ne10_float32_t *fin, ne10_fft_r2c_cfg_float32_t cfg)函数为例,其输入为Input:{real[0], real[1],real[2],.... real[fftSize-2], real[fftSize-1]},输出为{real[0], imag[0], real[1], imag[1], real[2], imag[2].... real[fftSize/2], imag[fftSize/2]},即假设16点实数fft,变换后为8个点实部+8个点虚部。

此外还包含一个配置信息叫cfg,一般在调用上面函数前需使用函数

cfg = ne10_fft_alloc_r2c_float32 (fftSize);

进行初始化,这里fftSize为待FFT点个数。下面对具体函数进行分析

a. cfg = ne10_fft_alloc_r2c_float32(fftSize)

函数通过输入的FFT点个数,自动构造一个cfg结构体,



0 0
原创粉丝点击