本文基於Xilinx的ZYNQ7020平臺,實現ARM系統如何調用底層FFT IP核實現相應演算法。ZYNQ平臺內部包括兩部分,即PL和PS。PL為FPGA邏輯部分,PS為雙核ARM9 。FPGA與ARM9之間的通信採用高性能的AXI匯流排,PS為PL提供系統時鐘,複位等基本信號。本文是在ARM9系統外圍掛載AXI介面的DMA來控制FFT IP核的數據輸入輸出。
下面詳細介紹具體搭建步驟。
第一步:創建新工程,晶元型號為zynq7020:xc7z020clg484-2,創建好後,點擊右側IP Integrator,創建系統——zynq_7020_fft_system。
點擊OK,跳轉到系統構建區。
第二步:在系統構建區,點擊Add IP,搜索zynq processing system,點擊後加到區域內
zynq系統添加構建後如下圖所示。
第三步:配置zynq系統,添加系統外設,內存,配置時鐘,中斷系統。
配置系統完畢後,創建DDR3埠,時鐘和複位輸出,及其他IO埠。
第四步:點擊Add IP,搜索DMA,添加到系統構建區。
配置DMA的參數。
第五步:添加concat ip,將DMA的輸入輸出中斷連接concat ip的輸入埠,將輸出埠連接到zynq的中斷埠上。
點擊運行自動連接布線。
布線連接後如下圖所示。
第六步:添加兩個AXISTREAM FIFO IP核,分別連接到DMA的輸入輸出埠,同時配置FIFO的存儲深度,及數據位寬。
第七步:右鍵點擊generate output products,生成我們構建的系統。
等待幾分鐘,生成後,系統中添加了一些文件及IP。
右鍵點擊create HDL Wrapper,添加系統頂層文件。
按默認提示點擊OK即可。
頂層文件添加完成後如下圖所示。
致此zynq的ps部分已搭建完畢。
第七步:點擊IP Catalog 搜索FFT IP,雙擊FFT IP核。
進入FFT IP核配置界面,本文選擇的數據類型為float型,運行時鐘100Mhz,配置流水線等,點擊OK,生成FFT IP。
創建FFT IP 頂層文件,實例化FFT IP,便於FFT IP的模擬,調用。
頂層文件中添加如下代碼。
第八步:在PS的系統頂層文件zynq_7020_fft_system_wrapper中,實例化FFT IP的頂層文件FFT_Top,如下所示。
第九步:創建FFT IP核的模擬文件,單獨對FFT IP進行模擬模擬測試。
對於浮點數的FFT IP模擬測試,需要提供單精度浮點數格式(32位的二進位數),且提供虛部和實部。blk_mem_gen_real存放實部,長度為1024,blk_mem_gen_imag存放虛部,長度為1024,本文的FFT IP是
之前已調試好的IP測試,直接調用即可。
模擬時序。
FFT IP輸入時序。
FFT IP輸出時序。
第十步:測試完成後,生成bit流,不需配置管腳。
生成bit流後,可以查看系統資源利用率。
第十一步:導出Hardware。
啟動SDK。
第十二步:創建fft_test工程,按默認配置,點擊next。
創建main.c 。
添加DMA測試常式,同時提供FFT IP所需實部和虛部,且都為單精度浮點數。修改check_data函數,將接收的數據存為文件,導入到matlab中進行數據比對。
本文經過以上步驟實現了zynq系統下的FFT IP核調用,但還需在硬體平臺下進行驗證。希望有zynq平臺的同學可以按此步驟驗證,也可擴展訓練,掛載其他IP核。
推薦閱讀: