李 鵬,孫 學(xué),路小超
(中國電子科技集團(tuán)公司第十研究所,四川 成都 610036)
如何實(shí)現(xiàn)標(biāo)準(zhǔn)化的波形建模方法,縮短系統(tǒng)開發(fā)時間,是目前機(jī)載傳感器系統(tǒng)開發(fā)過程中需要解決的關(guān)鍵問題之一[1,2]。
國外F35采用開放式架構(gòu)實(shí)現(xiàn)了機(jī)載傳感器數(shù)字部分及射頻前端的綜合,通過標(biāo)準(zhǔn)的信號與數(shù)據(jù)處理單元完成傳感器和任務(wù)設(shè)備的信號與數(shù)據(jù)處理,實(shí)現(xiàn)了通信導(dǎo)航識別、雷達(dá)及電子戰(zhàn)等多項(xiàng)無線傳感器功能[3,4]。借助開放性、模塊化和通用化的硬件平臺,F(xiàn)35進(jìn)一步借鑒了軟件無線電思想,將各種功能如工作頻段、調(diào)制解調(diào)和通信協(xié)議等使用軟件模塊完成,以研制出具有高度靈活、開放性的新一代無線通信系統(tǒng)[5]。JTRS聯(lián)合項(xiàng)目辦公室發(fā)布的軟件通信體系結(jié)構(gòu)SCA2.2.2標(biāo)準(zhǔn),標(biāo)準(zhǔn)化了波形的建模和開發(fā)流程。為了實(shí)現(xiàn)波形與硬件解耦,后續(xù)又發(fā)布了MHAL[6]和MOCB[7]規(guī)范,但是鮮有基于這些中間件的規(guī)范化波形建模與開發(fā)流程。
目前,機(jī)載平臺中已大量使用如RapidIO等支持高速內(nèi)存映射機(jī)制的數(shù)據(jù)總線。然而在大規(guī)模系統(tǒng)應(yīng)用中,內(nèi)存空間劃分與地址規(guī)劃復(fù)雜,缺乏規(guī)范化建模和管配方法,應(yīng)用中還經(jīng)常面臨如下問題:①平臺異構(gòu)特性封裝需求;②波形高帶寬和動態(tài)部署需求;③標(biāo)準(zhǔn)化波形建模方法需求。本文將基于高速內(nèi)存映射機(jī)制通信總線,結(jié)合JTNC MOCB標(biāo)準(zhǔn),提出了一種規(guī)范化的波形建模方法,解決上述波形開發(fā)中面臨的問題。
機(jī)載高速信號處理機(jī)主要用于完成機(jī)載各種傳感器的信號與信息處理及其它運(yùn)算控制等功能,是航電系統(tǒng)的重要組成平臺,通常具有如下特點(diǎn):
(1)遵循標(biāo)準(zhǔn)的綜合化開放式系統(tǒng)結(jié)構(gòu),采用通用化、多目的和標(biāo)準(zhǔn)化的數(shù)據(jù)和信號處理模塊,支持資源冗余和靈活可變的硬件線程重組設(shè)計(jì),提升系統(tǒng)的可擴(kuò)展性和可靠性;
(2)集成通用的高性能異構(gòu)類型處理單元,如MPC8640和P2020、TMS320C600系列多核DSP、Xilinx K7系列FPGA。在滿足不同波形高性能信號解算、數(shù)據(jù)處理等運(yùn)算需求的同時,避免器件種類的多樣化;
(3)使用高性能的分布式互連總線,如RapidIO總線等[8,9]。RapidIO 1.x標(biāo)準(zhǔn)支持的信號速率為1.25 Gbps、2.5 Gbps和3.125 Gbps。借助高速交換芯片如CPS-1848(支持12路4x或18路1x)、TSI578(支持8路4x+8路1x或16路1x)和互聯(lián)背板可以實(shí)現(xiàn)模塊內(nèi)部和模塊間的高速數(shù)據(jù)傳輸,能夠支持目前CNI、電子戰(zhàn)和雷達(dá)的波形應(yīng)用需求。后續(xù)發(fā)布的RapidIO 2.x標(biāo)準(zhǔn)在兼容RapidIO 1.x標(biāo)準(zhǔn)基礎(chǔ)上,增加了支持5Gbps和6.25Gbps的傳輸速率[10],對滿足未來機(jī)載波形高速通信需求提供了有效的技術(shù)保障。
雖然RapidIO規(guī)范支持消息通信、全局共享內(nèi)存(GSM)和直接輸入輸出(DIO)等多種通信機(jī)制,為了支持高速機(jī)載波形的數(shù)據(jù)交互需求,本文采用RapidIO DIO內(nèi)存映射通信模式構(gòu)建高速的異構(gòu)處理器互聯(lián)通道,以滿足波形的數(shù)據(jù)交互需求。
圖1給出了基于RapidIO的機(jī)載高速信號處理機(jī)資源互聯(lián),其中包含了各類計(jì)算單元處理板,板內(nèi)單元通過高速交換芯片進(jìn)行互聯(lián),并通過交換芯片連接至交換模塊,實(shí)現(xiàn)板間的數(shù)據(jù)通信。交換板預(yù)留與外部的互聯(lián)接口,實(shí)現(xiàn)與射頻系統(tǒng)以及其它高速處理單元的互聯(lián)。
集成開放式體系架構(gòu)、通用處理單元和高速互聯(lián)總線的機(jī)載異構(gòu)處理平臺,為實(shí)現(xiàn)波形的建模開發(fā),提高系統(tǒng)開發(fā)效率和波形復(fù)用率提供了一個更加標(biāo)準(zhǔn)化的運(yùn)行環(huán)境。
圖1 機(jī)載異構(gòu)平臺資源互聯(lián)
JTNC辦公室于2013年公布了MOCB 1.1.5版應(yīng)用編程接口規(guī)范,用于支持GPPs、DSPs和FPGAs上波形組件間的高速數(shù)據(jù)互聯(lián)通信[7]。區(qū)別于MHAL,MOCB是進(jìn)一步對內(nèi)存映射類型通信機(jī)制接口的封裝和組件數(shù)據(jù)傳輸通信的規(guī)范,適用于高速、大數(shù)據(jù)量的數(shù)據(jù)通信需求。本文參照MOCB 1.1.5版規(guī)范,結(jié)合實(shí)際應(yīng)用需求實(shí)現(xiàn)了E*MOCB硬件抽象層中間件。
E*MOCB定義了如下關(guān)鍵概念:
邏輯地址(LD):表示波形組件的邏輯ID,與平臺無關(guān)。波形組件間使用邏輯地址進(jìn)行通信;
事件(Event):與波形組件相對應(yīng),當(dāng)事件分發(fā)寄存器狀態(tài)改變時需要觸發(fā)事件發(fā)生;
子事件(SubEvent):對應(yīng)于事件分發(fā)寄存器中的一個狀態(tài)位,通常用于區(qū)分不同源端觸發(fā)的相同事件信息。子事件與一個信號量關(guān)聯(lián),子事件狀態(tài)的改變將觸發(fā)事件的發(fā)生;
事件分發(fā)寄存器(EventMux):每個事件對應(yīng)一個事件分發(fā)寄存器,用于存儲子事件相關(guān)狀態(tài)信息,寄存器的長度由關(guān)聯(lián)的子事件個數(shù)決定;
占用狀態(tài)位(IU):表示數(shù)據(jù)的忙閑狀態(tài),用于實(shí)現(xiàn)數(shù)據(jù)收發(fā)端的內(nèi)存互斥訪問和流控等操作;
連接(Connection):表示源端與目的LD之間的一條數(shù)據(jù)通路。對于每個處理單元上提供的LD,所有與其關(guān)聯(lián)的子事件都對應(yīng)一條連接。
基于內(nèi)存映射機(jī)制的波形組件數(shù)據(jù)交互,需要根據(jù)節(jié)點(diǎn)上波形組件的使用需求,完成內(nèi)存塊大小及地址的劃分,避免出現(xiàn)數(shù)據(jù)重疊等問題。圖2在上述概念基礎(chǔ)上給出了接收端包含3個邏輯地址的內(nèi)存劃分的示例,以及關(guān)聯(lián)的事件/事件分發(fā)寄存器映射配置信息。
圖2 E*MOCB波形組件內(nèi)存資源分配
如圖3所示,波形側(cè)接口用于描述波形組件與E*MOCB之間的標(biāo)準(zhǔn)化通信接口規(guī)范,該部分接口在GPP和DSP、FPGA平臺上保持一致;驅(qū)動側(cè)接口用于描述E*MOCB與內(nèi)存映射類型通信總線驅(qū)動之間的接口要求。為了適應(yīng)不同內(nèi)存映射機(jī)制總線差異,需要實(shí)現(xiàn)對應(yīng)的驅(qū)動接口適配模塊。
圖3 E*MOCB波形與驅(qū)動側(cè)接口使用場景
根據(jù)應(yīng)用需求,本文實(shí)現(xiàn)如下波形側(cè)C語言接口(FPGA部分接口與規(guī)范保持一致,這里不作說明),包括非阻塞讀、阻塞讀、非阻塞寫、阻塞寫、LD地址映射配置和事件配置等,具體接口定義及參數(shù)說明請參閱MOCB1.1.5版規(guī)范[7]:
mocbRead:實(shí)現(xiàn)本地組件的非阻塞數(shù)據(jù)讀??;
readWait:實(shí)現(xiàn)本地組件的阻塞式數(shù)據(jù)讀取,阻塞時間可以通過參數(shù)設(shè)置;
mocbWrite:實(shí)現(xiàn)對遠(yuǎn)端數(shù)據(jù)非阻塞寫功能;
writeWait:實(shí)現(xiàn)對遠(yuǎn)端數(shù)據(jù)的阻塞寫功能,阻塞時間可以通過參數(shù)設(shè)置;
configLDMap:配置LD與內(nèi)存地址的映射關(guān)系;
registerEventMux:用于給波形組件使用的事件分配事件分發(fā)寄存器空間;
registerSemaphore:用于建立事件、子事件以及波形軟件管理的信號量之間的關(guān)聯(lián)關(guān)系;
unregisterSemaphore:用于注銷信號量。
通過E*MOCB屏蔽了異構(gòu)平臺的硬件差異,波形的開發(fā)無需關(guān)注平臺相關(guān)信息,從而提高波形的可移植性和可復(fù)用性。
然而,由于各平臺提供的總線驅(qū)動接口可能存在差異,為了進(jìn)一步提高E*MOCB的平臺可移植性,適配不同的內(nèi)存映射機(jī)制高速互聯(lián)總線,這里進(jìn)一步約束了GPPs和DSPs上驅(qū)動側(cè)接口形式:
(1)事件發(fā)送接口:
MOCBErrorCodes eventIdWrite (
unsigned short eventId,
struct MOCBPhyAddr addr);
(2)子事件發(fā)送接口:
MOCBErrorCodes subEventIdWrite (
unsigned short subEventId,
struct MOCBPhyAddr addr);
(3)數(shù)據(jù)寫接口:
MOCBErrorCodes dataWrite (
unsigned int dataLen,
unsigned char* data,
struct MOCBPhyAddr addr);
(4)數(shù)據(jù)讀接口
MOCBErrorCodes dataRead (
unsigned int dataLen,
unsigned char* data,
struct MOCBPhyAddr addr);
對于異構(gòu)平臺,需要在不同的總線驅(qū)動上封裝上述接口,并利用E*MOCB提供的注冊接口完成不同類型總線收發(fā)接口的掛接,以避免由于驅(qū)動的不同對E*MOCB中間件帶來的修改。
內(nèi)存映射通信機(jī)制下的波形建模需要考慮內(nèi)存劃分、數(shù)據(jù)包緩存、流控和數(shù)據(jù)覆蓋等問題,借助E*MOCB中間件,可以實(shí)現(xiàn)對內(nèi)存區(qū)域的合理管控,滿足高性能、靈活復(fù)雜的數(shù)據(jù)通信需求?;贓*MOCB的波形建模應(yīng)遵循如下流程:
(1)采用自頂向下的方式進(jìn)行波形資源需求分析,確定所需的計(jì)算資源類型和數(shù)量;
(2)采用逆向自底向上的原則進(jìn)行每個計(jì)算單元上的波形組件建模,確定波形組件的劃分方法,每個波形組件需要提供服務(wù)的端口數(shù)量、接收數(shù)據(jù)包的大小、緩存數(shù)據(jù)包的數(shù)量等;
(3)確定波形組件間的交互關(guān)系,建立提供者端口與使用者端口之間的連接關(guān)系,完成波形的數(shù)據(jù)通信關(guān)系建模。
圖4給出了一個波形建模示例,由運(yùn)行在計(jì)算節(jié)點(diǎn)A和B上的3個波形組件構(gòu)成,其中計(jì)算節(jié)點(diǎn)A包括兩個波形組件,對應(yīng)于LD1和LD2,LD1具有兩個提供者端口(即LD1對應(yīng)的波形組件支持最多兩個使用者),每個提供者端口支持的接收數(shù)據(jù)包長度最大都為128 KB,最多可以緩存4包數(shù)據(jù),LD2包括一個提供者端口;計(jì)算節(jié)點(diǎn)B包括一個波形組件,對應(yīng)于LD3,具有一個提供者端口。計(jì)算節(jié)點(diǎn)A需要使用B節(jié)點(diǎn)LD3的提供者端口,而計(jì)算節(jié)點(diǎn)B需要使用A節(jié)點(diǎn)LD1的第一個提供者端口和LD2的提供者端口。節(jié)點(diǎn)間使用端口和提供端口調(diào)用關(guān)系通過連接進(jìn)行表示。
圖4 基于E*MOCB的波形建模
波形描述是將波形對象抽象并描述成具有邏輯關(guān)系的數(shù)據(jù)表達(dá)方式,其目的是在不同數(shù)據(jù)使用者之間共享數(shù)字化的事務(wù)描述,常用的描述方法如XML等??紤]機(jī)載環(huán)境的存儲及解析復(fù)雜度問題,本文采用了更易于解析的Json格式進(jìn)行波形模型描述。Json是一種更加簡潔高效的形式化描述工具,允許通過使用自定義格式、標(biāo)識、交換和處理數(shù)據(jù)庫可以理解的數(shù)據(jù),具有完善的解析和封裝支持[10]。
波形描述分為波形、組件和連接關(guān)系描述3部分。波形描述是頂層描述,涵蓋組件和連接等。波形組件描述項(xiàng)包括:事件、子事件、內(nèi)存地址劃分和內(nèi)存大小等。連接關(guān)系描述項(xiàng)包括:使用端節(jié)點(diǎn)ID、提供者組件LD和子事件ID等。
如下給出了圖4所示模型的部分描述示例:
/*波形描述示例*/
{ “wvID”: “DCE: WAVEDEMO”,
“wvName”: “WAVEDEMO”,
“wvDevice”: [ { “wvDeviceType”: “DSP”,
“wvDeviceID”: “DCE:A”,
“wvDeviceComponent”:
[/*組件描述*/]},
{ “wvDeviceType”: “PPC”,
“wvDeviceID”: “DCE:B”,
“wvDeviceComponent”:
[/*組件描述*/]}
],
“wvConnection”: [/*連接關(guān)系描述*/]
}
/*組件描述示例*/
{/*計(jì)算節(jié)點(diǎn)B上組件描述*/
“ComponentName”: “COMLD3”,
“MemSize”: 0x40000,
“MemAddr”: 0x80000000,
“ComponentLD”: LD3,
“EventID”: EventId3,
“RecvPktMaxLen”:0x10000,
“BufPktNum”:3,
“SubEventNum”: 1,
“SubEvent”:[{“SubEventId”:0,
“Connection”:0,
“Offset”:8}]
}
/*連接描述示例*/
{ ConnectionSum:3,
/*計(jì)算節(jié)點(diǎn)A到LD3提供者端口的連接描述*/
ConnectionInfo: [
{“ConnectionID”: 1,
“SrcDeviceID”: “DCE:A”,
“DstComponentLD”: LD3,
“DstSubEventId”: 0},
…]
}
波形建模時采用“接收方規(guī)劃,告知發(fā)送方結(jié)果”的模式,每個組件規(guī)劃自己的提供者端口實(shí)現(xiàn),使用者通過連接關(guān)系獲取提供者端口信息。在進(jìn)行數(shù)據(jù)發(fā)送時,系統(tǒng)控管軟件通過解析波形描述文件,同時結(jié)合組件實(shí)際部署位置信息,完成平臺相關(guān)部分的配置。
波形的建模與實(shí)現(xiàn)具有平臺無關(guān)性,實(shí)際應(yīng)用中需要根據(jù)物理資源狀態(tài)信息完成波形部署運(yùn)行[11]。
如圖5所示,在邏輯層面,波形組件之間的數(shù)據(jù)收發(fā)僅需要通過調(diào)用E*MOCB提供的標(biāo)準(zhǔn)通信接口和邏輯地址完成,無需關(guān)注具體的實(shí)際部署情況;在物理部署層面,系統(tǒng)控制管理軟件根據(jù)波形模型和組件部署位置信息計(jì)算并完成對組件所在節(jié)點(diǎn)E*MOCB的配置,建立邏輯地址到物理地址的映射關(guān)系,中間件通過調(diào)用具體的底層總線驅(qū)動將數(shù)據(jù)發(fā)送到對方,對方節(jié)點(diǎn)E*MOCB收到數(shù)據(jù)后根據(jù)LD等信息將數(shù)據(jù)路由給對應(yīng)的波形組件,從而實(shí)現(xiàn)應(yīng)用數(shù)據(jù)的通信。當(dāng)波形組件部署位置發(fā)生變化時,只需要重新計(jì)算部署節(jié)點(diǎn)上的路由信息,并完成對E*MOCB的配置,就可實(shí)現(xiàn)波形的動態(tài)部署運(yùn)行。
圖5 異構(gòu)平臺的波形動態(tài)部署
如圖6所示,實(shí)驗(yàn)部分使用由運(yùn)行于PPC、DSP和FPGA這3類處理器上的6個波形組件構(gòu)成的波形樣例進(jìn)行測試。
圖6 測試波形樣例
該波形的功能和運(yùn)行流程如下:FPGA上的組件1作為測試數(shù)據(jù)源,調(diào)用組件2和組件4提供的端口,間隔向這兩個組件發(fā)送長度為512 KB的數(shù)據(jù),組件2(完成相鄰奇偶位置數(shù)據(jù)相加后對16取模)和組件4,組件3(完成相鄰奇偶位置數(shù)據(jù)相乘后對16取模)和組件5具有相同的處理功能,組件3和組件5將處理完的數(shù)據(jù)發(fā)送到組件6(具有兩個提供者端口),組件6對組件3和5發(fā)送的數(shù)據(jù)進(jìn)行對比。測試中數(shù)據(jù)的發(fā)送采用阻塞模式,以匹配不同類型處理器的運(yùn)算速度差異。波形組件的關(guān)鍵配置信息見表1。
表1 波形組件關(guān)鍵配置信息
實(shí)驗(yàn)中,在某預(yù)研項(xiàng)目的綜合信號處理機(jī)(ISP)中進(jìn)行了測試。ISP內(nèi)集成了通用的數(shù)據(jù)和信號處理模塊,處理器包括P2020、TMS320C6678和Xilinx X7K325T等高性能處理單元,處理單元間通過高速交換芯片CPS-1848進(jìn)行RapidIO總線互聯(lián),實(shí)現(xiàn)4×3.125Gbps模式高速數(shù)據(jù)傳輸。
測試時,首先由ISP控制管理程序?qū)y試波形描述進(jìn)行解析,接下來按照波形描述、所需物理資源及RapidIO連接關(guān)系進(jìn)行波形組件部署及節(jié)點(diǎn)的E*MOCB中間件信息配置,最后根據(jù)組件間的邏輯連接關(guān)系建立節(jié)點(diǎn)間的RapidIO鏈路層連接關(guān)系。
完成部署和配置后,啟動各節(jié)點(diǎn)的程序,并觸發(fā)COM1組件發(fā)送數(shù)據(jù)。通過測試結(jié)果可知,波形運(yùn)行正常,組件6從組件4和5接收的處理結(jié)果數(shù)據(jù)相同。測試中,所有組件都采用了阻塞式流控發(fā)送模式,如果接收端處理速度慢,且緩沖已滿,則觸發(fā)發(fā)送端進(jìn)行流控。測試的整體數(shù)據(jù)帶寬受RIO總線性能以及各節(jié)點(diǎn)處理性能的影響。因?yàn)槭褂昧肆骺貦C(jī)制,因此不存在數(shù)據(jù)包丟失的情況。據(jù)測試,對于512 KB數(shù)據(jù),中間件收發(fā)數(shù)據(jù)帶寬可達(dá)7 Gbps以上,為更好實(shí)現(xiàn)機(jī)載傳感器功能集成提供了保證。
測試用例中,在各組件中實(shí)現(xiàn)了數(shù)據(jù)的加、乘和對比等運(yùn)算,通過更改組件功能就可快速構(gòu)成其它的波形功能。通過本文提出的方法,在完成波形數(shù)據(jù)通信流程建模后,波形開發(fā)者只需要在組件內(nèi)添加具體功能實(shí)現(xiàn),無需關(guān)注通信細(xì)節(jié),可以顯著提升波形復(fù)用率和軟件開發(fā)效率。
本文針對機(jī)載高速內(nèi)存映射異構(gòu)平臺,分析了大規(guī)模機(jī)載波形建模的應(yīng)用需求,針對異構(gòu)平臺的建模環(huán)境,提出了基于E*MOCB硬件抽象層的內(nèi)存映射總線底層封裝方法和標(biāo)準(zhǔn)化的波形組件以及波形建模、描述方法,實(shí)現(xiàn)了波形與平臺的解耦和規(guī)范化的設(shè)計(jì)與開發(fā),規(guī)范了基于高速內(nèi)存映射機(jī)制通信總線的機(jī)載異構(gòu)平臺波形建模,能夠推進(jìn)模型驅(qū)動的軟件開發(fā)實(shí)踐,提升波形軟件的復(fù)用率。