引言
目前计算功耗的工具主流有三个voltus,ptpx,redhawk,业界基本以ptpx为准,关于ptpx功耗的计算,以前写过,连接如下。值得聊的是:网上有大量介绍功耗计算的文章,都是根据教科书或者userguide来写的,虽然写到了晶体管级,但是实用性并不大(我写的这三篇也一样)。
实际项目经常碰到的问题是:
1.项目开始评估时,希望知道芯片的大概功耗值,以便评估封装设计成本、散热成本、产品竞争力等,怎样才能给一个比较准的?
2.在项目做到中后期的时候,怎么评估出和实测比较接近的功耗?
STA_FILE
包含每一个instance的输入/出pin的transition time,timing window,时钟频率。
FREQUENCY
定义芯片上的主频,或者是占芯片大部分功耗的最低频率。
GSC FILE
用Global Switching Configuration(GSC) file对instance和block设置合适的翻转状态,比如有时mem会设置为HIGH.
toggle rate
instance的toggle rate定义为在一个时钟周期内,从0到1和1到0状态跳变的总和。为了最准确的功耗分析,你必须编译并输入最佳的toggle rate信息,来说明设计中instance的平均翻转情况。例如,时钟网络相对于其时钟的toggle rate为 2.0,因为net在一个时钟周期内从 0->1 和 1->0 各切换一次。
你做IR分析的时候有单独为某些instance做过toggle rate设置吗?方法:把ITR_OVERRIDE_BPFS设为1 ,INSTANCE_TOGGLE_RATE_FILEs ../../file1 (file1里面第一列写instance name,第二列写翻转率数值)
BLOCK_POWER_FOR_SCALING
基于用户已知的功耗数据(PTPX计算获得),对block,instance,cell用功耗评估翻转率。通常通过以下两种形式反标:
1.CELLTYPE <CELL NAME> [<pwr_W>?<Vdd_pin>?]
2.FULLCHIP <BLOCK INSTANCE NAME> [<pwr_W>?<Vdd_pin>?]
POWER MODE
POWER_MODE APL:cell的功耗数据来自APL文件,如果没有APL文件,工具会去读.lib里面的相关数据。
INPUT TRANSITION
定义 STA 文件中未指定的所有instance的输入引脚的输入transition time。一般为0.2ns.
Specifying Supply Net
以下关键字定义了电源net及其电压。
VDD_NETS { <Vdd net_name in DEF> <value in Volt>}
GND_NETS {<Gnd net_name in DEF> <value in Volt>}
以上设置为啥和功耗相关呢?细细品读那三篇链接文章,应该可以看出来。
功耗计算的命令
导入所有设计数据并设置适当的 GSR 关键字值后,可以使用以下命令开始计算功耗:perform pwrcalc.
PTPX和redhawk 计算功耗的对比
1.toggle rate的设置
redhawk设置时钟网络(both clock pin and clock buffer outputs)和非时钟网络的翻转率。脚本设置如下:
TOGGLE_RATE <non_clock_TR>?<clock_network_TR>?
PTPX设置register/clock_gating_cells/black_boxes/memory翻转率。脚本设置如下:
set_switching_activity -toggle_rate 0.1 -type registers
从以上设置可以看出,PTPX的设置对于设计更合理一些。
2.功耗计算输入文件
redhawk功耗计算输入文件为ate文件,spf文件,APL文件或者lib文件;PTPX功耗计算输入文件gate netlist,sdc,lib,spf文件。
3.功耗用途
redhawk功耗一般用来做IR/EM分析;PTPX功耗一般用来做产品功耗评估。