功耗主要分为三部分,分别是浪涌功耗、静态功耗和动态功耗。
浪涌功耗是指设备上电时由于巨大的启动电流所产生的功耗,不同设备的启动电流不同,浪涌功耗差异也很大,在进行IC设计时一般不需要关注浪涌功耗。
静态功耗是指设备在待机是产生的功耗,静态功耗与元件的电气特性密切相关,主要来源是晶体管的漏电流所产生的功耗。
动态功耗是指由于逻辑转换所产生的功耗。动态功耗的定义如下:
1 合理规划芯片的工作模式,通过功耗管理模块控制芯片各模块的Clock,Reset信号起到控制功耗的目的。## 系统层面低功耗
2 门控时钟,有效降低动态功耗。## clock gating 门控时钟技术
门控时钟: 在数据无效时,将寄存器时钟关闭的技术,能够有效降低功耗, 是低功耗设计的重要方法之一。
门控时钟其实就是一个逻辑模块,在寄存器的输入数据无效时,将寄存器的输入时钟置为0,而此时寄存器值保持不变,此时没有时钟翻转,避免了动态功耗。
产生门控时钟:
在IC设计中,编写RTL代码的时候,只要采用合理规范的编码风格,即可以通过EDA工具自行产生门控时钟模块。
always@(posedge clk or negedge rst_n)
if(!rst_n)
data_out<=8’b0;
else if(data_vld)
data_out<=data_in;
忽略else分支,此时意味着在data_vld无效时,data_out保持不变,此时状态与clock保持为0一致,因此具备生成门控时钟的条件。
3 多电压供电:通过控制模块的电压降低功耗
由动态功耗的计算公式可知,动态功耗与供电电压成正比,因此降低供电电压可以有效的降低功耗。
但一些时序要求不严格的电路,可以降低电压标准,以达到节省功耗的目的。
4 多阈值电压
多单元库有助于处理漏电和动态功耗问题。
典型的多单元库至少包含功能相同但阈值电压不同的单元。高阈值电压单元速度较慢但漏电流较小,低阈值电压单元速度较快但漏电流较大。而两者在面积上几乎相同,但高阈值电压单元可以降低50%的漏电流。
因此在设计时可以将对性能要求较高的电路使用低阈值电压单元,对功耗要求较高的电路使用高阈值电压单元。
这一技术工具可自动完成。
5 寄存器传输级降低功耗技术
这一层次的低功耗技术主要通过优化代码来实现。常用的手段如下
资源共享:如果实现计算较多的逻辑,一定要共享计算的结果,避免在不同的位置重复相同的计算。
去除多余的转换:如果某个转换发生后并没有后续的操作,数据不会被采样信号也不会变化,那么这就属于多余的转换,要避免。
选择合适的编码:格雷码相邻位置只有一位不同,使用得当可以有效的降低功耗。独热码可以省去复杂的译码逻辑,使用得当也可以降低功耗。