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