APP下载

FPGA局部重配置技术的实现及应用

2016-12-28韩炼冰段俊红房利国

通信技术 2016年12期
关键词:配置文件顶层开发者

韩炼冰,段俊红,王 松,房利国,刘 蕴

(中国电子科技集团公司第三十研究所,四川 成都 610041)

FPGA局部重配置技术的实现及应用

韩炼冰,段俊红,王 松,房利国,刘 蕴

(中国电子科技集团公司第三十研究所,四川 成都 610041)

局部重配置能够在现场可编程门阵列(FPGA)运行过程中动态修改重配置区域,而不影响其他非重配置区域的正常运行。因此,采用局部重配置技术设计的系统,往往具有良好的灵活性和适应性。于是,在详细描述FPGA局部重配置的实现方法的基础上,提出了一种避免所有模块联合编译的FPGA设计方法。最终,分别在virtex5和Artix7开发板上对该设计方法进行验证,证明了所提方法的可行性。

局部重配置;FPGA;编译;动态配置

0 引 言

随着通信系统的复杂化和多功能化,很多系统需要在不同时刻实现不同的功能,这就在多数场合需要FPGA支持动态配置[1]。当前,FPGA的配置方式可分为完全配置和局部重配置两种。完全配置在FPGA系统的整个使用周期内不再改变FPGA的逻辑结构[2],除非重新配置新的配置文件,是FPGA的常用配置方式。局部重配置是在FPGA运行过程中改变部分逻辑结构,而不影响其他逻辑正常工作的一种配置方法。局部重配置具有重要的实用意义,它可以将暂时不用的资源配置成有用的功能模块,做到部分资源的分时复用,从而提高资源的利用率。或者,它动态改变局部模块,达到改变功能或升级的目的。

在软件实现系统中,处理器可以动态地调用当前所需的程序段完成不同的功能,具有相当大的灵活性[3]。与软件实现不同,通常FPGA开发完成后需要将所有的模块代码进行联合编译,才能生成最后的可执行文件,这在一定程度上降低了灵活性。也正是因为这一特点,使得一些跨团队合作的项目因为联合编译而浪费开发时间。特别是在特殊领域,因保密和管理的需要,一些重要模块需要独立开发,从而也给联合编译带来诸多不便。于是,本文根据Xilinx的局部重配置技术,提出了一种可独立编译模块的FPGA设计方法。

1 局部重配置

Xilinx的局部重配置通常有两种方法:一种是基于模块化的方式;一种是基于差异化的方式。差异化的方法通常用在配置前后改变很小的情况,有一定的局限性。所以,这里主要研究模块化的局部重配置技术。

1.1 模块化局部重配置的设计要求和特性

模块化局部重配置需采用层次化的模块设计方式,将设计分成顶层、静态逻辑和动态逻辑三部分,设计框图如图1所示。顶层用于静态模块和动态模块间的连接以及时钟的管理等;静态部分为固定不变的逻辑(也可将该部分全部或者部分放在顶层内);动态部分为可重构逻辑。可重构逻辑可以实现成不同功能的模块,但是每个模块的顶层接口必须一致。值得注意的是,不是FPGA器件内的所有资源都是可重构的。不能重构的资源包括[4]:BUFG、BUFR、MMCM、PLL、DCM、MGTs、BSCAN、STARTUP等。

图1 局部重配置设计

静态逻辑、动态逻辑与顶层设计联合编译后,会产生完整的配置文件和单独的动态逻辑配置文件。在FPGA运行过程中,若需要改变动态逻辑的功能,只需向FPGA内下载单独的动态逻辑配置文件即可。

1.2 模块化局部重配置的实现方法

一个完整的FPGA设计工程中可以包含一个或者多个动态逻辑,动态逻辑间可以有交互接口,实现框图如图2所示。目前,Xilinx的局部重配置实现工具有两种:一种是PlanAhead;一种是Vivado。PlanAhead用于Virtex4、Virtex5和Virtex6等FPGA的局部重配置设计,Vivado用于7系列及以后的FPGA局部重配置设计。

图2 包涵两个动态逻辑的实现模型

1.2.1 利用PlanAhead工具实现

Xilinx的局部重配置只能基于网表文件实现。利用PlanAhead开发工具的实现步骤如下[5]:

①生成网表文件。通过ISE综合工具生成顶层文件的网表文件(生成顶层网表文件时,要去掉各个动态模块的代码,只保留接口)和各个动态逻辑的网表文件(生成动态模块的网表文件时,要去掉ISE里添加I/O buffer的选项)。同一个动态逻辑的不同实现,都要生成各自的网表文件。例如,图2中动态逻辑1和动态逻辑2各有三种不同的逻辑实现,因此各自需编译三个网表文件。

②创建工程,划分模块逻辑区域。在PlanAhead中创建可重构的工程,导入各网表文件和ucf文件,并为每个动态逻辑划分逻辑区域。

③编译并生成配置文件。编译整个工程,同一个动态逻辑的不同实现都要编译。图2所示的动态逻辑1有三种实现,因此要编译三次,但不是每次编译都要从头开始。第二次和第三次编译时,都会导入第一次的静态部分编译结果,从而保证每次编译时静态部分的布局和布线完全一致。完成编译后,将生成三个完整的配置文件和三个单独的动态逻辑1的配置文件。采用同样的编译方法对动态逻辑2进行编译,得到三个完整的配置文件和三个单独的动态逻辑2的配置文件。除了上述单独编译动态逻辑1和动态逻辑2的方法外,还可将其联合编译,减少编译次数。编译方法为:第一次编译Pr_A1和Pr_B1,第二次编译Pr_A2和Pr_B2,第三次编译Pr_A3和Pr_ B3,三次编译完成后即可得到三个完整的配置文件和六个单独的动态逻辑配置文件(动态逻辑1和动态逻辑2各三个文件)。

1.2.2 利用Vivado工具实现

采用Vivado工具实现局部重配置的操作方式与PlanAhead有些差异。Vivado的大部分操作都需要脚本命令来实现。利用Vivado开发工具实现局部重配置的流程如下[6]:

①综合设计。编写综合的脚本,将顶层和各重配置模块编译成.dcp(Design Checkpoint)文件。

②聚合设计。在Vivado里先后导入顶层和重配置模块的.dcp文件,并设置重配置模块的属性HD.RECONFIGURABLE。

③设计布局。根据重配置模块的资源,为其划定区域,并将结果写入约束文件fplan.xdc里。

④实现第一个配置。导入管脚约束文件io.xdc,执行布局、布线等命令后,完成编译。执行write_ checkpoint命令导出编译后的信息到all1.dcp文件,该dcp文件将用于后续产生配置文件。执行命令update_design去掉重配置模块的逻辑,再执行lock_ design命令锁定重配置模块外的逻辑及布局布线信息,并执行命令write_checkpoint将信息写入到static. dcp文件。

⑤实现第二个配置。先导入static.dcp,再导入重配置模块第二个功能的.dcp文件。执行布局、布线命令进行编译,编译完成后执行write_checkpoint命令,导出编译后信息到all2.dcp文件。

⑥产生配置文件。执行open_checkpoint命令打开all1.dcp或者all2.dcp,再执行write_bitstream命令,即可生成a111或者all2的完成配置文件和重配置模块的配置文件。

1.3 配置文件的下载方法

1.3.1 下载完整的bit文件

FPGA上电复位后需配置完整的bit文件。完整的bit文件包含FPGA的复位、配置数据及文件校验所需的所有信息,配置的框图如图3所示。当配置完成且文件校验正确后,FPGA将进入用户模式,并将专用配置引脚DONE置高。

图3 配置完整的BIT文件

1.3.2 下载局部bit文件

下载局部bit文件时,FPGA处于用户模式,以保证下载局部bit文件时FPGA的其他逻辑模块还能正常工作。配置局部bit文件的框图如图4所示。局部配置bit文件只包含地址、配置数据以及最终的校验值。

图4 配置局部的BIT文件

2 独立编译模块的设计方法

2.1 实现条件

独立编译模块的方法,除了满足局部重配置的所有条件外,还需对整个设计拥有全局的把控。需要将不可重配置或者不需重配置的逻辑规划到顶层文件中,并规划每个独立编译模块的接口和所需资源。顶层文件、独立编译模块的接口信号以及规划给独立编译模块的资源这三部分,一旦确定将不可改变。任何一部分的改变,都将使独立编译的文件不能使用。

2.2 实现方法

图5给出了一个模块独立编译的设计框图。设计分成三部分:顶层逻辑、模块A和模块B。模块A和B为可重构模块。顶层逻辑和模块A、B的接口与资源一旦确定,模块A和模块B可独立的开发、调试,最终编译可执行文件。下面分别介绍采用PlanAhead工具和Vivado工具的实现方法。

2.2.1 利用PlanAhead工具实现

图5 独立编译的设计

利用PlanAhead工具实现的主要步骤如下:

①编译顶层网表。模块A和模块B的开发者各自实现一个只模拟接口时序的模块A1和模块B1,并编译成网表,编译方法同1.2节的步骤;

②导入顶层网表。在PlanAhead里创建局部重配置工程,导入编译好的顶层网表文件和ucf文件;

③导入可重构模块,划分逻辑区域。导入可模拟接口时序的模块A1和B1的网表文件,为可重构模块A和B划分逻辑区域;

④编译。编译完成后,将config_1执行Promote Partitions操作;

⑤将编译后的整个工程和网表文件分别给模块A和模块B的开发者;

⑥模块A(B)的开发者,用自己模块的网表文件A(B)替换第⑤步里的A1(B1)网表文件,同时将模块B(A)继续保持为B1(A1);

⑦重新编译。开发者A和开发者B各自进行编译,编译完成后开发者A(B)将得到两种配置文件:一种是顶层+模块A(B)的完整配置文件;一种是模块A(B)单独的配置文件;

⑧开发者A(B)将模块A(B)单独的配置文件给开发者B(A);

⑨配置时,先配置顶层+模块A(B)完整的配置文件,再配置模块B(A)单独的配置文件;

⑩如果设计过程中修改了顶层逻辑、模块A(B)的接口信号或者A(B)规划的逻辑资源,需要重复实现步骤①~步骤⑨,重新规划动态模块的资源,并用新的工程文件编译各个动态模块。

2.2.2 利用Vivado工具实现

利用Vivado工具实现的主要步骤如下:

①综合。模块A和模块B的开发者各自实现一个只模拟接口时序的模块A1和模块B1,并综合得到.dcp文件。按照1.2节描述的步骤得到static.dcp文件,将该文件分别发送给模块A的开发者和模块B的开发者;

②开发者A(B)先导入static.dcp文件,再导入自己真实的模块A(B)的dcp文件和B1(A1)的dcp文件,编译后生成配置文件;

③开发者A(B)将模块A(B)的局部配置文件发给模块B(A)的开发者;

④配置时,开发者A(B)先配置完整的配置文件,再配置B(A)模块的局部配置文件;

⑤如果顶层逻辑有改动,需要重新产生static. dcp文件,并发给A、B双方。A、B双方再重复步骤②~步骤④,重新生成新的配置文件。

2.3 实现结果

分别在virtex5和Artix7的开发板中,根据图5的设计框图编写了实际的程序,并模拟A、B两个开发者对A、B两个模块独立开发。按照2.2节的实现方法,A、B两个设计者各自产生了完整的配置文件和A或B模块单独的配置文件。开发者A配置时,通过JTAG调试接口先配置自己生成的完整配置文件,再配置模块B单独的配置文件。开发者B配置时,通过JTAG调试接口先配置自己生成的完整配置文件,再配置模块A单独的配置文件。开发者A和B配置完成后,FPGA的所有功能都能正常运行。由此表明,文中描述的FPGA独立编译模块的方法是可行的。

3 适用性分析

对未采用局部重配置的普通设计方法、文献[2]描述的局部重配置方法以及文中基于局部重配置的独立编译模块的设计方法共三种FPGA设计方法进行比较,可以得到如表1所示的结果。可见,文中的FPGA设计方法具有局部重配置的所有优点,且与文献[2]相比,极大减少了开发者的工作量。同时,由于文中的FPGA设计方法能独立对模块进行编译,产生可以直接供其他模块使用的二进制文件,因此非常适合多个团队合作完成一项科研任务时使用。

表1 三种设计方法比较

4 结 语

基于局部重配置技术的FPGA设计方法,除了能避免所有模块联合编译外,还能对设计者的模块起到知识产权保护作用。设计者最终只需要提供模块的执行程序,而不需提供模块的网表文件或者源代码。目前,局部重配置技术在使用上还有一定的限制,尚有待进一步发展,但这一领域已是众多FPGA厂商研究的热点[7]。相信随着技术的不断成熟,此技术的应用前景将非常广阔。

[1] 陈曦,沈佐峰.一种可靠的FPGA动态配置方法及实现[J].通信技术,2012,45(03):105-110. CHEN Xi,SHEN Zuo-feng.A Reliable Dynamic Configuration and Implementation of FPGA[J].Communications Technology,2012,45(03):105-110.

[2] 陶杰.FPGA局部动态可重配置的研究[J].电子科技,2009,22(04):36-38. TAO Jie.Research on Partially and Dynamically Reconfigured FPGA[J].Electronic Science and Technology, 2009,22(04):36-38.

[3] 李鹏,兰巨龙,姜鲲鹏.FPGA动态局部重构技术研究进展[J].信息工程大学学报,2009,10(01):98-105. LI Peng,LAN Ju-long,JIANG Kun-peng.Survey of Research on FPGA-Based Partial Reconfiguration Technology[J].Journal of Information Engineering University,2009,10(01):98-105.

[4] XILINX.Partial Reconfiguration User Guide[EB/OL]. (2012-12-08)[2016-08-12].http://www.xilinx.com.

[5] XILINX.PlanAhead Tutorial Partial Reconfiguration [EB/ OL].(2012-05-08)[2016-08-12].http://www.xilinx.com.

[6] XILINX.Vivado Partial Reconfiguration Tutorial [EB/ OL].(2014-10-01)[2015-12-28].http://www.xilinx.com.

[7] 吴凤艳,王烈,孙洪民.基于FPGA的动态局部可重构方法分析与比较[J].广西科学院学报,2009,25(04): 340-346. WU Feng-yan,WANG Lie,SUN Hong-min.Analyze and Compare the Methods of Dynamic Partial Reconfiguration based on FPGAs[J].Journal of Guangxi Academy of Sciences,2009,25(04):340-346.

韩炼冰(1984—),男,学士,工程师,主要研究方向为信息安全、通信安全技术;

段俊红(1984—),男,学士,工程师,主要研究方向为嵌入式系统、通信安全技术;

王 松(1985—),男,学士,工程师,主要研究方向为信息安全、通信安全技术;

房利国(1977—),男,硕士,高级工程师,主要研究方向为信息安全、通信安全技术、计算机应用;

刘 蕴(1981—),女,硕士,工程师,主要研究方向为信息安全。

Implementation and Application of FPGA Partial Reconfiguration Technology

HAN Lian-bing, DUAN Jun-hong, WANG Song, FANG Li-guo, LIU Yun
(NO.30 Institute of CETC, Chengdu Sichuan 610041, China)

Partial reconfiguration can dynamically modify reconfiguration region in operating process of FPGA, without any effect on the normal operation of other non-reconfiguration region. For this reason, the system with the design of partial reconfiguration technology often has fairly good flexibility and adaptability. Thus based on the detailed description of implementation method of FPGA partial reconfiguration, the FPGA design method capable of avoiding all modules in combined compiling is proposed. Finally, the actual verification of the design method on the Virtex5 and Artix7 development boards is done, and this verification indicates the feasibility and applicability of the proposed method.

partial reconfiguration; FPGA; compilation; dynamic configuration

TP302

A

1002-0802(2016)-12-1728-05

10.3969/j.issn.1002-0802.2016.12.029

2016-08-19

2016-11-22 Received date:2016-08-19;Revised date:2016-11-22

猜你喜欢

配置文件顶层开发者
从Windows 10中删除所有网络配置文件
用软件处理Windows沙盒配置文件
汽车顶层上的乘客
互不干涉混用Chromium Edge
基于Zookeeper的配置管理中心设计与实现
“85后”高学历男性成为APP开发新生主力军
16%游戏开发者看好VR
加快顶层设计
健康卡“卡”在顶层没联网