基于动态局部重构的HCRP协议的研究
2009-04-20
作者:祝翔宇
摘 要: 基于FPGA的动态局部重构技术,提出了FPGA片上系统获取远程可下载硬核模块并动态加载的实现方式,进一步提出了HCRP协议的基本框架。
关键词: 硬件处理资源协议;可下载硬件;动态局部重构;内部配置存取端口;嵌入式
随着互联网的快速发展,软件下载日益常态化。基于超文本传输协议,用户可以根据特定的需要在互联网上搜索应用软件,下载并安装到个人计算机上。Jamil Khatib提出了可下载硬件(downloadable hardware)的概念,即硬核模块像软件安装包一样由远程服务器提供下载,基于FPGA的系统代替个人计算机作为处理终端接入互联网,用户在FPGA系统上检索、下载和安装所需要的硬核模块,实现特定的功能,如CDMA、软件无线电、媒体播放、数据采集与处理等。Jamil Khatib进一步提出,在互联网服务中增加新的应用协议,即硬件处理资源协议HCRP(Hardware Computing Resource Protocol)[1],以支持可下载硬件。
Xilinx Virtex系列FPGA及其动态局部重构DPR(Dynamic Partial Reconfiguration)[2]技术可以为以上应用提供支持。动态局部重构允许可重构系统的一部分在系统运行过程中重新配置,其他部分的工作状态不受影响,实现硬件在系统编程。文献[2]提出了动态局部重构系统的两种实现方案:基于模块的重构和基于差异的重构,但其方案十分繁琐,且需依赖外部工具实现。文献[3]提出了一种在嵌入式处理器控制下实现自重构的方法,而文献[4]是其具体实现。文献[5]在文献[3]的基础上提出采用嵌入式操作系统作为自重构平台,用Shell脚本控制重构。但文献[5]没有对重构系统做模块化划分,不能适应硬核动态加载的需要。
基于以上研究,本文提出了一种互联网可下载硬件的实现方式。在动态局部重构技术的支持下,设计了一个基于FPGA的片上系统,该系统能够通过互联网远程获取可下载硬件,由系统自身控制配置过程,将硬核模块动态加载到系统中,实现硬件模块的“热插拔”和“即插即用”。这种方式脱离了对配置工具的依赖,使复杂的动态局部重构能够通过一条命令完成。以此系统为HCRP终端原型定义了HCRP的基本框架,包括其通信和传输机制,及客户端基于HCRP检索、下载和安装硬核的机制,以简化和规范用户操作。
1 系统实现
本系统将Xilinx的XUP V2P开发板作为硬件平台,其核心是一块Virtex-II Pro系列的XC2VP30 FPGA芯片[6],系统硬件模块如图1所示。本系统的嵌入式处理器采用MicroBlaze软核,原因在于:MicroBlaze软核在芯片内的位置和IO管脚可以灵活分配,便于下一阶段系统的布局布线和IO管脚分配;MicroBlaze支持的芯片型号更多,便于系统向其他平台的移植;采用MicroBlaze可以尽量降低系统的成本和功耗。
为了简化软件层开发的复杂度,本系统在MicroBlaze上移植了μClinux嵌入式操作系统。μClinux是专门为没有MMU的嵌入式处理器开发的操作系统,采用了占用空间更小的romfs文件系统和精简的?滋Clibc应用程序库。μClinux在本系统中主要有以下作用:提供TCP/IP协议栈和网络工具(如Wget等)以支持以太网通信和远程数据传输;对动态加载和卸载用户IP硬核的驱动程序提供支持;管理应用程序的多进程调度;通过串口终端提供基本的用户界面。针对μClinux的实时性问题,本系统对所有外设的访问均采用中断方式,并采用一个32位定时器产生定时中断。
本系统采用IBM CoreConnect架构[8]的片上外设总线OPB(On-chip Peripheral Bus)连接嵌入式处理器和外设模块。ICAP模块是实现动态局部重构的控制逻辑,而用户接口是用户自定义模块在OPB总线上的挂载点。系统的初始化配置(包括初始硬件比特流、μClinux内核映像和boot loader)组合为一个ACE文件存放在Compact Flash中。系统上电后,System ACE控制器[9]自动读取ACE文件,配置硬件并启动μClinux,然后作为非易失性存储器被挂载到μClinux文件系统下。系统软硬件架构如图2所示。
2 动态加载机制
为实现硬核模块的动态加载,在顶层设计中采用了模块化设计流程,整个系统分为可重构模块和静态模块两部分。可重构模块为功能模块,在重构过程中被动态加载的硬核模块替换;静态模块包括除功能模块之外的其他部分,如处理器、存储器等,用于网络通信和控制重构过程,在重构过程中保持不变。FPGA资源划分借助PlanAhead工具[10]完成,可重构区域为SLICE_X70Y112至SLICE_X81Y143的矩形区域,放置可重构模块;其余部分为静态区域,放置静态模块。编译后得到static_full比特流,描述了FPGA的全局配置,用于系统的初始化;每个可重构模块分别生成一个重构比特流,描述了可重构区域的配置,可以被动态加载。
为保证静态模块和可重构模块之间的通信,所有穿越可重构区域边界的信号必须通过总线宏结构连接,如图3所示。总线宏(Bus Macro)是通过硬件布线得到的静态宏单元,编译后放置在特定的位置,重构前后不发生变化,用于保证布线资源的不变性。由于各个模块之间相对独立,工具在为模块内部布线时不会考虑与之相邻的模块。图3解释了可重构模块和总线的通信模式。在重构期间,来自可重构区域的数据是不正常的,为避免系统进入异常状态,处理器需要在重构之前“关闭”总线宏,重构结束后再“打开”总线宏。PRR接口是一个标准的OPB总线接口和一个标准的DCR(设备控制寄存器)总线接口的结合,处理器通过DCR总线发送0/1命令字,PRR接口收到命令字后对总线宏的使能信号置位或复位,以实现打开或关闭操作。C程序语句如下:
XIo_Out32(XPAR_PRR_IF_0_DCR_BASEADDR,0x00000000);
//Disable Bus Macro
XIo_Out32(XPAR_PRR_IF_0_DCR_BASEADDR,0x00000001);
//Enable Bus Macro
用户模块的动态加载是在应用程序控制下通过内部配置存取端口(ICAP)实现的。ICAP是FPGA内嵌的固有电路,支持嵌入式处理器在系统运行时读写FPGA配置存储器。本系统将ICAP作为一个字符设备集成到μClinux内核中,设备驱动程序按照标准的Linux设备驱动程序架构,内核接口在adapter.c中定义,实现了以下系统调用:
· open():在内核中为此设备创建一个节点;
· close():释放此设备在内核中的节点;
· read():从ICAP读取若干个字节到用户内存缓冲区;
· write():把用户缓冲区内的若干个字节写回到ICAP;
· ioctl():处理控制命令字;
以write函数为例,其接口函数的部分C程序如下:
while(write_count)
{
int word_count=0;
size_t left;
left=min(write_count,(size_t)XHI_MAX_BUFFER_BYTES);
while(left) //逐字写入ICAP模块的缓冲区
{
unsigned long tmp;
copy_from_user(&tmp,user_buf,4);
XHwIcap_StorageBufferWrite(&(inst->HwIcap),
word_count++,tmp);
user_buf+=4;
left-=4;
}
status=XHwIcap_DeviceWrite(&(inst->HwIcap),0,
word_count);//整体写入配置存储器
write_count-=word_count*4;
}
重构过程由应用程序reconf控制。首先解析比特流首部以获取首部字节数、配置数据字节数等信息,然后提取配置数据依次送至ICAP设备。配置数据的前44个字节是ICAP设备的控制命令字,使ICAP工作在写时序下,并记录可重构区域在配置寄存器中的起始帧地址及长度;此后是配置数据帧序列,每两帧配置数据之间有一个间隔(Pad)帧;最后8个字节则是可重构区域重新工作的命令字,标志着重构过程完成[11]。应用程序的部分C代码如下:/*Read the bitstream header*/
bit_header=XHwIcap_ReadHeader(fbuffer);//解析比特流首部
……
/*Read the header (effectively skipping it)*/
numCharsRead=fread(fbuffer,sizeof(char),bit_header.Header-Length,stream);
/*Loop through all bitstream data and write to ICAP*/
for(i=0;i
numCharsRead=fread(fbuffer,sizeof(char),FILE_BUF_SIZE,
stream);
numCharsWrite=write(fd,fbuffer,numCharsRead);
}
本文用超级终端作为μClinux的标准输入输出环境,采用一个乘法器模块(mult.bit)和一个加法器模块(adder.bit)验证系统功能,根据提示输入两个操作数(如9和6)。系统初始状态为加法器,第一次重构加载乘法器,第二次重构加载加法器,每次加载完成后系统自动调用硬核模块,并回显计算结果至超级终端。经验证,本系统能够实现硬核的动态加载,步骤如下:
(1)系统上电,自动加载μClinux;
(2)使用ping命令确认客户端和服务器的网络连接正常;
(3)使用wget命令下载硬核模块至本地文件系统;
(4)使用reconf程序动态加载重构比特流。
3 HCRP协议规范
互联网的基本协议是TCP/IP协议。HTTP是建立在TCP/IP协议之上的一个面向对象的应用层协议,支持在统一的网页结构界面下,采用不同的协议访问不同的服务,如广泛采用的FTP、SMTP等应用层协议。为了利用HTTP网页结构提供较好的用户操作性,本文定义HCRP为一个基于TCP/IP协议的用户层协议,并使其与HTTP兼容。
HCRP采用客户/服务器模式,通过请求/响应范式建立连接,每次连接只处理一个请求,协议对前一连接的处理没有记忆能力。服务器将全部硬核模块按照其适用的FPGA芯片型号建立索引,客户端和服务器建立连接后,根据自己的芯片型号(如XC2VP30)向服务器发出查询命令。服务器则将适用于此芯片的全部硬核模块列表通过同一连接返回至客户端。客户端在本地文件系统浏览列表并选择所需硬核模块,重新与服务器建立连接,采用二进制传输模式下载至本地文件系统。
为避免重构比特流在传输过程中丢失或被篡改,可以采用加密传输方式,并在客户端增加校验,相应的解密和MD5工具可以很方便地被集成到嵌入式系统中。本系统只是简单地解析重构比特流首部,获取首部和配置数据的字节长度,进行文件完整性校验。为避免局部重构破坏系统静态区域的功能,本系统在修改配置存储器之前预先解析重构比特流首部后的44个字节,获取将要被修改的帧地址,验证是否与可重构区域范围匹配,以确保重构过程的安全。
随着半导体工艺和结构的改进,FPGA的价格和功耗问题将在很大程度上得到解决。与ASIC相比,FPGA的开发周期很短,更加适应快速变化的市场需求。可以预见,在手持、移动和便携式消费电子领域,基于FPGA单芯片的解决方案将逐渐普及。HCRP协议能够充分利用FPGA的灵活性,为此类设备提供强有力的支持。此外,硬件设备厂商可以利用HCRP为客户提供远程功能定制、故障修复和设备升级服务。
本文提出了一种互联网可下载硬件的实现方式,设计了一个基于FPGA的片上系统,该系统能够通过互联网远程获取硬核模块并动态加载。系统定义了HCRP协议的基本框架,解决了实现HCRP协议的关键技术问题。但作为一个互联网服务,HCRP协议仍需进一步细化,例如其通信端口的设定、请求消息和相应消息的格式等。而FPGA的型号和封装繁多,HCRP服务器需要一个高效的分类和索引算法,这些问题还有待进一步探讨。
参考文献
[1] SALEM M A,KHATIB J I.An introduction to open-source hardware development.EEdesign,2004(7).
[2] Xilinx Inc.Partial Reconfiguration.http://toolbox.xilinx.com/ docsan/xilinx8/books/data/docs/dev/dev0036_8.html.
[3] BLODGET B,MCMILLAN S,LYSAGHT P.A lightweight approach for embedded reconfiguration of fpgas.Design Automation and Test in Europe(DATE03),IEEE,2003:399-400.
[4] 许骏,晏渭川,彭澄濂.基于模块的动态可重构系统设计.计算机工程与设计,2008(6).
[5] WILLIAMS J,BERGMANN N.Embedded Linux as a platform for dynamically self-reconfiguring systems-on-chip.The international conference on engineering of reconfigurable systems and algorithms,Las Vegas,Nevada,USA,2004,6.
[6] Xilinx Inc.Virtex-II Pro Complete Data Sheet.http://www.xilinx.com/support/documentation/data_sheets/ds083.pdf.
[7] IBM Inc.CoreConnect Bus Architecture.http://www-01.ibm.com/chips/techlib/techlib.nsf/techdocs/852569B20050FF778-5256991004DB5D9/$file/crcon_pb.pdf.
[8] Xilinx Inc.Microblaze Processor Reference Guide.http://www.xilinx.com/support/documentation/sw_manuals/edk92i_mb_ref_guide.pdf.
[9] Xilinx Inc.System ACE Compact Flash Solution.http://www.xilinx.com/support/documentation/data_sheets/ds080.pdf.
[10] Xilinx Inc.PlanAhead User Guide.http://china.xilinx.com/support/documentation/sw_manuals/PlanAhead_UserGuide.pdf.
[11] Xilinx Inc.Xilinx Application Note XAPP662:In-Circuit Partial Reconfiguration of RocketIO Attributes.http://www.xilinx.com/support/documentation/application_notes/xapp662.pdf.