張俊濤,付芳琪,曹夢娜
(陜西科技大學(xué)電氣與信息工程學(xué)院,西安710021)
基于Vivado HLS的FFT IP核設(shè)計與實現(xiàn)
張俊濤*,付芳琪,曹夢娜
(陜西科技大學(xué)電氣與信息工程學(xué)院,西安710021)
研究基于Xilinx高層次綜合工具HLS設(shè)計FFT IP核的新方法,并在Zynq平臺上搭建音頻頻譜顯示系統(tǒng)用于對設(shè)計的FFT IP核進行測試。首先用MATLAB生成1 024點FFT算法所需要的旋轉(zhuǎn)因子,然后用C語言編寫FFT算法程序后經(jīng)HLS綜合成IP核并進行了兩次優(yōu)化,與優(yōu)化前相比延遲時間節(jié)省了19%到40%,LUT資源節(jié)省18.5%。測試結(jié)果表明,所設(shè)計的FFT IP能夠成功地實現(xiàn)音頻信號的頻譜分析。
高層次綜合;FFT;IP核;設(shè)計;頻譜;測試
FFT算法在數(shù)字信號處理中占有非常重要的地位,用于對信號進行頻譜分析。FFT既可以通過軟件編程的方式實現(xiàn),也可以用FPGA實現(xiàn)。由于FPGA具有并行處理的特點,因此基于FPFA實現(xiàn)的FFT具有更高的運算速度和可靠性。但設(shè)計FFT IP核需要掌握硬件描述語言,并在提高時序等性能方面需要進行反復(fù)仿真和優(yōu)化,為滿足頻譜處理在精度和實時性方面需要,開發(fā)難度大。
HLS是Xilinx新一代開發(fā)平臺Vivado中內(nèi)嵌的高層次綜合工具,通過C、C++或SystemC對信號或數(shù)字處理進行建模,然后通過HLS轉(zhuǎn)換成RTL模型,大大提高了FPGA開發(fā)效率,加速了FPGA在高性能數(shù)字信號處理領(lǐng)域的應(yīng)用。
本文基于HLS設(shè)計FFT IP核,與傳統(tǒng)實現(xiàn)方法相比降低了設(shè)計難度,縮短了設(shè)計時間,并便于優(yōu)化處理以提高速度和資源利用率。
FFT是離散傅里葉變換DFT的快速算法。FFT算法可分為兩大類,基于時域抽樣法和基于頻域抽樣法。本文使用基-2時域抽樣FFT算法,下面是該算法具體介紹。
1.1基-2時域抽樣FFT算法原理
時域抽樣法FFT處理N=2M的離散信號x(k),首先將變量k按奇偶分為兩列,每列長度為N/2。
考慮X1(k)和X2(k)具有周期性,周期為N/2,同時旋轉(zhuǎn)因子所以X(k)可以分解成前后長度為(N/2)的兩段,其結(jié)果如下式所示。
上式是一次分解后FFT算法,對于N=2M點離散信號來說可以將其進行l(wèi)og2N次分解來實現(xiàn)FFT算法,也就是說該算法由M級碟形運算構(gòu)成,每一級有N/2個蝶形運算。M級FFT算法其復(fù)乘次數(shù)為復(fù)加次數(shù)為NL=NlogN,與
3) 對景也從一個側(cè)面體現(xiàn)出文化的滲透,它反映出特定階級的思想文化與價值觀念,它是一種符號、一種意象,記錄了一座城市的歷史.
2DFT算法相比復(fù)乘運算量大大減少,因此易于工程上實現(xiàn)[1-3]。
Vivado HLS工具的應(yīng)用突破了以往開發(fā)FPGA時采用HDL文本語言設(shè)計系統(tǒng)造成的瓶頸,通過C、C++或System C可以對信號或系統(tǒng)實現(xiàn)直接建模,是FPGA開發(fā)的一種全新的設(shè)計理念和想法。開發(fā)人員通過HLS開發(fā)工具完成以All Programma?ble SOC為基礎(chǔ)、利用軟硬件協(xié)同設(shè)計方式的產(chǎn)品開發(fā)。利用HLS設(shè)計工具對FPGA進行開發(fā)時效率就能夠得到很大程度的提高,用戶不再需要具有特別扎實的硬件知識和熟練HDL編程就能夠建立數(shù)學(xué)模型,因此HLS在FPGA開發(fā)中將占據(jù)著重要的地位和實用價值,對數(shù)字信號的發(fā)展起到了極大的推動作用,加速了FPGA在高性能信號和數(shù)據(jù)領(lǐng)域的推廣。這種方法能減少FPGA的開發(fā)時間,還可以在很大程度上利用已經(jīng)存在的可靠軟件代碼。
基于Vivado HLS進行設(shè)計的流程圖1所示,其中最關(guān)鍵的任務(wù)是利用C或C++語言編寫一個具備特定作用的函數(shù)和適用該設(shè)計的測試平臺,該平臺可以檢測搭建的系統(tǒng)的正確性和性能,然后再通過C仿真器對模型所具備的功能進行檢驗。若結(jié)果滿足對設(shè)計提出的需求,便使用Vivado HLS工具把C模型轉(zhuǎn)換為相應(yīng)的RTL級模塊[4-5]。有了RTL模塊之后,就可以通過HLS內(nèi)置的仿真器來檢驗建立的架構(gòu)和功能。
圖1 Vivado HLS設(shè)計流程圖
從FFT原理可以看出,旋轉(zhuǎn)因子在計算中起著非常關(guān)鍵的作用。由于旋轉(zhuǎn)因子可表示為為求旋轉(zhuǎn)因子的值,必須計算正余弦函數(shù)值。在序列N很大的情況下,計算正余弦的運算量很大,直接影響FFT的運算速度,所以旋轉(zhuǎn)因子的產(chǎn)生方式以及產(chǎn)生所占用的時間會直接影響整個運算速度[6-7]。
本文首先用MATLAB產(chǎn)生所將需要的旋轉(zhuǎn)因子放在數(shù)組里存儲,然后使用Vivado HLS工具實現(xiàn)FFT算法并封裝成IP核。通過對存儲器進行查找獲取需要的旋轉(zhuǎn)因子值,以存儲空間來換取運算速度的的提高。
3.1旋轉(zhuǎn)因子的生成
本文采用查表法,利用MATLAB軟件生成所需要的旋轉(zhuǎn)因子的正弦系數(shù)與余弦系數(shù)并將它們保存在文檔中用于碟形單元計算,使以后計算1024點的FFT時可以直接調(diào)用,避免了進行碟形運算時才開始計算所需要的旋轉(zhuǎn)因子,這樣很大程度上減少計算復(fù)雜度節(jié)省了時間[10-12]。根據(jù)WN潛在的對稱性,因而只需要計算N/2長度的WN系數(shù)值就足夠,旋轉(zhuǎn)因子的正弦部分寫入到sin_data.dat文件中,余弦部分寫入到cos_data.dat文件中,生成旋轉(zhuǎn)因子的MATLAB代碼如下所示。
3.2利用HLS設(shè)計FFT IP核
由于HLS可以運行C/C++/System語言,本文直接使用C語言完成FFT算法編程,并對FFT算法進行優(yōu)化,使其性能與速度都有所提升,將FFT算法轉(zhuǎn)換成硬件實現(xiàn)并創(chuàng)建FFT IP,供在Vivado中搭建音頻頻譜分析系統(tǒng)時使用。
(1)新建Vivado工程,利用Vivado HLS工具導(dǎo)入FFT設(shè)計的C源代碼fft.c,頭文件fft.h、旋轉(zhuǎn)因子sin_data.dat和cos_data.dat。部分代碼如下。
(2)導(dǎo)入共同的測試數(shù)據(jù)in.dat以及系統(tǒng)的測試程序fft_test.c。
(3)進行硬件配置,時鐘周期選擇10(ns),part se?lection選擇為:Zedboard,芯片型號為xc7z020clg484。
(4)運行“Run C simulation”命令執(zhí)行C仿真,測試FFT程序設(shè)計的正確性。在運行c仿真的過程中,Console(控制臺)窗口內(nèi)給出仿真過程相關(guān)的信息。圖2所示的是0~1 023共1 024點數(shù)據(jù)經(jīng)過FFT運算后在控制臺打印的輸出結(jié)果。在保證測試數(shù)據(jù)相同情況下,利用MATLAB自帶FFT算法來驗證所設(shè)計算法正確性,圖3是調(diào)用MATLAB內(nèi)自帶FFT函數(shù)輸出結(jié)果。通過對比分析由于精確度不一樣,在允許范圍內(nèi)產(chǎn)生微小的誤差,證明算法設(shè)計是正確的。
圖2 控制臺打印結(jié)果
圖3 MATLAB仿真結(jié)果
(5)將FFT算法進行綜合,綜合成功后成功生成System C、VHDL、和Verilog格式的RTL文件。通過查看性能分析報告,Pipelined欄下面顯示“no”表示循環(huán)沒有實現(xiàn)流水線操作,訪問存儲器沒有執(zhí)行優(yōu)化操作,因此此處實現(xiàn)的FFT算法并未達到最優(yōu)。使用HLS工具可以從粗優(yōu)化、精優(yōu)化、總線化3個方面對設(shè)計進行優(yōu)化,實現(xiàn)算法從串行運算到并行運算的轉(zhuǎn)換,從而提高對數(shù)據(jù)的處理速度。優(yōu)化完成后,對FFT算法再進行綜合。
①粗優(yōu)化命令。對copy2add、stage1_loop循環(huán)執(zhí)行pipeline流水線操作命令,該命令的作用是使函數(shù)執(zhí)行方式由串行執(zhí)行變?yōu)槿⑿袌?zhí)行,對頂層函數(shù)fft進行dataflow數(shù)據(jù)流粗粒度優(yōu)化操作。
②精優(yōu)化命令。根據(jù)要處理數(shù)據(jù)的類型和位寬,進行優(yōu)化,降低資源消耗。本次設(shè)計中輸入數(shù)據(jù)為16 bit音頻信息,因此可以將輸入數(shù)據(jù)類型設(shè)置為uint16:即16 bit寬度的無符號整型數(shù)據(jù),程序中的數(shù)據(jù)類型根據(jù)實際情況也設(shè)置成相應(yīng)的類型。
③頂層函數(shù)的端口總線設(shè)置。為了提高對大量數(shù)據(jù)的處理速度,采用AXI4 Stream的方式來進行數(shù)據(jù)的處理,即CPU通過使用streaming方式直接和IP通信。
表1所示是運行FFT算法優(yōu)化前后所占用的延遲和吞吐量信息,表2給出了該算法優(yōu)化前后所占用的資源信息。通過觀察可以看出1024點的FFT算法延遲時間經(jīng)過優(yōu)化之后大大減少,資源占用除了BRAM_18K增多,F(xiàn)F和LUT均減少了很多,最終提高了FFT算法性能和資源利用率。
表1 優(yōu)化前后延遲和吞吐量信息
表2 優(yōu)化前后資源占用情況
(6)將經(jīng)過優(yōu)化操作的FFT程序進行C/RTL聯(lián)合仿真,測試生成的RTL代碼的正確性,經(jīng)過程序驗證可以得出和用C仿真相同的結(jié)果,表明C語言實現(xiàn)的RTL代碼是正確的。然后將生成的RTL代碼以IP的形式導(dǎo)出,供接下來在FPGA上進行頻譜分析時使用。
3.3HLS工具實現(xiàn)FFT IP核優(yōu)勢
使用Vivado HLS高級綜合工具來實現(xiàn)FFT IP核優(yōu)勢在于大大減少工作量,縮短FPGA開發(fā)周期。我們僅需要用C、C++、System C等高級語言來完成FFT算法描述,HLS工具負責(zé)將算法轉(zhuǎn)換成RTL級實現(xiàn),將用高級語言描述的算法中的各個模塊按照一定的規(guī)則和傳統(tǒng)的硬件實現(xiàn)所需模塊進行一一的映射,而以往FPGA實現(xiàn)FFT IP核時需要考慮5個模塊即輸入選擇模塊、存儲模塊ROM、存儲模塊RAM、蝶形運算模塊、時序控制模塊在硬件上如何實現(xiàn),這使設(shè)計變得復(fù)雜而且對不熟悉硬件描述語言的工程師而言更為困難增加了工作量。
搭建一個完整的頻譜顯示系統(tǒng),以測試FFT IP核的正確性。系統(tǒng)主要包含F(xiàn)FT IP核、用于顯示的OLED IP核以及控制音頻信號采集的Audio IP構(gòu)成。對設(shè)計的各個子模塊分別進行設(shè)計和驗證,最終搭建出完整的系統(tǒng)。通過軟硬件協(xié)同設(shè)計[8]這種方式設(shè)計并調(diào)試搭建的硬件系統(tǒng)和編寫的控制程序,完成軟件和硬件各自的設(shè)計之后,把兩個部分結(jié)合起來協(xié)同調(diào)試系統(tǒng),隨機播放一段音頻信號,并由音頻輸出接口得到隨機的音頻信息,在經(jīng)過硬件PL部分的FFTIP實現(xiàn)頻譜處理后傳送到OLED進行頻譜的實時顯示。完整的能夠?qū)崟r顯示隨機音頻頻譜的硬件系統(tǒng)結(jié)構(gòu)如圖4所示。
圖4 頻譜顯示系統(tǒng)結(jié)構(gòu)圖
整體系統(tǒng)的搭建是在Vivado環(huán)境中完成的,系統(tǒng)測試是以軟硬件協(xié)同設(shè)計的思想來實現(xiàn)的。整個驗證過程包括硬件部分和軟件部分,硬件部分是在Vivado環(huán)境中搭建測試系統(tǒng),軟件部分利用Vivado設(shè)計套件提供的SDK工具編寫頻譜顯示系統(tǒng)的驅(qū)動程序以及控制程序,然后是將硬件系統(tǒng)生成的比特流文件燒寫至開發(fā)板中,利用軟件編寫的程序進行運行方式的控制。
4.1音頻頻譜顯示系統(tǒng)搭建
在Vivado開發(fā)環(huán)境下搭建整體系統(tǒng),利用自己創(chuàng)建的FFT IP、OLED IP、音頻IP以及Xilinx提供的IP來完成完整的頻譜顯示系統(tǒng)的搭建,將產(chǎn)生的比特流燒制Zynq系列的ZedBoard開發(fā)板上[9-10]。可以通過在OLED觀察音頻頻譜來判斷是否能夠正確的測試所設(shè)計的系統(tǒng)。圖5為使用自己設(shè)計FFT IP核搭建的音頻顯示系統(tǒng)。
圖5 使用自己設(shè)計FFT IP搭建頻譜顯示系統(tǒng)
利用SDK軟件將各個IP核的驅(qū)動模塊統(tǒng)一起來,組成一個完整的系統(tǒng),進行音頻頻譜信息的顯示。
4.2系統(tǒng)測試及結(jié)果分析
在電腦上的播放器播放一段音頻,通過耳機輸出到開發(fā)板,經(jīng)FFT IP核處理后在OLED上顯示出音頻信號的頻譜圖。圖6為自己設(shè)計FFT IP核頻譜分析結(jié)果。
圖6 自己設(shè)計FFT IP頻譜分析結(jié)果
結(jié)果表明使用HLS高層次綜合工具設(shè)計的FFT IP能夠完成對信號的頻譜處理并輸出頻譜信息,說明HLS高層次設(shè)計工具在實際應(yīng)用中能夠發(fā)揮重大的作用,在已有IP不能滿足設(shè)計要求時,不用使用傳統(tǒng)HDL語言生成IP的方法,使用Vivado HLS工具進行算法設(shè)計優(yōu)化生成RTL級模型最后以IP-XACT等多種可以讓別的Xilinx工具識別并接受的類型格式輸出并轉(zhuǎn)化為IP的方式,可以顯著的提高生產(chǎn)效率。
利用Vivado高層次綜合工具HLS使用C語言進行FFT算法編程仿真優(yōu)化并封裝成IP核,充分體現(xiàn)了Vivado HLS的優(yōu)勢,為不熟悉HDL語言人員提供一種新的設(shè)計思路。另外,由于所設(shè)計的FFT IP核輸入部分可以是實數(shù),而且FFT IP核本身可以進行倒序輸入順序輸出,因此與Xilinx提供的FFT IP核相比,不需要進行數(shù)據(jù)的前處理和后處理。
[1]王華英,于夢杰,劉飛飛,等.基于快速傅里葉變換的四種相位解包裹算法[J].強激光與粒子束,2013,25(5):1129-1133.
[2]楊晶,康寧,王元慶.基于低成本FPGA的FFT設(shè)計實現(xiàn)[J].電子器件,2013,36(4):506-509.
[3]陳天峰,師劍軍,崔瓊.基于數(shù)據(jù)重復(fù)的快速傅里葉算法改進[J].探測與控制學(xué)報,2013,35(5):79-82.
[4]James Hrica.利用賽靈思Vivado HLS實現(xiàn)浮點設(shè)計[J].今日電子,2013(1):34-38.
[5]徐家惠,戚海峰,高健,等.基于Vivado HLS的AC97音頻系統(tǒng)設(shè)計[J].實驗室研究與探索,2014,33(12):36-37.
[6]顧艷麗,周洪敏.基于FPGA的新型高速FFT算法研究與實現(xiàn)[J].電子器件,2008,31(4):1249-1251.
[7]陳豐,潘翔.基于FFT的矩形陣波束形成算法[J].傳感技術(shù)學(xué)報,2006,19(6):2588-2590.
[8]唐守龍,劉昊,陸生禮,等.淺談SoC設(shè)計中的軟硬件協(xié)同設(shè)計技術(shù)[J].電子器件,2002,25(2):183-186.
[9]黃翔,王小華,黃學(xué)新.基于FPGA的頻譜分析儀的設(shè)計與研制[J].微型機與應(yīng)用,2011,30(24):20-22.
[10]Abdullah S S,Nam H,Mcdermot M,et al.A High Throughput FFT Processor with no Multipliers[C]//Computer Design,2009. ICCD 2009.IEEE International Conference on.IEEE,2009:485-490.
[11]Xiao X,Oruklu E,Saniie J.Reduced Memory Architecture for CORDIC-Based FFT[C]//Circuits and Systems(ISCAS),Proceed?ings of 2010 IEEE International Symposium on.IEEE,2010:2690-2693.
[12]Malashri A,Paramasivam C.Low Power and Memory Efficient FFT Architecture Using Modified CORDIC Algorithm[C]//Infor?mation Communication and Embedded Systems(ICICES),2013 International Conference on.IEEE,2013:1041-1046.
張俊濤(1966-),男,漢族,陜西西安人,教授,碩士生導(dǎo)師,研究方向為軟件無線電、信號與信息處理、EDA技術(shù)及應(yīng)用;
付芳琪(1990-),女,山西運城人,碩士研究生,研究方向為信號與信息處理、EDA技術(shù)及應(yīng)用,1297412322@qq.com。
Design and Implementation of FFT IP Core Based on Vivado HLS
ZHANG Juntao*,F(xiàn)U Fangqi,CAO Mengna
(Shaanxi University of Science and Technology Institute of Electric and Information Engineering,Xi'an 710021,China)
A new method of designing FFT IP core based on Xilinx high-level synthesis tool HLS is studied,and a audio spectral display test system is built for testing the FFT IP core.First twiddle factors of 1 024-point FFT algo?rithm aregenerated with MATLAB.Then FFT algorithm program written in C language is integrated into the IP core and is optimized twice.Compared with the previous optimization the delay time has saved 19%to 40%,LUT re?sources have saved 18.5%.The test result shows that FFT IP core successfully implements spectral analysis of the audio signal.
high-level synthesis;FFT;IP core;design;spectrum;test
TN851
A
1005-9490(2016)02-0374-05
EEACC:614010.3969/j.issn.1005-9490.2016.02.026
2015-06-02修改日期:2015-07-14