最近在看《硬件架构的艺术》这本书,本篇博文也是来自书中的内容。随着工艺的进步,低功耗设计显得越来越重要了。作为一个数字前端设计师,我们就来看看如何在RTL级别减低功耗。实质上在大规模ASIC设计中,当RTL级设计完成的时候,整个系统至少80%的功耗就已经确定。后端流程没有办法修复微架构,而微架构和RTL代码风格对于动态和静态功耗有极大的影响。下面就说说在RTL级别可以从哪几个方面降低功耗。
- 状态机的编码和解码
在各种状态机的编码中,格雷码是最适合低功耗设计的。因为它在状态转换过程中每次只有一个触发器变化,因此格雷码编码的状态机也消除了依赖于状态组合等式中存在毛刺的风险。图中是二进制编码和格雷码编码的比较。
- 二进制数表示方法
在大多数的应用中都是用补码表示有符号数的,但是原码与补码切换过程中,很多位都发生变化,与之相比,有符号数的变化较少,如图所示0,1的补码和有符号数表示。选用哪种表示方法,还是应该看具体的应用场合。
- 门控时钟
之前的博文中也有详细的介绍过门控时钟,这里主要从编码角度来对门控时钟进行说明。编码过程中应当考虑一下后端工具是否可以在环境设置的加入门控时钟。这里主要是举例说明,先看如下的RTL代码以及逻辑实现: