RTL代码降低功耗的技巧
1、状态机的时候用格雷码,格雷码每次只有一个反转。
2、选择二进制码的时候,原码和补码需要根据需求选择,位数适当,不要太大。
3、门控时钟,编码的时候应当考虑后端工具额能否加入门控时钟。
加入了门控时钟的,
没加的,需要32个mux2
4、独热码多路器
在case语句,if和状态机,实现多路器(数据选择器),输入如果是多位的总线,就会产生明显开关过程,产生额外功耗。
如果用独热码,能够将未选中的总线隐藏掉,实现低功耗。把MUX变成了基本的门电路。
5、除掉多余的转换
读入所有的值,再进行操作,输出
先用门电路把0都pass掉。
6、资源共享
多次比较
只比较了两次,然后进行门电路判断
7、使用行波计数器
时钟进行计数的时候,当从0111变为1000的时候会短暂的出现0111,0110,0100,0000,1000。对于行波计数器使用低有效使能信号,可以使其不再产生毛刺。计数器的电路数正沿触发,当计数器的信号切换稳定的时候在时钟的低电平期间再进行读数,这样就能保证读到的数据是稳定的。但这里时钟的高电平持续的时间至少要与计数器的最大行波周期同样长,这样才能避免行波过程还在进行中,而时钟信号已经开启接收电路。这种改进方法如下图所示:
8、总线翻转