FPGA低功耗设计
文章目录
- FPGA低功耗设计
- 前言
- 一、功耗类型
- 1.1 动态功耗
- 1.2 静态功耗
- 1.3 浪涌功耗
- 二、系统级低功耗设计
- 2.1 **多电压技术:**即工作频率、电压和功耗的关系
- 2.2 系统时钟分配:
- 2.3 软硬件划分
- 2.4 p 或单元库选择
- 三、RTL级别低功耗设计
- 3.1 并行处理
- 3.2 流水处理
- 3.3 资源共享
- 3.4 状态编码
- 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,没有信号翻转,乘法器没有进行额外的无效工作,所以功耗会降低。
**主要代码:**因为乘法器是组合逻辑,随时在发生计算并输出,导致数据一致翻转,如果 在某个特定条件下才计算,那么就不会时刻翻转
wire [3:0] mul1 = sel == 2'b01 ? din1 : 0 ;
wire [3:0] mul2 = sel == 2'b01 ? din2 : 0
四、门控时钟
**一般在FPGA不使用:**由于时序或抖动的原因,时钟使能信号与时钟进行"与"逻辑后,容易产生毛刺,会对数字电路产生严重影响
通俗来讲,当模块或触发器不工作时,将时钟关闭而不影响正常功能的逻辑,可以称之为门控时钟逻辑。此时时钟并不是一直存在的,所以可以形象的称之为门控时钟。
总结
从RTL代码级来考虑和从系统级来考虑是类似的,主要就是考虑电压、时钟频率、翻转设计