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