凌元++陳原
摘 要
現(xiàn)場可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)由于其強大的并行信號處理能力,在雷達(dá)實時信號處理方面得到廣泛應(yīng)用。本文介紹了高層次綜合(High Level Synthesis,HLS)方法在雷達(dá)信號處理FPGA設(shè)計領(lǐng)域的開發(fā)流程及應(yīng)用優(yōu)勢,相對于傳統(tǒng)的設(shè)計方法,其具有開發(fā)效率高、測試驗證簡單、可重構(gòu)等優(yōu)點。以雷達(dá)信號處理中的矩陣自相關(guān)算法為例對比了HLS設(shè)計與傳統(tǒng)開發(fā)方式,獲得了幾乎相同的性能,而開發(fā)時間縮短了75%以上。
【關(guān)鍵詞】HLS FPGA 矩陣自相關(guān)
1 引言
隨著計算機技術(shù)的不斷發(fā)展,雷達(dá)數(shù)字信號處理的實現(xiàn)也從傳統(tǒng)的使用計算機,向使用高性能數(shù)字信號處理器發(fā)展,但本質(zhì)上,在這些平臺上實現(xiàn)數(shù)字信號處理還是純粹的軟件方法。近些年來,相控陣?yán)走_(dá)的發(fā)展帶來了雷達(dá)信號處理數(shù)據(jù)量的指數(shù)級增長,傳統(tǒng)的軟件處理方法已不能滿足實時的信號處理需求。FPGA由于其強大的并行信號處理能力、卓越的靈活性以及高性價比,引起了雷達(dá)信號處理者的興趣和高度關(guān)注。
傳統(tǒng)的FPGA設(shè)計采用原理圖或硬件描述語言(Hardware Description Language,HDL)進行輸入,其開發(fā)難度大、效率低、周期長,制約了其在雷達(dá)信號處理方面的應(yīng)用。HLS通過綜合器直接將C/C++描述的函數(shù)綜合成RTL代碼,大大簡化了設(shè)計和調(diào)試的過程,降低了開發(fā)難度。文獻[3]中介紹了Vivado HLS的簡易開發(fā)流程及在視頻處理上的應(yīng)用,其未詳細(xì)介紹HLS的開發(fā)優(yōu)勢和開發(fā)效率的比對。文獻[4]介紹了基于HLS的合成孔徑成像算法的設(shè)計和實現(xiàn),整個開發(fā)時間在6周左右。本文以Xilinx公司的Vivado HLS設(shè)計套件為例詳細(xì)介紹了基于HLS的雷達(dá)信號處理FPGA開發(fā)流程極其應(yīng)用優(yōu)勢,并以雷達(dá)信號處理中的矩陣自相關(guān)算法作為實例進行了設(shè)計對比,結(jié)果表明,基于HLS的設(shè)計獲得了幾乎相同的性能,但節(jié)約開發(fā)時間75%以上,同時設(shè)計的模塊具備可重構(gòu)性,適合雷達(dá)信號處理不同應(yīng)用場景需求。
2 HLS設(shè)計流程及優(yōu)勢
2.1 HLS設(shè)計流程
HLS是從高層次描述,之后綜合成可用的網(wǎng)表文件的技術(shù)。這里的“高”指采用C/C++等編寫程序,而不是傳統(tǒng)的HDL語言。Vivado HLS軟件將C/C++程序綜合轉(zhuǎn)換成為Verilog HDL或者VHDL代碼,之后進行下一步工作。其實際工作流程如圖1所示。
HLS采用約束腳本對代碼的綜合過程進行控制,以實現(xiàn)不同架構(gòu),使設(shè)計具有不同的通過率和資源消耗。采用HLS進行雷達(dá)信號處理FPGA設(shè)計可分為以下幾個步驟:
(1)根據(jù)信號處理功能需求,確定功能模塊設(shè)計架構(gòu);
(2)編寫功能模塊的C/C++程序,并編寫測試激勵,對程序進行測試仿真;
(3)在通過C/C++仿真的前提下,根據(jù)用戶需求修改代碼和添加優(yōu)化指令,獲取用戶所需要的性能參數(shù)、資源時序、接口配置等;
(4)進行C/C++綜合,并根據(jù)綜合報告進一步通過代碼風(fēng)格和優(yōu)化指令進行優(yōu)化設(shè)計,直到得到的綜合結(jié)果滿足設(shè)計需求;
(5)進行C/C++綜合,將C/C++代碼轉(zhuǎn)換為寄存器傳輸級(Register Transfer Level,RTL)代碼;
(6)進行C/RTL協(xié)仿真,即HLS將優(yōu)化后的C/C++代碼和原測試激勵進行RTL轉(zhuǎn)化,并完成RTL仿真;
(7)實例化HLS封裝IP,進行系統(tǒng)集成。
2.2 HLS設(shè)計優(yōu)勢
基于HLS的雷達(dá)信號處理FPGA設(shè)計,相對于傳統(tǒng)的開發(fā)方式在功能設(shè)計、測試驗證、更新與維護方面均具備優(yōu)勢:
功能設(shè)計:采用C/C++進行源代碼設(shè)計,快速實現(xiàn)函數(shù)功能,編譯器自動將C/C++代碼轉(zhuǎn)換為RTL實現(xiàn)代碼,設(shè)計時間縮短80%以上,提升雷達(dá)信號處理系統(tǒng)開發(fā)效率。
測試驗證:通過C/C++的仿真進行算法的功能驗證,通過C/C++與Modelsim的協(xié)仿真可快速實現(xiàn)RTL代碼的功能驗證,而無需重新編寫測試激勵,相對于傳統(tǒng)的驗證方法,測試更加全面,測試速度加快。
更新與維護:由于采用C/C++語言設(shè)計,更新和維護更加容易,通過修改C/C++代碼,可實現(xiàn)函數(shù)功能的更新,優(yōu)化。根據(jù)信號處理不同通過率、不同平臺不同的資源和性能需求,修改相關(guān)約束腳本或參數(shù),可快速實現(xiàn)功能模塊的重構(gòu),重新生成滿足系統(tǒng)需求的RTL代碼。
3 基于HLS的矩陣自相關(guān)算法設(shè)計實例
3.1 設(shè)計方案
設(shè)矩陣A為一個M行N列的復(fù)數(shù)矩陣,則對A求自相關(guān)得到:
R=A*A (1)
求得的矩陣R為一個M*M的方陣,且為厄米特(Hermitian)矩陣,根據(jù)厄米特矩陣的共軛對稱性質(zhì),只需求取其下三角元素(包含對角線)的結(jié)果。其計算量約為(M*(M+1)/2)*N次復(fù)數(shù)乘累加運算。當(dāng)M,N較大時,其運算量巨大,例如M=48,N=128時,其需要進行150528次復(fù)數(shù)乘累加運算。
3.1.1 可定義的運算單元滿足不同資源和性能需求
假設(shè)系統(tǒng)時鐘200MHz,一次復(fù)數(shù)乘累加運算需要消耗20個時鐘周期,則需要15.0528ms的時間才能完成計算,這在很多情況下往往不能滿足雷達(dá)的實時信號處理需求。
為降低處理時間,在HLS設(shè)計中采用多個運算單元并行計算,每個運算單元計算一部分元素。由于各元素的計算結(jié)果互不依賴,因此可將所需要計算的(M*(M+1)/2)個元素均分至各運算單元中,如圖2所示。
考慮不同信號處理的應(yīng)用場景的需求,在設(shè)計中最大矩陣維數(shù)M、N為參數(shù),向下兼容,計算單元數(shù)也可通過參數(shù)定義,以滿足不同的資源和性能需求。
3.1.2 流水線設(shè)計(Pipeline)
流水線是影響FPGA處理通過率的重要因素,其通過將一個復(fù)雜的操作步驟分解為多個子步驟,每個子步驟在一定的時間內(nèi)完成,則其通過率取決于最慢的一個步驟的處理時間,而不是所有步驟的總時間,因此提高了設(shè)計通過率。
HLS采用Pipeline約束設(shè)置流水線,其設(shè)置的為流水線子步驟的處理延遲,當(dāng)設(shè)置該參數(shù)后,HLS會自動將復(fù)雜的計算分解為多個簡單的步驟以提高通過率。當(dāng)不能滿足設(shè)置的需求時,其也會自動地優(yōu)化成最優(yōu)的流水線處理架構(gòu)。在本設(shè)計中,為提升復(fù)數(shù)乘累加的通過率,對其進行Pipeline設(shè)置,如圖3所示。
3.1.3 數(shù)據(jù)流模式(Dataflow)
由于HLS是采用C/C++等語言進行編程,C/C++語言是針對于CPU進行設(shè)計,其必須執(zhí)行完一個函數(shù)或一句指令,才會執(zhí)行下一個函數(shù)或語句。對于本設(shè)計來說,則意味著必須等待數(shù)據(jù)輸入完畢后才能進行計算,顯然這增加了處理的延遲。采用Dataflow指令進行約束時,其將對代碼進行優(yōu)化,但前一個函數(shù)或語句執(zhí)行得到可用的輸出時,下一個函數(shù)或語句能夠立即進行計算,而無需等待前一個函數(shù)或數(shù)據(jù)完全計算完畢,降低了處理的延遲。
3.2 設(shè)計結(jié)果及對比分析
對不同的參數(shù)進行了HLS的設(shè)計,在Xilinx FPGA芯片 xc7vx690tffg1158-2中進行了綜合,將其與Verilog設(shè)計的結(jié)果進行了對比,得到設(shè)計的結(jié)果如表1所示。
從表1的對比結(jié)果可以看出,在相同的參數(shù)和計算單元下,HLS消耗的BRAM和DSP資源略高于Verilog的設(shè)計結(jié)果,計算時間也略多10%,其設(shè)計達(dá)到的最高運行時鐘頻率(Fmax)高于Verilog的設(shè)計綜合結(jié)果。采用Verilog進行設(shè)計及測試驗證總耗費了約1個月的時間,而采用HLS僅僅約一周的時間就完成了設(shè)計和測試驗證,節(jié)省時間約75%,且HLS設(shè)計的模塊具備可重構(gòu)性,能夠滿足不同的應(yīng)用場景需求。
4 結(jié)語
本文詳細(xì)論述了HLS在雷達(dá)信號處理FPGA方面的設(shè)計流程和應(yīng)用優(yōu)勢,其具有開發(fā)效率高、測試驗證簡單、可重構(gòu)等優(yōu)點。在Xilinx公司的Vivado HLS設(shè)計套件中以雷達(dá)信號處理中的自相關(guān)算法作為實例與傳統(tǒng)設(shè)計方法進行了對比,結(jié)果表明,采用HLS設(shè)計可達(dá)到與采用硬件描述語言進行設(shè)計可達(dá)到幾乎相同的性能和資源消耗,但其開發(fā)時間相對于傳統(tǒng)設(shè)計方法提示75%左右,同時可通過不同的參數(shù)及約束指令生成具備不同資源和性能的功能模塊,以滿足不同的應(yīng)用場景需求,適宜在雷達(dá)信號處理領(lǐng)域推廣應(yīng)用。
參考文獻
[1]何賓,張艷輝.Xilinx FPGA數(shù)字信號處理權(quán)威指南-從HDL到模型和C的描述[M].北京:清華大學(xué)出版社,2014.
[2]吳順君,梅曉春.雷達(dá)信號處理與數(shù)據(jù)處理技術(shù)[M].北京:電子工業(yè)出版社,2008.
[3]黨宏社,王黎,王曉倩.基于Vivado HLS的FPGA開發(fā)與應(yīng)用研究[J].陜西科技大學(xué)學(xué)報,2015(02):155-159.
[4]Raymond R.Hoare II,Denis Smetana,Accelerating SAR Processing on COTS FPGA Hardware Using C-to-Gates Design Tools[J].High Performance Extreme Computing Conference (HPEC),2014.
[5]Xilinx,Vivado Design Suite User Guide:High-Level Synthesis(UG90,v2016.2),2016.8.
作者單位
南京電子技術(shù)研究所 江蘇省南京市 210039