软件无线电(SOFTWARE Radio)是指用软件定义的、能实现多种功能的无线电通讯系统,其核心思想是构造一个具有开放性、标准化、模块化的通用硬件平台,以将各种功能(如工作频段、调制解调类型、数据格式、加密模式、通信协议等)用软件来完成,从而通过加载不同的通信软件来实现不同的通信模式和功能。由于功能的定义和实现都由软件完成,所以可以通过配置不同的参数来支持不同电台系统的互连互通,这使得软件定义无线电具有很强的灵活性。
由于软件无线电的诸多优点,美军的联合战术无线电系统(JTRS)计划采用了软件无线电的设计思想,并定义了软件通信体系结构(SCA)规范。目的是实现电台硬件的模块化,软件的可移植、可重用和可互操作性。将SCA体系结构逐渐扩展到2 GHz以上使用时,如果还在SCA的硬件体系结构中仅仅使用通用处理器(GPP)和DSP等,将无法满足高速数字信号处理发展的需求,因此,能更好适应高速数字信号处理的可编程器件(FPGA)将不可避免的需要应用到SCA的硬件平台中。目前,FPGA并不支持CORBA中间件,故不能直接应用到SCA体系结构中。另外,由于FPGA芯片的外部输入/输出端口没有像通用处理器和DSP芯片那样从应用程序中抽象出来,当每次应用程序代码移植到新的平台时,这些接口都要改变,这一点不利于实现波形应用的可移植性。
SCA3.0规范中提出了硬件抽象层连接(HAL-C)的概念。硬件抽象层可对具体硬件的实现进行抽象,它介于硬件平台和运行于硬件平台上的软件之间。负责完成软件设计中与硬件相关的内容,并完成相关的接口功能,它可使软件的设计很好地独立于硬件,从而有效地提高软件设计的可移植性。使得在JTRS设备的开发过程中能实现应用软件的设计与通用硬件平台的开发相分离,尽可能减小硬件平台的具体结构对应用软件设计的影响。
1硬件抽象层的基本概念及结构
HAL-C通过对硬件单元的对外接口进行抽象,从而定义了一系列标准的通信应用编程接口(API),以实现与外部的通信功能。这样,当要求与外部通信时,仅需要通过对定义好的不同的API进行调用即可,这将极大地减小硬件平台结构对软件设计的影响,有效地降低对重要软件组件接口进行重新编写的可能性。
1.1基本概念
在硬件抽象层概念中,波形(Waveform)一般是指为了实现信息的无线传输而对信息所采取的一系列变换,一般包括无线通信双方为实现传输而采取的所有协议;处理元件(Processing Element,PE)是指一个能够执行信号处理功能的硬件组件,通常GPP、DSP、FPGA、ASIC或者其它的能够执行信号处理功能的硬件设备都可以看作是一个处理元件;硬件抽象层组件(HAI-CComponent,HC)是完成一定处理功能的一个功能模块,它属于波形应用的一个部分,通常HC是一个执行于目标设备上的、由波形开发人员编写的软件模块,HC需要运行于一个给定的PE上,且同一个PE可以运行多个HC。
1.2硬件抽象层基本结构
硬件抽象层连接时,可根据不同硬件模块的特点对硬件模块进行抽象,抽象后的硬件再对外接口。对于软件模块的设计者来说,只是提供收发数据的功能,那么,具体如何实现收发功能即不需要软件设计者考虑。其典型的HAL-C模型如图1所示。
如图1所示,组件一般用于实现应用功能。这类组件由波形开发者依据HAL-C应用接口进行设计,而在硬件平台上则依据PE的具体环境实现这些HAL-C应用接口。由硬件平台提供的HAL-C应用接口可给HC提供一个底层的通信接口,这些底层API的主要目的是让同一或者不同PE上的HC能够通信。HC1、HC2之间的通信并不是直接进行的,而是通过HAL-C提供的通信机制来实现。HC1、HC2的开发者只需要把数据发送给HAL就可以了。具体数据如何从HC1传输到HC2,则是硬件抽象层要完成的工作。
通常可用一个贮存在HAL-C基层结构的简单传输模块Tx来描述数据的传输。有两种类型的传输需要描述,一种是贮存在不同PE上的HC之间通过物理信道进行数据和控制信号的传输,如图1中HC2到HC3的数据传输。它可以通过不同的物理信道实现(如PCI,RapidIO等),物理信道可以看作是传输在硬件平台上的映射;另一种传输是在硬件内部进行的传输,虽然组件自己可以实现数据的传输,但是若使用硬件抽象层连接来约束这种传输,则能提高组件的通用性。
为了简化上面的连接模型,这里引入了end-point的概念。即一条从HC出发,通过传输模块的路径被指定为一条逻辑通道。HC可使用HAL-C应用接口来访问endpoint,以发送和接收数据。HAL-C基层结构负责把数据通过逻辑信道移动到指定的endpoint,这就可以把以前HC开发者应该做的工作转移到硬件抽象层中来实现,从而使波形开发与硬件相关资源相分离。
2 FPGA硬件抽象层连接接口
SCA规范中使用了两种类型的接口:“provides”和“uses”。其中“provides”接口用来提供服务,“uses”接口用来使用这种服务。这种思想可被扩展应用到FPGA的组件级。也就是把一个由HAL-C基层结构向组件提供数据的接口定义为HAL-C基层结构的“provides”端口,然后由组件利用HAL-C基层结构的“uses”端口给其它组件提供数据。HAL-C API希望HC通过通用接口来发送和接收数据。在FPGA上,可使用source和sink来定义SCA中的这两种端口。这些接口通常以线路和信号的形式存在。
2.1 source接口
source接口用于从HC向HAL-C基层结构传递数据,它可根据硬件平台的实现来确定信息被发送到指定的HC中。source接口应当实现的信号如下:
clock:接口的同步时钟,所有信号均应与该时钟同步;
data:数据总线,其宽度可以是1,8,16,32,64位;
channel:与数据传输相关的逻辑通道号;
length:定义数据缓冲区中要传输的字节数,可用MAXBUFFERSIZE描述数据的最大长度;
write:传输数据的使能信号;
socketRequest:宽度为MAXSOURCESOCK-ETS的矢量,用于描述一个指定的逻辑信道接口正在请求访问sink的逻辑信道;
socketReady:宽度为MAXSINKSOCKETS的矢量所包含的一个流控制信号,用以应答source接口的请求信号。
source接口模块如图2所示。
|