遲東明,劉兆輝,王燕玲
(上海航天電子有限公司,上海 201800)
遙測地面站所接收的火箭、衛(wèi)星等飛行器的原始遙測數(shù)據(jù)中包含有大量的重要遙測信息,如姿態(tài)信息、油量信息、位置信息等。地面站需要將這些關(guān)鍵遙測參數(shù)從原始數(shù)據(jù)中提取出來并進行綜合、計算,最后將處理的結(jié)果顯示在終端設(shè)備上,以便操作人員進行分析、決策。隨著火箭、衛(wèi)星等飛行器的結(jié)構(gòu)日益復(fù)雜,地面站所接收的遙測數(shù)據(jù)不僅數(shù)據(jù)量更大,且數(shù)據(jù)結(jié)構(gòu)更也為復(fù)雜,這就對地面站的數(shù)據(jù)處理能力提出的更高的要求。
地面站對于遙測信息的處理一般采用“FPGA+DSP+通用CPU”或“FPGA+通用CPU”的方式。
“FPGA+DSP+通用CPU”的實現(xiàn)方式中,F(xiàn)PGA負(fù)責(zé)數(shù)據(jù)幀檢索、重組幀等密集型計算,DSP負(fù)責(zé)遙測數(shù)據(jù)計算、數(shù)據(jù)判斷等復(fù)雜度較高的計算,而通用CPU負(fù)責(zé)數(shù)據(jù)決策、人機交互等。這種實現(xiàn)方式適應(yīng)面廣,但集成度低且功耗較大,不利于地面站的小型化設(shè)計。
“FPGA+通用CPU”的實現(xiàn)方式中,如果FPGA負(fù)責(zé)數(shù)據(jù)幀檢索、重組幀等密集型計算,通用CPU負(fù)責(zé)其他計算,則FPGA與通用CPU之間需要傳輸大量數(shù)據(jù),對于總線的數(shù)據(jù)吞吐量及通用CPU的性能提出了極高的要求,不利于地面站低成本設(shè)計。雖然目前FPGA內(nèi)部可以集成通用CPU的IP,但由于通用CPU IP性能較弱,無法滿足高速率的遙測數(shù)據(jù)處理任務(wù)。
而如果FPGA負(fù)責(zé)數(shù)據(jù)幀檢索、重組幀、遙測數(shù)據(jù)計算、數(shù)據(jù)判斷等,通用CPU負(fù)責(zé)其他計算,雖然降低了總線及通用CPU的負(fù)擔(dān),但由于遙測數(shù)據(jù)處理往往涉及到復(fù)雜的數(shù)據(jù)檢索、浮點計算以及數(shù)據(jù)分析,如果使用傳統(tǒng)的基于寄存器傳送級(register transfer level,RTL)的設(shè)計流程實現(xiàn)遙測數(shù)據(jù)處理,其代碼的設(shè)計、調(diào)試難度會大大增加,且代碼的維護成本也會加大。
本文將FPGA的高層次綜合技術(shù)(high-level synthesis,HLS)引入到地面站的遙測數(shù)據(jù)處理中,利用該技術(shù)可以將遙測數(shù)據(jù)處理功能用抽象層級較高的C代碼實現(xiàn),這樣就有效降低了FPGA進行遙測數(shù)據(jù)處理的設(shè)計難度,提高了開發(fā)效率,從而縮短了產(chǎn)品的研制周期。
地面站的遙測數(shù)據(jù)處理流程一般是以如圖1所示的方式進行[1-2],主要分為5個步驟:

圖1 地面站遙測數(shù)據(jù)處理流程
1)遙測解調(diào)。地面站對接收到的無線遙測信號進行解調(diào),并將解調(diào)出的遙測數(shù)據(jù)以數(shù)據(jù)流形式發(fā)送給后端的遙測數(shù)據(jù)處理模塊做進一步處理。
2)遙測幀數(shù)據(jù)重組。遙測數(shù)據(jù)處理模塊對解調(diào)后的遙測數(shù)據(jù)流進行檢索,并根據(jù)遙測幀同步頭檢索出完整的遙測幀,最后根據(jù)遙測幀的數(shù)據(jù)結(jié)構(gòu)進行遙測幀數(shù)據(jù)重組,從而得到連續(xù)的遙測幀。
3)遙測參數(shù)提取。遙測數(shù)據(jù)處理模塊根據(jù)一定的提取規(guī)則,對遙測幀內(nèi)的遙測參數(shù)進行提取,從而得到需要的遙測參數(shù)。
4)遙測參數(shù)計算。遙測數(shù)據(jù)處理模塊對提取出的遙測參數(shù)進行計算及分析,最終得出計算結(jié)果。
5)計算結(jié)果組幀。遙測數(shù)據(jù)處理模塊將計算結(jié)果打包并根據(jù)一定的成幀規(guī)則形成新的數(shù)據(jù)幀發(fā)送給后端的數(shù)據(jù)處理模塊或終端設(shè)備進行后續(xù)數(shù)據(jù)處理或數(shù)據(jù)顯示。
一般情況下遙測數(shù)據(jù)是以一系列遙測幀的形式進行存儲和傳輸?shù)模绻b測數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)較復(fù)雜,則每一個遙測幀又可分為一系列不同的遙測子幀,子幀內(nèi)部的不同區(qū)域存放有各類遙測參數(shù)或其他數(shù)據(jù)。換言之,遙測幀一般以二維數(shù)據(jù)表的形式存放各類參數(shù)及數(shù)據(jù),而遙測參數(shù)則以某一點、某一行(列)或多行(列)的形式分布于該二維表中,其數(shù)據(jù)結(jié)構(gòu)示意圖如圖2所示。

圖2 遙測數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)示意圖
由于火箭、衛(wèi)星等飛行器內(nèi)部包含數(shù)量眾的多傳感器和各類設(shè)備,因此其遙測數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可能會變得非常復(fù)雜。以圖2為例,遙測參數(shù)集1是遙測幀中子行(列)抽取出來的二維數(shù)組,數(shù)組中數(shù)據(jù)可以代表飛行器總線中的某些總線指令,而總線指令在遙測參數(shù)集1中的出現(xiàn)的時間以及相對位置可能都不固定,需要遙測數(shù)據(jù)處理模塊通過總線指令的同步頭對接收到的每一個遙測幀進行搜索。而搜索到總線指令后,還要對指令進行校驗,校驗通過后才能提取其中的遙測參數(shù)并進行計算。同時在處理遙測幀時也可能需要對遙測幀進行記數(shù)操作,以便統(tǒng)計通信狀態(tài)或超時重傳等。
由于飛行器內(nèi)傳感器及設(shè)備工作狀態(tài)各異,其遙測參數(shù)的數(shù)據(jù)類型也千差萬別,通常情況下提取出的遙測參數(shù)的數(shù)據(jù)類型并不一致,需要經(jīng)過一系列變換、統(tǒng)計等操作。比如某遙測幀中的遙測參數(shù)就可能包含8位無符號數(shù)、16位無符號數(shù)、32位單精度及64位雙精度浮點數(shù)等多種數(shù)據(jù)類型。
綜上所述,在使用FPGA進行遙測參數(shù)處理時,會遇到以下兩方面的難點:
1)遙測參數(shù)的提取涉及到復(fù)雜的搜索、判斷、校驗過程,如果使用RTL級代碼實現(xiàn),其描述工作狀態(tài)的狀態(tài)機將異常復(fù)雜,相關(guān)代碼量也將非常大,不利于代碼的維護和調(diào)試。
2)遙測參數(shù)的計算會經(jīng)常遇到浮點計算、數(shù)據(jù)類型轉(zhuǎn)換以及復(fù)雜公式計算(如正弦、對數(shù)計算等),使用RTL級代碼進行描述較為困難。
針對以上問題,本文將FPGA高層次綜合技術(shù)引入到遙測數(shù)據(jù)處理過程中。利用高層次綜合技術(shù)對遙測數(shù)據(jù)進行處理具有以下優(yōu)勢:
1)開發(fā)周期短。應(yīng)用高層次綜合技術(shù)編寫的遙測數(shù)據(jù)處理相關(guān)代碼屬于行為級描述,抽象層級較高,比較符合高級語言的編程習(xí)慣。相對于RTL級的實現(xiàn)方式,其代碼精簡易懂,也便于修改,因此可以有效縮短產(chǎn)品的開發(fā)周期。
2)實時性高。相對于DSP或通用CPU等軟件實現(xiàn)方式,應(yīng)用高層次綜合技術(shù)編寫的遙測數(shù)據(jù)處理相關(guān)代碼仍屬于硬件實現(xiàn),延時可控且可以多模塊并行處理,實時性高。
3)支持浮點計算。高層次綜合技術(shù)支持IEEE754標(biāo)準(zhǔn)的浮點數(shù)據(jù)計算[7,10],且支持標(biāo)準(zhǔn)32位單精度及64位雙精度浮點數(shù)據(jù)類型,因此非常適合描述復(fù)雜遙測參數(shù)計算。
高層次綜合(High-Level Synthesis)并不是最近才發(fā)展起來的技術(shù),早在20世紀(jì)70年代就提出了相關(guān)的概念,隨著軟、硬件技術(shù)的不斷發(fā)展,高層次綜合的相關(guān)技術(shù)才逐步完善、成熟[14]。
對于高層次綜合技術(shù)的應(yīng)用,目前國外的相關(guān)報道較多,比如基于FPGA或GPU的計算加速[13]、圖像處理[11-12]、算法開發(fā)[17-18]等。尤其在異構(gòu)計算方面,利用高層次綜合技術(shù)能夠有效提升異構(gòu)計算平臺的設(shè)計、開發(fā)效率[20-21]。國內(nèi)目前高層次綜合技術(shù)相關(guān)報道主要集中于圖像處理及算法開發(fā)上,在衛(wèi)星測控領(lǐng)域的應(yīng)用還較少。
簡單來說,高層次綜合是一種代碼的綜合技術(shù),其作用是將抽象層級較高的語言(如C、C++、SystemC、OpenCL等)編寫的行為級描述代碼自動轉(zhuǎn)換為RTL級代碼。而利用高層次綜合技術(shù)的FPGA開發(fā)工具[15-16](如Xilinx公司的VIVADO HLS),除了提供高層次綜合的功能外,還提供了如寄存器分配、I/O接口生成、操作調(diào)度、狀態(tài)機生成等諸多功能,有效提高了FPGA設(shè)計、開發(fā)效率。
利用高層次綜合工具進行FPGA設(shè)計開發(fā),可以帶來以下幾方面的優(yōu)勢[19]:
1)開發(fā)周期短。高層次綜合技術(shù)可以屏蔽很多的硬件具體實現(xiàn)細節(jié),使設(shè)計師將更多精力放在算法設(shè)計、產(chǎn)品功能描述上,從而大大縮短開發(fā)周期[5]。根據(jù)統(tǒng)計,相對于手工編寫RTL級代碼,采用高層次綜合技術(shù)的代碼設(shè)計效率可以提高約4倍~10倍,結(jié)果質(zhì)量(quality of results,QoR)約0.7倍~1.2倍。
2)測試激勵開發(fā)效率高。對于FPGA的設(shè)計、開發(fā),測試激勵(Testbench)的編寫非常重要且非常耗時,而高層次綜合技術(shù)可以將基于高級語言(如C/C++)的測試激勵直接用于RTL級代碼的功能驗證,這就有效提高了代碼驗證的效率。
3)便于代碼的修改和維護。由于基于高層次綜合技術(shù)編寫的代碼是屬于行為級的描述,其抽象層級較高,便于設(shè)計師的閱讀理解,也便于代碼的后期維護。
基于高層次綜合技術(shù)的特點,其非常適合應(yīng)用于衛(wèi)星、火箭等飛行器的遙測數(shù)據(jù)處理過程中(如遙測參數(shù)的提取、計算、重組等過程)。
為了實現(xiàn)對遙測參數(shù)的處理,首先需要對遙測數(shù)據(jù)處理模塊的對外接口進行定義。這里使用的開發(fā)平臺為Xilinx公司的VIVADO HLS[3-4,8],且使用C語言對遙測數(shù)據(jù)處理模塊的功能及接口進行描述。
假設(shè)所有遙測數(shù)據(jù)均以1Byte為單位存儲于遙測幀中,而遙測幀是一種M*N的二維表格,經(jīng)過遙測數(shù)據(jù)處理模塊的處理后會生成一個長度為L的一維數(shù)據(jù)幀輸出給后續(xù)處理模塊。遙測數(shù)據(jù)處理模塊的對外接口定義如圖3所示。

圖3 遙測數(shù)據(jù)處理模塊對外接口定義
其中input_data為unsigned char類型的二維數(shù)組,用于存放接收到的遙測幀;output_data為unsigned char類型的一維數(shù)組,用于存放處理后的數(shù)據(jù)幀;tm_process_block為該遙測數(shù)據(jù)處理模塊函數(shù)名,經(jīng)過VIVADO HLS綜合后會轉(zhuǎn)換為相應(yīng)的RTL模塊。
由于遙測幀內(nèi)部數(shù)據(jù)是按照地址的先后順序輸入到遙測處理模塊的,不存在隨機訪問情況,輸出結(jié)果也是如此,因此可以將模塊的對外接口理解為一個FIFO,而在VIVADO HLS中可以使用約束語句對其進行約束。
為了使VIVADO HLS能夠正確識別對外接口的輸入輸出關(guān)系和具體接口形式,需要在代碼中添加相應(yīng)的約束語句,具體如圖4所示。

圖4 遙測數(shù)據(jù)處理模塊的外接口約束
其中,第一條約束語句用于指導(dǎo)VIVADO HLS為遙測數(shù)據(jù)處理模塊添加模塊級握手信號。模塊級握手信號用于控制和監(jiān)測模塊的工作狀態(tài),以便于不同模塊之間的數(shù)據(jù)交換;第二、三條約束語句用于通知VIVADO HLS對input_data、output_data采用FIFO接口形式。
圖5為經(jīng)過VIVADO HLS綜合后生成的遙測數(shù)據(jù)處理模塊的對外接口,可以看出主要分為三部分:輸入接口、輸出接口以及相關(guān)的握手信號。

圖5 遙測數(shù)據(jù)處理模塊的硬件接口
前文簡要介紹了對衛(wèi)星、火箭等飛行器的遙測數(shù)據(jù)的處理過程,而使用高層次綜合技術(shù)對遙測數(shù)據(jù)進行處理,主要的技術(shù)難點在于如何使用高級語言描述遙測數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),以及如何使用高級語言描述遙測數(shù)據(jù)的處理過程。
從前面的分析可以看出,遙測數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)可以由高級語言的一維或二維數(shù)組描述,并且可以很方便地對數(shù)組中的指定數(shù)據(jù)進行尋址訪問,而遙測數(shù)據(jù)的處理過程可以使用高級語言的循環(huán)、條件判斷等常用的語句描述,其工作流程如圖6所示。具體描述如下:

圖6 遙測數(shù)據(jù)處理模塊工作流程圖
1)對input_data、output_data以及其他用于存放中間結(jié)果的臨時數(shù)據(jù)緩沖區(qū)進行初始化,可以使用For循環(huán)完成。如輸出結(jié)果中還要包含幀計數(shù)功能,則初始化幀計數(shù)相關(guān)變量。
2)將input_data中的遙測幀數(shù)據(jù)拷貝到臨時數(shù)據(jù)緩沖區(qū)中。由于遙測幀是二維結(jié)構(gòu),存放遙測幀的緩沖區(qū)可以聲明為unsigned char類型的二維數(shù)組,并使用二級For循環(huán)實現(xiàn)數(shù)據(jù)拷貝。
3)校驗遙測幀內(nèi)部數(shù)據(jù)(如奇偶校驗、CRC校驗),如果校驗正確則進行下一步處理,如果校驗不正確則返回FALSE,表明本次遙測幀處理失敗。
4)遙測參數(shù)提取。該過程實際上就是對二維數(shù)組的訪問過程,將二維數(shù)組中指定遙測數(shù)據(jù)拷貝到臨時數(shù)據(jù)緩沖區(qū),或按照一定規(guī)則在二維數(shù)組中指定區(qū)域搜索指定的遙測參數(shù)集再進行進一步處理。
5)遙測參數(shù)計算。對提取出的遙測參數(shù)進行計算,并將計算結(jié)果保存到臨時緩沖區(qū)。
6)將遙測參數(shù)計算結(jié)果保存到臨時緩沖區(qū),并根據(jù)一定的規(guī)則重新組幀,同時將計算結(jié)果填入幀內(nèi)。如輸出結(jié)果中需要有幀計數(shù)功能,則將幀計數(shù)變量加1并填入幀內(nèi)相應(yīng)位置。
7)根據(jù)一定規(guī)則計算輸出幀的校驗和并填入輸出幀的相應(yīng)位置。
8)將臨時緩沖區(qū)中的輸出幀拷貝到output_data中,該過程可用For循環(huán)實現(xiàn),最后返回TRUE,表明本次遙測幀處理成功。
遙測地面站在輸出處理結(jié)果時經(jīng)常需要標(biāo)記當(dāng)前輸出幀的幀序號,以便于后端設(shè)備根據(jù)幀序號進行通信握手或誤碼統(tǒng)計,這就要用到幀計數(shù)功能。幀計數(shù)變量需要在不同的遙測幀處理過程中持續(xù)保持更新,而不像其他變量那樣每次處理過程都置零或恢復(fù)初始狀態(tài),因此幀計數(shù)變量需要設(shè)置為static類型,這樣幀計數(shù)變量就可以保持上一次調(diào)用遙測數(shù)據(jù)處理模塊時的狀態(tài)。
對于浮點計算,VIVADO HLS支持標(biāo)準(zhǔn)IEEE754浮點數(shù)(32位單精度及64位雙精度浮點數(shù)據(jù)類型)及相關(guān)浮點計算。因此使用高層次綜合技術(shù)實現(xiàn)遙測參數(shù)的浮點計算非常簡潔、高效。以標(biāo)準(zhǔn)32位單精度浮點數(shù)為例,配合C語言的強制類型轉(zhuǎn)換及位操作便可以實現(xiàn)復(fù)雜的浮點計算。
這里假設(shè)提取遙測幀中的11行85列的遙測參數(shù)(unsigned char類型),將該參數(shù)進行浮點計算(float類型)并將計算結(jié)果存儲到輸出幀中的[10:13]位置,其實現(xiàn)代碼如圖7所示。

圖7 浮點計算實現(xiàn)代碼示例
可以看出基于高層次綜合技術(shù)的浮點計算代碼非常簡潔,遙測數(shù)據(jù)的尋址、浮點運算等只需一條語句描述,將計算結(jié)果存儲到輸出幀中也僅需要簡單的移位、強制類型轉(zhuǎn)換等操作完成,而如使用RTL方式實現(xiàn)相同功能,則代碼量將大大增加。
本文將以上描述的遙測數(shù)據(jù)處理模塊使用VIVADO HLS進行了設(shè)計、仿真,同時將轉(zhuǎn)換的RTL代碼進行了硬件測試。代碼在VIVADO開發(fā)環(huán)境[9]中進行綜合、布局、布線,最后在Xilinx公司的XC7A200T[6]平臺上進行了硬件測試。
硬件測試過程中,遙測數(shù)據(jù)處理模塊對96 Byte*64 Byte的遙測幀進行處理,輸出幀長度為360 Byte。處理過程涉及到若干次的參數(shù)集提取、浮點計算以及校驗和計算等操作,模塊工作時鐘為10 MHz。
圖8為該模塊的FPGA資源占用情況,LUT及DSP資源占用率分別為5%和1%。可以看出其 FPGA資源占用率是非常低的。

圖8 遙測數(shù)據(jù)處理模塊FPGA資源占用情況
圖9是遙測數(shù)據(jù)處理模塊的時鐘及延時情況。可以看出,該模塊最高工作頻率可以達到11.2 MHz,延時最高為24 367個時鐘周期,約2.4 ms,因此理論上達到400幀/s的處理速度。由于遙測數(shù)據(jù)處理模塊使用的是FPGA的基本邏輯資源,因此也可以多個模塊并行處理遙測數(shù)據(jù),以適應(yīng)更高速的遙測數(shù)據(jù)處理需求。

圖9 遙測數(shù)據(jù)處理模塊時鐘及延時情況
圖10是遙測數(shù)據(jù)處理模塊接口部分的RTL級仿真圖。可以看出,當(dāng)遙測幀輸入到模塊后,經(jīng)過一定的處理周期,模塊輸出處理結(jié)果,RTL級仿真結(jié)果與行為級仿真一致。

圖10 遙測數(shù)據(jù)處理模塊接口部分RTL仿真圖
從開發(fā)周期上進行對比,應(yīng)用高層次綜合技術(shù),整個模塊從代碼設(shè)計、仿真直到最后的硬件測試僅僅耗費了1周的時間,而如果使用傳統(tǒng)的RTL開發(fā)流程,保守估計預(yù)計要耗費2個月的時間。
從代碼量上進行對比,由于模塊是基于C語言描述的,其抽象級別較高(行為級描述),因此相關(guān)代碼極為精簡,模塊主體代碼量僅300行左右,加上Testbench的代碼量為500行左右。與之對比,如果采用基于RTL的設(shè)計流程,整個設(shè)計的代碼量預(yù)計要增加10倍以上。
綜上所述,使用高層次綜合技術(shù)對遙測數(shù)據(jù)進行處理,在同樣滿足設(shè)計要求的情況下,其設(shè)計、開發(fā)效率要遠遠高于傳統(tǒng)的基于RTL的開發(fā)流程,同時也在很大程度上減輕了設(shè)計工程師的工作量。
目前高層次綜合技術(shù)主要應(yīng)用在圖像處理、數(shù)據(jù)編解碼[11-12]等領(lǐng)域,而在衛(wèi)星測控領(lǐng)域的應(yīng)用報道還很少。本文將高層次綜合技術(shù)應(yīng)用到地面站的遙測數(shù)據(jù)處理過程中,證明了利用高層次綜合技術(shù)可以有效提高衛(wèi)星測控產(chǎn)品相關(guān)FPGA的設(shè)計、開發(fā)效率,縮短產(chǎn)品的研制周期,因此具有推廣價值和參考價值。