吕 浩
(中国电子科技集团公司第二十研究所,西安 710068)
软件通信体系架构(Software Communication Architecture,SCA)是一组实现软件无线电系统的规则和方法的集合,定义了统一的软件无线电体系结构规范,解决了不同厂家软件无线电产品的兼容问题[1]。本文基于SCA 架构,提出一种通用的波形设计方法,将波形功能封装成接口标准的波形组件,通过硬件抽象层接口屏蔽底层驱动差异,并通过SCA 核心框架进行管控,可满足“一种波形适应多种平台,一种平台加载多种波形”的要求。
硬件体系架构采用面向对象的类结构,硬件结构中的各部分被划分为硬件类,硬件类再细分为各硬件子类,可涵盖所有电子装备应用领域通用硬件。硬件架构如图1所示。每个子类设备都可以通过继承的方式来获得父类设备通用的属性,同时每个子类也可以有自己的特定属性。
图1 SCA 硬件架构
硬件类的划分方法依据硬件设备的物理和接口特性,而不是硬件设备的特定功能,从而保证了硬件设备的通用性和可扩展性,降低系统成本[2]。而软件架构采用分层结构,并将应用与底层硬件分开,如图2所示。应用与硬件平台中间的部分成为操作环境(Operating Environment,OE),由操作系统、组件间通信机制、核心框架、设备与服务组成,为波形应用的开发提供统一的底层支持和服务,使波形应用开发具有最大的可移植性和可重用性。
图2 SCA 软件架构
对于通信波形而言,一般的处理流程如图3所示。传统的波形开发方法是将各个分功能紧密耦合在一起来实现波形完整功能,这样就导致了软件重用和功能升级比较困难,使得波形开发难度大、开发速度慢、周期长[3]。
图3 通信波形典型功能组成及流程
为了提高波形应用的可复用性以及可移植性,降低波形开发难度,本文基于SCA 架构,提出一种通用的波形设计方法,将波形应用划分为多个标准应用组件,封装业务功能实现,通过核心框架实现波形管理控制,通过中间件及硬件抽象层进行数据交互。
下面以某波形为例说明波形开发步骤,将其移植到通用软无设备上,并验证该方法的可行性。通用软无平台硬件组成为PPC+FPGA,PPC 和FPGA之间通过LVDS 通信,如图4所示。
图4 通用软无硬件平台示意图
组件划分粒度大小决定了对平台资源的需求和组件功能的可移植性、可复用性。组件划分时,可以根据硬件架构处理器类的不同,将波形组件分为运行在通用处理器(如PPC、ARM 等)和非通用处理器(如FGPA、DSP 等)两类。
此外,也可以按照功能进行组件划分[2]。对于该波形,可分为信息处理组件和信号处理组件,其中信息处理IP 组件完成接口协议处理以及数据处理功能运行在PPC 上;信号处理SP 组件完成编解码、调制解调、上下变频等功能,运行在FPGA 上,如图5所示。
图5 组件划分示意图
IP 组件和SP 组件运行在异构处理器,需要借助硬件抽象层(Hardware Abstraction Layer,HAL)完成通信[3]。波形组件IP 通过中间件与HALDevice进行数据交互,然后通过HALDevice 提供的标准接口与波形组件SP 进行数据交互,HALDevice 标准接口中封装 LVDS 驱动。IP 和 SP 组件以及HALDevice 连接关系如图6所示。
图6 波形组件间连接关系
通过软件无线电集成开发环境(Integrated Development Environment,IDE)对组件建模和应用建模,选择恰当的组件类型,将IDL 文件映射生成C++框架代码文件,同时设置组件参数,建立组件间的连接关系,设置装配控制器,生成域描述文件(包括SCD、PRF、SPD、SAD 等)。
波形组件属于 SCA 规范[1]中定义的标准ApplicationComponent 类,继承核心框架定义的LifeCycle 、 PortAccessor 、 PropertySet 、Controllable-Interface 等标准接口,用来实现波形组件的初始化(initialize)、释放对象(releaseObject),端口连接(connectUsesPorts)、断开连接(disconnectPorts)、开始(start)和停止(stop)等操作。
通用硬件平台的GPP 和FPGA 属于SCA 规范中的DeviceComponent 类,需继承核心框架定义的LifeCycle 、 PortAccessor 、 PropertySet 和ControllableInterface 等标准接口,并根据各自特定的属性,分别继承 ExecutableInterface 和LoadableInterface,为波形应用提供标准访问硬件接口,使得波形应用与硬件解耦,可实现波形在包含相同类型处理器的不同硬件平台的移植。
HALDevice 属于 SCA 规范中定义的标准DeviceComponent 类,除LifeCycle、PortAccessor、PropertySet 和ControllableInterface 等标准接口外,还需继承MHAL::MHALPacketConsumer 接口,将底层驱动封装成统一的pushPacket 接口,实现异构处理器间的数据交互。利用该接口可屏蔽底层硬件的差异,便于波形在不同硬件平台的移植。
将实现波形功能的代码填入建模生成的框架代码中进行封装,如图7所示。波形组件模型由外部接口和内部封装的功能代码组成。外部接口的主接口继承了核心框架中的接口,用于组件的控制和管理;数据端口主要用于组件之间的数据传递。
图7 波形组件功能封装示意图
内部封装的组件代码由框架代码、功能代码和胶水代码组成[4]。其中框架代码的主要作用是封装组件内部的功能代码,并负责组件与组件之间、组件与核心框架之间的通信;功能代码是实现波形功能的算法;胶水代码作为框架代码和功能代码之间的桥梁,其主要作用是转发框架代码和功能代码之间的通信数据,并负责对通信数据进行格式转换。编译封装好的波形组件,生成可执行文件。
不同功能的应用对应不同的功能代码和胶水代码,但框架代码相同且可复用,因此,在组件划分方式相同的前提下,只需要修改功能代码和胶水代码,便可以将不同功能的波形可移植到同一硬件平台。
核心框架提供了标准的接口对运行在软件平台的波形应用进行管理控制,以保证波形能够正常加安装、加卸载和运行停止。
(1)波形安装
波形组件及相关文件安装到设备存储空间相应的文件路径,并且调用核心框架installApplication操作,创建应用工厂实例以及组件注册器实例,用于创建波形及波形注册,序列图如图8所示。
图8 波形安装序列图
(2)波形部署
建立波形组件和设备组件的部署关系,确保波形可执行程序运行在该硬件处理器上。对于该波形,IP 组件部署在 GPPDevice,SP 组件部署在FPGADevice。
(3)波形加载
调用应用工厂create 接口,生成应用组件实例,根据部署关系,调用allocateCapacity 接口分配处理器的内存及堆栈给波形组件;调用设备的load 接口将波形应用中各个组件部署到符合条件的设备上;运行波形组件可执行程序,初始化组件;根据SAD文件中定义的组件连接关系,调用connectUsesPorts接口建立组件间的连接关系,创建成功后,向域内注册,序列图如图9所示。
图9 波形加载序列图
(4)波形启动
波形加载后,调用start 函数,启动波形应用。
(5)波形停止
调用stop 函数,使波形组件停止工作。
(6)波形卸载
调用disconnectPorts 操作断开波形组件间连接关系,调用releaseObject 操作释放波形组件对象,调用terminate 和unload 操作,删除部署在处理器的波形可执行文件,并释放分配空间,完成波形卸载,序列图如图10 所示。
图10 波形卸载序列图
(7)波形删除
调用核心框架uninstallApplication 操作,将波形从域内删除。
按照上述方法进行波形移植,并与非软无平台进行通信测试,测试环境如图11 所示。软无平台通过交换机与波形管控软件以及平台模拟器相连,非软无平台通过交换机与平台模拟器相连。测试中,通过波形控制软件下发指令,波形能正常安装删除、部署、加卸载和运行停止,通过平台模拟器发送并接受测试数据,通信测试功能正常。
图11 通信测试环境示意图
对该波形进行SCA 符合性测试,软无平台与符合性测试软件通过交换机相连,如图12 所示。启动测试用例,测试应用及组件的域描述文件符合性、接口符合性等,测试用例全部通过。
图12 符合性测试环境示意图
本文提出一种基于SCA 架构波形设计方法,将波形应用封装为标准应用组件,通过硬件抽象层屏蔽底层驱动的差异,采用核心框架实现波形管理控制。利用该方法可将不同功能的波形封装成波形组件库移植到软无平台,为波形数据交互提供统一的接口,保证波形在不同的软无平台上移植和复用,缩短研发周期,降低维护成本,满足“一种波形适应多种平台,一种平台加载多种波形”的要求。