前一章讨论的技术已经成熟;工程师们使用它们已经有一段时间了,设计工具已经支持它们多年了。通过这一章,我们开始讨论更新的和针对性的方法来降低功率:功率门控和自适应电压缩放。
这两种技术都在于摆脱传统的方法,即在设计中对所有(内部)门使用单一的固定供电轨。(多年来,IO单元在大多数芯片中都有独立的电源供应)。
这种新方法最基本的形式是将芯片的内部逻辑划分成多个电压区域或功率域,每个区域都有自己的电源供给。这种方法被称为多电压设计。它是基于对现代Soc设计的认识,不同的数据块有不同的性能目标和约束条件。例如,A处理器可能需要以半导体技术允许的尽可能快速的速度运行。在这种情况下,需要一个相对较高的电源电压。另一方面,一个USB块可以以一个固定的、相对较低的频率运行,这更多的是由协议决定的,而不是底层技术。在这种情况下,一个较低的供电轨可能足以满足其时序约束,而一个较低的供电轨意味着它的动态和静态功率将更低。
一旦我们跨越了拥有单独电源的概念障碍,我们就可以考虑更复杂的电源策略:例如,我们可以为我们的处理器提供不同的伏数,这取决于它的工作负载。或者我们可以为RAM提供不同的电压——当内存未被访问时使用低压保持内存内容,以及当内存读写时使用更高电压。我们甚至可以考虑将电源电压降至零,也就是所说的功率门控。
为了便于讨论,我们提供了以下多电压策略的分类:
即使是最简单的多电压设计对于设计者来说也会存在一些基本的挑战。
当使用完全不同的供电轨在电源域之间驱动信号时,显然需要电平转换器。将信号从1V域驱动到5V域存在一个问题--1V摆幅在5V域甚至可能达不到阈值。但当今芯片中的内部电压紧密地聚集在1V附近。为什么我们需要电平转换器来处理从0.9V域到1.2V域的信号?
一个基本原因是,驱动1.2V门的0.9V信号将同时开启PMOS和PMOS网络,导致出现直通电流。这个问题将在本章的后面进行讨论。
此外,标准单元库的特点是使用干净、快速的输入,可以实现电源轨之间的连接。不满足这一要求可能导致信号在一个域中的驱动器单元和另一个电压域中的接收器之间表现出显著的上升或下降时间变差。这反过来会导致时序收敛问题,甚至导致过大的短路开关电流。
最好的解决方案是确保每个域都得到它预期的电压摆幅(以及上升和下降时间)。我们通过在任何使用不同电压的域之间提供电平转换器来实现这一目标。这种方法将任何电压波动和时序特性化问题限制在电压域的边界上,而不影响电压域的内部时序。这种干净的接口使时序收敛和设计重用更加容易。
电平转换器可以在一个不同电压轨之间提供一个有效的电压摆幅,电平转换器的设计是一个模拟设计问题。由于模拟设计的原因,这些单元通常只被设计为移动一个方向——从较高的电压到较低的电压,或者从较低的电压到更高的方向。在本章的后面,我们提供了一些示例以显示这两种类型之间的差异。
对于静态电压缩放技术,对电平转换器的限制不是问题。但对于其他形式的多电压域设计,即供电电压在运行过程中会发生变化,这确实是一个挑战。设计者必须设计和划分电路模块,使电压域与相邻域有一个定义的关系——例如“总是更高”、“总是更低”或“总是相同”。有了这个限制,就可以直接实现与适当的电平转换组件的接口。
从系统的角度来看,设计可以在两个方向上操作的接口可能显得很有吸引力,但需要非标准的实现组件和工具化。
从表面上看,使用更高电压轨输出缓冲器的电压过驱动CMOS的输入端似乎不是问题——与正常CMOS逻辑的高低电平切换相比,没有闩锁或击穿问题,只是“更好”、更快的边沿切换。
然而,为了安全时序收敛,确实需要一些专门标识的“电平向下转换”的单元。
如果库中没有提供专门的高到低电平的转换单元,那么整个库将必须重新描述,以允许精确的静态时序分析。每个逻辑门都必须被描述为一个专有的的输入电压摆幅。
如图3-1所示,高到低的电平转换器可以非常简单,基本上是串联的两个反相器。电平转换器的设计将在后面的章节中进行更详细的描述,但现在我们只是观察到,较低或目标功率域只需要一个功率轨道。
如图所示,一个从高到低的电平转换器只引入了一个缓冲延迟,因此它对时序的影响很小。
将逻辑信号从低供电轨道驱动到高电压轨道上的单元是一个主要问题。欠驱动信号会减小高电压域输入处的(信号边沿跳变对应的)上升和下降时间。这反过来又会导致更高的开关电流,降低了噪声容限。缓慢的转换时间(转换时间,此处指电平跳变时的过渡时间)意味着信号在 VT 附近花费的时间更多,导致短路(直通)电流持续时间超过需要的时间。
上述这一点(信号电平跳变的上升和下降时间减小)对于时钟树的缓冲器的插入影响尤为重要。时钟树缓冲器的插入是一个大的挑战,任何跨越电压区域边界的信号跳变沿上升和下降时间减小都会增加时钟偏斜(clock skew)。
专门设计的电平转换单元解决了这个问题。它们向更高的电压域提供快速的、全轨道的信号。它们可以用设计工具正确地建模,以实现精确的时序。
有许多设计技术,图3-2中显示了一个简单直接的设计。这种设计对低电压域信号采用插入缓冲器和反相器形式,并使用这种形式来驱动在较高电压域下工作的交叉耦合晶体管结构。
这种 “向上转换” 的电平转换器需要两条供电轨(这里说一下供电轨是什么,图3-2所示的有 VDDL 和VDDH两个供电电源,每条电源线就是一条供电轨)——共用一个地。井结构不能连接在一起,但必须独立地与供电电源相关联。
这些专门的低电平到高电平的电平转换器单元在扩展的电压范围上进行特征描述,以匹配高侧和低侧电压域的工作点。这使得能够在不同电压和操作条件之间进行精确的静态时序分析。
与高电平到低电平移位器的简单缓冲延迟相比,低电平到高电平移位器引入了显著的延迟。在时序关键块之间的宽接口的情况下——例如,不同电压源上的CPU和高速缓冲存储器之间——设计者必须考虑接口延迟和电压边界上施加的所有物理布线约束。
多电压域设计在布局方面存在很大的挑战。图3-3的示例中,两个电压域嵌入在第三个电压域内。
因为所用的电源轨(图中的VDDL)来自更低电压域,高电平到低电平的电平转换器通常放置在低电压域。如果1.2V电压域和0.9V电压域之间的距离足够小,并且单元库有足够强的缓冲器,那么驱动缓冲器可以放置在1.2V电压域。不需要额外的缓冲器。
在1.1V电压域增加缓冲器明显存在问题——缓冲器该用什么供电呢?
图3-4给出了一个可能的解决办法。缓冲器的供电轨在1.2V电压域。但这意味着1.V电压轨必定需要布线——可能是1.1V电压域的一根信号线。这种复杂的功率布线是对电压域设计自动化布局布线的一个大挑战。
图3-5所示0.9V电压域的信号需要连接至1.2V电压域。这种情况下,不论电平转换器放置在哪里,电源布线都是一个挑战。因为其需要两个电压轨,至少其中一个电压轨必须要从另一个电压域引入。由于输出驱动器相比输入级需要更多的电流,我们将电平转换器放置在1.2V电压域。
?与向下电平转换器类似的是,如果1.2V电压域和0.9V电压域之间的距离足够小,并且库中有足够强的缓冲器,那么驱动缓冲器可以放置在0.9V电压域。不需要额外的缓冲器。否则,额外的缓冲器需要放置在1.1V电压域,同样会出现上述电源布线问题。
?电平转换器不影响设计的功能;从逻辑视角来看,电平转换器只是一些缓冲器(buffer)。鉴于此,现代很多的实现工具可以在需要的地方自动插入电平转换器。RTL不要改动。
现在的许多工具都允许设计者声明一种电平转换器的放置策略——低电平到高电平的电平转换器放置在低电压域、高电压域还是中间电压域。注意输出驱动器有更高供电电流的需求;低电压电源只需为较弱的设备供电即可控制单元电路。鉴于此,我们建议电平转换器放置在目的电压域,如图3-3和3-5所示。
作为定义电平转换器策略的一部分,设计者指定了关于何时插入电平转换器的规则。设计者可以明确地指定哪些块需要电平转换器,或者设计者可以指定需要电平转换器插入的最小电压差。
高到低电平转换器的插入应考虑时序问题。如上所述,在两个不同电压区域的接口上使用标准逻辑门而不是电平转换器会导致延迟计算出错。如果两个电压域之间的电压差过大,那么这个时序误差就变得不可接受。在这种情况下,需要使用电平转换器。确切的电压差取决于单元库和设计目标。
低到高电平转换器的插入应该考虑功率和时序问题。如果两个电压域之间的电压差过大,则在较高域中的标准栅逻辑门的输入级将不会完全关闭,从而导致直通短路电流过大。
具体地说,如果电压差大于接收的PMOS晶体管的阈值电压,则该晶体管将不会完全关断。为了提供一个合理的噪声裕量(噪声容限),我们应该将这个数字填充到VDDH(更高的电源电压)的10%。因此,如果
这种情况下,为关闭接收的PMOS输入级晶体管,应该插入电平转换器。
此处,VTPMOS 是PMOS晶体管的阈值电压,VDDH和VDDL分别对应于较高和较低电压域的供电电压。
建议:
陷阱:
跨不同的电压域的时钟布线意味着它们必须通过电平转换器。这显然使时钟树综合工具的自动化复杂化了,它需要理解电平转换器,并自动插入它们到适当的位置。
随着多电平电压的缩放,时钟分布变得更加复杂。考虑一下图3-6。多电压域中的时钟缓冲器有时会以0.9V供电,有时会以1.1V供电。在哪些条件下,我们会尝试尽量减少1.2V域中相对于时钟的时钟倾斜?
解决方案是,必须对两种情况同时进行优化和时序分析,以确保两种情况都满足时序要求。
在静态电压缩放的情况下,时序分析并不比单一电压设计太复杂。它仅仅需要一个被用来描述使用的不同电压的库。然后,就可以使用适当的时序信息来执行实现和分析工具。在多电压设计的早期,这是一个问题;大多数工具和库假设整个设计都有一个固定的、恒定的电源电压。但今天,这个问题已经得到了解决,静态电压缩放对静态时序分析几乎没有什么问题。
多电平电压缩放提出了一个更大的挑战。再次考虑图3-6,采用哪个电压进行综合、布局和布线,以及多电平逻辑块的静态时序分析(STA)?
解决方案是,必须为每个操作点或者供电电压指定时序约束。在我们的示例中,我们必须为多电压块提供两组时序约束,一组为0.9V,另一组为1.1V。它们可能是不同的,因为可能有两种不同的操作模式,每种电平对应一种操作模式,可能有不同的性能目标或不同的时钟速度。
然后,这些工具必须在0.9V和1.1V的条件下使用各自的时序约束同时执行实现。只有当满足具有相同实现的两组需求时,实现(布局布线)才会完成。
对于使用多个电源的设计来说,获得不同的电压域的电源是一个挑战。每个电压缩放区域都需要一个独立的本地供电网,以及一个低阻抗电源连接到电源焊盘。
对于倒装芯片设计,这个问题在一定程度上得到了缓解,因为电源可以通过位于功率域的焊盘局部传递。对于传统芯片,功率必须来自芯片外围,系统设计者可能需要将电压区域的数量限制在那些提供显著动态功率和节能的区域。
多电压设计的功率规划在第11章中有更详细的讨论。
对于静态电压的缩放,主要的实现问题电平转换器有关,如上所述。
系统级别的主要问题是上电顺序。在大多数情况下,完全同时提供所有不同的电源是不实际的。因此,规划一个显式的上电顺序可能是有用的,以便不同的功率域以一个定义好的顺序出现,以确保正确的功能。事实上,一些IP可能需要一个特定的上电顺序。
特别是,我们需要确保所有电源域在进行复位之前完全上电。此外,CPU(s)可能需要等待芯片的其余部分上电后才能启动。
通电是一个特别复杂的情况,因为晶体振荡器和锁相环需要技术依赖的稳定和锁定时间。这些稳定时间只有在IO和SOC电源稳定后才会开始。
上电复位施密特电路是保证初始通电完成的一种方法。然后,可以使用某种形式的计时器来确定PLL和时钟在何时稳定。最后,可以启用显式握手协议来实现更复杂的DVFS功率管理。
多电平电压缩放设计有额外的限制,斜坡时间必须仔细控制,以避免电压超调或下调。由于电压在系统运行时经常发生变化,如果电压升高到高于目标电压或明显低于目标电压,系统可能会发生故障或锁定。这种斜坡控制最好通过使用信号接口对电压调节器的初始开启和随后的斜坡进行排序来实现
最后,电源控制器通常由CPU控制,这意味着电源控制软件必须与运行于CPU的其他系统软件集成在一起。
第三章翻译结束~?