重定时流水线多种低功耗方法的优异权衡

SNUG China 2017 2017 20 页

重定时流水线多种低功耗方法的优异权衡

会议: SNUG China 2017 作者: Chris Meng (AMD Shanghai) 页数: 20 源文件: SNUG_CN_Trade_Excellent_Tradeoff_on_Several_Low_Power_Methods_for_paper.pdf


Page 1

重定时流水线多种低功耗方法的优异权衡

Chris Meng AMD Shanghai www.amd.com

摘要

流水线是几乎每个数字芯片中都存在的基本电路结构。重定时流水线是先进芯片设计中的高效设计方法。现代强大的综合工具可以移动寄存器并平衡流水线以实现高频率。同时还有一些方法可以进一步降低面积和功耗。本文介绍了三种降低重定时流水线功耗的方法。第一种是结构布局,它可以避免不同阶段的逻辑路径相互交叉,同时有助于时序和降低面积。第二种方法,XOR自门控,可以大幅降低功耗,但面积代价很大。第三种方法是基于条纹的自门控。重定时后的网表中存在一些条纹结构。在每个条纹内部,我们可以仅在第一阶段进行自门控,然后将"变化"信号传递到后续阶段。与第二种方法相比,它可以减少一些面积开销,同时仍能获得相当好的功耗节省。因此第三种方法可以在面积和功耗之间获得优异的权衡。本文还将分享在进行这些低功耗探索时的一些经验和技巧。


Page 2

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

目录

1. 什么是重定时流水线 .......................................................................................................................................... 4 1.1 重定时的好处..........................................................................................................................................4 1.2 PPA权衡的难点..............................................................................................................................4 1.3 重定时流水线的RTL编码指南 ...........................................................................................6 1.4 低功耗需求 ..............................................................................................................................7 2. 当前问题与先前工作 ............................................................................................................................................ 7 3. 结构布局 ................................................................................................................................................... 7 3.1 思路......................................................................................................................................................................8 3.2 步骤....................................................................................................................................................................8 3.3 一些调优和技巧 ...................................................................................................................................9 3.4 重定时综合调优结果 ...............................................................................................................9 4. 自门控 ................................................................................................................................................................... 10 4.1 什么是自门控 ....................................................................................................................................... 11 4.2 如何实现自门控.................................................................................................................................. 12 4.3 收益和代价 ............................................................................................................................................ 12 4.4 结果 ............................................................................................................................................................... 13 4.5 一项改进 .......................................................................................................................................... 13 5. 基于条纹的自门控 .......................................................................................................................................... 13 5.1 什么是条纹............................................................................................................................................. 14 5.2 如何找到条纹 ...................................................................................................................................... 15 5.3 如何修改网表 ................................................................................................................................. 16 5.4 结果 ............................................................................................................................................................... 16 6. 讨论与未来改进 .................................................................................................................. 18 6.1 形式验证检查 ................................................................................................................................................. 18 6.2 时序等价性检查 .............................................................................................................................................. 19 7. 结论................................................................................................................................................................. 20 8. 参考文献................................................................................................................................................................... 20

图表目录

图1. 重定时流水线设计基础.............................................................................................................4 图2. 简单的RTL修改 ................................................................................................................................................6 图3. 复杂重定时设计 ........................................................................................................................7 图4. 新布局规划和边界 .......................................................................................................................8


Page 3

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图5. 触发器布局 .............................................................................................................................................9 图6. 重做重定时后的触发器和组合单元 ...............................................................................9 图7. 重定时流水线时钟门控效率报告 .......................................................................... 10 图8. 重定时流水线时钟门控效率报告 .......................................................................... 11 图9. 自门控结构示例 ................................................................................................................ 12 图10. 变化检测器和后续阶段时钟门控................................................................................ 14 图11. 流水线中的条纹 ............................................................................................................................ 14 图12. 如何找到条纹.................................................................................................................................. 15 图13. 重定时流水线中的2级条纹 ............................................................................................... 15 图14. 网表中的详细步骤 .............................................................................................................................. 16 图15. 每种方法的面积............................................................................................................................... 17 图16. 每种方法的功耗 ........................................................................................................................... 18 图17. 每种方法的功耗 ........................................................................................................................... 19

表格目录

表1. 按阶段数和频率扫描的面积/功耗结果 ..................................................5 表2. 调整高度和放宽约束的面积结果 ............................................................................. 10 表3. 三种实现自门控的方法 .............................................................................................................. 12


Page 4

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

1. 什么是重定时流水线

在当前的IC设计行业中,流水线是非常基本的电路结构。它是高频芯片设计的常用和流行方法。设计流水线有一种快速方法——重定时。设计者只需要将主要功能编码为一个大逻辑云,然后在其后面添加移位寄存器。接下来让综合工具,如Synopsys Design Compiler,将寄存器移动到网表中逻辑云中的适当位置,以获得平衡的流水线,从而实现高频率。图1展示了基本概念。

图1:重定时流水线设计基础

1.1 重定时的好处

虽然设计者可以手动进行流水线分割,但这项工作非常繁琐、费力,而且很可能手动分割仍无法获得好的结果,或者说很难设计出良好平衡的流水线。重定时的另一个优势是很容易改变流水线的阶段深度,只需修改一些简单的参数,然后交给工具进行重定时综合,就可以得到阶段更短或更长的新网表。如果做手动流水线,每次需要调整流水线阶段时,都必须重新完成所有这些繁重的工作。重定时的另一个优势是可以轻松扫描流水线阶段数以找到最佳平衡点,这可以大大提高设计效率。因此RTL设计者可以更多地关注复杂和高级的功能,不需要在低级的流水线阶段分割上花费任何精力。这可以释放设计者的大量时间和精力。

1.2 PPA权衡的难点

但重定时流水线设计中存在一些难点。首先是如何正确定义阶段数。对于高频设计,更深的流水线有帮助。但如果使用更多的触发器,功耗通常会增大。


Page 5

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

对于较短的流水线,由于时序非常紧张,组合逻辑会变得更大。为了探索决定适当阶段数的最佳权衡,我们将进行二维扫描N-F(阶段数 vs. 频率),然后同时检查面积和功耗。

在表1中,有一个大型重定时模块的一些结果数据,我们在14nm工艺上对阶段数从10到16扫描,频率从1.8GHz到2.2GHz。我们发现当流水线更深时,在某些情况下总面积会下降。主要贡献是组合单元面积减小,它可以补偿触发器面积的增加,特别是对于1.8G曲线。但看看功耗,它总是随着流水线深度增加而上升。原因是触发器的功耗对总功耗的贡献很大。换句话说,触发器的功耗密度比组合单元大。这给了我们一个提示,在进行低功耗流水线设计时,减少触发器面积比减少组合单元面积更重要。有时我们可以接受组合单元面积稍大但触发器数量更少的情况,前提是最终功耗确实降低并且经过仔细权衡。我们还发现1.9G曲线同样存在这种情况,16阶段的面积小于15阶段,但功耗更大,主要是因为触发器更多。这里还有一个注意事项,此表中的功耗仅来自一次测试,如果我们想更深入地调查,需要运行更多典型测试的功耗以获得整体视图。

当我们设计芯片时,必须始终同时考虑频率、面积和功耗。功耗越来越重要。频率与性能高度相关。面积与成本高度相关。所以我们总是说PPA 功耗性能面积权衡,以获得更好的性能/功耗比或性能/成本比。

表1. 按阶段数和频率扫描的面积和功耗结果


Page 6

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

1.3 重定时流水线的RTL编码指南

SynopsysDesign Compiler具有强大的重定时功能。它几乎可以在任何设计上移动触发器,当然应保持相同的时序功能。但当我们为重定时流水线做综合时,有一些限制,我们应该遵循推荐的编码指南,以获得最佳结果。重定时流水线的编码指南如下。

1. 简单清晰的结构

我们推荐如图1上半部分所示的结构。首先将主要功能编码为一个大的长组合逻辑云,然后跟随一个规则的移位寄存器。Synopsys也推荐这种结构。Design Compiler会将触发器向后移入逻辑云。

还有一些其他结构也是允许的,例如将移位寄存器放在逻辑云之前,工具将进行前向移动。或者在设计中部的某些寄存器。但我们的大多数重定时设计都遵循推荐的结构,并且获得了良好的结果。

2. 每一级移位寄存器只有一个时钟门控器

通过这种结构,工具将更容易在重定时网表上进行时钟门控,RTL移位寄存器的时钟门控器将被保留,它们将在重定时后的网表中控制完全相同阶段的触发器。也就是说,每个阶段的时钟门控器随触发器一起移动。

我们遇到过一些情况,移位寄存器的RTL中有两个或更多时钟门控器,然后重定时综合结果非常差。有些阶段存在巨大的时序违例,有些阶段则有大的时序裕量。似乎工具在不同时钟门控器下移动触发器太难了,即使其中一些处于同一阶段。在我们按照每个阶段一个时钟门控器的简单风格稍微修改RTL后,时序突然变得非常好,面积也大大减少。实际上这只是一个非常轻微的RTL修改。

图2:简单的RTL修改

3. 不要在重定时流水线范围内添加任何其他东西

我们遇到过另一个复杂设计,当前重定时模块内有一些其他东西,我们想对整个模块进行重定时。重定时结果不好,流水线不平衡且奇怪。在我们挑选出一个较小的范围(图3中蓝色圆圈所示)后,可以获得非常好的结果。这里的另一个经验是将时钟门控使能信号的逻辑及其寄存器放在重定时模块范围之外,如图3中那些"valid"移位寄存器所示,我们只需要将每个valid信号作为时钟门控使能信号传递给重定时流水线范围。


Page 7

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图3:需要做重定时的复杂设计

1.4 低功耗需求

除了时序和面积,我们还希望实现更低的功耗。对于普通流水线,功耗主要由三类组成:寄存器功耗、组合单元功耗和时钟功耗。对于每一类,我们希望找到尽可能多的方法来降低它们。减少单元面积是主要方法和首选。我们建立了功耗测量流程,通过在网表级仿真上运行一些典型测试来准确测量功耗。

对于重定时流水线,我们已经有了每级时钟门控,并且设计者尝试尽可能收紧valid信号。看起来还不错。但在深入检查网表级详细的功耗数据和每个触发器比特的时钟门控效率后,我们发现了进一步降低功耗的更多机会。以下各节将介绍两种方法。

2. 当前问题与先前工作

过去几年,我们一直使用自底向上的综合策略。我们对流水线本身进行重定时综合,然后将其放入模块顶层。我们发现顶层总是有一些与重定时流水线中触发器相关的非常糟糕的时序路径。过去我们不得不在重定时流水线综合时施加过约束,希望使其时序路径更短。然后放入顶层,这样就不会出现与之相关的糟糕路径。

我们已经使用这种过约束方法很多年了。代价是显而易见的,重定时流水线的面积比不设过约束的情况更大。即使采用这种方法,顶层的结果也不稳定,一些与重定时流水线相关的糟糕路径仍然偶尔且意外地出现。这种面积增长是不必要的!

3. 结构布局

我检查了顶层重定时流水线的路径,不同阶段的路径彼此严重交叉,就像一团糟的面条。从数据流或架构的角度来看,不同阶段的路径与另一个阶段的路径不应有任何关系。


Page 8

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

所以它们不应该交叉。似乎当前的综合 Synthesis布局布线 PnR工具没有足够的能力,或者它们不够强大,无法将它们以直线前向的方式放置,使数据流平稳进行,就像图1下半部分的结构一样,这种结构几乎可以匹配物理视图。工具可能需要一些帮助或指导才能做得更好。

3.1 思路

让我们想想五十年前,如何设计流水线电路。那时,设计者手动绘制版图,放置晶体管,连接信号,使数据流平稳。这正是我们应该设计流水线的方式。但在当前的IC设计时代,不可能做如此繁琐的手动工作,我们也不需要如此详细地做。有一些物理约束可以用来指导Design CompilerIC Compiler工具按照我们的意图或规划做某些事情,例如使用若干边界来控制单元组的位置。遵循这个思路,我为重定时流水线开发了结构布局流程。

3.2 步骤

第一步,我们应该对其进行重定时综合。我们可以重用原来的方式,自动DEF重定时综合,Design Compiler工具可以根据单元面积和利用率创建方形DEF。下一步,我重新做其布图规划,创建一个狭窄的矩形形状,其大小由一个简单方程计算:单元面积除以利用率。然后设置端口指导:输入端在左侧,输出端在右侧。

主要步骤,为每个阶段的触发器创建若干边界,距离和宽度值根据单元数量、平均单元面积和利用率计算,位置不需要非常精确。图4展示了新布图规划和每个阶段触发器的边界。

图4:新布图规划和边界

然后我将执行一个compile_ultra步骤,使用禁用重定时选项。这一步的目的主要是将单元放入新的布图规划中,并将每个阶段的触发器放入其边界区域内。两个阶段触发器之间的组合单元将自动位于它们之间,这正是我希望看到的。如果我们想更精确地控制,也可以为每个阶段的组合单元使用边界。经过这一步,结果显示在图5中,展示了每个阶段的触发器。单元面积和单元数量都减少了,主要是由于不交叉。

触发器数量也减少了,log文件中有一些行说明某些触发器与其他触发器合并了。为什么前一步网表中会有重复的触发器?我深入检查了这一点,在第一次重定时综合步骤中(自动DEF,方形形状,严重交叉),一些信号必须通往不同方向,因为"大量面条必须压平在一个盘子上",如果工具想将触发器移动到这个位置来平衡流水线,就会插入重复的触发器。在这种新方法中,那些重复的触发器是不必要的,可以移除它们以节省面积和功耗。


Page 9

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图5:触发器布局

最后一步,我再次进行重定时。令人惊讶的是,面积再次减小,触发器数量进一步减少。为什么?原因是当数据流平稳进行时,工具可以在逻辑云中找到更好的合适位置,比如"窄腰",将触发器移到此狭窄切割处。我检查了每个阶段的时序路径和每个阶段的单元,它们仅位于两个阶段触发器之间,不再交叉,不再重叠。再次重定时后,一些新触发器移出了边界,这没关系,我们可以允许工具将触发器移动到更好的位置以节省面积和功耗。这些边界只是指导,帮助工具作为第一步朝着更好的方向前进,不是非常严格的限制。

图6:重做重定时后的触发器和组合单元

3.3 一些调优和技巧

要获得更好的结果,有一些精细调优可以帮助更多。不同的重定时流水线有不同的阶段数,逻辑云大小不同,连接也不相同。我们可以尝试不同的宽高比或矩形布图规划的不同高度,看哪个能得到最好的结果。我们也可以逐渐放宽时序约束,直到与顶层模块的时钟周期相同,或稍短一些以留出一些裕量。在顶层,我们可以保持这些重定时流水线的相同或类似拓扑结构,以保持同样干净的时序。我们不再需要那个过约束。

我还发现一些库单元可以帮助减少面积和改善时序,例如一些快速XOR单元。我们的库中有一些这类特殊单元。另一个经验是我们可以对某些同步复位触发器设置dont_use,重定时结果会稍好一些,也许工具移动普通触发器比复位触发器更容易。实际上这可以匹配我们的设计意图,这些重定时流水线中的触发器不需要做同步复位,所以只使用普通触发器就可以了。

3.4 重定时综合调优结果

我们将结构布局方法应用于几个重定时流水线,并尝试了上述几种调优和组合。结果显示在表2中。最大面积节省可达19.82%,这是一个巨大的面积缩减。然后我们选择最佳结果将它们放入顶层。


Page 10

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

表2. 调整高度和放宽约束的面积结果

4. 自门控

我们运行gatesim获得完整的SAIF 开关活动交换格式文件,并使用PrimeTime PX报告功耗。PrimeTime PX还可以对时钟门控效率进行深入分析,报告Q/Clk翻转比。实际上Q/Clk翻转比是降低功耗的关键。我发现这些重定时流水线的Q/Clk翻转比非常低,如图7所示,仅列出排序后的触发器,其中有5000多个触发器。这6个重定时子模块都只有非常低的Q/Clk翻转比。我继续检查一个重定时模块,报告每个触发器的Q/Clk,如图8所示,只有少数触发器有一些翻转,许多触发器只有非常少的翻转或几乎没有翻转。这提示我们可以使用XOR自门控来节省一些功耗。

图7:重定时流水线时钟门控效率报告

Page 11

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图8:重定时流水线时钟门控效率报告

4.1 什么是自门控

XOR自门控是一种强大的降低功耗方法。如果某些触发器的Q/Clk翻转比非常低,或者换句话说,我们已经给出了大量时钟脉冲,但只有少数几次触发器的值发生了变化,许多时钟脉冲只是翻转而没有实际效果。我们可以添加每个比特的XOR单元,然后进行OR运算,作为时钟门控使能信号来进行时钟门控 Clock Gating插入。通过这种方式,可以实现非常高的时钟门控效率。在最佳情况下,几乎可以实现100%的Q/Clk翻转比,这意味着只有当触发器的数据值需要改变时才给时钟脉冲,否则停止时钟。基本结构如图9所示。


Page 12

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图9:自门控结构示例

4.2 如何实现自门控

有几种方法可以实现自门控。一种是直接将代码写入RTL,然后工具可以使用这个"变化检测"信号作为时钟门控信号,或与其他功能时钟门控使能信号结合使用。第二种方法是使用综合工具进行自门控插入,用户可以设置自门控选项,然后在选定的寄存器上设置属性进行自门控。然后只需在compile_ultra命令中添加一个选项"-self_gating"。第三种方法是使用SAIF驱动的综合,工具可以知道哪些触发器的翻转比非常低,并根据其内部评估的功耗节省程度进行自门控。之后,用户可以使用命令"report_self_gating"检查结果。更多细节请查阅Synopsys用户手册。

方法1(代码示例):

always @(posedge clk)
if (enable) // 功能时钟门控使能信号
   if ( din != q) // 新数据到达时
      q <= din;

方法2(命令示例):

set_self_gating_options ***
set_self_gating_object –include ***
compile_ultra –gate_clock –self_gating ***
report_self_gating

方法3(命令示例):

set_self_gating_options ***
read_saif  your_saif_file
compile_ultra –gate_clock –self_gating ***
report_self_gating

表3. 三种实现自门控的方法

4.3 收益和代价

我们知道自门控方法可以获得非常好的功耗节省,因为它可以尽可能减少"无用"时钟脉冲的功耗。但我们也知道这种巨大的功耗节省不是免费的,它的代价很大。首先是面积代价,对于每个触发器比特,我们需要添加一个XOR单元来获得"变化"信号,然后我们需要对几个"变化"信号进行OR运算,然后为几个触发器添加一个时钟门控单元,通常6到8个触发器共享一个时钟门控单元。


Page 13

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

第二个代价是时序也会受到一点损害。因为对于某些路径,时序已经很长,当我们进行自门控时,D引脚输入网络的信号将经过XOR和OR单元,然后到达时钟门控器的E引脚,这些路径变得更糟,工具必须膨胀一些面积来修复时序。

4.4 结果

我对重定时网表中的所有触发器进行了自门控,然后运行gatesim和PrimeTime PX检查其功耗。面积代价和功耗节省将在下一方法与后续方法一起展示,并在下一节讨论。

4.5 一项改进

在运行gatesim并使用PrimeTime PX获取自门控网表的详细功耗数据后,当我深入检查每个触发器的Q/CLK比率时,仍然有一些触发器的Q/CLK比率非常低。这很奇怪。理论上,自门控应该帮助大幅提高这一比率,达到非常高的Q/CLK比值。

检查了几个触发器后,我发现有一些"热"触发器与冷触发器组合在一起形成自门控组,它们共享一个时钟门控单元。因此那些冷触发器有许多不必要的时钟脉冲,仅仅因为热触发器需要时钟。根据这一发现,我可以进行这种改进,通过某些测试识别门级仿真后的一些热触发器,然后将它们分组为每个阶段的"热触发器组",然后进行自门控。这样将热触发器与冷触发器分开,在进行自门控时不要混在一起。实际上,如果某些触发器确实非常热,我们可以禁用它们的自门控。因为在热触发器上进行自门控将消耗更多功耗。这种改进可以帮助获得更多的功耗节省。结果将在下一节展示。

5. 基于条纹的自门控

我们通常对流水线使用每级时钟门控风格。当特定阶段没有有效数据时停止时钟。并且由于流水线是逐阶段进行数据处理的,如果第一阶段没有新数据到来,我们可以使用自门控设计风格构建一个"变化检测器",然后将此变化信号传递给下一阶段作为其时钟门控使能信号。这种结构的概念如图10所示。新时钟门控器可以与每级时钟门控器合并在一起,图10仅展示了2级时钟门控器结构。

这种结构可以应用于某些"瘦"流水线,即每个阶段的触发器数量不多。对于某些胖流水线,这可能不太好。想象一下,如果第一阶段的任何一位翻转,所有后续阶段的许多触发器都必须翻转它们的时钟。对于胖流水线,我们必须在后续阶段进行自门控。实际上在重定时网表中,存在一些"条纹结构"或一些"切片",就像一块瘦流水线。我们可以将图10的想法应用到这些条纹上。对于RTL流水线,我们鼓励设计者在RTL编码期间尽早按此风格设计流水线。


Page 14

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图10:变化检测器和后续阶段时钟门控

5.1 什么是条纹

这里的"条纹"是重定时流水线网表的一部分,或者是流水线的子范围。在一个条纹中,存在若干阶段的触发器和两个阶段之间的逻辑单元。该条纹内部的单元不应与任何其他条纹有逻辑关系或时序路径。

图11:流水线中的条纹

Page 15

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

5.2 如何找到条纹

综合后,重定时网表绝对是不可读的,就像一堆沙粒一样的大量单元。仅通过阅读网表文件是不可能找到条纹的。因此我开发了一个程序来检查和寻找重定时流水线网表中的潜在条纹结构。步骤是,首先从第一阶段选取任意一个触发器,放入组S1,检查其下游端点触发器,将它们放入组S2。然后检查S2中的每个触发器,找到它们的上游起始点,添加到S1中。进行这种迭代,当S1和S2组中没有新触发器时,就找到了一个条纹。我们当然可以继续寻找下一阶段来找到条纹链,如果它确实存在的话。我检查了一些设计来寻找条纹链,但在这些网表中,第3阶段的触发器数量太大,或者说第3阶段是一个胖条纹。如前所述,胖条纹不适合使用这种"检测-变化"结构。因此在本文中,我只使用2级条纹来进行下一阶段的功耗优化。如果流水线有若干阶段,我将使用此程序为阶段1-2、3-4和5-6等寻找2级条纹。

图12:如何找到条纹

在一个大型重定时流水线的所有阶段上运行此程序后,我发现确实存在几个条纹,如图13所示。有一些瘦条纹,也有一些胖条纹。还有一些单连接,1对1,我将它们放入另一个组,在图13中显示为S1_Single/S2_Single。

图13:重定时流水线中的2级条纹

Page 16

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

5.3 如何修改网表

目前我基于2级条纹进行此操作,我在条纹的每个第一阶段进行自门控,或者说我在阶段1、3、5、7上进行自门控。然后对于每个条纹,我可以使用脚本收集几个自门控使能信号,将它们OR在一起成为"第一阶段变化"信号。我添加一个新的触发器,将其D引脚连接到此"变化"信号,然后Q引脚是该条纹中后续阶段触发器的时钟门控使能信号。这个新的时钟门控器可以与原始的每级时钟门控器单元拼接。或者另一种方式,我可以合并这两个阶段的时钟门控器。结构如图14所示。

图14:网表中的详细步骤

5.4 结果

我将这种基于条纹的自门控方法应用于两个重定时流水线,并在两个典型测试下运行功耗分析。以下表格显示了几种步骤的面积和功耗:原始综合策略(过约束)、结构布局、自门控、自门控的改进步骤,最后是基于条纹的自门控。

图15是每种方法的面积数据。可以看到第3列是结构布局和再次重定时,它可以实现最小的面积。当对所有触发器进行自门控时,面积大幅增加,显示在第4列,如果以第3列为基准进行比较,其面积增加约为30%。最后一列第6列是基于条纹的自门控,它的面积代价可以减少,面积增加约为20%。但如果与原始方法比较,自门控的面积增加3.7%,而基于条纹的自门控可以减少3.7%的面积。


Page 17

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图16是每个步骤的功耗数据。我们可以看到第3列结构布局和再次重定时可以节省约10-15%的功耗。但我对这种功耗节省不满意。在第4列中,对所有触发器进行自门控,这种方式可以大幅降低功耗,与原始第1列相比约节省40-70%。第5列是分离热触发器进行自门控的改进。我们可以看到它可以帮助再节省一点功耗。

基于条纹的自门控,在第6列中,可以实现大致相同的功耗节省,而面积代价不那么大了。这种方法可以获得更好的面积-功耗权衡。我们定义ROI比率为2:1来检查面积和功耗节省,这意味着如果面积增加百分比为A%,我们希望获得超过2*A%的功耗节省,这种变化才能被接受。如果ROI小于2:1,我们不会接受这种权衡。对于不同的芯片,ROI比率可以是可变的。对于某些移动芯片,也许我们可以接受1:1,因为在那些领域功耗节省比面积代价更敏感。

图15:每种方法的面积

Page 18

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图16:每种方法的功耗

6. 讨论与未来改进

6.1 形式验证检查

在这个大型重定时流水线上,综合过程中已经有若干步骤,同时还有若干步骤的形式验证检查。将一个大跳跃拆分为几个小步骤,这种方法几年前就被介绍过。否则对于长跳跃,Formality无法通过。

关于第一种方法结构布局,综合过程中有更多步骤。我们必须添加2到3个形式验证检查步骤,以确保每个步骤都能通过。


Page 19

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图17:每种方法的功耗

6.2 时序等价性检查

方法3基于条纹的自门控可以在面积和功耗之间获得非常好的权衡。无论做了什么样的更改,我们都需要一个检查步骤来确保不应引入任何bug。Formality可以处理自门控。但在此方法的下一步中,有一些新触发器插入到网表中。传统的Formality工具无法处理它,因为没有那些"变化"触发器的对应寄存器。我们需要一个时序等价性检查步骤来确保新网表与此更改前的网表具有相同的数据处理功能。

6.3 顶层调优

如第3.3节所述,在顶层我们希望保持重定时流水线的类似形状。因此我们需要尝试更多的调优,找到每个流水线的最佳位置,尝试不同的方向,例如从左到右或从右到左,如图18所示。在顶层我们可以有一定的灵活性来进行物理指导,例如只在某些阶段触发器上使用边界,不一定需要控制所有阶段触发器。例如第一阶段和最后阶段,它们与其他逻辑有连接,我们可以让工具找到它们的最佳位置。对于重定时流水线内部的触发器,最好控制它们以保持与在自身综合时一样好的结果。


Page 20

SNUG 2017

重定时流水线多种低功耗方法的优异权衡

图18:顶层调优

6.4 未来改进

在本文中,我只对每两个阶段进行条纹查找:1-2、3-4、5-6等。在其他重定时流水线中,如果确实存在条纹链,最好在每个条纹链上应用方法3,这样可能会进一步降低面积代价。

另一个改进在RTL端。我们发现我们的一个重定时模块中存在一些潜在的水平分割结构。最好在RTL级别分割它,重新设计为两个或更多个流水线,然后分别对每个进行重定时。换句话说,尝试设计瘦流水线,然后在每个瘦重定时流水线上应用方法3,这将有更多机会找到瘦条纹链。

7. 结论

本文介绍了重定时流水线的好处,它是流水线的高效设计风格。我还分享了一些关于如何决定适当流水线阶段数的经验、一些调优技能和技巧。

我介绍了三种降低重定时流水线功耗的主要方法。结构布局和再次重定时可以实现最小的面积,并具有一定的功耗节省,避免不同阶段路径的糟糕交叉。自门控是一种极好的方法,可以大幅降低功耗,但其面积代价相当大,时序影响也不容忽视。第三种方法,我开发了一个程序来识别网表中的条纹结构,并在奇数阶段进行自门控,为每个条纹的下一阶段触发器传递"变化"信号,从而节省面积代价,可以实现相当好的功耗节省。这种基于条纹的自门控可以在面积代价和功耗节省之间获得优异的权衡。

8. 参考文献

[1] Design Compiler user manual
[2] PTPX user manual
[3] Formality user manual
[4] VCS user manual
[5] Siloti user manual


图片索引

本文共 23 张图片,存放于 _images/ 目录。

第4页:图1 - 重定时流水线设计基础 第6页:图2 - 简单的RTL修改 第7页:图3 - 复杂重定时设计 第8页:图4 - 新布图规划和边界 第9页:图5、图6 - 触发器布局、重做重定时 第10-11页:图7、图8 - 时钟门控效率报告 第12页:图9 - 自门控结构示例 第14页:图10、图11 - 变化检测器、流水线中的条纹 第15页:图12、图13 - 如何找到条纹、2级条纹 第16页:图14 - 网表中的详细步骤 第17页:图15 - 每种方法的面积 第18页:图16 - 每种方法的功耗 第19页:图17 - 每种方法的功耗 第20页:图18 - 顶层调优