引 言
FPGA动态局部可重构技术是指允许可重构的器件或系统的一部分进行重新配置,配置过程中其余部分的工作不受影响。动态局部可重构缩短了重构的时间,减少了系统重构的开销,提高了系统的运行效率。局部动态可重构技术中通常将系统划分为固定模块和可重构模块。可重构模块与其他模块之间的通信(包括可重构模块和固定模块之间、可重构模块和可重构模块之间)都是由总线宏实现的。
动态可重构技术在FPGA中的实现是Xilinx公司首先提出的,并且提供了相应的开发工具和开发流程。他们从Virtex系列器件开始支持动态可重构技术,同时他们提供了现成的总线宏文件给动态可重构系统开发者使用,但是它们提供的总线宏设计与软件版本的兼容性很差。Xilinx提供的总线宏可能因为软件版本的问题会无法正常使用,所以用户需要借助正在使用的版本软件设计总线宏,以实现FPGA动态局部可重构设计。
在研究总线宏的结构基础上,采用FPGA Editor可视化的方法设计基于TBUF的总线宏,并通过FP-GA动态可重构实验验证了该方法的正确性。
1 基于TBUF的总线宏结构
在不同系列的Xilinx FPGA器件中,使用不同的总线宏来实现动态局部可重构技术。在Virtex,Virtex-E,Virtex-ⅡPro X,Spartan-Ⅱ,Spartan-ⅡE和Spartan-3系列器件中所使用的总线宏都是基于TBUF的,可重构模块的位置固定不变;在Virtex4,Virtex5更高性能的器件中,所使用的总线宏是基于Slice的,可重构模块的位置是可变的;而Virtex-Ⅱ,Virtex-ⅡPro所使用的总线宏既可以基于TBUF,也可以基于Slice。
目前,使用最多的总线宏,其物理实现是使用6个三态缓冲器(TBUF),实现4位的双向通信。每个TBUF占用1位,每位使用1根TBUF长线,从FPGA的最左侧到最右侧,如图1所示。TBUF的T端是三态使能端口;I端是数据输入端口;O是数据输出端口。相应地,总线宏的T端(LT和RT)是方向控制端口,控制总线宏从左或从右输出;I端(LI和RI)是数据输入端口;O端(LO和RO)是数据输出端口。
总线宏的信息通信是双向的,既可以从左到右,也可以从右到左。但是对于一个设计来说,一旦信息通信方向确定以后就不能再改变。总线宏的位置精确地跨骑在模块A和模块B之间(A或B是可重构模块,或AB全是可重构模块),其中四栅三态缓冲器在模块A内,另外四栅在B内。对于Virtex-Ⅱ等系列器件,因内部结构不同,故两栅跨骑在模块A内,另外两栅跨骑在模块B内。
2 基于TBUF的总线宏设计
这里在深入研究Xilinx公司所提供的总线宏的基础上,结合宏的设计技术,完善了总线宏的设计。
(1)TBUF的内部路由。图2给出内部路由后的TBUF电路结构图。TMUX的T端决定总线宏的控制端LT和RT高电平有效,而T_B端决定低电平有效。
无论控制信号是高电平有效,还是低电平有效,在使用总线宏进行通信时,LT和RT的值必须是相反的,或者是同时无效的。例如,当控制信号高有效时,即T端为1时,TBUF打开。如果总线宏是从左向右传递数据,则必须将LT设为1,RT为0,反之亦然;如果总线宏不需要传递数据,那么两个控制信号应同时为0,此时总线宏输出为高阻态。
(2)TBUF添加的方法。Virtex,Virtex-E,Spar-tan-Ⅱ,Spartan-ⅡE的内部结构类似,与TBUF添加的方法是相同的。在相应的位置选择一个可编程逻辑块(Configurable Logic Block,CLB)中的一个TBUF作为总线宏的一个TBUF(1个CLB包含2个TBUF),依次选择同一行相连下一个CLB中的一个TBUF,直至选够8个TBUF为止;对于Spartan-3,Virtex-Ⅱ,Virtex-ⅡPro和Virtex-ⅡPro X系列器件;每一个CLB中的2个TBUF都作为总线宏的TBUF被选用,在同一行中依次选择相连的4个CLB中的8个TBUF作为总线宏的TBUF,如图3所示。
(3)TBUF外部端口的命名规则。根据图1的总线宏结构,对各个TBUF的外部端口T,I和O进行相应的命名,命名时要符合所使用版本软件的要求。例如,若对端口进行如下命名:LI<3>,LT<3>等,而端口在进行物理设计规则检查(Design Rule Check,DRC)时会出错,根据所提示的出错信息将命名改为:LI(3),LT(3)等,即能顺利通过DRC,完成端口的命名。
(4)总线宏输出端口的定义。总线宏输出端口的定义只能通过手工路由(Manual Route)方法,把相应TBUF的输出端口通过端口连线和TBUF长线连接起来。
(5)参考TBUF的设置。设计中通过约束参考TBUF的位置来决定整个总线宏的位置,若用户没有设置参考TBUF,则FPGA Editor工具会将用户添加的第一个TBUF默认为参考TBUF。
至此,整个总线宏的设计完成,如图4所示。
3 总线宏的验证
为了验证上述总线宏设计方法的正确与否,这里设计了一个功能简单的FPGA动态局部可重构实验。电路重构前实现的功能为:(A+B)*(C-D),重构后实现的功能为:(A+B)》(C-D)。根据电路功能将电路划分为3个模块。其中,加法(A+B)、减法(C-D)为固定模块M1,M2;乘法/移位(*/》)为可重构模块M3。M1与M3,M2与M3之间分别用总线宏BM1和。BM2实现通信,如图5所示。
该实验采用的软件开发平台:Xilinx ISE6.2i;硬件开发平台:可重构硬件平台——XCV800验证板。
每一个总线宏只能传递4位的信号。当可重构模块间需要多于4位的数据通信时,可以通过多个总线宏的拼接实现。这种拼接只是简单地将多个宏拼接为一个文件,而不是将多个宏拼接为一个宏,所以在使用约束语句,约束总线宏的位置时,仍然必须单独约束每个宏,而不是直接约束一个文件。例如该实验中模块M1与模块M3之间的数据通信是8位,则需要2(8/4)个总线宏来实现模块M1与M3间的通信,M2与M3之间也一样:
按照FPGA动态可重构软件设计流程生成局部动态可重构.bit文件;通过JTAG电缆下载到可重构硬件平台——XCV800验证板进行调试验证;通过逻辑分析仪观察结果,如图6所示。
A,B的和Q1作为总线宏BM1的数据输入LI1;C,D的差Q2作为总线宏BM2的数据输入RI2;BM1和BM2的方向控制端LT1,RT2为高(255),RT1,LT2为低(O);数据输入端RI1,LI2悬空,R01,L02分别为总线宏的输出;Q3为可重构模块M3的输出。由实验结果可知,总线宏的设计是正确的。
4 结 语
目前,Xilinx公司提倡使用最新的EAPR(Early Access Partial Reconfiguration)方法实现FPGA动态局部可重构技术。该方法中用于可重构模块与其他模块之间通信的总线宏是基于Slice的,但这个方法只适用于Virtex-Ⅱ,Virtex-ⅡPro,Virtex-IV和Virtex-V等器件,对于Virtex,SpartanⅡ,SpartanⅢ等器件,只能使用基于TBUF的总线宏实现动态可重构技术,因此该文对基于TBUF的总线宏研究是有意义的。