低功耗设计(二)

        

        实际上对ASIC设计而言,在架构和RTL基本上完成的时候,功耗已经决定了80%,后端或者EDA工具对功耗的影响也只是在上述预留的功耗中修修补补,但是最终占大头的也是那80%,而且对于现在的IC设计工程师而言,必须学会一些低功耗的编码技术。

        1.状态机的编码与分解

        就是使用格雷码编码状态机,减少翻转率。而且状态机的状态大部分也是先使用组合逻辑实现N_state的变换,然后再到时钟有效沿进行state的转变,而使用格雷码编码会减小使用组合逻辑带来的时序上消极影响。

        还有一个很有意思的就是,对某些有符号的数值,不采用补码形式转变,因为补码形式造成的翻转太多,只保留最高位为符号位,剩下的表示数据,这样翻转率就降低了

        2.门控时钟

        有关于门控时钟的设计在前述的博文当中已经讲述了门控时钟的基本概念,门控时钟一般在EDA工具通过命令的方式直接加入,而在RTL编码中如何使用到门控时钟技术呢?

        其实在RTL编码当中,某些条件语句会被综合工具综合成时钟选通,综合出的电路会动态停止时钟至完整功能,在信号写入时应该考虑信号选通技术和数据路径重新排列技术从而进一步降低功耗。

上图就是加了个信号有效位,但是该信号有效位在被综合工具综合时自动综合成了时钟选通。

        3.使用独热码描述多路选择器

如果MUX的情况以独热码的编码方式实现编码,其具有更稳定的效果和更快的输出,更低的功耗,其因为独热码对应到电路中的多路复用器就是每个位置的高低电平实现,不用麻烦的用两个电平模式表示一个状态,一个电平对应一个状态,所以这种时钟方式造成的功耗更低,电路速度更快。

        4.删除冗余事务

        总线上的数据由于没有默认数据总是会不自主的改变数据信息,这就会引起功耗的增加,其实这个意思就是总线上有多个输入数据时,输出数据只能选择一个,但是选择了一个后其余几个输入数据不必要的变换会引起功耗,所以这个删除冗余事务的意思就是把其他的输入数据在没用的时候直接关掉,让其保证一个默认值,不要进行翻转。

该图就是上述的一个体现,通过en_SEL来选择有用的数据。注意这个en_SEL模块加载了前面;

 

此图就是一个是上个图中的反例,可以看到,这个EN_A  EN_B,都是通过load_op先进行选择,然后通过Operation后再通过SEL进行选择输出,但是这就会导致总线上的数据还是会先进行改变,到最后的SEL选择器上再选择输出,这就导致了不必要的功耗,所以低功耗在这方面减少冗余总线的选择就是,在这些总线上先进行选择,再输出,减少一些总线上的数据翻转。

下图是一对多的数据总线冗余

可以看到这个数据是先放到总线上,再通过SEL选择有效,这就会导致数据传输过程中的总线再进行翻转。

这是改进后的,再数据进入数据总线前已经完成选择,这就避免了传输过程中的总线翻转,降低了功耗,去除了不必要的冗余。 

 

        5.资源共享

 以这两个图违例,第一个图中进行CASE后,在赋值时,大于 大于等于,小于 小于等于,不等于,这些都是在做重复计算,后一个图就把大于等于,大于都给复用了,这就是资源共享,某些重复使用计算的模块会明显增加芯片的面积和功耗。

        6.纹波计数器

电路图及对应的波形图如图所示:

纹波计数器利用前一级的输出作为后一级的时钟驱动,这种计数器结构简单,面积小,易于实现,但是其有很多很多的缺点。

1.时钟方面来看,每一级的时钟都要先经过一个DFF的延迟才能作为后一级的时钟,不单只是输出的简单变换。

2.纹波计数器必须要有复位,要不然没有任何意义。

3.纹波计数器有多少bit就有多少个时钟,这对于STA分析工具而言,要识别很多个时钟域,这就导致STA分析工具分析过程复杂。

4.EDA工具的扫描插入时,针对每一级都有不同的时钟域,这处理起来非常复杂。

总而言之对于纹波计数器这种设计方法,设计的时候一定要慎用,在对设计无关紧要的时候可以用,但是对于大型芯片而言,比如CPU,GPU这种尽量不要用,其中一点针对上述的DFF触发器的延时很可能就会导致CPU指令的误判,这就导致很大的错误产生。

         7.总线反转技术

这个意思就是利用对称性,当IO输入的新数据和原先的数据有数据位宽一半以上的HAMMING距离后直接翻转数据进行输出,这是因为如果直接通过IO口进行数据翻转会导致很大的功耗消耗,但是在IO输入时加入这么一个判断的东西,就会直接利用上次数据进行判断输出,避免了从IO输入的直接翻转,这就降低了很大功耗,然后同时输出翻转有效信号,在数据处理时,在将数据翻转回来进行处理即可。

8.高活动性总线

这个想法就是在网络中识别变换较大的线网,然后通过识别选通线网,通常这样设置的原因是将一个变化的量放到一个逻辑模块里面,和将固定的量放到两个变化模块里面,后者相对于前者翻转率更少,面积也更小,功耗更低。如下图所示 

 

Y是活动性大的量,所以直接复制第一个逻辑模块到第二个,这样的话固定的量设计的模块造成的翻转率更低,功耗更小。

9.复杂逻辑的禁用启用 

        对于有宽位的加法器,乘法器类的复杂逻辑模块,要先根据是否使用进行选通禁用,不要进行了处理后再进行选通处理。如下图所示,第一个图就是先处理了再选通是否使用,这就造成了功耗浪费,第二个图是先进行了选通再进行处理,如果没有选通那么复杂逻辑模块就被禁用,这就会避免功耗浪费。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值