ASIC低功耗设计实例分析及书籍推荐
不容错过的物联网芯片及通信技术研讨会!
来源:eetop blog 作者:tfpwl_lj
原文:http://www.eetop.cn/blog/html/30/1638430-6015027.html
一、低功耗设计
随着手持便携式设备及物联应用的推广,低功耗设计的问题变得越来越重要。更低的芯片功耗,意味着手持便携设备的使用时间更长、功耗的降低使得芯片的寿命得以提高、散热问题得到控制,设备的体积可以做到更小等等之类的各种好处。低功耗设计是一个整体的概念,意思是它在每个设计层次上都可以进行功耗的优化——算法层次的优化、RTL级代码的优化、门级网表的优化、版图布局的优化等等。而且,抽象层次越高,功耗优化的程度也就越高,例如算法层次的优化可以降低70%以上的功耗,而版图布局的优化大概只有10%的优化效果。
数字集成电路功耗优化集中体现在两个方面,一是电路的低功耗优化设计,二是EDA工具的优化设计。而电路的低功耗优化设计前者是重点,即综合考虑电路性能、面积、功耗来进行功耗的优化设计。
低功耗设计的方法有很多种,就笔者所了解的信息大致分为如下几种。
a、多阈值工艺方法:不同的电路模块采用不同阈值的基本门级电路;
b、电源门控:将某一部分电路的电源通过特殊逻辑门控制,需要时再启动该电路的电源,达到降低功耗的目的;
c、多电压域:不同区域的电路模块采用不同的供电电压,比如,频率高的电路采用高电压,频率要求低的电路采用低电压;
d、门控时钟:用逻辑门控制模块时钟的停止或者开启,门控时钟可以通过DC命令的方式直接插入;
e、操作数分离;
f、门级电路优化;
g、版图优化;等等。
对于Asic设计人员来说,不同的工作岗位,所采取的优化办法并不相同。a-c是系统级设计人员的优化方法,d-f是RTL和门级设计人员的优化方法,g属于版图人员能够掌握的分析方法。这些概念太过于宽泛,如果不是亲自参与到某项应用该低功耗技术的项目中去是很难有深刻体会的,对于Asic设计者来说,无法全面掌握这些低功耗技术。
在笔者推荐的书中,有基于Power Complier(从属于DC),PTPX(Prime Time-PX)这两种软件的功耗优化流程。学习的理论大致需要掌握功耗的种类分为,
1、静态功耗-泄露功耗,
2、动态功耗-开关功耗,翻转功耗,总功耗等于以上三种功耗的总和。
软件是通过何种途径分析这三类功耗的呢?答案依然是工艺库。在综合库.lib文件中,有许多项参数都是有关于这三类功耗的,如下所示。
某个单元的泄露功耗:
cell_leakage_power : 330.503175;
leakage_power() {
when :"!A & !B & !CI";
value : 318.529800;
}
leakage_power() {
when :"!A & !B & CI";
value : 375.946200;
}
leakage_power() {
when :"!A & B & !CI";
value : 347.668200;
}
leakage_power() {
when :"!A & B & CI";
value : 309.481200;
}
leakage_power() {
when :"A & !B & !CI";
value : 312.384600;
}
leakage_power() {
when :"A & !B & CI";
value : 352.481400;
}
leakage_power() {
when :"A & B & !CI";
value : 324.199800;
}
leakage_power() {
when :"A & B & CI";
value : 303.334200;
}
某单元(!A & B) | (A & !B)情况下的内部功耗,上升沿,下降沿功耗:
internal_power() {
related_pin : "CI";
equal_or_opposite_output : "CO";
when : "(!A & B) | (A & !B)";
rise_power(energy_template_7x3x3) {
index_1 ("0.03, 0.1, 0.4, 0.9, 1.5, 2.2, 3");
index_2 ("0.00035, 0.0385, 0.3115");
index_3 ("0.00035, 0.0385, 0.3115");
values ( \
"0.067236, 0.068853, 0.068513", "0.071757, 0.070275, 0.070806", "0.080913, 0.079223, 0.078953", \
"0.067380, 0.068914, 0.068524", "0.071910, 0.070393, 0.070843", "0.081073, 0.079343, 0.079093", \
"0.072993, 0.073749, 0.073240", "0.077639, 0.075163, 0.075587", "0.086943, 0.084212, 0.084302", \
"0.088698, 0.085346, 0.084064", "0.090733, 0.087112, 0.086360", "0.100492, 0.096672, 0.095842", \
"0.104666, 0.099420, 0.097897", "0.105970, 0.100660, 0.100035", "0.115422, 0.109742, 0.108342", \
"0.123420, 0.117165, 0.114921", "0.125151, 0.118985, 0.116790", "0.133612, 0.127112, 0.125132", \
"0.145380, 0.138042, 0.134921", "0.147057, 0.139940, 0.136555", "0.155522, 0.148222, 0.145332");
}
fall_power(energy_template_7x3x3) {
index_1 ("0.03, 0.1, 0.4, 0.9, 1.5, 2.2, 3");
index_2 ("0.00035, 0.0385, 0.3115");
index_3 ("0.00035, 0.0385, 0.3115");
values ( \
"0.050492, 0.055945, 0.064903", "0.053891, 0.055156, 0.063903", "0.053922, 0.056074, 0.063853", \
"0.050468, 0.055859, 0.064843", "0.053846, 0.055057, 0.063833", "0.053880, 0.056027, 0.063783", \
"0.055162, 0.059927, 0.068953", "0.058462, 0.058987, 0.067812", "0.058500, 0.059918, 0.067832", \
"0.071414, 0.070694, 0.079333", "0.069997, 0.069600, 0.078113", "0.069993, 0.070503, 0.078113", \
"0.087095, 0.085894, 0.093292", "0.085467, 0.084469, 0.091692", "0.085322, 0.084670, 0.091722", \
"0.105947, 0.103948, 0.110322", "0.104070, 0.102399, 0.108522", "0.103914, 0.102131, 0.108572", \
"0.127727, 0.124621, 0.130342", "0.125641, 0.122880, 0.128522", "0.125412, 0.122591, 0.128302");
}
}
信息来源于前文提供的simc工艺库。
更多有关于对综合库.lib文件内容的介绍,请参阅《数字IC系统设计》,这里不再赘述。
这再次验证了之前介绍工艺库的文章中说的,综合库.lib文件真的非常重要,使用软件对RTL代码和门级网表做功耗分析都需要这些综合库参与,才能对芯片的功耗进行分析,进而优化。
二、推荐书籍:
《专用集成电路设计实用教程》
《Soc设计方法与实现》
《数字IC系统设计》
《ptpx user guide 2016》
(此外建议看一下论坛关于 low power RTL 设计优化 的帖子,里面推荐了一些相关资料。 http://bbs.eetop.cn/thread-636337-1-1.html )
三、工具
在综合的时候就可以对产生的门级网表进行初步优化,所使用的工具为DC内置程序Power Complier,通过相关命令启用功耗优化功能。该工具的使用示例请参阅《专用集成电路设计实用教程》。
门级网表优化工具,PrimeTime PX。该工具的使用示例请参阅《ptpx user guide 2016》
四、示例
由于目前并未使用到低功耗的相关技术,因此对于基于Power Complier(从属于DC),PTPX(Prime Time-PX)软件的低功耗分析流程,了解的不是很多,待以后再把这个坑填上。