游斌相 廖育富 任午龍 馬 婕
(四川九洲空管科技有限責任公司 四川綿陽 621000)
數據重排算法是雷達信號處理[1]中最常用的算法之一,要實現數據重排,首先需要把數據緩存起來,然后根據重排順序依次讀出數據,這一過程既要求高緩存也要求高速率。DDR3 SDRAM[2]作為一種高速、高帶寬緩存器在計算機行業有著廣泛應用,正好符合數據重排高速高緩存的要求。FPGA是當前雷達信號處理[3-4]最常用的處理器之一,能很好地滿足大帶寬、高采樣率及多通道信號處理等要求。在FPGA上實現數據重排算法過程中,會遇到跨多時鐘域問題,既有邏輯時鐘域,也有DDR時鐘域,還有傳輸接口時鐘域,處理好跨時鐘域問題,也是實現數據重排的關鍵。
在脈沖體制雷達中[5],通常會連續發射多個脈沖信號構成一個脈沖序列,脈沖之間的時間間隔為PRI(Pulse Repetition Interval),其導數就是脈沖重復頻率PRF(Pulse Repetition Frequency)。針對一個脈沖回波的采樣稱為快時間采樣??鞎r間采樣間隔為Ts,是采樣率的導數,距離單元間隔為ΔR=cTs/2。針對多個脈沖回波等距離維的采樣稱為慢時間采樣,采集數據所需要的時間為M·PRI,通常稱為相參處理時間(CPI:Coherent Processing Interval)。例如以M個脈沖作為一個序列,每個脈沖有N個采樣點,其快時間采樣和慢時間采樣如圖1所示。

圖1 快時間采樣與慢時間采樣
數據重排[6]通常以一個CPI為周期進行處理,假設一個CPI時間段內有M個脈沖,每個脈沖有N個數據點,則數據重排前后順序關系如圖2所示。數據重排前的順序如圖2(a)所示,脈沖內的先后關系同慢時間采樣,脈沖間的排序規則與脈沖先后關系有關,先接收到脈沖回波排序靠前,后接收到脈沖回波排序則靠后。數據重排后的順序如圖2(b)所示,其排序規則同慢時間采樣,距離單元小的排序靠前,距離單元大的則靠后。

圖2 數據重排前后關系
要實現慢時間采樣或數據重排,必須先把所有數據提前緩存好,本設計中使用一片DDR3來做緩存,在FPGA中例化后的地址位寬為25bit,數據位寬為128bit,一個地址剛好存放和差差三個通道的IQ數據。為便于排序操作與地址控制,設計復合地址,將地址劃分為行地址和列地址,其中高8bit為列地址,低17bit為行地址。每一列存放一個脈沖數據,最多可存放256個脈沖序列,每個脈沖最多131072個數據。
圖3給出了數據重排過程中DDR地址控制流程圖,輸入數據緩存時,從第0行第0列開始寫入數據,寫入一個數據行地址加一,當寫完一個脈沖數據時,列地址加一,行地址清零,接著按照該方法寫入第二個脈沖數據,直到一組CPI數據寫完,然后開始讀出數據。讀取數據時,則按照慢時間采樣規則依次從DDR3中讀出數據,從第0行第0列開始讀出數據,保持行不變,列加一依次讀取,當完成一次慢時間采樣讀取時,行加一,列清零,然后接著往后讀取數據,直到所有數據讀完。

圖3 DDR地址控制流程圖
跨時鐘域處理[7-8]是FPGA信號處理的重點和難點,如果處理不當,就會出現亞穩態[9],從而導致數據出錯,最終得到一個錯誤的結果。本方案中涉及了三個不同時鐘域,分別是用戶邏輯時鐘user_clk,DDR時鐘ddr_clk以及PCIe時鐘pcie_clk。其中,用戶邏輯時鐘頻率高達240MHz,該時鐘域主要負責信號處理;DDR時鐘頻率有200MHz,略小于用戶邏輯時鐘,該時鐘域負責DDR模塊的讀寫操作;PCIe時鐘頻率最小,僅有125MHz,該時鐘域負責PCIe模塊的數據傳輸控制。
圖4給出了跨多時鐘域處理的邏輯框架圖,共包含三個模塊,分別是:PCIe控制模塊、信號處理模塊及DDR控制模塊。整體采用流水線方案設計,極大提高了信號處理及傳輸效率。

圖4 跨多時鐘域處理邏輯框架圖
信號從信號處理模塊出發,首先通過異步FIFO寫入到DDR3中。對該異步寫FIFO來說,寫入時鐘大于讀取時鐘,所以寫入數據的速度大于讀取數據的速度,為避免丟失數據,需要一個狀態反壓信號。當該FIFO即將寫滿時,把wr_pfull信號拉高,并回傳給數據重排模塊,若數據重排模塊檢查到該信號為高,則停止往DDR模塊寫入數據, 等到wr_pfull為低時,再繼續寫入數據。當所有數據都寫入DDR后,再根據數據重排規則,依次從DDR3中讀出數據,讀出的數據通過異步FIFO做跨時鐘域處理后,再傳輸到信號處理模塊做打包處理。
數據打包模塊會提前準備好幀頭,當接收到數據后,將幀頭與數據拼接到一起,然后發送給PCIe模塊。PCIe接收端首先是個異步FIFO,該FIFO的讀時鐘比寫時鐘慢,為避免丟失數據,同樣需要一個反壓信號。當數據打包模塊接收到PCIe模塊回傳的反壓信號時,暫停發送數據,同時將該信號轉發給數據重排模塊,讓其停止對DDR3的讀取控制,直到wr_pull信號拉低時,再接著運行。
PCIe模塊接收到打包數據后,首先進行異步FIFO跨時鐘處理,然后經過乒乓操作送到PCIe接口,最后發送給上位機。乒乓操作是FPGA開發中常用的一種數據緩沖及控制技術,通過輸入、輸出選擇單元及兩個RAM的讀寫控制,達到數據的緩沖及控制目的。
根據前文所述,模擬了一個單通道數據重排、打包及PCIe發送過程。每組CPI有16個PRF,每個PRF有效數據長度均為300。數據重排仿真結果如圖5所示,圖5(a)為數據重排整體寫入與讀出的地址控制仿真結果,從圖中可以很明顯地看出,共輸入了16個脈沖信號,第1個脈沖寫入第0列,第2個脈沖寫入第1列,直到最后一個脈沖寫入第15列,完成數據寫入操作。圖5(b)給出了寫忙信號時的DDR地址控制,當忙信號到來時,暫停信號寫入,同時保持DDR寫入地址不變,直到忙信號結束時,再接著寫入信號,DDR寫入也跟著地址同步變化。圖5(c)和圖5(d)給出了數據重排輸出地址控制的仿真結果圖,按行讀取,每一行讀取16個數據,直到300行數據讀取完成。圖5(e)為讀取忙信號時的DDR地址控制,當讀取忙信號到來時,停止數據讀取,保持DDR讀取地址不變,直到忙信號結束后,再接著讀取相關信號。

圖5 數據重排寫入與讀出
數據打包模塊仿真如圖6所示,圖6(a)給出了數據打包模塊的輸入與輸出信號,輸入信號為數據重排后的信號,輸出數據為打包后的信號。圖6(b)為輸入PCIe忙信號時的仿真圖,當輸入PCIe忙信號拉高時,輸出數據保持不變,直到忙信號拉低后,繼續輸出。圖6(c)給出了打包忙信號拉高時的仿真時序圖,當打包信號忙時,信號會暫停輸入,直到忙信號結束才繼續輸入信號。

圖6 數據打包輸入及輸出
打包后的數據通過異步FIFO和乒乓操作后會傳輸到PCIe模塊,最后通過PCIe接口將數據發送到PC端。圖7給出了乒乓讀寫的仿真結果圖,兩個ram讀寫地址相同,當flag_rd_ram為1時,寫入數據到ram0,同時輸出ram1的結果;當flag_rd_ram為0時,寫入數據到ram1,同時輸出ram0的結果。

圖7 乒乓讀寫仿真結果
本文結合雷達系統的實際需求,基于FPGA開發平臺并利用DDR3實現數據重排算法邏輯架構設計,設計包含:PCIe控制模塊、信號處理模塊及DDR控制模塊。整體采用流水線方案設計,結合信號反壓等跨多時鐘域處理方法,實現了數據重排算法的邏輯設計,通過仿真分析和板級實測,滿足項目實際使用需求。同時,該設計方案有望在類似的雷達系統中推廣使用。