动态可重构基本理论Word下载.docx
《动态可重构基本理论Word下载.docx》由会员分享,可在线阅读,更多相关《动态可重构基本理论Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
图1.1典型的FPGAi态可重构原理图
要使FPGAt效地实现实时系统动态重构,FPGA吉构上必须满足以下要
求:
1,不仅具有可重新编程能力,同时可动态进行系统资源地重新配置,而不会破坏器件中全局或局部逻辑操作能力。
2,FPG咕部配置信息对称,即在任何时刻、任何通用的基本逻辑功能可以配置于器件地任何一个位置,运行用简单模型组合去实现设计中的复杂功能。
3.2FPGA配置架构
FPGA勺配置文件通过数据总线传输到FPGA勺数据缓冲区,下载处理器处理缓冲区中每一帧配置数据,并把其下载到FPGA勺配置RAMfr,也就是逻辑配置层。
逻辑配置层的中RAM勺取值决定了FPGA勺功能。
也就是说,在常见的FPGAK其配置电路的结构原理图如
逻辑资源层(FPGA功能实现)
资源配置层'
1号港
配置数据分配器一]荔嬴
图1.2FPGA配置电路结构图
从上图中反映的配置过程我们不难发现,制约FPGAI已置速度的因素有两个;
一个是配置数据的下载速度;
一个是FPG秋部的数据处理速度。
FPGA勺配置速度是动态可重构系统中一个非常重要的指标,快速高效的下电路设计是可重构系统的一个关键问题。
一般说来,加快重配置过程方法有三种:
第一、优化FPGAE置电路总线,使配置文件能够以更快的速度下载到FPGA
配置单元当中;
第二、减小配置文件,在配置速度不变的情况下这也是一个十分有效的办法;
第三、优化FPGA勺重配置流程,简化FPGA勺配置步骤,减少不必要的时间开销。
.动态部分可重构的两种模式
XilinxVirtex
系列一个最重要的特性就是动态可重构。
当器件的同一个
区域要载入不同的设计功能并且又不需要重新配置整个电路,也不影响其他电路
的行时就需要部分动态可重构。
这样既可以降低电路能量消耗又可以提高板子利率、加快下载速度。
Virtex器件的有效部分动态可重构可以使用Selectmap模
式或者Boundaryscan(JTAG)模式下载。
不需要重新配置器件也不需要下载完整的配置,新的据只需下载到器件的可重构部分。
对于目前的FPGAS件来说,数
据是以栅(column)为基础下载,最小的可下载单元是一帧(frame)的配置比特流,它据目标器件的不同而有不同的大小。
FPGA勺动态可重构有两种不同的方式:
基于模块(Module-based)的部分可重构。
基于差异(Difference-based)的部分动态可重构。
2.1基于模块的部分可重构
部分可重构定义了一些特殊的区域,这些区域可以在器件的其他部分还在运行的情况下进行重构,这些特殊区域称作可重构区域。
基于模块的部分可重构就是将电路功能划分成一个个的模块,这些模块包括可重构模块(可以实现重构
的特殊区域)和固定模块(功能不变不能实现重构的区域)。
可重构模块具有以下的一些特性:
1.重构模块的高度是整个器件的高度。
2.重构模块的宽度最小可以是四个slice最大可以到整个器件的宽度,但必须以四的整数倍的slice增加。
3.重构模块放置的水平坐标必须是四的整数倍的slice的边界,例如:
左边边
界可以放置在x--0,4,8,?
?
4.模块宽度范围内包括的所有逻辑资源都被看作是可重构模块的一部分,包括
slice、TBUFRAMfe、乘法器、lOB和布线资源。
5.时钟逻辑和可重构模块是相互分离的,时钟和比特流是相互独立的。
6.可重构模块上部和下部的IOB是可重构模块资源的一部分。
7.如果一个可重构模块贯穿了整个板子的左部和右部,那么每一边的IOB都是
可重构模块资源的一部分。
8.为了降低设计难度,要尽量减少可重构模块的个数(理想状况下,如果可能的话,最好只有一个可重构模块),所以说slice的数目能被四整除是可重构模
块区域的唯一约束。
9.可重构模块的边界不能改变。
任何一个可重构模块的位置、所占据的区域都
是固定的。
10.可重构模块和其他模块之间的通信(包括可重构模块和普通固定模块之间、
可重构模块和可重构模块之间)都是通过使用特殊的总线宏,如图2.1。
图2.1线宏用作模块内部通信
11.为了保证重构的时候实现合适的操作,需要外在的握手逻辑。
在可重构过程之前和之后,要保存可重构模块内的存储元素的状态。
如图2,2所示,是个具有两个部分可重构模块的设计,各模块间都是通过总线宏来进行通信的。
图2.2具有两个可重构模块的设计布局图
图2.3可重构模块的设计流程图
图5.3基于模块化的配置文件生成流程
基于模块化的配置文件生成流程与模块化设计方法紧密联系,并要求系统是按照模块化设计方法开发的。
在模块化设计方法中,系统首先被划分为一些具有特定功能、相互之间比较独立的模块,并且模块之间的接口和互连关系已经被预先定义好。
随后,各个模块被不同的开发人员并行地设计并实现。
最后,各个
模块按照最初定义的互连关系被组装起来,形成一个完整的系统。
当需要动态改变某个模块的功能时,开发人员仍然需要按照模块化设计方法的流程得到该模块的布局布线文件,但是不需要进行模块的组装工作。
取而代之的是:
直接根据布局布线文件得到该模块所对应的硬件区域的配置数据文件。
2.1.1总线宏的通讯
为了促进可重构模块之间的通信,需要保证穿过可重构模块边界的布线资源是完全固定而且必须是静态的,这就需要一种特殊的总线宏。
总线宏的主要作用足保证穿过可重构模块边界的布线资源固定,使可晕构模块边界的布线资源不被改变。
目前使用如图2.3就是所需的这种总线宏:
其中,左边的A是一个模块,右边的B是另一个模块,A或者B是可重构模块,或者AB全是可重构模块。
A和B中间的总线宏,就是支持AB之间通信的特殊总线宏。
它保证AB间布线资源的不变性。
也就是说当一个模块进行重构时模块内部信号用到的布线资源不能改变。
如图2.3,总线宏是两个模块问的一个固定的布线桥。
它是一个事先已经布线好的用来确定精确布线轨道的宏,并且在编辑改变的时候保持不变。
对于每个不同的设计应用来说,它是一个绝对固定不变的总线宏。
目前使用的总线宏由八个三态缓冲器(TBUF)组成,能够实现4个比特宽度的数据通路。
其如图2.4。
AB
IOB
K>
B
I0B
B|
IOEL
toe
t
!
。
百
BRAM
CLB
f
BflAM
1OB
CLS
tXBft_.
CL6
国后M
A
EXB
1O6
n□
Ju
1Oe
E
ELB
CEJB
BAAM
ioB
।
Q
&
ii
io
106
108
JOB
ton
EOB
图2.4总线宏
图2.5总线宏的物理执行
总线宏允许信息双向传递,一个比特的信息使用一个三态缓冲器的长线。
Virtex器件的每一行支持一个总线宏的四个比特。
总线宏的位置精确的跨骑在模块A
和模块B之间,其中四栅三态缓冲器在A内,另外四栅三态缓冲器在B内。
由三态缓冲器长线输出所组成的固定桥确保两个模块问固定的通信。
总线宏的信息通
讯是双向的,既可以从左到右也可以从右到左。
但是对于这个设计来说,一旦信息通信方向确定以后就不能再改变。
2.1.2总线宏的基本设计方式
总线宏的基本设计方式为:
1)在设计初期将可重构硬件资源规划好,重构模块和固定模块划分好.
2)在模块功能划分好后,将总线宏的位置锁定在固定模块和重构模块的边界.
3)总线宏的设计工具是使用FPGAS层编辑器FPGAEditor0FPGAEditor是一个手工布局布线设计工具,需要设计者具有一定设计经验才能完成设计,单是FPGAEditor的使用灵活性也更高。
通过FPGAEditor可以编辑或者查看可配置逻辑功能块(CLB),I/O功能块等一些FPG秋部的基本单元。
使用总线宏约束重构模块和固定模块之间的布线资源使其不被改变。
总线宏的设
计需要消耗额外的硬件资源,造成一些资源浪费;
另外总线宏固定了重构模块和固定模块之间的布线,即固定模块之间的通信,模块之间不再可以进行任意通信,这在一定程度市内过降低了部分重构系统在实现上的灵活性。
但是在当前技术条件下,基于模块的部分重构设计使用总线宏的通讯机制是目前最佳的解决方案。
2.2基于差异的部分可重构
基于差异的部分可重构只是比较重构前后的电路差别,产生一个只包含重构前后设计差别的比特流。
可以使用两种方法来改变设计、产生重构酊后的差别。
分别是前端改变(HDL描述)和后端改变(NCD文件)。
对于前端改变来说,设计必须重新综合,创建一个新的布局布线好的NCDC件。
而对于后端设计来说只需要改变NCDi件,不必重新综合,可以通过FPGAEditor工具来修改。
使用BitGen就可以生成电路可重构部分内开关状态差别的可下载差异文件。
可重构前后开关
配置的改变非常迅速比重新配置整个电路要快很多,就像差异比特流比整个电路
的比特流小很多一样。
差异比特流很小,所以能够迅速而简单的下载到电路中。
如果设计中可重构的逻辑块很大、功能很复杂,则需要使用基于模块的部分可重构。
然而,有很多电路只需要修改比较少的内容,或许只需要修改一个LUT内容、BRAM勺内容或者一个I/O口等,这种类型的修改可以轻松的通过XilinxFPGAEditor修改布局布线后的NCDt件来实现。
一旦修改完成后,利用BitGen来产生重构前后差异的下载文件,即可实现部分重构。
然而,要完成以上操作要很好的理解如何使用FPGAEditor来修改逻辑以及BitGen相关选项的选择。
在FFGAEditor中可以进行三种方式的修改:
改变I/O标准
改变BRAMJ容
改变LUT设计。
其中可以选择的最小逻辑元素是slice。
使用FPGAEditor修改设计时,首先要打开NCDX件,看到逻辑块后找到可选择的最小逻辑元素slice,打开片slice
的结构图窗口。
要修改BRAM勺内容时,首先打开NCD文件找到BRAMI,打开BRAM勺结构图可进行BRA唯改。
同样对I/O标准的修改也一样,打开NCE&
:
件找到I/O后,打开I/O构图进行I/O标准的修改。
以上三种修改都符合有效的重构流程。
除了这三种方式还有其他的修改方式,比如:
颠倒极性、振荡器的初始化和重新设置值、上拉、下拉外部管脚或者RAM
写方式。
所有这些特性都能够在实际的slice、RA飕辑块或IOB中修改。
但是,最好不要进行任何有可能影响布线或者产生内部连接冲突的修改行为。
图2.6计差异的设计流程
2.3基于模块与基于差异部分的可重构比较
基于模块的部分态可重构将设计分解成模块,对一个设计来说,每个模块都是完全独立的。
如模块之间需要交流通信,就需要一种特殊的总线宏,它允许信号穿过部分可重的边界。
总线宏为设计的内部通信提供了一个固定的总线。
每次实现部分可重时,总线宏就用来确定模块间的布线通道没有改变,保证正确的连接。
基于差异的部分可重构只是基于比较重构前后的电路差别,产生一个只包含
重构前后设计差别的比特流。
差异比特流比整个电路的比特流小很多,所以能够迅速下载到电路中。
但是如果电路功能比较复杂则差异文件会非常庞大,所以基于差异的部分可重构只适用于功能简单的电路,对于功能复杂的电路需要使用基于模块的部分可重构。
三.动态重构FPGAt路设计流程
静态重构FPGA1路设计是一种自顶向下的设计流程,先进行行为级电路描述,然后转化为寄存器传输级的逻辑电路,然后结合FPG端件厂家的工艺库,
经过逻辑综合生成网表文件,然后进行布局、布线并通过相应软件产生FPGA勺
配置文件,最后将配置文件下载至FPG冲,即完成FPGA勺整个电路设计,还要在各个不同层次进行仿真验证,以保证设计的正确性。
动态重构FPG碌统的设计流程与静态重构FPGA^同,在逻辑设计阶段针对同一个器件设计多个功能电路Fl,F2,?
Fn,这些电路的配置文件都预先生成好,存储在存储器件中,称为重构件。
根据电路的调用顺序来定义重构状态图。
在系统运行过程中,根据重构状态图,结台系统的当前状态,将相应的重构件配置到FPG/fr,实现某一时刻所需的硬件功能。
重构件可以是某个特定的算法电路,比如FIR,IIR,也可以仅仅是完成输入、输出间的某种特定连接,也可以实现其他电路功能。
2.1动态重构FPG麻统的设计流程
动态重构FPG碌统的设计流程由三个阶段组成:
1)设计阶段:
需要经过逻辑设计、器件综合、器件布局/布线等步骤,并在不同层次进行仿真验证,保证设计的J下确性,为了尽可能减小重构件的数据量,在逻辑设计和器件布局/布线过程中,要采用一些特殊的设计方法,并需要更为详尽的考虑和控制。
2)编译阶段:
动态重构FPG碌统预先生成多个重构件,构成一个重构件数据库,生成重构状态图,对各重构件的载入顺序进行定义,重构状态图中的节点代表目前系统FPG颜处的配件状态,节点间的有向边则代表重构件的下载操作。
3)运行阶段:
主要是对动态重构系统的重构操作进行管理与监控,根据系统的运行状态和重构状态图,进行重构件的调用和下载操作,实现FPG端件功能的动态重构。
因为FPGAi态可重构在实现小型化、集成化和高可靠的同时,减少了风险,降低了成本,缩短了周期,提高了硬件的利用率,能在广泛的应用项目中发挥其优势,具有极强的竞争能力。
所以FPGAS态可重构技术已引起研究领域和应用领域的广泛关注和兴趣。
2.2基于模块的局部动态可重构设计流程概述
基于模块的部分可重构设计允许设计者独立综合每个模块,全部综合完毕后有模块一起编译,这种并行方法即节省时间又允许每个模块独立终止运于模块的
部分可重构设计还需要设计者确保模块分区正确,并且在最终编够一起正常工作。
这种模块设计最好用做可以分区成自我控制模块的大型分区后的模块数量越少越好。
•Mapping
*Phcemenl
.Rouling
FinalAssembfy
(Top-Lev^Design
andModule)
Mapping,Plac&
nrwnt*Routing
Downbadtoai
XilinxDevice
图3.1基于模块的部分可重构流程
基于模块的部分可重构流程如图3,1所示,该设计流程主要包括两个阶段:
第一阶段:
模块设计入口(模块顶层设计)和模块设计综合。
第二阶段:
模块设计实现(初始预算、模块实现和最终编译)。
这两个阶段设计,可以产生整个电路功能和动态可重构部分的下载文件,该文件下载到实验板Virtex2中,并通过内部控制器对内部时合理控制,就可实现动态可重构,并且能够通过实验板观察相关结果。
2.2.1模块设计入口和综合
在这一阶段,要用硬件描述语言实现电路功能并综合,要同时做顶层设计和设计。
顶层设计:
在进行模块设计执行阶段之前,设计者要首先完成顶层设计的设计入口和综合。
模块设计:
在激活模块执行阶段之前。
设计者要先完成该模块的设计入口和综合工作,各个模块的综合可以并行进行。
设计者使用HDL语言创建一个顶层设计文件并对其综合。
顶层设计包括所有全局逻辑,I/O和所有的模块。
这些模块被例示为“黑匣”结构,只有端口、指向、连接模块的信号和I/O端口。
这〜步是在模块设计运行之前所必需的。
设计者要使用HDL语言创建每个独立的模块设计并练合这些设计,但是这一步不一定必须在模块设计运行之前。
可以在设计模块的同时进行初始是要开始激活模块运行之时,一定要将独立模块设计综合完毕。
可以使用文字输入工具进行Vedlog或者VHD印吉的功能编写。
为了综合
计,可以使用Xilinx的工具或者Xilinx支持的第三方工具。
比如用XilinxnthesisTechnology(XST)进行综合,产生NGCS式的网表,或者使用Synplify行综合,产生EDIF格式的网表。
模块设计入口和综合的流程如图4.2:
2.3基于FPGAS态可重构的优化算法
3.1遗传算法
遗传算法是由美国Michigan大学的J.Holland教授于1975年首先提出的。
他是基于进化论的原理发展起来的一种广为应用的、高效的随机搜索与优化的方
法。
遗传算法是模拟生物进化现象(自然选择、交叉、变异)的一种概率搜索和最优化方法,用于解决不连续优化问题。
它是一类借鉴生物界的进化规律(适者生
存、优胜劣汰遗传机SzJ)演化而来的随机化搜索方法,是模拟生物遗传现象的工程模型。
将遗传算法与可编程逻辑器件结合,用算法控制改变芯片结构,使其形成各式各样的逻辑电路,来实现遗传演化中的各类操作,是一个很有前途的领域。
随着FPGAK片的发展,大群体规模的并行演化模式均可得以实现。
3.3.2蚁群算法算法
蚁群算法是由意大利学者Dorigo等人于20世纪90年代初期通过模拟自然界中蚂蚁集体寻径的行为而提出的一种基于种群的启发式仿生进化系统。
蚁群算法包
含两个基本阶段:
适应阶段和协作阶段。
在适应阶段,各候选解根据积累的信息不断调整自身结构。
在协作阶段,候选解之间通过信息交流,以期望产生性能更好的解,这类似于学习自动机的学习机制。
蚁群算法最早成功应用于解决著名的旅行商问题,该算法采用了分布式正反馈并行计算机制,易于与其他方法结合,而且具有较强的鲁棒性。
蚁群算法创立十多年来,无论在算法理论还是在算法应用方面都取得了很多突破性研究进展。
作为一个前沿性的热点研究领域,蚁群算法已引起越来越多国内外研究者的关注,近五年内其研究人员和研究成果均成几何级数增长,其应用范围几乎涉及到各个优化领域,而且还出现了蚁群算法仿生硬件,这种新兴的仿生优化算法已经显示出强大的生命力和广阔的发展前景。