呂 浩
(中國(guó)電子科技集團(tuán)公司第二十研究所,西安 710068)
軟件通信體系架構(gòu)(Software Communication Architecture,SCA)是一組實(shí)現(xiàn)軟件無(wú)線電系統(tǒng)的規(guī)則和方法的集合,定義了統(tǒng)一的軟件無(wú)線電體系結(jié)構(gòu)規(guī)范,解決了不同廠家軟件無(wú)線電產(chǎn)品的兼容問(wèn)題[1]。本文基于SCA 架構(gòu),提出一種通用的波形設(shè)計(jì)方法,將波形功能封裝成接口標(biāo)準(zhǔn)的波形組件,通過(guò)硬件抽象層接口屏蔽底層驅(qū)動(dòng)差異,并通過(guò)SCA 核心框架進(jìn)行管控,可滿足“一種波形適應(yīng)多種平臺(tái),一種平臺(tái)加載多種波形”的要求。
硬件體系架構(gòu)采用面向?qū)ο蟮念惤Y(jié)構(gòu),硬件結(jié)構(gòu)中的各部分被劃分為硬件類,硬件類再細(xì)分為各硬件子類,可涵蓋所有電子裝備應(yīng)用領(lǐng)域通用硬件。硬件架構(gòu)如圖1所示。每個(gè)子類設(shè)備都可以通過(guò)繼承的方式來(lái)獲得父類設(shè)備通用的屬性,同時(shí)每個(gè)子類也可以有自己的特定屬性。
圖1 SCA 硬件架構(gòu)
硬件類的劃分方法依據(jù)硬件設(shè)備的物理和接口特性,而不是硬件設(shè)備的特定功能,從而保證了硬件設(shè)備的通用性和可擴(kuò)展性,降低系統(tǒng)成本[2]。而軟件架構(gòu)采用分層結(jié)構(gòu),并將應(yīng)用與底層硬件分開(kāi),如圖2所示。應(yīng)用與硬件平臺(tái)中間的部分成為操作環(huán)境(Operating Environment,OE),由操作系統(tǒng)、組件間通信機(jī)制、核心框架、設(shè)備與服務(wù)組成,為波形應(yīng)用的開(kāi)發(fā)提供統(tǒng)一的底層支持和服務(wù),使波形應(yīng)用開(kāi)發(fā)具有最大的可移植性和可重用性。
圖2 SCA 軟件架構(gòu)
對(duì)于通信波形而言,一般的處理流程如圖3所示。傳統(tǒng)的波形開(kāi)發(fā)方法是將各個(gè)分功能緊密耦合在一起來(lái)實(shí)現(xiàn)波形完整功能,這樣就導(dǎo)致了軟件重用和功能升級(jí)比較困難,使得波形開(kāi)發(fā)難度大、開(kāi)發(fā)速度慢、周期長(zhǎng)[3]。
圖3 通信波形典型功能組成及流程
為了提高波形應(yīng)用的可復(fù)用性以及可移植性,降低波形開(kāi)發(fā)難度,本文基于SCA 架構(gòu),提出一種通用的波形設(shè)計(jì)方法,將波形應(yīng)用劃分為多個(gè)標(biāo)準(zhǔn)應(yīng)用組件,封裝業(yè)務(wù)功能實(shí)現(xiàn),通過(guò)核心框架實(shí)現(xiàn)波形管理控制,通過(guò)中間件及硬件抽象層進(jìn)行數(shù)據(jù)交互。
下面以某波形為例說(shuō)明波形開(kāi)發(fā)步驟,將其移植到通用軟無(wú)設(shè)備上,并驗(yàn)證該方法的可行性。通用軟無(wú)平臺(tái)硬件組成為PPC+FPGA,PPC 和FPGA之間通過(guò)LVDS 通信,如圖4所示。
圖4 通用軟無(wú)硬件平臺(tái)示意圖
組件劃分粒度大小決定了對(duì)平臺(tái)資源的需求和組件功能的可移植性、可復(fù)用性。組件劃分時(shí),可以根據(jù)硬件架構(gòu)處理器類的不同,將波形組件分為運(yùn)行在通用處理器(如PPC、ARM 等)和非通用處理器(如FGPA、DSP 等)兩類。
此外,也可以按照功能進(jìn)行組件劃分[2]。對(duì)于該波形,可分為信息處理組件和信號(hào)處理組件,其中信息處理IP 組件完成接口協(xié)議處理以及數(shù)據(jù)處理功能運(yùn)行在PPC 上;信號(hào)處理SP 組件完成編解碼、調(diào)制解調(diào)、上下變頻等功能,運(yùn)行在FPGA 上,如圖5所示。
圖5 組件劃分示意圖
IP 組件和SP 組件運(yùn)行在異構(gòu)處理器,需要借助硬件抽象層(Hardware Abstraction Layer,HAL)完成通信[3]。波形組件IP 通過(guò)中間件與HALDevice進(jìn)行數(shù)據(jù)交互,然后通過(guò)HALDevice 提供的標(biāo)準(zhǔn)接口與波形組件SP 進(jìn)行數(shù)據(jù)交互,HALDevice 標(biāo)準(zhǔn)接口中封裝 LVDS 驅(qū)動(dòng)。IP 和 SP 組件以及HALDevice 連接關(guān)系如圖6所示。
圖6 波形組件間連接關(guān)系
通過(guò)軟件無(wú)線電集成開(kāi)發(fā)環(huán)境(Integrated Development Environment,IDE)對(duì)組件建模和應(yīng)用建模,選擇恰當(dāng)?shù)慕M件類型,將IDL 文件映射生成C++框架代碼文件,同時(shí)設(shè)置組件參數(shù),建立組件間的連接關(guān)系,設(shè)置裝配控制器,生成域描述文件(包括SCD、PRF、SPD、SAD 等)。
波形組件屬于 SCA 規(guī)范[1]中定義的標(biāo)準(zhǔn)ApplicationComponent 類,繼承核心框架定義的LifeCycle 、 PortAccessor 、 PropertySet 、Controllable-Interface 等標(biāo)準(zhǔn)接口,用來(lái)實(shí)現(xiàn)波形組件的初始化(initialize)、釋放對(duì)象(releaseObject),端口連接(connectUsesPorts)、斷開(kāi)連接(disconnectPorts)、開(kāi)始(start)和停止(stop)等操作。
通用硬件平臺(tái)的GPP 和FPGA 屬于SCA 規(guī)范中的DeviceComponent 類,需繼承核心框架定義的LifeCycle 、 PortAccessor 、 PropertySet 和ControllableInterface 等標(biāo)準(zhǔn)接口,并根據(jù)各自特定的屬性,分別繼承 ExecutableInterface 和LoadableInterface,為波形應(yīng)用提供標(biāo)準(zhǔn)訪問(wèn)硬件接口,使得波形應(yīng)用與硬件解耦,可實(shí)現(xiàn)波形在包含相同類型處理器的不同硬件平臺(tái)的移植。
HALDevice 屬于 SCA 規(guī)范中定義的標(biāo)準(zhǔn)DeviceComponent 類,除LifeCycle、PortAccessor、PropertySet 和ControllableInterface 等標(biāo)準(zhǔn)接口外,還需繼承MHAL::MHALPacketConsumer 接口,將底層驅(qū)動(dòng)封裝成統(tǒng)一的pushPacket 接口,實(shí)現(xiàn)異構(gòu)處理器間的數(shù)據(jù)交互。利用該接口可屏蔽底層硬件的差異,便于波形在不同硬件平臺(tái)的移植。
將實(shí)現(xiàn)波形功能的代碼填入建模生成的框架代碼中進(jìn)行封裝,如圖7所示。波形組件模型由外部接口和內(nèi)部封裝的功能代碼組成。外部接口的主接口繼承了核心框架中的接口,用于組件的控制和管理;數(shù)據(jù)端口主要用于組件之間的數(shù)據(jù)傳遞。
圖7 波形組件功能封裝示意圖
內(nèi)部封裝的組件代碼由框架代碼、功能代碼和膠水代碼組成[4]。其中框架代碼的主要作用是封裝組件內(nèi)部的功能代碼,并負(fù)責(zé)組件與組件之間、組件與核心框架之間的通信;功能代碼是實(shí)現(xiàn)波形功能的算法;膠水代碼作為框架代碼和功能代碼之間的橋梁,其主要作用是轉(zhuǎn)發(fā)框架代碼和功能代碼之間的通信數(shù)據(jù),并負(fù)責(zé)對(duì)通信數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換。編譯封裝好的波形組件,生成可執(zhí)行文件。
不同功能的應(yīng)用對(duì)應(yīng)不同的功能代碼和膠水代碼,但框架代碼相同且可復(fù)用,因此,在組件劃分方式相同的前提下,只需要修改功能代碼和膠水代碼,便可以將不同功能的波形可移植到同一硬件平臺(tái)。
核心框架提供了標(biāo)準(zhǔn)的接口對(duì)運(yùn)行在軟件平臺(tái)的波形應(yīng)用進(jìn)行管理控制,以保證波形能夠正常加安裝、加卸載和運(yùn)行停止。
(1)波形安裝
波形組件及相關(guān)文件安裝到設(shè)備存儲(chǔ)空間相應(yīng)的文件路徑,并且調(diào)用核心框架installApplication操作,創(chuàng)建應(yīng)用工廠實(shí)例以及組件注冊(cè)器實(shí)例,用于創(chuàng)建波形及波形注冊(cè),序列圖如圖8所示。
圖8 波形安裝序列圖
(2)波形部署
建立波形組件和設(shè)備組件的部署關(guān)系,確保波形可執(zhí)行程序運(yùn)行在該硬件處理器上。對(duì)于該波形,IP 組件部署在 GPPDevice,SP 組件部署在FPGADevice。
(3)波形加載
調(diào)用應(yīng)用工廠create 接口,生成應(yīng)用組件實(shí)例,根據(jù)部署關(guān)系,調(diào)用allocateCapacity 接口分配處理器的內(nèi)存及堆棧給波形組件;調(diào)用設(shè)備的load 接口將波形應(yīng)用中各個(gè)組件部署到符合條件的設(shè)備上;運(yùn)行波形組件可執(zhí)行程序,初始化組件;根據(jù)SAD文件中定義的組件連接關(guān)系,調(diào)用connectUsesPorts接口建立組件間的連接關(guān)系,創(chuàng)建成功后,向域內(nèi)注冊(cè),序列圖如圖9所示。
圖9 波形加載序列圖
(4)波形啟動(dòng)
波形加載后,調(diào)用start 函數(shù),啟動(dòng)波形應(yīng)用。
(5)波形停止
調(diào)用stop 函數(shù),使波形組件停止工作。
(6)波形卸載
調(diào)用disconnectPorts 操作斷開(kāi)波形組件間連接關(guān)系,調(diào)用releaseObject 操作釋放波形組件對(duì)象,調(diào)用terminate 和unload 操作,刪除部署在處理器的波形可執(zhí)行文件,并釋放分配空間,完成波形卸載,序列圖如圖10 所示。
圖10 波形卸載序列圖
(7)波形刪除
調(diào)用核心框架uninstallApplication 操作,將波形從域內(nèi)刪除。
按照上述方法進(jìn)行波形移植,并與非軟無(wú)平臺(tái)進(jìn)行通信測(cè)試,測(cè)試環(huán)境如圖11 所示。軟無(wú)平臺(tái)通過(guò)交換機(jī)與波形管控軟件以及平臺(tái)模擬器相連,非軟無(wú)平臺(tái)通過(guò)交換機(jī)與平臺(tái)模擬器相連。測(cè)試中,通過(guò)波形控制軟件下發(fā)指令,波形能正常安裝刪除、部署、加卸載和運(yùn)行停止,通過(guò)平臺(tái)模擬器發(fā)送并接受測(cè)試數(shù)據(jù),通信測(cè)試功能正常。
圖11 通信測(cè)試環(huán)境示意圖
對(duì)該波形進(jìn)行SCA 符合性測(cè)試,軟無(wú)平臺(tái)與符合性測(cè)試軟件通過(guò)交換機(jī)相連,如圖12 所示。啟動(dòng)測(cè)試用例,測(cè)試應(yīng)用及組件的域描述文件符合性、接口符合性等,測(cè)試用例全部通過(guò)。
圖12 符合性測(cè)試環(huán)境示意圖
本文提出一種基于SCA 架構(gòu)波形設(shè)計(jì)方法,將波形應(yīng)用封裝為標(biāo)準(zhǔn)應(yīng)用組件,通過(guò)硬件抽象層屏蔽底層驅(qū)動(dòng)的差異,采用核心框架實(shí)現(xiàn)波形管理控制。利用該方法可將不同功能的波形封裝成波形組件庫(kù)移植到軟無(wú)平臺(tái),為波形數(shù)據(jù)交互提供統(tǒng)一的接口,保證波形在不同的軟無(wú)平臺(tái)上移植和復(fù)用,縮短研發(fā)周期,降低維護(hù)成本,滿足“一種波形適應(yīng)多種平臺(tái),一種平臺(tái)加載多種波形”的要求。