張佳琪 文騰飛 李涼海 張振華
摘要:介紹了基于Matlab的Simulink開發工具進行FPGA自動代碼生成的過程。在信號處理領域,FPGA的開發存在開發周期長、開發成本大及靈活性差等問題,借助Simulink工具完成FPGA的快速開發,在完成Matlab仿真的基礎上,搭建了合成孔徑雷達后向投影算法模型,得出了模型結果,并將其與Matlab仿真結果進行對比,分析了自動生成FPGA代碼的成本,驗證了基于Matlab的FPGA開發的有效性。
關鍵詞:信號處理;FPGA代碼自動生成;后向投影算法
中圖分類號:TP391文獻標志碼:A文章編號:1008-1739(2020)11-60-3

0引言
近年來,FPGA已經成為高性能數字信號處理系統的關鍵元件,具有實現高性能并行算法的能力,是構成高性能可定制數據通路處理器的理想器件。然而FPGA的開發受到以下限制[1-3]:①軟件開發人員不熟悉硬件設計;②基于并行硬件系統的并行程序設計與基于Matlab仿真的串行程序設計有很大的不同。對此,MathWorks公司對Matlab進行高級開發,實現從Matlab到硬件描述語言的直接轉換。開發人員利用Simulink模塊進行算法模型搭建,將模型進行定點化設計后利用HDL Coder將模型轉換為需要的硬件語言。
1傳統FPGA開發的弊端
傳統的基于硬件描述語言的FPGA硬件設計開發過程需要編寫大量代碼,工作量大,且需要系統設計師、硬件工程師和軟件工程師協同工作,導致需要的設計人員多、開發周期長,且隨著軟件代碼的更改,硬件語言需要重新進行時序調試與測試,開發的可靠性差。
近年來Xilinx開發的System Generator軟件能夠解決上述問題,實現由軟件到硬件描述語言的完美轉換,但其開發的局限性較大,且通過模塊轉換成的代碼可讀性較差,對于硬件設計人員來說可更改性較差,因此本文選用MathWorks公司自行開發的從Matlab仿真到Simulink建模,再到可自動生成Verilog或者VHDL代碼。
2合成孔徑雷達BP算法原理
文獻[4-5]分析了后向投影(BP)算法的流程,算法主要分2個部分:①原始回波數據進行距離脈壓的過程,采用文獻[6]的方式生成;②尋址與投影過程,主要采用狀態機的方式編寫,2個過程需按照順序執行,總體設計框圖如圖1所示。

圖1中,,分別代表第個方位向網格點數和第個距離向網格點數,代表第個脈沖回波。本算法的成像網格共有256×70個像素點,因此和的范圍是1~70,的范圍是1~256。輸出RES代表了成像點(,)的成像結果。根據BP算法的基本原理和步驟,基于Verilog HDL的總體思路如下:
State 0:初始狀態下若,均為1,則跳到State 1。
State 1:在State 1中主要進行成像點與各脈沖之間延時的計算,并完成單個成像點在各脈沖的回波散射響應相干疊加。,不變,從1加到70,當=70時,表示得到了該成像點在所有通道回波中的響應幅值,跳到State 2;
State 2:根據程序網格點與各脈沖之間距離得到散射系數,并將散射回波響應與散射系數進行乘疊加,跳到State 3;
State 3:將成像點在所有通道的響應幅值全部疊加完成,將的值賦給,完成對(,)點的成像。此時判斷和的值是否已遍歷整個成像區域。若=70且=256,說明已經對最后一個成像點完成了成像,回到初始狀態;否則,若=70且<256,說明己經完成整個成像區域第行的最后一個成像點,下一個需要成像的是+1行的第一個成像點,故令= +1,=1,跳回State 1對下一個成像點進行成像。否則,若<70,說明還沒有對第行的所有成像點完成成像過程,令= +1并跳回State 1,繼續對下一個成像點進行成像,循環可以完成對256×70像素成像區域的成像。
3利用Matlab完成BPA的FPGA模塊設計
3.1數據源產生模塊
原始回波數據使用經過下變頻和8 bit量化后的信號完成,該回波數據可以從Matlab中得到。原始回波數據構成了一個256×70的矩陣,共17 920個數據,這些數據需要被調用進行距離脈壓,由于矩陣是一個256×70的矩陣,在Simulink仿真中需要將它轉換為一個1×(256×70)的一維向量,采用Matlab命令為:B=reshape(,1,256×70)。
3.2距離脈壓模塊
SAR發射信號為線性調頻信號,基于線性調頻信號的脈沖壓縮可以通過匹配濾波處理來實現,其原理見文獻[4],該文獻指出Xilinx FPGA的FFT的IP核的流水線Streaming I/O結構有很好的數據吞吐能力。
comp_mult模塊完成頻域脈壓的復乘功能,為了提高復乘精度首先通過提前運算得到參考函數值;采用將其存入ROM的方式,直接從ROM中提取參考函數值的方法確保匹配濾波的準確性,輸入的參考函數為14位有符號小數,分別將實部與虛部相乘得到輸出結果為32位有符號小數。
脈壓結果為res_PC,在尋址模塊會被反復調用,將其存儲到一個雙端口RAM中,深度為17920,寫入地址為1~17920。
3.3延時計算與尋址模塊設計
延時計算與尋址模塊實現的功能是圖1的遍歷與查找脈壓結果完成乘累加模塊實現算法。
在一步一停假設下[7],計算網格點(,)到每一個雷達載機的延時,在Matlab中的具體實現方式為=sqrt((R( )).^2+(A( )-tnan( )×V ).^2),跟據addr =1 024×( -1)+p/Delta_R得到距離脈壓后數據的地址,讀取雙端口RAM對應地址的脈壓數據。該過程的時序為圖2所示的find_addr模塊,通過控制3個HDL counter的計數完成,,的遍歷過程。

4仿真結果
為了清晰地看到模型結果,回波數據采用1個點目標回波。首先將結果顯示在scope中,如圖3所示,然后將其保存到Matlab的workspace中,結果如圖4所示,Matlab仿真結果如圖5所示。將Simulink仿真結果與Matlab結果相比較得到誤差:實部相對誤差在±4%以內,虛部相對誤差在±3%以內精度相近,且速度滿足要求。存在誤差的原因是進行Simulink仿真時對小數部分進行了取整,且模型運算過程中為了節約資源會對一些模塊位數進行轉換,使數值有所近似。



利用HDL code工具首先進行各個模塊的HDL code檢查,將全部模塊進行HDL Model Checker之后便可以將模型轉換為所需要的硬件語言,生成Verilog代碼。
5結束語
采用MathWorks公司提供的正版Matlab工具自帶的Simulink可以很方便地完成所需的通用數字信號處理模塊,該方法簡單、有效,而且能夠根據Matlab代碼的更新靈活地對模型進行更改與測試,避免了傳統FPGA設計開發中復雜的時序測試,降低開發周期,提高了系統工作的可靠性。這一技術在算法實現方面無需花費太多時間在硬件語言代碼編寫與調試,既節約了開發成本又能提高開發效率,具有很好的工程應用價值。
參考文獻
[1]江霞.在Matlab中實現FPGA硬件設計[J].國外電子元器件,2005(4):4-6.
[2]花良發,萬士保,魏祥生.基于Matlab設計信號處理FPGA模塊[J].信息技術,2010,34(10):41-44.
[3]牛斌凱,雍少為,張建,等.基于System Generator開發數字信號處理系統[J].艦船電子工程,2010,30(1):129-132.
[4]張明昊.探地合成孔徑雷達成像算法及實現[D].哈爾濱:哈爾濱工業大學,2016.
[5]李浩林.機載SAR快速后向投影成像算法研究[D].西安:西安電子科技大學,2015.
[6]李翱,于勇,褚超,等.基于FPGA的高效脈沖壓縮技術工程應用研究[J].遙測遙控,2017,38(2):13-21.
[7]保錚,邢孟道,王彤.雷達成像技術[M].北京:電子工業出版社,2005.