基于ZedBoard的SCA架构的设计与实现

作者:袁 扬1,谭月辉1,孙慧贤1,沈若曦2,周 晗3 2015年电子技术应用第11期

摘 要:
ZedBoard是Xilinx公司首款融合了ARM Cortex A9双核和7系列FPGA的全可编程片上系统,兼具ARM和FPGA两者的优势,是小型化SCA实现的最佳嵌入式平台之一。本文介绍了ZedBoard平台的硬件结构,并针对SCA架构在专用硬件平台上无法实现的问题,通过分析研究MHAL硬件抽象层技术和OCP接口规范,设计了符合ZedBoard平台硬件环境的MHAL硬件抽象接口和FPGA波形组件容器,有效地解决了SCA架构在ZedBoard平台上的实现问题,为在ZedBoard上实现以SCA架构为核心的系统开发打下了基础。

0 引言
  软件通信体系架构(Software Communications Architecure,SCA)是美军在联合战术无线电系统(Joint Tatical Radio System,JTRS)中针对GPP环境提出的软件无线电实现框架,结合JTRS后续推出SCA补充标准对SCA架构进行裁剪,可在硬件资源有限的嵌入式硬件平台上搭建小型化SCA架构,增强系统软件的可重用性和可移植性,是实现嵌入式可重构系统的主要架构之一。ZedBoard是Xilinx公司推出的首款融合了GPP和FPGA的嵌入式开发环境,可满足大部分嵌入式系统开发的需求,是嵌入式开发环境的必然发展趋势,但是由于FPGA中的应用组件都由具体的逻辑电路实现,完全不同于GPP上的程序调用执行,所以SCA架构在ZedBoard平台上会有诸多实现问题[1]。

  本文首先介绍了ZedBoard平台硬件结构,提出了基于ZedBoard的SCA架构的总体设计,并重点针对SCA架构在ZedBoard平台上难以实现的问题,通过深入分析研究Modem硬件抽象层(Modem Hardware Abstration Layer,MHAL)标准和Open Core Protocol(OCP) 接口协议,结合ZedBoard硬件结构设计了MHAL硬件平台外部抽象接口和SCA波形组件容器,有效地解决了SCA架构在ZedBoard上的实现问题,为在ZedBoard上实现以SCA架构为核心的系统开发打下了基础。

1 基于ZedBoard的SCA架构总体设计
  ZedBoard平台是Xilinx公司最新推出的首款融合了ARM Cortex A9双核和FPGA的全可编程片上系统,兼备GPP和FPGA的特点和优势。ZedBoard平台的核心是Xilinx的Zynq-7020芯片,主要包括processing system(PS)和programmable logic(PL)两部分。其中PS部分包含双核的ARM Cortex A9处理器,不仅负责整个ZedBoard开发板的管理和配置,也可作为独立的芯片单独使用,是ZedBoard平台的系统控制核心,同时还集成了SIMD多媒体处理引擎(NEON)、内存管理器(MMU)等功能模块和多种对外扩展接口,具有很强的功能扩展能力。PL部分主要包括Xilinx的高性能7系列FPGA,作为PS部分的补充提供了丰富的IO资源和高速数字处理能力[2-3]。

基于ZedBoard的SCA架构总体设计如图1所示,为充分发挥ZedBoard平台PS部分的高性能系统控制能力,设计将SCA架构的核心框架、中间件和操作系统在PS部分的ARM上实现;而PL部分的高速数字处理能力和可重配置特点非常适合SCA应用层波形组件的实现。本文通过自行设计的MHAL硬件抽象接口和OCP波形组件容器来解决SCA架构在FPGA上的实现问题,并利用ZedBoard平台的APC接口和IO总线实现PS部分的核心框架和FPGA波形组件间的消息传输,下面对MHAL硬件抽象接口和FPGA波形组件容器进行重点讲述。

2 MHAL硬件抽象接口设计
  Modem硬件抽象层MHAL是JTRS办公室在2007年颁布的接口标准,其初衷是为SCA系统中不同处理单元的通信提供标准的协议和接口,同时也涉及了硬件平台外部接口的抽象,为实现SCA消息在ZedBoard上的标准传输提供了方法[4-5]。本文深入分析研究了MHAL标准,并结合ZedBoard开发环境,对MHAL消息结构进行了修改,重新定义了MHAL硬件抽象接口的功能结构和接口函数,分别设计了ARM和FPGA的MHAL消息发送和接收结构,完成了MHAL硬件抽象接口的设计。

  2.1 MHAL消息结构设计
  MHAL消息从最低有效位到最高有效位以地址递增的方式进行排列,本文对MHAL标准中的消息结构进行了修改和扩充,添加了消息起始符和消息类型字段,使其能更好地满足SCA架构在ZedBoard上的实现需求,其消息结构如图2所示,其他字段与MHAL标准中的消息结构一样,在此不做赘述。

(1)消息起始符:本文设置了专门的16 bits消息起始符用来界定消息的起始,以13位巴克码为基础取值为“1111100110101000”,大大提高了MHAL消息接收和解帧的准确性。

(2)消息类型:独立的16 bits消息类型字段用来指示MHAL消息的类型和附属信息,可以提高MHAL消息解析效率,使FPGA波形组件容器准确地将消息发送到相应的功能模块。前3 bits指示MHAL消息类型,其对应关系如表1所示;后续比特分为三部分,分别指示MHAL消息源的处理编号、组件编号和端口编号。

2.2 MHAL硬件抽象接口结构设计

结合MHAL标准和ZedBoard平台特点,本文设计的MHAL硬件抽象接口功能结构如图3所示,主要包括通用代理、MHAL消息接收结构和MHAL消息发送结构,结合上文规范的MHAL消息结构屏蔽了ARM和FPGA硬件平台的外部接口,实现了SCA消息在ZedBoard的ARM和FPGA之间的标准传输。

  2.2.1 通用代理设计
  通用代理由SCA核心框架的ExecutableDevice接口通过execute()函数创建,是运行在ARM上的一个SCA中间件对象,具有核心框架规定的CF::Resource、CF::PortSupplier和CF::Port等组件接口,根据目标逻辑地址实现与对应FPGA组件的通信。

  通用代理作为FPGA波形组件在ARM上的代理接受核心框架的调用和管理,并将SCA消息转换为MHAL报文,添加目标逻辑地址字段后发送到ARM MHAL发送结构,是实现FPGA波形组件和ARM核心框架桥接的适配器。

  2.2.2 ARM MHAL发送和接收结构设计
  ARM MHAL发送和接收结构由MHAL设备组件实现,提供信源函数和信宿函数服务,实现对MHAL消息的封装和发送、接收和解封装。结合ZedBoard平台ARM+FPGA的硬件结构特点,本文对MHAL标准中的GPP API结构进行了扩充和修改,使其更好地与ZedBoard开发环境相契合,下面以ARM发送结构为例进行讲述,其UML图如图4所示。

MHAL发送结构收到由通用代理发送来的MHAL报文后,通过builsMhalMsg()等函数将其封装为完整的MHAL消息并存储在MHALMsg[MAX_MHAL]中,end-BuildMhalMsg()函数结束MHAL消息封装流程,再由 pushPacket()函数通过外部传输链路将MHAL消息发送到对端的MHAL接收结构。

  2.2.3 FPGA MHAL发送和接收组件设计
  FPGA MHAL发送和接收组件由一系列接收和发送MHAL消息的实体构成,与ARM MHAL发送和接收结构功能基本一致。本文以Multi-Depth FIFO节点为基础设计了FPGA MHAL发送和接收组件,其具有允许多条消息队列等待接收,支持按字节处理消息的优点,增强了FPGA对MHAL消息的处理能力,很好地满足了FPGA上MHAL消息发送和接收的需求。下面以FPGA MHAL接收组件为例,本文采用Verilog硬件编程语言封装了其外部接口,其外部端口和功能如表2所示。

3 FPGA波形组件容器设计
  容器是FPGA波形组件的直接运行环境,为实现SCA对FPGA波形组件的调用和控制提供本地服务和API[1],使得FPGA上的波形组件能像GPP组件一样被核心框架管理,是在ZedBoard上实现SCA架构的重要组成部分。

  开放核协议OCP片上子系统通信定义了一个高效的、和总线相对独立的、可配置的、可升级的接口,并可通过Verilog、VHDL等硬件编程语言实现,非常适合FPGA开发环境[6-7]。本文基于OCP接口设计了FPGA波形组件容器,规范了容器提供的服务和波形组件接口,实现了SCA核心框架对FPGA组件的管理以及异构组件间互通,大大提高了FPGA波形组件的可移植性和可重用性,其结构如图5所示。

3.1 OCP互连模块设计
  OCP互联模块作为FPGA波形组件容器的核心,是实现容器对组件控制和管理功能的主要承担者,主要由控制模块、通信模块、本地服务模块和相应的OCP接口组成。其中控制模块是OCP互联模块的枢纽,为FPGA波形组件提供了与SCA波形组件接口相对应的initialize()、start()和stop()等操作,便于核心框架对FPGA波形组件控制命令的执行。

  OCP互联模块的工作流程为:控制模块进一步解析FPGA MHAL接收组件接收到的MHAL消息,并判断出此消息的类型。如果是控制消息、连接消息或者断开连接消息,则根据MHAL消息中的目标逻辑地址找到目标组件并完成相应控制操作;如果是数据消息,则交由通信模块处理。通信模块根据MHAL消息中的目标逻辑地址将数据消息发送到目标组件,并将接收到的组件返回数据消息交由控制模块进行封装等处理。本地服务模块为容器中的组件提供时钟信号和复位信号。

  3.2 组件OCP接口设计
  为了使FPGA波形组件与容器的OCP互连模块无缝连接,本文以OCP接口为基础设计了FPGA组件的封装接口。组件OCP接口与OCP互联模块的功能模块相对应,包括组件控制接口、组件通信接口和本地服务接口。

  组件控制接口采用以容器为Master,组件为Slave的模式,采用RTL编程语言实现了initialize()、run()和release()操作,与组件SCD文档中组件IDL端口定义保持一致,很好地满足了核心框架对FPGA组件的控制操作需求。

  组件通信接口根据组件与容器具体的通信情况分为组件Master只写、组件Master只读和组件Slave只写三种模式,并定义了不同模式下所需的端口,可满足组件通信的各种需求。

  本地服务接口与本地服务模块相对应,用来接收OCP互联模块提供的时钟信号和复位信号。

4 结论
  本文紧跟当前系统开发硬件平台的趋势,以Xilinx最新推出的ZedBoard平台为背景,针对SCA架构在专用硬件平台上实现的诸多问题,通过深入分析研究MHAL标准和OCP协议,对MHAL消息结构进行了修改和扩充,结合ZedBoard开发环境设计了ARM和FPGA上的MHAL消息发送和接收结构,并根据SCA核心框架对组件的管理需求设计了容器功能模块和FPGA组件接口,最终完成了MHAL硬件抽象接口和FPGA波形组件容器设计,有效地解决了SCA架构在ZedBoard上的实现问题,为在ZedBoard上实现以SCA架构为核心的系统开发打下了基础。

文章来源: 电子技术应用