基于双FPGA系统的高速全局动态重构设计与实现

夏飞 李晖宙


摘 要: 基于双FPGA芯片的可重构原型系统,提出一种系统高速全局动态重构设计方法。利用Xilinx Virtex?7系列FPGA的常规配置通道,使用一片规模较小的FPGA芯片作为重构控制器对大规模算法FPGA芯片实现全局动态重构。实验结果表明,系统重构时间小于60 ms,与常规FPGA逻辑下载方法相比,配置效率提高了2~3个数量级。
关键词: 可编程门阵列; 可重构计算; 全局动态重构; 并行配置通道
中图分类号: TN919?34 文献标识码: A 文章编号: 1004?373X(2017)16?0151?04
Abstract: A system design method of high?speed global dynamic reconfiguration is proposed, which is based on a dual?FPGA reconfigurable prototype system. By virtue of the general configuration channel of Xilinx Virtex?7 Series FPGA, a small?scale FPGA chip is used as the reconfigurable controller to realize the global dynamic reconfiguration of large?scale algorithm FPGA chip . The experimental results show that the system reconfiguration time is less than 60 ms, and the configuration efficiency of the method is improved by 2 to 3 magnitude orders in comparison with the conventional FPGA logic downloading method.
Keywords: FPGA; reconfigurable computing; global dynamic reconfiguration; parallel configuration channel
动态重构是现场可编程门阵列(Field?Programmable Gate Array,FPGA)计算平台设计的技术难点之一,其重构能力是系统结构设计灵活性和适应性的体现。系统的动态重构能力体现在重构的粒度、时间和控制方法多个方面。FPGA属于细粒度重构器件,配置信息量大,需要开发高效的重构方法,降低重构开销,提高系统的实际计算效率。
1 FPGA
FPGA内部的基本结构是逻辑单元阵列,包括可编程逻辑模块(CLB)、I/O模块(IOB)和连线资源(PI)三部分[1],如图1所示。FPGA是完全不同于CPU,GPU的一种超大规模集成电路芯片,其功能需要在芯片制造后再定义,用户可以根据使用需求将其定义为一个处理器,也可以定义为实现特定功能的逻辑器件。
其中CLB是FPGA的基本逻辑单元,它提供了用户所需要的逻辑功能,通常规则地排列成一个阵列,散布于整个芯片。
IOB完成芯片的内部逻辑和外部封装脚的接口,它可编程为输入/输出和双向I/O口三种方式,通常排列于芯片的四周;PI包括各种长度的连接线段和一些可编程的连接开关,它们将各个可编程逻辑块或输入/输出块连接起来,构成特定功能的电路。改变各个CLB的功能或改变各个CLB与IOB的连接组合都能改变整个芯片的功能。
2 FPGA重构
2.1 重构的定义和类型
FPGA的重构(Reconfiguration)指的是对FPGA进行重新配置来改变其逻辑功能,即对FPGA的功能进行重定义。FPGA的重构可分为静态重构和动态重构,前者指系统逻辑功能的静态重载,即在外部逻辑的控制下,通过改写芯片配置存储器中目标系统的数据实现芯片逻辑功能的改变。通过JTAG 对FPGA 进行编程的方法即为典型的静态重构方法。
动态重构是指在可重构器件运行的过程中,可根據需要进行实时配置,改变电路结构,实现不同的功能,从而实现芯片逻辑功能的高速动态变换[2]。动态重构方法使得系统中不同时工作的模块可以分时复用FPGA的硬件资源,在动态切换过程中,系统其他模块仍能正常工作。动态重构能够提高系统的自适应能力和资源利用率,而且对计算任务从时间和空间上进行分解,使FPGA不仅具有接近ASIC的速度,而且兼具软件的灵活性。根据对芯片实现重构的区域和面积不同,动态重构可以分为全局重构和局部重构。全局重构是指对整个FPGA器件进行重新配置。在配置过程中,计算的中间结果必须取出存放在外部的存储器中,直到新的配置功能全部下载完为止,重构前后电路相互独立、没有关联。局部重构是指对FPGA器件的一部分进行重新配置,在配置过程中,系统其余部分的工作状态不受影响。
2.2 动态重构方法
近年来随着FPGA产品和技术的发展,动态可重构FPGA作为一种新兴的计算结构,其设计理论和设计方法已经逐渐成为新的研究热点。基于不同结构的FPGA芯片实现动态重构的方法不同,目前常见的有以下两种:
(1) Off?Chip重构。通过改写芯片配置存储器来实现芯片的重构。FPGA内部的逻辑单元可实现多种电路功能,配置存储器(CM)用于装载逻辑单元功能和互连关系的配置信息。这种方式需要首先将配置信息通过端口传送至FPGA内部的CM,然后再将配置信息装载到芯片逻辑单元中,对逻辑功能进行修改。
(2) Context重构。这种方式仅限于基于多重Context结构的FPGA,采用交换CM和片上Context存储器的部分或全部的配置数据来实现动态重构。FPGA内部的Context存储器可以存储多种配置信息。最早实现Context重构的是SIDNA工程提出的名为现场可编程片上系统(Field Programmable System On a Chip,FIPSOC),它是一种具备可重构能力的粗粒度结构FPGA[3]。动态编程门阵列(Dynamically Programmable Gate Array,DPGA)是美国麻省理工学院提出的一种基于多重context 重构方式的动态可重构FPGA[4]。又如美国California大学Morphoing System工程提出的一种粗粒度、多重Context结构的芯片M1[5]中可存储32种Context信息,通过切换Context部分或全部内容来改变配置,从而控制阵列单元实现新的逻辑功能。由于配置信息预先存储在FPGA片内,芯片的重构时间仅取决于Context间的切换速度,重构开销一般仅需几纳秒。此外,RAPID[6]也是一种比较知名的粗粒度可重构结构。
在商用领域,Xilinx公司的Virtex系列是基于SRAM技术和Off?Chip结构的可重构FPGA芯片,提供了Select MAP 32 b并行配置端口,为芯片的快速重构提供了良好的硬件支持。
此外,Altera公司也成功推出了Stratix系列动态可重构FPGA[7]并获得了广泛的应用。文献[8]提出了一种基于改进型游程编码的FPGA动态重构方法,提高了动态重构效率,但是本质上还是基于FPGA芯片提供的并行配置端口。
3 Virtex?7 FPGA配置端口
3.1 V7芯片配置模式
根据芯片是否能够主动加载配置数据,FPGA的配置方式可分为主动、被动以及JTAG(Joint Test Action Group)模式。除了JTAG模式只支持串行配置外,主被动模式都支持串行和并行(×8,×16和×32)配置方式[9]。
主动配置模式需要预先将配置文件写入外部存储器中,FPGA加电后驱动配置时钟,从片外存储器载入配置信息。在被动模式下,FPGA作为从属器件,需要外部控制器将数据写入FPGA配置存储器中。配置数据可以存放在系统任何存储设备中,如硬盘、主存、FLASH,甚至可以嵌入CPU的執行代码,配置方式更灵活。JTAG模式通常作为系统的调试模式,主要用于开发环节对芯片功能进行测试。XC7VX1140T作为Xilinx Virtex?7系列中的最高档芯片,能够支持主动串行、被动串行、JTAG、并行(Select MAP)等多种配置模式[9]。其中Select MAP被动模式是速度最快的并行配置方式,本文采用该模式实现系统的动态重构。
3.2 被动Select MAP模式
被动Select MAP模式下有×8,×16和×32三种位宽可供选择,主设备可以是微处理器、微控制器、DSP、CPLD等,主从设备的连接关系如图2所示。
CLOCK信号为控制信号和数据的采样时钟,CS_B为片选,RDWR_B为配置读/写控制信号。并行Select MAP端口配置数据加载时序如图3所示。
配置过程包括初始化、配置启动、配置数据加载、CRC校验和START?UP五个步骤:
(1) 初始化。主设备首先拉低CONFIG_START信号启动配置过程,250 ns后将CONFIG_START信号拉高;FPGA采样到CONFIG_START信号为低后启动初始化,完成后将DONE信号置低。
(2) 清空配置存储器。主设备拉低INIT_START信号,FPGA采样到该信号后,自动清空配置存储器;控制器可延长INIT_START信号拉低的时间确保配置存储器被清空,随后拉高INIT_START信号表示初始化完成。
(3) 配置数据加载。配置存储器清空后,FPGA对配置模式引脚进行采样,确定数据加载方式;FPGA在CCLK时钟的上升沿采样配置数据,写入配置存储器。
(4) CRC校验。FPGA在加载配置数据的同时计算CRC值,并将结果和配置文件中内置的CRC值进行比较,如果不一致,则说明数据加载发生错误,FPGA随即将INIT_B引脚置低,中断配置过程。控制器在配置过程中检测到INIT_B引脚被置低,则立即拉低CONFIG_START,重启配置过程。
(5) START?UP。当最后一个数据接收完成并校验无误后,FPGA将DONE信号置为高电平,表示FPGA配置完成;将所有I/O引脚由三态切换到用户设置的状态;对所有逻辑进行复位,由配置状态过渡到用户状态。
4 双FPGA系统全局动态重构
4.1 系统介绍
本设计中采用双FPGA芯片,即使采用一块小规模的Virtex?7系列FPGA芯片作为控制器来动态配置目标FPGA芯片。Virtex?7是全球首款28 nm FPGA系列,与Virtex?6器件相比,系统性能提高1倍,功耗降低[12],信号处理能力提升1.8倍,I/O带宽提升1.6倍,存储带宽提升2倍,达到2 133 Mb/s,是业界密度最高的FPGA。该系列顶级的XC7VX1140T芯片集成了178 000个Slice,总计达1 139 200个逻辑单元;1 880个36 Kb Block RAM存储模块,总计67 680 Kb存储容量;片内还集成了3 360个DSP模块,可达到5 335 Gb MACS的峰值计算性能[10]。本设计采用V7系列较小规模的XC7VX330T芯片作为接口控制器,330T芯片内部包含个51 000个Slice,750个32 Kb BlockRAM和1 120个DSP,此外还集成了2个PCI?E端点(支持第二代PCI?E×8接口)和以太网MAC(媒体访问控制器)模块及其他增强型IP Core、系统监控模块以及DCM (数字时钟管理器)模块等,是实现数据交互和对目标FPGA芯片(即算法FPGA)实现动态配置的理想选择。
PCI?E×8接口是主机和算法加速器之间的主要互连通路,用于数据交互,传递操作指令、原始数据、计算结果和算法FPGA重构所需的配置流文件,有效数据传输带宽为1.0 GB/s。控制FPGA和算法FPGA之间通过两个独立的双向128 b数据通道相连,算法FPGA通过这两个数据通道经控制FPGA与主机实现数据交互,峰值数据传输带宽为6.4 GB/s。此外,控制FPGA还和算法FPGA的并行配置端口相连,支持32 b并行高速配置,有效数据传输带宽为160 MB/s。
4.2 全局动态重构
图4为双FPGA原型系统全局动态重构示意图。采用双FPGA原型系统的好处是可以灵活控制数据的I/O操作和动态配置全部过程。系统的动态重构过程由主机,PCI?E接口,CPLD,PROM,SRAM部件共同参与完成。由主机生成FPGA配置数据,并通过PCI?E接口向配置控制器XC7VX330T发出重构命令和配置数据。XC7VX330T的通用I/O接口与XC7VX1140T的Select MAP配置端口相连,作为控制器发起配置过程。系统动态重构过程如下(图4中的序号对应动态重构过程编号):
(1) 采用静态重构方法将控制FPGA(XC7VX330T)的配置数据通过JTAG接口预先下载至PROM中;
(2) 设备加电后,CPLD从两块PROM芯片的4个Bank中选择一个设计加载至控制FPGA。加载过程完成后,XC7VX330T自动复位并进入正常工作状态,通过PCI?E接口与主机建立连接;
(3) 控制FPGA接收到主机发出的算法FPGA重构命令,进入启动配置状态;
(4) 控制FPGA从PCI?E接口接收主机发送的配置数据,并缓存在SRAM中;
(5) 配置数据接收完成后,控制FPGA启动对算法FPGA(XC7VX1140T)的动态重构过程,按照芯片被动模式下的配置时序将配置文件从SRAM存储器中读出,通过XC7VX1140T芯片SelectMAP32 配置端口写入FPGA配置存储器;
(6) 配置过程结束后,XC7VX1140T芯片返回配置完成信号(DONE),并自动复位,进入正常工作状态;
(7) XC7VX330T芯片将配置完成信号返回给主机,配置过程结束,算法FPGA芯片进入正常工作状态,开始执行计算任务;
(8) 在正常工作状态下,如果XC7VX330T再次收到主机发出的重构命令,则重复步骤(4)~步骤(7)对算法FPGA实现动态重构。
4.3 动态任务切换
在系统工作过程中,主机和FPGA之间通过片外存储器的指定地址空间,采用DMA方式经PCI?E接口实现数据交互。对于简单的单个应用,主机首先通过配置通道将配置文件加载至FPGA,数据发送后启动计算过程,之后不再干预FPGA的工作,直到计算结果有效。而对包含不同算法和多个处理步骤的较复杂应用则需要主机和FPGA的高效协同:主机在计算的特定环节向FPGA发出操作命令,通过数据和配置通道提供配置文件和计算参数,对FPGA实现动态重构;FPGA则使用中断和状态寄存器报告程序的执行状态。主机根据当前应用类型和用户指定的算法选择合适的处理流程,在文件库中按次序调用相应的配置文件,通过动态重构将配置文件发送给FPGA,实现不同应用和处理过程之间的任务切换,让不同应用程序或程序段分时使用硬件资源。通过自动改变硬件配置来适应正在运行的用户程序,可实现在不同计算任务之间进行快速切换,大大提高对应用的整体加速效果。
5 结 语
本文基于双FPGA芯片的可重构原型系统,提出了一种系统高速全局动态重构设计方法。利用Xilinx Virtex?7系列FPGA的常规配置通道,使用一片规模较小的FPGA作为重构控制器对大规模算法FPGA芯片实现全局动态重构,芯片重构时间小于60 ms,可以实现不同算法和应用的快速切换。与几十秒乃至上百秒的常规FPGA逻辑下载方法相比,配置效率提高了2~3个数量级,从而有效提高了系统的实际计算效率。
注:本文通讯作者为李晖宙。
参考文献
[1] HAUCK S, DEHON A. Reconfigurable computing: the theory and practice of FPGA?based computing [M]. San Francisco: Morgan Kaufmann Publisher, 2008.
[2] 王志远,王建华,徐旸.可重构计算综述[J].小型微型计算机系统,2009,30(6):1203?1207.
[3] MORENO J M, MADRENAS J, CABESTANY J, et al. Realization of self?repairing and evolvable hardware structures by means of implicit self?configuration [C]// Proceedings of the First NASA/DoD Workshop on Evolvable Hardware. [S.l.]: IEEE, 1999: 182?187.
[4] 覃祥菊,朱明程,张太镒,等.FPGA动态可重构技术原理及实现方法分析[J].电子器件,2004,27(2):277?282.
[5] MAESTRE R, KURDAHI F J, FERNANDEZ M, et al. A framework for reconfigurable computing: task scheduling and context management [J]. IEEE transactions on very large integration systems: system level design, 2001, 9(6): 858?873.
[6] EBELING Carl. Rapid: a configurable architecture for compute?intensive applications [EB/OL]. [2016?03?21]. http://www.cs.washing ton.edu/research/lis/rapid/overview. 2016.
[7] 李昆吉.FPGA动态可重构技术及其应用研究[D].哈尔滨:哈尔滨工业大学,2012.
[8] 邵龙.一种基于改进型游程编码的FPGA动态重构方法[J].电子器件,2014,37(5):1009?1012.
[9] Xilinx Corporation Product Specification. Virtex?7 Series FPGAs configuration user guide, UG470 (v1.10) [EB/OL]. [2016?04?22]. http://www.xilinx.com/support.html#documentation.
[10] Xilinx Corporation Product Specification. Virtex?7 series FPGAs overview, DS180 (V1.17) [EB/OL]. [2015?06?21]. http://www.xilinx.com/support/documentation/data_sheets/ds180_7Series_
Overview.pdf.