现代的高性能DSP芯片中或多或少采取了一些与通用处理器相同的低功耗设计,如对于DSP芯片的片内存储器,就有通过设计低功耗的存储单元,采用Divided-Word-L ine (DWL)译码设计等方法来降低DSP芯片的存储器部分的功耗。但是对于SoC而言,由于其总线上挂有很多设备,导致总线的电容负载很大。如果总线与片外设备联系,那么,它还要驱动很长的片外连线以及片外设备,负载高达50pF,比SoC内部各个节点的电容负载0. 05pF高出三个量级。一般而言, SoC总线的功耗占SoC总功耗的10% ~80%;一个已经对内部电路优化过的SoC,总线功耗约占50%。随着宽度的增加,总线消耗的功率占SoC总功率的比重越来越大,因此,总线的低功耗设计很重要。
然而现代的许多高性能DSP芯片在设计过程中,并没有考虑到这一问题,随着集成电路工艺的不断提升,如何降低总线功耗的问题已经越来越重要。在文献[ 1 ]中由Paul P. Sotiriadis和Anantha P. Chandrakasan提出的一个DSM总线的线间电容的模型下,人们已经对于降低总线功耗提出了一些编码算法和译码器,并且通过在采用RISC体系结构处理器的芯片上试验取得了较好的效果,其中比较有代表性的有Bus2Invert Code译码器、T0 Code译码器等。
(1)Bus2Invert Code译码器
定义总线的宽度是N, b ( t)为内核MCU计算出来的t时刻总线数据(即编码前的数据) , B ( t)是t时刻已放到总线上的数据(即编码后的数据) , J ( t)是解码器解码后的数据, H ( t)是指b ( t)和b ( t-1)的Hamming Distance。总线传输数据时,相邻两次读取的数据都是确定的,因此可以确定两次数据b ( t)和b ( t-1)的Hamming Distance,如果2 ×H ( t) >N ,这说明总线上有超过一半的信号需要翻转,这时如果将第二次传输的数据逐位取反再传输,就可以减少信号翻转的次数。这种译码器适用于数据总线,可以在数据总线上传输随机数据时大幅降低的功耗,但是对于随机性不强的地址总线的优化并不明显。
(2) T0 Code译码器
T0 译码器的原理在于尽可能地减少总线的翻转次数,由于指令总线上的地址在多数情况下都是以相同的增量增加(在没有跳转等情况下PC = PC +N。这里N 是一个定值) ,因此规定当两个相邻的数据的差为N 时,总线上的数据不变化,只有当不为N 时才传输新的数据。如果在设计中采用T0编码的译码器和解码器,那么则在下面这种情况下可以达到最低的功耗:如果数据流中的数据都是以同样的间隔的无限序列,T0 编码可以使得在总线上传输这些数据时,总线上没有出现翻转。译码器则对于有规律性变化的地址总线的优化非常显著,而对随机性较大的数据总线的功耗降低没有什么帮助。
图1是在文献[ 1 ] 中由Paul P. Sotiriadis和Anantha P. Chandrakasan提出的一个DSM总线的线间电容的模型。从图1可以看出,当工艺水平达到深亚微米级时,总线模型已经与以往的模型发生了较大的变化,我们必须细致的考虑线间的电感效应,因此,图1模型具有较好的说明性。实际中,用到的是如图2所示经过简化的模型。
现代的高性能DSP芯片中也或多或少采取了一些与通用处理器相同的低功耗设计,如对于DSP芯片的片内存储器就有通过设计低功耗的存储单元, 采用Divided-Word-L ine(DWL)译码设计等方法来降低DSP芯片的存储器部分的功耗,而由于DSP芯片的特殊性,我们可以采用一些特有的低功耗设计SP芯片支持的常用算法有FFT, F IR等,都需要大量乘加运算,因此DSP芯片中有一个独特的部件地址生成器来提高数据的地址生成速度,而生成的地址通常为具有固定步长的地址。