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代码级来考虑和从系统级来考虑是类似的,主要就是考虑电压、时钟频率、翻转设计

相关推荐
邹莉斯1 天前
FPGA基本结构和简单原理
fpga开发·硬件工程
悲喜自渡7211 天前
易灵思FPGA开发(一)——软件安装
fpga开发
ZxsLoves1 天前
【【通信协议ARP的verilog实现】】
fpga开发
爱奔跑的虎子1 天前
FPGA与Matlab图像处理之伽马校正
图像处理·matlab·fpga开发·fpga·vivado·xilinx
机器未来2 天前
基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
arm开发·嵌入式硬件·fpga开发
贾saisai2 天前
Xilinx系FPGA学习笔记(八)FPGA与红外遥控
笔记·学习·fpga开发
吉孟雷3 天前
ZYNQ FPGA自学笔记
fpga开发·verilog·led·仿真·vivado·zynq
行者..................3 天前
1. ZYNQ 2. MPSOC 3. FPGA 4. IO分配 5. 硬件设计
fpga开发
tsumikistep3 天前
【无标题】Efinity 0基础进行流水灯项目撰写(FPGA)
fpga开发
行者..................3 天前
FPGA学习 VIVADO Verilog 编程
学习·fpga开发