【项目举例】FPGA功耗的那些事儿

2024-08-22 02:08
文章标签 项目 举例 fpga 功耗 事儿

本文主要是介绍【项目举例】FPGA功耗的那些事儿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

FPGA功耗的那些事儿

在一个设计开始前,做原理图的时候,怎么确定FPGA的电源管理芯片应该选择什么型号呢?
这就要看FPGA的功耗了,因为FPGA是可编程芯片,它的功耗和被使用的资源大小有关,例如你不能说3C120的功耗是多少多少,你只能说你的设计需要怎样的功耗。
因此在原理图设计时有必要对功耗进行估计,以便于能够选择适合的型号的电源芯片。

在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的。笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右,有点过高了,功耗过高则会造成发热量增大,温度高最常见的问题就是系统重启,另外对FPGA内部的时序也不利,导致可靠性下降。其它硬件电路的功耗是固定的,只有FPGA的功耗有优化的余地,因此硬件团队则极力要求笔者所在的FPGA团队尽量多做些低功耗设计。笔者项目经历尚浅,还是第一次正视功耗这码事儿,由于项目时间比较紧,而且xilinx方面也比较重视这个项目,因此当时有xilinx的工程师过来对我们做了些培训,并且专门请了美国总部的专家过来与我们协同进行设计功耗估计,还是比较给力的。

以下是笔者在这比较短的时间内学习到的一些关于功耗估计和如何进行低功耗设计的知识:

功耗分析

整个FPGA设计的总功耗由三部分功耗组成:1. 芯片静态功耗;2. 设计静态功耗;3. 设计动态功耗。

l 芯片静态功耗:FPGA在上电后还未配置时,主要由晶体管的泄露电流所消耗的功耗

l 设计静态功耗:当FPGA配置完成后,当设计还未启动时,需要维持I/O的静态电流,时钟管理和其它部分电路的静态功耗

l 设计动态功耗:FPGA内设计正常启动后,设计的功耗;这部分功耗的多少主要取决于芯片所用电平,以及FPGA内部逻辑和布线资源的占用

显而易见,前两部分的功耗取决于FPGA芯片及硬件设计本身,很难有较大的改善。可以优化是第3部分功耗:设计动态功耗,而且这部分功耗占总功耗的90%左右,因此所以降低设计动态功耗是降低整个系统功耗的关键因素。上面也提到过功耗较大会使FPGA发热量升高,那有没有一个定量的分析呢?答案当然是有,如下式:

Tjmax > θJA * PD + TA

其中Tjmax表示FPGA芯片的最高结温(maximum junction temperature);θJA表示FPGA与周围大气环境的结区热阻抗(Junction to ambient thermal resistance),单位是°C/WPD表示FPGA总功耗(power dissipation),单位是WTA表示周围环境温度。

XC7K410T-2FFG900I系列芯片为例,θJA = 8.2°C/W,在TA = 55°C的环境中,想要结温Tjmax不超过100°C的情况下,可以推算FPGA的总功耗:PD < (Tjmax – TA)/θJA=(100 - 55)/8.2=5.488W,之前估算的20W与之相差太远,因此优化是必不可少的:

1) 降低θJA:热阻抗取决于芯片与环境的热传导效率,可通过加散热片或者风扇减小热阻抗


1

2) 减小PD:通过优化FPGA设计,降低总功耗,这也是本文重点讲解的部分。

功耗估计

在讲解低功耗设计之前,介绍一下xilinx的功耗估计工具XPE(Xilinx Power Estimator)XPE主要是在项目初期,处于系统设计,RTL代码并未完善阶段功耗估计时使用。大家可以在xilinx官网上下载到:http://www.xilinx.com/power,它是一个基于EXCEL的工具,如图2所示,功能做的十分丰富,感叹EXCEL也未免太强大了吧


2

在设计完成综合实现后,则可以使用vivado自带的功耗分析工具进行精确计算功耗。打开综合实现后的设计,点击report power即可得到功耗分析的结果,如图34所示。


3


4

低功耗设计

关于FPGA低功耗设计,可从两方面着手:1. 算法优化;2. FPGA资源使用效率优化。

1) 算法优化

算法优化可分为两个层次说明:实现结构和实现方法

首先肯定需要设计一种最优化的算法实现结构,设计一种最优化的结构,使资源占用达到最少,当然功耗也能降到最低,但是还需要保证性能,是FPGA设计在面积和速度上都能兼顾。比如在选择采用流水线结构还是状态机结构时,流水线结构同一时间所有的状态都在持续工作,而状态机结构只有一个状态是使能的,显而易见流水线结构的功耗更多,但其数据吞吐率和系统性能更优,因此需要合理选其一,使系统能在面积和速度之间得到平衡;

另一个层面是具体的实现方法,设计中所有吸收功耗的信号当中,时钟是罪魁祸首。虽然时钟可能运行在?100?MHz,但从该时钟派生出的信号却通常运行在主时钟频率的较小分量(通常为?12%15%)。此外,时钟的扇出一般也比较高。这两个因素显示,为了降低功耗,应当认真研究时钟。?首先,如果设计的某个部分可以处于非活动状态,则可以考虑禁止时钟树翻转,而不是使用时钟使能。时钟使能将阻止寄存器不必要的翻转,但时钟树仍然会翻转,消耗功率。其次,隔离时钟以使用最少数量的信号区。不使用的时钟树信号区不会翻转,从而减轻该时钟网络的负载。

2) 资源使用效率优化

资源使用效率优化是介绍一些在使用FPGA内部的一些资源如BRAMDSP48E1时,可以优化功耗的方法。FPGA动态功耗主要体现为存储器、内部逻辑、时钟、I/O消耗的功耗。

其中存储器是功耗大户,如xilinx FPGA中的存储器单元Block RAM,因此在这边主要介绍对BRAM的一些功耗优化方法。

如图5中实例,虽然BRAM只使用了7%,但是其功耗0.601W占了总设计的42%,因此优化BRAM的功耗能有效地减小FPGA的动态功耗。



5

下面介绍一下优化BRAM功耗的方法:

a) 使用“NO CHANGE”模式:在BRAM配置成True Dual Port时,需要选择端口的操作模式:“Write First”“Read First” or “NO CHANGE”,避免读操作和写操作产生冲突,如图6所示;其中“NO CHANGE”表示BRAM不添加额外的逻辑防止读写冲突,因此能减少功耗,但是设计者需要保证程序运行时不会发生读写冲突。


6

5中的功耗是设置成“Write First”时的,图7中是设置成“NO CHANGE”后的功耗,BRAM的功耗从0.614W降到了0.599W,因为只使用了7%BRAM,如果设计中使用了大量的BRAM,效果能更加明显。


7

b) 控制“EN”信号:BRAM的端口中有clock enable信号,如图8所示,在端口设置中可以将其使能,模块例化时将其与读/写信号连接在一起,如此优化可以使BRAM在没有读/写操作时停止工作,节省不必要的功耗。


8

如图9所示为控制“EN”信号优化后的功耗情况,BRAM功耗降到了0.589W


9

c) 拼深度:当设计中使用了大量的存储器时,需要多块BRAM拼接而成,如需要深度32K,宽度32-bit32K32Bit的存储量,但是单块BRAM如何配置是个问题?7 series FPGA中是36Kb BRAM,其中一般使用32Kb容量,因此可以配置成32K1-bit或者1K*32-bit,多块BRAM拼接时,前者是拼宽度(见图10),后者是拼深度(见图11)。两种结构在工作时,拼宽度结构所有的BRAM需要同时进行读写操作;而拼深度结构只需要其中一块BRAM进行读写,因此在需要低功耗的情况下采用拼深度结构,

注:拼深度结构需要额外的数据选择逻辑,增加了逻辑层数,为了降低功耗即牺牲了面积又牺牲了性能。


10


11


总结:

  1.对于FPGA的功耗,主要分为 芯片静态功耗,设计静态功耗,设计动态功耗。芯片静态功耗和设计静态功耗不方便去优化,着重对设计动态功耗进行优化;

2.功耗定量分析公式:

    Tjmax > θJA * PD + TA

  其中Tjmax表示FPGA芯片的最高结温(maximum junction temperature);θJA表示FPGA与周围大气环境的结区热阻抗(Junction to ambient thermal resistance),单位是°C/WPD表示FPGA总功耗(power dissipation),单位是WTA表示周围环境温度。

  通过上式,若使得功耗降低,θJA可以通过加散热片或者散热风扇方法来设计;PD可以通过对算法和FPGA内部结构的设置减小总功耗;

  1)可以在前期RTL阶段,采用quartus II软件内部(笔者接触altera产品较多)自带的静态功耗估算功能,先大致计算FPGA动态功耗。功耗包括:I/O,时钟,存储器,内部逻辑;

  2)对FPGAN内部资源利用率进行设置,进一步降低功耗;

  对上面功耗估算完毕之后,可以设计FPGA硬件板卡的电源部分,通常将电源部分提供的功率要比消耗功率的多20%

 


这篇关于【项目举例】FPGA功耗的那些事儿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1094932

相关文章

Java中ArrayList和LinkedList有什么区别举例详解

《Java中ArrayList和LinkedList有什么区别举例详解》:本文主要介绍Java中ArrayList和LinkedList区别的相关资料,包括数据结构特性、核心操作性能、内存与GC影... 目录一、底层数据结构二、核心操作性能对比三、内存与 GC 影响四、扩容机制五、线程安全与并发方案六、工程

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Java中八大包装类举例详解(通俗易懂)

《Java中八大包装类举例详解(通俗易懂)》:本文主要介绍Java中的包装类,包括它们的作用、特点、用途以及如何进行装箱和拆箱,包装类还提供了许多实用方法,如转换、获取基本类型值、比较和类型检测,... 目录一、包装类(Wrapper Class)1、简要介绍2、包装类特点3、包装类用途二、装箱和拆箱1、装

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

python实现简易SSL的项目实践

《python实现简易SSL的项目实践》本文主要介绍了python实现简易SSL的项目实践,包括CA.py、server.py和client.py三个模块,文中通过示例代码介绍的非常详细,对大家的学习... 目录运行环境运行前准备程序实现与流程说明运行截图代码CA.pyclient.pyserver.py参

IDEA运行spring项目时,控制台未出现的解决方案

《IDEA运行spring项目时,控制台未出现的解决方案》文章总结了在使用IDEA运行代码时,控制台未出现的问题和解决方案,问题可能是由于点击图标或重启IDEA后控制台仍未显示,解决方案提供了解决方法... 目录问题分析解决方案总结问题js使用IDEA,点击运行按钮,运行结束,但控制台未出现http://

解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题

《解决IDEA使用springBoot创建项目,lombok标注实体类后编译无报错,但是运行时报错问题》文章详细描述了在使用lombok的@Data注解标注实体类时遇到编译无误但运行时报错的问题,分析... 目录问题分析问题解决方案步骤一步骤二步骤三总结问题使用lombok注解@Data标注实体类,编译时

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机