这一部分描述了:
• 时钟门控的级别。
• 实现最大效果的时钟门位置。
• 实现有效和高效时钟门控的集成方法。
时钟树是由时钟缓冲器构建的,这些缓冲器在时钟源(时钟输入或PLL)与时钟终端(寄存器或RAM)之间的物理距离上传播时钟。在树的分支上添加额外的缓冲器,以平衡每个同步终端处的时钟到达时间。这有助于通过在同步元素之间允许逻辑传播的最大时间来实现时序闭合。
时钟树缓冲器中的时钟切换会消耗动态功耗,无论在终端是否执行任何有用的工作。因此,为了构建一个功耗高效的系统,除了对终端进行门控外,还需要尽可能对整个时钟树进行门控。
在空闲情况下,如果没有高级时钟门控,时钟树功耗将主导动态功耗消耗。
1.1 时钟门控级别
这一部分描述了系统中可能存在多个级别的时钟门控。本规范使用以下分类:
• 低级别:由综合工具自动插入的时钟门。
• 中级别:在组件内部实例化的时钟门控,通常是同步控制的。
• 高级别:整个时钟域的实例化门控。
这些时钟门控级别是互补的,应该在结构内部存在其他级别的情况下进行实现。每个级别都具有不同程度的功耗节省和时间粒度的优势。图7.1提供了这些时钟门控级别的示意图。
低级别时钟门控
低级别时钟门是由综合工具插入的,它们直接放置在一组触发器的前面,并替代了启用功能,从而节省了面积和功耗。
低级别门的粒度非常细致。在理想情况下,具有低级别时钟门的终端在触发器不更新时被门控。然而,它们只对触发器进行门控,而不对时钟树进行门控,并且由于下面解释的原因,不能在整个设计中放置。
这些时钟门的启用是从RTL中表示的触发器的功能启用中推导出的。在功能启用由最少数量的触发器共享的地方插入时钟门。这个最小数量由综合约束设置,通常基于重构的功耗-面积平衡点。
图7.2和图7.3说明了一个使用多路反馈的标准触发器使能,以及如何通过合成工具对其进行重构以为触发器添加时钟门。
然而,由于以下原因,综合工具有时不会插入低级别时钟门:
• 没有启用。
• 启用未被综合工具识别。
- 这可能是因为启用逻辑上过于复杂,或者不以综合工具容易识别的方式结构化。
• 在所需的时间窗口内,启用项可能过于逻辑复杂。
• 由启用控制的触发器数量少于综合约束设置的最小阈值。
因此,低级别时钟门控虽然非常重要,但由于对子集触发器和大多数时钟树缺乏时钟门控覆盖,无法产生完全功耗高效的系统。
中级别时钟门控
这些时钟门是由设计人员在RTL中实例化的,用于在操作期间空闲的逻辑块的门控。
启用由周围逻辑控制,并且通常在单个时钟周期内同步启用和禁用,以对功能操作透明。由于这些启用需要满足同步定时要求,时钟门仍然被放置在时钟树的较低位置。此放置避免了逻辑和时钟门之间的偏差,从而缩小了启用时间窗口。
尽管对设计的较大部分进行门控,但这些中级别时钟门并未对整体时钟树进行大规模的门控。门控的确切数量取决于设计的定时要求和启用的逻辑复杂性。为了构建一个完全功耗高效的系统,需要额外的门控。
高级别时钟门控
这些时钟门是按时钟域插入的,并理想地放置在时钟树的根部。当时钟域空闲时,这种布局导致动态功率接近于零。
时钟根和终端之间的时钟延迟通常大于同步信号传播的定时窗口。因此,启用控制信号必须被视为与时钟终端异步的。
由于以下原因,这给动态时钟门控带来了问题:
• 设备处于空闲状态,时钟被门控。
• 请求设备活动和时钟变得可用之间存在延迟。
因此,需要一种方法来提供与时钟供应和移除相关的保证,以确保组件的正确操作。这在7.1.2高级别时钟门控方法中进行了描述。
尽管这种技术提供了最大的节省,但它可以应用的粒度要低得多,因此重要的是与其他门控级别结合使用。