PCB论坛网

 找回密码
 注册
查看: 2438|回复: 7

如何估算整个电路的功耗?

[复制链接]
发表于 2003-1-20 14:39:00 | 显示全部楼层 |阅读模式
电路的功耗是电源设计的一个重要的参考指标,通常我们会根据要求将电源设计为一个有一定裕量,但又要避免超出太多造成不必要的浪费.
芯片的数据手册上一般会给出一定的电气参数,对芯片的电气性能进行描述,部分资料会给出一定条件下的典型值与最大值.对于没有给出具体值但功耗不能忽略的芯片,如何根据电气参数计算出一个合理的功耗呢?知道了直流电流和电压输入,是不是就可以计算功耗了?
回复

使用道具 举报

发表于 2003-1-20 16:27:00 | 显示全部楼层
基本公式就是P=IV,不过要考虑到不同状态下的不同电流(平均电流),还有不同状态在整个工作过程中所占比例,还有电压,频率的变化等等。下面我举个内存芯片的功耗计算的例子,不一定完全准确,但从实际测量结果看来相差不大。

计算内存电源消耗的最重要的参数是操作电流IDD参数,这些值在标准的内存芯片参考手册上都可以查到。下面的列表介绍了DDR内存芯片的各种IDD电流的具体含义:

电流标称        工作的条件/参数
IDD0        操作电流,Active到Precharge,一个Bank工作,Active指令最小持续周期TRC = TRC (min),DQ,DM,DQS每个时钟内状态变化一次,地址和控制信号每两个时钟改变一次。
IDD1        操作电流,Active-Read-Precharge,一个Bank工作,突发长度为2,Active指令最小持续周期TRC = TRC (min),地址和控制信号每个时钟改变一次。
IDD2P        静态电流,预充电状态中,节电模式,CKE为低电平,所有Bank空闲。
IDD2F        静态电流,预充电状态中,Standby模式,CKE高电平有效,片选信号未选中,所有 Bank空闲。
IDD3P        静态电流,激活状态中,节电模式,CKE为低电平,一个Bank激活,其它Bank空闲
IDD3N        静态电流,激活状态中,Standby模式,Active到Precharge,CKE为高电平,一个Bank工作,Active指令最大持续周期TRC = TRAS (max),DQ,DM,DQS每个时钟内状态变化两次,地址和控制信号每个时钟改变一次。
IDD4R        操作电流,读操作,突发长度为2,连续突发,一个Bank工作,地址和控制信号每个时钟改变一次。
IDD4W        操作电流,写操作,突发长度为2,连续突发,一个Bank工作,地址和控制信号每个时钟改变一次,DQ,DM,DQS每个时钟内状态变化两次。
IDD5IDD6        最大自动刷新电流,TRC = TRC (min)。
        正常自动刷新电流,TRC = 7.8125us,8K/64ms刷新率(有的Datasheet上只有IDD5)
IDD7        内部自刷新电流,分为标准芯片和低功耗芯片两种情况。
IDD8        操作电流,所有Bank交错读操作,突发长度为4,TRC = TRC (min),地址和控制信号只在执行Read和Write指令时才改变状态。

了解了这些电流的含义之后,我们就可以进行具体的功耗计算了。详细的分析可参见Micron公司的技术资料Calculating Memory System Power For DDR,TN-46-03。
后台电源消耗(Background Power):
l        CKE低电平节能状态的预充电模式:P (Pre_PND)= IDD2P*VDD
l        CKE有效Standby状态的预充电模式:P (Pre_STBY)= IDD2F*VDD
l        CKE低电平节能状态的激活模式:P (ACT_PND)= IDD3P*VDD
l        CKE有效Standby状态的预充电模式:P (ACT_STBY)= IDD3N*VDD
l        自动刷新电流:P (REF)= (IDD5/6- IDD2P)*VDD。
激活时操作电流(Activate Power):
l        Active到Precharge操作过程中的消耗:
P (ACT)= (IDD0- IDD3N)*VDD*[TRC(spec)/TACT(actual)]。
读写操作电流(Read/Write Power):
l        写操作的功耗:P (WR)=(IDD4W- IDD3N)*VDD*WR%
l        读操作的功耗:P (RD)=(IDD4W- IDD3N)*VDD*RD%
l        读操作时I/O功耗:P (DQ)=(Vout* I out)*N*RD%
其中WR%和RD%指写/读操作在ACT周期中占的比重,Vout和I out指DQ管脚的输出电压和电流,N指芯片上DQ和DQS的数目。
需要注意的是,芯片厂商的Datasheet上提供的数据通常都是在比较苛刻的
条件下测量的结果,比如VDD是工作在额定最大电压下(对DDR来说一般为2.7V)。遇到这种情况我们就要采取一些处理措施,办法就是根据实际电压和频率的变化,对计算的结果通过乘上变化因子进行调整,功率和频率及电压的平方成正比:
         2
P2=(V2/V1)(f2/f1)P1

    经过调整之后,得到的就是在实际工作电压和频率下的功耗。当然,这时候计算出来的仅仅是各部分工作状态下相对独立的电源消耗情况,如果综合起来计算整个芯片的功耗,则不是简单地把各项相加就行,还要合理考虑各种状态所占的比例等实际问题,比如:所有Bank预充电占的时间比例BNK_PRE%,处于预充电状态中CKE低电平占的比例CKE_LO_PRE%,处于激活状态中CKE处于低电平的比例CKE_LO_ACT%等等。这时,相应的公式要调整为:

l        P (Pre_PND)= IDD2P*VDD* BNK_PRE%* CKE_LO_PRE%
l        P (Pre_STBY)= IDD2F*VDD* BNK_PRE%* (1-CKE_LO_PRE%)
l        P (ACT_PND)= IDD3P*VDD*(1- BNK_PRE%)* CKE_LO_ACT%
l        P (ACT_STBY)= IDD3N*VDD*(1- BNK_PRE%)* (1-CKE_LO_ACT%)

单个芯片电源消耗的计算方法学会之后,我们还可以类推到整个内存模块的
功耗计算。下面我们就举例来分析一下4根1G的DIMM正常工作时的电源消耗,芯片采用Samsung K4H560838D DDR333 64MX4的芯片。

假设的系统工作条件如下:


         带入相应的公式即可算出芯片的功耗:


         要提出说明的是,在计算自动刷新电流值的时候,没有直接取Datasheet上提供的电流,因为那是在TRC = TRC (min)的条件下测量的平均电流,而我们一般取一个刷新周期内的平均电流来计算刷新电源功耗。(对于8K/64ms刷新率来说,每次刷新的间隔为 7.8125us)。如果Datasheet上只给出了最大的平均刷新电流,就需要估算出折合的正常刷新电流,上面的例子中,实际计算的刷新电流取给定IDD5的5%即9mA。
         一条1G的Registered内存模块(带ECC)需要由36块64MX4的内存芯片和1个PLL,两块Register构成,分为两个物理Bank。当一块Bank工作的时候另外一块处于空闲(Idle)状态,每隔一段时间需要进行自动刷新。处于Idle状态的Bank大部分时间处于Power Down模式,只有在需要自动刷新的时候CKE才会有效,所以它消耗的电源主要为P (Pre_PND)和P (REF)。仍然以Samsung芯片为例,则空闲状态的Bank中每个芯片平均消耗的电源为:P (Idle)= P (Pre_PND)+P (REF)=9mA*2.7V*86%=20.9mW。通过测量,正常工作在166MHz下的PLL和Register的操作电流分别为400mA和600mA,这样,模块总的电源消耗为:P1G=18*265.6mW+18*20.9mW+2.5V*(400+600) mA=7657mW。
         以次类推,对于4条 DIMM的内存模块组,当一个DIMM工作的时候,其他的DIMM都处于Idle状态,所以总的电源消耗为:
l        P4G= P1G+3*2.5V*(400+600) mA+108*20.9mW=17414mW
以上的计算中做了很多的假设,和实际工作不可能完全符合,但我们尽可能考虑地较为保守,所以这样的结果还是具有一定的参考价值。
SDR的功耗计算和DDR基本相似,主要的区别在于以下几个方面:
1)        SDR芯片的Datasheet中没有提供IDD2F和IDD3P的值,只有IDD2和IDD3,在计算Power Down模式下的静态功耗都使用电流IDD2,而计算Active状态下都使用IDD3电流。
2)        SDR没有IDD0电流参数,只提供了IDD1,我们可以近似的估算IDD0的值:
IDD0= [IDD1-(IDD4-IDD3)*2*tCK]/tRC
3)        SDR参数中读写操作电流只有一个值IDD4,在计算读和写操作时均使用这个电流值。
4)        SDR和DDR数据信号输出端的匹配不同,DDR中直接通过一个电阻接VTT,计算时取最坏的直流负载情况,而SDR通常是接一个容性的负载。
P (perDQ)=Cload*VDD2*fCK/2















[此贴子已经被作者于2003-1-20 16:45:26编辑过]
回复 支持 反对

使用道具 举报

发表于 2003-1-20 19:14:00 | 显示全部楼层
如果是FPGA要如何計算
回复 支持 反对

使用道具 举报

发表于 2003-1-21 09:35:00 | 显示全部楼层
阿鸣,为什么要把不同状态的功率值相加?
他们应该是处在不同时间阶段的呀!
而我觉得在设计时计算功耗只需要知道最大功耗就可以了!
回复 支持 反对

使用道具 举报

发表于 2003-1-21 11:48:00 | 显示全部楼层
内存工作的每个状态持续的时间极短,都是纳秒级的,单纯看时刻的最大功耗没有实际意义,客户要求提供平均功耗。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-1-21 16:30:00 | 显示全部楼层
阿鸣版主讲述的例子比较特殊,因为SDRAM是一种动态刷新器件,在高频的情况下,随着内部操作的不同,电流的变化是很快的;
不过象一般的MCU之类的器件,是不是知道了它稳定工作时需要的最大电流IDD,再与VDD相乘就可以得到它消耗的功率么?一般的MCU它的电流变化不会象SDRAM这样迅猛的,是不是就不用考虑时间上累加的问题呢?I/O口上的输入输出电流门限,在进行功耗计算的时候需不需要考虑?
回复 支持 反对

使用道具 举报

发表于 2003-1-21 16:42:00 | 显示全部楼层
是的,如果能知道工作时的最大电流,就可以得出最大功率,其它的可以不考虑。
还要看通过实际测量的手段还是通过Datasheet电流参数计算的方法?
回复 支持 反对

使用道具 举报

发表于 2003-1-22 11:41:00 | 显示全部楼层
great with aiming....
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|手机版|PCB设计论坛|EDA论坛|PCB论坛网 ( 沪ICP备05006956号-1 )

GMT+8, 2024-5-14 19:24 , Processed in 0.120869 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表