基于SCA规范下FPGA的硬件抽象层设计
2011-07-14
引言
软件无线电(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所示。
2.2 sink接口
sink接口主要用于从HAL-C基层结构接收数据并送给HC。sink接口应当接收source接口输出的信号,它应当接收大小由length信号确定的数据。socketReady表示当sink接口从source接口接收数据时的宽度,该宽度为MAXSINKSOCKETS的矢量所包含的一个流控制信号,是为source端口应答的信号。
图3所示为sink接口模块图。
2.3 source和sink的典型应用模型
FPGA是硬件可编程设备,FPGA的内部功能模块可通过直接线路或总线相互连接。这意味着一个包含多个功能模块的FPGA内部体系可以被分解成分散的子模块,这些子模块可通过外部连接机制相互连接。图4所示是FPGA内部使用sink和source的典型模块图。
在FPGA上运行的波形组件,在设计时只需要按照HAL-C所定义好的格式设计好波形组件与HAL-C的交互即可。数据与其他模块间交互的具体过程可交给HAL-C去完成,即将与具体接口相关的工作交由HAL-C去完成。也就是说,在进行软件设计时不需要关心底层硬件模块能为软件设计提供怎样的具体端口形式,而只要硬件抽象层模块能够满足软件模块设计所需的数据传输速率就行。
3 在硬件平台上实现HAL-C应用
为实现SCA规范下的数字信号处理功能,可以设计一个通用硬件平台,其结构如图5所示。该方案以FPGA、DSP为信号处理平台的算法核心,以CPLD为结构的控制核心,从而构造一个具有通用性、可扩充、易升级的多功能信号处理平台。
本设计中的FPGA采用Xilinx公司Virtex 5系列的2200万门器件XC5VLX220-1FF1760I以及500万门器件XC5VSX95T-lFF1136I。DSP选用TI公司的TMS320C6416T,该DSP具有的丰富的集成外设,可适应各种不同的应用需求。通用FLASH采用Spansion公司的S29GL512N10TAI高密度NOR型FLASH。S9GL512N的容量高达512Mbit,可以存储多个版本的DSP和FPGA程序。NOR型FLASH的读操作时序和EEPROM相同,读/写操作最短周期为100ns,可以直接用于DSP的BOOT引导。TMS320C6416T与CPLD配合,可以控制FPGA配置文件的下载过程。FPGA芯片通过高速并行接口可与AD和DA直接相连,以进行高速的数字处理。DSP芯片可通过EMIFA(外部存储器接口)接口与FPGA进行通信。
在实际应用中,平台需以多模式的方式工作,并应根据需要实时更新功能程序。因此,用户可在FLASH芯片中划分区域,以将多种功能程序分别存储在不同区域,并确定区域首地址。系统上电复位后,DSP和FLASH芯片先完成初始化,之后DSP会按照默认方式访问默认首地址并加载默认DSP和FPGA功能程序,以便系统工作在默认模式下;当需要更新模式时,主控设备先发送指令,DSP检测到指令后,DSP便按照指令要求查到对应首地址,并从新功能的首地址开始为DSP和FPGA加载新的功能程序,系统即工作在新模式下。如此便可在同一个硬件平台上,通过动态调用不同的软件程序来实现多功能、多模式的工作。
利用此硬件平台还可实现MSK数字调制解调功能。FPGA的硬件抽象层的实现可将FPGA与外部接口在FPGA内,用一个专用的小模块来实现对外交互,并在这个特定模块里定义好HC与外部交互的接口形式(如数据总线,相关的时钟信号、控制信号等)。然后根据功能需要在FPGA内为AD、DA、DSP、CPLD以及互连的FPGA抽象出独立的标准通信接口模块ADHAL、DAHAL、DSPHAL、CPLDHAL和FPGAHAL,另外,还需要设计MSK调制和解调的HC模块,其中调制部分包括DDS和数字正交上变频两个子模块。数字正交上变频可采用AD9779来实现。解调部分主要包括数字正交下变频、基带解调、中值滤波和位同步四个子模块。这些HC模块均为独立的文件,而且各个模块的参数均可配置。这样便可利用上述编制好的文件来实现MSK调制解调功能。事实上,只需要在一个工程中把用到的文件包含进来,并在顶层文件中实例化各个模块,同时根据实际硬件连接约束FPGA的引脚,最后通过综合实现并生成FPGA配置文件,再用DSP和CPLD来完成配置,即可实现如图6所示的FPGA内部抽象层。也可以通过主机动态配置各个模块的参数以及连接关系,以实现不同频段的调制和解调。如果要完成其它方式的数字调制解调,只需要把MSK调制和解调的HC模块替换为其他数字调制解调算法,并通过主机发送指令重新对FPGA进行配置即可。这样就可提高软件模块的可移植性、可重用和可互操作性。
4结束语
通过HAL-C提供的平台,不但可使波形应用开发者从底层硬件的细节处理中脱离出来,专注实现组件的算法功能,而且,基于FPGA硬件抽象层连接设计的软件,还具有很好的可移植性,因而能有效缩短系统开发周期,提高系统开发效率。