摘要:分析系统芯片(SoC)设计中大电容负载的地址总线低功耗设计方法;利用地址总线零翻转编码和解码技术,有效地减少SoC地址总线活动,降低SoC芯片和系统的功耗;同时,应用于实际的SoC设计中,验证它的功能和适用范围。
引 言
面向便携式设备的SoC设计,不仅仅要求性能高、体积小,更要求功耗低。一般而言,SoC的静态功耗很小,而对负载电容充放电的动态功耗很大。
SoC内部,总线上挂着很多功能设备,导致总线的电容负载很大。如果总线与片外设备联系,那么,它还要驱动很长的片外连线以及片外设备,负载高达50pF,比SoC内部各个节点的电容负载0.05pF高出三个量级。一般而言,总线的功耗占SoC总功耗的10%~80%;一个已经对内部电路优化过的SoC,总线功耗约占50%[1]。随着宽度的增加,总线消耗的功率占SoC总功率的比重越来越大,因此,总线的低功耗设计很重要。
很多通过减少总线动态翻转来降低总线功耗的算法已经被提出来。数据总线的数据随机性较大,地址总线的地址向量连续性较大。它们传送的数值各有特点,所以,针对不同类型总线的算法也不一样。针对数据总线有bus-invert算法,针对地址总线有PBE (Page-Based Encoding)算法、WZE(Working Zone Encoding)算法等。本文利用地址总线零翻转编码方法,通过设计编码器和解码器的结构,有效地降低SoC地址总线的功耗。
1 集成电路功耗分析
数字集成电路的静态功耗非常小,往往只有nW(纳瓦)级,因此,它的功耗近似等于动态功耗[2],如式(1)所示:
其中,P表示数字集成电路的总功耗;Ci表示电路第i个节点的负载电容;Vdd表示电源电压;f表示工作频率;表示t时刻节点i的活动因子,正比于节点i的电平翻转频率。
设参数Cint表示内部节点的平均负载,Cbus表示总线各位的平均负载,Nint表示单位时间所有内部节点的平均翻转次数,Nbus表示单位时间总线的平均翻转次数。那么,式(1)可以简化为式(2):
P∝Cint·Nint+Cbus·Nbus。 (2)
因为内部节点的个数远远大于总线的位数,所以平均翻转次数Nint远远大于Nbus;而负载Cint却远远小于Cbus。前者大约只有后者的千分之一,所以,式(2)中Nbus具有很大的权重。减小Nbus,能够显著地降低P。
2 低功耗设计
2.1 地址总线零翻转编解码原理
总线宽度为N,t时刻,总线需发送的数据为Bt。如果Bt与Bt-1相等,则时刻总线状态完全不变;如果Bt与Bt-1不相等,则t时刻,总线就会发生电平翻转。Bt与 Bt-1不同的比特位数目(0≤≤N)越大,总线电平翻转的位数就越多,功耗就越大。当Bt与Bt-1互为反码,则总线每一位都要翻转,此时总线翻转的功耗。
零翻转编码法利用降低总线的电平翻转次数,来降低总线功耗。定义bt为内核MCU计算出来的t时刻总线数据(即编码前的数据),Bt是t时刻已放到总线上的数据(即编码后的数据),Jt是解码器解码后的数据。
总线连续取址时,相邻两次地址的差是相等的,定义为Stride。一般的ROM寻址Stride=1;对Cache寻址时,Stride根据Cache的寻址特性而定。如果Cache寻址步长是一个word,则Stride=2。
编码需要一个额外的状态信号INC。
零翻转编码的算法步骤如下:
① 计算bt-1+Stride,比较bt与bt-1+ Stride;
② 如果bt=bt-1+Stride,表明是连续寻址,那么Bt= Bt-1,置INC=1;
③ 如果bt≠bt-1+Stride,表明是不连续寻址,那么Bt=bt,置INC=0;
④ 接收端解码器根据INC来处理收到的总线数据。
零翻转解码的算法步骤如下:
① 计算Jt-1+Stride;
② 如果INC=1,表明是连续寻址,那么Jt=Jt-1+stride;
③ 如果INC=0,表明是不连续寻址,那么Jt=Bt。
中断和跳转子程序的多少,会影响功耗的降低。中断和跳转越少,地址向量连续性越高,零翻转编码后总线电平翻转越少,节省的功耗就越大。当地址总线一直连续寻址时,零翻转法理论上可以达到地址总线的零翻转,并且,Stride变量可以根据寻址对象的不同而设置成对应的数值。
2.2 零翻转编解码器电路结构
编码器组成左半部分。D1寄存bt-1,加法器将bt-1与Stride相加。比较器EQ比较bt和bt-1+Stride,输出INC。选择器MUX的两组输入是bt和Bt-1。
编码器是组合逻辑,不可避免的有毛刺。毛刺虽然时间很短,但依然会增加总线功耗,因此,利用D2、D3触发器来同步,过滤掉所有的毛刺。
解码器结构,在接收设备Memory控制逻辑中实现。寄存器D存储Jt-1,MUX的两组输入是(bt-1+Stride)和Bt。它的结构比编码器简单得多。
相对整个SoC而言,编码器和解码器的电路规模很小,带来的额外硬件面积和功耗也很小[3,4]。
3 验证结果分析
将零翻转法应用于SoC中,改变SoC设计的地址总线宽度,分别是8、16、32、64位。对内部地址总线和外部地址总线分别计算出优化前后的功耗,并分析结果。使用的EDA工具是Synopsys公司的功耗分析软件Power Compiler。
3.1 零翻转编码对内部地址总线功耗的影响
本测试方案中,地址总线上悬挂了15个功能模块,完全在SoC电路内部,总线每一位的负载为2.1pF。以10 000个完全连续的地址向量运行SoC,计算地址总线功耗。计算结果如表1所列。
当总线宽度N增大时,编码器的MUX宽度随之增大,它的控制信号sel的负载增加,导致sel时延增大。当N = 32时的RTL代码,基于TSMC-0.25μm工艺库,经Design Compiler综合,得出的关键路径从D1触发器时钟端到MUX的输出,延时为4.7ns。时钟频率是50MHz,编码器的延迟只占时钟周期的23.5%。这个百分比很小。解码器的结构比编码器更简单。可见,编码器和解码器都能够满足时序要求。
优化后的总线功耗降低了。其中8位总线降低幅度,达到了88.3%;而随着N的增加,功耗降低的幅度变小。由于验证的10 000组地址向量没有变,所以优化后总线活动减少而节省的功耗几乎不随N的变化而变化;而当N增大时,编码器的规模成倍增大(见表1),编码器硬件所消耗的功率上升很快。因此,编码器的功耗不断增大,总线活动节省的功耗几乎不变,导致总功耗降低的幅度越来越小。
表1 内部总线功耗测试
总线宽度N | 8 | 16 | 32 | 64 |
未优化地址总线功耗/mW | 1.757 | 1.824 | 1.877 | 2.021 |
优化后地址总线功耗/mW | 0.206 | 0.37 | 0.835 | 1.296 |
编码器硬件规模比例 | 1.00 | 2.34 | 4.89 | 9.99 |
功耗降低比例(%) | 88.3 | 79.7 | 55.5 | 35.9 |
如果地址不完全连续,那么功耗降低的幅度更小。所以,当内部地址总线宽度过大,超过32位时,不适宜应用零翻转算法。
3.2 零翻转编码对外部地址总线功耗的影响
本测试方案中,地址总线经过PAD连接到片外存储器,总线每一位的负载为50pF。运行一个带有循环和跳转的程序对片外存储器写值,总线功耗结果如表2所列。
表2 外部总线功耗测试
总线宽度N | 8 | 16 | 32 | 64 |
未优化地址总线功耗/mW | 15.944 | 16.035 | 16.505 | 17.33 |
优化后地址总线功耗/mW | 8.343 | 8.82 | 9.416 | 10.21 |
功耗降低比例(%) | 47.7 | 45.0 | 43.0 | 41.1 |
总线负载为50pF,优化后节省的功耗远大于编码器硬件产生的功耗,后者对功耗降低比例的影响减小。所以,随着N的增大,功耗节省比例降低的幅度变小。SoC总线宽度一般在64位以内,因此,零翻转编码法几乎适用于所有的SoC外部地址总线。
由表1与表2的功耗量级的差别知道,总线负载越大,零翻转法优化的功耗就越大,编码器硬件的负面影响越小。
结 语
本文介绍了零翻转编码地址总线低功耗设计方法。当地址总线一直连续取址时,通过零翻转编码,理论上可以达到地址总线电平的零翻转,限度地降低地址总线功耗。这种设计方法,既适用于片外地址总线,也适用于宽度在32位以内的SoC内部地址总线。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。