FPGA及动态可重构技术在软件无线电中的应用
扫描二维码
随时随地手机看文章
SDR是使用一个简单的终端设备通过软件重配置来支持不同种类的无线系统和服务(包括2G、3G移动通信系统和WLAN)的新技术。它具有较强的开放性和灵活性,硬件采用标准化、模块化结构,可以随着器件和技术的发展而更新和扩展;软件模块可以进行加载和更改,根据需要不断升级。软件无线电的结构如图1所示,主要分为实时信道数据处理部分、环境管理部分、系统分析和功能强化部分。实时信道数据处理部分包括A/D、D/A、变频、信道分离、调制解调以及码流处理等数据模块。
SDR的核心是联合战术无线电系统JTRS(Joint Tactical Radio System)的SCA规范,它对模块化可编程无线通信系统的硬件体系结构、软件体系结构和安全体系结构以及应用程序接口(API)规范进行了描述,同时引入了嵌入式微处理器系统、总线、操作系统、公共对象请求代理体系(CORBA)、面向对象的软件和硬件设计等一系列计算机技术,并采用了“波形应用”和“资源”可裁剪、可扩充的设计思想,从而保证了软件和硬件的可移植性和可配置性。
以接收机为例,SDR中A/D模块之后的部分通过软件来实现。本文在FPGA平台上实现信号的调制解调,以满足高速数字信号处理发展的需求。在Xilinx Virtex2Pro FPGA硬件平台上实现了美国军方短波通信系统标准MIL-STD-188-110B调制解调器,其中引入了动态部分可重构技术,提高了配置速度和硬件资源的利用率。
满足SCA规范的波形组件之间通过CORBA总线通信,而FPGA平台的专用处理器要实现对CORBA的支持比较困难。本文利用SCA规范中的SHP组件兼容性补充协议CP289提出了这一问题的具体解决方案。
1 FPGA的动态部分可重构技术
FPGA的动态可重构技术是指对时序变化的数字逻辑系统,其时序逻辑的发生不是通过调用芯片内不同区域不同逻辑资源的组合实现,而是通过对具有专门缓存逻辑资源的FPGA进行局部或全局芯片逻辑的动态重构而实现。部分重构是指重构器件或系统的一部分,在此过程中,其余部分的工作状态不受影响。
FPGA部分可重构有多种实现方法,较为常用的是基于模块化设计方法和EAPR(Early Access Partial Reconfiguration)设计流程,后者较前者而言,是一种较新的设计方法,并且有相应的软件可以代替命令行方式进行实现,本文采取的就是这种实现方法。
图2所示为一个简单的基于EAPR设计流程生成的部分动态可重配置系统。整个系统划分出静态模块和动态模块,之间的通信通过总线宏来进行。该系统通过FPGA板子上的dip开关为输入引脚提供输入数据,确定计数器的初始值。通过下载不同部分的比特流可以实现加、减计数功能的动态切换。计数结果通过值传递模块接到FPGA板子上的LED管脚。整个设计过程可以概括为:
(1)模块划分:静态模块和动态模块;
(2)顶层模块与静态和动态子模块的设计及综合;
(3)编写初始用户约束文件,主要指定I/O管脚约束和时钟约束;
(4)在PlanAhead中进行EAPR设计:
①建立局部可重构工程;
②为每一个PRM定义可重配置实体;
③为PRM规定可重配置区域;
④放置总线宏和全局时钟逻辑;
⑤运行DRC检查;
⑥分别实现静态逻辑和PR模块;
⑦装配并生成全局和部分比特流。
2 基于FPGA的SDR硬件体系结构及DPR实现
Xilinx Virtex2Pro FPGA内含处理器,通过一定的软件编程,可根据环境及外部需求采用不同的调制解调算法处理通信系统中的数据。通过DPR技术,可以实时快速地调整算法中的参数或者实现不同算法之间的切换。
2.1 基于FPGA的SDR硬件平台
本文基于Xilinx Virtex2Pro FPGA,搭建的SDR硬件平台如图3所示。该系统以软核处理器 MicroBlaze为核心,DDR SDRAM Controller、OPB_HWICAP和UART Controller通过OPB总线与处理器通信。DDR SDRAM为片外处理器,UART为串口设备,ICAP为内部访问互连接口,主要用于部分重构。
function ImgZoom(Id)//重新设置图片大小 防止撑破表格 { var w = $(Id).width; var m = 650; if(w
2.2 DPR在SDR硬件平台中的应用
如图3所示,平台的顶层为调制解调算法模块。本文以美国军方短波通信系统标准MIL-STD-188-110B调制解调算法的实现进行说明,图4所示为其实现框图。
该标准支持不同的比特速率和交织长度,在调制算法中格雷映射、符号生成和同步前导头与训练序列有所差别,故将其划分为动态模块,其余为静态模块。相应的,在解调模块当中,符号解析、格雷映射和解交织模块算法有所差别,划分为动态模块。在硬件实现过程中,由于不同模块处理数据的速率不相同,因此需增加一个时钟生成模块,并将其划分为动态模块。
之后,根据EAPR设计流程生成不同条件下的不同功能的部分比特流及全局静态比特流。设计实现的动态部分可重构调制解调器框图分别如图5、图6所示。与模块化设计方法相比,设计过程中动态和静态区域并不需要占据FPGA的整列,提高了FPGA的资源利用率。另一点不同之处在于模块化设计方法中总线宏是基于TBUF的,而EAPR总线宏是基于slice的。
实验表明,发射机系统的一个部分重配置比特流的大小为269 KB,为全局比特流(1 415 KB)的19.0%,因而所需的用于存储配置比特流的空间较小,配置速度相对较快,所需配置时间约为全局配置时间的19.0%。
3 FPGA组件在SCA中的集成
根据参考文献[4]的内容,可加载到软件无线电平台上的波形组件分为运行于通用处理器上的SCA组件和运行于专用硬件处理器(SHP)上的组件。FPGA组件属于SHP组件中的RPL(寄存器传输级可编程逻辑)组件,用HDL语言实现功能,但不支持CORBA。为使该类型的组件能够集成到SCA系统中,必须在设计时使其接口满足特定的规范,使之具有可移植性和可复用性。本文中FPGA组件按照OCP协议进行接口封装。参考文献[5]介绍了关于整个OCP协议的接口设置、工作原理和时序逻辑。
3.1 FPGA组件的代码生成
由于波形应用是由波形组件和域描述文件组成的,波形组件完成相应的功能,域描述文件提供组件之间的装配、连接、属性等信息,因此需要通过解析软件组件描述(SCD)文件和接口定义来获得OCP接口。SCD文件中定义了组件的端口列表,OCP模块就是要实现的组件。在接口库中已经定义好了各种接口类型。通过查询接口库,可以获得符合要求的接口,具体要实现的功能则由接口的参数决定。最终需要产生一个OCP接口配置文件,它以文本的形式描述了组件的内核和接口信息。
通过分析OCP接口配置文件,可以生成OCP接口的VHDL代码。代码中包括一个实体描述和空结构体以及一个VHDL语言包,实体表示满足OCP接口封装的组件,OCP接口则对应于实体的端口,端口的类型由其所在接口的类型决定。组件开发者将完成特定需求功能的代码移入空的结构体中,便得到组件的完整的VHDL代码。
3.2 FPGA组件在SCA中的集成
SCA组件都需要通过CORBA进行通信,而FPGA组件不使用CORBA,它的实现可分为实现体(worker)和通用代理(generic proxy)两部分。其中worker是在SHP容器中执行的功能组件实体;generic proxy相当于SCA中的适配器。
通用代理是SCA适配器概念的实例化,是由SHP逻辑设备的每一个“执行”操作创建的CORBA对象,类似于应用工厂在每一次“创建”操作时创建CF∷Application对象以及域管理器在每一次“安装”操作时创建应用工厂。当要求SHP逻辑设备实例化SHP组件时,通过使用load、execute命令创建代表SHP容器中实体的本地CORBA对象。它可以与SHP容器通信,用于下载、创建、控制和配置worker。相对于GPP逻辑设备的执行操作会产生一个GPP组件实现本身所对应的CORBA对象索引,SHP逻辑设备的执行操作会产生相应的通用代理的CORBA对象索引。
本文基于FPGA主要实现了动态部分可重构实验平台,并将其应用到SDR硬件平台调制解调算法实现中,提高了系统的灵活性和可扩展性。同时讨论了FPGA组件集成到SCA中的设计方法以及相关的技术,从而能够缩短系统的开发设计时间,增强组件的可移植性、可复用性和重新被设计的能力。