FPGA低功耗设计

FPGA低功耗设计


文章目录

  • FPGA低功耗设计
  • 前言
  • 一、功耗类型
    • [1.1 动态功耗](#1.1 动态功耗)
    • [1.2 静态功耗](#1.2 静态功耗)
    • [1.3 浪涌功耗](#1.3 浪涌功耗)
  • 二、系统级低功耗设计
    • [2.1 **多电压技术:**即工作频率、电压和功耗的关系](#2.1 **多电压技术:**即工作频率、电压和功耗的关系)
    • [2.2 系统时钟分配:](#2.2 系统时钟分配:)
    • [2.3 软硬件划分](#2.3 软硬件划分)
    • [2.4 p 或单元库选择](#2.4 p 或单元库选择)
  • 三、RTL级别低功耗设计
    • [3.1 并行处理](#3.1 并行处理)
    • [3.2 流水处理](#3.2 流水处理)
    • [3.3 资源共享](#3.3 资源共享)
    • [3.4 状态编码](#3.4 状态编码)
    • [3.5 操作数隔离](#3.5 操作数隔离)
  • 四、门控时钟
  • 总结

前言


一、功耗类型

功耗类型一般可分为动态功耗、静态功耗和浪涌功耗。

1.1 动态功耗

动态功耗主要包括开关功耗(又称为翻转功耗)和短路功耗(又称为内部功耗)。

开关功耗:对负载电容进行充放电时消耗的功耗为开关功耗。就是单bit 0 或者1的切换

短路功耗:信号的翻转不是在瞬时完成的。因此,在输入信号进行翻转时,PMOS 和 NMOS 总有一段时间是同时导通的,那么从电源 VDD 到地 VSS 之间就有了通路,形成短路电流,产生短路功耗。即反转非瞬态,电源 VDD 到地 VSS 之间的通路,形成短路电流。

1.2 静态功耗

在 CMOS 电路中,静态功耗主要是漏电流引起的功耗,往往与工艺有关。

1.3 浪涌功耗

浪涌电流是指开机或者唤醒时,器件流过的最大电流,因此浪涌电流也称为启动电流

二、系统级低功耗设计

2.1 **多电压技术:**即工作频率、电压和功耗的关系

一般来说,电压越低,功耗越低 ,但是性能往往会越差。综合功耗与性能的考虑,可以对不同的模块采用不同的电压设计。

一般来说,供电电压越大,电路延迟越小,性能越高。例如,芯片的处理器核、存储器一般需要较高的性能,所以可以采用较高的电压方案。其他外部设计,可以采用较小的电压方案,来降低功耗。

2.2 系统时钟分配:

  • 频率越高,性能越好,但功耗越大。如果设计中一视同仁都采用较高的工作频率,显然会增加无端的功耗。
  • 自适应选择工作频率。
  • 低功耗模式:不同情况时钟不同的时钟频率。

2.3 软硬件划分

决定哪一部分使用硬件来实现,哪一部分使用软件来实现,从而达到性能和功耗的最佳平衡

2.4 p 或单元库选择

选择功耗相对较低的 IP 。设计中使用到的标准单元库,虽然实现的逻辑功能相同,但也会因为工艺库的不同具有不同的电压阈值

还有一些其他可以减少功耗的系统方法,如下一些举例:

合理选择算法,例如使用查找表的方法代替乘除运算,有时可以减少一些功耗。

利用握手信号完成异步设计,省去全局时钟,也可以减少功耗。


三、RTL级别低功耗设计

3.1 并行处理

**降低时钟频率:**并行处理,可以同时处理多条执行语句,使执行效率变高。所以在满足工作需求的条件下,采用并行处理,可降低系统工作频率,减少功耗。

3.2 流水处理

本质就是一个时钟周期的**电容充放电的电压(注意是一个时钟周期):**一个连续工作的 N 级流水线设计,效率提升倍数约为 N。同并行设计一样,采用流水线设计时,也可以适当降低工作频率来减少功耗。

从另一个角度讲,流水线设计可以将一个较长的组合路径 分成 N 级流水线。路径长度缩短为原始路径长度的 1/N。此时如果时钟频率不变,则在一个周期内,只需要对电容 C/N 进行充放电,而不是对原来的电容 C 进行充放电。因此在相同的频率要求下,可以采用较低的电源电压来驱动系统,使功耗降低。(即增加FF寄存器,用流水的时序逻辑,原理:如果用连续流水的组合逻辑,在一个周期内需要对电容C充放电,那么在这一个周期内需要的电压就会比较高,如果用N级流水,那么每一个时钟周期对电容C/N充放电,那么需要的电压就较小

3.3 资源共享

使用资源共享的方法避免多个运算逻辑的重复出现,减少资源的消耗。

3.4 状态编码

减少翻转:对于一些变化频繁的信号,翻转率相对较高,功耗相对较大。可以利用状态编码的方式来降低开关活动,减少功耗。

例如高速计数器工作时,使用格雷码代替二进制编码时,每一时刻只有 1bit 的数据翻转,翻转率降低,功耗随之降低。

例如进行状态机设计时,状态机切换前后的状态编码如果只有 1bit 的差异,也会减少翻转率。

3.5 操作数隔离

操作数隔离原理:如果在某一段时间内,数据通路的输出是无用的,将输入置成固定值,数据通路部分没有翻转,功耗就会降低。 

当 sel0 = 0 或 sel1 = 1 时,乘法器 Multiplier 的输出结果并不能通过两个 Mux 到达寄存器的输入端。即寄存器并不能保存当前乘法器的结果,此次乘法运算是没有必要的。在此种条件下,采用操作数隔离,使乘法器不工作保持静态,也可以节省功耗。

操作数隔离之后,当 sel0 = 0 或 sel1 = 1 时,乘法器输入端始终为 0,没有信号翻转,乘法器没有进行额外的无效工作,所以功耗会降低。

**主要代码:**因为乘法器是组合逻辑,随时在发生计算并输出,导致数据一致翻转,如果 在某个特定条件下才计算,那么就不会时刻翻转

c 复制代码
 wire [3:0]           mul1 = sel == 2'b01 ? din1 : 0 ;
    wire [3:0]           mul2 = sel == 2'b01 ? din2 : 0 

四、门控时钟

**一般在FPGA不使用:**由于时序或抖动的原因,时钟使能信号与时钟进行"与"逻辑后,容易产生毛刺,会对数字电路产生严重影响

通俗来讲,当模块或触发器不工作时,将时钟关闭而不影响正常功能的逻辑,可以称之为门控时钟逻辑。此时时钟并不是一直存在的,所以可以形象的称之为门控时钟。

总结

从RTL代码级来考虑和从系统级来考虑是类似的,主要就是考虑电压、时钟频率、翻转设计

相关推荐
fei_sun10 小时前
【Verilog】第一章作业
fpga开发·verilog
深圳市雷龙发展有限公司longsto10 小时前
基于FPGA(现场可编程门阵列)的SD NAND图片显示系统是一个复杂的项目,它涉及硬件设计、FPGA编程、SD卡接口、NAND闪存控制以及图像显示等多个方面
fpga开发
9527华安15 小时前
FPGA实现PCIE3.0视频采集转10G万兆UDP网络输出,基于XDMA+GTH架构,提供工程源码和技术支持
网络·fpga开发·udp·音视频·xdma·pcie3.0·万兆网
able陈15 小时前
为什么verilog中递归函数需要定义为automatic?
fpga开发
fei_sun16 小时前
【Verilog】第二章作业
fpga开发·verilog
碎碎思16 小时前
如何使用 Vivado 从源码构建 Infinite-ISP FPGA 项目
fpga开发·接口隔离原则
江山如画,佳人北望19 小时前
fpga-状态机的设计及应用
fpga开发
晓晓暮雨潇潇20 小时前
Xilinx IP核(3)XADC IP核
fpga开发·vivado·xadc·ip核
CWNULT20 小时前
AMD(Xilinx) FPGA配置Flash大小选择
fpga开发
碎碎思1 天前
很能体现FPGA硬件思维的一道面试题
fpga开发