黃禹銘
(中國電子科技集團公司第二十九研究所 成都 610036)
隨著電磁環(huán)境的日益復雜,為改善嚴重雜波背景下檢測小運動目標的性能,動目標顯示(MTI)及動目標檢測(MTD)在雷達信號處理中獲得比較普遍的應用。MTD是一種利用相參積累來提高信噪比,從而提高雷達在雜波背景下檢測動目標能力的技術?;夭ㄐ盘栆M行MTD處理,需要將雷達回波信號進行存儲和重排。
FPGA處理速度快,數據吞吐量大,常作為雷達平臺上信號處理的主處理器,但FPGA是以硬件實現的系統,內部的存儲容量有限,不能滿足回波信號存儲需求,因此必須外接存儲芯片。目前常用的芯片有DDR和QDR兩類??紤]到需要儲存的數據量和價格成本等兩方面因素,大多數雷達系統使用存儲容量大且價格低的DDR作為外接存儲芯片,特別是以DDR3作為主流的外接存儲芯片。
DDR3利用雙數據速率實現高速工作,采用了bit預讀取技術,數據傳輸效率高,多Bank的設計可使存儲容量更大。但是DDR3工作時需要刷新和預充電,會產生一定的時間損耗,且對跳變地址的讀寫,存在頻繁換頁操作,會導致讀寫速率大幅降低。
根據重排原理可知,重排過程中需要頻繁的跳變地址,由于DDR3跳變地址讀寫速率低的器件特性,導致使用DDR3進行重排時,重排速率受限于跳變地址的讀寫速率,且速率往往較低。以DDR3-1333 / 8Gbit為例,對512個脈沖重復周期(PRI),7500個距離單元進行重排,48Bit位寬的數據,實測最大速率僅為19.23MHz。
隨著雷達技術的發(fā)展,雷達的信號帶寬和數據率也在逐步提升,因此對雷達信號處理能力、速度提出了更高的要求和挑戰(zhàn)。但由于當前使用DDR3進行重排的速率低,已不能滿足現代大帶寬、高數據率雷達信號處理的需求。如一部信號帶寬5MHz,基帶采樣率6.25MHz,有和、方位差、俯仰差、輔助四個波束的雷達,其對重排速率的最低要求為6.25MHz×4 = 25MHz,大于當前重排的最大速率,因此本文提出一種基于FPGA+DDR3的雷達數據高速重排方法,可有效提高重排的速率,解決當前重排速率不能滿足現代雷達要求的問題。
根據上述可知,當前使用DDR3進行重排速率低主要原因是重排過程中頻繁的跳變地址所導致,想要提升DDR3重排速率,可從以下兩方面入手:一是提升跳變地址讀寫速率;二是減少跳變地址次數。
跳變地址讀寫速率主要是由器件性能和跳變地址步進決定,器件性能是固有屬性,無法從使用層面上進行優(yōu)化和提升;跳變地址步進跟雷達波形參數和基帶采樣率有關,一旦確定,不能隨意變更,否則影響雷達性能。因此無法通過使用層面提升跳變地址讀寫速率。
由此只能通過減少跳變地址次數來提升重排速率,根據DDR3器件特點,為充分利用DDR3數據總線位寬大、順序地址讀寫速率高等優(yōu)點,可從以下三點進行優(yōu)化改進,以減少跳變地址次數,提升重排速率:
1)輸入數據拼位,充分利用總線位寬。通常輸入數據的位寬較DDR3的數據位寬小很多,可將多個數據拼接成一個寫入DDR3的數據總線中,以此減少讀寫次數。
2)按塊讀取,減少重排讀數時地址跳變次數。重排讀數時不再是按單個存儲單元讀取,而是將相鄰的多個存儲單元視為一塊,按塊進行讀取,以此減少地址跳變次數,提升DDR3訪問效率。
3)設計同時讀寫時序,減少地址跳變次數。由于重排采用乒乓方式存儲數據,可能會同時產生讀寫請求,且由于乒乓存儲區(qū)域地址相隔較遠,產生的讀寫請求地址存在跳變,因此需要合理設計MIG總線控制時序,在保證讀請求按塊操作的同時,均衡的響應讀寫請求,高效率的訪問總線,以提升重排速率。
根據上述改進思路,對重排流程進行重新設計,由于按塊讀取出的數據不滿足重排輸出數據格式要求,因此需要將DDR3讀取出的數據再緩存至RAM,進行二次重排,以輸出正確數據格式,由此將重排過程分割成一次重排和二次重排兩個步驟完成,具體流程如圖1所示。
圖1 重排流程圖
一次重排主要包含數據拼接、DDR3讀寫控制、數據拆分等三部分,各部分詳細介紹如下:
數據拼接是將個距離單元數據拼接成一個位寬接近或者等于DDR3數據總線的數據,然后以此數據寫入DDR3數據總線,從而實現多個距離單元數據寫入到一個DDR3地址中,充分利用DDR3數據總線的同時,也節(jié)約了數據的存儲空間。原本單個PRI內個距離單元需要占據個存儲單元和進行次總線操作,在進行數據拼接后均縮減為原來的1,一次讀寫可操作個距離單元,等效于DDR3的讀寫效率提升了倍。
DDR3讀寫控制主要實現功能為:
1)根據DDR3型號和參數設置Memory Interface Generator(MIG)核,實現FPGA對DDR3的總線控制。FPGA與DDR3的高速接口通過Xilinx公司開發(fā)提供的MIG IP核來實現,在產生MIG IP核時,可通過圖形界面設置相關參數來產生一個存儲器模型。用戶不需要設計存儲器內部復雜的讀寫操作時序,只需設計MIG核的讀寫控制邏輯,就可以完成對DDR3讀寫操作。
2)設計同時讀寫時序,減少地址跳變次數,以此提升重排速率。在實現重排時,主要包含用戶層和MIG時序控制層兩部分邏輯,用戶層根據輸入數據控制乒乓讀寫時序,產生MIG讀寫請求(讀請求包含讀使能和讀地址,寫請求包含寫使能、地址和數據),并存入相應的FIFO中;MIG時序控制層根據時序讀取FIFO中的讀寫請求,并控制MIG總線狀態(tài),從而實現DDR3讀寫操作。
在MIG時序控制層中,為保證讀取操作按塊進行,不被其他地址操作所打斷,只有當讀請求FIFO中請求個數大于等于時,才執(zhí)行讀操作;當已經連續(xù)讀了個地址,且FIFO中剩余請求個數小于時,則停止讀操作。而寫操作則不需要按塊進行約束,因為寫地址連續(xù),不論寫操作在何處被讀操作打斷,其執(zhí)行期間的地址均為連續(xù),所以寫操作是否按塊進行不會導致地址跳變次數的減少或增加。但如果寫操作也按塊約束,當讀寫請求均不足個時,會出現總線閑置,導致總線資源時間上的浪費,因此寫操作采用寫請求FIFO非空即執(zhí)行的方式。MIG時序控制狀態(tài)圖和時序圖如圖2、圖3所示。
圖2 MIG時序控制狀態(tài)圖
圖3 k=4時,MIG時序控制時序圖
圖3中Wr_En、Wr_Addr、Wr_Data為用戶層產生的寫請求使能、地址和數據;Wr_Empty為寫請求FIFO空標志位;Rd_En、Rd_Addr為用戶層產生的讀請求使能和地址;Rd_Count為讀請求FIFO中剩余請求個數;Rd_Timer為連續(xù)執(zhí)行讀操作次數;Mig_State為時序控制機狀態(tài),0x0-空閑,0x1-寫狀態(tài),0x2-讀狀態(tài);app_rdy表示DDR3已經準備好接收命令,高有效;app_en為命令使能,高有效;app_cmd為當前請求命令,0x0-寫請求,0x1-讀請求;app_addr為當前請求操作的地址;app_wdf_wren為當前要寫入DDR3的數據使能,高有效;app_wdf_data為當前要寫入DDR3的數據。
由此,MIG的時序實現了從按單個存儲地址進行跳變讀取到僅塊間跳變地址讀取的優(yōu)化。地址跳變次數由原來的每個地址跳變,縮減到連續(xù)執(zhí)行次后才跳變,地址跳變次數縮減為原來的1/。
數據拆分是對應于數據拼接的逆操作,主要是將DDR3讀出的大位寬數據拆分成個距離單元,以方便二次重排時使用。
一次重排輸出數據格式如圖4所示,圖中(,)表示第個PRI內的第個距離單元回波數據。
圖4 一次重排輸出數據流
由于一次重排輸出的為重排不完全的數據流,每個多普勒維中均還包含大小為×的連續(xù)距離單元,由于有個PRI,因此需要在FPGA內開辟兩個深度為××的RAM,用于進行二次重排,以將數據完全轉換成多普勒維。
二次重排按照常規(guī)方式進行,即按單個距離單元地址跳變讀取數據,每當RAM中寫滿××個數據后,乒乓讀寫切換,同時啟動上一寫滿RAM的讀數。每完成一次RAM數據讀取,則完成了×個距離單元的多普勒維數據輸出,當執(zhí)行完(×)次RAM數據讀取后,即完成了CPI內所有數據從距離維到多普勒維的重排。
由此,通過上述步驟,可實現重排的優(yōu)化和速率提升,但值得注意的是,方法中重排的速度提升跟數據拼接個數和分塊的地址個數有關,當= 1且= 1時,本方法與常規(guī)重排一致,為重排速度最慢的情況。隨著、數值的增加,重排速度也會逐步提高。但、的取值也不能任意取值和增加,存在一些限制條件:
1)為了讓時序控制簡化,、的取值應使和(×)均為整數;
2)由于二次重排中需要在FPGA內開辟兩個深度為××的RAM,但FPGA片內RAM資源有限,、的取值需考慮片內資源情況。
使用Vivado 2016.2創(chuàng)建工程并編碼實現,在硬件平臺中進行驗證,其中使用FPGA 1片,型號為XC7K325T-2FFG900I;使用DDR3 4片,型號為DDR3-1333 / 8Gbit,4片DDR3并聯接入FPGA中,從而構建出64Bit位寬的DDR3數據總線。讀寫請求FIFO緩存深度為512,MIG IP核設置參數為:Clock Period=625MHz,Input Clock Period=156.25MHz,Data Width=64。
輸入數據為512個PRI,每個PRI有7500個距離單元,每個距離單元為I、Q復數,I、Q均為24Bit,取值范圍為0~7499的遞增數,I、Q按從高到低進行拼位,由此構成48Bit的輸入信號。
驗證時,所有信號均在250MHz的時鐘下進行觀測,通過Virtual Input Output(VIO)設置不同的讀寫速率,并校驗輸出數據是否正確,來驗證、取值不同情況下的最大重排速率。詳細驗證結果如下:
1)=1,=1,此時為常規(guī)重排,最大無錯誤輸入輸出速率為13個時鐘周期輸入輸出1個數據,因此當前最大重排速率為重排速率為250MHz/13=19.23MHz,驗證結果圖如圖5所示。
圖5 j=1,k=1驗證結果圖
2)=10,=1,此時僅進行數據拼位,最大無錯誤輸入輸出速率為13個時鐘周期輸入輸出10個數據,因此當前最大重排速率為250MHz×10/13=192.3MHz,驗證結果圖如圖6所示。
圖6 j=10,k=1驗證結果圖
3)=1,=10,此時僅進行按塊讀取,最大無錯誤輸入輸出速率為40個時鐘周期輸入輸出10個數據,因此當前最大重排速率為250MHz×10/40=62.5MHz,驗證結果圖如圖7所示。
圖7 j=1,k=10驗證結果圖
對比1)和2)的驗證結果,2)中輸入輸出數據速率雖然是1)的10倍,但由于2)將10個數據拼接成1個大位寬的數送入MIG總線,對于MIG總線來說,均為13個時鐘周期操作1次總線,因此數據拼接個數可實現不增加MIG總線操作的前提下,將重排速率提升倍。
對比1)和3)的驗證結果,重排速率提升了3.25倍,說明按塊讀取可有效提升重排速率,由于頻繁操作總線導致訪問效率下降,因此雖不能將重排速率提升倍,但隨著分塊地址個數的增加,對重排速率的提升也會越發(fā)明顯。
綜上所述,在使用同一硬件平臺、相同設置參數、輸入數據位寬和格式一致的前提下,改進后不同取值情況下重排速率對比如表1所示。
表1 重排速率對比
本文中提出了一種基于FPGA+DDR3的雷達數據高速重排方法,該方法以使用FPGA部分RAM資源和增加重排復雜度為代價,充分利用DDR3順序地址讀寫效率高、FPGA片內RAM訪問速度快等優(yōu)點,盡可能地規(guī)避DDR3跳變地址讀寫效率低的缺點,最大程度地減少了DDR3跳變地址的次數,有效提升了重排速率,能滿足現代雷達信號處理數據量不斷增加,數據率不斷提升的需求。