新闻  |   论坛  |   博客  |   在线研讨会
总线低功耗编码技术
hitww | 2009-12-17 21:32:28    阅读:2337   发布文章

总线低功耗编码

动态功耗的一般性公式P=

其中的电源电压V基木上是由电路的工艺决定的,也是在设计之时已经固定的值。而降低频率很明显是要牺牲系统性能的,一般情况下,这是不允许的。寄生电容在电路设计确定的情况下已经固定了,不能通过添加别的元件来减小的(这不但不减小,还要增大)。而通过减小电路的翻转几率是一个不错的选择。一般功能单位的翻转是很难把握的,而且这些单元的功耗在系统中占的比重也很小。这就需要考虑一些功耗大且数据规律的单元,这就能够很好地降低系统的总功耗。

而在数字系统中,总线的基本特点就是负载较大、走线较长,功耗大。降低总线上的翻转频率就成了节省系统总功耗的有效办法。而在完成同样功能的前提下,要降低总线上的有效翻转频率只有改变总线上传输数据的编码.研究表明,存储器功耗的相当一部分(最多可达到50%)是存储器中的bufferdecoder等电路所消耗的。而对地址总线和数据总线进行重新编码,将降低地址总线翻转率,同时,也将使得存储器模块中相关电路(bufferdecoder)翻转率的降低,从而进一步降低整个芯片的功耗。

总线的编码技术比较丰富,比较典型的有格雷码、TO编码,以及由TO发展出的TOC编码、ABLORZ编码BI等。现对这些典型编码进行介绍。

1.格雷编码技术

   格雷编码技术是利用相邻格雷码只有一位变化,没有相邻两位发生跳转的情况。当地址顺序变化,其格雷编码只是变化一位,不存在进位跳变问题,所以动态功耗比较小。二进制码与编码转换算法如下,其中B表示n位二进制数,G表示n位格雷码。采用格雷码后总线的变化位数明显降低。

B=b,b,....,b,b);

G=(g,g,…..,g,g);

二进制数转化为格雷码算法是:

g=0,g=b^b  (g=n-1,n-2,...,0);

格雷码转化为二进制算法为:

b=0,b=b^g  (g=n-1,n-2,...,0);

2.TO编码

TO是通过增加一条冗余连线INC来通知地址的接受端(解码电路)总线上的地址是否连续了。如果INC为高,表明总线上的地址是连续的,此时所有的地址总线保持不变,在接收端自动加上1,作为当前的地址;如果INC为低,表明前后两次地址并非连续,此时总线将正常地传送地址码。

TO编码公式:(B,INC)=

解码公式:(J)=

bt表示t时刻编码器的输入地址,bt-1表示(t-l)时刻编码器的输入地址,Bt表示t时刻编码器的输出地址,Bt-1,表示(t-l)时刻编码器的输出地址,INC是同步信号;Jt是t时刻解码器的输出地址,Jt-1,是(t-1)时刻解码器的输出地址。TO编码是首先判断地址是否顺序变化,若是,编码器输出地址不变,同步信号线INC置高电平,解码器收到该信号后,将上一条地址加1输出到存储器的地址线上;若不是,同步信号线INC置低电平,编码器输出当前地址,解码器则把当前地址输出到存储器的地址线上。这样当地址顺序变化时,只有一条信号线在变化,而地址线保持不变,从而降低了总线上的功耗。但是TO编码技术也有一定的缺陷,就是增加了一条同步信号线INC,而且信号线INC也有一定的功耗。

3.T0-c编码技术

T0编码技术是通过比较传输中前后数据是否与步进距离一致,若一致就编码降低总线变化位数,减少功耗。但是编码技术的不足的地方是在编码的同时增加了一位冗余的同步信号线INC,信号线INC有一定的功耗,在某些嵌入式系统中是不允许增加这样的冗余信号线,而且去掉冗余线可以节省一部分功耗。但如果简单去除线显然在编码阶段可能发生错误。具体的形式如图所示,当数据跳转到开始连续的那个首地址时,编码器就可能发生错误。

对于这个问题,假设是发生在t时刻,那么可以通过在bt的基础上加1来编码就可以解决它。T0-c编码技术的算法思想:首先计算当前程序地址bt与原程序地址bt-1的差值,若与步进距离S相等,则输出地址Bt等于原输出地址Bt-1,否则比较当前程序地址bt是否等于Bt-1,若相等,输出地址Bt等于bt+1,若不等,输出地址Bt等于bt.

4.ABLORZ编码

     与T0编码类似,ABLORZ编码也是考虑总线上传输的前后数据与步长的关系,如果符合一定的关系,那么就对数据进行编码,否则传输原数据。有所不同的是ABLORZ编码的步长不是一个确定的值,而是一组值,如果前后数据的步长在这一定的范围内,那么就对其进行编码,否则传输原数据。由于步长不再确定,就定义它为偏移量(offset)。很明显,当offset1时,即为T0编码的中心思想。而包括所有偏移量的单元就定义其为编码表(codebook)。当数据落入了编码表中的话,为了降低功耗,就需要用一些更节省功耗的码值来代替原码,否则就不能达到降低功耗的目的。定义这个用来代替原码的编码为有限权重码LWC。如果落入编码表中,即为“hit”,并且采用LWC码来代替原来到码值。否则就“miss”了,并且传输原码。

    首先需要计算前后两个原数据的步长offset=bt-bt-1(可正可负),查找codebook,若命中的话,那么codebook中对应的LWC码就与原有数据进行异或操作得到了被传输的数据Bt,并且置标志位为1;否者传输原有的数据。在接受端,根据接收到的数据和标志位还原数据。编解码公式如下:

        if       bt-bt-1=offset;      Bt=Bt-1

       elseif    bt-bt-1codebook;  Bt=Bt-1^code

       else     Bt=bt

解码形式如下:

        if        Bt=Bt-1 ;         Jt=Jt-1+S

       elseif     B^Bt-1code;     Jt=Jt-1+Si

       else      Jt=Bt

其中codebook的编码表的形式为

5.BI编码

    BIbus-invent) 编码方式是对总线上传输的前后两个数据进行比较。若前后数据的海明距离大于N/2,则将总线取反外送,否则就直接传输到总线。数据接收端收到数据后是否取反将根据冗余线来确定。

编码器原理:

  

BI编码公式:(B,INV)=

解码公式:   (J)=

bt表示时刻编码器的当前输入数据,Bt表示t时刻编码器的输出数据,INC是同步信号,H表示总线的海明距离,N表示总线位数,Jt是t时刻解码器的输出数据。硬件描述如下:

module inv(B_t,b_t_1,b_t,n_cp,clk);

  parameter code_number=31;

  output [code_number:0] B_t,b_t_1;

  input [code_number:0] b_t;

  input clk;

  input [5:0] n_cp;

  reg [code_number:0] B_t,b_t_1;

always@(posedge clk ) begin

       b_t_1 <=b_t;

       if  (n_cp<17)  B_t<=b_t;

       else  B_t<=b_t^32'b010101010101010101010101010101;

end

endmodule

     

其中b_t是输入数据,同上一级锁存的数据按位异或,计数1的个数,若大于16,输入地址b_t按位取反送至B_t,同步信号INC变为高电平;否则输入数据b_t直接送至B_t,同步信号INC为低电平。以此来完成降低功耗的目的。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
总线低功耗编码技术
2009-12-17 21:32:28
EDA技术应用前景
2009-11-09 22:51:42
微电子发展
2009-11-04 10:12:55
推荐文章
最近访客