图1 计算出的Spartan-6配置时间的对数表示(按最坏情况计算)
为了克服这个难题,Fast Startup分两步配置FPGA器件,而非单步(整片)的全器件配置。按照这种新颖的思路,我们的策略是在上电时使用最高优先级比特流仅载入时序关键模块,然后再载入非时序关键模块。这种方法最大程度地减少了初始配置数据,从而最大程度地减少了在面向时序关键设计的FPGA器件启动时间。 FAST STARTUP对比部分重配置
Fast Startup允许FPGA设计尽快启动设计的关键模块,关键模块的启动速度比标准全配置方法要快得多。虽然,从本质上来讲Fast Startup利用了部分重配置,但它与这种方法的传统概念所有不同。部分重配置的初衷是将完整设计作为可在运行时修改的初始配置使用。相反,Fast Startup已经使用了一个初始的部分比特流,以在上电时仅仅配置FPGA器件的一个特定(很小的一部分)区域。第一次配置仅包含完整FPGA设计中必须配置和快速运行的那些部分。而剩下的部分则在以后、在运行时,利用部分重配置进行配置。图2说明了这一顺序概念。
图2 Fast Startup概念:顺序配置 工具流程概述
Fast Startup的工具流程依靠设计保存流程,来创建针对时序关键子系统及非时序关键子系统的部分比特流。
设计保存流程将FPGA设计分割为逻辑模块(称为“分区”)。分区构成了层次边界,将内部模块与设计中的其他组件相互隔离。分区一旦实现(即完成布局和布线),就能被其他实现运行导入,以按照每个实例中完全相同的方式实现该分区的模块。
因此,使用Fast Startup方法的第一步是将完整的FPGA设计分成两部分:即含有时序关键子系统的高优先级分区和针对其余组件的低优先级分区。 高优先级分区的实现
为了得到尽可能小的高优先级分区的部分比特流,设计中有一些一般性问题需要考虑。首先,该分区必须只能包含此类组件:或者是时序关键组件,或者是系统需要这些组件来执行低优先级部分(如ICAP)的部分重配置。得到小规模初始部分比特流的关键是使用尽可能小的区域实现高优先级分区。也就是说,您必须将这个分区局限在FPGA中的一个适当区域中。
为了在FPGA中找到理想的物理位置,这个区域应该提供该设计需要的适当数量的资源。访问该区域以外的资源也是可行的,但我们不鼓励这么做——尽管对于I/O引脚来说,这样做一般是无法避免的。在寻找适当区域时,还要牢记的是这个FPGA区域有可能会妨碍FPGA设计中非时序关键部分的资源。
当您已经对FPGA进行分区,且已经找到了这些分区的适当区域之后,下一步就是使用一个空的(黑盒子)低优先级分区实现高优先级分区。得到的比特流含有很多针对未使用资源的配置帧。您可以删除这些帧,以便得到针对初步配置高优先级分区的有效部分比特流。 低优先级分区的实现
为了创建低优先级的部分比特流,首先,您要创建含有这两个分区(即高优先级分区和低优先级分区)的完整FPGA设计的实现。从以前的实现中导入高优先级分区,从而保证其实现方法与原来的实现方法相同。
对于Virtex-6器件而言,部分重配置(PR)流程可用于所有上述的实现。这样,就会自动得到针对低优先级分区的部分比特流。由于Spartan-6器件系列不支持PR流程,在实现针对Spartan-6设计的Fast Startup时,我们使用了针对差异化的部分重配置的BitGen选项,以获得低优先级分区的部分比特流。图3给出了该工具流程的高层概览。
图3 Fast Startup工具流程 实验与结果
为了在硬件中验证Fast Startup配置方法,我们的研究小组在一块Virtex-6ML605板和一块Spartan-6 SP605板上实现了这种方法。
Virtex-6实现的应用背景源自视频领域。用户接通视频系统电源时,他们总是希望立刻就看到系统有所响应,而不用等待数秒。因此,在图4所示的系统中,一个配备了TFT控制器的高优先级子系统可以迅速点亮TFT屏幕。对于其他低优先级应用,即第二个设计提供了对以太网内核、UART和硬件计时器的控制和访问。