有许多已经使用了一段时间的功耗降低方法,这些方法都是成熟的技术。本章描述了一些低功耗设计的方法。
时钟门控
芯片中动态功耗的很大一部分是在时钟的配平中消耗的。高达50%以上的动态功耗都浪费在时钟缓冲器中,因为这些缓冲区在系统中有最高的跳变率,时钟缓冲有很多,并且它们通常有很高的驱动强度以最小化时钟延迟。此外,即使输入和输出信号保持不变,接收时钟的触发器也会耗散一些动态功耗。
减少这种功耗最常见的方法是在不需要时钟的时候关闭它们。这种方法被称为时钟门控。现代EDA设计工具支持自动插入时钟门控:它们可以识别电路,并且时钟门控的插入可以不改变逻辑的功能,如图2-1所示。
在原始的RTL中,寄存器的更新与否取决于变量EN。同样的结果也可以基于相同变量的时钟门控来实现。
如果涉及的寄存器是单bit的,则功耗节省会不明显。如果它们是32位寄存器,那么一个时钟门控单元可以控制32个寄存器(以及它们的时钟树中的任何缓冲区)。这可以节省大量的功耗。
在早期的RTL设计中,工程师会在RTL中明确地编码时钟门控电路。这种方法是容易出错的-它很容易创建一个产生毛刺的时钟门控电路,从而产生功能错误。今天,包括特定的时钟门控单元在内的大多数库都能被综合工具识别。显式时钟门控库可以使用自动插入从而使得时钟门控成为一种简单而可靠的降低功耗的方法。不需要对RTL进行任何更改就可以实现这个时钟门控策略。
在一篇论文中报告了一个独特的机会,他的团队最近不得不比较一个(几乎)相同的芯片实现了时钟门控和没有时钟门控的区别。作为一项节能工程,重新设计了一种现有的无时钟门控的电路芯片并在180nm工艺下实现,只对逻辑进行了一些小的更改(一些小块被删除并被其他块替换。)。
报告显示,面积减少了20%,省功耗34%到43%。时钟门控的具体省功耗比例取决于操作模式。功耗的测量来自实际的硅片,而节省的面积是由于一个单一的时钟门控细胞取代了多个选择器。
经过一些分析和实验,该团队认为只在位宽至少为3bit以上的信号才使用时钟门控。在1bit的寄存器上使用是不能做到面积及功耗优化平衡的。大部分的能量节省是由于时钟门控细胞被放置在时钟路径的早期。大约60%的时钟缓冲器出现在时钟门控之后,因此在门控过程中它们的活动减少到零。
门级功耗优化
除了时钟门控,工具还可以执行一些逻辑优化来最小化动态功耗。图2-2显示了其中的两种优化。在图的上半部分,与门输出具有特别高的活动性。因为它后面跟着一个NOR门,所以可以将这两个门重新映射到一个AND-OR门加上一个反向器,所以高活动性网络就值存在模块内部。现在,高活动性节点(与栅的输出)驱动更小的电容,降低了动态功耗。
在图的下半部分,与门已经被初步映射,以便一个高活动性信号被连接到一个高功率输入引脚,一个低活动性信号被映射到一个低功率引脚。对于多个输入门,不同引脚的输入电容和功率可能存在显著差异。通过重新映射输入,使高活动性信号连接到低功率输入,优化工具可以降低动态功耗。
门级功率优化的其他例子包括改变单元大小和缓冲器插入。在单元尺寸方面,该工具可以在整个关键路径上选择性地增加和减少单元驱动强度,以满足时序要求,然后将动态功耗降低到较小值。在缓冲器插入中,工具可以插入缓冲器而不是增加器件本身的驱动强度。如果在适当的情况下这样做,就会降低功耗。与时钟门控一样,门级功率优化是由综合等EDA工具执行的,并且对RTL设计师是透明的。