1、背景
\quad
资源、速度、功耗是FPGA设计中的三大关键因素。温度与功耗成正相关性,功耗大必然会导致温度高,高温最常见的问题是系统重启,温度高对FPGA内部的时序不利,导致可靠性下降。
2、功耗分类
1)芯片静态功耗
\quad
FPGA在上电后还未配置时,主要由晶体管的泄露电流所消耗的功耗;
2)设计静态功耗
\quad
当FPGA配置完成后,当设计还未启动时,需要维持I/O的静态电流,时钟管理和其它部分电路的静态功耗;
3)设计动态功耗
\quad
FPGA内设计正常启动后,设计的功耗;这部分功耗的多少主要取决于芯片所用电平,以及FPGA内部逻辑和布线资源的占用;
3、功耗优化
\quad
功耗优化的目的是最大限度地降低FPGA功耗同时最小限度地避免其对时序的影响。如,适时地选择布局前的power_opt_design和布局后的power_opt_design。但有时会出现功耗优化之后(运行power_opt_design)时序恶化甚至无法收敛的情况,此时可通过Tcl命令set_power_opt来控制功耗优化的对象。
如:
1)不想对某个模块进行优化
\quad
set_power_opt -exclude_cells [get_cells A]
2)只对某个时钟域优化
\quad
set_power_opt -clocks [get_clocks clkA]
3)只对某类型的cell优化
\quad
set_power_opt -cell_types{bram reg}
\quad
在Implementation阶段有专门针对功耗优化的流程,可以选择布局前优化和布局后优化。如下:
4、低功耗设计
\quad
关于FPGA低功耗设计,可从两方面着手:
\quad
1)算法优化;
\quad
2)FPGA资源使用效率优化。
\quad
FPGA动态功耗主要体现为存储器、内部逻辑、时钟、I/O消耗的功耗。其中存储器是功耗大户,如xilinx FPGA中的存储器单元Block RAM,因此在这边主要介绍对BRAM的一些功耗优化方法:
\quad
1)尽量避免对BRAM使用异步复位或置位(同触发器);
\quad
2)‘write first’‘read first’功能是防止读写冲突,但会增加额外的逻辑,如、格雷码判断读写使能或读写计数。选择‘no change’不会增加这个功能。
\quad
3)大RAM采用多个小RAM级联模式。7系列是36Kb大小,因此可以配置成32k-1bit或1k-32bit,前者是‘拼宽度’后者是‘拼深度’,当使用‘拼宽度’时同一时刻会有多个子RAM工作,当使用‘拼深度’时同一时刻只有一个子RAM工作。
5、功耗估计方法
\quad
在Vivado下,有两种功耗估计模式。一种是向量模式,需要提供SAIF(Switching Activity Interchange Format)或VCD文件;一种是非向量模式,只需要提供简单的参数即可,但估计结果不够准确。SAIF文件通过仿真生成,因此需要在Simulation Settings中进行设置
在功耗估计中选择SAIF文件
生成XPE文件
在官网下载7_Series_XPE_2019_1_2.xlsm,打开文件导入XPE文件
选择XPE文件
生成功耗结果,如Summary所示: