(电路与系统专业论文)fpga动态可重构设计方法研究.pdf_第1页
(电路与系统专业论文)fpga动态可重构设计方法研究.pdf_第2页
(电路与系统专业论文)fpga动态可重构设计方法研究.pdf_第3页
(电路与系统专业论文)fpga动态可重构设计方法研究.pdf_第4页
(电路与系统专业论文)fpga动态可重构设计方法研究.pdf_第5页
已阅读5页,还剩68页未读 继续免费阅读

(电路与系统专业论文)fpga动态可重构设计方法研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

f p g a 动态可重构设计方法研究 第一章国内外发展状况 1 1f p g a 的发展现状 自1 9 8 4 年推出第一片现场可编程逻辑器件( f p g a ) 至今,f p g a 已经历了 二十几年的发展历史。在这二十几年的发展过程中,以f p g a 为代表的数字系统 现场集成技术取得了惊人的发展。纵观现场可编程逻辑器件的发展历史,其之所 以具有巨大的市场吸引力,根本在于:f p g a 不仅可以解决电子系统小型化、低 功耗、高可靠性等问题,而且其开发周期短、开发软件投入少、芯片价格不断降 低,促使f p g a 越来越多地取代了a s i c 的市场,特别是对小批量、多品种的产 品需求,使f p g a 往往成为前期产品首选。 目前,f p g a 的主要发展动向是:随着大规模现场可编程逻辑器件的发展, 系统设计进入”片上可编程系统”( s o p c ) 的新纪元;芯片朝着高密度、低压、 低功耗方向挺进;国际各大公司都在积极扩充其i p 库,以优化的资源更好的满 足用户的需求,扩大市场;特别是引人注目的所谓f p g a 动态可重构技术的开拓, 将推动数字系统设计观念的巨大转变。x i l i n x 公司不断的推出新器件和开发工 具,力求芯片的速度更高、功耗更低。在其新近开发的产品中,x i l i n x 重新定义 了未来的可编程逻辑,为用户提供5 v ,3 3 v 和2 5 v 可编程逻辑系列选择,并利 用先进的0 3 5 、0 2 5 、0 0 9 u m 工艺技术生产出低成本、高性能的可编程逻辑 产品。在这二十几年的发展过程中,以f p g a 为代表的数字系统现场集成技术取 得了惊人的发展:现场可编程逻辑器件已经从最初的1 2 0 0 个可利用门,发展到 9 0 年代的2 5 万个可利用门,乃至现在数百万门的单片f p g a 芯片。这将现场可 编程器件的集成度提高到一个新的水平。 1 2 可重构系统的发展 1 2 1 可重构系统的提出 随着数字逻辑系统功能复杂化的需求,单片系统的芯片正朝着超大规模、高 密度的方向发展。对于一个大规模的数字系统而言,系统规模是基于各种逻辑功 能模块的组合。但是,无论是时序逻辑系统,还是组合逻辑系统,或者组合时 序混合系统,从时间轴上来看,系统中的各个功能模块并不是时时刻刻都在工作 的,而是根据系统外部的整体要求,轮流或循环地被激活或工作。并且,随着数 字逻辑规模地扩大,在相同速度的条件下,在一定的时间区间,其功能模块的平 均使用率将下降。因此,系统设计应该从传统的追求大规模、高密度的方向,转 向如何提高资源利用率,用有限的资源去实现更大规模的逻辑设计的方向上来。 3 f p g a 动态可重构设计方法研究 而f p g a 的动态可重构技术大大提高了资源利用率,是现在国外f p g a 的研究热 点,也正是我们的主要研究内容。 1 2 2 可重构系统的应用 目前可重构系统正被广泛应用到了很多方面,例如军事目标匹配 4 1 1 5 】、大 数运算【6 】、声纳波束合成( 7 、基因组匹配【8 】、图象纹理填充【9 】、集成电路的计 算机辅助设计【1 0 】等。具体有如下一些应用领域: 可重构计算 可重构计算在系统内提供大量可编程的逻辑单元阵列构成“硬件池”,实际工 作时可由通用嵌入式处理器对f p g a 再配置,实时分配硬件资源,构造硬件功能 模块来完成计算任务。 动态测试系统 所谓动态测试系统就是在可编程逻辑芯片,比如f p g a ,在运行之初分成不 同的模块,而每一个模块可有多种电路选择。在芯片运行过程中,不同的模块可 以动态地被不同的电路替换,这样就能测试不同的电路组合,从而提高测试效率。 另外这种系统还可应用于层次化的级联系统,如层次化的神经网络等。 可进化的硬件( e v o l v a b l eh a r d w a r e ) 可进化的硬件是指动态可重构电路的配置是由人工进化进程决定的。设计者 把需要用f p g a 完成的任务,用设计拟合功能的方式来描述,然后,进化的方 x f p g a 动态可重构设计方法研究 1 2 3f p g a 动态重构展望 可重构系统的概念早在7 0 年代就已经提出来,但由于没有理想的可重构器 件等原因,这方面的研究没有很大突破。9 0 年代以来,随着大规模集成电路的 迅速发展,研制可重构处理系统的硬件条件已基本具备,特别是最近5 年陆续出 现了一些可重构处理的应用系统,虽然大部分都还只是处于学术研究、性能验证 阶段,但已表现出卓越的性能和巨大的优越性,从而引发了对可重构信息处理的 研究热潮。展望未来,发展可重构处理的关键之处的硬件方面就是f p g a 。 f p g a 可重构技术的应用决不仅仅是一种新型功能电路的应用,其涉及数字 系统设计方法、设计思想的变革,可以使数字系统单片化的设计从追求逻辑规模 转向追求逻辑的分时复用;从专用的固定功能逻辑系统转向功能可自适应进化的 逻辑系统。 自从2 0 0 0 年以来,f p g a 的动态重构研究在国际上已经得到了越来越多的 关注,国外也经常有此方面的论文发表。一些国外的大学如华盛顿大学,多伦多 大学已经在此方面的研究已经比较深入,也有很多优秀的论文发表。然而国内此 方面的研究还i 刮nr j 起步,还需要投入很多的人力物力来取得成效。我们实验室在 f p g a 动态重构方面的研究刚起步不久,因此我们要尽可能多的阅读国内外的研 究资料和论文,然后有了一定的理论积累之后,再进行一些大胆的尝试。 5 f p g a 动态可重构设计方法研究 逻辑块的结构如图2 3 所示。每个逻辑块由n 个基本逻辑元素( b l e ) 组成, 每个基本逻辑元素又由一个k 输入的l u t 和一个寄存器组成,如图2 4 。根据 l u t 的输出是否通过寄存器,基本逻辑元素输出可以分为寄存器类型或不寄存 类型。这样既可以实现多种的组合电路,还可以实现各类时序电路。另外,逻辑 簇与l u t 大小对f p g a 面积和速度性能有较大的影响【1 5 】,同时每个逻辑块含 有b l e 个数与每个基本逻辑元素含有l u t 输入个数对f p g a 功耗也有影响,例 如 1 6 找出了实现低功耗的最优n 值和k 值。 彳 输入 时钟 图2 1 3 逻辑簇的结构 f p ( a 图2 4 基本逻辑元素的结构 影响f p g a 性能的因素除了基本逻辑块结构以外,布线结构也决定着f p g a 性能的优劣。改变f p g a 布线结构参数将会得到不同性能的f p ( 执。图2 5 为基 于逻辑块结构的f p g a 布线结构图。每个逻辑块的引脚可以通过连接块中的连接 开关和线段相连。水平布线轨道和竖直布线轨道相交的地方称作开关矩阵,开关 7 f p g a 动态可重构设计方法研究 矩阵由传输门和三态缓冲器组成,控制传输门和三态缓冲器的开、关来实现可编 程布线。 图2 5 基于逻辑块的f p g a 布线结构 f p g a 的布线结构可用一些参数来描述【1 7 】。它们是: 1 ,布线宽度( w ) :每个布线通道中包含的线段的数目; 2 ,开关块复杂度( f s ) :开关块中,每条输入导线可以连接其他导线的数 目; 3 ,连接块复杂度( f c ) :连接块中,每个逻辑块可以连接导线的数目; 4 ,线段长度:每条线段所跨越逻辑块的个数等。 这些参数对f p g a 的面积、速度、功耗等性能有较大的影响。 2 1 2e d a 流程 使用f p g a 实现一个电路需要成千上万甚至上百万个可编程开关被配置到 合适的状态:开或关。如果设计者需要亲自配置每个可编程开关的状态,那么即 使一个很小的程序也很难实现,这就需要e d a 工具。设计者只需使用硬件描述 语言( 如v h d l 、v e f i l o g ) 描述电路功能,然后由e d a 工具将此高级语言程序 转换成f p g a 中每个可编程逻辑开关状态的f p g a 下载文件( b i t s t r e a m ) 。e d a 工具实现此转换的过程如图2 6 : 8 f p g a 动态可重构设计方法研究 图2 6 f p g a 设计流程 从上图可以看出,描述电路功能的硬件描述语言首先被综合成f p g a 的基本 单元:逻辑块,然后进行布局,a p n 用最优的算法将逻辑块摆放在f p g a 中合适 的位置,布局完成后即进行逻辑块之间的布线,最终产生可直接下载到f p g a 运 行的b i t s t r e a m 文件。 2 2f p g a 动态可重构基础理论 2 2 1 动态可重构概念及原理 动态重构系统概念的提出早于f p g a 动态可重构技术的提出。 动态重构系统指对于时序变化的数字逻辑系统,其时序逻辑的发生,不是通 过调用芯片内不同区域、不同逻辑资源来组合而成的,而可通过对具有专门缓存 逻辑资源的f p g a ,进行局部的和全局的芯片逻辑的动态重构而快速实现。也就 是指在系统实时运行当中对f p g a 的逻辑功能实时地进行动态配置,能够只对其 内部需要修改的逻辑单元进行重新配置,没有被修改的逻辑单元将不受影响,正 常工作。一般由传统处理器执行主程序,特定的任务赋给以f p g a 为基础的协处 理器以加速它们的执行。事实上,在大部分处理时间内,只有相对较小的一部分 用来计算内部任务,而硬件可以显著加速执行的时间。在重构的过程中,根据需 要,任务可以交换进入协处理器进行处理。 9 f p g a 动态可重构设计方法研究 所谓f p g a 动态可重构技术,是指基于静态存储器( s r a m ) 编程和专门结 构的f p g a ,在一定的控制逻辑的驱动下,不仅能实现系统重新配置电路功能, 同时还能对芯片逻辑功能实现系统的高速动态变换。 大多数f p g a 都是基于s r a m 查找表结构,它们一般只适用于静态重构, 通过向s r a m 一次下载全部配置数据而设定f p g a 的逻辑功能。根据f p g a 的 容量、配置方式等不同,全部重构时间为几毫秒到几秒不等。过去大家普遍进行 动态重构研究的f p g a 主要有,x i l i n x 的x c 6 2 0 0 系列、以及a t m e l 的a t 6 0 0 0 系列等。它们也是基于s r a m 结构,但是s r a m 的各单元能够单独访问配置, 即部分重构。它们的功能互不影响,因而具有部分重构的特征。这样做的优点显 著,但也会付出增大硬件电路规模和功耗的代价。要最终实现电子系统的完全实 时重构,应采用结构上具有动态部分重构功能的f p g a 器件,如现在x i l i n x 的 v i r t e x v i r t e x i i 系列。 从动态可重构的特征可以引出一种新的设计思想【1 8 】: 1 ,以小规模硬件逻辑资源来实现大规模系统时序功能; 2 ,将传统设计的空间分布的硬件逻辑,分为器件外部特征不变,而内部逻 辑在时间上交替变换,并共同在时问空间上构成系统整体逻辑功能。 f p g a 动态可重构技术主要特征是将整体按功能或按时序分解为不同的组 合,并根据实际需要,分时对芯片进行动态重构,以较少的硬件资源,去实现较 大的时序系统整体功能。图2 7 给出了一种典型的f p g a 动态可重构原理示意图。 从图2 7 中可以看出,在外部逻辑的控制下,可以实时动态地对芯片逻辑实 现全部重构或局部重构。通过控制布局、布线的资源,来实现系统的动态重构。 1 0 f p g a 动态可重构设计方法研究 图2 7 典型的f p g a 动态可重构原理图 要使f p g a 有效地实现实时系统动态重构,f p g a 结构上必须满足以下要 求: 1 ,不仅具有可重新编程能力,同时可动态进行系统资源地重新配置,而不 会破坏器件中全局或局部逻辑操作能力。 2 ,f p g a 内部配置信息对称,即在任何时刻、任何通用的基本逻辑功能可以 配置于器件地任何一个位置,运行用简单模型组合去实现设计中的复杂功能。 2 2 2 基于f p g a 动态可重构的优化算法 2 2 2 1遗传算法 遗传算法是由美国m i c h i g a n 大学的j h o l l a n d 教授于1 9 7 5 年首先提出的。 他是基于进化论的原理发展起来的一种广为应用的、高效的随机搜索与优化的方 法。 遗传算法是模拟生物进化现象( 自然选择、交叉、变异) 的一种概率搜索和最 优化方法,用于解决不连续优化问题。它是一类借鉴生物界的进化规律( 适者生 存、优胜劣汰遗传机制) 演化而来的随机化搜索方法,是模拟生物遗传现象的工 程模型。 将遗传算法与可编程逻辑器件结合,用算法控制改变芯片结构,使其形成各 式各样的逻辑电路,来实现遗传演化中的各类操作,是一个很有前途的领域。随 着f p g a 芯片的发展,大群体规模的并行演化模式均可得以实现。 f p g a 动态可重构设计方法研究 第三章动态部分重构的技术分析 3 1概述 要实现动态重构首要的问题就是能够对f p g a 的内部资源按照某一规则进 行索引,这个需要f p g a 内部硬件结构的支持。因此不同的f p g a 制造商就开发 一些特殊的f p g a 来支持动态重构。 x c 6 0 0 0 曾经是一款非常适合动态重构研究的f p g a ,它的体系结构基于选 择器,但是因为商业的原因现在已经停产了。它允许用户下载任意大小的配置文 件( b i t s t r e a m ) 而不用担心f p g a 内部结构被破坏。因此一些国外的研究人员在 此款f g p a 上取得了非常多的研究成果,比如t h o m p s o n 提出动态重配置的本质 就是对于电路中每一个点的掌控f 2 0 2 1 ,以及令人印象深刻的机器人控制器 2 2 1 ,也是基于此款f p g a 。 目前进行f p g a 动态重构研究的f p g a 主要是x i l i n x 公司的v i r t e x 和 v i r t e x i i 系列。这两个系列的f p g a 都支持动态部分重构,但是相比与x c 6 0 0 0 , 他们不能下载任意大小的配置文件,它们必须是以帧为最小单元进行下载,帧的 概念和细节我们将在后面进行介绍。研究人员在进行研究的过程中,还必须确保 生成的配置文件是否合法,因为配置文件包含内部结构的各种连接信息,一不小 心很容易造成f p g a 的损坏。针对这个问题,国外的研究人员也做了非常多的努 力,比如美国纽约大学的研究人员利用j b i t s ( 基于j a v a 的a p i ,能对电路进行描 述和资源配置) 来进行电路设计,比如通过基因组映射f p g a 内部l u t 的内容, 来实现简单的组合电路【2 3 】,以及能避开障碍物的机器人控制器【2 4 】等。j b i t s 的 特性很适合对f p g a 的研究,特别是现在的一些微处理器已经含有硬件j a v a 虚 拟机,使得动态重构在嵌入式平台上实现成为可能。但是,利用j b i t s 进行开发 还是有很多的限制,比如缺少技术支持和相关技术文档,以及与现有的硬件描述 语言不兼容等。尽管如此,我们也利用j b i t s 进行动态部分重构方面的研究,我 们将在第五章对这部分内容进行详细介绍。 本章主要介绍针对x i l i n x 公司的v i n e x i r t e x i i 系列的f p g a 三种动态重构 技术。其中前面两种是基于x i l i n x 发布的动态部分重构的两个流程1 2 5 ,第三种 主要是针对b i t s t r e a m 的操作,它的好处是不需要依赖x i l i n x 的开发工具,这个 特性使得动态重构在嵌入式系统上实现成为可能。我们在本章第二节介绍x i l i n x 发布的两种进行动态重构的设计流程。在第三节介绍如何利用这些技术进行动态 重构的研究。第四节是我们的小节。 1 3 f p g a 动态可重构设计方法研究 3 2基于v i r t e x v i r t e x i i 的动态部分重构的设计流程 f p g a 是一种可重构器件,但是传统意义上的f p g a 是不允许在运行过程中 对里面的资源进行配置,即所谓动态部分重构。现在x i l i n x 公司的v i r t e x 和 v i r t e x - i i 系列的f p g a 能支持动态部分重构,但是有一些限制条件,我们在第五 章会提到这一点。同时,x i l i n x 公司发布了针对这两个系列f p g a 进行动态部分 重构的设计流程,即基于模块化的设计流程和基于差异性的设计流程。 基于差异的设计流程需要人工的对一些配置内容进行修改,它在整个f p g a 设计流程中是相对比较底层的。通过x i l i n x 的f p g a e d i t o r 这个工具,用户可以 修改f p g a 内部多种的配黄信息,比如查找表( l u t ) ,块内存( b l o c km e m o r y ) 内容,i o b 的配置信息,以及各种选择器等。修改完成之后就可以生成只包含差 异信息的配置文件。下载这个配置文件必然比整个配置文件节约大量的时间,但 是这种设计流程只适合不太复杂的电路设计,因为电路复杂,人工的修改配置信 息很容易发生配置错误,甚至导致电路的损坏。 基于模块化的设计流程是要求开发人员把整个电路预先分成不同的模块。然 后针对每一个的电路模块,用h d l 描述电路,通过综合,映射,布局,布线的 流程,生成配置信息。在整个电路中,有些模块是固定的,而有一些是在运行过 程中可被动态配置的,比如图3 1 。同时必须设计总线宏( b u sm a c r o ) 用于 实现模块间通讯。在动态配置的时候,这些总线宏是固定的,也只有这样,动态 配置的时候,当前模块不会影响到其他模块的运行。在系统运行之初,需要把完 整的配置文件下载到f p g a 中,然后随着系统的运行,动态的调度不同的模块以 实现不同的电路功能。 1 4 f p g a 动态可重构设计方法研究 边界 图3 1 基于模块的动态部分重构设计流程 从上图中我们也可以看到总线宏位于两个模块之间。总线宏事实上是一个预 先布线好的用来确定精确布线轨道的硬件宏,并且在模块配置信息改变的时候保 持不变。对于每个不同的设计应用来说,它是一个绝对固定不变的。总线宏的实 现一般是通过配置三态缓冲器来实现的,比如图3 2 用8 个三态缓冲器实现4 b i t 总线宽度的总线宏。 1 5 f p g a 动态可重构设计方法研究 等所有的其他电路布线布局完毕后,还需要做一下检验,是否硬件宏放置正确。 此时整个系统就可以按照以下步骤运行了: 1 用自己算法得到电路需要的l u t 内容; 2 通过脚本程序调用f p g ae d i t o r 生成只包含被修改l u t 的配置信息; 3 下载到f p g a 中运行。 此项技术的特点是只是修改u j t 的内容,而其他的布线信息,拓扑结构都 预先设计好,在运行过程中保持不变。 此项技术的好处在于能对系统进行微调。因此它非常适合与那种单元结构的 系统,比如神经网络,模糊系统等。但是此项技术最大的缺点是它非常依赖x i l i n x 的工具,比如它需要使用f p g ae d i t o r 来修改l u t 的内容,以及调用x i l i n x 的 生成工具来生成配置文件。所以此项技术也很难在嵌入式系统中得到实现。 3 3 3 基于b i t s t r e a m 的技术 前面介绍的两项技术都必须依赖x i l i n x 公司的软件来实现,这样就很大的限 制了动态重构的应用领域,即不能脱离p c 或者工作站单独运行。然而,动态重 构一个重要的应用领域就是嵌入式系统,比如动态路由器,通过动态配置,实现 不同的路由算法。因此国外的研究人员想到分析配置文件( b i t s t r e a m ) ,然后通 过直接对b i t s t r e a m 文件进行操作,生成不同的部分配置文件。现在有很多方法 可以实现对b i t s t r e a m 文件的操作,比如前面提到的j b i t s ,以及x i l i n x 公司开发 中的x p a r t ( x i l i n xp a r t i a lr e c o n f i g u r a t i o nt o o l i t ) f 2 9 】,后者是利用f p g a 中自 带的硬微处理器核,如m i c r o b l a z e 或p o w e r p c ,通过i c a p ( i n t e r n a lc o n f i g u r a t i o n a c c e s sp o r t ) 实现对f p g a 内部的资源的访问和控制。但是到目前为止,x a p r t 还没有发布。至于j b i t s 尽管有很多的不足和限制,但是的确是非常适合于对 b i t s t r e a m 进行操作。因 x f p g a 动态可重构设计方法研究 从上面的介绍,我们可以看出,通过直接对b i t s 雠锄进行操作,使动态重 构变的比较灵活。理论上用户可以f p g a 片内的任意资源进行修改,但是实际上 由于受f p g a 结构的限制,到目前为止我们的重配置还是只能以帧为最小配置单 位。 3 4本章小节 我们在本章节介绍了三种用于动态重构研究的技术。第一种是基于模块化的 设计,这是一种比较高层的设计方法,用户预先需要定义好所有的模块。第二种 和第三种是比较低层的重构方法。其中第二种需要用户通过硬件宏的形式预先安 置可能的布线通道,然后通过修改l u t 的内容,实现动态重构。至于第三种方 法,灵活性就比较高,用户可以任意修改f p g a 内部所有的配置信息,但是由于 受v i n e x i i 系列结构的限制,动态重构只能以帧为最小配置单位。同时第三种方 法不依赖于x 1 i n x 公司的工具,能够脱离p c 或工作站独立运行,另外,我们也 在3 3 3 节给出了一个嵌入式应用参考平台。 我们在f p g a 动态重构方面的研究,前期的重心基于模块化的技术,即把一 个简单的算术电路分成 x f p g a 动态可重构设计方法研究 第四章基于模块化的f p g a 动态重构的研究 4 1概述 正如第三章介绍的那样,基于模块化的重构技术需要研究人员预先把电路分 成不同的功能模块,然后在顶层文件的约束下,生成各自的配置文件。我们的实 践也是基于此。 本章主要介绍我们的设计思路以及设计中的注意要点,具体的设计步骤和相 关细节请参考我师姐( 尚莉娜) 的毕设论文_ f p g a 的动态可重构研究。在本 章的最后部分给出我们实践的结论,特别是这种技术的局限性。 4 2设计思路 4 2 1 电路模块划分 无论是传统意义上的电路设计还是现在的动态重构电路设计,第一步都是整 体电路设计。但是动态电路设计在整体电路的设计过程中,要有意识的把电路分 成各个模块,同时还要加上很多的约束条件,比如模块的大小,布局位置等。另 外按照何种方式进行模块划分,也一直是国外研究的重点。比如f 3 2 提到按照功 能的执行的先后顺序进行划分, 3 3 】提到了任务划分的三种算法。但是我们为了 简化设计,我们选择按照电路功能划分模块。于是我们略去复杂的模块划分算法, 人工的按照电路内部功能进行了模块划分。 同时模块有固定模块和动态模块之分:固定模块在f p g a 运行过程中功能保 持不变;动态模块在f p g a 运行过程中功能可以被替换。在实际的重构过程中为 了保持系统性能的稳定,往往固定模块的数量多于动态模块的数量。 4 2 2 模块硬件资源分配 基于模块化的设计有一个限制:所有模块在f p g a 中的位置必须预先设定 好,这表明固定模块将一直占用硬件资源,而只有动态的模块才能共享硬件资源。 因此如何有效分配f p g a 资源也成为国外学者关于f p ( 认的研究热点之一。 我们目前所使用的f p g a ( f t e x i i ) 的物理结构决定了我们对硬件分配必 须按照如下规则; 1 ,模块的高度必须与f p g a 等宽; 2 ,模块的宽度必须满足包含的c l b 数目是4 的倍数; 3 ,模块区域所属的i o b 资源只能被此模块使用。 f p g a 动态可重构设计方法研究 4 ,同时模块之间的通讯必须通过总线宏,另外只有相邻的模块才能进行通 讯。关于总线宏的介绍请参考3 2 。 这些规则限制了硬件分配灵活性的同时,也给我们的实践带来了便利。因为 我们只需要按照纵向把f p g a 进行划分就可以了。 4 2 3 顶层文件设计和各个模块文件的实现 定义好所有模块的功能和资源后,我们需要一个顶层文件对这些模块进行组 织。在顶层文件里,各个模块相当于黑盒子,只有它们的输入和输出才对项层文 件有意义。另外顶层文件里面还包含用于模块问通讯用的总线宏信息。 接着就是依次实现各个模块了。在顶层文件的指导下,每个模块依次经过综 合,布局,布线,最终生成各自的b i t s t r e 锄文件。 上述几个设计思路可用图4 1 进行统一表示: f p g a 动态可重构设计方法研究 j 。# l 套堍填 旅 f 瓣。i 哟 鹣 瓤i 槲l i ;蕊魄i 鞭 图4 1 基于模块化的f p g a 动态重构设计思路 我们需要强调的是当前所有的操作都是在h o s tp c 上完成,包括后期 b “s t r e 柚文件的下载和读取也必须在h o s tp c 环境下进行。然而,这样过分的依 赖h o s tp c ,并不是动态重构研究的初衷。正是基于这点,一些国外的工程师 考虑通过直接对b i t s 仃黜文件进行操作,比如通过f p g a 外部或内部的微处理 器( v i n e x i ip r o 系列f p g a 内部含有p o w p c 4 0 5 的硬核) ,动态生成运行过程 需要的配置信息,并控制配置信息的下载和读取,以实现动态重构。我们也对于 b i t s t r e a m 文件进行了尝试,尽管我们目前的实践还没有脱离h o 髓p c ,但是我们 已经朝着这个方向努力了。 f p g a 动态可重构设计方法研究 4 2 4 最终文件实现 第一次下载到f p g a 中运行的必然是完整的配置信息,只是后期在运行过程 中某些动态模块将被替换。因此我还需要一个包含一个完整可运行电路的 b i t s t r e a m 文件。这个文件来自与顶层文件和各个模块b i t s t e a m 文件的有机组合。 顶层文件里面的那些“黑盒子”将被真实内容填充。同时各个模块的位置完全按照 我们预先的硬件资源划分。有了这个文件我们就可以下载到f p g a 中验证我们的 电路功能了。 4 3实践简单介绍 根据上面提到的设计思路,同时参考国外学者的设计流程,我们进行了下面 简单的实践。这里我们只做简单的介绍,详细过程和细节请参阅我师姐( 尚莉娜) 的毕设论文f p g a 动态可重构研究。 我们的实践目标是v i r t e x 一1 1 p r o4 0 。我们把简单远算电路( a b ) + ( a + b ) 和( a - b ) ( a + b ) 分成四个电路功能模块: 加法功能模块 减法功能模块 乘法功能模块 移位功能模块 因为我们的设计要实现的最终日标是在运行的过程中乘法运算被替换为移 位运算,所以前面两个模块我们设计为固定模块,乘法和移位模块我们设计为可 动态加载模块。 接着通过u c f 文件给各个模块分泄朔蠼燃篆泌。翳彗基蛰事毛 x f p g a 动态可重构设计方法研究 :? 麓参臻 二= ;一 ? ! 砖0 臻 菇 。,2 。? r j 。 图4 2 模块硬件资源分配图 上图中左边和右边是固定模块,分别是加法和减法模块,中间是可重构模块, 在我们的实践中它可以是乘法模块或者移位模块。其中中间的两个矩形是 p o w p c 4 0 5 的两个硬核,不参与硬件资源的划分。 下一步我们就使用x i l i n x 工具链中的工具,依次生成了各个模块的b i t s l r e a m 文件,以及包含有完整电路的b i t s t r e a m 文件。 最后,我们使用f p g ae d i t o r 对我们生成的各个文件进行了验证,包括模块 的布局位置,各个布线通道,以及模块间通讯用的总线宏等。尽管所有的验证都 通过了,但是在实践的过程中,我们体会到了这种设计思路的诸多限制,因此基 于模块的动态重构研究就暂时告段落了。 4 4 本章小节 基于模块化的动态重构的设计流程趋于标准化,因此此种动态重构的研究难 点在于模块划分算法以及硬件资源划分算法。我们的实践根据电路的功能进行模 块划分,同时依据国外研究人员的设计流程实现了顶层文件以及各个模块的 b i t s t r e a m 文件,并通过f p g ae d i t o r 工具对我们实践结果进行了验证。 然而在我们的实践过程中,我们体会到这种模式的动态重构有很多的局限 性,主要有以下这些: f p g a 动态可重构设计冉法研究 第五章基于b i t s t r e a m 文件的动态重构研究 5 1概述 b i t s t r c a m 文件足指用户的r t l 级代码( 用h d l 语言描述) 经e d a 工具综 合,靠局靠线后,最终生成的可下载到f p g a 中的二进制码流文件。它是整个 f p o a 设计阶段的最终产物,因此它包含的是最直接的电路信息。 现在几乎所有的f p g a 都是通过完整的b i t m e a m 文件来进行配置。而且只 有当f p g a 重启时,f p 6 a 才根据b t s 缸来配置自己的所有单元,比如内部 连线,l u t 等。x i l i n x 发布的v i r t e x i i 系列f p g a ,允许用户进行部分配置。这 就意味着用户可以在不重启f p g a 的情况卜| ,对f p g a 的部分资源进行重新配置。 v i n e x - i i 的这个特性为实现了f p g a 运行时动态部分重构提供了很好的硬件保 证。 但是传统的f p g a 开发流程小能实现f p g a 动态部分重构。最主要的原因是 当用户用h d l 语言( 如v h d l 或v e f i l o g ) 去描述自己的电路时,并不知道自己 的电路在f p g a 中如何被放置,比如,不知道自己的电路将占用f p g a 中的哪些 逻辑块。 为了弥补这个不足,1 i b 于2 0 0 3 年8 月发布了j b n s 3 o 。用户通过j b i t s 可以对f p g a 里面的任意资源进行访问和修改,比如特定l u t 罩面的某一位, 甚至s n c e 之间的内部连线也可以通过这些a p l 接口进行配置。我们的研究也利 用了j b n s 的这些a p i 。 对于本章节,我们将按照两大部分进行介绍,第一部分是关丁j b n s 的一些 介绍,我们利用j b “s 设计我们的电路,同时在我们的硬件上进行验证,另外我 们在j b i t s 的基础上开发了自己的应用程序b i tb m w s e r ,为我们的动态重构研究 做一些辅助性的工作;我们将在本章的第:部分介绍f p g a 动态重构的一些细 节,同时介绍我们利用f p g a 动态部分重构方面的实践和取得的阶段性成果。 5 2 j b i t s 介绍 j b i t s 由一系列的j a v a 类库组成,这些类库提供了盲接访问x i l i i l xf p g a b i t s n 文件的应用程序编程接口( a p i ) 。这些a p i 包括读取和修改b i 忸仃e a m 里面包含的逻辑和布线信息。这个特性使得实现f p g a 动态重构变为可能。 j b i t s 把b i t s 廿e 枷看成由很多f p g a 的功能块( t i l e ) 组成,比如c l b6 】e , i o bt i l e ,b r a mt i l e 等。这些t i l e 排列成两维矩阵,每一个枷e 通过相应的行列 值进行索引。图5 1 展示了枷e 在f p g a 内部是如何排列的。事实上每一个t i l e 值进行索引。图5 1 展示了t i l e 在f p g a 内部是如何排列的。事实上每一个t i l e 2 8 f p g a 动态可重构设计方法研究 都有自己的类型,类型包括c l b ,i o b ,s i 认m 等,不同类型的t i l e 所包含的配 置信息也不一样。因此j b i t s 针对不同的t i l e 类型提供了不同的a p i 函数。 图5 1 j b i t s 把f p g a 看成由许多t i l e 按照二维排列组成的矩阵 另外,对于工具开发人员而言,他们可以在j b i t s 提供的这些a p i 的基础上 开发自己的应用程序,比如跟传统的e d a 工具一样实现布局布线功能,同时还 可以实现传统的e d a 无法实现的功能,比如动态布线 3 4 】。 5 3利用j b i t s 的设计流程 x i l i l l ) 【工程师开发j b i t s 的主要目的是用于f p g a 动态重构方面的研究,但 是j b i t s 不仅用来设计f p g a 动态重构,还可以用来设计传统意义上的静态电路。 同时需要注意的事,无论是用来实现动态重构,还是设计静态电路,很重要的前 提是工程师必须对f p g a 的内部的结构非常的了解,否则很容易造成对f p ( 後的 损坏。正是鉴于这一点,我们试图开发一个针对b i t s 眈锄文件操作的b r o w s e r , 通过一些g u i ,方便工程师对b i t s t r e a m 文件进行修改,以生成需要的电路。我 们将在本章节的后续部分对我们设计的工具进行介绍。 下面我们依次介绍利用j b i t s 设计静态电路和动态重构的设计流程。 5 3 1 静态电路的设计流程 利用j b i t s 设计静态电路与传统的静态电路设计有很大的不同。传统的静态 电路设计的输入是用户用h d l 语言描述的电路文件或者原理图设计文件,而输 出就是我们前面一直提到的b i t s 仃e 锄文件。电路的功能由用户的输入文件决定, 而电路的具体实现靠e d a 工具,用户很少参与具体电路的设计,比如x i l i n xi s e , 根据用户的输入文件,经过综合,布局,布线后生成b i t g t r e 枷文件。在这整个 设计流程中,用户只参与前端输入文件的设计,后端的实现完全依赖e d a 工具。 2 9 f p g a 动态可重构设计方法研究 利用j b i t s 设计静态电路的输入文件是b i t s t r e a m 文件。这里的b i t s t r e a m 文 件既可以是传统静态电路设计生成的b i t s t r e a m 文件,也可以是一个空的 b i t s t r e a m 文件。用户通过调用j b i t s 提供的a p i 对内容进行修改,生成满足设计 要求的b i t s r e a m 文件,最终下载到f p g a 中运行。 这个设计流程可以通过图5 2 表示: 图5 2 静态电路设计流程 j b i t s 可以修改原有设计的b i t s t r e a m 文件,因此利用j b i t s 设计静态电路可 以看作是对传统静态电路设计的补充。因为e d a 工具生成的b i t s t r e a m 可能并不 是最完美的,比如布线结果并不是最完美,此时用户可以通过j b i t s 对电路进行 微调,以改善电路性能。 我们用上述两种方式设计了同一个电路,然后对各自生成的b i t s t r e a m 文件 进行比较,包括内容,功能等。这部分内容将在5 4 进行介绍。 5 。3 2 动态配置设计流程 动态配置的设计流程的输入同样是b i t s t r e a m 文件,但是跟静态设计的区别 在于应用程序与底层硬件f p g a 之间多了x i l i n x 硬件接口层( x h w i f ) 3 5 1 。 x h w i f 的设计有两个目的: 1 ,同运行中的f p g a 进行通讯。通讯具体指读取f p g a 中的配置信息和下 载配置信息到运行中的f p g a ; 2 ,同上层的应用程序进行通讯。通讯具体指把从f p g a 中读取出来的信息 转交给上层的应用程序和接收上层应用程序修改后生成的新配置信息。 3 0 f p g a 动态可重构设计方法研究 动态配置的设计流程可以用来图5 3 进行描述: 图5 3 动态配置设计流程 设计流程大致可以按照上图中的数字箭头标示进行: 1 ,上层应用程序读取原始的b i t s t r e a m 文件,进行修改,通过x h w i f 下载 到f p g a 中运行; 2 ,上层应用程序通过x h w i f 读取运行中的f p g a 配置信息; 3 ,上层应用程序修改读取的f p g a 配置信息,再次通过x h w i f 下载到运 行中的f p g a ; 接着,重复2 ,3 ,直到满足电路的设计功能。 从上面的流程我们不难看出,最关键的部分是x h w i f 。尽管x i l i n x 公司提 出了这个概念,并定义好了基本的接口,但是针对不同的v i r t e x i i 型号的f p g a , 用户需要自己去实现这些接口功能。我们研究的f p g a 型号是v i r t e x i i 4 0 0 0 f f l l 5 2 ,因此我们需要实现的接口如下: 3 1 f p g a 动态可重构设计方法研究 对部分接口的具体介绍放在本章节的第六部分。 5 4 利用j b i t s 设计电路可行性验证 5 4 1 设计目的 利用j b i t s 设计电路脱离了传统电路的设计流程,是一个全新的设计方法。 因此本次的设计目的是在实际的硬件f p g a 上验证用j b i t s 设计的电路功能。我 们选用的f p 6 徂型号是v i n e x i i4 0 0 0 ( x 2 v 4 0 0 0 0 ) 。 5 4 2 设计思路 首先用传统的e d a 工具,如l i n xi s e7 o l i 设计一个电路,生成b i t s t r e a m 文件,下载到f p g a 中运行。接着,利用j b i t s 设计同样功能的电路,同样生成 b i t s t r e 锄文件,下载到f p g a 中运行。最后傲两方面的比较: 1 ,两个b i t s t r e a m 文件的内容; 2 ,下载到f p g a 后的运行功能。 5 4 3 设计步骤 正如设计思路所提到的,我们在利用j b i t s 设计电路之前,我们先用传统的 e d a 工具x i l i n xi s e7 0 1 i 设计一个电路,电路的功能非常简单,就是简单的输 入输出: 这个电路用v e 讯o g 代码描述如下: f p g a 动态可重构设计方法研究 同时为了能与j b i t s 设计的电路进行方便的比较,我们通过u c f 文件指定了 f p g a 的输入输出引脚。具体文件内容如下: 电路经过i s e 综合,以及布局布线后,此时该电路在f p g a 中的位置如图 5 4 所示: 图5 4 电路在f p g a 中的位置 把b i t s t r e a m 文件下载到f p g a 中运行,此时电路功能正如我们所期望的那 样:当输入端电平为高,输出端电平为高;当输入端电平为低,输出端电平为低。 3 3 f p g a 动态可重构设计方法研究 接着我们用j b i t s 来设计同样功能的电路。利用j b i t s 设计电路的一个很重要 的前提是对f p g a 的内部结构需要一个很清楚的认识,由于我们在这里设计的电 路功能,只涉及i o b ,相对而言比较容易理解,因此在介绍我们具体的设计步骤 之前,先大致介绍一下i o b 的简化结构。 简化的i o b 结构图如图5 5 所示: t s b x t s 2b x 0 1 _ b x 0 2 附 图5 5 简化的v i r t e x i ii o b 结构。 从上图中我们可以看出,i o 的输入输出由选择器t m u x 进行控制,同时选 择器o m u x 控制输出源,i d e l m u x 用于选择是否延时输入,其他的选择器如 t s m u x ,i s e l m u x ,i m u x 主要实现对输入源的控制。详细的i o b 的结构请参 考【3 6 】。 下面根据上图来设计我们的电路,具体步骤如下; 1 ,由于我们的f p g a 型号是x c 2 v 4 0 0 0 ,所以第一步是建立一个针对 x c 2 v 4 0 0 0 的j b i t s 对象: 2 ,读取一份空的x c 2 v 4 0 0 0 的配置文件: : 巫垂圣堕三堕二 3 ,设定输入i o b 所在j b i t s 中的坐标( 7 7 ,8 7 ) ,输出i o b 所在j b i t s 中的坐标 ( 7 8 ,8 7 ) 。为了方便与前面设计的电路进行比较,因此我们希望两个电路的输入输 出引脚是一样的,但是如何知道前面电路输入引脚h 2 ,输出引脚l 8 在j b i t s 里面 f p g a 动态可重构设计方法研究 里对应的i o b 坐标,这个需要用到我们的工具b i tb r o w s e r 我们将在介绍这个工 具时对这部分内容进行补充。 4 ,现在我们需要对输入引脚进行配置,由于f p g a 上电后的引脚模认为输 入状态,因此这部分配置代码可以省去,但是我们还是需要关注一个地方,即我 们的输入引脚在l o b 中的位置。因为每个l o b 都会有两个到四个不等的引脚数 目,从图5 4 我们可以知道( 7 7 ,8 7 ) 只有两个引脚,同时我们的输入引脚是第 一个,对应到代码就是c o n f i g 0 。同理,对于输出引脚是在( 7 8 ,8 7 ) 第二 个,对应

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论