楊珍,蔣鑫
(四川九洲空管科技有限責任公司,四川綿陽,621000)
二次雷達機系統(tǒng)是對空中目標鑒別與監(jiān)視的系統(tǒng),在空中的目標識別與跟蹤和空中交通管制等很多方面有極大的作用。點跡板在進行點跡和航跡關(guān)聯(lián)之前,首先應(yīng)仔細研究點跡報告中的信息,而這些信息則由FPGA 上傳的,F(xiàn)PGA的數(shù)據(jù)源則是由上流譯碼模塊產(chǎn)生的。FPGA 作為數(shù)據(jù)傳輸?shù)囊画h(huán),在以往的設(shè)備中是沒有經(jīng)過容錯處理就將數(shù)據(jù)下發(fā)至點跡處理模塊,一旦數(shù)據(jù)出問題首先會影響下級模塊數(shù)據(jù)處理,再者排查錯誤時無法定位是因上層模塊錯誤還是因FPGA 數(shù)據(jù)透傳而引起的錯誤,給后續(xù)應(yīng)用帶來巨大的不變。
本文中的方法可以很好的避免傳輸錯誤的數(shù)據(jù),可正確完成數(shù)據(jù)的存儲、判斷、分發(fā),可保障從FPGA 分發(fā)至點跡板模塊的數(shù)據(jù)是符合數(shù)據(jù)要求的,避免了錯誤數(shù)據(jù)下發(fā)而導致的點跡模塊處理不正常的情況。本方法是基于數(shù)據(jù)包結(jié)構(gòu)并通過FIFO 和RAM 結(jié)合的方式對數(shù)據(jù)包進行判斷處理的,從而保障數(shù)據(jù)流輸出的正確性,保障點跡數(shù)據(jù)的連續(xù)性,并當點跡數(shù)據(jù)出現(xiàn)異常時能夠明確排查思路,確定排查方向。
FPGA 對數(shù)據(jù)流的處理是有多種方法的,其中之一是通過異步FIFO 來作為不同時鐘域數(shù)據(jù)傳輸?shù)木彌_區(qū),該方法下進行寫數(shù)據(jù)和讀數(shù)據(jù),有寫指針與讀指針,另外有FIFO控制器來通過外部的讀寫信號控制指針操作,有不同的寫時鐘和讀時鐘,這樣的操作只能完成異步數(shù)據(jù)的處理,并不能判斷所接受的數(shù)據(jù)是否正確,是完全透傳譯碼板下發(fā)的數(shù)據(jù),不對數(shù)據(jù)包進行任何判斷,帶來的影響有兩點:(1)譯碼板與信號處理板數(shù)據(jù)傳輸時,可能會因硬件或者機箱周邊環(huán)境原因而收到干擾,導致信號處理接收數(shù)據(jù)錯誤。(2)譯碼板自身傳輸?shù)臄?shù)據(jù)源是錯誤的,而信號處理板透傳之后,一旦點跡板檢測到數(shù)據(jù)錯誤,系統(tǒng)不能直接定位,需要信號處理板和譯碼板同時配合,會消耗較多的人力資源和時間成本。本文中重點介紹第二種方法:當FPGA 和其他設(shè)備進行通信時,如果傳輸?shù)氖谴罅繑?shù)據(jù),則需要打包(組幀)進行傳輸,而且需要有幀頭和校驗位來確保幀數(shù)據(jù)傳輸正確。當FPGA 作為接收端去接收幀數(shù)據(jù)時,即使保證一幀數(shù)據(jù)的幀頭和校驗位均是正確的也不能保證該幀數(shù)據(jù)是正確的,在本文中運用的包結(jié)構(gòu)是包頭+包長+包數(shù)據(jù)+包校驗+包尾的組合,經(jīng)過該種嚴謹?shù)陌Y(jié)構(gòu),可以避免特殊包數(shù)據(jù)和包頭或者包尾一致時引發(fā)的判斷錯誤,降低了因上下級模塊之間采樣引起的幀數(shù)據(jù)錯誤的概率,后端點跡模塊采樣也必須經(jīng)過包結(jié)構(gòu)判斷后才能使用幀數(shù)據(jù)。
本文涉及的上級模塊的數(shù)據(jù)是通過請求、應(yīng)答等握手信號的配合來進行數(shù)據(jù)傳輸?shù)模擣PGA 檢測到上級模塊的請求之后,根據(jù)自己的處理、存儲情況來判斷是否要發(fā)送應(yīng)答信號。當應(yīng)答信號發(fā)送后,則需要做好數(shù)據(jù)接收的準備。因上級模塊傳輸?shù)臄?shù)據(jù)于高頻率、特長數(shù)據(jù)包結(jié)構(gòu)的數(shù)據(jù)類型,考慮到后續(xù)的流水線工作,需要將數(shù)據(jù)寫入FIFO 中。
當判斷FIFO1 中非空時,則應(yīng)產(chǎn)生讀信號,讀取數(shù)據(jù),此時讀出來的數(shù)據(jù)已經(jīng)轉(zhuǎn)換到了該FPGA 的時鐘域下,以下操作均在同一時鐘域下操作。從FIFO1 中讀取的數(shù)據(jù)直接寫入RAM 中,同時判斷從該FIFO1 中讀出的數(shù)據(jù)是否是協(xié)議數(shù)據(jù),若數(shù)據(jù)包符合要求,則同步讀取RAM 數(shù)據(jù),寫入FIFO2 中,點跡模塊可以根據(jù)FIFO2 的非空信號來讀取FIFO2 中的數(shù)據(jù)。
本文中涉及的FPGA資源比較少,大部分器件均可滿足需求。
圖1 可以清楚的看到,整個接收、存儲、讀數(shù)據(jù)、寫數(shù)據(jù)等處理流程。
在對外部輸入的請求信號處理之前需進行打拍處理,應(yīng)該選取穩(wěn)定狀態(tài)下的值,避免亞穩(wěn)態(tài)情況下毛刺信號影響整體的時序功能。
文中上級模塊數(shù)據(jù)是根據(jù)FPGA 產(chǎn)生的應(yīng)答有效而產(chǎn)生數(shù)據(jù),即對于FPGA 來講,接收到的數(shù)據(jù)和FPGA 產(chǎn)生的應(yīng)答信號是同步的,所以我們采用的是同步FIFO1,需要設(shè)置FIFO1 的非空標志、寫數(shù)據(jù)計數(shù)器等方便后續(xù)操作。

圖1 處理流程圖
本文中使用的是雙口RAM,雙口RAM 有兩組數(shù)據(jù)線和地址線,讀寫可以同時進行。
需要注意的地方有:寫數(shù)據(jù)時,雙口RAM 存儲是在寫時鐘的上升沿到來時完成的,所以要提前將數(shù)據(jù)和地址準備好;讀數(shù)據(jù)時,同樣要在讀時鐘上升沿時將地址處于穩(wěn)定狀態(tài);讀數(shù)據(jù)輸出時,對于一個地址上的數(shù)據(jù)是在讀下一個地址的數(shù)據(jù)時才輸出到數(shù)據(jù)線上的,相當于數(shù)據(jù)的真正輸出延遲讀時鐘一個周期;對于讀地址模塊的使能應(yīng)延遲輸出使能一個時鐘周期,使得地址0 可以保持被時鐘上升沿采集到,否則輸出的第一位輸出不穩(wěn)定的數(shù)據(jù)。
寫FIFO1 時只需判斷FIFO1 非滿即可回應(yīng)外部的請求信號,將數(shù)據(jù)寫入FIFO1 中。
讀取FIFO1 中數(shù)據(jù)時,需同步將讀出的數(shù)據(jù)寫入RAM中。對于讀出的FIFO1 數(shù)據(jù)首先判斷包頭,并且內(nèi)部計數(shù)器需要開始計算接收到的數(shù)據(jù)長度,根據(jù)包頭位置可找相應(yīng)的包長,并根據(jù)得到的包長信息,判斷最后的包尾是否是協(xié)議規(guī)定的數(shù)據(jù),此時才能判斷出這一包數(shù)據(jù)是否符合協(xié)議要求。若符合協(xié)議要求,則向RAM 發(fā)送讀RAM 的請求信號。若RAM 已經(jīng)響應(yīng),但是上一幀數(shù)據(jù)沒有被讀走的時候,是不能去讀FIFO1 中的數(shù)據(jù)的,不然會導致RAM 中的數(shù)據(jù)發(fā)生兩幀數(shù)據(jù)沖突。
在寫RAM 的時候,同步計算寫數(shù)據(jù)的個數(shù),直到該數(shù)據(jù)與之前得到的包長度一致時,即寫完一包數(shù)據(jù),停止寫數(shù)據(jù)和寫地址的操作。
當RAM 收到讀請求的時候,意味著FIFO1 中的一包數(shù)據(jù)是正確的了,此時需要判斷FIFO2 是否有足夠的空間來存儲,若FIFO2 空間滿足條件,可響應(yīng)請求,產(chǎn)生有效的讀信號和讀地址。
RAM 讀信號有效時,即可開始對地址指針進行操作,當讀FIFO1 數(shù)據(jù)計數(shù)器結(jié)果和包長度一致時,將RAM 讀地址復位清零,以便下一次數(shù)據(jù)讀取。
RAM 讀出數(shù)據(jù)時,計算好數(shù)據(jù)、地址、讀信號之間的延遲時間,產(chǎn)生寫FIFO2 的寫指針和寫地址,將對齊之后的數(shù)據(jù)寫入FIFO2 中。
FIFO2 的數(shù)據(jù)讀取則要根據(jù)下一級模塊的時序結(jié)合起來操作,本文中可將FIFO2 的非空標志輸出至下級模塊,下級模塊根據(jù)非空標志可產(chǎn)生相應(yīng)FIFO2 讀信號。

圖2 讀FIFO1 時序圖
圖2 中:標記1:外部輸入的數(shù)據(jù);標記2:FIFO1 寫信號與讀信號;標記3:從FIFO1 讀出的數(shù)據(jù);標記4:從FIFO1 讀出數(shù)據(jù)正確,產(chǎn)生讀RAM 請求信號及應(yīng)答信號,此時完成了正確數(shù)據(jù)流的存儲。

圖3 讀RAM 圖
圖3 中:標記1 即讀RAM 的請求與應(yīng)答信號;標記2:從RAM 讀出數(shù)據(jù)包,寫入FIFO2 中。當判斷FIFO2 的存儲空間滿足需要時,將RAM 的數(shù)據(jù)包轉(zhuǎn)入到FIFO2 中,以待下級模塊的讀取。
此流程可完成數(shù)據(jù)的存儲、判斷、分發(fā),可保障從FPGA 分發(fā)至下級模塊的數(shù)據(jù)是符合協(xié)議的,避免了錯誤數(shù)據(jù)下發(fā)而導致的下級模塊處理不正常的情況。