四:RTL(寄存器传输)级的低功耗设计
4.1 状态机的设计
状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit跳转,从直觉上就比较节能。
另外格雷码的好处有很多,在CDC处理的时候,格雷码可是个大救星,格雷码还可以消除毛刺等等。格雷码的特点如下:
格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量的转换中,当方向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。
格雷码是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。
由于格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取。
典型格雷码是一种采用绝对编码方式的准权码,其权的绝对值为2^i-1(设最低位i=1)。
格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同。
4.2 门控数据端
数据只要在翻转,那么就会有充放电,有充放电就会有功耗。前面提到对时钟进行gating,但是很多时候时钟gating可能会带来一些负面效应,也有些design clk无法进行gating。这个时候可以考虑将DFF端的数据进行gating。
如上图,sel无论为什么之,输入端的数据都会向后传播,对mux里面的门进行充放电。
在如上图,case语句选用one hot编码,这可以对数据进行门控。
4.3 逻辑资源共享
在设计电路时,或者撰写RTL代码时,要想着是否有些逻辑可以resource的,如下图的简单的ALU写法。
如果换成下面的写法,可能结果就比上面的要好多。目前有些工具已经相当智能,可以进行logic resource,但是好的代码风格还是要多学习,多研究。毕竟工具最终如何处理,你不是很清楚,你如果可以做的更好,工具或许也会更好。
4.4 logic enable 及disable技巧
有些大的逻辑,例如地址译码,ALU单元,在需要用的时候最好能够gating掉,这个方式其实有点类似gating data 和gating clk。
4.5 高频率翻转的线网(high activity net)
有些线网相比于其他的线网活动比较频繁,这个时候可以尝
试将其逻辑尽量往后一级摆放,这样对影响到的电路就会少很多。如下图,x1..xn的变化程度很小,但是Y则翻转很快,可以尝试做如下的处理。
4.6 总线翻转(bus inversion)
总线翻转技术并不是对所有的电路都合适,他比较适合hamming距离大于N/2的情况,其中N是数据位宽。这种方式需要额外的控制bit来表示哪些bit被invert。如下下图
文章评论(0条评论)
登录后参与讨论