当前位置:首页 > 嵌入式 > 嵌入式硬件

摘要:介绍了XilinxFPGA的配置原理和FPGA模块化设计流程以及划分重构模 块的原则。通过一个实例介绍了采用模块化设计方法实现Virtex-EFPGA动态部分重构的过程,能使重构模块在系统运行时改变其逻辑功能,而固定模 块逻辑功能不中断,同时器件的重构时间大大减少。

关键词:FPGA;动态部分重构;重构;Virtex

随着可编程技术的不断发展,FPGA被广泛应用于电子设计的各个领域。新的设计思想和设计方法也被不断的提出和应用,如FPGA的动态部分重构技术。所谓 动态重构是指对于时序变化的数字逻辑系统,其时序逻辑的发生,不是通过调用芯片内不同区域不同逻辑资源的组合来实现,而是通过对具有专门缓存逻辑资源的 FPGA,进行局部和全局芯片逻辑的动态重构而快速实现。动态可重构FPGA器件在编程结构上应具有专门的特征,其内部逻辑块和内连线的改变可以通过读取 不同的配置比特流文件来实现逻辑重建。动态部分重构是指重新配置FPGA的部分区域,重构过程中,FPGA其余部分的工作状态不受影响。此方式减小了重构 范围和单元数目,从而大大缩短了FPGA的重构时间。

应用FPGA动态部分重构功能使硬件设计更加灵活,可用于硬件的远程升级、系统容错和演化硬件以及通信平台设计[1]等。动态部分重构可以通过两种方法实现:基于模块化设计方法(Module-Based Partial Reconfiguration)和基于差别的设计方法(Difference-Based Partial Reconfiguration),本文以基于模块化设计为例说明实现部分重构的方法。

1 FPGA配置原理简介

本文针对Xilinx公司的FPGA进行研究,支持模块化动态部分重构的器件族有Virtex/-II/-E和Virtex-II Pro。

Xilinx公司FPGA是基于SRAM工艺的,包括配置逻辑块(CLBs),输入输出块(IOBs),块RAMs,时钟资源和编程布线等资源[2]。CLBs是构造用户所需逻辑的功能单元,IOBs提供封装引腿与内部信号引线的接口。可编程互连资源提供布线通道连接可配置元件的输入和输出到相应的网络。

存储在内部配置存储器单元中的数值决定了FPGA实现的逻辑功能和互接方式。Virtex FPGA的配置存储器是由配置列(Configuration Columns)组成的,这些配置列以垂直阵列的方式排列,如图1给出了Virtex-E XCV600E器件的配置列构成图。配置存储器可分为五种配置列:Center 列包含四个全局时钟的配置信息;两个IOB 列存储位于器件左边和右边所有IOBs的配置信息;CLB列存储FPGA基本逻辑功能的配置信息;Block SelectRAM Content列存储内部块RAM的配置信息;Block SelectRAM Interconnect列存储内部块RAM间互联的配置信息[3]

图1 Virtex-E XCV600E的配置列构成及地址

配置列根据分配给它的配置地址(Configuration Address)来寻址。每一个配置列在FPGA内都有唯一的主地址(Major Address)空间。

FPGA的逻辑功能通过配置比特流(Configuration Bitstream)来实现。对于动态部分重构功能来说,需重构的配置逻辑是通过下载不同的部分配置比特流来实现的。

2基于模块化动态部分重构FPGA的设计方法

所谓的FPGA模块化设计就是将系统按照一定规则划分成若干模块,然后对每个模块分别进行设计、综合,并将实现结果约束在预先设置好的区域内,最后将所有模块的实现结果有机的组织起来完成整个系统的设计[4]。其划分模块的基本原则为:子模块功能相对独立,模块内部联系尽量紧密,模块间的连接尽量简单。对于那些难以满足模块划分准则的具有强内部关联的设计,不适合采用此设计方法。

FPGA模块化设计的优点在于:团队式并行工作从而加速整个项目的开发进度;每个子模块都能够灵活使用综合和实现工具独立进行优化,从而达到更好的优化结果;调试、更改某个子模块时,不会影响其他模块的实现结果,保证了整个设计的稳定性与可靠性。

模块化设计方法使用Xilinx公司的ISE软件设计工具,常用HDL语言作为设计输入,顶层模块描述设计的全局逻辑,包括设计的输入/输出、所有子模块 的黑盒子(Black Box)声明以及子模块之间的连接关系。所谓黑盒子声明是指在顶层模块中仅仅对子模块进行端口描述与信号属性声明,并不包含任何实际逻辑和时序关系的描 述。子模块通常也使用HDL语言描述,分别设计出各子模块的逻辑实体并综合所设计的子模块。由于子模块的输入/输出并不是整个设计的外部接口,所以在综合 过程中应禁止子模块插入I/O端口,而仅在综合顶层模块时才插入I/O端口。最后将所有子模块的实现结果和顶层的实现结果有机地组织起立,完成整个设计的 实现。图2是基于模块化设计方法的流程。

采用模块化设计方法实现FPGA的动态部分重构,首先进行模块划分,将设计的固定逻辑即运行过程中不需要更改的逻辑划分到固定模块,将需要更改的部分划分到可重构模块中。其次模块的放置位置和大小也有限制,必须遵循一定的规则[5]: 可重构模块的高度和器件的高度一致,从图1中可以直观地认为模块必须包含整个配置列;可重构模块的宽度最小是4个Slice(一个CLB包含两个完全相同 的Slice),并且必须为4个Slice的倍数;如果可重构模块位于器件的最左边或是最右边的Slice列,则所有位于器件边缘的IOBs将作为可重构 模块的资源;为了减少设计的复杂度,可重构模块的数量应该尽量少等。

图2 模块化设计流程

3 FPGA动态部分重构的实现

在本设计实例中,FPGA实现的功能是对外围接口电路进行逻辑控制以及根据外围不同设备输入的数据选择适当的数据处理算法。据此将设计划分为固定模块和可 重构模块,其中固定模块内实现对外接口的控制逻辑,可重构模块内实现数据处理算法。本例中只将FPGA的逻辑功能更换一次,即可重构模块只部分重构一次, 将其在重构前后的不同逻辑功能分别计作reconfig_a和reconfig_b。系统会根据需要动态部分重构FPGA,为不同的数据源选择适合的处理 方法。本设计由Virtex-E XCV600E器件来实现。

根据模块所需资源的大小和模块划分原则,在用户约束文件(UCF)中将每个模块的位置进行约束,如下所示:

INST "fix" AREA_GROUP = "AG_fix" ;(1)

AREA_GROUP "AG_fix" RANGE = CLB_R1C1:CLB_R48C36 ;(2)

INST "reconfig" AREA_GROUP = "AG_reconfig" ; (3)

AREA_GROUP "AG_reconfig" RANGE = CLB_R1C37:CLB_R48C72 ;(4)

其中(2)、(4)指定了两个模块的具体位置。

按照模块化设计流程,分别对固定模块fix和可重构模块reconfig_a和reconfig_b进行设计综合,再将两个可重构模块分别和固定模块进行组合,完成整体设计。此过程中可重构模块和FPGA的整个设计分别生成配置比特流。

图3和图4是FPGA部分重构前后的整个设计的物理实现,图中左半部分为固定模块区域,右半部分为可重构模块区域。从两图中可知在部分重构前后可重构模块区域内布线发生变化,而固定模块区域内布线没有发生变化。

图3 fix和reconfig_a整体设计的物理实现结果

图4 fix和reconfig_b整体设计的物理实现结果

FPGA动态部分重构时首先须将整个配置文件下载到器件中,重构时系统根据运行的需要选择适合的部分重构配置比特流。Virtex-E XCV600E配置比特流的大小为495204个字节,而可重构模块reconfig_a和reconfig_b配置比特流的大小分别为93324个字节 和111868个字节,因此采用部分重构不仅能够在运行不间断的情况下更新可重构模块区域内的逻辑功能,而且也能使重构配置时间大大减少。

3 结论

本文以Xilinx FPGA为研究对象,介绍了采用模块化设计实现FPGA动态部分重构功能的方法。FPGA的动态部分重构功能使硬件设计更加灵活,可以将不同设计定位到芯 片内同一逻辑资源部分,重构此部分逻辑资源,同时保持其他部分电路功能正常,从而灵活快速的改变系统设计,能够减少器件的花费,降低功耗、更有效的利用电 路板空间,可以应用于系统实时容错、自适应硬件算法等。

本文作者创新点:基于FPGA动态可重构技术将设计从一个纯空间的数字逻辑系统转换为在时间、空间混合构建的数字逻辑系统。这种技术是数字系统设计方法、 设计思想的变革,使FPGA资源利用率成倍提高。目前我国在FPGA可重构技术方面开展的研究很少。本论文阐述了采用模块化设计实现FPGA动态部分重构 的方法,能够使FPGA部分逻辑功能重新配置过程中,其余部分逻辑功能正常运行,即实现了FPGA逻辑功能的动态部分重构。

参考文献

[1]张海亮,赵行波,王亮,周祖成. 基于FPGA的可配置通信平台设计[J].微计算机信息,2006,(32)

[2] Xilinx,Inc.Virtex-E 1.8V Field Programmable Gate Arrays ,http://

[3] Xilinx,Inc. XAPP151 “Virtex Series Configuration Architecture User Guide”(2004),

http://

[4] Xilinx,Inc.Development System Reference Guide, http://

[5]Xilinx,Inc.XAPP290 “Two Flows for Partial Reconfiguration: Module Based or Difference ”,http:// www

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

与谷歌的合作使 Nordic 能够在 nRF Connect SDK 中嵌入开发人员软件,以构建与安卓移动设备兼容的谷歌Find My Device和未知跟踪器警报服务

关键字: 谷歌 SoC 嵌入式开发

为无处不在的端侧设备插上AI的翅膀,AMD发布第二代Versal™ 自适应 SoC

关键字: AMD FPGA 自适应SoC AI 边缘计算

嵌入式开发作为当今电子工程和信息技术领域的核心分支,涵盖了广泛的软硬件技术和系统集成方法,用于构建高性能、低成本、低功耗、体积小巧且功能专一的嵌入式系统。这些系统无处不在,从微型传感器节点到复杂的工业控制设备,从日常使用...

关键字: 嵌入式开发 Python

嵌入式开发是当今信息技术领域不可或缺的一部分,它融合了硬件设计、软件开发和系统集成等多个学科,专门用于创建那些被嵌入到特定设备或系统中的专用计算机系统。嵌入式开发的主要过程包括利用分立元件或集成器件进行电路设计、结构设计...

关键字: 嵌入式开发 硬件设计 软件开发

嵌入式开发作为一种专业且技术密集型的领域,涵盖了从硬件底层驱动、中间件到应用层软件开发等多个层面的工作,其所需的工具种类繁多,各有针对性,旨在提升开发效率、保证代码质量以及简化调试过程。

关键字: 嵌入式开发 keil

嵌入式开发作为信息技术领域的重要分支,其涉及的语言种类繁多,各具特色。这些语言的选择取决于目标平台的特性、性能需求、开发者的熟练程度以及项目的具体要求。本文将详细介绍几种常见的嵌入式开发语言,包括C语言、C++、汇编语言...

关键字: 嵌入式开发 C语言

嵌入式开发是一项综合了硬件设计、软件编程以及系统整合的技术活动,其目的是为了创造出能够在特定环境中高效、稳定运行的嵌入式系统。这一流程涵盖了多个紧密关联且不可或缺的阶段,从最初的客户需求分析到最终的产品测试和交付,每个环...

关键字: 嵌入式开发 硬件设计

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM
关闭
关闭