随着对无线通信带宽、速率等提出的更高要求,GPP受工作方式、处理能力的限制,难以满足这些要求,这就需要FPGA(Field Program-mable Gate Array)的加入来实现波形组件的并行处理和高速运算等功能。虽然SCA为GPP上的波形组件提供了很好的可移植性和可重用性,但目前还没有一个标准能够为FPGA上的波形组件提供这种支持。为了实现FPGA上波形组件的可移植性和可重用性,一些方案是在GPP上实现FPGA上波形组件的代理,其中比较典型的是JTRS JPEO提出的MHAL(Modem Hardware Abstraction Layer),同时,也有部分公司或团体提出了直接在FPGA上实现CORBA的方案。本文将在分析MHAL和现存的CORBA方案优缺点的基础上,提出一种在FPGA上实现CORBA的改进设计方案,并对该方案进行了测试验证。 1 技术介绍 1.1 CORBA简介 CORBA中间件标准是SCA必需的中间件层,它为SDR系统提供所需的通信架构。CORBA位于应用程序和操作系统之间,屏蔽了不同平台、操作系统、网络协议等的差别,为开发者提供了一致的调用模式。通过CORBA,应用组件可以获得良好的可移植性、可重用性和互操作性。 ORB(Object ReqLtest Broker)是CORBA的核心,其任务是帮助客户调用对象上的方法,包括:定位对象、激活对象、把客户的请求传递给对象。ORB能够屏蔽与底层平台有关的细节,保证了信息在分布式环境中不同平台上的应用组件间透明地传输。为了使由不同开发者开发的实现之间能相互通信,CORBA规范定义了GIOP(General Inter-ORB Protocol)协议标准,能够在任何具有连接的传输层上实现。 1.2 SCA简介 SCA是美军在JTRS中制定的软件通信架构标准,是JTRS的主干。SCA通过面向对象方法划分软件/硬件结构,建立了开放的系统标准,提供了与具体实现无关的软件无线电开发框架,保证了软、硬件的可移植、可重构及设备的互操作性。SCA规范包含软件体系结构定义、硬件体系结构定义、安全体系结构定义和应用程序接口(API)四部分。 通过SCA所定义的分布式构件规范,可将应用与操作环境分离,同时使应用功能模块化,并为管理和使用软件构件定义了通用接口,通用业务和API以支持软/硬件模块移植。 2 现有实现方案分析 GPP处理器受其处理能力的限制,无法满足当前通信业务需求,使通信设备越来越多地依靠DSP(Digital Signal Processor)、FPGA等专用处理器来完成高速的数据处理任务,这就使SDR系统的设计和实现必须面对由GPP,DSP和FPGA共同组成的多处理器平台。虽然通过使用COR BA中间件技术可以很容易地实现分布式波形应用,但由于CORBA标准是针对GPP的,在DSP,FPGA等处理器上没有相应的标准可用。这导致SCA /SDR的研究焦点分别集中在应用程序接口(API)和商用中间件上,使SCA/SDR的设计和实现出现了两种主要模式:使用使用硬件抽象层(如MHAL)和使用分布式中间件技术(如CORBA)。 2.1 使用MHAL方式实现的SCA/SDR系统 MHAL是JTRS JPEO提出的一种基于硬件抽象层的解决方案。其实现方法是通过在核心框架与FPGA之间加入代理,并明确规范代理与FPGA之间的数据格式来实现FPGA在SCA中的应用的。图1是以MHAL方式实现的分布式SCA/SDR系统布局结构示意图。这种方式下,GPP需要为FPGA上的每个波形组件实现一个代理,以实现分布式波形组件间的通信。通过使用代理,系统可以将FPGA上的波形组件当作GPP上的波形组件一样处理,这样就可以实现对FPGA上波形组件的灵活、高效的管理和使用。 在FPGA上实现的MHAL波形组件并通过接收带参数的操作来调用波形组件所实现的功能,虽然这样的实现方式对于FPGA开发人员而言,可以减小编写波形组代码的难度,但对于GPP开发人员来说,却要在GPP上为每个FPGA上的波形组件实现一个组件代理,大大增加了开发的负担。而且这这种实现方式也必然会相应地增加GPP的运行负担以及内存资源占用,同时,在进行GPP上的波形组件与FPGA上的波形组件问通信时,必须要经过组件代理的处理,实现GIOP报文与MHAL报文格式的转换,这也就必然会给整个通信过程引入一定的延迟的增加、吞吐量的降低和低层次的重用。 而且,在以MHAL方式实现的SCA/SDR系统中,开发者需要在GPP上设计实现适配器来完成GIOP报文和MHAL报文的转换,以便使用CORBA 机制的波形组件和使用MHAL机制的波形组件间的通信。但对于适配器的实现,目前还没有统一的标准,而且,MHAL也不是一个针对通用市场的可用标准,它受到ITARS(International Traffic in Arins Regulations)限制,其实现细节并不公开,且MHAL报文结构的细节并不足以完成波形组件的实际需要,从而必然会导致不同的MHAL实现方式,且彼此间相互不兼容,这也必然会破坏MHAL波形组件的可移植性和可重用性。 2.2 使用CORBA方式实现的SCA/SDR系统 由于GPP上的波形组件是使用CORBA实现的,所以只要将CORBA扩展到DSP和FPGA上,就能够很容易地实现布署在各种类型处理器上的波形组件间的通信。图2是以CORBA方式实现的分布式SCA/SDR系统布局结构示意图。在以CORBA方式实现的SCA/SDR系统中,GPP保持原有状态即可,而DSP和FPGA上的ORB负责完成CORBA报文的处理。这使系统中所有波形组件使用CORBA中间件进行通信,而不需要在GPP上实现代理,不仅减轻了GPP的运行负担以及内存资源占用,而且系统中波形组件间的通信不再需要通过代理的转换,从而也就降低了通信时延,提高了通信效率。 同时,CORBA为不同类型的处理器提供统一的通信架构,使任何组件都能够以简单的函数调用方式获得分布于系统中的其他组件的服务。软件客户端和硬件服务程序之间由此变得连接无缝、快速并且使用较少的系统资源。与MHAL实现方式相比,该架构提供了波形组件的移动性和位置透明性,使得在同一处理器与在远程处理器中调用对象相比没有什么差别,使设计人员可以很容易地将波形组件从一个处理器中转移到另一个处理器中。这意味着,设计人员一开始可以在他们的工作站上构建SDR,然后很容易地将部件一块块转移到GPP、DSP和FPGA上,来优化系统总性能。 虽然使用CORBA方式实现的SCA/SDR既保持SCA的兼容性,又减小了传输负载,而且,开发者也无需开发通用GPP上的定制代理。但由于FPGA的设计实现方式与GPP完全不同,其编程主要集中于底层硬件,往往同特定的可编程资源紧密联系在一起,而且FPGA不能提供等效的操作系统中虚拟地址等机制,从而使FPGA上CORBA功能的实现比较困难。目前为止,在FPGA上实现ORB的主要的方案有以下两种: (1)Prismtech公司开发了一款集成电路ORB(ICO)产品,该产品提供了一个使用VHDL语言编写的ORB模块,能够运行于Xilinx,Altera等公司的多款FPGA上。整个产品包括ORB引擎、IDL-to-VHDL代码产生器和SCA应用组件等几个部分。ORB引擎负责GIOP报文的解析和封装,对于到达的GIOP请求报文,ORB引擎对报文中的对象键值、操作名称、参数等信息进行解析,然后将数据传递给特定的FPGA逻辑模块进行处理;如果处理结果需要向外部发送,则ORB引擎根据预先获得的一些信息,将结果封装为GIOP请求报文或应答报文,并通过网络进行传输。 尽管ICO实现了FPGA程序与分布式系统的直接ORB通信,但由于其ORB引擎的实现代码是由IDL-to-VHDL代码生成器根据特定的应用生成的,这就使其ORB引擎的实现逻辑与特定的FPGA应用程序密切相关,从而也就导致了ORB的引擎不具备通用性。一旦FPGA的应用程序做了修改,原有的ORB引擎往往无法对新应用程序的GIOP报文进行正确的解析和封装,此时必须再次使用IDL-to-VHDL代码生成器重新生成新的逻辑。目前有很多FPGA在硬件上已经具备了部分重配置功能,而且有一部分分布式应用,也需要实现FPGA的动态部分重配置,这就需要在动态改变FPGA部分逻辑功能的同时,依然保持ORB引擎和其他FPGA模块的正常工作,但ICO与FPGA应用程序的紧密相关性使这一功能无法实现。 (2)OIS公司在一项专利中提出了一种新的基于FPGA的CORBA实现方法。该方法是将ICO的ORB引擎的分为4个功能模块,包括ORB接收模块、ORB发送模块、接收操作适配器和发送操作适配器。其中ORB接收模块和ORB发送模块仅负责解析和封装GIOP的报文头信息,而接收操作适配器和发送操作适配器负责解析和封装与每个应用模块相关的操作名称和参数。这样,每个应用模块都有自己专属的处理操作名称和参数的处理单元,从而保证了FPGA上应用模块的灵活性和通用性,也可以满足部分重配置的需求。 然而,由于在OIS公司的专利中所提出的解决方案中,必须为每个应用模块都实现一个接收操作适配器和一个发送操作适配器,由此导致应用模块的实现十分复杂,必然会给应用模块的开发人员带来一定的负担;同时,FPGA内部各应用模块之间的信息传递必须经过发送操作适配器和接收发送操作适配器的处理,这对于FPGA内部乃至FPGA之间高速数据传输的要求显然是不恰当的;而且,当一块FPGA中运行的应用模块数量较多时,也必然要有大量的计算资源和存储资源被处理操作名称和参数的逻辑所占用,无法实现硬件资源的有效利用,甚至造成资源的浪费,这也是实际应用中无法接受的。 3 改进的设计方案 以上分析表明现存的种实现方案都不够理想,有必要设计一种新都实现机制来改善当前的设计。 根据实际应用中通信系统的需求,结合上述分析的几种实现方案的优缺点,在兼顾系统的资源利用率、应用组件的易开发性、通用性、灵活性等各方面的性能,在现有设计方案对基础上,对FPGA上的ORB实现方案进行了改进,改进后的设计方案实现结构如图3所示。 在实际应用中,实现各种波形的应用模块一般需要支持初始化、参数配置、参数查询、建立连接、断开连接、启动、停止、数据传递等操作功能,所以在改进后的方案中,根据应用模块的实际需要抽象出一组与上述操作相对应的操作名称:initialize,configcIre,query,connectPort,disconnectPort,start,stop,pushPacket等,可称之为公有操作。公有操作名称的识别和处理由ORB主适配器完成。另外,对那些只是个别应用模块所实现的操作,可称之为私有操作,其识别和处理则由应用模块的ORB辅助适配器完成。各模块发所实现的功能 如下: ORB主适配器(ORB Mian Adapter)实现的功能包括两个方面:一是解析接收到的GIOP报文信息,从接收到到报文信息中抽取出GIOP报文头和数据域,丢弃填充域。在该过程中,ORB主适配器需要基于GIOP报文头信息所提供的协议版本和数据大小端标志完成报文格式的识别和数据的大小端转换。需要注意的是GIOP报文中的ObjecKey和Operation Name段均是变长的信息,为了便于后续处理,需要在ORB主适配器的处理过程中将它们转换为固定的编码,其中ObjectKey转换为用于标识应用模块的地址编码,而Operation Name则转换为与之对应的控制信息;二是封装需要发送到GIOP报文信息,负责从应用模块的数据总线和控制总线接收数据与控制信息,然后加上GIOP报文头,将控制信息转换为相应的操作名称,填充对齐数据等完成GIOP报文信息封装,之后通过FIFO等类似的接口将数据传送出去。 交叉开关(Crossbar Switch)实现的功能是根据接收到的地址编码完成控制信息和数据的转发。 ORB辅助适配器(ORB Assistant Adapter)实现的功能与ORB主适配器类似,也包括两个方面:一是接收来自交叉开关的控制信息,若调用调用的是应用模块的私有操作,则将此操作名称转换为相应的操作编码后发送给给交叉开关,否则,直接将控制信息转发给应用模块;二是接收来自应用模块的控制信息,当应用模块调用私有操作时,则将操作编码转换为相应的私有操作名称后发送给给交叉开关,否则,直接将控制信息转发给交叉开关。 应用模块(Application Module)根据控制信息完成对数据的处理,给出处理结果。 图4为CORBA请求报文的接收处理流程。 在根据改进后设计方案所实现的系统中,GPP上的应用将保持原有状态,不会引人任何额外的处理负担和处理延迟。FPGA上由ORB主适配器统一完成各个应用模块的公有操作,在减小FPGA硬件资源的浪费的同时也减轻了应用模块开发的负担。应用模块预留有私有操作处理接口,可对其实现的私有操作进行扩展,从而也保证了应用模块的灵活性和动态部分重配置功能的实现;而且,FPGA上各应用模块间的数据传递不需要额外的处理,也满足了高速处理的要求。 4 方案实现与测试验证 为了验证改进后设计方案的可行性和合理性,在图5所示的硬件平台上对该方案进行了实现和性能测试。其中PC计算机用作为数据源和接收终端,实现视频和测试数据产生并接收显示视频和校对测试数据;ARM上运行VxWorks 5.5操作系统,使用TAO来提供CORBA功能,实现CORBA报文的封装和解析;FPGA运行根据前面所描述的改进方案所实现的ORB,完成CORBA报文数据的解析、处理和封装。测试过程中,首先由PC计算机产生视频或测试数据,并通过Ethernet传送给ARM处理器,ARM处理器上运行的应用程序将其封装成CORBA报文后发送给FPGA,FPGA接收到CORBA报文后对其进行解析,并对净荷数据进行处理后重新封装为CORBA报文后再发送给ARM处理器,ARM接收到FPGA发送到CORBA报文后对其进行解析处理后将数据发送给PC计算机,最终由PC计算机对接收到到数据进行视频解码显示或校对检测。 验证过程中先后在FPGA上实现了波形组件间的建立连接操作(connectPort)、数据传递(pushPaeket),波形组件参数配置(configure)和波形组件参数查询(query)四个操作,并在波形组件到参数设置和查询操作中完成short,float,double,string等类型的支持。通过测试,系统所实现的各种功能均符合设计需要。此外,还分别实现建立连接、数据传递2个操作与实现建立连接、数据传递、参数配置、参数查询4个操作两种情况对FPGA上对资源占用进行了比较,其结果见表1。从表中所得到的数据可以看出,在FPGA中实现对CORBA报文的操作以及参数进行解析、封装处理非常耗费硬件资源。这主要是由于CORBA报文中使用的公共数据表示(CDR)来描绘所要传输的数据类型所引起的,其也从一个方面证明了OIS公司所设计的为每个波形组件都实现一个接收操作适配器和发送操作适配器将极其耗费硬件资源,这在实际应用中是不能被接受的。 5 结论 本文在分析现有的解决方案优缺点的基础上提出了一种在FPGA上实现ORB的改进设计方案,不但为彼此分离的、工作于多处理器平台上的各个GPP,DSP和FPGA开发小组提供了通用的CORBA通信机制,实现波形组件的位置透明性;还克服了现有的FPGA上实现ORB方案的缺点,使FPGA上实现的ORB既可以支持动态部分重配置,又使波形组件开发人员尽可能少地处理ORB相关的工作,大大简化了波形组件开发人员所承担的开发任务。最终,所提出的改进设计方案在实验平台进行了实现与验证,测试结果也表明了此方案的合理性和可行性。
|