1、论文阅读理论方法总结Yongfu feng1 FPGA 动态可重构基础理论严格来讲,系统重构的概念可分为静念系统重构和动态系统重构。静态系统重构是指目标系统的逻辑功能静态重载,即 FPGA 芯片功能在外部逻辑的控制下,通过存贮于存贮器中不同的目标系统数据重新下载,而实现芯片逻辑功能的改变。也就是指系统中 PLD 逻辑的静态重载,在系统空闲期间通过各种方式进行在线编程,而不是在其他部分动态运行时重载。1. 1 动态可重构概念及原理动态重构系统概念的提出早于 FPGA 动态可重构技术的提出。动态重构系统指对于时序变化的数字逻辑系统,其时序逻辑的发生,不是通过调用芯片内不同区域、不同逻辑资源来组合而
2、成的,而可通过对具有专门缓存逻辑资源的FPGA,进行局部的和全局的芯片逻辑的动态重构而快速实现。也就是指在系统实时运行当中对 FPGA 的逻辑功能实时地进行动态配置,能够只对其内部需要修改的逻辑单元进行重新配置,没有被修改的逻辑单元将不受影响,正常工作。一般由传统处理器执行主程序,特定的任务赋给以 FPGA 为基础的协处理器以加速它们的执行。事实上,在大部分处理时间内,只有相对较小的一部分用来计算内部任务,而硬件可以显著加速执行的时间。在重构的过程中,根据需要,任务可以交换进入协处理器进行处理。所谓 FPGA 动态可重构技术,是指基于静态存储器(SRAM)编程和专门结FPGA,在一定的控制逻辑
3、的驱动下,不仅能实现系统重新配置电路功能,还能对芯片逻辑功能实现系统的高速动态变换。大多数 FPGA 都是基于 SRAM 查找表结构,它们一般只适用于静态重构,向 SRAM 一次下载全部配置数据而设定FPGA 的逻辑功能。根据 FPGA 的、配置方式等不同,全部重构时间为几毫秒到几秒不等。过去大家普遍进行重构研究的 FPGA 主要有,Xilinx 的 XC6200 系列、以及 Atmel 的 AT6000 等。它们也是基于 SRAM 结构,但是 SRAM 的各单元能够单独访问配置,分重构。它们的功能互不影响,因而具有部分重构的特征。这样做的优点显但也会付出增大硬件电路规模和功耗的代价。要最终实
4、现电子系统的完全实构,应采用结构上具有动态部分重构功能的 FPGA 器件,如现在Xilinx 的 VirtexII 系列。从动态可重构的特征可以引出一种新的设计思想:1,以小规模硬件逻辑资源来实现大规模系统时序功能,将传统设计的空间分布的硬件逻辑,分为器件外部特征不变,而内部逻时间上交替变换,并共同在时问空间上构成系统整体逻辑功能。FPGA 动态可重构技术主要特征是将整体按功能或按时序分解为不同的组合,并根据实际需要,分时对芯片进行动态重构,以较少的硬件资源,去实现较大的时序系统整体功能。图 1 给出了一种典型的 FPGA 动态可重构原理示意图。从图1 中可以看出,在外部逻辑的控制下,可以实时
5、动态地对芯片逻辑实现全部重构或局部重构,通过控制布局、布线的资源,来实现系统的动态重构。图 1.1 典型的 FPGA 动态可重构原理图要使 FPGA 有效地实现实时系统动态重构, FPGA 结构上必须满足以下要求:1,不仅具有可重新编程能力,同时可动态进行系统资源地重新配置,而不会破坏器件中全局或局部逻辑操作能力。2,FPGA 内部配置信息对称,即在任何时刻、任何通用的基本逻辑功能可以配置于器件地任何一个位置,运行用简单模型组合去实现设计中的复杂功能。1.2 FPGA 配置架构FPGA 的配置文件通过数据总线传输到 FPGA 的数据缓冲区,下载处理器处理缓冲区中每一帧配置数据,并把其下载到 F
6、PGA 的配置 RAM 中,也就是逻辑配置层。逻辑配置层的中 RAM 的取值决定了 FPGA 的功能。也就是说,在常见的 FPGA 中,其配置电路的结构原理图如图 12 FPGA 配置电路结构图从上图中反映的配置过程我们不难发现,制约 FPGA 配置速度的因素有两个;一个是配置数据的下载速度;一个是 FPGA 内部的数据处理速度。FPGA 的配置速度是动态可重构系统中一个非常重要的指标,快速高效的下电路设计是可重构系统的一个关键问题。一般说来,加快重配置过程方法有三种:第一、优化 FPGA 配置电路总线,使配置文件能够以更快的速度下载到 FPGA配置单元当中;第二、减小配置文件,在配置速度不变
7、的情况下这也是一个十分有效的办法;第三、优化 FPGA 的重配置流程,简化 FPGA 的配置步骤,减少不必要的时间开销。二动态部分可重构的两种模式Xilinx Virtex 系列一个最重要的特性就是动态可重构。当器件的同一个区域要载入不同的设计功能并且又不需要重新配置整个电路,也不影响其他电路的行时就需要部分动态可重构。这样既可以降低电路能量消耗又可以提高板子利率、加快下载速度。Virtex 器件的有效部分动态可重构可以使用Selectmap 模式或者 Boundary scan(JTAG)模式下载。不需要重新配置器件也不需要下载完整的配置,新的据只需下载到器件的可重构部分。对于目前的 FPG
8、A器件来说,数据是以栅(column)为基础下载,最小的可下载单元是一帧(frame)的配置比特流,它据目标器件的不同而有不同的大小。FPGA 的动态可重构有两种不同的方式: 基于模块(Module-based)的部分可重构。 基于差异(Difference-based)的部分动态可重构。21 基于模块的部分可重构部分可重构定义了一些特殊的区域,这些区域可以在器件的其他部分还在运行的情况下进行重构,这些特殊区域称作可重构区域。基于模块的部分可重构就是将电路功能划分成一个个的模块,这些模块包括可重构模块(可以实现重构的特殊区域)和固定模块(功能不变不能实现重构的区域)。可重构模块具有以下的一些特
9、性:1 重构模块的高度是整个器件的高度。2 重构模块的宽度最小可以是四个 slice 最大可以到整个器件的宽度,但必须以四的整数倍的 slice 增加。3 重构模块放置的水平坐标必须是四的整数倍的 slice 的边界,例如:左边边界可以放置在 x-0,4,8,4 模块宽度范围内包括的所有逻辑资源都被看作是可重构模块的一部分,包括 slice、TBUF、RAM 块、乘法器、lOB 和布线资源。5 时钟逻辑和可重构模块是相互分离的,时钟和比特流是相互独立的。6 可重构模块上部和下部的 IOB 是可重构模块资源的一部分。7 如果一个可重构模块贯穿了整个板子的左部和右部,那么每一边的 IOB 都是可重
10、构模块资源的一部分。8 为了降低设计难度,要尽量减少可重构模块的个数(理想状况下,如果可能的话,最好只有一个可重构模块),所以说 slice 的数目能被四整除是可重构模块区域的唯一约束。9 可重构模块的边界不能改变。任何一个可重构模块的位置、所占据的区域都是固定的。10可重构模块和其他模块之间的通信(包括可重构模块和普通固定模块之间、可重构模块和可重构模块之间)都是通过使用特殊的总线宏,如图 21。图 21 线宏用作模块内部通信11 为了保证重构的时候实现合适的操作,需要外在的握手逻辑。在可重构过程之前和之后,要保存可重构模块内的存储元素的状态。如图 22 所示,是一个具有两个部分可重构模块的
11、设计,各模块间都是通过总线宏来进行通信的。图 22 具有两个可重构模块的设计布局图图 23 可重构模块的设计流程图图 53 基于模块化的配置文件生成流程基于模块化的配置文件生成流程与模块化设计方法紧密联系,并要求系统是按照模块化设计方法开发的。在模块化设计方法中,系统首先被划分为一些具有特定功能、相互之间比较独立的模块,并且模块之间的接口和互连关系已经被预先定义好。随后,各个模块被不同的开发人员并行地设计并实现。最后,各个模块按照最初定义的互连关系被组装起来,形成一个完整的系统。当需要动态改变某个模块的功能时,开发人员仍然需要按照模块化设计方法的流程得到该模块的布局布线文件,但是不需要进行模块
12、的组装工作。取而代之的是:直接根据布局布线文件得到该模块所对应的硬件区域的配置数据文件。21.1 总线宏的通讯为了促进可重构模块之间的通信,需要保证穿过可重构模块边界的布线资源是完全固定而且必须是静态的,这就需要一种特殊的总线宏。总线宏的主要作用足保证穿过可重构模块边界的布线资源固定,使可晕构模块边界的布线资源不被改变。目前使用如图 2.3 就是所需的这种总线宏:其中,左边的 A 是一个模块,右边的 B 是另一个模块,A 或者 B 是可重构模块,或者 AB 全是可重构模块。A 和 B 中间的总线宏,就是支持 AB 之间通信的特殊总线宏。它保证 AB间布线资源的不变性。也就是说当一个模块进行重构
13、时模块内部信号用到的布线资源不能改变。如图 23,总线宏是两个模块问的一个固定的布线桥。它是一个事先已经布线好的用来确定精确布线轨道的宏,并且在编辑改变的时候保持不变。对于每个不同的设计应用来说,它是一个绝对固定不变的总线宏。目前使用的总线宏由八个三态缓冲器(TBUF)组成,能够实现 4 个比特宽度的数据通路。其如图 24。图 2.4 总线宏图 2.5 总线宏的物理执行总线宏允许信息双向传递,一个比特的信息使用一个三态缓冲器的长线。Virtex 器件的每一行支持一个总线宏的四个比特。总线宏的位置精确的跨骑在模块 A 和模块 B 之间,其中四栅三态缓冲器在 A 内,另外四栅三态缓冲器在 B内。由
14、三态缓冲器长线输出所组成的固定桥确保两个模块问固定的通信。总线宏的信息通讯是双向的,既可以从左到右也可以从右到左。但是对于这个设计来说,一旦信息通信方向确定以后就不能再改变。21.2 总线宏的基本设计方式总线宏的基本设计方式为:1) 在设计初期将可重构硬件资源规划好,重构模块和固定模块划分好.2) 在模块功能划分好后,将总线宏的位置锁定在固定模块和重构模块的边界.3) 总线宏的设计工具是使用 FPGA 底层编辑器 FPGA Editor。FPGA Editor 是一个手工布局布线设计工具,需要设计者具有一定设计经验才能完成设计,单是 FPGA Editor 的使用灵活性也更高。通过 FPGA
15、Editor 可以编辑或者查看可配置逻辑功能块(CLB),IO 功能块等一些 FPGA 内部的基本单元。使用总线宏约束重构模块和固定模块之间的布线资源使其不被改变。总线宏的设计需要消耗额外的硬件资源,造成一些资源浪费;另外总线宏固定了重构模块和固定模块之间的布线,即固定模块之间的通信,模块之间不再可以进行任意通信,这在一定程度市内过降低了部分重构系统在实现上的灵活性。但是在当前技术条件下,基于模块的部分重构设计使用总线宏的通讯机制是目前最佳的解决方案。22 基于差异的部分可重构基于差异的部分可重构只是比较重构前后的电路差别,产生一个只包含重构前后设计差别的比特流。可以使用两种方法来改变设计、产
16、生重构酊后的差别。分别是前端改变(HDL 描述)和后端改变(NCD 文件)。对于前端改变来说,设计必须重新综合,创建一个新的布局布线好的 NCD 文件。而对于后端设计来说只需要改变 NCD 文件,不必重新综合,可以通过 FPGA Editor 工具来修改。使用 BitGen 就可以生成电路可重构部分内开关状态差别的可下载差异文件。可重构前后开关配置的改变非常迅速比重新配置整个电路要快很多,就像差异比特流比整个电路的比特流小很多一样。差异比特流很小,所以能够迅速而简单的下载到电路中。如果设计中可重构的逻辑块很大、功能很复杂,则需要使用基于模块的部分可重构。然而,有很多电路只需要修改比较少的内容,
17、或许只需要修改一个 LUT 内容、BRAM 的内容或者一个 I/O 口等,这种类型的修改可以轻松的通过 Xilinx FPGA Editor 修改布局布线后的 NCD 文件来实现。一旦修改完成后,利用 BitGen 来产生重构前后差异的下载文件,即可实现部分重构。然而,要完成以上操作要很好的理解如何使用 FPGAEditor 来修改逻辑以及 BitGen 相关选项的选择。在 FFGA Editor 中可以进行三种方式的修改: 改变 I/O 标准 改变 BRAM 内容 改变 LUT 设计。其中可以选择的最小逻辑元素是 slice。使用 FPGAEditor 修改设计时,首先要打开 NCD 文件,
18、看到逻辑块后找到可选择的最小逻辑元素 slice,打开片 slice的结构图窗口。要修改 BRAM 的内容时,首先打开 NCD 文件找到 BRAM 后,打开BRAM 的结构图可进行 BRAM 修改。同样对 I/O 标准的修改也一样,打开 NCD 文件找到 I/O 后,打开 I/O 构图进行 I/O 标准的修改。以上三种修改都符合有效的重构流程。除了这三种方式还有其他的修改方式,比如:颠倒极性、振荡器的初始化和重新设置值、上拉、下拉外部管脚或者RAM 写方式。所有这些特性都能够在实际的 slice、RAM 逻辑块或 IOB 中修改。但是,最好不要进行任何有可能影响布线或者产生内部连接冲突的修改行
19、为。图 2.6 计差异的设计流程23 基于模块与基于差异部分的可重构比较基于模块的部分态可重构将设计分解成模块,对一个设计来说,每个模块都是完全独立的。如模块之间需要交流通信,就需要一种特殊的总线宏,它允许信号穿过部分可重的边界。总线宏为设计的内部通信提供了一个固定的总线。每次实现部分可重时,总线宏就用来确定模块间的布线通道没有改变,保证正确的连接。基于差异的部分可重构只是基于比较重构前后的电路差别,产生一个只包含重构前后设计差别的比特流。差异比特流比整个电路的比特流小很多,所以能够迅速下载到电路中。但是如果电路功能比较复杂则差异文件会非常庞大,所以基于差异的部分可重构只适用于功能简单的电路,
20、对于功能复杂的电路需要使用基于模块的部分可重构。三动态重构 FPGA 电路设计流程静态重构 FPGA 电路设计是一种自顶向下的设计流程,先进行行为级电路描述,然后转化为寄存器传输级的逻辑电路,然后结合 FPGA 器件厂家的工艺库,经过逻辑综合生成网表文件,然后进行布局、布线并通过相应软件产生 FPGA 的配置文件,最后将配置文件下载至 FPGA 中,即完成 FPGA 的整个电路设计,还要在各个不同层次进行仿真验证,以保证设计的正确性。动态重构 FPGA 系统的设计流程与静态重构 FPGA 不同,在逻辑设计阶段针对同一个器件设计多个功能电路 Fl,F2,Fn,这些电路的配置文件都预先生成好,存储
21、在存储器件中,称为重构件。根据电路的调用顺序来定义重构状态图。在系统运行过程中,根据重构状态图,结台系统的当前状态,将相应的重构件配置到 FPGA 中,实现某一时刻所需的硬件功能。重构件可以是某个特定的算法电路,比如 FIR,IIR,也可以仅仅是完成输入、输出间的某种特定连接,也可以实现其他电路功能。3.1 动态重构 FPGA 系统的设计流程动态重构 FPGA 系统的设计流程由三个阶段组成:1) 设计阶段:需要经过逻辑设计、器件综合、器件布局布线等步骤,并在不同层次进行仿真验证,保证设计的 J 下确性,为了尽可能减小重构件的数据量,在逻辑设计和器件布局布线过程中,要采用一些特殊的设计方法,并需
22、要更为详尽的考虑和控制。2) 编译阶段:动态重构 FPGA 系统预先生成多个重构件,构成一个重构件数据库,生成重构状态图,对各重构件的载入顺序进行定义,重构状态图中的节点代表目前系统 FPGA 所处的配件状态,节点间的有向边则代表重构件的下载操作。3) 运行阶段:主要是对动态重构系统的重构操作进行管理与监控,根据系统的运行状态和重构状态图,进行重构件的调用和下载操作,实现 FPGA 器件功能的动态重构。因为 FPGA 动态可重构在实现小型化、集成化和高可靠的同时,减少了风险,降低了成本,缩短了周期,提高了硬件的利用率,能在广泛的应用项目中发挥其优势,具有极强的竞争能力。所以 FPGA 动态可重
23、构技术已引起研究领域和应用领域的广泛关注和兴趣。3.2 基于模块的局部动态可重构设计流程概述基于模块的部分可重构设计允许设计者独立综合每个模块,全部综合完毕后有模块一起编译,这种并行方法即节省时间又允许每个模块独立终止运于模块的部分可重构设计还需要设计者确保模块分区正确,并且在最终编够一起正常工作。这种模块设计最好用做可以分区成自我控制模块的大型分区后的模块数量越少越好。图 31 基于模块的部分可重构流程基于模块的部分可重构流程如图 31 所示,该设计流程主要包括两个阶段: 第一阶段:模块设计入口(模块顶层设计)和模块设计综合。 第二阶段:模块设计实现(初始预算、模块实现和最终编译) 。这两个
24、阶段设计,可以产生整个电路功能和动态可重构部分的下载文件,该文件下载到实验板 Virtex2 中,并通过内部控制器对内部时合理控制,就可实现动态可重构,并且能够通过实验板观察相关结果。3.2.1 模块设计入口和综合在这一阶段,要用硬件描述语言实现电路功能并综合,要同时做顶层设计和设计。 顶层设计:在进行模块设计执行阶段之前,设计者要首先完成顶层设计的设计入口和综合。 模块设计:在激活模块执行阶段之前。设计者要先完成该模块的设计入口和综合工作,各个模块的综合可以并行进行。设计者使用 HDL 语言创建一个顶层设计文件并对其综合。顶层设计包括所有全局逻辑,I/O 和所有的模块。这些模块被例示为“黑匣
25、”结构,只有端口、指向、连接模块的信号和 IO 端口。这步是在模块设计运行之前所必需的。设计者要使用 HDL 语言创建每个独立的模块设计并练合这些设计,但是这一步不一定必须在模块设计运行之前。可以在设计模块的同时进行初始是要开始激活模块运行之时,一定要将独立模块设计综合完毕。可以使用文字输入工具进行 Vedlog 或者 VHDL 语吉的功能编写。为了综合计,可以使用 Xilinx 的工具或者 Xilinx 支持的第三方工具。比如用 XilinxnthesisTechnology(XST)进行综合,产生 NGC 格式的网表,或者使用 Synplify行综合,产生 EDIF 格式的网表。模块设计入
26、口和综合的流程如图 42:3.3 基于 FPGA 动态可重构的优化算法331 遗传算法遗传算法是由美国 Michigan 大学的 JHolland 教授于 1975 年首先提出的。他是基于进化论的原理发展起来的一种广为应用的、高效的随机搜索与优化的方法。遗传算法是模拟生物进化现象(自然选择、交叉、变异)的一种概率搜索和最优化方法,用于解决不连续优化问题。它是一类借鉴生物界的进化规律(适者生存、优胜劣汰遗传机 SzJ)演化而来的随机化搜索方法,是模拟生物遗传现象的工程模型。将遗传算法与可编程逻辑器件结合,用算法控制改变芯片结构,使其形成各式各样的逻辑电路,来实现遗传演化中的各类操作,是一个很有前
27、途的领域。随着 FPGA 芯片的发展,大群体规模的并行演化模式均可得以实现。332 蚁群算法算法蚁群算法是由意大利学者 Dorigo 等人于 20 世纪 90 年代初期通过模拟自然界中蚂蚁集体寻径的行为而提出的一种基于种群的启发式仿生进化系统。蚁群算法包含两个基本阶段:适应阶段和协作阶段。在适应阶段,各候选解根据积累的信息不断调整自身结构。在协作阶段,候选解之间通过信息交流,以期望产生性能更好的解,这类似于学习自动机的学习机制。蚁群算法最早成功应用于解决著名的旅行商问题,该算法采用了分布式正反馈并行计算机制,易于与其他方法结合,而且具有较强的鲁棒性。蚁群算法创立十多年来,无论在算法理论还是在算法应用方面都取得了很多突破性研究进展。作为一个前沿性的热点研究领域,蚁群算法已引起越来越多国内外研究者的关注,近五年内其研究人员和研究成果均成几何级数增长,其应用范围几乎涉及到各个优化领域,而且还出现了蚁群算法仿生硬件,这种新兴的仿生优化算法已经显示出强大的生命力和广阔的发展前景。