from http://blog.csdn.net/yd4330152763132/article/details/7475596
在进行嵌入式系统设计过程中总功耗的计算是一个无法绕开的问题,在总功耗的计算过程中尤其以SDRAM、DDR、DDR2等动态随机存储器件的功耗难以把握和计算。本人在进行电源IC选型时采用估算措施,一般嵌入式系统总电流不会超过400mA,所以选择电源IC只要在500mA以上即可;电子工程师在选电源IC计算系统总功耗时,总是会在计算DRAM器件功耗时难以下手而不得不对其进行估算。本人本着将革命进行到底的精神,在闲暇时间百度一些相关资料后进行了学习总结。
1.DDR功耗计算
现以DDR为例进行功耗计算,此过程可以推广到SDRAM和DDR2功耗计算。DRAM器件功耗难以准确计算的原因是由于该类器件工作状态繁多,且系统运行过程这些状态还不断切换,这些都为功耗的计算造成了阻碍。具体计算内存的功耗不是很容易的事,我们计算的结果只是一个假定工作条件下的平均值。为了估算内存芯片功耗,首先必须了解芯片的一些基本功能,下图是DDR功能模块图:
从上图可以看到,每个BANK都有一个SENSE AMPLIRERS(读出放大器),在进行读、写、自动刷新等操作时,需要先把存储阵列中的数据进行缓存后才能进行操作,SENSE AMPLIRERS就是这个缓存器。
DDR大致有以下几种工作状态,特总结如下:
ACTIVE(激活)、Precharge(预充电)、读、写、自动刷新、自刷新
ACTIVE(激活)
用简单的一句话来描述,激活命令的作用就是将选择地址的bit信号送入读出放大器,以供下一步的读或写做准备。从字面上来理解,就是将存储矩阵电路中位信号发送到读出放大器以供外设使用,也就是将存储信号激活。
预充电(Precharge)
指关闭所有行地址线(rowline),所有列地址线(bitline)接1/2Vcc源经过足够长时间冲或放电使列地址电容电压值达到1/2VCC的动作。对不同列地址进行读或写都要进行新的预充电。
芯片上电后最先做的动作就是预充电,它是其他操作的基础。
读
芯片上电确定地址,进行预充电再进行激活处理将数值发送到读出处理器,再发送到I/O口;这就是读操作的全部流程。
写
芯片上电确定地址,进行激活处理将外设传递数据保存到读出处理器,再通过预充电操作将数据压入存储矩阵电路。
以上对sdram类器件的基本操作做了简要描述,这样对计算该类功耗计算起到了非常好的撬动作用。计算内存电源消耗的最重要的参数是操作电流Idd参数,这些值在标准的内存芯片参考手册上都可以查到。下面的列表介绍了 DDR 内存芯片的各种Idd电流的具体含义:
对应的中文表格如下图:
操作电流可分为如下几部分:
后台电源消耗(Background Power)-对应静态功耗
CKE 低电平节能状态的预充电模式:P(Pre_down)=Idd2p*VDD
CKE有效 Standby状态的预充电模式:P(Pre_stby)=Idd2f*VDD
CKE 低电平节能状态的激活模式:P(ACT_down)=Idd3p*VDD
CKE 有效 Standby 状态的预充电模式:P(ACT_stby)=Idd3n*VDD
自动刷新电流:P (REF)=(Idd5/6–Idd2p)*VDD
激活时操作电流(Activate Power)
Active 到 Precharge 操作过程中的消耗:P(ACT)=(Idd0-Idd3n)*VDD*[Trc(spec)/TACT(actual)]
读写操作电流(Read/Write Power)
写操作的功耗:P(wr) =(Idd4w - Idd3n)*VDD*WR%
读操作的功耗:P(rd) =(Idd4r - Idd3n)*VDD*RD%
读操作时 I/O功耗:P(DQ) =(Vout * Iout)*N*RD%
其中WR%和RD%指写/读操作在ACT周期中占的比重,Vout和Iout指DQ管脚的输出电压和电流,N指芯片上DQ和DQS的数目。
需要注意的是,芯片厂商的Datasheet上提供的数据通常都是在比较苛刻的条件下测量的结果比如VDD是工作在额定最大电压下(对DDR来说一般为2.7V)。遇到这种情况我们就要采取一些处理措施,办法就是根据实际电压和频率的变化,对计算的结果通过乘上变化因子进行调整:
经过调整之后,得到的就是在实际工作电压和频率下的功耗。当然,这时候计算出来的仅仅是各部分工作状态下相对独立的电源消耗情况,如果综合起来计算整个芯片的功耗,则不是简单地把各项相加就行,还要合理考虑各种状态所占的比例等实际问题,比如:所有 Bank预充电占的时间比例 BNK_PRE%,处于预充电状态中 CKE低电平占的比例 CKE_LO_PRE%,处于激活状态中CKE处于低电平的比例 CKE_LO_ACT%等等。这时,相应的公式要调整为:
单个芯片电源消耗的计算方法学会之后,我们还可以类推到整个内存模块的功耗计算。下面我们就举例来分析一下4根1G的DIMM正常工作时的电源消耗,芯片采用Samsung K4H560838D DDR333 64MX4的芯片。
假设的系统工作条件如下:
带入相应的公式即可算出芯片的功耗:
2.sdram功耗计算
SDR的功耗计算和 DDR基本相似,主要的区别在于以下几个方面:
后面是从美光网上下载的功耗计算文件,感兴趣的可以自己分析。
从上表可知:其测试电压为3.3V,时钟频率为133M,系统输出电容负载为25pF;
所有片内BANK用于预充电的时间占总时间的70%;
当CKE有效时(即时能时钟信号时)所有片内BANK用于预充电的时间即占其有效总时间的80%;
激活bank的active命令平均时间为120ns;
读取SDRAM时间占时钟有效时间的40%,而写SDRAM时间占时钟有效时间的15%,这样时钟有效传送数据时间比例为55%,即时钟有45%处于空闲状态,也就是说数据总线有45%没有传送数据;
上表展示的是依据三种不同情况计算得到的对应功耗:
worst-case是依据手册电流数据得到的最大功耗;
第二个是依据使用情况得到的最大功耗;
第三个是依据系统时钟得到的最大功耗;
从以上分析可得出,准确计算SDRAM类功耗是非常困难的,写本文目的只是想让感兴趣的分析一下。