天天看點

projectne10向ZedBoard移植1. 下載下傳projectne10源代碼2. 編譯projectne10庫3. 關于projectne10庫4. ne10代碼了解

目标:在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個測試檔案

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結構體,

繼續閱讀