vivado-资源与功耗随笔-Xilinx-AMD社区-FPGA CPLD-ChipDebug

vivado-资源与功耗随笔

 

问题描述

 

在做一些项目的时候,拿到算法模型之后,开始进行FPGA代码的实现,在最开始的实现过程中,由于缺乏经验,往往只考虑实现功能,在资源的使用上不够“抠”,耗费了大量的LUT、FF、RAM、BUFG、DSP等各种资源,造成的后果:

 

1,资源使用超标,超过FPGA芯片资源总量,无法编译通过;

 

2,资源使用过量,使得资源余量较低,布局布线困难,容易产生时序问题;

 

3,资源使用过量,虽然时序没有问题,但资源使用过多,会使整个FPGA芯片的功耗增大,从而造成整个硬件模块的功耗增大,不仅会增大能耗,耗费成本,如果此时设备散热不好,在一定的高温条件下,会使芯片及设备功能异常,无法进行工作。

 

因此,在使用FPGA进行算法实现,及编码过程中,在设计初期就必须考虑降低功耗。

 

解决方法

 

一般来说,对于FPGA芯片,使用的资源越多,功耗越大;使用的时钟频率越高,功耗越大。而资源和时钟,也就分别代表了我们经常说的FPGA的面积和时间,这两个东西往往是矛盾的,所以这也涉及到FPGA的“哲学”问题——面积和时间的平衡。

 

我简单回顾了一下,以往使用到的降功耗的策略(不够完整,想起了再加;不够细节,有些策略涉及到具体代码才能体现),主要有以下部分:

 

1、巧用RAM

 

RAM一般是资源中较为吃紧的资源,我之前碰到过的瓶颈一般都在RAM,对于RAM来说,数据位宽很重要,合理的位宽会减少RAM的使用,比如两个1bit的RAM,例化两个分开的RAM,就不如拼起来用一个2bit的RAM。

 

而对于18kRAM来说,2bit位宽也是极大的浪费,用满18bit位宽应是最佳的选择。

 

在深度较低时,还可以适当选用RAM-based shift Register。

 

2、懂得复用

 

在处理时钟较高的情况下,可以对某些模块进行分时复用,这样虽然只例化了少量模块,但在一定时间内,可以通过高处理时钟,多次利用该模块进行运算。

 

这样就可用少量资源实现多次运算,减少例化,通信工程中的数字同步往往利用了该原理。

 

3、降低时钟频率

 

除非有特别高的处理要求,否则在设计初期,如果时钟频率能够满足要求,则不建议采用更高的处理时钟频率,频率越高,带来的功耗影响是很大的。

 

在高处理时钟频率下,布局布线也容易产生时序问题。而在一些对性能要求很高的通信系统中,处理时钟频率往往是很高的,这就对工程师的编码能力提出了更高的要求,在编码初期就要考虑如何写代码,才能让时序更优。

 

4、学会关闭时钟

 

对于vivado工程来说,善用时钟的BUFGCE功能,在某些模块不需要进行运算的时候,直接关闭该模块的时钟,将带来极大的功耗收益。

 

但该方法力求精准,不注意的话将引起功能问题。

 

5、学会关闭模块功能

 

对于整个硬件模块来说,在控制上,对于闲置的硬件模块或外围器件,要学会关闭,进行模块级的功耗最优化。

 

6,降采样率

 

一般来说,对于数字接收处理中的某些步骤(如帧同步等),采样率越高,性能越好,而相对而言,采样率越高,资源消耗越大。这时就需要找到最佳的采样率,达到性能与资源的平衡,采样率达到一定程度,使得帧同步不再是性能瓶颈,则可以采用。

 

7,不写冗余逻辑

 

毫无疑问,冗余的逻辑会增加资源的负担,从设计的角度,多考虑下不同的方法,找到最合适最简单的方法,也许有些多余的模块直接就可以省下。一千个人有一千个哈姆雷特,多和有经验的人学习。

 

8,学会资源之间互相转化,合理配比

 

资源之间是可以互换的,RAM,LUT,FF之间都可以互换,如果某一项资源紧张,则可以考虑用其他资源代替。资源之间保持合理配比,如LUT和FF的比例一般为2:1最好。

 

9,减少不必要的大功率接口组件

 

有些接口组件如GTX等,功率消耗较大,特别是在线速率较高时,因此应尽量减少使用数量。

 

10,。。。

 

这会只想到这么多,后面想起再加吧。

 

请登录后发表评论

    没有回复内容